From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Cameron Subject: Re: [PATCH 3/5] iio: adc: add a driver for Qualcomm PM8xxx HK/XOADC Date: Sun, 19 Mar 2017 09:53:11 +0000 Message-ID: <71ef75c1-7f01-eec5-d158-c42c55436d56@kernel.org> References: <20170318133425.22418-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170318133425.22418-1-linus.walleij@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Linus Walleij , linux-iio@vger.kernel.org, Bjorn Andersson Cc: linux-arm-msm@vger.kernel.org, Stephen Boyd , Rama Krishna Phani A , Srinivas Kandagatla , Andy Gross , "Ivan T . Ivanov" , linux-arm-kernel@lists.infradead.org List-Id: linux-arm-msm@vger.kernel.org T24gMTgvMDMvMTcgMTM6MzQsIExpbnVzIFdhbGxlaWogd3JvdGU6Cj4gVGhlIFF1YWxjb21tIFBN OHh4eCBQTUlDcyBjb250YWluIGEgc2ltcGxlciBBREMgdGhhbiBpdHMKPiBzdWNjZXNzb3JzIChh bHJlYWR5IGluIHRoZSBrZXJuZWwgYXMgcWNvbS1zcG1pLXZhZGMuYyk6Cj4gdGhlIEhLL1hPIEFE QyAoSG91c2VrZWVwaW5nL0NocnlzdGFsIG9zY2lsbGF0b3IgQURDKS4KPiAKPiBBcyBmYXIgYXMg SSBjYW4gdW5kZXJzdGFuZCB0aGlzIGlzIGVxdWFsIHRvIHRoZSBQTUlDcwo+IHVzaW5nIFNTQkkg dHJhbnNwb3J0IGFuZCBlbmNvbXBhc3MgUE04MDE4LCBQTTgwMzgsCj4gUE04MDU4LCBhbmQgUE04 OTIxLCBzbyB0aGlzIGlzIHNob3J0bHkgbmFtZWQgUE04eHh4Lgo+IAo+IFRoaXMgQURDIG1vbml0 b3JzIGEgYnVuY2ggb2Ygb24tYm9hcmQgdm9sdGFnZXMgYW5kIHRoZSBkaWUKPiB0ZW1wZXJhdHVy ZSBvZiB0aGUgUE1JQyBpdHNlbGYsIGJ1dCBpdCBjYW4gYWxzbyBiZSByb3V0ZWQKPiB0byBjb252 ZXJ0IGEgZmV3IGV4dGVybmFsIE1QUHMgKG11bHRpLXB1cnBvc2UgcGlucykuIE9uCj4gdGhlIEFQ UTgwNjAgRHJhZ29uQm9hcmQgdGhpcyBmZWF0dXJlIGlzIHVzZWQgdG8gbGV0IHRoaXMKPiBBREMg Y29udmVydCBhbiBhbmFsb2cgQUxTIChBbWJpZW50IExpZ2h0IFNlbnNvcikgdm9sdGFnZQo+IHNp Z25hbCBmcm9tIGEgQ2FwZWxsYSBDTTM2MDUgQUxTIGludG8gYSBMVVggdmFsdWUuCj4gCj4gRGV2 ZWxvcGVkIGFuZCB0ZXN0ZWQgd2l0aCBBUFE4MDYwIERyYWdvbkJvYXJkIGJhc2VkIG9uCj4gSXZh bidzIGRyaXZlciBhbmQgUmFtYSBLcmlzaG5hJ3MgcGF0Y2hlcy4gVGhlIFNQTUkgVkFEQwo+IGRy aXZlciBpcyBxdWl0ZSBkaWZmZXJlbnQsIGJ1dCBzaGFyZSBlbm91Z2ggbWlub3IKPiBmdW5jdGlv bmFsaXR5IHRoYXQgSSBoYXZlIHNwbGl0IG91dCB0byB0aGUgY29tbW9uIGZpbGUKPiBpbiBhIHBy ZXZpb3VzIHBhdGNoLgo+IAo+IENjOiBsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5v cmcKPiBDYzogbGludXgtYXJtLW1zbUB2Z2VyLmtlcm5lbC5vcmcKPiBDYzogSXZhbiBULiBJdmFu b3YgPGlpdmFub3YueHpAZ21haWwuY29tPgo+IENjOiBBbmR5IEdyb3NzIDxhbmR5Lmdyb3NzQGxp bmFyby5vcmc+Cj4gQ2M6IEJqb3JuIEFuZGVyc3NvbiA8Ympvcm4uYW5kZXJzc29uQGxpbmFyby5v cmc+Cj4gQ2M6IFN0ZXBoZW4gQm95ZCA8c2JveWRAY29kZWF1cm9yYS5vcmc+Cj4gQ2M6IFNyaW5p dmFzIEthbmRhZ2F0bGEgPHNyaW5pdmFzLmthbmRhZ2F0bGFAbGluYXJvLm9yZz4KPiBDYzogUmFt YSBLcmlzaG5hIFBoYW5pIEEgPHJwaGFuaUBjb2RlYXVyb3JhLm9yZz4KPiBTaWduZWQtb2ZmLWJ5 OiBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CkEgZmV3IGxpdHRsZSBi aXRzIGlubGluZS4gIEFsd2F5cyBmaW5kIHNvbWV0aGluZyBuZXcgd2hlbiByZXJlYWRpbmcgOikK Ck90aGVyd2lzZSwgbG9va3MgZmluZSBhbmQgdGhhdCBtdXggc3R1ZmYgc2VlbXMgdG8gbWFrZSBz ZW5zZS4KCkpvbmF0aGFuCj4gLS0tCj4gQ2hhbmdlTG9nIHY0LT52NToKPiAtIEZpeCB0aGUga2J1 aWxkIGZvciBhbGxtb2QgYW5kIGFsbHllcyBhcyBkZXNjcmliZWQgZWFybGllci4KPiAtIEFkZCBh IHBlci12YXJpYW50IGluZm9ybWF0aW9uIGNvbnRhaW5lciBpbnN0ZWFkIG9mIGp1c3QgYWRkaW5n Cj4gICBhIGxpc3Qgb2YgY2hhbm5lbHMgdG8gdGhlIG1hdGNoIGRhdGEuIFVzZSB0aGlzIHZhcmlh bnQKPiAgIGluZm9ybWF0aW9uIHRocm91Z2hvdXQgdGhlIGNvZGUgdG8gc3VwcG9ydCB0aGUgdmFy aWF0aW9ucy4KPiAtIEluY29ycG9yYXRlIG5ldyBpbmZvcm1hdGlvbiBmcm9tIEJqw7ZybiBhbmQg U3RlcGhlbiBhYm91dCBob3cgdGhlCj4gICBjaGFubmVscyBhY3R1YWxseSB3b3JrIG9uIHRoZSBk aWZmZXJlbnQgdmFyaWFudHMuIFBNODA1OCBoYXMgMTYKPiAgIGNoYW5uZWxzIHRoYXQgY2FuIGJl IG11eGVkIHRvIGRpZmZlcmVudCBzb3VyY2VzLCBzbyBhbiBBTVVYCj4gICBzZXR0aW5nIGVhY2gu IFRoZSBQTTg5MjEgaXMgbW9yZSBjb21wbGV4IGJlY2F1c2UgaXQgaGFzIGEgcHJlbXV4Cj4gICBp bnN0ZWFkIG9mIGEgcHJlc2NhbGVyLgo+IC0gVG8gZGVhbCB3aXRoIHRoZSBwcmVtdXggYWRkcmVz c2luZyBzY2hlbWUgd2UgdHVybiBhbGwgY2hhbm5lbAo+ICAgc3BlY2lmaWVycyBpbnRvIHR3b2Nl bGwsIHdoZXJlIHRoZSBmaXJzdCBjZWxsIGlzIHByZXNjYWxlciBvcgo+ICAgcHJlbXV4IGFuZCB0 aGUgc2Vjb25kIG9uZSBpcyB0aGUgYW5hbG9nIG11eC4KPiAtIFJlYmFzZSBvbiBidWlsZCBmaXhl cy4KPiBDaGFuZ2VMb2cgdjMtPnY0Ogo+IC0gT25seSByZXBvc3RpbmcgdGhpcyBwYXRjaCBhcyB0 aGUgRFQgYmluZGluZ3MgYW5kIHJlZmFjdG9yaW5ncwo+ICAgYXJlIG1lcmdlZC4KPiAtIFByZWZp eCBhbGwgY2hhbm5lbCBuYW1lcyB3aXRoIFBNOFhYWF8qIHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFz aGVzLgo+IC0gVXNlIHRoZSBjb21wYXRpYmxlIHN0cmluZyB0byBuYW1lIHRoZSBJSU8gZGV2aWNl IGZvciBncmVhdGVyCj4gICBtb2RlbCBwcmVjaXNpb24uCj4gLSBGaXggdXAgYSBmZXcgZXhjZXNz IG5ld2xpbmVzLgo+IENoYW5nZUxvZyB2Mi0+djM6Cj4gLSBSZWJhc2UgdXNpbmcgUmFtYSBLcmlz aG5hJ3MgaW1wcm92ZW1lbnRzLCBzZXQgdXAgZGVmYXVsdHMgZm9yCj4gICBzY2FsaW5nIGZ1bmN0 aW9uIGFuZCBwcmVzY2FsZXIgZm9yIGVhY2ggY2hhbm5lbCwgcGVyIEFTSUMgdmFyaWFudC4KPiAt IEFsc28gc2V0IHVwIFJTViBwZXItdmFyaWFudCBhcyB0aGUgdmVuZG9yIHRyZWUgZG9lcyB0aGlz IGFuZAo+ICAgaXQgc2VlbXMgbmVjZXNzYXJ5IHRvIHNldCBSU1YwIG9uIHRoZSBtdXhvZmYgY2hh bm5lbCB0byBnZXQKPiAgIHJlYWRpbmdzIGZyb20gdGhlIFhPIHRoZXJtaXN0b3IuCj4gLSBFbmNv ZGUgZGVmYXVsdCBJSU8gdHlwZSBpbiB0aGUgZGVmYXVsdCBwZXItUE1JQyBjaGFubmVsIHRhYmxl Lgo+IC0gRml4ZWQgYSBidWcgaW4gcmF0aW9tZXRyaWMgY2FsaWJyYXRpb24gKG5lZWRlZCB0byBm b3JjZSByYXRpb21ldHJpYwo+ICAgbW9kZSkuCj4gLSBEcm9wcGVkIFBNODkxNzogdGhhdCBkb2Vz bid0IGhhdmUgYW55IFhPQURDLgo+IC0gQWRkZWQgYSBzcGVjaWFsIGZsYWcgZm9yIHRoZSBQTTgw NTg6IGl0IGFwcGFyZW50bHkgbmVlZHMgc3BlY2lhbAo+ICAgUlNWIG11eGluZyBkdWUgdG8gYmVp bmcgbmVjZXNzYXJpbHkgZGlmZmVyZW50Lgo+IC0gQXVnbWVudGVkIHRvIGhhbmRsZSBhbHRlcmVk IHJhdGlvbWV0cmljIERUIHByb3BlcnR5Lgo+IC0gRG8gbm90IGhhcmRjb2RlIHRoYXQgdGhlIHJl ZmVyZW5jZSB2b2x0YWdlIG11c3QgYmUgMi4yViwganVzdCBmZXRjaAo+ICAgYW5kIGVuYWJsZSB0 aGUgcmVndWxhdG9yLiBEaWZmZXJlbnQgUE1JQ3MgdXNlIGRpZmZlcmVudCByZWZlcmVuY2UKPiAg IHZvbHRhZ2VzLgo+IENoYW5nZUxvZyB2MS0+djI6Cj4gLSBJbnRyb2R1Y2UgYSBtdXRleCB0byBh dm9pZCBkaWZmZXJlbnQgY2xpZW50cyBzdGVwcGluZyBvbiBlYWNoIG90aGVycycKPiAgIHRvZXMK PiAtIEFkZCBhbiBvZl94bGF0ZSBmdW5jdGlvbiB0byBiZSBzdXJlIHRvIG1hdGNoIHRoZSByaWdo dCBBREMKPiAtIEFkZCBhbGwgY29tcGF0aWJsZSBzdHJpbmdzLCBub3QganVzdCBQTTgwNTgKPiAt LS0KPiAgZHJpdmVycy9paW8vYWRjL0tjb25maWcgICAgICAgICAgICAgfCAgIDExICsKPiAgZHJp dmVycy9paW8vYWRjL01ha2VmaWxlICAgICAgICAgICAgfCAgICAxICsKPiAgZHJpdmVycy9paW8v YWRjL3Fjb20tcG04eHh4LXhvYWRjLmMgfCAxMDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTA0OCBpbnNlcnRpb25zKCspCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby9hZGMvcWNvbS1wbTh4eHgteG9hZGMuYwo+IAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZyBiL2RyaXZlcnMvaWlvL2FkYy9LY29u ZmlnCj4gaW5kZXggODcyMGUxYzcwNmZlLi4yNGM5N2FkZDdmMmYgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9paW8vYWRjL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2lpby9hZGMvS2NvbmZpZwo+IEBA IC00NDUsNiArNDQ1LDE3IEBAIGNvbmZpZyBQQUxNQVNfR1BBREMKPiAgY29uZmlnIFFDT01fVkFE Q19DT01NT04KPiAgCXRyaXN0YXRlCj4gIAo+ICtjb25maWcgUUNPTV9QTThYWFhfWE9BREMKPiAr CXRyaXN0YXRlICJRdWFsY29tbSBTU0JJIFBNOHh4eCBQTUlDIFhPQURDcyIKPiArCWRlcGVuZHMg b24gTUZEX1BNOFhYWAo+ICsJc2VsZWN0IFFDT01fVkFEQ19DT01NT04KPiArCWhlbHAKPiArCSAg QURDIGRyaXZlciBmb3IgdGhlIFhPQURDIHBvcnRpb25zIG9mIHRoZSBRdWFsY29tbSBQTTh4eHgg UE1JQ3MKPiArCSAgdXNpbmcgU1NCSSB0cmFuc3BvcnQ6IFBNODAxOCwgUE04MDM4LCBQTTgwNTgs IFBNODkyMS4KPiArCj4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNo b29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKPiArCSAgd2lsbCBiZSBjYWxsZWQgcWNvbS1wbTh4eHgt eG9hZGMuCj4gKwo+ICBjb25maWcgUUNPTV9TUE1JX0lBREMKPiAgCXRyaXN0YXRlICJRdWFsY29t bSBTUE1JIFBNSUMgY3VycmVudCBBREMiCj4gIAlkZXBlbmRzIG9uIFNQTUkKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlIGIvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCj4g aW5kZXggOGMyZTI5NDA0MmFlLi4wMzk0YmM3NDBiZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9p aW8vYWRjL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9paW8vYWRjL01ha2VmaWxlCj4gQEAgLTQ1 LDYgKzQ1LDcgQEAgb2JqLSQoQ09ORklHX1BBTE1BU19HUEFEQykgKz0gcGFsbWFzX2dwYWRjLm8K PiAgb2JqLSQoQ09ORklHX1FDT01fU1BNSV9JQURDKSArPSBxY29tLXNwbWktaWFkYy5vCj4gIG9i ai0kKENPTkZJR19RQ09NX1ZBRENfQ09NTU9OKSArPSBxY29tLXZhZGMtY29tbW9uLm8KPiAgb2Jq LSQoQ09ORklHX1FDT01fU1BNSV9WQURDKSArPSBxY29tLXNwbWktdmFkYy5vCj4gK29iai0kKENP TkZJR19RQ09NX1BNOFhYWF9YT0FEQykgKz0gcWNvbS1wbTh4eHgteG9hZGMubwo+ICBvYmotJChD T05GSUdfUkNBUl9HWVJPX0FEQykgKz0gcmNhci1neXJvYWRjLm8KPiAgb2JqLSQoQ09ORklHX1JP Q0tDSElQX1NBUkFEQykgKz0gcm9ja2NoaXBfc2FyYWRjLm8KPiAgb2JqLSQoQ09ORklHX1NUWDEw NCkgKz0gc3R4MTA0Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL3Fjb20tcG04eHh4 LXhvYWRjLmMgYi9kcml2ZXJzL2lpby9hZGMvcWNvbS1wbTh4eHgteG9hZGMuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5jZWE4ZjFmYjQ0NGEKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9paW8vYWRjL3Fjb20tcG04eHh4LXhvYWRjLmMKPiBAQCAt MCwwICsxLDEwMzYgQEAKPiArLyoKPiArICogUXVhbGNvbW0gUE04eHh4IFBNSUMgWE9BREMgZHJp dmVyCj4gKyAqCj4gKyAqIFRoZXNlIEFEQ3MgYXJlIGtub3duIGFzIEhLL1hPIChob3VzZSBrZWVw aW5nIC8gY2hyeXN0YWwgb3NjaWxsYXRvcikKPiArICogIlhPIiBpbiAiWE9BREMiIG1lYW5zIENo cnlzdGFsIE9zY2lsbGF0b3IuIEl0J3MgYSBidW5jaCBvZgo+ICsgKiBzcGVjaWZpYy1wdXJwb3Nl IGFuZCBnZW5lcmFsIHB1cnBvc2UgQURDIGNvbnZlcnRlcnMgYW5kIGNoYW5uZWxzLgo+ICsgKgo+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTGluYXJvIEx0ZC4KPiArICogQXV0aG9yOiBMaW51cyBX YWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2lpby9paW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lpby9zeXNmcy5oPgo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVk ZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1 bGF0b3IvY29uc3VtZXIuaD4KPiArCj4gKyNpbmNsdWRlICJxY29tLXZhZGMtY29tbW9uLmgiCj4g Kwo+ICsvKgo+ICsgKiBEZWZpbml0aW9ucyBmb3IgdGhlICJ1c2VyIHByb2Nlc3NvciIgcmVnaXN0 ZXJzIGxpZnRlZCBmcm9tIHRoZSB2My40Cj4gKyAqIFF1YWxjb21tIHRyZWUuIFRoZWlyIGtlcm5l bCBoYXMgdHdvIG91dC1vZi10cmVlIGRyaXZlcnMgZm9yIHRoZSBBREM6Cj4gKyAqIGRyaXZlcnMv bWlzYy9wbWljODA1OC14b2FkYy5jCj4gKyAqIGRyaXZlcnMvaHdtb24vcG04eHh4LWFkYy5jCj4g KyAqIE5vbmUgb2YgdGhlbSBjb250YWluIGFueSBjb21wbGV0ZSByZWdpc3RlciBzcGVjaWZpY2F0 aW9uLCBzbyB0aGlzIGlzCj4gKyAqIGEgYmVzdCBlZmZvcnQgb2YgY29tYmluaW5nIHRoZSBpbmZv cm1hdGlvbi4KPiArICovCj4gKwo+ICsvKiBUaGVzZSBhcHBlYXIgdG8gYmUgImJhdHRlcnkgbW9u aXRvciIgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgQURDX0FSQl9CVE1fQ05UUkwxCQkJMHgxN2UK PiArI2RlZmluZSBBRENfQVJCX0JUTV9DTlRSTDFfRU5fQlRNCQlCSVQoMCkKPiArI2RlZmluZSBB RENfQVJCX0JUTV9DTlRSTDFfU0VMX09QX01PREUJCUJJVCgxKQo+ICsjZGVmaW5lIEFEQ19BUkJf QlRNX0NOVFJMMV9NRUFTX0lOVEVSVkFMMQlCSVQoMikKPiArI2RlZmluZSBBRENfQVJCX0JUTV9D TlRSTDFfTUVBU19JTlRFUlZBTDIJQklUKDMpCj4gKyNkZWZpbmUgQURDX0FSQl9CVE1fQ05UUkwx X01FQVNfSU5URVJWQUwzCUJJVCg0KQo+ICsjZGVmaW5lIEFEQ19BUkJfQlRNX0NOVFJMMV9NRUFT X0lOVEVSVkFMNAlCSVQoNSkKPiArI2RlZmluZSBBRENfQVJCX0JUTV9DTlRSTDFfRU9DCQkJQklU KDYpCj4gKyNkZWZpbmUgQURDX0FSQl9CVE1fQ05UUkwxX1JFUQkJCUJJVCg3KQo+ICsKPiArI2Rl ZmluZSBBRENfQVJCX0JUTV9BTVVYX0NOVFJMCQkJMHgxN2YKPiArI2RlZmluZSBBRENfQVJCX0JU TV9BTkFfUEFSQU0JCQkweDE4MAo+ICsjZGVmaW5lIEFEQ19BUkJfQlRNX0RJR19QQVJBTQkJCTB4 MTgxCj4gKyNkZWZpbmUgQURDX0FSQl9CVE1fUlNWCQkJCTB4MTgyCj4gKyNkZWZpbmUgQURDX0FS Ql9CVE1fREFUQTEJCQkweDE4Mwo+ICsjZGVmaW5lIEFEQ19BUkJfQlRNX0RBVEEwCQkJMHgxODQK PiArI2RlZmluZSBBRENfQVJCX0JUTV9CQVRfQ09PTF9USFIxCQkweDE4NQo+ICsjZGVmaW5lIEFE Q19BUkJfQlRNX0JBVF9DT09MX1RIUjAJCTB4MTg2Cj4gKyNkZWZpbmUgQURDX0FSQl9CVE1fQkFU X1dBUk1fVEhSMQkJMHgxODcKPiArI2RlZmluZSBBRENfQVJCX0JUTV9CQVRfV0FSTV9USFIwCQkw eDE4OAo+ICsjZGVmaW5lIEFEQ19BUkJfQlRNX0NOVFJMMgkJCTB4MThjCj4gKwo+ICsvKiBQcm9w ZXIgQURDIHJlZ2lzdGVycyAqLwo+ICsKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQ05UUkwJCQkw eDE5Nwo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9DTlRSTF9FTl9BUkIJCUJJVCgwKQo+ICsjZGVm aW5lIEFEQ19BUkJfVVNSUF9DTlRSTF9SU1YxCQkJQklUKDEpCj4gKyNkZWZpbmUgQURDX0FSQl9V U1JQX0NOVFJMX1JTVjIJCQlCSVQoMikKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQ05UUkxfUlNW MwkJCUJJVCgzKQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9DTlRSTF9SU1Y0CQkJQklUKDQpCj4g KyNkZWZpbmUgQURDX0FSQl9VU1JQX0NOVFJMX1JTVjUJCQlCSVQoNSkKPiArI2RlZmluZSBBRENf QVJCX1VTUlBfQ05UUkxfRU9DCQkJQklUKDYpCj4gKyNkZWZpbmUgQURDX0FSQl9VU1JQX0NOVFJM X1JFUQkJCUJJVCg3KQo+ICsKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTAkJCTB4 MTk4Cj4gKy8qCj4gKyAqIFRoZSBjaGFubmVsIG1hc2sgaW5jbHVkZXMgdGhlIGJpdHMgc2VsZWN0 aW5nIGNoYW5uZWwgbXV4IGFuZCBwcmVzY2FsZXIKPiArICogb24gUE04MDU4LCBvciBjaGFubmVs IG11eCBhbmQgcHJlbXV4IG9uIFBNODkyMS4KPiArICovCj4gKyNkZWZpbmUgQURDX0FSQl9VU1JQ X0FNVVhfQ05UUkxfQ0hBTl9NQVNLCTB4ZmMKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU1VWF9D TlRSTF9SU1YwCQlCSVQoMCkKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTF9SU1Yx CQlCSVQoMSkKPiArLyogT24gUE04MDU4IHRoaXMgaXMgcHJlc2NhbGluZywgb24gUE04OTIxIHRo aXMgaXMgcHJlbXV4ICovCj4gKyNkZWZpbmUgQURDX0FSQl9VU1JQX0FNVVhfQ05UUkxfUFJFU0NB TEVNVVgwCUJJVCgyKQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9BTVVYX0NOVFJMX1BSRVNDQUxF TVVYMQlCSVQoMykKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTF9TRUwwCQlCSVQo NCkKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTF9TRUwxCQlCSVQoNSkKPiArI2Rl ZmluZSBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTF9TRUwyCQlCSVQoNikKPiArI2RlZmluZSBBRENf QVJCX1VTUlBfQU1VWF9DTlRSTF9TRUwzCQlCSVQoNykKPiArI2RlZmluZSBBRENfQU1VWF9QUkVN VVhfU0hJRlQJCQkyCj4gKyNkZWZpbmUgQURDX0FNVVhfU0VMX1NISUZUCQkJNAo+ICsKPiArLyog V2Uga25vdyB2ZXJ5IGxpdHRsZSBhYm91dCB0aGUgYml0cyBpbiB0aGlzIHJlZ2lzdGVyICovCj4g KyNkZWZpbmUgQURDX0FSQl9VU1JQX0FOQV9QQVJBTQkJCTB4MTk5Cj4gKyNkZWZpbmUgQURDX0FS Ql9VU1JQX0FOQV9QQVJBTV9ESVMJCTB4RkUKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfQU5BX1BB UkFNX0VOCQkweEZGCj4gKwo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU0JCQkweDE5 QQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU1fU0VMX1NISUZUMAlCSVQoMCkKPiAr I2RlZmluZSBBRENfQVJCX1VTUlBfRElHX1BBUkFNX1NFTF9TSElGVDEJQklUKDEpCj4gKyNkZWZp bmUgQURDX0FSQl9VU1JQX0RJR19QQVJBTV9DTEtfUkFURTAJQklUKDIpCj4gKyNkZWZpbmUgQURD X0FSQl9VU1JQX0RJR19QQVJBTV9DTEtfUkFURTEJQklUKDMpCj4gKyNkZWZpbmUgQURDX0FSQl9V U1JQX0RJR19QQVJBTV9FT0MJCUJJVCg0KQo+ICsvKgo+ICsgKiBPbiBhIGxhdGVyIEFEQyB0aGUg ZGVjaW1hdGlvbiBmYWN0b3JzIGFyZSBkZWZpbmVkIGFzCj4gKyAqIDAwID0gNTEyLCAwMSA9IDEw MjQsIDEwID0gMjA0OCwgMTEgPSA0MDk2IHNvIGFzc3VtZSB0aGlzCj4gKyAqIGhvbGRzIGFsc28g Zm9yIHRoaXMgb2xkZXIgWE9BREMuCj4gKyAqLwo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9ESUdf UEFSQU1fREVDX1JBVEUwCUJJVCg1KQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU1f REVDX1JBVEUxCUJJVCg2KQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU1fRU4JCUJJ VCg3KQo+ICsjZGVmaW5lIEFEQ19ESUdfUEFSQU1fREVDX1NISUZUCQkJNQo+ICsKPiArI2RlZmlu ZSBBRENfQVJCX1VTUlBfUlNWCQkJMHgxOUIKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfUlNWX1JT VAkJCUJJVCgwKQo+ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9SU1ZfRFRFU1QwCQkJQklUKDEpCj4g KyNkZWZpbmUgQURDX0FSQl9VU1JQX1JTVl9EVEVTVDEJCQlCSVQoMikKPiArI2RlZmluZSBBRENf QVJCX1VTUlBfUlNWX09QCQkJQklUKDMpCj4gKyNkZWZpbmUgQURDX0FSQl9VU1JQX1JTVl9JUF9T RUwwCQlCSVQoNCkKPiArI2RlZmluZSBBRENfQVJCX1VTUlBfUlNWX0lQX1NFTDEJCUJJVCg1KQo+ ICsjZGVmaW5lIEFEQ19BUkJfVVNSUF9SU1ZfSVBfU0VMMgkJQklUKDYpCj4gKyNkZWZpbmUgQURD X0FSQl9VU1JQX1JTVl9UUk0JCQlCSVQoNykKPiArI2RlZmluZSBBRENfUlNWX0lQX1NFTF9TSElG VAkJCTQKPiArCj4gKyNkZWZpbmUgQURDX0FSQl9VU1JQX0RBVEEwCQkJMHgxOUQKPiArI2RlZmlu ZSBBRENfQVJCX1VTUlBfREFUQTEJCQkweDE5Qwo+ICsKPiArLyoqCj4gKyAqIFBoeXNpY2FsIGNo YW5uZWxzIHdoaWNoIE1VU1QgZXhpc3Qgb24gYWxsIFBNIHZhcmlhbnRzIGluIG9yZGVyIHRvIHBy b3ZpZGUKPiArICogcHJvcGVyIHJlZmVyZW5jZSBwb2ludHMgZm9yIGNhbGlicmF0aW9uLgo+ICsg Kgo+ICsgKiBAUE04WFhYX0NIQU5ORUxfSU5URVJOQUw6IDYyNW1WIHJlZmVyZW5jZSBjaGFubmVs Cj4gKyAqIEBQTThYWFhfQ0hBTk5FTF8xMjVWOiAxMjUwbVYgcmVmZXJlbmNlIGNoYW5uZWwKPiAr ICogQFBNOFhYWF9DSEFOTkVMX0lOVEVSTkFMXzI6IDMyNW1WIHJlZmVyZW5jZSBjaGFubmVsCj4g KyAqIEBQTThYWFhfQ0hBTk5FTF9NVVhPRkY6IGNoYW5uZWwgdG8gcmVkdWNlIGlucHV0IGxvYWQg b24gbXV4LCBhcHBhcmVudGx5IGFsc28KPiArICogbWVhc3VyZXMgWE8gdGVtcGVyYXR1cmUKPiAr ICovCj4gKyNkZWZpbmUgUE04WFhYX0NIQU5ORUxfSU5URVJOQUwJCTB4MGMKPiArI2RlZmluZSBQ TThYWFhfQ0hBTk5FTF8xMjVWCQkweDBkCj4gKyNkZWZpbmUgUE04WFhYX0NIQU5ORUxfSU5URVJO QUxfMgkweDBlCj4gKyNkZWZpbmUgUE04WFhYX0NIQU5ORUxfTVVYT0ZGCQkweDBmCj4gKwo+ICsv Kgo+ICsgKiBQTTgwNTggQU1VWCBwcmVtdXggc2NhbGluZywgdHdvIGJpdHMuIFRoaXMgaXMgZG9u ZSBvZiB0aGUgY2hhbm5lbCBiZWZvcmUKPiArICogcmVhY2hpbmcgdGhlIEFNVVguCj4gKyAqLwo+ ICsjZGVmaW5lIFBNODA1OF9BTVVYX1BSRVNDQUxFXzAgMHgwIC8qIE5vIHNjYWxpbmcgb24gdGhl IHNpZ25hbCAqLwo+ICsjZGVmaW5lIFBNODA1OF9BTVVYX1BSRVNDQUxFXzEgMHgxIC8qIFVuaXR5 IHNjYWxpbmcgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgKi8KPiArI2RlZmluZSBQTTgwNThfQU1VWF9Q UkVTQ0FMRV8xX0RJVjMgMHgyIC8qIDEvMyBwcmVzY2FsZXIgb24gdGhlIGlucHV0ICovCj4gKwo+ ICsvKiBEZWZpbmVzIHJlZmVyZW5jZSB2b2x0YWdlIGZvciB0aGUgWE9BREMgKi8KPiArI2RlZmlu ZSBBTVVYX1JTVjAgMHgwIC8qIFhPX0lOL1hPQURDX0dORCwgc3BlY2lhbCBzZWxlY3Rpb24gdG8g cmVhZCBYTyB0ZW1wICovCj4gKyNkZWZpbmUgQU1VWF9SU1YxIDB4MSAvKiBQTUlDX0lOL1hPQURD X0dORCAqLwo+ICsjZGVmaW5lIEFNVVhfUlNWMiAweDIgLyogUE1JQ19JTi9CTVNfQ1NQICovCj4g KyNkZWZpbmUgQU1VWF9SU1YzIDB4MyAvKiBub3QgdXNlZCAqLwo+ICsjZGVmaW5lIEFNVVhfUlNW NCAweDQgLyogWE9BRENfR05EL1hPQURDX0dORCAqLwo+ICsjZGVmaW5lIEFNVVhfUlNWNSAweDUg LyogWE9BRENfVlJFRi9YT0FEQ19HTkQgKi8KPiArI2RlZmluZSBYT0FEQ19SU1ZfTUFYIDUgLyog MyBiaXRzIDAuLjcsIDMgYW5kIDYsNyBhcmUgaW52YWxpZCAqLwo+ICsKPiArLyoqCj4gKyAqIHN0 cnVjdCB4b2FkY19jaGFubmVsIC0gZW5jb2RlcyBjaGFubmVsIHByb3BlcnRpZXMgYW5kIGRlZmF1 bHRzCj4gKyAqIEBkYXRhc2hlZXRfbmFtZTogdGhlIGhhcmR3YXJlbmFtZSBvZiB0aGlzIGNoYW5u ZWwKPiArICogQHByZV9zY2FsZV9tdXg6IHByZXNjYWxlIChQTTgwNTgpIG9yIHByZW11eCAoUE04 OTIxKSBmb3Igc2VsZWN0aW5nCj4gKyAqIHRoaXMgY2hhbm5lbC4gQm90aCB0aGlzIGFuZCB0aGUg YW11eCBjaGFubmVsIGlzIG5lZWRlZCB0byB1bmlxdWVseQo+ICsgKiBpZGVudGlmeSBhIGNoYW5u ZWwuIFZhbHVlcyAwLi4zLgo+ICsgKiBAYW11eF9jaGFubmVsOiB2YWx1ZSBvZiB0aGUgQURDX0FS Ql9VU1JQX0FNVVhfQ05UUkwgcmVnaXN0ZXIgZm9yIHRoaXMKPiArICogY2hhbm5lbCwgYml0cyA0 Li43LCBzZWxlY3RzIHRoZSBhbXV4LCB2YWx1ZXMgMC4uZgo+ICsgKiBAcHJlc2NhbGU6IHRoZSBj aGFubmVscyBoYXZlIGhhcmQtY29kZWQgcHJlc2NhbGUgcmF0aW9zIGRlZmluZWQKPiArICogYnkg dGhlIGhhcmR3YXJlLCB0aGlzIHRlbGxzIHVzIHdoYXQgaXQgaXMKPiArICogQHR5cGU6IGNvcnJl c3BvbmRpbmcgSUlPIGNoYW5uZWwgdHlwZSwgdXN1YWxseSBJSU9fVk9MVEFHRSBvcgo+ICsgKiBJ SU9fVEVNUAo+ICsgKiBAc2NhbGVfZm5fdHlwZTogdGhlIGxpbmVyIGludGVycG9sYXRpb24gZXRj IHRvIGNvbnZlcnQgdGhlCj4gKyAqIEFEQyBjb2RlIHRvIHRoZSB2YWx1ZSB0aGF0IElJTyBleHBl Y3RzLCBpbiB1ViBvciBtaWxsaWNlbHNpdXMKPiArICogZXRjLiBUaGlzIHNjYWxlIGZ1bmN0aW9u IGNhbiBiZSBwcmV0dHkgZWxhYm9yYXRlIGlmIGRpZmZlcmVudAo+ICsgKiB0aGVybWlzdG9ycyBh cmUgY29ubmVjdGVkIG9yIG90aGVyIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyBhcmUKPiArICog ZGVwbG95ZWQuCj4gKyAqIEBhbXV4X2lwX3JzdjogcmF0aW9tZXRyaWMgc2NhbGUgdmFsdWUgdXNl ZCBieSB0aGUgYW5hbG9nIG11eGVyOiB0aGlzCj4gKyAqIHNlbGVjdHMgdGhlIHJlZmVyZW5jZSB2 b2x0YWdlIGZvciByYXRpb21ldHJpYyBzY2FsaW5nCj4gKyAqLwo+ICtzdHJ1Y3QgeG9hZGNfY2hh bm5lbCB7Cj4gKwljb25zdCBjaGFyICpkYXRhc2hlZXRfbmFtZTsKPiArCXU4IHByZV9zY2FsZV9t dXg6MjsKPiArCXU4IGFtdXhfY2hhbm5lbDo0Owo+ICsJY29uc3Qgc3RydWN0IHZhZGNfcHJlc2Nh bGVfcmF0aW8gcHJlc2NhbGU7Cj4gKwllbnVtIGlpb19jaGFuX3R5cGUgdHlwZTsKPiArCWVudW0g dmFkY19zY2FsZV9mbl90eXBlIHNjYWxlX2ZuX3R5cGU7Cj4gKwl1OCBhbXV4X2lwX3JzdjozOwo+ ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB4b2FkY192YXJpYW50IC0gZW5jb2RlcyB0aGUg WE9BREMgdmFyaWFudCBjaGFyYWN0ZXJpc3RpY3MKPiArICogQG5hbWU6IG5hbWUgb2YgdGhpcyBQ TUlDIHZhcmlhbnQKPiArICogQGNoYW5uZWxzOiB0aGUgaGFyZHdhcmUgY2hhbm5lbHMgYW5kIHJl c3BlY3RpdmUgc2V0dGluZ3MgYW5kIGRlZmF1bHRzCj4gKyAqIEBicm9rZW5fcmF0aW9tZXRyaWM6 IGlmIHRoZSBQTUlDIGhhcyBicm9rZW4gcmF0aW9tZXRyaWMgc2NhbGluZyAodGhpcwo+ICsgKiBp cyBhIGtub3duIHByb2JsZW0gb24gUE04MDU4KQo+ICsgKiBAcHJlc2NhbGluZzogdGhpcyB2YXJp YW50IHVzZXMgQU1VWCBiaXRzIDIgJiAzIGZvciBwcmVzY2FsaW5nIChQTTgwNTgpCj4gKyAqIEBz ZWNvbmRfbGV2ZWxfbXV4OiB0aGlzIHZhcmlhbnQgdXNlcyBBTVVYIGJpdHMgMiAmIDMgZm9yIGEg c2Vjb25kIGxldmVsCj4gKyAqIG11eAo+ICsgKi8KPiArc3RydWN0IHhvYWRjX3ZhcmlhbnQgewo+ ICsJY29uc3QgY2hhciBuYW1lWzE2XTsKPiArCWNvbnN0IHN0cnVjdCB4b2FkY19jaGFubmVsICpj aGFubmVsczsKPiArCWJvb2wgYnJva2VuX3JhdGlvbWV0cmljOwo+ICsJYm9vbCBwcmVzY2FsaW5n Owo+ICsJYm9vbCBzZWNvbmRfbGV2ZWxfbXV4Owo+ICt9Owo+ICsKPiArLyoKPiArICogWE9BRENf Q0hBTiBtYWNybyBwYXJhbWV0ZXJzOgo+ICsgKiBfZG5hbWU6IHRoZSBuYW1lIG9mIHRoZSBjaGFu bmVsCj4gKyAqIF9wcmVzbXV4OiBwcmVzY2FsZXIgKFBNODA1OCkgb3IgcHJlbXV4IChQTTg5MjEp IHNldHRpbmcgZm9yIHRoaXMgY2hhbm5lbAo+ICsgKiBfYW11eDogdGhlIHZhbHVlIGluIGJpdHMg Mi4uNyBvZiB0aGUgQURDX0FSQl9VU1JQX0FNVVhfQ05UUkwgcmVnaXN0ZXIKPiArICogZm9yIHRo aXMgY2hhbm5lbC4gT24gc29tZSBQTUlDcyBzb21lIG9mIHRoZSBiaXRzIHNlbGVjdCBhIHByZXNj YWxlciwgYW5kCj4gKyAqIG9uIHNvbWUgUE1JQ3Mgc29tZSBvZiB0aGUgYml0cyBzZWxlY3QgdmFy aW91cyBjb21wbGV4IG11bHRpcGxleCBzZXR0aW5ncy4KPiArICogX3R5cGU6IElJTyBjaGFubmVs IHR5cGUKPiArICogX3ByZW51bTogcHJlc2NhbGVyIG51bWVyYXRvciAoZGl2aWRlbmQpCj4gKyAq IF9wcmVkZW46IHByZXNjYWxlciBkZW5vbWluYXRvciAoZGl2aXNvcikKPiArICogX3NjYWxlOiBz Y2FsaW5nIGZ1bmN0aW9uIHR5cGUsIHRoaXMgc2VsZWN0cyBob3cgdGhlIHJhdyB2YWx1ZWQgaXMg bWFuZ2xlZAo+ICsgKiB0byBvdXRwdXQgdGhlIGFjdHVhbCBwcm9jZXNzZWQgbWVhc3VyZW1lbnQK PiArICogX2FtaXA6IGFuYWxvZyBtdXggaW5wdXQgcGFyZW50IHdoZW4gdXNpbmcgcmF0aW9tZXRy aWMgbWVhc3VyZW1lbnRzCj4gKyAqLwo+ICsjZGVmaW5lIFhPQURDX0NIQU4oX2RuYW1lLCBfcHJl c211eCwgX2FtdXgsIF90eXBlLCBfcHJlbnVtLCBfcHJlZGVuLCBfc2NhbGUsIF9hbWlwKSBcCj4g Kwl7CQkJCQkJCQlcCj4gKwkJLmRhdGFzaGVldF9uYW1lID0gX19zdHJpbmdpZnkoX2RuYW1lKSwJ CQlcCj4gKwkJLnByZV9zY2FsZV9tdXggPSBfcHJlc211eCwJCQkJXAo+ICsJCS5hbXV4X2NoYW5u ZWwgPSBfYW11eCwJCQkJCVwKPiArCQkucHJlc2NhbGUgPSB7IC5udW0gPSBfcHJlbnVtLCAuZGVu ID0gX3ByZWRlbiB9LAkJXAo+ICsJCS50eXBlID0gX3R5cGUsCQkJCQkJXAo+ICsJCS5zY2FsZV9m bl90eXBlID0gX3NjYWxlLAkJCQlcCj4gKwkJLmFtdXhfaXBfcnN2ID0gX2FtaXAsCQkJCQlcCj4g Kwl9Cj4gKwo+ICsvKgo+ICsgKiBUYWtlbiBmcm9tIGFyY2gvYXJtL21hY2gtbXNtL2JvYXJkLTk2 MTUuYyBpbiB0aGUgdmVuZG9yIHRyZWU6Cj4gKyAqIFRPRE86IGluY29tcGxldGUsIG5lZWRzIHRl c3RpbmcuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhvYWRjX2NoYW5uZWwgcG04MDE4 X3hvYWRjX2NoYW5uZWxzW10gPSB7Cj4gKwlYT0FEQ19DSEFOKFZDT0lOLCAweDAwLCAweDAwLCBJ SU9fVk9MVEFHRSwgMSwgMywgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NI QU4oVkJBVCwgMHgwMCwgMHgwMSwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFN VVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKFZQSF9QV1IsIDB4MDAsIDB4MDIsIElJT19WT0xUQUdF LCAxLCAzLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihESUVfVEVN UCwgMHgwMCwgMHgwYiwgSUlPX1RFTVAsIDEsIDEsIFNDQUxFX1BNSUNfVEhFUk0sIEFNVVhfUlNW MSksCj4gKwkvKiBVc2VkIGZvciBiYXR0ZXJ5IElEIG9yIGJhdHRlcnkgdGVtcGVyYXR1cmUgKi8K PiArCVhPQURDX0NIQU4oQU1VWDgsIDB4MDAsIDB4MDgsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FM RV9ERUZBVUxULCBBTVVYX1JTVjIpLAo+ICsJWE9BRENfQ0hBTihJTlRFUk5BTCwgMHgwMCwgMHgw YywgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FE Q19DSEFOKDEyNVYsIDB4MDAsIDB4MGQsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxU LCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihNVVhPRkYsIDB4MDAsIDB4MGYsIElJT19URU1Q LCAxLCAxLCBTQ0FMRV9YT1RIRVJNLCBBTVVYX1JTVjApLAo+ICsJeyB9LCAvKiBTZW50aW5lbCAq Lwo+ICt9Owo+ICsKPiArLyoKPiArICogVGFrZW4gZnJvbSBhcmNoL2FybS9tYWNoLW1zbS9ib2Fy ZC04OTMwLXBtaWMuYyBpbiB0aGUgdmVuZG9yIHRyZWU6Cj4gKyAqIFRPRE86IG5lZWRzIHRlc3Rp bmcuCj4gKyAqLwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhvYWRjX2NoYW5uZWwgcG04MDM4X3hv YWRjX2NoYW5uZWxzW10gPSB7Cj4gKwlYT0FEQ19DSEFOKFZDT0lOLCAweDAwLCAweDAwLCBJSU9f Vk9MVEFHRSwgMSwgMywgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4o VkJBVCwgMHgwMCwgMHgwMSwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhf UlNWMSksCj4gKwlYT0FEQ19DSEFOKERDSU4sIDB4MDAsIDB4MDIsIElJT19WT0xUQUdFLCAxLCA2 LCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihJQ0hHLCAweDAwLCAw eDAzLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhP QURDX0NIQU4oVlBIX1BXUiwgMHgwMCwgMHgwNCwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RF RkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFNVVg1LCAweDAwLCAweDA1LCBJSU9f Vk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4o QU1VWDYsIDB4MDAsIDB4MDYsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVY X1JTVjEpLAo+ICsJWE9BRENfQ0hBTihBTVVYNywgMHgwMCwgMHgwNywgSUlPX1ZPTFRBR0UsIDEs IDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwkvKiBBTVVYOCB1c2VkIGZvciBiYXR0 ZXJ5IHRlbXBlcmF0dXJlIGluIG1vc3QgY2FzZXMgKi8KPiArCVhPQURDX0NIQU4oQU1VWDgsIDB4 MDAsIDB4MDgsIElJT19URU1QLCAxLCAxLCBTQ0FMRV9USEVSTV8xMDBLX1BVTExVUCwgQU1VWF9S U1YyKSwKPiArCVhPQURDX0NIQU4oQU1VWDksIDB4MDAsIDB4MDksIElJT19WT0xUQUdFLCAxLCAx LCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihVU0JfVkJVUywgMHgw MCwgMHgwYSwgSUlPX1ZPTFRBR0UsIDEsIDQsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4g KwlYT0FEQ19DSEFOKERJRV9URU1QLCAweDAwLCAweDBiLCBJSU9fVEVNUCwgMSwgMSwgU0NBTEVf UE1JQ19USEVSTSwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oSU5URVJOQUwsIDB4MDAsIDB4 MGMsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9B RENfQ0hBTigxMjVWLCAweDAwLCAweDBkLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVM VCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oSU5URVJOQUxfMiwgMHgwMCwgMHgwZSwgSUlP X1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFO KE1VWE9GRiwgMHgwMCwgMHgwZiwgSUlPX1RFTVAsIDEsIDEsIFNDQUxFX1hPVEhFUk0sIEFNVVhf UlNWMCksCj4gKwl7IH0sIC8qIFNlbnRpbmVsICovCj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUaGlz IHdhcyBjcmVhdGVkIGJ5IGNyb3NzLXJlZmVyZW5jaW5nIHRoZSB2ZW5kb3IgdHJlZQo+ICsgKiBh cmNoL2FybS9tYWNoLW1zbS9ib2FyZC1tc204eDYwLmMgbXNtX2FkY19jaGFubmVsc19kYXRhW10K PiArICogd2l0aCB0aGUgImNoYW5uZWwgdHlwZXMiIChmaXJzdCBmaWVsZCkgdG8gZmluZCB0aGUg cmlnaHQKPiArICogY29uZmlndXJhdGlvbiBmb3IgdGhlc2UgY2hhbm5lbHMgb24gYW4gTVNNOHg2 MCBpLmUuIFBNODA1OAo+ICsgKiBzZXR1cC4KPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg eG9hZGNfY2hhbm5lbCBwbTgwNThfeG9hZGNfY2hhbm5lbHNbXSA9IHsKPiArCVhPQURDX0NIQU4o VkNPSU4sIDB4MDAsIDB4MDAsIElJT19WT0xUQUdFLCAxLCAyLCBTQ0FMRV9ERUZBVUxULCBBTVVY X1JTVjEpLAo+ICsJWE9BRENfQ0hBTihWQkFULCAweDAwLCAweDAxLCBJSU9fVk9MVEFHRSwgMSwg MywgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oRENJTiwgMHgwMCwg MHgwMiwgSUlPX1ZPTFRBR0UsIDEsIDEwLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJ WE9BRENfQ0hBTihJQ0hHLCAweDAwLCAweDAzLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVG QVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oVlBIX1BXUiwgMHgwMCwgMHgwNCwgSUlP X1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwkvKgo+ICsJICog QU1VWCBjaGFubmVscyA1IHRocnUgOSBhcmUgcmVmZXJyZWQgdG8gYXMgTVBQNSB0aHJ1IE1QUDkg aW4KPiArCSAqIHNvbWUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gQnV0IHRoZXkgYXJlIHJlYWxs eSBqdXN0IDUKPiArCSAqIGNoYW5uZWxzIGp1c3QgbGlrZSBhbnkgb3RoZXIuIFRoZXkgYXJlIGNv bm5lY3RlZCB0byBhIHN3aXRjaGluZwo+ICsJICogbWF0cml4IHdoZXJlIHRoZXkgY2FuIGJlIHJv dXRlZCB0byBhbnkgb2YgdGhlIE1QUHMsIG5vdCBqdXN0Cj4gKwkgKiAxLXRvLTEgb250byBNUFA1 IHRocnUgOSwgc28gbmFtaW5nIHRoZW0gTVBQNSB0aHJ1IE1QUDkgaXMKPiArCSAqIHZlcnkgY29u ZnVzaW5nLgo+ICsJICovCj4gKwlYT0FEQ19DSEFOKEFNVVg1LCAweDAwLCAweDA1LCBJSU9fVk9M VEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQU1V WDYsIDB4MDAsIDB4MDYsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JT VjEpLAo+ICsJWE9BRENfQ0hBTihBTVVYNywgMHgwMCwgMHgwNywgSUlPX1ZPTFRBR0UsIDEsIDIs IFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFNVVg4LCAweDAwLCAw eDA4LCBJSU9fVk9MVEFHRSwgMSwgMiwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhP QURDX0NIQU4oQU1VWDksIDB4MDAsIDB4MDksIElJT19WT0xUQUdFLCAxLCAzLCBTQ0FMRV9ERUZB VUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihVU0JfVkJVUywgMHgwMCwgMHgwYSwgSUlP X1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFO KERJRV9URU1QLCAweDAwLCAweDBiLCBJSU9fVEVNUCwgMSwgMSwgU0NBTEVfUE1JQ19USEVSTSwg QU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oSU5URVJOQUwsIDB4MDAsIDB4MGMsIElJT19WT0xU QUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTigxMjVW LCAweDAwLCAweDBkLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1Yx KSwKPiArCVhPQURDX0NIQU4oSU5URVJOQUxfMiwgMHgwMCwgMHgwZSwgSUlPX1ZPTFRBR0UsIDEs IDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKE1VWE9GRiwgMHgw MCwgMHgwZiwgSUlPX1RFTVAsIDEsIDEsIFNDQUxFX1hPVEhFUk0sIEFNVVhfUlNWMCksCj4gKwkv KiBUaGVyZSBhcmUgYWxzbyAidW5pdHkiIGFuZCBkaXZpZGVkIGJ5IDMgY2hhbm5lbHMgKHByZXNj YWxlcikgYnV0IG5vb25lIGlzIHVzaW5nIHRoZW0gKi8KPiArCXsgfSwgLyogU2VudGluZWwgKi8K PiArfTsKPiArCj4gKy8qCj4gKyAqIFRoZSBQTTg5MjEgaGFzIHNvbWUgcHJlLW11eGluZyBvbiBp dHMgY2hhbm5lbHMsIHRoaXMgY29tZXMgZnJvbSB0aGUgdmVuZG9yIHRyZWUKPiArICogaW5jbHVk ZS9saW51eC9tZmQvcG04eHh4L3BtOHh4eC1hZGMuaAo+ICsgKiBib2FyZC1mbG8tcG1pYy5jIChO ZXh1cyA3KSBhbmQgYm9hcmQtODA2NC1wbWljLmMKPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgeG9hZGNfY2hhbm5lbCBwbTg5MjFfeG9hZGNfY2hhbm5lbHNbXSA9IHsKPiArCVhPQURDX0NI QU4oVkNPSU4sIDB4MDAsIDB4MDAsIElJT19WT0xUQUdFLCAxLCAzLCBTQ0FMRV9ERUZBVUxULCBB TVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihWQkFULCAweDAwLCAweDAxLCBJSU9fVk9MVEFHRSwg MSwgMywgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oRENJTiwgMHgw MCwgMHgwMiwgSUlPX1ZPTFRBR0UsIDEsIDYsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4g KwkvKiBjaGFubmVsICJJQ0hHIiBpcyByZXNlcnZlZCBhbmQgbm90IHVzZWQgb24gUE04OTIxICov Cj4gKwlYT0FEQ19DSEFOKFZQSF9QV1IsIDB4MDAsIDB4MDQsIElJT19WT0xUQUdFLCAxLCAzLCBT Q0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihJQkFULCAweDAwLCAweDA1 LCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCS8qIENI QU4gNiAmIDcgKE1QUDEgJiBNUFAyKSBhcmUgcmVzZXJ2ZWQgZm9yIE1QUCBjaGFubmVscyBvbiBQ TTg5MjEgKi8KPiArCVhPQURDX0NIQU4oQkFUVF9USEVSTSwgMHgwMCwgMHgwOCwgSUlPX1RFTVAs IDEsIDEsIFNDQUxFX1RIRVJNXzEwMEtfUFVMTFVQLCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hB TihCQVRUX0lELCAweDAwLCAweDA5LCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwg QU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oVVNCX1ZCVVMsIDB4MDAsIDB4MGEsIElJT19WT0xU QUdFLCAxLCA0LCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihESUVf VEVNUCwgMHgwMCwgMHgwYiwgSUlPX1RFTVAsIDEsIDEsIFNDQUxFX1BNSUNfVEhFUk0sIEFNVVhf UlNWMSksCj4gKwlYT0FEQ19DSEFOKElOVEVSTkFMLCAweDAwLCAweDBjLCBJSU9fVk9MVEFHRSwg MSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oMTI1ViwgMHgw MCwgMHgwZCwgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4g KwkvKiBGSVhNRTogbG9vayBpbnRvIHRoZSBzY2FsaW5nIG9mIHRoaXMgdGVtcGVyYXR1cmUgKi8K PiArCVhPQURDX0NIQU4oQ0hHX1RFTVAsIDB4MDAsIDB4MGUsIElJT19URU1QLCAxLCAxLCBTQ0FM RV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihNVVhPRkYsIDB4MDAsIDB4MGYs IElJT19URU1QLCAxLCAxLCBTQ0FMRV9YT1RIRVJNLCBBTVVYX1JTVjApLAo+ICsJLyogVGhlIGZv bGxvd2luZyBjaGFubmVscyBoYXZlIHByZW11eCBiaXQgMCBzZXQgdG8gMSAoYWxsIGVuZCBpbiA0 KSAqLwo+ICsJWE9BRENfQ0hBTihBVEVTVF84LCAweDAxLCAweDAwLCBJSU9fVk9MVEFHRSwgMSwg MSwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCS8qIFNldCBzY2FsaW5nIHRvIDEvMiBi YXNlZCBvbiB0aGUgbmFtZSBmb3IgdGhlc2UgdHdvICovCj4gKwlYT0FEQ19DSEFOKFVTQl9TTlNf RElWMjAsIDB4MDEsIDB4MDEsIElJT19WT0xUQUdFLCAxLCAyLCBTQ0FMRV9ERUZBVUxULCBBTVVY X1JTVjEpLAo+ICsJWE9BRENfQ0hBTihEQ0lOX1NOU19ESVYyMCwgMHgwMSwgMHgwMiwgSUlPX1ZP TFRBR0UsIDEsIDIsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFN VVgzLCAweDAxLCAweDAzLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1VWF9S U1YxKSwKPiArCVhPQURDX0NIQU4oQU1VWDQsIDB4MDEsIDB4MDQsIElJT19WT0xUQUdFLCAxLCAx LCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihBTVVYNSwgMHgwMSwg MHgwNSwgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlY T0FEQ19DSEFOKEFNVVg2LCAweDAxLCAweDA2LCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVG QVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQU1VWDcsIDB4MDEsIDB4MDcsIElJT19W T0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihB TVVYOCwgMHgwMSwgMHgwOCwgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhf UlNWMSksCj4gKwkvKiBJbnRlcm5hbCB0ZXN0IHNpZ25hbHMsIEkgdGhpbmsgKi8KPiArCVhPQURD X0NIQU4oQVRFU1RfMSwgMHgwMSwgMHgwOSwgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFV TFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNUXzIsIDB4MDEsIDB4MGEsIElJT19W T0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihB VEVTVF8zLCAweDAxLCAweDBiLCBJSU9fVk9MVEFHRSwgMSwgMSwgU0NBTEVfREVGQVVMVCwgQU1V WF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQVRFU1RfNCwgMHgwMSwgMHgwYywgSUlPX1ZPTFRBR0Us IDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNUXzUs IDB4MDEsIDB4MGQsIElJT19WT0xUQUdFLCAxLCAxLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEp LAo+ICsJWE9BRENfQ0hBTihBVEVTVF82LCAweDAxLCAweDBlLCBJSU9fVk9MVEFHRSwgMSwgMSwg U0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQVRFU1RfNywgMHgwMSwg MHgwZiwgSUlPX1ZPTFRBR0UsIDEsIDEsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwkv KiBUaGUgZm9sbG93aW5nIGNoYW5uZWxzIGhhdmUgcHJlbXV4IGJpdCAxIHNldCB0byAxIChhbGwg ZW5kIGluIDgpICovCj4gKwkvKiBJIGd1ZXNzIGV2ZW4gQVRFU1Q4IHdpbGwgYmUgZGl2aWRlZCBi eSAzIGhlcmUgKi8KPiArCVhPQURDX0NIQU4oQVRFU1RfOCwgMHgwMiwgMHgwMCwgSUlPX1ZPTFRB R0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwkvKiBJIGd1ZXNzIGRpdiAy IGRpdiAzIGJlY29tZXMgZGl2IDYgKi8KPiArCVhPQURDX0NIQU4oVVNCX1NOU19ESVYyMF9ESVYz LCAweDAyLCAweDAxLCBJSU9fVk9MVEFHRSwgMSwgNiwgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1Yx KSwKPiArCVhPQURDX0NIQU4oRENJTl9TTlNfRElWMjBfRElWMywgMHgwMiwgMHgwMiwgSUlPX1ZP TFRBR0UsIDEsIDYsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFN VVgzX0RJVjMsIDB4MDIsIDB4MDMsIElJT19WT0xUQUdFLCAxLCAzLCBTQ0FMRV9ERUZBVUxULCBB TVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihBTVVYNF9ESVYzLCAweDAyLCAweDA0LCBJSU9fVk9M VEFHRSwgMSwgMywgU0NBTEVfREVGQVVMVCwgQU1VWF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQU1V WDVfRElWMywgMHgwMiwgMHgwNSwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFN VVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFNVVg2X0RJVjMsIDB4MDIsIDB4MDYsIElJT19WT0xU QUdFLCAxLCAzLCBTQ0FMRV9ERUZBVUxULCBBTVVYX1JTVjEpLAo+ICsJWE9BRENfQ0hBTihBTVVY N19ESVYzLCAweDAyLCAweDA3LCBJSU9fVk9MVEFHRSwgMSwgMywgU0NBTEVfREVGQVVMVCwgQU1V WF9SU1YxKSwKPiArCVhPQURDX0NIQU4oQU1VWDhfRElWMywgMHgwMiwgMHgwOCwgSUlPX1ZPTFRB R0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNU XzFfRElWMywgMHgwMiwgMHgwOSwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFN VVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNUXzJfRElWMywgMHgwMiwgMHgwYSwgSUlPX1ZP TFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFU RVNUXzNfRElWMywgMHgwMiwgMHgwYiwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQs IEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNUXzRfRElWMywgMHgwMiwgMHgwYywgSUlP X1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFO KEFURVNUXzVfRElWMywgMHgwMiwgMHgwZCwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFV TFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19DSEFOKEFURVNUXzZfRElWMywgMHgwMiwgMHgwZSwg SUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RFRkFVTFQsIEFNVVhfUlNWMSksCj4gKwlYT0FEQ19D SEFOKEFURVNUXzdfRElWMywgMHgwMiwgMHgwZiwgSUlPX1ZPTFRBR0UsIDEsIDMsIFNDQUxFX0RF RkFVTFQsIEFNVVhfUlNWMSksCj4gKwl7IH0sIC8qIFNlbnRpbmVsICovCj4gK307Cj4gKwo+ICsv KioKPiArICogc3RydWN0IHBtOHh4eF9jaGFuX2luZm8gLSBBREMgY2hhbm5lbCBpbmZvcm1hdGlv bgo+ICsgKiBAbmFtZTogbmFtZSBvZiB0aGlzIGNoYW5uZWwKPiArICogQGh3Y2hhbjogcG9pbnRl ciB0byBoYXJkd2FyZSBjaGFubmVsIGluZm9ybWF0aW9uIChtdXhpbmcgJiBzY2FsaW5nIHNldHRp bmdzKQo+ICsgKiBAY2FsaWJyYXRpb246IHdoZXRoZXIgdG8gdXNlIGFic29sdXRlIG9yIHJhdGlv bWV0cmljIGNhbGlicmF0aW9uCj4gKyAqIEBzY2FsZV9mbl90eXBlOiBzY2FsaW5nIGZ1bmN0aW9u IHR5cGUKPiArICogQGRlY2ltYXRpb246IDAsMSwyLDMKPiArICogQGFtdXhfaXBfcnN2OiByYXRp b21ldHJpYyBzY2FsZSB2YWx1ZSBpZiB1c2luZyByYXRpb21ldHJpYwo+ICsgKiBjYWxpYnJhdGlv bjogMCwgMSwgMiwgNCwgNS4KQ29uc2lzdGVudCBmb3JtYXR0aW5nIGlkZWFsbHkgb24gdGhvc2Ug bGlzdHMgb2Ygb3B0aW9ucy4KPiArICovCj4gK3N0cnVjdCBwbTh4eHhfY2hhbl9pbmZvIHsKPiAr CWNvbnN0IGNoYXIgKm5hbWU7Cj4gKwljb25zdCBzdHJ1Y3QgeG9hZGNfY2hhbm5lbCAqaHdjaGFu Owo+ICsJZW51bSB2YWRjX2NhbGlicmF0aW9uIGNhbGlicmF0aW9uOwo+ICsJdTggZGVjaW1hdGlv bjoyOwo+ICsJdTggYW11eF9pcF9yc3Y6MzsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3Qg cG04eHh4X3hvYWRjIC0gc3RhdGUgY29udGFpbmVyIGZvciB0aGUgWE9BREMKPiArICogQGRldjog cG9pbnRlciB0byBkZXZpY2UKPiArICogQG1hcDogcmVnbWFwIHRvIGFjY2VzcyByZWdpc3RlcnMK PiArICogQHZyZWY6IHJlZmVyZW5jZSB2b2x0YWdlIHJlZ3VsYXRvcgo+ICsgKiBjaGFyYWN0ZXJp c3RpY3Mgb2YgdGhlIGNoYW5uZWxzLCBhbmQgc2Vuc2libGUgZGVmYXVsdCBzZXR0aW5ncwo+ICsg KiBAbmNoYW5zOiBudW1iZXIgb2YgY2hhbm5lbHMsIGNvbmZpZ3VyZWQgYnkgdGhlIGRldmljZSB0 cmVlCj4gKyAqIEBjaGFuczogdGhlIGNoYW5uZWwgaW5mb3JtYXRpb24gcGVyLWNoYW5uZWwsIGNv bmZpZ3VyZWQgYnkgdGhlIGRldmljZSB0cmVlCj4gKyAqIEBpaW9fY2hhbnM6IElJTyBjaGFubmVs IHNwZWNpZmllcnMKPiArICogQGdyYXBoOiBsaW5lYXIgY2FsaWJyYXRpb24gcGFyYW1ldGVycyBm b3IgYWJzb2x1dGUgYW5kCj4gKyAqIHJhdGlvbWV0cmljIG1lYXN1cmVtZW50cwo+ICsgKiBAY29t cGxldGU6IGNvbXBsZXRpb24gdG8gaW5kaWNhdGUgZW5kIG9mIGNvbnZlcnNpb24KPiArICogQGxv Y2s6IGxvY2sgdG8gcmVzdHJpY3QgYWNjZXNzIHRvIHRoZSBoYXJkd2FyZSB0byBvbmUgY2xpZW50 IGF0IHRoZSB0aW1lCj4gKyAqLwo+ICtzdHJ1Y3QgcG04eHh4X3hvYWRjIHsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldjsKPiArCXN0cnVjdCByZWdtYXAgKm1hcDsKPiArCWNvbnN0IHN0cnVjdCB4b2Fk Y192YXJpYW50ICp2YXJpYW50Owo+ICsJc3RydWN0IHJlZ3VsYXRvciAqdnJlZjsKPiArCXVuc2ln bmVkIGludCBuY2hhbnM7Cj4gKwlzdHJ1Y3QgcG04eHh4X2NoYW5faW5mbyAqY2hhbnM7Cj4gKwlz dHJ1Y3QgaWlvX2NoYW5fc3BlYyAqaWlvX2NoYW5zOwo+ICsJc3RydWN0IHZhZGNfbGluZWFyX2dy YXBoIGdyYXBoWzJdOwo+ICsJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7Cj4gKwlzdHJ1Y3Qg bXV0ZXggbG9jazsKPiArfTsKPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBwbTh4eHhfZW9jX2ly cShpbnQgaXJxLCB2b2lkICpkKQo+ICt7Cj4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2ID0g ZDsKPiArCXN0cnVjdCBwbTh4eHhfeG9hZGMgKmFkYyA9IGlpb19wcml2KGluZGlvX2Rldik7Cj4g Kwo+ICsJY29tcGxldGUoJmFkYy0+Y29tcGxldGUpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExF RDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwbTh4eHhfY2hhbl9pbmZvICoKPiArcG04eHh4 X2dldF9jaGFubmVsKHN0cnVjdCBwbTh4eHhfeG9hZGMgKmFkYywgdTggY2hhbikKPiArewo+ICsJ c3RydWN0IHBtOHh4eF9jaGFuX2luZm8gKmNoOwo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0g MDsgaSA8IGFkYy0+bmNoYW5zOyBpKyspIHsKPiArCQljaCA9ICZhZGMtPmNoYW5zW2ldOwo+ICsJ CWlmIChjaC0+aHdjaGFuLT5hbXV4X2NoYW5uZWwgPT0gY2hhbikKPiArCQkJYnJlYWs7Cj4gKwl9 Cj4gKwlpZiAoaSA9PSBhZGMtPm5jaGFucykKPiArCQlyZXR1cm4gTlVMTDsKPiArCj4gKwlyZXR1 cm4gY2g7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcG04eHh4X3JlYWRfY2hhbm5lbF9yc3Yoc3Ry dWN0IHBtOHh4eF94b2FkYyAqYWRjLAo+ICsJCQkJICAgY29uc3Qgc3RydWN0IHBtOHh4eF9jaGFu X2luZm8gKmNoLAo+ICsJCQkJICAgdTggcnN2LCB1MTYgKmFkY19jb2RlLAo+ICsJCQkJICAgYm9v bCBmb3JjZV9yYXRpb21ldHJpYykKPiArewo+ICsJaW50IHJldDsKPiArCXVuc2lnbmVkIGludCB2 YWw7Cj4gKwl1OCByc3ZtYXNrLCByc3Z2YWw7Cj4gKwl1OCBsc2IsIG1zYjsKPiArCj4gKwlkZXZf ZGJnKGFkYy0+ZGV2LCAicmVhZCBjaGFubmVsIFwiJXNcIiwgYW11eCAlZCwgcHJlc2NhbGUvbXV4 OiAlZCwgcnN2ICVkXG4iLAo+ICsJCWNoLT5uYW1lLCBjaC0+aHdjaGFuLT5hbXV4X2NoYW5uZWws IGNoLT5od2NoYW4tPnByZV9zY2FsZV9tdXgsIHJzdik7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYWRj LT5sb2NrKTsKPiArCj4gKwkvKiBNdXggaW4gdGhpcyBjaGFubmVsICovCj4gKwl2YWwgPSBjaC0+ aHdjaGFuLT5hbXV4X2NoYW5uZWwgPDwgQURDX0FNVVhfU0VMX1NISUZUOwo+ICsJdmFsIHw9IGNo LT5od2NoYW4tPnByZV9zY2FsZV9tdXggPDwgQURDX0FNVVhfUFJFTVVYX1NISUZUOwo+ICsJcmV0 ID0gcmVnbWFwX3dyaXRlKGFkYy0+bWFwLCBBRENfQVJCX1VTUlBfQU1VWF9DTlRSTCwgdmFsKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJLyogU2V0IHVwIHJhdGlvbWV0 cmljIHNjYWxlIHZhbHVlLCBtYXNrIG9mZiBhbGwgYml0cyBleGNlcHQgdGhlc2UgKi8KPiArCXJz dm1hc2sgPSAoQURDX0FSQl9VU1JQX1JTVl9SU1QgfCBBRENfQVJCX1VTUlBfUlNWX0RURVNUMCB8 Cj4gKwkJICAgQURDX0FSQl9VU1JQX1JTVl9EVEVTVDEgfCBBRENfQVJCX1VTUlBfUlNWX09QKTsK PiArCWlmIChhZGMtPnZhcmlhbnQtPmJyb2tlbl9yYXRpb21ldHJpYyAmJiAhZm9yY2VfcmF0aW9t ZXRyaWMpIHsKPiArCQkvKgo+ICsJCSAqIEFwcGFyZW50bHkgdGhlIFBNODA1OCBoYXMgc29tZSBr aW5kIG9mIGJ1ZyB3aGljaCBpcwo+ICsJCSAqIHJlZmxlY3RlZCBpbiB0aGUgdmVuZG9yIHRyZWUg ZHJpdmVycy9taXNjL3BtaXg4MDU4LXhvYWRjLmMKPiArCQkgKiB3aGljaCBqdXN0IGhhcmRjb2Rl cyB0aGUgUlNWIHNlbGVjdG9yIHRvIFNFTDEgKDB4MjApIGZvcgo+ICsJCSAqIG1vc3QgY2FzZXMg YW5kIFNFTDAgKDB4MTApIGZvciB0aGUgTVVYT0ZGIGNoYW5uZWwgb25seS4KPiArCQkgKiBJZiB3 ZSBmb3JjZSByYXRpb21ldHJpYyAoY3VycmVudGx5IG9ubHkgZG9uZSB3aGVuIGF0dGVtcHRpbmcK PiArCQkgKiB0byBkbyByYXRpb21ldHJpYyBjYWxpYnJhdGlvbikgdGhpcyBkb2Vzbid0IHNlZW0g dG8gd29yawo+ICsJCSAqIHZlcnkgd2VsbCBhbmQgSSBzdXNwZWN0IHJhdGlvbWV0cmljIGNvbnZl cnNpb24gaXMgc2ltcGx5Cj4gKwkJICogYnJva2VuIG9yIG5vdCBzdXBwb3J0ZWQgb24gdGhlIFBN ODA1OC4KPiArCQkgKgo+ICsJCSAqIE1heWJlIElPX1NFTDIgZG9lc24ndCBleGlzdCBvbiBQTTgw NTggYW5kIGJpdHMgNCAmIDUgc2VsZWN0Cj4gKwkJICogdGhlIG1vZGUgYWxvbmUuCj4gKwkJICoK PiArCQkgKiBTb21lIFBNODA1OCByZWdpc3RlciBkb2N1bWVudGF0aW9uIHdvdWxkIGJlIG5pY2Ug dG8gZ2V0Cj4gKwkJICogdGhpcyByaWdodC4KPiArCQkgKi8KPiArCQlpZiAoY2gtPmh3Y2hhbi0+ YW11eF9jaGFubmVsID09IFBNOFhYWF9DSEFOTkVMX01VWE9GRikKPiArCQkJcnN2dmFsID0gQURD X0FSQl9VU1JQX1JTVl9JUF9TRUwwOwo+ICsJCWVsc2UKPiArCQkJcnN2dmFsID0gQURDX0FSQl9V U1JQX1JTVl9JUF9TRUwxOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAocnN2ID09IDB4ZmYpCj4gKwkJ CXJzdnZhbCA9IChjaC0+YW11eF9pcF9yc3YgPDwgQURDX1JTVl9JUF9TRUxfU0hJRlQpIHwKPiAr CQkJCUFEQ19BUkJfVVNSUF9SU1ZfVFJNOwo+ICsJCWVsc2UKPiArCQkJcnN2dmFsID0gKHJzdiA8 PCBBRENfUlNWX0lQX1NFTF9TSElGVCkgfAo+ICsJCQkJQURDX0FSQl9VU1JQX1JTVl9UUk07Cj4g Kwl9Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGFkYy0+bWFwLAo+ICsJCQkJIEFE Q19BUkJfVVNSUF9SU1YsCj4gKwkJCQkgfnJzdm1hc2ssCj4gKwkJCQkgcnN2dmFsKTsKPiArCWlm IChyZXQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKGFkYy0+ bWFwLCBBRENfQVJCX1VTUlBfQU5BX1BBUkFNLAo+ICsJCQkgICBBRENfQVJCX1VTUlBfQU5BX1BB UkFNX0RJUyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCS8qIERlY2lt YXRpb24gZmFjdG9yICovCj4gKwlyZXQgPSByZWdtYXBfd3JpdGUoYWRjLT5tYXAsIEFEQ19BUkJf VVNSUF9ESUdfUEFSQU0sCj4gKwkJCSAgIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU1fU0VMX1NISUZU MCB8Cj4gKwkJCSAgIEFEQ19BUkJfVVNSUF9ESUdfUEFSQU1fU0VMX1NISUZUMSB8Cj4gKwkJCSAg IGNoLT5kZWNpbWF0aW9uIDw8IEFEQ19ESUdfUEFSQU1fREVDX1NISUZUKTsKPiArCWlmIChyZXQp Cj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKGFkYy0+bWFwLCBB RENfQVJCX1VTUlBfQU5BX1BBUkFNLAo+ICsJCQkgICBBRENfQVJCX1VTUlBfQU5BX1BBUkFNX0VO KTsKPiArCWlmIChyZXQpCj4gKwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJLyogRW5hYmxlIHRoZSBh cmJpdGVyLCB0aGUgUXVhbGNvbW0gY29kZSBkb2VzIGl0IHR3aWNlIGxpa2UgdGhpcyAqLwo+ICsJ cmV0ID0gcmVnbWFwX3dyaXRlKGFkYy0+bWFwLCBBRENfQVJCX1VTUlBfQ05UUkwsCj4gKwkJCSAg IEFEQ19BUkJfVVNSUF9DTlRSTF9FTl9BUkIpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIHVubG9j azsKPiArCXJldCA9IHJlZ21hcF93cml0ZShhZGMtPm1hcCwgQURDX0FSQl9VU1JQX0NOVFJMLAo+ ICsJCQkgICBBRENfQVJCX1VTUlBfQ05UUkxfRU5fQVJCKTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byB1bmxvY2s7Cll1ay4gIEkgZ3Vlc3MgeW91IHRyaWVkIGl0IHdpdGhvdXQ/ICBXaG8ga25vd3Mg aWYgaXQgaXMgYSBoYXJkd2FyZSB3b3JrIGFyb3VuZApvciBhIGN1dCBhbmQgcGFzdGUgZXJyb3Ig aW4gdGhlIGRyaXZlci4uLgo+ICsKPiArCj4gKwkvKiBGaXJlIGEgcmVxdWVzdCEgKi8KPiArCXJl aW5pdF9jb21wbGV0aW9uKCZhZGMtPmNvbXBsZXRlKTsKPiArCXJldCA9IHJlZ21hcF93cml0ZShh ZGMtPm1hcCwgQURDX0FSQl9VU1JQX0NOVFJMLAo+ICsJCQkgICBBRENfQVJCX1VTUlBfQ05UUkxf RU5fQVJCIHwKPiArCQkJICAgQURDX0FSQl9VU1JQX0NOVFJMX1JFUSk7Cj4gKwlpZiAocmV0KQo+ ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCS8qIE5leHQgdGhlIGludGVycnVwdCBvY2N1cnMgKi8K PiArCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYWRjLT5jb21wbGV0ZSwKPiAr CQkJCQkgIFZBRENfQ09OVl9USU1FX01BWF9VUyk7Cj4gKwlpZiAoIXJldCkgewo+ICsJCWRldl9l cnIoYWRjLT5kZXYsICJjb252ZXJzaW9uIHRpbWVkIG91dFxuIik7Cj4gKwkJcmV0ID0gLUVUSU1F RE9VVDsKPiArCQlnb3RvIHVubG9jazsKPiArCX0KPiArCj4gKwlyZXQgPSByZWdtYXBfcmVhZChh ZGMtPm1hcCwgQURDX0FSQl9VU1JQX0RBVEEwLCAmdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290 byB1bmxvY2s7Cj4gKwlsc2IgPSB2YWw7Cj4gKwlyZXQgPSByZWdtYXBfcmVhZChhZGMtPm1hcCwg QURDX0FSQl9VU1JQX0RBVEExLCAmdmFsKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byB1bmxvY2s7 Cj4gKwltc2IgPSB2YWw7Cj4gKwkqYWRjX2NvZGUgPSAobXNiIDw8IDgpIHwgbHNiOwo+ICsKPiAr CS8qIFR1cm4gb2ZmIHRoZSBBREMgYnkgc2V0dGluZyB0aGUgYXJiaXRlciB0byAwIHR3aWNlICov Cj4gKwlyZXQgPSByZWdtYXBfd3JpdGUoYWRjLT5tYXAsIEFEQ19BUkJfVVNSUF9DTlRSTCwgMCk7 Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKGFk Yy0+bWFwLCBBRENfQVJCX1VTUlBfQ05UUkwsIDApOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIHVu bG9jazsKPiArCj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmYWRjLT5sb2NrKTsKPiArCXJl dHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcG04eHh4X3JlYWRfY2hhbm5lbChzdHJ1 Y3QgcG04eHh4X3hvYWRjICphZGMsCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcG04eHh4X2No YW5faW5mbyAqY2gsCj4gKwkJCSAgICAgICB1MTYgKmFkY19jb2RlKQo+ICt7Cj4gKwkvKgo+ICsJ ICogTm9ybWFsbHkgd2UganVzdCB1c2UgdGhlIHJhdGlvbWV0cmljIHNjYWxlIHZhbHVlIChSU1Yp IHByZWRlZmluZWQKPiArCSAqIGZvciB0aGUgY2hhbm5lbCwgYnV0IGR1cmluZyBjYWxpYnJhdGlv biB3ZSBuZWVkIHRvIG1vZGlmeSB0aGlzCj4gKwkgKiBzbyB0aGlzIHdyYXBwZXIgaXMgYSBoZWxw ZXIgaGlkaW5nIHRoZSBtb3JlIGNvbXBsZXggdmVyc2lvbi4KPiArCSAqLwo+ICsJcmV0dXJuIHBt OHh4eF9yZWFkX2NoYW5uZWxfcnN2KGFkYywgY2gsIDB4ZmYsIGFkY19jb2RlLCBmYWxzZSk7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQgcG04eHh4X2NhbGlicmF0ZV9kZXZpY2Uoc3RydWN0IHBtOHh4 eF94b2FkYyAqYWRjKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgcG04eHh4X2NoYW5faW5mbyAqY2g7 Cj4gKwl1MTYgcmVhZF8xMjUwdjsKPiArCXUxNiByZWFkXzA2MjV2Owo+ICsJdTE2IHJlYWRfbm9t dXhfcnN2NTsKPiArCXUxNiByZWFkX25vbXV4X3JzdjQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWFk Yy0+Z3JhcGhbVkFEQ19DQUxJQl9BQlNPTFVURV0uZHggPSBWQURDX0FCU09MVVRFX1JBTkdFX1VW Owo+ICsJYWRjLT5ncmFwaFtWQURDX0NBTElCX1JBVElPTUVUUklDXS5keCA9IFZBRENfUkFUSU9N RVRSSUNfUkFOR0U7Cj4gKwo+ICsJLyogQ29tbW9uIHJlZmVyZW5jZSBjaGFubmVsIGNhbGlicmF0 aW9uICovCj4gKwljaCA9IHBtOHh4eF9nZXRfY2hhbm5lbChhZGMsIFBNOFhYWF9DSEFOTkVMXzEy NVYpOwo+ICsJaWYgKCFjaCkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCXJldCA9IHBtOHh4eF9y ZWFkX2NoYW5uZWwoYWRjLCBjaCwgJnJlYWRfMTI1MHYpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRl dl9lcnIoYWRjLT5kZXYsICJjb3VsZCBub3QgcmVhZCAxLjI1ViByZWZlcmVuY2UgY2hhbm5lbFxu Iik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwljaCA9IHBtOHh4eF9nZXRfY2hhbm5l bChhZGMsIFBNOFhYWF9DSEFOTkVMX0lOVEVSTkFMKTsKPiArCWlmICghY2gpCj4gKwkJcmV0dXJu IC1FTk9ERVY7Cj4gKwlyZXQgPSBwbTh4eHhfcmVhZF9jaGFubmVsKGFkYywgY2gsICZyZWFkXzA2 MjV2KTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGFkYy0+ZGV2LCAiY291bGQgbm90IHJl YWQgMC42MjVWIHJlZmVyZW5jZSBjaGFubmVsXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiAr CX0KPiArCWlmIChyZWFkXzEyNTB2ID09IHJlYWRfMDYyNXYpIHsKPiArCQlkZXZfZXJyKGFkYy0+ ZGV2LCAicmVhZCBzYW1lIEFEQyBjb2RlIGZvciAxLjI1ViBhbmQgMC42MjVWXG4iKTsKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlhZGMtPmdyYXBoW1ZBRENfQ0FMSUJfQUJTT0xV VEVdLmR5ID0gcmVhZF8xMjUwdiAtIHJlYWRfMDYyNXY7Cj4gKwlhZGMtPmdyYXBoW1ZBRENfQ0FM SUJfQUJTT0xVVEVdLmduZCA9IHJlYWRfMDYyNXY7Cj4gKwo+ICsJZGV2X2luZm8oYWRjLT5kZXYs ICJhYnNvbHV0ZSBjYWxpYnJhdGlvbiBkeCA9ICVkIHVWLCBkeSA9ICVkIHVuaXRzXG4iLAo+ICsJ CSBWQURDX0FCU09MVVRFX1JBTkdFX1VWLCBhZGMtPmdyYXBoW1ZBRENfQ0FMSUJfQUJTT0xVVEVd LmR5KTsKPiArCj4gKwkvKiBSYXRpb21ldHJpYyBjYWxpYnJhdGlvbiAqLwo+ICsJY2ggPSBwbTh4 eHhfZ2V0X2NoYW5uZWwoYWRjLCBQTThYWFhfQ0hBTk5FTF9NVVhPRkYpOwo+ICsJaWYgKCFjaCkK PiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCXJldCA9IHBtOHh4eF9yZWFkX2NoYW5uZWxfcnN2KGFk YywgY2gsIEFNVVhfUlNWNSwKPiArCQkJCSAgICAgICZyZWFkX25vbXV4X3JzdjUsIHRydWUpOwo+ ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoYWRjLT5kZXYsICJjb3VsZCBub3QgcmVhZCBNVVhP RkYgcmVmZXJlbmNlIGNoYW5uZWxcbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJfQo+ICsJ cmV0ID0gcG04eHh4X3JlYWRfY2hhbm5lbF9yc3YoYWRjLCBjaCwgQU1VWF9SU1Y0LAo+ICsJCQkJ ICAgICAgJnJlYWRfbm9tdXhfcnN2NCwgdHJ1ZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihhZGMtPmRldiwgImNvdWxkIG5vdCByZWFkIE1VWE9GRiByZWZlcmVuY2UgY2hhbm5lbFxuIik7 Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwlhZGMtPmdyYXBoW1ZBRENfQ0FMSUJfUkFU SU9NRVRSSUNdLmR5ID0KPiArCQlyZWFkX25vbXV4X3JzdjUgLSByZWFkX25vbXV4X3JzdjQ7Cj4g KwlhZGMtPmdyYXBoW1ZBRENfQ0FMSUJfUkFUSU9NRVRSSUNdLmduZCA9IHJlYWRfbm9tdXhfcnN2 NDsKPiArCj4gKwlkZXZfaW5mbyhhZGMtPmRldiwgInJhdGlvbWV0cmljIGNhbGlicmF0aW9uIGR4 ID0gJWQsIGR5ID0gJWQgdW5pdHNcbiIsCj4gKwkJIFZBRENfUkFUSU9NRVRSSUNfUkFOR0UsCj4g KwkJIGFkYy0+Z3JhcGhbVkFEQ19DQUxJQl9SQVRJT01FVFJJQ10uZHkpOwo+ICsKPiArCXJldHVy biAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHBtOHh4eF9yZWFkX3JhdyhzdHJ1Y3QgaWlvX2Rl diAqaW5kaW9fZGV2LAo+ICsJCQkgICBzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwK PiArCQkJICAgaW50ICp2YWwsIGludCAqdmFsMiwgbG9uZyBtYXNrKQo+ICt7Cj4gKwlzdHJ1Y3Qg cG04eHh4X3hvYWRjICphZGMgPSBpaW9fcHJpdihpbmRpb19kZXYpOwo+ICsJY29uc3Qgc3RydWN0 IHBtOHh4eF9jaGFuX2luZm8gKmNoOwo+ICsJdTE2IGFkY19jb2RlOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlzd2l0Y2ggKG1hc2spIHsKPiArCWNhc2UgSUlPX0NIQU5fSU5GT19QUk9DRVNTRUQ6Cj4g KwkJY2ggPSBwbTh4eHhfZ2V0X2NoYW5uZWwoYWRjLCBjaGFuLT5hZGRyZXNzKTsKPiArCQlpZiAo IWNoKSB7Cj4gKwkJCWRldl9lcnIoYWRjLT5kZXYsICJubyBzdWNoIGNoYW5uZWwgJWx1XG4iLAo+ ICsJCQkJY2hhbi0+YWRkcmVzcyk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQly ZXQgPSBwbTh4eHhfcmVhZF9jaGFubmVsKGFkYywgY2gsICZhZGNfY29kZSk7Cj4gKwkJaWYgKHJl dCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJcmV0ID0gcWNvbV92YWRjX3NjYWxlKGNoLT5o d2NoYW4tPnNjYWxlX2ZuX3R5cGUsCj4gKwkJCQkgICAgICAmYWRjLT5ncmFwaFtjaC0+Y2FsaWJy YXRpb25dLAo+ICsJCQkJICAgICAgJmNoLT5od2NoYW4tPnByZXNjYWxlLAo+ICsJCQkJICAgICAg KGNoLT5jYWxpYnJhdGlvbiA9PSBWQURDX0NBTElCX0FCU09MVVRFKSwKPiArCQkJCSAgICAgIGFk Y19jb2RlLCB2YWwpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCXJl dHVybiBJSU9fVkFMX0lOVDsKPiArCWNhc2UgSUlPX0NIQU5fSU5GT19SQVc6Cj4gKwkJY2ggPSBw bTh4eHhfZ2V0X2NoYW5uZWwoYWRjLCBjaGFuLT5hZGRyZXNzKTsKPiArCQlpZiAoIWNoKSB7Cj4g KwkJCWRldl9lcnIoYWRjLT5kZXYsICJubyBzdWNoIGNoYW5uZWwgJWx1XG4iLAo+ICsJCQkJY2hh bi0+YWRkcmVzcyk7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlyZXQgPSBwbTh4 eHhfcmVhZF9jaGFubmVsKGFkYywgY2gsICZhZGNfY29kZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiArCj4gKwkJKnZhbCA9IChpbnQpYWRjX2NvZGU7Cj4gKwkJcmV0dXJuIElJ T19WQUxfSU5UOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArfQo+ ICsKPiArc3RhdGljIGludCBwbTh4eHhfb2ZfeGxhdGUoc3RydWN0IGlpb19kZXYgKmluZGlvX2Rl diwKPiArCQkJICAgY29uc3Qgc3RydWN0IG9mX3BoYW5kbGVfYXJncyAqaWlvc3BlYykKPiArewo+ ICsJc3RydWN0IHBtOHh4eF94b2FkYyAqYWRjID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKPiArCXU4 IHByZV9zY2FsZV9tdXg7Cj4gKwl1OCBhbXV4X2NoYW5uZWw7Cj4gKwl1bnNpZ25lZCBpbnQgaTsK PiArCj4gKwkvKgo+ICsJICogRmlyc3QgY2VsbCBpcyBwcmVzY2FsZXIgb3IgcHJlbXV4LCBzZWNv bmQgY2VsbCBpcyBhbmFsb2cKPiArCSAqIG11eC4KPiArCSAqLwo+ICsJaWYgKGlpb3NwZWMtPmFy Z3NfY291bnQgIT0gMikgewo+ICsJCWRldl9lcnIoJmluZGlvX2Rldi0+ZGV2LCAid3JvbmcgbnVt YmVyIG9mIGFyZ3VtZW50cyBmb3IgJXMgbmVlZCAyIGdvdCAlZFxuIiwKPiArCQkJaWlvc3BlYy0+ bnAtPm5hbWUsCj4gKwkJCWlpb3NwZWMtPmFyZ3NfY291bnQpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsJcHJlX3NjYWxlX211eCA9ICh1OClpaW9zcGVjLT5hcmdzWzBdOwo+ICsJYW11 eF9jaGFubmVsID0gKHU4KWlpb3NwZWMtPmFyZ3NbMV07Cj4gKwlkZXZfZGJnKCZpbmRpb19kZXYt PmRldiwgInByZSBzY2FsZS9tdXg6ICUwMngsIGFtdXg6ICUwMnhcbiIsCj4gKwkJcHJlX3NjYWxl X211eCwgYW11eF9jaGFubmVsKTsKPiArCj4gKwkvKiBXZSBuZWVkIHRvIG1hdGNoIGV4YWN0bHkg b24gdGhlIHByZXNjYWxlL3ByZW11eCBhbmQgY2hhbm5lbCAqLwo+ICsJZm9yIChpID0gMDsgaSA8 IGFkYy0+bmNoYW5zOyBpKyspCj4gKwkJaWYgKGFkYy0+Y2hhbnNbaV0uaHdjaGFuLT5wcmVfc2Nh bGVfbXV4ID09IHByZV9zY2FsZV9tdXggJiYKPiArCQkgICAgYWRjLT5jaGFuc1tpXS5od2NoYW4t PmFtdXhfY2hhbm5lbCA9PSBhbXV4X2NoYW5uZWwpCj4gKwkJCXJldHVybiBpOwo+ICsKPiArCXJl dHVybiAtRUlOVkFMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIHBt OHh4eF94b2FkY19pbmZvID0gewo+ICsJLmRyaXZlcl9tb2R1bGUgPSBUSElTX01PRFVMRSwKPiAr CS5vZl94bGF0ZSA9IHBtOHh4eF9vZl94bGF0ZSwKPiArCS5yZWFkX3JhdyA9IHBtOHh4eF9yZWFk X3JhdywKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcG04eHh4X3hvYWRjX3BhcnNlX2NoYW5uZWwo c3RydWN0IGRldmljZSAqZGV2LAo+ICsJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCwK PiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB4b2FkY19jaGFubmVsICpod19jaGFubmVscywKPiAr CQkJCSAgICAgIHN0cnVjdCBpaW9fY2hhbl9zcGVjICppaW9fY2hhbiwKPiArCQkJCSAgICAgIHN0 cnVjdCBwbTh4eHhfY2hhbl9pbmZvICpjaCkKPiArewo+ICsJY29uc3QgY2hhciAqbmFtZSA9IG5w LT5uYW1lOwo+ICsJY29uc3Qgc3RydWN0IHhvYWRjX2NoYW5uZWwgKmh3Y2hhbjsKPiArCXUzMiBw cmVfc2NhbGVfbXV4LCBhbXV4X2NoYW5uZWw7Cj4gKwl1MzIgcnN2LCBkZWM7Cj4gKwlpbnQgcmV0 Owo+ICsJaW50IGNoaWQ7Cj4gKwo+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgo bnAsICJyZWciLCAwLCAmcHJlX3NjYWxlX211eCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2Vy cihkZXYsICJpbnZhbGlkIHByZSBzY2FsZS9tdXggbnVtYmVyICVzXG4iLCBuYW1lKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAs ICJyZWciLCAxLCAmYW11eF9jaGFubmVsKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRl diwgImludmFsaWQgYW11eCBjaGFubmVsIG51bWJlciAlc1xuIiwgbmFtZSk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwkvKiBGaW5kIHRoZSByaWdodCBjaGFubmVsIHNldHRpbmcgKi8K PiArCWNoaWQgPSAwOwo+ICsJaHdjaGFuID0gJmh3X2NoYW5uZWxzWzBdOwo+ICsJd2hpbGUgKGh3 Y2hhbiAmJiBod2NoYW4tPmRhdGFzaGVldF9uYW1lKSB7Cj4gKwkJaWYgKGh3Y2hhbi0+cHJlX3Nj YWxlX211eCA9PSBwcmVfc2NhbGVfbXV4ICYmCj4gKwkJICAgIGh3Y2hhbi0+YW11eF9jaGFubmVs ID09IGFtdXhfY2hhbm5lbCkKPiArCQkJYnJlYWs7Cj4gKwkJaHdjaGFuKys7Cj4gKwkJY2hpZCsr Owo+ICsJfQo+ICsJLyogVGhlIHNlbnRpbmVsIGRvZXMgbm90IGhhdmUgYSBuYW1lIGFzc2lnbmVk ICovCj4gKwlpZiAoIWh3Y2hhbi0+ZGF0YXNoZWV0X25hbWUpIHsKPiArCQlkZXZfZXJyKGRldiwg ImNvdWxkIG5vdCBsb2NhdGUgY2hhbm5lbCAlMDJ4LyUwMnhcbiIsCj4gKwkJCXByZV9zY2FsZV9t dXgsIGFtdXhfY2hhbm5lbCk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwljaC0+bmFt ZSA9IG5hbWU7Cj4gKwljaC0+aHdjaGFuID0gaHdjaGFuOwo+ICsJLyogRXZlcnlvbmUgc2VlbXMg dG8gdXNlIGFic29sdXRlIGNhbGlicmF0aW9uIGV4Y2VwdCBpbiBzcGVjaWFsIGNhc2VzICovCj4g KwljaC0+Y2FsaWJyYXRpb24gPSBWQURDX0NBTElCX0FCU09MVVRFOwo+ICsJLyogRXZlcnlvbmUg c2VlbXMgdG8gdXNlIGRlZmF1bHQgKCJ0eXBlIDIiKSBkZWNpbWF0aW9uICovCj4gKwljaC0+ZGVj aW1hdGlvbiA9IFZBRENfREVGX0RFQ0lNQVRJT047Cj4gKwo+ICsJaWYgKCFvZl9wcm9wZXJ0eV9y ZWFkX3UzMihucCwgInFjb20scmF0aW9tZXRyaWMiLCAmcnN2KSkgewo+ICsJCWNoLT5jYWxpYnJh dGlvbiA9IFZBRENfQ0FMSUJfUkFUSU9NRVRSSUM7Cj4gKwkJaWYgKHJzdiA+IFhPQURDX1JTVl9N QVgpIHsKPiArCQkJZGV2X2VycihkZXYsICIlcyB0b28gbGFyZ2UgUlNWIHZhbHVlICVkXG4iLCBu YW1lLCByc3YpOwo+ICsJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwkJaWYgKHJzdiA9PSBB TVVYX1JTVjMpIHsKPiArCQkJZGV2X2VycihkZXYsICIlcyBpbnZhbGlkIFJTViB2YWx1ZSAlZFxu IiwgbmFtZSwgcnN2KTsKPiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJfQo+ICsJfQo+ICsKPiAr CS8qIE9wdGlvbmFsIGRlY2ltYXRpb24sIGlmIG9taXR0ZWQgd2UgdXNlIHRoZSBkZWZhdWx0ICov Cj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInFjb20sZGVjaW1hdGlvbiIsICZk ZWMpOwo+ICsJaWYgKCFyZXQpIHsKPiArCQlyZXQgPSBxY29tX3ZhZGNfZGVjaW1hdGlvbl9mcm9t X2R0KGRlYyk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJZGV2X2VycihkZXYsICIlcyBpbnZh bGlkIGRlY2ltYXRpb24gJWRcbiIsCj4gKwkJCQluYW1lLCBkZWMpOwo+ICsJCQlyZXR1cm4gcmV0 Owo+ICsJCX0KPiArCQljaC0+ZGVjaW1hdGlvbiA9IHJldDsKPiArCX0KPiArCj4gKwlpaW9fY2hh bi0+Y2hhbm5lbCA9IGNoaWQ7Cj4gKwlpaW9fY2hhbi0+YWRkcmVzcyA9IGh3Y2hhbi0+YW11eF9j aGFubmVsOwo+ICsJaWlvX2NoYW4tPmRhdGFzaGVldF9uYW1lID0gaHdjaGFuLT5kYXRhc2hlZXRf bmFtZTsKPiArCWlpb19jaGFuLT50eXBlID0gaHdjaGFuLT50eXBlOwo+ICsJLyogQWxsIGNoYW5u ZWxzIGFyZSByYXcgb3IgcHJvY2Vzc2VkICovCj4gKwlpaW9fY2hhbi0+aW5mb19tYXNrX3NlcGFy YXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSB8Cj4gKwkJQklUKElJT19DSEFOX0lORk9fUFJP Q0VTU0VEKTsKPiArCWlpb19jaGFuLT5pbmRleGVkID0gMTsKPiArCj4gKwlkZXZfZGJnKGRldiwg ImNoYW5uZWwgW1BSRVNDQUxFL01VWDogJTAyeCBBTVVYOiAlMDJ4XSBcIiVzXCIgIgo+ICsJCSJy ZWYgdm9sdGFnZTogJWQsIGRlY2ltYXRpb24gJWQgIgo+ICsJCSJwcmVzY2FsZSAlZC8lZCwgc2Nh bGUgZnVuY3Rpb24gJWRcbiIsCj4gKwkJaHdjaGFuLT5wcmVfc2NhbGVfbXV4LCBod2NoYW4tPmFt dXhfY2hhbm5lbCwgY2gtPm5hbWUsCj4gKwkJY2gtPmFtdXhfaXBfcnN2LCBjaC0+ZGVjaW1hdGlv biwgaHdjaGFuLT5wcmVzY2FsZS5udW0sCj4gKwkJaHdjaGFuLT5wcmVzY2FsZS5kZW4sIGh3Y2hh bi0+c2NhbGVfZm5fdHlwZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgcG04eHh4X3hvYWRjX3BhcnNlX2NoYW5uZWxzKHN0cnVjdCBwbTh4eHhfeG9hZGMgKmFkYywK PiArCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKmNoaWxkOwo+ICsJc3RydWN0IHBtOHh4eF9jaGFuX2luZm8gKmNoOwo+ICsJaW50 IHJldDsKPiArCWludCBpOwo+ICsKPiArCWFkYy0+bmNoYW5zID0gb2ZfZ2V0X2F2YWlsYWJsZV9j aGlsZF9jb3VudChucCk7Cj4gKwlpZiAoIWFkYy0+bmNoYW5zKSB7Cj4gKwkJZGV2X2VycihhZGMt PmRldiwgIm5vIGNoYW5uZWwgY2hpbGRyZW5cbiIpOwo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsJ fQo+ICsJZGV2X2RiZyhhZGMtPmRldiwgImZvdW5kICVkIEFEQyBjaGFubmVsc1xuIiwgYWRjLT5u Y2hhbnMpOwo+ICsKPiArCWFkYy0+aWlvX2NoYW5zID0gZGV2bV9rY2FsbG9jKGFkYy0+ZGV2LCBh ZGMtPm5jaGFucywKPiArCQkJCSAgICAgIHNpemVvZigqYWRjLT5paW9fY2hhbnMpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghYWRjLT5paW9fY2hhbnMpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ ICsJYWRjLT5jaGFucyA9IGRldm1fa2NhbGxvYyhhZGMtPmRldiwgYWRjLT5uY2hhbnMsCj4gKwkJ CQkgIHNpemVvZigqYWRjLT5jaGFucyksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFhZGMtPmNoYW5z KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWkgPSAwOwo+ICsJZm9yX2VhY2hfYXZhaWxh YmxlX2NoaWxkX29mX25vZGUobnAsIGNoaWxkKSB7Cj4gKwkJY2ggPSAmYWRjLT5jaGFuc1tpXTsK PiArCQlyZXQgPSBwbTh4eHhfeG9hZGNfcGFyc2VfY2hhbm5lbChhZGMtPmRldiwgY2hpbGQsCj4g KwkJCQkJCSBhZGMtPnZhcmlhbnQtPmNoYW5uZWxzLAo+ICsJCQkJCQkgJmFkYy0+aWlvX2NoYW5z W2ldLAo+ICsJCQkJCQkgY2gpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJb2Zfbm9kZV9wdXQoY2hp bGQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCQlpKys7Cj4gKwl9Cj4gKwo+ICsJLyog Q2hlY2sgZm9yIHJlcXVpcmVkIGNoYW5uZWxzICovCj4gKwljaCA9IHBtOHh4eF9nZXRfY2hhbm5l bChhZGMsIFBNOFhYWF9DSEFOTkVMXzEyNVYpOwo+ICsJaWYgKCFjaCkgewo+ICsJCWRldl9lcnIo YWRjLT5kZXYsICJtaXNzaW5nIDEuMjVWIHJlZmVyZW5jZSBjaGFubmVsXG4iKTsKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCX0KPiArCWNoID0gcG04eHh4X2dldF9jaGFubmVsKGFkYywgUE04WFhY X0NIQU5ORUxfSU5URVJOQUwpOwo+ICsJaWYgKCFjaCkgewo+ICsJCWRldl9lcnIoYWRjLT5kZXYs ICJtaXNzaW5nIDAuNjI1ViByZWZlcmVuY2UgY2hhbm5lbFxuIik7Cj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gKwljaCA9IHBtOHh4eF9nZXRfY2hhbm5lbChhZGMsIFBNOFhYWF9DSEFOTkVM X01VWE9GRik7Cj4gKwlpZiAoIWNoKSB7Cj4gKwkJZGV2X2VycihhZGMtPmRldiwgIm1pc3Npbmcg TVVYT0ZGIHJlZmVyZW5jZSBjaGFubmVsXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBwbTh4eHhfeG9hZGNfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJY29uc3Qgc3RydWN0IHhv YWRjX3ZhcmlhbnQgKnZhcmlhbnQ7Cj4gKwlzdHJ1Y3QgcG04eHh4X3hvYWRjICphZGM7Cj4gKwlz dHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2Owo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBk ZXYtPmRldi5vZl9ub2RlOwo+ICsJc3RydWN0IHJlZ21hcCAqbWFwOwo+ICsJc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJdmFyaWFudCA9IG9mX2Rl dmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ICsJaWYgKCF2YXJpYW50KQo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsKPiArCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYyhkZXYsIHNp emVvZigqYWRjKSk7Cj4gKwlpZiAoIWluZGlvX2RldikKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZGlvX2Rldik7Cj4gKwo+ICsJYWRjID0gaWlv X3ByaXYoaW5kaW9fZGV2KTsKPiArCWFkYy0+ZGV2ID0gZGV2Owo+ICsJYWRjLT52YXJpYW50ID0g dmFyaWFudDsKPiArCWluaXRfY29tcGxldGlvbigmYWRjLT5jb21wbGV0ZSk7Cj4gKwltdXRleF9p bml0KCZhZGMtPmxvY2spOwo+ICsKPiArCXJldCA9IHBtOHh4eF94b2FkY19wYXJzZV9jaGFubmVs cyhhZGMsIG5wKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwltYXAgPSBk ZXZfZ2V0X3JlZ21hcChkZXYtPnBhcmVudCwgTlVMTCk7Cj4gKwlpZiAoIW1hcCkgewo+ICsJCWRl dl9lcnIoZGV2LCAicGFyZW50IHJlZ21hcCB1bmF2YWlsYWJsZS5cbiIpOwo+ICsJCXJldHVybiAt RU5YSU87Cj4gKwl9Cj4gKwlhZGMtPm1hcCA9IG1hcDsKPiArCj4gKwkvKiBCcmluZyB1cCByZWd1 bGF0b3IgKi8KR29pbmcgZm9yIHRoZSBvYnZpb3VzIGRvY3MgdGhlcmUgOykKPiArCWFkYy0+dnJl ZiA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJ4b2FkYy1yZWYiKTsKPiArCWlmIChJU19FUlIo YWRjLT52cmVmKSkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBYT0FEQyBWUkVG IHJlZ3VsYXRvclxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoYWRjLT52cmVmKTsKPiArCX0KPiAr CXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoYWRjLT52cmVmKTsKPiArCWlmIChyZXQpIHsKPiArCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgWE9BREMgVlJFRiByZWd1bGF0b3JcbiIpOwo+ ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVk X2lycShkZXYsIHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCksCj4gKwkJCXBtOHh4eF9lb2NfaXJx LCBOVUxMLCAwLCB2YXJpYW50LT5uYW1lLCBpbmRpb19kZXYpOwpJIGtub3cgdGhhdCBpdCdsbCBt YXAgdG8gdGhlIHNhbWUgdGhpbmcgYW55d2F5LCBidXQgd2h5IGNsYWltIGl0J3MgYQp0aHJlYWRl ZCBpcnEgYW5kIG5vdCBwcm92aWRlIGEgdGhyZWFkPyBJJ2QganVzdCB1c2UgZGV2bV9yZXF1ZXN0 X2lycS4KCj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVxdWVz dCBJUlFcbiIpOwo+ICsJCWdvdG8gb3V0X2Rpc2FibGVfdnJlZjsKPiArCX0KPiArCj4gKwlpbmRp b19kZXYtPmRldi5wYXJlbnQgPSBkZXY7Cj4gKwlpbmRpb19kZXYtPmRldi5vZl9ub2RlID0gbnA7 Cj4gKwlpbmRpb19kZXYtPm5hbWUgPSB2YXJpYW50LT5uYW1lOwo+ICsJaW5kaW9fZGV2LT5tb2Rl cyA9IElORElPX0RJUkVDVF9NT0RFOwo+ICsJaW5kaW9fZGV2LT5pbmZvID0gJnBtOHh4eF94b2Fk Y19pbmZvOwo+ICsJaW5kaW9fZGV2LT5jaGFubmVscyA9IGFkYy0+aWlvX2NoYW5zOwo+ICsJaW5k aW9fZGV2LT5udW1fY2hhbm5lbHMgPSBhZGMtPm5jaGFuczsKPiArCj4gKwlyZXQgPSBpaW9fZGV2 aWNlX3JlZ2lzdGVyKGluZGlvX2Rldik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gb3V0X2Rpc2Fi bGVfdnJlZjsKPiArCj4gKwlyZXQgPSBwbTh4eHhfY2FsaWJyYXRlX2RldmljZShhZGMpOwoKSSdk IG5vdCBub3RpY2VkIHRoaXMgYmVmb3JlLCBidXQgbG9va3MgbGlrZSBhbiB1bm5lY2Vzc2FyeSBy YWNlIHRvIGhhdmUKdW5jYWxpYnJhdGVkIHJlYWRzIGEgcG9zc2libGl0eSBieSBoYXZpbmcgdGhp cyBhZnRlciB0aGUgZXhwb3N1cmUgdG8KdXNlcnNwYWNlIGFuZCBjb25zdW1lcnMgdGhhdCBpaW9f ZGV2aWNlX3JlZ2lzdGVyIGltcGxpZXMuCkNhbiB3ZSBub3QganVzdCBtb3ZlIHRoaXMgdXAgYSBm ZXcgbGluZXM/Cgo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dF91bnJlZ19kZXZpY2U7Cj4gKwo+ ICsJZGV2X2luZm8oZGV2LCAiJXMgWE9BREMgZHJpdmVyIGVuYWJsZWRcbiIsIHZhcmlhbnQtPm5h bWUpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArb3V0X3VucmVnX2RldmljZToKPiArCWlpb19k ZXZpY2VfdW5yZWdpc3RlcihpbmRpb19kZXYpOwo+ICtvdXRfZGlzYWJsZV92cmVmOgo+ICsJcmVn dWxhdG9yX2Rpc2FibGUoYWRjLT52cmVmKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IHBtOHh4eF94b2FkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGlpb19kZXYgKmluZGlvX2RldiA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOwo+ICsJc3RydWN0IHBtOHh4eF94b2FkYyAqYWRjID0gaWlvX3ByaXYoaW5k aW9fZGV2KTsKPiArCj4gKwlpaW9fZGV2aWNlX3VucmVnaXN0ZXIoaW5kaW9fZGV2KTsKPiArCj4g KwlyZWd1bGF0b3JfZGlzYWJsZShhZGMtPnZyZWYpOwpPbmUgZGF5IHdlIHdpbGwgdGFsayBtYXJr IGludG8gYSBkZXZtX3JlZ3VsYXRvcl9lbmFibGUgZm9yIGFsbCB0aGVzZQpkZXZpY2VzIHdoZXJl IGR5bmFtaWMgcG93ZXIgbWFuYWdlbWVudCBpcyBqdXN0IGZhciB0b28gdHJpY2t5IQo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHhvYWRjX3ZhcmlhbnQg cG04MDE4X3ZhcmlhbnQgPSB7Cj4gKwkubmFtZSA9ICJQTTgwMTgtWE9BREMiLAo+ICsJLmNoYW5u ZWxzID0gcG04MDE4X3hvYWRjX2NoYW5uZWxzLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCB4b2FkY192YXJpYW50IHBtODAzOF92YXJpYW50ID0gewo+ICsJLm5hbWUgPSAiUE04MDM4 LVhPQURDIiwKPiArCS5jaGFubmVscyA9IHBtODAzOF94b2FkY19jaGFubmVscywKPiArfTsKPiAr Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeG9hZGNfdmFyaWFudCBwbTgwNThfdmFyaWFudCA9IHsK PiArCS5uYW1lID0gIlBNODA1OC1YT0FEQyIsCj4gKwkuY2hhbm5lbHMgPSBwbTgwNThfeG9hZGNf Y2hhbm5lbHMsCj4gKwkuYnJva2VuX3JhdGlvbWV0cmljID0gdHJ1ZSwKPiArCS5wcmVzY2FsaW5n ID0gdHJ1ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeG9hZGNfdmFyaWFudCBw bTg5MjFfdmFyaWFudCA9IHsKPiArCS5uYW1lID0gIlBNODkyMS1YT0FEQyIsCj4gKwkuY2hhbm5l bHMgPSBwbTg5MjFfeG9hZGNfY2hhbm5lbHMsCj4gKwkuc2Vjb25kX2xldmVsX211eCA9IHRydWUs Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBwbTh4eHhfeG9h ZGNfaWRfdGFibGVbXSA9IHsKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJxY29tLHBtODAxOC1h ZGMiLAo+ICsJCS5kYXRhID0gJnBtODAxOF92YXJpYW50LAo+ICsJfSwKPiArCXsKPiArCQkuY29t cGF0aWJsZSA9ICJxY29tLHBtODAzOC1hZGMiLAo+ICsJCS5kYXRhID0gJnBtODAzOF92YXJpYW50 LAo+ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJxY29tLHBtODA1OC1hZGMiLAo+ICsJ CS5kYXRhID0gJnBtODA1OF92YXJpYW50LAo+ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9 ICJxY29tLHBtODkyMS1hZGMiLAo+ICsJCS5kYXRhID0gJnBtODkyMV92YXJpYW50LAo+ICsJfSwK PiArCXsgfSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcG04eHh4X3hvYWRjX2lk X3RhYmxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtOHh4eF94b2Fk Y19kcml2ZXIgPSB7Cj4gKwkuZHJpdmVyCQk9IHsKPiArCQkubmFtZQk9ICJwbTh4eHgtYWRjIiwK PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBwbTh4eHhfeG9hZGNfaWRfdGFibGUsCj4gKwl9LAo+ICsJ LnByb2JlCQk9IHBtOHh4eF94b2FkY19wcm9iZSwKPiArCS5yZW1vdmUJCT0gcG04eHh4X3hvYWRj X3JlbW92ZSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihwbTh4eHhfeG9hZGNfZHJp dmVyKTsKPiArCj4gK01PRFVMRV9ERVNDUklQVElPTigiUE04eHh4IFhPQURDIGRyaXZlciIpOwo+ ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06cG04 eHh4LXhvYWRjIik7Cj4gCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=