From mboxrd@z Thu Jan 1 00:00:00 1970 From: CK Hu Subject: Re: [PATCH v1 4/7] drm/mediatek: add hdmi driver for different hardware Date: Mon, 28 May 2018 16:32:33 +0800 Message-ID: <1527496353.396.8.camel@mtksdaap41> References: <20180514075243.5442-1-bibby.hsieh@mediatek.com> <20180514075243.5442-5-bibby.hsieh@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180514075243.5442-5-bibby.hsieh@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Bibby Hsieh Cc: linux-kernel@vger.kernel.org, Sascha Hauer , chunhui dai , David Airlie , Daniel Vetter , Cawa Cheng , dri-devel@lists.freedesktop.org, Mao Huang , Thierry Reding , linux-mediatek@lists.infradead.org, Matthias Brugger , Yingjoe Chen , linux-arm-kernel@lists.infradead.org List-Id: linux-mediatek@lists.infradead.org SGksIEJpYmJ5OgoKT24gTW9uLCAyMDE4LTA1LTE0IGF0IDE1OjUyICswODAwLCBCaWJieSBIc2ll aCB3cm90ZToKPiBGcm9tOiBjaHVuaHVpIGRhaSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29tPgo+ IAo+IFRoaXMgcGF0Y2ggYWRkcyBoZG1pIGRyaXZlciBzdXBwb3QgZm9yIGJvdGggTVQyNzAxIGFu ZCBNVDc2MjMuCj4gQW5kIGFsc28gc3VwcG9ydCBvdGhlciAoZXhpc3Rpbmcgb3IgZnV0dXJlKSBj aGlwcyB0aGF0IHVzZQo+IHRoZSBzYW1lIGJpbmRpbmcgYW5kIGRyaXZlci4KCkkgdGhpbmsgdGhp cyBwYXRjaCBzaG91bGQgYmUgc2VwYXJhdGVkIHRvIGF0IGxlYXN0IHR3byBwYXRjaGVzLgpUaGUg Zmlyc3QgaXMgdG8gaXNvbGF0ZSB0aGUgZGlmZmVyZW50IHBhcnQgZm9yIG10ODE3My4gQW5kIHRo ZSBzZWNvbmQgaXMKdG8gYWRkIG10MjcwMSBwYXJ0LgoKUmVnYXJkcywKQ0sKCj4gCj4gU2lnbmVk LW9mZi1ieTogQ2h1bmh1aSBEYWkgPGNodW5odWkuZGFpQG1lZGlhdGVrLmNvbT4KPiAtLS0KPiAg ZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxlICAgICAgICAgICAgICB8ICAgNCArLQo+ ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYyAgICAgICAgICAgIHwgIDkxICsr KysrLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5oICAgICAgICAgICAg fCAgMjggKysrCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9waHkuYyAgICAg ICAgfCAxNTcgKysrKysrKysrKysrKwo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk bWlfcmVncy5oICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19t dDI3MDFfaGRtaV9waHkuYyB8IDMwNyArKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGRyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMgfCAxMjkgKy0tLS0tLS0t LS0KPiAgNyBmaWxlcyBjaGFuZ2VkLCA1NjggaW5zZXJ0aW9ucygrKSwgMTQ5IGRlbGV0aW9ucygt KQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1p X3BoeS5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRr X210MjcwMV9oZG1pX3BoeS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRp YXRlay9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQo+IGluZGV4 IGNlODNjMzk2YTc0Mi4uNDQ0NjQ4OTNjMWNiIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtl ZmlsZQo+IEBAIC0xOCw2ICsxOCw4IEBAIG9iai0kKENPTkZJR19EUk1fTUVESUFURUspICs9IG1l ZGlhdGVrLWRybS5vCj4gIG1lZGlhdGVrLWRybS1oZG1pLW9ianMgOj0gbXRrX2NlYy5vIFwKPiAg CQkJICBtdGtfaGRtaS5vIFwKPiAgCQkJICBtdGtfaGRtaV9kZGMubyBcCj4gLQkJCSAgbXRrX210 ODE3M19oZG1pX3BoeS5vCj4gKwkJCSAgbXRrX210MjcwMV9oZG1pX3BoeS5vIFwKPiArCQkJICBt dGtfbXQ4MTczX2hkbWlfcGh5Lm8gXAo+ICsJCQkgIG10a19oZG1pX3BoeS5vCj4gIAo+ICBvYmot JChDT05GSUdfRFJNX01FRElBVEVLX0hETUkpICs9IG1lZGlhdGVrLWRybS1oZG1pLm8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMgYi9kcml2ZXJzL2dw dS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuYwo+IGluZGV4IDU5YTExMDI2ZGNlYi4uODVlMjgwOTYy YWFkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaS5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmMKPiBAQCAtMjMzLDYgKzIz Myw3IEBAIHN0YXRpYyB2b2lkIG10a19oZG1pX2h3X3ZpZF9ibGFjayhzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIGJvb2wgYmxhY2spCj4gIHN0YXRpYyB2b2lkIG10a19oZG1pX2h3X21ha2VfcmVnX3dy aXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCj4gIHsKPiAgCXN0cnVj dCBhcm1fc21jY2NfcmVzIHJlczsKPiArCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0g cGh5X2dldF9kcnZkYXRhKGhkbWktPnBoeSk7Cj4gIAo+ICAJLyoKPiAgCSAqIE1UODE3MyBIRE1J IGhhcmR3YXJlIGhhcyBhbiBvdXRwdXQgY29udHJvbCBiaXQgdG8gZW5hYmxlL2Rpc2FibGUgSERN SQo+IEBAIC0yNDAsOCArMjQxLDEzIEBAIHN0YXRpYyB2b2lkIG10a19oZG1pX2h3X21ha2VfcmVn X3dyaXRhYmxlKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpCj4gIAkgKiBUaGUg QVJNIHRydXN0ZWQgZmlybXdhcmUgcHJvdmlkZXMgYW4gQVBJIGZvciB0aGUgSERNSSBkcml2ZXIg dG8gc2V0Cj4gIAkgKiB0aGlzIGNvbnRyb2wgYml0IHRvIGVuYWJsZSBIRE1JIG91dHB1dCBpbiBz dXBlcnZpc29yIG1vZGUuCj4gIAkgKi8KPiAtCWFybV9zbWNjY19zbWMoTVRLX1NJUF9TRVRfQVVU SE9SSVpFRF9TRUNVUkVfUkVHLCAweDE0MDAwOTA0LCAweDgwMDAwMDAwLAo+IC0JCSAgICAgIDAs IDAsIDAsIDAsIDAsICZyZXMpOwo+ICsJaWYgKGhkbWlfcGh5LT5jb25mICYmIGhkbWlfcGh5LT5j b25mLT50el9lbmFibGVkKQo+ICsJCWFybV9zbWNjY19zbWMoTVRLX1NJUF9TRVRfQVVUSE9SSVpF RF9TRUNVUkVfUkVHLCAweDE0MDAwOTA0LAo+ICsJCQkgICAgICAweDgwMDAwMDAwLCAwLCAwLCAw LCAwLCAwLCAmcmVzKTsKPiArCWVsc2UKPiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+c3lz X3JlZ21hcCwKPiArCQkJCSAgIGhkbWktPnN5c19vZmZzZXQgKyBIRE1JX1NZU19DRkcyMCwKPiAr CQkJCSAgIEhETUlfUFNFQ1VSX0VOLCBlbmFibGUgPyAwIDogSERNSV9QU0VDVVJfRU4pOwo+ICAK PiAgCXJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5zeXNfcmVnbWFwLCBoZG1pLT5zeXNfb2Zmc2V0 ICsgSERNSV9TWVNfQ0ZHMjAsCj4gIAkJCSAgIEhETUlfUENMS19GUkVFX1JVTiwgZW5hYmxlID8g SERNSV9QQ0xLX0ZSRUVfUlVOIDogMCk7Cj4gQEAgLTE0MzcsNiArMTQ0Myw3IEBAIHN0YXRpYyBp bnQgbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEoc3RydWN0IG10a19oZG1pICpoZG1pLAo+ICAJc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqY2VjX3BkZXY7Cj4gIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7 Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKPiArCWNvbnN0IGNoYXIgKnBoeV9uYW1lOwo+ICAJ aW50IHJldDsKPiAgCj4gIAlyZXQgPSBtdGtfaGRtaV9nZXRfYWxsX2NsayhoZG1pLCBucCk7Cj4g QEAgLTE0NDUsOSArMTQ1MiwyMCBAQCBzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRh KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiArCXJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAicGh5LW5hbWVzIiwgJnBoeV9uYW1lKTsK PiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBwaHkt bmFtZXM6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwloZG1pLT5waHkg PSBkZXZtX3BoeV9nZXQoZGV2LCBwaHlfbmFtZSk7Cj4gKwlpZiAoSVNfRVJSKGhkbWktPnBoeSkp IHsKPiArCQlyZXQgPSBQVFJfRVJSKGhkbWktPnBoeSk7Cj4gKwkJZGV2X2VycihkZXYsICJGYWls ZWQgdG8gZ2V0IEhETUkgUEhZOiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiAgCS8qIFRoZSBDRUMgbW9kdWxlIGhhbmRsZXMgSERNSSBob3RwbHVnIGRldGVjdGlvbiAq Lwo+IC0JY2VjX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUobnAtPnBhcmVudCwgTlVMTCwK PiAtCQkJCQkgIm1lZGlhdGVrLG10ODE3My1jZWMiKTsKPiArCWNlY19ucCA9IG9mX3BhcnNlX3Bo YW5kbGUobnAsICJjZWMiLCAwKTsKPiAgCWlmICghY2VjX25wKSB7Cj4gIAkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZmluZCBDRUMgbm9kZVxuIik7Cj4gIAkJcmV0dXJuIC1FSU5WQUw7Cj4gQEAg LTE0ODYsOCArMTUwNCwxNCBAQCBzdGF0aWMgaW50IG10a19oZG1pX2R0X3BhcnNlX3BkYXRhKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwKPiAgCQlyZXR1cm4gUFRSX0VSUihoZG1pLT5yZWdzKTsKPiAg Cj4gIAlyZW1vdGUgPSBvZl9ncmFwaF9nZXRfcmVtb3RlX25vZGUobnAsIDEsIDApOwo+IC0JaWYg KCFyZW1vdGUpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwlpZiAoIXJlbW90ZSkgewo+ICsJCWky Y19ucCA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJkZGMtaTJjLWJ1cyIsIDApOwo+ICsJCWlmICgh aTJjX25wKSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgZGRjLWkyYy1idXMg bm9kZVxuIik7Cj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsJCX0KPiArCQlnb3RvIGZpbmRfZGRj X2FkcHQ7Cj4gKwl9Cj4gIAo+ICAJaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShyZW1vdGUs ICJoZG1pLWNvbm5lY3RvciIpKSB7Cj4gIAkJaGRtaS0+bmV4dF9icmlkZ2UgPSBvZl9kcm1fZmlu ZF9icmlkZ2UocmVtb3RlKTsKPiBAQCAtMTUwNyw2ICsxNTMxLDcgQEAgc3RhdGljIGludCBtdGtf aGRtaV9kdF9wYXJzZV9wZGF0YShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksCj4gIAl9Cj4gIAlvZl9u b2RlX3B1dChyZW1vdGUpOwo+ICAKPiArZmluZF9kZGNfYWRwdDoKPiAgCWhkbWktPmRkY19hZHB0 ID0gb2ZfZmluZF9pMmNfYWRhcHRlcl9ieV9ub2RlKGkyY19ucCk7Cj4gIAlpZiAoIWhkbWktPmRk Y19hZHB0KSB7Cj4gIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGRkYyBpMmMgYWRhcHRl ciBieSBub2RlXG4iKTsKPiBAQCAtMTU3NSw2ICsxNjAwLDExIEBAIHN0YXRpYyBpbnQgbXRrX2hk bWlfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgCQlo ZG1pX3BhcmFtcy5hdWRfaTJzX2ZtdCA9IEhETUlfSTJTX01PREVfSTJTXzI0QklUOwo+ICAJCWhk bWlfcGFyYW1zLmF1ZF9tY2xrID0gSERNSV9BVURfTUNMS18xMjhGUzsKPiAgCQlicmVhazsKPiAr CWNhc2UgSERNSV9TUERJRjoKPiArCQloZG1pX3BhcmFtcy5hdWRfY29kZWMgPSBIRE1JX0FVRElP X0NPRElOR19UWVBFX1BDTTsKPiArCQloZG1pX3BhcmFtcy5hdWRfc2FtcGVfc2l6ZSA9IEhETUlf QVVESU9fU0FNUExFX1NJWkVfMTY7Cj4gKwkJaGRtaV9wYXJhbXMuYXVkX2lucHV0X3R5cGUgPSBI RE1JX0FVRF9JTlBVVF9TUERJRjsKPiArCQlicmVhazsKPiAgCWRlZmF1bHQ6Cj4gIAkJZGV2X2Vy cihoZG1pLT5kZXYsICIlczogSW52YWxpZCBEQUkgZm9ybWF0ICVkXG4iLCBfX2Z1bmNfXywKPiAg CQkJZGFpZm10LT5mbXQpOwo+IEBAIC0xNjUwLDE1ICsxNjgwLDE2IEBAIHN0YXRpYyB2b2lkIG10 a19oZG1pX3JlZ2lzdGVyX2F1ZGlvX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gIAkJLm1h eF9pMnNfY2hhbm5lbHMgPSAyLAo+ICAJCS5pMnMgPSAxLAo+ICAJfTsKPiAtCXN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXY7Cj4gLQo+IC0JcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rl cl9kYXRhKGRldiwgSERNSV9DT0RFQ19EUlZfTkFNRSwKPiAtCQkJCQkgICAgIFBMQVRGT1JNX0RF VklEX0FVVE8sICZjb2RlY19kYXRhLAo+IC0JCQkJCSAgICAgc2l6ZW9mKGNvZGVjX2RhdGEpKTsK PiAtCWlmIChJU19FUlIocGRldikpCj4gKwlzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldjsKPiArCj4gKwlpZiAoIXBkZXYpIHsKPiArCQlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3Jl Z2lzdGVyX2RhdGEoZGV2LCBIRE1JX0NPREVDX0RSVl9OQU1FLAo+ICsJCQkJCQkgICAgIFBMQVRG T1JNX0RFVklEX05PTkUsCj4gKwkJCQkJCSAgICAgJmNvZGVjX2RhdGEsCj4gKwkJCQkJCSAgICAg c2l6ZW9mKGNvZGVjX2RhdGEpKTsKPiArCQlEUk1fSU5GTygiJXMgZHJpdmVyIGJvdW5kIHRvIEhE TUlcbiIsIEhETUlfQ09ERUNfRFJWX05BTUUpOwo+ICsJfQo+ICAJCXJldHVybjsKPiAtCj4gLQlE Uk1fSU5GTygiJXMgZHJpdmVyIGJvdW5kIHRvIEhETUlcbiIsIEhETUlfQ09ERUNfRFJWX05BTUUp Owo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQo+IEBAIC0xNjcyLDE4ICsxNzAzLDEyIEBAIHN0YXRpYyBpbnQgbXRr X2RybV9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gIAkJcmV0dXJu IC1FTk9NRU07Cj4gIAo+ICAJaGRtaS0+ZGV2ID0gZGV2Owo+ICsJbXRrX2hkbWlfcmVnaXN0ZXJf YXVkaW9fZHJpdmVyKGRldik7Cj4gIAo+ICAJcmV0ID0gbXRrX2hkbWlfZHRfcGFyc2VfcGRhdGEo aGRtaSwgcGRldik7Cj4gIAlpZiAocmV0KQo+ICAJCXJldHVybiByZXQ7Cj4gIAo+IC0JaGRtaS0+ cGh5ID0gZGV2bV9waHlfZ2V0KGRldiwgImhkbWkiKTsKPiAtCWlmIChJU19FUlIoaGRtaS0+cGh5 KSkgewo+IC0JCXJldCA9IFBUUl9FUlIoaGRtaS0+cGh5KTsKPiAtCQlkZXZfZXJyKGRldiwgIkZh aWxlZCB0byBnZXQgSERNSSBQSFk6ICVkXG4iLCByZXQpOwo+IC0JCXJldHVybiByZXQ7Cj4gLQl9 Cj4gLQo+ICAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaGRtaSk7Cj4gIAo+ICAJcmV0ID0g bXRrX2hkbWlfb3V0cHV0X2luaXQoaGRtaSk7Cj4gQEAgLTE2OTIsOCArMTcxNyw2IEBAIHN0YXRp YyBpbnQgbXRrX2RybV9oZG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4g IAkJcmV0dXJuIHJldDsKPiAgCX0KPiAgCj4gLQltdGtfaGRtaV9yZWdpc3Rlcl9hdWRpb19kcml2 ZXIoZGV2KTsKPiAtCj4gIAloZG1pLT5icmlkZ2UuZnVuY3MgPSAmbXRrX2hkbWlfYnJpZGdlX2Z1 bmNzOwo+ICAJaGRtaS0+YnJpZGdlLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKPiAgCWRy bV9icmlkZ2VfYWRkKCZoZG1pLT5icmlkZ2UpOwo+IEBAIC0xNzA0LDcgKzE3MjcsNiBAQCBzdGF0 aWMgaW50IG10a19kcm1faGRtaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ ICAJCWdvdG8gZXJyX2JyaWRnZV9yZW1vdmU7Cj4gIAl9Cj4gIAo+IC0JZGV2X2RiZyhkZXYsICJt ZWRpYXRlayBoZG1pIHByb2JlIHN1Y2Nlc3NcbiIpOwo+ICAJcmV0dXJuIDA7Cj4gIAo+ICBlcnJf YnJpZGdlX3JlbW92ZToKPiBAQCAtMTc3Myw4ICsxNzk1LDI1IEBAIHN0YXRpYyBzdHJ1Y3QgcGxh dGZvcm1fZHJpdmVyICogY29uc3QgbXRrX2hkbWlfZHJpdmVyc1tdID0gewo+ICAKPiAgc3RhdGlj IGludCBfX2luaXQgbXRrX2hkbWl0eF9pbml0KHZvaWQpCj4gIHsKPiAtCXJldHVybiBwbGF0Zm9y bV9yZWdpc3Rlcl9kcml2ZXJzKG10a19oZG1pX2RyaXZlcnMsCj4gLQkJCQkJIEFSUkFZX1NJWkUo bXRrX2hkbWlfZHJpdmVycykpOwo+ICsJaW50IHJldDsKPiArCWludCBpOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKG10a19oZG1pX2RyaXZlcnMpOyBpKyspIHsKPiArCQlyZXQg PSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIobXRrX2hkbWlfZHJpdmVyc1tpXSk7Cj4gKwkJaWYg KHJldCA8IDApIHsKPiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJXMgZHJpdmVyOiAl ZFxuIiwKPiArCQkJICAgICAgIG10a19oZG1pX2RyaXZlcnNbaV0tPmRyaXZlci5uYW1lLCByZXQp Owo+ICsJCQlnb3RvIGVycjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtl cnI6Cj4gKwl3aGlsZSAoLS1pID49IDApCj4gKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIo bXRrX2hkbWlfZHJpdmVyc1tpXSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiAgfQo+ICAKPiAgc3Rh dGljIHZvaWQgX19leGl0IG10a19oZG1pdHhfZXhpdCh2b2lkKQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfaGRtaS5oCj4gaW5kZXggNjM3MWIzZGUxZmY2Li5hNDU0NmI4MzMyOWYgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pLmgKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWkuaAo+IEBAIC0xMywxMSArMTMsMzkgQEAKPiAgICov Cj4gICNpZm5kZWYgX01US19IRE1JX0NUUkxfSAo+ICAjZGVmaW5lIF9NVEtfSERNSV9DVFJMX0gK PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVy Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUgPGxp bnV4L3BoeS9waHkuaD4KPiArCj4gK3N0cnVjdCBtdGtfaGRtaV9waHlfY29uZiB7Cj4gKwlib29s IHR6X2VuYWJsZWQ7Cj4gKwljb25zdCBzdHJ1Y3QgY2xrX29wcyAqaGRtaV9waHlfY2xrX29wczsK PiArCWNvbnN0IHN0cnVjdCBwaHlfb3BzICpoZG1pX3BoeV9kZXZfb3BzOwo+ICt9Owo+ICsKPiAr c3RydWN0IG10a19oZG1pX3BoeSB7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5X2NvbmYgKmNvbmY7Cj4gKwlzdHJ1 Y3QgY2xrICpwbGw7Cj4gKwlzdHJ1Y3QgY2xrX2h3IHBsbF9odzsKPiArCXVuc2lnbmVkIGxvbmcg cGxsX3JhdGU7Cj4gKwl1bnNpZ25lZCBjaGFyIGRydl9pbXBfY2xrOwo+ICsJdW5zaWduZWQgY2hh ciBkcnZfaW1wX2QyOwo+ICsJdW5zaWduZWQgY2hhciBkcnZfaW1wX2QxOwo+ICsJdW5zaWduZWQg Y2hhciBkcnZfaW1wX2QwOwo+ICsJdW5zaWduZWQgaW50IGliaWFzOwo+ICsJdW5zaWduZWQgaW50 IGliaWFzX3VwOwo+ICt9Owo+ICAKPiAgc3RydWN0IHBsYXRmb3JtX2RyaXZlcjsKPiAgCj4gIGV4 dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19jZWNfZHJpdmVyOwo+ICBleHRlcm4gc3Ry dWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9kZGNfZHJpdmVyOwo+ICBleHRlcm4gc3RydWN0 IHBsYXRmb3JtX2RyaXZlciBtdGtfaGRtaV9waHlfZHJpdmVyOwo+ICtleHRlcm4gc3RydWN0IG10 a19oZG1pX3BoeV9jb25mIG10a19oZG1pX3BoeV84MTczX2NvbmY7Cj4gK2V4dGVybiBzdHJ1Y3Qg bXRrX2hkbWlfcGh5X2NvbmYgbXRrX2hkbWlfcGh5XzI3MDFfY29uZjsKPiArCj4gIAo+ICAjZW5k aWYgLyogX01US19IRE1JX0NUUkxfSCAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v bWVkaWF0ZWsvbXRrX2hkbWlfcGh5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hk bWlfcGh5LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzI1 NzkwYWJkNDY5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRl ay9tdGtfaGRtaV9waHkuYwo+IEBAIC0wLDAgKzEsMTU3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOCBNZWRpYVRl ayBJbmMuCj4gKyAqIEF1dGhvcjogSmllIFFpdSA8amllLnFpdUBtZWRpYXRlay5jb20+Cj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXBy b3ZpZGVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L21mZC9zeXNjb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4g KyNpbmNsdWRlICJtdGtfaGRtaS5oIgo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2Ns a19nZXRfb3BzKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LAo+ICsJCQkJICAgICBjb25z dCBzdHJ1Y3QgY2xrX29wcyAqKm9wcykKPiArewo+ICsJaWYgKGhkbWlfcGh5ICYmIGhkbWlfcGh5 LT5jb25mICYmIGhkbWlfcGh5LT5jb25mLT5oZG1pX3BoeV9jbGtfb3BzKQo+ICsJCSpvcHMgPSBo ZG1pX3BoeS0+Y29uZi0+aGRtaV9waHlfY2xrX29wczsKPiArCWVsc2UKPiArCQlkZXZfZXJyKGhk bWlfcGh5LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNsayBvcHMgb2YgcGh5XG4iKTsKPiArfQo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzICoKPiArbXRrX2hkbWlfcGh5X2Rldl9nZXRf b3BzKGNvbnN0IHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5KQo+ICt7Cj4gKwlpZiAoaGRt aV9waHkgJiYgaGRtaV9waHktPmNvbmYgJiYgaGRtaV9waHktPmNvbmYtPmhkbWlfcGh5X2Rldl9v cHMpCj4gKwkJcmV0dXJuIGhkbWlfcGh5LT5jb25mLT5oZG1pX3BoeV9kZXZfb3BzOwo+ICsJZGV2 X2VycihoZG1pX3BoeS0+ZGV2LCAiRmFpbGVkIHRvIGdldCBkZXYgb3BzIG9mIHBoeVxuIik7Cj4g KwkJcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfcGh5X3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRl diA9ICZwZGV2LT5kZXY7Cj4gKwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeTsKPiArCXN0 cnVjdCByZXNvdXJjZSAqbWVtOwo+ICsJc3RydWN0IGNsayAqcmVmX2NsazsKPiArCWNvbnN0IGNo YXIgKnJlZl9jbGtfbmFtZTsKPiArCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNsa19pbml0ID0gewo+ ICsJCS5udW1fcGFyZW50cyA9IDEsCj4gKwkJLnBhcmVudF9uYW1lcyA9IChjb25zdCBjaGFyICog Y29uc3QgKikmcmVmX2Nsa19uYW1lLAo+ICsJCS5mbGFncyA9IENMS19TRVRfUkFURV9QQVJFTlQg fCBDTEtfU0VUX1JBVEVfR0FURSwKPiArCX07Cj4gKwo+ICsJc3RydWN0IHBoeSAqcGh5Owo+ICsJ c3RydWN0IHBoeV9wcm92aWRlciAqcGh5X3Byb3ZpZGVyOwo+ICsJaW50IHJldDsKPiArCj4gKwlo ZG1pX3BoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVM KTsKPiArCWlmICghaGRtaV9waHkpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWVtID0g cGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWhkbWlf cGh5LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKPiArCWlmIChJU19F UlIoaGRtaV9waHktPnJlZ3MpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7 Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIs IHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZWZfY2xrID0gZGV2bV9jbGtf Z2V0KGRldiwgInBsbF9yZWYiKTsKPiArCWlmIChJU19FUlIocmVmX2NsaykpIHsKPiArCQlyZXQg PSBQVFJfRVJSKHJlZl9jbGspOwo+ICsJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBn ZXQgUExMIHJlZmVyZW5jZSBjbG9jazogJWRcbiIsCj4gKwkJCXJldCk7Cj4gKwkJcmV0dXJuIHJl dDsKPiArCX0KPiArCXJlZl9jbGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOwo+ICsK PiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgImNsb2NrLW91 dHB1dC1uYW1lcyIsCj4gKwkJCQkgICAgICAmY2xrX2luaXQubmFtZSk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0LW5hbWVz OiAlZFxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCWhkbWlfcGh5LT5k ZXYgPSBkZXY7Cj4gKwloZG1pX3BoeS0+Y29uZiA9Cj4gKwkJKHN0cnVjdCBtdGtfaGRtaV9waHlf Y29uZiAqKW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+ICsJbXRrX2hkbWlfcGh5X2Ns a19nZXRfb3BzKGhkbWlfcGh5LCAmY2xrX2luaXQub3BzKTsKPiArCWhkbWlfcGh5LT5wbGxfaHcu aW5pdCA9ICZjbGtfaW5pdDsKPiArCWhkbWlfcGh5LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3Rlcihk ZXYsICZoZG1pX3BoeS0+cGxsX2h3KTsKPiArCWlmIChJU19FUlIoaGRtaV9waHktPnBsbCkpIHsK PiArCQlyZXQgPSBQVFJfRVJSKGhkbWlfcGh5LT5wbGwpOwo+ICsJCWRldl9lcnIoZGV2LCAiRmFp bGVkIHRvIHJlZ2lzdGVyIFBMTDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRl ayxpYmlhcyIsCj4gKwkJCQkgICAmaGRtaV9waHktPmliaWFzKTsKPiArCWlmIChyZXQgPCAwKSB7 Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFk X3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhc191cCIsCj4gKwkJCQkgICAmaGRtaV9w aHktPmliaWFzX3VwKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2 LCAiRmFpbGVkIHRvIGdldCBpYmlhcyB1cDogJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsK PiArCX0KPiArCj4gKwlkZXZfaW5mbyhkZXYsICJVc2luZyBkZWZhdWx0IFRYIERSViBpbXBlZGFu Y2U6IDQuMmsvMzZcbiIpOwo+ICsJaGRtaV9waHktPmRydl9pbXBfY2xrID0gMHgzMDsKPiArCWhk bWlfcGh5LT5kcnZfaW1wX2QyID0gMHgzMDsKPiArCWhkbWlfcGh5LT5kcnZfaW1wX2QxID0gMHgz MDsKPiArCWhkbWlfcGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKPiArCj4gKwlwaHkgPSBkZXZtX3Bo eV9jcmVhdGUoZGV2LCBOVUxMLCBtdGtfaGRtaV9waHlfZGV2X2dldF9vcHMoaGRtaV9waHkpKTsK PiArCWlmIChJU19FUlIocGh5KSkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0 ZSBIRE1JIFBIWVxuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIocGh5KTsKPiArCX0KPiArCXBoeV9z ZXRfZHJ2ZGF0YShwaHksIGhkbWlfcGh5KTsKPiArCj4gKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29m X3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOwo+ICsJaWYg KElTX0VSUihwaHlfcHJvdmlkZXIpKSB7Cj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVn aXN0ZXIgSERNSSBQSFlcbiIpOwo+ICsJCXJldHVybiBQVFJfRVJSKHBoeV9wcm92aWRlcik7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIG9mX2Nsa19hZGRfcHJvdmlkZXIoZGV2LT5vZl9ub2RlLCBvZl9j bGtfc3JjX3NpbXBsZV9nZXQsCj4gKwkJCQkgICBoZG1pX3BoeS0+cGxsKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBtdGtfaGRtaV9waHlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9m X2RldmljZV9pZCBtdGtfaGRtaV9waHlfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAi bWVkaWF0ZWssbXQyNzAxLWhkbWktcGh5IiwKPiArCSAgLmRhdGEgPSAmbXRrX2hkbWlfcGh5XzI3 MDFfY29uZiwKPiArCX0sCj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE3My1oZG1p LXBoeSIsCj4gKwkgIC5kYXRhID0gJm10a19oZG1pX3BoeV84MTczX2NvbmYsCj4gKwl9LAo+ICsJ e30sCj4gK307Cj4gKwo+ICtzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2 ZXIgPSB7Cj4gKwkucHJvYmUgPSBtdGtfaGRtaV9waHlfcHJvYmUsCj4gKwkucmVtb3ZlID0gbXRr X2hkbWlfcGh5X3JlbW92ZSwKPiArCS5kcml2ZXIgPSB7Cj4gKwkJLm5hbWUgPSAibWVkaWF0ZWst aGRtaS1waHkiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKPiAr CX0sCj4gK307Cj4gKwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUkgUEhZIERy aXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmggYi9kcml2ZXJzL2dwdS9kcm0vbWVk aWF0ZWsvbXRrX2hkbWlfcmVncy5oCj4gaW5kZXggYTVjYjA3ZDEyYzljLi5lNTNjNjY0NjU3MWMg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3MuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzLmgKPiBAQCAtMjI3 LDYgKzIyNyw3IEBACj4gICNkZWZpbmUgREVFUF9DT0xPUl9FTgkJCUJJVCgwKQo+ICAjZGVmaW5l IEhETUlfQVVESU9fVEVTVF9TRUwJCUJJVCg4KQo+ICAjZGVmaW5lIEhETUkyUDBfRU4JCQlCSVQo MTEpCj4gKyNkZWZpbmUgSERNSV9QU0VDVVJfRU4JCQlCSVQoMTUpCj4gICNkZWZpbmUgSERNSV9P VVRfRklGT19FTgkJQklUKDE2KQo+ICAjZGVmaW5lIEhETUlfT1VUX0ZJRk9fQ0xLX0lOVgkJQklU KDE3KQo+ICAjZGVmaW5lIE1ITF9NT0RFX09OCQkJQklUKDI4KQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210MjcwMV9oZG1pX3BoeS5jIGIvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19tdDI3MDFfaGRtaV9waHkuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44YWY1ZTZjMWFlY2MKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19tdDI3MDFfaGRtaV9waHkuYwo+IEBAIC0w LDAgKzEsMzA3IEBACj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8q Cj4gKyAqQ29weXJpZ2h0IChjKSAyMDE4IE1lZGlhVGVrIEluYy4KPiArICpBdXRob3I6IENodW5o dWkgRGFpIDxjaHVuaHVpLmRhaUBtZWRpYXRlay5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2Nsay5oPgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9kZWJ1Z2ZzLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3Jt Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgv bW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9w aHkvcGh5Lmg+Cj4gKyNpbmNsdWRlICJtdGtfaGRtaS5oIgo+ICsKPiArI2RlZmluZSBIRE1JX0NP TjAJMHgwMAo+ICsjZGVmaW5lIFJHX0hETUlUWF9EUlZfSUJJQVMJCSgwKQo+ICsjZGVmaW5lIFJH X0hETUlUWF9EUlZfSUJJQVNfTUFTSwkoMHgzRiA8PCAwKQo+ICsjZGVmaW5lIFJHX0hETUlUWF9F Tl9TRVIJCSgxMikKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fU0VSX01BU0sJCSgweDBGIDw8IDEy KQo+ICsjZGVmaW5lIFJHX0hETUlUWF9FTl9TTERPCQkoMTYpCj4gKyNkZWZpbmUgUkdfSERNSVRY X0VOX1NMRE9fTUFTSwkJKDB4MEYgPDwgMTYpCj4gKyNkZWZpbmUgUkdfSERNSVRYX0VOX1BSRUQJ CSgyMCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fUFJFRF9NQVNLCQkoMHgwRiA8PCAyMCkKPiAr I2RlZmluZSBSR19IRE1JVFhfRU5fSU1QCQkoMjQpCj4gKyNkZWZpbmUgUkdfSERNSVRYX0VOX0lN UF9NQVNLCQkoMHgwRiA8PCAyNCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fRFJWCQkoMjgpCj4g KyNkZWZpbmUgUkdfSERNSVRYX0VOX0RSVl9NQVNLCQkoMHgwRiA8PCAyOCkKPiArCj4gKyNkZWZp bmUgSERNSV9DT04xCTB4MDQKPiArI2RlZmluZSBSR19IRE1JVFhfUFJFRF9JQklBUwkJKDE4KQo+ ICsjZGVmaW5lIFJHX0hETUlUWF9QUkVEX0lCSUFTX01BU0sJKDB4MEYgPDwgMTgpCj4gKyNkZWZp bmUgUkdfSERNSVRYX1BSRURfSU1QCQkoMHgwMSA8PCAyMikKPiArI2RlZmluZSBSR19IRE1JVFhf RFJWX0lNUAkJKDI2KQo+ICsjZGVmaW5lIFJHX0hETUlUWF9EUlZfSU1QX01BU0sJCSgweDNGIDw8 IDI2KQo+ICsKPiArI2RlZmluZSBIRE1JX0NPTjIJMHgwOAo+ICsjZGVmaW5lIFJHX0hETUlUWF9F Tl9UWF9DS0xETwkJKDB4MDEgPDwgMCkKPiArI2RlZmluZSBSR19IRE1JVFhfRU5fVFhfUE9TRElW CQkoMHgwMSA8PCAxKQo+ICsjZGVmaW5lIFJHX0hETUlUWF9UWF9QT1NESVYJCSgzKQo+ICsjZGVm aW5lIFJHX0hETUlUWF9UWF9QT1NESVZfTUFTSwkoMHgwMyA8PCAzKQo+ICsjZGVmaW5lIFJHX0hE TUlUWF9FTl9NQklBUwkJKDB4MDEgPDwgNikKPiArI2RlZmluZSBSR19IRE1JVFhfTUJJQVNfTFBG X0VOCQkoMHgwMSA8PCA3KQo+ICsKPiArI2RlZmluZSBIRE1JX0NPTjQJMHgxMAo+ICsjZGVmaW5l IFJHX0hETUlUWF9SRVNFUlZFX01BU0sJCSgweEZGRkZGRkZGIDw8IDApCj4gKwo+ICsjZGVmaW5l IEhETUlfQ09ONgkweDE4Cj4gKyNkZWZpbmUgUkdfSFRQTExfQlIJCQkoMCkKPiArI2RlZmluZSBS R19IVFBMTF9CUl9NQVNLCQkoMHgwMyA8PCAwKQo+ICsjZGVmaW5lIFJHX0hUUExMX0JDCQkJKDIp Cj4gKyNkZWZpbmUgUkdfSFRQTExfQkNfTUFTSwkJKDB4MDMgPDwgMikKPiArI2RlZmluZSBSR19I VFBMTF9CUAkJCSg0KQo+ICsjZGVmaW5lIFJHX0hUUExMX0JQX01BU0sJCSgweDBGIDw8IDQpCj4g KyNkZWZpbmUgUkdfSFRQTExfSVIJCQkoOCkKPiArI2RlZmluZSBSR19IVFBMTF9JUl9NQVNLCQko MHgwRiA8PCA4KQo+ICsjZGVmaW5lIFJHX0hUUExMX0lDCQkJKDEyKQo+ICsjZGVmaW5lIFJHX0hU UExMX0lDX01BU0sJCSgweDBGIDw8IDEyKQo+ICsjZGVmaW5lIFJHX0hUUExMX1BPU0RJVgkJCSgx NikKPiArI2RlZmluZSBSR19IVFBMTF9QT1NESVZfTUFTSwkJKDB4MDMgPDwgMTYpCj4gKyNkZWZp bmUgUkdfSFRQTExfUFJFRElWCQkJKDE4KQo+ICsjZGVmaW5lIFJHX0hUUExMX1BSRURJVl9NQVNL CQkoMHgwMyA8PCAxOCkKPiArI2RlZmluZSBSR19IVFBMTF9GQktTRUwJCQkoMjApCj4gKyNkZWZp bmUgUkdfSFRQTExfRkJLU0VMX01BU0sJCSgweDAzIDw8IDIwKQo+ICsjZGVmaW5lIFJHX0hUUExM X1JMSF9FTgkJCSgweDAxIDw8IDIyKQo+ICsjZGVmaW5lIFJHX0hUUExMX0ZCS0RJVgkJCSgyNCkK PiArI2RlZmluZSBSR19IVFBMTF9GQktESVZfTUFTSwkJKDB4N0YgPDwgMjQpCj4gKyNkZWZpbmUg UkdfSFRQTExfRU4JCQkoMHgwMSA8PCAzMSkKPiArCj4gKyNkZWZpbmUgSERNSV9DT043CTB4MWMK PiArI2RlZmluZSBSR19IVFBMTF9BVVRPS19FTgkJKDB4MDEgPDwgMjMpCj4gKyNkZWZpbmUgUkdf SFRQTExfRElWRU4JCQkoMjgpCj4gKyNkZWZpbmUgUkdfSFRQTExfRElWRU5fTUFTSwkJKDB4MDcg PDwgMjgpCj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBtdGtfaGRtaV9waHkgKnRvX210a19o ZG1pX3BsbChzdHJ1Y3QgY2xrX2h3ICpodykKPiArewo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZiho dywgc3RydWN0IG10a19oZG1pX3BoeSwgcGxsX2h3KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSB2b2lkIG10a19oZG1pX3BsbF9tYXNrKHN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5LCB1 MzIgb2Zmc2V0LAo+ICsJCQkJICAgICB1MzIgdmFsLCB1MzIgbWFzaykKPiArewo+ICsJdTMyIHRt cCA9IHJlYWRsKGhkbWlfcGh5LT5yZWdzICArIG9mZnNldCkgJiB+bWFzazsKPiArCj4gKwl0bXAg fD0gKHZhbCAmIG1hc2spOwo+ICsJd3JpdGVsKHRtcCwgaGRtaV9waHktPnJlZ3MgKyBvZmZzZXQp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19oZG1pX3BsbF9lbmFibGUoc3RydWN0IGNsa19o dyAqaHcpCj4gK3sKPiArCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hk bWlfcGxsKGh3KTsKPiArCj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT043 LCBSR19IVFBMTF9BVVRPS19FTiwKPiArCQkJICBSR19IVFBMTF9BVVRPS19FTik7Cj4gKwltdGtf aGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19IVFBMTF9STEhfRU4pOwo+ ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDB4MyA8PCBSR19IVFBM TF9QT1NESVYpLAo+ICsJCQkgIFJHX0hUUExMX1BPU0RJVl9NQVNLKTsKPiArCW10a19oZG1pX3Bs bF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9FTl9NQklBUywKPiArCQkJICBS R19IRE1JVFhfRU5fTUJJQVMpOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwo+ICsJbXRrX2hk bWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgUkdfSFRQTExfRU4sIFJHX0hUUExMX0VO KTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9F Tl9UWF9DS0xETywKPiArCQkJICBSR19IRE1JVFhfRU5fVFhfQ0tMRE8pOwo+ICsJbXRrX2hkbWlf cGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4ZiA8PCBSR19IRE1JVFhfRU5fU0xETyks Cj4gKwkJCSAgUkdfSERNSVRYX0VOX1NMRE9fTUFTSyk7Cj4gKwl1c2xlZXBfcmFuZ2UoODAsIDEw MCk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04yLCBSR19IRE1JVFhf TUJJQVNfTFBGX0VOLAo+ICsJCQkgIFJHX0hETUlUWF9NQklBU19MUEZfRU4pOwo+ICsJbXRrX2hk bWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgUkdfSERNSVRYX0VOX1RYX1BPU0RJViwK PiArCQkJICBSR19IRE1JVFhfRU5fVFhfUE9TRElWKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhk bWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1NFUiksCj4gKwkJCSAgUkdf SERNSVRYX0VOX1NFUl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1BSRUQpLAo+ICsJCQkgIFJHX0hETUlUWF9FTl9Q UkVEX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4 ZiA8PCBSR19IRE1JVFhfRU5fRFJWKSwKPiArCQkJICBSR19IRE1JVFhfRU5fRFJWX01BU0spOwo+ ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyB2b2lkIG10a19oZG1pX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQo+ICt7Cj4gKwlz dHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BsbChodyk7Cj4gKwo+ ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VO X0RSVl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAs IFJHX0hETUlUWF9FTl9QUkVEX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHks IEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VOX1NFUl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlUWF9FTl9UWF9QT1NESVYpOwo+ICsJ bXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwgUkdfSERNSVRYX01CSUFT X0xQRl9FTik7Cj4gKwl1c2xlZXBfcmFuZ2UoODAsIDEwMCk7Cj4gKwltdGtfaGRtaV9wbGxfbWFz ayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfRU5fU0xET19NQVNLKTsKPiArCW10 a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlUWF9FTl9UWF9D S0xETyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19I VFBMTF9FTik7Cj4gKwl1c2xlZXBfcmFuZ2UoODAsIDEwMCk7Cj4gKwltdGtfaGRtaV9wbGxfbWFz ayhoZG1pX3BoeSwgSERNSV9DT04yLCAwLCBSR19IRE1JVFhfRU5fTUJJQVMpOwo+ICsJbXRrX2hk bWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgMCwgUkdfSFRQTExfUE9TRElWX01BU0sp Owo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgMCwgUkdfSFRQTExf UkxIX0VOKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjcsIDAsIFJH X0hUUExMX0FVVE9LX0VOKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKPiArfQo+ICsKPiAr c3RhdGljIGludCBtdGtfaGRtaV9wbGxfc2V0X3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2ln bmVkIGxvbmcgcmF0ZSwKPiArCQkJCSB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQo+ICt7Cj4g KwlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1pX3BoeSA9IHRvX210a19oZG1pX3BsbChodyk7Cj4g Kwl1MzIgcG9zX2RpdjsKPiArCj4gKwlpZiAocmF0ZSA8PSA2NDAwMDAwMCkKPiArCQlwb3NfZGl2 ID0gMzsKPiArCWVsc2UgaWYgKHJhdGUgPD0gMTI4MDAwMDApCj4gKwkJcG9zX2RpdiA9IDE7Cj4g KwllbHNlCj4gKwkJcG9zX2RpdiA9IDE7Cj4gKwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9w aHksIEhETUlfQ09ONiwgKDB4MyA8PCBSR19IVFBMTF9QUkVESVYpLAo+ICsJCQkgIFJHX0hUUExM X1BSRURJVl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYs ICgweDMgPDwgUkdfSFRQTExfUE9TRElWKSwKPiArCQkJICBSR19IVFBMTF9QT1NESVZfTUFTSyk7 Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAoMHgxIDw8IFJHX0hU UExMX0lDKSwKPiArCQkJICBSR19IVFBMTF9JQ19NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNr KGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDEgPDwgUkdfSFRQTExfSVIpLAo+ICsJCQkgIFJHX0hU UExMX0lSX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwg KHBvc19kaXYgPDwgUkdfSERNSVRYX1RYX1BPU0RJViksCj4gKwkJCSAgUkdfSERNSVRYX1RYX1BP U0RJVl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgx IDw8IFJHX0hUUExMX0ZCS1NFTCksCj4gKwkJCSAgUkdfSFRQTExfRkJLU0VMX01BU0spOwo+ICsJ bXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgKDE5IDw8IFJHX0hUUExMX0ZC S0RJViksCj4gKwkJCSAgUkdfSFRQTExfRkJLRElWX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21h c2soaGRtaV9waHksIEhETUlfQ09ONywgKDB4MiA8PCBSR19IVFBMTF9ESVZFTiksCj4gKwkJCSAg UkdfSFRQTExfRElWRU5fTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT042LCAoMHhjIDw8IFJHX0hUUExMX0JQKSwKPiArCQkJICBSR19IVFBMTF9CUF9NQVNLKTsK PiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjYsICgweDIgPDwgUkdfSFRQ TExfQkMpLAo+ICsJCQkgIFJHX0hUUExMX0JDX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2so aGRtaV9waHksIEhETUlfQ09ONiwgKDB4MSA8PCBSR19IVFBMTF9CUiksCj4gKwkJCSAgUkdfSFRQ TExfQlJfTUFTSyk7Cj4gKwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09O MSwgMCwgUkdfSERNSVRYX1BSRURfSU1QKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5 LCBIRE1JX0NPTjEsICgweDMgPDwgUkdfSERNSVRYX1BSRURfSUJJQVMpLAo+ICsJCQkgIFJHX0hE TUlUWF9QUkVEX0lCSUFTX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhE TUlfQ09OMCwgKDB4MCA8PCBSR19IRE1JVFhfRU5fSU1QKSwKPiArCQkJICBSR19IRE1JVFhfRU5f SU1QX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMSwgKDB4 MjggPDwgUkdfSERNSVRYX0RSVl9JTVApLAo+ICsJCQkgIFJHX0hETUlUWF9EUlZfSU1QX01BU0sp Owo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONCwgMHgyOCwgUkdfSERN SVRYX1JFU0VSVkVfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9D T04wLCAoMHhhIDw8IFJHX0hETUlUWF9EUlZfSUJJQVMpLAo+ICsJCQkgIFJHX0hETUlUWF9EUlZf SUJJQVNfTUFTSyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGxvbmcgbXRrX2hk bWlfcGxsX3JvdW5kX3JhdGUoc3RydWN0IGNsa19odyAqaHcsIHVuc2lnbmVkIGxvbmcgcmF0ZSwK PiArCQkJCSAgICB1bnNpZ25lZCBsb25nICpwYXJlbnRfcmF0ZSkKPiArewo+ICsJc3RydWN0IG10 a19oZG1pX3BoeSAqaGRtaV9waHkgPSB0b19tdGtfaGRtaV9wbGwoaHcpOwo+ICsKPiArCWhkbWlf cGh5LT5wbGxfcmF0ZSA9IHJhdGU7Cj4gKwlyZXR1cm4gcmF0ZTsKPiArfQo+ICsKPiArc3RhdGlj IHVuc2lnbmVkIGxvbmcgbXRrX2hkbWlfcGxsX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LAo+ICsJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCj4gK3sKPiArCXN0cnVj dCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gdG9fbXRrX2hkbWlfcGxsKGh3KTsKPiArCj4gKwly ZXR1cm4gaGRtaV9waHktPnBsbF9yYXRlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGNsa19vcHMgbXRrX2hkbWlfcGh5X3BsbF9vcHMgPSB7Cj4gKwkuZW5hYmxlID0gbXRrX2hkbWlf cGxsX2VuYWJsZSwKPiArCS5kaXNhYmxlID0gbXRrX2hkbWlfcGxsX2Rpc2FibGUsCj4gKwkuc2V0 X3JhdGUgPSBtdGtfaGRtaV9wbGxfc2V0X3JhdGUsCj4gKwkucm91bmRfcmF0ZSA9IG10a19oZG1p X3BsbF9yb3VuZF9yYXRlLAo+ICsJLnJlY2FsY19yYXRlID0gbXRrX2hkbWlfcGxsX3JlY2FsY19y YXRlLAo+ICt9Owo+ICsKPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKHN0 cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5KQo+ICt7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayho ZG1pX3BoeSwgSERNSV9DT043LCBSR19IVFBMTF9BVVRPS19FTiwKPiArCQkJICBSR19IVFBMTF9B VVRPS19FTik7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBS R19IVFBMTF9STEhfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09O NiwgKDB4MyA8PCBSR19IVFBMTF9QT1NESVYpLAo+ICsJCQkgIFJHX0hUUExMX1BPU0RJVl9NQVNL KTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIFJHX0hETUlUWF9F Tl9NQklBUywKPiArCQkJICBSR19IRE1JVFhfRU5fTUJJQVMpOwo+ICsJdXNsZWVwX3JhbmdlKDgw LCAxMDApOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09ONiwgUkdfSFRQ TExfRU4sIFJHX0hUUExMX0VOKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1J X0NPTjIsIFJHX0hETUlUWF9FTl9UWF9DS0xETywKPiArCQkJICBSR19IRE1JVFhfRU5fVFhfQ0tM RE8pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMCwgKDB4ZiA8PCBS R19IRE1JVFhfRU5fU0xETyksCj4gKwkJCSAgUkdfSERNSVRYX0VOX1NMRE9fTUFTSyk7Cj4gKwl1 c2xlZXBfcmFuZ2UoODAsIDEwMCk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERN SV9DT04yLCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOLAo+ICsJCQkgIFJHX0hETUlUWF9NQklBU19M UEZfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgUkdfSERN SVRYX0VOX1RYX1BPU0RJViwKPiArCQkJICBSR19IRE1JVFhfRU5fVFhfUE9TRElWKTsKPiArCW10 a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VO X1NFUiksCj4gKwkJCSAgUkdfSERNSVRYX0VOX1NFUl9NQVNLKTsKPiArCW10a19oZG1pX3BsbF9t YXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsICgweGYgPDwgUkdfSERNSVRYX0VOX1BSRUQpLAo+ICsJ CQkgIFJHX0hETUlUWF9FTl9QUkVEX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9w aHksIEhETUlfQ09OMCwgKDB4ZiA8PCBSR19IRE1JVFhfRU5fRFJWKSwKPiArCQkJICBSR19IRE1J VFhfRU5fRFJWX01BU0spOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAxMDApOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBtdGtfaGRtaV9waHlfZGlzYWJsZV90bWRzKHN0cnVjdCBtdGtfaGRtaV9waHkg KmhkbWlfcGh5KQo+ICt7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04w LCAwLCBSR19IRE1JVFhfRU5fRFJWX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9w aHksIEhETUlfQ09OMCwgMCwgUkdfSERNSVRYX0VOX1BSRURfTUFTSyk7Cj4gKwltdGtfaGRtaV9w bGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04wLCAwLCBSR19IRE1JVFhfRU5fU0VSX01BU0spOwo+ ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwgUkdfSERNSVRYX0VO X1RYX1BPU0RJVik7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT04yLCAw LCBSR19IRE1JVFhfTUJJQVNfTFBGX0VOKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKPiAr CW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjAsIDAsIFJHX0hETUlUWF9FTl9T TERPX01BU0spOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHksIEhETUlfQ09OMiwgMCwg UkdfSERNSVRYX0VOX1RYX0NLTERPKTsKPiArCW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBI RE1JX0NPTjYsIDAsIFJHX0hUUExMX0VOKTsKPiArCXVzbGVlcF9yYW5nZSg4MCwgMTAwKTsKPiAr CW10a19oZG1pX3BsbF9tYXNrKGhkbWlfcGh5LCBIRE1JX0NPTjIsIDAsIFJHX0hETUlUWF9FTl9N QklBUyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9DT042LCAwLCBSR19I VFBMTF9QT1NESVZfTUFTSyk7Cj4gKwltdGtfaGRtaV9wbGxfbWFzayhoZG1pX3BoeSwgSERNSV9D T042LCAwLCBSR19IVFBMTF9STEhfRU4pOwo+ICsJbXRrX2hkbWlfcGxsX21hc2soaGRtaV9waHks IEhETUlfQ09ONywgMCwgUkdfSFRQTExfQVVUT0tfRU4pOwo+ICsJdXNsZWVwX3JhbmdlKDgwLCAx MDApOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19oZG1pX3BoeV9wb3dlcl9vbihzdHJ1Y3Qg cGh5ICpwaHkpCj4gK3sKPiArCXN0cnVjdCBtdGtfaGRtaV9waHkgKmhkbWlfcGh5ID0gcGh5X2dl dF9kcnZkYXRhKHBoeSk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShoZG1pX3BoeS0+cGxsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4g Kwo+ICsJbXRrX2hkbWlfcGh5X2VuYWJsZV90bWRzKGhkbWlfcGh5KTsKPiArCj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBw aHkgKnBoeSkKPiArewo+ICsJc3RydWN0IG10a19oZG1pX3BoeSAqaGRtaV9waHkgPSBwaHlfZ2V0 X2RydmRhdGEocGh5KTsKPiArCj4gKwltdGtfaGRtaV9waHlfZGlzYWJsZV90bWRzKGhkbWlfcGh5 KTsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pX3BoeS0+cGxsKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfb3BzIG10a19oZG1pX3Bo eV9kZXZfb3BzID0gewo+ICsJLnBvd2VyX29uID0gbXRrX2hkbWlfcGh5X3Bvd2VyX29uLAo+ICsJ LnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYsCj4gKwkub3duZXIgPSBUSElTX01P RFVMRSwKPiArfTsKPiArCj4gK3N0cnVjdCBtdGtfaGRtaV9waHlfY29uZiBtdGtfaGRtaV9waHlf MjcwMV9jb25mID0gewo+ICsJLnR6X2VuYWJsZWQgPSBmYWxzZSwKPiArCS5oZG1pX3BoeV9jbGtf b3BzID0gJm10a19oZG1pX3BoeV9wbGxfb3BzLAo+ICsJLmhkbWlfcGh5X2Rldl9vcHMgPSAmbXRr X2hkbWlfcGh5X2Rldl9vcHMsCj4gK307Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJDaHVuaHVpIERh aSA8Y2h1bmh1aS5kYWlAbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1l ZGlhVGVrIEhETUkgUEhZIERyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5 LmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX210ODE3M19oZG1pX3BoeS5jCj4gaW5k ZXggNTFjYjljZmI2NjQ2Li4xYTM1ZmRkNDA1ZDggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL21lZGlhdGVrL210a19tdDgxNzNfaGRtaV9waHkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfbXQ4MTczX2hkbWlfcGh5LmMKPiBAQCAtMjEsNiArMjEsNyBAQAo+ICAj aW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVkZSAibXRrX2hkbWku aCIKPiAgCj4gICNkZWZpbmUgSERNSV9DT04wCQkweDAwCj4gICNkZWZpbmUgUkdfSERNSVRYX1BM TF9FTgkJQklUKDMxKQo+IEBAIC0xMjMsMjAgKzEyNCw2IEBACj4gICNkZWZpbmUgUkdTX0hETUlU WF81VDFfRURHCQkoMHhmIDw8IDQpCj4gICNkZWZpbmUgUkdTX0hETUlUWF9QTFVHX1RTVAkJQklU KDApCj4gIAo+IC1zdHJ1Y3QgbXRrX2hkbWlfcGh5IHsKPiAtCXZvaWQgX19pb21lbSAqcmVnczsK PiAtCXN0cnVjdCBkZXZpY2UgKmRldjsKPiAtCXN0cnVjdCBjbGsgKnBsbDsKPiAtCXN0cnVjdCBj bGtfaHcgcGxsX2h3Owo+IC0JdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsKPiAtCXU4IGRydl9pbXBf Y2xrOwo+IC0JdTggZHJ2X2ltcF9kMjsKPiAtCXU4IGRydl9pbXBfZDE7Cj4gLQl1OCBkcnZfaW1w X2QwOwo+IC0JdTMyIGliaWFzOwo+IC0JdTMyIGliaWFzX3VwOwo+IC19Owo+IC0KPiAgc3RhdGlj IGNvbnN0IHU4IFBSRURJVlszXVs0XSA9IHsKPiAgCXsweDAsIDB4MCwgMHgwLCAweDB9LAkvKiAy N01oeiAqLwo+ICAJezB4MSwgMHgxLCAweDEsIDB4MX0sCS8qIDc0TWh6ICovCj4gQEAgLTM2Nyw3 ICszNTQsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBtdGtfaGRtaV9wbGxfcmVjYWxjX3JhdGUo c3RydWN0IGNsa19odyAqaHcsCj4gIAlyZXR1cm4gaGRtaV9waHktPnBsbF9yYXRlOwo+ICB9Cj4g IAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgbXRrX2hkbWlfcGxsX29wcyA9IHsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIG10a19oZG1pX3BoeV9wbGxfb3BzID0gewo+ICAJ LnByZXBhcmUgPSBtdGtfaGRtaV9wbGxfcHJlcGFyZSwKPiAgCS51bnByZXBhcmUgPSBtdGtfaGRt aV9wbGxfdW5wcmVwYXJlLAo+ICAJLnNldF9yYXRlID0gbXRrX2hkbWlfcGxsX3NldF9yYXRlLAo+ IEBAIC00MTQsMTE4ICs0MDEsMTYgQEAgc3RhdGljIGludCBtdGtfaGRtaV9waHlfcG93ZXJfb2Zm KHN0cnVjdCBwaHkgKnBoeSkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgY29uc3Qg c3RydWN0IHBoeV9vcHMgbXRrX2hkbWlfcGh5X29wcyA9IHsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBwaHlfb3BzIG10a19oZG1pX3BoeV9kZXZfb3BzID0gewo+ICAJLnBvd2VyX29uID0gbXRrX2hk bWlfcGh5X3Bvd2VyX29uLAo+ICAJLnBvd2VyX29mZiA9IG10a19oZG1pX3BoeV9wb3dlcl9vZmYs Cj4gIAkub3duZXIgPSBUSElTX01PRFVMRSwKPiAgfTsKPiAgCj4gLXN0YXRpYyBpbnQgbXRrX2hk bWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gLXsKPiAtCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gLQlzdHJ1Y3QgbXRrX2hkbWlfcGh5ICpoZG1p X3BoeTsKPiAtCXN0cnVjdCByZXNvdXJjZSAqbWVtOwo+IC0Jc3RydWN0IGNsayAqcmVmX2NsazsK PiAtCWNvbnN0IGNoYXIgKnJlZl9jbGtfbmFtZTsKPiAtCXN0cnVjdCBjbGtfaW5pdF9kYXRhIGNs a19pbml0ID0gewo+IC0JCS5vcHMgPSAmbXRrX2hkbWlfcGxsX29wcywKPiAtCQkubnVtX3BhcmVu dHMgPSAxLAo+IC0JCS5wYXJlbnRfbmFtZXMgPSAoY29uc3QgY2hhciAqIGNvbnN0ICopJnJlZl9j bGtfbmFtZSwKPiAtCQkuZmxhZ3MgPSBDTEtfU0VUX1JBVEVfUEFSRU5UIHwgQ0xLX1NFVF9SQVRF X0dBVEUsCj4gLQl9Owo+IC0Jc3RydWN0IHBoeSAqcGh5Owo+IC0Jc3RydWN0IHBoeV9wcm92aWRl ciAqcGh5X3Byb3ZpZGVyOwo+IC0JaW50IHJldDsKPiAtCj4gLQloZG1pX3BoeSA9IGRldm1fa3ph bGxvYyhkZXYsIHNpemVvZigqaGRtaV9waHkpLCBHRlBfS0VSTkVMKTsKPiAtCWlmICghaGRtaV9w aHkpCj4gLQkJcmV0dXJuIC1FTk9NRU07Cj4gLQo+IC0JbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiAtCWhkbWlfcGh5LT5yZWdzID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgbWVtKTsKPiAtCWlmIChJU19FUlIoaGRtaV9waHktPnJlZ3Mp KSB7Cj4gLQkJcmV0ID0gUFRSX0VSUihoZG1pX3BoeS0+cmVncyk7Cj4gLQkJZGV2X2VycihkZXYs ICJGYWlsZWQgdG8gZ2V0IG1lbW9yeSByZXNvdXJjZTogJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJu IHJldDsKPiAtCX0KPiAtCj4gLQlyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBsbF9yZWYi KTsKPiAtCWlmIChJU19FUlIocmVmX2NsaykpIHsKPiAtCQlyZXQgPSBQVFJfRVJSKHJlZl9jbGsp Owo+IC0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgUExMIHJlZmVyZW5jZSBj bG9jazogJWRcbiIsCj4gLQkJCXJldCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCXJlZl9j bGtfbmFtZSA9IF9fY2xrX2dldF9uYW1lKHJlZl9jbGspOwo+IC0KPiAtCXJldCA9IG9mX3Byb3Bl cnR5X3JlYWRfc3RyaW5nKGRldi0+b2Zfbm9kZSwgImNsb2NrLW91dHB1dC1uYW1lcyIsCj4gLQkJ CQkgICAgICAmY2xrX2luaXQubmFtZSk7Cj4gLQlpZiAocmV0IDwgMCkgewo+IC0JCWRldl9lcnIo ZGV2LCAiRmFpbGVkIHRvIHJlYWQgY2xvY2stb3V0cHV0LW5hbWVzOiAlZFxuIiwgcmV0KTsKPiAt CQlyZXR1cm4gcmV0Owo+IC0JfQo+IC0KPiAtCWhkbWlfcGh5LT5wbGxfaHcuaW5pdCA9ICZjbGtf aW5pdDsKPiAtCWhkbWlfcGh5LT5wbGwgPSBkZXZtX2Nsa19yZWdpc3RlcihkZXYsICZoZG1pX3Bo eS0+cGxsX2h3KTsKPiAtCWlmIChJU19FUlIoaGRtaV9waHktPnBsbCkpIHsKPiAtCQlyZXQgPSBQ VFJfRVJSKGhkbWlfcGh5LT5wbGwpOwo+IC0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlZ2lz dGVyIFBMTDogJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlyZXQg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJtZWRpYXRlayxpYmlhcyIsCj4g LQkJCQkgICAmaGRtaV9waHktPmliaWFzKTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4gLQkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBpYmlhczogJWRcbiIsIHJldCk7Cj4gLQkJcmV0 dXJuIHJldDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9m X25vZGUsICJtZWRpYXRlayxpYmlhc191cCIsCj4gLQkJCQkgICAmaGRtaV9waHktPmliaWFzX3Vw KTsKPiAtCWlmIChyZXQgPCAwKSB7Cj4gLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRv IGdldCBpYmlhcyB1cDogJWRcbiIsIHJldCk7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAtCj4g LQlkZXZfaW5mbyhkZXYsICJVc2luZyBkZWZhdWx0IFRYIERSViBpbXBlZGFuY2U6IDQuMmsvMzZc biIpOwo+IC0JaGRtaV9waHktPmRydl9pbXBfY2xrID0gMHgzMDsKPiAtCWhkbWlfcGh5LT5kcnZf aW1wX2QyID0gMHgzMDsKPiAtCWhkbWlfcGh5LT5kcnZfaW1wX2QxID0gMHgzMDsKPiAtCWhkbWlf cGh5LT5kcnZfaW1wX2QwID0gMHgzMDsKPiAtCj4gLQlwaHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2 LCBOVUxMLCAmbXRrX2hkbWlfcGh5X29wcyk7Cj4gLQlpZiAoSVNfRVJSKHBoeSkpIHsKPiAtCQlk ZXZfZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgSERNSSBQSFlcbiIpOwo+IC0JCXJldHVybiBQ VFJfRVJSKHBoeSk7Cj4gLQl9Cj4gLQlwaHlfc2V0X2RydmRhdGEocGh5LCBoZG1pX3BoeSk7Cj4g LQo+IC0JcGh5X3Byb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBv Zl9waHlfc2ltcGxlX3hsYXRlKTsKPiAtCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkKPiAtCQly ZXR1cm4gUFRSX0VSUihwaHlfcHJvdmlkZXIpOwo+IC0KPiAtCWhkbWlfcGh5LT5kZXYgPSBkZXY7 Cj4gLQlyZXR1cm4gb2ZfY2xrX2FkZF9wcm92aWRlcihkZXYtPm9mX25vZGUsIG9mX2Nsa19zcmNf c2ltcGxlX2dldCwKPiAtCQkJCSAgIGhkbWlfcGh5LT5wbGwpOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW50IG10a19oZG1pX3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiAt ewo+IC0JcmV0dXJuIDA7Cj4gLX0KPiAtCj4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIG10a19oZG1pX3BoeV9tYXRjaFtdID0gewo+IC0JeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxtdDgxNzMtaGRtaS1waHkiLCB9LAo+IC0Je30sCj4gLX07Cj4gLQo+IC1zdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19oZG1pX3BoeV9kcml2ZXIgPSB7Cj4gLQkucHJvYmUgPSBtdGtfaGRtaV9w aHlfcHJvYmUsCj4gLQkucmVtb3ZlID0gbXRrX2hkbWlfcGh5X3JlbW92ZSwKPiAtCS5kcml2ZXIg PSB7Cj4gLQkJLm5hbWUgPSAibWVkaWF0ZWstaGRtaS1waHkiLAo+IC0JCS5vZl9tYXRjaF90YWJs ZSA9IG10a19oZG1pX3BoeV9tYXRjaCwKPiAtCX0sCj4gK3N0cnVjdCBtdGtfaGRtaV9waHlfY29u ZiBtdGtfaGRtaV9waHlfODE3M19jb25mID0gewo+ICsJLnR6X2VuYWJsZWQgPSB0cnVlLAo+ICsJ LmhkbWlfcGh5X2Nsa19vcHMgPSAmbXRrX2hkbWlfcGh5X3BsbF9vcHMsCj4gKwkuaGRtaV9waHlf ZGV2X29wcyA9ICZtdGtfaGRtaV9waHlfZGV2X29wcywKPiAgfTsKPiAgCj4gIE1PRFVMRV9BVVRI T1IoIkppZSBRaXUgPGppZS5xaXVAbWVkaWF0ZWsuY29tPiIpOwoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=