From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joonas Lahtinen Subject: Re: [RFCv2 02/14] drm/i915/gvt: Introduce the basic architecture of GVT-g Date: Tue, 23 Feb 2016 14:53:33 +0200 Message-ID: <1456232013.7789.70.camel@linux.intel.com> References: <1455795741-3487-1-git-send-email-zhi.a.wang@intel.com> <1455795741-3487-3-git-send-email-zhi.a.wang@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 923FD6E55E for ; Tue, 23 Feb 2016 12:53:38 +0000 (UTC) In-Reply-To: <1455795741-3487-3-git-send-email-zhi.a.wang@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Zhi Wang , intel-gfx@lists.freedesktop.org, igvt-g@lists.01.org Cc: daniel.vetter@ffwll.ch, david.j.cowperthwaite@intel.com, zhiyuan.lv@intel.com List-Id: intel-gfx@lists.freedesktop.org QSBvbmUgbW9yZSBub3RlIGJlbG93LgoKT24gdG8sIDIwMTYtMDItMTggYXQgMTk6NDIgKzA4MDAs IFpoaSBXYW5nIHdyb3RlOgo+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgdmVyeSBiYXNpYyBm cmFtZXdvcmsgb2YgR1ZULWcgZGV2aWNlIG1vZGVsLAo+IGluY2x1ZGVzIGJhc2ljIHByb3RvdHlw ZXMsIGRlZmluaXRpb25zLCBpbml0aWFsaXphdGlvbi4KPiAKPiB2MjoKPiAtIEludHJvZHVjZSBp OTE1X2d2dC5jLgo+IEl0J3MgbmVjZXNzYXJ5IHRvIGludHJvZHVjZSB0aGUgc3R1YnMgYmV0d2Vl biBpOTE1IGRyaXZlciBhbmQgR1ZULWcgaG9zdCwKPiBhcyBHVlQtZyBjb21wb25lbnRzIGlzIGNv bmZpZ3VyYWJsZSBpbiBrZXJuZWwgY29uZmlnLiBXaGVuIGRpc2FibGVkLCB0aGUKPiBzdHVicyBo ZXJlIGRvIG5vdGhpbmcuCj4gCj4gVGFrZSBKb29uYXMncyBjb21tZW50czoKPiAtIFJlcGxhY2Ug Ym9vbGVhbiByZXR1cm4gdmFsdWUgd2l0aCBpbnQuCj4gLSBSZXBsYWNlIGN1c3RvbWl6ZWQgaW5m by93YXJuL2RlYnVnIG1hY3JvcyB3aXRoIERSTSBtYWNyb3MuCj4gLSBEb2N1bWVudCBhbGwgbm9u LXN0YXRpYyBmdW5jdGlvbnMgbGlrZSBpOTE1Lgo+IC0gUmVtb3ZlIGVtcHR5IGFuZCB1bnVzZWQg ZnVuY3Rpb25zLgo+IC0gUmVwbGFjZSBtYWdpYyBudW1iZXIgd2l0aCBtYXJjb3MuCj4gLSBTZXQg R1ZULWcgaW4ga2VybmVsIGNvbmZpZyB0byAibiIgYnkgZGVmYXVsdC4KPiAKPiBTaWduZWQtb2Zm LWJ5OiBaaGkgV2FuZyA8emhpLmEud2FuZ0BpbnRlbC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL2dw dS9kcm0vaTkxNS9LY29uZmlnwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxNSArKwo+IMKgZHJpdmVy cy9ncHUvZHJtL2k5MTUvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKwo+IMKgZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlwqDCoMKgwqB8wqDCoMKgNSArCj4gwqBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZGVidWcuaMKgwqDCoMKgwqB8wqDCoDU3ICsrKysrCj4gwqBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmPCoMKgwqDCoMKgwqDCoHwgMzkzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv Z3Z0LmjCoMKgwqDCoMKgwqDCoHwgMTAwICsrKysrKysrKwo+IMKgZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2h5cGVyY2FsbC5oIHzCoMKgMzAgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dnQvbXB0LmjCoMKgwqDCoMKgwqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcGFyYW1zLmPCoMKgwqDCoHzCoMKgMzIgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcGFyYW1zLmjCoMKgwqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcmVnLmjCoMKgwqDCoMKgwqDCoHzCoMKgMzQgKysrCj4gwqBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2RtYS5jwqDCoMKgwqDCoMKgfMKgwqAxNCArKwo+IMKgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaMKgwqDCoMKgwqDCoHzCoMKgMTIgKysKPiDCoGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3Z0LmPCoMKgwqDCoMKgwqB8wqDCoDkzICsrKysrKysrKwo+IMKgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9ndnQuaMKgwqDCoMKgwqDCoHzCoMKgNDkgKysrKysKPiDCoDE1 IGZpbGVzIGNoYW5nZWQsIDkwNCBpbnNlcnRpb25zKCspCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L01ha2VmaWxlCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2RlYnVnLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvaHlwZXJjYWxsLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmMKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvcmVnLmgKPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2d2dC5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ndnQuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+IGluZGV4IDRjNTk3OTMu LjA4MmU3N2QgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvS2NvbmZpZwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcKPiBAQCAtNDUsMyArNDUsMTggQEAgY29u ZmlnIERSTV9JOTE1X1BSRUxJTUlOQVJZX0hXX1NVUFBPUlQKPiDCoAnCoMKgb3B0aW9uIGNoYW5n ZXMgdGhlIGRlZmF1bHQgZm9yIHRoYXQgbW9kdWxlIG9wdGlvbi4KPiDCoAo+IMKgCcKgwqBJZiBp biBkb3VidCwgc2F5ICJOIi4KPiArCj4gK2NvbmZpZyBEUk1fSTkxNV9HVlQKPiArwqDCoMKgwqDC oMKgwqDCoHRyaXN0YXRlICJHVlQtZyBob3N0IGRyaXZlciIKPiArwqDCoMKgwqDCoMKgwqDCoGRl cGVuZHMgb24gRFJNX0k5MTUKPiArwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQgbgo+ICvCoMKgwqDC oMKgwqDCoMKgaGVscAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoEVuYWJsaW5nIEdWVC1nIG1lZGlh dGVkIGdyYXBoaWNzIHBhc3N0aHJvdWdoIHRlY2huaXF1ZSBmb3IgSW50ZWwgaTkxNQo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoGJhc2VkIGludGVncmF0ZWQgZ3JhcGhpY3MgY2FyZC4gV2l0aCBHVlQt ZywgaXQncyBwb3NzaWJsZSB0byBoYXZlIG9uZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGludGVn cmF0ZWQgaTkxNSBkZXZpY2Ugc2hhcmVkIGJ5IG11bHRpcGxlIFZNcy4gUGVyZm9ybWFuY2UgY3Jp dGljYWwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBvcHRlcmF0aW9ucyBzdWNoIGFzIGFwcGVydHVy ZSBhY2Nlc3NlcyBhbmQgcmluZyBidWZmZXIgb3BlcmF0aW9ucwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoGFyZSBwYXNzLXRocm91Z2hlZCB0byBWTSwgd2l0aCBhIG1pbmltYWwgc2V0IG9mIGNvbmZs aWN0aW5nIHJlc291cmNlcwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoChlLmcuIGRpc3BsYXkgc2V0 dGluZ3MpIG1lZGlhdGVkIGJ5IHZHVCBkcml2ZXIuIFRoZSBiZW5lZml0IG9mIHZHVAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoGlzIG9uIGJvdGggdGhlIHBlcmZvcm1hbmNlLCBnaXZlbiB0aGF0IGVh Y2ggVk0gY291bGQgZGlyZWN0bHkgb3BlcmF0ZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGl0cyBh cGVydHVyZSBzcGFjZSBhbmQgc3VibWl0IGNvbW1hbmRzIGxpa2UgcnVubmluZyBvbiBuYXRpdmUs IGFuZAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoHRoZSBmZWF0dXJlIGNvbXBsZXRlbmVzcywgZ2l2 ZW4gdGhhdCBhIHRydWUgR0VOIGhhcmR3YXJlIGlzIGV4cG9zZWQuCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZp bGUKPiBpbmRleCAwODUxZGUwNy4uYzY1MDI2YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4g QEAgLTkxLDYgKzkxLDggQEAgaTkxNS15ICs9IGR2b19jaDcwMTcubyBcCj4gwqAJwqDCoGludGVs X3Nkdm8ubyBcCj4gwqAJwqDCoGludGVsX3R2Lm8KPiDCoAo+ICtvYmotJChDT05GSUdfRFJNX0k5 MTVfR1ZUKcKgwqArPSBpOTE1X2d2dC5vIGd2dC8KPiArCj4gwqAjIHZpcnR1YWwgZ3B1IGNvZGUK PiDCoGk5MTUteSArPSBpOTE1X3ZncHUubwo+IMKgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9NYWtlZmls ZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOTU5MzA1Zgo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvTWFrZWZpbGUKPiBAQCAt MCwwICsxLDUgQEAKPiArR1ZUX1NPVVJDRSA6PSBndnQubyBwYXJhbXMubwo+ICsKPiArY2NmbGFn cy15wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqArPSAtSSQoc3Jj KSAtSSQoc3JjKS8uLiAtV2FsbCAtV2Vycm9yIC1Xbm8tdW51c2VkLWZ1bmN0aW9uCj4gK2k5MTVf Z3Z0LXnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA6PSAkKEdWVF9T T1VSQ0UpCgooVGhpcyBuYW1lIGNvbmZsaWN0cyB3aXRoIHVwcGVyIGxldmVsIGk5MTVfZ3Z0LCB3 aGljaCBJIHN1Z2dlc3RlZApyZW5hbWluZyB0byBpbnRlbF9ndnQuYy4gQSBvbmUgbW9yZSByZWFz b24gbW9yZSBzbyB0aGlzIGNhbiBiZSBrZXB0IGFzCmlzKS4KCkFzIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQgaTkxNV9ndnQsIEkgYmV0IHRoZSBkZWJ1ZyBwcmVmaXggc2hvdWxkIGJlCmNoYW5n ZWQgdG8gcmVmbGVjdCB0aGF0LgoKU28gaXQgc2hvdWxkIGxvb2sgbGlrZTsKCiR7V0hBVEVWRVJf RFJNX1BSSU5UU30gaTkxNS1ndnQ6IGNvcmU6IENvcmUgZGVidWcKJHtXSEFURVZFUl9EUk1fUFJJ TlRTfSBpOTE1LWd2dDogbW06IE1lbW9yeSBkZWJ1ZwoKUmVnYXJkcywgSm9vbmFzCgo+ICtvYmot JChDT05GSUdfRFJNX0k5MTVfR1ZUKcKgwqDCoMKgwqArPSBpOTE1X2d2dC5vCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9kZWJ1Zy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Z0L2RlYnVnLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjA3 NDdmMjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2Rl YnVnLmgKPiBAQCAtMCwwICsxLDU3IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIw MTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29u IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJt aXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF Ugo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fR1ZUX0RFQlVHX0hfXwo+ICsj ZGVmaW5lIF9fR1ZUX0RFQlVHX0hfXwo+ICsKPiArI2RlZmluZSBndnRfaW5mbyhmbXQsIGFyZ3Mu Li4pIFwKPiArCURSTV9JTkZPKCJndnQ6ICJmbXQiXG4iLCAjI2FyZ3MpCj4gKwo+ICsjZGVmaW5l IGd2dF9lcnIoZm10LCBhcmdzLi4uKSBcCj4gKwlEUk1fRVJST1IoImd2dDogImZtdCJcbiIsICMj YXJncykKPiArCj4gKyNkZWZpbmUgZ3Z0X3dhcm4oY29uZGl0aW9uLCBmbXQsIGFyZ3MuLi4pIFwK PiArCVdBUk4oKGNvbmRpdGlvbiksICJndnQ6ICJmbXQiXG4iLCAjI2FyZ3MpCj4gKwo+ICsjZGVm aW5lIGd2dF93YXJuX29uY2UoY29uZGl0aW9uLCBmbXQsIGFyZ3MuLi4pIFwKPiArCVdBUk5fT05D RSgoY29uZGl0aW9uKSwgImd2dDogImZtdCJcbiIsICMjYXJncykKPiArCj4gKyNkZWZpbmUgZ3Z0 X2RiZyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCj4gKwlEUk1fREVCVUdfRFJJVkVSKCJndnQ6ICJm bXQiXG4iLCAjI2FyZ3MpCj4gKwo+ICtlbnVtIHsKPiArCUdWVF9EQkdfQ09SRSA9ICgxIDw8IDAp LAo+ICsJR1ZUX0RCR19NTSA9ICgxIDw8IDEpLAo+ICsJR1ZUX0RCR19JUlEgPSAoMSA8PCAyKSwK PiArfTsKPiArCj4gKyNkZWZpbmUgZ3Z0X2RiZ19jb3JlKGZtdCwgYXJncy4uLikgXAo+ICsJZ3Z0 X2RiZyhHVlRfREJHX0NPUkUsIGZtdCwgIyNhcmdzKQo+ICsKPiArI2RlZmluZSBndnRfZGJnX21t KGZtdCwgYXJncy4uLikgXAo+ICsJZ3Z0X2RiZyhHVlRfREJHX01NLCBmbXQsICMjYXJncykKPiAr Cj4gKyNkZWZpbmUgZ3Z0X2RiZ19pcnEoZm10LCBhcmdzLi4uKSBcCj4gKwlndnRfZGJnKEdWVF9E QkdfSVJRLCBmbXQsICMjYXJncykKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjUyY2ZhMzIKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L2d2dC5jCj4gQEAgLTAsMCAr MSwzOTMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0KGMpIDIwMTEtMjAxNiBJbnRlbCBDb3Jwb3Jh dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiAr ICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmls ZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAq IFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChp bmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4K PiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuwqDC oElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJT IEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCj4gKyAqIFNPRlRXQVJFLgo+ ICsgKi8KPiArCj4gKyNpbmNsdWRlIAo+ICsjaW5jbHVkZSAKPiArI2luY2x1ZGUgCj4gKwo+ICsj aW5jbHVkZSAiZ3Z0LmgiCj4gKwo+ICtzdHJ1Y3QgZ3Z0X2hvc3QgZ3Z0X2hvc3Q7Cj4gKwo+ICtz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1cHBvcnRlZF9oeXBlcnZpc29yc1tdID0gewo+ICsJ W0dWVF9IWVBFUlZJU09SX1RZUEVfWEVOXSA9ICJYZW4gSHlwZXJ2aXNvciIsCj4gKwlbR1ZUX0hZ UEVSVklTT1JfVFlQRV9LVk1dID0gIktWTSIsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IGd2dF9p bml0X2hvc3Qodm9pZCkKPiArewo+ICsJc3RydWN0IGd2dF9ob3N0ICpob3N0ID0gJmd2dF9ob3N0 Owo+ICsKPiArCWlmICghZ3Z0LmVuYWJsZSkgewo+ICsJCWd2dF9kYmdfY29yZSgiR1ZULWcgaGFz IGJlZW4gZGlzYWJsZWQgYnkga2VybmVsIHBhcmFtZXRlciIpOwo+ICsJCXJldHVybiAtRUlOVkFM Owo+ICsJfQo+ICsKPiArCWlmIChob3N0LT5pbml0aWFsaXplZCkgewo+ICsJCWd2dF9lcnIoIkdW VC1nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQhIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7 Cj4gKwl9Cj4gKwo+ICsJLyogWGVuIERPTSBVICovCj4gKwlpZiAoeGVuX2RvbWFpbigpICYmICF4 ZW5faW5pdGlhbF9kb21haW4oKSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlpZiAoeGVu X2luaXRpYWxfZG9tYWluKCkpIHsKPiArCQkvKiBYZW4gRG9tMCAqLwo+ICsJCWhvc3QtPmtkbSA9 IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKAo+ICsJCQkJc3ltYm9sX2dldCh4ZW5ndF9rZG0pLCAi eGVuZ3QiKTsKPiArCQlob3N0LT5oeXBlcnZpc29yX3R5cGUgPSBHVlRfSFlQRVJWSVNPUl9UWVBF X1hFTjsKPiArCX0gZWxzZSB7Cj4gKwkJLyogbm90IGluIFhlbi4gVHJ5IEtWTUdUICovCj4gKwkJ aG9zdC0+a2RtID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoCj4gKwkJCQlzeW1ib2xfZ2V0KGt2 bWd0X2tkbSksICJrdm0iKTsKPiArCQlob3N0LT5oeXBlcnZpc29yX3R5cGUgPSBHVlRfSFlQRVJW SVNPUl9UWVBFX0tWTTsKPiArCX0KPiArCj4gKwlpZiAoIWhvc3QtPmtkbSkKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwlpZiAoIWh5cGVydmlzb3JfZGV0ZWN0X2hvc3QoKSkKPiArCQlyZXR1 cm4gLUVOT0RFVjsKPiArCj4gKwlndnRfaW5mbygiUnVubmluZyB3aXRoIGh5cGVydmlzb3IgJXMg aW4gaG9zdCBtb2RlIiwKPiArCQkJc3VwcG9ydGVkX2h5cGVydmlzb3JzW2hvc3QtPmh5cGVydmlz b3JfdHlwZV0pOwo+ICsKPiArCWlkcl9pbml0KCZob3N0LT5kZXZpY2VfaWRyKTsKPiArCW11dGV4 X2luaXQoJmhvc3QtPmRldmljZV9pZHJfbG9jayk7Cj4gKwo+ICsJaG9zdC0+aW5pdGlhbGl6ZWQg PSB0cnVlOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaW5pdF9kZXZpY2Vf aW5mbyhzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGd2dF9kZXZpY2Vf aW5mbyAqaW5mbyA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKPiArCj4gKwlpZiAoIUlTX0JST0FEV0VM TChwZGV2LT5kZXZfcHJpdikpIHsKPiArCQlEUk1fREVCVUdfRFJJVkVSKCJVbnN1cHBvcnRlZCBH RU4gZGV2aWNlIik7Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJaWYgKElTX0JS T0FEV0VMTChwZGV2LT5kZXZfcHJpdikpIHsKPiArCQlpbmZvLT5tYXhfZ3R0X2dtX3N6ID0gKDFV TEwgPDwgMzIpOyAvKiA0R0IgKi8KPiArCQkvKgo+ICsJCcKgKiBUaGUgbGF5b3V0IG9mIEJBUjAg aW4gQkRXOgo+ICsJCcKgKiB8PCAtIE1NSU8gMk1CIC0+fDwtIFJlc2VydmVkIDZNQiAtPnw8LSBN QVggR1RUIDhNQi0+fAo+ICsJCcKgKgo+ICsJCcKgKiBHVFQgb2Zmc2V0IGluIEJBUjAgc3RhcnRz IGZyb20gOE1CIHRvIDE2TUIsIGFuZAo+ICsJCcKgKiBXaGF0ZXZlciBHVFQgc2l6ZSBpcyBjb25m aWd1cmVkIGluIEJJT1MsCj4gKwkJwqAqIHRoZSBzaXplIG9mIEJBUjAgaXMgYWx3YXlzIDE2TUIu IFRoZSBhY3R1YWwgY29uZmlndXJlZAo+ICsJCcKgKiBHVFQgc2l6ZSBjYW4gYmUgZm91bmQgaW4g R01DSF9DVFJMLgo+ICsJCcKgKi8KPiArCQlpbmZvLT5ndHRfc3RhcnRfb2Zmc2V0ID0gKDFVTCA8 PCAyMyk7IC8qIDhNQiAqLwo+ICsJCWluZm8tPm1heF9ndHRfc2l6ZSA9ICgxVUwgPDwgMjMpOyAv KiA4TUIgKi8KPiArCQlpbmZvLT5ndHRfZW50cnlfc2l6ZSA9IDg7Cj4gKwkJaW5mby0+Z3R0X2Vu dHJ5X3NpemVfc2hpZnQgPSAzOwo+ICsJCWluZm8tPmdtYWRyX2J5dGVzX2luX2NtZCA9IDg7Cj4g KwkJaW5mby0+bW1pb19zaXplID0gMiAqIDEwMjQgKiAxMDI0OyAvKiAyTUIgKi8KPiArCX0KPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF9pbml0aWFsX2NmZ19z cGFjZV9zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IHBjaV9k ZXYgKnBjaV9kZXYgPSBwZGV2LT5kZXZfcHJpdi0+ZGV2LT5wZGV2Owo+ICsJaW50IGk7Cj4gKwo+ ICsJZ3Z0X2RiZ19jb3JlKCJpbml0IGluaXRpYWwgY2ZnIHNwYWNlLCBpZCAlZCIsIHBkZXYtPmlk KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgR1ZUX0NGR19TUEFDRV9TWjsgaSArPSA0KQo+ICsJ CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwY2lfZGV2LCBpLAo+ICsJCQkJKHUzMiAqKSZwZGV2LT5p bml0aWFsX2NmZ19zcGFjZVtpXSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEdWVF9CQVJfTlVN OyBpKyspIHsKPiArCQlwZGV2LT5iYXJfc2l6ZVtpXSA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpX2Rl diwgaSAqIDIpOwo+ICsJCWd2dF9kYmdfY29yZSgiYmFyICVkIHNpemU6ICVsbHgiLCBpLCBwZGV2 LT5iYXJfc2l6ZVtpXSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNsZWFuX2luaXRp YWxfbW1pb19zdGF0ZShzdHJ1Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJaWYgKHBkZXYt Pmd0dG1taW9fdmEpIHsKPiArCQlpb3VubWFwKHBkZXYtPmd0dG1taW9fdmEpOwo+ICsJCXBkZXYt Pmd0dG1taW9fdmEgPSBOVUxMOwo+ICsJfQo+ICsKPiArCWlmIChwZGV2LT5nbWFkcl92YSkgewo+ ICsJCWlvdW5tYXAocGRldi0+Z21hZHJfdmEpOwo+ICsJCXBkZXYtPmdtYWRyX3ZhID0gTlVMTDsK PiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBpbml0X2luaXRpYWxfbW1pb19zdGF0ZShzdHJ1 Y3QgcGd0X2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGd2dF9kZXZpY2VfaW5mbyAqaW5m byA9ICZwZGV2LT5kZXZpY2VfaW5mbzsKPiArCj4gKwl1NjQgYmFyMCwgYmFyMTsKPiArCWludCBy YzsKPiArCj4gKwlndnRfZGJnX2NvcmUoImluaXQgaW5pdGlhbCBtbWlvIHN0YXRlLCBpZCAlZCIs IHBkZXYtPmlkKTsKPiArCj4gKwliYXIwID0gKih1NjQgKikmcGRldi0+aW5pdGlhbF9jZmdfc3Bh Y2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMF07Cj4gKwliYXIxID0gKih1NjQgKikmcGRldi0+aW5p dGlhbF9jZmdfc3BhY2VbR1ZUX1JFR19DRkdfU1BBQ0VfQkFSMV07Cj4gKwo+ICsJcGRldi0+Z3R0 bW1pb19iYXNlID0gYmFyMCAmIH4weGY7Cj4gKwlwZGV2LT5yZWdfbnVtID0gaW5mby0+bW1pb19z aXplIC8gNDsKPiArCXBkZXYtPmdtYWRyX2Jhc2UgPSBiYXIxICYgfjB4ZjsKPiArCj4gKwlwZGV2 LT5ndHRtbWlvX3ZhID0gaW9yZW1hcChwZGV2LT5ndHRtbWlvX2Jhc2UsIHBkZXYtPmJhcl9zaXpl WzBdKTsKPiArCWlmICghcGRldi0+Z3R0bW1pb192YSkgewo+ICsJCWd2dF9lcnIoImZhaWwgdG8g bWFwIEdUVE1NSU8gQkFSLiIpOwo+ICsJCXJldHVybiAtRUZBVUxUOwo+ICsJfQo+ICsKPiArCXBk ZXYtPmdtYWRyX3ZhID0gaW9yZW1hcChwZGV2LT5nbWFkcl9iYXNlLCBwZGV2LT5iYXJfc2l6ZVsy XSk7Cj4gKwlpZiAoIXBkZXYtPmdtYWRyX3ZhKSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBtYXAg R01BRFIgQkFSLiIpOwo+ICsJCXJjID0gLUVGQVVMVDsKPiArCQlnb3RvIGVycjsKPiArCX0KPiAr Cj4gKwlndnRfZGJnX2NvcmUoImJhcjA6IDB4JWxseCwgYmFyMTogMHglbGx4IiwgYmFyMCwgYmFy MSk7Cj4gKwlndnRfZGJnX2NvcmUoIm1taW8gc2l6ZTogJXgiLCBwZGV2LT5tbWlvX3NpemUpOwo+ ICsJZ3Z0X2RiZ19jb3JlKCJndHRtbWlvOiAweCVsbHgsIGdtYWRyOiAweCVsbHgiLCBwZGV2LT5n dHRtbWlvX2Jhc2UsCj4gKwkJCXBkZXYtPmdtYWRyX2Jhc2UpOwo+ICsJZ3Z0X2RiZ19jb3JlKCJn dHRtbWlvX3ZhOiAlcCIsIHBkZXYtPmd0dG1taW9fdmEpOwo+ICsJZ3Z0X2RiZ19jb3JlKCJnbWFk cl92YTogJXAiLCBwZGV2LT5nbWFkcl92YSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2VycjoKPiAr CWNsZWFuX2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKPiArCXJldHVybiByYzsKPiArfQo+ICsK PiArc3RhdGljIGludCBndnRfc2VydmljZV90aHJlYWQodm9pZCAqZGF0YSkKPiArewo+ICsJc3Ry dWN0IHBndF9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBndF9kZXZpY2UgKilkYXRhOwo+ICsJaW50 IHI7Cj4gKwo+ICsJZ3Z0X2RiZ19jb3JlKCJzZXJ2aWNlIHRocmVhZCBzdGFydCwgcGd0ICVkIiwg cGRldi0+aWQpOwo+ICsKPiArCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Cj4gKwkJ ciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShwZGV2LT5zZXJ2aWNlX3RocmVhZF93cSwKPiAr CQkJCWt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBwZGV2LT5zZXJ2aWNlX3JlcXVlc3QpOwo+ICsK PiArCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQo+ICsJCQlicmVhazsKPiArCj4gKwkJaWYg KGd2dF93YXJuX29uY2UociwKPiArCQkJInNlcnZpY2UgdGhyZWFkIGlzIHdha2VuIHVwIGJ5IHVu ZXhwZWN0ZWQgc2lnbmFsLiIpKQo+ICsJCQljb250aW51ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2xlYW5fc2VydmljZV90aHJlYWQoc3RydWN0IHBn dF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWlmIChwZGV2LT5zZXJ2aWNlX3RocmVhZCkgewo+ICsJ CWt0aHJlYWRfc3RvcChwZGV2LT5zZXJ2aWNlX3RocmVhZCk7Cj4gKwkJcGRldi0+c2VydmljZV90 aHJlYWQgPSBOVUxMOwo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGluaXRfc2VydmljZV90 aHJlYWQoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWluaXRfd2FpdHF1ZXVlX2hl YWQoJnBkZXYtPnNlcnZpY2VfdGhyZWFkX3dxKTsKPiArCj4gKwlwZGV2LT5zZXJ2aWNlX3RocmVh ZCA9IGt0aHJlYWRfcnVuKGd2dF9zZXJ2aWNlX3RocmVhZCwKPiArCQkJcGRldiwgImd2dF9zZXJ2 aWNlX3RocmVhZCVkIiwgcGRldi0+aWQpOwo+ICsKPiArCWlmICghcGRldi0+c2VydmljZV90aHJl YWQpIHsKPiArCQlndnRfZXJyKCJmYWlsIHRvIHN0YXJ0IHNlcnZpY2UgdGhyZWFkLiIpOwo+ICsJ CXJldHVybiAtRU5PU1BDOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBjbGVhbl9wZ3RfZGV2aWNlKHN0cnVjdCBwZ3RfZGV2aWNlICpwZGV2KQo+ICt7Cj4g KwljbGVhbl9zZXJ2aWNlX3RocmVhZChwZGV2KTsKPiArCWNsZWFuX2luaXRpYWxfbW1pb19zdGF0 ZShwZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpbml0X3BndF9kZXZpY2Uoc3RydWN0IHBn dF9kZXZpY2UgKnBkZXYsCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4g K3sKPiArCWludCByYzsKPiArCj4gKwlyYyA9IGluaXRfZGV2aWNlX2luZm8ocGRldik7Cj4gKwlp ZiAocmMpCj4gKwkJcmV0dXJuIHJjOwo+ICsKPiArCWluaXRfaW5pdGlhbF9jZmdfc3BhY2Vfc3Rh dGUocGRldik7Cj4gKwo+ICsJcmMgPSBpbml0X2luaXRpYWxfbW1pb19zdGF0ZShwZGV2KTsKPiAr CWlmIChyYykKPiArCQlnb3RvIGVycjsKPiArCj4gKwlyYyA9IGluaXRfc2VydmljZV90aHJlYWQo cGRldik7Cj4gKwlpZiAocmMpCj4gKwkJZ290byBlcnI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK2Vy cjoKPiArCWNsZWFuX3BndF9kZXZpY2UocGRldik7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgcG9zdF9pbml0X3BndF9kZXZpY2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYp Cj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBmcmVlX3BndF9kZXZp Y2Uoc3RydWN0IHBndF9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBndnRfaG9zdCAqaG9z dCA9ICZndnRfaG9zdDsKPiArCj4gKwltdXRleF9sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2sp Owo+ICsJaWRyX3JlbW92ZSgmaG9zdC0+ZGV2aWNlX2lkciwgcGRldi0+aWQpOwo+ICsJbXV0ZXhf dW5sb2NrKCZob3N0LT5kZXZpY2VfaWRyX2xvY2spOwo+ICsKPiArCXZmcmVlKHBkZXYpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBndF9kZXZpY2UgKmFsbG9jX3BndF9kZXZpY2Uoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt7Cj4gKwlzdHJ1Y3QgZ3Z0X2hvc3QgKmhv c3QgPSAmZ3Z0X2hvc3Q7Cj4gKwlzdHJ1Y3QgcGd0X2RldmljZSAqcGRldiA9IE5VTEw7Cj4gKwo+ ICsJcGRldiA9IHZ6YWxsb2Moc2l6ZW9mKCpwZGV2KSk7Cj4gKwlpZiAoIXBkZXYpCj4gKwkJcmV0 dXJuIE5VTEw7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPiAr CXBkZXYtPmlkID0gaWRyX2FsbG9jKCZob3N0LT5kZXZpY2VfaWRyLCBwZGV2LCAwLCAwLCBHRlBf S0VSTkVMKTsKPiArCW11dGV4X3VubG9jaygmaG9zdC0+ZGV2aWNlX2lkcl9sb2NrKTsKPiArCj4g KwlpZiAocGRldi0+aWQgPCAwKSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBhbGxvY2F0ZSBwZ3Qg ZGV2aWNlIGlkLiIpOwo+ICsJCWdvdG8gZXJyOwo+ICsJfQo+ICsKPiArCW11dGV4X2luaXQoJnBk ZXYtPmxvY2spOwo+ICsJcGRldi0+ZGV2X3ByaXYgPSBkZXZfcHJpdjsKPiArCWlkcl9pbml0KCZw ZGV2LT5pbnN0YW5jZV9pZHIpOwo+ICsKPiArCXJldHVybiBwZGV2Owo+ICtlcnI6Cj4gKwlmcmVl X3BndF9kZXZpY2UocGRldik7Cj4gKwlyZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArdm9pZCBndnRf ZGVzdHJveV9wZ3RfZGV2aWNlKHZvaWQgKnByaXZhdGVfZGF0YSkKPiArewo+ICsJc3RydWN0IHBn dF9kZXZpY2UgKnBkZXYgPSAoc3RydWN0IHBndF9kZXZpY2UgKilwcml2YXRlX2RhdGE7Cj4gKwo+ ICsJY2xlYW5fcGd0X2RldmljZShwZGV2KTsKPiArCWZyZWVfcGd0X2RldmljZShwZGV2KTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGd2dF9jcmVhdGVfcGd0X2RldmljZSAtIGNyZWF0ZSBhIEdWVCBw aHlzaWNhbCBkZXZpY2UKPiArICogQGRldjogZHJtIGRldmljZQo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgaW5pdGlhbGl6YXRpb24gc3RhZ2UsIHRvIGNyZWF0ZSBh IHBoeXNpY2FsCj4gKyAqIEdWVCBkZXZpY2UgYW5kIGluaXRpYWxpemUgbmVjZXNzYXJ5IEdWVCBj b21wb25lbnRzIGZvciBpdC4KPiArICoKPiArICogUmV0dXJuczoKPiArICogcG9pbnRlciB0byB0 aGUgcGd0X2RldmljZSBzdHJ1Y3R1cmUsIE5VTEwgaWYgZmFpbGVkLgo+ICsgKi8KPiArdm9pZCAq Z3Z0X2NyZWF0ZV9wZ3RfZGV2aWNlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikK PiArewo+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYgPSBOVUxMOwo+ICsJc3RydWN0IGd2dF9o b3N0ICpob3N0ID0gJmd2dF9ob3N0Owo+ICsJaW50IHJjOwo+ICsKPiArCWlmICghaG9zdC0+aW5p dGlhbGl6ZWQgJiYgIWd2dF9pbml0X2hvc3QoKSkgewo+ICsJCWd2dF9lcnIoImd2dF9pbml0X2hv c3QgZmFpbCIpOwo+ICsJCXJldHVybiBOVUxMOwo+ICsJfQo+ICsKPiArCWd2dF9kYmdfY29yZSgi Y3JlYXRlIG5ldyBwZ3QgZGV2aWNlLCBpOTE1IGRldl9wcml2OiAlcCIsIGRldl9wcml2KTsKPiAr Cj4gKwlwZGV2ID0gYWxsb2NfcGd0X2RldmljZShkZXZfcHJpdik7Cj4gKwlpZiAoIXBkZXYpIHsK PiArCQlndnRfZXJyKCJmYWlsIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGd0IGRldmljZS4iKTsK PiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlndnRfZGJnX2NvcmUoImluaXQgcGd0IGRldmlj ZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4gKwo+ICsJcmMgPSBpbml0X3BndF9kZXZpY2UocGRldiwg ZGV2X3ByaXYpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJZ3Z0X2VycigiZmFpbCB0byBpbml0IHBoeXNp Y2FsIGRldmljZSBzdGF0ZS4iKTsKPiArCQlnb3RvIGVycjsKPiArCX0KPiArCj4gKwlndnRfZGJn X2NvcmUoInBndCBkZXZpY2UgY3JlYXRpb24gZG9uZSwgaWQgJWQiLCBwZGV2LT5pZCk7Cj4gKwo+ ICsJcmV0dXJuIHBkZXY7Cj4gK2VycjoKPiArCWlmIChwZGV2KSB7Cj4gKwkJZ3Z0X2Rlc3Ryb3lf cGd0X2RldmljZShwZGV2KTsKPiArCQlwZGV2ID0gTlVMTDsKPiArCX0KPiArCXJldHVybiBOVUxM Owo+ICt9Cj4gKwo+ICsvKioKPiArICogZ3Z0X3Bvc3RfaW5pdF9wZ3RfZGV2aWNlIC0gcG9zdCBp bml0IGEgR1ZUIHBoeXNpY2FsIGRldmljZQo+ICsgKiBAZGV2OiBkcm0gZGV2aWNlCj4gKyAqCj4g KyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIGluaXRpYWxpemF0 aW9uIHN0YWdlLCB0bwo+ICsgKiBwb3N0LWluaXRpYWxpemUgYSBwaHlzaWNhbCBHVlQgZGV2aWNl IGFuZCBpbml0aWFsaXplIG5lY2Vzc2FyeQo+ICsgKiBHVlQgY29tcG9uZW50cyByZWx5IG9uIGk5 MTUgY29tcG9uZW50cy4KPiArICoKPiArICogUmV0dXJuczoKPiArICogemVybyBvbiBzdWNjZXNz LCBub24temVybyBpZiBmYWlsZWQuCj4gKyAqLwo+ICtpbnQgZ3Z0X3Bvc3RfaW5pdF9wZ3RfZGV2 aWNlKHZvaWQgKnByaXZhdGVfZGF0YSkKPiArewo+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXYg PSAoc3RydWN0IHBndF9kZXZpY2UgKilwcml2YXRlX2RhdGE7Cj4gKwlzdHJ1Y3QgZ3Z0X2hvc3Qg Kmhvc3QgPSAmZ3Z0X2hvc3Q7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJaWYgKCFob3N0LT5pbml0aWFs aXplZCkgewo+ICsJCWd2dF9lcnIoImd2dF9ob3N0IGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZC4i KTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlndnRfZGJnX2NvcmUoInBvc3Qg aW5pdCBwZ3QgZGV2aWNlICVkIiwgcGRldi0+aWQpOwo+ICsKPiArCXJjID0gcG9zdF9pbml0X3Bn dF9kZXZpY2UocGRldik7Cj4gKwlpZiAocmMpIHsKPiArCQlndnRfZXJyKCJmYWlsIHRvIHBvc3Qg aW5pdCBwaHlzaWNhbCBkZXZpY2Ugc3RhdGUuIik7Cj4gKwkJcmV0dXJuIHJjOwo+ICsJfQo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9ndnQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9ndnQuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDQ1MDE5OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvZ3Z0LmgKPiBAQCAtMCwwICsxLDEwMCBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiAr ICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfR1ZUX0hfCj4gKyNkZWZpbmUgX0dWVF9IXwo+ICsKPiArI2luY2x1ZGUgImk5MTVfZHJ2 LmgiCj4gKyNpbmNsdWRlICJpOTE1X3ZncHUuaCIKPiArCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ ICsjaW5jbHVkZSAicGFyYW1zLmgiCj4gKyNpbmNsdWRlICJyZWcuaCIKPiArI2luY2x1ZGUgImh5 cGVyY2FsbC5oIgo+ICsjaW5jbHVkZSAibXB0LmgiCj4gKwo+ICsjZGVmaW5lIEdWVF9NQVhfVkdQ VSA4Cj4gKwo+ICtlbnVtIHsKPiArCUdWVF9IWVBFUlZJU09SX1RZUEVfWEVOID0gMCwKPiArCUdW VF9IWVBFUlZJU09SX1RZUEVfS1ZNLAo+ICt9Owo+ICsKPiArc3RydWN0IGd2dF9ob3N0IHsKPiAr CWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gKwlpbnQgaHlwZXJ2aXNvcl90eXBlOwo+ICsJc3RydWN0IG11 dGV4IGRldmljZV9pZHJfbG9jazsKPiArCXN0cnVjdCBpZHIgZGV2aWNlX2lkcjsKPiArCXN0cnVj dCBndnRfa2VybmVsX2RtICprZG07Cj4gK307Cj4gKwo+ICtleHRlcm4gc3RydWN0IGd2dF9ob3N0 IGd2dF9ob3N0Owo+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0geGVuZ3Rfa2RtOwo+ICtl eHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfZG0ga3ZtZ3Rfa2RtOwo+ICsKPiArLyogRGVzY3JpYmUg dGhlIGxpbWl0YXRpb24gb2YgSFcuKi8KPiArc3RydWN0IGd2dF9kZXZpY2VfaW5mbyB7Cj4gKwl1 NjQgbWF4X2d0dF9nbV9zejsKPiArCXUzMiBndHRfc3RhcnRfb2Zmc2V0Owo+ICsJdTMyIGd0dF9l bmRfb2Zmc2V0Owo+ICsJdTMyIG1heF9ndHRfc2l6ZTsKPiArCXUzMiBndHRfZW50cnlfc2l6ZTsK PiArCXUzMiBndHRfZW50cnlfc2l6ZV9zaGlmdDsKPiArCXUzMiBnbWFkcl9ieXRlc19pbl9jbWQ7 Cj4gKwl1MzIgbW1pb19zaXplOwo+ICt9Owo+ICsKPiArc3RydWN0IHZndF9kZXZpY2Ugewo+ICsJ aW50IGlkOwo+ICsJaW50IHZtX2lkOwo+ICsJc3RydWN0IHBndF9kZXZpY2UgKnBkZXY7Cj4gKwli b29sIHdhcm5fdW50cmFjazsKPiArfTsKPiArCj4gK3N0cnVjdCBwZ3RfZGV2aWNlIHsKPiArCXN0 cnVjdCBtdXRleCBsb2NrOwo+ICsJaW50IGlkOwo+ICsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdjsKPiArCXN0cnVjdCBpZHIgaW5zdGFuY2VfaWRyOwo+ICsKPiArCXN0cnVj dCBndnRfZGV2aWNlX2luZm8gZGV2aWNlX2luZm87Cj4gKwo+ICsJdTggaW5pdGlhbF9jZmdfc3Bh Y2VbR1ZUX0NGR19TUEFDRV9TWl07Cj4gKwl1NjQgYmFyX3NpemVbR1ZUX0JBUl9OVU1dOwo+ICsK PiArCXU2NCBndHRtbWlvX2Jhc2U7Cj4gKwl2b2lkICpndHRtbWlvX3ZhOwo+ICsKPiArCXU2NCBn bWFkcl9iYXNlOwo+ICsJdm9pZCAqZ21hZHJfdmE7Cj4gKwo+ICsJdTMyIG1taW9fc2l6ZTsKPiAr CXUzMiByZWdfbnVtOwo+ICsKPiArCXdhaXRfcXVldWVfaGVhZF90IHNlcnZpY2VfdGhyZWFkX3dx Owo+ICsJc3RydWN0IHRhc2tfc3RydWN0ICpzZXJ2aWNlX3RocmVhZDsKPiArCXVuc2lnbmVkIGxv bmcgc2VydmljZV9yZXF1ZXN0Owo+ICt9Owo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9oeXBlcmNhbGwuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d2dC9oeXBlcmNhbGwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u MGE0MTg3NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQv aHlwZXJjYWxsLmgKPiBAQCAtMCwwICsxLDMwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAy MDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElO IFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9HVlRfSFlQRVJDQUxM X0hfCj4gKyNkZWZpbmUgX0dWVF9IWVBFUkNBTExfSF8KPiArCj4gK3N0cnVjdCBndnRfa2VybmVs X2RtIHsKPiArfTsKPiArCj4gKyNlbmRpZiAvKiBfR1ZUX0hZUEVSQ0FMTF9IXyAqLwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvbXB0LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndnQvbXB0LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU1 OTRiYjgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21w dC5oCj4gQEAgLTAsMCArMSwzNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2 IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9j dW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBT b2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u Cj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJl IGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4g KyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVE LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09Q WVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIK PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP UiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiAr ICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfR1ZUX01QVF9IXwo+ICsjZGVmaW5l IF9HVlRfTVBUX0hfCj4gKwo+ICtzdHJ1Y3Qgdmd0X2RldmljZTsKPiArCj4gK3N0YXRpYyBpbmxp bmUgYm9vbCBoeXBlcnZpc29yX2RldGVjdF9ob3N0KHZvaWQpCj4gK3sKPiArCXJldHVybiBmYWxz ZTsKPiArfQo+ICsKPiArI2VuZGlmIC8qIF9HVlRfTVBUX0hfICovCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9wYXJhbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2 dC9wYXJhbXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDM4MWQx Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1z LmMKPiBAQCAtMCwwICsxLDMyIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAyMDExLTIwMTYg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZ UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQo+ICsg KiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiZ3Z0LmgiCj4gKwo+ICtzdHJ1Y3Qg Z3Z0X2tlcm5lbF9wYXJhbXMgZ3Z0ID0gewo+ICsJLmVuYWJsZSA9IGZhbHNlLAo+ICsJLmRlYnVn ID0gMCwKPiArfTsKPiArCj4gK21vZHVsZV9wYXJhbV9uYW1lZChndnRfZW5hYmxlLCBndnQuZW5h YmxlLCBib29sLCAwNjAwKTsKPiArTU9EVUxFX1BBUk1fREVTQyhndnRfZW5hYmxlLCAiRW5hYmxl IEludGVsIEdWVC1nIGhvc3Qgc3VwcG9ydCIpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndnQvcGFyYW1zLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcGFyYW1zLmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmQyOTU1YjkKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3BhcmFtcy5oCj4gQEAgLTAs MCArMSwzNCBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhl cmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiAr ICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ug KGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGlu IGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJl Lgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAr ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7C oMKgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwKPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUu Cj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfR1ZUX1BBUkFNU19IXwo+ICsjZGVmaW5lIF9HVlRfUEFS QU1TX0hfCj4gKwo+ICtzdHJ1Y3QgZ3Z0X2tlcm5lbF9wYXJhbXMgewo+ICsJYm9vbCBlbmFibGU7 Cj4gKwlpbnQgZGVidWc7Cj4gK307Cj4gKwo+ICtleHRlcm4gc3RydWN0IGd2dF9rZXJuZWxfcGFy YW1zIGd2dDsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndnQvcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndnQvcmVnLmgKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmQzNjNiNzQKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L3JlZy5oCj4gQEAgLTAsMCArMSwzNCBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln aHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQg U0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK PiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVT RSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiAr I2lmbmRlZiBfR1ZUX1JFR19ICj4gKyNkZWZpbmUgX0dWVF9SRUdfSAo+ICsKPiArI2RlZmluZSBH VlRfQ0ZHX1NQQUNFX1NaCTI1Ngo+ICsjZGVmaW5lIEdWVF9CQVJfTlVNCQk0Cj4gKwo+ICsjZGVm aW5lIEdWVF9SRUdfQ0ZHX1NQQUNFX0JBUjAJMHgxMAo+ICsjZGVmaW5lIEdWVF9SRUdfQ0ZHX1NQ QUNFX0JBUjEJMHgxOAo+ICsjZGVmaW5lIEdWVF9SRUdfQ0ZHX1NQQUNFX0JBUjIJMHgyMAo+ICsK PiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gaW5kZXggMWM2ZDIyNy4uZjNiZWQz NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwo+IEBAIC0zNSw2ICszNSw3IEBACj4gwqAj aW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gwqAjaW5jbHVkZSAKPiDCoCNpbmNsdWRlICJpOTE1X2Ry di5oIgo+ICsjaW5jbHVkZSAiaTkxNV9ndnQuaCIKPiDCoCNpbmNsdWRlICJpOTE1X3ZncHUuaCIK PiDCoCNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCj4gwqAjaW5jbHVkZSAKPiBAQCAtMTA0NSw2ICsx MDQ2LDEwIEBAIGludCBpOTE1X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVu c2lnbmVkIGxvbmcgZmxhZ3MpCj4gwqAKPiDCoAlpbnRlbF91bmNvcmVfaW5pdChkZXYpOwo+IMKg Cj4gKwlyZXQgPSBpbnRlbF9ndnRfaW5pdChkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91 dF91bmNvcmVfZmluaTsKPiArCj4gwqAJcmV0ID0gaTkxNV9nZW1fZ3R0X2luaXQoZGV2KTsKPiDC oAlpZiAocmV0KQo+IMKgCQlnb3RvIG91dF91bmNvcmVfZmluaTsKPiBAQCAtMTEzNSw2ICsxMTQw LDEyIEBAIGludCBpOTE1X2RyaXZlcl9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2ln bmVkIGxvbmcgZmxhZ3MpCj4gwqAJCWdvdG8gb3V0X3Bvd2VyX3dlbGw7Cj4gwqAJfQo+IMKgCj4g KwlyZXQgPSBpbnRlbF9ndnRfcG9zdF9pbml0KGRldik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gcG9zdCBpbml0IHBndCBkZXZpY2VcbiIpOwo+ICsJCWdvdG8gb3V0 X3Bvd2VyX3dlbGw7Cj4gKwl9Cj4gKwo+IMKgCS8qCj4gwqAJwqAqIE5vdGlmeSBhIHZhbGlkIHN1 cmZhY2UgYWZ0ZXIgbW9kZXNldHRpbmcsCj4gwqAJwqAqIHdoZW4gcnVubmluZyBpbnNpZGUgYSBW TS4KPiBAQCAtMTE3Nyw2ICsxMTg4LDcgQEAgb3V0X2dlbV91bmxvYWQ6Cj4gwqBvdXRfZ3R0Ogo+ IMKgCWk5MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKGRldik7Cj4gwqBvdXRfdW5jb3JlX2Zpbmk6Cj4g KwlpbnRlbF9ndnRfY2xlYW51cChkZXYpOwo+IMKgCWludGVsX3VuY29yZV9maW5pKGRldik7Cj4g wqAJaTkxNV9tbWlvX2NsZWFudXAoZGV2KTsKPiDCoHB1dF9icmlkZ2U6Cj4gQEAgLTEyMjMsNiAr MTIzNSw4IEBAIGludCBpOTE1X2RyaXZlcl91bmxvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldikK PiDCoAo+IMKgCWludGVsX21vZGVzZXRfY2xlYW51cChkZXYpOwo+IMKgCj4gKwlpbnRlbF9ndnRf Y2xlYW51cChkZXYpOwo+ICsKPiDCoAkvKgo+IMKgCcKgKiBmcmVlIHRoZSBtZW1vcnkgc3BhY2Ug YWxsb2NhdGVkIGZvciB0aGUgY2hpbGQgZGV2aWNlCj4gwqAJwqAqIGNvbmZpZyBwYXJzZWQgZnJv bSBWQlQKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCAyMGQ5ZGJkLi4yZjg5N2MzIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTE3MDUsNiArMTcwNSwxMCBAQCBzdHJ1 Y3QgaTkxNV93b3JrYXJvdW5kcyB7Cj4gwqAJdTMyIGh3X3doaXRlbGlzdF9jb3VudFtJOTE1X05V TV9SSU5HU107Cj4gwqB9Owo+IMKgCj4gK3N0cnVjdCBpOTE1X2d2dCB7Cj4gKwl2b2lkICpwZ3Rf ZGV2aWNlOwo+ICt9Owo+ICsKPiDCoHN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHsKPiDCoAlib29s IGFjdGl2ZTsKPiDCoH07Cj4gQEAgLTE3NDQsNiArMTc0OCw4IEBAIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlIHsKPiDCoAo+IMKgCXN0cnVjdCBpOTE1X3ZpcnR1YWxfZ3B1IHZncHU7Cj4gwqAKPiAr CXN0cnVjdCBpOTE1X2d2dCBndnQ7Cj4gKwo+IMKgCXN0cnVjdCBpbnRlbF9ndWMgZ3VjOwo+IMKg Cj4gwqAJc3RydWN0IGludGVsX2NzciBjc3I7Cj4gQEAgLTI3ODAsNiArMjc4NiwxMiBAQCB2b2lk IGludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0X19sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+IMKgdm9pZCBpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dF9fbG9ja2Vk KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiDCoAkJCQkJZW51bSBmb3JjZXdh a2VfZG9tYWlucyBkb21haW5zKTsKPiDCoHZvaWQgYXNzZXJ0X2ZvcmNld2FrZXNfaW5hY3RpdmUo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArCj4gK3N0YXRpYyBpbmxpbmUg Ym9vbCBpbnRlbF9ndnRfYWN0aXZlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXJl dHVybiB0b19pOTE1KGRldiktPmd2dC5wZ3RfZGV2aWNlID8gdHJ1ZSA6IGZhbHNlOwo+ICt9Cj4g Kwo+IMKgc3RhdGljIGlubGluZSBib29sIGludGVsX3ZncHVfYWN0aXZlKHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gwqB7Cj4gwqAJcmV0dXJuIHRvX2k5MTUoZGV2KS0+dmdwdS5hY3RpdmU7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3Z0LmMgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2d2dC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi4zY2E3MjMyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ3Z0LmMKPiBAQCAtMCwwICsxLDkzIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodChjKSAy MDExLTIwMTYgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4g KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhp cyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkg c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv ZiB0aGUKPiArICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAq IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg TUVSQ0hBTlRBQklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAo+ICsgKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElO IFRIRQo+ICsgKiBTT0ZUV0FSRS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9kcnYuaCIK PiArI2luY2x1ZGUgImk5MTVfZ3Z0LmgiCj4gKwo+ICsvKioKPiArICogRE9DOiBJbnRlbCBHVlQt ZyBob3N0IHN1cHBvcnQKPiArICoKPiArICogSW50ZWwgR1ZULWcgaXMgYSBncmFwaGljcyB2aXJ0 dWFsaXphdGlvbiB0ZWNobm9sb2d5IHdoaWNoIHNoYXJlcyB0aGUKPiArICogR1BVIGFtb25nIG11 bHRpcGxlIHZpcnR1YWwgbWFjaGluZXMgb24gYSB0aW1lLXNoYXJpbmcgYmFzaXMuIEVhY2gKPiAr ICogdmlydHVhbCBtYWNoaW5lIGlzIHByZXNlbnRlZCBhIHZpcnR1YWwgR1BVICh2R1BVKSwgd2hp Y2ggaGFzIGVxdWl2YWxlbnQKPiArICogZmVhdHVyZXMgYXMgdGhlIHVuZGVybHlpbmcgcGh5c2lj YWwgR1BVIChwR1BVKSwgc28gaTkxNSBkcml2ZXIgY2FuIHJ1bgo+ICsgKiBzZWFtbGVzc2x5IGlu IGEgdmlydHVhbCBtYWNoaW5lLiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGVuZ2xpZ2h0bWVudHMK PiArICogb2YgR1ZUIGFuZCB0aGUgbmVjZXNzYXJ5IGNvbXBvbmVudHMgdXNlZCBieSBHVlQgaW4g aTkxNSBkcml2ZXIuCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIGludGVsX2d2dF9pbml0IC0gaW5p dGlhbGl6ZSBHVlQgY29tcG9uZW50cyBhdCB0aGUgYmVnaW5uaW5nIG9mIGk5MTUKPiArICogZHJp dmVyIGxvYWRpbmcuCj4gKyAqIEBkZXY6IGRybSBkZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBpbml0aWFsaXphdGlvbiBz dGFnZSwKPiArICogdG8gaW5pdGlhbGl6ZSB0aGUgR1ZUIGNvbXBvbmVudHMgdGhhdCBoYXZlIHRv IGJlIGluaXRpYWxpemVkCj4gKyAqIGJlZm9yZSBIVyBnZXRzIHRvdWNoZWQgYnkgb3RoZXIgaTkx NSBjb21wb25lbnRzLgo+ICsgKi8KPiAraW50IGludGVsX2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUoZGV2KTsKPiArCj4gKwlkZXZfcHJpdi0+Z3Z0LnBndF9kZXZpY2UgPSBndnRfY3JlYXRl X3BndF9kZXZpY2UoZGV2X3ByaXYpOwo+ICsJaWYgKGludGVsX2d2dF9hY3RpdmUoZGV2KSkKPiAr CQlEUk1fREVCVUdfRFJJVkVSKCJHVlQtZyBpcyBydW5uaW5nIGluIGhvc3QgbW9kZVxuIik7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpbnRlbF9ndnRfcG9zdF9pbml0 IC0gaW5pdGlhbGl6ZSBHVlQgY29tcG9uZW50cyBhdCB0aGUgZW5kIG9mIGk5MTUKPiArICogZHJp dmVyIGxvYWRpbmcuCj4gKyAqIEBkZXY6IGRybSBkZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbml0aWFsaXphdGlvbiBzdGFnZSwK PiArICogdG8gaW5pdGlhbGl6ZSB0aGUgR1ZUIGNvbXBvbmVudHMgdGhhdCBoYXZlIHRvIGJlIGlu aXRpYWxpemVkIGFmdGVyCj4gKyAqIG90aGVyIGk5MTUgY29tcG9uZW50cyBhcmUgcmVhZHkuCj4g KyAqLwo+ICtpbnQgaW50ZWxfZ3Z0X3Bvc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7 Cj4gKwo+ICsJaWYgKCFpbnRlbF9ndnRfYWN0aXZlKGRldikpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ ICsJcmV0dXJuIGd2dF9wb3N0X2luaXRfcGd0X2RldmljZShkZXZfcHJpdi0+Z3Z0LnBndF9kZXZp Y2UpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogaW50ZWxfZ3Z0X2NsZWFudXAgLSBjbGVhbnVwIEdW VCBjb21wb25lbnRzIHdoZW4gaTkxNSBkcml2ZXIgaXMgdW5sb2FkaW5nCj4gKyAqIEBkZXY6IGRy bSBkZXZpY2UgKgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCB0aGUgaTkx NSBkcml2ZXIgdW5sb2FkaW5nIHN0YWdlLCB0byBzaHV0ZG93bgo+ICsgKiBHVlQgY29tcG9uZW50 cyBhbmQgcmVsZWFzZSB0aGUgcmVsYXRlZCByZXNvdXJjZXMuCj4gKyAqLwo+ICt2b2lkIGludGVs X2d2dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoZGV2KTsKPiArCj4gKwlpZiAoIWludGVs X2d2dF9hY3RpdmUoZGV2KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZ3Z0X2Rlc3Ryb3lfcGd0X2Rl dmljZShkZXZfcHJpdi0+Z3Z0LnBndF9kZXZpY2UpOwo+ICsJZGV2X3ByaXYtPmd2dC5wZ3RfZGV2 aWNlID0gTlVMTDsKPiArfQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2d2dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ndnQuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzBjYzIwNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2d2dC5oCj4gQEAgLTAsMCArMSw0OSBAQAo+ICsvKgo+ ICsgKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz IHJlc2VydmVkLgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2Fy ZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBp bmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBh bmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMg dG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC7CoMKgSU4gTk8gRVZFTlQgU0hB TEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBB TlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKPiAr ICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBP UiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKPiArICogU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2lm bmRlZiBfSTkxNV9HVlRfSF8KPiArI2RlZmluZSBfSTkxNV9HVlRfSF8KPiArCj4gKyNpZmRlZiBD T05GSUdfRFJNX0k5MTVfR1ZUCj4gK2V4dGVybiB2b2lkICpndnRfY3JlYXRlX3BndF9kZXZpY2Uo c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKPiArZXh0ZXJuIGludCBndnRfcG9z dF9pbml0X3BndF9kZXZpY2Uodm9pZCAqZGF0YSk7Cj4gK2V4dGVybiB2b2lkIGd2dF9kZXN0cm95 X3BndF9kZXZpY2Uodm9pZCAqZGF0YSk7Cj4gKwo+ICtleHRlcm4gaW50IGludGVsX2d2dF9pbml0 KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICtleHRlcm4gaW50IGludGVsX2d2dF9wb3N0X2lu aXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Cj4gK2V4dGVybiB2b2lkIGludGVsX2d2dF9jbGVh bnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwo+ICsjZWxzZQo+ICtleHRlcm4gaW50IGludGVs X2d2dF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9 Cj4gK2V4dGVybiBpbnQgaW50ZWxfZ3Z0X3Bvc3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICtleHRlcm4gdm9pZCBpbnRlbF9ndnRfY2xlYW51 cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICt7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsjZW5k aWYgLyogX0k5MTVfR1ZUX0hfICovCi0tIApKb29uYXMgTGFodGluZW4KT3BlbiBTb3VyY2UgVGVj aG5vbG9neSBDZW50ZXIKSW50ZWwgQ29ycG9yYXRpb24KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==