From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrei Borzenkov Subject: Re: [PATCH v2] F2FS support Date: Sat, 2 May 2015 20:15:45 +0300 Message-ID: <20150502201545.1ac3fead@opensuse.site> References: <1427185140-41120-1-git-send-email-jaegeuk@kernel.org> <20150403224908.GB25673@jaegeuk-mac02.mot.com> Reply-To: The development of GNU GRUB Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20150403224908.GB25673@jaegeuk-mac02.mot.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org Sender: grub-devel-bounces+gcbgd-grub-devel=m.gmane.org@gnu.org To: Jaegeuk Kim Cc: grub-devel@gnu.org, linux-f2fs-devel@lists.sourceforge.net List-Id: linux-f2fs-devel.lists.sourceforge.net U29ycnkgZm9yIGRlbGF5LgoKCtCSIEZyaSwgMyBBcHIgMjAxNSAxNTo0OTowOCAtMDcwMApKYWVn ZXVrIEtpbSA8amFlZ2V1a0BrZXJuZWwub3JnPiDQv9C40YjQtdGCOgoKPiAKPiBUaGlzIHBhdGNo IGNoYW5nZXM6Cj4gCj4gICogTWFrZWZpbGUudXRpbC5kZWY6IEFkZCBmMmZzLmMuCj4gICogZG9j L2dydWIudGV4aTogQWRkIGYyZnMgZGVzY3JpcHRpb24uCj4gICogZ3J1Yi1jb3JlL01ha2VmaWxl LmNvcmUuZGVmOiBBZGQgZjJmcyBtb2R1bGUuCj4gICogZ3J1Yi1jb3JlL2ZzL2YyZnMuYzogTmV3 IGZpbGUuCj4gICogdGVzdHMvZjJmc190ZXN0LmluOiBOZXcgZmlsZS4KPiAgKiB0ZXN0cy91dGls L2dydWItZnMtdGVzdGVyLmluOiBBZGQgZjJmcyByZXF1aXJlbWVudHMuCj4gCgpEcm9wIGZpbGUg bGlzdCwgaXQgaXMgYXZhaWxhYmxlIGZyb20gZ2l0LgoKLi4uCj4gZGlmZiAtLWdpdCBhL2dydWIt Y29yZS9mcy9mMmZzLmMgYi9ncnViLWNvcmUvZnMvZjJmcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwLi5lNmI4Mzg2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2dydWIt Y29yZS9mcy9mMmZzLmMKPiArCi4uLgo+ICsjZGVmaW5lIEpFTlRSWV9TSVpFCQkxMwoKc2l6ZW9m IChzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9qZW50KSwgcmlnaHQ/CgouLi4KPiArCj4gKyNkZWZpbmUg TkFUX0VOVFJZX1NJWkUgCQk5CgpUaGF0J3Mgc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9mMmZzX25hdF9l bnRyeSk/CgouLi4KPiArI2RlZmluZSB2ZXJfYWZ0ZXIgKGEsIGIpCSgobG9uZyBsb25nKSgoYSkg LSAoYikpID4gMCkKClRoaXMgbWFjcm8gaXMgbm90IHVzZWQgYW55d2hlcmUKCj4gKyNkZWZpbmUg RjJGU19OQU1FX0xFTgkJMjU1Cj4gKyNkZWZpbmUgRjJGU19TTE9UX0xFTgkJOAo+ICsjZGVmaW5l IE5SX0RFTlRSWV9JTl9CTE9DSwkyMTQKPiArI2RlZmluZSBTSVpFX09GX0RJUl9FTlRSWQkxMQkv KiBieSBieXRlICovCgpzaXplb2YgKHN0cnVjdCBncnViX2YyZnNfZGlyX2VudHJ5KT8KCi4uLgo+ ICtlbnVtCj4gKyAgewo+ICsgICAgRklfSU5MSU5FX1hBVFRSID0gOSwKPiArICAgIEZJX0lOTElO RV9EQVRBID0gMTAsCj4gKyAgICBGSV9JTkxJTkVfREVOVFJZID0gMTEsCj4gKyAgICBGSV9EQVRB X0VYSVNUID0gMTgsCj4gKyAgfTsKPiArCgpUaGlzIGRvZXMgbm90IG1hdGNoIHN1YnNlcXVlbnQg dXNhZ2U7IHlvdSB1c2UgdGhlbSB3aXRoIGlfaW5saW5lLCBub3QKaV9mbGFncy4KCi4uLgo+ICsK PiArc3RhdGljIGlubGluZSBpbnQKPiArZ3J1Yl9nZW5lcmljX3Rlc3RfYml0IChpbnQgbnIsIGNv bnN0IGdydWJfdWludDMyX3QgKmFkZHIpCj4gK3sKPiArICByZXR1cm4gMVVMICYgKGFkZHJbbnIg LyAzMl0gPj4gKG5yICYgMzEpKTsKPiArfQo+ICsKClRoaXMgaXMgdXNlZCBvbmx5IGluIGdydWJf ZjJmc19jaGVja19kZW50cmllcygpIHdpdGggb24tZGlzayBiaXRtYXAuCk9uLWRpc2sgYml0bWFw IGlzIGxpdHRsZS1lbmRpYW47IGNvZGUgaXMgd3Jvbmcgb24gYmlnLWVuZGlhbiBzeXN0ZW0uCgpB bHNvIGRlbnRyeV9iaXRtYXAgaXMgbm90IG11bHRpcGxlIG9mIDQgYnl0ZXMgYXMgeW91IHJlcGxp ZWQgZWFybGllci4KWW91IHNob3VsZCByYXRoZXIgY29tcHV0ZSBjb3JyZWN0IGJ5dGUgYWRkcmVz cyBpbnN0ZWFkIGFuZCBtYWtlIGFsbApwYXJhbWV0ZXJzIGdydWJfdWludDhfdCAqLiBUaGlzIHdp bGwgYWxzbyBhdm9pZCBhbGwgdGhvc2UgY2FzdHMgbGF0ZXIuCgpUaGF0J3MgcmVhbGx5IGp1c3QK CiAgZ3J1Yl91aW50OF90ICphZGRyOwoKICBieXRlID0gbnIgPj4gMzsKI2lmZGVmIFdPUkRTX0JJ R0VORElBTgogIGJ5dGUgXj0gMzsKI2VuZGlmCiAgcmV0dXJuIGFkZHJbYnl0ZV0gJiAoMSA8PCBu ciAmIDcpOwoKLi4uCj4gKwo+ICtzdGF0aWMgaW5saW5lIGludAo+ICtfX2lub2RlX2lubGluZV9z ZXQgKHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlLCBpbnQgZmxhZykKPiArewo+ICsgIHJl dHVybiBpbm9kZS0+aV9pbmxpbmUgJiBmbGFnOwo+ICt9Cj4gKwoKRnVuY3Rpb24gaXMgY29tcGxl dGVseSByZWR1bmRhbnQgaWYgeW91IHJlYWxseSB3YW50IHRvIGNoZWNrIGlfaW5saW5lOwpqdXN0 IHVzZSBpdCBkaXJlY3RseS4gVGhlbiBkZWZpbml0aW9uIG9mIGZsYWdzIGlzIHdyb25nLgoKSWYg eW91IG1lYW4gaW5vZGUtPmlfZmxhZ3MgKGFzIGltcGxpZWQgYnkgcGFzc2VkIGZsYWcgdmFsdWVz KSB0aGlzCnNob3VsZCBvYnZpb3VzbHkgYmUgKDEgPDwgZmxhZykgYXMgYWRqdXN0ZWQgYnkgc3lz dGVtIGJ5dGUgb3JkZXIuCgpPdXQgb2YgY3VyaW9zaXR5IC0gaXQgYXBwZWFycyB0aG9zZSBmbGFn cyBhcmUgcHJlc2VudCBpbiBib3RoIGlfaW5saW5lCmFuZCBpX2ZsYWdzOyB3aGljaCBvbmUgaXMg YXV0aG9yaXRhdGl2ZT8KCj4gK3N0YXRpYyBpbmxpbmUgZ3J1Yl91aW50MzJfdAo+ICtfX25hdF9i aXRtYXBfc2l6ZSAoc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhKQo+ICt7Cj4gKyAgc3RydWN0 IGdydWJfZjJmc19jaGVja3BvaW50ICpja3B0ID0gJmRhdGEtPmNrcHQ7Cj4gKwo+ICsgIHJldHVy biBncnViX2xlX3RvX2NwdTMyIChja3B0LT5uYXRfdmVyX2JpdG1hcF9ieXRlc2l6ZSk7Cj4gK30K ClRoaXMgZnVuY3Rpb24gaXMgbm90IHVzZWQgYW55d2hlcmUuCgouLi4KPiArCj4gK3N0YXRpYyBp bmxpbmUgZ3J1Yl91aW50MzJfdAo+ICtfX2dldF9ub2RlX2lkIChzdHJ1Y3QgZ3J1Yl9mMmZzX25v ZGUgKnJuLCBpbnQgb2ZmLCBpbnQgaSkKPiArewo+ICsgIGlmIChpKQoKSnVkZ2luZyBieSB1c2Fn ZSBzb21ldGhpbmcgbGlrZSAiZmlyc3QiIHdvdWxkIHByb2JhYmx5IGJlIG1vcmUKYXBwcm9wcmlh dGUuCgo+ICsgICAgcmV0dXJuIGdydWJfbGVfdG9fY3B1MzIgKHJuLT5pLmlfbmlkW29mZiAtIE5P REVfRElSMV9CTE9DS10pOwo+ICsgIHJldHVybiBncnViX2xlX3RvX2NwdTMyIChybi0+aW4ubmlk W29mZl0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGdydWJfZXJyX3QKPiArZ3J1Yl9mMmZz X2Jsb2NrX3JlYWQgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwgZ3J1Yl91aW50MzJfdCBi bGthZGRyLCB2b2lkICpidWYpCj4gK3sKPiArICByZXR1cm4gZ3J1Yl9kaXNrX3JlYWQgKGRhdGEt PmRpc2ssIGJsa2FkZHIgPDwgRjJGU19CTEtfU0VDX0JJVFMsCgpJIHN1c3BlY3QgY292ZXJpdHkg d2lsbCBjb21wbGFpbiBhYm91dCBvdmVyZmxvdyBoZXJlOyBjYXN0IG9mIGJsa2FkZHIKdG8gZ3J1 Yl9kaXNrX2FkZHJfdCBzaG91bGQgc2lsZW5jZSBpdC4KCj4gKwkJCQkJMCwgRjJGU19CTEtTSVpF LCBidWYpOwo+ICt9Cj4gKwouLi4KPiArCj4gK3N0YXRpYyBncnViX2Vycl90CgpOb3Qgc3VyZSBp ZiBpdCBpcyBuZWVkZWQgaGVyZTsgc2VlIGNvbW1lbnQgYmVsb3cgYXQgY2FsbGVyLgoKPiArZ3J1 Yl9mMmZzX3JlYWRfc2IgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwgZ3J1Yl91aW50NjRf dCBvZmZzZXQpCj4gK3sKPiArICBncnViX2Rpc2tfdCBkaXNrID0gZGF0YS0+ZGlzazsKPiArICBn cnViX2Vycl90IGVycjsKPiArCj4gKyAgLyogUmVhZCBmaXJzdCBzdXBlciBibG9jay4gKi8KPiAr ICBlcnIgPSBncnViX2Rpc2tfcmVhZCAoZGlzaywgb2Zmc2V0ID4+IEdSVUJfRElTS19TRUNUT1Jf QklUUywgMCwKCk1ha2UgcGFyYW1ldGVyIGdydWJfZGlza19hZGRyX3QgYW5kIGNvbXB1dGUgaXQg aW4gY2FsbGVyLiBJdCBpcwpjb25zdGFudCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wdXRlIGl0 IGF0IHJ1biB0aW1lLgoKPiArCQkJc2l6ZW9mIChkYXRhLT5zYmxvY2spLCAmZGF0YS0+c2Jsb2Nr KTsKPiArICBpZiAoZXJyKQo+ICsgICAgcmV0dXJuIGVycjsKPiArCj4gKyAgaWYgKGdydWJfZjJm c19zYW5pdHlfY2hlY2tfc2IgKCZkYXRhLT5zYmxvY2spKQo+ICsgICAgZXJyID0gR1JVQl9FUlJf QkFEX0ZTOwo+ICsKPiArICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqCj4g K3ZhbGlkYXRlX2NoZWNrcG9pbnQgKHN0cnVjdCBncnViX2YyZnNfZGF0YSAqZGF0YSwgZ3J1Yl91 aW50MzJfdCBjcF9hZGRyLAo+ICsJCQkJCQlncnViX3VpbnQ2NF90ICp2ZXJzaW9uKQo+ICt7Cj4g KyAgdm9pZCAqY3BfcGFnZV8xLCAqY3BfcGFnZV8yOwo+ICsgIHN0cnVjdCBncnViX2YyZnNfY2hl Y2twb2ludCAqY3BfYmxvY2s7Cj4gKyAgZ3J1Yl91aW50NjRfdCBjdXJfdmVyc2lvbiA9IDAsIHBy ZV92ZXJzaW9uID0gMDsKPiArICBncnViX3VpbnQzMl90IGNyYyA9IDA7Cj4gKyAgZ3J1Yl91aW50 MzJfdCBjcmNfb2Zmc2V0Owo+ICsgIGdydWJfZXJyX3QgZXJyOwo+ICsKPiArICAvKiBSZWFkIHRo ZSAxc3QgY3AgYmxvY2sgaW4gdGhpcyBDUCBwYWNrICovCj4gKyAgY3BfcGFnZV8xID0gZ3J1Yl9t YWxsb2MgKEYyRlNfQkxLU0laRSk7Cj4gKyAgaWYgKCFjcF9wYWdlXzEpCj4gKyAgICByZXR1cm4g TlVMTDsKPiArCj4gKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2NrX3JlYWQgKGRhdGEsIGNwX2FkZHIs IGNwX3BhZ2VfMSk7Cj4gKyAgaWYgKGVycikKPiArICAgIGdvdG8gaW52YWxpZF9jcDE7Cj4gKwo+ ICsgIGNwX2Jsb2NrID0gKHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqKWNwX3BhZ2VfMTsK PiArICBjcmNfb2Zmc2V0ID0gZ3J1Yl9sZV90b19jcHUzMiAoY3BfYmxvY2stPmNoZWNrc3VtX29m ZnNldCk7Cj4gKyAgaWYgKGNyY19vZmZzZXQgPj0gRjJGU19CTEtTSVpFKQo+ICsgICAgZ290byBp bnZhbGlkX2NwMTsKPiArCj4gKyAgY3JjID0gZ3J1Yl9sZV90b19jcHUzMiAoKihncnViX3VpbnQz Ml90ICopKChjaGFyICopY3BfYmxvY2sgKyBjcmNfb2Zmc2V0KSk7CgpJIHVuZGVyc3RhbmQgdGhh dCBpdCAvc2hvdWxkLyBiZSBoYXJkY29kZWQgdG8gNDA5MiwgYnV0IHRoZW4gcGxlYXNlCmVpdGhl ciBjaGVjayB0aGF0IGNyY19vZmZzZXQgKmlzKiA0MDkyIGJlZm9yZSBvciB1c2UKZ3J1Yl9nZXRf dW5hbGlnbmVkLiBPdGhlcndpc2UgaXQgY3Jhc2hlcyBvbiBhcmNocyB0aGF0IGRvIG5vdCBzdXBw b3J0CnVuYWxpZ25lZCBhY2Nlc3MuCgo+ICsgIGlmICghZ3J1Yl9mMmZzX2NyY192YWxpZCAoY3Jj LCBjcF9ibG9jaywgY3JjX29mZnNldCkpCj4gKyAgICBnb3RvIGludmFsaWRfY3AxOwo+ICsKPiAr ICBwcmVfdmVyc2lvbiA9IGdydWJfbGVfdG9fY3B1NjQgKGNwX2Jsb2NrLT5jaGVja3BvaW50X3Zl cik7Cj4gKwo+ICsgIC8qIFJlYWQgdGhlIDJuZCBjcCBibG9jayBpbiB0aGlzIENQIHBhY2sgKi8K PiArICBjcF9wYWdlXzIgPSBncnViX21hbGxvYyAoRjJGU19CTEtTSVpFKTsKPiArICBpZiAoIWNw X3BhZ2VfMikKPiArICAgIGdvdG8gaW52YWxpZF9jcDE7Cj4gKwo+ICsgIGNwX2FkZHIgKz0gZ3J1 Yl9sZV90b19jcHUzMiAoY3BfYmxvY2stPmNwX3BhY2tfdG90YWxfYmxvY2tfY291bnQpIC0gMTsK PiArCj4gKyAgZXJyID0gZ3J1Yl9mMmZzX2Jsb2NrX3JlYWQgKGRhdGEsIGNwX2FkZHIsIGNwX3Bh Z2VfMik7Cj4gKyAgaWYgKGVycikKPiArICAgIGdvdG8gaW52YWxpZF9jcDI7Cj4gKwo+ICsgIGNw X2Jsb2NrID0gKHN0cnVjdCBncnViX2YyZnNfY2hlY2twb2ludCAqKWNwX3BhZ2VfMjsKPiArICBj cmNfb2Zmc2V0ID0gZ3J1Yl9sZV90b19jcHUzMiAoY3BfYmxvY2stPmNoZWNrc3VtX29mZnNldCk7 Cj4gKyAgaWYgKGNyY19vZmZzZXQgPj0gRjJGU19CTEtTSVpFKQo+ICsgICAgZ290byBpbnZhbGlk X2NwMjsKPiArCj4gKyAgY3JjID0gZ3J1Yl9sZV90b19jcHUzMiAoKihncnViX3VpbnQzMl90ICop KChjaGFyICopY3BfYmxvY2sgKyBjcmNfb2Zmc2V0KSk7CgpEaXR0by4KCj4gKyAgaWYgKCFncnVi X2YyZnNfY3JjX3ZhbGlkIChjcmMsIGNwX2Jsb2NrLCBjcmNfb2Zmc2V0KSkKPiArICAgIGdvdG8g aW52YWxpZF9jcDI7Cj4gKwo+ICsgIGN1cl92ZXJzaW9uID0gZ3J1Yl9sZV90b19jcHU2NCAoY3Bf YmxvY2stPmNoZWNrcG9pbnRfdmVyKTsKPiArICBpZiAoY3VyX3ZlcnNpb24gPT0gcHJlX3ZlcnNp b24pCj4gKyAgICB7Cj4gKyAgICAgICp2ZXJzaW9uID0gY3VyX3ZlcnNpb247Cj4gKyAgICAgIGdy dWJfZnJlZSAoY3BfcGFnZV8yKTsKPiArICAgICAgcmV0dXJuIGNwX3BhZ2VfMTsKPiArICAgIH0K PiArCj4gK2ludmFsaWRfY3AyOgo+ICsgIGdydWJfZnJlZSAoY3BfcGFnZV8yKTsKPiAraW52YWxp ZF9jcDE6Cj4gKyAgZ3J1Yl9mcmVlIChjcF9wYWdlXzEpOwo+ICsgIHJldHVybiBOVUxMOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX2YyZnNfcmVhZF9jcCAoc3RydWN0IGdy dWJfZjJmc19kYXRhICpkYXRhKQo+ICt7Cj4gKyAgdm9pZCAqY3AxLCAqY3AyLCAqY3VyX3BhZ2U7 Cj4gKyAgZ3J1Yl91aW50NjRfdCBjcDFfdmVyc2lvbiA9IDAsIGNwMl92ZXJzaW9uID0gMDsKPiAr ICBncnViX3VpbnQ2NF90IGNwX3N0YXJ0X2Jsa19ubzsKPiArCj4gKyAgLyoKPiArICAgKiBGaW5k aW5nIG91dCB2YWxpZCBjcCBibG9jayBpbnZvbHZlcyByZWFkIGJvdGgKPiArICAgKiBzZXRzIChj cCBwYWNrMSBhbmQgY3AgcGFjayAyKQo+ICsgICAqLwo+ICsgIGNwX3N0YXJ0X2Jsa19ubyA9IGRh dGEtPmNwX2Jsa2FkZHI7Cj4gKyAgY3AxID0gdmFsaWRhdGVfY2hlY2twb2ludCAoZGF0YSwgY3Bf c3RhcnRfYmxrX25vLCAmY3AxX3ZlcnNpb24pOwo+ICsgIGlmICghY3AxICYmIGdydWJfZXJybm8p Cj4gKyAgICAgIHJldHVybiBncnViX2Vycm5vOwo+ICsKPiArICAvKiBUaGUgc2Vjb25kIGNoZWNr cG9pbnQgcGFjayBzaG91bGQgc3RhcnQgYXQgdGhlIG5leHQgc2VnbWVudCAqLwo+ICsgIGNwX3N0 YXJ0X2Jsa19ubyArPSBkYXRhLT5ibG9ja3NfcGVyX3NlZzsKPiArICBjcDIgPSB2YWxpZGF0ZV9j aGVja3BvaW50IChkYXRhLCBjcF9zdGFydF9ibGtfbm8sICZjcDJfdmVyc2lvbik7Cj4gKyAgaWYg KCFjcDIgJiYgZ3J1Yl9lcnJubykKPiArICAgIHsKPiArICAgICAgZ3J1Yl9mcmVlIChjcDEpOwo+ ICsgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPiArICAgIH0KPiArCj4gKyAgaWYgKGNwMSAmJiBj cDIpCj4gKyAgICBjdXJfcGFnZSA9IChjcDJfdmVyc2lvbiA+IGNwMV92ZXJzaW9uKSA/IGNwMiA6 IGNwMTsKPiArICBlbHNlIGlmIChjcDEpCj4gKyAgICBjdXJfcGFnZSA9IGNwMTsKPiArICBlbHNl IGlmIChjcDIpCj4gKyAgICBjdXJfcGFnZSA9IGNwMjsKPiArICBlbHNlCj4gKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZTLCAibm8gY2hlY2twb2ludHNcbiIpOwoKVHJhaWxp bmcgIlxuIiBpcyBub3QgbmVlZGVkLgoKPiArCj4gKyAgZ3J1Yl9tZW1jcHkgKCZkYXRhLT5ja3B0 LCBjdXJfcGFnZSwgRjJGU19CTEtTSVpFKTsKPiArCj4gKyAgZ3J1Yl9mcmVlIChjcDEpOwo+ICsg IGdydWJfZnJlZSAoY3AyKTsKPiArICByZXR1cm4gMDsKPiArfQo+ICsKLi4uCj4gKwo+ICtzdGF0 aWMgc3RydWN0IGdydWJfZjJmc19kYXRhICoKPiArZ3J1Yl9mMmZzX21vdW50IChncnViX2Rpc2tf dCBkaXNrKQo+ICt7Cj4gKyAgc3RydWN0IGdydWJfZjJmc19kYXRhICpkYXRhOwo+ICsgIGdydWJf ZXJyX3QgZXJyOwo+ICsKPiArICBkYXRhID0gZ3J1Yl96YWxsb2MgKHNpemVvZiAoKmRhdGEpKTsK CklzIGl0IG5lZWRlZCB0byBiZSB6YWxsb2M/IFN0cnVjdHVyZSBpcyBsYXJnZSBhbmQgaXQgcnVu cyBldmVyeSB0aW1lCmZpbGUgaXMgYWNjZXNzZWQuIE1vc3Qgb2YgaXQgaXMgaW1tZWRpYXRlbHkg b3ZlcndyaXR0ZW4sIG1heSBiZQpleHBsaWNpdGx5IGluaXRpYWxpemUgd2hhdCByZW1haW5zPwoK PiArICBpZiAoIWRhdGEpCj4gKyAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgZGF0YS0+ZGlzayA9 IGRpc2s7Cj4gKwo+ICsgIGVyciA9IGdydWJfZjJmc19yZWFkX3NiIChkYXRhLCBGMkZTX1NVUEVS X09GRlNFVCk7Cj4gKyAgaWYgKGVycikKPiArICAgIHsKPiArICAgICAgZXJyID0gZ3J1Yl9mMmZz X3JlYWRfc2IgKGRhdGEsIEYyRlNfQkxLU0laRSArIEYyRlNfU1VQRVJfT0ZGU0VUKTsKCkFzIG1l bnRpb25lZCBqdXN0IGNvbXB1dGUgZGlzayBhZGRyZXNzIGhlcmUsIGl0IGlzIHN0YXRpYy4KCj4g KyAgICAgIGlmIChlcnIpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0ZTLCAibm90IGEgRjJGUyBmaWxlc3lzdGVtIChubyBzdXBlcmJsb2NrKSIpOwo+ ICsgICAgICAgICAgZ290byBmYWlsOwo+ICsJfQo+ICsgICAgfQoKWW91IHNob3VsZCBjaGVjayBm b3IgZXJyICE9IEdSVUJfRVJSX0JBRF9GUyBoZXJlLCBvdGhlcndpc2UgZXJyb3IgZnJvbQpncnVi X2Rpc2tfcmVhZCBpcyBsb3N0LiBBbHRlcm5hdGl2ZWx5IGp1c3QgcmV0dXJuIDAvMSBmcm9tIHJl YWRfc2IsIHNvCnRoYXQKCmlmIChncnViX2YyZnNfcmVhZF9zYikKICBpZiAoZ3J1Yl9mMmZzX3Jl YWRfc2IpCiAgICBpZiAoZ3J1Yl9lcnJubyA9PSBHUlVCX0VSUl9OT05FKQogICAgICBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRlMsIC4uLikKICAgIGdvdG8gZmFpbAoKPiArCj4gKyAgZGF0YS0+ cm9vdF9pbm8gPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2sucm9vdF9pbm8pOwo+ICsg IGRhdGEtPmNwX2Jsa2FkZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5zYmxvY2suY3BfYmxr YWRkcik7Cj4gKyAgZGF0YS0+bmF0X2Jsa2FkZHIgPSBncnViX2xlX3RvX2NwdTMyIChkYXRhLT5z YmxvY2submF0X2Jsa2FkZHIpOwo+ICsgIGRhdGEtPmJsb2Nrc19wZXJfc2VnID0gMSA8PAo+ICsJ CWdydWJfbGVfdG9fY3B1MzIgKGRhdGEtPnNibG9jay5sb2dfYmxvY2tzX3Blcl9zZWcpOwo+ICsK PiArICBlcnIgPSBncnViX2YyZnNfcmVhZF9jcCAoZGF0YSk7Cj4gKyAgaWYgKGVycikKPiArICAg IGdvdG8gZmFpbDsKPiArCj4gKyAgZGF0YS0+bmF0X2JpdG1hcCA9IF9fbmF0X2JpdG1hcF9wdHIg KGRhdGEpOwo+ICsKPiArICBlcnIgPSBnZXRfbmF0X2pvdXJuYWwgKGRhdGEpOwo+ICsgIGlmIChl cnIpCj4gKyAgICBnb3RvIGZhaWw7Cj4gKwo+ICsgIGRhdGEtPmRpcm9wZW4uZGF0YSA9IGRhdGE7 Cj4gKyAgZGF0YS0+ZGlyb3Blbi5pbm8gPSBkYXRhLT5yb290X2lubzsKPiArICBkYXRhLT5kaXJv cGVuLmlub2RlX3JlYWQgPSAxOwo+ICsgIGRhdGEtPmlub2RlID0gJmRhdGEtPmRpcm9wZW4uaW5v ZGU7Cj4gKwo+ICsgIGVyciA9IGdydWJfZjJmc19yZWFkX25vZGUgKGRhdGEsIGRhdGEtPnJvb3Rf aW5vLCBkYXRhLT5pbm9kZSk7Cj4gKyAgaWYgKGVycikKPiArICAgIGdvdG8gZmFpbDsKPiArCj4g KyAgcmV0dXJuIGRhdGE7Cj4gKwo+ICtmYWlsOgo+ICsgIGdydWJfZnJlZSAoZGF0YSk7Cj4gKyAg cmV0dXJuIE5VTEw7Cj4gK30KPiArCi4uLgo+ICsKPiArc3RhdGljIGdydWJfc3NpemVfdAo+ICtn cnViX2YyZnNfcmVhZF9maWxlIChncnViX2ZzaGVscF9ub2RlX3Qgbm9kZSwKPiArCQkgICAgICAg Z3J1Yl9kaXNrX3JlYWRfaG9va190IHJlYWRfaG9vaywgdm9pZCAqcmVhZF9ob29rX2RhdGEsCj4g KwkJICAgICAgIGdydWJfb2ZmX3QgcG9zLCBncnViX3NpemVfdCBsZW4sIGNoYXIgKmJ1ZikKPiAr ewo+ICsgIHN0cnVjdCBncnViX2YyZnNfaW5vZGUgKmlub2RlID0gJihub2RlLT5pbm9kZS5pKTsK CldoeSBleHRyYSBwYXJlbnM/Cgo+ICsgIGdydWJfb2ZmX3QgZmlsZXNpemUgPSBncnViX2YyZnNf ZmlsZV9zaXplIChpbm9kZSk7Cj4gKyAgY2hhciAqaW5saW5lX2FkZHIgPSBfX2lubGluZV9hZGRy IChpbm9kZSk7Cj4gKwo+ICsgIGlmIChfX2lub2RlX2lubGluZV9zZXQgKCZub2RlLT5pbm9kZS5p LCBGSV9JTkxJTkVfREFUQSkpCkp1c3QgaW5vZGUsIHlvdSBhbHJlYWR5IGhhdmUgaXQuCgo+ICsg ICAgewo+ICsgICAgICBpZiAocG9zID4gZmlsZXNpemUgfHwgZmlsZXNpemUgPiBNQVhfSU5MSU5F X0RBVEEpCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VU X09GX1JBTkdFLAo+ICsJCSAgTl8oImF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmls ZSIpKTsKCklmIGZpbGVzaXplID4gTUFYX0lOTElORV9EQVRBIGF0IHRoaXMgcG9pbnQgd2UgcmVh bGx5IGRlYWwgd2l0aApjb3JydXB0ZWQgZmlsZXN5c3RlbSBzbyB0aGlzIHNob3VsZCBiZSBHUlVC X0VSUl9CQURfRlMuCgo+ICsgICAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgICAgIH0KPiArICAg ICAgaWYgKHBvcyArIGxlbiA+IGZpbGVzaXplKQoKbGVuID4gZmlsZXNpemUgLSBwb3MgaXMgcHJv YmFibHkgbW9yZSBjb3Zlcml0eS1mcmllbmRseS4KCj4gKyAgICAgICAgbGVuID0gZmlsZXNpemUg LSBwb3M7Cj4gKwo+ICsgICAgICBncnViX21lbWNweSAoYnVmICsgcG9zLCBpbmxpbmVfYWRkciAr IHBvcywgbGVuKTsKPiArICAgICAgcmV0dXJuIGxlbjsKPiArICAgIH0KPiArCj4gKyAgcmV0dXJu IGdydWJfZnNoZWxwX3JlYWRfZmlsZSAobm9kZS0+ZGF0YS0+ZGlzaywgbm9kZSwKPiArCQkJCXJl YWRfaG9vaywgcmVhZF9ob29rX2RhdGEsCj4gKwkJCQlwb3MsIGxlbiwgYnVmLCBncnViX2YyZnNf Z2V0X2Jsb2NrLAo+ICsJCQkJZmlsZXNpemUsCj4gKwkJCQlGMkZTX0JMS19TRUNfQklUUywgMCk7 Cj4gK30KPiArCi4uLgo+ICsKPiArc3RhdGljIGludAo+ICtncnViX2YyZnNfY2hlY2tfZGVudHJp ZXMgKHN0cnVjdCBncnViX2YyZnNfZGlyX2l0ZXJfY3R4ICpjdHgpCj4gK3sKPiArICBzdHJ1Y3Qg Z3J1Yl9mc2hlbHBfbm9kZSAqZmRpcm87Cj4gKyAgaW50IGk7Cj4gKwo+ICsgIGZvciAoaSA9IDA7 IGkgPCBjdHgtPm1heDspCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIgKmZpbGVuYW1lOwo+ICsgICAg ICBlbnVtIGdydWJfZnNoZWxwX2ZpbGV0eXBlIHR5cGUgPSBHUlVCX0ZTSEVMUF9VTktOT1dOOwo+ ICsgICAgICBlbnVtIEZJTEVfVFlQRSBmdHlwZTsKPiArICAgICAgaW50IG5hbWVfbGVuOwo+ICsg ICAgICBpbnQgcmV0Owo+ICsKPiArICAgICAgaWYgKGdydWJfZ2VuZXJpY190ZXN0X2JpdCAoaSwg Y3R4LT5iaXRtYXApID09IDApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgaSsrOwo+ICsgICAg ICAgICAgY29udGludWU7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgZnR5cGUgPSBjdHgtPmRl bnRyeVtpXS5maWxlX3R5cGU7Cj4gKyAgICAgIG5hbWVfbGVuID0gZ3J1Yl9sZV90b19jcHUxNiAo Y3R4LT5kZW50cnlbaV0ubmFtZV9sZW4pOwo+ICsgICAgICBmaWxlbmFtZSA9IGdydWJfemFsbG9j IChuYW1lX2xlbiArIDEpOwpJdCBpcyBvdmVyd3JpdHRlbiBvbiBuZXh0IGxpbmUsIGRvIHlvdSBy ZWFsbHkgbmVlZCBncnViX3phbGxvYyBvbmx5IGZvcgp0aGUgdHJhaWxpbmcgemVybz8KCj4gKyAg ICAgIGlmICghZmlsZW5hbWUpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgICBncnVi X21lbWNweSAoZmlsZW5hbWUsIGN0eC0+ZmlsZW5hbWVbaV0sIG5hbWVfbGVuKTsKPiArCj4gKyAg ICAgIGZkaXJvID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoc3RydWN0IGdydWJfZnNoZWxwX25vZGUp KTsKPiArICAgICAgaWYgKCFmZGlybykKPiArICAgICAgICB7Cj4gKyAgICAgICAgICBncnViX2Zy ZWUoZmlsZW5hbWUpOwo+ICsgICAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICAgICAgfQo+ICsKPiAr ICAgICAgaWYgKGZ0eXBlID09IEYyRlNfRlRfRElSKQo+ICsgICAgICAgIHR5cGUgPSBHUlVCX0ZT SEVMUF9ESVI7Cj4gKyAgICAgIGVsc2UgaWYgKGZ0eXBlID09IEYyRlNfRlRfU1lNTElOSykKPiAr ICAgICAgICB0eXBlID0gR1JVQl9GU0hFTFBfU1lNTElOSzsKPiArICAgICAgZWxzZSBpZiAoZnR5 cGUgPT0gRjJGU19GVF9SRUdfRklMRSkKPiArICAgICAgICB0eXBlID0gR1JVQl9GU0hFTFBfUkVH Owo+ICsKPiArICAgICAgZmRpcm8tPmRhdGEgPSBjdHgtPmRhdGE7Cj4gKyAgICAgIGZkaXJvLT5p bm8gPSBncnViX2xlX3RvX2NwdTMyIChjdHgtPmRlbnRyeVtpXS5pbm8pOwo+ICsgICAgICBmZGly by0+aW5vZGVfcmVhZCA9IDA7Cj4gKwo+ICsgICAgICByZXQgPSBjdHgtPmhvb2sgKGZpbGVuYW1l LCB0eXBlLCBmZGlybywgY3R4LT5ob29rX2RhdGEpOwo+ICsgICAgICBncnViX2ZyZWUoZmlsZW5h bWUpOwo+ICsgICAgICBpZiAocmV0KQo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgICAg aSArPSAobmFtZV9sZW4gKyBGMkZTX1NMT1RfTEVOIC0gMSkgLyBGMkZTX1NMT1RfTEVOOwo+ICsg ICAgfQo+ICsgICAgcmV0dXJuIDA7Cj4gK30KPiArCi4uLgo+ICsKPiArc3RhdGljIHZvaWQKPiAr Z3J1Yl9mMmZzX3VuaWNvZGVfdG9fYXNjaWkgKGdydWJfdWludDhfdCAqb3V0X2J1ZiwgZ3J1Yl91 aW50MTZfdCAqaW5fYnVmKQo+ICt7Cj4gKyAgZ3J1Yl91aW50MTZfdCAqcGNoVGVtcFB0ciA9IGlu X2J1ZjsKPiArICBncnViX3VpbnQ4X3QgKnB3VGVtcFB0ciA9IG91dF9idWY7Cj4gKwo+ICsgIHdo aWxlICgqcGNoVGVtcFB0ciAhPSAnXDAnKQo+ICsgIHsKPiArICAgICpwd1RlbXBQdHIgPSAoZ3J1 Yl91aW50OF90KSAqcGNoVGVtcFB0cjsKClRoaXMgaXMgbm90IGJ5dGUgb3JkZXIgc2FmZSBhbmQg aXQgZG9lcyBub3QgY29udmVydCB0byBBU0NJSSBhcyBuYW1lCnN1Z2dlc3RzLiBJZiB5b3UgYXJl IGdvaW5nIHRvIGNvbnZlcnQgdG8gOCBiaXQgZW5jb2Rpbmcgd2h5IG5vdCBzaW1wbHkKdXNlIGdy dWJfdXRmMTZfdG9fdXRmOD8KCj4gKyAgICBwY2hUZW1wUHRyKys7Cj4gKyAgICBwd1RlbXBQdHIr KzsKPiArICB9Cj4gKyAgKnB3VGVtcFB0ciA9ICdcMCc7Cj4gKyAgcmV0dXJuOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX2YyZnNfbGFiZWwgKGdydWJfZGV2aWNlX3QgZGV2 aWNlLCBjaGFyICoqbGFiZWwpCj4gK3sKPiArICBzdHJ1Y3QgZ3J1Yl9mMmZzX2RhdGEgKmRhdGE7 Cj4gKyAgZ3J1Yl9kaXNrX3QgZGlzayA9IGRldmljZS0+ZGlzazsKPiArCj4gKyAgZ3J1Yl9kbF9y ZWYgKG15X21vZCk7Cj4gKwo+ICsgIGRhdGEgPSBncnViX2YyZnNfbW91bnQgKGRpc2spOwo+ICsg IGlmIChkYXRhKQo+ICsgICAgewo+ICsgICAgICAqbGFiZWwgPSBncnViX3phbGxvYyAoc2l6ZW9m IChkYXRhLT5zYmxvY2sudm9sdW1lX25hbWUpKTsKPiArICAgICAgaWYgKCpsYWJlbCkKPiArICAg ICAgICBncnViX2YyZnNfdW5pY29kZV90b19hc2NpaSAoKGdydWJfdWludDhfdCAqKSAoKmxhYmVs KSwKPiArCQkJCWRhdGEtPnNibG9jay52b2x1bWVfbmFtZSk7CgpTZWUgYWJvdmUuCgo+ICsgICAg fQo+ICsgIGVsc2UKPiArICAgICpsYWJlbCA9IE5VTEw7Cj4gKwo+ICsgIGdydWJfZnJlZSAoZGF0 YSk7Cj4gKyAgZ3J1Yl9kbF91bnJlZiAobXlfbW9kKTsKPiArICByZXR1cm4gZ3J1Yl9lcnJubzsK PiArfQo+ICsKLi4uCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8v bGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK