From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sameer Goel Subject: Re: [v2 4/6] xen/iommu: smmu-v3: Add Xen specific code to enable the ported driver Date: Wed, 30 May 2018 13:46:25 -0600 Message-ID: References: <20180524004620.23828-1-sameer.goel@linaro.org> <20180524004620.23828-5-sameer.goel@linaro.org> <1df9c9aa-bb75-94db-d88f-53229e740e18@linaro.org> <9900a2ad-65d4-357f-b54d-01ba76476d1a@caviumnetworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fO73J-0007qm-1E for xen-devel@lists.xenproject.org; Wed, 30 May 2018 19:46:33 +0000 Received: by mail-pl0-x241.google.com with SMTP id z9-v6so8364070plk.11 for ; Wed, 30 May 2018 12:46:28 -0700 (PDT) In-Reply-To: <9900a2ad-65d4-357f-b54d-01ba76476d1a@caviumnetworks.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Manish Jaggi , xen-devel@lists.xenproject.org, julien.grall@arm.com Cc: sstabellini@kernel.org, shankerd@codeaurora.org, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org TWFuaXNoLCBJJ2xsIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSB2YXJpYWJsZSBuYW1lcy4gSSBt aWdodCBub3QgaGF2ZSBlbm91Z2ggdGltZSA6KS4KPj4KPj4KPj4gT24gMDUvMjMvMjAxOCAxMDo0 OCBQTSwgTWFuaXNoIEphZ2dpIHdyb3RlOgo+Pj4gSGkgU2FtZWVyLAo+Pj4KPj4+IEdlbmVyYWwg Q29tbWVudCwgcGxlYXNlIHVzZSBhcHByb3ByaWF0ZSB2YXJpYWJsZSBuYW1lcyBmb3IgWFhYX2Rv bWFpbiBzdHJ1Y3R1cmVzIGluIGNvZGUgd2hpY2ggaXMgeGVuIHNwZWNpZmljLgo+PiBJIHRob3Vn aHQgdGhhdCB3ZSBoYWQgZGlzY3Vzc2VkIHRoaXMgYmVmb3JlIG9uIG9uZSBvZiB0aGUgUkZDcy4K PiBZZXMgYW5kIG5vIG9uZSByZXBsaWVkIHRvIG15IGxhc3QgY29tbWVudCB0aGF0IHRoZSB2YXIg bmFtZXMgaGF2ZSB0byBiZSBub24gY29uZnVzaW5nIGluIFhlbiBzcGVjaWZpYyBjb2RlLgpJJ20g c29ycnkgYWJvdXQgdGhhdC4gSSBqdXN0IGFzc3VtZWQgdGhhdCBzaW5jZSB0aGUgcG9saWN5IG9u IHBvcnRlZCB2YXJpYWJsZSBuYW1lcyB3YXMgY29uc2lzdGVudCB3ZSBzbyBub3QgbmVlIHRvIGNo YW5nZSB0aGUgbmFtZXMuCgo+PiBBdCB0aGlzIHBvaW50IHdlIGFyZSBqdXN0IHVzaW5nIHRoZSBm b3JtYXQgdXNlZCBmb3Igc21tdS12Mi4KPiBzbW11LXYyIGhhcyBhIGxvdCBvZiBjb25mdXNpbmcg dmFyaWFibGUgbmFtZXMgd2l0aCBfZG9tYWluLgo+IEkgYmVsaWV2ZSB0aGF0IGZpbGUgbmVlZHMg dG8gYmUgZml4ZWQgYXMgd2VsbC4KPj4gSSBkb24ndCB0aGluayB0aGF0IHRoZSB2YXJpYWJsZSBu YW1lcyBhcmUgaW5hcHByb3ByaWF0ZS4gVW5sZXNzIHRoZXJlIGlzIGEgdmVyeSBzcGVjaWZpYyBp c3N1ZSB3aXRoIHRoZSB2YXJpYWJsZSBuYW1lcywKPiBUaGUgaXNzdWUgaXMgaW4gY29kZSByZWFk YWJpbGl0eSBhbmQgdW5kZXJzdGFuZGluZyB0aGUgZmxvdy4KPiBJdCBpcyBjb25mdXNpbmcgc28g bWFueSBfZG9tYWluIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2VkIHdoaWNoIGFyZSBub3QgdmVyYm9z ZS4KVGhlc2UgbmFtZXMgYXJlIGNvbWluZyBmcm9tIHRoZSBvcmlnaW5hbCBMaW51eCBjb2RlLiBT bywgd2UgZG8gbm90IGNoYW5nZSB0aGVtIGFzIHBlciB0aGUgcG9saWN5LiBUaGF0IGJlaW5nIHNh aWQgSSBjYW4gYWRkIGEgY29tbWVudCBzZWN0aW9uIHRvIGV4cGxhaW4gdGhlIGNvbmZ1c2luZyB2 YXJpYWJsZXMgaW4gdGhlIFhlbiBzcGVjaWZpYyBjb2RlPyBQbGVhc2UgbGV0IG1lIGtub3cgaWYg dGhpcyB3aWxsIGhlbHAgdXMgcmVzb2x2ZSB0aGlzIGlzc3VlPwrCoAo+Cj4gVHdvIGZ1bmN0aW9u cyBkaWZmZXJlbnQgYW5kIGNvbmZ1c2luZyB2YXJpYWJsZSBuYW1lcwo+Cj4gK3N0YXRpYyBpbnQg X19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9tYWluICpkKQo+ ICt7Cj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqc21tdV9kb21haW47Cj4K PiArc3RhdGljIHN0cnVjdCBpb21tdV9kb21haW4gKmFybV9zbW11X2dldF9kb21haW4oc3RydWN0 IGRvbWFpbiAqZCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArwqDCoMKgIHN0cnVjdCBpb21tdV9kb21h aW4gKmRvbWFpbjsKPiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluICp4ZW5fZG9t YWluOwo+Cj4gV2h5IHVzZSBzbW11X2RvbWFpbiBhdCBvbmUgcGxhY2UgYW5kIHhlbl9kb21haW4g YXQgYW5vdGhlciA/Cj4gSW50dWl0aXZlbHkgeGVuX2RvbWFpbiBzaG91bGQgbWVhbiBhIFZNLgo+ Cj4gRG9lc24ndCBpcyBsb29rIGNvbmZ1c2luZz8KPgo+IFBsZWFzZSB0YWtlIGEgbG9vaywgSSBo YXZlIHBvaW50ZWQgb3V0IHRoZSBvdGhlciBzcGVjaWZpYyBvbmVzIGJlbG93Lgo+PiBJIHRoaW5r IHdlIHNob3VsZCBzdGljayB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24uCj4+Cj4+Pgo+Pj4KPj4+ IE9uIDA1LzI0LzIwMTggMDY6MTYgQU0sIFNhbWVlciBHb2VsIHdyb3RlOgo+Pj4+IFRoaXMgZHJp dmVyIGZvbGxvd3MgYW4gYXBwcm9hY2ggc2ltaWxhciB0byBzbW11IGRyaXZlci4gVGhlIGludGVu dCBoZXJlCj4+Pj4gaXMgdG8gcmV1c2UgYXMgbXVjaCBMaW51eCBjb2RlIGFzIHBvc3NpYmxlLgo+ Pj4+IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJvZHVjZWQgdG8gYnJpZGdlIHRoZSBBUEkgY2Fs bHMuCj4+Pj4gLSBDYWxsZWQgTGludXggZnVuY3Rpb25zIGZyb20gdGhlIFhlbiBJT01NVSBmdW5j dGlvbiBjYWxscy4KPj4+PiAtIFhlbiBtb2RpZmljYXRpb25zIGFyZSBwcmVjZWRlZCBieSAvKlhl bjogY29tbWVudCAqLwo+Pj4+IC0geGVuL2xpbnV4X2NvbXBhdDogQWRkIGEgTGludXggY29tcGF0 IGhlYWRlcgo+Pj4+IMKgwqAgRm9yIHBvcnRpbmcgZmlsZXMgZGlyZWN0bHkgZnJvbSBMaW51eCBp dCBpcyB1c2VmdWwgdG8gaGF2ZSBhIGZ1bmN0aW9uIG1hcHBpbmcKPj4+PiDCoMKgIGRlZmluaXRp b25zIGZyb20gTGludXggdG8gWGVuLiBUaGlzIGZpbGUgYWRkcyBjb21tb24gQVBJIGZ1bmN0aW9u cyBhbmQKPj4+PiDCoMKgIG90aGVyIGRlZmluZXMgdGhhdCBhcmUgbmVlZGVkIGZvciBwb3J0aW5n IGFybSBTTU1VIGRyaXZlcnMuCj4+Pj4KPj4+PiBTaWduZWQtb2ZmLWJ5OiBTYW1lZXIgR29lbCA8 c2FtZWVyLmdvZWxAbGluYXJvLm9yZz4KPj4+PiAtLS0KPj4+PiDCoCB4ZW4vYXJjaC9hcm0vcDJt LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPj4+PiDC oCB4ZW4vZHJpdmVycy9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHzCoMKgIDIgKwo+Pj4+IMKgIHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnwqDC oCB8wqDCoCA4ICsKPj4+PiDCoCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGXC oCB8wqDCoCAxICsKPj4+PiDCoCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5j IHwgOTM0ICsrKysrKysrKysrKysrKysrKysrKysrKystCj4+Pj4gwqAgeGVuL2luY2x1ZGUveGVu L2xpbnV4X2NvbXBhdC5owqDCoMKgwqDCoMKgwqAgfMKgIDg0ICsrKwo+Pj4+IMKgIDYgZmlsZXMg Y2hhbmdlZCwgMTAwMSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKPj4+PiDCoCBjcmVh dGUgbW9kZSAxMDA2NDQgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4+PiDC oCBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oCj4+Pj4K Pj4+PiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3AybS5jIGIveGVuL2FyY2gvYXJtL3AybS5j Cj4+Pj4gaW5kZXggZDQzYzNhYTg5Ni4uMzhhYTlmMDBjMSAxMDA2NDQKPj4+PiAtLS0gYS94ZW4v YXJjaC9hcm0vcDJtLmMKPj4+PiArKysgYi94ZW4vYXJjaC9hcm0vcDJtLmMKPj4+PiBAQCAtMTQ1 NCw2ICsxNDU0LDcgQEAgZXJyOgo+Pj4+IMKgIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0 X3BhZ2luZ19vbmUodm9pZCAqZGF0YSkKPj4+PiDCoCB7Cj4+Pj4gwqDCoMKgwqDCoCB1bnNpZ25l ZCBsb25nIHZhbCA9ICh1bnNpZ25lZCBsb25nKWRhdGE7Cj4+Pj4gK8KgwqDCoCAvKiBTTU1VdjMg UzIgY2ZnIHZ0Y3IgcmV1c2VzIHRoZSBmb2xsb3dpbmcgdmFsdWUgKi8KPj4+PiDCoMKgwqDCoMKg IFdSSVRFX1NZU1JFRzMyKHZhbCwgVlRDUl9FTDIpOwo+Pj4+IMKgwqDCoMKgwqAgaXNiKCk7Cj4+ Pj4gwqAgfQo+Pj4+IGRpZmYgLS1naXQgYS94ZW4vZHJpdmVycy9LY29uZmlnIGIveGVuL2RyaXZl cnMvS2NvbmZpZwo+Pj4+IGluZGV4IGRiOTQzOTNmNDcuLjU5Y2EwMGY4NTAgMTAwNjQ0Cj4+Pj4g LS0tIGEveGVuL2RyaXZlcnMvS2NvbmZpZwo+Pj4+ICsrKyBiL3hlbi9kcml2ZXJzL0tjb25maWcK Pj4+PiBAQCAtMTUsNCArMTUsNiBAQCBzb3VyY2UgImRyaXZlcnMvdmlkZW8vS2NvbmZpZyIKPj4+ PiDCoCBjb25maWcgSEFTX1ZQQ0kKPj4+PiDCoMKgwqDCoMKgIGJvb2wKPj4+PiDCoCArc291cmNl ICJkcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnIgo+Pj4+ICsKPj4+PiDCoCBlbmRtZW51 Cj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnIGIv eGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+Pj4+IGluZGV4IDAwMDAwMDAwMDAuLmNkYTg5OWY2MDgKPj4+PiAtLS0gL2Rldi9udWxs Cj4+Pj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4+PiBAQCAt MCwwICsxLDggQEAKPj4+PiArCj4+Pj4gK2NvbmZpZyBBUk1fU01NVV92Mwo+Pj4+ICvCoMKgwqAg Ym9vbCAiQVJNIFNNTVV2MyBTdXBwb3J0Igo+Pj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBBUk1fNjQK Pj4+PiArwqDCoMKgIGhlbHAKPj4+PiArwqDCoMKgwqAgU3VwcG9ydCBmb3IgaW1wbGVtZW50YXRp b25zIG9mIHRoZSBBUk0gU3lzdGVtIE1NVSBhcmNoaXRlY3R1cmUKPj4+PiArwqDCoMKgwqAgdmVy c2lvbiAzLgo+Pj4+ICsKPj4+PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gv YXJtL01ha2VmaWxlIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4+Pj4g aW5kZXggZjRjZDI2ZTE1ZC4uZTE0NzMyYjU1YyAxMDA2NDQKPj4+PiAtLS0gYS94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKPj4+PiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhy b3VnaC9hcm0vTWFrZWZpbGUKPj4+PiBAQCAtMSwyICsxLDMgQEAKPj4+PiDCoCBvYmoteSArPSBp b21tdS5vCj4+Pj4gwqAgb2JqLXkgKz0gc21tdS5vCj4+Pj4gK29iai0kKENPTkZJR19BUk1fU01N VV92MykgKz0gc21tdS12My5vCj4+Pj4gZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJv dWdoL2FybS9zbW11LXYzLmMgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5j Cj4+Pj4gaW5kZXggZTY3YmE2YzQwZi4uZGY4MTYyNjc4NSAxMDA2NDQKPj4+PiAtLS0gYS94ZW4v ZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCj4+Pj4gKysrIGIveGVuL2RyaXZlcnMv cGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwo+Pj4+IEBAIC0xOCwyOCArMTgsNDE0IEBACj4+Pj4g wqDCoCAqIEF1dGhvcjogV2lsbCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+Cj4+Pj4gwqDC oCAqCj4+Pj4gwqDCoCAqIFRoaXMgZHJpdmVyIGlzIHBvd2VyZWQgYnkgYmFkIGNvZmZlZSBhbmQg Ym9tYmF5IG1peC4KPj4+PiArICoKPj4+PiArICoKPj4+PiArICogQmFzZWQgb24gTGludXggZHJp dmVycy9pb21tdS9hcm0tc21tdS12My5jCj4+Pj4gKyAqID0+IGNvbW1pdCA3YWE4NjE5YTY2YWVh NTJiMTQ1ZTA0Y2JhYjRmOGQ2YTRlNWYzZjNiCj4+Pj4gKyAqCj4+Pj4gKyAqIFhlbiBtb2RpZmlj YXRpb25zOgo+Pj4+ICsgKiBTYW1lZXIgR29lbCA8c2FtZWVyLmdvZWxAbGluYXJvLm9yZz4KPj4+ PiArICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPj4+PiArICoKPj4+PiDCoMKgICovCj4+Pj4gwqAgLSNpbmNsdWRlIDxsaW51 eC9hY3BpLmg+Cj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9hY3BpX2lvcnQuaD4KPj4+PiAtI2luY2x1 ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KPj4+ PiAtI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+Pj4+IC0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0 Lmg+Cj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgo+Pj4+IC0jaW5jbHVkZSA8bGludXgv aW9wb2xsLmg+Cj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4+PiAtI2luY2x1ZGUg PGxpbnV4L21zaS5oPgo+Pj4+IC0jaW5jbHVkZSA8bGludXgvb2YuaD4KPj4+PiAtI2luY2x1ZGUg PGxpbnV4L29mX2FkZHJlc3MuaD4KPj4+PiAtI2luY2x1ZGUgPGxpbnV4L29mX2lvbW11Lmg+Cj4+ Pj4gLSNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgo+Pj4+IC0jaW5jbHVkZSA8bGludXgv cGNpLmg+Cj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4+PiAtCj4+ Pj4gLSNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgo+Pj4+IC0KPj4+PiAtI2luY2x1ZGUgImlv LXBndGFibGUuaCIKPj4+PiArI2luY2x1ZGUgPHhlbi9hY3BpLmg+Cj4+Pj4gKyNpbmNsdWRlIDx4 ZW4vY29uZmlnLmg+Cj4+Pj4gKyNpbmNsdWRlIDx4ZW4vZGVsYXkuaD4KPj4+PiArI2luY2x1ZGUg PHhlbi9lcnJuby5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVuL2Vyci5oPgo+Pj4+ICsjaW5jbHVkZSA8 eGVuL2lycS5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVuL2xpYi5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVu L2xpbnV4X2NvbXBhdC5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVuL2xpc3QuaD4KPj4+PiArI2luY2x1 ZGUgPHhlbi9tbS5oPgo+Pj4+ICsjaW5jbHVkZSA8eGVuL3JidHJlZS5oPgo+Pj4+ICsjaW5jbHVk ZSA8eGVuL3NjaGVkLmg+Cj4+Pj4gKyNpbmNsdWRlIDx4ZW4vc2l6ZXMuaD4KPj4+PiArI2luY2x1 ZGUgPHhlbi92bWFwLmg+Cj4+Pj4gKyNpbmNsdWRlIDxhY3BpL2FjcGlfaW9ydC5oPgo+Pj4+ICsj aW5jbHVkZSA8YXNtL2F0b21pYy5oPgo+Pj4+ICsjaW5jbHVkZSA8YXNtL2RldmljZS5oPgo+Pj4+ ICsjaW5jbHVkZSA8YXNtL2lvLmg+Cj4+Pj4gKyNpbmNsdWRlIDxhc20vcGxhdGZvcm0uaD4KPj4+ PiArCj4+Pj4gKy8qIEFsaWFzIHRvIFhlbiBkZXZpY2UgdHJlZSBoZWxwZXJzICovCj4+Pj4gKyNk ZWZpbmUgZGV2aWNlX25vZGUgZHRfZGV2aWNlX25vZGUKPj4+PiArI2RlZmluZSBvZl9waGFuZGxl X2FyZ3MgZHRfcGhhbmRsZV9hcmdzCj4+Pj4gKyNkZWZpbmUgb2ZfZGV2aWNlX2lkIGR0X2Rldmlj ZV9tYXRjaAo+Pj4+ICsjZGVmaW5lIG9mX21hdGNoX25vZGUgZHRfbWF0Y2hfbm9kZQo+Pj4+ICsj ZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0KSAoIWR0X3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0KSkKPj4+PiArI2RlZmluZSBvZl9wcm9wZXJ0eV9yZWFk X2Jvb2wgZHRfcHJvcGVydHlfcmVhZF9ib29sCj4+Pj4gKyNkZWZpbmUgb2ZfcGFyc2VfcGhhbmRs ZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MKPj4+PiArCj4+Pj4gKy8qIFhl bjogSGVscGVycyB0byBnZXQgZGV2aWNlIE1NSU8gYW5kIElSUXMgKi8KPj4+PiArc3RydWN0IHJl c291cmNlIHsKPj4+PiArwqDCoMKgIHU2NCBhZGRyOwo+Pj4+ICvCoMKgwqAgdTY0IHNpemU7Cj4+ Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgdHlwZTsKPj4+PiArfTsKPj4+PiArCj4+Pj4gKyNkZWZp bmUgcmVzb3VyY2Vfc2l6ZShyZXMpICgocmVzKS0+c2l6ZSkKPj4+PiArCj4+Pj4gKyNkZWZpbmUg cGxhdGZvcm1fZGV2aWNlIGRldmljZQo+Pj4+ICsKPj4+PiArI2RlZmluZSBJT1JFU09VUkNFX01F TSAwCj4+Pj4gKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMQo+Pj4+ICsKPj4+PiArc3RhdGljIHN0 cnVjdCByZXNvdXJjZSAqcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHVuc2lnbmVkIGludCB0eXBlLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgbnVtKQo+Pj4+ICt7Cj4+ Pj4gK8KgwqDCoCAvKgo+Pj4+ICvCoMKgwqDCoCAqIFRoZSByZXNvdXJjZSBpcyBvbmx5IHVzZWQg YmV0d2VlbiAyIGNhbGxzIG9mIHBsYXRmb3JtX2dldF9yZXNvdXJjZS4KPj4+PiArwqDCoMKgwqAg KiBJdCdzIHF1aXRlIHVnbHkgYnV0IGl0J3MgYXZvaWQgdG8gYWRkIHRvbyBtdWNoIGNvZGUgaW4g dGhlIHBhcnQKPj4+PiArwqDCoMKgwqAgKiBpbXBvcnRlZCBmcm9tIExpbnV4Cj4+Pj4gK8KgwqDC oMKgICovCj4+Pj4gK8KgwqDCoCBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlczsKPj4+PiArwqDC oMKgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqaW9ydF9ub2RlOwo+Pj4+ICvCoMKgwqAgc3RydWN0 IGFjcGlfaW9ydF9zbW11X3YzICpub2RlX3NtbXVfZGF0YTsKPj4+PiArwqDCoMKgIGludCByZXQg PSAwOwo+Pj4+ICsKPj4+PiArwqDCoMKgIHJlcy50eXBlID0gdHlwZTsKPj4+PiArCj4+Pj4gK8Kg wqDCoCBzd2l0Y2ggKHR5cGUpIHsKPj4+PiArwqDCoMKgIGNhc2UgSU9SRVNPVVJDRV9NRU06Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwZGV2LT50eXBlID09IERFVl9BQ1BJKSB7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gMTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpb3J0X25vZGUgPSBwZGV2LT5hY3BpX25vZGU7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgbm9kZV9zbW11X2RhdGEgPQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKWlvcnRfbm9kZS0+bm9kZV9kYXRhOwo+Pj4+ICsK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkg ewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzLmFkZHIgPSBub2RlX3Nt bXVfZGF0YS0+YmFzZV9hZGRyZXNzOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmVzLnNpemUgPSBTWl8xMjhLOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gMDsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgIH0gZWxzZSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZHRfZGV2 aWNlX2dldF9hZGRyZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnJlcy5hZGRyLCAmcmVz LnNpemUpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gKChyZXQpID8gTlVMTCA6ICZyZXMpOwo+Pj4+ICsKPj4+PiArwqDCoMKgIGNhc2Ug SU9SRVNPVVJDRV9JUlE6Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIEFDUEkgY2FzZSBub3QgaW1w bGVtZW50ZWQgYXMgdGhlcmUgaXMgbm8gdXNlIGNhc2UgZm9yIGl0ICovCj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHJldCA9IHBsYXRmb3JtX2dldF9pcnEoZGV2X3RvX2R0KHBkZXYpLCBudW0pOwo+Pj4+ ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXMuYWRk ciA9IHJldDsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmVzLnNpemUgPSAxOwo+Pj4+ICsKPj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuICZyZXM7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgZGVmYXVsdDoK Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldiwgY29uc3QgY2hhciAqbmFtZSkKPj4+PiArewo+Pj4+ICvCoMKg wqAgY29uc3Qgc3RydWN0IGR0X3Byb3BlcnR5ICpkdHByb3A7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qg YWNwaV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKPj4+PiArwqDCoMKgIHN0cnVjdCBhY3BpX2lvcnRf c21tdV92MyAqbm9kZV9zbW11X2RhdGE7Cj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gMDsKPj4+PiAr Cj4+Pj4gK8KgwqDCoCBpZiAocGRldi0+dHlwZSA9PSBERVZfQUNQSSkgewo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBpb3J0X25vZGUgPSBwZGV2LT5hY3BpX25vZGU7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg IG5vZGVfc21tdV9kYXRhID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKWlvcnRfbm9kZS0+ bm9kZV9kYXRhOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGVfc21tdV9kYXRh ICE9IE5VTEwpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXN0cmNtcChuYW1l LCAiZXZlbnRxIikpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBu b2RlX3NtbXVfZGF0YS0+ZXZlbnRfZ3NpdjsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bHNlIGlmICghc3RyY21wKG5hbWUsICJwcmlxIikpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+cHJpX2dzaXY7Cj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAiY21kcS1zeW5jIikpCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+c3lu Y19nc2l2Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKCFzdHJjbXAobmFt ZSwgImdlcnJvciIpKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0g bm9kZV9zbW11X2RhdGEtPmdlcnJfZ3NpdjsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl bHNlCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gK8KgwqDCoCB9IGVsc2Ugewo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBkdHByb3AgPSBkdF9maW5kX3Byb3BlcnR5KGRldl90b19kdChwZGV2KSwgImludGVy cnVwdC1uYW1lcyIsIE5VTEwpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWR0cHJvcCkKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmICghZHRwcm9wLT52YWx1ZSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gLUVOT0RBVEE7Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAg cmV0dXJuIHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogWGVuOiBIZWxwZXJz IGZvciBETUEgYWxsb2NhdGlvbi4gSnVzdCB0aGUgZnVuY3Rpb24gbmFtZSBpcyByZXVzZWQgZm9y Cj4+Pj4gKyAqIHBvcnRpbmcgY29kZSB0aGVzZSBhbGxvY2F0aW9uIGFyZSBub3QgbWFuYWdlZCBh bGxvY2F0aW9ucwo+Pj4+ICsgKi8KPj4+PiArCj4+Pj4gK3N0YXRpYyB2b2lkICpkbWFtX2FsbG9j X2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQo+ Pj4gSSBiZWxpZXZlIHRoZSBmb3JtYXR0aW5nIG5lZWRzIHRvIGJlIGNoZWNrZWQuCj4+Pj4gK3sK Pj4+PiArwqDCoMKgIHZvaWQgKnZhZGRyOwo+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhbGln bm1lbnQgPSBzaXplOwo+Pj4+ICsKPj4+PiArwqDCoMKgIC8qCj4+Pj4gK8KgwqDCoMKgICogX3h6 YWxsb2MgcmVxdWlyZXMgdGhhdCB0aGUgKGFsaWduICYgKGFsaWduIC0xKSkgPSAwLiBNb3N0IG9m IHRoZQo+Pj4+ICvCoMKgwqDCoCAqIGFsbG9jYXRpb25zIGluIFNNTVUgY29kZSBzaG91bGQgc2Vu ZCB0aGUgcmlnaHQgdmFsdWUgZm9yIHNpemUuIEluCj4+Pj4gK8KgwqDCoMKgICogY2FzZSB0aGlz IGlzIG5vdCB0cnVlIHByaW50IGEgd2FybmluZyBhbmQgYWxpZ24gdG8gdGhlIHNpemUgb2YgYQo+ Pj4+ICvCoMKgwqDCoCAqICh2b2lkICopCj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4gK8KgwqDCoCBp ZiAoc2l6ZSAmIChzaXplIC0gMSkpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2 LCAiRml4aW5nIGFsaWdubWVudCBmb3IgdGhlIERNQSBidWZmZXJcbiIpOwo+Pj4+ICvCoMKgwqDC oMKgwqDCoCBhbGlnbm1lbnQgPSBzaXplb2Yodm9pZCAqKTsKPj4+PiArwqDCoMKgIH0KPj4+PiAr Cj4+Pj4gK8KgwqDCoCB2YWRkciA9IF94emFsbG9jKHNpemUsIGFsaWdubWVudCk7Cj4+Pj4gK8Kg wqDCoCBpZiAoIXZhZGRyKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiRE1B IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7 Cj4+Pj4gK8KgwqDCoCB9Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgKmRtYV9oYW5kbGUgPSB2aXJ0X3Rv X21hZGRyKHZhZGRyKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gdmFkZHI7Cj4+Pj4gK30K Pj4+PiArCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBkbWFtX2ZyZWVfY29oZXJlbnQoc3RydWN0 IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQo+Pj4gc2FtZQo+Pj4+ICt7Cj4+Pj4g K8KgwqDCoCB4ZnJlZSh2YWRkcik7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qIFhlbjogU3R1YiBv dXQgRE1BIGRvbWFpbiByZWxhdGVkIGZ1bmN0aW9ucyAqLwo+Pj4+ICsjZGVmaW5lIGlvbW11X2dl dF9kbWFfY29va2llKGRvbSkgMAo+Pj4+ICsjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2llKGRv bSkKPj4+PiArCj4+Pj4gKy8qIFhlbjogU3R1YiBvdXQgbW9kdWxlIHBhcmFtIHJlbGF0ZWQgZnVu Y3Rpb24gKi8KPj4+PiArI2RlZmluZSBtb2R1bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywgZCkKPj4+ PiArI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKGEsIGIpCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIGRt YV9zZXRfbWFza19hbmRfY29oZXJlbnQoZCwgYikgMAo+Pj4+ICsKPj4+PiArI2RlZmluZSBvZl9k bWFfaXNfY29oZXJlbnQobikgMAo+Pj4+ICsKPj4+PiArI2RlZmluZSBNT0RVTEVfREVWSUNFX1RB QkxFKHR5cGUsIG5hbWUpCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBfX2lvbWVtICpkZXZtX2lv cmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKPj4+PiAr ewo+Pj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpwdHI7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYg KCFyZXMgfHwgcmVzLT50eXBlICE9IElPUkVTT1VSQ0VfTUVNKSB7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZVxuIik7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiAr wqDCoMKgIHB0ciA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPmFkZHIsIHJlcy0+c2l6ZSk7Cj4+Pj4g K8KgwqDCoCBpZiAoIXB0cikgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiaW9yZW1hcCBmYWlsZWQgKGFkZHIgMHglIlBSSXg2 NCIgc2l6ZSAweCUiUFJJeDY0IilcbiIsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVz LT5hZGRyLCByZXMtPnNpemUpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigt RU5PTUVNKTsKPj4+PiArwqDCoMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gcHRyOwo+ Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICsvKiBYZW46IENvbXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21t dV9kb21haW5fZ2VvbWV0cnkuKi8KPj4+PiArc3RydWN0IGlvbW11X2RvbWFpbl9nZW9tZXRyeSB7 Cj4+Pj4gK8KgwqDCoCBkbWFfYWRkcl90IGFwZXJ0dXJlX3N0YXJ0OyAvKiBGaXJzdCBhZGRyZXNz IHRoYXQgY2FuIGJlIG1hcHBlZMKgwqDCoCAqLwo+Pj4+ICvCoMKgwqAgZG1hX2FkZHJfdCBhcGVy dHVyZV9lbmQ7wqDCoCAvKiBMYXN0IGFkZHJlc3MgdGhhdCBjYW4gYmUgbWFwcGVkwqDCoMKgwqAg Ki8KPj4+PiArwqDCoMKgIGJvb2wgZm9yY2VfYXBlcnR1cmU7wqDCoMKgwqDCoMKgIC8qIERNQSBv bmx5IGFsbG93ZWQgaW4gbWFwcGFibGUgcmFuZ2U/ICovCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICsK Pj4+PiArLyogWGVuOiBUeXBlIGRlZmluaXRpb25zIGZvciBpb21tdV9kb21haW4gKi8KPj4+PiAr I2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VEIDAKPj4+PiArI2RlZmluZSBJT01NVV9ET01B SU5fRE1BIDEKPj4+PiArI2RlZmluZSBJT01NVV9ET01BSU5fSURFTlRJVFkgMgo+Pj4+ICsKPj4+ PiArLyogWGVuOiBEdW1teSBpb21tdV9kb21haW4gKi8KPj4+PiArc3RydWN0IGlvbW11X2RvbWFp biB7Cj4+Pj4gK8KgwqDCoCAvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBp b21tdV9kb21haW4gKi8KPj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW7CoMKgwqDC oMKgwqDCoCAqcHJpdjsKPj4+PiArwqDCoMKgIHVuc2lnbmVkIGludCB0eXBlOwo+Pj4+ICsKPj4+ PiArwqDCoMKgIC8qIER1bW15IGNvbXBhdGliaWxpdHkgZGVmaW5lcyAqLwo+Pj4+ICvCoMKgwqAg dW5zaWduZWQgbG9uZyBwZ3NpemVfYml0bWFwOwo+Pj4+ICvCoMKgwqAgc3RydWN0IGlvbW11X2Rv bWFpbl9nZW9tZXRyeSBnZW9tZXRyeTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBhdG9taWNfdCByZWY7 Cj4+Pj4gK8KgwqDCoCAvKgo+Pj4+ICvCoMKgwqDCoCAqIFVzZWQgdG8gbGluayBpb21tdV9kb21h aW4gY29udGV4dHMgZm9yIGEgc2FtZSBkb21haW4uCj4+Pj4gK8KgwqDCoMKgICogVGhlcmUgaXMg YXQgbGVhc3Qgb25lIHBlci1TTU1VIHRvIHVzZWQgYnkgdGhlIGRvbWFpbi4KPj4+PiArwqDCoMKg wqAgKi8KPj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKgwqDCoMKgwqDCoCBsaXN0Owo+ Pj4+ICt9Owo+Pj4+ICsKPj4+PiArLyogWGVuOiBEZXNjcmliZXMgaW5mb3JtYXRpb24gcmVxdWly ZWQgZm9yIGEgWGVuIGRvbWFpbiAqLwo+Pj4+ICtzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiB7 Cj4+Pj4gK8KgwqDCoCBzcGlubG9ja190wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2NrOwo+Pj4+ ICvCoMKgwqAgLyogTGlzdCBvZiBpb21tdSBkb21haW5zIGFzc29jaWF0ZWQgdG8gdGhpcyBkb21h aW4gKi8KPj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKgwqDCoMKgwqDCoCBjb250ZXh0 czsKPj4+PiArfTsKPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIFhlbjogSW5mb3JtYXRpb24gYWJv dXQgZWFjaCBkZXZpY2Ugc3RvcmVkIGluIGRldi0+YXJjaGRhdGEuaW9tbXUKPj4+PiArICoKPj4+ PiArICogVGhlIGRldi0+YXJjaGRhdGEuaW9tbXUgc3RvcmVzIHRoZSBpb21tdV9kb21haW4gKHJ1 bnRpbWUgY29uZmlndXJhdGlvbiBvZgo+Pj4+ICsgKiB0aGUgU01NVSkuCj4+Pj4gKyAqLwo+Pj4+ ICtzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVf ZG9tYWluICpkb21haW47Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4gQXMgdGhpcyBpcyBhIHhlbiBzcGVj aWZpYyBjb2RlLCBjYW4gdGhlIHZhcmlhYmxlIG5hbWVzIGJlIHVzZWQgYXBwcm9wcmlhdGVseS4K Pj4+IFJlcGVhdGluZyBteSBjb21tZW50wqAgZnJvbSBlYXJsaWVyIHZlcnNpb24uCj4+PiBhIGRv bWFpbiBpc8KgIHVzdWFsbHkgYSBWTSBpbiBYZW4uIFNvIGl0IGlzIGEgYml0IGNvbmZ1c2luZyB0 byB1c2UgZG9tYWluIGZvciBpb21tdV9kb21haW4uClRoZSBzdHJ1Y3QgaXMgZmluZSBidXQgeW91 IGhhdmUgYW4gaXNzdWUgd2l0aCB0aGUgdmFyIG5hbWUgcmlnaHQ/Cgo+Pj4+ICsvKgo+Pj4+ICsg KiBYZW46IGlvX3BndGFibGUgY29tcGF0aWJpbGl0eSBkZWZpbmVzLgo+Pj4+ICsgKiBNb3N0IG9m IHRoZXNlIGFyZSB0byBwb3J0IGluIHRoZSBTMSB0cmFuc2xhdGlvbiBjb2RlIGFzIGlzLgo+Pj4+ ICsgKi8KPj4+PiArc3RydWN0IGlvX3BndGFibGVfb3BzIHsKPj4+PiArfTsKPj4+PiArCj4+Pj4g K3N0cnVjdCBpb21tdV9nYXRoZXJfb3BzIHsKPj4+PiArwqDCoMKgIHZvaWQgKCp0bGJfZmx1c2hf YWxsKSh2b2lkICpjb29raWUpOwo+Pj4+ICvCoMKgwqAgdm9pZCAoKnRsYl9hZGRfZmx1c2gpKHVu c2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90IHNpemUsIHNpemVfdCBncmFudWxlLAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgbGVhZiwgdm9pZCAqY29va2llKTsK Pj4+PiArwqDCoMKgIHZvaWQgKCp0bGJfc3luYykodm9pZCAqY29va2llKTsKPj4+PiArfTsKPj4+ PiArCj4+Pj4gK3N0cnVjdCBpb19wZ3RhYmxlX2NmZyB7Cj4+Pj4gK8KgwqDCoCAvKgo+Pj4+ICvC oMKgwqDCoCAqIElPX1BHVEFCTEVfUVVJUktfQVJNX05TOiAoQVJNIGZvcm1hdHMpIFNldCBOUyBh bmQgTlNUQUJMRSBiaXRzIGluCj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgc3RhZ2UgMSBQVEVzLCBm b3IgaGFyZHdhcmUgd2hpY2ggaW5zaXN0cyBvbiB2YWxpZGF0aW5nIHRoZW0KPj4+PiArwqDCoMKg wqAgKsKgwqDCoCBldmVuIGluwqDCoMKgIG5vbi1zZWN1cmUgc3RhdGUgd2hlcmUgdGhleSBzaG91 bGQgbm9ybWFsbHkgYmUgaWdub3JlZC4KPj4+PiArwqDCoMKgwqAgKgo+Pj4+ICvCoMKgwqDCoCAq IElPX1BHVEFCTEVfUVVJUktfTk9fUEVSTVM6IElnbm9yZSB0aGUgSU9NTVVfUkVBRCwgSU9NTVVf V1JJVEUgYW5kCj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgSU9NTVVfTk9FWEVDIGZsYWdzIGFuZCBt YXAgZXZlcnl0aGluZyB3aXRoIGZ1bGwgYWNjZXNzLCBmb3IKPj4+PiArwqDCoMKgwqAgKsKgwqDC oCBoYXJkd2FyZSB3aGljaCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIHBlcm1pc3Npb25zIG9mIGEg Z2l2ZW4KPj4+PiArwqDCoMKgwqAgKsKgwqDCoCBmb3JtYXQsIGFuZC9vciByZXF1aXJlcyBzb21l IGZvcm1hdC1zcGVjaWZpYyBkZWZhdWx0IHZhbHVlLgo+Pj4+ICvCoMKgwqDCoCAqCj4+Pj4gK8Kg wqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19UTEJJX09OX01BUDogSWYgdGhlIGZvcm1hdCBmb3Ji aWRzIGNhY2hpbmcgaW52YWxpZAo+Pj4+ICvCoMKgwqDCoCAqwqDCoMKgICh1bm1hcHBlZCkgZW50 cmllcyBidXQgdGhlIGhhcmR3YXJlIG1pZ2h0IGRvIHNvIGFueXdheSwgcGVyZm9ybQo+Pj4+ICvC oMKgwqDCoCAqwqDCoMKgIFRMQiBtYWludGVuYW5jZSB3aGVuIG1hcHBpbmcgYXMgd2VsbCBhcyB3 aGVuIHVubWFwcGluZy4KPj4+PiArwqDCoMKgwqAgKgo+Pj4+ICvCoMKgwqDCoCAqIElPX1BHVEFC TEVfUVVJUktfQVJNX01US180R0I6IChBUk0gdjdzIGZvcm1hdCkgU2V0IGJpdCA5IGluIGFsbAo+ Pj4+ICvCoMKgwqDCoCAqwqDCoMKgIFBURXMsIGZvciBNZWRpYXRlayBJT01NVXMgd2hpY2ggdHJl YXQgaXQgYXMgYSAzM3JkIGFkZHJlc3MgYml0Cj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgd2hlbiB0 aGUgU29DIGlzIGluICI0R0IgbW9kZSIgYW5kIHRoZXkgY2FuIG9ubHkgYWNjZXNzIHRoZSBoaWdo Cj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgcmVtYXAgb2YgRFJBTSAoMHgxXzAwMDAwMDAwIHRvIDB4 MV9mZmZmZmZmZikuCj4+Pj4gK8KgwqDCoMKgICoKPj4+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxF X1FVSVJLX05PX0RNQTogR3VhcmFudGVlcyB0aGF0IHRoZSB0YWJsZXMgd2lsbCBvbmx5IGV2ZXIK Pj4+PiArwqDCoMKgwqAgKsKgwqDCoCBiZSBhY2Nlc3NlZCBieSBhIGZ1bGx5IGNhY2hlLWNvaGVy ZW50IElPTU1VIG9yIENQVSAoZS5nLiBmb3IgYQo+Pj4+ICvCoMKgwqDCoCAqwqDCoMKgIHNvZnR3 YXJlLWVtdWxhdGVkIElPTU1VKSwgc3VjaCB0aGF0IHBhZ2V0YWJsZSB1cGRhdGVzIG5lZWQgbm90 Cj4+Pj4gK8KgwqDCoMKgICrCoMKgwqAgYmUgdHJlYXRlZCBhcyBleHBsaWNpdCBETUEgZGF0YS4K Pj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19B Uk1fTlPCoMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdUQUJM RV9RVUlSS19OT19QRVJNU8KgwqDCoCBCSVQoMSkKPj4+PiArwqDCoMKgICNkZWZpbmUgSU9fUEdU QUJMRV9RVUlSS19UTEJJX09OX01BUMKgwqDCoCBCSVQoMikKPj4+PiArwqDCoMKgICNkZWZpbmUg SU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLXzRHQsKgwqDCoCBCSVQoMykKPj4+PiArwqDCoMKgICNk ZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19ETUHCoMKgwqDCoMKgwqDCoCBCSVQoNCkKPj4+PiAr wqDCoMKgIHVuc2lnbmVkIGxvbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHF1aXJrczsKPj4+PiAr wqDCoMKgIHVuc2lnbmVkIGxvbmfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBnc2l6ZV9iaXRtYXA7 Cj4+Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlhczsKPj4+ PiArwqDCoMKgIHVuc2lnbmVkIGludMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgb2FzOwo+Pj4+ICvC oMKgwqAgY29uc3Qgc3RydWN0IGlvbW11X2dhdGhlcl9vcHPCoMKgwqAgKnRsYjsKPj4+PiArwqDC oMKgIHN0cnVjdCBkZXZpY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICppb21tdV9kZXY7Cj4+Pj4g Kwo+Pj4+ICvCoMKgwqAgLyogTG93LWxldmVsIGRhdGEgc3BlY2lmaWMgdG8gdGhlIHRhYmxlIGZv cm1hdCAqLwo+Pj4+ICvCoMKgwqAgdW5pb24gewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDCoCB0dGJyWzJdOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDCoCB0Y3I7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTY0wqDCoMKgIG1haXJbMl07Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX2xw YWVfczFfY2ZnOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB1NjTCoMKgwqAgdnR0YnI7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTY0wqDCoMKgIHZ0Y3I7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX2xwYWVf czJfY2ZnOwo+Pj4+ICsKPj4+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1MzLCoMKgwqAgdHRiclsyXTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB1MzLCoMKgwqAgdGNyOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKg wqDCoCBubXJyOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCBwcnJyOwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCB9IGFybV92N3NfY2ZnOwo+Pj4+ICvCoMKgwqAgfTsKPj4+PiAr fTsKPj4+PiArCj4+Pj4gK2VudW0gaW9fcGd0YWJsZV9mbXQgewo+Pj4+ICvCoMKgwqAgQVJNXzMy X0xQQUVfUzEsCj4+Pj4gK8KgwqDCoCBBUk1fMzJfTFBBRV9TMiwKPj4+PiArwqDCoMKgIEFSTV82 NF9MUEFFX1MxLAo+Pj4+ICvCoMKgwqAgQVJNXzY0X0xQQUVfUzIsCj4+Pj4gK8KgwqDCoCBBUk1f VjdTLAo+Pj4+ICvCoMKgwqAgSU9fUEdUQUJMRV9OVU1fRk1UUywKPj4+PiArfTsKPj4+PiArCj4+ Pj4gKy8qCj4+Pj4gKyAqIFhlbjogVGhlIHBndGFibGVfb3BzIGFyZSB1c2VkIGJ5IHRoZSBTMSB0 cmFuc2xhdGlvbnMsIHNvIHJldHVybiB0aGUgZHVtbXkKPj4+PiArICogYWRkcmVzcy4KPj4+PiAr ICovCj4+Pj4gKyNkZWZpbmUgYWxsb2NfaW9fcGd0YWJsZV9vcHMoZiwgYywgbykgKChzdHJ1Y3Qg aW9fcGd0YWJsZV9vcHMgKikweDEpCj4+Pj4gKyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhv KQo+Pj4+ICsKPj4+PiArLyogWGVuOiBEZWZpbmUgd3JhcHBlciBmb3IgcmVxdWVzdGluZyBJUlFz ICovCj4+Pj4gKyNkZWZpbmUgSVJRRl9PTkVTSE9UIDAKPj4+PiArCj4+Pj4gK3R5cGVkZWYgdm9p ZCAoKmlycV9oYW5kbGVyX3QpKGludCwgdm9pZCAqLCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqKTsK Pj4+PiArCj4+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGRldm1fcmVxdWVzdF9pcnEoc3RydWN0IGRl dmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB1bnNpZ25lZCBsb25nIGlycWZs YWdzLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgY2hh ciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCAvKgo+Pj4+ICvC oMKgwqDCoCAqIFNNTVV2MyBpbXBsZW1lbnRhdGlvbiBjYW4gc3VwcG9ydCB3aXJlZCBpbnRlcnJ1 cHQgb3V0cHV0cyB0aGF0IGFyZQo+Pj4+ICvCoMKgwqDCoCAqIGVkZ2UtdHJpZ2dlcmVkLiBTZXQg dGhlIGlycSB0eXBlIGFzIHBlciB0aGUgc3BlYy4KPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDC oMKgIGlycV9zZXRfdHlwZShpcnEsIElSUV9UWVBFX0VER0VfQk9USCk7Cj4+Pj4gK8KgwqDCoCBy ZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmbGFncywgaGFuZGxlciwgZGV2bmFtZSwgZGV2X2lk KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArLyoKPj4+PiArICogWGVuIGRvZXMgbm90IGhhdmUgYSBj b25jZXB0IG9mIHRocmVhZGVkIGlycSwgYnV0IHdlIGNhbiB1c2UgdGFza2xldHMgdG8KPj4+PiAr ICogYWNoaWV2ZSB0aGUgZGVzaXJlZCBmdW5jdGlvbmFsaXR5IGFzIG5lZWRlZC4KPj4+PiArICov Cj4+Pj4gK2ludCBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwg dW5zaWduZWQgaW50IGlycSwgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlycV9oYW5kbGVyX3QgdGhyZWFkX2ZuLCB1bnNpZ25l ZCBsb25nIGlycWZsYWdzLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKPj4+PiArewo+Pj4+ICvCoMKgwqAg cmV0dXJuIGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIHRocmVhZF9mbiwgaXJxZmxhZ3MsIGRl dm5hbWUsIGRldl9pZCk7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gKy8qIFhlbjogVGhlIG11dGV4IGlz IHVzZWQgb25seSBkdXJpbmcgaW5pdGlhbGl6YXRpb24gc28gdGhlIHR5cGVjYXN0IGlzIHNhZmUg Ki8KPj4+PiArI2RlZmluZSBtdXRleCBzcGlubG9jawo+Pj4+ICsjZGVmaW5lIG11dGV4X2luaXQg c3Bpbl9sb2NrX2luaXQKPj4+PiArI2RlZmluZSBtdXRleF9sb2NrIHNwaW5fbG9jawo+Pj4+ICsj ZGVmaW5lIG11dGV4X3VubG9jayBzcGluX3VubG9jawo+Pj4+ICsKPj4+PiArI2RlZmluZSByZWFk eF9wb2xsX3RpbWVvdXQob3AsIGFkZHIsIHZhbCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMp IFwKPj4+PiArKHsgXAo+Pj4+ICvCoMKgwqAgc190aW1lX3QgZGVhZGxpbmUgPSBOT1coKSArIE1J Q1JPU0VDUyh0aW1lb3V0X3VzKTsgXAo+Pj4+ICvCoMKgwqAgZm9yICg7OykgeyBcCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgICh2YWwpID0gb3AoYWRkcik7IFwKPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KGNvbmQpIFwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsgXAo+Pj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAoTk9XKCkgPiBkZWFkbGluZSkgeyBcCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKHZhbCkgPSBvcChhZGRyKTsgXAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJyZWFrOyBcCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gXAo+Pj4+ICvCoMKgwqAgdWRlbGF5KHNs ZWVwX3VzKTsgXAo+Pj4+ICvCoMKgwqAgfSBcCj4+Pj4gK8KgwqDCoCAoY29uZCkgPyAwIDogLUVU SU1FRE9VVDsgXAo+Pj4+ICt9KQo+Pj4+ICsKPj4+PiArI2RlZmluZSByZWFkbF9yZWxheGVkX3Bv bGxfdGltZW91dChhZGRyLCB2YWwsIGNvbmQsIGRlbGF5X3VzLCB0aW1lb3V0X3VzKSBcCj4+Pj4g K8KgwqDCoCByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGxfcmVsYXhlZCwgYWRkciwgdmFsLCBjb25k LCBkZWxheV91cywgdGltZW91dF91cykKPj4+PiArCj4+Pj4gKyNkZWZpbmUgVkFfQklUUyAwIC8q IE9ubHkgbmVlZGVkIGZvciBTMSB0cmFuc2xhdGlvbnMgKi8KPj4+PiDCoCDCoCAvKiBNTUlPIHJl Z2lzdGVycyAqLwo+Pj4+IMKgICNkZWZpbmUgQVJNX1NNTVVfSURSMMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgMHgwCj4+Pj4gQEAgLTQzMyw2ICs4MTksNyBAQCBlbnVtIHByaV9yZXNwIHsKPj4+PiDC oMKgwqDCoMKgIFBSSV9SRVNQX1NVQ0MsCj4+Pj4gwqAgfTsKPj4+PiDCoCArI2lmIDAgLyogWGVu OiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAqLwo+Pj4+IMKgIGVudW0gYXJtX3Nt bXVfbXNpX2luZGV4IHsKPj4+PiDCoMKgwqDCoMKgIEVWVFFfTVNJX0lOREVYLAo+Pj4+IMKgwqDC oMKgwqAgR0VSUk9SX01TSV9JTkRFWCwKPj4+PiBAQCAtNDU3LDYgKzg0NCw3IEBAIHN0YXRpYyBw aHlzX2FkZHJfdCBhcm1fc21tdV9tc2lfY2ZnW0FSTV9TTU1VX01BWF9NU0lTXVszXSA9IHsKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgQVJNX1NNTVVfUFJJUV9JUlFfQ0ZHMiwKPj4+PiDCoMKgwqDC oMKgIH0sCj4+Pj4gwqAgfTsKPj4+PiArI2VuZGlmCj4+Pj4gwqAgwqAgc3RydWN0IGFybV9zbW11 X2NtZHFfZW50IHsKPj4+PiDCoMKgwqDCoMKgIC8qIENvbW1vbiBmaWVsZHMgKi8KPj4+PiBAQCAt NTYxLDYgKzk0OSw4IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewo+Pj4+IMKgwqDCoMKgwqAg dTE2wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHZtaWQ7Cj4+Pj4gwqDCoMKgwqDCoCB1 NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnR0YnI7Cj4+Pj4gwqDCoMKgwqDCoCB1 NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdnRjcjsKPj4+PiArwqDCoMKgIC8qIFhl bjogRG9tYWluIGFzc29jaWF0ZWQgdG8gdGhpcyBjb25maWd1cmF0aW9uICovCj4+Pj4gK8KgwqDC oCBzdHJ1Y3QgZG9tYWluwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZG9tYWluOwo+Pj4+IMKgIH07 Cj4+Pj4gwqAgwqAgc3RydWN0IGFybV9zbW11X3N0cnRhYl9lbnQgewo+Pj4+IEBAIC02MzUsOSAr MTAyNSwyNSBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIHsKPj4+PiDCoMKgwqDCoMKgIHN0cnVj dCBhcm1fc21tdV9zdHJ0YWJfY2ZnwqDCoMKgIHN0cnRhYl9jZmc7Cj4+Pj4gwqAgwqDCoMKgwqDC oCAvKiBJT01NVSBjb3JlIGNvZGUgaGFuZGxlICovCj4+Pj4gKyNpZiAwIC8qWGVuOiBHZW5lcmlj IGlvbW11X2RldmljZSByZWYgbm90IG5lZWRlZCBoZXJlICovCj4+Pj4gwqDCoMKgwqDCoCBzdHJ1 Y3QgaW9tbXVfZGV2aWNlwqDCoMKgwqDCoMKgwqAgaW9tbXU7Cj4+Pj4gKyNlbmRpZgo+Pj4gSXMg aXQgY2xlYW4gdG8gcHV0ICNpZiAwLCBjYW4gdGhpcyBsaW5lIGJlIGRlbGV0ZWQgb3IgdXNlZCB3 aXRoIGEgcHJvcGVyIG1hY3JvCk1hbmlzaCB0aGlzIGlzIGEgdmFyIG5hbWUgZnJvbSBvcmlnaW5h bCBzdHJ1Y3QgZnJvbSBMaW51eC4gSSBoYXZlIGp1c3QgZm9sbG93ZWQgdGhlIHByaW9yIHN0YW5k YXJkIG9mIGFkZGluZyAjaWYgMC4KPj4+PiArwqDCoMKgIC8qIFhlbjogTmVlZCB0byBrZWVwIGEg bGlzdCBvZiBTTU1VIGRldmljZXMgKi8KPj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWTCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2aWNlczsKPj4+PiArwqDCoMKgIC8qIFhlbjog VGFza2xldHMgZm9yIGhhbmRsaW5nIGV2dHMvZmF1bHRzIGFuZCBwY2kgcGFnZSByZXF1ZXN0IElS UXMqLwo+Pj4+ICvCoMKgwqAgc3RydWN0IHRhc2tsZXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV2 dHFfdGFza2xldDsKPj4+PiArwqDCoMKgIHN0cnVjdCB0YXNrbGV0wqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwcmlxX3Rhc2tsZXQ7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgdGFza2xldMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY29tYmluZWRfaXJxX3Rhc2tsZXQ7Cj4+Pj4gwqAgfTsKPj4+PiDCoCArLyog WGVuOiBLZWVwIGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlciAq Lwo+Pj4+ICtzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFybV9zbW11X2RldmljZXNfbG9jayk7Cj4+ Pj4gK3N0YXRpYyBMSVNUX0hFQUQoYXJtX3NtbXVfZGV2aWNlcyk7Cj4+Pj4gKy8qIFhlbjogSGVs cGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwo+Pj4+ICtzdGF0aWMKPj4+ PiArc3RydWN0IGFybV9zbW11X2RldmljZSAqYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3Qg Zndub2RlX2hhbmRsZSAqZndub2RlKTsKPj4+PiArCj4+Pj4gKwo+Pj4+IMKgIC8qIFNNTVUgcHJp dmF0ZSBkYXRhIGZvciBlYWNoIG1hc3RlciAqLwo+Pj4+IMKgIHN0cnVjdCBhcm1fc21tdV9tYXN0 ZXJfZGF0YSB7Cj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlwqDCoMKgwqDC oMKgwqAgKnNtbXU7Cj4+Pj4gQEAgLTEyMzIsNyArMTYzOCw3IEBAIHN0YXRpYyB2b2lkIGFybV9z bW11X2hhbmRsZV9wcHIoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTY0ICpldnQpCj4+ Pj4gwqAgwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsICJ1bmV4cGVjdGVkIFBSSSByZXF1 ZXN0IHJlY2VpdmVkOlxuIik7Cj4+Pj4gwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsCj4+ Pj4gLcKgwqDCoMKgwqDCoMKgwqAgIlx0c2lkIDB4JTA4eC4weCUwNXg6IFsldSVzXSAlc3ByaXZp bGVnZWQgJXMlcyVzIGFjY2VzcyBhdCBpb3ZhIDB4JTAxNmxseFxuIiwKPj4+PiArwqDCoMKgwqDC oMKgwqDCoCAiXHRzaWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMg YWNjZXNzIGF0IGlvdmEgJSMiIFBSSXg2NCAiXG4iLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNpZCwgc3NpZCwgZ3JwaWQsIGxhc3QgPyAiTCIgOiAiIiwKPj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoCBldnRbMF0gJiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAidW4iLAo+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgIGV2dFswXSAmIFBSSVFfMF9QRVJNX1JFQUQgPyAiUiIgOiAiIiwKPj4+PiBA QCAtMTM0MiwxMCArMTc0OCwyMCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgYXJtX3NtbXVfY29tYmlu ZWRfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXYpCj4+Pj4gwqDCoMKgwqDCoCByZXR1cm4g SVJRX0hBTkRMRUQ7Cj4+Pj4gwqAgfQo+Pj4+IMKgICsvKiBYZW46IEZvcndhcmQgZGVmaW5lIGZv ciBjb21iaW5lZF9pcnEgdGFza2xldCAqLwo+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9jb21i aW5lZF9pcnFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldik7Cj4+Pj4gKwo+Pj4+IMKgIHN0YXRp YyBpcnFyZXR1cm5fdCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lk ICpkZXYpCj4+Pj4gwqAgewo+Pj4+ICvCoMKgwqAgLyogWGVuOiBOZWVkIGFuIHNtbXUgcmVmZXJl bmNlIHRvIHNjaGVkdWxlIHRoZSB0YXNrbGV0ICovCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3Nt bXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKilkZXY7Cj4+Pj4gKwo+ Pj4+IMKgwqDCoMKgwqAgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXIoaXJxLCBkZXYpOwo+Pj4+IMKg wqDCoMKgwqAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIoaXJxLCBkZXYpOwo+Pj4+ICsKPj4+ PiArwqDCoMKgIC8qWGVuOiBObyB0aHJlYWRlZCBpcnEuIFNvLCBzY2hlZHVsZSB0aGUgcmlnaHQg dGFza2xldCovCj4+Pj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+Y29tYmluZWRf aXJxX3Rhc2tsZXQpKTsKPj4+PiArCj4+Pj4gwqDCoMKgwqDCoCByZXR1cm4gSVJRX1dBS0VfVEhS RUFEOwo+Pj4+IMKgIH0KPj4+PiDCoCBAQCAtMTM1OCw2ICsxNzc0LDY5IEBAIHN0YXRpYyB2b2lk IF9fYXJtX3NtbXVfdGxiX3N5bmMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+PiDC oMKgwqDCoMKgIGFybV9zbW11X2NtZHFfaXNzdWVfY21kKHNtbXUsICZjbWQpOwo+Pj4+IMKgIH0K Pj4+PiDCoCArLyoKPj4+PiArICogWGVuOiBEZWZpbmUgdGhlIElSUSBoYW5kbGVycyBhbmQgdGFz a2xldHMgZm9yIHhlbi4gVGhlIGxpbnV4IGZ1bmN0aW9ucwo+Pj4+ICsgKiB3b3VsZCBiZSBtb2Rp ZmllZCB0byB1c2UgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBmb2xsb3dpbmcgY29kZS4K Pj4+PiArICovCj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRxX3Rhc2tsZXQo dW5zaWduZWQgbG9uZyBkZXYpCj4+Pj4gK3sKPj4+PiArwqDCoMKgIC8qIFRoZSBJUlEgbnVtYmVy IGlzIG5vdCByZWxldmVudCBmb3IgdGhlIGV2dHEgdGhyZWFkIHByb2Nlc3NpbmcgKi8KPj4+PiAr wqDCoMKgIGFybV9zbW11X2V2dHFfdGhyZWFkKDAsICh2b2lkICopZGV2KTsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfcHJpcV90YXNrbGV0KHVuc2lnbmVkIGxvbmcg ZGV2KQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCAvKiBUaGUgSVJRIG51bWJlciBpcyBub3QgcmVsZXZl bnQgZm9yIHRoZSBwcmlxIHRocmVhZCBwcm9jZXNzaW5nICovCj4+Pj4gK8KgwqDCoCBhcm1fc21t dV9wcmlxX3RocmVhZCgwLCAodm9pZCAqKWRldik7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyB2b2lkIGFybV9zbW11X2NvbWJpbmVkX2lycV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KQo+ Pj4+ICt7Cj4+Pj4gK8KgwqDCoCAvKiBUaGUgSVJRIG51bWJlciBpcyBub3QgcmVsZXZlbnQgZm9y IHRoZSBjb21iaW5lZCBpcnEgaGFuZGxlci4qLwo+Pj4+ICvCoMKgwqAgYXJtX3NtbXVfY29tYmlu ZWRfaXJxX3RocmVhZCgwLCAodm9pZCAqKWRldik7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyB2b2lkIGFybV9zbW11X2V2dHFfdGhyZWFkX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBjcHVf dXNlcl9yZWdzICpyZWdzKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKilkZXY7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgdGFza2xldF9zY2hlZHVsZSgmKHNtbXUtPmV2dHFfdGFza2xldCkpOwo+Pj4+ICt9Cj4+ Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9wcmlxX3RocmVhZF94ZW4oaW50IGlycSwg dm9pZCAqZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3Ry dWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IChzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICopZGV2 Owo+Pj4+ICsKPj4+PiArwqDCoMKgIHRhc2tsZXRfc2NoZWR1bGUoJihzbW11LT5wcmlxX3Rhc2ts ZXQpKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY21kcV9zeW5j X2hhbmRsZXJfeGVuKGludCBpcnEsIHZvaWQgKmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+ Pj4gK3sKPj4+PiArwqDCoMKgIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVyKGlycSwgZGV2KTsK Pj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXJf eGVuKGludCBpcnEsIHZvaWQgKmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+Pj4gK3sKPj4+ PiArwqDCoMKgIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyKGlycSwgZGV2KTsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY29tYmluZWRfaXJxX2hhbmRsZXJfeGVuKGlu dCBpcnEsIHZvaWQgKmRldiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCj4+Pj4gK3sKPj4+PiArwqDC oMKgIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyKGlycSwgZGV2KTsKPj4+PiArfQo+Pj4+ ICsKPj4+PiArI2RlZmluZSBhcm1fc21tdV9ldnRxX3RocmVhZCBhcm1fc21tdV9ldnRxX3RocmVh ZF94ZW4KPj4+PiArI2RlZmluZSBhcm1fc21tdV9wcmlxX3RocmVhZCBhcm1fc21tdV9wcmlxX3Ro cmVhZF94ZW4KPj4+PiArI2RlZmluZSBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlciBhcm1fc21t dV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4KPj4+PiArI2RlZmluZSBhcm1fc21tdV9nZXJyb3JfaGFu ZGxlciBhcm1fc21tdV9nZXJyb3JfaGFuZGxlcl94ZW4KPj4+PiArI2RlZmluZSBhcm1fc21tdV9j b21iaW5lZF9pcnFfaGFuZGxlciBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcl94ZW4KPj4+ PiArCj4+Pj4gwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfdGxiX3N5bmModm9pZCAqY29va2llKQo+ Pj4+IMKgIHsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9t YWluID0gY29va2llOwo+Pj4+IEBAIC0xNDE1LDYgKzE4OTQsNyBAQCBzdGF0aWMgY29uc3Qgc3Ry dWN0IGlvbW11X2dhdGhlcl9vcHMgYXJtX3NtbXVfZ2F0aGVyX29wcyA9IHsKPj4+PiDCoMKgwqDC oMKgIC50bGJfc3luY8KgwqDCoCA9IGFybV9zbW11X3RsYl9zeW5jLAo+Pj4+IMKgIH07Cj4+Pj4g wqAgKyNpZiAwIC8qWGVuOiBVbnVzZWQgZnVuY3Rpb25hbGl0eSAqLwo+Pj4+IMKgIC8qIElPTU1V IEFQSSAqLwo+Pj4+IMKgIHN0YXRpYyBib29sIGFybV9zbW11X2NhcGFibGUoZW51bSBpb21tdV9j YXAgY2FwKQo+Pj4+IMKgIHsKPj4+PiBAQCAtMTQyNyw2ICsxOTA3LDcgQEAgc3RhdGljIGJvb2wg YXJtX3NtbXVfY2FwYWJsZShlbnVtIGlvbW11X2NhcCBjYXApCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBmYWxzZTsKPj4+PiDCoMKgwqDCoMKgIH0KPj4+PiDCoCB9Cj4+Pj4gKyNlbmRp Zgo+Pj4+IMKgIMKgIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfZG9tYWluICphcm1fc21tdV9kb21haW5f YWxsb2ModW5zaWduZWQgdHlwZSkKPj4+PiDCoCB7Cj4+Pj4gQEAgLTE1NDYsOSArMjAyNywxNiBA QCBzdGF0aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZV9zMihzdHJ1Y3QgYXJtX3NtbXVf ZG9tYWluICpzbW11X2RvbWFpbiwKPj4+PiDCoMKgwqDCoMKgIGlmICh2bWlkIDwgMCkKPj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHZtaWQ7Cj4+Pj4gwqAgLcKgwqDCoCBjZmctPnZtaWTC oMKgwqAgPSAodTE2KXZtaWQ7Cj4+Pj4gLcKgwqDCoCBjZmctPnZ0dGJywqDCoMKgID0gcGd0Ymxf Y2ZnLT5hcm1fbHBhZV9zMl9jZmcudnR0YnI7Cj4+Pj4gLcKgwqDCoCBjZmctPnZ0Y3LCoMKgwqAg PSBwZ3RibF9jZmctPmFybV9scGFlX3MyX2NmZy52dGNyOwo+Pj4+ICvCoMKgwqAgLyoKPj4+PiAr wqDCoMKgwqAgKiBYZW46IEdldCB0aGUgdHRiciBhbmQgdnRjciB2YWx1ZXMKPj4+PiArwqDCoMKg wqAgKiB2dHRicjogVGhpcyBpcyBhIHNoYXJlZCB2YWx1ZSB3aXRoIHRoZSBkb21haW4gcGFnZSB0 YWJsZQo+Pj4+ICvCoMKgwqDCoCAqIHZ0Y3I6IFRoZSBUQ1Igc2V0dGluZ3MgYXJlIHRoZSBzYW1l IGFzIENQVSBzaW5jZSB0aGUgcGFnZQo+Pj4+ICvCoMKgwqDCoCAqIHRhYmxlcyBhcmUgc2hhcmVk Cj4+Pj4gK8KgwqDCoMKgICovCj4+Pj4gKwo+Pj4+ICvCoMKgwqAgY2ZnLT52bWlkwqDCoMKgID0g dm1pZDsKPj4+PiArwqDCoMKgIGNmZy0+dnR0YnLCoMKgwqAgPSBwYWdlX3RvX21hZGRyKGNmZy0+ ZG9tYWluLT5hcmNoLnAybS5yb290KTsKPj4+PiArwqDCoMKgIGNmZy0+dnRjcsKgwqDCoCA9IFJF QURfU1lTUkVHMzIoVlRDUl9FTDIpICYgU1RSVEFCX1NURV8yX1ZUQ1JfTUFTSzsKPj4+PiDCoMKg wqDCoMKgIHJldHVybiAwOwo+Pj4+IMKgIH0KPj4+PiDCoCBAQCAtMTYwNCw2ICsyMDkyLDcgQEAg c3RhdGljIGludCBhcm1fc21tdV9kb21haW5fZmluYWxpc2Uoc3RydWN0IGlvbW11X2RvbWFpbiAq ZG9tYWluKQo+Pj4+IMKgwqDCoMKgwqAgaWYgKHNtbXUtPmZlYXR1cmVzICYgQVJNX1NNTVVfRkVB VF9DT0hFUkVOQ1kpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHBndGJsX2NmZy5xdWlya3MgPSBJ T19QR1RBQkxFX1FVSVJLX05PX0RNQTsKPj4+PiDCoCArwqDCoMKgIC8qIFhlbjogcGd0Ymxfb3Bz IGdldHMgYW4gaW52YWxpZCBhZGRyZXNzICovCj4+Pj4gwqDCoMKgwqDCoCBwZ3RibF9vcHMgPSBh bGxvY19pb19wZ3RhYmxlX29wcyhmbXQsICZwZ3RibF9jZmcsIHNtbXVfZG9tYWluKTsKPj4+PiDC oMKgwqDCoMKgIGlmICghcGd0Ymxfb3BzKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVOT01FTTsKPj4+PiBAQCAtMTcyMSw2ICsyMjEwLDcgQEAgb3V0X3VubG9jazoKPj4+PiDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gwqAgfQo+Pj4+IMKgICsjaWYgMCAvKiBYZW46IFVudXNl ZCBmdW5jdGlvbmFsaXR5ICovCj4+PiBzYW1lClNhbWUgYXMgYWJvdmUuCj4+Pj4gwqAgc3RhdGlj IGludCBhcm1fc21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBs b25nIGlvdmEsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGh5c19hZGRyX3QgcGFk ZHIsIHNpemVfdCBzaXplLCBpbnQgcHJvdCkKPj4+PiDCoCB7Cj4+Pj4gQEAgLTE3NzIsNiArMjI2 Miw3IEBAIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3Ry dWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPj4+PiDCoMKgwqDCoMKgIHB1dF9kZXZpY2UoZGV2 KTsKPj4+PiDCoMKgwqDCoMKgIHJldHVybiBkZXYgPyBkZXZfZ2V0X2RydmRhdGEoZGV2KSA6IE5V TEw7Cj4+Pj4gwqAgfQo+Pj4+ICsjZW5kaWYKPj4+PiDCoCDCoCBzdGF0aWMgYm9vbCBhcm1fc21t dV9zaWRfaW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPj4+ PiDCoCB7Cj4+Pj4gQEAgLTE3ODMsNyArMjI3NCwxNCBAQCBzdGF0aWMgYm9vbCBhcm1fc21tdV9z aWRfaW5fcmFuZ2Uoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNpZCkKPj4+PiDC oMKgwqDCoMKgIHJldHVybiBzaWQgPCBsaW1pdDsKPj4+PiDCoCB9Cj4+Pj4gwqAgKy8qIFhlbjog VW51c2VkICovCj4+Pj4gKyNpZiAwCj4+Pj4gwqAgc3RhdGljIHN0cnVjdCBpb21tdV9vcHMgYXJt X3NtbXVfb3BzOwo+Pj4+ICsjZW5kaWYKPj4+PiArCj4+Pj4gKy8qIFhlbjogUmVkZWZpbmUgYXJt X3NtbXVfb3BzIHRvIHdoYXQgZndzcGVjIHNob3VsZCBldmFsdWF0ZSAqLwo+Pj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21tdV9pb21tdV9vcHM7Cj4+Pj4gKyNkZWZpbmUg YXJtX3NtbXVfb3BzIGFybV9zbW11X2lvbW11X29wcwo+Pj4+IMKgIMKgIHN0YXRpYyBpbnQgYXJt X3NtbXVfYWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+Pj4gwqAgewo+Pj4+IEBAIC0x NzkxLDggKzIyODksMTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBk ZXZpY2UgKmRldikKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXU7 Cj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKPj4+ PiDCoMKgwqDCoMKgIHN0cnVjdCBpb21tdV9md3NwZWMgKmZ3c3BlYyA9IGRldi0+aW9tbXVfZndz cGVjOwo+Pj4+ICsjaWYgMCAvKlhlbjogaW9tbXVfZ3JvdXAgaXMgbm90IG5lZWRlZCAqLwo+Pj4+ IMKgwqDCoMKgwqAgc3RydWN0IGlvbW11X2dyb3VwICpncm91cDsKPj4+PiArI2VuZGlmCj4+Pj4g wqAgK8KgwqDCoCAvKiBYZW46IGZ3c3BlYy0+b3BzIGFyZSBub3QgbmVlZGVkICovCj4+Pj4gwqDC oMKgwqDCoCBpZiAoIWZ3c3BlYyB8fCBmd3NwZWMtPm9wcyAhPSAmYXJtX3NtbXVfb3BzKQo+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT0RFVjsKPj4+PiDCoMKgwqDCoMKgIC8qCj4+ Pj4gQEAgLTE4MzAsNiArMjMzMSwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uo c3RydWN0IGRldmljZSAqZGV2KQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqDCoMKg wqDCoCB9Cj4+Pj4gwqAgKy8qCj4+Pj4gKyAqIFhlbjogRG8gbm90IG5lZWQgYW4gaW9tbXUgZ3Jv dXAgYXMgdGhlIHN0cmVhbSBkYXRhIGlzIGNhcnJpZWQgYnkgdGhlIFNNTVUKPj4+PiArICogbWFz dGVyIGRldmljZSBvYmplY3QKPj4+PiArICovCj4+Pj4gKyNpZiAwCj4+Pj4gwqDCoMKgwqDCoCBn cm91cCA9IGlvbW11X2dyb3VwX2dldF9mb3JfZGV2KGRldik7Cj4+Pj4gwqDCoMKgwqDCoCBpZiAo IUlTX0VSUihncm91cCkpIHsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW9tbXVfZ3JvdXBfcHV0 KGdyb3VwKTsKPj4+PiBAQCAtMTgzNyw4ICsyMzQzLDE2IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVf YWRkX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4gwqAg wqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGdyb3VwKTsKPj4+PiArI2VuZGlmCj4+ Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+PiDCoCB9Cj4+Pj4gwqAgKy8qCj4+Pj4gKyAqIFhlbjog V2UgY2FuIHBvdGVudGlhbGx5IHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBhbmQgZGVzdHJveSBhIGRl dmljZS4gVGhpcwo+Pj4+ICsgKiB3aWxsIGJlIHJlbGV2YW50IGZvciBQQ0kgaG90cGx1Zy4gU28s IHdpbGwgYmUgaW1wbGVtZW50ZWQgYXMgbmVlZGVkIGFmdGVyCj4+Pj4gKyAqIHBhc3N0aHJvdWdo IHN1cHBvcnQgaXMgYXZhaWxhYmxlLgo+Pj4+ICsgKi8KPj4+PiArI2lmIDAKPj4+PiDCoCBzdGF0 aWMgdm9pZCBhcm1fc21tdV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+PiDC oCB7Cj4+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlv bW11X2Z3c3BlYzsKPj4+PiBAQCAtMTk3NCw2ICsyNDg4LDcgQEAgc3RhdGljIHN0cnVjdCBpb21t dV9vcHMgYXJtX3NtbXVfb3BzID0gewo+Pj4+IMKgwqDCoMKgwqAgLnB1dF9yZXN2X3JlZ2lvbnPC oMKgwqAgPSBhcm1fc21tdV9wdXRfcmVzdl9yZWdpb25zLAo+Pj4+IMKgwqDCoMKgwqAgLnBnc2l6 ZV9iaXRtYXDCoMKgwqDCoMKgwqDCoCA9IC0xVUwsIC8qIFJlc3RyaWN0ZWQgZHVyaW5nIGRldmlj ZSBhdHRhY2ggKi8KPj4+PiDCoCB9Owo+Pj4+ICsjZW5kaWYKPj4+PiDCoCDCoCAvKiBQcm9iaW5n IGFuZCBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KPj4+PiDCoCBzdGF0aWMgaW50IGFybV9z bW11X2luaXRfb25lX3F1ZXVlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsCj4+Pj4gQEAg LTIxODIsNiArMjY5Nyw3IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0 IGFybV9zbW11X2RldmljZSAqc21tdSwgdTMyIHNldCwgdTMyIGNscikKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEsIEFSTV9TTU1VX1BPTExfVElN RU9VVF9VUyk7Cj4+Pj4gwqAgfQo+Pj4+IMKgICsjaWYgMCAvKiBYZW46IFRoZXJlIGlzIG5vIE1T SSBzdXBwb3J0IGFzIHlldCAqLwo+Pj4+IMKgIHN0YXRpYyB2b2lkIGFybV9zbW11X2ZyZWVfbXNp cyh2b2lkICpkYXRhKQo+Pj4+IMKgIHsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9IGRhdGE7Cj4+Pj4gQEAgLTIyNDcsMTIgKzI3NjMsMTUgQEAgc3RhdGljIHZvaWQgYXJtX3Nt bXVfc2V0dXBfbXNpcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11KQo+Pj4+IMKgwqDCoMKg wqAgLyogQWRkIGNhbGxiYWNrIHRvIGZyZWUgTVNJcyBvbiB0ZWFyZG93biAqLwo+Pj4+IMKgwqDC oMKgwqAgZGV2bV9hZGRfYWN0aW9uKGRldiwgYXJtX3NtbXVfZnJlZV9tc2lzLCBkZXYpOwo+Pj4+ IMKgIH0KPj4+PiArI2VuZGlmCj4+Pj4gwqAgwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfc2V0dXBf dW5pcXVlX2lycXMoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4+PiDCoCB7Cj4+Pj4g wqDCoMKgwqDCoCBpbnQgaXJxLCByZXQ7Cj4+Pj4gwqAgKyNpZiAwIC8qWGVuOiBDYW5ub3Qgc2V0 dXAgbXNpcyBmb3Igbm93ICovCj4+Pj4gwqDCoMKgwqDCoCBhcm1fc21tdV9zZXR1cF9tc2lzKHNt bXUpOwo+Pj4+ICsjZW5kaWYKPj4+PiDCoCDCoMKgwqDCoMKgIC8qIFJlcXVlc3QgaW50ZXJydXB0 IGxpbmVzICovCj4+Pj4gwqDCoMKgwqDCoCBpcnEgPSBzbW11LT5ldnRxLnEuaXJxOwo+Pj4+IEBA IC0yMzE2LDkgKzI4MzUsMTMgQEAgc3RhdGljIGludCBhcm1fc21tdV9zZXR1cF9pcnFzKHN0cnVj dCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBDYXZp dW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90IHN1cHBvcnQgdW5pcXVlCj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBpcnEgbGluZXMuIFVzZSBzaW5nbGUgaXJxIGxpbmUg Zm9yIGFsbCB0aGUgU01NVXYzIGludGVycnVwdHMuCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAg Ki8KPj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShz bW11LT5kZXYsIGlycSwKPj4+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4+PiArwqDCoMKgwqDCoMKg wqDCoCAqIFhlbjogRG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBpcnFzLCBzbyBzZXJpYWxpc2Ug dGhlIHNldHVwLgo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogVGhpcyBpcyB0aGUgc2FtZSBmb3Ig cHJpcyBhbmQgZXZlbnQgaW50ZXJydXB0IGxpbmVzIG9uIG90aGVyCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqAgKiBzeXN0ZW1zCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShzbW11LT5kZXYsIGlycSwKPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfY29tYmluZWRfaXJx X2hhbmRsZXIsCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFy bV9zbW11X2NvbWJpbmVkX2lycV90aHJlYWQsCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIElSUUZfT05FU0hPVCwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgImFybS1zbW11LXYzLWNvbWJpbmVkLWlycSIsIHNtbXUp Owo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4+PiBAQCAtMjQ1Miw2ICsy OTc1LDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBhcm1fc21t dV9kZXZpY2UgKnNtbXUsIGJvb2wgYnlwYXNzKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+IMKgICvCoMKgwqAgLyogWGVuOiBJbml0aWFs aXplIHRhc2tsZXRzICovCj4+Pj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPmV2dHFfdGFz a2xldCwgYXJtX3NtbXVfZXZ0cV90YXNrbGV0LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICh1bnNpZ25lZCBsb25nKXNtbXUpOwo+Pj4+ICvCoMKgwqAgdGFza2xldF9pbml0KCZzbW11LT5w cmlxX3Rhc2tsZXQsIGFybV9zbW11X3ByaXFfdGFza2xldCwKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAodW5zaWduZWQgbG9uZylzbW11KTsKPj4+PiArwqDCoMKgIHRhc2tsZXRfaW5pdCgm c21tdS0+Y29tYmluZWRfaXJxX3Rhc2tsZXQsIGFybV9zbW11X2NvbWJpbmVkX2lycV90YXNrbGV0 LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh1bnNpZ25lZCBsb25nKXNtbXUpOwo+Pj4+ IMKgIMKgwqDCoMKgwqAgLyogRW5hYmxlIHRoZSBTTU1VIGludGVyZmFjZSwgb3IgZW5zdXJlIGJ5 cGFzcyAqLwo+Pj4+IMKgwqDCoMKgwqAgaWYgKCFieXBhc3MgfHwgZGlzYWJsZV9ieXBhc3MpIHsK Pj4+PiBAQCAtMjU0Miw4ICszMDcyLDE0IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3 X3Byb2JlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUpCj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIHNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfU1RBTExTOwo+Pj4+IMKgwqDCoMKg wqAgfQo+Pj4+IMKgICsvKgo+Pj4+ICsgKiBYZW46IEJsb2NrIHN0YWdlIDEgdHJhbnNsYXRpb25z LiBCeSBkb2luZyB0aGlzIGhlcmUgd2UgZG8gbm90IG5lZWQgdG8gc2V0IHRoZQo+Pj4+ICsgKiBk b21haW4tPnN0YWdlIGV4cGxpY2l0bHkuCj4+Pj4gKyAqLwo+Pj4+ICsjaWYgMAo+Pj4+IMKgwqDC oMKgwqAgaWYgKHJlZyAmIElEUjBfUzFQKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11LT5m ZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MxOwo+Pj4+ICsjZW5kaWYKPj4+PiDCoCDC oMKgwqDCoMKgIGlmIChyZWcgJiBJRFIwX1MyUCkKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21t dS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9UUkFOU19TMjsKPj4+PiBAQCAtMjYxNiwxMCAr MzE1MiwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShzdHJ1Y3QgYXJt X3NtbXVfZGV2aWNlICpzbW11KQo+Pj4+IMKgwqDCoMKgwqAgaWYgKHJlZyAmIElEUjVfR1JBTjRL KQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11LT5wZ3NpemVfYml0bWFwIHw9IFNaXzRLIHwg U1pfMk0gfCBTWl8xRzsKPj4+PiDCoCArI2lmIDAgLyogWGVuOiBTTU1VIG9wcyBkbyBub3QgaGF2 ZSBhIHBnc2l6ZV9iaXRtYXAgbWVtYmVyIGZvciBYZW4gKi8KPj4+PiDCoMKgwqDCoMKgIGlmIChh cm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9PSAtMVVMKQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCBhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4+Pj4g wqDCoMKgwqDCoCBlbHNlCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9zbW11X29wcy5wZ3Np emVfYml0bWFwIHw9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4+Pj4gKyNlbmRpZgo+Pj4+IMKgIMKg wqDCoMKgwqAgLyogT3V0cHV0IGFkZHJlc3Mgc2l6ZSAqLwo+Pj4+IMKgwqDCoMKgwqAgc3dpdGNo IChyZWcgJiBJRFI1X09BU19NQVNLIDw8IElEUjVfT0FTX1NISUZUKSB7Cj4+Pj4gQEAgLTI2ODAs NyArMzIxOCw4IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRl diA9IHNtbXUtPmRldjsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9k ZTsKPj4+PiDCoCAtwqDCoMKgIG5vZGUgPSAqKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqKilkZXZf Z2V0X3BsYXRkYXRhKGRldik7Cj4+Pj4gK8KgwqDCoCAvKiBYZW46IE1vZGlmaWNhdGlvbiB0byBn ZXQgaW9ydF9ub2RlICovCj4+Pj4gK8KgwqDCoCBub2RlID0gKHN0cnVjdCBhY3BpX2lvcnRfbm9k ZSAqKWRldi0+YWNwaV9ub2RlOwo+Pj4+IMKgIMKgwqDCoMKgwqAgLyogUmV0cmlldmUgU01NVXYz IHNwZWNpZmljIGRhdGEgKi8KPj4+PiDCoMKgwqDCoMKgIGlvcnRfc21tdSA9IChzdHJ1Y3QgYWNw aV9pb3J0X3NtbXVfdjMgKilub2RlLT5ub2RlX2RhdGE7Cj4+Pj4gQEAgLTI3MDMsNyArMzI0Miw3 IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFybV9zbW11X2RldmljZV9hY3BpX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsCj4+Pj4gwqAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2Vf ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21t dSkKPj4+PiDCoCB7Cj4+Pj4gLcKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2 Owo+Pj4+ICvCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gcGRldjsKPj4+PiDCoMKgwqDCoMKg IHUzMiBjZWxsczsKPj4+PiDCoMKgwqDCoMKgIGludCByZXQgPSAtRUlOVkFMOwo+Pj4+IMKgIEBA IC0yNzE2LDYgKzMyNTUsNyBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+Pj4+IMKgIMKgwqDCoMKgwqAgcGFyc2VfZHJp dmVyX29wdGlvbnMoc21tdSk7Cj4+Pj4gwqAgK8KgwqDCoCAvKiBYZW46IG9mX2RtYV9pc19jb2hl cmVudCBpcyBhIHN0dWIgdGlsbCBkdCBzdXBwb3J0IGlzIGludHJvZHVjZWQgKi8KPj4+PiDCoMKg wqDCoMKgIGlmIChvZl9kbWFfaXNfY29oZXJlbnQoZGV2LT5vZl9ub2RlKSkKPj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NNTVVfRkVBVF9DT0hFUkVOQ1k7Cj4+ Pj4gwqAgQEAgLTI3MzQsOSArMzI3NCwxMSBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+IMKgIHsKPj4+PiDCoMKgwqDC oMKgIGludCBpcnEsIHJldDsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ Pj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8gc2V0dXAgc3lzZnMgKi8KPj4+PiDCoMKg wqDCoMKgIHJlc291cmNlX3NpemVfdCBpb2FkZHI7Cj4+Pj4gKyNlbmRpZgo+Pj4+IMKgwqDCoMKg wqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4+PiAtwqDCoMKgIHN0cnVjdCBkZXZp Y2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBw ZGV2Oy8qIFhlbjogZGV2IGlzIGlnbm9yZWQgKi8KPj4+PiDCoMKgwqDCoMKgIGJvb2wgYnlwYXNz Owo+Pj4+IMKgIMKgwqDCoMKgwqAgc21tdSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqc21t dSksIEdGUF9LRVJORUwpOwo+Pj4+IEBAIC0yNzYzLDcgKzMzMDUsOSBAQCBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+IMKg wqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgIk1NSU8gcmVnaW9uIHRvbyBzbWFsbCAoJXBy KVxuIiwgcmVzKTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4g wqDCoMKgwqDCoCB9Cj4+Pj4gKyNpZiAwIC8qWGVuOiBEbyBub3QgbmVlZCB0byBzZXR1cCBzeXNm cyAqLwo+Pj4+IMKgwqDCoMKgwqAgaW9hZGRyID0gcmVzLT5zdGFydDsKPj4+PiArI2VuZGlmCj4+ Pj4gwqAgwqDCoMKgwqDCoCBzbW11LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKPj4+PiDCoMKgwqDCoMKgIGlmIChJU19FUlIoc21tdS0+YmFzZSkpCj4+Pj4gQEAgLTI4 MDIsMTMgKzMzNDYsMTggQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4+PiDCoCDCoMKgwqDCoMKgIC8qIFJlY29yZCBvdXIgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0 dXJlICovCj4+Pj4gK8KgwqDCoCAvKiBYZW46IFNNTVUgaXMgbm90IHRyZWF0ZWQgYSBhIHBsYXRm b3JtIGRldmljZSovCj4+Pj4gKyNpZiAwCj4+Pj4gwqDCoMKgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2 ZGF0YShwZGV2LCBzbW11KTsKPj4+PiArI2VuZGlmCj4+Pj4gwqAgwqDCoMKgwqDCoCAvKiBSZXNl dCB0aGUgZGV2aWNlICovCj4+Pj4gwqDCoMKgwqDCoCByZXQgPSBhcm1fc21tdV9kZXZpY2VfcmVz ZXQoc21tdSwgYnlwYXNzKTsKPj4+PiDCoMKgwqDCoMKgIGlmIChyZXQpCj4+Pj4gwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gwqAgKy8qIFhlbjogTm90IGNyZWF0aW5nIGFuIElP TU1VIGRldmljZSBsaXN0IGZvciBYZW4gKi8KPj4+PiArI2lmIDAKPj4+PiDCoMKgwqDCoMKgIC8q IEFuZCB3ZSdyZSB1cC4gR28gZ28gZ28hICovCj4+Pj4gwqDCoMKgwqDCoCByZXQgPSBpb21tdV9k ZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5pb21tdSwgZGV2LCBOVUxMLAo+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJzbW11My4lcGEiLCAmaW9hZGRyKTsK Pj4+PiBAQCAtMjg0NCw5ICszMzkzLDIwIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX3By b2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IGlmIChyZXQpCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ PiDCoMKgwqDCoMKgIH0KPj4+PiArI2VuZGlmCj4+Pj4gK8KgwqDCoCAvKgo+Pj4+ICvCoMKgwqDC oCAqIFhlbjogS2VlcCBhIGxpc3Qgb2YgYWxsIHByb2JlZCBkZXZpY2VzLiBUaGlzIHdpbGwgYmUg dXNlZCB0byBxdWVyeQo+Pj4+ICvCoMKgwqDCoCAqIHRoZSBzbW11IGRldmljZXMgYmFzZWQgb24g dGhlIGZ3bm9kZS4KPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIElOSVRfTElTVF9IRUFE KCZzbW11LT5kZXZpY2VzKTsKPj4+PiArwqDCoMKgIHNwaW5fbG9jaygmYXJtX3NtbXVfZGV2aWNl c19sb2NrKTsKPj4+PiArwqDCoMKgIGxpc3RfYWRkKCZzbW11LT5kZXZpY2VzLCAmYXJtX3NtbXVf ZGV2aWNlcyk7Cj4+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygmYXJtX3NtbXVfZGV2aWNlc19sb2Nr KTsKPj4+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+IMKgIH0KPj4+PiDCoCArLyogWGVuOiBV bnVzZWQgZnVuY3Rpb24gKi8KPj4+PiArI2lmIDAKPj4+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11 X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiDCoCB7Cj4+ Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gcGxhdGZvcm1fZ2V0 X2RydmRhdGEocGRldik7Cj4+Pj4gQEAgLTI4NjAsNiArMzQyMCw4IEBAIHN0YXRpYyB2b2lkIGFy bV9zbW11X2RldmljZV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4+ IMKgIHsKPj4+PiDCoMKgwqDCoMKgIGFybV9zbW11X2RldmljZV9yZW1vdmUocGRldik7Cj4+Pj4g wqAgfQo+Pj4+ICsjZW5kaWYKPj4+PiArCj4+Pj4gwqAgwqAgc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4+PiDCoMKgwqDCoMKgIHsgLmNv bXBhdGlibGUgPSAiYXJtLHNtbXUtdjMiLCB9LAo+Pj4+IEBAIC0yODY3LDYgKzM0MjksNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhcm1fc21tdV9vZl9tYXRjaFtdID0gewo+ Pj4+IMKgIH07Cj4+Pj4gwqAgTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0 Y2gpOwo+Pj4+IMKgICsjaWYgMAo+Pj4+IMKgIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGFybV9zbW11X2RyaXZlciA9IHsKPj4+PiDCoMKgwqDCoMKgIC5kcml2ZXLCoMKgwqAgPSB7Cj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIC5uYW1lwqDCoMKgwqDCoMKgwqAgPSAiYXJtLXNtbXUtdjMi LAo+Pj4+IEBAIC0yODgzLDMgKzM0NDYsMzE2IEBAIElPTU1VX09GX0RFQ0xBUkUoYXJtX3NtbXV2 MywgImFybSxzbW11LXYzIiwgTlVMTCk7Cj4+Pj4gwqAgTU9EVUxFX0RFU0NSSVBUSU9OKCJJT01N VSBBUEkgZm9yIEFSTSBhcmNoaXRlY3RlZCBTTU1VdjMgaW1wbGVtZW50YXRpb25zIik7Cj4+Pj4g wqAgTU9EVUxFX0FVVEhPUigiV2lsbCBEZWFjb24gPHdpbGwuZGVhY29uQGFybS5jb20+Iik7Cj4+ Pj4gwqAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+Pj4+ICsjZW5kaWYKPj4+PiArCj4+Pj4g Ky8qKioqKiBTdGFydCBvZiBYZW4gc3BlY2lmaWMgY29kZSAqKioqKi8KPj4+PiArCj4+Pj4gK3N0 YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbChzdHJ1Y3QgZG9t YWluICpkKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAq c21tdV9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKPj4+PiArwqDCoMKgIHN0cnVj dCBpb21tdV9kb21haW4gKmNmZzsKPj4+PiArCj4+Pj4gK8KgwqDCoCBzcGluX2xvY2soJnNtbXVf ZG9tYWluLT5sb2NrKTsKPj4+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmc21t dV9kb21haW4tPmNvbnRleHRzLCBsaXN0KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqAgKiBPbmx5IGludmFsaWRhdGUgdGhlIGNvbnRleHQgd2hlbiBTTU1V IGlzIHByZXNlbnQuCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGlzIGJlY2F1c2UgdGhl IGNvbnRleHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg ICogdW50aWwgYSBtYXN0ZXIgaGFzIGJlZW4gYWRkZWQuCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqAg Ki8KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCFBQ0NFU1NfT05DRShjZmctPnBy aXYtPnNtbXUpKSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4+PiAr wqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfdGxiX2ludl9jb250ZXh0KGNmZy0+cHJpdik7Cj4+Pj4g K8KgwqDCoCB9Cj4+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygmc21tdV9kb21haW4tPmxvY2spOwo+ Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgX19t dXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoKHN0cnVjdCBkb21haW4gKmQsCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBs b25nIGdmbiwKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGludCBwYWdlX2NvdW50KQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCByZXR1 cm4gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQpOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0 aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZ2V0X2RvbWFpbihzdHJ1Y3QgZG9tYWlu ICpkLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkZXZpY2UgKmRldikKPj4+IFRoaXMgaXMgcmV0dXJuaW5nIGlvbW11X2RvbWFpbiBh bmQgbm90IGEgZG9tYWluLgo+Pj4gUGxlYXNlIGNoYW5nZSB0aGUgbmFtZSBvZiBmdW5jdGlvbi4K U2FtZSBhcyBzbW11LXYyLmMuIEkgdGhpbmsgd2l0aCB0aGUgY29tcGxleGl0eSBvZiB0aGUgY29k ZSB3ZSBzaG91bGQgdHJ5IHRvIGdldCB0aGlzIGluIGFzIHRoZSBwcmlvciBjb2RlLiBPbmNlIHRo ZSBzZXQgdGhhdCBoYXMgYmVlbiBwZW5kaW5nIGZvciBzb21lIHRpbWUgaXMgaW4uIFdlIGNhbiBz dGFydCBvbiB0aGUgdmFyaWFibGUgY2xlYW51cCBhY3Rpdml0eS4gSSBzYXkgdGhpcyBzbyB0aGF0 IHdlIGNhbiBtYWtlIHRoZSBuYW1lcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUgZHJpdmVycyBhbmQg dGhpcyB3aWxsIGJlIGEgbG90IGVhc2llciB0byBkbyB3aGVuIHRoZSBtYWpvcml0eSBvZiB0aGUg b3RoZXIgY29kZSBpcyBpbi4KPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IGlvbW11X2RvbWFp biAqZG9tYWluOwo+Pj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9k b21haW47Cj4+PiBBIHN1Z2dlc3Rpb24KPj4+IDEuIGFzIHlvdSBoYXZlIHVzZWQgaW4gYWJvdmUg ZnVuY3Rpb24gc21tdV9kb21haW4gdmFyaWFibGUgZm9yIGFybV9zbW11X3hlbl9kb21haW4KPj4+ IENhbiBzaW1pbGFyIGxvZ2ljIGJlIHVzZWQgZm9yIGlvbW11X2RvbWFpbi4KSSBhbSBmaW5lIGNo YW5naW5nIHRoZSB2YXIgbmFtZS4KPj4+Cj4+PiAyLiBXaGVuIHNtbXVfZG9tYWluIHZhcmlhYmxl IG5hbWUgaXMgdXNlZCBpbiBhYm92ZSBmdW5jdGlvbiB3aHkgeGVuX2RvbWFpbiBpcyB1c2VkIGlu IHRoaXMgZnVuY3Rpb24uCj4+PiBJdCBpcyBxdWl0ZSBjb25mdXNpbmcuCj4+PiBsb2dpY2FsbHkg eGVuX2RvbWFpbiBzaG91bGQgbWVhbiBhIFZNLgpZb3UgbG9zdCBtZSBtYW4uIHhlbl9kb21haW4g aXMgcmVmZXJyaW5nIHRvIHRoZSBwYWdlIHRhYmxlcyBvZiB0aGUgdGhlIFZNIGN1cnJlbnRseSB1 c2luZyB0aGUgU01NVS4gV2hhdCBpcyB0aGUgY29uY2Vybj8KPj4+PiArwqDCoMKgIHN0cnVjdCBh cm1fc21tdV9kZXZpY2UgKnNtbXU7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu ICpzbW11X2RvbWFpbjsKPj4+IHNtbXVfZG9tYWluIHdhcyB1c2VkIGZvciBhcm1fc21tdV94ZW5f ZG9tYWluLgpGYWlsZWQgdG8gc2VlIGl0LiBCdXQsIEknbGwgaGF2ZSBhbm90aGVyIGxvb2suCgo+ Pj4KPj4+IGNvbnNpc3RlbmN5IG9mIHZhcmlhYmxlIG5hbWVzIGlzIG5lY2Vzc2FyeSBmb3IgY29k ZSBjbGFyaXR5Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgeGVuX2RvbWFpbiA9IGRvbV9pb21tdShkKS0+ YXJjaC5wcml2Owo+Pj4+ICsKPj4+PiArwqDCoMKgIHNtbXUgPSBhcm1fc21tdV9nZXRfYnlfZndu b2RlKGRldi0+aW9tbXVfZndzcGVjLT5pb21tdV9md25vZGUpOwo+Pj4+ICvCoMKgwqAgaWYgKCFz bW11KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4+PiArCj4+Pj4gK8KgwqDC oCAvKgo+Pj4+ICvCoMKgwqDCoCAqIExvb3AgdGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRl eHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKPj4+PiArwqDCoMKgwqAgKiBhc3NpZ25lZCB0byB0aGlz IFNNTVUKPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnko ZG9tYWluLCAmeGVuX2RvbWFpbi0+Y29udGV4dHMsIGxpc3QpIHsKPj4+PiArwqDCoMKgwqDCoMKg wqAgc21tdV9kb21haW4gPSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAoc21tdV9kb21haW4tPnNtbXUgPT0gc21tdSkKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gZG9tYWluOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKg IHJldHVybiBOVUxMOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9k ZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCj4+PiBzYW1l Ck9rCj4+Pj4gK3sKPj4+PiArwqDCoMKgIGxpc3RfZGVsKCZkb21haW4tPmxpc3QpOwo+Pj4+ICvC oMKgwqAgYXJtX3NtbXVfZG9tYWluX2ZyZWUoZG9tYWluKTsKPj4+PiArfQo+Pj4+ICsKPj4+PiAr c3RhdGljIGludCBhcm1fc21tdV9hc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKmQsIHU4IGRldmZu LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2LCB1MzIgZmxhZykKPj4+PiArewo+Pj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+Pj4g K8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3Qg YXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFpbjsKPj4+IHNhbWUKeGVuX2RvbWFpbiBpcyBm aW5lLiBZb3UgaGF2ZSBhbiBpc3N1ZSB3aXRoIHRoZSBpb21tdV9kb21pb2FuIGhlcmU/Cj4+Pj4g K8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWluICphcm1fc21tdTsKPj4+PiArCj4+Pj4gK8Kg wqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRl di0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94ZW5fZGV2aWNlKTsK Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFkZXYtPmFyY2hkYXRhLmlvbW11KQo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsK Pj4+PiArwqDCoMKgIHJldCA9IGFybV9zbW11X2FkZF9kZXZpY2UoZGV2KTsKPj4+PiArwqDCoMKg IGlmIChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCAv Kgo+Pj4+ICvCoMKgwqDCoCAqIENoZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFk eSBleGlzdHMgZm9yIHRoaXMgeGVuIGRvbWFpbgo+Pj4+ICvCoMKgwqDCoCAqIHVuZGVyIHRoZSBz YW1lIFNNTVUKPj4+PiArwqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIGRvbWFpbiA9IGFybV9zbW11 X2dldF9kb21haW4oZCwgZGV2KTsKPj4+PiArwqDCoMKgIGlmICghZG9tYWluKSB7Cj4+Pj4gKwo+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBkb21haW4gPSBhcm1fc21tdV9kb21haW5fYWxsb2MoSU9NTVVf RE9NQUlOX0RNQSk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZG9tYWluKSB7Cj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVOT01FTTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIG91dDsKPj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDC oMKgwqDCoMKgwqAgYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+Pj4+ICvCoMKg wqDCoMKgwqDCoCBhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiA9IGQ7Cj4+Pj4gKwo+Pj4+ICvCoMKg wqDCoMKgwqDCoCAvKiBDaGFpbiB0aGUgbmV3IGNvbnRleHQgdG8gdGhlIGRvbWFpbiAqLwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCBsaXN0X2FkZCgmZG9tYWluLT5saXN0LCAmeGVuX2RvbWFpbi0+Y29u dGV4dHMpOwo+Pj4+ICsKPj4+PiArwqDCoMKgIH0KPj4+PiArCj4+Pj4gK8KgwqDCoCByZXQgPSBh cm1fc21tdV9hdHRhY2hfZGV2KGRvbWFpbiwgZGV2KTsKPj4+PiArwqDCoMKgIGlmIChyZXQpIHsK Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRvbWFpbi0+cmVmLmNvdW50ZXIgPT0gMCkKPj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihkb21h aW4pOwo+Pj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgYXRvbWljX2lu YygmZG9tYWluLT5yZWYpOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICsKPj4+PiArb3V0Ogo+Pj4+ICvC oMKgwqAgc3Bpbl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwo+Pj4+ICvCoMKgwqAgcmV0dXJu IHJldDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCBhcm1fc21tdV9kZWFzc2lnbl9k ZXYoc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGRldmljZSAqZGV2KQo+Pj4+ICt7Cj4+Pj4gK8Kg wqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQs IGRldik7Cj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAqeGVuX2RvbWFp bjsKPj4+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKmFybV9zbW11ID0gdG9fc21t dV9kb21haW4oZG9tYWluKTsKPj4+IHNhbWUKPj4+PiArCj4+Pj4gK8KgwqDCoCB4ZW5fZG9tYWlu ID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKCFhcm1f c21tdSB8fCBhcm1fc21tdS0+czJfY2ZnLmRvbWFpbiAhPSBkKSB7Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGRldl9lcnIoZGV2LCAiIG5vdCBhdHRhY2hlZCB0byBkb21haW4gJWRcbiIsIGQtPmRvbWFp bl9pZCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRVNSQ0g7Cj4+Pj4gK8KgwqDCoCB9 Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKPj4+PiAr Cj4+Pj4gK8KgwqDCoCBhcm1fc21tdV9kZXRhY2hfZGV2KGRldik7Cj4+Pj4gK8KgwqDCoCBhdG9t aWNfZGVjKCZkb21haW4tPnJlZik7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKGRvbWFpbi0+cmVm LmNvdW50ZXIgPT0gMCkKPj4+PiArwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfZGVzdHJveV9pb21t dV9kb21haW4oZG9tYWluKTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBzcGluX3VubG9jaygmeGVuX2Rv bWFpbi0+bG9jayk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4gK30KPj4+PiAr Cj4+Pj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfcmVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4gKnMs IHN0cnVjdCBkb21haW4gKnQsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHU4IGRldmZuLMKgIHN0cnVjdCBkZXZpY2UgKmRldikKPj4+PiArewo+Pj4+ICvCoMKgwqAgaW50 IHJldCA9IDA7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLyogRG9uJ3QgYWxsb3cgcmVtYXBwaW5nIG9u IG90aGVyIGRvbWFpbiB0aGFuIGh3ZG9tICovCj4+Pj4gK8KgwqDCoCBpZiAodCAmJiB0ICE9IGhh cmR3YXJlX2RvbWFpbikKPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FUEVSTTsKPj4+PiAr Cj4+Pj4gK8KgwqDCoCBpZiAodCA9PSBzKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsK Pj4+PiArCj4+Pj4gK8KgwqDCoCByZXQgPSBhcm1fc21tdV9kZWFzc2lnbl9kZXYocywgZGV2KTsK Pj4+PiArwqDCoMKgIGlmIChyZXQpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgaWYgKHQpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqAgLyogTm8gZmxh Z3MgYXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KPj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gYXJt X3NtbXVfYXNzaWduX2Rldih0LCBkZXZmbiwgZGV2LCAwKTsKPj4+PiArwqDCoMKgwqDCoMKgwqAg aWYgKHJldCkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+ICvC oMKgwqAgfQo+Pj4+ICsKPj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ ICtzdGF0aWMgaW50IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQp Cj4+PiBXaGVyZSBpcyBpb21tdV9kb21haW4gaW5pdGlhbGl6ZWQ/Cj4+PiBUaGUgZnVuY3Rpb24g ZG9lcyBub3QgdXNlIGEgaW9tbXVfZG9tYWluICogdmFyaWFibGUKPj4+PiArewo+Pj4+ICvCoMKg wqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+Pj4gKwo+Pj4+ICvC oMKgwqAgeGVuX2RvbWFpbiA9IHh6YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4pOwo+ Pj4+ICvCoMKgwqAgaWYgKCF4ZW5fZG9tYWluKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVOT01FTTsKPj4+PiArCj4+Pj4gK8KgwqDCoCBzcGluX2xvY2tfaW5pdCgmeGVuX2RvbWFpbi0+ bG9jayk7Cj4+Pj4gK8KgwqDCoCBJTklUX0xJU1RfSEVBRCgmeGVuX2RvbWFpbi0+Y29udGV4dHMp Owo+Pj4+ICsKPj4+PiArwqDCoMKgIGRvbV9pb21tdShkKS0+YXJjaC5wcml2ID0geGVuX2RvbWFp bjsKPj4+PiArCj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3Rh dGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11X2lvbW11X2h3ZG9tX2luaXQoc3RydWN0IGRv bWFpbiAqZCkKPj4+PiArewo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgdm9pZCBhcm1fc21t dV9pb21tdV9kb21haW5fdGVhcmRvd24oc3RydWN0IGRvbWFpbiAqZCkKPj4+PiArewo+Pj4+ICvC oMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUo ZCktPmFyY2gucHJpdjsKPj4+PiArCj4+Pj4gK8KgwqDCoCBBU1NFUlQobGlzdF9lbXB0eSgmeGVu X2RvbWFpbi0+Y29udGV4dHMpKTsKPj4+PiArwqDCoMKgIHhmcmVlKHhlbl9kb21haW4pOwo+Pj4+ ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9tYXBfcGFn ZShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIGdmbiwKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgaW50IGZsYWdzKQo+Pj4+ICt7 Cj4+Pj4gK8KgwqDCoCBwMm1fdHlwZV90IHQ7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgLyoKPj4+PiAr wqDCoMKgwqAgKiBHcmFudCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgRE1BIHJlcXVlc3RzLiBU aGUgZGV2X2J1c19hZGRyCj4+Pj4gK8KgwqDCoMKgICogcmV0dXJuZWQgYnkgdGhlIGh5cGVyY2Fs bCBpcyB0aGUgTUZOIChub3QgdGhlIElQQSkuIEZvciBkZXZpY2UKPj4+PiArwqDCoMKgwqAgKiBw cm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhlbiBuZWVkcyB0byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0 aGUgZG9tYWluCj4+Pj4gK8KgwqDCoMKgICogcDJtIHRvIGFsbG93IERNQSByZXF1ZXN0IHRvIHdv cmsuCj4+Pj4gK8KgwqDCoMKgICogVGhpcyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRvbWFpbiBp cyBkaXJlY3RlZCBtYXBwZWQuIEhlbmNlIHRoaXMKPj4+PiArwqDCoMKgwqAgKiBmdW5jdGlvbiBz aG91bGQgb25seSBiZSB1c2VkIGJ5IGdudHRhYiBjb2RlIHdpdGggZ2ZuID09IG1mbi4KPj4+PiAr wqDCoMKgwqAgKi8KPj4+PiArwqDCoMKgIEJVR19PTighaXNfZG9tYWluX2RpcmVjdF9tYXBwZWQo ZCkpOwo+Pj4+ICvCoMKgwqAgQlVHX09OKG1mbiAhPSBnZm4pOwo+Pj4+ICsKPj4+PiArwqDCoMKg IC8qIFdlIG9ubHkgc3VwcG9ydCByZWFkYWJsZSBhbmQgd3JpdGFibGUgZmxhZ3MgKi8KPj4+PiAr wqDCoMKgIGlmICghKGZsYWdzICYgKElPTU1VRl9yZWFkYWJsZSB8IElPTU1VRl93cml0YWJsZSkp KQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+PiArCj4+Pj4gK8KgwqDC oCB0ID0gKGZsYWdzICYgSU9NTVVGX3dyaXRhYmxlKSA/IHAybV9pb21tdV9tYXBfcncgOiBwMm1f aW9tbXVfbWFwX3JvOwo+Pj4+ICsKPj4+PiArwqDCoMKgIC8qCj4+Pj4gK8KgwqDCoMKgICogVGhl IGZ1bmN0aW9uIGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5IHJlcGxhY2VzIHRoZSBjdXJyZW50IG1h cHBpbmcKPj4+PiArwqDCoMKgwqAgKiBpZiB0aGVyZSBpcyBhbHJlYWR5IG9uZS4uLgo+Pj4+ICvC oMKgwqDCoCAqLwo+Pj4+ICvCoMKgwqAgcmV0dXJuIGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5KGQs IF9nZm4oZ2ZuKSwgX21mbihtZm4pLCAwLCB0KTsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGlj IGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfdW5tYXBfcGFnZShzdHJ1Y3QgZG9tYWluICpkLCB1 bnNpZ25lZCBsb25nIGdmbikKPj4+PiArewo+Pj4+ICvCoMKgwqAgLyoKPj4+PiArwqDCoMKgwqAg KiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgZ250dGFiIGNvZGUgd2hlbiB0 aGUgZG9tYWluCj4+Pj4gK8KgwqDCoMKgICogaXMgZGlyZWN0IG1hcHBlZAo+Pj4+ICvCoMKgwqDC oCAqLwo+Pj4+ICvCoMKgwqAgaWYgKCFpc19kb21haW5fZGlyZWN0X21hcHBlZChkKSkKPj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJu IGd1ZXN0X3BoeXNtYXBfcmVtb3ZlX3BhZ2UoZCwgX2dmbihnZm4pLCBfbWZuKGdmbiksIDApOwo+ Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlvbW11X29wcyBhcm1fc21t dV9pb21tdV9vcHMgPSB7Cj4+Pj4gK8KgwqDCoCAuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFp bl9pbml0LAo+Pj4+ICvCoMKgwqAgLmh3ZG9tX2luaXQgPSBhcm1fc21tdV9pb21tdV9od2RvbV9p bml0LAo+Pj4+ICvCoMKgwqAgLnRlYXJkb3duID0gYXJtX3NtbXVfaW9tbXVfZG9tYWluX3RlYXJk b3duLAo+Pj4+ICvCoMKgwqAgLmlvdGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4+ Pj4gK8KgwqDCoCAuaW90bGJfZmx1c2hfYWxsID0gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsLAo+ Pj4+ICvCoMKgwqAgLmFzc2lnbl9kZXZpY2UgPSBhcm1fc21tdV9hc3NpZ25fZGV2LAo+Pj4+ICvC oMKgwqAgLnJlYXNzaWduX2RldmljZSA9IGFybV9zbW11X3JlYXNzaWduX2RldiwKPj4+PiArwqDC oMKgIC5tYXBfcGFnZSA9IGFybV9zbW11X21hcF9wYWdlLAo+Pj4+ICvCoMKgwqAgLnVubWFwX3Bh Z2UgPSBhcm1fc21tdV91bm1hcF9wYWdlLAo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArc3RhdGljCj4+ Pj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dldF9ieV9md25vZGUoc3RydWN0 IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSkKPj4+PiArewo+Pj4+ICvCoMKgwqAgc3RydWN0IGFybV9z bW11X2RldmljZSAqc21tdSA9IE5VTEw7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZh cm1fc21tdV9kZXZpY2VzX2xvY2spOwo+Pj4+ICvCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShz bW11LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoc21tdS0+ZGV2LT5md25vZGUgPT0gZndub2RlKQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+Pj4+ICvCoMKgwqAgfQo+Pj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmFybV9z bW11X2RldmljZXNfbG9jayk7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgcmV0dXJuIHNtbXU7Cj4+Pj4g K30KPj4+PiArCj4+Pj4gK3N0YXRpYyBfX2luaXQgaW50IGFybV9zbW11X2R0X2luaXQoc3RydWN0 IGR0X2RldmljZV9ub2RlICpkZXYsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjb25zdCB2b2lkICpkYXRhKQo+Pj4+ICt7Cj4+Pj4gK8KgwqDCoCBpbnQgcmM7Cj4+ Pj4gKwo+Pj4+ICvCoMKgwqAgLyoKPj4+PiArwqDCoMKgwqAgKiBFdmVuIGlmIHRoZSBkZXZpY2Ug Y2FuJ3QgYmUgaW5pdGlhbGl6ZWQsIHdlIGRvbid0IHdhbnQgdG8KPj4+PiArwqDCoMKgwqAgKiBn aXZlIHRoZSBTTU1VIGRldmljZSB0byBkb20wLgo+Pj4+ICvCoMKgwqDCoCAqLwo+Pj4+ICvCoMKg wqAgZHRfZGV2aWNlX3NldF91c2VkX2J5KGRldiwgRE9NSURfWEVOKTsKPj4+PiArCj4+Pj4gK8Kg wqDCoCByYyA9IGFybV9zbW11X2RldmljZV9wcm9iZShkdF90b19kZXYoZGV2KSk7Cj4+Pj4gK8Kg wqDCoCBpZiAocmMpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByYzsKPj4+PiArCj4+Pj4g K8KgwqDCoCBpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOwo+Pj4+ICsKPj4+PiAr wqDCoMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtEVF9ERVZJQ0VfU1RBUlQoc21t dXYzLCAiQVJNIFNNTVUgVjMiLCBERVZJQ0VfSU9NTVUpCj4+Pj4gK8KgwqDCoCAuZHRfbWF0Y2gg PSBhcm1fc21tdV9vZl9tYXRjaCwKPj4+PiArwqDCoMKgIC5pbml0ID0gYXJtX3NtbXVfZHRfaW5p dCwKPj4+PiArRFRfREVWSUNFX0VORAo+Pj4+ICsKPj4+PiArI2lmZGVmIENPTkZJR19BQ1BJCj4+ Pj4gKy8qIFNldCB1cCB0aGUgSU9NTVUgKi8KPj4+PiArc3RhdGljIGludCBfX2luaXQgYXJtX3Nt bXVfYWNwaV9pbml0KGNvbnN0IHZvaWQgKmRhdGEpCj4+Pj4gK3sKPj4+PiArwqDCoMKgIGludCBy YzsKPj4+PiArCj4+Pj4gK8KgwqDCoCByYyA9IGFybV9zbW11X2RldmljZV9wcm9iZSgoc3RydWN0 IGRldmljZSAqKWRhdGEpOwo+Pj4+ICvCoMKgwqAgaWYgKHJjKQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmM7Cj4+Pj4gKwo+Pj4+ICvCoMKgwqAgaW9tbXVfc2V0X29wcygmYXJtX3NtbXVf aW9tbXVfb3BzKTsKPj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtB Q1BJX0RFVklDRV9TVEFSVChhc21tdXYzLCAiQVJNIFNNTVUgVjMiLCBERVZJQ0VfSU9NTVUpCj4+ Pj4gK8KgwqDCoCAuY2xhc3NfdHlwZSA9IEFDUElfSU9SVF9OT0RFX1NNTVVfVjMsCj4+Pj4gK8Kg wqDCoCAuaW5pdCA9IGFybV9zbW11X2FjcGlfaW5pdCwKPj4+PiArQUNQSV9ERVZJQ0VfRU5ECj4+ Pj4gKwo+Pj4+ICsjZW5kaWYKPj4+PiBkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUveGVuL2xpbnV4 X2NvbXBhdC5oIGIveGVuL2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oCj4+Pj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4+PiBpbmRleCAwMDAwMDAwMDAwLi44MDM3YmUwYTNlCj4+Pj4gLS0tIC9k ZXYvbnVsbAo+Pj4+ICsrKyBiL3hlbi9pbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+Pj4+IEBA IC0wLDAgKzEsODQgQEAKPj4+PiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+Pj4+ICsgKiBpbmNs dWRlL3hlbi9saW51eF9jb21wYXQuaAo+Pj4+ICsgKgo+Pj4+ICsgKiBDb21wYXRpYmlsaXR5IGRl ZmluZXMgZm9yIHBvcnRpbmcgY29kZSBmcm9tIExpbnV4IHRvIFhlbgo+Pj4+ICsgKgo+Pj4+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTcgTGluYXJvIExpbWl0ZWQKPj4+PiArICoKPj4+PiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPj4+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4+PiArICogdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4+PiArICog KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4+PiArICoKPj4+PiArICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCj4+Pj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCj4+Pj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS7CoCBTZWUgdGhlCj4+Pj4gKyAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+Pj4gKyAqCj4+Pj4gKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cj4+Pj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4+Pj4gKyAqLwo+Pj4+ICsKPj4+PiArI2lmbmRlZiBfX1hF Tl9MSU5VWF9DT01QQVRfSF9fCj4+Pj4gKyNkZWZpbmUgX19YRU5fTElOVVhfQ09NUEFUX0hfXwo+ Pj4+ICsKPj4+PiArI2luY2x1ZGUgPGFzbS90eXBlcy5oPgo+Pj4+ICsKPj4+PiArdHlwZWRlZiBw YWRkcl90IHBoeXNfYWRkcl90Owo+Pj4+ICt0eXBlZGVmIHBhZGRyX3QgZG1hX2FkZHJfdDsKPj4+ PiArCj4+Pj4gK3R5cGVkZWYgdW5zaWduZWQgaW50IGdmcF90Owo+Pj4+ICsjZGVmaW5lIEdGUF9L RVJORUwgMAo+Pj4+ICsjZGVmaW5lIF9fR0ZQX1pFUk8gMHgwMVUKPj4+PiArCj4+Pj4gKy8qIEhl bHBlcnMgZm9yIElSUSBmdW5jdGlvbnMgKi8KPj4+PiArI2RlZmluZSBmcmVlX2lycSByZWxlYXNl X2lycQo+Pj4+ICsKPj4+PiArZW51bSBpcnFyZXR1cm4gewo+Pj4+ICvCoMKgwqAgSVJRX05PTkUs Cj4+Pj4gK8KgwqDCoCBJUlFfSEFORExFRCwKPj4+PiArwqDCoMKgIElSUV9XQUtFX1RIUkVBRCwK Pj4+PiArfTsKPj4+PiArCj4+Pj4gK3R5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7 Cj4+Pj4gKwo+Pj4+ICsvKiBEZXZpY2UgbG9nZ2VyIGZ1bmN0aW9ucyAqLwo+Pj4+ICsjZGVmaW5l IGRldl9kYmcoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19ERUJVRyBmbXQsICMjIF9fVkFf QVJHU19fKQo+Pj4+ICsjZGVmaW5lIGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhF TkxPR19JTkZPIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+Pj4gKyNkZWZpbmUgZGV2X3dhcm4oZGV2 LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19XQVJOSU5HIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+ Pj4gKyNkZWZpbmUgZGV2X2VycihkZXYsIGZtdCwgLi4uKSBwcmludGsoWEVOTE9HX0VSUiBmbXQs ICMjIF9fVkFfQVJHU19fKQo+Pj4+ICsjZGVmaW5lIGRldl9pbmZvKGRldiwgZm10LCAuLi4pIHBy aW50ayhYRU5MT0dfSU5GTyBmbXQsICMjIF9fVkFfQVJHU19fKQo+Pj4+ICsKPj4+PiArI2RlZmlu ZSBkZXZfZXJyX3JhdGVsaW1pdGVkKGRldiwgZm10LCAuLi4pwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBcCj4+Pj4gK8KgwqDCoMKgIHByaW50ayhYRU5MT0dfRVJSIGZtdCwgIyMg X19WQV9BUkdTX18pCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIGRldl9uYW1lKGRldikgZHRfbm9kZV9m dWxsX25hbWUoZGV2X3RvX2R0KGRldikpCj4+Pj4gKwo+Pj4+ICsvKiBBbGlhcyB0byBYZW4gYWxs b2NhdGlvbiBoZWxwZXJzICovCj4+Pj4gKyNkZWZpbmUga2ZyZWUgeGZyZWUKPj4+PiArI2RlZmlu ZSBrbWFsbG9jKHNpemUsIGZsYWdzKSAoe1wKPj4+PiArwqDCoMKgIHZvaWQgKl9fcmV0X2FsbG9j ID0gTlVMTDsgXAo+Pj4+ICvCoMKgwqAgaWYgKGZsYWdzICYgX19HRlBfWkVSTykgXAo+Pj4+ICvC oMKgwqDCoMKgwqDCoCBfX3JldF9hbGxvYyA9IF94emFsbG9jKHNpemUsIHNpemVvZih2b2lkICop KTsgXAo+Pj4+ICvCoMKgwqAgZWxzZSBcCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIF9fcmV0X2FsbG9j ID0gX3htYWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpOyBcCj4+Pj4gK8KgwqDCoCBfX3JldF9h bGxvYzsgXAo+Pj4+ICt9KQo+Pj4+ICsjZGVmaW5lIGt6YWxsb2Moc2l6ZSwgZmxhZ3MpwqDCoMKg wqDCoMKgwqAgX3h6YWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQgKikpCj4+Pj4gKyNkZWZpbmUgZGV2 bV9remFsbG9jKGRldiwgc2l6ZSwgZmxhZ3MpwqAgX3h6YWxsb2Moc2l6ZSwgc2l6ZW9mKHZvaWQg KikpCj4+Pj4gKyNkZWZpbmUga21hbGxvY19hcnJheShzaXplLCBuLCBmbGFncykgKHtcCj4+Pj4g K8KgwqDCoCB2b2lkICpfX3JldF9hbGxvYyA9IE5VTEw7IFwKPj4+PiArwqDCoMKgIGlmIChmbGFn cyAmIF9fR0ZQX1pFUk8pIFwKPj4+PiArwqDCoMKgwqDCoMKgwqAgX19yZXRfYWxsb2MgPSBfeHph bGxvY19hcnJheShzaXplLCBzaXplb2Yodm9pZCAqKSwgbik7IFwKPj4+PiArwqDCoMKgIGVsc2Ug XAo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBfX3JldF9hbGxvYyA9IF94bWFsbG9jX2FycmF5KHNpemUs IHNpemVvZih2b2lkICopLCBuKTsgXAo+Pj4+ICvCoMKgwqAgX19yZXRfYWxsb2M7IFwKPj4+PiAr fSkKPj4+PiArCj4+Pj4gKy8qIEFsaWFzIHRvIFhlbiB0aW1lIGZ1bmN0aW9ucyAqLwo+Pj4+ICsj ZGVmaW5lIGt0aW1lX3Qgc190aW1lX3QKPj4+PiArI2RlZmluZSBrdGltZV9nZXQoKcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAoTk9XKCkpCj4+Pj4gKyNkZWZpbmUga3RpbWVfYWRkX3VzKHQsaSnC oMKgwqDCoMKgwqAgKHQgKyBNSUNST1NFQ1MoaSkpCj4+Pj4gKyNkZWZpbmUga3RpbWVfY29tcGFy ZSh0LGkpwqDCoMKgwqDCoCAodCA+IChpKSkKPj4+PiArCj4+Pj4gKyNlbmRpZiAvKiBfX1hFTl9M SU5VWF9DT01QQVRfSF9fICovCj4+Pgo+Pgo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+IFhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKPiBYZW4tZGV2 ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h aWxtYW4vbGlzdGluZm8veGVuLWRldmVsCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp bmZvL3hlbi1kZXZlbA==