From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [RESEND][PATCH V16 4/6] libxl: add pvusb API Date: Tue, 8 Mar 2016 17:14:29 +0000 Message-ID: <56DF0875.5050208@citrix.com> References: <1457401061-849-1-git-send-email-cyliu@suse.com> <1457401061-849-5-git-send-email-cyliu@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457401061-849-5-git-send-email-cyliu@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Chunyan Liu , xen-devel@lists.xen.org Cc: jgross@suse.com, wei.liu2@citrix.com, ian.campbell@citrix.com, george.dunlap@eu.citrix.com, Ian.Jackson@eu.citrix.com, jfehlig@suse.com, Simon Cao List-Id: xen-devel@lists.xenproject.org T24gMDgvMDMvMTYgMDE6MzcsIENodW55YW4gTGl1IHdyb3RlOgo+IEFkZCBwdnVzYiBBUElzLCBp bmNsdWRpbmc6Cj4gIC0gYXR0YWNoL2RldGFjaCAoY3JlYXRlL2Rlc3Ryb3kpIHZpcnR1YWwgdXNi IGNvbnRyb2xsZXIuCj4gIC0gYXR0YWNoL2RldGFjaCB1c2IgZGV2aWNlCj4gIC0gbGlzdCB1c2Ig Y29udHJvbGxlciBhbmQgdXNiIGRldmljZXMKPiAgLSBzb21lIG90aGVyIGhlbHBlciBmdW5jdGlv bnMKPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBDYW8gPGNhb2Jvc2ltb25AZ21haWwuY29tPgo+ IFNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNvbT4K PiBTaWduZWQtb2ZmLWJ5OiBDaHVueWFuIExpdSA8Y3lsaXVAc3VzZS5jb20+CgpSZXZpZXdlZC1i eTogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBjaXRyaXguY29tPgoKR29vZCB3b3JrIQoK IC1HZW9yZ2UKCj4gLS0tCj4gQ2hhbmdlczoKPiAgICogQWRkcmVzcyBHZW9yZ2UncyBjb21tZW50 cwo+IAo+ICB0b29scy9saWJ4bC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgfCAgICAzICstCj4g IHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAgICAgICAgICAgICB8ICAgMTggKwo+ICB0b29scy9s aWJ4bC9saWJ4bC5oICAgICAgICAgICAgICAgICAgfCAgIDc3ICsrCj4gIHRvb2xzL2xpYnhsL2xp YnhsX2RldmljZS5jICAgICAgICAgICB8ICAgIDUgKy0KPiAgdG9vbHMvbGlieGwvbGlieGxfaW50 ZXJuYWwuaCAgICAgICAgIHwgICAxOCArCj4gIHRvb2xzL2xpYnhsL2xpYnhsX29zZGVwcy5oICAg ICAgICAgICB8ICAgMTMgKwo+ICB0b29scy9saWJ4bC9saWJ4bF9wdnVzYi5jICAgICAgICAgICAg fCAxNjIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgdG9vbHMvbGlieGwv bGlieGxfdHlwZXMuaWRsICAgICAgICAgIHwgICA0NiArCj4gIHRvb2xzL2xpYnhsL2xpYnhsX3R5 cGVzX2ludGVybmFsLmlkbCB8ICAgIDEgKwo+ICB0b29scy9saWJ4bC9saWJ4bF91dGlscy5jICAg ICAgICAgICAgfCAgIDE4ICsKPiAgdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaCAgICAgICAgICAg IHwgICAgNSArCj4gIDExIGZpbGVzIGNoYW5nZWQsIDE4MjIgaW5zZXJ0aW9ucygrKSwgMiBkZWxl dGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3B2dXNiLmMK PiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtl ZmlsZQo+IGluZGV4IDc4OWExMmUuLjhmYTdiODcgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwv TWFrZWZpbGUKPiArKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQo+IEBAIC0xMDUsNyArMTA1LDgg QEAgTElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxf ZG0ubyBsaWJ4bF9wY2kubyBcCj4gIAkJCWxpYnhsX3N0cmVhbV9yZWFkLm8gbGlieGxfc3RyZWFt X3dyaXRlLm8gXAo+ICAJCQlsaWJ4bF9zYXZlX2NhbGxvdXQubyBfbGlieGxfc2F2ZV9tc2dzX2Nh bGxvdXQubyBcCj4gIAkJCWxpYnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwK PiAtCQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vICQoTElCWExfT0JKUy15 KQo+ICsJCQlsaWJ4bF9kb21fc3VzcGVuZC5vIGxpYnhsX2RvbV9zYXZlLm8gbGlieGxfcHZ1c2Iu byBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICQoTElCWExfT0JKUy15KQo+ICBMSUJYTF9P QkpTICs9IGxpYnhsX2dlbmlkLm8KPiAgTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMubyBsaWJ4 bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCj4gIAo+IGRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bC5jIGIvdG9vbHMvbGlieGwvbGlieGwuYwo+IGluZGV4IDJhYjVhZDMuLjFl Njg2ODggMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGwuYwo+ICsrKyBiL3Rvb2xzL2xp YnhsL2xpYnhsLmMKPiBAQCAtNDEwMiw2ICs0MTAyLDggQEAgb3V0Ogo+ICAgKiBsaWJ4bF9kZXZp Y2VfdmtiX2Rlc3Ryb3kKPiAgICogbGlieGxfZGV2aWNlX3ZmYl9yZW1vdmUKPiAgICogbGlieGxf ZGV2aWNlX3ZmYl9kZXN0cm95Cj4gKyAqIGxpYnhsX2RldmljZV91c2JjdHJsX3JlbW92ZQo+ICsg KiBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kZXN0cm95Cj4gICAqLwo+ICAjZGVmaW5lIERFRklORV9E RVZJQ0VfUkVNT1ZFX0VYVCh0eXBlLCByZW10eXBlLCByZW1vdmVkZXN0cm95LCBmKSAgICAgICAg XAo+ICAgICAgaW50IGxpYnhsX2RldmljZV8jI3R5cGUjI18jI3JlbW92ZWRlc3Ryb3kobGlieGxf Y3R4ICpjdHgsICAgICAgICAgICBcCj4gQEAgLTQxNTksNiArNDE2MSwxMCBAQCBERUZJTkVfREVW SUNFX1JFTU9WRSh2ZmIsIGRlc3Ryb3ksIDEpCj4gIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0s IHJlbW92ZSwgMCkKPiAgREVGSU5FX0RFVklDRV9SRU1PVkUodnRwbSwgZGVzdHJveSwgMSkKPiAg Cj4gKy8qIHVzYmN0cmwgKi8KPiArREVGSU5FX0RFVklDRV9SRU1PVkVfQ1VTVE9NKHVzYmN0cmws IHJlbW92ZSwgMCkKPiArREVGSU5FX0RFVklDRV9SRU1PVkVfQ1VTVE9NKHVzYmN0cmwsIGRlc3Ry b3ksIDEpCj4gKwo+ICAvKiBjaGFubmVsL2NvbnNvbGUgaG90dW5wbHVnIGlzIG5vdCBpbXBsZW1l bnRlZC4gVGhlcmUgYXJlIDIgcG9zc2liaWxpdGllczoKPiAgICogMS4gYWRkIHN1cHBvcnQgZm9y IHNlY29uZGFyeSBjb25zb2xlcyB0byB4ZW5jb25zb2xlZAo+ICAgKiAyLiBkeW5hbWljYWxseSBh ZGQvcmVtb3ZlIHFlbXUgY2hhcmRldnMgdmlhIHFtcCBtZXNzYWdlcy4gKi8KPiBAQCAtNDE3NCw2 ICs0MTgwLDggQEAgREVGSU5FX0RFVklDRV9SRU1PVkUodnRwbSwgZGVzdHJveSwgMSkKPiAgICog bGlieGxfZGV2aWNlX2Rpc2tfYWRkCj4gICAqIGxpYnhsX2RldmljZV9uaWNfYWRkCj4gICAqIGxp YnhsX2RldmljZV92dHBtX2FkZAo+ICsgKiBsaWJ4bF9kZXZpY2VfdXNiY3RybF9hZGQKPiArICog bGlieGxfZGV2aWNlX3VzYmRldl9hZGQKPiAgICovCj4gIAo+ICAjZGVmaW5lIERFRklORV9ERVZJ Q0VfQUREKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g QEAgLTQyMDUsNiArNDIxMywxMiBAQCBERUZJTkVfREVWSUNFX0FERChuaWMpCj4gIC8qIHZ0cG0g Ki8KPiAgREVGSU5FX0RFVklDRV9BREQodnRwbSkKPiAgCj4gKy8qIHVzYmN0cmwgKi8KPiArREVG SU5FX0RFVklDRV9BREQodXNiY3RybCkKPiArCj4gKy8qIHVzYiAqLwo+ICtERUZJTkVfREVWSUNF X0FERCh1c2JkZXYpCj4gKwo+ICAjdW5kZWYgREVGSU5FX0RFVklDRV9BREQKPiAgCj4gIC8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCj4gQEAgLTY3NTAsNiArNjc2NCwxMCBAQCBpbnQgbGlieGxfcmV0 cmlldmVfZG9tYWluX2NvbmZpZ3VyYXRpb24obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlk LAo+ICAKPiAgICAgIE1FUkdFKHBjaSwgcGNpZGV2cywgQ09NUEFSRV9QQ0ksIHt9KTsKPiAgCj4g KyAgICBNRVJHRSh1c2JjdHJsLCB1c2JjdHJscywgQ09NUEFSRV9VU0JDVFJMLCB7fSk7Cj4gKwo+ ICsgICAgTUVSR0UodXNiZGV2LCB1c2JkZXZzLCBDT01QQVJFX1VTQiwge30pOwo+ICsKPiAgICAg IC8qIFRha2UgY2FyZSBvZiByZW1vdmFibGUgZGV2aWNlLiBXZSBtYWludGFpbiBpbnZhcmlhbnQg aW4gdGhlCj4gICAgICAgKiBpbnNlcnQgLyByZW1vdmUgb3BlcmF0aW9uIHNvIHRoYXQ6Cj4gICAg ICAgKiAxLiBpZiB4ZW5zdG9yZSBpcyAiZW1wdHkiIHdoaWxlIEpTT04gaXMgbm90LCB0aGUgcmVz dWx0Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4 bC5oCj4gaW5kZXggMDg1OTM4My4uNWNjM2NlMyAxMDA2NDQKPiAtLS0gYS90b29scy9saWJ4bC9s aWJ4bC5oCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGwuaAo+IEBAIC0xMjMsNiArMTIzLDEyIEBA Cj4gICNkZWZpbmUgTElCWExfSEFWRV9ET01BSU5fTk9ERUFGRklOSVRZIDEKPiAgCj4gIC8qCj4g KyAqIExJQlhMX0hBVkVfUFZVU0IgaW5kaWNhdGVzIGZ1bmN0aW9ucyBmb3IgcGx1Z2dpbmcgaW4g VVNCIGRldmljZXMKPiArICogdGhyb3VnaCBwdnVzYiAtLSBib3RoIGhvdHBsdWcgYW5kIGF0IGRv bWFpbiBjcmVhdGlvbiB0aW1lLi4KPiArICovCj4gKyNkZWZpbmUgTElCWExfSEFWRV9QVlVTQiAx Cj4gKwo+ICsvKgo+ICAgKiBMSUJYTF9IQVZFX0JVSUxESU5GT19IVk1fVkVORE9SX0RFVklDRSBp bmRpY2F0ZXMgdGhhdCB0aGUKPiAgICogbGlieGxfdmVuZG9yX2RldmljZSBmaWVsZCBpcyBwcmVz ZW50IGluIHRoZSBodm0gc2VjdGlvbnMgb2YKPiAgICogbGlieGxfZG9tYWluX2J1aWxkX2luZm8u IFRoaXMgZmllbGQgdGVsbHMgbGlieGwgd2hpY2gKPiBAQCAtMTUzNiw2ICsxNTQyLDc3IEBAIGlu dCBsaWJ4bF9jZHJvbV9pbnNlcnQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4 bF9kZXZpY2VfZGlzayAqZGlzaywKPiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4 bF9hc3luY29wX2hvdyAqYW9faG93KQo+ICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VY VEVSTkFMX0NBTExFUlNfT05MWTsKPiAgCj4gKy8qCj4gKyAqIFVTQgo+ICsgKgo+ICsgKiBGb3Ig ZWFjaCBkZXZpY2UgcmVtb3ZlZCBvciBhZGRlZCwgb25lIG9mIHRoZXNlIHByb3RvY29scyBpcyBh dmFpbGFibGU6Cj4gKyAqIC0gUFYgKGkuZS4sIFBWVVNCKQo+ICsgKiAtIERFVklDRU1PREVMIChp LmUsIHFlbXUpCj4gKyAqCj4gKyAqIFBWIGlzIGF2YWlsYWJsZSBmb3IgZWl0aGVyIFBWIG9yIEhW TSBkb21haW5zLiAgREVWSUNFTU9ERUwgaXMgb25seQo+ICsgKiBhdmFpbGFibGUgZm9yIEhWTSBk b21haW5zLiAgVGhlIGNhbGxlciBjYW4gYWRkaXRpb25hbGx5IHNwZWNpZnkKPiArICogIkFVVE8i LCBpbiB3aGljaCBjYXNlIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5IHRvIGRldGVybWluZSB0aGUgYmVz dAo+ICsgKiBwcm90b2NvbCBhdXRvbWF0aWNhbGx5Lgo+ICsgKgo+ICsgKiBBdCB0aGUgbW9tZW50 LCB0aGUgb25seSBwcm90b2NvbCBpbXBsZW1lbnRlZCBpcyBQVi4KPiArICoKPiArICogT25lIGNh biBhZGQvcmVtb3ZlIFVTQiBjb250cm9sbGVycyB0by9mcm9tIGd1ZXN0LCBhbmQgYXR0YWNoL2Rl dGFjaCBVU0IKPiArICogZGV2aWNlcyB0by9mcm9tIFVTQiBjb250cm9sbGVycy4KPiArICoKPiAr ICogVG8gYWRkIFVTQiBjb250cm9sbGVycyBhbmQgVVNCIGRldmljZXMsIG9uZSBjYW4gYWRkaW5n IFVTQiBjb250cm9sbGVycwo+ICsgKiBmaXJzdCBhbmQgdGhlbiBhdHRhY2hpbmcgVVNCIGRldmlj ZXMgdG8gc29tZSBVU0IgY29udHJvbGxlciwgb3IgYWRkaW5nCj4gKyAqIFVTQiBkZXZpY2VzIHRv IGd1ZXN0IGRpcmVjdGx5LCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgVVNCCj4gKyAq IGNvbnRyb2xsZXIgZm9yIFVTQiBkZXZpY2VzIHRvIGF0dGFjaC4KPiArICoKPiArICogVG8gcmVt b3ZlIFVTQiBjb250cm9sbGVycyBvciBVU0IgZGV2aWNlcywgb25lIGNhbiByZW1vdmUgVVNCIGRl dmljZXMKPiArICogdW5kZXIgVVNCIGNvbnRyb2xsZXIgb25lIGJ5IG9uZSBhbmQgdGhlbiByZW1v dmUgVVNCIGNvbnRyb2xsZXIsIG9yCj4gKyAqIHJlbW92ZSBVU0IgY29udHJvbGxlciBkaXJlY3Rs eSwgaXQgd2lsbCByZW1vdmUgYWxsIFVTQiBkZXZpY2VzIHVuZGVyCj4gKyAqIGl0IGF1dG9tYXRp Y2FsbHkuCj4gKyAqCj4gKyAqLwo+ICsvKiBVU0IgQ29udHJvbGxlcnMqLwo+ICtpbnQgbGlieGxf ZGV2aWNlX3VzYmN0cmxfYWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAq YW9faG93KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NB TExFUlNfT05MWTsKPiArCj4gK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9yZW1vdmUobGlieGxf Y3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOwo+ICsK PiAraW50IGxpYnhsX2RldmljZV91c2JjdHJsX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybCAqdXNiY3RybCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOwo+ICsKPiArbGlieGxfZGV2 aWNlX3VzYmN0cmwgKmxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxfY3R4ICpjdHgsCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IGRvbWlkLCBpbnQgKm51bSk7Cj4gKwo+ICt2b2lkIGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3Rf ZnJlZShsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlzdCwgaW50IG5yKTsKPiArCj4gKwo+ICtpbnQg bGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Jj dHJsICp1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF91 c2JjdHJsaW5mbyAqdXNiY3RybGluZm8pOwo+ICsKPiArLyogVVNCIERldmljZXMgKi8KPiArCj4g K2ludCBsaWJ4bF9kZXZpY2VfdXNiZGV2X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1 c2JkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29w X2hvdyAqYW9faG93KQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJO QUxfQ0FMTEVSU19PTkxZOwo+ICsKPiAraW50IGxpYnhsX2RldmljZV91c2JkZXZfcmVtb3ZlKGxp YnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7Cj4gKwo+ ICtsaWJ4bF9kZXZpY2VfdXNiZGV2ICoKPiArbGlieGxfZGV2aWNlX3VzYmRldl9saXN0KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pOwo+ICsKPiArdm9pZCBsaWJ4bF9k ZXZpY2VfdXNiZGV2X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiZGV2ICpsaXN0LCBpbnQgbnIp Owo+ICsKPiAgLyogTmV0d29yayBJbnRlcmZhY2VzICovCj4gIGludCBsaWJ4bF9kZXZpY2Vfbmlj X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV9uaWMgKm5p YywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICph b19ob3cpCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jIGIvdG9vbHMv bGlieGwvbGlieGxfZGV2aWNlLmMKPiBpbmRleCBhMzU2ZTJhLi5iN2E2YTEzIDEwMDY0NAo+IC0t LSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxf ZGV2aWNlLmMKPiBAQCAtNjc2LDcgKzY3NiwxMCBAQCB2b2lkIGxpYnhsX19kZXZpY2VzX2Rlc3Ry b3kobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fZGV2aWNlc19yZW1vdmVfc3RhdGUgKmRycykKPiAg ICAgICAgICAgICAgICAgIGFvZGV2LT5hY3Rpb24gPSBMSUJYTF9fREVWSUNFX0FDVElPTl9SRU1P VkU7Cj4gICAgICAgICAgICAgICAgICBhb2Rldi0+ZGV2ID0gZGV2Owo+ICAgICAgICAgICAgICAg ICAgYW9kZXYtPmZvcmNlID0gZHJzLT5mb3JjZTsKPiAtICAgICAgICAgICAgICAgIGxpYnhsX19p bml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUoZWdjLCBhb2Rldik7Cj4gKyAgICAgICAgICAg ICAgICBpZiAoZGV2LT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0IpCj4g KyAgICAgICAgICAgICAgICAgICAgbGlieGxfX2luaXRpYXRlX2RldmljZV91c2JjdHJsX3JlbW92 ZShlZ2MsIGFvZGV2KTsKPiArICAgICAgICAgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOwo+ ICAgICAgICAgICAgICB9Cj4gICAgICAgICAgfQo+ICAgICAgfQo+IGRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAo+ IGluZGV4IDA4MmY2NTYuLmY3OGNiNzIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxf aW50ZXJuYWwuaAo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKPiBAQCAtMjU4 Nyw2ICsyNTg3LDE0IEBAIF9oaWRkZW4gdm9pZCBsaWJ4bF9fZGV2aWNlX3Z0cG1fYWRkKGxpYnhs X19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0sCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOwo+ICAKPiArX2hpZGRlbiB2 b2lkIGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBk b21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmwgKnVzYmN0cmwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KTsKPiArCj4gK19oaWRkZW4gdm9pZCBsaWJ4 bF9fZGV2aWNlX3VzYmRldl9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2 ICp1c2JkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxf X2FvX2RldmljZSAqYW9kZXYpOwo+ICsKPiAgLyogSW50ZXJuYWwgZnVuY3Rpb24gdG8gY29ubmVj dCBhIHZrYiBkZXZpY2UgKi8KPiAgX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV92a2JfYWRkKGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3ZrYiAqdmtiKTsKPiBAQCAtMjYxOSw2ICsyNjI3LDEzIEBA IF9oaWRkZW4gdm9pZCBsaWJ4bF9fd2FpdF9kZXZpY2VfY29ubmVjdGlvbihsaWJ4bF9fZWdjKiwK PiAgX2hpZGRlbiB2b2lkIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUobGli eGxfX2VnYyAqZWdjLAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7Cj4gIAo+ICtfaGlkZGVuIGludCBs aWJ4bF9fZGV2aWNlX2Zyb21fdXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2RldmljZSAq ZGV2aWNlKTsKPiArCj4gK19oaWRkZW4gdm9pZCBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX3VzYmN0 cmxfcmVtb3ZlKGxpYnhsX19lZ2MgKmVnYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOwo+ICsKPiAg LyoKPiAgICogbGlieGxfX2dldF9ob3RwbHVnX3NjcmlwdF9pbmZvIHJldHVybnMgdGhlIGFyZ3Mg YW5kIGVudiB0aGF0IHNob3VsZAo+ICAgKiBiZSBwYXNzZWQgdG8gdGhlIGhvdHBsdWcgc2NyaXB0 IGZvciB0aGUgcmVxdWVzdGVkIGRldmljZS4KPiBAQCAtNDAxNCw2ICs0MDI5LDkgQEAgc3RhdGlj IGlubGluZSB2b2lkIGxpYnhsX191cGRhdGVfY29uZmlnX3Z0cG0obGlieGxfX2djICpnYywKPiAg I2RlZmluZSBDT01QQVJFX1BDSShhLCBiKSAoKGEpLT5mdW5jID09IChiKS0+ZnVuYyAmJiAgICBc Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+YnVzID09IChiKS0+YnVzICYmICAg ICAgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSktPmRldiA9PSAoYiktPmRldikK PiArI2RlZmluZSBDT01QQVJFX1VTQihhLCBiKSAoKGEpLT5jdHJsID09IChiKS0+Y3RybCAmJiBc Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+cG9ydCA9PSAoYiktPnBvcnQpCj4g KyNkZWZpbmUgQ09NUEFSRV9VU0JDVFJMKGEsIGIpICgoYSktPmRldmlkID09IChiKS0+ZGV2aWQp Cj4gIAo+ICAvKiBERVZJQ0VfQURECj4gICAqCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xp YnhsX29zZGVwcy5oIGIvdG9vbHMvbGlieGwvbGlieGxfb3NkZXBzLmgKPiBpbmRleCBkOTY2MWM5 Li44MDJjNzYyIDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX29zZGVwcy5oCj4gKysr IGIvdG9vbHMvbGlieGwvbGlieGxfb3NkZXBzLmgKPiBAQCAtMjQsNiArMjQsOCBAQAo+ICAjZGVm aW5lIF9HTlVfU09VUkNFCj4gIAo+ICAjaWYgZGVmaW5lZChfX05ldEJTRF9fKQo+ICsjZGVmaW5l IFNZU0ZTX1VTQl9ERVYgICAgICAgICAgIi9zeXMvYnVzL3VzYi9kZXZpY2VzIgo+ICsjZGVmaW5l IFNZU0ZTX1VTQkJBQ0tfRFJJVkVSICAgIi9rZXJuL3hlbi91c2IiCj4gICNkZWZpbmUgU1lTRlNf UENJX0RFViAgICAgICAgICAiL3N5cy9idXMvcGNpL2RldmljZXMiCj4gICNkZWZpbmUgU1lTRlNf UENJQkFDS19EUklWRVIgICAiL2tlcm4veGVuL3BjaSIKPiAgI2RlZmluZSBORVRCQUNLX05JQ19O QU1FICAgICAgICJ4dmlmJXVpJWQiCj4gQEAgLTMxLDYgKzMzLDggQEAKPiAgI2VsaWYgZGVmaW5l ZChfX09wZW5CU0RfXykKPiAgI2luY2x1ZGUgPHV0aWwuaD4KPiAgI2VsaWYgZGVmaW5lZChfX2xp bnV4X18pCj4gKyNkZWZpbmUgU1lTRlNfVVNCX0RFViAgICAgICAgICAiL3N5cy9idXMvdXNiL2Rl dmljZXMiCj4gKyNkZWZpbmUgU1lTRlNfVVNCQkFDS19EUklWRVIgICAiL3N5cy9idXMvdXNiL2Ry aXZlcnMvdXNiYmFjayIKPiAgI2RlZmluZSBTWVNGU19QQ0lfREVWICAgICAgICAgICIvc3lzL2J1 cy9wY2kvZGV2aWNlcyIKPiAgI2RlZmluZSBTWVNGU19QQ0lCQUNLX0RSSVZFUiAgICIvc3lzL2J1 cy9wY2kvZHJpdmVycy9wY2liYWNrIgo+ICAjZGVmaW5lIE5FVEJBQ0tfTklDX05BTUUgICAgICAg InZpZiV1LiVkIgo+IEBAIC0zOCw2ICs0Miw4IEBACj4gICNlbGlmIGRlZmluZWQoX19zdW5fXykK PiAgI2luY2x1ZGUgPHN0cm9wdHMuaD4KPiAgI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKPiAr I2RlZmluZSBTWVNGU19VU0JfREVWICAgICAgICAgICIvZGV2L251bGwiCj4gKyNkZWZpbmUgU1lT RlNfVVNCQkFDS19EUklWRVIgICAiL2Rldi9udWxsIgo+ICAjZGVmaW5lIFNZU0ZTX1BDSV9ERVYg ICAgICAgICAgIi9kZXYvbnVsbCIKPiAgI2RlZmluZSBTWVNGU19QQ0lCQUNLX0RSSVZFUiAgICIv ZGV2L251bGwiCj4gICNkZWZpbmUgTkVUQkFDS19OSUNfTkFNRSAgICAgICAieG5iJXUuJWQiCj4g QEAgLTQ1LDYgKzUxLDEzIEBACj4gICNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Cj4gICNlbmRpZgo+ ICAKPiArI2lmbmRlZiBTWVNGU19VU0JCQUNLX0RSSVZFUgo+ICsjZXJyb3IgZGVmaW5lIFNZU0ZT X1VTQkJBQ0tfRFJJVkVSIGZvciB5b3VyIHBsYXRmb3JtCj4gKyNlbmRpZgo+ICsjaWZuZGVmIFNZ U0ZTX1VTQl9ERVYKPiArI2Vycm9yIGRlZmluZSBTWVNGU19VU0JfREVWIGZvciB5b3VyIHBsYXRm b3JtCj4gKyNlbmRpZgo+ICsKPiAgI2lmbmRlZiBTWVNGU19QQ0lCQUNLX0RSSVZFUgo+ICAjZXJy b3IgZGVmaW5lIFNZU0ZTX1BDSUJBQ0tfRFJJVkVSIGZvciB5b3VyIHBsYXRmb3JtCj4gICNlbmRp Zgo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9wdnVzYi5jIGIvdG9vbHMvbGlieGwv bGlieGxfcHZ1c2IuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNWY5 MjYyOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9wdnVzYi5jCj4g QEAgLTAsMCArMSwxNjIwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBTVVNFIExJ TlVYIFByb2R1Y3RzIEdtYkgsIE51ZXJuYmVyZywgR2VybWFueS4KPiArICogQXV0aG9yIENodW55 YW4gTGl1IDxjeWxpdUBzdXNlLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkCj4gKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNp b24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKPiArICogZXhjZXB0aW9uIG9uIGxpbmtpbmcg ZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKPiArICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgImxpYnhsX29zZGVwcy5oIiAvKiBt dXN0IGNvbWUgYmVmb3JlIGFueSBvdGhlciBoZWFkZXJzICovCj4gKwo+ICsjaW5jbHVkZSAibGli eGxfaW50ZXJuYWwuaCIKPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKwo+ICsjZGVmaW5lIFVT QkJBQ0tfSU5GT19QQVRIICIvbGlieGwvdXNiYmFjayIKPiArCj4gKyNkZWZpbmUgVVNCSFVCX0NM QVNTX0NPREUgOQo+ICsKPiArc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVm YXVsdChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCkK PiArewo+ICsgICAgaW50IHJjOwo+ICsgICAgbGlieGxfZG9tYWluX3R5cGUgZG9tdHlwZSA9IGxp YnhsX19kb21haW5fdHlwZShnYywgZG9taWQpOwo+ICsKPiArICAgIGlmICghdXNiY3RybC0+dmVy c2lvbikKPiArICAgICAgICB1c2JjdHJsLT52ZXJzaW9uID0gMjsKPiArCj4gKyAgICBpZiAoIXVz YmN0cmwtPnBvcnRzKQo+ICsgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gODsKPiArCj4gKyAgICBp ZiAodXNiY3RybC0+dHlwZSA9PSBMSUJYTF9VU0JDVFJMX1RZUEVfQVVUTykgewo+ICsgICAgICAg IGlmIChkb210eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKSB7Cj4gKyAgICAgICAgICAgIHVz YmN0cmwtPnR5cGUgPSBMSUJYTF9VU0JDVFJMX1RZUEVfUFY7Cj4gKyAgICAgICAgfSBlbHNlIGlm IChkb210eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkgewo+ICsgICAgICAgICAgICAvKiBG SVhNRTogU2VlIGlmIHdlIGNhbiBkZXRlY3QgUFYgZnJvbnRlbmQgKi8KPiArICAgICAgICAgICAg dXNiY3RybC0+dHlwZSA9IExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTDsKPiArICAgICAg ICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmMgPSBsaWJ4bF9fcmVzb2x2ZV9kb21pZChnYywgdXNi Y3RybC0+YmFja2VuZF9kb21uYW1lLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm dXNiY3RybC0+YmFja2VuZF9kb21pZCk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gK2lu dCBsaWJ4bF9fZGV2aWNlX2Zyb21fdXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21p ZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJs ICp1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2Rldmlj ZSAqZGV2aWNlKQo+ICt7Cj4gKyAgICBkZXZpY2UtPmJhY2tlbmRfZGV2aWQgICA9IHVzYmN0cmwt PmRldmlkOwo+ICsgICAgZGV2aWNlLT5iYWNrZW5kX2RvbWlkICAgPSB1c2JjdHJsLT5iYWNrZW5k X2RvbWlkOwo+ICsgICAgZGV2aWNlLT5iYWNrZW5kX2tpbmQgICAgPSBMSUJYTF9fREVWSUNFX0tJ TkRfVlVTQjsKPiArICAgIGRldmljZS0+ZGV2aWQgICAgICAgICAgID0gdXNiY3RybC0+ZGV2aWQ7 Cj4gKyAgICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOwo+ICsgICAgZGV2aWNlLT5r aW5kICAgICAgICAgICAgPSBMSUJYTF9fREVWSUNFX0tJTkRfVlVTQjsKPiArCj4gKyAgICByZXR1 cm4gMDsKPiArfQo+ICsKPiArLyogQWRkIHVzYmN0cmwgaW5mb3JtYXRpb24gdG8geGVuc3RvcmUu Cj4gKyAqCj4gKyAqIEFkZGluZyBhIHVzYiBjb250cm9sbGVyIHdpbGwgYWRkIGEgbmV3ICd2dXNi JyBkZXZpY2UgaW4geGVuc3RvcmUsIGFuZAo+ICsgKiBhZGQgY29ycmVzcG9uZGluZyBmcm9udGVu ZCwgYmFja2VuZCBpbmZvcm1hdGlvbiB0byBpdC4gQWNjb3JkaW5nIHRvCj4gKyAqICJ1cGRhdGVf anNvbiIsIGRlY2lkZSB3ZXRoZXIgdG8gdXBkYXRlIGpzb24gY29uZmlnIGZpbGUuCj4gKyAqLwo+ ICtzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGRfeGVuc3RvcmUobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCj4g K3sKPiArICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKPiArICAgIGZsZXhhcnJheV90ICpmcm9u dDsKPiArICAgIGZsZXhhcnJheV90ICpiYWNrOwo+ICsgICAgeHNfdHJhbnNhY3Rpb25fdCB0ID0g WEJUX05VTEw7Cj4gKyAgICBpbnQgaSwgcmM7Cj4gKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRf Y29uZmlnOwo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybF9zYXZlZDsKPiArICAg IGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7Cj4gKwo+ICsgICAgbGli eGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7Cj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybF9pbml0KCZ1c2JjdHJsX3NhdmVkKTsKPiArICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Nv cHkoQ1RYLCAmdXNiY3RybF9zYXZlZCwgdXNiY3RybCk7Cj4gKwo+ICsgICAgR0NORVcoZGV2aWNl KTsKPiArICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwoZ2MsIGRvbWlkLCB1c2Jj dHJsLCBkZXZpY2UpOwo+ICsgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAgICBmcm9udCA9 IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsKPiArICAgIGJhY2sgPSBmbGV4YXJyYXlfbWFrZShn YywgMTIsIDEpOwo+ICsKPiArICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZnJvbnRl bmQtaWQiLCBHQ1NQUklOVEYoIiVkIiwgZG9taWQpKTsKPiArICAgIGZsZXhhcnJheV9hcHBlbmRf cGFpcihiYWNrLCAib25saW5lIiwgIjEiKTsKPiArICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihi YWNrLCAic3RhdGUiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQi LCBYZW5idXNTdGF0ZUluaXRpYWxpc2luZykpOwo+ICsgICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGJhY2ssICJ0eXBlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKWxpYnhs X3VzYmN0cmxfdHlwZV90b19zdHJpbmcodXNiY3RybC0+dHlwZSkpOwo+ICsgICAgZmxleGFycmF5 X2FwcGVuZF9wYWlyKGJhY2ssICJ1c2ItdmVyIiwgR0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPnZl cnNpb24pKTsKPiArICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAibnVtLXBvcnRzIiwg R0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPnBvcnRzKSk7Cj4gKyAgICBmbGV4YXJyYXlfYXBwZW5k X3BhaXIoYmFjaywgInBvcnQiLCAiIik7Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNiY3RybC0+ cG9ydHM7IGkrKykKPiArICAgICAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgR0NTUFJJ TlRGKCJwb3J0LyVkIiwgaSArIDEpLCAiIik7Cj4gKwo+ICsgICAgZmxleGFycmF5X2FwcGVuZF9w YWlyKGZyb250LCAiYmFja2VuZC1pZCIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlZCIsIHVzYmN0cmwtPmJhY2tlbmRfZG9taWQpKTsKPiArICAgIGZsZXhhcnJheV9h cHBlbmRfcGFpcihmcm9udCwgInN0YXRlIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBH Q1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKPiArCj4gKyAgICBpZiAo dXBkYXRlX2pzb24pIHsKPiArICAgICAgICBsb2NrID0gbGlieGxfX2xvY2tfZG9tYWluX3VzZXJk YXRhKGdjLCBkb21pZCk7Cj4gKyAgICAgICAgaWYgKCFsb2NrKSB7Cj4gKyAgICAgICAgICAgIHJj ID0gRVJST1JfTE9DS19GQUlMOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJhdGlvbihnYywg ZG9taWQsICZkX2NvbmZpZyk7Cj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAg ICAgICAgREVWSUNFX0FERCh1c2JjdHJsLCB1c2JjdHJscywgZG9taWQsICZ1c2JjdHJsX3NhdmVk LAo+ICsgICAgICAgICAgICAgICAgICAgQ09NUEFSRV9VU0JDVFJMLCAmZF9jb25maWcpOwo+ICsg ICAgfQo+ICsKPiArICAgIGZvciAoOzspIHsKPiArICAgICAgICByYyA9IGxpYnhsX194c190cmFu c2FjdGlvbl9zdGFydChnYywgJnQpOwo+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ ICsgICAgICAgIHJjID0gbGlieGxfX2RldmljZV9leGlzdHMoZ2MsIHQsIGRldmljZSk7Cj4gKyAg ICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7Cj4gKyAgICAgICAgaWYgKHJjID09IDEpIHsKPiAr ICAgICAgICAgICAgLyogYWxyZWFkeSBleGlzdHMgaW4geGVuc3RvcmUgKi8KPiArICAgICAgICAg ICAgTE9HKEVSUk9SLCAiZGV2aWNlIGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7Cj4gKyAg ICAgICAgICAgIHJjID0gRVJST1JfREVWSUNFX0VYSVNUUzsKPiArICAgICAgICAgICAgZ290byBv dXQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBpZiAodXBkYXRlX2pzb24pIHsKPiArICAg ICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwg JmRfY29uZmlnKTsKPiArICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGxpYnhsX19kZXZpY2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGRldmljZSwK PiArICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfa3ZzX29mX2ZsZXhhcnJheShn YywgYmFjaywgYmFjay0+Y291bnQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwgZnJvbnQtPmNvdW50KSwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMKTsKPiArCj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNf dHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7Cj4gKyAgICAgICAgaWYgKCFyYykgYnJlYWs7Cj4g KyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICtvdXQ6Cj4gKyAg ICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ0KTsKPiArICAgIGlmIChsb2NrKSBs aWJ4bF9fdW5sb2NrX2RvbWFpbl91c2VyZGF0YShsb2NrKTsKPiArICAgIGxpYnhsX2RldmljZV91 c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmxfc2F2ZWQpOwo+ICsgICAgbGlieGxfZG9tYWluX2NvbmZp Z19kaXNwb3NlKCZkX2NvbmZpZyk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gKy8qIEFP IG9wZXJhdGlvbiB0byBhZGQgYSB1c2IgY29udHJvbGxlci4KPiArICoKPiArICogR2VuZXJhbGx5 LCBpdCBkb2VzOgo+ICsgKiAxKSBmaWxsIGluIG5lY2Vzc2FyeSB1c2IgY29udHJvbGVyIGluZm9y bWF0aW9uIHdpdGggZGVmYXVsdCB2YWx1ZQo+ICsgKiAyKSB3cml0ZSB1c2IgY29udHJvbGxlciBm cm9udGVuZC9iYWNrZW5kIGluZm8gdG8geGVuc3RvcmUsIHVwZGF0ZSBqc29uCj4gKyAqICAgIGNv bmZpZyBmaWxlIGlmIG5lY2Vzc2FyeS4KPiArICogMykgd2FpdCBmb3IgZGV2aWNlIGNvbm5lY3Rp b24uIFBWVVNCIGZyb250ZW5kIGFuZCBiYWNrZW5kIGRyaXZlciB3aWxsCj4gKyAqICAgIHByb2Jl IHhlbnN0b3JlIHBhdGhzIGFuZCBidWlsZCBjb25uZWN0aW9uIGJldHdlZW4gZnJvbnRlbmQgYW5k IGJhY2tlbmQuCj4gKyAqCj4gKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFvZGV2 IHNob3VsZCBiZSBwcm9wZXJseSBmaWxsZWQ6Cj4gKyAqIGFvZGV2LT5hbywgYW9kZXYtPmNhbGxi YWNrLCBhb2Rldi0+dXBkYXRlX2pzb24sIC4uLgo+ICsgKi8KPiArdm9pZCBsaWJ4bF9fZGV2aWNl X3VzYmN0cmxfYWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQo+ ICt7Cj4gKyAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOwo+ICsgICAgbGlieGxfX2RldmljZSAq ZGV2aWNlOwo+ICsgICAgaW50IHJjOwo+ICsKPiArICAgIHJjID0gbGlieGxfX2RldmljZV91c2Jj dHJsX3NldGRlZmF1bHQoZ2MsIGRvbWlkLCB1c2JjdHJsKTsKPiArICAgIGlmIChyYyA8IDApIGdv dG8gb3V0Owo+ICsKPiArICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgewo+ICsgICAgICAg IHVzYmN0cmwtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidnVzYiIp Owo+ICsgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA8IDApIHsKPiArICAgICAgICAgICAgcmMg PSBFUlJPUl9GQUlMOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKyAg ICB9Cj4gKwo+ICsgICAgaWYgKHVzYmN0cmwtPnR5cGUgIT0gTElCWExfVVNCQ1RSTF9UWVBFX1BW KSB7Cj4gKyAgICAgICAgTE9HKEVSUk9SLCAiVW5zdXBwb3J0ZWQgVVNCIGNvbnRyb2xsZXIgdHlw ZSIpOwo+ICsgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICBnb3RvIG91dDsKPiAr ICAgIH0KPiArCj4gKyAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGRfeGVuc3RvcmUo Z2MsIGRvbWlkLCB1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFvZGV2LT51cGRhdGVfanNvbik7Cj4gKyAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgIEdDTkVXKGRldmljZSk7Cj4gKyAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV91 c2JjdHJsKGdjLCBkb21pZCwgdXNiY3RybCwgZGV2aWNlKTsKPiArICAgIGlmIChyYykgZ290byBv dXQ7Cj4gKwo+ICsgICAgYW9kZXYtPmRldiA9IGRldmljZTsKPiArICAgIGFvZGV2LT5hY3Rpb24g PSBMSUJYTF9fREVWSUNFX0FDVElPTl9BREQ7Cj4gKyAgICBsaWJ4bF9fd2FpdF9kZXZpY2VfY29u bmVjdGlvbihlZ2MsIGFvZGV2KTsKPiArICAgIHJldHVybjsKPiArCj4gK291dDoKPiArICAgIGFv ZGV2LT5yYyA9IHJjOwo+ICsgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOwo+ICsgICAg cmV0dXJuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X2xpc3Rf Zm9yX3VzYmN0cmwobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpZCB1c2JjdHJs LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldiAqKnVzYmRldnMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm51bSk7Cj4gKwo+ICtzdGF0aWMgaW50IGxpYnhs X19kZXZpY2VfdXNiZGV2X3JlbW92ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRl diAqdXNiZGV2KTsKPiArCj4gKy8qIEFPIGZ1bmN0aW9uIHRvIHJlbW92ZSBhIHVzYiBjb250cm9s bGVyLgo+ICsgKgo+ICsgKiBHZW5lcmFsbHksIGl0IGRvZXM6Cj4gKyAqIDEpIGNoZWNrIGlmIHRo ZSB1c2IgY29udHJvbGxlciBleGlzdHMgb3Igbm90Cj4gKyAqIDIpIHJlbW92ZSBhbGwgdXNiIGRl dmljZXMgdW5kZXIgY29udHJvbGxlcgo+ICsgKiAzKSByZW1vdmUgdXNiIGNvbnRyb2xsZXIgaW5m b3JtYXRpb24gZnJvbSB4ZW5zdG9yZQo+ICsgKgo+ICsgKiBCZWZvcmUgY2FsbGluZyB0aGlzIGZ1 bmN0aW9uLCBhb2RldiBzaG91bGQgYmUgcHJvcGVybHkgZmlsbGVkOgo+ICsgKiBhb2Rldi0+YW8s IGFvZGV2LT5kZXYsIGFvZGV2LT5jYWxsYmFjaywgLi4uCj4gKyAqLwo+ICt2b2lkIGxpYnhsX19p bml0aWF0ZV9kZXZpY2VfdXNiY3RybF9yZW1vdmUobGlieGxfX2VnYyAqZWdjLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9k ZXYpCj4gK3sKPiArICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7Cj4gKyAgICBsaWJ4bF9kZXZp Y2VfdXNiZGV2ICp1c2JkZXZzID0gTlVMTDsKPiArICAgIGludCBudW1fdXNiZGV2ID0gMDsKPiAr ICAgIGludCBpLCByYzsKPiArICAgIHVpbnQzMl90IGRvbWlkID0gYW8tPmRvbWlkOwo+ICsgICAg aW50IHVzYmN0cmxfZGV2aWQgPSBhb2Rldi0+ZGV2LT5kZXZpZDsKPiArICAgIGxpYnhsX2Rldmlj ZV91c2JjdHJsIHVzYmN0cmw7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5mbyB1c2JjdHJsaW5mbzsK PiArCj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsKPiArICAgIGxp YnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKPiArICAgIHVzYmN0cmwuZGV2aWQg PSB1c2JjdHJsX2RldmlkOwo+ICsKPiArICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0 aW5mbyhDVFgsIGRvbWlkLCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKPiArICAgIGlmIChyYykg Z290byBvdXQ7Cj4gKwo+ICsgICAgaWYgKHVzYmN0cmxpbmZvLnR5cGUgIT0gTElCWExfVVNCQ1RS TF9UWVBFX1BWKSB7Cj4gKyAgICAgICAgTE9HKEVSUk9SLCAiVW5zdXBwb3J0ZWQgVVNCIGNvbnRy b2xsZXIgdHlwZSIpOwo+ICsgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICBnb3Rv IG91dDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBSZW1vdmUgdXNiIGRldmljZXMgZmlyc3QgKi8K PiArICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChnYywgZG9t aWQsIHVzYmN0cmxfZGV2aWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnVzYmRldnMsICZudW1fdXNiZGV2KTsKPiArICAgIGlmIChyYykgZ290byBv dXQ7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG51bV91c2JkZXY7IGkrKykgewo+ICsgICAg ICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGdjLCBkb21pZCwgJnVzYmRldnNb aV0pOwo+ICsgICAgICAgIGlmIChyYykgewo+ICsgICAgICAgICAgICBMT0coRVJST1IsICJsaWJ4 bF9fZGV2aWNlX3VzYmRldl9yZW1vdmUgZmFpbGVkOiBjb250cm9sbGVyICVkLCAiCj4gKyAgICAg ICAgICAgICAgICAicG9ydCAlZCIsIHVzYmRldnNbaV0uY3RybCwgdXNiZGV2c1tpXS5wb3J0KTsK PiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAg IGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOwo+ICsgICAgbGlieGxfdXNi Y3RybGluZm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOwo+ICsKPiArICAgIC8qIFJlbW92ZSB1c2Jj dHJsICovCj4gKyAgICBsaWJ4bF9faW5pdGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywg YW9kZXYpOwo+ICsgICAgcmV0dXJuOwo+ICsKPiArb3V0Ogo+ICsgICAgbGlieGxfZGV2aWNlX3Vz YmN0cmxfZGlzcG9zZSgmdXNiY3RybCk7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5mb19kaXNwb3Nl KCZ1c2JjdHJsaW5mbyk7Cj4gKyAgICBhb2Rldi0+cmMgPSByYzsKPiArICAgIGFvZGV2LT5jYWxs YmFjayhlZ2MsIGFvZGV2KTsKPiArICAgIHJldHVybjsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IGNoYXIgKnZ1c2JfYmVfZnJvbV94c19mZShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpmZV9w YXRoLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRn dF9kb21pZCkKPiArewo+ICsgICAgY29uc3QgY2hhciAqYmVfcGF0aDsKPiArICAgIGludCByOwo+ ICsgICAgdWludDMyX3QgYmVfZG9taWQsIGZlX2RvbWlkOwo+ICsKPiArICAgIHIgPSBsaWJ4bF9f eHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgZmVf cGF0aCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmVfcGF0aCk7Cj4gKyAg ICBpZiAociB8fCAhYmVfcGF0aCkgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgLyogQ2hlY2sgdG8g c2VlIHRoYXQgaXQgaGFzIHRoZSBwcm9wZXIgZm9ybSwgYW5kIHRoYXQgZmVfZG9taWQgPT0KPiAr ICAgICAqIHRhcmdldCBkb21pZCAqLwo+ICsgICAgciA9IHNzY2FuZihiZV9wYXRoLCAiL2xvY2Fs L2RvbWFpbi8lZC9iYWNrZW5kL3Z1c2IvJWQiLAo+ICsgICAgICAgICAgICAgICAmYmVfZG9taWQs ICZmZV9kb21pZCk7Cj4gKwo+ICsgICAgaWYgKHIgIT0gMiB8fCBmZV9kb21pZCAhPSB0Z3RfZG9t aWQpIHsKPiArICAgICAgICBMT0coRVJST1IsICJNYWxmb3JtZWQgYmFja2VuZCwgcmVmdXNpbmcg dG8gdXNlIik7Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0 dXJuIGJlX3BhdGg7Cj4gK30KPiArCj4gK2xpYnhsX2RldmljZV91c2JjdHJsICoKPiArbGlieGxf ZGV2aWNlX3VzYmN0cmxfbGlzdChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGludCAq bnVtKQo+ICt7Cj4gKyAgICBHQ19JTklUKGN0eCk7Cj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCAqdXNiY3RybHMgPSBOVUxMOwo+ICsgICAgY2hhciAqcGF0aCA9IE5VTEw7Cj4gKyAgICBjaGFy ICoqZW50cnkgPSBOVUxMOwo+ICsgICAgdW5zaWduZWQgaW50IG5lbnRyaWVzID0gMDsKPiArCj4g KyAgICAqbnVtID0gMDsKPiArCj4gKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVz YiIsCj4gKyAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9t aWQpKTsKPiArICAgIGVudHJ5ID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEwsIHBh dGgsICZuZW50cmllcyk7Cj4gKwo+ICsgICAgaWYgKGVudHJ5ICYmIG5lbnRyaWVzKSB7Cj4gKyAg ICAgICAgdXNiY3RybHMgPSBsaWJ4bF9femFsbG9jKE5PR0MsIHNpemVvZigqdXNiY3RybHMpICog bmVudHJpZXMpOwo+ICsgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsOwo+ICsg ICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICplbmQgPSB1c2JjdHJscyArIG5lbnRyaWVzOwo+ ICsgICAgICAgIGZvciAodXNiY3RybCA9IHVzYmN0cmxzOwo+ICsgICAgICAgICAgICAgdXNiY3Ry bCA8IGVuZDsKPiArICAgICAgICAgICAgIHVzYmN0cmwrKywgZW50cnkrKywgKCpudW0pKyspIHsK PiArICAgICAgICAgICAgY29uc3QgY2hhciAqdG1wLCAqYmVfcGF0aCwgKmZlX3BhdGg7Cj4gKyAg ICAgICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9pbml0KHVzYmN0cmwpOwo+ICsgICAgICAgICAgICB1c2JjdHJsLT5kZXZpZCA9IGF0b2koKmVu dHJ5KTsKPiArCj4gKyNkZWZpbmUgUkVBRF9TVUJQQVRIKHBhdGgsIHN1YnBhdGgpICh7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICByZXQgPSBsaWJ4bF9feHNf cmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8iIHN1YnBhdGgs IHBhdGgpLCAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1w KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgICBpZiAocmV0KSBnb3Rv IG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsg ICAgICAgIChjaGFyICopdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICB9KQo+ICsKPiArI2RlZmluZSBSRUFEX1NVQlBBVEhfSU5U KHBhdGgsIHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg ICAgIHJldCA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAg ICAgICAgICAgICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQ UklOVEYoIiVzLyIgc3VicGF0aCwgcGF0aCksICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ0bXApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsg ICAgICAgIGlmIChyZXQpIGdvdG8gb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gKyAgICAgICAgdG1wID8gYXRvaSh0bXApIDogLTE7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIH0pCj4gKwo+ICsgICAg ICAgICAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy8lcyIsIHBhdGgsICplbnRyeSk7Cj4gKyAg ICAgICAgICAgIGJlX3BhdGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlk KTsKPiArICAgICAgICAgICAgaWYgKCFiZV9wYXRoKSBnb3RvIG91dDsKPiArICAgICAgICAgICAg dXNiY3RybC0+YmFja2VuZF9kb21pZCA9IFJFQURfU1VCUEFUSF9JTlQoZmVfcGF0aCwgImJhY2tl bmQtaWQiKTsKPiArICAgICAgICAgICAgdXNiY3RybC0+dmVyc2lvbiA9IFJFQURfU1VCUEFUSF9J TlQoYmVfcGF0aCwgInVzYi12ZXIiKTsKPiArICAgICAgICAgICAgdXNiY3RybC0+cG9ydHMgPSBS RUFEX1NVQlBBVEhfSU5UKGJlX3BhdGgsICJudW0tcG9ydHMiKTsKPiArICAgICAgICAgICAgbGli eGxfdXNiY3RybF90eXBlX2Zyb21fc3RyaW5nKFJFQURfU1VCUEFUSChiZV9wYXRoLCAidHlwZSIp LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzYmN0cmwt PnR5cGUpOwo+ICsKPiArI3VuZGVmIFJFQURfU1VCUEFUSAo+ICsjdW5kZWYgUkVBRF9TVUJQQVRI X0lOVAo+ICsgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIEdDX0ZSRUU7Cj4gKyAgICByZXR1 cm4gdXNiY3RybHM7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBMT0coRVJST1IsICJVbmFibGUgdG8gbGlz dCBVU0IgQ29udHJvbGxlcnMiKTsKPiArICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3RfZnJl ZSh1c2JjdHJscywgKm51bSk7Cj4gKyAgICBHQ19GUkVFOwo+ICsgICAgKm51bSA9IDA7Cj4gKyAg ICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiAraW50IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGlu Zm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdXNiY3RybGluZm8gKnVzYmN0cmxpbmZvKQo+ ICt7Cj4gKyAgICBHQ19JTklUKGN0eCk7Cj4gKyAgICBjb25zdCBjaGFyICpkb21wYXRoLCAqZmVf cGF0aCwgKmJlX3BhdGgsICp0bXA7Cj4gKyAgICBpbnQgcmM7Cj4gKwo+ICsgICAgdXNiY3RybGlu Zm8tPmRldmlkID0gdXNiY3RybC0+ZGV2aWQ7Cj4gKwo+ICsjZGVmaW5lIFJFQURfU1VCUEFUSChw YXRoLCBzdWJwYXRoKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg ICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NT UFJJTlRGKCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdG1wKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g KyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiArICAgICAgICAoY2hhciAqKXRtcDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgfSkKPiArCj4gKyNk ZWZpbmUgUkVBRF9TVUJQQVRIX0lOVChwYXRoLCBzdWJwYXRoKSAoeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKPiArICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2Ms IFhCVF9OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzLyIgc3VicGF0aCwgcGF0aCksICAgICBcCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKPiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAgIHRtcCA/IGF0 b2kodG1wKSA6IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cj4gKyAgICB9KQo+ICsKPiArICAgIGRvbXBhdGggPSBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2Ms IGRvbWlkKTsKPiArICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiLyVkIiwg ZG9tcGF0aCwgdXNiY3RybC0+ZGV2aWQpOwo+ICsgICAgYmVfcGF0aCA9IFJFQURfU1VCUEFUSChm ZV9wYXRoLCAiYmFja2VuZCIpOwo+ICsgICAgdXNiY3RybGluZm8tPmJhY2tlbmQgPSBsaWJ4bF9f c3RyZHVwKE5PR0MsIGJlX3BhdGgpOwo+ICsgICAgdXNiY3RybGluZm8tPmJhY2tlbmRfaWQgPSBS RUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJiYWNrZW5kLWlkIik7Cj4gKyAgICB1c2JjdHJsaW5m by0+c3RhdGUgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJzdGF0ZSIpOwo+ICsgICAgdXNi Y3RybGluZm8tPmV2dGNoID0gUkVBRF9TVUJQQVRIX0lOVChmZV9wYXRoLCAiZXZlbnQtY2hhbm5l bCIpOwo+ICsgICAgdXNiY3RybGluZm8tPnJlZl91cmIgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3Bh dGgsICJ1cmItcmluZy1yZWYiKTsKPiArICAgIHVzYmN0cmxpbmZvLT5yZWZfY29ubiA9IFJFQURf U1VCUEFUSF9JTlQoZmVfcGF0aCwgInVyYi1yaW5nLXJlZiIpOwo+ICsgICAgdG1wID0gUkVBRF9T VUJQQVRIKGJlX3BhdGgsICJmcm9udGVuZCIpOwo+ICsgICAgdXNiY3RybGluZm8tPmZyb250ZW5k ID0gbGlieGxfX3N0cmR1cChOT0dDLCB0bXApOwo+ICsgICAgdXNiY3RybGluZm8tPmZyb250ZW5k X2lkID0gUkVBRF9TVUJQQVRIX0lOVChiZV9wYXRoLCAiZnJvbnRlbmQtaWQiKTsKPiArICAgIHVz YmN0cmxpbmZvLT5wb3J0cyA9IFJFQURfU1VCUEFUSF9JTlQoYmVfcGF0aCwgIm51bS1wb3J0cyIp Owo+ICsgICAgdXNiY3RybGluZm8tPnZlcnNpb24gPSBSRUFEX1NVQlBBVEhfSU5UKGJlX3BhdGgs ICJ1c2ItdmVyIik7Owo+ICsgICAgdG1wID0gUkVBRF9TVUJQQVRIKGJlX3BhdGgsICJ0eXBlIik7 Cj4gKyAgICBsaWJ4bF91c2JjdHJsX3R5cGVfZnJvbV9zdHJpbmcodG1wLCAmdXNiY3RybGluZm8t PnR5cGUpOwo+ICsKPiArI3VuZGVmIFJFQURfU1VCUEFUSAo+ICsjdW5kZWYgUkVBRF9TVUJQQVRI X0lOVAo+ICsKPiArICAgIHJjID0gMDsKPiArCj4gK291dDoKPiArICAgIEdDX0ZSRUU7Cj4gKyAg ICByZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBsaWJ4bF9kZXZpZF90b19kZXZpY2VfdXNiY3Ry bChsaWJ4bF9jdHggKmN0eCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRl dmlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Vz YmN0cmwgKnVzYmN0cmwpCj4gK3sKPiArICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJs czsKPiArICAgIGludCBuYiA9IDA7Cj4gKyAgICBpbnQgaSwgcmM7Cj4gKwo+ICsgICAgdXNiY3Ry bHMgPSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0KGN0eCwgZG9taWQsICZuYik7Cj4gKyAgICBp ZiAoIXVzYmN0cmxzKSByZXR1cm4gRVJST1JfRkFJTDsKPiArCj4gKyAgICByYyA9IEVSUk9SX0ZB SUw7Cj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgbmI7IGkrKykgewo+ICsgICAgICAgIGlmIChkZXZp ZCA9PSB1c2JjdHJsc1tpXS5kZXZpZCkgewo+ICsgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybF9jb3B5KGN0eCwgdXNiY3RybCwgJnVzYmN0cmxzW2ldKTsKPiArICAgICAgICAgICAgcmMg PSAwOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfbGlzdF9mcmVlKHVzYmN0cmxzLCBuYik7Cj4gKyAgICBy ZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkICp6YWxsb2NfZGlyZW50KGxpYnhsX19n YyAqZ2MsIGNvbnN0IGNoYXIgKmRpcnBhdGgpCj4gK3sKPiArICAgIHNpemVfdCBuZWVkID0gb2Zm c2V0b2Yoc3RydWN0IGRpcmVudCwgZF9uYW1lKSArCj4gKyAgICAgICAgICAgICAgICAgIHBhdGhj b25mKGRpcnBhdGgsIF9QQ19OQU1FX01BWCkgKyAxOwo+ICsKPiArICAgIHJldHVybiBsaWJ4bF9f emFsbG9jKGdjLCBuZWVkKTsKPiArfQo+ICsKPiArc3RhdGljIGNoYXIgKnVzYmRldl9idXNhZGRy X3RvX2J1c2lkKGxpYnhsX19nYyAqZ2MsIGludCBidXMsIGludCBhZGRyKQo+ICt7Cj4gKyAgICBE SVIgKmRpcjsKPiArICAgIGNoYXIgKmJ1c2lkID0gTlVMTDsKPiArICAgIHN0cnVjdCBkaXJlbnQg KmRlX2J1ZjsKPiArICAgIHN0cnVjdCBkaXJlbnQgKmRlOwo+ICsKPiArICAgIC8qIGludmFsaWQg aG9zdGJ1cyBvciBob3N0YWRkciAqLwo+ICsgICAgaWYgKGJ1cyA8IDEgfHwgYWRkciA8IDEpCj4g KyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgICAgZGlyID0gb3BlbmRpcihTWVNGU19VU0Jf REVWKTsKPiArICAgIGlmICghZGlyKSB7Cj4gKyAgICAgICAgTE9HRShFUlJPUiwgIm9wZW5kaXIg ZmFpbGVkOiAnJXMnIiwgU1lTRlNfVVNCX0RFVik7Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4g KyAgICB9Cj4gKwo+ICsgICAgZGVfYnVmID0gemFsbG9jX2RpcmVudChnYywgU1lTRlNfVVNCX0RF Vik7Cj4gKwo+ICsgICAgZm9yICg7Oykgewo+ICsgICAgICAgIGNoYXIgKmZpbGVuYW1lOwo+ICsg ICAgICAgIHZvaWQgKmJ1ZjsKPiArICAgICAgICBpbnQgYnVzbnVtID0gLTE7Cj4gKyAgICAgICAg aW50IGRldm51bSA9IC0xOwo+ICsKPiArICAgICAgICBpbnQgciA9IHJlYWRkaXJfcihkaXIsIGRl X2J1ZiwgJmRlKTsKPiArICAgICAgICBpZiAocikgewo+ICsgICAgICAgICAgICBMT0dFKEVSUk9S LCAiZmFpbGVkIHRvIHJlYWRkaXIgJXMiLCBTWVNGU19VU0JfREVWKTsKPiArICAgICAgICAgICAg YnJlYWs7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIGlmICghZGUpCj4gKyAgICAgICAgICAgIGJy ZWFrOwo+ICsKPiArICAgICAgICBpZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8Cj4gKyAg ICAgICAgICAgICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCj4gKyAgICAgICAgICAgIGNvbnRp bnVlOwo+ICsKPiArICAgICAgICBmaWxlbmFtZSA9IEdDU1BSSU5URihTWVNGU19VU0JfREVWICIv JXMvZGV2bnVtIiwgZGUtPmRfbmFtZSk7Cj4gKyAgICAgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNm c19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCj4gKyAgICAgICAgICAg IGRldm51bSA9IGF0b2koYnVmKTsKPiArCj4gKyAgICAgICAgZmlsZW5hbWUgPSBHQ1NQUklOVEYo U1lTRlNfVVNCX0RFViAiLyVzL2J1c251bSIsIGRlLT5kX25hbWUpOwo+ICsgICAgICAgIGlmICgh bGlieGxfX3JlYWRfc3lzZnNfZmlsZV9jb250ZW50cyhnYywgZmlsZW5hbWUsICZidWYsIE5VTEwp KQo+ICsgICAgICAgICAgICBidXNudW0gPSBhdG9pKGJ1Zik7Cj4gKwo+ICsgICAgICAgIGlmIChi dXMgPT0gYnVzbnVtICYmIGFkZHIgPT0gZGV2bnVtKSB7Cj4gKyAgICAgICAgICAgIGJ1c2lkID0g bGlieGxfX3N0cmR1cChnYywgZGUtPmRfbmFtZSk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArCj4gKyAgICBjbG9zZWRpcihkaXIpOwo+ICsgICAgcmV0dXJu IGJ1c2lkOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQo bGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50OF90ICpidXMsIHVpbnQ4X3QgKmFkZHIpCj4gK3sKPiArICAg IGNoYXIgKmZpbGVuYW1lOwo+ICsgICAgdm9pZCAqYnVmOwo+ICsKPiArICAgIGZpbGVuYW1lID0g R0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9idXNudW0iLCBidXNpZCk7Cj4gKyAgICBpZiAo IWxpYnhsX19yZWFkX3N5c2ZzX2ZpbGVfY29udGVudHMoZ2MsIGZpbGVuYW1lLCAmYnVmLCBOVUxM KSkKPiArICAgICAgICAqYnVzID0gYXRvaShidWYpOwo+ICsgICAgZWxzZQo+ICsgICAgICAgIHJl dHVybiBFUlJPUl9GQUlMOwo+ICsKPiArICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VT Ql9ERVYgIi8lcy9kZXZudW0iLCBidXNpZCk7Cj4gKyAgICBpZiAoIWxpYnhsX19yZWFkX3N5c2Zz X2ZpbGVfY29udGVudHMoZ2MsIGZpbGVuYW1lLCAmYnVmLCBOVUxMKSkKPiArICAgICAgICAqYWRk ciA9IGF0b2koYnVmKTsKPiArICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsK PiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfYXNzaWduZWRf ZGV2aWNlcyhsaWJ4bF9fZ2MgKmdjLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV91c2JkZXYgKipsaXN0LCBpbnQgKm51bSkKPiArewo+ICsgICAgY2hhciAq KmRvbWxpc3Q7Cj4gKyAgICB1bnNpZ25lZCBpbnQgbmRvbSA9IDA7Cj4gKyAgICBpbnQgaSwgaiwg azsKPiArICAgIGludCByYzsKPiArCj4gKyAgICAqbGlzdCA9IE5VTEw7Cj4gKyAgICAqbnVtID0g MDsKPiArCj4gKyAgICBkb21saXN0ID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEws ICIvbG9jYWwvZG9tYWluIiwgJm5kb20pOwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG5kb207IGkr Kykgewo+ICsgICAgICAgIGNoYXIgKnBhdGg7Cj4gKyAgICAgICAgY2hhciAqKnVzYmN0cmxzOwo+ ICsgICAgICAgIHVuc2lnbmVkIGludCBuYyA9IDA7Cj4gKyAgICAgICAgdWludDMyX3QgZG9taWQg PSBhdG9pKGRvbWxpc3RbaV0pOwo+ICsKPiArICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9k ZXZpY2UvdnVzYiIsIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpKTsKPiArICAgICAg ICB1c2JjdHJscyA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmbmMp Owo+ICsKPiArICAgICAgICBmb3IgKGogPSAwOyBqIDwgbmM7IGorKykgewo+ICsgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp0bXAgPSBOVUxMOwo+ICsgICAgICAgICAgICBpbnQgbmQg PSAwOwo+ICsKPiArICAgICAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9saXN0X2Zv cl91c2JjdHJsKGdjLCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF0b2kodXNiY3RybHNbal0pLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCwgJm5kKTsKPiAr ICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgICAgIGlmICghbmQp IGNvbnRpbnVlOwo+ICsKPiArICAgICAgICAgICAgR0NSRUFMTE9DX0FSUkFZKCpsaXN0LCAqbnVt ICsgbmQpOwo+ICsgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbmQ7IGsrKykgewo+ICsgICAg ICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldl9jb3B5KENUWCwgKmxpc3QgKyAqbnVtLCB0 bXAgKyBrKTsKPiArICAgICAgICAgICAgICAgICgqbnVtKSsrOwo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICsKPiArb3V0Ogo+ICsg ICAgTE9HKEVSUk9SLCAiZmFpbCB0byBnZXQgYXNzaWduZWQgZGV2aWNlcyIpOwo+ICsgICAgcmV0 dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpc191c2JkZXZfaW5fYXJyYXkobGlieGxf ZGV2aWNlX3VzYmRldiAqdXNiZGV2cywgaW50IG51bSwKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKPiArewo+ICsgICAgaW50IGk7 Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKHVz YmRldnNbaV0udS5ob3N0ZGV2Lmhvc3RidXMgPT0gdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cyAm Jgo+ICsgICAgICAgICAgICB1c2JkZXZzW2ldLnUuaG9zdGRldi5ob3N0YWRkciA9PSB1c2JkZXYt PnUuaG9zdGRldi5ob3N0YWRkcikKPiArICAgICAgICAgICAgcmV0dXJuIHRydWU7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKiBjaGVjayBpZiBVU0IgZGV2 aWNlIHR5cGUgaXMgYXNzaWduYWJsZSAqLwo+ICtzdGF0aWMgYm9vbCBpc191c2JkZXZfYXNzaWdu YWJsZShsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYpCj4gK3sKPiAr ICAgIGludCBjbGFzc2NvZGU7Cj4gKyAgICBjaGFyICpmaWxlbmFtZTsKPiArICAgIHZvaWQgKmJ1 ZiA9IE5VTEw7Cj4gKyAgICBjaGFyICpidXNpZCA9IE5VTEw7Cj4gKwo+ICsgICAgYnVzaWQgPSB1 c2JkZXZfYnVzYWRkcl90b19idXNpZChnYywgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9z dGFkZHIpOwo+ICsgICAgaWYgKCFidXNpZCkgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIGZpbGVu YW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9iRGV2aWNlQ2xhc3MiLCBidXNpZCk7 Cj4gKyAgICBpZiAobGlieGxfX3JlYWRfc3lzZnNfZmlsZV9jb250ZW50cyhnYywgZmlsZW5hbWUs ICZidWYsIE5VTEwpKQo+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPiArCj4gKyAgICBjbGFzc2Nv ZGUgPSBhdG9pKGJ1Zik7Cj4gKyAgICByZXR1cm4gY2xhc3Njb2RlICE9IFVTQkhVQl9DTEFTU19D T0RFOwo+ICt9Cj4gKwo+ICsvKiBnZXQgdXNiIGRldmljZXMgdW5kZXIgY2VydGFpbiB1c2IgY29u dHJvbGxlciAqLwo+ICtzdGF0aWMgaW50Cj4gK2xpYnhsX19kZXZpY2VfdXNiZGV2X2xpc3RfZm9y X3VzYmN0cmwobGlieGxfX2djICpnYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9kZXZpZCB1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKip1c2JkZXZzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtKQo+ICt7Cj4gKyAgICBjb25zdCBj aGFyICpmZV9wYXRoLCAqYmVfcGF0aCwgKm51bV9kZXZzOwo+ICsgICAgaW50IG4sIGksIHJjOwo+ ICsKPiArICAgICp1c2JkZXZzID0gTlVMTDsKPiArICAgICpudW0gPSAwOwo+ICsKPiArICAgIGZl X3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiLyVkIiwKPiArICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCksIHVzYmN0cmwpOwo+ICsK PiArICAgIGJlX3BhdGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlkKTsK PiArICAgIGlmICghYmVfcGF0aCkgewo+ICsgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAg ICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICByYyA9IGxpYnhsX194c19yZWFkX2No ZWNrZWQoZ2MsIFhCVF9OVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD U1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVfcGF0aCksCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJm51bV9kZXZzKTsKPiArICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ICsg ICAgbiA9IG51bV9kZXZzID8gYXRvaShudW1fZGV2cykgOiAwOwo+ICsKPiArICAgIGZvciAoaSA9 IDA7IGkgPCBuOyBpKyspIHsKPiArICAgICAgICBjb25zdCBjaGFyICpidXNpZDsKPiArICAgICAg ICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXY7Cj4gKwo+ICsgICAgICAgIHJjID0gbGlieGxf X3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvcG9ydC8lZCIsIGJlX3BhdGgsIGkgKyAxKSwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1c2lkKTsKPiArICAgICAgICBp ZiAocmMpIGdvdG8gb3V0Owo+ICsKPiArICAgICAgICBpZiAoYnVzaWQgJiYgc3RyY21wKGJ1c2lk LCAiIikpIHsKPiArICAgICAgICAgICAgR0NSRUFMTE9DX0FSUkFZKCp1c2JkZXZzLCAqbnVtICsg MSk7Cj4gKyAgICAgICAgICAgIHVzYmRldiA9ICp1c2JkZXZzICsgKm51bTsKPiArICAgICAgICAg ICAgKCpudW0pKys7Cj4gKyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfaW5pdCh1c2Jk ZXYpOwo+ICsgICAgICAgICAgICB1c2JkZXYtPmN0cmwgPSB1c2JjdHJsOwo+ICsgICAgICAgICAg ICB1c2JkZXYtPnBvcnQgPSBpICsgMTsKPiArICAgICAgICAgICAgdXNiZGV2LT50eXBlID0gTElC WExfVVNCREVWX1RZUEVfSE9TVERFVjsKPiArICAgICAgICAgICAgcmMgPSB1c2JkZXZfYnVzYWRk cl9mcm9tX2J1c2lkKGdjLCBidXNpZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRy KTsKPiArICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmMgPSAwOwo+ICsKPiArb3V0Ogo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICsvKiBnZXQgYWxsIHVzYiBkZXZpY2VzIG9mIHRoZSBkb21haW4gKi8KPiArbGlieGxfZGV2 aWNlX3VzYmRldiAqCj4gK2xpYnhsX2RldmljZV91c2JkZXZfbGlzdChsaWJ4bF9jdHggKmN0eCwg dWludDMyX3QgZG9taWQsIGludCAqbnVtKQo+ICt7Cj4gKyAgICBHQ19JTklUKGN0eCk7Cj4gKyAg ICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXZzID0gTlVMTDsKPiArICAgIGNvbnN0IGNoYXIg KnBhdGg7Cj4gKyAgICBjaGFyICoqdXNiY3RybHM7Cj4gKyAgICB1bnNpZ25lZCBpbnQgbmMgPSAw Owo+ICsgICAgaW50IGksIGo7Cj4gKwo+ICsgICAgKm51bSA9IDA7Cj4gKwo+ICsgICAgcGF0aCA9 IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1c2IiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSk7Cj4gKyAgICB1c2JjdHJscyA9IGxpYnhs X194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmbmMpOwo+ICsKPiArICAgIGZvciAo aSA9IDA7IGkgPCBuYzsgaSsrKSB7Cj4gKyAgICAgICAgaW50IHIsIG5kID0gMDsKPiArICAgICAg ICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp0bXAgPSBOVUxMOwo+ICsKPiArICAgICAgICByID0gbGli eGxfX2RldmljZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChnYywgZG9taWQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaSh1c2JjdHJsc1tp XSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRtcCwgJm5kKTsKPiArICAgICAgICBpZiAoIXIgfHwgIW5kKSBjb250aW51ZTsKPiArCj4gKyAg ICAgICAgdXNiZGV2cyA9IGxpYnhsX19yZWFsbG9jKE5PR0MsIHVzYmRldnMsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdXNiZGV2cykgKiAoKm51bSArIG5kKSk7 Cj4gKyAgICAgICAgZm9yIChqID0gMDsgaiA8IG5kOyBqKyspIHsKPiArICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldl9jb3B5KGN0eCwgdXNiZGV2cyArICpudW0sIHRtcCArIGopOwo+ICsg ICAgICAgICAgICAoKm51bSkrKzsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgR0Nf RlJFRTsKPiArICAgIHJldHVybiB1c2JkZXZzOwo+ICt9Cj4gKwo+ICsvKiBmaW5kIGZpcnN0IHVu dXNlZCBjb250cm9sbGVyOnBvcnQgYW5kIGdpdmUgdGhhdCB0byB1c2IgZGV2aWNlICovCj4gK3N0 YXRpYyBpbnQKPiArbGlieGxfX2RldmljZV91c2JkZXZfc2V0X2RlZmF1bHRfdXNiY3RybChsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYpCj4gK3sKPiArICAgIGxp YnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJscyA9IE5VTEw7Cj4gKyAgICBpbnQgbnVtY3RybCA9 IDA7Cj4gKyAgICBpbnQgaSwgaiwgcmM7Cj4gKwo+ICsgICAgdXNiY3RybHMgPSBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9saXN0KENUWCwgZG9taWQsICZudW1jdHJsKTsKPiArICAgIGlmICghbnVtY3Ry bCB8fCAhdXNiY3RybHMpIHsKPiArICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4gKyAgICAgICAg Z290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IG51bWN0cmw7IGkr Kykgewo+ICsgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2JjdHJsc1tpXS5wb3J0czsgaisrKSB7 Cj4gKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGgsICp0bXA7Cj4gKwo+ICsgICAgICAgICAg ICBwYXRoID0gR0NTUFJJTlRGKCIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJY TF9UT09MU1RBQ0tfRE9NSUQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlk LCB1c2JjdHJsc1tpXS5kZXZpZCwgaiArIDEpOwo+ICsgICAgICAgICAgICByYyA9IGxpYnhsX194 c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmdG1wKTsKPiArICAgICAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgICAgIGlmICh0bXAgJiYgIXN0cmNtcCh0 bXAsICIiKSkgewo+ICsgICAgICAgICAgICAgICAgdXNiZGV2LT5jdHJsID0gdXNiY3RybHNbaV0u ZGV2aWQ7Cj4gKyAgICAgICAgICAgICAgICB1c2JkZXYtPnBvcnQgPSBqICsgMTsKPiArICAgICAg ICAgICAgICAgIHJjID0gMDsKPiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAg ICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIC8qIG5vIGF2YWlsYWJsZSBj b250cm9sbGVyOnBvcnQgKi8KPiArICAgIHJjID0gRVJST1JfRkFJTDsKPiArCj4gK291dDoKPiAr ICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3RfZnJlZSh1c2JjdHJscywgbnVtY3RybCk7Cj4g KyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gKy8qIEZpbGwgaW4gdXNiIGluZm9ybWF0aW9uIHdp dGggZGVmYXVsdCB2YWx1ZS4KPiArICoKPiArICogR2VuZXJhbGx5LCBpdCBkb2VzOgo+ICsgKiAx KSBpZiAiY29udHJvbGxlciIgaXMgbm90IHNwZWNpZmllZDoKPiArICogICAgLSBpZiAicG9ydCIg aXMgbm90IHNwZWNpZmllZCwgdHJ5IHRvIGZpbmQgYW4gYXZhaWxhYmxlIGNvbnRyb2xsZXI6cG9y dCwKPiArICogICAgICBpZiBmb3VuZCwgdXNlIHRoYXQ7IG90aGVyd2lzZSwgY3JlYXRlIGEgbmV3 IGNvbnRyb2xsZXIsIHVzZSB0aGlzCj4gKyAqICAgICAgY29udHJvbGxlciBhbmQgaXRzIGZpcnN0 IHBvcnQKPiArICogICAgLSBpZiAicG9ydCIgaXMgc3BlY2lmaWVkLCByZXBvcnQgZXJyb3IuCj4g KyAqIDIpIGlmICJjb250cm9sbGVyIiBpcyBzcGVjaWZpZWQsIGJ1dCBwb3J0IGlzIG5vdCBzcGVj aWZpZWQ6Cj4gKyAqICAgIHRyeSB0byBmaW5kIGFuIGF2YWlsYWJsZSBwb3J0IHVuZGVyIHRoaXMg Y29udHJvbGxlciwgaWYgZm91bmQsIHVzZQo+ICsgKiAgICB0aGF0LCBvdGhlcndpc2UsIHJlcG9y dCBlcnJvci4KPiArICogMykgaWYgYm90aCAiY29udHJvbGxlciIgYW5kICJwb3J0IiBhcmUgc3Bl Y2lmaWVkOgo+ICsgKiAgICBjaGVjayB0aGUgY29udHJvbGxlcjpwb3J0IGlzIGF2YWlsYWJsZSwg aWYgbm90LCByZXBvcnQgZXJyb3IuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGxpYnhsX19kZXZpY2Vf dXNiZGV2X3NldGRlZmF1bHQobGlieGxfX2djICpnYywKPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1cGRhdGVf anNvbikKPiArewo+ICsgICAgaW50IHJjOwo+ICsKPiArICAgIGlmICghdXNiZGV2LT50eXBlKQo+ ICsgICAgICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hPU1RERVY7Cj4gKwo+ ICsgICAgaWYgKHVzYmRldi0+Y3RybCA9PSAtMSkgewo+ICsgICAgICAgIGlmICh1c2JkZXYtPnBv cnQpIHsKPiArICAgICAgICAgICAgTE9HKEVSUk9SLCAiVVNCIGNvbnRyb2xsZXIgbXVzdCBiZSBz cGVjaWZpZWQgaWYgeW91IHNwZWNpZnkgcG9ydCIpOwo+ICsgICAgICAgICAgICByZXR1cm4gRVJS T1JfSU5WQUw7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICByYyA9IGxpYnhsX19kZXZpY2Vf dXNiZGV2X3NldF9kZWZhdWx0X3VzYmN0cmwoZ2MsIGRvbWlkLCB1c2JkZXYpOwo+ICsgICAgICAg IC8qIElmIG5vIGV4aXN0aW5nIGNvbnRyb2xsZXIgdG8gaG9zdCB0aGlzIHVzYiBkZXZpY2UsIGFk ZCBhIG5ldyBvbmUgKi8KPiArICAgICAgICBpZiAocmMpIHsKPiArICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmw7Cj4gKwo+ICsgICAgICAgICAgICBHQ05FVyh1c2JjdHJs KTsKPiArICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCh1c2JjdHJsKTsKPiAr ICAgICAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVsdChnYywgZG9t aWQsIHVzYmN0cmwpOwo+ICsgICAgICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKPiArCj4g KyAgICAgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgewo+ICsgICAgICAgICAgICAg ICAgdXNiY3RybC0+ZGV2aWQgPSBsaWJ4bF9fZGV2aWNlX25leHRpZChnYywgZG9taWQsICJ2dXNi Iik7Cj4gKyAgICAgICAgICAgICAgICBpZiAodXNiY3RybC0+ZGV2aWQgPCAwKSB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ICsgICAgICAgICAgICAgICAgICAgIGdv dG8gb3V0Owo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAg ICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGRfeGVuc3RvcmUoZ2MsIGRvbWlk LCB1c2JjdHJsLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXBkYXRlX2pzb24pOwo+ICsgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgICAgICAgICAgdXNiZGV2LT5jdHJsID0gdXNiY3RybC0+ZGV2aWQ7Cj4gKyAgICAg ICAgICAgIHVzYmRldi0+cG9ydCA9IDE7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIHsKPiAr ICAgICAgICAvKiBBIGNvbnRyb2xsZXIgd2FzIHNwZWNpZmllZDsgbG9vayBpdCB1cCAqLwo+ICsg ICAgICAgIGNvbnN0IGNoYXIgKmZlX3BhdGgsICpiZV9wYXRoLCAqdG1wOwo+ICsKPiArICAgICAg ICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYi8lZCIsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIGRvbWlkKSwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+Y3RybCk7Cj4gKwo+ICsgICAgICAgIGJl X3BhdGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlkKTsKPiArICAgICAg ICBpZiAoIWJlX3BhdGgpIHsKPiArICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ICsgICAg ICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICh1c2JkZXYt PnBvcnQpIHsKPiArICAgICAgICAgICAgLyogQSBzcGVjaWZpYyBwb3J0IHdhcyByZXF1ZXN0ZWQ7 IHNlZSBpZiBpdCdzIGF2YWlsYWJsZSAqLwo+ICsgICAgICAgICAgICByYyA9IGxpYnhsX194c19y ZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wb3J0LyVkIiwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZV9wYXRoLCB1c2JkZXYtPnBvcnQpLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7Cj4gKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ICsgICAgICAgICAgICBpZiAodG1wICYmIHN0 cmNtcCh0bXAsICIiKSkgewo+ICsgICAgICAgICAgICAgICAgTE9HKEVSUk9SLCAiVGhlIGNvbnRy b2xsZXIgcG9ydCBpc24ndCBhdmFpbGFibGUiKTsKPiArICAgICAgICAgICAgICAgIHJjID0gRVJS T1JfRkFJTDsKPiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgICAgICB9Cj4g KyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgLyogTm8gcG9ydCB3YXMgcmVxdWVzdGVk LiBDaG9vc2UgZnJlZSBwb3J0LiAqLwo+ICsgICAgICAgICAgICBpbnQgaSwgcG9ydHM7Cj4gKwo+ ICsgICAgICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9u dW0tcG9ydHMiLCBiZV9wYXRoKSwgJnRtcCk7Cj4gKyAgICAgICAgICAgIGlmIChyYykgZ290byBv dXQ7Cj4gKwo+ICsgICAgICAgICAgICBwb3J0cyA9IHRtcCA/IGF0b2kodG1wKSA6IDA7Cj4gKwo+ ICsgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcG9ydHM7IGkrKykgewo+ICsgICAgICAgICAg ICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3BvcnQv JWQiLCBiZV9wYXRoLCBpICsgMSksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnRtcCk7Cj4gKyAgICAgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgICAgICAgICAgICAgIGlmICh0bXAgJiYgIXN0cmNtcCh0bXAsICIiKSkgewo+ICsg ICAgICAgICAgICAgICAgICAgIHVzYmRldi0+cG9ydCA9IGkgKyAxOwo+ICsgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwo+ICsgICAgICAgICAgICAgICAgfQo+ICsgICAgICAgICAgICB9Cj4gKwo+ ICsgICAgICAgICAgICBpZiAoIXVzYmRldi0+cG9ydCkgewo+ICsgICAgICAgICAgICAgICAgTE9H KEVSUk9SLCAiTm8gYXZhaWxhYmxlIHBvcnQgdW5kZXIgc3BlY2lmaWVkIGNvbnRyb2xsZXIiKTsK PiArICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICAgICAgICAgIGdv dG8gb3V0Owo+ICsgICAgICAgICAgICB9Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAg IHJjID0gMDsKPiArCj4gK291dDoKPiArICAgIHJldHVybiByYzsKPiArfQo+ICsKPiArLyogQWRk IHVzYiBpbmZvcm1hdGlvbiB0byB4ZW5zdG9yZQo+ICsgKgo+ICsgKiBBZGRpbmcgYSB1c2IgZGV2 aWNlIHdvbid0IGNyZWF0ZSBuZXcgJ3Z1c2InIGRldmljZSwgYnV0IG9ubHkgd3JpdGUKPiArICog dGhlIGRldmljZSBidXNpZCB0byB0aGUgY29udHJvbGxlcjpwb3J0IGluIHhlbnN0b3JlLgo+ICsg Ki8KPiArc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3VzYmRldl9hZGRfeGVuc3RvcmUobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldiwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1cGRhdGVfanNvbikKPiAr ewo+ICsgICAgY2hhciAqYmVfcGF0aCwgKmJ1c2lkOwo+ICsgICAgaW50IHJjOwo+ICsgICAgeHNf dHJhbnNhY3Rpb25fdCB0ID0gWEJUX05VTEw7Cj4gKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRf Y29uZmlnOwo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmRldiB1c2JkZXZfc2F2ZWQ7Cj4gKyAgICBs aWJ4bF9fZG9tYWluX3VzZXJkYXRhX2xvY2sgKmxvY2sgPSBOVUxMOwo+ICsKPiArICAgIGxpYnhs X2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOwo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmRl dl9pbml0KCZ1c2JkZXZfc2F2ZWQpOwo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmRldl9jb3B5KENU WCwgJnVzYmRldl9zYXZlZCwgdXNiZGV2KTsKPiArCj4gKyAgICBidXNpZCA9IHVzYmRldl9idXNh ZGRyX3RvX2J1c2lkKGdjLCB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcik7Cj4g KyAgICBpZiAoIWJ1c2lkKSB7Cj4gKyAgICAgICAgTE9HKERFQlVHLCAiRmFpbCB0byBnZXQgYnVz aWQgb2YgdXNiIGRldmljZSIpOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiAr ICAgIGlmICh1cGRhdGVfanNvbikgewo+ICsgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21h aW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKPiArICAgICAgICBpZiAoIWxvY2spIHsKPiArICAgICAg ICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsg ICAgICAgIH0KPiArCj4gKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0 aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKPiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgICAgICBERVZJQ0VfQUREKHVzYmRldiwgdXNiZGV2cywgZG9taWQsICZ1c2JkZXZf c2F2ZWQsCj4gKyAgICAgICAgICAgICAgICAgICBDT01QQVJFX1VTQiwgJmRfY29uZmlnKTsKPiAr ICAgIH0KPiArCj4gKyAgICBmb3IgKDs7KSB7Cj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJh bnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKPiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ICsK PiArICAgICAgICBpZiAodXBkYXRlX2pzb24pIHsKPiArICAgICAgICAgICAgcmMgPSBsaWJ4bF9f c2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKPiArICAgICAg ICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGJlX3Bh dGggPSBHQ1NQUklOVEYoIiVzL2JhY2tlbmQvdnVzYi8lZC8lZC9wb3J0LyVkIiwKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgTElCWExfVE9P TFNUQUNLX0RPTUlEKSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlkLCB1c2Jk ZXYtPmN0cmwsIHVzYmRldi0+cG9ydCk7Cj4gKwo+ICsgICAgICAgIExPRyhERUJVRywgIkFkZGlu ZyB1c2IgZGV2aWNlICVzIHRvIHhlbnN0b3JlOiBjb250cm9sbGVyICVkLCBwb3J0ICVkIiwKPiAr ICAgICAgICAgICAgYnVzaWQsIHVzYmRldi0+Y3RybCwgdXNiZGV2LT5wb3J0KTsKPiArCj4gKyAg ICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgdCwgYmVfcGF0aCwgYnVzaWQp Owo+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ICsgICAgICAgIHJjID0gbGlieGxf X3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOwo+ICsgICAgICAgIGlmICghcmMpIGJyZWFr Owo+ICsgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHJj ID0gMDsKPiArCj4gK291dDoKPiArICAgIGlmIChsb2NrKSBsaWJ4bF9fdW5sb2NrX2RvbWFpbl91 c2VyZGF0YShsb2NrKTsKPiArICAgIGxpYnhsX2RldmljZV91c2JkZXZfZGlzcG9zZSgmdXNiZGV2 X3NhdmVkKTsKPiArICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmZF9jb25maWcpOwo+ ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNi ZGV2X3JlbW92ZV94ZW5zdG9yZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNl X3VzYmRldiAqdXNiZGV2KQo+ICt7Cj4gKyAgICBjaGFyICpiZV9wYXRoOwo+ICsKPiArICAgIGJl X3BhdGggPSBHQ1NQUklOVEYoIiVzL2JhY2tlbmQvdnVzYi8lZC8lZC9wb3J0LyVkIiwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJYTF9UT09M U1RBQ0tfRE9NSUQpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5j dHJsLCB1c2JkZXYtPnBvcnQpOwo+ICsKPiArICAgIExPRyhERUJVRywgIlJlbW92aW5nIHVzYiBk ZXZpY2UgZnJvbSB4ZW5zdG9yZTogY29udHJvbGxlciAlZCwgcG9ydCAlZCIsCj4gKyAgICAgICAg dXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOwo+ICsKPiArICAgIHJldHVybiBsaWJ4bF9feHNf d3JpdGVfY2hlY2tlZChnYywgWEJUX05VTEwsIGJlX3BhdGgsICIiKTsKPiArfQo+ICsKPiArc3Rh dGljIGNoYXIgKnVzYmRldl9idXNpZF9mcm9tX2N0cmxwb3J0KGxpYnhsX19nYyAqZ2MsIHVpbnQz Ml90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQo+ICt7Cj4gKyAgICByZXR1cm4gbGlieGxfX3hzX3Jl YWQoZ2MsIFhCVF9OVUxMLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigi JXMvYmFja2VuZC92dXNiLyVkLyVkL3BvcnQvJWQiLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2MsIExJQlhMX1RPT0xTVEFDS19ET01JRCks Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWQsIHVzYmRldi0+Y3RybCwgdXNiZGV2 LT5wb3J0KSk7Cj4gK30KPiArCj4gKy8qIGdldCBvcmlnaW5hbCBkcml2ZXIgcGF0aCBvZiB1c2Ig aW50ZXJmYWNlLCBzdG9yZWQgaW4gQGRydnBhdGggKi8KPiArc3RhdGljIGludCB1c2JpbnRmX2dl dF9kcnZwYXRoKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYsIGNoYXIgKipkcnZwYXRo KQo+ICt7Cj4gKyAgICBjaGFyICpzcGF0aCwgKmRwID0gTlVMTDsKPiArICAgIHN0cnVjdCBzdGF0 IHN0Owo+ICsgICAgaW50IHI7Cj4gKwo+ICsgICAgc3BhdGggPSBHQ1NQUklOVEYoU1lTRlNfVVNC X0RFViAiLyVzL2RyaXZlciIsIGludGYpOwo+ICsKPiArICAgIHIgPSBsc3RhdChzcGF0aCwgJnN0 KTsKPiArICAgIGlmIChyID09IDApIHsKPiArICAgICAgICAvKiBGaW5kIHRoZSBjYW5vbmljYWwg cGF0aCB0byB0aGUgZHJpdmVyLiAqLwo+ICsgICAgICAgIGRwID0gbGlieGxfX3phbGxvYyhnYywg UEFUSF9NQVgpOwo+ICsgICAgICAgIGRwID0gcmVhbHBhdGgoc3BhdGgsIGRwKTsKPiArICAgICAg ICBpZiAoIWRwKSB7Cj4gKyAgICAgICAgICAgIExPR0UoRVJST1IsICJnZXQgcmVhbHBhdGggZmFp bGVkOiAnJXMnIiwgc3BhdGgpOwo+ICsgICAgICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKPiAr ICAgICAgICB9Cj4gKyAgICB9IGVsc2UgaWYgKGVycm5vID09IEVOT0VOVCkgewo+ICsgICAgICAg IC8qIGRyaXZlciBwYXRoIGRvZXNuJ3QgZXhpc3QgKi8KPiArICAgICAgICBkcCA9IE5VTEw7Cj4g KyAgICB9IGVsc2Ugewo+ICsgICAgICAgIExPR0UoRVJST1IsICJsc3RhdCBmYWlsZWQ6ICclcyci LCBzcGF0aCk7Cj4gKyAgICAgICAgcmV0dXJuIEVSUk9SX0ZBSUw7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgKmRydnBhdGggPSBkcDsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCB1bmJpbmRfdXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICppbnRmKQo+ICt7 Cj4gKyAgICBjaGFyICpwYXRoOwo+ICsgICAgaW50IGZkID0gLTE7Cj4gKyAgICBpbnQgcmM7Cj4g Kwo+ICsgICAgcGF0aCA9IEdDU1BSSU5URihTWVNGU19VU0JfREVWICIvJXMvZHJpdmVyL3VuYmlu ZCIsIGludGYpOwo+ICsKPiArICAgIGZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7Cj4gKyAgICBp ZiAoZmQgPCAwKSB7Cj4gKyAgICAgICAgTE9HRShFUlJPUiwgIm9wZW4gZmlsZSBmYWlsZWQ6ICcl cyciLCBwYXRoKTsKPiArICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4gKyAgICAgICAgZ290byBv dXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgaWYgKGxpYnhsX3dyaXRlX2V4YWN0bHkoQ1RYLCBmZCwg aW50Ziwgc2l6ZW9mKGludGYpLCBwYXRoLCBpbnRmKSkgewo+ICsgICAgICAgIHJjID0gRVJST1Jf RkFJTDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICByYyA9IDA7Cj4g Kwo+ICtvdXQ6Cj4gKyAgICBpZiAoZmQgPj0gMCkgY2xvc2UoZmQpOwo+ICsgICAgcmV0dXJuIHJj Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGJpbmRfdXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25z dCBjaGFyICppbnRmLCBjb25zdCBjaGFyICpkcnZwYXRoKQo+ICt7Cj4gKyAgICBjaGFyICpwYXRo Owo+ICsgICAgc3RydWN0IHN0YXQgc3Q7Cj4gKyAgICBpbnQgZmQgPSAtMTsKPiArICAgIGludCBy YywgcjsKPiArCj4gKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy8lcyIsIGRydnBhdGgsIGludGYp Owo+ICsKPiArICAgIC8qIGNoZWNrIHRocm91Z2ggbHN0YXQsIGlmIGludGYgYWxyZWFkeSBleGlz dHMgdW5kZXIgZHJ2cGF0aCwKPiArICAgICAqIGl0J3MgYWxyZWFkeSBib3VuZCwgcmV0dXJuIGRp cmVjdGx5OyBpZiBpdCBkb2Vzbid0IGV4aXN0LAo+ICsgICAgICogY29udGludWUgdG8gZG8gYmlu ZCB3b3JrOyBvdGhlcndpc2UsIHJldHVybiBlcnJvci4KPiArICAgICAqLwo+ICsgICAgciA9IGxz dGF0KHBhdGgsICZzdCk7Cj4gKyAgICBpZiAociA9PSAwKQo+ICsgICAgICAgIHJldHVybiAwOwo+ ICsgICAgaWYgKHIgPCAwICYmIGVycm5vICE9IEVOT0VOVCkKPiArICAgICAgICByZXR1cm4gRVJS T1JfRkFJTDsKPiArCj4gKyAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9iaW5kIiwgZHJ2cGF0aCk7 Cj4gKwo+ICsgICAgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKPiArICAgIGlmIChmZCA8IDAp IHsKPiArICAgICAgICBMT0dFKEVSUk9SLCAib3BlbiBmaWxlIGZhaWxlZDogJyVzJyIsIHBhdGgp Owo+ICsgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAg IH0KPiArCj4gKyAgICBpZiAobGlieGxfd3JpdGVfZXhhY3RseShDVFgsIGZkLCBpbnRmLCBzaXpl b2YoaW50ZiksIHBhdGgsIGludGYpKSB7Cj4gKyAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ICsg ICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIHJjID0gMDsKPiArCj4gK291dDoK PiArICAgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiAr Cj4gKy8qIElzIHVzYiBpbnRlcmZhY2UgYm91bmQgdG8gdXNiYmFjaz8gKi8KPiArc3RhdGljIGlu dCB1c2JpbnRmX2lzX2Fzc2lnbmVkKGxpYnhsX19nYyAqZ2MsIGNoYXIgKmludGYpCj4gK3sKPiAr ICAgIGNoYXIgKnNwYXRoOwo+ICsgICAgaW50IHI7Cj4gKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKPiAr Cj4gKyAgICBzcGF0aCA9IEdDU1BSSU5URihTWVNGU19VU0JCQUNLX0RSSVZFUiAiLyVzIiwgaW50 Zik7Cj4gKyAgICByID0gbHN0YXQoc3BhdGgsICZzdCk7Cj4gKwo+ICsgICAgaWYgKHIgPT0gMCkK PiArICAgICAgICByZXR1cm4gMTsKPiArICAgIGlmIChyIDwgMCAmJiBlcnJubyA9PSBFTk9FTlQp Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICBMT0dFKEVSUk9SLCAiQWNjZXNzaW5nICVzIiwg c3BhdGgpOwo+ICsgICAgcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVzYmRldl9n ZXRfYWxsX2ludGVyZmFjZXMobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQsCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqKmludGZzLCBpbnQgKm51 bSkKPiArewo+ICsgICAgRElSICpkaXI7Cj4gKyAgICBjaGFyICpidWY7Cj4gKyAgICBzdHJ1Y3Qg ZGlyZW50ICpkZV9idWY7Cj4gKyAgICBzdHJ1Y3QgZGlyZW50ICpkZTsKPiArICAgIGludCByYzsK PiArCj4gKyAgICAqaW50ZnMgPSBOVUxMOwo+ICsgICAgKm51bSA9IDA7Cj4gKwo+ICsgICAgYnVm ID0gR0NTUFJJTlRGKCIlczoiLCBidXNpZCk7Cj4gKwo+ICsgICAgZGlyID0gb3BlbmRpcihTWVNG U19VU0JfREVWKTsKPiArICAgIGlmICghZGlyKSB7Cj4gKyAgICAgICAgTE9HRShFUlJPUiwgIm9w ZW5kaXIgZmFpbGVkOiAnJXMnIiwgU1lTRlNfVVNCX0RFVik7Cj4gKyAgICAgICAgcmV0dXJuIEVS Uk9SX0ZBSUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZGVfYnVmID0gemFsbG9jX2RpcmVudChnYywg U1lTRlNfVVNCX0RFVik7Cj4gKwo+ICsgICAgZm9yICg7Oykgewo+ICsgICAgICAgIGludCByID0g cmVhZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpOwo+ICsKPiArICAgICAgICBpZiAocikgewo+ICsg ICAgICAgICAgICBMT0dFKEVSUk9SLCAiZmFpbGVkIHRvIHJlYWRkaXIgJXMiLCBTWVNGU19VU0Jf REVWKTsKPiArICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ICsgICAgICAgICAgICBnb3Rv IG91dDsKPiArICAgICAgICB9Cj4gKyAgICAgICAgaWYgKCFkZSkKPiArICAgICAgICAgICAgYnJl YWs7Cj4gKwo+ICsgICAgICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwKPiArICAg ICAgICAgICAgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSkKPiArICAgICAgICAgICAgY29udGlu dWU7Cj4gKwo+ICsgICAgICAgIGlmICghc3RybmNtcChkZS0+ZF9uYW1lLCBidWYsIHN0cmxlbihi dWYpKSkgewo+ICsgICAgICAgICAgICBHQ1JFQUxMT0NfQVJSQVkoKmludGZzLCAqbnVtICsgMSk7 Cj4gKyAgICAgICAgICAgICgqaW50ZnMpWypudW1dID0gbGlieGxfX3N0cmR1cChnYywgZGUtPmRf bmFtZSk7Cj4gKyAgICAgICAgICAgICgqbnVtKSsrOwo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICByYyA9IDA7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBjbG9zZWRpcihkaXIpOwo+ICsgICAg cmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKiBFbmNvZGUgdXNiIGludGVyZmFjZSBzbyB0aGF0IGl0 IGNvdWxkIGJlIHdyaXR0ZW4gdG8geGVuc3RvcmUgYXMgYSBrZXkuCj4gKyAqCj4gKyAqIFNpbmNl IHhlbnN0b3JlIGtleSBjYW5ub3QgaW5jbHVkZSAnLicgb3IgJzonLCB3ZSdsbCBjaGFuZ2UgJy4n IHRvICdfJywKPiArICogY2hhbmdlICc6JyB0byAnQCcuIEZvciBleGFtcGxlLCAzLTE6Mi4xIHdp bGwgYmUgZW5jb2RlZCB0byAzLTFAMl8xLgo+ICsgKiBUaGlzIHdpbGwgYmUgdXNlZCB0byBzYXZl IG9yaWdpbmFsIGRyaXZlciBvZiBVU0IgZGV2aWNlIHRvIHhlbnN0b3JlLgo+ICsgKi8KPiArc3Rh dGljIGNoYXIgKnVzYl9pbnRlcmZhY2VfeGVuc3RvcmVfZW5jb2RlKGxpYnhsX19nYyAqZ2MsIGNv bnN0IGNoYXIgKmJ1c2lkKQo+ICt7Cj4gKyAgICBjaGFyICpzdHIgPSBsaWJ4bF9fc3RyZHVwKGdj LCBidXNpZCk7Cj4gKyAgICBpbnQgaSwgbGVuID0gc3RybGVuKHN0cik7Cj4gKwo+ICsgICAgZm9y IChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cj4gKyAgICAgICAgaWYgKHN0cltpXSA9PSAnLicpIHN0 cltpXSA9ICdfJzsKPiArICAgICAgICBpZiAoc3RyW2ldID09ICc6Jykgc3RyW2ldID0gJ0AnOwo+ ICsgICAgfQo+ICsgICAgcmV0dXJuIHN0cjsKPiArfQo+ICsKPiArLyogVW5iaW5kIFVTQiBkZXZp Y2UgZnJvbSAidXNiYmFjayIgZHJpdmVyLgo+ICsgKgo+ICsgKiBJZiB0aGVyZSBhcmUgbWFueSBp bnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGNoZWNrIGVhY2ggaW50ZXJmYWNlLAo+ICsgKiB1 bmJpbmQgZnJvbSAidXNiYmFjayIgZHJpdmVyLgo+ICsgKi8KPiArc3RhdGljIGludCB1c2JiYWNr X2Rldl91bmFzc2lnbihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpidXNpZCkKPiArewo+ICsg ICAgY2hhciAqKmludGZzID0gTlVMTDsKPiArICAgIGludCBpLCBudW0gPSAwOwo+ICsgICAgaW50 IHJjOwo+ICsKPiArICAgIHJjID0gdXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhnYywgYnVzaWQs ICZpbnRmcywgJm51bSk7Cj4gKyAgICBpZiAocmMpIGdvdG8gb3V0Owo+ICsKPiArICAgIGZvciAo aSA9IDA7IGkgPCBudW07IGkrKykgewo+ICsgICAgICAgIGNoYXIgKmludGYgPSBpbnRmc1tpXTsK PiArCj4gKyAgICAgICAgLyogY2hlY2sgaWYgdGhlIFVTQiBpbnRlcmZhY2UgaXMgYWxyZWFkeSBi b3VuZCB0byAidXNiYmFjayIgKi8KPiArICAgICAgICBpZiAodXNiaW50Zl9pc19hc3NpZ25lZChn YywgaW50ZikgPiAwKSB7Cj4gKyAgICAgICAgICAgIC8qIHVuYmluZCBpbnRlcmZhY2UgZnJvbSB1 c2JiYWNrIGRyaXZlciAqLwo+ICsgICAgICAgICAgICByYyA9IHVuYmluZF91c2JpbnRmKGdjLCBp bnRmKTsKPiArICAgICAgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgICAgICBMT0dFKEVS Uk9SLCAiQ291bGRuJ3QgdW5iaW5kICVzIGZyb20gdXNiYmFjayIsIGludGYpOwo+ICsgICAgICAg ICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgICAgIH0KPiArICAgICAgICB9Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmMgPSAwOwo+ICsKPiArb3V0Ogo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICsvKiByZWJpbmQgVVNCIGRldmljZSB0byBvcmlnaW5hbCBkcml2ZXIuCj4gKyAqCj4gKyAq IElmIHRoZXJlIGFyZSBtYW55IGludGVyZmFjZXMgdW5kZXIgVVNCIGRldmljZSwgZm9yIHJlYWNo IGludGVyZmFjZSwKPiArICogcmVhZCBkcml2ZXJfcGF0aCBmcm9tIHhlbnN0b3JlIChpZiB0aGVy ZSBpcykgYW5kIHJlYmluZCB0byBpdHMKPiArICogb3JpZ2luYWwgZHJpdmVyLCB0aGVuIHJlbW92 ZSBkcml2ZXJfcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHhlbnN0b3JlLgo+ICsgKi8KPiArc3RhdGlj IGludCB1c2JkZXZfcmViaW5kKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmJ1c2lkKQo+ICt7 Cj4gKyAgICBjaGFyICoqaW50ZnMgPSBOVUxMOwo+ICsgICAgY2hhciAqdXNiZGV2X2VuY29kZSA9 IE5VTEw7Cj4gKyAgICBjaGFyICpwYXRoID0gTlVMTDsKPiArICAgIGludCBpLCBudW0gPSAwOwo+ ICsgICAgaW50IHJjOwo+ICsKPiArICAgIHJjID0gdXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhn YywgYnVzaWQsICZpbnRmcywgJm51bSk7Cj4gKyAgICBpZiAocmMpIGdvdG8gb3V0Owo+ICsKPiAr ICAgIHVzYmRldl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShnYywgYnVz aWQpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewo+ICsgICAgICAgIGNo YXIgKmludGYgPSBpbnRmc1tpXTsKPiArICAgICAgICBjaGFyICp1c2JpbnRmX2VuY29kZSA9IE5V TEw7Cj4gKyAgICAgICAgY29uc3QgY2hhciAqZHJ2cGF0aDsKPiArCj4gKyAgICAgICAgLyogcmVi aW5kIFVTQiBpbnRlcmZhY2UgdG8gaXRzIG9yaWdpbmlhbCBkcml2ZXIgKi8KPiArICAgICAgICB1 c2JpbnRmX2VuY29kZSA9IHVzYl9pbnRlcmZhY2VfeGVuc3RvcmVfZW5jb2RlKGdjLCBpbnRmKTsK PiArICAgICAgICBwYXRoID0gR0NTUFJJTlRGKFVTQkJBQ0tfSU5GT19QQVRIICIvJXMvJXMvZHJp dmVyX3BhdGgiLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2X2VuY29kZSwgdXNi aW50Zl9lbmNvZGUpOwo+ICsgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywg WEJUX05VTEwsIHBhdGgsICZkcnZwYXRoKTsKPiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgICAgICBpZiAoZHJ2cGF0aCkgewo+ICsgICAgICAgICAgICByYyA9IGJpbmRfdXNi aW50ZihnYywgaW50ZiwgZHJ2cGF0aCk7Cj4gKyAgICAgICAgICAgIGlmIChyYykgewo+ICsgICAg ICAgICAgICAgICAgTE9HRShFUlJPUiwgIkNvdWxkbid0IHJlYmluZCAlcyB0byAlcyIsIGludGYs IGRydnBhdGgpOwo+ICsgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgICAgIH0K PiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICtvdXQ6Cj4gKyAgICBwYXRoID0gR0NTUFJJTlRG KFVTQkJBQ0tfSU5GT19QQVRIICIvJXMiLCB1c2JkZXZfZW5jb2RlKTsKPiArICAgIGxpYnhsX194 c19ybV9jaGVja2VkKGdjLCBYQlRfTlVMTCwgcGF0aCk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30K PiArCj4gKwo+ICsvKiBCaW5kIFVTQiBkZXZpY2UgdG8gInVzYmJhY2siIGRyaXZlci4KPiArICoK PiArICogSWYgdGhlcmUgYXJlIG1hbnkgaW50ZXJmYWNlcyB1bmRlciBVU0IgZGV2aWNlLCBjaGVj ayBlYWNoIGludGVyZmFjZSwKPiArICogdW5iaW5kIGZyb20gb3JpZ2luYWwgZHJpdmVyIGFuZCBi aW5kIHRvICJ1c2JiYWNrIiBkcml2ZXIuCj4gKyAqLwo+ICtzdGF0aWMgaW50IHVzYmJhY2tfZGV2 X2Fzc2lnbihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpidXNpZCkKPiArewo+ICsgICAgY2hh ciAqKmludGZzID0gTlVMTDsKPiArICAgIGludCBudW0gPSAwLCBpOwo+ICsgICAgaW50IHJjOwo+ ICsgICAgY2hhciAqdXNiZGV2X2VuY29kZSA9IE5VTEw7Cj4gKwo+ICsgICAgcmMgPSB1c2JkZXZf Z2V0X2FsbF9pbnRlcmZhY2VzKGdjLCBidXNpZCwgJmludGZzLCAmbnVtKTsKPiArICAgIGlmIChy YykgcmV0dXJuIHJjOwo+ICsKPiArICAgIHVzYmRldl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hl bnN0b3JlX2VuY29kZShnYywgYnVzaWQpOwo+ICsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBudW07 IGkrKykgewo+ICsgICAgICAgIGNoYXIgKmludGYgPSBpbnRmc1tpXTsKPiArICAgICAgICBjaGFy ICpkcnZwYXRoID0gTlVMTDsKPiArCj4gKyAgICAgICAgLyogYWxyZWFkeSBhc3NpZ25lZCB0byB1 c2JiYWNrICovCj4gKyAgICAgICAgaWYgKHVzYmludGZfaXNfYXNzaWduZWQoZ2MsIGludGYpID4g MCkKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKwo+ICsgICAgICAgIHJjID0gdXNiaW50Zl9n ZXRfZHJ2cGF0aChnYywgaW50ZiwgJmRydnBhdGgpOwo+ICsgICAgICAgIGlmIChyYykgZ290byBv dXQ7Cj4gKwo+ICsgICAgICAgIGlmIChkcnZwYXRoKSB7Cj4gKyAgICAgICAgICAgIC8qIHdyaXRl IGRyaXZlciBwYXRoIHRvIHhlbnN0b3JlIGZvciBsYXRlciByZWJpbmRpbmcgKi8KPiArICAgICAg ICAgICAgY2hhciAqdXNiaW50Zl9lbmNvZGUgPSBOVUxMOwo+ICsgICAgICAgICAgICBjaGFyICpw YXRoOwo+ICsKPiArICAgICAgICAgICAgdXNiaW50Zl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hl bnN0b3JlX2VuY29kZShnYywgaW50Zik7Cj4gKyAgICAgICAgICAgIHBhdGggPSBHQ1NQUklOVEYo VVNCQkFDS19JTkZPX1BBVEggIi8lcy8lcy9kcml2ZXJfcGF0aCIsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdXNiZGV2X2VuY29kZSwgdXNiaW50Zl9lbmNvZGUpOwo+ICsgICAgICAg ICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCBYQlRfTlVMTCwgcGF0aCwgZHJ2 cGF0aCk7Cj4gKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ICsgICAgICAgICAg ICAvKiB1bmJpbmQgaW50ZXJmYWNlIGZyb20gb3JpZ2luYWwgZHJpdmVyICovCj4gKyAgICAgICAg ICAgIHJjID0gdW5iaW5kX3VzYmludGYoZ2MsIGludGYpOwo+ICsgICAgICAgICAgICBpZiAocmMp IGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogYmluZCBpbnRlcmZhY2Ug dG8gdXNiYmFjayAqLwo+ICsgICAgICAgIHJjID0gYmluZF91c2JpbnRmKGdjLCBpbnRmLCBTWVNG U19VU0JCQUNLX0RSSVZFUik7Cj4gKyAgICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgIExP RyhFUlJPUiwgIkNvdWxkbid0IGJpbmQgJXMgdG8gJXMiLCBpbnRmLCBTWVNGU19VU0JCQUNLX0RS SVZFUik7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICByZXR1cm4gMDsKPiArCj4gK291dDoKPiArICAgIC8qIHNvbWUgaW50ZXJmYWNlcyBt aWdodCBiZSBib3VuZCB0byB1c2JiYWNrLCB1bmJpbmQgaXQgYW5kCj4gKyAgICAgKiByZWJpbmQg aXQgdG8gaXRzIG9yaWdpbmFsIGRyaXZlcgo+ICsgICAgICovCj4gKyAgICB1c2JiYWNrX2Rldl91 bmFzc2lnbihnYywgYnVzaWQpOwo+ICsgICAgdXNiZGV2X3JlYmluZChnYywgYnVzaWQpOwo+ICsg ICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRvX3VzYmRldl9hZGQobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBib29s IHVwZGF0ZV9qc29uKQo+ICt7Cj4gKyAgICBpbnQgcmM7Cj4gKyAgICBjaGFyICpidXNpZDsKPiAr ICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0cmw7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5m byB1c2JjdHJsaW5mbzsKPiArCj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KCZ1c2Jj dHJsKTsKPiArICAgIGxpYnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKPiArICAg IHVzYmN0cmwuZGV2aWQgPSB1c2JkZXYtPmN0cmw7Cj4gKwo+ICsgICAgcmMgPSBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9nZXRpbmZvKENUWCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOwo+ ICsgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAgICBzd2l0Y2ggKHVzYmN0cmxpbmZvLnR5 cGUpIHsKPiArICAgIGNhc2UgTElCWExfVVNCQ1RSTF9UWVBFX1BWOgo+ICsgICAgICAgIGJ1c2lk ID0gdXNiZGV2X2J1c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JkZXYtPnUuaG9z dGRldi5ob3N0YWRkcik7Cj4gKyAgICAgICAgaWYgKCFidXNpZCkgewo+ICsgICAgICAgICAgICBy YyA9IEVSUk9SX0ZBSUw7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiAr Cj4gKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9hZGRfeGVuc3RvcmUoZ2MsIGRv bWlkLCB1c2JkZXYsIHVwZGF0ZV9qc29uKTsKPiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+ ICsKPiArICAgICAgICByYyA9IHVzYmJhY2tfZGV2X2Fzc2lnbihnYywgYnVzaWQpOwo+ICsgICAg ICAgIGlmIChyYykgewo+ICsgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlX3VzYmRldl9yZW1vdmVf eGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2JkZXYpOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIExJQlhMX1VTQkNUUkxfVFlQ RV9ERVZJQ0VNT0RFTDoKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgTE9HKEVSUk9SLCAiVW5z dXBwb3J0ZWQgdXNiIGNvbnRyb2xsZXIgdHlwZSIpOwo+ICsgICAgICAgIHJjID0gRVJST1JfRkFJ TDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICByYyA9IDA7Cj4gKwo+ ICtvdXQ6Cj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKPiAr ICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKPiArICAgIHJldHVy biByYzsKPiArfQo+ICsKPiArLyogQU8gb3BlcmF0aW9uIHRvIGFkZCBhIHVzYiBkZXZpY2UuCj4g KyAqCj4gKyAqIEdlbmVyYWxseSwgaXQgZG9lczoKPiArICogMSkgY2hlY2sgaWYgdGhlIHVzYiBk ZXZpY2UgdHlwZSBpcyBhc3NpZ25hYmxlCj4gKyAqIDIpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNl IGlzIGFscmVhZHkgYXNzaWduZWQgdG8gYSBkb21haW4KPiArICogMykgYWRkICdidXNpZCcgb2Yg dGhlIHVzYiBkZXZpY2UgdG8geGVuc3RvcmUgY29udG9sbGVyL3BvcnQvLgo+ICsgKiAgICAoUFZV U0IgZHJpdmVyIHdhdGNoZXMgdGhlIHhlbnN0b3JlIGNoYW5nZXMgYW5kIHdpbGwgZGV0ZWN0IHRo YXQuKQo+ICsgKiA0KSB1bmJpbmQgdXNiIGRldmljZSBmcm9tIG9yaWdpbmFsIGRyaXZlciBhbmQg YmluZCB0byB1c2JiYWNrLgo+ICsgKiAgICBJZiB1c2IgZGV2aWNlIGhhcyBtYW55IGludGVyZmFj ZXMsIHRoZW46Cj4gKyAqICAgIC0gdW5iaW5kIGVhY2ggaW50ZXJmYWNlIGZyb20gaXRzIG9yaWdp bmFsIGRyaXZlciBhbmQgYmluZCB0byB1c2JiYWNrLgo+ICsgKiAgICAtIHN0b3JlIHRoZSBvcmln aW5hbCBkcml2ZXIgdG8geGVuc3RvcmUgZm9yIGxhdGVyIHJlYmluZGluZyB3aGVuCj4gKyAqICAg ICAgZGV0YWNoaW5nIHRoZSBkZXZpY2UuCj4gKyAqCj4gKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMg ZnVuY3Rpb24sIGFvZGV2IHNob3VsZCBiZSBwcm9wZXJseSBmaWxsZWQ6Cj4gKyAqIGFvZGV2LT5h bywgYW9kZXYtPmNhbGxiYWNrLCBhb2Rldi0+dXBkYXRlX2pzb24sIC4uLgo+ICsgKi8KPiArdm9p ZCBsaWJ4bF9fZGV2aWNlX3VzYmRldl9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21p ZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAq dXNiZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNl ICphb2RldikKPiArewo+ICsgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKPiArICAgIGludCBy YzsKPiArICAgIGxpYnhsX2RldmljZV91c2JkZXYgKmFzc2lnbmVkOwo+ICsgICAgaW50IG51bV9h c3NpZ25lZDsKPiArICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0cmw7Cj4gKyAgICBsaWJ4 bF91c2JjdHJsaW5mbyB1c2JjdHJsaW5mbzsKPiArCj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9pbml0KCZ1c2JjdHJsKTsKPiArICAgIGxpYnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxp bmZvKTsKPiArCj4gKyAgICAvKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IGFkZGluZyBVU0IgZGV2 aWNlIGZyb20gRG9tMCBiYWNrZW5kLgo+ICsgICAgICogU28sIGlmIFVTQiBjb250cm9sbGVyIGlz IHNwZWNpZmllZCwgY2hlY2sgaXRzIGJhY2tlbmQgZG9tYWluLAo+ICsgICAgICogaWYgaXQncyBu b3QgRG9tMCwgcmVwb3J0IGVycm9yLgo+ICsgICAgICovCj4gKyAgICBpZiAodXNiZGV2LT5jdHJs ICE9IC0xKSB7Cj4gKyAgICAgICAgdXNiY3RybC5kZXZpZCA9IHVzYmRldi0+Y3RybDsKPiArICAg ICAgICByYyA9IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0 cmwsICZ1c2JjdHJsaW5mbyk7Cj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAg ICAgICAgaWYgKHVzYmN0cmxpbmZvLmJhY2tlbmRfaWQgIT0gTElCWExfVE9PTFNUQUNLX0RPTUlE KSB7Cj4gKyAgICAgICAgICAgIExPRyhFUlJPUiwgIkRvbid0IHN1cHBvcnQgYWRkaW5nIFVTQiBk ZXZpY2UgZnJvbSBub24tRG9tMCBiYWNrZW5kIik7Cj4gKyAgICAgICAgICAgIHJjID0gRVJST1Jf SU5WQUw7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArICAgIH0KPiAr Cj4gKyAgICAvKiBjaGVjayB1c2IgZGV2aWNlIGlzIGFzc2lnbmFibGUgdHlwZSAqLwo+ICsgICAg aWYgKCFpc191c2JkZXZfYXNzaWduYWJsZShnYywgdXNiZGV2KSkgewo+ICsgICAgICAgIExPRyhF UlJPUiwgIlVTQiBkZXZpY2UgaXMgbm90IGFzc2lnbmFibGUuIik7Cj4gKyAgICAgICAgcmMgPSBF UlJPUl9GQUlMOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAgIC8qIGNo ZWNrIHVzYiBkZXZpY2UgaXMgYWxyZWFkeSBhc3NpZ25lZCAqLwo+ICsgICAgcmMgPSBnZXRfYXNz aWduZWRfZGV2aWNlcyhnYywgJmFzc2lnbmVkLCAmbnVtX2Fzc2lnbmVkKTsKPiArICAgIGlmIChy Yykgewo+ICsgICAgICAgIExPRyhFUlJPUiwgImNhbm5vdCBkZXRlcm1pbmUgaWYgZGV2aWNlIGlz IGFzc2lnbmVkLCIKPiArICAgICAgICAgICAgICAgICAgICIgcmVmdXNpbmcgdG8gY29udGludWUi KTsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICBpZiAoaXNfdXNiZGV2 X2luX2FycmF5KGFzc2lnbmVkLCBudW1fYXNzaWduZWQsIHVzYmRldikpIHsKPiArICAgICAgICBM T0coRVJST1IsICJVU0IgZGV2aWNlIGFscmVhZHkgYXR0YWNoZWQgdG8gYSBkb21haW4iKTsKPiAr ICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ ICsKPiArICAgIC8qIGZpbGwgZGVmYXVsdCB2YWx1ZXMsIGUuZywgaWYgdXNiZGV2LT5jdHJsIGFu ZCB1c2JkZXYtPnBvcnQKPiArICAgICAqIG5vdCBzcGVjaWZpZWQsIGNob29zZSBhdmFpbGFibGUg Y29udHJvbGxlcjpwb3J0IGFuZCBmaWxsIGluLiAqLwo+ICsgICAgcmMgPSBsaWJ4bF9fZGV2aWNl X3VzYmRldl9zZXRkZWZhdWx0KGdjLCBkb21pZCwgdXNiZGV2LAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFvZGV2LT51cGRhdGVfanNvbik7Cj4gKyAgICBpZiAo cmMpIGdvdG8gb3V0Owo+ICsKPiArICAgIC8qIGRvIGFjdHVhbCBhZGRpbmcgdXNiIGRldmljZSBv cGVyYXRpb24gKi8KPiArICAgIHJjID0gZG9fdXNiZGV2X2FkZChnYywgZG9taWQsIHVzYmRldiwg YW9kZXYtPnVwZGF0ZV9qc29uKTsKPiArCj4gK291dDoKPiArICAgIGxpYnhsX2RldmljZV91c2Jj dHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOwo+ICsgICAgbGlieGxfdXNiY3RybGluZm9fZGlzcG9zZSgm dXNiY3RybGluZm8pOwo+ICsgICAgYW9kZXYtPnJjID0gcmM7Cj4gKyAgICBhb2Rldi0+Y2FsbGJh Y2soZWdjLCBhb2Rldik7Cj4gKyAgICByZXR1cm47Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZG9f dXNiZGV2X3JlbW92ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKPiArewo+ICsg ICAgaW50IHJjOwo+ICsgICAgY2hhciAqYnVzaWQ7Cj4gKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCB1c2JjdHJsOwo+ICsgICAgbGlieGxfdXNiY3RybGluZm8gdXNiY3RybGluZm87Cj4gKwo+ICsg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgmdXNiY3RybCk7Cj4gKyAgICBsaWJ4bF91c2Jj dHJsaW5mb19pbml0KCZ1c2JjdHJsaW5mbyk7Cj4gKyAgICB1c2JjdHJsLmRldmlkID0gdXNiZGV2 LT5jdHJsOwo+ICsKPiArICAgIHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhDVFgs IGRvbWlkLCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKPiArICAgIGlmIChyYykgZ290byBvdXQ7 Cj4gKwo+ICsgICAgc3dpdGNoICh1c2JjdHJsaW5mby50eXBlKSB7Cj4gKyAgICBjYXNlIExJQlhM X1VTQkNUUkxfVFlQRV9QVjoKPiArICAgICAgICBidXNpZCA9IHVzYmRldl9idXNpZF9mcm9tX2N0 cmxwb3J0KGdjLCBkb21pZCwgdXNiZGV2KTsKPiArICAgICAgICBpZiAoIWJ1c2lkKSB7Cj4gKyAg ICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgICAgICAvKiBUaGluZ3MgYXJlIGRvbmUgaW4gb3JkZXIgb2Y6Cj4g KyAgICAgICAgICogICB1bmJpbmQgVVNCIGRldmljZSBmcm9tIHVzYmJhY2ssCj4gKyAgICAgICAg ICogICByZW1vdmUgVVNCIGRldmljZSBmcm9tIHhlbnN0b3JlLAo+ICsgICAgICAgICAqICAgcmVi aW5kIFVTQiBkZXZpY2UgdG8gb3JpZ2luYWwgZHJpdmVyLgo+ICsgICAgICAgICAqIEl0IGlzIHRv IGJhbGFuY2Ugc2ltcGxpY2l0eSB3aXRoIHJvYnVzdG5lc3MgaW4gY2FzZSBvZiBmYWlsdXJlOgo+ ICsgICAgICAgICAqIC0gV2UgdW5iaW5kIGFsbCBpbnRlcmZhY2VzIGJlZm9yZSByZWJpbmRpbmcg YW55IGludGVyZmFjZXMsIHNvCj4gKyAgICAgICAgICogICB0aGF0IHdlIG5ldmVyIGdldCBpbnRv IGEgc2l0dWF0aW9uIHdoZXJlIHNvbWUgaW50ZXJmYWNlcyBhcmUKPiArICAgICAgICAgKiAgIGFz c2lnbmVkIHRvIHVzYmJhY2sgYW5kIHNvbWUgYXJlIGFzc2lnbmVkIHRvIHRoZSBvcmlnaW5hbCBk cml2ZXJzLgo+ICsgICAgICAgICAqIC0gV2UgYWxzbyB1bmJpbmQgdGhlIGludGVyZmFjZXMgYmVm b3JlIHJlbW92aW5nIHRoZSBwdnVzYiB4ZW5zdG9yZQo+ICsgICAgICAgICAqICAgbm9kZXMsIHNv IHRoYXQgaWYgdGhlIHVuYmluZCBmYWlscyBpbiB0aGUgbWlkZGxlLCB0aGUgZGV2aWNlIHN0aWxs Cj4gKyAgICAgICAgICogICBzaG93cyB1cCBpbiB4bCB1c2ItbGlzdCwgYW5kIHRoZSB1c2VyIGNh biByZS10cnkgcmVtb3ZpbmcgaXQuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgcmMgPSB1c2Ji YWNrX2Rldl91bmFzc2lnbihnYywgYnVzaWQpOwo+ICsgICAgICAgIGlmIChyYykgewo+ICsgICAg ICAgICAgICBMT0coRVJST1IsICJFcnJvciByZW1vdmluZyBkZXZpY2UgZnJvbSBndWVzdC4iCj4g KyAgICAgICAgICAgICAgICAiIFRyeSBydW5uaW5nIHVzYmRldi1kZXRhY2ggYWdhaW4uIik7Cj4g KyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmMgPSBs aWJ4bF9fZGV2aWNlX3VzYmRldl9yZW1vdmVfeGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2JkZXYpOwo+ ICsgICAgICAgIGlmIChyYykgewo+ICsgICAgICAgICAgICBMT0coRVJST1IsICJFcnJvciByZW1v dmluZyBkZXZpY2UgZnJvbSBndWVzdC4iCj4gKyAgICAgICAgICAgICAgICAiIFRyeSBydW5uaW5n IHVzYmRldi1kZXRhY2ggYWdhaW4uIik7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAg ICAgIH0KPiArCj4gKyAgICAgICAgcmMgPSB1c2JkZXZfcmViaW5kKGdjLCBidXNpZCk7Cj4gKyAg ICAgICAgaWYgKHJjKSB7Cj4gKyAgICAgICAgICAgIExPRyhFUlJPUiwgIlVTQiBkZXZpY2UgcmVt b3ZlZCBmcm9tIGd1ZXN0LCBidXQgY291bGRuJ3QiCj4gKyAgICAgICAgICAgICAgICAiIHJlLWJp bmQgdG8gZG9tYWluIDAuIFRyeSByZW1vdmluZyBhbmQgcmUtaW5zZXJ0aW5nIgo+ICsgICAgICAg ICAgICAgICAgIiB0aGUgVVNCIGRldmljZSBvciByZWxvYWRpbmcgdGhlIGRyaXZlciBtb2R1bGVz LiIpOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAg IGJyZWFrOwo+ICsgICAgY2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw6Cj4gKyAg ICBkZWZhdWx0Ogo+ICsgICAgICAgIExPRyhFUlJPUiwgIlVuc3VwcG9ydGVkIHVzYiBjb250cm9s bGVyIHR5cGUiKTsKPiArICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4gKyAgICAgICAgZ290byBv dXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmMgPSAwOwo+ICsKPiArb3V0Ogo+ICsgICAgbGlieGxf ZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNiY3RybCk7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5m b19kaXNwb3NlKCZ1c2JjdHJsaW5mbyk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gKy8q IE9wZXJhdGlvbiB0byByZW1vdmUgdXNiIGRldmljZS4KPiArICoKPiArICogR2VuZXJhbGx5LCBp dCBkb2VzOgo+ICsgKiAxKSBjaGVjayBpZiB0aGUgdXNiIGRldmljZSBpcyBhc3NpZ25lZCB0byB0 aGUgZG9tYWluCj4gKyAqIDIpIHJlbW92ZSB0aGUgdXNiIGRldmljZSBmcm9tIHhlbnN0b3JlIGNv bnRyb2xsZXIvcG9ydC4KPiArICogMykgdW5iaW5kIHVzYiBkZXZpY2UgZnJvbSB1c2JiYWNrIGFu ZCByZWJpbmQgdG8gaXRzIG9yaWdpbmFsIGRyaXZlci4KPiArICogICAgSWYgdXNiIGRldmljZSBo YXMgbWFueSBpbnRlcmZhY2VzLCBkbyBpdCB0byBlYWNoIGludGVyZmFjZS4KPiArICovCj4gK3N0 YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGxpYnhsX19nYyAqZ2MsIHVpbnQz Ml90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYpCj4gK3sKPiArICAgIGxpYnhsX3VzYmN0cmxpbmZvIHVz YmN0cmxpbmZvOwo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgdXNiY3RybDsKPiArICAgIGlu dCByYzsKPiArCj4gKyAgICBpZiAodXNiZGV2LT5jdHJsIDwgMCB8fCB1c2JkZXYtPnBvcnQgPCAx KSB7Cj4gKyAgICAgICAgTE9HKEVSUk9SLCAiSW52YWxpZCBVU0IgZGV2aWNlIik7Cj4gKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7Cj4gKyAgICB9Cj4gKwo+ICsgICAgbGlieGxfZGV2aWNlX3Vz YmN0cmxfaW5pdCgmdXNiY3RybCk7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1c2Jj dHJsaW5mbyk7Cj4gKyAgICB1c2JjdHJsLmRldmlkID0gdXNiZGV2LT5jdHJsOwo+ICsKPiArICAg IHJjID0gbGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhDVFgsIGRvbWlkLCAmdXNiY3RybCwg JnVzYmN0cmxpbmZvKTsKPiArICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ICsgICAgaWYgKHVz YmN0cmxpbmZvLmJhY2tlbmRfaWQgIT0gTElCWExfVE9PTFNUQUNLX0RPTUlEKSB7Cj4gKyAgICAg ICAgTE9HKEVSUk9SLCAiRG9uJ3Qgc3VwcG9ydCByZW1vdmluZyBVU0IgZGV2aWNlIGZyb20gbm9u LURvbTAgYmFja2VuZCIpOwo+ICsgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cj4gKyAgICAgICAg Z290byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogZG8gYWN0dWFsIHJlbW92aW5nIHVzYiBk ZXZpY2Ugb3BlcmF0aW9uICovCj4gKyAgICByYyA9IGRvX3VzYmRldl9yZW1vdmUoZ2MsIGRvbWlk LCB1c2JkZXYpOwo+ICsKPiArb3V0Ogo+ICsgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9z ZSgmdXNiY3RybCk7Cj4gKyAgICBsaWJ4bF91c2JjdHJsaW5mb19kaXNwb3NlKCZ1c2JjdHJsaW5m byk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCBsaWJ4bF9kZXZpY2VfdXNiZGV2 X3JlbW92ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQo+ ICsKPiArewo+ICsgICAgQU9fQ1JFQVRFKGN0eCwgZG9taWQsIGFvX2hvdyk7Cj4gKyAgICBpbnQg cmM7Cj4gKwo+ICsgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9yZW1vdmUoZ2MsIGRvbWlk LCB1c2JkZXYpOwo+ICsKPiArICAgIGxpYnhsX19hb19jb21wbGV0ZShlZ2MsIGFvLCByYyk7Cj4g KyAgICByZXR1cm4gQU9fSU5QUk9HUkVTUzsKPiArfQo+ICsKPiAraW50IGxpYnhsX2N0cmxwb3J0 X3RvX2RldmljZV91c2JkZXYobGlieGxfY3R4ICpjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgY3RybCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHBvcnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKPiArewo+ICsgICAgR0NfSU5JVChjdHgpOwo+ICsg ICAgY29uc3QgY2hhciAqZG9tcGF0aCwgKmZlX3BhdGgsICpiZV9wYXRoLCAqYnVzaWQ7Cj4gKyAg ICBpbnQgcmM7Cj4gKwo+ICsgICAgZG9tcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOwo+ICsKPiArICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiLyVk IiwgZG9tcGF0aCwgY3RybCk7Cj4gKwo+ICsgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19m ZShnYywgZmVfcGF0aCwgZG9taWQpOwo+ICsgICAgaWYgKCFiZV9wYXRoKSB7Cj4gKyAgICAgICAg cmMgPSBFUlJPUl9GQUlMOwo+ICsgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgfQo+ICsKPiArICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvcG9ydC8lZCIsIGJlX3BhdGgsIHBvcnQpLAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVzaWQpOwo+ICsgICAgaWYgKHJjKSBnb3Rv IG91dDsKPiArCj4gKyAgICBpZiAoIWJ1c2lkIHx8ICFzdHJjbXAoYnVzaWQsICIiKSkgewo+ICsg ICAgICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0KPiAr Cj4gKyAgICB1c2JkZXYtPmN0cmwgPSBjdHJsOwo+ICsgICAgdXNiZGV2LT5wb3J0ID0gcG9ydDsK PiArICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hPU1RERVY7Cj4gKyAgICBy YyA9IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQoZ2MsIGJ1c2lkLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YnVzLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRk cik7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBHQ19GUkVFOwo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Ky8qCj4gKyAqIExvY2FsIHZhcmlhYmxlczoKPiArICogbW9kZTogQwo+ICsgKiBjLWJhc2ljLW9m ZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ICsgKi8KPiBk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsIGIvdG9vbHMvbGlieGwvbGli eGxfdHlwZXMuaWRsCj4gaW5kZXggNjMyYzAwOS4uMmE5OWVlYiAxMDA2NDQKPiAtLS0gYS90b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5p ZGwKPiBAQCAtNjEzLDYgKzYxMywzNSBAQCBsaWJ4bF9kZXZpY2VfcmRtID0gU3RydWN0KCJkZXZp Y2VfcmRtIiwgWwo+ICAgICAgKCJwb2xpY3kiLCBsaWJ4bF9yZG1fcmVzZXJ2ZV9wb2xpY3kpLAo+ ICAgICAgXSkKPiAgCj4gK2xpYnhsX3VzYmN0cmxfdHlwZSA9IEVudW1lcmF0aW9uKCJ1c2JjdHJs X3R5cGUiLCBbCj4gKyAgICAoMCwgIkFVVE8iKSwKPiArICAgICgxLCAiUFYiKSwKPiArICAgICgy LCAiREVWSUNFTU9ERUwiKSwKPiArICAgIF0pCj4gKwo+ICtsaWJ4bF91c2JkZXZfdHlwZSA9IEVu dW1lcmF0aW9uKCJ1c2JkZXZfdHlwZSIsIFsKPiArICAgICgxLCAiaG9zdGRldiIpLAo+ICsgICAg XSkKPiArCj4gK2xpYnhsX2RldmljZV91c2JjdHJsID0gU3RydWN0KCJkZXZpY2VfdXNiY3RybCIs IFsKPiArICAgICgidHlwZSIsIGxpYnhsX3VzYmN0cmxfdHlwZSksCj4gKyAgICAoImRldmlkIiwg bGlieGxfZGV2aWQpLAo+ICsgICAgKCJ2ZXJzaW9uIiwgaW50ZWdlciksCj4gKyAgICAoInBvcnRz IiwgaW50ZWdlciksCj4gKyAgICAoImJhY2tlbmRfZG9taWQiLCBsaWJ4bF9kb21pZCksCj4gKyAg ICAoImJhY2tlbmRfZG9tbmFtZSIsIHN0cmluZyksCj4gKyAgIF0pCj4gKwo+ICtsaWJ4bF9kZXZp Y2VfdXNiZGV2ID0gU3RydWN0KCJkZXZpY2VfdXNiZGV2IiwgWwo+ICsgICAgKCJjdHJsIiwgbGli eGxfZGV2aWQpLAo+ICsgICAgKCJwb3J0IiwgaW50ZWdlciksCj4gKyAgICAoInUiLCBLZXllZFVu aW9uKE5vbmUsIGxpYnhsX3VzYmRldl90eXBlLCAidHlwZSIsCj4gKyAgICAgICAgICAgWygiaG9z dGRldiIsIFN0cnVjdChOb25lLCBbCj4gKyAgICAgICAgICAgICAgICAgKCJob3N0YnVzIiwgICB1 aW50OCksCj4gKyAgICAgICAgICAgICAgICAgKCJob3N0YWRkciIsICB1aW50OCldKSksCj4gKyAg ICAgICAgICAgXSkpLAo+ICsgICAgXSkKPiArCj4gIGxpYnhsX2RldmljZV9kdGRldiA9IFN0cnVj dCgiZGV2aWNlX2R0ZGV2IiwgWwo+ICAgICAgKCJwYXRoIiwgc3RyaW5nKSwKPiAgICAgIF0pCj4g QEAgLTY1MSw2ICs2ODAsOCBAQCBsaWJ4bF9kb21haW5fY29uZmlnID0gU3RydWN0KCJkb21haW5f Y29uZmlnIiwgWwo+ICAgICAgIyBhIGNoYW5uZWwgbWFuaWZlc3RzIGFzIGEgY29uc29sZSB3aXRo IGEgbmFtZSwKPiAgICAgICMgc2VlIGRvY3MvbWlzYy9jaGFubmVscy50eHQKPiAgICAgICgiY2hh bm5lbHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfY2hhbm5lbCwgIm51bV9jaGFubmVscyIpKSwKPiAr ICAgICgidXNiY3RybHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdXNiY3RybCwgIm51bV91c2JjdHJs cyIpKSwKPiArICAgICgidXNiZGV2cyIsIEFycmF5KGxpYnhsX2RldmljZV91c2JkZXYsICJudW1f dXNiZGV2cyIpKSwKPiAgCj4gICAgICAoIm9uX3Bvd2Vyb2ZmIiwgbGlieGxfYWN0aW9uX29uX3No dXRkb3duKSwKPiAgICAgICgib25fcmVib290IiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3duKSwK PiBAQCAtNjk0LDYgKzcyNSwyMSBAQCBsaWJ4bF92dHBtaW5mbyA9IFN0cnVjdCgidnRwbWluZm8i LCBbCj4gICAgICAoInV1aWQiLCBsaWJ4bF91dWlkKSwKPiAgICAgIF0sIGRpcj1ESVJfT1VUKQo+ ICAKPiArbGlieGxfdXNiY3RybGluZm8gPSBTdHJ1Y3QoInVzYmN0cmxpbmZvIiwgWwo+ICsgICAg KCJ0eXBlIiwgbGlieGxfdXNiY3RybF90eXBlKSwKPiArICAgICgiZGV2aWQiLCBsaWJ4bF9kZXZp ZCksCj4gKyAgICAoInZlcnNpb24iLCBpbnRlZ2VyKSwKPiArICAgICgicG9ydHMiLCBpbnRlZ2Vy KSwKPiArICAgICgiYmFja2VuZCIsIHN0cmluZyksCj4gKyAgICAoImJhY2tlbmRfaWQiLCB1aW50 MzIpLAo+ICsgICAgKCJmcm9udGVuZCIsIHN0cmluZyksCj4gKyAgICAoImZyb250ZW5kX2lkIiwg dWludDMyKSwKPiArICAgICgic3RhdGUiLCBpbnRlZ2VyKSwKPiArICAgICgiZXZ0Y2giLCBpbnRl Z2VyKSwKPiArICAgICgicmVmX3VyYiIsIGludGVnZXIpLAo+ICsgICAgKCJyZWZfY29ubiIsIGlu dGVnZXIpLAo+ICsgICAgXSwgZGlyPURJUl9PVVQpCj4gKwo+ICBsaWJ4bF92Y3B1aW5mbyA9IFN0 cnVjdCgidmNwdWluZm8iLCBbCj4gICAgICAoInZjcHVpZCIsIHVpbnQzMiksCj4gICAgICAoImNw dSIsIHVpbnQzMiksCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVy bmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbAo+IGluZGV4IDVl NTU2ODUuLjY5NmY1ZjggMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50 ZXJuYWwuaWRsCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCj4g QEAgLTIyLDYgKzIyLDcgQEAgbGlieGxfX2RldmljZV9raW5kID0gRW51bWVyYXRpb24oImRldmlj ZV9raW5kIiwgWwo+ICAgICAgKDYsICJWS0JEIiksCj4gICAgICAoNywgIkNPTlNPTEUiKSwKPiAg ICAgICg4LCAiVlRQTSIpLAo+ICsgICAgKDksICJWVVNCIiksCj4gICAgICBdKQo+ICAKPiAgbGli eGxfX2NvbnNvbGVfYmFja2VuZCA9IEVudW1lcmF0aW9uKCJjb25zb2xlX2JhY2tlbmQiLCBbCj4g ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmMgYi90b29scy9saWJ4bC9saWJ4 bF91dGlscy5jCj4gaW5kZXggYjBjYjllMS4uY2ViODgyNSAxMDA2NDQKPiAtLS0gYS90b29scy9s aWJ4bC9saWJ4bF91dGlscy5jCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuYwo+IEBA IC0xMzExLDYgKzEzMTEsMjQgQEAgaW50IGxpYnhsX19yYW5kb21fYnl0ZXMobGlieGxfX2djICpn YywgdWludDhfdCAqYnVmLCBzaXplX3QgbGVuKQo+ICAgICAgcmV0dXJuIHJldDsKPiAgfQo+ICAK PiArdm9pZCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0X2ZyZWUobGlieGxfZGV2aWNlX3VzYmN0 cmwgKmxpc3QsIGludCBucikKPiArewo+ICsgICBpbnQgaTsKPiArCj4gKyAgIGZvciAoaSA9IDA7 IGkgPCBucjsgaSsrKQo+ICsgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmbGlz dFtpXSk7Cj4gKyAgIGZyZWUobGlzdCk7Cj4gK30KPiArCj4gK3ZvaWQgbGlieGxfZGV2aWNlX3Vz YmRldl9saXN0X2ZyZWUobGlieGxfZGV2aWNlX3VzYmRldiAqbGlzdCwgaW50IG5yKQo+ICt7Cj4g KyAgIGludCBpOwo+ICsKPiArICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCj4gKyAgICAgICBs aWJ4bF9kZXZpY2VfdXNiZGV2X2Rpc3Bvc2UoJmxpc3RbaV0pOwo+ICsgICBmcmVlKGxpc3QpOwo+ ICt9Cj4gKwo+ICAvKgo+ICAgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gICAqIG1vZGU6IEMKPiBkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3V0 aWxzLmgKPiBpbmRleCAzMzllYmRmLi40NDk1NDE3IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnhs L2xpYnhsX3V0aWxzLmgKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF91dGlscy5oCj4gQEAgLTc2 LDYgKzc2LDExIEBAIGludCBsaWJ4bF91dWlkX3RvX2RldmljZV92dHBtKGxpYnhsX2N0eCAqY3R4 LCB1aW50MzJfdCBkb21pZCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X3V1aWQgKnV1aWQsIGxpYnhsX2RldmljZV92dHBtICp2dHBtKTsKPiAgaW50IGxpYnhsX2Rldmlk X3RvX2RldmljZV92dHBtKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKPiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZpZCwgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0 cG0pOwo+ICtpbnQgbGlieGxfZGV2aWRfdG9fZGV2aWNlX3VzYmN0cmwobGlieGxfY3R4ICpjdHgs IHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGRldmlkLCBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCk7Cj4gK2ludCBsaWJ4bF9jdHJs cG9ydF90b19kZXZpY2VfdXNiZGV2KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN0cmwsIGludCBwb3J0LAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2 ICp1c2JkZXYpOwo+ICAKPiAgaW50IGxpYnhsX2JpdG1hcF9hbGxvYyhsaWJ4bF9jdHggKmN0eCwg bGlieGxfYml0bWFwICpiaXRtYXAsIGludCBuX2JpdHMpOwo+ICAgICAgLyogQWxsb2NhdGVkIGJp bWFwIGlzIGZyb20gbWFsbG9jLCBsaWJ4bF9iaXRtYXBfZGlzcG9zZSgpIHRvIGJlCj4gCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1h aWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlzdHMueGVuLm9yZy94 ZW4tZGV2ZWwK