From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: Re: [PATCH v5 4/7] drm/bridge/synopsys: Add MIPI DSI host controller bridge Date: Mon, 17 Jul 2017 07:54:31 +0000 Message-ID: References: <1499071287-10414-1-git-send-email-philippe.cornu@st.com> <1499071287-10414-5-git-send-email-philippe.cornu@st.com> <0145b068-c28e-3664-86ae-0561c1da8eb5@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id D39F36E0A0 for ; Mon, 17 Jul 2017 07:59:00 +0000 (UTC) In-Reply-To: <0145b068-c28e-3664-86ae-0561c1da8eb5@codeaurora.org> Content-Language: en-US Content-ID: <93FC849010A8F547931C1A16A9B08FB1@st.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 , 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" , "dri-devel@lists.freedesktop.org" , Fabien DESSENNE , Ludovic BARRE , Mickael REULIER , Vincent ABRIOU , Gabriel FERNANDEZ , "linux-arm-kernel@lists.infradead.org" List-Id: dri-devel@lists.freedesktop.org DQoNCk9uIDA3LzEyLzIwMTcgMDg6MDUgQU0sIEFyY2hpdCBUYW5lamEgd3JvdGU6DQo+IA0KPiAN Cj4gT24gMDcvMDMvMjAxNyAwMjoxMSBQTSwgUGhpbGlwcGUgQ09STlUgd3JvdGU6DQo+PiBBZGQg YSBTeW5vcHN5cyBEZXNpZ253YXJlIE1JUEkgRFNJIGhvc3QgRFJNIGJyaWRnZSBkcml2ZXIsIGJh c2VkIG9uIHRoZQ0KPj4gUm9ja2NoaXAgdmVyc2lvbiBmcm9tIHJvY2tjaGlwL2R3LW1pcGktZHNp LmMgd2l0aCBwaHkgJiBicmlkZ2UgQVBJcy4NCj4+DQo+IA0KPiBUaGUgcGF0Y2ggbG9va3MgZ29v ZCBub3cuIE9uZSB0aGluZyB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQgaXMgdG8gbWFrZQ0KPiBk cm1fYnJpZGdlX2FkZCgpIG5vdCByZXR1cm4gYW55dGhpbmcuDQoNCkhpIEFyY2hpdCBhbmQgbWFu eSB0aGFua3MgZm9yIHlvdXIgcmV2aWV3Lg0KSSBoYXZlIGp1c3Qgc2VudCBhIHY2IHZlcnNpb24g YWRkaW5nIHRoZSBkcm1fYnJpZGdlX2FkZCgpIHNtYWxsIGZpeC4NCg0KPiANCj4gVGhlIGxhdGVy IHBhdGNoZXMgaW4gdGhlIHNlcmllcyB3b3VsZCBiZSBkZXBlbmRlbnQgb24gdGhpcyBwYXRjaCwg cmlnaHQ/DQp5ZXMNCg0KPiBTaW5jZSB0aGUgU1QgcGF0Y2hlcyBnbyB2aWEgZHJtLW1pc2MgdG9v LCB3ZSBjb3VsZCBlaXRoZXIgcHVzaCBhbGwgdGhlc2UNCj4gdG9nZXRoZXIsIG9yIEkgY291bGQg cHVzaCB0aGUgYnJpZGdlIGRyaXZlciB0byBkcm0tbWlzYy1uZXh0LCBhbmQgdGhlIFNUDQo+IHBh dGNoZXMgY2FuIGJlIHB1c2hlZCBhZnRlci4gQW55IHByZWZlcmVuY2U/IElmIG5vdCwgSSdsbCBk byB0aGUgbGF0dGVyLg0KPiANCj4gQXJjaGl0DQo+IA0KVGhlIHY2IHZlcnNpb24gaGFzIGJlZW4g dGVzdGVkIG9uIHRvZGF5IGRybS1taXNjLW5leHQgYnJhbmNoIChmZXcgDQptaW51dGVzIGFnbyku IFlvdSBjYW4gcHVzaCB0aGUgZW50aXJlIHNlcmllIGFzIGl0IGlzIG1heWJlIHRoZSBtb3N0IA0K c2ltcGxlIHNvbHV0aW9uLiBPciB5b3UgY2FuIHB1c2ggInVwIHRvIHRoZSBzeW5vcHN5cyBwYXJ0 IiBhbmQgQmVuamFtaW4gDQomIEkgd2lsbCBwdXNoIHRoZSByZW1haW5pbmcgcGFydC4gSW4gZmFj dCwgaXQgaXMgdXAgdG8geW91LCBzaW1wbHkgdGVsbCANCnVzIHlvdXIgcHJlZmVycmVkIGFwcHJv YWNoLg0KDQpPbmNlIGFnYWluLCBtYW55IHRoYW5rcywNClBoaWxpcHBlDQoNCg0KPj4gU2lnbmVk LW9mZi1ieTogUGhpbGlwcGUgQ09STlUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4NCj4+IC0tLQ0K Pj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25maWcgICAgICAgfCAgIDYg Kw0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlICAgICAgfCAg IDIgKw0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LW1pcGktZHNpLmMg fCA5NzkgDQo+PiArKysrKysrKysrKysrKysrKysrKysrKysrKw0KPj4gICBpbmNsdWRlL2RybS9i cmlkZ2UvZHdfbWlwaV9kc2kuaCAgICAgICAgICAgICAgfCAgMzkgKw0KPj4gICA0IGZpbGVzIGNo YW5nZWQsIDEwMjYgaW5zZXJ0aW9ucygrKQ0KPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9kdy1taXBpLWRzaS5jDQo+PiAgIGNyZWF0ZSBtb2Rl IDEwMDY0NCBpbmNsdWRlL2RybS9icmlkZ2UvZHdfbWlwaV9kc2kuaA0KPj4NCj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL0tjb25maWcgDQo+PiBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZw0KPj4gaW5kZXggNDBkMjgyNy4uZjAw ZWUyNiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2Nv bmZpZw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnDQo+ PiBAQCAtMjEsMyArMjEsOSBAQCBjb25maWcgRFJNX0RXX0hETUlfSTJTX0FVRElPDQo+PiAgICAg ICBoZWxwDQo+PiAgICAgICAgIFN1cHBvcnQgdGhlIEkyUyBBdWRpbyBpbnRlcmZhY2Ugd2hpY2gg aXMgcGFydCBvZiB0aGUgU3lub3BzeXMNCj4+ICAgICAgICAgRGVzaWdud2FyZSBIRE1JIGJsb2Nr Lg0KPj4gKw0KPj4gK2NvbmZpZyBEUk1fRFdfTUlQSV9EU0kNCj4+ICsgICAgdHJpc3RhdGUNCj4+ ICsgICAgc2VsZWN0IERSTV9LTVNfSEVMUEVSDQo+PiArICAgIHNlbGVjdCBEUk1fTUlQSV9EU0kN Cj4+ICsgICAgc2VsZWN0IERSTV9QQU5FTF9CUklER0UNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlIA0KPj4gYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlDQo+PiBpbmRleCAxN2FhN2E2Li41ZjU3ZDM2IDEwMDY0 NA0KPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQ0KPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQ0KPj4gQEAgLTMs MyArMyw1IEBADQo+PiAgIG9iai0kKENPTkZJR19EUk1fRFdfSERNSSkgKz0gZHctaGRtaS5vDQo+ PiAgIG9iai0kKENPTkZJR19EUk1fRFdfSERNSV9BSEJfQVVESU8pICs9IGR3LWhkbWktYWhiLWF1 ZGlvLm8NCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9EV19IRE1JX0kyU19BVURJTykgKz0gZHctaGRt aS1pMnMtYXVkaW8ubw0KPj4gKw0KPj4gK29iai0kKENPTkZJR19EUk1fRFdfTUlQSV9EU0kpICs9 IGR3LW1pcGktZHNpLm8NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5 bm9wc3lzL2R3LW1pcGktZHNpLmMgDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3Bz eXMvZHctbWlwaS1kc2kuYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAw MDAuLjQwNjAwMGUNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9i cmlkZ2Uvc3lub3BzeXMvZHctbWlwaS1kc2kuYw0KPj4gQEAgLTAsMCArMSw5NzkgQEANCj4+ICsv Kg0KPj4gKyAqIENvcHlyaWdodCAoYykgMjAxNiwgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNz IENvLiwgTHRkDQo+PiArICogQ29weXJpZ2h0IChDKSBTVE1pY3JvZWxlY3Ryb25pY3MgU0EgMjAx Nw0KPj4gKyAqDQo+PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KPj4gKyAq IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExp Y2Vuc2UsIG9yDQo+PiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4+ ICsgKg0KPj4gKyAqIE1vZGlmaWVkIGJ5IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBz dC5jb20+DQo+PiArICogVGhpcyBnZW5lcmljIFN5bm9wc3lzIERlc2lnbldhcmUgTUlQSSBEU0kg aG9zdCBkcml2ZXIgaXMgYmFzZWQgb24gdGhlDQo+PiArICogUm9ja2NoaXAgdmVyc2lvbiBmcm9t IHJvY2tjaGlwL2R3LW1pcGktZHNpLmMgd2l0aCBwaHkgJiBicmlkZ2UgQVBJcy4NCj4+ICsgKi8N Cj4+ICsNCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L2Nv bXBvbmVudC5oPg0KPj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4NCj4+ICsjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPj4gKyNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+PiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+ DQo+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+DQo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPg0KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5oPg0KPj4gKyNpbmNsdWRl IDxkcm0vZHJtX2NydGMuaD4NCj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPg0K Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+DQo+PiArI2luY2x1ZGUgPGRybS9kcm1f b2YuaD4NCj4+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oPg0KPj4gKyNpbmNs dWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4NCj4+ICsNCj4+ICsjZGVmaW5lIERTSV9WRVJTSU9O ICAgICAgICAgICAgMHgwMA0KPj4gKyNkZWZpbmUgRFNJX1BXUl9VUCAgICAgICAgICAgIDB4MDQN Cj4+ICsjZGVmaW5lIFJFU0VUICAgICAgICAgICAgICAgIDANCj4+ICsjZGVmaW5lIFBPV0VSVVAg ICAgICAgICAgICAgICAgQklUKDApDQo+PiArDQo+PiArI2RlZmluZSBEU0lfQ0xLTUdSX0NGRyAg ICAgICAgICAgIDB4MDgNCj4+ICsjZGVmaW5lIFRPX0NMS19ESVZJRFNJT04oZGl2KSAgICAgICAg KCgoZGl2KSAmIDB4ZmYpIDw8IDgpDQo+PiArI2RlZmluZSBUWF9FU0NfQ0xLX0RJVklEU0lPTihk aXYpICAgICgoKGRpdikgJiAweGZmKSA8PCAwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgRFNJX0RQSV9W Q0lEICAgICAgICAgICAgMHgwYw0KPj4gKyNkZWZpbmUgRFBJX1ZJRCh2aWQpICAgICAgICAgICAg KCgodmlkKSAmIDB4MykgPDwgMCkNCj4+ICsNCj4+ICsjZGVmaW5lIERTSV9EUElfQ09MT1JfQ09E SU5HICAgICAgICAweDEwDQo+PiArI2RlZmluZSBFTjE4X0xPT1NFTFkgICAgICAgICAgICBCSVQo OCkNCj4+ICsjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMSAgICAweDANCj4+ICsjZGVm aW5lIERQSV9DT0xPUl9DT0RJTkdfMTZCSVRfMiAgICAweDENCj4+ICsjZGVmaW5lIERQSV9DT0xP Ul9DT0RJTkdfMTZCSVRfMyAgICAweDINCj4+ICsjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThC SVRfMSAgICAweDMNCj4+ICsjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMiAgICAweDQN Cj4+ICsjZGVmaW5lIERQSV9DT0xPUl9DT0RJTkdfMjRCSVQgICAgICAgIDB4NQ0KPj4gKw0KPj4g KyNkZWZpbmUgRFNJX0RQSV9DRkdfUE9MICAgICAgICAgICAgMHgxNA0KPj4gKyNkZWZpbmUgQ09M T1JNX0FDVElWRV9MT1cgICAgICAgIEJJVCg0KQ0KPj4gKyNkZWZpbmUgU0hVVERfQUNUSVZFX0xP VyAgICAgICAgQklUKDMpDQo+PiArI2RlZmluZSBIU1lOQ19BQ1RJVkVfTE9XICAgICAgICBCSVQo MikNCj4+ICsjZGVmaW5lIFZTWU5DX0FDVElWRV9MT1cgICAgICAgIEJJVCgxKQ0KPj4gKyNkZWZp bmUgREFUQUVOX0FDVElWRV9MT1cgICAgICAgIEJJVCgwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgRFNJ X0RQSV9MUF9DTURfVElNICAgICAgICAweDE4DQo+PiArI2RlZmluZSBPVVRWQUNUX0xQQ01EX1RJ TUUocCkgICAgICAgICgoKHApICYgMHhmZikgPDwgMTYpDQo+PiArI2RlZmluZSBJTlZBQ1RfTFBD TURfVElNRShwKSAgICAgICAgKChwKSAmIDB4ZmYpDQo+PiArDQo+PiArI2RlZmluZSBEU0lfREJJ X0NGRyAgICAgICAgICAgIDB4MjANCj4+ICsjZGVmaW5lIERTSV9EQklfQ01EU0laRSAgICAgICAg ICAgIDB4MjgNCj4+ICsNCj4+ICsjZGVmaW5lIERTSV9QQ0tIRExfQ0ZHICAgICAgICAgICAgMHgy Yw0KPj4gKyNkZWZpbmUgRU5fQ1JDX1JYICAgICAgICAgICAgQklUKDQpDQo+PiArI2RlZmluZSBF Tl9FQ0NfUlggICAgICAgICAgICBCSVQoMykNCj4+ICsjZGVmaW5lIEVOX0JUQSAgICAgICAgICAg ICAgICBCSVQoMikNCj4+ICsjZGVmaW5lIEVOX0VPVFBfUlggICAgICAgICAgICBCSVQoMSkNCj4+ ICsjZGVmaW5lIEVOX0VPVFBfVFggICAgICAgICAgICBCSVQoMCkNCj4+ICsNCj4+ICsjZGVmaW5l IERTSV9NT0RFX0NGRyAgICAgICAgICAgIDB4MzQNCj4+ICsjZGVmaW5lIEVOQUJMRV9WSURFT19N T0RFICAgICAgICAwDQo+PiArI2RlZmluZSBFTkFCTEVfQ01EX01PREUgICAgICAgICAgICBCSVQo MCkNCj4+ICsNCj4+ICsjZGVmaW5lIERTSV9WSURfTU9ERV9DRkcgICAgICAgIDB4MzgNCj4+ICsj ZGVmaW5lIEZSQU1FX0JUQV9BQ0sgICAgICAgICAgICBCSVQoMTQpDQo+PiArI2RlZmluZSBFTkFC TEVfTE9XX1BPV0VSICAgICAgICAoMHgzZiA8PCA4KQ0KPj4gKyNkZWZpbmUgRU5BQkxFX0xPV19Q T1dFUl9NQVNLICAgICAgICAoMHgzZiA8PCA4KQ0KPj4gKyNkZWZpbmUgVklEX01PREVfVFlQRV9O T05fQlVSU1RfU1lOQ19QVUxTRVMgICAgMHgwDQo+PiArI2RlZmluZSBWSURfTU9ERV9UWVBFX05P Tl9CVVJTVF9TWU5DX0VWRU5UUyAgICAweDENCj4+ICsjZGVmaW5lIFZJRF9NT0RFX1RZUEVfQlVS U1QgICAgICAgICAgICAweDINCj4+ICsjZGVmaW5lIFZJRF9NT0RFX1RZUEVfTUFTSyAgICAgICAg ICAgIDB4Mw0KPj4gKw0KPj4gKyNkZWZpbmUgRFNJX1ZJRF9QS1RfU0laRSAgICAgICAgMHgzYw0K Pj4gKyNkZWZpbmUgVklEX1BLVF9TSVpFKHApICAgICAgICAgICAgKCgocCkgJiAweDNmZmYpIDw8 IDApDQo+PiArI2RlZmluZSBWSURfUEtUX01BWF9TSVpFICAgICAgICAweDNmZmYNCj4+ICsNCj4+ ICsjZGVmaW5lIERTSV9WSURfSFNBX1RJTUUgICAgICAgIDB4NDgNCj4+ICsjZGVmaW5lIERTSV9W SURfSEJQX1RJTUUgICAgICAgIDB4NGMNCj4+ICsjZGVmaW5lIERTSV9WSURfSExJTkVfVElNRSAg ICAgICAgMHg1MA0KPj4gKyNkZWZpbmUgRFNJX1ZJRF9WU0FfTElORVMgICAgICAgIDB4NTQNCj4+ ICsjZGVmaW5lIERTSV9WSURfVkJQX0xJTkVTICAgICAgICAweDU4DQo+PiArI2RlZmluZSBEU0lf VklEX1ZGUF9MSU5FUyAgICAgICAgMHg1Yw0KPj4gKyNkZWZpbmUgRFNJX1ZJRF9WQUNUSVZFX0xJ TkVTICAgICAgICAweDYwDQo+PiArI2RlZmluZSBEU0lfQ01EX01PREVfQ0ZHICAgICAgICAweDY4 DQo+PiArI2RlZmluZSBNQVhfUkRfUEtUX1NJWkVfTFAgICAgICAgIEJJVCgyNCkNCj4+ICsjZGVm aW5lIERDU19MV19UWF9MUCAgICAgICAgICAgIEJJVCgxOSkNCj4+ICsjZGVmaW5lIERDU19TUl8w UF9UWF9MUCAgICAgICAgICAgIEJJVCgxOCkNCj4+ICsjZGVmaW5lIERDU19TV18xUF9UWF9MUCAg ICAgICAgICAgIEJJVCgxNykNCj4+ICsjZGVmaW5lIERDU19TV18wUF9UWF9MUCAgICAgICAgICAg IEJJVCgxNikNCj4+ICsjZGVmaW5lIEdFTl9MV19UWF9MUCAgICAgICAgICAgIEJJVCgxNCkNCj4+ ICsjZGVmaW5lIEdFTl9TUl8yUF9UWF9MUCAgICAgICAgICAgIEJJVCgxMykNCj4+ICsjZGVmaW5l IEdFTl9TUl8xUF9UWF9MUCAgICAgICAgICAgIEJJVCgxMikNCj4+ICsjZGVmaW5lIEdFTl9TUl8w UF9UWF9MUCAgICAgICAgICAgIEJJVCgxMSkNCj4+ICsjZGVmaW5lIEdFTl9TV18yUF9UWF9MUCAg ICAgICAgICAgIEJJVCgxMCkNCj4+ICsjZGVmaW5lIEdFTl9TV18xUF9UWF9MUCAgICAgICAgICAg IEJJVCg5KQ0KPj4gKyNkZWZpbmUgR0VOX1NXXzBQX1RYX0xQICAgICAgICAgICAgQklUKDgpDQo+ PiArI2RlZmluZSBFTl9BQ0tfUlFTVCAgICAgICAgICAgIEJJVCgxKQ0KPj4gKyNkZWZpbmUgRU5f VEVBUl9GWCAgICAgICAgICAgIEJJVCgwKQ0KPj4gKw0KPj4gKyNkZWZpbmUgQ01EX01PREVfQUxM X0xQICAgICAgICAgICAgKE1BWF9SRF9QS1RfU0laRV9MUCB8IFwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICBEQ1NfTFdfVFhfTFAgfCBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgRENTX1NS XzBQX1RYX0xQIHwgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIERDU19TV18xUF9UWF9MUCB8 IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICBEQ1NfU1dfMFBfVFhfTFAgfCBcDQo+PiArICAg ICAgICAgICAgICAgICAgICAgR0VOX0xXX1RYX0xQIHwgXA0KPj4gKyAgICAgICAgICAgICAgICAg ICAgIEdFTl9TUl8yUF9UWF9MUCB8IFwNCj4+ICsgICAgICAgICAgICAgICAgICAgICBHRU5fU1Jf MVBfVFhfTFAgfCBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgR0VOX1NSXzBQX1RYX0xQIHwg XA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIEdFTl9TV18yUF9UWF9MUCB8IFwNCj4+ICsgICAg ICAgICAgICAgICAgICAgICBHRU5fU1dfMVBfVFhfTFAgfCBcDQo+PiArICAgICAgICAgICAgICAg ICAgICAgR0VOX1NXXzBQX1RYX0xQKQ0KPj4gKw0KPj4gKyNkZWZpbmUgRFNJX0dFTl9IRFIgICAg ICAgICAgICAweDZjDQo+PiArI2RlZmluZSBHRU5fSERBVEEoZGF0YSkgICAgICAgICAgICAoKChk YXRhKSAmIDB4ZmZmZikgPDwgOCkNCj4+ICsjZGVmaW5lIEdFTl9IREFUQV9NQVNLICAgICAgICAg ICAgKDB4ZmZmZiA8PCA4KQ0KPj4gKyNkZWZpbmUgR0VOX0hUWVBFKHR5cGUpICAgICAgICAgICAg KCgodHlwZSkgJiAweGZmKSA8PCAwKQ0KPj4gKyNkZWZpbmUgR0VOX0hUWVBFX01BU0sgICAgICAg ICAgICAweGZmDQo+PiArDQo+PiArI2RlZmluZSBEU0lfR0VOX1BMRF9EQVRBICAgICAgICAweDcw DQo+PiArDQo+PiArI2RlZmluZSBEU0lfQ01EX1BLVF9TVEFUVVMgICAgICAgIDB4NzQNCj4+ICsj ZGVmaW5lIEdFTl9DTURfRU1QVFkgICAgICAgICAgICBCSVQoMCkNCj4+ICsjZGVmaW5lIEdFTl9D TURfRlVMTCAgICAgICAgICAgIEJJVCgxKQ0KPj4gKyNkZWZpbmUgR0VOX1BMRF9XX0VNUFRZICAg ICAgICAgICAgQklUKDIpDQo+PiArI2RlZmluZSBHRU5fUExEX1dfRlVMTCAgICAgICAgICAgIEJJ VCgzKQ0KPj4gKyNkZWZpbmUgR0VOX1BMRF9SX0VNUFRZICAgICAgICAgICAgQklUKDQpDQo+PiAr I2RlZmluZSBHRU5fUExEX1JfRlVMTCAgICAgICAgICAgIEJJVCg1KQ0KPj4gKyNkZWZpbmUgR0VO X1JEX0NNRF9CVVNZICAgICAgICAgICAgQklUKDYpDQo+PiArDQo+PiArI2RlZmluZSBEU0lfVE9f Q05UX0NGRyAgICAgICAgICAgIDB4NzgNCj4+ICsjZGVmaW5lIEhTVFhfVE9fQ05UKHApICAgICAg ICAgICAgKCgocCkgJiAweGZmZmYpIDw8IDE2KQ0KPj4gKyNkZWZpbmUgTFBSWF9UT19DTlQocCkg ICAgICAgICAgICAoKHApICYgMHhmZmZmKQ0KPj4gKw0KPj4gKyNkZWZpbmUgRFNJX0JUQV9UT19D TlQgICAgICAgICAgICAweDhjDQo+PiArI2RlZmluZSBEU0lfTFBDTEtfQ1RSTCAgICAgICAgICAg IDB4OTQNCj4+ICsjZGVmaW5lIEFVVE9fQ0xLTEFORV9DVFJMICAgICAgICBCSVQoMSkNCj4+ICsj ZGVmaW5lIFBIWV9UWFJFUVVFU1RDTEtIUyAgICAgICAgQklUKDApDQo+PiArDQo+PiArI2RlZmlu ZSBEU0lfUEhZX1RNUl9MUENMS19DRkcgICAgICAgIDB4OTgNCj4+ICsjZGVmaW5lIFBIWV9DTEtI UzJMUF9USU1FKGxiY2MpICAgICAgICAoKChsYmNjKSAmIDB4M2ZmKSA8PCAxNikNCj4+ICsjZGVm aW5lIFBIWV9DTEtMUDJIU19USU1FKGxiY2MpICAgICAgICAoKGxiY2MpICYgMHgzZmYpDQo+PiAr DQo+PiArI2RlZmluZSBEU0lfUEhZX1RNUl9DRkcgICAgICAgICAgICAweDljDQo+PiArI2RlZmlu ZSBQSFlfSFMyTFBfVElNRShsYmNjKSAgICAgICAgKCgobGJjYykgJiAweGZmKSA8PCAyNCkNCj4+ ICsjZGVmaW5lIFBIWV9MUDJIU19USU1FKGxiY2MpICAgICAgICAoKChsYmNjKSAmIDB4ZmYpIDw8 IDE2KQ0KPj4gKyNkZWZpbmUgTUFYX1JEX1RJTUUobGJjYykgICAgICAgICgobGJjYykgJiAweDdm ZmYpDQo+PiArDQo+PiArI2RlZmluZSBEU0lfUEhZX1JTVFogICAgICAgICAgICAweGEwDQo+PiAr I2RlZmluZSBQSFlfRElTRk9SQ0VQTEwgICAgICAgICAgICAwDQo+PiArI2RlZmluZSBQSFlfRU5G T1JDRVBMTCAgICAgICAgICAgIEJJVCgzKQ0KPj4gKyNkZWZpbmUgUEhZX0RJU0FCTEVDTEsgICAg ICAgICAgICAwDQo+PiArI2RlZmluZSBQSFlfRU5BQkxFQ0xLICAgICAgICAgICAgQklUKDIpDQo+ PiArI2RlZmluZSBQSFlfUlNUWiAgICAgICAgICAgIDANCj4+ICsjZGVmaW5lIFBIWV9VTlJTVFog ICAgICAgICAgICBCSVQoMSkNCj4+ICsjZGVmaW5lIFBIWV9TSFVURE9XTlogICAgICAgICAgICAw DQo+PiArI2RlZmluZSBQSFlfVU5TSFVURE9XTlogICAgICAgICAgICBCSVQoMCkNCj4+ICsNCj4+ ICsjZGVmaW5lIERTSV9QSFlfSUZfQ0ZHICAgICAgICAgICAgMHhhNA0KPj4gKyNkZWZpbmUgTl9M QU5FUyhuKSAgICAgICAgICAgICgoKChuKSAtIDEpICYgMHgzKSA8PCAwKQ0KPj4gKyNkZWZpbmUg UEhZX1NUT1BfV0FJVF9USU1FKGN5Y2xlKSAgICAoKChjeWNsZSkgJiAweGZmKSA8PCA4KQ0KPj4g Kw0KPj4gKyNkZWZpbmUgRFNJX1BIWV9TVEFUVVMgICAgICAgICAgICAweGIwDQo+PiArI2RlZmlu ZSBMT0NLICAgICAgICAgICAgICAgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgU1RPUF9TVEFURV9DTEtf TEFORSAgICAgICAgQklUKDIpDQo+PiArDQo+PiArI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJMMCAg ICAgICAgMHhiNA0KPj4gKyNkZWZpbmUgUEhZX1RFU1RDTEsgICAgICAgICAgICBCSVQoMSkNCj4+ ICsjZGVmaW5lIFBIWV9VTlRFU1RDTEsgICAgICAgICAgICAwDQo+PiArI2RlZmluZSBQSFlfVEVT VENMUiAgICAgICAgICAgIEJJVCgwKQ0KPj4gKyNkZWZpbmUgUEhZX1VOVEVTVENMUiAgICAgICAg ICAgIDANCj4+ICsNCj4+ICsjZGVmaW5lIERTSV9QSFlfVFNUX0NUUkwxICAgICAgICAweGI4DQo+ PiArI2RlZmluZSBQSFlfVEVTVEVOICAgICAgICAgICAgQklUKDE2KQ0KPj4gKyNkZWZpbmUgUEhZ X1VOVEVTVEVOICAgICAgICAgICAgMA0KPj4gKyNkZWZpbmUgUEhZX1RFU1RET1VUKG4pICAgICAg ICAgICAgKCgobikgJiAweGZmKSA8PCA4KQ0KPj4gKyNkZWZpbmUgUEhZX1RFU1RESU4obikgICAg ICAgICAgICAoKChuKSAmIDB4ZmYpIDw8IDApDQo+PiArDQo+PiArI2RlZmluZSBEU0lfSU5UX1NU MCAgICAgICAgICAgIDB4YmMNCj4+ICsjZGVmaW5lIERTSV9JTlRfU1QxICAgICAgICAgICAgMHhj MA0KPj4gKyNkZWZpbmUgRFNJX0lOVF9NU0swICAgICAgICAgICAgMHhjNA0KPj4gKyNkZWZpbmUg RFNJX0lOVF9NU0sxICAgICAgICAgICAgMHhjOA0KPj4gKw0KPj4gKyNkZWZpbmUgUEhZX1NUQVRV U19USU1FT1VUX1VTICAgICAgICAxMDAwMA0KPj4gKyNkZWZpbmUgQ01EX1BLVF9TVEFUVVNfVElN RU9VVF9VUyAgICAyMDAwMA0KPj4gKw0KPj4gK3N0cnVjdCBkd19taXBpX2RzaSB7DQo+PiArICAg IHN0cnVjdCBkcm1fYnJpZGdlIGJyaWRnZTsNCj4+ICsgICAgc3RydWN0IG1pcGlfZHNpX2hvc3Qg ZHNpX2hvc3Q7DQo+PiArICAgIHN0cnVjdCBkcm1fYnJpZGdlICpwYW5lbF9icmlkZ2U7DQo+PiAr ICAgIGJvb2wgaXNfcGFuZWxfYnJpZGdlOw0KPj4gKyAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ PiArICAgIHZvaWQgX19pb21lbSAqYmFzZTsNCj4+ICsNCj4+ICsgICAgc3RydWN0IGNsayAqcGNs azsNCj4+ICsNCj4+ICsgICAgdW5zaWduZWQgaW50IGxhbmVfbWJwczsgLyogcGVyIGxhbmUgKi8N Cj4+ICsgICAgdTMyIGNoYW5uZWw7DQo+PiArICAgIHUzMiBsYW5lczsNCj4+ICsgICAgdTMyIGZv cm1hdDsNCj4+ICsgICAgdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzOw0KPj4gKw0KPj4gKyAgICBj b25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwbGF0X2RhdGE7DQo+PiArfTsNCj4+ ICsNCj4+ICsvKg0KPj4gKyAqIFRoZSBjb250cm9sbGVyIHNob3VsZCBnZW5lcmF0ZSAyIGZyYW1l cyBiZWZvcmUNCj4+ICsgKiBwcmVwYXJpbmcgdGhlIHBlcmlwaGVyYWwuDQo+PiArICovDQo+PiAr c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfd2FpdF9mb3JfdHdvX2ZyYW1lcyhzdHJ1Y3QgZHJtX2Rp c3BsYXlfbW9kZSANCj4+ICptb2RlKQ0KPj4gK3sNCj4+ICsgICAgaW50IHJlZnJlc2gsIHR3b19m cmFtZXM7DQo+PiArDQo+PiArICAgIHJlZnJlc2ggPSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKTsN Cj4+ICsgICAgdHdvX2ZyYW1lcyA9IERJVl9ST1VORF9VUChNU0VDX1BFUl9TRUMsIHJlZnJlc2gp ICogMjsNCj4+ICsgICAgbXNsZWVwKHR3b19mcmFtZXMpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW5saW5lIHN0cnVjdCBkd19taXBpX2RzaSAqaG9zdF90b19kc2koc3RydWN0IG1pcGlfZHNp X2hvc3QgDQo+PiAqaG9zdCkNCj4+ICt7DQo+PiArICAgIHJldHVybiBjb250YWluZXJfb2YoaG9z dCwgc3RydWN0IGR3X21pcGlfZHNpLCBkc2lfaG9zdCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbmxpbmUgc3RydWN0IGR3X21pcGlfZHNpICpicmlkZ2VfdG9fZHNpKHN0cnVjdCBkcm1fYnJp ZGdlIA0KPj4gKmJyaWRnZSkNCj4+ICt7DQo+PiArICAgIHJldHVybiBjb250YWluZXJfb2YoYnJp ZGdlLCBzdHJ1Y3QgZHdfbWlwaV9kc2ksIGJyaWRnZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbmxpbmUgdm9pZCBkc2lfd3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksIHUzMiByZWcs IHUzMiB2YWwpDQo+PiArew0KPj4gKyAgICB3cml0ZWwodmFsLCBkc2ktPmJhc2UgKyByZWcpOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIHUzMiBkc2lfcmVhZChzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSwgdTMyIHJlZykNCj4+ICt7DQo+PiArICAgIHJldHVybiByZWFkbChkc2ktPmJh c2UgKyByZWcpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX2hvc3Rf YXR0YWNoKHN0cnVjdCBtaXBpX2RzaV9ob3N0ICpob3N0LA0KPj4gKyAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3Qg ZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3RfdG9fZHNpKGhvc3QpOw0KPj4gKyAgICBzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlOw0KPj4gKyAgICBzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbDsNCj4+ICsg ICAgaW50IHJldDsNCj4+ICsNCj4+ICsgICAgaWYgKGRldmljZS0+bGFuZXMgPiBkc2ktPnBsYXRf ZGF0YS0+bWF4X2RhdGFfbGFuZXMpIHsNCj4+ICsgICAgICAgIGRldl9lcnIoZHNpLT5kZXYsICJ0 aGUgbnVtYmVyIG9mIGRhdGEgbGFuZXMoJXUpIGlzIHRvbyBtYW55XG4iLA0KPj4gKyAgICAgICAg ICAgIGRldmljZS0+bGFuZXMpOw0KPj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArICAg IH0NCj4+ICsNCj4+ICsgICAgZHNpLT5sYW5lcyA9IGRldmljZS0+bGFuZXM7DQo+PiArICAgIGRz aS0+Y2hhbm5lbCA9IGRldmljZS0+Y2hhbm5lbDsNCj4+ICsgICAgZHNpLT5mb3JtYXQgPSBkZXZp Y2UtPmZvcm1hdDsNCj4+ICsgICAgZHNpLT5tb2RlX2ZsYWdzID0gZGV2aWNlLT5tb2RlX2ZsYWdz Ow0KPj4gKw0KPj4gKyAgICByZXQgPSBkcm1fb2ZfZmluZF9wYW5lbF9vcl9icmlkZ2UoaG9zdC0+ ZGV2LT5vZl9ub2RlLCAxLCAwLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAmcGFuZWwsICZi cmlkZ2UpOw0KPj4gKyAgICBpZiAocmV0KQ0KPj4gKyAgICAgICAgcmV0dXJuIHJldDsNCj4+ICsN Cj4+ICsgICAgaWYgKHBhbmVsKSB7DQo+PiArICAgICAgICBicmlkZ2UgPSBkcm1fcGFuZWxfYnJp ZGdlX2FkZChwYW5lbCwgRFJNX01PREVfQ09OTkVDVE9SX0RTSSk7DQo+PiArICAgICAgICBpZiAo SVNfRVJSKGJyaWRnZSkpDQo+PiArICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIoYnJpZGdlKTsN Cj4+ICsgICAgICAgIGRzaS0+aXNfcGFuZWxfYnJpZGdlID0gdHJ1ZTsNCj4+ICsgICAgfQ0KPj4g Kw0KPj4gKyAgICBkc2ktPnBhbmVsX2JyaWRnZSA9IGJyaWRnZTsNCj4+ICsNCj4+ICsgICAgcmV0 dXJuIGRybV9icmlkZ2VfYWRkKCZkc2ktPmJyaWRnZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBpbnQgZHdfbWlwaV9kc2lfaG9zdF9kZXRhY2goc3RydWN0IG1pcGlfZHNpX2hvc3QgKmhvc3Qs DQo+PiArICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSkN Cj4+ICt7DQo+PiArICAgIHN0cnVjdCBkd19taXBpX2RzaSAqZHNpID0gaG9zdF90b19kc2koaG9z dCk7DQo+PiArDQo+PiArICAgIGlmIChkc2ktPmlzX3BhbmVsX2JyaWRnZSkNCj4+ICsgICAgICAg IGRybV9wYW5lbF9icmlkZ2VfcmVtb3ZlKGRzaS0+cGFuZWxfYnJpZGdlKTsNCj4+ICsNCj4+ICsg ICAgZHJtX2JyaWRnZV9yZW1vdmUoJmRzaS0+YnJpZGdlKTsNCj4+ICsNCj4+ICsgICAgcmV0dXJu IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGR3X21pcGlfbWVzc2FnZV9jb25maWco c3RydWN0IGR3X21pcGlfZHNpICpkc2ksDQo+PiArICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0 cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykNCj4+ICt7DQo+PiArICAgIGJvb2wgbHBtID0gbXNnLT5m bGFncyAmIE1JUElfRFNJX01TR19VU0VfTFBNOw0KPj4gKyAgICB1MzIgdmFsID0gMDsNCj4+ICsN Cj4+ICsgICAgaWYgKG1zZy0+ZmxhZ3MgJiBNSVBJX0RTSV9NU0dfUkVRX0FDSykNCj4+ICsgICAg ICAgIHZhbCB8PSBFTl9BQ0tfUlFTVDsNCj4+ICsgICAgaWYgKGxwbSkNCj4+ICsgICAgICAgIHZh bCB8PSBDTURfTU9ERV9BTExfTFA7DQo+PiArDQo+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9M UENMS19DVFJMLCBscG0gPyAwIDogUEhZX1RYUkVRVUVTVENMS0hTKTsNCj4+ICsgICAgZHNpX3dy aXRlKGRzaSwgRFNJX0NNRF9NT0RFX0NGRywgdmFsKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IGludCBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSwgdTMyIA0KPj4gaGRyX3ZhbCkNCj4+ICt7DQo+PiArICAgIGludCByZXQ7DQo+PiArICAgIHUz MiB2YWwsIG1hc2s7DQo+PiArDQo+PiArICAgIHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2kt PmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsDQo+PiArICAgICAgICAgICAgICAgICB2YWwsICEo dmFsICYgR0VOX0NNRF9GVUxMKSwgMTAwMCwNCj4+ICsgICAgICAgICAgICAgICAgIENNRF9QS1Rf U1RBVFVTX1RJTUVPVVRfVVMpOw0KPj4gKyAgICBpZiAocmV0IDwgMCkgew0KPj4gKyAgICAgICAg ZGV2X2Vycihkc2ktPmRldiwgImZhaWxlZCB0byBnZXQgYXZhaWxhYmxlIGNvbW1hbmQgRklGT1xu Iik7DQo+PiArICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGRz aV93cml0ZShkc2ksIERTSV9HRU5fSERSLCBoZHJfdmFsKTsNCj4+ICsNCj4+ICsgICAgbWFzayA9 IEdFTl9DTURfRU1QVFkgfCBHRU5fUExEX1dfRU1QVFk7DQo+PiArICAgIHJldCA9IHJlYWRsX3Bv bGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9TVEFUVVMsDQo+PiArICAgICAgICAg ICAgICAgICB2YWwsICh2YWwgJiBtYXNrKSA9PSBtYXNrLA0KPj4gKyAgICAgICAgICAgICAgICAg MTAwMCwgQ01EX1BLVF9TVEFUVVNfVElNRU9VVF9VUyk7DQo+PiArICAgIGlmIChyZXQgPCAwKSB7 DQo+PiArICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LCAiZmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQg RklGT1xuIik7DQo+PiArICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAgICB9DQo+PiArDQo+PiAr ICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX2Rj c19zaG9ydF93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSwNCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykNCj4+ICt7DQo+PiArICAg IGNvbnN0IHU4ICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsNCj4+ICsgICAgdTE2IGRhdGEgPSAwOw0K Pj4gKyAgICB1MzIgdmFsOw0KPj4gKw0KPj4gKyAgICBpZiAobXNnLT50eF9sZW4gPiAwKQ0KPj4g KyAgICAgICAgZGF0YSB8PSB0eF9idWZbMF07DQo+PiArICAgIGlmIChtc2ctPnR4X2xlbiA+IDEp DQo+PiArICAgICAgICBkYXRhIHw9IHR4X2J1ZlsxXSA8PCA4Ow0KPj4gKw0KPj4gKyAgICBpZiAo bXNnLT50eF9sZW4gPiAyKSB7DQo+PiArICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LCAidG9vIGxv bmcgdHggYnVmIGxlbmd0aCAlenUgZm9yIHNob3J0IA0KPj4gd3JpdGVcbiIsDQo+PiArICAgICAg ICAgICAgbXNnLT50eF9sZW4pOw0KPj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArICAg IH0NCj4+ICsNCj4+ICsgICAgdmFsID0gR0VOX0hEQVRBKGRhdGEpIHwgR0VOX0hUWVBFKG1zZy0+ dHlwZSk7DQo+PiArICAgIHJldHVybiBkd19taXBpX2RzaV9nZW5fcGt0X2hkcl93cml0ZShkc2ks IHZhbCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZHdfbWlwaV9kc2lfZGNzX2xvbmdf d3JpdGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2ksDQo+PiArICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCBtaXBpX2RzaV9tc2cgKm1zZykNCj4+ICt7DQo+PiArICAgIGNvbnN0IHU4 ICp0eF9idWYgPSBtc2ctPnR4X2J1ZjsNCj4+ICsgICAgaW50IGxlbiA9IG1zZy0+dHhfbGVuLCBw bGRfZGF0YV9ieXRlcyA9IHNpemVvZih1MzIpLCByZXQ7DQo+PiArICAgIHUzMiBoZHJfdmFsID0g R0VOX0hEQVRBKG1zZy0+dHhfbGVuKSB8IEdFTl9IVFlQRShtc2ctPnR5cGUpOw0KPj4gKyAgICB1 MzIgcmVtYWluZGVyOw0KPj4gKyAgICB1MzIgdmFsOw0KPj4gKw0KPj4gKyAgICBpZiAobXNnLT50 eF9sZW4gPCAzKSB7DQo+PiArICAgICAgICBkZXZfZXJyKGRzaS0+ZGV2LCAid3JvbmcgdHggYnVm IGxlbmd0aCAlenUgZm9yIGxvbmcgd3JpdGVcbiIsDQo+PiArICAgICAgICAgICAgbXNnLT50eF9s ZW4pOw0KPj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsg ICAgd2hpbGUgKERJVl9ST1VORF9VUChsZW4sIHBsZF9kYXRhX2J5dGVzKSkgew0KPj4gKyAgICAg ICAgaWYgKGxlbiA8IHBsZF9kYXRhX2J5dGVzKSB7DQo+PiArICAgICAgICAgICAgcmVtYWluZGVy ID0gMDsNCj4+ICsgICAgICAgICAgICBtZW1jcHkoJnJlbWFpbmRlciwgdHhfYnVmLCBsZW4pOw0K Pj4gKyAgICAgICAgICAgIGRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRl cik7DQo+PiArICAgICAgICAgICAgbGVuID0gMDsNCj4+ICsgICAgICAgIH0gZWxzZSB7DQo+PiAr ICAgICAgICAgICAgbWVtY3B5KCZyZW1haW5kZXIsIHR4X2J1ZiwgcGxkX2RhdGFfYnl0ZXMpOw0K Pj4gKyAgICAgICAgICAgIGRzaV93cml0ZShkc2ksIERTSV9HRU5fUExEX0RBVEEsIHJlbWFpbmRl cik7DQo+PiArICAgICAgICAgICAgdHhfYnVmICs9IHBsZF9kYXRhX2J5dGVzOw0KPj4gKyAgICAg ICAgICAgIGxlbiAtPSBwbGRfZGF0YV9ieXRlczsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsg ICAgICAgIHJldCA9IHJlYWRsX3BvbGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfQ01EX1BLVF9T VEFUVVMsDQo+PiArICAgICAgICAgICAgICAgICAgICAgdmFsLCAhKHZhbCAmIEdFTl9QTERfV19G VUxMKSwgMTAwMCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICBDTURfUEtUX1NUQVRVU19USU1F T1VUX1VTKTsNCj4+ICsgICAgICAgIGlmIChyZXQgPCAwKSB7DQo+PiArICAgICAgICAgICAgZGV2 X2Vycihkc2ktPmRldiwNCj4+ICsgICAgICAgICAgICAgICAgImZhaWxlZCB0byBnZXQgYXZhaWxh YmxlIHdyaXRlIHBheWxvYWQgRklGT1xuIik7DQo+PiArICAgICAgICAgICAgcmV0dXJuIHJldDsN Cj4+ICsgICAgICAgIH0NCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICByZXR1cm4gZHdfbWlwaV9k c2lfZ2VuX3BrdF9oZHJfd3JpdGUoZHNpLCBoZHJfdmFsKTsNCj4+ICt9DQo+PiArDQo+PiArc3Rh dGljIHNzaXplX3QgZHdfbWlwaV9kc2lfaG9zdF90cmFuc2ZlcihzdHJ1Y3QgbWlwaV9kc2lfaG9z dCAqaG9zdCwNCj4+ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWlwaV9kc2lf bXNnICptc2cpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGhvc3Rf dG9fZHNpKGhvc3QpOw0KPj4gKyAgICBpbnQgcmV0Ow0KPj4gKw0KPj4gKyAgICAvKg0KPj4gKyAg ICAgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMNCj4+ICsgICAgICogdXNlIG1pcGlfZHNpX2Ny ZWF0ZV9wYWNrZXQoKSBpbnN0ZWFkIG9mIGFsbCBmb2xsb3dpbmcNCj4+ICsgICAgICogZnVuY3Rp b25zIGFuZCBjb2RlIChubyBzd2l0Y2ggY2FzZXMsIG5vDQo+PiArICAgICAqIGR3X21pcGlfZHNp X2Rjc19zaG9ydF93cml0ZSgpLCBvbmx5IHRoZSBsb29wIGluIGxvbmdfd3JpdGUuLi4pDQo+PiAr ICAgICAqIGFuZCB1c2UgcGFja2V0LmhlYWRlci4uLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgZHdf bWlwaV9tZXNzYWdlX2NvbmZpZyhkc2ksIG1zZyk7DQo+PiArDQo+PiArICAgIHN3aXRjaCAobXNn LT50eXBlKSB7DQo+PiArICAgIGNhc2UgTUlQSV9EU0lfRENTX1NIT1JUX1dSSVRFOg0KPj4gKyAg ICBjYXNlIE1JUElfRFNJX0RDU19TSE9SVF9XUklURV9QQVJBTToNCj4+ICsgICAgY2FzZSBNSVBJ X0RTSV9TRVRfTUFYSU1VTV9SRVRVUk5fUEFDS0VUX1NJWkU6DQo+PiArICAgICAgICByZXQgPSBk d19taXBpX2RzaV9kY3Nfc2hvcnRfd3JpdGUoZHNpLCBtc2cpOw0KPj4gKyAgICAgICAgYnJlYWs7 DQo+PiArICAgIGNhc2UgTUlQSV9EU0lfRENTX0xPTkdfV1JJVEU6DQo+PiArICAgICAgICByZXQg PSBkd19taXBpX2RzaV9kY3NfbG9uZ193cml0ZShkc2ksIG1zZyk7DQo+PiArICAgICAgICBicmVh azsNCj4+ICsgICAgZGVmYXVsdDoNCj4+ICsgICAgICAgIGRldl9lcnIoZHNpLT5kZXYsICJ1bnN1 cHBvcnRlZCBtZXNzYWdlIHR5cGUgMHglMDJ4XG4iLA0KPj4gKyAgICAgICAgICAgIG1zZy0+dHlw ZSk7DQo+PiArICAgICAgICByZXQgPSAtRUlOVkFMOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAg IHJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWlwaV9k c2lfaG9zdF9vcHMgZHdfbWlwaV9kc2lfaG9zdF9vcHMgPSB7DQo+PiArICAgIC5hdHRhY2ggPSBk d19taXBpX2RzaV9ob3N0X2F0dGFjaCwNCj4+ICsgICAgLmRldGFjaCA9IGR3X21pcGlfZHNpX2hv c3RfZGV0YWNoLA0KPj4gKyAgICAudHJhbnNmZXIgPSBkd19taXBpX2RzaV9ob3N0X3RyYW5zZmVy LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfdmlkZW9fbW9kZV9j b25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpDQo+PiArew0KPj4gKyAgICB1MzIgdmFsOw0K Pj4gKw0KPj4gKyAgICAvKg0KPj4gKyAgICAgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMNCj4+ ICsgICAgICogZW5hYmxpbmcgbG93IHBvd2VyIGlzIHBhbmVsLWRlcGVuZGVudCwgd2Ugc2hvdWxk IHVzZSB0aGUNCj4+ICsgICAgICogcGFuZWwgY29uZmlndXJhdGlvbiBoZXJlLi4uDQo+PiArICAg ICAqLw0KPj4gKyAgICB2YWwgPSBFTkFCTEVfTE9XX1BPV0VSOw0KPj4gKw0KPj4gKyAgICBpZiAo ZHNpLT5tb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCkNCj4+ICsgICAgICAg IHZhbCB8PSBWSURfTU9ERV9UWVBFX0JVUlNUOw0KPj4gKyAgICBlbHNlIGlmIChkc2ktPm1vZGVf ZmxhZ3MgJiBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVMU0UpDQo+PiArICAgICAgICB2YWwg fD0gVklEX01PREVfVFlQRV9OT05fQlVSU1RfU1lOQ19QVUxTRVM7DQo+PiArICAgIGVsc2UNCj4+ ICsgICAgICAgIHZhbCB8PSBWSURfTU9ERV9UWVBFX05PTl9CVVJTVF9TWU5DX0VWRU5UUzsNCj4+ ICsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9NT0RFX0NGRywgdmFsKTsNCj4+ICt9 DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfc2V0X21vZGUoc3RydWN0IGR3X21p cGlfZHNpICpkc2ksDQo+PiArICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZGVfZmxh Z3MpDQo+PiArew0KPj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7DQo+ PiArDQo+PiArICAgIGlmIChtb2RlX2ZsYWdzICYgTUlQSV9EU0lfTU9ERV9WSURFTykgew0KPj4g KyAgICAgICAgZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBFTkFCTEVfVklERU9fTU9ERSk7 DQo+PiArICAgICAgICBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOw0KPj4gKyAg ICAgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0xQQ0xLX0NUUkwsIFBIWV9UWFJFUVVFU1RDTEtIUyk7 DQo+PiArICAgIH0gZWxzZSB7DQo+PiArICAgICAgICBkc2lfd3JpdGUoZHNpLCBEU0lfTU9ERV9D RkcsIEVOQUJMRV9DTURfTU9ERSk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgZHNpX3dyaXRl KGRzaSwgRFNJX1BXUl9VUCwgUE9XRVJVUCk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lk IGR3X21pcGlfZHNpX2Rpc2FibGUoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpDQo+PiArew0KPj4g KyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7DQo+PiArICAgIGRzaV93cml0 ZShkc2ksIERTSV9QSFlfUlNUWiwgUEhZX1JTVFopOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMg dm9pZCBkd19taXBpX2RzaV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQ0KPj4gK3sNCj4+ ICsgICAgLyoNCj4+ICsgICAgICogVGhlIG1heGltdW0gcGVybWl0dGVkIGVzY2FwZSBjbG9jayBp cyAyME1IeiBhbmQgaXQgaXMgZGVyaXZlZCANCj4+IGZyb20NCj4+ICsgICAgICogbGFuZWJ5dGVj bGssIHdoaWNoIGlzIHJ1bm5pbmcgYXQgImxhbmVfbWJwcyAvIDgiLiAgVGh1cyB3ZSB3YW50Og0K Pj4gKyAgICAgKg0KPj4gKyAgICAgKiAgICAgKGxhbmVfbWJwcyA+PiAzKSAvIGVzY19jbGtfZGl2 aXNpb24gPCAyMA0KPj4gKyAgICAgKiB3aGljaCBpczoNCj4+ICsgICAgICogICAgIChsYW5lX21i cHMgPj4gMykgLyAyMCA+IGVzY19jbGtfZGl2aXNpb24NCj4+ICsgICAgICovDQo+PiArICAgIHUz MiBlc2NfY2xrX2RpdmlzaW9uID0gKGRzaS0+bGFuZV9tYnBzID4+IDMpIC8gMjAgKyAxOw0KPj4g Kw0KPj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUFdSX1VQLCBSRVNFVCk7DQo+PiArDQo+PiAr ICAgIC8qDQo+PiArICAgICAqIFRPRE8gZHcgZHJ2IGltcHJvdmVtZW50cw0KPj4gKyAgICAgKiB0 aW1lb3V0IGNsb2NrIGRpdmlzaW9uIHNob3VsZCBiZSBjb21wdXRlZCB3aXRoIHRoZQ0KPj4gKyAg ICAgKiBoaWdoIHNwZWVkIHRyYW5zbWlzc2lvbiBjb3VudGVyIHRpbWVvdXQgYW5kIGJ5dGUgbGFu ZS4uLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0NMS01HUl9DRkcs IFRPX0NMS19ESVZJRFNJT04oMTApIHwNCj4+ICsgICAgICAgICAgVFhfRVNDX0NMS19ESVZJRFNJ T04oZXNjX2Nsa19kaXZpc2lvbikpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBkd19t aXBpX2RzaV9kcGlfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpLA0KPj4gKyAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4+ICt7DQo+PiArICAg IHUzMiB2YWwgPSAwLCBjb2xvciA9IDA7DQo+PiArDQo+PiArICAgIHN3aXRjaCAoZHNpLT5mb3Jt YXQpIHsNCj4+ICsgICAgY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4Og0KPj4gKyAgICAgICAgY29s b3IgPSBEUElfQ09MT1JfQ09ESU5HXzI0QklUOw0KPj4gKyAgICAgICAgYnJlYWs7DQo+PiArICAg IGNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoNCj4+ICsgICAgICAgIGNvbG9yID0gRFBJX0NPTE9S X0NPRElOR18xOEJJVF8yIHwgRU4xOF9MT09TRUxZOw0KPj4gKyAgICAgICAgYnJlYWs7DQo+PiAr ICAgIGNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6DQo+PiArICAgICAgICBjb2xvciA9 IERQSV9DT0xPUl9DT0RJTkdfMThCSVRfMTsNCj4+ICsgICAgICAgIGJyZWFrOw0KPj4gKyAgICBj YXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6DQo+PiArICAgICAgICBjb2xvciA9IERQSV9DT0xPUl9D T0RJTkdfMTZCSVRfMTsNCj4+ICsgICAgICAgIGJyZWFrOw0KPj4gKyAgICB9DQo+PiArDQo+PiAr ICAgIGlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfTlZTWU5DKQ0KPj4gKyAgICAgICAg dmFsIHw9IFZTWU5DX0FDVElWRV9MT1c7DQo+PiArICAgIGlmIChtb2RlLT5mbGFncyAmIERSTV9N T0RFX0ZMQUdfTkhTWU5DKQ0KPj4gKyAgICAgICAgdmFsIHw9IEhTWU5DX0FDVElWRV9MT1c7DQo+ PiArDQo+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9EUElfVkNJRCwgRFBJX1ZJRChkc2ktPmNo YW5uZWwpKTsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DT0xPUl9DT0RJTkcsIGNv bG9yKTsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9DRkdfUE9MLCB2YWwpOw0KPj4g KyAgICAvKg0KPj4gKyAgICAgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMNCj4+ICsgICAgICog bGFyZ2VzdCBwYWNrZXQgc2l6ZXMgZHVyaW5nIGhmcCBvciBkdXJpbmcgdnNhL3ZwYi92ZnANCj4+ ICsgICAgICogc2hvdWxkIGJlIGNvbXB1dGVkIGFjY29yZGluZyB0byBieXRlIGxhbmUsIGxhbmUg bnVtYmVyIGFuZCBvbmx5DQo+PiArICAgICAqIGlmIHNlbmRpbmcgbHAgY21kcyBpbiBoaWdoIHNw ZWVkIGlzIGVuYWJsZSAoUEhZX1RYUkVRVUVTVENMS0hTKQ0KPj4gKyAgICAgKi8NCj4+ICsgICAg ZHNpX3dyaXRlKGRzaSwgRFNJX0RQSV9MUF9DTURfVElNLCBPVVRWQUNUX0xQQ01EX1RJTUUoNCkN Cj4+ICsgICAgICAgICAgfCBJTlZBQ1RfTFBDTURfVElNRSg0KSk7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhzdHJ1Y3QgZHdf bWlwaV9kc2kgKmRzaSkNCj4+ICt7DQo+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9QQ0tIRExf Q0ZHLCBFTl9DUkNfUlggfCBFTl9FQ0NfUlggfCBFTl9CVEEpOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgdm9pZCBkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKHN0cnVjdCBkd19taXBp X2RzaSAqZHNpLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZGlzcGxh eV9tb2RlICptb2RlKQ0KPj4gK3sNCj4+ICsgICAgLyoNCj4+ICsgICAgICogVE9ETyBkdyBkcnYg aW1wcm92ZW1lbnRzDQo+PiArICAgICAqIG9ubHkgYnVyc3QgbW9kZSBpcyBzdXBwb3J0ZWQgaGVy ZS4gRm9yIG5vbi1idXJzdCB2aWRlbyBtb2RlcywNCj4+ICsgICAgICogd2Ugc2hvdWxkIGNvbXB1 dGUgRFNJX1ZJRF9QS1RfU0laRSwgRFNJX1ZDQ1IuTlVNQyAmDQo+PiArICAgICAqIERTSV9WTlBD Ui5OUFNJWkUuLi4gZXNwZWNpYWxseSBiZWNhdXNlIHRoaXMgZHJpdmVyIHN1cHBvcnRzDQo+PiAr ICAgICAqIG5vbi1idXJzdCB2aWRlbyBtb2Rlcywgc2VlIGR3X21pcGlfZHNpX3ZpZGVvX21vZGVf Y29uZmlnKCkuLi4NCj4+ICsgICAgICovDQo+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9WSURf UEtUX1NJWkUsIFZJRF9QS1RfU0laRShtb2RlLT5oZGlzcGxheSkpOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9jb21tYW5kX21vZGVfY29uZmlnKHN0cnVjdCBkd19t aXBpX2RzaSAqZHNpKQ0KPj4gK3sNCj4+ICsgICAgLyoNCj4+ICsgICAgICogVE9ETyBkdyBkcnYg aW1wcm92ZW1lbnRzDQo+PiArICAgICAqIGNvbXB1dGUgaGlnaCBzcGVlZCB0cmFuc21pc3Npb24g Y291bnRlciB0aW1lb3V0IGFjY29yZGluZw0KPj4gKyAgICAgKiB0byB0aGUgdGltZW91dCBjbG9j ayBkaXZpc2lvbiAoVE9fQ0xLX0RJVklEU0lPTikgYW5kIGJ5dGUgbGFuZS4uLg0KPj4gKyAgICAg Ki8NCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1RPX0NOVF9DRkcsIEhTVFhfVE9fQ05UKDEw MDApIHwgDQo+PiBMUFJYX1RPX0NOVCgxMDAwKSk7DQo+PiArICAgIC8qDQo+PiArICAgICAqIFRP RE8gZHcgZHJ2IGltcHJvdmVtZW50cw0KPj4gKyAgICAgKiB0aGUgQnVzLVR1cm4tQXJvdW5kIFRp bWVvdXQgQ291bnRlciBzaG91bGQgYmUgY29tcHV0ZWQNCj4+ICsgICAgICogYWNjb3JkaW5nIHRv IGJ5dGUgbGFuZS4uLg0KPj4gKyAgICAgKi8NCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX0JU QV9UT19DTlQsIDB4ZDAwKTsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX01PREVfQ0ZHLCBF TkFCTEVfQ01EX01PREUpOw0KPj4gK30NCj4+ICsNCj4+ICsvKiBHZXQgbGFuZSBieXRlIGNsb2Nr IGN5Y2xlcy4gKi8NCj4+ICtzdGF0aWMgdTMyIGR3X21pcGlfZHNpX2dldF9oY29tcG9uZW50X2xi Y2Moc3RydWN0IGR3X21pcGlfZHNpICpkc2ksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IHUzMiBoY29tcG9uZW50KQ0KPj4gK3sNCj4+ICsgICAgdTMyIGZyYWMsIGxiY2M7DQo+PiArDQo+ PiArICAgIGxiY2MgPSBoY29tcG9uZW50ICogZHNpLT5sYW5lX21icHMgKiBNU0VDX1BFUl9TRUMg LyA4Ow0KPj4gKw0KPj4gKyAgICBmcmFjID0gbGJjYyAlIG1vZGUtPmNsb2NrOw0KPj4gKyAgICBs YmNjID0gbGJjYyAvIG1vZGUtPmNsb2NrOw0KPj4gKyAgICBpZiAoZnJhYykNCj4+ICsgICAgICAg IGxiY2MrKzsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIGxiY2M7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyB2b2lkIGR3X21pcGlfZHNpX2xpbmVfdGltZXJfY29uZmlnKHN0cnVjdCBkd19taXBpX2Rz aSAqZHNpLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9k ZSAqbW9kZSkNCj4+ICt7DQo+PiArICAgIHUzMiBodG90YWwsIGhzYSwgaGJwLCBsYmNjOw0KPj4g Kw0KPj4gKyAgICBodG90YWwgPSBtb2RlLT5odG90YWw7DQo+PiArICAgIGhzYSA9IG1vZGUtPmhz eW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0Ow0KPj4gKyAgICBoYnAgPSBtb2RlLT5odG90YWwg LSBtb2RlLT5oc3luY19lbmQ7DQo+PiArDQo+PiArICAgIC8qDQo+PiArICAgICAqIFRPRE8gZHcg ZHJ2IGltcHJvdmVtZW50cw0KPj4gKyAgICAgKiBjb21wdXRhdGlvbnMgYmVsb3cgbWF5IGJlIGlt cHJvdmVkLi4uDQo+PiArICAgICAqLw0KPj4gKyAgICBsYmNjID0gZHdfbWlwaV9kc2lfZ2V0X2hj b21wb25lbnRfbGJjYyhkc2ksIG1vZGUsIGh0b3RhbCk7DQo+PiArICAgIGRzaV93cml0ZShkc2ks IERTSV9WSURfSExJTkVfVElNRSwgbGJjYyk7DQo+PiArDQo+PiArICAgIGxiY2MgPSBkd19taXBp X2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgbW9kZSwgaHNhKTsNCj4+ICsgICAgZHNpX3dy aXRlKGRzaSwgRFNJX1ZJRF9IU0FfVElNRSwgbGJjYyk7DQo+PiArDQo+PiArICAgIGxiY2MgPSBk d19taXBpX2RzaV9nZXRfaGNvbXBvbmVudF9sYmNjKGRzaSwgbW9kZSwgaGJwKTsNCj4+ICsgICAg ZHNpX3dyaXRlKGRzaSwgRFNJX1ZJRF9IQlBfVElNRSwgbGJjYyk7DQo+PiArfQ0KPj4gKw0KPj4g K3N0YXRpYyB2b2lkIGR3X21pcGlfZHNpX3ZlcnRpY2FsX3RpbWluZ19jb25maWcoc3RydWN0IGR3 X21pcGlfZHNpICpkc2ksDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+PiArew0KPj4gKyAgICB1MzIgdmFjdGl2ZSwgdnNhLCB2 ZnAsIHZicDsNCj4+ICsNCj4+ICsgICAgdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5Ow0KPj4gKyAg ICB2c2EgPSBtb2RlLT52c3luY19lbmQgLSBtb2RlLT52c3luY19zdGFydDsNCj4+ICsgICAgdmZw ID0gbW9kZS0+dnN5bmNfc3RhcnQgLSBtb2RlLT52ZGlzcGxheTsNCj4+ICsgICAgdmJwID0gbW9k ZS0+dnRvdGFsIC0gbW9kZS0+dnN5bmNfZW5kOw0KPj4gKw0KPj4gKyAgICBkc2lfd3JpdGUoZHNp LCBEU0lfVklEX1ZBQ1RJVkVfTElORVMsIHZhY3RpdmUpOw0KPj4gKyAgICBkc2lfd3JpdGUoZHNp LCBEU0lfVklEX1ZTQV9MSU5FUywgdnNhKTsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1ZJ RF9WRlBfTElORVMsIHZmcCk7DQo+PiArICAgIGRzaV93cml0ZShkc2ksIERTSV9WSURfVkJQX0xJ TkVTLCB2YnApOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9kcGh5 X3RpbWluZ19jb25maWcoc3RydWN0IGR3X21pcGlfZHNpICpkc2kpDQo+PiArew0KPj4gKyAgICAv Kg0KPj4gKyAgICAgKiBUT0RPIGR3IGRydiBpbXByb3ZlbWVudHMNCj4+ICsgICAgICogZGF0YSAm IGNsb2NrIGxhbmUgdGltZXJzIHNob3VsZCBiZSBjb21wdXRlZCBhY2NvcmRpbmcgdG8gcGFuZWwN Cj4+ICsgICAgICogYmxhbmtpbmdzIGFuZCB0byB0aGUgYXV0b21hdGljIGNsb2NrIGxhbmUgY29u dHJvbCBtb2RlLi4uDQo+PiArICAgICAqIG5vdGU6IERTSV9QSFlfVE1SX0NGRy5NQVhfUkRfVElN RSBzaG91bGQgYmUgaW4gbGluZSB3aXRoDQo+PiArICAgICAqIERTSV9DTURfTU9ERV9DRkcuTUFY X1JEX1BLVF9TSVpFX0xQIChzZWUgQ01EX01PREVfQUxMX0xQKQ0KPj4gKyAgICAgKi8NCj4+ICsg ICAgZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfQ0ZHLCBQSFlfSFMyTFBfVElNRSgweDQwKQ0K Pj4gKyAgICAgICAgICB8IFBIWV9MUDJIU19USU1FKDB4NDApIHwgTUFYX1JEX1RJTUUoMTAwMDAp KTsNCj4+ICsNCj4+ICsgICAgZHNpX3dyaXRlKGRzaSwgRFNJX1BIWV9UTVJfTFBDTEtfQ0ZHLCBQ SFlfQ0xLSFMyTFBfVElNRSgweDQwKQ0KPj4gKyAgICAgICAgICB8IFBIWV9DTEtMUDJIU19USU1F KDB4NDApKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9p bnRlcmZhY2VfY29uZmlnKHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQ0KPj4gK3sNCj4+ICsgICAg LyoNCj4+ICsgICAgICogVE9ETyBkdyBkcnYgaW1wcm92ZW1lbnRzDQo+PiArICAgICAqIHN0b3Ag d2FpdCB0aW1lIHNob3VsZCBiZSB0aGUgbWF4aW11bSBiZXR3ZWVuIGhvc3QgZHNpDQo+PiArICAg ICAqIGFuZCBwYW5lbCBzdG9wIHdhaXQgdGltZXMNCj4+ICsgICAgICovDQo+PiArICAgIGRzaV93 cml0ZShkc2ksIERTSV9QSFlfSUZfQ0ZHLCBQSFlfU1RPUF9XQUlUX1RJTUUoMHgyMCkgfA0KPj4g KyAgICAgICAgICBOX0xBTkVTKGRzaS0+bGFuZXMpKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9pbml0KHN0cnVjdCBkd19taXBpX2RzaSAqZHNpKQ0KPj4g K3sNCj4+ICsgICAgLyogQ2xlYXIgUEhZIHN0YXRlICovDQo+PiArICAgIGRzaV93cml0ZShkc2ks IERTSV9QSFlfUlNUWiwgUEhZX0RJU0ZPUkNFUExMIHwgUEhZX0RJU0FCTEVDTEsNCj4+ICsgICAg ICAgICAgfCBQSFlfUlNUWiB8IFBIWV9TSFVURE9XTlopOw0KPj4gKyAgICBkc2lfd3JpdGUoZHNp LCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZX1VOVEVTVENMUik7DQo+PiArICAgIGRzaV93cml0ZShk c2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVEVTVENMUik7DQo+PiArICAgIGRzaV93cml0ZShk c2ksIERTSV9QSFlfVFNUX0NUUkwwLCBQSFlfVU5URVNUQ0xSKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZHBoeV9lbmFibGUoc3RydWN0IGR3X21pcGlfZHNpICpk c2kpDQo+PiArew0KPj4gKyAgICB1MzIgdmFsOw0KPj4gKyAgICBpbnQgcmV0Ow0KPj4gKw0KPj4g KyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1JTVFosIFBIWV9FTkZPUkNFUExMIHwgUEhZX0VO QUJMRUNMSyB8DQo+PiArICAgICAgICAgIFBIWV9VTlJTVFogfCBQSFlfVU5TSFVURE9XTlopOw0K Pj4gKw0KPj4gKyAgICByZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BI WV9TVEFUVVMsDQo+PiArICAgICAgICAgICAgICAgICB2YWwsIHZhbCAmIExPQ0ssIDEwMDAsIFBI WV9TVEFUVVNfVElNRU9VVF9VUyk7DQo+PiArICAgIGlmIChyZXQgPCAwKQ0KPj4gKyAgICAgICAg RFJNX0RFQlVHX0RSSVZFUigiZmFpbGVkIHRvIHdhaXQgcGh5IGxvY2sgc3RhdGVcbiIpOw0KPj4g Kw0KPj4gKyAgICByZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQoZHNpLT5iYXNlICsgRFNJX1BIWV9T VEFUVVMsDQo+PiArICAgICAgICAgICAgICAgICB2YWwsIHZhbCAmIFNUT1BfU1RBVEVfQ0xLX0xB TkUsIDEwMDAsDQo+PiArICAgICAgICAgICAgICAgICBQSFlfU1RBVFVTX1RJTUVPVVRfVVMpOw0K Pj4gKyAgICBpZiAocmV0IDwgMCkNCj4+ICsgICAgICAgIERSTV9ERUJVR19EUklWRVIoImZhaWxl ZCB0byB3YWl0IHBoeSBjbGsgbGFuZSBzdG9wIHN0YXRlXG4iKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfY2xlYXJfZXJyKHN0cnVjdCBkd19taXBpX2RzaSAqZHNp KQ0KPj4gK3sNCj4+ICsgICAgZHNpX3JlYWQoZHNpLCBEU0lfSU5UX1NUMCk7DQo+PiArICAgIGRz aV9yZWFkKGRzaSwgRFNJX0lOVF9TVDEpOw0KPj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfSU5U X01TSzAsIDApOw0KPj4gKyAgICBkc2lfd3JpdGUoZHNpLCBEU0lfSU5UX01TSzEsIDApOw0KPj4g K30NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfcG9zdF9kaXNhYmxl KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgZHdfbWlw aV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsNCj4+ICsNCj4+ICsgICAgLyoNCj4+ ICsgICAgICogU3dpdGNoIHRvIGNvbW1hbmQgbW9kZSBiZWZvcmUgcGFuZWwtYnJpZGdlIHBvc3Rf ZGlzYWJsZSAmDQo+PiArICAgICAqIHBhbmVsIHVucHJlcGFyZS4NCj4+ICsgICAgICogTm90ZTog cGFuZWwtYnJpZGdlIGRpc2FibGUgJiBwYW5lbCBkaXNhYmxlIGhhcyBiZWVuIGNhbGxlZA0KPj4g KyAgICAgKiBiZWZvcmUgYnkgdGhlIGRybSBmcmFtZXdvcmsuDQo+PiArICAgICAqLw0KPj4gKyAg ICBkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIDApOw0KPj4gKw0KPj4gKyAgICAvKg0KPj4gKyAg ICAgKiBUT0RPIE9ubHkgd2F5IGZvdW5kIHRvIGNhbGwgcGFuZWwtYnJpZGdlIHBvc3RfZGlzYWJs ZSAmDQo+PiArICAgICAqIHBhbmVsIHVucHJlcGFyZSBiZWZvcmUgdGhlIGRzaSAiZmluYWwiIGRp c2FibGUuLi4NCj4+ICsgICAgICogVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiB0aGUgZHJtX2Jy aWRnZSBmcmFtZXdvcmsgYW5kIHRoZSBBUEkNCj4+ICsgICAgICogbmVlZHMgdG8gYmUgdXBkYXRl ZCB0byBtYW5hZ2Ugb3VyIG93biBjYWxsIGNoYWlucy4uLg0KPj4gKyAgICAgKi8NCj4+ICsgICAg ZHNpLT5wYW5lbF9icmlkZ2UtPmZ1bmNzLT5wb3N0X2Rpc2FibGUoZHNpLT5wYW5lbF9icmlkZ2Up Ow0KPj4gKw0KPj4gKyAgICBkd19taXBpX2RzaV9kaXNhYmxlKGRzaSk7DQo+PiArICAgIGNsa19k aXNhYmxlX3VucHJlcGFyZShkc2ktPnBjbGspOw0KPj4gKyAgICBwbV9ydW50aW1lX3B1dChkc2kt PmRldik7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQgZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfc2V0 KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsDQo+PiArICAgICAgICAgICAgICAgICBzdHJ1Y3Qg ZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwNCj4+ICsgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IGR3X21p cGlfZHNpICpkc2kgPSBicmlkZ2VfdG9fZHNpKGJyaWRnZSk7DQo+PiArICAgIGNvbnN0IHN0cnVj dCBkd19taXBpX2RzaV9waHlfb3BzICpwaHlfb3BzID0gZHNpLT5wbGF0X2RhdGEtPnBoeV9vcHM7 DQo+PiArICAgIHZvaWQgKnByaXZfZGF0YSA9IGRzaS0+cGxhdF9kYXRhLT5wcml2X2RhdGE7DQo+ PiArICAgIGludCByZXQ7DQo+PiArDQo+PiArICAgIGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPnBj bGspOw0KPj4gKw0KPj4gKyAgICByZXQgPSBwaHlfb3BzLT5nZXRfbGFuZV9tYnBzKHByaXZfZGF0 YSwgbW9kZSwgZHNpLT5tb2RlX2ZsYWdzLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgIGRzaS0+ bGFuZXMsIGRzaS0+Zm9ybWF0LCAmZHNpLT5sYW5lX21icHMpOw0KPj4gKyAgICBpZiAocmV0KQ0K Pj4gKyAgICAgICAgRFJNX0RFQlVHX0RSSVZFUigiUGh5IGdldF9sYW5lX21icHMoKSBmYWlsZWRc biIpOw0KPj4gKw0KPj4gKyAgICBwbV9ydW50aW1lX2dldF9zeW5jKGRzaS0+ZGV2KTsNCj4+ICsg ICAgZHdfbWlwaV9kc2lfaW5pdChkc2kpOw0KPj4gKyAgICBkd19taXBpX2RzaV9kcGlfY29uZmln KGRzaSwgbW9kZSk7DQo+PiArICAgIGR3X21pcGlfZHNpX3BhY2tldF9oYW5kbGVyX2NvbmZpZyhk c2kpOw0KPj4gKyAgICBkd19taXBpX2RzaV92aWRlb19tb2RlX2NvbmZpZyhkc2kpOw0KPj4gKyAg ICBkd19taXBpX2RzaV92aWRlb19wYWNrZXRfY29uZmlnKGRzaSwgbW9kZSk7DQo+PiArICAgIGR3 X21pcGlfZHNpX2NvbW1hbmRfbW9kZV9jb25maWcoZHNpKTsNCj4+ICsgICAgZHdfbWlwaV9kc2lf bGluZV90aW1lcl9jb25maWcoZHNpLCBtb2RlKTsNCj4+ICsgICAgZHdfbWlwaV9kc2lfdmVydGlj YWxfdGltaW5nX2NvbmZpZyhkc2ksIG1vZGUpOw0KPj4gKw0KPj4gKyAgICBkd19taXBpX2RzaV9k cGh5X2luaXQoZHNpKTsNCj4+ICsgICAgZHdfbWlwaV9kc2lfZHBoeV90aW1pbmdfY29uZmlnKGRz aSk7DQo+PiArICAgIGR3X21pcGlfZHNpX2RwaHlfaW50ZXJmYWNlX2NvbmZpZyhkc2kpOw0KPj4g Kw0KPj4gKyAgICBkd19taXBpX2RzaV9jbGVhcl9lcnIoZHNpKTsNCj4+ICsNCj4+ICsgICAgcmV0 ID0gcGh5X29wcy0+aW5pdChwcml2X2RhdGEpOw0KPj4gKyAgICBpZiAocmV0KQ0KPj4gKyAgICAg ICAgRFJNX0RFQlVHX0RSSVZFUigiUGh5IGluaXQoKSBmYWlsZWRcbiIpOw0KPj4gKw0KPj4gKyAg ICBkd19taXBpX2RzaV9kcGh5X2VuYWJsZShkc2kpOw0KPj4gKw0KPj4gKyAgICBkd19taXBpX2Rz aV93YWl0X2Zvcl90d29fZnJhbWVzKG1vZGUpOw0KPj4gKw0KPj4gKyAgICAvKiBTd2l0Y2ggdG8g Y21kIG1vZGUgZm9yIHBhbmVsLWJyaWRnZSBwcmVfZW5hYmxlICYgcGFuZWwgcHJlcGFyZSAqLw0K Pj4gKyAgICBkd19taXBpX2RzaV9zZXRfbW9kZShkc2ksIDApOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgdm9pZCBkd19taXBpX2RzaV9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpi cmlkZ2UpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90 b19kc2koYnJpZGdlKTsNCj4+ICsNCj4+ICsgICAgLyogU3dpdGNoIHRvIHZpZGVvIG1vZGUgZm9y IHBhbmVsLWJyaWRnZSBlbmFibGUgJiBwYW5lbCBlbmFibGUgKi8NCj4+ICsgICAgZHdfbWlwaV9k c2lfc2V0X21vZGUoZHNpLCBNSVBJX0RTSV9NT0RFX1ZJREVPKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGVudW0gZHJtX21vZGVfc3RhdHVzDQo+PiArZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVf dmFsaWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4+ICsgICAgICAgICAgICAgICAgICBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkNCj4+ICt7DQo+PiArICAgIHN0cnVj dCBkd19taXBpX2RzaSAqZHNpID0gYnJpZGdlX3RvX2RzaShicmlkZ2UpOw0KPj4gKyAgICBjb25z dCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwZGF0YSA9IGRzaS0+cGxhdF9kYXRhOw0K Pj4gKyAgICBlbnVtIGRybV9tb2RlX3N0YXR1cyBtb2RlX3N0YXR1cyA9IE1PREVfT0s7DQo+PiAr DQo+PiArICAgIGlmIChwZGF0YS0+bW9kZV92YWxpZCkNCj4+ICsgICAgICAgIG1vZGVfc3RhdHVz ID0gcGRhdGEtPm1vZGVfdmFsaWQocGRhdGEtPnByaXZfZGF0YSwgbW9kZSk7DQo+PiArDQo+PiAr ICAgIHJldHVybiBtb2RlX3N0YXR1czsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkd19t aXBpX2RzaV9icmlkZ2VfYXR0YWNoKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+PiArew0K Pj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaSA9IGJyaWRnZV90b19kc2koYnJpZGdlKTsN Cj4+ICsNCj4+ICsgICAgaWYgKCFicmlkZ2UtPmVuY29kZXIpIHsNCj4+ICsgICAgICAgIERSTV9F UlJPUigiUGFyZW50IGVuY29kZXIgb2JqZWN0IG5vdCBmb3VuZFxuIik7DQo+PiArICAgICAgICBy ZXR1cm4gLUVOT0RFVjsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAvKiBTZXQgdGhlIGVuY29k ZXIgdHlwZSBhcyBjYWxsZXIgZG9lcyBub3Qga25vdyBpdCAqLw0KPj4gKyAgICBicmlkZ2UtPmVu Y29kZXItPmVuY29kZXJfdHlwZSA9IERSTV9NT0RFX0VOQ09ERVJfRFNJOw0KPj4gKw0KPj4gKyAg ICAvKiBBdHRhY2ggdGhlIHBhbmVsLWJyaWRnZSB0byB0aGUgZHNpIGJyaWRnZSAqLw0KPj4gKyAg ICByZXR1cm4gZHJtX2JyaWRnZV9hdHRhY2goYnJpZGdlLT5lbmNvZGVyLCBkc2ktPnBhbmVsX2Jy aWRnZSwgDQo+PiBicmlkZ2UpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IGRybV9i cmlkZ2VfZnVuY3MgZHdfbWlwaV9kc2lfYnJpZGdlX2Z1bmNzID0gew0KPj4gKyAgICAubW9kZV9z ZXQgICAgID0gZHdfbWlwaV9kc2lfYnJpZGdlX21vZGVfc2V0LA0KPj4gKyAgICAuZW5hYmxlICAg ICAgICAgID0gZHdfbWlwaV9kc2lfYnJpZGdlX2VuYWJsZSwNCj4+ICsgICAgLnBvc3RfZGlzYWJs ZSA9IGR3X21pcGlfZHNpX2JyaWRnZV9wb3N0X2Rpc2FibGUsDQo+PiArICAgIC5tb2RlX3ZhbGlk ICAgPSBkd19taXBpX2RzaV9icmlkZ2VfbW9kZV92YWxpZCwNCj4+ICsgICAgLmF0dGFjaCAgICAg ICAgICA9IGR3X21pcGlfZHNpX2JyaWRnZV9hdHRhY2gsDQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0 aWMgc3RydWN0IGR3X21pcGlfZHNpICoNCj4+ICtfX2R3X21pcGlfZHNpX3Byb2JlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYsDQo+PiArICAgICAgICAgICAgY29uc3Qgc3RydWN0IGR3X21p cGlfZHNpX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4+ICsgICAgc3RydWN0IHJlc2V0X2NvbnRyb2wgKmFwYl9y c3Q7DQo+PiArICAgIHN0cnVjdCBkd19taXBpX2RzaSAqZHNpOw0KPj4gKyAgICBzdHJ1Y3QgcmVz b3VyY2UgKnJlczsNCj4+ICsgICAgaW50IHJldDsNCj4+ICsNCj4+ICsgICAgZHNpID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VSTkVMKTsNCj4+ICsgICAgaWYgKCFkc2kp DQo+PiArICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCj4+ICsNCj4+ICsgICAgZHNp LT5kZXYgPSBkZXY7DQo+PiArICAgIGRzaS0+cGxhdF9kYXRhID0gcGxhdF9kYXRhOw0KPj4gKw0K Pj4gKyAgICBpZiAoIXBsYXRfZGF0YS0+cGh5X29wcy0+aW5pdCB8fCANCj4+ICFwbGF0X2RhdGEt PnBoeV9vcHMtPmdldF9sYW5lX21icHMpIHsNCj4+ICsgICAgICAgIERSTV9FUlJPUigiUGh5IG5v dCBwcm9wZXJseSBjb25maWd1cmVkXG4iKTsNCj4+ICsgICAgICAgIHJldHVybiBFUlJfUFRSKC1F Tk9ERVYpOw0KPj4gKyAgICB9DQo+PiArDQo+PiArICAgIGlmICghcGxhdF9kYXRhLT5iYXNlKSB7 DQo+PiArICAgICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJD RV9NRU0sIDApOw0KPj4gKyAgICAgICAgaWYgKCFyZXMpDQo+PiArICAgICAgICAgICAgcmV0dXJu IEVSUl9QVFIoLUVOT0RFVik7DQo+PiArDQo+PiArICAgICAgICBkc2ktPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KPj4gKyAgICAgICAgaWYgKElTX0VSUihkc2ktPmJh c2UpKQ0KPj4gKyAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9ERVYpOw0KPj4gKw0KPj4g KyAgICB9IGVsc2Ugew0KPj4gKyAgICAgICAgZHNpLT5iYXNlID0gcGxhdF9kYXRhLT5iYXNlOw0K Pj4gKyAgICB9DQo+PiArDQo+PiArICAgIGRzaS0+cGNsayA9IGRldm1fY2xrX2dldChkZXYsICJw Y2xrIik7DQo+PiArICAgIGlmIChJU19FUlIoZHNpLT5wY2xrKSkgew0KPj4gKyAgICAgICAgcmV0 ID0gUFRSX0VSUihkc2ktPnBjbGspOw0KPj4gKyAgICAgICAgZGV2X2VycihkZXYsICJVbmFibGUg dG8gZ2V0IHBjbGs6ICVkXG4iLCByZXQpOw0KPj4gKyAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0 KTsNCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICAvKg0KPj4gKyAgICAgKiBOb3RlIHRoYXQgdGhl IHJlc2V0IHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgaW5pdGlhbCBkZXZpY2UgDQo+PiB0cmVlLCBz bw0KPj4gKyAgICAgKiB3ZSBoYXZlIHRvIGJlIHByZXBhcmVkIGZvciBpdCBub3QgYmVpbmcgZm91 bmQuDQo+PiArICAgICAqLw0KPj4gKyAgICBhcGJfcnN0ID0gZGV2bV9yZXNldF9jb250cm9sX2dl dChkZXYsICJhcGIiKTsNCj4+ICsgICAgaWYgKElTX0VSUihhcGJfcnN0KSkgew0KPj4gKyAgICAg ICAgcmV0ID0gUFRSX0VSUihhcGJfcnN0KTsNCj4+ICsgICAgICAgIGlmIChyZXQgPT0gLUVOT0VO VCkgew0KPj4gKyAgICAgICAgICAgIGFwYl9yc3QgPSBOVUxMOw0KPj4gKyAgICAgICAgfSBlbHNl IHsNCj4+ICsgICAgICAgICAgICBkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBnZXQgcmVzZXQgY29u dHJvbDogJWRcbiIsIHJldCk7DQo+PiArICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsN Cj4+ICsgICAgICAgIH0NCj4+ICsgICAgfQ0KPj4gKw0KPj4gKyAgICBpZiAoYXBiX3JzdCkgew0K Pj4gKyAgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+cGNsayk7DQo+PiArICAg ICAgICBpZiAocmV0KSB7DQo+PiArICAgICAgICAgICAgZGV2X2VycihkZXYsICIlczogRmFpbGVk IHRvIGVuYWJsZSBwY2xrXG4iLCBfX2Z1bmNfXyk7DQo+PiArICAgICAgICAgICAgcmV0dXJuIEVS Ul9QVFIocmV0KTsNCj4+ICsgICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgIHJlc2V0X2NvbnRy b2xfYXNzZXJ0KGFwYl9yc3QpOw0KPj4gKyAgICAgICAgdXNsZWVwX3JhbmdlKDEwLCAyMCk7DQo+ PiArICAgICAgICByZXNldF9jb250cm9sX2RlYXNzZXJ0KGFwYl9yc3QpOw0KPj4gKw0KPj4gKyAg ICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRzaS0+cGNsayk7DQo+PiArICAgIH0NCj4+ICsN Cj4+ICsgICAgcG1fcnVudGltZV9lbmFibGUoZGV2KTsNCj4+ICsNCj4+ICsgICAgZHNpLT5kc2lf aG9zdC5vcHMgPSAmZHdfbWlwaV9kc2lfaG9zdF9vcHM7DQo+PiArICAgIGRzaS0+ZHNpX2hvc3Qu ZGV2ID0gZGV2Ow0KPj4gKyAgICByZXQgPSBtaXBpX2RzaV9ob3N0X3JlZ2lzdGVyKCZkc2ktPmRz aV9ob3N0KTsNCj4+ICsgICAgaWYgKHJldCkgew0KPj4gKyAgICAgICAgZGV2X2VycihkZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgTUlQSSBob3N0OiAlZFxuIiwgcmV0KTsNCj4+ICsgICAgICAgIHJl dHVybiBFUlJfUFRSKHJldCk7DQo+PiArICAgIH0NCj4+ICsNCj4+ICsgICAgZHNpLT5icmlkZ2Uu ZHJpdmVyX3ByaXZhdGUgPSBkc2k7DQo+PiArICAgIGRzaS0+YnJpZGdlLmZ1bmNzID0gJmR3X21p cGlfZHNpX2JyaWRnZV9mdW5jczsNCj4+ICsjaWZkZWYgQ09ORklHX09GDQo+PiArICAgIGRzaS0+ YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsNCj4+ICsjZW5kaWYNCj4+ICsNCj4+ ICsgICAgZGV2X3NldF9kcnZkYXRhKGRldiwgZHNpKTsNCj4+ICsNCj4+ICsgICAgcmV0dXJuIGRz aTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQgX19kd19taXBpX2RzaV9yZW1vdmUoc3Ry dWN0IGR3X21pcGlfZHNpICpkc2kpDQo+PiArew0KPj4gKyAgICBwbV9ydW50aW1lX2Rpc2FibGUo ZHNpLT5kZXYpOw0KPj4gK30NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIFByb2JlL3JlbW92ZSBBUEks IHVzZWQgZnJvbSBwbGF0Zm9ybXMgYmFzZWQgb24gdGhlIERSTSBicmlkZ2UgQVBJLg0KPj4gKyAq Lw0KPj4gK2ludCBkd19taXBpX2RzaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 LA0KPj4gKyAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAq cGxhdF9kYXRhKQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IGR3X21pcGlfZHNpICpkc2k7DQo+PiAr DQo+PiArICAgIGRzaSA9IF9fZHdfbWlwaV9kc2lfcHJvYmUocGRldiwgcGxhdF9kYXRhKTsNCj4+ ICsgICAgaWYgKElTX0VSUihkc2kpKQ0KPj4gKyAgICAgICAgcmV0dXJuIFBUUl9FUlIoZHNpKTsN Cj4+ICsNCj4+ICsgICAgcmV0dXJuIDA7DQo+PiArfQ0KPj4gK0VYUE9SVF9TWU1CT0xfR1BMKGR3 X21pcGlfZHNpX3Byb2JlKTsNCj4+ICsNCj4+ICt2b2lkIGR3X21pcGlfZHNpX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4gK3sNCj4+ICsgICAgc3RydWN0IGR3X21pcGlf ZHNpICpkc2kgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4+ICsNCj4+ICsgICAgbWlw aV9kc2lfaG9zdF91bnJlZ2lzdGVyKCZkc2ktPmRzaV9ob3N0KTsNCj4+ICsNCj4+ICsgICAgX19k d19taXBpX2RzaV9yZW1vdmUoZHNpKTsNCj4+ICt9DQo+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHdf bWlwaV9kc2lfcmVtb3ZlKTsNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIEJpbmQvdW5iaW5kIEFQSSwg dXNlZCBmcm9tIHBsYXRmb3JtcyBiYXNlZCBvbiB0aGUgY29tcG9uZW50IA0KPj4gZnJhbWV3b3Jr Lg0KPj4gKyAqLw0KPj4gK2ludCBkd19taXBpX2RzaV9iaW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYsIHN0cnVjdCBkcm1fZW5jb2RlciANCj4+ICplbmNvZGVyLA0KPj4gKyAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpwbGF0X2RhdGEpDQo+PiAr ew0KPj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRzaTsNCj4+ICsgICAgaW50IHJldDsNCj4+ ICsNCj4+ICsgICAgZHNpID0gX19kd19taXBpX2RzaV9wcm9iZShwZGV2LCBwbGF0X2RhdGEpOw0K Pj4gKyAgICBpZiAoSVNfRVJSKGRzaSkpDQo+PiArICAgICAgICByZXR1cm4gUFRSX0VSUihkc2kp Ow0KPj4gKw0KPj4gKyAgICByZXQgPSBkcm1fYnJpZGdlX2F0dGFjaChlbmNvZGVyLCAmZHNpLT5i cmlkZ2UsIE5VTEwpOw0KPj4gKyAgICBpZiAocmV0KSB7DQo+PiArICAgICAgICBkd19taXBpX2Rz aV9yZW1vdmUocGRldik7DQo+PiArICAgICAgICBEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFs aXplIGJyaWRnZSB3aXRoIGRybVxuIik7DQo+PiArICAgICAgICByZXR1cm4gcmV0Ow0KPj4gKyAg ICB9DQo+PiArDQo+PiArICAgIHJldHVybiAwOw0KPj4gK30NCj4+ICtFWFBPUlRfU1lNQk9MX0dQ TChkd19taXBpX2RzaV9iaW5kKTsNCj4+ICsNCj4+ICt2b2lkIGR3X21pcGlfZHNpX3VuYmluZChz dHJ1Y3QgZGV2aWNlICpkZXYpDQo+PiArew0KPj4gKyAgICBzdHJ1Y3QgZHdfbWlwaV9kc2kgKmRz aSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPj4gKw0KPj4gKyAgICBfX2R3X21pcGlfZHNpX3Jl bW92ZShkc2kpOw0KPj4gK30NCj4+ICtFWFBPUlRfU1lNQk9MX0dQTChkd19taXBpX2RzaV91bmJp bmQpOw0KPj4gKw0KPj4gK01PRFVMRV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlw cy5jb20+Iik7DQo+PiArTU9EVUxFX0FVVEhPUigiUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNv cm51QHN0LmNvbT4iKTsNCj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkRXIE1JUEkgRFNJIGhvc3Qg Y29udHJvbGxlciBkcml2ZXIiKTsNCj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7DQo+PiArTU9E VUxFX0FMSUFTKCJwbGF0Zm9ybTpkdy1taXBpLWRzaSIpOw0KPj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvZHJtL2JyaWRnZS9kd19taXBpX2RzaS5oIA0KPj4gYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdf bWlwaV9kc2kuaA0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+IGluZGV4IDAwMDAwMDAuLjli MzBmZWMNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2luY2x1ZGUvZHJtL2JyaWRnZS9kd19t aXBpX2RzaS5oDQo+PiBAQCAtMCwwICsxLDM5IEBADQo+PiArLyoNCj4+ICsgKiBDb3B5cmlnaHQg KEMpIFNUTWljcm9lbGVjdHJvbmljcyBTQSAyMDE3DQo+PiArICoNCj4+ICsgKiBBdXRob3JzOiBQ aGlsaXBwZSBDb3JudSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPg0KPj4gKyAqICAgICAgICAgIFlh bm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+DQo+PiArICoNCj4+ICsgKiBMaWNl bnNlIHRlcm1zOiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHZlcnNpb24gMg0K Pj4gKyAqLw0KPj4gKw0KPj4gKyNpZm5kZWYgX19EV19NSVBJX0RTSV9fDQo+PiArI2RlZmluZSBf X0RXX01JUElfRFNJX18NCj4+ICsNCj4+ICtzdHJ1Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyB7DQo+ PiArICAgIGludCAoKmluaXQpKHZvaWQgKnByaXZfZGF0YSk7DQo+PiArICAgIGludCAoKmdldF9s YW5lX21icHMpKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs DQo+PiArICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZGVfZmxhZ3MsIHUzMiBsYW5l cywgdTMyIGZvcm1hdCwNCj4+ICsgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqbGFuZV9t YnBzKTsNCj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEgew0K Pj4gKyAgICB2b2lkIF9faW9tZW0gKmJhc2U7DQo+PiArICAgIHVuc2lnbmVkIGludCBtYXhfZGF0 YV9sYW5lczsNCj4+ICsNCj4+ICsgICAgZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlk KSh2b2lkICpwcml2X2RhdGEsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7DQo+PiArDQo+PiArICAgIGNvbnN0IHN0cnVjdCBk d19taXBpX2RzaV9waHlfb3BzICpwaHlfb3BzOw0KPj4gKw0KPj4gKyAgICB2b2lkICpwcml2X2Rh dGE7DQo+PiArfTsNCj4+ICsNCj4+ICtpbnQgZHdfbWlwaV9kc2lfcHJvYmUoc3RydWN0IHBsYXRm b3JtX2RldmljZSAqcGRldiwNCj4+ICsgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkd19taXBp X2RzaV9wbGF0X2RhdGEgKnBsYXRfZGF0YSk7DQo+PiArdm9pZCBkd19taXBpX2RzaV9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7DQo+PiAraW50IGR3X21pcGlfZHNpX2JpbmQo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgc3RydWN0IGRybV9lbmNvZGVyIA0KPj4gKmVu Y29kZXIsDQo+PiArICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2Rh dGEgKnBsYXRfZGF0YSk7DQo+PiArdm9pZCBkd19taXBpX2RzaV91bmJpbmQoc3RydWN0IGRldmlj ZSAqZGV2KTsNCj4+ICsNCj4+ICsjZW5kaWYgLyogX19EV19NSVBJX0RTSV9fICovDQo+Pg0KPiAK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==