From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyun Kwon Subject: Re: [PATCH v5 1/5] drm: xlnx: Xilinx DRM KMS module Date: Tue, 27 Feb 2018 18:15:30 -0800 Message-ID: <20180228021529.GA15210@smtp.xilinx.com> References: <1517967400-16993-1-git-send-email-hyun.kwon@xilinx.com> <1602665.SZ6qsW1oli@avalon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1602665.SZ6qsW1oli@avalon> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: "devicetree@vger.kernel.org" , Michal Simek , "dri-devel@lists.freedesktop.org" , Rob Herring , Daniel Vetter List-Id: devicetree@vger.kernel.org SGkgTGF1cmVudCwKCk9uIFdlZCwgMjAxOC0wMi0yMSBhdCAxNToxNzoyNSAtMDgwMCwgTGF1cmVu dCBQaW5jaGFydCB3cm90ZToKPiBIaSBIeXVuLAo+IAo+IFRoYW5rIHlvdSBmb3IgdGhlIHBhdGNo Lgo+IAo+IE9uIFdlZG5lc2RheSwgNyBGZWJydWFyeSAyMDE4IDAzOjM2OjM2IEVFVCBIeXVuIEt3 b24gd3JvdGU6Cj4gPiBYaWxpbnggaGFzIHZhcmlvdXMgcGxhdGZvcm1zIGZvciBkaXNwbGF5LCB3 aGVyZSB1c2VycyBjYW4gY3JlYXRlCj4gPiB1c2luZyBtdWx0aXBsZSBJUHMgaW4gdGhlIHByb2dy YW1tYWJsZSBGUEdBIGZhYnJpYywgb3Igd2hlcmUKPiA+IHNvbWUgaGFyZGVuZWQgcGllcGxpbmUg aXMgYXZhaWxhYmxlIG9uIHRoZSBjaGlwLiBGdXJ0aGVybW9yZSwKPiAKPiBzL3BpZXBsaW5lL3Bp cGVsaW5lLwo+IAoKV2lsbCBmaXguCgo+ID4gaGFyZGVuZWQgcGlwZWxpbmUgY2FuIGFsc28gaW50 ZXJhY3Qgd2l0aCBzb2Z0IGxvZ2ljcyBpbiBGUEdBLgo+ID4gCj4gPiBUaGUgWGlsaW54IERSTSBL TVMgbW9kdWxlIGlzIHRvIGludGVncmF0ZSBtdWx0aXBsZSBzdWJkZXZpY2VzIGFuZAo+ID4gdG8g cmVwcmVzZW50IHRoZSBlbnRpcmUgcGlwZWxpbmUgYXMgYSBzaW5nbGUgRFJNIGRldmljZS4gVGhl IG1vZHVsZQo+ID4gaW5jbHVkZXMgaGVscGVyIChleCwgZnJhbWVidWZmZXIgYW5kIGdlbSBoZWxw ZXJzKSBhbmQKPiA+IGdsdWUgbG9naWMgKGV4LCBjcnRjIGludGVyZmFjZSkgZnVuY3Rpb25zLgo+ ID4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBIeXVuIEt3b24gPGh5dW4ua3dvbkB4aWxpbnguY29tPgo+ ID4gQWNrZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gPiAt LS0KPiA+IHY1Cj4gPiAtIFJlZGVmaW5lIHhsbnhfcGlwZWxpbmVfaW5pdCgpCj4gPiB2NAo+ID4g LSBGaXggYSBidWcgaW4gb2YgZ3JhcGggYmluZGluZyBoYW5kbGluZwo+ID4gLSBSZW1vdmUgdmJs YW5rIGNhbGxiYWNrcyBmcm9tIHhsbnhfY3J0Ywo+ID4gLSBSZW1vdmUgdGhlIGR0IGJpbmRpbmcu IFRoaXMgbW9kdWxlIGJlY29tZXMgbW9yZSBsaWtlIGEgbGlicmFyeS4KPiA+IC0gUmVwaHJhc2Ug dGhlIGNvbW1pdCBtZXNzYWdlCj4gPiB2Mwo+ID4gLSBBZGQgTGF1cmVudCBhcyBhIG1haW50YWlu ZXIKPiA+IC0gRml4IG11bHRpcGxlLXJlZmVyZW5jZSBvbiBnZW0gb2JqZWN0cwo+ID4gdjIKPiA+ IC0gQ2hhbmdlIHRoZSBTUERYIGlkZW50aWZpZXIgZm9ybWF0Cj4gPiAtIE1lcmdlIHBhdGNoZXMo Y3J0YywgZ2VtLCBmYikgaW50byBzaW5nbGUgb25lCj4gPiB2MiBvZiB4bG54X2Rydgo+ID4gLSBS ZW5hbWUga21zIHRvIGRpc3BsYXkgaW4geGxueF9kcnYKPiA+IC0gUmVwbGFjZSBzb21lIHhsbngg c3BlY2lmaWMgZmIgaGVscGVyIHdpdGggY29tbW9uIGhlbHBlcnMgaW4geGxueF9kcnYKPiA+IC0g RG9uJ3Qgc2V0IHRoZSBjb21taXQgdGFpbCBjYWxsYmFjayBpbiB4bG54X2Rydgo+ID4gLSBTdXBw b3J0ICdwb3J0cycgZ3JhcGggYmluZGluZyBpbiB4bG54X2Rydgo+ID4gdjIgb2YgeGxueF9mYgo+ ID4gLSBSZW1vdmUgd3JhcHBlcnMgaW4geGxueF9mYgo+ID4gLSBSZXBsYWNlIHNvbWUgZnVuY3Rp b25zIHdpdGggZHJtIGNvcmUgaGVscGVycyBpbiB4bG54X2ZiCj4gPiAtLS0KPiA+IC0tLQo+ID4g IE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKPiA+ICBkcml2ZXJzL2dw dS9kcm0vS2NvbmZpZyAgICAgICAgICB8ICAgMiArCj4gPiAgZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L0tjb25maWcgICAg IHwgIDEyICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC9NYWtlZmlsZSAgICB8ICAgMiArCj4g PiAgZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmMgfCAxNzcgKysrKysrKysrKysrKysK PiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2NydGMuaCB8ICA3MCArKysrKysKPiA+ICBk cml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5jICB8IDUwMSArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5oICB8 ICAzMyArKysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMgICB8IDI5OCArKysr KysrKysrKysrKysrKysrKysrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZmIuaCAg IHwgIDMzICsrKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZ2VtLmMgIHwgIDQ3ICsr KysKPiA+ICBkcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2dlbS5oICB8ICAyNiArKwo+ID4gIDEz IGZpbGVzIGNoYW5nZWQsIDEyMTEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0veGxueC9LY29uZmlnCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS94bG54L01ha2VmaWxlCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5jCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfY3J0Yy5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL3hsbngveGxueF9kcnYuaAo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9mYi5oCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS94bG54L3hsbnhfZ2VtLmMKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL3hsbngveGxueF9nZW0uaAo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9N QUlOVEFJTkVSUwo+ID4gaW5kZXggNWJjMDg4Zi4uMDdjMGU3MyAxMDA2NDQKPiA+IC0tLSBhL01B SU5UQUlORVJTCj4gPiArKysgYi9NQUlOVEFJTkVSUwo+ID4gQEAgLTQ3ODksNiArNDc4OSwxNSBA QCBGOglkcml2ZXJzL2dwdS9kcm0vZXRuYXZpdi8KPiA+ICBGOglpbmNsdWRlL3VhcGkvZHJtL2V0 bmF2aXZfZHJtLmgKPiA+ICBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlz cGxheS9ldG5hdml2Lwo+ID4gCj4gPiArRFJNIERSSVZFUlMgRk9SIFhJTElOWAo+ID4gK006CUh5 dW4gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiArTToJTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ID4gK0w6CWRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKPiA+ICtTOglNYWludGFpbmVkCj4gPiArRjoJZHJpdmVycy9ncHUv ZHJtL3hsbngvCj4gPiArRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3Bs YXkveGxueC8KPiA+ICtUOglnaXQgZ2l0Oi8vYW5vbmdpdC5mcmVlZGVza3RvcC5vcmcvZHJtL2Ry bS1taXNjCj4gPiArCj4gPiAgRFJNIERSSVZFUlMgRk9SIFpURSBaWAo+ID4gIE06CVNoYXduIEd1 byA8c2hhd25ndW9Aa2VybmVsLm9yZz4KPiA+ICBMOglkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vS2NvbmZpZwo+ID4gaW5kZXggZGVlZWZhNy4uNWEzZWM2NiAxMDA2NDQKPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNl bnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwoKW3NuaXBdCgo+ ID4gKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgYW5kCj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFu ZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4g KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gCj4gWW91IGNhbiBkcm9wIHRob3NlIHR3byBwYXJhZ3JhcGhz IGFzIHlvdSBub3cgaGF2ZSBhbiBTUERYIGxpY2Vuc2UgaGVhZGVyLgo+IAoKQXQgdGhlIHRpbWUg b2Ygc3VibWlzc2lvbiwgaXQgd2Fzbid0IGNsZWFyIGhvdyB0byBwdXQgdGhpcywgYW5kIEkgd2Fz IHN1Z2dlc3RlZAp0byBkbyBpdCB0aGlzIHdheS4gSSBiZWxpZXZlIG5vdyBJIGNhbiByZW1vdmUs IHNvIEknbGwgcmVtb3ZlIGl0IGZyb20gYWxsLgoKPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybVAuaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPgo+ID4gKwo+ ID4gKyNpbmNsdWRlICJ4bG54X2NydGMuaCIKPiA+ICsjaW5jbHVkZSAieGxueF9kcnYuaCIKPiA+ ICsKPiA+ICsvKgo+ID4gKyAqIE92ZXJ2aWV3Cj4gPiArICogLS0tLS0tLS0KPiA+ICsgKgo+ID4g KyAqIFRoZSBYaWxpbnggQ1JUQyBsYXllciBpcyB0byBlbmFibGUgdGhlIGN1c3RvbSBpbnRlcmZh Y2UgdG8gQ1JUQyBkcml2ZXJzLgo+ID4gKyAqIFRoZSBpbnRlcmZhY2UgaXMgdXNlZCBieSBYaWxp bnggRFJNIGRyaXZlciB3aGVyZSBpdCBuZWVkcyBDUlRDCj4gPiArICogZnVuY3Rpb25haWx0eS4g Q1JUQyBkcml2ZXJzIHNob3VsZCBhdHRhY2ggdGhlIGRlc2lyZWQgY2FsbGJhY2tzCj4gCj4gcy9m dW5jdGlvbmFpbHR5L2Z1bmN0aW9uYWxpdHkvCj4gCj4gPiArICogdG8gc3RydWN0IHhsbnhfY3J0 YyBhbmQgcmVnaXN0ZXIgdGhlIHhsbnhfY3J0YyB3aXRoIGNvcnJlY3Nwb25kaW5nCj4gCj4gcy9j b3JyZWNzcG9uZGluZy9jb3JyZXNwb25kaW5nLwo+IAo+ID4gKyAqIGRybV9kZXZpY2UuIEl0J3Mg aGlnaGx5IHJlY29tbWVuZGVkIENSVEMgZHJpdmVycyByZWdpc3RlciBhbGwgY2FsbGJhY2tzCj4g PiArICogZXZlbiB0aG91Z2ggbWFueSBvZiB0aGVtIGFyZSBvcHRpb25hbC4KPiA+ICsgKiBUaGUg Q1JUQyBoZWxwZXIgc2ltcGx5IHdhbGtzIHRocm91Z2ggdGhlIHJlZ2lzdGVyZWQgQ1JUQyBkZXZp Y2UsCj4gPiArICogYW5kIGNhbGwgdGhlIGNhbGxiYWNrcy4KPiAKPiBzL2NhbGwvY2FsbHMvCj4g CgpXaWxsIGZpeCB0aGVzZS4KCj4gPiArICovCj4gPiArCj4gPiArLyoqCj4gPiArICogc3RydWN0 IHhsbnhfY3J0Y19oZWxwZXIgLSBYaWxpbnggQ1JUQyBoZWxwZXIKPiA+ICsgKiBAeGxueF9jcnRj czogbGlzdCBvZiBYaWxpbnggQ1JUQyBkZXZpY2VzCj4gPiArICogQGxvY2s6IGxvY2sgdG8gcHJv dGVjdCBAeGxueF9jcnRjcwo+ID4gKyAqIEBkcm06IGJhY2sgcG9pbnRlciB0byBEUk0gY29yZQo+ ID4gKyAqLwo+ID4gK3N0cnVjdCB4bG54X2NydGNfaGVscGVyIHsKPiA+ICsJc3RydWN0IGxpc3Rf aGVhZCB4bG54X2NydGNzOwo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsgLyogbG9jayBmb3IgQHhs bnhfY3J0Y3MgKi8KPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybTsKPiA+ICt9Owo+ID4gKwo+ ID4gKyNkZWZpbmUgWExOWF9DUlRDX01BWF9IRUlHSFRfV0lEVEgJVUlOVF9NQVgKPiA+ICsKPiA+ ICt1bnNpZ25lZCBpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfYWxpZ24oc3RydWN0IHhsbnhfY3J0 Y19oZWxwZXIgKmhlbHBlcikKPiAKPiBXb3VsZG4ndCB4bG54X2NydGNfaGVscGVyX2dldF9hbGln bm1lbnQoKSBiZSBjbGVhcmVyID8gJ2FsaWduJyBzb3VuZHMgbGlrZSBhIAo+IHZlcmIuCj4gCgpU aGUgRE1BIGVuZ2luZSB1c2VzIHNpbWlsYXIsIHNvIEkgdGhvdWdodCBpdCdzIHF1aXRlIGNvbW1v bi4gSSBjYW4gY2hhbmdlCmlmIHlvdSBzdGlsbCBzdWdnZXN0LCBvdGhlcndpc2UgSSdsbCBrZWVw IGl0IHRoaXMgd2F5LgoKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gPiAr CXVuc2lnbmVkIGludCBhbGlnbiA9IDEsIHRtcDsKPiA+ICsKPiA+ICsJbGlzdF9mb3JfZWFjaF9l bnRyeShjcnRjLCAmaGVscGVyLT54bG54X2NydGNzLCBsaXN0KSB7Cj4gCj4gWW91IGRvY3VtZW50 IGFib3ZlIHRoYXQgeGxueF9jcnRjcyBpcyBwcm90ZWN0ZWQgYnkgdGhlIGxvY2sgbXV0ZXgsIGJ1 dCB5b3UgCj4gZG9uJ3QgdGFrZSBpdCBoZXJlLiBJc24ndCB0aGF0IGFuIGlzc3VlID8KPiAKCkl0 J3MgZmluZSBjdXJyZW50bHkgYXMgY3J0YyByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24gaXMg ZG9uZSB3aXRoIGNvbXBvbmVudApiaW5kL3VuYmluZCwgc28gdGhlcmUncyBubyByYWNlIGZvciB0 aGUgZnVuY3Rpb25zIGNhbGxlZCBieSB4bG54IGRybS4gQnV0Cm5vdGhpbmcgcmVhbGx5IGVuZm9y Y2VzIGl0IGF0IHRoZSBBUEkgbGV2ZWwuIFNvIEknbGwgYWRkIGxvY2sgY2FsbHMuCgo+ID4gKwkJ aWYgKGNydGMtPmdldF9hbGlnbikgewo+IAo+IFlvdSBjYW4gZGVjbGFyZSB0aGUgdG1wIHZhcmlh YmxlIGhlcmUuIEFuZCAndG1wJyBpcyB1c3VhbGx5IGZyb3duZWQgdXBvbiBhcyBhIAo+IHZhcmlh YmxlIG5hbWUuIE9uZSBvcHRpb24gd291bGQgYmUgdG8gd3JpdGUgaXQgYWxsIGluIG9uZSBsaW5l Cj4gCj4gCQkJYWxpZ24gPSBBTElHTihhbGlnbiwgY3J0Yy0+Z2V0X2FsaWduKGNydGMpKTsKPiAK CldpbGwgZG8uCgo+ID4gKwkJCXRtcCA9IGNydGMtPmdldF9hbGlnbihjcnRjKTsKPiA+ICsJCQlh bGlnbiA9IEFMSUdOKGFsaWduLCB0bXApOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJl dHVybiBhbGlnbjsKPiA+ICt9Cj4gPiArCj4gPiArdTY0IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Rt YV9tYXNrKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpCj4gPiArewo+ID4gKwlzdHJ1 Y3QgeGxueF9jcnRjICpjcnRjOwo+ID4gKwl1NjQgbWFzayA9IERNQV9CSVRfTUFTSyhzaXplb2Yo ZG1hX2FkZHJfdCkgKiA4KSwgdG1wOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNy dGMsICZoZWxwZXItPnhsbnhfY3J0Y3MsIGxpc3QpIHsKPiA+ICsJCWlmIChjcnRjLT5nZXRfZG1h X21hc2spIHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRfZG1hX21hc2soY3J0Yyk7Cj4gPiArCQkJ bWFzayA9IG1pbihtYXNrLCB0bXApOwo+IAo+IFNhbWUgY29tbWVudHMgaGVyZS4KPiAKPiBBcyB0 aGUgRE1BIG1hc2sgaXMgYSBiaXRtYXNrIG9mIHRoZSBiaXRzIHRoYXQgY2FuIGJlIGRyaXZlbiBi eSB0aGUgRE1BIGVuZ2luZSwgCj4gd291bGRuJ3QgYSBsb2dpYyBhbmQgYmUgbW9yZSBhcHByb3By aWF0ZSB0aGFuIGEgbWluKCkgPwo+IAo+IAkJCW1hc2sgJj0gY3J0Yy0+Z2V0X2RtYV9tYXNrKGNy dGMpOwo+IAoKQWdyZWVkLiBXaWxsIGZpeC4KCj4gPiArCQl9Cj4gPiArCX0KPiA+ICsKPiA+ICsJ cmV0dXJuIG1hc2s7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9t YXhfd2lkdGgoc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIgKmhlbHBlcikKPiA+ICt7Cj4gPiArCXN0 cnVjdCB4bG54X2NydGMgKmNydGM7Cj4gPiArCXVuc2lnbmVkIGludCB3aWR0aCA9IFhMTlhfQ1JU Q19NQVhfSEVJR0hUX1dJRFRILCB0bXA7Cj4gPiArCj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnko Y3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ID4gKwkJaWYgKGNydGMtPmdldF9t YXhfd2lkdGgpIHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRfbWF4X3dpZHRoKGNydGMpOwo+ID4g KwkJCXdpZHRoID0gbWluKHdpZHRoLCB0bXApOwo+IAo+IFNhbWUgY29tbWVudHMgcmVnYXJkaW5n IHRoZSB0bXAgdmFyaWFibGUgYW5kIHRoZSBsaXN0IGxvY2tpbmcgaXNzdWUuCj4gCj4gPiArCQl9 Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIHdpZHRoOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQg eGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X2hlaWdodChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAq aGVscGVyKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfY3J0YyAqY3J0YzsKPiA+ICsJdW5zaWdu ZWQgaW50IGhlaWdodCA9IFhMTlhfQ1JUQ19NQVhfSEVJR0hUX1dJRFRILCB0bXA7Cj4gPiArCj4g PiArCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkg ewo+ID4gKwkJaWYgKGNydGMtPmdldF9tYXhfaGVpZ2h0KSB7Cj4gPiArCQkJdG1wID0gY3J0Yy0+ Z2V0X21heF9oZWlnaHQoY3J0Yyk7Cj4gPiArCQkJaGVpZ2h0ID0gbWluKGhlaWdodCwgdG1wKTsK PiAKPiBTYW1lIGNvbW1lbnRzIHJlZ2FyZGluZyB0aGUgdG1wIHZhcmlhYmxlIGFuZCB0aGUgbGlz dCBsb2NraW5nIGlzc3VlLgo+IAo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiBo ZWlnaHQ7Cj4gPiArfQo+ID4gKwo+ID4gK3VpbnQzMl90IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X2Zv cm1hdChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKQo+IAo+IFlvdSBjYW4gdXNlIHRo ZSB1MzIgdHlwZSB3aXRoaW4gdGhlIGtlcm5lbC4KPiAKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54 X2NydGMgKmNydGM7Cj4gPiArCXUzMiBmb3JtYXQgPSAwLCB0bXA7Cj4gPiArCj4gPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnkoY3J0YywgJmhlbHBlci0+eGxueF9jcnRjcywgbGlzdCkgewo+ID4gKwkJ aWYgKGNydGMtPmdldF9mb3JtYXQpIHsKPiA+ICsJCQl0bXAgPSBjcnRjLT5nZXRfZm9ybWF0KGNy dGMpOwo+ID4gKwkJCWlmIChmb3JtYXQgJiYgZm9ybWF0ICE9IHRtcCkKPiA+ICsJCQkJcmV0dXJu IDA7Cj4gPiArCQkJZm9ybWF0ID0gdG1wOwo+IAo+IFNhbWUgY29tbWVudHMgcmVnYXJkaW5nIHRo ZSB0bXAgdmFyaWFibGUgYW5kIHRoZSBsaXN0IGxvY2tpbmcgaXNzdWUuCj4gCj4gPiArCQl9Cj4g PiArCX0KPiA+ICsKPiA+ICsJcmV0dXJuIGZvcm1hdDsKPiAKPiBEb2VzIHRoaXMgbWVhbiB0aGF0 IHlvdXIgQ1JUQ3Mgc3VwcG9ydCBhIHNpbmdsZSBmb3JtYXQgZWFjaCBvbmx5ID8KPiAKClRoaXMg ZnVuY3Rpb24gcmV0dXJucyBhIGN1cnJlbnQgZm9ybWF0LCB0aGVuIG1haW5seSB1c2VkIGZvciBm YmRldiBlbXVsYXRpb24uCgo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBl ciAqeGxueF9jcnRjX2hlbHBlcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ ID4gKwlzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyOwo+ID4gKwo+ID4gKwloZWxwZXIg PSBkZXZtX2t6YWxsb2MoZHJtLT5kZXYsIHNpemVvZigqaGVscGVyKSwgR0ZQX0tFUk5FTCk7Cj4g PiArCWlmICghaGVscGVyKQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gCj4gRG8g eW91IG5lZWQgdG8gYWxsb2NhdGUgdGhlIHhsbnhfY3J0Y19oZWxwZXIgc3RydWN0dXJlIHNlcGFy YXRlbHkgZnJvbSB0aGUgCj4geGxueF9kcm0gc3RydWN0dXJlLCBjb3VsZG4ndCB5b3UgZW1iZWQg aXQgaW5zdGVhZCBvZiBzdG9yaW5nIGEgcG9pbnRlciA/IFllcywgCj4gdGhhdCB3b3VsZCBtZWFu IGV4cG9zaW5nIHRoZSBzdHJ1Y3R1cmUgaW4gYSBoZWFkZXIgZmlsZSwgYnV0IEkgZG9uJ3QgdGhp bmsgaXQgCj4gd291bGQgYmUgbXVjaCBvZiBhIHByb2JsZW0uCgpJdCdzIG15IHBlcnNvbmFsIHBy ZWZlcmVuY2Ugbm90IHRvIGV4cG9zZSBzdHJ1Y3R1cmVzIGJldHdlZW4gZmlsZXMsIGJ1dCBtYXli ZQppdCdzIGp1c3QgbWUuIDotKSBJJ2xsIGVtYmVkIGl0IGFzIHlvdSBzdWdnZXN0Lgo+IAo+ID4g KwlJTklUX0xJU1RfSEVBRCgmaGVscGVyLT54bG54X2NydGNzKTsKPiA+ICsJbXV0ZXhfaW5pdCgm aGVscGVyLT5sb2NrKTsKPiA+ICsJaGVscGVyLT5kcm0gPSBkcm07Cj4gPiArCj4gPiArCXJldHVy biBoZWxwZXI7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgeGxueF9jcnRjX2hlbHBlcl9maW5pKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gPiArCQkJICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KmhlbHBlcikKPiA+ICt7Cj4gPiArCWlmIChXQVJOX09OKGhlbHBlci0+ZHJtICE9IGRybSkpCj4g PiArCQlyZXR1cm47Cj4gCj4gVW5sZXNzIEknbSBtaXN0YWtlbiB0aGUgaGVscGVyLT5kcm0gZmll bGQgaXMgb25seSB1c2VkIGhlcmUsIGFuZCBJIGRvbid0IHNlZSAKPiBob3cgdGhpcyBjb25kaXRp b24gY291bGQgYmUgdHJ1ZS4gSSdkIGRyb3AgYm90aCB0aGUgY29uZGl0aW9uIGFuZCB0aGUgZmll bGQuCj4gCgpXaWxsIGRvLgoKPiA+ICsJaWYgKFdBUk5fT04oIWxpc3RfZW1wdHkoJmhlbHBlci0+ eGxueF9jcnRjcykpKQo+ID4gKwkJcmV0dXJuOwo+IAo+IENhbiB0aGlzIGhhcHBlbiA/Cj4gCgpF bnRyaWVzIGluIHRoaXMgbGlzdCBhcmUgcmVnaXN0ZXJlZCBieSBleHRlcm5hbCBkcml2ZXIocyks IHNvIEknZCBsaWtlIHRvIGtlZXAKdGhpcyBjaGVjayB0byBub3RpZnkgaWYgYW55IG9mIGRyaXZl cnMgZG9lcyBzb21lIHdyb25nLgoKPiA+ICsJbXV0ZXhfZGVzdHJveSgmaGVscGVyLT5sb2NrKTsK PiA+ICsJZGV2bV9rZnJlZShkcm0tPmRldiwgaGVscGVyKTsKPiAKPiBJZiB5b3UgZnJlZSB0aGUg bWVtb3J5IGV4cGxpY2l0bHkgeW91IHNob3VsZG4ndCB1c2UgZGV2bV9remFsbG9jKCkgaW4gdGhl IAo+IGZpcnN0IHBsYWNlLCB5b3UgY2FuIHVzZSB0aGUgcGxhaW4ga3phbGxvYygpIGZ1bmN0aW9u IGluc3RlYWQuCj4gCgpUaGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBjaGFuZ2UgYWJvdmUu Cgo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIHhsbnhfY3J0Y19yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rl dmljZSAqZHJtLCBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhs bnhfY3J0Y19oZWxwZXIgKmhlbHBlciA9IHhsbnhfZ2V0X2NydGNfaGVscGVyKGRybSk7Cj4gPiAr Cj4gPiArCW11dGV4X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gPiArCWxpc3RfYWRkX3RhaWwoJmNy dGMtPmxpc3QsICZoZWxwZXItPnhsbnhfY3J0Y3MpOwo+ID4gKwltdXRleF91bmxvY2soJmhlbHBl ci0+bG9jayk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfY3J0Y19yZWdpc3Rl cik7Cj4gPiArCj4gPiArdm9pZCB4bG54X2NydGNfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZHJtLCBzdHJ1Y3QgeGxueF9jcnRjICpjcnRjKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhf Y3J0Y19oZWxwZXIgKmhlbHBlciA9IHhsbnhfZ2V0X2NydGNfaGVscGVyKGRybSk7Cj4gPiArCj4g PiArCW11dGV4X2xvY2soJmhlbHBlci0+bG9jayk7Cj4gPiArCWxpc3RfZGVsKCZjcnRjLT5saXN0 KTsKPiA+ICsJbXV0ZXhfdW5sb2NrKCZoZWxwZXItPmxvY2spOwo+ID4gK30KPiA+ICtFWFBPUlRf U1lNQk9MX0dQTCh4bG54X2NydGNfdW5yZWdpc3Rlcik7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3hsbngveGxueF9jcnRjLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxu eF9jcnRjLmggbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLmJmZjVlM2QK PiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfY3J0 Yy5oCj4gPiBAQCAtMCwwICsxLDcwIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAqIFhpbGlueCBEUk0gY3J0YyBoZWFkZXIKPiA+ICsgKgo+ ID4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTcgLSAyMDE4IFhpbGlueCwgSW5jLgo+ID4gKyAqCj4g PiArICogIEF1dGhvcjogSHl1biBXb28gS3dvbiA8aHl1bi5rd29uQHhpbGlueC5jb20+Cj4gPiAr ICoKPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiA+ICsgKiBtYXkgYmUg Y29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ID4g KyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gPiArICogR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiAKPiBZb3UgY2FuIGRy b3AgdGhlc2UgdHdvIHBhcmFncmFwaHMgaGVyZSB0b28uCj4gCj4gPiArICovCj4gPiArCj4gPiAr I2lmbmRlZiBfWExOWF9DUlRDX0hfCj4gPiArI2RlZmluZSBfWExOWF9DUlRDX0hfCj4gPiArCj4g PiArLyoqCj4gPiArICogc3RydWN0IHhsbnhfY3J0YyAtIFhpbGlueCBDUlRDIGRldmljZQo+ID4g KyAqIEBjcnRjOiBEUk0gQ1JUQyBkZXZpY2UKPiA+ICsgKiBAbGlzdDogbGlzdCBub2RlIGZvciBY aWxpbnggQ1JUQyBkZXZpY2UgbGlzdAo+ID4gKyAqIEBnZXRfYWxpZ246IEdldCB0aGUgYWxpZ25t ZW50IHJlcXVpcmVtZW50IG9mIENSVEMgZGV2aWNlCj4gPiArICogQGdldF9kbWFfbWFzazogR2V0 IHRoZSBkbWEgbWFzayBvZiBDUlRDIGRldmljZQo+ID4gKyAqIEBnZXRfbWF4X3dpZHRoOiBHZXQg dGhlIG1heGltdW0gc3VwcG9ydGVkIHdpZHRoCj4gPiArICogQGdldF9tYXhfaGVpZ2h0OiBHZXQg dGhlIG1heGltdW0gc3VwcG9ydGVkIGhlaWdodAo+ID4gKyAqIEBnZXRfZm9ybWF0OiBHZXQgdGhl IGN1cnJlbnQgZm9ybWF0IG9mIENSVEMgZGV2aWNlCj4gPiArICovCj4gPiArc3RydWN0IHhsbnhf Y3J0YyB7Cj4gPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7Cj4gPiArCXVuc2lnbmVkIGludCAoKmdldF9hbGlnbikoc3RydWN0IHhsbnhfY3J0YyAq Y3J0Yyk7Cj4gPiArCXU2NCAoKmdldF9kbWFfbWFzaykoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7 Cj4gPiArCWludCAoKmdldF9tYXhfd2lkdGgpKHN0cnVjdCB4bG54X2NydGMgKmNydGMpOwo+ID4g KwlpbnQgKCpnZXRfbWF4X2hlaWdodCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gPiArCXVp bnQzMl90ICgqZ2V0X2Zvcm1hdCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gCj4gUGxlYXNl IG1vdmUgYWxsIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIGEgc2VwYXJhdGUgb3BzIHN0cnVjdHVyZSB0 aGF0IGNhbiBiZSAKPiBkZWNsYXJlZCBjb25zdC4gTm9uLWNvbnN0IGZ1bmN0aW9uIHBvaW50ZXJz IG1ha2UgaXQgZWFzaWVyIHRvIGV4cGxvaXQgdGhlIAo+IGtlcm5lbCBpZiBhIGJ1ZyBlbmRzIHVw IGFsbG93aW5nIHVzZXJzcGFjZSB0byBvdmVycmlkZSB0aGUgdmFsdWUgb2YgdGhlIAo+IHBvaW50 ZXJzLiBUaGV5IGFyZSB0aHVzIGNvbnNpZGVyZWQgYXMgYSBzZWN1cml0eSBpc3N1ZS4KPiAKPiBz dHJ1Y3QgeGxueF9jcnRjX29wcyB7Cj4gCXU2NCAoKmdldF9kbWFfbWFzaykoc3RydWN0IHhsbnhf Y3J0YyAqY3J0Yyk7Cj4gCWludCAoKmdldF9tYXhfd2lkdGgpKHN0cnVjdCB4bG54X2NydGMgKmNy dGMpOwo+IAlpbnQgKCpnZXRfbWF4X2hlaWdodCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4g CXVpbnQzMl90ICgqZ2V0X2Zvcm1hdCkoc3RydWN0IHhsbnhfY3J0YyAqY3J0Yyk7Cj4gfTsKPiAK PiBzdHJ1Y3QgeGxueF9jcnRjIHsKPiAJc3RydWN0IGRybV9jcnRjIGNydGM7Cj4gCXN0cnVjdCBs aXN0X2hlYWQgbGlzdDsKPiAJY29uc3Qgc3RydWN0IHhsbnhfY3J0Y19vcHMgKm9wczsKPiB9OwoK V2lsbCBkby4KCj4gCj4gPiArfTsKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIEhlbHBlciBmdW5jdGlv bnM6IHVzZWQgd2l0aGluIFhsbnggRFJNCj4gPiArICovCj4gPiArCj4gPiArc3RydWN0IHhsbnhf Y3J0Y19oZWxwZXI7Cj4gPiArCj4gPiArdW5zaWduZWQgaW50IHhsbnhfY3J0Y19oZWxwZXJfZ2V0 X2FsaWduKHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ID4gK3U2NCB4bG54X2Ny dGNfaGVscGVyX2dldF9kbWFfbWFzayhzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKTsK PiA+ICtpbnQgeGxueF9jcnRjX2hlbHBlcl9nZXRfbWF4X3dpZHRoKHN0cnVjdCB4bG54X2NydGNf aGVscGVyICpoZWxwZXIpOwo+ID4gK2ludCB4bG54X2NydGNfaGVscGVyX2dldF9tYXhfaGVpZ2h0 KHN0cnVjdCB4bG54X2NydGNfaGVscGVyICpoZWxwZXIpOwo+ID4gK3VpbnQzMl90IHhsbnhfY3J0 Y19oZWxwZXJfZ2V0X2Zvcm1hdChzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqaGVscGVyKTsKPiA+ ICsKPiA+ICtzdHJ1Y3QgeGxueF9jcnRjX2hlbHBlciAqeGxueF9jcnRjX2hlbHBlcl9pbml0KHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3ZvaWQgeGxueF9jcnRjX2hlbHBlcl9maW5pKHN0 cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gPiArCQkJICAgc3RydWN0IHhsbnhfY3J0Y19oZWxwZXIg KmhlbHBlcik7Cj4gPiArCj4gPiArLyoKPiA+ICsgKiBDUlRDIHJlZ2lzdHJhdGlvbjogdXNlZCBi eSBvdGhlciBzdWItZHJpdmVyIG1vZHVsZXMKPiA+ICsgKi8KPiA+ICsKPiA+ICtzdGF0aWMgaW5s aW5lIHN0cnVjdCB4bG54X2NydGMgKnRvX3hsbnhfY3J0YyhzdHJ1Y3QgZHJtX2NydGMgKmNydGMp Cj4gPiArewo+ID4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNydGMsIHN0cnVjdCB4bG54X2NydGMs IGNydGMpOwo+ID4gK30KPiAKPiBJJ2QgZGVjbGFyZSB0aGlzIGZ1bmN0aW9uIHJpZ2h0IGFmdGVy IHRoZSB4bG54X2NydGMgc3RydWN0dXJlLCBJIGZpbmQgaXQgbW9yZSAKPiBleHBsaWNpdCBpZiB0 aGUgc3RydWN0dXJlIGFuZCB0aGUgY2FzdCBoZWxwZXIgYXJlIGdyb3VwZWQgdG9nZXRoZXIuCj4g CgpTdXJlIHdpbGwgZG8uCgo+ID4gK3ZvaWQgeGxueF9jcnRjX3JlZ2lzdGVyKHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0sIHN0cnVjdCB4bG54X2NydGMgKmNydGMpOwo+ID4gK3ZvaWQgeGxueF9jcnRj X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IHhsbnhfY3J0YyAqY3J0 Yyk7Cj4gPiArCj4gPiArI2VuZGlmIC8qIF9YTE5YX0NSVENfSF8gKi8KPiA+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2Rydi5jCj4gPiBiL2RyaXZlcnMvZ3B1L2RybS94 bG54L3hsbnhfZHJ2LmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAuLjhm MGUzNTcKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS94bG54L3hs bnhfZHJ2LmMKPiA+IEBAIC0wLDAgKzEsNTAxIEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAqIFhpbGlueCBEUk0gS01TIERyaXZlcgo+ID4g KyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiAr ICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4K PiA+ICsgKgo+ID4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ID4gKyAqIG1h eSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMu Cj4gPiArICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiA+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IAo+IFNhbWUg Y29tbWVudCBhcyBhYm92ZSBmb3IgdGhvc2UgdHdvIHBhcmFncmFwaHMuCj4gCj4gPiArICovCj4g PiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRv bWljLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNs dWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVs cGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5j bHVkZSA8ZHJtL2RybV9vZi5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Rt YS1idWYuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX2dyYXBoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ ID4gKyNpbmNsdWRlIDxsaW51eC9yZXNlcnZhdGlvbi5oPgo+IAo+IFlvdSBkb24ndCBzZWVtIHRv IHVzZSByZXNlcnZhdGlvbiBvYmplY3RzLCBkbyB5b3UgbmVlZCB0aGlzIGhlYWRlciA/Cj4gCgpB Z3JlZWQuIEkgZG9uJ3Qga25vdyBob3cgaXQgZ290IGluIHRoZXJlLgoKPiA+ICsjaW5jbHVkZSAi eGxueF9jcnRjLmgiCj4gPiArI2luY2x1ZGUgInhsbnhfZmIuaCIKPiA+ICsjaW5jbHVkZSAieGxu eF9nZW0uaCIKPiA+ICsKPiA+ICsjZGVmaW5lIERSSVZFUl9OQU1FCSJ4bG54Igo+ID4gKyNkZWZp bmUgRFJJVkVSX0RFU0MJIlhpbGlueCBEUk0gS01TIERyaXZlciIKPiA+ICsjZGVmaW5lIERSSVZF Ul9EQVRFCSIyMDEzMDUwOSIKPiAKPiBBbmQgdGhpcyBzaG93cyBob3cgdXNlbGVzcyBhIGRhdGUg ZmllbGQgaXMgaW4gc3VjaCBhIHVzZXJzcGFjZSBBUEkgOi0pCj4gCj4gPiArI2RlZmluZSBEUklW RVJfTUFKT1IJMQo+ID4gKyNkZWZpbmUgRFJJVkVSX01JTk9SCTAKPiA+ICsKPiA+ICtzdGF0aWMg dWludCB4bG54X2ZiZGV2X3ZyZXMgPSAyOwo+IAo+IHMvdWludC91bnNpZ25lZCBpbnQvCj4gCj4g PiArbW9kdWxlX3BhcmFtX25hbWVkKGZiZGV2X3ZyZXMsIHhsbnhfZmJkZXZfdnJlcywgdWludCwg MDQ0NCk7Cj4gPiArTU9EVUxFX1BBUk1fREVTQyhmYmRldl92cmVzLAo+ID4gKwkJICJmYmRldiB2 aXJ0dWFsIHJlc29sdXRpb24gbXVsdGlwbGllciBmb3IgZmIgKGRlZmF1bHQ6IDIpIik7Cj4gCj4g VGhlcmUncyBhIHNpbWlsYXIgbWVjaGFuaXNtIGluIHRoZSBrZXJuZWwgYWxyZWFkeSBpbiB0aGUg Zm9ybSBvZiAKPiBDT05GSUdfRFJNX0ZCREVWX09WRVJBTExPQyBhbmQgdGhlIGRybV9mYmRldl9v dmVyYWxsb2MgbW9kdWxlIHBhcmFtZXRlci4gCj4gQ291bGRuJ3QgeW91IHVzZSB0aGF0IGluc3Rl YWQgb2YgaW1wbGVtZW50aW5nIGEgY3VzdG9tIG9uZSA/Cj4gCgpUaGFua3MhIEknbGwgcmVtb3Zl IHRoaXMgbW9kdWxlIHBhcmFtIHdpdGggdGhpcy4gT25lIHRoaW5nIEkgbm90aWNlZCB3YXMKdGhl IG92ZXJhbGxvY2F0aW9uIGRvZXNuJ3Qgc2VlbSB0byBnaXZlIGNvcnJlY3QgdnJlcyB2YWx1ZS4g SSBjYW4gaGFuZGxlCnRoaXMgd2l0aGluIFhpbGlueCBkcml2ZXIgZm9yIG5vdywgYXMgSSBwcmVm ZXIgdG8gc2VsZi1jb250YWluIGNoYW5nZXMgd2l0aGluCnRoaXMgcGF0Y2ggZm9yIGluaXRpYWwg dXBzdHJlYW1pbmcsIGFuZCB3aWxsIHJldmlzaXQgaWYgdGhpcyBjYW4gYmUgaGFuZGxlZCBpbgp0 aGUgZHJtIGZiIGhlbHBlciwgZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcigpLgoKPiA+ICsvKioKPiA+ ICsgKiBzdHJ1Y3QgeGxueF9kcm0gLSBYaWxpbnggRFJNIHByaXZhdGUgZGF0YQo+ID4gKyAqIEBk cm06IERSTSBjb3JlCj4gCj4gcy9jb3JlL2RldmljZS8KPiAKClN1cmUuCgo+ID4gKyAqIEBjcnRj OiBYaWxpbnggRFJNIENSVEMgaGVscGVyCj4gCj4gSSdtIHRlbXB0ZWQgdG8gcmVuYW1lIHRoaXMg ZmllbGQgdG8gY3J0Y3MsIG90aGVyd2lzZSB3aGVuIHJlYWRpbmcgdGhlIGNvZGUgaXQgCj4gbG9v a3MgbGlrZSBpdCBwb2ludHMgdG8gYSBzaW5nbGUgQ1JUQy4KPiAKCk15IHZpZXcgaXMgdGhpcyBp cyBhIGhlbHBlciB0aGF0IHRha2VzIGNhcmUgb2YgbXVsdGlwbGUgWGlsaW54IGNydGMgZGV2aWNl cy4KSSdsbCByZW5hbWUgdG8gY3J0Y19oZWxwZXIgYW5kIHVwZGF0ZSB0aGUgZGVzY3JpcHRpb246 CgoJQGNydGNfaGVscGVyOiBIZWxwZXIgdG8gYWNjZXNzIFhpbGlueCBDUlRDcwoKPiA+ICsgKiBA ZmI6IERSTSBmYiBoZWxwZXIKPiA+ICsgKiBAbWFzdGVyOiBsb2dpY2FsIG1hc3RlciBkZXZpY2Ug Zm9yIHBpcGVsaW5lCj4gPiArICogQHN1c3BlbmRfc3RhdGU6IGF0b21pYyBzdGF0ZSBmb3Igc3Vz cGVuZCAvIHJlc3VtZQo+ID4gKyAqLwo+ID4gK3N0cnVjdCB4bG54X2RybSB7Cj4gPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm07Cj4gPiArCXN0cnVjdCB4bG54X2NydGNfaGVscGVyICpjcnRjOwo+ ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmI7Cj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKm1hc3RlcjsKPiAKPiBJJ2Qgc3RvcmUgdGhpcyBhcyBhIHN0cnVjdCBkZXZpY2UgaW5zdGVh ZCBhcyB5b3UgbmV2ZXIgbWFrZSB1c2Ugb2YgdGhlIAo+IHBsYXRmb3JtIGRldmljZSBpdHNlbGYg KHRoZSBvbmx5IGxvY2F0aW9uIHdoZXJlIHlvdSB1c2UgdGhpcyBmaWVsZCBpcyB0byAKPiBhY2Nl c3MgbWFzdGVyLT5kZXYpLgo+IAoKQWdyZWVkLiBXaWxsIGNoYW5nZSB0byBkZXZpY2UuCgo+ID4g KwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3VzcGVuZF9zdGF0ZTsKPiA+ICt9Owo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIHhsbnhfZ2V0X2NydGNfaGVscGVyIC0gUmV0dXJuIHRoZSBjcnRjIGhl bHBlciBpbnN0YW5jZQo+ID4gKyAqIEBkcm06IERSTSBkZXZpY2UKPiA+ICsgKgo+ID4gKyAqIFJl dHVybjogdGhlIGNydGMgaGVscGVyIGluc3RhbmNlCj4gPiArICovCj4gPiArc3RydWN0IHhsbnhf Y3J0Y19oZWxwZXIgKnhsbnhfZ2V0X2NydGNfaGVscGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0p Cj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0 ZTsKPiA+ICsKPiA+ICsJcmV0dXJuIHhsbnhfZHJtLT5jcnRjOwo+ID4gK30KPiA+ICsKPiA+ICsv KioKPiA+ICsgKiB4bG54X2dldF9hbGlnbiAtIFJldHVybiB0aGUgYWxpZ24gcmVxdWlyZW1lbnQg dGhyb3VnaCBDUlRDIGhlbHBlcgo+ID4gKyAqIEBkcm06IERSTSBkZXZpY2UKPiA+ICsgKgo+ID4g KyAqIFJldHVybjogdGhlIGFsaWdubWVudCByZXF1aXJlbWVudAo+ID4gKyAqLwo+ID4gK3Vuc2ln bmVkIGludCB4bG54X2dldF9hbGlnbihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCj4g PiArCXJldHVybiB4bG54X2NydGNfaGVscGVyX2dldF9hbGlnbih4bG54X2RybS0+Y3J0Yyk7Cj4g PiArfQo+IAo+IEknbSB0ZW1wdGVkIHRvIGV4cG9zZSB0aGUgeGxueF9kcm0gc3RydWN0dXJlIGlu IGEgaGVhZGVyIGFuZCBtYWtlIHRoZXNlIHR3byAKPiBoZWxwZXIgZnVuY3Rpb25zIGlubGluZSwg YnV0IHRoYXQncyB1cCB0byB5b3UuCj4gCj4gPiArLyoqCj4gPiArICogeGxueF9nZXRfZm9ybWF0 IC0gUmV0dXJuIHRoZSBjdXJyZW50IGZvcm1hdCBvZiBDUlRDCj4gPiArICogQGRybTogRFJNIGRl dmljZQo+ID4gKyAqCj4gPiArICogUmV0dXJuOiB0aGUgY3VycmVudCBDUlRDIGZvcm1hdAo+ID4g KyAqLwo+ID4gK3VpbnQzMl90IHhsbnhfZ2V0X2Zvcm1hdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZh dGU7Cj4gPiArCj4gPiArCXJldHVybiB4bG54X2NydGNfaGVscGVyX2dldF9mb3JtYXQoeGxueF9k cm0tPmNydGMpOwo+ID4gK30KPiAKPiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGlzIGZ1bmN0aW9u IGlzIG5ldmVyIHVzZWQuCj4gCgpJIG5vdGljZWQgdGhhdCB0b28uIFJlbW92ZWQuCgo+ID4gK3N0 YXRpYyB2b2lkIHhsbnhfb3V0cHV0X3BvbGxfY2hhbmdlZChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZh dGU7Cj4gPiArCj4gPiArCWlmICh4bG54X2RybS0+ZmIpCj4gPiArCQlkcm1fZmJfaGVscGVyX2hv dHBsdWdfZXZlbnQoeGxueF9kcm0tPmZiKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgeGxueF9tb2RlX2NvbmZpZ19mdW5jcyA9IHsK PiA+ICsJLmZiX2NyZWF0ZQkJPSB4bG54X2ZiX2NyZWF0ZSwKPiA+ICsJLm91dHB1dF9wb2xsX2No YW5nZWQJPSB4bG54X291dHB1dF9wb2xsX2NoYW5nZWQsCj4gPiArCS5hdG9taWNfY2hlY2sJCT0g ZHJtX2F0b21pY19oZWxwZXJfY2hlY2ssCj4gPiArCS5hdG9taWNfY29tbWl0CQk9IGRybV9hdG9t aWNfaGVscGVyX2NvbW1pdCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfbW9k ZV9jb25maWdfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ID4gK3sKPiA+ICsJc3RydWN0 IHhsbnhfZHJtICp4bG54X2RybSA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gPiArCXN0cnVjdCB4bG54 X2NydGNfaGVscGVyICpjcnRjID0geGxueF9kcm0tPmNydGM7Cj4gPiArCj4gPiArCWRybS0+bW9k ZV9jb25maWcubWluX3dpZHRoID0gMDsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0 ID0gMDsKPiA+ICsJZHJtLT5tb2RlX2NvbmZpZy5tYXhfd2lkdGggPSB4bG54X2NydGNfaGVscGVy X2dldF9tYXhfd2lkdGgoY3J0Yyk7Cj4gPiArCWRybS0+bW9kZV9jb25maWcubWF4X2hlaWdodCA9 IHhsbnhfY3J0Y19oZWxwZXJfZ2V0X21heF9oZWlnaHQoY3J0Yyk7Cj4gCj4gVGhpcyBpcyBpbnRl cmVzdGluZy4gWW91ciB0d28gaGVscGVyIGZ1bmN0aW9ucyB3aWxsIHJldHVybiB0aGUgbWluaW11 bSBvZiB0aGUgCj4gc2l6ZXMgc3VwcG9ydGVkIGJ5IHRoZSBDUlRDcywgZW5zdXJpbmcgdGhhdCB1 c2Vyc3BhY2Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIAo+IERSTSBkZXZpY2UgdGhhdCBjYW4n dCBleGNlZWQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgQ1JUQ3MuIEhvd2V2ZXIsIHRoYXQgd2ls bCAKPiBhbHNvIGFydGlmaWNpYWxseSBsaW1pdCB0aGUgZGV2aWNlLCBhcyBmcm9tIGEgS01TIHBv aW50IG9mIHZpZXcgdGhlcmUncyBubyAKPiBpc3N1ZSB3aXRoIHNldHRpbmcgZGlmZmVyZW50IHJl c29sdXRpb25zIG9uIGRpZmZlcmVudCBDUlRDcy4KPiAKPiBUaGUgbW9kZV9jb25maWcgbWF4X3dp ZHRoIGFuZCBtYXhfaGVpZ2h0IHZhbHVlcyBhcmUgdXNlZCBmb3IgYSBmZXcgZGlmZmVyZW50IAo+ IHB1cnBvc2VzLiBPbmUgb2YgdGhlbSBpcyB0byByZWplY3QgZnJhbWVidWZmZXIgY3JlYXRpb24g d2l0aCByZXNvbHV0aW9ucyB0aGF0IAo+IGFyZSB0b28gbGFyZ2UgZm9yIHRoZSBoYXJkd2FyZS4g QW5vdGhlciBvbmUgaXMgdG8gcmVqZWN0IG1vZGVzIGxhcmdlciB0aGFuIAo+IHdoYXQgdGhlIGhh cmR3YXJlIHN1cHBvcnRzLiBBIHRoaXJkIG9uZSBpcyB0byBleHBvc2UgdGhvc2UgdmFsdWVzIHRv IAo+IHVzZXJzcGFjZS4KPiAKPiBEYW5pZWwsIGhvdyBzaG91bGQgdGhpcyBiZSBoYW5kbGVkIHdo ZW4gQ1JUQ3MgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBjYXBhYmlsaXRpZXMgCj4gPwo+IAoKSG93IGlz IHRoZSB1c2VyIGFwcGxpY2F0aW9uIHN1cHBvc2VkIHRvIGtub3cgZWFjaCBjcnRjcycgY2FwLCB3 aXRob3V0IHRyeWluZyBhbmQKZmFpbGluZz8gSSdsbCBrZWVwIGl0IHRoaXMgd2F5IHVudGlsIHNv bWUgY2xhcmlmaWNhdGlvbi4KCj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfbGFz dGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9k cm0gKnhsbnhfZHJtID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiA+ICsKPiA+ICsJaWYgKHhsbnhfZHJt LT5mYikKPiA+ICsJCWRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlX3VubG9ja2VkKHhs bnhfZHJtLT5mYik7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9v cGVyYXRpb25zIHhsbnhfZm9wcyA9IHsKPiA+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+ID4g Kwkub3BlbgkJPSBkcm1fb3BlbiwKPiA+ICsJLnJlbGVhc2UJPSBkcm1fcmVsZWFzZSwKPiA+ICsJ LnVubG9ja2VkX2lvY3RsCT0gZHJtX2lvY3RsLAo+ID4gKwkubW1hcAkJPSBkcm1fZ2VtX2NtYV9t bWFwLAo+ID4gKwkucG9sbAkJPSBkcm1fcG9sbCwKPiA+ICsJLnJlYWQJCT0gZHJtX3JlYWQsCj4g PiArI2lmZGVmIENPTkZJR19DT01QQVQKPiA+ICsJLmNvbXBhdF9pb2N0bAk9IGRybV9jb21wYXRf aW9jdGwsCj4gPiArI2VuZGlmCj4gPiArCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgeGxueF9kcm1fZHJpdmVyID0gewo+ ID4gKwkuZHJpdmVyX2ZlYXR1cmVzCQk9IERSSVZFUl9NT0RFU0VUIHwgRFJJVkVSX0dFTSB8Cj4g PiArCQkJCQkgIERSSVZFUl9BVE9NSUMgfCBEUklWRVJfUFJJTUUsCj4gPiArCS5sYXN0Y2xvc2UJ CQk9IHhsbnhfbGFzdGNsb3NlLAo+ID4gKwo+ID4gKwkucHJpbWVfaGFuZGxlX3RvX2ZkCQk9IGRy bV9nZW1fcHJpbWVfaGFuZGxlX3RvX2ZkLAo+ID4gKwkucHJpbWVfZmRfdG9faGFuZGxlCQk9IGRy bV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLAo+ID4gKwkuZ2VtX3ByaW1lX2V4cG9ydAkJPSBkcm1f Z2VtX3ByaW1lX2V4cG9ydCwKPiA+ICsJLmdlbV9wcmltZV9pbXBvcnQJCT0gZHJtX2dlbV9wcmlt ZV9pbXBvcnQsCj4gPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlCQk9IGRybV9nZW1fY21hX3By aW1lX2dldF9zZ190YWJsZSwKPiA+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUJPSBkcm1f Z2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gPiArCS5nZW1fcHJpbWVfdm1hcAkJCT0g ZHJtX2dlbV9jbWFfcHJpbWVfdm1hcCwKPiA+ICsJLmdlbV9wcmltZV92dW5tYXAJCT0gZHJtX2dl bV9jbWFfcHJpbWVfdnVubWFwLAo+ID4gKwkuZ2VtX3ByaW1lX21tYXAJCQk9IGRybV9nZW1fY21h X3ByaW1lX21tYXAsCj4gPiArCS5nZW1fZnJlZV9vYmplY3QJCT0gZHJtX2dlbV9jbWFfZnJlZV9v YmplY3QsCj4gPiArCS5nZW1fdm1fb3BzCQkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ID4gKwku ZHVtYl9jcmVhdGUJCQk9IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZSwKPiA+ICsJLmR1bWJfZGVz dHJveQkJCT0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4gPiArCj4gPiArCS5mb3BzCQkJCT0gJnhs bnhfZm9wcywKPiA+ICsKPiA+ICsJLm5hbWUJCQkJPSBEUklWRVJfTkFNRSwKPiA+ICsJLmRlc2MJ CQkJPSBEUklWRVJfREVTQywKPiA+ICsJLmRhdGUJCQkJPSBEUklWRVJfREFURSwKPiA+ICsJLm1h am9yCQkJCT0gRFJJVkVSX01BSk9SLAo+ID4gKwkubWlub3IJCQkJPSBEUklWRVJfTUlOT1IsCj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9kcm0gKnhsbnhfZHJtOwo+ID4gKwlzdHJ1Y3QgZHJt X2RldmljZSAqZHJtOwo+ID4gKwljb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZvICppbmZvOwo+ ID4gKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYXN0ZXIgPSB0b19wbGF0Zm9ybV9kZXZpY2Uo ZGV2KTsKPiAKPiBUaGVyZSdzIG5vIG5lZWQgdG8gY2FzdCB0byBhIHBsYXRmb3JtX2RldmljZSwg c2VlIGJlbG93Lgo+IAoKQWdyZWVkLiBJJ2xsIGNvbnZlcnQgcGxhdGZvcm1fZGV2aWNlIHRvIGRl dmljZS4KCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9k ZXZpY2UoZGV2LT5wYXJlbnQpOwo+IAo+IFRoZXJlJ3Mgbm8gbmVlZCBmb3IgYSBjYXN0IGVpdGhl ciwganVzdCByZXBsYWNlICZwZGV2LT5kZXYgd2l0aCBkZXYtPnBhcmVudCAKPiB0aHJvdWdob3V0 IHRoZSBmdW5jdGlvbi4KPiAKPiA+ICsJaW50IHJldDsKPiA+ICsJdTMyIGZvcm1hdDsKPiA+ICsK PiA+ICsJZHJtID0gZHJtX2Rldl9hbGxvYygmeGxueF9kcm1fZHJpdmVyLCAmcGRldi0+ZGV2KTsK PiA+ICsJaWYgKElTX0VSUihkcm0pKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIoZHJtKTsKPiAKPiBZ b3UgY2FuIGFsc28gZW1iZWQgc3RydWN0IGRybV9kZXZpY2UgaW4gc3RydWN0IHhsbnhfZHJtIGlu c3RlYWQgb2YgdXNpbmcgYSAKPiBwb2ludGVyLCBhbmQgcmVwbGFjZSBkcm1fZGV2X2FsbG9jKCkg d2l0aCBkcm1fZGV2X2luaXQoKS4KPiAKCldpbGwgZG8uCgo+ID4gKwl4bG54X2RybSA9IGRldm1f a3phbGxvYyhkcm0tPmRldiwgc2l6ZW9mKCp4bG54X2RybSksIEdGUF9LRVJORUwpOwo+ID4gKwlp ZiAoIXhsbnhfZHJtKSB7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBlcnJfZHJt Owo+ID4gKwl9Cj4gPiArCj4gPiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRybSk7Cj4gPiArCWRy bS0+bW9kZV9jb25maWcuZnVuY3MgPSAmeGxueF9tb2RlX2NvbmZpZ19mdW5jczsKPiA+ICsKPiA+ ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgMSk7Cj4gPiArCWlmIChyZXQpIHsKPiA+ICsJ CWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHZibGFua1xuIik7Cj4g PiArCQlnb3RvIGVycl94bG54X2RybTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlkcm0tPmlycV9lbmFi bGVkID0gMTsKPiA+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IHhsbnhfZHJtOwo+ID4gKwl4bG54X2Ry bS0+ZHJtID0gZHJtOwo+ID4gKwl4bG54X2RybS0+bWFzdGVyID0gbWFzdGVyOwo+IAo+IFlvdSBj YW4gc3RvcmUgZGV2IGluIHRoZSBtYXN0ZXIgZmllbGQuCj4gCj4gPiArCWRybV9rbXNfaGVscGVy X3BvbGxfaW5pdChkcm0pOwo+ID4gKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShtYXN0ZXIsIHhsbnhf ZHJtKTsKPiAKPiBVc2UgZGV2aWNlX3NldF9kcnZkYXRhKGRldikuCj4gCj4gPiArCj4gPiArCXhs bnhfZHJtLT5jcnRjID0geGxueF9jcnRjX2hlbHBlcl9pbml0KGRybSk7Cj4gPiArCWlmIChJU19F UlIoeGxueF9kcm0tPmNydGMpKSB7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKHhsbnhfZHJtLT5jcnRj KTsKPiA+ICsJCWdvdG8gZXJyX3hsbnhfZHJtOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IGNv bXBvbmVudF9iaW5kX2FsbCgmbWFzdGVyLT5kZXYsIGRybSk7Cj4gCj4gVXNlIGRldiBkaXJlY3Rs eS4KPiAKPiA+ICsJaWYgKHJldCkKPiA+ICsJCWdvdG8gZXJyX2NydGM7Cj4gPiArCj4gPiArCXhs bnhfbW9kZV9jb25maWdfaW5pdChkcm0pOwo+ID4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZHJt KTsKPiA+ICsJZG1hX3NldF9tYXNrKGRybS0+ZGV2LCB4bG54X2NydGNfaGVscGVyX2dldF9kbWFf bWFzayh4bG54X2RybS0+Y3J0YykpOwo+ID4gKwo+ID4gKwlmb3JtYXQgPSB4bG54X2NydGNfaGVs cGVyX2dldF9mb3JtYXQoeGxueF9kcm0tPmNydGMpOwo+ID4gKwlpbmZvID0gZHJtX2Zvcm1hdF9p bmZvKGZvcm1hdCk7Cj4gPiArCWlmIChpbmZvICYmIGluZm8tPmRlcHRoICYmIGluZm8tPmNwcFsw XSkgewo+ID4gKwkJdW5zaWduZWQgaW50IGFsaWduOwo+ID4gKwo+ID4gKwkJYWxpZ24gPSB4bG54 X2NydGNfaGVscGVyX2dldF9hbGlnbih4bG54X2RybS0+Y3J0Yyk7Cj4gPiArCQl4bG54X2RybS0+ ZmIgPSB4bG54X2ZiX2luaXQoZHJtLCBpbmZvLT5jcHBbMF0gKiA4LCAxLCBhbGlnbiwKPiA+ICsJ CQkJCSAgICB4bG54X2ZiZGV2X3ZyZXMpOwo+ID4gKwkJaWYgKElTX0VSUih4bG54X2RybS0+ZmIp KSB7Cj4gPiArCQkJZGV2X2VycigmcGRldi0+ZGV2LAo+ID4gKwkJCQkiZmFpbGVkIHRvIGluaXRp YWxpemUgZHJtIGZiXG4iKTsKPiA+ICsJCQl4bG54X2RybS0+ZmIgPSBOVUxMOwo+ID4gKwkJfQo+ ID4gKwl9IGVsc2Ugewo+ID4gKwkJLyogZmJkZXYgZW11bGF0aW9uIGlzIG9wdGlvbmFsICovCj4g PiArCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiZmJkZXYgaXMgbm90IGluaXRpYWxpemVkXG4iKTsK PiA+ICsJfQo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fZGV2X3JlZ2lzdGVyKGRybSwgMCk7Cj4gPiAr CWlmIChyZXQgPCAwKQo+ID4gKwkJZ290byBlcnJfZmI7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gKwo+ID4gK2Vycl9mYjoKPiA+ICsJaWYgKHhsbnhfZHJtLT5mYikKPiA+ICsJCXhsbnhfZmJf ZmluaSh4bG54X2RybS0+ZmIpOwo+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbChkcm0tPmRldiwg ZHJtKTsKPiA+ICtlcnJfY3J0YzoKPiA+ICsJeGxueF9jcnRjX2hlbHBlcl9maW5pKGRybSwgeGxu eF9kcm0tPmNydGMpOwo+ID4gK2Vycl94bG54X2RybToKPiA+ICsJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKPiA+ICtlcnJfZHJtOgo+ID4gKwlkcm1fZGV2X3VucmVmKGRybSk7Cj4gPiAr CXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHhsbnhfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ICt7Cj4gPiArCXN0cnVjdCB4bG54X2RybSAqeGxueF9kcm0g PSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiA+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHhs bnhfZHJtLT5kcm07Cj4gPiArCj4gPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ID4gKwlp ZiAoeGxueF9kcm0tPmZiKQo+ID4gKwkJeGxueF9mYl9maW5pKHhsbnhfZHJtLT5mYik7Cj4gPiAr CWNvbXBvbmVudF91bmJpbmRfYWxsKCZ4bG54X2RybS0+bWFzdGVyLT5kZXYsIGRybSk7Cj4gPiAr CXhsbnhfY3J0Y19oZWxwZXJfZmluaShkcm0sIHhsbnhfZHJtLT5jcnRjKTsKPiA+ICsJZHJtX2tt c19oZWxwZXJfcG9sbF9maW5pKGRybSk7Cj4gPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRy bSk7Cj4gPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNv bnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB4bG54X21hc3Rlcl9vcHMgPSB7Cj4gPiAr CS5iaW5kCT0geGxueF9iaW5kLAo+ID4gKwkudW5iaW5kCT0geGxueF91bmJpbmQsCj4gPiArfTsK PiA+ICsKPiA+ICtzdGF0aWMgaW50IHhsbnhfb2ZfY29tcG9uZW50X3Byb2JlKHN0cnVjdCBkZXZp Y2UgKm1hc3Rlcl9kZXYsCj4gPiArCQkJCSAgIGludCAoKmNvbXBhcmVfb2YpKHN0cnVjdCBkZXZp Y2UgKiwgdm9pZCAqKSwKPiA+ICsJCQkJICAgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJf b3BzICptX29wcykKPiAKPiBBcyB0aGVyZSdzIGEgc2luZ2xlIHVzZXIgb2YgdGhpcyBmdW5jdGlv biwgZG8geW91IG5lZWQgdG8gcGFzcyBjb21wYXJlX29mIGFzIGEgCj4gcGFyYW1ldGVyID8gQ291 bGRuJ3QgeW91IG1vdmUgeGxueF9jb21wYXJlX29mKCkgYWJvdmUgYW5kIHVzZSBpdCBkaXJlY3Rs eSA/Cj4gCgpZZXMsIEkgd2lsbCBkby4KCj4gPiArewo+ID4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYg PSBtYXN0ZXJfZGV2LT5wYXJlbnQ7Cj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXAsICpwb3J0 LCAqcmVtb3RlLCAqcGFyZW50Owo+ID4gKwlzdHJ1Y3QgY29tcG9uZW50X21hdGNoICptYXRjaCA9 IE5VTEw7Cj4gPiArCWludCBpOwo+IAo+IGkgaXMgbmV2ZXIgbmVnYXRpdmUsIHlvdSBjYW4gbWFr ZSBpdCB1bnNpZ25lZC4KPiAKClllcywgYnV0IG9mX3BhcnNlX3BoYW5kbGUoKSB0YWtlcyBpbnQg dHlwZS4gSSdsbCBsZWF2ZSBpdCB0aGlzIHdheS4KCj4gPiArCWlmICghZGV2LT5vZl9ub2RlKQo+ ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCWNvbXBvbmVudF9tYXRjaF9hZGQobWFz dGVyX2RldiwgJm1hdGNoLCBjb21wYXJlX29mLCBkZXYtPm9mX25vZGUpOwo+ID4gKwo+ID4gKwlm b3IgKGkgPSAwOyA7IGkrKykgewo+ID4gKwkJcG9ydCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5v Zl9ub2RlLCAicG9ydHMiLCBpKTsKPiAKPiBJIGRvbid0IHNlZSB0aGUgcG9ydHMgcHJvcGVydHkg ZG9jdW1lbnRlZCBpbiB0aGUgRFQgYmluZGluZ3MgaW4gcGF0Y2ggMi81LiBJIAo+IGFzc3VtZSB0 aGF0J3MgYmVjYXVzZSBpdCBoYXMgYmVlbiByZW1vdmVkIGluIHY0IGFzIHN0YXRlZCBpbiB0aGUg Y2hhbmdlbG9nIDotKSAKPiBZb3Ugc2hvdWxkbid0IG1ha2UgdXNlIG9mIGl0IHRoZW4uIEkndmUg c2tpcHBlZCByZXZpZXdpbmcgdGhlIGxvZ2ljIGZvciB0aGUgCj4gcmVzdCBvZiB0aGlzIGZ1bmN0 aW9uIGFzIEkgbmVlZCB0byBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgRFQgYmluZGluZ3MuCj4gCgpJ J2xsIGRyb3AgdGhpcyBhcyBtZW50aW9uZWQgaW4gb3RoZXIgZW1haWwuCgo+ID4gKwkJaWYgKCFw b3J0KQo+ID4gKwkJCWJyZWFrOwo+ID4gKwo+ID4gKwkJcGFyZW50ID0gcG9ydC0+cGFyZW50Owo+ ID4gKwkJaWYgKCFvZl9ub2RlX2NtcChwYXJlbnQtPm5hbWUsICJwb3J0cyIpKQo+ID4gKwkJCXBh cmVudCA9IHBhcmVudC0+cGFyZW50Owo+ID4gKwkJcGFyZW50ID0gb2Zfbm9kZV9nZXQocGFyZW50 KTsKPiAKPiBJJ3ZlIHJlY2VudGx5IGZvdW5kIG91dCB0aGF0IGRlcmVmZXJlbmNpbmcgYSBkZXZp Y2Vfbm9kZSBwYXJlbnQgZGlyZWN0bHkgaXMgCj4gcHJvbmUgdG8gcmFjZSBjb25kaXRpb25zLiBZ b3Ugc2hvdWxkIHVzZSBvZl9nZXRfcGFyZW50KCkgaW5zdGVhZCAob3IgCj4gb2ZfZ2V0X25leHRf cGFyZW50KCkgYXMgYXBwcm9wcmlhdGUgdG8gbWFrZSBkZXZpY2Vfbm9kZSByZWZlcmVuY2UgaGFu ZGxpbmcgCj4gZWFzaWVyKS4KPiAKClRoYW5rcyBmb3IgdGhlIGluZm8uIFdpbGwgbWFrZSBjaGFu Z2VzIGFjY29yZGluZ2x5LgoKPiA+ICsKPiA+ICsJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJs ZShwYXJlbnQpKSB7Cj4gPiArCQkJb2Zfbm9kZV9wdXQocGFyZW50KTsKPiA+ICsJCQlvZl9ub2Rl X3B1dChwb3J0KTsKPiA+ICsJCQljb250aW51ZTsKPiA+ICsJCX0KPiA+ICsKPiA+ICsJCWNvbXBv bmVudF9tYXRjaF9hZGQobWFzdGVyX2RldiwgJm1hdGNoLCBjb21wYXJlX29mLCBwYXJlbnQpOwo+ ID4gKwkJb2Zfbm9kZV9wdXQocGFyZW50KTsKPiA+ICsJCW9mX25vZGVfcHV0KHBvcnQpOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXBhcmVudCA9IGRldi0+b2Zfbm9kZTsKPiA+ICsJZm9yIChpID0gMDsg OyBpKyspIHsKCltzbmlwXQoKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9v cHMgeGxueF9wbV9vcHMgPSB7Cj4gPiArCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHhsbnhfcG1f c3VzcGVuZCwgeGxueF9wbV9yZXN1bWUpCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0 IHBsYXRmb3JtX2RyaXZlciB4bG54X2RyaXZlciA9IHsKPiA+ICsJLnByb2JlCQkJPSB4bG54X3Bs YXRmb3JtX3Byb2JlLAo+ID4gKwkucmVtb3ZlCQkJPSB4bG54X3BsYXRmb3JtX3JlbW92ZSwKPiA+ ICsJLnNodXRkb3duCQk9IHhsbnhfcGxhdGZvcm1fc2h1dGRvd24sCj4gPiArCS5kcml2ZXIJCQk9 IHsKPiA+ICsJCS5uYW1lCQk9ICJ4bG54LWRybSIsCj4gPiArCQkucG0JCT0gJnhsbnhfcG1fb3Bz LAo+ID4gKwl9LAo+ID4gK307Cj4gPiArCj4gPiArLyogYml0bWFwIGZvciBtYXN0ZXIgaWQgKi8K PiA+ICtzdGF0aWMgdTMyIHhsbnhfbWFzdGVyX2lkcyA9IEdFTk1BU0soMzEsIDApOwo+ID4gKwo+ ID4gKy8qKgo+ID4gKyAqIHhpbGlueF9kcm1fcGlwZWxpbmVfaW5pdCAtIEluaXRpYWxpemUgdGhl IGRybSBwaXBlbGluZSBmb3IgdGhlIGRldmljZQo+ID4gKyAqIEBwZGV2OiBUaGUgcGxhdGZvcm0g ZGV2aWNlIHRvIGluaXRpYWxpemUgdGhlIGRybSBwaXBlbGluZSBkZXZpY2UKPiA+ICsgKgo+ID4g KyAqIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRybSBwaXBlbGluZSBkZXZpY2UsIHN0 cnVjdCBkcm1fZGV2aWNlLAo+ID4gKyAqIG9uIEBwZGV2IGJ5IGNyZWF0aW5nIGEgbG9naWNhbCBt YXN0ZXIgcGxhdGZvcm0gZGV2aWNlLiBUaGUgbG9naWNhbAo+ID4gcGxhdGZvcm0KPiA+ICsgKiBk ZXZpY2UgYWN0cyBhcyBhIG1hc3RlciBkZXZpY2UgdG8gYmluZCBzbGF2ZSBkZXZpY2VzIGFuZCBy ZXByZXNlbnRzCj4gPiArICogdGhlIGVudGlyZSBwaXBlbGluZS4KPiAKPiBJJ20gc29ycnkgdG8g YXNrIHRoaXMgcXVlc3Rpb24gc28gbGF0ZSwgYnV0IGNvdWxkbid0IHlvdSBkbyB3aXRob3V0IHRo YXQgCj4gcGxhdGZvcm0gZGV2aWNlID8gSSBkb24ndCByZWFsbHkgc2VlIHdoYXQgaXQgYnJpbmdz IHlvdS4KPiAKClBsZWFzZSByZWZlciB0byB0aGUgb3RoZXIgZW1haWwuCgo+ID4gKyAqIFRoZSBs b2dpY2FsIG1hc3RlciB1c2VzIHRoZSBwb3J0IGJpbmRpbmdzIG9mIHRoZSBjYWxsaW5nIGRldmlj ZSB0bwo+ID4gKyAqIGZpZ3VyZSBvdXQgdGhlIHBpcGVsaW5lIHRvcG9sb2d5Lgo+ID4gKyAqCj4g PiArICogUmV0dXJuOiB0aGUgbG9naWNhbCBtYXN0ZXIgcGxhdGZvcm0gZGV2aWNlIGlmIHRoZSBk cm0gZGV2aWNlIGlzCj4gPiBpbml0aWFsaXplZAo+ID4gKyAqIG9uIEBwZGV2LiBFcnJvciBjb2Rl IG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4bG54X2Ry bV9waXBlbGluZV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UKPiA+ICpwZGV2KQo+ID4gK3sK PiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbWFzdGVyOwo+ID4gKwlpbnQgaWQsIHJldDsK PiA+ICsKPiAKPiBJcyB0aGVyZSBhbnkgcmlzayBvZiBhIHJhY2UgYmV0d2VlbiBjb25jdXJyZW50 IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIG9yIHRvIAo+IHRoaXMgZnVuY3Rpb24gYW5kIHhsbnhf ZHJtX3BpcGVsaW5lX2V4aXQoKSA/Cj4gCgpBcyBmYXIgYXMgSSBrbm93LCBkcml2ZXIgcHJvYmVz IGFyZSBzZXJpYWxpemVkLCB0aHVzIHRoZXJlJ3Mgbm8gcmFjZS4gUGxlYXNlCmNvcnJlY3QgbWUg aWYgdGhpcyBpcyBpbmNvcnJlY3QuCgo+ID4gKwlpZCA9IGZmcyh4bG54X21hc3Rlcl9pZHMpOwo+ ID4gKwlpZiAoIWlkKQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7Cj4gPiArCj4gPiAr CW1hc3RlciA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygieGxueC1kcm0iLCBpZCAtIDEpOwo+ID4g KwlpZiAoIW1hc3RlcikKPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4gKwo+ID4g KwltYXN0ZXItPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Owo+ID4gKwlyZXQgPSBwbGF0Zm9ybV9k ZXZpY2VfYWRkKG1hc3Rlcik7Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGVycl9vdXQ7Cj4g Cj4gQXMgdGhpcyBpcyB0aGUgb25seSBsb2NhdGlvbiB3aGVyZSB5b3UganVtcCB0byB0aGUgZXJy b3IgcGF0aCBJIHdvdWxkIGlubGluZSAKPiBpdC4KPiAKClRoaXMgY2hhbmdlcyB3aXRoIGNvbnZl cnNpb24gZnJvbSBwbGF0Zm9ybSBkZXZpY2UgdG8gZGV2aWNlLgoKPiA+ICsKPiA+ICsJV0FSTl9P TihtYXN0ZXItPmlkICE9IGlkIC0gMSk7Cj4gPiArCXhsbnhfbWFzdGVyX2lkcyAmPSB+QklUKG1h c3Rlci0+aWQpOwo+ID4gKwlyZXR1cm4gbWFzdGVyOwo+ID4gKwo+ID4gK2Vycl9vdXQ6Cj4gPiAr CXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1hc3Rlcik7Cj4gPiArCXJldHVybiBFUlJfUFRS KHJldCk7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfZHJtX3BpcGVsaW5lX2lu aXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhpbGlueF9kcm1fcGlwZWxpbmVfZXhpdCAtIFJl bGVhc2UgdGhlIGRybSBwaXBlbGluZSBmb3IgdGhlIGRldmljZQo+ID4gKyAqIEBtYXN0ZXI6IFRo ZSBtYXN0ZXIgcGlwZWxpbmUgZGV2aWNlIHRvIHJlbGVhc2UKPiA+ICsgKgo+ID4gKyAqIFJlbGVh c2UgdGhlIGxvZ2ljYWwgcGlwZWxpbmUgZGV2aWNlIHJldHVybmVkIGJ5Cj4gPiB4bG54X2RybV9w aXBlbGluZV9pbml0KCkuCj4gPiArICovCj4gPiArdm9pZCB4bG54X2RybV9waXBlbGluZV9leGl0 KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hc3RlcikKPiA+ICt7Cj4gPiArCXhsbnhfbWFzdGVy X2lkcyB8PSBCSVQobWFzdGVyLT5pZCk7Cj4gPiArCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVy KG1hc3Rlcik7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0xfR1BMKHhsbnhfZHJtX3BpcGVsaW5l X2V4aXQpOwo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX19pbml0IHhsbnhfZHJtX2Rydl9pbml0KHZv aWQpCj4gPiArewo+ID4gKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhsbnhfZHJpdmVyKTsK PiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIF9fZXhpdCB4bG54 X2RybV9kcnZfZXhpdCh2b2lkKQo+ID4gK3sKPiA+ICsJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0 ZXIoJnhsbnhfZHJpdmVyKTsKPiA+ICt9Cj4gPiArCj4gPiArbW9kdWxlX2luaXQoeGxueF9kcm1f ZHJ2X2luaXQpOwo+ID4gK21vZHVsZV9leGl0KHhsbnhfZHJtX2Rydl9leGl0KTsKPiAKPiBZb3Ug Y2FuIHVzZSB0aGUgbW9kdWxlX3BsYXRmb3JtX2RyaXZlcigpIG1hY3JvLgo+IAo+ID4gKwo+ID4g K01PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigi WGlsaW54IERSTSBLTVMgRHJpdmVyIik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54L3hsbnhfZHJ2LmgKPiA+IGIvZHJp dmVycy9ncHUvZHJtL3hsbngveGxueF9kcnYuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5k ZXggMDAwMDAwMC4uMGY2NTk1Zgo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL3hsbngveGxueF9kcnYuaAo+ID4gQEAgLTAsMCArMSwzMyBAQAo+ID4gKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLyoKPiA+ICsgKiBYaWxpbnggRFJNIEtN UyBIZWFkZXIgZm9yIFhpbGlueAo+ID4gKyAqCj4gPiArICogIENvcHlyaWdodCAoQykgMjAxMyAt IDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9yOiBIeXVuIFdvbyBLd29u IDxoeXVua0B4aWxpbnguY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNl bnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwo+ID4gKyAqIExp Y2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgYW5kCj4gPiArICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmll ZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ID4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cj4gPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQo+ID4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gCj4gU2FtZSBjb21tZW50IGFzIGJlZm9yZS4KPiAKPiA+ICsgKi8KPiA+ICsK PiA+ICsjaWZuZGVmIF9YTE5YX0RSVl9IXwo+ID4gKyNkZWZpbmUgX1hMTlhfRFJWX0hfCj4gPiAr Cj4gPiArc3RydWN0IGRybV9kZXZpY2U7Cj4gPiArc3RydWN0IHhsbnhfY3J0Y19oZWxwZXI7Cj4g Cj4gQXMgYSBnZW5lcmFsIHJ1bGUgcGxlYXNlIGVpdGhlciBpbmNsdWRlIHRoZSBoZWFkZXIgZmls ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgCj4gc3RydWN0dXJlcyB5b3UgdXNlLCBvciBhZGQgc3Ry dWN0dXJlIGRlY2xhcmF0aW9ucyB3aGVuIHRoZSBkZWZpbml0aW9uIGlzbid0IAo+IG5lZWRlZCAo YXMgaW4gdGhpcyBjYXNlKS4gSXQgaGVscHMgYXZvaWRpbmcgY29tcGlsYXRpb24gZXJyb3JzIGR1 ZSB0byAjaW5jbHVkZSAKPiBvcmRlcmluZyBvciBuZXN0ZWQgI2luY2x1ZGUgbW9kaWZpY2F0aW9u cy4gWW91J3JlIGRvaW5nIHNvIGZvciB0d28gc3RydWN0dXJlcyAKPiBhbHJlYWR5IGJ1dCBub3Qg Zm9yIGFsbCBvZiB0aGVtLiBUaGlzIGNvbW1lbnQgYXBwbGllcyB0byBhbGwgaGVhZGVyIGZpbGVz IGluIAo+IHRoaXMgcGF0Y2ggc2VyaWVzLgo+IAoKU3VyZS4gSSdsbCBhZGQgc3RydWN0IGRldmlj ZSBhbmQgdGFrZSBjYXJlIG9mIG90aGVyIGhlYWRlcnMgaW4gdGhlIHNhbWUgd2F5LgoKPiA+ICtz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp4bG54X2RybV9waXBlbGluZV9pbml0KHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UKPiA+ICpwYXJlbnQpOwo+ID4gK3ZvaWQgeGxueF9kcm1fcGlwZWxpbmVfZXhp dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwaXBlbGluZSk7Cj4gPiArCj4gPiArdWludDMyX3Qg eGxueF9nZXRfZm9ybWF0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+ID4gK3Vuc2lnbmVkIGlu dCB4bG54X2dldF9hbGlnbihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiA+ICtzdHJ1Y3QgeGxu eF9jcnRjX2hlbHBlciAqeGxueF9nZXRfY3J0Y19oZWxwZXIoc3RydWN0IGRybV9kZXZpY2UgKmRy bSk7Cj4gPiArc3RydWN0IHhsbnhfYnJpZGdlX2hlbHBlciAqeGxueF9nZXRfYnJpZGdlX2hlbHBl cihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKTsKPiAKPiBUaGlzIGZ1bmN0aW9uIGlzbid0IGRlZmlu ZWQgYW55d2hlcmUuCj4gCgpBaCwgSSdsbCByZW1vdmUuCgo+ID4gKwo+ID4gKyNlbmRpZiAvKiBf WExOWF9EUlZfSF8gKi8KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54 X2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwLi5lNzIwODdkCj4gPiAtLS0gL2Rldi9udWxsCj4gPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0veGxueC94bG54X2ZiLmMKPiA+IEBAIC0wLDAgKzEsMjk4IEBA Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ICsvKgo+ID4gKyAq IFhpbGlueCBEUk0gS01TIEZyYW1lYnVmZmVyIGhlbHBlcgo+ID4gKyAqCj4gPiArICogIENvcHly aWdodCAoQykgMjAxNSAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAgQXV0aG9y OiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsgKgo+ID4gKyAqIEJh c2VkIG9uIGRybV9mYl9jbWFfaGVscGVyLmMKPiA+ICsgKgo+ID4gKyAqICBDb3B5cmlnaHQgKEMp IDIwMTIgQW5hbG9nIERldmljZSBJbmMuCj4gPiArICoKPiA+ICsgKiBUaGlzIHNvZnR3YXJlIGlz IGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCj4gPiAr ICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBhbmQKPiA+ICsgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1v ZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiA+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KPiAKPiBJIHRoaW5rIHlvdSBrbm93IHRoZSBkcmlsbCBieSBub3cgOi0p Cj4gCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gPiArI2luY2x1 ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+ Cj4gPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gPiArI2luY2x1ZGUgPGRybS9k cm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fZnJhbWVidWZm ZXJfaGVscGVyLmg+Cj4gPiArCj4gPiArI2luY2x1ZGUgInhsbnhfZHJ2LmgiCj4gPiArI2luY2x1 ZGUgInhsbnhfZmIuaCIKPiA+ICsKPiA+ICsjZGVmaW5lIFhMTlhfTUFYX1BMQU5FUwk0Cj4gPiAr Cj4gPiArc3RydWN0IHhsbnhfZmJkZXYgewo+ID4gKwlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciBmYl9o ZWxwZXI7Cj4gPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiOwo+ID4gKwl1bnNpZ25lZCBp bnQgYWxpZ247Cj4gPiArCXVuc2lnbmVkIGludCB2cmVzX211bHQ7Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB4bG54X2ZiZGV2ICp0b19mYmRldihzdHJ1Y3QgZHJtX2Zi X2hlbHBlciAqZmJfaGVscGVyKQo+ID4gK3sKPiA+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihmYl9o ZWxwZXIsIHN0cnVjdCB4bG54X2ZiZGV2LCBmYl9oZWxwZXIpOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB4bG54X2ZiX2Z1bmNzID0gewo+IAo+ IHN0YXRpYyBjb25zdCBmb3IgYWxsIG9wcyBzdHJ1Y3R1cmVzIHBsZWFzZS4KPiAKPiA+ICsJLmRl c3Ryb3kJPSBkcm1fZ2VtX2ZiX2Rlc3Ryb3ksCj4gPiArCS5jcmVhdGVfaGFuZGxlCT0gZHJtX2dl bV9mYl9jcmVhdGVfaGFuZGxlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGludAo+ID4gK3hs bnhfZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCBjbWQsIHVuc2ln bmVkIGxvbmcgYXJnKQo+ID4gK3sKPiA+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBl ciA9IGluZm8tPnBhcjsKPiA+ICsJdW5zaWduZWQgaW50IGk7Cj4gPiArCWludCByZXQgPSAwOwo+ ID4gKwo+ID4gKwlzd2l0Y2ggKGNtZCkgewo+ID4gKwljYXNlIEZCSU9fV0FJVEZPUlZTWU5DOgo+ ID4gKwkJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Cj4gPiAr CQkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQ7Cj4gPiArCQkJc3RydWN0IGRybV9jcnRj ICpjcnRjOwo+ID4gKwo+ID4gKwkJCW1vZGVfc2V0ID0gJmZiX2hlbHBlci0+Y3J0Y19pbmZvW2ld Lm1vZGVfc2V0Owo+ID4gKwkJCWNydGMgPSBtb2RlX3NldC0+Y3J0YzsKPiA+ICsJCQlyZXQgPSBk cm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpOwo+ID4gKwkJCWlmICghcmV0KSB7Cj4gPiArCQkJCWRy bV9jcnRjX3dhaXRfb25lX3ZibGFuayhjcnRjKTsKPiA+ICsJCQkJZHJtX2NydGNfdmJsYW5rX3B1 dChjcnRjKTsKPiA+ICsJCQl9Cj4gPiArCQl9Cj4gCj4gWW91J3JlIGdvaW5nIHRvIHdhaXQgZm9y IG9uZSB2c3luYyBmb3IgZWFjaCBDUlRDIGluIHNlcXVlbmNlLiBJZiB5b3UgaGF2ZSB0d28gCj4g Q1JUQ3MsIHRoYXQgd2lsbCBiZSBhdCBsZWFzdCB0d28gdnN5bmNzLiBJIGJlbGlldmUgdGhhdCB3 aWxsIHJlbmRlciB0aGlzIGlvY3RsIAo+IHF1aXRlIHVzZWxlc3MgZm9yIHVzZXJzcGFjZS4gSSB3 b3VsZCBlaXRoZXIgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIAo+IHRoYXQgaGFuZGxl cyB0aGUgZmlyc3QgQ1JUQyBvbmx5IChkcm1fZmJfaGVscGVyX2lvY3RsKCkpIG9yIGRyb3AgaXQg Cj4gY29tcGxldGVseS4gV2UgY2FuJ3QgaW1wbGVtZW50IEZCREVWIGVtdWxhdGlvbiBwZXJmZWN0 bHkgYXMgd2UgZXhwb3NlIGEgc2luZ2xlIAo+IEZCREVWIGRldmljZSB0aGF0IGNvdmVycyBhbGwg Q1JUQ3MuCj4gCgpBZ3JlZWQuIEknbGwgc3dpdGNoIHRvIHRoZSBkZWZhdWx0IG9uZSBmcm9tIHRo ZSBoZWxwZXIuCgo+ID4gKwkJcmV0dXJuIHJldDsKPiA+ICsJZGVmYXVsdDoKPiA+ICsJCXJldHVy biAtRU5PVFRZOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgc3RydWN0IGZiX29wcyB4bG54X2ZiZGV2X29wcyA9IHsKPiAKPiBzdGF0aWMgY29u c3QgdG9vLgo+IAoKSSBhZ3JlZSwgYnV0IGl0IGxvb2tzIGxpa2UgdGhpcyBmYl9vcHMgaXMgbm90 IG1lYW50IHRvIGJlIGNvbnN0LiBUaGVyZSBhcmUgc29tZQpwbGFjZXMgd2hlcmUgdGhlIGNhbGxi YWNrIGlzIHNldCBhdCBydW50aW1lIChleCwgaW4gZHJtX2ZiX2NtYV9oZWxwZXIuYyBzZXR0aW5n Ci5mYl9tbWFwKSwgdGhlbiB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBpcyB3aXRob3V0IGNvbnN0 IHRvby4gVGhpcyBiZXR0ZXIgYmUKYWRkcmVzc2VkIGluIGRpZmZlcmVudCBwYXRjaGUsIHRodXMg SSdsbCBsZWF2ZSBpdCB0aGlzIHdheS4KCj4gPiArCS5vd25lcgkJPSBUSElTX01PRFVMRSwKPiA+ ICsJLmZiX2ZpbGxyZWN0CT0gc3lzX2ZpbGxyZWN0LAo+ID4gKwkuZmJfY29weWFyZWEJPSBzeXNf Y29weWFyZWEsCj4gPiArCS5mYl9pbWFnZWJsaXQJPSBzeXNfaW1hZ2VibGl0LAo+ID4gKwkuZmJf Y2hlY2tfdmFyCT0gZHJtX2ZiX2hlbHBlcl9jaGVja192YXIsCj4gPiArCS5mYl9zZXRfcGFyCT0g ZHJtX2ZiX2hlbHBlcl9zZXRfcGFyLAo+ID4gKwkuZmJfYmxhbmsJPSBkcm1fZmJfaGVscGVyX2Js YW5rLAo+ID4gKwkuZmJfcGFuX2Rpc3BsYXkJPSBkcm1fZmJfaGVscGVyX3Bhbl9kaXNwbGF5LAo+ ID4gKwkuZmJfc2V0Y21hcAk9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKPiA+ICsJLmZiX2lvY3Rs CT0geGxueF9mYl9pb2N0bCwKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIHhsbnhfZmJk ZXZfY3JlYXRlIC0gQ3JlYXRlIHRoZSBmYmRldiB3aXRoIGEgZnJhbWVidWZmZXIKPiA+ICsgKiBA ZmJfaGVscGVyOiBmYiBoZWxwZXIgc3RydWN0dXJlCj4gPiArICogQHNpemU6IGZyYW1lYnVmZmVy IHNpemUgaW5mbwo+ID4gKyAqCj4gPiArICogVGhpcyBmdW5jdGlvbiBpcyBiYXNlZCBvbiBkcm1f ZmJkZXZfY21hX2NyZWF0ZSgpLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3Nm dWwsIG9yIHRoZSBlcnJvciBjb2RlLgo+ID4gKyAqLwo+IAo+IEknbGwgc2tpcCByZXZpZXdpbmcg dGhlIHJlc3Qgb2YgdGhlIGZpbGUgYXMgdGhlcmUncyBhIGNoYW5jZSBtb3N0IG9mIHRoZSBjb2Rl IAo+IGNvdWxkIGJlIGRyb3BwZWQgaWYgeW91IHVzZWQgdGhlIENPTkZJR19EUk1fRkJERVZfT1ZF UkFMTE9DIG1lY2hhbmlzbS4KPiAKCkFsaWdubWVudCBpbmZvcm1hdGlvbiBpcyBvbmx5IG1pc3Np bmcgcGllY2UgdG8gZ2V0IHJpZCBvZiB0aGlzLiBJIGFncmVlIHRvCndvcmsgdG93YXJkIHJlbW92 aW5nIHRoaXMsIGJ1dCBJJ2QgbGlrZSB0byBrZWVwIHNvbWUgcGllY2VzIGluIHRoaXMgc2V0LgoK PiA+ICtzdGF0aWMgaW50IHhsbnhfZmJkZXZfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpm Yl9oZWxwZXIsCj4gPiArCQkJICAgICBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9zdXJmYWNlX3NpemUg KnNpemUpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGxueF9mYmRldiAqZmJkZXYgPSB0b19mYmRldihm Yl9oZWxwZXIpOwo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZmJfaGVscGVyLT5kZXY7 Cj4gPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiA+ICsJc3RydWN0IGRybV9m cmFtZWJ1ZmZlciAqZmI7Cj4gPiArCXVuc2lnbmVkIGludCBieXRlc19wZXJfcGl4ZWw7Cj4gPiAr CXVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ID4gKwlzdHJ1Y3QgZmJfaW5mbyAqZmJpOwo+ID4gKwlz aXplX3QgYnl0ZXM7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCWRldl9kYmcoZHJtLT5kZXYs ICJzdXJmYWNlIHdpZHRoKCVkKSwgaGVpZ2h0KCVkKSBhbmQgYnBwKCVkKVxuIiwKPiA+ICsJCXNp emUtPnN1cmZhY2Vfd2lkdGgsIHNpemUtPnN1cmZhY2VfaGVpZ2h0LCBzaXplLT5zdXJmYWNlX2Jw cCk7Cj4gPiArCj4gPiArCXNpemUtPnN1cmZhY2VfaGVpZ2h0ICo9IGZiZGV2LT52cmVzX211bHQ7 Cj4gPiArCWJ5dGVzX3Blcl9waXhlbCA9IERJVl9ST1VORF9VUChzaXplLT5zdXJmYWNlX2JwcCwg OCk7Cj4gPiArCWJ5dGVzID0gQUxJR04oc2l6ZS0+c3VyZmFjZV93aWR0aCAqIGJ5dGVzX3Blcl9w aXhlbCwgZmJkZXYtPmFsaWduKTsKPiA+ICsJYnl0ZXMgKj0gc2l6ZS0+c3VyZmFjZV9oZWlnaHQ7 Cj4gPiArCj4gPiArCW9iaiA9IGRybV9nZW1fY21hX2NyZWF0ZShkcm0sIGJ5dGVzKTsKPiA+ICsJ aWYgKElTX0VSUihvYmopKQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIob2JqKTsKPiA+ICsKPiA+ICsJ ZmJpID0gZnJhbWVidWZmZXJfYWxsb2MoMCwgZHJtLT5kZXYpOwo+ID4gKwlpZiAoIWZiaSkgewo+ ID4gKwkJZGV2X2Vycihkcm0tPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmcmFtZWJ1ZmZlciBp bmZvLlxuIik7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJZ290byBlcnJfZHJtX2dlbV9j bWFfZnJlZV9vYmplY3Q7Cj4gPiArCX0KPiA+ICsKPiA+ICsJZmJkZXYtPmZiID0gZHJtX2dlbV9m YmRldl9mYl9jcmVhdGUoZHJtLCBzaXplLCBmYmRldi0+YWxpZ24sICZvYmotPmJhc2UsCj4gPiAr CQkJCQkgICAgJnhsbnhfZmJfZnVuY3MpOwo+ID4gKwlpZiAoSVNfRVJSKGZiZGV2LT5mYikpIHsK PiA+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgRFJNIGZyYW1lYnVm ZmVyLlxuIik7Cj4gPiArCQlyZXQgPSBQVFJfRVJSKGZiZGV2LT5mYik7Cj4gPiArCQlnb3RvIGVy cl9mcmFtZWJ1ZmZlcl9yZWxlYXNlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWZiID0gZmJkZXYtPmZi Owo+ID4gKwlmYl9oZWxwZXItPmZiID0gZmI7Cj4gPiArCWZiX2hlbHBlci0+ZmJkZXYgPSBmYmk7 Cj4gPiArCWZiaS0+cGFyID0gZmJfaGVscGVyOwo+ID4gKwlmYmktPmZsYWdzID0gRkJJTkZPX0ZM QUdfREVGQVVMVDsKPiA+ICsJZmJpLT5mYm9wcyA9ICZ4bG54X2ZiZGV2X29wczsKPiA+ICsKPiA+ ICsJcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAyNTYsIDApOwo+ID4gKwlpZiAocmV0 KSB7Cj4gPiArCQlkZXZfZXJyKGRybS0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9yIG1h cC5cbiIpOwo+ID4gKwkJZ290byBlcnJfZmJfZGVzdHJveTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlk cm1fZmJfaGVscGVyX2ZpbGxfZml4KGZiaSwgZmItPnBpdGNoZXNbMF0sIGZiLT5mb3JtYXQtPmRl cHRoKTsKPiA+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGZiX2hlbHBlciwgZmItPndp ZHRoLCBmYi0+aGVpZ2h0KTsKPiA+ICsJZmJpLT52YXIueXJlcyA9IGZiLT5oZWlnaHQgLyBmYmRl di0+dnJlc19tdWx0Owo+ID4gKwo+ID4gKwlvZmZzZXQgPSBmYmktPnZhci54b2Zmc2V0ICogYnl0 ZXNfcGVyX3BpeGVsOwo+ID4gKwlvZmZzZXQgKz0gZmJpLT52YXIueW9mZnNldCAqIGZiLT5waXRj aGVzWzBdOwo+ID4gKwo+ID4gKwlkcm0tPm1vZGVfY29uZmlnLmZiX2Jhc2UgPSAocmVzb3VyY2Vf c2l6ZV90KW9iai0+cGFkZHI7Cj4gPiArCWZiaS0+c2NyZWVuX2Jhc2UgPSAoY2hhciBfX2lvbWVt ICopKG9iai0+dmFkZHIgKyBvZmZzZXQpOwo+ID4gKwlmYmktPmZpeC5zbWVtX3N0YXJ0ID0gKHVu c2lnbmVkIGxvbmcpKG9iai0+cGFkZHIgKyBvZmZzZXQpOwo+ID4gKwlmYmktPnNjcmVlbl9zaXpl ID0gYnl0ZXM7Cj4gPiArCWZiaS0+Zml4LnNtZW1fbGVuID0gYnl0ZXM7Cj4gPiArCj4gPiArCXJl dHVybiAwOwo+ID4gKwo+ID4gK2Vycl9mYl9kZXN0cm95Ogo+ID4gKwlkcm1fZnJhbWVidWZmZXJf dW5yZWdpc3Rlcl9wcml2YXRlKGZiKTsKPiA+ICsJZHJtX2dlbV9mYl9kZXN0cm95KGZiKTsKPiA+ ICtlcnJfZnJhbWVidWZmZXJfcmVsZWFzZToKPiA+ICsJZnJhbWVidWZmZXJfcmVsZWFzZShmYmkp Owo+ID4gK2Vycl9kcm1fZ2VtX2NtYV9mcmVlX29iamVjdDoKPiA+ICsJZHJtX2dlbV9jbWFfZnJl ZV9vYmplY3QoJm9iai0+YmFzZSk7Cj4gPiArCXJldHVybiByZXQ7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB4bG54X2ZiX2hlbHBlcl9mdW5jcyA9 IHsKPiAKPiBzdGF0aWMgY29uc3QuCj4gCgpHb3QgaXQuIDotKQoKPiA+ICsJLmZiX3Byb2JlID0g eGxueF9mYmRldl9jcmVhdGUsCj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiB4bG54X2Zi X2luaXQgLSBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZXMgdGhlIFhpbGlueCBmcmFtZWJ1ZmZlcgo+ ID4gKyAqIEBkcm06IERSTSBkZXZpY2UKPiA+ICsgKiBAcHJlZmVycmVkX2JwcDogcHJlZmVycmVk IGJpdHMgcGVyIHBpeGVsIGZvciB0aGUgZGV2aWNlCj4gPiArICogQG1heF9jb25uX2NvdW50OiBt YXhpbXVtIG51bWJlciBvZiBjb25uZWN0b3JzCj4gPiArICogQGFsaWduOiBhbGlnbm1lbnQgdmFs dWUgZm9yIHBpdGNoCj4gPiArICogQHZyZXNfbXVsdDogbXVsdGlwbGllciBmb3IgdmlydHVhbCBy ZXNvbHV0aW9uCj4gPiArICoKPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIGRybV9m YmRldl9jbWFfaW5pdCgpLgo+ID4gKyAqCj4gPiArICogUmV0dXJuOiBhIG5ld2x5IGFsbG9jYXRl ZCBkcm1fZmJfaGVscGVyIHN0cnVjdCBvciBhIEVSUl9QVFIuCj4gPiArICovCj4gPiArc3RydWN0 IGRybV9mYl9oZWxwZXIgKgo+ID4gK3hsbnhfZmJfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBpbnQgcHJlZmVycmVkX2JwcCwKPiA+ICsJICAgICB1bnNpZ25lZCBpbnQgbWF4X2Nvbm5fY291 bnQsIHVuc2lnbmVkIGludCBhbGlnbiwKPiA+ICsJICAgICB1bnNpZ25lZCBpbnQgdnJlc19tdWx0 KQo+ID4gK3sKPiA+ICsJc3RydWN0IHhsbnhfZmJkZXYgKmZiZGV2Owo+ID4gKwlzdHJ1Y3QgZHJt X2ZiX2hlbHBlciAqZmJfaGVscGVyOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwoKW3NuaXBdCgo+ID4g KyNpbmNsdWRlICJ4bG54X2dlbS5oIgo+ID4gKwo+ID4gKy8qCj4gPiArICogeGxueF9nZW1fY21h X2R1bWJfY3JlYXRlIC0gKHN0cnVjdCBkcm1fZHJpdmVyKS0+ZHVtYl9jcmVhdGUgY2FsbGJhY2sK PiA+ICsgKiBAZmlsZV9wcml2OiBkcm1fZmlsZSBvYmplY3QKPiA+ICsgKiBAZHJtOiBEUk0gb2Jq ZWN0Cj4gPiArICogQGFyZ3M6IGluZm8gZm9yIGR1bWIgc2Nhbm91dCBidWZmZXIgY3JlYXRpb24K PiA+ICsgKgo+ID4gKyAqIFRoaXMgZnVuY3Rpb24gaXMgZm9yIGR1bWJfY3JlYXRlIGNhbGxiYWNr IG9mIGRybV9kcml2ZXIgc3RydWN0LiBTaW1wbHkKPiA+ICsgKiBpdCB3cmFwcyBhcm91bmQgZHJt X2dlbV9jbWFfZHVtYl9jcmVhdGUoKSBhbmQgc2V0cyB0aGUgcGl0Y2ggdmFsdWUKPiA+ICsgKiBi eSByZXRyaWV2aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBkZXZpY2UuCj4gPiArICoKPiA+ICsgKiBS ZXR1cm46IFRoZSByZXR1cm4gdmFsdWUgZnJvbSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSgpCj4g PiArICovCj4gPiAraW50IHhsbnhfZ2VtX2NtYV9kdW1iX2NyZWF0ZShzdHJ1Y3QgZHJtX2ZpbGUg KmZpbGVfcHJpdiwgc3RydWN0IGRybV9kZXZpY2UKPiA+ICpkcm0sCj4gPiArCQkJICAgICBzdHJ1 Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgKmFyZ3MpCj4gPiArewo+ID4gKwlpbnQgcGl0Y2ggPSBE SVZfUk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpOwo+IAo+IHBpdGNoIGlzIG5l dmVyIG5lZ2F0aXZlLCB5b3UgY2FuIG1ha2UgaXQgYW4gdW5zaWduZWQgaW50Lgo+IAoKQWdyZWVk LiBGaXhlZC4KCj4gPiArCXVuc2lnbmVkIGludCBhbGlnbiA9IHhsbnhfZ2V0X2FsaWduKGRybSk7 Cj4gPiArCj4gPiArCWlmICghYXJncy0+cGl0Y2ggfHwgIUlTX0FMSUdORUQoYXJncy0+cGl0Y2gs IGFsaWduKSkKPiA+ICsJCWFyZ3MtPnBpdGNoID0gQUxJR04ocGl0Y2gsIGFsaWduKTsKPiAKPiBJ ZiB0aGUgcGl0Y2ggaXMgYWxpZ25lZCB5b3UnbGwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSAod2hp Y2ggY291bGQgYmUgbGFyZ2VyIAo+IHRoYW4gdGhlIG1pbmltdW0gcGl0Y2gpLCBidXQgb3RoZXJ3 aXNlIHlvdSB3aWxsIG92ZXJ3cml0ZSBpdCB3aXRoIHRoZSBhbGlnbmVkIAo+IG1pbmltdW0gcGl0 Y2guIEl0IGNyZWF0ZXMgdHdvIHZlcnkgZGlmZmVyZW50IGJlaGF2aW91cnMgYnkgYWxsb3dpbmcg dXNlcnNwYWNlIAo+IHRvIHNwZWNpZnkgdGhlIHBpdGNoIHdoZW4gaXQgaXMgYWxpZ25lZCwgYnV0 IGdvaW5nIGZvciB0aGUgbWluaW11bSBwaXRjaCAKPiB1bmNvbmRpdGlvbmFsbHkgb3RoZXJ3aXNl LiBJcyB0aGF0IG9uIHB1cnBvc2UgPwo+IAoKVGhlIGluaXRpYWwgaW50ZW50aW9uIHdhcyBqdXN0 IHRvIGhvbm9yIHRoZSBsZWdhbCBwaXRjaCB2YWx1ZSBmcm9tIHVzZXIuIEl0Cm1ha2VzIHNlbnNl IHRvIGJlIGNvbnNpc3RlbnQsIHNvIEknbGwgdXNlIHRoZSBtaW5pbXVtIHBpdGNoIGFsd2F5cy4K Cj4gPiArCXJldHVybiBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZV9pbnRlcm5hbChmaWxlX3ByaXYs IGRybSwgYXJncyk7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS94bG54 L3hsbnhfZ2VtLmgKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaCBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uZjM4MGRlOQo+ID4gLS0tIC9kZXYvbnVs bAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3hsbngveGxueF9nZW0uaAo+ID4gQEAgLTAsMCAr MSwyNiBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiArLyoK PiA+ICsgKiBYaWxpbnggRFJNIEtNUyBHRU0gaGVscGVyIGhlYWRlcgo+ID4gKyAqCj4gPiArICog IENvcHlyaWdodCAoQykgMjAxNSAtIDIwMTggWGlsaW54LCBJbmMuCj4gPiArICoKPiA+ICsgKiAg QXV0aG9yOiBIeXVuIFdvbyBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+ICsgKgo+ID4g KyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKPiA+ICsgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAo+ID4gKyAqIG1heSBiZSBjb3BpZWQs IGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCj4gPiArICoKPiA+ ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKPiA+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ID4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiA+ICsgKiBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+IAo+IFRoZSBsYXN0IG9uZSAhIDot KQo+IAoKRmluYWxseSEgOi0pCgpUaGFua3MgYWdhaW4gZm9yIHRoZSByZXZpZXcuIEkndmUgYWRk cmVzc2VkIG1vc3Qgb2YgeW91ciBjb21tZW50cy4gSSB0aGluawpvbmx5IHJlbWFpbmluZyBwaWVj ZXMsIGV4Y2VwdCBzb21lIG1pbm9yIG9uZXMsIGFyZSB0aGUgbWF4IGNydGMgY2FwIGFuZAp0aGUg anVzdGlmaWNhdGlvbiBmb3IgdGhlIGxvZ2ljYWwgZGV2aWNlLiBXZSBjYW4gY29udGludWUgdG8g ZGlzY3VzcyBhYm91dAp0aGUgbG9naWNhbCBkZXZpY2UgaW4gdGhlIHNlcGFyYXRlIGVtYWlsIHRo cmVhZC4KClRoYW5rcywKLWh5dW4KCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfWExOWF9H RU1fSF8KPiA+ICsjZGVmaW5lIF9YTE5YX0dFTV9IXwo+ID4gKwo+ID4gK2ludCB4bG54X2dlbV9j bWFfZHVtYl9jcmVhdGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4gPiArCQkJICAgICBz dHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+ID4gKwkJCSAgICAgc3RydWN0IGRybV9tb2RlX2NyZWF0 ZV9kdW1iICphcmdzKTsKPiA+ICsKPiA+ICsjZW5kaWYgLyogX1hMTlhfR0VNX0hfICovCj4gCj4g LS0gCj4gUmVnYXJkcywKPiAKPiBMYXVyZW50IFBpbmNoYXJ0Cj4gCj4gCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QK ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=