From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Icenowy Zheng To: =?utf-8?B?SmVybmVqIMWga3JhYmVj?= In-Reply-To: <7293775.U3DfjPVPeZ@jernej-laptop> References: <20170222151854.3280-1-icenowy@aosc.xyz> <20170222151854.3280-5-icenowy@aosc.xyz> <7293775.U3DfjPVPeZ@jernej-laptop> Subject: Re: [PATCH 4/8] drm/sun4i: add support for sun8i DE2 mixers and display engines MIME-Version: 1.0 Message-Id: <5575691487801085@web19h.yandex.ru> Date: Thu, 23 Feb 2017 06:04:45 +0800 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jean-Francois Moine , "devicetree@vger.kernel.org" , David Airlie , "linux-sunxi@googlegroups.com" , "linux-kernel@vger.kernel.org" , "dri-devel@lists.freedesktop.org" , Chen-Yu Tsai , Rob Herring , Maxime Ripard , "linux-clk@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="utf-8" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+mturquette=baylibre.com@lists.infradead.org List-ID: CgoyMy4wMi4yMDE3LCAwNjowMSwgIkplcm5laiDFoGtyYWJlYyIgPGplcm5lai5za3JhYmVjQHNp b2wubmV0PjoKPiBIaSwKPgo+IERuZSBzcmVkYSwgMjIuIGZlYnJ1YXIgMjAxNyBvYiAxNjoxODo1 MCBDRVQgamUgSWNlbm93eSBaaGVuZyBuYXBpc2FsKGEpOgo+PiDCoEFsbHdpbm5lciBoYXZlIGEg bmV3ICJEaXNwbGF5IEVuZ2luZSAyLjAiIGluIHRoZXJlIG5ldyBTb0NzLCB3aGljaCBjb21lcwo+ PiDCoGluIGEgbmV3ICJEaXNwbGF5IEVuZ2luZSIgKG1peGVycyBpbnN0ZWFkIG9mIG9sZCBiYWNr ZW5kcyBhbmQKPj4gwqBmcm9udGVuZHMpLgo+Pgo+PiDCoEFkZCBzdXBwb3J0IGZvciB0aGUgbWl4 ZXIgb24gQWxsd2lubmVyIFYzcyBTb0M7IGl0J3MgdGhlIHNpbXBsZXN0IG9uZS4KPj4KPj4gwqBT aWduZWQtb2ZmLWJ5OiBJY2Vub3d5IFpoZW5nIDxpY2Vub3d5QGFvc2MueHl6Pgo+PiDCoC0tLQo+ PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL0tjb25maWcgfCA4ICsKPj4gwqDCoGRyaXZlcnMv Z3B1L2RybS9zdW40aS9NYWtlZmlsZSB8IDEgKwo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRp L3N1bjRpX2NydGMuYyB8IDYgKy0KPj4gwqDCoGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9k cnYuYyB8IDM4ICsrKy0KPj4gwqDCoGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYuaCB8 IDEgKwo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMgfCA5MiArKysr KystLQo+PiDCoMKgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmggfCAxICsKPj4g wqDCoGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW44aV9taXhlci5jIHwgNDE3Cj4+IMKgKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrIGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW44 aV9taXhlci5oIHwKPj4gwqAxMzMgKysrKysrKysrKysrCj4+IMKgwqA5IGZpbGVzIGNoYW5nZWQs IDY3NCBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKPj4gwqDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuOGlfbWl4ZXIuYwo+PiDCoMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW44aV9taXhlci5oCj4+Cj4+IMKgZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL0tjb25maWcKPj4gwqBpbmRleCBhNGIzNTdkYjg4NTYuLjhkZjQwMWZmZjE0NSAxMDA2 NDQKPj4gwqAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvS2NvbmZpZwo+PiDCoCsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9zdW40aS9LY29uZmlnCj4+IMKgQEAgLTEyLDMgKzEyLDExIEBAIGNvbmZp ZyBEUk1fU1VONEkKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQ2hvb3NlIHRoaXMgb3B0aW9u IGlmIHlvdSBoYXZlIGFuIEFsbHdpbm5lciBTb0Mgd2l0aCBhCj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoERpc3BsYXkgRW5naW5lLiBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3VuNGktZHJtLgo+PiDCoCsKPj4g wqArY29uZmlnIERSTV9TVU40SV9ERTIKPj4gwqArIGJvb2wgIlN1cHBvcnQgRGlzcGxheSBFbmdp bmUgMi4wIgo+PiDCoCsgZGVwZW5kcyBvbiBEUk1fU1VONEkKPj4gwqArIGRlZmF1bHQgTUFDSF9T VU44SQo+PiDCoCsgaGVscAo+PiDCoCsgQ2hvb3NlIHRoaXMgb3B0aW9uIGlmIHlvdSBoYXZlIGFu IEFsbHdpbm5lciBTb0Mgd2l0aCBhCj4+IMKgKyAiRGlzcGxheSBFbmdpbmUgMi4wIi4KPj4gwqBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL3N1bjRpL01ha2VmaWxlCj4+IMKgaW5kZXggZDYyNWE4MmE2ZTVmLi44OTBlNmU1MGRmZWUg MTAwNjQ0Cj4+IMKgLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlCj4+IMKgKysr IGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL01ha2VmaWxlCj4+IMKgQEAgLTksNSArOSw2IEBAIHN1 bjRpLXRjb24teSArPSBzdW40aV9kb3RjbG9jay5vCj4+Cj4+IMKgwqBvYmotJChDT05GSUdfRFJN X1NVTjRJKSArPSBzdW40aS1kcm0ubyBzdW40aS10Y29uLm8KPj4gwqDCoG9iai0kKENPTkZJR19E Uk1fU1VONEkpICs9IHN1bjRpX2JhY2tlbmQubwo+PiDCoCtvYmotJChDT05GSUdfRFJNX1NVTjRJ KSArPSBzdW44aV9taXhlci5vCj4+IMKgwqBvYmotJChDT05GSUdfRFJNX1NVTjRJKSArPSBzdW42 aV9kcmMubwo+PiDCoMKgb2JqLSQoQ09ORklHX0RSTV9TVU40SSkgKz0gc3VuNGlfdHYubwo+PiDC oGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jCj4+IMKgYi9k cml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfY3J0Yy5jIGluZGV4IDRhMTkyMjEwNTc0Zi4uNGQy MjI4NDU0NzI2Cj4+IMKgMTAwNjQ0Cj4+IMKgLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1 bjRpX2NydGMuYwo+PiDCoCsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9jcnRjLmMK Pj4gwqBAQCAtMjUsNiArMjUsNyBAQAo+PiDCoMKgI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5o Pgo+Pgo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2JhY2tlbmQuaCIKPj4gwqArI2luY2x1ZGUgInN1 bjhpX21peGVyLmgiCj4+IMKgwqAjaW5jbHVkZSAic3VuNGlfY3J0Yy5oIgo+PiDCoMKgI2luY2x1 ZGUgInN1bjRpX2Rydi5oIgo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX3Rjb24uaCIKPj4gwqBAQCAt NTUsNyArNTYsMTAgQEAgc3RhdGljIHZvaWQgc3VuNGlfY3J0Y19hdG9taWNfZmx1c2goc3RydWN0 IGRybV9jcnRjCj4+IMKgKmNydGMsCj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0RFQlVH X0RSSVZFUigiQ29tbWl0dGluZyBwbGFuZSBjaGFuZ2VzXG4iKTsKPj4KPj4gwqAtIHN1bjRpX2Jh Y2tlbmRfY29tbWl0KGRydi0+YmFja2VuZCk7Cj4+IMKgKyBpZiAoZHJ2LT5iYWNrZW5kKQo+PiDC oCsgc3VuNGlfYmFja2VuZF9jb21taXQoZHJ2LT5iYWNrZW5kKTsKPj4gwqArIGVsc2UgaWYgKGRy di0+bWl4ZXIpCj4+IMKgKyBzdW44aV9taXhlcl9jb21taXQoZHJ2LT5taXhlcik7Cj4KPiBEb2Vz IGl0IG1ha2Ugc2Vuc2UgdG8gaGF2ZSBldmVyeXRoaW5nIGluIHN1bjRpX3tjcnRjLGRydn0gZmls ZXM/IExvb2tpbmcKPiBmdXJ0aGVyIGl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgYSBsb3Qgb2YgZGlm ZmVyZW50aWF0aW9uIGJhc2VkIG9uIERFMSB2cyBERTIuIEkKPiBndWVzcyBoYXZpbmcgc2VwYXJh dGUgc3VuOGlfe2NydGMsZHJ2fSBmaWxlcyB3b3VsZCBiZSBtb3JlIGNsZWFuIGFwcHJvYWNoLiBJ dAo+IHdvdWxkIGVuYWJsZSBlYXNpZXIgZXh0ZW5zaW9ucyBsYXRlciBhcyB3ZWxsLgoKSSB0aGlu ayB0aGV5IGhhdmUgZmV3IGNoYW5nZXMgaGVyZSAtLSBzaGFyaW5nIGNvZGUgcGF0aCBpcyB2ZXJ5 IHZhbHVhYmxlIGluIHRoZXNlCnR3byBmaWxlcy4KCj4KPiBSZWdhcmRzLAo+IEplcm5laiBTa3Jh YmVjCj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoZXZlbnQpIHsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3J0Yy0+c3RhdGUtPmV2ZW50ID0gTlVMTDsKPj4gwqBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2Rydi5jCj4+IMKgYi9kcml2 ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfZHJ2LmMgaW5kZXggNGNlNjY1MzQ5ZjZiLi41OGFmMzhm NWU4MzMgMTAwNjQ0Cj4+IMKgLS0tIGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2Rydi5j Cj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2Rydi5jCj4+IMKgQEAgLTIw LDEyICsyMCwxNyBAQAo+PiDCoMKgI2luY2x1ZGUgPGRybS9kcm1fZmJfaGVscGVyLmg+Cj4+IMKg wqAjaW5jbHVkZSA8ZHJtL2RybV9vZi5oPgo+Pgo+PiDCoCsjaW5jbHVkZSA8bGludXgvb2ZfZGV2 aWNlLmg+Cj4+IMKgKwo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2NydGMuaCIKPj4gwqDCoCNpbmNs dWRlICJzdW40aV9kcnYuaCIKPj4gwqDCoCNpbmNsdWRlICJzdW40aV9mcmFtZWJ1ZmZlci5oIgo+ PiDCoMKgI2luY2x1ZGUgInN1bjRpX2xheWVyLmgiCj4+IMKgwqAjaW5jbHVkZSAic3VuNGlfdGNv bi5oIgo+Pgo+PiDCoCsjZGVmaW5lIERFX1ZFUl9ERSAwCj4+IMKgKyNkZWZpbmUgREVfVkVSX0RF MiAxCj4+IMKgKwo+PiDCoMKgc3RhdGljIGludCBzdW40aV9kcnZfZW5hYmxlX3ZibGFuayhzdHJ1 Y3QgZHJtX2RldmljZSAqZHJtLCB1bnNpZ25lZCBpbnQKPj4gwqBwaXBlKSB7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgc3RydWN0IHN1bjRpX2RydiAqZHJ2ID0gZHJtLT5kZXZfcHJpdmF0ZTsKPj4g wqBAQCAtMTE3LDcgKzEyMiw5IEBAIHN0YXRpYyBpbnQgc3VuNGlfZHJ2X2JpbmQoc3RydWN0IGRl dmljZSAqZGV2KQo+PiDCoMKgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBkcm1fZGV2 aWNlICpkcm07Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHN1bjRpX2RydiAqZHJ2Owo+ PiDCoC0gaW50IHJldDsKPj4gwqArIGludCByZXQsIGRlX3ZlcjsKPj4gwqArCj4+IMKgKyBkZV92 ZXIgPSAoaW50KW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+Pgo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoGRybSA9IGRybV9kZXZfYWxsb2MoJnN1bjRpX2Rydl9kcml2ZXIsIGRldik7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKElTX0VSUihkcm0pKQo+PiDCoEBAIC0xNDAsNyArMTQ3 LDEwIEBAIHN0YXRpYyBpbnQgc3VuNGlfZHJ2X2JpbmQoc3RydWN0IGRldmljZSAqZGV2KQo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoH0KPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDcmVhdGUg b3VyIGxheWVycyAqLwo+PiDCoC0gZHJ2LT5sYXllcnMgPSBzdW40aV9sYXllcnNfaW5pdChkcm0p Owo+PiDCoCsgaWYgKGRlX3ZlciA9PSBERV9WRVJfREUyKQo+PiDCoCsgZHJ2LT5sYXllcnMgPSBz dW44aV9sYXllcnNfaW5pdChkcm0pOwo+PiDCoCsgZWxzZQo+PiDCoCsgZHJ2LT5sYXllcnMgPSBz dW40aV9sYXllcnNfaW5pdChkcm0pOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChJU19FUlIo ZHJ2LT5sYXllcnMpKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoZHJtLT5kZXYsICJDb3VsZG4ndCBjcmVhdGUgdGhlIHBsYW5lc1xuIik7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldCA9IFBUUl9FUlIoZHJ2LT5sYXllcnMp Owo+PiDCoEBAIC0zMjMsMTAgKzMzMywyNiBAQCBzdGF0aWMgaW50IHN1bjRpX2Rydl9yZW1vdmUo c3RydWN0IHBsYXRmb3JtX2RldmljZQo+PiDCoCpwZGV2KSB9Cj4+Cj4+IMKgwqBzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW40aV9kcnZfb2ZfdGFibGVbXSA9IHsKPj4gwqAtIHsg LmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1kaXNwbGF5LWVuZ2luZSIgfSwKPj4g wqAtIHsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS1kaXNwbGF5LWVuZ2luZSIg fSwKPj4gwqAtIHsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMXMtZGlzcGxheS1l bmdpbmUiIH0sCj4+IMKgLSB7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW44aS1hMzMtZGlz cGxheS1lbmdpbmUiIH0sCj4+IMKgKyB7Cj4+IMKgKyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIs c3VuNWktYTEzLWRpc3BsYXktZW5naW5lIiwKPj4gwqArIC5kYXRhID0gKHZvaWQgKilERV9WRVJf REUsCj4+IMKgKyB9LAo+PiDCoCsgewo+PiDCoCsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1 bjZpLWEzMS1kaXNwbGF5LWVuZ2luZSIsCj4+IMKgKyAuZGF0YSA9ICh2b2lkICopREVfVkVSX0RF LAo+PiDCoCsgfSwKPj4gwqArIHsKPj4gwqArIC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW42 aS1hMzFzLWRpc3BsYXktZW5naW5lIiwKPj4gwqArIC5kYXRhID0gKHZvaWQgKilERV9WRVJfREUs Cj4+IMKgKyB9LAo+PiDCoCsgewo+PiDCoCsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjhp LWEzMy1kaXNwbGF5LWVuZ2luZSIsCj4+IMKgKyAuZGF0YSA9ICh2b2lkICopREVfVkVSX0RFLAo+ PiDCoCsgfSwKPj4gwqArIHsKPj4gwqArIC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW44aS12 M3MtZGlzcGxheS1lbmdpbmUiLAo+PiDCoCsgLmRhdGEgPSAodm9pZCAqKURFX1ZFUl9ERTIsCj4+ IMKgKyB9LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHsgfQo+PiDCoMKgfTsKPj4gwqDCoE1PRFVM RV9ERVZJQ0VfVEFCTEUob2YsIHN1bjRpX2Rydl9vZl90YWJsZSk7Cj4+IMKgZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYuaAo+PiDCoGIvZHJpdmVycy9ncHUvZHJt L3N1bjRpL3N1bjRpX2Rydi5oIGluZGV4IDU5NzM1M2VhYjcyOC4uY2YxZGE5NWI4NWJkIDEwMDY0 NAo+PiDCoC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYuaAo+PiDCoCsrKyBi L2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9kcnYuaAo+PiDCoEBAIC0xOCw2ICsxOCw3IEBA Cj4+Cj4+IMKgwqBzdHJ1Y3Qgc3VuNGlfZHJ2IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1 Y3Qgc3VuNGlfYmFja2VuZCAqYmFja2VuZDsKPj4gwqArIHN0cnVjdCBzdW44aV9taXhlciAqbWl4 ZXI7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHN1bjRpX2NydGMgKmNydGM7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHN1bjRpX3Rjb24gKnRjb247Cj4+Cj4+IMKgZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sYXllci5jCj4+IMKgYi9kcml2ZXJz L2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuYyBpbmRleCA1ZDUzYzk3N2JjYTUuLjZkY2RhYzM4 YWI2OQo+PiDCoDEwMDY0NAo+PiDCoC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9s YXllci5jCj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRpX2xheWVyLmMKPj4g wqBAQCAtMTYsNTIgKzE2LDY2IEBACj4+IMKgwqAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4KPj4g wqDCoCNpbmNsdWRlICJzdW40aV9iYWNrZW5kLmgiCj4+IMKgKyNpbmNsdWRlICJzdW44aV9taXhl ci5oIgo+PiDCoMKgI2luY2x1ZGUgInN1bjRpX2Rydi5oIgo+PiDCoMKgI2luY2x1ZGUgInN1bjRp X2xheWVyLmgiCj4+Cj4+IMKgwqBzdHJ1Y3Qgc3VuNGlfcGxhbmVfZGVzYyB7Cj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnVtIGRybV9wbGFuZV90eXBlIHR5cGU7Cj4+IMKg KyAvKiBQaXBlIGlzIG5vdCB1c2VkIGluIHN1bjhpLW1peGVyICovCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB1OCBwaXBlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY29uc3QgdWludDMyX3QgKmZvcm1hdHM7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB1aW50MzJfdCBuZm9ybWF0czsKPj4gwqDCoH07Cj4+Cj4+IMKgLXN0YXRp YyBpbnQgc3VuNGlfYmFja2VuZF9sYXllcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAq cGxhbmUsCj4+IMKgK3N0YXRpYyBpbnQgc3VuNGlfbGF5ZXJfYXRvbWljX2NoZWNrKHN0cnVjdCBk cm1fcGxhbmUgKnBsYW5lLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0 cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnN0YXRlKQo+PiDCoMKgewo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+PiDCoMKgfQo+Pgo+PiDCoC1zdGF0aWMgdm9pZCBzdW40aV9iYWNrZW5k X2xheWVyX2F0b21pY19kaXNhYmxlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+PiDCoCtzdGF0 aWMgdm9pZCBzdW40aV9sYXllcl9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFu ZSwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X3BsYW5lX3N0YXRlICpvbGRfc3RhdGUpCj4+IMKgwqB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IHN1bjRpX2xheWVyICpsYXllciA9IHBsYW5lX3RvX3N1bjRpX2xheWVyKHBsYW5lKTsK Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3Qgc3VuNGlfZHJ2ICpkcnYgPSBsYXllci0+ZHJ2 Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBzdW40aV9iYWNrZW5kICpiYWNrZW5kID0g ZHJ2LT5iYWNrZW5kOwo+PiDCoCsgc3RydWN0IHN1bjhpX21peGVyICptaXhlciA9IGRydi0+bWl4 ZXI7Cj4+Cj4+IMKgLSBzdW40aV9iYWNrZW5kX2xheWVyX2VuYWJsZShiYWNrZW5kLCBsYXllci0+ aWQsIGZhbHNlKTsKPj4gwqArIGlmIChiYWNrZW5kKQo+PiDCoCsgc3VuNGlfYmFja2VuZF9sYXll cl9lbmFibGUoYmFja2VuZCwgbGF5ZXItPmlkLCBmYWxzZSk7Cj4+IMKgKyBlbHNlIGlmIChtaXhl cikKPj4gwqArIHN1bjhpX21peGVyX2xheWVyX2VuYWJsZShtaXhlciwgbGF5ZXItPmlkLCBmYWxz ZSk7Cj4+IMKgwqB9Cj4+Cj4+IMKgLXN0YXRpYyB2b2lkIHN1bjRpX2JhY2tlbmRfbGF5ZXJfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gwqArc3RhdGljIHZvaWQgc3Vu NGlfbGF5ZXJfYXRvbWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAq b2xkX3N0YXRlKQo+PiDCoMKgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCBzdW40aV9s YXllciAqbGF5ZXIgPSBwbGFuZV90b19zdW40aV9sYXllcihwbGFuZSk7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoMKgc3RydWN0IHN1bjRpX2RydiAqZHJ2ID0gbGF5ZXItPmRydjsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqBzdHJ1Y3Qgc3VuNGlfYmFja2VuZCAqYmFja2VuZCA9IGRydi0+YmFja2VuZDsK Pj4gwqAtCj4+IMKgLSBzdW40aV9iYWNrZW5kX3VwZGF0ZV9sYXllcl9jb29yZChiYWNrZW5kLCBs YXllci0+aWQsIHBsYW5lKTsKPj4gwqAtIHN1bjRpX2JhY2tlbmRfdXBkYXRlX2xheWVyX2Zvcm1h dHMoYmFja2VuZCwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKgLSBzdW40aV9iYWNrZW5kX3VwZGF0 ZV9sYXllcl9idWZmZXIoYmFja2VuZCwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKgLSBzdW40aV9i YWNrZW5kX2xheWVyX2VuYWJsZShiYWNrZW5kLCBsYXllci0+aWQsIHRydWUpOwo+PiDCoCsgc3Ry dWN0IHN1bjhpX21peGVyICptaXhlciA9IGRydi0+bWl4ZXI7Cj4+IMKgKwo+PiDCoCsgaWYgKGJh Y2tlbmQpIHsKPj4gwqArIHN1bjRpX2JhY2tlbmRfdXBkYXRlX2xheWVyX2Nvb3JkKGJhY2tlbmQs IGxheWVyLT5pZCwgcGxhbmUpOwo+PiDCoCsgc3VuNGlfYmFja2VuZF91cGRhdGVfbGF5ZXJfZm9y bWF0cyhiYWNrZW5kLCBsYXllci0+aWQsIHBsYW5lKTsKPj4gwqArIHN1bjRpX2JhY2tlbmRfdXBk YXRlX2xheWVyX2J1ZmZlcihiYWNrZW5kLCBsYXllci0+aWQsIHBsYW5lKTsKPj4gwqArIHN1bjRp X2JhY2tlbmRfbGF5ZXJfZW5hYmxlKGJhY2tlbmQsIGxheWVyLT5pZCwgdHJ1ZSk7Cj4+IMKgKyB9 IGVsc2UgaWYgKG1peGVyKSB7Cj4+IMKgKyBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfY29vcmQo bWl4ZXIsIGxheWVyLT5pZCwgcGxhbmUpOwo+PiDCoCsgc3VuOGlfbWl4ZXJfdXBkYXRlX2xheWVy X2Zvcm1hdHMobWl4ZXIsIGxheWVyLT5pZCwgcGxhbmUpOwo+PiDCoCsgc3VuOGlfbWl4ZXJfdXBk YXRlX2xheWVyX2J1ZmZlcihtaXhlciwgbGF5ZXItPmlkLCBwbGFuZSk7Cj4+IMKgKyBzdW44aV9t aXhlcl9sYXllcl9lbmFibGUobWl4ZXIsIGxheWVyLT5pZCwgdHJ1ZSk7Cj4+IMKgKyB9Cj4+IMKg wqB9Cj4+Cj4+IMKgLXN0YXRpYyBzdHJ1Y3QgZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyBzdW40aV9i YWNrZW5kX2xheWVyX2hlbHBlcl9mdW5jcyA9IHsKPj4gwqAtIC5hdG9taWNfY2hlY2sgPSBzdW40 aV9iYWNrZW5kX2xheWVyX2F0b21pY19jaGVjaywKPj4gwqAtIC5hdG9taWNfZGlzYWJsZSA9IHN1 bjRpX2JhY2tlbmRfbGF5ZXJfYXRvbWljX2Rpc2FibGUsCj4+IMKgLSAuYXRvbWljX3VwZGF0ZSA9 IHN1bjRpX2JhY2tlbmRfbGF5ZXJfYXRvbWljX3VwZGF0ZSwKPj4gwqArc3RhdGljIHN0cnVjdCBk cm1fcGxhbmVfaGVscGVyX2Z1bmNzIHN1bjRpX2xheWVyX2hlbHBlcl9mdW5jcyA9IHsKPj4gwqAr IC5hdG9taWNfY2hlY2sgPSBzdW40aV9sYXllcl9hdG9taWNfY2hlY2ssCj4+IMKgKyAuYXRvbWlj X2Rpc2FibGUgPSBzdW40aV9sYXllcl9hdG9taWNfZGlzYWJsZSwKPj4gwqArIC5hdG9taWNfdXBk YXRlID0gc3VuNGlfbGF5ZXJfYXRvbWljX3VwZGF0ZSwKPj4gwqDCoH07Cj4+Cj4+IMKgLXN0YXRp YyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHN1bjRpX2JhY2tlbmRfbGF5ZXJfZnVuY3Mg PSB7Cj4+IMKgK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHN1bjRpX2xheWVy X2Z1bmNzID0gewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoC5hdG9taWNfZGVzdHJveV9zdGF0ZSA9 IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgLmF0b21pY19kdXBsaWNhdGVfc3RhdGUgPSBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9k dXBsaWNhdGVfc3RhdGUsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgLmRlc3Ryb3kgPSBkcm1fcGxh bmVfY2xlYW51cCwKPj4gwqBAQCAtODgsNiArMTAyLDEyIEBAIHN0YXRpYyBjb25zdCB1aW50MzJf dAo+PiDCoHN1bjRpX2JhY2tlbmRfbGF5ZXJfZm9ybWF0c19vdmVybGF5W10gPSB7IERSTV9GT1JN QVRfWFJHQjg4ODgsCj4+IMKgwqB9Owo+Pgo+PiDCoCtzdGF0aWMgY29uc3QgdWludDMyX3Qgc3Vu OGlfbWl4ZXJfbGF5ZXJfZm9ybWF0c1tdID0gewo+PiDCoCsgRFJNX0ZPUk1BVF9BUkdCODg4OCwK Pj4gwqArIERSTV9GT1JNQVRfUkdCODg4LAo+PiDCoCsgRFJNX0ZPUk1BVF9YUkdCODg4OCwKPj4g wqArfTsKPj4gwqArCj4+IMKgwqBzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjRpX3BsYW5lX2Rlc2Mg c3VuNGlfYmFja2VuZF9wbGFuZXNbXSA9IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC50eXBlID0gRFJNX1BMQU5FX1RZUEVf UFJJTUFSWSwKPj4gwqBAQCAtMTAzLDYgKzEyMywxOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHN1 bjRpX3BsYW5lX2Rlc2MKPj4gwqBzdW40aV9iYWNrZW5kX3BsYW5lc1tdID0geyB9LAo+PiDCoMKg fTsKPj4KPj4gwqArc3RhdGljIGNvbnN0IHN0cnVjdCBzdW40aV9wbGFuZV9kZXNjIHN1bjhpX21p eGVyX3BsYW5lc1tdID0gewo+PiDCoCsgewo+PiDCoCsgLnR5cGUgPSBEUk1fUExBTkVfVFlQRV9Q UklNQVJZLAo+PiDCoCsgLmZvcm1hdHMgPSBzdW44aV9taXhlcl9sYXllcl9mb3JtYXRzLAo+PiDC oCsgLm5mb3JtYXRzID0gQVJSQVlfU0laRShzdW44aV9taXhlcl9sYXllcl9mb3JtYXRzKSwKPj4g wqArIH0sCj4+IMKgKyB7Cj4+IMKgKyAudHlwZSA9IERSTV9QTEFORV9UWVBFX09WRVJMQVksCj4+ IMKgKyAuZm9ybWF0cyA9IHN1bjhpX21peGVyX2xheWVyX2Zvcm1hdHMsCj4+IMKgKyAubmZvcm1h dHMgPSBBUlJBWV9TSVpFKHN1bjhpX21peGVyX2xheWVyX2Zvcm1hdHMpLAo+PiDCoCsgfSwKPj4g wqArfTsKPj4gwqArCj4+IMKgwqBzdGF0aWMgc3RydWN0IHN1bjRpX2xheWVyICpzdW40aV9sYXll cl9pbml0X29uZShzdHJ1Y3QgZHJtX2RldmljZSAqZHJtLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29uc3Qgc3RydWN0IHN1bjRpX3BsYW5lX2Rlc2MgKnBs YW5lKQo+PiDCoMKgewo+PiDCoEBAIC0xMTUsNyArMTQ4LDcgQEAgc3RhdGljIHN0cnVjdCBzdW40 aV9sYXllciAqc3VuNGlfbGF5ZXJfaW5pdF9vbmUoc3RydWN0Cj4+IMKgZHJtX2RldmljZSAqZHJt LCByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQg PSBkcm1fdW5pdmVyc2FsX3BsYW5lX2luaXQoZHJtLCAmbGF5ZXItPnBsYW5lLCBCSVQoMCksCj4+ IMKgLSAmc3VuNGlfYmFja2VuZF9sYXllcl9mdW5jcywKPj4gwqArICZzdW40aV9sYXllcl9mdW5j cywKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBsYW5lLT5mb3JtYXRzLCBwbGFuZS0+bmZv cm1hdHMsCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwbGFuZS0+dHlwZSwgTlVMTCk7Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJldCkgewo+PiDCoEBAIC0xMjQsNyArMTU3LDcgQEAg c3RhdGljIHN0cnVjdCBzdW40aV9sYXllciAqc3VuNGlfbGF5ZXJfaW5pdF9vbmUoc3RydWN0Cj4+ IMKgZHJtX2RldmljZSAqZHJtLCB9Cj4+Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgZHJtX3BsYW5l X2hlbHBlcl9hZGQoJmxheWVyLT5wbGFuZSwKPj4gwqAtICZzdW40aV9iYWNrZW5kX2xheWVyX2hl bHBlcl9mdW5jcyk7Cj4+IMKgKyAmc3VuNGlfbGF5ZXJfaGVscGVyX2Z1bmNzKTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqBsYXllci0+ZHJ2ID0gZHJ2Owo+Pgo+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmIChwbGFuZS0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQo+PiDCoEBAIC0xODcs MyArMjIwLDMwIEBAIHN0cnVjdCBzdW40aV9sYXllciAqKnN1bjRpX2xheWVyc19pbml0KHN0cnVj dAo+PiDCoGRybV9kZXZpY2UgKmRybSkKPj4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g bGF5ZXJzOwo+PiDCoMKgfQo+PiDCoCsKPj4gwqArc3RydWN0IHN1bjRpX2xheWVyICoqc3VuOGlf bGF5ZXJzX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRybSkKPj4gwqArewo+PiDCoCsgc3RydWN0 IHN1bjRpX2xheWVyICoqbGF5ZXJzOwo+PiDCoCsgaW50IGk7Cj4+IMKgKwo+PiDCoCsgbGF5ZXJz ID0gZGV2bV9rY2FsbG9jKGRybS0+ZGV2LCBBUlJBWV9TSVpFKHN1bjhpX21peGVyX3BsYW5lcyks Cj4+IMKgKyBzaXplb2YoKipsYXllcnMpLCBHRlBfS0VSTkVMKTsKPj4gwqArIGlmICghbGF5ZXJz KQo+PiDCoCsgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4+IMKgKwo+PiDCoCsgZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoc3VuOGlfbWl4ZXJfcGxhbmVzKTsgaSsrKSB7Cj4+IMKgKyBjb25z dCBzdHJ1Y3Qgc3VuNGlfcGxhbmVfZGVzYyAqcGxhbmUgPSAmc3VuOGlfbWl4ZXJfcGxhbmVzW2ld Owo+PiDCoCsgc3RydWN0IHN1bjRpX2xheWVyICpsYXllciA9IGxheWVyc1tpXTsKPj4gwqArCj4+ IMKgKyBsYXllciA9IHN1bjRpX2xheWVyX2luaXRfb25lKGRybSwgcGxhbmUpOwo+PiDCoCsgaWYg KElTX0VSUihsYXllcikpIHsKPj4gwqArIGRldl9lcnIoZHJtLT5kZXYsICJDb3VsZG4ndCBpbml0 aWFsaXplICVzIHBsYW5lXG4iLAo+PiDCoCsgaSA/ICJvdmVybGF5IiA6ICJwcmltYXJ5Iik7Cj4+ IMKgKyByZXR1cm4gRVJSX0NBU1QobGF5ZXIpOwo+PiDCoCsgfTsKPj4gwqArCj4+IMKgKyBsYXll ci0+aWQgPSBpOwo+PiDCoCsgfTsKPj4gwqArCj4+IMKgKyByZXR1cm4gbGF5ZXJzOwo+PiDCoCt9 Cj4+IMKgZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zdW40aS9zdW40aV9sYXllci5oCj4+ IMKgYi9kcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfbGF5ZXIuaCBpbmRleCBhMmY2NWQ3YTNm NGUuLmY3YjllNWRhZWE1MAo+PiDCoDEwMDY0NAo+PiDCoC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9z dW40aS9zdW40aV9sYXllci5oCj4+IMKgKysrIGIvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjRp X2xheWVyLmgKPj4gwqBAQCAtMjYsNSArMjYsNiBAQCBwbGFuZV90b19zdW40aV9sYXllcihzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqDCoH0KPj4KPj4gwqDCoHN0cnVjdCBzdW40aV9sYXll ciAqKnN1bjRpX2xheWVyc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pOwo+PiDCoCtzdHJ1 Y3Qgc3VuNGlfbGF5ZXIgKipzdW44aV9sYXllcnNfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZHJt KTsKPj4KPj4gwqDCoCNlbmRpZiAvKiBfU1VONElfTEFZRVJfSF8gKi8KPj4gwqBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmMKPj4gwqBiL2RyaXZlcnMvZ3B1 L2RybS9zdW40aS9zdW44aV9taXhlci5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IMKgaW5kZXgg MDAwMDAwMDAwMDAwLi45NDI3YjU3MjQwZDMKPj4gwqAtLS0gL2Rldi9udWxsCj4+IMKgKysrIGIv ZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmMKPj4gwqBAQCAtMCwwICsxLDQxNyBA QAo+PiDCoCsvKgo+PiDCoCsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8aWNl bm93eUBhb3NjLnh5ej4KPj4gwqArICoKPj4gwqArICogQmFzZWQgb24gc3VuNGlfYmFja2VuZC5j LCB3aGljaCBpczoKPj4gwqArICogQ29weXJpZ2h0IChDKSAyMDE1IEZyZWUgRWxlY3Ryb25zCj4+ IMKgKyAqIENvcHlyaWdodCAoQykgMjAxNSBOZXh0VGhpbmcgQ28KPj4gwqArICoKPj4gwqArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgo+PiDCoCsgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcwo+PiDCoCsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgo+PiDCoCsgKiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gwqArICovCj4+IMKgKwo+ PiDCoCsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gwqArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWlj X2hlbHBlci5oPgo+PiDCoCsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+Cj4+IMKgKyNpbmNsdWRl IDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4+IMKgKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2NtYV9o ZWxwZXIuaD4KPj4gwqArI2luY2x1ZGUgPGRybS9kcm1fZ2VtX2NtYV9oZWxwZXIuaD4KPj4gwqAr I2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+Cj4+IMKgKwo+PiDCoCsjaW5jbHVkZSA8 bGludXgvY29tcG9uZW50Lmg+Cj4+IMKgKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+PiDCoCsj aW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+IMKgKwo+PiDCoCsjaW5jbHVkZSAic3VuOGlf bWl4ZXIuaCIKPj4gwqArI2luY2x1ZGUgInN1bjRpX2Rydi5oIgo+PiDCoCsKPj4gwqArI2RlZmlu ZSBTVU44SV9EUkFNX09GRlNFVCAweDQwMDAwMDAwCj4+IMKgKwo+PiDCoCsjaWYgZGVmaW5lZCBD T05GSUdfRFJNX1NVTjRJX0RFMgo+PiDCoCt2b2lkIHN1bjhpX21peGVyX2NvbW1pdChzdHJ1Y3Qg c3VuOGlfbWl4ZXIgKm1peGVyKQo+PiDCoCt7Cj4+IMKgKyBEUk1fREVCVUdfRFJJVkVSKCJDb21t aXR0aW5nIGNoYW5nZXNcbiIpOwo+PiDCoCsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVn cywgU1VOOElfTUlYRVJfR0xPQkFMX0RCVUZGLAo+PiDCoCsgU1VOOElfTUlYRVJfR0xPQkFMX0RC VUZGX0VOQUJMRSk7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJPTChzdW44aV9taXhlcl9jb21t aXQpOwo+PiDCoCsKPj4gwqArdm9pZCBzdW44aV9taXhlcl9sYXllcl9lbmFibGUoc3RydWN0IHN1 bjhpX21peGVyICptaXhlciwKPj4gwqArIGludCBsYXllciwgYm9vbCBlbmFibGUpCj4+IMKgK3sK Pj4gwqArIHUzMiB2YWw7Cj4+IMKgKyAvKiBDdXJyZW50bHkgdGhlIGZpcnN0IFVJIGNoYW5uZWwg aXMgdXNlZCAqLwo+PiDCoCsgaW50IGNoYW4gPSBtaXhlci0+Y2ZnLT52aV9udW07Cj4+IMKgKwo+ PiDCoCsgRFJNX0RFQlVHX0RSSVZFUigiRW5hYmxpbmcgbGF5ZXIgJWQgaW4gY2hhbm5lbCAlZFxu IiwgbGF5ZXIsIGNoYW4pOwo+PiDCoCsKPj4gwqArIGlmIChlbmFibGUpCj4+IMKgKyB2YWwgPSBT VU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFJfRU47Cj4+IMKgKyBlbHNlCj4+IMKgKyB2YWwg PSAwOwo+PiDCoCsKPj4gwqArIHJlZ21hcF91cGRhdGVfYml0cyhtaXhlci0+cmVncywKPj4gwqAr IFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUihjaGFuLCBsYXllciksCj4+IMKgKyBTVU44 SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFJfRU4sIHZhbCk7Cj4+IMKgKwo+PiDCoCsgLyogU2V0 IHRoZSBhbHBoYSBjb25maWd1cmF0aW9uICovCj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4 ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFIoY2hhbiwgbGF5 ZXIpLAo+PiDCoCsgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhBX01PREVfTUFT SywKPj4gwqArIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9BTFBIQV9NT0RFX0RFRik7 Cj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhF Ul9DSEFOX1VJX0xBWUVSX0FUVFIoY2hhbiwgbGF5ZXIpLAo+PiDCoCsgU1VOOElfTUlYRVJfQ0hB Tl9VSV9MQVlFUl9BVFRSX0FMUEhBX01BU0ssCj4+IMKgKyBTVU44SV9NSVhFUl9DSEFOX1VJX0xB WUVSX0FUVFJfQUxQSEFfREVGKTsKPj4gwqArfQo+PiDCoCtFWFBPUlRfU1lNQk9MKHN1bjhpX21p eGVyX2xheWVyX2VuYWJsZSk7Cj4+IMKgKwo+PiDCoCtzdGF0aWMgaW50IHN1bjhpX21peGVyX2Ry bV9mb3JtYXRfdG9fbGF5ZXIoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4+IMKgKyB1MzIgZm9y bWF0LCB1MzIgKm1vZGUpCj4+IMKgK3sKPj4gwqArIGlmICgocGxhbmUtPnR5cGUgPT0gRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSkgJiYKPj4gwqArIChmb3JtYXQgPT0gRFJNX0ZPUk1BVF9BUkdCODg4 OCkpCj4+IMKgKyBmb3JtYXQgPSBEUk1fRk9STUFUX1hSR0I4ODg4Owo+PiDCoCsKPj4gwqArIHN3 aXRjaCAoZm9ybWF0KSB7Cj4+IMKgKyBjYXNlIERSTV9GT1JNQVRfQVJHQjg4ODg6Cj4+IMKgKyAq bW9kZSA9IFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9GQkZNVF9BUkdCODg4ODsKPj4g wqArIGJyZWFrOwo+PiDCoCsKPj4gwqArIGNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPj4gwqAr ICptb2RlID0gU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX1hSR0I4ODg4Owo+ PiDCoCsgYnJlYWs7Cj4+IMKgKwo+PiDCoCsgY2FzZSBEUk1fRk9STUFUX1JHQjg4ODoKPj4gwqAr ICptb2RlID0gU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX1JHQjg4ODsKPj4g wqArIGJyZWFrOwo+PiDCoCsKPj4gwqArIGRlZmF1bHQ6Cj4+IMKgKyByZXR1cm4gLUVJTlZBTDsK Pj4gwqArIH0KPj4gwqArCj4+IMKgKyByZXR1cm4gMDsKPj4gwqArfQo+PiDCoCsKPj4gwqAraW50 IHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZChzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVy LAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDC oCsgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUgPSBwbGFuZS0+c3RhdGU7Cj4+IMKgKyBz dHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0YXRlLT5mYjsKPj4gwqArIC8qIEN1cnJlbnRs eSB0aGUgZmlyc3QgVUkgY2hhbm5lbCBpcyB1c2VkICovCj4+IMKgKyBpbnQgY2hhbiA9IG1peGVy LT5jZmctPnZpX251bTsKPj4gwqArIGludCBpOwo+PiDCoCsKPj4gwqArIERSTV9ERUJVR19EUklW RVIoIlVwZGF0aW5nIGxheWVyICVkXG4iLCBsYXllcik7Cj4+IMKgKwo+PiDCoCsgaWYgKHBsYW5l LT50eXBlID09IERSTV9QTEFORV9UWVBFX1BSSU1BUlkpIHsKPj4gwqArIERSTV9ERUJVR19EUklW RVIoIlByaW1hcnkgbGF5ZXIsIHVwZGF0aW5nIGdsb2JhbCBzaXplIFc6ICV1IEg6ICV1XG4iLAo+ PiDCoCsgc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCk7Cj4+IMKgKyByZWdtYXBfd3JpdGUo bWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0dMT0JBTF9TSVpFLAo+PiDCoCsgU1VOOElfTUlYRVJf U0laRShzdGF0ZS0+Y3J0Y193LAo+PiDCoCsgc3RhdGUtPmNydGNfaCkpOwo+PiDCoCsgRFJNX0RF QlVHX0RSSVZFUigiVXBkYXRpbmcgYmxlbmRlciBzaXplXG4iKTsKPj4gwqArIGZvciAoaSA9IDA7 IGkgPCBTVU44SV9NSVhFUl9NQVhfQ0hBTl9DT1VOVDsgaSsrKQo+PiDCoCsgcmVnbWFwX3dyaXRl KG1peGVyLT5yZWdzLAo+PiDCoCsgU1VOOElfTUlYRVJfQkxFTkRfQVRUUl9JTlNJWkUoaSksCj4+ IMKgKyBTVU44SV9NSVhFUl9TSVpFKHN0YXRlLT5jcnRjX3csCj4+IMKgKyBzdGF0ZS0+Y3J0Y19o KSk7Cj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5EX09V VFNJWkUsCj4+IMKgKyBTVU44SV9NSVhFUl9TSVpFKHN0YXRlLT5jcnRjX3csCj4+IMKgKyBzdGF0 ZS0+Y3J0Y19oKSk7Cj4+IMKgKyBEUk1fREVCVUdfRFJJVkVSKCJVcGRhdGluZyBjaGFubmVsIHNp emVcbiIpOwo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVyLT5yZWdzLCBTVU44SV9NSVhFUl9DSEFO X1VJX09WTF9TSVpFKGNoYW4pLAo+PiDCoCsgU1VOOElfTUlYRVJfU0laRShzdGF0ZS0+Y3J0Y193 LAo+PiDCoCsgc3RhdGUtPmNydGNfaCkpOwo+PiDCoCsgfQo+PiDCoCsKPj4gwqArIC8qIFNldCB0 aGUgbGluZSB3aWR0aCAqLwo+PiDCoCsgRFJNX0RFQlVHX0RSSVZFUigiTGF5ZXIgbGluZSB3aWR0 aDogJWQgYnl0ZXNcbiIsIGZiLT5waXRjaGVzWzBdKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhl ci0+cmVncywgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9QSVRDSChjaGFuLCBsYXllciksCj4+ IMKgKyBmYi0+cGl0Y2hlc1swXSk7Cj4+IMKgKwo+PiDCoCsgLyogU2V0IGhlaWdodCBhbmQgd2lk dGggKi8KPj4gwqArIERSTV9ERUJVR19EUklWRVIoIkxheWVyIHNpemUgVzogJXUgSDogJXVcbiIs Cj4+IMKgKyBzdGF0ZS0+Y3J0Y193LCBzdGF0ZS0+Y3J0Y19oKTsKPj4gwqArIHJlZ21hcF93cml0 ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9TSVpFKGNoYW4sIGxheWVy KSwKPj4gwqArIFNVTjhJX01JWEVSX1NJWkUoc3RhdGUtPmNydGNfdywgc3RhdGUtPmNydGNfaCkp Owo+PiDCoCsKPj4gwqArIC8qIFNldCBiYXNlIGNvb3JkaW5hdGVzICovCj4+IMKgKyBEUk1fREVC VUdfRFJJVkVSKCJMYXllciBjb29yZGluYXRlcyBYOiAlZCBZOiAlZFxuIiwKPj4gwqArIHN0YXRl LT5jcnRjX3gsIHN0YXRlLT5jcnRjX3kpOwo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVyLT5yZWdz LCBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0NPT1JEKGNoYW4sIGxheWVyKSwKPj4gwqArIFNV TjhJX01JWEVSX0NPT1JEKHN0YXRlLT5jcnRjX3gsIHN0YXRlLT5jcnRjX3kpKTsKPj4gwqArCj4+ IMKgKyByZXR1cm4gMDsKPj4gwqArfQo+PiDCoCtFWFBPUlRfU1lNQk9MKHN1bjhpX21peGVyX3Vw ZGF0ZV9sYXllcl9jb29yZCk7Cj4+IMKgKwo+PiDCoCtpbnQgc3VuOGlfbWl4ZXJfdXBkYXRlX2xh eWVyX2Zvcm1hdHMoc3RydWN0IHN1bjhpX21peGVyICptaXhlciwKPj4gwqArIGludCBsYXllciwg c3RydWN0IGRybV9wbGFuZSAqcGxhbmUpCj4+IMKgK3sKPj4gwqArIHN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgKnN0YXRlID0gcGxhbmUtPnN0YXRlOwo+PiDCoCsgc3RydWN0IGRybV9mcmFtZWJ1ZmZl ciAqZmIgPSBzdGF0ZS0+ZmI7Cj4+IMKgKyBib29sIGludGVybGFjZWQgPSBmYWxzZTsKPj4gwqAr IHUzMiB2YWw7Cj4+IMKgKyAvKiBDdXJyZW50bHkgdGhlIGZpcnN0IFVJIGNoYW5uZWwgaXMgdXNl ZCAqLwo+PiDCoCsgaW50IGNoYW4gPSBtaXhlci0+Y2ZnLT52aV9udW07Cj4+IMKgKyBpbnQgcmV0 Owo+PiDCoCsKPj4gwqArIGlmIChwbGFuZS0+c3RhdGUtPmNydGMpCj4+IMKgKyBpbnRlcmxhY2Vk ID0gcGxhbmUtPnN0YXRlLT5jcnRjLT5zdGF0ZS0+YWRqdXN0ZWRfbW9kZS5mbGFncwo+PiDCoCsg JiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRTsKPj4gwqArCj4+IMKgKyByZWdtYXBfdXBkYXRlX2Jp dHMobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5EX09VVENUTCwKPj4gwqArIFNVTjhJX01J WEVSX0JMRU5EX09VVENUTF9JTlRFUkxBQ0VELAo+PiDCoCsgaW50ZXJsYWNlZCA/Cj4+IMKgKyBT VU44SV9NSVhFUl9CTEVORF9PVVRDVExfSU5URVJMQUNFRCA6IDApOwo+PiDCoCsKPj4gwqArIERS TV9ERUJVR19EUklWRVIoIlN3aXRjaGluZyBkaXNwbGF5IG1peGVyIGludGVybGFjZWQgbW9kZSAl c1xuIiwKPj4gwqArIGludGVybGFjZWQgPyAib24iIDogIm9mZiIpOwo+PiDCoCsKPj4gwqArIHJl dCA9IHN1bjhpX21peGVyX2RybV9mb3JtYXRfdG9fbGF5ZXIocGxhbmUsIGZiLT5mb3JtYXQtPmZv cm1hdCwKPj4gwqArICZ2YWwpOwo+PiDCoCsgaWYgKHJldCkgewo+PiDCoCsgRFJNX0RFQlVHX0RS SVZFUigiSW52YWxpZCBmb3JtYXRcbiIpOwo+PiDCoCsgcmV0dXJuIHJldDsKPj4gwqArIH0KPj4g wqArCj4+IMKgKyByZWdtYXBfdXBkYXRlX2JpdHMobWl4ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9N SVhFUl9DSEFOX1VJX0xBWUVSX0FUVFIoY2hhbiwgbGF5ZXIpLAo+PiDCoCsgU1VOOElfTUlYRVJf Q0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX01BU0ssIHZhbCk7Cj4+IMKgKwo+PiDCoCsgcmV0dXJu IDA7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJPTChzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJf Zm9ybWF0cyk7Cj4+IMKgKwo+PiDCoCtpbnQgc3VuOGlfbWl4ZXJfdXBkYXRlX2xheWVyX2J1ZmZl cihzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3Rh dGUgPSBwbGFuZS0+c3RhdGU7Cj4+IMKgKyBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiA9IHN0 YXRlLT5mYjsKPj4gwqArIHN0cnVjdCBkcm1fZ2VtX2NtYV9vYmplY3QgKmdlbTsKPj4gwqArIGRt YV9hZGRyX3QgcGFkZHI7Cj4+IMKgKyB1aW50MzJfdCBwYWRkcl91MzI7Cj4+IMKgKyAvKiBDdXJy ZW50bHkgdGhlIGZpcnN0IFVJIGNoYW5uZWwgaXMgdXNlZCAqLwo+PiDCoCsgaW50IGNoYW4gPSBt aXhlci0+Y2ZnLT52aV9udW07Cj4+IMKgKyBpbnQgYnBwOwo+PiDCoCsKPj4gwqArIC8qIEdldCB0 aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGluIG1lbW9yeSAqLwo+PiDCoCsgZ2Vt ID0gZHJtX2ZiX2NtYV9nZXRfZ2VtX29iaihmYiwgMCk7Cj4+IMKgKwo+PiDCoCsgRFJNX0RFQlVH X0RSSVZFUigiVXNpbmcgR0VNIEAgJXBhZFxuIiwgJmdlbS0+cGFkZHIpOwo+PiDCoCsKPj4gwqAr IC8qIENvbXB1dGUgdGhlIHN0YXJ0IG9mIHRoZSBkaXNwbGF5ZWQgbWVtb3J5ICovCj4+IMKgKyBi cHAgPSBmYi0+Zm9ybWF0LT5jcHBbMF07Cj4+IMKgKyBwYWRkciA9IGdlbS0+cGFkZHIgKyBmYi0+ b2Zmc2V0c1swXTsKPj4gwqArIHBhZGRyICs9IChzdGF0ZS0+c3JjX3ggPj4gMTYpICogYnBwOwo+ PiDCoCsgcGFkZHIgKz0gKHN0YXRlLT5zcmNfeSA+PiAxNikgKiBmYi0+cGl0Y2hlc1swXTsKPj4g wqArIHBhZGRyIC09IFNVTjhJX0RSQU1fT0ZGU0VUOwo+PiDCoCsKPj4gwqArIERSTV9ERUJVR19E UklWRVIoIlNldHRpbmcgYnVmZmVyIGFkZHJlc3MgdG8gJXBhZFxuIiwgJnBhZGRyKTsKPj4gwqAr Cj4+IMKgKyBwYWRkcl91MzIgPSAodWludDMyX3QpIHBhZGRyOwo+PiDCoCsKPj4gwqArIHJlZ21h cF93cml0ZShtaXhlci0+cmVncywKPj4gwqArIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfVE9Q X0xBRERSKGNoYW4sIGxheWVyKSwKPj4gwqArIHBhZGRyX3UzMik7Cj4+IMKgKwo+PiDCoCsgcmV0 dXJuIDA7Cj4+IMKgK30KPj4gwqArRVhQT1JUX1NZTUJPTChzdW44aV9taXhlcl91cGRhdGVfbGF5 ZXJfYnVmZmVyKTsKPj4gwqArCj4+IMKgK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzdW44 aV9taXhlcl9yZWdtYXBfY29uZmlnID0gewo+PiDCoCsgLnJlZ19iaXRzID0gMzIsCj4+IMKgKyAu dmFsX2JpdHMgPSAzMiwKPj4gwqArIC5yZWdfc3RyaWRlID0gNCwKPj4gwqArIC5tYXhfcmVnaXN0 ZXIgPSAweGJmZmMsIC8qIGd1ZXNzZWQgKi8KPj4gwqArfTsKPj4gwqArCj4+IMKgK3N0YXRpYyBp bnQgc3VuOGlfbWl4ZXJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1h c3RlciwKPj4gwqArIHZvaWQgKmRhdGEpCj4+IMKgK3sKPj4gwqArIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPj4gwqArIHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0gPSBkYXRhOwo+PiDCoCsgc3RydWN0IHN1bjRpX2RydiAqZHJ2ID0gZHJtLT5k ZXZfcHJpdmF0ZTsKPj4gwqArIHN0cnVjdCBzdW44aV9taXhlciAqbWl4ZXI7Cj4+IMKgKyBzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKPj4gwqArIHZvaWQgX19pb21lbSAqcmVnczsKPj4gwqArIGludCBp LCByZXQ7Cj4+IMKgKwo+PiDCoCsgbWl4ZXIgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1p eGVyKSwgR0ZQX0tFUk5FTCk7Cj4+IMKgKyBpZiAoIW1peGVyKQo+PiDCoCsgcmV0dXJuIC1FTk9N RU07Cj4+IMKgKyBkZXZfc2V0X2RydmRhdGEoZGV2LCBtaXhlcik7Cj4+IMKgKyBkcnYtPm1peGVy ID0gbWl4ZXI7Cj4+IMKgKwo+PiDCoCsgbWl4ZXItPmNmZyA9IG9mX2RldmljZV9nZXRfbWF0Y2hf ZGF0YShkZXYpOwo+PiDCoCsgaWYgKCFtaXhlci0+Y2ZnKQo+PiDCoCsgcmV0dXJuIC1FSU5WQUw7 Cj4+IMKgKwo+PiDCoCsgcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsKPj4gwqArIHJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMp Owo+PiDCoCsgaWYgKElTX0VSUihyZWdzKSkKPj4gwqArIHJldHVybiBQVFJfRVJSKHJlZ3MpOwo+ PiDCoCsKPj4gwqArIG1peGVyLT5yZWdzID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgcmVn cywKPj4gwqArICZzdW44aV9taXhlcl9yZWdtYXBfY29uZmlnKTsKPj4gwqArIGlmIChJU19FUlIo bWl4ZXItPnJlZ3MpKSB7Cj4+IMKgKyBkZXZfZXJyKGRldiwgIkNvdWxkbid0IGNyZWF0ZSB0aGUg bWl4ZXIgcmVnbWFwXG4iKTsKPj4gwqArIHJldHVybiBQVFJfRVJSKG1peGVyLT5yZWdzKTsKPj4g wqArIH0KPj4gwqArCj4+IMKgKyBtaXhlci0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0 KGRldiwgTlVMTCk7Cj4+IMKgKyBpZiAoSVNfRVJSKG1peGVyLT5yZXNldCkpIHsKPj4gwqArIGRl dl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IG91ciByZXNldCBsaW5lXG4iKTsKPj4gwqArIHJldHVy biBQVFJfRVJSKG1peGVyLT5yZXNldCk7Cj4+IMKgKyB9Cj4+IMKgKwo+PiDCoCsgcmV0ID0gcmVz ZXRfY29udHJvbF9kZWFzc2VydChtaXhlci0+cmVzZXQpOwo+PiDCoCsgaWYgKHJldCkgewo+PiDC oCsgZGV2X2VycihkZXYsICJDb3VsZG4ndCBkZWFzc2VydCBvdXIgcmVzZXQgbGluZVxuIik7Cj4+ IMKgKyByZXR1cm4gcmV0Owo+PiDCoCsgfQo+PiDCoCsKPj4gwqArIG1peGVyLT5idXNfY2xrID0g ZGV2bV9jbGtfZ2V0KGRldiwgImJ1cyIpOwo+PiDCoCsgaWYgKElTX0VSUihtaXhlci0+YnVzX2Ns aykpIHsKPj4gwqArIGRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHRoZSBtaXhlciBidXMgY2xv Y2tcbiIpOwo+PiDCoCsgcmV0ID0gUFRSX0VSUihtaXhlci0+YnVzX2Nsayk7Cj4+IMKgKyBnb3Rv IGVycl9hc3NlcnRfcmVzZXQ7Cj4+IMKgKyB9Cj4+IMKgKyBjbGtfcHJlcGFyZV9lbmFibGUobWl4 ZXItPmJ1c19jbGspOwo+PiDCoCsKPj4gwqArIG1peGVyLT5tb2RfY2xrID0gZGV2bV9jbGtfZ2V0 KGRldiwgIm1vZCIpOwo+PiDCoCsgaWYgKElTX0VSUihtaXhlci0+bW9kX2NsaykpIHsKPj4gwqAr IGRldl9lcnIoZGV2LCAiQ291bGRuJ3QgZ2V0IHRoZSBtaXhlciBtb2R1bGUgY2xvY2tcbiIpOwo+ PiDCoCsgcmV0ID0gUFRSX0VSUihtaXhlci0+bW9kX2Nsayk7Cj4+IMKgKyBnb3RvIGVycl9kaXNh YmxlX2J1c19jbGs7Cj4+IMKgKyB9Cj4+IMKgKyBjbGtfcHJlcGFyZV9lbmFibGUobWl4ZXItPm1v ZF9jbGspOwo+PiDCoCsKPj4gwqArIC8qIFJlc2V0IHRoZSByZWdpc3RlcnMgKi8KPj4gwqArIGZv ciAoaSA9IDB4MDsgaSA8IDB4MjAwMDA7IGkgKz0gNCkKPj4gwqArIHJlZ21hcF93cml0ZShtaXhl ci0+cmVncywgaSwgMCk7Cj4+IMKgKwo+PiDCoCsgLyogRW5hYmxlIHRoZSBtaXhlciAqLwo+PiDC oCsgcmVnbWFwX3dyaXRlKG1peGVyLT5yZWdzLCBTVU44SV9NSVhFUl9HTE9CQUxfQ1RMLAo+PiDC oCsgU1VOOElfTUlYRVJfR0xPQkFMX0NUTF9SVF9FTik7Cj4+IMKgKwo+PiDCoCsgLyogSW5pdGlh bGl6ZSBibGVuZGVyICovCj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01J WEVSX0JMRU5EX0ZDT0xPUl9DVEwsCj4+IMKgKyBTVU44SV9NSVhFUl9CTEVORF9GQ09MT1JfQ1RM X0RFRik7Cj4+IMKgKyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsIFNVTjhJX01JWEVSX0JMRU5E X1BSRU1VTFRJUExZLAo+PiDCoCsgU1VOOElfTUlYRVJfQkxFTkRfUFJFTVVMVElQTFlfREVGKTsK Pj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxFTkRfQktDT0xP UiwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX0JLQ09MT1JfREVGKTsKPj4gwqArIHJlZ21hcF93 cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxFTkRfTU9ERSgwKSwKPj4gwqArIFNVTjhJ X01JWEVSX0JMRU5EX01PREVfREVGKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywg U1VOOElfTUlYRVJfQkxFTkRfTU9ERSgxKSwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX01PREVf REVGKTsKPj4gwqArIHJlZ21hcF93cml0ZShtaXhlci0+cmVncywgU1VOOElfTUlYRVJfQkxFTkRf Q0tfQ1RMLAo+PiDCoCsgU1VOOElfTUlYRVJfQkxFTkRfQ0tfQ1RMX0RFRik7Cj4+IMKgKwo+PiDC oCsgZm9yIChpID0gMDsgaSA8IFNVTjhJX01JWEVSX01BWF9DSEFOX0NPVU5UOyBpKyspCj4+IMKg KyByZWdtYXBfd3JpdGUobWl4ZXItPnJlZ3MsCj4+IMKgKyBTVU44SV9NSVhFUl9CTEVORF9BVFRS X0ZDT0xPUihpKSwKPj4gwqArIFNVTjhJX01JWEVSX0JMRU5EX0FUVFJfRkNPTE9SX0RFRik7Cj4+ IMKgKwo+PiDCoCsgLyogU2VsZWN0IHRoZSBmaXJzdCBVSSBjaGFubmVsICovCj4+IMKgKyBEUk1f REVCVUdfRFJJVkVSKCJTZWxlY3RpbmcgY2hhbm5lbCAlZCAoZmlyc3QgVUkgY2hhbm5lbClcbiIs Cj4+IMKgKyBtaXhlci0+Y2ZnLT52aV9udW0pOwo+PiDCoCsgcmVnbWFwX3dyaXRlKG1peGVyLT5y ZWdzLCBTVU44SV9NSVhFUl9CTEVORF9ST1VURSwKPj4gwqArIG1peGVyLT5jZmctPnZpX251bSk7 Cj4+IMKgKwo+PiDCoCsgcmV0dXJuIDA7Cj4+IMKgKwo+PiDCoCsgY2xrX2Rpc2FibGVfdW5wcmVw YXJlKG1peGVyLT5tb2RfY2xrKTsKPj4gwqArZXJyX2Rpc2FibGVfYnVzX2NsazoKPj4gwqArIGNs a19kaXNhYmxlX3VucHJlcGFyZShtaXhlci0+YnVzX2Nsayk7Cj4+IMKgK2Vycl9hc3NlcnRfcmVz ZXQ6Cj4+IMKgKyByZXNldF9jb250cm9sX2Fzc2VydChtaXhlci0+cmVzZXQpOwo+PiDCoCsgcmV0 dXJuIHJldDsKPj4gwqArfQo+PiDCoCsKPj4gwqArc3RhdGljIHZvaWQgc3VuOGlfbWl4ZXJfdW5i aW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqbWFzdGVyLAo+PiDCoCsgdm9p ZCAqZGF0YSkKPj4gwqArewo+PiDCoCsgc3RydWN0IHN1bjhpX21peGVyICptaXhlciA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOwo+PiDCoCsKPj4gwqArIGNsa19kaXNhYmxlX3VucHJlcGFyZShtaXhl ci0+bW9kX2Nsayk7Cj4+IMKgKyBjbGtfZGlzYWJsZV91bnByZXBhcmUobWl4ZXItPmJ1c19jbGsp Owo+PiDCoCsgcmVzZXRfY29udHJvbF9hc3NlcnQobWl4ZXItPnJlc2V0KTsKPj4gwqArfQo+PiDC oCsKPj4gwqArc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIHN1bjhpX21peGVyX29w cyA9IHsKPj4gwqArIC5iaW5kID0gc3VuOGlfbWl4ZXJfYmluZCwKPj4gwqArIC51bmJpbmQgPSBz dW44aV9taXhlcl91bmJpbmQsCj4+IMKgK307Cj4+IMKgKwo+PiDCoCtzdGF0aWMgaW50IHN1bjhp X21peGVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+IMKgK3sKPj4gwqAr IHJldHVybiBjb21wb25lbnRfYWRkKCZwZGV2LT5kZXYsICZzdW44aV9taXhlcl9vcHMpOwo+PiDC oCt9Cj4+IMKgKwo+PiDCoCtzdGF0aWMgaW50IHN1bjhpX21peGVyX3JlbW92ZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+PiDCoCt7Cj4+IMKgKyBjb21wb25lbnRfZGVsKCZwZGV2LT5k ZXYsICZzdW44aV9taXhlcl9vcHMpOwo+PiDCoCsKPj4gwqArIHJldHVybiAwOwo+PiDCoCt9Cj4+ IMKgKwo+PiDCoCtzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjhpX21peGVyX2NmZyBzdW44aV92M3Nf bWl4ZXJfY2ZnID0gewo+PiDCoCsgLnZpX251bSA9IDIsCj4+IMKgKyAudWlfbnVtID0gMSwKPj4g wqArfTsKPj4gwqArCj4+IMKgK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjhp X21peGVyX29mX3RhYmxlW10gPSB7Cj4+IMKgKyB7Cj4+IMKgKyAuY29tcGF0aWJsZSA9ICJhbGx3 aW5uZXIsc3VuOGktdjNzLWRlMi1taXhlciIsCj4+IMKgKyAuZGF0YSA9ICZzdW44aV92M3NfbWl4 ZXJfY2ZnCj4+IMKgKyB9LAo+PiDCoCsgeyB9Cj4+IMKgK307Cj4+IMKgK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIHN1bjhpX21peGVyX29mX3RhYmxlKTsKPj4gwqArCj4+IMKgK3N0YXRpYyBzdHJ1 Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjhpX21peGVyX3BsYXRmb3JtX2RyaXZlciA9IHsKPj4gwqAr IC5wcm9iZSA9IHN1bjhpX21peGVyX3Byb2JlLAo+PiDCoCsgLnJlbW92ZSA9IHN1bjhpX21peGVy X3JlbW92ZSwKPj4gwqArIC5kcml2ZXIgPSB7Cj4+IMKgKyAubmFtZSA9ICJzdW44aS1taXhlciIs Cj4+IMKgKyAub2ZfbWF0Y2hfdGFibGUgPSBzdW44aV9taXhlcl9vZl90YWJsZSwKPj4gwqArIH0s Cj4+IMKgK307Cj4+IMKgK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuOGlfbWl4ZXJfcGxhdGZv cm1fZHJpdmVyKTsKPj4gwqArCj4+IMKgK01PRFVMRV9BVVRIT1IoIkljZW5vd3kgWmhlbmcgPGlj ZW5vd3lAYW9zYy54eXo+Iik7Cj4+IMKgK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIERF MiBNaXhlciBkcml2ZXIiKTsKPj4gwqArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+PiDCoCsjZWxz ZSAvKiBEUk1fU1VONElfREUyICovCj4+IMKgK3ZvaWQgc3VuOGlfbWl4ZXJfY29tbWl0KHN0cnVj dCBzdW44aV9taXhlciAqbWl4ZXIpCj4+IMKgK3sKPj4gwqArfQo+PiDCoCsKPj4gwqArdm9pZCBz dW44aV9taXhlcl9sYXllcl9lbmFibGUoc3RydWN0IHN1bjhpX21peGVyICptaXhlciwKPj4gwqAr IGludCBsYXllciwgYm9vbCBlbmFibGUpCj4+IMKgK3sKPj4gwqArfQo+PiDCoCsKPj4gwqAraW50 IHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZChzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVy LAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDC oCsgcmV0dXJuIC1FTk9FTlQ7Cj4+IMKgK30KPj4gwqArCj4+IMKgK2ludCBzdW44aV9taXhlcl91 cGRhdGVfbGF5ZXJfZm9ybWF0cyhzdHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50 IGxheWVyLCBzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPj4gwqArewo+PiDCoCsgcmV0dXJuIC1F Tk9FTlQ7Cj4+IMKgK30KPj4gwqArCj4+IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJf YnVmZmVyKHN0cnVjdCBzdW44aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIHN0cnVj dCBkcm1fcGxhbmUgKnBsYW5lKQo+PiDCoCt7Cj4+IMKgKyByZXR1cm4gLUVOT0VOVDsKPj4gwqAr fQo+PiDCoCsjZW5kaWYgLyogQ09ORklHX0RSTV9TVU40SV9ERTIgKi8KPj4gwqBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmgKPj4gwqBiL2RyaXZlcnMvZ3B1 L2RybS9zdW40aS9zdW44aV9taXhlci5oIG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IMKgaW5kZXgg MDAwMDAwMDAwMDAwLi4wYmMxMzRiM2JjOTgKPj4gwqAtLS0gL2Rldi9udWxsCj4+IMKgKysrIGIv ZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhpX21peGVyLmgKPj4gwqBAQCAtMCwwICsxLDEzMyBA QAo+PiDCoCsvKgo+PiDCoCsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWNlbm93eSBaaGVuZyA8aWNl bm93eUBhb3NjLnh5ej4KPj4gwqArICoKPj4gwqArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+PiDCoCsgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwo+PiDC oCsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZgo+PiDCoCsgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPj4gwqArICovCj4+IMKgKwo+PiDCoCsjaWZuZGVmIF9TVU44SV9NSVhF Ul9IXwo+PiDCoCsjZGVmaW5lIF9TVU44SV9NSVhFUl9IXwo+PiDCoCsKPj4gwqArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+PiDCoCsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4+IMKgKyNpbmNs dWRlIDxsaW51eC9yZXNldC5oPgo+PiDCoCsKPj4gwqArI2luY2x1ZGUgInN1bjRpX2xheWVyLmgi Cj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX01BWF9DSEFOX0NPVU5UIDQKPj4gwqAr Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfU0laRSh3LCBoKSAoKChoKSAtIDEpIDw8IDE2IHwg KCh3KSAtIDEpKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0NPT1JEKHgsIHkpICgoeSkgPDwg MTYgfCAoeCkpCj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9DVEwgMHgw Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR0xPQkFMX1NUQVRVUyAweDQKPj4gwqArI2RlZmlu ZSBTVU44SV9NSVhFUl9HTE9CQUxfREJVRkYgMHg4Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf R0xPQkFMX1NJWkUgMHhjCj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9D VExfUlRfRU4gMHgxCj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0dMT0JBTF9EQlVG Rl9FTkFCTEUgMHgxCj4+IMKgKwo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX0ZDT0xP Ul9DVEwgMHgxMDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQVRUUl9GQ09MT1Io eCkgKDB4MTAwNCArIDB4MTAgKiAoeCkgKyAweDApCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf QkxFTkRfQVRUUl9JTlNJWkUoeCkgKDB4MTAwNCArIDB4MTAgKiAoeCkgKyAweDQpCj4+IMKgKyNk ZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQVRUUl9PRkZTRVQoeCkgKDB4MTAwNCArIDB4MTAgKiAo eCkgKyAweDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfUk9VVEUgMHgxMDgwCj4+ IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfUFJFTVVMVElQTFkgMHgxMDg0Cj4+IMKgKyNk ZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQktDT0xPUiAweDEwODgKPj4gwqArI2RlZmluZSBTVU44 SV9NSVhFUl9CTEVORF9PVVRTSVpFIDB4MTA4Ywo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JM RU5EX01PREUoeCkgKDB4MTA5MCArIDB4MDQgKiAoeCkpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfQkxFTkRfQ0tfQ1RMIDB4MTBiMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5EX0NL X0NGRyAweDEwYjQKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9DS19NQVgoeCkgKDB4 MTBjMCArIDB4MDQgKiAoeCkpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQkxFTkRfQ0tfTUlO KHgpICgweDEwZTAgKyAweDA0ICogKHgpKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0JMRU5E X09VVENUTCAweDEwZmMKPj4gwqArCj4+IMKgKy8qIFRoZSBmb2xsb3dpbmcgbnVtYmVycyBhcmUg c29tZSBzdGlsbCB1bmtub3duIG1hZ2ljIG51bWJlcnMgKi8KPj4gwqArI2RlZmluZSBTVU44SV9N SVhFUl9CTEVORF9BVFRSX0ZDT0xPUl9ERUYgMHhmZjAwMDAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJ X01JWEVSX0JMRU5EX0ZDT0xPUl9DVExfREVGIDB4MDAwMDAxMDEKPj4gwqArI2RlZmluZSBTVU44 SV9NSVhFUl9CTEVORF9QUkVNVUxUSVBMWV9ERUYgMHgwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfQkxFTkRfQktDT0xPUl9ERUYgMHhmZjAwMDAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVS X0JMRU5EX01PREVfREVGIDB4MDMwMTAzMDEKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVO RF9DS19DVExfREVGIDB4MAo+PiDCoCsKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9CTEVORF9P VVRDVExfSU5URVJMQUNFRCBCSVQoMSkKPj4gwqArCj4+IMKgKy8qCj4+IMKgKyAqIFZJIGNoYW5u ZWxzIGFyZSBub3QgdXNlZCBub3csIGJ1dCB0aGUgc3VwcG9ydCBvZiB0aGVtIG1heSBiZSBpbnRy b2R1Y2VkCj4+IMKgaW4gKyAqIHRoZSBmdXR1cmUuCj4+IMKgKyAqLwo+PiDCoCsKPj4gwqArI2Rl ZmluZSBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0FUVFIoY2gsIGxheWVyKSBcCj4+IMKgKyAo MHgyMDAwICsgMHgxMDAwICogKGNoKSArIDB4MjAgKiAobGF5ZXIpICsgMHgwKQo+PiDCoCsjZGVm aW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfU0laRShjaCwgbGF5ZXIpIFwKPj4gwqArICgw eDIwMDAgKyAweDEwMDAgKiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDQpCj4+IMKgKyNkZWZp bmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9DT09SRChjaCwgbGF5ZXIpIFwKPj4gwqArICgw eDIwMDAgKyAweDEwMDAgKiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDgpCj4+IMKgKyNkZWZp bmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9QSVRDSChjaCwgbGF5ZXIpIFwKPj4gwqArICgw eDIwMDAgKyAweDEwMDAgKiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweGMpCj4+IMKgKyNkZWZp bmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9UT1BfTEFERFIoY2gsIGxheWVyKSBcCj4+IMKg KyAoMHgyMDAwICsgMHgxMDAwICogKGNoKSArIDB4MjAgKiAobGF5ZXIpICsgMHgxMCkKPj4gwqAr I2RlZmluZSBTVU44SV9NSVhFUl9DSEFOX1VJX0xBWUVSX0JPVF9MQUREUihjaCwgbGF5ZXIpIFwK Pj4gwqArICgweDIwMDAgKyAweDEwMDAgKiAoY2gpICsgMHgyMCAqIChsYXllcikgKyAweDE0KQo+ PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfRkNPTE9SKGNoLCBsYXllcikg XAo+PiDCoCsgKDB4MjAwMCArIDB4MTAwMCAqIChjaCkgKyAweDIwICogKGxheWVyKSArIDB4MTgp Cj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9UT1BfSEFERFIoY2gpICgweDIwMDAg KyAweDEwMDAgKiAoY2gpICsgMHg4MCkKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9DSEFOX1VJ X0JPVF9IQUREUihjaCkgKDB4MjAwMCArIDB4MTAwMCAqIChjaCkgKyAweDg0KQo+PiDCoCsjZGVm aW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfT1ZMX1NJWkUoY2gpICgweDIwMDAgKyAweDEwMDAgKiAo Y2gpICsgMHg4OCkKPj4gwqArCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlF Ul9BVFRSX0VOIEJJVCgwKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJf QVRUUl9BTFBIQV9NT0RFX01BU0sgR0VOTUFTSygyLCAxKQo+PiDCoCsjZGVmaW5lIFNVTjhJX01J WEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9GQkZNVF9NQVNLIEdFTk1BU0soMTEsIDgpCj4+IMKgKyNk ZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhBX01BU0sgR0VOTUFTSygz MSwgMjQpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0FMUEhB X01PREVfREVGICgxIDw8IDEpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlF Ul9BVFRSX0ZCRk1UX0FSR0I4ODg4ICgwIDw8IDgpCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJf Q0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX1hSR0I4ODg4ICg0IDw8IDgpCj4+IMKgKyNkZWZpbmUg U1VOOElfTUlYRVJfQ0hBTl9VSV9MQVlFUl9BVFRSX0ZCRk1UX1JHQjg4OCAoOCA8PCA4KQo+PiDC oCsjZGVmaW5lIFNVTjhJX01JWEVSX0NIQU5fVUlfTEFZRVJfQVRUUl9BTFBIQV9ERUYgKDB4ZmYg PDwgMjQpCj4+IMKgKwo+PiDCoCsvKgo+PiDCoCsgKiBUaGVzZSBzdW4tZW5naW5lcyBhcmUgc3Rp bGwgdW5rbm93biBub3csIHRoZSBFTiByZWdpc3RlcnMgYXJlIGhlcmUgb25seQo+PiDCoHRvICsg KiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlc2Ugc3ViLWVuZ2luZXMuCj4+IMKgKyAqLwo+PiDCoCsj ZGVmaW5lIFNVTjhJX01JWEVSX1ZTVV9FTiAweDIwMDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlY RVJfR1NVMV9FTiAweDMwMDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR1NVMl9FTiAweDQw MDAwCj4+IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfR1NVM19FTiAweDUwMDAwCj4+IMKgKyNkZWZp bmUgU1VOOElfTUlYRVJfRkNFX0VOIDB4YTAwMDAKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9C V1NfRU4gMHhhMjAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0xUSV9FTiAweGE0MDAwCj4+ IMKgKyNkZWZpbmUgU1VOOElfTUlYRVJfUEVBS19FTiAweGE2MDAwCj4+IMKgKyNkZWZpbmUgU1VO OElfTUlYRVJfQVNFX0VOIDB4YTgwMDAKPj4gwqArI2RlZmluZSBTVU44SV9NSVhFUl9GQ0NfRU4g MHhhYTAwMAo+PiDCoCsjZGVmaW5lIFNVTjhJX01JWEVSX0RDU0NfRU4gMHhiMDAwMAo+PiDCoCsK Pj4gwqArc3RydWN0IHN1bjhpX21peGVyX2NmZyB7Cj4+IMKgKyBpbnQgdmlfbnVtOwo+PiDCoCsg aW50IHVpX251bTsKPj4gwqArfTsKPj4gwqArCj4+IMKgK3N0cnVjdCBzdW44aV9taXhlciB7Cj4+ IMKgKyBzdHJ1Y3QgcmVnbWFwICpyZWdzOwo+PiDCoCsKPj4gwqArIGNvbnN0IHN0cnVjdCBzdW44 aV9taXhlcl9jZmcgKmNmZzsKPj4gwqArCj4+IMKgKyBzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVz ZXQ7Cj4+IMKgKwo+PiDCoCsgc3RydWN0IGNsayAqYnVzX2NsazsKPj4gwqArIHN0cnVjdCBjbGsg Km1vZF9jbGs7Cj4+IMKgK307Cj4+IMKgKwo+PiDCoCt2b2lkIHN1bjhpX21peGVyX2NvbW1pdChz dHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyKTsKPj4gwqArCj4+IMKgK3ZvaWQgc3VuOGlfbWl4ZXJf bGF5ZXJfZW5hYmxlKHN0cnVjdCBzdW44aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIs IGJvb2wgZW5hYmxlKTsKPj4gwqAraW50IHN1bjhpX21peGVyX3VwZGF0ZV9sYXllcl9jb29yZChz dHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSk7Cj4+IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfZm9ybWF0cyhz dHJ1Y3Qgc3VuOGlfbWl4ZXIgKm1peGVyLAo+PiDCoCsgaW50IGxheWVyLCBzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSk7Cj4+IMKgK2ludCBzdW44aV9taXhlcl91cGRhdGVfbGF5ZXJfYnVmZmVyKHN0 cnVjdCBzdW44aV9taXhlciAqbWl4ZXIsCj4+IMKgKyBpbnQgbGF5ZXIsIHN0cnVjdCBkcm1fcGxh bmUgKnBsYW5lKTsKPj4gwqArI2VuZGlmIC8qIF9TVU44SV9NSVhFUl9IXyAqLwo+PiDCoC0tCj4+ IMKgMi4xMS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==