From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brian Norris Subject: Re: [PATCH 2/3] drm/rockchip: Add ROCKCHIP DW MIPI DSI controller driver Date: Mon, 27 Nov 2017 17:51:49 -0800 Message-ID: <20171128015145.GA33245@google.com> References: <1511831616-10322-1-git-send-email-nickey.yang@rock-chips.com> <1511831616-10322-3-git-send-email-nickey.yang@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1511831616-10322-3-git-send-email-nickey.yang@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Nickey Yang Cc: mark.rutland@arm.com, hl@rock-chips.com, airlied@linux.ie, hoegsberg@gmail.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, philippe.cornu@st.com, yannick.fertre@st.com, linux-rockchip@lists.infradead.org, robh+dt@kernel.org, zyw@rock-chips.com, xbl@rock-chips.com, mark.yao@rock-chips.com List-Id: linux-rockchip.vger.kernel.org SGkgTmlja2V5LAoKU2V2ZXJhbCBwZW9wbGUgYWxyZWFkeSBtYWRlIGNvbW1lbnRzIG9uIHRoZSBp bml0aWFsIHZlcnNpb24gb2YgdGhpcwpwYXRjaCBbMV0sIGFuZCBJIGRvbid0IHRoaW5rIHlvdSd2 ZSBjYXVnaHQgdGhlbSBhbGwgaGVyZSB5ZXQuIEknbGwKcmVwZWF0IGEgZmV3LiBOb3Qgc3VyZSBp ZiBJJ3ZlIGNhdWdodCB0aGVtIGFsbC4KClsxXSBodHRwczovL2Nocm9taXVtLXJldmlldy5nb29n bGVzb3VyY2UuY29tL2MvY2hyb21pdW1vcy90aGlyZF9wYXJ0eS9rZXJuZWwvKy83ODAxMjAKCk9u IFR1ZSwgTm92IDI4LCAyMDE3IGF0IDA5OjEzOjM1QU0gKzA4MDAsIE5pY2tleSBZYW5nIHdyb3Rl Ogo+IEFkZCB0aGUgUk9DS0NISVAgRFNJIGNvbnRyb2xsZXIgZHJpdmVyIHRoYXQgdXNlcyB0aGUg U3lub3BzeXMgRGVzaWduV2FyZQo+IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UuCj4g Cj4gU2lnbmVkLW9mZi1ieTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29t Pgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvS2NvbmZpZyAgICAgICAgICAgICAg ICB8ICAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL01ha2VmaWxlICAgICAgICAg ICAgICAgfCAgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9kdy1taXBpLWRzaS5j ICAgICAgICAgIHwgMTM0OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vcm9ja2NoaXAvZHctbWlwaS1kc2lfcm9ja2NoaXAuYyB8ICA3NTYgKysrKysrKysrKysrKwo+ ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5jICAgICB8ICAgIDIg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuaCAgICAgfCAg ICAyICstCj4gIDYgZmlsZXMgY2hhbmdlZCwgNzYwIGluc2VydGlvbnMoKyksIDEzNTMgZGVsZXRp b25zKC0pCj4gIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHct bWlwaS1kc2kuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlw L2R3LW1pcGktZHNpX3JvY2tjaGlwLmMKPiAKCi4uLgoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpX3JvY2tjaGlwLmMgYi9kcml2ZXJzL2dwdS9kcm0v cm9ja2NoaXAvZHctbWlwaS1kc2lfcm9ja2NoaXAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g aW5kZXggMDAwMDAwMC4uMzJiZTQzMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2lfcm9ja2NoaXAuYwo+IEBAIC0wLDAgKzEsNzU2IEBA Cj4gKy8qCj4gKyAqIENvcHlyaWdodCAoQykgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENv Lkx0ZAo+ICsgKiBBdXRob3I6Cj4gKyAqICAgICAgQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBz LmNvbT4KPiArICogICAgICBOaWNrZXkgWWFuZyA8bmlja2V5LnlhbmdAcm9jay1jaGlwcy5jb20+ Cj4gKyAqCj4gKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKPiArICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxp c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKPiArICogbWF5IGJlIGNv cGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KPiArICoK PiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KPiArICoKPiArICogTGljZW5zZSB0ZXJtczogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB2ZXJzaW9uIDIKPiArICovCj4gKwo+ICsj aW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L21hdGg2NC5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4gKyNp bmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDxkcm0vYnJpZGdlL2R3X21p cGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3JlZ21hcC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbWZkL3N5c2Nvbi5oPgo+ICsKPiArI2luY2x1ZGUgInJvY2tjaGlwX2RybV9kcnYuaCIK PiArI2luY2x1ZGUgInJvY2tjaGlwX2RybV92b3AuaCIKPiArCj4gKyNkZWZpbmUgRFNJX1BIWV9U U1RfQ1RSTDAJCTB4YjQKPiArI2RlZmluZSBQSFlfVEVTVENMSwkJCUJJVCgxKQo+ICsjZGVmaW5l IFBIWV9VTlRFU1RDTEsJCQkwCj4gKyNkZWZpbmUgUEhZX1RFU1RDTFIJCQlCSVQoMCkKPiArI2Rl ZmluZSBQSFlfVU5URVNUQ0xSCQkJMAo+ICsKPiArI2RlZmluZSBEU0lfUEhZX1RTVF9DVFJMMQkJ MHhiOAo+ICsjZGVmaW5lIFBIWV9URVNURU4JCQlCSVQoMTYpCj4gKyNkZWZpbmUgUEhZX1VOVEVT VEVOCQkJMAo+ICsjZGVmaW5lIFBIWV9URVNURE9VVChuKQkJCSgoKG4pICYgMHhmZikgPDwgOCkK PiArI2RlZmluZSBQSFlfVEVTVERJTihuKQkJCSgoKG4pICYgMHhmZikgPDwgMCkKPiArCj4gKyNk ZWZpbmUgQllQQVNTX1ZDT19SQU5HRQlCSVQoNykKPiArI2RlZmluZSBWQ09fUkFOR0VfQ09OX1NF TCh2YWwpCSgoKHZhbCkgJiAweDcpIDw8IDMpCj4gKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fREVG QVVMVAkoMHgwIDw8IDEpCj4gKyNkZWZpbmUgVkNPX0lOX0NBUF9DT05fTE9XCSgweDEgPDwgMSkK PiArI2RlZmluZSBWQ09fSU5fQ0FQX0NPTl9ISUdICSgweDIgPDwgMSkKPiArI2RlZmluZSBSRUZf QklBU19DVVJfU0VMCUJJVCgwKQo+ICsKPiArI2RlZmluZSBDUF9DVVJSRU5UXzNVQQkweDEKPiAr I2RlZmluZSBDUF9DVVJSRU5UXzRfNVVBCTB4Mgo+ICsjZGVmaW5lIENQX0NVUlJFTlRfN181VUEJ MHg2Cj4gKyNkZWZpbmUgQ1BfQ1VSUkVOVF82VUEJMHg5Cj4gKyNkZWZpbmUgQ1BfQ1VSUkVOVF8x MlVBCTB4Ygo+ICsjZGVmaW5lIENQX0NVUlJFTlRfU0VMKHZhbCkJKCh2YWwpICYgMHhmKQo+ICsj ZGVmaW5lIENQX1BST0dSQU1fRU4JCUJJVCg3KQo+ICsKPiArI2RlZmluZSBMUEZfUkVTSVNUT1JT XzE1XzVLT0hNCTB4MQo+ICsjZGVmaW5lIExQRl9SRVNJU1RPUlNfMTNLT0hNCTB4Mgo+ICsjZGVm aW5lIExQRl9SRVNJU1RPUlNfMTFfNUtPSE0JMHg0Cj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU18x MF81S09ITQkweDgKPiArI2RlZmluZSBMUEZfUkVTSVNUT1JTXzhLT0hNCTB4MTAKPiArI2RlZmlu ZSBMUEZfUFJPR1JBTV9FTgkJQklUKDYpCj4gKyNkZWZpbmUgTFBGX1JFU0lTVE9SU19TRUwodmFs KQkoKHZhbCkgJiAweDNmKQo+ICsKPiArI2RlZmluZSBIU0ZSRVFSQU5HRV9TRUwodmFsKQkoKCh2 YWwpICYgMHgzZikgPDwgMSkKPiArCj4gKyNkZWZpbmUgSU5QVVRfRElWSURFUih2YWwpCSgoKHZh bCkgLSAxKSAmIDB4N2YpCj4gKyNkZWZpbmUgTE9XX1BST0dSQU1fRU4JCTAKPiArI2RlZmluZSBI SUdIX1BST0dSQU1fRU4JCUJJVCg3KQo+ICsjZGVmaW5lIExPT1BfRElWX0xPV19TRUwodmFsKQko KCh2YWwpIC0gMSkgJiAweDFmKQo+ICsjZGVmaW5lIExPT1BfRElWX0hJR0hfU0VMKHZhbCkJKCgo KHZhbCkgLSAxKSA+PiA1KSAmIDB4ZikKPiArI2RlZmluZSBQTExfTE9PUF9ESVZfRU4JCUJJVCg1 KQo+ICsjZGVmaW5lIFBMTF9JTlBVVF9ESVZfRU4JQklUKDQpCj4gKwo+ICsjZGVmaW5lIFBPV0VS X0NPTlRST0wJCUJJVCg2KQo+ICsjZGVmaW5lIElOVEVSTkFMX1JFR19DVVJSRU5UCUJJVCgzKQo+ ICsjZGVmaW5lIEJJQVNfQkxPQ0tfT04JCUJJVCgyKQo+ICsjZGVmaW5lIEJBTkRHQVBfT04JCUJJ VCgwKQo+ICsKPiArI2RlZmluZSBURVJfUkVTSVNUT1JfSElHSAlCSVQoNykKPiArI2RlZmluZQlU RVJfUkVTSVNUT1JfTE9XCTAKPiArI2RlZmluZSBMRVZFTF9TSElGVEVSU19PTglCSVQoNikKPiAr I2RlZmluZSBURVJfQ0FMX0RPTkUJCUJJVCg1KQo+ICsjZGVmaW5lIFNFVFJEX01BWAkJKDB4NyA8 PCAyKQo+ICsjZGVmaW5lIFBPV0VSX01BTkFHRQkJQklUKDEpCj4gKyNkZWZpbmUgVEVSX1JFU0lT VE9SU19PTglCSVQoMCkKPiArCj4gKyNkZWZpbmUgQklBU0VYVFJfU0VMKHZhbCkJKCh2YWwpICYg MHg3KQo+ICsjZGVmaW5lIEJBTkRHQVBfU0VMKHZhbCkJKCh2YWwpICYgMHg3KQo+ICsjZGVmaW5l IFRMUF9QUk9HUkFNX0VOCQlCSVQoNykKPiArI2RlZmluZSBUSFNfUFJFX1BST0dSQU1fRU4JQklU KDcpCj4gKyNkZWZpbmUgVEhTX1pFUk9fUFJPR1JBTV9FTglCSVQoNikKPiArCj4gKyNkZWZpbmUg UExMX0JJQVNfQ1VSX1NFTF9DQVBfVkNPX0NPTlRST0wJMHgxMAo+ICsjZGVmaW5lIFBMTF9DUF9D T05UUk9MX1BMTF9MT0NLX0JZUEFTUwkweDExCj4gKyNkZWZpbmUgUExMX0xQRl9BTkRfQ1BfQ09O VFJPTAkweDEyCj4gKyNkZWZpbmUgUExMX0lOUFVUX0RJVklERVJfUkFUSU8JMHgxNwo+ICsjZGVm aW5lIFBMTF9MT09QX0RJVklERVJfUkFUSU8JMHgxOAo+ICsjZGVmaW5lIFBMTF9JTlBVVF9BTkRf TE9PUF9ESVZJREVSX1JBVElPU19DT05UUk9MCTB4MTkKPiArI2RlZmluZSBCQU5ER0FQX0FORF9C SUFTX0NPTlRST0wJMHgyMAo+ICsjZGVmaW5lIFRFUk1JTkFUSU9OX1JFU0lTVEVSX0NPTlRST0wJ MHgyMQo+ICsjZGVmaW5lIEFGRV9CSUFTX0JBTkRHQVBfQU5BTE9HX1BST0dSQU1NQUJJTElUWQkw eDIyCj4gKyNkZWZpbmUgSFNfUlhfQ09OVFJPTF9PRl9MQU5FXzAJMHg0NAo+ICsjZGVmaW5lIEhT X1RYX0NMT0NLX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wJMHg2MAo+ICsjZGVmaW5l IEhTX1RYX0NMT0NLX0xBTkVfUFJFUEFSRV9TVEFURV9USU1FX0NPTlRST0wJMHg2MQo+ICsjZGVm aW5lIEhTX1RYX0NMT0NLX0xBTkVfSFNfWkVST19TVEFURV9USU1FX0NPTlRST0wJMHg2Mgo+ICsj ZGVmaW5lIEhTX1RYX0NMT0NLX0xBTkVfVFJBSUxfU1RBVEVfVElNRV9DT05UUk9MCTB4NjMKPiAr I2RlZmluZSBIU19UWF9DTE9DS19MQU5FX0VYSVRfU1RBVEVfVElNRV9DT05UUk9MCTB4NjQKPiAr I2RlZmluZSBIU19UWF9DTE9DS19MQU5FX1BPU1RfVElNRV9DT05UUk9MCTB4NjUKPiArI2RlZmlu ZSBIU19UWF9EQVRBX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wJMHg3MAo+ICsjZGVm aW5lIEhTX1RYX0RBVEFfTEFORV9QUkVQQVJFX1NUQVRFX1RJTUVfQ09OVFJPTAkweDcxCj4gKyNk ZWZpbmUgSFNfVFhfREFUQV9MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MCTB4NzIKPiAr I2RlZmluZSBIU19UWF9EQVRBX0xBTkVfVFJBSUxfU1RBVEVfVElNRV9DT05UUk9MCTB4NzMKPiAr I2RlZmluZSBIU19UWF9EQVRBX0xBTkVfRVhJVF9TVEFURV9USU1FX0NPTlRST0wJMHg3NAo+ICsK PiArI2RlZmluZSBEV19NSVBJX05FRURTX1BIWV9DRkdfQ0xLCUJJVCgwKQo+ICsjZGVmaW5lIERX X01JUElfTkVFRFNfR1JGX0NMSwkJQklUKDEpCj4gKwo+ICsjZGVmaW5lIFJLMzI4OF9HUkZfU09D X0NPTjYJCTB4MDI1Ywo+ICsjZGVmaW5lIFJLMzI4OF9EU0kwX1NFTF9WT1BfTElUCQlCSVQoNikK PiArI2RlZmluZSBSSzMyODhfRFNJMV9TRUxfVk9QX0xJVAkJQklUKDkpCj4gKwo+ICsjZGVmaW5l IFJLMzM5OV9HUkZfU09DX0NPTjIwCQkweDYyNTAKPiArI2RlZmluZSBSSzMzOTlfRFNJMF9TRUxf Vk9QX0xJVAkJQklUKDApCj4gKyNkZWZpbmUgUkszMzk5X0RTSTFfU0VMX1ZPUF9MSVQJCUJJVCg0 KQo+ICsKPiArLyogZGlzYWJsZSB0dXJucmVxdWVzdCwgdHVybmRpc2FibGUsIGZvcmNldHhzdG9w bW9kZSwgZm9yY2VyeG1vZGUgKi8KPiArI2RlZmluZSBSSzMzOTlfR1JGX1NPQ19DT04yMgkJMHg2 MjU4Cj4gKyNkZWZpbmUgUkszMzk5X0dSRl9EU0lfTU9ERQkJMHhmZmZmMDAwMAo+ICsKPiArI2Rl ZmluZSB0b19kc2kobm0pCWNvbnRhaW5lcl9vZihubSwgc3RydWN0IGR3X21pcGlfZHNpX3JvY2tj aGlwLCBubSkKPiArCj4gK2VudW0gewo+ICsJQkFOREdBUF85N18wNywKPiArCUJBTkRHQVBfOThf MDUsCj4gKwlCQU5ER0FQXzk5XzAyLAo+ICsJQkFOREdBUF8xMDBfMDAsCj4gKwlCQU5ER0FQXzkz XzE3LAo+ICsJQkFOREdBUF85NF8xNSwKPiArCUJBTkRHQVBfOTVfMTIsCj4gKwlCQU5ER0FQXzk2 XzEwLAo+ICt9Owo+ICsKPiArZW51bSB7Cj4gKwlCSUFTRVhUUl84N18xLAo+ICsJQklBU0VYVFJf OTFfNSwKPiArCUJJQVNFWFRSXzk1XzksCj4gKwlCSUFTRVhUUl8xMDAsCj4gKwlCSUFTRVhUUl8x MDVfOTQsCj4gKwlCSUFTRVhUUl8xMTFfODgsCj4gKwlCSUFTRVhUUl8xMThfOCwKPiArCUJJQVNF WFRSXzEyN183LAo+ICt9Owo+ICsKPiArc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2RhdGEg ewo+ICsJdTMyIGRzaTBfZW5fYml0Owo+ICsJdTMyIGRzaTFfZW5fYml0Owo+ICsJdTMyIGdyZl9z d2l0Y2hfcmVnOwo+ICsJdTMyIGdyZl9kc2kwX21vZGU7Cj4gKwl1MzIgZ3JmX2RzaTBfbW9kZV9y ZWc7Cj4gKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X2RhdGFfbGFu ZXM7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgewo+ICsJc3RydWN0 IGRldmljZSAqZGV2Owo+ICsJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7Cj4gKwl2b2lkIF9f aW9tZW0gKmJhc2U7Cj4gKwo+ICsJc3RydWN0IHJlZ21hcCAqZ3JmX3JlZ21hcDsKPiArCXN0cnVj dCBjbGsgKnBsbHJlZl9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICpncmZfY2xrOwo+ICsJc3RydWN0IGNs ayAqcGh5X2NmZ19jbGs7Cj4gKwo+ICsJdW5zaWduZWQgaW50IGxhbmVfbWJwczsgLyogcGVyIGxh bmUgKi8KPiArCXUxNiBpbnB1dF9kaXY7Cj4gKwl1MTYgZmVlZGJhY2tfZGl2Owo+ICsJdTMyIGZv cm1hdDsKPiArCj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2Rh dGE7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhIHBkYXRhOwo+ICt9Owo+ICsKPiAr c3RydWN0IGRwaHlfcGxsX3BhcmFtZXRlcl9tYXAgewo+ICsJdW5zaWduZWQgaW50IG1heF9tYnBz Owo+ICsJdTggaHNmcmVxcmFuZ2U7Cj4gKwl1OCBpY3BjdHJsOwo+ICsJdTggbHBmY3RybDsKPiAr fTsKPiArCj4gKy8qIFRoZSB0YWJsZSBpcyBiYXNlZCBvbiAyN01IeiBEUEhZIHBsbCByZWZlcmVu Y2UgY2xvY2suICovCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHBoeV9wbGxfcGFyYW1ldGVyX21h cCBkcHBhX21hcFtdID0gewo+ICsJeyAgODksIDB4MDAsIENQX0NVUlJFTlRfM1VBLCBMUEZfUkVT SVNUT1JTXzEzS09ITX0sCj4gKwl7ICA5OSwgMHgxMCwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJ U1RPUlNfMTNLT0hNfSwKPiArCXsgMTA5LCAweDIwLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lT VE9SU18xM0tPSE19LAo+ICsJeyAxMjksIDB4MDEsIENQX0NVUlJFTlRfM1VBLCBMUEZfUkVTSVNU T1JTXzE1XzVLT0hNfSwKPiArCXsgMTM5LCAweDExLCBDUF9DVVJSRU5UXzNVQSwgTFBGX1JFU0lT VE9SU18xNV81S09ITX0sCj4gKwl7IDE0OSwgMHgyMSwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9SRVNJ U1RPUlNfMTVfNUtPSE19LAo+ICsJeyAxNjksIDB4MDIsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVT SVNUT1JTXzEzS09ITX0sCj4gKwl7IDE3OSwgMHgxMiwgQ1BfQ1VSUkVOVF82VUEsIExQRl9SRVNJ U1RPUlNfMTNLT0hNfSwKPiArCXsgMTk5LCAweDIyLCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JFU0lT VE9SU18xM0tPSE19LAo+ICsJeyAyMTksIDB4MDMsIENQX0NVUlJFTlRfNF81VUEsIExQRl9SRVNJ U1RPUlNfMTNLT0hNfSwKPiArCXsgMjM5LCAweDEzLCBDUF9DVVJSRU5UXzRfNVVBLCBMUEZfUkVT SVNUT1JTXzEzS09ITX0sCj4gKwl7IDI0OSwgMHgyMywgQ1BfQ1VSUkVOVF80XzVVQSwgTFBGX1JF U0lTVE9SU18xM0tPSE19LAo+ICsJeyAyNjksIDB4MDQsIENQX0NVUlJFTlRfNlVBLCBMUEZfUkVT SVNUT1JTXzExXzVLT0hNfSwKPiArCXsgMjk5LCAweDE0LCBDUF9DVVJSRU5UXzZVQSwgTFBGX1JF U0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDMyOSwgMHgwNSwgQ1BfQ1VSUkVOVF8zVUEsIExQRl9S RVNJU1RPUlNfMTVfNUtPSE19LAo+ICsJeyAzNTksIDB4MTUsIENQX0NVUlJFTlRfM1VBLCBMUEZf UkVTSVNUT1JTXzE1XzVLT0hNfSwKPiArCXsgMzk5LCAweDI1LCBDUF9DVVJSRU5UXzNVQSwgTFBG X1JFU0lTVE9SU18xNV81S09ITX0sCj4gKwl7IDQ0OSwgMHgwNiwgQ1BfQ1VSUkVOVF83XzVVQSwg TFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDQ5OSwgMHgxNiwgQ1BfQ1VSUkVOVF83XzVV QSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDU0OSwgMHgwNywgQ1BfQ1VSUkVOVF83 XzVVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITX0sCj4gKwl7IDU5OSwgMHgxNywgQ1BfQ1VSUkVO VF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITX0sCj4gKwl7IDY0OSwgMHgwOCwgQ1BfQ1VS UkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDY5OSwgMHgxOCwgQ1Bf Q1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDc0OSwgMHgwOSwg Q1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDc5OSwgMHgx OSwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDg0OSwg MHgyOSwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7IDg5 OSwgMHgzOSwgQ1BfQ1VSUkVOVF83XzVVQSwgTFBGX1JFU0lTVE9SU18xMV81S09ITX0sCj4gKwl7 IDk0OSwgMHgwYSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNfSwKPiArCXsg OTk5LCAweDFhLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfOEtPSE19LAo+ICsJezEw NDksIDB4MmEsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU184S09ITX0sCj4gKwl7MTA5 OSwgMHgzYSwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzhLT0hNfSwKPiArCXsxMTQ5 LCAweDBiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE19LAo+ICsJezEx OTksIDB4MWIsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITX0sCj4gKwl7 MTI0OSwgMHgyYiwgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hNfSwKPiAr CXsxMjk5LCAweDNiLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtPSE19LAo+ ICsJezEzNDksIDB4MGMsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81S09ITX0s Cj4gKwl7MTM5OSwgMHgxYywgQ1BfQ1VSUkVOVF8xMlVBLCBMUEZfUkVTSVNUT1JTXzEwXzVLT0hN fSwKPiArCXsxNDQ5LCAweDJjLCBDUF9DVVJSRU5UXzEyVUEsIExQRl9SRVNJU1RPUlNfMTBfNUtP SE19LAo+ICsJezE1MDAsIDB4M2MsIENQX0NVUlJFTlRfMTJVQSwgTFBGX1JFU0lTVE9SU18xMF81 S09ITX0KPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbWF4X21icHNfdG9fcGFyYW1ldGVyKHVuc2ln bmVkIGludCBtYXhfbWJwcykKPiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoZHBwYV9tYXApOyBpKyspCj4gKwkJaWYgKGRwcGFfbWFwW2ldLm1heF9tYnBz ID49IG1heF9tYnBzKQo+ICsJCQlyZXR1cm4gaTsKPiArCj4gKwlyZXR1cm4gLUVJTlZBTDsKPiAr fQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGRzaV93cml0ZShzdHJ1Y3QgZHdfbWlwaV9kc2lf cm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIHZhbCkKPiArewo+ICsJd3JpdGVsKHZhbCwgZHNp LT5iYXNlICsgcmVnKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3Ry dWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksIHUzMiByZWcpCj4gK3sKPiArCXJldHVybiBy ZWFkbChkc2ktPmJhc2UgKyByZWcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHNp X3NldChzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgdTMyIHJlZywgdTMyIG1hc2sp Cj4gK3sKPiArCWRzaV93cml0ZShkc2ksIHJlZywgZHNpX3JlYWQoZHNpLCByZWcpIHwgbWFzayk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfdXBkYXRlX2JpdHMoc3RydWN0IGR3 X21pcGlfZHNpX3JvY2tjaGlwICpkc2ksIHUzMiByZWcsCj4gKwkJCQkgICB1MzIgbWFzaywgdTMy IHZhbCkKPiArewo+ICsJZHNpX3dyaXRlKGRzaSwgcmVnLCAoZHNpX3JlYWQoZHNpLCByZWcpICYg fm1hc2spIHwgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5X3dy aXRlKHN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpLAo+ICsJCQkJICB1OCB0ZXN0X2Nv ZGUsCj4gKwkJCQkgIHU4IHRlc3RfZGF0YSkKPiArewo+ICsJLyoKPiArCSAqIFdpdGggdGhlIGZh bGxpbmcgZWRnZSBvbiBURVNUQ0xLLCB0aGUgVEVTVERJTls3OjBdIHNpZ25hbCBjb250ZW50Cj4g KwkgKiBpcyBsYXRjaGVkIGludGVybmFsbHkgYXMgdGhlIGN1cnJlbnQgdGVzdCBjb2RlLiBUZXN0 IGRhdGEgaXMKPiArCSAqIHByb2dyYW1tZWQgaW50ZXJuYWxseSBieSByaXNpbmcgZWRnZSBvbiBU RVNUQ0xLLgo+ICsJICovCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9DVFJMMCwgUEhZ X1RFU1RDTEsgfCBQSFlfVU5URVNUQ0xSKTsKPiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZ X1RTVF9DVFJMMSwgUEhZX1RFU1RFTiB8IFBIWV9URVNURE9VVCgwKSB8Cj4gKwkJCQkJICBQSFlf VEVTVERJTih0ZXN0X2NvZGUpKTsKPiArCj4gKwlkc2lfd3JpdGUoZHNpLCBEU0lfUEhZX1RTVF9D VFJMMCwgUEhZX1VOVEVTVENMSyB8IFBIWV9VTlRFU1RDTFIpOwo+ICsKPiArCWRzaV93cml0ZShk c2ksIERTSV9QSFlfVFNUX0NUUkwxLCBQSFlfVU5URVNURU4gfCBQSFlfVEVTVERPVVQoMCkgfAo+ ICsJCQkJCSAgUEhZX1RFU1RESU4odGVzdF9kYXRhKSk7Cj4gKwo+ICsJZHNpX3dyaXRlKGRzaSwg RFNJX1BIWV9UU1RfQ1RSTDAsIFBIWV9URVNUQ0xLIHwgUEhZX1VOVEVTVENMUik7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBuczJiYyAtIE5hbm9zZWNvbmRzIHRvIGJ5dGUgY2xvY2sgY3ljbGVzCj4g KyAqLwo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuczJiYyhzdHJ1Y3QgZHdfbWlwaV9k c2lfcm9ja2NoaXAgKmRzaSwgaW50IG5zKQo+ICt7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKG5z ICogZHNpLT5sYW5lX21icHMgLyA4LCAxMDAwKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIG5zMnVp IC0gTmFub3NlY29uZHMgdG8gVUkgdGltZSBwZXJpb2RzCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5l IHVuc2lnbmVkIGludCBuczJ1aShzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwgaW50 IG5zKQo+ICt7Cj4gKwlyZXR1cm4gRElWX1JPVU5EX1VQKG5zICogZHNpLT5sYW5lX21icHMsIDEw MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGR3X21pcGlfZHNpX3BoeV9pbml0KHZvaWQgKnBy aXZfZGF0YSkKPiArewo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBwcml2 X2RhdGE7Cj4gKwlpbnQgcmV0LCBpLCB2Y287Cj4gKwo+ICsJdmNvID0gKGRzaS0+bGFuZV9tYnBz IDwgMjAwKSA/IDAgOiAoZHNpLT5sYW5lX21icHMgKyAxMDApIC8gMjAwOwo+ICsKPiArCWkgPSBt YXhfbWJwc190b19wYXJhbWV0ZXIoZHNpLT5sYW5lX21icHMpOwo+ICsJaWYgKGkgPCAwKSB7Cj4g KwkJRFJNX0RFVl9FUlJPUihkc2ktPmRldiwKPiArCQkJICAgICAgImZhaWxlZCB0byBnZXQgcGFy YW1ldGVyIGZvciAlZG1icHMgY2xvY2tcbiIsCj4gKwkJCSAgICAgIGRzaS0+bGFuZV9tYnBzKTsK PiArCQlyZXR1cm4gaTsKPiArCX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNp LT5waHlfY2ZnX2Nsayk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkc2ktPmRl diwgIkZhaWxlZCB0byBlbmFibGUgcGh5X2NmZ19jbGtcbiIpOwo+ICsJCXJldHVybiByZXQ7Cj4g Kwl9Cj4gKwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgUExMX0JJQVNfQ1VSX1NFTF9D QVBfVkNPX0NPTlRST0wsCj4gKwkJCSAgICAgIEJZUEFTU19WQ09fUkFOR0UgfAo+ICsJCQkgICAg ICBWQ09fUkFOR0VfQ09OX1NFTCh2Y28pIHwKPiArCQkJICAgICAgVkNPX0lOX0NBUF9DT05fTE9X IHwKPiArCQkJICAgICAgUkVGX0JJQVNfQ1VSX1NFTCk7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfcGh5 X3dyaXRlKGRzaSwgUExMX0NQX0NPTlRST0xfUExMX0xPQ0tfQllQQVNTLAo+ICsJCQkgICAgICBD UF9DVVJSRU5UX1NFTChkcHBhX21hcFtpXS5pY3BjdHJsKSk7Cj4gKwlkd19taXBpX2RzaV9waHlf d3JpdGUoZHNpLCBQTExfTFBGX0FORF9DUF9DT05UUk9MLAo+ICsJCQkgICAgICBDUF9QUk9HUkFN X0VOIHwgTFBGX1BST0dSQU1fRU4gfAo+ICsJCQkgICAgICBMUEZfUkVTSVNUT1JTX1NFTChkcHBh X21hcFtpXS5scGZjdHJsKSk7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNf UlhfQ09OVFJPTF9PRl9MQU5FXzAsCj4gKwkJCSAgICAgIEhTRlJFUVJBTkdFX1NFTChkcHBhX21h cFtpXS5oc2ZyZXFyYW5nZSkpOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBM TF9JTlBVVF9ESVZJREVSX1JBVElPLAo+ICsJCQkgICAgICBJTlBVVF9ESVZJREVSKGRzaS0+aW5w dXRfZGl2KSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBQTExfTE9PUF9ESVZJREVS X1JBVElPLAo+ICsJCQkgICAgICBMT09QX0RJVl9MT1dfU0VMKGRzaS0+ZmVlZGJhY2tfZGl2KSB8 Cj4gKwkJCSAgICAgIExPV19QUk9HUkFNX0VOKTsKPiArCS8qCj4gKwkgKiBXZSBuZWVkIHNldCBQ TExfSU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09OVFJPTCBpbW1lZGlhdGVseQo+ICsJ ICogdG8gbWFrZSB0aGUgY29uZmlncnVlZCBMU0IgZWZmZWN0aXZlIGFjY29yZGluZyB0byBJUCBz aW11bGF0aW9uCgoiY29uZmlndXJlZCIKCj4gKwkgKiBhbmQgbGFiIHRlc3QgcmVzdWx0cy4KPiAr CSAqIE9ubHkgaW4gdGhpcyB3YXkgY2FuIHdlIGdldCBjb3JyZWN0IG1pcGkgcGh5IHBsbCBmcmVx dWVuY3kuCj4gKwkgKi8KPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBMTF9JTlBVVF9B TkRfTE9PUF9ESVZJREVSX1JBVElPU19DT05UUk9MLAo+ICsJCQkgICAgICBQTExfTE9PUF9ESVZf RU4gfCBQTExfSU5QVVRfRElWX0VOKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIFBM TF9MT09QX0RJVklERVJfUkFUSU8sCj4gKwkJCSAgICAgIExPT1BfRElWX0hJR0hfU0VMKGRzaS0+ ZmVlZGJhY2tfZGl2KSB8Cj4gKwkJCSAgICAgIEhJR0hfUFJPR1JBTV9FTik7Cj4gKwlkd19taXBp X2RzaV9waHlfd3JpdGUoZHNpLCBQTExfSU5QVVRfQU5EX0xPT1BfRElWSURFUl9SQVRJT1NfQ09O VFJPTCwKPiArCQkJICAgICAgUExMX0xPT1BfRElWX0VOIHwgUExMX0lOUFVUX0RJVl9FTik7Cj4g Kwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgQUZFX0JJQVNfQkFOREdBUF9BTkFMT0df UFJPR1JBTU1BQklMSVRZLAo+ICsJCQkgICAgICBMT1dfUFJPR1JBTV9FTiB8IEJJQVNFWFRSX1NF TChCSUFTRVhUUl8xMjdfNykpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgQUZFX0JJ QVNfQkFOREdBUF9BTkFMT0dfUFJPR1JBTU1BQklMSVRZLAo+ICsJCQkgICAgICBISUdIX1BST0dS QU1fRU4gfCBCQU5ER0FQX1NFTChCQU5ER0FQXzk2XzEwKSk7Cj4gKwo+ICsJZHdfbWlwaV9kc2lf cGh5X3dyaXRlKGRzaSwgQkFOREdBUF9BTkRfQklBU19DT05UUk9MLAo+ICsJCQkgICAgICBQT1dF Ul9DT05UUk9MIHwgSU5URVJOQUxfUkVHX0NVUlJFTlQgfAo+ICsJCQkgICAgICBCSUFTX0JMT0NL X09OIHwgQkFOREdBUF9PTik7Cj4gKwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgVEVS TUlOQVRJT05fUkVTSVNURVJfQ09OVFJPTCwKPiArCQkJICAgICAgVEVSX1JFU0lTVE9SX0xPVyB8 IFRFUl9DQUxfRE9ORSB8Cj4gKwkJCSAgICAgIFNFVFJEX01BWCB8IFRFUl9SRVNJU1RPUlNfT04p Owo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgVEVSTUlOQVRJT05fUkVTSVNURVJfQ09O VFJPTCwKPiArCQkJICAgICAgVEVSX1JFU0lTVE9SX0hJR0ggfCBMRVZFTF9TSElGVEVSU19PTiB8 Cj4gKwkJCSAgICAgIFNFVFJEX01BWCB8IFBPV0VSX01BTkFHRSB8Cj4gKwkJCSAgICAgIFRFUl9S RVNJU1RPUlNfT04pOwo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0NM T0NLX0xBTkVfUkVRVUVTVF9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIFRMUF9QUk9H UkFNX0VOIHwgbnMyYmMoZHNpLCA1MDApKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ks IEhTX1RYX0NMT0NLX0xBTkVfUFJFUEFSRV9TVEFURV9USU1FX0NPTlRST0wsCj4gKwkJCSAgICAg IFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwgNDApKTsKPiArCWR3X21pcGlfZHNpX3Bo eV93cml0ZShkc2ksIEhTX1RYX0NMT0NLX0xBTkVfSFNfWkVST19TVEFURV9USU1FX0NPTlRST0ws Cj4gKwkJCSAgICAgIFRIU19aRVJPX1BST0dSQU1fRU4gfCBuczJiYyhkc2ksIDMwMCkpOwo+ICsJ ZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFORV9UUkFJTF9TVEFURV9U SU1FX0NPTlRST0wsCj4gKwkJCSAgICAgIFRIU19QUkVfUFJPR1JBTV9FTiB8IG5zMnVpKGRzaSwg MTAwKSk7Cj4gKwlkd19taXBpX2RzaV9waHlfd3JpdGUoZHNpLCBIU19UWF9DTE9DS19MQU5FX0VY SVRfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBCSVQoNSkgfCBuczJiYyhkc2ksIDEw MCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfQ0xPQ0tfTEFORV9QT1NU X1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgQklUKDUpIHwgKG5zMmJjKGRzaSwgNjApICsgNykp Owo+ICsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9SRVFV RVNUX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgVExQX1BST0dSQU1fRU4gfCBuczJi Yyhkc2ksIDUwMCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRlKGRzaSwgSFNfVFhfREFUQV9M QU5FX1BSRVBBUkVfU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkgICAgICBUSFNfUFJFX1BST0dS QU1fRU4gfCAobnMydWkoZHNpLCA1MCkgKyAyMCkpOwo+ICsJZHdfbWlwaV9kc2lfcGh5X3dyaXRl KGRzaSwgSFNfVFhfREFUQV9MQU5FX0hTX1pFUk9fU1RBVEVfVElNRV9DT05UUk9MLAo+ICsJCQkg ICAgICBUSFNfWkVST19QUk9HUkFNX0VOIHwgKG5zMmJjKGRzaSwgMTQwKSArIDIpKTsKPiArCWR3 X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9UUkFJTF9TVEFURV9USU1F X0NPTlRST0wsCj4gKwkJCSAgICAgIFRIU19QUkVfUFJPR1JBTV9FTiB8IChuczJ1aShkc2ksIDYw KSArIDgpKTsKPiArCWR3X21pcGlfZHNpX3BoeV93cml0ZShkc2ksIEhTX1RYX0RBVEFfTEFORV9F WElUX1NUQVRFX1RJTUVfQ09OVFJPTCwKPiArCQkJICAgICAgQklUKDUpIHwgbnMyYmMoZHNpLCAx MDApKTsKPiArCj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNpLT5waHlfY2ZnX2Nsayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICtkd19taXBpX2RzaV9n ZXRfbGFuZV9tYnBzKHZvaWQgKnByaXZfZGF0YSwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1v ZGUsCj4gKwkJCSAgdW5zaWduZWQgbG9uZyBtb2RlX2ZsYWdzLCB1MzIgbGFuZXMsIHUzMiBmb3Jt YXQsCj4gKwkJCSAgdW5zaWduZWQgaW50ICpsYW5lX21icHMpCj4gK3sKPiArCXN0cnVjdCBkd19t aXBpX2RzaV9yb2NrY2hpcCAqZHNpID0gcHJpdl9kYXRhOwo+ICsJaW50IGJwcDsKPiArCXVuc2ln bmVkIGxvbmcgbXBjbGssIHRtcDsKPiArCXVuc2lnbmVkIGludCB0YXJnZXRfbWJwcyA9IDEwMDA7 Cj4gKwl1bnNpZ25lZCBpbnQgbWF4X21icHMgPSBkcHBhX21hcFtBUlJBWV9TSVpFKGRwcGFfbWFw KSAtIDFdLm1heF9tYnBzOwo+ICsJdW5zaWduZWQgbG9uZyBiZXN0X2ZyZXEgPSAwOwo+ICsJdW5z aWduZWQgbG9uZyBmdmNvX21pbiwgZnZjb19tYXgsIGZpbiwgZm91dDsKPiArCXVuc2lnbmVkIGlu dCBtaW5fcHJlZGl2LCBtYXhfcHJlZGl2Owo+ICsJdW5zaWduZWQgaW50IF9wcmVkaXYsIHVuaW5p dGlhbGl6ZWRfdmFyKGJlc3RfcHJlZGl2KTsKPiArCXVuc2lnbmVkIGxvbmcgX2ZiZGl2LCB1bmlu aXRpYWxpemVkX3ZhcihiZXN0X2ZiZGl2KTsKPiArCXVuc2lnbmVkIGxvbmcgbWluX2RlbHRhID0g VUxPTkdfTUFYOwo+ICsKPiArCWRzaS0+Zm9ybWF0ID0gZm9ybWF0Owo+ICsJYnBwID0gbWlwaV9k c2lfcGl4ZWxfZm9ybWF0X3RvX2JwcChkc2ktPmZvcm1hdCk7Cj4gKwlpZiAoYnBwIDwgMCkgewo+ ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsCj4gKwkJCSAgICAgICJmYWlsZWQgdG8gZ2V0IGJw cCBmb3IgcGl4ZWwgZm9ybWF0ICVkXG4iLAo+ICsJCQkgICAgICBkc2ktPmZvcm1hdCk7Cj4gKwkJ cmV0dXJuIGJwcDsKPiArCX0KPiArCj4gKwltcGNsayA9IERJVl9ST1VORF9VUChtb2RlLT5jbG9j aywgTVNFQ19QRVJfU0VDKTsKPiArCWlmIChtcGNsaykgewo+ICsJCS8qIHRha2UgMSAvIDAuOCwg c2luY2UgbWJwcyBtdXN0IGJpZyB0aGFuIGJhbmR3aWR0aCBvZiBSR0IgKi8KPiArCQl0bXAgPSBt cGNsayAqIChicHAgLyBsYW5lcykgKiAxMCAvIDg7Cj4gKwkJaWYgKHRtcCA8IG1heF9tYnBzKQo+ ICsJCQl0YXJnZXRfbWJwcyA9IHRtcDsKPiArCQllbHNlCj4gKwkJCURSTV9ERVZfRVJST1IoZHNp LT5kZXYsCj4gKwkJCQkgICAgICAiRFBIWSBjbG9jayBmcmVxdWVuY3kgaXMgb3V0IG9mIHJhbmdl XG4iKTsKPiArCX0KPiArCj4gKwlmaW4gPSBjbGtfZ2V0X3JhdGUoZHNpLT5wbGxyZWZfY2xrKTsK PiArCWZvdXQgPSB0YXJnZXRfbWJwcyAqIFVTRUNfUEVSX1NFQzsKPiArCj4gKwkvKiBjb25zdHJh aW50OiA1TWh6IDw9IEZyZWYgLyBOIDw9IDQwTUh6ICovCj4gKwltaW5fcHJlZGl2ID0gRElWX1JP VU5EX1VQKGZpbiwgNDAgKiBVU0VDX1BFUl9TRUMpOwo+ICsJbWF4X3ByZWRpdiA9IGZpbiAvICg1 ICogVVNFQ19QRVJfU0VDKTsKPiArCj4gKwkvKiBjb25zdHJhaW50OiA4ME1IeiA8PSBGdmNvIDw9 IDE1MDBNaHogKi8KPiArCWZ2Y29fbWluID0gODAgKiBVU0VDX1BFUl9TRUM7Cj4gKwlmdmNvX21h eCA9IDE1MDAgKiBVU0VDX1BFUl9TRUM7Cj4gKwo+ICsJZm9yIChfcHJlZGl2ID0gbWluX3ByZWRp djsgX3ByZWRpdiA8PSBtYXhfcHJlZGl2OyBfcHJlZGl2KyspIHsKPiArCQl1NjQgdG1wOwo+ICsJ CXUzMiBkZWx0YTsKPiArCQkvKiBGdmNvID0gRnJlZiAqIE0gLyBOICovCj4gKwkJdG1wID0gKHU2 NClmb3V0ICogX3ByZWRpdjsKPiArCQlkb19kaXYodG1wLCBmaW4pOwo+ICsJCV9mYmRpdiA9IHRt cDsKPiArCQkvKgo+ICsJCSAqIER1ZSB0byB0aGUgdXNlIG9mIGEgImJ5IDIgcHJlLXNjYWxlciwi IHRoZSByYW5nZSBvZiB0aGUKPiArCQkgKiBmZWVkYmFjayBtdWx0aXBsaWNhdGlvbiB2YWx1ZSBN IGlzIGxpbWl0ZWQgdG8gZXZlbiBkaXZpc2lvbgo+ICsJCSAqIG51bWJlcnMsIGFuZCBtIG11c3Qg YmUgZ3JlYXRlciB0aGFuIDYsIGxlc3MgdGhhbiA1MTIuCj4gKwkJICovCj4gKwkJaWYgKF9mYmRp diA8IDYgfHwgX2ZiZGl2ID4gNTEyKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJX2ZiZGl2ICs9 IF9mYmRpdiAlIDI7Cj4gKwo+ICsJCXRtcCA9ICh1NjQpX2ZiZGl2ICogZmluOwo+ICsJCWRvX2Rp dih0bXAsIF9wcmVkaXYpOwo+ICsJCWlmICh0bXAgPCBmdmNvX21pbiB8fCB0bXAgPiBmdmNvX21h eCkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWRlbHRhID0gYWJzKGZvdXQgLSB0bXApOwo+ICsJ CWlmIChkZWx0YSA8IG1pbl9kZWx0YSkgewo+ICsJCQliZXN0X3ByZWRpdiA9IF9wcmVkaXY7Cj4g KwkJCWJlc3RfZmJkaXYgPSBfZmJkaXY7Cj4gKwkJCW1pbl9kZWx0YSA9IGRlbHRhOwo+ICsJCQli ZXN0X2ZyZXEgPSB0bXA7Cj4gKwkJfQo+ICsJfQo+ICsJaWYgKGJlc3RfZnJlcSkgewo+ICsJCWRz aS0+bGFuZV9tYnBzID0gRElWX1JPVU5EX1VQKGJlc3RfZnJlcSwgVVNFQ19QRVJfU0VDKTsKPiAr CQkqbGFuZV9tYnBzID0gZHNpLT5sYW5lX21icHM7Cj4gKwkJZHNpLT5pbnB1dF9kaXYgPSBiZXN0 X3ByZWRpdjsKPiArCQlkc2ktPmZlZWRiYWNrX2RpdiA9IGJlc3RfZmJkaXY7Cj4gKwl9IGVsc2UK PiArCQlEUk1fREVWX0VSUk9SKGRzaS0+ZGV2LCAiQ2FuIG5vdCBmaW5kIGJlc3RfZnJlcSBmb3Ig RFBIWVxuIik7CgpSZXR1cm4gYW4gZXJyb3I/IEFsc28sIHVzZSBicmFjZXMgb24gdGhlICdlbHNl JyBpZiB5b3UgaGFkIHRvIHVzZSB0aGVtCm9uIHRoZSAnaWYnLgoKPiArCj4gKwlyZXR1cm4gMDsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkd19taXBpX2RzaV9waHlfb3BzIGR3X21p cGlfZHNpX3JvY2tjaGlwX3BoeV9vcHMgPSB7Cj4gKwkuaW5pdCA9IGR3X21pcGlfZHNpX3BoeV9p bml0LAo+ICsJLmdldF9sYW5lX21icHMgPSBkd19taXBpX2RzaV9nZXRfbGFuZV9tYnBzLAo+ICt9 Owo+ICsKPiArc3RhdGljIHN0cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhIHJrMzI4OF9j aGlwX2RhdGEgPSB7Cj4gKwkuZHNpMF9lbl9iaXQgPSBSSzMyODhfRFNJMF9TRUxfVk9QX0xJVCwK PiArCS5kc2kxX2VuX2JpdCA9IFJLMzI4OF9EU0kxX1NFTF9WT1BfTElULAo+ICsJLmdyZl9zd2l0 Y2hfcmVnID0gUkszMjg4X0dSRl9TT0NfQ09ONiwKPiArCS5tYXhfZGF0YV9sYW5lcyA9IDQsCj4g K307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHJvY2tjaGlwX2R3X2RzaV9jaGlwX2RhdGEgcmszMzk5 X2NoaXBfZGF0YSA9IHsKPiArCS5kc2kwX2VuX2JpdCA9IFJLMzM5OV9EU0kwX1NFTF9WT1BfTElU LAo+ICsJLmRzaTFfZW5fYml0ID0gUkszMzk5X0RTSTFfU0VMX1ZPUF9MSVQsCj4gKwkuZ3JmX3N3 aXRjaF9yZWcgPSBSSzMzOTlfR1JGX1NPQ19DT04yMCwKPiArCS5ncmZfZHNpMF9tb2RlID0gUksz Mzk5X0dSRl9EU0lfTU9ERSwKPiArCS5ncmZfZHNpMF9tb2RlX3JlZyA9IFJLMzM5OV9HUkZfU09D X0NPTjIyLAo+ICsJLmZsYWdzID0gRFdfTUlQSV9ORUVEU19QSFlfQ0ZHX0NMSyB8IERXX01JUElf TkVFRFNfR1JGX0NMSywKPiArCS5tYXhfZGF0YV9sYW5lcyA9IDQsCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF9kdF9pZHNb XSA9IHsKPiArCXsKPiArCSAuY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtbWlwaS1kc2ki LAo+ICsJIC5kYXRhID0gJnJrMzI4OF9jaGlwX2RhdGEsCj4gKwl9LCB7Cj4gKwkgLmNvbXBhdGli bGUgPSAicm9ja2NoaXAscmszMzk5LW1pcGktZHNpIiwKPiArCSAuZGF0YSA9ICZyazMzOTlfY2hp cF9kYXRhLAo+ICsJfSwKPiArCXsgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ICtNT0RVTEVfREVW SUNFX1RBQkxFKG9mLCBkd19taXBpX2RzaV9yb2NrY2hpcF9kdF9pZHMpOwo+ICsKPiArc3RhdGlj IHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9ub3Aoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVy KQo+ICt7Cj4gKwkvKiBkbyBub3RoaW5nICovCj4gK30KCkFzIG9mIHRoaXM6Cjc1MjI5ZWNhNTY5 ZiBkcm06IE1ha2UgZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzIG9wdGlvbmFsCnRoZXNlICJub3Ai IGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgb3B0aW9uYWwuIFlvdSBjYW4ganVzdCBjb21wbGV0ZWx5 CnJlbW92ZSB0aGUgLmVuYWJsZS8uZGlzYWJsZSBjYWxsYmFja3MgaW4gdGhpcyBkcml2ZXIuCgo+ ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3NldChzdHJ1Y3QgZHJt X2VuY29kZXIgKmVuY29kZXIsCj4gKwkJCQkJICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAq bW9kZSwKPiArCQkJCQkgICAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZCkKPiAr ewo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSB0b19kc2koZW5jb2Rlcik7 Cj4gKwljb25zdCBzdHJ1Y3Qgcm9ja2NoaXBfZHdfZHNpX2NoaXBfZGF0YSAqY2RhdGEgPSBkc2kt PmNkYXRhOwo+ICsJaW50IHZhbCwgcmV0Owo+ICsKPiArCS8qCj4gKwkgKiBGb3IgdGhlIFJLMzM5 OSwgdGhlIGNsayBvZiBncmYgbXVzdCBiZSBlbmFibGVkIGJlZm9yZSB3cml0aW5nIGdyZgo+ICsJ ICogcmVnaXN0ZXIuIEFuZCBmb3IgUkszMjg4IG9yIG90aGVyIHNvYywgdGhpcyBncmZfY2xrIG11 c3QgYmUgTlVMTCwKPiArCSAqIHRoZSBjbGtfcHJlcGFyZV9lbmFibGUgcmV0dXJuIHRydWUgZGly ZWN0bHkuCj4gKwkgKi8KPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkc2ktPmdyZl9jbGsp Owo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJGYWlsZWQgdG8g ZW5hYmxlIGdyZl9jbGs6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwly ZXQgPSBkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoZHNpLT5kZXYtPm9mX25vZGUs Cj4gKwkJCQkJCSZkc2ktPmVuY29kZXIpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuOwoK T24gZmFpbHVyZSBoZXJlLCB5b3UgbmVlZCB0byBkaXNhYmxlIHRoZSBHUkYgY2xvY2suIE9yLCB5 b3UgY291bGQgbW92ZQpkcm1fb2ZfZW5jb2Rlcl9hY3RpdmVfZW5kcG9pbnRfaWQoKSBiZWZvcmUK Y2xrX3ByZXBhcmVfZW5hYmxlKGRzaS0+Z3JmX2NsaykuCgo+ICsKPiArCXZhbCA9IGNkYXRhLT5k c2kwX2VuX2JpdCA8PCAxNjsKPiArCWlmIChyZXQpCj4gKwkJdmFsIHw9IGNkYXRhLT5kc2kwX2Vu X2JpdDsKPiArCXJlZ21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGNkYXRhLT5ncmZfc3dpdGNo X3JlZywgdmFsKTsKPiArCj4gKwlpZiAoY2RhdGEtPmdyZl9kc2kwX21vZGVfcmVnKQo+ICsJCXJl Z21hcF93cml0ZShkc2ktPmdyZl9yZWdtYXAsIGNkYXRhLT5ncmZfZHNpMF9tb2RlX3JlZywKPiAr CQkJICAgICBjZGF0YS0+Z3JmX2RzaTBfbW9kZSk7Cj4gKwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+Z3JmX2Nsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQKPiArZHdfbWlwaV9kc2lf ZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+ICsJCQkJ IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKPiArCQkJCSBzdHJ1Y3QgZHJtX2Nv bm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSkKPiArewo+ICsJc3RydWN0IHJvY2tjaGlwX2NydGNf c3RhdGUgKnMgPSB0b19yb2NrY2hpcF9jcnRjX3N0YXRlKGNydGNfc3RhdGUpOwo+ICsJc3RydWN0 IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSB0b19kc2koZW5jb2Rlcik7Cj4gKwo+ICsJc3dp dGNoIChkc2ktPmZvcm1hdCkgewo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4Ogo+ICsJCXMt Pm91dHB1dF9tb2RlID0gUk9DS0NISVBfT1VUX01PREVfUDg4ODsKPiArCQlicmVhazsKPiArCWNh c2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPiArCQlzLT5vdXRwdXRfbW9kZSA9IFJPQ0tDSElQX09V VF9NT0RFX1A2NjY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I1NjU6Cj4g KwkJcy0+b3V0cHV0X21vZGUgPSBST0NLQ0hJUF9PVVRfTU9ERV9QNTY1Owo+ICsJCWJyZWFrOwo+ ICsJZGVmYXVsdDoKPiArCQlXQVJOX09OKDEpOwo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsJfQo+ ICsKPiArCXMtPm91dHB1dF90eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RTSTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZW5jb2Rlcl9oZWxw ZXJfZnVuY3MKPiArZHdfbWlwaV9kc2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MgPSB7Cj4gKwkuZW5h YmxlID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9ub3AsCj4gKwkuZGlzYWJsZSA9IGR3X21pcGlfZHNp X2VuY29kZXJfbm9wLAo+ICsJLm1vZGVfc2V0ID0gZHdfbWlwaV9kc2lfZW5jb2Rlcl9tb2RlX3Nl dCwKPiArCS5hdG9taWNfY2hlY2sgPSBkd19taXBpX2RzaV9lbmNvZGVyX2F0b21pY19jaGVjaywK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2VuY29kZXJfZnVuY3MgZHdfbWlw aV9kc2lfZW5jb2Rlcl9mdW5jcyA9IHsKPiArCS5kZXN0cm95ID0gZHJtX2VuY29kZXJfY2xlYW51 cCwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgcm9ja2NoaXBfZHNpX2RybV9jcmVhdGVfZW5jb2Rl cihzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKmRzaSwKPiArCQkJCQkgICBzdHJ1Y3QgZHJt X2RldmljZSAqZHJtX2RldikKPiArewo+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0g JmRzaS0+ZW5jb2RlcjsKPiArCWludCByZXQ7Cj4gKwo+ICsJZW5jb2Rlci0+cG9zc2libGVfY3J0 Y3MgPSBkcm1fb2ZfZmluZF9wb3NzaWJsZV9jcnRjcyhkcm1fZGV2LAo+ICsJCQkJCQkJICAgICBk c2ktPmRldi0+b2Zfbm9kZSk7Cj4gKwo+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkcm1fZGV2 LCBlbmNvZGVyLCAmZHdfbWlwaV9kc2lfZW5jb2Rlcl9mdW5jcywKPiArCQkJICAgICAgIERSTV9N T0RFX0VOQ09ERVJfRFNJLCBOVUxMKTsKPiArCWlmIChyZXQpIHsKPiArCQlEUk1fRVJST1IoIkZh aWxlZCB0byBpbml0aWFsaXplIGVuY29kZXIgd2l0aCBkcm1cbiIpOwo+ICsJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJZHJtX2VuY29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmZHdfbWlwaV9k c2lfZW5jb2Rlcl9oZWxwZXJfZnVuY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGR3X21pcGlfZHNpX3JvY2tjaGlwX2JpbmQoc3RydWN0IGRldmljZSAqZGV2LAo+ ICsJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICptYXN0ZXIsCj4gKwkJCQkgICAgIHZvaWQgKmRhdGEp Cj4gK3sKPiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkID0KPiArCQkJb2ZfbWF0 Y2hfZGV2aWNlKGR3X21pcGlfZHNpX3JvY2tjaGlwX2R0X2lkcywgZGV2KTsKPiArCWNvbnN0IHN0 cnVjdCByb2NrY2hpcF9kd19kc2lfY2hpcF9kYXRhICpjZGF0YSA9IG9mX2lkLT5kYXRhOwo+ICsJ c3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwICpkc2kgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsK CkhtbSwgSSBzZWUgYSAiZ2V0X2RydmRhdGEoKSIgYnV0IG5vICJzZXRfZHJ2ZGF0YSgpIiBpbiB0 aGlzIGRyaXZlci4KQWxzbywgdGhlIGJyaWRnZSBkcml2ZXIgaXMgZmlnaHRpbmcgeW91IG9uIHRo aXMgb25lLiBZb3UnbGwgbmVlZCBteQpwYXRjaCBbMV0gZm9yIHRoaXMgdG8gbWFrZSBzZW5zZS4K ClsxXSBodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEwMDc4NDkzLwoKPiArCXN0 cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRv X3BsYXRmb3JtX2RldmljZShkZXYpOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBk YXRhOwo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJZHNpID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkc2kpLCBHRlBfS0VS TkVMKTsKPiArCWlmICghZHNpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWRzaS0+Y2Rh dGEgPSBjZGF0YTsKPiArCWRzaS0+ZGV2ID0gZGV2Owo+ICsKPiArCXJlcyA9IHBsYXRmb3JtX2dl dF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gKwlpZiAoIXJlcykgewo+ICsJ CURSTV9FUlJPUigiVW5hYmxlIHRvIGdldCByZXNvdXJjZVxuIik7Cj4gKwkJcmV0dXJuIC1FTk9E RVY7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwg cmVzKTsKPiArCWlmIChJU19FUlIoZHNpLT5iYXNlKSkgewo+ICsJCURSTV9FUlJPUigiVW5hYmxl IHRvIGdldCBkc2kgcmVnaXN0ZXJzXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihkc2ktPmJhc2Up Owo+ICsJfQo+ICsKPiArCWRzaS0+cGxscmVmX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYi KTsKPiArCWlmIChJU19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgewo+ICsJCXJldCA9IFBUUl9FUlIo ZHNpLT5wbGxyZWZfY2xrKTsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJICAgICAgIlVu YWJsZSB0byBnZXQgcGxsIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlpZiAoY2RhdGEtPmZsYWdzICYgRFdfTUlQSV9ORUVEU19QSFlf Q0ZHX0NMSykgewo+ICsJCWRzaS0+cGh5X2NmZ19jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGh5 X2NmZyIpOwo+ICsJCWlmIChJU19FUlIoZHNpLT5waHlfY2ZnX2NsaykpIHsKPiArCQkJcmV0ID0g UFRSX0VSUihkc2ktPnBoeV9jZmdfY2xrKTsKPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsCj4gKwkJ CQkgICAgICAiVW5hYmxlIHRvIGdldCBwaHlfY2ZnX2NsazogJWRcbiIsIHJldCk7Cj4gKwkJCXJl dHVybiByZXQ7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChjZGF0YS0+ZmxhZ3MgJiBEV19NSVBJ X05FRURTX0dSRl9DTEspIHsKPiArCQlkc2ktPmdyZl9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAi Z3JmIik7Cj4gKwkJaWYgKElTX0VSUihkc2ktPmdyZl9jbGspKSB7Cj4gKwkJCXJldCA9IFBUUl9F UlIoZHNpLT5ncmZfY2xrKTsKPiArCQkJRFJNX0RFVl9FUlJPUihkZXYsICJVbmFibGUgdG8gZ2V0 IGdyZl9jbGs6ICVkXG4iLCByZXQpOwo+ICsJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0KPiAr Cj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoZHNpLT5wbGxyZWZfY2xrKTsKPiArCWlmIChy ZXQpIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwKPiArCQkJICAgICAgIiVzOiBGYWlsZWQgdG8g ZW5hYmxlIHBsbHJlZl9jbGtcbiIsIF9fZnVuY19fKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCWRzaS0+Z3JmX3JlZ21hcCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUo bnAsICJyb2NrY2hpcCxncmYiKTsKPiArCWlmIChJU19FUlIoZHNpLT5ncmZfcmVnbWFwKSkgewo+ ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJVbmFibGUgdG8gZ2V0IHJvY2tjaGlwLGdyZlxu Iik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIoZHNpLT5ncmZfcmVnbWFwKTsKPiArCX0KPiArCj4gKwlk c2ktPnBkYXRhLmJhc2UgPSBkc2ktPmJhc2U7Cj4gKwlkc2ktPnBkYXRhLnByaXZfZGF0YSA9IGRz aTsKPiArCWRzaS0+cGRhdGEubWF4X2RhdGFfbGFuZXMgPSBjZGF0YS0+bWF4X2RhdGFfbGFuZXM7 Cj4gKwlkc2ktPnBkYXRhLnBoeV9vcHMgPSAmZHdfbWlwaV9kc2lfcm9ja2NoaXBfcGh5X29wczsK PiArCj4gKwlyZXQgPSByb2NrY2hpcF9kc2lfZHJtX2NyZWF0ZV9lbmNvZGVyKGRzaSwgZHJtX2Rl dik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIGRybSBl bmNvZGVyXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsJcmV0ID0gZHdfbWlwaV9kc2lf YmluZChwZGV2LCAmZHNpLT5lbmNvZGVyLCAmZHNpLT5wZGF0YSk7Cj4gKwlpZiAocmV0KSB7Cj4g KwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYmluZFxuIik7Cj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGRzaS0+cGxscmVmX2Nsayk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCXJldHVybiAw Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9yb2NrY2hpcF91bmJpbmQoc3Ry dWN0IGRldmljZSAqZGV2LAo+ICsJCQkJCXN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJCQl2 b2lkICpkYXRhKQo+ICt7CgpBcmUgeW91IGdvaW5nIHRvIHVuZG8gYW55dGhpbmcgaGVyZT8gZS5n LiwgZHdfbWlwaV9kc2lfdW5iaW5kKCkgYW5kCmNsa19kaXNhYmxlX3VucHJlcGFyZShkc2ktPnBs bHJlZl9jbGspPwoKQnJpYW4KCj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tcG9u ZW50X29wcyBkd19taXBpX2RzaV9yb2NrY2hpcF9vcHMgPSB7Cj4gKwkuYmluZAk9IGR3X21pcGlf ZHNpX3JvY2tjaGlwX2JpbmQsCj4gKwkudW5iaW5kCT0gZHdfbWlwaV9kc2lfcm9ja2NoaXBfdW5i aW5kLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwlyZXR1cm4gY29tcG9uZW50X2Fk ZCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lfcm9ja2NoaXBfb3BzKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikKPiArewo+ICsJY29tcG9uZW50X2RlbCgmcGRldi0+ZGV2LCAmZHdfbWlwaV9kc2lf cm9ja2NoaXBfb3BzKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RydWN0IHBsYXRm b3JtX2RyaXZlciBkd19taXBpX2RzaV9yb2NrY2hpcF9kcml2ZXIgPSB7Cj4gKwkucHJvYmUJCT0g ZHdfbWlwaV9kc2lfcm9ja2NoaXBfcHJvYmUsCj4gKwkucmVtb3ZlCQk9IGR3X21pcGlfZHNpX3Jv Y2tjaGlwX3JlbW92ZSwKPiArCS5kcml2ZXIJCT0gewo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGR3 X21pcGlfZHNpX3JvY2tjaGlwX2R0X2lkcywKPiArCQkubmFtZQk9ICJkdy1taXBpLWRzaS1yb2Nr Y2hpcCIsCj4gKwl9LAo+ICt9Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9ja2No aXAvcm9ja2NoaXBfZHJtX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlw X2RybV9kcnYuYwo+IGluZGV4IDc2ZDYzZGUuLmQ0MGNjMzkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL3JvY2tjaGlwL3JvY2tjaGlwX2RybV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmMKPiBAQCAtNDYyLDcgKzQ2Miw3IEBAIHN0 YXRpYyBpbnQgX19pbml0IHJvY2tjaGlwX2RybV9pbml0KHZvaWQpCj4gIAlBRERfUk9DS0NISVBf U1VCX0RSSVZFUihjZG5fZHBfZHJpdmVyLCBDT05GSUdfUk9DS0NISVBfQ0ROX0RQKTsKPiAgCUFE RF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGR3X2hkbWlfcm9ja2NoaXBfcGx0Zm1fZHJpdmVyLAo+ICAJ CQkJQ09ORklHX1JPQ0tDSElQX0RXX0hETUkpOwo+IC0JQUREX1JPQ0tDSElQX1NVQl9EUklWRVIo ZHdfbWlwaV9kc2lfZHJpdmVyLAo+ICsJQUREX1JPQ0tDSElQX1NVQl9EUklWRVIoZHdfbWlwaV9k c2lfcm9ja2NoaXBfZHJpdmVyLAo+ICAJCQkJQ09ORklHX1JPQ0tDSElQX0RXX01JUElfRFNJKTsK PiAgCUFERF9ST0NLQ0hJUF9TVUJfRFJJVkVSKGlubm9faGRtaV9kcml2ZXIsIENPTkZJR19ST0NL Q0hJUF9JTk5PX0hETUkpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JvY2tj aGlwL3JvY2tjaGlwX2RybV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hp cF9kcm1fZHJ2LmgKPiBpbmRleCA0OThkZmJjLi5hZjIzNWIyIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX2Rydi5oCj4gQEAgLTY2LDcgKzY2LDcgQEAgdm9p ZCByb2NrY2hpcF9kcm1fZG1hX2RldGFjaF9kZXZpY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRybV9k ZXYsCj4gIAo+ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjZG5fZHBfZHJpdmVyOwo+ ICBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19oZG1pX3JvY2tjaGlwX3BsdGZtX2Ry aXZlcjsKPiAtZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHdfbWlwaV9kc2lfZHJpdmVy Owo+ICtleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19taXBpX2RzaV9yb2NrY2hpcF9k cml2ZXI7Cj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlubm9faGRtaV9kcml2ZXI7 Cj4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvY2tjaGlwX2RwX2RyaXZlcjsKPiAg ZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcm9ja2NoaXBfbHZkc19kcml2ZXI7Cj4gLS0g Cj4gMS45LjEKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==