From mboxrd@z Thu Jan 1 00:00:00 1970 From: Boris Brezillon Subject: Re: [PATCH v8 1/2] drm/bridge: Add Cadence DSI driver Date: Mon, 23 Apr 2018 19:15:14 +0200 Message-ID: <20180423191514.04cd1a4c@bbrezillon> References: <20180421070846.10330-1-boris.brezillon@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180421070846.10330-1-boris.brezillon@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Archit Taneja , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org Cc: "Menon, Nishanth" , Mark Rutland , Rafal Ciepiela , Pawel Moll , Ian Campbell , Maxime Ripard , Simon Hatliff , Kumar Gala , Jyri Sarha , Rob Herring , Alan Douglas , Tomi Valkeinen , Thomas Petazzoni , Suresh Punnoose , Richard Sproul , devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org T24gU2F0LCAyMSBBcHIgMjAxOCAwOTowODo0NSArMDIwMApCb3JpcyBCcmV6aWxsb24gPGJvcmlz LmJyZXppbGxvbkBib290bGluLmNvbT4gd3JvdGU6Cgo+IEFkZCBhIGRyaXZlciBmb3IgQ2FkZW5j ZSBEUEkgLT4gRFNJIGJyaWRnZS4KPiAKPiBUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnQgYSBzdWJz ZXQgb2YgQ2FkZW5jZSBEU0kgYnJpZGdlIGNhcGFiaWxpdGllcy4KPiAKPiBUaGlzIGRyaXZlciBo YXMgYmVlbiB0ZXN0ZWQvZGVidWdnZWQgaW4gYSBzaW11bGF0ZWQgZW52aXJvbm1lbnQgd2hpY2gK PiBleHBsYWlucyB3aHkgc29tZSBvZiB0aGUgZmVhdHVyZXMgYXJlIG1pc3NpbmcuICBIZXJlIGlz IGEKPiBub24tZXhoYXVzdGl2ZSBsaXN0IG9mIG1pc3NpbmcgZmVhdHVyZXM6Cj4gICogYnVyc3Qg bW9kZQo+ICAqIERQSFkgaW5pdC9jb25maWd1cmF0aW9uIHN0ZXBzCj4gICogc3VwcG9ydCBmb3Ig YWRkaXRpb25hbCBpbnB1dCBpbnRlcmZhY2VzIChTREkgaW5wdXQpCj4gCj4gRFNJIGNvbW1hbmRz IGFuZCBub24tYnVyc3QgdmlkZW8gbW9kZSBoYXZlIGJlZW4gdGVzdGVkLgo+IAo+IFNpZ25lZC1v ZmYtYnk6IEJvcmlzIEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgo+IFJl dmlld2VkLWJ5OiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgo+IEFja2VkLWJ5 OiBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0Pgo+IFJldmlld2VkLWJ5OiBBcmNoaXQgVGFu ZWphIDxhcmNoaXR0QGNvZGVhdXJvcmEub3JnPgoKQXBwbGllZCBib3RoIHBhdGNoZXMgdG8gZHJt LW1pc2MtbmV4dC4KCj4gLS0tCj4gQ2hhbmdlcyBpbiB2ODoKPiAtIFVwZGF0ZSBteSBlbWFpbCBh ZGRyZXNzCj4gCj4gQ2hhbmdlcyBpbiB2NzoKPiAtIFVzZSBESVZfUk9VTkRfVVBfVUxMKCkgdG8g Zml4IGEgYnVpbGQgZXJyb3Igb24gYXJtIDMyLWJpdAo+IC0gQWRkIEFyY2hpdCdzIFItYgo+IAo+ IENoYW5nZXMgaW4gdjY6Cj4gLSBVc2UgU1BEWCBoZWFkZXIKPiAtIERvIG5vdCBlbmFibGUgdGhl IHN5c19jbGsgaW4gdGhlIHByb2JlIGZ1bmN0aW9uCj4gLSBSZW1vdmUgdW5uZWVkZWQgdWRlbGF5 KCkKPiAtIEFkZCBhIGZ1bmN0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgUExMIGFuZCBwaXhlbCBjbG9j ayBhcmUgY2xvc2UgZW5vdWdoCj4gICB0byBiZSByZWNvdmVyYWJsZSBpZiB0aGV5IGRvbid0IG1h dGNoIGV4YWN0bHkKPiAtIEFkZCB0aGUgRFBIWSBpbml0IHNlcXVlbmNlIHVzZWQgaW4gc2ltdWxh dGlvbiAobGlrZWx5IHRvIGJlIGRpZmZlcmVudAo+ICAgYmFzZWQgb24gZWFjaCBTb0MgaW50ZWdy YXRpb24pCj4gCj4gQ2hhbmdlcyBpbiB2NToKPiAtIEFkZCBydW50aW1lIFBNIHN1cHBvcnQKPiAK PiBDaGFuZ2VzIGluIHY0Ogo+IC0gRml4IHR5cG9zCj4gLSBSZW5hbWUgY2xrcyBhcyBzdWdnZXN0 ZWQgYnkgVG9taQo+IC0gRml4IERTSSBzZXR1cCBkb25lIGluIGNkbnNfZHNpX2JyaWRnZV9lbmFi bGUoKQo+IC0gQWRkIGEgcHJlY2lzaW9uIGFib3V0IHdoZXJlIHRoaXMgYnJpZGdlIGlzIHN1cHBv c2VkIHRvIHVzZWQgdG8gdGhlCj4gICBLY29uZmlnIGVudHJ5Cj4gLSBMZXQgRFJNX0NETlNfRFNJ IHNlbGVjdCBEUk1fUEFORUxfQlJJREdFCj4gLSBSZW1vdmUgdGhlIElQIHZlcnNpb24gZnJvbSB0 aGUgRFQgY29tcGF0aWJsZSBuYW1lCj4gLSBBZGFwdCByZWdpc3RlciB0aGUgbGF5b3V0IHRvIG1h dGNoIHRoZSBvbmUgdXNlZCBpbiB0aGUgbGFzdCByZXZpc2lvbgo+ICAgb2YgdGhlIElQIChob3Bl ZnVsbHkgdGhlIGZpbmFsIHZlcnNpb24pCj4gCj4gQ2hhbmdlcyBpbiB2MzoKPiAtIHJlcGxhY2Ug bWFnaWMgdmFsdWVzIGJ5IHJlYWwgdGltaW5nIGNhbGN1bGF0aW9uLiBUaGUgRFBIWSBQTEwgY2xv Y2sKPiAgIGlzIHN0aWxsIGhhcmRjb2RlZCBzaW5jZSB3ZSBkb24ndCBoYXZlIGEgd29ya2luZyBE UEhZIGJsb2NrIHlldCwgYW5kCj4gICB0aGlzIGlzIHRoZSBwaWVjZSBvZiBIVyB3ZSBuZWVkIHRv IGR5bmFtaWNhbGx5IGNvbmZpZ3VyZSB0aGUgUExMCj4gICByYXRlIGJhc2VkIG9uIHRoZSBkaXNw bGF5IHJlZnJlc2ggcmF0ZSBhbmQgdGhlIHJlc29sdXRpb24uCj4gLSBwYXJzZSBEU0kgZGV2aWNl cyByZXByZXNlbnRlZCB3aXRoIHRoZSBPRi1ncmFwaC4gVGhpcyBpcyBuZWVkZWQgdG8KPiAgIHN1 cHBvcnQgRFNJIGRldmljZXMgY29udHJvbGxlZCB0aHJvdWdoIGFuIGV4dGVybmFsIGJ1cyBsaWtl IEkyQyBvcgo+ICAgU1BJLgo+IC0gdXNlIHRoZSBEUk0gcGFuZWwtYnJpZGdlIGluZnJhc3RydWN0 dXJlIHRvIHNpbXBsaWZ5IHRoZSBEUk0gcGFuZWwKPiAgIGxvZ2ljCj4gCj4gQ2hhbmdlcyBpbiB2 MjoKPiAtIHJlYmFzZSBvbiB2NC4xMi1yYzEgYW5kIGFkYXB0IHRvIGRyaXZlciB0byB0aGUgZHJt X2JyaWRnZSBBUEkgY2hhbmdlcwo+IC0gcmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yIHdoZW4gZGV2 bV9jbGtfZ2V0KHN5c2NsaykgZmFpbHMKPiAtIGFkZCBtaXNzaW5nIGRlcGVuZHMgb24gT0YgYW5k IHNlbGVjdCBEUk1fUEFORUwgaW4gdGhlIEtjb25maWcgZW50cnkKPiAKPiBEU0kgcnVudGltZSBQ TQo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcgICAgfCAgIDEwICsKPiAg ZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZSAgIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1 L2RybS9icmlkZ2UvY2Rucy1kc2kuYyB8IDE2MjMgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQsIDE2MzQgaW5zZXJ0aW9ucygrKQo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5jCj4gCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZwo+IGluZGV4IDQyYzljMmQxMzc1Mi4uMWQ3NWQzYTFmOTUxIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2UvS2NvbmZpZwo+IEBAIC0yNSw2ICsyNSwxNiBAQCBjb25maWcgRFJNX0FO QUxPR0lYX0FOWDc4WFgKPiAgCSAgdGhlIEhETUkgb3V0cHV0IG9mIGFuIGFwcGxpY2F0aW9uIHBy b2Nlc3NvciB0byBNeURQCj4gIAkgIG9yIERpc3BsYXlQb3J0Lgo+ICAKPiArY29uZmlnIERSTV9D RE5TX0RTSQo+ICsJdHJpc3RhdGUgIkNhZGVuY2UgRFBJL0RTSSBicmlkZ2UiCj4gKwlzZWxlY3Qg RFJNX0tNU19IRUxQRVIKPiArCXNlbGVjdCBEUk1fTUlQSV9EU0kKPiArCXNlbGVjdCBEUk1fUEFO RUxfQlJJREdFCj4gKwlkZXBlbmRzIG9uIE9GCj4gKwloZWxwCj4gKwkgIFN1cHBvcnQgQ2FkZW5j ZSBEUEkgdG8gRFNJIGJyaWRnZS4gVGhpcyBpcyBhbiBpbnRlcm5hbAo+ICsJICBicmlkZ2UgYW5k IGlzIG1lYW50IHRvIGJlIGRpcmVjdGx5IGVtYmVkZGVkIGluIGEgU29DLgo+ICsKPiAgY29uZmln IERSTV9EVU1CX1ZHQV9EQUMKPiAgCXRyaXN0YXRlICJEdW1iIFZHQSBEQUMgQnJpZGdlIHN1cHBv cnQiCj4gIAlkZXBlbmRzIG9uIE9GCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlk Z2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCj4gaW5kZXggZmQ5 MGIxNmE2NWMwLi4zNWY4OGQ0OGVjMjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUKPiBA QCAtMSw1ICsxLDYgQEAKPiAgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICBv YmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFgpICs9IGFuYWxvZ2l4LWFueDc4eHgubwo+ ICtvYmotJChDT05GSUdfRFJNX0NETlNfRFNJKSArPSBjZG5zLWRzaS5vCj4gIG9iai0kKENPTkZJ R19EUk1fRFVNQl9WR0FfREFDKSArPSBkdW1iLXZnYS1kYWMubwo+ICBvYmotJChDT05GSUdfRFJN X0xWRFNfRU5DT0RFUikgKz0gbHZkcy1lbmNvZGVyLm8KPiAgb2JqLSQoQ09ORklHX0RSTV9NRUdB Q0hJUFNfU1REUFhYWFhfR0VfQjg1MFYzX0ZXKSArPSBtZWdhY2hpcHMtc3RkcHh4eHgtZ2UtYjg1 MHYzLWZ3Lm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5j IGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9jZG5zLWRzaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmMyNTVmYzNlMWJlNQo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL2NkbnMtZHNpLmMKPiBAQCAtMCwwICsxLDE2MjMg QEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogQ29w eXJpZ2h0OiAyMDE3IENhZGVuY2UgRGVzaWduIFN5c3RlbXMsIEluYy4KPiArICoKPiArICogQXV0 aG9yOiBCb3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4KPiArICov Cj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWNfaGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxk cm0vZHJtX2JyaWRnZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+ICsj aW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5o Pgo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKwo+ICsjaW5jbHVkZSA8bGlu dXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ICsjaW5jbHVkZSA8 bGludXgvb2ZfZ3JhcGguaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcmVzZXQu aD4KPiArCj4gKyNkZWZpbmUgSVBfQ09ORgkJCQkweDAKPiArI2RlZmluZSBTUF9IU19GSUZPX0RF UFRIKHgpCQkoKCh4KSAmIEdFTk1BU0soMzAsIDI2KSkgPj4gMjYpCj4gKyNkZWZpbmUgU1BfTFBf RklGT19ERVBUSCh4KQkJKCgoeCkgJiBHRU5NQVNLKDI1LCAyMSkpID4+IDIxKQo+ICsjZGVmaW5l IFZSU19GSUZPX0RFUFRIKHgpCQkoKCh4KSAmIEdFTk1BU0soMjAsIDE2KSkgPj4gMTYpCj4gKyNk ZWZpbmUgRElSQ01EX0ZJRk9fREVQVEgoeCkJCSgoKHgpICYgR0VOTUFTSygxNSwgMTMpKSA+PiAx MykKPiArI2RlZmluZSBTRElfSUZBQ0VfMzIJCQlCSVQoMTIpCj4gKyNkZWZpbmUgSU5URVJOQUxf REFUQVBBVEhfMzIJCSgwIDw8IDEwKQo+ICsjZGVmaW5lIElOVEVSTkFMX0RBVEFQQVRIXzE2CQko MSA8PCAxMCkKPiArI2RlZmluZSBJTlRFUk5BTF9EQVRBUEFUSF84CQkoMyA8PCAxMCkKPiArI2Rl ZmluZSBJTlRFUk5BTF9EQVRBUEFUSF9TSVpFCQkoKHgpICYgR0VOTUFTSygxMSwgMTApKQo+ICsj ZGVmaW5lIE5VTV9JRkFDRSh4KQkJCSgoKCh4KSAmIEdFTk1BU0soOSwgOCkpID4+IDgpICsgMSkK PiArI2RlZmluZSBNQVhfTEFORV9OQih4KQkJCSgoKHgpICYgR0VOTUFTSyg3LCA2KSkgPj4gNikK PiArI2RlZmluZSBSWF9GSUZPX0RFUFRIKHgpCQkoKHgpICYgR0VOTUFTSyg1LCAwKSkKPiArCj4g KyNkZWZpbmUgTUNUTF9NQUlOX0RBVEFfQ1RMCQkweDQKPiArI2RlZmluZSBURV9NSVBJX1BPTExJ TkdfRU4JCUJJVCgyNSkKPiArI2RlZmluZSBURV9IV19QT0xMSU5HX0VOCQlCSVQoMjQpCj4gKyNk ZWZpbmUgRElTUF9FT1RfR0VOCQkJQklUKDE4KQo+ICsjZGVmaW5lIEhPU1RfRU9UX0dFTgkJCUJJ VCgxNykKPiArI2RlZmluZSBESVNQX0dFTl9DSEVDS1NVTQkJQklUKDE2KQo+ICsjZGVmaW5lIERJ U1BfR0VOX0VDQwkJCUJJVCgxNSkKPiArI2RlZmluZSBCVEFfRU4JCQkJQklUKDE0KQo+ICsjZGVm aW5lIFJFQURfRU4JCQkJQklUKDEzKQo+ICsjZGVmaW5lIFJFR19URV9FTgkJCUJJVCgxMikKPiAr I2RlZmluZSBJRl9URV9FTih4KQkJCUJJVCg4ICsgKHgpKQo+ICsjZGVmaW5lIFRWR19TRUwJCQkJ QklUKDYpCj4gKyNkZWZpbmUgVklEX0VOCQkJCUJJVCg1KQo+ICsjZGVmaW5lIElGX1ZJRF9TRUxF Q1QoeCkJCSgoeCkgPDwgMikKPiArI2RlZmluZSBJRl9WSURfU0VMRUNUX01BU0sJCUdFTk1BU0so MywgMikKPiArI2RlZmluZSBJRl9WSURfTU9ERQkJCUJJVCgxKQo+ICsjZGVmaW5lIExJTktfRU4J CQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIE1DVExfTUFJTl9QSFlfQ1RMCQkweDgKPiArI2RlZmlu ZSBIU19JTlZFUlRfREFUKHgpCQlCSVQoMTkgKyAoKHgpICogMikpCj4gKyNkZWZpbmUgU1dBUF9Q SU5TX0RBVCh4KQkJQklUKDE4ICsgKCh4KSAqIDIpKQo+ICsjZGVmaW5lIEhTX0lOVkVSVF9DTEsJ CQlCSVQoMTcpCj4gKyNkZWZpbmUgU1dBUF9QSU5TX0NMSwkJCUJJVCgxNikKPiArI2RlZmluZSBI U19TS0VXQ0FMX0VOCQkJQklUKDE1KQo+ICsjZGVmaW5lIFdBSVRfQlVSU1RfVElNRSh4KQkJKCh4 KSA8PCAxMCkKPiArI2RlZmluZSBEQVRBX1VMUE1fRU4oeCkJCQlCSVQoNiArICh4KSkKPiArI2Rl ZmluZSBDTEtfVUxQTV9FTgkJCUJJVCg1KQo+ICsjZGVmaW5lIENMS19DT05USU5VT1VTCQkJQklU KDQpCj4gKyNkZWZpbmUgREFUQV9MQU5FX0VOKHgpCQkJQklUKCh4KSAtIDEpCj4gKwo+ICsjZGVm aW5lIE1DVExfTUFJTl9FTgkJCTB4Ywo+ICsjZGVmaW5lIERBVEFfRk9SQ0VfU1RPUAkJCUJJVCgx NykKPiArI2RlZmluZSBDTEtfRk9SQ0VfU1RPUAkJCUJJVCgxNikKPiArI2RlZmluZSBJRl9FTih4 KQkJCUJJVCgxMyArICh4KSkKPiArI2RlZmluZSBEQVRBX0xBTkVfVUxQTV9SRVEobCkJCUJJVCg5 ICsgKGwpKQo+ICsjZGVmaW5lIENMS19MQU5FX1VMUE1fUkVRCQlCSVQoOCkKPiArI2RlZmluZSBE QVRBX0xBTkVfU1RBUlQoeCkJCUJJVCg0ICsgKHgpKQo+ICsjZGVmaW5lIENMS19MQU5FX0VOCQkJ QklUKDMpCj4gKyNkZWZpbmUgUExMX1NUQVJUCQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIE1DVExf RFBIWV9DRkcwCQkJMHgxMAo+ICsjZGVmaW5lIERQSFlfQ19SU1RCCQkJQklUKDIwKQo+ICsjZGVm aW5lIERQSFlfRF9SU1RCKHgpCQkJR0VOTUFTSygxNSArICh4KSwgMTYpCj4gKyNkZWZpbmUgRFBI WV9QTExfUEROCQkJQklUKDEwKQo+ICsjZGVmaW5lIERQSFlfQ01OX1BETgkJCUJJVCg5KQo+ICsj ZGVmaW5lIERQSFlfQ19QRE4JCQlCSVQoOCkKPiArI2RlZmluZSBEUEhZX0RfUEROKHgpCQkJR0VO TUFTSygzICsgKHgpLCA0KQo+ICsjZGVmaW5lIERQSFlfQUxMX0RfUEROCQkJR0VOTUFTSyg3LCA0 KQo+ICsjZGVmaW5lIERQSFlfUExMX1BTTwkJCUJJVCgxKQo+ICsjZGVmaW5lIERQSFlfQ01OX1BT TwkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBNQ1RMX0RQSFlfVElNRU9VVDEJCTB4MTQKPiArI2Rl ZmluZSBIU1RYX1RJTUVPVVQoeCkJCQkoKHgpIDw8IDQpCj4gKyNkZWZpbmUgSFNUWF9USU1FT1VU X01BWAkJR0VOTUFTSygxNywgMCkKPiArI2RlZmluZSBDTEtfRElWKHgpCQkJKHgpCj4gKyNkZWZp bmUgQ0xLX0RJVl9NQVgJCQlHRU5NQVNLKDMsIDApCj4gKwo+ICsjZGVmaW5lIE1DVExfRFBIWV9U SU1FT1VUMgkJMHgxOAo+ICsjZGVmaW5lIExQUlhfVElNRU9VVCh4KQkJCSh4KQo+ICsKPiArI2Rl ZmluZSBNQ1RMX1VMUE9VVF9USU1FCQkweDFjCj4gKyNkZWZpbmUgREFUQV9MQU5FX1VMUE9VVF9U SU1FKHgpCSgoeCkgPDwgOSkKPiArI2RlZmluZSBDTEtfTEFORV9VTFBPVVRfVElNRSh4KQkJKHgp Cj4gKwo+ICsjZGVmaW5lIE1DVExfM0RWSURFT19DVEwJCTB4MjAKPiArI2RlZmluZSBWSURfVlNZ TkNfM0RfRU4JCQlCSVQoNykKPiArI2RlZmluZSBWSURfVlNZTkNfM0RfTFIJCQlCSVQoNSkKPiAr I2RlZmluZSBWSURfVlNZTkNfM0RfU0VDT05EX0VOCQlCSVQoNCkKPiArI2RlZmluZSBWSURfVlNZ TkNfM0RGT1JNQVRfTElORQkJKDAgPDwgMikKPiArI2RlZmluZSBWSURfVlNZTkNfM0RGT1JNQVRf RlJBTUUJKDEgPDwgMikKPiArI2RlZmluZSBWSURfVlNZTkNfM0RGT1JNQVRfUElYRUwJKDIgPDwg MikKPiArI2RlZmluZSBWSURfVlNZTkNfM0RNT0RFX09GRgkJMAo+ICsjZGVmaW5lIFZJRF9WU1lO Q18zRE1PREVfUE9SVFJBSVQJMQo+ICsjZGVmaW5lIFZJRF9WU1lOQ18zRE1PREVfTEFORFNDQVBF CTIKPiArCj4gKyNkZWZpbmUgTUNUTF9NQUlOX1NUUwkJCTB4MjQKPiArI2RlZmluZSBNQ1RMX01B SU5fU1RTX0NUTAkJMHgxMzAKPiArI2RlZmluZSBNQ1RMX01BSU5fU1RTX0NMUgkJMHgxNTAKPiAr I2RlZmluZSBNQ1RMX01BSU5fU1RTX0ZMQUcJCTB4MTcwCj4gKyNkZWZpbmUgSFNfU0tFV0NBTF9E T05FCQkJQklUKDExKQo+ICsjZGVmaW5lIElGX1VOVEVSTV9QS1RfRVJSKHgpCQlCSVQoOCArICh4 KSkKPiArI2RlZmluZSBMUFJYX1RJTUVPVVRfRVJSCQlCSVQoNykKPiArI2RlZmluZSBIU1RYX1RJ TUVPVVRfRVJSCQlCSVQoNikKPiArI2RlZmluZSBEQVRBX0xBTkVfUkRZKGwpCQlCSVQoMiArIChs KSkKPiArI2RlZmluZSBDTEtfTEFORV9SRFkJCQlCSVQoMSkKPiArI2RlZmluZSBQTExfTE9DS0VE CQkJQklUKDApCj4gKwo+ICsjZGVmaW5lIE1DVExfRFBIWV9FUlIJCQkweDI4Cj4gKyNkZWZpbmUg TUNUTF9EUEhZX0VSUl9DVEwxCQkweDE0OAo+ICsjZGVmaW5lIE1DVExfRFBIWV9FUlJfQ0xSCQkw eDE2OAo+ICsjZGVmaW5lIE1DVExfRFBIWV9FUlJfRkxBRwkJMHgxODgKPiArI2RlZmluZSBFUlJf Q09OVF9MUCh4LCBsKQkJQklUKDE4ICsgKCh4KSAqIDQpICsgKGwpKQo+ICsjZGVmaW5lIEVSUl9D T05UUk9MKGwpCQkJQklUKDE0ICsgKGwpKQo+ICsjZGVmaW5lIEVSUl9TWU5FU0MobCkJCQlCSVQo MTAgKyAobCkpCj4gKyNkZWZpbmUgRVJSX0VTQyhsKQkJCUJJVCg2ICsgKGwpKQo+ICsKPiArI2Rl ZmluZSBNQ1RMX0RQSFlfRVJSX0NUTDIJCTB4MTRjCj4gKyNkZWZpbmUgRVJSX0NPTlRfTFBfRURH RSh4LCBsKQkJQklUKDEyICsgKCh4KSAqIDQpICsgKGwpKQo+ICsjZGVmaW5lIEVSUl9DT05UUk9M X0VER0UobCkJCUJJVCg4ICsgKGwpKQo+ICsjZGVmaW5lIEVSUl9TWU5fRVNDX0VER0UobCkJCUJJ VCg0ICsgKGwpKQo+ICsjZGVmaW5lIEVSUl9FU0NfRURHRShsKQkJCUJJVCgwICsgKGwpKQo+ICsK PiArI2RlZmluZSBNQ1RMX0xBTkVfU1RTCQkJMHgyYwo+ICsjZGVmaW5lIFBQSV9DX1RYX1JFQURZ X0hTCQlCSVQoMTgpCj4gKyNkZWZpbmUgRFBIWV9QTExfTE9DSwkJCUJJVCgxNykKPiArI2RlZmlu ZSBQUElfRF9SWF9VTFBTX0VTQyh4KQkJKCgoeCkgJiBHRU5NQVNLKDE1LCAxMikpID4+IDEyKQo+ ICsjZGVmaW5lIExBTkVfU1RBVEVfU1RBUlQJCTAKPiArI2RlZmluZSBMQU5FX1NUQVRFX0lETEUJ CQkxCj4gKyNkZWZpbmUgTEFORV9TVEFURV9XUklURQkJMgo+ICsjZGVmaW5lIExBTkVfU1RBVEVf VUxQTQkJCTMKPiArI2RlZmluZSBMQU5FX1NUQVRFX1JFQUQJCQk0Cj4gKyNkZWZpbmUgREFUQV9M QU5FX1NUQVRFKGwsIHZhbCkJCVwKPiArCSgoKHZhbCkgPj4gKDIgKyAyICogKGwpICsgKChsKSA/ IDEgOiAwKSkpICYgR0VOTUFTSygobCkgPyAxIDogMiwgMCkpCj4gKyNkZWZpbmUgQ0xLX0xBTkVf U1RBVEVfSFMJCTIKPiArI2RlZmluZSBDTEtfTEFORV9TVEFURSh2YWwpCQkoKHZhbCkgJiBHRU5N QVNLKDEsIDApKQo+ICsKPiArI2RlZmluZSBEU0NfTU9ERV9DVEwJCQkweDMwCj4gKyNkZWZpbmUg RFNDX01PREVfRU4JCQlCSVQoMCkKPiArCj4gKyNkZWZpbmUgRFNDX0NNRF9TRU5ECQkJMHgzNAo+ ICsjZGVmaW5lIERTQ19TRU5EX1BQUwkJCUJJVCgwKQo+ICsjZGVmaW5lIERTQ19FWEVDVVRFX1FV RVVFCQlCSVQoMSkKPiArCj4gKyNkZWZpbmUgRFNDX1BQU19XUkRBVAkJCTB4MzgKPiArCj4gKyNk ZWZpbmUgRFNDX01PREVfU1RTCQkJMHgzYwo+ICsjZGVmaW5lIERTQ19QUFNfRE9ORQkJCUJJVCgx KQo+ICsjZGVmaW5lIERTQ19FWEVDX0RPTkUJCQlCSVQoMikKPiArCj4gKyNkZWZpbmUgQ01EX01P REVfQ1RMCQkJMHg3MAo+ICsjZGVmaW5lIElGX0xQX0VOKHgpCQkJQklUKDkgKyAoeCkpCj4gKyNk ZWZpbmUgSUZfVkNIQU5fSUQoeCwgYykJCSgoYykgPDwgKCh4KSAqIDIpKQo+ICsKPiArI2RlZmlu ZSBDTURfTU9ERV9DVEwyCQkJMHg3NAo+ICsjZGVmaW5lIFRFX1RJTUVPVVQoeCkJCQkoKHgpIDw8 IDExKQo+ICsjZGVmaW5lIEZJTExfVkFMVUUoeCkJCQkoKHgpIDw8IDMpCj4gKyNkZWZpbmUgQVJC X0lGX1dJVEhfSElHSEVTVF9QUklPUklUWSh4KQkoKHgpIDw8IDEpCj4gKyNkZWZpbmUgQVJCX1JP VU5EX1JPQklOX01PREUJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBDTURfTU9ERV9TVFMJCQkweDc4 Cj4gKyNkZWZpbmUgQ01EX01PREVfU1RTX0NUTAkJMHgxMzQKPiArI2RlZmluZSBDTURfTU9ERV9T VFNfQ0xSCQkweDE1NAo+ICsjZGVmaW5lIENNRF9NT0RFX1NUU19GTEFHCQkweDE3NAo+ICsjZGVm aW5lIEVSUl9JRl9VTkRFUlJVTih4KQkJQklUKDQgKyAoeCkpCj4gKyNkZWZpbmUgRVJSX1VOV0FO VEVEX1JFQUQJCUJJVCgzKQo+ICsjZGVmaW5lIEVSUl9URV9NSVNTCQkJQklUKDIpCj4gKyNkZWZp bmUgRVJSX05PX1RFCQkJQklUKDEpCj4gKyNkZWZpbmUgQ1NNX1JVTk5JTkcJCQlCSVQoMCkKPiAr Cj4gKyNkZWZpbmUgRElSRUNUX0NNRF9TRU5ECQkJMHg4MAo+ICsKPiArI2RlZmluZSBESVJFQ1Rf Q01EX01BSU5fU0VUVElOR1MJMHg4NAo+ICsjZGVmaW5lIFRSSUdHRVJfVkFMKHgpCQkJKCh4KSA8 PCAyNSkKPiArI2RlZmluZSBDTURfTFBfRU4JCQlCSVQoMjQpCj4gKyNkZWZpbmUgQ01EX1NJWkUo eCkJCQkoKHgpIDw8IDE2KQo+ICsjZGVmaW5lIENNRF9WQ0hBTl9JRCh4KQkJCSgoeCkgPDwgMTQp Cj4gKyNkZWZpbmUgQ01EX0RBVEFUWVBFKHgpCQkJKCh4KSA8PCA4KQo+ICsjZGVmaW5lIENNRF9M T05HCQkJQklUKDMpCj4gKyNkZWZpbmUgV1JJVEVfQ01ECQkJMAo+ICsjZGVmaW5lIFJFQURfQ01E CQkJMQo+ICsjZGVmaW5lIFRFX1JFUQkJCQk0Cj4gKyNkZWZpbmUgVFJJR0dFUl9SRVEJCQk1Cj4g KyNkZWZpbmUgQlRBX1JFUQkJCQk2Cj4gKwo+ICsjZGVmaW5lIERJUkVDVF9DTURfU1RTCQkJMHg4 OAo+ICsjZGVmaW5lIERJUkVDVF9DTURfU1RTX0NUTAkJMHgxMzgKPiArI2RlZmluZSBESVJFQ1Rf Q01EX1NUU19DTFIJCTB4MTU4Cj4gKyNkZWZpbmUgRElSRUNUX0NNRF9TVFNfRkxBRwkJMHgxNzgK PiArI2RlZmluZSBSQ1ZEX0FDS19WQUwodmFsKQkJKCh2YWwpID4+IDE2KQo+ICsjZGVmaW5lIFJD VkRfVFJJR0dFUl9WQUwodmFsKQkJKCgodmFsKSAmIEdFTk1BU0soMTQsIDExKSkgPj4gMTEpCj4g KyNkZWZpbmUgUkVBRF9DT01QTEVURURfV0lUSF9FUlIJCUJJVCgxMCkKPiArI2RlZmluZSBCVEFf RklOSVNIRUQJCQlCSVQoOSkKPiArI2RlZmluZSBCVEFfQ09NUExFVEVECQkJQklUKDgpCj4gKyNk ZWZpbmUgVEVfUkNWRAkJCQlCSVQoNykKPiArI2RlZmluZSBUUklHR0VSX1JDVkQJCQlCSVQoNikK PiArI2RlZmluZSBBQ0tfV0lUSF9FUlJfUkNWRAkJQklUKDUpCj4gKyNkZWZpbmUgQUNLX1JDVkQJ CQlCSVQoNCkKPiArI2RlZmluZSBSRUFEX0NPTVBMRVRFRAkJCUJJVCgzKQo+ICsjZGVmaW5lIFRS SUdHRVJfQ09NUExFVEVECQlCSVQoMikKPiArI2RlZmluZSBXUklURV9DT01QTEVURUQJCQlCSVQo MSkKPiArI2RlZmluZSBTRU5ESU5HX0NNRAkJCUJJVCgwKQo+ICsKPiArI2RlZmluZSBESVJFQ1Rf Q01EX1NUT1BfUkVBRAkJMHg4Ywo+ICsKPiArI2RlZmluZSBESVJFQ1RfQ01EX1dSREFUQQkJMHg5 MAo+ICsKPiArI2RlZmluZSBESVJFQ1RfQ01EX0ZJRk9fUlNUCQkweDk0Cj4gKwo+ICsjZGVmaW5l IERJUkVDVF9DTURfUkREQVRBCQkweGEwCj4gKwo+ICsjZGVmaW5lIERJUkVDVF9DTURfUkRfUFJP UFMJCTB4YTQKPiArI2RlZmluZSBSRF9EQ1MJCQkJQklUKDE4KQo+ICsjZGVmaW5lIFJEX1ZDSEFO X0lEKHZhbCkJCSgoKHZhbCkgPj4gMTYpICYgR0VOTUFTSygxLCAwKSkKPiArI2RlZmluZSBSRF9T SVpFKHZhbCkJCQkoKHZhbCkgJiBHRU5NQVNLKDE1LCAwKSkKPiArCj4gKyNkZWZpbmUgRElSRUNU X0NNRF9SRF9TVFMJCTB4YTgKPiArI2RlZmluZSBESVJFQ1RfQ01EX1JEX1NUU19DVEwJCTB4MTNj Cj4gKyNkZWZpbmUgRElSRUNUX0NNRF9SRF9TVFNfQ0xSCQkweDE1Ywo+ICsjZGVmaW5lIERJUkVD VF9DTURfUkRfU1RTX0ZMQUcJCTB4MTdjCj4gKyNkZWZpbmUgRVJSX0VPVF9XSVRIX0VSUgkJQklU KDgpCj4gKyNkZWZpbmUgRVJSX01JU1NJTkdfRU9UCQkJQklUKDcpCj4gKyNkZWZpbmUgRVJSX1dS T05HX0xFTkdUSAkJQklUKDYpCj4gKyNkZWZpbmUgRVJSX09WRVJTSVpFCQkJQklUKDUpCj4gKyNk ZWZpbmUgRVJSX1JFQ0VJVkUJCQlCSVQoNCkKPiArI2RlZmluZSBFUlJfVU5ERUNPREFCTEUJCQlC SVQoMykKPiArI2RlZmluZSBFUlJfQ0hFQ0tTVU0JCQlCSVQoMikKPiArI2RlZmluZSBFUlJfVU5D T1JSRUNUQUJMRQkJQklUKDEpCj4gKyNkZWZpbmUgRVJSX0ZJWEVECQkJQklUKDApCj4gKwo+ICsj ZGVmaW5lIFZJRF9NQUlOX0NUTAkJCTB4YjAKPiArI2RlZmluZSBWSURfSUdOT1JFX01JU1NfVlNZ TkMJCUJJVCgzMSkKPiArI2RlZmluZSBWSURfRklFTERfU1cJCQlCSVQoMjgpCj4gKyNkZWZpbmUg VklEX0lOVEVSTEFDRURfRU4JCUJJVCgyNykKPiArI2RlZmluZSBSRUNPVkVSWV9NT0RFKHgpCQko KHgpIDw8IDI1KQo+ICsjZGVmaW5lIFJFQ09WRVJZX01PREVfTkVYVF9IU1lOQwkwCj4gKyNkZWZp bmUgUkVDT1ZFUllfTU9ERV9ORVhUX1NUT1BfUE9JTlQJMgo+ICsjZGVmaW5lIFJFQ09WRVJZX01P REVfTkVYVF9WU1lOQwkzCj4gKyNkZWZpbmUgUkVHX0JMS0VPTF9NT0RFKHgpCQkoKHgpIDw8IDIz KQo+ICsjZGVmaW5lIFJFR19CTEtMSU5FX01PREUoeCkJCSgoeCkgPDwgMjEpCj4gKyNkZWZpbmUg UkVHX0JMS19NT0RFX05VTExfUEtUCQkwCj4gKyNkZWZpbmUgUkVHX0JMS19NT0RFX0JMQU5LSU5H X1BLVAkxCj4gKyNkZWZpbmUgUkVHX0JMS19NT0RFX0xQCQkJMgo+ICsjZGVmaW5lIFNZTkNfUFVM U0VfSE9SSVpPTlRBTAkJQklUKDIwKQo+ICsjZGVmaW5lIFNZTkNfUFVMU0VfQUNUSVZFCQlCSVQo MTkpCj4gKyNkZWZpbmUgQlVSU1RfTU9ERQkJCUJJVCgxOCkKPiArI2RlZmluZSBWSURfUElYRUxf TU9ERV9NQVNLCQlHRU5NQVNLKDE3LCAxNCkKPiArI2RlZmluZSBWSURfUElYRUxfTU9ERV9SR0I1 NjUJCSgwIDw8IDE0KQo+ICsjZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1JHQjY2Nl9QQUNLRUQJKDEg PDwgMTQpCj4gKyNkZWZpbmUgVklEX1BJWEVMX01PREVfUkdCNjY2CQkoMiA8PCAxNCkKPiArI2Rl ZmluZSBWSURfUElYRUxfTU9ERV9SR0I4ODgJCSgzIDw8IDE0KQo+ICsjZGVmaW5lIFZJRF9QSVhF TF9NT0RFX1JHQjEwMTAxMAkoNCA8PCAxNCkKPiArI2RlZmluZSBWSURfUElYRUxfTU9ERV9SR0Ix MjEyMTIJKDUgPDwgMTQpCj4gKyNkZWZpbmUgVklEX1BJWEVMX01PREVfWVVWNDIwCQkoOCA8PCAx NCkKPiArI2RlZmluZSBWSURfUElYRUxfTU9ERV9ZVVY0MjJfUEFDS0VECSg5IDw8IDE0KQo+ICsj ZGVmaW5lIFZJRF9QSVhFTF9NT0RFX1lVVjQyMgkJKDEwIDw8IDE0KQo+ICsjZGVmaW5lIFZJRF9Q SVhFTF9NT0RFX1lVVjQyMl8yNEIJKDExIDw8IDE0KQo+ICsjZGVmaW5lIFZJRF9QSVhFTF9NT0RF X0RTQ19DT01QCQkoMTIgPDwgMTQpCj4gKyNkZWZpbmUgVklEX0RBVEFUWVBFKHgpCQkJKCh4KSA8 PCA4KQo+ICsjZGVmaW5lIFZJRF9WSVJUQ0hBTl9JRChpZmFjZSwgeCkJKCh4KSA8PCAoNCArIChp ZmFjZSkgKiAyKSkKPiArI2RlZmluZSBTVE9QX01PREUoeCkJCQkoKHgpIDw8IDIpCj4gKyNkZWZp bmUgU1RBUlRfTU9ERSh4KQkJCSh4KQo+ICsKPiArI2RlZmluZSBWSURfVlNJWkUxCQkJMHhiNAo+ ICsjZGVmaW5lIFZGUF9MRU4oeCkJCQkoKHgpIDw8IDEyKQo+ICsjZGVmaW5lIFZCUF9MRU4oeCkJ CQkoKHgpIDw8IDYpCj4gKyNkZWZpbmUgVlNBX0xFTih4KQkJCSh4KQo+ICsKPiArI2RlZmluZSBW SURfVlNJWkUyCQkJMHhiOAo+ICsjZGVmaW5lIFZBQ1RfTEVOKHgpCQkJKHgpCj4gKwo+ICsjZGVm aW5lIFZJRF9IU0laRTEJCQkweGMwCj4gKyNkZWZpbmUgSEJQX0xFTih4KQkJCSgoeCkgPDwgMTYp Cj4gKyNkZWZpbmUgSFNBX0xFTih4KQkJCSh4KQo+ICsKPiArI2RlZmluZSBWSURfSFNJWkUyCQkJ MHhjNAo+ICsjZGVmaW5lIEhGUF9MRU4oeCkJCQkoKHgpIDw8IDE2KQo+ICsjZGVmaW5lIEhBQ1Rf TEVOKHgpCQkJKHgpCj4gKwo+ICsjZGVmaW5lIFZJRF9CTEtTSVpFMQkJCTB4Y2MKPiArI2RlZmlu ZSBCTEtfRU9MX1BLVF9MRU4oeCkJCSgoeCkgPDwgMTUpCj4gKyNkZWZpbmUgQkxLX0xJTkVfRVZF TlRfUEtUX0xFTih4KQkoeCkKPiArCj4gKyNkZWZpbmUgVklEX0JMS1NJWkUyCQkJMHhkMAo+ICsj ZGVmaW5lIEJMS19MSU5FX1BVTFNFX1BLVF9MRU4oeCkJKHgpCj4gKwo+ICsjZGVmaW5lIFZJRF9Q S1RfVElNRQkJCTB4ZDgKPiArI2RlZmluZSBCTEtfRU9MX0RVUkFUSU9OKHgpCQkoeCkKPiArCj4g KyNkZWZpbmUgVklEX0RQSFlfVElNRQkJCTB4ZGMKPiArI2RlZmluZSBSRUdfV0FLRVVQX1RJTUUo eCkJCSgoeCkgPDwgMTcpCj4gKyNkZWZpbmUgUkVHX0xJTkVfRFVSQVRJT04oeCkJCSh4KQo+ICsK PiArI2RlZmluZSBWSURfRVJSX0NPTE9SMQkJCTB4ZTAKPiArI2RlZmluZSBDT0xfR1JFRU4oeCkJ CQkoKHgpIDw8IDEyKQo+ICsjZGVmaW5lIENPTF9SRUQoeCkJCQkoeCkKPiArCj4gKyNkZWZpbmUg VklEX0VSUl9DT0xPUjIJCQkweGU0Cj4gKyNkZWZpbmUgUEFEX1ZBTCh4KQkJCSgoeCkgPDwgMTIp Cj4gKyNkZWZpbmUgQ09MX0JMVUUoeCkJCQkoeCkKPiArCj4gKyNkZWZpbmUgVklEX1ZQT1MJCQkw eGU4Cj4gKyNkZWZpbmUgTElORV9WQUwodmFsKQkJCSgoKHZhbCkgJiBHRU5NQVNLKDE0LCAyKSkg Pj4gMikKPiArI2RlZmluZSBMSU5FX1BPUyh2YWwpCQkJKCh2YWwpICYgR0VOTUFTSygxLCAwKSkK PiArCj4gKyNkZWZpbmUgVklEX0hQT1MJCQkweGVjCj4gKyNkZWZpbmUgSE9SSVpfVkFMKHZhbCkJ CQkoKCh2YWwpICYgR0VOTUFTSygxNywgMykpID4+IDMpCj4gKyNkZWZpbmUgSE9SSVpfUE9TKHZh bCkJCQkoKHZhbCkgJiBHRU5NQVNLKDIsIDApKQo+ICsKPiArI2RlZmluZSBWSURfTU9ERV9TVFMJ CQkweGYwCj4gKyNkZWZpbmUgVklEX01PREVfU1RTX0NUTAkJMHgxNDAKPiArI2RlZmluZSBWSURf TU9ERV9TVFNfQ0xSCQkweDE2MAo+ICsjZGVmaW5lIFZJRF9NT0RFX1NUU19GTEFHCQkweDE4MAo+ ICsjZGVmaW5lIFZTR19SRUNPVkVSWQkJCUJJVCgxMCkKPiArI2RlZmluZSBFUlJfVlJTX1dST05H X0xFTgkJQklUKDkpCj4gKyNkZWZpbmUgRVJSX0xPTkdfUkVBRAkJCUJJVCg4KQo+ICsjZGVmaW5l IEVSUl9MSU5FX1dSSVRFCQkJQklUKDcpCj4gKyNkZWZpbmUgRVJSX0JVUlNUX1dSSVRFCQkJQklU KDYpCj4gKyNkZWZpbmUgRVJSX1NNQUxMX0hFSUdIVAkJQklUKDUpCj4gKyNkZWZpbmUgRVJSX1NN QUxMX0xFTgkJCUJJVCg0KQo+ICsjZGVmaW5lIEVSUl9NSVNTSU5HX1ZTWU5DCQlCSVQoMykKPiAr I2RlZmluZSBFUlJfTUlTU0lOR19IU1lOQwkJQklUKDIpCj4gKyNkZWZpbmUgRVJSX01JU1NJTkdf REFUQQkJQklUKDEpCj4gKyNkZWZpbmUgVlNHX1JVTk5JTkcJCQlCSVQoMCkKPiArCj4gKyNkZWZp bmUgVklEX1ZDQV9TRVRUSU5HMQkJMHhmNAo+ICsjZGVmaW5lIEJVUlNUX0xQCQkJQklUKDE2KQo+ ICsjZGVmaW5lIE1BWF9CVVJTVF9MSU1JVCh4KQkJKHgpCj4gKwo+ICsjZGVmaW5lIFZJRF9WQ0Ff U0VUVElORzIJCTB4ZjgKPiArI2RlZmluZSBNQVhfTElORV9MSU1JVCh4KQkJKCh4KSA8PCAxNikK PiArI2RlZmluZSBFWEFDVF9CVVJTVF9MSU1JVCh4KQkJKHgpCj4gKwo+ICsjZGVmaW5lIFRWR19D VEwJCQkJMHhmYwo+ICsjZGVmaW5lIFRWR19TVFJJUEVfU0laRSh4KQkJKCh4KSA8PCA1KQo+ICsj ZGVmaW5lIFRWR19NT0RFX01BU0sJCQlHRU5NQVNLKDQsIDMpCj4gKyNkZWZpbmUgVFZHX01PREVf U0lOR0xFX0NPTE9SCQkoMCA8PCAzKQo+ICsjZGVmaW5lIFRWR19NT0RFX1ZTVFJJUEVTCQkoMiA8 PCAzKQo+ICsjZGVmaW5lIFRWR19NT0RFX0hTVFJJUEVTCQkoMyA8PCAzKQo+ICsjZGVmaW5lIFRW R19TVE9QTU9ERV9NQVNLCQlHRU5NQVNLKDIsIDEpCj4gKyNkZWZpbmUgVFZHX1NUT1BNT0RFX0VP RgkJKDAgPDwgMSkKPiArI2RlZmluZSBUVkdfU1RPUE1PREVfRU9MCQkoMSA8PCAxKQo+ICsjZGVm aW5lIFRWR19TVE9QTU9ERV9OT1cJCSgyIDw8IDEpCj4gKyNkZWZpbmUgVFZHX1JVTgkJCQlCSVQo MCkKPiArCj4gKyNkZWZpbmUgVFZHX0lNR19TSVpFCQkJMHgxMDAKPiArI2RlZmluZSBUVkdfTkJM SU5FUyh4KQkJCSgoeCkgPDwgMTYpCj4gKyNkZWZpbmUgVFZHX0xJTkVfU0laRSh4KQkJKHgpCj4g Kwo+ICsjZGVmaW5lIFRWR19DT0xPUjEJCQkweDEwNAo+ICsjZGVmaW5lIFRWR19DT0wxX0dSRUVO KHgpCQkoKHgpIDw8IDEyKQo+ICsjZGVmaW5lIFRWR19DT0wxX1JFRCh4KQkJCSh4KQo+ICsKPiAr I2RlZmluZSBUVkdfQ09MT1IxX0JJUwkJCTB4MTA4Cj4gKyNkZWZpbmUgVFZHX0NPTDFfQkxVRSh4 KQkJKHgpCj4gKwo+ICsjZGVmaW5lIFRWR19DT0xPUjIJCQkweDEwYwo+ICsjZGVmaW5lIFRWR19D T0wyX0dSRUVOKHgpCQkoKHgpIDw8IDEyKQo+ICsjZGVmaW5lIFRWR19DT0wyX1JFRCh4KQkJCSh4 KQo+ICsKPiArI2RlZmluZSBUVkdfQ09MT1IyX0JJUwkJCTB4MTEwCj4gKyNkZWZpbmUgVFZHX0NP TDJfQkxVRSh4KQkJKHgpCj4gKwo+ICsjZGVmaW5lIFRWR19TVFMJCQkJMHgxMTQKPiArI2RlZmlu ZSBUVkdfU1RTX0NUTAkJCTB4MTQ0Cj4gKyNkZWZpbmUgVFZHX1NUU19DTFIJCQkweDE2NAo+ICsj ZGVmaW5lIFRWR19TVFNfRkxBRwkJCTB4MTg0Cj4gKyNkZWZpbmUgVFZHX1NUU19SVU5OSU5HCQkJ QklUKDApCj4gKwo+ICsjZGVmaW5lIFNUU19DVExfRURHRShlKQkJCSgoZSkgPDwgMTYpCj4gKwo+ ICsjZGVmaW5lIERQSFlfTEFORVNfTUFQCQkJMHgxOTgKPiArI2RlZmluZSBEQVRfUkVNQVBfQ0ZH KGIsIGwpCQkoKGwpIDw8ICgoYikgKiA4KSkKPiArCj4gKyNkZWZpbmUgRFBJX0lSUV9FTgkJCTB4 MWEwCj4gKyNkZWZpbmUgRFBJX0lSUV9DTFIJCQkweDFhNAo+ICsjZGVmaW5lIERQSV9JUlFfU1RT CQkJMHgxYTgKPiArI2RlZmluZSBQSVhFTF9CVUZfT1ZFUkZMT1cJCUJJVCgwKQo+ICsKPiArI2Rl ZmluZSBEUElfQ0ZHCQkJCTB4MWFjCj4gKyNkZWZpbmUgRFBJX0NGR19GSUZPX0RFUFRIKHgpCQko KHgpID4+IDE2KQo+ICsjZGVmaW5lIERQSV9DRkdfRklGT19MRVZFTCh4KQkJKCh4KSAmIEdFTk1B U0soMTUsIDApKQo+ICsKPiArI2RlZmluZSBURVNUX0dFTkVSSUMJCQkweDFmMAo+ICsjZGVmaW5l IFRFU1RfU1RBVFVTKHgpCQkJKCh4KSA+PiAxNikKPiArI2RlZmluZSBURVNUX0NUUkwoeCkJCQko eCkKPiArCj4gKyNkZWZpbmUgSURfUkVHCQkJCTB4MWZjCj4gKyNkZWZpbmUgUkVWX1ZFTkRPUl9J RCh4KQkJKCgoeCkgJiBHRU5NQVNLKDMxLCAyMCkpID4+IDIwKQo+ICsjZGVmaW5lIFJFVl9QUk9E VUNUX0lEKHgpCQkoKCh4KSAmIEdFTk1BU0soMTksIDEyKSkgPj4gMTIpCj4gKyNkZWZpbmUgUkVW X0hXKHgpCQkJKCgoeCkgJiBHRU5NQVNLKDExLCA4KSkgPj4gOCkKPiArI2RlZmluZSBSRVZfTUFK T1IoeCkJCQkoKCh4KSAmIEdFTk1BU0soNywgNCkpID4+IDQpCj4gKyNkZWZpbmUgUkVWX01JTk9S KHgpCQkJKCh4KSAmIEdFTk1BU0soMywgMCkpCj4gKwo+ICsjZGVmaW5lIERTSV9PVVRQVVRfUE9S VAkJCTAKPiArI2RlZmluZSBEU0lfSU5QVVRfUE9SVChpbnB1dGlkKQkJKDEgKyAoaW5wdXRpZCkp Cj4gKwo+ICsjZGVmaW5lIERTSV9IQlBfRlJBTUVfT1ZFUkhFQUQJCTEyCj4gKyNkZWZpbmUgRFNJ X0hTQV9GUkFNRV9PVkVSSEVBRAkJMTQKPiArI2RlZmluZSBEU0lfSEZQX0ZSQU1FX09WRVJIRUFE CQk2Cj4gKyNkZWZpbmUgRFNJX0hTU19WU1NfVlNFX0ZSQU1FX09WRVJIRUFECTQKPiArI2RlZmlu ZSBEU0lfQkxBTktJTkdfRlJBTUVfT1ZFUkhFQUQJNgo+ICsjZGVmaW5lIERTSV9OVUxMX0ZSQU1F X09WRVJIRUFECQk2Cj4gKyNkZWZpbmUgRFNJX0VPVF9QS1RfU0laRQkJNAo+ICsKPiArI2RlZmlu ZSBSRUdfV0FLRVVQX1RJTUVfTlMJCTgwMAo+ICsjZGVmaW5lIERQSFlfUExMX1JBVEVfSFoJCTEw ODAwMDAwMAo+ICsKPiArLyogRFBIWSByZWdpc3RlcnMgKi8KPiArI2RlZmluZSBEUEhZX1BNQV9D TU4ocmVnKQkJKHJlZykKPiArI2RlZmluZSBEUEhZX1BNQV9MQ0xLKHJlZykJCSgweDEwMCArIChy ZWcpKQo+ICsjZGVmaW5lIERQSFlfUE1BX0xEQVRBKGxhbmUsIHJlZykJKDB4MjAwICsgKChsYW5l KSAqIDB4MTAwKSArIChyZWcpKQo+ICsjZGVmaW5lIERQSFlfUE1BX1JDTEsocmVnKQkJKDB4NjAw ICsgKHJlZykpCj4gKyNkZWZpbmUgRFBIWV9QTUFfUkRBVEEobGFuZSwgcmVnKQkoMHg3MDAgKyAo KGxhbmUpICogMHgxMDApICsgKHJlZykpCj4gKyNkZWZpbmUgRFBIWV9QQ1MocmVnKQkJCSgweGIw MCArIChyZWcpKQo+ICsKPiArI2RlZmluZSBEUEhZX0NNTl9TU00JCQlEUEhZX1BNQV9DTU4oMHgy MCkKPiArI2RlZmluZSBEUEhZX0NNTl9TU01fRU4JCQlCSVQoMCkKPiArI2RlZmluZSBEUEhZX0NN Tl9UWF9NT0RFX0VOCQlCSVQoOSkKPiArCj4gKyNkZWZpbmUgRFBIWV9DTU5fUFdNCQkJRFBIWV9Q TUFfQ01OKDB4NDApCj4gKyNkZWZpbmUgRFBIWV9DTU5fUFdNX0RJVih4KQkJKCh4KSA8PCAyMCkK PiArI2RlZmluZSBEUEhZX0NNTl9QV01fTE9XKHgpCQkoKHgpIDw8IDEwKQo+ICsjZGVmaW5lIERQ SFlfQ01OX1BXTV9ISUdIKHgpCQkoeCkKPiArCj4gKyNkZWZpbmUgRFBIWV9DTU5fRkJESVYJCQlE UEhZX1BNQV9DTU4oMHg0YykKPiArI2RlZmluZSBEUEhZX0NNTl9GQkRJVl9WQUwobG93LCBoaWdo KQkoKChoaWdoKSA8PCAxMSkgfCAoKGxvdykgPDwgMjIpKQo+ICsjZGVmaW5lIERQSFlfQ01OX0ZC RElWX0ZST01fUkVHCQkoQklUKDEwKSB8IEJJVCgyMSkpCj4gKwo+ICsjZGVmaW5lIERQSFlfQ01O X09QSVBESVYJCURQSFlfUE1BX0NNTigweDUwKQo+ICsjZGVmaW5lIERQSFlfQ01OX0lQRElWX0ZS T01fUkVHCQlCSVQoMCkKPiArI2RlZmluZSBEUEhZX0NNTl9JUERJVih4KQkJKCh4KSA8PCAxKQo+ ICsjZGVmaW5lIERQSFlfQ01OX09QRElWX0ZST01fUkVHCQlCSVQoNikKPiArI2RlZmluZSBEUEhZ X0NNTl9PUERJVih4KQkJKCh4KSA8PCA3KQo+ICsKPiArI2RlZmluZSBEUEhZX1BTTV9DRkcJCQlE UEhZX1BDUygweDQpCj4gKyNkZWZpbmUgRFBIWV9QU01fQ0ZHX0ZST01fUkVHCQlCSVQoMCkKPiAr I2RlZmluZSBEUEhZX1BTTV9DTEtfRElWKHgpCQkoKHgpIDw8IDEpCj4gKwo+ICtzdHJ1Y3QgY2Ru c19kc2lfb3V0cHV0IHsKPiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldjsKPiArCXN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsOwo+ICsJc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsKPiArfTsK PiArCj4gK2VudW0gY2Ruc19kc2lfaW5wdXRfaWQgewo+ICsJQ0ROU19TRElfSU5QVVQsCj4gKwlD RE5TX0RQSV9JTlBVVCwKPiArCUNETlNfRFNDX0lOUFVULAo+ICt9Owo+ICsKPiArc3RydWN0IGNk bnNfZHBoeV9jZmcgewo+ICsJdTggcGxsX2lwZGl2Owo+ICsJdTggcGxsX29wZGl2Owo+ICsJdTE2 IHBsbF9mYmRpdjsKPiArCXVuc2lnbmVkIGxvbmcgbGFuZV9icHM7Cj4gKwl1bnNpZ25lZCBpbnQg bmxhbmVzOwo+ICt9Owo+ICsKPiArc3RydWN0IGNkbnNfZHNpX2NmZyB7Cj4gKwl1bnNpZ25lZCBp bnQgaGZwOwo+ICsJdW5zaWduZWQgaW50IGhzYTsKPiArCXVuc2lnbmVkIGludCBoYnA7Cj4gKwl1 bnNpZ25lZCBpbnQgaGFjdDsKPiArCXVuc2lnbmVkIGludCBodG90YWw7Cj4gK307Cj4gKwo+ICtz dHJ1Y3QgY2Ruc19kcGh5Owo+ICsKPiArZW51bSBjZG5zX2RwaHlfY2xrX2xhbmVfY2ZnIHsKPiAr CURQSFlfQ0xLX0NGR19MRUZUX0RSSVZFU19BTEwgPSAwLAo+ICsJRFBIWV9DTEtfQ0ZHX0xFRlRf RFJJVkVTX1JJR0hUID0gMSwKPiArCURQSFlfQ0xLX0NGR19MRUZUX0RSSVZFU19MRUZUID0gMiwK PiArCURQSFlfQ0xLX0NGR19SSUdIVF9EUklWRVNfQUxMID0gMywKPiArfTsKPiArCj4gK3N0cnVj dCBjZG5zX2RwaHlfb3BzIHsKPiArCWludCAoKnByb2JlKShzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5 KTsKPiArCXZvaWQgKCpyZW1vdmUpKHN0cnVjdCBjZG5zX2RwaHkgKmRwaHkpOwo+ICsJdm9pZCAo KnNldF9wc21fZGl2KShzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5LCB1OCBkaXYpOwo+ICsJdm9pZCAo KnNldF9jbGtfbGFuZV9jZmcpKHN0cnVjdCBjZG5zX2RwaHkgKmRwaHksCj4gKwkJCQkgZW51bSBj ZG5zX2RwaHlfY2xrX2xhbmVfY2ZnIGNmZyk7Cj4gKwl2b2lkICgqc2V0X3BsbF9jZmcpKHN0cnVj dCBjZG5zX2RwaHkgKmRwaHksCj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgY2Ruc19kcGh5X2NmZyAq Y2ZnKTsKPiArCXVuc2lnbmVkIGxvbmcgKCpnZXRfd2FrZXVwX3RpbWVfbnMpKHN0cnVjdCBjZG5z X2RwaHkgKmRwaHkpOwo+ICt9Owo+ICsKPiArc3RydWN0IGNkbnNfZHBoeSB7Cj4gKwlzdHJ1Y3Qg Y2Ruc19kcGh5X2NmZyBjZmc7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwlzdHJ1Y3QgY2xr ICpwc21fY2xrOwo+ICsJc3RydWN0IGNsayAqcGxsX3JlZl9jbGs7Cj4gKwljb25zdCBzdHJ1Y3Qg Y2Ruc19kcGh5X29wcyAqb3BzOwo+ICt9Owo+ICsKPiArc3RydWN0IGNkbnNfZHNpX2lucHV0IHsK PiArCWVudW0gY2Ruc19kc2lfaW5wdXRfaWQgaWQ7Cj4gKwlzdHJ1Y3QgZHJtX2JyaWRnZSBicmlk Z2U7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgY2Ruc19kc2kgewo+ICsJc3RydWN0IG1pcGlfZHNpX2hv c3QgYmFzZTsKPiArCXZvaWQgX19pb21lbSAqcmVnczsKPiArCXN0cnVjdCBjZG5zX2RzaV9pbnB1 dCBpbnB1dDsKPiArCXN0cnVjdCBjZG5zX2RzaV9vdXRwdXQgb3V0cHV0Owo+ICsJdW5zaWduZWQg aW50IGRpcmVjdF9jbWRfZmlmb19kZXB0aDsKPiArCXVuc2lnbmVkIGludCByeF9maWZvX2RlcHRo Owo+ICsJc3RydWN0IGNvbXBsZXRpb24gZGlyZWN0X2NtZF9jb21wOwo+ICsJc3RydWN0IGNsayAq ZHNpX3BfY2xrOwo+ICsJc3RydWN0IHJlc2V0X2NvbnRyb2wgKmRzaV9wX3JzdDsKPiArCXN0cnVj dCBjbGsgKmRzaV9zeXNfY2xrOwo+ICsJYm9vbCBsaW5rX2luaXRpYWxpemVkOwo+ICsJc3RydWN0 IGNkbnNfZHBoeSAqZHBoeTsKPiArfTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNkbnNf ZHNpICppbnB1dF90b19kc2koc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCkKPiArewo+ICsJ cmV0dXJuIGNvbnRhaW5lcl9vZihpbnB1dCwgc3RydWN0IGNkbnNfZHNpLCBpbnB1dCk7Cj4gK30K PiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNkbnNfZHNpICp0b19jZG5zX2RzaShzdHJ1Y3Qg bWlwaV9kc2lfaG9zdCAqaG9zdCkKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBz dHJ1Y3QgY2Ruc19kc2ksIGJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBj ZG5zX2RzaV9pbnB1dCAqCj4gK2JyaWRnZV90b19jZG5zX2RzaV9pbnB1dChzdHJ1Y3QgZHJtX2Jy aWRnZSAqYnJpZGdlKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0 IGNkbnNfZHNpX2lucHV0LCBicmlkZ2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHNp X2dldF9kcGh5X3BsbF9jZmcoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwKPiArCQkJCSAgICAgc3Ry dWN0IGNkbnNfZHBoeV9jZmcgKmNmZywKPiArCQkJCSAgICAgdW5zaWduZWQgaW50IGRwaV9odG90 YWwsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCBkcGlfYnBwLAo+ICsJCQkJICAgICB1bnNpZ25l ZCBpbnQgZHBpX2h6LAo+ICsJCQkJICAgICB1bnNpZ25lZCBpbnQgZHNpX2h0b3RhbCwKPiArCQkJ CSAgICAgdW5zaWduZWQgaW50IGRzaV9ubGFuZXMsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGludCAq ZHNpX2hmcF9leHQpCj4gK3sKPiArCXU2NCBkbGFuZV9icHMsIGRsYW5lX2Jwc19tYXgsIGZiZGl2 LCBmYmRpdl9tYXgsIGFkal9kc2lfaHRvdGFsOwo+ICsJdW5zaWduZWQgbG9uZyBwbGxfcmVmX2h6 ID0gY2xrX2dldF9yYXRlKGRwaHktPnBsbF9yZWZfY2xrKTsKPiArCj4gKwltZW1zZXQoY2ZnLCAw LCBzaXplb2YoKmNmZykpOwo+ICsKPiArCWNmZy0+bmxhbmVzID0gZHNpX25sYW5lczsKPiArCj4g KwlpZiAocGxsX3JlZl9oeiA8IDk2MDAwMDAgfHwgcGxsX3JlZl9oeiA+PSAxNTAwMDAwMDApCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwllbHNlIGlmIChwbGxfcmVmX2h6IDwgMTkyMDAwMDApCj4g KwkJY2ZnLT5wbGxfaXBkaXYgPSAxOwo+ICsJZWxzZSBpZiAocGxsX3JlZl9oeiA8IDM4NDAwMDAw KQo+ICsJCWNmZy0+cGxsX2lwZGl2ID0gMjsKPiArCWVsc2UgaWYgKHBsbF9yZWZfaHogPCA3Njgw MDAwMCkKPiArCQljZmctPnBsbF9pcGRpdiA9IDQ7Cj4gKwllbHNlCj4gKwkJY2ZnLT5wbGxfaXBk aXYgPSA4Owo+ICsKPiArCS8qCj4gKwkgKiBNYWtlIHN1cmUgRFNJIGh0b3RhbCBpcyBhbGlnbmVk IG9uIGEgbGFuZSBib3VuZGFyeSB3aGVuIGNhbGN1bGF0aW5nCj4gKwkgKiB0aGUgZXhwZWN0ZWQg ZGF0YSByYXRlLiBUaGlzIGlzIGRvbmUgYnkgZXh0ZW5kaW5nIEhGUCBpbiBjYXNlIG9mCj4gKwkg KiBtaXNhbGlnbm1lbnQuCj4gKwkgKi8KPiArCWFkal9kc2lfaHRvdGFsID0gZHNpX2h0b3RhbDsK PiArCWlmIChkc2lfaHRvdGFsICUgZHNpX25sYW5lcykKPiArCQlhZGpfZHNpX2h0b3RhbCArPSBk c2lfbmxhbmVzIC0gKGRzaV9odG90YWwgJSBkc2lfbmxhbmVzKTsKPiArCj4gKwlkbGFuZV9icHMg PSAodTY0KWRwaV9oeiAqIGFkal9kc2lfaHRvdGFsOwo+ICsKPiArCS8qIGRhdGEgcmF0ZSBpbiBi eXRlcy9zZWMgaXMgbm90IGFuIGludGVnZXIsIHJlZnVzZSB0aGUgbW9kZS4gKi8KPiArCWlmIChk b19kaXYoZGxhbmVfYnBzLCBkc2lfbmxhbmVzICogZHBpX2h0b3RhbCkpCj4gKwkJcmV0dXJuIC1F SU5WQUw7Cj4gKwo+ICsJLyogZGF0YSByYXRlIHdhcyBpbiBieXRlcy9zZWMsIGNvbnZlcnQgdG8g Yml0cy9zZWMuICovCj4gKwlkbGFuZV9icHMgKj0gODsKPiArCj4gKwlpZiAoZGxhbmVfYnBzID4g MjUwMDAwMDAwMFVMIHx8IGRsYW5lX2JwcyA8IDE2MDAwMDAwMFVMKQo+ICsJCXJldHVybiAtRUlO VkFMOwo+ICsJZWxzZSBpZiAoZGxhbmVfYnBzID49IDEyNTAwMDAwMDApCj4gKwkJY2ZnLT5wbGxf b3BkaXYgPSAxOwo+ICsJZWxzZSBpZiAoZGxhbmVfYnBzID49IDYzMDAwMDAwMCkKPiArCQljZmct PnBsbF9vcGRpdiA9IDI7Cj4gKwllbHNlIGlmIChkbGFuZV9icHMgPj0gMzIwMDAwMDAwKQo+ICsJ CWNmZy0+cGxsX29wZGl2ID0gNDsKPiArCWVsc2UgaWYgKGRsYW5lX2JwcyA+PSAxNjAwMDAwMDAp Cj4gKwkJY2ZnLT5wbGxfb3BkaXYgPSA4Owo+ICsKPiArCS8qCj4gKwkgKiBBbGxvdyBhIGRldmlh dGlvbiBvZiAwLjIlIG9uIHRoZSBwZXItbGFuZSBkYXRhIHJhdGUgdG8gdHJ5IHRvCj4gKwkgKiBy ZWNvdmVyIGEgcG90ZW50aWFsIG1pc21hdGNoIGJldHdlZW4gRFBJIGFuZCBQUEkgY2xrcy4KPiAr CSAqLwo+ICsJZGxhbmVfYnBzX21heCA9IGRsYW5lX2JwcyArIERJVl9ST1VORF9ET1dOX1VMTChk bGFuZV9icHMsIDUwMCk7Cj4gKwlmYmRpdl9tYXggPSBESVZfUk9VTkRfRE9XTl9VTEwoZGxhbmVf YnBzX21heCAqIDIgKgo+ICsJCQkJICAgICAgIGNmZy0+cGxsX29wZGl2ICogY2ZnLT5wbGxfaXBk aXYsCj4gKwkJCQkgICAgICAgcGxsX3JlZl9oeik7Cj4gKwlmYmRpdiA9IERJVl9ST1VORF9VUF9V TEwoZGxhbmVfYnBzICogMiAqIGNmZy0+cGxsX29wZGl2ICoKPiArCQkJCSBjZmctPnBsbF9pcGRp diwKPiArCQkJCSBwbGxfcmVmX2h6KTsKPiArCj4gKwkvKgo+ICsJICogSXRlcmF0ZSBvdmVyIGFs bCBhY2NlcHRhYmxlIGZiZGl2IGFuZCB0cnkgdG8gZmluZCBhbiBhZGp1c3RlZCBEU0kKPiArCSAq IGh0b3RhbCBsZW5ndGggcHJvdmlkaW5nIGFuIGV4YWN0IG1hdGNoLgo+ICsJICoKPiArCSAqIE5v dGUgdGhhdCB3ZSBjb3VsZCBkbyBzb21ldGhpbmcgZXZlbiB0cmlja2llciBieSByZWx5aW5nIG9u IHRoZSBmYWN0Cj4gKwkgKiB0aGF0IGEgbmV3IGxpbmUgaXMgbm90IG5lY2Vzc2FyaWx5IGFsaWdu ZWQgb24gYSBsYW5lIGJvdW5kYXJ5LCBzbywKPiArCSAqIGJ5IG1ha2luZyBhZGpfZHNpX2h0b3Rh bCBub24gYWxpZ25lZCBvbiBhIGRzaV9sYW5lcyB3ZSBjYW4gaW1wcm92ZSBhCj4gKwkgKiBiaXQg dGhlIHByZWNpc2lvbi4gV2l0aCB0aGlzLCB0aGUgc3RlcCB3b3VsZCBiZQo+ICsJICoKPiArCSAq CXBsbF9yZWZfaHogLyAoMiAqIG9wZGl2ICogaXBkaXYgKiBubGFuZXMpCj4gKwkgKgo+ICsJICog aW5zdGVhZCBvZgo+ICsJICoKPiArCSAqCXBsbF9yZWZfaHogLyAoMiAqIG9wZGl2ICogaXBkaXYp Cj4gKwkgKgo+ICsJICogVGhlIGRyYXdiYWNrIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSB3 b3VsZCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUKPiArCSAqIG51bWJlciBvciBsaW5lcyBpcyBhIG11 bHRpcGxlIG9mIHRoZSByZWFsaWdubWVudCBwZXJpb2RpY2l0eSB3aGljaCBpcwo+ICsJICogYSBm dW5jdGlvbiBvZiB0aGUgbnVtYmVyIG9mIGxhbmVzIGFuZCB0aGUgb3JpZ2luYWwgbWlzYWxpZ25t ZW50LiBGb3IKPiArCSAqIGV4YW1wbGUsIGZvciBOTEFORVMgPSA0IGFuZCBIVE9UQUwgJSBOTEFO RVMgPSAzLCBpdCB0YWtlcyA0IGxpbmVzCj4gKwkgKiB0byByZWFsaWduIG9uIGEgbGFuZToKPiAr CSAqIExJTkUgMDogZXhwZWN0ZWQgbnVtYmVyIG9mIGJ5dGVzLCBzdGFydHMgZW1pdHRpbmcgZmly c3QgYnl0ZSBvZgo+ICsJICoJICAgTElORSAxIG9uIExBTkUgMwo+ICsJICogTElORSAxOiBleHBl Y3RlZCBudW1iZXIgb2YgYnl0ZXMsIHN0YXJ0cyBlbWl0dGluZyBmaXJzdCAyIGJ5dGVzIG9mCj4g KwkgKgkgICBMSU5FIDIgb24gTEFORVMgMiBhbmQgMwo+ICsJICogTElORSAyOiBleHBlY3RlZCBu dW1iZXIgb2YgYnl0ZXMsIHN0YXJ0cyBlbWl0dGluZyBmaXJzdCAzIGJ5dGVzIG9mCj4gKwkgKgkg ICBvZiBMSU5FIDMgb24gTEFORVMgMSwgMiBhbmQgMwo+ICsJICogTElORSAzOiBvbmUgYnl0ZSBs ZXNzLCBub3cgdGhpbmdzIGFyZSByZWFsaWduZWQgb24gTEFORSAwIGZvciBMSU5FIDQKPiArCSAq Cj4gKwkgKiBJIGZpZ3VyZWQgdGhpcyBleHRyYSBjb21wbGV4aXR5IHdhcyBub3Qgd29ydGggdGhl IGJlbmVmaXQsIGJ1dCBpZgo+ICsJICogc29tZW9uZSByZWFsbHkgaGFzIHVuZml4YWJsZSBtaXNt YXRjaCwgdGhhdCB3b3VsZCBiZSBzb21ldGhpbmcgdG8KPiArCSAqIGludmVzdGlnYXRlLgo+ICsJ ICovCj4gKwlmb3IgKDsgZmJkaXYgPD0gZmJkaXZfbWF4OyBmYmRpdisrKSB7Cj4gKwkJdTMyIHJl bTsKPiArCj4gKwkJYWRqX2RzaV9odG90YWwgPSAodTY0KWZiZGl2ICogcGxsX3JlZl9oeiAqIGRz aV9ubGFuZXMgKgo+ICsJCQkJIGRwaV9odG90YWw7Cj4gKwo+ICsJCS8qCj4gKwkJICogRG8gdGhl IGRpdmlzaW9uIGluIDIgc3RlcHMgdG8gYXZvaWQgYW4gb3ZlcmZsb3cgb24gdGhlCj4gKwkJICog ZGl2aWRlci4KPiArCQkgKi8KPiArCQlyZW0gPSBkb19kaXYoYWRqX2RzaV9odG90YWwsIGRwaV9o eik7Cj4gKwkJaWYgKHJlbSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXJlbSA9IGRvX2Rpdihh ZGpfZHNpX2h0b3RhbCwKPiArCQkJICAgICBjZmctPnBsbF9vcGRpdiAqIGNmZy0+cGxsX2lwZGl2 ICogMiAqIDgpOwo+ICsJCWlmIChyZW0pCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQljZmctPnBs bF9mYmRpdiA9IGZiZGl2Owo+ICsJCSpkc2lfaGZwX2V4dCA9IGFkal9kc2lfaHRvdGFsIC0gZHNp X2h0b3RhbDsKPiArCQlicmVhazsKPiArCX0KPiArCj4gKwkvKiBObyBtYXRjaCwgbGV0J3MganVz dCByZWplY3QgdGhlIGRpc3BsYXkgbW9kZS4gKi8KPiArCWlmICghY2ZnLT5wbGxfZmJkaXYpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZGxhbmVfYnBzID0gRElWX1JPVU5EX0RPV05fVUxM KCh1NjQpZHBpX2h6ICogYWRqX2RzaV9odG90YWwgKiA4LAo+ICsJCQkJICAgICAgIGRzaV9ubGFu ZXMgKiBkcGlfaHRvdGFsKTsKPiArCWNmZy0+bGFuZV9icHMgPSBkbGFuZV9icHM7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgY2Ruc19kcGh5X3NldHVwX3BzbShzdHJ1 Y3QgY2Ruc19kcGh5ICpkcGh5KQo+ICt7Cj4gKwl1bnNpZ25lZCBsb25nIHBzbV9jbGtfaHogPSBj bGtfZ2V0X3JhdGUoZHBoeS0+cHNtX2Nsayk7Cj4gKwl1bnNpZ25lZCBsb25nIHBzbV9kaXY7Cj4g Kwo+ICsJaWYgKCFwc21fY2xrX2h6IHx8IHBzbV9jbGtfaHogPiAxMDAwMDAwMDApCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcHNtX2RpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBzbV9jbGtf aHosIDEwMDAwMDApOwo+ICsJaWYgKGRwaHktPm9wcy0+c2V0X3BzbV9kaXYpCj4gKwkJZHBoeS0+ b3BzLT5zZXRfcHNtX2RpdihkcGh5LCBwc21fZGl2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgY2Ruc19kcGh5X3NldF9jbGtfbGFuZV9jZmcoc3RydWN0IGNkbnNf ZHBoeSAqZHBoeSwKPiArCQkJCSAgICAgICBlbnVtIGNkbnNfZHBoeV9jbGtfbGFuZV9jZmcgY2Zn KQo+ICt7Cj4gKwlpZiAoZHBoeS0+b3BzLT5zZXRfY2xrX2xhbmVfY2ZnKQo+ICsJCWRwaHktPm9w cy0+c2V0X2Nsa19sYW5lX2NmZyhkcGh5LCBjZmcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj ZG5zX2RwaHlfc2V0X3BsbF9jZmcoc3RydWN0IGNkbnNfZHBoeSAqZHBoeSwKPiArCQkJCSAgY29u c3Qgc3RydWN0IGNkbnNfZHBoeV9jZmcgKmNmZykKPiArewo+ICsJaWYgKGRwaHktPm9wcy0+c2V0 X3BsbF9jZmcpCj4gKwkJZHBoeS0+b3BzLT5zZXRfcGxsX2NmZyhkcGh5LCBjZmcpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBjZG5zX2RwaHlfZ2V0X3dha2V1cF90aW1lX25zKHN0 cnVjdCBjZG5zX2RwaHkgKmRwaHkpCj4gK3sKPiArCXJldHVybiBkcGh5LT5vcHMtPmdldF93YWtl dXBfdGltZV9ucyhkcGh5KTsKPiArfQo+ICsKPiArc3RhdGljIHVuc2lnbmVkIGludCBkcGlfdG9f ZHNpX3RpbWluZyh1bnNpZ25lZCBpbnQgZHBpX3RpbWluZywKPiArCQkJCSAgICAgIHVuc2lnbmVk IGludCBkcGlfYnBwLAo+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IGRzaV9wa3Rfb3ZlcmhlYWQp Cj4gK3sKPiArCXVuc2lnbmVkIGludCBkc2lfdGltaW5nID0gRElWX1JPVU5EX1VQKGRwaV90aW1p bmcgKiBkcGlfYnBwLCA4KTsKPiArCj4gKwlpZiAoZHNpX3RpbWluZyA8IGRzaV9wa3Rfb3Zlcmhl YWQpCj4gKwkJZHNpX3RpbWluZyA9IDA7Cj4gKwllbHNlCj4gKwkJZHNpX3RpbWluZyAtPSBkc2lf cGt0X292ZXJoZWFkOwo+ICsKPiArCXJldHVybiBkc2lfdGltaW5nOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGNkbnNfZHNpX21vZGUyY2ZnKHN0cnVjdCBjZG5zX2RzaSAqZHNpLAo+ICsJCQkgICAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+ICsJCQkgICAgIHN0cnVjdCBj ZG5zX2RzaV9jZmcgKmRzaV9jZmcsCj4gKwkJCSAgICAgc3RydWN0IGNkbnNfZHBoeV9jZmcgKmRw aHlfY2ZnLAo+ICsJCQkgICAgIGJvb2wgbW9kZV92YWxpZF9jaGVjaykKPiArewo+ICsJdW5zaWdu ZWQgbG9uZyBkc2lfaHRvdGFsID0gMCwgZHNpX2hzc19oc2FfaHNlX2hicCA9IDA7Cj4gKwlzdHJ1 Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7Cj4gKwl1bnNpZ25lZCBp bnQgZHNpX2hmcF9leHQgPSAwLCBkcGlfaGZwLCB0bXA7Cj4gKwlib29sIHN5bmNfcHVsc2UgPSBm YWxzZTsKPiArCWludCBicHAsIG5sYW5lcywgcmV0Owo+ICsKPiArCW1lbXNldChkc2lfY2ZnLCAw LCBzaXplb2YoKmRzaV9jZmcpKTsKPiArCj4gKwlpZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3Mg JiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpCj4gKwkJc3luY19wdWxzZSA9IHRydWU7 Cj4gKwo+ICsJYnBwID0gbWlwaV9kc2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChvdXRwdXQtPmRldi0+ Zm9ybWF0KTsKPiArCW5sYW5lcyA9IG91dHB1dC0+ZGV2LT5sYW5lczsKPiArCj4gKwlpZiAobW9k ZV92YWxpZF9jaGVjaykKPiArCQl0bXAgPSBtb2RlLT5odG90YWwgLQo+ICsJCSAgICAgIChzeW5j X3B1bHNlID8gbW9kZS0+aHN5bmNfZW5kIDogbW9kZS0+aHN5bmNfc3RhcnQpOwo+ICsJZWxzZQo+ ICsJCXRtcCA9IG1vZGUtPmNydGNfaHRvdGFsIC0KPiArCQkgICAgICAoc3luY19wdWxzZSA/Cj4g KwkJICAgICAgIG1vZGUtPmNydGNfaHN5bmNfZW5kIDogbW9kZS0+Y3J0Y19oc3luY19zdGFydCk7 Cj4gKwo+ICsJZHNpX2NmZy0+aGJwID0gZHBpX3RvX2RzaV90aW1pbmcodG1wLCBicHAsIERTSV9I QlBfRlJBTUVfT1ZFUkhFQUQpOwo+ICsJZHNpX2h0b3RhbCArPSBkc2lfY2ZnLT5oYnAgKyBEU0lf SEJQX0ZSQU1FX09WRVJIRUFEOwo+ICsJZHNpX2hzc19oc2FfaHNlX2hicCArPSBkc2lfY2ZnLT5o YnAgKyBEU0lfSEJQX0ZSQU1FX09WRVJIRUFEOwo+ICsKPiArCWlmIChzeW5jX3B1bHNlKSB7Cj4g KwkJaWYgKG1vZGVfdmFsaWRfY2hlY2spCj4gKwkJCXRtcCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1v ZGUtPmhzeW5jX3N0YXJ0Owo+ICsJCWVsc2UKPiArCQkJdG1wID0gbW9kZS0+Y3J0Y19oc3luY19l bmQgLSBtb2RlLT5jcnRjX2hzeW5jX3N0YXJ0Owo+ICsKPiArCQlkc2lfY2ZnLT5oc2EgPSBkcGlf dG9fZHNpX3RpbWluZyh0bXAsIGJwcCwKPiArCQkJCQkJIERTSV9IU0FfRlJBTUVfT1ZFUkhFQUQp Owo+ICsJCWRzaV9odG90YWwgKz0gZHNpX2NmZy0+aHNhICsgRFNJX0hTQV9GUkFNRV9PVkVSSEVB RDsKPiArCQlkc2lfaHNzX2hzYV9oc2VfaGJwICs9IGRzaV9jZmctPmhzYSArIERTSV9IU0FfRlJB TUVfT1ZFUkhFQUQ7Cj4gKwl9Cj4gKwo+ICsJZHNpX2NmZy0+aGFjdCA9IGRwaV90b19kc2lfdGlt aW5nKG1vZGVfdmFsaWRfY2hlY2sgPwo+ICsJCQkJCSAgbW9kZS0+aGRpc3BsYXkgOiBtb2RlLT5j cnRjX2hkaXNwbGF5LAo+ICsJCQkJCSAgYnBwLCAwKTsKPiArCWRzaV9odG90YWwgKz0gZHNpX2Nm Zy0+aGFjdDsKPiArCj4gKwlpZiAobW9kZV92YWxpZF9jaGVjaykKPiArCQlkcGlfaGZwID0gbW9k ZS0+aHN5bmNfc3RhcnQgLSBtb2RlLT5oZGlzcGxheTsKPiArCWVsc2UKPiArCQlkcGlfaGZwID0g bW9kZS0+Y3J0Y19oc3luY19zdGFydCAtIG1vZGUtPmNydGNfaGRpc3BsYXk7Cj4gKwo+ICsJZHNp X2NmZy0+aGZwID0gZHBpX3RvX2RzaV90aW1pbmcoZHBpX2hmcCwgYnBwLCBEU0lfSEZQX0ZSQU1F X09WRVJIRUFEKTsKPiArCWRzaV9odG90YWwgKz0gZHNpX2NmZy0+aGZwICsgRFNJX0hGUF9GUkFN RV9PVkVSSEVBRDsKPiArCj4gKwlpZiAobW9kZV92YWxpZF9jaGVjaykKPiArCQlyZXQgPSBjZG5z X2RzaV9nZXRfZHBoeV9wbGxfY2ZnKGRzaS0+ZHBoeSwgZHBoeV9jZmcsCj4gKwkJCQkJCW1vZGUt Pmh0b3RhbCwgYnBwLAo+ICsJCQkJCQltb2RlLT5jbG9jayAqIDEwMDAsCj4gKwkJCQkJCWRzaV9o dG90YWwsIG5sYW5lcywKPiArCQkJCQkJJmRzaV9oZnBfZXh0KTsKPiArCWVsc2UKPiArCQlyZXQg PSBjZG5zX2RzaV9nZXRfZHBoeV9wbGxfY2ZnKGRzaS0+ZHBoeSwgZHBoeV9jZmcsCj4gKwkJCQkJ CW1vZGUtPmNydGNfaHRvdGFsLCBicHAsCj4gKwkJCQkJCW1vZGUtPmNydGNfY2xvY2sgKiAxMDAw LAo+ICsJCQkJCQlkc2lfaHRvdGFsLCBubGFuZXMsCj4gKwkJCQkJCSZkc2lfaGZwX2V4dCk7Cj4g Kwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWRzaV9jZmctPmhmcCArPSBk c2lfaGZwX2V4dDsKPiArCWRzaV9odG90YWwgKz0gZHNpX2hmcF9leHQ7Cj4gKwlkc2lfY2ZnLT5o dG90YWwgPSBkc2lfaHRvdGFsOwo+ICsKPiArCS8qCj4gKwkgKiBNYWtlIHN1cmUgRFBJKEhGUCkg PiBEU0koSFNTK0hTQStIU0UrSEJQKSB0byBndWFyYW50ZWUgdGhhdCB0aGUgRklGTwo+ICsJICog aXMgZW1wdHkgYmVmb3JlIHdlIHN0YXJ0IGEgcmVjZWl2aW5nIGEgbmV3IGxpbmUgb24gdGhlIERQ SQo+ICsJICogaW50ZXJmYWNlLgo+ICsJICovCj4gKwlpZiAoKHU2NClkcGh5X2NmZy0+bGFuZV9i cHMgKiBkcGlfaGZwICogbmxhbmVzIDwKPiArCSAgICAodTY0KWRzaV9oc3NfaHNhX2hzZV9oYnAg Kgo+ICsJICAgIChtb2RlX3ZhbGlkX2NoZWNrID8gbW9kZS0+Y2xvY2sgOiBtb2RlLT5jcnRjX2Ns b2NrKSAqIDEwMDApCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgY2Ruc19kc2lfYnJpZGdlX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlKQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gYnJpZGdl X3RvX2NkbnNfZHNpX2lucHV0KGJyaWRnZSk7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGlu cHV0X3RvX2RzaShpbnB1dCk7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAm ZHNpLT5vdXRwdXQ7Cj4gKwo+ICsJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGJyaWRnZS0+ ZGV2LCBEUklWRVJfQVRPTUlDKSkgewo+ICsJCWRldl9lcnIoZHNpLT5iYXNlLmRldiwKPiArCQkJ ImNkbnMtZHNpIGRyaXZlciBpcyBvbmx5IGNvbXBhdGlibGUgd2l0aCBEUk0gZGV2aWNlcyBzdXBw b3J0aW5nIGF0b21pYyB1cGRhdGVzIik7Cj4gKwkJcmV0dXJuIC1FTk9UU1VQUDsKPiArCX0KPiAr Cj4gKwlyZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBvdXRwdXQtPmJy aWRnZSwgYnJpZGdlKTsKPiArfQo+ICsKPiArc3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzCj4g K2NkbnNfZHNpX2JyaWRnZV9tb2RlX3ZhbGlkKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4g KwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+ICt7Cj4gKwlzdHJ1 Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0ID0gYnJpZGdlX3RvX2NkbnNfZHNpX2lucHV0KGJyaWRn ZSk7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGlucHV0X3RvX2RzaShpbnB1dCk7Cj4gKwlz dHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7Cj4gKwlzdHJ1Y3Qg Y2Ruc19kcGh5X2NmZyBkcGh5X2NmZzsKPiArCXN0cnVjdCBjZG5zX2RzaV9jZmcgZHNpX2NmZzsK PiArCWludCBicHAsIG5sYW5lcywgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBWRlBfRFNJIHNob3Vs ZCBiZSBsZXNzIHRoYW4gVkZQX0RQSSBhbmQgVkZQX0RTSSBzaG91bGQgYmUgYXQKPiArCSAqIGxl YXN0IDEuCj4gKwkgKi8KPiArCWlmIChtb2RlLT52dG90YWwgLSBtb2RlLT52c3luY19lbmQgPCAy KQo+ICsJCXJldHVybiBNT0RFX1ZfSUxMRUdBTDsKPiArCj4gKwkvKiBWU0FfRFNJID0gVlNBX0RQ SSBhbmQgbXVzdCBiZSBhdCBsZWFzdCAyLiAqLwo+ICsJaWYgKG1vZGUtPnZzeW5jX2VuZCAtIG1v ZGUtPnZzeW5jX3N0YXJ0IDwgMikKPiArCQlyZXR1cm4gTU9ERV9WX0lMTEVHQUw7Cj4gKwo+ICsJ LyogSEFDVCBtdXN0IGJlIDMyLWJpdHMgYWxpZ25lZC4gKi8KPiArCWJwcCA9IG1pcGlfZHNpX3Bp eGVsX2Zvcm1hdF90b19icHAob3V0cHV0LT5kZXYtPmZvcm1hdCk7Cj4gKwlpZiAoKG1vZGUtPmhk aXNwbGF5ICogYnBwKSAlIDMyKQo+ICsJCXJldHVybiBNT0RFX0hfSUxMRUdBTDsKPiArCj4gKwlu bGFuZXMgPSBvdXRwdXQtPmRldi0+bGFuZXM7Cj4gKwo+ICsJcmV0ID0gY2Ruc19kc2lfbW9kZTJj ZmcoZHNpLCBtb2RlLCAmZHNpX2NmZywgJmRwaHlfY2ZnLCB0cnVlKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7Cj4gKwo+ICsJcmV0dXJuIE1PREVfT0s7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2JyaWRnZV9kaXNhYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCj4gK3sKPiArCXN0cnVjdCBjZG5zX2RzaV9pbnB1dCAqaW5wdXQgPSBicmlk Z2VfdG9fY2Ruc19kc2lfaW5wdXQoYnJpZGdlKTsKPiArCXN0cnVjdCBjZG5zX2RzaSAqZHNpID0g aW5wdXRfdG9fZHNpKGlucHV0KTsKPiArCXUzMiB2YWw7Cj4gKwo+ICsJdmFsID0gcmVhZGwoZHNp LT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsKPiArCXZhbCAmPSB+KElGX1ZJRF9TRUxFQ1Rf TUFTSyB8IElGX1ZJRF9NT0RFIHwgVklEX0VOIHwgSE9TVF9FT1RfR0VOIHwKPiArCQkgRElTUF9F T1RfR0VOKTsKPiArCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7 Cj4gKwo+ICsJdmFsID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKSAmIH5JRl9FTihp bnB1dC0+aWQpOwo+ICsJd3JpdGVsKHZhbCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKTsKPiAr CXBtX3J1bnRpbWVfcHV0KGRzaS0+YmFzZS5kZXYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBj ZG5zX2RzaV9oc19pbml0KHN0cnVjdCBjZG5zX2RzaSAqZHNpLAo+ICsJCQkgICAgIGNvbnN0IHN0 cnVjdCBjZG5zX2RwaHlfY2ZnICpkcGh5X2NmZykKPiArewo+ICsJdTMyIHN0YXR1czsKPiArCj4g KwkvKgo+ICsJICogUG93ZXIgYWxsIGludGVybmFsIERQSFkgYmxvY2tzIGRvd24gYW5kIG1haW50 YWluIHRoZWlyIHJlc2V0IGxpbmUKPiArCSAqIGFzc2VydGVkIGJlZm9yZSBjaGFuZ2luZyB0aGUg RFBIWSBjb25maWcuCj4gKwkgKi8KPiArCXdyaXRlbChEUEhZX0NNTl9QU08gfCBEUEhZX1BMTF9Q U08gfCBEUEhZX0FMTF9EX1BETiB8IERQSFlfQ19QRE4gfAo+ICsJICAgICAgIERQSFlfQ01OX1BE TiB8IERQSFlfUExMX1BETiwKPiArCSAgICAgICBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfQ0ZHMCk7 Cj4gKwo+ICsJLyoKPiArCSAqIENvbmZpZ3VyZSB0aGUgaW50ZXJuYWwgUFNNIGNsayBkaXZpZGVy IHNvIHRoYXQgdGhlIERQSFkgaGFzIGEKPiArCSAqIDFNSHogY2xrIChvciBzb21ldGhpbmcgY2xv c2UpLgo+ICsJICovCj4gKwlXQVJOX09OX09OQ0UoY2Ruc19kcGh5X3NldHVwX3BzbShkc2ktPmRw aHkpKTsKPiArCj4gKwkvKgo+ICsJICogQ29uZmlndXJlIGF0dGFjaCBjbGsgbGFuZXMgdG8gZGF0 YSBsYW5lczogdGhlIERQSFkgaGFzIDIgY2xrIGxhbmVzCj4gKwkgKiBhbmQgOCBkYXRhIGxhbmVz LCBlYWNoIGNsayBsYW5lIGNhbiBiZSBhdHRhY2hlIGRpZmZlcmVudCBzZXQgb2YKPiArCSAqIGRh dGEgbGFuZXMuIFRoZSAyIGdyb3VwcyBhcmUgbmFtZWQgJ2xlZnQnIGFuZCAncmlnaHQnLCBzbyBo ZXJlIHdlCj4gKwkgKiBqdXN0IHNheSB0aGF0IHdlIHdhbnQgdGhlICdsZWZ0JyBjbGsgbGFuZSB0 byBkcml2ZSB0aGUgJ2xlZnQnIGRhdGEKPiArCSAqIGxhbmVzLgo+ICsJICovCj4gKwljZG5zX2Rw aHlfc2V0X2Nsa19sYW5lX2NmZyhkc2ktPmRwaHksIERQSFlfQ0xLX0NGR19MRUZUX0RSSVZFU19M RUZUKTsKPiArCj4gKwkvKgo+ICsJICogQ29uZmlndXJlIHRoZSBEUEhZIFBMTCB0aGF0IHdpbGwg YmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgVFggYnl0ZQo+ICsJICogY2xrLgo+ICsJICovCj4gKwlj ZG5zX2RwaHlfc2V0X3BsbF9jZmcoZHNpLT5kcGh5LCBkcGh5X2NmZyk7Cj4gKwo+ICsJLyogU3Rh cnQgVFggc3RhdGUgbWFjaGluZS4gKi8KPiArCXdyaXRlbChEUEhZX0NNTl9TU01fRU4gfCBEUEhZ X0NNTl9UWF9NT0RFX0VOLAo+ICsJICAgICAgIGRzaS0+ZHBoeS0+cmVncyArIERQSFlfQ01OX1NT TSk7Cj4gKwo+ICsJLyogQWN0aXZhdGUgdGhlIFBMTCBhbmQgd2FpdCB1bnRpbCBpdCdzIGxvY2tl ZC4gKi8KPiArCXdyaXRlbChQTExfTE9DS0VELCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fU1RTX0NM Uik7Cj4gKwl3cml0ZWwoRFBIWV9DTU5fUFNPIHwgRFBIWV9BTExfRF9QRE4gfCBEUEhZX0NfUERO IHwgRFBIWV9DTU5fUEROLAo+ICsJICAgICAgIGRzaS0+cmVncyArIE1DVExfRFBIWV9DRkcwKTsK PiArCVdBUk5fT05fT05DRShyZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5yZWdzICsgTUNUTF9NQUlO X1NUUywgc3RhdHVzLAo+ICsJCQkJCXN0YXR1cyAmIFBMTF9MT0NLRUQsIDEwMCwgMTAwKSk7Cj4g KwkvKiBEZS1hc3NlcnQgZGF0YSBhbmQgY2xvY2sgcmVzZXQgbGluZXMuICovCj4gKwl3cml0ZWwo RFBIWV9DTU5fUFNPIHwgRFBIWV9BTExfRF9QRE4gfCBEUEhZX0NfUEROIHwgRFBIWV9DTU5fUERO IHwKPiArCSAgICAgICBEUEhZX0RfUlNUQihkcGh5X2NmZy0+bmxhbmVzKSB8IERQSFlfQ19SU1RC LAo+ICsJICAgICAgIGRzaS0+cmVncyArIE1DVExfRFBIWV9DRkcwKTsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgY2Ruc19kc2lfaW5pdF9saW5rKHN0cnVjdCBjZG5zX2RzaSAqZHNpKQo+ICt7Cj4g KwlzdHJ1Y3QgY2Ruc19kc2lfb3V0cHV0ICpvdXRwdXQgPSAmZHNpLT5vdXRwdXQ7Cj4gKwl1bnNp Z25lZCBsb25nIHN5c2Nsa19wZXJpb2QsIHVscG91dDsKPiArCXUzMiB2YWw7Cj4gKwlpbnQgaTsK PiArCj4gKwlpZiAoZHNpLT5saW5rX2luaXRpYWxpemVkKQo+ICsJCXJldHVybjsKPiArCj4gKwl2 YWwgPSAwOwo+ICsJZm9yIChpID0gMTsgaSA8IG91dHB1dC0+ZGV2LT5sYW5lczsgaSsrKQo+ICsJ CXZhbCB8PSBEQVRBX0xBTkVfRU4oaSk7Cj4gKwo+ICsJaWYgKCEob3V0cHV0LT5kZXYtPm1vZGVf ZmxhZ3MgJiBNSVBJX0RTSV9DTE9DS19OT05fQ09OVElOVU9VUykpCj4gKwkJdmFsIHw9IENMS19D T05USU5VT1VTOwo+ICsKPiArCXdyaXRlbCh2YWwsIGRzaS0+cmVncyArIE1DVExfTUFJTl9QSFlf Q1RMKTsKPiArCj4gKwkvKiBVTFBPVVQgc2hvdWxkIGJlIHNldCB0byAxbXMgYW5kIGlzIGV4cHJl c3NlZCBpbiBzeXNjbGsgY3ljbGVzLiAqLwo+ICsJc3lzY2xrX3BlcmlvZCA9IE5TRUNfUEVSX1NF QyAvIGNsa19nZXRfcmF0ZShkc2ktPmRzaV9zeXNfY2xrKTsKPiArCXVscG91dCA9IERJVl9ST1VO RF9VUChOU0VDX1BFUl9NU0VDLCBzeXNjbGtfcGVyaW9kKTsKPiArCXdyaXRlbChDTEtfTEFORV9V TFBPVVRfVElNRSh1bHBvdXQpIHwgREFUQV9MQU5FX1VMUE9VVF9USU1FKHVscG91dCksCj4gKwkg ICAgICAgZHNpLT5yZWdzICsgTUNUTF9VTFBPVVRfVElNRSk7Cj4gKwo+ICsJd3JpdGVsKExJTktf RU4sIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7Cj4gKwo+ICsJdmFsID0gQ0xLX0xB TkVfRU4gfCBQTExfU1RBUlQ7Cj4gKwlmb3IgKGkgPSAwOyBpIDwgb3V0cHV0LT5kZXYtPmxhbmVz OyBpKyspCj4gKwkJdmFsIHw9IERBVEFfTEFORV9TVEFSVChpKTsKPiArCj4gKwl3cml0ZWwodmFs LCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOwo+ICsKPiArCWRzaS0+bGlua19pbml0aWFsaXpl ZCA9IHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNkbnNfZHNpX2JyaWRnZV9lbmFibGUo c3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiArewo+ICsJc3RydWN0IGNkbnNfZHNpX2lucHV0 ICppbnB1dCA9IGJyaWRnZV90b19jZG5zX2RzaV9pbnB1dChicmlkZ2UpOwo+ICsJc3RydWN0IGNk bnNfZHNpICpkc2kgPSBpbnB1dF90b19kc2koaW5wdXQpOwo+ICsJc3RydWN0IGNkbnNfZHNpX291 dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0Owo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGU7Cj4gKwlzdHJ1Y3QgY2Ruc19kcGh5X2NmZyBkcGh5X2NmZzsKPiArCXVuc2lnbmVkIGxv bmcgdHhfYnl0ZV9wZXJpb2Q7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2lfY2ZnIGRzaV9jZmc7Cj4gKwl1 MzIgdG1wLCByZWdfd2FrZXVwLCBkaXY7Cj4gKwlpbnQgYnBwLCBubGFuZXM7Cj4gKwo+ICsJaWYg KFdBUk5fT04ocG1fcnVudGltZV9nZXRfc3luYyhkc2ktPmJhc2UuZGV2KSA8IDApKQo+ICsJCXJl dHVybjsKPiArCj4gKwltb2RlID0gJmJyaWRnZS0+ZW5jb2Rlci0+Y3J0Yy0+c3RhdGUtPmFkanVz dGVkX21vZGU7Cj4gKwlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKG91dHB1dC0+ ZGV2LT5mb3JtYXQpOwo+ICsJbmxhbmVzID0gb3V0cHV0LT5kZXYtPmxhbmVzOwo+ICsKPiArCVdB Uk5fT05fT05DRShjZG5zX2RzaV9tb2RlMmNmZyhkc2ksIG1vZGUsICZkc2lfY2ZnLCAmZHBoeV9j ZmcsIGZhbHNlKSk7Cj4gKwo+ICsJY2Ruc19kc2lfaHNfaW5pdChkc2ksICZkcGh5X2NmZyk7Cj4g KwljZG5zX2RzaV9pbml0X2xpbmsoZHNpKTsKPiArCj4gKwl3cml0ZWwoSEJQX0xFTihkc2lfY2Zn LmhicCkgfCBIU0FfTEVOKGRzaV9jZmcuaHNhKSwKPiArCSAgICAgICBkc2ktPnJlZ3MgKyBWSURf SFNJWkUxKTsKPiArCXdyaXRlbChIRlBfTEVOKGRzaV9jZmcuaGZwKSB8IEhBQ1RfTEVOKGRzaV9j ZmcuaGFjdCksCj4gKwkgICAgICAgZHNpLT5yZWdzICsgVklEX0hTSVpFMik7Cj4gKwo+ICsJd3Jp dGVsKFZCUF9MRU4obW9kZS0+Y3J0Y192dG90YWwgLSBtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIDEp IHwKPiArCSAgICAgICBWRlBfTEVOKG1vZGUtPmNydGNfdnN5bmNfc3RhcnQgLSBtb2RlLT5jcnRj X3ZkaXNwbGF5KSB8Cj4gKwkgICAgICAgVlNBX0xFTihtb2RlLT5jcnRjX3ZzeW5jX2VuZCAtIG1v ZGUtPmNydGNfdnN5bmNfc3RhcnQgKyAxKSwKPiArCSAgICAgICBkc2ktPnJlZ3MgKyBWSURfVlNJ WkUxKTsKPiArCXdyaXRlbChtb2RlLT5jcnRjX3ZkaXNwbGF5LCBkc2ktPnJlZ3MgKyBWSURfVlNJ WkUyKTsKPiArCj4gKwl0bXAgPSBkc2lfY2ZnLmh0b3RhbCAtCj4gKwkgICAgICAoZHNpX2NmZy5o c2EgKyBEU0lfQkxBTktJTkdfRlJBTUVfT1ZFUkhFQUQgKwo+ICsJICAgICAgIERTSV9IU0FfRlJB TUVfT1ZFUkhFQUQpOwo+ICsJd3JpdGVsKEJMS19MSU5FX1BVTFNFX1BLVF9MRU4odG1wKSwgZHNp LT5yZWdzICsgVklEX0JMS1NJWkUyKTsKPiArCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAm IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKPiArCQl3cml0ZWwoTUFYX0xJTkVfTElN SVQodG1wIC0gRFNJX05VTExfRlJBTUVfT1ZFUkhFQUQpLAo+ICsJCSAgICAgICBkc2ktPnJlZ3Mg KyBWSURfVkNBX1NFVFRJTkcyKTsKPiArCj4gKwl0bXAgPSBkc2lfY2ZnLmh0b3RhbCAtCj4gKwkg ICAgICAoRFNJX0hTU19WU1NfVlNFX0ZSQU1FX09WRVJIRUFEICsgRFNJX0JMQU5LSU5HX0ZSQU1F X09WRVJIRUFEKTsKPiArCXdyaXRlbChCTEtfTElORV9FVkVOVF9QS1RfTEVOKHRtcCksIGRzaS0+ cmVncyArIFZJRF9CTEtTSVpFMSk7Cj4gKwlpZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAm IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkpCj4gKwkJd3JpdGVsKE1BWF9MSU5FX0xJ TUlUKHRtcCAtIERTSV9OVUxMX0ZSQU1FX09WRVJIRUFEKSwKPiArCQkgICAgICAgZHNpLT5yZWdz ICsgVklEX1ZDQV9TRVRUSU5HMik7Cj4gKwo+ICsJdG1wID0gRElWX1JPVU5EX1VQKGRzaV9jZmcu aHRvdGFsLCBubGFuZXMpIC0KPiArCSAgICAgIERJVl9ST1VORF9VUChkc2lfY2ZnLmhzYSwgbmxh bmVzKTsKPiArCj4gKwlpZiAoIShvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01P REVfRU9UX1BBQ0tFVCkpCj4gKwkJdG1wIC09IERJVl9ST1VORF9VUChEU0lfRU9UX1BLVF9TSVpF LCBubGFuZXMpOwo+ICsKPiArCXR4X2J5dGVfcGVyaW9kID0gRElWX1JPVU5EX0RPV05fVUxMKCh1 NjQpTlNFQ19QRVJfU0VDICogOCwKPiArCQkJCQkgICAgZHBoeV9jZmcubGFuZV9icHMpOwo+ICsJ cmVnX3dha2V1cCA9IGNkbnNfZHBoeV9nZXRfd2FrZXVwX3RpbWVfbnMoZHNpLT5kcGh5KSAvCj4g KwkJICAgICB0eF9ieXRlX3BlcmlvZDsKPiArCXdyaXRlbChSRUdfV0FLRVVQX1RJTUUocmVnX3dh a2V1cCkgfCBSRUdfTElORV9EVVJBVElPTih0bXApLAo+ICsJICAgICAgIGRzaS0+cmVncyArIFZJ RF9EUEhZX1RJTUUpOwo+ICsKPiArCS8qCj4gKwkgKiBIU1RYIGFuZCBMUFJYIHRpbWVvdXRzIGFy ZSBib3RoIGV4cHJlc3NlZCBpbiBUWCBieXRlIGNsayBjeWNsZXMgYW5kCj4gKwkgKiBib3RoIHNo b3VsZCBiZSBzZXQgdG8gYXQgbGVhc3QgdGhlIHRpbWUgaXQgdGFrZXMgdG8gdHJhbnNtaXQgYQo+ ICsJICogZnJhbWUuCj4gKwkgKi8KPiArCXRtcCA9IE5TRUNfUEVSX1NFQyAvIGRybV9tb2RlX3Zy ZWZyZXNoKG1vZGUpOwo+ICsJdG1wIC89IHR4X2J5dGVfcGVyaW9kOwo+ICsKPiArCWZvciAoZGl2 ID0gMDsgZGl2IDw9IENMS19ESVZfTUFYOyBkaXYrKykgewo+ICsJCWlmICh0bXAgPD0gSFNUWF9U SU1FT1VUX01BWCkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJCXRtcCA+Pj0gMTsKPiArCX0KPiArCj4g KwlpZiAodG1wID4gSFNUWF9USU1FT1VUX01BWCkKPiArCQl0bXAgPSBIU1RYX1RJTUVPVVRfTUFY Owo+ICsKPiArCXdyaXRlbChDTEtfRElWKGRpdikgfCBIU1RYX1RJTUVPVVQodG1wKSwKPiArCSAg ICAgICBkc2ktPnJlZ3MgKyBNQ1RMX0RQSFlfVElNRU9VVDEpOwo+ICsKPiArCXdyaXRlbChMUFJY X1RJTUVPVVQodG1wKSwgZHNpLT5yZWdzICsgTUNUTF9EUEhZX1RJTUVPVVQyKTsKPiArCj4gKwlp ZiAob3V0cHV0LT5kZXYtPm1vZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7Cj4gKwkJ c3dpdGNoIChvdXRwdXQtPmRldi0+Zm9ybWF0KSB7Cj4gKwkJY2FzZSBNSVBJX0RTSV9GTVRfUkdC ODg4Ogo+ICsJCQl0bXAgPSBWSURfUElYRUxfTU9ERV9SR0I4ODggfAo+ICsJCQkgICAgICBWSURf REFUQVRZUEUoTUlQSV9EU0lfUEFDS0VEX1BJWEVMX1NUUkVBTV8yNCk7Cj4gKwkJCWJyZWFrOwo+ ICsKPiArCQljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6Cj4gKwkJCXRtcCA9IFZJRF9QSVhFTF9N T0RFX1JHQjY2NiB8Cj4gKwkJCSAgICAgIFZJRF9EQVRBVFlQRShNSVBJX0RTSV9QSVhFTF9TVFJF QU1fM0JZVEVfMTgpOwo+ICsJCQlicmVhazsKPiArCj4gKwkJY2FzZSBNSVBJX0RTSV9GTVRfUkdC NjY2X1BBQ0tFRDoKPiArCQkJdG1wID0gVklEX1BJWEVMX01PREVfUkdCNjY2X1BBQ0tFRCB8Cj4g KwkJCSAgICAgIFZJRF9EQVRBVFlQRShNSVBJX0RTSV9QQUNLRURfUElYRUxfU1RSRUFNXzE4KTsK PiArCQkJYnJlYWs7Cj4gKwo+ICsJCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToKPiArCQkJdG1w ID0gVklEX1BJWEVMX01PREVfUkdCNTY1IHwKPiArCQkJICAgICAgVklEX0RBVEFUWVBFKE1JUElf RFNJX1BBQ0tFRF9QSVhFTF9TVFJFQU1fMTYpOwo+ICsJCQlicmVhazsKPiArCj4gKwkJZGVmYXVs dDoKPiArCQkJZGV2X2Vycihkc2ktPmJhc2UuZGV2LCAiVW5zdXBwb3J0ZWQgRFNJIGZvcm1hdFxu Iik7Cj4gKwkJCXJldHVybjsKPiArCQl9Cj4gKwo+ICsJCWlmIChvdXRwdXQtPmRldi0+bW9kZV9m bGFncyAmIE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSkKPiArCQkJdG1wIHw9IFNZTkNf UFVMU0VfQUNUSVZFIHwgU1lOQ19QVUxTRV9IT1JJWk9OVEFMOwo+ICsKPiArCQl0bXAgfD0gUkVH X0JMS0xJTkVfTU9ERShSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUKSB8Cj4gKwkJICAgICAgIFJF R19CTEtFT0xfTU9ERShSRUdfQkxLX01PREVfQkxBTktJTkdfUEtUKSB8Cj4gKwkJICAgICAgIFJF Q09WRVJZX01PREUoUkVDT1ZFUllfTU9ERV9ORVhUX0hTWU5DKSB8Cj4gKwkJICAgICAgIFZJRF9J R05PUkVfTUlTU19WU1lOQzsKPiArCj4gKwkJd3JpdGVsKHRtcCwgZHNpLT5yZWdzICsgVklEX01B SU5fQ1RMKTsKPiArCX0KPiArCj4gKwl0bXAgPSByZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01BSU5f REFUQV9DVEwpOwo+ICsJdG1wICY9IH4oSUZfVklEX1NFTEVDVF9NQVNLIHwgSE9TVF9FT1RfR0VO IHwgSUZfVklEX01PREUpOwo+ICsKPiArCWlmICghKG91dHB1dC0+ZGV2LT5tb2RlX2ZsYWdzICYg TUlQSV9EU0lfTU9ERV9FT1RfUEFDS0VUKSkKPiArCQl0bXAgfD0gSE9TVF9FT1RfR0VOOwo+ICsK PiArCWlmIChvdXRwdXQtPmRldi0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01PREVfVklERU8pCj4g KwkJdG1wIHw9IElGX1ZJRF9NT0RFIHwgSUZfVklEX1NFTEVDVChpbnB1dC0+aWQpIHwgVklEX0VO Owo+ICsKPiArCXdyaXRlbCh0bXAsIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7Cj4g Kwo+ICsJdG1wID0gcmVhZGwoZHNpLT5yZWdzICsgTUNUTF9NQUlOX0VOKSB8IElGX0VOKGlucHV0 LT5pZCk7Cj4gKwl3cml0ZWwodG1wLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgY2Ruc19kc2lfYnJpZGdl X2Z1bmNzID0gewo+ICsJLmF0dGFjaCA9IGNkbnNfZHNpX2JyaWRnZV9hdHRhY2gsCj4gKwkubW9k ZV92YWxpZCA9IGNkbnNfZHNpX2JyaWRnZV9tb2RlX3ZhbGlkLAo+ICsJLmRpc2FibGUgPSBjZG5z X2RzaV9icmlkZ2VfZGlzYWJsZSwKPiArCS5lbmFibGUgPSBjZG5zX2RzaV9icmlkZ2VfZW5hYmxl LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjZG5zX2RzaV9hdHRhY2goc3RydWN0IG1pcGlfZHNp X2hvc3QgKmhvc3QsCj4gKwkJCSAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldikKPiArewo+ ICsJc3RydWN0IGNkbnNfZHNpICpkc2kgPSB0b19jZG5zX2RzaShob3N0KTsKPiArCXN0cnVjdCBj ZG5zX2RzaV9vdXRwdXQgKm91dHB1dCA9ICZkc2ktPm91dHB1dDsKPiArCXN0cnVjdCBjZG5zX2Rz aV9pbnB1dCAqaW5wdXQgPSAmZHNpLT5pbnB1dDsKPiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2U7Cj4gKwlzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsKPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAq bnA7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBXZSBjdXJyZW50bHkgZG8gbm90IHN1 cHBvcnQgY29ubmVjdGluZyBzZXZlcmFsIERTSSBkZXZpY2VzIHRvIHRoZQo+ICsJICogc2FtZSBo b3N0LiBJbiBvcmRlciB0byBzdXBwb3J0IHRoYXQgd2UnZCBuZWVkIHRoZSBEUk0gYnJpZGdlCj4g KwkgKiBmcmFtZXdvcmsgdG8gYWxsb3cgZHluYW1pYyByZWNvbmZpZ3VyYXRpb24gb2YgdGhlIGJy aWRnZSBjaGFpbi4KPiArCSAqLwo+ICsJaWYgKG91dHB1dC0+ZGV2KQo+ICsJCXJldHVybiAtRUJV U1k7Cj4gKwo+ICsJLyogV2UgZG8gbm90IHN1cHBvcnQgYnVyc3QgbW9kZSB5ZXQuICovCj4gKwlp ZiAoZGV2LT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkKPiArCQlyZXR1 cm4gLUVOT1RTVVBQOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgaG9zdCA8LT4gZGV2aWNlIGxpbmsg bWlnaHQgYmUgZGVzY3JpYmVkIHVzaW5nIGFuIE9GLWdyYXBoCj4gKwkgKiByZXByZXNlbnRhdGlv biwgaW4gdGhpcyBjYXNlIHdlIGV4dHJhY3QgdGhlIGRldmljZSBvZl9ub2RlIGZyb20KPiArCSAq IHRoaXMgcmVwcmVzZW50YXRpb24sIG90aGVyd2lzZSB3ZSB1c2UgZHNpZGV2LT5kZXYub2Zfbm9k ZSB3aGljaAo+ICsJICogc2hvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGNvcmUuCj4gKwkg Ki8KPiArCW5wID0gb2ZfZ3JhcGhfZ2V0X3JlbW90ZV9ub2RlKGRzaS0+YmFzZS5kZXYtPm9mX25v ZGUsIERTSV9PVVRQVVRfUE9SVCwKPiArCQkJCSAgICAgIGRldi0+Y2hhbm5lbCk7Cj4gKwlpZiAo IW5wKQo+ICsJCW5wID0gb2Zfbm9kZV9nZXQoZGV2LT5kZXYub2Zfbm9kZSk7Cj4gKwo+ICsJcGFu ZWwgPSBvZl9kcm1fZmluZF9wYW5lbChucCk7Cj4gKwlpZiAocGFuZWwpIHsKPiArCQlicmlkZ2Ug PSBkcm1fcGFuZWxfYnJpZGdlX2FkZChwYW5lbCwgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7Cj4g Kwl9IGVsc2Ugewo+ICsJCWJyaWRnZSA9IG9mX2RybV9maW5kX2JyaWRnZShkZXYtPmRldi5vZl9u b2RlKTsKPiArCQlpZiAoIWJyaWRnZSkKPiArCQkJYnJpZGdlID0gRVJSX1BUUigtRUlOVkFMKTsK PiArCX0KPiArCj4gKwlvZl9ub2RlX3B1dChucCk7Cj4gKwo+ICsJaWYgKElTX0VSUihicmlkZ2Up KSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihicmlkZ2UpOwo+ICsJCWRldl9lcnIoaG9zdC0+ZGV2LCAi ZmFpbGVkIHRvIGFkZCBEU0kgZGV2aWNlICVzIChlcnIgPSAlZCkiLAo+ICsJCQlkZXYtPm5hbWUs IHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlvdXRwdXQtPmRldiA9IGRldjsK PiArCW91dHB1dC0+YnJpZGdlID0gYnJpZGdlOwo+ICsJb3V0cHV0LT5wYW5lbCA9IHBhbmVsOwo+ ICsKPiArCS8qCj4gKwkgKiBUaGUgRFNJIG91dHB1dCBoYXMgYmVlbiBwcm9wZXJseSBjb25maWd1 cmVkLCB3ZSBjYW4gbm93IHNhZmVseQo+ICsJICogcmVnaXN0ZXIgdGhlIGlucHV0IHRvIHRoZSBi cmlkZ2UgZnJhbWV3b3JrIHNvIHRoYXQgaXQgY2FuIHRha2UgcGxhY2UKPiArCSAqIGluIGEgZGlz cGxheSBwaXBlbGluZS4KPiArCSAqLwo+ICsJZHJtX2JyaWRnZV9hZGQoJmlucHV0LT5icmlkZ2Up Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHNpX2RldGFj aChzdHJ1Y3QgbWlwaV9kc2lfaG9zdCAqaG9zdCwKPiArCQkJICAgc3RydWN0IG1pcGlfZHNpX2Rl dmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IHRvX2NkbnNfZHNpKGhv c3QpOwo+ICsJc3RydWN0IGNkbnNfZHNpX291dHB1dCAqb3V0cHV0ID0gJmRzaS0+b3V0cHV0Owo+ ICsJc3RydWN0IGNkbnNfZHNpX2lucHV0ICppbnB1dCA9ICZkc2ktPmlucHV0Owo+ICsKPiArCWRy bV9icmlkZ2VfcmVtb3ZlKCZpbnB1dC0+YnJpZGdlKTsKPiArCWlmIChvdXRwdXQtPnBhbmVsKQo+ ICsJCWRybV9wYW5lbF9icmlkZ2VfcmVtb3ZlKG91dHB1dC0+YnJpZGdlKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGNkbnNfZHNpX2ludGVycnVwdChp bnQgaXJxLCB2b2lkICpkYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGRhdGE7 Cj4gKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsKPiArCXUzMiBmbGFnLCBjdGw7Cj4gKwo+ ICsJZmxhZyA9IHJlYWRsKGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTX0ZMQUcpOwo+ICsJaWYg KGZsYWcpIHsKPiArCQljdGwgPSByZWFkbChkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1NUU19DVEwp Owo+ICsJCWN0bCAmPSB+ZmxhZzsKPiArCQl3cml0ZWwoY3RsLCBkc2ktPnJlZ3MgKyBESVJFQ1Rf Q01EX1NUU19DVEwpOwo+ICsJCWNvbXBsZXRlKCZkc2ktPmRpcmVjdF9jbWRfY29tcCk7Cj4gKwkJ cmV0ID0gSVJRX0hBTkRMRUQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIHNzaXplX3QgY2Ruc19kc2lfdHJhbnNmZXIoc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhv c3QsCj4gKwkJCQkgY29uc3Qgc3RydWN0IG1pcGlfZHNpX21zZyAqbXNnKQo+ICt7Cj4gKwlzdHJ1 Y3QgY2Ruc19kc2kgKmRzaSA9IHRvX2NkbnNfZHNpKGhvc3QpOwo+ICsJdTMyIGNtZCwgc3RzLCB2 YWwsIHdhaXQgPSBXUklURV9DT01QTEVURUQsIGN0bCA9IDA7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lf cGFja2V0IHBhY2tldDsKPiArCWludCByZXQsIGksIHR4X2xlbiwgcnhfbGVuOwo+ICsKPiArCXJl dCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoaG9zdC0+ZGV2KTsKPiArCWlmIChyZXQgPCAwKQo+ICsJ CXJldHVybiByZXQ7Cj4gKwo+ICsJY2Ruc19kc2lfaW5pdF9saW5rKGRzaSk7Cj4gKwo+ICsJcmV0 ID0gbWlwaV9kc2lfY3JlYXRlX3BhY2tldCgmcGFja2V0LCBtc2cpOwo+ICsJaWYgKHJldCkKPiAr CQlnb3RvIG91dDsKPiArCj4gKwl0eF9sZW4gPSBtc2ctPnR4X2J1ZiA/IG1zZy0+dHhfbGVuIDog MDsKPiArCXJ4X2xlbiA9IG1zZy0+cnhfYnVmID8gbXNnLT5yeF9sZW4gOiAwOwo+ICsKPiArCS8q IEZvciByZWFkIG9wZXJhdGlvbnMsIHRoZSBtYXhpbXVtIFRYIGxlbiBpcyAyLiAqLwo+ICsJaWYg KHJ4X2xlbiAmJiB0eF9sZW4gPiAyKSB7Cj4gKwkJcmV0ID0gLUVOT1RTVVBQOwo+ICsJCWdvdG8g b3V0Owo+ICsJfQo+ICsKPiArCS8qIFRYIGxlbiBpcyBsaW1pdGVkIGJ5IHRoZSBDTUQgRklGTyBk ZXB0aC4gKi8KPiArCWlmICh0eF9sZW4gPiBkc2ktPmRpcmVjdF9jbWRfZmlmb19kZXB0aCkgewo+ ICsJCXJldCA9IC1FTk9UU1VQUDsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwkvKiBSWCBs ZW4gaXMgbGltaXRlZCBieSB0aGUgUlggRklGTyBkZXB0aC4gKi8KPiArCWlmIChyeF9sZW4gPiBk c2ktPnJ4X2ZpZm9fZGVwdGgpIHsKPiArCQlyZXQgPSAtRU5PVFNVUFA7Cj4gKwkJZ290byBvdXQ7 Cj4gKwl9Cj4gKwo+ICsJY21kID0gQ01EX1NJWkUodHhfbGVuKSB8IENNRF9WQ0hBTl9JRChtc2ct PmNoYW5uZWwpIHwKPiArCSAgICAgIENNRF9EQVRBVFlQRShtc2ctPnR5cGUpOwo+ICsKPiArCWlm IChtc2ctPmZsYWdzICYgTUlQSV9EU0lfTVNHX1VTRV9MUE0pCj4gKwkJY21kIHw9IENNRF9MUF9F TjsKPiArCj4gKwlpZiAobWlwaV9kc2lfcGFja2V0X2Zvcm1hdF9pc19sb25nKG1zZy0+dHlwZSkp Cj4gKwkJY21kIHw9IENNRF9MT05HOwo+ICsKPiArCWlmIChyeF9sZW4pIHsKPiArCQljbWQgfD0g UkVBRF9DTUQ7Cj4gKwkJd2FpdCA9IFJFQURfQ09NUExFVEVEX1dJVEhfRVJSIHwgUkVBRF9DT01Q TEVURUQ7Cj4gKwkJY3RsID0gUkVBRF9FTiB8IEJUQV9FTjsKPiArCX0gZWxzZSBpZiAobXNnLT5m bGFncyAmIE1JUElfRFNJX01TR19SRVFfQUNLKSB7Cj4gKwkJY21kIHw9IEJUQV9SRVE7Cj4gKwkJ d2FpdCA9IEFDS19XSVRIX0VSUl9SQ1ZEIHwgQUNLX1JDVkQ7Cj4gKwkJY3RsID0gQlRBX0VOOwo+ ICsJfQo+ICsKPiArCXdyaXRlbChyZWFkbChkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fREFUQV9DVEwp IHwgY3RsLAo+ICsJICAgICAgIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7Cj4gKwo+ ICsJd3JpdGVsKGNtZCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9NQUlOX1NFVFRJTkdTKTsKPiAr Cj4gKwlmb3IgKGkgPSAwOyBpIDwgdHhfbGVuOyBpICs9IDQpIHsKPiArCQljb25zdCB1OCAqYnVm ID0gbXNnLT50eF9idWY7Cj4gKwkJaW50IGo7Cj4gKwo+ICsJCXZhbCA9IDA7Cj4gKwkJZm9yIChq ID0gMDsgaiA8IDQgJiYgaiArIGkgPCB0eF9sZW47IGorKykKPiArCQkJdmFsIHw9ICh1MzIpYnVm W2kgKyBqXSA8PCAoOCAqIGopOwo+ICsKPiArCQl3cml0ZWwodmFsLCBkc2ktPnJlZ3MgKyBESVJF Q1RfQ01EX1dSREFUQSk7Cj4gKwl9Cj4gKwo+ICsJLyogQ2xlYXIgc3RhdHVzIGZsYWdzIGJlZm9y ZSBzZW5kaW5nIHRoZSBjb21tYW5kLiAqLwo+ICsJd3JpdGVsKHdhaXQsIGRzaS0+cmVncyArIERJ UkVDVF9DTURfU1RTX0NMUik7Cj4gKwl3cml0ZWwod2FpdCwgZHNpLT5yZWdzICsgRElSRUNUX0NN RF9TVFNfQ1RMKTsKPiArCXJlaW5pdF9jb21wbGV0aW9uKCZkc2ktPmRpcmVjdF9jbWRfY29tcCk7 Cj4gKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TRU5EKTsKPiArCj4gKwl3YWl0 X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRzaS0+ZGlyZWN0X2NtZF9jb21wLAo+ICsJCQkJICAg IG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwo+ICsKPiArCXN0cyA9IHJlYWRsKGRzaS0+cmVncyAr IERJUkVDVF9DTURfU1RTKTsKPiArCXdyaXRlbCh3YWl0LCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01E X1NUU19DTFIpOwo+ICsJd3JpdGVsKDAsIGRzaS0+cmVncyArIERJUkVDVF9DTURfU1RTX0NUTCk7 Cj4gKwo+ICsJd3JpdGVsKHJlYWRsKGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCkgJiB+ Y3RsLAo+ICsJICAgICAgIGRzaS0+cmVncyArIE1DVExfTUFJTl9EQVRBX0NUTCk7Cj4gKwo+ICsJ LyogV2UgZGlkIG5vdCByZWNlaXZlIHRoZSBldmVudHMgd2Ugd2VyZSB3YWl0aW5nIGZvci4gKi8K PiArCWlmICghKHN0cyAmIHdhaXQpKSB7Cj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCQlnb3Rv IG91dDsKPiArCX0KPiArCj4gKwkvKiAnUkVBRCcgb3IgJ1dSSVRFIHdpdGggQUNLJyBmYWlsZWQu ICovCj4gKwlpZiAoc3RzICYgKFJFQURfQ09NUExFVEVEX1dJVEhfRVJSIHwgQUNLX1dJVEhfRVJS X1JDVkQpKSB7Cj4gKwkJcmV0ID0gLUVJTzsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlm b3IgKGkgPSAwOyBpIDwgcnhfbGVuOyBpICs9IDQpIHsKPiArCQl1OCAqYnVmID0gbXNnLT5yeF9i dWY7Cj4gKwkJaW50IGo7Cj4gKwo+ICsJCXZhbCA9IHJlYWRsKGRzaS0+cmVncyArIERJUkVDVF9D TURfUkREQVRBKTsKPiArCQlmb3IgKGogPSAwOyBqIDwgNCAmJiBqICsgaSA8IHJ4X2xlbjsgaisr KQo+ICsJCQlidWZbaSArIGpdID0gdmFsID4+ICg4ICogaik7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4g KwlwbV9ydW50aW1lX3B1dChob3N0LT5kZXYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBjZG5zX2RzaV9vcHMgPSB7Cj4g KwkuYXR0YWNoID0gY2Ruc19kc2lfYXR0YWNoLAo+ICsJLmRldGFjaCA9IGNkbnNfZHNpX2RldGFj aCwKPiArCS50cmFuc2ZlciA9IGNkbnNfZHNpX3RyYW5zZmVyLAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBjZG5zX2RzaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3Qg Y2Ruc19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJlc2V0X2NvbnRy b2xfZGVhc3NlcnQoZHNpLT5kc2lfcF9yc3QpOwo+ICsJY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+ ZHNpX3BfY2xrKTsKPiArCWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRzaV9zeXNfY2xrKTsKPiAr CWNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRwaHktPnBzbV9jbGspOwo+ICsJY2xrX3ByZXBhcmVf ZW5hYmxlKGRzaS0+ZHBoeS0+cGxsX3JlZl9jbGspOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGNkbnNfZHNpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgY2Ruc19kc2kgKmRzaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiAr CWNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPmRwaHktPnBsbF9yZWZfY2xrKTsKPiArCWNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPmRwaHktPnBzbV9jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+ZHNpX3N5c19jbGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ ZHNpX3BfY2xrKTsKPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KGRzaS0+ZHNpX3BfcnN0KTsKPiAr CWRzaS0+bGlua19pbml0aWFsaXplZCA9IGZhbHNlOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBVTklWRVJTQUxfREVWX1BNX09QUyhjZG5zX2RzaV9wbV9vcHMsIGNkbnNfZHNpX3N1 c3BlbmQsIGNkbnNfZHNpX3Jlc3VtZSwKPiArCQkJICAgIE5VTEwpOwo+ICsKPiArc3RhdGljIHVu c2lnbmVkIGxvbmcgY2Ruc19kcGh5X3JlZl9nZXRfd2FrZXVwX3RpbWVfbnMoc3RydWN0IGNkbnNf ZHBoeSAqZHBoeSkKPiArewo+ICsJLyogRGVmYXVsdCB3YWtldXAgdGltZSBpcyA4MDAgbnMgKGlu IGEgc2ltdWxhdGVkIGVudmlyb25tZW50KS4gKi8KPiArCXJldHVybiA4MDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9yZWZfc2V0X3BsbF9jZmcoc3RydWN0IGNkbnNfZHBoeSAq ZHBoeSwKPiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjZG5zX2RwaHlfY2ZnICpjZmcpCj4gK3sK PiArCXUzMiBmYmRpdl9sb3csIGZiZGl2X2hpZ2g7Cj4gKwo+ICsJZmJkaXZfbG93ID0gKGNmZy0+ cGxsX2ZiZGl2IC8gNCkgLSAyOwo+ICsJZmJkaXZfaGlnaCA9IGNmZy0+cGxsX2ZiZGl2IC0gZmJk aXZfbG93IC0gMjsKPiArCj4gKwl3cml0ZWwoRFBIWV9DTU5fSVBESVZfRlJPTV9SRUcgfCBEUEhZ X0NNTl9PUERJVl9GUk9NX1JFRyB8Cj4gKwkgICAgICAgRFBIWV9DTU5fSVBESVYoY2ZnLT5wbGxf aXBkaXYpIHwKPiArCSAgICAgICBEUEhZX0NNTl9PUERJVihjZmctPnBsbF9vcGRpdiksCj4gKwkg ICAgICAgZHBoeS0+cmVncyArIERQSFlfQ01OX09QSVBESVYpOwo+ICsJd3JpdGVsKERQSFlfQ01O X0ZCRElWX0ZST01fUkVHIHwKPiArCSAgICAgICBEUEhZX0NNTl9GQkRJVl9WQUwoZmJkaXZfbG93 LCBmYmRpdl9oaWdoKSwKPiArCSAgICAgICBkcGh5LT5yZWdzICsgRFBIWV9DTU5fRkJESVYpOwo+ ICsJd3JpdGVsKERQSFlfQ01OX1BXTV9ISUdIKDYpIHwgRFBIWV9DTU5fUFdNX0xPVygweDEwMSkg fAo+ICsJICAgICAgIERQSFlfQ01OX1BXTV9ESVYoMHg4KSwKPiArCSAgICAgICBkcGh5LT5yZWdz ICsgRFBIWV9DTU5fUFdNKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY2Ruc19kcGh5X3JlZl9z ZXRfcHNtX2RpdihzdHJ1Y3QgY2Ruc19kcGh5ICpkcGh5LCB1OCBkaXYpCj4gK3sKPiArCXdyaXRl bChEUEhZX1BTTV9DRkdfRlJPTV9SRUcgfCBEUEhZX1BTTV9DTEtfRElWKGRpdiksCj4gKwkgICAg ICAgZHBoeS0+cmVncyArIERQSFlfUFNNX0NGRyk7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMg aXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiBEUEhZIGhvb2tzLiBTcGVjaWZpYyBp bnRlZ3JhdGlvbiBvZgo+ICsgKiB0aGlzIElQIG1heSBoYXZlIHRvIHJlLWltcGxlbWVudCBzb21l IG9mIHRoZW0gZGVwZW5kaW5nIG9uIGhvdyB0aGV5IGRlY2lkZWQKPiArICogdG8gd2lyZSB0aGlu Z3MgaW4gdGhlIFNvQy4KPiArICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2Ruc19kcGh5X29w cyByZWZfZHBoeV9vcHMgPSB7Cj4gKwkuZ2V0X3dha2V1cF90aW1lX25zID0gY2Ruc19kcGh5X3Jl Zl9nZXRfd2FrZXVwX3RpbWVfbnMsCj4gKwkuc2V0X3BsbF9jZmcgPSBjZG5zX2RwaHlfcmVmX3Nl dF9wbGxfY2ZnLAo+ICsJLnNldF9wc21fZGl2ID0gY2Ruc19kcGh5X3JlZl9zZXRfcHNtX2RpdiwK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNkbnNfZHBoeV9v Zl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJjZG5zLGRwaHkiLCAuZGF0YSA9ICZy ZWZfZHBoeV9vcHMgfSwKPiArCXsgLyogc2VudGluZWwgKi8gfSwKPiArfTsKPiArCj4gK3N0YXRp YyBzdHJ1Y3QgY2Ruc19kcGh5ICpjZG5zX2RwaHlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiArewo+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7Cj4gKwlz dHJ1Y3QgY2Ruc19kcGh5ICpkcGh5Owo+ICsJc3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmdzOwo+ ICsJc3RydWN0IHJlc291cmNlIHJlczsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gb2ZfcGFy c2VfcGhhbmRsZV93aXRoX2FyZ3MocGRldi0+ZGV2Lm9mX25vZGUsICJwaHlzIiwKPiArCQkJCQkg IiNwaHktY2VsbHMiLCAwLCAmYXJncyk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBFUlJfUFRS KC1FTk9FTlQpOwo+ICsKPiArCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShjZG5zX2RwaHlfb2ZfbWF0 Y2gsIGFyZ3MubnApOwo+ICsJaWYgKCFtYXRjaCB8fCAhbWF0Y2gtPmRhdGEpCj4gKwkJcmV0dXJu IEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwo+ICsJZHBoeSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2 LCBzaXplb2YoKmRwaHkpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghZHBoeSkKPiArCQlyZXR1cm4g RVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlkcGh5LT5vcHMgPSBtYXRjaC0+ZGF0YTsKPiArCj4g KwlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGFyZ3MubnAsIDAsICZyZXMpOwo+ICsJaWYg KHJldCkKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsKPiArCWRwaHktPnJlZ3MgPSBkZXZt X2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgJnJlcyk7Cj4gKwlpZiAoSVNfRVJSKGRwaHkt PnJlZ3MpKQo+ICsJCXJldHVybiBFUlJfQ0FTVChkcGh5LT5yZWdzKTsKPiArCj4gKwlkcGh5LT5w c21fY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKGFyZ3MubnAsICJwc20iKTsKPiArCWlmIChJU19F UlIoZHBoeS0+cHNtX2NsaykpCj4gKwkJcmV0dXJuIEVSUl9DQVNUKGRwaHktPnBzbV9jbGspOwo+ ICsKPiArCWRwaHktPnBsbF9yZWZfY2xrID0gb2ZfY2xrX2dldF9ieV9uYW1lKGFyZ3MubnAsICJw bGxfcmVmIik7Cj4gKwlpZiAoSVNfRVJSKGRwaHktPnBsbF9yZWZfY2xrKSkgewo+ICsJCXJldCA9 IFBUUl9FUlIoZHBoeS0+cGxsX3JlZl9jbGspOwo+ICsJCWdvdG8gZXJyX3B1dF9wc21fY2xrOwo+ ICsJfQo+ICsKPiArCWlmIChkcGh5LT5vcHMtPnByb2JlKSB7Cj4gKwkJcmV0ID0gZHBoeS0+b3Bz LT5wcm9iZShkcGh5KTsKPiArCQlpZiAocmV0KQo+ICsJCQlnb3RvIGVycl9wdXRfcGxsX3JlZl9j bGs7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGRwaHk7Cj4gKwo+ICtlcnJfcHV0X3BsbF9yZWZfY2xr Ogo+ICsJY2xrX3B1dChkcGh5LT5wbGxfcmVmX2Nsayk7Cj4gKwo+ICtlcnJfcHV0X3BzbV9jbGs6 Cj4gKwljbGtfcHV0KGRwaHktPnBzbV9jbGspOwo+ICsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGNkbnNfZHBoeV9yZW1vdmUoc3RydWN0IGNkbnNfZHBo eSAqZHBoeSkKPiArewo+ICsJaWYgKGRwaHktPm9wcy0+cmVtb3ZlKQo+ICsJCWRwaHktPm9wcy0+ cmVtb3ZlKGRwaHkpOwo+ICsKPiArCWNsa19wdXQoZHBoeS0+cGxsX3JlZl9jbGspOwo+ICsJY2xr X3B1dChkcGh5LT5wc21fY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5zX2RzaV9kcm1f cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGNkbnNf ZHNpICpkc2k7Cj4gKwlzdHJ1Y3QgY2Ruc19kc2lfaW5wdXQgKmlucHV0Owo+ICsJc3RydWN0IHJl c291cmNlICpyZXM7Cj4gKwlpbnQgcmV0LCBpcnE7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCWRzaSA9 IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRzaSksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFkc2kpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgZHNpKTsKPiArCj4gKwlpbnB1dCA9ICZkc2ktPmlucHV0Owo+ICsKPiArCXJlcyA9 IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlkc2kt PnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKPiArCWlmIChJ U19FUlIoZHNpLT5yZWdzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihkc2ktPnJlZ3MpOwo+ICsKPiAr CWRzaS0+ZHNpX3BfY2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJkc2lfcF9jbGsiKTsK PiArCWlmIChJU19FUlIoZHNpLT5kc2lfcF9jbGspKQo+ICsJCXJldHVybiBQVFJfRVJSKGRzaS0+ ZHNpX3BfY2xrKTsKPiArCj4gKwlkc2ktPmRzaV9wX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9n ZXRfb3B0aW9uYWxfZXhjbHVzaXZlKCZwZGV2LT5kZXYsCj4gKwkJCQkJCQkJImRzaV9wX3JzdCIp Owo+ICsJaWYgKElTX0VSUihkc2ktPmRzaV9wX3JzdCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZHNp LT5kc2lfcF9yc3QpOwo+ICsKPiArCWRzaS0+ZHNpX3N5c19jbGsgPSBkZXZtX2Nsa19nZXQoJnBk ZXYtPmRldiwgImRzaV9zeXNfY2xrIik7Cj4gKwlpZiAoSVNfRVJSKGRzaS0+ZHNpX3N5c19jbGsp KQo+ICsJCXJldHVybiBQVFJfRVJSKGRzaS0+ZHNpX3N5c19jbGspOwo+ICsKPiArCWlycSA9IHBs YXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkKPiArCQlyZXR1cm4gaXJx Owo+ICsKPiArCWRzaS0+ZHBoeSA9IGNkbnNfZHBoeV9wcm9iZShwZGV2KTsKPiArCWlmIChJU19F UlIoZHNpLT5kcGh5KSkKPiArCQlyZXR1cm4gUFRSX0VSUihkc2ktPmRwaHkpOwo+ICsKPiArCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmRzaV9wX2Nsayk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZXJyX3JlbW92ZV9kcGh5Owo+ICsKPiArCXZhbCA9IHJlYWRsKGRzaS0+cmVncyArIElE X1JFRyk7Cj4gKwlpZiAoUkVWX1ZFTkRPUl9JRCh2YWwpICE9IDB4Y2FkKSB7Cj4gKwkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiaW52YWxpZCB2ZW5kb3IgaWRcbiIpOwo+ICsJCXJldCA9IC1FSU5WQUw7 Cj4gKwkJZ290byBlcnJfZGlzYWJsZV9wY2xrOwo+ICsJfQo+ICsKPiArCXZhbCA9IHJlYWRsKGRz aS0+cmVncyArIElQX0NPTkYpOwo+ICsJZHNpLT5kaXJlY3RfY21kX2ZpZm9fZGVwdGggPSAxIDw8 IChESVJDTURfRklGT19ERVBUSCh2YWwpICsgMik7Cj4gKwlkc2ktPnJ4X2ZpZm9fZGVwdGggPSBS WF9GSUZPX0RFUFRIKHZhbCk7Cj4gKwlpbml0X2NvbXBsZXRpb24oJmRzaS0+ZGlyZWN0X2NtZF9j b21wKTsKPiArCj4gKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX0RBVEFfQ1RMKTsK PiArCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBNQ1RMX01BSU5fRU4pOwo+ICsJd3JpdGVsKDAsIGRz aS0+cmVncyArIE1DVExfTUFJTl9QSFlfQ1RMKTsKPiArCj4gKwkvKgo+ICsJICogV2Ugb25seSBz dXBwb3J0IHRoZSBEUEkgaW5wdXQsIHNvIGZvcmNlIGlucHV0LT5pZCB0bwo+ICsJICogQ0ROU19E UElfSU5QVVQuCj4gKwkgKi8KPiArCWlucHV0LT5pZCA9IENETlNfRFBJX0lOUFVUOwo+ICsJaW5w dXQtPmJyaWRnZS5mdW5jcyA9ICZjZG5zX2RzaV9icmlkZ2VfZnVuY3M7Cj4gKwlpbnB1dC0+YnJp ZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiArCj4gKwkvKiBNYXNrIGFsbCBpbnRl cnJ1cHRzIGJlZm9yZSByZWdpc3RlcmluZyB0aGUgSVJRIGhhbmRsZXIuICovCj4gKwl3cml0ZWwo MCwgZHNpLT5yZWdzICsgTUNUTF9NQUlOX1NUU19DVEwpOwo+ICsJd3JpdGVsKDAsIGRzaS0+cmVn cyArIE1DVExfRFBIWV9FUlJfQ1RMMSk7Cj4gKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgQ01EX01P REVfU1RTX0NUTCk7Cj4gKwl3cml0ZWwoMCwgZHNpLT5yZWdzICsgRElSRUNUX0NNRF9TVFNfQ1RM KTsKPiArCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBESVJFQ1RfQ01EX1JEX1NUU19DVEwpOwo+ICsJ d3JpdGVsKDAsIGRzaS0+cmVncyArIFZJRF9NT0RFX1NUU19DVEwpOwo+ICsJd3JpdGVsKDAsIGRz aS0+cmVncyArIFRWR19TVFNfQ1RMKTsKPiArCXdyaXRlbCgwLCBkc2ktPnJlZ3MgKyBEUElfSVJR X0VOKTsKPiArCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBjZG5zX2Rz aV9pbnRlcnJ1cHQsIDAsCj4gKwkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZHNpKTsK PiArCWlmIChyZXQpCj4gKwkJZ290byBlcnJfZGlzYWJsZV9wY2xrOwo+ICsKPiArCXBtX3J1bnRp bWVfZW5hYmxlKCZwZGV2LT5kZXYpOwo+ICsJZHNpLT5iYXNlLmRldiA9ICZwZGV2LT5kZXY7Cj4g Kwlkc2ktPmJhc2Uub3BzID0gJmNkbnNfZHNpX29wczsKPiArCj4gKwlyZXQgPSBtaXBpX2RzaV9o b3N0X3JlZ2lzdGVyKCZkc2ktPmJhc2UpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9kaXNh YmxlX3J1bnRpbWVfcG07Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZHNpX3Bf Y2xrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9kaXNhYmxlX3J1bnRpbWVfcG06Cj4g KwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gKwo+ICtlcnJfZGlzYWJsZV9wY2xr Ogo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+ZHNpX3BfY2xrKTsKPiArCj4gK2Vycl9y ZW1vdmVfZHBoeToKPiArCWNkbnNfZHBoeV9yZW1vdmUoZHNpLT5kcGh5KTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGNkbnNfZHNpX2RybV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGNkbnNfZHNpICpkc2kgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKPiArCj4gKwltaXBpX2RzaV9ob3N0X3VucmVnaXN0 ZXIoJmRzaS0+YmFzZSk7Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gKwlj ZG5zX2RwaHlfcmVtb3ZlKGRzaS0+ZHBoeSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNkbnNfZHNpX29mX21hdGNoW10gPSB7 Cj4gKwl7IC5jb21wYXRpYmxlID0gImNkbnMsZHNpIiB9LAo+ICsJeyB9LAo+ICt9Owo+ICsKPiAr c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2Ruc19kc2lfcGxhdGZvcm1fZHJpdmVyID0g ewo+ICsJLnByb2JlICA9IGNkbnNfZHNpX2RybV9wcm9iZSwKPiArCS5yZW1vdmUgPSBjZG5zX2Rz aV9kcm1fcmVtb3ZlLAo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSAgID0gImNkbnMtZHNpIiwK PiArCQkub2ZfbWF0Y2hfdGFibGUgPSBjZG5zX2RzaV9vZl9tYXRjaCwKPiArCQkucG0gPSAmY2Ru c19kc2lfcG1fb3BzLAo+ICsJfSwKPiArfTsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihjZG5z X2RzaV9wbGF0Zm9ybV9kcml2ZXIpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiQm9yaXMgQnJlemls bG9uIDxib3Jpcy5icmV6aWxsb25AYm9vdGxpbi5jb20+Iik7Cj4gK01PRFVMRV9ERVNDUklQVElP TigiQ2FkZW5jZSBEU0kgZHJpdmVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPiArTU9E VUxFX0FMSUFTKCJwbGF0Zm9ybTpjZG5zLWRzaSIpOwo+ICsKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=