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: Thu, 24 May 2018 14:29:38 -0600 Message-ID: <1df9c9aa-bb75-94db-d88f-53229e740e18@linaro.org> References: <20180524004620.23828-1-sameer.goel@linaro.org> <20180524004620.23828-5-sameer.goel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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 1fLwrp-0005fq-53 for xen-devel@lists.xenproject.org; Thu, 24 May 2018 20:29:45 +0000 Received: by mail-pg0-x243.google.com with SMTP id w3-v6so1271729pgv.12 for ; Thu, 24 May 2018 13:29:41 -0700 (PDT) In-Reply-To: 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 CgpPbiAwNS8yMy8yMDE4IDEwOjQ4IFBNLCBNYW5pc2ggSmFnZ2kgd3JvdGU6Cj4gSGkgU2FtZWVy LAo+Cj4gR2VuZXJhbCBDb21tZW50LCBwbGVhc2UgdXNlIGFwcHJvcHJpYXRlIHZhcmlhYmxlIG5h bWVzIGZvciBYWFhfZG9tYWluIAo+IHN0cnVjdHVyZXMgaW4gY29kZSB3aGljaCBpcyB4ZW4gc3Bl Y2lmaWMuCkkgdGhvdWdodCB0aGF0IHdlIGhhZCBkaXNjdXNzZWQgdGhpcyBiZWZvcmUgb24gb25l IG9mIHRoZSBSRkNzLiBBdCB0aGlzIApwb2ludCB3ZSBhcmUganVzdCB1c2luZyB0aGUgZm9ybWF0 IHVzZWQgZm9yIHNtbXUtdjIuIEkgZG9uJ3QgdGhpbmsgdGhhdCAKdGhlIHZhcmlhYmxlIG5hbWVz IGFyZSBpbmFwcHJvcHJpYXRlLiBVbmxlc3MgdGhlcmUgaXMgYSB2ZXJ5IHNwZWNpZmljIAppc3N1 ZSB3aXRoIHRoZSB2YXJpYWJsZSBuYW1lcywgSSB0aGluayB3ZSBzaG91bGQgc3RpY2sgd2l0aCB0 aGUgY3VycmVudCAKdmVyc2lvbi4KCj4KPgo+IE9uIDA1LzI0LzIwMTggMDY6MTYgQU0sIFNhbWVl ciBHb2VsIHdyb3RlOgo+PiBUaGlzIGRyaXZlciBmb2xsb3dzIGFuIGFwcHJvYWNoIHNpbWlsYXIg dG8gc21tdSBkcml2ZXIuIFRoZSBpbnRlbnQgaGVyZQo+PiBpcyB0byByZXVzZSBhcyBtdWNoIExp bnV4IGNvZGUgYXMgcG9zc2libGUuCj4+IC0gR2x1ZSBjb2RlIGhhcyBiZWVuIGludHJvZHVjZWQg dG8gYnJpZGdlIHRoZSBBUEkgY2FsbHMuCj4+IC0gQ2FsbGVkIExpbnV4IGZ1bmN0aW9ucyBmcm9t IHRoZSBYZW4gSU9NTVUgZnVuY3Rpb24gY2FsbHMuCj4+IC0gWGVuIG1vZGlmaWNhdGlvbnMgYXJl IHByZWNlZGVkIGJ5IC8qWGVuOiBjb21tZW50ICovCj4+IC0geGVuL2xpbnV4X2NvbXBhdDogQWRk IGEgTGludXggY29tcGF0IGhlYWRlcgo+PiDCoMKgIEZvciBwb3J0aW5nIGZpbGVzIGRpcmVjdGx5 IGZyb20gTGludXggaXQgaXMgdXNlZnVsIHRvIGhhdmUgYSAKPj4gZnVuY3Rpb24gbWFwcGluZwo+ PiDCoMKgIGRlZmluaXRpb25zIGZyb20gTGludXggdG8gWGVuLiBUaGlzIGZpbGUgYWRkcyBjb21t b24gQVBJIGZ1bmN0aW9ucyAKPj4gYW5kCj4+IMKgwqAgb3RoZXIgZGVmaW5lcyB0aGF0IGFyZSBu ZWVkZWQgZm9yIHBvcnRpbmcgYXJtIFNNTVUgZHJpdmVycy4KPj4KPj4gU2lnbmVkLW9mZi1ieTog U2FtZWVyIEdvZWwgPHNhbWVlci5nb2VsQGxpbmFyby5vcmc+Cj4+IC0tLQo+PiDCoCB4ZW4vYXJj aC9hcm0vcDJtLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAx ICsKPj4gwqAgeGVuL2RyaXZlcnMvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB8wqDCoCAyICsKPj4gwqAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25m aWfCoMKgIHzCoMKgIDggKwo+PiDCoCB4ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZp bGXCoCB8wqDCoCAxICsKPj4gwqAgeGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMu YyB8IDkzNCArKysrKysrKysrKysrKysrKysrKysrKysrLQo+PiDCoCB4ZW4vaW5jbHVkZS94ZW4v bGludXhfY29tcGF0LmjCoMKgwqDCoMKgwqDCoCB8wqAgODQgKysrCj4+IMKgIDYgZmlsZXMgY2hh bmdlZCwgMTAwMSBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKPj4gwqAgY3JlYXRlIG1v ZGUgMTAwNjQ0IHhlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCj4+IMKgIGNyZWF0 ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS94ZW4vbGludXhfY29tcGF0LmgKPj4KPj4gZGlmZiAt LWdpdCBhL3hlbi9hcmNoL2FybS9wMm0uYyBiL3hlbi9hcmNoL2FybS9wMm0uYwo+PiBpbmRleCBk NDNjM2FhODk2Li4zOGFhOWYwMGMxIDEwMDY0NAo+PiAtLS0gYS94ZW4vYXJjaC9hcm0vcDJtLmMK Pj4gKysrIGIveGVuL2FyY2gvYXJtL3AybS5jCj4+IEBAIC0xNDU0LDYgKzE0NTQsNyBAQCBlcnI6 Cj4+IMKgIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF92aXJ0X3BhZ2luZ19vbmUodm9pZCAqZGF0 YSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcgdmFsID0gKHVuc2lnbmVkIGxv bmcpZGF0YTsKPj4gK8KgwqDCoCAvKiBTTU1VdjMgUzIgY2ZnIHZ0Y3IgcmV1c2VzIHRoZSBmb2xs b3dpbmcgdmFsdWUgKi8KPj4gwqDCoMKgwqDCoCBXUklURV9TWVNSRUczMih2YWwsIFZUQ1JfRUwy KTsKPj4gwqDCoMKgwqDCoCBpc2IoKTsKPj4gwqAgfQo+PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZl cnMvS2NvbmZpZyBiL3hlbi9kcml2ZXJzL0tjb25maWcKPj4gaW5kZXggZGI5NDM5M2Y0Ny4uNTlj YTAwZjg1MCAxMDA2NDQKPj4gLS0tIGEveGVuL2RyaXZlcnMvS2NvbmZpZwo+PiArKysgYi94ZW4v ZHJpdmVycy9LY29uZmlnCj4+IEBAIC0xNSw0ICsxNSw2IEBAIHNvdXJjZSAiZHJpdmVycy92aWRl by9LY29uZmlnIgo+PiDCoCBjb25maWcgSEFTX1ZQQ0kKPj4gwqDCoMKgwqDCoCBib29sCj4+IMKg ICtzb3VyY2UgImRyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWciCj4+ICsKPj4gwqAgZW5k bWVudQo+PiBkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcg Cj4+IGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL0tjb25maWcKPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAwMC4uY2RhODk5ZjYwOAo+PiAtLS0gL2Rldi9udWxs Cj4+ICsrKyBiL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9LY29uZmlnCj4+IEBAIC0wLDAg KzEsOCBAQAo+PiArCj4+ICtjb25maWcgQVJNX1NNTVVfdjMKPj4gK8KgwqDCoCBib29sICJBUk0g U01NVXYzIFN1cHBvcnQiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBBUk1fNjQKPj4gK8KgwqDCoCBo ZWxwCj4+ICvCoMKgwqDCoCBTdXBwb3J0IGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEFSTSBT eXN0ZW0gTU1VIGFyY2hpdGVjdHVyZQo+PiArwqDCoMKgwqAgdmVyc2lvbiAzLgo+PiArCj4+IGRp ZmYgLS1naXQgYS94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUgCj4+IGIveGVu L2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL01ha2VmaWxlCj4+IGluZGV4IGY0Y2QyNmUxNWQuLmUx NDczMmI1NWMgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9NYWtl ZmlsZQo+PiArKysgYi94ZW4vZHJpdmVycy9wYXNzdGhyb3VnaC9hcm0vTWFrZWZpbGUKPj4gQEAg LTEsMiArMSwzIEBACj4+IMKgIG9iai15ICs9IGlvbW11Lm8KPj4gwqAgb2JqLXkgKz0gc21tdS5v Cj4+ICtvYmotJChDT05GSUdfQVJNX1NNTVVfdjMpICs9IHNtbXUtdjMubwo+PiBkaWZmIC0tZ2l0 IGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYyAKPj4gYi94ZW4vZHJpdmVy cy9wYXNzdGhyb3VnaC9hcm0vc21tdS12My5jCj4+IGluZGV4IGU2N2JhNmM0MGYuLmRmODE2MjY3 ODUgMTAwNjQ0Cj4+IC0tLSBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL2FybS9zbW11LXYzLmMK Pj4gKysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvYXJtL3NtbXUtdjMuYwo+PiBAQCAtMTgs MjggKzE4LDQxNCBAQAo+PiDCoMKgICogQXV0aG9yOiBXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25A YXJtLmNvbT4KPj4gwqDCoCAqCj4+IMKgwqAgKiBUaGlzIGRyaXZlciBpcyBwb3dlcmVkIGJ5IGJh ZCBjb2ZmZWUgYW5kIGJvbWJheSBtaXguCj4+ICsgKgo+PiArICoKPj4gKyAqIEJhc2VkIG9uIExp bnV4IGRyaXZlcnMvaW9tbXUvYXJtLXNtbXUtdjMuYwo+PiArICogPT4gY29tbWl0IDdhYTg2MTlh NjZhZWE1MmIxNDVlMDRjYmFiNGY4ZDZhNGU1ZjNmM2IKPj4gKyAqCj4+ICsgKiBYZW4gbW9kaWZp Y2F0aW9uczoKPj4gKyAqIFNhbWVlciBHb2VsIDxzYW1lZXIuZ29lbEBsaW5hcm8ub3JnPgo+PiAr ICogQ29weXJpZ2h0IChDKSAyMDE3LCBUaGUgTGludXggRm91bmRhdGlvbiwgQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KPj4gKyAqCj4+IMKgwqAgKi8KPj4gwqAgLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+ Cj4+IC0jaW5jbHVkZSA8bGludXgvYWNwaV9pb3J0Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9kbWEtaW9tbXUuaD4KPj4gLSNpbmNsdWRlIDxsaW51 eC9lcnIuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPj4gLSNpbmNsdWRlIDxs aW51eC9pb21tdS5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+PiAtI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+PiAtI2luY2x1ZGUgPGxpbnV4L21zaS5oPgo+PiAtI2luY2x1ZGUg PGxpbnV4L29mLmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+PiAtI2luY2x1 ZGUgPGxpbnV4L29mX2lvbW11Lmg+Cj4+IC0jaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K Pj4gLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPj4gLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KPj4gLQo+PiAtI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+Cj4+IC0KPj4gLSNp bmNsdWRlICJpby1wZ3RhYmxlLmgiCj4+ICsjaW5jbHVkZSA8eGVuL2FjcGkuaD4KPj4gKyNpbmNs dWRlIDx4ZW4vY29uZmlnLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2RlbGF5Lmg+Cj4+ICsjaW5jbHVk ZSA8eGVuL2Vycm5vLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2Vyci5oPgo+PiArI2luY2x1ZGUgPHhl bi9pcnEuaD4KPj4gKyNpbmNsdWRlIDx4ZW4vbGliLmg+Cj4+ICsjaW5jbHVkZSA8eGVuL2xpbnV4 X2NvbXBhdC5oPgo+PiArI2luY2x1ZGUgPHhlbi9saXN0Lmg+Cj4+ICsjaW5jbHVkZSA8eGVuL21t Lmg+Cj4+ICsjaW5jbHVkZSA8eGVuL3JidHJlZS5oPgo+PiArI2luY2x1ZGUgPHhlbi9zY2hlZC5o Pgo+PiArI2luY2x1ZGUgPHhlbi9zaXplcy5oPgo+PiArI2luY2x1ZGUgPHhlbi92bWFwLmg+Cj4+ ICsjaW5jbHVkZSA8YWNwaS9hY3BpX2lvcnQuaD4KPj4gKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+ Cj4+ICsjaW5jbHVkZSA8YXNtL2RldmljZS5oPgo+PiArI2luY2x1ZGUgPGFzbS9pby5oPgo+PiAr I2luY2x1ZGUgPGFzbS9wbGF0Zm9ybS5oPgo+PiArCj4+ICsvKiBBbGlhcyB0byBYZW4gZGV2aWNl IHRyZWUgaGVscGVycyAqLwo+PiArI2RlZmluZSBkZXZpY2Vfbm9kZSBkdF9kZXZpY2Vfbm9kZQo+ PiArI2RlZmluZSBvZl9waGFuZGxlX2FyZ3MgZHRfcGhhbmRsZV9hcmdzCj4+ICsjZGVmaW5lIG9m X2RldmljZV9pZCBkdF9kZXZpY2VfbWF0Y2gKPj4gKyNkZWZpbmUgb2ZfbWF0Y2hfbm9kZSBkdF9t YXRjaF9ub2RlCj4+ICsjZGVmaW5lIG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwbmFtZSwgb3V0 KSAKPj4gKCFkdF9wcm9wZXJ0eV9yZWFkX3UzMihucCwgcG5hbWUsIG91dCkpCj4+ICsjZGVmaW5l IG9mX3Byb3BlcnR5X3JlYWRfYm9vbCBkdF9wcm9wZXJ0eV9yZWFkX2Jvb2wKPj4gKyNkZWZpbmUg b2ZfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MgZHRfcGFyc2VfcGhhbmRsZV93aXRoX2FyZ3MKPj4g Kwo+PiArLyogWGVuOiBIZWxwZXJzIHRvIGdldCBkZXZpY2UgTU1JTyBhbmQgSVJRcyAqLwo+PiAr c3RydWN0IHJlc291cmNlIHsKPj4gK8KgwqDCoCB1NjQgYWRkcjsKPj4gK8KgwqDCoCB1NjQgc2l6 ZTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgdHlwZTsKPj4gK307Cj4+ICsKPj4gKyNkZWZpbmUg cmVzb3VyY2Vfc2l6ZShyZXMpICgocmVzKS0+c2l6ZSkKPj4gKwo+PiArI2RlZmluZSBwbGF0Zm9y bV9kZXZpY2UgZGV2aWNlCj4+ICsKPj4gKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0gMAo+PiArI2Rl ZmluZSBJT1JFU09VUkNFX0lSUSAxCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgKnBs YXRmb3JtX2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIAo+PiAqcGRldiwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2ln bmVkIGludCB0eXBlLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bSkKPj4gK3sKPj4gK8KgwqDCoCAvKgo+PiArwqDC oMKgwqAgKiBUaGUgcmVzb3VyY2UgaXMgb25seSB1c2VkIGJldHdlZW4gMiBjYWxscyBvZiAKPj4g cGxhdGZvcm1fZ2V0X3Jlc291cmNlLgo+PiArwqDCoMKgwqAgKiBJdCdzIHF1aXRlIHVnbHkgYnV0 IGl0J3MgYXZvaWQgdG8gYWRkIHRvbyBtdWNoIGNvZGUgaW4gdGhlIHBhcnQKPj4gK8KgwqDCoMKg ICogaW1wb3J0ZWQgZnJvbSBMaW51eAo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBzdGF0aWMg c3RydWN0IHJlc291cmNlIHJlczsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKmlv cnRfbm9kZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKm5vZGVfc21tdV9k YXRhOwo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKgwqAgcmVzLnR5cGUgPSB0 eXBlOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoICh0eXBlKSB7Cj4+ICvCoMKgwqAgY2FzZSBJT1JF U09VUkNFX01FTToKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChwZGV2LT50eXBlID09IERFVl9BQ1BJ KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IDE7Cj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlvcnRfbm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbm9kZV9zbW11X2RhdGEgPQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIChzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVfdjMgKilpb3J0X25vZGUtPm5vZGVfZGF0YTsKPj4g Kwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobm9kZV9zbW11X2RhdGEgIT0gTlVMTCkg ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlcy5hZGRyID0gbm9kZV9zbW11 X2RhdGEtPmJhc2VfYWRkcmVzczsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXMuc2l6ZSA9IFNaXzEyOEs7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gMDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgfSBl bHNlIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZHRfZGV2aWNlX2dldF9hZGRy ZXNzKGRldl90b19kdChwZGV2KSwgbnVtLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZyZXMuYWRkciwgJnJlcy5zaXplKTsKPj4gK8Kg wqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICgocmV0KSA/IE5V TEwgOiAmcmVzKTsKPj4gKwo+PiArwqDCoMKgIGNhc2UgSU9SRVNPVVJDRV9JUlE6Cj4+ICvCoMKg wqDCoMKgwqDCoCAvKiBBQ1BJIGNhc2Ugbm90IGltcGxlbWVudGVkIGFzIHRoZXJlIGlzIG5vIHVz ZSBjYXNlIGZvciBpdCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcGxhdGZvcm1fZ2V0X2ly cShkZXZfdG9fZHQocGRldiksIG51bSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQg PCAwKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4gKwo+PiArwqDC oMKgwqDCoMKgwqAgcmVzLmFkZHIgPSByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXMuc2l6ZSA9 IDE7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAmcmVzOwo+PiArCj4+ICvCoMKgwqAg ZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBOVUxMOwo+PiArwqDCoMKgIH0KPj4g K30KPj4gKwo+PiArc3RhdGljIGludCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LCAKPj4gY29uc3QgY2hhciAqbmFtZSkKPj4gK3sKPj4gK8KgwqDC oCBjb25zdCBzdHJ1Y3QgZHRfcHJvcGVydHkgKmR0cHJvcDsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNw aV9pb3J0X25vZGUgKmlvcnRfbm9kZTsKPj4gK8KgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X3NtbXVf djMgKm5vZGVfc21tdV9kYXRhOwo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvCoMKg wqAgaWYgKHBkZXYtPnR5cGUgPT0gREVWX0FDUEkpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlvcnRf bm9kZSA9IHBkZXYtPmFjcGlfbm9kZTsKPj4gK8KgwqDCoMKgwqDCoMKgIG5vZGVfc21tdV9kYXRh ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAKPj4gKilpb3J0X25vZGUtPm5vZGVfZGF0YTsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKG5vZGVfc21tdV9kYXRhICE9IE5VTEwpIHsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFzdHJjbXAobmFtZSwgImV2ZW50cSIpKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IG5vZGVfc21tdV9kYXRhLT5ldmVu dF9nc2l2Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICghc3RyY21wKG5hbWUs ICJwcmlxIikpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gbm9kZV9z bW11X2RhdGEtPnByaV9nc2l2Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlIGlmICgh c3RyY21wKG5hbWUsICJjbWRxLXN5bmMiKSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+c3luY19nc2l2Owo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBlbHNlIGlmICghc3RyY21wKG5hbWUsICJnZXJyb3IiKSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBub2RlX3NtbXVfZGF0YS0+Z2Vycl9nc2l2Owo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9IGVs c2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgZHRwcm9wID0gZHRfZmluZF9wcm9wZXJ0eShkZXZfdG9f ZHQocGRldiksIAo+PiAiaW50ZXJydXB0LW5hbWVzIiwgTlVMTCk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoIWR0cHJvcCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7 Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZHRwcm9wLT52YWx1ZSkKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9EQVRBOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgIHJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBYZW46IEhlbHBlcnMgZm9y IERNQSBhbGxvY2F0aW9uLiBKdXN0IHRoZSBmdW5jdGlvbiBuYW1lIGlzIHJldXNlZCAKPj4gZm9y Cj4+ICsgKiBwb3J0aW5nIGNvZGUgdGhlc2UgYWxsb2NhdGlvbiBhcmUgbm90IG1hbmFnZWQgYWxs b2NhdGlvbnMKPj4gKyAqLwo+PiArCj4+ICtzdGF0aWMgdm9pZCAqZG1hbV9hbGxvY19jb2hlcmVu dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCj4gSSBiZWxpZXZl IHRoZSBmb3JtYXR0aW5nIG5lZWRzIHRvIGJlIGNoZWNrZWQuCj4+ICt7Cj4+ICvCoMKgwqAgdm9p ZCAqdmFkZHI7Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQgPSBzaXplOwo+PiAr Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogX3h6YWxsb2MgcmVxdWlyZXMgdGhhdCB0aGUg KGFsaWduICYgKGFsaWduIC0xKSkgPSAwLiBNb3N0IG9mIHRoZQo+PiArwqDCoMKgwqAgKiBhbGxv Y2F0aW9ucyBpbiBTTU1VIGNvZGUgc2hvdWxkIHNlbmQgdGhlIHJpZ2h0IHZhbHVlIGZvciAKPj4g c2l6ZS4gSW4KPj4gK8KgwqDCoMKgICogY2FzZSB0aGlzIGlzIG5vdCB0cnVlIHByaW50IGEgd2Fy bmluZyBhbmQgYWxpZ24gdG8gdGhlIHNpemUgb2YgYQo+PiArwqDCoMKgwqAgKiAodm9pZCAqKQo+ PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoc2l6ZSAmIChzaXplIC0gMSkpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgIGRldl93YXJuKGRldiwgIkZpeGluZyBhbGlnbm1lbnQgZm9yIHRoZSBETUEg YnVmZmVyXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFsaWdubWVudCA9IHNpemVvZih2b2lkICop Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHZhZGRyID0gX3h6YWxsb2Moc2l6ZSwgYWxp Z25tZW50KTsKPj4gK8KgwqDCoCBpZiAoIXZhZGRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZf ZXJyKGRldiwgIkRNQSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gTlVMTDsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCAqZG1hX2hhbmRsZSA9IHZp cnRfdG9fbWFkZHIodmFkZHIpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHZhZGRyOwo+PiArfQo+ PiArCj4+ICsKPj4gK3N0YXRpYyB2b2lkIGRtYW1fZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNl ICpkZXYsIHNpemVfdCBzaXplLCB2b2lkIAo+PiAqdmFkZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKPiBzYW1lCj4+ICt7Cj4+ICvCoMKgwqAgeGZy ZWUodmFkZHIpOwo+PiArfQo+PiArCj4+ICsvKiBYZW46IFN0dWIgb3V0IERNQSBkb21haW4gcmVs YXRlZCBmdW5jdGlvbnMgKi8KPj4gKyNkZWZpbmUgaW9tbXVfZ2V0X2RtYV9jb29raWUoZG9tKSAw Cj4+ICsjZGVmaW5lIGlvbW11X3B1dF9kbWFfY29va2llKGRvbSkKPj4gKwo+PiArLyogWGVuOiBT dHViIG91dCBtb2R1bGUgcGFyYW0gcmVsYXRlZCBmdW5jdGlvbiAqLwo+PiArI2RlZmluZSBtb2R1 bGVfcGFyYW1fbmFtZWQoYSwgYiwgYywgZCkKPj4gKyNkZWZpbmUgTU9EVUxFX1BBUk1fREVTQyhh LCBiKQo+PiArCj4+ICsjZGVmaW5lIGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZCwgYikgMAo+ PiArCj4+ICsjZGVmaW5lIG9mX2RtYV9pc19jb2hlcmVudChuKSAwCj4+ICsKPj4gKyNkZWZpbmUg TU9EVUxFX0RFVklDRV9UQUJMRSh0eXBlLCBuYW1lKQo+PiArCj4+ICtzdGF0aWMgdm9pZCBfX2lv bWVtICpkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc3RydWN0IGRldmljZSAqZGV2LAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHJlc291cmNlICpy ZXMpCj4+ICt7Cj4+ICvCoMKgwqAgdm9pZCBfX2lvbWVtICpwdHI7Cj4+ICsKPj4gK8KgwqDCoCBp ZiAoIXJlcyB8fCByZXMtPnR5cGUgIT0gSU9SRVNPVVJDRV9NRU0pIHsKPj4gK8KgwqDCoMKgwqDC oMKgIGRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvdXJjZVxuIik7Cj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCBw dHIgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5hZGRyLCByZXMtPnNpemUpOwo+PiArwqDCoMKgIGlm ICghcHRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgImlvcmVtYXAgZmFpbGVkIChhZGRyIDB4JSJQUkl4NjQiIHNpemUgMHglIlBS SXg2NCIpXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXMtPmFkZHIsIHJlcy0+c2l6 ZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gK8KgwqDC oCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gcHRyOwo+PiArfQo+PiArCj4+ICsvKiBYZW46IENv bXBhdGliaWxpdHkgZGVmaW5lIGZvciBpb21tdV9kb21haW5fZ2VvbWV0cnkuKi8KPj4gK3N0cnVj dCBpb21tdV9kb21haW5fZ2VvbWV0cnkgewo+PiArwqDCoMKgIGRtYV9hZGRyX3QgYXBlcnR1cmVf c3RhcnQ7IC8qIEZpcnN0IGFkZHJlc3MgdGhhdCBjYW4gYmUgCj4+IG1hcHBlZMKgwqDCoCAqLwo+ PiArwqDCoMKgIGRtYV9hZGRyX3QgYXBlcnR1cmVfZW5kO8KgwqAgLyogTGFzdCBhZGRyZXNzIHRo YXQgY2FuIGJlIAo+PiBtYXBwZWTCoMKgwqDCoCAqLwo+PiArwqDCoMKgIGJvb2wgZm9yY2VfYXBl cnR1cmU7wqDCoMKgwqDCoMKgIC8qIERNQSBvbmx5IGFsbG93ZWQgaW4gbWFwcGFibGUgCj4+IHJh bmdlPyAqLwo+PiArfTsKPj4gKwo+PiArCj4+ICsvKiBYZW46IFR5cGUgZGVmaW5pdGlvbnMgZm9y IGlvbW11X2RvbWFpbiAqLwo+PiArI2RlZmluZSBJT01NVV9ET01BSU5fVU5NQU5BR0VEIDAKPj4g KyNkZWZpbmUgSU9NTVVfRE9NQUlOX0RNQSAxCj4+ICsjZGVmaW5lIElPTU1VX0RPTUFJTl9JREVO VElUWSAyCj4+ICsKPj4gKy8qIFhlbjogRHVtbXkgaW9tbXVfZG9tYWluICovCj4+ICtzdHJ1Y3Qg aW9tbXVfZG9tYWluIHsKPj4gK8KgwqDCoCAvKiBSdW50aW1lIFNNTVUgY29uZmlndXJhdGlvbiBm b3IgdGhpcyBpb21tdV9kb21haW4gKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZG9tYWlu wqDCoMKgwqDCoMKgwqAgKnByaXY7Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IHR5cGU7Cj4+ICsK Pj4gK8KgwqDCoCAvKiBEdW1teSBjb21wYXRpYmlsaXR5IGRlZmluZXMgKi8KPj4gK8KgwqDCoCB1 bnNpZ25lZCBsb25nIHBnc2l6ZV9iaXRtYXA7Cj4+ICvCoMKgwqAgc3RydWN0IGlvbW11X2RvbWFp bl9nZW9tZXRyeSBnZW9tZXRyeTsKPj4gKwo+PiArwqDCoMKgIGF0b21pY190IHJlZjsKPj4gK8Kg wqDCoCAvKgo+PiArwqDCoMKgwqAgKiBVc2VkIHRvIGxpbmsgaW9tbXVfZG9tYWluIGNvbnRleHRz IGZvciBhIHNhbWUgZG9tYWluLgo+PiArwqDCoMKgwqAgKiBUaGVyZSBpcyBhdCBsZWFzdCBvbmUg cGVyLVNNTVUgdG8gdXNlZCBieSB0aGUgZG9tYWluLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDC oCBzdHJ1Y3QgbGlzdF9oZWFkwqDCoMKgwqDCoMKgwqAgbGlzdDsKPj4gK307Cj4+ICsKPj4gKy8q IFhlbjogRGVzY3JpYmVzIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciBhIFhlbiBkb21haW4gKi8K Pj4gK3N0cnVjdCBhcm1fc21tdV94ZW5fZG9tYWluIHsKPj4gK8KgwqDCoCBzcGlubG9ja190wqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBsb2NrOwo+PiArwqDCoMKgIC8qIExpc3Qgb2YgaW9tbXUgZG9t YWlucyBhc3NvY2lhdGVkIHRvIHRoaXMgZG9tYWluICovCj4+ICvCoMKgwqAgc3RydWN0IGxpc3Rf aGVhZMKgwqDCoMKgwqDCoMKgIGNvbnRleHRzOwo+PiArfTsKPj4gKwo+PiArLyoKPj4gKyAqIFhl bjogSW5mb3JtYXRpb24gYWJvdXQgZWFjaCBkZXZpY2Ugc3RvcmVkIGluIGRldi0+YXJjaGRhdGEu aW9tbXUKPj4gKyAqCj4+ICsgKiBUaGUgZGV2LT5hcmNoZGF0YS5pb21tdSBzdG9yZXMgdGhlIGlv bW11X2RvbWFpbiAocnVudGltZSAKPj4gY29uZmlndXJhdGlvbiBvZgo+PiArICogdGhlIFNNTVUp Lgo+PiArICovCj4+ICtzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RldmljZSB7Cj4+ICvCoMKgwqAgc3Ry dWN0IGlvbW11X2RvbWFpbiAqZG9tYWluOwo+PiArfTsKPj4gKwo+IEFzIHRoaXMgaXMgYSB4ZW4g c3BlY2lmaWMgY29kZSwgY2FuIHRoZSB2YXJpYWJsZSBuYW1lcyBiZSB1c2VkIAo+IGFwcHJvcHJp YXRlbHkuCj4gUmVwZWF0aW5nIG15IGNvbW1lbnTCoCBmcm9tIGVhcmxpZXIgdmVyc2lvbi4KPiBh IGRvbWFpbiBpc8KgIHVzdWFsbHkgYSBWTSBpbiBYZW4uIFNvIGl0IGlzIGEgYml0IGNvbmZ1c2lu ZyB0byB1c2UgCj4gZG9tYWluIGZvciBpb21tdV9kb21haW4uCj4+ICsvKgo+PiArICogWGVuOiBp b19wZ3RhYmxlIGNvbXBhdGliaWxpdHkgZGVmaW5lcy4KPj4gKyAqIE1vc3Qgb2YgdGhlc2UgYXJl IHRvIHBvcnQgaW4gdGhlIFMxIHRyYW5zbGF0aW9uIGNvZGUgYXMgaXMuCj4+ICsgKi8KPj4gK3N0 cnVjdCBpb19wZ3RhYmxlX29wcyB7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgaW9tbXVfZ2F0aGVy X29wcyB7Cj4+ICvCoMKgwqAgdm9pZCAoKnRsYl9mbHVzaF9hbGwpKHZvaWQgKmNvb2tpZSk7Cj4+ ICvCoMKgwqAgdm9pZCAoKnRsYl9hZGRfZmx1c2gpKHVuc2lnbmVkIGxvbmcgaW92YSwgc2l6ZV90 IHNpemUsIHNpemVfdCAKPj4gZ3JhbnVsZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgYm9vbCBsZWFmLCB2b2lkICpjb29raWUpOwo+PiArwqDCoMKgIHZvaWQgKCp0bGJf c3luYykodm9pZCAqY29va2llKTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBpb19wZ3RhYmxlX2Nm ZyB7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTlM6 IChBUk0gZm9ybWF0cykgU2V0IE5TIGFuZCBOU1RBQkxFIAo+PiBiaXRzIGluCj4+ICvCoMKgwqDC oCAqwqDCoMKgIHN0YWdlIDEgUFRFcywgZm9yIGhhcmR3YXJlIHdoaWNoIGluc2lzdHMgb24gdmFs aWRhdGluZyB0aGVtCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGV2ZW4gaW7CoMKgwqAgbm9uLXNlY3Vy ZSBzdGF0ZSB3aGVyZSB0aGV5IHNob3VsZCBub3JtYWxseSBiZSAKPj4gaWdub3JlZC4KPj4gK8Kg wqDCoMKgICoKPj4gK8KgwqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNUzogSWdub3Jl IHRoZSBJT01NVV9SRUFELCBJT01NVV9XUklURSAKPj4gYW5kCj4+ICvCoMKgwqDCoCAqwqDCoMKg IElPTU1VX05PRVhFQyBmbGFncyBhbmQgbWFwIGV2ZXJ5dGhpbmcgd2l0aCBmdWxsIGFjY2Vzcywg Zm9yCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGhhcmR3YXJlIHdoaWNoIGRvZXMgbm90IGltcGxlbWVu dCB0aGUgcGVybWlzc2lvbnMgb2YgYSBnaXZlbgo+PiArwqDCoMKgwqAgKsKgwqDCoCBmb3JtYXQs IGFuZC9vciByZXF1aXJlcyBzb21lIGZvcm1hdC1zcGVjaWZpYyBkZWZhdWx0IHZhbHVlLgo+PiAr wqDCoMKgwqAgKgo+PiArwqDCoMKgwqAgKiBJT19QR1RBQkxFX1FVSVJLX1RMQklfT05fTUFQOiBJ ZiB0aGUgZm9ybWF0IGZvcmJpZHMgY2FjaGluZyAKPj4gaW52YWxpZAo+PiArwqDCoMKgwqAgKsKg wqDCoCAodW5tYXBwZWQpIGVudHJpZXMgYnV0IHRoZSBoYXJkd2FyZSBtaWdodCBkbyBzbyBhbnl3 YXksIAo+PiBwZXJmb3JtCj4+ICvCoMKgwqDCoCAqwqDCoMKgIFRMQiBtYWludGVuYW5jZSB3aGVu IG1hcHBpbmcgYXMgd2VsbCBhcyB3aGVuIHVubWFwcGluZy4KPj4gK8KgwqDCoMKgICoKPj4gK8Kg wqDCoMKgICogSU9fUEdUQUJMRV9RVUlSS19BUk1fTVRLXzRHQjogKEFSTSB2N3MgZm9ybWF0KSBT ZXQgYml0IDkgaW4gYWxsCj4+ICvCoMKgwqDCoCAqwqDCoMKgIFBURXMsIGZvciBNZWRpYXRlayBJ T01NVXMgd2hpY2ggdHJlYXQgaXQgYXMgYSAzM3JkIGFkZHJlc3MgCj4+IGJpdAo+PiArwqDCoMKg wqAgKsKgwqDCoCB3aGVuIHRoZSBTb0MgaXMgaW4gIjRHQiBtb2RlIiBhbmQgdGhleSBjYW4gb25s eSBhY2Nlc3MgdGhlIAo+PiBoaWdoCj4+ICvCoMKgwqDCoCAqwqDCoMKgIHJlbWFwIG9mIERSQU0g KDB4MV8wMDAwMDAwMCB0byAweDFfZmZmZmZmZmYpLgo+PiArwqDCoMKgwqAgKgo+PiArwqDCoMKg wqAgKiBJT19QR1RBQkxFX1FVSVJLX05PX0RNQTogR3VhcmFudGVlcyB0aGF0IHRoZSB0YWJsZXMg d2lsbCBvbmx5IAo+PiBldmVyCj4+ICvCoMKgwqDCoCAqwqDCoMKgIGJlIGFjY2Vzc2VkIGJ5IGEg ZnVsbHkgY2FjaGUtY29oZXJlbnQgSU9NTVUgb3IgQ1BVIChlLmcuIAo+PiBmb3IgYQo+PiArwqDC oMKgwqAgKsKgwqDCoCBzb2Z0d2FyZS1lbXVsYXRlZCBJT01NVSksIHN1Y2ggdGhhdCBwYWdldGFi bGUgdXBkYXRlcyBuZWVkIAo+PiBub3QKPj4gK8KgwqDCoMKgICrCoMKgwqAgYmUgdHJlYXRlZCBh cyBleHBsaWNpdCBETUEgZGF0YS4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgI2RlZmluZSBJ T19QR1RBQkxFX1FVSVJLX0FSTV9OU8KgwqDCoMKgwqDCoMKgIEJJVCgwKQo+PiArwqDCoMKgICNk ZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19QRVJNU8KgwqDCoCBCSVQoMSkKPj4gK8KgwqDCoCAj ZGVmaW5lIElPX1BHVEFCTEVfUVVJUktfVExCSV9PTl9NQVDCoMKgwqAgQklUKDIpCj4+ICvCoMKg wqAgI2RlZmluZSBJT19QR1RBQkxFX1FVSVJLX0FSTV9NVEtfNEdCwqDCoMKgIEJJVCgzKQo+PiAr wqDCoMKgICNkZWZpbmUgSU9fUEdUQUJMRV9RVUlSS19OT19ETUHCoMKgwqDCoMKgwqDCoCBCSVQo NCkKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBxdWlya3M7 Cj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGdzaXplX2Jp dG1hcDsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlhczsK Pj4gK8KgwqDCoCB1bnNpZ25lZCBpbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG9hczsKPj4gK8Kg wqDCoCBjb25zdCBzdHJ1Y3QgaW9tbXVfZ2F0aGVyX29wc8KgwqDCoCAqdGxiOwo+PiArwqDCoMKg IHN0cnVjdCBkZXZpY2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICppb21tdV9kZXY7Cj4+ICsKPj4g K8KgwqDCoCAvKiBMb3ctbGV2ZWwgZGF0YSBzcGVjaWZpYyB0byB0aGUgdGFibGUgZm9ybWF0ICov Cj4+ICvCoMKgwqAgdW5pb24gewo+PiArwqDCoMKgwqDCoMKgwqAgc3RydWN0IHsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHR0YnJbMl07Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHU2NMKgwqDCoCB0Y3I7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKgwqDC oCBtYWlyWzJdOwo+PiArwqDCoMKgwqDCoMKgwqAgfSBhcm1fbHBhZV9zMV9jZmc7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NMKg wqDCoCB2dHRicjsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTY0wqDCoMKgIHZ0Y3I7Cj4+ ICvCoMKgwqDCoMKgwqDCoCB9IGFybV9scGFlX3MyX2NmZzsKPj4gKwo+PiArwqDCoMKgwqDCoMKg wqAgc3RydWN0IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMywqDCoMKgIHR0YnJbMl07 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMsKgwqDCoCB0Y3I7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHUzMsKgwqDCoCBubXJyOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 MzLCoMKgwqAgcHJycjsKPj4gK8KgwqDCoMKgwqDCoMKgIH0gYXJtX3Y3c19jZmc7Cj4+ICvCoMKg wqAgfTsKPj4gK307Cj4+ICsKPj4gK2VudW0gaW9fcGd0YWJsZV9mbXQgewo+PiArwqDCoMKgIEFS TV8zMl9MUEFFX1MxLAo+PiArwqDCoMKgIEFSTV8zMl9MUEFFX1MyLAo+PiArwqDCoMKgIEFSTV82 NF9MUEFFX1MxLAo+PiArwqDCoMKgIEFSTV82NF9MUEFFX1MyLAo+PiArwqDCoMKgIEFSTV9WN1Ms Cj4+ICvCoMKgwqAgSU9fUEdUQUJMRV9OVU1fRk1UUywKPj4gK307Cj4+ICsKPj4gKy8qCj4+ICsg KiBYZW46IFRoZSBwZ3RhYmxlX29wcyBhcmUgdXNlZCBieSB0aGUgUzEgdHJhbnNsYXRpb25zLCBz byByZXR1cm4gCj4+IHRoZSBkdW1teQo+PiArICogYWRkcmVzcy4KPj4gKyAqLwo+PiArI2RlZmlu ZSBhbGxvY19pb19wZ3RhYmxlX29wcyhmLCBjLCBvKSAoKHN0cnVjdCBpb19wZ3RhYmxlX29wcyAq KTB4MSkKPj4gKyNkZWZpbmUgZnJlZV9pb19wZ3RhYmxlX29wcyhvKQo+PiArCj4+ICsvKiBYZW46 IERlZmluZSB3cmFwcGVyIGZvciByZXF1ZXN0aW5nIElSUXMgKi8KPj4gKyNkZWZpbmUgSVJRRl9P TkVTSE9UIDAKPj4gKwo+PiArdHlwZWRlZiB2b2lkICgqaXJxX2hhbmRsZXJfdCkoaW50LCB2b2lk ICosIHN0cnVjdCBjcHVfdXNlcl9yZWdzICopOwo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGludCBk ZXZtX3JlcXVlc3RfaXJxKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IAo+PiBpcnEs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXJxX2hhbmRsZXJfdCBo YW5kbGVyLCB1bnNpZ25lZCBsb25nIGlycWZsYWdzLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRldl9pZCkKPj4gK3sK Pj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBTTU1VdjMgaW1wbGVtZW50YXRpb24gY2FuIHN1 cHBvcnQgd2lyZWQgaW50ZXJydXB0IG91dHB1dHMgCj4+IHRoYXQgYXJlCj4+ICvCoMKgwqDCoCAq IGVkZ2UtdHJpZ2dlcmVkLiBTZXQgdGhlIGlycSB0eXBlIGFzIHBlciB0aGUgc3BlYy4KPj4gK8Kg wqDCoMKgICovCj4+ICvCoMKgwqAgaXJxX3NldF90eXBlKGlycSwgSVJRX1RZUEVfRURHRV9CT1RI KTsKPj4gK8KgwqDCoCByZXR1cm4gcmVxdWVzdF9pcnEoaXJxLCBpcnFmbGFncywgaGFuZGxlciwg ZGV2bmFtZSwgZGV2X2lkKTsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFhlbiBkb2VzIG5vdCBo YXZlIGEgY29uY2VwdCBvZiB0aHJlYWRlZCBpcnEsIGJ1dCB3ZSBjYW4gdXNlIAo+PiB0YXNrbGV0 cyB0bwo+PiArICogYWNoaWV2ZSB0aGUgZGVzaXJlZCBmdW5jdGlvbmFsaXR5IGFzIG5lZWRlZC4K Pj4gKyAqLwo+PiAraW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc3RydWN0IGRldmljZSAq ZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCAKPj4gaXJxX2hhbmRsZXJfdCBoYW5kbGVyLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpcnFfaGFuZGxlcl90IHRocmVhZF9mbiwg dW5zaWduZWQgbG9uZyBpcnFmbGFncywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29uc3QgY2hhciAqZGV2bmFtZSwgdm9pZCAqZGV2X2lkKQo+PiArewo+PiArwqDCoMKg IHJldHVybiBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCB0aHJlYWRfZm4sIGlycWZsYWdzLCBk ZXZuYW1lLCAKPj4gZGV2X2lkKTsKPj4gK30KPj4gKwo+PiArLyogWGVuOiBUaGUgbXV0ZXggaXMg dXNlZCBvbmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBzbyB0aGUgdHlwZWNhc3QgCj4+IGlzIHNh ZmUgKi8KPj4gKyNkZWZpbmUgbXV0ZXggc3BpbmxvY2sKPj4gKyNkZWZpbmUgbXV0ZXhfaW5pdCBz cGluX2xvY2tfaW5pdAo+PiArI2RlZmluZSBtdXRleF9sb2NrIHNwaW5fbG9jawo+PiArI2RlZmlu ZSBtdXRleF91bmxvY2sgc3Bpbl91bmxvY2sKPj4gKwo+PiArI2RlZmluZSByZWFkeF9wb2xsX3Rp bWVvdXQob3AsIGFkZHIsIHZhbCwgY29uZCwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpIFwKPj4gKyh7 IFwKPj4gK8KgwqDCoCBzX3RpbWVfdCBkZWFkbGluZSA9IE5PVygpICsgTUlDUk9TRUNTKHRpbWVv dXRfdXMpOyBcCj4+ICvCoMKgwqAgZm9yICg7OykgeyBcCj4+ICvCoMKgwqDCoMKgwqDCoCAodmFs KSA9IG9wKGFkZHIpOyBcCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY29uZCkgXAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazsgXAo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKE5PVygpID4g ZGVhZGxpbmUpIHsgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodmFsKSA9IG9wKGFkZHIp OyBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOyBcCj4+ICvCoMKgwqDCoMKgwqDC oCB9IFwKPj4gK8KgwqDCoCB1ZGVsYXkoc2xlZXBfdXMpOyBcCj4+ICvCoMKgwqAgfSBcCj4+ICvC oMKgwqAgKGNvbmQpID8gMCA6IC1FVElNRURPVVQ7IFwKPj4gK30pCj4+ICsKPj4gKyNkZWZpbmUg cmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQoYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgCj4+ IHRpbWVvdXRfdXMpIFwKPj4gK8KgwqDCoCByZWFkeF9wb2xsX3RpbWVvdXQocmVhZGxfcmVsYXhl ZCwgYWRkciwgdmFsLCBjb25kLCBkZWxheV91cywgCj4+IHRpbWVvdXRfdXMpCj4+ICsKPj4gKyNk ZWZpbmUgVkFfQklUUyAwIC8qIE9ubHkgbmVlZGVkIGZvciBTMSB0cmFuc2xhdGlvbnMgKi8KPj4g wqAgwqAgLyogTU1JTyByZWdpc3RlcnMgKi8KPj4gwqAgI2RlZmluZSBBUk1fU01NVV9JRFIwwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAweDAKPj4gQEAgLTQzMyw2ICs4MTksNyBAQCBlbnVtIHByaV9y ZXNwIHsKPj4gwqDCoMKgwqDCoCBQUklfUkVTUF9TVUNDLAo+PiDCoCB9Owo+PiDCoCArI2lmIDAg LyogWGVuOiBObyBNU0kgc3VwcG9ydCBpbiB0aGlzIGl0ZXJhdGlvbiAqLwo+PiDCoCBlbnVtIGFy bV9zbW11X21zaV9pbmRleCB7Cj4+IMKgwqDCoMKgwqAgRVZUUV9NU0lfSU5ERVgsCj4+IMKgwqDC oMKgwqAgR0VSUk9SX01TSV9JTkRFWCwKPj4gQEAgLTQ1Nyw2ICs4NDQsNyBAQCBzdGF0aWMgcGh5 c19hZGRyX3QgCj4+IGFybV9zbW11X21zaV9jZmdbQVJNX1NNTVVfTUFYX01TSVNdWzNdID0gewo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgQVJNX1NNTVVfUFJJUV9JUlFfQ0ZHMiwKPj4gwqDCoMKgwqDC oCB9LAo+PiDCoCB9Owo+PiArI2VuZGlmCj4+IMKgIMKgIHN0cnVjdCBhcm1fc21tdV9jbWRxX2Vu dCB7Cj4+IMKgwqDCoMKgwqAgLyogQ29tbW9uIGZpZWxkcyAqLwo+PiBAQCAtNTYxLDYgKzk0OSw4 IEBAIHN0cnVjdCBhcm1fc21tdV9zMl9jZmcgewo+PiDCoMKgwqDCoMKgIHUxNsKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB2bWlkOwo+PiDCoMKgwqDCoMKgIHU2NMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB2dHRicjsKPj4gwqDCoMKgwqDCoCB1NjTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgdnRjcjsKPj4gK8KgwqDCoCAvKiBYZW46IERvbWFpbiBhc3NvY2lhdGVk IHRvIHRoaXMgY29uZmlndXJhdGlvbiAqLwo+PiArwqDCoMKgIHN0cnVjdCBkb21haW7CoMKgwqDC oMKgwqDCoMKgwqDCoMKgICpkb21haW47Cj4+IMKgIH07Cj4+IMKgIMKgIHN0cnVjdCBhcm1fc21t dV9zdHJ0YWJfZW50IHsKPj4gQEAgLTYzNSw5ICsxMDI1LDI1IEBAIHN0cnVjdCBhcm1fc21tdV9k ZXZpY2Ugewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9zdHJ0YWJfY2ZnwqDCoMKgIHN0 cnRhYl9jZmc7Cj4+IMKgIMKgwqDCoMKgwqAgLyogSU9NTVUgY29yZSBjb2RlIGhhbmRsZSAqLwo+ PiArI2lmIDAgLypYZW46IEdlbmVyaWMgaW9tbXVfZGV2aWNlIHJlZiBub3QgbmVlZGVkIGhlcmUg Ki8KPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZGV2aWNlwqDCoMKgwqDCoMKgwqAgaW9tbXU7 Cj4+ICsjZW5kaWYKPiBJcyBpdCBjbGVhbiB0byBwdXQgI2lmIDAsIGNhbiB0aGlzIGxpbmUgYmUg ZGVsZXRlZCBvciB1c2VkIHdpdGggYSAKPiBwcm9wZXIgbWFjcm8KPj4gK8KgwqDCoCAvKiBYZW46 IE5lZWQgdG8ga2VlcCBhIGxpc3Qgb2YgU01NVSBkZXZpY2VzICovCj4+ICvCoMKgwqAgc3RydWN0 IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZpY2VzOwo+PiArwqDC oMKgIC8qIFhlbjogVGFza2xldHMgZm9yIGhhbmRsaW5nIGV2dHMvZmF1bHRzIGFuZCBwY2kgcGFn ZSByZXF1ZXN0IAo+PiBJUlFzKi8KPj4gK8KgwqDCoCBzdHJ1Y3QgdGFza2xldMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZXZ0cV90YXNrbGV0Owo+PiArwqDCoMKgIHN0cnVjdCB0YXNrbGV0wqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwcmlxX3Rhc2tsZXQ7Cj4+ICvCoMKgwqAgc3RydWN0IHRhc2tsZXTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbWJpbmVkX2lycV90YXNrbGV0Owo+PiDCoCB9Owo+PiDC oCArLyogWGVuOiBLZWVwIGEgbGlzdCBvZiBkZXZpY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRy aXZlciAqLwo+PiArc3RhdGljIERFRklORV9TUElOTE9DSyhhcm1fc21tdV9kZXZpY2VzX2xvY2sp Owo+PiArc3RhdGljIExJU1RfSEVBRChhcm1fc21tdV9kZXZpY2VzKTsKPj4gKy8qIFhlbjogSGVs cGVyIGZvciBmaW5kaW5nIGEgZGV2aWNlIHVzaW5nIGZ3bm9kZSAqLwo+PiArc3RhdGljCj4+ICtz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICphcm1fc21tdV9nZXRfYnlfZndub2RlKHN0cnVjdCBmd25v ZGVfaGFuZGxlIAo+PiAqZndub2RlKTsKPj4gKwo+PiArCj4+IMKgIC8qIFNNTVUgcHJpdmF0ZSBk YXRhIGZvciBlYWNoIG1hc3RlciAqLwo+PiDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEg ewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kZXZpY2XCoMKgwqDCoMKgwqDCoCAqc21t dTsKPj4gQEAgLTEyMzIsNyArMTYzOCw3IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2hhbmRsZV9w cHIoc3RydWN0IAo+PiBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIHU2NCAqZXZ0KQo+PiDCoCDCoMKg wqDCoMKgIGRldl9pbmZvKHNtbXUtPmRldiwgInVuZXhwZWN0ZWQgUFJJIHJlcXVlc3QgcmVjZWl2 ZWQ6XG4iKTsKPj4gwqDCoMKgwqDCoCBkZXZfaW5mbyhzbW11LT5kZXYsCj4+IC3CoMKgwqDCoMKg wqDCoMKgICJcdHNpZCAweCUwOHguMHglMDV4OiBbJXUlc10gJXNwcml2aWxlZ2VkICVzJXMlcyBh Y2Nlc3MgYXQgCj4+IGlvdmEgMHglMDE2bGx4XG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoCAiXHRz aWQgMHglMDh4LjB4JTA1eDogWyV1JXNdICVzcHJpdmlsZWdlZCAlcyVzJXMgYWNjZXNzIGF0IAo+ PiBpb3ZhICUjIiBQUkl4NjQgIlxuIiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2lkLCBzc2lk LCBncnBpZCwgbGFzdCA/ICJMIiA6ICIiLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBldnRbMF0g JiBQUklRXzBfUEVSTV9QUklWID8gIiIgOiAidW4iLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBl dnRbMF0gJiBQUklRXzBfUEVSTV9SRUFEID8gIlIiIDogIiIsCj4+IEBAIC0xMzQyLDEwICsxNzQ4 LDIwIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCAKPj4gYXJtX3NtbXVfY29tYmluZWRfaXJxX3RocmVh ZChpbnQgaXJxLCB2b2lkICpkZXYpCj4+IMKgwqDCoMKgwqAgcmV0dXJuIElSUV9IQU5ETEVEOwo+ PiDCoCB9Cj4+IMKgICsvKiBYZW46IEZvcndhcmQgZGVmaW5lIGZvciBjb21iaW5lZF9pcnEgdGFz a2xldCAqLwo+PiArc3RhdGljIHZvaWQgYXJtX3NtbXVfY29tYmluZWRfaXJxX3Rhc2tsZXQodW5z aWduZWQgbG9uZyBkZXYpOwo+PiArCj4+IMKgIHN0YXRpYyBpcnFyZXR1cm5fdCBhcm1fc21tdV9j b21iaW5lZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCj4+IMKgIHsKPj4gK8KgwqDC oCAvKiBYZW46IE5lZWQgYW4gc21tdSByZWZlcmVuY2UgdG8gc2NoZWR1bGUgdGhlIHRhc2tsZXQg Ki8KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1f c21tdV9kZXZpY2UgKilkZXY7Cj4+ICsKPj4gwqDCoMKgwqDCoCBhcm1fc21tdV9nZXJyb3JfaGFu ZGxlcihpcnEsIGRldik7Cj4+IMKgwqDCoMKgwqAgYXJtX3NtbXVfY21kcV9zeW5jX2hhbmRsZXIo aXJxLCBkZXYpOwo+PiArCj4+ICvCoMKgwqAgLypYZW46IE5vIHRocmVhZGVkIGlycS4gU28sIHNj aGVkdWxlIHRoZSByaWdodCB0YXNrbGV0Ki8KPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYo c21tdS0+Y29tYmluZWRfaXJxX3Rhc2tsZXQpKTsKPj4gKwo+PiDCoMKgwqDCoMKgIHJldHVybiBJ UlFfV0FLRV9USFJFQUQ7Cj4+IMKgIH0KPj4gwqAgQEAgLTEzNTgsNiArMTc3NCw2OSBAQCBzdGF0 aWMgdm9pZCBfX2FybV9zbW11X3RsYl9zeW5jKHN0cnVjdCAKPj4gYXJtX3NtbXVfZGV2aWNlICpz bW11KQo+PiDCoMKgwqDCoMKgIGFybV9zbW11X2NtZHFfaXNzdWVfY21kKHNtbXUsICZjbWQpOwo+ PiDCoCB9Cj4+IMKgICsvKgo+PiArICogWGVuOiBEZWZpbmUgdGhlIElSUSBoYW5kbGVycyBhbmQg dGFza2xldHMgZm9yIHhlbi4gVGhlIGxpbnV4IAo+PiBmdW5jdGlvbnMKPj4gKyAqIHdvdWxkIGJl IG1vZGlmaWVkIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGZvbGxvd2luZyAK Pj4gY29kZS4KPj4gKyAqLwo+PiArCj4+ICtzdGF0aWMgdm9pZCBhcm1fc21tdV9ldnRxX3Rhc2ts ZXQodW5zaWduZWQgbG9uZyBkZXYpCj4+ICt7Cj4+ICvCoMKgwqAgLyogVGhlIElSUSBudW1iZXIg aXMgbm90IHJlbGV2ZW50IGZvciB0aGUgZXZ0cSB0aHJlYWQgcHJvY2Vzc2luZyAqLwo+PiArwqDC oMKgIGFybV9zbW11X2V2dHFfdGhyZWFkKDAsICh2b2lkICopZGV2KTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIHZvaWQgYXJtX3NtbXVfcHJpcV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KQo+PiAr ewo+PiArwqDCoMKgIC8qIFRoZSBJUlEgbnVtYmVyIGlzIG5vdCByZWxldmVudCBmb3IgdGhlIHBy aXEgdGhyZWFkIHByb2Nlc3NpbmcgKi8KPj4gK8KgwqDCoCBhcm1fc21tdV9wcmlxX3RocmVhZCgw LCAodm9pZCAqKWRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NvbWJp bmVkX2lycV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2KQo+PiArewo+PiArwqDCoMKgIC8qIFRo ZSBJUlEgbnVtYmVyIGlzIG5vdCByZWxldmVudCBmb3IgdGhlIGNvbWJpbmVkIGlycSBoYW5kbGVy LiovCj4+ICvCoMKgwqAgYXJtX3NtbXVfY29tYmluZWRfaXJxX3RocmVhZCgwLCAodm9pZCAqKWRl dik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2V2dHFfdGhyZWFkX3hlbihp bnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKilk ZXY7Cj4+ICsKPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+ZXZ0cV90YXNrbGV0 KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X3ByaXFfdGhyZWFkX3hlbihp bnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBz dHJ1Y3QgYXJtX3NtbXVfZGV2aWNlICpzbW11ID0gKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKilk ZXY7Cj4+ICsKPj4gK8KgwqDCoCB0YXNrbGV0X3NjaGVkdWxlKCYoc21tdS0+cHJpcV90YXNrbGV0 KSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2NtZHFfc3luY19oYW5kbGVy X3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8Kg wqDCoCBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyB2b2lkIGFybV9zbW11X2dlcnJvcl9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpk ZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9nZXJyb3Jf aGFuZGxlcihpcnEsIGRldik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGFybV9zbW11X2Nv bWJpbmVkX2lycV9oYW5kbGVyX3hlbihpbnQgaXJxLCB2b2lkICpkZXYsCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPj4gK3sKPj4gK8KgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFuZGxlcihpcnEs IGRldik7Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgYXJtX3NtbXVfZXZ0cV90aHJlYWQgYXJtX3Nt bXVfZXZ0cV90aHJlYWRfeGVuCj4+ICsjZGVmaW5lIGFybV9zbW11X3ByaXFfdGhyZWFkIGFybV9z bW11X3ByaXFfdGhyZWFkX3hlbgo+PiArI2RlZmluZSBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxl ciBhcm1fc21tdV9jbWRxX3N5bmNfaGFuZGxlcl94ZW4KPj4gKyNkZWZpbmUgYXJtX3NtbXVfZ2Vy cm9yX2hhbmRsZXIgYXJtX3NtbXVfZ2Vycm9yX2hhbmRsZXJfeGVuCj4+ICsjZGVmaW5lIGFybV9z bW11X2NvbWJpbmVkX2lycV9oYW5kbGVyIGFybV9zbW11X2NvbWJpbmVkX2lycV9oYW5kbGVyX3hl bgo+PiArCj4+IMKgIHN0YXRpYyB2b2lkIGFybV9zbW11X3RsYl9zeW5jKHZvaWQgKmNvb2tpZSkK Pj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWlu ID0gY29va2llOwo+PiBAQCAtMTQxNSw2ICsxODk0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBp b21tdV9nYXRoZXJfb3BzIAo+PiBhcm1fc21tdV9nYXRoZXJfb3BzID0gewo+PiDCoMKgwqDCoMKg IC50bGJfc3luY8KgwqDCoCA9IGFybV9zbW11X3RsYl9zeW5jLAo+PiDCoCB9Owo+PiDCoCArI2lm IDAgLypYZW46IFVudXNlZCBmdW5jdGlvbmFsaXR5ICovCj4+IMKgIC8qIElPTU1VIEFQSSAqLwo+ PiDCoCBzdGF0aWMgYm9vbCBhcm1fc21tdV9jYXBhYmxlKGVudW0gaW9tbXVfY2FwIGNhcCkKPj4g wqAgewo+PiBAQCAtMTQyNyw2ICsxOTA3LDcgQEAgc3RhdGljIGJvb2wgYXJtX3NtbXVfY2FwYWJs ZShlbnVtIGlvbW11X2NhcCBjYXApCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7 Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4gwqAgwqAgc3RhdGljIHN0cnVj dCBpb21tdV9kb21haW4gKmFybV9zbW11X2RvbWFpbl9hbGxvYyh1bnNpZ25lZCB0eXBlKQo+PiDC oCB7Cj4+IEBAIC0xNTQ2LDkgKzIwMjcsMTYgQEAgc3RhdGljIGludCBhcm1fc21tdV9kb21haW5f ZmluYWxpc2VfczIoc3RydWN0IAo+PiBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9tYWluLAo+PiDC oMKgwqDCoMKgIGlmICh2bWlkIDwgMCkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiB2bWlk Owo+PiDCoCAtwqDCoMKgIGNmZy0+dm1pZMKgwqDCoCA9ICh1MTYpdm1pZDsKPj4gLcKgwqDCoCBj ZmctPnZ0dGJywqDCoMKgID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcudnR0YnI7Cj4+IC3C oMKgwqAgY2ZnLT52dGNywqDCoMKgID0gcGd0YmxfY2ZnLT5hcm1fbHBhZV9zMl9jZmcudnRjcjsK Pj4gK8KgwqDCoCAvKgo+PiArwqDCoMKgwqAgKiBYZW46IEdldCB0aGUgdHRiciBhbmQgdnRjciB2 YWx1ZXMKPj4gK8KgwqDCoMKgICogdnR0YnI6IFRoaXMgaXMgYSBzaGFyZWQgdmFsdWUgd2l0aCB0 aGUgZG9tYWluIHBhZ2UgdGFibGUKPj4gK8KgwqDCoMKgICogdnRjcjogVGhlIFRDUiBzZXR0aW5n cyBhcmUgdGhlIHNhbWUgYXMgQ1BVIHNpbmNlIHRoZSBwYWdlCj4+ICvCoMKgwqDCoCAqIHRhYmxl cyBhcmUgc2hhcmVkCj4+ICvCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKgwqAgY2ZnLT52bWlkwqDC oMKgID0gdm1pZDsKPj4gK8KgwqDCoCBjZmctPnZ0dGJywqDCoMKgID0gcGFnZV90b19tYWRkcihj ZmctPmRvbWFpbi0+YXJjaC5wMm0ucm9vdCk7Cj4+ICvCoMKgwqAgY2ZnLT52dGNywqDCoMKgID0g UkVBRF9TWVNSRUczMihWVENSX0VMMikgJiBTVFJUQUJfU1RFXzJfVlRDUl9NQVNLOwo+PiDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIEBAIC0xNjA0LDYgKzIwOTIsNyBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2RvbWFpbl9maW5hbGlzZShzdHJ1Y3QgCj4+IGlvbW11X2RvbWFpbiAq ZG9tYWluKQo+PiDCoMKgwqDCoMKgIGlmIChzbW11LT5mZWF0dXJlcyAmIEFSTV9TTU1VX0ZFQVRf Q09IRVJFTkNZKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcGd0YmxfY2ZnLnF1aXJrcyA9IElPX1BH VEFCTEVfUVVJUktfTk9fRE1BOwo+PiDCoCArwqDCoMKgIC8qIFhlbjogcGd0Ymxfb3BzIGdldHMg YW4gaW52YWxpZCBhZGRyZXNzICovCj4+IMKgwqDCoMKgwqAgcGd0Ymxfb3BzID0gYWxsb2NfaW9f cGd0YWJsZV9vcHMoZm10LCAmcGd0YmxfY2ZnLCBzbW11X2RvbWFpbik7Cj4+IMKgwqDCoMKgwqAg aWYgKCFwZ3RibF9vcHMpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4g QEAgLTE3MjEsNiArMjIxMCw3IEBAIG91dF91bmxvY2s6Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4gwqAgfQo+PiDCoCArI2lmIDAgLyogWGVuOiBVbnVzZWQgZnVuY3Rpb25hbGl0eSAqLwo+ IHNhbWUKPj4gwqAgc3RhdGljIGludCBhcm1fc21tdV9tYXAoc3RydWN0IGlvbW11X2RvbWFpbiAq ZG9tYWluLCB1bnNpZ25lZCBsb25nIAo+PiBpb3ZhLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90KQo+PiDCoCB7Cj4+ IEBAIC0xNzcyLDYgKzIyNjIsNyBAQCBzdHJ1Y3QgYXJtX3NtbXVfZGV2aWNlIAo+PiAqYXJtX3Nt bXVfZ2V0X2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKQo+PiDCoMKgwqDC oMKgIHB1dF9kZXZpY2UoZGV2KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZGV2ID8gZGV2X2dldF9k cnZkYXRhKGRldikgOiBOVUxMOwo+PiDCoCB9Cj4+ICsjZW5kaWYKPj4gwqAgwqAgc3RhdGljIGJv b2wgYXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUsIAo+ PiB1MzIgc2lkKQo+PiDCoCB7Cj4+IEBAIC0xNzgzLDcgKzIyNzQsMTQgQEAgc3RhdGljIGJvb2wg YXJtX3NtbXVfc2lkX2luX3JhbmdlKHN0cnVjdCAKPj4gYXJtX3NtbXVfZGV2aWNlICpzbW11LCB1 MzIgc2lkKQo+PiDCoMKgwqDCoMKgIHJldHVybiBzaWQgPCBsaW1pdDsKPj4gwqAgfQo+PiDCoCAr LyogWGVuOiBVbnVzZWQgKi8KPj4gKyNpZiAwCj4+IMKgIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3Bz IGFybV9zbW11X29wczsKPj4gKyNlbmRpZgo+PiArCj4+ICsvKiBYZW46IFJlZGVmaW5lIGFybV9z bW11X29wcyB0byB3aGF0IGZ3c3BlYyBzaG91bGQgZXZhbHVhdGUgKi8KPj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wczsKPj4gKyNkZWZpbmUgYXJtX3Nt bXVfb3BzIGFybV9zbW11X2lvbW11X29wcwo+PiDCoCDCoCBzdGF0aWMgaW50IGFybV9zbW11X2Fk ZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQo+PiDCoCB7Cj4+IEBAIC0xNzkxLDggKzIyODks MTEgQEAgc3RhdGljIGludCBhcm1fc21tdV9hZGRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgCj4+ICpk ZXYpCj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4gwqDCoMKg wqDCoCBzdHJ1Y3QgYXJtX3NtbXVfbWFzdGVyX2RhdGEgKm1hc3RlcjsKPj4gwqDCoMKgwqDCoCBz dHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11X2Z3c3BlYzsKPj4gKyNpZiAw IC8qWGVuOiBpb21tdV9ncm91cCBpcyBub3QgbmVlZGVkICovCj4+IMKgwqDCoMKgwqAgc3RydWN0 IGlvbW11X2dyb3VwICpncm91cDsKPj4gKyNlbmRpZgo+PiDCoCArwqDCoMKgIC8qIFhlbjogZndz cGVjLT5vcHMgYXJlIG5vdCBuZWVkZWQgKi8KPj4gwqDCoMKgwqDCoCBpZiAoIWZ3c3BlYyB8fCBm d3NwZWMtPm9wcyAhPSAmYXJtX3NtbXVfb3BzKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FTk9ERVY7Cj4+IMKgwqDCoMKgwqAgLyoKPj4gQEAgLTE4MzAsNiArMjMzMSwxMSBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAKPj4gKmRldikKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCB9Cj4+IMKgICsvKgo+PiArICogWGVuOiBE byBub3QgbmVlZCBhbiBpb21tdSBncm91cCBhcyB0aGUgc3RyZWFtIGRhdGEgaXMgY2FycmllZCBi eSAKPj4gdGhlIFNNTVUKPj4gKyAqIG1hc3RlciBkZXZpY2Ugb2JqZWN0Cj4+ICsgKi8KPj4gKyNp ZiAwCj4+IMKgwqDCoMKgwqAgZ3JvdXAgPSBpb21tdV9ncm91cF9nZXRfZm9yX2RldihkZXYpOwo+ PiDCoMKgwqDCoMKgIGlmICghSVNfRVJSKGdyb3VwKSkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAg aW9tbXVfZ3JvdXBfcHV0KGdyb3VwKTsKPj4gQEAgLTE4MzcsOCArMjM0MywxNiBAQCBzdGF0aWMg aW50IGFybV9zbW11X2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAKPj4gKmRldikKPj4gwqDCoMKg wqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhncm91cCk7Cj4+ ICsjZW5kaWYKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhl bjogV2UgY2FuIHBvdGVudGlhbGx5IHN1cHBvcnQgdGhpcyBmdW5jdGlvbiBhbmQgZGVzdHJveSBh IAo+PiBkZXZpY2UuIFRoaXMKPj4gKyAqIHdpbGwgYmUgcmVsZXZhbnQgZm9yIFBDSSBob3RwbHVn LiBTbywgd2lsbCBiZSBpbXBsZW1lbnRlZCBhcyAKPj4gbmVlZGVkIGFmdGVyCj4+ICsgKiBwYXNz dGhyb3VnaCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4KPj4gKyAqLwo+PiArI2lmIDAKPj4gwqAgc3Rh dGljIHZvaWQgYXJtX3NtbXVfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+IMKg IHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgaW9tbXVfZndzcGVjICpmd3NwZWMgPSBkZXYtPmlvbW11 X2Z3c3BlYzsKPj4gQEAgLTE5NzQsNiArMjQ4OCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW9tbXVfb3Bz IGFybV9zbW11X29wcyA9IHsKPj4gwqDCoMKgwqDCoCAucHV0X3Jlc3ZfcmVnaW9uc8KgwqDCoCA9 IGFybV9zbW11X3B1dF9yZXN2X3JlZ2lvbnMsCj4+IMKgwqDCoMKgwqAgLnBnc2l6ZV9iaXRtYXDC oMKgwqDCoMKgwqDCoCA9IC0xVUwsIC8qIFJlc3RyaWN0ZWQgZHVyaW5nIGRldmljZSAKPj4gYXR0 YWNoICovCj4+IMKgIH07Cj4+ICsjZW5kaWYKPj4gwqAgwqAgLyogUHJvYmluZyBhbmQgaW5pdGlh bGlzYXRpb24gZnVuY3Rpb25zICovCj4+IMKgIHN0YXRpYyBpbnQgYXJtX3NtbXVfaW5pdF9vbmVf cXVldWUoc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSwKPj4gQEAgLTIxODIsNiArMjY5Nyw3 IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfdXBkYXRlX2dicGEoc3RydWN0IAo+PiBhcm1fc21tdV9k ZXZpY2UgKnNtbXUsIHUzMiBzZXQsIHUzMiBjbHIpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMSwgQVJNX1NNTVVfUE9MTF9USU1FT1VUX1VTKTsKPj4g wqAgfQo+PiDCoCArI2lmIDAgLyogWGVuOiBUaGVyZSBpcyBubyBNU0kgc3VwcG9ydCBhcyB5ZXQg Ki8KPj4gwqAgc3RhdGljIHZvaWQgYXJtX3NtbXVfZnJlZV9tc2lzKHZvaWQgKmRhdGEpCj4+IMKg IHsKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwo+PiBAQCAtMjI0Nywx MiArMjc2MywxNSBAQCBzdGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF9tc2lzKHN0cnVjdCAKPj4g YXJtX3NtbXVfZGV2aWNlICpzbW11KQo+PiDCoMKgwqDCoMKgIC8qIEFkZCBjYWxsYmFjayB0byBm cmVlIE1TSXMgb24gdGVhcmRvd24gKi8KPj4gwqDCoMKgwqDCoCBkZXZtX2FkZF9hY3Rpb24oZGV2 LCBhcm1fc21tdV9mcmVlX21zaXMsIGRldik7Cj4+IMKgIH0KPj4gKyNlbmRpZgo+PiDCoCDCoCBz dGF0aWMgdm9pZCBhcm1fc21tdV9zZXR1cF91bmlxdWVfaXJxcyhzdHJ1Y3QgYXJtX3NtbXVfZGV2 aWNlICpzbW11KQo+PiDCoCB7Cj4+IMKgwqDCoMKgwqAgaW50IGlycSwgcmV0Owo+PiDCoCArI2lm IDAgLypYZW46IENhbm5vdCBzZXR1cCBtc2lzIGZvciBub3cgKi8KPj4gwqDCoMKgwqDCoCBhcm1f c21tdV9zZXR1cF9tc2lzKHNtbXUpOwo+PiArI2VuZGlmCj4+IMKgIMKgwqDCoMKgwqAgLyogUmVx dWVzdCBpbnRlcnJ1cHQgbGluZXMgKi8KPj4gwqDCoMKgwqDCoCBpcnEgPSBzbW11LT5ldnRxLnEu aXJxOwo+PiBAQCAtMjMxNiw5ICsyODM1LDEzIEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfc2V0dXBf aXJxcyhzdHJ1Y3QgCj4+IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBDYXZpdW0gVGh1bmRlclgyIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgbm90IHN1cHBv cnQgdW5pcXVlCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgICogaXJxIGxpbmVzLiBVc2Ugc2luZ2xl IGlycSBsaW5lIGZvciBhbGwgdGhlIFNNTVV2MyAKPj4gaW50ZXJydXB0cy4KPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqAgKi8KPj4gLcKgwqDCoMKgwqDCoMKgIHJldCA9IGRldm1fcmVxdWVzdF90aHJl YWRlZF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKg wqDCoMKgwqDCoCAqIFhlbjogRG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBpcnFzLCBzbyBzZXJp YWxpc2UgdGhlIHNldHVwLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMgaXMgdGhlIHNhbWUg Zm9yIHByaXMgYW5kIGV2ZW50IGludGVycnVwdCBsaW5lcyBvbiBvdGhlcgo+PiArwqDCoMKgwqDC oMKgwqDCoCAqIHN5c3RlbXMKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4gK8KgwqDCoMKgwqDC oMKgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEoc21tdS0+ZGV2LCBpcnEsCj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9jb21iaW5lZF9pcnFfaGFu ZGxlciwKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFybV9zbW11 X2NvbWJpbmVkX2lycV90aHJlYWQsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBJUlFGX09ORVNIT1QsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAiYXJtLXNtbXUtdjMtY29tYmluZWQtaXJxIiwgc21tdSk7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPj4gQEAgLTI0NTIsNiArMjk3NSwxMyBAQCBzdGF0 aWMgaW50IGFybV9zbW11X2RldmljZV9yZXNldChzdHJ1Y3QgCj4+IGFybV9zbW11X2RldmljZSAq c21tdSwgYm9vbCBieXBhc3MpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDC oMKgwqDCoMKgIH0KPj4gwqAgK8KgwqDCoCAvKiBYZW46IEluaXRpYWxpemUgdGFza2xldHMgKi8K Pj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPmV2dHFfdGFza2xldCwgYXJtX3NtbXVfZXZ0 cV90YXNrbGV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgbG9uZylzbW11 KTsKPj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPnByaXFfdGFza2xldCwgYXJtX3NtbXVf cHJpcV90YXNrbGV0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAodW5zaWduZWQgbG9uZylz bW11KTsKPj4gK8KgwqDCoCB0YXNrbGV0X2luaXQoJnNtbXUtPmNvbWJpbmVkX2lycV90YXNrbGV0 LCAKPj4gYXJtX3NtbXVfY29tYmluZWRfaXJxX3Rhc2tsZXQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICh1bnNpZ25lZCBsb25nKXNtbXUpOwo+PiDCoCDCoMKgwqDCoMKgIC8qIEVuYWJsZSB0 aGUgU01NVSBpbnRlcmZhY2UsIG9yIGVuc3VyZSBieXBhc3MgKi8KPj4gwqDCoMKgwqDCoCBpZiAo IWJ5cGFzcyB8fCBkaXNhYmxlX2J5cGFzcykgewo+PiBAQCAtMjU0Miw4ICszMDcyLDE0IEBAIHN0 YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2h3X3Byb2JlKHN0cnVjdCAKPj4gYXJtX3NtbXVfZGV2 aWNlICpzbW11KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJNX1NN TVVfRkVBVF9TVEFMTFM7Cj4+IMKgwqDCoMKgwqAgfQo+PiDCoCArLyoKPj4gKyAqIFhlbjogQmxv Y2sgc3RhZ2UgMSB0cmFuc2xhdGlvbnMuIEJ5IGRvaW5nIHRoaXMgaGVyZSB3ZSBkbyBub3QgCj4+ IG5lZWQgdG8gc2V0IHRoZQo+PiArICogZG9tYWluLT5zdGFnZSBleHBsaWNpdGx5Lgo+PiArICov Cj4+ICsjaWYgMAo+PiDCoMKgwqDCoMKgIGlmIChyZWcgJiBJRFIwX1MxUCkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIHNtbXUtPmZlYXR1cmVzIHw9IEFSTV9TTU1VX0ZFQVRfVFJBTlNfUzE7Cj4+ICsj ZW5kaWYKPj4gwqAgwqDCoMKgwqDCoCBpZiAocmVnICYgSURSMF9TMlApCj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBzbW11LT5mZWF0dXJlcyB8PSBBUk1fU01NVV9GRUFUX1RSQU5TX1MyOwo+PiBAQCAt MjYxNiwxMCArMzE1MiwxMiBAQCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9od19wcm9iZShz dHJ1Y3QgCj4+IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqDCoMKgwqDCoCBpZiAocmVnICYg SURSNV9HUkFONEspCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzbW11LT5wZ3NpemVfYml0bWFwIHw9 IFNaXzRLIHwgU1pfMk0gfCBTWl8xRzsKPj4gwqAgKyNpZiAwIC8qIFhlbjogU01NVSBvcHMgZG8g bm90IGhhdmUgYSBwZ3NpemVfYml0bWFwIG1lbWJlciBmb3IgWGVuICovCj4+IMKgwqDCoMKgwqAg aWYgKGFybV9zbW11X29wcy5wZ3NpemVfYml0bWFwID09IC0xVUwpCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBhcm1fc21tdV9vcHMucGdzaXplX2JpdG1hcCA9IHNtbXUtPnBnc2l6ZV9iaXRtYXA7Cj4+ IMKgwqDCoMKgwqAgZWxzZQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfb3BzLnBnc2l6 ZV9iaXRtYXAgfD0gc21tdS0+cGdzaXplX2JpdG1hcDsKPj4gKyNlbmRpZgo+PiDCoCDCoMKgwqDC oMKgIC8qIE91dHB1dCBhZGRyZXNzIHNpemUgKi8KPj4gwqDCoMKgwqDCoCBzd2l0Y2ggKHJlZyAm IElEUjVfT0FTX01BU0sgPDwgSURSNV9PQVNfU0hJRlQpIHsKPj4gQEAgLTI2ODAsNyArMzIxOCw4 IEBAIHN0YXRpYyBpbnQgYXJtX3NtbXVfZGV2aWNlX2FjcGlfcHJvYmUoc3RydWN0IAo+PiBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYsCj4+IMKgwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gc21t dS0+ZGV2Owo+PiDCoMKgwqDCoMKgIHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqbm9kZTsKPj4gwqAg LcKgwqDCoCBub2RlID0gKihzdHJ1Y3QgYWNwaV9pb3J0X25vZGUgKiopZGV2X2dldF9wbGF0ZGF0 YShkZXYpOwo+PiArwqDCoMKgIC8qIFhlbjogTW9kaWZpY2F0aW9uIHRvIGdldCBpb3J0X25vZGUg Ki8KPj4gK8KgwqDCoCBub2RlID0gKHN0cnVjdCBhY3BpX2lvcnRfbm9kZSAqKWRldi0+YWNwaV9u b2RlOwo+PiDCoCDCoMKgwqDCoMKgIC8qIFJldHJpZXZlIFNNTVV2MyBzcGVjaWZpYyBkYXRhICov Cj4+IMKgwqDCoMKgwqAgaW9ydF9zbW11ID0gKHN0cnVjdCBhY3BpX2lvcnRfc21tdV92MyAqKW5v ZGUtPm5vZGVfZGF0YTsKPj4gQEAgLTI3MDMsNyArMzI0Miw3IEBAIHN0YXRpYyBpbmxpbmUgaW50 IAo+PiBhcm1fc21tdV9kZXZpY2VfYWNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2LAo+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSkKPj4gwqAgewo+PiAtwqDCoMKg IHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2ID0gcGRldjsKPj4gwqDCoMKgwqDCoCB1MzIgY2VsbHM7Cj4+IMKgwqDCoMKgwqAgaW50 IHJldCA9IC1FSU5WQUw7Cj4+IMKgIEBAIC0yNzE2LDYgKzMyNTUsNyBAQCBzdGF0aWMgaW50IGFy bV9zbW11X2RldmljZV9kdF9wcm9iZShzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldiwK Pj4gwqAgwqDCoMKgwqDCoCBwYXJzZV9kcml2ZXJfb3B0aW9ucyhzbW11KTsKPj4gwqAgK8KgwqDC oCAvKiBYZW46IG9mX2RtYV9pc19jb2hlcmVudCBpcyBhIHN0dWIgdGlsbCBkdCBzdXBwb3J0IGlz IAo+PiBpbnRyb2R1Y2VkICovCj4+IMKgwqDCoMKgwqAgaWYgKG9mX2RtYV9pc19jb2hlcmVudChk ZXYtPm9mX25vZGUpKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc21tdS0+ZmVhdHVyZXMgfD0gQVJN X1NNTVVfRkVBVF9DT0hFUkVOQ1k7Cj4+IMKgIEBAIC0yNzM0LDkgKzMyNzQsMTEgQEAgc3RhdGlj IGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4+IMKgIHsKPj4gwqDCoMKgwqDCoCBpbnQgaXJxLCByZXQ7Cj4+IMKgwqDCoMKgwqAgc3Ry dWN0IHJlc291cmNlICpyZXM7Cj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8gc2V0dXAg c3lzZnMgKi8KPj4gwqDCoMKgwqDCoCByZXNvdXJjZV9zaXplX3QgaW9hZGRyOwo+PiArI2VuZGlm Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdTsKPj4gLcKgwqDCoCBz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2Ug KmRldiA9IHBkZXY7LyogWGVuOiBkZXYgaXMgaWdub3JlZCAqLwo+PiDCoMKgwqDCoMKgIGJvb2wg YnlwYXNzOwo+PiDCoCDCoMKgwqDCoMKgIHNtbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KnNtbXUpLCBHRlBfS0VSTkVMKTsKPj4gQEAgLTI3NjMsNyArMzMwNSw5IEBAIHN0YXRpYyBpbnQg YXJtX3NtbXVfZGV2aWNlX3Byb2JlKHN0cnVjdCAKPj4gcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJNTUlPIHJlZ2lvbiB0b28gc21hbGwg KCVwcilcbiIsIHJlcyk7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4g wqDCoMKgwqDCoCB9Cj4+ICsjaWYgMCAvKlhlbjogRG8gbm90IG5lZWQgdG8gc2V0dXAgc3lzZnMg Ki8KPj4gwqDCoMKgwqDCoCBpb2FkZHIgPSByZXMtPnN0YXJ0Owo+PiArI2VuZGlmCj4+IMKgIMKg wqDCoMKgwqAgc21tdS0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4+ IMKgwqDCoMKgwqAgaWYgKElTX0VSUihzbW11LT5iYXNlKSkKPj4gQEAgLTI4MDIsMTMgKzMzNDYs MTggQEAgc3RhdGljIGludCBhcm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiDCoCDC oMKgwqDCoMKgIC8qIFJlY29yZCBvdXIgcHJpdmF0ZSBkZXZpY2Ugc3RydWN0dXJlICovCj4+ICvC oMKgwqAgLyogWGVuOiBTTU1VIGlzIG5vdCB0cmVhdGVkIGEgYSBwbGF0Zm9ybSBkZXZpY2UqLwo+ PiArI2lmIDAKPj4gwqDCoMKgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBzbW11KTsK Pj4gKyNlbmRpZgo+PiDCoCDCoMKgwqDCoMKgIC8qIFJlc2V0IHRoZSBkZXZpY2UgKi8KPj4gwqDC oMKgwqDCoCByZXQgPSBhcm1fc21tdV9kZXZpY2VfcmVzZXQoc21tdSwgYnlwYXNzKTsKPj4gwqDC oMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gwqAg Ky8qIFhlbjogTm90IGNyZWF0aW5nIGFuIElPTU1VIGRldmljZSBsaXN0IGZvciBYZW4gKi8KPj4g KyNpZiAwCj4+IMKgwqDCoMKgwqAgLyogQW5kIHdlJ3JlIHVwLiBHbyBnbyBnbyEgKi8KPj4gwqDC oMKgwqDCoCByZXQgPSBpb21tdV9kZXZpY2Vfc3lzZnNfYWRkKCZzbW11LT5pb21tdSwgZGV2LCBO VUxMLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAic21t dTMuJXBhIiwgJmlvYWRkcik7Cj4+IEBAIC0yODQ0LDkgKzMzOTMsMjAgQEAgc3RhdGljIGludCBh cm1fc21tdV9kZXZpY2VfcHJvYmUoc3RydWN0IAo+PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+PiDCoMKgwqDCoMKgIH0KPj4gKyNlbmRpZgo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIFhlbjogS2VlcCBhIGxpc3Qgb2YgYWxsIHByb2JlZCBkZXZpY2VzLiBUaGlz IHdpbGwgYmUgdXNlZCB0byAKPj4gcXVlcnkKPj4gK8KgwqDCoMKgICogdGhlIHNtbXUgZGV2aWNl cyBiYXNlZCBvbiB0aGUgZndub2RlLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBJTklUX0xJ U1RfSEVBRCgmc21tdS0+ZGV2aWNlcyk7Cj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZhcm1fc21tdV9k ZXZpY2VzX2xvY2spOwo+PiArwqDCoMKgIGxpc3RfYWRkKCZzbW11LT5kZXZpY2VzLCAmYXJtX3Nt bXVfZGV2aWNlcyk7Cj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJmFybV9zbW11X2RldmljZXNfbG9j ayk7Cj4+IMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+IMKgIH0KPj4gwqAgKy8qIFhlbjogVW51c2Vk IGZ1bmN0aW9uICovCj4+ICsjaWYgMAo+PiDCoCBzdGF0aWMgaW50IGFybV9zbW11X2RldmljZV9y ZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqAgewo+PiDCoMKgwqDCoMKg IHN0cnVjdCBhcm1fc21tdV9kZXZpY2UgKnNtbXUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsKPj4gQEAgLTI4NjAsNiArMzQyMCw4IEBAIHN0YXRpYyB2b2lkIGFybV9zbW11X2RldmljZV9z aHV0ZG93bihzdHJ1Y3QgCj4+IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4gwqAgewo+PiDCoMKg wqDCoMKgIGFybV9zbW11X2RldmljZV9yZW1vdmUocGRldik7Cj4+IMKgIH0KPj4gKyNlbmRpZgo+ PiArCj4+IMKgIMKgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFybV9zbW11X29m X21hdGNoW10gPSB7Cj4+IMKgwqDCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJhcm0sc21tdS12MyIs IH0sCj4+IEBAIC0yODY3LDYgKzM0MjksNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCAKPj4gYXJtX3NtbXVfb2ZfbWF0Y2hbXSA9IHsKPj4gwqAgfTsKPj4gwqAgTU9EVUxFX0RF VklDRV9UQUJMRShvZiwgYXJtX3NtbXVfb2ZfbWF0Y2gpOwo+PiDCoCArI2lmIDAKPj4gwqAgc3Rh dGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtX3NtbXVfZHJpdmVyID0gewo+PiDCoMKgwqDC oMKgIC5kcml2ZXLCoMKgwqAgPSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAubmFtZcKgwqDCoMKg wqDCoMKgID0gImFybS1zbW11LXYzIiwKPj4gQEAgLTI4ODMsMyArMzQ0NiwzMTYgQEAgSU9NTVVf T0ZfREVDTEFSRShhcm1fc21tdXYzLCAiYXJtLHNtbXUtdjMiLCAKPj4gTlVMTCk7Cj4+IMKgIE1P RFVMRV9ERVNDUklQVElPTigiSU9NTVUgQVBJIGZvciBBUk0gYXJjaGl0ZWN0ZWQgU01NVXYzIAo+ PiBpbXBsZW1lbnRhdGlvbnMiKTsKPj4gwqAgTU9EVUxFX0FVVEhPUigiV2lsbCBEZWFjb24gPHdp bGwuZGVhY29uQGFybS5jb20+Iik7Cj4+IMKgIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPj4g KyNlbmRpZgo+PiArCj4+ICsvKioqKiogU3RhcnQgb2YgWGVuIHNwZWNpZmljIGNvZGUgKioqKiov Cj4+ICsKPj4gK3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X2lvdGxiX2ZsdXNoX2Fs bChzdHJ1Y3QgZG9tYWluICpkKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV94ZW5f ZG9tYWluICpzbW11X2RvbWFpbiA9IGRvbV9pb21tdShkKS0+YXJjaC5wcml2Owo+PiArwqDCoMKg IHN0cnVjdCBpb21tdV9kb21haW4gKmNmZzsKPj4gKwo+PiArwqDCoMKgIHNwaW5fbG9jaygmc21t dV9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmc21t dV9kb21haW4tPmNvbnRleHRzLCBsaXN0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDC oMKgwqDCoMKgwqDCoCAqIE9ubHkgaW52YWxpZGF0ZSB0aGUgY29udGV4dCB3aGVuIFNNTVUgaXMg cHJlc2VudC4KPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbnRl eHQgaW5pdGlhbGl6YXRpb24gaXMgZGVsYXllZAo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHVudGls IGEgbWFzdGVyIGhhcyBiZWVuIGFkZGVkLgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KCFBQ0NFU1NfT05DRShjZmctPnByaXYtPnNtbXUpKSkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBh cm1fc21tdV90bGJfaW52X2NvbnRleHQoY2ZnLT5wcml2KTsKPj4gK8KgwqDCoCB9Cj4+ICvCoMKg wqAgc3Bpbl91bmxvY2soJnNtbXVfZG9tYWluLT5sb2NrKTsKPj4gK8KgwqDCoCByZXR1cm4gMDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBfX211c3RfY2hlY2sgYXJtX3NtbXVfaW90bGJfZmx1 c2goc3RydWN0IGRvbWFpbiAqZCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGdmbiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBpbnQgcGFnZV9jb3VudCkK Pj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gYXJtX3NtbXVfaW90bGJfZmx1c2hfYWxsKGQpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGlvbW11X2RvbWFpbiAqYXJtX3NtbXVfZ2V0X2RvbWFp bihzdHJ1Y3QgZG9tYWluICpkLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gVGhpcyBpcyByZXR1cm5pbmcgaW9t bXVfZG9tYWluIGFuZCBub3QgYSBkb21haW4uCj4gUGxlYXNlIGNoYW5nZSB0aGUgbmFtZSBvZiBm dW5jdGlvbi4KPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW47Cj4+ ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4gQSBzdWdn ZXN0aW9uCj4gMS4gYXMgeW91IGhhdmUgdXNlZCBpbiBhYm92ZSBmdW5jdGlvbiBzbW11X2RvbWFp biB2YXJpYWJsZSBmb3IgCj4gYXJtX3NtbXVfeGVuX2RvbWFpbgo+IENhbiBzaW1pbGFyIGxvZ2lj IGJlIHVzZWQgZm9yIGlvbW11X2RvbWFpbi4KPgo+IDIuIFdoZW4gc21tdV9kb21haW4gdmFyaWFi bGUgbmFtZSBpcyB1c2VkIGluIGFib3ZlIGZ1bmN0aW9uIHdoeSAKPiB4ZW5fZG9tYWluIGlzIHVz ZWQgaW4gdGhpcyBmdW5jdGlvbi4KPiBJdCBpcyBxdWl0ZSBjb25mdXNpbmcuCj4gbG9naWNhbGx5 IHhlbl9kb21haW4gc2hvdWxkIG1lYW4gYSBWTS4KPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVf ZGV2aWNlICpzbW11Owo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21tdV9kb21haW4gKnNtbXVfZG9t YWluOwo+IHNtbXVfZG9tYWluIHdhcyB1c2VkIGZvciBhcm1fc21tdV94ZW5fZG9tYWluLgo+IGNv bnNpc3RlbmN5IG9mIHZhcmlhYmxlIG5hbWVzIGlzIG5lY2Vzc2FyeSBmb3IgY29kZSBjbGFyaXR5 Cj4+ICsKPj4gK8KgwqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnByaXY7Cj4+ ICsKPj4gK8KgwqDCoCBzbW11ID0gYXJtX3NtbXVfZ2V0X2J5X2Z3bm9kZShkZXYtPmlvbW11X2Z3 c3BlYy0+aW9tbXVfZndub2RlKTsKPj4gK8KgwqDCoCBpZiAoIXNtbXUpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gTlVMTDsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKgwqDCoCAqIExvb3Ag dGhyb3VnaCB0aGUgJnhlbl9kb21haW4tPmNvbnRleHRzIHRvIGxvY2F0ZSBhIGNvbnRleHQKPj4g K8KgwqDCoMKgICogYXNzaWduZWQgdG8gdGhpcyBTTU1VCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDC oMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmeGVuX2RvbWFpbi0+Y29udGV4dHMsIGxp c3QpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHNtbXVfZG9tYWluID0gdG9fc21tdV9kb21haW4oZG9t YWluKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzbW11X2RvbWFpbi0+c21tdSA9PSBzbW11KQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZG9tYWluOwo+PiArwqDCoMKgIH0KPj4g Kwo+PiArwqDCoMKgIHJldHVybiBOVUxMOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhcm1f c21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihzdHJ1Y3QgaW9tbXVfZG9tYWluICpkb21haW4pCj4g c2FtZQo+PiArewo+PiArwqDCoMKgIGxpc3RfZGVsKCZkb21haW4tPmxpc3QpOwo+PiArwqDCoMKg IGFybV9zbW11X2RvbWFpbl9mcmVlKGRvbWFpbik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg YXJtX3NtbXVfYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpkLCB1OCBkZXZmbiwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBm bGFnKQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArwqDCoMKgIHN0cnVjdCBpb21t dV9kb21haW4gKmRvbWFpbjsKPj4gK8KgwqDCoCBzdHJ1Y3QgYXJtX3NtbXVfeGVuX2RvbWFpbiAq eGVuX2RvbWFpbjsKPiBzYW1lCj4+ICvCoMKgwqAgc3RydWN0IGFybV9zbW11X2RvbWFpbiAqYXJt X3NtbXU7Cj4+ICsKPj4gK8KgwqDCoCB4ZW5fZG9tYWluID0gZG9tX2lvbW11KGQpLT5hcmNoLnBy aXY7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoIWRldi0+YXJjaGRhdGEuaW9tbXUpIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGRldi0+YXJjaGRhdGEuaW9tbXUgPSB4emFsbG9jKHN0cnVjdCBhcm1fc21tdV94 ZW5fZGV2aWNlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZGV2LT5hcmNoZGF0YS5pb21tdSkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICvCoMKgwqAgfQo+ PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3NtbXVfYWRkX2RldmljZShkZXYpOwo+PiArwqDCoMKg IGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAg c3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIC8qCj4+ICvCoMKg wqDCoCAqIENoZWNrIHRvIHNlZSBpZiBhbiBpb21tdV9kb21haW4gYWxyZWFkeSBleGlzdHMgZm9y IHRoaXMgeGVuIAo+PiBkb21haW4KPj4gK8KgwqDCoMKgICogdW5kZXIgdGhlIHNhbWUgU01NVQo+ PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQs IGRldik7Cj4+ICvCoMKgwqAgaWYgKCFkb21haW4pIHsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAg ZG9tYWluID0gYXJtX3NtbXVfZG9tYWluX2FsbG9jKElPTU1VX0RPTUFJTl9ETUEpOwo+PiArwqDC oMKgwqDCoMKgwqAgaWYgKCFkb21haW4pIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gLUVOT01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+ICvCoMKg wqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11ID0gdG9fc21tdV9k b21haW4oZG9tYWluKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGFybV9zbW11LT5zMl9jZmcuZG9tYWlu ID0gZDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgLyogQ2hhaW4gdGhlIG5ldyBjb250ZXh0IHRv IHRoZSBkb21haW4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIGxpc3RfYWRkKCZkb21haW4tPmxpc3Qs ICZ4ZW5fZG9tYWluLT5jb250ZXh0cyk7Cj4+ICsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oCByZXQgPSBhcm1fc21tdV9hdHRhY2hfZGV2KGRvbWFpbiwgZGV2KTsKPj4gK8KgwqDCoCBpZiAo cmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZG9tYWluLT5yZWYuY291bnRlciA9PSAwKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhcm1fc21tdV9kZXN0cm95X2lvbW11X2RvbWFpbihk b21haW4pOwo+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBhdG9taWNfaW5j KCZkb21haW4tPnJlZik7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICtvdXQ6Cj4+ICvCoMKgwqAgc3Bp bl91bmxvY2soJnhlbl9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYXJtX3NtbXVfZGVhc3NpZ25fZGV2KHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgaW9tbXVfZG9t YWluICpkb21haW4gPSBhcm1fc21tdV9nZXRfZG9tYWluKGQsIGRldik7Cj4+ICvCoMKgwqAgc3Ry dWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW47Cj4+ICvCoMKgwqAgc3RydWN0IGFy bV9zbW11X2RvbWFpbiAqYXJtX3NtbXUgPSB0b19zbW11X2RvbWFpbihkb21haW4pOwo+IHNhbWUK Pj4gKwo+PiArwqDCoMKgIHhlbl9kb21haW4gPSBkb21faW9tbXUoZCktPmFyY2gucHJpdjsKPj4g Kwo+PiArwqDCoMKgIGlmICghYXJtX3NtbXUgfHwgYXJtX3NtbXUtPnMyX2NmZy5kb21haW4gIT0g ZCkgewo+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICIgbm90IGF0dGFjaGVkIHRvIGRv bWFpbiAlZFxuIiwgZC0+ZG9tYWluX2lkKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRVNS Q0g7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZ4ZW5fZG9tYWluLT5s b2NrKTsKPj4gKwo+PiArwqDCoMKgIGFybV9zbW11X2RldGFjaF9kZXYoZGV2KTsKPj4gK8KgwqDC oCBhdG9taWNfZGVjKCZkb21haW4tPnJlZik7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZG9tYWluLT5y ZWYuY291bnRlciA9PSAwKQo+PiArwqDCoMKgwqDCoMKgwqAgYXJtX3NtbXVfZGVzdHJveV9pb21t dV9kb21haW4oZG9tYWluKTsKPj4gKwo+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZ4ZW5fZG9tYWlu LT5sb2NrKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGFybV9zbW11X3JlYXNzaWduX2RldihzdHJ1Y3QgZG9tYWluICpzLCBzdHJ1Y3QgZG9tYWlu ICp0LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTggZGV2Zm4swqAgc3Ry dWN0IGRldmljZSAqZGV2KQo+PiArewo+PiArwqDCoMKgIGludCByZXQgPSAwOwo+PiArCj4+ICvC oMKgwqAgLyogRG9uJ3QgYWxsb3cgcmVtYXBwaW5nIG9uIG90aGVyIGRvbWFpbiB0aGFuIGh3ZG9t ICovCj4+ICvCoMKgwqAgaWYgKHQgJiYgdCAhPSBoYXJkd2FyZV9kb21haW4pCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVQRVJNOwo+PiArCj4+ICvCoMKgwqAgaWYgKHQgPT0gcykKPj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqAgcmV0ID0gYXJtX3NtbXVfZGVh c3NpZ25fZGV2KHMsIGRldik7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBpZiAodCkgewo+PiArwqDCoMKgwqDCoMKgwqAg LyogTm8gZmxhZ3MgYXJlIGRlZmluZWQgZm9yIEFSTS4gKi8KPj4gK8KgwqDCoMKgwqDCoMKgIHJl dCA9IGFybV9zbW11X2Fzc2lnbl9kZXYodCwgZGV2Zm4sIGRldiwgMCk7Cj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiAr wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpCj4gV2hlcmUg aXMgaW9tbXVfZG9tYWluIGluaXRpYWxpemVkPwo+IFRoZSBmdW5jdGlvbiBkb2VzIG5vdCB1c2Ug YSBpb21tdV9kb21haW4gKiB2YXJpYWJsZQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBhcm1fc21t dV94ZW5fZG9tYWluICp4ZW5fZG9tYWluOwo+PiArCj4+ICvCoMKgwqAgeGVuX2RvbWFpbiA9IHh6 YWxsb2Moc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4pOwo+PiArwqDCoMKgIGlmICgheGVuX2Rv bWFpbikKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAg c3Bpbl9sb2NrX2luaXQoJnhlbl9kb21haW4tPmxvY2spOwo+PiArwqDCoMKgIElOSVRfTElTVF9I RUFEKCZ4ZW5fZG9tYWluLT5jb250ZXh0cyk7Cj4+ICsKPj4gK8KgwqDCoCBkb21faW9tbXUoZCkt PmFyY2gucHJpdiA9IHhlbl9kb21haW47Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIHZvaWQgX19od2RvbV9pbml0IGFybV9zbW11X2lvbW11X2h3ZG9tX2lu aXQoc3RydWN0IGRvbWFpbiAqZCkKPj4gK3sKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgYXJt X3NtbXVfaW9tbXVfZG9tYWluX3RlYXJkb3duKHN0cnVjdCBkb21haW4gKmQpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGFybV9zbW11X3hlbl9kb21haW4gKnhlbl9kb21haW4gPSBkb21faW9tbXUo ZCktPmFyY2gucHJpdjsKPj4gKwo+PiArwqDCoMKgIEFTU0VSVChsaXN0X2VtcHR5KCZ4ZW5fZG9t YWluLT5jb250ZXh0cykpOwo+PiArwqDCoMKgIHhmcmVlKHhlbl9kb21haW4pOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IF9fbXVzdF9jaGVjayBhcm1fc21tdV9tYXBfcGFnZShzdHJ1Y3QgZG9t YWluICpkLCB1bnNpZ25lZCAKPj4gbG9uZyBnZm4sCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHVuc2lnbmVkIGxvbmcgbWZuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4+ICt7Cj4+ICvCoMKgwqAg cDJtX3R5cGVfdCB0Owo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogR3JhbnQgbWFw cGluZ3MgY2FuIGJlIHVzZWQgZm9yIERNQSByZXF1ZXN0cy4gVGhlIGRldl9idXNfYWRkcgo+PiAr wqDCoMKgwqAgKiByZXR1cm5lZCBieSB0aGUgaHlwZXJjYWxsIGlzIHRoZSBNRk4gKG5vdCB0aGUg SVBBKS4gRm9yIGRldmljZQo+PiArwqDCoMKgwqAgKiBwcm90ZWN0ZWQgYnkgYW4gSU9NTVUsIFhl biBuZWVkcyB0byBhZGQgYSAxOjEgbWFwcGluZyBpbiB0aGUgCj4+IGRvbWFpbgo+PiArwqDCoMKg wqAgKiBwMm0gdG8gYWxsb3cgRE1BIHJlcXVlc3QgdG8gd29yay4KPj4gK8KgwqDCoMKgICogVGhp cyBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlIGRvbWFpbiBpcyBkaXJlY3RlZCBtYXBwZWQuIEhlbmNl IAo+PiB0aGlzCj4+ICvCoMKgwqDCoCAqIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkg Z250dGFiIGNvZGUgd2l0aCBnZm4gPT0gbWZuLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBC VUdfT04oIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKTsKPj4gK8KgwqDCoCBCVUdfT04obWZu ICE9IGdmbik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBXZSBvbmx5IHN1cHBvcnQgcmVhZGFibGUgYW5k IHdyaXRhYmxlIGZsYWdzICovCj4+ICvCoMKgwqAgaWYgKCEoZmxhZ3MgJiAoSU9NTVVGX3JlYWRh YmxlIHwgSU9NTVVGX3dyaXRhYmxlKSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZB TDsKPj4gKwo+PiArwqDCoMKgIHQgPSAoZmxhZ3MgJiBJT01NVUZfd3JpdGFibGUpID8gcDJtX2lv bW11X21hcF9ydyA6IAo+PiBwMm1faW9tbXVfbWFwX3JvOwo+PiArCj4+ICvCoMKgwqAgLyoKPj4g K8KgwqDCoMKgICogVGhlIGZ1bmN0aW9uIGd1ZXN0X3BoeXNtYXBfYWRkX2VudHJ5IHJlcGxhY2Vz IHRoZSBjdXJyZW50IAo+PiBtYXBwaW5nCj4+ICvCoMKgwqDCoCAqIGlmIHRoZXJlIGlzIGFscmVh ZHkgb25lLi4uCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIHJldHVybiBndWVzdF9waHlzbWFw X2FkZF9lbnRyeShkLCBfZ2ZuKGdmbiksIF9tZm4obWZuKSwgMCwgdCk7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgX19tdXN0X2NoZWNrIGFybV9zbW11X3VubWFwX3BhZ2Uoc3RydWN0IGRvbWFp biAqZCwgCj4+IHVuc2lnbmVkIGxvbmcgZ2ZuKQo+PiArewo+PiArwqDCoMKgIC8qCj4+ICvCoMKg wqDCoCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBnbnR0YWIgY29kZSB3 aGVuIHRoZSBkb21haW4KPj4gK8KgwqDCoMKgICogaXMgZGlyZWN0IG1hcHBlZAo+PiArwqDCoMKg wqAgKi8KPj4gK8KgwqDCoCBpZiAoIWlzX2RvbWFpbl9kaXJlY3RfbWFwcGVkKGQpKQo+PiArwqDC oMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gZ3Vlc3Rf cGh5c21hcF9yZW1vdmVfcGFnZShkLCBfZ2ZuKGdmbiksIF9tZm4oZ2ZuKSwgMCk7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tbXVfb3BzIGFybV9zbW11X2lvbW11X29wcyA9 IHsKPj4gK8KgwqDCoCAuaW5pdCA9IGFybV9zbW11X2lvbW11X2RvbWFpbl9pbml0LAo+PiArwqDC oMKgIC5od2RvbV9pbml0ID0gYXJtX3NtbXVfaW9tbXVfaHdkb21faW5pdCwKPj4gK8KgwqDCoCAu dGVhcmRvd24gPSBhcm1fc21tdV9pb21tdV9kb21haW5fdGVhcmRvd24sCj4+ICvCoMKgwqAgLmlv dGxiX2ZsdXNoID0gYXJtX3NtbXVfaW90bGJfZmx1c2gsCj4+ICvCoMKgwqAgLmlvdGxiX2ZsdXNo X2FsbCA9IGFybV9zbW11X2lvdGxiX2ZsdXNoX2FsbCwKPj4gK8KgwqDCoCAuYXNzaWduX2Rldmlj ZSA9IGFybV9zbW11X2Fzc2lnbl9kZXYsCj4+ICvCoMKgwqAgLnJlYXNzaWduX2RldmljZSA9IGFy bV9zbW11X3JlYXNzaWduX2RldiwKPj4gK8KgwqDCoCAubWFwX3BhZ2UgPSBhcm1fc21tdV9tYXBf cGFnZSwKPj4gK8KgwqDCoCAudW5tYXBfcGFnZSA9IGFybV9zbW11X3VubWFwX3BhZ2UsCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMKPj4gK3N0cnVjdCBhcm1fc21tdV9kZXZpY2UgKmFybV9zbW11X2dl dF9ieV9md25vZGUoc3RydWN0IGZ3bm9kZV9oYW5kbGUgCj4+ICpmd25vZGUpCj4+ICt7Cj4+ICvC oMKgwqAgc3RydWN0IGFybV9zbW11X2RldmljZSAqc21tdSA9IE5VTEw7Cj4+ICsKPj4gK8KgwqDC oCBzcGluX2xvY2soJmFybV9zbW11X2RldmljZXNfbG9jayk7Cj4+ICvCoMKgwqAgbGlzdF9mb3Jf ZWFjaF9lbnRyeShzbW11LCAmYXJtX3NtbXVfZGV2aWNlcywgZGV2aWNlcykgewo+PiArwqDCoMKg wqDCoMKgwqAgaWYgKHNtbXUtPmRldi0+Zndub2RlID09IGZ3bm9kZSkKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgfQo+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZh cm1fc21tdV9kZXZpY2VzX2xvY2spOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHNtbXU7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBfX2luaXQgaW50IGFybV9zbW11X2R0X2luaXQoc3RydWN0IGR0X2Rl dmljZV9ub2RlICpkZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Y29uc3Qgdm9pZCAqZGF0YSkKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmM7Cj4+ICsKPj4gK8KgwqDC oCAvKgo+PiArwqDCoMKgwqAgKiBFdmVuIGlmIHRoZSBkZXZpY2UgY2FuJ3QgYmUgaW5pdGlhbGl6 ZWQsIHdlIGRvbid0IHdhbnQgdG8KPj4gK8KgwqDCoMKgICogZ2l2ZSB0aGUgU01NVSBkZXZpY2Ug dG8gZG9tMC4KPj4gK8KgwqDCoMKgICovCj4+ICvCoMKgwqAgZHRfZGV2aWNlX3NldF91c2VkX2J5 KGRldiwgRE9NSURfWEVOKTsKPj4gKwo+PiArwqDCoMKgIHJjID0gYXJtX3NtbXVfZGV2aWNlX3By b2JlKGR0X3RvX2RldihkZXYpKTsKPj4gK8KgwqDCoCBpZiAocmMpCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmM7Cj4+ICsKPj4gK8KgwqDCoCBpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21t dV9vcHMpOwo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK0RUX0RFVklD RV9TVEFSVChzbW11djMsICJBUk0gU01NVSBWMyIsIERFVklDRV9JT01NVSkKPj4gK8KgwqDCoCAu ZHRfbWF0Y2ggPSBhcm1fc21tdV9vZl9tYXRjaCwKPj4gK8KgwqDCoCAuaW5pdCA9IGFybV9zbW11 X2R0X2luaXQsCj4+ICtEVF9ERVZJQ0VfRU5ECj4+ICsKPj4gKyNpZmRlZiBDT05GSUdfQUNQSQo+ PiArLyogU2V0IHVwIHRoZSBJT01NVSAqLwo+PiArc3RhdGljIGludCBfX2luaXQgYXJtX3NtbXVf YWNwaV9pbml0KGNvbnN0IHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgaW50IHJjOwo+PiAr Cj4+ICvCoMKgwqAgcmMgPSBhcm1fc21tdV9kZXZpY2VfcHJvYmUoKHN0cnVjdCBkZXZpY2UgKilk YXRhKTsKPj4gK8KgwqDCoCBpZiAocmMpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmM7Cj4+ ICsKPj4gK8KgwqDCoCBpb21tdV9zZXRfb3BzKCZhcm1fc21tdV9pb21tdV9vcHMpOwo+PiArwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtBQ1BJX0RFVklDRV9TVEFSVChhc21tdXYzLCAi QVJNIFNNTVUgVjMiLCBERVZJQ0VfSU9NTVUpCj4+ICvCoMKgwqAgLmNsYXNzX3R5cGUgPSBBQ1BJ X0lPUlRfTk9ERV9TTU1VX1YzLAo+PiArwqDCoMKgIC5pbml0ID0gYXJtX3NtbXVfYWNwaV9pbml0 LAo+PiArQUNQSV9ERVZJQ0VfRU5ECj4+ICsKPj4gKyNlbmRpZgo+PiBkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUveGVuL2xpbnV4X2NvbXBhdC5oIAo+PiBiL3hlbi9pbmNsdWRlL3hlbi9saW51eF9j b21wYXQuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMDAwLi44MDM3 YmUwYTNlCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIveGVuL2luY2x1ZGUveGVuL2xpbnV4X2Nv bXBhdC5oCj4+IEBAIC0wLDAgKzEsODQgQEAKPj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogCj4+ Cj4+ICsgKiBpbmNsdWRlL3hlbi9saW51eF9jb21wYXQuaAo+PiArICoKPj4gKyAqIENvbXBhdGli aWxpdHkgZGVmaW5lcyBmb3IgcG9ydGluZyBjb2RlIGZyb20gTGludXggdG8gWGVuCj4+ICsgKgo+ PiArICogQ29weXJpZ2h0IChjKSAyMDE3IExpbmFybyBMaW1pdGVkCj4+ICsgKgo+PiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAq IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuwqAgU2VlIHRoZQo+PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPj4gKyAqCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj b3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+PiArICogYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K Pj4gKyAqLwo+PiArCj4+ICsjaWZuZGVmIF9fWEVOX0xJTlVYX0NPTVBBVF9IX18KPj4gKyNkZWZp bmUgX19YRU5fTElOVVhfQ09NUEFUX0hfXwo+PiArCj4+ICsjaW5jbHVkZSA8YXNtL3R5cGVzLmg+ Cj4+ICsKPj4gK3R5cGVkZWYgcGFkZHJfdCBwaHlzX2FkZHJfdDsKPj4gK3R5cGVkZWYgcGFkZHJf dCBkbWFfYWRkcl90Owo+PiArCj4+ICt0eXBlZGVmIHVuc2lnbmVkIGludCBnZnBfdDsKPj4gKyNk ZWZpbmUgR0ZQX0tFUk5FTCAwCj4+ICsjZGVmaW5lIF9fR0ZQX1pFUk8gMHgwMVUKPj4gKwo+PiAr LyogSGVscGVycyBmb3IgSVJRIGZ1bmN0aW9ucyAqLwo+PiArI2RlZmluZSBmcmVlX2lycSByZWxl YXNlX2lycQo+PiArCj4+ICtlbnVtIGlycXJldHVybiB7Cj4+ICvCoMKgwqAgSVJRX05PTkUsCj4+ ICvCoMKgwqAgSVJRX0hBTkRMRUQsCj4+ICvCoMKgwqAgSVJRX1dBS0VfVEhSRUFELAo+PiArfTsK Pj4gKwo+PiArdHlwZWRlZiBlbnVtIGlycXJldHVybiBpcnFyZXR1cm5fdDsKPj4gKwo+PiArLyog RGV2aWNlIGxvZ2dlciBmdW5jdGlvbnMgKi8KPj4gKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZtdCwg Li4uKSBwcmludGsoWEVOTE9HX0RFQlVHIGZtdCwgIyMgX19WQV9BUkdTX18pCj4+ICsjZGVmaW5l IGRldl9ub3RpY2UoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19JTkZPIGZtdCwgIyMgCj4+ IF9fVkFfQVJHU19fKQo+PiArI2RlZmluZSBkZXZfd2FybihkZXYsIGZtdCwgLi4uKSBwcmludGso WEVOTE9HX1dBUk5JTkcgZm10LCAjIyAKPj4gX19WQV9BUkdTX18pCj4+ICsjZGVmaW5lIGRldl9l cnIoZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19FUlIgZm10LCAjIyBfX1ZBX0FSR1NfXykK Pj4gKyNkZWZpbmUgZGV2X2luZm8oZGV2LCBmbXQsIC4uLikgcHJpbnRrKFhFTkxPR19JTkZPIGZt dCwgIyMgX19WQV9BUkdTX18pCj4+ICsKPj4gKyNkZWZpbmUgZGV2X2Vycl9yYXRlbGltaXRlZChk ZXYsIGZtdCwgLi4uKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArwqDC oMKgwqAgcHJpbnRrKFhFTkxPR19FUlIgZm10LCAjIyBfX1ZBX0FSR1NfXykKPj4gKwo+PiArI2Rl ZmluZSBkZXZfbmFtZShkZXYpIGR0X25vZGVfZnVsbF9uYW1lKGRldl90b19kdChkZXYpKQo+PiAr Cj4+ICsvKiBBbGlhcyB0byBYZW4gYWxsb2NhdGlvbiBoZWxwZXJzICovCj4+ICsjZGVmaW5lIGtm cmVlIHhmcmVlCj4+ICsjZGVmaW5lIGttYWxsb2Moc2l6ZSwgZmxhZ3MpICh7XAo+PiArwqDCoMKg IHZvaWQgKl9fcmV0X2FsbG9jID0gTlVMTDsgXAo+PiArwqDCoMKgIGlmIChmbGFncyAmIF9fR0ZQ X1pFUk8pIFwKPj4gK8KgwqDCoMKgwqDCoMKgIF9fcmV0X2FsbG9jID0gX3h6YWxsb2Moc2l6ZSwg c2l6ZW9mKHZvaWQgKikpOyBcCj4+ICvCoMKgwqAgZWxzZSBcCj4+ICvCoMKgwqDCoMKgwqDCoCBf X3JldF9hbGxvYyA9IF94bWFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKTsgXAo+PiArwqDCoMKg IF9fcmV0X2FsbG9jOyBcCj4+ICt9KQo+PiArI2RlZmluZSBremFsbG9jKHNpemUsIGZsYWdzKcKg wqDCoMKgwqDCoMKgIF94emFsbG9jKHNpemUsIHNpemVvZih2b2lkICopKQo+PiArI2RlZmluZSBk ZXZtX2t6YWxsb2MoZGV2LCBzaXplLCBmbGFncynCoCBfeHphbGxvYyhzaXplLCBzaXplb2Yodm9p ZCAqKSkKPj4gKyNkZWZpbmUga21hbGxvY19hcnJheShzaXplLCBuLCBmbGFncykgKHtcCj4+ICvC oMKgwqAgdm9pZCAqX19yZXRfYWxsb2MgPSBOVUxMOyBcCj4+ICvCoMKgwqAgaWYgKGZsYWdzICYg X19HRlBfWkVSTykgXAo+PiArwqDCoMKgwqDCoMKgwqAgX19yZXRfYWxsb2MgPSBfeHphbGxvY19h cnJheShzaXplLCBzaXplb2Yodm9pZCAqKSwgbik7IFwKPj4gK8KgwqDCoCBlbHNlIFwKPj4gK8Kg wqDCoMKgwqDCoMKgIF9fcmV0X2FsbG9jID0gX3htYWxsb2NfYXJyYXkoc2l6ZSwgc2l6ZW9mKHZv aWQgKiksIG4pOyBcCj4+ICvCoMKgwqAgX19yZXRfYWxsb2M7IFwKPj4gK30pCj4+ICsKPj4gKy8q IEFsaWFzIHRvIFhlbiB0aW1lIGZ1bmN0aW9ucyAqLwo+PiArI2RlZmluZSBrdGltZV90IHNfdGlt ZV90Cj4+ICsjZGVmaW5lIGt0aW1lX2dldCgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChOT1co KSkKPj4gKyNkZWZpbmUga3RpbWVfYWRkX3VzKHQsaSnCoMKgwqDCoMKgwqAgKHQgKyBNSUNST1NF Q1MoaSkpCj4+ICsjZGVmaW5lIGt0aW1lX2NvbXBhcmUodCxpKcKgwqDCoMKgwqAgKHQgPiAoaSkp Cj4+ICsKPj4gKyNlbmRpZiAvKiBfX1hFTl9MSU5VWF9DT01QQVRfSF9fICovCj4KCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs