From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 14/20] drm: Extract drm_connector.[hc] Date: Fri, 12 Aug 2016 22:24:33 +0200 Message-ID: <20160812202433.GV6232@phenom.ffwll.local> References: <1470750091-16627-1-git-send-email-daniel.vetter@ffwll.ch> <1470750091-16627-15-git-send-email-daniel.vetter@ffwll.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x243.google.com (mail-wm0-x243.google.com [IPv6:2a00:1450:400c:c09::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id A81796EC25 for ; Fri, 12 Aug 2016 20:24:39 +0000 (UTC) Received: by mail-wm0-x243.google.com with SMTP id i138so4897667wmf.3 for ; Fri, 12 Aug 2016 13:24:39 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Sean Paul Cc: Daniel Vetter , Intel Graphics Development , DRI Development , Daniel Vetter List-Id: intel-gfx@lists.freedesktop.org T24gV2VkLCBBdWcgMTAsIDIwMTYgYXQgMTE6MDY6MDdBTSAtMDQwMCwgU2VhbiBQYXVsIHdyb3Rl Ogo+IE9uIFR1ZSwgQXVnIDksIDIwMTYgYXQgOTo0MSBBTSwgRGFuaWVsIFZldHRlciA8ZGFuaWVs LnZldHRlckBmZndsbC5jaD4gd3JvdGU6Cj4gPiBQdWxscyBpbiBxdWl0ZSBhIGxvdCBvZiBjb25u ZWN0b3IgcmVsYXRlZCBzdHJ1Y3R1cmVzIChjbWRsaW5lIG1vZGUsCj4gPiBmb3JjZS9zdGF0dXMg ZW51bXMsIGRpc3BsYXkgaW5mbyksIGJ1dCBJIHRoaW5rIHRoYXQgYWxsIG1ha2VzIHBlcmZlY3QK PiA+IHNlbnNlLgo+ID4KPiA+IEFsc28gaGFkIHRvIG1vdmUgYSBmZXcgbW9yZSBjb3JlIGttcyBv YmplY3Qgc3R1ZmYgaW50byBkcm1fbW9kZXNldC5oLgo+ID4KPiA+IEFuZCBhcyBhIGZpcnN0IGNs ZWFudXAgcmVtb3ZlIHRoZSBrZXJuZWxkb2MgZm9yIHRoZSAyIGNvbm5lY3RvciBJT0NUTAo+ID4g LSBEUk0gY29yZSBkb2NzIGFyZSBhaW1lZCBhdCBkcml2ZXJzLCBubyBwb2ludCBkb2N1bWVudGlu ZyBpbnRlcm5hbCBpbgo+ID4gZXhjcnVjaWF0aW5nIGRldGFpbC4KPiA+Cj4gPiB2MjogQW5kIGFs c28gcHVsbCBpbiBhbGwgdGhlIGNvbm5lY3RvciBwcm9wZXJ0eSBjb2RlLgo+ID4KPiAKPiBcby8K PiAKPiBJIHBpY2tlZCBhIGZldyBuaXRzIGJlbG93LCBidXQgbm90aGluZyBmdW5jdGlvbmFsIGFu ZCBub3RoaW5nIHRoYXQKPiB3YXNuJ3QgYWxyZWFkeSBleGlzdGluZyBpbiBkcm1fY3J0Yy5jLiBJ IHR3aXRjaGVkIGF0IGEgZmV3IG90aGVyCj4gcmVhbGx5IHNtYWxsIHRoaW5ncyB3aGlsZSBJIHdh cyByZWFkaW5nLCBzbyBJJ2xsIHBvc3QgYSBmb2xsb3ctb24KPiBjbGVhbnVwIHBhdGNoIGZvciBk cm1fY29ubmVjdG9yLiBGZWVsIGZyZWUgdG8gZGlzcmVnYXJkIG15IG5pdHMgYmVsb3cKPiBhbmQg SSdsbCBzY29vcCB0aGVtIHVwIGxhdGVyLgoKSSdkIGxpa2UgdG8gbm90IGNoYW5nZSBjb2RlIGl0 IGNvZGUtbW90aW9uIHBhdGNoZXMuIEkndmUgYWRkZWQgdGhlIHR5cG8KZml4IHRvIHRoZSBkcm1f Y29ubmVjdG9yIGRvYyB1cGRhdGUgcGF0Y2gsIGFuZCB3aWxsIGdsYWRseSBsZWF2ZSB0aGUgbml0 cwp0byB5b3UgaW4gYSBmb2xsb3ctdXAuCi1EYW5pZWwKCj4gCj4gU2Vhbgo+IAo+ID4gU2lnbmVk LW9mZi1ieTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4gPiAtLS0K PiA+ICBEb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCAgICAgICB8ICAgIDkgKwo+ID4gIGRy aXZlcnMvZ3B1L2RybS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAgMiArLQo+ID4gIGRyaXZlcnMv Z3B1L2RybS9kcm1fY29ubmVjdG9yLmMgICAgIHwgMTA1OCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyAgICAgICAgICB8IDEx MTAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+ICBkcml2ZXJzL2dwdS9k cm0vZHJtX2NydGNfaW50ZXJuYWwuaCB8ICAgMjYgKy0KPiA+ICBpbmNsdWRlL2RybS9kcm1fY29u bmVjdG9yLmggICAgICAgICB8ICA2NDQgKysrKysrKysrKysrKysrKysrKysKPiA+ICBpbmNsdWRl L2RybS9kcm1fY3J0Yy5oICAgICAgICAgICAgICB8ICA2MDEgKy0tLS0tLS0tLS0tLS0tLS0tLQo+ ID4gIGluY2x1ZGUvZHJtL2RybV9tb2Rlcy5oICAgICAgICAgICAgIHwgICAxNiArLQo+ID4gIGlu Y2x1ZGUvZHJtL2RybV9tb2Rlc2V0LmggICAgICAgICAgIHwgICAzNiArLQo+ID4gIDkgZmlsZXMg Y2hhbmdlZCwgMTc3MyBpbnNlcnRpb25zKCspLCAxNzI5IGRlbGV0aW9ucygtKQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+ID4KPiA+IGRpZmYgLS1n aXQgYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLnJzdCBiL0RvY3VtZW50YXRpb24vZ3B1L2Ry bS1rbXMucnN0Cj4gPiBpbmRleCBkMjQ0ZTAzNjU4Y2MuLjQ0OWFjYzI1MTdjNyAxMDA2NDQKPiA+ IC0tLSBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0Cj4gPiArKysgYi9Eb2N1bWVudGF0 aW9uL2dwdS9kcm0ta21zLnJzdAo+ID4gQEAgLTExMCw2ICsxMTAsMTUgQEAgRGlzcGxheSBNb2Rl cyBGdW5jdGlvbiBSZWZlcmVuY2UKPiA+ICAuLiBrZXJuZWwtZG9jOjogZHJpdmVycy9ncHUvZHJt L2RybV9tb2Rlcy5jCj4gPiAgICAgOmV4cG9ydDoKPiA+Cj4gPiArQ29ubmVjdG9yIERpc3BsYXkg U2luayBBYnN0cmFjdGlvbgo+ID4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiA+ICsKPiA+ICsuLiBrZXJuZWwtZG9jOjogaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oCj4g PiArICAgOmludGVybmFsOgo+ID4gKwo+ID4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9k cm0vZHJtX2Nvbm5lY3Rvci5jCj4gPiArICAgOmV4cG9ydDoKPiA+ICsKPiA+ICBLTVMgSW5pdGlh bGl6YXRpb24gYW5kIENsZWFudXAKPiA+ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiA+Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCj4gPiBpbmRleCBjNzFlYzQyY2U1MTEuLjJlZmYxYTMzYWI2MyAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL01ha2VmaWxlCj4gPiBAQCAtMTMsNyArMTMsNyBAQCBkcm0teSAgICAgICA6PSAgICAg ICAgZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKPiA+ICAgICAgICAgICAgICAg ICBkcm1fdHJhY2VfcG9pbnRzLm8gZHJtX2dsb2JhbC5vIGRybV9wcmltZS5vIFwKPiA+ICAgICAg ICAgICAgICAgICBkcm1fcmVjdC5vIGRybV92bWFfbWFuYWdlci5vIGRybV9mbGlwX3dvcmsubyBc Cj4gPiAgICAgICAgICAgICAgICAgZHJtX21vZGVzZXRfbG9jay5vIGRybV9hdG9taWMubyBkcm1f YnJpZGdlLm8gXAo+ID4gLSAgICAgICAgICAgICAgIGRybV9mcmFtZWJ1ZmZlci5vCj4gPiArICAg ICAgICAgICAgICAgZHJtX2ZyYW1lYnVmZmVyLm8gZHJtX2Nvbm5lY3Rvci5vCj4gPgo+ID4gIGRy bS0kKENPTkZJR19DT01QQVQpICs9IGRybV9pb2MzMi5vCj4gPiAgZHJtLSQoQ09ORklHX0RSTV9H RU1fQ01BX0hFTFBFUikgKz0gZHJtX2dlbV9jbWFfaGVscGVyLm8KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jb25u ZWN0b3IuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4u OTllY2U2NzU4MDYxCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2Nvbm5lY3Rvci5jCj4gPiBAQCAtMCwwICsxLDEwNTggQEAKPiA+ICsvKgo+ID4gKyAqIENv cHlyaWdodCAoYykgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+ID4gKyAqCj4gPiArICogUGVybWlz c2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0 d2FyZSBhbmQgaXRzCj4gPiArICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVy ZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKPiA+ICsgKiB0aGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQg Y29weXJpZ2h0Cj4gPiArICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVh ciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZAo+ID4gKyAqIHRoYXQgdGhlIG5hbWUg b2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCj4g PiArICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2Fy ZSB3aXRob3V0IHNwZWNpZmljLAo+ID4gKyAqIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIFRo ZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucwo+ID4gKyAqIGFib3V0 IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlz IHByb3ZpZGVkICJhcwo+ID4gKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJy YW50eS4KPiA+ICsgKgo+ID4gKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwg V0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAo+ID4gKyAqIElOQ0xVRElO RyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywg SU4gTk8KPiA+ICsgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKPiA+ICsgKiBDT05TRVFVRU5USUFMIERBTUFH RVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwK PiA+ICsgKiBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBORUdMSUdFTkNFIE9SIE9USEVSCj4gPiArICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQo+ID4gKyAq IE9GIFRISVMgU09GVFdBUkUuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1Q Lmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9yLmg+Cj4gPiArI2luY2x1ZGUgPGRy bS9kcm1fZWRpZC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlICJkcm1fY3J0Y19pbnRlcm5hbC5oIgo+ ID4gKyNpbmNsdWRlICJkcm1faW50ZXJuYWwuaCIKPiA+ICsKPiA+ICtzdHJ1Y3QgZHJtX2Nvbm5f cHJvcF9lbnVtX2xpc3Qgewo+ID4gKyAgICAgICBpbnQgdHlwZTsKPiA+ICsgICAgICAgY29uc3Qg Y2hhciAqbmFtZTsKPiA+ICsgICAgICAgc3RydWN0IGlkYSBpZGE7Cj4gPiArfTsKPiA+ICsKPiA+ ICsvKgo+ID4gKyAqIENvbm5lY3RvciBhbmQgZW5jb2RlciB0eXBlcy4KPiA+ICsgKi8KPiA+ICtz dGF0aWMgc3RydWN0IGRybV9jb25uX3Byb3BfZW51bV9saXN0IGRybV9jb25uZWN0b3JfZW51bV9s aXN0W10gPSB7Cj4gPiArICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24sICJVbmtu b3duIiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICJWR0EiIH0sCj4g PiArICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICJEVkktSSIgfSwKPiA+ICsgICAg ICAgeyBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRCwgIkRWSS1EIiB9LAo+ID4gKyAgICAgICB7IERS TV9NT0RFX0NPTk5FQ1RPUl9EVklBLCAiRFZJLUEiIH0sCj4gPiArICAgICAgIHsgRFJNX01PREVf Q09OTkVDVE9SX0NvbXBvc2l0ZSwgIkNvbXBvc2l0ZSIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9E RV9DT05ORUNUT1JfU1ZJREVPLCAiU1ZJREVPIiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0NP Tk5FQ1RPUl9MVkRTLCAiTFZEUyIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1Jf Q29tcG9uZW50LCAiQ29tcG9uZW50IiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RP Ul85UGluRElOLCAiRElOIiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNw bGF5UG9ydCwgIkRQIiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSwg IkhETUktQSIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIsICJIRE1J LUIiIH0sCj4gPiArICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX1RWLCAiVFYiIH0sCj4gPiAr ICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX2VEUCwgImVEUCIgfSwKPiA+ICsgICAgICAgeyBE Uk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCwgIlZpcnR1YWwiIH0sCj4gPiArICAgICAgIHsgRFJN X01PREVfQ09OTkVDVE9SX0RTSSwgIkRTSSIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9ERV9DT05O RUNUT1JfRFBJLCAiRFBJIiB9LAo+ID4gK307Cj4gPiArCj4gPiArdm9pZCBkcm1fY29ubmVjdG9y X2lkYV9pbml0KHZvaWQpCj4gPiArewo+ID4gKyAgICAgICBpbnQgaTsKPiA+ICsKPiA+ICsgICAg ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJtX2Nvbm5lY3Rvcl9lbnVtX2xpc3QpOyBp KyspCj4gPiArICAgICAgICAgICAgICAgaWRhX2luaXQoJmRybV9jb25uZWN0b3JfZW51bV9saXN0 W2ldLmlkYSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgZHJtX2Nvbm5lY3Rvcl9pZGFfZGVzdHJv eSh2b2lkKQo+ID4gK3sKPiA+ICsgICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIGZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRybV9jb25uZWN0b3JfZW51bV9saXN0KTsgaSsrKQo+ID4g KyAgICAgICAgICAgICAgIGlkYV9kZXN0cm95KCZkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtpXS5p ZGEpOwo+ID4gK30KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fY29ubmVjdG9yX2dldF9jbWRs aW5lX21vZGUgLSByZWFkcyB0aGUgdXNlcidzIGNtZGxpbmUgbW9kZQo+ID4gKyAqIEBjb25uZWN0 b3I6IGNvbm5lY3RvciB0byBxdXdlcnkKPiA+ICsgKgo+ID4gKyAqIFRoZSBrZXJuZWwgc3VwcG9y dHMgcGVyLWNvbm5lY3RvciBjb25maWdyYXRpb24gb2YgaXRzIGNvbnNvbGVzIHRocm91Z2gKPiAK PiBXaGlsZSB3ZSdyZSBoZXJlLCBzL2NvbmZpZ3JhdGlvbi9jb25maWd1cmF0aW9uLwo+IAo+IAo+ ID4gKyAqIHVzZSBvZiB0aGUgdmlkZW89IHBhcmFtZXRlci4gVGhpcyBmdW5jdGlvbiBwYXJzZXMg dGhhdCBvcHRpb24gYW5kCj4gPiArICogZXh0cmFjdHMgdGhlIHVzZXIncyBzcGVjaWZpZWQgbW9k ZSAob3IgZW5hYmxlL2Rpc2FibGUgc3RhdHVzKSBmb3IgYQo+ID4gKyAqIHBhcnRpY3VsYXIgY29u bmVjdG9yLiBUaGlzIGlzIHR5cGljYWxseSBvbmx5IHVzZWQgZHVyaW5nIHRoZSBlYXJseSBmYmRl dgo+ID4gKyAqIHNldHVwLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyB2b2lkIGRybV9jb25uZWN0b3Jf Z2V0X2NtZGxpbmVfbW9kZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sK PiA+ICsgICAgICAgc3RydWN0IGRybV9jbWRsaW5lX21vZGUgKm1vZGUgPSAmY29ubmVjdG9yLT5j bWRsaW5lX21vZGU7Cj4gPiArICAgICAgIGNoYXIgKm9wdGlvbiA9IE5VTEw7Cj4gPiArCj4gPiAr ICAgICAgIGlmIChmYl9nZXRfb3B0aW9ucyhjb25uZWN0b3ItPm5hbWUsICZvcHRpb24pKQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgICAgaWYgKCFkcm1fbW9kZV9w YXJzZV9jb21tYW5kX2xpbmVfZm9yX2Nvbm5lY3RvcihvcHRpb24sCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1v ZGUpKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybjsKPiA+ICsKPiA+ICsgICAgICAgaWYgKG1v ZGUtPmZvcmNlKSB7Cj4gPiArICAgICAgICAgICAgICAgY29uc3QgY2hhciAqczsKPiA+ICsKPiA+ ICsgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUtPmZvcmNlKSB7Cj4gPiArICAgICAgICAgICAg ICAgY2FzZSBEUk1fRk9SQ0VfT0ZGOgo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgcyA9ICJP RkYiOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAg ICAgY2FzZSBEUk1fRk9SQ0VfT05fRElHSVRBTDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IHMgPSAiT04gLSBkaWciOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiAr ICAgICAgICAgICAgICAgZGVmYXVsdDoKPiA+ICsgICAgICAgICAgICAgICBjYXNlIERSTV9GT1JD RV9PTjoKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHMgPSAiT04iOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICAgICAgICAgIERSTV9JTkZPKCJmb3JjaW5nICVzIGNvbm5lY3RvciAlc1xuIiwgY29ubmVj dG9yLT5uYW1lLCBzKTsKPiA+ICsgICAgICAgICAgICAgICBjb25uZWN0b3ItPmZvcmNlID0gbW9k ZS0+Zm9yY2U7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAgRFJNX0RFQlVHX0tNUygi Y21kbGluZSBtb2RlIGZvciBjb25uZWN0b3IgJXMgJWR4JWRAJWRIeiVzJXMlc1xuIiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPm5hbWUsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgbW9kZS0+eHJlcywgbW9kZS0+eXJlcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICBt b2RlLT5yZWZyZXNoX3NwZWNpZmllZCA/IG1vZGUtPnJlZnJlc2ggOiA2MCwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBtb2RlLT5yYiA/ICIgcmVkdWNlZCBibGFua2luZyIgOiAiIiwKPiA+ICsg ICAgICAgICAgICAgICAgICAgICBtb2RlLT5tYXJnaW5zID8gIiB3aXRoIG1hcmdpbnMiIDogIiIs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbW9kZS0+aW50ZXJsYWNlID8gICIgaW50ZXJsYWNl ZCIgOiAiIik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9jb25uZWN0b3JfZnJl ZShzdHJ1Y3Qga3JlZiAqa3JlZikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPQo+ID4gKyAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihrcmVmLCBz dHJ1Y3QgZHJtX2Nvbm5lY3RvciwgYmFzZS5yZWZjb3VudCk7Cj4gPiArICAgICAgIHN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiA+ICsKPiA+ICsgICAgICAgZHJtX21v ZGVfb2JqZWN0X3VucmVnaXN0ZXIoZGV2LCAmY29ubmVjdG9yLT5iYXNlKTsKPiA+ICsgICAgICAg Y29ubmVjdG9yLT5mdW5jcy0+ZGVzdHJveShjb25uZWN0b3IpOwo+ID4gK30KPiA+ICsKPiA+ICsv KioKPiA+ICsgKiBkcm1fY29ubmVjdG9yX2luaXQgLSBJbml0IGEgcHJlYWxsb2NhdGVkIGNvbm5l Y3Rvcgo+ID4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ICsgKiBAY29ubmVjdG9yOiB0aGUgY29u bmVjdG9yIHRvIGluaXQKPiA+ICsgKiBAZnVuY3M6IGNhbGxiYWNrcyBmb3IgdGhpcyBjb25uZWN0 b3IKPiA+ICsgKiBAY29ubmVjdG9yX3R5cGU6IHVzZXIgdmlzaWJsZSB0eXBlIG9mIHRoZSBjb25u ZWN0b3IKPiA+ICsgKgo+ID4gKyAqIEluaXRpYWxpc2VzIGEgcHJlYWxsb2NhdGVkIGNvbm5lY3Rv ci4gQ29ubmVjdG9ycyBzaG91bGQgYmUKPiA+ICsgKiBzdWJjbGFzc2VkIGFzIHBhcnQgb2YgZHJp dmVyIGNvbm5lY3RvciBvYmplY3RzLgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBa ZXJvIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICtpbnQg ZHJtX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzICpmdW5jcywK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5lY3Rvcl90eXBlKQo+ID4gK3sKPiA+ ICsgICAgICAgc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqY29uZmlnID0gJmRldi0+bW9kZV9jb25m aWc7Cj4gPiArICAgICAgIGludCByZXQ7Cj4gPiArICAgICAgIHN0cnVjdCBpZGEgKmNvbm5lY3Rv cl9pZGEgPQo+ID4gKyAgICAgICAgICAgICAgICZkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtjb25u ZWN0b3JfdHlwZV0uaWRhOwo+ID4gKwo+ID4gKyAgICAgICBkcm1fbW9kZXNldF9sb2NrX2FsbChk ZXYpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkcm1fbW9kZV9vYmplY3RfZ2V0X3JlZyhkZXYs ICZjb25uZWN0b3ItPmJhc2UsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIERSTV9NT0RFX09CSkVDVF9DT05ORUNUT1IsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZhbHNlLCBkcm1fY29ubmVjdG9yX2ZyZWUpOwo+ID4gKyAgICAgICBp ZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiA+ICsKPiA+ICsg ICAgICAgY29ubmVjdG9yLT5iYXNlLnByb3BlcnRpZXMgPSAmY29ubmVjdG9yLT5wcm9wZXJ0aWVz Owo+ID4gKyAgICAgICBjb25uZWN0b3ItPmRldiA9IGRldjsKPiA+ICsgICAgICAgY29ubmVjdG9y LT5mdW5jcyA9IGZ1bmNzOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBpZGFfc2ltcGxlX2dldCgm Y29uZmlnLT5jb25uZWN0b3JfaWRhLCAwLCAwLCBHRlBfS0VSTkVMKTsKPiA+ICsgICAgICAgaWYg KHJldCA8IDApCj4gPiArICAgICAgICAgICAgICAgZ290byBvdXRfcHV0Owo+ID4gKyAgICAgICBj b25uZWN0b3ItPmluZGV4ID0gcmV0Owo+ID4gKyAgICAgICByZXQgPSAwOwo+ID4gKwo+ID4gKyAg ICAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID0gY29ubmVjdG9yX3R5cGU7Cj4gPiArICAg ICAgIGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQgPQo+ID4gKyAgICAgICAgICAgICAgIGlk YV9zaW1wbGVfZ2V0KGNvbm5lY3Rvcl9pZGEsIDEsIDAsIEdGUF9LRVJORUwpOwo+ID4gKyAgICAg ICBpZiAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCA8IDApIHsKPiA+ICsgICAgICAgICAg ICAgICByZXQgPSBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkOwo+ID4gKyAgICAgICAgICAg ICAgIGdvdG8gb3V0X3B1dF9pZDsKPiA+ICsgICAgICAgfQo+ID4gKyAgICAgICBjb25uZWN0b3It Pm5hbWUgPQo+ID4gKyAgICAgICAgICAgICAgIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMtJWQi LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtj b25uZWN0b3JfdHlwZV0ubmFtZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVj dG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7Cj4gPiArICAgICAgIGlmICghY29ubmVjdG9yLT5uYW1l KSB7Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAg ICBnb3RvIG91dF9wdXRfdHlwZV9pZDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBJ TklUX0xJU1RfSEVBRCgmY29ubmVjdG9yLT5wcm9iZWRfbW9kZXMpOwo+ID4gKyAgICAgICBJTklU X0xJU1RfSEVBRCgmY29ubmVjdG9yLT5tb2Rlcyk7Cj4gPiArICAgICAgIGNvbm5lY3Rvci0+ZWRp ZF9ibG9iX3B0ciA9IE5VTEw7Cj4gPiArICAgICAgIGNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVj dG9yX3N0YXR1c191bmtub3duOwo+ID4gKwo+ID4gKyAgICAgICBkcm1fY29ubmVjdG9yX2dldF9j bWRsaW5lX21vZGUoY29ubmVjdG9yKTsKPiA+ICsKPiA+ICsgICAgICAgLyogV2Ugc2hvdWxkIGFk ZCBjb25uZWN0b3JzIGF0IHRoZSBlbmQgdG8gYXZvaWQgdXBzZXR0aW5nIHRoZSBjb25uZWN0b3IK PiA+ICsgICAgICAgICogaW5kZXggdG9vIG11Y2guICovCj4gPiArICAgICAgIGxpc3RfYWRkX3Rh aWwoJmNvbm5lY3Rvci0+aGVhZCwgJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3QpOwo+ID4gKyAgICAg ICBjb25maWctPm51bV9jb25uZWN0b3IrKzsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGNvbm5lY3Rv cl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMKQo+ID4gKyAgICAgICAgICAgICAg IGRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2UsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLT5lZGlkX3Byb3Bl cnR5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAp Owo+ID4gKwo+ID4gKyAgICAgICBkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9y LT5iYXNlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWct PmRwbXNfcHJvcGVydHksIDApOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoZHJtX2NvcmVfY2hlY2tf ZmVhdHVyZShkZXYsIERSSVZFUl9BVE9NSUMpKSB7Cj4gPiArICAgICAgICAgICAgICAgZHJtX29i amVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwgY29uZmlnLT5wcm9wX2NydGNf aWQsIDApOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGNvbm5lY3Rvci0+ZGVidWdm c19lbnRyeSA9IE5VTEw7Cj4gPiArb3V0X3B1dF90eXBlX2lkOgo+ID4gKyAgICAgICBpZiAocmV0 KQo+ID4gKyAgICAgICAgICAgICAgIGlkYV9yZW1vdmUoY29ubmVjdG9yX2lkYSwgY29ubmVjdG9y LT5jb25uZWN0b3JfdHlwZV9pZCk7Cj4gPiArb3V0X3B1dF9pZDoKPiA+ICsgICAgICAgaWYgKHJl dCkKPiA+ICsgICAgICAgICAgICAgICBpZGFfcmVtb3ZlKCZjb25maWctPmNvbm5lY3Rvcl9pZGEs IGNvbm5lY3Rvci0+aW5kZXgpOwo+ID4gK291dF9wdXQ6Cj4gPiArICAgICAgIGlmIChyZXQpCj4g PiArICAgICAgICAgICAgICAgZHJtX21vZGVfb2JqZWN0X3VucmVnaXN0ZXIoZGV2LCAmY29ubmVj dG9yLT5iYXNlKTsKPiA+ICsKPiA+ICtvdXRfdW5sb2NrOgo+ID4gKyAgICAgICBkcm1fbW9kZXNl dF91bmxvY2tfYWxsKGRldik7Cj4gPiArCj4gPiArICAgICAgIHJldHVybiByZXQ7Cj4gPiArfQo+ ID4gK0VYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl9pbml0KTsKPiA+ICsKPiA+ICsvKioKPiA+ ICsgKiBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIgLSBhdHRhY2ggYSBjb25uZWN0 b3IgdG8gYW4gZW5jb2Rlcgo+ID4gKyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0byBhdHRhY2gK PiA+ICsgKiBAZW5jb2RlcjogZW5jb2RlciB0byBhdHRhY2ggQGNvbm5lY3RvciB0bwo+ID4gKyAq Cj4gPiArICogVGhpcyBmdW5jdGlvbiBsaW5rcyB1cCBhIGNvbm5lY3RvciB0byBhbiBlbmNvZGVy LiBOb3RlIHRoYXQgdGhlIHJvdXRpbmcKPiA+ICsgKiByZXN0cmljdGlvbnMgYmV0d2VlbiBlbmNv ZGVycyBhbmQgY3J0Y3MgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHRocm91Z2ggdGhlCj4gPiAr ICogcG9zc2libGVfY2xvbmVzIGFuZCBwb3NzaWJsZV9jcnRjcyBiaXRtYXNrcy4KPiA+ICsgKgo+ ID4gKyAqIFJldHVybnM6Cj4gPiArICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBv biBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2Vu Y29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ID4g K3sKPiA+ICsgICAgICAgaW50IGk7Cj4gPiArCj4gPiArICAgICAgIC8qCj4gPiArICAgICAgICAq IEluIHRoZSBwYXN0LCBkcml2ZXJzIGhhdmUgYXR0ZW1wdGVkIHRvIG1vZGVsIHRoZSBzdGF0aWMg YXNzb2NpYXRpb24KPiA+ICsgICAgICAgICogb2YgY29ubmVjdG9yIHRvIGVuY29kZXIgaW4gc2lt cGxlIGNvbm5lY3Rvci9lbmNvZGVyIGRldmljZXMgdXNpbmcgYQo+ID4gKyAgICAgICAgKiBkaXJl Y3QgYXNzaWdubWVudCBvZiBjb25uZWN0b3ItPmVuY29kZXIgPSBlbmNvZGVyLiBUaGlzIGNvbm5l Y3Rpb24KPiA+ICsgICAgICAgICogaXMgYSBsb2dpY2FsIG9uZSBhbmQgdGhlIHJlc3BvbnNpYmls aXR5IG9mIHRoZSBjb3JlLCBzbyBkcml2ZXJzIGFyZQo+ID4gKyAgICAgICAgKiBleHBlY3RlZCBu b3QgdG8gbWVzcyB3aXRoIHRoaXMuCj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIE5vdGUg dGhhdCB0aGUgZXJyb3IgcmV0dXJuIHNob3VsZCd2ZSBiZWVuIGVub3VnaCBoZXJlLCBidXQgYSBs YXJnZQo+ID4gKyAgICAgICAgKiBtYWpvcml0eSBvZiBkcml2ZXJzIGlnbm9yZXMgdGhlIHJldHVy biB2YWx1ZSwgc28gYWRkIGluIGEgYmlnIFdBUk4KPiA+ICsgICAgICAgICogdG8gZ2V0IHBlb3Bs ZSdzIGF0dGVudGlvbi4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGlmIChXQVJOX09OKGNv bm5lY3Rvci0+ZW5jb2RlcikpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4g PiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVS OyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgICBpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tp XSA9PSAwKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPmVuY29kZXJf aWRzW2ldID0gZW5jb2Rlci0+YmFzZS5pZDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAwOwo+ID4gKyAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgfQo+ID4gKyAgICAgICBy ZXR1cm4gLUVOT01FTTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25uZWN0 b3JfYXR0YWNoX2VuY29kZXIpOwo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIGRybV9tb2RlX3JlbW92 ZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ID4gK3sKPiA+ICsgICAg ICAgbGlzdF9kZWwoJm1vZGUtPmhlYWQpOwo+ID4gKyAgICAgICBkcm1fbW9kZV9kZXN0cm95KGNv bm5lY3Rvci0+ZGV2LCBtb2RlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2Nv bm5lY3Rvcl9jbGVhbnVwIC0gY2xlYW5zIHVwIGFuIGluaXRpYWxpc2VkIGNvbm5lY3Rvcgo+ID4g KyAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB0byBjbGVhbnVwCj4gPiArICoKPiA+ICsgKiBDbGVh bnMgdXAgdGhlIGNvbm5lY3RvciBidXQgZG9lc24ndCBmcmVlIHRoZSBvYmplY3QuCj4gPiArICov Cj4gPiArdm9pZCBkcm1fY29ubmVjdG9yX2NsZWFudXAoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvcikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25u ZWN0b3ItPmRldjsKPiA+ICsgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsICp0 Owo+ID4gKwo+ID4gKyAgICAgICAvKiBUaGUgY29ubmVjdG9yIHNob3VsZCBoYXZlIGJlZW4gcmVt b3ZlZCBmcm9tIHVzZXJzcGFjZSBsb25nIGJlZm9yZQo+ID4gKyAgICAgICAgKiBpdCBpcyBmaW5h bGx5IGRlc3Ryb3llZC4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGlmIChXQVJOX09OKGNv bm5lY3Rvci0+cmVnaXN0ZXJlZCkpCj4gPiArICAgICAgICAgICAgICAgZHJtX2Nvbm5lY3Rvcl91 bnJlZ2lzdGVyKGNvbm5lY3Rvcik7Cj4gPiArCj4gPiArICAgICAgIGlmIChjb25uZWN0b3ItPnRp bGVfZ3JvdXApIHsKPiA+ICsgICAgICAgICAgICAgICBkcm1fbW9kZV9wdXRfdGlsZV9ncm91cChk ZXYsIGNvbm5lY3Rvci0+dGlsZV9ncm91cCk7Cj4gPiArICAgICAgICAgICAgICAgY29ubmVjdG9y LT50aWxlX2dyb3VwID0gTlVMTDsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBsaXN0 X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNvbm5lY3Rvci0+cHJvYmVkX21vZGVzLCBo ZWFkKQo+ID4gKyAgICAgICAgICAgICAgIGRybV9tb2RlX3JlbW92ZShjb25uZWN0b3IsIG1vZGUp Owo+ID4gKwo+ID4gKyAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobW9kZSwgdCwgJmNv bm5lY3Rvci0+bW9kZXMsIGhlYWQpCj4gPiArICAgICAgICAgICAgICAgZHJtX21vZGVfcmVtb3Zl KGNvbm5lY3RvciwgbW9kZSk7Cj4gPiArCj4gPiArICAgICAgIGlkYV9yZW1vdmUoJmRybV9jb25u ZWN0b3JfZW51bV9saXN0W2Nvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVdLmlkYSwKPiA+ICsgICAg ICAgICAgICAgICAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkKTsKPiA+ICsKPiA+ICsg ICAgICAgaWRhX3JlbW92ZSgmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0b3JfaWRhLAo+ID4gKyAg ICAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+aW5kZXgpOwo+ID4gKwo+ID4gKyAgICAgICBrZnJl ZShjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNfZm9ybWF0cyk7Cj4gPiArICAgICAgIGRybV9t b2RlX29iamVjdF91bnJlZ2lzdGVyKGRldiwgJmNvbm5lY3Rvci0+YmFzZSk7Cj4gPiArICAgICAg IGtmcmVlKGNvbm5lY3Rvci0+bmFtZSk7Cj4gPiArICAgICAgIGNvbm5lY3Rvci0+bmFtZSA9IE5V TEw7Cj4gPiArICAgICAgIGxpc3RfZGVsKCZjb25uZWN0b3ItPmhlYWQpOwo+ID4gKyAgICAgICBk ZXYtPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3ItLTsKPiA+ICsKPiA+ICsgICAgICAgV0FSTl9P Tihjb25uZWN0b3ItPnN0YXRlICYmICFjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfZGVzdHJveV9z dGF0ZSk7Cj4gPiArICAgICAgIGlmIChjb25uZWN0b3ItPnN0YXRlICYmIGNvbm5lY3Rvci0+ZnVu Y3MtPmF0b21pY19kZXN0cm95X3N0YXRlKQo+ID4gKyAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+ ZnVuY3MtPmF0b21pY19kZXN0cm95X3N0YXRlKGNvbm5lY3RvciwKPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPnN0YXRl KTsKPiA+ICsKPiA+ICsgICAgICAgbWVtc2V0KGNvbm5lY3RvciwgMCwgc2l6ZW9mKCpjb25uZWN0 b3IpKTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX2NsZWFudXApOwo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9jb25uZWN0b3JfcmVnaXN0ZXIgLSByZWdpc3RlciBh IGNvbm5lY3Rvcgo+ID4gKyAqIEBjb25uZWN0b3I6IHRoZSBjb25uZWN0b3IgdG8gcmVnaXN0ZXIK PiA+ICsgKgo+ID4gKyAqIFJlZ2lzdGVyIHVzZXJzcGFjZSBpbnRlcmZhY2VzIGZvciBhIGNvbm5l Y3Rvcgo+ID4gKyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIGVy cm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX2Nvbm5lY3Rvcl9yZWdp c3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsgICAgICAg aW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGNvbm5lY3Rvci0+cmVnaXN0ZXJlZCkKPiA+ ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgICAgcmV0ID0gZHJtX3N5 c2ZzX2Nvbm5lY3Rvcl9hZGQoY29ubmVjdG9yKTsKPiA+ICsgICAgICAgaWYgKHJldCkKPiA+ICsg ICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkcm1fZGVi dWdmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7Cj4gPiArICAgICAgIGlmIChyZXQpIHsKPiA+ ICsgICAgICAgICAgICAgICBnb3RvIGVycl9zeXNmczsKPiA+ICsgICAgICAgfQo+IAo+IGNsZWFu IHVwIHRoZSBicmFjZXMgaGVyZSwgdG9vPwo+IAo+ID4gKwo+ID4gKyAgICAgICBpZiAoY29ubmVj dG9yLT5mdW5jcy0+bGF0ZV9yZWdpc3Rlcikgewo+ID4gKyAgICAgICAgICAgICAgIHJldCA9IGNv bm5lY3Rvci0+ZnVuY3MtPmxhdGVfcmVnaXN0ZXIoY29ubmVjdG9yKTsKPiA+ICsgICAgICAgICAg ICAgICBpZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfZGVidWdm czsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICBkcm1fbW9kZV9vYmplY3RfcmVnaXN0 ZXIoY29ubmVjdG9yLT5kZXYsICZjb25uZWN0b3ItPmJhc2UpOwo+ID4gKwo+ID4gKyAgICAgICBj b25uZWN0b3ItPnJlZ2lzdGVyZWQgPSB0cnVlOwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICsK PiA+ICtlcnJfZGVidWdmczoKPiA+ICsgICAgICAgZHJtX2RlYnVnZnNfY29ubmVjdG9yX3JlbW92 ZShjb25uZWN0b3IpOwo+ID4gK2Vycl9zeXNmczoKPiA+ICsgICAgICAgZHJtX3N5c2ZzX2Nvbm5l Y3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4g PiArRVhQT1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX3JlZ2lzdGVyKTsKPiA+ICsKPiA+ICsvKioK PiA+ICsgKiBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgY29ubmVjdG9y Cj4gPiArICogQGNvbm5lY3RvcjogdGhlIGNvbm5lY3RvciB0byB1bnJlZ2lzdGVyCj4gPiArICoK PiA+ICsgKiBVbnJlZ2lzdGVyIHVzZXJzcGFjZSBpbnRlcmZhY2VzIGZvciBhIGNvbm5lY3Rvcgo+ ID4gKyAqLwo+ID4gK3ZvaWQgZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpCj4gPiArewo+ID4gKyAgICAgICBpZiAoIWNvbm5lY3Rvci0+cmVn aXN0ZXJlZCkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm47Cj4gPiArCj4gPiArICAgICAgIGlm IChjb25uZWN0b3ItPmZ1bmNzLT5lYXJseV91bnJlZ2lzdGVyKQo+ID4gKyAgICAgICAgICAgICAg IGNvbm5lY3Rvci0+ZnVuY3MtPmVhcmx5X3VucmVnaXN0ZXIoY29ubmVjdG9yKTsKPiA+ICsKPiA+ ICsgICAgICAgZHJtX3N5c2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKPiA+ICsgICAg ICAgZHJtX2RlYnVnZnNfY29ubmVjdG9yX3JlbW92ZShjb25uZWN0b3IpOwo+ID4gKwo+ID4gKyAg ICAgICBjb25uZWN0b3ItPnJlZ2lzdGVyZWQgPSBmYWxzZTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTChkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIpOwo+ID4gKwo+ID4gK3ZvaWQgZHJtX2Nvbm5l Y3Rvcl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gK3sKPiA+ICsg ICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+ICsKPiA+ICsgICAgICAg LyogRklYTUU6IHRha2luZyB0aGUgbW9kZSBjb25maWcgbXV0ZXggZW5kcyB1cCBpbiBhIGNsYXNo IHdpdGggc3lzZnMgKi8KPiA+ICsgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3Is ICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQo+ID4gKyAgICAgICAgICAg ICAgIGRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwo+ID4gK30KPiA+ICsKPiA+ ICtpbnQgZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcl9hbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiAr ICAgICAgIGludCByZXQ7Cj4gPiArCj4gPiArICAgICAgIC8qIEZJWE1FOiB0YWtpbmcgdGhlIG1v ZGUgY29uZmlnIG11dGV4IGVuZHMgdXAgaW4gYSBjbGFzaCB3aXRoCj4gPiArICAgICAgICAqIGZi Y29uL2JhY2tsaWdodCByZWdpc3RyYXRpb24gKi8KPiA+ICsgICAgICAgbGlzdF9mb3JfZWFjaF9l bnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7 Cj4gPiArICAgICAgICAgICAgICAgcmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0 b3IpOwo+ID4gKyAgICAgICAgICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICBnb3RvIGVycjsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsK PiA+ICsKPiA+ICtlcnI6Cj4gPiArICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZp Zy5tdXRleCk7Cj4gPiArICAgICAgIGRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9hbGwoZGV2KTsK PiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJt X2dldF9jb25uZWN0b3Jfc3RhdHVzX25hbWUgLSByZXR1cm4gYSBzdHJpbmcgZm9yIGNvbm5lY3Rv ciBzdGF0dXMKPiA+ICsgKiBAc3RhdHVzOiBjb25uZWN0b3Igc3RhdHVzIHRvIGNvbXB1dGUgbmFt ZSBvZgo+ID4gKyAqCj4gPiArICogSW4gY29udHJhc3QgdG8gdGhlIG90aGVyIGRybV9nZXRfKl9u YW1lIGZ1bmN0aW9ucyB0aGlzIG9uZSBoZXJlIHJldHVybnMgYQo+ID4gKyAqIGNvbnN0IHBvaW50 ZXIgYW5kIGhlbmNlIGlzIHRocmVhZHNhZmUuCj4gPiArICovCj4gPiArY29uc3QgY2hhciAqZHJt X2dldF9jb25uZWN0b3Jfc3RhdHVzX25hbWUoZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0 dXMpCj4gPiArewo+ID4gKyAgICAgICBpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfY29u bmVjdGVkKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAiY29ubmVjdGVkIjsKPiA+ICsgICAg ICAgZWxzZSBpZiAoc3RhdHVzID09IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkKQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybiAiZGlzY29ubmVjdGVkIjsKPiA+ICsgICAgICAgZWxzZQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiAidW5rbm93biI7Cj4gPiArfQo+ID4gK0VYUE9SVF9T WU1CT0woZHJtX2dldF9jb25uZWN0b3Jfc3RhdHVzX25hbWUpOwo+ID4gKwo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9zdWJwaXhlbF9lbnVtX2xpc3RbXSA9 IHsKPiA+ICsgICAgICAgeyBTdWJQaXhlbFVua25vd24sICJVbmtub3duIiB9LAo+ID4gKyAgICAg ICB7IFN1YlBpeGVsSG9yaXpvbnRhbFJHQiwgIkhvcml6b250YWwgUkdCIiB9LAo+ID4gKyAgICAg ICB7IFN1YlBpeGVsSG9yaXpvbnRhbEJHUiwgIkhvcml6b250YWwgQkdSIiB9LAo+ID4gKyAgICAg ICB7IFN1YlBpeGVsVmVydGljYWxSR0IsICJWZXJ0aWNhbCBSR0IiIH0sCj4gPiArICAgICAgIHsg U3ViUGl4ZWxWZXJ0aWNhbEJHUiwgIlZlcnRpY2FsIEJHUiIgfSwKPiA+ICsgICAgICAgeyBTdWJQ aXhlbE5vbmUsICJOb25lIiB9LAo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2dl dF9zdWJwaXhlbF9vcmRlcl9uYW1lIC0gcmV0dXJuIGEgc3RyaW5nIGZvciBhIGdpdmVuIHN1YnBp eGVsIGVudW0KPiA+ICsgKiBAb3JkZXI6IGVudW0gb2Ygc3VicGl4ZWxfb3JkZXIKPiA+ICsgKgo+ ID4gKyAqIE5vdGUgeW91IGNvdWxkIGFidXNlIHRoaXMgYW5kIHJldHVybiBzb21ldGhpbmcgb3V0 IG9mIGJvdW5kcywgYnV0IHRoYXQKPiA+ICsgKiB3b3VsZCBiZSBhIGNhbGxlciBlcnJvci4gIE5v IHVuc2NydWJiZWQgdXNlciBkYXRhIHNob3VsZCBtYWtlIGl0IGhlcmUuCj4gPiArICovCj4gPiAr Y29uc3QgY2hhciAqZHJtX2dldF9zdWJwaXhlbF9vcmRlcl9uYW1lKGVudW0gc3VicGl4ZWxfb3Jk ZXIgb3JkZXIpCj4gPiArewo+ID4gKyAgICAgICByZXR1cm4gZHJtX3N1YnBpeGVsX2VudW1fbGlz dFtvcmRlcl0ubmFtZTsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fZ2V0X3N1YnBpeGVs X29yZGVyX25hbWUpOwo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51 bV9saXN0IGRybV9kcG1zX2VudW1fbGlzdFtdID0gewo+ID4gKyAgICAgICB7IERSTV9NT0RFX0RQ TVNfT04sICJPbiIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9ERV9EUE1TX1NUQU5EQlksICJTdGFu ZGJ5IiB9LAo+ID4gKyAgICAgICB7IERSTV9NT0RFX0RQTVNfU1VTUEVORCwgIlN1c3BlbmQiIH0s Cj4gPiArICAgICAgIHsgRFJNX01PREVfRFBNU19PRkYsICJPZmYiIH0KPiA+ICt9Owo+ID4gK0RS TV9FTlVNX05BTUVfRk4oZHJtX2dldF9kcG1zX25hbWUsIGRybV9kcG1zX2VudW1fbGlzdCkKPiA+ ICsKPiA+ICsvKiBPcHRpb25hbCBjb25uZWN0b3IgcHJvcGVydGllcy4gKi8KPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fc2NhbGluZ19tb2RlX2VudW1fbGlz dFtdID0gewo+ID4gKyAgICAgICB7IERSTV9NT0RFX1NDQUxFX05PTkUsICJOb25lIiB9LAo+ID4g KyAgICAgICB7IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU4sICJGdWxsIiB9LAo+ID4gKyAgICAg ICB7IERSTV9NT0RFX1NDQUxFX0NFTlRFUiwgIkNlbnRlciIgfSwKPiA+ICsgICAgICAgeyBEUk1f TU9ERV9TQ0FMRV9BU1BFQ1QsICJGdWxsIGFzcGVjdCIgfSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV9hc3BlY3RfcmF0aW9fZW51 bV9saXN0W10gPSB7Cj4gPiArICAgICAgIHsgRFJNX01PREVfUElDVFVSRV9BU1BFQ1RfTk9ORSwg IkF1dG9tYXRpYyIgfSwKPiA+ICsgICAgICAgeyBEUk1fTU9ERV9QSUNUVVJFX0FTUEVDVF80XzMs ICI0OjMiIH0sCj4gPiArICAgICAgIHsgRFJNX01PREVfUElDVFVSRV9BU1BFQ1RfMTZfOSwgIjE2 OjkiIH0sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2Vu dW1fbGlzdCBkcm1fZHZpX2lfc2VsZWN0X2VudW1fbGlzdFtdID0gewo+ID4gKyAgICAgICB7IERS TV9NT0RFX1NVQkNPTk5FQ1RPUl9BdXRvbWF0aWMsICJBdXRvbWF0aWMiIH0sIC8qIERWSS1JIGFu ZCBUVi1vdXQgKi8KPiA+ICsgICAgICAgeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJRCwgICAg ICAiRFZJLUQiICAgICB9LCAvKiBEVkktSSAgKi8KPiA+ICsgICAgICAgeyBEUk1fTU9ERV9TVUJD T05ORUNUT1JfRFZJQSwgICAgICAiRFZJLUEiICAgICB9LCAvKiBEVkktSSAgKi8KPiA+ICt9Owo+ ID4gK0RSTV9FTlVNX05BTUVfRk4oZHJtX2dldF9kdmlfaV9zZWxlY3RfbmFtZSwgZHJtX2R2aV9p X3NlbGVjdF9lbnVtX2xpc3QpCj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJv cF9lbnVtX2xpc3QgZHJtX2R2aV9pX3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3RbXSA9IHsKPiA+ICsg ICAgICAgeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfVW5rbm93biwgICAiVW5rbm93biIgICB9LCAv KiBEVkktSSBhbmQgVFYtb3V0ICovCj4gPiArICAgICAgIHsgRFJNX01PREVfU1VCQ09OTkVDVE9S X0RWSUQsICAgICAgIkRWSS1EIiAgICAgfSwgLyogRFZJLUkgICovCj4gPiArICAgICAgIHsgRFJN X01PREVfU1VCQ09OTkVDVE9SX0RWSUEsICAgICAgIkRWSS1BIiAgICAgfSwgLyogRFZJLUkgICov Cj4gPiArfTsKPiA+ICtEUk1fRU5VTV9OQU1FX0ZOKGRybV9nZXRfZHZpX2lfc3ViY29ubmVjdG9y X25hbWUsCj4gPiArICAgICAgICAgICAgICAgIGRybV9kdmlfaV9zdWJjb25uZWN0b3JfZW51bV9s aXN0KQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRy bV90dl9zZWxlY3RfZW51bV9saXN0W10gPSB7Cj4gPiArICAgICAgIHsgRFJNX01PREVfU1VCQ09O TkVDVE9SX0F1dG9tYXRpYywgIkF1dG9tYXRpYyIgfSwgLyogRFZJLUkgYW5kIFRWLW91dCAqLwo+ ID4gKyAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUsICJDb21wb3NpdGUi IH0sIC8qIFRWLW91dCAqLwo+ID4gKyAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TVklE RU8sICAgICJTVklERU8iICAgIH0sIC8qIFRWLW91dCAqLwo+ID4gKyAgICAgICB7IERSTV9NT0RF X1NVQkNPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiIH0sIC8qIFRWLW91dCAqLwo+ID4g KyAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVCwgICAgICJTQ0FSVCIgICAgIH0s IC8qIFRWLW91dCAqLwo+ID4gK307Cj4gPiArRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0X3R2X3Nl bGVjdF9uYW1lLCBkcm1fdHZfc2VsZWN0X2VudW1fbGlzdCkKPiA+ICsKPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fdHZfc3ViY29ubmVjdG9yX2VudW1fbGlz dFtdID0gewo+ID4gKyAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Vbmtub3duLCAgICJV bmtub3duIiAgIH0sIC8qIERWSS1JIGFuZCBUVi1vdXQgKi8KPiA+ICsgICAgICAgeyBEUk1fTU9E RV9TVUJDT05ORUNUT1JfQ29tcG9zaXRlLCAiQ29tcG9zaXRlIiB9LCAvKiBUVi1vdXQgKi8KPiA+ ICsgICAgICAgeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfU1ZJREVPLCAgICAiU1ZJREVPIiAgICB9 LCAvKiBUVi1vdXQgKi8KPiA+ICsgICAgICAgeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfQ29tcG9u ZW50LCAiQ29tcG9uZW50IiB9LCAvKiBUVi1vdXQgKi8KPiA+ICsgICAgICAgeyBEUk1fTU9ERV9T VUJDT05ORUNUT1JfU0NBUlQsICAgICAiU0NBUlQiICAgICB9LCAvKiBUVi1vdXQgKi8KPiA+ICt9 Owo+ID4gK0RSTV9FTlVNX05BTUVfRk4oZHJtX2dldF90dl9zdWJjb25uZWN0b3JfbmFtZSwKPiA+ ICsgICAgICAgICAgICAgICAgZHJtX3R2X3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3QpCj4gPiArCj4g PiAraW50IGRybV9jb25uZWN0b3JfY3JlYXRlX3N0YW5kYXJkX3Byb3BlcnRpZXMoc3RydWN0IGRy bV9kZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnBy b3A7Cj4gPiArCj4gPiArICAgICAgIHByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJN X01PREVfUFJPUF9CTE9CIHwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJFRElEIiwgMCk7Cj4gPiArICAgICAgIGlmICghcHJvcCkKPiA+ICsgICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5lZGlkX3By b3BlcnR5ID0gcHJvcDsKPiA+ICsKPiA+ICsgICAgICAgcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVh dGVfZW51bShkZXYsIDAsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJE UE1TIiwgZHJtX2RwbXNfZW51bV9saXN0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBUlJBWV9TSVpFKGRybV9kcG1zX2VudW1fbGlzdCkpOwo+ID4gKyAgICAgICBpZiAo IXByb3ApCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArICAgICAgIGRl di0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eSA9IHByb3A7Cj4gPiArCj4gPiArICAgICAgIHBy b3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRFJNX01PREVfUFJPUF9CTE9CIHwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJQQVRIIiwgMCk7Cj4gPiArICAgICAgIGlmICghcHJvcCkK PiA+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+ICsgICAgICAgZGV2LT5tb2Rl X2NvbmZpZy5wYXRoX3Byb3BlcnR5ID0gcHJvcDsKPiA+ICsKPiA+ICsgICAgICAgcHJvcCA9IGRy bV9wcm9wZXJ0eV9jcmVhdGUoZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBEUk1fTU9ERV9QUk9QX0JMT0IgfAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlRJTEUiLCAwKTsKPiA+ICsgICAgICAgaWYgKCFwcm9wKQo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ID4gKyAgICAgICBkZXYtPm1vZGVfY29uZmln LnRpbGVfcHJvcGVydHkgPSBwcm9wOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9 Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX21vZGVfY3JlYXRlX2R2aV9pX3Byb3BlcnRpZXMg LSBjcmVhdGUgRFZJLUkgc3BlY2lmaWMgY29ubmVjdG9yIHByb3BlcnRpZXMKPiA+ICsgKiBAZGV2 OiBEUk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBDYWxsZWQgYnkgYSBkcml2ZXIgdGhlIGZpcnN0 IHRpbWUgYSBEVkktSSBjb25uZWN0b3IgaXMgbWFkZS4KPiA+ICsgKi8KPiA+ICtpbnQgZHJtX21v ZGVfY3JlYXRlX2R2aV9pX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICt7 Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKmR2aV9pX3NlbGVjdG9yOwo+ID4gKyAg ICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpkdmlfaV9zdWJjb25uZWN0b3I7Cj4gPiArCj4gPiAr ICAgICAgIGlmIChkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3NlbGVjdF9zdWJjb25uZWN0b3JfcHJv cGVydHkpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiArICAgICAgIGR2 aV9pX3NlbGVjdG9yID0KPiA+ICsgICAgICAgICAgICAgICBkcm1fcHJvcGVydHlfY3JlYXRlX2Vu dW0oZGV2LCAwLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVj dCBzdWJjb25uZWN0b3IiLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHJtX2R2aV9pX3NlbGVjdF9lbnVtX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBUlJBWV9TSVpFKGRybV9kdmlfaV9zZWxlY3RfZW51bV9saXN0KSk7Cj4gPiAr ICAgICAgIGRldi0+bW9kZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0 eSA9IGR2aV9pX3NlbGVjdG9yOwo+ID4gKwo+ID4gKyAgICAgICBkdmlfaV9zdWJjb25uZWN0b3Ig PSBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJjb25uZWN0b3IiLAo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2R2aV9pX3N1YmNvbm5l Y3Rvcl9lbnVtX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB UlJBWV9TSVpFKGRybV9kdmlfaV9zdWJjb25uZWN0b3JfZW51bV9saXN0KSk7Cj4gPiArICAgICAg IGRldi0+bW9kZV9jb25maWcuZHZpX2lfc3ViY29ubmVjdG9yX3Byb3BlcnR5ID0gZHZpX2lfc3Vi Y29ubmVjdG9yOwo+ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JU X1NZTUJPTChkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyk7Cj4gPiArCj4gPiArLyoq Cj4gPiArICogZHJtX2NyZWF0ZV90dl9wcm9wZXJ0aWVzIC0gY3JlYXRlIFRWIHNwZWNpZmljIGNv bm5lY3RvciBwcm9wZXJ0aWVzCj4gPiArICogQGRldjogRFJNIGRldmljZQo+ID4gKyAqIEBudW1f bW9kZXM6IG51bWJlciBvZiBkaWZmZXJlbnQgVFYgZm9ybWF0cyAobW9kZXMpIHN1cHBvcnRlZAo+ ID4gKyAqIEBtb2RlczogYXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncyBjb250YWluaW5nIG5h bWUgb2YgZWFjaCBmb3JtYXQKPiA+ICsgKgo+ID4gKyAqIENhbGxlZCBieSBhIGRyaXZlcidzIFRW IGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIHRoaXMgZnVuY3Rpb24gY3JlYXRlcwo+ID4gKyAqIHRo ZSBUViBzcGVjaWZpYyBjb25uZWN0b3IgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBkZXZpY2UuICBD YWxsZXIgaXMKPiA+ICsgKiByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhIGxpc3Qgb2YgZm9y bWF0IG5hbWVzIGFuZCBwYXNzaW5nIHRoZW0gdG8KPiA+ICsgKiB0aGlzIHJvdXRpbmUuCj4gPiAr ICovCj4gPiAraW50IGRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IG51bV9tb2RlcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICogY29uc3QgbW9kZXNbXSkKPiA+ICt7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJv cGVydHkgKnR2X3NlbGVjdG9yOwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9z dWJjb25uZWN0b3I7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBpOwo+ID4gKwo+ID4gKyAgICAg ICBpZiAoZGV2LT5tb2RlX2NvbmZpZy50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KQo+ ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICAgICAvKgo+ID4gKyAg ICAgICAgKiBCYXNpYyBjb25uZWN0b3IgcHJvcGVydGllcwo+ID4gKyAgICAgICAgKi8KPiA+ICsg ICAgICAgdHZfc2VsZWN0b3IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLAo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBzdWJjb25u ZWN0b3IiLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJt X3R2X3NlbGVjdF9lbnVtX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBUlJBWV9TSVpFKGRybV90dl9zZWxlY3RfZW51bV9saXN0KSk7Cj4gPiArICAg ICAgIGlmICghdHZfc2VsZWN0b3IpCj4gPiArICAgICAgICAgICAgICAgZ290byBub21lbTsKPiA+ ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3By b3BlcnR5ID0gdHZfc2VsZWN0b3I7Cj4gPiArCj4gPiArICAgICAgIHR2X3N1YmNvbm5lY3RvciA9 Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGRldiwgRFJNX01P REVfUFJPUF9JTU1VVEFCTEUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAic3ViY29ubmVjdG9yIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRybV90dl9zdWJjb25uZWN0b3JfZW51bV9saXN0LAo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVJSQVlfU0laRShkcm1fdHZfc3ViY29ubmVjdG9yX2VudW1fbGlzdCkp Owo+ID4gKyAgICAgICBpZiAoIXR2X3N1YmNvbm5lY3RvcikKPiA+ICsgICAgICAgICAgICAgICBn b3RvIG5vbWVtOwo+ID4gKyAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X3N1YmNvbm5lY3Rvcl9w cm9wZXJ0eSA9IHR2X3N1YmNvbm5lY3RvcjsKPiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAg ICAgICogT3RoZXIsIFRWIHNwZWNpZmljIHByb3BlcnRpZXM6IG1hcmdpbnMgJiBUViBtb2Rlcy4K PiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfbGVmdF9tYXJn aW5fcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFu Z2UoZGV2LCAwLCAibGVmdCBtYXJnaW4iLCAwLCAxMDApOwo+ID4gKyAgICAgICBpZiAoIWRldi0+ bW9kZV9jb25maWcudHZfbGVmdF9tYXJnaW5fcHJvcGVydHkpCj4gPiArICAgICAgICAgICAgICAg Z290byBub21lbTsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9yaWdodF9t YXJnaW5fcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVf cmFuZ2UoZGV2LCAwLCAicmlnaHQgbWFyZ2luIiwgMCwgMTAwKTsKPiA+ICsgICAgICAgaWYgKCFk ZXYtPm1vZGVfY29uZmlnLnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkKPiA+ICsgICAgICAgICAg ICAgICBnb3RvIG5vbWVtOwo+ID4gKwo+ID4gKyAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X3Rv cF9tYXJnaW5fcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVh dGVfcmFuZ2UoZGV2LCAwLCAidG9wIG1hcmdpbiIsIDAsIDEwMCk7Cj4gPiArICAgICAgIGlmICgh ZGV2LT5tb2RlX2NvbmZpZy50dl90b3BfbWFyZ2luX3Byb3BlcnR5KQo+ID4gKyAgICAgICAgICAg ICAgIGdvdG8gbm9tZW07Cj4gPiArCj4gPiArICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfYm90 dG9tX21hcmdpbl9wcm9wZXJ0eSA9Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2Ny ZWF0ZV9yYW5nZShkZXYsIDAsICJib3R0b20gbWFyZ2luIiwgMCwgMTAwKTsKPiA+ICsgICAgICAg aWYgKCFkZXYtPm1vZGVfY29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpCj4gPiArICAg ICAgICAgICAgICAgZ290byBub21lbTsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZp Zy50dl9tb2RlX3Byb3BlcnR5ID0KPiA+ICsgICAgICAgICAgICAgICBkcm1fcHJvcGVydHlfY3Jl YXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm1vZGUiLCBudW1fbW9kZXMpOwo+ID4gKyAgICAgICBpZiAoIWRldi0+bW9k ZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSkKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG5vbWVt Owo+ID4gKwo+ID4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspCj4gPiAr ICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2FkZF9lbnVtKGRldi0+bW9kZV9jb25maWcudHZf bW9kZV9wcm9wZXJ0eSwgaSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaSwgbW9kZXNbaV0pOwo+ID4gKwo+ID4gKyAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X2Jy aWdodG5lc3NfcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVh dGVfcmFuZ2UoZGV2LCAwLCAiYnJpZ2h0bmVzcyIsIDAsIDEwMCk7Cj4gPiArICAgICAgIGlmICgh ZGV2LT5tb2RlX2NvbmZpZy50dl9icmlnaHRuZXNzX3Byb3BlcnR5KQo+ID4gKyAgICAgICAgICAg ICAgIGdvdG8gbm9tZW07Cj4gPiArCj4gPiArICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfY29u dHJhc3RfcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVf cmFuZ2UoZGV2LCAwLCAiY29udHJhc3QiLCAwLCAxMDApOwo+ID4gKyAgICAgICBpZiAoIWRldi0+ bW9kZV9jb25maWcudHZfY29udHJhc3RfcHJvcGVydHkpCj4gPiArICAgICAgICAgICAgICAgZ290 byBub21lbTsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9mbGlja2VyX3Jl ZHVjdGlvbl9wcm9wZXJ0eSA9Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0 ZV9yYW5nZShkZXYsIDAsICJmbGlja2VyIHJlZHVjdGlvbiIsIDAsIDEwMCk7Cj4gPiArICAgICAg IGlmICghZGV2LT5tb2RlX2NvbmZpZy50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSkKPiA+ ICsgICAgICAgICAgICAgICBnb3RvIG5vbWVtOwo+ID4gKwo+ID4gKyAgICAgICBkZXYtPm1vZGVf Y29uZmlnLnR2X292ZXJzY2FuX3Byb3BlcnR5ID0KPiA+ICsgICAgICAgICAgICAgICBkcm1fcHJv cGVydHlfY3JlYXRlX3JhbmdlKGRldiwgMCwgIm92ZXJzY2FuIiwgMCwgMTAwKTsKPiA+ICsgICAg ICAgaWYgKCFkZXYtPm1vZGVfY29uZmlnLnR2X292ZXJzY2FuX3Byb3BlcnR5KQo+ID4gKyAgICAg ICAgICAgICAgIGdvdG8gbm9tZW07Cj4gPiArCj4gPiArICAgICAgIGRldi0+bW9kZV9jb25maWcu dHZfc2F0dXJhdGlvbl9wcm9wZXJ0eSA9Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5 X2NyZWF0ZV9yYW5nZShkZXYsIDAsICJzYXR1cmF0aW9uIiwgMCwgMTAwKTsKPiA+ICsgICAgICAg aWYgKCFkZXYtPm1vZGVfY29uZmlnLnR2X3NhdHVyYXRpb25fcHJvcGVydHkpCj4gPiArICAgICAg ICAgICAgICAgZ290byBub21lbTsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50 dl9odWVfcHJvcGVydHkgPQo+ID4gKyAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVf cmFuZ2UoZGV2LCAwLCAiaHVlIiwgMCwgMTAwKTsKPiA+ICsgICAgICAgaWYgKCFkZXYtPm1vZGVf Y29uZmlnLnR2X2h1ZV9wcm9wZXJ0eSkKPiA+ICsgICAgICAgICAgICAgICBnb3RvIG5vbWVtOwo+ ID4gKwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICtub21lbToKPiA+ICsgICAgICAgcmV0dXJu IC1FTk9NRU07Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY3JlYXRlX3R2X3By b3BlcnRpZXMpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5n X21vZGVfcHJvcGVydHkgLSBjcmVhdGUgc2NhbGluZyBtb2RlIHByb3BlcnR5Cj4gPiArICogQGRl djogRFJNIGRldmljZQo+ID4gKyAqCj4gPiArICogQ2FsbGVkIGJ5IGEgZHJpdmVyIHRoZSBmaXJz dCB0aW1lIGl0J3MgbmVlZGVkLCBtdXN0IGJlIGF0dGFjaGVkIHRvIGRlc2lyZWQKPiA+ICsgKiBj b25uZWN0b3JzLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2Rl X3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1 Y3QgZHJtX3Byb3BlcnR5ICpzY2FsaW5nX21vZGU7Cj4gPiArCj4gPiArICAgICAgIGlmIChkZXYt Pm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSkKPiA+ICsgICAgICAgICAgICAgICBy ZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgICAgc2NhbGluZ19tb2RlID0KPiA+ICsgICAgICAgICAg ICAgICBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLCAic2NhbGluZyBtb2RlIiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX3NjYWxpbmdfbW9kZV9lbnVtX2xp c3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGRy bV9zY2FsaW5nX21vZGVfZW51bV9saXN0KSk7Cj4gPiArCj4gPiArICAgICAgIGRldi0+bW9kZV9j b25maWcuc2NhbGluZ19tb2RlX3Byb3BlcnR5ID0gc2NhbGluZ19tb2RlOwo+ID4gKwo+ID4gKyAg ICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcmVhdGVf c2NhbGluZ19tb2RlX3Byb3BlcnR5KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fbW9kZV9j cmVhdGVfYXNwZWN0X3JhdGlvX3Byb3BlcnR5IC0gY3JlYXRlIGFzcGVjdCByYXRpbyBwcm9wZXJ0 eQo+ID4gKyAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIENhbGxlZCBieSBhIGRy aXZlciB0aGUgZmlyc3QgdGltZSBpdCdzIG5lZWRlZCwgbXVzdCBiZSBhdHRhY2hlZCB0byBkZXNp cmVkCj4gPiArICogY29ubmVjdG9ycy4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICog WmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4g K2ludCBkcm1fbW9kZV9jcmVhdGVfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gPiArewo+ID4gKyAgICAgICBpZiAoZGV2LT5tb2RlX2NvbmZpZy5hc3BlY3Rf cmF0aW9fcHJvcGVydHkpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArCj4gPiAr ICAgICAgIGRldi0+bW9kZV9jb25maWcuYXNwZWN0X3JhdGlvX3Byb3BlcnR5ID0KPiA+ICsgICAg ICAgICAgICAgICBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLCAiYXNwZWN0IHJhdGlv IiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2FzcGVjdF9yYXRpb19l bnVtX2xpc3QsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUo ZHJtX2FzcGVjdF9yYXRpb19lbnVtX2xpc3QpKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGRldi0+ bW9kZV9jb25maWcuYXNwZWN0X3JhdGlvX3Byb3BlcnR5ID09IE5VTEwpCj4gPiArICAgICAgICAg ICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArICAgICAgIHJldHVybiAwOwo+ID4gK30K PiA+ICtFWFBPUlRfU1lNQk9MKGRybV9tb2RlX2NyZWF0ZV9hc3BlY3RfcmF0aW9fcHJvcGVydHkp Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9tb2RlX2NyZWF0ZV9zdWdnZXN0ZWRfb2Zmc2V0 X3Byb3BlcnRpZXMgLSBjcmVhdGUgc3VnZ2VzdHMgb2Zmc2V0IHByb3BlcnRpZXMKPiA+ICsgKiBA ZGV2OiBEUk0gZGV2aWNlCj4gPiArICoKPiA+ICsgKiBDcmVhdGUgdGhlIHRoZSBzdWdnZXN0ZWQg eC95IG9mZnNldCBwcm9wZXJ0eSBmb3IgY29ubmVjdG9ycy4KPiA+ICsgKi8KPiA+ICtpbnQgZHJt X21vZGVfY3JlYXRlX3N1Z2dlc3RlZF9vZmZzZXRfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+ID4gK3sKPiA+ICsgICAgICAgaWYgKGRldi0+bW9kZV9jb25maWcuc3VnZ2VzdGVk X3hfcHJvcGVydHkgJiYgZGV2LT5tb2RlX2NvbmZpZy5zdWdnZXN0ZWRfeV9wcm9wZXJ0eSkKPiA+ ICsgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2Nv bmZpZy5zdWdnZXN0ZWRfeF9wcm9wZXJ0eSA9Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3Bl cnR5X2NyZWF0ZV9yYW5nZShkZXYsIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAic3VnZ2VzdGVk IFgiLCAwLCAweGZmZmZmZmZmKTsKPiA+ICsKPiA+ICsgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5z dWdnZXN0ZWRfeV9wcm9wZXJ0eSA9Cj4gPiArICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2Ny ZWF0ZV9yYW5nZShkZXYsIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAic3VnZ2VzdGVkIFkiLCAw LCAweGZmZmZmZmZmKTsKPiA+ICsKPiA+ICsgICAgICAgaWYgKGRldi0+bW9kZV9jb25maWcuc3Vn Z2VzdGVkX3hfcHJvcGVydHkgPT0gTlVMTCB8fAo+ID4gKyAgICAgICAgICAgZGV2LT5tb2RlX2Nv bmZpZy5zdWdnZXN0ZWRfeV9wcm9wZXJ0eSA9PSBOVUxMKQo+ID4gKyAgICAgICAgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+ID4gKyAgICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTChkcm1fbW9kZV9jcmVhdGVfc3VnZ2VzdGVkX29mZnNldF9wcm9wZXJ0aWVzKTsKPiA+ICsK PiA+ICsvKioKPiA+ICsgKiBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3BhdGhfcHJvcGVydHkgLSBz ZXQgdGlsZSBwcm9wZXJ0eSBvbiBjb25uZWN0b3IKPiA+ICsgKiBAY29ubmVjdG9yOiBjb25uZWN0 b3IgdG8gc2V0IHByb3BlcnR5IG9uLgo+ID4gKyAqIEBwYXRoOiBwYXRoIHRvIHVzZSBmb3IgcHJv cGVydHk7IG11c3Qgbm90IGJlIE5VTEwuCj4gPiArICoKPiA+ICsgKiBUaGlzIGNyZWF0ZXMgYSBw cm9wZXJ0eSB0byBleHBvc2UgdG8gdXNlcnNwYWNlIHRvIHNwZWNpZnkgYQo+ID4gKyAqIGNvbm5l Y3RvciBwYXRoLiBUaGlzIGlzIG1haW5seSB1c2VkIGZvciBEaXNwbGF5UG9ydCBNU1Qgd2hlcmUK PiA+ICsgKiBjb25uZWN0b3JzIGhhdmUgYSB0b3BvbG9neSBhbmQgd2Ugd2FudCB0byBhbGxvdyB1 c2Vyc3BhY2UgdG8gZ2l2ZQo+ID4gKyAqIHRoZW0gbW9yZSBtZWFuaW5nZnVsIG5hbWVzLgo+ID4g KyAqCj4gPiArICogUmV0dXJuczoKPiA+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVy cm5vIG9uIGZhaWx1cmUuCj4gPiArICovCj4gPiAraW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRf cGF0aF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoKQo+ID4g K3sKPiA+ICsgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ ID4gKyAgICAgICBpbnQgcmV0Owo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkcm1fcHJvcGVydHlf cmVwbGFjZV9nbG9iYWxfYmxvYihkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZjb25uZWN0b3ItPnBhdGhfYmxvYl9wdHIsCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihwYXRoKSArIDEs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgs Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25u ZWN0b3ItPmJhc2UsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldi0+bW9kZV9jb25maWcucGF0aF9wcm9wZXJ0eSk7Cj4gPiArICAgICAgIHJldHVy biByZXQ7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY29ubmVjdG9yX3NldF9w YXRoX3Byb3BlcnR5KTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBkcm1fbW9kZV9jb25uZWN0b3Jf c2V0X3RpbGVfcHJvcGVydHkgLSBzZXQgdGlsZSBwcm9wZXJ0eSBvbiBjb25uZWN0b3IKPiA+ICsg KiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gc2V0IHByb3BlcnR5IG9uLgo+ID4gKyAqCj4gPiAr ICogVGhpcyBsb29rcyB1cCB0aGUgdGlsZSBpbmZvcm1hdGlvbiBmb3IgYSBjb25uZWN0b3IsIGFu ZCBjcmVhdGVzIGEKPiA+ICsgKiBwcm9wZXJ0eSBmb3IgdXNlcnNwYWNlIHRvIHBhcnNlIGlmIGl0 IGV4aXN0cy4gVGhlIHByb3BlcnR5IGlzIG9mCj4gPiArICogdGhlIGZvcm0gb2YgOCBpbnRlZ2Vy cyB1c2luZyAnOicgYXMgYSBzZXBhcmF0b3IuCj4gPiArICoKPiA+ICsgKiBSZXR1cm5zOgo+ID4g KyAqIFplcm8gb24gc3VjY2VzcywgZXJybm8gb24gZmFpbHVyZS4KPiA+ICsgKi8KPiA+ICtpbnQg ZHJtX21vZGVfY29ubmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y29ubmVjdG9yLT5kZXY7Cj4gPiArICAgICAgIGNoYXIgdGlsZVsyNTZdOwo+ID4gKyAgICAgICBp bnQgcmV0Owo+ID4gKwo+ID4gKyAgICAgICBpZiAoIWNvbm5lY3Rvci0+aGFzX3RpbGUpIHsKPiA+ ICsgICAgICAgICAgICAgICByZXQgID0gZHJtX3Byb3BlcnR5X3JlcGxhY2VfZ2xvYmFsX2Jsb2Io ZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmY29ubmVjdG9yLT50aWxlX2Jsb2JfcHRyLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29u bmVjdG9yLT5iYXNlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXYtPm1vZGVfY29uZmlnLnRpbGVfcHJvcGVydHkpOwo+ID4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICsgICAgICAg c25wcmludGYodGlsZSwgMjU2LCAiJWQ6JWQ6JWQ6JWQ6JWQ6JWQ6JWQ6JWQiLAo+ID4gKyAgICAg ICAgICAgICAgICBjb25uZWN0b3ItPnRpbGVfZ3JvdXAtPmlkLCBjb25uZWN0b3ItPnRpbGVfaXNf c2luZ2xlX21vbml0b3IsCj4gPiArICAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+bnVtX2hfdGls ZSwgY29ubmVjdG9yLT5udW1fdl90aWxlLAo+ID4gKyAgICAgICAgICAgICAgICBjb25uZWN0b3It PnRpbGVfaF9sb2MsIGNvbm5lY3Rvci0+dGlsZV92X2xvYywKPiA+ICsgICAgICAgICAgICAgICAg Y29ubmVjdG9yLT50aWxlX2hfc2l6ZSwgY29ubmVjdG9yLT50aWxlX3Zfc2l6ZSk7Cj4gPiArCj4g PiArICAgICAgIHJldCA9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2dsb2JhbF9ibG9iKGRldiwKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm5lY3Rv ci0+dGlsZV9ibG9iX3B0ciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RybGVuKHRpbGUpICsgMSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm5lY3Rvci0+YmFzZSwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50aWxl X3Byb3BlcnR5KTsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArRVhQT1JUX1NZ TUJPTChkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3RpbGVfcHJvcGVydHkpOwo+ID4gKwo+ID4gKy8q Kgo+ID4gKyAqIGRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSAtIHVwZGF0 ZSB0aGUgZWRpZCBwcm9wZXJ0eSBvZiBhIGNvbm5lY3Rvcgo+ID4gKyAqIEBjb25uZWN0b3I6IGRy bSBjb25uZWN0b3IKPiA+ICsgKiBAZWRpZDogbmV3IHZhbHVlIG9mIHRoZSBlZGlkIHByb3BlcnR5 Cj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYmxvYiBtb2Rlc2V0 IG9iamVjdCBhbmQgYXNzaWducyBpdHMgaWQgdG8gdGhlCj4gPiArICogY29ubmVjdG9yJ3MgZWRp ZCBwcm9wZXJ0eS4KPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6Cj4gPiArICogWmVybyBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ID4gKyAqLwo+ID4gK2ludCBkcm1fbW9k ZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGVkaWQgKmVkaWQpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gPiArICAgICAgIHNpemVfdCBzaXplID0gMDsK PiA+ICsgICAgICAgaW50IHJldDsKPiA+ICsKPiA+ICsgICAgICAgLyogaWdub3JlIHJlcXVlc3Rz IHRvIHNldCBlZGlkIHdoZW4gb3ZlcnJpZGRlbiAqLwo+ID4gKyAgICAgICBpZiAoY29ubmVjdG9y LT5vdmVycmlkZV9lZGlkKQo+ID4gKyAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4g KyAgICAgICBpZiAoZWRpZCkKPiA+ICsgICAgICAgICAgICAgICBzaXplID0gRURJRF9MRU5HVEgg KiAoMSArIGVkaWQtPmV4dGVuc2lvbnMpOwo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkcm1fcHJv cGVydHlfcmVwbGFjZV9nbG9iYWxfYmxvYihkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0b3ItPmVkaWRfYmxvYl9wdHIsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaWQsCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0b3It PmJhc2UsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRldi0+bW9kZV9jb25maWcuZWRpZF9wcm9wZXJ0eSk7Cj4gPiArICAgICAgIHJldHVybiByZXQ7 Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlk X3Byb3BlcnR5KTsKPiA+ICsKPiA+ICtpbnQgZHJtX21vZGVfY29ubmVjdG9yX3NldF9vYmpfcHJv cChzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlKQo+ID4gK3sKPiA+ICsg ICAgICAgaW50IHJldCA9IC1FSU5WQUw7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IgPSBvYmpfdG9fY29ubmVjdG9yKG9iaik7Cj4gPiArCj4gPiArICAgICAgIC8q IERvIERQTVMgb3Vyc2VsdmVzICovCj4gPiArICAgICAgIGlmIChwcm9wZXJ0eSA9PSBjb25uZWN0 b3ItPmRldi0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eSkgewo+ID4gKyAgICAgICAgICAgICAg IHJldCA9ICgqY29ubmVjdG9yLT5mdW5jcy0+ZHBtcykoY29ubmVjdG9yLCAoaW50KXZhbHVlKTsK PiA+ICsgICAgICAgfSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5zZXRfcHJvcGVydHkpCj4g PiArICAgICAgICAgICAgICAgcmV0ID0gY29ubmVjdG9yLT5mdW5jcy0+c2V0X3Byb3BlcnR5KGNv bm5lY3RvciwgcHJvcGVydHksIHZhbHVlKTsKPiAKPiBDYW4geW91IGFkZCBhIGJyYWNlIGhlcmUs IHRvbz8KPiAKPiA+ICsKPiA+ICsgICAgICAgLyogc3RvcmUgdGhlIHByb3BlcnR5IHZhbHVlIGlm IHN1Y2Nlc3NmdWwgKi8KPiA+ICsgICAgICAgaWYgKCFyZXQpCj4gPiArICAgICAgICAgICAgICAg ZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoJmNvbm5lY3Rvci0+YmFzZSwgcHJvcGVydHks IHZhbHVlKTsKPiA+ICsgICAgICAgcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAraW50IGRy bV9tb2RlX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRl diwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEs IHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ID4gK3sKPiA+ICsgICAgICAgc3RydWN0IGRy bV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgKmNvbm5fc2V0X3Byb3AgPSBkYXRhOwo+ID4g KyAgICAgICBzdHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eSBvYmpfc2V0X3Byb3AgPSB7 Cj4gPiArICAgICAgICAgICAgICAgLnZhbHVlID0gY29ubl9zZXRfcHJvcC0+dmFsdWUsCj4gPiAr ICAgICAgICAgICAgICAgLnByb3BfaWQgPSBjb25uX3NldF9wcm9wLT5wcm9wX2lkLAo+ID4gKyAg ICAgICAgICAgICAgIC5vYmpfaWQgPSBjb25uX3NldF9wcm9wLT5jb25uZWN0b3JfaWQsCj4gPiAr ICAgICAgICAgICAgICAgLm9ial90eXBlID0gRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUgo+ID4g KyAgICAgICB9Owo+ID4gKwo+ID4gKyAgICAgICAvKiBJdCBkb2VzIGFsbCB0aGUgbG9ja2luZyBh bmQgY2hlY2tpbmcgd2UgbmVlZCAqLwo+ID4gKyAgICAgICByZXR1cm4gZHJtX21vZGVfb2JqX3Nl dF9wcm9wZXJ0eV9pb2N0bChkZXYsICZvYmpfc2V0X3Byb3AsIGZpbGVfcHJpdik7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2VuY29kZXIgKmRybV9jb25uZWN0b3JfZ2V0X2Vu Y29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ICt7Cj4gPiArICAgICAg IC8qIEZvciBhdG9taWMgZHJpdmVycyBvbmx5IHN0YXRlIG9iamVjdHMgYXJlIHN5bmNocm9ub3Vz bHkgdXBkYXRlZCBhbmQKPiA+ICsgICAgICAgICogcHJvdGVjdGVkIGJ5IG1vZGVzZXQgbG9ja3Ms IHNvIGNoZWNrIHRob3NlIGZpcnN0LiAqLwo+ID4gKyAgICAgICBpZiAoY29ubmVjdG9yLT5zdGF0 ZSkKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gY29ubmVjdG9yLT5zdGF0ZS0+YmVzdF9lbmNv ZGVyOwo+ID4gKyAgICAgICByZXR1cm4gY29ubmVjdG9yLT5lbmNvZGVyOwo+ID4gK30KPiA+ICsK PiA+ICtzdGF0aWMgYm9vbCBkcm1fbW9kZV9leHBvc2VfdG9fdXNlcnNwYWNlKGNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKPiA+ICt7Cj4g PiArICAgICAgIC8qCj4gPiArICAgICAgICAqIElmIHVzZXItc3BhY2UgaGFzbid0IGNvbmZpZ3Vy ZWQgdGhlIGRyaXZlciB0byBleHBvc2UgdGhlIHN0ZXJlbyAzRAo+ID4gKyAgICAgICAgKiBtb2Rl cywgZG9uJ3QgZXhwb3NlIHRoZW0uCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBpZiAoIWZp bGVfcHJpdi0+c3RlcmVvX2FsbG93ZWQgJiYgZHJtX21vZGVfaXNfc3RlcmVvKG1vZGUpKQo+ID4g KyAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+ICsKPiA+ICsgICAgICAgcmV0dXJuIHRy dWU7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCBkcm1fbW9kZV9nZXRjb25uZWN0b3Ioc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCj4gPiArewo+ID4gKyAgICAgICBzdHJ1Y3QgZHJt X21vZGVfZ2V0X2Nvbm5lY3RvciAqb3V0X3Jlc3AgPSBkYXRhOwo+ID4gKyAgICAgICBzdHJ1Y3Qg ZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIg KmVuY29kZXI7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ID4g KyAgICAgICBpbnQgbW9kZV9jb3VudCA9IDA7Cj4gPiArICAgICAgIGludCBlbmNvZGVyc19jb3Vu dCA9IDA7Cj4gPiArICAgICAgIGludCByZXQgPSAwOwo+ID4gKyAgICAgICBpbnQgY29waWVkID0g MDsKPiA+ICsgICAgICAgaW50IGk7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m byB1X21vZGU7Cj4gPiArICAgICAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBfX3VzZXIgKm1v ZGVfcHRyOwo+ID4gKyAgICAgICB1aW50MzJfdCBfX3VzZXIgKmVuY29kZXJfcHRyOwo+ID4gKwo+ ID4gKyAgICAgICBpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNF VCkpCj4gPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArICAgICAg IG1lbXNldCgmdV9tb2RlLCAwLCBzaXplb2Yoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvKSk7Cj4g PiArCj4gPiArICAgICAgIG11dGV4X2xvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ID4g Kwo+ID4gKyAgICAgICBjb25uZWN0b3IgPSBkcm1fY29ubmVjdG9yX2xvb2t1cChkZXYsIG91dF9y ZXNwLT5jb25uZWN0b3JfaWQpOwo+ID4gKyAgICAgICBpZiAoIWNvbm5lY3Rvcikgewo+ID4gKyAg ICAgICAgICAgICAgIHJldCA9IC1FTk9FTlQ7Cj4gPiArICAgICAgICAgICAgICAgZ290byBvdXRf dW5sb2NrOwo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBE Uk1fQ09OTkVDVE9SX01BWF9FTkNPREVSOyBpKyspCj4gPiArICAgICAgICAgICAgICAgaWYgKGNv bm5lY3Rvci0+ZW5jb2Rlcl9pZHNbaV0gIT0gMCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg IGVuY29kZXJzX2NvdW50Kys7Cj4gPiArCj4gPiArICAgICAgIGlmIChvdXRfcmVzcC0+Y291bnRf bW9kZXMgPT0gMCkgewo+ID4gKyAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+ZnVuY3MtPmZpbGxf bW9kZXMoY29ubmVjdG9yLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lkdGgsCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm1vZGVfY29uZmlnLm1heF9oZWlnaHQp Owo+ID4gKyAgICAgICB9Cj4gPiArCj4gPiArICAgICAgIC8qIGRlbGF5ZWQgc28gd2UgZ2V0IG1v ZGVzIHJlZ2FyZGxlc3Mgb2YgcHJlLWZpbGxfbW9kZXMgc3RhdGUgKi8KPiA+ICsgICAgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkKPiA+ICsgICAg ICAgICAgICAgICBpZiAoZHJtX21vZGVfZXhwb3NlX3RvX3VzZXJzcGFjZShtb2RlLCBmaWxlX3By aXYpKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jb3VudCsrOwo+ID4gKwo+ID4g KyAgICAgICBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkID0gY29ubmVjdG9yLT5iYXNlLmlkOwo+ID4g KyAgICAgICBvdXRfcmVzcC0+Y29ubmVjdG9yX3R5cGUgPSBjb25uZWN0b3ItPmNvbm5lY3Rvcl90 eXBlOwo+ID4gKyAgICAgICBvdXRfcmVzcC0+Y29ubmVjdG9yX3R5cGVfaWQgPSBjb25uZWN0b3It PmNvbm5lY3Rvcl90eXBlX2lkOwo+ID4gKyAgICAgICBvdXRfcmVzcC0+bW1fd2lkdGggPSBjb25u ZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0aF9tbTsKPiA+ICsgICAgICAgb3V0X3Jlc3AtPm1tX2hl aWdodCA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbTsKPiA+ICsgICAgICAgb3V0 X3Jlc3AtPnN1YnBpeGVsID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uc3VicGl4ZWxfb3JkZXI7 Cj4gPiArICAgICAgIG91dF9yZXNwLT5jb25uZWN0aW9uID0gY29ubmVjdG9yLT5zdGF0dXM7Cj4g PiArCj4gPiArICAgICAgIGRybV9tb2Rlc2V0X2xvY2soJmRldi0+bW9kZV9jb25maWcuY29ubmVj dGlvbl9tdXRleCwgTlVMTCk7Cj4gPiArICAgICAgIGVuY29kZXIgPSBkcm1fY29ubmVjdG9yX2dl dF9lbmNvZGVyKGNvbm5lY3Rvcik7Cj4gPiArICAgICAgIGlmIChlbmNvZGVyKQo+ID4gKyAgICAg ICAgICAgICAgIG91dF9yZXNwLT5lbmNvZGVyX2lkID0gZW5jb2Rlci0+YmFzZS5pZDsKPiA+ICsg ICAgICAgZWxzZQo+ID4gKyAgICAgICAgICAgICAgIG91dF9yZXNwLT5lbmNvZGVyX2lkID0gMDsK PiA+ICsKPiA+ICsgICAgICAgLyoKPiA+ICsgICAgICAgICogVGhpcyBpb2N0bCBpcyBjYWxsZWQg dHdpY2UsIG9uY2UgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIHNwYWNlIGlzCj4gPiArICAgICAgICAq IG5lZWRlZCwgYW5kIHRoZSAybmQgdGltZSB0byBmaWxsIGl0Lgo+ID4gKyAgICAgICAgKi8KPiA+ ICsgICAgICAgaWYgKChvdXRfcmVzcC0+Y291bnRfbW9kZXMgPj0gbW9kZV9jb3VudCkgJiYgbW9k ZV9jb3VudCkgewo+ID4gKyAgICAgICAgICAgICAgIGNvcGllZCA9IDA7Cj4gPiArICAgICAgICAg ICAgICAgbW9kZV9wdHIgPSAoc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIF9fdXNlciAqKSh1bnNp Z25lZCBsb25nKW91dF9yZXNwLT5tb2Rlc19wdHI7Cj4gPiArICAgICAgICAgICAgICAgbGlzdF9m b3JfZWFjaF9lbnRyeShtb2RlLCAmY29ubmVjdG9yLT5tb2RlcywgaGVhZCkgewo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCFkcm1fbW9kZV9leHBvc2VfdG9fdXNlcnNwYWNlKG1vZGUs IGZpbGVfcHJpdikpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl Owo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgZHJtX21vZGVfY29udmVydF90b191 bW9kZSgmdV9tb2RlLCBtb2RlKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5 X3RvX3VzZXIobW9kZV9wdHIgKyBjb3BpZWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ1X21vZGUsIHNpemVvZih1X21vZGUpKSkgewo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOwo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIH0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZCsrOwo+ID4gKyAgICAgICAgICAgICAg IH0KPiA+ICsgICAgICAgfQo+ID4gKyAgICAgICBvdXRfcmVzcC0+Y291bnRfbW9kZXMgPSBtb2Rl X2NvdW50Owo+ID4gKwo+ID4gKyAgICAgICByZXQgPSBkcm1fbW9kZV9vYmplY3RfZ2V0X3Byb3Bl cnRpZXMoJmNvbm5lY3Rvci0+YmFzZSwgZmlsZV9wcml2LT5hdG9taWMsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKG91dF9yZXNw LT5wcm9wc19wdHIpLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90IF9fdXNl ciAqKSh1bnNpZ25lZCBsb25nKShvdXRfcmVzcC0+cHJvcF92YWx1ZXNfcHRyKSwKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICZvdXRfcmVzcC0+Y291bnRfcHJvcHMpOwo+ID4gKyAgICAgICBp ZiAocmV0KQo+ID4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgICBp ZiAoKG91dF9yZXNwLT5jb3VudF9lbmNvZGVycyA+PSBlbmNvZGVyc19jb3VudCkgJiYgZW5jb2Rl cnNfY291bnQpIHsKPiA+ICsgICAgICAgICAgICAgICBjb3BpZWQgPSAwOwo+ID4gKyAgICAgICAg ICAgICAgIGVuY29kZXJfcHRyID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKShv dXRfcmVzcC0+ZW5jb2RlcnNfcHRyKTsKPiA+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgICAg ICAgICAgICBpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSAhPSAwKSB7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRfdXNlcihjb25uZWN0b3ItPmVuY29kZXJf aWRzW2ldLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZW5jb2Rlcl9wdHIgKyBjb3BpZWQpKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQrKzsKPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgICB9Cj4gPiArICAgICAg IH0KPiA+ICsgICAgICAgb3V0X3Jlc3AtPmNvdW50X2VuY29kZXJzID0gZW5jb2RlcnNfY291bnQ7 Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAgICBkcm1fbW9kZXNldF91bmxvY2soJmRldi0+bW9k ZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gPiArCj4gPiArICAgICAgIGRybV9jb25uZWN0 b3JfdW5yZWZlcmVuY2UoY29ubmVjdG9yKTsKPiA+ICtvdXRfdW5sb2NrOgo+ID4gKyAgICAgICBt dXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ID4gKwo+ID4gKyAgICAgICBy ZXR1cm4gcmV0Owo+ID4gK30KPiA+ICsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZHJtX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCj4gPiBpbmRleCAxNjVhMGY5 MzA4ZGEuLjY5YjU2MjYxNDFmNSAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1f Y3J0Yy5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+ID4gQEAgLTQ1LDEy MyArNDUsMTUgQEAKPiA+ICAjaW5jbHVkZSAiZHJtX2NydGNfaW50ZXJuYWwuaCIKPiA+ICAjaW5j bHVkZSAiZHJtX2ludGVybmFsLmgiCj4gPgo+ID4gLS8qIEF2b2lkIGJvaWxlcnBsYXRlLiAgSSdt IHRpcmVkIG9mIHR5cGluZy4gKi8KPiA+IC0jZGVmaW5lIERSTV9FTlVNX05BTUVfRk4oZm5uYW1l LCBsaXN0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gPiAtICAgICAgIGNvbnN0IGNoYXIg KmZubmFtZShpbnQgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gLSAgICAg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKPiA+IC0gICAgICAgICAgICAgICBpbnQgaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCj4gPiAtICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZ X1NJWkUobGlzdCk7IGkrKykgeyAgICAgICAgXAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg aWYgKGxpc3RbaV0udHlwZSA9PSB2YWwpICAgICAgICAgICAgICAgIFwKPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3RbaV0ubmFtZTsgICAgICAgICAgICBcCj4g PiAtICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gLSAgICAgICAgICAgICAgIHJldHVybiAiKHVua25vd24pIjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiA+IC0gICAgICAgfQo+ID4gLQo+ID4gIC8qCj4gPiAg ICogR2xvYmFsIHByb3BlcnRpZXMKPiA+ICAgKi8KPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGRy bV9wcm9wX2VudW1fbGlzdCBkcm1fZHBtc19lbnVtX2xpc3RbXSA9IHsKPiA+IC0gICAgICAgeyBE Uk1fTU9ERV9EUE1TX09OLCAiT24iIH0sCj4gPiAtICAgICAgIHsgRFJNX01PREVfRFBNU19TVEFO REJZLCAiU3RhbmRieSIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9ERV9EUE1TX1NVU1BFTkQsICJT dXNwZW5kIiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0RQTVNfT0ZGLCAiT2ZmIiB9Cj4gPiAt fTsKPiA+IC0KPiA+IC1EUk1fRU5VTV9OQU1FX0ZOKGRybV9nZXRfZHBtc19uYW1lLCBkcm1fZHBt c19lbnVtX2xpc3QpCj4gPiAtCj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVt X2xpc3QgZHJtX3BsYW5lX3R5cGVfZW51bV9saXN0W10gPSB7Cj4gPiAgICAgICAgIHsgRFJNX1BM QU5FX1RZUEVfT1ZFUkxBWSwgIk92ZXJsYXkiIH0sCj4gPiAgICAgICAgIHsgRFJNX1BMQU5FX1RZ UEVfUFJJTUFSWSwgIlByaW1hcnkiIH0sCj4gPiAgICAgICAgIHsgRFJNX1BMQU5FX1RZUEVfQ1VS U09SLCAiQ3Vyc29yIiB9LAo+ID4gIH07Cj4gPgo+ID4gLS8qCj4gPiAtICogT3B0aW9uYWwgcHJv cGVydGllcwo+ID4gLSAqLwo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9s aXN0IGRybV9zY2FsaW5nX21vZGVfZW51bV9saXN0W10gPSB7Cj4gPiAtICAgICAgIHsgRFJNX01P REVfU0NBTEVfTk9ORSwgIk5vbmUiIH0sCj4gPiAtICAgICAgIHsgRFJNX01PREVfU0NBTEVfRlVM TFNDUkVFTiwgIkZ1bGwiIH0sCj4gPiAtICAgICAgIHsgRFJNX01PREVfU0NBTEVfQ0VOVEVSLCAi Q2VudGVyIiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX1NDQUxFX0FTUEVDVCwgIkZ1bGwgYXNw ZWN0IiB9LAo+ID4gLX07Cj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9l bnVtX2xpc3QgZHJtX2FzcGVjdF9yYXRpb19lbnVtX2xpc3RbXSA9IHsKPiA+IC0gICAgICAgeyBE Uk1fTU9ERV9QSUNUVVJFX0FTUEVDVF9OT05FLCAiQXV0b21hdGljIiB9LAo+ID4gLSAgICAgICB7 IERSTV9NT0RFX1BJQ1RVUkVfQVNQRUNUXzRfMywgIjQ6MyIgfSwKPiA+IC0gICAgICAgeyBEUk1f TU9ERV9QSUNUVVJFX0FTUEVDVF8xNl85LCAiMTY6OSIgfSwKPiA+IC19Owo+ID4gLQo+ID4gLS8q Cj4gPiAtICogTm9uLWdsb2JhbCBwcm9wZXJ0aWVzLCBidXQgInJlcXVpcmVkIiBmb3IgY2VydGFp biBjb25uZWN0b3JzLgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3Bf ZW51bV9saXN0IGRybV9kdmlfaV9zZWxlY3RfZW51bV9saXN0W10gPSB7Cj4gPiAtICAgICAgIHsg RFJNX01PREVfU1VCQ09OTkVDVE9SX0F1dG9tYXRpYywgIkF1dG9tYXRpYyIgfSwgLyogRFZJLUkg YW5kIFRWLW91dCAqLwo+ID4gLSAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9EVklELCAg ICAgICJEVkktRCIgICAgIH0sIC8qIERWSS1JICAqLwo+ID4gLSAgICAgICB7IERSTV9NT0RFX1NV QkNPTk5FQ1RPUl9EVklBLCAgICAgICJEVkktQSIgICAgIH0sIC8qIERWSS1JICAqLwo+ID4gLX07 Cj4gPiAtCj4gPiAtRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0X2R2aV9pX3NlbGVjdF9uYW1lLCBk cm1fZHZpX2lfc2VsZWN0X2VudW1fbGlzdCkKPiA+IC0KPiA+IC1zdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wcm9wX2VudW1fbGlzdCBkcm1fZHZpX2lfc3ViY29ubmVjdG9yX2VudW1fbGlzdFtdID0g ewo+ID4gLSAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Vbmtub3duLCAgICJVbmtub3du IiAgIH0sIC8qIERWSS1JIGFuZCBUVi1vdXQgKi8KPiA+IC0gICAgICAgeyBEUk1fTU9ERV9TVUJD T05ORUNUT1JfRFZJRCwgICAgICAiRFZJLUQiICAgICB9LCAvKiBEVkktSSAgKi8KPiA+IC0gICAg ICAgeyBEUk1fTU9ERV9TVUJDT05ORUNUT1JfRFZJQSwgICAgICAiRFZJLUEiICAgICB9LCAvKiBE VkktSSAgKi8KPiA+IC19Owo+ID4gLQo+ID4gLURSTV9FTlVNX05BTUVfRk4oZHJtX2dldF9kdmlf aV9zdWJjb25uZWN0b3JfbmFtZSwKPiA+IC0gICAgICAgICAgICAgICAgZHJtX2R2aV9pX3N1YmNv bm5lY3Rvcl9lbnVtX2xpc3QpCj4gPiAtCj4gPiAtc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJv cF9lbnVtX2xpc3QgZHJtX3R2X3NlbGVjdF9lbnVtX2xpc3RbXSA9IHsKPiA+IC0gICAgICAgeyBE Uk1fTU9ERV9TVUJDT05ORUNUT1JfQXV0b21hdGljLCAiQXV0b21hdGljIiB9LCAvKiBEVkktSSBh bmQgVFYtb3V0ICovCj4gPiAtICAgICAgIHsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvc2l0 ZSwgIkNvbXBvc2l0ZSIgfSwgLyogVFYtb3V0ICovCj4gPiAtICAgICAgIHsgRFJNX01PREVfU1VC Q09OTkVDVE9SX1NWSURFTywgICAgIlNWSURFTyIgICAgfSwgLyogVFYtb3V0ICovCj4gPiAtICAg ICAgIHsgRFJNX01PREVfU1VCQ09OTkVDVE9SX0NvbXBvbmVudCwgIkNvbXBvbmVudCIgfSwgLyog VFYtb3V0ICovCj4gPiAtICAgICAgIHsgRFJNX01PREVfU1VCQ09OTkVDVE9SX1NDQVJULCAgICAg IlNDQVJUIiAgICAgfSwgLyogVFYtb3V0ICovCj4gPiAtfTsKPiA+IC0KPiA+IC1EUk1fRU5VTV9O QU1FX0ZOKGRybV9nZXRfdHZfc2VsZWN0X25hbWUsIGRybV90dl9zZWxlY3RfZW51bV9saXN0KQo+ ID4gLQo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Byb3BfZW51bV9saXN0IGRybV90dl9z dWJjb25uZWN0b3JfZW51bV9saXN0W10gPSB7Cj4gPiAtICAgICAgIHsgRFJNX01PREVfU1VCQ09O TkVDVE9SX1Vua25vd24sICAgIlVua25vd24iICAgfSwgLyogRFZJLUkgYW5kIFRWLW91dCAqLwo+ ID4gLSAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9Db21wb3NpdGUsICJDb21wb3NpdGUi IH0sIC8qIFRWLW91dCAqLwo+ID4gLSAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TVklE RU8sICAgICJTVklERU8iICAgIH0sIC8qIFRWLW91dCAqLwo+ID4gLSAgICAgICB7IERSTV9NT0RF X1NVQkNPTk5FQ1RPUl9Db21wb25lbnQsICJDb21wb25lbnQiIH0sIC8qIFRWLW91dCAqLwo+ID4g LSAgICAgICB7IERSTV9NT0RFX1NVQkNPTk5FQ1RPUl9TQ0FSVCwgICAgICJTQ0FSVCIgICAgIH0s IC8qIFRWLW91dCAqLwo+ID4gLX07Cj4gPiAtCj4gPiAtRFJNX0VOVU1fTkFNRV9GTihkcm1fZ2V0 X3R2X3N1YmNvbm5lY3Rvcl9uYW1lLAo+ID4gLSAgICAgICAgICAgICAgICBkcm1fdHZfc3ViY29u bmVjdG9yX2VudW1fbGlzdCkKPiA+IC0KPiA+IC1zdHJ1Y3QgZHJtX2Nvbm5fcHJvcF9lbnVtX2xp c3Qgewo+ID4gLSAgICAgICBpbnQgdHlwZTsKPiA+IC0gICAgICAgY29uc3QgY2hhciAqbmFtZTsK PiA+IC0gICAgICAgc3RydWN0IGlkYSBpZGE7Cj4gPiAtfTsKPiA+IC0KPiA+IC0vKgo+ID4gLSAq IENvbm5lY3RvciBhbmQgZW5jb2RlciB0eXBlcy4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgc3RydWN0 IGRybV9jb25uX3Byb3BfZW51bV9saXN0IGRybV9jb25uZWN0b3JfZW51bV9saXN0W10gPSB7Cj4g PiAtICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24sICJVbmtub3duIiB9LAo+ID4g LSAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EsICJWR0EiIH0sCj4gPiAtICAgICAgIHsg RFJNX01PREVfQ09OTkVDVE9SX0RWSUksICJEVkktSSIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9E RV9DT05ORUNUT1JfRFZJRCwgIkRWSS1EIiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0NPTk5F Q1RPUl9EVklBLCAiRFZJLUEiIH0sCj4gPiAtICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX0Nv bXBvc2l0ZSwgIkNvbXBvc2l0ZSIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1Jf U1ZJREVPLCAiU1ZJREVPIiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRT LCAiTFZEUyIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9uZW50LCAi Q29tcG9uZW50IiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOLCAi RElOIiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCwgIkRQ IiB9LAo+ID4gLSAgICAgICB7IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQSwgIkhETUktQSIgfSwK PiA+IC0gICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUIsICJIRE1JLUIiIH0sCj4gPiAt ICAgICAgIHsgRFJNX01PREVfQ09OTkVDVE9SX1RWLCAiVFYiIH0sCj4gPiAtICAgICAgIHsgRFJN X01PREVfQ09OTkVDVE9SX2VEUCwgImVEUCIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9ERV9DT05O RUNUT1JfVklSVFVBTCwgIlZpcnR1YWwiIH0sCj4gPiAtICAgICAgIHsgRFJNX01PREVfQ09OTkVD VE9SX0RTSSwgIkRTSSIgfSwKPiA+IC0gICAgICAgeyBEUk1fTU9ERV9DT05ORUNUT1JfRFBJLCAi RFBJIiB9LAo+ID4gLX07Cj4gPiAtCj4gPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9l bnVtX2xpc3QgZHJtX2VuY29kZXJfZW51bV9saXN0W10gPSB7Cj4gPiAgICAgICAgIHsgRFJNX01P REVfRU5DT0RFUl9OT05FLCAiTm9uZSIgfSwKPiA+ICAgICAgICAgeyBEUk1fTU9ERV9FTkNPREVS X0RBQywgIkRBQyIgfSwKPiA+IEBAIC0xNzQsNjIgKzY2LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX2VuY29kZXJfZW51bV9saXN0W10gPSB7Cj4gPiAgICAg ICAgIHsgRFJNX01PREVfRU5DT0RFUl9EUEksICJEUEkiIH0sCj4gPiAgfTsKPiA+Cj4gPiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fcHJvcF9lbnVtX2xpc3QgZHJtX3N1YnBpeGVsX2VudW1fbGlz dFtdID0gewo+ID4gLSAgICAgICB7IFN1YlBpeGVsVW5rbm93biwgIlVua25vd24iIH0sCj4gPiAt ICAgICAgIHsgU3ViUGl4ZWxIb3Jpem9udGFsUkdCLCAiSG9yaXpvbnRhbCBSR0IiIH0sCj4gPiAt ICAgICAgIHsgU3ViUGl4ZWxIb3Jpem9udGFsQkdSLCAiSG9yaXpvbnRhbCBCR1IiIH0sCj4gPiAt ICAgICAgIHsgU3ViUGl4ZWxWZXJ0aWNhbFJHQiwgIlZlcnRpY2FsIFJHQiIgfSwKPiA+IC0gICAg ICAgeyBTdWJQaXhlbFZlcnRpY2FsQkdSLCAiVmVydGljYWwgQkdSIiB9LAo+ID4gLSAgICAgICB7 IFN1YlBpeGVsTm9uZSwgIk5vbmUiIH0sCj4gPiAtfTsKPiA+IC0KPiA+IC12b2lkIGRybV9jb25u ZWN0b3JfaWRhX2luaXQodm9pZCkKPiA+IC17Cj4gPiAtICAgICAgIGludCBpOwo+ID4gLQo+ID4g LSAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkcm1fY29ubmVjdG9yX2VudW1fbGlz dCk7IGkrKykKPiA+IC0gICAgICAgICAgICAgICBpZGFfaW5pdCgmZHJtX2Nvbm5lY3Rvcl9lbnVt X2xpc3RbaV0uaWRhKTsKPiA+IC19Cj4gPiAtCj4gPiAtdm9pZCBkcm1fY29ubmVjdG9yX2lkYV9k ZXN0cm95KHZvaWQpCj4gPiAtewo+ID4gLSAgICAgICBpbnQgaTsKPiA+IC0KPiA+IC0gICAgICAg Zm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZHJtX2Nvbm5lY3Rvcl9lbnVtX2xpc3QpOyBpKysp Cj4gPiAtICAgICAgICAgICAgICAgaWRhX2Rlc3Ryb3koJmRybV9jb25uZWN0b3JfZW51bV9saXN0 W2ldLmlkYSk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRybV9nZXRfY29ubmVjdG9y X3N0YXR1c19uYW1lIC0gcmV0dXJuIGEgc3RyaW5nIGZvciBjb25uZWN0b3Igc3RhdHVzCj4gPiAt ICogQHN0YXR1czogY29ubmVjdG9yIHN0YXR1cyB0byBjb21wdXRlIG5hbWUgb2YKPiA+IC0gKgo+ ID4gLSAqIEluIGNvbnRyYXN0IHRvIHRoZSBvdGhlciBkcm1fZ2V0XypfbmFtZSBmdW5jdGlvbnMg dGhpcyBvbmUgaGVyZSByZXR1cm5zIGEKPiA+IC0gKiBjb25zdCBwb2ludGVyIGFuZCBoZW5jZSBp cyB0aHJlYWRzYWZlLgo+ID4gLSAqLwo+ID4gLWNvbnN0IGNoYXIgKmRybV9nZXRfY29ubmVjdG9y X3N0YXR1c19uYW1lKGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKQo+ID4gLXsKPiA+ IC0gICAgICAgaWYgKHN0YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCkKPiA+IC0g ICAgICAgICAgICAgICByZXR1cm4gImNvbm5lY3RlZCI7Cj4gPiAtICAgICAgIGVsc2UgaWYgKHN0 YXR1cyA9PSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZCkKPiA+IC0gICAgICAgICAgICAg ICByZXR1cm4gImRpc2Nvbm5lY3RlZCI7Cj4gPiAtICAgICAgIGVsc2UKPiA+IC0gICAgICAgICAg ICAgICByZXR1cm4gInVua25vd24iOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9nZXRf Y29ubmVjdG9yX3N0YXR1c19uYW1lKTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fZ2V0X3N1 YnBpeGVsX29yZGVyX25hbWUgLSByZXR1cm4gYSBzdHJpbmcgZm9yIGEgZ2l2ZW4gc3VicGl4ZWwg ZW51bQo+ID4gLSAqIEBvcmRlcjogZW51bSBvZiBzdWJwaXhlbF9vcmRlcgo+ID4gLSAqCj4gPiAt ICogTm90ZSB5b3UgY291bGQgYWJ1c2UgdGhpcyBhbmQgcmV0dXJuIHNvbWV0aGluZyBvdXQgb2Yg Ym91bmRzLCBidXQgdGhhdAo+ID4gLSAqIHdvdWxkIGJlIGEgY2FsbGVyIGVycm9yLiAgTm8gdW5z Y3J1YmJlZCB1c2VyIGRhdGEgc2hvdWxkIG1ha2UgaXQgaGVyZS4KPiA+ICsvKgo+ID4gKyAqIE9w dGlvbmFsIHByb3BlcnRpZXMKPiA+ICAgKi8KPiA+IC1jb25zdCBjaGFyICpkcm1fZ2V0X3N1YnBp eGVsX29yZGVyX25hbWUoZW51bSBzdWJwaXhlbF9vcmRlciBvcmRlcikKPiA+IC17Cj4gPiAtICAg ICAgIHJldHVybiBkcm1fc3VicGl4ZWxfZW51bV9saXN0W29yZGVyXS5uYW1lOwo+ID4gLX0KPiA+ IC1FWFBPUlRfU1lNQk9MKGRybV9nZXRfc3VicGl4ZWxfb3JkZXJfbmFtZSk7Cj4gPiAtCj4gPiAg LyoKPiA+ICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBhc3NpZ24gYSBzbG90IGluIHRoZSBvYmpl Y3QgaWRyIGFuZCBvcHRpb25hbGx5Cj4gPiAgICogcmVnaXN0ZXIgdGhlIG9iamVjdCBpbnRvIHRo ZSBpZHIuCj4gPiBAQCAtNTUyLDIwICszOTEsNiBAQCB2b2lkIGRybV9jcnRjX2NsZWFudXAoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9jcnRjX2Ns ZWFudXApOwo+ID4KPiA+IC0vKgo+ID4gLSAqIGRybV9tb2RlX3JlbW92ZSAtIHJlbW92ZSBhbmQg ZnJlZSBhIG1vZGUKPiA+IC0gKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgbGlzdCB0byBtb2RpZnkK PiA+IC0gKiBAbW9kZTogbW9kZSB0byByZW1vdmUKPiA+IC0gKgo+ID4gLSAqIFJlbW92ZSBAbW9k ZSBmcm9tIEBjb25uZWN0b3IncyBtb2RlIGxpc3QsIHRoZW4gZnJlZSBpdC4KPiA+IC0gKi8KPiA+ IC1zdGF0aWMgdm9pZCBkcm1fbW9kZV9yZW1vdmUoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvciwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlf bW9kZSAqbW9kZSkKPiA+IC17Cj4gPiAtICAgICAgIGxpc3RfZGVsKCZtb2RlLT5oZWFkKTsKPiA+ IC0gICAgICAgZHJtX21vZGVfZGVzdHJveShjb25uZWN0b3ItPmRldiwgbW9kZSk7Cj4gPiAtfQo+ ID4gLQo+ID4gIC8qKgo+ID4gICAqIGRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3JtYXRzIC0g c2V0IHRoZSBzdXBwb3J0ZWQgYnVzIGZvcm1hdHMKPiA+ICAgKiBAaW5mbzogZGlzcGxheSBpbmZv IHRvIHN0b3JlIGJ1cyBmb3JtYXRzIGluCj4gPiBAQCAtNjAwLDMxMiArNDI1LDYgQEAgaW50IGRy bV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3JtYXRzKHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICpp bmZvLAo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19m b3JtYXRzKTsKPiA+Cj4gPiAtLyoqCj4gPiAtICogZHJtX2Nvbm5lY3Rvcl9nZXRfY21kbGluZV9t b2RlIC0gcmVhZHMgdGhlIHVzZXIncyBjbWRsaW5lIG1vZGUKPiA+IC0gKiBAY29ubmVjdG9yOiBj b25uZWN0b3IgdG8gcXV3ZXJ5Cj4gPiAtICoKPiA+IC0gKiBUaGUga2VybmVsIHN1cHBvcnRzIHBl ci1jb25uZWN0b3IgY29uZmlncmF0aW9uIG9mIGl0cyBjb25zb2xlcyB0aHJvdWdoCj4gPiAtICog dXNlIG9mIHRoZSB2aWRlbz0gcGFyYW1ldGVyLiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyB0aGF0IG9w dGlvbiBhbmQKPiA+IC0gKiBleHRyYWN0cyB0aGUgdXNlcidzIHNwZWNpZmllZCBtb2RlIChvciBl bmFibGUvZGlzYWJsZSBzdGF0dXMpIGZvciBhCj4gPiAtICogcGFydGljdWxhciBjb25uZWN0b3Iu IFRoaXMgaXMgdHlwaWNhbGx5IG9ubHkgdXNlZCBkdXJpbmcgdGhlIGVhcmx5IGZiZGV2Cj4gPiAt ICogc2V0dXAuCj4gPiAtICovCj4gPiAtc3RhdGljIHZvaWQgZHJtX2Nvbm5lY3Rvcl9nZXRfY21k bGluZV9tb2RlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiAtewo+ID4gLSAg ICAgICBzdHJ1Y3QgZHJtX2NtZGxpbmVfbW9kZSAqbW9kZSA9ICZjb25uZWN0b3ItPmNtZGxpbmVf bW9kZTsKPiA+IC0gICAgICAgY2hhciAqb3B0aW9uID0gTlVMTDsKPiA+IC0KPiA+IC0gICAgICAg aWYgKGZiX2dldF9vcHRpb25zKGNvbm5lY3Rvci0+bmFtZSwgJm9wdGlvbikpCj4gPiAtICAgICAg ICAgICAgICAgcmV0dXJuOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoIWRybV9tb2RlX3BhcnNlX2Nv bW1hbmRfbGluZV9mb3JfY29ubmVjdG9yKG9wdGlvbiwKPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3IsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSkpCj4g PiAtICAgICAgICAgICAgICAgcmV0dXJuOwo+ID4gLQo+ID4gLSAgICAgICBpZiAobW9kZS0+Zm9y Y2UpIHsKPiA+IC0gICAgICAgICAgICAgICBjb25zdCBjaGFyICpzOwo+ID4gLQo+ID4gLSAgICAg ICAgICAgICAgIHN3aXRjaCAobW9kZS0+Zm9yY2UpIHsKPiA+IC0gICAgICAgICAgICAgICBjYXNl IERSTV9GT1JDRV9PRkY6Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBzID0gIk9GRiI7Cj4g PiAtICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+IC0gICAgICAgICAgICAgICBjYXNl IERSTV9GT1JDRV9PTl9ESUdJVEFMOgo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgcyA9ICJP TiAtIGRpZyI7Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+IC0gICAgICAg ICAgICAgICBkZWZhdWx0Ogo+ID4gLSAgICAgICAgICAgICAgIGNhc2UgRFJNX0ZPUkNFX09OOgo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgcyA9ICJPTiI7Cj4gPiAtICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKPiA+IC0gICAgICAgICAgICAgICB9Cj4gPiAtCj4gPiAtICAgICAgICAg ICAgICAgRFJNX0lORk8oImZvcmNpbmcgJXMgY29ubmVjdG9yICVzXG4iLCBjb25uZWN0b3ItPm5h bWUsIHMpOwo+ID4gLSAgICAgICAgICAgICAgIGNvbm5lY3Rvci0+Zm9yY2UgPSBtb2RlLT5mb3Jj ZTsKPiA+IC0gICAgICAgfQo+ID4gLQo+ID4gLSAgICAgICBEUk1fREVCVUdfS01TKCJjbWRsaW5l IG1vZGUgZm9yIGNvbm5lY3RvciAlcyAlZHglZEAlZEh6JXMlcyVzXG4iLAo+ID4gLSAgICAgICAg ICAgICAgICAgICAgIGNvbm5lY3Rvci0+bmFtZSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICBt b2RlLT54cmVzLCBtb2RlLT55cmVzLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgIG1vZGUtPnJl ZnJlc2hfc3BlY2lmaWVkID8gbW9kZS0+cmVmcmVzaCA6IDYwLAo+ID4gLSAgICAgICAgICAgICAg ICAgICAgIG1vZGUtPnJiID8gIiByZWR1Y2VkIGJsYW5raW5nIiA6ICIiLAo+ID4gLSAgICAgICAg ICAgICAgICAgICAgIG1vZGUtPm1hcmdpbnMgPyAiIHdpdGggbWFyZ2lucyIgOiAiIiwKPiA+IC0g ICAgICAgICAgICAgICAgICAgICBtb2RlLT5pbnRlcmxhY2UgPyAgIiBpbnRlcmxhY2VkIiA6ICIi KTsKPiA+IC19Cj4gPiAtCj4gPiAtc3RhdGljIHZvaWQgZHJtX2Nvbm5lY3Rvcl9mcmVlKHN0cnVj dCBrcmVmICprcmVmKQo+ID4gLXsKPiA+IC0gICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNv bm5lY3RvciA9Cj4gPiAtICAgICAgICAgICAgICAgY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBk cm1fY29ubmVjdG9yLCBiYXNlLnJlZmNvdW50KTsKPiA+IC0gICAgICAgc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4gLQo+ID4gLSAgICAgICBkcm1fbW9kZV9vYmpl Y3RfdW5yZWdpc3RlcihkZXYsICZjb25uZWN0b3ItPmJhc2UpOwo+ID4gLSAgICAgICBjb25uZWN0 b3ItPmZ1bmNzLT5kZXN0cm95KGNvbm5lY3Rvcik7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4g LSAqIGRybV9jb25uZWN0b3JfaW5pdCAtIEluaXQgYSBwcmVhbGxvY2F0ZWQgY29ubmVjdG9yCj4g PiAtICogQGRldjogRFJNIGRldmljZQo+ID4gLSAqIEBjb25uZWN0b3I6IHRoZSBjb25uZWN0b3Ig dG8gaW5pdAo+ID4gLSAqIEBmdW5jczogY2FsbGJhY2tzIGZvciB0aGlzIGNvbm5lY3Rvcgo+ID4g LSAqIEBjb25uZWN0b3JfdHlwZTogdXNlciB2aXNpYmxlIHR5cGUgb2YgdGhlIGNvbm5lY3Rvcgo+ ID4gLSAqCj4gPiAtICogSW5pdGlhbGlzZXMgYSBwcmVhbGxvY2F0ZWQgY29ubmVjdG9yLiBDb25u ZWN0b3JzIHNob3VsZCBiZQo+ID4gLSAqIHN1YmNsYXNzZWQgYXMgcGFydCBvZiBkcml2ZXIgY29u bmVjdG9yIG9iamVjdHMuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24g c3VjY2VzcywgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ID4gLWludCBkcm1fY29u bmVjdG9yX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgKmZ1bmNzLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICBpbnQgY29ubmVjdG9yX3R5cGUpCj4gPiAtewo+ID4gLSAgICAg ICBzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICpjb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKPiA+ IC0gICAgICAgaW50IHJldDsKPiA+IC0gICAgICAgc3RydWN0IGlkYSAqY29ubmVjdG9yX2lkYSA9 Cj4gPiAtICAgICAgICAgICAgICAgJmRybV9jb25uZWN0b3JfZW51bV9saXN0W2Nvbm5lY3Rvcl90 eXBlXS5pZGE7Cj4gPiAtCj4gPiAtICAgICAgIGRybV9tb2Rlc2V0X2xvY2tfYWxsKGRldik7Cj4g PiAtCj4gPiAtICAgICAgIHJldCA9IGRybV9tb2RlX29iamVjdF9nZXRfcmVnKGRldiwgJmNvbm5l Y3Rvci0+YmFzZSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJN X01PREVfT0JKRUNUX0NPTk5FQ1RPUiwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmFsc2UsIGRybV9jb25uZWN0b3JfZnJlZSk7Cj4gPiAtICAgICAgIGlmIChyZXQp Cj4gPiAtICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwo+ID4gLQo+ID4gLSAgICAgICBj b25uZWN0b3ItPmJhc2UucHJvcGVydGllcyA9ICZjb25uZWN0b3ItPnByb3BlcnRpZXM7Cj4gPiAt ICAgICAgIGNvbm5lY3Rvci0+ZGV2ID0gZGV2Owo+ID4gLSAgICAgICBjb25uZWN0b3ItPmZ1bmNz ID0gZnVuY3M7Cj4gPiAtCj4gPiAtICAgICAgIHJldCA9IGlkYV9zaW1wbGVfZ2V0KCZjb25maWct PmNvbm5lY3Rvcl9pZGEsIDAsIDAsIEdGUF9LRVJORUwpOwo+ID4gLSAgICAgICBpZiAocmV0IDwg MCkKPiA+IC0gICAgICAgICAgICAgICBnb3RvIG91dF9wdXQ7Cj4gPiAtICAgICAgIGNvbm5lY3Rv ci0+aW5kZXggPSByZXQ7Cj4gPiAtICAgICAgIHJldCA9IDA7Cj4gPiAtCj4gPiAtICAgICAgIGNv bm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPSBjb25uZWN0b3JfdHlwZTsKPiA+IC0gICAgICAgY29u bmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCA9Cj4gPiAtICAgICAgICAgICAgICAgaWRhX3NpbXBs ZV9nZXQoY29ubmVjdG9yX2lkYSwgMSwgMCwgR0ZQX0tFUk5FTCk7Cj4gPiAtICAgICAgIGlmIChj b25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlX2lkIDwgMCkgewo+ID4gLSAgICAgICAgICAgICAgIHJl dCA9IGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGVfaWQ7Cj4gPiAtICAgICAgICAgICAgICAgZ290 byBvdXRfcHV0X2lkOwo+ID4gLSAgICAgICB9Cj4gPiAtICAgICAgIGNvbm5lY3Rvci0+bmFtZSA9 Cj4gPiAtICAgICAgICAgICAgICAga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcy0lZCIsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgIGRybV9jb25uZWN0b3JfZW51bV9saXN0W2Nvbm5lY3Rv cl90eXBlXS5uYW1lLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPmNv bm5lY3Rvcl90eXBlX2lkKTsKPiA+IC0gICAgICAgaWYgKCFjb25uZWN0b3ItPm5hbWUpIHsKPiA+ IC0gICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwo+ID4gLSAgICAgICAgICAgICAgIGdvdG8g b3V0X3B1dF90eXBlX2lkOwo+ID4gLSAgICAgICB9Cj4gPiAtCj4gPiAtICAgICAgIElOSVRfTElT VF9IRUFEKCZjb25uZWN0b3ItPnByb2JlZF9tb2Rlcyk7Cj4gPiAtICAgICAgIElOSVRfTElTVF9I RUFEKCZjb25uZWN0b3ItPm1vZGVzKTsKPiA+IC0gICAgICAgY29ubmVjdG9yLT5lZGlkX2Jsb2Jf cHRyID0gTlVMTDsKPiA+IC0gICAgICAgY29ubmVjdG9yLT5zdGF0dXMgPSBjb25uZWN0b3Jfc3Rh dHVzX3Vua25vd247Cj4gPiAtCj4gPiAtICAgICAgIGRybV9jb25uZWN0b3JfZ2V0X2NtZGxpbmVf bW9kZShjb25uZWN0b3IpOwo+ID4gLQo+ID4gLSAgICAgICAvKiBXZSBzaG91bGQgYWRkIGNvbm5l Y3RvcnMgYXQgdGhlIGVuZCB0byBhdm9pZCB1cHNldHRpbmcgdGhlIGNvbm5lY3Rvcgo+ID4gLSAg ICAgICAgKiBpbmRleCB0b28gbXVjaC4gKi8KPiA+IC0gICAgICAgbGlzdF9hZGRfdGFpbCgmY29u bmVjdG9yLT5oZWFkLCAmY29uZmlnLT5jb25uZWN0b3JfbGlzdCk7Cj4gPiAtICAgICAgIGNvbmZp Zy0+bnVtX2Nvbm5lY3RvcisrOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoY29ubmVjdG9yX3R5cGUg IT0gRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpCj4gPiAtICAgICAgICAgICAgICAgZHJtX29i amVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWctPmVkaWRfcHJvcGVydHksCj4g PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cj4gPiAt Cj4gPiAtICAgICAgIGRybV9vYmplY3RfYXR0YWNoX3Byb3BlcnR5KCZjb25uZWN0b3ItPmJhc2Us Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy0+ZHBtc19w cm9wZXJ0eSwgMCk7Cj4gPiAtCj4gPiAtICAgICAgIGlmIChkcm1fY29yZV9jaGVja19mZWF0dXJl KGRldiwgRFJJVkVSX0FUT01JQykpIHsKPiA+IC0gICAgICAgICAgICAgICBkcm1fb2JqZWN0X2F0 dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLCBjb25maWctPnByb3BfY3J0Y19pZCwgMCk7 Cj4gPiAtICAgICAgIH0KPiA+IC0KPiA+IC0gICAgICAgY29ubmVjdG9yLT5kZWJ1Z2ZzX2VudHJ5 ID0gTlVMTDsKPiA+IC1vdXRfcHV0X3R5cGVfaWQ6Cj4gPiAtICAgICAgIGlmIChyZXQpCj4gPiAt ICAgICAgICAgICAgICAgaWRhX3JlbW92ZShjb25uZWN0b3JfaWRhLCBjb25uZWN0b3ItPmNvbm5l Y3Rvcl90eXBlX2lkKTsKPiA+IC1vdXRfcHV0X2lkOgo+ID4gLSAgICAgICBpZiAocmV0KQo+ID4g LSAgICAgICAgICAgICAgIGlkYV9yZW1vdmUoJmNvbmZpZy0+Y29ubmVjdG9yX2lkYSwgY29ubmVj dG9yLT5pbmRleCk7Cj4gPiAtb3V0X3B1dDoKPiA+IC0gICAgICAgaWYgKHJldCkKPiA+IC0gICAg ICAgICAgICAgICBkcm1fbW9kZV9vYmplY3RfdW5yZWdpc3RlcihkZXYsICZjb25uZWN0b3ItPmJh c2UpOwo+ID4gLQo+ID4gLW91dF91bmxvY2s6Cj4gPiAtICAgICAgIGRybV9tb2Rlc2V0X3VubG9j a19hbGwoZGV2KTsKPiA+IC0KPiA+IC0gICAgICAgcmV0dXJuIHJldDsKPiA+IC19Cj4gPiAtRVhQ T1JUX1NZTUJPTChkcm1fY29ubmVjdG9yX2luaXQpOwo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIGRy bV9jb25uZWN0b3JfY2xlYW51cCAtIGNsZWFucyB1cCBhbiBpbml0aWFsaXNlZCBjb25uZWN0b3IK PiA+IC0gKiBAY29ubmVjdG9yOiBjb25uZWN0b3IgdG8gY2xlYW51cAo+ID4gLSAqCj4gPiAtICog Q2xlYW5zIHVwIHRoZSBjb25uZWN0b3IgYnV0IGRvZXNuJ3QgZnJlZSB0aGUgb2JqZWN0Lgo+ID4g LSAqLwo+ID4gLXZvaWQgZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpCj4gPiAtewo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g Y29ubmVjdG9yLT5kZXY7Cj4gPiAtICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2Rl LCAqdDsKPiA+IC0KPiA+IC0gICAgICAgLyogVGhlIGNvbm5lY3RvciBzaG91bGQgaGF2ZSBiZWVu IHJlbW92ZWQgZnJvbSB1c2Vyc3BhY2UgbG9uZyBiZWZvcmUKPiA+IC0gICAgICAgICogaXQgaXMg ZmluYWxseSBkZXN0cm95ZWQuCj4gPiAtICAgICAgICAqLwo+ID4gLSAgICAgICBpZiAoV0FSTl9P Tihjb25uZWN0b3ItPnJlZ2lzdGVyZWQpKQo+ID4gLSAgICAgICAgICAgICAgIGRybV9jb25uZWN0 b3JfdW5yZWdpc3Rlcihjb25uZWN0b3IpOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoY29ubmVjdG9y LT50aWxlX2dyb3VwKSB7Cj4gPiAtICAgICAgICAgICAgICAgZHJtX21vZGVfcHV0X3RpbGVfZ3Jv dXAoZGV2LCBjb25uZWN0b3ItPnRpbGVfZ3JvdXApOwo+ID4gLSAgICAgICAgICAgICAgIGNvbm5l Y3Rvci0+dGlsZV9ncm91cCA9IE5VTEw7Cj4gPiAtICAgICAgIH0KPiA+IC0KPiA+IC0gICAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQsICZjb25uZWN0b3ItPnByb2JlZF9tb2Rl cywgaGVhZCkKPiA+IC0gICAgICAgICAgICAgICBkcm1fbW9kZV9yZW1vdmUoY29ubmVjdG9yLCBt b2RlKTsKPiA+IC0KPiA+IC0gICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1vZGUsIHQs ICZjb25uZWN0b3ItPm1vZGVzLCBoZWFkKQo+ID4gLSAgICAgICAgICAgICAgIGRybV9tb2RlX3Jl bW92ZShjb25uZWN0b3IsIG1vZGUpOwo+ID4gLQo+ID4gLSAgICAgICBpZGFfcmVtb3ZlKCZkcm1f Y29ubmVjdG9yX2VudW1fbGlzdFtjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlXS5pZGEsCj4gPiAt ICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZCk7Cj4gPiAtCj4g PiAtICAgICAgIGlkYV9yZW1vdmUoJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2lkYSwKPiA+ IC0gICAgICAgICAgICAgICAgICBjb25uZWN0b3ItPmluZGV4KTsKPiA+IC0KPiA+IC0gICAgICAg a2ZyZWUoY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnVzX2Zvcm1hdHMpOwo+ID4gLSAgICAgICBk cm1fbW9kZV9vYmplY3RfdW5yZWdpc3RlcihkZXYsICZjb25uZWN0b3ItPmJhc2UpOwo+ID4gLSAg ICAgICBrZnJlZShjb25uZWN0b3ItPm5hbWUpOwo+ID4gLSAgICAgICBjb25uZWN0b3ItPm5hbWUg PSBOVUxMOwo+ID4gLSAgICAgICBsaXN0X2RlbCgmY29ubmVjdG9yLT5oZWFkKTsKPiA+IC0gICAg ICAgZGV2LT5tb2RlX2NvbmZpZy5udW1fY29ubmVjdG9yLS07Cj4gPiAtCj4gPiAtICAgICAgIFdB Uk5fT04oY29ubmVjdG9yLT5zdGF0ZSAmJiAhY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX2Rlc3Ry b3lfc3RhdGUpOwo+ID4gLSAgICAgICBpZiAoY29ubmVjdG9yLT5zdGF0ZSAmJiBjb25uZWN0b3It PmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZSkKPiA+IC0gICAgICAgICAgICAgICBjb25uZWN0 b3ItPmZ1bmNzLT5hdG9taWNfZGVzdHJveV9zdGF0ZShjb25uZWN0b3IsCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdG9yLT5z dGF0ZSk7Cj4gPiAtCj4gPiAtICAgICAgIG1lbXNldChjb25uZWN0b3IsIDAsIHNpemVvZigqY29u bmVjdG9yKSk7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl9jbGVhbnVw KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fY29ubmVjdG9yX3JlZ2lzdGVyIC0gcmVnaXN0 ZXIgYSBjb25uZWN0b3IKPiA+IC0gKiBAY29ubmVjdG9yOiB0aGUgY29ubmVjdG9yIHRvIHJlZ2lz dGVyCj4gPiAtICoKPiA+IC0gKiBSZWdpc3RlciB1c2Vyc3BhY2UgaW50ZXJmYWNlcyBmb3IgYSBj b25uZWN0b3IKPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNz LCBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiAtICovCj4gPiAtaW50IGRybV9jb25uZWN0b3Jf cmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+IC17Cj4gPiAtICAg ICAgIGludCByZXQ7Cj4gPiAtCj4gPiAtICAgICAgIGlmIChjb25uZWN0b3ItPnJlZ2lzdGVyZWQp Cj4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiAtCj4gPiAtICAgICAgIHJldCA9IGRy bV9zeXNmc19jb25uZWN0b3JfYWRkKGNvbm5lY3Rvcik7Cj4gPiAtICAgICAgIGlmIChyZXQpCj4g PiAtICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+IC0KPiA+IC0gICAgICAgcmV0ID0gZHJt X2RlYnVnZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOwo+ID4gLSAgICAgICBpZiAocmV0KSB7 Cj4gPiAtICAgICAgICAgICAgICAgZ290byBlcnJfc3lzZnM7Cj4gPiAtICAgICAgIH0KPiA+IC0K PiA+IC0gICAgICAgaWYgKGNvbm5lY3Rvci0+ZnVuY3MtPmxhdGVfcmVnaXN0ZXIpIHsKPiA+IC0g ICAgICAgICAgICAgICByZXQgPSBjb25uZWN0b3ItPmZ1bmNzLT5sYXRlX3JlZ2lzdGVyKGNvbm5l Y3Rvcik7Cj4gPiAtICAgICAgICAgICAgICAgaWYgKHJldCkKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgIGdvdG8gZXJyX2RlYnVnZnM7Cj4gPiAtICAgICAgIH0KPiA+IC0KPiA+IC0gICAgICAg ZHJtX21vZGVfb2JqZWN0X3JlZ2lzdGVyKGNvbm5lY3Rvci0+ZGV2LCAmY29ubmVjdG9yLT5iYXNl KTsKPiA+IC0KPiA+IC0gICAgICAgY29ubmVjdG9yLT5yZWdpc3RlcmVkID0gdHJ1ZTsKPiA+IC0g ICAgICAgcmV0dXJuIDA7Cj4gPiAtCj4gPiAtZXJyX2RlYnVnZnM6Cj4gPiAtICAgICAgIGRybV9k ZWJ1Z2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29ubmVjdG9yKTsKPiA+IC1lcnJfc3lzZnM6Cj4gPiAt ICAgICAgIGRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7Cj4gPiAtICAgICAg IHJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl9yZWdp c3Rlcik7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyIC0g dW5yZWdpc3RlciBhIGNvbm5lY3Rvcgo+ID4gLSAqIEBjb25uZWN0b3I6IHRoZSBjb25uZWN0b3Ig dG8gdW5yZWdpc3Rlcgo+ID4gLSAqCj4gPiAtICogVW5yZWdpc3RlciB1c2Vyc3BhY2UgaW50ZXJm YWNlcyBmb3IgYSBjb25uZWN0b3IKPiA+IC0gKi8KPiA+IC12b2lkIGRybV9jb25uZWN0b3JfdW5y ZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gLXsKPiA+IC0gICAg ICAgaWYgKCFjb25uZWN0b3ItPnJlZ2lzdGVyZWQpCj4gPiAtICAgICAgICAgICAgICAgcmV0dXJu Owo+ID4gLQo+ID4gLSAgICAgICBpZiAoY29ubmVjdG9yLT5mdW5jcy0+ZWFybHlfdW5yZWdpc3Rl cikKPiA+IC0gICAgICAgICAgICAgICBjb25uZWN0b3ItPmZ1bmNzLT5lYXJseV91bnJlZ2lzdGVy KGNvbm5lY3Rvcik7Cj4gPiAtCj4gPiAtICAgICAgIGRybV9zeXNmc19jb25uZWN0b3JfcmVtb3Zl KGNvbm5lY3Rvcik7Cj4gPiAtICAgICAgIGRybV9kZWJ1Z2ZzX2Nvbm5lY3Rvcl9yZW1vdmUoY29u bmVjdG9yKTsKPiA+IC0KPiA+IC0gICAgICAgY29ubmVjdG9yLT5yZWdpc3RlcmVkID0gZmFsc2U7 Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKTsKPiA+ IC0KPiA+IC1zdGF0aWMgdm9pZCBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXJfYWxsKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpCj4gPiAtewo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yOwo+ID4gLQo+ID4gLSAgICAgICAvKiBGSVhNRTogdGFraW5nIHRoZSBtb2RlIGNv bmZpZyBtdXRleCBlbmRzIHVwIGluIGEgY2xhc2ggd2l0aCBzeXNmcyAqLwo+ID4gLSAgICAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9y X2xpc3QsIGhlYWQpCj4gPiAtICAgICAgICAgICAgICAgZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVy KGNvbm5lY3Rvcik7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBpbnQgZHJtX2Nvbm5lY3Rvcl9y ZWdpc3Rlcl9hbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+IC17Cj4gPiAtICAgICAgIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiAtICAgICAgIGludCByZXQ7Cj4gPiAt Cj4gPiAtICAgICAgIC8qIEZJWE1FOiB0YWtpbmcgdGhlIG1vZGUgY29uZmlnIG11dGV4IGVuZHMg dXAgaW4gYSBjbGFzaCB3aXRoCj4gPiAtICAgICAgICAqIGZiY29uL2JhY2tsaWdodCByZWdpc3Ry YXRpb24gKi8KPiA+IC0gICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYt Pm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKSB7Cj4gPiAtICAgICAgICAgICAgICAg cmV0ID0gZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcihjb25uZWN0b3IpOwo+ID4gLSAgICAgICAgICAg ICAgIGlmIChyZXQpCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKPiA+IC0g ICAgICAgfQo+ID4gLQo+ID4gLSAgICAgICByZXR1cm4gMDsKPiA+IC0KPiA+IC1lcnI6Cj4gPiAt ICAgICAgIG11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7Cj4gPiAtICAgICAg IGRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcl9hbGwoZGV2KTsKPiA+IC0gICAgICAgcmV0dXJuIHJl dDsKPiA+IC19Cj4gPiAtCj4gPiAgc3RhdGljIGludCBkcm1fZW5jb2Rlcl9yZWdpc3Rlcl9hbGwo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+ICB7Cj4gPiAgICAgICAgIHN0cnVjdCBkcm1fZW5j b2RlciAqZW5jb2RlcjsKPiA+IEBAIC0xMzA5LDM5ICs4MjgsMTEgQEAgdm9pZCBkcm1fbW9kZXNl dF91bnJlZ2lzdGVyX2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIHN0YXRpYyBpbnQg ZHJtX21vZGVfY3JlYXRlX3N0YW5kYXJkX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRl dikKPiA+ICB7Cj4gPiAgICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7Cj4gPiArICAg ICAgIGludCByZXQ7Cj4gPgo+ID4gLSAgICAgICAvKgo+ID4gLSAgICAgICAgKiBTdGFuZGFyZCBw cm9wZXJ0aWVzIChhcHBseSB0byBhbGwgY29ubmVjdG9ycykKPiA+IC0gICAgICAgICovCj4gPiAt ICAgICAgIHByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9CTE9C IHwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJNX01PREVfUFJPUF9J TU1VVEFCTEUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFRElEIiwg MCk7Cj4gPiAtICAgICAgIGlmICghcHJvcCkKPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gLUVO T01FTTsKPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy5lZGlkX3Byb3BlcnR5ID0gcHJvcDsK PiA+IC0KPiA+IC0gICAgICAgcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVhdGVfZW51bShkZXYsIDAs Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEUE1TIiwgZHJtX2RwbXNf ZW51bV9saXN0LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9T SVpFKGRybV9kcG1zX2VudW1fbGlzdCkpOwo+ID4gLSAgICAgICBpZiAoIXByb3ApCj4gPiAtICAg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcu ZHBtc19wcm9wZXJ0eSA9IHByb3A7Cj4gPiAtCj4gPiAtICAgICAgIHByb3AgPSBkcm1fcHJvcGVy dHlfY3JlYXRlKGRldiwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJN X01PREVfUFJPUF9CTE9CIHwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJQQVRIIiwgMCk7Cj4gPiAtICAgICAgIGlmICghcHJvcCkKPiA+IC0gICAgICAgICAg ICAgICByZXR1cm4gLUVOT01FTTsKPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy5wYXRoX3By b3BlcnR5ID0gcHJvcDsKPiA+IC0KPiA+IC0gICAgICAgcHJvcCA9IGRybV9wcm9wZXJ0eV9jcmVh dGUoZGV2LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fTU9ERV9Q Uk9QX0JMT0IgfAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUk1fTU9E RV9QUk9QX0lNTVVUQUJMRSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IlRJTEUiLCAwKTsKPiA+IC0gICAgICAgaWYgKCFwcm9wKQo+ID4gLSAgICAgICAgICAgICAgIHJl dHVybiAtRU5PTUVNOwo+ID4gLSAgICAgICBkZXYtPm1vZGVfY29uZmlnLnRpbGVfcHJvcGVydHkg PSBwcm9wOwo+ID4gKyAgICAgICByZXQgPSBkcm1fY29ubmVjdG9yX2NyZWF0ZV9zdGFuZGFyZF9w cm9wZXJ0aWVzKGRldik7Cj4gPiArICAgICAgIGlmIChyZXQpCj4gPiArICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKPiA+Cj4gPiAgICAgICAgIHByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2Vu dW0oZGV2LCBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwKPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAidHlwZSIsIGRybV9wbGFuZV90eXBlX2VudW1fbGlzdCwKPiA+ IEBAIC0xNDYyLDIyNSArOTUzLDYgQEAgc3RhdGljIGludCBkcm1fbW9kZV9jcmVhdGVfc3RhbmRh cmRfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gIH0KPiA+Cj4gPiAgLyoq Cj4gPiAtICogZHJtX21vZGVfY3JlYXRlX2R2aV9pX3Byb3BlcnRpZXMgLSBjcmVhdGUgRFZJLUkg c3BlY2lmaWMgY29ubmVjdG9yIHByb3BlcnRpZXMKPiA+IC0gKiBAZGV2OiBEUk0gZGV2aWNlCj4g PiAtICoKPiA+IC0gKiBDYWxsZWQgYnkgYSBkcml2ZXIgdGhlIGZpcnN0IHRpbWUgYSBEVkktSSBj b25uZWN0b3IgaXMgbWFkZS4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX21vZGVfY3JlYXRlX2R2aV9p X3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiA+IC17Cj4gPiAtICAgICAgIHN0 cnVjdCBkcm1fcHJvcGVydHkgKmR2aV9pX3NlbGVjdG9yOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpkdmlfaV9zdWJjb25uZWN0b3I7Cj4gPiAtCj4gPiAtICAgICAgIGlmIChkZXYt Pm1vZGVfY29uZmlnLmR2aV9pX3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHkpCj4gPiAtICAg ICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiAtCj4gPiAtICAgICAgIGR2aV9pX3NlbGVjdG9yID0K PiA+IC0gICAgICAgICAgICAgICBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLAo+ID4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBzdWJjb25uZWN0b3Ii LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2R2aV9pX3NlbGVj dF9lbnVtX2xpc3QsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJB WV9TSVpFKGRybV9kdmlfaV9zZWxlY3RfZW51bV9saXN0KSk7Cj4gPiAtICAgICAgIGRldi0+bW9k ZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSA9IGR2aV9pX3NlbGVj dG9yOwo+ID4gLQo+ID4gLSAgICAgICBkdmlfaV9zdWJjb25uZWN0b3IgPSBkcm1fcHJvcGVydHlf Y3JlYXRlX2VudW0oZGV2LCBEUk1fTU9ERV9QUk9QX0lNTVVUQUJMRSwKPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJzdWJjb25uZWN0b3IiLAo+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2R2aV9pX3N1YmNvbm5lY3Rvcl9lbnVtX2xpc3Qs Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGRybV9k dmlfaV9zdWJjb25uZWN0b3JfZW51bV9saXN0KSk7Cj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25m aWcuZHZpX2lfc3ViY29ubmVjdG9yX3Byb3BlcnR5ID0gZHZpX2lfc3ViY29ubmVjdG9yOwo+ID4g LQo+ID4gLSAgICAgICByZXR1cm4gMDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fbW9k ZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX2Ny ZWF0ZV90dl9wcm9wZXJ0aWVzIC0gY3JlYXRlIFRWIHNwZWNpZmljIGNvbm5lY3RvciBwcm9wZXJ0 aWVzCj4gPiAtICogQGRldjogRFJNIGRldmljZQo+ID4gLSAqIEBudW1fbW9kZXM6IG51bWJlciBv ZiBkaWZmZXJlbnQgVFYgZm9ybWF0cyAobW9kZXMpIHN1cHBvcnRlZAo+ID4gLSAqIEBtb2Rlczog YXJyYXkgb2YgcG9pbnRlcnMgdG8gc3RyaW5ncyBjb250YWluaW5nIG5hbWUgb2YgZWFjaCBmb3Jt YXQKPiA+IC0gKgo+ID4gLSAqIENhbGxlZCBieSBhIGRyaXZlcidzIFRWIGluaXRpYWxpemF0aW9u IHJvdXRpbmUsIHRoaXMgZnVuY3Rpb24gY3JlYXRlcwo+ID4gLSAqIHRoZSBUViBzcGVjaWZpYyBj b25uZWN0b3IgcHJvcGVydGllcyBmb3IgYSBnaXZlbiBkZXZpY2UuICBDYWxsZXIgaXMKPiA+IC0g KiByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBhIGxpc3Qgb2YgZm9ybWF0IG5hbWVzIGFuZCBw YXNzaW5nIHRoZW0gdG8KPiA+IC0gKiB0aGlzIHJvdXRpbmUuCj4gPiAtICovCj4gPiAtaW50IGRy bV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG51bV9tb2RlcywK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29uc3Qg bW9kZXNbXSkKPiA+IC17Cj4gPiAtICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnR2X3NlbGVj dG9yOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0dl9zdWJjb25uZWN0b3I7Cj4g PiAtICAgICAgIHVuc2lnbmVkIGludCBpOwo+ID4gLQo+ID4gLSAgICAgICBpZiAoZGV2LT5tb2Rl X2NvbmZpZy50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5KQo+ID4gLSAgICAgICAgICAg ICAgIHJldHVybiAwOwo+ID4gLQo+ID4gLSAgICAgICAvKgo+ID4gLSAgICAgICAgKiBCYXNpYyBj b25uZWN0b3IgcHJvcGVydGllcwo+ID4gLSAgICAgICAgKi8KPiA+IC0gICAgICAgdHZfc2VsZWN0 b3IgPSBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLAo+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBzdWJjb25uZWN0b3IiLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJtX3R2X3NlbGVjdF9lbnVt X2xpc3QsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJB WV9TSVpFKGRybV90dl9zZWxlY3RfZW51bV9saXN0KSk7Cj4gPiAtICAgICAgIGlmICghdHZfc2Vs ZWN0b3IpCj4gPiAtICAgICAgICAgICAgICAgZ290byBub21lbTsKPiA+IC0KPiA+IC0gICAgICAg ZGV2LT5tb2RlX2NvbmZpZy50dl9zZWxlY3Rfc3ViY29ubmVjdG9yX3Byb3BlcnR5ID0gdHZfc2Vs ZWN0b3I7Cj4gPiAtCj4gPiAtICAgICAgIHR2X3N1YmNvbm5lY3RvciA9Cj4gPiAtICAgICAgICAg ICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9lbnVtKGRldiwgRFJNX01PREVfUFJPUF9JTU1VVEFC TEUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3ViY29ubmVjdG9y IiwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybV90dl9zdWJjb25u ZWN0b3JfZW51bV9saXN0LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVJSQVlfU0laRShkcm1fdHZfc3ViY29ubmVjdG9yX2VudW1fbGlzdCkpOwo+ID4gLSAgICAgICBp ZiAoIXR2X3N1YmNvbm5lY3RvcikKPiA+IC0gICAgICAgICAgICAgICBnb3RvIG5vbWVtOwo+ID4g LSAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSA9IHR2X3N1 YmNvbm5lY3RvcjsKPiA+IC0KPiA+IC0gICAgICAgLyoKPiA+IC0gICAgICAgICogT3RoZXIsIFRW IHNwZWNpZmljIHByb3BlcnRpZXM6IG1hcmdpbnMgJiBUViBtb2Rlcy4KPiA+IC0gICAgICAgICov Cj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfbGVmdF9tYXJnaW5fcHJvcGVydHkgPQo+ ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAwLCAibGVm dCBtYXJnaW4iLCAwLCAxMDApOwo+ID4gLSAgICAgICBpZiAoIWRldi0+bW9kZV9jb25maWcudHZf bGVmdF9tYXJnaW5fcHJvcGVydHkpCj4gPiAtICAgICAgICAgICAgICAgZ290byBub21lbTsKPiA+ IC0KPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9yaWdodF9tYXJnaW5fcHJvcGVydHkg PQo+ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAwLCAi cmlnaHQgbWFyZ2luIiwgMCwgMTAwKTsKPiA+IC0gICAgICAgaWYgKCFkZXYtPm1vZGVfY29uZmln LnR2X3JpZ2h0X21hcmdpbl9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAgICBnb3RvIG5vbWVt Owo+ID4gLQo+ID4gLSAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X3RvcF9tYXJnaW5fcHJvcGVy dHkgPQo+ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAw LCAidG9wIG1hcmdpbiIsIDAsIDEwMCk7Cj4gPiAtICAgICAgIGlmICghZGV2LT5tb2RlX2NvbmZp Zy50dl90b3BfbWFyZ2luX3Byb3BlcnR5KQo+ID4gLSAgICAgICAgICAgICAgIGdvdG8gbm9tZW07 Cj4gPiAtCj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfYm90dG9tX21hcmdpbl9wcm9w ZXJ0eSA9Cj4gPiAtICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShkZXYs IDAsICJib3R0b20gbWFyZ2luIiwgMCwgMTAwKTsKPiA+IC0gICAgICAgaWYgKCFkZXYtPm1vZGVf Y29uZmlnLnR2X2JvdHRvbV9tYXJnaW5fcHJvcGVydHkpCj4gPiAtICAgICAgICAgICAgICAgZ290 byBub21lbTsKPiA+IC0KPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9tb2RlX3Byb3Bl cnR5ID0KPiA+IC0gICAgICAgICAgICAgICBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01P REVfUFJPUF9FTlVNLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1v ZGUiLCBudW1fbW9kZXMpOwo+ID4gLSAgICAgICBpZiAoIWRldi0+bW9kZV9jb25maWcudHZfbW9k ZV9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAgICBnb3RvIG5vbWVtOwo+ID4gLQo+ID4gLSAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspCj4gPiAtICAgICAgICAgICAgICAg ZHJtX3Byb3BlcnR5X2FkZF9lbnVtKGRldi0+bW9kZV9jb25maWcudHZfbW9kZV9wcm9wZXJ0eSwg aSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgbW9kZXNbaV0p Owo+ID4gLQo+ID4gLSAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X2JyaWdodG5lc3NfcHJvcGVy dHkgPQo+ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAw LCAiYnJpZ2h0bmVzcyIsIDAsIDEwMCk7Cj4gPiAtICAgICAgIGlmICghZGV2LT5tb2RlX2NvbmZp Zy50dl9icmlnaHRuZXNzX3Byb3BlcnR5KQo+ID4gLSAgICAgICAgICAgICAgIGdvdG8gbm9tZW07 Cj4gPiAtCj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfY29udHJhc3RfcHJvcGVydHkg PQo+ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAwLCAi Y29udHJhc3QiLCAwLCAxMDApOwo+ID4gLSAgICAgICBpZiAoIWRldi0+bW9kZV9jb25maWcudHZf Y29udHJhc3RfcHJvcGVydHkpCj4gPiAtICAgICAgICAgICAgICAgZ290byBub21lbTsKPiA+IC0K PiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0 eSA9Cj4gPiAtICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShkZXYsIDAs ICJmbGlja2VyIHJlZHVjdGlvbiIsIDAsIDEwMCk7Cj4gPiAtICAgICAgIGlmICghZGV2LT5tb2Rl X2NvbmZpZy50dl9mbGlja2VyX3JlZHVjdGlvbl9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAg ICBnb3RvIG5vbWVtOwo+ID4gLQo+ID4gLSAgICAgICBkZXYtPm1vZGVfY29uZmlnLnR2X292ZXJz Y2FuX3Byb3BlcnR5ID0KPiA+IC0gICAgICAgICAgICAgICBkcm1fcHJvcGVydHlfY3JlYXRlX3Jh bmdlKGRldiwgMCwgIm92ZXJzY2FuIiwgMCwgMTAwKTsKPiA+IC0gICAgICAgaWYgKCFkZXYtPm1v ZGVfY29uZmlnLnR2X292ZXJzY2FuX3Byb3BlcnR5KQo+ID4gLSAgICAgICAgICAgICAgIGdvdG8g bm9tZW07Cj4gPiAtCj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcudHZfc2F0dXJhdGlvbl9w cm9wZXJ0eSA9Cj4gPiAtICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShk ZXYsIDAsICJzYXR1cmF0aW9uIiwgMCwgMTAwKTsKPiA+IC0gICAgICAgaWYgKCFkZXYtPm1vZGVf Y29uZmlnLnR2X3NhdHVyYXRpb25fcHJvcGVydHkpCj4gPiAtICAgICAgICAgICAgICAgZ290byBu b21lbTsKPiA+IC0KPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy50dl9odWVfcHJvcGVydHkg PQo+ID4gLSAgICAgICAgICAgICAgIGRybV9wcm9wZXJ0eV9jcmVhdGVfcmFuZ2UoZGV2LCAwLCAi aHVlIiwgMCwgMTAwKTsKPiA+IC0gICAgICAgaWYgKCFkZXYtPm1vZGVfY29uZmlnLnR2X2h1ZV9w cm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAgICBnb3RvIG5vbWVtOwo+ID4gLQo+ID4gLSAgICAg ICByZXR1cm4gMDsKPiA+IC1ub21lbToKPiA+IC0gICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gPiAt fQo+ID4gLUVYUE9SVF9TWU1CT0woZHJtX21vZGVfY3JlYXRlX3R2X3Byb3BlcnRpZXMpOwo+ID4g LQo+ID4gLS8qKgo+ID4gLSAqIGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHkg LSBjcmVhdGUgc2NhbGluZyBtb2RlIHByb3BlcnR5Cj4gPiAtICogQGRldjogRFJNIGRldmljZQo+ ID4gLSAqCj4gPiAtICogQ2FsbGVkIGJ5IGEgZHJpdmVyIHRoZSBmaXJzdCB0aW1lIGl0J3MgbmVl ZGVkLCBtdXN0IGJlIGF0dGFjaGVkIHRvIGRlc2lyZWQKPiA+IC0gKiBjb25uZWN0b3JzLgo+ID4g LSAqLwo+ID4gLWludCBkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3Byb3BlcnR5KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gPiAtewo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5 ICpzY2FsaW5nX21vZGU7Cj4gPiAtCj4gPiAtICAgICAgIGlmIChkZXYtPm1vZGVfY29uZmlnLnNj YWxpbmdfbW9kZV9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+IC0K PiA+IC0gICAgICAgc2NhbGluZ19tb2RlID0KPiA+IC0gICAgICAgICAgICAgICBkcm1fcHJvcGVy dHlfY3JlYXRlX2VudW0oZGV2LCAwLCAic2NhbGluZyBtb2RlIiwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHJtX3NjYWxpbmdfbW9kZV9lbnVtX2xpc3QsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGRybV9zY2FsaW5nX21vZGVf ZW51bV9saXN0KSk7Cj4gPiAtCj4gPiAtICAgICAgIGRldi0+bW9kZV9jb25maWcuc2NhbGluZ19t b2RlX3Byb3BlcnR5ID0gc2NhbGluZ19tb2RlOwo+ID4gLQo+ID4gLSAgICAgICByZXR1cm4gMDsK PiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jcmVhdGVfc2NhbGluZ19tb2RlX3By b3BlcnR5KTsKPiA+IC0KPiA+IC0vKioKPiA+IC0gKiBkcm1fbW9kZV9jcmVhdGVfYXNwZWN0X3Jh dGlvX3Byb3BlcnR5IC0gY3JlYXRlIGFzcGVjdCByYXRpbyBwcm9wZXJ0eQo+ID4gLSAqIEBkZXY6 IERSTSBkZXZpY2UKPiA+IC0gKgo+ID4gLSAqIENhbGxlZCBieSBhIGRyaXZlciB0aGUgZmlyc3Qg dGltZSBpdCdzIG5lZWRlZCwgbXVzdCBiZSBhdHRhY2hlZCB0byBkZXNpcmVkCj4gPiAtICogY29u bmVjdG9ycy4KPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ID4gLWludCBkcm1fbW9kZV9j cmVhdGVfYXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiAt ewo+ID4gLSAgICAgICBpZiAoZGV2LT5tb2RlX2NvbmZpZy5hc3BlY3RfcmF0aW9fcHJvcGVydHkp Cj4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiAtCj4gPiAtICAgICAgIGRldi0+bW9k ZV9jb25maWcuYXNwZWN0X3JhdGlvX3Byb3BlcnR5ID0KPiA+IC0gICAgICAgICAgICAgICBkcm1f cHJvcGVydHlfY3JlYXRlX2VudW0oZGV2LCAwLCAiYXNwZWN0IHJhdGlvIiwKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJtX2FzcGVjdF9yYXRpb19lbnVtX2xpc3QsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUoZHJtX2FzcGVjdF9yYXRp b19lbnVtX2xpc3QpKTsKPiA+IC0KPiA+IC0gICAgICAgaWYgKGRldi0+bW9kZV9jb25maWcuYXNw ZWN0X3JhdGlvX3Byb3BlcnR5ID09IE5VTEwpCj4gPiAtICAgICAgICAgICAgICAgcmV0dXJuIC1F Tk9NRU07Cj4gPiAtCj4gPiAtICAgICAgIHJldHVybiAwOwo+ID4gLX0KPiA+IC1FWFBPUlRfU1lN Qk9MKGRybV9tb2RlX2NyZWF0ZV9hc3BlY3RfcmF0aW9fcHJvcGVydHkpOwo+ID4gLQo+ID4gLS8q Kgo+ID4gLSAqIGRybV9tb2RlX2NyZWF0ZV9zdWdnZXN0ZWRfb2Zmc2V0X3Byb3BlcnRpZXMgLSBj cmVhdGUgc3VnZ2VzdHMgb2Zmc2V0IHByb3BlcnRpZXMKPiA+IC0gKiBAZGV2OiBEUk0gZGV2aWNl Cj4gPiAtICoKPiA+IC0gKiBDcmVhdGUgdGhlIHRoZSBzdWdnZXN0ZWQgeC95IG9mZnNldCBwcm9w ZXJ0eSBmb3IgY29ubmVjdG9ycy4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX21vZGVfY3JlYXRlX3N1 Z2dlc3RlZF9vZmZzZXRfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ID4gLXsK PiA+IC0gICAgICAgaWYgKGRldi0+bW9kZV9jb25maWcuc3VnZ2VzdGVkX3hfcHJvcGVydHkgJiYg ZGV2LT5tb2RlX2NvbmZpZy5zdWdnZXN0ZWRfeV9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAg ICByZXR1cm4gMDsKPiA+IC0KPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zdWdnZXN0ZWRf eF9wcm9wZXJ0eSA9Cj4gPiAtICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5n ZShkZXYsIERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAic3VnZ2VzdGVkIFgiLCAwLCAweGZmZmZm ZmZmKTsKPiA+IC0KPiA+IC0gICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zdWdnZXN0ZWRfeV9wcm9w ZXJ0eSA9Cj4gPiAtICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X2NyZWF0ZV9yYW5nZShkZXYs IERSTV9NT0RFX1BST1BfSU1NVVRBQkxFLCAic3VnZ2VzdGVkIFkiLCAwLCAweGZmZmZmZmZmKTsK PiA+IC0KPiA+IC0gICAgICAgaWYgKGRldi0+bW9kZV9jb25maWcuc3VnZ2VzdGVkX3hfcHJvcGVy dHkgPT0gTlVMTCB8fAo+ID4gLSAgICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zdWdnZXN0ZWRf eV9wcm9wZXJ0eSA9PSBOVUxMKQo+ID4gLSAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ ID4gLSAgICAgICByZXR1cm4gMDsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9j cmVhdGVfc3VnZ2VzdGVkX29mZnNldF9wcm9wZXJ0aWVzKTsKPiA+IC0KPiA+IC0vKioKPiA+ICAg KiBkcm1fbW9kZV9nZXRyZXNvdXJjZXMgLSBnZXQgZ3JhcGhpY3MgY29uZmlndXJhdGlvbgo+ID4g ICAqIEBkZXY6IGRybSBkZXZpY2UgZm9yIHRoZSBpb2N0bAo+ID4gICAqIEBkYXRhOiBkYXRhIHBv aW50ZXIgZm9yIHRoZSBpb2N0bAo+ID4gQEAgLTE4NjIsMzIgKzExMzQsMTEgQEAgaW50IGRybV9t b2RlX2dldGNydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAgICAgICAgcmV0dXJuIDA7 Cj4gPiAgfQo+ID4KPiA+IC1zdGF0aWMgYm9vbCBkcm1fbW9kZV9leHBvc2VfdG9fdXNlcnNwYWNl KGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ID4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dikKPiA+IC17Cj4gPiAtICAgICAgIC8qCj4gPiAtICAgICAgICAqIElmIHVzZXItc3BhY2UgaGFz bid0IGNvbmZpZ3VyZWQgdGhlIGRyaXZlciB0byBleHBvc2UgdGhlIHN0ZXJlbyAzRAo+ID4gLSAg ICAgICAgKiBtb2RlcywgZG9uJ3QgZXhwb3NlIHRoZW0uCj4gPiAtICAgICAgICAqLwo+ID4gLSAg ICAgICBpZiAoIWZpbGVfcHJpdi0+c3RlcmVvX2FsbG93ZWQgJiYgZHJtX21vZGVfaXNfc3RlcmVv KG1vZGUpKQo+ID4gLSAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiA+IC0KPiA+IC0gICAg ICAgcmV0dXJuIHRydWU7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBzdHJ1Y3QgZHJtX2VuY29k ZXIgKmRybV9jb25uZWN0b3JfZ2V0X2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5l Y3RvcikKPiA+IC17Cj4gPiAtICAgICAgIC8qIEZvciBhdG9taWMgZHJpdmVycyBvbmx5IHN0YXRl IG9iamVjdHMgYXJlIHN5bmNocm9ub3VzbHkgdXBkYXRlZCBhbmQKPiA+IC0gICAgICAgICogcHJv dGVjdGVkIGJ5IG1vZGVzZXQgbG9ja3MsIHNvIGNoZWNrIHRob3NlIGZpcnN0LiAqLwo+ID4gLSAg ICAgICBpZiAoY29ubmVjdG9yLT5zdGF0ZSkKPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gY29u bmVjdG9yLT5zdGF0ZS0+YmVzdF9lbmNvZGVyOwo+ID4gLSAgICAgICByZXR1cm4gY29ubmVjdG9y LT5lbmNvZGVyOwo+ID4gLX0KPiA+IC0KPiA+ICAvKiBoZWxwZXIgZm9yIGdldGNvbm5lY3RvciBh bmQgZ2V0cHJvcGVydGllcyBpb2N0bHMgKi8KPiA+IC1zdGF0aWMgaW50IGdldF9wcm9wZXJ0aWVz KHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwgYm9vbCBhdG9taWMsCj4gPiAtICAgICAgICAg ICAgICAgdWludDMyX3QgX191c2VyICpwcm9wX3B0ciwgdWludDY0X3QgX191c2VyICpwcm9wX3Zh bHVlcywKPiA+IC0gICAgICAgICAgICAgICB1aW50MzJfdCAqYXJnX2NvdW50X3Byb3BzKQo+ID4g K2ludCBkcm1fbW9kZV9vYmplY3RfZ2V0X3Byb3BlcnRpZXMoc3RydWN0IGRybV9tb2RlX29iamVj dCAqb2JqLCBib29sIGF0b21pYywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgX191c2VyICpwcm9wX3B0ciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDY0X3QgX191c2VyICpwcm9wX3ZhbHVlcywKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmFyZ19jb3VudF9wcm9wcykKPiA+ICB7 Cj4gPiAgICAgICAgIGludCBwcm9wc19jb3VudDsKPiA+ICAgICAgICAgaW50IGksIHJldCwgY29w aWVkOwo+ID4gQEAgLTE5MjIsMTMzICsxMTczLDYgQEAgc3RhdGljIGludCBnZXRfcHJvcGVydGll cyhzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosIGJvb2wgYXRvbWljLAo+ID4gICAgICAgICBy ZXR1cm4gMDsKPiA+ICB9Cj4gPgo+ID4gLS8qKgo+ID4gLSAqIGRybV9tb2RlX2dldGNvbm5lY3Rv ciAtIGdldCBjb25uZWN0b3IgY29uZmlndXJhdGlvbgo+ID4gLSAqIEBkZXY6IGRybSBkZXZpY2Ug Zm9yIHRoZSBpb2N0bAo+ID4gLSAqIEBkYXRhOiBkYXRhIHBvaW50ZXIgZm9yIHRoZSBpb2N0bAo+ ID4gLSAqIEBmaWxlX3ByaXY6IGRybSBmaWxlIGZvciB0aGUgaW9jdGwgY2FsbAo+ID4gLSAqCj4g PiAtICogQ29uc3RydWN0IGEgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHRvIHJl dHVybiB0byB0aGUgdXNlci4KPiA+IC0gKgo+ID4gLSAqIENhbGxlZCBieSB0aGUgdXNlciB2aWEg aW9jdGwuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2Vzcywg bmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX21vZGVfZ2V0 Y29ubmVjdG9yKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ID4gLXsKPiA+ IC0gICAgICAgc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3IgKm91dF9yZXNwID0gZGF0YTsK PiA+IC0gICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+IC0gICAgICAg c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3Bs YXlfbW9kZSAqbW9kZTsKPiA+IC0gICAgICAgaW50IG1vZGVfY291bnQgPSAwOwo+ID4gLSAgICAg ICBpbnQgZW5jb2RlcnNfY291bnQgPSAwOwo+ID4gLSAgICAgICBpbnQgcmV0ID0gMDsKPiA+IC0g ICAgICAgaW50IGNvcGllZCA9IDA7Cj4gPiAtICAgICAgIGludCBpOwo+ID4gLSAgICAgICBzdHJ1 Y3QgZHJtX21vZGVfbW9kZWluZm8gdV9tb2RlOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gX191c2VyICptb2RlX3B0cjsKPiA+IC0gICAgICAgdWludDMyX3QgX191c2VyICpl bmNvZGVyX3B0cjsKPiA+IC0KPiA+IC0gICAgICAgaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJl KGRldiwgRFJJVkVSX01PREVTRVQpKQo+ID4gLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Owo+ID4gLQo+ID4gLSAgICAgICBtZW1zZXQoJnVfbW9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBkcm1f bW9kZV9tb2RlaW5mbykpOwo+ID4gLQo+ID4gLSAgICAgICBtdXRleF9sb2NrKCZkZXYtPm1vZGVf Y29uZmlnLm11dGV4KTsKPiA+IC0KPiA+IC0gICAgICAgY29ubmVjdG9yID0gZHJtX2Nvbm5lY3Rv cl9sb29rdXAoZGV2LCBvdXRfcmVzcC0+Y29ubmVjdG9yX2lkKTsKPiA+IC0gICAgICAgaWYgKCFj b25uZWN0b3IpIHsKPiA+IC0gICAgICAgICAgICAgICByZXQgPSAtRU5PRU5UOwo+ID4gLSAgICAg ICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKPiA+IC0gICAgICAgfQo+ID4gLQo+ID4gLSAgICAg ICBmb3IgKGkgPSAwOyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKQo+ID4gLSAg ICAgICAgICAgICAgIGlmIChjb25uZWN0b3ItPmVuY29kZXJfaWRzW2ldICE9IDApCj4gPiAtICAg ICAgICAgICAgICAgICAgICAgICBlbmNvZGVyc19jb3VudCsrOwo+ID4gLQo+ID4gLSAgICAgICBp ZiAob3V0X3Jlc3AtPmNvdW50X21vZGVzID09IDApIHsKPiA+IC0gICAgICAgICAgICAgICBjb25u ZWN0b3ItPmZ1bmNzLT5maWxsX21vZGVzKGNvbm5lY3RvciwKPiA+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bW9kZV9jb25maWcubWF4X3dpZHRoLAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5tb2Rl X2NvbmZpZy5tYXhfaGVpZ2h0KTsKPiA+IC0gICAgICAgfQo+ID4gLQo+ID4gLSAgICAgICAvKiBk ZWxheWVkIHNvIHdlIGdldCBtb2RlcyByZWdhcmRsZXNzIG9mIHByZS1maWxsX21vZGVzIHN0YXRl ICovCj4gPiAtICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9k ZXMsIGhlYWQpCj4gPiAtICAgICAgICAgICAgICAgaWYgKGRybV9tb2RlX2V4cG9zZV90b191c2Vy c3BhY2UobW9kZSwgZmlsZV9wcml2KSkKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIG1vZGVf Y291bnQrKzsKPiA+IC0KPiA+IC0gICAgICAgb3V0X3Jlc3AtPmNvbm5lY3Rvcl9pZCA9IGNvbm5l Y3Rvci0+YmFzZS5pZDsKPiA+IC0gICAgICAgb3V0X3Jlc3AtPmNvbm5lY3Rvcl90eXBlID0gY29u bmVjdG9yLT5jb25uZWN0b3JfdHlwZTsKPiA+IC0gICAgICAgb3V0X3Jlc3AtPmNvbm5lY3Rvcl90 eXBlX2lkID0gY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZV9pZDsKPiA+IC0gICAgICAgb3V0X3Jl c3AtPm1tX3dpZHRoID0gY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW07Cj4gPiAtICAg ICAgIG91dF9yZXNwLT5tbV9oZWlnaHQgPSBjb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRf bW07Cj4gPiAtICAgICAgIG91dF9yZXNwLT5zdWJwaXhlbCA9IGNvbm5lY3Rvci0+ZGlzcGxheV9p bmZvLnN1YnBpeGVsX29yZGVyOwo+ID4gLSAgICAgICBvdXRfcmVzcC0+Y29ubmVjdGlvbiA9IGNv bm5lY3Rvci0+c3RhdHVzOwo+ID4gLQo+ID4gLSAgICAgICBkcm1fbW9kZXNldF9sb2NrKCZkZXYt Pm1vZGVfY29uZmlnLmNvbm5lY3Rpb25fbXV0ZXgsIE5VTEwpOwo+ID4gLSAgICAgICBlbmNvZGVy ID0gZHJtX2Nvbm5lY3Rvcl9nZXRfZW5jb2Rlcihjb25uZWN0b3IpOwo+ID4gLSAgICAgICBpZiAo ZW5jb2RlcikKPiA+IC0gICAgICAgICAgICAgICBvdXRfcmVzcC0+ZW5jb2Rlcl9pZCA9IGVuY29k ZXItPmJhc2UuaWQ7Cj4gPiAtICAgICAgIGVsc2UKPiA+IC0gICAgICAgICAgICAgICBvdXRfcmVz cC0+ZW5jb2Rlcl9pZCA9IDA7Cj4gPiAtCj4gPiAtICAgICAgIC8qCj4gPiAtICAgICAgICAqIFRo aXMgaW9jdGwgaXMgY2FsbGVkIHR3aWNlLCBvbmNlIHRvIGRldGVybWluZSBob3cgbXVjaCBzcGFj ZSBpcwo+ID4gLSAgICAgICAgKiBuZWVkZWQsIGFuZCB0aGUgMm5kIHRpbWUgdG8gZmlsbCBpdC4K PiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIGlmICgob3V0X3Jlc3AtPmNvdW50X21vZGVzID49 IG1vZGVfY291bnQpICYmIG1vZGVfY291bnQpIHsKPiA+IC0gICAgICAgICAgICAgICBjb3BpZWQg PSAwOwo+ID4gLSAgICAgICAgICAgICAgIG1vZGVfcHRyID0gKHN0cnVjdCBkcm1fbW9kZV9tb2Rl aW5mbyBfX3VzZXIgKikodW5zaWduZWQgbG9uZylvdXRfcmVzcC0+bW9kZXNfcHRyOwo+ID4gLSAg ICAgICAgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkobW9kZSwgJmNvbm5lY3Rvci0+bW9kZXMs IGhlYWQpIHsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGlmICghZHJtX21vZGVfZXhwb3Nl X3RvX3VzZXJzcGFjZShtb2RlLCBmaWxlX3ByaXYpKQo+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPiA+IC0KPiA+IC0gICAgICAgICAgICAgICAgICAgICAgIGRy bV9tb2RlX2NvbnZlcnRfdG9fdW1vZGUoJnVfbW9kZSwgbW9kZSk7Cj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY29weV90b191c2VyKG1vZGVfcHRyICsgY29waWVkLAo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdV9tb2RlLCBzaXplb2YodV9tb2Rl KSkpIHsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICB9Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQrKzsK PiA+IC0gICAgICAgICAgICAgICB9Cj4gPiAtICAgICAgIH0KPiA+IC0gICAgICAgb3V0X3Jlc3At PmNvdW50X21vZGVzID0gbW9kZV9jb3VudDsKPiA+IC0KPiA+IC0gICAgICAgcmV0ID0gZ2V0X3By b3BlcnRpZXMoJmNvbm5lY3Rvci0+YmFzZSwgZmlsZV9wcml2LT5hdG9taWMsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAodWludDMyX3QgX191c2VyICopKHVuc2lnbmVkIGxvbmcpKG91dF9y ZXNwLT5wcm9wc19wdHIpLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90IF9f dXNlciAqKSh1bnNpZ25lZCBsb25nKShvdXRfcmVzcC0+cHJvcF92YWx1ZXNfcHRyKSwKPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICZvdXRfcmVzcC0+Y291bnRfcHJvcHMpOwo+ID4gLSAgICAg ICBpZiAocmV0KQo+ID4gLSAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gLQo+ID4gLSAgICAg ICBpZiAoKG91dF9yZXNwLT5jb3VudF9lbmNvZGVycyA+PSBlbmNvZGVyc19jb3VudCkgJiYgZW5j b2RlcnNfY291bnQpIHsKPiA+IC0gICAgICAgICAgICAgICBjb3BpZWQgPSAwOwo+ID4gLSAgICAg ICAgICAgICAgIGVuY29kZXJfcHRyID0gKHVpbnQzMl90IF9fdXNlciAqKSh1bnNpZ25lZCBsb25n KShvdXRfcmVzcC0+ZW5jb2RlcnNfcHRyKTsKPiA+IC0gICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUjsgaSsrKSB7Cj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICBpZiAoY29ubmVjdG9yLT5lbmNvZGVyX2lkc1tpXSAhPSAwKSB7Cj4gPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRfdXNlcihjb25uZWN0b3ItPmVuY29k ZXJfaWRzW2ldLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW5jb2Rlcl9wdHIgKyBjb3BpZWQpKSB7Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVGQVVMVDsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWQrKzsKPiA+ IC0gICAgICAgICAgICAgICAgICAgICAgIH0KPiA+IC0gICAgICAgICAgICAgICB9Cj4gPiAtICAg ICAgIH0KPiA+IC0gICAgICAgb3V0X3Jlc3AtPmNvdW50X2VuY29kZXJzID0gZW5jb2RlcnNfY291 bnQ7Cj4gPiAtCj4gPiAtb3V0Ogo+ID4gLSAgICAgICBkcm1fbW9kZXNldF91bmxvY2soJmRldi0+ bW9kZV9jb25maWcuY29ubmVjdGlvbl9tdXRleCk7Cj4gPiAtCj4gPiAtICAgICAgIGRybV9jb25u ZWN0b3JfdW5yZWZlcmVuY2UoY29ubmVjdG9yKTsKPiA+IC1vdXRfdW5sb2NrOgo+ID4gLSAgICAg ICBtdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwo+ID4gLQo+ID4gLSAgICAg ICByZXR1cm4gcmV0Owo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgc3RydWN0IGRybV9jcnRjICpk cm1fZW5jb2Rlcl9nZXRfY3J0YyhzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4gPiAgewo+ ID4gICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwo+ID4gQEAgLTM5MjYs MTEzICszMDUwLDYgQEAgZXJyOgo+ID4gICAgICAgICByZXR1cm4gcmV0Owo+ID4gIH0KPiA+Cj4g PiAtLyoqCj4gPiAtICogZHJtX21vZGVfY29ubmVjdG9yX3NldF9wYXRoX3Byb3BlcnR5IC0gc2V0 IHRpbGUgcHJvcGVydHkgb24gY29ubmVjdG9yCj4gPiAtICogQGNvbm5lY3RvcjogY29ubmVjdG9y IHRvIHNldCBwcm9wZXJ0eSBvbi4KPiA+IC0gKiBAcGF0aDogcGF0aCB0byB1c2UgZm9yIHByb3Bl cnR5OyBtdXN0IG5vdCBiZSBOVUxMLgo+ID4gLSAqCj4gPiAtICogVGhpcyBjcmVhdGVzIGEgcHJv cGVydHkgdG8gZXhwb3NlIHRvIHVzZXJzcGFjZSB0byBzcGVjaWZ5IGEKPiA+IC0gKiBjb25uZWN0 b3IgcGF0aC4gVGhpcyBpcyBtYWlubHkgdXNlZCBmb3IgRGlzcGxheVBvcnQgTVNUIHdoZXJlCj4g PiAtICogY29ubmVjdG9ycyBoYXZlIGEgdG9wb2xvZ3kgYW5kIHdlIHdhbnQgdG8gYWxsb3cgdXNl cnNwYWNlIHRvIGdpdmUKPiA+IC0gKiB0aGVtIG1vcmUgbWVhbmluZ2Z1bCBuYW1lcy4KPiA+IC0g Kgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJu byBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ID4gLWludCBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3Bh dGhfcHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCkKPiA+IC17 Cj4gPiAtICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKPiA+ IC0gICAgICAgaW50IHJldDsKPiA+IC0KPiA+IC0gICAgICAgcmV0ID0gZHJtX3Byb3BlcnR5X3Jl cGxhY2VfZ2xvYmFsX2Jsb2IoZGV2LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmY29ubmVjdG9yLT5wYXRoX2Jsb2JfcHRyLAo+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocGF0aCkgKyAxLAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLAo+ ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVj dG9yLT5iYXNlLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkZXYtPm1vZGVfY29uZmlnLnBhdGhfcHJvcGVydHkpOwo+ID4gLSAgICAgICByZXR1cm4g cmV0Owo+ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcGF0 aF9wcm9wZXJ0eSk7Cj4gPiAtCj4gPiAtLyoqCj4gPiAtICogZHJtX21vZGVfY29ubmVjdG9yX3Nl dF90aWxlX3Byb3BlcnR5IC0gc2V0IHRpbGUgcHJvcGVydHkgb24gY29ubmVjdG9yCj4gPiAtICog QGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIHNldCBwcm9wZXJ0eSBvbi4KPiA+IC0gKgo+ID4gLSAq IFRoaXMgbG9va3MgdXAgdGhlIHRpbGUgaW5mb3JtYXRpb24gZm9yIGEgY29ubmVjdG9yLCBhbmQg Y3JlYXRlcyBhCj4gPiAtICogcHJvcGVydHkgZm9yIHVzZXJzcGFjZSB0byBwYXJzZSBpZiBpdCBl eGlzdHMuIFRoZSBwcm9wZXJ0eSBpcyBvZgo+ID4gLSAqIHRoZSBmb3JtIG9mIDggaW50ZWdlcnMg dXNpbmcgJzonIGFzIGEgc2VwYXJhdG9yLgo+ID4gLSAqCj4gPiAtICogUmV0dXJuczoKPiA+IC0g KiBaZXJvIG9uIHN1Y2Nlc3MsIGVycm5vIG9uIGZhaWx1cmUuCj4gPiAtICovCj4gPiAtaW50IGRy bV9tb2RlX2Nvbm5lY3Rvcl9zZXRfdGlsZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKQo+ID4gLXsKPiA+IC0gICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNv bm5lY3Rvci0+ZGV2Owo+ID4gLSAgICAgICBjaGFyIHRpbGVbMjU2XTsKPiA+IC0gICAgICAgaW50 IHJldDsKPiA+IC0KPiA+IC0gICAgICAgaWYgKCFjb25uZWN0b3ItPmhhc190aWxlKSB7Cj4gPiAt ICAgICAgICAgICAgICAgcmV0ICA9IGRybV9wcm9wZXJ0eV9yZXBsYWNlX2dsb2JhbF9ibG9iKGRl diwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmNvbm5lY3Rvci0+dGlsZV9ibG9iX3B0ciwKPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKPiA+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbm5l Y3Rvci0+YmFzZSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGV2LT5tb2RlX2NvbmZpZy50aWxlX3Byb3BlcnR5KTsKPiA+IC0gICAg ICAgICAgICAgICByZXR1cm4gcmV0Owo+ID4gLSAgICAgICB9Cj4gPiAtCj4gPiAtICAgICAgIHNu cHJpbnRmKHRpbGUsIDI1NiwgIiVkOiVkOiVkOiVkOiVkOiVkOiVkOiVkIiwKPiA+IC0gICAgICAg ICAgICAgICAgY29ubmVjdG9yLT50aWxlX2dyb3VwLT5pZCwgY29ubmVjdG9yLT50aWxlX2lzX3Np bmdsZV9tb25pdG9yLAo+ID4gLSAgICAgICAgICAgICAgICBjb25uZWN0b3ItPm51bV9oX3RpbGUs IGNvbm5lY3Rvci0+bnVtX3ZfdGlsZSwKPiA+IC0gICAgICAgICAgICAgICAgY29ubmVjdG9yLT50 aWxlX2hfbG9jLCBjb25uZWN0b3ItPnRpbGVfdl9sb2MsCj4gPiAtICAgICAgICAgICAgICAgIGNv bm5lY3Rvci0+dGlsZV9oX3NpemUsIGNvbm5lY3Rvci0+dGlsZV92X3NpemUpOwo+ID4gLQo+ID4g LSAgICAgICByZXQgPSBkcm1fcHJvcGVydHlfcmVwbGFjZV9nbG9iYWxfYmxvYihkZXYsCj4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0b3It PnRpbGVfYmxvYl9wdHIsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cmxlbih0aWxlKSArIDEsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRpbGUsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZjb25uZWN0b3ItPmJhc2UsCj4gPiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bW9kZV9jb25maWcudGlsZV9w cm9wZXJ0eSk7Cj4gPiAtICAgICAgIHJldHVybiByZXQ7Cj4gPiAtfQo+ID4gLUVYUE9SVF9TWU1C T0woZHJtX21vZGVfY29ubmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KTsKPiA+IC0KPiA+IC0vKioK PiA+IC0gKiBkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkgLSB1cGRhdGUg dGhlIGVkaWQgcHJvcGVydHkgb2YgYSBjb25uZWN0b3IKPiA+IC0gKiBAY29ubmVjdG9yOiBkcm0g Y29ubmVjdG9yCj4gPiAtICogQGVkaWQ6IG5ldyB2YWx1ZSBvZiB0aGUgZWRpZCBwcm9wZXJ0eQo+ ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGJsb2IgbW9kZXNldCBv YmplY3QgYW5kIGFzc2lnbnMgaXRzIGlkIHRvIHRoZQo+ID4gLSAqIGNvbm5lY3RvcidzIGVkaWQg cHJvcGVydHkuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiA+IC0gKi8KPiA+IC1pbnQgZHJtX21vZGVf Y29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBlZGlkICplZGlkKQo+ID4gLXsKPiA+IC0gICAgICAgc3RydWN0IGRybV9kZXZp Y2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ID4gLSAgICAgICBzaXplX3Qgc2l6ZSA9IDA7Cj4g PiAtICAgICAgIGludCByZXQ7Cj4gPiAtCj4gPiAtICAgICAgIC8qIGlnbm9yZSByZXF1ZXN0cyB0 byBzZXQgZWRpZCB3aGVuIG92ZXJyaWRkZW4gKi8KPiA+IC0gICAgICAgaWYgKGNvbm5lY3Rvci0+ b3ZlcnJpZGVfZWRpZCkKPiA+IC0gICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+IC0KPiA+IC0g ICAgICAgaWYgKGVkaWQpCj4gPiAtICAgICAgICAgICAgICAgc2l6ZSA9IEVESURfTEVOR1RIICog KDEgKyBlZGlkLT5leHRlbnNpb25zKTsKPiA+IC0KPiA+IC0gICAgICAgcmV0ID0gZHJtX3Byb3Bl cnR5X3JlcGxhY2VfZ2xvYmFsX2Jsb2IoZGV2LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVjdG9yLT5lZGlkX2Jsb2JfcHRyLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGlkLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29ubmVjdG9yLT5i YXNlLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZXYtPm1vZGVfY29uZmlnLmVkaWRfcHJvcGVydHkpOwo+ID4gLSAgICAgICByZXR1cm4gcmV0Owo+ ID4gLX0KPiA+IC1FWFBPUlRfU1lNQk9MKGRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9w cm9wZXJ0eSk7Cj4gPiAtCj4gPiAgLyogU29tZSBwcm9wZXJ0aWVzIGNvdWxkIHJlZmVyIHRvIGR5 bmFtaWMgcmVmY250J2Qgb2JqZWN0cywgb3IgdGhpbmdzIHRoYXQKPiA+ICAgKiBuZWVkIHNwZWNp YWwgbG9ja2luZyB0byBoYW5kbGUgbGlmZXRpbWUgaXNzdWVzIChpZS4gdG8gZW5zdXJlIHRoZSBw cm9wCj4gPiAgICogdmFsdWUgZG9lc24ndCBiZWNvbWUgaW52YWxpZCBwYXJ0IHdheSB0aHJvdWdo IHRoZSBwcm9wZXJ0eSB1cGRhdGUgZHVlIHRvCj4gPiBAQCAtNDEwOSw1NCArMzEyNiw2IEBAIHZv aWQgZHJtX3Byb3BlcnR5X2NoYW5nZV92YWxpZF9wdXQoc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJv cGVydHksCj4gPiAgICAgICAgICAgICAgICAgZHJtX3Byb3BlcnR5X3VucmVmZXJlbmNlX2Jsb2Io b2JqX3RvX2Jsb2IocmVmKSk7Cj4gPiAgfQo+ID4KPiA+IC0vKioKPiA+IC0gKiBkcm1fbW9kZV9j b25uZWN0b3JfcHJvcGVydHlfc2V0X2lvY3RsIC0gc2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGEg Y29ubmVjdG9yIHByb3BlcnR5Cj4gPiAtICogQGRldjogRFJNIGRldmljZQo+ID4gLSAqIEBkYXRh OiBpb2N0bCBkYXRhCj4gPiAtICogQGZpbGVfcHJpdjogRFJNIGZpbGUgaW5mbwo+ID4gLSAqCj4g PiAtICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBhIGNvbm5lY3Rv cnMncyBwcm9wZXJ0eS4gSXQgYWxzbwo+ID4gLSAqIGNhbGxzIGludG8gYSBkcml2ZXIncyAtPnNl dF9wcm9wZXJ0eSBjYWxsYmFjayB0byB1cGRhdGUgdGhlIGhhcmR3YXJlIHN0YXRlCj4gPiAtICoK PiA+IC0gKiBDYWxsZWQgYnkgdGhlIHVzZXIgdmlhIGlvY3RsLgo+ID4gLSAqCj4gPiAtICogUmV0 dXJuczoKPiA+IC0gKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUu Cj4gPiAtICovCj4gPiAtaW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfaW9jdGwo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQo+ID4gLXsK PiA+IC0gICAgICAgc3RydWN0IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkgKmNvbm5f c2V0X3Byb3AgPSBkYXRhOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX21vZGVfb2JqX3NldF9wcm9w ZXJ0eSBvYmpfc2V0X3Byb3AgPSB7Cj4gPiAtICAgICAgICAgICAgICAgLnZhbHVlID0gY29ubl9z ZXRfcHJvcC0+dmFsdWUsCj4gPiAtICAgICAgICAgICAgICAgLnByb3BfaWQgPSBjb25uX3NldF9w cm9wLT5wcm9wX2lkLAo+ID4gLSAgICAgICAgICAgICAgIC5vYmpfaWQgPSBjb25uX3NldF9wcm9w LT5jb25uZWN0b3JfaWQsCj4gPiAtICAgICAgICAgICAgICAgLm9ial90eXBlID0gRFJNX01PREVf T0JKRUNUX0NPTk5FQ1RPUgo+ID4gLSAgICAgICB9Owo+ID4gLQo+ID4gLSAgICAgICAvKiBJdCBk b2VzIGFsbCB0aGUgbG9ja2luZyBhbmQgY2hlY2tpbmcgd2UgbmVlZCAqLwo+ID4gLSAgICAgICBy ZXR1cm4gZHJtX21vZGVfb2JqX3NldF9wcm9wZXJ0eV9pb2N0bChkZXYsICZvYmpfc2V0X3Byb3As IGZpbGVfcHJpdik7Cj4gPiAtfQo+ID4gLQo+ID4gLXN0YXRpYyBpbnQgZHJtX21vZGVfY29ubmVj dG9yX3NldF9vYmpfcHJvcChzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmosCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcGVydHksCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDY0X3QgdmFsdWUpCj4gPiAtewo+ID4gLSAgICAgICBpbnQgcmV0ID0gLUVJTlZBTDsKPiA+ IC0gICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IG9ial90b19jb25uZWN0 b3Iob2JqKTsKPiA+IC0KPiA+IC0gICAgICAgLyogRG8gRFBNUyBvdXJzZWx2ZXMgKi8KPiA+IC0g ICAgICAgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+ZGV2LT5tb2RlX2NvbmZpZy5kcG1zX3By b3BlcnR5KSB7Cj4gPiAtICAgICAgICAgICAgICAgcmV0ID0gKCpjb25uZWN0b3ItPmZ1bmNzLT5k cG1zKShjb25uZWN0b3IsIChpbnQpdmFsdWUpOwo+ID4gLSAgICAgICB9IGVsc2UgaWYgKGNvbm5l Y3Rvci0+ZnVuY3MtPnNldF9wcm9wZXJ0eSkKPiA+IC0gICAgICAgICAgICAgICByZXQgPSBjb25u ZWN0b3ItPmZ1bmNzLT5zZXRfcHJvcGVydHkoY29ubmVjdG9yLCBwcm9wZXJ0eSwgdmFsdWUpOwo+ ID4gLQo+ID4gLSAgICAgICAvKiBzdG9yZSB0aGUgcHJvcGVydHkgdmFsdWUgaWYgc3VjY2Vzc2Z1 bCAqLwo+ID4gLSAgICAgICBpZiAoIXJldCkKPiA+IC0gICAgICAgICAgICAgICBkcm1fb2JqZWN0 X3Byb3BlcnR5X3NldF92YWx1ZSgmY29ubmVjdG9yLT5iYXNlLCBwcm9wZXJ0eSwgdmFsdWUpOwo+ ID4gLSAgICAgICByZXR1cm4gcmV0Owo+ID4gLX0KPiA+IC0KPiA+ICBzdGF0aWMgaW50IGRybV9t b2RlX2NydGNfc2V0X29ial9wcm9wKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaiwKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAq cHJvcGVydHksCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90IHZhbHVlKQo+ID4gQEAgLTQyMzgsNyArMzIwNyw3IEBAIGludCBkcm1fbW9kZV9vYmpfZ2V0 X3Byb3BlcnRpZXNfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiA+ ICAgICAgICAgICAgICAgICBnb3RvIG91dF91bnJlZjsKPiA+ICAgICAgICAgfQo+ID4KPiA+IC0g ICAgICAgcmV0ID0gZ2V0X3Byb3BlcnRpZXMob2JqLCBmaWxlX3ByaXYtPmF0b21pYywKPiA+ICsg ICAgICAgcmV0ID0gZHJtX21vZGVfb2JqZWN0X2dldF9wcm9wZXJ0aWVzKG9iaiwgZmlsZV9wcml2 LT5hdG9taWMsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3QgX191c2VyICop KHVuc2lnbmVkIGxvbmcpKGFyZy0+cHJvcHNfcHRyKSwKPiA+ICAgICAgICAgICAgICAgICAgICAg ICAgICh1aW50NjRfdCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykoYXJnLT5wcm9wX3ZhbHVlc19w dHIpLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgJmFyZy0+Y291bnRfcHJvcHMpOwo+ID4g QEAgLTQyNTAsMjIgKzMyMTksNiBAQCBvdXQ6Cj4gPiAgICAgICAgIHJldHVybiByZXQ7Cj4gPiAg fQo+ID4KPiA+IC0vKioKPiA+IC0gKiBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5X2lvY3RsIC0g c2V0IHRoZSBjdXJyZW50IHZhbHVlIG9mIGFuIG9iamVjdCdzIHByb3BlcnR5Cj4gPiAtICogQGRl djogRFJNIGRldmljZQo+ID4gLSAqIEBkYXRhOiBpb2N0bCBkYXRhCj4gPiAtICogQGZpbGVfcHJp djogRFJNIGZpbGUgaW5mbwo+ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBj dXJyZW50IHZhbHVlIGZvciBhbiBvYmplY3QncyBwcm9wZXJ0eS4gSXQgYWxzbyBjYWxscwo+ID4g LSAqIGludG8gYSBkcml2ZXIncyAtPnNldF9wcm9wZXJ0eSBjYWxsYmFjayB0byB1cGRhdGUgdGhl IGhhcmR3YXJlIHN0YXRlLgo+ID4gLSAqIENvbXBhcmVkIHRvIHRoZSBjb25uZWN0b3Igc3BlY2lm aWMgaW9jdGwgdGhpcyBvbmUgaXMgZXh0ZW5kZWQgdG8gYWxzbyB3b3JrIG9uCj4gPiAtICogY3J0 YyBhbmQgcGxhbmUgb2JqZWN0cy4KPiA+IC0gKgo+ID4gLSAqIENhbGxlZCBieSB0aGUgdXNlciB2 aWEgaW9jdGwuCj4gPiAtICoKPiA+IC0gKiBSZXR1cm5zOgo+ID4gLSAqIFplcm8gb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4KPiA+IC0gKi8KPiA+ICBpbnQgZHJtX21vZGVf b2JqX3NldF9wcm9wZXJ0eV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9maWxl ICpmaWxlX3ByaXYpCj4gPiAgewo+ID4gQEAgLTQzMzEsNDcgKzMyODQsNiBAQCBvdXQ6Cj4gPiAg fQo+ID4KPiA+ICAvKioKPiA+IC0gKiBkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIg LSBhdHRhY2ggYSBjb25uZWN0b3IgdG8gYW4gZW5jb2Rlcgo+ID4gLSAqIEBjb25uZWN0b3I6IGNv bm5lY3RvciB0byBhdHRhY2gKPiA+IC0gKiBAZW5jb2RlcjogZW5jb2RlciB0byBhdHRhY2ggQGNv bm5lY3RvciB0bwo+ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlvbiBsaW5rcyB1cCBhIGNvbm5l Y3RvciB0byBhbiBlbmNvZGVyLiBOb3RlIHRoYXQgdGhlIHJvdXRpbmcKPiA+IC0gKiByZXN0cmlj dGlvbnMgYmV0d2VlbiBlbmNvZGVycyBhbmQgY3J0Y3MgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNl IHRocm91Z2ggdGhlCj4gPiAtICogcG9zc2libGVfY2xvbmVzIGFuZCBwb3NzaWJsZV9jcnRjcyBi aXRtYXNrcy4KPiA+IC0gKgo+ID4gLSAqIFJldHVybnM6Cj4gPiAtICogWmVybyBvbiBzdWNjZXNz LCBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlLgo+ID4gLSAqLwo+ID4gLWludCBkcm1fbW9kZV9j b25uZWN0b3JfYXR0YWNoX2VuY29kZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKQo+ID4gLXsKPiA+IC0gICAgICAgaW50IGk7Cj4gPiAtCj4gPiAtICAgICAg IC8qCj4gPiAtICAgICAgICAqIEluIHRoZSBwYXN0LCBkcml2ZXJzIGhhdmUgYXR0ZW1wdGVkIHRv IG1vZGVsIHRoZSBzdGF0aWMgYXNzb2NpYXRpb24KPiA+IC0gICAgICAgICogb2YgY29ubmVjdG9y IHRvIGVuY29kZXIgaW4gc2ltcGxlIGNvbm5lY3Rvci9lbmNvZGVyIGRldmljZXMgdXNpbmcgYQo+ ID4gLSAgICAgICAgKiBkaXJlY3QgYXNzaWdubWVudCBvZiBjb25uZWN0b3ItPmVuY29kZXIgPSBl bmNvZGVyLiBUaGlzIGNvbm5lY3Rpb24KPiA+IC0gICAgICAgICogaXMgYSBsb2dpY2FsIG9uZSBh bmQgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjb3JlLCBzbyBkcml2ZXJzIGFyZQo+ID4gLSAg ICAgICAgKiBleHBlY3RlZCBub3QgdG8gbWVzcyB3aXRoIHRoaXMuCj4gPiAtICAgICAgICAqCj4g PiAtICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZXJyb3IgcmV0dXJuIHNob3VsZCd2ZSBiZWVuIGVu b3VnaCBoZXJlLCBidXQgYSBsYXJnZQo+ID4gLSAgICAgICAgKiBtYWpvcml0eSBvZiBkcml2ZXJz IGlnbm9yZXMgdGhlIHJldHVybiB2YWx1ZSwgc28gYWRkIGluIGEgYmlnIFdBUk4KPiA+IC0gICAg ICAgICogdG8gZ2V0IHBlb3BsZSdzIGF0dGVudGlvbi4KPiA+IC0gICAgICAgICovCj4gPiAtICAg ICAgIGlmIChXQVJOX09OKGNvbm5lY3Rvci0+ZW5jb2RlcikpCj4gPiAtICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Cj4gPiAtCj4gPiAtICAgICAgIGZvciAoaSA9IDA7IGkgPCBEUk1fQ09O TkVDVE9SX01BWF9FTkNPREVSOyBpKyspIHsKPiA+IC0gICAgICAgICAgICAgICBpZiAoY29ubmVj dG9yLT5lbmNvZGVyX2lkc1tpXSA9PSAwKSB7Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICBj b25uZWN0b3ItPmVuY29kZXJfaWRzW2ldID0gZW5jb2Rlci0+YmFzZS5pZDsKPiA+IC0gICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gLSAgICAgICAgICAgICAgIH0KPiA+IC0gICAg ICAgfQo+ID4gLSAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+IC19Cj4gPiAtRVhQT1JUX1NZTUJP TChkcm1fbW9kZV9jb25uZWN0b3JfYXR0YWNoX2VuY29kZXIpOwo+ID4gLQo+ID4gLS8qKgo+ID4g ICAqIGRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3NpemUgLSBzZXQgdGhlIGdhbW1hIHRhYmxlIHNp emUKPiA+ICAgKiBAY3J0YzogQ1JUQyB0byBzZXQgdGhlIGdhbW1hIHRhYmxlIHNpemUgZm9yCj4g PiAgICogQGdhbW1hX3NpemU6IHNpemUgb2YgdGhlIGdhbW1hIHRhYmxlCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmggYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2NydGNfaW50ZXJuYWwuaAo+ID4gaW5kZXggNWYxZTlmZjcxYWU0Li43NzI1ZDBmYTc4Nzcg MTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaW50ZXJuYWwuaAo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2ludGVybmFsLmgKPiA+IEBAIC0zMyw4ICsz Myw2IEBACj4gPgo+ID4KPiA+ICAvKiBkcm1fY3J0Yy5jICovCj4gPiAtdm9pZCBkcm1fY29ubmVj dG9yX2lkYV9pbml0KHZvaWQpOwo+ID4gLXZvaWQgZHJtX2Nvbm5lY3Rvcl9pZGFfZGVzdHJveSh2 b2lkKTsKPiA+ICBpbnQgZHJtX21vZGVfb2JqZWN0X2dldF9yZWcoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX21vZGVfb2Jq ZWN0ICpvYmosCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb2JqX3R5 cGUsCj4gPiBAQCAtNDgsNiArNDYsMTAgQEAgc3RydWN0IGRybV9tb2RlX29iamVjdCAqX19kcm1f bW9kZV9vYmplY3RfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpZCwgdWludDMyX3Qg dHlwZSk7Cj4gPiAgdm9pZCBkcm1fbW9kZV9vYmplY3RfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X21vZGVfb2JqZWN0ICpvYmplY3QpOwo+ID4gK2ludCBkcm1fbW9kZV9vYmplY3RfZ2V0X3Byb3Bl cnRpZXMoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLCBib29sIGF0b21pYywKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgX191c2VyICpwcm9wX3B0ciwK PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgX191c2VyICpw cm9wX3ZhbHVlcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3QgKmFyZ19jb3VudF9wcm9wcyk7Cj4gPiAgYm9vbCBkcm1fcHJvcGVydHlfY2hhbmdlX3ZhbGlk X2dldChzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiA+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsdWUsCj4gPiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKipyZWYpOwo+ID4gQEAgLTg1 LDggKzg3LDYgQEAgaW50IGRybV9tb2RlX2dldHBsYW5lX3JlcyhzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2LCB2b2lkICpkYXRhLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGVfcHJpdik7Cj4gPiAgaW50IGRybV9tb2RlX2dldGNydGMoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiA+ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBk cm1fZmlsZSAqZmlsZV9wcml2KTsKPiA+IC1pbnQgZHJtX21vZGVfZ2V0Y29ubmVjdG9yKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiA+ICBpbnQgZHJtX21vZGVfc2V0Y3J0 YyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gICAgICAgICAgICAgICAgICAgICAgdm9pZCAq ZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ID4gIGludCBkcm1fbW9kZV9nZXRw bGFuZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gQEAgLTEwNSw4ICsxMDUsNiBAQCBpbnQg ZHJtX21vZGVfY3JlYXRlYmxvYl9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpOwo+ID4gIGludCBkcm1fbW9kZV9kZXN0cm95YmxvYl9pb2N0bChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRh dGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiA+IC1pbnQgZHJtX21vZGVfY29ubmVj dG9yX3Byb3BlcnR5X3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpOwo+ID4gIGludCBkcm1fbW9kZV9nZXRlbmNvZGVyKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7Cj4gPiAgaW50IGRybV9tb2RlX2dhbW1hX2dldF9p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gQEAgLTExNyw2ICsxMTUsMjIgQEAgaW50 IGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gIGlu dCBkcm1fbW9kZV9wYWdlX2ZsaXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXYpOwo+ID4KPiA+ICsvKiBkcm1fY29ubmVjdG9yLmMgKi8KPiA+ICt2b2lkIGRybV9j b25uZWN0b3JfaWRhX2luaXQodm9pZCk7Cj4gPiArdm9pZCBkcm1fY29ubmVjdG9yX2lkYV9kZXN0 cm95KHZvaWQpOwo+ID4gK3ZvaWQgZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyX2FsbChzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiA+ICtpbnQgZHJtX2Nvbm5lY3Rvcl9yZWdpc3Rlcl9hbGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAraW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfb2Jq X3Byb3Aoc3RydWN0IGRybV9tb2RlX29iamVjdCAqb2JqLAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSk7Cj4gPiAraW50 IGRybV9jb25uZWN0b3JfY3JlYXRlX3N0YW5kYXJkX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZp Y2UgKmRldik7Cj4gPiArCj4gPiArLyogSU9DVEwgKi8KPiA+ICtpbnQgZHJtX21vZGVfY29ubmVj dG9yX3Byb3BlcnR5X3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc3RydWN0IGRy bV9maWxlICpmaWxlX3ByaXYpOwo+ID4gK2ludCBkcm1fbW9kZV9nZXRjb25uZWN0b3Ioc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0 YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwo+ID4gKwo+ID4gIC8qIGRybV9mcmFtZWJ1 ZmZlci5jICovCj4gPiAgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4gPiAgZHJtX2ludGVybmFs X2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCBiL2luY2x1ZGUvZHJtL2RybV9jb25uZWN0 b3IuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWMy YmVhMGIxYjM4Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY29u bmVjdG9yLmgKPiA+IEBAIC0wLDAgKzEsNjQ0IEBACj4gPiArLyoKPiA+ICsgKiBDb3B5cmlnaHQg KGMpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KPiA+ICsgKgo+ID4gKyAqIFBlcm1pc3Npb24gdG8g dXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5k IGl0cwo+ID4gKyAqIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFu dGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Cj4gPiArICogdGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdo dAo+ID4gKyAqIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3Vw cG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQKPiA+ICsgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBj b3B5cmlnaHQgaG9sZGVycyBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgo+ID4gKyAqIHB1 YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91 dCBzcGVjaWZpYywKPiA+ICsgKiB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaGUgY29weXJp Z2h0IGhvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbnMKPiA+ICsgKiBhYm91dCB0aGUgc3Vp dGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRl ZCAiYXMKPiA+ICsgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCj4g PiArICoKPiA+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJ RVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiA+ICsgKiBJTkNMVURJTkcgQUxMIElN UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCj4g PiArICogRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IFNQRUNJQUwsIElORElSRUNUIE9SCj4gPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFO WSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsCj4gPiArICog REFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElH RU5DRSBPUiBPVEhFUgo+ID4gKyAqIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UKPiA+ICsgKiBPRiBUSElT IFNPRlRXQVJFLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19EUk1fQ09OTkVDVE9SX0hf Xwo+ID4gKyNkZWZpbmUgX19EUk1fQ09OTkVDVE9SX0hfXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxs aW51eC9saXN0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4gPiArI2luY2x1ZGUg PGRybS9kcm1fbW9kZXNldC5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBl cl9mdW5jczsKPiA+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiA+ICtzdHJ1Y3QgZHJtX2NydGM7Cj4g PiArc3RydWN0IGRybV9lbmNvZGVyOwo+ID4gK3N0cnVjdCBkcm1fcHJvcGVydHk7Cj4gPiArc3Ry dWN0IGRybV9wcm9wZXJ0eV9ibG9iOwo+ID4gK3N0cnVjdCBlZGlkOwo+ID4gKwo+ID4gK2VudW0g ZHJtX2Nvbm5lY3Rvcl9mb3JjZSB7Cj4gPiArICAgICAgIERSTV9GT1JDRV9VTlNQRUNJRklFRCwK PiA+ICsgICAgICAgRFJNX0ZPUkNFX09GRiwKPiA+ICsgICAgICAgRFJNX0ZPUkNFX09OLCAgICAg ICAgIC8qIGZvcmNlIG9uIGFuYWxvZyBwYXJ0IG5vcm1hbGx5ICovCj4gPiArICAgICAgIERSTV9G T1JDRV9PTl9ESUdJVEFMLCAvKiBmb3IgRFZJLUkgdXNlIGRpZ2l0YWwgY29ubmVjdG9yICovCj4g PiArfTsKPiA+ICsKPiA+ICtlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHsKPiA+ICsgICAgICAg Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQgPSAxLAo+ID4gKyAgICAgICBjb25uZWN0b3Jfc3Rh dHVzX2Rpc2Nvbm5lY3RlZCA9IDIsCj4gPiArICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93 biA9IDMsCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIHN1YnBpeGVsX29yZGVyIHsKPiA+ICsgICAg ICAgU3ViUGl4ZWxVbmtub3duID0gMCwKPiA+ICsgICAgICAgU3ViUGl4ZWxIb3Jpem9udGFsUkdC LAo+ID4gKyAgICAgICBTdWJQaXhlbEhvcml6b250YWxCR1IsCj4gPiArICAgICAgIFN1YlBpeGVs VmVydGljYWxSR0IsCj4gPiArICAgICAgIFN1YlBpeGVsVmVydGljYWxCR1IsCj4gPiArICAgICAg IFN1YlBpeGVsTm9uZSwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qCj4gPiArICogRGVzY3JpYmVzIGEg Z2l2ZW4gZGlzcGxheSAoZS5nLiBDUlQgb3IgZmxhdCBwYW5lbCkgYW5kIGl0cyBsaW1pdGF0aW9u cy4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyB7Cj4gPiArICAgICAgIGNo YXIgbmFtZVtEUk1fRElTUExBWV9JTkZPX0xFTl07Cj4gPiArCj4gPiArICAgICAgIC8qIFBoeXNp Y2FsIHNpemUgKi8KPiA+ICsgICAgICAgIHVuc2lnbmVkIGludCB3aWR0aF9tbTsKPiA+ICsgICAg ICAgdW5zaWduZWQgaW50IGhlaWdodF9tbTsKPiA+ICsKPiA+ICsgICAgICAgLyogQ2xvY2sgbGlt aXRzIEZJWE1FOiBzdG9yYWdlIGZvcm1hdCAqLwo+ID4gKyAgICAgICB1bnNpZ25lZCBpbnQgbWlu X3ZmcmVxLCBtYXhfdmZyZXE7Cj4gPiArICAgICAgIHVuc2lnbmVkIGludCBtaW5faGZyZXEsIG1h eF9oZnJlcTsKPiA+ICsgICAgICAgdW5zaWduZWQgaW50IHBpeGVsX2Nsb2NrOwo+ID4gKyAgICAg ICB1bnNpZ25lZCBpbnQgYnBjOwo+ID4gKwo+ID4gKyAgICAgICBlbnVtIHN1YnBpeGVsX29yZGVy IHN1YnBpeGVsX29yZGVyOwo+ID4gKwo+ID4gKyNkZWZpbmUgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0 NDQgICAgICAgICAgICAgICAgKDE8PDApCj4gPiArI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1lD UkNCNDQ0ICAgICAgKDE8PDEpCj4gPiArI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1lDUkNCNDIy ICAgICAgKDE8PDIpCj4gPiArCj4gPiArICAgICAgIHUzMiBjb2xvcl9mb3JtYXRzOwo+ID4gKwo+ ID4gKyAgICAgICBjb25zdCB1MzIgKmJ1c19mb3JtYXRzOwo+ID4gKyAgICAgICB1bnNpZ25lZCBp bnQgbnVtX2J1c19mb3JtYXRzOwo+ID4gKwo+ID4gKyNkZWZpbmUgRFJNX0JVU19GTEFHX0RFX0xP VyAgICAgICAgICAgICgxPDwwKQo+ID4gKyNkZWZpbmUgRFJNX0JVU19GTEFHX0RFX0hJR0ggICAg ICAgICAgICgxPDwxKQo+ID4gKy8qIGRyaXZlIGRhdGEgb24gcG9zLiBlZGdlICovCj4gPiArI2Rl ZmluZSBEUk1fQlVTX0ZMQUdfUElYREFUQV9QT1NFREdFICAgKDE8PDIpCj4gPiArLyogZHJpdmUg ZGF0YSBvbiBuZWcuIGVkZ2UgKi8KPiA+ICsjZGVmaW5lIERSTV9CVVNfRkxBR19QSVhEQVRBX05F R0VER0UgICAoMTw8MykKPiA+ICsKPiA+ICsgICAgICAgdTMyIGJ1c19mbGFnczsKPiA+ICsKPiA+ ICsgICAgICAgLyogTWFzayBvZiBzdXBwb3J0ZWQgaGRtaSBkZWVwIGNvbG9yIG1vZGVzICovCj4g PiArICAgICAgIHU4IGVkaWRfaGRtaV9kY19tb2RlczsKPiA+ICsKPiA+ICsgICAgICAgdTggY2Vh X3JldjsKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlIC0gbXV0YWJsZSBjb25uZWN0b3Igc3RhdGUKPiA+ICsgKiBAY29ubmVjdG9yOiBiYWNr cG9pbnRlciB0byB0aGUgY29ubmVjdG9yCj4gPiArICogQGNydGM6IENSVEMgdG8gY29ubmVjdCBj b25uZWN0b3IgdG8sIE5VTEwgaWYgZGlzYWJsZWQKPiA+ICsgKiBAYmVzdF9lbmNvZGVyOiBjYW4g YmUgdXNlZCBieSBoZWxwZXJzIGFuZCBkcml2ZXJzIHRvIHNlbGVjdCB0aGUgZW5jb2Rlcgo+ID4g KyAqIEBzdGF0ZTogYmFja3BvaW50ZXIgdG8gZ2xvYmFsIGRybV9hdG9taWNfc3RhdGUKPiA+ICsg Ki8KPiA+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSB7Cj4gPiArICAgICAgIHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiArCj4gPiArICAgICAgIHN0cnVjdCBkcm1fY3J0 YyAqY3J0YzsgIC8qIGRvIG5vdCB3cml0ZSBkaXJlY3RseSwgdXNlIGRybV9hdG9taWNfc2V0X2Ny dGNfZm9yX2Nvbm5lY3RvcigpICovCj4gPiArCj4gPiArICAgICAgIHN0cnVjdCBkcm1fZW5jb2Rl ciAqYmVzdF9lbmNvZGVyOwo+ID4gKwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0 ZSAqc3RhdGU7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBzdHJ1Y3QgZHJtX2Nvbm5l Y3Rvcl9mdW5jcyAtIGNvbnRyb2wgY29ubmVjdG9ycyBvbiBhIGdpdmVuIGRldmljZQo+ID4gKyAq Cj4gPiArICogRWFjaCBDUlRDIG1heSBoYXZlIG9uZSBvciBtb3JlIGNvbm5lY3RvcnMgYXR0YWNo ZWQgdG8gaXQuICBUaGUgZnVuY3Rpb25zCj4gPiArICogYmVsb3cgYWxsb3cgdGhlIGNvcmUgRFJN IGNvZGUgdG8gY29udHJvbCBjb25uZWN0b3JzLCBlbnVtZXJhdGUgYXZhaWxhYmxlIG1vZGVzLAo+ ID4gKyAqIGV0Yy4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyB7Cj4g PiArICAgICAgIC8qKgo+ID4gKyAgICAgICAgKiBAZHBtczoKPiA+ICsgICAgICAgICoKPiA+ICsg ICAgICAgICogTGVnYWN5IGVudHJ5IHBvaW50IHRvIHNldCB0aGUgcGVyLWNvbm5lY3RvciBEUE1T IHN0YXRlLiBMZWdhY3kgRFBNUwo+ID4gKyAgICAgICAgKiBpcyBleHBvc2VkIGFzIGEgc3RhbmRh cmQgcHJvcGVydHkgb24gdGhlIGNvbm5lY3RvciwgYnV0IGRpdmVydGVkIHRvCj4gPiArICAgICAg ICAqIHRoaXMgY2FsbGJhY2sgaW4gdGhlIGRybSBjb3JlLiBOb3RlIHRoYXQgYXRvbWljIGRyaXZl cnMgZG9uJ3QKPiA+ICsgICAgICAgICogaW1wbGVtZW50IHRoZSA0IGxldmVsIERQTVMgc3VwcG9y dCBvbiB0aGUgY29ubmVjdG9yIGFueSBtb3JlLCBidXQKPiA+ICsgICAgICAgICogaW5zdGVhZCBv bmx5IGhhdmUgYW4gb24vb2ZmICJBQ1RJVkUiIHByb3BlcnR5IG9uIHRoZSBDUlRDIG9iamVjdC4K PiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRHJpdmVycyBpbXBsZW1lbnRpbmcgYXRvbWlj IG1vZGVzZXQgc2hvdWxkIHVzZQo+ID4gKyAgICAgICAgKiBkcm1fYXRvbWljX2hlbHBlcl9jb25u ZWN0b3JfZHBtcygpIHRvIGltcGxlbWVudCB0aGlzIGhvb2suCj4gPiArICAgICAgICAqCj4gPiAr ICAgICAgICAqIFJFVFVSTlM6Cj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIDAgb24gc3Vj Y2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KPiA+ICsgICAgICAgICov Cj4gPiArICAgICAgIGludCAoKmRwbXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is IGludCBtb2RlKTsKPiA+ICsKPiA+ICsgICAgICAgLyoqCj4gPiArICAgICAgICAqIEByZXNldDoK PiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogUmVzZXQgY29ubmVjdG9yIGhhcmR3YXJlIGFu ZCBzb2Z0d2FyZSBzdGF0ZSB0byBvZmYuIFRoaXMgZnVuY3Rpb24gaXNuJ3QKPiA+ICsgICAgICAg ICogY2FsbGVkIGJ5IHRoZSBjb3JlIGRpcmVjdGx5LCBvbmx5IHRocm91Z2ggZHJtX21vZGVfY29u ZmlnX3Jlc2V0KCkuCj4gPiArICAgICAgICAqIEl0J3Mgbm90IGEgaGVscGVyIGhvb2sgb25seSBm b3IgaGlzdG9yaWNhbCByZWFzb25zLgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBBdG9t aWMgZHJpdmVycyBjYW4gdXNlIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9yZXNldCgpIHRv IHJlc2V0Cj4gPiArICAgICAgICAqIGF0b21pYyBzdGF0ZSB1c2luZyB0aGlzIGhvb2suCj4gPiAr ICAgICAgICAqLwo+ID4gKyAgICAgICB2b2lkICgqcmVzZXQpKHN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uZWN0b3IpOwo+ID4gKwo+ID4gKyAgICAgICAvKioKPiA+ICsgICAgICAgICogQGRldGVj dDoKPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogQ2hlY2sgdG8gc2VlIGlmIGFueXRoaW5n IGlzIGF0dGFjaGVkIHRvIHRoZSBjb25uZWN0b3IuIFRoZSBwYXJhbWV0ZXIKPiA+ICsgICAgICAg ICogZm9yY2UgaXMgc2V0IHRvIGZhbHNlIHdoaWxzdCBwb2xsaW5nLCB0cnVlIHdoZW4gY2hlY2tp bmcgdGhlCj4gPiArICAgICAgICAqIGNvbm5lY3RvciBkdWUgdG8gYSB1c2VyIHJlcXVlc3QuIGZv cmNlIGNhbiBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8KPiA+ICsgICAgICAgICogYXZvaWQgZXhw ZW5zaXZlLCBkZXN0cnVjdGl2ZSBvcGVyYXRpb25zIGR1cmluZyBhdXRvbWF0ZWQgcHJvYmluZy4K PiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRklYTUU6Cj4gPiArICAgICAgICAqCj4gPiAr ICAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGhvb2sgaXMgb25seSBjYWxsZWQgYnkgdGhlIHByb2Jl IGhlbHBlci4gSXQncyBub3QgaW4KPiA+ICsgICAgICAgICogdGhlIGhlbHBlciBsaWJyYXJ5IHZ0 YWJsZSBwdXJlbHkgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gVGhlIG9ubHkgRFJNCj4gPiArICAg ICAgICAqIGNvcmUgZW50cnkgcG9pbnQgdG8gcHJvYmUgY29ubmVjdG9yIHN0YXRlIGlzIEBmaWxs X21vZGVzLgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBSRVRVUk5TOgo+ID4gKyAgICAg ICAgKgo+ID4gKyAgICAgICAgKiBkcm1fY29ubmVjdG9yX3N0YXR1cyBpbmRpY2F0aW5nIHRoZSBj b25uZWN0b3IncyBzdGF0dXMuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBlbnVtIGRybV9j b25uZWN0b3Jfc3RhdHVzICgqZGV0ZWN0KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZv cmNlKTsKPiA+ICsKPiA+ICsgICAgICAgLyoqCj4gPiArICAgICAgICAqIEBmb3JjZToKPiA+ICsg ICAgICAgICoKPiA+ICsgICAgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdXBkYXRl IGludGVybmFsIGVuY29kZXIgc3RhdGUgd2hlbiB0aGUKPiA+ICsgICAgICAgICogY29ubmVjdG9y IGlzIGZvcmNlZCB0byBhIGNlcnRhaW4gc3RhdGUgYnkgdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3Vn aAo+ID4gKyAgICAgICAgKiB0aGUgc3lzZnMgaW50ZXJmYWNlcyBvciBvbiB0aGUga2VybmVsIGNt ZGxpbmUuIEluIHRoYXQgY2FzZSB0aGUKPiA+ICsgICAgICAgICogQGRldGVjdCBjYWxsYmFjayBp c24ndCBjYWxsZWQuCj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIEZJWE1FOgo+ID4gKyAg ICAgICAgKgo+ID4gKyAgICAgICAgKiBOb3RlIHRoYXQgdGhpcyBob29rIGlzIG9ubHkgY2FsbGVk IGJ5IHRoZSBwcm9iZSBoZWxwZXIuIEl0J3Mgbm90IGluCj4gPiArICAgICAgICAqIHRoZSBoZWxw ZXIgbGlicmFyeSB2dGFibGUgcHVyZWx5IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuIFRoZSBvbmx5 IERSTQo+ID4gKyAgICAgICAgKiBjb3JlIGVudHJ5IHBvaW50IHRvIHByb2JlIGNvbm5lY3RvciBz dGF0ZSBpcyBAZmlsbF9tb2Rlcy4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIHZvaWQgKCpm b3JjZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gPiArCj4gPiArICAgICAg IC8qKgo+ID4gKyAgICAgICAgKiBAZmlsbF9tb2RlczoKPiA+ICsgICAgICAgICoKPiA+ICsgICAg ICAgICogRW50cnkgcG9pbnQgZm9yIG91dHB1dCBkZXRlY3Rpb24gYW5kIGJhc2ljIG1vZGUgdmFs aWRhdGlvbi4gVGhlCj4gPiArICAgICAgICAqIGRyaXZlciBzaG91bGQgcmVwcm9iZSB0aGUgb3V0 cHV0IGlmIG5lZWRlZCAoZS5nLiB3aGVuIGhvdHBsdWcKPiA+ICsgICAgICAgICogaGFuZGxpbmcg aXMgdW5yZWxpYWJsZSksIGFkZCBhbGwgZGV0ZWN0ZWQgbW9kZXMgdG8gY29ubmVjdG9yLT5tb2Rl cwo+ID4gKyAgICAgICAgKiBhbmQgZmlsdGVyIG91dCBhbnkgdGhlIGRldmljZSBjYW4ndCBzdXBw b3J0IGluIGFueSBjb25maWd1cmF0aW9uLiBJdAo+ID4gKyAgICAgICAgKiBhbHNvIG5lZWRzIHRv IGZpbHRlciBvdXQgYW55IG1vZGVzIHdpZGVyIG9yIGhpZ2hlciB0aGFuIHRoZQo+ID4gKyAgICAg ICAgKiBwYXJhbWV0ZXJzIG1heF93aWR0aCBhbmQgbWF4X2hlaWdodCBpbmRpY2F0ZS4KPiA+ICsg ICAgICAgICoKPiA+ICsgICAgICAgICogVGhlIGRyaXZlcnMgbXVzdCBhbHNvIHBydW5lIGFueSBt b2RlcyBubyBsb25nZXIgdmFsaWQgZnJvbQo+ID4gKyAgICAgICAgKiBjb25uZWN0b3ItPm1vZGVz LiBGdXJ0aGVybW9yZSBpdCBtdXN0IHVwZGF0ZSBjb25uZWN0b3ItPnN0YXR1cyBhbmQKPiA+ICsg ICAgICAgICogY29ubmVjdG9yLT5lZGlkLiAgSWYgbm8gRURJRCBoYXMgYmVlbiByZWNlaXZlZCBm b3IgdGhpcyBvdXRwdXQKPiA+ICsgICAgICAgICogY29ubmVjdG9yLT5lZGlkIG11c3QgYmUgTlVM TC4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRHJpdmVycyB1c2luZyB0aGUgcHJvYmUg aGVscGVycyBzaG91bGQgdXNlCj4gPiArICAgICAgICAqIGRybV9oZWxwZXJfcHJvYmVfc2luZ2xl X2Nvbm5lY3Rvcl9tb2RlcygpIG9yCj4gPiArICAgICAgICAqIGRybV9oZWxwZXJfcHJvYmVfc2lu Z2xlX2Nvbm5lY3Rvcl9tb2Rlc19ub21lcmdlKCkgdG8gaW1wbGVtZW50IHRoaXMKPiA+ICsgICAg ICAgICogZnVuY3Rpb24uCj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIFJFVFVSTlM6Cj4g PiArICAgICAgICAqCj4gPiArICAgICAgICAqIFRoZSBudW1iZXIgb2YgbW9kZXMgZGV0ZWN0ZWQg YW5kIGZpbGxlZCBpbnRvIGNvbm5lY3Rvci0+bW9kZXMuCj4gPiArICAgICAgICAqLwo+ID4gKyAg ICAgICBpbnQgKCpmaWxsX21vZGVzKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCB1 aW50MzJfdCBtYXhfd2lkdGgsIHVpbnQzMl90IG1heF9oZWlnaHQpOwo+ID4gKwo+ID4gKyAgICAg ICAvKioKPiA+ICsgICAgICAgICogQHNldF9wcm9wZXJ0eToKPiA+ICsgICAgICAgICoKPiA+ICsg ICAgICAgICogVGhpcyBpcyB0aGUgbGVnYWN5IGVudHJ5IHBvaW50IHRvIHVwZGF0ZSBhIHByb3Bl cnR5IGF0dGFjaGVkIHRvIHRoZQo+ID4gKyAgICAgICAgKiBjb25uZWN0b3IuCj4gPiArICAgICAg ICAqCj4gPiArICAgICAgICAqIERyaXZlcnMgaW1wbGVtZW50aW5nIGF0b21pYyBtb2Rlc2V0IHNo b3VsZCB1c2UKPiA+ICsgICAgICAgICogZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3NldF9w cm9wZXJ0eSgpIHRvIGltcGxlbWVudCB0aGlzIGhvb2suCj4gPiArICAgICAgICAqCj4gPiArICAg ICAgICAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgaWYgdGhlIGRyaXZlciBkb2VzIG5vdCBz dXBwb3J0IGFueSBsZWdhY3kKPiA+ICsgICAgICAgICogZHJpdmVyLXByaXZhdGUgcHJvcGVydGll cy4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogUkVUVVJOUzoKPiA+ICsgICAgICAgICoK PiA+ICsgICAgICAgICogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBm YWlsdXJlLgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAgICAgaW50ICgqc2V0X3Byb3BlcnR5KShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9w ZXJ0eSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsKTsKPiA+ ICsKPiA+ICsgICAgICAgLyoqCj4gPiArICAgICAgICAqIEBsYXRlX3JlZ2lzdGVyOgo+ID4gKyAg ICAgICAgKgo+ID4gKyAgICAgICAgKiBUaGlzIG9wdGlvbmFsIGhvb2sgY2FuIGJlIHVzZWQgdG8g cmVnaXN0ZXIgYWRkaXRpb25hbCB1c2Vyc3BhY2UKPiA+ICsgICAgICAgICogaW50ZXJmYWNlcyBh dHRhY2hlZCB0byB0aGUgY29ubmVjdG9yLCBsaWdodCBiYWNrbGlnaHQgY29udHJvbCwgaTJjLAo+ ID4gKyAgICAgICAgKiBEUCBhdXggb3Igc2ltaWxhciBpbnRlcmZhY2VzLiBJdCBpcyBjYWxsZWQg bGF0ZSBpbiB0aGUgZHJpdmVyIGxvYWQKPiA+ICsgICAgICAgICogc2VxdWVuY2UgZnJvbSBkcm1f Y29ubmVjdG9yX3JlZ2lzdGVyKCkgd2hlbiByZWdpc3RlcmluZyBhbGwgdGhlCj4gPiArICAgICAg ICAqIGNvcmUgZHJtIGNvbm5lY3RvciBpbnRlcmZhY2VzLiBFdmVyeXRoaW5nIGFkZGVkIGZyb20g dGhpcyBjYWxsYmFjawo+ID4gKyAgICAgICAgKiBzaG91bGQgYmUgdW5yZWdpc3RlcmVkIGluIHRo ZSBlYXJseV91bnJlZ2lzdGVyIGNhbGxiYWNrLgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAg KiBSZXR1cm5zOgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiAwIG9uIHN1Y2Nlc3MsIG9y IGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gKyAgICAgICAgKi8KPiA+ICsg ICAgICAgaW50ICgqbGF0ZV9yZWdpc3Rlcikoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cik7Cj4gPiArCj4gPiArICAgICAgIC8qKgo+ID4gKyAgICAgICAgKiBAZWFybHlfdW5yZWdpc3Rl cjoKPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogVGhpcyBvcHRpb25hbCBob29rIHNob3Vs ZCBiZSB1c2VkIHRvIHVucmVnaXN0ZXIgdGhlIGFkZGl0aW9uYWwKPiA+ICsgICAgICAgICogdXNl cnNwYWNlIGludGVyZmFjZXMgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3RvciBmcm9tCj4gPiArICAg ICAgICAqIGxhdGVfdW5yZWdpc3RlcigpLiBJdCBpcyBjYWxsZWQgZnJvbSBkcm1fY29ubmVjdG9y X3VucmVnaXN0ZXIoKSwKPiA+ICsgICAgICAgICogZWFybHkgaW4gdGhlIGRyaXZlciB1bmxvYWQg c2VxdWVuY2UgdG8gZGlzYWJsZSB1c2Vyc3BhY2UgYWNjZXNzCj4gPiArICAgICAgICAqIGJlZm9y ZSBkYXRhIHN0cnVjdHVyZXMgYXJlIHRvcm5kb3duLgo+ID4gKyAgICAgICAgKi8KPiA+ICsgICAg ICAgdm9pZCAoKmVhcmx5X3VucmVnaXN0ZXIpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3IpOwo+ID4gKwo+ID4gKyAgICAgICAvKioKPiA+ICsgICAgICAgICogQGRlc3Ryb3k6Cj4gPiAr ICAgICAgICAqCj4gPiArICAgICAgICAqIENsZWFuIHVwIGNvbm5lY3RvciByZXNvdXJjZXMuIFRo aXMgaXMgY2FsbGVkIGF0IGRyaXZlciB1bmxvYWQgdGltZQo+ID4gKyAgICAgICAgKiB0aHJvdWdo IGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKCkuIEl0IGNhbiBhbHNvIGJlIGNhbGxlZCBhdCBydW50 aW1lCj4gPiArICAgICAgICAqIHdoZW4gYSBjb25uZWN0b3IgaXMgYmVpbmcgaG90LXVucGx1Z2dl ZCBmb3IgZHJpdmVycyB0aGF0IHN1cHBvcnQKPiA+ICsgICAgICAgICogY29ubmVjdG9yIGhvdHBs dWdnaW5nIChlLmcuIERpc3BsYXlQb3J0IE1TVCkuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAg ICB2b2lkICgqZGVzdHJveSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gPiAr Cj4gPiArICAgICAgIC8qKgo+ID4gKyAgICAgICAgKiBAYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZToK PiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRHVwbGljYXRlIHRoZSBjdXJyZW50IGF0b21p YyBzdGF0ZSBmb3IgdGhpcyBjb25uZWN0b3IgYW5kIHJldHVybiBpdC4KPiA+ICsgICAgICAgICog VGhlIGNvcmUgYW5kIGhlbHBlcnMgZ3VyYW50ZWUgdGhhdCBhbnkgYXRvbWljIHN0YXRlIGR1cGxp Y2F0ZWQgd2l0aAo+ID4gKyAgICAgICAgKiB0aGlzIGhvb2sgYW5kIHN0aWxsIG93bmVkIGJ5IHRo ZSBjYWxsZXIgKGkuZS4gbm90IHRyYW5zZmVycmVkIHRvIHRoZQo+ID4gKyAgICAgICAgKiBkcml2 ZXIgYnkgY2FsbGluZyAtPmF0b21pY19jb21taXQoKSBmcm9tIHN0cnVjdAo+ID4gKyAgICAgICAg KiAmZHJtX21vZGVfY29uZmlnX2Z1bmNzKSB3aWxsIGJlIGNsZWFuZWQgdXAgYnkgY2FsbGluZyB0 aGUKPiA+ICsgICAgICAgICogQGF0b21pY19kZXN0cm95X3N0YXRlIGhvb2sgaW4gdGhpcyBzdHJ1 Y3R1cmUuCj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIEF0b21pYyBkcml2ZXJzIHdoaWNo IGRvbid0IHN1YmNsYXNzIHN0cnVjdCAmZHJtX2Nvbm5lY3Rvcl9zdGF0ZSBzaG91bGQgdXNlCj4g PiArICAgICAgICAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUo KS4gRHJpdmVycyB0aGF0IHN1YmNsYXNzIHRoZQo+ID4gKyAgICAgICAgKiBzdGF0ZSBzdHJ1Y3R1 cmUgdG8gZXh0ZW5kIGl0IHdpdGggZHJpdmVyLXByaXZhdGUgc3RhdGUgc2hvdWxkIHVzZQo+ID4g KyAgICAgICAgKiBfX2RybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUo KSB0byBtYWtlIHN1cmUgc2hhcmVkIHN0YXRlIGlzCj4gPiArICAgICAgICAqIGR1cGxpY2F0ZWQg aW4gYSBjb25zaXN0ZW50IGZhc2hpb24gYWNyb3NzIGRyaXZlcnMuCj4gPiArICAgICAgICAqCj4g PiArICAgICAgICAqIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBob29rIGJlZm9yZSBjb25u ZWN0b3ItPnN0YXRlIGhhcyBiZWVuCj4gPiArICAgICAgICAqIGluaXRpYWxpemVkIGNvcnJlY3Rs eS4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogTk9URToKPiA+ICsgICAgICAgICoKPiA+ ICsgICAgICAgICogSWYgdGhlIGR1cGxpY2F0ZSBzdGF0ZSByZWZlcmVuY2VzIHJlZmNvdW50ZWQg cmVzb3VyY2VzIHRoaXMgaG9vayBtdXN0Cj4gPiArICAgICAgICAqIGFjcXVpcmUgYSByZWZlcmVu Y2UgZm9yIGVhY2ggb2YgdGhlbS4gVGhlIGRyaXZlciBtdXN0IHJlbGVhc2UgdGhlc2UKPiA+ICsg ICAgICAgICogcmVmZXJlbmNlcyBhZ2FpbiBpbiBAYXRvbWljX2Rlc3Ryb3lfc3RhdGUuCj4gPiAr ICAgICAgICAqCj4gPiArICAgICAgICAqIFJFVFVSTlM6Cj4gPiArICAgICAgICAqCj4gPiArICAg ICAgICAqIER1cGxpY2F0ZWQgYXRvbWljIHN0YXRlIG9yIE5VTEwgd2hlbiB0aGUgYWxsb2NhdGlv biBmYWlsZWQuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9zdGF0ZSAqKCphdG9taWNfZHVwbGljYXRlX3N0YXRlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKTsKPiA+ICsKPiA+ICsgICAgICAgLyoqCj4gPiArICAgICAgICAqIEBhdG9taWNf ZGVzdHJveV9zdGF0ZToKPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogRGVzdHJveSBhIHN0 YXRlIGR1cGxpY2F0ZWQgd2l0aCBAYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSBhbmQgcmVsZWFzZQo+ ID4gKyAgICAgICAgKiBvciB1bnJlZmVyZW5jZSBhbGwgcmVzb3VyY2VzIGl0IHJlZmVyZW5jZXMK PiA+ICsgICAgICAgICovCj4gPiArICAgICAgIHZvaWQgKCphdG9taWNfZGVzdHJveV9zdGF0ZSko c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqc3RhdGUpOwo+ID4g Kwo+ID4gKyAgICAgICAvKioKPiA+ICsgICAgICAgICogQGF0b21pY19zZXRfcHJvcGVydHk6Cj4g PiArICAgICAgICAqCj4gPiArICAgICAgICAqIERlY29kZSBhIGRyaXZlci1wcml2YXRlIHByb3Bl cnR5IHZhbHVlIGFuZCBzdG9yZSB0aGUgZGVjb2RlZCB2YWx1ZQo+ID4gKyAgICAgICAgKiBpbnRv IHRoZSBwYXNzZWQtaW4gc3RhdGUgc3RydWN0dXJlLiBTaW5jZSB0aGUgYXRvbWljIGNvcmUgZGVj b2RlcyBhbGwKPiA+ICsgICAgICAgICogc3RhbmRhcmRpemVkIHByb3BlcnRpZXMgKGV2ZW4gZm9y IGV4dGVuc2lvbnMgYmV5b25kIHRoZSBjb3JlIHNldCBvZgo+ID4gKyAgICAgICAgKiBwcm9wZXJ0 aWVzIHdoaWNoIG1pZ2h0IG5vdCBiZSBpbXBsZW1lbnRlZCBieSBhbGwgZHJpdmVycykgdGhpcwo+ ID4gKyAgICAgICAgKiByZXF1aXJlcyBkcml2ZXJzIHRvIHN1YmNsYXNzIHRoZSBzdGF0ZSBzdHJ1 Y3R1cmUuCj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIFN1Y2ggZHJpdmVyLXByaXZhdGUg cHJvcGVydGllcyBzaG91bGQgcmVhbGx5IG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yCj4gPiArICAg ICAgICAqIHRydWx5IGhhcmR3YXJlL3ZlbmRvciBzcGVjaWZpYyBzdGF0ZS4gSW5zdGVhZCBpdCBp cyBwcmVmZXJyZWQgdG8KPiA+ICsgICAgICAgICogc3RhbmRhcmRpemUgYXRvbWljIGV4dGVuc2lv biBhbmQgZGVjb2RlIHRoZSBwcm9wZXJ0aWVzIHVzZWQgdG8gZXhwb3NlCj4gPiArICAgICAgICAq IHN1Y2ggYW4gZXh0ZW5zaW9uIGluIHRoZSBjb3JlLgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAg ICAgKiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5LCB1c2UKPiA+ICsgICAgICAg ICogZHJtX2F0b21pY19jb25uZWN0b3Jfc2V0X3Byb3BlcnR5KCkgaW5zdGVhZC4KPiA+ICsgICAg ICAgICoKPiA+ICsgICAgICAgICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCBpZiB0aGUgZHJp dmVyIGRvZXMgbm90IHN1cHBvcnQgYW55Cj4gPiArICAgICAgICAqIGRyaXZlci1wcml2YXRlIGF0 b21pYyBwcm9wZXJ0aWVzLgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBOT1RFOgo+ID4g KyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUg c3RhdGUgYXNzZW1ibHkgcGhhc2Ugb2YgYXRvbWljCj4gPiArICAgICAgICAqIG1vZGVzZXRzLCB3 aGljaCBjYW4gYmUgYWJvcnRlZCBmb3IgYW55IHJlYXNvbiAoaW5jbHVkaW5nIG9uCj4gPiArICAg ICAgICAqIHVzZXJzcGFjZSdzIHJlcXVlc3QgdG8ganVzdCBjaGVjayB3aGV0aGVyIGEgY29uZmln dXJhdGlvbiB3b3VsZCBiZQo+ID4gKyAgICAgICAgKiBwb3NzaWJsZSkuIERyaXZlcnMgTVVTVCBO T1QgdG91Y2ggYW55IHBlcnNpc3RlbnQgc3RhdGUgKGhhcmR3YXJlIG9yCj4gPiArICAgICAgICAq IHNvZnR3YXJlKSBvciBkYXRhIHN0cnVjdHVyZXMgZXhjZXB0IHRoZSBwYXNzZWQgaW4gQHN0YXRl IHBhcmFtZXRlci4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogQWxzbyBzaW5jZSB1c2Vy c3BhY2UgY29udHJvbHMgaW4gd2hpY2ggb3JkZXIgcHJvcGVydGllcyBhcmUgc2V0IHRoaXMKPiA+ ICsgICAgICAgICogZnVuY3Rpb24gbXVzdCBub3QgZG8gYW55IGlucHV0IHZhbGlkYXRpb24gKHNp bmNlIHRoZSBzdGF0ZSB1cGRhdGUgaXMKPiA+ICsgICAgICAgICogaW5jb21wbGV0ZSBhbmQgaGVu Y2UgbGlrZWx5IGluY29uc2lzdGVudCkuIEluc3RlYWQgYW55IHN1Y2ggaW5wdXQKPiA+ICsgICAg ICAgICogdmFsaWRhdGlvbiBtdXN0IGJlIGRvbmUgaW4gdGhlIHZhcmlvdXMgYXRvbWljX2NoZWNr IGNhbGxiYWNrcy4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogUkVUVVJOUzoKPiA+ICsg ICAgICAgICoKPiA+ICsgICAgICAgICogMCBpZiB0aGUgcHJvcGVydHkgaGFzIGJlZW4gZm91bmQs IC1FSU5WQUwgaWYgdGhlIHByb3BlcnR5IGlzbid0Cj4gPiArICAgICAgICAqIGltcGxlbWVudGVk IGJ5IHRoZSBkcml2ZXIgKHdoaWNoIHNob3VsZG4ndCBldmVyIGhhcHBlbiwgdGhlIGNvcmUgb25s eQo+ID4gKyAgICAgICAgKiBhc2tzIGZvciBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIHRoaXMgY29u bmVjdG9yKS4gTm8gb3RoZXIgdmFsaWRhdGlvbgo+ID4gKyAgICAgICAgKiBpcyBhbGxvd2VkIGJ5 IHRoZSBkcml2ZXIuIFRoZSBjb3JlIGFscmVhZHkgY2hlY2tzIHRoYXQgdGhlIHByb3BlcnR5Cj4g PiArICAgICAgICAqIHZhbHVlIGlzIHdpdGhpbiB0aGUgcmFuZ2UgKGludGVnZXIsIHZhbGlkIGVu dW0gdmFsdWUsIC4uLikgdGhlIGRyaXZlcgo+ID4gKyAgICAgICAgKiBzZXQgd2hlbiByZWdpc3Rl cmluZyB0aGUgcHJvcGVydHkuCj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBpbnQgKCphdG9t aWNfc2V0X3Byb3BlcnR5KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSAqc3RhdGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cm1fcHJvcGVydHkgKnByb3BlcnR5LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50NjRfdCB2YWwpOwo+ID4gKwo+ID4gKyAgICAgICAvKioKPiA+ICsgICAgICAgICog QGF0b21pY19nZXRfcHJvcGVydHk6Cj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIFJlYWRz IG91dCB0aGUgZGVjb2RlZCBkcml2ZXItcHJpdmF0ZSBwcm9wZXJ0eS4gVGhpcyBpcyB1c2VkIHRv Cj4gPiArICAgICAgICAqIGltcGxlbWVudCB0aGUgR0VUQ09OTkVDVE9SIElPQ1RMLgo+ID4gKyAg ICAgICAgKgo+ID4gKyAgICAgICAgKiBEbyBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5 LCB1c2UKPiA+ICsgICAgICAgICogZHJtX2F0b21pY19jb25uZWN0b3JfZ2V0X3Byb3BlcnR5KCkg aW5zdGVhZC4KPiA+ICsgICAgICAgICoKPiA+ICsgICAgICAgICogVGhpcyBjYWxsYmFjayBpcyBv cHRpb25hbCBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYW55Cj4gPiArICAgICAgICAq IGRyaXZlci1wcml2YXRlIGF0b21pYyBwcm9wZXJ0aWVzLgo+ID4gKyAgICAgICAgKgo+ID4gKyAg ICAgICAgKiBSRVRVUk5TOgo+ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiAwIG9uIHN1Y2Nl c3MsIC1FSU5WQUwgaWYgdGhlIHByb3BlcnR5IGlzbid0IGltcGxlbWVudGVkIGJ5IHRoZQo+ID4g KyAgICAgICAgKiBkcml2ZXIgKHdoaWNoIHNob3VsZG4ndCBldmVyIGhhcHBlbiwgdGhlIGNvcmUg b25seSBhc2tzIGZvcgo+ID4gKyAgICAgICAgKiBwcm9wZXJ0aWVzIGF0dGFjaGVkIHRvIHRoaXMg Y29ubmVjdG9yKS4KPiA+ICsgICAgICAgICovCj4gPiArICAgICAgIGludCAoKmF0b21pY19nZXRf cHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90ICp2YWwpOwo+ID4gK307Cj4gPiArCj4gPiArLyogbW9kZSBzcGVjaWZpZWQg b24gdGhlIGNvbW1hbmQgbGluZSAqLwo+ID4gK3N0cnVjdCBkcm1fY21kbGluZV9tb2RlIHsKPiA+ ICsgICAgICAgYm9vbCBzcGVjaWZpZWQ7Cj4gPiArICAgICAgIGJvb2wgcmVmcmVzaF9zcGVjaWZp ZWQ7Cj4gPiArICAgICAgIGJvb2wgYnBwX3NwZWNpZmllZDsKPiA+ICsgICAgICAgaW50IHhyZXMs IHlyZXM7Cj4gPiArICAgICAgIGludCBicHA7Cj4gPiArICAgICAgIGludCByZWZyZXNoOwo+ID4g KyAgICAgICBib29sIHJiOwo+ID4gKyAgICAgICBib29sIGludGVybGFjZTsKPiA+ICsgICAgICAg Ym9vbCBjdnQ7Cj4gPiArICAgICAgIGJvb2wgbWFyZ2luczsKPiA+ICsgICAgICAgZW51bSBkcm1f Y29ubmVjdG9yX2ZvcmNlIGZvcmNlOwo+ID4gK307Cj4gPiArCj4gPiArLyoqCj4gPiArICogc3Ry dWN0IGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3IgY29udHJvbCBzdHJ1Y3R1 cmUKPiA+ICsgKiBAZGV2OiBwYXJlbnQgRFJNIGRldmljZQo+ID4gKyAqIEBrZGV2OiBrZXJuZWwg ZGV2aWNlIGZvciBzeXNmcyBhdHRyaWJ1dGVzCj4gPiArICogQGF0dHI6IHN5c2ZzIGF0dHJpYnV0 ZXMKPiA+ICsgKiBAaGVhZDogbGlzdCBtYW5hZ2VtZW50Cj4gPiArICogQGJhc2U6IGJhc2UgS01T IG9iamVjdAo+ID4gKyAqIEBuYW1lOiBodW1hbiByZWFkYWJsZSBuYW1lLCBjYW4gYmUgb3Zlcndy aXR0ZW4gYnkgdGhlIGRyaXZlcgo+ID4gKyAqIEBjb25uZWN0b3JfdHlwZTogb25lIG9mIHRoZSBE Uk1fTU9ERV9DT05ORUNUT1JfPGZvbz4gdHlwZXMgZnJvbSBkcm1fbW9kZS5oCj4gPiArICogQGNv bm5lY3Rvcl90eXBlX2lkOiBpbmRleCBpbnRvIGNvbm5lY3RvciB0eXBlIGVudW0KPiA+ICsgKiBA aW50ZXJsYWNlX2FsbG93ZWQ6IGNhbiB0aGlzIGNvbm5lY3RvciBoYW5kbGUgaW50ZXJsYWNlZCBt b2Rlcz8KPiA+ICsgKiBAZG91Ymxlc2Nhbl9hbGxvd2VkOiBjYW4gdGhpcyBjb25uZWN0b3IgaGFu ZGxlIGRvdWJsZXNjYW4/Cj4gPiArICogQHN0ZXJlb19hbGxvd2VkOiBjYW4gdGhpcyBjb25uZWN0 b3IgaGFuZGxlIHN0ZXJlbyBtb2Rlcz8KPiA+ICsgKiBAcmVnaXN0ZXJlZDogaXMgdGhpcyBjb25u ZWN0b3IgZXhwb3NlZCAocmVnaXN0ZXJlZCkgd2l0aCB1c2Vyc3BhY2U/Cj4gPiArICogQG1vZGVz OiBtb2RlcyBhdmFpbGFibGUgb24gdGhpcyBjb25uZWN0b3IgKGZyb20gZmlsbF9tb2RlcygpICsg dXNlcikKPiA+ICsgKiBAc3RhdHVzOiBvbmUgb2YgdGhlIGRybV9jb25uZWN0b3Jfc3RhdHVzIGVu dW1zIChjb25uZWN0ZWQsIG5vdCwgb3IgdW5rbm93bikKPiA+ICsgKiBAcHJvYmVkX21vZGVzOiBs aXN0IG9mIG1vZGVzIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGUgZGlzcGxheQo+ID4gKyAqIEBk aXNwbGF5X2luZm86IGluZm9ybWF0aW9uIGFib3V0IGF0dGFjaGVkIGRpc3BsYXkgKGUuZy4gZnJv bSBFRElEKQo+ID4gKyAqIEBmdW5jczogY29ubmVjdG9yIGNvbnRyb2wgZnVuY3Rpb25zCj4gPiAr ICogQGVkaWRfYmxvYl9wdHI6IERSTSBwcm9wZXJ0eSBjb250YWluaW5nIEVESUQgaWYgcHJlc2Vu dAo+ID4gKyAqIEBwcm9wZXJ0aWVzOiBwcm9wZXJ0eSB0cmFja2luZyBmb3IgdGhpcyBjb25uZWN0 b3IKPiA+ICsgKiBAcG9sbGVkOiBhIERSTV9DT05ORUNUT1JfUE9MTF88Zm9vPiB2YWx1ZSBmb3Ig Y29yZSBkcml2ZW4gcG9sbGluZwo+ID4gKyAqIEBkcG1zOiBjdXJyZW50IGRwbXMgc3RhdGUKPiA+ ICsgKiBAaGVscGVyX3ByaXZhdGU6IG1pZC1sYXllciBwcml2YXRlIGRhdGEKPiA+ICsgKiBAY21k bGluZV9tb2RlOiBtb2RlIGxpbmUgcGFyc2VkIGZyb20gdGhlIGtlcm5lbCBjbWRsaW5lIGZvciB0 aGlzIGNvbm5lY3Rvcgo+ID4gKyAqIEBmb3JjZTogYSBEUk1fRk9SQ0VfPGZvbz4gc3RhdGUgZm9y IGZvcmNlZCBtb2RlIHNldHMKPiA+ICsgKiBAb3ZlcnJpZGVfZWRpZDogaGFzIHRoZSBFRElEIGJl ZW4gb3ZlcndyaXR0ZW4gdGhyb3VnaCBkZWJ1Z2ZzIGZvciB0ZXN0aW5nPwo+ID4gKyAqIEBlbmNv ZGVyX2lkczogdmFsaWQgZW5jb2RlcnMgZm9yIHRoaXMgY29ubmVjdG9yCj4gPiArICogQGVuY29k ZXI6IGVuY29kZXIgZHJpdmluZyB0aGlzIGNvbm5lY3RvciwgaWYgYW55Cj4gPiArICogQGVsZDog RURJRC1saWtlIGRhdGEsIGlmIHByZXNlbnQKPiA+ICsgKiBAZHZpX2R1YWw6IGR1YWwgbGluayBE VkksIGlmIGZvdW5kCj4gPiArICogQG1heF90bWRzX2Nsb2NrOiBtYXggY2xvY2sgcmF0ZSwgaWYg Zm91bmQKPiA+ICsgKiBAbGF0ZW5jeV9wcmVzZW50OiBBViBkZWxheSBpbmZvIGZyb20gRUxELCBp ZiBmb3VuZAo+ID4gKyAqIEB2aWRlb19sYXRlbmN5OiB2aWRlbyBsYXRlbmN5IGluZm8gZnJvbSBF TEQsIGlmIGZvdW5kCj4gPiArICogQGF1ZGlvX2xhdGVuY3k6IGF1ZGlvIGxhdGVuY3kgaW5mbyBm cm9tIEVMRCwgaWYgZm91bmQKPiA+ICsgKiBAbnVsbF9lZGlkX2NvdW50ZXI6IHRyYWNrIHNpbmtz IHRoYXQgZ2l2ZSB1cyBhbGwgemVyb3MgZm9yIHRoZSBFRElECj4gPiArICogQGJhZF9lZGlkX2Nv dW50ZXI6IHRyYWNrIHNpbmtzIHRoYXQgZ2l2ZSB1cyBhbiBFRElEIHdpdGggaW52YWxpZCBjaGVj a3N1bQo+ID4gKyAqIEBlZGlkX2NvcnJ1cHQ6IGluZGljYXRlcyB3aGV0aGVyIHRoZSBsYXN0IHJl YWQgRURJRCB3YXMgY29ycnVwdAo+ID4gKyAqIEBkZWJ1Z2ZzX2VudHJ5OiBkZWJ1Z2ZzIGRpcmVj dG9yeSBmb3IgdGhpcyBjb25uZWN0b3IKPiA+ICsgKiBAc3RhdGU6IGN1cnJlbnQgYXRvbWljIHN0 YXRlIGZvciB0aGlzIGNvbm5lY3Rvcgo+ID4gKyAqIEBoYXNfdGlsZTogaXMgdGhpcyBjb25uZWN0 b3IgY29ubmVjdGVkIHRvIGEgdGlsZWQgbW9uaXRvcgo+ID4gKyAqIEB0aWxlX2dyb3VwOiB0aWxl IGdyb3VwIGZvciB0aGUgY29ubmVjdGVkIG1vbml0b3IKPiA+ICsgKiBAdGlsZV9pc19zaW5nbGVf bW9uaXRvcjogd2hldGhlciB0aGUgdGlsZSBpcyBvbmUgbW9uaXRvciBob3VzaW5nCj4gPiArICog QG51bV9oX3RpbGU6IG51bWJlciBvZiBob3Jpem9udGFsIHRpbGVzIGluIHRoZSB0aWxlIGdyb3Vw Cj4gPiArICogQG51bV92X3RpbGU6IG51bWJlciBvZiB2ZXJ0aWNhbCB0aWxlcyBpbiB0aGUgdGls ZSBncm91cAo+ID4gKyAqIEB0aWxlX2hfbG9jOiBob3Jpem9udGFsIGxvY2F0aW9uIG9mIHRoaXMg dGlsZQo+ID4gKyAqIEB0aWxlX3ZfbG9jOiB2ZXJ0aWNhbCBsb2NhdGlvbiBvZiB0aGlzIHRpbGUK PiA+ICsgKiBAdGlsZV9oX3NpemU6IGhvcml6b250YWwgc2l6ZSBvZiB0aGlzIHRpbGUuCj4gPiAr ICogQHRpbGVfdl9zaXplOiB2ZXJ0aWNhbCBzaXplIG9mIHRoaXMgdGlsZS4KPiA+ICsgKgo+ID4g KyAqIEVhY2ggY29ubmVjdG9yIG1heSBiZSBjb25uZWN0ZWQgdG8gb25lIG9yIG1vcmUgQ1JUQ3Ms IG9yIG1heSBiZSBjbG9uYWJsZSBieQo+ID4gKyAqIGFub3RoZXIgY29ubmVjdG9yIGlmIHRoZXkg Y2FuIHNoYXJlIGEgQ1JUQy4gIEVhY2ggY29ubmVjdG9yIGFsc28gaGFzIGEgc3BlY2lmaWMKPiA+ ICsgKiBwb3NpdGlvbiBpbiB0aGUgYnJvYWRlciBkaXNwbGF5IChyZWZlcnJlZCB0byBhcyBhICdz Y3JlZW4nIHRob3VnaCBpdCBjb3VsZAo+ID4gKyAqIHNwYW4gbXVsdGlwbGUgbW9uaXRvcnMpLgo+ ID4gKyAqLwo+ID4gK3N0cnVjdCBkcm1fY29ubmVjdG9yIHsKPiA+ICsgICAgICAgc3RydWN0IGRy bV9kZXZpY2UgKmRldjsKPiA+ICsgICAgICAgc3RydWN0IGRldmljZSAqa2RldjsKPiA+ICsgICAg ICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHI7Cj4gPiArICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgaGVhZDsKPiA+ICsKPiA+ICsgICAgICAgc3RydWN0IGRybV9tb2RlX29iamVjdCBiYXNl Owo+ID4gKwo+ID4gKyAgICAgICBjaGFyICpuYW1lOwo+ID4gKwo+ID4gKyAgICAgICAvKioKPiA+ ICsgICAgICAgICogQGluZGV4OiBDb21wYWN0ZWQgY29ubmVjdG9yIGluZGV4LCB3aGljaCBtYXRj aGVzIHRoZSBwb3NpdGlvbiBpbnNpZGUKPiA+ICsgICAgICAgICogdGhlIG1vZGVfY29uZmlnLmxp c3QgZm9yIGRyaXZlcnMgbm90IHN1cHBvcnRpbmcgaG90LWFkZC9yZW1vdmluZy4gQ2FuCj4gPiAr ICAgICAgICAqIGJlIHVzZWQgYXMgYW4gYXJyYXkgaW5kZXguIEl0IGlzIGludmFyaWFudCBvdmVy IHRoZSBsaWZldGltZSBvZiB0aGUKPiA+ICsgICAgICAgICogY29ubmVjdG9yLgo+ID4gKyAgICAg ICAgKi8KPiA+ICsgICAgICAgdW5zaWduZWQgaW5kZXg7Cj4gPiArCj4gPiArICAgICAgIGludCBj b25uZWN0b3JfdHlwZTsKPiA+ICsgICAgICAgaW50IGNvbm5lY3Rvcl90eXBlX2lkOwo+ID4gKyAg ICAgICBib29sIGludGVybGFjZV9hbGxvd2VkOwo+ID4gKyAgICAgICBib29sIGRvdWJsZXNjYW5f YWxsb3dlZDsKPiA+ICsgICAgICAgYm9vbCBzdGVyZW9fYWxsb3dlZDsKPiA+ICsgICAgICAgYm9v bCByZWdpc3RlcmVkOwo+ID4gKyAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG1vZGVzOyAvKiBsaXN0 IG9mIG1vZGVzIG9uIHRoaXMgY29ubmVjdG9yICovCj4gPiArCj4gPiArICAgICAgIGVudW0gZHJt X2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ID4gKwo+ID4gKyAgICAgICAvKiB0aGVzZSBhcmUg bW9kZXMgYWRkZWQgYnkgcHJvYmluZyB3aXRoIEREQyBvciB0aGUgQklPUyAqLwo+ID4gKyAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlZF9tb2RlczsKPiA+ICsKPiA+ICsgICAgICAgc3RydWN0 IGRybV9kaXNwbGF5X2luZm8gZGlzcGxheV9pbmZvOwo+ID4gKyAgICAgICBjb25zdCBzdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqZnVuY3M7Cj4gPiArCj4gPiArICAgICAgIHN0cnVjdCBkcm1f cHJvcGVydHlfYmxvYiAqZWRpZF9ibG9iX3B0cjsKPiA+ICsgICAgICAgc3RydWN0IGRybV9vYmpl Y3RfcHJvcGVydGllcyBwcm9wZXJ0aWVzOwo+ID4gKwo+ID4gKyAgICAgICAvKioKPiA+ICsgICAg ICAgICogQHBhdGhfYmxvYl9wdHI6Cj4gPiArICAgICAgICAqCj4gPiArICAgICAgICAqIERSTSBi bG9iIHByb3BlcnR5IGRhdGEgZm9yIHRoZSBEUCBNU1QgcGF0aCBwcm9wZXJ0eS4KPiA+ICsgICAg ICAgICovCj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqcGF0aF9ibG9iX3B0 cjsKPiA+ICsKPiA+ICsgICAgICAgLyoqCj4gPiArICAgICAgICAqIEB0aWxlX2Jsb2JfcHRyOgo+ ID4gKyAgICAgICAgKgo+ID4gKyAgICAgICAgKiBEUk0gYmxvYiBwcm9wZXJ0eSBkYXRhIGZvciB0 aGUgdGlsZSBwcm9wZXJ0eSAodXNlZCBtb3N0bHkgYnkgRFAgTVNUKS4KPiA+ICsgICAgICAgICog VGhpcyBpcyBtZWFudCBmb3Igc2NyZWVucyB3aGljaCBhcmUgZHJpdmVuIHRocm91Z2ggc2VwYXJh dGUgZGlzcGxheQo+ID4gKyAgICAgICAgKiBwaXBlbGluZXMgcmVwcmVzZW50ZWQgYnkgJmRybV9j cnRjLCB3aGljaCBtaWdodCBub3QgYmUgcnVubmluZyB3aXRoCj4gPiArICAgICAgICAqIGdlbmxv Y2tlZCBjbG9ja3MuIEZvciB0aWxlZCBwYW5lbHMgd2hpY2ggYXJlIGdlbmxvY2tlZCwgbGlrZQo+ ID4gKyAgICAgICAgKiBkdWFsLWxpbmsgTFZEUyBvciBkdWFsLWxpbmsgRFNJLCB0aGUgZHJpdmVy IHNob3VsZCB0cnkgdG8gbm90IGV4cG9zZQo+ID4gKyAgICAgICAgKiB0aGUgdGlsaW5nIGFuZCB2 aXJ0dWFsaXplIGJvdGggJmRybV9jcnRjIGFuZCAmZHJtX3BsYW5lIGlmIG5lZWRlZC4KPiA+ICsg ICAgICAgICovCj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqdGlsZV9ibG9i X3B0cjsKPiA+ICsKPiA+ICsvKiBzaG91bGQgd2UgcG9sbCB0aGlzIGNvbm5lY3RvciBmb3IgY29u bmVjdHMgYW5kIGRpc2Nvbm5lY3RzICovCj4gPiArLyogaG90IHBsdWcgZGV0ZWN0YWJsZSAqLwo+ ID4gKyNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRCAoMSA8PCAwKQo+ID4gKy8qIHBvbGwg Zm9yIGNvbm5lY3Rpb25zICovCj4gPiArI2RlZmluZSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVD VCAoMSA8PCAxKQo+ID4gKy8qIGNhbiBjbGVhbmx5IHBvbGwgZm9yIGRpc2Nvbm5lY3Rpb25zIHdp dGhvdXQgZmxpY2tlcmluZyB0aGUgc2NyZWVuICovCj4gPiArLyogREFDcyBzaG91bGQgcmFyZWx5 IGRvIHRoaXMgd2l0aG91dCBhIGxvdCBvZiB0ZXN0aW5nICovCj4gPiArI2RlZmluZSBEUk1fQ09O TkVDVE9SX1BPTExfRElTQ09OTkVDVCAoMSA8PCAyKQo+ID4gKwo+ID4gKyAgICAgICB1aW50OF90 IHBvbGxlZDsgLyogRFJNX0NPTk5FQ1RPUl9QT0xMXyogKi8KPiA+ICsKPiA+ICsgICAgICAgLyog cmVxdWVzdGVkIERQTVMgc3RhdGUgKi8KPiA+ICsgICAgICAgaW50IGRwbXM7Cj4gPiArCj4gPiAr ICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2hlbHBlcl9mdW5jcyAqaGVscGVyX3By aXZhdGU7Cj4gPiArCj4gPiArICAgICAgIC8qIGZvcmNlZCBvbiBjb25uZWN0b3IgKi8KPiA+ICsg ICAgICAgc3RydWN0IGRybV9jbWRsaW5lX21vZGUgY21kbGluZV9tb2RlOwo+ID4gKyAgICAgICBl bnVtIGRybV9jb25uZWN0b3JfZm9yY2UgZm9yY2U7Cj4gPiArICAgICAgIGJvb2wgb3ZlcnJpZGVf ZWRpZDsKPiA+ICsKPiA+ICsjZGVmaW5lIERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVIgMwo+ID4g KyAgICAgICB1aW50MzJfdCBlbmNvZGVyX2lkc1tEUk1fQ09OTkVDVE9SX01BWF9FTkNPREVSXTsK PiA+ICsgICAgICAgc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOyAvKiBjdXJyZW50bHkgYWN0 aXZlIGVuY29kZXIgKi8KPiA+ICsKPiA+ICsjZGVmaW5lIE1BWF9FTERfQllURVMgIDEyOAo+ID4g KyAgICAgICAvKiBFRElEIGJpdHMgKi8KPiA+ICsgICAgICAgdWludDhfdCBlbGRbTUFYX0VMRF9C WVRFU107Cj4gPiArICAgICAgIGJvb2wgZHZpX2R1YWw7Cj4gPiArICAgICAgIGludCBtYXhfdG1k c19jbG9jazsgICAgIC8qIGluIE1IeiAqLwo+ID4gKyAgICAgICBib29sIGxhdGVuY3lfcHJlc2Vu dFsyXTsKPiA+ICsgICAgICAgaW50IHZpZGVvX2xhdGVuY3lbMl07ICAgLyogWzBdOiBwcm9ncmVz c2l2ZSwgWzFdOiBpbnRlcmxhY2VkICovCj4gPiArICAgICAgIGludCBhdWRpb19sYXRlbmN5WzJd Owo+ID4gKyAgICAgICBpbnQgbnVsbF9lZGlkX2NvdW50ZXI7IC8qIG5lZWRlZCB0byB3b3JrYXJv dW5kIHNvbWUgSFcgYnVncyB3aGVyZSB3ZSBnZXQgYWxsIDBzICovCj4gPiArICAgICAgIHVuc2ln bmVkIGJhZF9lZGlkX2NvdW50ZXI7Cj4gPiArCj4gPiArICAgICAgIC8qIEZsYWcgZm9yIHJhdyBF RElEIGhlYWRlciBjb3JydXB0aW9uIC0gdXNlZCBpbiBEaXNwbGF5cG9ydAo+ID4gKyAgICAgICAg KiBjb21wbGlhbmNlIHRlc3RpbmcgLSAqIERpc3BsYXlwb3J0IExpbmsgQ1RTIENvcmUgMS4yIHJl djEuMSA0LjIuMi42Cj4gPiArICAgICAgICAqLwo+ID4gKyAgICAgICBib29sIGVkaWRfY29ycnVw dDsKPiA+ICsKPiA+ICsgICAgICAgc3RydWN0IGRlbnRyeSAqZGVidWdmc19lbnRyeTsKPiA+ICsK PiA+ICsgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlOwo+ID4gKwo+ID4g KyAgICAgICAvKiBEaXNwbGF5SUQgYml0cyAqLwo+ID4gKyAgICAgICBib29sIGhhc190aWxlOwo+ ID4gKyAgICAgICBzdHJ1Y3QgZHJtX3RpbGVfZ3JvdXAgKnRpbGVfZ3JvdXA7Cj4gPiArICAgICAg IGJvb2wgdGlsZV9pc19zaW5nbGVfbW9uaXRvcjsKPiA+ICsKPiA+ICsgICAgICAgdWludDhfdCBu dW1faF90aWxlLCBudW1fdl90aWxlOwo+ID4gKyAgICAgICB1aW50OF90IHRpbGVfaF9sb2MsIHRp bGVfdl9sb2M7Cj4gPiArICAgICAgIHVpbnQxNl90IHRpbGVfaF9zaXplLCB0aWxlX3Zfc2l6ZTsK PiA+ICt9Owo+ID4gKwo+ID4gKyNkZWZpbmUgb2JqX3RvX2Nvbm5lY3Rvcih4KSBjb250YWluZXJf b2YoeCwgc3RydWN0IGRybV9jb25uZWN0b3IsIGJhc2UpCj4gPiArCj4gPiAraW50IGRybV9jb25u ZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqZnVuY3MsCj4gPiArICAg ICAgICAgICAgICAgICAgICAgIGludCBjb25uZWN0b3JfdHlwZSk7Cj4gPiAraW50IGRybV9jb25u ZWN0b3JfcmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gPiArdm9p ZCBkcm1fY29ubmVjdG9yX3VucmVnaXN0ZXIoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cik7Cj4gPiAraW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2RlcihzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ID4gKwo+ID4gK3ZvaWQgZHJt X2Nvbm5lY3Rvcl9jbGVhbnVwKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ID4g K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZHJtX2Nvbm5lY3Rvcl9pbmRleChzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsgICAgICAgcmV0dXJuIGNvbm5lY3Rvci0+ aW5kZXg7Cj4gPiArfQo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV9jb25uZWN0b3JfbG9va3Vw IC0gbG9va3VwIGNvbm5lY3RvciBvYmplY3QKPiA+ICsgKiBAZGV2OiBEUk0gZGV2aWNlCj4gPiAr ICogQGlkOiBjb25uZWN0b3Igb2JqZWN0IGlkCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9u IGxvb2tzIHVwIHRoZSBjb25uZWN0b3Igb2JqZWN0IHNwZWNpZmllZCBieSBpZAo+ID4gKyAqIGFk ZCB0YWtlcyBhIHJlZmVyZW5jZSB0byBpdC4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgaW5saW5lIHN0 cnVjdCBkcm1fY29ubmVjdG9yICpkcm1fY29ubmVjdG9yX2xvb2t1cChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2LAo+ID4gKyAgICAgICAgICAgICAgIHVpbnQzMl90IGlkKQo+ID4gK3sKPiA+ICsgICAg ICAgc3RydWN0IGRybV9tb2RlX29iamVjdCAqbW87Cj4gPiArICAgICAgIG1vID0gZHJtX21vZGVf b2JqZWN0X2ZpbmQoZGV2LCBpZCwgRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUik7Cj4gPiArICAg ICAgIHJldHVybiBtbyA/IG9ial90b19jb25uZWN0b3IobW8pIDogTlVMTDsKPiA+ICt9Cj4gPiAr Cj4gPiArLyoqCj4gPiArICogZHJtX2Nvbm5lY3Rvcl9yZWZlcmVuY2UgLSBpbmNyIHRoZSBjb25u ZWN0b3IgcmVmY250Cj4gPiArICogQGNvbm5lY3RvcjogY29ubmVjdG9yCj4gPiArICoKPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlIGNvbm5lY3RvcidzIHJlZmNvdW50Lgo+ID4g KyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1fY29ubmVjdG9yX3JlZmVyZW5jZShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gK3sKPiA+ICsgICAgICAgZHJtX21vZGVf b2JqZWN0X3JlZmVyZW5jZSgmY29ubmVjdG9yLT5iYXNlKTsKPiA+ICt9Cj4gPiArCj4gPiArLyoq Cj4gPiArICogZHJtX2Nvbm5lY3Rvcl91bnJlZmVyZW5jZSAtIHVucmVmIGEgY29ubmVjdG9yCj4g PiArICogQGNvbm5lY3RvcjogY29ubmVjdG9yIHRvIHVucmVmCj4gPiArICoKPiA+ICsgKiBUaGlz IGZ1bmN0aW9uIGRlY3JlbWVudHMgdGhlIGNvbm5lY3RvcidzIHJlZmNvdW50IGFuZCBmcmVlcyBp dCBpZiBpdCBkcm9wcyB0byB6ZXJvLgo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBk cm1fY29ubmVjdG9yX3VucmVmZXJlbmNlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4gPiArewo+ID4gKyAgICAgICBkcm1fbW9kZV9vYmplY3RfdW5yZWZlcmVuY2UoJmNvbm5lY3Rv ci0+YmFzZSk7Cj4gPiArfQo+ID4gKwo+ID4gK2NvbnN0IGNoYXIgKmRybV9nZXRfY29ubmVjdG9y X3N0YXR1c19uYW1lKGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+ICtjb25z dCBjaGFyICpkcm1fZ2V0X3N1YnBpeGVsX29yZGVyX25hbWUoZW51bSBzdWJwaXhlbF9vcmRlciBv cmRlcik7Cj4gPiArY29uc3QgY2hhciAqZHJtX2dldF9kcG1zX25hbWUoaW50IHZhbCk7Cj4gPiAr Y29uc3QgY2hhciAqZHJtX2dldF9kdmlfaV9zdWJjb25uZWN0b3JfbmFtZShpbnQgdmFsKTsKPiA+ ICtjb25zdCBjaGFyICpkcm1fZ2V0X2R2aV9pX3NlbGVjdF9uYW1lKGludCB2YWwpOwo+ID4gK2Nv bnN0IGNoYXIgKmRybV9nZXRfdHZfc3ViY29ubmVjdG9yX25hbWUoaW50IHZhbCk7Cj4gPiArY29u c3QgY2hhciAqZHJtX2dldF90dl9zZWxlY3RfbmFtZShpbnQgdmFsKTsKPiA+ICsKPiA+ICtpbnQg ZHJtX21vZGVfY3JlYXRlX2R2aV9pX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gPiAraW50IGRybV9tb2RlX2NyZWF0ZV90dl9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG51bV9tb2RlcywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICogY29uc3QgbW9kZXNbXSk7Cj4gPiAraW50IGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21v ZGVfcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAraW50IGRybV9tb2RlX2Ny ZWF0ZV9hc3BlY3RfcmF0aW9fcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAr aW50IGRybV9tb2RlX2NyZWF0ZV9zdWdnZXN0ZWRfb2Zmc2V0X3Byb3BlcnRpZXMoc3RydWN0IGRy bV9kZXZpY2UgKmRldik7Cj4gPiArCj4gPiAraW50IGRybV9tb2RlX2Nvbm5lY3Rvcl9zZXRfcGF0 aF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoKTsKPiA+ICtp bnQgZHJtX21vZGVfY29ubmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IpOwo+ID4gK2ludCBkcm1fbW9kZV9jb25uZWN0b3JfdXBkYXRlX2VkaWRf cHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGVkaWQgKmVkaWQp Owo+ID4gKyNlbmRpZgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmggYi9p bmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gPiBpbmRleCA4YjI5OWIwNDA3OWUuLmFjY2FlOWVkNmNk NyAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKPiA+ICsrKyBiL2luY2x1 ZGUvZHJtL2RybV9jcnRjLmgKPiA+IEBAIC0zOCwzMSArMzgsMTYgQEAKPiA+ICAjaW5jbHVkZSA8 ZHJtL2RybV9tb2Rlc2V0Lmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fZnJhbWVidWZmZXIuaD4K PiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2Rlcy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2Nv bm5lY3Rvci5oPgo+ID4KPiA+ICBzdHJ1Y3QgZHJtX2RldmljZTsKPiA+ICBzdHJ1Y3QgZHJtX21v ZGVfc2V0Owo+ID4gLXN0cnVjdCBkcm1fb2JqZWN0X3Byb3BlcnRpZXM7Cj4gPiAgc3RydWN0IGRy bV9maWxlOwo+ID4gIHN0cnVjdCBkcm1fY2xpcF9yZWN0Owo+ID4gIHN0cnVjdCBkZXZpY2Vfbm9k ZTsKPiA+ICBzdHJ1Y3QgZmVuY2U7Cj4gPiAgc3RydWN0IGVkaWQ7Cj4gPgo+ID4gLSNkZWZpbmUg RFJNX09CSkVDVF9NQVhfUFJPUEVSVFkgMjQKPiA+IC1zdHJ1Y3QgZHJtX29iamVjdF9wcm9wZXJ0 aWVzIHsKPiA+IC0gICAgICAgaW50IGNvdW50LCBhdG9taWNfY291bnQ7Cj4gPiAtICAgICAgIC8q IE5PVEU6IGlmIHdlIGV2ZXIgc3RhcnQgZHluYW1pY2FsbHkgZGVzdHJveWluZyBwcm9wZXJ0aWVz IChpZS4KPiA+IC0gICAgICAgICogbm90IGF0IGRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKCkgdGlt ZSksIHRoZW4gd2UnZCBoYXZlIHRvIGRvCj4gPiAtICAgICAgICAqIGEgYmV0dGVyIGpvYiBvZiBk ZXRhY2hpbmcgcHJvcGVydHkgZnJvbSBtb2RlIG9iamVjdHMgdG8gYXZvaWQKPiA+IC0gICAgICAg ICogZGFuZ2xpbmcgcHJvcGVydHkgcG9pbnRlcnM6Cj4gPiAtICAgICAgICAqLwo+ID4gLSAgICAg ICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0aWVzW0RSTV9PQkpFQ1RfTUFYX1BST1BFUlRZ XTsKPiA+IC0gICAgICAgLyogZG8gbm90IHJlYWQvd3JpdGUgdmFsdWVzIGRpcmVjdGx5LCBidXQg dXNlIGRybV9vYmplY3RfcHJvcGVydHlfZ2V0X3ZhbHVlKCkKPiA+IC0gICAgICAgICogYW5kIGRy bV9vYmplY3RfcHJvcGVydHlfc2V0X3ZhbHVlKCk6Cj4gPiAtICAgICAgICAqLwo+ID4gLSAgICAg ICB1aW50NjRfdCB2YWx1ZXNbRFJNX09CSkVDVF9NQVhfUFJPUEVSVFldOwo+ID4gLX07Cj4gPiAt Cj4gPiAgc3RhdGljIGlubGluZSBpbnQ2NF90IFU2NDJJNjQodWludDY0X3QgdmFsKQo+ID4gIHsK PiA+ICAgICAgICAgcmV0dXJuIChpbnQ2NF90KSooKGludDY0X3QgKikmdmFsKTsKPiA+IEBAIC04 Niw2MSArNzEsNiBAQCBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IEk2NDJVNjQoaW50NjRfdCB2YWwp Cj4gPiAgI2RlZmluZSBEUk1fUkVGTEVDVF9YICA0Cj4gPiAgI2RlZmluZSBEUk1fUkVGTEVDVF9Z ICA1Cj4gPgo+ID4gLWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgewo+ID4gLSAgICAgICBjb25u ZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZCA9IDEsCj4gPiAtICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNf ZGlzY29ubmVjdGVkID0gMiwKPiA+IC0gICAgICAgY29ubmVjdG9yX3N0YXR1c191bmtub3duID0g MywKPiA+IC19Owo+ID4gLQo+ID4gLWVudW0gc3VicGl4ZWxfb3JkZXIgewo+ID4gLSAgICAgICBT dWJQaXhlbFVua25vd24gPSAwLAo+ID4gLSAgICAgICBTdWJQaXhlbEhvcml6b250YWxSR0IsCj4g PiAtICAgICAgIFN1YlBpeGVsSG9yaXpvbnRhbEJHUiwKPiA+IC0gICAgICAgU3ViUGl4ZWxWZXJ0 aWNhbFJHQiwKPiA+IC0gICAgICAgU3ViUGl4ZWxWZXJ0aWNhbEJHUiwKPiA+IC0gICAgICAgU3Vi UGl4ZWxOb25lLAo+ID4gLX07Cj4gPiAtCj4gPiAtI2RlZmluZSBEUk1fQ09MT1JfRk9STUFUX1JH QjQ0NCAgICAgICAgICAgICAgICAoMTw8MCkKPiA+IC0jZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRf WUNSQ0I0NDQgICAgICAoMTw8MSkKPiA+IC0jZGVmaW5lIERSTV9DT0xPUl9GT1JNQVRfWUNSQ0I0 MjIgICAgICAoMTw8MikKPiA+IC0KPiA+IC0jZGVmaW5lIERSTV9CVVNfRkxBR19ERV9MT1cgICAg ICAgICAgICAoMTw8MCkKPiA+IC0jZGVmaW5lIERSTV9CVVNfRkxBR19ERV9ISUdIICAgICAgICAg ICAoMTw8MSkKPiA+IC0vKiBkcml2ZSBkYXRhIG9uIHBvcy4gZWRnZSAqLwo+ID4gLSNkZWZpbmUg RFJNX0JVU19GTEFHX1BJWERBVEFfUE9TRURHRSAgICgxPDwyKQo+ID4gLS8qIGRyaXZlIGRhdGEg b24gbmVnLiBlZGdlICovCj4gPiAtI2RlZmluZSBEUk1fQlVTX0ZMQUdfUElYREFUQV9ORUdFREdF ICAgKDE8PDMpCj4gPiAtCj4gPiAtLyoKPiA+IC0gKiBEZXNjcmliZXMgYSBnaXZlbiBkaXNwbGF5 IChlLmcuIENSVCBvciBmbGF0IHBhbmVsKSBhbmQgaXRzIGxpbWl0YXRpb25zLgo+ID4gLSAqLwo+ ID4gLXN0cnVjdCBkcm1fZGlzcGxheV9pbmZvIHsKPiA+IC0gICAgICAgY2hhciBuYW1lW0RSTV9E SVNQTEFZX0lORk9fTEVOXTsKPiA+IC0KPiA+IC0gICAgICAgLyogUGh5c2ljYWwgc2l6ZSAqLwo+ ID4gLSAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoX21tOwo+ID4gLSAgICAgICB1bnNpZ25lZCBp bnQgaGVpZ2h0X21tOwo+ID4gLQo+ID4gLSAgICAgICAvKiBDbG9jayBsaW1pdHMgRklYTUU6IHN0 b3JhZ2UgZm9ybWF0ICovCj4gPiAtICAgICAgIHVuc2lnbmVkIGludCBtaW5fdmZyZXEsIG1heF92 ZnJlcTsKPiA+IC0gICAgICAgdW5zaWduZWQgaW50IG1pbl9oZnJlcSwgbWF4X2hmcmVxOwo+ID4g LSAgICAgICB1bnNpZ25lZCBpbnQgcGl4ZWxfY2xvY2s7Cj4gPiAtICAgICAgIHVuc2lnbmVkIGlu dCBicGM7Cj4gPiAtCj4gPiAtICAgICAgIGVudW0gc3VicGl4ZWxfb3JkZXIgc3VicGl4ZWxfb3Jk ZXI7Cj4gPiAtICAgICAgIHUzMiBjb2xvcl9mb3JtYXRzOwo+ID4gLQo+ID4gLSAgICAgICBjb25z dCB1MzIgKmJ1c19mb3JtYXRzOwo+ID4gLSAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2J1c19mb3Jt YXRzOwo+ID4gLSAgICAgICB1MzIgYnVzX2ZsYWdzOwo+ID4gLQo+ID4gLSAgICAgICAvKiBNYXNr IG9mIHN1cHBvcnRlZCBoZG1pIGRlZXAgY29sb3IgbW9kZXMgKi8KPiA+IC0gICAgICAgdTggZWRp ZF9oZG1pX2RjX21vZGVzOwo+ID4gLQo+ID4gLSAgICAgICB1OCBjZWFfcmV2Owo+ID4gLX07Cj4g PiAtCj4gPiAgLyogZGF0YSBjb3JyZXNwb25kcyB0byBkaXNwbGF5aWQgdmVuZC9wcm9kL3Nlcmlh bCAqLwo+ID4gIHN0cnVjdCBkcm1fdGlsZV9ncm91cCB7Cj4gPiAgICAgICAgIHN0cnVjdCBrcmVm IHJlZmNvdW50Owo+ID4gQEAgLTE3Nyw3ICsxMDcsNiBAQCBzdHJ1Y3QgZHJtX3Byb3BlcnR5IHsK PiA+ICB9Owo+ID4KPiA+ICBzdHJ1Y3QgZHJtX2NydGM7Cj4gPiAtc3RydWN0IGRybV9jb25uZWN0 b3I7Cj4gPiAgc3RydWN0IGRybV9lbmNvZGVyOwo+ID4gIHN0cnVjdCBkcm1fcGVuZGluZ192Ymxh bmtfZXZlbnQ7Cj4gPiAgc3RydWN0IGRybV9wbGFuZTsKPiA+IEBAIC0xODYsNyArMTE1LDYgQEAg c3RydWN0IGRybV9hdG9taWNfc3RhdGU7Cj4gPgo+ID4gIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJf ZnVuY3M7Cj4gPiAgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jczsKPiA+IC1zdHJ1Y3Qg ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3M7Cj4gPiAgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJf ZnVuY3M7Cj4gPgo+ID4gIC8qKgo+ID4gQEAgLTczMiwyOTEgKzY2MCw2IEBAIHN0cnVjdCBkcm1f Y3J0YyB7Cj4gPiAgfTsKPiA+Cj4gPiAgLyoqCj4gPiAtICogc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgLSBtdXRhYmxlIGNvbm5lY3RvciBzdGF0ZQo+ID4gLSAqIEBjb25uZWN0b3I6IGJhY2tw b2ludGVyIHRvIHRoZSBjb25uZWN0b3IKPiA+IC0gKiBAY3J0YzogQ1JUQyB0byBjb25uZWN0IGNv bm5lY3RvciB0bywgTlVMTCBpZiBkaXNhYmxlZAo+ID4gLSAqIEBiZXN0X2VuY29kZXI6IGNhbiBi ZSB1c2VkIGJ5IGhlbHBlcnMgYW5kIGRyaXZlcnMgdG8gc2VsZWN0IHRoZSBlbmNvZGVyCj4gPiAt ICogQHN0YXRlOiBiYWNrcG9pbnRlciB0byBnbG9iYWwgZHJtX2F0b21pY19zdGF0ZQo+ID4gLSAq Lwo+ID4gLXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlIHsKPiA+IC0gICAgICAgc3RydWN0IGRy bV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+IC0KPiA+IC0gICAgICAgc3RydWN0IGRybV9jcnRj ICpjcnRjOyAgLyogZG8gbm90IHdyaXRlIGRpcmVjdGx5LCB1c2UgZHJtX2F0b21pY19zZXRfY3J0 Y19mb3JfY29ubmVjdG9yKCkgKi8KPiA+IC0KPiA+IC0gICAgICAgc3RydWN0IGRybV9lbmNvZGVy ICpiZXN0X2VuY29kZXI7Cj4gPiAtCj4gPiAtICAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRl ICpzdGF0ZTsKPiA+IC19Owo+ID4gLQo+ID4gLS8qKgo+ID4gLSAqIHN0cnVjdCBkcm1fY29ubmVj dG9yX2Z1bmNzIC0gY29udHJvbCBjb25uZWN0b3JzIG9uIGEgZ2l2ZW4gZGV2aWNlCj4gPiAtICoK PiA+IC0gKiBFYWNoIENSVEMgbWF5IGhhdmUgb25lIG9yIG1vcmUgY29ubmVjdG9ycyBhdHRhY2hl ZCB0byBpdC4gIFRoZSBmdW5jdGlvbnMKPiA+IC0gKiBiZWxvdyBhbGxvdyB0aGUgY29yZSBEUk0g Y29kZSB0byBjb250cm9sIGNvbm5lY3RvcnMsIGVudW1lcmF0ZSBhdmFpbGFibGUgbW9kZXMsCj4g PiAtICogZXRjLgo+ID4gLSAqLwo+ID4gLXN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIHsKPiA+ IC0gICAgICAgLyoqCj4gPiAtICAgICAgICAqIEBkcG1zOgo+ID4gLSAgICAgICAgKgo+ID4gLSAg ICAgICAgKiBMZWdhY3kgZW50cnkgcG9pbnQgdG8gc2V0IHRoZSBwZXItY29ubmVjdG9yIERQTVMg c3RhdGUuIExlZ2FjeSBEUE1TCj4gPiAtICAgICAgICAqIGlzIGV4cG9zZWQgYXMgYSBzdGFuZGFy ZCBwcm9wZXJ0eSBvbiB0aGUgY29ubmVjdG9yLCBidXQgZGl2ZXJ0ZWQgdG8KPiA+IC0gICAgICAg ICogdGhpcyBjYWxsYmFjayBpbiB0aGUgZHJtIGNvcmUuIE5vdGUgdGhhdCBhdG9taWMgZHJpdmVy cyBkb24ndAo+ID4gLSAgICAgICAgKiBpbXBsZW1lbnQgdGhlIDQgbGV2ZWwgRFBNUyBzdXBwb3J0 IG9uIHRoZSBjb25uZWN0b3IgYW55IG1vcmUsIGJ1dAo+ID4gLSAgICAgICAgKiBpbnN0ZWFkIG9u bHkgaGF2ZSBhbiBvbi9vZmYgIkFDVElWRSIgcHJvcGVydHkgb24gdGhlIENSVEMgb2JqZWN0Lgo+ ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBEcml2ZXJzIGltcGxlbWVudGluZyBhdG9taWMg bW9kZXNldCBzaG91bGQgdXNlCj4gPiAtICAgICAgICAqIGRybV9hdG9taWNfaGVscGVyX2Nvbm5l Y3Rvcl9kcG1zKCkgdG8gaW1wbGVtZW50IHRoaXMgaG9vay4KPiA+IC0gICAgICAgICoKPiA+IC0g ICAgICAgICogUkVUVVJOUzoKPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogMCBvbiBzdWNj ZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ID4gLSAgICAgICAgKi8K PiA+IC0gICAgICAgaW50ICgqZHBtcykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwg aW50IG1vZGUpOwo+ID4gLQo+ID4gLSAgICAgICAvKioKPiA+IC0gICAgICAgICogQHJlc2V0Ogo+ ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBSZXNldCBjb25uZWN0b3IgaGFyZHdhcmUgYW5k IHNvZnR3YXJlIHN0YXRlIHRvIG9mZi4gVGhpcyBmdW5jdGlvbiBpc24ndAo+ID4gLSAgICAgICAg KiBjYWxsZWQgYnkgdGhlIGNvcmUgZGlyZWN0bHksIG9ubHkgdGhyb3VnaCBkcm1fbW9kZV9jb25m aWdfcmVzZXQoKS4KPiA+IC0gICAgICAgICogSXQncyBub3QgYSBoZWxwZXIgaG9vayBvbmx5IGZv ciBoaXN0b3JpY2FsIHJlYXNvbnMuCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIEF0b21p YyBkcml2ZXJzIGNhbiB1c2UgZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX3Jlc2V0KCkgdG8g cmVzZXQKPiA+IC0gICAgICAgICogYXRvbWljIHN0YXRlIHVzaW5nIHRoaXMgaG9vay4KPiA+IC0g ICAgICAgICovCj4gPiAtICAgICAgIHZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jb25uZWN0b3Ig KmNvbm5lY3Rvcik7Cj4gPiAtCj4gPiAtICAgICAgIC8qKgo+ID4gLSAgICAgICAgKiBAZGV0ZWN0 Ogo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBDaGVjayB0byBzZWUgaWYgYW55dGhpbmcg aXMgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3Rvci4gVGhlIHBhcmFtZXRlcgo+ID4gLSAgICAgICAg KiBmb3JjZSBpcyBzZXQgdG8gZmFsc2Ugd2hpbHN0IHBvbGxpbmcsIHRydWUgd2hlbiBjaGVja2lu ZyB0aGUKPiA+IC0gICAgICAgICogY29ubmVjdG9yIGR1ZSB0byBhIHVzZXIgcmVxdWVzdC4gZm9y Y2UgY2FuIGJlIHVzZWQgYnkgdGhlIGRyaXZlciB0bwo+ID4gLSAgICAgICAgKiBhdm9pZCBleHBl bnNpdmUsIGRlc3RydWN0aXZlIG9wZXJhdGlvbnMgZHVyaW5nIGF1dG9tYXRlZCBwcm9iaW5nLgo+ ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBGSVhNRToKPiA+IC0gICAgICAgICoKPiA+IC0g ICAgICAgICogTm90ZSB0aGF0IHRoaXMgaG9vayBpcyBvbmx5IGNhbGxlZCBieSB0aGUgcHJvYmUg aGVscGVyLiBJdCdzIG5vdCBpbgo+ID4gLSAgICAgICAgKiB0aGUgaGVscGVyIGxpYnJhcnkgdnRh YmxlIHB1cmVseSBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiBUaGUgb25seSBEUk0KPiA+IC0gICAg ICAgICogY29yZSBlbnRyeSBwb2ludCB0byBwcm9iZSBjb25uZWN0b3Igc3RhdGUgaXMgQGZpbGxf bW9kZXMuCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIFJFVFVSTlM6Cj4gPiAtICAgICAg ICAqCj4gPiAtICAgICAgICAqIGRybV9jb25uZWN0b3Jfc3RhdHVzIGluZGljYXRpbmcgdGhlIGNv bm5lY3RvcidzIHN0YXR1cy4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIGVudW0gZHJtX2Nv bm5lY3Rvcl9zdGF0dXMgKCpkZXRlY3QpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Is Cj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9y Y2UpOwo+ID4gLQo+ID4gLSAgICAgICAvKioKPiA+IC0gICAgICAgICogQGZvcmNlOgo+ID4gLSAg ICAgICAgKgo+ID4gLSAgICAgICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byB1cGRhdGUg aW50ZXJuYWwgZW5jb2RlciBzdGF0ZSB3aGVuIHRoZQo+ID4gLSAgICAgICAgKiBjb25uZWN0b3Ig aXMgZm9yY2VkIHRvIGEgY2VydGFpbiBzdGF0ZSBieSB1c2Vyc3BhY2UsIGVpdGhlciB0aHJvdWdo Cj4gPiAtICAgICAgICAqIHRoZSBzeXNmcyBpbnRlcmZhY2VzIG9yIG9uIHRoZSBrZXJuZWwgY21k bGluZS4gSW4gdGhhdCBjYXNlIHRoZQo+ID4gLSAgICAgICAgKiBAZGV0ZWN0IGNhbGxiYWNrIGlz bid0IGNhbGxlZC4KPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogRklYTUU6Cj4gPiAtICAg ICAgICAqCj4gPiAtICAgICAgICAqIE5vdGUgdGhhdCB0aGlzIGhvb2sgaXMgb25seSBjYWxsZWQg YnkgdGhlIHByb2JlIGhlbHBlci4gSXQncyBub3QgaW4KPiA+IC0gICAgICAgICogdGhlIGhlbHBl ciBsaWJyYXJ5IHZ0YWJsZSBwdXJlbHkgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gVGhlIG9ubHkg RFJNCj4gPiAtICAgICAgICAqIGNvcmUgZW50cnkgcG9pbnQgdG8gcHJvYmUgY29ubmVjdG9yIHN0 YXRlIGlzIEBmaWxsX21vZGVzLgo+ID4gLSAgICAgICAgKi8KPiA+IC0gICAgICAgdm9pZCAoKmZv cmNlKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+IC0KPiA+IC0gICAgICAg LyoqCj4gPiAtICAgICAgICAqIEBmaWxsX21vZGVzOgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAg ICAgKiBFbnRyeSBwb2ludCBmb3Igb3V0cHV0IGRldGVjdGlvbiBhbmQgYmFzaWMgbW9kZSB2YWxp ZGF0aW9uLiBUaGUKPiA+IC0gICAgICAgICogZHJpdmVyIHNob3VsZCByZXByb2JlIHRoZSBvdXRw dXQgaWYgbmVlZGVkIChlLmcuIHdoZW4gaG90cGx1Zwo+ID4gLSAgICAgICAgKiBoYW5kbGluZyBp cyB1bnJlbGlhYmxlKSwgYWRkIGFsbCBkZXRlY3RlZCBtb2RlcyB0byBjb25uZWN0b3ItPm1vZGVz Cj4gPiAtICAgICAgICAqIGFuZCBmaWx0ZXIgb3V0IGFueSB0aGUgZGV2aWNlIGNhbid0IHN1cHBv cnQgaW4gYW55IGNvbmZpZ3VyYXRpb24uIEl0Cj4gPiAtICAgICAgICAqIGFsc28gbmVlZHMgdG8g ZmlsdGVyIG91dCBhbnkgbW9kZXMgd2lkZXIgb3IgaGlnaGVyIHRoYW4gdGhlCj4gPiAtICAgICAg ICAqIHBhcmFtZXRlcnMgbWF4X3dpZHRoIGFuZCBtYXhfaGVpZ2h0IGluZGljYXRlLgo+ID4gLSAg ICAgICAgKgo+ID4gLSAgICAgICAgKiBUaGUgZHJpdmVycyBtdXN0IGFsc28gcHJ1bmUgYW55IG1v ZGVzIG5vIGxvbmdlciB2YWxpZCBmcm9tCj4gPiAtICAgICAgICAqIGNvbm5lY3Rvci0+bW9kZXMu IEZ1cnRoZXJtb3JlIGl0IG11c3QgdXBkYXRlIGNvbm5lY3Rvci0+c3RhdHVzIGFuZAo+ID4gLSAg ICAgICAgKiBjb25uZWN0b3ItPmVkaWQuICBJZiBubyBFRElEIGhhcyBiZWVuIHJlY2VpdmVkIGZv ciB0aGlzIG91dHB1dAo+ID4gLSAgICAgICAgKiBjb25uZWN0b3ItPmVkaWQgbXVzdCBiZSBOVUxM Lgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBEcml2ZXJzIHVzaW5nIHRoZSBwcm9iZSBo ZWxwZXJzIHNob3VsZCB1c2UKPiA+IC0gICAgICAgICogZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVf Y29ubmVjdG9yX21vZGVzKCkgb3IKPiA+IC0gICAgICAgICogZHJtX2hlbHBlcl9wcm9iZV9zaW5n bGVfY29ubmVjdG9yX21vZGVzX25vbWVyZ2UoKSB0byBpbXBsZW1lbnQgdGhpcwo+ID4gLSAgICAg ICAgKiBmdW5jdGlvbi4KPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogUkVUVVJOUzoKPiA+ IC0gICAgICAgICoKPiA+IC0gICAgICAgICogVGhlIG51bWJlciBvZiBtb2RlcyBkZXRlY3RlZCBh bmQgZmlsbGVkIGludG8gY29ubmVjdG9yLT5tb2Rlcy4KPiA+IC0gICAgICAgICovCj4gPiAtICAg ICAgIGludCAoKmZpbGxfbW9kZXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHVp bnQzMl90IG1heF93aWR0aCwgdWludDMyX3QgbWF4X2hlaWdodCk7Cj4gPiAtCj4gPiAtICAgICAg IC8qKgo+ID4gLSAgICAgICAgKiBAc2V0X3Byb3BlcnR5Ogo+ID4gLSAgICAgICAgKgo+ID4gLSAg ICAgICAgKiBUaGlzIGlzIHRoZSBsZWdhY3kgZW50cnkgcG9pbnQgdG8gdXBkYXRlIGEgcHJvcGVy dHkgYXR0YWNoZWQgdG8gdGhlCj4gPiAtICAgICAgICAqIGNvbm5lY3Rvci4KPiA+IC0gICAgICAg ICoKPiA+IC0gICAgICAgICogRHJpdmVycyBpbXBsZW1lbnRpbmcgYXRvbWljIG1vZGVzZXQgc2hv dWxkIHVzZQo+ID4gLSAgICAgICAgKiBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jfc2V0X3By b3BlcnR5KCkgdG8gaW1wbGVtZW50IHRoaXMgaG9vay4KPiA+IC0gICAgICAgICoKPiA+IC0gICAg ICAgICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHN1 cHBvcnQgYW55IGxlZ2FjeQo+ID4gLSAgICAgICAgKiBkcml2ZXItcHJpdmF0ZSBwcm9wZXJ0aWVz Lgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBSRVRVUk5TOgo+ID4gLSAgICAgICAgKgo+ ID4gLSAgICAgICAgKiAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZh aWx1cmUuCj4gPiAtICAgICAgICAqLwo+ID4gLSAgICAgICBpbnQgKCpzZXRfcHJvcGVydHkpKHN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3Bl cnR5LAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWwpOwo+ID4g LQo+ID4gLSAgICAgICAvKioKPiA+IC0gICAgICAgICogQGxhdGVfcmVnaXN0ZXI6Cj4gPiAtICAg ICAgICAqCj4gPiAtICAgICAgICAqIFRoaXMgb3B0aW9uYWwgaG9vayBjYW4gYmUgdXNlZCB0byBy ZWdpc3RlciBhZGRpdGlvbmFsIHVzZXJzcGFjZQo+ID4gLSAgICAgICAgKiBpbnRlcmZhY2VzIGF0 dGFjaGVkIHRvIHRoZSBjb25uZWN0b3IsIGxpZ2h0IGJhY2tsaWdodCBjb250cm9sLCBpMmMsCj4g PiAtICAgICAgICAqIERQIGF1eCBvciBzaW1pbGFyIGludGVyZmFjZXMuIEl0IGlzIGNhbGxlZCBs YXRlIGluIHRoZSBkcml2ZXIgbG9hZAo+ID4gLSAgICAgICAgKiBzZXF1ZW5jZSBmcm9tIGRybV9j b25uZWN0b3JfcmVnaXN0ZXIoKSB3aGVuIHJlZ2lzdGVyaW5nIGFsbCB0aGUKPiA+IC0gICAgICAg ICogY29yZSBkcm0gY29ubmVjdG9yIGludGVyZmFjZXMuIEV2ZXJ5dGhpbmcgYWRkZWQgZnJvbSB0 aGlzIGNhbGxiYWNrCj4gPiAtICAgICAgICAqIHNob3VsZCBiZSB1bnJlZ2lzdGVyZWQgaW4gdGhl IGVhcmx5X3VucmVnaXN0ZXIgY2FsbGJhY2suCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAq IFJldHVybnM6Cj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIDAgb24gc3VjY2Vzcywgb3Ig YSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gPiAtICAgICAgICAqLwo+ID4gLSAg ICAgICBpbnQgKCpsYXRlX3JlZ2lzdGVyKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9y KTsKPiA+IC0KPiA+IC0gICAgICAgLyoqCj4gPiAtICAgICAgICAqIEBlYXJseV91bnJlZ2lzdGVy Ogo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBUaGlzIG9wdGlvbmFsIGhvb2sgc2hvdWxk IGJlIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgYWRkaXRpb25hbAo+ID4gLSAgICAgICAgKiB1c2Vy c3BhY2UgaW50ZXJmYWNlcyBhdHRhY2hlZCB0byB0aGUgY29ubmVjdG9yIGZyb20KPiA+IC0gICAg ICAgICogbGF0ZV91bnJlZ2lzdGVyKCkuIEl0IGlzIGNhbGxlZCBmcm9tIGRybV9jb25uZWN0b3Jf dW5yZWdpc3RlcigpLAo+ID4gLSAgICAgICAgKiBlYXJseSBpbiB0aGUgZHJpdmVyIHVubG9hZCBz ZXF1ZW5jZSB0byBkaXNhYmxlIHVzZXJzcGFjZSBhY2Nlc3MKPiA+IC0gICAgICAgICogYmVmb3Jl IGRhdGEgc3RydWN0dXJlcyBhcmUgdG9ybmRvd24uCj4gPiAtICAgICAgICAqLwo+ID4gLSAgICAg ICB2b2lkICgqZWFybHlfdW5yZWdpc3Rlcikoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv cik7Cj4gPiAtCj4gPiAtICAgICAgIC8qKgo+ID4gLSAgICAgICAgKiBAZGVzdHJveToKPiA+IC0g ICAgICAgICoKPiA+IC0gICAgICAgICogQ2xlYW4gdXAgY29ubmVjdG9yIHJlc291cmNlcy4gVGhp cyBpcyBjYWxsZWQgYXQgZHJpdmVyIHVubG9hZCB0aW1lCj4gPiAtICAgICAgICAqIHRocm91Z2gg ZHJtX21vZGVfY29uZmlnX2NsZWFudXAoKS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGF0IHJ1bnRp bWUKPiA+IC0gICAgICAgICogd2hlbiBhIGNvbm5lY3RvciBpcyBiZWluZyBob3QtdW5wbHVnZ2Vk IGZvciBkcml2ZXJzIHRoYXQgc3VwcG9ydAo+ID4gLSAgICAgICAgKiBjb25uZWN0b3IgaG90cGx1 Z2dpbmcgKGUuZy4gRGlzcGxheVBvcnQgTVNUKS4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAg IHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+IC0K PiA+IC0gICAgICAgLyoqCj4gPiAtICAgICAgICAqIEBhdG9taWNfZHVwbGljYXRlX3N0YXRlOgo+ ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBEdXBsaWNhdGUgdGhlIGN1cnJlbnQgYXRvbWlj IHN0YXRlIGZvciB0aGlzIGNvbm5lY3RvciBhbmQgcmV0dXJuIGl0Lgo+ID4gLSAgICAgICAgKiBU aGUgY29yZSBhbmQgaGVscGVycyBndXJhbnRlZSB0aGF0IGFueSBhdG9taWMgc3RhdGUgZHVwbGlj YXRlZCB3aXRoCj4gPiAtICAgICAgICAqIHRoaXMgaG9vayBhbmQgc3RpbGwgb3duZWQgYnkgdGhl IGNhbGxlciAoaS5lLiBub3QgdHJhbnNmZXJyZWQgdG8gdGhlCj4gPiAtICAgICAgICAqIGRyaXZl ciBieSBjYWxsaW5nIC0+YXRvbWljX2NvbW1pdCgpIGZyb20gc3RydWN0Cj4gPiAtICAgICAgICAq ICZkcm1fbW9kZV9jb25maWdfZnVuY3MpIHdpbGwgYmUgY2xlYW5lZCB1cCBieSBjYWxsaW5nIHRo ZQo+ID4gLSAgICAgICAgKiBAYXRvbWljX2Rlc3Ryb3lfc3RhdGUgaG9vayBpbiB0aGlzIHN0cnVj dHVyZS4KPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogQXRvbWljIGRyaXZlcnMgd2hpY2gg ZG9uJ3Qgc3ViY2xhc3Mgc3RydWN0ICZkcm1fY29ubmVjdG9yX3N0YXRlIHNob3VsZCB1c2UKPiA+ IC0gICAgICAgICogZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSgp LiBEcml2ZXJzIHRoYXQgc3ViY2xhc3MgdGhlCj4gPiAtICAgICAgICAqIHN0YXRlIHN0cnVjdHVy ZSB0byBleHRlbmQgaXQgd2l0aCBkcml2ZXItcHJpdmF0ZSBzdGF0ZSBzaG91bGQgdXNlCj4gPiAt ICAgICAgICAqIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZSgp IHRvIG1ha2Ugc3VyZSBzaGFyZWQgc3RhdGUgaXMKPiA+IC0gICAgICAgICogZHVwbGljYXRlZCBp biBhIGNvbnNpc3RlbnQgZmFzaGlvbiBhY3Jvc3MgZHJpdmVycy4KPiA+IC0gICAgICAgICoKPiA+ IC0gICAgICAgICogSXQgaXMgYW4gZXJyb3IgdG8gY2FsbCB0aGlzIGhvb2sgYmVmb3JlIGNvbm5l Y3Rvci0+c3RhdGUgaGFzIGJlZW4KPiA+IC0gICAgICAgICogaW5pdGlhbGl6ZWQgY29ycmVjdGx5 Lgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBOT1RFOgo+ID4gLSAgICAgICAgKgo+ID4g LSAgICAgICAgKiBJZiB0aGUgZHVwbGljYXRlIHN0YXRlIHJlZmVyZW5jZXMgcmVmY291bnRlZCBy ZXNvdXJjZXMgdGhpcyBob29rIG11c3QKPiA+IC0gICAgICAgICogYWNxdWlyZSBhIHJlZmVyZW5j ZSBmb3IgZWFjaCBvZiB0aGVtLiBUaGUgZHJpdmVyIG11c3QgcmVsZWFzZSB0aGVzZQo+ID4gLSAg ICAgICAgKiByZWZlcmVuY2VzIGFnYWluIGluIEBhdG9taWNfZGVzdHJveV9zdGF0ZS4KPiA+IC0g ICAgICAgICoKPiA+IC0gICAgICAgICogUkVUVVJOUzoKPiA+IC0gICAgICAgICoKPiA+IC0gICAg ICAgICogRHVwbGljYXRlZCBhdG9taWMgc3RhdGUgb3IgTlVMTCB3aGVuIHRoZSBhbGxvY2F0aW9u IGZhaWxlZC4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9y X3N0YXRlICooKmF0b21pY19kdXBsaWNhdGVfc3RhdGUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpOwo+ID4gLQo+ID4gLSAgICAgICAvKioKPiA+IC0gICAgICAgICogQGF0b21pY19k ZXN0cm95X3N0YXRlOgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBEZXN0cm95IGEgc3Rh dGUgZHVwbGljYXRlZCB3aXRoIEBhdG9taWNfZHVwbGljYXRlX3N0YXRlIGFuZCByZWxlYXNlCj4g PiAtICAgICAgICAqIG9yIHVucmVmZXJlbmNlIGFsbCByZXNvdXJjZXMgaXQgcmVmZXJlbmNlcwo+ ID4gLSAgICAgICAgKi8KPiA+IC0gICAgICAgdm9pZCAoKmF0b21pY19kZXN0cm95X3N0YXRlKShz dHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSk7Cj4gPiAt Cj4gPiAtICAgICAgIC8qKgo+ID4gLSAgICAgICAgKiBAYXRvbWljX3NldF9wcm9wZXJ0eToKPiA+ IC0gICAgICAgICoKPiA+IC0gICAgICAgICogRGVjb2RlIGEgZHJpdmVyLXByaXZhdGUgcHJvcGVy dHkgdmFsdWUgYW5kIHN0b3JlIHRoZSBkZWNvZGVkIHZhbHVlCj4gPiAtICAgICAgICAqIGludG8g dGhlIHBhc3NlZC1pbiBzdGF0ZSBzdHJ1Y3R1cmUuIFNpbmNlIHRoZSBhdG9taWMgY29yZSBkZWNv ZGVzIGFsbAo+ID4gLSAgICAgICAgKiBzdGFuZGFyZGl6ZWQgcHJvcGVydGllcyAoZXZlbiBmb3Ig ZXh0ZW5zaW9ucyBiZXlvbmQgdGhlIGNvcmUgc2V0IG9mCj4gPiAtICAgICAgICAqIHByb3BlcnRp ZXMgd2hpY2ggbWlnaHQgbm90IGJlIGltcGxlbWVudGVkIGJ5IGFsbCBkcml2ZXJzKSB0aGlzCj4g PiAtICAgICAgICAqIHJlcXVpcmVzIGRyaXZlcnMgdG8gc3ViY2xhc3MgdGhlIHN0YXRlIHN0cnVj dHVyZS4KPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogU3VjaCBkcml2ZXItcHJpdmF0ZSBw cm9wZXJ0aWVzIHNob3VsZCByZWFsbHkgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IKPiA+IC0gICAg ICAgICogdHJ1bHkgaGFyZHdhcmUvdmVuZG9yIHNwZWNpZmljIHN0YXRlLiBJbnN0ZWFkIGl0IGlz IHByZWZlcnJlZCB0bwo+ID4gLSAgICAgICAgKiBzdGFuZGFyZGl6ZSBhdG9taWMgZXh0ZW5zaW9u IGFuZCBkZWNvZGUgdGhlIHByb3BlcnRpZXMgdXNlZCB0byBleHBvc2UKPiA+IC0gICAgICAgICog c3VjaCBhbiBleHRlbnNpb24gaW4gdGhlIGNvcmUuCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAg ICAqIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIHVzZQo+ID4gLSAgICAgICAg KiBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRfcHJvcGVydHkoKSBpbnN0ZWFkLgo+ID4gLSAgICAg ICAgKgo+ID4gLSAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGlmIHRoZSBkcml2 ZXIgZG9lcyBub3Qgc3VwcG9ydCBhbnkKPiA+IC0gICAgICAgICogZHJpdmVyLXByaXZhdGUgYXRv bWljIHByb3BlcnRpZXMuCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIE5PVEU6Cj4gPiAt ICAgICAgICAqCj4gPiAtICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIHRoZSBz dGF0ZSBhc3NlbWJseSBwaGFzZSBvZiBhdG9taWMKPiA+IC0gICAgICAgICogbW9kZXNldHMsIHdo aWNoIGNhbiBiZSBhYm9ydGVkIGZvciBhbnkgcmVhc29uIChpbmNsdWRpbmcgb24KPiA+IC0gICAg ICAgICogdXNlcnNwYWNlJ3MgcmVxdWVzdCB0byBqdXN0IGNoZWNrIHdoZXRoZXIgYSBjb25maWd1 cmF0aW9uIHdvdWxkIGJlCj4gPiAtICAgICAgICAqIHBvc3NpYmxlKS4gRHJpdmVycyBNVVNUIE5P VCB0b3VjaCBhbnkgcGVyc2lzdGVudCBzdGF0ZSAoaGFyZHdhcmUgb3IKPiA+IC0gICAgICAgICog c29mdHdhcmUpIG9yIGRhdGEgc3RydWN0dXJlcyBleGNlcHQgdGhlIHBhc3NlZCBpbiBAc3RhdGUg cGFyYW1ldGVyLgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBBbHNvIHNpbmNlIHVzZXJz cGFjZSBjb250cm9scyBpbiB3aGljaCBvcmRlciBwcm9wZXJ0aWVzIGFyZSBzZXQgdGhpcwo+ID4g LSAgICAgICAgKiBmdW5jdGlvbiBtdXN0IG5vdCBkbyBhbnkgaW5wdXQgdmFsaWRhdGlvbiAoc2lu Y2UgdGhlIHN0YXRlIHVwZGF0ZSBpcwo+ID4gLSAgICAgICAgKiBpbmNvbXBsZXRlIGFuZCBoZW5j ZSBsaWtlbHkgaW5jb25zaXN0ZW50KS4gSW5zdGVhZCBhbnkgc3VjaCBpbnB1dAo+ID4gLSAgICAg ICAgKiB2YWxpZGF0aW9uIG11c3QgYmUgZG9uZSBpbiB0aGUgdmFyaW91cyBhdG9taWNfY2hlY2sg Y2FsbGJhY2tzLgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBSRVRVUk5TOgo+ID4gLSAg ICAgICAgKgo+ID4gLSAgICAgICAgKiAwIGlmIHRoZSBwcm9wZXJ0eSBoYXMgYmVlbiBmb3VuZCwg LUVJTlZBTCBpZiB0aGUgcHJvcGVydHkgaXNuJ3QKPiA+IC0gICAgICAgICogaW1wbGVtZW50ZWQg YnkgdGhlIGRyaXZlciAod2hpY2ggc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCB0aGUgY29yZSBvbmx5 Cj4gPiAtICAgICAgICAqIGFza3MgZm9yIHByb3BlcnRpZXMgYXR0YWNoZWQgdG8gdGhpcyBjb25u ZWN0b3IpLiBObyBvdGhlciB2YWxpZGF0aW9uCj4gPiAtICAgICAgICAqIGlzIGFsbG93ZWQgYnkg dGhlIGRyaXZlci4gVGhlIGNvcmUgYWxyZWFkeSBjaGVja3MgdGhhdCB0aGUgcHJvcGVydHkKPiA+ IC0gICAgICAgICogdmFsdWUgaXMgd2l0aGluIHRoZSByYW5nZSAoaW50ZWdlciwgdmFsaWQgZW51 bSB2YWx1ZSwgLi4uKSB0aGUgZHJpdmVyCj4gPiAtICAgICAgICAqIHNldCB3aGVuIHJlZ2lzdGVy aW5nIHRoZSBwcm9wZXJ0eS4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIGludCAoKmF0b21p Y19zZXRfcHJvcGVydHkpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRl ICpzdGF0ZSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9wcm9wZXJ0eSAqcHJvcGVydHksCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90IHZhbCk7Cj4gPiAtCj4gPiAtICAgICAgIC8qKgo+ID4gLSAgICAgICAgKiBA YXRvbWljX2dldF9wcm9wZXJ0eToKPiA+IC0gICAgICAgICoKPiA+IC0gICAgICAgICogUmVhZHMg b3V0IHRoZSBkZWNvZGVkIGRyaXZlci1wcml2YXRlIHByb3BlcnR5LiBUaGlzIGlzIHVzZWQgdG8K PiA+IC0gICAgICAgICogaW1wbGVtZW50IHRoZSBHRVRDT05ORUNUT1IgSU9DVEwuCj4gPiAtICAg ICAgICAqCj4gPiAtICAgICAgICAqIERvIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHks IHVzZQo+ID4gLSAgICAgICAgKiBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoKSBp bnN0ZWFkLgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBUaGlzIGNhbGxiYWNrIGlzIG9w dGlvbmFsIGlmIHRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCBhbnkKPiA+IC0gICAgICAgICog ZHJpdmVyLXByaXZhdGUgYXRvbWljIHByb3BlcnRpZXMuCj4gPiAtICAgICAgICAqCj4gPiAtICAg ICAgICAqIFJFVFVSTlM6Cj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIDAgb24gc3VjY2Vz cywgLUVJTlZBTCBpZiB0aGUgcHJvcGVydHkgaXNuJ3QgaW1wbGVtZW50ZWQgYnkgdGhlCj4gPiAt ICAgICAgICAqIGRyaXZlciAod2hpY2ggc2hvdWxkbid0IGV2ZXIgaGFwcGVuLCB0aGUgY29yZSBv bmx5IGFza3MgZm9yCj4gPiAtICAgICAgICAqIHByb3BlcnRpZXMgYXR0YWNoZWQgdG8gdGhpcyBj b25uZWN0b3IpLgo+ID4gLSAgICAgICAgKi8KPiA+IC0gICAgICAgaW50ICgqYXRvbWljX2dldF9w cm9wZXJ0eSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+IC0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUg KnN0YXRlLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X3Byb3BlcnR5ICpwcm9wZXJ0eSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgKnZhbCk7Cj4gPiAtfTsKPiA+IC0KPiA+IC0vKioKPiA+ICAgKiBzdHJ1Y3Qg ZHJtX2VuY29kZXJfZnVuY3MgLSBlbmNvZGVyIGNvbnRyb2xzCj4gPiAgICoKPiA+ICAgKiBFbmNv ZGVycyBzaXQgYmV0d2VlbiBDUlRDcyBhbmQgY29ubmVjdG9ycy4KPiA+IEBAIC0xMDY3LDggKzcx MCw2IEBAIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7Cj4gPiAgICAgICAgIHZvaWQgKCplYXJs eV91bnJlZ2lzdGVyKShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwo+ID4gIH07Cj4gPgo+ ID4gLSNkZWZpbmUgRFJNX0NPTk5FQ1RPUl9NQVhfRU5DT0RFUiAzCj4gPiAtCj4gPiAgLyoqCj4g PiAgICogc3RydWN0IGRybV9lbmNvZGVyIC0gY2VudHJhbCBEUk0gZW5jb2RlciBzdHJ1Y3R1cmUK PiA+ICAgKiBAZGV2OiBwYXJlbnQgRFJNIGRldmljZQo+ID4gQEAgLTExMDksMTcxICs3NTAsNiBA QCBzdHJ1Y3QgZHJtX2VuY29kZXIgewo+ID4gICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2VuY29k ZXJfaGVscGVyX2Z1bmNzICpoZWxwZXJfcHJpdmF0ZTsKPiA+ICB9Owo+ID4KPiA+IC0vKiBzaG91 bGQgd2UgcG9sbCB0aGlzIGNvbm5lY3RvciBmb3IgY29ubmVjdHMgYW5kIGRpc2Nvbm5lY3RzICov Cj4gPiAtLyogaG90IHBsdWcgZGV0ZWN0YWJsZSAqLwo+ID4gLSNkZWZpbmUgRFJNX0NPTk5FQ1RP Ul9QT0xMX0hQRCAoMSA8PCAwKQo+ID4gLS8qIHBvbGwgZm9yIGNvbm5lY3Rpb25zICovCj4gPiAt I2RlZmluZSBEUk1fQ09OTkVDVE9SX1BPTExfQ09OTkVDVCAoMSA8PCAxKQo+ID4gLS8qIGNhbiBj bGVhbmx5IHBvbGwgZm9yIGRpc2Nvbm5lY3Rpb25zIHdpdGhvdXQgZmxpY2tlcmluZyB0aGUgc2Ny ZWVuICovCj4gPiAtLyogREFDcyBzaG91bGQgcmFyZWx5IGRvIHRoaXMgd2l0aG91dCBhIGxvdCBv ZiB0ZXN0aW5nICovCj4gPiAtI2RlZmluZSBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVCAo MSA8PCAyKQo+ID4gLQo+ID4gLSNkZWZpbmUgTUFYX0VMRF9CWVRFUyAgMTI4Cj4gPiAtCj4gPiAt LyoqCj4gPiAtICogc3RydWN0IGRybV9jb25uZWN0b3IgLSBjZW50cmFsIERSTSBjb25uZWN0b3Ig Y29udHJvbCBzdHJ1Y3R1cmUKPiA+IC0gKiBAZGV2OiBwYXJlbnQgRFJNIGRldmljZQo+ID4gLSAq IEBrZGV2OiBrZXJuZWwgZGV2aWNlIGZvciBzeXNmcyBhdHRyaWJ1dGVzCj4gPiAtICogQGF0dHI6 IHN5c2ZzIGF0dHJpYnV0ZXMKPiA+IC0gKiBAaGVhZDogbGlzdCBtYW5hZ2VtZW50Cj4gPiAtICog QGJhc2U6IGJhc2UgS01TIG9iamVjdAo+ID4gLSAqIEBuYW1lOiBodW1hbiByZWFkYWJsZSBuYW1l LCBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRyaXZlcgo+ID4gLSAqIEBjb25uZWN0b3JfdHlw ZTogb25lIG9mIHRoZSBEUk1fTU9ERV9DT05ORUNUT1JfPGZvbz4gdHlwZXMgZnJvbSBkcm1fbW9k ZS5oCj4gPiAtICogQGNvbm5lY3Rvcl90eXBlX2lkOiBpbmRleCBpbnRvIGNvbm5lY3RvciB0eXBl IGVudW0KPiA+IC0gKiBAaW50ZXJsYWNlX2FsbG93ZWQ6IGNhbiB0aGlzIGNvbm5lY3RvciBoYW5k bGUgaW50ZXJsYWNlZCBtb2Rlcz8KPiA+IC0gKiBAZG91Ymxlc2Nhbl9hbGxvd2VkOiBjYW4gdGhp cyBjb25uZWN0b3IgaGFuZGxlIGRvdWJsZXNjYW4/Cj4gPiAtICogQHN0ZXJlb19hbGxvd2VkOiBj YW4gdGhpcyBjb25uZWN0b3IgaGFuZGxlIHN0ZXJlbyBtb2Rlcz8KPiA+IC0gKiBAcmVnaXN0ZXJl ZDogaXMgdGhpcyBjb25uZWN0b3IgZXhwb3NlZCAocmVnaXN0ZXJlZCkgd2l0aCB1c2Vyc3BhY2U/ Cj4gPiAtICogQG1vZGVzOiBtb2RlcyBhdmFpbGFibGUgb24gdGhpcyBjb25uZWN0b3IgKGZyb20g ZmlsbF9tb2RlcygpICsgdXNlcikKPiA+IC0gKiBAc3RhdHVzOiBvbmUgb2YgdGhlIGRybV9jb25u ZWN0b3Jfc3RhdHVzIGVudW1zIChjb25uZWN0ZWQsIG5vdCwgb3IgdW5rbm93bikKPiA+IC0gKiBA cHJvYmVkX21vZGVzOiBsaXN0IG9mIG1vZGVzIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGUgZGlz cGxheQo+ID4gLSAqIEBkaXNwbGF5X2luZm86IGluZm9ybWF0aW9uIGFib3V0IGF0dGFjaGVkIGRp c3BsYXkgKGUuZy4gZnJvbSBFRElEKQo+ID4gLSAqIEBmdW5jczogY29ubmVjdG9yIGNvbnRyb2wg ZnVuY3Rpb25zCj4gPiAtICogQGVkaWRfYmxvYl9wdHI6IERSTSBwcm9wZXJ0eSBjb250YWluaW5n IEVESUQgaWYgcHJlc2VudAo+ID4gLSAqIEBwcm9wZXJ0aWVzOiBwcm9wZXJ0eSB0cmFja2luZyBm b3IgdGhpcyBjb25uZWN0b3IKPiA+IC0gKiBAcG9sbGVkOiBhIERSTV9DT05ORUNUT1JfUE9MTF88 Zm9vPiB2YWx1ZSBmb3IgY29yZSBkcml2ZW4gcG9sbGluZwo+ID4gLSAqIEBkcG1zOiBjdXJyZW50 IGRwbXMgc3RhdGUKPiA+IC0gKiBAaGVscGVyX3ByaXZhdGU6IG1pZC1sYXllciBwcml2YXRlIGRh dGEKPiA+IC0gKiBAY21kbGluZV9tb2RlOiBtb2RlIGxpbmUgcGFyc2VkIGZyb20gdGhlIGtlcm5l bCBjbWRsaW5lIGZvciB0aGlzIGNvbm5lY3Rvcgo+ID4gLSAqIEBmb3JjZTogYSBEUk1fRk9SQ0Vf PGZvbz4gc3RhdGUgZm9yIGZvcmNlZCBtb2RlIHNldHMKPiA+IC0gKiBAb3ZlcnJpZGVfZWRpZDog aGFzIHRoZSBFRElEIGJlZW4gb3ZlcndyaXR0ZW4gdGhyb3VnaCBkZWJ1Z2ZzIGZvciB0ZXN0aW5n Pwo+ID4gLSAqIEBlbmNvZGVyX2lkczogdmFsaWQgZW5jb2RlcnMgZm9yIHRoaXMgY29ubmVjdG9y Cj4gPiAtICogQGVuY29kZXI6IGVuY29kZXIgZHJpdmluZyB0aGlzIGNvbm5lY3RvciwgaWYgYW55 Cj4gPiAtICogQGVsZDogRURJRC1saWtlIGRhdGEsIGlmIHByZXNlbnQKPiA+IC0gKiBAZHZpX2R1 YWw6IGR1YWwgbGluayBEVkksIGlmIGZvdW5kCj4gPiAtICogQG1heF90bWRzX2Nsb2NrOiBtYXgg Y2xvY2sgcmF0ZSwgaWYgZm91bmQKPiA+IC0gKiBAbGF0ZW5jeV9wcmVzZW50OiBBViBkZWxheSBp bmZvIGZyb20gRUxELCBpZiBmb3VuZAo+ID4gLSAqIEB2aWRlb19sYXRlbmN5OiB2aWRlbyBsYXRl bmN5IGluZm8gZnJvbSBFTEQsIGlmIGZvdW5kCj4gPiAtICogQGF1ZGlvX2xhdGVuY3k6IGF1ZGlv IGxhdGVuY3kgaW5mbyBmcm9tIEVMRCwgaWYgZm91bmQKPiA+IC0gKiBAbnVsbF9lZGlkX2NvdW50 ZXI6IHRyYWNrIHNpbmtzIHRoYXQgZ2l2ZSB1cyBhbGwgemVyb3MgZm9yIHRoZSBFRElECj4gPiAt ICogQGJhZF9lZGlkX2NvdW50ZXI6IHRyYWNrIHNpbmtzIHRoYXQgZ2l2ZSB1cyBhbiBFRElEIHdp dGggaW52YWxpZCBjaGVja3N1bQo+ID4gLSAqIEBlZGlkX2NvcnJ1cHQ6IGluZGljYXRlcyB3aGV0 aGVyIHRoZSBsYXN0IHJlYWQgRURJRCB3YXMgY29ycnVwdAo+ID4gLSAqIEBkZWJ1Z2ZzX2VudHJ5 OiBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IgdGhpcyBjb25uZWN0b3IKPiA+IC0gKiBAc3RhdGU6IGN1 cnJlbnQgYXRvbWljIHN0YXRlIGZvciB0aGlzIGNvbm5lY3Rvcgo+ID4gLSAqIEBoYXNfdGlsZTog aXMgdGhpcyBjb25uZWN0b3IgY29ubmVjdGVkIHRvIGEgdGlsZWQgbW9uaXRvcgo+ID4gLSAqIEB0 aWxlX2dyb3VwOiB0aWxlIGdyb3VwIGZvciB0aGUgY29ubmVjdGVkIG1vbml0b3IKPiA+IC0gKiBA dGlsZV9pc19zaW5nbGVfbW9uaXRvcjogd2hldGhlciB0aGUgdGlsZSBpcyBvbmUgbW9uaXRvciBo b3VzaW5nCj4gPiAtICogQG51bV9oX3RpbGU6IG51bWJlciBvZiBob3Jpem9udGFsIHRpbGVzIGlu IHRoZSB0aWxlIGdyb3VwCj4gPiAtICogQG51bV92X3RpbGU6IG51bWJlciBvZiB2ZXJ0aWNhbCB0 aWxlcyBpbiB0aGUgdGlsZSBncm91cAo+ID4gLSAqIEB0aWxlX2hfbG9jOiBob3Jpem9udGFsIGxv Y2F0aW9uIG9mIHRoaXMgdGlsZQo+ID4gLSAqIEB0aWxlX3ZfbG9jOiB2ZXJ0aWNhbCBsb2NhdGlv biBvZiB0aGlzIHRpbGUKPiA+IC0gKiBAdGlsZV9oX3NpemU6IGhvcml6b250YWwgc2l6ZSBvZiB0 aGlzIHRpbGUuCj4gPiAtICogQHRpbGVfdl9zaXplOiB2ZXJ0aWNhbCBzaXplIG9mIHRoaXMgdGls ZS4KPiA+IC0gKgo+ID4gLSAqIEVhY2ggY29ubmVjdG9yIG1heSBiZSBjb25uZWN0ZWQgdG8gb25l IG9yIG1vcmUgQ1JUQ3MsIG9yIG1heSBiZSBjbG9uYWJsZSBieQo+ID4gLSAqIGFub3RoZXIgY29u bmVjdG9yIGlmIHRoZXkgY2FuIHNoYXJlIGEgQ1JUQy4gIEVhY2ggY29ubmVjdG9yIGFsc28gaGFz IGEgc3BlY2lmaWMKPiA+IC0gKiBwb3NpdGlvbiBpbiB0aGUgYnJvYWRlciBkaXNwbGF5IChyZWZl cnJlZCB0byBhcyBhICdzY3JlZW4nIHRob3VnaCBpdCBjb3VsZAo+ID4gLSAqIHNwYW4gbXVsdGlw bGUgbW9uaXRvcnMpLgo+ID4gLSAqLwo+ID4gLXN0cnVjdCBkcm1fY29ubmVjdG9yIHsKPiA+IC0g ICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldjsKPiA+IC0gICAgICAgc3RydWN0IGRldmljZSAq a2RldjsKPiA+IC0gICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHI7Cj4gPiAtICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKPiA+IC0KPiA+IC0gICAgICAgc3RydWN0IGRybV9t b2RlX29iamVjdCBiYXNlOwo+ID4gLQo+ID4gLSAgICAgICBjaGFyICpuYW1lOwo+ID4gLQo+ID4g LSAgICAgICAvKioKPiA+IC0gICAgICAgICogQGluZGV4OiBDb21wYWN0ZWQgY29ubmVjdG9yIGlu ZGV4LCB3aGljaCBtYXRjaGVzIHRoZSBwb3NpdGlvbiBpbnNpZGUKPiA+IC0gICAgICAgICogdGhl IG1vZGVfY29uZmlnLmxpc3QgZm9yIGRyaXZlcnMgbm90IHN1cHBvcnRpbmcgaG90LWFkZC9yZW1v dmluZy4gQ2FuCj4gPiAtICAgICAgICAqIGJlIHVzZWQgYXMgYW4gYXJyYXkgaW5kZXguIEl0IGlz IGludmFyaWFudCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUKPiA+IC0gICAgICAgICogY29ubmVj dG9yLgo+ID4gLSAgICAgICAgKi8KPiA+IC0gICAgICAgdW5zaWduZWQgaW5kZXg7Cj4gPiAtCj4g PiAtICAgICAgIGludCBjb25uZWN0b3JfdHlwZTsKPiA+IC0gICAgICAgaW50IGNvbm5lY3Rvcl90 eXBlX2lkOwo+ID4gLSAgICAgICBib29sIGludGVybGFjZV9hbGxvd2VkOwo+ID4gLSAgICAgICBi b29sIGRvdWJsZXNjYW5fYWxsb3dlZDsKPiA+IC0gICAgICAgYm9vbCBzdGVyZW9fYWxsb3dlZDsK PiA+IC0gICAgICAgYm9vbCByZWdpc3RlcmVkOwo+ID4gLSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk IG1vZGVzOyAvKiBsaXN0IG9mIG1vZGVzIG9uIHRoaXMgY29ubmVjdG9yICovCj4gPiAtCj4gPiAt ICAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzOwo+ID4gLQo+ID4gLSAgICAg ICAvKiB0aGVzZSBhcmUgbW9kZXMgYWRkZWQgYnkgcHJvYmluZyB3aXRoIEREQyBvciB0aGUgQklP UyAqLwo+ID4gLSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHByb2JlZF9tb2RlczsKPiA+IC0KPiA+ IC0gICAgICAgc3RydWN0IGRybV9kaXNwbGF5X2luZm8gZGlzcGxheV9pbmZvOwo+ID4gLSAgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqZnVuY3M7Cj4gPiAtCj4gPiAtICAg ICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZWRpZF9ibG9iX3B0cjsKPiA+IC0gICAgICAg c3RydWN0IGRybV9vYmplY3RfcHJvcGVydGllcyBwcm9wZXJ0aWVzOwo+ID4gLQo+ID4gLSAgICAg ICAvKioKPiA+IC0gICAgICAgICogQHBhdGhfYmxvYl9wdHI6Cj4gPiAtICAgICAgICAqCj4gPiAt ICAgICAgICAqIERSTSBibG9iIHByb3BlcnR5IGRhdGEgZm9yIHRoZSBEUCBNU1QgcGF0aCBwcm9w ZXJ0eS4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiAqcGF0aF9ibG9iX3B0cjsKPiA+IC0KPiA+IC0gICAgICAgLyoqCj4gPiAtICAgICAgICAqIEB0 aWxlX2Jsb2JfcHRyOgo+ID4gLSAgICAgICAgKgo+ID4gLSAgICAgICAgKiBEUk0gYmxvYiBwcm9w ZXJ0eSBkYXRhIGZvciB0aGUgdGlsZSBwcm9wZXJ0eSAodXNlZCBtb3N0bHkgYnkgRFAgTVNUKS4K PiA+IC0gICAgICAgICogVGhpcyBpcyBtZWFudCBmb3Igc2NyZWVucyB3aGljaCBhcmUgZHJpdmVu IHRocm91Z2ggc2VwYXJhdGUgZGlzcGxheQo+ID4gLSAgICAgICAgKiBwaXBlbGluZXMgcmVwcmVz ZW50ZWQgYnkgJmRybV9jcnRjLCB3aGljaCBtaWdodCBub3QgYmUgcnVubmluZyB3aXRoCj4gPiAt ICAgICAgICAqIGdlbmxvY2tlZCBjbG9ja3MuIEZvciB0aWxlZCBwYW5lbHMgd2hpY2ggYXJlIGdl bmxvY2tlZCwgbGlrZQo+ID4gLSAgICAgICAgKiBkdWFsLWxpbmsgTFZEUyBvciBkdWFsLWxpbmsg RFNJLCB0aGUgZHJpdmVyIHNob3VsZCB0cnkgdG8gbm90IGV4cG9zZQo+ID4gLSAgICAgICAgKiB0 aGUgdGlsaW5nIGFuZCB2aXJ0dWFsaXplIGJvdGggJmRybV9jcnRjIGFuZCAmZHJtX3BsYW5lIGlm IG5lZWRlZC4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHlf YmxvYiAqdGlsZV9ibG9iX3B0cjsKPiA+IC0KPiA+IC0gICAgICAgdWludDhfdCBwb2xsZWQ7IC8q IERSTV9DT05ORUNUT1JfUE9MTF8qICovCj4gPiAtCj4gPiAtICAgICAgIC8qIHJlcXVlc3RlZCBE UE1TIHN0YXRlICovCj4gPiAtICAgICAgIGludCBkcG1zOwo+ID4gLQo+ID4gLSAgICAgICBjb25z dCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmhlbHBlcl9wcml2YXRlOwo+ID4g LQo+ID4gLSAgICAgICAvKiBmb3JjZWQgb24gY29ubmVjdG9yICovCj4gPiAtICAgICAgIHN0cnVj dCBkcm1fY21kbGluZV9tb2RlIGNtZGxpbmVfbW9kZTsKPiA+IC0gICAgICAgZW51bSBkcm1fY29u bmVjdG9yX2ZvcmNlIGZvcmNlOwo+ID4gLSAgICAgICBib29sIG92ZXJyaWRlX2VkaWQ7Cj4gPiAt ICAgICAgIHVpbnQzMl90IGVuY29kZXJfaWRzW0RSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVJdOwo+ ID4gLSAgICAgICBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7IC8qIGN1cnJlbnRseSBhY3Rp dmUgZW5jb2RlciAqLwo+ID4gLQo+ID4gLSAgICAgICAvKiBFRElEIGJpdHMgKi8KPiA+IC0gICAg ICAgdWludDhfdCBlbGRbTUFYX0VMRF9CWVRFU107Cj4gPiAtICAgICAgIGJvb2wgZHZpX2R1YWw7 Cj4gPiAtICAgICAgIGludCBtYXhfdG1kc19jbG9jazsgICAgIC8qIGluIE1IeiAqLwo+ID4gLSAg ICAgICBib29sIGxhdGVuY3lfcHJlc2VudFsyXTsKPiA+IC0gICAgICAgaW50IHZpZGVvX2xhdGVu Y3lbMl07ICAgLyogWzBdOiBwcm9ncmVzc2l2ZSwgWzFdOiBpbnRlcmxhY2VkICovCj4gPiAtICAg ICAgIGludCBhdWRpb19sYXRlbmN5WzJdOwo+ID4gLSAgICAgICBpbnQgbnVsbF9lZGlkX2NvdW50 ZXI7IC8qIG5lZWRlZCB0byB3b3JrYXJvdW5kIHNvbWUgSFcgYnVncyB3aGVyZSB3ZSBnZXQgYWxs IDBzICovCj4gPiAtICAgICAgIHVuc2lnbmVkIGJhZF9lZGlkX2NvdW50ZXI7Cj4gPiAtCj4gPiAt ICAgICAgIC8qIEZsYWcgZm9yIHJhdyBFRElEIGhlYWRlciBjb3JydXB0aW9uIC0gdXNlZCBpbiBE aXNwbGF5cG9ydAo+ID4gLSAgICAgICAgKiBjb21wbGlhbmNlIHRlc3RpbmcgLSAqIERpc3BsYXlw b3J0IExpbmsgQ1RTIENvcmUgMS4yIHJldjEuMSA0LjIuMi42Cj4gPiAtICAgICAgICAqLwo+ID4g LSAgICAgICBib29sIGVkaWRfY29ycnVwdDsKPiA+IC0KPiA+IC0gICAgICAgc3RydWN0IGRlbnRy eSAqZGVidWdmc19lbnRyeTsKPiA+IC0KPiA+IC0gICAgICAgc3RydWN0IGRybV9jb25uZWN0b3Jf c3RhdGUgKnN0YXRlOwo+ID4gLQo+ID4gLSAgICAgICAvKiBEaXNwbGF5SUQgYml0cyAqLwo+ID4g LSAgICAgICBib29sIGhhc190aWxlOwo+ID4gLSAgICAgICBzdHJ1Y3QgZHJtX3RpbGVfZ3JvdXAg KnRpbGVfZ3JvdXA7Cj4gPiAtICAgICAgIGJvb2wgdGlsZV9pc19zaW5nbGVfbW9uaXRvcjsKPiA+ IC0KPiA+IC0gICAgICAgdWludDhfdCBudW1faF90aWxlLCBudW1fdl90aWxlOwo+ID4gLSAgICAg ICB1aW50OF90IHRpbGVfaF9sb2MsIHRpbGVfdl9sb2M7Cj4gPiAtICAgICAgIHVpbnQxNl90IHRp bGVfaF9zaXplLCB0aWxlX3Zfc2l6ZTsKPiA+IC19Owo+ID4gLQo+ID4gIC8qKgo+ID4gICAqIHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgLSBtdXRhYmxlIHBsYW5lIHN0YXRlCj4gPiAgICogQHBsYW5l OiBiYWNrcG9pbnRlciB0byB0aGUgcGxhbmUKPiA+IEBAIC0yNjAxLDcgKzIwNzcsNiBAQCBzdHJ1 Y3QgZHJtX21vZGVfY29uZmlnIHsKPiA+ICAgICAgICAgICAgICAgICBmb3JfZWFjaF9pZiAoKGVu Y29kZXJfbWFzaykgJiAoMSA8PCBkcm1fZW5jb2Rlcl9pbmRleChlbmNvZGVyKSkpCj4gPgo+ID4g ICNkZWZpbmUgb2JqX3RvX2NydGMoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fY3J0Yywg YmFzZSkKPiA+IC0jZGVmaW5lIG9ial90b19jb25uZWN0b3IoeCkgY29udGFpbmVyX29mKHgsIHN0 cnVjdCBkcm1fY29ubmVjdG9yLCBiYXNlKQo+ID4gICNkZWZpbmUgb2JqX3RvX2VuY29kZXIoeCkg Y29udGFpbmVyX29mKHgsIHN0cnVjdCBkcm1fZW5jb2RlciwgYmFzZSkKPiA+ICAjZGVmaW5lIG9i al90b19tb2RlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSwgYmFz ZSkKPiA+ICAjZGVmaW5lIG9ial90b19mYih4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IGRybV9m cmFtZWJ1ZmZlciwgYmFzZSkKPiA+IEBAIC0yNjQ3LDE5ICsyMTIyLDYgQEAgc3RhdGljIGlubGlu ZSB1aW50MzJfdCBkcm1fY3J0Y19tYXNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiA+ICAgICAg ICAgcmV0dXJuIDEgPDwgZHJtX2NydGNfaW5kZXgoY3J0Yyk7Cj4gPiAgfQo+ID4KPiA+IC1pbnQg ZHJtX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzICpmdW5jcywK PiA+IC0gICAgICAgICAgICAgICAgICAgICAgaW50IGNvbm5lY3Rvcl90eXBlKTsKPiA+IC1pbnQg ZHJtX2Nvbm5lY3Rvcl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsK PiA+IC12b2lkIGRybV9jb25uZWN0b3JfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yKTsKPiA+IC0KPiA+IC1leHRlcm4gdm9pZCBkcm1fY29ubmVjdG9yX2NsZWFudXAo c3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7Cj4gPiAtc3RhdGljIGlubGluZSB1bnNp Z25lZCBkcm1fY29ubmVjdG9yX2luZGV4KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Cj4gPiAtewo+ID4gLSAgICAgICByZXR1cm4gY29ubmVjdG9yLT5pbmRleDsKPiA+IC19Cj4gPiAt Cj4gPiAgZXh0ZXJuIF9fcHJpbnRmKDUsIDYpCj4gPiAgaW50IGRybV9lbmNvZGVyX2luaXQoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1f ZW5jb2RlciAqZW5jb2RlciwKPiA+IEBAIC0yNzI4LDIzICsyMTkwLDEwIEBAIGV4dGVybiBpbnQg ZHJtX2NydGNfZm9yY2VfZGlzYWJsZV9hbGwoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPgo+ ID4gIGV4dGVybiB2b2lkIGRybV9lbmNvZGVyX2NsZWFudXAoc3RydWN0IGRybV9lbmNvZGVyICpl bmNvZGVyKTsKPiA+Cj4gPiAtZXh0ZXJuIGNvbnN0IGNoYXIgKmRybV9nZXRfY29ubmVjdG9yX3N0 YXR1c19uYW1lKGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+IC1leHRlcm4g Y29uc3QgY2hhciAqZHJtX2dldF9zdWJwaXhlbF9vcmRlcl9uYW1lKGVudW0gc3VicGl4ZWxfb3Jk ZXIgb3JkZXIpOwo+ID4gLWV4dGVybiBjb25zdCBjaGFyICpkcm1fZ2V0X2RwbXNfbmFtZShpbnQg dmFsKTsKPiA+IC1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF9kdmlfaV9zdWJjb25uZWN0b3Jf bmFtZShpbnQgdmFsKTsKPiA+IC1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF9kdmlfaV9zZWxl Y3RfbmFtZShpbnQgdmFsKTsKPiA+IC1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF90dl9zdWJj b25uZWN0b3JfbmFtZShpbnQgdmFsKTsKPiA+IC1leHRlcm4gY29uc3QgY2hhciAqZHJtX2dldF90 dl9zZWxlY3RfbmFtZShpbnQgdmFsKTsKPiA+ICBleHRlcm4gdm9pZCBkcm1fbW9kZV9jb25maWdf aW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiA+ICBleHRlcm4gdm9pZCBkcm1fbW9kZV9j b25maWdfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAgZXh0ZXJuIHZvaWQgZHJt X21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPgo+ID4gLWV4 dGVybiBpbnQgZHJtX21vZGVfY29ubmVjdG9yX3NldF9wYXRoX3Byb3BlcnR5KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoKTsKPiA+IC1pbnQgZHJtX21vZGVfY29u bmVjdG9yX3NldF90aWxlX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3Ip Owo+ID4gLWV4dGVybiBpbnQgZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5 KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZWRpZCAqZWRpZCk7 Cj4gPiAtCj4gPiAgZXh0ZXJuIGludCBkcm1fZGlzcGxheV9pbmZvX3NldF9idXNfZm9ybWF0cyhz dHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqaW5mbywKPiA+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTMyICpmb3JtYXRzLAo+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtX2Zvcm1hdHMp Owo+ID4gQEAgLTI4MDUsMTYgKzIyNTQsNiBAQCB2b2lkIGRybV9wcm9wZXJ0eV91bnJlZmVyZW5j ZV9ibG9iKHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYik7Cj4gPiAgZXh0ZXJuIHZvaWQg ZHJtX3Byb3BlcnR5X2Rlc3Ryb3koc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9w cm9wZXJ0eSAqcHJvcGVydHkpOwo+ID4gIGV4dGVybiBpbnQgZHJtX3Byb3BlcnR5X2FkZF9lbnVt KHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LCBpbnQgaW5kZXgsCj4gPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZSwgY29uc3QgY2hhciAqbmFtZSk7 Cj4gPiAtZXh0ZXJuIGludCBkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiA+IC1leHRlcm4gaW50IGRybV9tb2RlX2NyZWF0ZV90dl9wcm9w ZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBudW1fbW9kZXMsCj4gPiAtICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb25zdCBtb2Rlc1td KTsKPiA+IC1leHRlcm4gaW50IGRybV9tb2RlX2NyZWF0ZV9zY2FsaW5nX21vZGVfcHJvcGVydHko c3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gPiAtZXh0ZXJuIGludCBkcm1fbW9kZV9jcmVhdGVf YXNwZWN0X3JhdGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ID4gLWV4dGVy biBpbnQgZHJtX21vZGVfY3JlYXRlX3N1Z2dlc3RlZF9vZmZzZXRfcHJvcGVydGllcyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KTsKPiA+IC0KPiA+IC1leHRlcm4gaW50IGRybV9tb2RlX2Nvbm5lY3Rv cl9hdHRhY2hfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9lbmNv ZGVyICplbmNvZGVyKTsKPiA+ICBleHRlcm4gaW50IGRybV9tb2RlX2NydGNfc2V0X2dhbW1hX3Np emUoc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZ2FtbWFfc2l6ZSk7Cj4gPgo+ID4gQEAgLTI4NzQsMjIgKzIzMTMs NiBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fZW5jb2RlciAqZHJtX2VuY29kZXJfZmluZChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ID4gICAgICAgICByZXR1cm4gbW8gPyBvYmpfdG9fZW5j b2RlcihtbykgOiBOVUxMOwo+ID4gIH0KPiA+Cj4gPiAtLyoqCj4gPiAtICogZHJtX2Nvbm5lY3Rv cl9sb29rdXAgLSBsb29rdXAgY29ubmVjdG9yIG9iamVjdAo+ID4gLSAqIEBkZXY6IERSTSBkZXZp Y2UKPiA+IC0gKiBAaWQ6IGNvbm5lY3RvciBvYmplY3QgaWQKPiA+IC0gKgo+ID4gLSAqIFRoaXMg ZnVuY3Rpb24gbG9va3MgdXAgdGhlIGNvbm5lY3RvciBvYmplY3Qgc3BlY2lmaWVkIGJ5IGlkCj4g PiAtICogYWRkIHRha2VzIGEgcmVmZXJlbmNlIHRvIGl0Lgo+ID4gLSAqLwo+ID4gLXN0YXRpYyBp bmxpbmUgc3RydWN0IGRybV9jb25uZWN0b3IgKmRybV9jb25uZWN0b3JfbG9va3VwKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYsCj4gPiAtICAgICAgICAgICAgICAgdWludDMyX3QgaWQpCj4gPiAtewo+ ID4gLSAgICAgICBzdHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICptbzsKPiA+IC0gICAgICAgbW8gPSBk cm1fbW9kZV9vYmplY3RfZmluZChkZXYsIGlkLCBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SKTsK PiA+IC0gICAgICAgcmV0dXJuIG1vID8gb2JqX3RvX2Nvbm5lY3RvcihtbykgOiBOVUxMOwo+ID4g LX0KPiA+IC0KPiA+ICBzdGF0aWMgaW5saW5lIHN0cnVjdCBkcm1fcHJvcGVydHkgKmRybV9wcm9w ZXJ0eV9maW5kKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiAgICAgICAgICAgICAgICAgdWlu dDMyX3QgaWQpCj4gPiAgewo+ID4gQEAgLTI5MTcsMjggKzIzNDAsNiBAQCBzdGF0aWMgaW5saW5l IHVpbnQzMl90IGRybV9jb2xvcl9sdXRfZXh0cmFjdCh1aW50MzJfdCB1c2VyX2lucHV0LAo+ID4g ICAgICAgICByZXR1cm4gY2xhbXBfdmFsKHZhbCwgMCwgbWF4KTsKPiA+ICB9Cj4gPgo+ID4gLS8q Kgo+ID4gLSAqIGRybV9jb25uZWN0b3JfcmVmZXJlbmNlIC0gaW5jciB0aGUgY29ubmVjdG9yIHJl ZmNudAo+ID4gLSAqIEBjb25uZWN0b3I6IGNvbm5lY3Rvcgo+ID4gLSAqCj4gPiAtICogVGhpcyBm dW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjb25uZWN0b3IncyByZWZjb3VudC4KPiA+IC0gKi8KPiA+ IC1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Nvbm5lY3Rvcl9yZWZlcmVuY2Uoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvcikKPiA+IC17Cj4gPiAtICAgICAgIGRybV9tb2RlX29iamVjdF9y ZWZlcmVuY2UoJmNvbm5lY3Rvci0+YmFzZSk7Cj4gPiAtfQo+ID4gLQo+ID4gLS8qKgo+ID4gLSAq IGRybV9jb25uZWN0b3JfdW5yZWZlcmVuY2UgLSB1bnJlZiBhIGNvbm5lY3Rvcgo+ID4gLSAqIEBj b25uZWN0b3I6IGNvbm5lY3RvciB0byB1bnJlZgo+ID4gLSAqCj4gPiAtICogVGhpcyBmdW5jdGlv biBkZWNyZW1lbnRzIHRoZSBjb25uZWN0b3IncyByZWZjb3VudCBhbmQgZnJlZXMgaXQgaWYgaXQg ZHJvcHMgdG8gemVyby4KPiA+IC0gKi8KPiA+IC1zdGF0aWMgaW5saW5lIHZvaWQgZHJtX2Nvbm5l Y3Rvcl91bnJlZmVyZW5jZShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gLXsK PiA+IC0gICAgICAgZHJtX21vZGVfb2JqZWN0X3VucmVmZXJlbmNlKCZjb25uZWN0b3ItPmJhc2Up Owo+ID4gLX0KPiA+IC0KPiA+ICAvKiBQbGFuZSBsaXN0IGl0ZXJhdG9yIGZvciBsZWdhY3kgKG92 ZXJsYXkgb25seSkgcGxhbmVzLiAqLwo+ID4gICNkZWZpbmUgZHJtX2Zvcl9lYWNoX2xlZ2FjeV9w bGFuZShwbGFuZSwgZGV2KSBcCj4gPiAgICAgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocGxhbmUs ICYoZGV2KS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwgaGVhZCkgXAo+ID4gZGlmZiAtLWdpdCBh L2luY2x1ZGUvZHJtL2RybV9tb2Rlcy5oIGIvaW5jbHVkZS9kcm0vZHJtX21vZGVzLmgKPiA+IGlu ZGV4IGYwYWYxZWRjYmVmZS4uZWZkMjkxMjAwYTJiIDEwMDY0NAo+ID4gLS0tIGEvaW5jbHVkZS9k cm0vZHJtX21vZGVzLmgKPiA+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9tb2Rlcy5oCj4gPiBAQCAt MjgsNiArMjgsNyBAQAo+ID4gICNkZWZpbmUgX19EUk1fTU9ERVNfSF9fCj4gPgo+ID4gICNpbmNs dWRlIDxkcm0vZHJtX21vZGVzZXQuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3Iu aD4KPiA+Cj4gPiAgLyoKPiA+ICAgKiBOb3RlIG9uIHRlcm1pbm9sb2d5OiAgaGVyZSwgZm9yIGJy ZXZpdHkgYW5kIGNvbnZlbmllbmNlLCB3ZSByZWZlciB0byBjb25uZWN0b3IKPiA+IEBAIC00MDIs MjEgKzQwMyw2IEBAIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIHsKPiA+ICAgICAgICAgZW51bSBo ZG1pX3BpY3R1cmVfYXNwZWN0IHBpY3R1cmVfYXNwZWN0X3JhdGlvOwo+ID4gIH07Cj4gPgo+ID4g LS8qIG1vZGUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KPiA+IC1zdHJ1Y3QgZHJt X2NtZGxpbmVfbW9kZSB7Cj4gPiAtICAgICAgIGJvb2wgc3BlY2lmaWVkOwo+ID4gLSAgICAgICBi b29sIHJlZnJlc2hfc3BlY2lmaWVkOwo+ID4gLSAgICAgICBib29sIGJwcF9zcGVjaWZpZWQ7Cj4g PiAtICAgICAgIGludCB4cmVzLCB5cmVzOwo+ID4gLSAgICAgICBpbnQgYnBwOwo+ID4gLSAgICAg ICBpbnQgcmVmcmVzaDsKPiA+IC0gICAgICAgYm9vbCByYjsKPiA+IC0gICAgICAgYm9vbCBpbnRl cmxhY2U7Cj4gPiAtICAgICAgIGJvb2wgY3Z0Owo+ID4gLSAgICAgICBib29sIG1hcmdpbnM7Cj4g PiAtICAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9mb3JjZSBmb3JjZTsKPiA+IC19Owo+ID4gLQo+ ID4gIC8qKgo+ID4gICAqIGRybV9tb2RlX2lzX3N0ZXJlbyAtIGNoZWNrIGZvciBzdGVyZW8gbW9k ZSBmbGFncwo+ID4gICAqIEBtb2RlOiBkcm1fZGlzcGxheV9tb2RlIHRvIGNoZWNrCj4gPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXQuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2Rl c2V0LmgKPiA+IGluZGV4IDBjMmIwZjNjNWYzNC4uZmU5MTBkNWVmZTEyIDEwMDY0NAo+ID4gLS0t IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXQuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX21v ZGVzZXQuaAo+ID4gQEAgLTI1LDYgKzI1LDcgQEAKPiA+Cj4gPiAgI2luY2x1ZGUgPGxpbnV4L2ty ZWYuaD4KPiA+ICBzdHJ1Y3QgZHJtX29iamVjdF9wcm9wZXJ0aWVzOwo+ID4gK3N0cnVjdCBkcm1f cHJvcGVydHk7Cj4gPgo+ID4gIHN0cnVjdCBkcm1fbW9kZV9vYmplY3Qgewo+ID4gICAgICAgICB1 aW50MzJfdCBpZDsKPiA+IEBAIC0zNCwxNyArMzUsMzYgQEAgc3RydWN0IGRybV9tb2RlX29iamVj dCB7Cj4gPiAgICAgICAgIHZvaWQgKCpmcmVlX2NiKShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gPiAg fTsKPiA+Cj4gPiArI2RlZmluZSBEUk1fT0JKRUNUX01BWF9QUk9QRVJUWSAyNAo+ID4gK3N0cnVj dCBkcm1fb2JqZWN0X3Byb3BlcnRpZXMgewo+ID4gKyAgICAgICBpbnQgY291bnQsIGF0b21pY19j b3VudDsKPiA+ICsgICAgICAgLyogTk9URTogaWYgd2UgZXZlciBzdGFydCBkeW5hbWljYWxseSBk ZXN0cm95aW5nIHByb3BlcnRpZXMgKGllLgo+ID4gKyAgICAgICAgKiBub3QgYXQgZHJtX21vZGVf Y29uZmlnX2NsZWFudXAoKSB0aW1lKSwgdGhlbiB3ZSdkIGhhdmUgdG8gZG8KPiA+ICsgICAgICAg ICogYSBiZXR0ZXIgam9iIG9mIGRldGFjaGluZyBwcm9wZXJ0eSBmcm9tIG1vZGUgb2JqZWN0cyB0 byBhdm9pZAo+ID4gKyAgICAgICAgKiBkYW5nbGluZyBwcm9wZXJ0eSBwb2ludGVyczoKPiA+ICsg ICAgICAgICovCj4gPiArICAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnRpZXNbRFJN X09CSkVDVF9NQVhfUFJPUEVSVFldOwo+ID4gKyAgICAgICAvKiBkbyBub3QgcmVhZC93cml0ZSB2 YWx1ZXMgZGlyZWN0bHksIGJ1dCB1c2UgZHJtX29iamVjdF9wcm9wZXJ0eV9nZXRfdmFsdWUoKQo+ ID4gKyAgICAgICAgKiBhbmQgZHJtX29iamVjdF9wcm9wZXJ0eV9zZXRfdmFsdWUoKToKPiA+ICsg ICAgICAgICovCj4gPiArICAgICAgIHVpbnQ2NF90IHZhbHVlc1tEUk1fT0JKRUNUX01BWF9QUk9Q RVJUWV07Cj4gPiArfTsKPiA+ICsKPiA+ICsvKiBBdm9pZCBib2lsZXJwbGF0ZS4gIEknbSB0aXJl ZCBvZiB0eXBpbmcuICovCj4gPiArI2RlZmluZSBEUk1fRU5VTV9OQU1FX0ZOKGZubmFtZSwgbGlz dCkgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gKyAgICAgICBjb25zdCBjaGFyICpmbm5h bWUoaW50IHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ICsgICAgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g PiArICAgICAgICAgICAgICAgaW50IGk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ID4gKyAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGxpc3QpOyBpKyspIHsgICAgICAgIFwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChs aXN0W2ldLnR5cGUgPT0gdmFsKSAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBsaXN0W2ldLm5hbWU7ICAgICAgICAgICAgXAo+ID4gKyAg ICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKPiA+ICsgICAgICAgICAgICAgICByZXR1cm4gIih1bmtub3duKSI7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCj4gPiArICAgICAgIH0KPiA+ICsKPiA+ICBzdHJ1Y3QgZHJtX21v ZGVfb2JqZWN0ICpkcm1fbW9kZV9vYmplY3RfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg aWQsIHVpbnQzMl90IHR5cGUpOwo+ID4gIHZvaWQgZHJtX21vZGVfb2JqZWN0X3JlZmVyZW5jZShz dHJ1Y3QgZHJtX21vZGVfb2JqZWN0ICpvYmopOwo+ID4gIHZvaWQgZHJtX21vZGVfb2JqZWN0X3Vu cmVmZXJlbmNlKHN0cnVjdCBkcm1fbW9kZV9vYmplY3QgKm9iaik7Cj4gPgo+ID4gLS8qIEZJWE1F OiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBoYXZlIGEgZHJtX2Nvbm5lY3Rvci5oICovCj4g PiAtZW51bSBkcm1fY29ubmVjdG9yX2ZvcmNlIHsKPiA+IC0gICAgICAgRFJNX0ZPUkNFX1VOU1BF Q0lGSUVELAo+ID4gLSAgICAgICBEUk1fRk9SQ0VfT0ZGLAo+ID4gLSAgICAgICBEUk1fRk9SQ0Vf T04sICAgICAgICAgLyogZm9yY2Ugb24gYW5hbG9nIHBhcnQgbm9ybWFsbHkgKi8KPiA+IC0gICAg ICAgRFJNX0ZPUkNFX09OX0RJR0lUQUwsIC8qIGZvciBEVkktSSB1c2UgZGlnaXRhbCBjb25uZWN0 b3IgKi8KPiA+IC19Owo+ID4gLQo+ID4gICNlbmRpZgo+ID4gLS0KPiA+IDIuOC4xCj4gPgo+ID4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiA+IEludGVs LWdmeCBtYWlsaW5nIGxpc3QKPiA+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiA+ IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 CgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K aHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4Cg==