From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id D6DC36E5F5 for ; Fri, 15 Nov 2019 13:31:37 +0000 (UTC) Date: Fri, 15 Nov 2019 15:31:32 +0200 From: Petri Latvala Message-ID: <20191115133132.GT25209@platvala-desk.ger.corp.intel.com> References: <20191024110515.11741-1-arkadiusz.hiler@intel.com> <20191024110515.11741-3-arkadiusz.hiler@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191024110515.11741-3-arkadiusz.hiler@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t 2/4] Introduce device selection API List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Arkadiusz Hiler Cc: igt-dev@lists.freedesktop.org List-ID: T24gVGh1LCBPY3QgMjQsIDIwMTkgYXQgMDI6MDU6MTNQTSArMDMwMCwgQXJrYWRpdXN6IEhpbGVy IHdyb3RlOgo+IEZyb206IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5z a2lAaW50ZWwuY29tPgo+IAo+IENoYW5nZSBhZGRzIGRldmljZSBzZWxlY3Rpb24gQVBJIGJhc2Vk IG9uIHNjYW5uaW5nIGRybSBzdWJzeXN0ZW0KPiB1c2luZyB1ZGV2IGxpYnJhcnkuCj4gCj4gdjIg KEFyZWspOgo+ICAqIGRyb3AgbW9zdCBvZiB0aGUgZ2xpYiBjb2RlIGluIGZhdm9yIG9mIGlndF9s aXN0IGFuZCBwbGFpbiBDCj4gICogbWFrZSBzeXNmcyBwYXRocyBoYW5kbGluZyBub24tc3BlY2lh bCAtIGludHJvZHVjZSBzeXM6IGZpbHRlcgo+ICAqIGRyb3AgbXVsdGlwbGUgZmlsdGVyXyogc3Ry dWN0cyBpbiBmYXZvciBvZiBqdXN0IHR3bzoKPiAgICAtIGZpbHRlcl9jbGFzcyBmb3IgZGVmaW5p bmcgZmlsdGVycyB0eXBlcyAoZS5nLiBzeXM6KQo+ICAgIC0gZmlsdGVyIGZvciAiZmlsdGVyIGlu c3RhbmNlIiAtIHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCj4gICogcHJvbW90ZSBtYW55 IG1hY3JvcyB0byByZWFsIGZ1bmN0aW9ucyBmb3IgdHlwZSBzYWZldHkKPiAgKiByZW5hbWUgZGV2 cy0+ZGV2cyB0byBkZXZzLT5hbGwKPiAgKiByZW5hbWUgZGV2cy0+dmlldyB0byBkZXZzLT5maWx0 ZXJlZAo+ICAqIGRvbid0IGV4cG9zZSAiY2hpcCIgKGUuZy4gRFJJVkVSX0FOWSkgYXMgaXQncyB1 bnJlYWRhYmxlIGFzIGludAo+ICAqIHVwZGF0ZSBkb2NzIHRvIHJlZmxlY3QgdGhvc2UgY2hhbmdl cwo+ICAqIG1vdmUgb3BlbiBmdW5jdGlvbnMgdGhhdCBvcGVuIGlndF9kZXZpY2VfY2FyZCB0byB0 aGlzIHBhdGNoCj4gICogcmVtb3ZlIHBsYXRmb3JtIGZpbHRlciBjbGFzcyBmb3Igbm93Cj4gICog dXNlIG9ubHkgYSBzaW5nbGUgZmlsdGVyCj4gCj4gQ2M6IFBldHJpIExhdHZhbGEgPHBldHJpLmxh dHZhbGFAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8 emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IEFya2FkaXVz eiBIaWxlciA8YXJrYWRpdXN6LmhpbGVyQGludGVsLmNvbT4KPiAtLS0KPiAgLi4uL2lndC1ncHUt dG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCAgICAgIHwgICAgMSArCj4gIGxpYi9NYWtlZmls ZS5zb3VyY2VzICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwo+ICBsaWIvaWd0X2Rl dmljZV9zY2FuLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMTk5ICsrKysrKysrKysrKysr KysrCj4gIGxpYi9pZ3RfZGV2aWNlX3NjYW4uaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NjcgKwo+ICBsaWIvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKPiAgNSBmaWxlcyBjaGFuZ2VkLCAxMjcwIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9pZ3RfZGV2aWNlX3NjYW4uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9kZXZpY2Vfc2Nhbi5oCj4gCj4gZGlmZiAtLWdpdCBhL2RvY3MvcmVmZXJlbmNlL2lndC1n cHUtdG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbCBiL2RvY3MvcmVmZXJlbmNlL2lndC1ncHUt dG9vbHMvaWd0LWdwdS10b29scy1kb2NzLnhtbAo+IGluZGV4IDNmMTRkN2JlLi5jNDFjYmI3OCAx MDA2NDQKPiAtLS0gYS9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9vbHMt ZG9jcy54bWwKPiArKysgYi9kb2NzL3JlZmVyZW5jZS9pZ3QtZ3B1LXRvb2xzL2lndC1ncHUtdG9v bHMtZG9jcy54bWwKPiBAQCAtMjMsNiArMjMsNyBAQAo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0i eG1sL2lndF9jb3JlLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kZWJ1 Z2ZzLnhtbCIvPgo+ICAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kZXZpY2UueG1sIi8+ Cj4gKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvaWd0X2RldmljZV9zY2FuLnhtbCIvPgo+ICAg ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2lndF9kcmF3LnhtbCIvPgo+ICAgICAgPHhpOmluY2x1 ZGUgaHJlZj0ieG1sL2lndF9kdW1teWxvYWQueG1sIi8+Cj4gICAgICA8eGk6aW5jbHVkZSBocmVm PSJ4bWwvaWd0X2ZiLnhtbCIvPgo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBi L2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gaW5kZXggMWI1OGI2ZDAuLjdlODU5NGM1IDEwMDY0NAo+ IC0tLSBhL2xpYi9NYWtlZmlsZS5zb3VyY2VzCj4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMK PiBAQCAtMjUsNiArMjUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQkgCVwKPiAgCWlndF9kZWJ1Z2Zz LmgJCVwKPiAgCWlndF9kZXZpY2UuYwkJXAo+ICAJaWd0X2RldmljZS5oCQlcCj4gKwlpZ3RfZGV2 aWNlX3NjYW4uYwlcCj4gKwlpZ3RfZGV2aWNlX3NjYW4uaAlcCj4gIAlpZ3RfYXV4LmMJCVwKPiAg CWlndF9hdXguaAkJXAo+ICAJaWd0X2NvbG9yX2VuY29kaW5nLmMJXAo+IGRpZmYgLS1naXQgYS9s aWIvaWd0X2RldmljZV9zY2FuLmMgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi43MWQzMDU4Nwo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9saWIvaWd0X2RldmljZV9zY2FuLmMKPiBAQCAtMCwwICsxLDExOTkgQEAKPiArLyoKPiAr ICogQ29weXJpZ2h0IMKpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29m dHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz dHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsg KiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBT T0ZUV0FSRS4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0LmgiCj4gKyNpbmNsdWRl ICJpZ3RfbGlzdC5oIgo+ICsjaW5jbHVkZSAiaWd0X3N5c2ZzLmgiCj4gKyNpbmNsdWRlICJpZ3Rf ZGV2aWNlLmgiCj4gKyNpbmNsdWRlICJpZ3RfZGV2aWNlX3NjYW4uaCIKPiArI2luY2x1ZGUgPGds aWIuaD4KPiArI2luY2x1ZGUgPGxpYnVkZXYuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5o Pgo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsj aW5jbHVkZSA8ZGlyZW50Lmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsKPiArLyoqCj4gKyAq IFNFQ1RJT046aWd0X2RldmljZV9zY2FuCj4gKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogRGV2aWNl IHNjYW5uaW5nIGFuZCBzZWxlY3Rpb24KPiArICogQHRpdGxlOiBEZXZpY2Ugc2VsZWN0aW9uCj4g KyAqIEBpbmNsdWRlOiBpZ3QuaAo+ICsgKgo+ICsgKiAjIERldmljZSBzY2FubmluZwo+ICsgKgo+ ICsgKiBEZXZpY2Ugc2Nhbm5pbmcgaXRlcmF0ZXMgb3ZlciBEUk0gc3Vic3lzdGVtIHVzaW5nIHVk ZXYgbGlicmFyeQo+ICsgKiB0byBhY3F1aXJlIERSTSBkZXZpY2VzLgo+ICsgKiBGb3IgZWFjaCBE Uk0gZGV2aWNlIHdlIGFsc28gZ2V0IGFuZCBzdG9yZSBpdHMgcGFyZW50IHRvIGFsbG93IGRldmlj ZQo+ICsgKiBzZWxlY3Rpb24gaGFwcGVuIGluIGEgbW9yZSBjb250ZXh0dWFsIHdheS4KPiArICoK PiArICogUGFyZW50IGRldmljZXMgYXJlIGJ1cyBkZXZpY2VzIChsaWtlIFBDSSwgcGxhdGZvcm0s IGV0Yy4pIGFuZCBjb250YWluIGEgbG90Cj4gKyAqIG9mIGV4dHJhIGRhdGEgb24gdG9wIG9mIHRo ZSBEUk0gZGV2aWNlIGl0c2VsZi4KPiArICoKPiArICogIyBGaWx0ZXJzCj4gKyAqCj4gKyAqIERl dmljZSBzZWxlY3Rpb24gY2FuIGJlIGRvbmUgdXNpbmcgZmlsdGVycyB0aGF0IGFyZSB1c2luZyB0 aGUgZGF0YSBjb2xsZWN0ZWQKPiArICogdWRldiArIHNvbWUgc3ludGFjdGljIHN1Z2FyLgo+ICsg Kgo+ICsgKiBEaXJlY3QgZGV2aWNlIHNlbGVjdGlvbiBmaWx0ZXIgdXNlcyBzeXNmcyBwYXRoIHRv IGZpbmQgdGhlIGRldmljZToKPiArICoKPiArICogfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+ Cj4gKyAqIHN5czovc3lzL3BhdGgvdG8vZGV2aWNlL29yL3BhcmVudAo+ICsgKiBdfAo+ICsgKgo+ ICsgKiBFeGFtcGxlczoKPiArICogfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqIC0g c3lzOi9zeXMvZGV2aWNlcy9wY2kwMDAwOjAwLzAwMDA6MDA6MDIuMC9kcm0vY2FyZDAKPiArICog LSBzeXM6L3N5cy9kZXZpY2VzL3BjaTAwMDA6MDAvMDAwMDowMDowMi4wCj4gKyAqIC0gc3lzOi9z eXMvZGV2aWNlcy9wbGF0Zm9ybS92Z2VtCj4gKyAqIF18Cj4gKyAqCj4gKyAqIFRoZSBhbHRlcm5h dGl2ZSBpcyB0byB1c2Ugb3RoZXIgaW1wbGVtZW50ZWQgZmlsdGVyczoKPiArICoKPiArICogLSBk cm06IGdldCBkcm0gL2Rldi9kcmkvLi4uIGRldmljZSBkaXJlY3RseQo+ICsgKgo+ICsgKiAgIHxb PCEtLSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIGRybTovZGV2L2RyaS8uLi4KPiArICog ICBdfAo+ICsgKgo+ICsgKiAgIExvYWRpbmcgZHJpdmVycyBpbiBkaWZmZXJlbnQgb3JkZXIgY2Fu IGNhdXNlIGRpZmZlcmVudCBvcmRlcmluZyBvZgo+ICsgKiAgIC9kZXYvZHJpL2NhcmQgbm9kZXMg d2hpY2ggYmUgcHJvYmxlbWF0aWMgZm9yIHJlbGlhYmxlIGFuZCByZXByb2R1Y2libGUKPiArICog ICBkZXZpY2Ugc2VsZWN0aW9uLCBlLmcuIGluIGF1dG9tYXRlZCBleGVjdXRpb24gc2V0dGluZy4g SW4gc3VjaCBzY2VuYXJpb3MKPiArICogICBwbGVhc2UgY29uc2lkZXIgdXNpbmcgc3lzLCBwY2kg b3IgcGxhdGZvcm0gZmlsdGVycyBpbnN0ZWFkLgo+ICsgKgo+ICsgKiAtIHBjaTogc2VsZWN0IGRl dmljZSB1c2luZyBQQ0kgdmVuZG9yIGFuZCBkZXZpY2UgcHJvcGVydGllcwo+ICsgKiAgIHxbPCEt LSBsYW5ndWFnZT0icGxhaW4iIC0tPgo+ICsgKiAgIHBjaTpbdmVuZG9yPSUwNHgvbmFtZV1bLGRl dmljZT0lMDR4XVssY2FyZD0lZF0KPiArICogICBdfAo+ICsgKgo+ICsgKiAgIEZpbHRlciBhbGxv d3MgZGV2aWNlIHNlbGVjdGlvbiB1c2luZyB2ZW5kb3IgKGhleCBvciBuYW1lKSwgZGV2aWNlIGlk Cj4gKyAqICAgKGhleCkgYW5kIG50aC1jYXJkIGZyb20gYWxsIG1hdGNoZXMuIEZvciBleGFtcGxl IGlmIHRoZXJlIGFyZSA0IFBDSSBjYXJkcwo+ICsgKiAgIGluc3RhbGxlZCAobGV0IHR3byBjYXJk cyBoYXZlIDEyMzQgYW5kIG90aGVyIHR3byAxMjM1IGRldmljZSBpZCwgYWxsIG9mCj4gKyAqICAg dGhlbSBvZiB2ZW5kb3IgSW50ZWwpIHlvdSBjYW4gc2VsZWN0IG9uZSB1c2luZzoKPiArICoKPiAr ICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6dmVuZG9yPUludGVs LGRldmljZT0xMjM0LGNhcmQ9MAo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgb3IKPiArICoKPiAr ICogICB8WzwhLS0gbGFuZ3VhZ2U9InBsYWluIiAtLT4KPiArICogICBwY2k6dmVuZG9yPTgwODYs ZGV2aWNlPTEyMzQsY2FyZD0wCj4gKyAqICAgXXwKPiArICoKPiArICogICBUaGlzIHRha2VzIGZp cnN0IGRldmljZSB3aXRoIDEyMzQgaWQgZm9yIEludGVsIHZlbmRvciAoODA4NikuCj4gKyAqCj4g KyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNpOnZlbmRvcj1JbnRl bCxkZXZpY2U9MTIzNCxjYXJkPTEKPiArICogICBdfAo+ICsgKgo+ICsgKiAgIG9yCj4gKyAqCj4g KyAqICAgfFs8IS0tIGxhbmd1YWdlPSJwbGFpbiIgLS0+Cj4gKyAqICAgcGNpOnZlbmRvcj04MDg2 LGRldmljZT0xMjM0LGNhcmQ9MQo+ICsgKiAgIF18Cj4gKyAqCj4gKyAqICAgSXQgc2VsZWN0cyB0 aGUgc2Vjb25kIG9uZS4KPiArICoKPiArICogICBBcyBvcmRlciB0aGUgb24gUENJIGJ1cyBkb2Vz bid0IGNoYW5nZSAodW5sZXNzIHlvdSdsbCBhZGQgbmV3IGRldmljZSBvcgo+ICsgKiAgIHJlb3Jk ZXIgZXhpc3Rpbmcgb25lKSBkZXZpY2Ugc2VsZWN0aW9uIHVzaW5nIHRoaXMgZmlsdGVyIHdpbGwg YWx3YXlzCj4gKyAqICAgcmV0dXJuIHlvdSBzYW1lIGRldmljZSByZWdhcmRsZXNzIHRoZSBvcmRl ciBvZiBlbnVtZXJhdGlvbi4KPiArICoKPiArICogICBTaW1wbGUgc3ludGFjdGljIHN1Z2FyIG92 ZXIgdXNpbmcgdGhlIHN5c2ZzIHBhdGhzLgo+ICsgKi8KPiArCj4gKyNpZmRlZiBERUJVR19ERVZJ Q0VfU0NBTgo+ICsjZGVmaW5lIERCRyguLi4pIFwKPiAreyBcCj4gKwlzdHJ1Y3QgdGltZXZhbCB0 bTsgXAo+ICsJZ2V0dGltZW9mZGF5KCZ0bSwgTlVMTCk7IFwKPiArCXByaW50ZigiJTEwbGQuJTAz bGQ6ICIsIHRtLnR2X3NlYywgdG0udHZfdXNlYyk7IFwKPiArCXByaW50ZihfX1ZBX0FSR1NfXyk7 IFwKPiArCX0KCgpDaGVjayBpbmRlbnRhdGlvbiBvbiB9CgoKPiArCj4gKyNlbHNlCj4gKyNkZWZp bmUgREJHKC4uLikge30KPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgc3RyZXF1 YWwoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKPiArewo+ICsJaWYgKGEgPT0gTlVMTCB8 fCBiID09IE5VTEwpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiBzdHJjbXAoYSwg YikgPT0gMDsKPiArfQo+ICsKPiArc3RydWN0IGlndF9kZXZpY2Ugewo+ICsJLyogRmlsbGVkIGZv ciBkcm0gZGV2aWNlcyAqLwo+ICsJc3RydWN0IGlndF9kZXZpY2UgKnBhcmVudDsKPiArCj4gKwkv KiBQb2ludCB0byB2ZW5kb3Igc3BlYyBpZiBjYW4gYmUgZm91bmQgKi8KPiArCj4gKwkvKiBQcm9w ZXJ0aWVzIC8gc3lzYXR0cnMgcmV3cml0ZW4gZnJvbSB1ZGV2IGxpc3RzICovCj4gKwlHSGFzaFRh YmxlICpwcm9wc19odDsKPiArCUdIYXNoVGFibGUgKmF0dHJzX2h0Owo+ICsKPiArCS8qIE1vc3Qg dXNhYmxlIHZhcmlhYmxlcyBmcm9tIHVkZXYgZGV2aWNlICovCj4gKwljaGFyICpzdWJzeXN0ZW07 Cj4gKwljaGFyICpzeXNwYXRoOwo+ICsJY2hhciAqZGV2bm9kZTsKPiArCj4gKwkvKiAvZGV2L2Ry aS8uLi4gcGF0aHMgKi8KPiArCWNoYXIgKmRybV9jYXJkOwo+ICsJY2hhciAqZHJtX3JlbmRlcjsK PiArCj4gKwkvKiBGb3IgcGNpIHN1YnN5c3RlbSAqLwo+ICsJY2hhciAqdmVuZG9yOwo+ICsJY2hh ciAqZGV2aWNlOwo+ICsKPiArCXN0cnVjdCBpZ3RfbGlzdCBsaW5rOwo+ICt9Owo+ICsKPiArLyog U2Nhbm5lZCBkZXZpY2VzICovCj4gK3N0YXRpYyBzdHJ1Y3Qgewo+ICsJc3RydWN0IGlndF9saXN0 IGFsbDsKPiArCXN0cnVjdCBpZ3RfbGlzdCBmaWx0ZXJlZDsKPiArCWJvb2wgZGV2c19zY2FubmVk Owo+ICt9IGlndF9kZXZzOwo+ICsKPiArc3RhdGljIHN0cnVjdCB7Cj4gKwljb25zdCBjaGFyICpu YW1lOwo+ICsJY29uc3QgY2hhciAqdmVuZG9yX2lkOwo+ICt9IHBjaV92ZW5kb3JfbWFwcGluZ1td ID0gewo+ICsJeyAiaW50ZWwiLCAiODA4NiIgfSwKPiArCXsgImFtZCIsICIxMDAyIiB9LAo+ICsJ eyBOVUxMLCB9LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wY2lfdmVuZG9y X2lkX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKPiArewo+ICsJZm9yICh0eXBlb2YoKnBjaV92 ZW5kb3JfbWFwcGluZykgKnZtID0gcGNpX3ZlbmRvcl9tYXBwaW5nOyB2bS0+bmFtZTsgdm0rKykK PiArCXsKPiArCQlpZiAoIXN0cmNhc2VjbXAobmFtZSwgdm0tPm5hbWUpKQo+ICsJCQlyZXR1cm4g dm0tPnZlbmRvcl9pZDsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyog UmVhZGluZyBzeXNhdHRyIHZhbHVlcyBjYW4gdGFrZSB0aW1lIChldmVuIHNlY29uZHMpLAo+ICsg KiB3ZSB3YW50IHRvIGF2b2lkIHJlYWRpbmcgc3VjaCBrZXlzLgo+ICsgKi8KPiArc3RhdGljIGJv b2wgaXNfb25fYmxhY2tsaXN0KGNvbnN0IGNoYXIgKndoYXQpCj4gK3sKPiArCXN0YXRpYyBjb25z dCBjaGFyICprZXlzW10gPSB7ICJjb25maWciLCAibW9kYWxpYXMiLCAibW9kZXMiLAo+ICsJCQkJ ICAgICAgInJlc291cmNlIiwKPiArCQkJCSAgICAgICJyZXNvdXJjZTAiLCAicmVzb3VyY2UxIiwg InJlc291cmNlMiIsCj4gKwkJCQkgICAgICAicmVzb3VyY2UzIiwgInJlc291cmNlNCIsICJyZXNv dXJjZTUiLAo+ICsJCQkJICAgICAgInJlc291cmNlMF93YyIsICJyZXNvdXJjZTFfd2MiLCAicmVz b3VyY2UyX3djIiwKPiArCQkJCSAgICAgICJyZXNvdXJjZTNfd2MiLCAicmVzb3VyY2U0X3djIiwg InJlc291cmNlNV93YyIsCj4gKwkJCQkgICAgICAiZHJpdmVyIiwKPiArCQkJCSAgICAgICJ1ZXZl bnQiLCBOVUxMfTsKPiArCWNvbnN0IGNoYXIgKmtleTsKPiArCWludCBpID0gMDsKPiArCj4gKwlp ZiAod2hhdCA9PSBOVUxMKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwl3aGlsZSAoKGtleSA9 IGtleXNbaSsrXSkpIHsKPiArCQlpZiAoc3RyY21wKGtleSwgd2hhdCkgPT0gMCkKPiArCQkJcmV0 dXJuIHRydWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICsKPiArfQo+ICsKPiArc3Rh dGljIHN0cnVjdCBpZ3RfZGV2aWNlICppZ3RfZGV2aWNlX25ldyh2b2lkKQo+ICt7Cj4gKwlzdHJ1 Y3QgaWd0X2RldmljZSAqZGV2Owo+ICsKPiArCWRldiA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0 IGlndF9kZXZpY2UpKTsKPiArCWlmICghZGV2KQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWRl di0+YXR0cnNfaHQgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1 YWwsCj4gKwkJCQkJICAgICAgZnJlZSwgZnJlZSk7Cj4gKwlkZXYtPnByb3BzX2h0ID0gZ19oYXNo X3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLAo+ICsJCQkJCSAgICAgIGZy ZWUsIGZyZWUpOwo+ICsKPiArCWlmIChkZXYtPmF0dHJzX2h0ICYmIGRldi0+cHJvcHNfaHQpCj4g KwkJcmV0dXJuIGRldjsKCgpJZiB3ZSByZWFjaCBoZXJlLCB3ZSBsZWFrIGRldi4KCgo+ICsKPiAr CXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9wcm9w KHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYsCj4gKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNo YXIgKnZhbHVlKQo+ICt7Cj4gKwlpZiAoIWtleSB8fCAhdmFsdWUpCj4gKwkJcmV0dXJuOwo+ICsK PiArCWdfaGFzaF90YWJsZV9pbnNlcnQoZGV2LT5wcm9wc19odCwgc3RyZHVwKGtleSksIHN0cmR1 cCh2YWx1ZSkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBpZ3RfZGV2aWNlX2FkZF9hdHRyKHN0 cnVjdCBpZ3RfZGV2aWNlICpkZXYsCj4gKwkJCQljb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIg KnZhbHVlKQo+ICt7Cj4gKwljb25zdCBjaGFyICp2ID0gdmFsdWU7Cj4gKwo+ICsJaWYgKCFrZXkp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCS8qIEl0J3MgcG9zc2libGUgd2UgaGF2ZSBzeW1saW5rIGF0 IGtleSBmaWxlbmFtZSwgYnV0IHVkZXYKPiArCSAqIGxpYnJhcnkgcmVzb2x2ZXMgb25seSBmZXcg b2YgdGhlbQo+ICsJICovCj4gKwlpZiAoIXYpIHsKPiArCQlzdHJ1Y3Qgc3RhdCBzdDsKPiArCQlj aGFyIHBhdGhbUEFUSF9NQVhdOwo+ICsJCWNoYXIgbGlua3RvW1BBVEhfTUFYXTsKPiArCQlpbnQg bGVuOwo+ICsKPiArCQlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICIlcy8lcyIsIGRldi0+ c3lzcGF0aCwga2V5KTsKPiArCQlpZiAobHN0YXQocGF0aCwgJnN0KSAhPSAwKQo+ICsJCQlyZXR1 cm47Cj4gKwo+ICsJCWxlbiA9IHJlYWRsaW5rKHBhdGgsIGxpbmt0bywgc2l6ZW9mKGxpbmt0bykp Owo+ICsJCWlmIChsZW4gPD0gMCB8fCBsZW4gPT0gKHNzaXplX3QpIHNpemVvZihsaW5rdG8pKQo+ ICsJCQlyZXR1cm47Cj4gKwkJbGlua3RvW2xlbl0gPSAnXDAnOwo+ICsJCXYgPSBzdHJyY2hyKGxp bmt0bywgJy8nKTsKPiArCQlpZiAodiA9PSBOVUxMKQo+ICsJCQlyZXR1cm47Cj4gKwkJdisrOwo+ ICsJfQo+ICsKPiArCWdfaGFzaF90YWJsZV9pbnNlcnQoZGV2LT5hdHRyc19odCwgc3RyZHVwKGtl eSksIHN0cmR1cCh2KSk7Cj4gK30KPiArCj4gKy8qIEl0ZXJhdGUgb3ZlciB1ZGV2IHByb3BlcnRp ZXMgbGlzdCBhbmQgcmV3cml0ZSBpdCB0byBpZ3RfZGV2aWNlIHByb3BlcnRpZXMKPiArICogaGFz aCB0YWJsZSBmb3IgaW5zdGFudCBhY2Nlc3MuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBnZXRfcHJv cHMoc3RydWN0IHVkZXZfZGV2aWNlICpkZXYsIHN0cnVjdCBpZ3RfZGV2aWNlICppZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgdWRldl9saXN0X2VudHJ5ICplbnRyeTsKPiArCj4gKwllbnRyeSA9IHVkZXZf ZGV2aWNlX2dldF9wcm9wZXJ0aWVzX2xpc3RfZW50cnkoZGV2KTsKPiArCXdoaWxlIChlbnRyeSkg ewo+ICsJCWNvbnN0IGNoYXIgKm5hbWUgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50cnkp Owo+ICsJCWNvbnN0IGNoYXIgKnZhbHVlID0gdWRldl9saXN0X2VudHJ5X2dldF92YWx1ZShlbnRy eSk7Cj4gKwo+ICsJCWlndF9kZXZpY2VfYWRkX3Byb3AoaWRldiwgbmFtZSwgdmFsdWUpOwo+ICsJ CWVudHJ5ID0gdWRldl9saXN0X2VudHJ5X2dldF9uZXh0KGVudHJ5KTsKPiArCQlEQkcoInByb3A6 ICVzLCB2YWw6ICVzXG4iLCBuYW1lLCB2YWx1ZSk7Cj4gKwl9Cj4gK30KPiArCj4gKy8qIFNhbWUg YXMgZ2V0X3Byb3BzKCksIGJ1dCByZXdyaXRlcyBzeXNhdHRycy4gUmVzb2x2ZXMgc3ltYm9saWMg bGlua3MKPiArICogbm90IGhhbmRsZWQgYnkgdWRldiBnZXRfc3lzYXR0cl92YWx1ZSgpLgo+ICsg KiBGdW5jdGlvbiBza2lwcyBzeXNhdHRycyBmcm9tIGJsYWNrbGlzdCBodCAoYWNxdWlyaW5nIHNv bWUgdmFsdWVzIGNhbiB0YWtlCj4gKyAqIHNlY29uZHMpLgo+ICsgKi8KPiArc3RhdGljIHZvaWQg Z2V0X2F0dHJzKHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWd0X2RldmljZSAqaWRl dikKPiArewo+ICsJc3RydWN0IHVkZXZfbGlzdF9lbnRyeSAqZW50cnk7Cj4gKwo+ICsJZW50cnkg PSB1ZGV2X2RldmljZV9nZXRfc3lzYXR0cl9saXN0X2VudHJ5KGRldik7Cj4gKwl3aGlsZSAoZW50 cnkpIHsKPiArCQljb25zdCBjaGFyICprZXkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25hbWUoZW50 cnkpOwo+ICsJCWNvbnN0IGNoYXIgKnZhbHVlOwo+ICsKPiArCQlpZiAoaXNfb25fYmxhY2tsaXN0 KGtleSkpIHsKPiArCQkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOwo+ ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCXZhbHVlID0gdWRldl9kZXZpY2VfZ2V0X3N5 c2F0dHJfdmFsdWUoZGV2LCBrZXkpOwo+ICsJCWlndF9kZXZpY2VfYWRkX2F0dHIoaWRldiwga2V5 LCB2YWx1ZSk7Cj4gKwkJZW50cnkgPSB1ZGV2X2xpc3RfZW50cnlfZ2V0X25leHQoZW50cnkpOwo+ ICsJCURCRygiYXR0cjogJXMsIHZhbDogJXNcbiIsIGtleSwgdmFsdWUpOwo+ICsJfQo+ICt9Cj4g Kwo+ICsjZGVmaW5lIGdldF9wcm9wKGRldiwgcHJvcCkgKChjaGFyICopIGdfaGFzaF90YWJsZV9s b29rdXAoZGV2LT5wcm9wc19odCwgcHJvcCkpCj4gKyNkZWZpbmUgZ2V0X2F0dHIoZGV2LCBhdHRy KSAoKGNoYXIgKikgZ19oYXNoX3RhYmxlX2xvb2t1cChkZXYtPmF0dHJzX2h0LCBhdHRyKSkKPiAr I2RlZmluZSBnZXRfcHJvcF9zdWJzeXN0ZW0oZGV2KSBnZXRfcHJvcChkZXYsICJTVUJTWVNURU0i KQo+ICsjZGVmaW5lIGlzX2RybV9zdWJzeXN0ZW0oZGV2KSAgKHN0cmVxdWFsKGdldF9wcm9wX3N1 YnN5c3RlbShkZXYpLCAiZHJtIikpCj4gKyNkZWZpbmUgaXNfcGNpX3N1YnN5c3RlbShkZXYpICAo c3RyZXF1YWwoZ2V0X3Byb3Bfc3Vic3lzdGVtKGRldiksICJwY2kiKSkKPiArCj4gKy8qIEdldHMg UENJX0lEIHByb3BlcnR5LCBzcGxpdHMgdG8geHh4eDp5eXl5IGFuZCBzdG9yZXMKPiArICogeHh4 eCB0byBkZXYtPnZlbmRvciBhbmQgeXl5eSB0byBkZXYtPmRldmljZSBmb3IKPiArICogZmFzdGVy IGFjY2Vzcy4KPiArICovCj4gK3N0YXRpYyB2b2lkIHNldF92ZW5kb3JfZGV2aWNlKHN0cnVjdCBp Z3RfZGV2aWNlICpkZXYpCj4gK3sKPiArCWNvbnN0IGNoYXIgKnBjaV9pZCA9IGdldF9wcm9wKGRl diwgIlBDSV9JRCIpOwo+ICsKPiArCWlmICghcGNpX2lkIHx8IHN0cmxlbihwY2lfaWQpICE9IDkp Cj4gKwkJcmV0dXJuOwo+ICsJZGV2LT52ZW5kb3IgPSBzdHJuZHVwKHBjaV9pZCwgNCk7Cj4gKwlk ZXYtPmRldmljZSA9IHN0cm5kdXAocGNpX2lkICsgNSwgNCk7Cj4gK30KPiArCj4gKy8qIEFsbG9j YXRlIGFycmF5cyBmb3Iga2VlcGluZyBzY2FubmVkIGRldmljZXMgKi8KPiArc3RhdGljIGJvb2wg cHJlcGFyZV9zY2FuKHZvaWQpCj4gK3sKPiArCWlmIChpZ3RfZGV2cy5hbGwucHJldiA9PSBOVUxM IHx8IGlndF9kZXZzLmFsbC5uZXh0ID09IE5VTEwpCj4gKwkJaWd0X2xpc3RfaW5pdCgmaWd0X2Rl dnMuYWxsKTsKPiArCj4gKwlpZiAoaWd0X2RldnMuZmlsdGVyZWQucHJldiA9PSBOVUxMIHx8IGln dF9kZXZzLmZpbHRlcmVkLm5leHQgPT0gTlVMTCkKPiArCQlpZ3RfbGlzdF9pbml0KCZpZ3RfZGV2 cy5maWx0ZXJlZCk7Cj4gKwo+ICsKPiArCXJldHVybiB0cnVlOwoKRXh0cmEgbmV3bGluZQoKCj4g K30KPiArCj4gK3N0YXRpYyBjaGFyKiBzdHJkdXBfbnVsbHNhZmUoY29uc3QgY2hhciogc3RyKQo+ ICt7Cj4gKwlpZiAoc3RyID09IE5VTEwpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJcmV0dXJu IHN0cmR1cChzdHIpOwo+ICt9Cj4gKwo+ICsvKiBDcmVhdGUgbmV3IGlndF9kZXZpY2UgZnJvbSB1 ZGV2IGRldmljZS4KPiArICogRmlsbHMgc3RydWN0dXJlIHdpdGggbW9zdCB1c2FibGUgdWRldiBk ZXZpY2UgdmFyaWFibGVzLCBwcm9wZXJ0aWVzCj4gKyAqIGFuZCBzeXNhdHRycy4KPiArICovCj4g K3N0YXRpYyBzdHJ1Y3QgaWd0X2RldmljZSAqaWd0X2RldmljZV9uZXdfZnJvbV91ZGV2KHN0cnVj dCB1ZGV2X2RldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldiA9IGln dF9kZXZpY2VfbmV3KCk7Cj4gKwo+ICsJaWd0X2Fzc2VydChpZGV2KTsKPiArCWlkZXYtPnN5c3Bh dGggPSBzdHJkdXBfbnVsbHNhZmUodWRldl9kZXZpY2VfZ2V0X3N5c3BhdGgoZGV2KSk7Cj4gKwlp ZGV2LT5zdWJzeXN0ZW0gPSBzdHJkdXBfbnVsbHNhZmUodWRldl9kZXZpY2VfZ2V0X3N1YnN5c3Rl bShkZXYpKTsKPiArCWlkZXYtPmRldm5vZGUgPSBzdHJkdXBfbnVsbHNhZmUodWRldl9kZXZpY2Vf Z2V0X2Rldm5vZGUoZGV2KSk7Cj4gKwo+ICsJaWYgKGlkZXYtPmRldm5vZGUgJiYgc3Ryc3RyKGlk ZXYtPmRldm5vZGUsICIvZGV2L2RyaS9jYXJkIikpCj4gKwkJaWRldi0+ZHJtX2NhcmQgPSBzdHJk dXAoaWRldi0+ZGV2bm9kZSk7Cj4gKwllbHNlIGlmIChpZGV2LT5kZXZub2RlICYmIHN0cnN0cihp ZGV2LT5kZXZub2RlLCAiL2Rldi9kcmkvcmVuZGVyIikpCj4gKwkJaWRldi0+ZHJtX3JlbmRlciA9 IHN0cmR1cChpZGV2LT5kZXZub2RlKTsKPiArCj4gKwlnZXRfcHJvcHMoZGV2LCBpZGV2KTsKPiAr CWdldF9hdHRycyhkZXYsIGlkZXYpOwo+ICsKPiArCXJldHVybiBpZGV2Owo+ICt9Cj4gKwo+ICsv KiBJdGVyYXRlIG92ZXIgYWxsIGlndF9kZXZpY2VzIGFycmF5IGFuZCBmaW5kIG9uZSBtYXRjaGVk IHRvCj4gKyAqIHN1YnN5c3RlbSBhbmQgc3lzcGF0aC4KPiArICovCj4gK3N0YXRpYyBzdHJ1Y3Qg aWd0X2RldmljZSAqaWd0X2RldmljZV9maW5kKGNvbnN0IGNoYXIgKnN1YnN5c3RlbSwKPiArCQkJ CQkgIGNvbnN0IGNoYXIgKnN5c3BhdGgpCj4gK3sKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7 Cj4gKwo+ICsJaWd0X2xpc3RfZm9yX2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKQo+ICsJ ewo+ICsJCWlmIChzdHJjbXAoZGV2LT5zdWJzeXN0ZW0sIHN1YnN5c3RlbSkgPT0gMCAmJgo+ICsJ CQlzdHJjbXAoZGV2LT5zeXNwYXRoLCBzeXNwYXRoKSA9PSAwKQo+ICsJCQlyZXR1cm4gZGV2Owo+ ICsJfQo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGlndF9k ZXZpY2UgKmlndF9kZXZpY2VfZnJvbV9zeXNwYXRoKGNvbnN0IGNoYXIgKnN5c3BhdGgpCj4gK3sK PiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7Cj4gKwo+ICsJaWd0X2xpc3RfZm9yX2VhY2goZGV2 LCAmaWd0X2RldnMuYWxsLCBsaW5rKQo+ICsJewo+ICsJCWlmIChzdHJjbXAoZGV2LT5zeXNwYXRo LCBzeXNwYXRoKSA9PSAwKQo+ICsJCQlyZXR1cm4gZGV2Owo+ICsJfQo+ICsKPiArCXJldHVybiBO VUxMOwo+ICt9Cj4gKwo+ICsvKiBGb3IgZWFjaCBkcm0gaWd0X2RldmljZSBhZGQgb3IgdXBkYXRl IGl0cyBwYXJlbnQgaWd0X2RldmljZSB0byB0aGUgYXJyYXkuCj4gKyAqIEFzIGNhcmQvcmVuZGVy IGRybSBkZXZpY2VzIG1vc3RseSBoYXZlIHNhbWUgcGFyZW50ICh2a21zIGlzIGFuIGV4Y2VwdGlv bikKPiArICogbGluayB0byBpdCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgZHJtX2NhcmQgLyBk cm1fcmVuZGVyIGZpZWxkcy4KPiArICovCj4gK3N0YXRpYyB2b2lkIHVwZGF0ZV9vcl9hZGRfcGFy ZW50KHN0cnVjdCB1ZGV2X2RldmljZSAqZGV2LAo+ICsJCQkJIHN0cnVjdCBpZ3RfZGV2aWNlICpp ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgdWRldl9kZXZpY2UgKnBhcmVudF9kZXY7Cj4gKwlzdHJ1Y3Qg aWd0X2RldmljZSAqcGFyZW50X2lkZXY7Cj4gKwljb25zdCBjaGFyICpzdWJzeXN0ZW0sICpzeXNw YXRoLCAqZGV2bmFtZTsKPiArCj4gKwlwYXJlbnRfZGV2ID0gdWRldl9kZXZpY2VfZ2V0X3BhcmVu dChkZXYpOwo+ICsJaWd0X2Fzc2VydChwYXJlbnRfZGV2KTsKPiArCj4gKwlzdWJzeXN0ZW0gPSB1 ZGV2X2RldmljZV9nZXRfc3Vic3lzdGVtKHBhcmVudF9kZXYpOwo+ICsJc3lzcGF0aCA9IHVkZXZf ZGV2aWNlX2dldF9zeXNwYXRoKHBhcmVudF9kZXYpOwo+ICsKPiArCXBhcmVudF9pZGV2ID0gaWd0 X2RldmljZV9maW5kKHN1YnN5c3RlbSwgc3lzcGF0aCk7Cj4gKwlpZiAoIXBhcmVudF9pZGV2KSB7 Cj4gKwkJcGFyZW50X2lkZXYgPSBpZ3RfZGV2aWNlX25ld19mcm9tX3VkZXYocGFyZW50X2Rldik7 Cj4gKwkJaWYgKGlzX3BjaV9zdWJzeXN0ZW0ocGFyZW50X2lkZXYpKSB7Cj4gKwkJCXNldF92ZW5k b3JfZGV2aWNlKHBhcmVudF9pZGV2KTsKPiArCQl9Cj4gKwkJaWd0X2xpc3RfaW5zZXJ0X3RhaWwo JmlndF9kZXZzLmFsbCwgJnBhcmVudF9pZGV2LT5saW5rKTsKPiArCX0KPiArCWRldm5hbWUgPSB1 ZGV2X2RldmljZV9nZXRfZGV2bm9kZShkZXYpOwo+ICsJaWYgKGRldm5hbWUgIT0gTlVMTCAmJiBz dHJzdHIoZGV2bmFtZSwgIi9kZXYvZHJpL2NhcmQiKSkKPiArCQlwYXJlbnRfaWRldi0+ZHJtX2Nh cmQgPSBzdHJkdXAoZGV2bmFtZSk7Cj4gKwllbHNlIGlmIChkZXZuYW1lICE9IE5VTEwgJiYgc3Ry c3RyKGRldm5hbWUsICIvZGV2L2RyaS9yZW5kZXIiKSkKPiArCQlwYXJlbnRfaWRldi0+ZHJtX3Jl bmRlciA9IHN0cmR1cChkZXZuYW1lKTsKPiArCj4gKwlpZGV2LT5wYXJlbnQgPSBwYXJlbnRfaWRl djsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBpZ3RfZGV2aWNlICpkdXBsaWNhdGVfZGV2aWNl KHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpIHsKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkdXAgPSBt YWxsb2Moc2l6ZW9mKCpkdXApKTsKPiArCW1lbWNweShkdXAsIGRldiwgc2l6ZW9mKCpkZXYpKTsK PiArCWR1cC0+bGluay5wcmV2ID0gTlVMTDsKPiArCWR1cC0+bGluay5uZXh0ID0gTlVMTDsKPiAr CXJldHVybiBkdXA7Cj4gK30KPiArCj4gK3N0YXRpYyBnaW50IGRldnNfY29tcGFyZShjb25zdCB2 b2lkICphLCBjb25zdCB2b2lkICpiKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2MSwg KmRldjI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRldjEgPSAqKHN0cnVjdCBpZ3RfZGV2aWNlICoq KSBhOwo+ICsJZGV2MiA9ICooc3RydWN0IGlndF9kZXZpY2UgKiopIGI7Cj4gKwlyZXQgPSBzdHJj bXAoZGV2MS0+c3Vic3lzdGVtLCBkZXYyLT5zdWJzeXN0ZW0pOwo+ICsJaWYgKHJldCkKPiArCQly ZXR1cm4gcmV0Owo+ICsKPiArCXJldHVybiBzdHJjbXAoZGV2MS0+c3lzcGF0aCwgZGV2Mi0+c3lz cGF0aCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNvcnRfYWxsX2RldmljZXModm9pZCkKPiAr ewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldiwgKnRtcDsKPiArCWludCBsZW4gPSBpZ3RfbGlz dF9sZW5ndGgoJmlndF9kZXZzLmFsbCk7Cj4gKwlzdHJ1Y3QgaWd0X2RldmljZSAqKmRldnMgPSBt YWxsb2MobGVuICogc2l6ZW9mKCpkZXYpKTsKPiArCj4gKwlpbnQgaSA9IDA7Cj4gKwlpZ3RfbGlz dF9mb3JfZWFjaF9zYWZlKGRldiwgdG1wLCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7Cj4gKwkJZGV2 c1tpXSA9IGRldjsKPiArCQlpZ3RfYXNzZXJ0KGkrKyA8IGxlbik7Cj4gKwkJaWd0X2xpc3RfcmVt b3ZlKCZkZXYtPmxpbmspOwo+ICsJfQo+ICsKPiArCXFzb3J0KGRldnMsIGxlbiwgc2l6ZW9mKCpk ZXZzKSwgZGV2c19jb21wYXJlKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsK PiArCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2RldnMuYWxsLCAmZGV2c1tpXS0+bGluayk7 Cj4gKwl9Cj4gK30KPiArCj4gKy8qIENvcmUgc2Nhbm5pbmcgZnVuY3Rpb24uCj4gKyAqCj4gKyAq IEFsbCBzY2FubmVkIGRldmljZXMgYXJlIGtlcHQgaW5zaWRlIGlndF9kZXZzLmFsbCBwb2ludGVy IGFycmF5Lgo+ICsgKiBFYWNoIGFkZGVkIGRldmljZSBpcyBpZ3RfZGV2aWNlIHN0cnVjdHVyZSwg d2hpY2ggY29udHJhcnkgdG8gdWRldiBkZXZpY2UKPiArICogaGFzIHByb3BlcnRpZXMgLyBzeXNh dHRycyBzdG9yZWQgaW5zaWRlIGhhc2ggdGFibGUgaW5zdGVhZCBvZiBsaXN0Lgo+ICsgKgo+ICsg KiBGdW5jdGlvbiBpdGVyYXRlcyBvdmVyIGRldmljZXMgb24gJ2RybScgc3Vic3lzdGVtLiBGb3Ig ZWFjaCBkcm0gZGV2aWNlCj4gKyAqIGl0cyBwYXJlbnQgaXMgdGFrZW4gKGJ1cyBkZXZpY2UpIGFu ZCBzdG9yZWQgaW5zaWRlIHNhbWUgYXJyYXkuCj4gKyAqIEZ1bmN0aW9uIHNvcnRzIGFsbCBmb3Vu ZCBkZXZpY2VzIHRvIGtlZXAgc2FtZSBvcmRlciBvZiBidXMgZGV2aWNlcwo+ICsgKiBmb3IgcHJv dmlkaW5nIHByZWRpY3RhYmxlIHNlYXJjaC4KPiArICovCj4gK3N0YXRpYyB2b2lkIHNjYW5fZHJt X2RldmljZXModm9pZCkKPiArewo+ICsJc3RydWN0IHVkZXYgKnVkZXY7Cj4gKwlzdHJ1Y3QgdWRl dl9lbnVtZXJhdGUgKmVudW1lcmF0ZTsKPiArCXN0cnVjdCB1ZGV2X2xpc3RfZW50cnkgKmRldmlj ZXMsICpkZXZfbGlzdF9lbnRyeTsKPiArCXN0cnVjdCBpZ3RfZGV2aWNlICpkZXY7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXVkZXYgPSB1ZGV2X25ldygpOwo+ICsJaWd0X2Fzc2VydCh1ZGV2KTsKPiAr Cj4gKwllbnVtZXJhdGUgPSB1ZGV2X2VudW1lcmF0ZV9uZXcodWRldik7Cj4gKwlpZ3RfYXNzZXJ0 KGVudW1lcmF0ZSk7Cj4gKwo+ICsJREJHKCJTY2FubmluZyBkcm0gc3Vic3lzdGVtXG4iKTsKPiAr CXJldCA9IHVkZXZfZW51bWVyYXRlX2FkZF9tYXRjaF9zdWJzeXN0ZW0oZW51bWVyYXRlLCAiZHJt Iik7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCXVkZXZfZW51bWVyYXRlX2FkZF9tYXRj aF9wcm9wZXJ0eShlbnVtZXJhdGUsICJERVZOQU1FIiwgIi9kZXYvZHJpLyoiKTsKPiArCWlndF9h c3NlcnQoIXJldCk7Cj4gKwo+ICsJcmV0ID0gdWRldl9lbnVtZXJhdGVfc2Nhbl9kZXZpY2VzKGVu dW1lcmF0ZSk7Cj4gKwlpZ3RfYXNzZXJ0KCFyZXQpOwo+ICsKPiArCWRldmljZXMgPSB1ZGV2X2Vu dW1lcmF0ZV9nZXRfbGlzdF9lbnRyeShlbnVtZXJhdGUpOwo+ICsJaWYgKCFkZXZpY2VzKQo+ICsJ CXJldHVybjsKPiArCj4gKwl1ZGV2X2xpc3RfZW50cnlfZm9yZWFjaChkZXZfbGlzdF9lbnRyeSwg ZGV2aWNlcykgewo+ICsJCWNvbnN0IGNoYXIgKnBhdGg7Cj4gKwkJc3RydWN0IHVkZXZfZGV2aWNl ICp1ZGV2X2RldjsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZSAqaWRldjsKPiArCj4gKwkJcGF0aCA9 IHVkZXZfbGlzdF9lbnRyeV9nZXRfbmFtZShkZXZfbGlzdF9lbnRyeSk7Cj4gKwkJdWRldl9kZXYg PSB1ZGV2X2RldmljZV9uZXdfZnJvbV9zeXNwYXRoKHVkZXYsIHBhdGgpOwo+ICsJCWlkZXYgPSBp Z3RfZGV2aWNlX25ld19mcm9tX3VkZXYodWRldl9kZXYpOwo+ICsJCXVwZGF0ZV9vcl9hZGRfcGFy ZW50KHVkZXZfZGV2LCBpZGV2KTsKPiArCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2RldnMu YWxsLCAmaWRldi0+bGluayk7Cj4gKwo+ICsJCXVkZXZfZGV2aWNlX3VucmVmKHVkZXZfZGV2KTsK PiArCX0KPiArCXVkZXZfZW51bWVyYXRlX3VucmVmKGVudW1lcmF0ZSk7Cj4gKwl1ZGV2X3VucmVm KHVkZXYpOwo+ICsKPiArCXNvcnRfYWxsX2RldmljZXMoKTsKPiArCj4gKwlpZ3RfbGlzdF9mb3Jf ZWFjaChkZXYsICZpZ3RfZGV2cy5hbGwsIGxpbmspIHsKPiArCQlzdHJ1Y3QgaWd0X2RldmljZSAq ZGV2X2R1cCA9IGR1cGxpY2F0ZV9kZXZpY2UoZGV2KTsKPiArCQlpZ3RfbGlzdF9pbnNlcnRfdGFp bCgmaWd0X2RldnMuZmlsdGVyZWQsICZkZXZfZHVwLT5saW5rKTsKPiArCX0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgaWd0X2RldmljZV9mcmVlKHN0cnVjdCBpZ3RfZGV2aWNlICpkZXYpCj4gK3sK PiArCWZyZWUoZGV2LT5kZXZub2RlKTsKPiArCWZyZWUoZGV2LT5zdWJzeXN0ZW0pOwo+ICsJZnJl ZShkZXYtPnN5c3BhdGgpOwo+ICsJZnJlZShkZXYtPmRybV9jYXJkKTsKPiArCWZyZWUoZGV2LT5k cm1fcmVuZGVyKTsKPiArCWZyZWUoZGV2LT52ZW5kb3IpOwo+ICsJZnJlZShkZXYtPmRldmljZSk7 Cj4gKwlnX2hhc2hfdGFibGVfZGVzdHJveShkZXYtPmF0dHJzX2h0KTsKPiArCWdfaGFzaF90YWJs ZV9kZXN0cm95KGRldi0+cHJvcHNfaHQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaWd0X2Rldmlj ZXNfc2Nhbgo+ICsgKiBAZm9yY2U6IGVuZm9yY2Ugc2Nhbm5pbmcgZGV2aWNlcwo+ICsgKgo+ICsg KiBGdW5jdGlvbiBzY2FucyB1ZGV2IGluIHNlYXJjaCBvZiBncHUgZGV2aWNlcy4gRm9yIGZpcnN0 IHJ1biBpdCBjYW4gYmUKPiArICogY2FsbGVkIHdpdGggQGZvcmNlID0gZmFsc2UuIElmIHNvbWV0 aGluZyBjaGFuZ2VzIGR1cmluZyB0aGUgdGhlIHRlc3QKPiArICogb3IgdGVzdCBkb2VzIHNvbWUg bW9kdWxlIGxvYWRpbmcgKG5ldyBkcm0gZGV2aWNlcyBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbikK PiArICogZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWdhaW4gd2l0aCBAZm9yY2UgPSB0cnVlIHRv IHJlZnJlc2ggZGV2aWNlIGFycmF5Lgo+ICsgKi8KPiArdm9pZCBpZ3RfZGV2aWNlc19zY2FuKGJv b2wgZm9yY2UpCj4gK3sKPiArCWlmIChmb3JjZSAmJiBpZ3RfZGV2cy5kZXZzX3NjYW5uZWQpIHsK PiArCQlzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCAqdG1wOwo+ICsJCWlndF9saXN0X2Zvcl9lYWNo X3NhZmUoZGV2LCB0bXAsICZpZ3RfZGV2cy5hbGwsIGxpbmspIHsKPiArCQkJaWd0X2RldmljZV9m cmVlKGRldik7Cj4gKwkJCWZyZWUoZGV2KTsKPiArCQl9Cj4gKwo+ICsJCWlndF9kZXZzLmRldnNf c2Nhbm5lZCA9IGZhbHNlOwo+ICsJfQo+ICsKPiArCWlmIChpZ3RfZGV2cy5kZXZzX3NjYW5uZWQp Cj4gKwkJcmV0dXJuOwo+ICsKPiArCXByZXBhcmVfc2NhbigpOwo+ICsJc2Nhbl9kcm1fZGV2aWNl cygpOwo+ICsKPiArCWlndF9kZXZzLmRldnNfc2Nhbm5lZCA9IHRydWU7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBfcHJfc2ltcGxlKGNvbnN0IGNoYXIgKmssIGNvbnN0IGNoYXIgKnYp Cj4gK3sKPiArCXByaW50ZigiICAgICUtMTZzOiAlc1xuIiwgaywgdik7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBfcHJfc2ltcGxlMihjb25zdCBjaGFyICprLCBjb25zdCBjaGFyICp2 MSwgY29uc3QgY2hhciAqdjIpCj4gK3sKPiArCXByaW50ZigiICAgICUtMTZzOiAlczolc1xuIiwg aywgdjEsIHYyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaWd0X2RldnNfcHJpbnRfc2ltcGxl KHN0cnVjdCBpZ3RfbGlzdCAqdmlldykKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsK PiArCj4gKwlpZiAoIXZpZXcpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChpZ3RfbGlzdF9lbXB0 eSh2aWV3KSkgewo+ICsJCXByaW50ZigiTm8gR1BVIGRldmljZXMgZm91bmRcbiIpOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXYsIHZpZXcsIGxpbmspIHsK PiArCQlwcmludGYoInN5czolc1xuIiwgZGV2LT5zeXNwYXRoKTsKPiArCQlpZiAoZGV2LT5zdWJz eXN0ZW0pCj4gKwkJCV9wcl9zaW1wbGUoInN1YnN5c3RlbSIsIGRldi0+c3Vic3lzdGVtKTsKPiAr CQlpZiAoZGV2LT5kcm1fY2FyZCkKPiArCQkJX3ByX3NpbXBsZSgiZHJtIGNhcmQiLCBkZXYtPmRy bV9jYXJkKTsKPiArCQlpZiAoZGV2LT5kcm1fcmVuZGVyKQo+ICsJCQlfcHJfc2ltcGxlKCJkcm0g cmVuZGVyIiwgZGV2LT5kcm1fcmVuZGVyKTsKPiArCQlpZiAoaXNfZHJtX3N1YnN5c3RlbShkZXYp KSB7Cj4gKwkJCV9wcl9zaW1wbGUyKCJwYXJlbnQiLCAic3lzIiwKPiArCQkJCSAgIGRldi0+cGFy ZW50LT5zeXNwYXRoKTsKPiArCQl9IGVsc2Ugewo+ICsJCQlpZiAoaXNfcGNpX3N1YnN5c3RlbShk ZXYpKSB7Cj4gKwkJCQlfcHJfc2ltcGxlKCJ2ZW5kb3IiLCBkZXYtPnZlbmRvcik7Cj4gKwkJCQlf cHJfc2ltcGxlKCJkZXZpY2UiLCBkZXYtPmRldmljZSk7Cj4gKwkJCX0KPiArCQl9Cj4gKwkJcHJp bnRmKCJcbiIpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgX3ByaW50X2tl eV92YWx1ZShjb25zdCBjaGFyKiBrLCBjb25zdCBjaGFyICp2KQo+ICt7Cj4gKwlwcmludGYoIiUt MzJzOiAlc1xuIiwgaywgdik7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHByaW50X2h0KEdIYXNo VGFibGUgKmh0KQo+ICt7Cj4gKwlHTGlzdCAqa2V5cyA9IGdfaGFzaF90YWJsZV9nZXRfa2V5cyho dCk7Cj4gKwo+ICsJa2V5cyA9IGdfbGlzdF9zb3J0KGtleXMsIChHQ29tcGFyZUZ1bmMpIHN0cmNt cCk7Cj4gKwl3aGlsZSAoa2V5cykgewo+ICsJCWNoYXIgKmsgPSAoY2hhciAqKSBrZXlzLT5kYXRh Owo+ICsJCWNoYXIgKnYgPSBnX2hhc2hfdGFibGVfbG9va3VwKGh0LCBrKTsKPiArCj4gKwkJX3By aW50X2tleV92YWx1ZShrLCB2KTsKPiArCQlrZXlzID0gZ19saXN0X25leHQoa2V5cyk7Cj4gKwl9 Cj4gKwlnX2xpc3RfZnJlZShrZXlzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaWd0X2RldnNf cHJpbnRfZGV0YWlsKHN0cnVjdCBpZ3RfbGlzdCAqdmlldykKPiArewo+ICsJc3RydWN0IGlndF9k ZXZpY2UgKmRldjsKPiArCj4gKwlpZiAoIXZpZXcpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWlmIChp Z3RfbGlzdF9lbXB0eSh2aWV3KSkgewo+ICsJCXByaW50ZigiTm8gR1BVIGRldmljZXMgZm91bmRc biIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlpZ3RfbGlzdF9mb3JfZWFjaChkZXYsIHZp ZXcsIGxpbmspIHsKPiArCQlwcmludGYoIj09PT09PT09PT0gJXM6JXMgPT09PT09PT09PVxuIiwK PiArCQkgICAgICAgZGV2LT5zdWJzeXN0ZW0sIGRldi0+c3lzcGF0aCk7Cj4gKwkJaWYgKCFpc19k cm1fc3Vic3lzdGVtKGRldikpIHsKPiArCQkJX3ByaW50X2tleV92YWx1ZSgiY2FyZCBkZXZpY2Ui LCBkZXYtPmRybV9jYXJkKTsKPiArCQkJX3ByaW50X2tleV92YWx1ZSgicmVuZGVyIGRldmljZSIs IGRldi0+ZHJtX3JlbmRlcik7Cj4gKwkJfQo+ICsKPiArCQlwcmludGYoIlxuW3Byb3BlcnRpZXNd XG4iKTsKPiArCQlwcmludF9odChkZXYtPnByb3BzX2h0KTsKPiArCQlwcmludGYoIlxuW2F0dHJp YnV0ZXNdXG4iKTsKPiArCQlwcmludF9odChkZXYtPmF0dHJzX2h0KTsKPiArCQlwcmludGYoIlxu Iik7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcHJpbnRfZnVuYyB7Cj4gKwl2b2lk ICgqcHJuKShzdHJ1Y3QgaWd0X2xpc3QgKnZpZXcpOwo+ICt9IHByaW50X2Z1bmN0aW9uc1tdID0g ewo+ICsJW0lHVF9QUklOVF9TSU1QTEVdID0geyAucHJuID0gaWd0X2RldnNfcHJpbnRfc2ltcGxl IH0sCj4gKwlbSUdUX1BSSU5UX0RFVEFJTF0gPSB7IC5wcm4gPSBpZ3RfZGV2c19wcmludF9kZXRh aWwgfSwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlc19wcmludAo+ICsgKiBAcHJp bnR0eXBlOiBJR1RfUFJJTlRfU0lNUExFIG9yIElHVF9QUklOVF9ERVRBSUwKPiArICoKPiArICog RnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgZXh0ZXJuYWwgdG9vbCB0byBwcmludCBkZXZpY2UgYXJy YXkgaW4gc2ltcGxlCj4gKyAqIG9yIGRldGFpbGVkIGZvcm0uIFRoaXMgZnVuY3Rpb24gaXMgYWRk ZWQgaGVyZSB0byBhdm9pZCBleHBvc2luZwo+ICsgKiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBk YXRhIHN0cnVjdHVyZXMuCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2VzX3ByaW50KGVudW0gaWd0 X2RldmljZXNfcHJpbnRfdHlwZSBwcmludHR5cGUpCj4gK3sKPiArCXByaW50X2Z1bmN0aW9uc1tw cmludHR5cGVdLnBybigmaWd0X2RldnMuZmlsdGVyZWQpOwo+ICt9Cj4gKwo+ICsvKioKPiArICog aWd0X2RldmljZXNfcHJpbnRfdmVuZG9ycwo+ICsgKgo+ICsgKiBQcmludCBwY2kgaWQgLT4gdmVu ZG9yIG1hcHBpbmdzLiBWZW5kb3IgbmFtZXMgcHJpbnRlZCBieSB0aGlzIGZ1bmN0aW9uCj4gKyAq IGNhbiBiZSB1c2VkIGZvciBmaWx0ZXJzIGxpa2UgcGNpIHdoaWNoIGFsbG93cyBwYXNzaW5nIHZl bmRvciAtIGxpa2UKPiArICogdmVuZG9yIGlkICg4MDg2KSBvciBhcyBhIHN0cmluZyAoSW50ZWwp Lgo+ICsgKi8KPiArdm9pZCBpZ3RfZGV2aWNlc19wcmludF92ZW5kb3JzKHZvaWQpCj4gK3sKPiAr CXByaW50ZigiUmVjb2duaXplZCB2ZW5kb3JzOlxuIik7Cj4gKwlwcmludGYoIiUtOHMgJS0xNnNc biIsICJQQ0kgSUQiLCAidmVuZG9yIik7Cj4gKwlmb3IgKHR5cGVvZigqcGNpX3ZlbmRvcl9tYXBw aW5nKSAqdm0gPSBwY2lfdmVuZG9yX21hcHBpbmc7IHZtLT5uYW1lOyB2bSsrKSB7Cj4gKwkJcHJp bnRmKCIlLThzICUtMTZzXG4iLCB2bS0+dmVuZG9yX2lkLCB2bS0+bmFtZSk7Cj4gKwl9Cj4gK30K PiArCj4gK3N0cnVjdCBmaWx0ZXI7Cj4gKwo+ICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gK3N0 cnVjdCBmaWx0ZXJfY2xhc3Mgewo+ICsJc3RydWN0IGlndF9saXN0ICooKmZpbHRlcl9mdW5jdGlv bikoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJCQkgICAgY29uc3Qgc3Ry dWN0IGZpbHRlciAqZmlsdGVyKTsKPiArCWJvb2wgKCppc192YWxpZCkoY29uc3Qgc3RydWN0IGZp bHRlcl9jbGFzcyAqZmNscywKPiArCQkJIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcik7Cj4g Kwljb25zdCBjaGFyICpuYW1lOwo+ICsJY29uc3QgY2hhciAqaGVscDsKPiArCWNvbnN0IGNoYXIg KmRldGFpbDsKPiArfTsKPiArCj4gKyNkZWZpbmUgRklMVEVSX05BTUVfTEVOIDMyCj4gKyNkZWZp bmUgRklMVEVSX0RBVEFfTEVOIDI1Ngo+ICsKPiArc3RydWN0IGZpbHRlciB7Cj4gKwlzdHJ1Y3Qg ZmlsdGVyX2NsYXNzICpjbGFzczsKPiArCj4gKwljaGFyIHJhd19kYXRhW0ZJTFRFUl9EQVRBX0xF Tl07Cj4gKwo+ICsJc3RydWN0IHsKPiArCQljaGFyICp2ZW5kb3I7Cj4gKwkJY2hhciAqZGV2aWNl Owo+ICsJCWNoYXIgKmNhcmQ7Cj4gKwkJY2hhciAqZHJtOwo+ICsJCWNoYXIgKmRyaXZlcjsKPiAr CX0gZGF0YTsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIGZpbGxfZmlsdGVyX2RhdGEoc3RydWN0 IGZpbHRlciAqZmlsdGVyLCBjb25zdCBjaGFyICprZXksIGNvbnN0IGNoYXIgKnZhbHVlKQo+ICt7 Cj4gKwlpZiAoa2V5ID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgewo+ICsJCXJldHVybjsKPiAr CX0KPiArCj4gKyNkZWZpbmUgX19maWxsX2tleShuYW1lKSBpZiAoc3RyY21wKGtleSwgI25hbWUp ID09IDApIFwKPiArCWZpbHRlci0+ZGF0YS5uYW1lID0gc3RyZHVwKHZhbHVlKQo+ICsJX19maWxs X2tleSh2ZW5kb3IpOwo+ICsJX19maWxsX2tleShkZXZpY2UpOwo+ICsJX19maWxsX2tleShjYXJk KTsKPiArCV9fZmlsbF9rZXkoZHJtKTsKPiArCV9fZmlsbF9rZXkoZHJpdmVyKTsKPiArI3VuZGVm IF9fZmlsbF9rZXkKPiArCj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNwbGl0X2ZpbHRlcl9kYXRh KHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKPiArewo+ICsJY2hhciAqcHJvcGVydHksICprZXksICpk YXRhLCAqZHVwOwo+ICsKPiArCWR1cCA9IHN0cmR1cChmaWx0ZXItPnJhd19kYXRhKTsKPiArCWRh dGEgPSBkdXA7Cj4gKwo+ICsJd2hpbGUgKChwcm9wZXJ0eSA9IHN0cnNlcCgmZGF0YSwgIiwiKSkp IHsKPiArCQlrZXkgPSBzdHJzZXAoJnByb3BlcnR5LCAiPSIpOwo+ICsJCWZpbGxfZmlsdGVyX2Rh dGEoZmlsdGVyLCBrZXksIHByb3BlcnR5KTsKPiArCX0KPiArCj4gKwlmcmVlKGR1cCk7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2NsYXNzICpnZXRfZmlsdGVyX2NsYXNzKGNvbnN0 IGNoYXIgKmNsYXNzX25hbWUsIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcik7Cj4gKwo+ICtz dGF0aWMgYm9vbCBwYXJzZV9maWx0ZXIoY29uc3QgY2hhciAqZnN0ciwgc3RydWN0IGZpbHRlciAq ZmlsdGVyKQo+ICt7Cj4gKwljaGFyIGNsYXNzX25hbWVbMzJdOwo+ICsJaWYgKCFmc3RyIHx8ICFm aWx0ZXIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCW1lbXNldChmaWx0ZXIsIDAsIHNpemVv ZigqZmlsdGVyKSk7Cj4gKwo+ICsKCkV4dHJhIG5ld2xpbmUKCgo+ICsJaWYgKHNzY2FuZihmc3Ry LCAiJTMxW146XTolMjU1cyIsIGNsYXNzX25hbWUsIGZpbHRlci0+cmF3X2RhdGEpID49IDEpIHsK PiArCQlmaWx0ZXItPmNsYXNzID0gZ2V0X2ZpbHRlcl9jbGFzcyhjbGFzc19uYW1lLCBmaWx0ZXIp Owo+ICsJCXNwbGl0X2ZpbHRlcl9kYXRhKGZpbHRlcik7Cj4gKwkJcmV0dXJuIHRydWU7Cj4gKwl9 Cj4gKwo+ICsJcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBpc192ZW5kb3Jf bWF0Y2hlZChzdHJ1Y3QgaWd0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyICp2ZW5kb3IpCj4gK3sK PiArCWNvbnN0IGNoYXIgKnZlbmRvcl9pZDsKPiArCj4gKwlpZiAoIWRldi0+dmVuZG9yIHx8ICF2 ZW5kb3IpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8qIEZpcnN0IHdlIGNvbXBhcmUgdmVu ZG9yIGlkLCBsaWtlIDgwODYgKi8KPiArCWlmICghc3RyY2FzZWNtcChkZXYtPnZlbmRvciwgdmVu ZG9yKSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwkvKiBMaWtlbHkgd2UgaGF2ZSB2ZW5kb3Ig c3RyaW5nIGluc3RlYWQgb2YgaWQgKi8KPiArCXZlbmRvcl9pZCA9IGdldF9wY2lfdmVuZG9yX2lk X2J5X25hbWUodmVuZG9yKTsKPiArCWlmICghdmVuZG9yX2lkKQo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlyZXR1cm4gIXN0cmNhc2VjbXAoZGV2LT52ZW5kb3IsIHZlbmRvcl9pZCk7Cj4gK30K PiArCj4gKy8qIEZpbHRlciB3aGljaCBtYXRjaGVzIHN1YnN5c3RlbTovc3lzLy4uLiBwYXRoLgo+ ICsgKiBVc2VkIGFzIGZpcnN0IGZpbHRlciBpbiBjaGFpbi4KPiArICovCj4gK3N0YXRpYyBzdHJ1 Y3QgaWd0X2xpc3QgKmZpbHRlcl9zeXMoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywK PiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWx0ZXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGln dF9kZXZpY2UgKmRldjsKPiArCSh2b2lkKSBmY2xzOwo+ICsKPiArCURCRygiZmlsdGVyIHN5c1xu Iik7Cj4gKwlpZiAoIXN0cmxlbihmaWx0ZXItPnJhd19kYXRhKSkKPiArCQlyZXR1cm4gJmlndF9k ZXZzLmZpbHRlcmVkOwo+ICsKPiArCWRldiA9IGlndF9kZXZpY2VfZnJvbV9zeXNwYXRoKGZpbHRl ci0+cmF3X2RhdGEpOwo+ICsJaWYgKGRldikgewo+ICsJCXN0cnVjdCBpZ3RfZGV2aWNlICpkdXAg PSBkdXBsaWNhdGVfZGV2aWNlKGRldik7Cj4gKwkJaWd0X2xpc3RfaW5zZXJ0X3RhaWwoJmlndF9k ZXZzLmZpbHRlcmVkLCAmZHVwLT5saW5rKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gJmlndF9kZXZz LmZpbHRlcmVkOwo+ICt9Cj4gKwo+ICsvKiBGaW5kIGRybSBkZXZpY2UgdXNpbmcgZGlyZWN0IHBh dGggdG8gL2Rldi9kcmkvLgo+ICsgKiBJdCBleHRlbmRzIGZpbHRlcl9zeXMgdG8gYWxsb3cgdXNp bmcgZHJtOi9kZXYvZHJpL2NhcmRYIGFuZAo+ICsgKiBkcm06L2Rldi9kcmkvcmVuZGVyRFggZmls dGVyIHN5bnRheC4KPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3QgKmZpbHRlcl9kcm0o Y29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBm aWx0ZXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCSh2b2lk KSBmY2xzOwo+ICsKPiArCURCRygiZmlsdGVyIGRybVxuIik7Cj4gKwlpZiAoIXN0cmxlbihmaWx0 ZXItPnJhd19kYXRhKSkKPiArCQlyZXR1cm4gJmlndF9kZXZzLmZpbHRlcmVkOwo+ICsKPiArCWln dF9saXN0X2Zvcl9lYWNoKGRldiwgJmlndF9kZXZzLmFsbCwgbGluaykgewo+ICsJCWlmICghaXNf ZHJtX3N1YnN5c3RlbShkZXYpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKHN0cmVxdWFs KGRldi0+c3lzcGF0aCwgZmlsdGVyLT5yYXdfZGF0YSkgfHwKPiArCQkJc3RyZXF1YWwoZGV2LT5k cm1fY2FyZCwgZmlsdGVyLT5yYXdfZGF0YSkgfHwKPiArCQkJc3RyZXF1YWwoZGV2LT5kcm1fcmVu ZGVyLCBmaWx0ZXItPnJhd19kYXRhKSkgewo+ICsJCQlzdHJ1Y3QgaWd0X2RldmljZSAqZHVwID0g ZHVwbGljYXRlX2RldmljZShkZXYpOwo+ICsJCQlpZ3RfbGlzdF9pbnNlcnRfdGFpbCgmaWd0X2Rl dnMuZmlsdGVyZWQsICZkdXAtPmxpbmspOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ ICsKPiArCXJldHVybiAmaWd0X2RldnMuZmlsdGVyZWQ7Cj4gK30KPiArCj4gKy8qIEZpbmQgYXBw cm9wcmlhdGUgcGNpIGRldmljZSBtYXRjaGluZyB2ZW5kb3IvZGV2aWNlL2NhcmQgZmlsdGVyIGFy Z3VtZW50cy4KPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgaWd0X2xpc3QgKmZpbHRlcl9wY2koY29u c3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBmaWx0 ZXIgKmZpbHRlcikKPiArewo+ICsJc3RydWN0IGlndF9kZXZpY2UgKmRldjsKPiArCWludCBjYXJk ID0gLTE7Cj4gKwkodm9pZCkgZmNsczsKPiArCj4gKwlEQkcoImZpbHRlciBwY2lcbiIpOwo+ICsK PiArCWlmIChmaWx0ZXItPmRhdGEuY2FyZCkgewo+ICsJCXNzY2FuZihmaWx0ZXItPmRhdGEuY2Fy ZCwgIiVkIiwgJmNhcmQpOwo+ICsJCWlmIChjYXJkIDwgMCkgewo+ICsJCQlyZXR1cm4gJmlndF9k ZXZzLmZpbHRlcmVkOwo+ICsJCX0KPiArCX0gZWxzZSB7Cj4gKwkJY2FyZCA9IDA7Cj4gKwl9Cj4g Kwo+ICsJaWd0X2xpc3RfZm9yX2VhY2goZGV2LCAmaWd0X2RldnMuYWxsLCBsaW5rKSB7Cj4gKwkJ aWYgKCFpc19wY2lfc3Vic3lzdGVtKGRldikpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQkvKiBT a2lwIGlmICd2ZW5kb3InIGRvZXNuJ3QgbWF0Y2ggKGhleCBvciBuYW1lKSAqLwo+ICsJCWlmIChm aWx0ZXItPmRhdGEudmVuZG9yICYmICFpc192ZW5kb3JfbWF0Y2hlZChkZXYsIGZpbHRlci0+ZGF0 YS52ZW5kb3IpKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJLyogU2tpcCBpZiAnZGV2aWNlJyBk b2Vzbid0IG1hdGNoICovCj4gKwkJaWYgKGZpbHRlci0+ZGF0YS5kZXZpY2UgJiYgc3RyY2FzZWNt cChmaWx0ZXItPmRhdGEuZGV2aWNlLCBkZXYtPmRldmljZSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsK PiArCQkvKiBXZSBnZXQgbi10aCBjYXJkICovCj4gKwkJaWYgKCFjYXJkKSB7Cj4gKwkJCXN0cnVj dCBpZ3RfZGV2aWNlICpkdXAgPSBkdXBsaWNhdGVfZGV2aWNlKGRldik7Cj4gKwkJCWlndF9saXN0 X2luc2VydF90YWlsKCZpZ3RfZGV2cy5maWx0ZXJlZCwgJmR1cC0+bGluayk7Cj4gKwkJCWJyZWFr Owo+ICsJCX0KPiArCQljYXJkLS07Cj4gKwl9Cj4gKwo+ICsJREJHKCJGaWx0ZXIgcGNpIGZpbHRl cmVkIHNpemU6ICVkXG4iLCBpZ3RfbGlzdF9sZW5ndGgoJmlndF9kZXZzLmZpbHRlcmVkKSk7Cj4g Kwo+ICsJcmV0dXJuICZpZ3RfZGV2cy5maWx0ZXJlZDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wg c3lzX3BhdGhfdmFsaWQoY29uc3Qgc3RydWN0IGZpbHRlcl9jbGFzcyAqZmNscywKPiArCQkJICAg Y29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKQo+ICt7Cj4gKwlzdHJ1Y3Qgc3RhdCBzdDsKPiAr Cj4gKwlpZiAoc3RhdChmaWx0ZXItPnJhd19kYXRhLCAmc3QpKSB7Cj4gKwkJaWd0X3dhcm4oInN5 c19wYXRoX3ZhbGlkOiBzeXNwYXRoIFslc10sIGVycjogJXNcbiIsCj4gKwkJCSBmaWx0ZXItPnJh d19kYXRhLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCXJldHVybiBmYWxzZTsKPiArCX0KPiArCj4g KwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZmlsdGVyX2NsYXNz IGZpbHRlcl9kZWZpbml0aW9uX2xpc3RbXSA9IHsKPiArCXsKPiArCQkubmFtZSA9ICJzeXMiLAo+ ICsJCS5pc192YWxpZCA9IHN5c19wYXRoX3ZhbGlkLAo+ICsJCS5maWx0ZXJfZnVuY3Rpb24gPSBm aWx0ZXJfc3lzLAo+ICsJCS5oZWxwID0gInN5czovc3lzL2RldmljZXMvcGNpMDAwMDowMC8wMDAw OjAwOjAyLjAiLAo+ICsJCS5kZXRhaWwgPSAiZmluZCBkZXZpY2UgYnl0IGl0cyBzeXNmcyBwYXRo XG4iLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9ICJkcm0iLAo+ICsJCS5maWx0ZXJfZnVuY3Rp b24gPSBmaWx0ZXJfZHJtLAo+ICsJCS5oZWxwID0gImRybTovZGV2L2RyaS8qIHBhdGgiLAo+ICsJ CS5kZXRhaWwgPSAiZmluZCBkcm0gZGV2aWNlIGJ5IC9kZXYvZHJpLyogbm9kZVxuIiwKPiArCX0s Cj4gKwl7Cj4gKwkJLm5hbWUgPSAicGNpIiwKPiArCQkuZmlsdGVyX2Z1bmN0aW9uID0gZmlsdGVy X3BjaSwKPiArCQkuaGVscCA9ICJwY2k6W3ZlbmRvcj0lMDR4L25hbWVdWyxkZXZpY2U9JTA0eF1b LGNhcmQ9JWRdIiwKPiArCQkuZGV0YWlsID0gInZlbmRvciBpcyBoZXggbnVtYmVyIG9yIHZlbmRv ciBuYW1lXG4iLAo+ICsJfSwKPiArCXsKPiArCQkubmFtZSA9IE5VTEwsCj4gKwl9LAo+ICt9Owo+ ICsKPiArc3RhdGljIHN0cnVjdCBmaWx0ZXJfY2xhc3MgKmdldF9maWx0ZXJfY2xhc3MoY29uc3Qg Y2hhciAqY2xhc3NfbmFtZSwgY29uc3Qgc3RydWN0IGZpbHRlciAqZmlsdGVyKQo+ICt7Cj4gKwlz dHJ1Y3QgZmlsdGVyX2NsYXNzICpmY2xzID0gTlVMTDsKPiArCWludCBpID0gMDsKPiArCj4gKwl3 aGlsZSAoKGZjbHMgPSAmZmlsdGVyX2RlZmluaXRpb25fbGlzdFtpKytdKS0+bmFtZSAhPSBOVUxM KSB7Cj4gKwkJaWYgKHN0cmNtcChjbGFzc19uYW1lLCBmY2xzLT5uYW1lKSA9PSAwKQo+ICsJCQly ZXR1cm4gZmNsczsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4g KyAqIEBpZ3RfZGV2aWNlX3ByaW50X2ZpbHRlcl90eXBlcwo+ICsgKgo+ICsgKiBQcmludCBhbGwg ZmlsdGVycyBzeW50YXggZm9yIGRldmljZSBzZWxlY3Rpb24uCj4gKyAqLwo+ICt2b2lkIGlndF9k ZXZpY2VfcHJpbnRfZmlsdGVyX3R5cGVzKHZvaWQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBmaWx0 ZXJfY2xhc3MgKmZpbHRlciA9IE5VTEw7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJcHJpbnRmKCJG aWx0ZXIgdHlwZXM6XG4tLS1cbiIpOwo+ICsJcHJpbnRmKCIlLTEycyAgJXNcbi0tLVxuIiwgImZp bHRlciIsICJzeW50YXgiKTsKPiArCj4gKwl3aGlsZSAoKGZpbHRlciA9ICZmaWx0ZXJfZGVmaW5p dGlvbl9saXN0W2krK10pLT5uYW1lICE9IE5VTEwpIHsKPiArCQlwcmludGYoIiUtMTJzICAlc1xu IiwgZmlsdGVyLT5uYW1lLCBmaWx0ZXItPmhlbHApOwo+ICsJCXByaW50ZigiJS0xMnMgICVzXG4i LCAiIiwgZmlsdGVyLT5kZXRhaWwpOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgY2hhciAqZGV2 aWNlX2ZpbHRlcjsKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQKPiAr ICoKPiArICogUmV0dXJucyB3aGV0aGVyIHdlIGhhdmUgYSBmaWx0ZXIgc2V0Lgo+ICsgKi8KPiAr Ym9vbCBpZ3RfZGV2aWNlX2lzX2ZpbHRlcl9zZXQodm9pZCkKPiArewo+ICsJcmV0dXJuIGRldmlj ZV9maWx0ZXIgIT0gTlVMTDsKPiArfQo+ICsKPiArLyogQ2hlY2sgZG9lcyBmaWx0ZXIgaXMgdmFs aWQuIEl0IGNoZWNrczoKPiArICogMS4gL3N5cy8uLi4gcGF0aCBmaXJzdAo+ICsgKiAyLiBmaWx0 ZXIgbmFtZSBmcm9tIGZpbHRlciBkZWZpbml0aW9uCj4gKyAqLwo+ICtzdGF0aWMgYm9vbCBpc19m aWx0ZXJfdmFsaWQoY29uc3QgY2hhciAqZnN0cikKPiArewo+ICsJc3RydWN0IGZpbHRlciBmaWx0 ZXI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBhcnNlX2ZpbHRlcihmc3RyLCAmZmlsdGVy KTsKPiArCWlmICghcmV0KQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoZmlsdGVyLmNs YXNzID09IE5VTEwpIHsKPiArCQlpZ3Rfd2FybigiTm8gZmlsdGVyIG1hdGNoaW5nIFslczolc11c biIsIGZpbHRlci5jbGFzcy0+bmFtZSwgZmlsdGVyLnJhd19kYXRhKTsKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwl9Cj4gKwo+ICsJaWYgKGZpbHRlci5jbGFzcy0+aXNfdmFsaWQgIT0gTlVMTCAmJiAh ZmlsdGVyLmNsYXNzLT5pc192YWxpZChmaWx0ZXIuY2xhc3MsICZmaWx0ZXIpKQo+ICsJewo+ICsJ CWlndF93YXJuKCJGaWx0ZXIgbm90IHZhbGlkIFslczolc11cbiIsIGZpbHRlci5jbGFzcy0+bmFt ZSwgZmlsdGVyLnJhd19kYXRhKTsKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0 dXJuIHRydWU7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9zZXQKPiAr ICogQGZpbHRlcjogZmlsdGVyIHRoYXQgc2hvdWxkIGJlIHNldCBnbG9iYWxseQo+ICsgKgo+ICsg KiBSZXR1cm5zIG51bWJlciBvZiBmaWx0ZXJzIGFkZGVkIHRvIGZpbHRlciBhcnJheS4gQ2FuIGJl IGdyZWF0ZXIgdGhhbgo+ICsgKiAxIGlmIEBmaWx0ZXJzIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUg ZmlsdGVyIHNlcGFyYXRlZCBieSBzZW1pY29sb24uCj4gKyAqLwo+ICt2b2lkIGlndF9kZXZpY2Vf ZmlsdGVyX3NldChjb25zdCBjaGFyICpmaWx0ZXIpCj4gK3sKPiArCWlmICghaXNfZmlsdGVyX3Zh bGlkKGZpbHRlcikpIHsKPiArCQlpZ3Rfd2FybigiSW52YWxpZCBmaWx0ZXI6ICVzXG4iLCBmaWx0 ZXIpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlkZXZpY2VfZmlsdGVyID0gc3RyZHVwKGZp bHRlcik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2aWNlX2ZpbHRlcl9mcmVlCj4gKyAq Cj4gKyAqIEZyZWUgdGhlIGZpbHRlciB0aGF0IHdlIHN0b3JlIGludGVybmFsbHksIGVmZmVjdGl2 ZWx5IGluc2V0dGluZyBpdC4KPiArICovCj4gK3ZvaWQgaWd0X2RldmljZV9maWx0ZXJfZnJlZSh2 b2lkKQo+ICt7Cj4gKwlpZiAoZGV2aWNlX2ZpbHRlciAhPSBOVUxMKQo+ICsJCWZyZWUoZGV2aWNl X2ZpbHRlcik7Cj4gK30KClRoZXNlIHR3byBmdW5jdGlvbnMgYXJlIHRoZSBvbmVzIHRoYXQgd2Vy ZSBhbHJlYWR5IGNoYW5nZWQgdG8gbm90CmxlYWsuCgoKPiArCj4gKy8qKgo+ICsgKiBpZ3RfZGV2 aWNlX2ZpbHRlcl9nZXQKPiArICoKPiArICogUmV0dXJucyBmaWx0ZXIgc3RyaW5nIG9yIE5VTEwg aWYgbm90IHNldAo+ICsgKi8KPiArY29uc3QgY2hhciAqaWd0X2RldmljZV9maWx0ZXJfZ2V0KHZv aWQpCj4gK3sKPiArCXJldHVybiBkZXZpY2VfZmlsdGVyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCBpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShjb25zdCBjaGFyICpmc3RyKQo+ICt7Cj4gKwlzdHJ1 Y3QgaWd0X2RldmljZSAqZGV2LCAqdG1wOwo+ICsJc3RydWN0IGZpbHRlciBmaWx0ZXI7Cj4gKwli b29sIHJldDsKPiArCj4gKwlpZiAoIWZzdHIpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJl dCA9IHBhcnNlX2ZpbHRlcihmc3RyLCAmZmlsdGVyKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJaWd0 X3dhcm4oIkNhbid0IHNwbGl0IGZpbHRlciBbJXNdXG4iLCBmc3RyKTsKPiArCQlyZXR1cm4gZmFs c2U7Cj4gKwl9Cj4gKwo+ICsJLyogQ2xlYW4gdGhlIGZpbHRlcmVkIGxpc3QgKi8KPiArCWlndF9s aXN0X2Zvcl9lYWNoX3NhZmUoZGV2LCB0bXAsICZpZ3RfZGV2cy5maWx0ZXJlZCwgbGluaykgewo+ ICsJCWlndF9saXN0X3JlbW92ZSgmZGV2LT5saW5rKTsKPiArCQlmcmVlKGRldik7Cj4gKwl9Cj4g Kwo+ICsJLyogSWYgZmlsdGVyLmRhdGEgY29udGFpbnMgIi9zeXMiIHVzZSBkaXJlY3QgcGF0aCBp bnN0ZWFkCj4gKwkgKiBjb250ZXh0dWFsIGZpbHRlci4KPiArCSAqLwo+ICsKPiArCWlmICghZmls dGVyLmNsYXNzKSB7Cj4gKwkJaWd0X3dhcm4oIk5vIGZpbHRlciBtYXRjaGluZyBbJXM6JXNdXG4i LCBmaWx0ZXIuY2xhc3MtPm5hbWUsIGZpbHRlci5yYXdfZGF0YSk7Cj4gKwkJcmV0dXJuIGZhbHNl Owo+ICsJfQo+ICsJZmlsdGVyLmNsYXNzLT5maWx0ZXJfZnVuY3Rpb24oZmlsdGVyLmNsYXNzLCAm ZmlsdGVyKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9k ZXZpY2VfY2FyZF9tYXRjaAo+ICsgKiBAZmlsdGVyOiBmaWx0ZXIgc3RyaW5nCj4gKyAqIEBjYXJk OiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3QKPiArICoKPiArICogRnVuY3Rpb24g YXBwbGllcyBmaWx0ZXIgdG8gbWF0Y2ggZGV2aWNlIGZyb20gZGV2aWNlIGFycmF5Lgo+ICsgKgo+ ICsgKiBSZXR1cm5zOgo+ICsgKiBmYWxzZSAtIG5vIGNhcmQgcG9pbnRlciB3YXMgcGFzc2VkIG9y IGNhcmQgd2Fzbid0IG1hdGNoZWQsCj4gKyAqIHRydWUgLSBjYXJkIG1hdGNoZWQgYW5kIHJldHVy bmVkLgo+ICsgKi8KPiArYm9vbCBpZ3RfZGV2aWNlX2NhcmRfbWF0Y2goY29uc3QgY2hhciAqZmls dGVyLCBzdHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQo+ICt7Cj4gKwlzdHJ1Y3QgaWd0X2Rl dmljZSAqZGV2ID0gTlVMTDsKPiArCj4gKwlpZiAoIWNhcmQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsJbWVtc2V0KGNhcmQsIDAsIHNpemVvZigqY2FyZCkpOwo+ICsKPiArCWlndF9kZXZpY2VzX3Nj YW4oZmFsc2UpOwo+ICsKPiArCWlmIChpZ3RfZGV2aWNlX2ZpbHRlcl9hcHBseShmaWx0ZXIpID09 IGZhbHNlKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAoaWd0X2xpc3RfZW1wdHkoJmln dF9kZXZzLmZpbHRlcmVkKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJLyogV2UgdGFrZSBm aXJzdCBvbmUgaWYgbW9yZSB0aGFuIG9uZSBjYXJkIG1hdGNoZXMgZmlsdGVyICovCj4gKwlkZXYg PSBpZ3RfbGlzdF9maXJzdF9lbnRyeSgmaWd0X2RldnMuZmlsdGVyZWQsIGRldiwgbGluayk7Cj4g Kwo+ICsJaWYgKGRldi0+c3Vic3lzdGVtICE9IE5VTEwpCj4gKwkJc3RybmNweShjYXJkLT5zdWJz eXN0ZW0sIGRldi0+c3Vic3lzdGVtLAo+ICsJCQkgICAgIHNpemVvZihjYXJkLT5zdWJzeXN0ZW0p IC0gMSk7Cj4gKwo+ICsJaWYgKGRldi0+ZHJtX2NhcmQgIT0gTlVMTCkKPiArCQlzdHJuY3B5KGNh cmQtPmNhcmQsIGRldi0+ZHJtX2NhcmQsCj4gKwkJCSAgICAgc2l6ZW9mKGNhcmQtPmNhcmQpIC0g MSk7Cj4gKwo+ICsJaWYgKGRldi0+ZHJtX3JlbmRlciAhPSBOVUxMKQo+ICsJCXN0cm5jcHkoY2Fy ZC0+cmVuZGVyLCBkZXYtPmRybV9yZW5kZXIsCj4gKwkJCSAgICAgc2l6ZW9mKGNhcmQtPnJlbmRl cikgLSAxKTsKPiArCj4gKwlyZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9v cGVuX2NhcmQ6Cj4gKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3R1 cmUKPiArICoKPiArICogT3BlbiAvZGV2L2RyaS9jYXJkWCBkZXZpY2UgcmVwcmVzZW50ZWQgYnkg aWd0X2RldmljZV9jYXJkIHN0cnVjdHVyZS4KPiArICogUmVxdWlyZXMgZmlsbGVkIEBjYXJkIGFy Z3VtZW50IChzZWUgaWd0X2RldmljZV9jYXJkX21hdGNoKCkgZnVuY3Rpb24pLgo+ICsgKgo+ICsg KiBBbiBvcGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgo+ICsgKi8KPiAraW50IGlndF9vcGVuX2Nh cmQoc3RydWN0IGlndF9kZXZpY2VfY2FyZCAqY2FyZCkKPiArewo+ICsJaWYgKCFjYXJkIHx8ICFz dHJsZW4oY2FyZC0+Y2FyZCkpCj4gKwkJcmV0dXJuIC0xOwo+ICsKPiArCXJldHVybiBvcGVuKGNh cmQtPmNhcmQsIE9fUkRXUik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3Rfb3Blbl9yZW5kZXI6 Cj4gKyAqIEBjYXJkOiBwb2ludGVyIHRvIGlndF9kZXZpY2VfY2FyZCBzdHJ1Y3R1cmUKPiArICoK PiArICogT3BlbiAvZGV2L2RyaS9yZW5kZXJEWCBkZXZpY2UgcmVwcmVzZW50ZWQgYnkgaWd0X2Rl dmljZV9jYXJkIHN0cnVjdHVyZS4KPiArICogUmVxdWlyZXMgZmlsbGVkIEBjYXJkIGFyZ3VtZW50 IChzZWUgaWd0X2RldmljZV9jYXJkX21hdGNoKCkgZnVuY3Rpb24pLgo+ICsgKgo+ICsgKiBBbiBv cGVuIERSTSBmZCBvciAtMSBvbiBlcnJvcgo+ICsgKi8KPiAraW50IGlndF9vcGVuX3JlbmRlcihz dHJ1Y3QgaWd0X2RldmljZV9jYXJkICpjYXJkKQo+ICt7Cj4gKwlpZiAoIWNhcmQgfHwgIXN0cmxl bihjYXJkLT5yZW5kZXIpKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlyZXR1cm4gb3BlbihjYXJk LT5yZW5kZXIsIE9fUkRXUik7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9kZXZpY2Vfc2Nh bi5oIGIvbGliL2lndF9kZXZpY2Vfc2Nhbi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRl eCAwMDAwMDAwMC4uZGJkZTg4MTYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL2lndF9kZXZp Y2Vfc2Nhbi5oCj4gQEAgLTAsMCArMSw2NyBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAx OSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0 IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFi b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGlu ZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVW RU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJM RSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhF UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4g KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRXQVJFLgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpZm5kZWYgX19JR1RfREVWSUNFX1NDQU5fSF9fCj4gKyNkZWZpbmUgX19JR1Rf REVWSUNFX1NDQU5fSF9fCj4gKwo+ICsjaW5jbHVkZSA8bGltaXRzLmg+Cj4gKyNpbmNsdWRlIDxp Z3QuaD4KPiArCj4gK2VudW0gaWd0X2RldmljZXNfcHJpbnRfdHlwZSB7Cj4gKwlJR1RfUFJJTlRf U0lNUExFLAo+ICsJSUdUX1BSSU5UX0RFVEFJTCwKPiArfTsKPiArCj4gK3N0cnVjdCBpZ3RfZGV2 aWNlX2NhcmQgewo+ICsJY2hhciBzdWJzeXN0ZW1bTkFNRV9NQVhdOwo+ICsJY2hhciBjYXJkW05B TUVfTUFYXTsKPiArCWNoYXIgcmVuZGVyW05BTUVfTUFYXTsKPiArfTsKPiArCj4gKy8qIFNjYW4g dWRldiBzdWJzeXN0ZW1zLiBEbyBpdCBvbmNlIHVubGVzcyBmb3JjZSBpcyB0cnVlLCB3aGF0IHJl c2NhbnMKPiArICogZGV2aWNlcyBhZ2Fpbi4KPiArICovCgoKRU5PUEFSU0UuIFJlbW92ZSB0aGlz IGNvbW1lbnQgZW50aXJlbHksIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGhhcyBhCmdvb2QgY29t bWVudCB3aXRoIGd0ay1kb2Mgc3R1ZmZzIGV2ZW4uCgoKCkFzIGdlbmVyYWwgZmVlZGJhY2ssIG11 bHRpbGluZSBjb21tZW50cwoKLyoKICogc2hvdWxkIGJlCiAqIGxpa2UgdGhpcwogKi8KCi8qIGlu c3RlYWQgb2YKICogbGlrZSB0aGlzCiAqLwoKCgpUaGlzIGFsc28gbmVlZHMgcmViYXNpbmcgdG8g dGhlIG5ldyBpZ3RfbGlzdCBzdHVmZi4gSSB0cmllZCB0byBkbyBpdApteXNlbGYgYnV0IHRoYXQg anVzdCBtYWRlIHRoaW5ncyBjcmFzaCBsZWZ0IGFuZCByaWdodC4KCgpPdGhlcndpc2UgTEdUTS4g VGVudGF0aXZlbHkgKGFzc3VtaW5nIGNyYXNoZXMgY2F1c2VkIGJ5IG1lLCBub3QgdGhpcwpzZXJp ZXMpLApSZXZpZXdlZC1ieTogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+ Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYg bWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==