From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christian Gmeiner Subject: [PATCH 1/2] libdrm: add etnaviv drm support Date: Tue, 30 Aug 2016 09:14:50 +0200 Message-ID: <1472541291-8770-2-git-send-email-christian.gmeiner@gmail.com> References: <1472541291-8770-1-git-send-email-christian.gmeiner@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0BDB56E362 for ; Tue, 30 Aug 2016 07:16:03 +0000 (UTC) Received: by mail-wm0-x241.google.com with SMTP id i138so1803267wmf.3 for ; Tue, 30 Aug 2016 00:16:02 -0700 (PDT) In-Reply-To: <1472541291-8770-1-git-send-email-christian.gmeiner@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhlIGV0bmF2aXYgYXV0aG9ycyA8ZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9y Zz4KCkFkZCB0aGUgbGliZHJtX2V0bmF2aXYgaGVscGVyIGxpYnJhcnkgdG8gZW5jYXBzdWxhdGUg ZXRuYXZpdi1zcGVjaWZpYyBpbnRlcmZhY2VzIHRvIHRoZSBEUk0uCgpTaWduZWQtb2ZmLWJ5OiBD aHJpc3RpYW4gR21laW5lciA8Y2hyaXN0aWFuLmdtZWluZXJAZ21haWwuY29tPgpTaWduZWQtb2Zm LWJ5OiBMdWNhcyBTdGFjaCA8bC5zdGFjaEBwZW5ndXRyb25peC5kZT4KLS0tCiAuZ2l0aWdub3Jl ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIE1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAg fCAgIDYgKwogY29uZmlndXJlLmFjICAgICAgICAgICAgICAgICB8ICAxNiArKwogZXRuYXZpdi9B bmRyb2lkLm1rICAgICAgICAgICB8ICAxOCArKysKIGV0bmF2aXYvTWFrZWZpbGUuYW0gICAgICAg ICAgfCAgMjcgKysrKwogZXRuYXZpdi9NYWtlZmlsZS5zb3VyY2VzICAgICB8ICAxMiArKwogZXRu YXZpdi9ldG5hdml2LXN5bWJvbC1jaGVjayB8ICA0NSArKysrKysKIGV0bmF2aXYvZXRuYXZpdl9i by5jICAgICAgICAgfCAzNDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogZXRuYXZpdi9ldG5hdml2X2JvX2NhY2hlLmMgICB8IDE5NiArKysrKysrKysrKysrKysr KysrKysrKysKIGV0bmF2aXYvZXRuYXZpdl9jbWRfc3RyZWFtLmMgfCAyNDMgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBldG5hdml2L2V0bmF2aXZfZGV2aWNlLmMgICAgIHwgIDk2ICsr KysrKysrKysrKwogZXRuYXZpdi9ldG5hdml2X2RybS5oICAgICAgICB8IDIyNSArKysrKysrKysr KysrKysrKysrKysrKysrKysrCiBldG5hdml2L2V0bmF2aXZfZHJtaWYuaCAgICAgIHwgMTg4ICsr KysrKysrKysrKysrKysrKysrKysrCiBldG5hdml2L2V0bmF2aXZfZ3B1LmMgICAgICAgIHwgMTc1 ICsrKysrKysrKysrKysrKysrKysrKysKIGV0bmF2aXYvZXRuYXZpdl9waXBlLmMgICAgICAgfCAg NzggKysrKysrKysrKwogZXRuYXZpdi9ldG5hdml2X3ByaXYuaCAgICAgICB8IDIwMCArKysrKysr KysrKysrKysrKysrKysrKysrCiBldG5hdml2L2xpYmRybV9ldG5hdml2LnBjLmluIHwgIDExICsr CiAxNyBmaWxlcyBjaGFuZ2VkLCAxODg0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBldG5hdml2L0FuZHJvaWQubWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBldG5hdml2L01ha2VmaWxl LmFtCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXRuYXZpdi9NYWtlZmlsZS5zb3VyY2VzCiBjcmVhdGUg bW9kZSAxMDA3NTUgZXRuYXZpdi9ldG5hdml2LXN5bWJvbC1jaGVjawogY3JlYXRlIG1vZGUgMTAw NjQ0IGV0bmF2aXYvZXRuYXZpdl9iby5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXRuYXZpdi9ldG5h dml2X2JvX2NhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBldG5hdml2L2V0bmF2aXZfY21kX3N0 cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXRuYXZpdi9ldG5hdml2X2RldmljZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZXRuYXZpdi9ldG5hdml2X2RybS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZXRuYXZpdi9ldG5hdml2X2RybWlmLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBldG5hdml2L2V0bmF2 aXZfZ3B1LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBldG5hdml2L2V0bmF2aXZfcGlwZS5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZXRuYXZpdi9ldG5hdml2X3ByaXYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IGV0bmF2aXYvbGliZHJtX2V0bmF2aXYucGMuaW4KCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIv LmdpdGlnbm9yZQppbmRleCBhNDQ1NjZmLi4zMjI2YjNhIDEwMDY0NAotLS0gYS8uZ2l0aWdub3Jl CisrKyBiLy5naXRpZ25vcmUKQEAgLTU3LDYgKzU3LDcgQEAgbGliZHJtX2V4eW5vcy5wYwogbGli ZHJtX2ZyZWVkcmVuby5wYwogbGliZHJtX2FtZGdwdS5wYwogbGliZHJtX3ZjNC5wYworbGliZHJt X2V0bmF2aXYucGMKIGxpYmttcy5wYwogbGlidG9vbAogbHRtYWluLnNoCmRpZmYgLS1naXQgYS9N YWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IDJjZWIzNTIuLjYzMGVkYzQgMTAwNjQ0Ci0t LSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0zNiw2ICszNiw3IEBAIEFNX0RJ U1RDSEVDS19DT05GSUdVUkVfRkxBR1MgPSBcCiAJLS1lbmFibGUtZnJlZWRyZW5vIFwKIAktLWVu YWJsZS1mcmVlZHJlbm8ta2dzbFwKIAktLWVuYWJsZS10ZWdyYS1leHBlcmltZW50YWwtYXBpIFwK KwktLWVuYWJsZS1ldG5hdml2LWV4cGVyaW1lbnRhbC1hcGkgXAogCS0tZW5hYmxlLWluc3RhbGwt dGVzdC1wcm9ncmFtcyBcCiAJLS1lbmFibGUtY2Fpcm8tdGVzdHMgXAogCS0tZW5hYmxlLW1hbnBh Z2VzIFwKQEAgLTg0LDYgKzg1LDEwIEBAIGlmIEhBVkVfVkM0CiBWQzRfU1VCRElSID0gdmM0CiBl bmRpZgogCitpZiBIQVZFX0VUTkFWSVYKK0VUTkFWSVZfU1VCRElSID0gZXRuYXZpdgorZW5kaWYK KwogaWYgQlVJTERfTUFOUEFHRVMKIGlmIEhBVkVfTUFOUEFHRVNfU1RZTEVTSEVFVAogTUFOX1NV QkRJUiA9IG1hbgpAQCAtMTAyLDYgKzEwNyw3IEBAIFNVQkRJUlMgPSBcCiAJJChGUkVFRFJFTk9f U1VCRElSKSBcCiAJJChURUdSQV9TVUJESVIpIFwKIAkkKFZDNF9TVUJESVIpIFwKKwkkKEVUTkFW SVZfU1VCRElSKSBcCiAJdGVzdHMgXAogCSQoTUFOX1NVQkRJUikKIApkaWZmIC0tZ2l0IGEvY29u ZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IGUzMDQ4YzcuLjY0ZjNlNmMgMTAwNjQ0Ci0t LSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTEzMiw2ICsxMzIsMTEgQEAg QUNfQVJHX0VOQUJMRSh2YzQsCiAJICAgICAgW0VuYWJsZSBzdXBwb3J0IGZvciB2YzQncyBBUEkg KGRlZmF1bHQ6IGF1dG8sIGVuYWJsZWQgb24gYXJtKV0pLAogCSAgICAgIFtWQzQ9JGVuYWJsZXZh bF0sIFtWQzQ9YXV0b10pCiAKK0FDX0FSR19FTkFCTEUoZXRuYXZpdi1leHBlcmltZW50YWwtYXBp LAorCSAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1ldG5hdml2LWV4cGVyaW1lbnRhbC1h cGldLAorCSAgICAgIFtFbmFibGUgc3VwcG9ydCBmb3IgZXRuYXZpdidzIGV4cGVyaW1lbnRhbCBB UEkgKGRlZmF1bHQ6IGRpc2FibGVkKV0pLAorCSAgICAgIFtFVE5BVklWPSRlbmFibGV2YWxdLCBb RVROQVZJVj1ub10pCisKIEFDX0FSR19FTkFCTEUoaW5zdGFsbC10ZXN0LXByb2dyYW1zLAogCQkg IEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1pbnN0YWxsLXRlc3QtcHJvZ3JhbXNdLAogCQkgIFtJ bnN0YWxsIHRlc3QgcHJvZ3JhbXMgKGRlZmF1bHQ6IG5vKV0pLApAQCAtMjc0LDYgKzI3OSw5IEBA IGlmIHRlc3QgIngkZHJtX2N2X2F0b21pY19wcmltaXRpdmVzIiA9ICJ4bm9uZSI7IHRoZW4KIAog CUxJQkRSTV9BVE9NSUNTX05PVF9GT1VORF9NU0coJFRFR1JBLCB0ZWdyYSwgTlZJRElBIFRlZ3Jh LCB0ZWdyYS1leHBlcmltZW50YWwtYXBpKQogCVRFR1JBPW5vCisKKwlMSUJEUk1fQVRPTUlDU19O T1RfRk9VTkRfTVNHKCRFVE5BVklWLCBldG5hdml2LCBWaXZhbnRlLCBldG5hdml2LWV4cGVyaW1l bnRhbC1hcGkpCisJRVROQVZJVj1ubwogZWxzZQogCWlmIHRlc3QgIngkSU5URUwiID0geGF1dG87 IHRoZW4KIAkJY2FzZSAkaG9zdF9jcHUgaW4KQEAgLTQxMyw2ICs0MjEsMTEgQEAgaWYgdGVzdCAi eCRWQzQiID0geHllczsgdGhlbgogCUFDX0RFRklORShIQVZFX1ZDNCwgMSwgW0hhdmUgVkM0IHN1 cHBvcnRdKQogZmkKIAorQU1fQ09ORElUSU9OQUwoSEFWRV9FVE5BVklWLCBbdGVzdCAieCRFVE5B VklWIiA9IHh5ZXNdKQoraWYgdGVzdCAieCRFVE5BVklWIiA9IHh5ZXM7IHRoZW4KKwlBQ19ERUZJ TkUoSEFWRV9FVE5BVklWLCAxLCBbSGF2ZSBldG5hdml2IHN1cHBvcnRdKQorZmkKKwogQU1fQ09O RElUSU9OQUwoSEFWRV9JTlNUQUxMX1RFU1RTLCBbdGVzdCAieCRJTlNUQUxMX1RFU1RTIiA9IHh5 ZXNdKQogaWYgdGVzdCAieCRJTlNUQUxMX1RFU1RTIiA9IHh5ZXM7IHRoZW4KIAlBQ19ERUZJTkUo SEFWRV9JTlNUQUxMX1RFU1RTLCAxLCBbSW5zdGFsbCB0ZXN0IHByb2dyYW1zXSkKQEAgLTUyNCw2 ICs1MzcsOCBAQCBBQ19DT05GSUdfRklMRVMoWwogCXRlZ3JhL2xpYmRybV90ZWdyYS5wYwogCXZj NC9NYWtlZmlsZQogCXZjNC9saWJkcm1fdmM0LnBjCisJZXRuYXZpdi9NYWtlZmlsZQorCWV0bmF2 aXYvbGliZHJtX2V0bmF2aXYucGMKIAl0ZXN0cy9NYWtlZmlsZQogCXRlc3RzL21vZGVwcmludC9N YWtlZmlsZQogCXRlc3RzL21vZGV0ZXN0L01ha2VmaWxlCkBAIC01NTUsNCArNTcwLDUgQEAgZWNo byAiICBFWFlOT1MgQVBJICAgICAkRVhZTk9TIgogZWNobyAiICBGcmVlZHJlbm8gQVBJICAkRlJF RURSRU5PIChrZ3NsOiAkRlJFRURSRU5PX0tHU0wpIgogZWNobyAiICBUZWdyYSBBUEkgICAgICAk VEVHUkEiCiBlY2hvICIgIFZDNCBBUEkgICAgICAgICRWQzQiCitlY2hvICIgIEV0bmF2aXYgQVBJ ICAgICRFVE5BVklWIgogZWNobyAiIgpkaWZmIC0tZ2l0IGEvZXRuYXZpdi9BbmRyb2lkLm1rIGIv ZXRuYXZpdi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEz YTIyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9ldG5hdml2L0FuZHJvaWQubWsKQEAgLTAsMCArMSwx OCBAQAorTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMp CisKKyMgSW1wb3J0IHZhcmlhYmxlcyBMSUJEUk1fRVROQVZJVl9GSUxFUywgTElCRFJNX0VUTkFW SVZfSF9GSUxFUworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL01ha2VmaWxlLnNvdXJjZXMKKworTE9D QUxfTU9EVUxFIDo9IGxpYmRybV9ldG5hdml2CitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25h bAorCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmRybQorCitMT0NBTF9TUkNfRklMRVMg Oj0gJChwYXRzdWJzdCAlLmgsICwgJChMSUJEUk1fRVROQVZJVl9GSUxFUykpCitMT0NBTF9FWFBP UlRfQ19JTkNMVURFX0RJUlMgOj0gJChMT0NBTF9QQVRIKQorCitMT0NBTF9DRkxBR1MgOj0gXAor CS1ESEFWRV9MSUJEUk1fQVRPTUlDX1BSSU1JVElWRVM9MQorCitpbmNsdWRlICQoQlVJTERfU0hB UkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9ldG5hdml2L01ha2VmaWxlLmFtIGIvZXRuYXZpdi9N YWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQwZTU2Ci0t LSAvZGV2L251bGwKKysrIGIvZXRuYXZpdi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDI3IEBACitB VVRPTUFLRV9PUFRJT05TPXN1YmRpci1vYmplY3RzCitpbmNsdWRlIE1ha2VmaWxlLnNvdXJjZXMK KworQU1fQ0ZMQUdTID0gXAorCSQoV0FSTl9DRkxBR1MpIFwKKwktSSQodG9wX3NyY2RpcikgXAor CSQoUFRIUkVBRFNUVUJTX0NGTEFHUykgXAorCS1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2RybQor CitsaWJkcm1fZXRuYXZpdl9sYWRpciA9ICQobGliZGlyKQorbGliZHJtX2V0bmF2aXZfbGFfTFRM SUJSQVJJRVMgPSBsaWJkcm1fZXRuYXZpdi5sYQorbGliZHJtX2V0bmF2aXZfbGFfTERGTEFHUyA9 IC12ZXJzaW9uLW51bWJlciAwOjA6MCAtbm8tdW5kZWZpbmVkCitsaWJkcm1fZXRuYXZpdl9sYV9M SUJBREQgPSBcCisJLi4vbGliZHJtLmxhIFwKKwlAUFRIUkVBRFNUVUJTX0xJQlNAIFwKKwlAQ0xP Q0tfTElCQAorCitsaWJkcm1fZXRuYXZpdl9sYV9TT1VSQ0VTID0gJChMSUJEUk1fRVROQVZJVl9G SUxFUykKKworbGliZHJtX2V0bmF2aXZpbmNsdWRlZGlyID0gJHtpbmNsdWRlZGlyfS9saWJkcm0K K2xpYmRybV9ldG5hdml2aW5jbHVkZV9IRUFERVJTID0gJChMSUJEUk1fRVROQVZJVl9IX0ZJTEVT KQorCitwa2djb25maWdkaXIgPSBAcGtnY29uZmlnZGlyQAorcGtnY29uZmlnX0RBVEEgPSBsaWJk cm1fZXRuYXZpdi5wYworCitURVNUUyA9IGV0bmF2aXYtc3ltYm9sLWNoZWNrCitFWFRSQV9ESVNU ID0gJChURVNUUykKZGlmZiAtLWdpdCBhL2V0bmF2aXYvTWFrZWZpbGUuc291cmNlcyBiL2V0bmF2 aXYvTWFrZWZpbGUuc291cmNlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41 MjU4MDU2Ci0tLSAvZGV2L251bGwKKysrIGIvZXRuYXZpdi9NYWtlZmlsZS5zb3VyY2VzCkBAIC0w LDAgKzEsMTIgQEAKK0xJQkRSTV9FVE5BVklWX0ZJTEVTIDo9IFwKKwlldG5hdml2X2RldmljZS5j IFwKKwlldG5hdml2X2dwdS5jIFwKKwlldG5hdml2X2JvLmMgXAorCWV0bmF2aXZfYm9fY2FjaGUu YyBcCisJZXRuYXZpdl9waXBlLmMgXAorCWV0bmF2aXZfY21kX3N0cmVhbS5jIFwKKwlldG5hdml2 X2RybS5oIFwKKwlldG5hdml2X3ByaXYuaAorCitMSUJEUk1fRVROQVZJVl9IX0ZJTEVTIDo9IFwK KwlldG5hdml2X2RybWlmLmgKZGlmZiAtLWdpdCBhL2V0bmF2aXYvZXRuYXZpdi1zeW1ib2wtY2hl Y2sgYi9ldG5hdml2L2V0bmF2aXYtc3ltYm9sLWNoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu ZGV4IDAwMDAwMDAuLjc3OTUwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9ldG5hdml2L2V0bmF2aXYt c3ltYm9sLWNoZWNrCkBAIC0wLDAgKzEsNDUgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhlIGZvbGxv d2luZyBzeW1ib2xzIChwYXN0IHRoZSBmaXJzdCBmaXZlKSBhcmUgdGFrZW4gZnJvbSB0aGUgcHVi bGljIGhlYWRlcnMuCisjIEEgbGlzdCBvZiB0aGUgbGF0dGVyIHNob3VsZCBiZSBhdmFpbGFibGUg TWFrZWZpbGUuc291cmNlcy9MSUJEUk1fRlJFRURSRU5PX0hfRklMRVMKKworRlVOQ1M9JChubSAt RCAtLWZvcm1hdD1ic2QgLS1kZWZpbmVkLW9ubHkgJHsxLS5saWJzL2xpYmRybV9ldG5hdml2LnNv fSB8IGF3ayAne3ByaW50ICQzfSd8IHdoaWxlIHJlYWQgZnVuYzsgZG8KKyggZ3JlcCAtcSAiXiRm dW5jJCIgfHwgZWNobyAkZnVuYyApICA8PEVPRgorX19ic3Nfc3RhcnQKK19lZGF0YQorX2VuZAor X2ZpbmkKK19pbml0CitldG5hX2RldmljZV9uZXcKK2V0bmFfZGV2aWNlX3JlZgorZXRuYV9kZXZp Y2VfZGVsCitldG5hX2dwdV9uZXcKK2V0bmFfZ3B1X2RlbAorZXRuYV9ncHVfZ2V0X3BhcmFtCitl dG5hX3BpcGVfbmV3CitldG5hX3BpcGVfZGVsCitldG5hX3BpcGVfd2FpdAorZXRuYV9ib19uZXcK K2V0bmFfYm9fZnJvbV9oYW5kbGUKK2V0bmFfYm9fZnJvbV9uYW1lCitldG5hX2JvX2Zyb21fZG1h YnVmCitldG5hX2JvX3JlZgorZXRuYV9ib19kZWwKK2V0bmFfYm9fZ2V0X25hbWUKK2V0bmFfYm9f aGFuZGxlCitldG5hX2JvX2RtYWJ1ZgorZXRuYV9ib19zaXplCitldG5hX2JvX21hcAorZXRuYV9i b19jcHVfcHJlcAorZXRuYV9ib19jcHVfZmluaQorZXRuYV9jbWRfc3RyZWFtX25ldworZXRuYV9j bWRfc3RyZWFtX2RlbAorZXRuYV9jbWRfc3RyZWFtX3RpbWVzdGFtcAorZXRuYV9jbWRfc3RyZWFt X2ZsdXNoCitldG5hX2NtZF9zdHJlYW1fZmluaXNoCitldG5hX2NtZF9zdHJlYW1fcmVsb2MKK0VP RgorZG9uZSkKKwordGVzdCAhIC1uICIkRlVOQ1MiIHx8IGVjaG8gJEZVTkNTCit0ZXN0ICEgLW4g IiRGVU5DUyIKZGlmZiAtLWdpdCBhL2V0bmF2aXYvZXRuYXZpdl9iby5jIGIvZXRuYXZpdi9ldG5h dml2X2JvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzZjhiZAotLS0g L2Rldi9udWxsCisrKyBiL2V0bmF2aXYvZXRuYXZpdl9iby5jCkBAIC0wLDAgKzEsMzQ3IEBACisv KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEV0bmF2aXYgUHJvamVjdAorICoKKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhl IHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQg dG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0 byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhl IGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1 ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29w aWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICog VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5Z IEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQg VE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBP RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg REVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQ2hy aXN0aWFuIEdtZWluZXIgPGNocmlzdGlhbi5nbWVpbmVyQGdtYWlsLmNvbT4KKyAqLworCisjaWZk ZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVk ZSAiZXRuYXZpdl9wcml2LmgiCisjaW5jbHVkZSAiZXRuYXZpdl9kcm1pZi5oIgorCitkcm1fcHJp dmF0ZSBwdGhyZWFkX211dGV4X3QgdGFibGVfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTEla RVI7Citkcm1fcHJpdmF0ZSB2b2lkIGJvX2RlbChzdHJ1Y3QgZXRuYV9ibyAqYm8pOworCisvKiBz ZXQgYnVmZmVyIG5hbWUsIGFuZCBhZGQgdG8gdGFibGUsIGNhbGwgdy8gdGFibGVfbG9jayBoZWxk OiAqLworc3RhdGljIHZvaWQgc2V0X25hbWUoc3RydWN0IGV0bmFfYm8gKmJvLCB1aW50MzJfdCBu YW1lKQoreworCWJvLT5uYW1lID0gbmFtZTsKKwkvKiBhZGQgb3Vyc2VsZiBpbnRvIHRoZSBuYW1l IHRhYmxlOiAqLworCWRybUhhc2hJbnNlcnQoYm8tPmRldi0+bmFtZV90YWJsZSwgbmFtZSwgYm8p OworfQorCisvKiBDYWxsZWQgdW5kZXIgdGFibGVfbG9jayAqLworZHJtX3ByaXZhdGUgdm9pZCBi b19kZWwoc3RydWN0IGV0bmFfYm8gKmJvKQoreworCWlmIChiby0+bWFwKQorCQlkcm1fbXVubWFw KGJvLT5tYXAsIGJvLT5zaXplKTsKKworCWlmIChiby0+bmFtZSkKKwkJZHJtSGFzaERlbGV0ZShi by0+ZGV2LT5uYW1lX3RhYmxlLCBiby0+bmFtZSk7CisKKwlpZiAoYm8tPmhhbmRsZSkgeworCQlz dHJ1Y3QgZHJtX2dlbV9jbG9zZSByZXEgPSB7CisJCQkuaGFuZGxlID0gYm8tPmhhbmRsZSwKKwkJ fTsKKworCQlkcm1IYXNoRGVsZXRlKGJvLT5kZXYtPmhhbmRsZV90YWJsZSwgYm8tPmhhbmRsZSk7 CisJCWRybUlvY3RsKGJvLT5kZXYtPmZkLCBEUk1fSU9DVExfR0VNX0NMT1NFLCAmcmVxKTsKKwl9 CisKKwlmcmVlKGJvKTsKK30KKworLyogbG9va3VwIGEgYnVmZmVyIGZyb20gaXQncyBoYW5kbGUs IGNhbGwgdy8gdGFibGVfbG9jayBoZWxkOiAqLworc3RhdGljIHN0cnVjdCBldG5hX2JvICpsb29r dXBfYm8odm9pZCAqdGJsLCB1aW50MzJfdCBoYW5kbGUpCit7CisJc3RydWN0IGV0bmFfYm8gKmJv ID0gTlVMTDsKKworCWlmICghZHJtSGFzaExvb2t1cCh0YmwsIGhhbmRsZSwgKHZvaWQgKiopJmJv KSkgeworCQkvKiBmb3VuZCwgaW5jciByZWZjbnQgYW5kIHJldHVybjogKi8KKwkJYm8gPSBldG5h X2JvX3JlZihibyk7CisKKwkJLyogZG9uJ3QgYnJlYWsgdGhlIGJ1Y2tldCBpZiB0aGlzIGJvIHdh cyBmb3VuZCBpbiBvbmUgKi8KKwkJbGlzdF9kZWxpbml0KCZiby0+bGlzdCk7CisJfQorCisJcmV0 dXJuIGJvOworfQorCisvKiBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgb2JqZWN0LCBjYWxsIHcvIHRh YmxlX2xvY2sgaGVsZCAqLworc3RhdGljIHN0cnVjdCBldG5hX2JvICpib19mcm9tX2hhbmRsZShz dHJ1Y3QgZXRuYV9kZXZpY2UgKmRldiwKKwkJdWludDMyX3Qgc2l6ZSwgdWludDMyX3QgaGFuZGxl LCB1aW50MzJfdCBmbGFncykKK3sKKwlzdHJ1Y3QgZXRuYV9ibyAqYm8gPSBjYWxsb2Moc2l6ZW9m KCpibyksIDEpOworCisJaWYgKCFibykgeworCQlzdHJ1Y3QgZHJtX2dlbV9jbG9zZSByZXEgPSB7 CisJCQkuaGFuZGxlID0gaGFuZGxlLAorCQl9OworCisJCWRybUlvY3RsKGRldi0+ZmQsIERSTV9J T0NUTF9HRU1fQ0xPU0UsICZyZXEpOworCisJCXJldHVybiBOVUxMOworCX0KKworCWJvLT5kZXYg PSBldG5hX2RldmljZV9yZWYoZGV2KTsKKwliby0+c2l6ZSA9IHNpemU7CisJYm8tPmhhbmRsZSA9 IGhhbmRsZTsKKwliby0+ZmxhZ3MgPSBmbGFnczsKKwlhdG9taWNfc2V0KCZiby0+cmVmY250LCAx KTsKKwlsaXN0X2luaXRoZWFkKCZiby0+bGlzdCk7CisJLyogYWRkIG91cnNlbHZlcyB0byB0aGUg aGFuZGxlIHRhYmxlOiAqLworCWRybUhhc2hJbnNlcnQoZGV2LT5oYW5kbGVfdGFibGUsIGhhbmRs ZSwgYm8pOworCisJcmV0dXJuIGJvOworfQorCisvKiBhbGxvY2F0ZSBhIG5ldyAodW4tdGlsZWQp IGJ1ZmZlciBvYmplY3QgKi8KK3N0cnVjdCBldG5hX2JvICpldG5hX2JvX25ldyhzdHJ1Y3QgZXRu YV9kZXZpY2UgKmRldiwgdWludDMyX3Qgc2l6ZSwKKwkJdWludDMyX3QgZmxhZ3MpCit7CisJc3Ry dWN0IGV0bmFfYm8gKmJvOworCWludCByZXQ7CisJc3RydWN0IGRybV9ldG5hdml2X2dlbV9uZXcg cmVxID0geworCQkJLmZsYWdzID0gZmxhZ3MsCisJfTsKKworCWJvID0gZXRuYV9ib19jYWNoZV9h bGxvYygmZGV2LT5ib19jYWNoZSwgJnNpemUsIGZsYWdzKTsKKwlpZiAoYm8pCisJCXJldHVybiBi bzsKKworCXJlcS5zaXplID0gc2l6ZTsKKwlyZXQgPSBkcm1Db21tYW5kV3JpdGVSZWFkKGRldi0+ ZmQsIERSTV9FVE5BVklWX0dFTV9ORVcsCisJCQkmcmVxLCBzaXplb2YocmVxKSk7CisJaWYgKHJl dCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwdGhyZWFkX211dGV4X2xvY2soJnRhYmxlX2xvY2spOwor CWJvID0gYm9fZnJvbV9oYW5kbGUoZGV2LCBzaXplLCByZXEuaGFuZGxlLCBmbGFncyk7CisJYm8t PnJldXNlID0gMTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisKKwlyZXR1 cm4gYm87Cit9CisKK3N0cnVjdCBldG5hX2JvICpldG5hX2JvX3JlZihzdHJ1Y3QgZXRuYV9ibyAq Ym8pCit7CisJYXRvbWljX2luYygmYm8tPnJlZmNudCk7CisKKwlyZXR1cm4gYm87Cit9CisKKy8q IGdldCBidWZmZXIgaW5mbyAqLworc3RhdGljIGludCBnZXRfYnVmZmVyX2luZm8oc3RydWN0IGV0 bmFfYm8gKmJvKQoreworCWludCByZXQ7CisJc3RydWN0IGRybV9ldG5hdml2X2dlbV9pbmZvIHJl cSA9IHsKKwkJLmhhbmRsZSA9IGJvLT5oYW5kbGUsCisJfTsKKworCXJldCA9IGRybUNvbW1hbmRX cml0ZVJlYWQoYm8tPmRldi0+ZmQsIERSTV9FVE5BVklWX0dFTV9JTkZPLAorCQkJJnJlcSwgc2l6 ZW9mKHJlcSkpOworCWlmIChyZXQpIHsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiByZWFsbHkg YWxsIHdlIG5lZWQgZm9yIG5vdyBpcyBtbWFwIG9mZnNldCAqLworCWJvLT5vZmZzZXQgPSByZXEu b2Zmc2V0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGltcG9ydCBhIGJ1ZmZlciBvYmplY3QgZnJv bSBEUkkyIG5hbWUgKi8KK3N0cnVjdCBldG5hX2JvICpldG5hX2JvX2Zyb21fbmFtZShzdHJ1Y3Qg ZXRuYV9kZXZpY2UgKmRldiwgdWludDMyX3QgbmFtZSkKK3sKKwlzdHJ1Y3QgZXRuYV9ibyAqYm87 CisJc3RydWN0IGRybV9nZW1fb3BlbiByZXEgPSB7CisJCS5uYW1lID0gbmFtZSwKKwl9OworCisJ cHRocmVhZF9tdXRleF9sb2NrKCZ0YWJsZV9sb2NrKTsKKworCS8qIGNoZWNrIG5hbWUgdGFibGUg Zmlyc3QsIHRvIHNlZSBpZiBibyBpcyBhbHJlYWR5IG9wZW46ICovCisJYm8gPSBsb29rdXBfYm8o ZGV2LT5uYW1lX3RhYmxlLCByZXEuaGFuZGxlKTsKKwlpZiAoYm8pCisJCWdvdG8gb3V0X3VubG9j azsKKworCWlmIChkcm1Jb2N0bChkZXYtPmZkLCBEUk1fSU9DVExfR0VNX09QRU4sICZyZXEpKSB7 CisJCUVSUk9SX01TRygiZ2VtLW9wZW4gZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJ CWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlibyA9IGxvb2t1cF9ibyhkZXYtPmhhbmRsZV90YWJs ZSwgcmVxLmhhbmRsZSk7CisJaWYgKGJvKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlibyA9IGJv X2Zyb21faGFuZGxlKGRldiwgcmVxLnNpemUsIHJlcS5oYW5kbGUsIDApOworCWlmIChibykKKwkJ c2V0X25hbWUoYm8sIG5hbWUpOworCitvdXRfdW5sb2NrOgorCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZ0YWJsZV9sb2NrKTsKKworCXJldHVybiBibzsKK30KKworLyogaW1wb3J0IGEgYnVmZmVyIGZy b20gZG1hYnVmIGZkLCBkb2VzIG5vdCB0YWtlIG93bmVyc2hpcCBvZiB0aGUKKyAqIGZkIHNvIGNh bGxlciBzaG91bGQgY2xvc2UoKSB0aGUgZmQgd2hlbiBpdCBpcyBvdGhlcndpc2UgZG9uZQorICog d2l0aCBpdCAoZXZlbiBpZiBpdCBpcyBzdGlsbCB1c2luZyB0aGUgJ3N0cnVjdCBldG5hX2JvICon KQorICovCitzdHJ1Y3QgZXRuYV9ibyAqZXRuYV9ib19mcm9tX2RtYWJ1ZihzdHJ1Y3QgZXRuYV9k ZXZpY2UgKmRldiwgaW50IGZkKQoreworCXN0cnVjdCBldG5hX2JvICpibzsKKwlpbnQgcmV0LCBz aXplOworCXVpbnQzMl90IGhhbmRsZTsKKworCXB0aHJlYWRfbXV0ZXhfbG9jaygmdGFibGVfbG9j ayk7CisKKwlyZXQgPSBkcm1QcmltZUZEVG9IYW5kbGUoZGV2LT5mZCwgZmQsICZoYW5kbGUpOwor CWlmIChyZXQpIHsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYm8gPSBsb29rdXBfYm8oZGV2LT5o YW5kbGVfdGFibGUsIGhhbmRsZSk7CisJaWYgKGJvKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkv KiBsc2VlaygpIHRvIGdldCBibyBzaXplICovCisJc2l6ZSA9IGxzZWVrKGZkLCAwLCBTRUVLX0VO RCk7CisJbHNlZWsoZmQsIDAsIFNFRUtfQ1VSKTsKKworCWJvID0gYm9fZnJvbV9oYW5kbGUoZGV2 LCBzaXplLCBoYW5kbGUsIDApOworCitvdXRfdW5sb2NrOgorCXB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZ0YWJsZV9sb2NrKTsKKworCXJldHVybiBibzsKK30KKworLyogZGVzdHJveSBhIGJ1ZmZlciBv YmplY3QgKi8KK3ZvaWQgZXRuYV9ib19kZWwoc3RydWN0IGV0bmFfYm8gKmJvKQoreworCXN0cnVj dCBldG5hX2RldmljZSAqZGV2ID0gYm8tPmRldjsKKworCWlmICghYm8pCisJCXJldHVybjsKKwor CWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmYm8tPnJlZmNudCkpCisJCXJldHVybjsKKworCXB0 aHJlYWRfbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CisKKwlpZiAoYm8tPnJldXNlICYmIChldG5h X2JvX2NhY2hlX2ZyZWUoJmRldi0+Ym9fY2FjaGUsIGJvKSA9PSAwKSkKKwkJZ290byBvdXQ7CisK Kwlib19kZWwoYm8pOworCWV0bmFfZGV2aWNlX2RlbF9sb2NrZWQoZGV2KTsKK291dDoKKwlwdGhy ZWFkX211dGV4X3VubG9jaygmdGFibGVfbG9jayk7Cit9CisKKy8qIGdldCB0aGUgZ2xvYmFsIGZs aW5rL0RSSTIgYnVmZmVyIG5hbWUgKi8KK2ludCBldG5hX2JvX2dldF9uYW1lKHN0cnVjdCBldG5h X2JvICpibywgdWludDMyX3QgKm5hbWUpCit7CisJaWYgKCFiby0+bmFtZSkgeworCQlzdHJ1Y3Qg ZHJtX2dlbV9mbGluayByZXEgPSB7CisJCQkuaGFuZGxlID0gYm8tPmhhbmRsZSwKKwkJfTsKKwkJ aW50IHJldDsKKworCQlyZXQgPSBkcm1Jb2N0bChiby0+ZGV2LT5mZCwgRFJNX0lPQ1RMX0dFTV9G TElOSywgJnJlcSk7CisJCWlmIChyZXQpIHsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlwdGhy ZWFkX211dGV4X2xvY2soJnRhYmxlX2xvY2spOworCQlzZXRfbmFtZShibywgcmVxLm5hbWUpOwor CQlwdGhyZWFkX211dGV4X3VubG9jaygmdGFibGVfbG9jayk7CisJCWJvLT5yZXVzZSA9IDA7CisJ fQorCisJKm5hbWUgPSBiby0+bmFtZTsKKworCXJldHVybiAwOworfQorCit1aW50MzJfdCBldG5h X2JvX2hhbmRsZShzdHJ1Y3QgZXRuYV9ibyAqYm8pCit7CisJcmV0dXJuIGJvLT5oYW5kbGU7Cit9 CisKKy8qIGNhbGxlciBvd25zIHRoZSBkbWFidWYgZmQgdGhhdCBpcyByZXR1cm5lZCBhbmQgaXMg cmVzcG9uc2libGUKKyAqIHRvIGNsb3NlKCkgaXQgd2hlbiBkb25lCisgKi8KK2ludCBldG5hX2Jv X2RtYWJ1ZihzdHJ1Y3QgZXRuYV9ibyAqYm8pCit7CisJaW50IHJldCwgcHJpbWVfZmQ7CisKKwly ZXQgPSBkcm1QcmltZUhhbmRsZVRvRkQoYm8tPmRldi0+ZmQsIGJvLT5oYW5kbGUsIERSTV9DTE9F WEVDLAorCQkJCSZwcmltZV9mZCk7CisJaWYgKHJldCkgeworCQlFUlJPUl9NU0coImZhaWxlZCB0 byBnZXQgZG1hYnVmIGZkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJYm8tPnJl dXNlID0gMDsKKworCXJldHVybiBwcmltZV9mZDsKK30KKwordWludDMyX3QgZXRuYV9ib19zaXpl KHN0cnVjdCBldG5hX2JvICpibykKK3sKKwlyZXR1cm4gYm8tPnNpemU7Cit9CisKK3ZvaWQgKmV0 bmFfYm9fbWFwKHN0cnVjdCBldG5hX2JvICpibykKK3sKKwlpZiAoIWJvLT5tYXApIHsKKwkJaWYg KCFiby0+b2Zmc2V0KSB7CisJCQlnZXRfYnVmZmVyX2luZm8oYm8pOworCQl9CisKKwkJYm8tPm1h cCA9IGRybV9tbWFwKDAsIGJvLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkJCU1B UF9TSEFSRUQsIGJvLT5kZXYtPmZkLCBiby0+b2Zmc2V0KTsKKwkJaWYgKGJvLT5tYXAgPT0gTUFQ X0ZBSUxFRCkgeworCQkJRVJST1JfTVNHKCJtbWFwIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJu bykpOworCQkJYm8tPm1hcCA9IE5VTEw7CisJCX0KKwl9CisKKwlyZXR1cm4gYm8tPm1hcDsKK30K KworaW50IGV0bmFfYm9fY3B1X3ByZXAoc3RydWN0IGV0bmFfYm8gKmJvLCB1aW50MzJfdCBvcCkK K3sKKwlzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX2NwdV9wcmVwIHJlcSA9IHsKKwkJLmhhbmRsZSA9 IGJvLT5oYW5kbGUsCisJCS5vcCA9IG9wLAorCX07CisKKwlnZXRfYWJzX3RpbWVvdXQoJnJlcS50 aW1lb3V0LCA1MDAwKTsKKworCXJldHVybiBkcm1Db21tYW5kV3JpdGUoYm8tPmRldi0+ZmQsIERS TV9FVE5BVklWX0dFTV9DUFVfUFJFUCwKKwkJCSZyZXEsIHNpemVvZihyZXEpKTsKK30KKwordm9p ZCBldG5hX2JvX2NwdV9maW5pKHN0cnVjdCBldG5hX2JvICpibykKK3sKKwlzdHJ1Y3QgZHJtX2V0 bmF2aXZfZ2VtX2NwdV9maW5pIHJlcSA9IHsKKwkJLmhhbmRsZSA9IGJvLT5oYW5kbGUsCisJfTsK KworCWRybUNvbW1hbmRXcml0ZShiby0+ZGV2LT5mZCwgRFJNX0VUTkFWSVZfR0VNX0NQVV9GSU5J LAorCQkJJnJlcSwgc2l6ZW9mKHJlcSkpOworfQpkaWZmIC0tZ2l0IGEvZXRuYXZpdi9ldG5hdml2 X2JvX2NhY2hlLmMgYi9ldG5hdml2L2V0bmF2aXZfYm9fY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi44OTI0NjUxCi0tLSAvZGV2L251bGwKKysrIGIvZXRuYXZpdi9l dG5hdml2X2JvX2NhY2hlLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp IDIwMTYgRXRuYXZpdiBQcm9qZWN0CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFu ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0 byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBw YXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg cG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJP VklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgor ICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB TkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JU IE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAq IFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBDaHJpc3RpYW4gR21laW5lciA8Y2hy aXN0aWFuLmdtZWluZXJAZ21haWwuY29tPgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisj IGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJldG5hdml2X3ByaXYuaCIK KyNpbmNsdWRlICJldG5hdml2X2RybWlmLmgiCisKK2RybV9wcml2YXRlIHZvaWQgYm9fZGVsKHN0 cnVjdCBldG5hX2JvICpibyk7Citkcm1fcHJpdmF0ZSBleHRlcm4gcHRocmVhZF9tdXRleF90IHRh YmxlX2xvY2s7CisKK3N0YXRpYyB2b2lkIGFkZF9idWNrZXQoc3RydWN0IGV0bmFfYm9fY2FjaGUg KmNhY2hlLCBpbnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpID0gY2FjaGUtPm51bV9idWNrZXRzOwor CisJYXNzZXJ0KGkgPCBBUlJBWV9TSVpFKGNhY2hlLT5jYWNoZV9idWNrZXQpKTsKKworCWxpc3Rf aW5pdGhlYWQoJmNhY2hlLT5jYWNoZV9idWNrZXRbaV0ubGlzdCk7CisJY2FjaGUtPmNhY2hlX2J1 Y2tldFtpXS5zaXplID0gc2l6ZTsKKwljYWNoZS0+bnVtX2J1Y2tldHMrKzsKK30KKworZHJtX3By aXZhdGUgdm9pZCBldG5hX2JvX2NhY2hlX2luaXQoc3RydWN0IGV0bmFfYm9fY2FjaGUgKmNhY2hl KQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSwgY2FjaGVfbWF4X3NpemUgPSA2NCAqIDEwMjQgKiAx MDI0OworCisJLyogT0ssIHNvIHBvd2VyIG9mIHR3byBidWNrZXRzIHdhcyB0b28gd2FzdGVmdWwg b2YgbWVtb3J5LgorCSAqIEdpdmUgMyBvdGhlciBzaXplcyBiZXR3ZWVuIGVhY2ggcG93ZXIgb2Yg dHdvLCB0byBob3BlZnVsbHkKKwkgKiBjb3ZlciB0aGluZ3MgYWNjdXJhdGVseSBlbm91Z2guICAo VGhlIGFsdGVybmF0aXZlIGlzCisJICogcHJvYmFibHkgdG8ganVzdCBnbyBmb3IgZXhhY3QgbWF0 Y2hpbmcgb2Ygc2l6ZXMsIGFuZCBhc3N1bWUKKwkgKiB0aGF0IGZvciB0aGluZ3MgbGlrZSBjb21w b3NpdGVkIHdpbmRvdyByZXNpemUgdGhlIHRpbGVkCisJICogd2lkdGgvaGVpZ2h0IGFsaWdubWVu dCBhbmQgcm91bmRpbmcgb2Ygc2l6ZXMgdG8gcGFnZXMgd2lsbAorCSAqIGdldCB1cyB1c2VmdWwg Y2FjaGUgaGl0IHJhdGVzIGFueXdheSkKKwkgKi8KKwlhZGRfYnVja2V0KGNhY2hlLCA0MDk2KTsK KwlhZGRfYnVja2V0KGNhY2hlLCA0MDk2ICogMik7CisJYWRkX2J1Y2tldChjYWNoZSwgNDA5NiAq IDMpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgbGlua2VkIGxpc3RzIGZvciBCTyByZXVzZSBjYWNo ZS4gKi8KKwlmb3IgKHNpemUgPSA0ICogNDA5Njsgc2l6ZSA8PSBjYWNoZV9tYXhfc2l6ZTsgc2l6 ZSAqPSAyKSB7CisJCWFkZF9idWNrZXQoY2FjaGUsIHNpemUpOworCQlhZGRfYnVja2V0KGNhY2hl LCBzaXplICsgc2l6ZSAqIDEgLyA0KTsKKwkJYWRkX2J1Y2tldChjYWNoZSwgc2l6ZSArIHNpemUg KiAyIC8gNCk7CisJCWFkZF9idWNrZXQoY2FjaGUsIHNpemUgKyBzaXplICogMyAvIDQpOworCX0K K30KKworLyogRnJlZXMgb2xkZXIgY2FjaGVkIGJ1ZmZlcnMuICBDYWxsZWQgdW5kZXIgdGFibGVf bG9jayAqLworZHJtX3ByaXZhdGUgdm9pZCBldG5hX2JvX2NhY2hlX2NsZWFudXAoc3RydWN0IGV0 bmFfYm9fY2FjaGUgKmNhY2hlLCB0aW1lX3QgdGltZSkKK3sKKwl1bnNpZ25lZCBpOworCisJaWYg KGNhY2hlLT50aW1lID09IHRpbWUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBjYWNo ZS0+bnVtX2J1Y2tldHM7IGkrKykgeworCQlzdHJ1Y3QgZXRuYV9ib19idWNrZXQgKmJ1Y2tldCA9 ICZjYWNoZS0+Y2FjaGVfYnVja2V0W2ldOworCQlzdHJ1Y3QgZXRuYV9ibyAqYm87CisKKwkJd2hp bGUgKCFMSVNUX0lTX0VNUFRZKCZidWNrZXQtPmxpc3QpKSB7CisJCQlibyA9IExJU1RfRU5UUlko c3RydWN0IGV0bmFfYm8sIGJ1Y2tldC0+bGlzdC5uZXh0LCBsaXN0KTsKKworCQkJLyoga2VlcCB0 aGluZ3MgaW4gY2FjaGUgZm9yIGF0IGxlYXN0IDEgc2Vjb25kOiAqLworCQkJaWYgKHRpbWUgJiYg KCh0aW1lIC0gYm8tPmZyZWVfdGltZSkgPD0gMSkpCisJCQkJYnJlYWs7CisKKwkJCWxpc3RfZGVs KCZiby0+bGlzdCk7CisJCQlib19kZWwoYm8pOworCQl9CisJfQorCisJY2FjaGUtPnRpbWUgPSB0 aW1lOworfQorCitzdGF0aWMgc3RydWN0IGV0bmFfYm9fYnVja2V0ICpnZXRfYnVja2V0KHN0cnVj dCBldG5hX2JvX2NhY2hlICpjYWNoZSwgdWludDMyX3Qgc2l6ZSkKK3sKKwl1bnNpZ25lZCBpOwor CisJLyogaG1tLCB0aGlzIGlzIHdoYXQgaW50ZWwgZG9lcywgYnV0IEkgc3VwcG9zZSB3ZSBjb3Vs ZCBjYWxjdWxhdGUgb3VyCisJICogd2F5IHRvIHRoZSBjb3JyZWN0IGJ1Y2tldCBzaXplIHJhdGhl ciB0aGFuIGxvb3BpbmcuLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBjYWNoZS0+bnVtX2J1Y2tl dHM7IGkrKykgeworCQlzdHJ1Y3QgZXRuYV9ib19idWNrZXQgKmJ1Y2tldCA9ICZjYWNoZS0+Y2Fj aGVfYnVja2V0W2ldOworCQlpZiAoYnVja2V0LT5zaXplID49IHNpemUpIHsKKwkJCXJldHVybiBi dWNrZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBpc19pZGxl KHN0cnVjdCBldG5hX2JvICpibykKK3sKKwlyZXR1cm4gZXRuYV9ib19jcHVfcHJlcChibywKKwkJ CURSTV9FVE5BX1BSRVBfUkVBRCB8CisJCQlEUk1fRVROQV9QUkVQX1dSSVRFIHwKKwkJCURSTV9F VE5BX1BSRVBfTk9TWU5DKSA9PSAwOworfQorCitzdGF0aWMgc3RydWN0IGV0bmFfYm8gKmZpbmRf aW5fYnVja2V0KHN0cnVjdCBldG5hX2JvX2J1Y2tldCAqYnVja2V0LCB1aW50MzJfdCBmbGFncykK K3sKKwlzdHJ1Y3QgZXRuYV9ibyAqYm8gPSBOVUxMOworCisJcHRocmVhZF9tdXRleF9sb2NrKCZ0 YWJsZV9sb2NrKTsKKwl3aGlsZSAoIUxJU1RfSVNfRU1QVFkoJmJ1Y2tldC0+bGlzdCkpIHsKKwkJ Ym8gPSBMSVNUX0VOVFJZKHN0cnVjdCBldG5hX2JvLCBidWNrZXQtPmxpc3QubmV4dCwgbGlzdCk7 CisKKwkJaWYgKGJvLT5mbGFncyA9PSBmbGFncyAmJiBpc19pZGxlKGJvKSkgeworCQkJbGlzdF9k ZWwoJmJvLT5saXN0KTsKKwkJCWJyZWFrOworCQl9CisKKwkJYm8gPSBOVUxMOworCQlicmVhazsK Kwl9CisJcHRocmVhZF9tdXRleF91bmxvY2soJnRhYmxlX2xvY2spOworCisJcmV0dXJuIGJvOwor fQorCisvKiBhbGxvY2F0ZSBhIG5ldyAodW4tdGlsZWQpIGJ1ZmZlciBvYmplY3QKKyAqCisgKiBO T1RFOiBzaXplIGlzIHBvdGVudGlhbGx5IHJvdW5kZWQgdXAgdG8gYnVja2V0IHNpemUKKyAqLwor ZHJtX3ByaXZhdGUgc3RydWN0IGV0bmFfYm8gKmV0bmFfYm9fY2FjaGVfYWxsb2Moc3RydWN0IGV0 bmFfYm9fY2FjaGUgKmNhY2hlLCB1aW50MzJfdCAqc2l6ZSwKKyAgICB1aW50MzJfdCBmbGFncykK K3sKKwlzdHJ1Y3QgZXRuYV9ibyAqYm87CisJc3RydWN0IGV0bmFfYm9fYnVja2V0ICpidWNrZXQ7 CisKKwkqc2l6ZSA9IEFMSUdOKCpzaXplLCA0MDk2KTsKKwlidWNrZXQgPSBnZXRfYnVja2V0KGNh Y2hlLCAqc2l6ZSk7CisKKwkvKiBzZWUgaWYgd2UgY2FuIGJlIGdyZWVuIGFuZCByZWN5Y2xlOiAq LworCWlmIChidWNrZXQpIHsKKwkJKnNpemUgPSBidWNrZXQtPnNpemU7CisJCWJvID0gZmluZF9p bl9idWNrZXQoYnVja2V0LCBmbGFncyk7CisJCWlmIChibykgeworCQkJYXRvbWljX3NldCgmYm8t PnJlZmNudCwgMSk7CisJCQlldG5hX2RldmljZV9yZWYoYm8tPmRldik7CisJCQlyZXR1cm4gYm87 CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworZHJtX3ByaXZhdGUgaW50IGV0bmFfYm9f Y2FjaGVfZnJlZShzdHJ1Y3QgZXRuYV9ib19jYWNoZSAqY2FjaGUsIHN0cnVjdCBldG5hX2JvICpi bykKK3sKKwlzdHJ1Y3QgZXRuYV9ib19idWNrZXQgKmJ1Y2tldCA9IGdldF9idWNrZXQoY2FjaGUs IGJvLT5zaXplKTsKKworCS8qIHNlZSBpZiB3ZSBjYW4gYmUgZ3JlZW4gYW5kIHJlY3ljbGU6ICov CisJaWYgKGJ1Y2tldCkgeworCQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKKworCQljbG9ja19nZXR0 aW1lKENMT0NLX01PTk9UT05JQywgJnRpbWUpOworCisJCWJvLT5mcmVlX3RpbWUgPSB0aW1lLnR2 X3NlYzsKKwkJbGlzdF9hZGR0YWlsKCZiby0+bGlzdCwgJmJ1Y2tldC0+bGlzdCk7CisJCWV0bmFf Ym9fY2FjaGVfY2xlYW51cChjYWNoZSwgdGltZS50dl9zZWMpOworCisJCS8qIGJvJ3MgaW4gdGhl IGJ1Y2tldCBjYWNoZSBkb24ndCBoYXZlIGEgcmVmIGFuZAorCQkgKiBkb24ndCBob2xkIGEgcmVm IHRvIHRoZSBkZXY6CisJCSAqLworCQlldG5hX2RldmljZV9kZWxfbG9ja2VkKGJvLT5kZXYpOwor CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2V0bmF2aXYv ZXRuYXZpdl9jbWRfc3RyZWFtLmMgYi9ldG5hdml2L2V0bmF2aXZfY21kX3N0cmVhbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTNmMzYKLS0tIC9kZXYvbnVsbAorKysg Yi9ldG5hdml2L2V0bmF2aXZfY21kX3N0cmVhbS5jCkBAIC0wLDAgKzEsMjQzIEBACisvKgorICog Q29weXJpZ2h0IChDKSAyMDE0LTIwMTUgRXRuYXZpdiBQcm9qZWN0CisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBDaHJp c3RpYW4gR21laW5lciA8Y2hyaXN0aWFuLmdtZWluZXJAZ21haWwuY29tPgorICovCisKKyNpZmRl ZiBIQVZFX0NPTkZJR19ICisjIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRl IDxhc3NlcnQuaD4KKworI2luY2x1ZGUgImV0bmF2aXZfZHJtaWYuaCIKKyNpbmNsdWRlICJldG5h dml2X3ByaXYuaCIKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBpZHhfbG9jayA9IFBUSFJFQURf TVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyB2b2lkICpncm93KHZvaWQgKnB0ciwgdWludDMy X3QgbnIsIHVpbnQzMl90ICptYXgsIHVpbnQzMl90IHN6KQoreworCWlmICgobnIgKyAxKSA+ICpt YXgpIHsKKwkJaWYgKCgqbWF4ICogMikgPCAobnIgKyAxKSkKKwkJCSptYXggPSBuciArIDU7CisJ CWVsc2UKKwkJCSptYXggPSAqbWF4ICogMjsKKwkJcHRyID0gcmVhbGxvYyhwdHIsICptYXggKiBz eik7CisJfQorCisJcmV0dXJuIHB0cjsKK30KKworI2RlZmluZSBBUFBFTkQoeCwgbmFtZSkgKHsg XAorCSh4KS0+bmFtZSA9IGdyb3coKHgpLT5uYW1lLCAoeCktPm5yXyAjIyBuYW1lLCAmKHgpLT5t YXhfICMjIG5hbWUsIHNpemVvZigoeCktPm5hbWVbMF0pKTsgXAorCSh4KS0+bnJfICMjIG5hbWUg Kys7IFwKK30pCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGV0bmFfY21kX3N0cmVhbV9wcml2ICoK K2V0bmFfY21kX3N0cmVhbV9wcml2KHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSkKK3sK KyAgICByZXR1cm4gKHN0cnVjdCBldG5hX2NtZF9zdHJlYW1fcHJpdiAqKXN0cmVhbTsKK30KKwor c3RydWN0IGV0bmFfY21kX3N0cmVhbSAqZXRuYV9jbWRfc3RyZWFtX25ldyhzdHJ1Y3QgZXRuYV9w aXBlICpwaXBlLCB1aW50MzJfdCBzaXplLAorCQl2b2lkICgqcmVzZXRfbm90aWZ5KShzdHJ1Y3Qg ZXRuYV9jbWRfc3RyZWFtICpzdHJlYW0sIHZvaWQgKnByaXYpLAorCQl2b2lkICpwcml2KQorewor CXN0cnVjdCBldG5hX2NtZF9zdHJlYW1fcHJpdiAqc3RyZWFtID0gTlVMTDsKKworCWlmIChzaXpl ID09IDApIHsKKwkJRVJST1JfTVNHKCJpbnZhbGlkIHNpemUgb2YgMCIpOworCQlnb3RvIGZhaWw7 CisJfQorCisJc3RyZWFtID0gY2FsbG9jKDEsIHNpemVvZigqc3RyZWFtKSk7CisJaWYgKCFzdHJl YW0pIHsKKwkJRVJST1JfTVNHKCJhbGxvY2F0aW9uIGZhaWxlZCIpOworCQlnb3RvIGZhaWw7CisJ fQorCisJLyogYWxsb2NhdGUgZXZlbiBudW1iZXIgb2YgMzItYml0IHdvcmRzICovCisJc2l6ZSA9 IEFMSUdOKHNpemUsIDIpOworCisJc3RyZWFtLT5iYXNlLmJ1ZmZlciA9IG1hbGxvYyhzaXplICog c2l6ZW9mKHVpbnQzMl90KSk7CisJaWYgKCFzdHJlYW0tPmJhc2UuYnVmZmVyKSB7CisJCUVSUk9S X01TRygiYWxsb2NhdGlvbiBmYWlsZWQiKTsKKwkJZ290byBmYWlsOworCX0KKworCXN0cmVhbS0+ YmFzZS5zaXplID0gc2l6ZTsKKwlzdHJlYW0tPnBpcGUgPSBwaXBlOworCXN0cmVhbS0+cmVzZXRf bm90aWZ5ID0gcmVzZXRfbm90aWZ5OworCXN0cmVhbS0+cmVzZXRfbm90aWZ5X3ByaXYgPSBwcml2 OworCisJcmV0dXJuICZzdHJlYW0tPmJhc2U7CisKK2ZhaWw6CisJaWYgKHN0cmVhbSkKKwkJZXRu YV9jbWRfc3RyZWFtX2RlbCgmc3RyZWFtLT5iYXNlKTsKKworCXJldHVybiBOVUxMOworfQorCit2 b2lkIGV0bmFfY21kX3N0cmVhbV9kZWwoc3RydWN0IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtKQor eworCXN0cnVjdCBldG5hX2NtZF9zdHJlYW1fcHJpdiAqcHJpdiA9IGV0bmFfY21kX3N0cmVhbV9w cml2KHN0cmVhbSk7CisKKwlmcmVlKHN0cmVhbS0+YnVmZmVyKTsKKwlmcmVlKHByaXYtPnN1Ym1p dC5yZWxvY3MpOworCWZyZWUocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2J1ZmZlcihz dHJ1Y3QgZXRuYV9jbWRfc3RyZWFtICpzdHJlYW0pCit7CisJc3RydWN0IGV0bmFfY21kX3N0cmVh bV9wcml2ICpwcml2ID0gZXRuYV9jbWRfc3RyZWFtX3ByaXYoc3RyZWFtKTsKKworCXN0cmVhbS0+ b2Zmc2V0ID0gMDsKKwlwcml2LT5zdWJtaXQubnJfYm9zID0gMDsKKwlwcml2LT5zdWJtaXQubnJf cmVsb2NzID0gMDsKKwlwcml2LT5ucl9ib3MgPSAwOworCisJaWYgKHByaXYtPnJlc2V0X25vdGlm eSkKKwkJcHJpdi0+cmVzZXRfbm90aWZ5KHN0cmVhbSwgcHJpdi0+cmVzZXRfbm90aWZ5X3ByaXYp OworfQorCit1aW50MzJfdCBldG5hX2NtZF9zdHJlYW1fdGltZXN0YW1wKHN0cnVjdCBldG5hX2Nt ZF9zdHJlYW0gKnN0cmVhbSkKK3sKKwlyZXR1cm4gZXRuYV9jbWRfc3RyZWFtX3ByaXYoc3RyZWFt KS0+bGFzdF90aW1lc3RhbXA7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBhcHBlbmRfYm8oc3RydWN0 IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgZXRuYV9ibyAqYm8pCit7CisJc3RydWN0 IGV0bmFfY21kX3N0cmVhbV9wcml2ICpwcml2ID0gZXRuYV9jbWRfc3RyZWFtX3ByaXYoc3RyZWFt KTsKKwl1aW50MzJfdCBpZHg7CisKKwlpZHggPSBBUFBFTkQoJnByaXYtPnN1Ym1pdCwgYm9zKTsK KwlpZHggPSBBUFBFTkQocHJpdiwgYm9zKTsKKworCXByaXYtPnN1Ym1pdC5ib3NbaWR4XS5mbGFn cyA9IDA7CisJcHJpdi0+c3VibWl0LmJvc1tpZHhdLmhhbmRsZSA9IGJvLT5oYW5kbGU7CisKKwlw cml2LT5ib3NbaWR4XSA9IGV0bmFfYm9fcmVmKGJvKTsKKworCXJldHVybiBpZHg7Cit9CisKKy8q IGFkZCAoaWYgbmVlZGVkKSBibywgcmV0dXJuIGlkeDogKi8KK3N0YXRpYyB1aW50MzJfdCBibzJp ZHgoc3RydWN0IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtLCBzdHJ1Y3QgZXRuYV9ibyAqYm8sCisJ CXVpbnQzMl90IGZsYWdzKQoreworCXN0cnVjdCBldG5hX2NtZF9zdHJlYW1fcHJpdiAqcHJpdiA9 IGV0bmFfY21kX3N0cmVhbV9wcml2KHN0cmVhbSk7CisJdWludDMyX3QgaWR4OworCisJcHRocmVh ZF9tdXRleF9sb2NrKCZpZHhfbG9jayk7CisKKwlpZiAoIWJvLT5jdXJyZW50X3N0cmVhbSkgewor CQlpZHggPSBhcHBlbmRfYm8oc3RyZWFtLCBibyk7CisJCWJvLT5jdXJyZW50X3N0cmVhbSA9IHN0 cmVhbTsKKwkJYm8tPmlkeCA9IGlkeDsKKwl9IGVsc2UgaWYgKGJvLT5jdXJyZW50X3N0cmVhbSA9 PSBzdHJlYW0pIHsKKwkJaWR4ID0gYm8tPmlkeDsKKwl9IGVsc2UgeworCQkvKiBzbG93LXBhdGg6 ICovCisJCWZvciAoaWR4ID0gMDsgaWR4IDwgcHJpdi0+bnJfYm9zOyBpZHgrKykKKwkJCWlmIChw cml2LT5ib3NbaWR4XSA9PSBibykKKwkJCQlicmVhazsKKwkJaWYgKGlkeCA9PSBwcml2LT5ucl9i b3MpIHsKKwkJCS8qIG5vdCBmb3VuZCAqLworCQkJaWR4ID0gYXBwZW5kX2JvKHN0cmVhbSwgYm8p OworCQl9CisJfQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZpZHhfbG9jayk7CisKKwlpZiAoZmxh Z3MgJiBFVE5BX1JFTE9DX1JFQUQpCisJCXByaXYtPnN1Ym1pdC5ib3NbaWR4XS5mbGFncyB8PSBF VE5BX1NVQk1JVF9CT19SRUFEOworCWlmIChmbGFncyAmIEVUTkFfUkVMT0NfV1JJVEUpCisJCXBy aXYtPnN1Ym1pdC5ib3NbaWR4XS5mbGFncyB8PSBFVE5BX1NVQk1JVF9CT19XUklURTsKKworCXJl dHVybiBpZHg7Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0g KnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZXRuYV9jbWRfc3RyZWFtX3ByaXYgKnByaXYgPSBldG5hX2Nt ZF9zdHJlYW1fcHJpdihzdHJlYW0pOworCWludCByZXQsIGlkID0gcHJpdi0+cGlwZS0+aWQ7CisJ c3RydWN0IGV0bmFfZ3B1ICpncHUgPSBwcml2LT5waXBlLT5ncHU7CisKKwlzdHJ1Y3QgZHJtX2V0 bmF2aXZfZ2VtX3N1Ym1pdCByZXEgPSB7CisJCS5waXBlID0gZ3B1LT5jb3JlLAorCQkuZXhlY19z dGF0ZSA9IGlkLAorCQkuYm9zID0gVk9JRDJVNjQocHJpdi0+c3VibWl0LmJvcyksCisJCS5ucl9i b3MgPSBwcml2LT5zdWJtaXQubnJfYm9zLAorCQkucmVsb2NzID0gVk9JRDJVNjQocHJpdi0+c3Vi bWl0LnJlbG9jcyksCisJCS5ucl9yZWxvY3MgPSBwcml2LT5zdWJtaXQubnJfcmVsb2NzLAorCQku c3RyZWFtID0gVk9JRDJVNjQoc3RyZWFtLT5idWZmZXIpLAorCQkuc3RyZWFtX3NpemUgPSBzdHJl YW0tPm9mZnNldCAqIDQsIC8qIGluIGJ5dGVzICovCisJfTsKKworCXJldCA9IGRybUNvbW1hbmRX cml0ZVJlYWQoZ3B1LT5kZXYtPmZkLCBEUk1fRVROQVZJVl9HRU1fU1VCTUlULAorCQkJJnJlcSwg c2l6ZW9mKHJlcSkpOworCisJaWYgKHJldCkKKwkJRVJST1JfTVNHKCJzdWJtaXQgZmFpbGVkOiAl ZCAoJXMpIiwgcmV0LCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpdi0+bGFzdF90aW1l c3RhbXAgPSByZXEuZmVuY2U7CisKKwlmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgcHJpdi0+bnJf Ym9zOyBpKyspIHsKKwkJc3RydWN0IGV0bmFfYm8gKmJvID0gcHJpdi0+Ym9zW2ldOworCisJCWJv LT5jdXJyZW50X3N0cmVhbSA9IE5VTEw7CisJCWV0bmFfYm9fZGVsKGJvKTsKKwl9Cit9CisKK3Zv aWQgZXRuYV9jbWRfc3RyZWFtX2ZsdXNoKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSkK K3sKKwlmbHVzaChzdHJlYW0pOworCXJlc2V0X2J1ZmZlcihzdHJlYW0pOworfQorCit2b2lkIGV0 bmFfY21kX3N0cmVhbV9maW5pc2goc3RydWN0IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtKQorewor CXN0cnVjdCBldG5hX2NtZF9zdHJlYW1fcHJpdiAqcHJpdiA9IGV0bmFfY21kX3N0cmVhbV9wcml2 KHN0cmVhbSk7CisKKwlmbHVzaChzdHJlYW0pOworCWV0bmFfcGlwZV93YWl0KHByaXYtPnBpcGUs IHByaXYtPmxhc3RfdGltZXN0YW1wLCA1MDAwKTsKKwlyZXNldF9idWZmZXIoc3RyZWFtKTsKK30K Kwordm9pZCBldG5hX2NtZF9zdHJlYW1fcmVsb2Moc3RydWN0IGV0bmFfY21kX3N0cmVhbSAqc3Ry ZWFtLCBjb25zdCBzdHJ1Y3QgZXRuYV9yZWxvYyAqcikKK3sKKwlzdHJ1Y3QgZXRuYV9jbWRfc3Ry ZWFtX3ByaXYgKnByaXYgPSBldG5hX2NtZF9zdHJlYW1fcHJpdihzdHJlYW0pOworCXN0cnVjdCBk cm1fZXRuYXZpdl9nZW1fc3VibWl0X3JlbG9jICpyZWxvYzsKKwl1aW50MzJfdCBpZHggPSBBUFBF TkQoJnByaXYtPnN1Ym1pdCwgcmVsb2NzKTsKKwl1aW50MzJfdCBhZGRyID0gMDsKKworCXJlbG9j ID0gJnByaXYtPnN1Ym1pdC5yZWxvY3NbaWR4XTsKKworCXJlbG9jLT5yZWxvY19pZHggPSBibzJp ZHgoc3RyZWFtLCByLT5ibywgci0+ZmxhZ3MpOworCXJlbG9jLT5yZWxvY19vZmZzZXQgPSByLT5v ZmZzZXQ7CisJcmVsb2MtPnN1Ym1pdF9vZmZzZXQgPSBzdHJlYW0tPm9mZnNldCAqIDQ7IC8qIGlu IGJ5dGVzICovCisJcmVsb2MtPmZsYWdzID0gMDsKKworCWV0bmFfY21kX3N0cmVhbV9lbWl0KHN0 cmVhbSwgYWRkcik7Cit9CmRpZmYgLS1naXQgYS9ldG5hdml2L2V0bmF2aXZfZGV2aWNlLmMgYi9l dG5hdml2L2V0bmF2aXZfZGV2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZjk1NGNhNAotLS0gL2Rldi9udWxsCisrKyBiL2V0bmF2aXYvZXRuYXZpdl9kZXZpY2UuYwpA QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEV0bmF2aXYgUHJvamVj dAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogICAgQ2hyaXN0aWFuIEdtZWluZXIgPGNocmlzdGlhbi5nbWVpbmVyQGdtYWls LmNvbT4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgor I2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4K KyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8 c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lu Y2x1ZGUgPHB0aHJlYWQuaD4KKworI2luY2x1ZGUgPHhmODZkcm0uaD4KKyNpbmNsdWRlIDx4Zjg2 YXRvbWljLmg+CisKKyNpbmNsdWRlICJldG5hdml2X3ByaXYuaCIKKyNpbmNsdWRlICJldG5hdml2 X2RybWlmLmgiCisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgdGFibGVfbG9jayA9IFBUSFJFQURf TVVURVhfSU5JVElBTElaRVI7CisKK3N0cnVjdCBldG5hX2RldmljZSAqZXRuYV9kZXZpY2VfbmV3 KGludCBmZCkKK3sKKwlzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldiA9IGNhbGxvYyhzaXplb2YoKmRl diksIDEpOworCisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCisJYXRvbWljX3NldCgmZGV2 LT5yZWZjbnQsIDEpOworCWRldi0+ZmQgPSBmZDsKKwlkZXYtPmhhbmRsZV90YWJsZSA9IGRybUhh c2hDcmVhdGUoKTsKKwlkZXYtPm5hbWVfdGFibGUgPSBkcm1IYXNoQ3JlYXRlKCk7CisJZXRuYV9i b19jYWNoZV9pbml0KCZkZXYtPmJvX2NhY2hlKTsKKworCXJldHVybiBkZXY7Cit9CisKK3N0cnVj dCBldG5hX2RldmljZSAqZXRuYV9kZXZpY2VfcmVmKHN0cnVjdCBldG5hX2RldmljZSAqZGV2KQor eworCWF0b21pY19pbmMoJmRldi0+cmVmY250KTsKKworCXJldHVybiBkZXY7Cit9CisKK3N0YXRp YyB2b2lkIGV0bmFfZGV2aWNlX2RlbF9pbXBsKHN0cnVjdCBldG5hX2RldmljZSAqZGV2KQorewor CWV0bmFfYm9fY2FjaGVfY2xlYW51cCgmZGV2LT5ib19jYWNoZSwgMCk7CisJZHJtSGFzaERlc3Ry b3koZGV2LT5oYW5kbGVfdGFibGUpOworCWRybUhhc2hEZXN0cm95KGRldi0+bmFtZV90YWJsZSk7 CisKKwlmcmVlKGRldik7Cit9CisKK2RybV9wcml2YXRlIHZvaWQgZXRuYV9kZXZpY2VfZGVsX2xv Y2tlZChzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rl c3QoJmRldi0+cmVmY250KSkKKwkJcmV0dXJuOworCisJZXRuYV9kZXZpY2VfZGVsX2ltcGwoZGV2 KTsKK30KKwordm9pZCBldG5hX2RldmljZV9kZWwoc3RydWN0IGV0bmFfZGV2aWNlICpkZXYpCit7 CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPnJlZmNudCkpCisJCXJldHVybjsKKwor CXB0aHJlYWRfbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CisJZXRuYV9kZXZpY2VfZGVsX2ltcGwo ZGV2KTsKKwlwdGhyZWFkX211dGV4X3VubG9jaygmdGFibGVfbG9jayk7Cit9CmRpZmYgLS1naXQg YS9ldG5hdml2L2V0bmF2aXZfZHJtLmggYi9ldG5hdml2L2V0bmF2aXZfZHJtLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyMjQxYwotLS0gL2Rldi9udWxsCisrKyBiL2V0 bmF2aXYvZXRuYXZpdl9kcm0uaApAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAo QykgMjAxNSBFdG5hdml2IFByb2plY3QKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMg cHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisg KiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisK KyNpZm5kZWYgX19FVE5BVklWX0RSTV9IX18KKyNkZWZpbmUgX19FVE5BVklWX0RSTV9IX18KKwor I2luY2x1ZGUgImRybS5oIgorCisvKiBQbGVhc2Ugbm90ZSB0aGF0IG1vZGlmaWNhdGlvbnMgdG8g YWxsIHN0cnVjdHMgZGVmaW5lZCBoZXJlIGFyZQorICogc3ViamVjdCB0byBiYWNrd2FyZHMtY29t cGF0aWJpbGl0eSBjb25zdHJhaW50czoKKyAqICAxKSBEbyBub3QgdXNlIHBvaW50ZXJzLCB1c2Ug X191NjQgaW5zdGVhZCBmb3IgMzIgYml0IC8gNjQgYml0CisgKiAgICAgdXNlci9rZXJuZWwgY29t cGF0aWJpbGl0eQorICogIDIpIEtlZXAgZmllbGRzIGFsaWduZWQgdG8gdGhlaXIgc2l6ZQorICog IDMpIEJlY2F1c2Ugb2YgaG93IGRybV9pb2N0bCgpIHdvcmtzLCB3ZSBjYW4gYWRkIG5ldyBmaWVs ZHMgYXQKKyAqICAgICB0aGUgZW5kIG9mIGFuIGlvY3RsIGlmIHNvbWUgY2FyZSBpcyB0YWtlbjog ZHJtX2lvY3RsKCkgd2lsbAorICogICAgIHplcm8gb3V0IHRoZSBuZXcgZmllbGRzIGF0IHRoZSB0 YWlsIG9mIHRoZSBpb2N0bCwgc28gYSB6ZXJvCisgKiAgICAgdmFsdWUgc2hvdWxkIGhhdmUgYSBi YWNrd2FyZHMgY29tcGF0aWJsZSBtZWFuaW5nLiAgQW5kIGZvcgorICogICAgIG91dHB1dCBwYXJh bXMsIHVzZXJzcGFjZSB3b24ndCBzZWUgdGhlIG5ld2x5IGFkZGVkIG91dHB1dAorICogICAgIGZp ZWxkcy4uIHNvIHRoYXQgaGFzIHRvIGJlIHNvbWVob3cgb2suCisgKi8KKworLyogdGltZW91dHMg YXJlIHNwZWNpZmllZCBpbiBjbG9jay1tb25vdG9uaWMgYWJzb2x1dGUgdGltZXMgKHRvIHNpbXBs aWZ5CisgKiByZXN0YXJ0aW5nIGludGVycnVwdGVkIGlvY3RscykuICBUaGUgZm9sbG93aW5nIHN0 cnVjdCBpcyBsb2dpY2FsbHkgdGhlCisgKiBzYW1lIGFzICdzdHJ1Y3QgdGltZXNwZWMnIGJ1dCAz Mi82NGIgQUJJIHNhZmUuCisgKi8KK3N0cnVjdCBkcm1fZXRuYXZpdl90aW1lc3BlYyB7CisJX19z NjQgdHZfc2VjOyAgICAgICAgICAvKiBzZWNvbmRzICovCisJX19zNjQgdHZfbnNlYzsgICAgICAg ICAvKiBuYW5vc2Vjb25kcyAqLworfTsKKworI2RlZmluZSBFVE5BVklWX1BBUkFNX0dQVV9NT0RF TCAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgRVROQVZJVl9QQVJBTV9HUFVfUkVW SVNJT04gICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIEVUTkFWSVZfUEFSQU1fR1BVX0ZF QVRVUkVTXzAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBFVE5BVklWX1BBUkFNX0dQVV9G RUFUVVJFU18xICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgRVROQVZJVl9QQVJBTV9HUFVf RkVBVFVSRVNfMiAgICAgICAgICAgICAgICAweDA1CisjZGVmaW5lIEVUTkFWSVZfUEFSQU1fR1BV X0ZFQVRVUkVTXzMgICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBFVE5BVklWX1BBUkFNX0dQ VV9GRUFUVVJFU180ICAgICAgICAgICAgICAgIDB4MDcKKyNkZWZpbmUgRVROQVZJVl9QQVJBTV9H UFVfRkVBVFVSRVNfNSAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIEVUTkFWSVZfUEFSQU1f R1BVX0ZFQVRVUkVTXzYgICAgICAgICAgICAgICAgMHgwOQorCisjZGVmaW5lIEVUTkFWSVZfUEFS QU1fR1BVX1NUUkVBTV9DT1VOVCAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBFVE5BVklWX1BB UkFNX0dQVV9SRUdJU1RFUl9NQVggICAgICAgICAgICAgIDB4MTEKKyNkZWZpbmUgRVROQVZJVl9Q QVJBTV9HUFVfVEhSRUFEX0NPVU5UICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIEVUTkFWSVZf UEFSQU1fR1BVX1ZFUlRFWF9DQUNIRV9TSVpFICAgICAgICAgMHgxMworI2RlZmluZSBFVE5BVklW X1BBUkFNX0dQVV9TSEFERVJfQ09SRV9DT1VOVCAgICAgICAgIDB4MTQKKyNkZWZpbmUgRVROQVZJ Vl9QQVJBTV9HUFVfUElYRUxfUElQRVMgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIEVUTkFW SVZfUEFSQU1fR1BVX1ZFUlRFWF9PVVRQVVRfQlVGRkVSX1NJWkUgMHgxNgorI2RlZmluZSBFVE5B VklWX1BBUkFNX0dQVV9CVUZGRVJfU0laRSAgICAgICAgICAgICAgIDB4MTcKKyNkZWZpbmUgRVRO QVZJVl9QQVJBTV9HUFVfSU5TVFJVQ1RJT05fQ09VTlQgICAgICAgICAweDE4CisjZGVmaW5lIEVU TkFWSVZfUEFSQU1fR1BVX05VTV9DT05TVEFOVFMgICAgICAgICAgICAgMHgxOQorI2RlZmluZSBF VE5BVklWX1BBUkFNX0dQVV9OVU1fVkFSWUlOR1MgICAgICAgICAgICAgIDB4MWEKKworI2RlZmlu ZSBFVE5BX01BWF9QSVBFUyA0CisKK3N0cnVjdCBkcm1fZXRuYXZpdl9wYXJhbSB7CisJX191MzIg cGlwZTsgICAgICAgICAgIC8qIGluICovCisJX191MzIgcGFyYW07ICAgICAgICAgIC8qIGluLCBF VE5BVklWX1BBUkFNX3ggKi8KKwlfX3U2NCB2YWx1ZTsgICAgICAgICAgLyogb3V0IChnZXRfcGFy YW0pIG9yIGluIChzZXRfcGFyYW0pICovCit9OworCisvKgorICogR0VNIGJ1ZmZlcnM6CisgKi8K KworI2RlZmluZSBFVE5BX0JPX0NBQ0hFX01BU0sgICAweDAwMGYwMDAwCisvKiBjYWNoZSBtb2Rl cyAqLworI2RlZmluZSBFVE5BX0JPX0NBQ0hFRCAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEVU TkFfQk9fV0MgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRVROQV9CT19VTkNBQ0hFRCAg ICAgMHgwMDA0MDAwMAorLyogbWFwIGZsYWdzICovCisjZGVmaW5lIEVUTkFfQk9fRk9SQ0VfTU1V ICAgIDB4MDAxMDAwMDAKKworc3RydWN0IGRybV9ldG5hdml2X2dlbV9uZXcgeworCV9fdTY0IHNp emU7ICAgICAgICAgICAvKiBpbiAqLworCV9fdTMyIGZsYWdzOyAgICAgICAgICAvKiBpbiwgbWFz ayBvZiBFVE5BX0JPX3ggKi8KKwlfX3UzMiBoYW5kbGU7ICAgICAgICAgLyogb3V0ICovCit9Owor CitzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX2luZm8geworCV9fdTMyIGhhbmRsZTsgICAgICAgICAv KiBpbiAqLworCV9fdTMyIHBhZDsKKwlfX3U2NCBvZmZzZXQ7ICAgICAgICAgLyogb3V0LCBvZmZz ZXQgdG8gcGFzcyB0byBtbWFwKCkgKi8KK307CisKKyNkZWZpbmUgRVROQV9QUkVQX1JFQUQgICAg ICAgIDB4MDEKKyNkZWZpbmUgRVROQV9QUkVQX1dSSVRFICAgICAgIDB4MDIKKyNkZWZpbmUgRVRO QV9QUkVQX05PU1lOQyAgICAgIDB4MDQKKworc3RydWN0IGRybV9ldG5hdml2X2dlbV9jcHVfcHJl cCB7CisJX191MzIgaGFuZGxlOyAgICAgICAgIC8qIGluICovCisJX191MzIgb3A7ICAgICAgICAg ICAgIC8qIGluLCBtYXNrIG9mIEVUTkFfUFJFUF94ICovCisJc3RydWN0IGRybV9ldG5hdml2X3Rp bWVzcGVjIHRpbWVvdXQ7ICAgLyogaW4gKi8KK307CisKK3N0cnVjdCBkcm1fZXRuYXZpdl9nZW1f Y3B1X2ZpbmkgeworCV9fdTMyIGhhbmRsZTsgICAgICAgICAvKiBpbiAqLworCV9fdTMyIGZsYWdz OyAgICAgICAgICAvKiBpbiwgcGxhY2Vob2xkZXIgZm9yIG5vdywgbm8gZGVmaW5lZCB2YWx1ZXMg Ki8KK307CisKKy8qCisgKiBDbWRzdHJlYW0gU3VibWlzc2lvbjoKKyAqLworCisvKiBUaGUgdmFs dWUgd3JpdHRlbiBpbnRvIHRoZSBjbWRzdHJlYW0gaXMgbG9naWNhbGx5OgorICogcmVsb2NidWYt PmdwdWFkZHIgKyByZWxvY19vZmZzZXQKKyAqCisgKiBOT1RFIHRoYXQgcmVsb2MncyBtdXN0IGJl IHNvcnRlZCBieSBvcmRlciBvZiBpbmNyZWFzaW5nIHN1Ym1pdF9vZmZzZXQsCisgKiBvdGhlcndp c2UgRUlOVkFMLgorICovCitzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX3N1Ym1pdF9yZWxvYyB7CisJ X191MzIgc3VibWl0X29mZnNldDsgIC8qIGluLCBvZmZzZXQgZnJvbSBzdWJtaXRfYm8gKi8KKwlf X3UzMiByZWxvY19pZHg7ICAgICAgLyogaW4sIGluZGV4IG9mIHJlbG9jX2JvIGJ1ZmZlciAqLwor CV9fdTY0IHJlbG9jX29mZnNldDsgICAvKiBpbiwgb2Zmc2V0IGZyb20gc3RhcnQgb2YgcmVsb2Nf Ym8gKi8KKwlfX3UzMiBmbGFnczsgICAgICAgICAgLyogaW4sIHBsYWNlaG9sZGVyIGZvciBub3cs IG5vIGRlZmluZWQgdmFsdWVzICovCit9OworCisvKiBFYWNoIGJ1ZmZlciByZWZlcmVuY2VkIGVs c2V3aGVyZSBpbiB0aGUgY21kc3RyZWFtIHN1Ym1pdCAoaWUuIHRoZQorICogY21kc3RyZWFtIGJ1 ZmZlcihzKSB0aGVtc2VsdmVzIG9yIHJlbG9jIGVudHJpZXMpIGhhcyBvbmUgKGFuZCBvbmx5Cisg KiBvbmUpIGVudHJ5IGluIHRoZSBzdWJtaXQtPmJvc1tdIHRhYmxlLgorICoKKyAqIEFzIGEgb3B0 aW1pemF0aW9uLCB0aGUgY3VycmVudCBidWZmZXIgKGdwdSB2aXJ0dWFsIGFkZHJlc3MpIGNhbiBi ZQorICogcGFzc2VkIGJhY2sgdGhyb3VnaCB0aGUgJ3ByZXN1bWVkJyBmaWVsZC4gIElmIG9uIGEg c3Vic2VxdWVudCByZWxvYywKKyAqIHVzZXJzcGFjZSBwYXNzZXMgYmFjayBhICdwcmVzdW1lZCcg YWRkcmVzcyB0aGF0IGlzIHN0aWxsIHZhbGlkLAorICogdGhlbiBwYXRjaGluZyB0aGUgY21kc3Ry ZWFtIGZvciB0aGlzIGVudHJ5IGlzIHNraXBwZWQuICBUaGlzIGNhbgorICogYXZvaWQga2VybmVs IG5lZWRpbmcgdG8gbWFwL2FjY2VzcyB0aGUgY21kc3RyZWFtIGJvIGluIHRoZSBjb21tb24KKyAq IGNhc2UuCisgKi8KKyNkZWZpbmUgRVROQV9TVUJNSVRfQk9fUkVBRCAgICAgICAgICAgICAweDAw MDEKKyNkZWZpbmUgRVROQV9TVUJNSVRfQk9fV1JJVEUgICAgICAgICAgICAweDAwMDIKK3N0cnVj dCBkcm1fZXRuYXZpdl9nZW1fc3VibWl0X2JvIHsKKwlfX3UzMiBmbGFnczsgICAgICAgICAgLyog aW4sIG1hc2sgb2YgRVROQV9TVUJNSVRfQk9feCAqLworCV9fdTMyIGhhbmRsZTsgICAgICAgICAv KiBpbiwgR0VNIGhhbmRsZSAqLworCV9fdTY0IHByZXN1bWVkOyAgICAgICAvKiBpbi9vdXQsIHBy ZXN1bWVkIGJ1ZmZlciBhZGRyZXNzICovCit9OworCisvKiBFYWNoIGNtZHN0cmVhbSBzdWJtaXQg Y29uc2lzdHMgb2YgYSB0YWJsZSBvZiBidWZmZXJzIGludm9sdmVkLCBhbmQKKyAqIG9uZSBvciBt b3JlIGNtZHN0cmVhbSBidWZmZXJzLiAgVGhpcyBhbGxvd3MgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1 dGlvbgorICogKGNvbnRleHQtcmVzdG9yZSksIGFuZCBJQiBidWZmZXJzIG5lZWRlZCBmb3IgcGVy IHRpbGUvYmluIGRyYXcgY21kcy4KKyAqLworI2RlZmluZSBFVE5BX1BJUEVfM0QgICAgICAweDAw CisjZGVmaW5lIEVUTkFfUElQRV8yRCAgICAgIDB4MDEKKyNkZWZpbmUgRVROQV9QSVBFX1ZHICAg ICAgMHgwMgorc3RydWN0IGRybV9ldG5hdml2X2dlbV9zdWJtaXQgeworCV9fdTMyIGZlbmNlOyAg ICAgICAgICAvKiBvdXQgKi8KKwlfX3UzMiBwaXBlOyAgICAgICAgICAgLyogaW4gKi8KKwlfX3Uz MiBleGVjX3N0YXRlOyAgICAgLyogaW4sIGluaXRpYWwgZXhlY3V0aW9uIHN0YXRlIChFVE5BX1BJ UEVfeCkgKi8KKwlfX3UzMiBucl9ib3M7ICAgICAgICAgLyogaW4sIG51bWJlciBvZiBzdWJtaXRf Ym8ncyAqLworCV9fdTMyIG5yX3JlbG9jczsgICAgICAvKiBpbiwgbnVtYmVyIG9mIHN1Ym1pdF9y ZWxvYydzICovCisJX191MzIgc3RyZWFtX3NpemU7ICAgIC8qIGluLCBjbWRzdHJlYW0gc2l6ZSAq LworCV9fdTY0IGJvczsgICAgICAgICAgICAvKiBpbiwgcHRyIHRvIGFycmF5IG9mIHN1Ym1pdF9i bydzICovCisJX191NjQgcmVsb2NzOyAgICAgICAgIC8qIGluLCBwdHIgdG8gYXJyYXkgb2Ygc3Vi bWl0X3JlbG9jJ3MgKi8KKwlfX3U2NCBzdHJlYW07ICAgICAgICAgLyogaW4sIHB0ciB0byBjbWRz dHJlYW0gKi8KK307CisKKy8qIFRoZSBub3JtYWwgd2F5IHRvIHN5bmNocm9uaXplIHdpdGggdGhl IEdQVSBpcyBqdXN0IHRvIENQVV9QUkVQIG9uCisgKiBhIGJ1ZmZlciBpZiB5b3UgbmVlZCB0byBh Y2Nlc3MgaXQgZnJvbSB0aGUgQ1BVIChvdGhlciBjbWRzdHJlYW0KKyAqIHN1Ym1pc3Npb24gZnJv bSBzYW1lIG9yIG90aGVyIGNvbnRleHRzLCBQQUdFX0ZMSVAgaW9jdGwsIGV0YywgYWxsCisgKiBo YW5kbGUgdGhlIHJlcXVpcmVkIHN5bmNocm9uaXphdGlvbiB1bmRlciB0aGUgaG9vZCkuICBUaGlz IGlvY3RsCisgKiBtYWlubHkganVzdCBleGlzdHMgYXMgYSB3YXkgdG8gaW1wbGVtZW50IHRoZSBn YWxsaXVtIHBpcGVfZmVuY2UKKyAqIEFQSXMgd2l0aG91dCByZXF1aXJpbmcgYSBkdW1teSBibyB0 byBzeW5jaHJvbml6ZSBvbi4KKyAqLworI2RlZmluZSBFVE5BX1dBSVRfTk9OQkxPQ0sgICAgICAw eDAxCitzdHJ1Y3QgZHJtX2V0bmF2aXZfd2FpdF9mZW5jZSB7CisJX191MzIgcGlwZTsgICAgICAg ICAgIC8qIGluICovCisJX191MzIgZmVuY2U7ICAgICAgICAgIC8qIGluICovCisJX191MzIgZmxh Z3M7ICAgICAgICAgIC8qIGluLCBtYXNrIG9mIEVUTkFfV0FJVF94ICAqLworCV9fdTMyIHBhZDsK KwlzdHJ1Y3QgZHJtX2V0bmF2aXZfdGltZXNwZWMgdGltZW91dDsgICAvKiBpbiAqLworfTsKKwor I2RlZmluZSBFVE5BX1VTRVJQVFJfUkVBRAkweDAxCisjZGVmaW5lIEVUTkFfVVNFUlBUUl9XUklU RQkweDAyCitzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX3VzZXJwdHIgeworCV9fdTY0IHVzZXJfcHRy OwkvKiBpbiwgcGFnZSBhbGlnbmVkIHVzZXIgcG9pbnRlciAqLworCV9fdTY0IHVzZXJfc2l6ZTsJ LyogaW4sIHBhZ2UgYWxpZ25lZCB1c2VyIHNpemUgKi8KKwlfX3UzMiBmbGFnczsJCS8qIGluLCBm bGFncyAqLworCV9fdTMyIGhhbmRsZTsJLyogb3V0LCBub24temVybyBoYW5kbGUgKi8KK307CisK K3N0cnVjdCBkcm1fZXRuYXZpdl9nZW1fd2FpdCB7CisJX191MzIgcGlwZTsJCQkJLyogaW4gKi8K KwlfX3UzMiBoYW5kbGU7CQkJCS8qIGluLCBibyB0byBiZSB3YWl0ZWQgZm9yICovCisJX191MzIg ZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluLCBtYXNrIG9mIEVUTkFfV0FJ VF94ICAqLworCV9fdTMyIHBhZDsKKwlzdHJ1Y3QgZHJtX2V0bmF2aXZfdGltZXNwZWMgdGltZW91 dDsJLyogaW4gKi8KK307CisKKyNkZWZpbmUgRFJNX0VUTkFWSVZfR0VUX1BBUkFNICAgICAgICAg IDB4MDAKKy8qIHBsYWNlaG9sZGVyOgorI2RlZmluZSBEUk1fRVROQVZJVl9TRVRfUEFSQU0gICAg ICAgICAgMHgwMQorICovCisjZGVmaW5lIERSTV9FVE5BVklWX0dFTV9ORVcgICAgICAgICAgICAw eDAyCisjZGVmaW5lIERSTV9FVE5BVklWX0dFTV9JTkZPICAgICAgICAgICAweDAzCisjZGVmaW5l IERSTV9FVE5BVklWX0dFTV9DUFVfUFJFUCAgICAgICAweDA0CisjZGVmaW5lIERSTV9FVE5BVklW X0dFTV9DUFVfRklOSSAgICAgICAweDA1CisjZGVmaW5lIERSTV9FVE5BVklWX0dFTV9TVUJNSVQg ICAgICAgICAweDA2CisjZGVmaW5lIERSTV9FVE5BVklWX1dBSVRfRkVOQ0UgICAgICAgICAweDA3 CisjZGVmaW5lIERSTV9FVE5BVklWX0dFTV9VU0VSUFRSICAgICAgICAweDA4CisjZGVmaW5lIERS TV9FVE5BVklWX0dFTV9XQUlUICAgICAgICAgICAweDA5CisjZGVmaW5lIERSTV9FVE5BVklWX05V TV9JT0NUTFMgICAgICAgICAweDBhCisKKyNkZWZpbmUgRFJNX0lPQ1RMX0VUTkFWSVZfR0VUX1BB UkFNICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fRVROQVZJVl9HRVRfUEFSQU0s IHN0cnVjdCBkcm1fZXRuYXZpdl9wYXJhbSkKKyNkZWZpbmUgRFJNX0lPQ1RMX0VUTkFWSVZfR0VN X05FVyAgICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fRVROQVZJVl9HRU1fTkVX LCBzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX25ldykKKyNkZWZpbmUgRFJNX0lPQ1RMX0VUTkFWSVZf R0VNX0lORk8gICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fRVROQVZJVl9HRU1f SU5GTywgc3RydWN0IGRybV9ldG5hdml2X2dlbV9pbmZvKQorI2RlZmluZSBEUk1fSU9DVExfRVRO QVZJVl9HRU1fQ1BVX1BSRVAgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0VUTkFWSVZf R0VNX0NQVV9QUkVQLCBzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX2NwdV9wcmVwKQorI2RlZmluZSBE Uk1fSU9DVExfRVROQVZJVl9HRU1fQ1BVX0ZJTkkgRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsg RFJNX0VUTkFWSVZfR0VNX0NQVV9GSU5JLCBzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX2NwdV9maW5p KQorI2RlZmluZSBEUk1fSU9DVExfRVROQVZJVl9HRU1fU1VCTUlUICAgRFJNX0lPV1IoRFJNX0NP TU1BTkRfQkFTRSArIERSTV9FVE5BVklWX0dFTV9TVUJNSVQsIHN0cnVjdCBkcm1fZXRuYXZpdl9n ZW1fc3VibWl0KQorI2RlZmluZSBEUk1fSU9DVExfRVROQVZJVl9XQUlUX0ZFTkNFICAgRFJNX0lP VyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX0VUTkFWSVZfV0FJVF9GRU5DRSwgc3RydWN0IGRybV9l dG5hdml2X3dhaXRfZmVuY2UpCisjZGVmaW5lIERSTV9JT0NUTF9FVE5BVklWX0dFTV9VU0VSUFRS ICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0VUTkFWSVZfR0VNX1VTRVJQVFIsIHN0 cnVjdCBkcm1fZXRuYXZpdl9nZW1fdXNlcnB0cikKKyNkZWZpbmUgRFJNX0lPQ1RMX0VUTkFWSVZf R0VNX1dBSVQgICAgIERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSArIERSTV9FVE5BVklWX0dFTV9X QUlULCBzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX3dhaXQpCisKKyNlbmRpZiAvKiBfX0VUTkFWSVZf RFJNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZXRuYXZpdi9ldG5hdml2X2RybWlmLmggYi9ldG5hdml2 L2V0bmF2aXZfZHJtaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Nzli MTZhCi0tLSAvZGV2L251bGwKKysrIGIvZXRuYXZpdi9ldG5hdml2X2RybWlmLmgKQEAgLTAsMCAr MSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBFdG5hdml2IFByb2plY3QK KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H IEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0 aG9yczoKKyAqICAgIENocmlzdGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4uZ21laW5lckBnbWFpbC5j b20+CisgKi8KKworI2lmbmRlZiBFVE5BVklWX0RSTUlGX0hfCisjZGVmaW5lIEVUTkFWSVZfRFJN SUZfSF8KKworI2luY2x1ZGUgPHhmODZkcm0uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworc3Ry dWN0IGV0bmFfYm87CitzdHJ1Y3QgZXRuYV9waXBlOworc3RydWN0IGV0bmFfZ3B1Oworc3RydWN0 IGV0bmFfZGV2aWNlOworc3RydWN0IGV0bmFfY21kX3N0cmVhbTsKKworZW51bSBldG5hX3BpcGVf aWQgeworCUVUTkFfUElQRV8zRCA9IDAsCisJRVROQV9QSVBFXzJEID0gMSwKKwlFVE5BX1BJUEVf VkcgPSAyLAorCUVUTkFfUElQRV9NQVgKK307CisKK2VudW0gZXRuYV9wYXJhbV9pZCB7CisJRVRO QV9HUFVfTU9ERUwgICAgICAgICAgICAgICAgICAgICA9IDB4MSwKKwlFVE5BX0dQVV9SRVZJU0lP TiAgICAgICAgICAgICAgICAgID0gMHgyLAorCUVUTkFfR1BVX0ZFQVRVUkVTXzAgICAgICAgICAg ICAgICAgPSAweDMsCisJRVROQV9HUFVfRkVBVFVSRVNfMSAgICAgICAgICAgICAgICA9IDB4NCwK KwlFVE5BX0dQVV9GRUFUVVJFU18yICAgICAgICAgICAgICAgID0gMHg1LAorCUVUTkFfR1BVX0ZF QVRVUkVTXzMgICAgICAgICAgICAgICAgPSAweDYsCisJRVROQV9HUFVfRkVBVFVSRVNfNCAgICAg ICAgICAgICAgICA9IDB4NywKKwlFVE5BX0dQVV9GRUFUVVJFU181ICAgICAgICAgICAgICAgID0g MHg4LAorCUVUTkFfR1BVX0ZFQVRVUkVTXzYgICAgICAgICAgICAgICAgPSAweDksCisKKwlFVE5B X0dQVV9TVFJFQU1fQ09VTlQgICAgICAgICAgICAgID0gMHgxMCwKKwlFVE5BX0dQVV9SRUdJU1RF Ul9NQVggICAgICAgICAgICAgID0gMHgxMSwKKwlFVE5BX0dQVV9USFJFQURfQ09VTlQgICAgICAg ICAgICAgID0gMHgxMiwKKwlFVE5BX0dQVV9WRVJURVhfQ0FDSEVfU0laRSAgICAgICAgID0gMHgx MywKKwlFVE5BX0dQVV9TSEFERVJfQ09SRV9DT1VOVCAgICAgICAgID0gMHgxNCwKKwlFVE5BX0dQ VV9QSVhFTF9QSVBFUyAgICAgICAgICAgICAgID0gMHgxNSwKKwlFVE5BX0dQVV9WRVJURVhfT1VU UFVUX0JVRkZFUl9TSVpFID0gMHgxNiwKKwlFVE5BX0dQVV9CVUZGRVJfU0laRSAgICAgICAgICAg ICAgID0gMHgxNywKKwlFVE5BX0dQVV9JTlNUUlVDVElPTl9DT1VOVCAgICAgICAgID0gMHgxOCwK KwlFVE5BX0dQVV9OVU1fQ09OU1RBTlRTICAgICAgICAgICAgID0gMHgxOSwKKwlFVE5BX0dQVV9O VU1fVkFSWUlOR1MgICAgICAgICAgICAgID0gMHgxYQorfTsKKworLyogYm8gZmxhZ3M6ICovCisj ZGVmaW5lIERSTV9FVE5BX0dFTV9DQUNIRV9DQUNIRUQgICAgICAgMHgwMDAxMDAwMAorI2RlZmlu ZSBEUk1fRVROQV9HRU1fQ0FDSEVfV0MgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRFJN X0VUTkFfR0VNX0NBQ0hFX1VOQ0FDSEVEICAgICAweDAwMDQwMDAwCisjZGVmaW5lIERSTV9FVE5B X0dFTV9DQUNIRV9NQVNLICAgICAgICAgMHgwMDBmMDAwMAorLyogbWFwIGZsYWdzICovCisjZGVm aW5lIERSTV9FVE5BX0dFTV9GT1JDRV9NTVUgICAgICAgICAgMHgwMDEwMDAwMAorCisvKiBibyBh Y2Nlc3MgZmxhZ3M6IChrZWVwIGFsaWduZWQgdG8gRVROQV9QUkVQX3gpICovCisjZGVmaW5lIERS TV9FVE5BX1BSRVBfUkVBRCAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBEUk1fRVROQV9QUkVQ X1dSSVRFICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgRFJNX0VUTkFfUFJFUF9OT1NZTkMgICAg ICAgICAgICAweDA0CisKKy8qIGRldmljZSBmdW5jdGlvbnM6CisgKi8KKworc3RydWN0IGV0bmFf ZGV2aWNlICpldG5hX2RldmljZV9uZXcoaW50IGZkKTsKK3N0cnVjdCBldG5hX2RldmljZSAqZXRu YV9kZXZpY2VfcmVmKHN0cnVjdCBldG5hX2RldmljZSAqZGV2KTsKK3ZvaWQgZXRuYV9kZXZpY2Vf ZGVsKHN0cnVjdCBldG5hX2RldmljZSAqZGV2KTsKKworLyogZ3B1IGZ1bmN0aW9uczoKKyAqLwor CitzdHJ1Y3QgZXRuYV9ncHUgKmV0bmFfZ3B1X25ldyhzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldiwg dW5zaWduZWQgaW50IGNvcmUpOwordm9pZCBldG5hX2dwdV9kZWwoc3RydWN0IGV0bmFfZ3B1ICpn cHUpOworaW50IGV0bmFfZ3B1X2dldF9wYXJhbShzdHJ1Y3QgZXRuYV9ncHUgKmdwdSwgZW51bSBl dG5hX3BhcmFtX2lkIHBhcmFtLAorCQl1aW50NjRfdCAqdmFsdWUpOworCisKKy8qIHBpcGUgZnVu Y3Rpb25zOgorICovCisKK3N0cnVjdCBldG5hX3BpcGUgKmV0bmFfcGlwZV9uZXcoc3RydWN0IGV0 bmFfZ3B1ICpncHUsIGVudW0gZXRuYV9waXBlX2lkIGlkKTsKK3ZvaWQgZXRuYV9waXBlX2RlbChz dHJ1Y3QgZXRuYV9waXBlICpwaXBlKTsKK2ludCBldG5hX3BpcGVfd2FpdChzdHJ1Y3QgZXRuYV9w aXBlICpwaXBlLCB1aW50MzJfdCB0aW1lc3RhbXAsIHVpbnQzMl90IG1zKTsKKworCisvKiBidWZm ZXItb2JqZWN0IGZ1bmN0aW9uczoKKyAqLworCitzdHJ1Y3QgZXRuYV9ibyAqZXRuYV9ib19uZXco c3RydWN0IGV0bmFfZGV2aWNlICpkZXYsCisJCXVpbnQzMl90IHNpemUsIHVpbnQzMl90IGZsYWdz KTsKK3N0cnVjdCBldG5hX2JvICpldG5hX2JvX2Zyb21faGFuZGxlKHN0cnVjdCBldG5hX2Rldmlj ZSAqZGV2LAorCQl1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IHNpemUpOworc3RydWN0IGV0bmFf Ym8gKmV0bmFfYm9fZnJvbV9uYW1lKHN0cnVjdCBldG5hX2RldmljZSAqZGV2LCB1aW50MzJfdCBu YW1lKTsKK3N0cnVjdCBldG5hX2JvICpldG5hX2JvX2Zyb21fZG1hYnVmKHN0cnVjdCBldG5hX2Rl dmljZSAqZGV2LCBpbnQgZmQpOworc3RydWN0IGV0bmFfYm8gKmV0bmFfYm9fcmVmKHN0cnVjdCBl dG5hX2JvICpibyk7Cit2b2lkIGV0bmFfYm9fZGVsKHN0cnVjdCBldG5hX2JvICpibyk7CitpbnQg ZXRuYV9ib19nZXRfbmFtZShzdHJ1Y3QgZXRuYV9ibyAqYm8sIHVpbnQzMl90ICpuYW1lKTsKK3Vp bnQzMl90IGV0bmFfYm9faGFuZGxlKHN0cnVjdCBldG5hX2JvICpibyk7CitpbnQgZXRuYV9ib19k bWFidWYoc3RydWN0IGV0bmFfYm8gKmJvKTsKK3VpbnQzMl90IGV0bmFfYm9fc2l6ZShzdHJ1Y3Qg ZXRuYV9ibyAqYm8pOwordm9pZCAqIGV0bmFfYm9fbWFwKHN0cnVjdCBldG5hX2JvICpibyk7Citp bnQgZXRuYV9ib19jcHVfcHJlcChzdHJ1Y3QgZXRuYV9ibyAqYm8sIHVpbnQzMl90IG9wKTsKK3Zv aWQgZXRuYV9ib19jcHVfZmluaShzdHJ1Y3QgZXRuYV9ibyAqYm8pOworCisKKy8qIGNtZCBzdHJl YW0gZnVuY3Rpb25zOgorICovCisKK3N0cnVjdCBldG5hX2NtZF9zdHJlYW0geworCXVpbnQzMl90 ICpidWZmZXI7CisJdWludDMyX3Qgb2Zmc2V0OwkvKiBpbiAzMi1iaXQgd29yZHMgKi8KKwl1aW50 MzJfdCBzaXplOwkJLyogaW4gMzItYml0IHdvcmRzICovCit9OworCitzdHJ1Y3QgZXRuYV9jbWRf c3RyZWFtICpldG5hX2NtZF9zdHJlYW1fbmV3KHN0cnVjdCBldG5hX3BpcGUgKnBpcGUsIHVpbnQz Ml90IHNpemUsCisJCXZvaWQgKCpyZXNldF9ub3RpZnkpKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0g KnN0cmVhbSwgdm9pZCAqcHJpdiksCisJCXZvaWQgKnByaXYpOwordm9pZCBldG5hX2NtZF9zdHJl YW1fZGVsKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSk7Cit1aW50MzJfdCBldG5hX2Nt ZF9zdHJlYW1fdGltZXN0YW1wKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSk7Cit2b2lk IGV0bmFfY21kX3N0cmVhbV9mbHVzaChzdHJ1Y3QgZXRuYV9jbWRfc3RyZWFtICpzdHJlYW0pOwor dm9pZCBldG5hX2NtZF9zdHJlYW1fZmluaXNoKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVh bSk7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgZXRuYV9jbWRfc3RyZWFtX2F2YWlsKHN0cnVj dCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSkKK3sKKwlzdGF0aWMgY29uc3QgdWludDMyX3QgRU5E X0NMRUFSQU5DRSA9IDI7IC8qIExJTksgb3AgY29kZSAqLworCisJcmV0dXJuIHN0cmVhbS0+c2l6 ZSAtIHN0cmVhbS0+b2Zmc2V0IC0gRU5EX0NMRUFSQU5DRTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIGV0bmFfY21kX3N0cmVhbV9yZXNlcnZlKHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVh bSwgc2l6ZV90IG4pCit7CisJaWYgKGV0bmFfY21kX3N0cmVhbV9hdmFpbChzdHJlYW0pIDwgbikK KwkJZXRuYV9jbWRfc3RyZWFtX2ZsdXNoKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZCBldG5hX2NtZF9zdHJlYW1fZW1pdChzdHJ1Y3QgZXRuYV9jbWRfc3RyZWFtICpzdHJlYW0sIHVp bnQzMl90IGRhdGEpCit7CisJc3RyZWFtLT5idWZmZXJbc3RyZWFtLT5vZmZzZXQrK10gPSBkYXRh OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGV0bmFfY21kX3N0cmVhbV9nZXQoc3RydWN0 IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtLCB1aW50MzJfdCBvZmZzZXQpCit7CisJcmV0dXJuIHN0 cmVhbS0+YnVmZmVyW29mZnNldF07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBldG5hX2NtZF9z dHJlYW1fc2V0KHN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKnN0cmVhbSwgdWludDMyX3Qgb2Zmc2V0 LAorCQl1aW50MzJfdCBkYXRhKQoreworCXN0cmVhbS0+YnVmZmVyW29mZnNldF0gPSBkYXRhOwor fQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IGV0bmFfY21kX3N0cmVhbV9vZmZzZXQoc3RydWN0 IGV0bmFfY21kX3N0cmVhbSAqc3RyZWFtKQoreworCXJldHVybiBzdHJlYW0tPm9mZnNldDsKK30K Kworc3RydWN0IGV0bmFfcmVsb2MgeworCXN0cnVjdCBldG5hX2JvICpibzsKKyNkZWZpbmUgRVRO QV9SRUxPQ19SRUFEICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBFVE5BX1JFTE9DX1dSSVRF ICAgICAgICAgICAgMHgwMDAyCisJdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3Qgb2Zmc2V0Owor fTsKKwordm9pZCBldG5hX2NtZF9zdHJlYW1fcmVsb2Moc3RydWN0IGV0bmFfY21kX3N0cmVhbSAq c3RyZWFtLCBjb25zdCBzdHJ1Y3QgZXRuYV9yZWxvYyAqcik7CisKKyNlbmRpZiAvKiBFVE5BVklW X0RSTUlGX0hfICovCmRpZmYgLS1naXQgYS9ldG5hdml2L2V0bmF2aXZfZ3B1LmMgYi9ldG5hdml2 L2V0bmF2aXZfZ3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkZWM2 YwotLS0gL2Rldi9udWxsCisrKyBiL2V0bmF2aXYvZXRuYXZpdl9ncHUuYwpAQCAtMCwwICsxLDE3 NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBFdG5hdml2IFByb2plY3QKKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisg KiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAq ICAgIENocmlzdGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4uZ21laW5lckBnbWFpbC5jb20+CisgKi8K KworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwor I2luY2x1ZGUgImV0bmF2aXZfcHJpdi5oIgorI2luY2x1ZGUgImV0bmF2aXZfZHJtaWYuaCIKKwor c3RhdGljIHVpbnQ2NF90IGdldF9wYXJhbShzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldiwgdWludDMy X3QgY29yZSwgdWludDMyX3QgcGFyYW0pCit7CisJc3RydWN0IGRybV9ldG5hdml2X3BhcmFtIHJl cSA9IHsKKwkJLnBpcGUgPSBjb3JlLAorCQkucGFyYW0gPSBwYXJhbSwKKwl9OworCWludCByZXQ7 CisKKwlyZXQgPSBkcm1Db21tYW5kV3JpdGVSZWFkKGRldi0+ZmQsIERSTV9FVE5BVklWX0dFVF9Q QVJBTSwgJnJlcSwgc2l6ZW9mKHJlcSkpOworCWlmIChyZXQpIHsKKwkJRVJST1JfTVNHKCJnZXQt cGFyYW0gKCV4KSBmYWlsZWQhICVkICglcykiLCBwYXJhbSwgcmV0LCBzdHJlcnJvcihlcnJubykp OworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gcmVxLnZhbHVlOworfQorCitzdHJ1Y3QgZXRu YV9ncHUgKmV0bmFfZ3B1X25ldyhzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50 IGNvcmUpCit7CisJc3RydWN0IGV0bmFfZ3B1ICpncHU7CisKKwlncHUgPSBjYWxsb2MoMSwgc2l6 ZW9mKCpncHUpKTsKKwlpZiAoIWdwdSkgeworCQlFUlJPUl9NU0coImFsbG9jYXRpb24gZmFpbGVk Iik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlncHUtPmRldiA9IGRldjsKKwlncHUtPmNvcmUgPSBj b3JlOworCisJLyogZ2V0IHNwZWNzIGZyb20ga2VybmVsIHNwYWNlICovCisJZ3B1LT5zcGVjcy5t b2RlbCAgICAJPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BVklWX1BBUkFNX0dQVV9NT0RFTCk7 CisJZ3B1LT5zcGVjcy5yZXZpc2lvbiAJPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BVklWX1BB UkFNX0dQVV9SRVZJU0lPTik7CisJZ3B1LT5zcGVjcy5mZWF0dXJlc1swXSA9IGdldF9wYXJhbShk ZXYsIGNvcmUsIEVUTkFWSVZfUEFSQU1fR1BVX0ZFQVRVUkVTXzApOworCWdwdS0+c3BlY3MuZmVh dHVyZXNbMV0gPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BVklWX1BBUkFNX0dQVV9GRUFUVVJF U18xKTsKKwlncHUtPnNwZWNzLmZlYXR1cmVzWzJdID0gZ2V0X3BhcmFtKGRldiwgY29yZSwgRVRO QVZJVl9QQVJBTV9HUFVfRkVBVFVSRVNfMik7CisJZ3B1LT5zcGVjcy5mZWF0dXJlc1szXSA9IGdl dF9wYXJhbShkZXYsIGNvcmUsIEVUTkFWSVZfUEFSQU1fR1BVX0ZFQVRVUkVTXzMpOworCWdwdS0+ c3BlY3MuZmVhdHVyZXNbNF0gPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BVklWX1BBUkFNX0dQ VV9GRUFUVVJFU180KTsKKwlncHUtPnNwZWNzLmZlYXR1cmVzWzVdID0gZ2V0X3BhcmFtKGRldiwg Y29yZSwgRVROQVZJVl9QQVJBTV9HUFVfRkVBVFVSRVNfNSk7CisJZ3B1LT5zcGVjcy5mZWF0dXJl c1s2XSA9IGdldF9wYXJhbShkZXYsIGNvcmUsIEVUTkFWSVZfUEFSQU1fR1BVX0ZFQVRVUkVTXzYp OworCWdwdS0+c3BlY3Muc3RyZWFtX2NvdW50ID0gZ2V0X3BhcmFtKGRldiwgY29yZSwgRVROQV9H UFVfU1RSRUFNX0NPVU5UKTsKKwlncHUtPnNwZWNzLnJlZ2lzdGVyX21heCA9IGdldF9wYXJhbShk ZXYsIGNvcmUsIEVUTkFfR1BVX1JFR0lTVEVSX01BWCk7CisJZ3B1LT5zcGVjcy50aHJlYWRfY291 bnQgPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BX0dQVV9USFJFQURfQ09VTlQpOworCWdwdS0+ c3BlY3MudmVydGV4X2NhY2hlX3NpemUgPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BX0dQVV9W RVJURVhfQ0FDSEVfU0laRSk7CisJZ3B1LT5zcGVjcy5zaGFkZXJfY29yZV9jb3VudCA9IGdldF9w YXJhbShkZXYsIGNvcmUsIEVUTkFfR1BVX1NIQURFUl9DT1JFX0NPVU5UKTsKKwlncHUtPnNwZWNz LnBpeGVsX3BpcGVzID0gZ2V0X3BhcmFtKGRldiwgY29yZSwgRVROQV9HUFVfUElYRUxfUElQRVMp OworCWdwdS0+c3BlY3MudmVydGV4X291dHB1dF9idWZmZXJfc2l6ZSA9IGdldF9wYXJhbShkZXYs IGNvcmUsIEVUTkFfR1BVX1ZFUlRFWF9PVVRQVVRfQlVGRkVSX1NJWkUpOworCWdwdS0+c3BlY3Mu YnVmZmVyX3NpemUgPSBnZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BX0dQVV9CVUZGRVJfU0laRSk7 CisJZ3B1LT5zcGVjcy5pbnN0cnVjdGlvbl9jb3VudCA9IGdldF9wYXJhbShkZXYsIGNvcmUsIEVU TkFfR1BVX0lOU1RSVUNUSU9OX0NPVU5UKTsKKwlncHUtPnNwZWNzLm51bV9jb25zdGFudHMgPSBn ZXRfcGFyYW0oZGV2LCBjb3JlLCBFVE5BX0dQVV9OVU1fQ09OU1RBTlRTKTsKKwlncHUtPnNwZWNz Lm51bV92YXJ5aW5ncyA9IGdldF9wYXJhbShkZXYsIGNvcmUsIEVUTkFfR1BVX05VTV9WQVJZSU5H Uyk7CisKKwlpZiAoIWdwdS0+c3BlY3MubW9kZWwpCisJCWdvdG8gZmFpbDsKKworCUlORk9fTVNH KCIgR1BVIG1vZGVsOiAgICAgICAgICAweCV4IChyZXYgJXgpIiwgZ3B1LT5zcGVjcy5tb2RlbCwg Z3B1LT5zcGVjcy5yZXZpc2lvbik7CisKKwlyZXR1cm4gZ3B1OworZmFpbDoKKwlpZiAoZ3B1KQor CQlldG5hX2dwdV9kZWwoZ3B1KTsKKworCXJldHVybiBOVUxMOworfQorCit2b2lkIGV0bmFfZ3B1 X2RlbChzdHJ1Y3QgZXRuYV9ncHUgKmdwdSkKK3sKKwlmcmVlKGdwdSk7Cit9CisKK2ludCBldG5h X2dwdV9nZXRfcGFyYW0oc3RydWN0IGV0bmFfZ3B1ICpncHUsIGVudW0gZXRuYV9wYXJhbV9pZCBw YXJhbSwKKwkJdWludDY0X3QgKnZhbHVlKQoreworCXN3aXRjaChwYXJhbSkgeworCWNhc2UgRVRO QV9HUFVfTU9ERUw6CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3MubW9kZWw7CisJCXJldHVybiAwOwor CWNhc2UgRVROQV9HUFVfUkVWSVNJT046CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3MucmV2aXNpb247 CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfRkVBVFVSRVNfMDoKKwkJKnZhbHVlID0gZ3B1 LT5zcGVjcy5mZWF0dXJlc1swXTsKKwkJcmV0dXJuIDA7CisJY2FzZSBFVE5BX0dQVV9GRUFUVVJF U18xOgorCQkqdmFsdWUgPSBncHUtPnNwZWNzLmZlYXR1cmVzWzFdOworCQlyZXR1cm4gMDsKKwlj YXNlIEVUTkFfR1BVX0ZFQVRVUkVTXzI6CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3MuZmVhdHVyZXNb Ml07CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfRkVBVFVSRVNfMzoKKwkJKnZhbHVlID0g Z3B1LT5zcGVjcy5mZWF0dXJlc1szXTsKKwkJcmV0dXJuIDA7CisJY2FzZSBFVE5BX0dQVV9GRUFU VVJFU180OgorCQkqdmFsdWUgPSBncHUtPnNwZWNzLmZlYXR1cmVzWzRdOworCQlyZXR1cm4gMDsK KwljYXNlIEVUTkFfR1BVX0ZFQVRVUkVTXzU6CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3MuZmVhdHVy ZXNbNV07CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfRkVBVFVSRVNfNjoKKwkJKnZhbHVl ID0gZ3B1LT5zcGVjcy5mZWF0dXJlc1s2XTsKKwkJcmV0dXJuIDA7CisJY2FzZSBFVE5BX0dQVV9T VFJFQU1fQ09VTlQ6CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3Muc3RyZWFtX2NvdW50OworCQlyZXR1 cm4gMDsKKwljYXNlIEVUTkFfR1BVX1JFR0lTVEVSX01BWDoKKwkJKnZhbHVlID0gZ3B1LT5zcGVj cy5yZWdpc3Rlcl9tYXg7CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfVEhSRUFEX0NPVU5U OgorCQkqdmFsdWUgPSBncHUtPnNwZWNzLnRocmVhZF9jb3VudDsKKwkJcmV0dXJuIDA7CisJY2Fz ZSBFVE5BX0dQVV9WRVJURVhfQ0FDSEVfU0laRToKKwkJKnZhbHVlID0gZ3B1LT5zcGVjcy52ZXJ0 ZXhfY2FjaGVfc2l6ZTsKKwkJcmV0dXJuIDA7CisJY2FzZSBFVE5BX0dQVV9TSEFERVJfQ09SRV9D T1VOVDoKKwkJKnZhbHVlID0gZ3B1LT5zcGVjcy5zaGFkZXJfY29yZV9jb3VudDsKKwkJcmV0dXJu IDA7CisJY2FzZSBFVE5BX0dQVV9QSVhFTF9QSVBFUzoKKwkJKnZhbHVlID0gZ3B1LT5zcGVjcy5w aXhlbF9waXBlczsKKwkJcmV0dXJuIDA7CisJY2FzZSBFVE5BX0dQVV9WRVJURVhfT1VUUFVUX0JV RkZFUl9TSVpFOgorCQkqdmFsdWUgPSBncHUtPnNwZWNzLnZlcnRleF9vdXRwdXRfYnVmZmVyX3Np emU7CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfQlVGRkVSX1NJWkU6CisJCSp2YWx1ZSA9 IGdwdS0+c3BlY3MuYnVmZmVyX3NpemU7CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfSU5T VFJVQ1RJT05fQ09VTlQ6CisJCSp2YWx1ZSA9IGdwdS0+c3BlY3MuaW5zdHJ1Y3Rpb25fY291bnQ7 CisJCXJldHVybiAwOworCWNhc2UgRVROQV9HUFVfTlVNX0NPTlNUQU5UUzoKKwkJKnZhbHVlID0g Z3B1LT5zcGVjcy5udW1fY29uc3RhbnRzOworCQlyZXR1cm4gMDsKKwljYXNlIEVUTkFfR1BVX05V TV9WQVJZSU5HUzoKKwkJKnZhbHVlID0gZ3B1LT5zcGVjcy5udW1fdmFyeWluZ3M7CisJCXJldHVy biAwOworCisJZGVmYXVsdDoKKwkJRVJST1JfTVNHKCJpbnZhbGlkIHBhcmFtIGlkOiAlZCIsIHBh cmFtKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZXRu YXZpdi9ldG5hdml2X3BpcGUuYyBiL2V0bmF2aXYvZXRuYXZpdl9waXBlLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyYjcxZAotLS0gL2Rldi9udWxsCisrKyBiL2V0bmF2 aXYvZXRuYXZpdl9waXBlLmMKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg MjAxNC0yMDE1IEV0bmF2aXYgUHJvamVjdAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5 IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl ICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2Us IGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisg KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVj dCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdo dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAor ICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50 aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF CisgKiBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQ2hyaXN0aWFuIEdtZWluZXIg PGNocmlzdGlhbi5nbWVpbmVyQGdtYWlsLmNvbT4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf SAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZXRuYXZpdl9wcml2 LmgiCisKK2ludCBldG5hX3BpcGVfd2FpdChzdHJ1Y3QgZXRuYV9waXBlICpwaXBlLCB1aW50MzJf dCB0aW1lc3RhbXAsIHVpbnQzMl90IG1zKQoreworCXN0cnVjdCBldG5hX2RldmljZSAqZGV2ID0g cGlwZS0+Z3B1LT5kZXY7CisJaW50IHJldDsKKworCXN0cnVjdCBkcm1fZXRuYXZpdl93YWl0X2Zl bmNlIHJlcSA9IHsKKwkJLnBpcGUgPSBwaXBlLT5ncHUtPmNvcmUsCisJCS5mZW5jZSA9IHRpbWVz dGFtcCwKKwl9OworCisJaWYgKG1zID09IDApCisJCXJlcS5mbGFncyB8PSBFVE5BX1dBSVRfTk9O QkxPQ0s7CisKKwlnZXRfYWJzX3RpbWVvdXQoJnJlcS50aW1lb3V0LCBtcyk7CisKKwlyZXQgPSBk cm1Db21tYW5kV3JpdGUoZGV2LT5mZCwgRFJNX0VUTkFWSVZfV0FJVF9GRU5DRSwgJnJlcSwgc2l6 ZW9mKHJlcSkpOworCWlmIChyZXQpIHsKKwkJRVJST1JfTVNHKCJ3YWl0LWZlbmNlIGZhaWxlZCEg JWQgKCVzKSIsIHJldCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCBldG5hX3BpcGVfZGVsKHN0cnVjdCBldG5hX3BpcGUgKnBpcGUp Cit7CisJZnJlZShwaXBlKTsKK30KKworc3RydWN0IGV0bmFfcGlwZSAqZXRuYV9waXBlX25ldyhz dHJ1Y3QgZXRuYV9ncHUgKmdwdSwgZW51bSBldG5hX3BpcGVfaWQgaWQpCit7CisJc3RydWN0IGV0 bmFfcGlwZSAqcGlwZTsKKworCXBpcGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCpwaXBlKSk7CisJaWYg KCFwaXBlKSB7CisJCUVSUk9SX01TRygiYWxsb2NhdGlvbiBmYWlsZWQiKTsKKwkJZ290byBmYWls OworCX0KKworCXBpcGUtPmlkID0gaWQ7CisJcGlwZS0+Z3B1ID0gZ3B1OworCisJcmV0dXJuIHBp cGU7CitmYWlsOgorCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvZXRuYXZpdi9ldG5hdml2 X3ByaXYuaCBiL2V0bmF2aXYvZXRuYXZpdl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNDJkOWE0NQotLS0gL2Rldi9udWxsCisrKyBiL2V0bmF2aXYvZXRuYXZpdl9w cml2LmgKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBF dG5hdml2IFByb2plY3QKKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVl IG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1 ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNl bGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20g dGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZv bGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAi QVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J TkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAq IExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RI RVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdB UkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIENocmlzdGlhbiBHbWVpbmVyIDxjaHJpc3RpYW4u Z21laW5lckBnbWFpbC5jb20+CisgKi8KKworI2lmbmRlZiBFVE5BVklWX1BSSVZfSF8KKyNkZWZp bmUgRVROQVZJVl9QUklWX0hfCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJu by5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg PGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNp bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQu aD4KKworI2luY2x1ZGUgImxpYmRybV9tYWNyb3MuaCIKKyNpbmNsdWRlICJ4Zjg2ZHJtLmgiCisj aW5jbHVkZSAieGY4NmF0b21pYy5oIgorCisjaW5jbHVkZSAidXRpbF9kb3VibGVfbGlzdC5oIgor CisjaW5jbHVkZSAiZXRuYXZpdl9kcm1pZi5oIgorLy8jaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVk ZSAiZXRuYXZpdl9kcm0uaCIKKworI2RlZmluZSBWSVZfRkVBVFVSRVNfV09SRF9DT1VOVCA2CisK K3N0cnVjdCBldG5hX3NwZWNzIHsKKwl1aW50MzJfdCBtb2RlbDsKKwl1aW50MzJfdCByZXZpc2lv bjsKKwl1aW50MzJfdCBmZWF0dXJlc1tWSVZfRkVBVFVSRVNfV09SRF9DT1VOVCArIDFdOworCXVp bnQzMl90IHN0cmVhbV9jb3VudDsKKwl1aW50MzJfdCByZWdpc3Rlcl9tYXg7CisJdWludDMyX3Qg dGhyZWFkX2NvdW50OworCXVpbnQzMl90IHNoYWRlcl9jb3JlX2NvdW50OworCXVpbnQzMl90IHZl cnRleF9jYWNoZV9zaXplOworCXVpbnQzMl90IHZlcnRleF9vdXRwdXRfYnVmZmVyX3NpemU7CisJ dWludDMyX3QgcGl4ZWxfcGlwZXM7CisJdWludDMyX3QgaW5zdHJ1Y3Rpb25fY291bnQ7CisJdWlu dDMyX3QgbnVtX2NvbnN0YW50czsKKwl1aW50MzJfdCBudW1fdmFyeWluZ3M7CisJdWludDMyX3Qg YnVmZmVyX3NpemU7Cit9OworCitzdHJ1Y3QgZXRuYV9ib19idWNrZXQgeworCXVpbnQzMl90IHNp emU7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworc3RydWN0IGV0bmFfYm9fY2FjaGUg eworCXN0cnVjdCBldG5hX2JvX2J1Y2tldCBjYWNoZV9idWNrZXRbMTQgKiA0XTsKKwl1bnNpZ25l ZCBudW1fYnVja2V0czsKKwl0aW1lX3QgdGltZTsKK307CisKK3N0cnVjdCBldG5hX2RldmljZSB7 CisJaW50IGZkOworCWF0b21pY190IHJlZmNudDsKKworCS8qIHRhYmxlcyB0byBrZWVwIHRyYWNr IG9mIGJvJ3MsIHRvIGF2b2lkICJldmlsLXR3aW4iIGV0bmFfYm8gb2JqZWN0czoKKwkgKgorCSAq ICAgaGFuZGxlX3RhYmxlOiBtYXBzIGhhbmRsZSB0byBldG5hX2JvCisJICogICBuYW1lX3RhYmxl OiBtYXBzIGZsaW5rIG5hbWUgdG8gZXRuYV9ibworCSAqCisJICogV2UgZW5kIHVwIG5lZWRpbmcg dHdvIHRhYmxlcywgYmVjYXVzZSBEUk1fSU9DVExfR0VNX09QRU4gYWx3YXlzCisJICogcmV0dXJu cyBhIG5ldyBoYW5kbGUuICBTbyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIGJvIGlzIGFs cmVhZHkKKwkgKiBvcGVuIGluIHRoZSBwcm9jZXNzIGZpcnN0LCBiZWZvcmUgY2FsbGluZyBnZW0t b3Blbi4KKwkgKi8KKwl2b2lkICpoYW5kbGVfdGFibGUsICpuYW1lX3RhYmxlOworCisJc3RydWN0 IGV0bmFfYm9fY2FjaGUgYm9fY2FjaGU7Cit9OworCitkcm1fcHJpdmF0ZSB2b2lkIGV0bmFfYm9f Y2FjaGVfaW5pdChzdHJ1Y3QgZXRuYV9ib19jYWNoZSAqY2FjaGUpOworZHJtX3ByaXZhdGUgdm9p ZCBldG5hX2JvX2NhY2hlX2NsZWFudXAoc3RydWN0IGV0bmFfYm9fY2FjaGUgKmNhY2hlLCB0aW1l X3QgdGltZSk7Citkcm1fcHJpdmF0ZSBzdHJ1Y3QgZXRuYV9ibyAqZXRuYV9ib19jYWNoZV9hbGxv YyhzdHJ1Y3QgZXRuYV9ib19jYWNoZSAqY2FjaGUsCisJCXVpbnQzMl90ICpzaXplLCB1aW50MzJf dCBmbGFncyk7Citkcm1fcHJpdmF0ZSBpbnQgZXRuYV9ib19jYWNoZV9mcmVlKHN0cnVjdCBldG5h X2JvX2NhY2hlICpjYWNoZSwgc3RydWN0IGV0bmFfYm8gKmJvKTsKKworLyogZm9yIHdoZXJlIEB0 YWJsZV9sb2NrIGlzIGFscmVhZHkgaGVsZDogKi8KK2RybV9wcml2YXRlIHZvaWQgZXRuYV9kZXZp Y2VfZGVsX2xvY2tlZChzdHJ1Y3QgZXRuYV9kZXZpY2UgKmRldik7CisKKy8qIGEgR0VNIGJ1ZmZl ciBvYmplY3QgYWxsb2NhdGVkIGZyb20gdGhlIERSTSBkZXZpY2UgKi8KK3N0cnVjdCBldG5hX2Jv IHsKKwlzdHJ1Y3QgZXRuYV9kZXZpY2UgICAgICAqZGV2OworCXZvaWQgICAgICAgICAgICAqbWFw OyAgICAgICAgICAgLyogdXNlcnNwYWNlIG1tYXAnaW5nIChpZiB0aGVyZSBpcyBvbmUpICovCisJ dWludDMyX3QgICAgICAgIHNpemU7CisJdWludDMyX3QgICAgICAgIGhhbmRsZTsKKwl1aW50MzJf dCAgICAgICAgZmxhZ3M7CisJdWludDMyX3QgICAgICAgIG5hbWU7ICAgICAgICAgICAvKiBmbGlu ayBnbG9iYWwgaGFuZGxlIChEUkkyIG5hbWUpICovCisJdWludDY0X3QgICAgICAgIG9mZnNldDsg ICAgICAgICAvKiBvZmZzZXQgdG8gbW1hcCgpICovCisJYXRvbWljX3QgICAgICAgIHJlZmNudDsK KworCS8qIGluIHRoZSBjb21tb24gY2FzZSwgYSBibyB3b24ndCBiZSByZWZlcmVuY2VkIGJ5IG1v cmUgdGhhbiBhIHNpbmdsZQorCSAqIGNvbW1hbmQgc3RyZWFtLiAgU28gdG8gYXZvaWQgbG9vcGlu ZyBvdmVyIGFsbCB0aGUgYm8ncyBpbiB0aGUKKwkgKiByZWxvYyB0YWJsZSB0byBmaW5kIHRoZSBp ZHggb2YgYSBibyB0aGF0IG1pZ2h0IGFscmVhZHkgYmUgaW4gdGhlCisJICogdGFibGUsIHdlIGNh Y2hlIHRoZSBpZHggaW4gdGhlIGJvLiAgQnV0IGluIG9yZGVyIHRvIGRldGVjdCB0aGUKKwkgKiBz bG93LXBhdGggd2hlcmUgYm8gaXMgcmVmJ2QgaW4gbXVsdGlwbGUgc3RyZWFtcywgd2UgYWxzbyBt dXN0IHRyYWNrCisJICogdGhlIGN1cnJlbnRfc3RyZWFtIGZvciB3aGljaCB0aGUgaWR4IGlzIHZh bGlkLiAgU2VlIGJvMmlkeCgpLgorCSAqLworCXN0cnVjdCBldG5hX2NtZF9zdHJlYW0gKmN1cnJl bnRfc3RyZWFtOworCXVpbnQzMl90IGlkeDsKKworCWludCByZXVzZTsKKwlzdHJ1Y3QgbGlzdF9o ZWFkIGxpc3Q7ICAgLyogYnVja2V0LWxpc3QgZW50cnkgKi8KKwl0aW1lX3QgZnJlZV90aW1lOyAg ICAgICAgLyogdGltZSB3aGVuIGFkZGVkIHRvIGJ1Y2tldC1saXN0ICovCit9OworCitzdHJ1Y3Qg ZXRuYV9ncHUgeworCXN0cnVjdCBldG5hX2RldmljZSAqZGV2OworCXN0cnVjdCBldG5hX3NwZWNz IHNwZWNzOworCXVpbnQzMl90IGNvcmU7Cit9OworCitzdHJ1Y3QgZXRuYV9waXBlIHsKKwllbnVt IGV0bmFfcGlwZV9pZCBpZDsKKwlzdHJ1Y3QgZXRuYV9ncHUgKmdwdTsKK307CisKK3N0cnVjdCBl dG5hX2NtZF9zdHJlYW1fcHJpdiB7CisJc3RydWN0IGV0bmFfY21kX3N0cmVhbSBiYXNlOworCXN0 cnVjdCBldG5hX3BpcGUgKnBpcGU7CisKKwl1aW50MzJfdCBsYXN0X3RpbWVzdGFtcDsKKworCS8q IHN1Ym1pdCBpb2N0bCByZWxhdGVkIHRhYmxlczogKi8KKwlzdHJ1Y3QgeworCQkvKiBibydzIHRh YmxlOiAqLworCQlzdHJ1Y3QgZHJtX2V0bmF2aXZfZ2VtX3N1Ym1pdF9ibyAqYm9zOworCQl1aW50 MzJfdCBucl9ib3MsIG1heF9ib3M7CisKKwkJLyogcmVsb2MncyB0YWJsZTogKi8KKwkJc3RydWN0 IGRybV9ldG5hdml2X2dlbV9zdWJtaXRfcmVsb2MgKnJlbG9jczsKKwkJdWludDMyX3QgbnJfcmVs b2NzLCBtYXhfcmVsb2NzOworCX0gc3VibWl0OworCisJLyogc2hvdWxkIGhhdmUgbWF0Y2hpbmcg ZW50cmllcyBpbiBzdWJtaXQuYm9zOiAqLworCXN0cnVjdCBldG5hX2JvICoqYm9zOworCXVpbnQz Ml90IG5yX2JvcywgbWF4X2JvczsKKworCS8qIG5vdGlmeSBjYWxsYmFjayBpZiBidWZmZXIgcmVz ZXQgaGFwcGVuZCAqLworCXZvaWQgKCpyZXNldF9ub3RpZnkpKHN0cnVjdCBldG5hX2NtZF9zdHJl YW0gKnN0cmVhbSwgdm9pZCAqcHJpdik7CisJdm9pZCAqcmVzZXRfbm90aWZ5X3ByaXY7Cit9Owor CisjZGVmaW5lIEFMSUdOKHYsYSkgKCgodikgKyAoYSkgLSAxKSAmIH4oKGEpIC0gMSkpCisjZGVm aW5lIEFSUkFZX1NJWkUoYXJyKSAoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQorCisj ZGVmaW5lIGVuYWJsZV9kZWJ1ZyAxICAvKiBUT0RPIG1ha2UgZHluYW1pYyAqLworCisjZGVmaW5l IElORk9fTVNHKGZtdCwgLi4uKSBcCisJCWRvIHsgZHJtTXNnKCJbSV0gImZtdCAiICglczolZClc biIsIFwKKwkJCQkjI19fVkFfQVJHU19fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgfSB3aGls ZSAoMCkKKyNkZWZpbmUgREVCVUdfTVNHKGZtdCwgLi4uKSBcCisJCWRvIGlmIChlbmFibGVfZGVi dWcpIHsgZHJtTXNnKCJbRF0gImZtdCAiICglczolZClcbiIsIFwKKwkJCQkjI19fVkFfQVJHU19f LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV0FSTl9NU0co Zm10LCAuLi4pIFwKKwkJZG8geyBkcm1Nc2coIltXXSAiZm10ICIgKCVzOiVkKVxuIiwgXAorCQkJ CSMjX19WQV9BUkdTX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyB9IHdoaWxlICgwKQorI2Rl ZmluZSBFUlJPUl9NU0coZm10LCAuLi4pIFwKKwkJZG8geyBkcm1Nc2coIltFXSAiIGZtdCAiICgl czolZClcbiIsIFwKKwkJCQkjI19fVkFfQVJHU19fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsg fSB3aGlsZSAoMCkKKworI2RlZmluZSBWT0lEMlU2NCh4KSAoKHVpbnQ2NF90KSh1bnNpZ25lZCBs b25nKSh4KSkKKworc3RhdGljIGlubGluZSB2b2lkIGdldF9hYnNfdGltZW91dChzdHJ1Y3QgZHJt X2V0bmF2aXZfdGltZXNwZWMgKnR2LCB1aW50MzJfdCBtcykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMg dDsKKwl1aW50MzJfdCBzID0gbXMgLyAxMDAwOworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RP TklDLCAmdCk7CisJdHYtPnR2X3NlYyA9IHQudHZfc2VjICsgczsKKwl0di0+dHZfbnNlYyA9IHQu dHZfbnNlYyArICgobXMgLSAocyAqIDEwMDApKSAqIDEwMDAwMDApOworfQorCisjZW5kaWYgLyog RVROQVZJVl9QUklWX0hfICovCmRpZmYgLS1naXQgYS9ldG5hdml2L2xpYmRybV9ldG5hdml2LnBj LmluIGIvZXRuYXZpdi9saWJkcm1fZXRuYXZpdi5wYy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi4xM2ZlZDAxCi0tLSAvZGV2L251bGwKKysrIGIvZXRuYXZpdi9saWJkcm1f ZXRuYXZpdi5wYy5pbgpAQCAtMCwwICsxLDExIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJl Zml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRp ckAKKworTmFtZTogbGliZHJtX2V0bmF2aXYKK0Rlc2NyaXB0aW9uOiBVc2Vyc3BhY2UgaW50ZXJm YWNlIHRvIGV0bmF2aXYga2VybmVsIERSTSBzZXJ2aWNlcworVmVyc2lvbjogQFBBQ0tBR0VfVkVS U0lPTkAKK0xpYnM6IC1MJHtsaWJkaXJ9IC1sZHJtX2V0bmF2aXYKK0NmbGFnczogLUkke2luY2x1 ZGVkaXJ9IC1JJHtpbmNsdWRlZGlyfS9saWJkcm0KK1JlcXVpcmVzLnByaXZhdGU6IGxpYmRybQot LSAKMi43LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=