From mboxrd@z Thu Jan 1 00:00:00 1970 From: Archit Taneja Subject: Re: [PATCH v4 3/6] drm/bridge/synopsys: Add MIPI DSI host controller bridge Date: Mon, 3 Jul 2017 12:01:02 +0530 Message-ID: <606ab644-cf54-9e33-94a2-f7fdec2025cf@codeaurora.org> References: <1497889685-27349-1-git-send-email-philippe.cornu@st.com> <1497889685-27349-4-git-send-email-philippe.cornu@st.com> <1aad8695-8527-574c-2b99-9efa88216aa8@codeaurora.org> <7ff83ef9-dfc1-6b05-ccf1-1637ed4f4bcc@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <7ff83ef9-dfc1-6b05-ccf1-1637ed4f4bcc@st.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: Philippe CORNU , Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick FERTRE , Neil Armstrong , Eric Anholt , Chris Zhong , Andrzej Hajda , Xinliang Liu , "zourongrong@gmail.com" , Xinwei Kong , Chen Feng , Mark Yao Cc: "devicetree@vger.kernel.org" , Daniel Vetter , "dri-devel@lists.freedesktop.org" , Fabien DESSENNE , Ludovic BARRE , Mickael REULIER , Vincent ABRIOU , Gabriel FERNANDEZ , "linux-arm-kernel@lists.infradead.org" List-Id: devicetree@vger.kernel.org CgpPbiAwNi8yOS8yMDE3IDA4OjEzIFBNLCBQaGlsaXBwZSBDT1JOVSB3cm90ZToKPiAKPiAKPiBP biAwNi8yOC8yMDE3IDA4OjQ0IEFNLCBBcmNoaXQgVGFuZWphIHdyb3RlOgo+Pgo+Pgo+PiBPbiAw Ni8xOS8yMDE3IDA5OjU4IFBNLCBQaGlsaXBwZSBDT1JOVSB3cm90ZToKPj4+IEFkZCBhIFN5bm9w c3lzIERlc2lnbndhcmUgTUlQSSBEU0kgaG9zdCBEUk0gYnJpZGdlIGRyaXZlciwgYmFzZWQgb24g dGhlCj4+PiBSb2NrY2hpcCB2ZXJzaW9uIGZyb20gcm9ja2NoaXAvZHctbWlwaS1kc2kuYyB3aXRo IHBoeSAmIGJyaWRnZSBBUElzLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcHBlIENPUk5V IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Cj4+PiAtLS0KPj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyAgICAgICB8ICAgNiArCj4+PiAgICBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlICAgICAgfCAgIDIgKwo+Pj4gICAgZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1taXBpLWRzaS5jIHwgOTc2Cj4+PiArKysrKysrKysr KysrKysrKysrKysrKysrKwo+Pj4gICAgaW5jbHVkZS9kcm0vYnJpZGdlL2R3X21pcGlfZHNpLmgg ICAgICAgICAgICAgIHwgIDM5ICsKPj4+ICAgIDQgZmlsZXMgY2hhbmdlZCwgMTAyMyBpbnNlcnRp b25zKCspCj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9z eW5vcHN5cy9kdy1taXBpLWRzaS5jCj4+PiAgICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9k cm0vYnJpZGdlL2R3X21pcGlfZHNpLmgKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv c3lub3BzeXMvS2NvbmZpZwo+Pj4gaW5kZXggNDBkMjgyNy4uZjAwZWUyNiAxMDA2NDQKPj4+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZwo+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCj4+PiBAQCAtMjEsMyArMjEsOSBA QCBjb25maWcgRFJNX0RXX0hETUlfSTJTX0FVRElPCj4+PiAgICAgICAgaGVscAo+Pj4gICAgICAg ICAgU3VwcG9ydCB0aGUgSTJTIEF1ZGlvIGludGVyZmFjZSB3aGljaCBpcyBwYXJ0IG9mIHRoZSBT eW5vcHN5cwo+Pj4gICAgICAgICAgRGVzaWdud2FyZSBIRE1JIGJsb2NrLgo+Pj4gKwo+Pj4gK2Nv bmZpZyBEUk1fRFdfTUlQSV9EU0kKPj4+ICsgICAgdHJpc3RhdGUKPj4+ICsgICAgc2VsZWN0IERS TV9LTVNfSEVMUEVSCj4+PiArICAgIHNlbGVjdCBEUk1fTUlQSV9EU0kKPj4+ICsgICAgc2VsZWN0 IERSTV9QQU5FTF9CUklER0UKPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdl L3N5bm9wc3lzL01ha2VmaWxlCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMv TWFrZWZpbGUKPj4+IGluZGV4IDE3YWE3YTYuLjVmNTdkMzYgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlCj4+PiArKysgYi9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlCj4+PiBAQCAtMywzICszLDUgQEAKPj4+ICAg IG9iai0kKENPTkZJR19EUk1fRFdfSERNSSkgKz0gZHctaGRtaS5vCj4+PiAgICBvYmotJChDT05G SUdfRFJNX0RXX0hETUlfQUhCX0FVRElPKSArPSBkdy1oZG1pLWFoYi1hdWRpby5vCj4+PiAgICBv YmotJChDT05GSUdfRFJNX0RXX0hETUlfSTJTX0FVRElPKSArPSBkdy1oZG1pLWkycy1hdWRpby5v Cj4+PiArCj4+PiArb2JqLSQoQ09ORklHX0RSTV9EV19NSVBJX0RTSSkgKz0gZHctbWlwaS1kc2ku bwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctbWlw aS1kc2kuYwo+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1pcGktZHNp LmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAwLi40MTZlZDdmCj4+ PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lz L2R3LW1pcGktZHNpLmMKPj4+IEBAIC0wLDAgKzEsOTc2IEBACj4+PiArLyoKPj4+ICsgKiBDb3B5 cmlnaHQgKGMpIDIwMTYsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAo+Pj4g KyAqIENvcHlyaWdodCAoQykgU1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcKPj4+ICsgKgo+Pj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Cj4+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4+ICsgKiB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+Pj4g KyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+PiArICoKPj4+ICsgKiBN b2RpZmllZCBieSBQaGlsaXBwZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgo+Pj4gKyAq IFRoaXMgZ2VuZXJpYyBTeW5vcHN5cyBEZXNpZ25XYXJlIE1JUEkgRFNJIGhvc3QgZHJpdmVyIGlz IGJhc2VkIG9uIHRoZQo+Pj4gKyAqIFJvY2tjaGlwIHZlcnNpb24gZnJvbSByb2NrY2hpcC9kdy1t aXBpLWRzaS5jIHdpdGggcGh5ICYgYnJpZGdlIEFQSXMuCj4+PiArICovCj4+PiArCj4+PiArI2lu Y2x1ZGUgPGxpbnV4L2Nsay5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5o Pgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgv cG1fcnVudGltZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+Pj4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgo+Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPj4+ ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2UuaD4KPj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRj Lmg+Cj4+PiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPj4+ICsjaW5jbHVkZSA8 ZHJtL2RybV9taXBpX2RzaS5oPgo+Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX29mLmg+Cj4+PiArI2lu Y2x1ZGUgPGRybS9icmlkZ2UvZHdfbWlwaV9kc2kuaD4KPj4+ICsjaW5jbHVkZSA8dmlkZW8vbWlw aV9kaXNwbGF5Lmg+Cj4+PiArCj4+PiArI2RlZmluZSBEU0lfVkVSU0lPTiAgICAgICAgICAgIDB4 MDAKPj4+ICsjZGVmaW5lIERTSV9QV1JfVVAgICAgICAgICAgICAweDA0Cj4+PiArI2RlZmluZSBS RVNFVCAgICAgICAgICAgICAgICAwCj4+PiArI2RlZmluZSBQT1dFUlVQICAgICAgICAgICAgICAg IEJJVCgwKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX0NMS01HUl9DRkcgICAgICAgICAgICAweDA4 Cj4+PiArI2RlZmluZSBUT19DTEtfRElWSURTSU9OKGRpdikgICAgICAgICgoKGRpdikgJiAweGZm KSA8PCA4KQo+Pj4gKyNkZWZpbmUgVFhfRVNDX0NMS19ESVZJRFNJT04oZGl2KSAgICAoKChkaXYp ICYgMHhmZikgPDwgMCkKPj4+ICsKPj4+ICsjZGVmaW5lIERTSV9EUElfVkNJRCAgICAgICAgICAg IDB4MGMKPj4+ICsjZGVmaW5lIERQSV9WSUQodmlkKSAgICAgICAgICAgICgoKHZpZCkgJiAweDMp IDw8IDApCj4+PiArCj4+PiArI2RlZmluZSBEU0lfRFBJX0NPTE9SX0NPRElORyAgICAgICAgMHgx MAo+Pj4gKyNkZWZpbmUgRU4xOF9MT09TRUxZICAgICAgICAgICAgQklUKDgpCj4+PiArI2RlZmlu ZSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzEgICAgMHgwCj4+PiArI2RlZmluZSBEUElfQ09MT1Jf Q09ESU5HXzE2QklUXzIgICAgMHgxCj4+PiArI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE2QklU XzMgICAgMHgyCj4+PiArI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzEgICAgMHgzCj4+ PiArI2RlZmluZSBEUElfQ09MT1JfQ09ESU5HXzE4QklUXzIgICAgMHg0Cj4+PiArI2RlZmluZSBE UElfQ09MT1JfQ09ESU5HXzI0QklUICAgICAgICAweDUKPj4+ICsKPj4+ICsjZGVmaW5lIERTSV9E UElfQ0ZHX1BPTCAgICAgICAgICAgIDB4MTQKPj4+ICsjZGVmaW5lIENPTE9STV9BQ1RJVkVfTE9X ICAgICAgICBCSVQoNCkKPj4+ICsjZGVmaW5lIFNIVVREX0FDVElWRV9MT1cgICAgICAgIEJJVCgz KQo+Pj4gKyNkZWZpbmUgSFNZTkNfQUNUSVZFX0xPVyAgICAgICAgQklUKDIpCj4+PiArI2RlZmlu ZSBWU1lOQ19BQ1RJVkVfTE9XICAgICAgICBCSVQoMSkKPj4+ICsjZGVmaW5lIERBVEFFTl9BQ1RJ VkVfTE9XICAgICAgICBCSVQoMCkKPj4+ICsKPj4+ICsjZGVmaW5lIERTSV9EUElfTFBfQ01EX1RJ TSAgICAgICAgMHgxOAo+Pj4gKyNkZWZpbmUgT1VUVkFDVF9MUENNRF9USU1FKHApICAgICAgICAo KChwKSAmIDB4ZmYpIDw8IDE2KQo+Pj4gKyNkZWZpbmUgSU5WQUNUX0xQQ01EX1RJTUUocCkgICAg ICAgICgocCkgJiAweGZmKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX0RCSV9DRkcgICAgICAgICAg ICAweDIwCj4+PiArI2RlZmluZSBEU0lfREJJX0NNRFNJWkUgICAgICAgICAgICAweDI4Cj4+PiAr Cj4+PiArI2RlZmluZSBEU0lfUENLSERMX0NGRyAgICAgICAgICAgIDB4MmMKPj4+ICsjZGVmaW5l IEVOX0NSQ19SWCAgICAgICAgICAgIEJJVCg0KQo+Pj4gKyNkZWZpbmUgRU5fRUNDX1JYICAgICAg ICAgICAgQklUKDMpCj4+PiArI2RlZmluZSBFTl9CVEEgICAgICAgICAgICAgICAgQklUKDIpCj4+ PiArI2RlZmluZSBFTl9FT1RQX1JYICAgICAgICAgICAgQklUKDEpCj4+PiArI2RlZmluZSBFTl9F T1RQX1RYICAgICAgICAgICAgQklUKDApCj4+PiArCj4+PiArI2RlZmluZSBEU0lfTU9ERV9DRkcg ICAgICAgICAgICAweDM0Cj4+PiArI2RlZmluZSBFTkFCTEVfVklERU9fTU9ERSAgICAgICAgMAo+ Pj4gKyNkZWZpbmUgRU5BQkxFX0NNRF9NT0RFICAgICAgICAgICAgQklUKDApCj4+PiArCj4+PiAr I2RlZmluZSBEU0lfVklEX01PREVfQ0ZHICAgICAgICAweDM4Cj4+PiArI2RlZmluZSBGUkFNRV9C VEFfQUNLICAgICAgICAgICAgQklUKDE0KQo+Pj4gKyNkZWZpbmUgRU5BQkxFX0xPV19QT1dFUiAg ICAgICAgKDB4M2YgPDwgOCkKPj4+ICsjZGVmaW5lIEVOQUJMRV9MT1dfUE9XRVJfTUFTSyAgICAg ICAgKDB4M2YgPDwgOCkKPj4+ICsjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNf UFVMU0VTICAgIDB4MAo+Pj4gKyNkZWZpbmUgVklEX01PREVfVFlQRV9OT05fQlVSU1RfU1lOQ19F VkVOVFMgICAgMHgxCj4+PiArI2RlZmluZSBWSURfTU9ERV9UWVBFX0JVUlNUICAgICAgICAgICAg MHgyCj4+PiArI2RlZmluZSBWSURfTU9ERV9UWVBFX01BU0sgICAgICAgICAgICAweDMKPj4+ICsK Pj4+ICsjZGVmaW5lIERTSV9WSURfUEtUX1NJWkUgICAgICAgIDB4M2MKPj4+ICsjZGVmaW5lIFZJ RF9QS1RfU0laRShwKSAgICAgICAgICAgICgoKHApICYgMHgzZmZmKSA8PCAwKQo+Pj4gKyNkZWZp bmUgVklEX1BLVF9NQVhfU0laRSAgICAgICAgMHgzZmZmCj4+PiArCj4+PiArI2RlZmluZSBEU0lf VklEX0hTQV9USU1FICAgICAgICAweDQ4Cj4+PiArI2RlZmluZSBEU0lfVklEX0hCUF9USU1FICAg ICAgICAweDRjCj4+PiArI2RlZmluZSBEU0lfVklEX0hMSU5FX1RJTUUgICAgICAgIDB4NTAKPj4+ ICsjZGVmaW5lIERTSV9WSURfVlNBX0xJTkVTICAgICAgICAweDU0Cj4+PiArI2RlZmluZSBEU0lf VklEX1ZCUF9MSU5FUyAgICAgICAgMHg1OAo+Pj4gKyNkZWZpbmUgRFNJX1ZJRF9WRlBfTElORVMg ICAgICAgIDB4NWMKPj4+ICsjZGVmaW5lIERTSV9WSURfVkFDVElWRV9MSU5FUyAgICAgICAgMHg2 MAo+Pj4gKyNkZWZpbmUgRFNJX0NNRF9NT0RFX0NGRyAgICAgICAgMHg2OAo+Pj4gKyNkZWZpbmUg TUFYX1JEX1BLVF9TSVpFX0xQICAgICAgICBCSVQoMjQpCj4+PiArI2RlZmluZSBEQ1NfTFdfVFhf TFAgICAgICAgICAgICBCSVQoMTkpCj4+PiArI2RlZmluZSBEQ1NfU1JfMFBfVFhfTFAgICAgICAg ICAgICBCSVQoMTgpCj4+PiArI2RlZmluZSBEQ1NfU1dfMVBfVFhfTFAgICAgICAgICAgICBCSVQo MTcpCj4+PiArI2RlZmluZSBEQ1NfU1dfMFBfVFhfTFAgICAgICAgICAgICBCSVQoMTYpCj4+PiAr I2RlZmluZSBHRU5fTFdfVFhfTFAgICAgICAgICAgICBCSVQoMTQpCj4+PiArI2RlZmluZSBHRU5f U1JfMlBfVFhfTFAgICAgICAgICAgICBCSVQoMTMpCj4+PiArI2RlZmluZSBHRU5fU1JfMVBfVFhf TFAgICAgICAgICAgICBCSVQoMTIpCj4+PiArI2RlZmluZSBHRU5fU1JfMFBfVFhfTFAgICAgICAg ICAgICBCSVQoMTEpCj4+PiArI2RlZmluZSBHRU5fU1dfMlBfVFhfTFAgICAgICAgICAgICBCSVQo MTApCj4+PiArI2RlZmluZSBHRU5fU1dfMVBfVFhfTFAgICAgICAgICAgICBCSVQoOSkKPj4+ICsj ZGVmaW5lIEdFTl9TV18wUF9UWF9MUCAgICAgICAgICAgIEJJVCg4KQo+Pj4gKyNkZWZpbmUgRU5f QUNLX1JRU1QgICAgICAgICAgICBCSVQoMSkKPj4+ICsjZGVmaW5lIEVOX1RFQVJfRlggICAgICAg ICAgICBCSVQoMCkKPj4+ICsKPj4+ICsjZGVmaW5lIENNRF9NT0RFX0FMTF9MUCAgICAgICAgICAg IChNQVhfUkRfUEtUX1NJWkVfTFAgfCBcCj4+PiArICAgICAgICAgICAgICAgICAgICAgRENTX0xX X1RYX0xQIHwgXAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIERDU19TUl8wUF9UWF9MUCB8IFwK Pj4+ICsgICAgICAgICAgICAgICAgICAgICBEQ1NfU1dfMVBfVFhfTFAgfCBcCj4+PiArICAgICAg ICAgICAgICAgICAgICAgRENTX1NXXzBQX1RYX0xQIHwgXAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgIEdFTl9MV19UWF9MUCB8IFwKPj4+ICsgICAgICAgICAgICAgICAgICAgICBHRU5fU1JfMlBf VFhfTFAgfCBcCj4+PiArICAgICAgICAgICAgICAgICAgICAgR0VOX1NSXzFQX1RYX0xQIHwgXAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIEdFTl9TUl8wUF9UWF9MUCB8IFwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICBHRU5fU1dfMlBfVFhfTFAgfCBcCj4+PiArICAgICAgICAgICAgICAgICAg ICAgR0VOX1NXXzFQX1RYX0xQIHwgXAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIEdFTl9TV18w UF9UWF9MUCkKPj4+ICsKPj4+ICsjZGVmaW5lIERTSV9HRU5fSERSICAgICAgICAgICAgMHg2Ywo+ Pj4gKyNkZWZpbmUgR0VOX0hEQVRBKGRhdGEpICAgICAgICAgICAgKCgoZGF0YSkgJiAweGZmZmYp IDw8IDgpCj4+PiArI2RlZmluZSBHRU5fSERBVEFfTUFTSyAgICAgICAgICAgICgweGZmZmYgPDwg OCkKPj4+ICsjZGVmaW5lIEdFTl9IVFlQRSh0eXBlKSAgICAgICAgICAgICgoKHR5cGUpICYgMHhm ZikgPDwgMCkKPj4+ICsjZGVmaW5lIEdFTl9IVFlQRV9NQVNLICAgICAgICAgICAgMHhmZgo+Pj4g Kwo+Pj4gKyNkZWZpbmUgRFNJX0dFTl9QTERfREFUQSAgICAgICAgMHg3MAo+Pj4gKwo+Pj4gKyNk ZWZpbmUgRFNJX0NNRF9QS1RfU1RBVFVTICAgICAgICAweDc0Cj4+PiArI2RlZmluZSBHRU5fQ01E X0VNUFRZICAgICAgICAgICAgQklUKDApCj4+PiArI2RlZmluZSBHRU5fQ01EX0ZVTEwgICAgICAg ICAgICBCSVQoMSkKPj4+ICsjZGVmaW5lIEdFTl9QTERfV19FTVBUWSAgICAgICAgICAgIEJJVCgy KQo+Pj4gKyNkZWZpbmUgR0VOX1BMRF9XX0ZVTEwgICAgICAgICAgICBCSVQoMykKPj4+ICsjZGVm aW5lIEdFTl9QTERfUl9FTVBUWSAgICAgICAgICAgIEJJVCg0KQo+Pj4gKyNkZWZpbmUgR0VOX1BM RF9SX0ZVTEwgICAgICAgICAgICBCSVQoNSkKPj4+ICsjZGVmaW5lIEdFTl9SRF9DTURfQlVTWSAg ICAgICAgICAgIEJJVCg2KQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX1RPX0NOVF9DRkcgICAgICAg ICAgICAweDc4Cj4+PiArI2RlZmluZSBIU1RYX1RPX0NOVChwKSAgICAgICAgICAgICgoKHApICYg MHhmZmZmKSA8PCAxNikKPj4+ICsjZGVmaW5lIExQUlhfVE9fQ05UKHApICAgICAgICAgICAgKChw KSAmIDB4ZmZmZikKPj4+ICsKPj4+ICsjZGVmaW5lIERTSV9CVEFfVE9fQ05UICAgICAgICAgICAg MHg4Ywo+Pj4gKyNkZWZpbmUgRFNJX0xQQ0xLX0NUUkwgICAgICAgICAgICAweDk0Cj4+PiArI2Rl ZmluZSBBVVRPX0NMS0xBTkVfQ1RSTCAgICAgICAgQklUKDEpCj4+PiArI2RlZmluZSBQSFlfVFhS RVFVRVNUQ0xLSFMgICAgICAgIEJJVCgwKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX1BIWV9UTVJf TFBDTEtfQ0ZHICAgICAgICAweDk4Cj4+PiArI2RlZmluZSBQSFlfQ0xLSFMyTFBfVElNRShsYmNj KSAgICAgICAgKCgobGJjYykgJiAweDNmZikgPDwgMTYpCj4+PiArI2RlZmluZSBQSFlfQ0xLTFAy SFNfVElNRShsYmNjKSAgICAgICAgKChsYmNjKSAmIDB4M2ZmKQo+Pj4gKwo+Pj4gKyNkZWZpbmUg RFNJX1BIWV9UTVJfQ0ZHICAgICAgICAgICAgMHg5Ywo+Pj4gKyNkZWZpbmUgUEhZX0hTMkxQX1RJ TUUobGJjYykgICAgICAgICgoKGxiY2MpICYgMHhmZikgPDwgMjQpCj4+PiArI2RlZmluZSBQSFlf TFAySFNfVElNRShsYmNjKSAgICAgICAgKCgobGJjYykgJiAweGZmKSA8PCAxNikKPj4+ICsjZGVm aW5lIE1BWF9SRF9USU1FKGxiY2MpICAgICAgICAoKGxiY2MpICYgMHg3ZmZmKQo+Pj4gKwo+Pj4g KyNkZWZpbmUgRFNJX1BIWV9SU1RaICAgICAgICAgICAgMHhhMAo+Pj4gKyNkZWZpbmUgUEhZX0RJ U0ZPUkNFUExMICAgICAgICAgICAgMAo+Pj4gKyNkZWZpbmUgUEhZX0VORk9SQ0VQTEwgICAgICAg ICAgICBCSVQoMykKPj4+ICsjZGVmaW5lIFBIWV9ESVNBQkxFQ0xLICAgICAgICAgICAgMAo+Pj4g KyNkZWZpbmUgUEhZX0VOQUJMRUNMSyAgICAgICAgICAgIEJJVCgyKQo+Pj4gKyNkZWZpbmUgUEhZ X1JTVFogICAgICAgICAgICAwCj4+PiArI2RlZmluZSBQSFlfVU5SU1RaICAgICAgICAgICAgQklU KDEpCj4+PiArI2RlZmluZSBQSFlfU0hVVERPV05aICAgICAgICAgICAgMAo+Pj4gKyNkZWZpbmUg UEhZX1VOU0hVVERPV05aICAgICAgICAgICAgQklUKDApCj4+PiArCj4+PiArI2RlZmluZSBEU0lf UEhZX0lGX0NGRyAgICAgICAgICAgIDB4YTQKPj4+ICsjZGVmaW5lIE5fTEFORVMobikgICAgICAg ICAgICAoKCgobikgLSAxKSAmIDB4MykgPDwgMCkKPj4+ICsjZGVmaW5lIFBIWV9TVE9QX1dBSVRf VElNRShjeWNsZSkgICAgKCgoY3ljbGUpICYgMHhmZikgPDwgOCkKPj4+ICsKPj4+ICsjZGVmaW5l IERTSV9QSFlfU1RBVFVTICAgICAgICAgICAgMHhiMAo+Pj4gKyNkZWZpbmUgTE9DSyAgICAgICAg ICAgICAgICBCSVQoMCkKPj4+ICsjZGVmaW5lIFNUT1BfU1RBVEVfQ0xLX0xBTkUgICAgICAgIEJJ VCgyKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX1BIWV9UU1RfQ1RSTDAgICAgICAgIDB4YjQKPj4+ ICsjZGVmaW5lIFBIWV9URVNUQ0xLICAgICAgICAgICAgQklUKDEpCj4+PiArI2RlZmluZSBQSFlf VU5URVNUQ0xLICAgICAgICAgICAgMAo+Pj4gKyNkZWZpbmUgUEhZX1RFU1RDTFIgICAgICAgICAg ICBCSVQoMCkKPj4+ICsjZGVmaW5lIFBIWV9VTlRFU1RDTFIgICAgICAgICAgICAwCj4+PiArCj4+ PiArI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJMMSAgICAgICAgMHhiOAo+Pj4gKyNkZWZpbmUgUEhZ X1RFU1RFTiAgICAgICAgICAgIEJJVCgxNikKPj4+ICsjZGVmaW5lIFBIWV9VTlRFU1RFTiAgICAg ICAgICAgIDAKPj4+ICsjZGVmaW5lIFBIWV9URVNURE9VVChuKSAgICAgICAgICAgICgoKG4pICYg MHhmZikgPDwgOCkKPj4+ICsjZGVmaW5lIFBIWV9URVNURElOKG4pICAgICAgICAgICAgKCgobikg JiAweGZmKSA8PCAwKQo+Pj4gKwo+Pj4gKyNkZWZpbmUgRFNJX0lOVF9TVDAgICAgICAgICAgICAw eGJjCj4+PiArI2RlZmluZSBEU0lfSU5UX1NUMSAgICAgICAgICAgIDB4YzAKPj4+ICsjZGVmaW5l IERTSV9JTlRfTVNLMCAgICAgICAgICAgIDB4YzQKPj4+ICsjZGVmaW5lIERTSV9JTlRfTVNLMSAg ICAgICAgICAgIDB4YzgKPj4+ICsKPj4+ICsjZGVmaW5lIFBIWV9TVEFUVVNfVElNRU9VVF9VUyAg ICAgICAgMTAwMDAKPj4+ICsjZGVmaW5lIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMgICAgMjAw MDAKPj4+ICsKPj4+ICtzdHJ1Y3QgZHdfbWlwaV9kc2kgewo+Pj4gKyAgICBzdHJ1Y3QgZHJtX2Jy aWRnZSBicmlkZ2U7Cj4+PiArICAgIHN0cnVjdCBtaXBpX2RzaV9ob3N0IGRzaV9ob3N0Owo+Pj4g KyAgICBzdHJ1Y3QgZHJtX2JyaWRnZSAqcGFuZWxfYnJpZGdlOwo+Pj4gKyAgICBib29sIGlzX3Bh bmVsX2JyaWRnZTsKPj4+ICsgICAgc3RydWN0IGRldmljZSAqZGV2Owo+Pj4gKyAgICB2b2lkIF9f aW9tZW0gKmJhc2U7Cj4+PiArCj4+PiArICAgIHN0cnVjdCBjbGsgKnBjbGs7Cj4+PiArCj4+PiAr ICAgIHVuc2lnbmVkIGludCBsYW5lX21icHM7IC8qIHBlciBsYW5lICovCj4+PiArICAgIHUzMiBj aGFubmVsOwo+Pj4gKyAgICB1MzIgbGFuZXM7Cj4+PiArICAgIHUzMiBmb3JtYXQ7Cj4+PiArICAg IHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFnczsKPj4+ICsKPj4+ICsgICAgY29uc3Qgc3RydWN0IGR3 X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhOwo+Pj4gK307Cj4+PiArCj4+PiArLyoKPj4+ ICsgKiBUaGUgY29udHJvbGxlciBzaG91bGQgZ2VuZXJhdGUgMiBmcmFtZXMgYmVmb3JlCj4+PiAr ICogcHJlcGFyaW5nIHRoZSBwZXJpcGhlcmFsLgo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyB2b2lkIGR3 X21pcGlfZHNpX3dhaXRfZm9yX3R3b19mcmFtZXMoc3RydWN0IGRybV9kaXNwbGF5X21vZGUKPj4+ ICptb2RlKQo+Pj4gK3sKPj4+ICsgICAgaW50IHJlZnJlc2gsIHR3b19mcmFtZXM7Cj4+PiArCj4+ PiArICAgIHJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsKPj4+ICsgICAgdHdvX2Zy YW1lcyA9IERJVl9ST1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gpICogMjsKPj4+ICsgICAg bXNsZWVwKHR3b19mcmFtZXMpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBkd19taXBpX2RzaSAqaG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNpX2hvc3QKPj4+ICpob3N0 KQo+Pj4gK3sKPj4+ICsgICAgcmV0dXJuIGNvbnRhaW5lcl9vZihob3N0LCBzdHJ1Y3QgZHdfbWlw aV9kc2ksIGRzaV9ob3N0KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSBzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmJyaWRnZV90b19kc2koc3RydWN0IGRybV9icmlkZ2UKPj4+ICpicmlkZ2Up Cj4+PiArewo+Pj4gKyAgICByZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGR3X21p cGlfZHNpLCBicmlkZ2UpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHNp X3dyaXRlKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLCB1MzIgcmVnLCB1MzIgdmFsKQo+Pj4gK3sK Pj4+ICsgICAgd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiBy ZWcpCj4+PiArewo+Pj4gKyAgICByZXR1cm4gcmVhZGwoZHNpLT5iYXNlICsgcmVnKTsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCBkd19taXBpX2RzaV9ob3N0X2F0dGFjaChzdHJ1Y3QgbWlw aV9kc2lfaG9zdCAqaG9zdCwKPj4+ICsgICAgICAgICAgICAgICAgICAgc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZGV2aWNlKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kg PSBob3N0X3RvX2RzaShob3N0KTsKPj4+ICsgICAgc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZTsK Pj4+ICsgICAgc3RydWN0IGRybV9wYW5lbCAqcGFuZWw7Cj4+PiArICAgIGludCByZXQ7Cj4+PiAr Cj4+PiArICAgIGlmIChkZXZpY2UtPmxhbmVzID4gZHNpLT5wbGF0X2RhdGEtPm1heF9kYXRhX2xh bmVzKSB7Cj4+PiArICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LCAidGhlIG51bWJlciBvZiBkYXRh IGxhbmVzKCV1KSBpcyB0b28gbWFueVxuIiwKPj4+ICsgICAgICAgICAgICBkZXZpY2UtPmxhbmVz KTsKPj4+ICsgICAgICAgIHJldHVybiAtRUlOVkFMOwo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAg IGRzaS0+bGFuZXMgPSBkZXZpY2UtPmxhbmVzOwo+Pj4gKyAgICBkc2ktPmNoYW5uZWwgPSBkZXZp Y2UtPmNoYW5uZWw7Cj4+PiArICAgIGRzaS0+Zm9ybWF0ID0gZGV2aWNlLT5mb3JtYXQ7Cj4+PiAr ICAgIGRzaS0+bW9kZV9mbGFncyA9IGRldmljZS0+bW9kZV9mbGFnczsKPj4+ICsKPj4+ICsgICAg cmV0ID0gZHJtX29mX2ZpbmRfcGFuZWxfb3JfYnJpZGdlKGhvc3QtPmRldi0+b2Zfbm9kZSwgMSwg MCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgJnBhbmVsLCAmYnJpZGdlKTsKPj4+ICsgICAg aWYgKHJldCkKPj4+ICsgICAgICAgIHJldHVybiByZXQ7Cj4+PiArCj4+PiArICAgIGlmIChwYW5l bCkgewo+Pj4gKyAgICAgICAgYnJpZGdlID0gZHJtX3BhbmVsX2JyaWRnZV9hZGQocGFuZWwsIERS TV9NT0RFX0NPTk5FQ1RPUl9EU0kpOwo+Pj4gKyAgICAgICAgaWYgKElTX0VSUihicmlkZ2UpKQo+ Pj4gKyAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGJyaWRnZSk7Cj4+PiArICAgICAgICBkc2kt PmlzX3BhbmVsX2JyaWRnZSA9IHRydWU7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgZHNpLT5w YW5lbF9icmlkZ2UgPSBicmlkZ2U7Cj4+PiArCj4+PiArICAgIHJldHVybiBkcm1fYnJpZGdlX2Fk ZCgmZHNpLT5icmlkZ2UpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNp X2hvc3RfZGV0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpCj4+PiArewo+Pj4gKyAgICBz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOwo+Pj4gKwo+Pj4gKyAg ICBpZiAoZHNpLT5pc19wYW5lbF9icmlkZ2UpCj4+PiArICAgICAgICBkcm1fcGFuZWxfYnJpZGdl X3JlbW92ZShkc2ktPnBhbmVsX2JyaWRnZSk7Cj4+PiArCj4+PiArICAgIGRybV9icmlkZ2VfcmVt b3ZlKCZkc2ktPmJyaWRnZSk7Cj4+PiArCj4+PiArICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgdm9pZCBkd19taXBpX21lc3NhZ2VfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLAo+Pj4gKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lfbXNn ICptc2cpCj4+PiArewo+Pj4gKyAgICBib29sIGxwbSA9IG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9N U0dfVVNFX0xQTTsKPj4+ICsgICAgdTMyIHZhbCA9IDA7Cj4+PiArCj4+PiArICAgIGlmIChtc2ct PmZsYWdzICYgTUlQSV9EU0lfTVNHX1JFUV9BQ0spCj4+PiArICAgICAgICB2YWwgfD0gRU5fQUNL X1JRU1Q7Cj4+PiArICAgIGlmIChscG0pCj4+PiArICAgICAgICB2YWwgfD0gQ01EX01PREVfQUxM X0xQOwo+Pj4gKwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfTFBDTEtfQ1RSTCwgbHBtID8g MCA6IFBIWV9UWFJFUVVFU1RDTEtIUyk7Cj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9DTURf TU9ERV9DRkcsIHZhbCk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lf Z2VuX3BrdF9oZHJfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMgo+Pj4gaGRyX3Zh bCkKPj4+ICt7Cj4+PiArICAgIGludCByZXQ7Cj4+PiArICAgIHUzMiB2YWwsIG1hc2s7Cj4+PiAr Cj4+PiArICAgIHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BL VF9TVEFUVVMsCj4+PiArICAgICAgICAgICAgICAgICB2YWwsICEodmFsICYgR0VOX0NNRF9GVUxM KSwgMTAwMCwKPj4+ICsgICAgICAgICAgICAgICAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMp Owo+Pj4gKyAgICBpZiAocmV0IDwgMCkgewo+Pj4gKyAgICAgICAgZGV2X2Vycihkc2ktPmRldiwg ImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIGNvbW1hbmQgRklGT1xuIik7Cj4+PiArICAgICAgICBy ZXR1cm4gcmV0Owo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9H RU5fSERSLCBoZHJfdmFsKTsKPj4+ICsKPj4+ICsgICAgbWFzayA9IEdFTl9DTURfRU1QVFkgfCBH RU5fUExEX1dfRU1QVFk7Cj4+PiArICAgIHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJh c2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsCj4+PiArICAgICAgICAgICAgICAgICB2YWwsICh2YWwg JiBtYXNrKSA9PSBtYXNrLAo+Pj4gKyAgICAgICAgICAgICAgICAgMTAwMCwgQ01EX1BLVF9TVEFU VVNfVElNRU9VVF9VUyk7Cj4+PiArICAgIGlmIChyZXQgPCAwKSB7Cj4+PiArICAgICAgICBkZXZf ZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgRklGT1xuIik7Cj4+PiArICAg ICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICB9Cj4+PiArCj4+PiArICAgIHJldHVybiAwOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rjc19zaG9ydF93cml0ZShzdHJ1 Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKPj4+ICt7Cj4+PiArICAgIGNvbnN0IHU4ICp0eF9idWYg PSBtc2ctPnR4X2J1ZjsKPj4+ICsgICAgdTE2IGRhdGEgPSAwOwo+Pj4gKyAgICB1MzIgdmFsOwo+ Pj4gKwo+Pj4gKyAgICBpZiAobXNnLT50eF9sZW4gPiAwKQo+Pj4gKyAgICAgICAgZGF0YSB8PSB0 eF9idWZbMF07Cj4+PiArICAgIGlmIChtc2ctPnR4X2xlbiA+IDEpCj4+PiArICAgICAgICBkYXRh IHw9IHR4X2J1ZlsxXSA8PCA4Owo+Pj4gKwo+Pj4gKyAgICBpZiAobXNnLT50eF9sZW4gPiAyKSB7 Cj4+PiArICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LCAidG9vIGxvbmcgdHggYnVmIGxlbmd0aCAl enUgZm9yIHNob3J0Cj4+PiB3cml0ZVxuIiwKPj4+ICsgICAgICAgICAgICBtc2ctPnR4X2xlbik7 Cj4+PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICB2 YWwgPSBHRU5fSERBVEEoZGF0YSkgfCBHRU5fSFRZUEUobXNnLT50eXBlKTsKPj4+ICsgICAgcmV0 dXJuIGR3X21pcGlfZHNpX2dlbl9wa3RfaGRyX3dyaXRlKGRzaSwgdmFsKTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIGludCBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG1pcGlf ZHNpX21zZyAqbXNnKQo+Pj4gK3sKPj4+ICsgICAgY29uc3QgdTggKnR4X2J1ZiA9IG1zZy0+dHhf YnVmOwo+Pj4gKyAgICBpbnQgbGVuID0gbXNnLT50eF9sZW4sIHBsZF9kYXRhX2J5dGVzID0gc2l6 ZW9mKHUzMiksIHJldDsKPj4+ICsgICAgdTMyIGhkcl92YWwgPSBHRU5fSERBVEEobXNnLT50eF9s ZW4pIHwgR0VOX0hUWVBFKG1zZy0+dHlwZSk7Cj4+PiArICAgIHUzMiByZW1haW5kZXI7Cj4+PiAr ICAgIHUzMiB2YWw7Cj4+PiArCj4+PiArICAgIGlmIChtc2ctPnR4X2xlbiA8IDMpIHsKPj4+ICsg ICAgICAgIGRldl9lcnIoZHNpLT5kZXYsICJ3cm9uZyB0eCBidWYgbGVuZ3RoICV6dSBmb3IgbG9u ZyB3cml0ZVxuIiwKPj4+ICsgICAgICAgICAgICBtc2ctPnR4X2xlbik7Cj4+PiArICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICB3aGlsZSAoRElWX1JPVU5E X1VQKGxlbiwgcGxkX2RhdGFfYnl0ZXMpKSB7Cj4+PiArICAgICAgICBpZiAobGVuIDwgcGxkX2Rh dGFfYnl0ZXMpIHsKPj4+ICsgICAgICAgICAgICByZW1haW5kZXIgPSAwOwo+Pj4gKyAgICAgICAg ICAgIG1lbWNweSgmcmVtYWluZGVyLCB0eF9idWYsIGxlbik7Cj4+PiArICAgICAgICAgICAgZHNp X3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKPj4+ICsgICAgICAgICAg ICBsZW4gPSAwOwo+Pj4gKyAgICAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAgICBtZW1jcHko JnJlbWFpbmRlciwgdHhfYnVmLCBwbGRfZGF0YV9ieXRlcyk7Cj4+PiArICAgICAgICAgICAgZHNp X3dyaXRlKGRzaSwgRFNJX0dFTl9QTERfREFUQSwgcmVtYWluZGVyKTsKPj4+ICsgICAgICAgICAg ICB0eF9idWYgKz0gcGxkX2RhdGFfYnl0ZXM7Cj4+PiArICAgICAgICAgICAgbGVuIC09IHBsZF9k YXRhX2J5dGVzOwo+Pj4gKyAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgcmV0ID0gcmVhZGxf cG9sbF90aW1lb3V0KGRzaS0+YmFzZSArIERTSV9DTURfUEtUX1NUQVRVUywKPj4+ICsgICAgICAg ICAgICAgICAgICAgICB2YWwsICEodmFsICYgR0VOX1BMRF9XX0ZVTEwpLCAxMDAwLAo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgIENNRF9QS1RfU1RBVFVTX1RJTUVPVVRfVVMpOwo+Pj4gKyAgICAg ICAgaWYgKHJldCA8IDApIHsKPj4+ICsgICAgICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LAo+Pj4g KyAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGdldCBhdmFpbGFibGUgd3JpdGUgcGF5bG9hZCBG SUZPXG4iKTsKPj4+ICsgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgICAgfQo+Pj4g KyAgICB9Cj4+PiArCj4+PiArICAgIHJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0 ZShkc2ksIGhkcl92YWwpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgc3NpemVfdCBkd19taXBp X2RzaV9ob3N0X3RyYW5zZmVyKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykKPj4+ICt7Cj4+ PiArICAgIHN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9zdCk7Cj4+PiAr ICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gZHcgZHJ2IGlt cHJvdmVtZW50cwo+Pj4gKyAgICAgKiB1c2UgbWlwaV9kc2lfY3JlYXRlX3BhY2tldCgpIGluc3Rl YWQgb2YgYWxsIGZvbGxvd2luZwo+Pj4gKyAgICAgKiBmdW5jdGlvbnMgYW5kIGNvZGUgKG5vIHN3 aXRjaCBjYXNlcywgbm8KPj4+ICsgICAgICogZHdfbWlwaV9kc2lfZGNzX3Nob3J0X3dyaXRlKCks IG9ubHkgdGhlIGxvb3AgaW4gbG9uZ193cml0ZS4uLikKPj4+ICsgICAgICogYW5kIHVzZSBwYWNr ZXQuaGVhZGVyLi4uCj4+PiArICAgICAqLwo+Pj4gKyAgICBkd19taXBpX21lc3NhZ2VfY29uZmln KGRzaSwgbXNnKTsKPj4+ICsKPj4+ICsgICAgc3dpdGNoIChtc2ctPnR5cGUpIHsKPj4+ICsgICAg Y2FzZSBNSVBJX0RTSV9EQ1NfU0hPUlRfV1JJVEU6Cj4+PiArICAgIGNhc2UgTUlQSV9EU0lfRENT X1NIT1JUX1dSSVRFX1BBUkFNOgo+Pj4gKyAgICBjYXNlIE1JUElfRFNJX1NFVF9NQVhJTVVNX1JF VFVSTl9QQUNLRVRfU0laRToKPj4+ICsgICAgICAgIHJldCA9IGR3X21pcGlfZHNpX2Rjc19zaG9y dF93cml0ZShkc2ksIG1zZyk7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAgY2FzZSBNSVBJ X0RTSV9EQ1NfTE9OR19XUklURToKPj4+ICsgICAgICAgIHJldCA9IGR3X21pcGlfZHNpX2Rjc19s b25nX3dyaXRlKGRzaSwgbXNnKTsKPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gKyAgICBkZWZhdWx0 Ogo+Pj4gKyAgICAgICAgZGV2X2Vycihkc2ktPmRldiwgInVuc3VwcG9ydGVkIG1lc3NhZ2UgdHlw ZSAweCUwMnhcbiIsCj4+PiArICAgICAgICAgICAgbXNnLT50eXBlKTsKPj4+ICsgICAgICAgIHJl dCA9IC1FSU5WQUw7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcmV0dXJuIHJldDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9ob3N0X29wcyBkd19taXBp X2RzaV9ob3N0X29wcyA9IHsKPj4+ICsgICAgLmF0dGFjaCA9IGR3X21pcGlfZHNpX2hvc3RfYXR0 YWNoLAo+Pj4gKyAgICAuZGV0YWNoID0gZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2gsCj4+PiArICAg IC50cmFuc2ZlciA9IGR3X21pcGlfZHNpX2hvc3RfdHJhbnNmZXIsCj4+PiArfTsKPj4+ICsKPj4+ ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSkKPj4+ICt7Cj4+PiArICAgIHUzMiB2YWw7Cj4+PiArCj4+PiArICAgIC8qCj4+ PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+Pj4gKyAgICAgKiBlbmFibGluZyBs b3cgcG93ZXIgaXMgcGFuZWwtZGVwZW5kZW50LCB3ZSBzaG91bGQgdXNlIHRoZQo+Pj4gKyAgICAg KiBwYW5lbCBjb25maWd1cmF0aW9uIGhlcmUuLi4KPj4+ICsgICAgICovCj4+PiArICAgIHZhbCA9 IEVOQUJMRV9MT1dfUE9XRVI7Cj4+PiArCj4+PiArICAgIGlmIChkc2ktPm1vZGVfZmxhZ3MgJiBN SVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUKQo+Pj4gKyAgICAgICAgdmFsIHw9IFZJRF9NT0RFX1RZ UEVfQlVSU1Q7Cj4+PiArICAgIGVsc2UgaWYgKGRzaS0+bW9kZV9mbGFncyAmIE1JUElfRFNJX01P REVfVklERU9fU1lOQ19QVUxTRSkKPj4+ICsgICAgICAgIHZhbCB8PSBWSURfTU9ERV9UWVBFX05P Tl9CVVJTVF9TWU5DX1BVTFNFUzsKPj4+ICsgICAgZWxzZQo+Pj4gKyAgICAgICAgdmFsIHw9IFZJ RF9NT0RFX1RZUEVfTk9OX0JVUlNUX1NZTkNfRVZFTlRTOwo+Pj4gKwo+Pj4gKyAgICBkc2lfd3Jp dGUoZHNpLCBEU0lfVklEX01PREVfQ0ZHLCB2YWwpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9zZXRfbW9kZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPj4+ICsg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kZV9mbGFncykKPj4+ICt7Cj4+PiArICAg IGRzaV93cml0ZShkc2ksIERTSV9QV1JfVVAsIFJFU0VUKTsKPj4+ICsKPj4+ICsgICAgaWYgKG1v ZGVfZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPKSB7Cj4+PiArICAgICAgICBkc2lfd3JpdGUo ZHNpLCBEU0lfTU9ERV9DRkcsIEVOQUJMRV9WSURFT19NT0RFKTsKPj4+ICsgICAgICAgIGR3X21p cGlfZHNpX3ZpZGVvX21vZGVfY29uZmlnKGRzaSk7Cj4+PiArICAgICAgICBkc2lfd3JpdGUoZHNp LCBEU0lfTFBDTEtfQ1RSTCwgUEhZX1RYUkVRVUVTVENMS0hTKTsKPj4+ICsgICAgfSBlbHNlIHsK Pj4+ICsgICAgICAgIGRzaV93cml0ZShkc2ksIERTSV9NT0RFX0NGRywgRU5BQkxFX0NNRF9NT0RF KTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBQ T1dFUlVQKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZGlzYWJs ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPj4+ICt7Cj4+PiArICAgIGRzaV93cml0ZShkc2ks IERTSV9QV1JfVVAsIFJFU0VUKTsKPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9SU1Ra LCBQSFlfUlNUWik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX2lu aXQoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4+PiArewo+Pj4gKyAgICAvKgo+Pj4gKyAgICAg KiBUaGUgbWF4aW11bSBwZXJtaXR0ZWQgZXNjYXBlIGNsb2NrIGlzIDIwTUh6IGFuZCBpdCBpcyBk ZXJpdmVkCj4+PiBmcm9tCj4+PiArICAgICAqIGxhbmVieXRlY2xrLCB3aGljaCBpcyBydW5uaW5n IGF0ICJsYW5lX21icHMgLyA4Ii4gIFRodXMgd2Ugd2FudDoKPj4+ICsgICAgICoKPj4+ICsgICAg ICogICAgIChsYW5lX21icHMgPj4gMykgLyBlc2NfY2xrX2RpdmlzaW9uIDwgMjAKPj4+ICsgICAg ICogd2hpY2ggaXM6Cj4+PiArICAgICAqICAgICAobGFuZV9tYnBzID4+IDMpIC8gMjAgPiBlc2Nf Y2xrX2RpdmlzaW9uCj4+PiArICAgICAqLwo+Pj4gKyAgICB1MzIgZXNjX2Nsa19kaXZpc2lvbiA9 IChkc2ktPmxhbmVfbWJwcyA+PiAzKSAvIDIwICsgMTsKPj4+ICsKPj4+ICsgICAgZHNpX3dyaXRl KGRzaSwgRFNJX1BXUl9VUCwgUkVTRVQpOwo+Pj4gKwo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBU T0RPIGR3IGRydiBpbXByb3ZlbWVudHMKPj4+ICsgICAgICogdGltZW91dCBjbG9jayBkaXZpc2lv biBzaG91bGQgYmUgY29tcHV0ZWQgd2l0aCB0aGUKPj4+ICsgICAgICogaGlnaCBzcGVlZCB0cmFu c21pc3Npb24gY291bnRlciB0aW1lb3V0IGFuZCBieXRlIGxhbmUuLi4KPj4+ICsgICAgICovCj4+ PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9DTEtNR1JfQ0ZHLCBUT19DTEtfRElWSURTSU9OKDEw KSB8Cj4+PiArICAgICAgICAgIFRYX0VTQ19DTEtfRElWSURTSU9OKGVzY19jbGtfZGl2aXNpb24p KTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBpX2NvbmZpZyhz dHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPj4+ICsgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpCj4+PiArewo+Pj4gKyAgICB1MzIgdmFsID0gMCwgY29sb3Ig PSAwOwo+Pj4gKwo+Pj4gKyAgICBzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7Cj4+PiArICAgIGNhc2Ug TUlQSV9EU0lfRk1UX1JHQjg4ODoKPj4+ICsgICAgICAgIGNvbG9yID0gRFBJX0NPTE9SX0NPRElO R18yNEJJVDsKPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gKyAgICBjYXNlIE1JUElfRFNJX0ZNVF9S R0I2NjY6Cj4+PiArICAgICAgICBjb2xvciA9IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMiB8IEVO MThfTE9PU0VMWTsKPj4+ICsgICAgICAgIGJyZWFrOwo+Pj4gKyAgICBjYXNlIE1JUElfRFNJX0ZN VF9SR0I2NjZfUEFDS0VEOgo+Pj4gKyAgICAgICAgY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE4 QklUXzE7Cj4+PiArICAgICAgICBicmVhazsKPj4+ICsgICAgY2FzZSBNSVBJX0RTSV9GTVRfUkdC NTY1Ogo+Pj4gKyAgICAgICAgY29sb3IgPSBEUElfQ09MT1JfQ09ESU5HXzE2QklUXzE7Cj4+PiAr ICAgICAgICBicmVhazsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICBpZiAobW9kZS0+ZmxhZ3Mg JiBEUk1fTU9ERV9GTEFHX05WU1lOQykKPj4+ICsgICAgICAgIHZhbCB8PSBWU1lOQ19BQ1RJVkVf TE9XOwo+Pj4gKyAgICBpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX05IU1lOQykKPj4+ ICsgICAgICAgIHZhbCB8PSBIU1lOQ19BQ1RJVkVfTE9XOwo+Pj4gKwo+Pj4gKyAgICBkc2lfd3Jp dGUoZHNpLCBEU0lfRFBJX1ZDSUQsIERQSV9WSUQoZHNpLT5jaGFubmVsKSk7Cj4+PiArICAgIGRz aV93cml0ZShkc2ksIERTSV9EUElfQ09MT1JfQ09ESU5HLCBjb2xvcik7Cj4+PiArICAgIGRzaV93 cml0ZShkc2ksIERTSV9EUElfQ0ZHX1BPTCwgdmFsKTsKPj4+ICsgICAgLyoKPj4+ICsgICAgICog VE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzCj4+PiArICAgICAqIGxhcmdlc3QgcGFja2V0IHNpemVz IGR1cmluZyBoZnAgb3IgZHVyaW5nIHZzYS92cGIvdmZwCj4+PiArICAgICAqIHNob3VsZCBiZSBj b21wdXRlZCBhY2NvcmRpbmcgdG8gYnl0ZSBsYW5lLCBsYW5lIG51bWJlciBhbmQgb25seQo+Pj4g KyAgICAgKiBpZiBzZW5kaW5nIGxwIGNtZHMgaW4gaGlnaCBzcGVlZCBpcyBlbmFibGUgKFBIWV9U WFJFUVVFU1RDTEtIUykKPj4+ICsgICAgICovCj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9E UElfTFBfQ01EX1RJTSwgT1VUVkFDVF9MUENNRF9USU1FKDQpCj4+PiArICAgICAgICAgIHwgSU5W QUNUX0xQQ01EX1RJTUUoNCkpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9wYWNrZXRfaGFuZGxlcl9jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4+PiAr ewo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUENLSERMX0NGRywgRU5fQ1JDX1JYIHwgRU5f RUNDX1JYIHwgRU5fQlRBKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfdmlkZW9fcGFja2V0X2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwKPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPj4+ICt7 Cj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+Pj4gKyAg ICAgKiBvbmx5IGJ1cnN0IG1vZGUgaXMgc3VwcG9ydGVkIGhlcmUuIEZvciBub24tYnVyc3Qgdmlk ZW8gbW9kZXMsCj4+PiArICAgICAqIHdlIHNob3VsZCBjb21wdXRlIERTSV9WSURfUEtUX1NJWkUs IERTSV9WQ0NSLk5VTUMgJgo+Pj4gKyAgICAgKiBEU0lfVk5QQ1IuTlBTSVpFLi4uIGVzcGVjaWFs bHkgYmVjYXVzZSB0aGlzIGRyaXZlciBzdXBwb3J0cwo+Pj4gKyAgICAgKiBub24tYnVyc3Qgdmlk ZW8gbW9kZXMsIHNlZSBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZygpLi4uCj4+PiArICAg ICAqLwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1BLVF9TSVpFLCBWSURfUEtUX1NJ WkUobW9kZS0+aGRpc3BsYXkpKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlw aV9kc2lfY29tbWFuZF9tb2RlX2NvbmZpZyhzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSkKPj4+ICt7 Cj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+Pj4gKyAg ICAgKiBjb21wdXRlIGhpZ2ggc3BlZWQgdHJhbnNtaXNzaW9uIGNvdW50ZXIgdGltZW91dCBhY2Nv cmRpbmcKPj4+ICsgICAgICogdG8gdGhlIHRpbWVvdXQgY2xvY2sgZGl2aXNpb24gKFRPX0NMS19E SVZJRFNJT04pIGFuZCBieXRlIGxhbmUuLi4KPj4+ICsgICAgICovCj4+PiArICAgIGRzaV93cml0 ZShkc2ksIERTSV9UT19DTlRfQ0ZHLCBIU1RYX1RPX0NOVCgxMDAwKSB8Cj4+PiBMUFJYX1RPX0NO VCgxMDAwKSk7Cj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50 cwo+Pj4gKyAgICAgKiB0aGUgQnVzLVR1cm4tQXJvdW5kIFRpbWVvdXQgQ291bnRlciBzaG91bGQg YmUgY29tcHV0ZWQKPj4+ICsgICAgICogYWNjb3JkaW5nIHRvIGJ5dGUgbGFuZS4uLgo+Pj4gKyAg ICAgKi8KPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0JUQV9UT19DTlQsIDB4ZDAwKTsKPj4+ ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfQ01EX01PREUpOwo+Pj4g K30KPj4+ICsKPj4+ICsvKiBHZXQgbGFuZSBieXRlIGNsb2NrIGN5Y2xlcy4gKi8KPj4+ICtzdGF0 aWMgdTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xiY2Moc3RydWN0IGR3X21pcGlfZHNp ICpkc2ksCj4+PiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHUzMiBoY29tcG9uZW50KQo+Pj4g K3sKPj4+ICsgICAgdTMyIGZyYWMsIGxiY2M7Cj4+PiArCj4+PiArICAgIGxiY2MgPSBoY29tcG9u ZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMgLyA4Owo+Pj4gKwo+Pj4gKyAgICBm cmFjID0gbGJjYyAlIG1vZGUtPmNsb2NrOwo+Pj4gKyAgICBsYmNjID0gbGJjYyAvIG1vZGUtPmNs b2NrOwo+Pj4gKyAgICBpZiAoZnJhYykKPj4+ICsgICAgICAgIGxiY2MrKzsKPj4+ICsKPj4+ICsg ICAgcmV0dXJuIGxiY2M7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfZHNp X2xpbmVfdGltZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKPj4+ICt7Cj4+PiAr ICAgIHUzMiBodG90YWwsIGhzYSwgaGJwLCBsYmNjOwo+Pj4gKwo+Pj4gKyAgICBodG90YWwgPSBt b2RlLT5odG90YWw7Cj4+PiArICAgIGhzYSA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5j X3N0YXJ0Owo+Pj4gKyAgICBoYnAgPSBtb2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19lbmQ7Cj4+ PiArCj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cwo+Pj4g KyAgICAgKiBjb21wdXRhdGlvbnMgYmVsb3cgbWF5IGJlIGltcHJvdmVkLi4uCj4+PiArICAgICAq Lwo+Pj4gKyAgICBsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hjb21wb25lbnRfbGJjYyhkc2ksIG1v ZGUsIGh0b3RhbCk7Cj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9WSURfSExJTkVfVElNRSwg bGJjYyk7Cj4+PiArCj4+PiArICAgIGxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9s YmNjKGRzaSwgbW9kZSwgaHNhKTsKPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IU0Ff VElNRSwgbGJjYyk7Cj4+PiArCj4+PiArICAgIGxiY2MgPSBkd19taXBpX2RzaV9nZXRfaGNvbXBv bmVudF9sYmNjKGRzaSwgbW9kZSwgaGJwKTsKPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1ZJ RF9IQlBfVElNRSwgbGJjYyk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIGR3X21pcGlf ZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUp Cj4+PiArewo+Pj4gKyAgICB1MzIgdmFjdGl2ZSwgdnNhLCB2ZnAsIHZicDsKPj4+ICsKPj4+ICsg ICAgdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5Owo+Pj4gKyAgICB2c2EgPSBtb2RlLT52c3luY19l bmQgLSBtb2RlLT52c3luY19zdGFydDsKPj4+ICsgICAgdmZwID0gbW9kZS0+dnN5bmNfc3RhcnQg LSBtb2RlLT52ZGlzcGxheTsKPj4+ICsgICAgdmJwID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dnN5 bmNfZW5kOwo+Pj4gKwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZBQ1RJVkVfTElO RVMsIHZhY3RpdmUpOwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfVklEX1ZTQV9MSU5FUywg dnNhKTsKPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9WRlBfTElORVMsIHZmcCk7Cj4+ PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJTkVTLCB2YnApOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5X3RpbWluZ19jb25maWcoc3RydWN0 IGR3X21pcGlfZHNpICpkc2kpCj4+PiArewo+Pj4gKyAgICAvKgo+Pj4gKyAgICAgKiBUT0RPIGR3 IGRydiBpbXByb3ZlbWVudHMKPj4+ICsgICAgICogZGF0YSAmIGNsb2NrIGxhbmUgdGltZXJzIHNo b3VsZCBiZSBjb21wdXRlZCBhY2NvcmRpbmcgdG8gcGFuZWwKPj4+ICsgICAgICogYmxhbmtpbmdz IGFuZCB0byB0aGUgYXV0b21hdGljIGNsb2NrIGxhbmUgY29udHJvbCBtb2RlLi4uCj4+PiArICAg ICAqIG5vdGU6IERTSV9QSFlfVE1SX0NGRy5NQVhfUkRfVElNRSBzaG91bGQgYmUgaW4gbGluZSB3 aXRoCj4+PiArICAgICAqIERTSV9DTURfTU9ERV9DRkcuTUFYX1JEX1BLVF9TSVpFX0xQIChzZWUg Q01EX01PREVfQUxMX0xQKQo+Pj4gKyAgICAgKi8KPj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJ X1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQwKQo+Pj4gKyAgICAgICAgICB8IFBIWV9M UDJIU19USU1FKDB4NDApIHwgTUFYX1JEX1RJTUUoMTAwMDApKTsKPj4+ICsKPj4+ICsgICAgZHNp X3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQSFlfQ0xLSFMyTFBfVElNRSgweDQw KQo+Pj4gKyAgICAgICAgICB8IFBIWV9DTEtMUDJIU19USU1FKDB4NDApKTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9pbnRlcmZhY2VfY29uZmlnKHN0cnVj dCBkd19taXBpX2RzaSAqZHNpKQo+Pj4gK3sKPj4+ICsgICAgLyoKPj4+ICsgICAgICogVE9ETyBk dyBkcnYgaW1wcm92ZW1lbnRzCj4+PiArICAgICAqIHN0b3Agd2FpdCB0aW1lIHNob3VsZCBiZSB0 aGUgbWF4aW11bSBiZXR3ZWVuIGhvc3QgZHNpCj4+PiArICAgICAqIGFuZCBwYW5lbCBzdG9wIHdh aXQgdGltZXMKPj4+ICsgICAgICovCj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9QSFlfSUZf Q0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfAo+Pj4gKyAgICAgICAgICBOX0xBTkVTKGRz aS0+bGFuZXMpKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBo eV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+Pj4gK3sKPj4+ICsgICAgLyogQ2xlYXIg UEhZIHN0YXRlICovCj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX0RJ U0ZPUkNFUExMIHwgUEhZX0RJU0FCTEVDTEsKPj4+ICsgICAgICAgICAgfCBQSFlfUlNUWiB8IFBI WV9TSFVURE9XTlopOwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwg UEhZX1VOVEVTVENMUik7Cj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkww LCBQSFlfVEVTVENMUik7Cj4+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9QSFlfVFNUX0NUUkww LCBQSFlfVU5URVNUQ0xSKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfZHBoeV9lbmFibGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpCj4+PiArewo+Pj4gKyAgICB1 MzIgdmFsOwo+Pj4gKyAgICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBE U0lfUEhZX1JTVFosIFBIWV9FTkZPUkNFUExMIHwgUEhZX0VOQUJMRUNMSyB8Cj4+PiArICAgICAg ICAgIFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOwo+Pj4gKwo+Pj4gKyAgICByZXQgPSBy ZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCj4+PiArICAgICAg ICAgICAgICAgICB2YWwsIHZhbCAmIExPQ0ssIDEwMDAsIFBIWV9TVEFUVVNfVElNRU9VVF9VUyk7 Cj4+PiArICAgIGlmIChyZXQgPCAwKQo+Pj4gKyAgICAgICAgRFJNX0RFQlVHX0RSSVZFUigiZmFp bGVkIHRvIHdhaXQgcGh5IGxvY2sgc3RhdGVcbiIpOwo+Pj4gKwo+Pj4gKyAgICByZXQgPSByZWFk bF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9TVEFUVVMsCj4+PiArICAgICAgICAg ICAgICAgICB2YWwsIHZhbCAmIFNUT1BfU1RBVEVfQ0xLX0xBTkUsIDEwMDAsCj4+PiArICAgICAg ICAgICAgICAgICBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOwo+Pj4gKyAgICBpZiAocmV0IDwgMCkK Pj4+ICsgICAgICAgIERSTV9ERUJVR19EUklWRVIoImZhaWxlZCB0byB3YWl0IHBoeSBjbGsgbGFu ZSBzdG9wIHN0YXRlXG4iKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9k c2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQo+Pj4gK3sKPj4+ICsgICAgZHNp X3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7Cj4+PiArICAgIGRzaV9yZWFkKGRzaSwgRFNJX0lOVF9T VDEpOwo+Pj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzAsIDApOwo+Pj4gKyAgICBk c2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzEsIDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9icmlkZ2VfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90 b19kc2koYnJpZGdlKTsKPj4+ICsKPj4+ICsgICAgLyoKPj4+ICsgICAgICogU3dpdGNoIHRvIGNt ZCBtb2RlIGJlZm9yZSBwYW5lbC1icmlkZ2UgZGlzYWJsZSAmIHBhbmVsIHVucHJlcGFyZS4KPj4+ ICsgICAgICogTm90ZTogcGFuZWwtYnJpZGdlIGRpc2FibGUgJiBwYW5lbCBkaXNhYmxlIGhhcyBi ZWVuIGNhbGxlZAo+Pj4gKyAgICAgKiBiZWZvcmUgYnkgdGhlIGRybSBmcmFtZXdvcmsuCj4+Cj4+ IEkgZG9uJ3QgdGhpbmsgdGhhdCdzIGV4YWN0bHkgdGhlIGNhc2UuIEkgdGhpbmsgdGhlIHNlcXVl bmNlIHNob3VsZCBiZSBhcwo+PiBpbiB0aGUKPj4gY2FsbCBjaGFpbiBiZWxvdy4KPj4KPiAKPiBI aSBBcmNoaXQsCj4gQW5kIG1hbnkgdGhhbmtzIGZvciB5b3VyIGNvbW1lbnRzIDotKQo+IHRoZSB3 b3JkICJwb3N0XyIgaXMgbWlzc2luZyBpbiB0aGUgYWJvdmUgY29tbWVudCwgc29ycnkgZm9yIHRo YXQuIEkKPiBzaG91bGQgaGF2ZSB3cml0dGVuICJTd2l0Y2ggdG8gY21kIG1vZGUgYmVmb3JlIHBh bmVsLWJyaWRnZSBwb3N0X2Rpc2FibGUKPiAmIC4uLiIgdGhhdCBpcyBtdWNoIG1vcmUgY29ycmVj dCBJIHRoaW5rLCBJIHdpbGwgdXBkYXRlIHRoaXMgY29tbWVudCBmb3IKPiB2NSA6ICkKPiAKPiAK Pj4+ICsgICAgICovCj4+PiArICAgIGR3X21pcGlfZHNpX3NldF9tb2RlKGRzaSwgMCk7Cj4+PiAr Cj4+PiArICAgIC8qCj4+PiArICAgICAqIFRPRE8gT25seSB3YXkgZm91bmQgdG8gY2FsbCBwYW5l bC1icmlkZ2UgZGlzYWJsZSAmIHBhbmVsCj4+PiB1bnByZXBhcmUKPj4+ICsgICAgICogYmVmb3Jl IHRoZSBkc2kgImZpbmFsIiBkaXNhYmxlLi4uIGNhbiB3ZSBkbyBiZXR0ZXI/Cj4+Cj4+IEkgYWdy ZWUsIHRoaXMgaXMgYSBwcm9ibGVtLiBNb3JlIGJlbG93Lgo+IAo+IFNhbWUgcmVtYXJrIGhlcmUs IEkgZm9yZ290ICJwb3N0XyIgaW4gdGhlIGFib3ZlIGNvbW1lbnQuCj4gCj4+Cj4+PiArICAgICAq Lwo+Pj4gKyAgICBkcm1fYnJpZGdlX3Bvc3RfZGlzYWJsZShkc2ktPnBhbmVsX2JyaWRnZSk7Cj4+ PiArCj4+Cj4+IEknbSBndWVzc2luZyBvdXIgZGlzcGxheSBjaGFpbiBpcyBzb21ldGhpbmcgbGlr ZToKPj4KPj4gS01TX2VuY29kZXIgLT4gRFdfRFNJX2JyaWRnZSAtPiBQYW5lbF9icmlkZ2UgLT4g UGFuZWwKPj4KPj4gVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBkaXNhYmxlIG9wcyBhcmUgY2FsbGVk Ogo+Pgo+PiBkcm1fYnJpZGdlX2Rpc2FibGUoUGFuZWxfYnJpZGdlKQo+PiAgICAgLSBkcm1fcGFu ZWxfZGlzYWJsZShQYW5lbCkKPj4gZHJtX2JyaWRnZV9kaXNhYmxlKERXX0RTSV9icmlkZ2UpCj4+ IGVuY29kZXJfZnVuY3MtPnByZXBhcmUoS01TX2VuY29kZXIpCj4+IGRybV9icmlkZ2VfcG9zdF9k aXNhYmxlKERXX0RTSV9icmlkZ2UpCj4+IGRybV9icmlkZ2VfcG9zdF9kaXNhYmxlKFBhbmVsX2Jy aWRnZSkKPj4gICAgIC0gZHJtX3BhbmVsX3VucHJlcGFyZShQYW5lbCkKPj4KPiAKPiAxMDAlLXBl cmZlY3Qgc2VxdWVuY2UsIEkgZG8gYWdyZWUgd2l0aCB5b3UgOiApCj4gCj4+IEFzc3VtaW5nIHRo YXQgb25seSBkcm1fcGFuZWxfdW5wcmVwYXJlKCkgcmVxdWlyZXMgc2VuZGluZyBEU0kgY29tbWFu ZHMsCj4gCj4gV2VsbCwgaXQgcmVhbGx5IGRlcGVuZHMgb24gRFNJIHBhbmVscy4gRm9yIGluc3Rh bmNlLCBwYW5lbCBkcml2ZXJzIGNhbgo+IHNlbmQgRENTL0dlbmVyaWMgRFNJIGNvbW1hbmRzOgo+ ICogaW4gZHJtX3BhbmVsX2Rpc2FibGUoKTogdGhlbiB0aGVzZSBjb21tYW5kcyBhcmUgc2VudCBk dXJpbmcgYmxhbmtpbmdzLAo+IG1hbnkgbGNkcyBhbGxvdyB0aGF0LiBUaGlzIGlzIHRoZSBwcm9w ZXIgcGxhY2UgZm9yIGJhY2tsaWdodCB0aHJvdWdoIERTSQo+IChkaW1taW5nIG9yIG9mZiksIGZv ciBzbGVlcCBtb2RlIERDUyBjb21tYW5kcy4uLgo+IAo+IG9yL2FuZAo+IAo+ICogaW4gZHJtX3Bh bmVsX3VucHJlcGFyZSgpOiB0aGVuIHRoZXNlIGNvbW1hbmRzIGFyZSBzZW50IGR1cmluZyBhCj4g ImNvbW1hbmQgbW9kZSIgcGhhc2UuIFRoaXMgaXMgdGhlIHByb3BlciBwbGFjZSBmb3IgbWFueSB0 aGluZ3MsIGZyb20KPiBiYWNrbGlnaHQgb2ZmIHRocm91Z2ggRFNJLCBzbGVlcCBtb2RlIERDUyBj b21tYW5kcy4uLiB0byBhIGZ1bGwgcG93ZXIKPiBvZmYgKHZvbHRhZ2UgcmVndWxhdG9ycyBhcmUg c3dpdGNoZWQgb2ZmKS4KPiAKPiAgIEZyb20gbXkgcG92LCBib3RoIGRybV9wYW5lbF9kaXNhYmxl KCkgJiBkcm1fcGFuZWxfdW5wcmVwYXJlKCkgbWF5IHNlbmQKPiBEU0kgY29tbWFuZHMuLi4gYnV0 IGl0IGlzIG5vdCBhIHJlYWwgcHJvYmxlbSBpbiBmYWN0IGFzIERTSSBjb21tYW5kcyBjYW4KPiBi ZSBzZW50IHRocm91Z2ggYmxhbmtpbmdzIGluIHZpZGVvIG1vZGUgb3IgY2FuIGJlIHNlbnQgaW4g ImNvbW1hbmQgbW9kZSIuLi4KPiAKPj4geW91IGNvdWxkIGhhdmUKPj4gc3dpdGNoZWQgdG8gY29t bWFuZCBtb2RlIGluIERXX0RTSV9icmlkZ2UncyBkaXNhYmxlKCkgb3AsIGFuZCBkbyB0aGUKPj4g ImZpbmFsIiBEU0kgZGlzYWJsZQo+PiBpbiBEV19EU0lfYnJpZGdlJ3MgcG9zdF9kaXNhYmxlKCks IGJ1dCB0aGF0IHdvdWxkIHN0aWxsIHJlc3VsdCBpbgo+PiBkcm1fcGFuZWxfdW5wcmVwYXJlKCkK Pj4gYmVpbmcgY2FsbGVkIHdpdGggdGhlIERTSSBob3N0IGRlYWQuCj4+Cj4+IFRoZSBleGlzdGlu ZyBjYWxsIGNoYWluIG9mIGNvbnNlY3V0aXZlIGJyaWRnZXMgaXMgdGhlIG1vc3Qgc3ltbWV0cmlj Cj4+IG9uZSwgYW5kIHRoZSBvbmUKPj4gZXhwZWN0ZWQgdG8gd29yayBpbiBtb3N0IGNhc2VzLCBi dXQgaXQgY2xlYXJseSBkb2Vzbid0IHdvcmsgaW4geW91ciB1c2UKPj4gY2FzZS4KPj4KPj4gV2Ug aGF2ZSBhIGZldyBvcHRpb25zOgo+Pgo+PiAtIFVuZG8gdGhlIGRybS1wYW5lbC1icmlkZ2Ugc3R1 ZmYsIGFuZCBoYXZlIHRoZSBmcmVlZG9tIG9mIGNhbGxpbmcKPj4gZHJtX3BhbmVsIG9wcyBpbgo+ PiB3aGF0ZXZlciBvcmRlciB3ZSB3YW50Lgo+Pgo+PiAtIFB1dCBhIGJpZyBUT0RPL0hBQ0sgY29t bWVudCBoZXJlLCBzYXlpbmcgdGhhdCB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkCj4+IGluIHRoZSBk cm1fYnJpZGdlCj4+IGZyYW1ld29yayBhbmQgdGhlIEFQSSBuZWVkcyB0byBiZSB1cGRhdGVkIHRv IG1hbmFnZSBvdXIgb3duIGNhbGwgY2hhaW5zLgo+PiBBbHNvLAo+PiBpbnN0ZWFkIG9mIGNhbGxp bmcgImRybV9icmlkZ2VfcG9zdF9kaXNhYmxlKGRzaS0+cGFuZWxfYnJpZGdlKTsiCj4+IGV4cGxp Y2l0bHksIHdlCj4+IGNhbiBtYW51YWxseSBjYWxsIHBhbmVsX2JyaWRnZS0+cG9zdF9kaXNhYmxl KCkgb3AgZGlyZWN0bHkuIFRoaXMgYXZvaWRzCj4+IHVzIGRvaW5nCj4+IHRoaW5ncyByZWN1cnNp dmVseS4KPj4KPj4gV2Ugd291bGQgaW1wbGVtZW50IHRoZSBUT0RPIHRhc2sgaW4gZHJtX2JyaWRn ZXMgb25seSB3aGVuIHRoZXJlIGFyZSBtb3JlCj4+IHBlb3BsZQo+PiBkZXNwZXJhdGVseSBpbiB0 aGUgbmVlZCB0byBoYXZlIGN1c3RvbWl6YWJsZSBjYWxsIGNoYWlucyBvZiBicmlkZ2Ugb3BzCj4+ IGZvciBsb25nCj4+IGRpc3BsYXkgY2hhaW5zLCBzbyBJIGRvbid0IHNlZSBpdCBiZWluZyBpbXBs ZW1lbnRlZCBpbiB0aGUgbmVhciBmdXR1cmUsCj4+IGJ1dCBJIGRvbid0Cj4+IHRoaW5rIHRoZXJl IHNob3VsZCBiZSBhbnkgcHJvYmxlbSBrZWVwaW5nIHRoaXMgaGFjayBpbiB0aGUgZHcgZHNpIGRy aXZlcgo+PiBmb3Igbm93Lgo+Pgo+PiBXaGF0IGNob2ljZSBkbyB5b3UgcHJlZmVyPwo+IAo+IFdl bGwsIG5vdCBzbyBlYXN5IHRvIGRlY2lkZSB3aGF0IGNvdWxkIGJlIHRoZSBiZXN0IHNvbHV0aW9u Li4uCj4gCj4gRm9yIHRoZSB0aW1lIGJlaW5nLCBJIHRoaW5rIEkgcHJlZmVyIGtlZXBpbmcgdGhl IHBhbmVsIGJyaWRnZSBwcm9wb3NhbAo+ICh0aGUgdjQgb25lKSwgZm9yIHNldmVyYWwgcmVhc29u cyBpbiBmYWN0Ogo+IAo+ICogSXQgc2F2ZXMgIm1hbnkiIGxpbmVzIG9mIGNvZGUsIGFuZCBzdXBw b3J0aW5nICpib3RoKiBwYW5lbHMgJiBicmlkZ2VzCj4gKGhvbW9nZW5lb3VzIGFwcHJvYWNoKS4K PiAKPiAqIEl0IGhlbHBzIHJlZHVjaW5nIGV4cGxpY2l0IGNhbGxzIGxpa2UgZHJtX3BhbmVsXygp IG9yIGRybV9icmlkZ2VfKCkKPiBsZXR0aW5nIHRoZSBkcm0gZnJhbWV3b3JrIGRvaW5nIGl0cyBq b2IgOi0pCj4gCj4gKiBJdCBpcyBub3QgYW4gaXNzdWUgdG8gaGF2ZSBhIFRPRE8vSEFDSyBmb3Ig dGhlIG9ubHkgcmVtYWluaW5nIGZ1bmN0aW9uCj4gY2FsbCAoZHJtX2JyaWRnZV9wb3N0X2Rpc2Fi bGUoKSBoZXJlKS4gSSBtZWFuIG1hbnkgb3RoZXJzIGRyaXZlcnMgY2FsbHMKPiBkaXJlY3RseSB0 aGVzZSBwYW5lbCAmIGJyaWRnZSBmdW5jdGlvbnMgYW5kIHRoaXMgZm9yY2VzIHBhbmVsIGRyaXZl cnMgdG8KPiBoYXZlIGluIG1hbnkgcGxhY2VzIGluIHRoZWlyIGNvZGUgImlmIChlbmFibGVkKSBy ZXR1cm47IiBvciAiaWYKPiAocHJlcGFyZWQpIHJldHVybjsiIGFuZCB3ZSBzaG91bGQgd29yayBp biB0aGUgZnV0dXJlIHRvIGltcHJvdmUgdGhhdAo+IChpZS4gTGV0J3MgZHJtIGZyYW1ld29yayBk b2luZyBpdHMgam9iKS4KPiAKPiAqIEl0IGNvdmVycy9vZmZlcnMgdGhlIDMgaW1wb3J0YW50ICJo dyBkaXNhYmxlIiBwaGFzZXM6Cj4gCS0gcGFuZWwgc2VuZHMgRENTL0dlbmVyaWMgRFNJIGNvbW1h bmRzIGR1cmluZyBpdHMgYmxhbmtpbmdzIGluIGEgdmlkZW8KPiBtb2RlIHBoYXNlIChtb3N0IG9m IHRoZSB0aW1lcywgdGhlc2UgY29tbWFuZHMgYXJlIHNob3J0LCBmb3IgYmFja2xpZ2h0Cj4gdXBk YXRlcyBvciBzbGVlcCBmb3IgaW5zdGFuY2UuLi4pLCBpdCdzIGNvcnJlc3BvbmQgdG8gcGFuZWxf ZGlzYWJsZSgpLgo+IAktIHBhbmVsIHNlbmRzIERDUy9HZW5lcmljIERTSSBjb21tYW5kcyBpbiBh IGNvbW1hbmQgbW9kZSBwaGFzZSAoc2xlZXAsCj4gcG93ZXIgb2ZmLi4uKSwgaXQncyBjb3JyZXNw b25kIHRvIHBhbmVsX3VucHJlcGFyZSgpLgo+IAktIHRoZSBkc2kgSVAgaXMgc3RvcHBlZCBhZnRl ciB0aGUgMiBwcmV2aW91cyBwaGFzZXMuCj4gCj4gU28sIGZvciBhbGwgdGhlc2UgcmVhc29ucywg SSBwcmVmZXIgdGhlICJQdXQgYSBiaWcgVE9ETy9IQUNLIiBvcHRpb24gOikKClN1cmUuIEZvciB2 NSwgY291bGQgeW91IGNvbnNpZGVyIGNhbGxpbmcKcGFuZWxfYnJpZGdlLT5mdW5jcy0+cG9zdF9k aXNhYmxlKCkgb3AgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nCiJkcm1fYnJpZGdlX3Bvc3Rf ZGlzYWJsZShkc2ktPnBhbmVsX2JyaWRnZSk7Ij8gVGhlIGhhY2sgd291bGQgYmUgbW9yZSBsZWdp YmxlLAphbmQgd2UnZCBhdm9pZCB1bm5lY2Vzc2FyeSByZWN1cnNpdmUgY2hhaW5zLgoKVGhhbmtz LApBcmNoaXQKCj4gCj4gVGhhbmsgeW91LAo+IFBoaWxpcHBlCj4gCj4+Cj4+IEVyaWMsIERhbmll bCwKPj4KPj4gRnlpLCB0aGlzIGlzIGFub3RoZXIgY2FzZSB3aGVyZSB0aGUgcGFuZWwtYnJpZGdl IHN0dWZmIGRvZXNuJ3Qgd29yayBzbwo+PiB3ZWxsLiBOb3QKPj4gY3JpdGljaXppbmcgb3IgYW55 dGhpbmcsIGp1c3QgcG9pbnRpbmcgb3V0IDopCj4+Cj4+IEFyY2hpdAo+Pgo+Pgo+Pj4gKyAgICBk d19taXBpX2RzaV9kaXNhYmxlKGRzaSk7Cj4+PiArICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShk c2ktPnBjbGspOwo+Pj4gKyAgICBwbV9ydW50aW1lX3B1dChkc2ktPmRldik7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3ZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfc2V0KHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UsCj4+PiArICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKPj4+ICsgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1 c3RlZF9tb2RlKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBicmlk Z2VfdG9fZHNpKGJyaWRnZSk7Cj4+PiArICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9waHlf b3BzICpwaHlfb3BzID0gZHNpLT5wbGF0X2RhdGEtPnBoeV9vcHM7Cj4+PiArICAgIHZvaWQgKnBy aXZfZGF0YSA9IGRzaS0+cGxhdF9kYXRhLT5wcml2X2RhdGE7Cj4+PiArICAgIGludCByZXQ7Cj4+ PiArCj4+PiArICAgIGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBjbGspOwo+Pj4gKwo+Pj4gKyAg ICByZXQgPSBwaHlfb3BzLT5nZXRfbGFuZV9tYnBzKHByaXZfZGF0YSwgbW9kZSwgZHNpLT5tb2Rl X2ZsYWdzLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGRzaS0+bGFuZXMsIGRzaS0+Zm9ybWF0 LCAmZHNpLT5sYW5lX21icHMpOwo+Pj4gKyAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgRFJNX0RF QlVHX0RSSVZFUigiUGh5IGdldF9sYW5lX21icHMoKSBmYWlsZWRcbiIpOwo+Pj4gKwo+Pj4gKyAg ICBwbV9ydW50aW1lX2dldF9zeW5jKGRzaS0+ZGV2KTsKPj4+ICsgICAgZHdfbWlwaV9kc2lfaW5p dChkc2kpOwo+Pj4gKyAgICBkd19taXBpX2RzaV9kcGlfY29uZmlnKGRzaSwgbW9kZSk7Cj4+PiAr ICAgIGR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhkc2kpOwo+Pj4gKyAgICBkd19t aXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOwo+Pj4gKyAgICBkd19taXBpX2RzaV92aWRl b19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7Cj4+PiArICAgIGR3X21pcGlfZHNpX2NvbW1hbmRf bW9kZV9jb25maWcoZHNpKTsKPj4+ICsgICAgZHdfbWlwaV9kc2lfbGluZV90aW1lcl9jb25maWco ZHNpLCBtb2RlKTsKPj4+ICsgICAgZHdfbWlwaV9kc2lfdmVydGljYWxfdGltaW5nX2NvbmZpZyhk c2ksIG1vZGUpOwo+Pj4gKwo+Pj4gKyAgICBkd19taXBpX2RzaV9kcGh5X2luaXQoZHNpKTsKPj4+ ICsgICAgZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRzaSk7Cj4+PiArICAgIGR3X21p cGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOwo+Pj4gKwo+Pj4gKyAgICBkd19taXBp X2RzaV9jbGVhcl9lcnIoZHNpKTsKPj4+ICsKPj4+ICsgICAgcmV0ID0gcGh5X29wcy0+aW5pdChw cml2X2RhdGEpOwo+Pj4gKyAgICBpZiAocmV0KQo+Pj4gKyAgICAgICAgRFJNX0RFQlVHX0RSSVZF UigiUGh5IGluaXQoKSBmYWlsZWRcbiIpOwo+Pj4gKwo+Pj4gKyAgICBkd19taXBpX2RzaV9kcGh5 X2VuYWJsZShkc2kpOwo+Pj4gKwo+Pj4gKyAgICBkd19taXBpX2RzaV93YWl0X2Zvcl90d29fZnJh bWVzKG1vZGUpOwo+Pj4gKwo+Pj4gKyAgICAvKiBTd2l0Y2ggdG8gY21kIG1vZGUgZm9yIHBhbmVs LWJyaWRnZSBwcmVfZW5hYmxlICYgcGFuZWwgcHJlcGFyZSAqLwo+Pj4gKyAgICBkd19taXBpX2Rz aV9zZXRfbW9kZShkc2ksIDApOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBkd19taXBp X2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4+PiArewo+Pj4g KyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKPj4+ ICsKPj4+ICsgICAgLyogU3dpdGNoIHRvIHZpZGVvIG1vZGUgZm9yIHBhbmVsLWJyaWRnZSBlbmFi bGUgJiBwYW5lbCBlbmFibGUgKi8KPj4+ICsgICAgZHdfbWlwaV9kc2lfc2V0X21vZGUoZHNpLCBN SVBJX0RTSV9NT0RFX1ZJREVPKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGVudW0gZHJtX21v ZGVfc3RhdHVzCj4+PiArZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfdmFsaWQoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKPj4+ICsgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSAqbW9kZSkKPj4+ICt7Cj4+PiArICAgIHN0cnVjdCBkd19taXBpX2RzaSAqZHNp ID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOwo+Pj4gKyAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9k c2lfcGxhdF9kYXRhICpwZGF0YSA9IGRzaS0+cGxhdF9kYXRhOwo+Pj4gKyAgICBlbnVtIGRybV9t b2RlX3N0YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7Cj4+PiArCj4+PiArICAgIGlmIChwZGF0 YS0+bW9kZV92YWxpZCkKPj4+ICsgICAgICAgIG1vZGVfc3RhdHVzID0gcGRhdGEtPm1vZGVfdmFs aWQocGRhdGEtPnByaXZfZGF0YSwgbW9kZSk7Cj4+PiArCj4+PiArICAgIHJldHVybiBtb2RlX3N0 YXR1czsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBkd19taXBpX2RzaV9icmlkZ2VfYXR0 YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsKPj4+ICsKPj4+ICsgICAgaWYg KCFicmlkZ2UtPmVuY29kZXIpIHsKPj4+ICsgICAgICAgIERSTV9FUlJPUigiUGFyZW50IGVuY29k ZXIgb2JqZWN0IG5vdCBmb3VuZFxuIik7Cj4+PiArICAgICAgICByZXR1cm4gLUVOT0RFVjsKPj4+ ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICAvKiBTZXQgdGhlIGVuY29kZXIgdHlwZSBhcyBjYWxsZXIg ZG9lcyBub3Qga25vdyBpdCAqLwo+Pj4gKyAgICBicmlkZ2UtPmVuY29kZXItPmVuY29kZXJfdHlw ZSA9IERSTV9NT0RFX0VOQ09ERVJfRFNJOwo+Pj4gKwo+Pj4gKyAgICAvKiBBdHRhY2ggdGhlIHBh bmVsLWJyaWRnZSB0byB0aGUgZHNpIGJyaWRnZSAqLwo+Pj4gKyAgICByZXR1cm4gZHJtX2JyaWRn ZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2JyaWRnZSwKPj4+IGJyaWRnZSk7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkd19taXBp X2RzaV9icmlkZ2VfZnVuY3MgPSB7Cj4+PiArICAgIC5tb2RlX3NldCAgICAgPSBkd19taXBpX2Rz aV9icmlkZ2VfbW9kZV9zZXQsCj4+PiArICAgIC5lbmFibGUgICAgICAgICAgPSBkd19taXBpX2Rz aV9icmlkZ2VfZW5hYmxlLAo+Pj4gKyAgICAucG9zdF9kaXNhYmxlID0gZHdfbWlwaV9kc2lfYnJp ZGdlX3Bvc3RfZGlzYWJsZSwKPj4+ICsgICAgLm1vZGVfdmFsaWQgICA9IGR3X21pcGlfZHNpX2Jy aWRnZV9tb2RlX3ZhbGlkLAo+Pj4gKyAgICAuYXR0YWNoICAgICAgICAgID0gZHdfbWlwaV9kc2lf YnJpZGdlX2F0dGFjaCwKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0YXRpYyBzdHJ1Y3QgZHdfbWlwaV9k c2kgKgo+Pj4gK19fZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl diwKPj4+ICsgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpw bGF0X2RhdGEpCj4+PiArewo+Pj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2 Owo+Pj4gKyAgICBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqYXBiX3JzdDsKPj4+ICsgICAgc3RydWN0 IGR3X21pcGlfZHNpICpkc2k7Cj4+PiArICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwo+Pj4gKyAg ICBpbnQgcmV0Owo+Pj4gKwo+Pj4gKyAgICBkc2kgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KmRzaSksIEdGUF9LRVJORUwpOwo+Pj4gKyAgICBpZiAoIWRzaSkKPj4+ICsgICAgICAgIHJldHVy biBFUlJfUFRSKC1FTk9NRU0pOwo+Pj4gKwo+Pj4gKyAgICBkc2ktPmRldiA9IGRldjsKPj4+ICsg ICAgZHNpLT5wbGF0X2RhdGEgPSBwbGF0X2RhdGE7Cj4+PiArCj4+PiArICAgIGlmICghcGxhdF9k YXRhLT5waHlfb3BzLT5pbml0IHx8Cj4+PiAhcGxhdF9kYXRhLT5waHlfb3BzLT5nZXRfbGFuZV9t YnBzKSB7Cj4+PiArICAgICAgICBEUk1fRVJST1IoIlBoeSBub3QgcHJvcGVybHkgY29uZmlndXJl ZFxuIik7Cj4+PiArICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPj4+ICsgICAgfQo+ Pj4gKwo+Pj4gKyAgICBpZiAoIXBsYXRfZGF0YS0+YmFzZSkgewo+Pj4gKyAgICAgICAgcmVzID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPj4+ICsgICAg ICAgIGlmICghcmVzKQo+Pj4gKyAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwo+ Pj4gKwo+Pj4gKyAgICAgICAgZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKPj4+ICsgICAgICAgIGlmIChJU19FUlIoZHNpLT5iYXNlKSkKPj4+ICsgICAgICAgICAg ICByZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPj4+ICsKPj4+ICsgICAgfSBlbHNlIHsKPj4+ICsg ICAgICAgIGRzaS0+YmFzZSA9IHBsYXRfZGF0YS0+YmFzZTsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4g KyAgICBkc2ktPnBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsayIpOwo+Pj4gKyAgICBpZiAo SVNfRVJSKGRzaS0+cGNsaykpIHsKPj4+ICsgICAgICAgIHJldCA9IFBUUl9FUlIoZHNpLT5wY2xr KTsKPj4+ICsgICAgICAgIGRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGdldCBwY2xrOiAlZFxuIiwg cmV0KTsKPj4+ICsgICAgICAgIHJldHVybiBFUlJfUFRSKHJldCk7Cj4+PiArICAgIH0KPj4+ICsK Pj4+ICsgICAgLyoKPj4+ICsgICAgICogTm90ZSB0aGF0IHRoZSByZXNldCB3YXMgbm90IGRlZmlu ZWQgaW4gdGhlIGluaXRpYWwgZGV2aWNlCj4+PiB0cmVlLCBzbwo+Pj4gKyAgICAgKiB3ZSBoYXZl IHRvIGJlIHByZXBhcmVkIGZvciBpdCBub3QgYmVpbmcgZm91bmQuCj4+PiArICAgICAqLwo+Pj4g KyAgICBhcGJfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dldChkZXYsICJhcGIiKTsKPj4+ICsg ICAgaWYgKElTX0VSUihhcGJfcnN0KSkgewo+Pj4gKyAgICAgICAgcmV0ID0gUFRSX0VSUihhcGJf cnN0KTsKPj4+ICsgICAgICAgIGlmIChyZXQgPT0gLUVOT0VOVCkgewo+Pj4gKyAgICAgICAgICAg IGFwYl9yc3QgPSBOVUxMOwo+Pj4gKyAgICAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAgICBk ZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcmVzZXQgY29udHJvbDogJWRcbiIsIHJldCk7Cj4+ PiArICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+ICsgICAgICAgIH0KPj4+ICsg ICAgfQo+Pj4gKwo+Pj4gKyAgICBpZiAoYXBiX3JzdCkgewo+Pj4gKyAgICAgICAgcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsayk7Cj4+PiArICAgICAgICBpZiAocmV0KSB7Cj4+PiAr ICAgICAgICAgICAgZGV2X2VycihkZXYsICIlczogRmFpbGVkIHRvIGVuYWJsZSBwY2xrXG4iLCBf X2Z1bmNfXyk7Cj4+PiArICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+ICsgICAg ICAgIH0KPj4+ICsKPj4+ICsgICAgICAgIHJlc2V0X2NvbnRyb2xfYXNzZXJ0KGFwYl9yc3QpOwo+ Pj4gKyAgICAgICAgdXNsZWVwX3JhbmdlKDEwLCAyMCk7Cj4+PiArICAgICAgICByZXNldF9jb250 cm9sX2RlYXNzZXJ0KGFwYl9yc3QpOwo+Pj4gKwo+Pj4gKyAgICAgICAgY2xrX2Rpc2FibGVfdW5w cmVwYXJlKGRzaS0+cGNsayk7Cj4+PiArICAgIH0KPj4+ICsKPj4+ICsgICAgcG1fcnVudGltZV9l bmFibGUoZGV2KTsKPj4+ICsKPj4+ICsgICAgZHNpLT5kc2lfaG9zdC5vcHMgPSAmZHdfbWlwaV9k c2lfaG9zdF9vcHM7Cj4+PiArICAgIGRzaS0+ZHNpX2hvc3QuZGV2ID0gZGV2Owo+Pj4gKyAgICBy ZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsKPj4+ICsgICAgaWYg KHJldCkgewo+Pj4gKyAgICAgICAgZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTUlQ SSBob3N0OiAlZFxuIiwgcmV0KTsKPj4+ICsgICAgICAgIHJldHVybiBFUlJfUFRSKHJldCk7Cj4+ PiArICAgIH0KPj4+ICsKPj4+ICsgICAgZHNpLT5icmlkZ2UuZHJpdmVyX3ByaXZhdGUgPSBkc2k7 Cj4+PiArICAgIGRzaS0+YnJpZGdlLmZ1bmNzID0gJmR3X21pcGlfZHNpX2JyaWRnZV9mdW5jczsK Pj4+ICsjaWZkZWYgQ09ORklHX09GCj4+PiArICAgIGRzaS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2 LT5kZXYub2Zfbm9kZTsKPj4+ICsjZW5kaWYKPj4+ICsKPj4+ICsgICAgZGV2X3NldF9kcnZkYXRh KGRldiwgZHNpKTsKPj4+ICsKPj4+ICsgICAgcmV0dXJuIGRzaTsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIHZvaWQgX19kd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kp Cj4+PiArewo+Pj4gKyAgICBwbV9ydW50aW1lX2Rpc2FibGUoZHNpLT5kZXYpOwo+Pj4gK30KPj4+ ICsKPj4+ICsvKgo+Pj4gKyAqIFByb2JlL3JlbW92ZSBBUEksIHVzZWQgZnJvbSBwbGF0Zm9ybXMg YmFzZWQgb24gdGhlIERSTSBicmlkZ2UgQVBJLgo+Pj4gKyAqLwo+Pj4gK2ludCBkd19taXBpX2Rz aV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAo+Pj4gKyAgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+Pj4gK3sKPj4+ ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2k7Cj4+PiArCj4+PiArICAgIGRzaSA9IF9fZHdf bWlwaV9kc2lfcHJvYmUocGRldiwgcGxhdF9kYXRhKTsKPj4+ICsgICAgaWYgKElTX0VSUihkc2kp KQo+Pj4gKyAgICAgICAgcmV0dXJuIFBUUl9FUlIoZHNpKTsKPj4+ICsKPj4+ICsgICAgcmV0dXJu IDA7Cj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGR3X21pcGlfZHNpX3Byb2JlKTsKPj4+ ICsKPj4+ICt2b2lkIGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKPj4+ICsKPj4+ICsgICAgbWlwaV9kc2lfaG9zdF91bnJlZ2lzdGVy KCZkc2ktPmRzaV9ob3N0KTsKPj4+ICsKPj4+ICsgICAgX19kd19taXBpX2RzaV9yZW1vdmUoZHNp KTsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfcmVtb3ZlKTsKPj4+ ICsKPj4+ICsvKgo+Pj4gKyAqIEJpbmQvdW5iaW5kIEFQSSwgdXNlZCBmcm9tIHBsYXRmb3JtcyBi YXNlZCBvbiB0aGUgY29tcG9uZW50Cj4+PiBmcmFtZXdvcmsuCj4+PiArICovCj4+PiAraW50IGR3 X21pcGlfZHNpX2JpbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGRybV9l bmNvZGVyCj4+PiAqZW5jb2RlciwKPj4+ICsgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGR3X21p cGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+Pj4gK3sKPj4+ICsgICAgc3RydWN0IGR3X21p cGlfZHNpICpkc2k7Cj4+PiArICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgIGRzaSA9IF9fZHdf bWlwaV9kc2lfcHJvYmUocGRldiwgcGxhdF9kYXRhKTsKPj4+ICsgICAgaWYgKElTX0VSUihkc2kp KQo+Pj4gKyAgICAgICAgcmV0dXJuIFBUUl9FUlIoZHNpKTsKPj4+ICsKPj4+ICsgICAgcmV0ID0g ZHJtX2JyaWRnZV9hdHRhY2goZW5jb2RlciwgJmRzaS0+YnJpZGdlLCBOVUxMKTsKPj4+ICsgICAg aWYgKHJldCkgewo+Pj4gKyAgICAgICAgZHdfbWlwaV9kc2lfcmVtb3ZlKHBkZXYpOwo+Pj4gKyAg ICAgICAgRFJNX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBicmlkZ2Ugd2l0aCBkcm1cbiIp Owo+Pj4gKyAgICAgICAgcmV0dXJuIHJldDsKPj4+ICsgICAgfQo+Pj4gKwo+Pj4gKyAgICByZXR1 cm4gMDsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfYmluZCk7Cj4+ PiArCj4+PiArdm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4g K3sKPj4+ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2 KTsKPj4+ICsKPj4+ICsgICAgX19kd19taXBpX2RzaV9yZW1vdmUoZHNpKTsKPj4+ICt9Cj4+PiAr RVhQT1JUX1NZTUJPTF9HUEwoZHdfbWlwaV9kc2lfdW5iaW5kKTsKPj4+ICsKPj4+ICtNT0RVTEVf QVVUSE9SKCJDaHJpcyBaaG9uZyA8enl3QHJvY2stY2hpcHMuY29tPiIpOwo+Pj4gK01PRFVMRV9B VVRIT1IoIlBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Iik7Cj4+PiArTU9E VUxFX0RFU0NSSVBUSU9OKCJEVyBNSVBJIERTSSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIik7Cj4+ PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+Pj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06ZHct bWlwaS1kc2kiKTsKPj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9k c2kuaAo+Pj4gYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaAo+Pj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAuLjliMzBmZWMKPj4+IC0tLSAvZGV2L251bGwK Pj4+ICsrKyBiL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oCj4+PiBAQCAtMCwwICsx LDM5IEBACj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQgKEMpIFNUTWljcm9lbGVjdHJvbmljcyBT QSAyMDE3Cj4+PiArICoKPj4+ICsgKiBBdXRob3JzOiBQaGlsaXBwZSBDb3JudSA8cGhpbGlwcGUu Y29ybnVAc3QuY29tPgo+Pj4gKyAqICAgICAgICAgIFlhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZl cnRyZUBzdC5jb20+Cj4+PiArICoKPj4+ICsgKiBMaWNlbnNlIHRlcm1zOiAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpZm5k ZWYgX19EV19NSVBJX0RTSV9fCj4+PiArI2RlZmluZSBfX0RXX01JUElfRFNJX18KPj4+ICsKPj4+ ICtzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyB7Cj4+PiArICAgIGludCAoKmluaXQpKHZvaWQg KnByaXZfZGF0YSk7Cj4+PiArICAgIGludCAoKmdldF9sYW5lX21icHMpKHZvaWQgKnByaXZfZGF0 YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4+PiArICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIG1vZGVfZmxhZ3MsIHUzMiBsYW5lcywgdTMyIGZvcm1hdCwKPj4+ICsgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGFuZV9tYnBzKTsKPj4+ICt9Owo+Pj4gKwo+Pj4g K3N0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgewo+Pj4gKyAgICB2b2lkIF9faW9tZW0gKmJh c2U7Cj4+PiArICAgIHVuc2lnbmVkIGludCBtYXhfZGF0YV9sYW5lczsKPj4+ICsKPj4+ICsgICAg ZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKSh2b2lkICpwcml2X2RhdGEsCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSk7Cj4+PiArCj4+PiArICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9waHlfb3BzICpwaHlf b3BzOwo+Pj4gKwo+Pj4gKyAgICB2b2lkICpwcml2X2RhdGE7Cj4+PiArfTsKPj4+ICsKPj4+ICtp bnQgZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKPj4+ICsg ICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgKnBsYXRfZGF0 YSk7Cj4+PiArdm9pZCBkd19taXBpX2RzaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldik7Cj4+PiAraW50IGR3X21pcGlfZHNpX2JpbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldiwgc3RydWN0IGRybV9lbmNvZGVyCj4+PiAqZW5jb2RlciwKPj4+ICsgICAgICAgICAgICAg Y29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKTsKPj4+ICt2b2lk IGR3X21pcGlfZHNpX3VuYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+Pj4gKwo+Pj4gKyNlbmRp ZiAvKiBfX0RXX01JUElfRFNJX18gKi8KPj4+Cj4+Cj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAo+ IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo+IAoKLS0gClF1YWxj b21tIElubm92YXRpb24gQ2VudGVyLCBJbmMuIGlzIGEgbWVtYmVyIG9mIENvZGUgQXVyb3JhIEZv cnVtLAphIExpbnV4IEZvdW5kYXRpb24gQ29sbGFib3JhdGl2ZSBQcm9qZWN0Cl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=