From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: Re: [PATCH v1 3/3] drm/panel: Add support for otm8009a panel driver Date: Thu, 6 Jul 2017 14:44:48 +0000 Message-ID: <56809e05-0816-e7dc-cfea-c4dc73c8daca@st.com> References: <1499185805-23354-1-git-send-email-philippe.cornu@st.com> <1499185805-23354-4-git-send-email-philippe.cornu@st.com> <57bff5e0-fb02-a599-ecb4-983a2d110ba5@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx07-00178001.pphosted.com [62.209.51.94]) by gabe.freedesktop.org (Postfix) with ESMTPS id 10BC86E616 for ; Thu, 6 Jul 2017 14:45:04 +0000 (UTC) In-Reply-To: <57bff5e0-fb02-a599-ecb4-983a2d110ba5@samsung.com> Content-Language: en-US Content-ID: <8A96F56A88BD644F9EDF27FC8E0CA3E8@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrzej Hajda , Alexandre TORGUE , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick FERTRE , Archit Taneja 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 DQoNCk9uIDA3LzA1LzIwMTcgMTE6MjggQU0sIEFuZHJ6ZWogSGFqZGEgd3JvdGU6DQo+IE9uIDA0 LjA3LjIwMTcgMTg6MzAsIFBoaWxpcHBlIENPUk5VIHdyb3RlOg0KPj4gVGhpcyBwYXRjaCBhZGRz IE9yaXNlIFRlY2ggb3RtODAwOWEgMy45NyIgNDgweDgwMCBURlQgTENEDQo+PiBwYW5lbCBkcml2 ZXIgKE1JUEktRFNJIHZpZGVvIG1vZGUpLiBUaGUgcGFuZWwgYmFja2xpZ2h0IGlzDQo+PiBtYW5h Z2VkIHRocm91Z2ggdGhlIERTSSBsaW5rLiBUaGlzIHBhbmVsIGRyaXZlciBpcyB1c2VkIGluDQo+ PiBzZXZlcmFsIFNUTTMyIGJvYXJkcy4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBQaGlsaXBwZSBD T1JOVSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPg0KPj4gLS0tDQo+PiAgIGRyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICB8ICAgOSArDQo+PiAgIGRyaXZlcnMv Z3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+PiAgIGRy aXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEuYyB8IDUxNyArKysr KysrKysrKysrKysrKysrKysrKw0KPj4gICAzIGZpbGVzIGNoYW5nZWQsIDUyNyBpbnNlcnRpb25z KCspDQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt b3Jpc2V0ZWNoLW90bTgwMDlhLmMNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZw0KPj4gaW5kZXgg ZDg0YTAzMS4uYzFjOTI5MSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZw0KPj4gQEAgLTEx Nyw0ICsxMTcsMTMgQEAgY29uZmlnIERSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWDQo+PiAgIAkg IFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBTaXRyb25p eA0KPj4gICAJICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscw0KPj4g ICANCj4+ICtjb25maWcgRFJNX1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QQ0KPj4gKwl0cmlzdGF0 ZSAiT3Jpc2UgVGVjaCBvdG04MDA5YSA0ODBwIGRzaSAyZGwgdmlkZW8gbW9kZSBwYW5lbCINCj4+ ICsJZGVwZW5kcyBvbiBPRg0KPj4gKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQ0KPj4gKwlkZXBl bmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UNCj4+ICsJaGVscA0KPj4gKwkgIFNheSBZIGhl cmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIE9yaXNlIFRlY2ggT1RNODAwOUEN Cj4+ICsJICA0ODB4ODAwIERTSSBwYW5lbA0KPj4gKw0KPj4gICBlbmRtZW51DQo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL01ha2VmaWxlDQo+PiBpbmRleCA5ZjY2MTBkLi5hYzc5OGYzIDEwMDY0NA0KPj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUNCj4+IEBAIC0xMCwzICsxMCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFO RUxfU0FNU1VOR19TNkU4QUEwKSArPSBwYW5lbC1zYW1zdW5nLXM2ZThhYTAubw0KPj4gICBvYmot JChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSArPSBwYW5lbC1zaGFycC1scTEw MXIxc3gwMS5vDQo+PiAgIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFMwNDNUMUxFMDEp ICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8NCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8NCj4+ICtvYmot JChDT05GSUdfRFJNX1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QSkgKz0gcGFuZWwtb3Jpc2V0ZWNo LW90bTgwMDlhLm8NCj4+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEuYyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEuYw0KPj4gbmV3IGZp bGUgbW9kZSAxMDA3NTUNCj4+IGluZGV4IDAwMDAwMDAuLjdhZWZjMDkNCj4+IC0tLSAvZGV2L251 bGwNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAw OWEuYw0KPj4gQEAgLTAsMCArMSw1MTcgQEANCj4+ICsvKg0KPj4gKyAqIENvcHlyaWdodCAoQykg U1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcNCj4+ICsgKg0KPj4gKyAqIEF1dGhvcnM6IFBoaWxp cHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+DQo+PiArICogICAgICAgICAgWWFubmlj ayBGZXJ0cmUgPHlhbm5pY2suZmVydHJlQHN0LmNvbT4NCj4+ICsgKg0KPj4gKyAqIExpY2Vuc2Ug dGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdmVyc2lvbiAyDQo+PiAr ICovDQo+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+DQo+PiArI2luY2x1ZGUgPGRybS9kcm1fbWlw aV9kc2kuaD4NCj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPg0KPj4gKyNpbmNsdWRlIDxs aW51eC9iYWNrbGlnaHQuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPg0K Pj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4NCj4+ICsNCj4+ICsjZGVmaW5lIERS Vl9OQU1FICJvcmlzZXRlY2hfb3RtODAwOWEiDQo+PiArDQo+PiArI2RlZmluZSBPVE04MDA5QV9C QUNLTElHSFRfREVGQVVMVAkyNDANCj4+ICsjZGVmaW5lIE9UTTgwMDlBX0JBQ0tMSUdIVF9NQVgJ CTI1NQ0KPj4gKw0KPj4gK3N0cnVjdCBvdG04MDA5YSB7DQo+PiArCXN0cnVjdCBkZXZpY2UgKmRl djsNCj4+ICsJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsNCj4+ICsJc3RydWN0IGJhY2tsaWdodF9k ZXZpY2UgKmJsX2RldjsNCj4+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsNCj4+ICsJ Ym9vbCBwcmVwYXJlZDsNCj4+ICsJYm9vbCBlbmFibGVkOw0KPj4gK307DQo+PiArDQo+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGRlZmF1bHRfbW9kZSA9IHsNCj4+ICsJ LmNsb2NrID0gMzI3MjksDQo+PiArCS5oZGlzcGxheSA9IDQ4MCwNCj4+ICsJLmhzeW5jX3N0YXJ0 ID0gNDgwICsgMTIwLA0KPj4gKwkuaHN5bmNfZW5kID0gNDgwICsgMTIwICsgNjMsDQo+PiArCS5o dG90YWwgPSA0ODAgKyAxMjAgKyA2MyArIDEyMCwNCj4+ICsJLnZkaXNwbGF5ID0gODAwLA0KPj4g KwkudnN5bmNfc3RhcnQgPSA4MDAgKyAxMiwNCj4+ICsJLnZzeW5jX2VuZCA9IDgwMCArIDEyICsg MTIsDQo+PiArCS52dG90YWwgPSA4MDAgKyAxMiArIDEyICsgMTIsDQo+PiArCS52cmVmcmVzaCA9 IDUwLA0KPj4gKwkuZmxhZ3MgPSAwLA0KPj4gKwkud2lkdGhfbW0gPSA1MiwNCj4+ICsJLmhlaWdo dF9tbSA9IDg2LA0KPj4gK307DQo+PiArDQo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3RtODAw OWEgKnBhbmVsX3RvX290bTgwMDlhKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQ0KPj4gK3sNCj4+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IG90bTgwMDlhLCBwYW5lbCk7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIG90bTgwMDlhX2Rjc193cml0ZV9idWYoc3RydWN0 IG90bTgwMDlhICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsDQo+PiArCQkJCSAgIHNpemVfdCBsZW4p DQo+PiArew0KPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9k ZXZpY2UoY3R4LT5kZXYpOw0KPj4gKw0KPj4gKwlpZiAobWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZl cihkc2ksIGRhdGEsIGxlbikgPCAwKQ0KPj4gKwkJRFJNX1dBUk4oIm1pcGkgZHNpIGRjcyB3cml0 ZSBidWZmZXIgZmFpbGVkIik7DQo+IA0KPiBOZXcgbGluZSBhdCB0aGUgZW5kIG9mIHN0cmluZy4N Cj4gDQo+IEkgc2VlIGFub3RoZXIgd2F5IG9mIGZpZ2h0aW5nIHdpdGggZXJyb3IgaGFuZGxpbmcs IGl0cyBkcmF3YmFjayBpcyB0aGF0DQo+IGZhaWx1cmUgZG9lcyBub3QgcHJldmVudCBmdXJ0aGVy IGV4ZWN1dGlvbi4NCj4gU2luY2UgSSBhbSBsb3N0IHdoYXQgZXJyb3IgaGFuZGxpbmcgcGF0dGVy biBpcyBjdXJyZW50bHkgYWNjZXB0ZWQgaW4NCj4gcGFuZWxzIHN1YnN5c3RlbSwgSSBjYW5ub3Qg YWR2aWNlIGlmIHRoaXMgc2hvdWxkIGJlIGNoYW5nZWQuDQo+IA0KDQpIaSBBbmRyemVmLA0KDQpG aXJzdCBvZiBhbGwsIGEgYmlnICpUSEFOSyBZT1UqIGZvciB0aGlzIG5pY2UgY29kZSByZXZpZXcu IFlvdXIgY29tbWVudHMgDQphcmUgdmVyeSByZWxldmFudCA6LSkNCg0KUmVnYXJkaW5nIHRoZSBl cnJvciBtYW5hZ2VtZW50LCB0aGVyZSBhcmUgYWN0dWFsbHkgc2V2ZXJhbCBzb2x1dGlvbnMgdG8g DQpkZWFsIHdpdGggZXJyb3JzIGJ1dCBJIGNvbmZlc3MgdGhhdCBmb3IgdGhlIG1vbWVudCBub25l IHJlYWxseSBjb252aW5jZWQgDQptZS4uLiB0aGF0IGlzIHdoeSBJIHByb3Bvc2VkIGhlcmUgdGhl ICptaW5pbWFsIHNvbHV0aW9uIG9mIHRoZSB0cmFjZSouLi4NCg0KPj4gK30NCj4+ICsNCj4+ICsj ZGVmaW5lIGRjc193cml0ZV9zZXEoc2VxLi4uKQkJCQkJXA0KPj4gKwlkbyB7CQkJCQkJCVwNCj4+ ICsJCXN0YXRpYyBjb25zdCB1OCBkW10gPSB7IHNlcSB9OwkJCVwNCj4+ICsJCW90bTgwMDlhX2Rj c193cml0ZV9idWYoY3R4LCBkLCBBUlJBWV9TSVpFKGQpKTsJXA0KPj4gKwl9IHdoaWxlICgwKQ0K PiANCj4gSXQgaXMgdXAgdG8geW91ciBwcmVmZXJlbmNlcywgYnV0IEkgdGhpbmsgImRvIHt9IHdo aWxlKDApIiBjb25zdHJ1Y3QgaXMNCj4ga2luZCBvZiB3b3JrYXJvdW5kIGFuZCBpcyBvYnNvbGV0 ZWQgaW4gZmF2b3Igb2YgKHsgLi4uIH0pIHN0YXRlbWVudA0KPiBleHByZXNzaW9uc1sxXS4NCj4g TW9yZSBzZXJpb3VzIGlzc3VlIGlzIHRoYXQgeW91IGFyZSB1c2luZyBjdHggaW1wbGljaXRseSwg aXQgc2hvdWxkIGJlDQo+IGFkZGVkIGFzIG1hY3JvIGFyZ3VtZW50Lg0KPiANCj4gWzFdOiBodHRw czovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL1N0YXRlbWVudC1FeHBycy5odG1sDQo+IA0K DQpJIHdpbGwgZm9sbG93IHlvdXIgcHJvcG9zYWwsIHRoYW5rIHlvdSBzbyBtdWNoIGZvciB0aGVz ZSBpbmZvcm1hdGlvbi4NCg0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfaW5pdF9zZXF1 ZW5jZShzdHJ1Y3Qgb3RtODAwOWEgKmN0eCkNCj4+ICt7DQo+PiArCXN0cnVjdCBtaXBpX2RzaV9k ZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7DQo+PiArCWludCByZXQ7 DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIENNRDJfRU5BMTogRW50ZXIgaW4gQ29tbWFuZCAyIG1v ZGUsIGVuYWJsZSB3cml0ZSBmdW5jdGlvbiBvZg0KPj4gKwkgKiBDb21tYW5kIDIgJiBlbmFibGUg cGFyYW1ldGVyIHNoaWZ0IGZ1bmN0aW9uLg0KPj4gKwkgKiBUaGUgMyBmb2xsb3dpbmcgc2VxdWVu Y2VzIGFsbG93IHRvIGVuYWJsZSBPUklTRSBjb21tYW5kIG1vZGUuDQo+PiArCSAqLw0KPj4gKwlk Y3Nfd3JpdGVfc2VxKDB4RkYsIDB4ODAsIDB4MDksIDB4MDEpOw0KPiANCj4gSSB0aGluayBpdCB3 b3VsZCBiZSBtb3JlIHJlYWRhYmxlIGlmIHlvdSB1c2UgZGVmaW5lcyBmb3IgRENTIGFuZCBNQ1MN Cj4gKE1hbnVmYWN0dXJlciBDb21tYW5kIFNldCksIGZvciBleGFtcGxlOg0KPiAjZGVmaW5lIE1D U19DTUQyIDB4ZmYNCj4gLi4uDQo+ICAgICAgZGNzX3dyaXRlX3NlcShjdHgsIE1DU19DTUQyLCAw eDgwLCAweDA5LCAweDAxKTsNCj4gDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4MCk7DQo+ PiArCWRjc193cml0ZV9zZXEoMHhGRiwgMHg4MCwgMHgwOSk7DQo+IA0KPiBTaW5jZSB0aGUgcGF0 dGVybnMgd2l0aCBhZGRyZXNzIHNoaWZ0aW5nIGlzIHJlcGVhdGVkIG11bHRpcGxlIHRpbWVzDQo+ IG1heWJlIGJldHRlciB3b3VsZCBiZSB0byBkZWZpbmUgaGVscGVyIGZvciBpdCwgZm9yIGV4YW1w bGU6DQo+ICNkZWZpbmUgTUNTX0FEUlNGVCAweDAwDQo+ICNkZWZpbmUgZGNzX3dyaXRlX2NtZF9h dChjdHgsIGNtZCwgYWRkciwgc2VxLi4uKSAoe1wNCj4gICAgICBkY3Nfd3JpdGVfc2VxKGN0eCwg TUNTX0FEUlNGVCwgYWRkcik7XA0KPiAgICAgIGRjc193cml0ZV9zZXEoY3R4LCBjbWQsIHNlcSk7 XA0KPiB9KQ0KPiANCj4gQW5kIHVzZSBpdCB0aGlzIHdheToNCj4gICAgICBkY3Nfd3JpdGVfY21k X2F0KE1DU19DTUQyLCAweDgwLCAweDgwLCAweDA5KTsNCj4gDQoNClZlcnkgZ29vZCAmIGNsZXZl ciBwcm9wb3NhbHMsIEkgd2lsbCBpbXBsZW1lbnQgdGhlbSBpbiB2Mi4gTWFueSB0aGFua3MNCg0K Pj4gKw0KPj4gKwkvKg0KPj4gKwkgKiBTdGFydGluZyBmcm9tIGhlcmUsIGFkZHJlc3Mgc2hpZnQg bmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBzZW5kaW5nDQo+PiArCSAqIGEgbmV3IGNvbW1hbmQuIFlv dSBjYW4gZmluZCBhbiBleGFtcGxlIGluIHRoZSBuZXh0IHNlcXVlbmNlLi4uDQo+PiArCSAqIFNE X1BDSF9DVFJMICgweEM0ODApIFNvdXJjZSBEcml2ZXIgUHJlY2hhcmdlIENvbnRyb2wgKFNEX1BU PUdORCkNCj4+ICsJICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4MCk7IC8qIGFkZHJl c3Mgc2hpZnQgc2V0IHRvIDB4ODAgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweEM0LCAweDMwKTsg LyogMHhDNDgwIHBhcmFtZXRlciAxIGlzIDB4MzAgKi8NCj4+ICsJbWRlbGF5KDEwKTsNCj4+ICsN Cj4+ICsJLyogTm90IGRvY3VtZW50ZWQgKDB4QzQ4QSkgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgw eDAwLCAweDhBKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweEM0LCAweDQwKTsNCj4+ICsJbWRlbGF5 KDEwKTsNCj4+ICsNCj4+ICsJLyogUFdSX0NUUkw0ICgweEM1QjApIFBvd2VyIENvbnRyb2wgU2V0 dGluZyA0IGZvciBEQyBWb2x0YWdlICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHhCMSk7 IC8qIDE3OHRoIHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QzUsIDB4QTkpOw0K Pj4gKw0KPj4gKwkvKiBQV1JfQ1RSTDIgKDB4QzU5MCkgUG93ZXIgQ29udHJvbCBTZXR0aW5nIDIg Zm9yIE5vcm1hbCBNb2RlICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHg5MSk7IC8qIDE0 NnRoIHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QzUsIDB4MzQpOw0KPj4gKw0K Pj4gKwkvKiBQX0RSVl9NICgweEMwQjQpIFBhbmVsIERyaXZpbmcgTW9kZSAqLw0KPj4gKwlkY3Nf d3JpdGVfc2VxKDB4MDAsIDB4QjQpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QzAsIDB4NTApOw0K Pj4gKw0KPj4gKwkvKiBWQ09NREMgKDB4RDkwMCkgVkNPTSBWb2x0YWdlIFNldHRpbmcgKi8NCj4+ ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweDAwKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweEQ5LCAw eDRFKTsNCj4+ICsNCj4+ICsJLyogT1NDX0FESiAoMHhDMTgxKSBPc2NpbGxhdG9yIEFkanVzdG1l bnQgZm9yIElkbGUvTm9ybWFsIG1vZGUgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweDgx KTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweEMxLCAweDY2KTsgLyogNjVIeiAqLw0KPj4gKw0KPj4g KwkvKiBSR0JfVklERU9fU0VUICgweEMxQTEpIFJHQiBWaWRlbyBNb2RlIFNldHRpbmcgKi8NCj4+ ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweEExKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweEMxLCAw eDA4KTsNCj4+ICsNCj4+ICsJLyogUFdSX0NUUkwyICgweEM1OTApIFBvd2VyIENvbnRyb2wgU2V0 dGluZyAyIGZvciBOb3JtYWwgTW9kZSAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4OTIp OyAvKiAxNDd0aCBwYXJhbWV0ZXIgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweEM1LCAweDAxKTsN Cj4+ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweDk1KTsgLyogMTUwdGggcGFyYW1ldGVyICovDQo+ PiArCWRjc193cml0ZV9zZXEoMHhDNSwgMHgzNCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwg MHg5NCk7IC8qIDE0OXRoIHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QzUsIDB4 MzMpOw0KPj4gKw0KPj4gKwkvKiBHVkREL05HVkREICgweEQ4MDApICovDQo+PiArCWRjc193cml0 ZV9zZXEoMHgwMCwgMHgwMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhEOCwgMHg3OSwgMHg3OSk7 DQo+PiArDQo+PiArCS8qIFNEX0NUUkwgKDB4QzBBMikgU291cmNlIERyaXZlciBUaW1pbmcgU2V0 dGluZyAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QTMpOyAvKiAxNjR0aCBwYXJhbWV0 ZXIgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweEMwLCAweDFCKTsNCj4+ICsNCj4+ICsJLyogUFdS X0NUUkwxICgweEM1ODApIFBvd2VyIENvbnRyb2wgU2V0dGluZyAxICovDQo+PiArCWRjc193cml0 ZV9zZXEoMHgwMCwgMHg4Mik7IC8qIDEzMXN0IHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVf c2VxKDB4QzUsIDB4ODMpOw0KPj4gKw0KPj4gKwkvKiBTRF9QQ0hfQ1RSTCAoMHhDNDgwKSBTb3Vy Y2UgRHJpdmVyIFByZWNoYXJnZSBDb250cm9sICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwg MHg4MSk7IC8qIDEzMHRoIHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QzQsIDB4 ODMpOw0KPj4gKw0KPj4gKwkvKiBSR0JfVklERU9fU0VUICgweEMxQTEpIFJHQiBWaWRlbyBNb2Rl IFNldHRpbmcgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweEExKTsNCj4+ICsJZGNzX3dy aXRlX3NlcSgweEMxLCAweDBFKTsgLyogdG9kbyBwcmV2aW91c2x5IHdlIHdyb3RlIDB4MDguLi4g Ki8NCj4+ICsNCj4+ICsJLyogUEFOU0VUICgweEIzQTYpIFBhbmVsIFR5cGUgU2V0dGluZyAqLw0K Pj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QTYpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4QjMs IDB4MDAsIDB4MDEpOw0KPj4gKw0KPj4gKwkvKiBHT0FWU1QgKDB4Q0U4MCkgR09BIFZTVCBTZXR0 aW5nICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4MCk7DQo+PiArCWRjc193cml0ZV9z ZXEoMHhDRSwgMHg4NSwgMHgwMSwgMHgwMCwgMHg4NCwgMHgwMSwgMHgwMCk7DQo+PiArDQo+PiAr CS8qIEdPQUNMS0ExICgweENFQTApIEdPQSBDTEtBMSBTZXR0aW5nICovDQo+PiArCWRjc193cml0 ZV9zZXEoMHgwMCwgMHhBMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDRSwgMHgxOCwgMHgwNCwg MHgwMywgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwNCj4+ICsJCSAgICAgIDB4MDMsIDB4 MDMsIDB4M0EsIDB4MDAsIDB4MDAsIDB4MDApOw0KPj4gKw0KPj4gKwkvKiBHT0FDTEtBMyAoMHhD RUIwKSBHT0EgQ0xLQTMgU2V0dGluZyAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QjAp Ow0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0UsIDB4MTgsIDB4MDIsIDB4MDMsIDB4M0IsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MTgsDQo+PiArCQkgICAgICAweDAxLCAweDAzLCAweDNDLCAweDAwLCAw eDAwLCAweDAwKTsNCj4+ICsNCj4+ICsJLyogR09BRUNMSyAoMHhDRkMwKSBHT0EgRUNMSyBTZXR0 aW5nICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHhDMCk7DQo+PiArCWRjc193cml0ZV9z ZXEoMHhDRiwgMHgwMSwgMHgwMSwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMiwN Cj4+ICsJCSAgICAgIDB4MDAsIDB4MDApOw0KPj4gKw0KPj4gKwkvKiBOb3QgZG9jdW1lbnRlZCAq Lw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4RDApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4 Q0YsIDB4MDApOw0KPj4gKw0KPj4gKwkvKiBQQU5DVFJMU0VUMS04ICgweENCODAtMHhDQkYwKSBQ YW5lbCBDb250cm9sIFNldHRpbmcgMS04ICovDQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4 MCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4+ICsJCSAgICAgIDB4MDAsIDB4MDApOw0KPj4gKwlkY3Nf d3JpdGVfc2VxKDB4MDAsIDB4OTApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0IsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQo+PiArCQkgICAgICAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsNCj4+ICsJZGNzX3dyaXRlX3Nl cSgweDAwLCAweEEwKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweENCLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLA0KPj4gKwkJICAgICAgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHgwMCwg MHhCMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4+ICsJCSAgICAgIDB4MDAsIDB4MDApOw0KPj4gKwlk Y3Nfd3JpdGVfc2VxKDB4MDAsIDB4QzApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0IsIDB4MDAs IDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsDQo+PiArCQkgICAgICAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsNCj4+ICsJZGNzX3dyaXRl X3NlcSgweDAwLCAweEQwKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweENCLCAweDAwLCAweDAwLCAw eDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA0LCAweDA0LA0KPj4gKwkJICAgICAgMHgwNCwgMHgw NCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHgw MCwgMHhFMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4+ICsJCSAgICAgIDB4MDAsIDB4MDApOw0KPj4g KwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4RjApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0IsIDB4 RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsDQo+PiArCQkgICAg ICAweEZGLCAweEZGKTsNCj4+ICsNCj4+ICsJLyogUEFOVTJEMS0zICgweENDODAtMHhDQ0EwKSBQ YW5lbCBVMkQgU2V0dGluZyAxLTMgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweDgwKTsN Cj4+ICsJZGNzX3dyaXRlX3NlcSgweENDLCAweDAwLCAweDI2LCAweDA5LCAweDBCLCAweDAxLCAw eDI1LCAweDAwLCAweDAwLA0KPj4gKwkJICAgICAgMHgwMCwgMHgwMCk7DQo+PiArCWRjc193cml0 ZV9zZXEoMHgwMCwgMHg5MCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDQywgMHgwMCwgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4+ICsJCSAgICAgIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MjYsIDB4MEEsIDB4MEMsIDB4MDIpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4 MDAsIDB4QTApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0MsIDB4MjUsIDB4MDAsIDB4MDAsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQo+PiArCQkgICAgICAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsNCj4+ICsNCj4+ICsJLyogUEFORDJVMS0zICgweEND QjAtMHhDQ0QwKSBQYW5lbCBEMlUgU2V0dGluZyAxLTMgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgw eDAwLCAweEIwKTsNCj4+ICsJZGNzX3dyaXRlX3NlcSgweENDLCAweDAwLCAweDI1LCAweDBDLCAw eDBBLCAweDAyLCAweDI2LCAweDAwLCAweDAwLA0KPj4gKwkJICAgICAgMHgwMCwgMHgwMCk7DQo+ PiArCWRjc193cml0ZV9zZXEoMHgwMCwgMHhDMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhDQywg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwNCj4+ICsJCSAg ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4MEIsIDB4MDksIDB4MDEpOw0KPj4gKwlkY3Nf d3JpdGVfc2VxKDB4MDAsIDB4RDApOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4Q0MsIDB4MjYsIDB4 MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsDQo+PiArCQkgICAgICAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsNCj4+ICsNCj4+ICsJLyogUFdS X0NUUkwxICgweEM1ODApIFBvd2VyIENvbnRyb2wgU2V0dGluZyAxICovDQo+PiArCWRjc193cml0 ZV9zZXEoMHgwMCwgMHg4MSk7IC8qIDEzMHRoIHBhcmFtZXRlciAqLw0KPj4gKwlkY3Nfd3JpdGVf c2VxKDB4QzUsIDB4NjYpOw0KPj4gKw0KPj4gKwkvKiBOb3QgZG9jdW1lbnRlZCAqLw0KPj4gKwlk Y3Nfd3JpdGVfc2VxKDB4MDAsIDB4QjYpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4RjUsIDB4MDYp Ow0KPj4gKw0KPj4gKwkvKiBHTUNUMi4yUCAoMHhFMTAwKSBHYW1tYSBDb3JyZWN0aW9uIDIuMisg U2V0dGluZyAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4MDApOw0KPj4gKwlkY3Nfd3Jp dGVfc2VxKDB4RTEsIDB4MDAsIDB4MDksIDB4MEYsIDB4MEUsIDB4MDcsIDB4MTAsIDB4MEIsIDB4 MEEsDQo+PiArCQkgICAgICAweDA0LCAweDA3LCAweDBCLCAweDA4LCAweDBGLCAweDEwLCAweDBB LCAweDAxKTsNCj4+ICsNCj4+ICsJLyogR01DVDIuMk4gKDB4RTEwMCkgR2FtbWEgQ29ycmVjdGlv biAyLjItIFNldHRpbmcgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcSgweDAwLCAweDAwKTsNCj4+ICsJ ZGNzX3dyaXRlX3NlcSgweEUyLCAweDAwLCAweDA5LCAweDBGLCAweDBFLCAweDA3LCAweDEwLCAw eDBCLCAweDBBLA0KPj4gKwkJICAgICAgMHgwNCwgMHgwNywgMHgwQiwgMHgwOCwgMHgwRiwgMHgx MCwgMHgwQSwgMHgwMSk7DQo+PiArDQo+PiArCS8qIEV4aXQgQ01EMiBtb2RlICovDQo+PiArCWRj c193cml0ZV9zZXEoMHgwMCwgMHgwMCk7DQo+PiArCWRjc193cml0ZV9zZXEoMHhGRiwgMHhGRiwg MHhGRiwgMHhGRik7DQo+PiArDQo+PiArCS8qIE9UTTgwMDlhIE5PUCAqLw0KPj4gKwlkY3Nfd3Jp dGVfc2VxKDB4MDAsIDB4MDApOw0KPiANCj4gSXQgbG9va3MgbW9yZSBsaWtlIHJlc2V0dGluZyBz aGlmdCBhZGRyZXNzLCBub3QgTk9QIGNvbW1hbmQuDQo+IA0KDQpZZXMsIHlvdSBhcmUgcmlnaHQs IGJhZCBjb3B5L3Bhc3RlLCBJIHdpbGwgdXBkYXRlIGl0Lg0KDQo+PiArDQo+PiArCXJldCA9IG1p cGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoZHNpKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJl dHVybiByZXQ7DQo+PiArDQo+PiArCS8qIFdhaXQgZm9yIHNsZWVwIG91dCBleGl0ICovDQo+PiAr CW1kZWxheSgxMjApOw0KPj4gKw0KPj4gKwkvKiBEZWZhdWx0IHBvcnRyYWl0IDQ4MHg4MDAgcmdi MjQgKi8NCj4+ICsJZGNzX3dyaXRlX3NlcShNSVBJX0RDU19TRVRfQUREUkVTU19NT0RFLCAweDAw KTsNCj4+ICsJZGNzX3dyaXRlX3NlcShNSVBJX0RDU19TRVRfQ09MVU1OX0FERFJFU1MsIDB4MDAs IDB4MDAsIDB4MDEsIDB4REYpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKE1JUElfRENTX1NFVF9QQUdF X0FERFJFU1MsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MUYpOw0KPj4gKwlkY3Nfd3JpdGVfc2VxKE1J UElfRENTX1NFVF9QSVhFTF9GT1JNQVQsIDB4NzcpOw0KPiANCj4gSSB0aGluayBzb21lIG9mIGFi b3ZlIERDUyBjb21tYW5kcyBoYXZlIGNvcnJlc3BvbmRpbmcgaGVscGVyIGZ1bmN0aW9ucy4NCj4g DQoNClllcywgeW91IGFyZSByaWdodCwgbGF6eSBJIGFtIDopLCBJIHdpbGwgdXBkYXRlIGl0LiBN YW55IHRoYW5rcy4NCg0KPj4gKw0KPj4gKwkvKiBEaXNhYmxlIENBQkMgZmVhdHVyZSAqLw0KPj4g KwlkY3Nfd3JpdGVfc2VxKDB4NTUsIDB4MDApOw0KPj4gKw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9k Y3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7 DQo+PiArDQo+PiArCS8qIE9UTTgwMDlhIE5PUCAqLw0KPj4gKwlkY3Nfd3JpdGVfc2VxKDB4MDAs IDB4MDApOw0KPj4gKw0KPj4gKwkvKiBTZW5kIENvbW1hbmQgR1JBTSBtZW1vcnkgd3JpdGUgKG5v IHBhcmFtZXRlcnMpICovDQo+PiArCWRjc193cml0ZV9zZXEoTUlQSV9EQ1NfV1JJVEVfTUVNT1JZ X1NUQVJUKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgb3RtODAwOWFfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkNCj4+ICt7DQo+PiAr CXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gcGFuZWxfdG9fb3RtODAwOWEocGFuZWwpOw0KPj4gKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYp Ow0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAoIWN0eC0+ZW5hYmxlZCkNCj4+ICsJCXJl dHVybiAwOyAvKiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBzbyB3ZSByZXR1cm4gMCBoZXJlICovDQo+ PiArDQo+PiArCS8qIFBvd2VyIG9mZiB0aGUgYmFja2xpZ2h0LiBOb3RlOiBlbmQtdXNlciBzdGls bCBjb250cm9scyBicmlnaHRuZXNzICovDQo+PiArCWN0eC0+YmxfZGV2LT5wcm9wcy5wb3dlciA9 IEZCX0JMQU5LX1BPV0VSRE9XTjsNCj4+ICsJcmV0ID0gYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMo Y3R4LT5ibF9kZXYpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsNCj4+ ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihkc2kpOw0KPj4gKwlpZiAocmV0 IDwgMCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+PiArCXJldCA9IG1pcGlfZHNpX2Rjc19l bnRlcl9zbGVlcF9tb2RlKGRzaSk7DQo+PiArCWlmIChyZXQgPCAwKQ0KPj4gKwkJcmV0dXJuIHJl dDsNCj4+ICsNCj4+ICsJbXNsZWVwKDEyMCk7DQo+PiArDQo+PiArCWN0eC0+ZW5hYmxlZCA9IGZh bHNlOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBv dG04MDA5YV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpDQo+PiArew0KPj4gKwlz dHJ1Y3Qgb3RtODAwOWEgKmN0eCA9IHBhbmVsX3RvX290bTgwMDlhKHBhbmVsKTsNCj4+ICsNCj4+ ICsJaWYgKCFjdHgtPnByZXBhcmVkKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArDQo+PiArCWlmIChj dHgtPnJlc2V0X2dwaW8pIHsNCj4+ICsJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChjdHgtPnJl c2V0X2dwaW8sIDApOw0KPj4gKwkJbXNsZWVwKDIwKTsNCj4+ICsJfQ0KPj4gKw0KPj4gKwljdHgt PnByZXBhcmVkID0gZmFsc2U7DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgaW50IG90bTgwMDlhX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpDQo+ PiArew0KPj4gKwlzdHJ1Y3Qgb3RtODAwOWEgKmN0eCA9IHBhbmVsX3RvX290bTgwMDlhKHBhbmVs KTsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJaWYgKGN0eC0+cHJlcGFyZWQpDQo+PiArCQly ZXR1cm4gMDsNCj4+ICsNCj4+ICsJaWYgKGN0eC0+cmVzZXRfZ3Bpbykgew0KPj4gKwkJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKGN0eC0+cmVzZXRfZ3BpbywgMCk7DQo+PiArCQltc2xlZXAoMjAp Ow0KPj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGN0eC0+cmVzZXRfZ3BpbywgMSk7DQo+ PiArCQltc2xlZXAoMjApOw0KPiANCj4gU3BlY3Mgc2F5cyByZXNldCBncGlvIGlzIGFjdGl2ZSBs b3csIHNvIEkgZ3Vlc3MgaXQgc2hvdWxkIGJlIGZpeGVkIGluDQo+IGJpbmRpbmdzLCBkdHMgYW5k IGluIGRyaXZlci4NCj4gDQo+IFJlZ2FyZHMNCj4gQW5kcnplag0KPiANCg0KMTAwJSBjb3JyZWN0 ISBJIGFtIGZpeGluZyBpdCwgbWFueSB0aGFua3MgZm9yIHlvdXIgcmV2aWV3Lg0KQmVzdCByZWdh cmRzLA0KUGhpbGlwcGUNCg0KPj4gKwl9DQo+PiArDQo+PiArCXJldCA9IG90bTgwMDlhX2luaXRf c2VxdWVuY2UoY3R4KTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCXJldHVybiByZXQ7DQo+PiArDQo+ PiArCWN0eC0+cHJlcGFyZWQgPSB0cnVlOw0KPj4gKw0KPj4gKwkvKiBQb3dlciBvbiB0aGUgYmFj a2xpZ2h0LiBOb3RlOiBlbmQtdXNlciBzdGlsbCBjb250cm9scyBicmlnaHRuZXNzICovDQo+PiAr CWN0eC0+YmxfZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7DQo+PiArCWJhY2ts aWdodF91cGRhdGVfc3RhdHVzKGN0eC0+YmxfZGV2KTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfZW5hYmxlKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG90bTgwMDlhICpjdHggPSBwYW5lbF90b19v dG04MDA5YShwYW5lbCk7DQo+PiArDQo+PiArCWN0eC0+ZW5hYmxlZCA9IHRydWU7DQo+PiArDQo+ PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IG90bTgwMDlhX2dldF9t b2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkNCj4+ICt7DQo+PiArCXN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlOw0KPj4gKw0KPj4gKwltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKHBh bmVsLT5kcm0sICZkZWZhdWx0X21vZGUpOw0KPj4gKwlpZiAoIW1vZGUpIHsNCj4+ICsJCURSTV9F UlJPUigiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1eEAldVxuIiwNCj4+ICsJCQkgIGRlZmF1bHRf bW9kZS5oZGlzcGxheSwgZGVmYXVsdF9tb2RlLnZkaXNwbGF5LA0KPj4gKwkJCSAgZGVmYXVsdF9t b2RlLnZyZWZyZXNoKTsNCj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gKwl9DQo+PiArDQo+PiAr CWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOw0KPj4gKw0KPj4gKwltb2RlLT50eXBlID0gRFJNX01P REVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsNCj4+ICsJZHJtX21vZGVf cHJvYmVkX2FkZChwYW5lbC0+Y29ubmVjdG9yLCBtb2RlKTsNCj4+ICsNCj4+ICsJcGFuZWwtPmNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07DQo+PiArCXBh bmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBtb2RlLT5oZWlnaHRfbW07 DQo+PiArDQo+PiArCXJldHVybiAxOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9wYW5lbF9mdW5jcyBvdG04MDA5YV9kcm1fZnVuY3MgPSB7DQo+PiArCS5kaXNhYmxl ICAgPSBvdG04MDA5YV9kaXNhYmxlLA0KPj4gKwkudW5wcmVwYXJlID0gb3RtODAwOWFfdW5wcmVw YXJlLA0KPj4gKwkucHJlcGFyZSAgID0gb3RtODAwOWFfcHJlcGFyZSwNCj4+ICsJLmVuYWJsZSAg ICA9IG90bTgwMDlhX2VuYWJsZSwNCj4+ICsJLmdldF9tb2RlcyA9IG90bTgwMDlhX2dldF9tb2Rl cywNCj4+ICt9Ow0KPj4gKw0KPj4gKy8qDQo+PiArICogRFNJLUJBU0VEIEJBQ0tMSUdIVA0KPj4g KyAqLw0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0 dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IG90bTgw MDlhICpjdHggPSBibF9nZXRfZGF0YShiZCk7DQo+PiArCXU4IGRhdGFbMl07DQo+PiArDQo+PiAr CWlmICghY3R4LT5wcmVwYXJlZCkgew0KPj4gKwkJRFJNX1dBUk4oImxjZCBub3QgcmVhZHkgeWV0 IGZvciBzZXR0aW5nIGl0cyBiYWNrbGlnaHQhXG4iKTsNCj4+ICsJCXJldHVybiAtRU5YSU87DQo+ PiArCX0NCj4+ICsNCj4+ICsJaWYgKGJkLT5wcm9wcy5wb3dlciA8PSBGQl9CTEFOS19OT1JNQUwp IHsNCj4+ICsJCS8qIFBvd2VyIG9uIHRoZSBiYWNrbGlnaHQgd2l0aCB0aGUgcmVxdWVzdGVkIGJy aWdodG5lc3MgKi8NCj4+ICsJCWRhdGFbMF0gPSBNSVBJX0RDU19TRVRfRElTUExBWV9CUklHSFRO RVNTOw0KPj4gKwkJZGF0YVsxXSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOw0KPj4gKwkJb3RtODAw OWFfZGNzX3dyaXRlX2J1ZihjdHgsIGRhdGEsIEFSUkFZX1NJWkUoZGF0YSkpOw0KPj4gKwkJLyog c2V0IEJyaWdodG5lc3MgQ29udHJvbCAmIEJhY2tsaWdodCBvbiAqLw0KPj4gKwkJZGF0YVsxXSA9 IDB4MjQ7DQo+PiArCX0gZWxzZSB7DQo+PiArCQkvKiBQb3dlciBvZmYgdGhlIGJhY2tsaWdodDog c2V0IEJyaWdodG5lc3MgQ29udHJvbCAmIEJsIG9mZiAqLw0KPj4gKwkJZGF0YVsxXSA9IDA7DQo+ PiArCX0NCj4+ICsNCj4+ICsJLyogVXBkYXRlIEJyaWdodG5lc3MgQ29udHJvbCAmIEJhY2tsaWdo dCAqLw0KPj4gKwlkYXRhWzBdID0gTUlQSV9EQ1NfV1JJVEVfQ09OVFJPTF9ESVNQTEFZOw0KPj4g KwlvdG04MDA5YV9kY3Nfd3JpdGVfYnVmKGN0eCwgZGF0YSwgQVJSQVlfU0laRShkYXRhKSk7DQo+ PiArDQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGJhY2tsaWdodF9vcHMgb3RtODAwOWFfYmFja2xpZ2h0X29wcyA9IHsNCj4+ICsJLnVwZGF0ZV9z dGF0dXMgPSBvdG04MDA5YV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cywNCj4+ICt9Ow0KPj4gKw0K Pj4gK3N0YXRpYyBpbnQgb3RtODAwOWFfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNp KQ0KPj4gK3sNCj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmRzaS0+ZGV2Ow0KPj4gKwlzdHJ1 Y3Qgb3RtODAwOWEgKmN0eDsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJY3R4ID0gZGV2bV9r emFsbG9jKGRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsNCj4+ICsJaWYgKCFjdHgpDQo+ PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9n cGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsNCj4+ICsJaWYg KElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7DQo+PiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBn ZXQgcmVzZXQtZ3Bpb1xuIik7DQo+PiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8p Ow0KPj4gKwl9DQo+PiArDQo+PiArCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsNCj4+ ICsNCj4+ICsJY3R4LT5kZXYgPSBkZXY7DQo+PiArDQo+PiArCWRzaS0+bGFuZXMgPSAyOw0KPj4g Kwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7DQo+PiArCWRzaS0+bW9kZV9mbGFn cyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUIHwNCj4+ ICsJCQkgIE1JUElfRFNJX01PREVfTFBNOw0KPj4gKw0KPj4gKwlkcm1fcGFuZWxfaW5pdCgmY3R4 LT5wYW5lbCk7DQo+PiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Ow0KPj4gKwljdHgtPnBhbmVsLmZ1 bmNzID0gJm90bTgwMDlhX2RybV9mdW5jczsNCj4+ICsNCj4+ICsJY3R4LT5ibF9kZXYgPSBiYWNr bGlnaHRfZGV2aWNlX3JlZ2lzdGVyKERSVl9OQU1FICJfYmFja2xpZ2h0IiwgZGV2LCBjdHgsDQo+ PiArCQkJCQkJJm90bTgwMDlhX2JhY2tsaWdodF9vcHMsIE5VTEwpOw0KPj4gKwlpZiAoSVNfRVJS KGN0eC0+YmxfZGV2KSkgew0KPj4gKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIg YmFja2xpZ2h0IGRldmljZVxuIik7DQo+PiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPmJsX2Rldik7 DQo+PiArCX0NCj4+ICsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3BzLm1heF9icmlnaHRuZXNzID0g T1RNODAwOUFfQkFDS0xJR0hUX01BWDsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3BzLmJyaWdodG5l c3MgPSBPVE04MDA5QV9CQUNLTElHSFRfREVGQVVMVDsNCj4+ICsJY3R4LT5ibF9kZXYtPnByb3Bz LnBvd2VyID0gRkJfQkxBTktfUE9XRVJET1dOOw0KPj4gKwljdHgtPmJsX2Rldi0+cHJvcHMudHlw ZSA9IEJBQ0tMSUdIVF9SQVc7DQo+PiArDQo+PiArCWRybV9wYW5lbF9hZGQoJmN0eC0+cGFuZWwp Ow0KPj4gKw0KPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNpKTsNCj4+ICsJaWYgKHJldCA8 IDApIHsNCj4+ICsJCWRldl9lcnIoZGV2LCAibWlwaV9kc2lfYXR0YWNoIGZhaWxlZC4gSXMgaG9z dCByZWFkeT9cbiIpOw0KPj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7DQo+PiAr CQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5ibF9kZXYpOw0KPj4gKwkJcmV0dXJu IHJldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlEUk1fSU5GTyhEUlZfTkFNRSAiX3BhbmVsICV1eCV1 QCV1ICV1YnBwIGRzaSAldWRsIC0gcmVhZHlcbiIsDQo+PiArCQkgZGVmYXVsdF9tb2RlLmhkaXNw bGF5LCBkZWZhdWx0X21vZGUudmRpc3BsYXksDQo+PiArCQkgZGVmYXVsdF9tb2RlLnZyZWZyZXNo LA0KPj4gKwkJIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90b19icHAoZHNpLT5mb3JtYXQpLCBkc2kt PmxhbmVzKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBp bnQgb3RtODAwOWFfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkNCj4+ICt7DQo+ PiArCXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsNCj4+ ICsNCj4+ICsJbWlwaV9kc2lfZGV0YWNoKGRzaSk7DQo+PiArCWRybV9wYW5lbF9yZW1vdmUoJmN0 eC0+cGFuZWwpOw0KPj4gKw0KPj4gKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5i bF9kZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb3Jpc2V0ZWNoX290bTgwMDlhX29mX21hdGNoW10gPSB7 DQo+PiArCXsgLmNvbXBhdGlibGUgPSAib3Jpc2V0ZWNoLG90bTgwMDlhIiB9LA0KPj4gKwl7IH0N Cj4+ICt9Ow0KPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9yaXNldGVjaF9vdG04MDA5YV9v Zl9tYXRjaCk7DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgb3Jpc2V0 ZWNoX290bTgwMDlhX2RyaXZlciA9IHsNCj4+ICsJLnByb2JlICA9IG90bTgwMDlhX3Byb2JlLA0K Pj4gKwkucmVtb3ZlID0gb3RtODAwOWFfcmVtb3ZlLA0KPj4gKwkuZHJpdmVyID0gew0KPj4gKwkJ Lm5hbWUgPSBEUlZfTkFNRSAiX3BhbmVsIiwNCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG9yaXNl dGVjaF9vdG04MDA5YV9vZl9tYXRjaCwNCj4+ICsJfSwNCj4+ICt9Ow0KPj4gK21vZHVsZV9taXBp X2RzaV9kcml2ZXIob3Jpc2V0ZWNoX290bTgwMDlhX2RyaXZlcik7DQo+PiArDQo+PiArTU9EVUxF X0FVVEhPUigiUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsNCj4+ICtN T0RVTEVfQVVUSE9SKCJZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29tPiIpOw0K Pj4gK01PRFVMRV9ERVNDUklQVElPTigiRFJNIGRyaXZlciBmb3IgT3Jpc2UgVGVjaCBPVE04MDA5 QSBNSVBJIERTSSBwYW5lbCIpOw0KPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCj4gDQo+ IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2 ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK