From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gustavo Padovan Subject: Re: [PATCH v3 2/3] drm: zte: add initial vou drm driver Date: Thu, 20 Oct 2016 10:29:58 -0200 Message-ID: <20161020122958.GC10198@joana> References: <1476948625-8521-1-git-send-email-shawn.guo@linaro.org> <1476948625-8521-3-git-send-email-shawn.guo@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1476948625-8521-3-git-send-email-shawn.guo@linaro.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Shawn Guo Cc: Mark Rutland , devicetree@vger.kernel.org, Daniel Vetter , Baoyou Xie , Emil Velikov , dri-devel@lists.freedesktop.org, Rob Herring , Jun Nie , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org MjAxNi0xMC0yMCBTaGF3biBHdW8gPHNoYXduLmd1b0BsaW5hcm8ub3JnPjoKCj4gSXQgYWRkcyB0 aGUgaW5pdGlhbCBaVEUgVk9VIGRpc3BsYXkgY29udHJvbGxlciBEUk0gZHJpdmVyLiAgVGhlcmUg YXJlCj4gc3RpbGwgc29tZSBmZWF0dXJlcyB0byBiZSBhZGRlZCwgbGlrZSBvdmVybGF5IHBsYW5l LCBzY2FsaW5nLCBhbmQgbW9yZQo+IG91dHB1dCBkZXZpY2VzIHN1cHBvcnQuICBCdXQgaXQncyBh bHJlYWR5IHVzZWZ1bCB3aXRoIGR1YWwgQ1JUQ3MgYW5kCj4gSERNSSBtb25pdG9yIHdvcmtpbmcu Cj4gCj4gU2lnbmVkLW9mZi1ieTogU2hhd24gR3VvIDxzaGF3bi5ndW9AbGluYXJvLm9yZz4KPiAt LS0KPiAgZHJpdmVycy9ncHUvZHJtL0tjb25maWcgICAgICAgICAgfCAgIDIgKwo+ICBkcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS96dGUv S2NvbmZpZyAgICAgIHwgICA4ICsKPiAgZHJpdmVycy9ncHUvZHJtL3p0ZS9NYWtlZmlsZSAgICAg fCAgIDcgKwo+ICBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2RybV9kcnYuYyB8IDI2NyArKysrKysr KysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5oIHwgIDM2ICsrCj4gIGRy aXZlcnMvZ3B1L2RybS96dGUvenhfaGRtaS5jICAgIHwgNjc4ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMgICB8IDM3NSAr KysrKysrKysrKysrKysrKysKPiAgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oICAgfCAg MjYgKysKPiAgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF92b3UuYyAgICAgfCA3OTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZlcnMvZ3B1L2RybS96dGUvenhf dm91LmggICAgIHwgIDQ2ICsrKwo+ICAxMSBmaWxlcyBjaGFuZ2VkLCAyMjQ1IGluc2VydGlvbnMo KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvS2NvbmZpZwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS9NYWtlZmlsZQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMKPiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5oCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0venRlL3p4X2hkbWkuYwo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvZ3B1L2RybS96dGUvenhfdm91LmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1 L2RybS96dGUvenhfdm91LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL0tjb25m aWcgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IGluZGV4IDQ4MzA1OWEyMmIxYi4uYTkxZjhj ZWNiZTBmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKPiBAQCAtMjIzLDYgKzIyMyw4IEBAIHNvdXJjZSAiZHJpdmVy cy9ncHUvZHJtL2hpc2lsaWNvbi9LY29uZmlnIgo+ICAKPiAgc291cmNlICJkcml2ZXJzL2dwdS9k cm0vbWVkaWF0ZWsvS2NvbmZpZyIKPiAgCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL3p0ZS9L Y29uZmlnIgo+ICsKPiAgIyBLZWVwIGxlZ2FjeSBkcml2ZXJzIGxhc3QKPiAgCj4gIG1lbnVjb25m aWcgRFJNX0xFR0FDWQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9k cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBpbmRleCAyNWM3MjA0NTQwMTcuLmYzMjUxNzUwYzky YiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtODYsMyArODYsNCBAQCBvYmotJChDT05GSUdfRFJNX0ZT TF9EQ1UpICs9IGZzbC1kY3UvCj4gIG9iai0kKENPTkZJR19EUk1fRVROQVZJVikgKz0gZXRuYXZp di8KPiAgb2JqLSQoQ09ORklHX0RSTV9BUkNQR1UpKz0gYXJjLwo+ICBvYmoteQkJCSs9IGhpc2ls aWNvbi8KPiArb2JqLSQoQ09ORklHX0RSTV9aVEUpCSs9IHp0ZS8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3p0ZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS9LY29uZmlnCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjQwNjViMjg0MGYxYwo+ IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL0tjb25maWcKPiBAQCAt MCwwICsxLDggQEAKPiArY29uZmlnIERSTV9aVEUKPiArCXRyaXN0YXRlICJEUk0gU3VwcG9ydCBm b3IgWlRFIFNvQ3MiCj4gKwlkZXBlbmRzIG9uIERSTSAmJiBBUkNIX1pYCj4gKwlzZWxlY3QgRFJN X0tNU19DTUFfSEVMUEVSCj4gKwlzZWxlY3QgRFJNX0tNU19GQl9IRUxQRVIKPiArCXNlbGVjdCBE Uk1fS01TX0hFTFBFUgo+ICsJaGVscAo+ICsJICBDaG9vc2UgdGhpcyBvcHRpb24gdG8gZW5hYmxl IERSTSBvbiBaVEUgWlggU29Dcy4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjk5MTgwYmZkNTdjCj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS96dGUvTWFrZWZpbGUKPiBAQCAtMCwwICsxLDcgQEAKPiAr enhkcm0teSA6PSBcCj4gKwl6eF9kcm1fZHJ2Lm8gXAo+ICsJenhfaGRtaS5vIFwKPiArCXp4X3Bs YW5lLm8gXAo+ICsJenhfdm91Lm8KPiArCj4gK29iai0kKENPTkZJR19EUk1fWlRFKSArPSB6eGRy bS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5jIGIvZHJp dmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uMjQ3NmE5YjkyY2VhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS96dGUvenhfZHJtX2Rydi5jCj4gQEAgLTAsMCArMSwyNjcgQEAKPiArLyoK PiArICogQ29weXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KPiArICogQ29weXJpZ2h0IDIwMTYgWlRF IENvcnBvcmF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPiArI2luY2x1ZGUgPGxpbnV4L29m X3BsYXRmb3JtLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgo+ICsKPiArI2luY2x1 ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+ Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX29m Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsKPiArI2luY2x1ZGUgInp4X2RybV9kcnYu aCIKPiArI2luY2x1ZGUgInp4X3ZvdS5oIgo+ICsKPiArc3RydWN0IHp4X2RybV9wcml2YXRlIHsK PiArCXN0cnVjdCBkcm1fZmJkZXZfY21hICpmYmRldjsKPiArfTsKPiArCj4gK3N0YXRpYyB2b2lk IHp4X2RybV9mYl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4g K3sKPiArCXN0cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4g Kwo+ICsJZHJtX2ZiZGV2X2NtYV9ob3RwbHVnX2V2ZW50KHByaXYtPmZiZGV2KTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgenhfZHJtX21vZGVf Y29uZmlnX2Z1bmNzID0gewo+ICsJLmZiX2NyZWF0ZSA9IGRybV9mYl9jbWFfY3JlYXRlLAo+ICsJ Lm91dHB1dF9wb2xsX2NoYW5nZWQgPSB6eF9kcm1fZmJfb3V0cHV0X3BvbGxfY2hhbmdlZCwKPiAr CS5hdG9taWNfY2hlY2sgPSBkcm1fYXRvbWljX2hlbHBlcl9jaGVjaywKPiArCS5hdG9taWNfY29t bWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQg enhfZHJtX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtKQo+ICt7Cj4gKwlzdHJ1Y3Qg enhfZHJtX3ByaXZhdGUgKnByaXYgPSBkcm0tPmRldl9wcml2YXRlOwo+ICsKPiArCWRybV9mYmRl dl9jbWFfcmVzdG9yZV9tb2RlKHByaXYtPmZiZGV2KTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgenhfZHJtX2ZvcHMgPSB7Cj4gKwkub3duZXIgPSBUSElT X01PRFVMRSwKPiArCS5vcGVuID0gZHJtX29wZW4sCj4gKwkucmVsZWFzZSA9IGRybV9yZWxlYXNl LAo+ICsJLnVubG9ja2VkX2lvY3RsID0gZHJtX2lvY3RsLAo+ICsjaWZkZWYgQ09ORklHX0NPTVBB VAo+ICsJLmNvbXBhdF9pb2N0bCA9IGRybV9jb21wYXRfaW9jdGwsCj4gKyNlbmRpZgo+ICsJLnBv bGwgPSBkcm1fcG9sbCwKPiArCS5yZWFkID0gZHJtX3JlYWQsCj4gKwkubGxzZWVrID0gbm9vcF9s bHNlZWssCj4gKwkubW1hcCA9IGRybV9nZW1fY21hX21tYXAsCj4gK307Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGRybV9kcml2ZXIgenhfZHJtX2RyaXZlciA9IHsKPiArCS5kcml2ZXJfZmVhdHVyZXMg PSBEUklWRVJfR0VNIHwgRFJJVkVSX01PREVTRVQgfCBEUklWRVJfUFJJTUUgfAo+ICsJCQkgICBE UklWRVJfQVRPTUlDLAo+ICsJLmxhc3RjbG9zZSA9IHp4X2RybV9sYXN0Y2xvc2UsCj4gKwkuZ2V0 X3ZibGFua19jb3VudGVyID0gZHJtX3ZibGFua19ub19od19jb3VudGVyLAo+ICsJLmVuYWJsZV92 YmxhbmsgPSB6eF92b3VfZW5hYmxlX3ZibGFuaywKPiArCS5kaXNhYmxlX3ZibGFuayA9IHp4X3Zv dV9kaXNhYmxlX3ZibGFuaywKPiArCS5nZW1fZnJlZV9vYmplY3QgPSBkcm1fZ2VtX2NtYV9mcmVl X29iamVjdCwKPiArCS5nZW1fdm1fb3BzID0gJmRybV9nZW1fY21hX3ZtX29wcywKPiArCS5kdW1i X2NyZWF0ZSA9IGRybV9nZW1fY21hX2R1bWJfY3JlYXRlLAo+ICsJLmR1bWJfbWFwX29mZnNldCA9 IGRybV9nZW1fY21hX2R1bWJfbWFwX29mZnNldCwKPiArCS5kdW1iX2Rlc3Ryb3kgPSBkcm1fZ2Vt X2R1bWJfZGVzdHJveSwKPiArCS5wcmltZV9oYW5kbGVfdG9fZmQgPSBkcm1fZ2VtX3ByaW1lX2hh bmRsZV90b19mZCwKPiArCS5wcmltZV9mZF90b19oYW5kbGUgPSBkcm1fZ2VtX3ByaW1lX2ZkX3Rv X2hhbmRsZSwKPiArCS5nZW1fcHJpbWVfZXhwb3J0ID0gZHJtX2dlbV9wcmltZV9leHBvcnQsCj4g KwkuZ2VtX3ByaW1lX2ltcG9ydCA9IGRybV9nZW1fcHJpbWVfaW1wb3J0LAo+ICsJLmdlbV9wcmlt ZV9nZXRfc2dfdGFibGUgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsCj4gKwkuZ2Vt X3ByaW1lX2ltcG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJs ZSwKPiArCS5nZW1fcHJpbWVfdm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3ZtYXAsCj4gKwkuZ2Vt X3ByaW1lX3Z1bm1hcCA9IGRybV9nZW1fY21hX3ByaW1lX3Z1bm1hcCwKPiArCS5nZW1fcHJpbWVf bW1hcCA9IGRybV9nZW1fY21hX3ByaW1lX21tYXAsCj4gKwkuZm9wcyA9ICZ6eF9kcm1fZm9wcywK PiArCS5uYW1lID0gInp4LXZvdSIsCj4gKwkuZGVzYyA9ICJaVEUgVk9VIENvbnRyb2xsZXIgRFJN IiwKPiArCS5kYXRlID0gIjIwMTYwODExIiwKPiArCS5tYWpvciA9IDEsCj4gKwkubWlub3IgPSAw LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB6eF9kcm1fYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYp Cj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKwlzdHJ1Y3QgenhfZHJtX3ByaXZh dGUgKnByaXY7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBz aXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdikKPiArCQlyZXR1cm4gLUVO T01FTTsKPiArCj4gKwlkcm0gPSBkcm1fZGV2X2FsbG9jKCZ6eF9kcm1fZHJpdmVyLCBkZXYpOwo+ ICsJaWYgKCFkcm0pCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZHJtLT5kZXZfcHJpdmF0 ZSA9IHByaXY7Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcm0pOwo+ICsKPiArCWRybV9tb2Rl X2NvbmZpZ19pbml0KGRybSk7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1pbl93aWR0aCA9IDE2Owo+ ICsJZHJtLT5tb2RlX2NvbmZpZy5taW5faGVpZ2h0ID0gMTY7Cj4gKwlkcm0tPm1vZGVfY29uZmln Lm1heF93aWR0aCA9IDQwOTY7Cj4gKwlkcm0tPm1vZGVfY29uZmlnLm1heF9oZWlnaHQgPSA0MDk2 Owo+ICsJZHJtLT5tb2RlX2NvbmZpZy5mdW5jcyA9ICZ6eF9kcm1fbW9kZV9jb25maWdfZnVuY3M7 Cj4gKwo+ICsJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZHJtKTsKPiArCWlmIChyZXQp IHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBiaW5kIGFsbCBjb21wb25lbnRzOiAlZFxu IiwgcmV0KTsKPiArCQlnb3RvIG91dF91bnJlZ2lzdGVyOwo+ICsJfQo+ICsKPiArCXJldCA9IGRy bV92YmxhbmtfaW5pdChkcm0sIGRybS0+bW9kZV9jb25maWcubnVtX2NydGMpOwo+ICsJaWYgKHJl dCA8IDApIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHZibGFuazogJWRcbiIs IHJldCk7Cj4gKwkJZ290byBvdXRfdW5iaW5kOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBXZSB3 aWxsIG1hbmFnZSBpcnEgaGFuZGxlciBvbiBvdXIgb3duLiAgSW4gdGhpcyBjYXNlLCBpcnFfZW5h YmxlZAo+ICsJICogbmVlZCB0byBiZSB0cnVlIGZvciB1c2luZyB2YmxhbmsgY29yZSBzdXBwb3J0 Lgo+ICsJICovCj4gKwlkcm0tPmlycV9lbmFibGVkID0gdHJ1ZTsKPiArCj4gKwlkcm1fbW9kZV9j b25maWdfcmVzZXQoZHJtKTsKPiArCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkcm0pOwo+ICsK PiArCXByaXYtPmZiZGV2ID0gZHJtX2ZiZGV2X2NtYV9pbml0KGRybSwgMzIsIGRybS0+bW9kZV9j b25maWcubnVtX2NydGMsCj4gKwkJCQkJIGRybS0+bW9kZV9jb25maWcubnVtX2Nvbm5lY3Rvcik7 Cj4gKwlpZiAoSVNfRVJSKHByaXYtPmZiZGV2KSkgewo+ICsJCXJldCA9IFBUUl9FUlIocHJpdi0+ ZmJkZXYpOwo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGluaXQgY21hIGZiZGV2OiAlZFxu IiwgcmV0KTsKPiArCQlwcml2LT5mYmRldiA9IE5VTEw7Cj4gKwkJZ290byBvdXRfcG9sbF9maW5p Owo+ICsJfQo+ICsKPiArCXJldCA9IGRybV9kZXZfcmVnaXN0ZXIoZHJtLCAwKTsKPiArCWlmIChy ZXQpCj4gKwkJZ290byBvdXRfZmJkZXZfZmluaTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK291 dF9mYmRldl9maW5pOgo+ICsJaWYgKHByaXYtPmZiZGV2KSB7Cj4gKwkJZHJtX2ZiZGV2X2NtYV9m aW5pKHByaXYtPmZiZGV2KTsKPiArCQlwcml2LT5mYmRldiA9IE5VTEw7Cj4gKwl9Cj4gK291dF9w b2xsX2Zpbmk6Cj4gKwlkcm1fa21zX2hlbHBlcl9wb2xsX2ZpbmkoZHJtKTsKPiArCWRybV9tb2Rl X2NvbmZpZ19jbGVhbnVwKGRybSk7Cj4gKwlkcm1fdmJsYW5rX2NsZWFudXAoZHJtKTsKPiArb3V0 X3VuYmluZDoKPiArCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgZHJtKTsKPiArb3V0X3VucmVn aXN0ZXI6Cj4gKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKPiArCWRybS0+ZGV2X3ByaXZh dGUgPSBOVUxMOwo+ICsJZHJtX2Rldl91bnJlZihkcm0pOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgenhfZHJtX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sK PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0 cnVjdCB6eF9kcm1fcHJpdmF0ZSAqcHJpdiA9IGRybS0+ZGV2X3ByaXZhdGU7Cj4gKwo+ICsJZHJt X2Rldl91bnJlZ2lzdGVyKGRybSk7Cj4gKwlpZiAocHJpdi0+ZmJkZXYpIHsKPiArCQlkcm1fZmJk ZXZfY21hX2ZpbmkocHJpdi0+ZmJkZXYpOwo+ICsJCXByaXYtPmZiZGV2ID0gTlVMTDsKPiArCX0K PiArCWRybV9rbXNfaGVscGVyX3BvbGxfZmluaShkcm0pOwo+ICsJZHJtX21vZGVfY29uZmlnX2Ns ZWFudXAoZHJtKTsKPiArCWRybV92YmxhbmtfY2xlYW51cChkcm0pOwo+ICsJY29tcG9uZW50X3Vu YmluZF9hbGwoZGV2LCBkcm0pOwo+ICsJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Cj4gKwlk cm0tPmRldl9wcml2YXRlID0gTlVMTDsKPiArCWRybV9kZXZfdW5yZWYoZHJtKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyB6eF9kcm1fbWFzdGVy X29wcyA9IHsKPiArCS5iaW5kID0genhfZHJtX2JpbmQsCj4gKwkudW5iaW5kID0genhfZHJtX3Vu YmluZCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgY29tcGFyZV9vZihzdHJ1Y3QgZGV2aWNlICpk ZXYsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXJldHVybiBkZXYtPm9mX25vZGUgPT0gZGF0YTsKPiAr fQo+ICsKPiArc3RhdGljIGludCB6eF9kcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiArCXN0cnVj dCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IGRldmljZV9u b2RlICpjaGlsZDsKPiArCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiAr CWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gb2ZfcGxhdGZvcm1fcG9wdWxhdGUocGFyZW50LCBOVUxM LCBOVUxMLCBkZXYpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWZvcl9l YWNoX2F2YWlsYWJsZV9jaGlsZF9vZl9ub2RlKHBhcmVudCwgY2hpbGQpIHsKPiArCQljb21wb25l bnRfbWF0Y2hfYWRkKGRldiwgJm1hdGNoLCBjb21wYXJlX29mLCBjaGlsZCk7Cj4gKwkJb2Zfbm9k ZV9wdXQoY2hpbGQpOwo+ICsJfQo+ICsKPiArCXJldHVybiBjb21wb25lbnRfbWFzdGVyX2FkZF93 aXRoX21hdGNoKGRldiwgJnp4X2RybV9tYXN0ZXJfb3BzLCBtYXRjaCk7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgenhfZHJtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7 Cj4gKwljb21wb25lbnRfbWFzdGVyX2RlbCgmcGRldi0+ZGV2LCAmenhfZHJtX21hc3Rlcl9vcHMp Owo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIHp4X2RybV9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJ6dGUsengyOTY3 MTgtdm91IiwgfSwKPiArCXsgLyogZW5kICovIH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFC TEUob2YsIHp4X2RybV9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Ry aXZlciB6eF9kcm1fcGxhdGZvcm1fZHJpdmVyID0gewo+ICsJLnByb2JlID0genhfZHJtX3Byb2Jl LAo+ICsJLnJlbW92ZSA9IHp4X2RybV9yZW1vdmUsCj4gKwkuZHJpdmVyCT0gewo+ICsJCS5uYW1l ID0gInp4LWRybSIsCj4gKwkJLm9mX21hdGNoX3RhYmxlCT0genhfZHJtX29mX21hdGNoLAo+ICsJ fSwKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcml2ZXJzW10g PSB7Cj4gKwkmenhfY3J0Y19kcml2ZXIsCj4gKwkmenhfaGRtaV9kcml2ZXIsCj4gKwkmenhfZHJt X3BsYXRmb3JtX2RyaXZlciwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgenhfZHJtX2luaXQodm9p ZCkKPiArewo+ICsJcmV0dXJuIHBsYXRmb3JtX3JlZ2lzdGVyX2RyaXZlcnMoZHJpdmVycywgQVJS QVlfU0laRShkcml2ZXJzKSk7Cj4gK30KPiArbW9kdWxlX2luaXQoenhfZHJtX2luaXQpOwo+ICsK PiArc3RhdGljIHZvaWQgenhfZHJtX2V4aXQodm9pZCkKPiArewo+ICsJcGxhdGZvcm1fdW5yZWdp c3Rlcl9kcml2ZXJzKGRyaXZlcnMsIEFSUkFZX1NJWkUoZHJpdmVycykpOwo+ICt9Cj4gK21vZHVs ZV9leGl0KHp4X2RybV9leGl0KTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIlNoYXduIEd1byA8c2hh d24uZ3VvQGxpbmFyby5vcmc+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElPTigiWlRFIFpYIFZPVSBE Uk0gZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9kcm1fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4 X2RybV9kcnYuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5l NjVjZDE4YTZjYmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96 eF9kcm1fZHJ2LmgKPiBAQCAtMCwwICsxLDM2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2 IExpbmFybyBMdGQuCj4gKyAqIENvcHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1pY X0RSTV9EUlZfSF9fCj4gKyNkZWZpbmUgX19aWF9EUk1fRFJWX0hfXwo+ICsKPiArZXh0ZXJuIHN0 cnVjdCBwbGF0Zm9ybV9kcml2ZXIgenhfY3J0Y19kcml2ZXI7Cj4gK2V4dGVybiBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyIHp4X2hkbWlfZHJpdmVyOwo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgenhf cmVhZGwodm9pZCBfX2lvbWVtICpyZWcpCj4gK3sKPiArCXJldHVybiByZWFkbF9yZWxheGVkKHJl Zyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB6eF93cml0ZWwodm9pZCBfX2lvbWVt ICpyZWcsIHUzMiB2YWwpCj4gK3sKPiArCXdyaXRlbF9yZWxheGVkKHZhbCwgcmVnKTsKPiArfQo+ ICsKPiArc3RhdGljIGlubGluZSB2b2lkIHp4X3dyaXRlbF9tYXNrKHZvaWQgX19pb21lbSAqcmVn LCB1MzIgbWFzaywgdTMyIHZhbCkKPiArewo+ICsJdTMyIHRtcDsKPiArCj4gKwl0bXAgPSB6eF9y ZWFkbChyZWcpOwo+ICsJdG1wID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKPiArCXp4 X3dyaXRlbChyZWcsIHRtcCk7Cj4gK30KPiArCj4gKyNlbmRpZiAvKiBfX1pYX0RSTV9EUlZfSF9f ICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfaGRtaS5jIGIvZHJpdmVy cy9ncHUvZHJtL3p0ZS96eF9oZG1pLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uODFlMWMzNzE2ZWQ4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS96dGUvenhfaGRtaS5jCj4gQEAgLTAsMCArMSw2NzggQEAKPiArLyoKPiArICogQ29w eXJpZ2h0IDIwMTYgTGluYXJvIEx0ZC4KPiArICogQ29weXJpZ2h0IDIwMTYgWlRFIENvcnBvcmF0 aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L2hkbWkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4g Kwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fb2YuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVk ZSAienhfdm91LmgiCj4gKwo+ICsjZGVmaW5lIEZVTkNfU0VMCQkJMHgwMDBiCj4gKyNkZWZpbmUg RlVOQ19IRE1JX0VOCQkJQklUKDApCj4gKyNkZWZpbmUgQ0xLUFdECQkJCTB4MDAwZAo+ICsjZGVm aW5lIENMS1BXRF9QRElEQ0sJCQlCSVQoMikKPiArI2RlZmluZSBQV0RfU1JTVAkJCTB4MDAxMAo+ ICsjZGVmaW5lIFAyVF9DVFJMCQkJMHgwMDY2Cj4gKyNkZWZpbmUgUDJUX0RDX1BLVF9FTgkJCUJJ VCg3KQo+ICsjZGVmaW5lIEwxX0lOVFJfU1RBVAkJCTB4MDA3ZQo+ICsjZGVmaW5lIEwxX0lOVFJf U1RBVF9JTlRSMQkJQklUKDApCj4gKyNkZWZpbmUgSU5UUjFfU1RBVAkJCTB4MDA4Zgo+ICsjZGVm aW5lIElOVFIxX01BU0sJCQkweDAwOTUKPiArI2RlZmluZSBJTlRSMV9NT05JVE9SX0RFVEVDVAkJ KEJJVCg1KSB8IEJJVCg2KSkKPiArI2RlZmluZSBaWF9ERENfQUREUgkJCTB4MDBlZAo+ICsjZGVm aW5lIFpYX0REQ19TRUdNCQkJMHgwMGVlCj4gKyNkZWZpbmUgWlhfRERDX09GRlNFVAkJCTB4MDBl Zgo+ICsjZGVmaW5lIFpYX0REQ19ESU5fQ05UMQkJCTB4MDBmMAo+ICsjZGVmaW5lIFpYX0REQ19E SU5fQ05UMgkJCTB4MDBmMQo+ICsjZGVmaW5lIFpYX0REQ19DTUQJCQkweDAwZjMKPiArI2RlZmlu ZSBERENfQ01EX01BU0sJCQkweGYKPiArI2RlZmluZSBERENfQ01EX0NMRUFSX0ZJRk8JCTB4OQo+ ICsjZGVmaW5lIEREQ19DTURfU0VRVUVOVElBTF9SRUFECQkweDIKPiArI2RlZmluZSBaWF9ERENf REFUQQkJCTB4MDBmNAo+ICsjZGVmaW5lIFpYX0REQ19ET1VUX0NOVAkJCTB4MDBmNQo+ICsjZGVm aW5lIEREQ19ET1VUX0NOVF9NQVNLCQkweDFmCj4gKyNkZWZpbmUgVEVTVF9UWENUUkwJCQkweDAw ZjcKPiArI2RlZmluZSBURVNUX1RYQ1RSTF9IRE1JX01PREUJCUJJVCgxKQo+ICsjZGVmaW5lIEhE TUlDVEw0CQkJMHgwMjM1Cj4gKyNkZWZpbmUgVFBJX0hQRF9SU0VOCQkJMHgwNjNiCj4gKyNkZWZp bmUgVFBJX0hQRF9DT05ORUNUSU9OCQkoQklUKDEpIHwgQklUKDIpKQo+ICsjZGVmaW5lIFRQSV9J TkZPX0ZTRUwJCQkweDA2YmYKPiArI2RlZmluZSBGU0VMX0FWSQkJCTAKPiArI2RlZmluZSBGU0VM X0dCRAkJCTEKPiArI2RlZmluZSBGU0VMX0FVRElPCQkJMgo+ICsjZGVmaW5lIEZTRUxfU1BECQkJ Mwo+ICsjZGVmaW5lIEZTRUxfTVBFRwkJCTQKPiArI2RlZmluZSBGU0VMX1ZTSUYJCQk1Cj4gKyNk ZWZpbmUgVFBJX0lORk9fQjAJCQkweDA2YzAKPiArI2RlZmluZSBUUElfSU5GT19FTgkJCTB4MDZk Zgo+ICsjZGVmaW5lIFRQSV9JTkZPX1RSQU5TX0VOCQlCSVQoNykKPiArI2RlZmluZSBUUElfSU5G T19UUkFOU19SUFQJCUJJVCg2KQo+ICsjZGVmaW5lIFRQSV9ERENfTUFTVEVSX0VOCQkweDA2ZjgK PiArI2RlZmluZSBIV19ERENfTUFTVEVSCQkJQklUKDcpCj4gKwo+ICsjZGVmaW5lIFpYX0hETUlf SU5GT0ZSQU1FX1NJWkUJCTMxCj4gKwo+ICsjZGVmaW5lIEREQ19TRUdNRU5UX0FERFIJCTB4MzAK PiArCj4gK3N0cnVjdCB6eF9oZG1pX2kyYyB7Cj4gKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcDsK PiArCXN0cnVjdCBtdXRleCBsb2NrOwo+ICt9Owo+ICsKPiArc3RydWN0IHp4X2hkbWkgewo+ICsJ c3RydWN0IGRybV9jb25uZWN0b3IgY29ubmVjdG9yOwo+ICsJc3RydWN0IGRybV9lbmNvZGVyIGVu Y29kZXI7Cj4gKwlzdHJ1Y3QgenhfaGRtaV9pMmMgKmRkYzsKPiArCXN0cnVjdCBkZXZpY2UgKmRl djsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm07Cj4gKwl2b2lkIF9faW9tZW0gKm1taW87Cj4g KwlzdHJ1Y3QgY2xrICpjZWNfY2xrOwo+ICsJc3RydWN0IGNsayAqb3NjX2NsazsKPiArCXN0cnVj dCBjbGsgKnhjbGs7Cj4gKwlib29sIHNpbmtfaXNfaGRtaTsKPiArCWJvb2wgc2lua19oYXNfYXVk aW87Cj4gKwljb25zdCBzdHJ1Y3Qgdm91X2luZiAqaW5mOwo+ICt9Owo+ICsKPiArI2RlZmluZSB0 b196eF9oZG1pKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgenhfaGRtaSwgeCkKPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgdm91X2luZiB2b3VfaW5mX2hkbWkgPSB7Cj4gKwkuaWQgPSBWT1Vf SERNSSwKPiArCS5kYXRhX3NlbCA9IFZPVV9ZVVY0NDQsCj4gKwkuY2xvY2tzX2VuX2JpdHMgPSBC SVQoMjQpIHwgQklUKDE4KSB8IEJJVCg2KSwKPiArCS5jbG9ja3Nfc2VsX2JpdHMgPSBCSVQoMTMp IHwgQklUKDIpLAo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSB1OCBoZG1pX3JlYWRiKHN0cnVj dCB6eF9oZG1pICpoZG1pLCB1MTYgb2Zmc2V0KQo+ICt7Cj4gKwlyZXR1cm4gcmVhZGxfcmVsYXhl ZChoZG1pLT5tbWlvICsgb2Zmc2V0ICogNCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCBoZG1pX3dyaXRlYihzdHJ1Y3QgenhfaGRtaSAqaGRtaSwgdTE2IG9mZnNldCwgdTggdmFsKQo+ ICt7Cj4gKwl3cml0ZWxfcmVsYXhlZCh2YWwsIGhkbWktPm1taW8gKyBvZmZzZXQgKiA0KTsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGhkbWlfd3JpdGViX21hc2soc3RydWN0IHp4X2hk bWkgKmhkbWksIHUxNiBvZmZzZXQsCj4gKwkJCQkgICAgdTggbWFzaywgdTggdmFsKQo+ICt7Cj4g Kwl1OCB0bXA7Cj4gKwo+ICsJdG1wID0gaGRtaV9yZWFkYihoZG1pLCBvZmZzZXQpOwo+ICsJdG1w ID0gKHRtcCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsKPiArCWhkbWlfd3JpdGViKGhkbWksIG9m ZnNldCwgdG1wKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2luZm9mcmFtZV90cmFu cyhzdHJ1Y3QgenhfaGRtaSAqaGRtaSwKPiArCQkJCSAgIHVuaW9uIGhkbWlfaW5mb2ZyYW1lICpm cmFtZSwgdTggZnNlbCkKPiArewo+ICsJdTggYnVmZmVyW1pYX0hETUlfSU5GT0ZSQU1FX1NJWkVd Owo+ICsJaW50IG51bTsKPiArCWludCBpOwo+ICsKPiArCWhkbWlfd3JpdGViKGhkbWksIFRQSV9J TkZPX0ZTRUwsIGZzZWwpOwo+ICsKPiArCW51bSA9IGhkbWlfaW5mb2ZyYW1lX3BhY2soZnJhbWUs IGJ1ZmZlciwgWlhfSERNSV9JTkZPRlJBTUVfU0laRSk7Cj4gKwlpZiAobnVtIDwgMCkgewo+ICsJ CWRldl9lcnIoaGRtaS0+ZGV2LCAiZmFpbGVkIHRvIHBhY2sgaW5mb2ZyYW1lOiAlZFxuIiwgbnVt KTsKPiArCQlyZXR1cm4gbnVtOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW07IGkr KykKPiArCQloZG1pX3dyaXRlYihoZG1pLCBUUElfSU5GT19CMCArIGksIGJ1ZmZlcltpXSk7Cj4g Kwo+ICsJaGRtaV93cml0ZWJfbWFzayhoZG1pLCBUUElfSU5GT19FTiwgVFBJX0lORk9fVFJBTlNf UlBULAo+ICsJCQkgVFBJX0lORk9fVFJBTlNfUlBUKTsKPiArCWhkbWlfd3JpdGViX21hc2soaGRt aSwgVFBJX0lORk9fRU4sIFRQSV9JTkZPX1RSQU5TX0VOLAo+ICsJCQkgVFBJX0lORk9fVFJBTlNf RU4pOwo+ICsKPiArCXJldHVybiBudW07Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9j b25maWdfdmlkZW9fdnNpKHN0cnVjdCB6eF9oZG1pICpoZG1pLAo+ICsJCQkJICAgIHN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwl1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFt ZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtX2hkbWlfdmVuZG9yX2luZm9mcmFtZV9m cm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUudmVuZG9yLmhkbWksCj4gKwkJCQkJCQkgIG1vZGUpOwo+ ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoaGRtaS0+ZGV2LCAiZmFpbGVkIHRvIGdldCB2ZW5k b3IgaW5mb2ZyYW1lOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CXJldHVybiB6eF9oZG1pX2luZm9mcmFtZV90cmFucyhoZG1pLCAmZnJhbWUsIEZTRUxfVlNJRik7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9jb25maWdfdmlkZW9fYXZpKHN0cnVjdCB6 eF9oZG1pICpoZG1pLAo+ICsJCQkJICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ ICt7Cj4gKwl1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFtZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJ cmV0ID0gZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3BsYXlfbW9kZSgmZnJhbWUuYXZp LCBtb2RlKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGhkbWktPmRldiwgImZhaWxlZCB0 byBnZXQgYXZpIGluZm9mcmFtZTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwkvKiBXZSBhbHdheXMgdXNlIFlVVjQ0NCBmb3IgSERNSSBvdXRwdXQuICovCj4gKwlm cmFtZS5hdmkuY29sb3JzcGFjZSA9IEhETUlfQ09MT1JTUEFDRV9ZVVY0NDQ7Cj4gKwo+ICsJcmV0 dXJuIHp4X2hkbWlfaW5mb2ZyYW1lX3RyYW5zKGhkbWksICZmcmFtZSwgRlNFTF9BVkkpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9oZG1pX2VuY29kZXJfbW9kZV9zZXQoc3RydWN0IGRybV9l bmNvZGVyICplbmNvZGVyLAo+ICsJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKPiArCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkal9tb2RlKQo+ICt7Cj4g KwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IHRvX3p4X2hkbWkoZW5jb2Rlcik7Cj4gKwo+ICsJaWYg KGhkbWktPnNpbmtfaXNfaGRtaSkgewo+ICsJCXp4X2hkbWlfY29uZmlnX3ZpZGVvX2F2aShoZG1p LCBtb2RlKTsKPiArCQl6eF9oZG1pX2NvbmZpZ192aWRlb192c2koaGRtaSwgbW9kZSk7Cj4gKwl9 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHp4X2hkbWlfZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IHRvX3p4 X2hkbWkoZW5jb2Rlcik7Cj4gKwo+ICsJdm91X2luZl9lbmFibGUoaGRtaS0+aW5mLCBlbmNvZGVy LT5jcnRjKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfaGRtaV9lbmNvZGVyX2Rpc2FibGUo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRt aSA9IHRvX3p4X2hkbWkoZW5jb2Rlcik7Cj4gKwo+ICsJdm91X2luZl9kaXNhYmxlKGhkbWktPmlu ZiwgZW5jb2Rlci0+Y3J0Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Vu Y29kZXJfaGVscGVyX2Z1bmNzIHp4X2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwku ZW5hYmxlCT0genhfaGRtaV9lbmNvZGVyX2VuYWJsZSwKPiArCS5kaXNhYmxlID0genhfaGRtaV9l bmNvZGVyX2Rpc2FibGUsCj4gKwkubW9kZV9zZXQgPSB6eF9oZG1pX2VuY29kZXJfbW9kZV9zZXQs Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHp4X2hk bWlfZW5jb2Rlcl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51cCwK PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9jb25uZWN0b3JfZ2V0X21vZGVzKHN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCXN0cnVjdCB6eF9oZG1pICpoZG1p ID0gdG9fenhfaGRtaShjb25uZWN0b3IpOwo+ICsJc3RydWN0IGVkaWQgKmVkaWQ7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCAmaGRtaS0+ZGRjLT5h ZGFwKTsKPiArCWlmICghZWRpZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwloZG1pLT5zaW5rX2lz X2hkbWkgPSBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihlZGlkKTsKPiArCWhkbWktPnNpbmtfaGFz X2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwo+ICsJZHJtX21vZGVfY29u bmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7Cj4gKwlyZXQgPSBk cm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiArCWtmcmVlKGVkaWQpOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIGRybV9tb2RlX3N0YXR1cwo+ ICt6eF9oZG1pX2Nvbm5lY3Rvcl9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25u ZWN0b3IsCj4gKwkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gK3sKPiAr CXJldHVybiBNT0RFX09LOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9jb25uZWN0b3Jf aGVscGVyX2Z1bmNzIHp4X2hkbWlfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyA9IHsKPiArCS5nZXRf bW9kZXMgPSB6eF9oZG1pX2Nvbm5lY3Rvcl9nZXRfbW9kZXMsCj4gKwkubW9kZV92YWxpZCA9IHp4 X2hkbWlfY29ubmVjdG9yX21vZGVfdmFsaWQsCj4gK307Cj4gKwo+ICtzdGF0aWMgZW51bSBkcm1f Y29ubmVjdG9yX3N0YXR1cwo+ICt6eF9oZG1pX2Nvbm5lY3Rvcl9kZXRlY3Qoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKPiArewo+ICsJc3RydWN0IHp4X2hkbWkg KmhkbWkgPSB0b196eF9oZG1pKGNvbm5lY3Rvcik7Cj4gKwo+ICsJcmV0dXJuIChoZG1pX3JlYWRi KGhkbWksIFRQSV9IUERfUlNFTikgJiBUUElfSFBEX0NPTk5FQ1RJT04pID8KPiArCQljb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZCA6IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9oZG1pX2Nvbm5lY3Rvcl9kZXN0cm95KHN0cnVjdCBkcm1f Y29ubmVjdG9yICpjb25uZWN0b3IpCj4gK3sKPiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihj b25uZWN0b3IpOwoKZHJtX2Nvbm5lY3Rvcl91bnJlZ2lzdGVyKCkgaXMgbm90IG5lZWRlZCBhbnlt b3JlLiBEUk0gY29yZSB3aWxsIGNhbGwgaXQKZm9yIHlvdS4KCj4gKwlkcm1fY29ubmVjdG9yX2Ns ZWFudXAoY29ubmVjdG9yKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29u bmVjdG9yX2Z1bmNzIHp4X2hkbWlfY29ubmVjdG9yX2Z1bmNzID0gewo+ICsJLmRwbXMgPSBkcm1f YXRvbWljX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKPiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBl cl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21vZGVzLAo+ICsJLmRldGVjdCA9IHp4X2hkbWlfY29u bmVjdG9yX2RldGVjdCwKPiArCS5kZXN0cm95ID0genhfaGRtaV9jb25uZWN0b3JfZGVzdHJveSwK ClRoZW4gaGVyZSB5b3UgY2FuIHVzZSBkcm1fY29ubmVjdG9yX2NsZWFudXAoKSBkaXJlY3RseS4K Cj4gKwkucmVzZXQgPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3JfcmVzZXQsCj4gKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZGVzdHJveV9zdGF0ZSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9y ZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLCBzdHJ1Y3QgenhfaGRtaSAqaGRtaSkKPiAr ewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmhkbWktPmVuY29kZXI7Cj4gKwo+ ICsJZW5jb2Rlci0+cG9zc2libGVfY3J0Y3MgPSBWT1VfQ1JUQ19NQVNLOwo+ICsKPiArCWRybV9l bmNvZGVyX2luaXQoZHJtLCBlbmNvZGVyLCAmenhfaGRtaV9lbmNvZGVyX2Z1bmNzLAo+ICsJCQkg RFJNX01PREVfRU5DT0RFUl9UTURTLCBOVUxMKTsKPiArCWRybV9lbmNvZGVyX2hlbHBlcl9hZGQo ZW5jb2RlciwgJnp4X2hkbWlfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCWhkbWktPmNv bm5lY3Rvci5wb2xsZWQgPSBEUk1fQ09OTkVDVE9SX1BPTExfSFBEOwo+ICsKPiArCWRybV9jb25u ZWN0b3JfaW5pdChkcm0sICZoZG1pLT5jb25uZWN0b3IsICZ6eF9oZG1pX2Nvbm5lY3Rvcl9mdW5j cywKPiArCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBKTsKPiArCWRybV9jb25uZWN0b3Jf aGVscGVyX2FkZCgmaGRtaS0+Y29ubmVjdG9yLAo+ICsJCQkJICZ6eF9oZG1pX2Nvbm5lY3Rvcl9o ZWxwZXJfZnVuY3MpOwo+ICsKPiArCWRybV9tb2RlX2Nvbm5lY3Rvcl9hdHRhY2hfZW5jb2Rlcigm aGRtaS0+Y29ubmVjdG9yLCBlbmNvZGVyKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGlycXJldHVybl90IHp4X2hkbWlfaXJxX3RocmVhZChpbnQgaXJxLCB2b2lkICpkZXZf aWQpCj4gK3sKPiArCXN0cnVjdCB6eF9oZG1pICpoZG1pID0gZGV2X2lkOwo+ICsKPiArCWRybV9o ZWxwZXJfaHBkX2lycV9ldmVudChoZG1pLT5jb25uZWN0b3IuZGV2KTsKPiArCj4gKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpcnFyZXR1cm5fdCB6eF9oZG1pX2lycV9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKPiArewo+ICsJc3RydWN0IHp4X2hkbWkgKmhk bWkgPSBkZXZfaWQ7Cj4gKwl1OCBsc3RhdDsKPiArCj4gKwlsc3RhdCA9IGhkbWlfcmVhZGIoaGRt aSwgTDFfSU5UUl9TVEFUKTsKPiArCj4gKwkvKiBNb25pdG9yIGRldGVjdC9IUEQgaW50ZXJydXB0 ICovCj4gKwlpZiAobHN0YXQgJiBMMV9JTlRSX1NUQVRfSU5UUjEpIHsKPiArCQl1OCBzdGF0Owo+ ICsKPiArCQlzdGF0ID0gaGRtaV9yZWFkYihoZG1pLCBJTlRSMV9TVEFUKTsKPiArCQloZG1pX3dy aXRlYihoZG1pLCBJTlRSMV9TVEFULCBzdGF0KTsKPiArCj4gKwkJaWYgKHN0YXQgJiBJTlRSMV9N T05JVE9SX0RFVEVDVCkKPiArCQkJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKPiArCX0KPiArCj4g KwlyZXR1cm4gSVJRX05PTkU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgenhfaGRtaV9pMmNfcmVh ZChzdHJ1Y3QgenhfaGRtaSAqaGRtaSwgc3RydWN0IGkyY19tc2cgKm1zZykKPiArewo+ICsJaW50 IGxlbiA9IG1zZy0+bGVuOwo+ICsJdTggKmJ1ZiA9IG1zZy0+YnVmOwo+ICsJaW50IHJldHJ5ID0g MDsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCS8qIEJpdHMgWzk6OF0gb2YgYnl0ZXMgKi8KPiAr CWhkbWlfd3JpdGViKGhkbWksIFpYX0REQ19ESU5fQ05UMiwgKGxlbiA+PiA4KSAmIDB4ZmYpOwo+ ICsJLyogQml0cyBbNzowXSBvZiBieXRlcyAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwgWlhfRERD X0RJTl9DTlQxLCBsZW4gJiAweGZmKTsKPiArCj4gKwkvKiBDbGVhciBGSUZPICovCj4gKwloZG1p X3dyaXRlYl9tYXNrKGhkbWksIFpYX0REQ19DTUQsIEREQ19DTURfTUFTSywgRERDX0NNRF9DTEVB Ul9GSUZPKTsKPiArCj4gKwkvKiBLaWNrIG9mZiB0aGUgcmVhZCAqLwo+ICsJaGRtaV93cml0ZWJf bWFzayhoZG1pLCBaWF9ERENfQ01ELCBERENfQ01EX01BU0ssCj4gKwkJCSBERENfQ01EX1NFUVVF TlRJQUxfUkVBRCk7Cj4gKwo+ICsJd2hpbGUgKGxlbiA+IDApIHsKPiArCQlpbnQgY250LCBpOwo+ ICsKPiArCQkvKiBGSUZPIG5lZWRzIHNvbWUgdGltZSB0byBnZXQgcmVhZHkgKi8KPiArCQl1c2xl ZXBfcmFuZ2UoNTAwLCAxMDAwKTsKPiArCj4gKwkJY250ID0gaGRtaV9yZWFkYihoZG1pLCBaWF9E RENfRE9VVF9DTlQpICYgRERDX0RPVVRfQ05UX01BU0s7Cj4gKwkJaWYgKGNudCA9PSAwKSB7Cj4g KwkJCWlmICgrK3JldHJ5ID4gNSkgewo+ICsJCQkJZGV2X2VycihoZG1pLT5kZXYsICJEREMgRklG TyByZWFkIHRpbWVkIG91dCEiKTsKPiArCQkJCXJldCA9IC1FVElNRURPVVQ7Cj4gKwkJCQlicmVh azsKPiArCQkJfQo+ICsJCQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCWZvciAoaSA9IDA7IGkg PCBjbnQ7IGkrKykKPiArCQkJKmJ1ZisrID0gaGRtaV9yZWFkYihoZG1pLCBaWF9ERENfREFUQSk7 Cj4gKwkJbGVuIC09IGNudDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IHp4X2hkbWlfaTJjX3dyaXRlKHN0cnVjdCB6eF9oZG1pICpoZG1pLCBzdHJ1Y3Qg aTJjX21zZyAqbXNnKQo+ICt7Cj4gKwkvKgo+ICsJICogVGhlIEREQyBJMkMgYWRhcHRlciBpcyBv bmx5IGZvciByZWFkaW5nIEVESUQgZGF0YSwgc28gd2UgYXNzdW1lCj4gKwkgKiB0aGF0IHRoZSB3 cml0ZSB0byB0aGlzIGFkYXB0ZXIgbXVzdCBiZSB0aGUgRURJRCBkYXRhIG9mZnNldC4KPiArCSAq Lwo+ICsJaWYgKChtc2ctPmxlbiAhPSAxKSB8fAo+ICsJICAgICgobXNnLT5hZGRyICE9IEREQ19B RERSKSAmJiAobXNnLT5hZGRyICE9IEREQ19TRUdNRU5UX0FERFIpKSkKPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiArCj4gKwlpZiAobXNnLT5hZGRyID09IEREQ19TRUdNRU5UX0FERFIpCj4gKwkJaGRt aV93cml0ZWIoaGRtaSwgWlhfRERDX1NFR00sIG1zZy0+YWRkciA8PCAxKTsKPiArCWVsc2UgaWYg KG1zZy0+YWRkciA9PSBERENfQUREUikKPiArCQloZG1pX3dyaXRlYihoZG1pLCBaWF9ERENfQURE UiwgbXNnLT5hZGRyIDw8IDEpOwo+ICsKPiArCWhkbWlfd3JpdGViKGhkbWksIFpYX0REQ19PRkZT RVQsIG1zZy0+YnVmWzBdKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCB6eF9oZG1pX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19t c2cgKm1zZ3MsCj4gKwkJCSAgICBpbnQgbnVtKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRt aSA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7Cj4gKwlzdHJ1Y3QgenhfaGRtaV9pMmMgKmRkYyA9 IGhkbWktPmRkYzsKPiArCWludCBpLCByZXQgPSAwOwo+ICsKPiArCW11dGV4X2xvY2soJmRkYy0+ bG9jayk7Cj4gKwo+ICsJLyogRW5hYmxlIEREQyBtYXN0ZXIgYWNjZXNzICovCj4gKwloZG1pX3dy aXRlYl9tYXNrKGhkbWksIFRQSV9ERENfTUFTVEVSX0VOLCBIV19ERENfTUFTVEVSLCBIV19ERENf TUFTVEVSKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKPiArCQlkZXZfZGJn KGhkbWktPmRldiwgInhmZXI6IG51bTogJWQvJWQsIGxlbjogJWQsIGZsYWdzOiAlI3hcbiIsCj4g KwkJCWkgKyAxLCBudW0sIG1zZ3NbaV0ubGVuLCBtc2dzW2ldLmZsYWdzKTsKPiArCj4gKwkJaWYg KG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKPiArCQkJcmV0ID0genhfaGRtaV9pMmNfcmVhZCho ZG1pLCAmbXNnc1tpXSk7Cj4gKwkJZWxzZQo+ICsJCQlyZXQgPSB6eF9oZG1pX2kyY193cml0ZSho ZG1pLCAmbXNnc1tpXSk7Cj4gKwo+ICsJCWlmIChyZXQgPCAwKQo+ICsJCQlicmVhazsKPiArCX0K PiArCj4gKwlpZiAoIXJldCkKPiArCQlyZXQgPSBudW07Cj4gKwo+ICsJLyogRGlzYWJsZSBEREMg bWFzdGVyIGFjY2VzcyAqLwo+ICsJaGRtaV93cml0ZWJfbWFzayhoZG1pLCBUUElfRERDX01BU1RF Ul9FTiwgSFdfRERDX01BU1RFUiwgMCk7Cj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZGMtPmxvY2sp Owo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB1MzIgenhfaGRtaV9pMmNf ZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCj4gK3sKPiArCXJldHVybiBJMkNfRlVO Q19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGkyY19hbGdvcml0aG0genhfaGRtaV9hbGdvcml0aG0gPSB7Cj4gKwkubWFzdGVyX3hmZXIJ PSB6eF9oZG1pX2kyY194ZmVyLAo+ICsJLmZ1bmN0aW9uYWxpdHkJPSB6eF9oZG1pX2kyY19mdW5j LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCB6eF9oZG1pX2RkY19yZWdpc3RlcihzdHJ1Y3Qgenhf aGRtaSAqaGRtaSkKPiArewo+ICsJc3RydWN0IGkyY19hZGFwdGVyICphZGFwOwo+ICsJc3RydWN0 IHp4X2hkbWlfaTJjICpkZGM7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRkYyA9IGRldm1fa3phbGxv YyhoZG1pLT5kZXYsIHNpemVvZigqZGRjKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWRkYykKPiAr CQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwloZG1pLT5kZGMgPSBkZGM7Cj4gKwltdXRleF9pbml0 KCZkZGMtPmxvY2spOwo+ICsKPiArCWFkYXAgPSAmZGRjLT5hZGFwOwo+ICsJYWRhcC0+b3duZXIg PSBUSElTX01PRFVMRTsKPiArCWFkYXAtPmNsYXNzID0gSTJDX0NMQVNTX0REQzsKPiArCWFkYXAt PmRldi5wYXJlbnQgPSBoZG1pLT5kZXY7Cj4gKwlhZGFwLT5hbGdvID0gJnp4X2hkbWlfYWxnb3Jp dGhtOwo+ICsJc25wcmludGYoYWRhcC0+bmFtZSwgc2l6ZW9mKGFkYXAtPm5hbWUpLCAienggaGRt aSBpMmMiKTsKPiArCj4gKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7Cj4gKwlpZiAocmV0 KSB7Cj4gKwkJZGV2X2VycihoZG1pLT5kZXYsICJmYWlsZWQgdG8gYWRkIEkyQyBhZGFwdGVyOiAl ZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWkyY19zZXRfYWRhcGRh dGEoYWRhcCwgaGRtaSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHp4X2hkbWlfcGh5X3N0YXJ0KHN0cnVjdCB6eF9oZG1pICpoZG1pKQo+ICt7Cj4gKwkvKiBDb3B5 IGZyb20gWlRFIEJTUCBjb2RlICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDIyMiwgMHgwKTsK PiArCWhkbWlfd3JpdGViKGhkbWksIDB4MjI0LCAweDQpOwo+ICsJaGRtaV93cml0ZWIoaGRtaSwg MHg5MDksIDB4MCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMCwgMHg5MCk7Cj4gKwloZG1p X3dyaXRlYihoZG1pLCAweDdiMSwgMHgwMCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMiwg MHhhNyk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiOCwgMHhhYSk7Cj4gKwloZG1pX3dyaXRl YihoZG1pLCAweDdiMiwgMHhhNyk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiMywgMHgwZik7 Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiNCwgMHgwZik7Cj4gKwloZG1pX3dyaXRlYihoZG1p LCAweDdiNSwgMHg1NSk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiNywgMHgwMyk7Cj4gKwlo ZG1pX3dyaXRlYihoZG1pLCAweDdiOSwgMHgxMik7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdi YSwgMHgzMik7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiYywgMHg2OCk7Cj4gKwloZG1pX3dy aXRlYihoZG1pLCAweDdiZSwgMHg0MCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdiZiwgMHg4 NCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdjMSwgMHgwZik7Cj4gKwloZG1pX3dyaXRlYiho ZG1pLCAweDdjOCwgMHgwMik7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdjOSwgMHgwMyk7Cj4g KwloZG1pX3dyaXRlYihoZG1pLCAweDdjYSwgMHg0MCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAw eDdkYywgMHgzMSk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdlMiwgMHgwNCk7Cj4gKwloZG1p X3dyaXRlYihoZG1pLCAweDdlMCwgMHgwNik7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdjYiwg MHg2OCk7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdmOSwgMHgwMik7Cj4gKwloZG1pX3dyaXRl YihoZG1pLCAweDdiNiwgMHgwMik7Cj4gKwloZG1pX3dyaXRlYihoZG1pLCAweDdmMywgMHgwKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfaGRtaV9od19pbml0KHN0cnVjdCB6eF9oZG1pICpo ZG1pKQo+ICt7Cj4gKwkvKiBTb2Z0d2FyZSByZXNldCAqLwo+ICsJaGRtaV93cml0ZWIoaGRtaSwg UFdEX1NSU1QsIDEpOwo+ICsKPiArCS8qIEVuYWJsZSBwY2xrICovCj4gKwloZG1pX3dyaXRlYl9t YXNrKGhkbWksIENMS1BXRCwgQ0xLUFdEX1BESURDSywgQ0xLUFdEX1BESURDSyk7Cj4gKwo+ICsJ LyogRW5hYmxlIEhETUkgZm9yIFRYICovCj4gKwloZG1pX3dyaXRlYl9tYXNrKGhkbWksIEZVTkNf U0VMLCBGVU5DX0hETUlfRU4sIEZVTkNfSERNSV9FTik7Cj4gKwo+ICsJLyogRW5hYmxlIGRlZXAg Y29sb3IgcGFja2V0ICovCj4gKwloZG1pX3dyaXRlYl9tYXNrKGhkbWksIFAyVF9DVFJMLCBQMlRf RENfUEtUX0VOLCBQMlRfRENfUEtUX0VOKTsKPiArCj4gKwkvKiBFbmFibGUgSERNSS9NSEwgbW9k ZSBmb3Igb3V0cHV0ICovCj4gKwloZG1pX3dyaXRlYl9tYXNrKGhkbWksIFRFU1RfVFhDVFJMLCBU RVNUX1RYQ1RSTF9IRE1JX01PREUsCj4gKwkJCSBURVNUX1RYQ1RSTF9IRE1JX01PREUpOwo+ICsK PiArCS8qIENvbmZpZ3VyZSByZWdfcWNfc2VsICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCBIRE1J Q1RMNCwgMHgzKTsKPiArCj4gKwkvKiBFbmFibGUgaW50ZXJydXB0ICovCj4gKwloZG1pX3dyaXRl Yl9tYXNrKGhkbWksIElOVFIxX01BU0ssIElOVFIxX01PTklUT1JfREVURUNULAo+ICsJCQkgSU5U UjFfTU9OSVRPUl9ERVRFQ1QpOwo+ICsKPiArCS8qIENsZWFyIHJlc2V0IGZvciBub3JtYWwgb3Bl cmF0aW9uICovCj4gKwloZG1pX3dyaXRlYihoZG1pLCBQV0RfU1JTVCwgMCk7Cj4gKwo+ICsJLyog U3RhcnQgdXAgcGh5ICovCj4gKwl6eF9oZG1pX3BoeV9zdGFydChoZG1pKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCB6eF9oZG1pX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNl ICptYXN0ZXIsIHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0g PSBkYXRhOwo+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRt aTsKPiArCWludCBpcnE7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWhkbWkgPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmhkbWkpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghaGRtaSkKPiArCQlyZXR1 cm4gLUVOT01FTTsKPiArCj4gKwloZG1pLT5kZXYgPSBkZXY7Cj4gKwloZG1pLT5kcm0gPSBkcm07 Cj4gKwloZG1pLT5pbmYgPSAmdm91X2luZl9oZG1pOwo+ICsKPiArCWRldl9zZXRfZHJ2ZGF0YShk ZXYsIGhkbWkpOwo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JF U09VUkNFX01FTSwgMCk7Cj4gKwloZG1pLT5tbWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRl diwgcmVzKTsKPiArCWlmIChJU19FUlIoaGRtaS0+bW1pbykpIHsKPiArCQlyZXQgPSBQVFJfRVJS KGhkbWktPm1taW8pOwo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlbWFwIGhkbWkgcmVn aW9uOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkKPiArCQlyZXR1cm4gaXJx Owo+ICsKPiArCWhkbWktPmNlY19jbGsgPSBkZXZtX2Nsa19nZXQoaGRtaS0+ZGV2LCAib3NjX2Nl YyIpOwo+ICsJaWYgKElTX0VSUihoZG1pLT5jZWNfY2xrKSkgewo+ICsJCXJldCA9IFBUUl9FUlIo aGRtaS0+Y2VjX2Nsayk7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGNlY19jbGs6 ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJaGRtaS0+b3NjX2Ns ayA9IGRldm1fY2xrX2dldChoZG1pLT5kZXYsICJvc2NfY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGhk bWktPm9zY19jbGspKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihoZG1pLT5vc2NfY2xrKTsKPiArCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgb3NjX2NsazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0 dXJuIHJldDsKPiArCX0KPiArCj4gKwloZG1pLT54Y2xrID0gZGV2bV9jbGtfZ2V0KGhkbWktPmRl diwgInhjbGsiKTsKPiArCWlmIChJU19FUlIoaGRtaS0+eGNsaykpIHsKPiArCQlyZXQgPSBQVFJf RVJSKGhkbWktPnhjbGspOwo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCB4Y2xrOiAl ZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXp4X2hkbWlfaHdfaW5p dChoZG1pKTsKPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2VjX2Nsayk7 Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGNlY19j bGs6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGhkbWktPm9zY19jbGspOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9l cnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBvc2NfY2xrOiAlZFxuIiwgcmV0KTsKPiArCQlnb3Rv IGRpc2FibGVfY2VjX2NsazsKPiArCX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo aGRtaS0+eGNsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8g ZW5hYmxlIHhjbGs6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gZGlzYWJsZV9vc2NfY2xrOwo+ICsJ fQo+ICsKPiArCj4gKwlyZXQgPSB6eF9oZG1pX2RkY19yZWdpc3RlcihoZG1pKTsKPiArCWlmIChy ZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZGM6ICVkXG4iLCBy ZXQpOwo+ICsJCWdvdG8gZGlzYWJsZV94Y2xrOwo+ICsJfQo+ICsKPiArCXJldCA9IHp4X2hkbWlf cmVnaXN0ZXIoZHJtLCBoZG1pKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byByZWdpc3RlciBoZG1pOiAlZFxuIiwgcmV0KTsKPiArCQlnb3RvIGRpc2FibGVfeGNs azsKPiArCX0KPiArCj4gKwlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJx LCB6eF9oZG1pX2lycV9oYW5kbGVyLAo+ICsJCQkJCXp4X2hkbWlfaXJxX3RocmVhZCwgSVJRRl9T SEFSRUQsCj4gKwkJCQkJZGV2X25hbWUoZGV2KSwgaGRtaSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCB0aHJlYWRlZCBpcnE6ICVkXG4iLCByZXQp Owo+ICsJCWdvdG8gZGlzYWJsZV94Y2xrOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICsKPiAr ZGlzYWJsZV94Y2xrOgo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWktPnhjbGspOwo+ICtk aXNhYmxlX29zY19jbGs6Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+b3NjX2Nsayk7 Cj4gK2Rpc2FibGVfY2VjX2NsazoKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jZWNf Y2xrKTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHp4X2hkbWlfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+ICsJCQkgICB2 b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT54Y2xrKTsKPiArCWNs a19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5vc2NfY2xrKTsKPiArCWNsa19kaXNhYmxlX3VucHJl cGFyZShoZG1pLT5jZWNfY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21w b25lbnRfb3BzIHp4X2hkbWlfY29tcG9uZW50X29wcyA9IHsKPiArCS5iaW5kID0genhfaGRtaV9i aW5kLAo+ICsJLnVuYmluZCA9IHp4X2hkbWlfdW5iaW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCB6eF9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXJl dHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZ6eF9oZG1pX2NvbXBvbmVudF9vcHMpOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHp4X2hkbWlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gK3sKPiArCWNvbXBvbmVudF9kZWwoJnBkZXYtPmRldiwgJnp4X2hkbWlfY29t cG9uZW50X29wcyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBvZl9kZXZpY2VfaWQgenhfaGRtaV9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9 ICJ6dGUsengyOTY3MTgtaGRtaSIsIH0sCj4gKwl7IC8qIGVuZCAqLyB9LAo+ICt9Owo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCB6eF9oZG1pX29mX21hdGNoKTsKPiArCj4gK3N0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgenhfaGRtaV9kcml2ZXIgPSB7Cj4gKwkucHJvYmUgPSB6eF9oZG1pX3Byb2Jl LAo+ICsJLnJlbW92ZSA9IHp4X2hkbWlfcmVtb3ZlLAo+ICsJLmRyaXZlcgk9IHsKPiArCQkubmFt ZSA9ICJ6eC1oZG1pIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUJPSB6eF9oZG1pX29mX21hdGNoLAo+ ICsJfSwKPiArfTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5j IGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZkYWIxNzE1YmVlNQo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmMKPiBAQCAtMCwwICsxLDM3NSBAQAo+ICsv Kgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBMaW5hcm8gTHRkLgo+ICsgKiBDb3B5cmlnaHQgMjAxNiBa VEUgQ29ycG9yYXRpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4g KyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9oZWxwZXIuaD4K PiArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fbW9kZXNldF9oZWxwZXJfdnRhYmxlcy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9o ZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKwo+ICsjaW5jbHVkZSAienhfZHJt X2Rydi5oIgo+ICsjaW5jbHVkZSAienhfcGxhbmUuaCIKPiArI2luY2x1ZGUgInp4X3ZvdS5oIgo+ ICsKPiArLyogR0wgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgR0xfQ1RSTDAJCQkweDAwCj4gKyNk ZWZpbmUgR0xfVVBEQVRFCQkJQklUKDUpCj4gKyNkZWZpbmUgR0xfQ1RSTDEJCQkweDA0Cj4gKyNk ZWZpbmUgR0xfREFUQV9GTVRfU0hJRlQJCTAKPiArI2RlZmluZSBHTF9EQVRBX0ZNVF9NQVNLCQko MHhmIDw8IEdMX0RBVEFfRk1UX1NISUZUKQo+ICsjZGVmaW5lIEdMX0ZNVF9BUkdCODg4OAkJCTAK PiArI2RlZmluZSBHTF9GTVRfUkdCODg4CQkJMQo+ICsjZGVmaW5lIEdMX0ZNVF9SR0I1NjUJCQky Cj4gKyNkZWZpbmUgR0xfRk1UX0FSR0IxNTU1CQkJMwo+ICsjZGVmaW5lIEdMX0ZNVF9BUkdCNDQ0 NAkJCTQKPiArI2RlZmluZSBHTF9DVFJMMgkJCTB4MDgKPiArI2RlZmluZSBHTF9HTE9CQUxfQUxQ SEFfU0hJRlQJCTgKPiArI2RlZmluZSBHTF9HTE9CQUxfQUxQSEFfTUFTSwkJKDB4ZmYgPDwgR0xf R0xPQkFMX0FMUEhBX1NISUZUKQo+ICsjZGVmaW5lIEdMX0NUUkwzCQkJMHgwYwo+ICsjZGVmaW5l IEdMX1NDQUxFUl9CWVBBU1NfTU9ERQkJQklUKDApCj4gKyNkZWZpbmUgR0xfU1RSSURFCQkJMHgx OAo+ICsjZGVmaW5lIEdMX0FERFIJCQkJMHgxYwo+ICsjZGVmaW5lIEdMX1NSQ19TSVpFCQkJMHgz OAo+ICsjZGVmaW5lIEdMX1NSQ19XX1NISUZUCQkJMTYKPiArI2RlZmluZSBHTF9TUkNfV19NQVNL CQkJKDB4M2ZmZiA8PCBHTF9TUkNfV19TSElGVCkKPiArI2RlZmluZSBHTF9TUkNfSF9TSElGVAkJ CTAKPiArI2RlZmluZSBHTF9TUkNfSF9NQVNLCQkJKDB4M2ZmZiA8PCBHTF9TUkNfSF9TSElGVCkK PiArI2RlZmluZSBHTF9QT1NfU1RBUlQJCQkweDljCj4gKyNkZWZpbmUgR0xfUE9TX0VORAkJCTB4 YTAKPiArI2RlZmluZSBHTF9QT1NfWF9TSElGVAkJCTE2Cj4gKyNkZWZpbmUgR0xfUE9TX1hfTUFT SwkJCSgweDFmZmYgPDwgR0xfUE9TX1hfU0hJRlQpCj4gKyNkZWZpbmUgR0xfUE9TX1lfU0hJRlQJ CQkwCj4gKyNkZWZpbmUgR0xfUE9TX1lfTUFTSwkJCSgweDFmZmYgPDwgR0xfUE9TX1lfU0hJRlQp Cj4gKwo+ICsjZGVmaW5lIEdMX1NSQ19XKHgpCSgoKHgpIDw8IEdMX1NSQ19XX1NISUZUKSAmIEdM X1NSQ19XX01BU0spCj4gKyNkZWZpbmUgR0xfU1JDX0goeCkJKCgoeCkgPDwgR0xfU1JDX0hfU0hJ RlQpICYgR0xfU1JDX0hfTUFTSykKPiArI2RlZmluZSBHTF9QT1NfWCh4KQkoKCh4KSA8PCBHTF9Q T1NfWF9TSElGVCkgJiBHTF9QT1NfWF9NQVNLKQo+ICsjZGVmaW5lIEdMX1BPU19ZKHgpCSgoKHgp IDw8IEdMX1BPU19ZX1NISUZUKSAmIEdMX1BPU19ZX01BU0spCj4gKwo+ICsvKiBDU0MgcmVnaXN0 ZXJzICovCj4gKyNkZWZpbmUgQ1NDX0NUUkwwCQkJMHgzMAo+ICsjZGVmaW5lIENTQ19DT1ZfTU9E RV9TSElGVAkJMTYKPiArI2RlZmluZSBDU0NfQ09WX01PREVfTUFTSwkJKDB4ZmZmZiA8PCBDU0Nf Q09WX01PREVfU0hJRlQpCj4gKyNkZWZpbmUgQ1NDX0JUNjAxX0lNQUdFX1JHQjJZQ0JDUgkwCj4g KyNkZWZpbmUgQ1NDX0JUNjAxX0lNQUdFX1lDQkNSMlJHQgkxCj4gKyNkZWZpbmUgQ1NDX0JUNjAx X1ZJREVPX1JHQjJZQ0JDUgkyCj4gKyNkZWZpbmUgQ1NDX0JUNjAxX1ZJREVPX1lDQkNSMlJHQgkz Cj4gKyNkZWZpbmUgQ1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUgk0Cj4gKyNkZWZpbmUgQ1NDX0JU NzA5X0lNQUdFX1lDQkNSMlJHQgk1Cj4gKyNkZWZpbmUgQ1NDX0JUNzA5X1ZJREVPX1JHQjJZQ0JD Ugk2Cj4gKyNkZWZpbmUgQ1NDX0JUNzA5X1ZJREVPX1lDQkNSMlJHQgk3Cj4gKyNkZWZpbmUgQ1ND X0JUMjAyMF9JTUFHRV9SR0IyWUNCQ1IJOAo+ICsjZGVmaW5lIENTQ19CVDIwMjBfSU1BR0VfWUNC Q1IyUkdCCTkKPiArI2RlZmluZSBDU0NfQlQyMDIwX1ZJREVPX1JHQjJZQ0JDUgkxMAo+ICsjZGVm aW5lIENTQ19CVDIwMjBfVklERU9fWUNCQ1IyUkdCCTExCj4gKyNkZWZpbmUgQ1NDX1dPUktfRU5B QkxFCQkJQklUKDApCj4gKwo+ICsvKiBSU1ogcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgUlNaX1NS Q19DRkcJCQkweDAwCj4gKyNkZWZpbmUgUlNaX0RFU1RfQ0ZHCQkJMHgwNAo+ICsjZGVmaW5lIFJT Wl9FTkFCTEVfQ0ZHCQkJMHgxNAo+ICsKPiArI2RlZmluZSBSU1pfVkVSX1NISUZUCQkJMTYKPiAr I2RlZmluZSBSU1pfVkVSX01BU0sJCQkoMHhmZmZmIDw8IFJTWl9WRVJfU0hJRlQpCj4gKyNkZWZp bmUgUlNaX0hPUl9TSElGVAkJCTAKPiArI2RlZmluZSBSU1pfSE9SX01BU0sJCQkoMHhmZmZmIDw8 IFJTWl9IT1JfU0hJRlQpCj4gKwo+ICsjZGVmaW5lIFJTWl9WRVIoeCkJKCgoeCkgPDwgUlNaX1ZF Ul9TSElGVCkgJiBSU1pfVkVSX01BU0spCj4gKyNkZWZpbmUgUlNaX0hPUih4KQkoKCh4KSA8PCBS U1pfSE9SX1NISUZUKSAmIFJTWl9IT1JfTUFTSykKPiArCj4gKy8qIEhCU0MgcmVnaXN0ZXJzICov Cj4gKyNkZWZpbmUgSEJTQ19TQVRVUkFUSU9OCQkJMHgwMAo+ICsjZGVmaW5lIEhCU0NfSFVFCQkJ MHgwNAo+ICsjZGVmaW5lIEhCU0NfQlJJR0hUCQkJMHgwOAo+ICsjZGVmaW5lIEhCU0NfQ09OVFJB U1QJCQkweDBjCj4gKyNkZWZpbmUgSEJTQ19USFJFU0hPTERfQ09MMQkJMHgxMAo+ICsjZGVmaW5l IEhCU0NfVEhSRVNIT0xEX0NPTDIJCTB4MTQKPiArI2RlZmluZSBIQlNDX1RIUkVTSE9MRF9DT0wz CQkweDE4Cj4gKyNkZWZpbmUgSEJTQ19DVFJMMAkJCTB4MjgKPiArI2RlZmluZSBIQlNDX0NUUkxf RU4JCQlCSVQoMikKPiArCj4gK3N0cnVjdCB6eF9wbGFuZSB7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5l IHBsYW5lOwo+ICsJdm9pZCBfX2lvbWVtICpsYXllcjsKPiArCXZvaWQgX19pb21lbSAqY3NjOwo+ ICsJdm9pZCBfX2lvbWVtICpoYnNjOwo+ICsJdm9pZCBfX2lvbWVtICpyc3o7Cj4gK307Cj4gKwo+ ICsjZGVmaW5lIHRvX3p4X3BsYW5lKHBsYW5lKQljb250YWluZXJfb2YocGxhbmUsIHN0cnVjdCB6 eF9wbGFuZSwgcGxhbmUpCj4gKwo+ICtzdGF0aWMgY29uc3QgdWludDMyX3QgZ2xfZm9ybWF0c1td ID0gewo+ICsJRFJNX0ZPUk1BVF9BUkdCODg4OCwKPiArCURSTV9GT1JNQVRfWFJHQjg4ODgsCj4g KwlEUk1fRk9STUFUX1JHQjg4OCwKPiArCURSTV9GT1JNQVRfUkdCNTY1LAo+ICsJRFJNX0ZPUk1B VF9BUkdCMTU1NSwKPiArCURSTV9GT1JNQVRfQVJHQjQ0NDQsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHp4X2dsX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAr CQkJCSAgICBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0ZSkKPiArewo+ICsJc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIgPSBwbGFuZV9zdGF0ZS0+ZmI7Cj4gKwlzdHJ1Y3QgZHJt X2NydGMgKmNydGMgPSBwbGFuZV9zdGF0ZS0+Y3J0YzsKPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0 ZSAqY3J0Y19zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsKPiArCWlmICghY3J0 YyB8fCAhZmIpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNf Z2V0X2V4aXN0aW5nX2NydGNfc3RhdGUocGxhbmVfc3RhdGUtPnN0YXRlLAo+ICsJCQkJCQkJY3J0 Yyk7Cj4gKwlpZiAoV0FSTl9PTighY3J0Y19zdGF0ZSkpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJLyogcGxhbmUgbXVzdCBtYXRjaCBjcnRjIGVuYWJsZSBzdGF0ZSAqLwo+ICsJaWYgKGNy dGNfc3RhdGUtPmVuYWJsZSAhPSAhIXBsYW5lX3N0YXRlLT5jcnRjKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsKPiArCS8qIG5vdGhpbmcgdG8gY2hlY2sgd2hlbiBkaXNhYmxpbmcgb3IgZGlzYWJs ZWQgKi8KPiArCWlmICghY3J0Y19zdGF0ZS0+ZW5hYmxlKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CWNsaXAueDEgPSAwOwo+ICsJY2xpcC55MSA9IDA7Cj4gKwljbGlwLngyID0gY3J0Y19zdGF0ZS0+ YWRqdXN0ZWRfbW9kZS5oZGlzcGxheTsKPiArCWNsaXAueTIgPSBjcnRjX3N0YXRlLT5hZGp1c3Rl ZF9tb2RlLnZkaXNwbGF5Owo+ICsKPiArCXJldHVybiBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3N0 YXRlKHBsYW5lX3N0YXRlLCAmY2xpcCwKPiArCQkJCQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19T Q0FMSU5HLAo+ICsJCQkJCSAgICBEUk1fUExBTkVfSEVMUEVSX05PX1NDQUxJTkcsCj4gKwkJCQkJ ICAgIGZhbHNlLCB0cnVlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB6eF9nbF9nZXRfZm10KHVp bnQzMl90IGZvcm1hdCkKPiArewo+ICsJc3dpdGNoIChmb3JtYXQpIHsKPiArCWNhc2UgRFJNX0ZP Uk1BVF9BUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiArCQlyZXR1cm4g R0xfRk1UX0FSR0I4ODg4Owo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPiArCQlyZXR1cm4g R0xfRk1UX1JHQjg4ODsKPiArCWNhc2UgRFJNX0ZPUk1BVF9SR0I1NjU6Cj4gKwkJcmV0dXJuIEdM X0ZNVF9SR0I1NjU7Cj4gKwljYXNlIERSTV9GT1JNQVRfQVJHQjE1NTU6Cj4gKwkJcmV0dXJuIEdM X0ZNVF9BUkdCMTU1NTsKPiArCWNhc2UgRFJNX0ZPUk1BVF9BUkdCNDQ0NDoKPiArCQlyZXR1cm4g R0xfRk1UX0FSR0I0NDQ0Owo+ICsJZGVmYXVsdDoKPiArCQlXQVJOX09OQ0UoMSwgImludmFsaWQg cGl4ZWwgZm9ybWF0ICVkXG4iLCBmb3JtYXQpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgenhfZ2xfc2V0X3VwZGF0ZShzdHJ1Y3Qgenhf cGxhbmUgKnpwbGFuZSkKPiArewo+ICsJdm9pZCBfX2lvbWVtICpsYXllciA9IHpwbGFuZS0+bGF5 ZXI7Cj4gKwo+ICsJenhfd3JpdGVsX21hc2sobGF5ZXIgKyBHTF9DVFJMMCwgR0xfVVBEQVRFLCBH TF9VUERBVEUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgenhfZ2xfcnN6X3NldF91 cGRhdGUoc3RydWN0IHp4X3BsYW5lICp6cGxhbmUpCj4gK3sKPiArCXp4X3dyaXRlbCh6cGxhbmUt PnJzeiArIFJTWl9FTkFCTEVfQ0ZHLCAxKTsKPiArfQo+ICsKPiArdm9pZCB6eF9wbGFuZV9zZXRf dXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfcGxhbmUg KnpwbGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5lKTsKPiArCj4gKwl6eF9nbF9yc3pfc2V0X3VwZGF0 ZSh6cGxhbmUpOwo+ICsJenhfZ2xfc2V0X3VwZGF0ZSh6cGxhbmUpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCB6eF9nbF9yc3pfc2V0dXAoc3RydWN0IHp4X3BsYW5lICp6cGxhbmUsIHUzMiBzcmNf dywgdTMyIHNyY19oLAo+ICsJCQkgICAgdTMyIGRzdF93LCB1MzIgZHN0X2gpCj4gK3sKPiArCXZv aWQgX19pb21lbSAqcnN6ID0genBsYW5lLT5yc3o7Cj4gKwo+ICsJenhfd3JpdGVsKHJzeiArIFJT Wl9TUkNfQ0ZHLCBSU1pfVkVSKHNyY19oIC0gMSkgfCBSU1pfSE9SKHNyY193IC0gMSkpOwo+ICsJ enhfd3JpdGVsKHJzeiArIFJTWl9ERVNUX0NGRywgUlNaX1ZFUihkc3RfaCAtIDEpIHwgUlNaX0hP Uihkc3RfdyAtIDEpKTsKPiArCj4gKwl6eF9nbF9yc3pfc2V0X3VwZGF0ZSh6cGxhbmUpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZCB6eF9nbF9wbGFuZV9hdG9taWNfdXBkYXRlKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICsJCQkJICAgICAgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqb2xkX3N0 YXRlKQo+ICt7Cj4gKwlzdHJ1Y3QgenhfcGxhbmUgKnpwbGFuZSA9IHRvX3p4X3BsYW5lKHBsYW5l KTsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gcGxhbmUtPnN0YXRlLT5mYjsKPiAr CXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmNtYV9vYmo7Cj4gKwl2b2lkIF9faW9tZW0gKmxh eWVyID0genBsYW5lLT5sYXllcjsKPiArCXZvaWQgX19pb21lbSAqY3NjID0genBsYW5lLT5jc2M7 Cj4gKwl2b2lkIF9faW9tZW0gKmhic2MgPSB6cGxhbmUtPmhic2M7Cj4gKwl1MzIgc3JjX3gsIHNy Y195LCBzcmNfdywgc3JjX2g7Cj4gKwl1MzIgZHN0X3gsIGRzdF95LCBkc3RfdywgZHN0X2g7Cj4g Kwl1bnNpZ25lZCBpbnQgZGVwdGgsIGJwcDsKPiArCXVpbnQzMl90IGZvcm1hdDsKPiArCWRtYV9h ZGRyX3QgcGFkZHI7Cj4gKwl1MzIgc3RyaWRlOwo+ICsJaW50IGZtdDsKPiArCj4gKwlpZiAoIWZi KQo+ICsJCXJldHVybjsKPiArCj4gKwlmb3JtYXQgPSBmYi0+cGl4ZWxfZm9ybWF0Owo+ICsJc3Ry aWRlID0gZmItPnBpdGNoZXNbMF07Cj4gKwo+ICsJc3JjX3ggPSBwbGFuZS0+c3RhdGUtPnNyY194 ID4+IDE2Owo+ICsJc3JjX3kgPSBwbGFuZS0+c3RhdGUtPnNyY195ID4+IDE2Owo+ICsJc3JjX3cg PSBwbGFuZS0+c3RhdGUtPnNyY193ID4+IDE2Owo+ICsJc3JjX2ggPSBwbGFuZS0+c3RhdGUtPnNy Y19oID4+IDE2Owo+ICsKPiArCWRzdF94ID0gcGxhbmUtPnN0YXRlLT5jcnRjX3g7Cj4gKwlkc3Rf eSA9IHBsYW5lLT5zdGF0ZS0+Y3J0Y195Owo+ICsJZHN0X3cgPSBwbGFuZS0+c3RhdGUtPmNydGNf dzsKPiArCWRzdF9oID0gcGxhbmUtPnN0YXRlLT5jcnRjX2g7Cj4gKwo+ICsJZHJtX2ZiX2dldF9i cHBfZGVwdGgoZm9ybWF0LCAmZGVwdGgsICZicHApOwo+ICsKPiArCWNtYV9vYmogPSBkcm1fZmJf Y21hX2dldF9nZW1fb2JqKGZiLCAwKTsKPiArCXBhZGRyID0gY21hX29iai0+cGFkZHIgKyBmYi0+ b2Zmc2V0c1swXTsKPiArCXBhZGRyICs9IHNyY195ICogc3RyaWRlICsgc3JjX3ggKiBicHAgLyA4 Owo+ICsJenhfd3JpdGVsKGxheWVyICsgR0xfQUREUiwgcGFkZHIpOwo+ICsKPiArCS8qIFNldCB1 cCBzb3VyY2UgaGVpZ2h0L3dpZHRoIHJlZ2lzdGVyICovCj4gKwl6eF93cml0ZWwobGF5ZXIgKyBH TF9TUkNfU0laRSwgR0xfU1JDX1coc3JjX3cpIHwgR0xfU1JDX0goc3JjX2gpKTsKPiArCj4gKwkv KiBTZXQgdXAgc3RhcnQgcG9zaXRpb24gcmVnaXN0ZXIgKi8KPiArCXp4X3dyaXRlbChsYXllciAr IEdMX1BPU19TVEFSVCwgR0xfUE9TX1goZHN0X3gpIHwgR0xfUE9TX1koZHN0X3kpKTsKPiArCj4g KwkvKiBTZXQgdXAgZW5kIHBvc2l0aW9uIHJlZ2lzdGVyICovCj4gKwl6eF93cml0ZWwobGF5ZXIg KyBHTF9QT1NfRU5ELAo+ICsJCSAgR0xfUE9TX1goZHN0X3ggKyBkc3RfdykgfCBHTF9QT1NfWShk c3RfeSArIGRzdF9oKSk7Cj4gKwo+ICsJLyogU2V0IHVwIHN0cmlkZSByZWdpc3RlciAqLwo+ICsJ enhfd3JpdGVsKGxheWVyICsgR0xfU1RSSURFLCBzdHJpZGUgJiAweGZmZmYpOwo+ICsKPiArCS8q IFNldCB1cCBncmFwaGljIGxheWVyIGRhdGEgZm9ybWF0ICovCj4gKwlmbXQgPSB6eF9nbF9nZXRf Zm10KGZvcm1hdCk7Cj4gKwlpZiAoZm10ID49IDApCj4gKwkJenhfd3JpdGVsX21hc2sobGF5ZXIg KyBHTF9DVFJMMSwgR0xfREFUQV9GTVRfTUFTSywKPiArCQkJICAgICAgIGZtdCA8PCBHTF9EQVRB X0ZNVF9TSElGVCk7Cj4gKwo+ICsJLyogSW5pdGlhbGl6ZSBnbG9iYWwgYWxwaGEgd2l0aCBhIHNh bmUgdmFsdWUgKi8KPiArCXp4X3dyaXRlbF9tYXNrKGxheWVyICsgR0xfQ1RSTDIsIEdMX0dMT0JB TF9BTFBIQV9NQVNLLAo+ICsJCSAgICAgICAweGZmIDw8IEdMX0dMT0JBTF9BTFBIQV9TSElGVCk7 Cj4gKwo+ICsJLyogU2V0dXAgQ1NDIGZvciB0aGUgR0wgKi8KPiArCWlmIChkc3RfaCA+IDcyMCkK PiArCQl6eF93cml0ZWxfbWFzayhjc2MgKyBDU0NfQ1RSTDAsIENTQ19DT1ZfTU9ERV9NQVNLLAo+ ICsJCQkgICAgICAgQ1NDX0JUNzA5X0lNQUdFX1JHQjJZQ0JDUiA8PCBDU0NfQ09WX01PREVfU0hJ RlQpOwo+ICsJZWxzZQo+ICsJCXp4X3dyaXRlbF9tYXNrKGNzYyArIENTQ19DVFJMMCwgQ1NDX0NP Vl9NT0RFX01BU0ssCj4gKwkJCSAgICAgICBDU0NfQlQ2MDFfSU1BR0VfUkdCMllDQkNSIDw8IENT Q19DT1ZfTU9ERV9TSElGVCk7Cj4gKwl6eF93cml0ZWxfbWFzayhjc2MgKyBDU0NfQ1RSTDAsIENT Q19XT1JLX0VOQUJMRSwgQ1NDX1dPUktfRU5BQkxFKTsKPiArCj4gKwkvKiBBbHdheXMgdXNlIHNj YWxlciBzaW5jZSBpdCBleGlzdHMgKHNldCBmb3Igbm90IGJ5cGFzcykgKi8KPiArCXp4X3dyaXRl bF9tYXNrKGxheWVyICsgR0xfQ1RSTDMsIEdMX1NDQUxFUl9CWVBBU1NfTU9ERSwKPiArCQkgICAg ICAgR0xfU0NBTEVSX0JZUEFTU19NT0RFKTsKPiArCj4gKwl6eF9nbF9yc3pfc2V0dXAoenBsYW5l LCBzcmNfdywgc3JjX2gsIGRzdF93LCBkc3RfaCk7Cj4gKwo+ICsJLyogRW5hYmxlIEhCU0MgYmxv Y2sgKi8KPiArCXp4X3dyaXRlbF9tYXNrKGhic2MgKyBIQlNDX0NUUkwwLCBIQlNDX0NUUkxfRU4s IEhCU0NfQ1RSTF9FTik7Cj4gKwo+ICsJenhfZ2xfc2V0X3VwZGF0ZSh6cGxhbmUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3MgenhfZ2xfcGxh bmVfaGVscGVyX2Z1bmNzID0gewo+ICsJLmF0b21pY19jaGVjayA9IHp4X2dsX3BsYW5lX2F0b21p Y19jaGVjaywKPiArCS5hdG9taWNfdXBkYXRlID0genhfZ2xfcGxhbmVfYXRvbWljX3VwZGF0ZSwK PiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHp4X3BsYW5lX2Rlc3Ryb3koc3RydWN0IGRybV9wbGFu ZSAqcGxhbmUpCj4gK3sKPiArCWRybV9wbGFuZV9oZWxwZXJfZGlzYWJsZShwbGFuZSk7Cj4gKwlk cm1fcGxhbmVfY2xlYW51cChwbGFuZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3BsYW5lX2Z1bmNzIHp4X3BsYW5lX2Z1bmNzID0gewo+ICsJLnVwZGF0ZV9wbGFuZSA9IGRy bV9hdG9taWNfaGVscGVyX3VwZGF0ZV9wbGFuZSwKPiArCS5kaXNhYmxlX3BsYW5lID0gZHJtX2F0 b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwKPiArCS5kZXN0cm95ID0genhfcGxhbmVfZGVzdHJv eSwKPiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+ICsJLmF0b21p Y19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9kdXBsaWNhdGVfc3Rh dGUsCj4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k ZXN0cm95X3N0YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgenhfcGxhbmVfaGJzY19pbml0 KHN0cnVjdCB6eF9wbGFuZSAqenBsYW5lKQo+ICt7Cj4gKwl2b2lkIF9faW9tZW0gKmhic2MgPSB6 cGxhbmUtPmhic2M7Cj4gKwo+ICsJLyoKPiArCSAqICBJbml0aWFsaXplIEhCU0MgYmxvY2sgd2l0 aCBhIHNhbmUgY29uZmlndXJhdGlvbiBwZXIgcmVjb21tZWRhdGlvbgo+ICsJICogIGZyb20gWlRF IEJTUCBjb2RlLgo+ICsJICovCj4gKwl6eF93cml0ZWwoaGJzYyArIEhCU0NfU0FUVVJBVElPTiwg MHgyMDApOwo+ICsJenhfd3JpdGVsKGhic2MgKyBIQlNDX0hVRSwgMHgwKTsKPiArCXp4X3dyaXRl bChoYnNjICsgSEJTQ19CUklHSFQsIDB4MCk7Cj4gKwl6eF93cml0ZWwoaGJzYyArIEhCU0NfQ09O VFJBU1QsIDB4MjAwKTsKPiArCj4gKwl6eF93cml0ZWwoaGJzYyArIEhCU0NfVEhSRVNIT0xEX0NP TDEsICgweDNhYyA8PCAxNikgfCAweDQwKTsKPiArCXp4X3dyaXRlbChoYnNjICsgSEJTQ19USFJF U0hPTERfQ09MMiwgKDB4M2MwIDw8IDE2KSB8IDB4NDApOwo+ICsJenhfd3JpdGVsKGhic2MgKyBI QlNDX1RIUkVTSE9MRF9DT0wzLCAoMHgzYzAgPDwgMTYpIHwgMHg0MCk7Cj4gK30KPiArCj4gK3N0 cnVjdCBkcm1fcGxhbmUgKnp4X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3Ry dWN0IGRldmljZSAqZGV2LAo+ICsJCQkJc3RydWN0IHp4X2xheWVyX2RhdGEgKmRhdGEsCj4gKwkJ CQllbnVtIGRybV9wbGFuZV90eXBlIHR5cGUpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBkcm1fcGxh bmVfaGVscGVyX2Z1bmNzICpoZWxwZXI7Cj4gKwlzdHJ1Y3QgenhfcGxhbmUgKnpwbGFuZTsKPiAr CXN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lOwo+ICsJY29uc3QgdWludDMyX3QgKmZvcm1hdHM7Cj4g Kwl1bnNpZ25lZCBpbnQgZm9ybWF0X2NvdW50Owo+ICsJaW50IHJldDsKPiArCj4gKwl6cGxhbmUg PSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnpwbGFuZSksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCF6cGxhbmUpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJcGxhbmUgPSAm enBsYW5lLT5wbGFuZTsKPiArCj4gKwl6cGxhbmUtPmxheWVyID0gZGF0YS0+bGF5ZXI7Cj4gKwl6 cGxhbmUtPmhic2MgPSBkYXRhLT5oYnNjOwo+ICsJenBsYW5lLT5jc2MgPSBkYXRhLT5jc2M7Cj4g Kwl6cGxhbmUtPnJzeiA9IGRhdGEtPnJzejsKPiArCj4gKwl6eF9wbGFuZV9oYnNjX2luaXQoenBs YW5lKTsKPiArCj4gKwlzd2l0Y2ggKHR5cGUpIHsKPiArCWNhc2UgRFJNX1BMQU5FX1RZUEVfUFJJ TUFSWToKPiArCQloZWxwZXIgPSAmenhfZ2xfcGxhbmVfaGVscGVyX2Z1bmNzOwo+ICsJCWZvcm1h dHMgPSBnbF9mb3JtYXRzOwo+ICsJCWZvcm1hdF9jb3VudCA9IEFSUkFZX1NJWkUoZ2xfZm9ybWF0 cyk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9QTEFORV9UWVBFX09WRVJMQVk6Cj4gKwkJLyog VE9ETzogYWRkIHZpZGVvIGxheWVyICh2bCkgc3VwcG9ydCAqLwo+ICsJCWJyZWFrOwo+ICsJZGVm YXVsdDoKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiArCX0KPiArCj4gKwlyZXQgPSBk cm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZHJtLCBwbGFuZSwgVk9VX0NSVENfTUFTSywKPiArCQkJ CSAgICAgICAmenhfcGxhbmVfZnVuY3MsIGZvcm1hdHMsIGZvcm1hdF9jb3VudCwKPiArCQkJCSAg ICAgICB0eXBlLCBOVUxMKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKGRldiwgImZhaWxl ZCB0byBpbml0IHVuaXZlcnNhbCBwbGFuZTogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIEVSUl9Q VFIocmV0KTsKPiArCX0KPiArCj4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZChwbGFuZSwgaGVscGVy KTsKPiArCj4gKwlyZXR1cm4gcGxhbmU7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3p0ZS96eF9wbGFuZS5oIGIvZHJpdmVycy9ncHUvZHJtL3p0ZS96eF9wbGFuZS5oCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjJiODJjZDU1OGQ5ZAo+IC0t LSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4X3BsYW5lLmgKPiBAQCAt MCwwICsxLDI2IEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAyMDE2IExpbmFybyBMdGQuCj4gKyAq IENvcHlyaWdodCAyMDE2IFpURSBDb3Jwb3JhdGlvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSB2ZXJzaW9uIDIgYXMKPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCj4gKyAqCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1pYX1BMQU5FX0hfXwo+ICsjZGVm aW5lIF9fWlhfUExBTkVfSF9fCj4gKwo+ICtzdHJ1Y3QgenhfbGF5ZXJfZGF0YSB7Cj4gKwl2b2lk IF9faW9tZW0gKmxheWVyOwo+ICsJdm9pZCBfX2lvbWVtICpjc2M7Cj4gKwl2b2lkIF9faW9tZW0g Kmhic2M7Cj4gKwl2b2lkIF9faW9tZW0gKnJzejsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1fcGxh bmUgKnp4X3BsYW5lX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSwgc3RydWN0IGRldmljZSAq ZGV2LAo+ICsJCQkJc3RydWN0IHp4X2xheWVyX2RhdGEgKmRhdGEsCj4gKwkJCQllbnVtIGRybV9w bGFuZV90eXBlIHR5cGUpOwo+ICt2b2lkIHp4X3BsYW5lX3NldF91cGRhdGUoc3RydWN0IGRybV9w bGFuZSAqcGxhbmUpOwo+ICsKPiArI2VuZGlmIC8qIF9fWlhfUExBTkVfSF9fICovCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS96dGUvenhfdm91LmMgYi9kcml2ZXJzL2dwdS9kcm0venRl L3p4X3ZvdS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjY3 NmM3NTBkNjAwOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0venRlL3p4 X3ZvdS5jCj4gQEAgLTAsMCArMSw3OTkgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMTYgTGlu YXJvIEx0ZC4KPiArICogQ29weXJpZ2h0IDIwMTYgWlRFIENvcnBvcmF0aW9uLgo+ICsgKgo+ICsg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwo+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv Y2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L29mX2FkZHJlc3MuaD4KPiArI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5oPgo+ICsKPiArI2lu Y2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtX2ZiX2NtYV9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX2dlbV9jbWFfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJt X29mLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBlci5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPiArCj4gKyNpbmNsdWRlICJ6eF9kcm1fZHJ2LmgiCj4gKyNpbmNsdWRlICJ6 eF9wbGFuZS5oIgo+ICsjaW5jbHVkZSAienhfdm91LmgiCj4gKwo+ICsvKiBTdWItbW9kdWxlIG9m ZnNldCAqLwo+ICsjZGVmaW5lIE1BSU5fR0xfT0ZGU0VUCQkJMHgxMzAKPiArI2RlZmluZSBNQUlO X0NTQ19PRkZTRVQJCQkweDU4MAo+ICsjZGVmaW5lIE1BSU5fSEJTQ19PRkZTRVQJCTB4ODIwCj4g KyNkZWZpbmUgTUFJTl9SU1pfT0ZGU0VUCQkJMHg2MDAgLyogT1RGUFBVIHN1Yi1tb2R1bGUgKi8K PiArCj4gKyNkZWZpbmUgQVVYX0dMX09GRlNFVAkJCTB4MjAwCj4gKyNkZWZpbmUgQVVYX0NTQ19P RkZTRVQJCQkweDVkMAo+ICsjZGVmaW5lIEFVWF9IQlNDX09GRlNFVAkJCTB4ODYwCj4gKyNkZWZp bmUgQVVYX1JTWl9PRkZTRVQJCQkweDgwMAo+ICsKPiArLyogT1NEIChHUENfR0xPQkFMKSByZWdp c3RlcnMgKi8KPiArI2RlZmluZSBPU0RfSU5UX1NUQQkJCTB4MDQKPiArI2RlZmluZSBPU0RfSU5U X0NMUlNUQQkJCTB4MDgKPiArI2RlZmluZSBPU0RfSU5UX01TSwkJCTB4MGMKPiArI2RlZmluZSBP U0RfSU5UX0FVWF9VUFQJCQlCSVQoMTQpCj4gKyNkZWZpbmUgT1NEX0lOVF9NQUlOX1VQVAkJQklU KDEzKQo+ICsjZGVmaW5lIE9TRF9JTlRfR0wxX0xCVwkJCUJJVCgxMCkKPiArI2RlZmluZSBPU0Rf SU5UX0dMMF9MQlcJCQlCSVQoOSkKPiArI2RlZmluZSBPU0RfSU5UX1ZMMl9MQlcJCQlCSVQoOCkK PiArI2RlZmluZSBPU0RfSU5UX1ZMMV9MQlcJCQlCSVQoNykKPiArI2RlZmluZSBPU0RfSU5UX1ZM MF9MQlcJCQlCSVQoNikKPiArI2RlZmluZSBPU0RfSU5UX0JVU19FUlIJCQlCSVQoMykKPiArI2Rl ZmluZSBPU0RfSU5UX0NGR19FUlIJCQlCSVQoMikKPiArI2RlZmluZSBPU0RfSU5UX0VSUk9SIChc Cj4gKwlPU0RfSU5UX0dMMV9MQlcgfCBPU0RfSU5UX0dMMF9MQlcgfCBcCj4gKwlPU0RfSU5UX1ZM Ml9MQlcgfCBPU0RfSU5UX1ZMMV9MQlcgfCBPU0RfSU5UX1ZMMF9MQlcgfCBcCj4gKwlPU0RfSU5U X0JVU19FUlIgfCBPU0RfSU5UX0NGR19FUlIgXAo+ICspCj4gKyNkZWZpbmUgT1NEX0lOVF9FTkFC TEUgKE9TRF9JTlRfRVJST1IgfCBPU0RfSU5UX0FVWF9VUFQgfCBPU0RfSU5UX01BSU5fVVBUKQo+ ICsjZGVmaW5lIE9TRF9DVFJMMAkJCTB4MTAKPiArI2RlZmluZSBPU0RfQ1RSTDBfR0wwX0VOCQlC SVQoNykKPiArI2RlZmluZSBPU0RfQ1RSTDBfR0wwX1NFTAkJQklUKDYpCj4gKyNkZWZpbmUgT1NE X0NUUkwwX0dMMV9FTgkJQklUKDUpCj4gKyNkZWZpbmUgT1NEX0NUUkwwX0dMMV9TRUwJCUJJVCg0 KQo+ICsjZGVmaW5lIE9TRF9SU1RfQ0xSCQkJMHgxYwo+ICsjZGVmaW5lIFJTVF9QRVJfRlJBTUUJ CQlCSVQoMTkpCj4gKwo+ICsvKiBNYWluL0F1eCBjaGFubmVsIHJlZ2lzdGVycyAqLwo+ICsjZGVm aW5lIE9TRF9NQUlOX0NITgkJCTB4NDcwCj4gKyNkZWZpbmUgT1NEX0FVWF9DSE4JCQkweDRkMAo+ ICsjZGVmaW5lIENITl9DVFJMMAkJCTB4MDAKPiArI2RlZmluZSBDSE5fRU5BQkxFCQkJQklUKDAp Cj4gKyNkZWZpbmUgQ0hOX0NUUkwxCQkJMHgwNAo+ICsjZGVmaW5lIENITl9TQ1JFRU5fV19TSElG VAkJMTgKPiArI2RlZmluZSBDSE5fU0NSRUVOX1dfTUFTSwkJKDB4MWZmZiA8PCBDSE5fU0NSRUVO X1dfU0hJRlQpCj4gKyNkZWZpbmUgQ0hOX1NDUkVFTl9IX1NISUZUCQk1Cj4gKyNkZWZpbmUgQ0hO X1NDUkVFTl9IX01BU0sJCSgweDFmZmYgPDwgQ0hOX1NDUkVFTl9IX1NISUZUKQo+ICsjZGVmaW5l IENITl9VUERBVEUJCQkweDA4Cj4gKwo+ICsvKiBUSU1JTkdfQ1RSTCByZWdpc3RlcnMgKi8KPiAr I2RlZmluZSBUSU1JTkdfVENfRU5BQkxFCQkweDA0Cj4gKyNkZWZpbmUgQVVYX1RDX0VOCQkJQklU KDEpCj4gKyNkZWZpbmUgTUFJTl9UQ19FTgkJCUJJVCgwKQo+ICsjZGVmaW5lIEZJUl9NQUlOX0FD VElWRQkJCTB4MDgKPiArI2RlZmluZSBGSVJfQVVYX0FDVElWRQkJCTB4MGMKPiArI2RlZmluZSBW X0FDVElWRV9TSElGVAkJCTE2Cj4gKyNkZWZpbmUgVl9BQ1RJVkVfTUFTSwkJCSgweGZmZmYgPDwg Vl9BQ1RJVkVfU0hJRlQpCj4gKyNkZWZpbmUgSF9BQ1RJVkVfU0hJRlQJCQkwCj4gKyNkZWZpbmUg SF9BQ1RJVkVfTUFTSwkJCSgweGZmZmYgPDwgSF9BQ1RJVkVfU0hJRlQpCj4gKyNkZWZpbmUgRklS X01BSU5fSF9USU1JTkcJCTB4MTAKPiArI2RlZmluZSBGSVJfTUFJTl9WX1RJTUlORwkJMHgxNAo+ ICsjZGVmaW5lIEZJUl9BVVhfSF9USU1JTkcJCTB4MTgKPiArI2RlZmluZSBGSVJfQVVYX1ZfVElN SU5HCQkweDFjCj4gKyNkZWZpbmUgU1lOQ19XSURFX1NISUZUCQkJMjIKPiArI2RlZmluZSBTWU5D X1dJREVfTUFTSwkJCSgweDNmZiA8PCBTWU5DX1dJREVfU0hJRlQpCj4gKyNkZWZpbmUgQkFDS19Q T1JDSF9TSElGVAkJMTEKPiArI2RlZmluZSBCQUNLX1BPUkNIX01BU0sJCQkoMHg3ZmYgPDwgQkFD S19QT1JDSF9TSElGVCkKPiArI2RlZmluZSBGUk9OVF9QT1JDSF9TSElGVAkJMAo+ICsjZGVmaW5l IEZST05UX1BPUkNIX01BU0sJCSgweDdmZiA8PCBGUk9OVF9QT1JDSF9TSElGVCkKPiArI2RlZmlu ZSBUSU1JTkdfQ1RSTAkJCTB4MjAKPiArI2RlZmluZSBBVVhfUE9MX1NISUZUCQkJMwo+ICsjZGVm aW5lIEFVWF9QT0xfTUFTSwkJCSgweDcgPDwgQVVYX1BPTF9TSElGVCkKPiArI2RlZmluZSBNQUlO X1BPTF9TSElGVAkJCTAKPiArI2RlZmluZSBNQUlOX1BPTF9NQVNLCQkJKDB4NyA8PCBNQUlOX1BP TF9TSElGVCkKPiArI2RlZmluZSBQT0xfREVfU0hJRlQJCQkyCj4gKyNkZWZpbmUgUE9MX1ZTWU5D X1NISUZUCQkJMQo+ICsjZGVmaW5lIFBPTF9IU1lOQ19TSElGVAkJCTAKPiArI2RlZmluZSBUSU1J TkdfSU5UX0NUUkwJCQkweDI0Cj4gKyNkZWZpbmUgVElNSU5HX0lOVF9TVEFURQkJMHgyOAo+ICsj ZGVmaW5lIFRJTUlOR19JTlRfQVVYX0ZSQU1FCQlCSVQoMykKPiArI2RlZmluZSBUSU1JTkdfSU5U X01BSU5fRlJBTUUJCUJJVCgxKQo+ICsjZGVmaW5lIFRJTUlOR19JTlRfQVVYX0ZSQU1FX1NFTF9W U1cJKDB4MiA8PCAxMCkKPiArI2RlZmluZSBUSU1JTkdfSU5UX01BSU5fRlJBTUVfU0VMX1ZTVwko MHgyIDw8IDYpCj4gKyNkZWZpbmUgVElNSU5HX0lOVF9FTkFCTEUgKFwKPiArCVRJTUlOR19JTlRf TUFJTl9GUkFNRV9TRUxfVlNXIHwgVElNSU5HX0lOVF9BVVhfRlJBTUVfU0VMX1ZTVyB8IFwKPiAr CVRJTUlOR19JTlRfTUFJTl9GUkFNRSB8IFRJTUlOR19JTlRfQVVYX0ZSQU1FIFwKPiArKQo+ICsj ZGVmaW5lIFRJTUlOR19NQUlOX1NISUZUCQkweDJjCj4gKyNkZWZpbmUgVElNSU5HX0FVWF9TSElG VAkJMHgzMAo+ICsjZGVmaW5lIEhfU0hJRlRfVkFMCQkJMHgwMDQ4Cj4gKyNkZWZpbmUgVElNSU5H X01BSU5fUElfU0hJRlQJCTB4NjgKPiArI2RlZmluZSBUSU1JTkdfQVVYX1BJX1NISUZUCQkweDZj Cj4gKyNkZWZpbmUgSF9QSV9TSElGVF9WQUwJCQkweDAwMGYKPiArCj4gKyNkZWZpbmUgVl9BQ1RJ VkUoeCkJKCgoeCkgPDwgVl9BQ1RJVkVfU0hJRlQpICYgVl9BQ1RJVkVfTUFTSykKPiArI2RlZmlu ZSBIX0FDVElWRSh4KQkoKCh4KSA8PCBIX0FDVElWRV9TSElGVCkgJiBIX0FDVElWRV9NQVNLKQo+ ICsKPiArI2RlZmluZSBTWU5DX1dJREUoeCkJKCgoeCkgPDwgU1lOQ19XSURFX1NISUZUKSAmIFNZ TkNfV0lERV9NQVNLKQo+ICsjZGVmaW5lIEJBQ0tfUE9SQ0goeCkJKCgoeCkgPDwgQkFDS19QT1JD SF9TSElGVCkgJiBCQUNLX1BPUkNIX01BU0spCj4gKyNkZWZpbmUgRlJPTlRfUE9SQ0goeCkJKCgo eCkgPDwgRlJPTlRfUE9SQ0hfU0hJRlQpICYgRlJPTlRfUE9SQ0hfTUFTSykKPiArCj4gKy8qIERU UkMgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgRFRSQ19GMF9DVFJMCQkJMHgyYwo+ICsjZGVmaW5l IERUUkNfRjFfQ1RSTAkJCTB4NWMKPiArI2RlZmluZSBEVFJDX0RFQ09NUFJFU1NfQllQQVNTCQlC SVQoMTcpCj4gKyNkZWZpbmUgRFRSQ19ERVRJTEVfQ1RSTAkJMHg2OAo+ICsjZGVmaW5lIFRJTEUy UkFTVEVTQ0FOX0JZUEFTU19NT0RFCUJJVCgzMCkKPiArI2RlZmluZSBERVRJTEVfQVJJRFJfTU9E RV9NQVNLCQkoMHgzIDw8IDApCj4gKyNkZWZpbmUgREVUSUxFX0FSSURfQUxMCQkJMAo+ICsjZGVm aW5lIERFVElMRV9BUklEX0lOX0FSSURSCQkxCj4gKyNkZWZpbmUgREVUSUxFX0FSSURfQllQX0JV VF9BUklEUgkyCj4gKyNkZWZpbmUgREVUSUxFX0FSSURfSU5fQVJJRFIyCQkzCj4gKyNkZWZpbmUg RFRSQ19BUklECQkJMHg2Ywo+ICsjZGVmaW5lIERUUkNfQVJJRDNfU0hJRlQJCTI0Cj4gKyNkZWZp bmUgRFRSQ19BUklEM19NQVNLCQkJKDB4ZmYgPDwgRFRSQ19BUklEM19TSElGVCkKPiArI2RlZmlu ZSBEVFJDX0FSSUQyX1NISUZUCQkxNgo+ICsjZGVmaW5lIERUUkNfQVJJRDJfTUFTSwkJCSgweGZm IDw8IERUUkNfQVJJRDJfU0hJRlQpCj4gKyNkZWZpbmUgRFRSQ19BUklEMV9TSElGVAkJOAo+ICsj ZGVmaW5lIERUUkNfQVJJRDFfTUFTSwkJCSgweGZmIDw8IERUUkNfQVJJRDFfU0hJRlQpCj4gKyNk ZWZpbmUgRFRSQ19BUklEMF9TSElGVAkJMAo+ICsjZGVmaW5lIERUUkNfQVJJRDBfTUFTSwkJCSgw eGZmIDw8IERUUkNfQVJJRDBfU0hJRlQpCj4gKyNkZWZpbmUgRFRSQ19ERUMyRERSX0FSSUQJCTB4 NzAKPiArCj4gKyNkZWZpbmUgRFRSQ19BUklEMyh4KQkoKCh4KSA8PCBEVFJDX0FSSUQzX1NISUZU KSAmIERUUkNfQVJJRDNfTUFTSykKPiArI2RlZmluZSBEVFJDX0FSSUQyKHgpCSgoKHgpIDw8IERU UkNfQVJJRDJfU0hJRlQpICYgRFRSQ19BUklEMl9NQVNLKQo+ICsjZGVmaW5lIERUUkNfQVJJRDEo eCkJKCgoeCkgPDwgRFRSQ19BUklEMV9TSElGVCkgJiBEVFJDX0FSSUQxX01BU0spCj4gKyNkZWZp bmUgRFRSQ19BUklEMCh4KQkoKCh4KSA8PCBEVFJDX0FSSUQwX1NISUZUKSAmIERUUkNfQVJJRDBf TUFTSykKPiArCj4gKy8qIFZPVV9DVFJMIHJlZ2lzdGVycyAqLwo+ICsjZGVmaW5lIFZPVV9JTkZf RU4JCQkweDAwCj4gKyNkZWZpbmUgVk9VX0lORl9DSF9TRUwJCQkweDA0Cj4gKyNkZWZpbmUgVk9V X0lORl9EQVRBX1NFTAkJMHgwOAo+ICsjZGVmaW5lIFZPVV9TT0ZUX1JTVAkJCTB4MTQKPiArI2Rl ZmluZSBWT1VfQ0xLX1NFTAkJCTB4MTgKPiArI2RlZmluZSBWT1VfQ0xLX0dMMV9TRUwJCQlCSVQo NSkKPiArI2RlZmluZSBWT1VfQ0xLX0dMMF9TRUwJCQlCSVQoNCkKPiArI2RlZmluZSBWT1VfQ0xL X1JFUUVOCQkJMHgyMAo+ICsjZGVmaW5lIFZPVV9DTEtfRU4JCQkweDI0Cj4gKwo+ICsvKiBPVEZQ UFVfQ1RSTCByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBPVEZQUFVfUlNaX0RBVEFfU09VUkNFCQkw eDA0Cj4gKwo+ICsjZGVmaW5lIEdMX05VTQkJCQkyCj4gKyNkZWZpbmUgVkxfTlVNCQkJCTMKPiAr Cj4gK2VudW0gdm91X2Nobl90eXBlIHsKPiArCVZPVV9DSE5fTUFJTiwKPiArCVZPVV9DSE5fQVVY LAo+ICt9Owo+ICsKPiArc3RydWN0IHp4X2NydGNfcmVncyB7Cj4gKwl1MzIgZmlyX2FjdGl2ZTsK PiArCXUzMiBmaXJfaHRpbWluZzsKPiArCXUzMiBmaXJfdnRpbWluZzsKPiArCXUzMiB0aW1pbmdf c2hpZnQ7Cj4gKwl1MzIgdGltaW5nX3BpX3NoaWZ0Owo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB6eF9jcnRjX3JlZ3MgbWFpbl9jcnRjX3JlZ3MgPSB7Cj4gKwkuZmlyX2FjdGl2ZSA9 IEZJUl9NQUlOX0FDVElWRSwKPiArCS5maXJfaHRpbWluZyA9IEZJUl9NQUlOX0hfVElNSU5HLAo+ ICsJLmZpcl92dGltaW5nID0gRklSX01BSU5fVl9USU1JTkcsCj4gKwkudGltaW5nX3NoaWZ0ID0g VElNSU5HX01BSU5fU0hJRlQsCj4gKwkudGltaW5nX3BpX3NoaWZ0ID0gVElNSU5HX01BSU5fUElf U0hJRlQsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHp4X2NydGNfcmVncyBhdXhf Y3J0Y19yZWdzID0gewo+ICsJLmZpcl9hY3RpdmUgPSBGSVJfQVVYX0FDVElWRSwKPiArCS5maXJf aHRpbWluZyA9IEZJUl9BVVhfSF9USU1JTkcsCj4gKwkuZmlyX3Z0aW1pbmcgPSBGSVJfQVVYX1Zf VElNSU5HLAo+ICsJLnRpbWluZ19zaGlmdCA9IFRJTUlOR19BVVhfU0hJRlQsCj4gKwkudGltaW5n X3BpX3NoaWZ0ID0gVElNSU5HX0FVWF9QSV9TSElGVCwKPiArfTsKPiArCj4gK3N0cnVjdCB6eF9j cnRjX2JpdHMgewo+ICsJdTMyIHBvbGFyaXR5X21hc2s7Cj4gKwl1MzIgcG9sYXJpdHlfc2hpZnQ7 Cj4gKwl1MzIgdGNfZW5hYmxlOwo+ICsJdTMyIGdsX2VuYWJsZTsKPiArfTsKPiArCj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgenhfY3J0Y19iaXRzIG1haW5fY3J0Y19iaXRzID0gewo+ICsJLnBvbGFy aXR5X21hc2sgPSBNQUlOX1BPTF9NQVNLLAo+ICsJLnBvbGFyaXR5X3NoaWZ0ID0gTUFJTl9QT0xf U0hJRlQsCj4gKwkudGNfZW5hYmxlID0gTUFJTl9UQ19FTiwKPiArCS5nbF9lbmFibGUgPSBPU0Rf Q1RSTDBfR0wwX0VOLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCB6eF9jcnRjX2Jp dHMgYXV4X2NydGNfYml0cyA9IHsKPiArCS5wb2xhcml0eV9tYXNrID0gQVVYX1BPTF9NQVNLLAo+ ICsJLnBvbGFyaXR5X3NoaWZ0ID0gQVVYX1BPTF9TSElGVCwKPiArCS50Y19lbmFibGUgPSBBVVhf VENfRU4sCj4gKwkuZ2xfZW5hYmxlID0gT1NEX0NUUkwwX0dMMV9FTiwKPiArfTsKPiArCj4gK3N0 cnVjdCB6eF9jcnRjIHsKPiArCXN0cnVjdCBkcm1fY3J0YyBjcnRjOwo+ICsJc3RydWN0IGRybV9w bGFuZSAqcHJpbWFyeTsKPiArCXN0cnVjdCB6eF92b3VfaHcgKnZvdTsKPiArCXZvaWQgX19pb21l bSAqY2hucmVnOwo+ICsJY29uc3Qgc3RydWN0IHp4X2NydGNfcmVncyAqcmVnczsKPiArCWNvbnN0 IHN0cnVjdCB6eF9jcnRjX2JpdHMgKmJpdHM7Cj4gKwllbnVtIHZvdV9jaG5fdHlwZSBjaG5fdHlw ZTsKPiArCXN0cnVjdCBjbGsgKnBpeGNsazsKPiArfTsKPiArCj4gKyNkZWZpbmUgdG9fenhfY3J0 Yyh4KSBjb250YWluZXJfb2YoeCwgc3RydWN0IHp4X2NydGMsIGNydGMpCj4gKwo+ICtzdHJ1Y3Qg enhfdm91X2h3IHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXZvaWQgX19pb21lbSAqb3Nk Owo+ICsJdm9pZCBfX2lvbWVtICp0aW1pbmc7Cj4gKwl2b2lkIF9faW9tZW0gKnZvdWN0bDsKPiAr CXZvaWQgX19pb21lbSAqb3RmcHB1Owo+ICsJdm9pZCBfX2lvbWVtICpkdHJjOwo+ICsJc3RydWN0 IGNsayAqYXhpX2NsazsKPiArCXN0cnVjdCBjbGsgKnBwdV9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICpt YWluX2NsazsKPiArCXN0cnVjdCBjbGsgKmF1eF9jbGs7Cj4gKwlzdHJ1Y3QgenhfY3J0YyAqbWFp bl9jcnRjOwo+ICsJc3RydWN0IHp4X2NydGMgKmF1eF9jcnRjOwo+ICt9Owo+ICsKPiArc3RhdGlj IGlubGluZSBzdHJ1Y3Qgenhfdm91X2h3ICpjcnRjX3RvX3ZvdShzdHJ1Y3QgZHJtX2NydGMgKmNy dGMpCj4gK3sKPiArCXN0cnVjdCB6eF9jcnRjICp6Y3J0YyA9IHRvX3p4X2NydGMoY3J0Yyk7Cj4g Kwo+ICsJcmV0dXJuIHpjcnRjLT52b3U7Cj4gK30KPiArCj4gK3ZvaWQgdm91X2luZl9lbmFibGUo Y29uc3Qgc3RydWN0IHZvdV9pbmYgKmluZiwgc3RydWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4g KwlzdHJ1Y3QgenhfY3J0YyAqemNydGMgPSB0b196eF9jcnRjKGNydGMpOwo+ICsJc3RydWN0IHp4 X3ZvdV9odyAqdm91ID0gemNydGMtPnZvdTsKPiArCWJvb2wgaXNfbWFpbiA9IHpjcnRjLT5jaG5f dHlwZSA9PSBWT1VfQ0hOX01BSU47Cj4gKwl1MzIgZGF0YV9zZWxfc2hpZnQgPSBpbmYtPmlkIDw8 IDE7Cj4gKwo+ICsJLyogU2VsZWN0IGRhdGEgZm9ybWF0ICovCj4gKwl6eF93cml0ZWxfbWFzayh2 b3UtPnZvdWN0bCArIFZPVV9JTkZfREFUQV9TRUwsIDB4MyA8PCBkYXRhX3NlbF9zaGlmdCwKPiAr CQkgICAgICAgaW5mLT5kYXRhX3NlbCA8PCBkYXRhX3NlbF9zaGlmdCk7Cj4gKwo+ICsJLyogU2Vs ZWN0IGNoYW5uZWwgKi8KPiArCXp4X3dyaXRlbF9tYXNrKHZvdS0+dm91Y3RsICsgVk9VX0lORl9D SF9TRUwsIDB4MSA8PCBpbmYtPmlkLAo+ICsJCSAgICAgICB6Y3J0Yy0+Y2huX3R5cGUgPDwgaW5m LT5pZCk7Cj4gKwo+ICsJLyogU2VsZWN0IGludGVyZmFjZSBjbG9ja3MgKi8KPiArCXp4X3dyaXRl bF9tYXNrKHZvdS0+dm91Y3RsICsgVk9VX0NMS19TRUwsIGluZi0+Y2xvY2tzX3NlbF9iaXRzLAo+ ICsJCSAgICAgICBpc19tYWluID8gMCA6IGluZi0+Y2xvY2tzX3NlbF9iaXRzKTsKPiArCj4gKwkv KiBFbmFibGUgaW50ZXJmYWNlIGNsb2NrcyAqLwo+ICsJenhfd3JpdGVsX21hc2sodm91LT52b3Vj dGwgKyBWT1VfQ0xLX0VOLCBpbmYtPmNsb2Nrc19lbl9iaXRzLAo+ICsJCSAgICAgICBpbmYtPmNs b2Nrc19lbl9iaXRzKTsKPiArCj4gKwkvKiBFbmFibGUgdGhlIGRldmljZSAqLwo+ICsJenhfd3Jp dGVsX21hc2sodm91LT52b3VjdGwgKyBWT1VfSU5GX0VOLCAxIDw8IGluZi0+aWQsIDEgPDwgaW5m LT5pZCk7Cj4gK30KPiArCj4gK3ZvaWQgdm91X2luZl9kaXNhYmxlKGNvbnN0IHN0cnVjdCB2b3Vf aW5mICppbmYsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ICsJc3RydWN0IHp4X3ZvdV9o dyAqdm91ID0gY3J0Y190b192b3UoY3J0Yyk7Cj4gKwo+ICsJLyogRGlzYWJsZSB0aGUgZGV2aWNl ICovCj4gKwl6eF93cml0ZWxfbWFzayh2b3UtPnZvdWN0bCArIFZPVV9JTkZfRU4sIDEgPDwgaW5m LT5pZCwgMCk7Cj4gKwo+ICsJLyogRGlzYWJsZSBpbnRlcmZhY2UgY2xvY2tzICovCj4gKwl6eF93 cml0ZWxfbWFzayh2b3UtPnZvdWN0bCArIFZPVV9DTEtfRU4sIGluZi0+Y2xvY2tzX2VuX2JpdHMs IDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdm91X2Nobl9zZXRfdXBkYXRlKHN0 cnVjdCB6eF9jcnRjICp6Y3J0YykKPiArewo+ICsJenhfd3JpdGVsKHpjcnRjLT5jaG5yZWcgKyBD SE5fVVBEQVRFLCAxKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfY3J0Y19lbmFibGUoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSA9ICZjcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZTsKPiArCXN0cnVjdCB6eF9jcnRjICp6Y3J0 YyA9IHRvX3p4X2NydGMoY3J0Yyk7Cj4gKwlzdHJ1Y3Qgenhfdm91X2h3ICp2b3UgPSB6Y3J0Yy0+ dm91Owo+ICsJY29uc3Qgc3RydWN0IHp4X2NydGNfcmVncyAqcmVncyA9IHpjcnRjLT5yZWdzOwo+ ICsJY29uc3Qgc3RydWN0IHp4X2NydGNfYml0cyAqYml0cyA9IHpjcnRjLT5iaXRzOwo+ICsJc3Ry dWN0IHZpZGVvbW9kZSB2bTsKPiArCXUzMiBwb2wgPSAwOwo+ICsJdTMyIHZhbDsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJZHJtX2Rpc3BsYXlfbW9kZV90b192aWRlb21vZGUobW9kZSwgJnZtKTsKPiAr Cj4gKwkvKiBTZXQgdXAgdGltaW5nIHBhcmFtZXRlcnMgKi8KPiArCXZhbCA9IFZfQUNUSVZFKHZt LnZhY3RpdmUgLSAxKTsKPiArCXZhbCB8PSBIX0FDVElWRSh2bS5oYWN0aXZlIC0gMSk7Cj4gKwl6 eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT5maXJfYWN0aXZlLCB2YWwpOwo+ICsKPiArCXZh bCA9IFNZTkNfV0lERSh2bS5oc3luY19sZW4gLSAxKTsKPiArCXZhbCB8PSBCQUNLX1BPUkNIKHZt LmhiYWNrX3BvcmNoIC0gMSk7Cj4gKwl2YWwgfD0gRlJPTlRfUE9SQ0godm0uaGZyb250X3BvcmNo IC0gMSk7Cj4gKwl6eF93cml0ZWwodm91LT50aW1pbmcgKyByZWdzLT5maXJfaHRpbWluZywgdmFs KTsKPiArCj4gKwl2YWwgPSBTWU5DX1dJREUodm0udnN5bmNfbGVuIC0gMSk7Cj4gKwl2YWwgfD0g QkFDS19QT1JDSCh2bS52YmFja19wb3JjaCAtIDEpOwo+ICsJdmFsIHw9IEZST05UX1BPUkNIKHZt LnZmcm9udF9wb3JjaCAtIDEpOwo+ICsJenhfd3JpdGVsKHZvdS0+dGltaW5nICsgcmVncy0+Zmly X3Z0aW1pbmcsIHZhbCk7Cj4gKwo+ICsJLyogU2V0IHVwIHBvbGFyaXRpZXMgKi8KPiArCWlmICh2 bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfVlNZTkNfTE9XKQo+ICsJCXBvbCB8PSAxIDw8IFBPTF9W U1lOQ19TSElGVDsKPiArCWlmICh2bS5mbGFncyAmIERJU1BMQVlfRkxBR1NfSFNZTkNfTE9XKQo+ ICsJCXBvbCB8PSAxIDw8IFBPTF9IU1lOQ19TSElGVDsKPiArCj4gKwl6eF93cml0ZWxfbWFzayh2 b3UtPnRpbWluZyArIFRJTUlOR19DVFJMLCBiaXRzLT5wb2xhcml0eV9tYXNrLAo+ICsJCSAgICAg ICBwb2wgPDwgYml0cy0+cG9sYXJpdHlfc2hpZnQpOwo+ICsKPiArCS8qIFNldHVwIFNISUZUIHJl Z2lzdGVyIGJ5IGZvbGxvd2luZyB3aGF0IFpURSBCU1AgZG9lcyAqLwo+ICsJenhfd3JpdGVsKHZv dS0+dGltaW5nICsgcmVncy0+dGltaW5nX3NoaWZ0LCBIX1NISUZUX1ZBTCk7Cj4gKwl6eF93cml0 ZWwodm91LT50aW1pbmcgKyByZWdzLT50aW1pbmdfcGlfc2hpZnQsIEhfUElfU0hJRlRfVkFMKTsK PiArCj4gKwkvKiBFbmFibGUgVElNSU5HX0NUUkwgKi8KPiArCXp4X3dyaXRlbF9tYXNrKHZvdS0+ dGltaW5nICsgVElNSU5HX1RDX0VOQUJMRSwgYml0cy0+dGNfZW5hYmxlLAo+ICsJCSAgICAgICBi aXRzLT50Y19lbmFibGUpOwo+ICsKPiArCS8qIENvbmZpZ3VyZSBjaGFubmVsIHNjcmVlbiBzaXpl ICovCj4gKwl6eF93cml0ZWxfbWFzayh6Y3J0Yy0+Y2hucmVnICsgQ0hOX0NUUkwxLCBDSE5fU0NS RUVOX1dfTUFTSywKPiArCQkgICAgICAgdm0uaGFjdGl2ZSA8PCBDSE5fU0NSRUVOX1dfU0hJRlQp Owo+ICsJenhfd3JpdGVsX21hc2soemNydGMtPmNobnJlZyArIENITl9DVFJMMSwgQ0hOX1NDUkVF Tl9IX01BU0ssCj4gKwkJICAgICAgIHZtLnZhY3RpdmUgPDwgQ0hOX1NDUkVFTl9IX1NISUZUKTsK PiArCj4gKwkvKiBVcGRhdGUgY2hhbm5lbCAqLwo+ICsJdm91X2Nobl9zZXRfdXBkYXRlKHpjcnRj KTsKPiArCj4gKwkvKiBFbmFibGUgY2hhbm5lbCAqLwo+ICsJenhfd3JpdGVsX21hc2soemNydGMt PmNobnJlZyArIENITl9DVFJMMCwgQ0hOX0VOQUJMRSwgQ0hOX0VOQUJMRSk7Cj4gKwo+ICsJLyog RW5hYmxlIEdyYXBoaWMgTGF5ZXIgKi8KPiArCXp4X3dyaXRlbF9tYXNrKHZvdS0+b3NkICsgT1NE X0NUUkwwLCBiaXRzLT5nbF9lbmFibGUsCj4gKwkJICAgICAgIGJpdHMtPmdsX2VuYWJsZSk7Cj4g Kwo+ICsJZHJtX2NydGNfdmJsYW5rX29uKGNydGMpOwo+ICsKPiArCXJldCA9IGNsa19zZXRfcmF0 ZSh6Y3J0Yy0+cGl4Y2xrLCBtb2RlLT5jbG9jayAqIDEwMDApOwo+ICsJaWYgKHJldCkgewo+ICsJ CWRldl93YXJuKHZvdS0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwaXhjbGsgcmF0ZTogJWRcbiIsIHJl dCk7CgpEUk1fV0FSTgoKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBh cmVfZW5hYmxlKHpjcnRjLT5waXhjbGspOwo+ICsJaWYgKHJldCkKPiArCQlkZXZfd2Fybih2b3Ut PmRldiwgImZhaWxlZCB0byBlbmFibGUgcGl4Y2xrOiAlZFxuIiwgcmV0KTsKPiArfQo+ICsKPiAr c3RhdGljIHZvaWQgenhfY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKPiArewo+ ICsJc3RydWN0IHp4X2NydGMgKnpjcnRjID0gdG9fenhfY3J0YyhjcnRjKTsKPiArCWNvbnN0IHN0 cnVjdCB6eF9jcnRjX2JpdHMgKmJpdHMgPSB6Y3J0Yy0+Yml0czsKPiArCXN0cnVjdCB6eF92b3Vf aHcgKnZvdSA9IHpjcnRjLT52b3U7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHpjcnRj LT5waXhjbGspOwo+ICsKPiArCWRybV9jcnRjX3ZibGFua19vZmYoY3J0Yyk7Cj4gKwo+ICsJLyog RGlzYWJsZSBHcmFwaGljIExheWVyICovCj4gKwl6eF93cml0ZWxfbWFzayh2b3UtPm9zZCArIE9T RF9DVFJMMCwgYml0cy0+Z2xfZW5hYmxlLCAwKTsKPiArCj4gKwkvKiBEaXNhYmxlIGNoYW5uZWwg Ki8KPiArCXp4X3dyaXRlbF9tYXNrKHpjcnRjLT5jaG5yZWcgKyBDSE5fQ1RSTDAsIENITl9FTkFC TEUsIDApOwo+ICsKPiArCS8qIERpc2FibGUgVElNSU5HX0NUUkwgKi8KPiArCXp4X3dyaXRlbF9t YXNrKHZvdS0+dGltaW5nICsgVElNSU5HX1RDX0VOQUJMRSwgYml0cy0+dGNfZW5hYmxlLCAwKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgenhfY3J0Y19hdG9taWNfYmVnaW4oc3RydWN0IGRybV9j cnRjICpjcnRjLAo+ICsJCQkJIHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqc3RhdGUpCj4gK3sKPiAr CXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmV2ZW50ID0gY3J0Yy0+c3RhdGUtPmV2 ZW50Owo+ICsKPiArCWlmICghZXZlbnQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCWNydGMtPnN0YXRl LT5ldmVudCA9IE5VTEw7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmY3J0Yy0+ZGV2LT5ldmVudF9s b2NrKTsKPiArCWlmIChkcm1fY3J0Y192YmxhbmtfZ2V0KGNydGMpID09IDApCj4gKwkJZHJtX2Ny dGNfYXJtX3ZibGFua19ldmVudChjcnRjLCBldmVudCk7Cj4gKwllbHNlCj4gKwkJZHJtX2NydGNf c2VuZF92YmxhbmtfZXZlbnQoY3J0YywgZXZlbnQpOwo+ICsJc3Bpbl91bmxvY2tfaXJxKCZjcnRj LT5kZXYtPmV2ZW50X2xvY2spOwoKSSB0aGluayB5b3UgbWF5IHdhbnQgdG8gc2VuZCB0aGUgdmJs YW5rIGV2ZW50IHRvIHVzZXJzcGFjZSBhZnRlciB5b3UKY29tbWl0IHlvdXIgcGxhbmVzLCBhbmQg bm90IGJlZm9yZS4KCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVs cGVyX2Z1bmNzIHp4X2NydGNfaGVscGVyX2Z1bmNzID0gewo+ICsJLmVuYWJsZSA9IHp4X2NydGNf ZW5hYmxlLAo+ICsJLmRpc2FibGUgPSB6eF9jcnRjX2Rpc2FibGUsCj4gKwkuYXRvbWljX2JlZ2lu ID0genhfY3J0Y19hdG9taWNfYmVnaW4sCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9jcnRjX2Z1bmNzIHp4X2NydGNfZnVuY3MgPSB7Cj4gKwkuZGVzdHJveSA9IGRybV9jcnRj X2NsZWFudXAsCj4gKwkuc2V0X2NvbmZpZyA9IGRybV9hdG9taWNfaGVscGVyX3NldF9jb25maWcs Cj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFnZV9mbGlwLAo+ICsJLnJlc2V0 ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPiArCS5hdG9taWNfZHVwbGljYXRlX3N0 YXRlID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19kdXBsaWNhdGVfc3RhdGUsCj4gKwkuYXRvbWlj X2Rlc3Ryb3lfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9jcnRjX2Rlc3Ryb3lfc3RhdGUsCj4g K307Cj4gKwo+ICtzdGF0aWMgaW50IHp4X2NydGNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt LCBzdHJ1Y3Qgenhfdm91X2h3ICp2b3UsCj4gKwkJCWVudW0gdm91X2Nobl90eXBlIGNobl90eXBl KQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB2b3UtPmRldjsKPiArCXN0cnVjdCB6eF9s YXllcl9kYXRhIGRhdGE7Cj4gKwlzdHJ1Y3QgenhfY3J0YyAqemNydGM7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXpjcnRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp6Y3J0YyksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCF6Y3J0YykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl6Y3J0Yy0+ dm91ID0gdm91Owo+ICsJemNydGMtPmNobl90eXBlID0gY2huX3R5cGU7Cj4gKwo+ICsJaWYgKGNo bl90eXBlID09IFZPVV9DSE5fTUFJTikgewo+ICsJCWRhdGEubGF5ZXIgPSB2b3UtPm9zZCArIE1B SU5fR0xfT0ZGU0VUOwo+ICsJCWRhdGEuY3NjID0gdm91LT5vc2QgKyBNQUlOX0NTQ19PRkZTRVQ7 Cj4gKwkJZGF0YS5oYnNjID0gdm91LT5vc2QgKyBNQUlOX0hCU0NfT0ZGU0VUOwo+ICsJCWRhdGEu cnN6ID0gdm91LT5vdGZwcHUgKyBNQUlOX1JTWl9PRkZTRVQ7Cj4gKwkJemNydGMtPmNobnJlZyA9 IHZvdS0+b3NkICsgT1NEX01BSU5fQ0hOOwo+ICsJCXpjcnRjLT5yZWdzID0gJm1haW5fY3J0Y19y ZWdzOwo+ICsJCXpjcnRjLT5iaXRzID0gJm1haW5fY3J0Y19iaXRzOwo+ICsJfSBlbHNlIHsKPiAr CQlkYXRhLmxheWVyID0gdm91LT5vc2QgKyBBVVhfR0xfT0ZGU0VUOwo+ICsJCWRhdGEuY3NjID0g dm91LT5vc2QgKyBBVVhfQ1NDX09GRlNFVDsKPiArCQlkYXRhLmhic2MgPSB2b3UtPm9zZCArIEFV WF9IQlNDX09GRlNFVDsKPiArCQlkYXRhLnJzeiA9IHZvdS0+b3RmcHB1ICsgQVVYX1JTWl9PRkZT RVQ7Cj4gKwkJemNydGMtPmNobnJlZyA9IHZvdS0+b3NkICsgT1NEX0FVWF9DSE47Cj4gKwkJemNy dGMtPnJlZ3MgPSAmYXV4X2NydGNfcmVnczsKPiArCQl6Y3J0Yy0+Yml0cyA9ICZhdXhfY3J0Y19i aXRzOwo+ICsJfQo+ICsKPiArCXpjcnRjLT5waXhjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAoY2hu X3R5cGUgPT0gVk9VX0NITl9NQUlOKSA/Cj4gKwkJCQkJICAibWFpbl93Y2xrIiA6ICJhdXhfd2Ns ayIpOwo+ICsJaWYgKElTX0VSUih6Y3J0Yy0+cGl4Y2xrKSkgewo+ICsJCXJldCA9IFBUUl9FUlIo emNydGMtPnBpeGNsayk7Cj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHBpeCBjbGs6 ICVkXG4iLCByZXQpOwoKRFJNX0VSUk9SKCkgLSBoZXJlIGFuZCBpbiBvdGhlciBwbGFjZXMgaW4g eW91ciBwYXRjaAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==