From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v5 1/2] drm/bridge: add Silicon Image SiI9234 driver Date: Fri, 06 Oct 2017 14:14:11 +0200 Message-ID: <0ef3a762-ec8d-ea01-f120-d5dd00d3d846@samsung.com> References: <1507212431-5801-1-git-send-email-m.purski@samsung.com> <1507212431-5801-2-git-send-email-m.purski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <1507212431-5801-2-git-send-email-m.purski@samsung.com> Content-language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maciej Purski , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org Cc: mark.rutland@arm.com, b.zolnierkie@samsung.com, krzk@kernel.org, robh+dt@kernel.org, Laurent.pinchart@ideasonboard.com, m.szyprowski@samsung.com List-Id: devicetree@vger.kernel.org T24gMDUuMTAuMjAxNyAxNjowNywgTWFjaWVqIFB1cnNraSB3cm90ZToKPiBTaUk5MjM0IHRyYW5z bWl0dGVyIGNvbnZlcnRzIGVUTURTL0hETUkgc2lnbmFsIHRvIE1ITCAxLjAuCj4gSXQgaXMgY29u dHJvbGxlZCB2aWEgSTJDIGJ1cy4gSXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIKPiBkZXZpY2Vz IGluIHZpZGVvIHBpcGVsaW5lIGlzIHBlcmZvcm1lZCBtYWlubHkgb24gSFcgbGV2ZWwuCj4gVGhl IG9ubHkgaW50ZXJhY3Rpb24gaXQgZG9lcyBvbiBkZXZpY2UgZHJpdmVyIGxldmVsIGlzCj4gZmls dGVyaW5nLW91dCB1bnN1cHBvcnRlZCB2aWRlbyBtb2RlcywgaXQgZXhwb3NlcyBkcm1fYnJpZGdl Cj4gaW50ZXJmYWNlIHRvIHBlcmZvcm0gdGhpcyBvcGVyYXRpb24uCj4KPiBUaGlzIHBhdGNoIGlz IGJhc2VkIG9uIHRoZSBjb2RlIHJlZmFjdG9yZWQgYnkgVG9tYXN6IFN0YW5pc2xhd3NraQo+IDx0 LnN0YW5pc2xhd3NAc2Ftc3VuZy5jb20+LCB3aGljaCB3YXMgaW5pdGlhbGx5IGRldmVsb3BlZCBi eToKPiBBZGFtIEhhbXBzb24gPGFoYW1wc29uQHN0YS5zYW1zdW5nLmNvbT4KPiBFcmlrIEdpbGxp bmcgPGtvbmtlcnNAYW5kcm9pZC5jb20+Cj4gU2hhbmthciBCYW5kYWwgPHNoYW5rYXIuYkBzYW1z dW5nLmNvbT4KPiBEaGFyYW0gS3VtYXIgPGRoYXJhbS5rckBzYW1zdW5nLmNvbT4KPgo+IFNpZ25l ZC1vZmYtYnk6IE1hY2llaiBQdXJza2kgPG0ucHVyc2tpQHNhbXN1bmcuY29tPgo+IEFja2VkLWJ5 OiBSb2IgSGVycmluZyA8cm9iaEBrZXJuZWwub3JnPiBbZm9yIGR0IGJpbmRpbmdzXQoKUmV2aWV3 ZWQtYnk6IEFuZHJ6ZWogSGFqZGEgPGEuaGFqZGFAc2Ftc3VuZy5jb20+CgpJIHdpbGwgcXVldWUg aXQgdG8gZHJtLW1pc2MuCgoKwqAtLQpSZWdhcmRzCkFuZHJ6ZWoKCj4gLS0tCj4gIC4uLi9kZXZp Y2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3NpaTkyMzQudHh0IHwgIDQ5ICsKPiAgZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAgIDggKwo+ ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICB8ICAg MSArCj4gIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jICAgICAgICAgICAgICAgICAg IHwgOTk0ICsrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDEwNTIgaW5z ZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3NpaTkyMzQudHh0Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYwo+Cj4gZGlmZiAtLWdpdCBhL0RvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyaWRnZS9zaWk5MjM0LnR4dCBi L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyaWRnZS9zaWk5MjM0 LnR4dAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uODgwNDFiYQo+IC0t LSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlz cGxheS9icmlkZ2Uvc2lpOTIzNC50eHQKPiBAQCAtMCwwICsxLDQ5IEBACj4gK1NpbGljb24gSW1h Z2UgU2lJOTIzNCBIRE1JL01ITCBicmlkZ2UgYmluZGluZ3MKPiArCj4gK1JlcXVpcmVkIHByb3Bl cnRpZXM6Cj4gKwktIGNvbXBhdGlibGUgOiAic2lsLHNpaTkyMzQiLgo+ICsJLSByZWcgOiBJMkMg YWRkcmVzcyBmb3IgVFBJIGludGVyZmFjZSwgdXNlIDB4MzkKPiArCS0gYXZjYzMzLXN1cHBseSA6 IE1ITC9VU0IgU3dpdGNoIFN1cHBseSBWb2x0YWdlICgzLjNWKQo+ICsJLSBpb3ZjYzE4LXN1cHBs eSA6IEkvTyBTdXBwbHkgVm9sdGFnZSAoMS44VikKPiArCS0gYXZjYzEyLXN1cHBseSA6IFRNRFMg QW5hbG9nIFN1cHBseSBWb2x0YWdlICgxLjJWKQo+ICsJLSBjdmNjMTItc3VwcGx5IDogRGlnaXRh bCBDb3JlIFN1cHBseSBWb2x0YWdlICgxLjJWKQo+ICsJLSBpbnRlcnJ1cHRzLCBpbnRlcnJ1cHQt cGFyZW50OiBpbnRlcnJ1cHQgc3BlY2lmaWVyIG9mIElOVCBwaW4KPiArCS0gcmVzZXQtZ3Bpb3M6 IGdwaW8gc3BlY2lmaWVyIG9mIFJFU0VUIHBpbiAoYWN0aXZlIGxvdykKPiArCS0gdmlkZW8gaW50 ZXJmYWNlczogRGV2aWNlIG5vZGUgY2FuIGNvbnRhaW4gdHdvIHZpZGVvIGludGVyZmFjZSBwb3J0 Cj4gKwkJCSAgICBub2RlcyBmb3IgSERNSSBlbmNvZGVyIGFuZCBjb25uZWN0b3IgYWNjb3JkaW5n IHRvIFsxXS4KPiArCQkJICAgIC0gcG9ydEAwIC0gTUhMIHRvIEhETUkKPiArCQkJICAgIC0gcG9y dEAxIC0gTUhMIHRvIGNvbm5lY3Rvcgo+ICsKPiArWzFdOiBEb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvbWVkaWEvdmlkZW8taW50ZXJmYWNlcy50eHQKPiArCj4gKwo+ICtFeGFtcGxl Ogo+ICsJc2lpOTIzNEAzOSB7Cj4gKwkJY29tcGF0aWJsZSA9ICJzaWwsc2lpOTIzNCI7Cj4gKwkJ cmVnID0gPDB4Mzk+Owo+ICsJCWF2Y2MzMy1zdXBwbHkgPSA8JnZjYzMzbWhsPjsKPiArCQlpb3Zj YzE4LXN1cHBseSA9IDwmdmNjMThtaGw+Owo+ICsJCWF2Y2MxMi1zdXBwbHkgPSA8JnZzaWwxMj47 Cj4gKwkJY3ZjYzEyLXN1cHBseSA9IDwmdnNpbDEyPjsKPiArCQlyZXNldC1ncGlvcyA9IDwmZ3Bm MyA0IEdQSU9fQUNUSVZFX0xPVz47Cj4gKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3BmMz47Cj4g KwkJaW50ZXJydXB0cyA9IDw1IElSUV9UWVBFX0xFVkVMX0hJR0g+Owo+ICsKPiArCQlwb3J0cyB7 Cj4gKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+ICsJCQkjc2l6ZS1jZWxscyA9IDwwPjsKPiAr Cj4gKwkJCXBvcnRAMCB7Cj4gKwkJCQlyZWcgPSA8MD47Cj4gKwkJCQltaGxfdG9faGRtaTogZW5k cG9pbnQgewo+ICsJCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmaGRtaV90b19taGw+Owo+ICsJCQkJ fTsKPiArCQkJfTsKPiArCQkJcG9ydEAxIHsKPiArCQkJCXJlZyA9IDwxPjsKPiArCQkJCW1obF90 b19jb25uZWN0b3I6IGVuZHBvaW50IHsKPiArCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JmNvbm5l Y3Rvcl90b19taGw+Owo+ICsJCQkJfTsKPiArCQkJfTsKPiArCQl9Owo+ICsJfTsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9LY29uZmlnCj4gaW5kZXggYWRmOWFlMC4uOWRiYTE2ZmQgMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9LY29uZmlnCj4gQEAgLTg0LDYgKzg0LDE0IEBAIGNvbmZpZyBEUk1fU0lJOTAyWAo+ICAJLS0t aGVscC0tLQo+ICAJICBTaWxpY29uIEltYWdlIHNpaTkwMnggYnJpZGdlIGNoaXAgZHJpdmVyLgo+ ICAKPiArY29uZmlnIERSTV9TSUk5MjM0Cj4gKwl0cmlzdGF0ZSAiU2lsaWNvbiBJbWFnZSBTSUk5 MjM0IEhETUkvTUhMIGJyaWRnZSIKPiArCWRlcGVuZHMgb24gT0YKPiArCS0tLWhlbHAtLS0KPiAr CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgTUhMIGludGVyZmFjZS4K PiArCSAgSXQgaXMgYW4gSTJDIGRyaXZlciwgdGhhdCBkZXRlY3RzIGNvbm5lY3Rpb24gb2YgTUhM IGJyaWRnZQo+ICsJICBhbmQgc3RhcnRzIGVuY2Fwc3VsYXRpb24gb2YgSERNSSBzaWduYWwuCj4g Kwo+ICBjb25maWcgRFJNX1RPU0hJQkFfVEMzNTg3NjcKPiAgCXRyaXN0YXRlICJUb3NoaWJhIFRD MzU4NzY3IGVEUCBicmlkZ2UiCj4gIAlkZXBlbmRzIG9uIE9GCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2Vm aWxlCj4gaW5kZXggZGVmY2YxZS4uZTNkNWViMCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYnJpZGdlL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmls ZQo+IEBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfRFJNX05YUF9QVE4zNDYwKSArPSBueHAt cHRuMzQ2MC5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFSQURFX1BTODYyMikgKz0gcGFyYWRlLXBz ODYyMi5vCj4gIG9iai0kKENPTkZJR19EUk1fU0lMX1NJSTg2MjApICs9IHNpbC1zaWk4NjIwLm8K PiAgb2JqLSQoQ09ORklHX0RSTV9TSUk5MDJYKSArPSBzaWk5MDJ4Lm8KPiArb2JqLSQoQ09ORklH X0RSTV9TSUk5MjM0KSArPSBzaWk5MjM0Lm8KPiAgb2JqLSQoQ09ORklHX0RSTV9UT1NISUJBX1RD MzU4NzY3KSArPSB0YzM1ODc2Ny5vCj4gIG9iai0kKENPTkZJR19EUk1fQU5BTE9HSVhfRFApICs9 IGFuYWxvZ2l4Lwo+ICBvYmotJChDT05GSUdfRFJNX0kyQ19BRFY3NTExKSArPSBhZHY3NTExLwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3NpaTkyMzQuYyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2Uvc2lpOTIzNC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwLi5jNzcwMDA2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc2lpOTIzNC5jCj4gQEAgLTAsMCArMSw5OTQgQEAKPiArLyoKPiArICogQ29weXJpZ2h0 IChDKSAyMDE3IFNhbXN1bmcgRWxlY3Ryb25pY3MKPiArICoKPiArICogQXV0aG9yczoKPiArICog ICAgVG9tYXN6IFN0YW5pc2xhd3NraSA8dC5zdGFuaXNsYXdzQHNhbXN1bmcuY29tPgo+ICsgKiAg ICBNYWNpZWogUHVyc2tpIDxtLnB1cnNraUBzYW1zdW5nLmNvbT4KPiArICoKPiArICogQmFzZWQg b24gc2lpOTIzNCBkcml2ZXIgY3JlYXRlZCBieToKPiArICogICAgQWRhbSBIYW1wc29uIDxhaGFt cHNvbkBzdGEuc2Ftc3VuZy5jb20+Cj4gKyAqICAgIEVyaWsgR2lsbGluZyA8a29ua2Vyc0BhbmRy b2lkLmNvbT4KPiArICogICAgU2hhbmthciBCYW5kYWwgPHNoYW5rYXIuYkBzYW1zdW5nLmNvbT4K PiArICogICAgRGhhcmFtIEt1bWFyIDxkaGFyYW0ua3JAc2Ftc3VuZy5jb20+Cj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtCj4gKyAqCj4gKyAqLwo+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9taGwuaD4KPiArI2luY2x1 ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9lZGlkLmg+Cj4gKwo+ICsj aW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+ICsjaW5j bHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsjaW5jbHVkZSA8bGludXgvaTJjLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPgo+ ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Iv Y29uc3VtZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArCj4gKyNkZWZpbmUgQ0JV U19ERVZDQVBfT0ZGU0VUCQkweDgwCj4gKwo+ICsjZGVmaW5lIFNJSTkyMzRfTUhMX1ZFUlNJT04J CTB4MTEKPiArI2RlZmluZSBTSUk5MjM0X1NDUkFUQ0hQQURfU0laRQkJMHgxMAo+ICsjZGVmaW5l IFNJSTkyMzRfSU5UX1NUQVRfU0laRQkJMHgzMwo+ICsKPiArI2RlZmluZSBCSVRfVE1EU19DQ1RS TF9UTURTX09FCQlCSVQoNCkKPiArI2RlZmluZSBNSExfSFBEX09VVF9PVlJfRU4JCUJJVCg0KQo+ ICsjZGVmaW5lIE1ITF9IUERfT1VUX09WUl9WQUwJCUJJVCg1KQo+ICsjZGVmaW5lIE1ITF9JTklU X1RJTUVPVVQJCTB4MEMKPiArCj4gKy8qIE1ITCBUeCByZWdpc3RlcnMgYW5kIGJpdHMgKi8KPiAr I2RlZmluZSBNSExfVFhfU1JTVAkJCTB4MDUKPiArI2RlZmluZSBNSExfVFhfU1lTU1RBVF9SRUcJ CTB4MDkKPiArI2RlZmluZSBNSExfVFhfSU5UUjFfUkVHCQkweDcxCj4gKyNkZWZpbmUgTUhMX1RY X0lOVFI0X1JFRwkJMHg3NAo+ICsjZGVmaW5lIE1ITF9UWF9JTlRSMV9FTkFCTEVfUkVHCQkweDc1 Cj4gKyNkZWZpbmUgTUhMX1RYX0lOVFI0X0VOQUJMRV9SRUcJCTB4NzgKPiArI2RlZmluZSBNSExf VFhfSU5UX0NUUkxfUkVHCQkweDc5Cj4gKyNkZWZpbmUgTUhMX1RYX1RNRFNfQ0NUUkwJCTB4ODAK PiArI2RlZmluZSBNSExfVFhfRElTQ19DVFJMMV9SRUcJCTB4OTAKPiArI2RlZmluZSBNSExfVFhf RElTQ19DVFJMMl9SRUcJCTB4OTEKPiArI2RlZmluZSBNSExfVFhfRElTQ19DVFJMM19SRUcJCTB4 OTIKPiArI2RlZmluZSBNSExfVFhfRElTQ19DVFJMNF9SRUcJCTB4OTMKPiArI2RlZmluZSBNSExf VFhfRElTQ19DVFJMNV9SRUcJCTB4OTQKPiArI2RlZmluZSBNSExfVFhfRElTQ19DVFJMNl9SRUcJ CTB4OTUKPiArI2RlZmluZSBNSExfVFhfRElTQ19DVFJMN19SRUcJCTB4OTYKPiArI2RlZmluZSBN SExfVFhfRElTQ19DVFJMOF9SRUcJCTB4OTcKPiArI2RlZmluZSBNSExfVFhfU1RBVDJfUkVHCQkw eDk5Cj4gKyNkZWZpbmUgTUhMX1RYX01ITFRYX0NUTDFfUkVHCQkweEEwCj4gKyNkZWZpbmUgTUhM X1RYX01ITFRYX0NUTDJfUkVHCQkweEExCj4gKyNkZWZpbmUgTUhMX1RYX01ITFRYX0NUTDRfUkVH CQkweEEzCj4gKyNkZWZpbmUgTUhMX1RYX01ITFRYX0NUTDZfUkVHCQkweEE1Cj4gKyNkZWZpbmUg TUhMX1RYX01ITFRYX0NUTDdfUkVHCQkweEE2Cj4gKwo+ICsjZGVmaW5lIFJTRU5fU1RBVFVTCQkJ QklUKDIpCj4gKyNkZWZpbmUgSFBEX0NIQU5HRV9JTlQJCQlCSVQoNikKPiArI2RlZmluZSBSU0VO X0NIQU5HRV9JTlQJCQlCSVQoNSkKPiArI2RlZmluZSBSR05EX1JFQURZX0lOVAkJCUJJVCg2KQo+ ICsjZGVmaW5lIFZCVVNfTE9XX0lOVAkJCUJJVCg1KQo+ICsjZGVmaW5lIENCVVNfTEtPVVRfSU5U CQkJQklUKDQpCj4gKyNkZWZpbmUgTUhMX0RJU0NfRkFJTF9JTlQJCUJJVCgzKQo+ICsjZGVmaW5l IE1ITF9FU1RfSU5UCQkJQklUKDIpCj4gKyNkZWZpbmUgSFBEX0NIQU5HRV9JTlRfTUFTSwkJQklU KDYpCj4gKyNkZWZpbmUgUlNFTl9DSEFOR0VfSU5UX01BU0sJCUJJVCg1KQo+ICsKPiArI2RlZmlu ZSBSR05EX1JFQURZX01BU0sJCQlCSVQoNikKPiArI2RlZmluZSBDQlVTX0xLT1VUX01BU0sJCQlC SVQoNCkKPiArI2RlZmluZSBNSExfRElTQ19GQUlMX01BU0sJCUJJVCgzKQo+ICsjZGVmaW5lIE1I TF9FU1RfTUFTSwkJCUJJVCgyKQo+ICsKPiArI2RlZmluZSBTS0lQX0dORAkJCUJJVCg2KQo+ICsK PiArI2RlZmluZSBBVFRfVEhSRVNIX1NISUZUCQkweDA0Cj4gKyNkZWZpbmUgQVRUX1RIUkVTSF9N QVNLCQkJKDB4MDMgPDwgQVRUX1RIUkVTSF9TSElGVCkKPiArI2RlZmluZSBVU0JfRF9PRU4JCQlC SVQoMykKPiArI2RlZmluZSBERUdMSVRDSF9USU1FX01BU0sJCTB4MDcKPiArI2RlZmluZSBERUdM SVRDSF9USU1FXzJNUwkJMAo+ICsjZGVmaW5lIERFR0xJVENIX1RJTUVfNE1TCQkxCj4gKyNkZWZp bmUgREVHTElUQ0hfVElNRV84TVMJCTIKPiArI2RlZmluZSBERUdMSVRDSF9USU1FXzE2TVMJCTMK PiArI2RlZmluZSBERUdMSVRDSF9USU1FXzQwTVMJCTQKPiArI2RlZmluZSBERUdMSVRDSF9USU1F XzUwTVMJCTUKPiArI2RlZmluZSBERUdMSVRDSF9USU1FXzYwTVMJCTYKPiArI2RlZmluZSBERUdM SVRDSF9USU1FXzEyOE1TCQk3Cj4gKwo+ICsjZGVmaW5lIFVTQl9EX09WUgkJCUJJVCg3KQo+ICsj ZGVmaW5lIFVTQl9JRF9PVlIJCQlCSVQoNikKPiArI2RlZmluZSBEVlJGTFRfU0VMCQkJQklUKDUp Cj4gKyNkZWZpbmUgQkxPQ0tfUkdORF9JTlQJCQlCSVQoNCkKPiArI2RlZmluZSBTS0lQX0RFRwkJ CUJJVCgzKQo+ICsjZGVmaW5lIENJMkNBX1BPTAkJCUJJVCgyKQo+ICsjZGVmaW5lIENJMkNBX1dL VVAJCQlCSVQoMSkKPiArI2RlZmluZSBTSU5HTEVfQVRUCQkJQklUKDApCj4gKwo+ICsjZGVmaW5l IFVTQl9EX09ETgkJCUJJVCg1KQo+ICsjZGVmaW5lIFZCVVNfQ0hFQ0sJCQlCSVQoMikKPiArI2Rl ZmluZSBSR05EX0lOVFBfTUFTSwkJCTB4MDMKPiArI2RlZmluZSBSR05EX0lOVFBfT1BFTgkJCTAK PiArI2RlZmluZSBSR05EX0lOVFBfMksJCQkxCj4gKyNkZWZpbmUgUkdORF9JTlRQXzFLCQkJMgo+ ICsjZGVmaW5lIFJHTkRfSU5UUF9TSE9SVAkJCTMKPiArCj4gKy8qIEhETUkgcmVnaXN0ZXJzICov Cj4gKyNkZWZpbmUgSERNSV9SWF9UTURTMF9DQ1RSTDFfUkVHCTB4MTAKPiArI2RlZmluZSBIRE1J X1JYX1RNRFNfQ0xLX0VOX1JFRwkJMHgxMQo+ICsjZGVmaW5lIEhETUlfUlhfVE1EU19DSF9FTl9S RUcJCTB4MTIKPiArI2RlZmluZSBIRE1JX1JYX1BMTF9DQUxSRUZTRUxfUkVHCTB4MTcKPiArI2Rl ZmluZSBIRE1JX1JYX1BMTF9WQ09DQUxfUkVHCQkweDFBCj4gKyNkZWZpbmUgSERNSV9SWF9FUV9E QVRBMF9SRUcJCTB4MjIKPiArI2RlZmluZSBIRE1JX1JYX0VRX0RBVEExX1JFRwkJMHgyMwo+ICsj ZGVmaW5lIEhETUlfUlhfRVFfREFUQTJfUkVHCQkweDI0Cj4gKyNkZWZpbmUgSERNSV9SWF9FUV9E QVRBM19SRUcJCTB4MjUKPiArI2RlZmluZSBIRE1JX1JYX0VRX0RBVEE0X1JFRwkJMHgyNgo+ICsj ZGVmaW5lIEhETUlfUlhfVE1EU19aT05FX0NUUkxfUkVHCTB4NEMKPiArI2RlZmluZSBIRE1JX1JY X1RNRFNfTU9ERV9DVFJMX1JFRwkweDRECj4gKwo+ICsvKiBDQlVTIHJlZ2lzdGVycyAqLwo+ICsj ZGVmaW5lIENCVVNfSU5UX1NUQVRVU18xX1JFRwkJMHgwOAo+ICsjZGVmaW5lIENCVVNfSU5UUjFf RU5BQkxFX1JFRwkJMHgwOQo+ICsjZGVmaW5lIENCVVNfTVNDX1JFUV9BQk9SVF9SRUFTT05fUkVH CTB4MEQKPiArI2RlZmluZSBDQlVTX0lOVF9TVEFUVVNfMl9SRUcJCTB4MUUKPiArI2RlZmluZSBD QlVTX0lOVFIyX0VOQUJMRV9SRUcJCTB4MUYKPiArI2RlZmluZSBDQlVTX0xJTktfQ09OVFJPTF8y X1JFRwkJMHgzMQo+ICsjZGVmaW5lIENCVVNfTUhMX1NUQVRVU19SRUdfMAkJMHhCMAo+ICsjZGVm aW5lIENCVVNfTUhMX1NUQVRVU19SRUdfMQkJMHhCMQo+ICsKPiArI2RlZmluZSBCSVRfQ0JVU19S RVNFVAkJCUJJVCgzKQo+ICsjZGVmaW5lIFNFVF9IUERfRE9XTlNUUkVBTQkJQklUKDYpCj4gKwo+ ICsvKiBUUEkgcmVnaXN0ZXJzICovCj4gKyNkZWZpbmUgVFBJX0RQRF9SRUcJCQkweDNECj4gKwo+ ICsvKiBUaW1lb3V0cyBpbiBtc2VjICovCj4gKyNkZWZpbmUgVF9TUkNfVkJVU19DQlVTX1RPX1NU QUJMRQkyMDAKPiArI2RlZmluZSBUX1NSQ19DQlVTX0ZMT0FUCQkxMDAKPiArI2RlZmluZSBUX1NS Q19DQlVTX0RFR0xJVENICQkyCj4gKyNkZWZpbmUgVF9TUkNfUlhTRU5TRV9ERUdMSVRDSAkJMTEw Cj4gKwo+ICsjZGVmaW5lIE1ITDFfTUFYX0NMSwkJCTc1MDAwIC8qIGluIGtIeiAqLwo+ICsKPiAr I2RlZmluZSBJMkNfVFBJX0FERFIJCQkweDNECj4gKyNkZWZpbmUgSTJDX0hETUlfQUREUgkJCTB4 NDkKPiArI2RlZmluZSBJMkNfQ0JVU19BRERSCQkJMHg2NAo+ICsKPiArZW51bSBzaWk5MjM0X3N0 YXRlIHsKPiArCVNUX09GRiwKPiArCVNUX0QzLAo+ICsJU1RfUkdORF9JTklULAo+ICsJU1RfUkdO RF8xSywKPiArCVNUX1JTRU5fSElHSCwKPiArCVNUX01ITF9FU1RBQkxJU0hFRCwKPiArCVNUX0ZB SUxVUkVfRElTQ09WRVJZLAo+ICsJU1RfRkFJTFVSRSwKPiArfTsKPiArCj4gK3N0cnVjdCBzaWk5 MjM0IHsKPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnRbNF07Cj4gKwlzdHJ1Y3QgZHJtX2Jy aWRnZSBicmlkZ2U7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgZ3Bpb19kZXNj ICpncGlvX3Jlc2V0Owo+ICsJaW50IGkyY19lcnJvcjsKPiArCXN0cnVjdCByZWd1bGF0b3JfYnVs a19kYXRhIHN1cHBsaWVzWzRdOwo+ICsKPiArCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBQcm90ZWN0 cyBmaWVsZHMgYmVsb3cgYW5kIGRldmljZSByZWdpc3RlcnMgKi8KPiArCWVudW0gc2lpOTIzNF9z dGF0ZSBzdGF0ZTsKPiArfTsKPiArCj4gK2VudW0gc2lpOTIzNF9jbGllbnRfaWQgewo+ICsJSTJD X01ITCwKPiArCUkyQ19UUEksCj4gKwlJMkNfSERNSSwKPiArCUkyQ19DQlVTLAo+ICt9Owo+ICsK PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzaWk5MjM0X2NsaWVudF9uYW1lW10gPSB7Cj4g KwlbSTJDX01ITF0gPSAiTUhMIiwKPiArCVtJMkNfVFBJXSA9ICJUUEkiLAo+ICsJW0kyQ19IRE1J XSA9ICJIRE1JIiwKPiArCVtJMkNfQ0JVU10gPSAiQ0JVUyIsCj4gK307Cj4gKwo+ICtzdGF0aWMg aW50IHNpaTkyMzRfd3JpdGViKHN0cnVjdCBzaWk5MjM0ICpjdHgsIGludCBpZCwgaW50IG9mZnNl dCwKPiArCQkJICBpbnQgdmFsdWUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50ID0gY3R4LT5jbGllbnRbaWRdOwo+ICsKPiArCWlmIChjdHgtPmkyY19lcnJv cikKPiArCQlyZXR1cm4gY3R4LT5pMmNfZXJyb3I7Cj4gKwo+ICsJcmV0ID0gaTJjX3NtYnVzX3dy aXRlX2J5dGVfZGF0YShjbGllbnQsIG9mZnNldCwgdmFsdWUpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJZGV2X2VycihjdHgtPmRldiwgIndyaXRlYjogJTRzWzB4JTAyeF0gPC0gMHglMDJ4XG4iLAo+ ICsJCQlzaWk5MjM0X2NsaWVudF9uYW1lW2lkXSwgb2Zmc2V0LCB2YWx1ZSk7Cj4gKwljdHgtPmky Y19lcnJvciA9IHJldDsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHNpaTkyMzRfd3JpdGVibShzdHJ1Y3Qgc2lpOTIzNCAqY3R4LCBpbnQgaWQsIGludCBvZmZzZXQs Cj4gKwkJCSAgIGludCB2YWx1ZSwgaW50IG1hc2spCj4gK3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1 Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY3R4LT5jbGllbnRbaWRdOwo+ICsKPiArCWlmIChjdHgt PmkyY19lcnJvcikKPiArCQlyZXR1cm4gY3R4LT5pMmNfZXJyb3I7Cj4gKwo+ICsJcmV0ID0gaTJj X3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBvZmZzZXQpOwo+ICsJaWYgKHJldCA8IDApIHsKPiAr CQlkZXZfZXJyKGN0eC0+ZGV2LCAid3JpdGVibTogJTRzWzB4JTAyeF0gPC0gMHglMDJ4XG4iLAo+ ICsJCQlzaWk5MjM0X2NsaWVudF9uYW1lW2lkXSwgb2Zmc2V0LCB2YWx1ZSk7Cj4gKwkJY3R4LT5p MmNfZXJyb3IgPSByZXQ7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBpMmNf c21idXNfcmVhZF9ieXRlKGNsaWVudCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIo Y3R4LT5kZXYsICJ3cml0ZWJtOiAlNHNbMHglMDJ4XSA8LSAweCUwMnhcbiIsCj4gKwkJCXNpaTky MzRfY2xpZW50X25hbWVbaWRdLCBvZmZzZXQsIHZhbHVlKTsKPiArCQljdHgtPmkyY19lcnJvciA9 IHJldDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXZhbHVlID0gKHZhbHVlICYgbWFz aykgfCAocmV0ICYgfm1hc2spOwo+ICsKPiArCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2Rh dGEoY2xpZW50LCBvZmZzZXQsIHZhbHVlKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2Vy cihjdHgtPmRldiwgIndyaXRlYm06ICU0c1sweCUwMnhdIDwtIDB4JTAyeFxuIiwKPiArCQkJc2lp OTIzNF9jbGllbnRfbmFtZVtpZF0sIG9mZnNldCwgdmFsdWUpOwo+ICsJCWN0eC0+aTJjX2Vycm9y ID0gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg c2lpOTIzNF9yZWFkYihzdHJ1Y3Qgc2lpOTIzNCAqY3R4LCBpbnQgaWQsIGludCBvZmZzZXQpCj4g K3sKPiArCWludCByZXQ7Cj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY3R4LT5jbGll bnRbaWRdOwo+ICsKPiArCWlmIChjdHgtPmkyY19lcnJvcikKPiArCQlyZXR1cm4gY3R4LT5pMmNf ZXJyb3I7Cj4gKwo+ICsJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBvZmZzZXQp Owo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAicmVhZGI6ICU0c1sw eCUwMnhdXG4iLAo+ICsJCQlzaWk5MjM0X2NsaWVudF9uYW1lW2lkXSwgb2Zmc2V0KTsKPiArCQlj dHgtPmkyY19lcnJvciA9IHJldDsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldCA9 IGkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2 X2VycihjdHgtPmRldiwgInJlYWRiOiAlNHNbMHglMDJ4XVxuIiwKPiArCQkJc2lpOTIzNF9jbGll bnRfbmFtZVtpZF0sIG9mZnNldCk7Cj4gKwkJY3R4LT5pMmNfZXJyb3IgPSByZXQ7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBzaWk5MjM0X2NsZWFyX2Vy cm9yKHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sKPiArCWludCByZXQgPSBjdHgtPmkyY19lcnJv cjsKPiArCj4gKwljdHgtPmkyY19lcnJvciA9IDA7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ ICsKPiArI2RlZmluZSBtaGxfdHhfd3JpdGViKHNpaTkyMzQsIG9mZnNldCwgdmFsdWUpIFwKPiAr CXNpaTkyMzRfd3JpdGViKHNpaTkyMzQsIEkyQ19NSEwsIG9mZnNldCwgdmFsdWUpCj4gKyNkZWZp bmUgbWhsX3R4X3dyaXRlYm0oc2lpOTIzNCwgb2Zmc2V0LCB2YWx1ZSwgbWFzaykgXAo+ICsJc2lp OTIzNF93cml0ZWJtKHNpaTkyMzQsIEkyQ19NSEwsIG9mZnNldCwgdmFsdWUsIG1hc2spCj4gKyNk ZWZpbmUgbWhsX3R4X3JlYWRiKHNpaTkyMzQsIG9mZnNldCkgXAo+ICsJc2lpOTIzNF9yZWFkYihz aWk5MjM0LCBJMkNfTUhMLCBvZmZzZXQpCj4gKyNkZWZpbmUgY2J1c193cml0ZWIoc2lpOTIzNCwg b2Zmc2V0LCB2YWx1ZSkgXAo+ICsJc2lpOTIzNF93cml0ZWIoc2lpOTIzNCwgSTJDX0NCVVMsIG9m ZnNldCwgdmFsdWUpCj4gKyNkZWZpbmUgY2J1c193cml0ZWJtKHNpaTkyMzQsIG9mZnNldCwgdmFs dWUsIG1hc2spIFwKPiArCXNpaTkyMzRfd3JpdGVibShzaWk5MjM0LCBJMkNfQ0JVUywgb2Zmc2V0 LCB2YWx1ZSwgbWFzaykKPiArI2RlZmluZSBjYnVzX3JlYWRiKHNpaTkyMzQsIG9mZnNldCkgXAo+ ICsJc2lpOTIzNF9yZWFkYihzaWk5MjM0LCBJMkNfQ0JVUywgb2Zmc2V0KQo+ICsjZGVmaW5lIGhk bWlfd3JpdGViKHNpaTkyMzQsIG9mZnNldCwgdmFsdWUpIFwKPiArCXNpaTkyMzRfd3JpdGViKHNp aTkyMzQsIEkyQ19IRE1JLCBvZmZzZXQsIHZhbHVlKQo+ICsjZGVmaW5lIGhkbWlfd3JpdGVibShz aWk5MjM0LCBvZmZzZXQsIHZhbHVlLCBtYXNrKSBcCj4gKwlzaWk5MjM0X3dyaXRlYm0oc2lpOTIz NCwgSTJDX0hETUksIG9mZnNldCwgdmFsdWUsIG1hc2spCj4gKyNkZWZpbmUgaGRtaV9yZWFkYihz aWk5MjM0LCBvZmZzZXQpIFwKPiArCXNpaTkyMzRfcmVhZGIoc2lpOTIzNCwgSTJDX0hETUksIG9m ZnNldCkKPiArI2RlZmluZSB0cGlfd3JpdGViKHNpaTkyMzQsIG9mZnNldCwgdmFsdWUpIFwKPiAr CXNpaTkyMzRfd3JpdGViKHNpaTkyMzQsIEkyQ19UUEksIG9mZnNldCwgdmFsdWUpCj4gKyNkZWZp bmUgdHBpX3dyaXRlYm0oc2lpOTIzNCwgb2Zmc2V0LCB2YWx1ZSwgbWFzaykgXAo+ICsJc2lpOTIz NF93cml0ZWJtKHNpaTkyMzQsIEkyQ19UUEksIG9mZnNldCwgdmFsdWUsIG1hc2spCj4gKyNkZWZp bmUgdHBpX3JlYWRiKHNpaTkyMzQsIG9mZnNldCkgXAo+ICsJc2lpOTIzNF9yZWFkYihzaWk5MjM0 LCBJMkNfVFBJLCBvZmZzZXQpCj4gKwo+ICtzdGF0aWMgdTggc2lpOTIzNF90bWRzX2NvbnRyb2wo c3RydWN0IHNpaTkyMzQgKmN0eCwgYm9vbCBlbmFibGUpCj4gK3sKPiArCW1obF90eF93cml0ZWJt KGN0eCwgTUhMX1RYX1RNRFNfQ0NUUkwsIGVuYWJsZSA/IH4wIDogMCwKPiArCQkgICAgICAgQklU X1RNRFNfQ0NUUkxfVE1EU19PRSk7Cj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1ITF9UWF9JTlRf Q1RSTF9SRUcsIGVuYWJsZSA/IH4wIDogMCwKPiArCQkgICAgICAgTUhMX0hQRF9PVVRfT1ZSX0VO IHwgTUhMX0hQRF9PVVRfT1ZSX1ZBTCk7Cj4gKwlyZXR1cm4gc2lpOTIzNF9jbGVhcl9lcnJvcihj dHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNpaTkyMzRfY2J1c19yZXNldChzdHJ1Y3Qgc2lp OTIzNCAqY3R4KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1I TF9UWF9TUlNULCB+MCwgQklUX0NCVVNfUkVTRVQpOwo+ICsJbXNsZWVwKFRfU1JDX0NCVVNfREVH TElUQ0gpOwo+ICsJbWhsX3R4X3dyaXRlYm0oY3R4LCBNSExfVFhfU1JTVCwgMCwgQklUX0NCVVNf UkVTRVQpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKPiArCQkvKgo+ICsJCSAq IEVuYWJsZSBXUklURV9TVEFUIGludGVycnVwdCBmb3Igd3JpdGVzIHRvIGFsbAo+ICsJCSAqIDQg TVNDIFN0YXR1cyByZWdpc3RlcnMuCj4gKwkJICovCj4gKwkJY2J1c193cml0ZWIoY3R4LCAweEUw ICsgaSwgMHhGMik7Cj4gKwkJLyoKPiArCQkgKiBFbmFibGUgU0VUX0lOVCBpbnRlcnJ1cHQgZm9y IHdyaXRlcyB0byBhbGwKPiArCQkgKiA0IE1TQyBJbnRlcnJ1cHQgcmVnaXN0ZXJzLgo+ICsJCSAq Lwo+ICsJCWNidXNfd3JpdGViKGN0eCwgMHhGMCArIGksIDB4RjIpOwo+ICsJfQo+ICsKPiArCXJl dHVybiBzaWk5MjM0X2NsZWFyX2Vycm9yKGN0eCk7Cj4gK30KPiArCj4gKy8qIFJlcXVpcmUgdG8g Y2hlayBtaGwgaW1mb3JtYXRpb24gb2Ygc2Ftc3VuZyBpbiBjYnVzX2luaXRfcmVnaXN0ZXIgKi8K PiArc3RhdGljIGludCBzaWk5MjM0X2NidXNfaW5pdChzdHJ1Y3Qgc2lpOTIzNCAqY3R4KQo+ICt7 Cj4gKwljYnVzX3dyaXRlYihjdHgsIDB4MDcsIDB4RjIpOwo+ICsJY2J1c193cml0ZWIoY3R4LCAw eDQwLCAweDAzKTsKPiArCWNidXNfd3JpdGViKGN0eCwgMHg0MiwgMHgwNik7Cj4gKwljYnVzX3dy aXRlYihjdHgsIDB4MzYsIDB4MEMpOwo+ICsJY2J1c193cml0ZWIoY3R4LCAweDNELCAweEZEKTsK PiArCWNidXNfd3JpdGViKGN0eCwgMHgxQywgMHgwMSk7Cj4gKwljYnVzX3dyaXRlYihjdHgsIDB4 MUQsIDB4MEYpOwo+ICsJY2J1c193cml0ZWIoY3R4LCAweDQ0LCAweDAyKTsKPiArCS8qIFNldHVw IG91ciBkZXZjYXAgKi8KPiArCWNidXNfd3JpdGViKGN0eCwgQ0JVU19ERVZDQVBfT0ZGU0VUICsg TUhMX0RDQVBfREVWX1NUQVRFLCAweDAwKTsKPiArCWNidXNfd3JpdGViKGN0eCwgQ0JVU19ERVZD QVBfT0ZGU0VUICsgTUhMX0RDQVBfTUhMX1ZFUlNJT04sCj4gKwkJICAgIFNJSTkyMzRfTUhMX1ZF UlNJT04pOwo+ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExfRENB UF9DQVQsCj4gKwkJICAgIE1ITF9EQ0FQX0NBVF9TT1VSQ0UpOwo+ICsJY2J1c193cml0ZWIoY3R4 LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExfRENBUF9BRE9QVEVSX0lEX0gsIDB4MDEpOwo+ICsJ Y2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExfRENBUF9BRE9QVEVSX0lE X0wsIDB4NDEpOwo+ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExf RENBUF9WSURfTElOS19NT0RFLAo+ICsJCSAgICBNSExfRENBUF9WSURfTElOS19SR0I0NDQgfCBN SExfRENBUF9WSURfTElOS19ZQ0JDUjQ0NCk7Cj4gKwljYnVzX3dyaXRlYihjdHgsIENCVVNfREVW Q0FQX09GRlNFVCArIE1ITF9EQ0FQX1ZJREVPX1RZUEUsCj4gKwkJICAgIE1ITF9EQ0FQX1ZUX0dS QVBISUNTKTsKPiArCWNidXNfd3JpdGViKGN0eCwgQ0JVU19ERVZDQVBfT0ZGU0VUICsgTUhMX0RD QVBfTE9HX0RFVl9NQVAsCj4gKwkJICAgIE1ITF9EQ0FQX0xEX0dVSSk7Cj4gKwljYnVzX3dyaXRl YihjdHgsIENCVVNfREVWQ0FQX09GRlNFVCArIE1ITF9EQ0FQX0JBTkRXSURUSCwgMHgwRik7Cj4g KwljYnVzX3dyaXRlYihjdHgsIENCVVNfREVWQ0FQX09GRlNFVCArIE1ITF9EQ0FQX0ZFQVRVUkVf RkxBRywKPiArCQkgICAgTUhMX0RDQVBfRkVBVFVSRV9SQ1BfU1VQUE9SVCB8IE1ITF9EQ0FQX0ZF QVRVUkVfUkFQX1NVUFBPUlQKPiArCQkJfCBNSExfRENBUF9GRUFUVVJFX1NQX1NVUFBPUlQpOwo+ ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExfRENBUF9ERVZJQ0Vf SURfSCwgMHgwKTsKPiArCWNidXNfd3JpdGViKGN0eCwgQ0JVU19ERVZDQVBfT0ZGU0VUICsgTUhM X0RDQVBfREVWSUNFX0lEX0wsIDB4MCk7Cj4gKwljYnVzX3dyaXRlYihjdHgsIENCVVNfREVWQ0FQ X09GRlNFVCArIE1ITF9EQ0FQX1NDUkFUQ0hQQURfU0laRSwKPiArCQkgICAgU0lJOTIzNF9TQ1JB VENIUEFEX1NJWkUpOwo+ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBN SExfRENBUF9JTlRfU1RBVF9TSVpFLAo+ICsJCSAgICBTSUk5MjM0X0lOVF9TVEFUX1NJWkUpOwo+ ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX0RFVkNBUF9PRkZTRVQgKyBNSExfRENBUF9SRVNFUlZF RCwgMCk7Cj4gKwljYnVzX3dyaXRlYm0oY3R4LCAweDMxLCAweDBDLCAweDBDKTsKPiArCWNidXNf d3JpdGViKGN0eCwgMHgzMCwgMHgwMSk7Cj4gKwljYnVzX3dyaXRlYm0oY3R4LCAweDNDLCAweDMw LCAweDM4KTsKPiArCWNidXNfd3JpdGVibShjdHgsIDB4MjIsIDB4MEQsIDB4MEYpOwo+ICsJY2J1 c193cml0ZWJtKGN0eCwgMHgyRSwgMHgxNSwgMHgxNSk7Cj4gKwljYnVzX3dyaXRlYihjdHgsIENC VVNfSU5UUjFfRU5BQkxFX1JFRywgMCk7Cj4gKwljYnVzX3dyaXRlYihjdHgsIENCVVNfSU5UUjJf RU5BQkxFX1JFRywgMCk7Cj4gKwo+ICsJcmV0dXJuIHNpaTkyMzRfY2xlYXJfZXJyb3IoY3R4KTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgZm9yY2VfdXNiX2lkX3N3aXRjaF9vcGVuKHN0cnVjdCBz aWk5MjM0ICpjdHgpCj4gK3sKPiArCS8qIERpc2FibGUgQ0JVUyBkaXNjb3ZlcnkgKi8KPiArCW1o bF90eF93cml0ZWJtKGN0eCwgTUhMX1RYX0RJU0NfQ1RSTDFfUkVHLCAwLCAweDAxKTsKPiArCS8q IEZvcmNlIFVTQiBJRCBzd2l0Y2ggdG8gb3BlbiAqLwo+ICsJbWhsX3R4X3dyaXRlYm0oY3R4LCBN SExfVFhfRElTQ19DVFJMNl9SRUcsIH4wLCBVU0JfSURfT1ZSKTsKPiArCW1obF90eF93cml0ZWJt KGN0eCwgTUhMX1RYX0RJU0NfQ1RSTDNfUkVHLCB+MCwgMHg4Nik7Cj4gKwkvKiBGb3JjZSB1cHN0 cmVhbSBIUEQgdG8gMCB3aGVuIG5vdCBpbiBNSEwgbW9kZS4gKi8KPiArCW1obF90eF93cml0ZWJt KGN0eCwgTUhMX1RYX0lOVF9DVFJMX1JFRywgMCwgMHgzMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIHJlbGVhc2VfdXNiX2lkX3N3aXRjaF9vcGVuKHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sK PiArCW1zbGVlcChUX1NSQ19DQlVTX0ZMT0FUKTsKPiArCS8qIENsZWFyIFVTQiBJRCBzd2l0Y2gg dG8gb3BlbiAqLwo+ICsJbWhsX3R4X3dyaXRlYm0oY3R4LCBNSExfVFhfRElTQ19DVFJMNl9SRUcs IDAsIFVTQl9JRF9PVlIpOwo+ICsJLyogRW5hYmxlIENCVVMgZGlzY292ZXJ5ICovCj4gKwltaGxf dHhfd3JpdGVibShjdHgsIE1ITF9UWF9ESVNDX0NUUkwxX1JFRywgfjAsIDB4MDEpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IHNpaTkyMzRfcG93ZXJfaW5pdChzdHJ1Y3Qgc2lpOTIzNCAqY3R4KQo+ ICt7Cj4gKwkvKiBGb3JjZSB0aGUgU2lJOTIzNCBpbnRvIHRoZSBEMCBzdGF0ZS4gKi8KPiArCXRw aV93cml0ZWIoY3R4LCBUUElfRFBEX1JFRywgMHgzRik7Cj4gKwkvKiBFbmFibGUgVHhQTEwgQ2xv Y2sgKi8KPiArCWhkbWlfd3JpdGViKGN0eCwgSERNSV9SWF9UTURTX0NMS19FTl9SRUcsIDB4MDEp Owo+ICsJLyogRW5hYmxlIFR4IENsb2NrIFBhdGggJiBFcXVhbGl6ZXIgKi8KPiArCWhkbWlfd3Jp dGViKGN0eCwgSERNSV9SWF9UTURTX0NIX0VOX1JFRywgMHgxNSk7Cj4gKwkvKiBQb3dlciBVcCBU TURTICovCj4gKwltaGxfdHhfd3JpdGViKGN0eCwgMHgwOCwgMHgzNSk7Cj4gKwlyZXR1cm4gc2lp OTIzNF9jbGVhcl9lcnJvcihjdHgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNpaTkyMzRfaGRt aV9pbml0KHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sKPiArCWhkbWlfd3JpdGViKGN0eCwgSERN SV9SWF9UTURTMF9DQ1RSTDFfUkVHLCAweEMxKTsKPiArCWhkbWlfd3JpdGViKGN0eCwgSERNSV9S WF9QTExfQ0FMUkVGU0VMX1JFRywgMHgwMyk7Cj4gKwloZG1pX3dyaXRlYihjdHgsIEhETUlfUlhf UExMX1ZDT0NBTF9SRUcsIDB4MjApOwo+ICsJaGRtaV93cml0ZWIoY3R4LCBIRE1JX1JYX0VRX0RB VEEwX1JFRywgMHg4QSk7Cj4gKwloZG1pX3dyaXRlYihjdHgsIEhETUlfUlhfRVFfREFUQTFfUkVH LCAweDZBKTsKPiArCWhkbWlfd3JpdGViKGN0eCwgSERNSV9SWF9FUV9EQVRBMl9SRUcsIDB4QUEp Owo+ICsJaGRtaV93cml0ZWIoY3R4LCBIRE1JX1JYX0VRX0RBVEEzX1JFRywgMHhDQSk7Cj4gKwlo ZG1pX3dyaXRlYihjdHgsIEhETUlfUlhfRVFfREFUQTRfUkVHLCAweEVBKTsKPiArCWhkbWlfd3Jp dGViKGN0eCwgSERNSV9SWF9UTURTX1pPTkVfQ1RSTF9SRUcsIDB4QTApOwo+ICsJaGRtaV93cml0 ZWIoY3R4LCBIRE1JX1JYX1RNRFNfTU9ERV9DVFJMX1JFRywgMHgwMCk7Cj4gKwltaGxfdHhfd3Jp dGViKGN0eCwgTUhMX1RYX1RNRFNfQ0NUUkwsIDB4MzQpOwo+ICsJaGRtaV93cml0ZWIoY3R4LCAw eDQ1LCAweDQ0KTsKPiArCWhkbWlfd3JpdGViKGN0eCwgMHgzMSwgMHgwQSk7Cj4gKwloZG1pX3dy aXRlYihjdHgsIEhETUlfUlhfVE1EUzBfQ0NUUkwxX1JFRywgMHhDMSk7Cj4gKwo+ICsJcmV0dXJu IHNpaTkyMzRfY2xlYXJfZXJyb3IoY3R4KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBzaWk5MjM0 X21obF90eF9jdGxfaW50KHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sKPiArCW1obF90eF93cml0 ZWIoY3R4LCBNSExfVFhfTUhMVFhfQ1RMMV9SRUcsIDB4RDApOwo+ICsJbWhsX3R4X3dyaXRlYihj dHgsIE1ITF9UWF9NSExUWF9DVEwyX1JFRywgMHhGQyk7Cj4gKwltaGxfdHhfd3JpdGViKGN0eCwg TUhMX1RYX01ITFRYX0NUTDRfUkVHLCAweEVCKTsKPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExf VFhfTUhMVFhfQ1RMN19SRUcsIDB4MEMpOwo+ICsKPiArCXJldHVybiBzaWk5MjM0X2NsZWFyX2Vy cm9yKGN0eCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2lpOTIzNF9yZXNldChzdHJ1Y3Qgc2lp OTIzNCAqY3R4KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXNpaTkyMzRfY2xlYXJfZXJyb3Io Y3R4KTsKPiArCj4gKwlyZXQgPSBzaWk5MjM0X3Bvd2VyX2luaXQoY3R4KTsKPiArCWlmIChyZXQg PCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBzaWk5MjM0X2NidXNfcmVzZXQoY3R4KTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBzaWk5MjM0X2hkbWlf aW5pdChjdHgpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCXJldCA9IHNp aTkyMzRfbWhsX3R4X2N0bF9pbnQoY3R4KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJLyogRW5hYmxlIEhEQ1AgQ29tcGxpYW5jZSBzYWZldHkgKi8KPiArCW1obF90 eF93cml0ZWIoY3R4LCAweDJCLCAweDAxKTsKPiArCS8qIENCVVMgZGlzY292ZXJ5IGN5Y2xlIHRp bWUgZm9yIGVhY2ggZHJpdmUgYW5kIGZsb2F0ID0gMTUwdXMgKi8KPiArCW1obF90eF93cml0ZWJt KGN0eCwgTUhMX1RYX0RJU0NfQ1RSTDFfUkVHLCAweDA0LCAweDA2KTsKPiArCS8qIENsZWFyIGJp dCA2IChyZWdfc2tpcF9yZ25kKSAqLwo+ICsJbWhsX3R4X3dyaXRlYihjdHgsIE1ITF9UWF9ESVND X0NUUkwyX1JFRywgKDEgPDwgNykgLyogUmVzZXJ2ZWQgKi8KPiArCQkgICAgICB8IDIgPDwgQVRU X1RIUkVTSF9TSElGVCB8IERFR0xJVENIX1RJTUVfNTBNUyk7Cj4gKwkvKgo+ICsJICogQ2hhbmdl ZCBmcm9tIDY2IHRvIDY1IGZvciA5NFsxOjBdID0gMDEgPSA1ayByZWdfY2J1c21obF9wdXBfc2Vs Cj4gKwkgKiAxLjhWIENCVVMgVlRIICYgR05EIHRocmVzaG9sZAo+ICsJICogdG8gbWVldCBDVFMg My4zLjcuMiBzcGVjCj4gKwkgKi8KPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExfVFhfRElTQ19D VFJMNV9SRUcsIDB4NzcpOwo+ICsJY2J1c193cml0ZWJtKGN0eCwgQ0JVU19MSU5LX0NPTlRST0xf Ml9SRUcsIH4wLCBNSExfSU5JVF9USU1FT1VUKTsKPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExf VFhfTUhMVFhfQ1RMNl9SRUcsIDB4QTApOwo+ICsJLyogUkdORCAmIHNpbmdsZSBkaXNjb3Zlcnkg YXR0ZW1wdCAoUkdORCBibG9ja2luZykgKi8KPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExfVFhf RElTQ19DVFJMNl9SRUcsIEJMT0NLX1JHTkRfSU5UIHwKPiArCQkgICAgICBEVlJGTFRfU0VMIHwg U0lOR0xFX0FUVCk7Cj4gKwkvKiBVc2UgVkJVUyBwYXRoIG9mIGRpc2NvdmVyeSBzdGF0ZSBtYWNo aW5lICovCj4gKwltaGxfdHhfd3JpdGViKGN0eCwgTUhMX1RYX0RJU0NfQ1RSTDhfUkVHLCAwKTsK PiArCS8qIDB4OTJbM10gc2V0cyB0aGUgQ0JVUyAvIElEIHN3aXRjaCAqLwo+ICsJbWhsX3R4X3dy aXRlYm0oY3R4LCBNSExfVFhfRElTQ19DVFJMNl9SRUcsIH4wLCBVU0JfSURfT1ZSKTsKPiArCS8q Cj4gKwkgKiBUbyBhbGxvdyBSR05EIGVuZ2luZSB0byBvcGVyYXRlIGNvcnJlY3RseS4KPiArCSAq IFdoZW4gbW92aW5nIHRoZSBjaGlwIGZyb20gRDIgdG8gRDAgKHBvd2VyIHVwLCBpbml0IHJlZ3Mp Cj4gKwkgKiB0aGUgdmFsdWVzIHNob3VsZCBiZQo+ICsJICogOTRbMTowXSA9IDAxICByZWdfY2J1 c21obF9wdXBfc2VsWzE6MF0gc2hvdWxkIGJlIHNldCBmb3IgNWsKPiArCSAqIDkzWzc6Nl0gPSAx MCAgcmVnX2NidXNkaXNjX3B1cF9zZWxbMTowXSBzaG91bGQgYmUKPiArCSAqIHNldCBmb3IgMTBr IChkZWZhdWx0KQo+ICsJICogOTNbNTo0XSA9IDAwICByZWdfY2J1c2lkbGVfcHVwX3NlbFsxOjBd ID0gb3BlbiAoZGVmYXVsdCkKPiArCSAqLwo+ICsJbWhsX3R4X3dyaXRlYm0oY3R4LCBNSExfVFhf RElTQ19DVFJMM19SRUcsIH4wLCAweDg2KTsKPiArCS8qCj4gKwkgKiBDaGFuZ2UgZnJvbSBDQyB0 byA4QyB0byBtYXRjaCA1Swo+ICsJICogdG8gbWVldCBDVFMgMy4zLjcyIHNwZWMKPiArCSAqLwo+ ICsJbWhsX3R4X3dyaXRlYm0oY3R4LCBNSExfVFhfRElTQ19DVFJMNF9SRUcsIH4wLCAweDhDKTsK PiArCS8qIENvbmZpZ3VyZSB0aGUgaW50ZXJydXB0IGFzIGFjdGl2ZSBoaWdoICovCj4gKwltaGxf dHhfd3JpdGVibShjdHgsIE1ITF9UWF9JTlRfQ1RSTF9SRUcsIDAsIDB4MDYpOwo+ICsKPiArCW1z bGVlcCgyNSk7Cj4gKwo+ICsJLyogUmVsZWFzZSB1c2JfaWQgc3dpdGNoICovCj4gKwltaGxfdHhf d3JpdGVibShjdHgsIE1ITF9UWF9ESVNDX0NUUkw2X1JFRywgMCwgIFVTQl9JRF9PVlIpOwo+ICsJ bWhsX3R4X3dyaXRlYihjdHgsIE1ITF9UWF9ESVNDX0NUUkwxX1JFRywgMHgyNyk7Cj4gKwo+ICsJ cmV0ID0gc2lpOTIzNF9jbGVhcl9lcnJvcihjdHgpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0 dXJuIHJldDsKPiArCXJldCA9IHNpaTkyMzRfY2J1c19pbml0KGN0eCk7Cj4gKwlpZiAocmV0IDwg MCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIEVuYWJsZSBBdXRvIHNvZnQgcmVzZXQgb24g U0NEVCA9IDAgKi8KPiArCW1obF90eF93cml0ZWIoY3R4LCAweDA1LCAweDA0KTsKPiArCS8qIEhE TUkgVHJhbnNjb2RlIG1vZGUgZW5hYmxlICovCj4gKwltaGxfdHhfd3JpdGViKGN0eCwgMHgwRCwg MHgxQyk7Cj4gKwltaGxfdHhfd3JpdGViKGN0eCwgTUhMX1RYX0lOVFI0X0VOQUJMRV9SRUcsCj4g KwkJICAgICAgUkdORF9SRUFEWV9NQVNLIHwgQ0JVU19MS09VVF9NQVNLCj4gKwkJCXwgTUhMX0RJ U0NfRkFJTF9NQVNLIHwgTUhMX0VTVF9NQVNLKTsKPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExf VFhfSU5UUjFfRU5BQkxFX1JFRywgMHg2MCk7Cj4gKwo+ICsJLyogVGhpcyBwb2ludCBpcyB2ZXJ5 IGltcG9ydGFudCBiZWZvcmUgbWVhc3VyZSBSR05EIGltcGVkYW5jZSAqLwo+ICsJZm9yY2VfdXNi X2lkX3N3aXRjaF9vcGVuKGN0eCk7Cj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1ITF9UWF9ESVND X0NUUkw0X1JFRywgMCwgMHhGMCk7Cj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1ITF9UWF9ESVND X0NUUkw1X1JFRywgMCwgMHgwMyk7Cj4gKwlyZWxlYXNlX3VzYl9pZF9zd2l0Y2hfb3BlbihjdHgp Owo+ICsKPiArCS8qIEZvcmNlIHVwc3RyZWFtIEhQRCB0byAwIHdoZW4gbm90IGluIE1ITCBtb2Rl ICovCj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1ITF9UWF9JTlRfQ1RSTF9SRUcsIDAsIDEgPDwg NSk7Cj4gKwltaGxfdHhfd3JpdGVibShjdHgsIE1ITF9UWF9JTlRfQ1RSTF9SRUcsIH4wLCAxIDw8 IDQpOwo+ICsKPiArCXJldHVybiBzaWk5MjM0X2NsZWFyX2Vycm9yKGN0eCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgc2lpOTIzNF9nb3RvX2QzKHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sKPiAr CWludCByZXQ7Cj4gKwo+ICsJZGV2X2RiZyhjdHgtPmRldiwgInNpaTkyMzQ6IGRldGVjdGlvbiBz dGFydGVkIGQzXG4iKTsKPiArCj4gKwlyZXQgPSBzaWk5MjM0X3Jlc2V0KGN0eCk7Cj4gKwlpZiAo cmV0IDwgMCkKPiArCQlnb3RvIGV4aXQ7Cj4gKwo+ICsJaGRtaV93cml0ZWIoY3R4LCAweDAxLCAw eDAzKTsKPiArCXRwaV93cml0ZWJtKGN0eCwgVFBJX0RQRF9SRUcsIDAsIDEpOwo+ICsJLyogSTJD IGFib3ZlIGlzIGV4cGVjdGVkIHRvIGZhaWwgYmVjYXVzZSBwb3dlciBnb2VzIGRvd24gKi8KPiAr CXNpaTkyMzRfY2xlYXJfZXJyb3IoY3R4KTsKPiArCj4gKwljdHgtPnN0YXRlID0gU1RfRDM7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gKyBleGl0Ogo+ICsJZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxl ZFxuIiwgX19mdW5jX18pOwo+ICsJcmV0dXJuIC0xOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNp aTkyMzRfaHdfb24oc3RydWN0IHNpaTkyMzQgKmN0eCkKPiArewo+ICsJcmV0dXJuIHJlZ3VsYXRv cl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMpLCBjdHgtPnN1cHBsaWVzKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2lpOTIzNF9od19vZmYoc3RydWN0IHNpaTkyMzQgKmN0 eCkKPiArewo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+Z3Bpb19yZXNldCwgMSk7Cj4gKwltc2xl ZXAoMjApOwo+ICsJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKGN0eC0+c3VwcGxp ZXMpLCBjdHgtPnN1cHBsaWVzKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2lpOTIzNF9od19y ZXNldChzdHJ1Y3Qgc2lpOTIzNCAqY3R4KQo+ICt7Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5n cGlvX3Jlc2V0LCAxKTsKPiArCW1zbGVlcCgyMCk7Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5n cGlvX3Jlc2V0LCAwKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2lpOTIzNF9jYWJsZV9pbihz dHJ1Y3Qgc2lpOTIzNCAqY3R4KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW11dGV4X2xvY2so JmN0eC0+bG9jayk7Cj4gKwlpZiAoY3R4LT5zdGF0ZSAhPSBTVF9PRkYpCj4gKwkJZ290byB1bmxv Y2s7Cj4gKwlyZXQgPSBzaWk5MjM0X2h3X29uKGN0eCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQln b3RvIHVubG9jazsKPiArCj4gKwlzaWk5MjM0X2h3X3Jlc2V0KGN0eCk7Cj4gKwlzaWk5MjM0X2dv dG9fZDMoY3R4KTsKPiArCS8qIFRvIGF2b2lkIGlycSBzdG9ybSwgd2hlbiBodyBpcyBpbiBtZXRh IHN0YXRlICovCj4gKwllbmFibGVfaXJxKHRvX2kyY19jbGllbnQoY3R4LT5kZXYpLT5pcnEpOwo+ ICsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZjdHgtPmxvY2spOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBzaWk5MjM0X2NhYmxlX291dChzdHJ1Y3Qgc2lpOTIzNCAqY3R4KQo+ICt7Cj4g KwltdXRleF9sb2NrKCZjdHgtPmxvY2spOwo+ICsKPiArCWlmIChjdHgtPnN0YXRlID09IFNUX09G RikKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwlkaXNhYmxlX2lycSh0b19pMmNfY2xpZW50KGN0 eC0+ZGV2KS0+aXJxKTsKPiArCXRwaV93cml0ZWIoY3R4LCBUUElfRFBEX1JFRywgMCk7Cj4gKwkv KiBUdXJuIG9uJm9mZiBocGQgZmVzdHVyZSBmb3Igb25seSBRQ1QgSERNSSAqLwo+ICsJc2lpOTIz NF9od19vZmYoY3R4KTsKPiArCj4gKwljdHgtPnN0YXRlID0gU1RfT0ZGOwo+ICsKPiArdW5sb2Nr Ogo+ICsJbXV0ZXhfdW5sb2NrKCZjdHgtPmxvY2spOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZW51bSBz aWk5MjM0X3N0YXRlIHNpaTkyMzRfcmduZF9yZWFkeV9pcnEoc3RydWN0IHNpaTkyMzQgKmN0eCkK PiArewo+ICsJaW50IHZhbHVlOwo+ICsKPiArCWlmIChjdHgtPnN0YXRlID09IFNUX0QzKSB7Cj4g KwkJaW50IHJldDsKPiArCj4gKwkJZGV2X2RiZyhjdHgtPmRldiwgIlJHTkRfUkVBRFlfSU5UXG4i KTsKPiArCQlzaWk5MjM0X2h3X3Jlc2V0KGN0eCk7Cj4gKwo+ICsJCXJldCA9IHNpaTkyMzRfcmVz ZXQoY3R4KTsKPiArCQlpZiAocmV0IDwgMCkgewo+ICsJCQlkZXZfZXJyKGN0eC0+ZGV2LCAic2lp OTIzNF9yZXNldCgpIGZhaWxlZFxuIik7Cj4gKwkJCXJldHVybiBTVF9GQUlMVVJFOwo+ICsJCX0K PiArCj4gKwkJcmV0dXJuIFNUX1JHTkRfSU5JVDsKPiArCX0KPiArCj4gKwkvKiBHb3QgaW50ZXJy dXB0IGluIGluYXBwcm9wcmlhdGUgc3RhdGUgKi8KPiArCWlmIChjdHgtPnN0YXRlICE9IFNUX1JH TkRfSU5JVCkKPiArCQlyZXR1cm4gU1RfRkFJTFVSRTsKPiArCj4gKwl2YWx1ZSA9IG1obF90eF9y ZWFkYihjdHgsIE1ITF9UWF9TVEFUMl9SRUcpOwo+ICsJaWYgKHNpaTkyMzRfY2xlYXJfZXJyb3Io Y3R4KSkKPiArCQlyZXR1cm4gU1RfRkFJTFVSRTsKPiArCj4gKwlpZiAoKHZhbHVlICYgUkdORF9J TlRQX01BU0spICE9IFJHTkRfSU5UUF8xSykgewo+ICsJCWRldl93YXJuKGN0eC0+ZGV2LCAiUkdO RCBpcyBub3QgMWtcbiIpOwo+ICsJCXJldHVybiBTVF9SR05EX0lOSVQ7Cj4gKwl9Cj4gKwlkZXZf ZGJnKGN0eC0+ZGV2LCAiUkdORCAxSyEhXG4iKTsKPiArCW1obF90eF93cml0ZWJtKGN0eCwgTUhM X1RYX0RJU0NfQ1RSTDRfUkVHLCB+MCwgMHg4Qyk7Cj4gKwltaGxfdHhfd3JpdGViKGN0eCwgTUhM X1RYX0RJU0NfQ1RSTDVfUkVHLCAweDc3KTsKPiArCW1obF90eF93cml0ZWJtKGN0eCwgTUhMX1RY X0RJU0NfQ1RSTDZfUkVHLCB+MCwgMHgwNSk7Cj4gKwlpZiAoc2lpOTIzNF9jbGVhcl9lcnJvcihj dHgpKQo+ICsJCXJldHVybiBTVF9GQUlMVVJFOwo+ICsKPiArCW1zbGVlcChUX1NSQ19WQlVTX0NC VVNfVE9fU1RBQkxFKTsKPiArCXJldHVybiBTVF9SR05EXzFLOwo+ICt9Cj4gKwo+ICtzdGF0aWMg ZW51bSBzaWk5MjM0X3N0YXRlIHNpaTkyMzRfbWhsX2VzdGFibGlzaGVkKHN0cnVjdCBzaWk5MjM0 ICpjdHgpCj4gK3sKPiArCWRldl9kYmcoY3R4LT5kZXYsICJtaGwgZXN0IGludGVycnVwdFxuIik7 Cj4gKwo+ICsJLyogRGlzY292ZXJ5IG92ZXJyaWRlICovCj4gKwltaGxfdHhfd3JpdGViKGN0eCwg TUhMX1RYX01ITFRYX0NUTDFfUkVHLCAweDEwKTsKPiArCS8qIEluY3JlYXNlIEREQyB0cmFuc2xh dGlvbiBsYXllciB0aW1lciAoYnl0ZSBtb2RlKSAqLwo+ICsJY2J1c193cml0ZWIoY3R4LCAweDA3 LCAweDMyKTsKPiArCWNidXNfd3JpdGVibShjdHgsIDB4NDQsIH4wLCAxIDw8IDEpOwo+ICsJLyog S2VlcCB0aGUgZGlzY292ZXJ5IGVuYWJsZWQuIE5lZWQgUkdORCBpbnRlcnJ1cHQgKi8KPiArCW1o bF90eF93cml0ZWJtKGN0eCwgTUhMX1RYX0RJU0NfQ1RSTDFfUkVHLCB+MCwgMSk7Cj4gKwltaGxf dHhfd3JpdGViKGN0eCwgTUhMX1RYX0lOVFIxX0VOQUJMRV9SRUcsCj4gKwkJICAgICAgUlNFTl9D SEFOR0VfSU5UX01BU0sgfCBIUERfQ0hBTkdFX0lOVF9NQVNLKTsKPiArCj4gKwlpZiAoc2lpOTIz NF9jbGVhcl9lcnJvcihjdHgpKQo+ICsJCXJldHVybiBTVF9GQUlMVVJFOwo+ICsKPiArCXJldHVy biBTVF9NSExfRVNUQUJMSVNIRUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBlbnVtIHNpaTkyMzRfc3Rh dGUgc2lpOTIzNF9ocGRfY2hhbmdlKHN0cnVjdCBzaWk5MjM0ICpjdHgpCj4gK3sKPiArCWludCB2 YWx1ZTsKPiArCj4gKwl2YWx1ZSA9IGNidXNfcmVhZGIoY3R4LCBDQlVTX01TQ19SRVFfQUJPUlRf UkVBU09OX1JFRyk7Cj4gKwlpZiAoc2lpOTIzNF9jbGVhcl9lcnJvcihjdHgpKQo+ICsJCXJldHVy biBTVF9GQUlMVVJFOwo+ICsKPiArCWlmICh2YWx1ZSAmIFNFVF9IUERfRE9XTlNUUkVBTSkgewo+ ICsJCS8qIERvd25zdHJlYW0gSFBEIEhpZ2gsIEVuYWJsZSBUTURTICovCj4gKwkJc2lpOTIzNF90 bWRzX2NvbnRyb2woY3R4LCB0cnVlKTsKPiArCX0gZWxzZSB7Cj4gKwkJLyogRG93bnN0cmVhbSBI UEQgTG93LCBEaXNhYmxlIFRNRFMgKi8KPiArCQlzaWk5MjM0X3RtZHNfY29udHJvbChjdHgsIGZh bHNlKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gY3R4LT5zdGF0ZTsKPiArfQo+ICsKPiArc3RhdGlj IGVudW0gc2lpOTIzNF9zdGF0ZSBzaWk5MjM0X3JzZW5fY2hhbmdlKHN0cnVjdCBzaWk5MjM0ICpj dHgpCj4gK3sKPiArCWludCB2YWx1ZTsKPiArCj4gKwkvKiBXb3JrX2Fyb3VuZCBjb2RlIHRvIGhh bmRsZSB3cm9uZyBpbnRlcnJ1cHQgKi8KPiArCWlmIChjdHgtPnN0YXRlICE9IFNUX1JHTkRfMUsp IHsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiUlNFTl9ISUdIIHdpdGhvdXQgUkdORF8xS1xuIik7 Cj4gKwkJcmV0dXJuIFNUX0ZBSUxVUkU7Cj4gKwl9Cj4gKwl2YWx1ZSA9IG1obF90eF9yZWFkYihj dHgsIE1ITF9UWF9TWVNTVEFUX1JFRyk7Cj4gKwlpZiAodmFsdWUgPCAwKQo+ICsJCXJldHVybiBT VF9GQUlMVVJFOwo+ICsKPiArCWlmICh2YWx1ZSAmIFJTRU5fU1RBVFVTKSB7Cj4gKwkJZGV2X2Ri ZyhjdHgtPmRldiwgIk1ITCBjYWJsZSBjb25uZWN0ZWQuLiBSU0VOIEhpZ2hcbiIpOwo+ICsJCXJl dHVybiBTVF9SU0VOX0hJR0g7Cj4gKwl9Cj4gKwlkZXZfZGJnKGN0eC0+ZGV2LCAiUlNFTiBsb3N0 XG4iKTsKPiArCS8qCj4gKwkgKiBPbmNlIFJTRU4gbG9zcyBpcyBjb25maXJtZWQsd2UgbmVlZCB0 byBjaGVjawo+ICsJICogYmFzZWQgb24gY2FibGUgc3RhdHVzIGFuZCBjaGlwIHBvd2VyIHN0YXR1 cyx3aGV0aGVyCj4gKwkgKiBpdCBpcyBTSU5LIExvc3MoSERNSSBjYWJsZSBub3QgY29ubmVjdGVk LCBUViBPZmYpCj4gKwkgKiBvciBNSEwgY2FibGUgZGlzY29ubmVjdGlvbgo+ICsJICogVE9ETzog RGVmaW5lIHRoZSBiZWxvdyBtaGxfZGlzY29ubmVjdGlvbigpCj4gKwkgKi8KPiArCW1zbGVlcChU X1NSQ19SWFNFTlNFX0RFR0xJVENIKTsKPiArCXZhbHVlID0gbWhsX3R4X3JlYWRiKGN0eCwgTUhM X1RYX1NZU1NUQVRfUkVHKTsKPiArCWlmICh2YWx1ZSA8IDApCj4gKwkJcmV0dXJuIFNUX0ZBSUxV UkU7Cj4gKwlkZXZfZGJnKGN0eC0+ZGV2LCAic3lzX3N0YXQ6ICV4XG4iLCB2YWx1ZSk7Cj4gKwo+ ICsJaWYgKHZhbHVlICYgUlNFTl9TVEFUVVMpIHsKPiArCQlkZXZfZGJnKGN0eC0+ZGV2LCAiUlNF TiByZWNvdmVyeVxuIik7Cj4gKwkJcmV0dXJuIFNUX1JTRU5fSElHSDsKPiArCX0KPiArCWRldl9k YmcoY3R4LT5kZXYsICJSU0VOIFJlYWxseSBMT1dcbiIpOwo+ICsJLyogVG8gbWVldCBDVFMgMy4z LjIyLjIgc3BlYyAqLwo+ICsJc2lpOTIzNF90bWRzX2NvbnRyb2woY3R4LCBmYWxzZSk7Cj4gKwlm b3JjZV91c2JfaWRfc3dpdGNoX29wZW4oY3R4KTsKPiArCXJlbGVhc2VfdXNiX2lkX3N3aXRjaF9v cGVuKGN0eCk7Cj4gKwo+ICsJcmV0dXJuIFNUX0ZBSUxVUkU7Cj4gK30KPiArCj4gK3N0YXRpYyBp cnFyZXR1cm5fdCBzaWk5MjM0X2lycV90aHJlYWQoaW50IGlycSwgdm9pZCAqZGF0YSkKPiArewo+ ICsJc3RydWN0IHNpaTkyMzQgKmN0eCA9IGRhdGE7Cj4gKwlpbnQgaW50cjEsIGludHI0Owo+ICsJ aW50IGludHIxX2VuLCBpbnRyNF9lbjsKPiArCWludCBjYnVzX2ludHIxLCBjYnVzX2ludHIyOwo+ ICsKPiArCWRldl9kYmcoY3R4LT5kZXYsICIlc1xuIiwgX19mdW5jX18pOwo+ICsKPiArCW11dGV4 X2xvY2soJmN0eC0+bG9jayk7Cj4gKwo+ICsJaW50cjEgPSBtaGxfdHhfcmVhZGIoY3R4LCBNSExf VFhfSU5UUjFfUkVHKTsKPiArCWludHI0ID0gbWhsX3R4X3JlYWRiKGN0eCwgTUhMX1RYX0lOVFI0 X1JFRyk7Cj4gKwlpbnRyMV9lbiA9IG1obF90eF9yZWFkYihjdHgsIE1ITF9UWF9JTlRSMV9FTkFC TEVfUkVHKTsKPiArCWludHI0X2VuID0gbWhsX3R4X3JlYWRiKGN0eCwgTUhMX1RYX0lOVFI0X0VO QUJMRV9SRUcpOwo+ICsJY2J1c19pbnRyMSA9IGNidXNfcmVhZGIoY3R4LCBDQlVTX0lOVF9TVEFU VVNfMV9SRUcpOwo+ICsJY2J1c19pbnRyMiA9IGNidXNfcmVhZGIoY3R4LCBDQlVTX0lOVF9TVEFU VVNfMl9SRUcpOwo+ICsKPiArCWlmIChzaWk5MjM0X2NsZWFyX2Vycm9yKGN0eCkpCj4gKwkJZ290 byBkb25lOwo+ICsKPiArCWRldl9kYmcoY3R4LT5kZXYsICJpcnEgJTAyeC8lMDJ4ICUwMngvJTAy eCAlMDJ4LyUwMnhcbiIsCj4gKwkJaW50cjEsIGludHIxX2VuLCBpbnRyNCwgaW50cjRfZW4sIGNi dXNfaW50cjEsIGNidXNfaW50cjIpOwo+ICsKPiArCWlmIChpbnRyNCAmIFJHTkRfUkVBRFlfSU5U KQo+ICsJCWN0eC0+c3RhdGUgPSBzaWk5MjM0X3JnbmRfcmVhZHlfaXJxKGN0eCk7Cj4gKwlpZiAo aW50cjEgJiBSU0VOX0NIQU5HRV9JTlQpCj4gKwkJY3R4LT5zdGF0ZSA9IHNpaTkyMzRfcnNlbl9j aGFuZ2UoY3R4KTsKPiArCWlmIChpbnRyNCAmIE1ITF9FU1RfSU5UKQo+ICsJCWN0eC0+c3RhdGUg PSBzaWk5MjM0X21obF9lc3RhYmxpc2hlZChjdHgpOwo+ICsJaWYgKGludHIxICYgSFBEX0NIQU5H RV9JTlQpCj4gKwkJY3R4LT5zdGF0ZSA9IHNpaTkyMzRfaHBkX2NoYW5nZShjdHgpOwo+ICsJaWYg KGludHI0ICYgQ0JVU19MS09VVF9JTlQpCj4gKwkJY3R4LT5zdGF0ZSA9IFNUX0ZBSUxVUkU7Cj4g KwlpZiAoaW50cjQgJiBNSExfRElTQ19GQUlMX0lOVCkKPiArCQljdHgtPnN0YXRlID0gU1RfRkFJ TFVSRV9ESVNDT1ZFUlk7Cj4gKwo+ICsgZG9uZToKPiArCS8qIENsZWFuIGludGVycnVwdCBzdGF0 dXMgYW5kIHBlbmRpbmcgZmxhZ3MgKi8KPiArCW1obF90eF93cml0ZWIoY3R4LCBNSExfVFhfSU5U UjFfUkVHLCBpbnRyMSk7Cj4gKwltaGxfdHhfd3JpdGViKGN0eCwgTUhMX1RYX0lOVFI0X1JFRywg aW50cjQpOwo+ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX01ITF9TVEFUVVNfUkVHXzAsIDB4RkYp Owo+ICsJY2J1c193cml0ZWIoY3R4LCBDQlVTX01ITF9TVEFUVVNfUkVHXzEsIDB4RkYpOwo+ICsJ Y2J1c193cml0ZWIoY3R4LCBDQlVTX0lOVF9TVEFUVVNfMV9SRUcsIGNidXNfaW50cjEpOwo+ICsJ Y2J1c193cml0ZWIoY3R4LCBDQlVTX0lOVF9TVEFUVVNfMl9SRUcsIGNidXNfaW50cjIpOwo+ICsK PiArCXNpaTkyMzRfY2xlYXJfZXJyb3IoY3R4KTsKPiArCj4gKwlpZiAoY3R4LT5zdGF0ZSA9PSBT VF9GQUlMVVJFKSB7Cj4gKwkJZGV2X2RiZyhjdHgtPmRldiwgInRyeSB0byByZXNldCBhZnRlciBm YWlsdXJlXG4iKTsKPiArCQlzaWk5MjM0X2h3X3Jlc2V0KGN0eCk7Cj4gKwkJc2lpOTIzNF9nb3Rv X2QzKGN0eCk7Cj4gKwl9Cj4gKwo+ICsJaWYgKGN0eC0+c3RhdGUgPT0gU1RfRkFJTFVSRV9ESVND T1ZFUlkpIHsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZGlzY292ZXJ5IGZhaWxlZCwgbm8gcG93 ZXIgZm9yIE1ITD9cbiIpOwo+ICsJCXRwaV93cml0ZWJtKGN0eCwgVFBJX0RQRF9SRUcsIDAsIDEp Owo+ICsJCWN0eC0+c3RhdGUgPSBTVF9EMzsKPiArCX0KPiArCj4gKwltdXRleF91bmxvY2soJmN0 eC0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHNpaTkyMzRfaW5pdF9yZXNvdXJjZXMoc3RydWN0IHNpaTkyMzQgKmN0eCwKPiArCQkJCSAg c3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiArewo+ICsJc3RydWN0IGkyY19hZGFwdGVyICph ZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKPiArCWludCByZXQ7 Cj4gKwo+ICsJaWYgKCFjdHgtPmRldi0+b2Zfbm9kZSkgewo+ICsJCWRldl9lcnIoY3R4LT5kZXYs ICJub3QgRFQgZGV2aWNlXG4iKTsKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCX0KPiArCj4gKwlj dHgtPmdwaW9fcmVzZXQgPSBkZXZtX2dwaW9kX2dldChjdHgtPmRldiwgInJlc2V0IiwgR1BJT0Rf T1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+Z3Bpb19yZXNldCkpIHsKPiArCQlkZXZfZXJy KGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGdldCByZXNldCBncGlvIGZyb20gRFRcbiIpOwo+ICsJCXJl dHVybiBQVFJfRVJSKGN0eC0+Z3Bpb19yZXNldCk7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5zdXBwbGll c1swXS5zdXBwbHkgPSAiYXZjYzEyIjsKPiArCWN0eC0+c3VwcGxpZXNbMV0uc3VwcGx5ID0gImF2 Y2MzMyI7Cj4gKwljdHgtPnN1cHBsaWVzWzJdLnN1cHBseSA9ICJpb3ZjYzE4IjsKPiArCWN0eC0+ c3VwcGxpZXNbM10uc3VwcGx5ID0gImN2Y2MxMiI7Cj4gKwlyZXQgPSBkZXZtX3JlZ3VsYXRvcl9i dWxrX2dldChjdHgtPmRldiwgNCwgY3R4LT5zdXBwbGllcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ ZGV2X2VycihjdHgtPmRldiwgInJlZ3VsYXRvcl9idWxrIGZhaWxlZFxuIik7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwljdHgtPmNsaWVudFtJMkNfTUhMXSA9IGNsaWVudDsKPiArCj4g KwljdHgtPmNsaWVudFtJMkNfVFBJXSA9IGkyY19uZXdfZHVtbXkoYWRhcHRlciwgSTJDX1RQSV9B RERSKTsKPiArCWlmICghY3R4LT5jbGllbnRbSTJDX1RQSV0pIHsKPiArCQlkZXZfZXJyKGN0eC0+ ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBUUEkgY2xpZW50XG4iKTsKPiArCQlyZXR1cm4gLUVOT0RF VjsKPiArCX0KPiArCj4gKwljdHgtPmNsaWVudFtJMkNfSERNSV0gPSBpMmNfbmV3X2R1bW15KGFk YXB0ZXIsIEkyQ19IRE1JX0FERFIpOwo+ICsJaWYgKCFjdHgtPmNsaWVudFtJMkNfSERNSV0pIHsK PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBIRE1JIFJYIGNsaWVudFxu Iik7Cj4gKwkJZ290byBmYWlsX3RwaTsKPiArCX0KPiArCj4gKwljdHgtPmNsaWVudFtJMkNfQ0JV U10gPSBpMmNfbmV3X2R1bW15KGFkYXB0ZXIsIEkyQ19DQlVTX0FERFIpOwo+ICsJaWYgKCFjdHgt PmNsaWVudFtJMkNfQ0JVU10pIHsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGNy ZWF0ZSBDQlVTIGNsaWVudFxuIik7Cj4gKwkJZ290byBmYWlsX2hkbWk7Cj4gKwl9Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gKwo+ICtmYWlsX2hkbWk6Cj4gKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY3R4 LT5jbGllbnRbSTJDX0hETUldKTsKPiArZmFpbF90cGk6Cj4gKwlpMmNfdW5yZWdpc3Rlcl9kZXZp Y2UoY3R4LT5jbGllbnRbSTJDX1RQSV0pOwo+ICsKPiArCXJldHVybiAtRU5PREVWOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCBzaWk5MjM0X2RlaW5pdF9yZXNvdXJjZXMoc3RydWN0IHNpaTkyMzQg KmN0eCkKPiArewo+ICsJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGN0eC0+Y2xpZW50W0kyQ19DQlVT XSk7Cj4gKwlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY3R4LT5jbGllbnRbSTJDX0hETUldKTsKPiAr CWkyY191bnJlZ2lzdGVyX2RldmljZShjdHgtPmNsaWVudFtJMkNfVFBJXSk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgc3RydWN0IHNpaTkyMzQgKmJyaWRnZV90b19zaWk5MjM0KHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YoYnJpZGdlLCBz dHJ1Y3Qgc2lpOTIzNCwgYnJpZGdlKTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJtX21vZGVf c3RhdHVzIHNpaTkyMzRfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+ICsJ CQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPiArewo+ICsJaWYgKG1v ZGUtPmNsb2NrID4gTUhMMV9NQVhfQ0xLKQo+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7Cj4g Kwo+ICsJcmV0dXJuIE1PREVfT0s7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X2JyaWRnZV9mdW5jcyBzaWk5MjM0X2JyaWRnZV9mdW5jcyA9IHsKPiArCS5tb2RlX3ZhbGlkID0g c2lpOTIzNF9tb2RlX3ZhbGlkLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBzaWk5MjM0X3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCj4gKwkJCSBjb25zdCBzdHJ1Y3QgaTJjX2Rldmlj ZV9pZCAqaWQpCj4gK3sKPiArCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IHRvX2kyY19h ZGFwdGVyKGNsaWVudC0+ZGV2LnBhcmVudCk7Cj4gKwlzdHJ1Y3Qgc2lpOTIzNCAqY3R4Owo+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlj dHggPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOwo+ICsJaWYg KCFjdHgpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY3R4LT5kZXYgPSBkZXY7Cj4gKwlt dXRleF9pbml0KCZjdHgtPmxvY2spOwo+ICsKPiArCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxp dHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkgewo+ICsJCWRldl9lcnIoZGV2 LCAiSTJDIGFkYXB0ZXIgbGFja3MgU01CVVMgZmVhdHVyZVxuIik7Cj4gKwkJcmV0dXJuIC1FSU87 Cj4gKwl9Cj4gKwo+ICsJaWYgKCFjbGllbnQtPmlycSkgewo+ICsJCWRldl9lcnIoZGV2LCAibm8g aXJxIHByb3ZpZGVkXG4iKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCj4gKwlpcnFf c2V0X3N0YXR1c19mbGFncyhjbGllbnQtPmlycSwgSVJRX05PQVVUT0VOKTsKPiArCXJldCA9IGRl dm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBjbGllbnQtPmlycSwgTlVMTCwKPiArCQkJCQlz aWk5MjM0X2lycV90aHJlYWQsCj4gKwkJCQkJSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNI T1QsCj4gKwkJCQkJInNpaTkyMzQiLCBjdHgpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlkZXZf ZXJyKGRldiwgImZhaWxlZCB0byBpbnN0YWxsIElSUSBoYW5kbGVyXG4iKTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCXJldCA9IHNpaTkyMzRfaW5pdF9yZXNvdXJjZXMoY3R4LCBjbGll bnQpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlpMmNfc2V0X2Ns aWVudGRhdGEoY2xpZW50LCBjdHgpOwo+ICsKPiArCWN0eC0+YnJpZGdlLmZ1bmNzID0gJnNpaTky MzRfYnJpZGdlX2Z1bmNzOwo+ICsJY3R4LT5icmlkZ2Uub2Zfbm9kZSA9IGRldi0+b2Zfbm9kZTsK PiArCWRybV9icmlkZ2VfYWRkKCZjdHgtPmJyaWRnZSk7Cj4gKwo+ICsJc2lpOTIzNF9jYWJsZV9p bihjdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHNpaTkyMzRf cmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBzaWk5MjM0 ICpjdHggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKPiArCj4gKwlzaWk5MjM0X2NhYmxl X291dChjdHgpOwo+ICsJZHJtX2JyaWRnZV9yZW1vdmUoJmN0eC0+YnJpZGdlKTsKPiArCXNpaTky MzRfZGVpbml0X3Jlc291cmNlcyhjdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzaWk5MjM0X2R0X21hdGNoW10gPSB7Cj4g Kwl7IC5jb21wYXRpYmxlID0gInNpbCxzaWk5MjM0IiB9LAo+ICsJeyB9LAo+ICt9Owo+ICtNT0RV TEVfREVWSUNFX1RBQkxFKG9mLCBzaWk5MjM0X2R0X21hdGNoKTsKPiArCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzaWk5MjM0X2lkW10gPSB7Cj4gKwl7ICJTSUk5MjM0Iiwg MCB9LAo+ICsJeyB9LAo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2lpOTIzNF9p ZCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2lpOTIzNF9kcml2ZXIgPSB7Cj4g KwkuZHJpdmVyID0gewo+ICsJCS5uYW1lCT0gInNpaTkyMzQiLAo+ICsJCS5vZl9tYXRjaF90YWJs ZSA9IHNpaTkyMzRfZHRfbWF0Y2gsCj4gKwl9LAo+ICsJLnByb2JlID0gc2lpOTIzNF9wcm9iZSwK PiArCS5yZW1vdmUgPSBzaWk5MjM0X3JlbW92ZSwKPiArCS5pZF90YWJsZSA9IHNpaTkyMzRfaWQs Cj4gK307Cj4gKwo+ICttb2R1bGVfaTJjX2RyaXZlcihzaWk5MjM0X2RyaXZlcik7Cj4gK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK