From mboxrd@z Thu Jan 1 00:00:00 1970 From: Appana Durga Kedareswara Rao Subject: RE: [PATCH v5] can: xilinx CAN controller support. Date: Tue, 11 Mar 2014 12:34:15 +0000 Message-ID: References: <5254bfec-c6fd-4681-a34d-706d51e60fbb@VA3EHSMHS004.ehs.local> <531DD2C4.5060109@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "linux-can@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "robh+dt@kernel.org" , "grant.likely@linaro.org" , Michal Simek , "wg@grandegger.com" , "fengguang.wu@intel.com" To: Marc Kleine-Budde Return-path: In-Reply-To: <531DD2C4.5060109@pengutronix.de> Content-Language: en-US Sender: linux-can-owner@vger.kernel.org List-Id: netdev.vger.kernel.org SGkgTWFyYywNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNYXJjIEts ZWluZS1CdWRkZSBbbWFpbHRvOm1rbEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogTW9uZGF5LCBN YXJjaCAxMCwgMjAxNCA4OjI3IFBNDQo+IFRvOiBBcHBhbmEgRHVyZ2EgS2VkYXJlc3dhcmEgUmFv OyB3Z0BncmFuZGVnZ2VyLmNvbTsgTWljaGFsIFNpbWVrOw0KPiBncmFudC5saWtlbHlAbGluYXJv Lm9yZzsgcm9iaCtkdEBrZXJuZWwub3JnDQo+IENjOiBsaW51eC1jYW5Admdlci5rZXJuZWwub3Jn OyBuZXRkZXZAdmdlci5rZXJuZWwub3JnOyBsaW51eC1hcm0tDQo+IGtlcm5lbEBsaXN0cy5pbmZy YWRlYWQub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZn ZXIua2VybmVsLm9yZzsgQXBwYW5hIER1cmdhIEtlZGFyZXN3YXJhIFJhbw0KPiBTdWJqZWN0OiBS ZTogW1BBVENIIHY1XSBjYW46IHhpbGlueCBDQU4gY29udHJvbGxlciBzdXBwb3J0Lg0KPg0KPiBP biAwMy8wNC8yMDE0IDAyOjIwIFBNLCBLZWRhcmVzd2FyYSByYW8gQXBwYW5hIHdyb3RlOg0KPiA+ IFRoaXMgcGF0Y2ggYWRkcyB4aWxpbnggQ0FOIGNvbnRyb2xsZXIgc3VwcG9ydC4NCj4gPiBUaGlz IGRyaXZlciBzdXBwb3J0cyBib3RoIFpZTlEgQ0FOUFMgYW5kIFNvZnQgSVAgQVhJIENBTiBjb250 cm9sbGVyLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogS2VkYXJlc3dhcmEgcmFvIEFwcGFuYSA8 YXBwYW5hZEB4aWxpbnguY29tPg0KPiA+IC0tLQ0KPiA+IFRoaXMgcGF0Y2ggaXMgcmViYXNlZCBv biB0aGUgMy4xNCByYzUga2VybmVsLg0KPiA+IENoYW5nZXMgZm9yIHY1Og0KPiA+IC0gVXBkYXRl ZCB0aGUgZHJpdmVyIHdpdGggdGhlIHJldmlldyBjb21tZW50cy4NCj4gPiAtIFJlbW92ZSB0aGUg Y2hlY2sgZm9yIHRoZSB0eCBmaWZvIGZ1bGwgaW50ZXJydXB0IGNvbmRpdGlvbg0KPiA+ICAgZm9y bSBUeCBpbnRlcnJ1cHQgcm91dGluZSBhcyB3ZSBhcmUgY2hlY2tpbmcgaXQgaW4gdGhlIF94bWl0 DQo+ID4gICByb3V0aW5lLg0KPiA+IC0gQ2xlYXJpbmcgdGhlIHR4b2sgaW50ZXJydXB0IGluIHRo ZSB0eCBpbnRlcnJ1cHQgcm91dGluZSBmb3INCj4gPiAgIGV2ZXJ5IFR4IGNhbiBmcmFtZS4NCj4g PiBDaGFuZ2VzIGZvciB2NDoNCj4gPiAtIEFkZGVkIGNoZWNrIGZvciB0aGUgdHggZmlmbyBmdWxs IGludGVycnVwdCBjb25kaXRpb24gaW4NCj4gPiAgIFR4IGludGVycnVwdCByb3V0aW5lLg0KPiA+ IC0gQWRkZWQgYmUgaW9oZWxwZXIgZnVuY3Rpb25zLg0KPiA+IC0gTW92ZWQgdGhlIGNsb2NrIGVu YWJsZS9kaXNhYmxlIHRvIHByb2JlL3JlbW92ZSBiZWNhdXNlIG9mDQo+ID4gICBBZGRlZCBiaWcg ZW5kaWFuIHN1cHBvcnQgZm9yIEFYSSBDQU4gY29udHJvbGxlciBjYXNlKHJlYWRpbmcNCj4gPiAg IGEgcmVnaXN0ZXIgZHVyaW5nIHByb2JlIGZvciB0aGF0IHdlIG5lZWQgdG8gZW5hYmxlIGNsb2Nr KS4NCj4gPiBDaGFuZ2VzIGZvciB2MzoNCj4gPiAtIFVwZGF0ZWQgdGhlIGRyaXZlciB3aXRoIHRo ZSByZXZpZXcgY29tbWVudHMuDQo+ID4gLSBNb2RpZmllZCB0aGUgdHJhbm1pdCBsb2dpYyBhcyBw ZXIgTWFyYyBzdWdnZXN0aW9uLg0KPiA+IC0gRW5hYmxpbmcgdGhlIGNsb2NrIHdoZW4gdGhlIGlu dGVyZmFjZSBpcyB1cCB0byByZWR1Y2UgdGhlDQo+ID4gICBQb3dlciBjb25zdW1wdGlvbi4NCj4g PiBDaGFuZ2VzIGZvciB2MjoNCj4gPiAtIFVwZGF0ZWQgd2l0aCB0aGUgcmV2aWV3IGNvbW1lbnRz Lg0KPiA+IC0gUmVtb3ZlZCB0aGUgdW5uZWNlc3NhcnkgZGVidWcgcHJpbnRzLg0KPiA+IC0gaW5j bHVkZSB0eCxyeCBmaWZvIGRlcHRocyBpbiBaWU5RIENBTlBTIGNhc2UgYWxzby4NCj4gPiAtLS0N Cj4gPiAgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi94aWxpbnhfY2FuLnR4dCAgICAg fCAgIDQ1ICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL0tjb25maWcgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICA3ICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9uZXQvY2FuL3hpbGlueF9j YW4uYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMTk1ICsrKysrKysrKysrKysrKysrKysrDQo+ ID4gIDQgZmlsZXMgY2hhbmdlZCwgMTI0OCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKSAg Y3JlYXRlIG1vZGUNCj4gPiAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L25ldC9jYW4veGlsaW54X2Nhbi50eHQNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv bmV0L2Nhbi94aWxpbnhfY2FuLmMNCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9u L2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi94aWxpbnhfY2FuLnR4dA0KPiA+IGIvRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9jYW4veGlsaW54X2Nhbi50eHQNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjBlNTcxMDMNCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25l dC9jYW4veGlsaW54X2Nhbi50eHQNCj4gPiBAQCAtMCwwICsxLDQ1IEBADQo+ID4gK1hpbGlueCBB eGkgQ0FOL1p5bnEgQ0FOUFMgY29udHJvbGxlciBEZXZpY2UgVHJlZSBCaW5kaW5ncw0KPiA+ICst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N Cj4gPiArDQo+ID4gK1JlcXVpcmVkIHByb3BlcnRpZXM6DQo+ID4gKy0gY29tcGF0aWJsZSAgICAg ICAgICAgICAgIDogU2hvdWxkIGJlICJ4bG54LHp5bnEtY2FuLTEuMDAuYSIgZm9yIFp5bnENCj4g Q0FODQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzIGFuZCAieGxueCxheGkt Y2FuLTEuMDAuYSIgZm9yIEF4aSBDQU4NCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29udHJv bGxlcnMuDQo+ID4gKy0gcmVnICAgICAgICAgICAgICAgICAgICAgIDogUGh5c2ljYWwgYmFzZSBh ZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBBeGkgQ0FOL1p5bnENCj4gPiArICAgICAgICAgICAgICAg ICAgICAgQ0FOUFMgcmVnaXN0ZXJzIG1hcC4NCj4gPiArLSBpbnRlcnJ1cHRzICAgICAgICAgICAg ICAgOiBQcm9wZXJ0eSB3aXRoIGEgdmFsdWUgZGVzY3JpYmluZyB0aGUgaW50ZXJydXB0DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIG51bWJlci4NCj4gPiArLSBpbnRlcnJ1cHQtcGFyZW50IDog TXVzdCBiZSBjb3JlIGludGVycnVwdCBjb250cm9sbGVyDQo+ID4gKy0gY2xvY2stbmFtZXMgICAg ICAgICAgICAgIDogTGlzdCBvZiBpbnB1dCBjbG9jayBuYW1lcyAtICJyZWZfY2xrIiwNCj4gImFw ZXJfY2xrIg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAoU2VlIGNsb2NrIGJpbmRpbmdzIGZv ciBkZXRhaWxzLiBUd28gY2xvY2tzIGFyZQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgcmVx dWlyZWQgZm9yIFp5bnEgQ0FOLiBGb3IgQXhpIENBTg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgY2FzZSBpdCBpcyBvbmUocmVmX2NsaykpLg0KPiA+ICstIGNsb2NrcyAgICAgICAgICAgOiBD bG9jayBwaGFuZGxlcyAoc2VlIGNsb2NrIGJpbmRpbmdzIGZvciBkZXRhaWxzKS4NCj4gPiArLSB0 eC1maWZvLWRlcHRoICAgICAgICAgICAgOiBDYW4gVHggZmlmbyBkZXB0aC4NCj4gPiArLSByeC1m aWZvLWRlcHRoICAgICAgICAgICAgOiBDYW4gUnggZmlmbyBkZXB0aC4NCj4gPiArDQo+ID4gKw0K PiA+ICtFeGFtcGxlOg0KPiA+ICsNCj4gPiArRm9yIFp5bnEgQ0FOUFMgRHRzIGZpbGU6DQo+ID4g KyAgIHp5bnFfY2FuXzA6IHp5bnEtY2FuQGUwMDA4MDAwIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgIGNvbXBhdGlibGUgPSAieGxueCx6eW5xLWNhbi0xLjAwLmEiOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgY2xvY2tzID0gPCZjbGtjIDE5PiwgPCZjbGtjIDM2PjsNCj4gPiArICAgICAgICAg ICAgICAgICAgIGNsb2NrLW5hbWVzID0gInJlZl9jbGsiLCAiYXBlcl9jbGsiOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgcmVnID0gPDB4ZTAwMDgwMDAgMHgxMDAwPjsNCj4gPiArICAgICAgICAg ICAgICAgICAgIGludGVycnVwdHMgPSA8MCAyOCA0PjsNCj4gPiArICAgICAgICAgICAgICAgICAg IGludGVycnVwdC1wYXJlbnQgPSA8JmludGM+Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgdHgt Zmlmby1kZXB0aCA9IDwweDQwPjsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJ4LWZpZm8tZGVw dGggPSA8MHg0MD47DQo+ID4gKyAgICAgICAgICAgfTsNCj4gPiArRm9yIEF4aSBDQU4gRHRzIGZp bGU6DQo+ID4gKyAgIGF4aV9jYW5fMDogYXhpLWNhbkA0MDAwMDAwMCB7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICBjb21wYXRpYmxlID0gInhsbngsYXhpLWNhbi0xLjAwLmEiOw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgY2xvY2tzID0gPCZjbGtjIDA+Ow0KPiA+ICsgICAgICAgICAgICAgICAg ICAgY2xvY2stbmFtZXMgPSAicmVmX2NsayIgOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgcmVn ID0gPDB4NDAwMDAwMDAgMHgxMDAwMD47DQo+ID4gKyAgICAgICAgICAgICAgICAgICBpbnRlcnJ1 cHQtcGFyZW50ID0gPCZpbnRjPjsNCj4gPiArICAgICAgICAgICAgICAgICAgIGludGVycnVwdHMg PSA8MCA1OSAxPjsNCj4gPiArICAgICAgICAgICAgICAgICAgIHR4LWZpZm8tZGVwdGggPSA8MHg0 MD47DQo+ID4gKyAgICAgICAgICAgICAgICAgICByeC1maWZvLWRlcHRoID0gPDB4NDA+Ow0KPiA+ ICsgICAgICAgICAgIH07DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmln IGIvZHJpdmVycy9uZXQvY2FuL0tjb25maWcgaW5kZXgNCj4gPiA5ZTdkOTVkLi5iMTgwMjM5IDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVy cy9uZXQvY2FuL0tjb25maWcNCj4gPiBAQCAtMTI1LDYgKzEyNSwxMyBAQCBjb25maWcgQ0FOX0dS Q0FODQo+ID4gICAgICAgZW5kaWFuIHN5bnRoZXNlcyBvZiB0aGUgY29yZXMgd291bGQgbmVlZCBz b21lIG1vZGlmaWNhdGlvbnMgb24NCj4gPiAgICAgICB0aGUgaGFyZHdhcmUgbGV2ZWwgdG8gd29y ay4NCj4gPg0KPiA+ICtjb25maWcgQ0FOX1hJTElOWENBTg0KPiA+ICsgICB0cmlzdGF0ZSAiWGls aW54IENBTiINCj4gPiArICAgZGVwZW5kcyBvbiBBUkNIX1pZTlEgfHwgTUlDUk9CTEFaRQ0KPg0K PiBJcyBaeW5xIG11bHRpYXJjaCBhbHJlYWR5Pw0KRGlzY3Vzc2lvbnMgYXJlIGdvaW5nIG9uIHRo aXMNClNvIHRoZSBmaW5hbCB0aGluZyB0aGF0IEZlbmdndWFuZyAoIGZlbmdndWFuZy53dUBpbnRl bC5jb20pDQpQcm9wb3NlZCBpcw0KICAgICAgICBjb25maWcgQ0FOX1hJTElOWA0KICAgICAgICB0 cmlzdGF0ZSAiWGlsaW54IENBTiINCiAgICAgICAgZGVwZW5kcyBvbiBBUkNIX1pZTlEgfHwgTUlD Uk9CTEFaRSB8fCBDT01QSUxFX1RFU1QNCiAgICAgICAgZGVwZW5kcyBvbiBDT01NT05fQ0xLICYm IEhBU19NTUlPICAjIHdoYXRldmVyIHlvdSBuZWVkIGZvciBvdGhlciBhcmNoaXRlY3R1cmVzDQoN Cg0KQXJlIHlvdSBPayBmb3IgdGhpcz8NCg0KPg0KPiA+ICsgICAtLS1oZWxwLS0tDQo+ID4gKyAg ICAgWGlsaW54IENBTiBkcml2ZXIuIFRoaXMgZHJpdmVyIHN1cHBvcnRzIGJvdGggc29mdCBBWEkg Q0FOIElQIGFuZA0KPiA+ICsgICAgIFp5bnEgQ0FOUFMgSVAuDQo+ID4gKw0KPiA+ICBzb3VyY2Ug ImRyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnIg0KPiA+DQo+ID4gIHNvdXJjZSAiZHJpdmVy cy9uZXQvY2FuL3NqYTEwMDAvS2NvbmZpZyINCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv Y2FuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlIGluZGV4DQo+ID4gYzc0NDAz OS4uMGI4ZTExZSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUNCj4g PiArKysgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUNCj4gPiBAQCAtMjUsNSArMjUsNiBAQCBv YmotJChDT05GSUdfQ0FOX0pBTlpfSUNBTjMpICAgICAgKz0gamFuei0NCj4gaWNhbjMubw0KPiA+ ICBvYmotJChDT05GSUdfQ0FOX0ZMRVhDQU4pICArPSBmbGV4Y2FuLm8NCj4gPiAgb2JqLSQoQ09O RklHX1BDSF9DQU4pICAgICAgICAgICAgICArPSBwY2hfY2FuLm8NCj4gPiAgb2JqLSQoQ09ORklH X0NBTl9HUkNBTikgICAgICAgICAgICArPSBncmNhbi5vDQo+ID4gK29iai0kKENPTkZJR19DQU5f WElMSU5YQ0FOKSAgICAgICAgKz0geGlsaW54X2Nhbi5vDQo+ID4NCj4gPiAgY2NmbGFncy0kKENP TkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRyBkaWZmIC0tZ2l0DQo+ID4gYS9kcml2 ZXJzL25ldC9jYW4veGlsaW54X2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3hpbGlueF9jYW4uYyBu ZXcgZmlsZQ0KPiA+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLmE4NTUyYTINCj4gPiAtLS0g L2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9uZXQvY2FuL3hpbGlueF9jYW4uYw0KPiA+IEBA IC0wLDAgKzEsMTE5NSBAQA0KPiA+ICsvKiBYaWxpbnggQ0FOIGRldmljZSBkcml2ZXINCj4gPiAr ICoNCj4gPiArICogQ29weXJpZ2h0IChDKSAyMDEyIC0gMjAxNCBYaWxpbngsIEluYy4NCj4gPiAr ICogQ29weXJpZ2h0IChDKSAyMDA5IFBldGFMb2dpeC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4g PiArICoNCj4gPiArICogRGVzY3JpcHRpb246DQo+ID4gKyAqIFRoaXMgZHJpdmVyIGlzIGRldmVs b3BlZCBmb3IgQXhpIENBTiBJUCBhbmQgZm9yIFp5bnEgQ0FOUFMgQ29udHJvbGxlci4NCj4gPiAr ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vcg0KPiA+ICttb2RpZnkNCj4gPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQNCj4gPiArYnkNCj4gPiArICog dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGlj ZW5zZSwgb3INCj4gPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4g PiArICoNCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+ID4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQo+ID4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCj4gPiAr ICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCj4gPiArICoN Cj4gPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UNCj4gPiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBu b3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQo+ID4gKyAqLw0KPiA+ICsN Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvZXJybm8u aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L3NrYnVmZi5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPg0KPiA+ICsj aW5jbHVkZSA8bGludXgvY2FuL2Vycm9yLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jYW4vbGVk Lmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIERSSVZFUl9OQU1FICAgICAgICAiWElMSU5YX0NBTiIN Cj4gPiArDQo+ID4gKy8qIENBTiByZWdpc3RlcnMgc2V0ICovDQo+ID4gK2VudW0geGNhbl9yZWcg ew0KPiA+ICsgICBYQ0FOX1NSUl9PRkZTRVQgICAgICAgICA9IDB4MDAsIC8qIFNvZnR3YXJlIHJl c2V0ICovDQo+ID4gKyAgIFhDQU5fTVNSX09GRlNFVCAgICAgICAgID0gMHgwNCwgLyogTW9kZSBz ZWxlY3QgKi8NCj4gPiArICAgWENBTl9CUlBSX09GRlNFVCAgICAgICAgPSAweDA4LCAvKiBCYXVk IHJhdGUgcHJlc2NhbGVyICovDQo+ID4gKyAgIFhDQU5fQlRSX09GRlNFVCAgICAgICAgID0gMHgw QywgLyogQml0IHRpbWluZyAqLw0KPiA+ICsgICBYQ0FOX0VDUl9PRkZTRVQgICAgICAgICA9IDB4 MTAsIC8qIEVycm9yIGNvdW50ZXIgKi8NCj4gPiArICAgWENBTl9FU1JfT0ZGU0VUICAgICAgICAg PSAweDE0LCAvKiBFcnJvciBzdGF0dXMgKi8NCj4gPiArICAgWENBTl9TUl9PRkZTRVQgICAgICAg ICAgPSAweDE4LCAvKiBTdGF0dXMgKi8NCj4gPiArICAgWENBTl9JU1JfT0ZGU0VUICAgICAgICAg PSAweDFDLCAvKiBJbnRlcnJ1cHQgc3RhdHVzICovDQo+ID4gKyAgIFhDQU5fSUVSX09GRlNFVCAg ICAgICAgID0gMHgyMCwgLyogSW50ZXJydXB0IGVuYWJsZSAqLw0KPiA+ICsgICBYQ0FOX0lDUl9P RkZTRVQgICAgICAgICA9IDB4MjQsIC8qIEludGVycnVwdCBjbGVhciAqLw0KPiA+ICsgICBYQ0FO X1RYRklGT19JRF9PRkZTRVQgICA9IDB4MzAsLyogVFggRklGTyBJRCAqLw0KPiA+ICsgICBYQ0FO X1RYRklGT19ETENfT0ZGU0VUICA9IDB4MzQsIC8qIFRYIEZJRk8gRExDICovDQo+ID4gKyAgIFhD QU5fVFhGSUZPX0RXMV9PRkZTRVQgID0gMHgzOCwgLyogVFggRklGTyBEYXRhIFdvcmQgMSAqLw0K PiA+ICsgICBYQ0FOX1RYRklGT19EVzJfT0ZGU0VUICA9IDB4M0MsIC8qIFRYIEZJRk8gRGF0YSBX b3JkIDIgKi8NCj4gPiArICAgWENBTl9SWEZJRk9fSURfT0ZGU0VUICAgPSAweDUwLCAvKiBSWCBG SUZPIElEICovDQo+ID4gKyAgIFhDQU5fUlhGSUZPX0RMQ19PRkZTRVQgID0gMHg1NCwgLyogUlgg RklGTyBETEMgKi8NCj4gPiArICAgWENBTl9SWEZJRk9fRFcxX09GRlNFVCAgPSAweDU4LCAvKiBS WCBGSUZPIERhdGEgV29yZCAxICovDQo+ID4gKyAgIFhDQU5fUlhGSUZPX0RXMl9PRkZTRVQgID0g MHg1QywgLyogUlggRklGTyBEYXRhIFdvcmQgMiAqLw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyog Q0FOIHJlZ2lzdGVyIGJpdCBtYXNrcyAtIFhDQU5fPFJFRz5fPEJJVD5fTUFTSyAqLw0KPiA+ICsj ZGVmaW5lIFhDQU5fU1JSX0NFTl9NQVNLICAgICAgICAgIDB4MDAwMDAwMDIgLyogQ0FOIGVuYWJs ZSAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fU1JSX1JFU0VUX01BU0sgICAgICAgICAgICAgICAgMHgw MDAwMDAwMSAvKiBTb2Z0IFJlc2V0IHRoZQ0KPiBDQU4gY29yZSAqLw0KPiA+ICsjZGVmaW5lIFhD QU5fTVNSX0xCQUNLX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiBMb29wIGJhY2sN Cj4gbW9kZSBzZWxlY3QgKi8NCj4gPiArI2RlZmluZSBYQ0FOX01TUl9TTEVFUF9NQVNLICAgICAg ICAgICAgICAgIDB4MDAwMDAwMDEgLyogU2xlZXAgbW9kZQ0KPiBzZWxlY3QgKi8NCj4gPiArI2Rl ZmluZSBYQ0FOX0JSUFJfQlJQX01BU0sgICAgICAgICAweDAwMDAwMEZGIC8qIEJhdWQgcmF0ZQ0K PiBwcmVzY2FsZXIgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0JUUl9TSldfTUFTSyAgICAgICAgICAw eDAwMDAwMTgwIC8qIFN5bmNocm9ub3VzDQo+IGp1bXAgd2lkdGggKi8NCj4gPiArI2RlZmluZSBY Q0FOX0JUUl9UUzJfTUFTSyAgICAgICAgICAweDAwMDAwMDcwIC8qIFRpbWUgc2VnbWVudA0KPiAy ICovDQo+ID4gKyNkZWZpbmUgWENBTl9CVFJfVFMxX01BU0sgICAgICAgICAgMHgwMDAwMDAwRiAv KiBUaW1lIHNlZ21lbnQNCj4gMSAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fRUNSX1JFQ19NQVNLICAg ICAgICAgIDB4MDAwMEZGMDAgLyogUmVjZWl2ZSBlcnJvcg0KPiBjb3VudGVyICovDQo+ID4gKyNk ZWZpbmUgWENBTl9FQ1JfVEVDX01BU0sgICAgICAgICAgMHgwMDAwMDBGRiAvKiBUcmFuc21pdCBl cnJvcg0KPiBjb3VudGVyICovDQo+ID4gKyNkZWZpbmUgWENBTl9FU1JfQUNLRVJfTUFTSyAgICAg ICAgICAgICAgICAweDAwMDAwMDEwIC8qIEFDSyBlcnJvciAqLw0KPiA+ICsjZGVmaW5lIFhDQU5f RVNSX0JFUlJfTUFTSyAgICAgICAgIDB4MDAwMDAwMDggLyogQml0IGVycm9yICovDQo+ID4gKyNk ZWZpbmUgWENBTl9FU1JfU1RFUl9NQVNLICAgICAgICAgMHgwMDAwMDAwNCAvKiBTdHVmZiBlcnJv ciAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fRVNSX0ZNRVJfTUFTSyAgICAgICAgIDB4MDAwMDAwMDIg LyogRm9ybSBlcnJvciAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fRVNSX0NSQ0VSX01BU0sgICAgICAg ICAgICAgICAgMHgwMDAwMDAwMSAvKiBDUkMgZXJyb3IgKi8NCj4gPiArI2RlZmluZSBYQ0FOX1NS X1RYRkxMX01BU0sgICAgICAgICAweDAwMDAwNDAwIC8qIFRYIEZJRk8gaXMgZnVsbA0KPiAqLw0K PiA+ICsjZGVmaW5lIFhDQU5fU1JfRVNUQVRfTUFTSyAgICAgICAgIDB4MDAwMDAxODAgLyogRXJy b3Igc3RhdHVzICovDQo+ID4gKyNkZWZpbmUgWENBTl9TUl9FUlJXUk5fTUFTSyAgICAgICAgICAg ICAgICAweDAwMDAwMDQwIC8qIEVycm9yIHdhcm5pbmcNCj4gKi8NCj4gPiArI2RlZmluZSBYQ0FO X1NSX05PUk1BTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDggLyogTm9ybWFsIG1vZGUN Cj4gKi8NCj4gPiArI2RlZmluZSBYQ0FOX1NSX0xCQUNLX01BU0sgICAgICAgICAweDAwMDAwMDAy IC8qIExvb3AgYmFjaw0KPiBtb2RlICovDQo+ID4gKyNkZWZpbmUgWENBTl9TUl9DT05GSUdfTUFT SyAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIENvbmZpZ3VyYXRpb24NCj4gbW9kZSAqLw0K PiA+ICsjZGVmaW5lIFhDQU5fSVhSX1RYRkVNUF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwNDAw MCAvKiBUWCBGSUZPIEVtcHR5DQo+ICovDQo+ID4gKyNkZWZpbmUgWENBTl9JWFJfV0tVUF9NQVNL ICAgICAgICAgMHgwMDAwMDgwMCAvKiBXYWtlIHVwDQo+IGludGVycnVwdCAqLw0KPiA+ICsjZGVm aW5lIFhDQU5fSVhSX1NMUF9NQVNLICAgICAgICAgIDB4MDAwMDA0MDAgLyogU2xlZXANCj4gaW50 ZXJydXB0ICovDQo+ID4gKyNkZWZpbmUgWENBTl9JWFJfQlNPRkZfTUFTSyAgICAgICAgICAgICAg ICAweDAwMDAwMjAwIC8qIEJ1cyBvZmYNCj4gaW50ZXJydXB0ICovDQo+ID4gKyNkZWZpbmUgWENB Tl9JWFJfRVJST1JfTUFTSyAgICAgICAgICAgICAgICAweDAwMDAwMTAwIC8qIEVycm9yIGludGVy cnVwdA0KPiAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fSVhSX1JYTkVNUF9NQVNLICAgICAgICAgICAg ICAgMHgwMDAwMDA4MCAvKiBSWCBGSUZPDQo+IE5vdEVtcHR5IGludHIgKi8NCj4gPiArI2RlZmlu ZSBYQ0FOX0lYUl9SWE9GTFdfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwNDAgLyogUlggRklG Tw0KPiBPdmVyZmxvdyBpbnRyICovDQo+ID4gKyNkZWZpbmUgWENBTl9JWFJfUlhPS19NQVNLICAg ICAgICAgMHgwMDAwMDAxMCAvKiBNZXNzYWdlDQo+IHJlY2VpdmVkIGludHIgKi8NCj4gPiArI2Rl ZmluZSBYQ0FOX0lYUl9UWEZMTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogVHgg RklGTyBGdWxsDQo+IGludHIgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0lYUl9UWE9LX01BU0sgICAg ICAgICAweDAwMDAwMDAyIC8qIFRYIHN1Y2Nlc3NmdWwNCj4gaW50ciAqLw0KPiA+ICsjZGVmaW5l IFhDQU5fSVhSX0FSQkxTVF9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBBcmJpdHJh dGlvbg0KPiBsb3N0IGludHIgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0lEUl9JRDFfTUFTSyAgICAg ICAgICAweEZGRTAwMDAwIC8qIFN0YW5kYXJkIG1zZw0KPiBpZGVudGlmaWVyICovDQo+ID4gKyNk ZWZpbmUgWENBTl9JRFJfU1JSX01BU0sgICAgICAgICAgMHgwMDEwMDAwMCAvKiBTdWJzdGl0dXRl DQo+IHJlbW90ZSBUWHJlcSAqLw0KPiA+ICsjZGVmaW5lIFhDQU5fSURSX0lERV9NQVNLICAgICAg ICAgIDB4MDAwODAwMDAgLyogSWRlbnRpZmllcg0KPiBleHRlbnNpb24gKi8NCj4gPiArI2RlZmlu ZSBYQ0FOX0lEUl9JRDJfTUFTSyAgICAgICAgICAweDAwMDdGRkZFIC8qIEV4dGVuZGVkDQo+IG1l c3NhZ2UgaWRlbnQgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0lEUl9SVFJfTUFTSyAgICAgICAgICAw eDAwMDAwMDAxIC8qIFJlbW90ZSBUWA0KPiByZXF1ZXN0ICovDQo+ID4gKyNkZWZpbmUgWENBTl9E TENSX0RMQ19NQVNLICAgICAgICAgMHhGMDAwMDAwMCAvKiBEYXRhIGxlbmd0aA0KPiBjb2RlICov DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFhDQU5fSU5UUl9BTEwgICAgICAgICAgICAgIChYQ0FOX0lY Ul9UWE9LX01BU0sgfA0KPiBYQ0FOX0lYUl9CU09GRl9NQVNLIHxcDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBYQ0FOX0lYUl9XS1VQX01BU0sgfA0KPiBYQ0FOX0lYUl9TTFBfTUFT SyB8IFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQU5fSVhSX1JYTkVNUF9N QVNLIHwNCj4gWENBTl9JWFJfRVJST1JfTUFTSyB8IFwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFhDQU5fSVhSX0FSQkxTVF9NQVNLIHwNCj4gWENBTl9JWFJfUlhPS19NQVNLKQ0K PiA+ICsNCj4gPiArLyogQ0FOIHJlZ2lzdGVyIGJpdCBzaGlmdCAtIFhDQU5fPFJFRz5fPEJJVD5f U0hJRlQgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0JUUl9TSldfU0hJRlQgICAgICAgICA3ICAvKiBT eW5jaHJvbm91cyBqdW1wIHdpZHRoDQo+ICovDQo+ID4gKyNkZWZpbmUgWENBTl9CVFJfVFMyX1NI SUZUICAgICAgICAgNCAgLyogVGltZSBzZWdtZW50IDIgKi8NCj4gPiArI2RlZmluZSBYQ0FOX0lE Ul9JRDFfU0hJRlQgICAgICAgICAyMSAvKiBTdGFuZGFyZCBNZXNzZw0KPiBJZGVudGlmaWVyICov DQo+ID4gKyNkZWZpbmUgWENBTl9JRFJfSUQyX1NISUZUICAgICAgICAgMSAgLyogRXh0ZW5kZWQg TWVzc2FnZQ0KPiBJZGVudGlmaWVyICovDQo+ID4gKyNkZWZpbmUgWENBTl9ETENSX0RMQ19TSElG VCAgICAgICAgICAgICAgICAyOCAvKiBEYXRhIGxlbmd0aCBjb2RlICovDQo+ID4gKyNkZWZpbmUg WENBTl9FU1JfUkVDX1NISUZUICAgICAgICAgOCAgLyogUnggRXJyb3IgQ291bnQgKi8NCj4gPiAr DQo+ID4gKy8qIENBTiBmcmFtZSBsZW5ndGggY29uc3RhbnRzICovDQo+ID4gKyNkZWZpbmUgWENB Tl9FQ0hPX1NLQl9NQVggICAgICAgICAgNjQNCj4gPiArI2RlZmluZSBYQ0FOX0ZSQU1FX01BWF9E QVRBX0xFTiAgICAgICAgICAgIDgNCj4gPiArI2RlZmluZSBYQ0FOX1RJTUVPVVQgICAgICAgICAg ICAgICAgICAgICAgICgxICogSFopDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IHhj YW5fcHJpdiAtIFRoaXMgZGVmaW5pdGlvbiBkZWZpbmUgQ0FOIGRyaXZlciBpbnN0YW5jZQ0KPiA+ ICsgKiBAY2FuOiAgICAgICAgICAgICAgICAgICBDQU4gcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4N Cj4gPiArICogQHR4X2hlYWQ6ICAgICAgICAgICAgICAgICAgICAgICBUeCBDQU4gcGFja2V0cyBy ZWFkeSB0byBzZW5kIG9uIHRoZQ0KPiBxdWV1ZQ0KPiA+ICsgKiBAdHhfdGFpbDogICAgICAgICAg ICAgICAgICAgICAgIFR4IENBTiBwYWNrZXRzIHN1Y2Nlc3NmdWxseSBzZW5kZWQgb24gdGhlDQo+ IHF1ZXVlDQo+ID4gKyAqIEB0eF9tYXg6ICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSBu dW1iZXIgcGFja2V0cyB0aGUgZHJpdmVyIGNhbg0KPiBzZW5kDQo+ID4gKyAqIEBuYXBpOiAgICAg ICAgICAgICAgICAgIE5BUEkgc3RydWN0dXJlDQo+ID4gKyAqIEByZWFkX3JlZzogICAgICAgICAg ICAgICAgICAgICAgRm9yIHJlYWRpbmcgZGF0YSBmcm9tIENBTiByZWdpc3RlcnMNCj4gPiArICog QHdyaXRlX3JlZzogICAgICAgICAgICAgICAgICAgICBGb3Igd3JpdGluZyBkYXRhIHRvIENBTiBy ZWdpc3RlcnMNCj4gPiArICogQGRldjogICAgICAgICAgICAgICAgICAgTmV0d29yayBkZXZpY2Ug ZGF0YSBzdHJ1Y3R1cmUNCj4gPiArICogQHJlZ19iYXNlOiAgICAgICAgICAgICAgICAgICAgICBJ b3JlbWFwcGVkIGFkZHJlc3MgdG8gcmVnaXN0ZXJzDQo+ID4gKyAqIEBpcnFfZmxhZ3M6ICAgICAg ICAgICAgICAgICAgICAgRm9yIHJlcXVlc3RfaXJxKCkNCj4gPiArICogQGFwZXJjbGs6ICAgICAg ICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBjbGsNCj4gPiArICogQGRldmNsazog ICAgICAgICAgICAgICAgICAgICAgICBQb2ludGVyIHRvIHN0cnVjdCBjbGsNCj4gPiArICovDQo+ ID4gK3N0cnVjdCB4Y2FuX3ByaXYgew0KPiA+ICsgICBzdHJ1Y3QgY2FuX3ByaXYgY2FuOw0KPiA+ ICsgICB1bnNpZ25lZCBpbnQgdHhfaGVhZDsNCj4gPiArICAgdW5zaWduZWQgaW50IHR4X3RhaWw7 DQo+ID4gKyAgIHUzMiB0eF9tYXg7DQo+IFBsZWFzZSBtYWtlIGl0IGFuIHVuc2lnbmVkIGludCwg dG9vLg0KPg0KT2sNCg0KDQo+ID4gKyAgIHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOw0KPiA+ICsg ICB1MzIgKCpyZWFkX3JlZykoY29uc3Qgc3RydWN0IHhjYW5fcHJpdiAqcHJpdiwgZW51bSB4Y2Fu X3JlZyByZWcpOw0KPiA+ICsgICB2b2lkICgqd3JpdGVfcmVnKShjb25zdCBzdHJ1Y3QgeGNhbl9w cml2ICpwcml2LCBlbnVtIHhjYW5fcmVnIHJlZywNCj4gPiArICAgICAgICAgICAgICAgICAgIHUz MiB2YWwpOw0KPiA+ICsgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2Ow0KPiA+ICsgICB2b2lkIF9f aW9tZW0gKnJlZ19iYXNlOw0KPiA+ICsgICB1bnNpZ25lZCBsb25nIGlycV9mbGFnczsNCj4gPiAr ICAgc3RydWN0IGNsayAqYXBlcmNsazsNCj4gPiArICAgc3RydWN0IGNsayAqZGV2Y2xrOw0KPg0K PiBQbGVhc2UgcmVuYW1lIHRoZSBjbG9jayB2YXJpYWJsZXMgdG8gbWF0Y2ggdGhlIG5hbWVzIGlu IHRoZSBEVC4NCj4NClRoZSBjbG9jayBuYW1lcyBhcmUgZGlmZmVyZW50IGZvciBheGkgQ0FOIGFu ZCBDQU5QUyBjYXNlLg0KU28gd2lsbCBtYWtlIHRoZW0gYXMgYnVzY2xrIGFuZCBkZXZjbGsNCkFy ZSB5b3Ugb2sgd2l0aCB0aGlzPw0KDQoNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIENBTiBCaXR0 aW1pbmcgY29uc3RhbnRzIGFzIHBlciBYaWxpbnggQ0FOIHNwZWNzICovIHN0YXRpYyBjb25zdA0K PiA+ICtzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCB4Y2FuX2JpdHRpbWluZ19jb25zdCA9IHsN Cj4gPiArICAgLm5hbWUgPSBEUklWRVJfTkFNRSwNCj4gPiArICAgLnRzZWcxX21pbiA9IDEsDQo+ ID4gKyAgIC50c2VnMV9tYXggPSAxNiwNCj4gPiArICAgLnRzZWcyX21pbiA9IDEsDQo+ID4gKyAg IC50c2VnMl9tYXggPSA4LA0KPiA+ICsgICAuc2p3X21heCA9IDQsDQo+ID4gKyAgIC5icnBfbWlu ID0gMSwNCj4gPiArICAgLmJycF9tYXggPSAyNTYsDQo+ID4gKyAgIC5icnBfaW5jID0gMSwNCj4g PiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y2FuX3dyaXRlX3JlZ19sZSAtIFdyaXRl IGEgdmFsdWUgdG8gdGhlIGRldmljZSByZWdpc3RlciBsaXR0bGUgZW5kaWFuDQo+ID4gKyAqIEBw cml2OiAgRHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUNCj4gPiArICogQHJlZzogICBSZWdp c3RlciBvZmZzZXQNCj4gPiArICogQHZhbDogICBWYWx1ZSB0byB3cml0ZSBhdCB0aGUgUmVnaXN0 ZXIgb2Zmc2V0DQo+ID4gKyAqDQo+ID4gKyAqIFdyaXRlIGRhdGEgdG8gdGhlIHBhcmljdWxhciBD QU4gcmVnaXN0ZXIgICovIHN0YXRpYyB2b2lkDQo+ID4gK3hjYW5fd3JpdGVfcmVnX2xlKGNvbnN0 IHN0cnVjdCB4Y2FuX3ByaXYgKnByaXYsIGVudW0geGNhbl9yZWcgcmVnLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsgICBpb3dyaXRlMzIodmFsLCBwcml2 LT5yZWdfYmFzZSArIHJlZyk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y2FuX3JlYWRf cmVnX2xlIC0gUmVhZCBhIHZhbHVlIGZyb20gdGhlIGRldmljZSByZWdpc3RlciBsaXR0bGUgZW5k aWFuDQo+ID4gKyAqIEBwcml2OiAgRHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUNCj4gPiAr ICogQHJlZzogICBSZWdpc3RlciBvZmZzZXQNCj4gPiArICoNCj4gPiArICogUmVhZCBkYXRhIGZy b20gdGhlIHBhcnRpY3VsYXIgQ0FOIHJlZ2lzdGVyDQo+ID4gKyAqIFJldHVybjogdmFsdWUgcmVh ZCBmcm9tIHRoZSBDQU4gcmVnaXN0ZXIgICovIHN0YXRpYyB1MzINCj4gPiAreGNhbl9yZWFkX3Jl Z19sZShjb25zdCBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2LCBlbnVtIHhjYW5fcmVnIHJlZykgew0K PiA+ICsgICByZXR1cm4gaW9yZWFkMzIocHJpdi0+cmVnX2Jhc2UgKyByZWcpOyB9DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogeGNhbl93cml0ZV9yZWdfYmUgLSBXcml0ZSBhIHZhbHVlIHRvIHRo ZSBkZXZpY2UgcmVnaXN0ZXIgYmlnIGVuZGlhbg0KPiA+ICsgKiBAcHJpdjogIERyaXZlciBwcml2 YXRlIGRhdGEgc3RydWN0dXJlDQo+ID4gKyAqIEByZWc6ICAgUmVnaXN0ZXIgb2Zmc2V0DQo+ID4g KyAqIEB2YWw6ICAgVmFsdWUgdG8gd3JpdGUgYXQgdGhlIFJlZ2lzdGVyIG9mZnNldA0KPiA+ICsg Kg0KPiA+ICsgKiBXcml0ZSBkYXRhIHRvIHRoZSBwYXJpY3VsYXIgQ0FOIHJlZ2lzdGVyICAqLyBz dGF0aWMgdm9pZA0KPiA+ICt4Y2FuX3dyaXRlX3JlZ19iZShjb25zdCBzdHJ1Y3QgeGNhbl9wcml2 ICpwcml2LCBlbnVtIHhjYW5fcmVnIHJlZywNCj4gPiArICAgICAgICAgICAgICAgICAgIHUzMiB2 YWwpDQo+ID4gK3sNCj4gPiArICAgaW93cml0ZTMyYmUodmFsLCBwcml2LT5yZWdfYmFzZSArIHJl Zyk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y2FuX3JlYWRfcmVnX2JlIC0gUmVhZCBh IHZhbHVlIGZyb20gdGhlIGRldmljZSByZWdpc3RlciBiaWcgZW5kaWFuDQo+ID4gKyAqIEBwcml2 OiAgRHJpdmVyIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUNCj4gPiArICogQHJlZzogICBSZWdpc3Rl ciBvZmZzZXQNCj4gPiArICoNCj4gPiArICogUmVhZCBkYXRhIGZyb20gdGhlIHBhcnRpY3VsYXIg Q0FOIHJlZ2lzdGVyDQo+ID4gKyAqIFJldHVybjogdmFsdWUgcmVhZCBmcm9tIHRoZSBDQU4gcmVn aXN0ZXIgICovIHN0YXRpYyB1MzINCj4gPiAreGNhbl9yZWFkX3JlZ19iZShjb25zdCBzdHJ1Y3Qg eGNhbl9wcml2ICpwcml2LCBlbnVtIHhjYW5fcmVnIHJlZykgew0KPiA+ICsgICByZXR1cm4gaW9y ZWFkMzJiZShwcml2LT5yZWdfYmFzZSArIHJlZyk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg KiBzZXRfcmVzZXRfbW9kZSAtIFJlc2V0cyB0aGUgQ0FOIGRldmljZSBtb2RlDQo+ID4gKyAqIEBu ZGV2OiAgUG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBU aGlzIGlzIHRoZSBkcml2ZXIgcmVzZXQgbW9kZSByb3V0aW5lLlRoZSBkcml2ZXINCj4gPiArICog ZW50ZXJzIGludG8gY29uZmlndXJhdGlvbiBtb2RlLg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46 IDAgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZSBvbiBlcnJvciAgKi8gc3RhdGljIGludA0K PiA+ICtzZXRfcmVzZXRfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikgew0KPiA+ICsgICBz dHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7DQo+ID4gKyAgIHVuc2ln bmVkIGxvbmcgdGltZW91dDsNCj4gPiArDQo+ID4gKyAgIHByaXYtPmNhbi5zdGF0ZSA9IENBTl9T VEFURV9TVE9QUEVEOw0KPg0KPiBJIGRvbid0IHRoaW5rIGNoYW5nZWluZyB0aGUgc3RhdGUgbWFr ZXMgc2Vuc2UgaGVyZS4gWW91IGV2YWx1YXRlIHRoZQ0KPiBwcml2LT5jYW4uc3RhdGUgaW4geGNh bl9jaGlwX3N0YXJ0KCksIGJ1dCB5b3UgcmV0dXJuIGlmIHRoaXMgZnVuY3Rpb24NCj4gcmV0dXJu cyBhIGVycm9yLg0KPg0KT2sgV2lsbCByZW1vdmUgdGhpcyBsaW5lLg0KDQo+ID4gKw0KPiA+ICsg ICB0aW1lb3V0ID0gamlmZmllcyArIFhDQU5fVElNRU9VVDsNCj4gPiArICAgd2hpbGUgKCEocHJp di0+cmVhZF9yZWcocHJpdiwgWENBTl9TUl9PRkZTRVQpICYNCj4gWENBTl9TUl9DT05GSUdfTUFT SykpIHsNCj4gPiArICAgICAgICAgICBpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgbmV0ZGV2X3dhcm4obmRldiwgInRpbWVkb3V0IHdh aXRpbmcgZm9yIGNvbmZpZw0KPiBtb2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJl dHVybiAtRVRJTUVET1VUOw0KPiA+ICsgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICB1c2xl ZXBfcmFuZ2UoNTAwLCAxMDAwMCk7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIHJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNhbl9zZXRfYml0dGltaW5nIC0g Q0FOIHNldCBiaXQgdGltaW5nIHJvdXRpbmUNCj4gPiArICogQG5kZXY6ICBQb2ludGVyIHRvIG5l dF9kZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMgdGhlIGRyaXZlciBz ZXQgYml0dGltaW5nICByb3V0aW5lLg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBhbmQg ZmFpbHVyZSB2YWx1ZSBvbiBlcnJvciAgKi8gc3RhdGljIGludA0KPiA+ICt4Y2FuX3NldF9iaXR0 aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpIHsNCj4gPiArICAgc3RydWN0IHhjYW5fcHJp diAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICBzdHJ1Y3QgY2FuX2JpdHRpbWlu ZyAqYnQgPSAmcHJpdi0+Y2FuLmJpdHRpbWluZzsNCj4gPiArICAgdTMyIGJ0cjAsIGJ0cjE7DQo+ ID4gKyAgIHUzMiBpc19jb25maWdfbW9kZTsNCj4gPiArDQo+ID4gKyAgIC8qIENoZWNrIHdoZXRo ZXIgWGlsaW54IENBTiBpcyBpbiBjb25maWd1cmF0aW9uIG1vZGUuDQo+ID4gKyAgICAqIEl0IGNh bm5vdCBzZXQgYml0IHRpbWluZyBpZiBYaWxpbnggQ0FOIGlzIG5vdCBpbiBjb25maWd1cmF0aW9u IG1vZGUuDQo+ID4gKyAgICAqLw0KPiA+ICsgICBpc19jb25maWdfbW9kZSA9IHByaXYtPnJlYWRf cmVnKHByaXYsIFhDQU5fU1JfT0ZGU0VUKSAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFhDQU5fU1JfQ09ORklHX01BU0s7DQo+ID4gKyAgIGlmICghaXNfY29uZmlnX21vZGUpIHsN Cj4gPiArICAgICAgICAgICBuZXRkZXZfYWxlcnQobmRldiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICJDYW5ub3Qgc2V0IGJpdHRpbWluZyBjYW4gaXMgbm90IGluIGNvbmZpZyBtb2RlXG4iKTsN Cj4gPiArICAgICAgICAgICByZXR1cm4gLUVQRVJNOw0KPiA+ICsgICB9DQo+DQo+IFlvdSBvbmx5 IGNhbGwgc2V0X2JpdHRpbWluZyBmcm9tIHhjYW5fY2hpcF9zdGFydCgpIGFuZCBnbyBpbnRvIGNv bmZpZyBtb2RlDQo+IGJlZm9yZS4gU28gaWYgdGhpcyB0cmlnZ2VycyB0aGVyZSBtdXN0IGJlIGEg YnVnIGluIHRoZSBkcml2ZXIsIHlvdSBjb3VsZCBhZGQNCj4gIkJVRyEiIHRvIHRoZSBvdXRwdXQu DQpPaw0KDQo+DQo+ID4gKw0KPiA+ICsgICAvKiBTZXR0aW5nIEJhdWQgUmF0ZSBwcmVzY2FsYXIg dmFsdWUgaW4gQlJQUiBSZWdpc3RlciAqLw0KPiA+ICsgICBidHIwID0gKGJ0LT5icnAgLSAxKTsN Cj4gPiArDQo+ID4gKyAgIC8qIFNldHRpbmcgVGltZSBTZWdtZW50IDEgaW4gQlRSIFJlZ2lzdGVy ICovDQo+ID4gKyAgIGJ0cjEgPSAoYnQtPnByb3Bfc2VnICsgYnQtPnBoYXNlX3NlZzEgLSAxKTsN Cj4gPiArDQo+ID4gKyAgIC8qIFNldHRpbmcgVGltZSBTZWdtZW50IDIgaW4gQlRSIFJlZ2lzdGVy ICovDQo+ID4gKyAgIGJ0cjEgfD0gKGJ0LT5waGFzZV9zZWcyIC0gMSkgPDwgWENBTl9CVFJfVFMy X1NISUZUOw0KPiA+ICsNCj4gPiArICAgLyogU2V0dGluZyBTeW5jaHJvbm91cyBqdW1wIHdpZHRo IGluIEJUUiBSZWdpc3RlciAqLw0KPiA+ICsgICBidHIxIHw9IChidC0+c2p3IC0gMSkgPDwgWENB Tl9CVFJfU0pXX1NISUZUOw0KPiA+ICsNCj4gPiArICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhD QU5fQlJQUl9PRkZTRVQsIGJ0cjApOw0KPiA+ICsgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENB Tl9CVFJfT0ZGU0VULCBidHIxKTsNCj4gPiArDQo+ID4gKyAgIG5ldGRldl9kYmcobmRldiwgIkJS UFI9MHglMDh4LCBCVFI9MHglMDh4XG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgcHJpdi0+ cmVhZF9yZWcocHJpdiwgWENBTl9CUlBSX09GRlNFVCksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICBwcml2LT5yZWFkX3JlZyhwcml2LCBYQ0FOX0JUUl9PRkZTRVQpKTsNCj4gPiArDQo+ID4gKyAg IHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNhbl9jaGlwX3N0 YXJ0IC0gVGhpcyB0aGUgZHJpdmVycyBzdGFydCByb3V0aW5lDQo+ID4gKyAqIEBuZGV2OiAgUG9p bnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIHRo ZSBkcml2ZXJzIHN0YXJ0IHJvdXRpbmUuDQo+ID4gKyAqIEJhc2VkIG9uIHRoZSBTdGF0ZSBvZiB0 aGUgQ0FOIGRldmljZSBpdCBwdXRzDQo+ID4gKyAqIHRoZSBDQU4gZGV2aWNlIGludG8gYSBwcm9w ZXIgbW9kZS4NCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1 cmUgdmFsdWUgb24gZXJyb3IgICovIHN0YXRpYyBpbnQNCj4gPiAreGNhbl9jaGlwX3N0YXJ0KHN0 cnVjdCBuZXRfZGV2aWNlICpuZGV2KSB7DQo+ID4gKyAgIHN0cnVjdCB4Y2FuX3ByaXYgKnByaXYg PSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArICAgdTMyIGVycjsNCj4gPiArICAgdW5zaWduZWQg bG9uZyB0aW1lb3V0Ow0KPiA+ICsNCj4gPiArICAgLyogQ2hlY2sgaWYgaXQgaXMgaW4gcmVzZXQg bW9kZSAqLw0KPiA+ICsgICBlcnIgPSBzZXRfcmVzZXRfbW9kZShuZGV2KTsNCj4gPiArICAgaWYg KGVyciA8IDApDQo+ID4gKyAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKyAgIGVy ciA9IHhjYW5fc2V0X2JpdHRpbWluZyhuZGV2KTsNCj4gPiArICAgaWYgKGVyciA8IDApDQo+ID4g KyAgICAgICAgICAgcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKyAgIC8qIEVuYWJsZSBpbnRlcnJ1 cHRzICovDQo+ID4gKyAgIHByaXYtPndyaXRlX3JlZyhwcml2LCBYQ0FOX0lFUl9PRkZTRVQsIFhD QU5fSU5UUl9BTEwpOw0KPiA+ICsNCj4gPiArICAgLyogQ2hlY2sgd2hldGhlciBpdCBpcyBsb29w YmFjayBtb2RlIG9yIG5vcm1hbCBtb2RlICAqLw0KPiA+ICsgICBpZiAocHJpdi0+Y2FuLmN0cmxt b2RlICYgQ0FOX0NUUkxNT0RFX0xPT1BCQUNLKQ0KPiA+ICsgICAgICAgICAgIC8qIFB1dCBkZXZp Y2UgaW50byBsb29wYmFjayBtb2RlICovDQo+ID4gKyAgICAgICAgICAgcHJpdi0+d3JpdGVfcmVn KHByaXYsIFhDQU5fTVNSX09GRlNFVCwNCj4gWENBTl9NU1JfTEJBQ0tfTUFTSyk7DQo+ID4gKyAg IGVsc2UNCj4gPiArICAgICAgICAgICAvKiBUaGUgZGV2aWNlIGlzIGluIG5vcm1hbCBtb2RlICov DQo+ID4gKyAgICAgICAgICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fTVNSX09GRlNFVCwg MCk7DQo+ID4gKw0KPiA+ICsgICBpZiAocHJpdi0+Y2FuLnN0YXRlID09IENBTl9TVEFURV9TVE9Q UEVEKSB7DQo+DQo+IFlvdXIgZGV2aWNlIGlzIGluIHN0b3BwZWQgbW9kZSwgYWRkIHlvdSBnbyB0 aG91Z2ggc2V0X3Jlc2V0X21vZGUoKQ0KPiBhbHJlYWR5Lg0KDQpXaWxsIHJlbW92ZSB0aGlzIGlm IGNvbmRpdGlvbiBJIHB1dHRlZCB0aGlzIGNvbmRpdGlvbiBoZXJlIGJlY2F1c2UgaW4gc2V0X3Jl c2V0X21vZGUgd2UgYXJlIHB1dHRpbmcgdGhlDQpEZXZpY2Ugc3RhdGUgaW4gU3RvcHBlZCBzdGF0 ZS4NCg0KDQo+DQo+ID4gKyAgICAgICAgICAgLyogRW5hYmxlIFhpbGlueCBDQU4gKi8NCj4gPiAr ICAgICAgICAgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9TUlJfT0ZGU0VULA0KPiBYQ0FO X1NSUl9DRU5fTUFTSyk7DQo+ID4gKyAgICAgICAgICAgcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NU QVRFX0VSUk9SX0FDVElWRTsNCj4gPiArICAgICAgICAgICB0aW1lb3V0ID0gamlmZmllcyArIFhD QU5fVElNRU9VVDsNCj4gPiArICAgICAgICAgICBpZiAocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FO X0NUUkxNT0RFX0xPT1BCQUNLKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHBy aXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fU1JfT0ZGU0VUKQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICYgWENBTl9TUl9MQkFDS19NQVNLKSA9PSAwKSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQp KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0ZGV2X3dhcm4o bmRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0 aW1lZG91dCBmb3IgbG9vcGJhY2sNCj4gbW9kZVxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FVElNRURPVVQ7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNsZWVwX3Jh bmdlKDUwMCwgMTAwMDApOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAg ICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHByaXYtPnJlYWRf cmVnKHByaXYsIFhDQU5fU1JfT0ZGU0VUKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICYgWENBTl9TUl9OT1JNQUxfTUFTSykgPT0gMCkgew0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgew0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGRldl93YXJuKG5kZXYsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZWRvdXQg Zm9yIG5vcm1hbA0KPiBtb2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gLUVUSU1FRE9VVDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2xlZXBfcmFuZ2UoNTAwLCAx MDAwMCk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgfQ0KPiA+ ICsgICAgICAgICAgIG5ldGRldl9kYmcobmRldiwgInN0YXR1czojeCUwOHhcbiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fU1JfT0ZG U0VUKSk7DQo+ID4gKyAgIH0NCj4gPiArICAgcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VS Uk9SX0FDVElWRTsNCj4gPiArICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiB4Y2FuX2RvX3NldF9tb2RlIC0gVGhpcyBzZXRzIHRoZSBtb2RlIG9mIHRoZSBkcml2 ZXINCj4gPiArICogQG5kZXY6ICBQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlDQo+ID4g KyAqIEBtb2RlOiAgVGVsbHMgdGhlIG1vZGUgb2YgdGhlIGRyaXZlcg0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGNoZWNrIHRoZSBkcml2ZXJzIHN0YXRlIGFuZCBjYWxscyB0aGUNCj4gPiArICogdGhl IGNvcnJlc3BvbmRpbmcgbW9kZXMgdG8gc2V0Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAg b24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZSBvbiBlcnJvciAgKi8gc3RhdGljIGludA0KPiA+ ICt4Y2FuX2RvX3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBlbnVtIGNhbl9tb2Rl IG1vZGUpIHsNCj4gPiArICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgIHN3aXRjaCAobW9kZSkg ew0KPiA+ICsgICBjYXNlIENBTl9NT0RFX1NUQVJUOg0KPiA+ICsgICAgICAgICAgIHJldCA9IHhj YW5fY2hpcF9zdGFydChuZGV2KTsNCj4gPiArICAgICAgICAgICBpZiAocmV0IDwgMCkNCj4gPiAr ICAgICAgICAgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgInhjYW5fY2hpcF9zdGFydCBmYWls ZWQhXG4iKTsNCj4gPiArICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKG5kZXYpOw0KPg0KPiBE b24ndCB3YWtlIHRoZSBxdWV1ZSBpZiwgY2hpcF9zdGFydCgpIGZhaWxzLg0KPg0KT2sNCg0KPiA+ ICsgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgIHJl dCA9IC1FT1BOT1RTVVBQOw0KPiA+ICsgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICB9DQo+ID4g Kw0KPiA+ICsgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICog eGNhbl9zdGFydF94bWl0IC0gU3RhcnRzIHRoZSB0cmFuc21pc3Npb24NCj4gPiArICogQHNrYjog ICBza19idWZmIHBvaW50ZXIgdGhhdCBjb250YWlucyBkYXRhIHRvIGJlIFR4ZWQNCj4gPiArICog QG5kZXY6ICBQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAq IFRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIHVwcGVyIGxheWVycyB0byBpbml0aWF0ZQ0K PiA+ICt0cmFuc21pc3Npb24uIFRoaXMNCj4gPiArICogZnVuY3Rpb24gdXNlcyB0aGUgbmV4dCBh dmFpbGFibGUgZnJlZSB0eGJ1ZmYgYW5kIHBvcHVsYXRlcyB0aGVpcg0KPiA+ICtmaWVsZHMgdG8N Cj4gPiArICogc3RhcnQgdGhlIHRyYW5zbWlzc2lvbi4NCj4gPiArICoNCj4gPiArICogUmV0dXJu OiAwIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJyb3IgICovIHN0YXRpYyBpbnQN Cj4gPiAreGNhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2 aWNlICpuZGV2KSB7DQo+ID4gKyAgIHN0cnVjdCB4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJp dihuZGV2KTsNCj4gPiArICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJm5kZXYt PnN0YXRzOw0KPiA+ICsgICBzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1l ICopc2tiLT5kYXRhOw0KPiA+ICsgICB1MzIgaWQsIGRsYywgZGF0YVsyXSA9IHswLCAwfTsNCj4g PiArDQo+ID4gKyAgIGlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihuZGV2LCBza2IpKQ0KPiA+ ICsgICAgICAgICAgIHJldHVybiBORVRERVZfVFhfT0s7DQo+ID4gKw0KPiA+ICsgICAvKiBDaGVj ayBpZiB0aGUgVFggYnVmZmVyIGlzIGZ1bGwgKi8NCj4gPiArICAgaWYgKHVubGlrZWx5KHByaXYt PnJlYWRfcmVnKHByaXYsIFhDQU5fU1JfT0ZGU0VUKSAmDQo+ID4gKyAgICAgICAgICAgICAgICAg ICBYQ0FOX1NSX1RYRkxMX01BU0spKSB7DQo+ID4gKyAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1 ZShuZGV2KTsNCj4gPiArICAgICAgICAgICBuZXRkZXZfZXJyKG5kZXYsICJCVUchLCBUWCBGSUZP IGZ1bGwgd2hlbiBxdWV1ZQ0KPiBhd2FrZSFcbiIpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiBO RVRERVZfVFhfQlVTWTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgLyogV2F0Y2ggY2FyZWZ1 bGx5IG9uIHRoZSBiaXQgc2VxdWVuY2UgKi8NCj4gPiArICAgaWYgKGNmLT5jYW5faWQgJiBDQU5f RUZGX0ZMQUcpIHsNCj4gPiArICAgICAgICAgICAvKiBFeHRlbmRlZCBDQU4gSUQgZm9ybWF0ICov DQo+ID4gKyAgICAgICAgICAgaWQgPSAoKGNmLT5jYW5faWQgJiBDQU5fRUZGX01BU0spIDw8IFhD QU5fSURSX0lEMl9TSElGVCkNCj4gJg0KPiA+ICsgICAgICAgICAgICAgICAgICAgWENBTl9JRFJf SUQyX01BU0s7DQo+ID4gKyAgICAgICAgICAgaWQgfD0gKCgoY2YtPmNhbl9pZCAmIENBTl9FRkZf TUFTSykgPj4NCj4gPiArICAgICAgICAgICAgICAgICAgIChDQU5fRUZGX0lEX0JJVFMtQ0FOX1NG Rl9JRF9CSVRTKSkgPDwNCj4gPiArICAgICAgICAgICAgICAgICAgIFhDQU5fSURSX0lEMV9TSElG VCkgJiBYQ0FOX0lEUl9JRDFfTUFTSzsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgLyogVGhlIHN1 YnN0aWJ1dGUgcmVtb3RlIFRYIHJlcXVlc3QgYml0IHNob3VsZCBiZSAiMSINCj4gPiArICAgICAg ICAgICAgKiBmb3IgZXh0ZW5kZWQgZnJhbWVzIGFzIGluIHRoZSBYaWxpbnggQ0FOIGRhdGFzaGVl dA0KPiA+ICsgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgIGlkIHw9IFhDQU5fSURSX0lE RV9NQVNLIHwgWENBTl9JRFJfU1JSX01BU0s7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgIGlmIChj Zi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgLyogRXh0 ZW5kZWQgZnJhbWVzIHJlbW90ZSBUWCByZXF1ZXN0ICovDQo+ID4gKyAgICAgICAgICAgICAgICAg ICBpZCB8PSBYQ0FOX0lEUl9SVFJfTUFTSzsNCj4gPiArICAgfSBlbHNlIHsNCj4gPiArICAgICAg ICAgICAvKiBTdGFuZGFyZCBDQU4gSUQgZm9ybWF0ICovDQo+ID4gKyAgICAgICAgICAgaWQgPSAo KGNmLT5jYW5faWQgJiBDQU5fU0ZGX01BU0spIDw8IFhDQU5fSURSX0lEMV9TSElGVCkNCj4gJg0K PiA+ICsgICAgICAgICAgICAgICAgICAgWENBTl9JRFJfSUQxX01BU0s7DQo+ID4gKw0KPiA+ICsg ICAgICAgICAgIGlmIChjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgLyogU3RhbmRhcmQgZnJhbWVzIHJlbW90ZSBUWCByZXF1ZXN0ICovDQo+ID4gKyAg ICAgICAgICAgICAgICAgICBpZCB8PSBYQ0FOX0lEUl9TUlJfTUFTSzsNCj4gPiArICAgfQ0KPiA+ ICsNCj4gPiArICAgZGxjID0gY2YtPmNhbl9kbGMgPDwgWENBTl9ETENSX0RMQ19TSElGVDsNCj4g PiArDQo+ID4gKyAgIGlmIChjZi0+Y2FuX2RsYyA+IDApDQo+ID4gKyAgICAgICAgICAgZGF0YVsw XSA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopKGNmLT5kYXRhICsgMCkpOw0KPiA+ICsgICBpZiAo Y2YtPmNhbl9kbGMgPiA0KQ0KPiA+ICsgICAgICAgICAgIGRhdGFbMV0gPSBiZTMyX3RvX2NwdXAo KF9fYmUzMiAqKShjZi0+ZGF0YSArIDQpKTsNCj4gPiArDQo+ID4gKyAgIGNhbl9wdXRfZWNob19z a2Ioc2tiLCBuZGV2LCBwcml2LT50eF9oZWFkICUgcHJpdi0+dHhfbWF4KTsNCj4gPiArICAgcHJp di0+dHhfaGVhZCsrOw0KPiA+ICsNCj4gPiArICAgLyogV3JpdGUgdGhlIEZyYW1lIHRvIFhpbGlu eCBDQU4gVFggRklGTyAqLw0KPiA+ICsgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9UWEZJ Rk9fSURfT0ZGU0VULCBpZCk7DQo+ID4gKyAgIC8qIElmIHRoZSBDQU4gZnJhbWUgaXMgUlRSIGZy YW1lIHRoaXMgd3JpdGUgdHJpZ2dlcnMgdHJhbm1pc3Npb24gKi8NCj4gPiArICAgcHJpdi0+d3Jp dGVfcmVnKHByaXYsIFhDQU5fVFhGSUZPX0RMQ19PRkZTRVQsIGRsYyk7DQo+ID4gKyAgIGlmICgh KGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKSB7DQo+ID4gKyAgICAgICAgICAgcHJpdi0+d3Jp dGVfcmVnKHByaXYsIFhDQU5fVFhGSUZPX0RXMV9PRkZTRVQsIGRhdGFbMF0pOw0KPiA+ICsgICAg ICAgICAgIC8qIElmIHRoZSBDQU4gZnJhbWUgaXMgU3RhbmRhcmQvRXh0ZW5kZWQgZnJhbWUgdGhp cw0KPiA+ICsgICAgICAgICAgICAqIHdyaXRlIHRyaWdnZXJzIHRyYW5taXNzaW9uDQo+ID4gKyAg ICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5f VFhGSUZPX0RXMl9PRkZTRVQsIGRhdGFbMV0pOw0KPiA+ICsgICAgICAgICAgIHN0YXRzLT50eF9i eXRlcyArPSBjZi0+Y2FuX2RsYzsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgLyogQ2hlY2sg aWYgdGhlIFRYIGJ1ZmZlciBpcyBmdWxsICovDQo+ID4gKyAgIGlmICgocHJpdi0+dHhfaGVhZCAt IHByaXYtPnR4X3RhaWwpID09IHByaXYtPnR4X21heCkNCj4gPiArICAgICAgICAgICBuZXRpZl9z dG9wX3F1ZXVlKG5kZXYpOw0KPiA+ICsNCj4gPiArICAgcmV0dXJuIE5FVERFVl9UWF9PSzsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fcnggLSAgSXMgY2FsbGVkIGZyb20g Q0FOIGlzciB0byBjb21wbGV0ZSB0aGUgcmVjZWl2ZWQNCj4gPiArICogICAgICAgICBmcmFtZSAg cHJvY2Vzc2luZw0KPiA+ICsgKiBAbmRldjogIFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1 cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gdGhlIENB TiBpc3IocG9sbCkgdG8gcHJvY2VzcyB0aGUgUngNCj4gPiArZnJhbWVzLiBJdA0KPiA+ICsgKiBk b2VzIG1pbmltYWwgcHJvY2Vzc2luZyBhbmQgaW52b2tlcyAibmV0aWZfcmVjZWl2ZV9za2IiIHRv DQo+ID4gK2NvbXBsZXRlIGZ1cnRoZXINCj4gPiArICogcHJvY2Vzc2luZy4NCj4gPiArICogUmV0 dXJuOiAwIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG9uIGVycm9yICAqLyBz dGF0aWMNCj4gPiAraW50IHhjYW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpIHsNCj4gPiAr ICAgc3RydWN0IHhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICBz dHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmRldi0+c3RhdHM7DQo+ID4gKyAgIHN0 cnVjdCBjYW5fZnJhbWUgKmNmOw0KPiA+ICsgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KPiA+ICsg ICB1MzIgaWRfeGNhbiwgZGxjLCBkYXRhWzJdID0gezAsIDB9Ow0KPiA+ICsNCj4gPiArICAgc2ti ID0gYWxsb2NfY2FuX3NrYihuZGV2LCAmY2YpOw0KPiA+ICsgICBpZiAoIXNrYikNCj4gPiArICAg ICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4NCj4gVGhpcyB3b3VsZCBvbmx5IGhhcHBlbiB1bmRl ciBoZWF2eSBtZW1vcnkgcHJlYXNzdXJlLCBzbyBpdCdzIHByb2JhYmx5DQo+IGJldHRlciB0byBk cm9wIHRoZSBmcmFtZSBhbmQgaW5jcmVhc2UgdGhlIHJ4X2Ryb3BwZWQgY291bnRlcjoNCj4NCj4g ICAgICAgICAgICAgICBzdGF0cy0+cnhfZHJvcHBlZCsrOw0KPg0KPiBZb3UgY2FuIG1ha2UgdGhp cyBmdW5jdGlvbiByZXR1cm4gdGhlIG51bWJlciBvZiByZWNlaXZlZCBDQU4gZnJhbWVzLCBzZWUN Cj4gZmxleGNhbi5jLg0KPg0KDQpPayBXaWxsIGRvLg0KDQoNCg0KPiA+ICsNCj4gPiArICAgLyog UmVhZCBhIGZyYW1lIGZyb20gWGlsaW54IHp5bnEgQ0FOUFMgKi8NCj4gPiArICAgaWRfeGNhbiA9 IHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fUlhGSUZPX0lEX09GRlNFVCk7DQo+ID4gKyAgIGRs YyA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fUlhGSUZPX0RMQ19PRkZTRVQpID4+DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQU5fRExDUl9ETENfU0hJRlQ7DQo+ID4gKw0K PiA+ICsgICAvKiBDaGFuZ2UgWGlsaW54IENBTiBkYXRhIGxlbmd0aCBmb3JtYXQgdG8gc29ja2V0 Q0FOIGRhdGEgZm9ybWF0DQo+ICovDQo+ID4gKyAgIGNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMo ZGxjKTsNCj4gPiArDQo+ID4gKyAgIC8qIENoYW5nZSBYaWxpbnggQ0FOIElEIGZvcm1hdCB0byBz b2NrZXRDQU4gSUQgZm9ybWF0ICovDQo+ID4gKyAgIGlmIChpZF94Y2FuICYgWENBTl9JRFJfSURF X01BU0spIHsNCj4gPiArICAgICAgICAgICAvKiBUaGUgcmVjZWl2ZWQgZnJhbWUgaXMgYW4gRXh0 ZW5kZWQgZm9ybWF0IGZyYW1lICovDQo+ID4gKyAgICAgICAgICAgY2YtPmNhbl9pZCA9IChpZF94 Y2FuICYgWENBTl9JRFJfSUQxX01BU0spID4+IDM7DQo+ID4gKyAgICAgICAgICAgY2YtPmNhbl9p ZCB8PSAoaWRfeGNhbiAmIFhDQU5fSURSX0lEMl9NQVNLKSA+Pg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBYQ0FOX0lEUl9JRDJfU0hJRlQ7DQo+ID4gKyAgICAgICAgICAgY2YtPmNh bl9pZCB8PSBDQU5fRUZGX0ZMQUc7DQo+ID4gKyAgICAgICAgICAgaWYgKGlkX3hjYW4gJiBYQ0FO X0lEUl9SVFJfTUFTSykNCj4gPiArICAgICAgICAgICAgICAgICAgIGNmLT5jYW5faWQgfD0gQ0FO X1JUUl9GTEFHOw0KPiA+ICsgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgIC8qIFRoZSByZWNl aXZlZCBmcmFtZSBpcyBhIHN0YW5kYXJkIGZvcm1hdCBmcmFtZSAqLw0KPiA+ICsgICAgICAgICAg IGNmLT5jYW5faWQgPSAoaWRfeGNhbiAmIFhDQU5fSURSX0lEMV9NQVNLKSA+Pg0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBYQ0FOX0lEUl9JRDFfU0hJRlQ7DQo+ID4gKyAgICAgICAg ICAgaWYgKGlkX3hjYW4gJiBYQ0FOX0lEUl9SVFJfTUFTSykNCj4gPiArICAgICAgICAgICAgICAg ICAgIGNmLT5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsg ICBpZiAoIShpZF94Y2FuICYgWENBTl9JRFJfUlRSX01BU0spKSB7DQo+ID4gKyAgICAgICAgICAg ZGF0YVswXSA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fUlhGSUZPX0RXMV9PRkZTRVQpOw0K PiA+ICsgICAgICAgICAgIGRhdGFbMV0gPSBwcml2LT5yZWFkX3JlZyhwcml2LCBYQ0FOX1JYRklG T19EVzJfT0ZGU0VUKTsNCj4gPiArDQo+ID4gKyAgICAgICAgICAgLyogQ2hhbmdlIFhpbGlueCBD QU4gZGF0YSBmb3JtYXQgdG8gc29ja2V0Q0FOIGRhdGEgZm9ybWF0DQo+ICovDQo+ICAgICAgICAg ICAgICAgaWYgKGNmLT5jYW5fZGxjID4gMCkNCk9rDQoNCj4gPiArICAgICAgICAgICAqKF9fYmUz MiAqKShjZi0+ZGF0YSkgPSBjcHVfdG9fYmUzMihkYXRhWzBdKTsNCj4gPiArICAgICAgICAgICBp ZiAoY2YtPmNhbl9kbGMgPiA0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgKihfX2JlMzIgKiko Y2YtPmRhdGEgKyA0KSA9IGNwdV90b19iZTMyKGRhdGFbMV0pOw0KPiA+ICsgICB9DQo+ID4gKyAg IGNhbl9sZWRfZXZlbnQobmRldiwgQ0FOX0xFRF9FVkVOVF9SWCk7DQo+ID4gKw0KPiA+ICsgICBu ZXRpZl9yZWNlaXZlX3NrYihza2IpOw0KPiA+ICsNCj4gPiArICAgc3RhdHMtPnJ4X2J5dGVzICs9 IGNmLT5jYW5fZGxjOw0KPiA+ICsgICBzdGF0cy0+cnhfcGFja2V0cysrOw0KPiA+ICsgICByZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fZXJyX2ludGVycnVw dCAtIGVycm9yIGZyYW1lIElzcg0KPiA+ICsgKiBAbmRldjogIG5ldF9kZXZpY2UgcG9pbnRlcg0K PiA+ICsgKiBAaXNyOiAgIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgdmFsdWUNCj4gPiArICoN Cj4gPiArICogVGhpcyBpcyB0aGUgQ0FOIGVycm9yIGludGVycnVwdCBhbmQgaXQgd2lsbA0KPiA+ ICsgKiBjaGVjayB0aGUgdGhlIHR5cGUgb2YgZXJyb3IgYW5kIGZvcndhcmQgdGhlIGVycm9yDQo+ ID4gKyAqIGZyYW1lIHRvIHVwcGVyIGxheWVycy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lk IHhjYW5fZXJyX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGlzcikgew0K PiA+ICsgICBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7DQo+ID4g KyAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuZGV2LT5zdGF0czsNCj4gPiAr ICAgc3RydWN0IGNhbl9mcmFtZSAqY2Y7DQo+ID4gKyAgIHN0cnVjdCBza19idWZmICpza2I7DQo+ ID4gKyAgIHUzMiBlcnJfc3RhdHVzLCBzdGF0dXM7DQo+ID4gKw0KPiA+ICsgICBza2IgPSBhbGxv Y19jYW5fZXJyX3NrYihuZGV2LCAmY2YpOw0KPiA+ICsgICBpZiAoIXNrYikgew0KPiA+ICsgICAg ICAgICAgIG5ldGRldl9lcnIobmRldiwgImFsbG9jX2Nhbl9lcnJfc2tiKCkgZmFpbGVkIVxuIik7 DQo+ID4gKyAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICBlcnJf c3RhdHVzID0gcHJpdi0+cmVhZF9yZWcocHJpdiwgWENBTl9FU1JfT0ZGU0VUKTsNCj4gPiArICAg cHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fRVNSX09GRlNFVCwgZXJyX3N0YXR1cyk7DQo+ID4g KyAgIHN0YXR1cyA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fU1JfT0ZGU0VUKTsNCj4gPiAr DQo+ID4gKyAgIGlmIChpc3IgJiBYQ0FOX0lYUl9CU09GRl9NQVNLKSB7DQo+ID4gKyAgICAgICAg ICAgcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7DQo+ID4gKyAgICAgICAgICAg Y2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsNCj4gPiArICAgICAgICAgICBwcml2LT5jYW4u Y2FuX3N0YXRzLmJ1c19vZmYrKzsNCj4gPiArICAgICAgICAgICAvKiBMZWF2ZSBkZXZpY2UgaW4g Q29uZmlnIE1vZGUgaW4gYnVzLW9mZiBzdGF0ZSAqLw0KPiA+ICsgICAgICAgICAgIHByaXYtPndy aXRlX3JlZyhwcml2LCBYQ0FOX1NSUl9PRkZTRVQsDQo+IFhDQU5fU1JSX1JFU0VUX01BU0spOw0K PiA+ICsgICAgICAgICAgIGNhbl9idXNfb2ZmKG5kZXYpOw0KPiA+ICsgICB9IGVsc2UgaWYgKChz dGF0dXMgJiBYQ0FOX1NSX0VTVEFUX01BU0spID09DQo+IFhDQU5fU1JfRVNUQVRfTUFTSykgew0K PiA+ICsgICAgICAgICAgIGNmLT5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOw0KPiA+ICsgICAgICAg ICAgIHByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOw0KPiA+ICsgICAg ICAgICAgIHByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZSsrOw0KPiA+ICsgICAgICAg ICAgIGNmLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9SWF9QQVNTSVZFIHwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5fRVJSX0NSVExfVFhfUEFTU0lWRTsNCj4g PiArICAgfSBlbHNlIGlmIChzdGF0dXMgJiBYQ0FOX1NSX0VSUldSTl9NQVNLKSB7DQo+ID4gKyAg ICAgICAgICAgY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7DQo+ID4gKyAgICAgICAgICAgcHJp di0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1dBUk5JTkc7DQo+ID4gKyAgICAgICAgICAg cHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl93YXJuaW5nKys7DQo+ID4gKyAgICAgICAgICAgY2Yt PmRhdGFbMV0gfD0gQ0FOX0VSUl9DUlRMX1JYX1dBUk5JTkcgfA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIENBTl9FUlJfQ1JUTF9UWF9XQVJOSU5HOw0KPiA+ICsgICB9 DQo+ID4gKw0KPiA+ICsgICAvKiBDaGVjayBmb3IgQXJiaXRyYXRpb24gbG9zdCBpbnRlcnJ1cHQg Ki8NCj4gPiArICAgaWYgKGlzciAmIFhDQU5fSVhSX0FSQkxTVF9NQVNLKSB7DQo+ID4gKyAgICAg ICAgICAgY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0xPU1RBUkI7DQo+ID4gKyAgICAgICAgICAgY2Yt PmRhdGFbMF0gPSBDQU5fRVJSX0xPU1RBUkJfVU5TUEVDOw0KPiA+ICsgICAgICAgICAgIHByaXYt PmNhbi5jYW5fc3RhdHMuYXJiaXRyYXRpb25fbG9zdCsrOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ ICsgICAvKiBDaGVjayBmb3IgUlggRklGTyBPdmVyZmxvdyBpbnRlcnJ1cHQgKi8NCj4gPiArICAg aWYgKGlzciAmIFhDQU5fSVhSX1JYT0ZMV19NQVNLKSB7DQo+ID4gKyAgICAgICAgICAgY2YtPmNh bl9pZCB8PSBDQU5fRVJSX0NSVEw7DQo+ID4gKyAgICAgICAgICAgY2YtPmRhdGFbMV0gfD0gQ0FO X0VSUl9DUlRMX1JYX09WRVJGTE9XOw0KPiA+ICsgICAgICAgICAgIHN0YXRzLT5yeF9vdmVyX2Vy cm9ycysrOw0KPiA+ICsgICAgICAgICAgIHN0YXRzLT5yeF9lcnJvcnMrKzsNCj4gPiArICAgICAg ICAgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9TUlJfT0ZGU0VULA0KPiBYQ0FOX1NSUl9S RVNFVF9NQVNLKTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgLyogQ2hlY2sgZm9yIGVycm9y IGludGVycnVwdCAqLw0KPiA+ICsgICBpZiAoaXNyICYgWENBTl9JWFJfRVJST1JfTUFTSykgew0K PiA+ICsgICAgICAgICAgIGNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UIHwgQ0FOX0VSUl9CVVNF UlJPUjsNCj4gPiArICAgICAgICAgICBjZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVU5TUEVD Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAvKiBDaGVjayBmb3IgQWNrIGVycm9yIGludGVycnVw dCAqLw0KPiA+ICsgICAgICAgICAgIGlmIChlcnJfc3RhdHVzICYgWENBTl9FU1JfQUNLRVJfTUFT Sykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0FDSzsN Cj4gPiArICAgICAgICAgICAgICAgICAgIGNmLT5kYXRhWzNdIHw9IENBTl9FUlJfUFJPVF9MT0Nf QUNLOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgc3RhdHMtPnR4X2Vycm9ycysrOw0KPiA+ICsg ICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAgLyogQ2hlY2sgZm9yIEJpdCBlcnJv ciBpbnRlcnJ1cHQgKi8NCj4gPiArICAgICAgICAgICBpZiAoZXJyX3N0YXR1cyAmIFhDQU5fRVNS X0JFUlJfTUFTSykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgY2YtPmNhbl9pZCB8PSBDQU5f RVJSX1BST1Q7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBjZi0+ZGF0YVsyXSA9IENBTl9FUlJf UFJPVF9CSVQ7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBzdGF0cy0+dHhfZXJyb3JzKys7DQo+ ID4gKyAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAvKiBDaGVjayBmb3IgU3R1 ZmYgZXJyb3IgaW50ZXJydXB0ICovDQo+ID4gKyAgICAgICAgICAgaWYgKGVycl9zdGF0dXMgJiBY Q0FOX0VTUl9TVEVSX01BU0spIHsNCj4gPiArICAgICAgICAgICAgICAgICAgIGNmLT5jYW5faWQg fD0gQ0FOX0VSUl9QUk9UOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgY2YtPmRhdGFbMl0gPSBD QU5fRVJSX1BST1RfU1RVRkY7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBzdGF0cy0+cnhfZXJy b3JzKys7DQo+ID4gKyAgICAgICAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAgICAgICAvKiBDaGVj ayBmb3IgRm9ybSBlcnJvciBpbnRlcnJ1cHQgKi8NCj4gPiArICAgICAgICAgICBpZiAoZXJyX3N0 YXR1cyAmIFhDQU5fRVNSX0ZNRVJfTUFTSykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgY2Yt PmNhbl9pZCB8PSBDQU5fRVJSX1BST1Q7DQo+ID4gKyAgICAgICAgICAgICAgICAgICBjZi0+ZGF0 YVsyXSA9IENBTl9FUlJfUFJPVF9GT1JNOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgc3RhdHMt PnJ4X2Vycm9ycysrOw0KPiA+ICsgICAgICAgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgICAgICAg LyogQ2hlY2sgZm9yIENSQyBlcnJvciBpbnRlcnJ1cHQgKi8NCj4gPiArICAgICAgICAgICBpZiAo ZXJyX3N0YXR1cyAmIFhDQU5fRVNSX0NSQ0VSX01BU0spIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgIGNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg Y2YtPmRhdGFbM10gPSBDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENBTl9FUlJfUFJPVF9MT0NfQ1JDX0RFTDsNCj4gPiAr ICAgICAgICAgICAgICAgICAgIHN0YXRzLT5yeF9lcnJvcnMrKzsNCj4gPiArICAgICAgICAgICB9 DQo+ID4gKyAgICAgICAgICAgICAgICAgICBwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19lcnJvcisr Ow0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICBuZXRpZl9yeChza2IpOw0KPiA+ICsgICBzdGF0 cy0+cnhfcGFja2V0cysrOw0KPiA+ICsgICBzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7 DQo+ID4gKw0KPiA+ICsgICBuZXRkZXZfZGJnKG5kZXYsICIlczogZXJyb3Igc3RhdHVzIHJlZ2lz dGVyOjB4JXhcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgcHJpdi0+cmVh ZF9yZWcocHJpdiwgWENBTl9FU1JfT0ZGU0VUKSk7DQo+IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiB4Y2FuX3N0YXRlX2ludGVycnVwdCAtIEl0IHdpbGwgY2hlY2sgdGhlIHN0YXRlIG9mIHRo ZSBDQU4gZGV2aWNlDQo+ID4gKyAqIEBuZGV2OiAgbmV0X2RldmljZSBwb2ludGVyDQo+ID4gKyAq IEBpc3I6ICAgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB2YWx1ZQ0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIHdpbGwgY2hlY2tzIHRoZSBzdGF0ZSBvZiB0aGUgQ0FOIGRldmljZQ0KPiA+ICsgKiBh bmQgcHV0cyB0aGUgZGV2aWNlIGludG8gYXBwcm9wcmlhdGUgc3RhdGUuDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCB4Y2FuX3N0YXRlX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRl diwgdTMyIGlzcikgew0KPiA+ICsgICBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3By aXYobmRldik7DQo+ID4gKw0KPiA+ICsgICAvKiBDaGVjayBmb3IgU2xlZXAgaW50ZXJydXB0IGlm IHNldCBwdXQgQ0FOIGRldmljZSBpbiBzbGVlcCBzdGF0ZSAqLw0KPiA+ICsgICBpZiAoaXNyICYg WENBTl9JWFJfU0xQX01BU0spDQo+ID4gKyAgICAgICAgICAgcHJpdi0+Y2FuLnN0YXRlID0gQ0FO X1NUQVRFX1NMRUVQSU5HOw0KPiA+ICsNCj4gPiArICAgLyogQ2hlY2sgZm9yIFdha2UgdXAgaW50 ZXJydXB0IGlmIHNldCBwdXQgQ0FOIGRldmljZSBpbiBBY3RpdmUgc3RhdGUNCj4gKi8NCj4gPiAr ICAgaWYgKGlzciAmIFhDQU5fSVhSX1dLVVBfTUFTSykNCj4gPiArICAgICAgICAgICBwcml2LT5j YW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICogeGNhbl9yeF9wb2xsIC0gUG9sbCByb3V0aW5lIGZvciByeCBwYWNrZXRzIChOQVBJKQ0K PiA+ICsgKiBAbmFwaTogIG5hcGkgc3RydWN0dXJlIHBvaW50ZXINCj4gPiArICogQHF1b3RhOiBN YXggbnVtYmVyIG9mIHJ4IHBhY2tldHMgdG8gYmUgcHJvY2Vzc2VkLg0KPiA+ICsgKg0KPiA+ICsg KiBUaGlzIGlzIHRoZSBwb2xsIHJvdXRpbmUgZm9yIHJ4IHBhcnQuDQo+ID4gKyAqIEl0IHdpbGwg cHJvY2VzcyB0aGUgcGFja2V0cyBtYXhpbXV4IHF1b3RhIHZhbHVlLg0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm46IG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkICAqLyBzdGF0aWMgaW50DQo+ID4g K3hjYW5fcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBxdW90YSkgew0KPiA+ ICsgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5hcGktPmRldjsNCj4gPiArICAgc3RydWN0 IHhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICB1MzIgaXNyLCBp ZXI7DQo+ID4gKyAgIGludCB3b3JrX2RvbmUgPSAwOw0KPiA+ICsNCj4gPiArICAgaXNyID0gcHJp di0+cmVhZF9yZWcocHJpdiwgWENBTl9JU1JfT0ZGU0VUKTsNCj4gPiArICAgd2hpbGUgKChpc3Ig JiBYQ0FOX0lYUl9SWE5FTVBfTUFTSykgJiYgKHdvcmtfZG9uZSA8IHF1b3RhKSkgew0KPiA+ICsg ICAgICAgICAgIGlmIChpc3IgJiBYQ0FOX0lYUl9SWE9LX01BU0spIHsNCj4gPiArICAgICAgICAg ICAgICAgICAgIHByaXYtPndyaXRlX3JlZyhwcml2LCBYQ0FOX0lDUl9PRkZTRVQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFhDQU5fSVhSX1JYT0tfTUFTSyk7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICBpZiAoeGNhbl9yeChuZGV2KSA8IDApDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiB3b3JrX2RvbmU7DQo+DQo+IFlvdSBzaG91bGQgbm90IGxlYXZl IHRoZSBuYXBpIGZ1bmN0aW9uIGxpa2UgdGhpcywgeW91IGFyZSBub3QgYWxsb3dlZCB0byBza2lw DQo+IHRoZSBpZiAod29ya19kb25lIDwgcXVvdGEpIHsuLi59IHBhcnQuDQo+DQpPayB3aWxsIGNo YW5nZQ0KDQoNCj4gPiArICAgICAgICAgICAgICAgICAgIHdvcmtfZG9uZSsrOw0KPg0KPiBJIHRo aW5rIHRoZSBmbGV4Y2FuIGRvZXMgaXQgYmV0dGVyOg0KPg0KPiAgICAgICAgICAgICAgICAgICAg ICAgd29ya19kb25lICs9IHhjYW5fcngobmRldik7DQo+DQo+ID4gKyAgICAgICAgICAgfSBlbHNl IHsNCj4gPiArICAgICAgICAgICAgICAgICAgIHByaXYtPndyaXRlX3JlZyhwcml2LCBYQ0FOX0lD Ul9PRkZTRVQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFhDQU5fSVhSX1JYTkVN UF9NQVNLKTsNCj4gPiArICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAg IH0NCj4gPiArICAgICAgICAgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9JQ1JfT0ZGU0VU LA0KPiBYQ0FOX0lYUl9SWE5FTVBfTUFTSyk7DQo+ID4gKyAgICAgICAgICAgaXNyID0gcHJpdi0+ cmVhZF9yZWcocHJpdiwgWENBTl9JU1JfT0ZGU0VUKTsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiAr ICAgaWYgKHdvcmtfZG9uZSA8IHF1b3RhKSB7DQo+ID4gKyAgICAgICAgICAgbmFwaV9jb21wbGV0 ZShuYXBpKTsNCj4gPiArICAgICAgICAgICBpZXIgPSBwcml2LT5yZWFkX3JlZyhwcml2LCBYQ0FO X0lFUl9PRkZTRVQpOw0KPiA+ICsgICAgICAgICAgIGllciB8PSAoWENBTl9JWFJfUlhPS19NQVNL IHwNCj4gWENBTl9JWFJfUlhORU1QX01BU0spOw0KPiA+ICsgICAgICAgICAgIHByaXYtPndyaXRl X3JlZyhwcml2LCBYQ0FOX0lFUl9PRkZTRVQsIGllcik7DQo+ID4gKyAgIH0NCj4gPiArICAgcmV0 dXJuIHdvcmtfZG9uZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fdHhf aW50ZXJydXB0IC0gVHggRG9uZSBJc3INCj4gPiArICogQG5kZXY6ICBuZXRfZGV2aWNlIHBvaW50 ZXINCj4gPiArICogQGlzcjogICBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIHZhbHVlDQo+ID4g KyAqLw0KPiA+ICtzdGF0aWMgdm9pZCB4Y2FuX3R4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2Rldmlj ZSAqbmRldiwgdTMyIGlzcikgew0KPiA+ICsgICBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0 ZGV2X3ByaXYobmRldik7DQo+ID4gKyAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9 ICZuZGV2LT5zdGF0czsNCj4gPiArDQo+ID4gKyAgIHdoaWxlIChwcml2LT50eF9oZWFkIC0gcHJp di0+dHhfdGFpbCA+IDApIHsNCj4gPiArICAgICAgICAgICBwcml2LT53cml0ZV9yZWcocHJpdiwg WENBTl9JQ1JfT0ZGU0VULA0KPiBYQ0FOX0lYUl9UWE9LX01BU0spOw0KPiA+ICsgICAgICAgICAg IGlmICghKGlzciAmIFhDQU5fSVhSX1RYT0tfTUFTSykpDQo+ID4gKyAgICAgICAgICAgICAgICAg ICBicmVhazsNCj4gPiArICAgICAgICAgICBjYW5fZ2V0X2VjaG9fc2tiKG5kZXYsIHByaXYtPnR4 X3RhaWwgJQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnR4 X21heCk7DQo+ID4gKyAgICAgICAgICAgcHJpdi0+dHhfdGFpbCsrOw0KPiA+ICsgICAgICAgICAg IHN0YXRzLT50eF9wYWNrZXRzKys7DQo+ID4gKyAgICAgICAgICAgY2FuX2xlZF9ldmVudChuZGV2 LCBDQU5fTEVEX0VWRU5UX1RYKTsNCj4gPiArICAgICAgICAgICBpc3IgPSBwcml2LT5yZWFkX3Jl Zyhwcml2LCBYQ0FOX0lTUl9PRkZTRVQpOw0KPiA+ICsgICB9DQo+ID4gKyAgIG5ldGlmX3dha2Vf cXVldWUobmRldik7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y2FuX2ludGVy cnVwdCAtIENBTiBJc3INCj4gPiArICogQGlycTogICBpcnEgbnVtYmVyDQo+ID4gKyAqIEBkZXZf aWQ6ICAgICAgICBkZXZpY2UgaWQgcG9uaXRlcg0KPiA+ICsgKg0KPiA+ICsgKiBUaGlzIGlzIHRo ZSB4aWxpbnggQ0FOIElzci4gSXQgY2hlY2tzIGZvciB0aGUgdHlwZSBvZiBpbnRlcnJ1cHQNCj4g PiArICogYW5kIGludm9rZXMgdGhlIGNvcnJlc3BvbmRpbmcgSVNSLg0KPiA+ICsgKg0KPiA+ICsg KiBSZXR1cm46DQo+ID4gKyAqIElSUV9OT05FIC0gSWYgQ0FOIGRldmljZSBpcyBpbiBzbGVlcCBt b2RlLCBJUlFfSEFORExFRCBvdGhlcndpc2UNCj4gPiArKi8gc3RhdGljIGlycXJldHVybl90IHhj YW5faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkgew0KPiA+ICsgICBzdHJ1Y3QgbmV0 X2RldmljZSAqbmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsNCj4gPiArICAgc3Ry dWN0IHhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICB1MzIgaXNy LCBpZXI7DQo+ID4gKw0KPiA+ICsgICAvKiBHZXQgdGhlIGludGVycnVwdCBzdGF0dXMgZnJvbSBY aWxpbnggQ0FOICovDQo+ID4gKyAgIGlzciA9IHByaXYtPnJlYWRfcmVnKHByaXYsIFhDQU5fSVNS X09GRlNFVCk7DQo+ID4gKyAgIGlmICghaXNyKQ0KPiA+ICsgICAgICAgICAgIHJldHVybiBJUlFf Tk9ORTsNCj4gPiArDQo+ID4gKyAgIG5ldGRldl9kYmcobmRldiwgIiVzOiBpc3I6I3glMDh4LCBl cnI6I3glMDh4XG4iLCBfX2Z1bmNfXywNCj4gPiArICAgICAgICAgICAgICAgICAgIGlzciwgcHJp di0+cmVhZF9yZWcocHJpdiwgWENBTl9FU1JfT0ZGU0VUKSk7DQo+DQo+IFBsZWFzZSByZW1vdmUg dGhpcyBkZWJ1ZyBvdXRwdXQuDQo+DQpPaw0KDQo+ID4gKyAgIC8qIENoZWNrIGZvciB0aGUgdHlw ZSBvZiBpbnRlcnJ1cHQgYW5kIFByb2Nlc3NpbmcgaXQgKi8NCj4gPiArICAgaWYgKGlzciAmIChY Q0FOX0lYUl9TTFBfTUFTSyB8IFhDQU5fSVhSX1dLVVBfTUFTSykpIHsNCj4gPiArICAgICAgICAg ICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9JQ1JfT0ZGU0VULA0KPiAoWENBTl9JWFJfU0xQ X01BU0sgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0FOX0lYUl9XS1VQX01B U0spKTsNCj4gPiArICAgICAgICAgICB4Y2FuX3N0YXRlX2ludGVycnVwdChuZGV2LCBpc3IpOw0K PiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICAvKiBDaGVjayBmb3IgVHggaW50ZXJydXB0IGFuZCBQ cm9jZXNzaW5nIGl0ICovDQo+ID4gKyAgIGlmIChpc3IgJiBYQ0FOX0lYUl9UWE9LX01BU0spIHsN Cj4gPiArICAgICAgICAgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9JQ1JfT0ZGU0VULA0K PiBYQ0FOX0lYUl9UWE9LX01BU0spOw0KPg0KPiBJIHRoaW5rIHRoaXMgd3JpdGUgaXMgbm93IGNv bXBsZXRlbHkgaW5zaWRlIHR4X2ludGVycnVwdCgpPw0KWWVzIHdpbGwgcmVtb3ZlLg0KDQo+DQo+ ID4gKyAgICAgICAgICAgeGNhbl90eF9pbnRlcnJ1cHQobmRldiwgaXNyKTsNCj4gPiArICAgfQ0K PiA+ICsNCj4gPiArICAgLyogQ2hlY2sgZm9yIHRoZSB0eXBlIG9mIGVycm9yIGludGVycnVwdCBh bmQgUHJvY2Vzc2luZyBpdCAqLw0KPiA+ICsgICBpZiAoaXNyICYgKFhDQU5fSVhSX0VSUk9SX01B U0sgfCBYQ0FOX0lYUl9SWE9GTFdfTUFTSyB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICBYQ0FO X0lYUl9CU09GRl9NQVNLIHwNCj4gWENBTl9JWFJfQVJCTFNUX01BU0spKSB7DQo+ID4gKyAgICAg ICAgICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fSUNSX09GRlNFVCwNCj4gKFhDQU5fSVhS X0VSUk9SX01BU0sgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBYQ0FOX0lYUl9S WE9GTFdfTUFTSyB8DQo+IFhDQU5fSVhSX0JTT0ZGX01BU0sgfA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICBYQ0FOX0lYUl9BUkJMU1RfTUFTSykpOw0KPiA+ICsgICAgICAgICAgIHhj YW5fZXJyX2ludGVycnVwdChuZGV2LCBpc3IpOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICAv KiBDaGVjayBmb3IgdGhlIHR5cGUgb2YgcmVjZWl2ZSBpbnRlcnJ1cHQgYW5kIFByb2Nlc3Npbmcg aXQgKi8NCj4gPiArICAgaWYgKGlzciAmIChYQ0FOX0lYUl9SWE5FTVBfTUFTSyB8IFhDQU5fSVhS X1JYT0tfTUFTSykpIHsNCj4gPiArICAgICAgICAgICBpZXIgPSBwcml2LT5yZWFkX3JlZyhwcml2 LCBYQ0FOX0lFUl9PRkZTRVQpOw0KPiA+ICsgICAgICAgICAgIGllciAmPSB+KFhDQU5fSVhSX1JY TkVNUF9NQVNLIHwNCj4gWENBTl9JWFJfUlhPS19NQVNLKTsNCj4gPiArICAgICAgICAgICBwcml2 LT53cml0ZV9yZWcocHJpdiwgWENBTl9JRVJfT0ZGU0VULCBpZXIpOw0KPiA+ICsgICAgICAgICAg IG5hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOw0KPiA+ICsgICB9DQo+ID4gKyAgIHJldHVybiBJ UlFfSEFORExFRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fY2hpcF9z dG9wIC0gRHJpdmVyIHN0b3Agcm91dGluZQ0KPiA+ICsgKiBAbmRldjogIFBvaW50ZXIgdG8gbmV0 X2RldmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogVGhpcyBpcyB0aGUgZHJpdmVycyBz dG9wIHJvdXRpbmUuIEl0IHdpbGwgZGlzYWJsZSB0aGUNCj4gPiArICogaW50ZXJydXB0cyBhbmQg cHV0IHRoZSBkZXZpY2UgaW50byBjb25maWd1cmF0aW9uIG1vZGUuDQo+ID4gKyAqLw0KPiA+ICtz dGF0aWMgdm9pZCB4Y2FuX2NoaXBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikgew0KPiA+ ICsgICBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7DQo+ID4gKyAg IHUzMiBpZXI7DQo+ID4gKw0KPiA+ICsgICAvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIGxlYXZl IHRoZSBjYW4gaW4gY29uZmlndXJhdGlvbiBtb2RlICovDQo+ID4gKyAgIGllciA9IHByaXYtPnJl YWRfcmVnKHByaXYsIFhDQU5fSUVSX09GRlNFVCk7DQo+ID4gKyAgIGllciAmPSB+WENBTl9JTlRS X0FMTDsNCj4gPiArICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fSUVSX09GRlNFVCwgaWVy KTsNCj4gPiArICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fU1JSX09GRlNFVCwgWENBTl9T UlJfUkVTRVRfTUFTSyk7DQo+ID4gKyAgIHByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9Q UEVEOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogeGNhbl9vcGVuIC0gRHJpdmVyIG9wZW4g cm91dGluZQ0KPiA+ICsgKiBAbmRldjogIFBvaW50ZXIgdG8gbmV0X2RldmljZSBzdHJ1Y3R1cmUN Cj4gPiArICoNCj4gPiArICogVGhpcyBpcyB0aGUgZHJpdmVyIG9wZW4gcm91dGluZS4NCj4gPiAr ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJyb3IgICovIHN0 YXRpYyBpbnQNCj4gPiAreGNhbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KSB7DQo+ID4g KyAgIHN0cnVjdCB4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArICAg aW50IHJldDsNCj4gPiArDQo+ID4gKyAgIHJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgeGNh bl9pbnRlcnJ1cHQsIHByaXYtPmlycV9mbGFncywNCj4gPiArICAgICAgICAgICAgICAgICAgIG5k ZXYtPm5hbWUsIG5kZXYpOw0KPiA+ICsgICBpZiAocmV0IDwgMCkgew0KPiA+ICsgICAgICAgICAg IG5ldGRldl9lcnIobmRldiwgIklycSBhbGxvY2F0aW9uIGZvciBDQU4gZmFpbGVkXG4iKTsNCj4g PiArICAgICAgICAgICBnb3RvIGVycjsNCj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmRldmNsayk7DQo+ID4gKyAgIGlmIChyZXQpIHsNCj4g PiArICAgICAgICAgICBuZXRkZXZfZXJyKG5kZXYsICJ1bmFibGUgdG8gZW5hYmxlIGRldmljZSBj bG9ja1xuIik7DQo+ID4gKyAgICAgICAgICAgZ290byBlcnI7DQo+ID4gKyAgIH0NCj4gPiArDQo+ ID4gKyAgIHJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5hcGVyY2xrKTsNCj4gPiArICAg aWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgInVuYWJsZSB0byBl bmFibGUgYXBlciBjbG9ja1xuIik7DQo+ID4gKyAgICAgICAgICAgZ290byBlcnJfYXBlcmNsazsN Cj4gPiArICAgfQ0KPiA+ICsNCj4gPiArICAgLyogU2V0IGNoaXAgaW50byByZXNldCBtb2RlICov DQo+ID4gKyAgIHJldCA9IHNldF9yZXNldF9tb2RlKG5kZXYpOw0KPiA+ICsgICBpZiAocmV0IDwg MCkgew0KPiA+ICsgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgIm1vZGUgcmVzZXR0aW5nIGZh aWxlZCBmYWlsZWQhXG4iKTsNCj4gPiArICAgICAgICAgICBnb3RvIGVycl9kZXZjbGs7DQo+ID4g KyAgIH0NCj4gPiArDQo+ID4gKyAgIC8qIENvbW1vbiBvcGVuICovDQo+ID4gKyAgIHJldCA9IG9w ZW5fY2FuZGV2KG5kZXYpOw0KPiA+ICsgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgIGdvdG8g ZXJyX2RldmNsazsNCj4gPiArDQo+ID4gKyAgIHJldCA9IHhjYW5fY2hpcF9zdGFydChuZGV2KTsN Cj4gPiArICAgaWYgKHJldCA8IDApIHsNCj4gPiArICAgICAgICAgICBuZXRkZXZfZXJyKG5kZXYs ICJ4Y2FuX2NoaXBfc3RhcnQgZmFpbGVkIVxuIik7DQo+ID4gKyAgICAgICAgICAgZ290byBlcnJf ZGV2Y2xrOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICBjYW5fbGVkX2V2ZW50KG5kZXYsIENB Tl9MRURfRVZFTlRfT1BFTik7DQo+ID4gKyAgIG5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsNCj4g PiArICAgbmV0aWZfc3RhcnRfcXVldWUobmRldik7DQo+ID4gKw0KPiA+ICsgICByZXR1cm4gMDsN Cj4gPiArDQo+ID4gK2Vycl9hcGVyY2xrOg0KPiA+ICsgICBmcmVlX2lycShuZGV2LT5pcnEsIG5k ZXYpOw0KPiA+ICsgICBjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ZGV2Y2xrKTsNCj4gPiAr ZXJyX2RldmNsazoNCj4gPiArICAgZnJlZV9pcnEobmRldi0+aXJxLCBuZGV2KTsNCj4gPiArICAg Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmRldmNsayk7DQo+ID4gKyAgIGNsa19kaXNhYmxl X3VucHJlcGFyZShwcml2LT5hcGVyY2xrKTsNCj4NCj4gSGF2ZSBhIGxvb2sgYXQgeW91ciBjbGVh bnVwIGNvZGUsIGRvdWJsZSBmcmVlIGlycSgpPyBkb3VibGUgZGlzYWJsZSB0aGUNCj4gZGV2X2Ns aywgdGhpcyBsb29rcyBicm9rZW4/DQo+DQpPaw0KDQo+ID4gK2VycjoNCj4gPiArICAgcmV0dXJu IHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fY2xvc2UgLSBEcml2 ZXIgY2xvc2Ugcm91dGluZQ0KPiA+ICsgKiBAbmRldjogIFBvaW50ZXIgdG8gbmV0X2RldmljZSBz dHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmV0dXJuOiAwIGFsd2F5cw0KPiA+ICsgKi8NCj4g PiArc3RhdGljIGludCB4Y2FuX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KSB7DQo+ID4g KyAgIHN0cnVjdCB4Y2FuX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsNCj4gPiArDQo+ ID4gKyAgIG5ldGlmX3N0b3BfcXVldWUobmRldik7DQo+ID4gKyAgIG5hcGlfZGlzYWJsZSgmcHJp di0+bmFwaSk7DQo+ID4gKyAgIHhjYW5fY2hpcF9zdG9wKG5kZXYpOw0KPiA+ICsgICBjbGtfZGlz YWJsZV91bnByZXBhcmUocHJpdi0+YXBlcmNsayk7DQo+ID4gKyAgIGNsa19kaXNhYmxlX3VucHJl cGFyZShwcml2LT5kZXZjbGspOw0KPiA+ICsgICBmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOw0K PiA+ICsgICBjbG9zZV9jYW5kZXYobmRldik7DQo+ID4gKw0KPiA+ICsgICBjYW5fbGVkX2V2ZW50 KG5kZXYsIENBTl9MRURfRVZFTlRfU1RPUCk7DQo+ID4gKw0KPiA+ICsgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fZ2V0X2JlcnJfY291bnRlciAtIGVy cm9yIGNvdW50ZXIgcm91dGluZQ0KPiA+ICsgKiBAbmRldjogIFBvaW50ZXIgdG8gbmV0X2Rldmlj ZSBzdHJ1Y3R1cmUNCj4gPiArICogQGJlYzogICBQb2ludGVyIHRvIGNhbl9iZXJyX2NvdW50ZXIg c3RydWN0dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMgdGhlIGRyaXZlciBlcnJvciBjb3Vu dGVyIHJvdXRpbmUuDQo+ID4gKyAqIFJldHVybjogMCBhbHdheXMNCj4gPiArICovDQo+ID4gK3N0 YXRpYyBpbnQgeGNhbl9nZXRfYmVycl9jb3VudGVyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpu ZGV2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYW5f YmVycl9jb3VudGVyICpiZWMpDQo+ID4gK3sNCj4gPiArICAgc3RydWN0IHhjYW5fcHJpdiAqcHJp diA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAg cmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmRldmNsayk7DQo+ID4gKyAgIGlmIChyZXQp DQo+ID4gKyAgICAgICAgICAgZ290byBlcnI7DQo+ID4gKw0KPiA+ICsgICByZXQgPSBjbGtfcHJl cGFyZV9lbmFibGUocHJpdi0+YXBlcmNsayk7DQo+ID4gKyAgIGlmIChyZXQpDQo+ID4gKyAgICAg ICAgICAgZ290byBlcnJfY2xrOw0KPiA+ICsNCj4gPiArICAgYmVjLT50eGVyciA9IHByaXYtPnJl YWRfcmVnKHByaXYsIFhDQU5fRUNSX09GRlNFVCkgJg0KPiBYQ0FOX0VDUl9URUNfTUFTSzsNCj4g PiArICAgYmVjLT5yeGVyciA9ICgocHJpdi0+cmVhZF9yZWcocHJpdiwgWENBTl9FQ1JfT0ZGU0VU KSAmDQo+ID4gKyAgICAgICAgICAgICAgICAgICBYQ0FOX0VDUl9SRUNfTUFTSykgPj4gWENBTl9F U1JfUkVDX1NISUZUKTsNCj4gPiArDQo+ID4gKyAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2 LT5hcGVyY2xrKTsNCj4gPiArICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmRldmNsayk7 DQo+ID4gKw0KPiA+ICsgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl9jbGs6DQo+ID4gKyAg IGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5kZXZjbGspOw0KPiA+ICtlcnI6DQo+ID4gKyAg IHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0 X2RldmljZV9vcHMgeGNhbl9uZXRkZXZfb3BzID0gew0KPiA+ICsgICAubmRvX29wZW4gICAgICAg PSB4Y2FuX29wZW4sDQo+ID4gKyAgIC5uZG9fc3RvcCAgICAgICA9IHhjYW5fY2xvc2UsDQo+ID4g KyAgIC5uZG9fc3RhcnRfeG1pdCA9IHhjYW5fc3RhcnRfeG1pdCwNCj4gPiArfTsNCj4gPiArDQo+ ID4gKyNpZmRlZiBDT05GSUdfUE1fU0xFRVANCj4NCj4gcGxlYXNlIHJlbW92ZSB0aGUgaWZkZWYu Li4NCj4NCk9rDQoNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5fc3VzcGVuZCAtIFN1c3BlbmQgbWV0 aG9kIGZvciB0aGUgZHJpdmVyDQo+ID4gKyAqIEBfZGV2OiAgQWRkcmVzcyBvZiB0aGUgcGxhdGZv cm1fZGV2aWNlIHN0cnVjdHVyZQ0KPiA+ICsgKg0KPiA+ICsgKiBQdXQgdGhlIGRyaXZlciBpbnRv IGxvdyBwb3dlciBtb2RlLg0KPiA+ICsgKiBSZXR1cm46IDAgYWx3YXlzDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgaW50IHhjYW5fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2KQ0KPg0KPiAuLi5h ZGQgX19tYXliZV91bnVzZWQgaW5zdGVhZC4NCj4NCk9rDQoNCj4gPiArew0KPiA+ICsgICBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gY29udGFpbmVyX29mKF9kZXYsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOw0KPg0KPiBkZXZfZ2V0 X2RydmRhdGEoZGV2aWNlKTsNCk9rDQoNCg0KPg0KPiA+ICsgICBzdHJ1Y3QgbmV0X2RldmljZSAq bmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICBzdHJ1Y3QgeGNhbl9w cml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7DQo+ID4gKw0KPiA+ICsgICBpZiAobmV0aWZf cnVubmluZyhuZGV2KSkgew0KPiA+ICsgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUobmRldik7 DQo+ID4gKyAgICAgICAgICAgbmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTsNCj4gPiArICAgfQ0K PiA+ICsNCj4gPiArICAgcHJpdi0+d3JpdGVfcmVnKHByaXYsIFhDQU5fTVNSX09GRlNFVCwNCj4g WENBTl9NU1JfU0xFRVBfTUFTSyk7DQo+ID4gKyAgIHByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFU RV9TTEVFUElORzsNCj4gPiArDQo+ID4gKyAgIGNsa19kaXNhYmxlKHByaXYtPmFwZXJjbGspOw0K PiA+ICsgICBjbGtfZGlzYWJsZShwcml2LT5kZXZjbGspOw0KPiA+ICsNCj4gPiArICAgcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiB4Y2FuX3Jlc3VtZSAtIFJlc3Vt ZSBmcm9tIHN1c3BlbmQNCj4gPiArICogQGRldjogICBBZGRyZXNzIG9mIHRoZSBwbGF0Zm9ybWRl dmljZSBzdHJ1Y3R1cmUNCj4gPiArICoNCj4gPiArICogUmVzdW1lIG9wZXJhdGlvbiBhZnRlciBz dXNwZW5kLg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1ZSBv biBlcnJvciAgKi8gc3RhdGljIGludA0KPiA+ICt4Y2FuX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpDQo+DQo+IGRpdG8NCj4NCk9LDQoNCj4gPiArew0KPiA+ICsgICBzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpwZGV2ID0gY29udGFpbmVyX29mKGRldiwNCj4gPiArICAgICAgICAgICAgICAgICAg IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7DQo+DQo+IGRpdHRvDQpPaw0KDQoNCj4NCj4g PiArICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2 KTsNCj4gPiArICAgc3RydWN0IHhjYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0K PiA+ICsgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgcmV0ID0gY2xrX2VuYWJsZShwcml2LT5h cGVyY2xrKTsNCj4gPiArICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgIGRldl9lcnIoZGV2 LCAiQ2Fubm90IGVuYWJsZSBjbG9jay5cbiIpOw0KPiA+ICsgICAgICAgICAgIHJldHVybiByZXQ7 DQo+ID4gKyAgIH0NCj4gPiArICAgcmV0ID0gY2xrX2VuYWJsZShwcml2LT5kZXZjbGspOw0KPiA+ ICsgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgZGV2X2VycihkZXYsICJDYW5ub3QgZW5h YmxlIGNsb2NrLlxuIik7DQo+ID4gKyAgICAgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBy aXYtPmFwZXJjbGspOw0KPiA+ICsgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgIH0NCj4g PiArDQo+ID4gKyAgIHByaXYtPndyaXRlX3JlZyhwcml2LCBYQ0FOX01TUl9PRkZTRVQsIDApOw0K PiA+ICsgICBwcml2LT53cml0ZV9yZWcocHJpdiwgWENBTl9TUlJfT0ZGU0VULCBYQ0FOX1NSUl9D RU5fTUFTSyk7DQo+ID4gKyAgIHByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJ VkU7DQo+ID4gKw0KPiA+ICsgICBpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgew0KPiA+ICsgICAg ICAgICAgIG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7DQo+ID4gKyAgICAgICAgICAgbmV0aWZf c3RhcnRfcXVldWUobmRldik7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIHJldHVybiAwOw0K PiA+ICt9DQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BT KHhjYW5fZGV2X3BtX29wcywgeGNhbl9zdXNwZW5kLA0KPiB4Y2FuX3Jlc3VtZSk7DQo+ID4gKw0K PiA+ICsvKioNCj4gPiArICogeGNhbl9wcm9iZSAtIFBsYXRmb3JtIHJlZ2lzdHJhdGlvbiBjYWxs DQo+ID4gKyAqIEBwZGV2OiAgSGFuZGxlIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0dXJl DQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgdGhlIG1lbW9yeSBhbGxv Y2F0aW9uIGFuZCByZWdpc3RyYXRpb24gZm9yDQo+ID4gK3RoZSBDQU4NCj4gPiArICogZGV2aWNl Lg0KPiA+ICsgKg0KPiA+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBhbmQgZmFpbHVyZSB2YWx1 ZSBvbiBlcnJvciAgKi8gc3RhdGljIGludA0KPiA+ICt4Y2FuX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpIHsNCj4gPiArICAgc3RydWN0IHJlc291cmNlICpyZXM7IC8qIElPIG1l bSByZXNvdXJjZXMgKi8NCj4gPiArICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7DQo+ID4gKyAg IHN0cnVjdCB4Y2FuX3ByaXYgKnByaXY7DQo+ID4gKyAgIGludCByZXQsIHJ4X21heDsNCj4gPiAr DQo+ID4gKyAgIC8qIENyZWF0ZSBhIENBTiBkZXZpY2UgaW5zdGFuY2UgKi8NCj4gPiArICAgbmRl diA9IGFsbG9jX2NhbmRldihzaXplb2Yoc3RydWN0IHhjYW5fcHJpdiksDQo+IFhDQU5fRUNIT19T S0JfTUFYKTsNCj4NCj4gQ2FuIHlvdSByZWFyYW5nZSB5b3VyIGNvZGUsIHNvIHRoYXQgeW91IHVz ZSB0eC1maWZvLWRlcHRoIGluc3RlYWQgb2YgYSBoYXJkDQo+IGNvZGVkIHZhbHVlPw0KPg0KT2sN Cg0KDQoNCj4gPiArICAgaWYgKCFuZGV2KQ0KPiA+ICsgICAgICAgICAgIHJldHVybiAtRU5PTUVN Ow0KPiA+ICsNCj4gPiArICAgcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOw0KPiA+ICsgICBwcml2 LT5kZXYgPSBuZGV2Ow0KPiA+ICsgICBwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJnhjYW5f Yml0dGltaW5nX2NvbnN0Ow0KPiA+ICsgICBwcml2LT5jYW4uZG9fc2V0X21vZGUgPSB4Y2FuX2Rv X3NldF9tb2RlOw0KPiA+ICsgICBwcml2LT5jYW4uZG9fZ2V0X2JlcnJfY291bnRlciA9IHhjYW5f Z2V0X2JlcnJfY291bnRlcjsNCj4gPiArICAgcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9 IENBTl9DVFJMTU9ERV9MT09QQkFDSyB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HOw0KPiA+ICsNCj4gPiArICAgLyog R2V0IElSUSBmb3IgdGhlIGRldmljZSAqLw0KPiA+ICsgICBuZGV2LT5pcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxKHBkZXYsIDApOw0KPiA+ICsgICBuZGV2LT5mbGFncyB8PSBJRkZfRUNITzsgICAgICAg IC8qIFdlIHN1cHBvcnQgbG9jYWwgZWNobyAqLw0KPiA+ICsNCj4gPiArICAgcGxhdGZvcm1fc2V0 X2RydmRhdGEocGRldiwgbmRldik7DQo+ID4gKyAgIFNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2 LT5kZXYpOw0KPiA+ICsgICBuZGV2LT5uZXRkZXZfb3BzID0gJnhjYW5fbmV0ZGV2X29wczsNCj4g PiArDQo+ID4gKyAgIC8qIEdldCB0aGUgdmlydHVhbCBiYXNlIGFkZHJlc3MgZm9yIHRoZSBkZXZp Y2UgKi8NCj4gPiArICAgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsNCj4gPiArICAgcHJpdi0+cmVnX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoJnBkZXYtPmRldiwgcmVzKTsNCj4gPiArICAgaWYgKElTX0VSUihwcml2LT5yZWdfYmFzZSkp IHsNCj4gPiArICAgICAgICAgICByZXQgPSBQVFJfRVJSKHByaXYtPnJlZ19iYXNlKTsNCj4gPiAr ICAgICAgICAgICBnb3RvIGVycl9mcmVlOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICByZXQg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwZGV2LT5kZXYub2Zfbm9kZSwgInR4LWZpZm8tZGVwdGgi LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJpdi0+dHhfbWF4KTsNCj4gPiAr ICAgaWYgKHJldCA8IDApDQo+ID4gKyAgICAgICAgICAgZ290byBlcnJfZnJlZTsNCj4gPiArDQo+ ID4gKyAgIHJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBkZXYtPmRldi5vZl9ub2RlLCAicngt Zmlmby1kZXB0aCIsDQo+ICZyeF9tYXgpOw0KPiA+ICsgICBpZiAocmV0IDwgMCkNCj4gPiArICAg ICAgICAgICBnb3RvIGVycl9mcmVlOw0KPiA+ICsNCj4gPiArICAgLyogR2V0dGluZyB0aGUgQ0FO IGRldmNsayBpbmZvICovDQo+ID4gKyAgIHByaXYtPmRldmNsayA9IGRldm1fY2xrX2dldCgmcGRl di0+ZGV2LCAicmVmX2NsayIpOw0KPiA+ICsgICBpZiAoSVNfRVJSKHByaXYtPmRldmNsaykpIHsN Cj4gPiArICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJEZXZpY2UgY2xvY2sgbm90IGZv dW5kLlxuIik7DQo+ID4gKyAgICAgICAgICAgcmV0ID0gUFRSX0VSUihwcml2LT5kZXZjbGspOw0K PiA+ICsgICAgICAgICAgIGdvdG8gZXJyX2ZyZWU7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAg IC8qIENoZWNrIGZvciB0eXBlIG9mIENBTiBkZXZpY2UgKi8NCj4gPiArICAgaWYgKG9mX2Rldmlj ZV9pc19jb21wYXRpYmxlKHBkZXYtPmRldi5vZl9ub2RlLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInhsbngsenlucS1jYW4tMS4wMC5hIikpIHsNCj4gPiArICAgICAgICAg ICBwcml2LT5hcGVyY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhcGVyX2NsayIpOw0K PiA+ICsgICAgICAgICAgIGlmIChJU19FUlIocHJpdi0+YXBlcmNsaykpIHsNCj4gPiArICAgICAg ICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgImFwZXIgY2xvY2sgbm90IGZvdW5kXG4i KTsNCj4gPiArICAgICAgICAgICAgICAgICAgIHJldCA9IFBUUl9FUlIocHJpdi0+YXBlcmNsayk7 DQo+ID4gKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9mcmVlOw0KPiA+ICsgICAgICAgICAg IH0NCj4gPiArICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICBwcml2LT5hcGVyY2xrID0gcHJp di0+ZGV2Y2xrOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsgICByZXQgPSBjbGtfcHJlcGFyZV9l bmFibGUocHJpdi0+ZGV2Y2xrKTsNCj4gPiArICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAg IGRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBlbmFibGUgZGV2aWNlIGNsb2NrXG4iKTsN Cj4gPiArICAgICAgICAgICBnb3RvIGVycl9mcmVlOw0KPiA+ICsgICB9DQo+ID4gKw0KPiA+ICsg ICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+YXBlcmNsayk7DQo+ID4gKyAgIGlmIChy ZXQpIHsNCj4gPiArICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gZW5h YmxlIGFwZXIgY2xvY2tcbiIpOw0KPiA+ICsgICAgICAgICAgIGdvdG8gZXJyX3VucHJlcGFyX2Rp c2FibGVkZXY7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIHByaXYtPndyaXRlX3JlZyA9IHhj YW5fd3JpdGVfcmVnX2xlOw0KPiA+ICsgICBwcml2LT5yZWFkX3JlZyA9IHhjYW5fcmVhZF9yZWdf bGU7DQo+ID4gKw0KPiA+ICsgICBpZiAocHJpdi0+cmVhZF9yZWcocHJpdiwgWENBTl9TUl9PRkZT RVQpICE9DQo+IFhDQU5fU1JfQ09ORklHX01BU0spIHsNCj4gPiArICAgICAgICAgICBwcml2LT53 cml0ZV9yZWcgPSB4Y2FuX3dyaXRlX3JlZ19iZTsNCj4gPiArICAgICAgICAgICBwcml2LT5yZWFk X3JlZyA9IHhjYW5fcmVhZF9yZWdfYmU7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAgIHByaXYt PmNhbi5jbG9jay5mcmVxID0gY2xrX2dldF9yYXRlKHByaXYtPmRldmNsayk7DQo+ID4gKw0KPiA+ ICsgICBuZXRpZl9uYXBpX2FkZChuZGV2LCAmcHJpdi0+bmFwaSwgeGNhbl9yeF9wb2xsLCByeF9t YXgpOw0KPiA+ICsNCj4gPiArICAgcmV0ID0gcmVnaXN0ZXJfY2FuZGV2KG5kZXYpOw0KPiA+ICsg ICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbCB0 byByZWdpc3RlciBmYWlsZWQgKGVycj0lZClcbiIsDQo+IHJldCk7DQo+ID4gKyAgICAgICAgICAg Z290byBlcnJfdW5wcmVwYXJfZGlzYWJsZWFwZXI7DQo+ID4gKyAgIH0NCj4gPiArDQo+ID4gKyAg IGRldm1fY2FuX2xlZF9pbml0KG5kZXYpOw0KPiA+ICsgICBjbGtfZGlzYWJsZV91bnByZXBhcmUo cHJpdi0+YXBlcmNsayk7DQo+ID4gKyAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5kZXZj bGspOw0KPiA+ICsgICBuZXRkZXZfZGJnKG5kZXYsICJyZWdfYmFzZT0weCVwIGlycT0lZCBjbG9j az0lZCwgdHggZmlmbw0KPiBkZXB0aDolZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgIHBy aXYtPnJlZ19iYXNlLCBuZGV2LT5pcnEsIHByaXYtPmNhbi5jbG9jay5mcmVxLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgcHJpdi0+dHhfbWF4KTsNCj4gPiArDQo+ID4gKyAgIHJldHVybiAwOw0K PiA+ICsNCj4gPiArZXJyX3VucHJlcGFyX2Rpc2FibGVhcGVyOg0KPiAgICAgICAgdHlwbyBeXl5e ICAgICAgXl5eXiBjYW4geW91IGFkZCBhIF8NCj4NCj4gZXJyX3VucHJlcGFyZV9kaXNhYmxlX2Fw ZXI6DQpPayBXaWxsIGNoYW5nZS4NCg0KDQpSZWdhcmRzLA0KS2VkYXIuDQoNCg0KPg0KPiA+ICsg ICBjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+YXBlcmNsayk7DQo+ID4gK2Vycl91bnByZXBh cl9kaXNhYmxlZGV2Og0KPiA+ICsgICBjbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ZGV2Y2xr KTsNCj4gPiArZXJyX2ZyZWU6DQo+ID4gKyAgIGZyZWVfY2FuZGV2KG5kZXYpOw0KPiA+ICsNCj4g PiArICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHhjYW5f cmVtb3ZlIC0gVW5yZWdpc3RlciB0aGUgZGV2aWNlIGFmdGVyIHJlbGVhc2luZyB0aGUgcmVzb3Vy Y2VzDQo+ID4gKyAqIEBwZGV2OiAgSGFuZGxlIHRvIHRoZSBwbGF0Zm9ybSBkZXZpY2Ugc3RydWN0 dXJlDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gZnJlZXMgYWxsIHRoZSByZXNvdXJj ZXMgYWxsb2NhdGVkIHRvIHRoZSBkZXZpY2UuDQo+ID4gKyAqIFJldHVybjogMCBhbHdheXMNCj4g PiArICovDQo+ID4gK3N0YXRpYyBpbnQgeGNhbl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikgew0KPiA+ICsgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dl dF9kcnZkYXRhKHBkZXYpOw0KPiA+ICsgICBzdHJ1Y3QgeGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2 X3ByaXYobmRldik7DQo+ID4gKw0KPiA+ICsgICBpZiAoc2V0X3Jlc2V0X21vZGUobmRldikgPCAw KQ0KPiA+ICsgICAgICAgICAgIG5ldGRldl9lcnIobmRldiwgIm1vZGUgcmVzZXR0aW5nIGZhaWxl ZCFcbiIpOw0KPiA+ICsNCj4gPiArICAgdW5yZWdpc3Rlcl9jYW5kZXYobmRldik7DQo+ID4gKyAg IG5ldGlmX25hcGlfZGVsKCZwcml2LT5uYXBpKTsNCj4gPiArICAgZnJlZV9jYW5kZXYobmRldik7 DQo+ID4gKw0KPiA+ICsgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyogTWF0Y2gg dGFibGUgZm9yIE9GIHBsYXRmb3JtIGJpbmRpbmcgKi8gc3RhdGljIHN0cnVjdCBvZl9kZXZpY2Vf aWQNCj4gPiAreGNhbl9vZl9tYXRjaFtdID0gew0KPiA+ICsgICB7IC5jb21wYXRpYmxlID0gInhs bngsenlucS1jYW4tMS4wMC5hIiwgfSwNCj4gPiArICAgeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4 aS1jYW4tMS4wMC5hIiwgfSwNCj4gPiArICAgeyAvKiBlbmQgb2YgbGlzdCAqLyB9LA0KPiA+ICt9 Ow0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4Y2FuX29mX21hdGNoKTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHhjYW5fZHJpdmVyID0gew0KPiA+ICsg ICAucHJvYmUgPSB4Y2FuX3Byb2JlLA0KPiA+ICsgICAucmVtb3ZlID0geGNhbl9yZW1vdmUsDQo+ ID4gKyAgIC5kcml2ZXIgPSB7DQo+ID4gKyAgICAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUs DQo+ID4gKyAgICAgICAgICAgLm5hbWUgPSBEUklWRVJfTkFNRSwNCj4gPiArICAgICAgICAgICAu cG0gPSAmeGNhbl9kZXZfcG1fb3BzLA0KPiA+ICsgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9 IHhjYW5fb2ZfbWF0Y2gsDQo+ID4gKyAgIH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICttb2R1bGVf cGxhdGZvcm1fZHJpdmVyKHhjYW5fZHJpdmVyKTsNCj4gPiArDQo+ID4gK01PRFVMRV9MSUNFTlNF KCJHUEwiKTsNCj4gPiArTU9EVUxFX0FVVEhPUigiWGlsaW54IEluYyIpOw0KPiA+ICtNT0RVTEVf REVTQ1JJUFRJT04oIlhpbGlueCBDQU4gaW50ZXJmYWNlIik7DQo+ID4NCj4NCj4gTWFyYw0KPg0K PiAtLQ0KPiBQZW5ndXRyb25peCBlLksuICAgICAgICAgICAgICAgICAgfCBNYXJjIEtsZWluZS1C dWRkZSAgICAgICAgICAgfA0KPiBJbmR1c3RyaWFsIExpbnV4IFNvbHV0aW9ucyAgICAgICAgfCBQ aG9uZTogKzQ5LTIzMS0yODI2LTkyNCAgICAgfA0KPiBWZXJ0cmV0dW5nIFdlc3QvRG9ydG11bmQg ICAgICAgICAgfCBGYXg6ICAgKzQ5LTUxMjEtMjA2OTE3LTU1NTUgfA0KPiBBbXRzZ2VyaWNodCBI aWxkZXNoZWltLCBIUkEgMjY4NiAgfCBodHRwOi8vd3d3LnBlbmd1dHJvbml4LmRlICAgfA0KDQoN Cg0KVGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBpbnRlbmRlZCBmb3IgdGhlIHNv bGUgdXNlIG9mIHRoZSBuYW1lZCByZWNpcGllbnQocykgYW5kIGNvbnRhaW4ocykgY29uZmlkZW50 aWFsIGluZm9ybWF0aW9uIHRoYXQgbWF5IGJlIHByb3ByaWV0YXJ5LCBwcml2aWxlZ2VkIG9yIGNv cHlyaWdodGVkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5k ZWQgcmVjaXBpZW50LCBkbyBub3QgcmVhZCwgY29weSwgb3IgZm9yd2FyZCB0aGlzIGVtYWlsIG1l c3NhZ2Ugb3IgYW55IGF0dGFjaG1lbnRzLiBEZWxldGUgdGhpcyBlbWFpbCBtZXNzYWdlIGFuZCBh bnkgYXR0YWNobWVudHMgaW1tZWRpYXRlbHkuDQoNCgoK