From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 2/3] drm/arm: Add support for Mali Display Processors Date: Thu, 9 Jun 2016 20:56:29 +0200 Message-ID: <20160609185629.GU3363@phenom.ffwll.local> References: <1465489099-25628-1-git-send-email-Liviu.Dudau@arm.com> <1465489099-25628-3-git-send-email-Liviu.Dudau@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1465489099-25628-3-git-send-email-Liviu.Dudau@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: devicetree , Emil Velikov , LKML , DRI devel , Rob Herring , LAKML List-Id: devicetree@vger.kernel.org T24gVGh1LCBKdW4gMDksIDIwMTYgYXQgMDU6MTg6MThQTSArMDEwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6Cj4gQWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcgZmFtaWx5IG9mIERpc3BsYXkgUHJvY2Vzc29y cyBmcm9tIEFSTSBMdGQuCj4gVGhpcyBjb21taXQgYWRkcyBiYXNpYyBzdXBwb3J0IGZvciBNYWxp IERQNTAwLCBEUDU1MCBhbmQgRFA2NTAKPiBwYXJ0cywgd2l0aCBvbmx5IHRoZSBkaXNwbGF5IGVu Z2luZSBiZWluZyBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC4KPiAKPiBDYzogRGF2aWQgQnJvd24g PERhdmlkLkJyb3duQGFybS5jb20+Cj4gQ2M6IEJyaWFuIFN0YXJrZXkgPEJyaWFuLlN0YXJrZXlA YXJtLmNvbT4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBMaXZpdSBEdWRhdSA8TGl2aXUuRHVkYXVAYXJt LmNvbT4KCkJ1bmNoIG9mIGRyaXZlLWJ5IGNvbW1lbnRzIGJlbG93LiBMb29rcyByYXRoZXIgcHJl dHR5IG92ZXJhbGwgXG8vCgpDaGVlcnMsIERhbmllbAo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v YXJtL0tjb25maWcgICAgICAgICB8ICAxNiArCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZp bGUgICAgICAgIHwgICAyICsKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfY3J0Yy5jICAg fCAyMzkgKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuYyAg ICB8IDUwMCArKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9kcnYuaCAgICB8ICA0OCArKysKPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBf aHcuYyAgICAgfCA2OTEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRy aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmggICAgIHwgMjQxICsrKysrKysrKysrKysKPiAg ZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgfCAyNzEgKysrKysrKysrKysrKysK PiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcmVncy5oICAgfCAxNzIgKysrKysrKysrCj4g IDkgZmlsZXMgY2hhbmdlZCwgMjE4MCBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfaHcuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXJtL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL0tjb25maWcKPiBpbmRleCBlYWVk NDU0Li4xYjI5MDY1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vS2NvbmZpZwo+IEBAIC0yNSwzICsyNSwxOSBAQCBj b25maWcgRFJNX0hETENEX1NIT1dfVU5ERVJSVU4KPiAgCSAgRW5hYmxlIHRoaXMgb3B0aW9uIHRv IHNob3cgaW4gcmVkIGNvbG91ciB0aGUgcGl4ZWxzIHRoYXQgdGhlCj4gIAkgIEhETENEIGRldmlj ZSBkaWQgbm90IGZldGNoIGZyb20gZnJhbWVidWZmZXIgZHVlIHRvIHVuZGVycnVuCj4gIAkgIGNv bmRpdGlvbnMuCj4gKwo+ICtjb25maWcgRFJNX01BTElfRElTUExBWQo+ICsJdHJpc3RhdGUgIkFS TSBNYWxpIERpc3BsYXkgUHJvY2Vzc29yIgo+ICsJZGVwZW5kcyBvbiBEUk0gJiYgT0YgJiYgKEFS TSB8fCBBUk02NCkKPiArCWRlcGVuZHMgb24gQ09NTU9OX0NMSwo+ICsJc2VsZWN0IERSTV9BUk0K PiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+ICsJc2VsZWN0IERSTV9LTVNfQ01BX0hFTFBFUgo+ ICsJc2VsZWN0IERSTV9HRU1fQ01BX0hFTFBFUgo+ICsJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJT Cj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBjb21waWxl IHRoZSBBUk0gTWFsaSBEaXNwbGF5Cj4gKwkgIFByb2Nlc3NvciBkcml2ZXIuIEl0IHN1cHBvcnRz IHRoZSBEUDUwMCwgRFA1NTAgYW5kIERQNjUwIHZhcmlhbnRzCj4gKwkgIG9mIHRoZSBoYXJkd2Fy ZS4KPiArCj4gKwkgIElmIGNvbXBpbGVkIGFzIGEgbW9kdWxlIGl0IHdpbGwgYmUgY2FsbGVkIG1h bGktZHAuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vTWFrZWZpbGUgYi9kcml2 ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCj4gaW5kZXggODlkY2I3Yi4uYmI4YjE1OCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FybS9NYWtlZmlsZQo+IEBAIC0xLDIgKzEsNCBAQAo+ICBoZGxjZC15IDo9IGhkbGNkX2Ry di5vIGhkbGNkX2NydGMubwo+ICBvYmotJChDT05GSUdfRFJNX0hETENEKQkrPSBoZGxjZC5vCj4g K21hbGktZHAteSA6PSBtYWxpZHBfZHJ2Lm8gbWFsaWRwX2h3Lm8gbWFsaWRwX3BsYW5lcy5vIG1h bGlkcF9jcnRjLm8KPiArb2JqLSQoQ09ORklHX0RSTV9NQUxJX0RJU1BMQVkpCSs9IG1hbGktZHAu bwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMgYi9kcml2 ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9jcnRjLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAuLjIxYjcxZWIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FybS9tYWxpZHBfY3J0Yy5jCj4gQEAgLTAsMCArMSwyMzkgQEAKPiArLyoKPiArICogKEMp IENPUFlSSUdIVCAyMDE2IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKiBB dXRob3I6IExpdml1IER1ZGF1IDxMaXZpdS5EdWRhdUBhcm0uY29tPgo+ICsgKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAy IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBhbmQg YW55IHVzZSBieSB5b3Ugb2YgdGhpcyBwcm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4g KyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gKyAqCj4gKyAqIEFSTSBNYWxpIERQNTAwL0RQNTUw L0RQNjUwIGRyaXZlciAoY3J0YyBvcGVyYXRpb25zKQo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiArI2luY2x1ZGUgPGRy bS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4K PiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2luY2x1ZGUgIm1hbGlkcF9k cnYuaCIKPiArI2luY2x1ZGUgIm1hbGlkcF9ody5oIgo+ICsKPiArc3RhdGljIGJvb2wgbWFsaWRw X2NydGNfbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gKwkJCQkgICBjb25zdCBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICphZGp1c3RlZF9tb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZp Y2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJLyoKPiArCSAqIGNoZWNrIHRoYXQgdGhl IGhhcmR3YXJlIGNhbiBkcml2ZSB0aGUgcmVxdWlyZWQgY2xvY2sgcmF0ZSwKPiArCSAqIGJ1dCBz a2lwIHRoZSBjaGVjayBpZiB0aGUgY2xvY2sgaXMgbWVhbnQgdG8gYmUgZGlzYWJsZWQgKHJlcV9y YXRlID0gMCkKPiArCSAqLwo+ICsJbG9uZyByYXRlLCByZXFfcmF0ZSA9IG1vZGUtPmNydGNfY2xv Y2sgKiAxMDAwOwo+ICsKPiArCWlmIChyZXFfcmF0ZSkgewo+ICsJCXJhdGUgPSBjbGtfcm91bmRf cmF0ZShod2Rldi0+bWNsaywgcmVxX3JhdGUpOwo+ICsJCWlmIChyYXRlIDwgcmVxX3JhdGUpIHsK PiArCQkJRFJNX0RFQlVHX0RSSVZFUigibWNsayBjbG9jayB1bmFibGUgdG8gcmVhY2ggJWQga0h6 XG4iLAo+ICsJCQkJCSBtb2RlLT5jcnRjX2Nsb2NrKTsKPiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJ CX0KPiArCj4gKwkJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGh3ZGV2LT5weGxjbGssIHJlcV9yYXRl KTsKPiArCQlpZiAocmF0ZSAhPSByZXFfcmF0ZSkgewo+ICsJCQlEUk1fREVCVUdfRFJJVkVSKCJw eGxjbGsgZG9lc24ndCBzdXBwb3J0ICVsZCBIelxuIiwKPiArCQkJCQkgcmVxX3JhdGUpOwo+ICsJ CQlyZXR1cm4gZmFsc2U7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBtYWxpZHBfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRj KQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2 aWNlKGNydGMpOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5k ZXY7Cj4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZtOwo+ICsKPiArCWRybV9kaXNwbGF5X21vZGVfdG9f dmlkZW9tb2RlKCZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZSwgJnZtKTsKPiArCj4gKwljbGtf cHJlcGFyZV9lbmFibGUoaHdkZXYtPnB4bGNsayk7CgpOb3RlIHRoYXQgbm90aGluZyBndWFyYW50 ZWVzIHRoYXQgLT5kaXNhYmxlIGlzIGNhbGxlZCBiZWZvcmUgLT5lbmFibGUgaW4KYXRvbWljIGhl bHBlcnMuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBlbmFibGluZyBhIGNydGMgd2hlbiBpdCBpcyBm dWxseQpkaXNhYmxlZC4gSnVzdCBtZW50aW9uaW5nIGluIGNhc2UgLT5lbnRlcl9jb25maWdfbW9k ZSgpIGlzIHNvbWV0aGluZyB0aGF0Cm11c3QgYmUgY2FsbGVkIHN5bW1ldHJpY2FsbHkgd2l0aCAt PmxlYXZlX2NvbmZpZ19tb2RlKCkuCj4gKwo+ICsJLyogbWNsayBuZWVkcyB0byBiZSBzZXQgdG8g dGhlIHNhbWUgb3IgaGlnaGVyIHJhdGUgdGhhbiBweGxjbGsgKi8KPiArCWNsa19zZXRfcmF0ZSho d2Rldi0+bWNsaywgY3J0Yy0+c3RhdGUtPmFkanVzdGVkX21vZGUuY3J0Y19jbG9jayAqIDEwMDAp Owo+ICsJY2xrX3NldF9yYXRlKGh3ZGV2LT5weGxjbGssIGNydGMtPnN0YXRlLT5hZGp1c3RlZF9t b2RlLmNydGNfY2xvY2sgKiAxMDAwKTsKPiArCj4gKwlod2Rldi0+bW9kZXNldChod2RldiwgJnZt KTsKPiArCWh3ZGV2LT5sZWF2ZV9jb25maWdfbW9kZShod2Rldik7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG1hbGlkcF9jcnRjX2Rpc2FibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMp Owo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ ICsJLyoKPiArCSAqIGF2b2lkIGRpc2FibGluZyBhbHJlYWR5IGRpc2FibGVkIGNsb2NrcyBhbmQg aGFyZHdhcmUKPiArCSAqIChhcyBpcyB0aGUgY2FzZSBhdCBkZXZpY2UgcHJvYmUgdGltZSkKPiAr CSAqLwo+ICsJaWYgKGNydGMtPnN0YXRlLT5hY3RpdmUpIHsKCkNvbW1lbnQgZG9lc24ndCBtYXRj aCBjb2RlLiBDaGVja2luZyBjcnRjLT5zdGF0ZS0+YWN0aXZlIGluIC0+ZGlzYWJsZQpsb29rcyBh dCB0aGUgX25ld18gc3RhdGUsIG5vdCBhdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY3J0Yy4g QXRvbWljCmhlbHBlcnMgYWxyZWFkeSBndWFyYW50ZWUgeW91IHRoYXQgLT5kaXNhYmxlIGlzIG9u bHkgY2FsbGVkIHdoZW4gdGhlIENSVEMKaXMgc3RpbGwgb24uIEkgdGhpbmsgeW91IGNhbiByZW1v dmUgdGhpcyBvbmUsIGJ1dCBzZWUgbXkgY29tbWVudCBhYm92ZQphYm91dCBlbnRlci9sZWF2ZV9j b25maWdfbW9kZS4KCj4gKwkJaHdkZXYtPmVudGVyX2NvbmZpZ19tb2RlKGh3ZGV2KTsKPiArCQlj bGtfZGlzYWJsZV91bnByZXBhcmUoaHdkZXYtPnB4bGNsayk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgbWFsaWRwX2NydGNfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywK PiArCQkJCSAgICBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3Qg bWFsaWRwX2RybSAqbWFsaWRwID0gY3J0Y190b19tYWxpZHBfZGV2aWNlKGNydGMpOwo+ICsJc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZTsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBzdGF0ZTsKPiArCXUz MiByb3RfbWVtX2ZyZWUsIHJvdF9tZW1fdXNhYmxlOwo+ICsJaW50IHJvdGF0ZWRfcGxhbmVzID0g MDsKPiArCj4gKwkvKgo+ICsJICogY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIHJvdGF0aW9uIG1l bW9yeSBhdmFpbGFibGUgZm9yIHBsYW5lcwo+ICsJICogdGhhdCBuZWVkIDkwwrAgYW5kIDI3MMKw IHJvdGF0aW9uLiBFYWNoIHBsYW5lIGhhcyBzZXQgaXRzIHJlcXVpcmVkCj4gKwkgKiBtZW1vcnkg c2l6ZSBpbiB0aGUgLT5wbGFuZV9jaGVjaygpIGNhbGxiYWNrLCBoZXJlIHdlIG9ubHkgbWFrZQo+ ICsJICogc3VyZSB0aGF0IHRoZSBzdW1zIGFyZSBsZXNzIHRoYXQgdGhlIHRvdGFsIHVzYWJsZSBt ZW1vcnkuCj4gKwkgKgo+ICsJICogVGhlIHJvdGF0aW9uIG1lbW9yeSBhbGxvY2F0aW9uIGFsZ29y aXRobSAoZm9yIGVhY2ggcGxhbmUpOgo+ICsJICogIGEuIElmIG5vIG1vcmUgcm90YXRlZCBwbGFu ZXMgZXhpc3QsIGFsbCByZW1haW5pbmcgcm90YXRlCj4gKwkgKiAgICAgbWVtb3J5IGluIHRoZSBi YW5rIGlzIGF2YWlsYWJsZSBmb3IgdXNlIGJ5IHRoZSBwbGFuZS4KPiArCSAqICBiLiBJZiBvdGhl ciByb3RhdGVkIHBsYW5lcyBleGlzdCwgYW5kIHBsYW5lJ3MgbGF5ZXIgSUQgaXMKPiArCSAqICAg ICBERV9WSURFTzEsIGl0IGNhbiB1c2UgYWxsIHRoZSBtZW1vcnkgZnJvbSBmaXJzdCBiYW5rIGlm Cj4gKwkgKiAgICAgc2Vjb25kYXJ5IHJvdGF0aW9uIG1lbW9yeSBiYW5rIGlzIGF2YWlsYWJsZSwg b3RoZXJ3aXNlIGl0IGNhbgo+ICsJICogICAgIHVzZSB1cCB0byBoYWxmIHRoZSBiYW5rJ3MgbWVt b3J5Lgo+ICsJICogIGMuIElmIG90aGVyIHJvdGF0ZWQgcGxhbmVzIGV4aXN0LCBhbmQgcGxhbmUn cyBsYXllciBJRCBpcyBub3QKPiArCSAqICAgICBERV9WSURFTzEsIGl0IGNhbiB1c2UgaGFsZiBv ZiB0aGUgYXZhaWxhYmxlIG1lbW9yeQo+ICsJICoKPiArCSAqIE5vdGU6IHRoaXMgYWxnb3JpdGht IGFzc3VtZXMgdGhhdCB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHBsYW5lcyBhcmUKPiArCSAqIGNo ZWNrZWQgYWx3YXlzIGhhcyBERV9WSURFTzEgcGxhbmUgZmlyc3QgaW4gdGhlIGxpc3QgaWYgaXQg aXMKPiArCSAqIHJvdGF0ZWQuIEJlY2F1c2UgdGhhdCBpcyBob3cgd2UgY3JlYXRlIHRoZSBwbGFu ZXMgaW4gdGhlIGZpcnN0Cj4gKwkgKiBwbGFjZSwgdW5kZXIgY3VycmVudCBEUk0gdmVyc2lvbiB0 aGluZ3Mgd29yaywgYnV0IGlmIGV2ZXIgdGhlIG9yZGVyCj4gKwkgKiBpbiB3aGljaCBkcm1fYXRv bWljX2NydGNfc3RhdGVfZm9yX2VhY2hfcGxhbmUoKSBpdGVyYXRlcyBvdmVyIHBsYW5lcwo+ICsJ ICogY2hhbmdlcywgd2UgbmVlZCB0byBwcmUtc29ydCB0aGUgcGxhbmVzIGJlZm9yZSB2YWxpZGF0 aW9uLgo+ICsJICovCj4gKwo+ICsJLyogZmlyc3QgY291bnQgdGhlIG51bWJlciBvZiByb3RhdGVk IHBsYW5lcyAqLwo+ICsJZHJtX2F0b21pY19jcnRjX3N0YXRlX2Zvcl9lYWNoX3BsYW5lKHBsYW5l LCBzdGF0ZSkgewo+ICsJCXBzdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0YXRl LT5zdGF0ZSwgcGxhbmUpOwo+ICsJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JPVEFU RURfTUFTSykKPiArCQkJcm90YXRlZF9wbGFuZXMrKzsKPiArCX0KPiArCj4gKwlyb3RfbWVtX2Zy ZWUgPSBod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdOwo+ICsJLyoKPiArCSAqIGlmIHdlIGhhdmUg bW9yZSB0aGFuIDEgcGxhbmUgdXNpbmcgcm90YXRpb24gbWVtb3J5LCB1c2UgdGhlIHNlY29uZAo+ ICsJICogYmxvY2sgb2Ygcm90YXRpb24gbWVtb3J5IGFzIHdlbGwKPiArCSAqLwo+ICsJaWYgKHJv dGF0ZWRfcGxhbmVzID4gMSkKPiArCQlyb3RfbWVtX2ZyZWUgKz0gaHdkZXYtPnJvdGF0aW9uX21l bW9yeVsxXTsKPiArCj4gKwkvKiBub3cgdmFsaWRhdGUgdGhlIHJvdGF0aW9uIG1lbW9yeSByZXF1 aXJlbWVudHMgKi8KPiArCWRybV9hdG9taWNfY3J0Y19zdGF0ZV9mb3JfZWFjaF9wbGFuZShwbGFu ZSwgc3RhdGUpIHsKPiArCQlzdHJ1Y3QgbWFsaWRwX3BsYW5lICptcCA9IHRvX21hbGlkcF9wbGFu ZShwbGFuZSk7Cj4gKwo+ICsJCXBzdGF0ZSA9IGRybV9hdG9taWNfZ2V0X3BsYW5lX3N0YXRlKHN0 YXRlLT5zdGF0ZSwgcGxhbmUpOwo+ICsJCWlmIChwc3RhdGUtPnJvdGF0aW9uICYgTUFMSURQX1JP VEFURURfTUFTSykgewo+ICsJCQkvKiBwcm9jZXNzIGN1cnJlbnQgcGxhbmUgKi8KPiArCQkJcm90 YXRlZF9wbGFuZXMtLTsKPiArCj4gKwkJCWlmICghcm90YXRlZF9wbGFuZXMpIHsKPiArCQkJCS8q IG5vIG1vcmUgcm90YXRlZCBwbGFuZXMsIHdlIGNhbiB1c2Ugd2hhdCdzIGxlZnQgKi8KPiArCQkJ CXJvdF9tZW1fdXNhYmxlID0gcm90X21lbV9mcmVlOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJaWYg KChtcC0+bGF5ZXItPmlkICE9IERFX1ZJREVPMSkgfHwKPiArCQkJCSAgICAoaHdkZXYtPnJvdGF0 aW9uX21lbW9yeVsxXSA9PSAwKSkKPiArCQkJCQlyb3RfbWVtX3VzYWJsZSA9IHJvdF9tZW1fZnJl ZSAvIDI7Cj4gKwkJCQllbHNlCj4gKwkJCQkJcm90X21lbV91c2FibGUgPSBod2Rldi0+cm90YXRp b25fbWVtb3J5WzBdOwo+ICsJCQl9Cj4gKwo+ICsJCQlyb3RfbWVtX2ZyZWUgLT0gcm90X21lbV91 c2FibGU7Cj4gKwo+ICsJCQlpZiAobXAtPnJvdG1lbV9zaXplID4gcm90X21lbV91c2FibGUpCj4g KwkJCQlyZXR1cm4gLUVJTlZBTDsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9jcnRjX2F0b21pY19mbHVzaChzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMsCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqb2xkX3N0YXRlKQo+ ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BlbmRpbmdfdmJsYW5rX2V2ZW50ICpldmVudCA9IGNydGMtPnN0 YXRlLT5ldmVudDsKPiArCj4gKwlpZiAoZXZlbnQpIHsKPiArCQljcnRjLT5zdGF0ZS0+ZXZlbnQg PSBOVUxMOwo+ICsKPiArCQlzcGluX2xvY2tfaXJxKCZjcnRjLT5kZXYtPmV2ZW50X2xvY2spOwo+ ICsJCWlmIChkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApCj4gKwkJCWRybV9jcnRjX2Fy bV92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ICsJCWVsc2UKPiArCQkJZHJtX2NydGNfc2Vu ZF92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ICsJCXNwaW5fdW5sb2NrX2lycSgmY3J0Yy0+ ZGV2LT5ldmVudF9sb2NrKTsKPiArCX0KClRoaXMgY29weXBhc3RhIGlzIHJhY3kgaWYgeW91IGRv bid0IGd1YXJhbnRlZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMKdGhhdCB0aGUgdmJsYW5rIGlu dGVycnVwdCBvbmx5IGhhcHBlbnMgdG9nZXRoZXIgd2l0aCB0aGUgcGxhbmUgdXBkYXRlLiBJZgp5 b3UgZG9uJ3QgaGF2ZSBhIGh3IHZibGFuayBjb3VudGVyLCB5b3UgbmVlZCB0byBpbnN0ZWFkIHNl bmQgdGhlIGV2ZW50CmZyb20gYW4gaW50ZXJydXB0IGRyaXZlbiBieSB5b3VyIEdPIGJpdCAob3Ig d2hhdGV2ZXIgaXQgaXMgbWFsaWRwIGhhcyB0bwptYWtlIHBsYW5lIHVwZGF0ZXMgYXRvbWljLgoK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgbWFs aWRwX2NydGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLm1vZGVfZml4dXAgPSBtYWxpZHBfY3J0Y19t b2RlX2ZpeHVwLAo+ICsJLmVuYWJsZSA9IG1hbGlkcF9jcnRjX2VuYWJsZSwKPiArCS5kaXNhYmxl ID0gbWFsaWRwX2NydGNfZGlzYWJsZSwKPiArCS5hdG9taWNfY2hlY2sgPSBtYWxpZHBfY3J0Y19h dG9taWNfY2hlY2ssCj4gKwkuYXRvbWljX2ZsdXNoID0gbWFsaWRwX2NydGNfYXRvbWljX2ZsdXNo LAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyBtYWxpZHBf Y3J0Y19mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2NydGNfY2xlYW51cCwKPiArCS5zZXRf Y29uZmlnID0gZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZywKPiArCS5wYWdlX2ZsaXAgPSBk cm1fYXRvbWljX2hlbHBlcl9wYWdlX2ZsaXAsCj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBl cl9jcnRjX3Jlc2V0LAo+ICsJLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hl bHBlcl9jcnRjX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0ZSA9IGRy bV9hdG9taWNfaGVscGVyX2NydGNfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK2ludCBtYWxp ZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBtYWxp ZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9wbGFuZSAq cHJpbWFyeSA9IE5VTEwsICpwbGFuZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gbWFsaWRw X2RlX3BsYW5lc19pbml0KGRybSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJPUigi RmFpbGVkIHRvIGluaXRpYWxpc2UgcGxhbmVzXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgZHJtKSB7Cj4gKwkJaWYgKHBsYW5lLT50 eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKPiArCQkJcHJpbWFyeSA9IHBsYW5lOwo+ ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKCFwcmltYXJ5KSB7Cj4gKwkJRFJN X0VSUk9SKCJubyBwcmltYXJ5IHBsYW5lIGZvdW5kXG4iKTsKPiArCQlyZXQgPSAtRUlOVkFMOwo+ ICsJCWdvdG8gY3J0Y19jbGVhbnVwX3BsYW5lczsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fY3J0 Y19pbml0X3dpdGhfcGxhbmVzKGRybSwgJm1hbGlkcC0+Y3J0YywgcHJpbWFyeSwgTlVMTCwKPiAr CQkJCQkmbWFsaWRwX2NydGNfZnVuY3MsIE5VTEwpOwo+ICsKPiArCWlmICghcmV0KSB7Cj4gKwkJ ZHJtX2NydGNfaGVscGVyX2FkZCgmbWFsaWRwLT5jcnRjLCAmbWFsaWRwX2NydGNfaGVscGVyX2Z1 bmNzKTsKPiArCQlyZXR1cm4gMDsKPiArCX0KPiArCj4gK2NydGNfY2xlYW51cF9wbGFuZXM6Cj4g KwltYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koZHJtKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jIGIvZHJpdmVy cy9ncHUvZHJtL2FybS9tYWxpZHBfZHJ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAuLjVkNDg4YTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfZHJ2LmMKPiBAQCAtMCwwICsxLDUwMCBAQAo+ICsvKgo+ICsgKiAoQykgQ09Q WVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhv cjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkg dXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiArICog b2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2 NTAgS01TL0RSTSBkcml2ZXIKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZl9n cmFwaC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfcmVzZXJ2ZWRfbWVtLmg+Cj4gKwo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+Cj4gKyNpbmNs dWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9mYl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9v Zi5oPgo+ICsKPiArI2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKPiArI2luY2x1ZGUgIm1hbGlkcF9y ZWdzLmgiCj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiArCj4gKyNkZWZpbmUgTUFMSURQX0NP TkZfVkFMSURfVElNRU9VVAkyNTAKPiArCj4gKy8qCj4gKyAqIHNldCB0aGUgImNvbmZpZyB2YWxp ZCIgYml0IGFuZCB3YWl0IHVudGlsIHRoZSBoYXJkd2FyZSBhY3RzIG9uIGl0Cj4gKyAqLwo+ICtz dGF0aWMgaW50IG1hbGlkcF9zZXRfYW5kX3dhaXRfY29uZmlnX3ZhbGlkKHN0cnVjdCBkcm1fZGV2 aWNlICpkcm0pCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9w cml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWh3ZGV2LT5zZXRfY29uZmlnX3ZhbGlkKGh3ZGV2KTsKPiAr CS8qIGRvbid0IHdhaXQgZm9yIGNvbmZpZ192YWxpZCBmbGFnIGlmIHdlIGFyZSBpbiBjb25maWcg bW9kZSAqLwo+ICsJaWYgKGh3ZGV2LT5pbl9jb25maWdfbW9kZShod2RldikpCj4gKwkJcmV0dXJu IDA7Cj4gKwo+ICsJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobWFsaWRw LT53cSwKPiArCQkJYXRvbWljX3JlYWQoJm1hbGlkcC0+Y29uZmlnX3ZhbGlkKSA9PSAxLAo+ICsJ CQltc2Vjc190b19qaWZmaWVzKE1BTElEUF9DT05GX1ZBTElEX1RJTUVPVVQpKTsKPiArCj4gKwly ZXR1cm4gKHJldCA+IDApID8gMCA6IC1FVElNRURPVVQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IG1hbGlkcF9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sK PiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiAr CWlmIChtYWxpZHAtPmZiZGV2KQo+ICsJCWRybV9mYmRldl9jbWFfaG90cGx1Z19ldmVudChtYWxp ZHAtPmZiZGV2KTsKCmNtYV9ob3RwbHVnX2V2ZW50IGFscmVhZHkgaGFzIGEgTlVMTCBjaGVjay4K Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9hdG9taWNfY29tbWl0X2h3X2RvbmUoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gc3RhdGUtPmRldjsKPiArCWludCByZXQgPSBtYWxpZHBfc2V0X2FuZF93YWl0X2NvbmZp Z192YWxpZChkcm0pOwo+ICsKPiArCWlmIChyZXQpCj4gKwkJRFJNX0RFQlVHX0RSSVZFUigidGlt ZWQgb3V0IHdhaXRpbmcgZm9yIHVwZGF0ZWQgY29uZmlndXJhdGlvblxuIik7Cj4gKwo+ICsJZHJt X2F0b21pY19oZWxwZXJfY29tbWl0X2h3X2RvbmUoc3RhdGUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBtYWxpZHBfYXRvbWljX2NvbW1pdF90YWlsKHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpz dGF0ZSkKPiArewo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybSA9IHN0YXRlLT5kZXY7Cj4gKwo+ ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoZHJtLCBzdGF0ZSk7 Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9jb21taXRfbW9kZXNldF9lbmFibGVzKGRybSwgc3RhdGUp Owo+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkcm0sIHN0YXRlLCBmYWxzZSk7 Cj4gKwo+ICsJbWFsaWRwX2F0b21pY19jb21taXRfaHdfZG9uZShzdGF0ZSk7Cj4gKwo+ICsJZHJt X2F0b21pY19oZWxwZXJfd2FpdF9mb3JfdmJsYW5rcyhkcm0sIHN0YXRlKTsKPiArCj4gKwlkcm1f YXRvbWljX2hlbHBlcl9jbGVhbnVwX3BsYW5lcyhkcm0sIHN0YXRlKTsKPiArfQo+ICsKPiArc3Rh dGljIHN0cnVjdCBkcm1fbW9kZV9jb25maWdfaGVscGVyX2Z1bmNzIG1hbGlkcF9tb2RlX2NvbmZp Z19oZWxwZXJzID0gewo+ICsJLmF0b21pY19jb21taXRfdGFpbCA9IG1hbGlkcF9hdG9taWNfY29t bWl0X3RhaWwsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZp Z19mdW5jcyBtYWxpZHBfbW9kZV9jb25maWdfZnVuY3MgPSB7Cj4gKwkuZmJfY3JlYXRlID0gZHJt X2ZiX2NtYV9jcmVhdGUsCj4gKwkub3V0cHV0X3BvbGxfY2hhbmdlZCA9IG1hbGlkcF9vdXRwdXRf cG9sbF9jaGFuZ2VkLAo+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNr LAo+ICsJLmF0b21pY19jb21taXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsCj4gK307Cj4g Kwo+ICtzdGF0aWMgaW50IG1hbGlkcF9lbmFibGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpk cm0sIHVuc2lnbmVkIGludCBjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRw ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9 IG1hbGlkcC0+ZGV2Owo+ICsKPiArCW1hbGlkcF9od19lbmFibGVfaXJxKGh3ZGV2LCBNQUxJRFBf REVfQkxPQ0ssCj4gKwkJCSAgICAgaHdkZXYtPm1hcC5kZV9pcnFfbWFwLnZzeW5jX2lycSk7Cj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2Rpc2FibGVfdmJsYW5r KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIHVuc2lnbmVkIGludCBwaXBlKQo+ICt7Cj4gKwlzdHJ1 Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsKPiArCW1hbGlkcF9od19kaXNh YmxlX2lycShod2RldiwgTUFMSURQX0RFX0JMT0NLLAo+ICsJCQkgICAgICBod2Rldi0+bWFwLmRl X2lycV9tYXAudnN5bmNfaXJxKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxpZHBfaW5pdChz dHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJc3RydWN0IG1hbGlk cF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2Rl dmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCj4gKwlkcm1fbW9kZV9jb25maWdfaW5pdChk cm0pOwo+ICsKPiArCWRybS0+bW9kZV9jb25maWcubWluX3dpZHRoID0gaHdkZXYtPm1pbl9saW5l X3NpemU7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl9oZWlnaHQgPSBod2Rldi0+bWluX2xpbmVf c2l6ZTsKPiArCWRybS0+bW9kZV9jb25maWcubWF4X3dpZHRoID0gaHdkZXYtPm1heF9saW5lX3Np emU7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSBod2Rldi0+bWF4X2xpbmVfc2l6 ZTsKPiArCWRybS0+bW9kZV9jb25maWcuZnVuY3MgPSAmbWFsaWRwX21vZGVfY29uZmlnX2Z1bmNz Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZSA9ICZtYWxpZHBfbW9kZV9jb25m aWdfaGVscGVyczsKPiArCj4gKwlyZXQgPSBtYWxpZHBfY3J0Y19pbml0KGRybSk7Cj4gKwlpZiAo cmV0KSB7Cj4gKwkJZHJtX21vZGVfY29uZmlnX2NsZWFudXAoZHJtKTsKPiArCQlyZXR1cm4gcmV0 Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9p cnFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlpbnQgaXJxX2Rl LCBpcnFfc2UsIHJldCA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gZGV2X2dldF9k cnZkYXRhKCZwZGV2LT5kZXYpOwo+ICsKPiArCS8qIGZldGNoIHRoZSBpbnRlcnJ1cHRzIGZyb20g RFQgKi8KPiArCWlycV9kZSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJERSIpOwo+ ICsJaWYgKGlycV9kZSA8IDApIHsKPiArCQlEUk1fRVJST1IoIm5vICdERScgSVJRIHNwZWNpZmll ZCFcbiIpOwo+ICsJCXJldHVybiBpcnFfZGU7Cj4gKwl9Cj4gKwlpcnFfc2UgPSBwbGF0Zm9ybV9n ZXRfaXJxX2J5bmFtZShwZGV2LCAiU0UiKTsKPiArCWlmIChpcnFfc2UgPCAwKSB7Cj4gKwkJRFJN X0VSUk9SKCJubyAnU0UnIElSUSBzcGVjaWZpZWQhXG4iKTsKPiArCQlyZXR1cm4gaXJxX3NlOwo+ ICsJfQo+ICsKPiArCXJldCA9IG1hbGlkcF9kZV9pcnFfaW5pdChkcm0sIGlycV9kZSk7Cj4gKwlp ZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gbWFsaWRwX3NlX2lycV9pbml0 KGRybSwgaXJxX3NlKTsKPiArCWlmIChyZXQpIHsKPiArCQltYWxpZHBfZGVfaXJxX2ZpbmkoZHJt KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtYWxpZHBfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gK3sK PiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiAr CWRybV9mYmRldl9jbWFfcmVzdG9yZV9tb2RlKG1hbGlkcC0+ZmJkZXYpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ICsJLm93bmVyID0g VEhJU19NT0RVTEUsCj4gKwkub3BlbiA9IGRybV9vcGVuLAo+ICsJLnJlbGVhc2UgPSBkcm1fcmVs ZWFzZSwKPiArCS51bmxvY2tlZF9pb2N0bCA9IGRybV9pb2N0bCwKPiArI2lmZGVmIENPTkZJR19D T01QQVQKPiArCS5jb21wYXRfaW9jdGwgPSBkcm1fY29tcGF0X2lvY3RsLAo+ICsjZW5kaWYKPiAr CS5wb2xsID0gZHJtX3BvbGwsCj4gKwkucmVhZCA9IGRybV9yZWFkLAo+ICsJLmxsc2VlayA9IG5v b3BfbGxzZWVrLAo+ICsJLm1tYXAgPSBkcm1fZ2VtX2NtYV9tbWFwLAo+ICt9OwoKSSB3b25kZXIg d2hldGhlciB3ZSBzaG91bGQgaGF2ZSBhIG1hY3JvIGZvciBnZW1fY21hX2ZvcHMgd2hpY2ggdGFr ZXMgYQpuYW1lIGFuZCBUSElTX01PRFVMRSBhbmQgZ2VuZXJhdGVzIHRoaXMgYm9pbGVycGxhdGUg aGVyZSAuLi4gTWlnaHQgYmUgYQpnb29kIHN1YnN5c3RlbSBjbGVhbnVwLgoKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgZHJtX2RyaXZlciBtYWxpZHBfZHJpdmVyID0gewo+ICsJLmRyaXZlcl9mZWF0dXJl cyA9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMgfAo+ICsJCQkg ICBEUklWRVJfUFJJTUUsCj4gKwkubGFzdGNsb3NlID0gbWFsaWRwX2xhc3RjbG9zZSwKPiArCS5n ZXRfdmJsYW5rX2NvdW50ZXIgPSBkcm1fdmJsYW5rX25vX2h3X2NvdW50ZXIsCj4gKwkuZW5hYmxl X3ZibGFuayA9IG1hbGlkcF9lbmFibGVfdmJsYW5rLAo+ICsJLmRpc2FibGVfdmJsYW5rID0gbWFs aWRwX2Rpc2FibGVfdmJsYW5rLAo+ICsJLmdlbV9mcmVlX29iamVjdCA9IGRybV9nZW1fY21hX2Zy ZWVfb2JqZWN0LAoKUGxlYXNlIHVzZSBfdW5sb2NrZWQgaGVyZS4KCj4gKwkuZ2VtX3ZtX29wcyA9 ICZkcm1fZ2VtX2NtYV92bV9vcHMsCj4gKwkuZHVtYl9jcmVhdGUgPSBkcm1fZ2VtX2NtYV9kdW1i X2NyZWF0ZSwKPiArCS5kdW1iX21hcF9vZmZzZXQgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZz ZXQsCj4gKwkuZHVtYl9kZXN0cm95ID0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4gKwkucHJpbWVf aGFuZGxlX3RvX2ZkID0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsCj4gKwkucHJpbWVfZmRf dG9faGFuZGxlID0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4gKwkuZ2VtX3ByaW1lX2V4 cG9ydCA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+ICsJLmdlbV9wcmltZV9pbXBvcnQgPSBkcm1f Z2VtX3ByaW1lX2ltcG9ydCwKPiArCS5nZW1fcHJpbWVfZ2V0X3NnX3RhYmxlID0gZHJtX2dlbV9j bWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+ICsJLmdlbV9wcmltZV9pbXBvcnRfc2dfdGFibGUgPSBk cm1fZ2VtX2NtYV9wcmltZV9pbXBvcnRfc2dfdGFibGUsCj4gKwkuZ2VtX3ByaW1lX3ZtYXAgPSBk cm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+ICsJLmdlbV9wcmltZV92dW5tYXAgPSBkcm1fZ2VtX2Nt YV9wcmltZV92dW5tYXAsCj4gKwkuZ2VtX3ByaW1lX21tYXAgPSBkcm1fZ2VtX2NtYV9wcmltZV9t bWFwLAo+ICsJLmZvcHMgPSAmZm9wcywKPiArCS5uYW1lID0gIm1hbGktZHAiLAo+ICsJLmRlc2Mg PSAiQVJNIE1hbGkgRGlzcGxheSBQcm9jZXNzb3IgZHJpdmVyIiwKPiArCS5kYXRlID0gIjIwMTYw MTA2IiwKPiArCS5tYWpvciA9IDEsCj4gKwkubWlub3IgPSAwLAo+ICt9Owo+ICsKPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgIG1hbGlkcF9kcm1fb2ZfbWF0Y2hbXSA9IHsKPiAr CXsKPiArCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDUwMCIsCj4gKwkJLmRhdGEgPSAmbWFs aWRwX2RldmljZVtNQUxJRFBfNTAwXQo+ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJh cm0sbWFsaS1kcDU1MCIsCj4gKwkJLmRhdGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNTUwXQo+ ICsJfSwKPiArCXsKPiArCQkuY29tcGF0aWJsZSA9ICJhcm0sbWFsaS1kcDY1MCIsCj4gKwkJLmRh dGEgPSAmbWFsaWRwX2RldmljZVtNQUxJRFBfNjUwXQo+ICsJfSwKPiArCXt9LAo+ICt9Owo+ICtN T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtYWxpZHBfZHJtX29mX21hdGNoKTsKPiArCj4gKyNkZWZp bmUgTUFYX09VVFBVVF9DSEFOTkVMUwkzCj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtOwo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcDsKPiArCXN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldjsKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCS8qIG51bWJlciBvZiBsaW5lcyBm b3IgdGhlIFIsIEcgYW5kIEIgb3V0cHV0ICovCj4gKwl1OCBvdXRwdXRfd2lkdGhbTUFYX09VVFBV VF9DSEFOTkVMU107Cj4gKwlpbnQgcmV0ID0gMCwgaTsKPiArCXUzMiB2ZXJzaW9uLCBvdXRfZGVw dGggPSAwOwo+ICsKPiArCW1hbGlkcCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWFsaWRw KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIW1hbGlkcCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiAr Cj4gKwlod2RldiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaHdkZXYpLCBHRlBfS0VSTkVM KTsKPiArCWlmICghaHdkZXYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJLyoKPiArCSAq IGNvcHkgdGhlIGFzc29jaWF0ZWQgZGF0YSBmcm9tIG1hbGlkcF9kcm1fb2ZfbWF0Y2ggdG8gYXZv aWQKPiArCSAqIGhhdmluZyB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBPRiBub2RlIGFmdGVy IGJpbmRpbmcKPiArCSAqLwo+ICsJbWVtY3B5KGh3ZGV2LCBvZl9kZXZpY2VfZ2V0X21hdGNoX2Rh dGEoZGV2KSwgc2l6ZW9mKCpod2RldikpOwo+ICsJbWFsaWRwLT5kZXYgPSBod2RldjsKPiArCj4g KwlJTklUX0xJU1RfSEVBRCgmbWFsaWRwLT5ldmVudF9saXN0KTsKPiArCj4gKwlyZXMgPSBwbGF0 Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ICsJaHdkZXYtPnJl Z3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihod2Rl di0+cmVncykpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBtYXAgY29udHJvbCByZWdpc3Rl cnMgYXJlYVxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPnJlZ3MpOwo+ICsJfQo+ICsK PiArCWh3ZGV2LT5wY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBjbGsiKTsKPiArCWlmIChJU19F UlIoaHdkZXYtPnBjbGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5wY2xrKTsKPiArCj4g Kwlod2Rldi0+YWNsayA9IGRldm1fY2xrX2dldChkZXYsICJhY2xrIik7Cj4gKwlpZiAoSVNfRVJS KGh3ZGV2LT5hY2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihod2Rldi0+YWNsayk7Cj4gKwo+ICsJ aHdkZXYtPm1jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAibWNsayIpOwo+ICsJaWYgKElTX0VSUiho d2Rldi0+bWNsaykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHdkZXYtPm1jbGspOwo+ICsKPiArCWh3 ZGV2LT5weGxjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicHhsY2xrIik7Cj4gKwlpZiAoSVNfRVJS KGh3ZGV2LT5weGxjbGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3ZGV2LT5weGxjbGspOwo+ICsK PiArCS8qIEdldCB0aGUgb3B0aW9uYWwgZnJhbWVidWZmZXIgbWVtb3J5IHJlc291cmNlICovCj4g KwlyZXQgPSBvZl9yZXNlcnZlZF9tZW1fZGV2aWNlX2luaXQoZGV2KTsKPiArCWlmIChyZXQgJiYg cmV0ICE9IC1FTk9ERVYpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2Fs bG9jKCZtYWxpZHBfZHJpdmVyLCBkZXYpOwo+ICsJaWYgKCFkcm0pIHsKPiArCQlyZXQgPSAtRU5P TUVNOwo+ICsJCWdvdG8gYWxsb2NfZmFpbDsKPiArCX0KPiArCj4gKwkvKiBFbmFibGUgQVBCIGNs b2NrIGluIG9yZGVyIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHJlZ2lzdGVycyAqLwo+ICsJY2xrX3By ZXBhcmVfZW5hYmxlKGh3ZGV2LT5wY2xrKTsKPiArCS8qCj4gKwkgKiBFbmFibGUgQVhJIGNsb2Nr IGFuZCBtYWluIGNsb2NrIHNvIHRoYXQgcHJlZmV0Y2ggY2FuIHN0YXJ0IG9uY2UKPiArCSAqIHRo ZSByZWdpc3RlcnMgYXJlIHNldAo+ICsJICovCj4gKwljbGtfcHJlcGFyZV9lbmFibGUoaHdkZXYt PmFjbGspOwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGh3ZGV2LT5tY2xrKTsKPiArCj4gKwlyZXQg PSBod2Rldi0+cXVlcnlfaHcoaHdkZXYpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9FUlJPUigi SW52YWxpZCBIVyBjb25maWd1cmF0aW9uXG4iKTsKPiArCQlnb3RvIHF1ZXJ5X2h3X2ZhaWw7Cj4g Kwl9Cj4gKwo+ICsJdmVyc2lvbiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRj X2Jhc2UgKyBNQUxJRFBfREVfQ09SRV9JRCk7Cj4gKwlEUk1fSU5GTygiZm91bmQgQVJNIE1hbGkt RFAlM3ggdmVyc2lvbiByJWRwJWRcbiIsIHZlcnNpb24gPj4gMTYsCj4gKwkJICh2ZXJzaW9uID4+ IDEyKSAmIDB4ZiwgKHZlcnNpb24gPj4gOCkgJiAweGYpOwo+ICsKPiArCS8qIHNldCB0aGUgbnVt YmVyIG9mIGxpbmVzIHVzZWQgZm9yIG91dHB1dCBvZiBSR0IgZGF0YSAqLwo+ICsJcmV0ID0gb2Zf cHJvcGVydHlfcmVhZF91OF9hcnJheShkZXYtPm9mX25vZGUsCj4gKwkJCQkJImFybSxtYWxpZHAt b3V0cHV0LXBvcnQtbGluZXMiLAo+ICsJCQkJCW91dHB1dF93aWR0aCwgTUFYX09VVFBVVF9DSEFO TkVMUyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gcXVlcnlfaHdfZmFpbDsKPiArCj4gKwlmb3Ig KGkgPSAwOyBpIDwgTUFYX09VVFBVVF9DSEFOTkVMUzsgaSsrKQo+ICsJCW91dF9kZXB0aCA9IChv dXRfZGVwdGggPDwgOCkgfCAob3V0cHV0X3dpZHRoW2ldICYgMHhmKTsKPiArCW1hbGlkcF9od193 cml0ZShod2Rldiwgb3V0X2RlcHRoLCBod2Rldi0+bWFwLm91dF9kZXB0aF9iYXNlKTsKPiArCj4g Kwlkcm0tPmRldl9wcml2YXRlID0gbWFsaWRwOwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgZHJt KTsKPiArCWF0b21pY19zZXQoJm1hbGlkcC0+Y29uZmlnX3ZhbGlkLCAwKTsKPiArCWluaXRfd2Fp dHF1ZXVlX2hlYWQoJm1hbGlkcC0+d3EpOwo+ICsKPiArCXJldCA9IG1hbGlkcF9pbml0KGRybSk7 Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIGluaXRfZmFpbDsKPiArCj4gKwlyZXQgPSBkcm1f ZGV2X3JlZ2lzdGVyKGRybSwgMCk7CgpUaGUgaWRlYSBvZiBhbGxvYy9yZWdpc3RlciBzcGxpdCBp cyB0aGF0IHlvdSBkbyBpdCBsYXN0LiBZb3UgYWxzbyBuZWVkIHRvCmNhbGwgZHJtX2Nvbm5lY3Rv cl9yZWdpc3Rlcl9hbGwgc3RpbGwgc2VwYXJhdGVseS4gSSB0aGluayBDaHJpcyBXaWxzb24gaGFz CnBhdGNoZXMgdG8gZml4IHRoYXQgdXAgdGhvdWdoLgoKPiArCWlmIChyZXQpCj4gKwkJZ290byBy ZWdpc3Rlcl9mYWlsOwo+ICsKPiArCS8qIFNldCB0aGUgQ1JUQydzIHBvcnQgc28gdGhhdCB0aGUg ZW5jb2RlciBjb21wb25lbnQgY2FuIGZpbmQgaXQgKi8KPiArCW1hbGlkcC0+Y3J0Yy5wb3J0ID0g b2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoZGV2LT5vZl9ub2RlLCBOVUxMKTsKPiArCj4gKwly ZXQgPSBjb21wb25lbnRfYmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJb2Zfbm9kZV9wdXQobWFsaWRw LT5jcnRjLnBvcnQpOwo+ICsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZhaWxlZCB0 byBiaW5kIGFsbCBjb21wb25lbnRzXG4iKTsKPiArCQlnb3RvIGJpbmRfZmFpbDsKPiArCX0KPiAr Cj4gKwlyZXQgPSBtYWxpZHBfaXJxX2luaXQocGRldik7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQln b3RvIGlycV9pbml0X2ZhaWw7Cj4gKwo+ICsJcmV0ID0gZHJtX3ZibGFua19pbml0KGRybSwgZHJt LT5tb2RlX2NvbmZpZy5udW1fY3J0Yyk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9FUlJP UigiZmFpbGVkIHRvIGluaXRpYWxpc2UgdmJsYW5rXG4iKTsKPiArCQlnb3RvIHZibGFua19mYWls Owo+ICsJfQo+ICsKPiArCWRybV9tb2RlX2NvbmZpZ19yZXNldChkcm0pOwo+ICsKPiArCW1hbGlk cC0+ZmJkZXYgPSBkcm1fZmJkZXZfY21hX2luaXQoZHJtLCAzMiwgZHJtLT5tb2RlX2NvbmZpZy5u dW1fY3J0YywKPiArCQkJCQkgICBkcm0tPm1vZGVfY29uZmlnLm51bV9jb25uZWN0b3IpOwo+ICsK PiArCWlmIChJU19FUlIobWFsaWRwLT5mYmRldikpIHsKPiArCQlyZXQgPSBQVFJfRVJSKG1hbGlk cC0+ZmJkZXYpOwo+ICsJCW1hbGlkcC0+ZmJkZXYgPSBOVUxMOwo+ICsJCWdvdG8gZmJkZXZfZmFp bDsKPiArCX0KPiArCj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZHJtKTsKPiArCXJldHVy biAwOwo+ICsKPiArZmJkZXZfZmFpbDoKPiArCWRybV92YmxhbmtfY2xlYW51cChkcm0pOwo+ICt2 YmxhbmtfZmFpbDoKPiArCW1hbGlkcF9zZV9pcnFfZmluaShkcm0pOwo+ICsJbWFsaWRwX2RlX2ly cV9maW5pKGRybSk7Cj4gK2lycV9pbml0X2ZhaWw6Cj4gKwljb21wb25lbnRfdW5iaW5kX2FsbChk ZXYsIGRybSk7Cj4gK2JpbmRfZmFpbDoKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwo+ICty ZWdpc3Rlcl9mYWlsOgo+ICsJbWFsaWRwX2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gKwlkcm1f bW9kZV9jb25maWdfY2xlYW51cChkcm0pOwo+ICtpbml0X2ZhaWw6Cj4gKwlkcm0tPmRldl9wcml2 YXRlID0gTlVMTDsKPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwo+ICtxdWVyeV9od19m YWlsOgo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3ZGV2LT5tY2xrKTsKPiArCWNsa19kaXNh YmxlX3VucHJlcGFyZShod2Rldi0+YWNsayk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaHdk ZXYtPnBjbGspOwo+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICthbGxvY19mYWlsOgo+ICsJb2Zf cmVzZXJ2ZWRfbWVtX2RldmljZV9yZWxlYXNlKGRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4g K3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAr CXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsJc3RydWN0 IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwo+ICsJaWYgKG1hbGlk cC0+ZmJkZXYpIHsKPiArCQlkcm1fZmJkZXZfY21hX2ZpbmkobWFsaWRwLT5mYmRldik7Cj4gKwkJ bWFsaWRwLT5mYmRldiA9IE5VTEw7Cj4gKwl9Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2Zpbmko ZHJtKTsKPiArCW1hbGlkcF9zZV9pcnFfZmluaShkcm0pOwo+ICsJbWFsaWRwX2RlX2lycV9maW5p KGRybSk7Cj4gKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiArCWNvbXBvbmVudF91bmJpbmRf YWxsKGRldiwgZHJtKTsKPiArCWRybV9kZXZfdW5yZWdpc3Rlcihkcm0pOwoKVW5yZWdpc3RlciBm aXJzdCwgYWxzbyBuZWVkIHRvIHVucmVnaXN0ZXIgY29ubmVjdG9ycyB0b28uCgo+ICsJbWFsaWRw X2RlX3BsYW5lc19kZXN0cm95KGRybSk7Cj4gKwlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkcm0p Owo+ICsJZHJtLT5kZXZfcHJpdmF0ZSA9IE5VTEw7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBO VUxMKTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShod2Rldi0+bWNsayk7Cj4gKwljbGtfZGlz YWJsZV91bnByZXBhcmUoaHdkZXYtPmFjbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGh3 ZGV2LT5wY2xrKTsKPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiArCW9mX3Jlc2VydmVkX21lbV9k ZXZpY2VfcmVsZWFzZShkZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGNvbXBv bmVudF9tYXN0ZXJfb3BzIG1hbGlkcF9tYXN0ZXJfb3BzID0gewo+ICsJLmJpbmQgPSBtYWxpZHBf YmluZCwKPiArCS51bmJpbmQgPSBtYWxpZHBfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBtYWxpZHBfY29tcGFyZV9kZXYoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQo+ICt7 Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGF0YTsKPiArCj4gKwlyZXR1cm4gZGV2LT5v Zl9ub2RlID09IG5wOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcF9wbGF0Zm9ybV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKnBvcnQsICplcDsKPiArCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsK PiArCj4gKwlpZiAoIXBkZXYtPmRldi5vZl9ub2RlKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsK PiArCS8qIHRoZXJlIGlzIG9ubHkgb25lIG91dHB1dCBwb3J0IGluc2lkZSBlYWNoIGRldmljZSwg ZmluZCBpdCAqLwo+ICsJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChwZGV2LT5kZXYu b2Zfbm9kZSwgTlVMTCk7Cj4gKwlpZiAoIWVwKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiAr CWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShlcCkpIHsKPiArCQlvZl9ub2RlX3B1dChlcCk7 Cj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwl9Cj4gKwo+ICsJLyogYWRkIHRoZSByZW1vdGUgZW5j b2RlciBwb3J0IGFzIGNvbXBvbmVudCAqLwo+ICsJcG9ydCA9IG9mX2dyYXBoX2dldF9yZW1vdGVf cG9ydF9wYXJlbnQoZXApOwo+ICsJb2Zfbm9kZV9wdXQoZXApOwo+ICsJaWYgKCFwb3J0IHx8ICFv Zl9kZXZpY2VfaXNfYXZhaWxhYmxlKHBvcnQpKSB7Cj4gKwkJb2Zfbm9kZV9wdXQocG9ydCk7Cj4g KwkJcmV0dXJuIC1FQUdBSU47Cj4gKwl9Cj4gKwo+ICsJY29tcG9uZW50X21hdGNoX2FkZCgmcGRl di0+ZGV2LCAmbWF0Y2gsIG1hbGlkcF9jb21wYXJlX2RldiwgcG9ydCk7Cj4gKwlyZXR1cm4gY29t cG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaCgmcGRldi0+ZGV2LCAmbWFsaWRwX21hc3Rlcl9v cHMsCj4gKwkJCQkJICAgICAgIG1hdGNoKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtYWxpZHBf cGxhdGZvcm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCWNv bXBvbmVudF9tYXN0ZXJfZGVsKCZwZGV2LT5kZXYsICZtYWxpZHBfbWFzdGVyX29wcyk7Cj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFsaWRw X3BsYXRmb3JtX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSBtYWxpZHBfcGxhdGZvcm1fcHJvYmUs Cj4gKwkucmVtb3ZlCQk9IG1hbGlkcF9wbGF0Zm9ybV9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ ICsJCS5uYW1lID0gIm1hbGktZHAiLAo+ICsJCS5vZl9tYXRjaF90YWJsZQk9IG1hbGlkcF9kcm1f b2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtYWxp ZHBfcGxhdGZvcm1fZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkxpdml1IER1ZGF1IDxM aXZpdS5EdWRhdUBhcm0uY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFSTSBNYWxpIERQ IERSTSBkcml2ZXIiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0v bWFsaWRwX2Rydi5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4zY2Fl MGIzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Ry di5oCj4gQEAgLTAsMCArMSw0OCBAQAo+ICsvKgo+ICsgKiAoQykgQ09QWVJJR0hUIDIwMTYgQVJN IExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIEF1dGhvcjogTGl2aXUgRHVkYXUg PExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0 aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMKPiArICogb2Ygc3VjaCBHTlUgbGlj ZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1NTAvRFA2NTAgS01TL0RSTSBkcml2 ZXIgc3RydWN0dXJlcwo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19NQUxJRFBfRFJWX0hfXwo+ICsj ZGVmaW5lIF9fTUFMSURQX0RSVl9IX18KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ ICsjaW5jbHVkZSA8bGludXgvd2FpdC5oPgo+ICsjaW5jbHVkZSAibWFsaWRwX2h3LmgiCj4gKwo+ ICtzdHJ1Y3QgbWFsaWRwX2RybSB7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqZGV2Owo+ ICsJc3RydWN0IGRybV9mYmRldl9jbWEgKmZiZGV2Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBldmVu dF9saXN0Owo+ICsJc3RydWN0IGRybV9jcnRjIGNydGM7Cj4gKwl3YWl0X3F1ZXVlX2hlYWRfdCB3 cTsKPiArCWF0b21pY190IGNvbmZpZ192YWxpZDsKPiArfTsKPiArCj4gKyNkZWZpbmUgY3J0Y190 b19tYWxpZHBfZGV2aWNlKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgbWFsaWRwX2RybSwgY3J0 YykKPiArCj4gK3N0cnVjdCBtYWxpZHBfcGxhbmUgewo+ICsJc3RydWN0IGRybV9wbGFuZSBiYXNl Owo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2Owo+ICsJY29uc3Qgc3RydWN0IG1h bGlkcF9sYXllciAqbGF5ZXI7Cj4gKwkvKiBzaXplIG9mIHRoZSByZXF1aXJlZCByb3RhdGlvbiBt ZW1vcnkgd2hlbiBwbGFuZSBpcyByb3RhdGVkICovCj4gKwl1MzIgcm90bWVtX3NpemU7CgpEZXJp dmVkIHN0YXRlIGxpa2Ugcm90bWVtX3NpemUgbXVzdCBiZSBpbiBhIHN0cnVjdHVyZSB0aGF0IGVt YmVkcwpkcm1fcGxhbmVfc3RhdGUuIElmIHlvdSBzdG9yZSBpdCBpbiB0aGUgb2JqZWN0IHN0cnVj dHVyZSBpdHNlbGYgdGhpcyB3aWxsCmJyZWFrIFRFU1RfT05MWSBhdG9taWMgY29tbWl0cy4gT2J2 aW91c2x5IGFsc28gbmVlZCB0byBhZGp1c3QgdGhlCmF0b21pY19jaGVjayBjb2RlLgoKPiArfTsK PiArCj4gKyNkZWZpbmUgdG9fbWFsaWRwX3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qg bWFsaWRwX3BsYW5lLCBiYXNlKQo+ICsKPiAraW50IG1hbGlkcF9kZV9wbGFuZXNfaW5pdChzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtKTsKPiArdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3Ry dWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gK2ludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pOwo+ICsKPiArLyogb2Z0ZW4gdXNlZCBjb21iaW5hdGlvbiBvZiByb3RhdGlv bmFsIGJpdHMgKi8KPiArI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9NQVNLCShCSVQoRFJNX1JPVEFU RV85MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKQo+ICsKPiArI2VuZGlmICAvKiBfX01BTElEUF9E UlZfSF9fICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2h3LmMg Yi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi5hNjEzMmYxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9hcm0vbWFsaWRwX2h3LmMKPiBAQCAtMCwwICsxLDY5MSBAQAo+ICsvKgo+ICsgKiAo QykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAq IEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFu ZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMK PiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1 NTAvRFA2NTAgaGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBUaGlzIGlzIHdoZXJlCj4g KyAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdmFyaW91cyB2ZXJzaW9ucyBvZiB0aGUgaGFyZHdh cmUgaXMgYmVpbmcgZGVhbHQgd2l0aAo+ICsgKiBpbiBhbiBhdHRlbXB0IHRvIHByb3ZpZGUgdG8g dGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBjb2RlIGEgdW5pZmllZCB2aWV3Cj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pby5oPgo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsjaW5j bHVkZSA8dmlkZW8vZGlzcGxheV90aW1pbmcuaD4KPiArCj4gKyNpbmNsdWRlICJtYWxpZHBfZHJ2 LmgiCj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg bWFsaWRwX2lucHV0X2Zvcm1hdCBtYWxpZHA1MDBfZGVfZm9ybWF0c1tdID0gewo+ICsJLyogICAg Zm91cmNjLCAgIGxheWVycyBzdXBwb3J0aW5nIHRoZSBmb3JtYXQsICAgICBpbnRlcm5hbCBpZCAg Ki8KPiArCXsgRFJNX0ZPUk1BVF9BUkdCMjEwMTAxMCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1Mx IHwgREVfR1JBUEhJQ1MyLCAgMCB9LAo+ICsJeyBEUk1fRk9STUFUX0FCR1IyMTAxMDEwLCBERV9W SURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICAxIH0sCj4gKwl7IERSTV9GT1JN QVRfQVJHQjg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDIg fSwKPiArCXsgRFJNX0ZPUk1BVF9BQkdSODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfR1JBUEhJQ1MyLCAgMyB9LAo+ICsJeyBEUk1fRk9STUFUX1hSR0I4ODg4LCBERV9WSURFTzEg fCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA0IH0sCj4gKwl7IERSTV9GT1JNQVRfWEJH Ujg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBISUNTMiwgIDUgfSwKPiAr CXsgRFJNX0ZPUk1BVF9SR0I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX0dSQVBI SUNTMiwgIDYgfSwKPiArCXsgRFJNX0ZPUk1BVF9CR1I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBI SUNTMSB8IERFX0dSQVBISUNTMiwgIDcgfSwKPiArCXsgRFJNX0ZPUk1BVF9SR0JBNTU1MSwgREVf VklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfR1JBUEhJQ1MyLCAgOCB9LAo+ICsJeyBEUk1fRk9S TUFUX0FCR1IxNTU1LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsICA5 IH0sCj4gKwl7IERSTV9GT1JNQVRfUkdCNTY1LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBE RV9HUkFQSElDUzIsIDEwIH0sCj4gKwl7IERSTV9GT1JNQVRfQkdSNTY1LCBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9HUkFQSElDUzIsIDExIH0sCj4gKwl7IERSTV9GT1JNQVRfVVlWWSwg REVfVklERU8xLCAxMiB9LAo+ICsJeyBEUk1fRk9STUFUX1lVWVYsIERFX1ZJREVPMSwgMTMgfSwK PiArCXsgRFJNX0ZPUk1BVF9OVjEyLCBERV9WSURFTzEsIDE0IH0sCj4gKwl7IERSTV9GT1JNQVRf WVVWNDIwLCBERV9WSURFTzEsIDE1IH0sCj4gK307Cj4gKwo+ICsjZGVmaW5lIE1BTElEUF9JRChf X2dyb3VwLCBfX2Zvcm1hdCkgXAo+ICsJKCgoKF9fZ3JvdXApICYgMHg3KSA8PCAzKSB8ICgoX19m b3JtYXQpICYgMHg3KSkKPiArCj4gKyNkZWZpbmUgTUFMSURQX0NPTU1PTl9GT1JNQVRTIFwKPiAr CS8qICAgIGZvdXJjYywgICBsYXllcnMgc3VwcG9ydGluZyB0aGUgZm9ybWF0LCAgICAgIGludGVy bmFsIGlkICAgKi8gXAo+ICsJeyBEUk1fRk9STUFUX0FSR0IyMTAxMDEwLCBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCgwLCAwKSB9LCBcCj4gKwl7IERSTV9G T1JNQVRfQUJHUjIxMDEwMTAsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwg TUFMSURQX0lEKDAsIDEpIH0sIFwKPiArCXsgRFJNX0ZPUk1BVF9SR0JBMTAxMDEwMiwgREVfVklE RU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8yLCBNQUxJRFBfSUQoMCwgMikgfSwgXAo+ICsJ eyBEUk1fRk9STUFUX0JHUkExMDEwMTAyLCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9W SURFTzIsIE1BTElEUF9JRCgwLCAzKSB9LCBcCj4gKwl7IERSTV9GT1JNQVRfQVJHQjg4ODgsIERF X1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJRFBfSUQo MSwgMCkgfSwgXAo+ICsJeyBEUk1fRk9STUFUX0FCR1I4ODg4LCBERV9WSURFTzEgfCBERV9HUkFQ SElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDEsIDEpIH0sIFwKPiArCXsg RFJNX0ZPUk1BVF9SR0JBODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVfVklERU8y IHwgREVfU01BUlQsIE1BTElEUF9JRCgxLCAyKSB9LCBcCj4gKwl7IERSTV9GT1JNQVRfQkdSQTg4 ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJULCBNQUxJ RFBfSUQoMSwgMykgfSwgXAo+ICsJeyBEUk1fRk9STUFUX1hSR0I4ODg4LCBERV9WSURFTzEgfCBE RV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDApIH0sIFwK PiArCXsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwgREVf VklERU8yIHwgREVfU01BUlQsIE1BTElEUF9JRCgyLCAxKSB9LCBcCj4gKwl7IERSTV9GT1JNQVRf UkdCWDg4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiB8IERFX1NNQVJU LCBNQUxJRFBfSUQoMiwgMikgfSwgXAo+ICsJeyBEUk1fRk9STUFUX0JHUlg4ODg4LCBERV9WSURF TzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIgfCBERV9TTUFSVCwgTUFMSURQX0lEKDIsIDMp IH0sIFwKPiArCXsgRFJNX0ZPUk1BVF9SR0I4ODgsIERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8 IERFX1ZJREVPMiwgTUFMSURQX0lEKDMsIDApIH0sIFwKPiArCXsgRFJNX0ZPUk1BVF9CR1I4ODgs IERFX1ZJREVPMSB8IERFX0dSQVBISUNTMSB8IERFX1ZJREVPMiwgTUFMSURQX0lEKDMsIDEpIH0s IFwKPiArCXsgRFJNX0ZPUk1BVF9SR0JBNTU1MSwgREVfVklERU8xIHwgREVfR1JBUEhJQ1MxIHwg REVfVklERU8yLCBNQUxJRFBfSUQoNCwgMCkgfSwgXAo+ICsJeyBEUk1fRk9STUFUX0FCR1IxNTU1 LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAxKSB9 LCBcCj4gKwl7IERSTV9GT1JNQVRfUkdCNTY1LCBERV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBE RV9WSURFTzIsIE1BTElEUF9JRCg0LCAyKSB9LCBcCj4gKwl7IERSTV9GT1JNQVRfQkdSNTY1LCBE RV9WSURFTzEgfCBERV9HUkFQSElDUzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg0LCAzKSB9LCBc Cj4gKwl7IERSTV9GT1JNQVRfWVVZViwgREVfVklERU8xIHwgREVfVklERU8yLCBNQUxJRFBfSUQo NSwgMikgfSwJXAo+ICsJeyBEUk1fRk9STUFUX1VZVlksIERFX1ZJREVPMSB8IERFX1ZJREVPMiwg TUFMSURQX0lEKDUsIDMpIH0sCVwKPiArCXsgRFJNX0ZPUk1BVF9OVjEyLCBERV9WSURFTzEgfCBE RV9WSURFTzIsIE1BTElEUF9JRCg1LCA2KSB9LAlcCj4gKwl7IERSTV9GT1JNQVRfWVVWNDIwLCBE RV9WSURFTzEgfCBERV9WSURFTzIsIE1BTElEUF9JRCg1LCA3KSB9Cj4gKwo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG1hbGlkcF9pbnB1dF9mb3JtYXQgbWFsaWRwNTUwX2RlX2Zvcm1hdHNbXSA9IHsK PiArCU1BTElEUF9DT01NT05fRk9STUFUUywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgbWFsaWRwX2xheWVyIG1hbGlkcDUwMF9sYXllcnNbXSA9IHsKPiArCXsgREVfVklERU8xLCBN QUxJRFA1MDBfREVfTFZfQkFTRSwgTUFMSURQNTAwX0RFX0xWX1BUUl9CQVNFIH0sCj4gKwl7IERF X0dSQVBISUNTMSwgTUFMSURQNTAwX0RFX0xHMV9CQVNFLCBNQUxJRFA1MDBfREVfTEcxX1BUUl9C QVNFIH0sCj4gKwl7IERFX0dSQVBISUNTMiwgTUFMSURQNTAwX0RFX0xHMl9CQVNFLCBNQUxJRFA1 MDBfREVfTEcyX1BUUl9CQVNFIH0sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG1h bGlkcF9sYXllciBtYWxpZHA1NTBfbGF5ZXJzW10gPSB7Cj4gKwl7IERFX1ZJREVPMSwgTUFMSURQ NTUwX0RFX0xWMV9CQVNFLCBNQUxJRFA1NTBfREVfTFYxX1BUUl9CQVNFIH0sCj4gKwl7IERFX0dS QVBISUNTMSwgTUFMSURQNTUwX0RFX0xHX0JBU0UsIE1BTElEUDU1MF9ERV9MR19QVFJfQkFTRSB9 LAo+ICsJeyBERV9WSURFTzIsIE1BTElEUDU1MF9ERV9MVjJfQkFTRSwgTUFMSURQNTUwX0RFX0xW Ml9QVFJfQkFTRSB9LAo+ICsJeyBERV9TTUFSVCwgTUFMSURQNTUwX0RFX0xTX0JBU0UsIE1BTElE UDU1MF9ERV9MU19QVFJfQkFTRSB9LAo+ICt9Owo+ICsKPiArI2RlZmluZSBNQUxJRFBfREVfREVG QVVMVF9QUkVGRVRDSF9TVEFSVAk1Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcDUwMF9xdWVyeV9o dyhzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBjb25mID0gbWFs aWRwX2h3X3JlYWQoaHdkZXYsIE1BTElEUDUwMF9DT05GSUdfSUQpOwo+ICsJLyogYml0IDQgb2Yg dGhlIENPTkZJR19JRCByZWdpc3RlciBob2xkcyB0aGUgbGluZSBzaXplIG11bHRpcGxpZXIgKi8K PiArCXU4IGxuX3NpemVfbXVsdCA9IGNvbmYgJiAweDEwID8gMiA6IDE7Cj4gKwo+ICsJaHdkZXYt Pm1pbl9saW5lX3NpemUgPSAyOwo+ICsJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl8ySyAqIGxu X3NpemVfbXVsdDsKPiArCWh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMF0gPSBTWl8xSyAqIDY0ICog bG5fc2l6ZV9tdWx0Owo+ICsJaHdkZXYtPnJvdGF0aW9uX21lbW9yeVsxXSA9IDA7IC8qIG5vIHNl Y29uZCByb3RhdGlvbiBtZW1vcnkgYmFuayAqLwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBtYWxpZHA1MDBfZW50ZXJfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDEwMDsKPiArCj4g KwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEsIE1BTElE UDUwMF9EQ19DT05UUk9MKTsKPiArCXdoaWxlIChjb3VudCkgewo+ICsJCXN0YXR1cyA9IG1hbGlk cF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRVUyk7 Cj4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSkgPT0gTUFMSURQNTAw X0RDX0NPTkZJR19SRVEpCj4gKwkJCWJyZWFrOwo+ICsJCS8qCj4gKwkJICogZW50ZXJpbmcgY29u ZmlnIG1vZGUgY2FuIHRha2UgYXMgbG9uZyBhcyB0aGUgcmVuZGVyaW5nCj4gKwkJICogb2YgYSBm dWxsIGZyYW1lLCBoZW5jZSB0aGUgbG9uZyBzbGVlcCBoZXJlCj4gKwkJICovCj4gKwkJdXNsZWVw X3JhbmdlKDEwMDAsIDEwMDAwKTsKPiArCQljb3VudC0tOwo+ICsJfQo+ICsJV0FSTihjb3VudCA9 PSAwLCAidGltZW91dCB3aGlsZSBlbnRlcmluZyBjb25maWcgbW9kZSIpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtYWxpZHA1MDBfbGVhdmVfY29uZmlnX21vZGUoc3RydWN0IG1hbGlkcF9od19k ZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIgc3RhdHVzLCBjb3VudCA9IDEwMDsKPiArCj4gKwlt YWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFA1MDBfRENfQ09ORklHX1JFUSwgTUFMSURQ NTAwX0RDX0NPTlRST0wpOwo+ICsJd2hpbGUgKGNvdW50KSB7Cj4gKwkJc3RhdHVzID0gbWFsaWRw X2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsK PiArCQlpZiAoKHN0YXR1cyAmIE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKSA9PSAwKQo+ICsJCQli cmVhazsKPiArCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKPiArCQljb3VudC0tOwo+ICsJfQo+ ICsJV0FSTihjb3VudCA9PSAwLCAidGltZW91dCB3aGlsZSBsZWF2aW5nIGNvbmZpZyBtb2RlIik7 Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIG1hbGlkcDUwMF9pbl9jb25maWdfbW9kZShzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBzdGF0dXM7Cj4gKwo+ICsJc3Rh dHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFzZSArIE1BTElEUF9S RUdfU1RBVFVTKTsKPiArCWlmICgoc3RhdHVzICYgTUFMSURQNTAwX0RDX0NPTkZJR19SRVEpID09 IE1BTElEUDUwMF9EQ19DT05GSUdfUkVRKQo+ICsJCXJldHVybiB0cnVlOwo+ICsKPiArCXJldHVy biBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwNTAwX3NldF9jb25maWdfdmFs aWQoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwltYWxpZHBfaHdfc2V0 Yml0cyhod2RldiwgTUFMSURQX0NGR19WQUxJRCwgTUFMSURQNTAwX0NPTkZJR19WQUxJRCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcDUwMF9tb2Rlc2V0KHN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2Rldiwgc3RydWN0IHZpZGVvbW9kZSAqbW9kZSkKPiArewo+ICsJdTMyIHZhbCA9 IDA7Cj4gKwo+ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTAwX0RDX0NMRUFS X01BU0ssIE1BTElEUDUwMF9EQ19DT05UUk9MKTsKPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BM QVlfRkxBR1NfSFNZTkNfSElHSCkKPiArCQl2YWwgfD0gTUFMSURQNTAwX0hTWU5DUE9MOwo+ICsJ aWYgKG1vZGUtPmZsYWdzICYgRElTUExBWV9GTEFHU19WU1lOQ19ISUdIKQo+ICsJCXZhbCB8PSBN QUxJRFA1MDBfVlNZTkNQT0w7Cj4gKwl2YWwgfD0gTUFMSURQX0RFX0RFRkFVTFRfUFJFRkVUQ0hf U1RBUlQ7Cj4gKwltYWxpZHBfaHdfc2V0Yml0cyhod2RldiwgdmFsLCBNQUxJRFA1MDBfRENfQ09O VFJPTCk7Cj4gKwo+ICsJLyoKPiArCSAqIE1hbGktRFA1MDAgZW5jb2RlcyB0aGUgYmFja2dyb3Vu ZCBjb2xvciBsaWtlIHRoaXM6Cj4gKwkgKiAgICAtIHJlZCAgIEAgTUFMSURQNTAwX0JHTkRfQ09M T1JbMTI6MF0KPiArCSAqICAgIC0gZ3JlZW4gQCBNQUxJRFA1MDBfQkdORF9DT0xPUlsyNzoxNl0K PiArCSAqICAgIC0gYmx1ZSAgQCAoTUFMSURQNTAwX0JHTkRfQ09MT1IgKyA0KVsxMjowXQo+ICsJ ICovCj4gKwl2YWwgPSAoKE1BTElEUF9CR05EX0NPTE9SX0cgJiAweGZmZikgPDwgMTYpIHwKPiAr CSAgICAgIChNQUxJRFBfQkdORF9DT0xPUl9SICYgMHhmZmYpOwo+ICsJbWFsaWRwX2h3X3dyaXRl KGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9CR05EX0NPTE9SKTsKPiArCW1hbGlkcF9od193cml0ZSho d2RldiwgTUFMSURQX0JHTkRfQ09MT1JfQiwgTUFMSURQNTAwX0JHTkRfQ09MT1IgKyA0KTsKPiAr Cj4gKwl2YWwgPSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKG1vZGUtPmhmcm9udF9wb3JjaCkgfAo+ ICsJCU1BTElEUF9ERV9IX0JBQ0tQT1JDSChtb2RlLT5oYmFja19wb3JjaCk7Cj4gKwltYWxpZHBf aHdfd3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTAwX1RJTUlOR1NfQkFTRSArIE1BTElEUF9ERV9I X1RJTUlOR1MpOwo+ICsKPiArCXZhbCA9IE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0gobW9kZS0+ dmZyb250X3BvcmNoKSB8Cj4gKwkJTUFMSURQX0RFX1ZfQkFDS1BPUkNIKG1vZGUtPnZiYWNrX3Bv cmNoKTsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFsLCBNQUxJRFA1MDBfVElNSU5HU19C QVNFICsgTUFMSURQX0RFX1ZfVElNSU5HUyk7Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hfU1lO Q1dJRFRIKG1vZGUtPmhzeW5jX2xlbikgfAo+ICsJCU1BTElEUF9ERV9WX1NZTkNXSURUSChtb2Rl LT52c3luY19sZW4pOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9U SU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfU1lOQ19XSURUSCk7Cj4gKwo+ICsJdmFsID0gTUFMSURQ X0RFX0hfQUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwgTUFMSURQX0RFX1ZfQUNUSVZFKG1vZGUtPnZh Y3RpdmUpOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDUwMF9USU1JTkdT X0JBU0UgKyBNQUxJRFBfREVfSFZfQUNUSVZFKTsKPiArCj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBE SVNQTEFZX0ZMQUdTX0lOVEVSTEFDRUQpCj4gKwkJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1B TElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBfREVfRElTUExBWV9GVU5DKTsKPiArCWVsc2UK PiArCQltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwg TUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbWFsaWRwNTAw X3JvdG1lbV9yZXF1aXJlZChzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1 MTYgaCwgdTMyIGZtdCkKPiArewo+ICsJdW5zaWduZWQgaW50IGRlcHRoOwo+ICsJaW50IGJwcDsK PiArCj4gKwkvKiBSR0I4ODggb3IgQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQgKi8KPiArCWlmICgo Zm10ID09IERSTV9GT1JNQVRfUkdCODg4KSB8fCAoZm10ID09IERSTV9GT1JNQVRfQkdSODg4KSkK PiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwkvKgo+ICsJICogRWFjaCBsYXllciBuZWVkcyBl bm91Z2ggcm90YXRpb24gbWVtb3J5IHRvIGZpdCA4IGxpbmVzCj4gKwkgKiB3b3J0aCBvZiBwaXhl bCBkYXRhLiBSZXF1aXJlZCBzaXplIGlzIHRoZW46Cj4gKwkgKiAgICBzaXplID0gcm90YXRlZF93 aWR0aCAqIChicHAgLyA4KSAqIDg7Cj4gKwkgKi8KPiArCWRybV9mYl9nZXRfYnBwX2RlcHRoKGZt dCwgJmRlcHRoLCAmYnBwKTsKPiArCj4gKwlyZXR1cm4gdyAqIGJwcDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBtYWxpZHA1NTBfcXVlcnlfaHcoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2 KQo+ICt7Cj4gKwl1MzIgY29uZiA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBNQUxJRFA1NTBfQ09O RklHX0lEKTsKPiArCXU4IGxuX3NpemUgPSAoY29uZiA+PiA0KSAmIDB4MywgcnNpemU7Cj4gKwo+ ICsJaHdkZXYtPm1pbl9saW5lX3NpemUgPSAyOwo+ICsKPiArCXN3aXRjaCAobG5fc2l6ZSkgewo+ ICsJY2FzZSAwOgo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pfMks7Cj4gKwkJLyogdHdv IGJhbmtzIG9mIDY0S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ICsJCXJzaXplID0gNjQ7Cj4g KwkJYnJlYWs7Cj4gKwljYXNlIDE6Cj4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSBTWl80SzsK PiArCQkvKiB0d28gYmFua3Mgb2YgMTI4S0IgZm9yIHJvdGF0aW9uIG1lbW9yeSAqLwo+ICsJCXJz aXplID0gMTI4Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSAyOgo+ICsJCWh3ZGV2LT5tYXhfbGluZV9z aXplID0gMTI4MDsKPiArCQkvKiB0d28gYmFua3Mgb2YgNDBLQiBmb3Igcm90YXRpb24gbWVtb3J5 ICovCj4gKwkJcnNpemUgPSA0MDsKPiArCQlicmVhazsKPiArCWNhc2UgMzoKPiArCQkvKiByZXNl cnZlZCB2YWx1ZSAqLwo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gMDsKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCX0KPiArCj4gKwlod2Rldi0+cm90YXRpb25fbWVtb3J5WzBdID0gaHdkZXYt PnJvdGF0aW9uX21lbW9yeVsxXSA9IHJzaXplICogU1pfMUs7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwNTUwX2VudGVyX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxp ZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7Cj4g Kwo+ICsJbWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUDU1MF9EQ19DT05GSUdfUkVRLCBN QUxJRFA1NTBfRENfQ09OVFJPTCk7Cj4gKwl3aGlsZSAoY291bnQpIHsKPiArCQlzdGF0dXMgPSBt YWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1hcC5kY19iYXNlICsgTUFMSURQX1JFR19TVEFU VVMpOwo+ICsJCWlmICgoc3RhdHVzICYgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEpID09IE1BTElE UDU1MF9EQ19DT05GSUdfUkVRKQo+ICsJCQlicmVhazsKPiArCQkvKgo+ICsJCSAqIGVudGVyaW5n IGNvbmZpZyBtb2RlIGNhbiB0YWtlIGFzIGxvbmcgYXMgdGhlIHJlbmRlcmluZwo+ICsJCSAqIG9m IGEgZnVsbCBmcmFtZSwgaGVuY2UgdGhlIGxvbmcgc2xlZXAgaGVyZQo+ICsJCSAqLwo+ICsJCXVz bGVlcF9yYW5nZSgxMDAwLCAxMDAwMCk7Cj4gKwkJY291bnQtLTsKPiArCX0KPiArCVdBUk4oY291 bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUgZW50ZXJpbmcgY29uZmlnIG1vZGUiKTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgbWFsaWRwNTUwX2xlYXZlX2NvbmZpZ19tb2RlKHN0cnVjdCBtYWxpZHBf aHdfZGV2aWNlICpod2RldikKPiArewo+ICsJdTMyIHN0YXR1cywgY291bnQgPSAxMDA7Cj4gKwo+ ICsJbWFsaWRwX2h3X2NsZWFyYml0cyhod2RldiwgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEsIE1B TElEUDU1MF9EQ19DT05UUk9MKTsKPiArCXdoaWxlIChjb3VudCkgewo+ICsJCXN0YXR1cyA9IG1h bGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJRFBfUkVHX1NUQVRV Uyk7Cj4gKwkJaWYgKChzdGF0dXMgJiBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkgPT0gMCkKPiAr CQkJYnJlYWs7Cj4gKwkJdXNsZWVwX3JhbmdlKDEwMCwgMTAwMCk7Cj4gKwkJY291bnQtLTsKPiAr CX0KPiArCVdBUk4oY291bnQgPT0gMCwgInRpbWVvdXQgd2hpbGUgbGVhdmluZyBjb25maWcgbW9k ZSIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUoc3Ry dWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KQo+ICt7Cj4gKwl1MzIgc3RhdHVzOwo+ICsKPiAr CXN0YXR1cyA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLmRjX2Jhc2UgKyBNQUxJ RFBfUkVHX1NUQVRVUyk7Cj4gKwlpZiAoKHN0YXR1cyAmIE1BTElEUDU1MF9EQ19DT05GSUdfUkVR KSA9PSBNQUxJRFA1NTBfRENfQ09ORklHX1JFUSkKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCj4gKwly ZXR1cm4gZmFsc2U7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcDU1MF9zZXRfY29uZmln X3ZhbGlkKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldikKPiArewo+ICsJbWFsaWRwX2h3 X3NldGJpdHMoaHdkZXYsIE1BTElEUF9DRkdfVkFMSUQsIE1BTElEUDU1MF9DT05GSUdfVkFMSUQp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBtYWxpZHA1NTBfbW9kZXNldChzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUgKm1vZGUpCj4gK3sKPiArCXUzMiB2 YWwgPSBNQUxJRFBfREVfREVGQVVMVF9QUkVGRVRDSF9TVEFSVDsKPiArCj4gKwltYWxpZHBfaHdf d3JpdGUoaHdkZXYsIHZhbCwgTUFMSURQNTUwX0RFX0NPTlRST0wpOwo+ICsJLyoKPiArCSAqIE1h bGktRFA1NTAgYW5kIE1hbGktRFA2NTAgZW5jb2RlIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGxpa2Ug dGhpczoKPiArCSAqICAgLSByZWQgICBAIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SWzIzOjE2XQo+ ICsJICogICAtIGdyZWVuIEAgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1JbMTU6OF0KPiArCSAqICAg LSBibHVlICBAIE1BTElEUDU1MF9ERV9CR05EX0NPTE9SWzc6MF0KPiArCSAqCj4gKwkgKiBXZSBu ZWVkIHRvIHRydW5jYXRlIHRoZSBsZWFzdCBzaWduaWZpY2FudCA0IGJpdHMgZnJvbSB0aGUgZGVm YXVsdAo+ICsJICogTUFMSURQX0JHTkRfQ09MT1JfeCB2YWx1ZXMKPiArCSAqLwo+ICsJdmFsID0g KCgoTUFMSURQX0JHTkRfQ09MT1JfUiA+PiA0KSAmIDB4ZmYpIDw8IDE2KSB8Cj4gKwkgICAgICAo KChNQUxJRFBfQkdORF9DT0xPUl9HID4+IDQpICYgMHhmZikgPDwgOCkgfAo+ICsJICAgICAgKChN QUxJRFBfQkdORF9DT0xPUl9CID4+IDQpICYgMHhmZik7Cj4gKwltYWxpZHBfaHdfd3JpdGUoaHdk ZXYsIHZhbCwgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1IpOwo+ICsKPiArCXZhbCA9IE1BTElEUF9E RV9IX0ZST05UUE9SQ0gobW9kZS0+aGZyb250X3BvcmNoKSB8Cj4gKwkJTUFMSURQX0RFX0hfQkFD S1BPUkNIKG1vZGUtPmhiYWNrX3BvcmNoKTsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgdmFs LCBNQUxJRFA1NTBfVElNSU5HU19CQVNFICsgTUFMSURQX0RFX0hfVElNSU5HUyk7Cj4gKwo+ICsJ dmFsID0gTUFMSURQNTUwX0RFX1ZfRlJPTlRQT1JDSChtb2RlLT52ZnJvbnRfcG9yY2gpIHwKPiAr CQlNQUxJRFBfREVfVl9CQUNLUE9SQ0gobW9kZS0+dmJhY2tfcG9yY2gpOwo+ICsJbWFsaWRwX2h3 X3dyaXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfVl9U SU1JTkdTKTsKPiArCj4gKwl2YWwgPSBNQUxJRFBfREVfSF9TWU5DV0lEVEgobW9kZS0+aHN5bmNf bGVuKSB8Cj4gKwkJTUFMSURQX0RFX1ZfU1lOQ1dJRFRIKG1vZGUtPnZzeW5jX2xlbik7Cj4gKwlp ZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0hTWU5DX0hJR0gpCj4gKwkJdmFsIHw9IE1B TElEUDU1MF9IU1lOQ1BPTDsKPiArCWlmIChtb2RlLT5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZ TkNfSElHSCkKPiArCQl2YWwgfD0gTUFMSURQNTUwX1ZTWU5DUE9MOwo+ICsJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfU1lOQ19X SURUSCk7Cj4gKwo+ICsJdmFsID0gTUFMSURQX0RFX0hfQUNUSVZFKG1vZGUtPmhhY3RpdmUpIHwg TUFMSURQX0RFX1ZfQUNUSVZFKG1vZGUtPnZhY3RpdmUpOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3 ZGV2LCB2YWwsIE1BTElEUDU1MF9USU1JTkdTX0JBU0UgKyBNQUxJRFBfREVfSFZfQUNUSVZFKTsK PiArCj4gKwlpZiAobW9kZS0+ZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0lOVEVSTEFDRUQpCj4gKwkJ bWFsaWRwX2h3X3NldGJpdHMoaHdkZXYsIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VELCBNQUxJRFBf REVfRElTUExBWV9GVU5DKTsKPiArCWVsc2UKPiArCQltYWxpZHBfaHdfY2xlYXJiaXRzKGh3ZGV2 LCBNQUxJRFBfRElTUF9GVU5DX0lMQUNFRCwgTUFMSURQX0RFX0RJU1BMQVlfRlVOQyk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZChzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCkKPiArewo+ICsJdTMyIGJ5 dGVzX3Blcl9jb2w7Cj4gKwo+ICsJLyogcmF3IFJHQjg4OCBvciBCR1I4ODggY2FuJ3QgYmUgcm90 YXRlZCAqLwo+ICsJaWYgKChmbXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODgpIHx8IChmbXQgPT0gRFJN X0ZPUk1BVF9CR1I4ODgpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXN3aXRjaCAoZm10 KSB7Cj4gKwkvKiA4IGxpbmVzIGF0IDQgYnl0ZXMgcGVyIHBpeGVsICovCj4gKwljYXNlIERSTV9G T1JNQVRfQVJHQjIxMDEwMTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjIxMDEwMTA6Cj4gKwlj YXNlIERSTV9GT1JNQVRfUkdCQTEwMTAxMDI6Cj4gKwljYXNlIERSTV9GT1JNQVRfQkdSQTEwMTAx MDI6Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJH Ujg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRf QkdSQTg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwljYXNlIERSTV9GT1JN QVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gKwljYXNlIERSTV9G T1JNQVRfQkdSWDg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+ICsJY2FzZSBEUk1f Rk9STUFUX0JHUjg4ODoKPiArCS8qIDE2IGxpbmVzIGF0IDIgYnl0ZXMgcGVyIHBpeGVsICovCj4g KwljYXNlIERSTV9GT1JNQVRfUkdCQTU1NTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfQUJHUjE1NTU6 Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCNTY1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToK PiArCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gKwkJ Ynl0ZXNfcGVyX2NvbCA9IDMyOwo+ICsJCWJyZWFrOwo+ICsJLyogMTYgbGluZXMgYXQgMS41IGJ5 dGVzIHBlciBwaXhlbCAqLwo+ICsJY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gKwljYXNlIERSTV9G T1JNQVRfWVVWNDIwOgo+ICsJCWJ5dGVzX3Blcl9jb2wgPSAyNDsKPiArCQlicmVhazsKPiArCWRl ZmF1bHQ6Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHcgKiBieXRl c19wZXJfY29sOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG1hbGlkcDY1MF9xdWVyeV9odyhzdHJ1 Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYpCj4gK3sKPiArCXUzMiBjb25mID0gbWFsaWRwX2h3 X3JlYWQoaHdkZXYsIE1BTElEUDU1MF9DT05GSUdfSUQpOwo+ICsJdTggbG5fc2l6ZSA9IChjb25m ID4+IDQpICYgMHgzLCByc2l6ZTsKPiArCj4gKwlod2Rldi0+bWluX2xpbmVfc2l6ZSA9IDQ7Cj4g Kwo+ICsJc3dpdGNoIChsbl9zaXplKSB7Cj4gKwljYXNlIDA6Cj4gKwljYXNlIDI6Cj4gKwkJLyog cmVzZXJ2ZWQgdmFsdWVzICovCj4gKwkJaHdkZXYtPm1heF9saW5lX3NpemUgPSAwOwo+ICsJCXJl dHVybiAtRUlOVkFMOwo+ICsJY2FzZSAxOgo+ICsJCWh3ZGV2LT5tYXhfbGluZV9zaXplID0gU1pf NEs7Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDEyOEtCIGZvciByb3RhdGlvbiBtZW1vcnkgKi8KPiAr CQlyc2l6ZSA9IDEyODsKPiArCQlicmVhazsKPiArCWNhc2UgMzoKPiArCQlod2Rldi0+bWF4X2xp bmVfc2l6ZSA9IDI1NjA7Cj4gKwkJLyogdHdvIGJhbmtzIG9mIDgwS0IgZm9yIHJvdGF0aW9uIG1l bW9yeSAqLwo+ICsJCXJzaXplID0gODA7Cj4gKwl9Cj4gKwo+ICsJaHdkZXYtPnJvdGF0aW9uX21l bW9yeVswXSA9IGh3ZGV2LT5yb3RhdGlvbl9tZW1vcnlbMV0gPSByc2l6ZSAqIFNaXzFLOwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK2NvbnN0IHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlIG1hbGlk cF9kZXZpY2VbTUFMSURQX01BWF9ERVZJQ0VTXSA9IHsKPiArCVtNQUxJRFBfNTAwXSA9IHsKPiAr CQkubWFwID0gewo+ICsJCQkuc2VfYmFzZSA9IE1BTElEUDUwMF9TRV9CQVNFLAo+ICsJCQkuZGNf YmFzZSA9IE1BTElEUDUwMF9EQ19CQVNFLAo+ICsJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1 MDBfT1VUUFVUX0RFUFRILAo+ICsJCQkuZmVhdHVyZXMgPSAwLAkvKiBubyBDTEVBUklSUSByZWdp c3RlciAqLwo+ICsJCQkubl9sYXllcnMgPSBBUlJBWV9TSVpFKG1hbGlkcDUwMF9sYXllcnMpLAo+ ICsJCQkubGF5ZXJzID0gbWFsaWRwNTAwX2xheWVycywKPiArCQkJLmRlX2lycV9tYXAgPSB7Cj4g KwkJCQkuaXJxX21hc2sgPSBNQUxJRFBfREVfSVJRX1VOREVSUlVOIHwKPiArCQkJCQkgICAgTUFM SURQNTAwX0RFX0lSUV9BWElfRVJSIHwKPiArCQkJCQkgICAgTUFMSURQNTAwX0RFX0lSUV9WU1lO QyB8Cj4gKwkJCQkJICAgIE1BTElEUDUwMF9ERV9JUlFfR0xPQkFMLAo+ICsJCQkJLnZzeW5jX2ly cSA9IE1BTElEUDUwMF9ERV9JUlFfVlNZTkMsCj4gKwkJCX0sCj4gKwkJCS5zZV9pcnFfbWFwID0g ewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTAwX1NFX0lSUV9DT05GX01PREUsCj4gKwkJCQku dnN5bmNfaXJxID0gMCwKPiArCQkJfSwKPiArCQkJLmRjX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJx X21hc2sgPSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfVkFMSUQsCj4gKwkJCQkudnN5bmNfaXJxID0g TUFMSURQNTAwX0RFX0lSUV9DT05GX1ZBTElELAo+ICsJCQl9LAo+ICsJCQkuaW5wdXRfZm9ybWF0 cyA9IG1hbGlkcDUwMF9kZV9mb3JtYXRzLAo+ICsJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlf U0laRShtYWxpZHA1MDBfZGVfZm9ybWF0cyksCj4gKwkJfSwKPiArCQkucXVlcnlfaHcgPSBtYWxp ZHA1MDBfcXVlcnlfaHcsCj4gKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTAwX2VudGVy X2NvbmZpZ19tb2RlLAo+ICsJCS5sZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDUwMF9sZWF2ZV9j b25maWdfbW9kZSwKPiArCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1MDBfaW5fY29uZmlnX21v ZGUsCj4gKwkJLnNldF9jb25maWdfdmFsaWQgPSBtYWxpZHA1MDBfc2V0X2NvbmZpZ192YWxpZCwK PiArCQkubW9kZXNldCA9IG1hbGlkcDUwMF9tb2Rlc2V0LAo+ICsJCS5yb3RtZW1fcmVxdWlyZWQg PSBtYWxpZHA1MDBfcm90bWVtX3JlcXVpcmVkLAo+ICsJfSwKPiArCVtNQUxJRFBfNTUwXSA9IHsK PiArCQkubWFwID0gewo+ICsJCQkuc2VfYmFzZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ICsJCQku ZGNfYmFzZSA9IE1BTElEUDU1MF9EQ19CQVNFLAo+ICsJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJ RFA1NTBfREVfT1VUUFVUX0RFUFRILAo+ICsJCQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVHTUFQX0hB U19DTEVBUklSUSwKPiArCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1NTBfbGF5ZXJz KSwKPiArCQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXllcnMsCj4gKwkJCS5kZV9pcnFfbWFwID0g ewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQX0RFX0lSUV9VTkRFUlJVTiB8Cj4gKwkJCQkJICAg IE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCj4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQNTUwX0RF X0lSUV9WU1lOQywKPiArCQkJfSwKPiArCQkJLnNlX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21h c2sgPSBNQUxJRFA1NTBfU0VfSVJRX0VPVyB8Cj4gKwkJCQkJICAgIE1BTElEUDU1MF9TRV9JUlFf QVhJX0VSUiwKPiArCQkJfSwKPiArCQkJLmRjX2lycV9tYXAgPSB7Cj4gKwkJCQkuaXJxX21hc2sg PSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfVkFMSUQsCj4gKwkJCQkudnN5bmNfaXJxID0gTUFMSURQ NTUwX0RDX0lSUV9DT05GX1ZBTElELAo+ICsJCQl9LAo+ICsJCQkuaW5wdXRfZm9ybWF0cyA9IG1h bGlkcDU1MF9kZV9mb3JtYXRzLAo+ICsJCQkubl9pbnB1dF9mb3JtYXRzID0gQVJSQVlfU0laRSht YWxpZHA1NTBfZGVfZm9ybWF0cyksCj4gKwkJfSwKPiArCQkucXVlcnlfaHcgPSBtYWxpZHA1NTBf cXVlcnlfaHcsCj4gKwkJLmVudGVyX2NvbmZpZ19tb2RlID0gbWFsaWRwNTUwX2VudGVyX2NvbmZp Z19tb2RlLAo+ICsJCS5sZWF2ZV9jb25maWdfbW9kZSA9IG1hbGlkcDU1MF9sZWF2ZV9jb25maWdf bW9kZSwKPiArCQkuaW5fY29uZmlnX21vZGUgPSBtYWxpZHA1NTBfaW5fY29uZmlnX21vZGUsCj4g KwkJLnNldF9jb25maWdfdmFsaWQgPSBtYWxpZHA1NTBfc2V0X2NvbmZpZ192YWxpZCwKPiArCQku bW9kZXNldCA9IG1hbGlkcDU1MF9tb2Rlc2V0LAo+ICsJCS5yb3RtZW1fcmVxdWlyZWQgPSBtYWxp ZHA1NTBfcm90bWVtX3JlcXVpcmVkLAo+ICsJfSwKPiArCVtNQUxJRFBfNjUwXSA9IHsKPiArCQku bWFwID0gewo+ICsJCQkuc2VfYmFzZSA9IE1BTElEUDU1MF9TRV9CQVNFLAo+ICsJCQkuZGNfYmFz ZSA9IE1BTElEUDU1MF9EQ19CQVNFLAo+ICsJCQkub3V0X2RlcHRoX2Jhc2UgPSBNQUxJRFA1NTBf REVfT1VUUFVUX0RFUFRILAo+ICsJCQkuZmVhdHVyZXMgPSBNQUxJRFBfUkVHTUFQX0hBU19DTEVB UklSUSwKPiArCQkJLm5fbGF5ZXJzID0gQVJSQVlfU0laRShtYWxpZHA1NTBfbGF5ZXJzKSwKPiAr CQkJLmxheWVycyA9IG1hbGlkcDU1MF9sYXllcnMsCj4gKwkJCS5kZV9pcnFfbWFwID0gewo+ICsJ CQkJLmlycV9tYXNrID0gTUFMSURQX0RFX0lSUV9VTkRFUlJVTiB8Cj4gKwkJCQkJICAgIE1BTElE UDY1MF9ERV9JUlFfRFJJRlQgfAo+ICsJCQkJCSAgICBNQUxJRFA1NTBfREVfSVJRX1ZTWU5DLAo+ ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9ERV9JUlFfVlNZTkMsCj4gKwkJCX0sCj4gKwkJ CS5zZV9pcnFfbWFwID0gewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTUwX1NFX0lSUV9FT1cg fAo+ICsJCQkJCSAgICBNQUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIsCj4gKwkJCX0sCj4gKwkJCS5k Y19pcnFfbWFwID0gewo+ICsJCQkJLmlycV9tYXNrID0gTUFMSURQNTUwX0RDX0lSUV9DT05GX1ZB TElELAo+ICsJCQkJLnZzeW5jX2lycSA9IE1BTElEUDU1MF9EQ19JUlFfQ09ORl9WQUxJRCwKPiAr CQkJfSwKPiArCQkJLmlucHV0X2Zvcm1hdHMgPSBtYWxpZHA1NTBfZGVfZm9ybWF0cywKPiArCQkJ Lm5faW5wdXRfZm9ybWF0cyA9IEFSUkFZX1NJWkUobWFsaWRwNTUwX2RlX2Zvcm1hdHMpLAo+ICsJ CX0sCj4gKwkJLnF1ZXJ5X2h3ID0gbWFsaWRwNjUwX3F1ZXJ5X2h3LAo+ICsJCS5lbnRlcl9jb25m aWdfbW9kZSA9IG1hbGlkcDU1MF9lbnRlcl9jb25maWdfbW9kZSwKPiArCQkubGVhdmVfY29uZmln X21vZGUgPSBtYWxpZHA1NTBfbGVhdmVfY29uZmlnX21vZGUsCj4gKwkJLmluX2NvbmZpZ19tb2Rl ID0gbWFsaWRwNTUwX2luX2NvbmZpZ19tb2RlLAo+ICsJCS5zZXRfY29uZmlnX3ZhbGlkID0gbWFs aWRwNTUwX3NldF9jb25maWdfdmFsaWQsCj4gKwkJLm1vZGVzZXQgPSBtYWxpZHA1NTBfbW9kZXNl dCwKPiArCQkucm90bWVtX3JlcXVpcmVkID0gbWFsaWRwNTUwX3JvdG1lbV9yZXF1aXJlZCwKPiAr CX0sCj4gK307Cj4gKwo+ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3Qg bWFsaWRwX2h3X3JlZ21hcCAqbWFwLAo+ICsJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCkK PiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG1hcC0+bl9p bnB1dF9mb3JtYXRzOyBpKyspIHsKPiArCQlpZiAoKChtYXAtPmlucHV0X2Zvcm1hdHNbaV0ubGF5 ZXIgJiBsYXllcl9pZCkgPT0gbGF5ZXJfaWQpICYmCj4gKwkJICAgIChtYXAtPmlucHV0X2Zvcm1h dHNbaV0uZm9ybWF0ID09IGZvcm1hdCkpCj4gKwkJCXJldHVybiBtYXAtPmlucHV0X2Zvcm1hdHNb aV0uaWQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIE1BTElEUF9JTlZBTElEX0ZPUk1BVF9JRDsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2h3X2NsZWFyX2lycShzdHJ1Y3QgbWFsaWRwX2h3 X2RldmljZSAqaHdkZXYsIHU4IGJsb2NrLCB1MzIgaXJxKQo+ICt7Cj4gKwl1MzIgYmFzZSA9IG1h bGlkcF9nZXRfYmxvY2tfYmFzZShod2RldiwgYmxvY2spOwo+ICsKPiArCWlmIChod2Rldi0+bWFw LmZlYXR1cmVzICYgTUFMSURQX1JFR01BUF9IQVNfQ0xFQVJJUlEpCj4gKwkJbWFsaWRwX2h3X3dy aXRlKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX0NMRUFSSVJRKTsKPiArCWVsc2UKPiAr CQltYWxpZHBfaHdfd3JpdGUoaHdkZXYsIGlycSwgYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsK PiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IG1hbGlkcF9kZV9pcnEoaW50IGlycSwgdm9p ZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gYXJnOwo+ICsJc3RydWN0 IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRw X2h3X2RldmljZSAqaHdkZXY7Cj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgKmRlOwo+ ICsJdTMyIHN0YXR1cywgbWFzaywgZGNfc3RhdHVzOwo+ICsJaXJxcmV0dXJuX3QgcmV0ID0gSVJR X05PTkU7Cj4gKwo+ICsJaWYgKCFkcm0tPmRldl9wcml2YXRlKQo+ICsJCXJldHVybiBJUlFfSEFO RExFRDsKPiArCj4gKwlod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJZGUgPSAmaHdkZXYtPm1hcC5k ZV9pcnFfbWFwOwo+ICsKPiArCS8qIGZpcnN0IGhhbmRsZSB0aGUgY29uZmlnIHZhbGlkIElSUSAq Lwo+ICsJZGNfc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5tYXAuZGNfYmFz ZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCWlmIChkY19zdGF0dXMgJiBod2Rldi0+bWFwLmRj X2lycV9tYXAudnN5bmNfaXJxKSB7Cj4gKwkJLyogd2UgaGF2ZSBhIHBhZ2UgZmxpcCBldmVudCAq Lwo+ICsJCWF0b21pY19zZXQoJm1hbGlkcC0+Y29uZmlnX3ZhbGlkLCAxKTsKPiArCQltYWxpZHBf aHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBfRENfQkxPQ0ssIGRjX3N0YXR1cyk7Cj4gKwkJcmV0 ID0gSVJRX1dBS0VfVEhSRUFEOwo+ICsJfQo+ICsKPiArCXN0YXR1cyA9IG1hbGlkcF9od19yZWFk KGh3ZGV2LCBNQUxJRFBfUkVHX1NUQVRVUyk7Cj4gKwlpZiAoIShzdGF0dXMgJiBkZS0+aXJxX21h c2spKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJbWFzayA9IG1hbGlkcF9od19yZWFkKGh3ZGV2 LCBNQUxJRFBfUkVHX01BU0tJUlEpOwo+ICsJc3RhdHVzICY9IG1hc2s7Cj4gKwlpZiAoc3RhdHVz ICYgZGUtPnZzeW5jX2lycSkKPiArCQlkcm1fY3J0Y19oYW5kbGVfdmJsYW5rKCZtYWxpZHAtPmNy dGMpOwo+ICsKPiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywg c3RhdHVzKTsKPiArCj4gKwlyZXR1cm4gKHJldCA9PSBJUlFfTk9ORSkgPyBJUlFfSEFORExFRCA6 IHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IG1hbGlkcF9kZV9pcnFfdGhyZWFk X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAq ZHJtID0gYXJnOwo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZh dGU7Cj4gKwo+ICsJd2FrZV91cCgmbWFsaWRwLT53cSk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5E TEVEOwo+ICt9Cj4gKwo+ICtpbnQgbWFsaWRwX2RlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNl ICpkcm0sIGludCBpcnEpCj4gK3sKPiArCXN0cnVjdCBtYWxpZHBfZHJtICptYWxpZHAgPSBkcm0t PmRldl9wcml2YXRlOwo+ICsJc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2ID0gbWFsaWRw LT5kZXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qIGVuc3VyZSBpbnRlcnJ1cHRzIGFyZSBkaXNh YmxlZCAqLwo+ICsJbWFsaWRwX2h3X2Rpc2FibGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ss IDB4ZmZmZmZmZmYpOwo+ICsJbWFsaWRwX2h3X2NsZWFyX2lycShod2RldiwgTUFMSURQX0RFX0JM T0NLLCAweGZmZmZmZmZmKTsKPiArCW1hbGlkcF9od19kaXNhYmxlX2lycShod2RldiwgTUFMSURQ X0RDX0JMT0NLLCAweGZmZmZmZmZmKTsKPiArCW1hbGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1B TElEUF9EQ19CTE9DSywgMHhmZmZmZmZmZik7Cj4gKwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3Ro cmVhZGVkX2lycShkcm0tPmRldiwgaXJxLCBtYWxpZHBfZGVfaXJxLAo+ICsJCQkJCW1hbGlkcF9k ZV9pcnFfdGhyZWFkX2hhbmRsZXIsCj4gKwkJCQkJSVJRRl9TSEFSRUQsICJtYWxpZHAtZGUiLCBk cm0pOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fRVJST1IoImZhaWxlZCB0byBpbnN0YWxs IERFIElSUSBoYW5kbGVyXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCS8qIGZp cnN0IGVuYWJsZSB0aGUgREMgYmxvY2sgSVJRcyAqLwo+ICsJbWFsaWRwX2h3X2VuYWJsZV9pcnEo aHdkZXYsIE1BTElEUF9EQ19CTE9DSywKPiArCQkJICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAu aXJxX21hc2spOwo+ICsKPiArCS8qIG5vdyBlbmFibGUgdGhlIERFIGJsb2NrIElSUXMgKi8KPiAr CW1hbGlkcF9od19lbmFibGVfaXJxKGh3ZGV2LCBNQUxJRFBfREVfQkxPQ0ssCj4gKwkJCSAgICAg aHdkZXYtPm1hcC5kZV9pcnFfbWFwLmlycV9tYXNrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArdm9pZCBtYWxpZHBfZGVfaXJxX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiAr ewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwlz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxpZHAtPmRldjsKPiArCj4gKwltYWxp ZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9ERV9CTE9DSywKPiArCQkJICAgICAgaHdk ZXYtPm1hcC5kZV9pcnFfbWFwLmlycV9tYXNrKTsKPiArCW1hbGlkcF9od19kaXNhYmxlX2lycSho d2RldiwgTUFMSURQX0RDX0JMT0NLLAo+ICsJCQkgICAgICBod2Rldi0+bWFwLmRjX2lycV9tYXAu aXJxX21hc2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycShp bnQgaXJxLCB2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBhcmc7 Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJdTMyIHN0YXR1 cywgbWFzazsKPiArCj4gKwlzdGF0dXMgPSBtYWxpZHBfaHdfcmVhZChod2RldiwgaHdkZXYtPm1h cC5zZV9iYXNlICsgTUFMSURQX1JFR19TVEFUVVMpOwo+ICsJaWYgKCEoc3RhdHVzICYgaHdkZXYt Pm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKSkKPiArCQlyZXR1cm4gSVJRX05PTkU7Cj4gKwo+ICsJ bWFzayA9IG1hbGlkcF9od19yZWFkKGh3ZGV2LCBod2Rldi0+bWFwLnNlX2Jhc2UgKyBNQUxJRFBf UkVHX01BU0tJUlEpOwo+ICsJc3RhdHVzID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIGh3ZGV2LT5t YXAuc2VfYmFzZSArIE1BTElEUF9SRUdfU1RBVFVTKTsKPiArCXN0YXR1cyAmPSBtYXNrOwo+ICsJ LyogVG9Ebzogc3RhdHVzIGRlY29kaW5nIGFuZCBmaXJpbmcgdXAgb2YgVlNZTkMgYW5kIHBhZ2Ug ZmxpcCBldmVudHMgKi8KPiArCj4gKwltYWxpZHBfaHdfY2xlYXJfaXJxKGh3ZGV2LCBNQUxJRFBf U0VfQkxPQ0ssIHN0YXR1cyk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaXJxcmV0dXJuX3QgbWFsaWRwX3NlX2lycV90aHJlYWRfaGFuZGxlcihpbnQgaXJx LCB2b2lkICphcmcpCj4gK3sKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAraW50 IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQgaXJxKQo+ICt7 Cj4gKwlzdHJ1Y3QgbWFsaWRwX2RybSAqbWFsaWRwID0gZHJtLT5kZXZfcHJpdmF0ZTsKPiArCXN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiA9IG1hbGlkcC0+ZGV2Owo+ICsJaW50IHJldDsK PiArCj4gKwkvKiBlbnN1cmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KPiArCW1hbGlkcF9o d19kaXNhYmxlX2lycShod2RldiwgTUFMSURQX1NFX0JMT0NLLCAweGZmZmZmZmZmKTsKPiArCW1h bGlkcF9od19jbGVhcl9pcnEoaHdkZXYsIE1BTElEUF9TRV9CTE9DSywgMHhmZmZmZmZmZik7Cj4g Kwo+ICsJcmV0ID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkcm0tPmRldiwgaXJxLCBtYWxp ZHBfc2VfaXJxLAo+ICsJCQkJCW1hbGlkcF9zZV9pcnFfdGhyZWFkX2hhbmRsZXIsCj4gKwkJCQkJ SVJRRl9TSEFSRUQsICJtYWxpZHAtc2UiLCBkcm0pOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlE Uk1fRVJST1IoImZhaWxlZCB0byBpbnN0YWxsIFNFIElSUSBoYW5kbGVyXG4iKTsKPiArCQlyZXR1 cm4gcmV0Owo+ICsJfQo+ICsKPiArCW1hbGlkcF9od19lbmFibGVfaXJxKGh3ZGV2LCBNQUxJRFBf U0VfQkxPQ0ssCj4gKwkJCSAgICAgaHdkZXYtPm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArdm9pZCBtYWxpZHBfc2VfaXJxX2Zpbmkoc3RydWN0 IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJc3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRy bS0+ZGV2X3ByaXZhdGU7Cj4gKwlzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYgPSBtYWxp ZHAtPmRldjsKPiArCj4gKwltYWxpZHBfaHdfZGlzYWJsZV9pcnEoaHdkZXYsIE1BTElEUF9TRV9C TE9DSywKPiArCQkJICAgICAgaHdkZXYtPm1hcC5zZV9pcnFfbWFwLmlycV9tYXNrKTsKPiArfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9ody5oIGIvZHJpdmVycy9n cHUvZHJtL2FybS9tYWxpZHBfaHcuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMC4uMTQxNzQzZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJt L21hbGlkcF9ody5oCj4gQEAgLTAsMCArMSwyNDEgQEAKPiArLyoKPiArICoKPiArICogKEMpIENP UFlSSUdIVCAyMDEzLTIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5 b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5k YXRpb24sIGFuZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0 aGUgdGVybXMKPiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkg RFAgaGFyZHdhcmUgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYg X19NQUxJRFBfSFdfSF9fCj4gKyNkZWZpbmUgX19NQUxJRFBfSFdfSF9fCj4gKwo+ICsjaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+Cj4gKyNpbmNsdWRlICJtYWxpZHBfcmVncy5oIgo+ICsKPiArc3Ry dWN0IHZpZGVvbW9kZTsKPiArc3RydWN0IGNsazsKPiArCj4gKy8qIE1hbGkgRFAgSVAgYmxvY2tz ICovCj4gK2VudW0gewo+ICsJTUFMSURQX0RFX0JMT0NLID0gMCwKPiArCU1BTElEUF9TRV9CTE9D SywKPiArCU1BTElEUF9EQ19CTE9DSwo+ICt9Owo+ICsKPiArLyogTWFsaSBEUCBsYXllciBJRHMg Ki8KPiArZW51bSB7Cj4gKwlERV9WSURFTzEgPSBCSVQoMCksCj4gKwlERV9HUkFQSElDUzEgPSBC SVQoMSksCj4gKwlERV9HUkFQSElDUzIgPSBCSVQoMiksIC8qIHVzZWQgb25seSBpbiBEUDUwMCAq Lwo+ICsJREVfVklERU8yID0gQklUKDMpLAo+ICsJREVfU01BUlQgPSBCSVQoNCksCj4gK307Cj4g Kwo+ICtzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCB7Cj4gKwl1MzIgZm9ybWF0OwkJLyogRFJN IGZvdXJjYyAqLwo+ICsJdTggbGF5ZXI7CQkvKiBiaXRtYXNrIG9mIGxheWVycyBzdXBwb3J0aW5n IGl0ICovCj4gKwl1OCBpZDsJCQkvKiB1c2VkIGludGVybmFsbHkgKi8KPiArfTsKPiArCj4gKyNk ZWZpbmUgTUFMSURQX0lOVkFMSURfRk9STUFUX0lECTB4ZmYKPiArCj4gKy8qCj4gKyAqIGhpZGUg dGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gcmVnaXN0ZXIgbWFwcwo+ICsgKiBieSB1c2luZyBhIGNv bW1vbiBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUKPiArICogYmFzZSByZWdpc3RlciBvZmZzZXRzCj4g KyAqLwo+ICsKPiArc3RydWN0IG1hbGlkcF9pcnFfbWFwIHsKPiArCXUzMiBpcnFfbWFzazsJCS8q IG1hc2sgb2YgSVJRcyB0aGF0IGNhbiBiZSBlbmFibGVkIGluIHRoZSBibG9jayAqLwo+ICsJdTMy IHZzeW5jX2lycTsJCS8qIElSUSBiaXQgdXNlZCBmb3Igc2lnbmFsaW5nIGR1cmluZyBWU1lOQyAq Lwo+ICt9Owo+ICsKPiArc3RydWN0IG1hbGlkcF9sYXllciB7Cj4gKwl1MTYgaWQ7CQkJLyogbGF5 ZXIgSUQgKi8KPiArCXUxNiBiYXNlOwkJLyogYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSByZWdpc3Rl ciBiYW5rICovCj4gKwl1MTYgcHRyOwkJLyogYWRkcmVzcyBvZmZzZXQgZm9yIHRoZSBwb2ludGVy IHJlZ2lzdGVyICovCj4gK307Cj4gKwo+ICsvKiByZWdtYXAgZmVhdHVyZXMgKi8KPiArI2RlZmlu ZSBNQUxJRFBfUkVHTUFQX0hBU19DTEVBUklSUQkoMSA8PCAwKQo+ICsKPiArc3RydWN0IG1hbGlk cF9od19yZWdtYXAgewo+ICsJLyogYWRkcmVzcyBvZmZzZXQgb2YgdGhlIERFIHJlZ2lzdGVyIGJh bmsgKi8KPiArCS8qIGlzIGFsd2F5cyAweDAwMDAgKi8KPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IG9m IHRoZSBTRSByZWdpc3RlcnMgYmFuayAqLwo+ICsJY29uc3QgdTE2IHNlX2Jhc2U7Cj4gKwkvKiBh ZGRyZXNzIG9mZnNldCBvZiB0aGUgREMgcmVnaXN0ZXJzIGJhbmsgKi8KPiArCWNvbnN0IHUxNiBk Y19iYXNlOwo+ICsKPiArCS8qIGFkZHJlc3Mgb2Zmc2V0IGZvciB0aGUgb3V0cHV0IGRlcHRoIHJl Z2lzdGVyICovCj4gKwljb25zdCB1MTYgb3V0X2RlcHRoX2Jhc2U7Cj4gKwo+ICsJLyogYml0bWFw IHdpdGggcmVnaXN0ZXIgbWFwIGZlYXR1cmVzICovCj4gKwljb25zdCB1OCBmZWF0dXJlczsKPiAr Cj4gKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBsYXllcnMgKi8KPiArCWNvbnN0IHU4IG5fbGF5ZXJz Owo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9sYXllciAqbGF5ZXJzOwo+ICsKPiArCWNvbnN0IHN0 cnVjdCBtYWxpZHBfaXJxX21hcCBkZV9pcnFfbWFwOwo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9p cnFfbWFwIHNlX2lycV9tYXA7Cj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lycV9tYXAgZGNfaXJx X21hcDsKPiArCj4gKwkvKiBsaXN0IG9mIHN1cHBvcnRlZCBpbnB1dCBmb3JtYXRzIGZvciBlYWNo IGxheWVyICovCj4gKwljb25zdCBzdHJ1Y3QgbWFsaWRwX2lucHV0X2Zvcm1hdCAqaW5wdXRfZm9y bWF0czsKPiArCWNvbnN0IHU4IG5faW5wdXRfZm9ybWF0czsKPiArfTsKPiArCj4gK3N0cnVjdCBt YWxpZHBfaHdfZGV2aWNlIHsKPiArCWNvbnN0IHN0cnVjdCBtYWxpZHBfaHdfcmVnbWFwIG1hcDsK PiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCj4gKwkvKiBBUEIgY2xvY2sgKi8KPiArCXN0cnVj dCBjbGsgKnBjbGs7Cj4gKwkvKiBBWEkgY2xvY2sgKi8KPiArCXN0cnVjdCBjbGsgKmFjbGs7Cj4g KwkvKiBtYWluIGNsb2NrIGZvciBkaXNwbGF5IGNvcmUgKi8KPiArCXN0cnVjdCBjbGsgKm1jbGs7 Cj4gKwkvKiBwaXhlbCBjbG9jayBmb3IgZGlzcGxheSBjb3JlICovCj4gKwlzdHJ1Y3QgY2xrICpw eGxjbGs7Cj4gKwo+ICsJLyoKPiArCSAqIFZhbGlkYXRlIHRoZSBkcml2ZXIgaW5zdGFuY2UgYWdh aW5zdCB0aGUgaGFyZHdhcmUgYml0cwo+ICsJICovCj4gKwlpbnQgKCpxdWVyeV9odykoc3RydWN0 IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogU2V0IHRoZSBoYXJk d2FyZSBpbnRvIGNvbmZpZyBtb2RlLCByZWFkeSB0byBhY2NlcHQgbW9kZSBjaGFuZ2VzCj4gKwkg Ki8KPiArCXZvaWQgKCplbnRlcl9jb25maWdfbW9kZSkoc3RydWN0IG1hbGlkcF9od19kZXZpY2Ug Kmh3ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogVGVsbCBoYXJkd2FyZSB0byBleGl0IGNvbmZpZ3Vy YXRpb24gbW9kZQo+ICsJICovCj4gKwl2b2lkICgqbGVhdmVfY29uZmlnX21vZGUpKHN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAqIFF1ZXJ5IGlmIGhhcmR3 YXJlIGlzIGluIGNvbmZpZ3VyYXRpb24gbW9kZQo+ICsJICovCj4gKwlib29sICgqaW5fY29uZmln X21vZGUpKHN0cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAq IFNldCBjb25maWd1cmF0aW9uIHZhbGlkIGZsYWcgZm9yIGhhcmR3YXJlIHBhcmFtZXRlcnMgdGhh dCBjYW4KPiArCSAqIGJlIGNoYW5nZWQgb3V0c2lkZSB0aGUgY29uZmlndXJhdGlvbiBtb2RlLiBI YXJkd2FyZSB3aWxsIHVzZQo+ICsJICogdGhlIG5ldyBzZXR0aW5ncyB3aGVuIGNvbmZpZyB2YWxp ZCBpcyBzZXQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKPiArCSAqIGN1cnJlbnQgYnVmZmVyIHNjYW5v dXQKPiArCSAqLwo+ICsJdm9pZCAoKnNldF9jb25maWdfdmFsaWQpKHN0cnVjdCBtYWxpZHBfaHdf ZGV2aWNlICpod2Rldik7Cj4gKwo+ICsJLyoKPiArCSAqIFNldCBhIG5ldyBtb2RlIGluIGhhcmR3 YXJlLiBSZXF1aXJlcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW4KPiArCSAqIGNvbmZpZ3VyYXRpb24g bW9kZSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCj4gKwkgKi8KPiArCXZvaWQgKCpt b2Rlc2V0KShzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHN0cnVjdCB2aWRlb21vZGUg Km0pOwo+ICsKPiArCS8qCj4gKwkgKiBDYWxjdWxhdGUgdGhlIHJlcXVpcmVkIHJvdGF0aW9uIG1l bW9yeSBnaXZlbiB0aGUgYWN0aXZlIGFyZWEKPiArCSAqIGFuZCB0aGUgYnVmZmVyIGZvcm1hdC4K PiArCSAqLwo+ICsJaW50ICgqcm90bWVtX3JlcXVpcmVkKShzdHJ1Y3QgbWFsaWRwX2h3X2Rldmlj ZSAqaHdkZXYsIHUxNiB3LCB1MTYgaCwgdTMyIGZtdCk7Cj4gKwo+ICsJdTggZmVhdHVyZXM7Cj4g Kwo+ICsJdTggbWluX2xpbmVfc2l6ZTsKPiArCXUxNiBtYXhfbGluZV9zaXplOwo+ICsKPiArCS8q IHNpemUgb2YgbWVtb3J5IHVzZWQgZm9yIHJvdGF0aW5nIGxheWVycywgdXAgdG8gdHdvIGJhbmtz IGF2YWlsYWJsZSAqLwo+ICsJdTMyIHJvdGF0aW9uX21lbW9yeVsyXTsKPiArfTsKPiArCj4gKy8q IFN1cHBvcnRlZCB2YXJpYW50cyBvZiB0aGUgaGFyZHdhcmUgKi8KPiArZW51bSB7Cj4gKwlNQUxJ RFBfNTAwID0gMCwKPiArCU1BTElEUF81NTAsCj4gKwlNQUxJRFBfNjUwLAo+ICsJLyoga2VlcCB0 aGUgbmV4dCBlbnRyeSBsYXN0ICovCj4gKwlNQUxJRFBfTUFYX0RFVklDRVMKPiArfTsKPiArCj4g K2V4dGVybiBjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3X2RldmljZSBtYWxpZHBfZGV2aWNlW01BTElE UF9NQVhfREVWSUNFU107Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHUzMiBtYWxpZHBfaHdfcmVhZChz dHJ1Y3QgbWFsaWRwX2h3X2RldmljZSAqaHdkZXYsIHUzMiByZWcpCj4gK3sKPiArCXJldHVybiBy ZWFkbChod2Rldi0+cmVncyArIHJlZyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBt YWxpZHBfaHdfd3JpdGUoc3RydWN0IG1hbGlkcF9od19kZXZpY2UgKmh3ZGV2LAo+ICsJCQkJICAg dTMyIHZhbHVlLCB1MzIgcmVnKQo+ICt7Cj4gKwl3cml0ZWwodmFsdWUsIGh3ZGV2LT5yZWdzICsg cmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIG1hbGlkcF9od19zZXRiaXRzKHN0 cnVjdCBtYWxpZHBfaHdfZGV2aWNlICpod2RldiwKPiArCQkJCSAgICAgdTMyIG1hc2ssIHUzMiBy ZWcpCj4gK3sKPiArCXUzMiBkYXRhID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIHJlZyk7Cj4gKwo+ ICsJZGF0YSB8PSBtYXNrOwo+ICsJbWFsaWRwX2h3X3dyaXRlKGh3ZGV2LCBkYXRhLCByZWcpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbWFsaWRwX2h3X2NsZWFyYml0cyhzdHJ1Y3Qg bWFsaWRwX2h3X2RldmljZSAqaHdkZXYsCj4gKwkJCQkgICAgICAgdTMyIG1hc2ssIHUzMiByZWcp Cj4gK3sKPiArCXUzMiBkYXRhID0gbWFsaWRwX2h3X3JlYWQoaHdkZXYsIHJlZyk7Cj4gKwo+ICsJ ZGF0YSAmPSB+bWFzazsKPiArCW1hbGlkcF9od193cml0ZShod2RldiwgZGF0YSwgcmVnKTsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgbWFsaWRwX2dldF9ibG9ja19iYXNlKHN0cnVjdCBt YWxpZHBfaHdfZGV2aWNlICpod2RldiwKPiArCQkJCQl1OCBibG9jaykKPiArewo+ICsJc3dpdGNo IChibG9jaykgewo+ICsJY2FzZSBNQUxJRFBfU0VfQkxPQ0s6Cj4gKwkJcmV0dXJuIGh3ZGV2LT5t YXAuc2VfYmFzZTsKPiArCWNhc2UgTUFMSURQX0RDX0JMT0NLOgo+ICsJCXJldHVybiBod2Rldi0+ bWFwLmRjX2Jhc2U7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBtYWxpZHBfaHdfZGlzYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9od19kZXZpY2Ug Kmh3ZGV2LAo+ICsJCQkJCSB1OCBibG9jaywgdTMyIGlycSkKPiArewo+ICsJdTMyIGJhc2UgPSBt YWxpZHBfZ2V0X2Jsb2NrX2Jhc2UoaHdkZXYsIGJsb2NrKTsKPiArCj4gKwltYWxpZHBfaHdfY2xl YXJiaXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX01BU0tJUlEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHZvaWQgbWFsaWRwX2h3X2VuYWJsZV9pcnEoc3RydWN0IG1hbGlkcF9o d19kZXZpY2UgKmh3ZGV2LAo+ICsJCQkJCXU4IGJsb2NrLCB1MzIgaXJxKQo+ICt7Cj4gKwl1MzIg YmFzZSA9IG1hbGlkcF9nZXRfYmxvY2tfYmFzZShod2RldiwgYmxvY2spOwo+ICsKPiArCW1hbGlk cF9od19zZXRiaXRzKGh3ZGV2LCBpcnEsIGJhc2UgKyBNQUxJRFBfUkVHX01BU0tJUlEpOwo+ICt9 Cj4gKwo+ICtpbnQgbWFsaWRwX2RlX2lycV9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sIGlu dCBpcnEpOwo+ICt2b2lkIG1hbGlkcF9kZV9pcnFfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KTsKPiAraW50IG1hbGlkcF9zZV9pcnFfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBpbnQg aXJxKTsKPiArdm9pZCBtYWxpZHBfc2VfaXJxX2Zpbmkoc3RydWN0IGRybV9kZXZpY2UgKmRybSk7 Cj4gKwo+ICt1OCBtYWxpZHBfaHdfZ2V0X2Zvcm1hdF9pZChjb25zdCBzdHJ1Y3QgbWFsaWRwX2h3 X3JlZ21hcCAqbWFwLAo+ICsJCQkgICB1OCBsYXllcl9pZCwgdTMyIGZvcm1hdCk7Cj4gKwo+ICsv Kgo+ICsgKiBiYWNrZ3JvdW5kIGNvbG9yIGNvbXBvbmVudHMgYXJlIGRlZmluZWQgYXMgMTJiaXRz IHZhbHVlcywKPiArICogdGhleSB3aWxsIGJlIHNoaWZ0ZWQgcmlnaHQgd2hlbiBzdG9yZWQgb24g aGFyZHdhcmUgdGhhdAo+ICsgKiBzdXBwb3J0cyBvbmx5IDhiaXRzIHBlciBjaGFubmVsCj4gKyAq Lwo+ICsjZGVmaW5lIE1BTElEUF9CR05EX0NPTE9SX1IJCTB4MDAwCj4gKyNkZWZpbmUgTUFMSURQ X0JHTkRfQ09MT1JfRwkJMHgwMDAKPiArI2RlZmluZSBNQUxJRFBfQkdORF9DT0xPUl9CCQkweDAw MAo+ICsKPiArI2VuZGlmICAvKiBfX01BTElEUF9IV19IX18gKi8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21h bGlkcF9wbGFuZXMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZjM3 MTg4Ngo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlkcF9w bGFuZXMuYwo+IEBAIC0wLDAgKzEsMjcxIEBACj4gKy8qCj4gKyAqIChDKSBDT1BZUklHSFQgMjAx NiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQXV0aG9yOiBMaXZpdSBE dWRhdSA8TGl2aXUuRHVkYXVAYXJtLmNvbT4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmUgYW5kIGlzIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhl Cj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91 IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcwo+ICsgKiBvZiBzdWNoIEdO VSBsaWNlbmNlLgo+ICsgKgo+ICsgKiBBUk0gTWFsaSBEUCBwbGFuZSBtYW5pcHVsYXRpb24gcm91 dGluZXMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBl ci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4KPiArCj4gKyNpbmNsdWRlICJtYWxpZHBfaHcuaCIKPiAr I2luY2x1ZGUgIm1hbGlkcF9kcnYuaCIKPiArCj4gKy8qIExheWVyIHNwZWNpZmljIHJlZ2lzdGVy IG9mZnNldHMgKi8KPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfRk9STUFUCQkweDAwMAo+ICsjZGVm aW5lIE1BTElEUF9MQVlFUl9DT05UUk9MCQkweDAwNAo+ICsjZGVmaW5lICAgTEFZRVJfRU5BQkxF CQkJKDEgPDwgMCkKPiArI2RlZmluZSAgIExBWUVSX1JPVF9PRkZTRVQJCTgKPiArI2RlZmluZSAg IExBWUVSX0hfRkxJUAkJCSgxIDw8IDEwKQo+ICsjZGVmaW5lICAgTEFZRVJfVl9GTElQCQkJKDEg PDwgMTEpCj4gKyNkZWZpbmUgICBMQVlFUl9ST1RfTUFTSwkJKDB4ZiA8PCA4KQo+ICsjZGVmaW5l IE1BTElEUF9MQVlFUl9TSVpFCQkweDAwYwo+ICsjZGVmaW5lICAgTEFZRVJfSF9WQUwoeCkJCSgo KHgpICYgMHgxZmZmKSA8PCAwKQo+ICsjZGVmaW5lICAgTEFZRVJfVl9WQUwoeCkJCSgoKHgpICYg MHgxZmZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfTEFZRVJfQ09NUF9TSVpFCQkweDAxMAo+ ICsjZGVmaW5lIE1BTElEUF9MQVlFUl9PRkZTRVQJCTB4MDE0Cj4gKyNkZWZpbmUgTUFMSURQX0xB WUVSX1NUUklERQkJMHgwMTgKPiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9kZV9wbGFuZV9kZXN0 cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgbWFsaWRwX3BsYW5l ICptcCA9IHRvX21hbGlkcF9wbGFuZShwbGFuZSk7Cj4gKwo+ICsJaWYgKG1wLT5iYXNlLmZiKQo+ ICsJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShtcC0+YmFzZS5mYik7Cj4gKwo+ICsJZHJt X3BsYW5lX2hlbHBlcl9kaXNhYmxlKHBsYW5lKTsKPiArCWRybV9wbGFuZV9jbGVhbnVwKHBsYW5l KTsKPiArCWRldm1fa2ZyZWUocGxhbmUtPmRldi0+ZGV2LCBtcCk7Cj4gK30KPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIG1hbGlkcF9kZV9wbGFuZV9mdW5jcyA9IHsK PiArCS51cGRhdGVfcGxhbmUgPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUsCj4gKwku ZGlzYWJsZV9wbGFuZSA9IGRybV9hdG9taWNfaGVscGVyX2Rpc2FibGVfcGxhbmUsCj4gKwkuZGVz dHJveSA9IG1hbGlkcF9kZV9wbGFuZV9kZXN0cm95LAo+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19o ZWxwZXJfcGxhbmVfcmVzZXQsCj4gKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9t aWNfaGVscGVyX3BsYW5lX2R1cGxpY2F0ZV9zdGF0ZSwKPiArCS5hdG9taWNfZGVzdHJveV9zdGF0 ZSA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4gK307Cj4gKwo+ICtz dGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiArCQkJCSBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSkKPiArewo+ICsJc3RydWN0IG1h bGlkcF9wbGFuZSAqbXAgPSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ICsJdTggZm9ybWF0X2lk Owo+ICsJdTMyIHNyY193LCBzcmNfaDsKPiArCj4gKwlpZiAoIXN0YXRlLT5jcnRjIHx8ICFzdGF0 ZS0+ZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZm9ybWF0X2lkID0gbWFsaWRwX2h3X2dldF9m b3JtYXRfaWQoJm1wLT5od2Rldi0+bWFwLCBtcC0+bGF5ZXItPmlkLAo+ICsJCQkJCSAgICBzdGF0 ZS0+ZmItPnBpeGVsX2Zvcm1hdCk7Cj4gKwlpZiAoZm9ybWF0X2lkID09IE1BTElEUF9JTlZBTElE X0ZPUk1BVF9JRCkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlzcmNfdyA9IHN0YXRlLT5z cmNfdyA+PiAxNjsKPiArCXNyY19oID0gc3RhdGUtPnNyY19oID4+IDE2Owo+ICsKPiArCWlmICgo c3RhdGUtPmNydGNfdyA+IG1wLT5od2Rldi0+bWF4X2xpbmVfc2l6ZSkgfHwKPiArCSAgICAoc3Rh dGUtPmNydGNfaCA+IG1wLT5od2Rldi0+bWF4X2xpbmVfc2l6ZSkgfHwKPiArCSAgICAoc3RhdGUt PmNydGNfdyA8IG1wLT5od2Rldi0+bWluX2xpbmVfc2l6ZSkgfHwKPiArCSAgICAoc3RhdGUtPmNy dGNfaCA8IG1wLT5od2Rldi0+bWluX2xpbmVfc2l6ZSkgfHwKPiArCSAgICAoc3RhdGUtPmNydGNf dyAhPSBzcmNfdykgfHwgKHN0YXRlLT5jcnRjX2ggIT0gc3JjX2gpKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCS8qIHBhY2tlZCBSR0I4ODggLyBCR1I4ODggY2FuJ3QgYmUgcm90YXRlZCBv ciBmbGlwcGVkICovCj4gKwlpZiAoc3RhdGUtPnJvdGF0aW9uICE9IEJJVChEUk1fUk9UQVRFXzAp ICYmCj4gKwkgICAgKHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfUkdCODg4 IHx8Cj4gKwkgICAgIHN0YXRlLT5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfQkdSODg4 KSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwltcC0+cm90bWVtX3NpemUgPSAwOwo+ICsJ aWYgKHN0YXRlLT5yb3RhdGlvbiAmIE1BTElEUF9ST1RBVEVEX01BU0spIHsKPiArCQlpbnQgdmFs Owo+ICsKPiArCQl2YWwgPSBtcC0+aHdkZXYtPnJvdG1lbV9yZXF1aXJlZChtcC0+aHdkZXYsIHN0 YXRlLT5jcnRjX2gsCj4gKwkJCQkJCSBzdGF0ZS0+Y3J0Y193LAo+ICsJCQkJCQkgc3RhdGUtPmZi LT5waXhlbF9mb3JtYXQpOwo+ICsJCWlmICh2YWwgPCAwKQo+ICsJCQlyZXR1cm4gdmFsOwo+ICsK PiArCQltcC0+cm90bWVtX3NpemUgPSB2YWw7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIG1hbGlkcF9kZV9wbGFuZV91cGRhdGUoc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUsCj4gKwkJCQkgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4g K3sKPiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBtYWxpZHBf cGxhbmUgKm1wOwo+ICsJY29uc3Qgc3RydWN0IG1hbGlkcF9od19yZWdtYXAgKm1hcDsKPiArCXU4 IGZvcm1hdF9pZDsKPiArCXUxNiBwdHI7Cj4gKwl1MzIgZm9ybWF0LCBzcmNfdywgc3JjX2gsIGRl c3RfdywgZGVzdF9oLCB2YWwgPSAwOwo+ICsJaW50IG51bV9wbGFuZXMsIGk7Cj4gKwo+ICsJbXAg PSB0b19tYWxpZHBfcGxhbmUocGxhbmUpOwo+ICsKPiArCW1hcCA9ICZtcC0+aHdkZXYtPm1hcDsK PiArCWZvcm1hdCA9IHBsYW5lLT5zdGF0ZS0+ZmItPnBpeGVsX2Zvcm1hdDsKPiArCWZvcm1hdF9p ZCA9IG1hbGlkcF9od19nZXRfZm9ybWF0X2lkKG1hcCwgbXAtPmxheWVyLT5pZCwgZm9ybWF0KTsK PiArCW51bV9wbGFuZXMgPSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KTsKPiArCj4gKwkv KiBjb252ZXJ0IHNyYyB2YWx1ZXMgZnJvbSBRMTYgZml4ZWQgcG9pbnQgdG8gaW50ZWdlciAqLwo+ ICsJc3JjX3cgPSBwbGFuZS0+c3RhdGUtPnNyY193ID4+IDE2Owo+ICsJc3JjX2ggPSBwbGFuZS0+ c3RhdGUtPnNyY19oID4+IDE2Owo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBNQUxJ RFBfUk9UQVRFRF9NQVNLKSB7Cj4gKwkJZGVzdF93ID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7Cj4g KwkJZGVzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX3c7Cj4gKwl9IGVsc2Ugewo+ICsJCWRlc3Rf dyA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y193Owo+ICsJCWRlc3RfaCA9IHBsYW5lLT5zdGF0ZS0+Y3J0 Y19oOwo+ICsJfQo+ICsKPiArCW1hbGlkcF9od193cml0ZShtcC0+aHdkZXYsIGZvcm1hdF9pZCwg bXAtPmxheWVyLT5iYXNlKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BsYW5lczsgaSsr KSB7Cj4gKwkJLyogY2FsY3VsYXRlIHRoZSBvZmZzZXQgZm9yIHRoZSBsYXllcidzIHBsYW5lIHJl Z2lzdGVycyAqLwo+ICsJCXB0ciA9IG1wLT5sYXllci0+cHRyICsgKGkgPDwgNCk7Cj4gKwo+ICsJ CW9iaiA9IGRybV9mYl9jbWFfZ2V0X2dlbV9vYmoocGxhbmUtPnN0YXRlLT5mYiwgaSk7Cj4gKwkJ bWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgbG93ZXJfMzJfYml0cyhvYmotPnBhZGRyKSwgcHRy KTsKPiArCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCB1cHBlcl8zMl9iaXRzKG9iai0+cGFk ZHIpLCBwdHIgKyA0KTsKPiArCQltYWxpZHBfaHdfd3JpdGUobXAtPmh3ZGV2LCBwbGFuZS0+c3Rh dGUtPmZiLT5waXRjaGVzW2ldLAo+ICsJCQkJbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVS X1NUUklERSk7Cj4gKwl9Cj4gKwo+ICsJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2RldiwgTEFZRVJf SF9WQUwoc3JjX3cpIHwgTEFZRVJfVl9WQUwoc3JjX2gpLAo+ICsJCQltcC0+bGF5ZXItPmJhc2Ug KyBNQUxJRFBfTEFZRVJfU0laRSk7Cj4gKwo+ICsJbWFsaWRwX2h3X3dyaXRlKG1wLT5od2Rldiwg TEFZRVJfSF9WQUwoZGVzdF93KSB8IExBWUVSX1ZfVkFMKGRlc3RfaCksCj4gKwkJCW1wLT5sYXll ci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT01QX1NJWkUpOwo+ICsKPiArCW1hbGlkcF9od193cml0 ZShtcC0+aHdkZXYsIExBWUVSX0hfVkFMKHBsYW5lLT5zdGF0ZS0+Y3J0Y194KSB8Cj4gKwkJCUxB WUVSX1ZfVkFMKHBsYW5lLT5zdGF0ZS0+Y3J0Y195KSwKPiArCQkJbXAtPmxheWVyLT5iYXNlICsg TUFMSURQX0xBWUVSX09GRlNFVCk7Cj4gKwo+ICsJLyogZmlyc3QgY2xlYXIgdGhlIHJvdGF0aW9u IGJpdHMgaW4gdGhlIHJlZ2lzdGVyICovCj4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKG1wLT5od2Rl diwgTEFZRVJfUk9UX01BU0ssCj4gKwkJCSAgICBtcC0+bGF5ZXItPmJhc2UgKyBNQUxJRFBfTEFZ RVJfQ09OVFJPTCk7Cj4gKwo+ICsJLyogc2V0dXAgdGhlIHJvdGF0aW9uIGFuZCBheGlzIGZsaXAg Yml0cyAqLwo+ICsJaWYgKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0sp Cj4gKwkJdmFsID0gaWxvZzIocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAmIERSTV9ST1RBVEVfTUFT SykgPDwgTEFZRVJfUk9UX09GRlNFVDsKPiArCWlmIChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYg QklUKERSTV9SRUZMRUNUX1gpKQo+ICsJCXZhbCB8PSBMQVlFUl9WX0ZMSVA7Cj4gKwlpZiAocGxh bmUtPnN0YXRlLT5yb3RhdGlvbiAmIEJJVChEUk1fUkVGTEVDVF9ZKSkKPiArCQl2YWwgfD0gTEFZ RVJfSF9GTElQOwo+ICsKPiArCS8qIHNldCB0aGUgJ2VuYWJsZSBsYXllcicgYml0ICovCj4gKwl2 YWwgfD0gTEFZRVJfRU5BQkxFOwo+ICsKPiArCW1hbGlkcF9od19zZXRiaXRzKG1wLT5od2Rldiwg dmFsLAo+ICsJCQkgIG1wLT5sYXllci0+YmFzZSArIE1BTElEUF9MQVlFUl9DT05UUk9MKTsKPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX2Rpc2FibGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUsCj4gKwkJCQkgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUpCj4g K3sKPiArCXN0cnVjdCBtYWxpZHBfcGxhbmUgKm1wID0gdG9fbWFsaWRwX3BsYW5lKHBsYW5lKTsK PiArCj4gKwltYWxpZHBfaHdfY2xlYXJiaXRzKG1wLT5od2RldiwgTEFZRVJfRU5BQkxFLAo+ICsJ CQkgICAgbXAtPmxheWVyLT5iYXNlICsgTUFMSURQX0xBWUVSX0NPTlRST0wpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgbWFsaWRwX2RlX3Bs YW5lX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5hdG9taWNfY2hlY2sgPSBtYWxpZHBfZGVfcGxhbmVf Y2hlY2ssCj4gKwkuYXRvbWljX3VwZGF0ZSA9IG1hbGlkcF9kZV9wbGFuZV91cGRhdGUsCj4gKwku YXRvbWljX2Rpc2FibGUgPSBtYWxpZHBfZGVfcGxhbmVfZGlzYWJsZSwKPiArfTsKPiArCj4gK2lu dCBtYWxpZHBfZGVfcGxhbmVzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPiArewo+ICsJ c3RydWN0IG1hbGlkcF9kcm0gKm1hbGlkcCA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwljb25zdCBz dHJ1Y3QgbWFsaWRwX2h3X3JlZ21hcCAqbWFwID0gJm1hbGlkcC0+ZGV2LT5tYXA7Cj4gKwlzdHJ1 Y3QgbWFsaWRwX3BsYW5lICpwbGFuZSA9IE5VTEw7Cj4gKwllbnVtIGRybV9wbGFuZV90eXBlIHBs YW5lX3R5cGU7Cj4gKwl1bnNpZ25lZCBsb25nIGNydGNzID0gMSA8PCBkcm0tPm1vZGVfY29uZmln Lm51bV9jcnRjOwo+ICsJdTMyICpmb3JtYXRzOwo+ICsJaW50IHJldCwgaSwgaiwgbjsKPiArCj4g Kwlmb3JtYXRzID0ga2NhbGxvYyhtYXAtPm5faW5wdXRfZm9ybWF0cywgc2l6ZW9mKCpmb3JtYXRz KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWZvcm1hdHMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ ICsJCWdvdG8gY2xlYW51cDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbWFwLT5uX2xh eWVyczsgaSsrKSB7Cj4gKwkJdTggaWQgPSBtYXAtPmxheWVyc1tpXS5pZDsKPiArCj4gKwkJcGxh bmUgPSBremFsbG9jKHNpemVvZigqcGxhbmUpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIXBsYW5l KSB7Cj4gKwkJCXJldCA9IC1FTk9NRU07Cj4gKwkJCWdvdG8gY2xlYW51cDsKPiArCQl9Cj4gKwo+ ICsJCS8qIGJ1aWxkIHRoZSBsaXN0IG9mIERSTSBzdXBwb3J0ZWQgZm9ybWF0cyBiYXNlZCBvbiB0 aGUgbWFwICovCj4gKwkJZm9yIChuID0gMCwgaiA9IDA7ICBqIDwgbWFwLT5uX2lucHV0X2Zvcm1h dHM7IGorKykgewo+ICsJCQlpZiAoKG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5sYXllciAmIGlkKSA9 PSBpZCkKPiArCQkJCWZvcm1hdHNbbisrXSA9IG1hcC0+aW5wdXRfZm9ybWF0c1tqXS5mb3JtYXQ7 Cj4gKwkJfQo+ICsKPiArCQlwbGFuZV90eXBlID0gKGkgPT0gMCkgPyBEUk1fUExBTkVfVFlQRV9Q UklNQVJZIDoKPiArCQkJCQlEUk1fUExBTkVfVFlQRV9PVkVSTEFZOwo+ICsJCXJldCA9IGRybV91 bml2ZXJzYWxfcGxhbmVfaW5pdChkcm0sICZwbGFuZS0+YmFzZSwgY3J0Y3MsCj4gKwkJCQkJICAg ICAgICZtYWxpZHBfZGVfcGxhbmVfZnVuY3MsIGZvcm1hdHMsCj4gKwkJCQkJICAgICAgIG4sIHBs YW5lX3R5cGUsIE5VTEwpOwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlnb3RvIGNsZWFudXA7Cj4g Kwo+ICsJCWlmICghZHJtLT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkgewo+ICsJCQl1 bnNpZ25lZCBsb25nIGZsYWdzID0gQklUKERSTV9ST1RBVEVfMCkgfAo+ICsJCQkJCSAgICAgIEJJ VChEUk1fUk9UQVRFXzkwKSB8Cj4gKwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMTgwKSB8Cj4g KwkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfMjcwKSB8Cj4gKwkJCQkJICAgICAgQklUKERSTV9S RUZMRUNUX1gpIHwKPiArCQkJCQkgICAgICBCSVQoRFJNX1JFRkxFQ1RfWSk7Cj4gKwkJCWRybS0+ bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQo+ICsJCQkJZHJtX21vZGVfY3JlYXRlX3Jv dGF0aW9uX3Byb3BlcnR5KGRybSwgZmxhZ3MpOwo+ICsJCX0KPiArCQkvKiBTTUFSVCBsYXllciBj YW4ndCBiZSByb3RhdGVkICovCj4gKwkJaWYgKGRybS0+bW9kZV9jb25maWcucm90YXRpb25fcHJv cGVydHkgJiYgKGlkICE9IERFX1NNQVJUKSkKPiArCQkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVy dHkoJnBsYW5lLT5iYXNlLmJhc2UsCj4gKwkJCQkJCSAgIGRybS0+bW9kZV9jb25maWcucm90YXRp b25fcHJvcGVydHksCj4gKwkJCQkJCSAgIEJJVChEUk1fUk9UQVRFXzApKTsKPiArCj4gKwkJZHJt X3BsYW5lX2hlbHBlcl9hZGQoJnBsYW5lLT5iYXNlLAo+ICsJCQkJICAgICAmbWFsaWRwX2RlX3Bs YW5lX2hlbHBlcl9mdW5jcyk7Cj4gKwkJcGxhbmUtPmh3ZGV2ID0gbWFsaWRwLT5kZXY7Cj4gKwkJ cGxhbmUtPmxheWVyID0gJm1hcC0+bGF5ZXJzW2ldOwo+ICsJfQo+ICsKPiArCWtmcmVlKGZvcm1h dHMpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArY2xlYW51cDoKPiArCW1hbGlkcF9kZV9wbGFu ZXNfZGVzdHJveShkcm0pOwo+ICsJa2ZyZWUoZm9ybWF0cyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3RydWN0IGRybV9kZXZp Y2UgKmRybSkKPiArewo+ICsJc3RydWN0IGRybV9wbGFuZSAqcCwgKnB0Owo+ICsKPiArCWxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShwLCBwdCwgJmRybS0+bW9kZV9jb25maWcucGxhbmVfbGlzdCwg aGVhZCkgewo+ICsJCWRybV9wbGFuZV9jbGVhbnVwKHApOwo+ICsJCWtmcmVlKHApOwo+ICsJfQo+ ICt9Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3JlZ3MuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uNzNmZWNiMwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYXJtL21hbGlkcF9yZWdzLmgKPiBAQCAtMCwwICsxLDE3MiBAQAo+ICsvKgo+ICsgKiAo QykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAq IEF1dGhvcjogTGl2aXUgRHVkYXUgPExpdml1LkR1ZGF1QGFybS5jb20+Cj4gKyAqCj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9u IDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gKyAqIEZvdW5kYXRpb24sIGFu ZCBhbnkgdXNlIGJ5IHlvdSBvZiB0aGlzIHByb2dyYW0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMK PiArICogb2Ygc3VjaCBHTlUgbGljZW5jZS4KPiArICoKPiArICogQVJNIE1hbGkgRFA1MDAvRFA1 NTAvRFA2NTAgcmVnaXN0ZXJzIGRlZmluaXRpb24uCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX01B TElEUF9SRUdTX0hfXwo+ICsjZGVmaW5lIF9fTUFMSURQX1JFR1NfSF9fCj4gKwo+ICsvKgo+ICsg KiBhYmJyZXZpYXRpb25zIHVzZWQ6Cj4gKyAqICAgIC0gREMgLSBkaXNwbGF5IGNvcmUgKGdlbmVy YWwgc2V0dGluZ3MpCj4gKyAqICAgIC0gREUgLSBkaXNwbGF5IGVuZ2luZQo+ICsgKiAgICAtIFNF IC0gc2NhbGluZyBlbmdpbmUKPiArICovCj4gKwo+ICsvKiBpbnRlcnJ1cHQgYml0IG1hc2tzICov Cj4gKyNkZWZpbmUgTUFMSURQX0RFX0lSUV9VTkRFUlJVTgkJCSgxIDw8IDApCj4gKwo+ICsjZGVm aW5lIE1BTElEUDUwMF9ERV9JUlFfQVhJX0VSUgkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1 MDBfREVfSVJRX1ZTWU5DCQkJKDEgPDwgNSkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1BS T0dfTElORQkJKDEgPDwgNikKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX1NBVFVSQVRJT04J CSgxIDw8IDcpCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX0lSUV9DT05GX1ZBTElECQkoMSA8PCA4 KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9JUlFfQ09ORl9NT0RFCQkoMSA8PCAxMSkKPiArI2Rl ZmluZSBNQUxJRFA1MDBfREVfSVJRX0NPTkZfQUNUSVZFCQkoMSA8PCAxNykKPiArI2RlZmluZSBN QUxJRFA1MDBfREVfSVJRX1BNX0FDVElWRQkJKDEgPDwgMTgpCj4gKyNkZWZpbmUgTUFMSURQNTAw X0RFX0lSUV9URVNUTU9ERV9BQ1RJVkUJKDEgPDwgMTkpCj4gKyNkZWZpbmUgTUFMSURQNTAwX0RF X0lSUV9GT1JDRV9CTE5LX0FDVElWRQkoMSA8PCAyNCkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVf SVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfSVJRX0dMT0JB TAkJCSgxIDw8IDMxKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9NT0RFCQkoMSA8 PCAwKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9WQUxJRAkJKDEgPDwgNCkKPiAr I2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0lOSVRfQlVTWQkJKDEgPDwgNSkKPiArI2RlZmluZSBN QUxJRFA1MDBfU0VfSVJRX0FYSV9FUlJPUgkJKDEgPDwgOCkKPiArI2RlZmluZSBNQUxJRFA1MDBf U0VfSVJRX09WRVJSVU4JCSgxIDw8IDkpCj4gKyNkZWZpbmUgTUFMSURQNTAwX1NFX0lSUV9QUk9H X0xJTkUxCQkoMSA8PCAxMikKPiArI2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX1BST0dfTElORTIJ CSgxIDw8IDEzKQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfQ09ORl9BQ1RJVkUJCSgxIDw8 IDE3KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9JUlFfUE1fQUNUSVZFCQkoMSA8PCAxOCkKPiAr I2RlZmluZSBNQUxJRFA1MDBfU0VfSVJRX0FYSV9CVVNZCQkoMSA8PCAyOCkKPiArI2RlZmluZSBN QUxJRFA1MDBfU0VfSVJRX0dMT0JBTAkJCSgxIDw8IDMxKQo+ICsKPiArI2RlZmluZSBNQUxJRFA1 NTBfREVfSVJRX1NBVFVSQVRJT04JCSgxIDw8IDgpCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0lS UV9WU1lOQwkJCSgxIDw8IDEyKQo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9JUlFfUFJPR19MSU5F CQkoMSA8PCAxMykKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfSVJRX0FYSV9FUlIJCSgxIDw8IDE2 KQo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9JUlFfRU9XCQkJKDEgPDwgMCkKPiArI2RlZmluZSBN QUxJRFA1NTBfU0VfSVJRX0FYSV9FUlIJCSgxIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDU1MF9E Q19JUlFfQ09ORl9WQUxJRAkJKDEgPDwgMCkKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NP TkZfTU9ERQkJKDEgPDwgNCkKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0NPTkZfQUNUSVZF CQkoMSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfSVJRX0RFCQkJKDEgPDwgMjApCj4g KyNkZWZpbmUgTUFMSURQNTUwX0RDX0lSUV9TRQkJCSgxIDw8IDI0KQo+ICsKPiArI2RlZmluZSBN QUxJRFA2NTBfREVfSVJRX0RSSUZUCQkJKDEgPDwgNCkKPiArCj4gKy8qIGJpdCBtYXNrcyB0aGF0 IGFyZSBjb21tb24gYmV0d2VlbiBwcm9kdWN0cyAqLwo+ICsjZGVmaW5lICAgTUFMSURQX0NGR19W QUxJRAkJKDEgPDwgMCkKPiArI2RlZmluZSAgIE1BTElEUF9ESVNQX0ZVTkNfSUxBQ0VECSgxIDw8 IDgpCj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzIGZvciBJUlEgbWFuYWdlbWVudCAqLwo+ICsj ZGVmaW5lIE1BTElEUF9SRUdfU1RBVFVTCQkweDAwMDAwCj4gKyNkZWZpbmUgTUFMSURQX1JFR19T RVRJUlEJCTB4MDAwMDQKPiArI2RlZmluZSBNQUxJRFBfUkVHX01BU0tJUlEJCTB4MDAwMDgKPiAr I2RlZmluZSBNQUxJRFBfUkVHX0NMRUFSSVJRCQkweDAwMDBjCj4gKwo+ICsvKiByZWdpc3RlciBv ZmZzZXRzICovCj4gKyNkZWZpbmUgTUFMSURQX0RFX0NPUkVfSUQJCTB4MDAwMTgKPiArI2RlZmlu ZSBNQUxJRFBfREVfRElTUExBWV9GVU5DCQkweDAwMDIwCj4gKwo+ICsvKiB0aGVzZSBvZmZzZXRz IGFyZSByZWxhdGl2ZSB0byBNQUxJRFA1eDBfVElNSU5HU19CQVNFICovCj4gKyNkZWZpbmUgTUFM SURQX0RFX0hfVElNSU5HUwkJMHgwCj4gKyNkZWZpbmUgTUFMSURQX0RFX1ZfVElNSU5HUwkJMHg0 Cj4gKyNkZWZpbmUgTUFMSURQX0RFX1NZTkNfV0lEVEgJCTB4OAo+ICsjZGVmaW5lIE1BTElEUF9E RV9IVl9BQ1RJVkUJCTB4Ywo+ICsKPiArLyogbWFjcm9zIHRvIHNldCB2YWx1ZXMgaW50byByZWdp c3RlcnMgKi8KPiArI2RlZmluZSBNQUxJRFBfREVfSF9GUk9OVFBPUkNIKHgpCSgoKHgpICYgMHhm ZmYpIDw8IDApCj4gKyNkZWZpbmUgTUFMSURQX0RFX0hfQkFDS1BPUkNIKHgpCSgoKHgpICYgMHgz ZmYpIDw8IDE2KQo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9WX0ZST05UUE9SQ0goeCkJKCgoeCkg JiAweGZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9WX0ZST05UUE9SQ0goeCkJKCgo eCkgJiAweGZmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBfREVfVl9CQUNLUE9SQ0goeCkJKCgo eCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfREVfSF9TWU5DV0lEVEgoeCkJKCgo eCkgJiAweDNmZikgPDwgMCkKPiArI2RlZmluZSBNQUxJRFBfREVfVl9TWU5DV0lEVEgoeCkJKCgo eCkgJiAweGZmKSA8PCAxNikKPiArI2RlZmluZSBNQUxJRFBfREVfSF9BQ1RJVkUoeCkJCSgoKHgp ICYgMHgxZmZmKSA8PCAwKQo+ICsjZGVmaW5lIE1BTElEUF9ERV9WX0FDVElWRSh4KQkJKCgoeCkg JiAweDFmZmYpIDw8IDE2KQo+ICsKPiArLyogcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0cyBzcGVj aWZpYyB0byBEUDUwMCAqLwo+ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19CQVNFCQkweDAwMDAwCj4g KyNkZWZpbmUgTUFMSURQNTAwX0RDX0NPTlRST0wJCTB4MDAwMGMKPiArI2RlZmluZSAgIE1BTElE UDUwMF9EQ19DT05GSUdfUkVRCSgxIDw8IDE3KQo+ICsjZGVmaW5lICAgTUFMSURQNTAwX0hTWU5D UE9MCQkoMSA8PCAyMCkKPiArI2RlZmluZSAgIE1BTElEUDUwMF9WU1lOQ1BPTAkJKDEgPDwgMjEp Cj4gKyNkZWZpbmUgICBNQUxJRFA1MDBfRENfQ0xFQVJfTUFTSwkweDMwMGZmZgo+ICsjZGVmaW5l IE1BTElEUDUwMF9ERV9MSU5FX0NPVU5URVIJMHgwMDAxMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9E RV9BWElfQ09OVFJPTAkweDAwMDE0Cj4gKyNkZWZpbmUgTUFMSURQNTAwX0RFX1NFQ1VSRV9DVFJM CTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfQ0hST01BX0tFWQkJMHgwMDAyNAo+ICsj ZGVmaW5lIE1BTElEUDUwMF9USU1JTkdTX0JBU0UJCTB4MDAwMjgKPiArCj4gKyNkZWZpbmUgTUFM SURQNTAwX0NPTkZJR18zRAkJMHgwMDAzOAo+ICsjZGVmaW5lIE1BTElEUDUwMF9CR05EX0NPTE9S CQkweDAwMDNjCj4gKyNkZWZpbmUgTUFMSURQNTAwX09VVFBVVF9ERVBUSAkJMHgwMDA0NAo+ICsj ZGVmaW5lIE1BTElEUDUwMF9ZVVZfUkdCX0NPRUYJCTB4MDAwNDgKPiArI2RlZmluZSBNQUxJRFA1 MDBfQ09MT1JfQURKX0NPRUYJMHgwMDA3OAo+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxF X0FERFIJMHgwMDBhOAo+ICsjZGVmaW5lIE1BTElEUDUwMF9DT0VGX1RBQkxFX0RBVEEJMHgwMDBh Ywo+ICsjZGVmaW5lIE1BTElEUDUwMF9ERV9MVl9CQVNFCQkweDAwMTAwCj4gKyNkZWZpbmUgTUFM SURQNTAwX0RFX0xWX1BUUl9CQVNFCTB4MDAxMjQKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcx X0JBU0UJCTB4MDAyMDAKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcxX1BUUl9CQVNFCTB4MDAy MWMKPiArI2RlZmluZSBNQUxJRFA1MDBfREVfTEcyX0JBU0UJCTB4MDAzMDAKPiArI2RlZmluZSBN QUxJRFA1MDBfREVfTEcyX1BUUl9CQVNFCTB4MDAzMWMKPiArI2RlZmluZSBNQUxJRFA1MDBfU0Vf QkFTRQkJMHgwMGMwMAo+ICsjZGVmaW5lIE1BTElEUDUwMF9TRV9QVFJfQkFTRQkJMHgwMGUwYwo+ ICsjZGVmaW5lIE1BTElEUDUwMF9EQ19JUlFfQkFTRQkJMHgwMGYwMAo+ICsjZGVmaW5lIE1BTElE UDUwMF9DT05GSUdfVkFMSUQJCTB4MDBmMDAKPiArI2RlZmluZSBNQUxJRFA1MDBfQ09ORklHX0lE CQkweDAwZmQ0Cj4gKwo+ICsvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXRzIHNwZWNpZmljIHRv IERQNTUwL0RQNjUwICovCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0NPTlRST0wJCTB4MDAwMTAK PiArI2RlZmluZSBNQUxJRFA1NTBfREVfTElORV9DT1VOVEVSCTB4MDAwMTQKPiArI2RlZmluZSBN QUxJRFA1NTBfREVfQVhJX0NPTlRST0wJMHgwMDAxOAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9R T1MJCTB4MDAwMWMKPiArI2RlZmluZSBNQUxJRFA1NTBfVElNSU5HU19CQVNFCQkweDAwMDMwCj4g KyNkZWZpbmUgTUFMSURQNTUwX0hTWU5DUE9MCQkoMSA8PCAxMikKPiArI2RlZmluZSBNQUxJRFA1 NTBfVlNZTkNQT0wJCSgxIDw8IDI4KQo+ICsKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfRElTUF9T SURFQkFORAkweDAwMDQwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0JHTkRfQ09MT1IJCTB4MDAw NDQKPiArI2RlZmluZSBNQUxJRFA1NTBfREVfT1VUUFVUX0RFUFRICTB4MDAwNGMKPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfQ09MT1JfQ09FRgkJMHgwMDA1MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9E RV9DT0VGX1RBQkxFX0FERFIJMHgwMDA4MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9DT0VGX1RB QkxFX0RBVEEJMHgwMDA4NAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfQkFTRQkJMHgwMDEw MAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MVjFfUFRSX0JBU0UJMHgwMDEyNAo+ICsjZGVmaW5l IE1BTElEUDU1MF9ERV9MVjJfQkFTRQkJMHgwMDIwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9M VjJfUFRSX0JBU0UJMHgwMDIyNAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9MR19CQVNFCQkweDAw MzAwCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX0xHX1BUUl9CQVNFCTB4MDAzMWMKPiArI2RlZmlu ZSBNQUxJRFA1NTBfREVfTFNfQkFTRQkJMHgwMDQwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9ERV9M U19QVFJfQkFTRQkweDAwNDJjCj4gKyNkZWZpbmUgTUFMSURQNTUwX0RFX1BFUkZfQkFTRQkJMHgw MDUwMAo+ICsjZGVmaW5lIE1BTElEUDU1MF9TRV9CQVNFCQkweDA4MDAwCj4gKyNkZWZpbmUgTUFM SURQNTUwX0RDX0JBU0UJCTB4MGMwMDAKPiArI2RlZmluZSBNQUxJRFA1NTBfRENfQ09OVFJPTAkJ MHgwYzAxMAo+ICsjZGVmaW5lICAgTUFMSURQNTUwX0RDX0NPTkZJR19SRVEJKDEgPDwgMTYpCj4g KyNkZWZpbmUgTUFMSURQNTUwX0NPTkZJR19WQUxJRAkJMHgwYzAxNAo+ICsjZGVmaW5lIE1BTElE UDU1MF9DT05GSUdfSUQJCTB4MGZmZDQKPiArCj4gKy8qCj4gKyAqIFN0YXJ0aW5nIHdpdGggRFA1 NTAgdGhlIHJlZ2lzdGVyIG1hcCBibG9ja3MgaGFzIGJlZW4gc3RhbmRhcmRpc2VkIHRvIHRoZQo+ ICsgKiBmb2xsb3dpbmcgbGF5b3V0Ogo+ICsgKgo+ICsgKiAgIE9mZnNldCAgICAgICAgICAgIEJs b2NrIHJlZ2lzdGVycwo+ICsgKiAgMHgwMDAwMCAgICAgICAgICAgIERpc3BsYXkgRW5naW5lCj4g KyAqICAweDA4MDAwICAgICAgICAgICAgU2NhbGluZyBFbmdpbmUKPiArICogIDB4MGMwMDAgICAg ICAgICAgICBEaXNwbGF5IENvcmUKPiArICogIDB4MTAwMDAgICAgICAgICAgICBTZWN1cmUgY29u dHJvbAo+ICsgKgo+ICsgKiBUaGUgb2xkIERQNTAwIElQIG1peGVzIHNvbWUgREMgd2l0aCB0aGUg REUgcmVnaXN0ZXJzLCBoZW5jZSB0aGUgbmVlZAo+ICsgKiBmb3IgYSBtYXBwaW5nIHN0cnVjdHVy ZS4KPiArICovCj4gKwo+ICsjZW5kaWYgLyogX19NQUxJRFBfUkVHU19IX18gKi8KPiAtLSAKPiAy LjguMgo+IAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBv cmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=