From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Samudrala, Sridhar" Subject: Re: [RFC PATCH net-next v6 2/4] net: Introduce generic bypass module Date: Wed, 11 Apr 2018 12:13:52 -0700 Message-ID: <6a8c1ff5-153a-e40a-91b3-48532b8d3a38__20256.350914906$1523473918$gmane$org@intel.com> References: <1523386790-12396-1-git-send-email-sridhar.samudrala@intel.com> <1523386790-12396-3-git-send-email-sridhar.samudrala@intel.com> <20180411155127.GQ2028@nanopsycho> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180411155127.GQ2028@nanopsycho> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Jiri Pirko Cc: alexander.h.duyck@intel.com, virtio-dev@lists.oasis-open.org, mst@redhat.com, kubakici@wp.pl, netdev@vger.kernel.org, virtualization@lists.linux-foundation.org, loseweigh@gmail.com, davem@davemloft.net List-Id: virtualization@lists.linuxfoundation.org T24gNC8xMS8yMDE4IDg6NTEgQU0sIEppcmkgUGlya28gd3JvdGU6Cj4gVHVlLCBBcHIgMTAsIDIw MTggYXQgMDg6NTk6NDhQTSBDRVNULCBzcmlkaGFyLnNhbXVkcmFsYUBpbnRlbC5jb20gd3JvdGU6 Cj4+IFRoaXMgcHJvdmlkZXMgYSBnZW5lcmljIGludGVyZmFjZSBmb3IgcGFyYXZpcnR1YWwgZHJp dmVycyB0byBsaXN0ZW4KPj4gZm9yIG5ldGRldiByZWdpc3Rlci91bnJlZ2lzdGVyL2xpbmsgY2hh bmdlIGV2ZW50cyBmcm9tIHBjaSBldGhlcm5ldAo+PiBkZXZpY2VzIHdpdGggdGhlIHNhbWUgTUFD IGFuZCB0YWtlb3ZlciB0aGVpciBkYXRhcGF0aC4gVGhlIG5vdGlmaWVyIGFuZAo+PiBldmVudCBo YW5kbGluZyBjb2RlIGlzIGJhc2VkIG9uIHRoZSBleGlzdGluZyBuZXR2c2MgaW1wbGVtZW50YXRp b24uCj4+Cj4+IEl0IGV4cG9zZXMgMiBzZXRzIG9mIGludGVyZmFjZXMgdG8gdGhlIHBhcmF2aXJ0 dWFsIGRyaXZlcnMuCj4+IDEuIGV4aXN0aW5nIG5ldHZzYyBkcml2ZXIgdGhhdCB1c2VzIDIgbmV0 ZGV2IG1vZGVsLiBJbiB0aGlzIG1vZGVsLCBubwo+PiBtYXN0ZXIgbmV0ZGV2IGlzIGNyZWF0ZWQu IFRoZSBwYXJhdmlydHVhbCBkcml2ZXIgcmVnaXN0ZXJzIGVhY2ggYnlwYXNzCj4+IGluc3RhbmNl IGFsb25nIHdpdGggYSBzZXQgb2Ygb3BzIHRvIG1hbmFnZSB0aGUgc2xhdmUgZXZlbnRzLgo+PiAg ICAgIGJ5cGFzc19tYXN0ZXJfcmVnaXN0ZXIoKQo+PiAgICAgIGJ5cGFzc19tYXN0ZXJfdW5yZWdp c3RlcigpCj4+IDIuIG5ldyB2aXJ0aW9fbmV0IGJhc2VkIHNvbHV0aW9uIHRoYXQgdXNlcyAzIG5l dGRldiBtb2RlbC4gSW4gdGhpcyBtb2RlbCwKPj4gdGhlIGJ5cGFzcyBtb2R1bGUgcHJvdmlkZXMg aW50ZXJmYWNlcyB0byBjcmVhdGUvZGVzdHJveSBhZGRpdGlvbmFsIG1hc3Rlcgo+PiBuZXRkZXYg YW5kIGFsbCB0aGUgc2xhdmUgZXZlbnRzIGFyZSBtYW5hZ2VkIGludGVybmFsbHkuCj4+ICAgICAg IGJ5cGFzc19tYXN0ZXJfY3JlYXRlKCkKPj4gICAgICAgYnlwYXNzX21hc3Rlcl9kZXN0cm95KCkK Pj4KPj4gU2lnbmVkLW9mZi1ieTogU3JpZGhhciBTYW11ZHJhbGEgPHNyaWRoYXIuc2FtdWRyYWxh QGludGVsLmNvbT4KPj4gLS0tCj4+IGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggfCAgMTQgKwo+ PiBpbmNsdWRlL25ldC9ieXBhc3MuaCAgICAgIHwgIDk2ICsrKysrKwo+PiBuZXQvS2NvbmZpZyAg ICAgICAgICAgICAgIHwgIDE4ICsKPj4gbmV0L2NvcmUvTWFrZWZpbGUgICAgICAgICB8ICAgMSAr Cj4+IG5ldC9jb3JlL2J5cGFzcy5jICAgICAgICAgfCA4NDQgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+PiA1IGZpbGVzIGNoYW5nZWQsIDk3MyBpbnNlcnRp b25zKCspCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL25ldC9ieXBhc3MuaAo+PiBjcmVh dGUgbW9kZSAxMDA2NDQgbmV0L2NvcmUvYnlwYXNzLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCj4+IGluZGV4 IGNmNDQ1MDNlYTgxYS4uNTg3MjkzNzI4ZjcwIDEwMDY0NAo+PiAtLS0gYS9pbmNsdWRlL2xpbnV4 L25ldGRldmljZS5oCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKPj4gQEAgLTE0 MzAsNiArMTQzMCw4IEBAIGVudW0gbmV0ZGV2X3ByaXZfZmxhZ3Mgewo+PiAJSUZGX1BIT05ZX0hF QURST09NCQk9IDE8PDI0LAo+PiAJSUZGX01BQ1NFQwkJCT0gMTw8MjUsCj4+IAlJRkZfTk9fUlhf SEFORExFUgkJPSAxPDwyNiwKPj4gKwlJRkZfQllQQVNTCQkJPSAxIDw8IDI3LAo+PiArCUlGRl9C WVBBU1NfU0xBVkUJCT0gMSA8PCAyOCwKPiBJIHdvbmRlciwgd2h5IHlvdSBkb24ndCBmb2xsb3cg dGhlIGV4aXN0aW5nIGNvZGluZyBzdHlsZS4uLiBBbHNvLCBwbGVhc2UKPiBhZGQgdGhlc2UgdG8g aW50byB0aGUgY29tbWVudCBhYm92ZS4KClRvIGF2b2lkIGNoZWNrcGF0Y2ggd2FybmluZ3MuIElm IGl0IGlzIE9LIHRvIGlnbm9yZSB0aGVzZSB3YXJuaW5ncywgSSBjYW4gc3dpdGNoIGJhY2sKdG8g dGhlIGV4aXN0aW5nIGNvZGluZyBzdHlsZSB0byBiZSBjb25zaXN0ZW50LgoKPgo+Cj4+IH07Cj4+ Cj4+ICNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOCQkJSUZGXzgwMl8xUV9WTEFOCj4+IEBAIC0xNDU4 LDYgKzE0NjAsOCBAQCBlbnVtIG5ldGRldl9wcml2X2ZsYWdzIHsKPj4gI2RlZmluZSBJRkZfUlhG SF9DT05GSUdVUkVECQlJRkZfUlhGSF9DT05GSUdVUkVECj4+ICNkZWZpbmUgSUZGX01BQ1NFQwkJ CUlGRl9NQUNTRUMKPj4gI2RlZmluZSBJRkZfTk9fUlhfSEFORExFUgkJSUZGX05PX1JYX0hBTkRM RVIKPj4gKyNkZWZpbmUgSUZGX0JZUEFTUwkJCUlGRl9CWVBBU1MKPj4gKyNkZWZpbmUgSUZGX0JZ UEFTU19TTEFWRQkJSUZGX0JZUEFTU19TTEFWRQo+Pgo+PiAvKioKPj4gICAqCXN0cnVjdCBuZXRf ZGV2aWNlIC0gVGhlIERFVklDRSBzdHJ1Y3R1cmUuCj4+IEBAIC00MzA4LDYgKzQzMTIsMTYgQEAg c3RhdGljIGlubGluZSBib29sIG5ldGlmX2lzX3J4ZmhfY29uZmlndXJlZChjb25zdCBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQo+PiAJcmV0dXJuIGRldi0+cHJpdl9mbGFncyAmIElGRl9SWEZIX0NP TkZJR1VSRUQ7Cj4+IH0KPj4KPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBuZXRpZl9pc19ieXBhc3Nf bWFzdGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJcmV0dXJuIGRl di0+cHJpdl9mbGFncyAmIElGRl9CWVBBU1M7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUg Ym9vbCBuZXRpZl9pc19ieXBhc3Nfc2xhdmUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikK Pj4gK3sKPj4gKwlyZXR1cm4gZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JZUEFTU19TTEFWRTsKPj4g K30KPj4gKwo+PiAvKiBUaGlzIGRldmljZSBuZWVkcyB0byBrZWVwIHNrYiBkc3QgZm9yIHFkaXNj IGVucXVldWUgb3IgbmRvX3N0YXJ0X3htaXQoKSAqLwo+PiBzdGF0aWMgaW5saW5lIHZvaWQgbmV0 aWZfa2VlcF9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKPj4gewo+PiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9uZXQvYnlwYXNzLmggYi9pbmNsdWRlL25ldC9ieXBhc3MuaAo+PiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjg2YjAyY2I4OTRjZgo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2luY2x1ZGUvbmV0L2J5cGFzcy5oCj4+IEBAIC0wLDAgKzEsOTYgQEAK Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsvKiBDb3B5cmlnaHQg KGMpIDIwMTgsIEludGVsIENvcnBvcmF0aW9uLiAqLwo+PiArCj4+ICsjaWZuZGVmIF9ORVRfQllQ QVNTX0gKPj4gKyNkZWZpbmUgX05FVF9CWVBBU1NfSAo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgv bmV0ZGV2aWNlLmg+Cj4+ICsKPj4gK3N0cnVjdCBieXBhc3Nfb3BzIHsKPj4gKwlpbnQgKCpzbGF2 ZV9wcmVfcmVnaXN0ZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9uZXRkZXYsCj4+ICsJCQkJ ICBzdHJ1Y3QgbmV0X2RldmljZSAqYnlwYXNzX25ldGRldik7Cj4+ICsJaW50ICgqc2xhdmVfam9p bikoc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX25ldGRldiwKPj4gKwkJCSAgc3RydWN0IG5ldF9k ZXZpY2UgKmJ5cGFzc19uZXRkZXYpOwo+PiArCWludCAoKnNsYXZlX3ByZV91bnJlZ2lzdGVyKShz dHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfbmV0ZGV2LAo+PiArCQkJCSAgICBzdHJ1Y3QgbmV0X2Rl dmljZSAqYnlwYXNzX25ldGRldik7Cj4+ICsJaW50ICgqc2xhdmVfcmVsZWFzZSkoc3RydWN0IG5l dF9kZXZpY2UgKnNsYXZlX25ldGRldiwKPj4gKwkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJ5 cGFzc19uZXRkZXYpOwo+PiArCWludCAoKnNsYXZlX2xpbmtfY2hhbmdlKShzdHJ1Y3QgbmV0X2Rl dmljZSAqc2xhdmVfbmV0ZGV2LAo+PiArCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqYnlwYXNzX25l dGRldik7Cj4+ICsJcnhfaGFuZGxlcl9yZXN1bHRfdCAoKmhhbmRsZV9mcmFtZSkoc3RydWN0IHNr X2J1ZmYgKipwc2tiKTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBieXBhc3NfbWFzdGVyIHsKPj4g KwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cj4+ICsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKmJ5 cGFzc19uZXRkZXY7Cj4+ICsJc3RydWN0IGJ5cGFzc19vcHMgX19yY3UgKm9wczsKPj4gK307Cj4+ ICsKPj4gKy8qIGJ5cGFzcyBzdGF0ZSAqLwo+PiArc3RydWN0IGJ5cGFzc19pbmZvIHsKPj4gKwkv KiBwYXNzdGhydSBuZXRkZXYgd2l0aCBzYW1lIE1BQyAqLwo+PiArCXN0cnVjdCBuZXRfZGV2aWNl IF9fcmN1ICphY3RpdmVfbmV0ZGV2Owo+IFlvdSBzdGlsbCB1c2UgImFjdGl2ZSIvImJhY2t1cCIg bmFtZXMgd2hpY2ggaXMgaGlnaGx5IG1pc2xlYWRpbmcgYXMKPiBpdCBoYXMgY29tcGxldGVseSBk aWZmZXJlbnQgbWVhbmluZyB0aGF0IGluIGJvbmQgZm9yIGV4YW1wbGUuCj4gSSBub3RlZCB0aGF0 IGluIG15IHByZXZpb3VzIHJldmlldyBhbHJlYWR5LiBQbGVhc2UgY2hhbmdlIGl0LgoKSSBndWVz cyB0aGUgaXNzdWUgaXMgd2l0aCBvbmx5IHRoZSAnYWN0aXZlJ8KgIG5hbWUuICdiYWNrdXAnIHNo b3VsZCBiZSBmaW5lIGFzIGl0IGFsc28KbWF0Y2hlcyB3aXRoIHRoZSBCQUNLVVAgZmVhdHVyZSBi aXQgd2UgYXJlIGFkZGluZyB0byB2aXJ0aW9fbmV0LgoKV2l0aCByZWdhcmRzIHRvIGFsdGVybmF0 ZSBuYW1lcyBmb3IgJ2FjdGl2ZScsIHlvdSBzdWdnZXN0ZWQgJ3N0b2xlbicsIGJ1dCBpCmFtIG5v dCB0b28gaGFwcHkgd2l0aCBpdC4KbmV0dnNjIHVzZXMgdmZfbmV0ZGV2LCBhcmUgeW91IE9LIHdp dGggdGhpcz8gT3IgYW5vdGhlciBvcHRpb24gaXMgJ3Bhc3N0aHJ1JwoKCgo+Cj4KPj4gKwo+PiAr CS8qIHZpcnRpb19uZXQgbmV0ZGV2ICovCj4+ICsJc3RydWN0IG5ldF9kZXZpY2UgX19yY3UgKmJh Y2t1cF9uZXRkZXY7Cj4+ICsKPj4gKwkvKiBhY3RpdmUgbmV0ZGV2IHN0YXRzICovCj4+ICsJc3Ry dWN0IHJ0bmxfbGlua19zdGF0czY0IGFjdGl2ZV9zdGF0czsKPj4gKwo+PiArCS8qIGJhY2t1cCBu ZXRkZXYgc3RhdHMgKi8KPj4gKwlzdHJ1Y3QgcnRubF9saW5rX3N0YXRzNjQgYmFja3VwX3N0YXRz Owo+PiArCj4+ICsJLyogYWdncmVnYXRlZCBzdGF0cyAqLwo+PiArCXN0cnVjdCBydG5sX2xpbmtf c3RhdHM2NCBieXBhc3Nfc3RhdHM7Cj4+ICsKPj4gKwkvKiBzcGlubG9jayB3aGlsZSB1cGRhdGlu ZyBzdGF0cyAqLwo+PiArCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKPj4gK307Cj4+ICsKPj4gKyNp ZiBJU19FTkFCTEVEKENPTkZJR19ORVRfQllQQVNTKQo+PiArCj4+ICtpbnQgYnlwYXNzX21hc3Rl cl9jcmVhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmJhY2t1cF9uZXRkZXYsCj4+ICsJCQkgc3RydWN0 IGJ5cGFzc19tYXN0ZXIgKipwYnlwYXNzX21hc3Rlcik7Cj4+ICt2b2lkIGJ5cGFzc19tYXN0ZXJf ZGVzdHJveShzdHJ1Y3QgYnlwYXNzX21hc3RlciAqYnlwYXNzX21hc3Rlcik7Cj4+ICsKPj4gK2lu dCBieXBhc3NfbWFzdGVyX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBi eXBhc3Nfb3BzICpvcHMsCj4+ICsJCQkgICBzdHJ1Y3QgYnlwYXNzX21hc3RlciAqKnBieXBhc3Nf bWFzdGVyKTsKPj4gK3ZvaWQgYnlwYXNzX21hc3Rlcl91bnJlZ2lzdGVyKHN0cnVjdCBieXBhc3Nf bWFzdGVyICpieXBhc3NfbWFzdGVyKTsKPj4gKwo+PiAraW50IGJ5cGFzc19zbGF2ZV91bnJlZ2lz dGVyKHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9uZXRkZXYpOwo+PiArCj4+ICsjZWxzZQo+PiAr Cj4+ICtzdGF0aWMgaW5saW5lCj4+ICtpbnQgYnlwYXNzX21hc3Rlcl9jcmVhdGUoc3RydWN0IG5l dF9kZXZpY2UgKmJhY2t1cF9uZXRkZXYsCj4+ICsJCQkgc3RydWN0IGJ5cGFzc19tYXN0ZXIgKipw YnlwYXNzX21hc3Rlcik7Cj4+ICt7Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbmxpbmUKPj4gK3ZvaWQgYnlwYXNzX21hc3Rlcl9kZXN0cm95KHN0cnVjdCBieXBhc3NfbWFz dGVyICpieXBhc3NfbWFzdGVyKQo+PiArewo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lCj4+ ICtpbnQgYnlwYXNzX21hc3Rlcl9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1 Y3QgYnlwYXNzX29wcyAqb3BzLAo+PiArCQkJICAgc3RydWN0IHBieXBhc3NfbWFzdGVyICoqcGJ5 cGFzc19tYXN0ZXIpOwo+PiArewo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW5saW5lCj4+ICt2b2lkIGJ5cGFzc19tYXN0ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYnlwYXNzX21h c3RlciAqYnlwYXNzX21hc3RlcikKPj4gK3sKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZQo+ PiAraW50IGJ5cGFzc19zbGF2ZV91bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9u ZXRkZXYpCj4+ICt7Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKyNlbmRpZgo+PiArCj4+ ICsjZW5kaWYgLyogX05FVF9CWVBBU1NfSCAqLwo+PiBkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcg Yi9uZXQvS2NvbmZpZwo+PiBpbmRleCAwNDI4ZjEyYzI1YzIuLjk5NDQ0NWY0YTk2YSAxMDA2NDQK Pj4gLS0tIGEvbmV0L0tjb25maWcKPj4gKysrIGIvbmV0L0tjb25maWcKPj4gQEAgLTQyMyw2ICs0 MjMsMjQgQEAgY29uZmlnIE1BWV9VU0VfREVWTElOSwo+PiAJICBvbiBNQVlfVVNFX0RFVkxJTksg dG8gZW5zdXJlIHRoZXkgZG8gbm90IGNhdXNlIGxpbmsgZXJyb3JzIHdoZW4KPj4gCSAgZGV2bGlu ayBpcyBhIGxvYWRhYmxlIG1vZHVsZSBhbmQgdGhlIGRyaXZlciB1c2luZyBpdCBpcyBidWlsdC1p bi4KPj4KPj4gK2NvbmZpZyBORVRfQllQQVNTCj4+ICsJdHJpc3RhdGUgIkJ5cGFzcyBpbnRlcmZh Y2UiCj4+ICsJLS0taGVscC0tLQo+PiArCSAgVGhpcyBwcm92aWRlcyBhIGdlbmVyaWMgaW50ZXJm YWNlIGZvciBwYXJhdmlydHVhbCBkcml2ZXJzIHRvIGxpc3Rlbgo+PiArCSAgZm9yIG5ldGRldiBy ZWdpc3Rlci91bnJlZ2lzdGVyL2xpbmsgY2hhbmdlIGV2ZW50cyBmcm9tIHBjaSBldGhlcm5ldAo+ PiArCSAgZGV2aWNlcyB3aXRoIHRoZSBzYW1lIE1BQyBhbmQgdGFrZW92ZXIgdGhlaXIgZGF0YXBh dGguIFRoaXMgYWxzbwo+PiArCSAgZW5hYmxlcyBsaXZlIG1pZ3JhdGlvbiBvZiBhIFZNIHdpdGgg ZGlyZWN0IGF0dGFjaGVkIFZGIGJ5IGZhaWxpbmcKPj4gKwkgIG92ZXIgdG8gdGhlIHBhcmF2aXJ0 dWFsIGRhdGFwYXRoIHdoZW4gdGhlIFZGIGlzIHVucGx1Z2dlZC4KPj4gKwo+PiArY29uZmlnIE1B WV9VU0VfQllQQVNTCj4+ICsJdHJpc3RhdGUKPj4gKwlkZWZhdWx0IG0gaWYgTkVUX0JZUEFTUz1t Cj4+ICsJZGVmYXVsdCB5IGlmIE5FVF9CWVBBU1M9eSB8fCBORVRfQllQQVNTPW4KPj4gKwloZWxw Cj4+ICsJICBEcml2ZXJzIHVzaW5nIHRoZSBieXBhc3MgaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGhh dmUgYSBkZXBlbmRlbmN5Cj4+ICsJICBvbiBNQVlfVVNFX0JZUEFTUyB0byBlbnN1cmUgdGhleSBk byBub3QgY2F1c2UgbGluayBlcnJvcnMgd2hlbgo+PiArCSAgYnlwYXNzIGlzIGEgbG9hZGFibGUg bW9kdWxlIGFuZCB0aGUgZHJpdmVyIHVzaW5nIGl0IGlzIGJ1aWx0LWluLgo+PiArCj4+IGVuZGlm ICAgIyBpZiBORVQKPj4KPj4gIyBVc2VkIGJ5IGFyY2hzIHRvIHRlbGwgdGhhdCB0aGV5IHN1cHBv cnQgQlBGIEpJVCBjb21waWxlciBwbHVzIHdoaWNoIGZsYXZvdXIuCj4+IGRpZmYgLS1naXQgYS9u ZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlCj4+IGluZGV4IDZkYmJiYThjNTdh ZS4uYTk3MjdlZDFjOGZjIDEwMDY0NAo+PiAtLS0gYS9uZXQvY29yZS9NYWtlZmlsZQo+PiArKysg Yi9uZXQvY29yZS9NYWtlZmlsZQo+PiBAQCAtMzAsMyArMzAsNCBAQCBvYmotJChDT05GSUdfRFNU X0NBQ0hFKSArPSBkc3RfY2FjaGUubwo+PiBvYmotJChDT05GSUdfSFdCTSkgKz0gaHdibS5vCj4+ IG9iai0kKENPTkZJR19ORVRfREVWTElOSykgKz0gZGV2bGluay5vCj4+IG9iai0kKENPTkZJR19H Uk9fQ0VMTFMpICs9IGdyb19jZWxscy5vCj4+ICtvYmotJChDT05GSUdfTkVUX0JZUEFTUykgKz0g YnlwYXNzLm8KPj4gZGlmZiAtLWdpdCBhL25ldC9jb3JlL2J5cGFzcy5jIGIvbmV0L2NvcmUvYnlw YXNzLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iNWI5 Y2I1NTRjM2YKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9uZXQvY29yZS9ieXBhc3MuYwo+PiBA QCAtMCwwICsxLDg0NCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAK Pj4gKy8qIENvcHlyaWdodCAoYykgMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uICovCj4+ICsKPj4g Ky8qIEEgY29tbW9uIG1vZHVsZSB0byBoYW5kbGUgcmVnaXN0cmF0aW9ucyBhbmQgbm90aWZpY2F0 aW9ucyBmb3IgcGFyYXZpcnR1YWwKPj4gKyAqIGRyaXZlcnMgdG8gZW5hYmxlIGFjY2VsZXJhdGVk IGRhdGFwYXRoIGFuZCBzdXBwb3J0IFZGIGxpdmUgbWlncmF0aW9uLgo+PiArICoKPj4gKyAqIFRo ZSBub3RpZmllciBhbmQgZXZlbnQgaGFuZGxpbmcgY29kZSBpcyBiYXNlZCBvbiBuZXR2c2MgZHJp dmVyLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KPj4gKyNp bmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv bmV0cG9sbC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L2lmX3ZsYW4uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPj4gKyNpbmNsdWRl IDxuZXQvc2NoX2dlbmVyaWMuaD4KPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2lmX2FycC5oPgo+ PiArI2luY2x1ZGUgPG5ldC9ieXBhc3MuaD4KPj4gKwo+PiArc3RhdGljIExJU1RfSEVBRChieXBh c3NfbWFzdGVyX2xpc3QpOwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhieXBhc3NfbG9jayk7 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYnlwYXNzX3NsYXZlX3ByZV9yZWdpc3RlcihzdHJ1Y3QgbmV0 X2RldmljZSAqc2xhdmVfbmV0ZGV2LAo+PiArCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmJ5 cGFzc19uZXRkZXYsCj4+ICsJCQkJICAgICBzdHJ1Y3QgYnlwYXNzX29wcyAqYnlwYXNzX29wcykK Pj4gK3sKPj4gKwlzdHJ1Y3QgYnlwYXNzX2luZm8gKmJpOwo+PiArCWJvb2wgYmFja3VwOwo+PiAr Cj4+ICsJaWYgKGJ5cGFzc19vcHMpIHsKPj4gKwkJaWYgKCFieXBhc3Nfb3BzLT5zbGF2ZV9wcmVf cmVnaXN0ZXIpCj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCQlyZXR1cm4gYnlwYXNz X29wcy0+c2xhdmVfcHJlX3JlZ2lzdGVyKHNsYXZlX25ldGRldiwKPj4gKwkJCQkJCSAgICAgIGJ5 cGFzc19uZXRkZXYpOwo+PiArCX0KPj4gKwo+PiArCWJpID0gbmV0ZGV2X3ByaXYoYnlwYXNzX25l dGRldik7Cj4+ICsJYmFja3VwID0gKHNsYXZlX25ldGRldi0+ZGV2LnBhcmVudCA9PSBieXBhc3Nf bmV0ZGV2LT5kZXYucGFyZW50KTsKPj4gKwlpZiAoYmFja3VwID8gcnRubF9kZXJlZmVyZW5jZShi aS0+YmFja3VwX25ldGRldikgOgo+PiArCQkJcnRubF9kZXJlZmVyZW5jZShiaS0+YWN0aXZlX25l dGRldikpIHsKPj4gKwkJbmV0ZGV2X2VycihieXBhc3NfbmV0ZGV2LCAiJXMgYXR0ZW1wdGluZyB0 byByZWdpc3RlciBhcyBzbGF2ZSBkZXYgd2hlbiAlcyBhbHJlYWR5IHByZXNlbnRcbiIsCj4+ICsJ CQkgICBzbGF2ZV9uZXRkZXYtPm5hbWUsIGJhY2t1cCA/ICJiYWNrdXAiIDogImFjdGl2ZSIpOwo+ PiArCQlyZXR1cm4gLUVFWElTVDsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBBdm9pZCBub24gcGNpIGRl dmljZXMgYXMgYWN0aXZlIG5ldGRldiAqLwo+PiArCWlmICghYmFja3VwICYmICghc2xhdmVfbmV0 ZGV2LT5kZXYucGFyZW50IHx8Cj4+ICsJCQkhZGV2X2lzX3BjaShzbGF2ZV9uZXRkZXYtPmRldi5w YXJlbnQpKSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBieXBhc3Nfc2xhdmVfam9pbihzdHJ1Y3QgbmV0X2RldmljZSAq c2xhdmVfbmV0ZGV2LAo+PiArCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqYnlwYXNzX25ldGRl diwKPj4gKwkJCSAgICAgc3RydWN0IGJ5cGFzc19vcHMgKmJ5cGFzc19vcHMpCj4+ICt7Cj4+ICsJ c3RydWN0IGJ5cGFzc19pbmZvICpiaTsKPj4gKwlib29sIGJhY2t1cDsKPj4gKwo+PiArCWlmIChi eXBhc3Nfb3BzKSB7Cj4+ICsJCWlmICghYnlwYXNzX29wcy0+c2xhdmVfam9pbikKPj4gKwkJCXJl dHVybiAtRUlOVkFMOwo+PiArCj4+ICsJCXJldHVybiBieXBhc3Nfb3BzLT5zbGF2ZV9qb2luKHNs YXZlX25ldGRldiwgYnlwYXNzX25ldGRldik7Cj4+ICsJfQo+PiArCj4+ICsJYmkgPSBuZXRkZXZf cHJpdihieXBhc3NfbmV0ZGV2KTsKPj4gKwliYWNrdXAgPSAoc2xhdmVfbmV0ZGV2LT5kZXYucGFy ZW50ID09IGJ5cGFzc19uZXRkZXYtPmRldi5wYXJlbnQpOwo+PiArCj4+ICsJZGV2X2hvbGQoc2xh dmVfbmV0ZGV2KTsKPj4gKwo+PiArCWlmIChiYWNrdXApIHsKPj4gKwkJcmN1X2Fzc2lnbl9wb2lu dGVyKGJpLT5iYWNrdXBfbmV0ZGV2LCBzbGF2ZV9uZXRkZXYpOwo+PiArCQlkZXZfZ2V0X3N0YXRz KGJpLT5iYWNrdXBfbmV0ZGV2LCAmYmktPmJhY2t1cF9zdGF0cyk7Cj4+ICsJfSBlbHNlIHsKPj4g KwkJcmN1X2Fzc2lnbl9wb2ludGVyKGJpLT5hY3RpdmVfbmV0ZGV2LCBzbGF2ZV9uZXRkZXYpOwo+ PiArCQlkZXZfZ2V0X3N0YXRzKGJpLT5hY3RpdmVfbmV0ZGV2LCAmYmktPmFjdGl2ZV9zdGF0cyk7 Cj4+ICsJCWJ5cGFzc19uZXRkZXYtPm1pbl9tdHUgPSBzbGF2ZV9uZXRkZXYtPm1pbl9tdHU7Cj4+ ICsJCWJ5cGFzc19uZXRkZXYtPm1heF9tdHUgPSBzbGF2ZV9uZXRkZXYtPm1heF9tdHU7Cj4+ICsJ fQo+PiArCj4+ICsJbmV0ZGV2X2luZm8oYnlwYXNzX25ldGRldiwgImJ5cGFzcyBzbGF2ZTolcyBq b2luZWRcbiIsCj4+ICsJCSAgICBzbGF2ZV9uZXRkZXYtPm5hbWUpOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gKy8qIENhbGxlZCB3aGVuIHNsYXZlIGRldiBpcyBpbmplY3Rpbmcg ZGF0YSBpbnRvIG5ldHdvcmsgc3RhY2suCj4+ICsgKiBDaGFuZ2UgdGhlIGFzc29jaWF0ZWQgbmV0 d29yayBkZXZpY2UgZnJvbSBsb3dlciBkZXYgdG8gdmlydGlvLgo+PiArICogbm90ZTogYWxyZWFk eSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrCj4+ICsgKi8KPj4gK3N0YXRpYyByeF9oYW5kbGVy X3Jlc3VsdF90IGJ5cGFzc19oYW5kbGVfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKipwc2tiKQo+PiAr ewo+PiArCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKPj4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZSAqbmRldiA9IHJjdV9kZXJlZmVyZW5jZShza2ItPmRldi0+cnhfaGFuZGxlcl9kYXRhKTsKPj4g Kwo+PiArCXNrYi0+ZGV2ID0gbmRldjsKPj4gKwo+PiArCXJldHVybiBSWF9IQU5ETEVSX0FOT1RI RVI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqYnlwYXNzX21hc3Rl cl9nZXRfYnltYWModTggKm1hYywKPj4gKwkJCQkJCSAgc3RydWN0IGJ5cGFzc19vcHMgKipvcHMp Cj4+ICt7Cj4+ICsJc3RydWN0IGJ5cGFzc19tYXN0ZXIgKmJ5cGFzc19tYXN0ZXI7Cj4+ICsJc3Ry dWN0IG5ldF9kZXZpY2UgKmJ5cGFzc19uZXRkZXY7Cj4+ICsKPj4gKwlzcGluX2xvY2soJmJ5cGFz c19sb2NrKTsKPj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ5cGFzc19tYXN0ZXIsICZieXBhc3Nf bWFzdGVyX2xpc3QsIGxpc3QpIHsKPiBBcyBJIHdyb3RlIHRoZSBsYXN0IHRpbWUsIHlvdSBkb24n dCBuZWVkIHRoaXMgbGlzdCwgc3BpbmxvY2suCj4gWW91IGNhbiBkbyBqdXN0IHNvbWV0aGluZyBs aWtlOgo+ICAgICAgICAgIGZvcl9lYWNoX25ldChuZXQpIHsKPiAgICAgICAgICAgICAgICAgIGZv cl9lYWNoX25ldGRldihuZXQsIGRldikgewo+IAkJCWlmIChuZXRpZl9pc19ieXBhc3NfbWFzdGVy KGRldikpIHsKClRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgdXBwZXIgbmV0ZGV2IGFzIHdlbGwg YXMgdGhlIG9wcyBhc3NvY2lhdGVkCndpdGggdGhhdCBuZXRkZXYuCmJ5cGFzc19tYXN0ZXJfbGlz dCBpcyBhIGxpc3Qgb2YgJ3N0cnVjdCBieXBhc3NfbWFzdGVyJyB0aGF0IGFzc29jaWF0ZXMKJ2J5 cGFzc19uZXRkZXYnIHdpdGggJ2J5cGFzc19vcHMnIGFuZCBnZXRzIGFkZGVkIHZpYSBieXBhc3Nf bWFzdGVyX3JlZ2lzdGVyKCkuCldlIG5lZWQgJ29wcycgb25seSB0byBzdXBwb3J0IHRoZSAyIG5l dGRldiBtb2RlbCBvZiBuZXR2c2MuIG9wcyB3aWxsIGJlCk5VTEwgZm9yIDMtbmV0ZGV2IG1vZGVs LgoKCj4KPgo+Cj4KPj4gKwkJYnlwYXNzX25ldGRldiA9IHJjdV9kZXJlZmVyZW5jZShieXBhc3Nf bWFzdGVyLT5ieXBhc3NfbmV0ZGV2KTsKPj4gKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwoYnlwYXNz X25ldGRldi0+cGVybV9hZGRyLCBtYWMpKSB7Cj4+ICsJCQkqb3BzID0gcmN1X2RlcmVmZXJlbmNl KGJ5cGFzc19tYXN0ZXItPm9wcyk7Cj4gSSBkb24ndCBzZWUgaG93IHJjdV9kZXJlZmVyZW5jZSBp cyBvayBoZXJlLgo+IDEpIEkgZG9uJ3Qgc2VlIHJjdV9yZWFkX2xvY2sgdGFrZW4KPiAyKSBMb29r cyBsaWtlIGJ5cGFzc19tYXN0ZXItPm9wcyBoYXMgdGhlIHNhbWUgdmFsdWUgYWNyb3NzIHRoZSB3 aG9sZQo+ICAgICBleGlzdGVuY2UuCgpXZSBob2xkIHJ0bmxfbG9jaygpLCBpIHRoaW5rIGkgbmVl ZCB0byBjaGFuZ2UgdGhpcyB0byBydG5sX2RlcmVmZXJlbmNlLgpZZXMuIG9wcyBkb2Vzbid0IGNo YW5nZS4KCj4KPgo+PiArCQkJc3Bpbl91bmxvY2soJmJ5cGFzc19sb2NrKTsKPj4gKwkJCXJldHVy biBieXBhc3NfbmV0ZGV2Owo+PiArCQl9Cj4+ICsJfQo+PiArCXNwaW5fdW5sb2NrKCZieXBhc3Nf bG9jayk7Cj4+ICsJcmV0dXJuIE5VTEw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYnlwYXNz X3NsYXZlX3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9uZXRkZXYpCj4+ICt7Cj4+ ICsJc3RydWN0IG5ldF9kZXZpY2UgKmJ5cGFzc19uZXRkZXY7Cj4+ICsJc3RydWN0IGJ5cGFzc19v cHMgKmJ5cGFzc19vcHM7Cj4+ICsJaW50IHJldCwgb3JpZ19tdHU7Cj4+ICsKPj4gKwlBU1NFUlRf UlROTCgpOwo+PiArCj4+ICsJYnlwYXNzX25ldGRldiA9IGJ5cGFzc19tYXN0ZXJfZ2V0X2J5bWFj KHNsYXZlX25ldGRldi0+cGVybV9hZGRyLAo+PiArCQkJCQkJJmJ5cGFzc19vcHMpOwo+IEZvciBt YXN0ZXIsIGNvdWxkIHlvdSB1c2Ugd29yZCAibWFzdGVyIiBpbiB0aGUgdmFyaWFibGVzIHNvIGl0 IGlzIGNsZWFyPwo+IEFsc28sICJkZXYiIGlzIGZpbmUgaW5zdGVhZCBvZiAibmV0ZGV2Ii4KPiBT b21ldGhpbmcgbGlrZSAiYnBtYXN0ZXJfZGV2IgoKYnlwYXNzX21hc3RlciBpcyBvZsKgIHR5cGUg c3RydWN0IGJ5cGFzc19tYXN0ZXIswqAgYnlwYXNzX25ldGRldiBpcyBvZiB0eXBlIHN0cnVjdCBu ZXRfZGV2aWNlLgpJIGNhbiBjaGFuZ2UgYWxsIF9uZXRkZXYgc3VmZml4ZXMgdG8gX2RldiB0byBt YWtlIHRoZSBuYW1lcyBzaG9ydGVyLgoKCj4KPgo+PiArCWlmICghYnlwYXNzX25ldGRldikKPj4g KwkJZ290byBkb25lOwo+PiArCj4+ICsJcmV0ID0gYnlwYXNzX3NsYXZlX3ByZV9yZWdpc3Rlcihz bGF2ZV9uZXRkZXYsIGJ5cGFzc19uZXRkZXYsCj4+ICsJCQkJCWJ5cGFzc19vcHMpOwo+PiArCWlm IChyZXQgIT0gMCkKPiAJSnVzdCAiaWYgKHJldCkiIHdpbGwgZG8uIFlvdSBoYXZlIHRoaXMgb24g bW9yZSBwbGFjZXMuCgpPSy4KCgo+Cj4KPj4gKwkJZ290byBkb25lOwo+PiArCj4+ICsJcmV0ID0g bmV0ZGV2X3J4X2hhbmRsZXJfcmVnaXN0ZXIoc2xhdmVfbmV0ZGV2LAo+PiArCQkJCQkgYnlwYXNz X29wcyA/IGJ5cGFzc19vcHMtPmhhbmRsZV9mcmFtZSA6Cj4+ICsJCQkJCSBieXBhc3NfaGFuZGxl X2ZyYW1lLCBieXBhc3NfbmV0ZGV2KTsKPj4gKwlpZiAocmV0ICE9IDApIHsKPj4gKwkJbmV0ZGV2 X2VycihzbGF2ZV9uZXRkZXYsICJjYW4gbm90IHJlZ2lzdGVyIGJ5cGFzcyByeCBoYW5kbGVyIChl cnIgPSAlZClcbiIsCj4+ICsJCQkgICByZXQpOwo+PiArCQlnb3RvIGRvbmU7Cj4+ICsJfQo+PiAr Cj4+ICsJcmV0ID0gbmV0ZGV2X3VwcGVyX2Rldl9saW5rKHNsYXZlX25ldGRldiwgYnlwYXNzX25l dGRldiwgTlVMTCk7Cj4+ICsJaWYgKHJldCAhPSAwKSB7Cj4+ICsJCW5ldGRldl9lcnIoc2xhdmVf bmV0ZGV2LCAiY2FuIG5vdCBzZXQgbWFzdGVyIGRldmljZSAlcyAoZXJyID0gJWQpXG4iLAo+PiAr CQkJICAgYnlwYXNzX25ldGRldi0+bmFtZSwgcmV0KTsKPj4gKwkJZ290byB1cHBlcl9saW5rX2Zh aWxlZDsKPj4gKwl9Cj4+ICsKPj4gKwlzbGF2ZV9uZXRkZXYtPnByaXZfZmxhZ3MgfD0gSUZGX0JZ UEFTU19TTEFWRTsKPj4gKwo+PiArCWlmIChuZXRpZl9ydW5uaW5nKGJ5cGFzc19uZXRkZXYpKSB7 Cj4+ICsJCXJldCA9IGRldl9vcGVuKHNsYXZlX25ldGRldik7Cj4+ICsJCWlmIChyZXQgJiYgKHJl dCAhPSAtRUJVU1kpKSB7Cj4+ICsJCQluZXRkZXZfZXJyKGJ5cGFzc19uZXRkZXYsICJPcGVuaW5n IHNsYXZlICVzIGZhaWxlZCByZXQ6JWRcbiIsCj4+ICsJCQkJICAgc2xhdmVfbmV0ZGV2LT5uYW1l LCByZXQpOwo+PiArCQkJZ290byBlcnJfaW50ZXJmYWNlX3VwOwo+PiArCQl9Cj4+ICsJfQo+PiAr Cj4+ICsJLyogQWxpZ24gTVRVIG9mIHNsYXZlIHdpdGggbWFzdGVyICovCj4+ICsJb3JpZ19tdHUg PSBzbGF2ZV9uZXRkZXYtPm10dTsKPj4gKwlyZXQgPSBkZXZfc2V0X210dShzbGF2ZV9uZXRkZXYs IGJ5cGFzc19uZXRkZXYtPm10dSk7Cj4+ICsJaWYgKHJldCAhPSAwKSB7Cj4+ICsJCW5ldGRldl9l cnIoYnlwYXNzX25ldGRldiwgInVuYWJsZSB0byBjaGFuZ2UgbXR1IG9mICVzIHRvICV1IHJlZ2lz dGVyIGZhaWxlZFxuIiwKPj4gKwkJCSAgIHNsYXZlX25ldGRldi0+bmFtZSwgYnlwYXNzX25ldGRl di0+bXR1KTsKPj4gKwkJZ290byBlcnJfc2V0X210dTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBi eXBhc3Nfc2xhdmVfam9pbihzbGF2ZV9uZXRkZXYsIGJ5cGFzc19uZXRkZXYsIGJ5cGFzc19vcHMp Owo+PiArCWlmIChyZXQgIT0gMCkKPj4gKwkJZ290byBlcnJfam9pbjsKPj4gKwo+PiArCWNhbGxf bmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfSk9JTiwgc2xhdmVfbmV0ZGV2KTsKPj4gKwo+PiAr CW5ldGRldl9pbmZvKGJ5cGFzc19uZXRkZXYsICJieXBhc3Mgc2xhdmU6JXMgcmVnaXN0ZXJlZFxu IiwKPj4gKwkJICAgIHNsYXZlX25ldGRldi0+bmFtZSk7Cj4+ICsKPj4gKwlnb3RvIGRvbmU7Cj4+ ICsKPj4gK2Vycl9qb2luOgo+PiArCWRldl9zZXRfbXR1KHNsYXZlX25ldGRldiwgb3JpZ19tdHUp Owo+PiArZXJyX3NldF9tdHU6Cj4+ICsJZGV2X2Nsb3NlKHNsYXZlX25ldGRldik7Cj4+ICtlcnJf aW50ZXJmYWNlX3VwOgo+PiArCW5ldGRldl91cHBlcl9kZXZfdW5saW5rKHNsYXZlX25ldGRldiwg YnlwYXNzX25ldGRldik7Cj4+ICsJc2xhdmVfbmV0ZGV2LT5wcml2X2ZsYWdzICY9IH5JRkZfQllQ QVNTX1NMQVZFOwo+PiArdXBwZXJfbGlua19mYWlsZWQ6Cj4+ICsJbmV0ZGV2X3J4X2hhbmRsZXJf dW5yZWdpc3RlcihzbGF2ZV9uZXRkZXYpOwo+PiArZG9uZToKPj4gKwlyZXR1cm4gTk9USUZZX0RP TkU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYnlwYXNzX3NsYXZlX3ByZV91bnJlZ2lzdGVy KHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9uZXRkZXYsCj4+ICsJCQkJICAgICAgIHN0cnVjdCBu ZXRfZGV2aWNlICpieXBhc3NfbmV0ZGV2LAo+PiArCQkJCSAgICAgICBzdHJ1Y3QgYnlwYXNzX29w cyAqYnlwYXNzX29wcykKPj4gK3sKPj4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqYmFja3VwX25ldGRl diwgKmFjdGl2ZV9uZXRkZXY7Cj4+ICsJc3RydWN0IGJ5cGFzc19pbmZvICpiaTsKPj4gKwo+PiAr CWlmIChieXBhc3Nfb3BzKSB7Cj4+ICsJCWlmICghYnlwYXNzX29wcy0+c2xhdmVfcHJlX3VucmVn aXN0ZXIpCj4+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCQlyZXR1cm4gYnlwYXNzX29w cy0+c2xhdmVfcHJlX3VucmVnaXN0ZXIoc2xhdmVfbmV0ZGV2LAo+PiArCQkJCQkJCWJ5cGFzc19u ZXRkZXYpOwo+PiArCX0KPj4gKwo+PiArCWJpID0gbmV0ZGV2X3ByaXYoYnlwYXNzX25ldGRldik7 Cj4+ICsJYWN0aXZlX25ldGRldiA9IHJ0bmxfZGVyZWZlcmVuY2UoYmktPmFjdGl2ZV9uZXRkZXYp Owo+PiArCWJhY2t1cF9uZXRkZXYgPSBydG5sX2RlcmVmZXJlbmNlKGJpLT5iYWNrdXBfbmV0ZGV2 KTsKPj4gKwo+PiArCWlmIChzbGF2ZV9uZXRkZXYgIT0gYWN0aXZlX25ldGRldiAmJiBzbGF2ZV9u ZXRkZXYgIT0gYmFja3VwX25ldGRldikKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwly ZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBieXBhc3Nfc2xhdmVfcmVsZWFzZShz dHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfbmV0ZGV2LAo+PiArCQkJCXN0cnVjdCBuZXRfZGV2aWNl ICpieXBhc3NfbmV0ZGV2LAo+PiArCQkJCXN0cnVjdCBieXBhc3Nfb3BzICpieXBhc3Nfb3BzKQo+ PiArewo+PiArCXN0cnVjdCBuZXRfZGV2aWNlICpiYWNrdXBfbmV0ZGV2LCAqYWN0aXZlX25ldGRl djsKPj4gKwlzdHJ1Y3QgYnlwYXNzX2luZm8gKmJpOwo+PiArCj4+ICsJaWYgKGJ5cGFzc19vcHMp IHsKPj4gKwkJaWYgKCFieXBhc3Nfb3BzLT5zbGF2ZV9yZWxlYXNlKQo+PiArCQkJcmV0dXJuIC1F SU5WQUw7Cj4gSSB0aGluayBpdCB3b3VsZCBiZSBnb29kIHRvIG1ha2UgdGhlIEFQSSB0byB0aGUg ZHJpdmVyIG1vcmUgc3RyaWN0IGFuZAo+IGhhdmUgYSBzZXBhcmF0ZSBzZXQgb2Ygb3BzIGZvciAi YWN0aXZlIiBhbmQgImJhY2t1cCIgbmV0ZGV2aWNlcy4KPiBUaGF0IHNob3VsZCBzdG9wIHBlb3Bs ZSB0aGlua2luZyBhYm91dCBleHRlbmRpbmcgdGhpcyB0byBtb3JlIHNsYXZlcyBpbgo+IHRoZSBm dXR1cmUuCgpXZSBoYXZlIGNoZWNrcyBpbiBzbGF2ZV9wcmVfcmVnaXN0ZXIoKSB0aGF0IGFsbG93 cyBvbmx5IDEgJ2JhY2t1cCcgYW5kIDEKJ2FjdGl2ZScgc2xhdmUuCgoKPgo+Cj4KPj4gKwo+PiAr CQlyZXR1cm4gYnlwYXNzX29wcy0+c2xhdmVfcmVsZWFzZShzbGF2ZV9uZXRkZXYsIGJ5cGFzc19u ZXRkZXYpOwo+PiArCX0KPj4gKwo+PiArCWJpID0gbmV0ZGV2X3ByaXYoYnlwYXNzX25ldGRldik7 Cj4+ICsJYWN0aXZlX25ldGRldiA9IHJ0bmxfZGVyZWZlcmVuY2UoYmktPmFjdGl2ZV9uZXRkZXYp Owo+PiArCWJhY2t1cF9uZXRkZXYgPSBydG5sX2RlcmVmZXJlbmNlKGJpLT5iYWNrdXBfbmV0ZGV2 KTsKPj4gKwo+PiArCWlmIChzbGF2ZV9uZXRkZXYgPT0gYmFja3VwX25ldGRldikgewo+PiArCQlS Q1VfSU5JVF9QT0lOVEVSKGJpLT5iYWNrdXBfbmV0ZGV2LCBOVUxMKTsKPj4gKwl9IGVsc2Ugewo+ PiArCQlSQ1VfSU5JVF9QT0lOVEVSKGJpLT5hY3RpdmVfbmV0ZGV2LCBOVUxMKTsKPj4gKwkJaWYg KGJhY2t1cF9uZXRkZXYpIHsKPj4gKwkJCWJ5cGFzc19uZXRkZXYtPm1pbl9tdHUgPSBiYWNrdXBf bmV0ZGV2LT5taW5fbXR1Owo+PiArCQkJYnlwYXNzX25ldGRldi0+bWF4X210dSA9IGJhY2t1cF9u ZXRkZXYtPm1heF9tdHU7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlkZXZfcHV0KHNsYXZlX25l dGRldik7Cj4+ICsKPj4gKwluZXRkZXZfaW5mbyhieXBhc3NfbmV0ZGV2LCAiYnlwYXNzIHNsYXZl OiVzIHJlbGVhc2VkXG4iLAo+PiArCQkgICAgc2xhdmVfbmV0ZGV2LT5uYW1lKTsKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtpbnQgYnlwYXNzX3NsYXZlX3VucmVnaXN0ZXIoc3Ry dWN0IG5ldF9kZXZpY2UgKnNsYXZlX25ldGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZSAqYnlwYXNzX25ldGRldjsKPj4gKwlzdHJ1Y3QgYnlwYXNzX29wcyAqYnlwYXNzX29wczsKPj4g KwlpbnQgcmV0Owo+PiArCj4+ICsJaWYgKCFuZXRpZl9pc19ieXBhc3Nfc2xhdmUoc2xhdmVfbmV0 ZGV2KSkKPj4gKwkJZ290byBkb25lOwo+PiArCj4+ICsJQVNTRVJUX1JUTkwoKTsKPj4gKwo+PiAr CWJ5cGFzc19uZXRkZXYgPSBieXBhc3NfbWFzdGVyX2dldF9ieW1hYyhzbGF2ZV9uZXRkZXYtPnBl cm1fYWRkciwKPj4gKwkJCQkJCSZieXBhc3Nfb3BzKTsKPj4gKwlpZiAoIWJ5cGFzc19uZXRkZXYp Cj4+ICsJCWdvdG8gZG9uZTsKPj4gKwo+PiArCXJldCA9IGJ5cGFzc19zbGF2ZV9wcmVfdW5yZWdp c3RlcihzbGF2ZV9uZXRkZXYsIGJ5cGFzc19uZXRkZXYsCj4+ICsJCQkJCSAgYnlwYXNzX29wcyk7 Cj4+ICsJaWYgKHJldCAhPSAwKQo+PiArCQlnb3RvIGRvbmU7Cj4+ICsKPj4gKwluZXRkZXZfcnhf aGFuZGxlcl91bnJlZ2lzdGVyKHNsYXZlX25ldGRldik7Cj4+ICsJbmV0ZGV2X3VwcGVyX2Rldl91 bmxpbmsoc2xhdmVfbmV0ZGV2LCBieXBhc3NfbmV0ZGV2KTsKPj4gKwlzbGF2ZV9uZXRkZXYtPnBy aXZfZmxhZ3MgJj0gfklGRl9CWVBBU1NfU0xBVkU7Cj4+ICsKPj4gKwlieXBhc3Nfc2xhdmVfcmVs ZWFzZShzbGF2ZV9uZXRkZXYsIGJ5cGFzc19uZXRkZXYsIGJ5cGFzc19vcHMpOwo+PiArCj4+ICsJ bmV0ZGV2X2luZm8oYnlwYXNzX25ldGRldiwgImJ5cGFzcyBzbGF2ZTolcyB1bnJlZ2lzdGVyZWRc biIsCj4+ICsJCSAgICBzbGF2ZV9uZXRkZXYtPm5hbWUpOwo+PiArCj4+ICtkb25lOgo+PiArCXJl dHVybiBOT1RJRllfRE9ORTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGJ5cGFzc19zbGF2 ZV91bnJlZ2lzdGVyKTsKPj4gKwo+PiArc3RhdGljIGJvb2wgYnlwYXNzX3htaXRfcmVhZHkoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKPj4gK3sKPj4gKwlyZXR1cm4gbmV0aWZfcnVubmluZyhkZXYp ICYmIG5ldGlmX2NhcnJpZXJfb2soZGV2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBieXBh c3Nfc2xhdmVfbGlua19jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX25ldGRldikKPj4g K3sKPj4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqYnlwYXNzX25ldGRldiwgKmFjdGl2ZV9uZXRkZXYs ICpiYWNrdXBfbmV0ZGV2Owo+PiArCXN0cnVjdCBieXBhc3Nfb3BzICpieXBhc3Nfb3BzOwo+PiAr CXN0cnVjdCBieXBhc3NfaW5mbyAqYmk7Cj4+ICsKPj4gKwlpZiAoIW5ldGlmX2lzX2J5cGFzc19z bGF2ZShzbGF2ZV9uZXRkZXYpKQo+PiArCQlnb3RvIGRvbmU7Cj4+ICsKPj4gKwlBU1NFUlRfUlRO TCgpOwo+PiArCj4+ICsJYnlwYXNzX25ldGRldiA9IGJ5cGFzc19tYXN0ZXJfZ2V0X2J5bWFjKHNs YXZlX25ldGRldi0+cGVybV9hZGRyLAo+PiArCQkJCQkJJmJ5cGFzc19vcHMpOwo+PiArCWlmICgh YnlwYXNzX25ldGRldikKPj4gKwkJZ290byBkb25lOwo+PiArCj4+ICsJaWYgKGJ5cGFzc19vcHMp IHsKPj4gKwkJaWYgKCFieXBhc3Nfb3BzLT5zbGF2ZV9saW5rX2NoYW5nZSkKPj4gKwkJCWdvdG8g ZG9uZTsKPj4gKwo+PiArCQlyZXR1cm4gYnlwYXNzX29wcy0+c2xhdmVfbGlua19jaGFuZ2Uoc2xh dmVfbmV0ZGV2LAo+PiArCQkJCQkJICAgICBieXBhc3NfbmV0ZGV2KTsKPj4gKwl9Cj4+ICsKPj4g KwlpZiAoIW5ldGlmX3J1bm5pbmcoYnlwYXNzX25ldGRldikpCj4+ICsJCXJldHVybiAwOwo+PiAr Cj4+ICsJYmkgPSBuZXRkZXZfcHJpdihieXBhc3NfbmV0ZGV2KTsKPj4gKwo+PiArCWFjdGl2ZV9u ZXRkZXYgPSBydG5sX2RlcmVmZXJlbmNlKGJpLT5hY3RpdmVfbmV0ZGV2KTsKPj4gKwliYWNrdXBf bmV0ZGV2ID0gcnRubF9kZXJlZmVyZW5jZShiaS0+YmFja3VwX25ldGRldik7Cj4+ICsKPj4gKwlp ZiAoc2xhdmVfbmV0ZGV2ICE9IGFjdGl2ZV9uZXRkZXYgJiYgc2xhdmVfbmV0ZGV2ICE9IGJhY2t1 cF9uZXRkZXYpCj4+ICsJCWdvdG8gZG9uZTsKPiBZb3UgZG9uJ3QgbmVlZCB0aGlzIGNoZWNrLiAi aWYgKCFuZXRpZl9pc19ieXBhc3Nfc2xhdmUoc2xhdmVfbmV0ZGV2KSkiCj4gYWJvdmUgaXMgZW5v dWdoLgoKSSB0aGluayB3ZSBuZWVkIHRoaXMgY2hlY2sgdG8gbm90IGFsbG93IGV2ZW50cyBmcm9t IGEgc2xhdmUgdGhhdCBpcyBub3QKYXR0YWNoZWQgdG8gdGhpcyBtYXN0ZXIgYnV0IGhhcyB0aGUg c2FtZSBNQUMuCgo+Cj4KPj4gKwo+PiArCWlmICgoYWN0aXZlX25ldGRldiAmJiBieXBhc3NfeG1p dF9yZWFkeShhY3RpdmVfbmV0ZGV2KSkgfHwKPj4gKwkgICAgKGJhY2t1cF9uZXRkZXYgJiYgYnlw YXNzX3htaXRfcmVhZHkoYmFja3VwX25ldGRldikpKSB7Cj4+ICsJCW5ldGlmX2NhcnJpZXJfb24o YnlwYXNzX25ldGRldik7Cj4+ICsJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhieXBhc3NfbmV0 ZGV2KTsKPj4gKwl9IGVsc2Ugewo+PiArCQluZXRpZl9jYXJyaWVyX29mZihieXBhc3NfbmV0ZGV2 KTsKPj4gKwkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGJ5cGFzc19uZXRkZXYpOwo+PiArCX0K Pj4gKwo+PiArZG9uZToKPj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBib29sIGJ5cGFzc192YWxpZGF0ZV9ldmVudF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKPj4gK3sKPj4gKwkvKiBTa2lwIHBhcmVudCBldmVudHMgKi8KPj4gKwlpZiAobmV0aWZfaXNf YnlwYXNzX21hc3RlcihkZXYpKQo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwkvKiBBdm9p ZCBub24tRXRoZXJuZXQgdHlwZSBkZXZpY2VzICovCj4+ICsJaWYgKGRldi0+dHlwZSAhPSBBUlBI UkRfRVRIRVIpCj4+ICsJCXJldHVybiBmYWxzZTsKPj4gKwo+PiArCS8qIEF2b2lkIFZsYW4gZGV2 IHdpdGggc2FtZSBNQUMgcmVnaXN0ZXJpbmcgYXMgVkYgKi8KPj4gKwlpZiAoaXNfdmxhbl9kZXYo ZGV2KSkKPj4gKwkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsJLyogQXZvaWQgQm9uZGluZyBtYXN0 ZXIgZGV2IHdpdGggc2FtZSBNQUMgcmVnaXN0ZXJpbmcgYXMgc2xhdmUgZGV2ICovCj4+ICsJaWYg KChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfQk9ORElORykgJiYgKGRldi0+ZmxhZ3MgJiBJRkZfTUFT VEVSKSkKPiBZZWFoLCB0aGlzIGlzIGNlcnRhaW5seSBpbmNvcnJlY3QuIE9uZSB0aGluZyBpcywg eW91IHNob3VsZCBiZSB1c2luZyB0aGUKPiBoZWxwZXJzIG5ldGlmX2lzX2JvbmRfbWFzdGVyKCku Cj4gQnV0IHdoYXQgYWJvdXQgdGhlIHJlc3Q/IG1hY3NlYywgbWFjdmxhbiwgdGVhbSwgYnJpZGdl LCBvdnMgYW5kIG90aGVycz8KPgo+IFlvdSBuZWVkIHRvIGRvIGl0IG5vdCBieSBibGFja2xpc3Rp bmcsIGJ1dCB3aXRoIHdoaXRlbGlzdGluZy4gWW91IG5lZWQKPiB0byB3aGl0ZWxpc3QgVkYgZGV2 aWNlcy4gTXkgcG9ydCBmbGF2b3VycyBwYXRjaHNldCBtaWdodCBoZWxwIHdpdGggdGhpcy4KCk1h eSBiZSBpIGNhbiB1c2UgbmV0ZGV2X2hhc19sb3dlcl9kZXYoKSBoZWxwZXIgdG8gbWFrZSBzdXJl IHRoYXQgdGhlIHNsYXZlCmRldmljZSBpcyBub3QgYW4gdXBwZXIgZGV2LgpDYW4geW91IHBvaW50 IHRvIHlvdXIgcG9ydCBmbGF2b3VycyBwYXRjaHNldD8gSXMgaXQgdXBzdHJlYW0/Cgo+Cj4KPj4g KwkJcmV0dXJuIGZhbHNlOwo+PiArCj4+ICsJcmV0dXJuIHRydWU7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBpbnQKPj4gK2J5cGFzc19ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVu c2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKPj4gK3sKPj4gKwlzdHJ1Y3QgbmV0X2Rldmlj ZSAqZXZlbnRfZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7Cj4+ICsKPj4g KwlpZiAoIWJ5cGFzc192YWxpZGF0ZV9ldmVudF9kZXYoZXZlbnRfZGV2KSkKPj4gKwkJcmV0dXJu IE5PVElGWV9ET05FOwo+PiArCj4+ICsJc3dpdGNoIChldmVudCkgewo+PiArCWNhc2UgTkVUREVW X1JFR0lTVEVSOgo+PiArCQlyZXR1cm4gYnlwYXNzX3NsYXZlX3JlZ2lzdGVyKGV2ZW50X2Rldik7 Cj4+ICsJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKPj4gKwkJcmV0dXJuIGJ5cGFzc19zbGF2ZV91 bnJlZ2lzdGVyKGV2ZW50X2Rldik7Cj4+ICsJY2FzZSBORVRERVZfVVA6Cj4+ICsJY2FzZSBORVRE RVZfRE9XTjoKPj4gKwljYXNlIE5FVERFVl9DSEFOR0U6Cj4+ICsJCXJldHVybiBieXBhc3Nfc2xh dmVfbGlua19jaGFuZ2UoZXZlbnRfZGV2KTsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gTk9U SUZZX0RPTkU7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Js b2NrIGJ5cGFzc19ub3RpZmllciA9IHsKPj4gKwkubm90aWZpZXJfY2FsbCA9IGJ5cGFzc19ldmVu dCwKPj4gK307Cj4+ICsKPj4gK2ludCBieXBhc3Nfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KQo+PiArewo+PiArCXN0cnVjdCBieXBhc3NfaW5mbyAqYmkgPSBuZXRkZXZfcHJpdihkZXYpOwo+ PiArCXN0cnVjdCBuZXRfZGV2aWNlICphY3RpdmVfbmV0ZGV2LCAqYmFja3VwX25ldGRldjsKPj4g KwlpbnQgZXJyOwo+PiArCj4+ICsJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKPj4gKwluZXRpZl90 eF93YWtlX2FsbF9xdWV1ZXMoZGV2KTsKPj4gKwo+PiArCWFjdGl2ZV9uZXRkZXYgPSBydG5sX2Rl cmVmZXJlbmNlKGJpLT5hY3RpdmVfbmV0ZGV2KTsKPj4gKwlpZiAoYWN0aXZlX25ldGRldikgewo+ PiArCQllcnIgPSBkZXZfb3BlbihhY3RpdmVfbmV0ZGV2KTsKPj4gKwkJaWYgKGVycikKPj4gKwkJ CWdvdG8gZXJyX2FjdGl2ZV9vcGVuOwo+PiArCX0KPj4gKwo+PiArCWJhY2t1cF9uZXRkZXYgPSBy dG5sX2RlcmVmZXJlbmNlKGJpLT5iYWNrdXBfbmV0ZGV2KTsKPj4gKwlpZiAoYmFja3VwX25ldGRl dikgewo+PiArCQllcnIgPSBkZXZfb3BlbihiYWNrdXBfbmV0ZGV2KTsKPj4gKwkJaWYgKGVycikK Pj4gKwkJCWdvdG8gZXJyX2JhY2t1cF9vcGVuOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+ PiArCj4+ICtlcnJfYmFja3VwX29wZW46Cj4+ICsJZGV2X2Nsb3NlKGFjdGl2ZV9uZXRkZXYpOwo+ PiArZXJyX2FjdGl2ZV9vcGVuOgo+PiArCW5ldGlmX3R4X2Rpc2FibGUoZGV2KTsKPj4gKwlyZXR1 cm4gZXJyOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoYnlwYXNzX29wZW4pOwo+PiArCj4+ ICtpbnQgYnlwYXNzX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3Ry dWN0IGJ5cGFzc19pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7Cj4gVGhpcyBzaG91bGQgYmUg cHJvYmFibHkgImJpIgoKWWVzLgoKCj4KPgo+PiArCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9u ZXRkZXY7Cj4+ICsKPj4gKwluZXRpZl90eF9kaXNhYmxlKGRldik7Cj4+ICsKPj4gKwlzbGF2ZV9u ZXRkZXYgPSBydG5sX2RlcmVmZXJlbmNlKHZpLT5hY3RpdmVfbmV0ZGV2KTsKPj4gKwlpZiAoc2xh dmVfbmV0ZGV2KQo+PiArCQlkZXZfY2xvc2Uoc2xhdmVfbmV0ZGV2KTsKPj4gKwo+PiArCXNsYXZl X25ldGRldiA9IHJ0bmxfZGVyZWZlcmVuY2UodmktPmJhY2t1cF9uZXRkZXYpOwo+PiArCWlmIChz bGF2ZV9uZXRkZXYpCj4+ICsJCWRldl9jbG9zZShzbGF2ZV9uZXRkZXYpOwo+PiArCj4+ICsJcmV0 dXJuIDA7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChieXBhc3NfY2xvc2UpOwo+PiArCj4+ ICtzdGF0aWMgbmV0ZGV2X3R4X3QgYnlwYXNzX2Ryb3BfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQo+PiArewo+PiArCWF0b21pY19sb25nX2luYygmZGV2 LT50eF9kcm9wcGVkKTsKPj4gKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwo+PiArCXJldHVybiBO RVRERVZfVFhfT0s7Cj4+ICt9Cj4+ICsKPj4gK25ldGRldl90eF90IGJ5cGFzc19zdGFydF94bWl0 KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJ c3RydWN0IGJ5cGFzc19pbmZvICpiaSA9IG5ldGRldl9wcml2KGRldik7Cj4gSWYgeW91IHJlbmFt ZSB0aGUgb3RoZXIgdmFyaWFibGUgdG8gImJwbWFzdGVyX2RldiIsIGl0IHdvdWxkIGJlIG5pY2Ug dG8KPiByZW5hbWUgdGhpcyB0byBicGluZm8gb3Igc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRpdmUu ICJiaSIgaXMgdG9vIHNob3J0Cj4gdG8ga25vdyB3aGF0IHRoYXQgaXMgcmlnaHQgYXdheS4KCldp bGwgcmVuYW1lIGJ5cGFzc19uZXRkZXYgdG8gYnlwYXNzX2Rldi4gYnlwYXNzIGluZGljYXRlcyB0 aGF0IGl0IGlzCmFuIHVwcGVyIG1hc3RlciBkZXYuCgoKPgo+Cj4+ICsJc3RydWN0IG5ldF9kZXZp Y2UgKnhtaXRfZGV2Owo+IERvbid0IG1peCAiZGV2IiBhbmQgIm5ldGRldiIgaW4gb25lIC5jIGZp bGUuIEp1c3QgdXNlICJkZXYiIGZvciBhbGwuCgpPSy4KCgo+Cj4KPgo+PiArCj4+ICsJLyogVHJ5 IHhtaXQgdmlhIGFjdGl2ZSBuZXRkZXYgZm9sbG93ZWQgYnkgYmFja3VwIG5ldGRldiAqLwo+PiAr CXhtaXRfZGV2ID0gcmN1X2RlcmVmZXJlbmNlX2JoKGJpLT5hY3RpdmVfbmV0ZGV2KTsKPj4gKwlp ZiAoIXhtaXRfZGV2IHx8ICFieXBhc3NfeG1pdF9yZWFkeSh4bWl0X2RldikpIHsKPj4gKwkJeG1p dF9kZXYgPSByY3VfZGVyZWZlcmVuY2VfYmgoYmktPmJhY2t1cF9uZXRkZXYpOwo+PiArCQlpZiAo IXhtaXRfZGV2IHx8ICFieXBhc3NfeG1pdF9yZWFkeSh4bWl0X2RldikpCj4+ICsJCQlyZXR1cm4g YnlwYXNzX2Ryb3BfeG1pdChza2IsIGRldik7Cj4+ICsJfQo+PiArCj4+ICsJc2tiLT5kZXYgPSB4 bWl0X2RldjsKPj4gKwlza2ItPnF1ZXVlX21hcHBpbmcgPSBxZGlzY19za2JfY2Ioc2tiKS0+c2xh dmVfZGV2X3F1ZXVlX21hcHBpbmc7Cj4+ICsKPj4gKwlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2ti KTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGJ5cGFzc19zdGFydF94bWl0KTsKPj4gKwo+ PiArdTE2IGJ5cGFzc19zZWxlY3RfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0 IHNrX2J1ZmYgKnNrYiwKPj4gKwkJCXZvaWQgKmFjY2VsX3ByaXYsIHNlbGVjdF9xdWV1ZV9mYWxs YmFja190IGZhbGxiYWNrKQo+PiArewo+PiArCS8qIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGV4aXN0 cyB0byBoZWxwIGRldl9waWNrX3R4IGdldCB0aGUgY29ycmVjdAo+PiArCSAqIGRlc3RpbmF0aW9u IHF1ZXVlLiAgVXNpbmcgYSBoZWxwZXIgZnVuY3Rpb24gc2tpcHMgYSBjYWxsIHRvCj4+ICsJICog c2tiX3R4X2hhc2ggYW5kIHdpbGwgcHV0IHRoZSBza2JzIGluIHRoZSBxdWV1ZSB3ZSBleHBlY3Qg b24gdGhlaXIKPj4gKwkgKiB3YXkgZG93biB0byB0aGUgYm9uZGluZyBkcml2ZXIuCj4+ICsJICov Cj4+ICsJdTE2IHR4cSA9IHNrYl9yeF9xdWV1ZV9yZWNvcmRlZChza2IpID8gc2tiX2dldF9yeF9x dWV1ZShza2IpIDogMDsKPj4gKwo+PiArCS8qIFNhdmUgdGhlIG9yaWdpbmFsIHR4cSB0byByZXN0 b3JlIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBkcml2ZXIgKi8KPj4gKwlxZGlzY19za2JfY2Ioc2ti KS0+c2xhdmVfZGV2X3F1ZXVlX21hcHBpbmcgPSBza2ItPnF1ZXVlX21hcHBpbmc7Cj4+ICsKPj4g KwlpZiAodW5saWtlbHkodHhxID49IGRldi0+cmVhbF9udW1fdHhfcXVldWVzKSkgewo+PiArCQlk byB7Cj4+ICsJCQl0eHEgLT0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXM7Cj4+ICsJCX0gd2hpbGUg KHR4cSA+PSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyk7Cj4+ICsJfQo+PiArCj4+ICsJcmV0dXJu IHR4cTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGJ5cGFzc19zZWxlY3RfcXVldWUpOwo+ PiArCj4+ICsvKiBmb2xkIHN0YXRzLCBhc3N1bWluZyBhbGwgcnRubF9saW5rX3N0YXRzNjQgZmll bGRzIGFyZSB1NjQsIGJ1dAo+PiArICogdGhhdCBzb21lIGRyaXZlcnMgY2FuIHByb3ZpZGUgMzJi aXQgdmFsdWVzIG9ubHkuCj4+ICsgKi8KPj4gK3N0YXRpYyB2b2lkIGJ5cGFzc19mb2xkX3N0YXRz KHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqX3JlcywKPj4gKwkJCSAgICAgIGNvbnN0IHN0cnVj dCBydG5sX2xpbmtfc3RhdHM2NCAqX25ldywKPj4gKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBydG5s X2xpbmtfc3RhdHM2NCAqX29sZCkKPj4gK3sKPj4gKwljb25zdCB1NjQgKm5ldyA9IChjb25zdCB1 NjQgKilfbmV3Owo+PiArCWNvbnN0IHU2NCAqb2xkID0gKGNvbnN0IHU2NCAqKV9vbGQ7Cj4+ICsJ dTY0ICpyZXMgPSAodTY0ICopX3JlczsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWZvciAoaSA9IDA7 IGkgPCBzaXplb2YoKl9yZXMpIC8gc2l6ZW9mKHU2NCk7IGkrKykgewo+PiArCQl1NjQgbnYgPSBu ZXdbaV07Cj4+ICsJCXU2NCBvdiA9IG9sZFtpXTsKPj4gKwkJczY0IGRlbHRhID0gbnYgLSBvdjsK Pj4gKwo+PiArCQkvKiBkZXRlY3RzIGlmIHRoaXMgcGFydGljdWxhciBmaWVsZCBpcyAzMmJpdCBv bmx5ICovCj4+ICsJCWlmICgoKG52IHwgb3YpID4+IDMyKSA9PSAwKQo+PiArCQkJZGVsdGEgPSAo czY0KShzMzIpKCh1MzIpbnYgLSAodTMyKW92KTsKPj4gKwo+PiArCQkvKiBmaWx0ZXIgYW5vbWFs aWVzLCBzb21lIGRyaXZlcnMgcmVzZXQgdGhlaXIgc3RhdHMKPj4gKwkJICogYXQgZG93bi91cCBl dmVudHMuCj4+ICsJCSAqLwo+PiArCQlpZiAoZGVsdGEgPiAwKQo+PiArCQkJcmVzW2ldICs9IGRl bHRhOwo+PiArCX0KPj4gK30KPj4gKwo+PiArdm9pZCBieXBhc3NfZ2V0X3N0YXRzKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCAqc3RhdHMpCj4+ICt7Cj4+ ICsJc3RydWN0IGJ5cGFzc19pbmZvICpiaSA9IG5ldGRldl9wcml2KGRldik7Cj4gWW91IGNhbiBX QVJOX09OIGFuZCByZXR1cm4gaW4gY2FzZSB0aGUgZGV2IGlzIG5vdCBieXBhc3MgbWFzdGVyLCBq dXN0Cj4gdG8gY2F0Y2ggYnVnZ3kgZHJpdmVycy4gU2FtZSB3aXRoIG90aGVyIGhlbHBlcnMuCgpJ IGNhbiBtYWtlIHRoaXMgc3RhdGljIGFuZCBub3QgZXhwb3J0IHRoaXMgaGVscGVyIGFzIHdlbGwg YXMgYWxsCmJ5cGFzc19uZXRkZXYgb3BzLgoKPgo+Cj4+ICsJY29uc3Qgc3RydWN0IHJ0bmxfbGlu a19zdGF0czY0ICpuZXc7Cj4+ICsJc3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHRlbXA7Cj4+ICsJ c3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX25ldGRldjsKPj4gKwo+PiArCXNwaW5fbG9jaygmYmkt PnN0YXRzX2xvY2spOwo+PiArCW1lbWNweShzdGF0cywgJmJpLT5ieXBhc3Nfc3RhdHMsIHNpemVv Zigqc3RhdHMpKTsKPj4gKwo+PiArCXJjdV9yZWFkX2xvY2soKTsKPj4gKwo+PiArCXNsYXZlX25l dGRldiA9IHJjdV9kZXJlZmVyZW5jZShiaS0+YWN0aXZlX25ldGRldik7Cj4+ICsJaWYgKHNsYXZl X25ldGRldikgewo+PiArCQluZXcgPSBkZXZfZ2V0X3N0YXRzKHNsYXZlX25ldGRldiwgJnRlbXAp Owo+PiArCQlieXBhc3NfZm9sZF9zdGF0cyhzdGF0cywgbmV3LCAmYmktPmFjdGl2ZV9zdGF0cyk7 Cj4+ICsJCW1lbWNweSgmYmktPmFjdGl2ZV9zdGF0cywgbmV3LCBzaXplb2YoKm5ldykpOwo+PiAr CX0KPj4gKwo+PiArCXNsYXZlX25ldGRldiA9IHJjdV9kZXJlZmVyZW5jZShiaS0+YmFja3VwX25l dGRldik7Cj4+ICsJaWYgKHNsYXZlX25ldGRldikgewo+PiArCQluZXcgPSBkZXZfZ2V0X3N0YXRz KHNsYXZlX25ldGRldiwgJnRlbXApOwo+PiArCQlieXBhc3NfZm9sZF9zdGF0cyhzdGF0cywgbmV3 LCAmYmktPmJhY2t1cF9zdGF0cyk7Cj4+ICsJCW1lbWNweSgmYmktPmJhY2t1cF9zdGF0cywgbmV3 LCBzaXplb2YoKm5ldykpOwo+PiArCX0KPj4gKwo+PiArCXJjdV9yZWFkX3VubG9jaygpOwo+PiAr Cj4+ICsJbWVtY3B5KCZiaS0+YnlwYXNzX3N0YXRzLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpOwo+ PiArCXNwaW5fdW5sb2NrKCZiaS0+c3RhdHNfbG9jayk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9M X0dQTChieXBhc3NfZ2V0X3N0YXRzKTsKPj4gKwo+PiAraW50IGJ5cGFzc19jaGFuZ2VfbXR1KHN0 cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQo+PiArewo+PiArCXN0cnVjdCBieXBh c3NfaW5mbyAqYmkgPSBuZXRkZXZfcHJpdihkZXYpOwo+PiArCXN0cnVjdCBuZXRfZGV2aWNlICph Y3RpdmVfbmV0ZGV2LCAqYmFja3VwX25ldGRldjsKPj4gKwlpbnQgcmV0ID0gMDsKPiBQb2ludGxl c3MgaW5pdGlhbGl6YXRpb24uCj4KPgo+PiArCj4+ICsJYWN0aXZlX25ldGRldiA9IHJjdV9kZXJl ZmVyZW5jZShiaS0+YWN0aXZlX25ldGRldik7Cj4+ICsJaWYgKGFjdGl2ZV9uZXRkZXYpIHsKPj4g KwkJcmV0ID0gZGV2X3NldF9tdHUoYWN0aXZlX25ldGRldiwgbmV3X210dSk7Cj4+ICsJCWlmIChy ZXQpCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCWJhY2t1cF9uZXRkZXYgPSBy Y3VfZGVyZWZlcmVuY2UoYmktPmJhY2t1cF9uZXRkZXYpOwo+PiArCWlmIChiYWNrdXBfbmV0ZGV2 KSB7Cj4+ICsJCXJldCA9IGRldl9zZXRfbXR1KGJhY2t1cF9uZXRkZXYsIG5ld19tdHUpOwo+PiAr CQlpZiAocmV0KSB7Cj4+ICsJCQlkZXZfc2V0X210dShhY3RpdmVfbmV0ZGV2LCBkZXYtPm10dSk7 Cj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZGV2LT5tdHUgPSBu ZXdfbXR1Owo+PiArCXJldHVybiAwOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoYnlwYXNz X2NoYW5nZV9tdHUpOwo+PiArCj4+ICt2b2lkIGJ5cGFzc19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQo+PiArewo+PiArCXN0cnVjdCBieXBhc3NfaW5mbyAqYmkgPSBuZXRkZXZf cHJpdihkZXYpOwo+PiArCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9uZXRkZXY7Cj4+ICsKPj4g KwlyY3VfcmVhZF9sb2NrKCk7Cj4+ICsKPj4gKwlzbGF2ZV9uZXRkZXYgPSByY3VfZGVyZWZlcmVu Y2UoYmktPmFjdGl2ZV9uZXRkZXYpOwo+PiArCWlmIChzbGF2ZV9uZXRkZXYpIHsKPj4gKwkJZGV2 X3VjX3N5bmNfbXVsdGlwbGUoc2xhdmVfbmV0ZGV2LCBkZXYpOwo+PiArCQlkZXZfbWNfc3luY19t dWx0aXBsZShzbGF2ZV9uZXRkZXYsIGRldik7Cj4+ICsJfQo+PiArCj4+ICsJc2xhdmVfbmV0ZGV2 ID0gcmN1X2RlcmVmZXJlbmNlKGJpLT5iYWNrdXBfbmV0ZGV2KTsKPj4gKwlpZiAoc2xhdmVfbmV0 ZGV2KSB7Cj4+ICsJCWRldl91Y19zeW5jX211bHRpcGxlKHNsYXZlX25ldGRldiwgZGV2KTsKPj4g KwkJZGV2X21jX3N5bmNfbXVsdGlwbGUoc2xhdmVfbmV0ZGV2LCBkZXYpOwo+PiArCX0KPj4gKwo+ PiArCXJjdV9yZWFkX3VubG9jaygpOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoYnlwYXNz X3NldF9yeF9tb2RlKTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29w cyBieXBhc3NfbmV0ZGV2X29wcyA9IHsKPj4gKwkubmRvX29wZW4JCT0gYnlwYXNzX29wZW4sCj4+ ICsJLm5kb19zdG9wCQk9IGJ5cGFzc19jbG9zZSwKPj4gKwkubmRvX3N0YXJ0X3htaXQJCT0gYnlw YXNzX3N0YXJ0X3htaXQsCj4+ICsJLm5kb19zZWxlY3RfcXVldWUJPSBieXBhc3Nfc2VsZWN0X3F1 ZXVlLAo+PiArCS5uZG9fZ2V0X3N0YXRzNjQJPSBieXBhc3NfZ2V0X3N0YXRzLAo+PiArCS5uZG9f Y2hhbmdlX210dQkJPSBieXBhc3NfY2hhbmdlX210dSwKPj4gKwkubmRvX3NldF9yeF9tb2RlCT0g YnlwYXNzX3NldF9yeF9tb2RlLAo+PiArCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0 ZV9hZGRyLAo+PiArCS5uZG9fZmVhdHVyZXNfY2hlY2sJPSBwYXNzdGhydV9mZWF0dXJlc19jaGVj aywKPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUgQllQQVNTX0RSVl9OQU1FICJieXBhc3MiCj4+ICsj ZGVmaW5lIEJZUEFTU19EUlZfVkVSU0lPTiAiMC4xIgo+PiArCj4+ICtzdGF0aWMgdm9pZCBieXBh c3NfZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+PiArCQkJCSAg ICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQo+PiArewo+PiArCXN0cmxjcHko ZHJ2aW5mby0+ZHJpdmVyLCBCWVBBU1NfRFJWX05BTUUsIHNpemVvZihkcnZpbmZvLT5kcml2ZXIp KTsKPj4gKwlzdHJsY3B5KGRydmluZm8tPnZlcnNpb24sIEJZUEFTU19EUlZfVkVSU0lPTiwgc2l6 ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKPj4gK30KPj4gKwo+PiAraW50IGJ5cGFzc19ldGh0b29s X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAo+PiArCQkJCSAgICAg IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCj4+ICt7Cj4+ICsJc3RydWN0IGJ5 cGFzc19pbmZvICpiaSA9IG5ldGRldl9wcml2KGRldik7Cj4+ICsJc3RydWN0IG5ldF9kZXZpY2Ug KnNsYXZlX25ldGRldjsKPj4gKwo+PiArCXNsYXZlX25ldGRldiA9IHJ0bmxfZGVyZWZlcmVuY2Uo YmktPmFjdGl2ZV9uZXRkZXYpOwo+PiArCWlmICghc2xhdmVfbmV0ZGV2IHx8ICFieXBhc3NfeG1p dF9yZWFkeShzbGF2ZV9uZXRkZXYpKSB7Cj4+ICsJCXNsYXZlX25ldGRldiA9IHJ0bmxfZGVyZWZl cmVuY2UoYmktPmJhY2t1cF9uZXRkZXYpOwo+PiArCQlpZiAoIXNsYXZlX25ldGRldiB8fCAhYnlw YXNzX3htaXRfcmVhZHkoc2xhdmVfbmV0ZGV2KSkgewo+PiArCQkJY21kLT5iYXNlLmR1cGxleCA9 IERVUExFWF9VTktOT1dOOwo+PiArCQkJY21kLT5iYXNlLnBvcnQgPSBQT1JUX09USEVSOwo+PiAr CQkJY21kLT5iYXNlLnNwZWVkID0gU1BFRURfVU5LTk9XTjsKPj4gKwo+PiArCQkJcmV0dXJuIDA7 Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gX19ldGh0b29sX2dldF9saW5rX2tzZXR0 aW5ncyhzbGF2ZV9uZXRkZXYsIGNtZCk7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChieXBh c3NfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MpOwo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGV0aHRvb2xfb3BzIGJ5cGFzc19ldGh0b29sX29wcyA9IHsKPj4gKwkuZ2V0X2RydmluZm8g ICAgICAgICAgICA9IGJ5cGFzc19ldGh0b29sX2dldF9kcnZpbmZvLAo+PiArCS5nZXRfbGluayAg ICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKPj4gKwkuZ2V0X2xpbmtfa3NldHRp bmdzICAgICA9IGJ5cGFzc19ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncywKPj4gK307Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGJ5cGFzc19yZWdpc3Rlcl9leGlzdGluZ19zbGF2ZShzdHJ1Y3QgbmV0 X2RldmljZSAqYnlwYXNzX25ldGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZf bmV0KGJ5cGFzc19uZXRkZXYpOwo+PiArCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Cj4+ICsKPj4g KwlydG5sX2xvY2soKTsKPj4gKwlmb3JfZWFjaF9uZXRkZXYobmV0LCBkZXYpIHsKPj4gKwkJaWYg KGRldiA9PSBieXBhc3NfbmV0ZGV2KQo+PiArCQkJY29udGludWU7Cj4+ICsJCWlmICghYnlwYXNz X3ZhbGlkYXRlX2V2ZW50X2RldihkZXYpKQo+PiArCQkJY29udGludWU7Cj4+ICsJCWlmIChldGhl cl9hZGRyX2VxdWFsKGJ5cGFzc19uZXRkZXYtPnBlcm1fYWRkciwgZGV2LT5wZXJtX2FkZHIpKQo+ PiArCQkJYnlwYXNzX3NsYXZlX3JlZ2lzdGVyKGRldik7Cj4+ICsJfQo+PiArCXJ0bmxfdW5sb2Nr KCk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBieXBhc3NfbWFzdGVyX3JlZ2lzdGVyKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYsIHN0cnVjdCBieXBhc3Nfb3BzICpvcHMsCj4+ICsJCQkgICBzdHJ1Y3QgYnlw YXNzX21hc3RlciAqKnBieXBhc3NfbWFzdGVyKQo+PiArewo+PiArCXN0cnVjdCBieXBhc3NfbWFz dGVyICpieXBhc3NfbWFzdGVyOwo+PiArCj4+ICsJYnlwYXNzX21hc3RlciA9IGt6YWxsb2Moc2l6 ZW9mKCpieXBhc3NfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFieXBhc3NfbWFzdGVy KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArCXJjdV9hc3NpZ25fcG9pbnRlcihieXBh c3NfbWFzdGVyLT5vcHMsIG9wcyk7Cj4+ICsJZGV2X2hvbGQoZGV2KTsKPj4gKwlkZXYtPnByaXZf ZmxhZ3MgfD0gSUZGX0JZUEFTUzsKPj4gKwlyY3VfYXNzaWduX3BvaW50ZXIoYnlwYXNzX21hc3Rl ci0+YnlwYXNzX25ldGRldiwgZGV2KTsKPj4gKwo+PiArCXNwaW5fbG9jaygmYnlwYXNzX2xvY2sp Owo+PiArCWxpc3RfYWRkX3RhaWwoJmJ5cGFzc19tYXN0ZXItPmxpc3QsICZieXBhc3NfbWFzdGVy X2xpc3QpOwo+PiArCXNwaW5fdW5sb2NrKCZieXBhc3NfbG9jayk7Cj4+ICsKPj4gKwlieXBhc3Nf cmVnaXN0ZXJfZXhpc3Rpbmdfc2xhdmUoZGV2KTsKPj4gKwo+PiArCSpwYnlwYXNzX21hc3RlciA9 IGJ5cGFzc19tYXN0ZXI7Cj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MX0dQ TChieXBhc3NfbWFzdGVyX3JlZ2lzdGVyKTsKPj4gKwo+PiArdm9pZCBieXBhc3NfbWFzdGVyX3Vu cmVnaXN0ZXIoc3RydWN0IGJ5cGFzc19tYXN0ZXIgKmJ5cGFzc19tYXN0ZXIpCj4+ICt7Cj4+ICsJ c3RydWN0IG5ldF9kZXZpY2UgKmJ5cGFzc19uZXRkZXY7Cj4+ICsKPj4gKwlieXBhc3NfbmV0ZGV2 ID0gcmN1X2RlcmVmZXJlbmNlKGJ5cGFzc19tYXN0ZXItPmJ5cGFzc19uZXRkZXYpOwo+PiArCj4+ ICsJYnlwYXNzX25ldGRldi0+cHJpdl9mbGFncyAmPSB+SUZGX0JZUEFTUzsKPj4gKwlkZXZfcHV0 KGJ5cGFzc19uZXRkZXYpOwo+PiArCj4+ICsJc3Bpbl9sb2NrKCZieXBhc3NfbG9jayk7Cj4+ICsJ bGlzdF9kZWwoJmJ5cGFzc19tYXN0ZXItPmxpc3QpOwo+PiArCXNwaW5fdW5sb2NrKCZieXBhc3Nf bG9jayk7Cj4+ICsKPj4gKwlrZnJlZShieXBhc3NfbWFzdGVyKTsKPj4gK30KPj4gK0VYUE9SVF9T WU1CT0xfR1BMKGJ5cGFzc19tYXN0ZXJfdW5yZWdpc3Rlcik7Cj4+ICsKPj4gK2ludCBieXBhc3Nf bWFzdGVyX2NyZWF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqYmFja3VwX25ldGRldiwKPj4gKwkJCSBz dHJ1Y3QgYnlwYXNzX21hc3RlciAqKnBieXBhc3NfbWFzdGVyKQo+PiArewo+PiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9IGJhY2t1cF9uZXRkZXYtPmRldi5wYXJlbnQ7Cj4+ICsJc3RydWN0IG5ldF9k ZXZpY2UgKmJ5cGFzc19uZXRkZXY7Cj4+ICsJaW50IGVycjsKPj4gKwo+PiArCS8qIEFsbG9jIGF0 IGxlYXN0IDIgcXVldWVzLCBmb3Igbm93IHdlIGFyZSBnb2luZyB3aXRoIDE2IGFzc3VtaW5nCj4+ ICsJICogdGhhdCBtb3N0IGRldmljZXMgYmVpbmcgYm9uZGVkIHdvbid0IGhhdmUgdG9vIG1hbnkg cXVldWVzLgo+PiArCSAqLwo+PiArCWJ5cGFzc19uZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShz aXplb2Yoc3RydWN0IGJ5cGFzc19pbmZvKSwgMTYpOwo+PiArCWlmICghYnlwYXNzX25ldGRldikg ewo+PiArCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBieXBhc3NfbmV0ZGV2IVxu Iik7Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCX0KPj4gKwo+PiArCWRldl9uZXRfc2V0KGJ5 cGFzc19uZXRkZXYsIGRldl9uZXQoYmFja3VwX25ldGRldikpOwo+PiArCVNFVF9ORVRERVZfREVW KGJ5cGFzc19uZXRkZXYsIGRldik7Cj4+ICsKPj4gKwlieXBhc3NfbmV0ZGV2LT5uZXRkZXZfb3Bz ID0gJmJ5cGFzc19uZXRkZXZfb3BzOwo+PiArCWJ5cGFzc19uZXRkZXYtPmV0aHRvb2xfb3BzID0g JmJ5cGFzc19ldGh0b29sX29wczsKPj4gKwo+PiArCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBv cHRpb25zICovCj4+ICsJYnlwYXNzX25ldGRldi0+cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9G TFQgfCBJRkZfTk9fUVVFVUU7Cj4+ICsJYnlwYXNzX25ldGRldi0+cHJpdl9mbGFncyAmPSB+KElG Rl9YTUlUX0RTVF9SRUxFQVNFIHwKPj4gKwkJCQkgICAgICAgSUZGX1RYX1NLQl9TSEFSSU5HKTsK Pj4gKwo+PiArCS8qIGRvbid0IGFjcXVpcmUgYnlwYXNzIG5ldGRldidzIG5ldGlmX3R4X2xvY2sg d2hlbiB0cmFuc21pdHRpbmcgKi8KPj4gKwlieXBhc3NfbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJ Rl9GX0xMVFg7Cj4+ICsKPj4gKwkvKiBEb24ndCBhbGxvdyBieXBhc3MgZGV2aWNlcyB0byBjaGFu Z2UgbmV0d29yayBuYW1lc3BhY2VzLiAqLwo+PiArCWJ5cGFzc19uZXRkZXYtPmZlYXR1cmVzIHw9 IE5FVElGX0ZfTkVUTlNfTE9DQUw7Cj4+ICsKPj4gKwlieXBhc3NfbmV0ZGV2LT5od19mZWF0dXJl cyA9IE5FVElGX0ZfSFdfQ1NVTSB8IE5FVElGX0ZfU0cgfAo+PiArCQkJCSAgICAgTkVUSUZfRl9G UkFHTElTVCB8IE5FVElGX0ZfQUxMX1RTTyB8Cj4+ICsJCQkJICAgICBORVRJRl9GX0hJR0hETUEg fCBORVRJRl9GX0xSTzsKPj4gKwo+PiArCWJ5cGFzc19uZXRkZXYtPmh3X2ZlYXR1cmVzIHw9IE5F VElGX0ZfR1NPX0VOQ0FQX0FMTDsKPj4gKwlieXBhc3NfbmV0ZGV2LT5mZWF0dXJlcyB8PSBieXBh c3NfbmV0ZGV2LT5od19mZWF0dXJlczsKPj4gKwo+PiArCW1lbWNweShieXBhc3NfbmV0ZGV2LT5k ZXZfYWRkciwgYmFja3VwX25ldGRldi0+ZGV2X2FkZHIsCj4+ICsJICAgICAgIGJ5cGFzc19uZXRk ZXYtPmFkZHJfbGVuKTsKPj4gKwo+PiArCWJ5cGFzc19uZXRkZXYtPm1pbl9tdHUgPSBiYWNrdXBf bmV0ZGV2LT5taW5fbXR1Owo+PiArCWJ5cGFzc19uZXRkZXYtPm1heF9tdHUgPSBiYWNrdXBfbmV0 ZGV2LT5tYXhfbXR1Owo+PiArCj4+ICsJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGJ5cGFzc19uZXRk ZXYpOwo+PiArCWlmIChlcnIgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJl Z2lzdGVyIGJ5cGFzc19uZXRkZXYhXG4iKTsKPj4gKwkJZ290byBlcnJfcmVnaXN0ZXJfbmV0ZGV2 Owo+PiArCX0KPj4gKwo+PiArCW5ldGlmX2NhcnJpZXJfb2ZmKGJ5cGFzc19uZXRkZXYpOwo+PiAr Cj4+ICsJZXJyID0gYnlwYXNzX21hc3Rlcl9yZWdpc3RlcihieXBhc3NfbmV0ZGV2LCBOVUxMLCBw YnlwYXNzX21hc3Rlcik7Cj4+ICsJaWYgKGVyciA8IDApCj4ganVzdCAiaWYgKGVycikiIHdvdWxk IGRvLgoKT0sKCj4KPgo+PiArCQlnb3RvIGVycl9ieXBhc3M7Cj4+ICsKPj4gKwlyZXR1cm4gMDsK Pj4gKwo+PiArZXJyX2J5cGFzczoKPj4gKwl1bnJlZ2lzdGVyX25ldGRldihieXBhc3NfbmV0ZGV2 KTsKPj4gK2Vycl9yZWdpc3Rlcl9uZXRkZXY6Cj4+ICsJZnJlZV9uZXRkZXYoYnlwYXNzX25ldGRl dik7Cj4+ICsKPj4gKwlyZXR1cm4gZXJyOwo+PiArfQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoYnlw YXNzX21hc3Rlcl9jcmVhdGUpOwo+PiArCj4+ICt2b2lkIGJ5cGFzc19tYXN0ZXJfZGVzdHJveShz dHJ1Y3QgYnlwYXNzX21hc3RlciAqYnlwYXNzX21hc3RlcikKPj4gK3sKPj4gKwlzdHJ1Y3QgbmV0 X2RldmljZSAqYnlwYXNzX25ldGRldjsKPj4gKwlzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfbmV0 ZGV2Owo+PiArCXN0cnVjdCBieXBhc3NfaW5mbyAqYmk7Cj4+ICsKPj4gKwlpZiAoIWJ5cGFzc19t YXN0ZXIpCj4+ICsJCXJldHVybjsKPj4gKwo+PiArCWJ5cGFzc19uZXRkZXYgPSByY3VfZGVyZWZl cmVuY2UoYnlwYXNzX21hc3Rlci0+YnlwYXNzX25ldGRldik7Cj4+ICsJYmkgPSBuZXRkZXZfcHJp dihieXBhc3NfbmV0ZGV2KTsKPj4gKwo+PiArCW5ldGlmX2RldmljZV9kZXRhY2goYnlwYXNzX25l dGRldik7Cj4+ICsKPj4gKwlydG5sX2xvY2soKTsKPj4gKwo+PiArCXNsYXZlX25ldGRldiA9IHJ0 bmxfZGVyZWZlcmVuY2UoYmktPmFjdGl2ZV9uZXRkZXYpOwo+PiArCWlmIChzbGF2ZV9uZXRkZXYp Cj4+ICsJCWJ5cGFzc19zbGF2ZV91bnJlZ2lzdGVyKHNsYXZlX25ldGRldik7Cj4+ICsKPj4gKwlz bGF2ZV9uZXRkZXYgPSBydG5sX2RlcmVmZXJlbmNlKGJpLT5iYWNrdXBfbmV0ZGV2KTsKPj4gKwlp ZiAoc2xhdmVfbmV0ZGV2KQo+PiArCQlieXBhc3Nfc2xhdmVfdW5yZWdpc3RlcihzbGF2ZV9uZXRk ZXYpOwo+PiArCj4+ICsJYnlwYXNzX21hc3Rlcl91bnJlZ2lzdGVyKGJ5cGFzc19tYXN0ZXIpOwo+ PiArCj4+ICsJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoYnlwYXNzX25ldGRldik7Cj4+ICsKPj4gKwly dG5sX3VubG9jaygpOwo+PiArCj4+ICsJZnJlZV9uZXRkZXYoYnlwYXNzX25ldGRldik7Cj4+ICt9 Cj4+ICtFWFBPUlRfU1lNQk9MX0dQTChieXBhc3NfbWFzdGVyX2Rlc3Ryb3kpOwo+PiArCj4+ICtz dGF0aWMgX19pbml0IGludAo+PiArYnlwYXNzX2luaXQodm9pZCkKPj4gK3sKPj4gKwlyZWdpc3Rl cl9uZXRkZXZpY2Vfbm90aWZpZXIoJmJ5cGFzc19ub3RpZmllcik7Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gK21vZHVsZV9pbml0KGJ5cGFzc19pbml0KTsKPj4gKwo+PiArc3RhdGljIF9f ZXhpdAo+PiArdm9pZCBieXBhc3NfZXhpdCh2b2lkKQo+PiArewo+PiArCXVucmVnaXN0ZXJfbmV0 ZGV2aWNlX25vdGlmaWVyKCZieXBhc3Nfbm90aWZpZXIpOwo+PiArfQo+PiArbW9kdWxlX2V4aXQo YnlwYXNzX2V4aXQpOwo+PiArCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkJ5cGFzcyBpbmZyYXN0 cnVjdHVyZS9pbnRlcmZhY2UgZm9yIFBhcmF2aXJ0dWFsIGRyaXZlcnMiKTsKPj4gK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsKPj4gLS0gCj4+IDIuMTQuMwo+PgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVmlydHVhbGl6YXRpb24gbWFpbGluZyBsaXN0 ClZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCmh0dHBzOi8vbGlzdHMu bGludXhmb3VuZGF0aW9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3ZpcnR1YWxpemF0aW9u