From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH 3/5] libxl: add support for vscsi Date: Fri, 13 Nov 2015 11:59:57 +0000 Message-ID: <1447415999-22003-4-git-send-email-olaf@aepfle.de> References: <1447415999-22003-1-git-send-email-olaf@aepfle.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1447415999-22003-1-git-send-email-olaf@aepfle.de> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org UG9ydCBwdnNjc2kgc3VwcG9ydCBmcm9tIHhlbmQgdG8gbGlieGw6CgogdnNjc2k9WydwZGV2LHZk ZXZ7LG9wdGlvbnN9J10KIHhsIHNjc2ktYXR0YWNoCiB4bCBzY3NpLWRldGFjaAogeGwgc2NzaS1s aXN0CgpTaWduZWQtb2ZmLWJ5OiBPbGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CkNjOiBJYW4g SmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGlu aSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlh bi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4K LS0tCiBkb2NzL21hbi94bC5jZmcucG9kLjUgICAgICAgICAgICAgICAgfCAgNTUgKysrCiBkb2Nz L21hbi94bC5wb2QuMSAgICAgICAgICAgICAgICAgICAgfCAgMTggKwogdG9vbHMvbGlieGwvTWFr ZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICsKIHRvb2xzL2xpYnhsL2xpYnhsLmMgICAgICAg ICAgICAgICAgICB8IDQ0MCArKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbGlieGwvbGlieGwu aCAgICAgICAgICAgICAgICAgIHwgIDI3ICsrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAg ICAgICAgICAgfCAgIDEgKwogdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMgICAgICAgICAgIHwg ICAyICsKIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAxNiArCiB0b29s cy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgICAgICAgICAgfCAgNTUgKysrCiB0b29scy9saWJ4bC9s aWJ4bF90eXBlc19pbnRlcm5hbC5pZGwgfCAgIDEgKwogdG9vbHMvbGlieGwvbGlieGxfdnNjc2ku YyAgICAgICAgICAgIHwgMjczICsrKysrKysrKysrKysKIHRvb2xzL2xpYnhsL2xpYnhsdV92c2Nz aS5jICAgICAgICAgICB8IDc0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog dG9vbHMvbGlieGwvbGlieGx1dGlsLmggICAgICAgICAgICAgIHwgIDE4ICsKIHRvb2xzL2xpYnhs L3hsLmggICAgICAgICAgICAgICAgICAgICB8ICAgMyArCiB0b29scy9saWJ4bC94bF9jbWRpbXBs LmMgICAgICAgICAgICAgfCAyMDUgKysrKysrKysrLQogdG9vbHMvbGlieGwveGxfY21kdGFibGUu YyAgICAgICAgICAgIHwgIDE1ICsKIDE2IGZpbGVzIGNoYW5nZWQsIDE4NzkgaW5zZXJ0aW9ucygr KSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2RvY3MvbWFuL3hsLmNmZy5wb2QuNSBiL2Rv Y3MvbWFuL3hsLmNmZy5wb2QuNQppbmRleCBiNjM4NDZhLi45Yjc4NWNjIDEwMDY0NAotLS0gYS9k b2NzL21hbi94bC5jZmcucG9kLjUKKysrIGIvZG9jcy9tYW4veGwuY2ZnLnBvZC41CkBAIC01MTcs NiArNTE3LDYxIEBAIHZhbHVlIGlzIG9wdGlvbmFsIGlmIHRoaXMgaXMgYSBndWVzdCBkb21haW4u CiAKID1iYWNrCiAKKz1pdGVtIEI8dnNjc2k9WyAiVlNDU0lfU1BFQ19TVFJJTkciLCAiVlNDU0lf U1BFQ19TVFJJTkciLCAuLi5dPgorCitTcGVjaWZpZXMgdGhlIFBWU0NTSSBkZXZpY2VzIHRvIGJl IHByb3ZpZGVkIHRvIHRoZSBndWVzdC4gUFZTQ1NJIHBhc3NlcworU0NTSSBkZXZpY2VzIGZyb20g dGhlIGJhY2tlbmQgZG9tYWluIHRvIHRoZSBndWVzdC4KKworRWFjaCBWU0NTSV9TUEVDX1NUUklO RyBjb25zaXN0cyBvZiAicGRldix2ZGV2WyxvcHRpb25zXSIuCisncGRldicgZGVzY3JpYmVzIHRo ZSBwaHlzaWNhbCBkZXZpY2UsIHByZWZlcmFibGUgaW4gYSBwZXJzaXN0ZW50IGZvcm1hdCBzdWNo IGFzIC9kZXYvZGlzay9ieS0qLyouCisndmRldicgaXMgdGhlIGRvbVUgZGV2aWNlIGluIHZIT1NU OkNIQU5ORUw6VEFSR0VUOkxVTiBub3RhdGlvbiwgYWxsIGludGVnZXJzLgorJ29wdGlvbnMnIGxp c3RzIGFkZGl0aW9uYWwgZmxhZ3Mgd2hpY2ggYSBiYWNrZW5kIG1heSByZWNvZ25pemUuCisKK1Ro ZSBzdXBwb3J0ZWQgdmFsdWVzIGZvciAicGRldiIgYW5kICJvcHRpb25zIiBkZXBlbmRzIG9uIHRo ZSBiYWNrZW5kIGRyaXZlciB1c2VkOgorCis9b3ZlciA0CisKKz1pdGVtIEI8TGludXg+CisKKz1v dmVyIDQKKworPWl0ZW0gQzxwZGV2PgorCitUaGUgYmFja2VuZCBkcml2ZXIgaW4gdGhlIHB2b3Bz IGtlcm5lbCBpcyBwYXJ0IG9mIHRoZSBMaW51eC1JTyBUYXJnZXQgZnJhbWV3b3JrCisoTElPKS4g QXMgc3VjaCB0aGUgU0NTSSBkZXZpY2VzIGhhdmUgdG8gYmUgY29uZmlndXJlZCBmaXJzdCB3aXRo IHRoZSB0b29scworcHJvdmlkZWQgYnkgdGhpcyBmcmFtZXdvcmssIHN1Y2ggYXMgYSB4ZW4tc2Nz aWJhY2sgYXdhcmUgdGFyZ2V0Y2xpLiBUaGUgInBkZXYiCitpbiBkb21VLmNmZyBoYXMgdG8gcmVm ZXIgdG8gYSBjb25maWcgaXRlbSBpbiB0aGF0IGZyYW1ld29yayBpbnN0ZWFkIG9mIHRoZSByYXcK K2RldmljZS4gVXN1YWxseSB0aGlzIGlzIGEgV1dOIGluIHRoZSBmb3JtIG9mICJuYS5XV046TFVO Ii4KKworPWl0ZW0gQzxvcHRpb25zPgorCitObyBvcHRpb25zIHJlY29nbml6ZWQuCisKKz1iYWNr CisKKz1pdGVtIEI8TGludXggYmFzZWQgb24gY2xhc3NpYyBYZW4ga2VybmVsPgorCis9b3ZlciA0 CisKKz1pdGVtIEM8cGRldj4KKworVGhlIGRvbTAgZGV2aWNlIGluIGVpdGhlciAvZGV2L3Njc2lk ZXYgb3IgcEhPU1Q6Q0hBTk5FTDpUQVJHRVQ6TFVOIG5vdGF0aW9uLgorCitJdCdzIHJlY29tbWVu ZGVkIHRvIHVzZSBwZXJzaXN0ZW50IG5hbWVzICIvZGV2L2Rpc2svYnktKi8qIiB0byByZWZlciB0 byBhICJwZGV2Ii4KK1RoZSB0b29sc3RhY2sgd2lsbCB0cmFuc2xhdGUgdGhpcyBpbnRlcm5hbGx5 IHRvICJoOmM6dDpsIiBub3RhdGlvbiwgd2hpY2ggaXMgaG93Cit0aGUgYmFja2VuZCBkcml2ZXIg d2lsbCBhY2Nlc3MgdGhlIGRldmljZS4gVXNpbmcgdGhlICJoOmM6dDpsIiBub3RhdGlvbiBmb3IK KyJwZGV2IiBpbiBkb21VLmNmZyBpcyBkaXNjb3VyYWdlZCBiZWNhdXNlIHRoaXMgdmFsdWUgd2ls bCBjaGFuZ2UgYWNyb3NzIHJlYm9vdHMsCitkZXBlbmRpbmcgb24gdGhlIGRldGVjdGlvbiBvcmRl ciBpbiB0aGUgT1MuCisKKz1pdGVtIEM8b3B0aW9ucz4KKworQ3VycmVudGx5IG9ubHkgdGhlIG9w dGlvbiB2YWx1ZSAiZmVhdHVyZS1ob3N0IiBpcyByZWNvZ25pemVkLiBTQ1NJIGNvbW1hbmQKK2Vt dWxhdGlvbiBpbiBiYWNrZW5kIGRyaXZlciBpcyBieXBhc3NlZCB3aGVuICJmZWF0dXJlLWhvc3Qi IGlzIHNwZWNpZmllZC4KKworPWJhY2sKKworPWJhY2sKKwogPWl0ZW0gQjx2ZmI9WyAiVkZCX1NQ RUNfU1RSSU5HIiwgIlZGQl9TUEVDX1NUUklORyIsIC4uLl0+CiAKIFNwZWNpZmllcyB0aGUgcGFy YXZpcnR1YWwgZnJhbWVidWZmZXIgZGV2aWNlcyB3aGljaCBzaG91bGQgYmUgc3VwcGxpZWQKZGlm ZiAtLWdpdCBhL2RvY3MvbWFuL3hsLnBvZC4xIGIvZG9jcy9tYW4veGwucG9kLjEKaW5kZXggNDI3 OWM3Yy4uMDY3NDE0OSAxMDA2NDQKLS0tIGEvZG9jcy9tYW4veGwucG9kLjEKKysrIGIvZG9jcy9t YW4veGwucG9kLjEKQEAgLTEyOTMsNiArMTI5MywyNCBAQCBMaXN0IHZpcnR1YWwgdHJ1c3RlZCBw bGF0Zm9ybSBtb2R1bGVzIGZvciBhIGRvbWFpbi4KIAogPWJhY2sKIAorPWhlYWQyIFBWU0NTSSBE RVZJQ0VTCisKKz1vdmVyIDQKKworPWl0ZW0gQjxzY3NpLWF0dGFjaD4gSTxkb21haW4taWQ+IEk8 cGRldj4gSTx2ZGV2PixJPFtmZWF0dXJlLWhvc3RdPgorCitDcmVhdGVzIGEgbmV3IHZzY3NpIGRl dmljZSBpbiB0aGUgZG9tYWluIHNwZWNpZmllZCBieSBJPGRvbWFpbi1pZD4uCisKKz1pdGVtIEI8 c2NzaS1kZXRhY2g+IEk8ZG9tYWluLWlkPiBJPHZkZXY+CisKK1JlbW92ZXMgdGhlIHZzY3NpIGRl dmljZSBmcm9tIGRvbWFpbiBzcGVjaWZpZWQgYnkgSTxkb21haW4taWQ+LgorCis9aXRlbSBCPHNj c2ktbGlzdD4gSTxkb21haW4taWQ+IEk8W2RvbWFpbi1pZF0gLi4uPgorCitMaXN0IHZzY3NpIGRl dmljZXMgZm9yIHRoZSBkb21haW4gc3BlY2lmaWVkIGJ5IEk8ZG9tYWluLWlkPi4KKworPWJhY2sK KwogPWhlYWQxIFBDSSBQQVNTLVRIUk9VR0gKIAogPW92ZXIgNApkaWZmIC0tZ2l0IGEvdG9vbHMv bGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRleCA2ZmY1YmVlLi4yYjJi ODU5IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmlsZQorKysgYi90b29scy9saWJ4bC9N YWtlZmlsZQpAQCAtOTcsNiArOTcsNyBAQCBlbmRpZgogTElCWExfTElCUyArPSAtbHlhamwKIAog TElCWExfT0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxfZG0u byBsaWJ4bF9wY2kubyBcCisJCQlsaWJ4bF92c2NzaS5vIFwKIAkJCWxpYnhsX2RvbS5vIGxpYnhs X2V4ZWMubyBsaWJ4bF94c2hlbHAubyBsaWJ4bF9kZXZpY2UubyBcCiAJCQlsaWJ4bF9pbnRlcm5h bC5vIGxpYnhsX3V0aWxzLm8gbGlieGxfdXVpZC5vIFwKIAkJCWxpYnhsX2pzb24ubyBsaWJ4bF9h b3V0aWxzLm8gbGlieGxfbnVtYS5vIGxpYnhsX3ZudW1hLm8gXApAQCAtMTM5LDYgKzE0MCw3IEBA IEFVVE9JTkNTPSBsaWJ4bHVfY2ZnX3kuaCBsaWJ4bHVfY2ZnX2wuaCBfbGlieGxfbGlzdC5oIF9w YXRocy5oIFwKIEFVVE9TUkNTPSBsaWJ4bHVfY2ZnX3kuYyBsaWJ4bHVfY2ZnX2wuYwogQVVUT1NS Q1MgKz0gX2xpYnhsX3NhdmVfbXNnc19jYWxsb3V0LmMgX2xpYnhsX3NhdmVfbXNnc19oZWxwZXIu YwogTElCWExVX09CSlMgPSBsaWJ4bHVfY2ZnX3kubyBsaWJ4bHVfY2ZnX2wubyBsaWJ4bHVfY2Zn Lm8gXAorCWxpYnhsdV92c2NzaS5vIFwKIAlsaWJ4bHVfZGlza19sLm8gbGlieGx1X2Rpc2subyBs aWJ4bHVfdmlmLm8gbGlieGx1X3BjaS5vCiAkKExJQlhMVV9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZM QUdTX2xpYnhlbmN0cmwpICMgRm9yIHhlbnRvb2xsb2cuaAogCmRpZmYgLS1naXQgYS90b29scy9s aWJ4bC9saWJ4bC5jIGIvdG9vbHMvbGlieGwvbGlieGwuYwppbmRleCA4NTRlOTU3Li44MTkyOGE4 IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs LmMKQEAgLTIwNjMsNiArMjA2Myw0MzYgQEAgc3RhdGljIGludCBsaWJ4bF9fcmVzb2x2ZV9kb21p ZChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpuYW1lLAogfQogCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqLworCitzdGF0aWMgdm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpX2Rldl9iYWNrZW5kX3Jt KGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfdnNjc2lfZGV2ICp2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHhzX3RyYW5zYWN0aW9uX3QgdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpiZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZfd2FpdCkKK3sKKyAg ICBjaGFyICpkaXIsICpwYXRoLCAqdmFsOworCisgICAgZGlyID0gR0NTUFJJTlRGKCIlcy92c2Nz aS1kZXZzL2Rldi0ldSIsIGJlX3BhdGgsIHYtPnZzY3NpX2Rldl9pZCk7CisgICAgcGF0aCA9IEdD U1BSSU5URigiJXMvc3RhdGUiLCBkaXIpOworICAgIHZhbCA9IGxpYnhsX194c19yZWFkKGdjLCB0 LCBwYXRoKTsKKyAgICBMT0coREVCVUcsICIlcyBpcyAlcyIsIHBhdGgsIHZhbCk7CisgICAgaWYg KHZhbCAmJiBzdHJjbXAodmFsLCBHQ1NQUklOVEYoIiVkIiwgZGV2X3dhaXQpKSA9PSAwKSB7Cisg ICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYoIiVzL3N0YXRlIiwgZGlyKSk7Cisg ICAgICAgIHhzX3JtKENUWC0+eHNoLCB0LCBHQ1NQUklOVEYoIiVzL3AtZGV2bmFtZSIsIGRpcikp OworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJTlRGKCIlcy9wLWRldiIsIGRpcikp OworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgR0NTUFJJTlRGKCIlcy92LWRldiIsIGRpcikp OworICAgICAgICB4c19ybShDVFgtPnhzaCwgdCwgZGlyKTsKKyAgICB9IGVsc2UgeworICAgICAg ICBMT0coRVJST1IsICIlcyBoYXMgJXMsIGV4cGVjdGVkICVkIiwgcGF0aCwgdmFsLCBkZXZfd2Fp dCk7CisgICAgfQorfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdnNjc2lfZGV2X2JhY2tl bmRfc2V0KGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX3ZzY3NpX2RldiAqdiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmxleGFycmF5X3QgKmJhY2spCit7CisgICAgaW50IHJj OworICAgIGNoYXIgKmRpcjsKKyAgICBsaWJ4bF92c2NzaV9oY3RsICpoY3RsOworCisgICAgZGly ID0gR0NTUFJJTlRGKCJ2c2NzaS1kZXZzL2Rldi0ldSIsIHYtPnZzY3NpX2Rldl9pZCk7CisgICAg c3dpdGNoICh2LT5wZGV2LnR5cGUpIHsKKyAgICAgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZ UEVfV1dOOgorICAgICAgICAgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wLWRldiIsIGRpciksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+cGRldi51Lnd3bi5tKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExJQlhMX1ZTQ1NJX1BERVZfVFlQRV9IQ1RMOgor ICAgICAgICAgICAgaGN0bCA9ICZ2LT5wZGV2LnUuaGN0bC5tOworICAgICAgICAgICAgZmxleGFy cmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0NTUFJJTlRGKCIlcy9wLWRldiIsIGRpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0NTUFJJTlRGKCIldToldToldToldSIsIGhjdGwtPmhzdCwgaGN0bC0+Y2huLCBoY3Rs LT50Z3QsIGhjdGwtPmx1bikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTElC WExfVlNDU0lfUERFVl9UWVBFX0lOVkFMSUQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgZmxl eGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvcC1kZXZuYW1lIiwgZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdi0+ cGRldi5wX2Rldm5hbWUpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3YtZGV2IiwgZGlyKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIldToldToldToldSIsIHYtPnZkZXYuaHN0LCB2 LT52ZGV2LmNobiwgdi0+dmRldi50Z3QsIHYtPnZkZXYubHVuKSk7CisgICAgZmxleGFycmF5X2Fw cGVuZF9wYWlyKGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMv c3RhdGUiLCBkaXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwg WGVuYnVzU3RhdGVJbml0aWFsaXNpbmcpKTsKKyAgICByYyA9IDA7CitvdXQ6CisgICAgcmV0dXJu IHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdnNjc2lfbmV3X2JhY2tlbmQobGli eGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX19hb19kZXZpY2UgKmFvZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcp Cit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAgICBpbnQgcmMsIGk7CisgICAgZmxl eGFycmF5X3QgKmJhY2s7CisgICAgZmxleGFycmF5X3QgKmZyb250OworICAgIGxpYnhsX3ZzY3Np X2RldiAqdjsKKyAgICB4c190cmFuc2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKKworICAgIC8qIFBy ZWFsbG9jIGtleSt2YWx1ZTogNCB0b3BsZXZlbCArIDQgcGVyIGRldmljZSAqLworICAgIGkgPSAy ICogKDQgKyAoNCAqIHZzY3NpLT5udW1fdnNjc2lfZGV2cykpOworICAgIGJhY2sgPSBmbGV4YXJy YXlfbWFrZShnYywgaSwgMSk7CisgICAgZnJvbnQgPSBmbGV4YXJyYXlfbWFrZShnYywgMiAqIDIs IDEpOworCisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssICJmcm9udGVuZC1pZCIsIEdD U1BSSU5URigiJWQiLCBhb2Rldi0+ZGV2LT5kb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmRf cGFpcihiYWNrLCAib25saW5lIiwgIjEiKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFj aywgInN0YXRlIiwgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7Cisg ICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssICJmZWF0dXJlLWhvc3QiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3ZhbCh2c2NzaS0+c2NzaV9yYXdfY21kcykg PworICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgOiAiMCIpOworCisgICAgZmxleGFycmF5 X2FwcGVuZF9wYWlyKGZyb250LCAiYmFja2VuZC1pZCIsIEdDU1BSSU5URigiJWQiLCB2c2NzaS0+ YmFja2VuZF9kb21pZCkpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihmcm9udCwgInN0YXRl IiwgR0NTUFJJTlRGKCIlZCIsIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nKSk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgdnNjc2ktPm51bV92c2NzaV9kZXZzOyBpKyspIHsKKyAgICAgICAgdiA9IHZz Y3NpLT52c2NzaV9kZXZzICsgaTsKKyAgICAgICAgaWYgKHYtPnJlbW92ZSkKKyAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdnNjc2lfZGV2X2JhY2tlbmRf c2V0KGdjLCB2LCBiYWNrKTsKKyAgICAgICAgaWYgKHJjKSByZXR1cm4gcmM7CisgICAgfQorCisg ICAgZm9yICg7OykgeworICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChn YywgJnQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxf X2RldmljZV9leGlzdHMoZ2MsIHQsIGFvZGV2LT5kZXYpOworICAgICAgICBpZiAocmMgPCAwKSBn b3RvIG91dDsKKyAgICAgICAgaWYgKHJjID09IDEpIHsgICAgICAgICAgICAgIC8qIGFscmVhZHkg ZXhpc3RzIGluIHhlbnN0b3JlICovCisgICAgICAgICAgICBMT0coRVJST1IsICJkZXZpY2UgYWxy ZWFkeSBleGlzdHMgaW4geGVuc3RvcmUiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfREVWSUNF X0VYSVNUUzsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgaWYg KGFvZGV2LT51cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFp bl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ZGV2LT5kb21pZCwgZF9jb25maWcpOworICAgICAg ICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGxpYnhsX19kZXZp Y2VfZ2VuZXJpY19hZGQoZ2MsIHQsIGFvZGV2LT5kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX3hzX2t2c19vZl9mbGV4YXJyYXkoZ2MsIGJhY2ssCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFj ay0+Y291bnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19r dnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9udC0+Y291bnQpLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgICAgIHJjID0gbGlieGxfX3hz X3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAg ICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAgbGlieGxfX3dhaXRfZGV2 aWNlX2Nvbm5lY3Rpb24oZWdjLCBhb2Rldik7CisgICAgcmMgPSAwOworCitvdXQ6CisgICAgbGli eGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmdCk7CisgICAgcmV0dXJuIHJjOworfQorCitz dGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdnNjc2lfcmVjb25maWd1cmUobGlieGxfX2VnYyAqZWdj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19k ZXZpY2UgKmFvZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYmVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmRldl93YWl0KQor eworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgaW50IHJjLCBpLCBiZV9zdGF0ZSwg YmVfd2FpdDsKKyAgICBjaGFyICpkZXZfcGF0aCwgKnN0YXRlX3BhdGgsICpzdGF0ZV92YWw7Cisg ICAgZmxleGFycmF5X3QgKmJhY2s7CisgICAgbGlieGxfdnNjc2lfZGV2ICp2OworICAgIHhzX3Ry YW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGJvb2wgZG9fcmVjb25maWd1cmUgPSBmYWxz ZTsKKworICAgIC8qIFByZWFsbG9jIGtleSt2YWx1ZTogMSB0b3BsZXZlbCArIDQgcGVyIGRldmlj ZSAqLworICAgIGkgPSAyICogKDEgKyAoNCAqIHZzY3NpLT5udW1fdnNjc2lfZGV2cykpOworICAg IGJhY2sgPSBmbGV4YXJyYXlfbWFrZShnYywgaSwgMSk7CisKKyAgICBzdGF0ZV9wYXRoID0gR0NT UFJJTlRGKCIlcy9zdGF0ZSIsIGJlX3BhdGgpOworCisgICAgZm9yICg7OykgeworICAgICAgICBy YyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFydChnYywgJnQpOworICAgICAgICBpZiAocmMp IGdvdG8gb3V0OworCisgICAgICAgIHN0YXRlX3ZhbCA9IGxpYnhsX194c19yZWFkKGdjLCB0LCBz dGF0ZV9wYXRoKTsKKyAgICAgICAgTE9HKERFQlVHLCAiJXMgaXMgJXMiLCBzdGF0ZV9wYXRoLCBz dGF0ZV92YWwpOworICAgICAgICBpZiAoIXN0YXRlX3ZhbCkgeworICAgICAgICAgICAgcmMgPSBF UlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBi ZV9zdGF0ZSA9IGF0b2koc3RhdGVfdmFsKTsKKyAgICAgICAgc3dpdGNoIChiZV9zdGF0ZSkgewor ICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVVua25vd246CisgICAgICAgICAgICBjYXNlIFhl bmJ1c1N0YXRlSW5pdGlhbGlzaW5nOgorICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNsb3Np bmc6CisgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorICAgICAgICAgICAgZGVm YXVsdDoKKyAgICAgICAgICAgICAgICAvKiBUaGUgYmFja2VuZCBpcyBpbiBhIGJhZCBzdGF0ZSAq LworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgICAgICBnb3Rv IG91dDsKKyAgICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKKyAgICAgICAg ICAgIGNhc2UgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nOgorICAgICAgICAgICAgY2FzZSBYZW5i dXNTdGF0ZVJlY29uZmlndXJlZDoKKyAgICAgICAgICAgICAgICAvKiBCYWNrZW5kIGlzIHN0aWxs IGJ1c3ksIGNhbGxlciBoYXMgdG8gcmV0cnkgKi8KKyAgICAgICAgICAgICAgICByYyA9IEVSUk9S X05PVF9SRUFEWTsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIGNhc2Ug WGVuYnVzU3RhdGVJbml0V2FpdDoKKyAgICAgICAgICAgICAgICAvKiBUaGUgZnJvbnRlbmQgZGlk IG5vdCBjb25uZWN0IHlldCAqLworICAgICAgICAgICAgICAgIGJlX3dhaXQgPSBYZW5idXNTdGF0 ZUluaXRXYWl0OworICAgICAgICAgICAgICAgIGlmIChkZXZfd2FpdCkKKyAgICAgICAgICAgICAg ICAgICAgKmRldl93YWl0ID0gWGVuYnVzU3RhdGVJbml0aWFsaXNpbmc7CisgICAgICAgICAgICAg ICAgZG9fcmVjb25maWd1cmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIGNhc2UgWGVuYnVzU3RhdGVDb25uZWN0ZWQ6CisgICAgICAgICAgICAgICAgLyogVGhl IGJhY2tlbmQgY2FuIGhhbmRsZSByZWNvbmZpZ3VyZSAqLworICAgICAgICAgICAgICAgIGJlX3dh aXQgPSBYZW5idXNTdGF0ZUNvbm5lY3RlZDsKKyAgICAgICAgICAgICAgICBpZiAoZGV2X3dhaXQp CisgICAgICAgICAgICAgICAgICAgICpkZXZfd2FpdCA9IFhlbmJ1c1N0YXRlQ2xvc2VkOworICAg ICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAic3RhdGUiLCBHQ1NQUklO VEYoIiVkIiwgWGVuYnVzU3RhdGVSZWNvbmZpZ3VyaW5nKSk7CisgICAgICAgICAgICAgICAgZG9f cmVjb25maWd1cmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK KyAgICAgICAgLyogQXBwZW5kIG5ldyBkZXZpY2Ugb3IgdHJpZ2dlciByZW1vdmFsICovCisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCB2c2NzaS0+bnVtX3ZzY3NpX2RldnM7IGkrKykgeworICAgICAg ICAgICAgdW5zaWduZWQgaW50IG5iID0gMDsKKyAgICAgICAgICAgIHYgPSB2c2NzaS0+dnNjc2lf ZGV2cyArIGk7CisgICAgICAgICAgICBkZXZfcGF0aCA9IEdDU1BSSU5URigiJXMvdnNjc2ktZGV2 cy9kZXYtJXUiLCBiZV9wYXRoLCB2LT52c2NzaV9kZXZfaWQpOworICAgICAgICAgICAgLyogUHJl c2VydmUgZXhpc3RpbmcgZGV2aWNlICovCisgICAgICAgICAgICBpZiAobGlieGxfX3hzX2RpcmVj dG9yeShnYywgWEJUX05VTEwsIGRldl9wYXRoLCAmbmIpICYmIG5iKSB7CisgICAgICAgICAgICAg ICAgLyogVHJpZ2dlciBkZXZpY2UgcmVtb3ZhbCBieSBmb3J3YXJkaW5nIHN0YXRlIHRvIFhlbmJ1 c1N0YXRlQ2xvc2luZyAqLworICAgICAgICAgICAgICAgIGlmIChkb19yZWNvbmZpZ3VyZSAmJiB2 LT5yZW1vdmUpCisgICAgICAgICAgICAgICAgICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNr LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCJ2 c2NzaS1kZXZzL2Rldi0ldS9zdGF0ZSIsIHYtPnZzY3NpX2Rldl9pZCksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVD bG9zaW5nKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdnNjc2lfZGV2X2JhY2tlbmRfc2V0KGdjLCB2LCBi YWNrKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgICAgICByYyA9IGxpYnhsX19zZXRf ZG9tYWluX2NvbmZpZ3VyYXRpb24oZ2MsIGFvZGV2LT5kZXYtPmRvbWlkLCBkX2NvbmZpZyk7Cisg ICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgbGlieGxf X3hzX3dyaXRldihnYywgdCwgYmVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9feHNfa3ZzX29mX2ZsZXhhcnJheShnYywgYmFjaywgYmFjay0+Y291bnQpKTsKKworICAgICAg ICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ0KTsKKyAgICAgICAgaWYg KCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAg IGlmIChkb19yZWNvbmZpZ3VyZSkgeworICAgICAgICAvKiBQb2xsIGZvciBiYWNrZW5kIGNoYW5n ZSAqLworICAgICAgICByYyA9IGxpYnhsX193YWl0X2Zvcl9iYWNrZW5kKGdjLCBiZV9wYXRoLCBH Q1NQUklOVEYoIiVkIiwgYmVfd2FpdCkpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAg IH0KKyAgICByYyA9IDA7CisKK291dDoKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQo Z2MsICZ0KTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV9m cm9tX3ZzY3NpKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19kZXZpY2UgKmRldmljZSkKK3sKKyAg ICBkZXZpY2UtPmJhY2tlbmRfZG9taWQgPSB2c2NzaS0+YmFja2VuZF9kb21pZDsKKyAgICBkZXZp Y2UtPmRldmlkICAgICAgICAgPSB2c2NzaS0+ZGV2aWQ7CisgICAgZGV2aWNlLT5kb21pZCAgICAg ICAgID0gZG9taWQ7CisgICAgZGV2aWNlLT5iYWNrZW5kX2tpbmQgID0gTElCWExfX0RFVklDRV9L SU5EX1ZTQ1NJOworICAgIGRldmljZS0+a2luZCAgICAgICAgICA9IExJQlhMX19ERVZJQ0VfS0lO RF9WU0NTSTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIGxpYnhsX19kZXZpY2VfdnNjc2lf YWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFv ZGV2LT5hbyk7CisgICAgbGlieGxfX2RldmljZSAqZGV2aWNlOworICAgIGNoYXIgKmJlX3BhdGg7 CisgICAgdW5zaWduZWQgaW50IGJlX2RpcnMgPSAwOworICAgIGludCByYzsKKyAgICBsaWJ4bF9k b21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGxpYnhsX2RldmljZV92c2NzaSB2c2NzaV9zYXZl ZDsKKyAgICBsaWJ4bF9fZG9tYWluX3VzZXJkYXRhX2xvY2sgKmxvY2sgPSBOVUxMOworCisgICAg bGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7CisKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2lfaW5pdCgmdnNjc2lfc2F2ZWQpOworICAgIGxpYnhsX2RldmljZV92c2NzaV9jb3B5KENU WCwgJnZzY3NpX3NhdmVkLCB2c2NzaSk7CisKKyAgICBpZiAodnNjc2ktPmRldmlkID09IC0xKSB7 CisgICAgICAgIGlmICgodnNjc2ktPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRv bWlkLCAidnNjc2kiKSkgPCAwKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFkanVzdCBjb3B5 ICovCisgICAgbGlieGxfX3VwZGF0ZV9jb25maWdfdnNjc2koZ2MsICZ2c2NzaV9zYXZlZCwgdnNj c2kpOworCisgICAgR0NORVcoZGV2aWNlKTsKKyAgICByYyA9IGxpYnhsX19kZXZpY2VfZnJvbV92 c2NzaShnYywgZG9taWQsIHZzY3NpLCBkZXZpY2UpOworICAgIGlmIChyYykgZ290byBvdXQ7CisK KyAgICBpZiAoYW9kZXYtPnVwZGF0ZV9qc29uKSB7CisgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9j a19kb21haW5fdXNlcmRhdGEoZ2MsIGRvbWlkKTsKKyAgICAgICAgaWYgKCFsb2NrKSB7CisgICAg ICAgICAgICByYyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisKKyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdj LCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAg ICAvKiBSZXBsYWNlIG9yIGFwcGVuZCB0aGUgY29weSB0byB0aGUgZG9tYWluIGNvbmZpZyAqLwor ICAgICAgICBERVZJQ0VfQUREKHZzY3NpLCB2c2NzaXMsIGRvbWlkLCAmdnNjc2lfc2F2ZWQsIENP TVBBUkVfVlNDU0ksICZkX2NvbmZpZyk7CisgICAgfQorCisgICAgYW9kZXYtPmRldiA9IGRldmlj ZTsKKworICAgIGJlX3BhdGggPSBsaWJ4bF9fZGV2aWNlX2JhY2tlbmRfcGF0aChnYywgYW9kZXYt PmRldik7CisgICAgaWYgKGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBiZV9wYXRo LCAmYmVfZGlycykpIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3ZzY3NpX3JlY29uZmln dXJlKGVnYywgYW9kZXYsIHZzY3NpLCAmZF9jb25maWcsIGJlX3BhdGgsIE5VTEwpOworICAgICAg ICBpZiAocmMpCisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgLyogTm90aWZ5IHRoYXQg dGhpcyBpcyBkb25lICovCisgICAgICAgIGFvZGV2LT5jYWxsYmFjayhlZ2MsIGFvZGV2KTsKKyAg ICB9IGVsc2UgeworICAgICAgICByYyA9IGxpYnhsX19kZXZpY2VfdnNjc2lfbmV3X2JhY2tlbmQo ZWdjLCBhb2RldiwgdnNjc2ksICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykKKyAgICAgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBpZiAobG9jaykg bGlieGxfX3VubG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7CisgICAgbGlieGxfZGV2aWNlX3Zz Y3NpX2Rpc3Bvc2UoJnZzY3NpX3NhdmVkKTsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bv c2UoJmRfY29uZmlnKTsKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBpZiAocmMpIGFvZGV2LT5j YWxsYmFjayhlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhs X19kZXZpY2VfdnNjc2lfZGV2X3JtKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICphb2RldikK K3sKKyAgICBTVEFURV9BT19HQyhhb2Rldi0+YW8pOworICAgIGNoYXIgKmJlX3BhdGg7CisgICAg aW50IHJjLCBpLCBkZXZfd2FpdDsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOwor ICAgIGxpYnhsX19kb21haW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisgICAgbGlieGxf dnNjc2lfZGV2ICp2OworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworCisgICAg bGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7CisKKyAgICBpZiAodnNjc2ktPmRl dmlkID09IC0xKSB7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIC8qIE5vIG90aGVyIGNvZGUgd2lsbCB0cmF2ZXJzZSBkZXZpY2UgbGlz dCwgdXBkYXRlIGpzb24gd2l0aCByZW1vdmFsIGluZm8gKi8KKyAgICBpZiAoYW9kZXYtPnVwZGF0 ZV9qc29uKSB7CisgICAgICAgIGxvY2sgPSBsaWJ4bF9fbG9ja19kb21haW5fdXNlcmRhdGEoZ2Ms IGFvZGV2LT5kZXYtPmRvbWlkKTsKKyAgICAgICAgaWYgKCFsb2NrKSB7CisgICAgICAgICAgICBy YyA9IEVSUk9SX0xPQ0tfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisK KyAgICAgICAgcmMgPSBsaWJ4bF9fZ2V0X2RvbWFpbl9jb25maWd1cmF0aW9uKGdjLCBhb2Rldi0+ ZGV2LT5kb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAg ICAgICAvKiBSZXBsYWNlIHRoZSBpdGVtIGluIHRoZSBkb21haW4gY29uZmlnICovCisgICAgICAg IERFVklDRV9BREQodnNjc2ksIHZzY3NpcywgYW9kZXYtPmRldi0+ZG9taWQsIHZzY3NpLCBDT01Q QVJFX1ZTQ1NJLCAmZF9jb25maWcpOworICAgIH0KKworICAgIGJlX3BhdGggPSBsaWJ4bF9fZGV2 aWNlX2JhY2tlbmRfcGF0aChnYywgYW9kZXYtPmRldik7CisgICAgcmMgPSBsaWJ4bF9fZGV2aWNl X3ZzY3NpX3JlY29uZmlndXJlKGVnYywgYW9kZXYsIHZzY3NpLCAmZF9jb25maWcsIGJlX3BhdGgs ICZkZXZfd2FpdCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAg ICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ0KTsKKyAgICAgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdnNjc2ktPm51bV92 c2NzaV9kZXZzOyBpKyspIHsKKyAgICAgICAgICAgIHYgPSB2c2NzaS0+dnNjc2lfZGV2cyArIGk7 CisgICAgICAgICAgICBpZiAodi0+cmVtb3ZlKQorICAgICAgICAgICAgICAgIGxpYnhsX19kZXZp Y2VfdnNjc2lfZGV2X2JhY2tlbmRfcm0oZ2MsIHYsIHQsIGJlX3BhdGgsIGRldl93YWl0KTsKKyAg ICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywg JnQpOworICAgICAgICBpZiAoIXJjKSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBv dXQ7CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6CisgICAgaWYgKGxvY2spIGxpYnhsX191 bmxvY2tfZG9tYWluX3VzZXJkYXRhKGxvY2spOworICAgIGxpYnhsX2RvbWFpbl9jb25maWdfZGlz cG9zZSgmZF9jb25maWcpOworICAgIGFvZGV2LT5yYyA9IHJjOworICAgIC8qIE5vdGlmeSB0aGF0 IHRoaXMgaXMgZG9uZSAqLworICAgIGFvZGV2LT5jYWxsYmFjayhlZ2MsIGFvZGV2KTsKK30KKwor LyogRXh0ZW5kZWQgdmFyaWFudCBvZiBERUZJTkVfREVWSUNFX1JFTU9WRSB0byBoYW5kbGUgcmVj b25maWd1cmUgKi8KK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lfcmVtb3ZlKGxpYnhsX2N0eCAqY3R4 LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs aWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQoreworICAgIEFPX0NSRUFURShjdHgsIGRvbWlkLCBh b19ob3cpOworICAgIGxpYnhsX19kZXZpY2UgKmRldmljZTsKKyAgICBsaWJ4bF9fYW9fZGV2aWNl ICphb2RldjsKKyAgICBpbnQgcmMsIGk7CisgICAgdW5zaWduZWQgaW50IHJlbWFpbmluZyA9IHZz Y3NpLT5udW1fdnNjc2lfZGV2czsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4 bF9fZGV2aWNlX2Zyb21fdnNjc2koZ2MsIGRvbWlkLCB2c2NzaSwgZGV2aWNlKTsKKyAgICBpZiAo cmMgIT0gMCkgZ290byBvdXQ7CisKKyAgICBHQ05FVyhhb2Rldik7CisgICAgbGlieGxfX3ByZXBh cmVfYW9fZGV2aWNlKGFvLCBhb2Rldik7CisgICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19ERVZJ Q0VfQUNUSU9OX1JFTU9WRTsKKyAgICBhb2Rldi0+ZGV2ID0gZGV2aWNlOworICAgIGFvZGV2LT5j YWxsYmFjayA9IGRldmljZV9hZGRybV9hb2NvbXBsZXRlOworICAgIGFvZGV2LT5mb3JjZSA9IDA7 CisgICAgYW9kZXYtPnVwZGF0ZV9qc29uID0gdHJ1ZTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2 c2NzaS0+bnVtX3ZzY3NpX2RldnM7IGkrKykgeworICAgICAgICBpZiAodnNjc2ktPnZzY3NpX2Rl dnNbaV0ucmVtb3ZlKQorICAgICAgICAgICAgcmVtYWluaW5nLS07CisgICAgfQorCisgICAgTE9H KERFQlVHLCAiJXU6IHZfaHN0ICV1LCAldSBvZiAldSByZW1haW5pbmciLCBkb21pZCwgdnNjc2kt PnZfaHN0LCByZW1haW5pbmcsIHZzY3NpLT5udW1fdnNjc2lfZGV2cyk7CisgICAgaWYgKHJlbWFp bmluZykKKyAgICAgICAgbGlieGxfX2RldmljZV92c2NzaV9kZXZfcm0oZWdjLCB2c2NzaSwgYW9k ZXYpOworICAgIGVsc2UKKyAgICAgICAgbGlieGxfX2luaXRpYXRlX2RldmljZV9yZW1vdmUoZWdj LCBhb2Rldik7CisKK291dDoKKyAgICBpZiAocmMpIHJldHVybiBBT19DUkVBVEVfRkFJTChyYyk7 CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9CisKIGludCBsaWJ4bF9fZGV2aWNlX3Z0cG1f c2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kZXZpY2VfdnRwbSAqdnRwbSkKIHsKICAg ICBpbnQgcmM7CkBAIC00MTUzLDYgKzQ1ODMsNyBAQCBvdXQ6CiAgKiBsaWJ4bF9kZXZpY2VfZGlz a19kZXN0cm95CiAgKiBsaWJ4bF9kZXZpY2VfbmljX3JlbW92ZQogICogbGlieGxfZGV2aWNlX25p Y19kZXN0cm95CisgKiBsaWJ4bF9kZXZpY2VfdnNjc2lfZGVzdHJveQogICogbGlieGxfZGV2aWNl X3Z0cG1fcmVtb3ZlCiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9kZXN0cm95CiAgKiBsaWJ4bF9kZXZp Y2VfdmtiX3JlbW92ZQpAQCAtNDE5Nyw2ICs0NjI4LDkgQEAgREVGSU5FX0RFVklDRV9SRU1PVkUo ZGlzaywgZGVzdHJveSwgMSkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKG5pYywgcmVtb3ZlLCAwKQog REVGSU5FX0RFVklDRV9SRU1PVkUobmljLCBkZXN0cm95LCAxKQogCisvKiB2c2NzaSAqLworREVG SU5FX0RFVklDRV9SRU1PVkUodnNjc2ksIGRlc3Ryb3ksIDEpCisKIC8qIHZrYiAqLwogREVGSU5F X0RFVklDRV9SRU1PVkUodmtiLCByZW1vdmUsIDApCiBERUZJTkVfREVWSUNFX1JFTU9WRSh2a2Is IGRlc3Ryb3ksIDEpCkBAIC00MjIyLDYgKzQ2NTYsNyBAQCBERUZJTkVfREVWSUNFX1JFTU9WRSh2 dHBtLCBkZXN0cm95LCAxKQogLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlZmluZWQ6 CiAgKiBsaWJ4bF9kZXZpY2VfZGlza19hZGQKICAqIGxpYnhsX2RldmljZV9uaWNfYWRkCisgKiBs aWJ4bF9kZXZpY2VfdnNjc2lfYWRkCiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQKICAqLwogCkBA IC00MjUxLDYgKzQ2ODYsOSBAQCBERUZJTkVfREVWSUNFX0FERChkaXNrKQogLyogbmljICovCiBE RUZJTkVfREVWSUNFX0FERChuaWMpCiAKKy8qIHZzY3NpICovCitERUZJTkVfREVWSUNFX0FERCh2 c2NzaSkKKwogLyogdnRwbSAqLwogREVGSU5FX0RFVklDRV9BREQodnRwbSkKIApAQCAtNjc5MSw2 ICs3MjI5LDggQEAgaW50IGxpYnhsX3JldHJpZXZlX2RvbWFpbl9jb25maWd1cmF0aW9uKGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKIAogICAgIE1FUkdFKG5pYywgbmljcywgQ09NUEFS RV9ERVZJRCwge30pOwogCisgICAgTUVSR0UodnNjc2ksIHZzY3NpcywgQ09NUEFSRV9WU0NTSSwg e30pOworCiAgICAgTUVSR0UodnRwbSwgdnRwbXMsIENPTVBBUkVfREVWSUQsIHt9KTsKIAogICAg IE1FUkdFKHBjaSwgcGNpZGV2cywgQ09NUEFSRV9QQ0ksIHt9KTsKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsLmggYi90b29scy9saWJ4bC9saWJ4bC5oCmluZGV4IDE2OGZlZGQuLjM1ZjRi NjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsLmgKKysrIGIvdG9vbHMvbGlieGwvbGli eGwuaApAQCAtODIxLDYgKzgyMSwxMyBAQCB2b2lkIGxpYnhsX21hY19jb3B5KGxpYnhsX2N0eCAq Y3R4LCBsaWJ4bF9tYWMgKmRzdCwgbGlieGxfbWFjICpzcmMpOwogI2RlZmluZSBMSUJYTF9IQVZF X1BDSVRPUE9MT0dZIDEKIAogLyoKKyAqIExJQlhMX0hBVkVfVlNDU0kKKyAqCisgKiBJZiB0aGlz IGlzIGRlZmluZWQsIHRoZSBQViBTQ1NJIGZlYXR1cmUgaXMgc3VwcG9ydGVkLgorICovCisjZGVm aW5lIExJQlhMX0hBVkVfVlNDU0kgMQorCisvKgogICogTElCWExfSEFWRV9TT0NLRVRfQklUTUFQ CiAgKgogICogSWYgdGhpcyBpcyBkZWZpbmVkLCB0aGVuIGxpYnhsX3NvY2tldF9iaXRtYXBfYWxs b2MgYW5kCkBAIC0xNDQ2LDYgKzE0NTMsMjYgQEAgaW50IGxpYnhsX2RldmljZV9jaGFubmVsX2dl dGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX2NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9jaGFubmVsaW5mbyAqY2hhbm5lbGluZm8pOwog CisvKiBWaXJ0dWFsIFNDU0kgKi8KK2ludCBsaWJ4bF9kZXZpY2VfdnNjc2lfYWRkKGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs aWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgTElC WExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOworaW50IGxpYnhsX2RldmljZV92c2NzaV9yZW1vdmUo bGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJTX09OTFk7CitpbnQgbGlieGxfZGV2 aWNlX3ZzY3NpX2Rlc3Ryb3kobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hv dykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9FWFRFUk5BTF9DQUxMRVJT X09OTFk7CisKK2xpYnhsX2RldmljZV92c2NzaSAqbGlieGxfZGV2aWNlX3ZzY3NpX2xpc3QobGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51bSk7CitpbnQgbGlieGxfZGV2aWNl X3ZzY3NpX2dldGluZm8obGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2lfaG9zdCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9kZXYgKnZzY3NpX2RldiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaWluZm8gKnZzY3NpaW5m byk7CisKIC8qIFZpcnR1YWwgVFBNcyAqLwogaW50IGxpYnhsX2RldmljZV92dHBtX2FkZChsaWJ4 bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGxpYnhsX2RldmljZV92dHBtICp2dHBtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3luY29wX2hvdyAqYW9faG93KQpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgYi90b29scy9saWJ4bC9saWJ4 bF9jcmVhdGUuYwppbmRleCBmMGZlZTAwLi42MzljOGVmIDEwMDY0NAotLS0gYS90b29scy9saWJ4 bC9saWJ4bF9jcmVhdGUuYworKysgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwpAQCAtMTE1 MCw2ICsxMTUwLDcgQEAgc3RhdGljIHZvaWQgZG9tY3JlYXRlX3JlYnVpbGRfZG9uZShsaWJ4bF9f ZWdjICplZ2MsCiAgICAgbGlieGxfX211bHRpZGV2X2JlZ2luKGFvLCAmZGNzLT5tdWx0aWRldik7 CiAgICAgZGNzLT5tdWx0aWRldi5jYWxsYmFjayA9IGRvbWNyZWF0ZV9sYXVuY2hfZG07CiAgICAg bGlieGxfX2FkZF9kaXNrcyhlZ2MsIGFvLCBkb21pZCwgZF9jb25maWcsICZkY3MtPm11bHRpZGV2 KTsKKyAgICBsaWJ4bF9fYWRkX3ZzY3NpcyhlZ2MsIGFvLCBkb21pZCwgZF9jb25maWcsICZkY3Mt Pm11bHRpZGV2KTsKICAgICBsaWJ4bF9fbXVsdGlkZXZfcHJlcGFyZWQoZWdjLCAmZGNzLT5tdWx0 aWRldiwgMCk7CiAKICAgICByZXR1cm47CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9k ZXZpY2UuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jCmluZGV4IDhiYjVlOTMuLjMzZjFh ZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jCisrKyBiL3Rvb2xzL2xp YnhsL2xpYnhsX2RldmljZS5jCkBAIC01NDMsNiArNTQzLDcgQEAgdm9pZCBsaWJ4bF9fbXVsdGlk ZXZfcHJlcGFyZWQobGlieGxfX2VnYyAqZWdjLAogICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg YXJlIGRlZmluZWQ6CiAgKiBsaWJ4bF9fYWRkX2Rpc2tzCiAgKiBsaWJ4bF9fYWRkX25pY3MKKyAq IGxpYnhsX19hZGRfdnNjc2lzCiAgKiBsaWJ4bF9fYWRkX3Z0cG1zCiAgKi8KIApAQCAtNTYyLDYg KzU2Myw3IEBAIHZvaWQgbGlieGxfX211bHRpZGV2X3ByZXBhcmVkKGxpYnhsX19lZ2MgKmVnYywK IAogREVGSU5FX0RFVklDRVNfQUREKGRpc2spCiBERUZJTkVfREVWSUNFU19BREQobmljKQorREVG SU5FX0RFVklDRVNfQUREKHZzY3NpKQogREVGSU5FX0RFVklDRVNfQUREKHZ0cG0pCiAKICN1bmRl ZiBERUZJTkVfREVWSUNFU19BREQKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVy bmFsLmggYi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCmluZGV4IGIwMGFkZDAuLjVmZjNk MDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKKysrIGIvdG9vbHMv bGlieGwvbGlieGxfaW50ZXJuYWwuaApAQCAtMjU2Miw2ICsyNTYyLDEwIEBAIF9oaWRkZW4gdm9p ZCBsaWJ4bF9fZGV2aWNlX25pY19hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX25pYyAqbmlj LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fYW9fZGV2aWNlICph b2Rldik7CiAKK19oaWRkZW4gdm9pZCBsaWJ4bF9fZGV2aWNlX3ZzY3NpX2FkZChsaWJ4bF9fZWdj ICplZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2ksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCiBfaGlkZGVuIHZvaWQgbGli eGxfX2RldmljZV92dHBtX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnRwbSAqdnRwbSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9k ZXYpOwpAQCAtMzI4MCw2ICszMjg0LDEwIEBAIF9oaWRkZW4gdm9pZCBsaWJ4bF9fYWRkX25pY3Mo bGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW8gKmFvLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYpOwogCitf aGlkZGVuIHZvaWQgbGlieGxfX2FkZF92c2NzaXMobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW8g KmFvLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9kb21haW5fY29uZmlnICpkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fbXVsdGlkZXYgKm11bHRpZGV2KTsKKwogX2hpZGRlbiB2b2lkIGxpYnhsX19hZGRf dnRwbXMobGlieGxfX2VnYyAqZWdjLCBsaWJ4bF9fYW8gKmFvLCB1aW50MzJfdCBkb21pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZG9tYWluX2NvbmZpZyAqZF9jb25maWcs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19tdWx0aWRldiAqbXVsdGlkZXYp OwpAQCAtMzk0MCw2ICszOTQ4LDEzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaWJ4bF9fdXBkYXRl X2NvbmZpZ19uaWMobGlieGxfX2djICpnYywKICAgICBsaWJ4bF9tYWNfY29weShDVFgsICZkc3Qt Pm1hYywgJnNyYy0+bWFjKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGxpYnhsX191cGRhdGVf Y29uZmlnX3ZzY3NpKGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKmRzdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqc3JjKQor eworICAgIGRzdC0+ZGV2aWQgPSBzcmMtPmRldmlkOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQg bGlieGxfX3VwZGF0ZV9jb25maWdfdnRwbShsaWJ4bF9fZ2MgKmdjLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKmRzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92 dHBtICpzcmMpCkBAIC0zOTUyLDYgKzM5NjcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbGlieGxf X3VwZGF0ZV9jb25maWdfdnRwbShsaWJ4bF9fZ2MgKmdjLAogICogZGV2aWNlcyBoYXZlIHNhbWUg aWRlbnRpZmllci4gKi8KICNkZWZpbmUgQ09NUEFSRV9ERVZJRChhLCBiKSAoKGEpLT5kZXZpZCA9 PSAoYiktPmRldmlkKQogI2RlZmluZSBDT01QQVJFX0RJU0soYSwgYikgKCFzdHJjbXAoKGEpLT52 ZGV2LCAoYiktPnZkZXYpKQorI2RlZmluZSBDT01QQVJFX1ZTQ1NJKGEsIGIpICgoYSktPnZfaHN0 ID09IChiKS0+dl9oc3QpCiAjZGVmaW5lIENPTVBBUkVfUENJKGEsIGIpICgoYSktPmZ1bmMgPT0g KGIpLT5mdW5jICYmICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+YnVzID09 IChiKS0+YnVzICYmICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEpLT5kZXYg PT0gKGIpLT5kZXYpCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwgYi90 b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggNGQ3OGY4Ni4uM2MxYTc3MSAxMDA2NDQK LS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs X3R5cGVzLmlkbApAQCAtNjI2LDYgKzYyNiw0NCBAQCBsaWJ4bF9kZXZpY2VfY2hhbm5lbCA9IFN0 cnVjdCgiZGV2aWNlX2NoYW5uZWwiLCBbCiAgICAgICAgICAgIF0pKSwKIF0pCiAKK2xpYnhsX3Zz Y3NpX3BkZXZfdHlwZSA9IEVudW1lcmF0aW9uKCJ2c2NzaV9wZGV2X3R5cGUiLCBbCisgICAgKDAs ICJJTlZBTElEIiksCisgICAgKDEsICJIQ1RMIiksCisgICAgKDIsICJXV04iKSwKKyAgICBdKQor CitsaWJ4bF92c2NzaV9oY3RsID0gU3RydWN0KCJ2c2NzaV9oY3RsIiwgWworICAgICgiaHN0Iiwg dWludDMyKSwKKyAgICAoImNobiIsIHVpbnQzMiksCisgICAgKCJ0Z3QiLCB1aW50MzIpLAorICAg ICgibHVuIiwgdWludDMyKSwKKyAgICBdKQorCitsaWJ4bF92c2NzaV9wZGV2ID0gU3RydWN0KCJ2 c2NzaV9wZGV2IiwgWworICAgICgicF9kZXZuYW1lIiwgICAgICAgIHN0cmluZyksCisgICAgKCJ1 IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF92c2NzaV9wZGV2X3R5cGUsICJ0eXBlIiwKKyAgICAg ICAgWworICAgICAgICAgKCJpbnZhbGlkIiwgTm9uZSksCisgICAgICAgICAoImhjdGwiLCBTdHJ1 Y3QoTm9uZSwgWygibSIsIGxpYnhsX3ZzY3NpX2hjdGwpXSkpLAorICAgICAgICAgKCJ3d24iLCBT dHJ1Y3QoTm9uZSwgWygibSIsIHN0cmluZyldKSksCisgICAgICAgIF0pKSwKKyAgICBdKQorCits aWJ4bF92c2NzaV9kZXYgPSBTdHJ1Y3QoInZzY3NpX2RldiIsIFsKKyAgICAoInZzY3NpX2Rldl9p ZCIsICAgICBsaWJ4bF9kZXZpZCksCisgICAgKCJyZW1vdmUiLCAgICAgICAgICAgYm9vbCksCisg ICAgKCJwZGV2IiwgICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldiksCisgICAgKCJ2ZGV2Iiwg ICAgICAgICAgICAgbGlieGxfdnNjc2lfaGN0bCksCisgICAgXSkKKworbGlieGxfZGV2aWNlX3Zz Y3NpID0gU3RydWN0KCJkZXZpY2VfdnNjc2kiLCBbCisgICAgKCJiYWNrZW5kX2RvbWlkIiwgICAg bGlieGxfZG9taWQpLAorICAgICgiZGV2aWQiLCAgICAgICAgICAgIGxpYnhsX2RldmlkKSwKKyAg ICAoInZfaHN0IiwgICAgICAgICAgICB1aW50MzIpLAorICAgICgidnNjc2lfZGV2cyIsICAgICAg IEFycmF5KGxpYnhsX3ZzY3NpX2RldiwgIm51bV92c2NzaV9kZXZzIikpLAorICAgICgic2NzaV9y YXdfY21kcyIsICAgICBsaWJ4bF9kZWZib29sKSwKKyAgICBdKQorCiBsaWJ4bF9kb21haW5fY29u ZmlnID0gU3RydWN0KCJkb21haW5fY29uZmlnIiwgWwogICAgICgiY19pbmZvIiwgbGlieGxfZG9t YWluX2NyZWF0ZV9pbmZvKSwKICAgICAoImJfaW5mbyIsIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZv KSwKQEAgLTYzNyw2ICs2NzUsNyBAQCBsaWJ4bF9kb21haW5fY29uZmlnID0gU3RydWN0KCJkb21h aW5fY29uZmlnIiwgWwogICAgICgiZHRkZXZzIiwgQXJyYXkobGlieGxfZGV2aWNlX2R0ZGV2LCAi bnVtX2R0ZGV2cyIpKSwKICAgICAoInZmYnMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdmZiLCAibnVt X3ZmYnMiKSksCiAgICAgKCJ2a2JzIiwgQXJyYXkobGlieGxfZGV2aWNlX3ZrYiwgIm51bV92a2Jz IikpLAorICAgICgidnNjc2lzIiwgQXJyYXkobGlieGxfZGV2aWNlX3ZzY3NpLCAibnVtX3ZzY3Np cyIpKSwKICAgICAoInZ0cG1zIiwgQXJyYXkobGlieGxfZGV2aWNlX3Z0cG0sICJudW1fdnRwbXMi KSksCiAgICAgIyBhIGNoYW5uZWwgbWFuaWZlc3RzIGFzIGEgY29uc29sZSB3aXRoIGEgbmFtZSwK ICAgICAjIHNlZSBkb2NzL21pc2MvY2hhbm5lbHMudHh0CkBAIC02NzIsNiArNzExLDIyIEBAIGxp YnhsX25pY2luZm8gPSBTdHJ1Y3QoIm5pY2luZm8iLCBbCiAgICAgKCJycmVmX3J4IiwgaW50ZWdl ciksCiAgICAgXSwgZGlyPURJUl9PVVQpCiAKK2xpYnhsX3ZzY3NpaW5mbyA9IFN0cnVjdCgidnNj c2lpbmZvIiwgWworICAgICgiYmFja2VuZCIsIHN0cmluZyksCisgICAgKCJiYWNrZW5kX2lkIiwg dWludDMyKSwKKyAgICAoImZyb250ZW5kIiwgc3RyaW5nKSwKKyAgICAoImZyb250ZW5kX2lkIiwg dWludDMyKSwKKyAgICAoImRldmlkIiwgbGlieGxfZGV2aWQpLAorICAgICgicGRldiIsIGxpYnhs X3ZzY3NpX3BkZXYpLAorICAgICgidmRldiIsIGxpYnhsX3ZzY3NpX2hjdGwpLAorICAgICgidnNj c2lfZGV2X2lkIiwgbGlieGxfZGV2aWQpLAorICAgICgic2NzaV9yYXdfY21kcyIsIGJvb2wpLAor ICAgICgidnNjc2lfaG9zdF9zdGF0ZSIsIGludGVnZXIpLAorICAgICgidnNjc2lfZGV2X3N0YXRl IiwgaW50ZWdlciksCisgICAgKCJldnRjaCIsIGludGVnZXIpLAorICAgICgicnJlZiIsIGludGVn ZXIpLAorICAgIF0sIGRpcj1ESVJfT1VUKQorCiBsaWJ4bF92dHBtaW5mbyA9IFN0cnVjdCgidnRw bWluZm8iLCBbCiAgICAgKCJiYWNrZW5kIiwgc3RyaW5nKSwKICAgICAoImJhY2tlbmRfaWQiLCB1 aW50MzIpLApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRs IGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCmluZGV4IDVlNTU2ODUuLjg0 YzQ0ZjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbAor KysgYi90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRlcm5hbC5pZGwKQEAgLTIyLDYgKzIyLDcg QEAgbGlieGxfX2RldmljZV9raW5kID0gRW51bWVyYXRpb24oImRldmljZV9raW5kIiwgWwogICAg ICg2LCAiVktCRCIpLAogICAgICg3LCAiQ09OU09MRSIpLAogICAgICg4LCAiVlRQTSIpLAorICAg ICg5LCAiVlNDU0kiKSwKICAgICBdKQogCiBsaWJ4bF9fY29uc29sZV9iYWNrZW5kID0gRW51bWVy YXRpb24oImNvbnNvbGVfYmFja2VuZCIsIFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhs X3ZzY3NpLmMgYi90b29scy9saWJ4bC9saWJ4bF92c2NzaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLjc1OWY5NjgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9s aWJ4bF92c2NzaS5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1 ICAgICAgU1VTRSBMaW51eCBHbWJICisgKiBBdXRob3IgT2xhZiBIZXJpbmcgPG9sYWZAYWVwZmxl LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNp YWwKKyAqIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisg KgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlICJsaWJ4bF9vc2Rl cHMuaCIgLyogbXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVycyAqLworI2luY2x1ZGUg ImxpYnhsX2ludGVybmFsLmgiCisKKyNkZWZpbmUgWExVX1dXTl9MRU4gMTYKKworc3RhdGljIGlu dCB2c2NzaV9wYXJzZV9oY3RsKGNoYXIgKnN0ciwgbGlieGxfdnNjc2lfaGN0bCAqaGN0bCkKK3sK KyAgICB1bnNpZ25lZCBpbnQgaHN0LCBjaG4sIHRndCwgbHVuOworCisgICAgaWYgKHNzY2FuZihz dHIsICIldToldToldToldSIsICZoc3QsICZjaG4sICZ0Z3QsICZsdW4pICE9IDQpCisgICAgICAg IHJldHVybiBFUlJPUl9JTlZBTDsKKworICAgIGhjdGwtPmhzdCA9IGhzdDsKKyAgICBoY3RsLT5j aG4gPSBjaG47CisgICAgaGN0bC0+dGd0ID0gdGd0OworICAgIGhjdGwtPmx1biA9IGx1bjsKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGJvb2wgdnNjc2lfd3duX3ZhbGlkKGNvbnN0IGNoYXIg KnApCit7CisgICAgYm9vbCByZXQgPSB0cnVlOworICAgIGludCBpID0gMDsKKworICAgIGZvciAo aSA9IDA7IGkgPCBYTFVfV1dOX0xFTjsgaSsrLCBwKyspIHsKKyAgICAgICAgaWYgKCpwID49ICcw JyAmJiAqcCA8PSAnOScpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpwID49 ICdhJyAmJiAqcCA8PSAnZicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCpw ID49ICdBJyAmJiAqcCA8PSAnRicpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0 ID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisv KiBUcmFuc2xhdGUgcC1kZXYgYmFjayBpbnRvIHBkZXYudHlwZSAqLworc3RhdGljIGJvb2wgdnNj c2lfcGFyc2VfcGRldihsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF92c2NzaV9kZXYgKnZfZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjLCBjaGFyICpwLCBjaGFyICp2KQorewor ICAgIGxpYnhsX3ZzY3NpX2hjdGwgaGN0bDsKKyAgICB1bnNpZ25lZCBpbnQgbHVuOworICAgIGNo YXIgd3duW1hMVV9XV05fTEVOICsgMV07CisgICAgYm9vbCBwYXJzZWRfb2sgPSBmYWxzZTsKKwor ICAgIGxpYnhsX3ZzY3NpX2hjdGxfaW5pdCgmaGN0bCk7CisKKyAgICB2X2Rldi0+cGRldi5wX2Rl dm5hbWUgPSBsaWJ4bF9fc3RyZHVwKE5PR0MsIGMpOworCisgICAgaWYgKHN0cm5jbXAocCwgIm5h YS4iLCA0KSA9PSAwKSB7CisgICAgICAgIC8qIFdXTiBhcyB1bmRlcnN0b29kIGJ5IHB2b3BzICov CisgICAgICAgIG1lbXNldCh3d24sIDAsIHNpemVvZih3d24pKTsKKyAgICAgICAgaWYgKHNzY2Fu ZihwLCAibmFhLiUxNmM6JXUiLCB3d24sICZsdW4pID09IDIgJiYgdnNjc2lfd3duX3ZhbGlkKHd3 bikpIHsKKyAgICAgICAgICAgIGxpYnhsX3ZzY3NpX3BkZXZfaW5pdF90eXBlKCZ2X2Rldi0+cGRl diwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAgICB2X2Rldi0+cGRldi51 Lnd3bi5tID0gbGlieGxfX3N0cmR1cChOT0dDLCBwKTsKKyAgICAgICAgICAgIHBhcnNlZF9vayA9 IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZzY3NpX3BhcnNlX2hjdGwocCwgJmhj dGwpID09IDApIHsKKyAgICAgICAgLyogRWl0aGVyIHhlbmxpbnV4LCBvciBwdm9wcyB3aXRoIHBy b3Blcmx5IGNvbmZpZ3VyZWQgYWxpYXMgaW4gc3lzZnMgKi8KKyAgICAgICAgbGlieGxfdnNjc2lf cGRldl9pbml0X3R5cGUoJnZfZGV2LT5wZGV2LCBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSENUTCk7 CisgICAgICAgIGxpYnhsX3ZzY3NpX2hjdGxfY29weShDVFgsICZ2X2Rldi0+cGRldi51LmhjdGwu bSwgJmhjdGwpOworICAgICAgICBwYXJzZWRfb2sgPSB0cnVlOworICAgIH0KKworICAgIGlmIChw YXJzZWRfb2sgJiYgdnNjc2lfcGFyc2VfaGN0bCh2LCAmdl9kZXYtPnZkZXYpICE9IDApCisgICAg ICAgIHBhcnNlZF9vayA9IGZhbHNlOworCisgICAgbGlieGxfdnNjc2lfaGN0bF9kaXNwb3NlKCZo Y3RsKTsKKworICAgIHJldHVybiBwYXJzZWRfb2s7Cit9CisKK3N0YXRpYyB2b2lkIGxpYnhsX192 c2NzaV9maWxsX2hvc3QobGlieGxfX2djICpnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqZGV2c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqZGV2X2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBuZGV2X2RpcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaSAqdl9oc3QpCit7CisgICAgbGlieGxfdnNjc2lf ZGV2ICp2X2RldjsKKyAgICBib29sIHBhcnNlZF9vazsKKyAgICBjaGFyICpjLCAqcCwgKnYsICpz LCAqZGV2OworICAgIHVuc2lnbmVkIGludCB2c2NzaV9kZXZfaWQ7CisgICAgaW50IGksIHI7CisK KyAgICB2X2hzdC0+dnNjc2lfZGV2cyA9IGxpYnhsX19tYWxsb2MoTk9HQywgbmRldl9kaXJzICog c2l6ZW9mKCp2X2RldikpOworICAgIHZfaHN0LT5udW1fdnNjc2lfZGV2cyA9IG5kZXZfZGlyczsK KyAgICAvKiBGaWxsIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgaG9zdCAqLworICAgIGZv ciAoaSA9IDA7IGkgPCBuZGV2X2RpcnM7IGkrKywgZGV2X2RpcnMrKykgeworICAgICAgICB2X2Rl diA9IHZfaHN0LT52c2NzaV9kZXZzICsgaTsKKyAgICAgICAgbGlieGxfdnNjc2lfZGV2X2luaXQo dl9kZXYpOworICAgICAgICBwYXJzZWRfb2sgPSBmYWxzZTsKKyAgICAgICAgciA9IHNzY2FuZigq ZGV2X2RpcnMsICJkZXYtJXUiLCAmdnNjc2lfZGV2X2lkKTsKKyAgICAgICAgaWYgKHIgIT0gMSkg eworICAgICAgICAgICAgTE9HKEVSUk9SLCAiZXhwZWN0ZWQgZGV2LU4sIGdvdCAnJXMnIiwgKmRl dl9kaXJzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGV2 ID0gR0NTUFJJTlRGKCIlcy8lcyIsIGRldnNfcGF0aCwgKmRldl9kaXJzKTsKKyAgICAgICAgYyA9 IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRGKCIlcy9wLWRldm5hbWUiLCBk ZXYpKTsKKyAgICAgICAgcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRfTlVMTCwgR0NTUFJJTlRG KCIlcy9wLWRldiIsIGRldikpOworICAgICAgICB2ID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9O VUxMLCBHQ1NQUklOVEYoIiVzL3YtZGV2IiwgZGV2KSk7CisgICAgICAgIHMgPSBsaWJ4bF9feHNf cmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvc3RhdGUiLCBkZXYpKTsKKyAgICAgICAg TE9HKERFQlVHLCAiJXMvc3RhdGUgaXMgJXMiLCBkZXYsIHMpOworICAgICAgICBpZiAoIShjICYm IHAgJiYgdiAmJiBzKSkgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAicC1kZXZuYW1lICclcycg cC1kZXYgJyVzJyB2LWRldiAnJXMnIiwgYywgcCwgdik7CisgICAgICAgICAgICBjb250aW51ZTsK KyAgICAgICAgfQorCisgICAgICAgIHBhcnNlZF9vayA9IHZzY3NpX3BhcnNlX3BkZXYoZ2MsIHZf ZGV2LCBjLCBwLCB2KTsKKyAgICAgICAgc3dpdGNoIChhdG9pKHMpKSB7CisgICAgICAgICAgICBj YXNlIFhlbmJ1c1N0YXRlVW5rbm93bjoKKyAgICAgICAgICAgIGNhc2UgWGVuYnVzU3RhdGVJbml0 aWFsaXNpbmc6CisgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlSW5pdFdhaXQ6CisgICAgICAg ICAgICBjYXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzZWQ6CisgICAgICAgICAgICBjYXNlIFhlbmJ1 c1N0YXRlQ29ubmVjdGVkOgorICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJp bmc6CisgICAgICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlUmVjb25maWd1cmVkOgorICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6CisgICAg ICAgICAgICBjYXNlIFhlbmJ1c1N0YXRlQ2xvc2VkOgorICAgICAgICAgICAgICAgIHZfZGV2LT5y ZW1vdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg ICAgLyogSW5kaWNhdGlvbiBmb3IgY2FsbGVyIHRoYXQgdGhpcyB2X2RldiBpcyB1c2FibGUgKi8K KyAgICAgICAgaWYgKHBhcnNlZF9vaykgeworICAgICAgICAgICAgdl9kZXYtPnZzY3NpX2Rldl9p ZCA9IHZzY3NpX2Rldl9pZDsKKyAgICAgICAgICAgIHZfaHN0LT52X2hzdCA9IHZfZGV2LT52ZGV2 LmhzdDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZJWE1FIHdoYXQgaWYgeGVuc3RvcmUgaXMg YnJva2VuPyAqLworICAgICAgICBpZiAoIXBhcnNlZF9vaykKKyAgICAgICAgICAgIExPRyhFUlJP UiwgIiVzIGZhaWxlZCB0byBwYXJzZSIsIGRldik7CisgICAgfQorfQorCitsaWJ4bF9kZXZpY2Vf dnNjc2kgKmxpYnhsX2RldmljZV92c2NzaV9saXN0KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpu dW0pCit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGxpYnhsX2RldmljZV92c2NzaSAqdl9oc3Qs ICp2c2NzaV9ob3N0cyA9IE5VTEw7CisgICAgY2hhciAqZmVfcGF0aCwgKnRtcDsKKyAgICBjaGFy ICoqZGlyLCAqKmRldl9kaXJzOworICAgIGNvbnN0IGNoYXIgKmRldnNfcGF0aCwgKmJlX3BhdGg7 CisgICAgYm9vbCBwYXJzZWRfb2s7CisgICAgdW5zaWduZWQgaW50IG5kaXJzID0gMCwgbmRldl9k aXJzOworCisgICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3ZzY3NpIiwgbGlieGxf X3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCkpOworICAgIGRpciA9IGxpYnhsX194c19kaXJlY3Rv cnkoZ2MsIFhCVF9OVUxMLCBmZV9wYXRoLCAmbmRpcnMpOworICAgIC8qIE5vdGhpbmcgdG8gZG8g Ki8KKyAgICBpZiAoIShkaXIgJiYgbmRpcnMpKQorICAgICAgICBnb3RvIG91dDsKKworICAgIC8q IExpc3Qgb2YgaG9zdHMgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciAqLworICAgIHZzY3Np X2hvc3RzID0gbGlieGxfX21hbGxvYyhOT0dDLCBuZGlycyAqIHNpemVvZigqdnNjc2lfaG9zdHMp KTsKKworICAgIC8qIEZpbGwgZWFjaCBob3N0ICovCisgICAgZm9yICh2X2hzdCA9IHZzY3NpX2hv c3RzOyB2X2hzdCA8IHZzY3NpX2hvc3RzICsgbmRpcnM7ICsrdl9oc3QsICsrZGlyKSB7CisgICAg ICAgIGxpYnhsX2RldmljZV92c2NzaV9pbml0KHZfaHN0KTsKKworICAgICAgICB2X2hzdC0+ZGV2 aWQgPSBhdG9pKCpkaXIpOworCisgICAgICAgIHRtcCA9IGxpYnhsX194c19yZWFkKGdjLCBYQlRf TlVMTCwgR0NTUFJJTlRGKCIlcy8lcy9iYWNrZW5kLWlkIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmVfcGF0aCwgKmRpcikpOworICAgICAgICAvKiBGSVhNRSB3aGF0IGlmIHhlbnN0 b3JlIGlzIGJyb2tlbj8gKi8KKyAgICAgICAgaWYgKHRtcCkKKyAgICAgICAgICAgIHZfaHN0LT5i YWNrZW5kX2RvbWlkID0gYXRvaSh0bXApOworCisgICAgICAgIGJlX3BhdGggPSBsaWJ4bF9feHNf cmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvJXMvYmFja2VuZCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmZV9wYXRoLCAqZGlyKSk7CisgICAgICAgIC8qIEZJWE1F IHdoYXQgaWYgeGVuc3RvcmUgaXMgYnJva2VuPyAqLworICAgICAgICBpZiAoIWJlX3BhdGgpIHsK KyAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZ2X2hzdC0+c2NzaV9yYXdfY21kcywgZmFs c2UpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBwYXJzZWRf b2sgPSBmYWxzZTsKKyAgICAgICAgdG1wID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLCBH Q1NQUklOVEYoIiVzL2ZlYXR1cmUtaG9zdCIsIGJlX3BhdGgpKTsKKyAgICAgICAgaWYgKHRtcCkK KyAgICAgICAgICAgIHBhcnNlZF9vayA9IGF0b2kodG1wKSAhPSAwOworICAgICAgICBsaWJ4bF9k ZWZib29sX3NldCgmdl9oc3QtPnNjc2lfcmF3X2NtZHMsIHBhcnNlZF9vayk7CisKKyAgICAgICAg ZGV2c19wYXRoID0gR0NTUFJJTlRGKCIlcy92c2NzaS1kZXZzIiwgYmVfcGF0aCk7CisgICAgICAg IGRldl9kaXJzID0gbGlieGxfX3hzX2RpcmVjdG9yeShnYywgWEJUX05VTEwsIGRldnNfcGF0aCwg Jm5kZXZfZGlycyk7CisgICAgICAgIGlmIChkZXZfZGlycyAmJiBuZGV2X2RpcnMpCisgICAgICAg ICAgICBsaWJ4bF9fdnNjc2lfZmlsbF9ob3N0KGdjLCBkZXZzX3BhdGgsIGRldl9kaXJzLCBuZGV2 X2RpcnMsIHZfaHN0KTsKKyAgICB9CisKK291dDoKKyAgICAqbnVtID0gbmRpcnM7CisKKyAgICBH Q19GUkVFOworICAgIHJldHVybiB2c2NzaV9ob3N0czsKK30KKworaW50IGxpYnhsX2RldmljZV92 c2NzaV9nZXRpbmZvKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpX2hvc3QsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lfZGV2ICp2c2NzaV9kZXYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lpbmZvICp2c2NzaWluZm8p Cit7CisgICAgR0NfSU5JVChjdHgpOworICAgIGNoYXIgKmRvbXBhdGgsICp2c2NzaXBhdGg7Cisg ICAgY2hhciAqdmFsOworICAgIGludCByYyA9IEVSUk9SX0ZBSUw7CisKKyAgICBsaWJ4bF92c2Nz aWluZm9faW5pdCh2c2NzaWluZm8pOworICAgIGRvbXBhdGggPSBsaWJ4bF9feHNfZ2V0X2RvbXBh dGgoZ2MsIGRvbWlkKTsKKyAgICB2c2NzaWluZm8tPmRldmlkID0gdnNjc2lfaG9zdC0+ZGV2aWQ7 CisgICAgbGlieGxfdnNjc2lfcGRldl9jb3B5KGN0eCwgJnZzY3NpaW5mby0+cGRldiwgJnZzY3Np X2Rldi0+cGRldik7CisgICAgbGlieGxfdnNjc2lfaGN0bF9jb3B5KGN0eCwgJnZzY3NpaW5mby0+ dmRldiwgJnZzY3NpX2Rldi0+dmRldik7CisKKyAgICB2c2NzaXBhdGggPSBHQ1NQUklOVEYoIiVz L2RldmljZS92c2NzaS8lZCIsIGRvbXBhdGgsIHZzY3NpaW5mby0+ZGV2aWQpOworICAgIHZzY3Np aW5mby0+YmFja2VuZCA9IHhzX3JlYWQoY3R4LT54c2gsIFhCVF9OVUxMLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9iYWNrZW5kIiwgdnNjc2lwYXRoKSwg TlVMTCk7CisgICAgaWYgKCF2c2NzaWluZm8tPmJhY2tlbmQpCisgICAgICAgIGdvdG8gb3V0Owor ICAgIGlmKCFsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIHZzY3NpaW5mby0+YmFja2VuZCkp CisgICAgICAgIGdvdG8gb3V0OworCisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9O VUxMLCBHQ1NQUklOVEYoIiVzL2JhY2tlbmQtaWQiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWlu Zm8tPmJhY2tlbmRfaWQgPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAg ICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvc3RhdGUi LCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPnZzY3NpX2hvc3Rfc3RhdGUgPSB2YWwgPyBz dHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChn YywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvZXZlbnQtY2hhbm5lbCIsIHZzY3NpcGF0aCkpOwor ICAgIHZzY3NpaW5mby0+ZXZ0Y2ggPSB2YWwgPyBzdHJ0b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7 CisKKyAgICB2YWwgPSBsaWJ4bF9feHNfcmVhZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMv cmluZy1yZWYiLCB2c2NzaXBhdGgpKTsKKyAgICB2c2NzaWluZm8tPnJyZWYgPSB2YWwgPyBzdHJ0 b3VsKHZhbCwgTlVMTCwgMTApIDogLTE7CisKKyAgICB2c2NzaWluZm8tPmZyb250ZW5kID0geHNf cmVhZChjdHgtPnhzaCwgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NTUFJJTlRGKCIlcy9mcm9udGVuZCIsIHZzY3NpaW5mby0+YmFja2VuZCksIE5VTEwpOwor CisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgIEdDU1BSSU5URigiJXMvZnJvbnRlbmQtaWQiLCB2c2NzaWluZm8tPmJhY2tlbmQp KTsKKyAgICB2c2NzaWluZm8tPmZyb250ZW5kX2lkID0gdmFsID8gc3RydG91bCh2YWwsIE5VTEws IDEwKSA6IC0xOworCisgICAgdmFsID0gbGlieGxfX3hzX3JlYWQoZ2MsIFhCVF9OVUxMLAorICAg ICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvdnNjc2ktZGV2cy9kZXYtJXUvc3Rh dGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby0+YmFja2VuZCwgdnNjc2lf ZGV2LT52c2NzaV9kZXZfaWQpKTsKKyAgICB2c2NzaWluZm8tPnZzY3NpX2Rldl9zdGF0ZSA9IHZh bCA/IHN0cnRvdWwodmFsLCBOVUxMLCAxMCkgOiAtMTsKKworICAgIHJjID0gMDsKK291dDoKKyAg ICBHQ19GUkVFOworICAgIHJldHVybiByYzsKK30KKworCisKKy8qCisgKiBMb2NhbCB2YXJpYWJs ZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9k ZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsdV92c2Nz aS5jIGIvdG9vbHMvbGlieGwvbGlieGx1X3ZzY3NpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uM2VmY2M4MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs dV92c2NzaS5jCkBAIC0wLDAgKzEsNzQ5IEBACisvKgorICogbGlieGx1X3ZzY3NpLmMgLSB4bCBj b25maWd1cmF0aW9uIGZpbGUgcGFyc2luZzogc2V0dXAgYW5kIGhlbHBlciBmdW5jdGlvbnMKKyAq CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgICAgICBTVVNFIExpbnV4IEdtYkgKKyAqIEF1dGhvciBP bGFmIEhlcmluZyA8b2xhZkBhZXBmbGUuZGU+CisgKiBBdXRob3IgT25kxZllaiBIb2xlxI1layA8 YWFhbm56QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk CisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3 aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmls ZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVk ZSAibGlieGxfb3NkZXBzLmgiIC8qIG11c3QgY29tZSBiZWZvcmUgYW55IG90aGVyIGhlYWRlcnMg Ki8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGRp cmVudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs dWRlICJsaWJ4bHVfaW50ZXJuYWwuaCIKKworI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBMT0co X2MsIF94LCBfYS4uLikgXAorICAgICAgICBpZigoX2MpICYmIChfYyktPnJlcG9ydCkgZnByaW50 ZigoX2MpLT5yZXBvcnQsICIlcygldSk6ICIgX3ggIlxuIiwgX19mdW5jX18sIF9fTElORV9fLCAj I19hKQorCisjZGVmaW5lIFhMVV9TWVNGU19UQVJHRVRfUFZTQ1NJICIvc3lzL2tlcm5lbC9jb25m aWcvdGFyZ2V0L3hlbi1wdnNjc2kiCisjZGVmaW5lIFhMVV9XV05fTEVOIDE2CitzdHJ1Y3QgeGx1 X192c2NzaV90YXJnZXQgeworICAgIFhMVV9Db25maWcgKmNmZzsKKyAgICBsaWJ4bF92c2NzaV9o Y3RsICpwZGV2X2hjdGw7CisgICAgbGlieGxfdnNjc2lfcGRldiAqcGRldjsKKyAgICBjaGFyIHBh dGhbUEFUSF9NQVhdOworICAgIGNoYXIgdWRldl9wYXRoW1BBVEhfTUFYXTsKKyAgICBjaGFyIHd3 bltYTFVfV1dOX0xFTiArIDFdOworICAgIHVuc2lnbmVkIGludCBsdW47Cit9OworCitzdGF0aWMg aW50IHhsdV9fdnNjc2lfcGFyc2VfaGN0bChjaGFyICpzdHIsIGxpYnhsX3ZzY3NpX2hjdGwgKmhj dGwpCit7CisgICAgdW5zaWduZWQgaW50IGhzdCwgY2huLCB0Z3QsIGx1bjsKKworICAgIGlmIChz c2NhbmYoc3RyLCAiJXU6JXU6JXU6JXUiLCAmaHN0LCAmY2huLCAmdGd0LCAmbHVuKSAhPSA0KQor ICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICBoY3RsLT5oc3QgPSBoc3Q7CisgICAg aGN0bC0+Y2huID0gY2huOworICAgIGhjdGwtPnRndCA9IHRndDsKKyAgICBoY3RsLT5sdW4gPSBs dW47CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICp4bHVfX3ZzY3NpX3RyaW1fc3Ry aW5nKGNoYXIgKnMpCit7CisgICAgc2l6ZV90IGxlbjsKKworICAgIHdoaWxlIChpc3NwYWNlKCpz KSkKKyAgICAgICAgcysrOworICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICB3aGlsZSAobGVuLS0g PiAxICYmIGlzc3BhY2Uoc1tsZW5dKSkKKyAgICAgICAgc1tsZW5dID0gJ1wwJzsKKyAgICByZXR1 cm4gczsKK30KKworCitzdGF0aWMgaW50IHhsdV9fdnNjc2lfcGFyc2VfZGV2KFhMVV9Db25maWcg KmNmZywgY2hhciAqcGRldiwgbGlieGxfdnNjc2lfaGN0bCAqaGN0bCkKK3sKKyAgICBzdHJ1Y3Qg c3RhdCBkZW50cnk7CisgICAgY2hhciAqc3lzZnMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnR5 cGU7CisgICAgaW50IHJjLCBmb3VuZCA9IDA7CisgICAgRElSICpkaXJwOworICAgIHN0cnVjdCBk aXJlbnQgKmRlOworCisgICAgLyogc3RhdCBwZGV2IHRvIGdldCBkZXZpY2UncyBzeXNmcyBlbnRy eSAqLworICAgIGlmIChzdGF0IChwZGV2LCAmZGVudHJ5KSA8IDApIHsKKyAgICAgICAgTE9HKGNm ZywgIiVzLCBkZXZpY2Ugbm9kZSBub3QgZm91bmQiLCBwZGV2KTsKKyAgICAgICAgcmMgPSBFUlJP Ul9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKFNfSVNCTEsgKGRl bnRyeS5zdF9tb2RlKSkgeworICAgICAgICB0eXBlID0gImJsb2NrIjsKKyAgICB9IGVsc2UgaWYg KFNfSVNDSFIgKGRlbnRyeS5zdF9tb2RlKSkgeworICAgICAgICB0eXBlID0gImNoYXIiOworICAg IH0gZWxzZSB7CisgICAgICAgIExPRyhjZmcsICIlcywgZGV2aWNlIG5vZGUgbm90IGEgYmxvY2sg b3IgY2hhciBkZXZpY2UiLCBwZGV2KTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAg ICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogL3N5cy9kZXYvdHlwZS9tYWpvcjptaW5vciBz eW1saW5rIGFkZGVkIGluIDIuNi4yNyAqLworICAgIGlmIChhc3ByaW50Zigmc3lzZnMsICIvc3lz L2Rldi8lcy8ldToldS9kZXZpY2Uvc2NzaV9kZXZpY2UiLCB0eXBlLAorICAgICAgICAgICAgICAg ICBtYWpvcihkZW50cnkuc3RfcmRldiksIG1pbm9yKGRlbnRyeS5zdF9yZGV2KSkgPCAwKSB7Cisg ICAgICAgIHN5c2ZzID0gTlVMTDsKKyAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAg Z290byBvdXQ7CisgICAgfQorCisgICAgZGlycCA9IG9wZW5kaXIoc3lzZnMpOworICAgIGlmICgh ZGlycCkgeworICAgICAgICBMT0coY2ZnLCAiJXMsIG5vIG1ham9yOm1pbm9yIGxpbmsgaW4gc3lz ZnMiLCBwZGV2KTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7 CisgICAgfQorCisgICAgd2hpbGUgKChkZSA9IHJlYWRkaXIoZGlycCkpKSB7CisgICAgICAgIGlm ICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwgIXN0cmNtcChkZS0+ZF9uYW1lLCAiLi4iKSkK KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh4bHVfX3ZzY3NpX3BhcnNlX2hj dGwoZGUtPmRfbmFtZSwgaGN0bCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBm b3VuZCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjbG9zZWRpcihkaXJwKTsKKwor ICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgTE9HKGNmZywgIiVzLCBubyBoOmM6dDpsIGxpbmsg aW4gc3lzZnMiLCBwZGV2KTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGZyZWUoc3lzZnMpOworICAg IHJldHVybiByYzsKK30KKworc3RhdGljIGJvb2wgeGx1X192c2NzaV93d25fdmFsaWQoY29uc3Qg Y2hhciAqcCkKK3sKKyAgICBib29sIHJldCA9IHRydWU7CisgICAgaW50IGkgPSAwOworCisgICAg Zm9yIChpID0gMDsgaSA8IFhMVV9XV05fTEVOOyBpKyssIHArKykgeworICAgICAgICBpZiAoKnAg Pj0gJzAnICYmICpwIDw9ICc5JykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAo KnAgPj0gJ2EnICYmICpwIDw9ICdmJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp ZiAoKnAgPj0gJ0EnICYmICpwIDw9ICdGJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICByZXQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9 CisKK3N0YXRpYyBib29sIHhsdV9fdnNjc2lfY29tcGFyZV9oY3RsKGxpYnhsX3ZzY3NpX2hjdGwg KmEsIGxpYnhsX3ZzY3NpX2hjdGwgKmIpCit7CisgICAgaWYgKGEtPmhzdCA9PSBiLT5oc3QgJiYK KyAgICAgICAgYS0+Y2huID09IGItPmNobiAmJgorICAgICAgICBhLT50Z3QgPT0gYi0+dGd0ICYm CisgICAgICAgIGEtPmx1biA9PSBiLT5sdW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJl dHVybiBmYWxzZTsKK30KKworLyogRmluYWxseSBhdAorICogL3N5cy9rZXJuZWwvY29uZmlnL3Rh cmdldC94ZW4tcHZzY3NpL25hYS48d3duPi90cGd0XzEvbHVuL2x1bl8wLzxYPi91ZGV2X3BhdGgK KyAqLworc3RhdGljIGJvb2wgeGx1X192c2NzaV9jb21wYXJlX3VkZXYoc3RydWN0IHhsdV9fdnNj c2lfdGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCByZXQ7CisgICAgaW50IGZkOworICAgIHNzaXpl X3QgcmVhZF9zejsKKyAgICBsaWJ4bF92c2NzaV9oY3RsIHVkZXZfaGN0bDsKKworICAgIGxpYnhs X3ZzY3NpX2hjdGxfaW5pdCgmdWRldl9oY3RsKTsKKworICAgIGZkID0gb3Blbih0Z3QtPnBhdGgs IE9fUkRPTkxZKTsKKyAgICBpZiAoZmQgPCAwKXsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAg ICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByZWFkX3N6ID0gcmVhZChmZCwgJnRndC0+dWRldl9w YXRoLCBzaXplb2YodGd0LT51ZGV2X3BhdGgpIC0gMSk7CisgICAgY2xvc2UoZmQpOworCisgICAg aWYgKHJlYWRfc3ogPD0gMCB8fCByZWFkX3N6ID4gc2l6ZW9mKHRndC0+dWRldl9wYXRoKSAtIDEp IHsKKyAgICAgICAgcmV0ID0gZmFsc2U7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICB0 Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9ICdcMCc7CisgICAgcmVhZF9zei0tOworICAgIGlmICh0 Z3QtPnVkZXZfcGF0aFtyZWFkX3N6XSA9PSAnXG4nKQorICAgICAgICB0Z3QtPnVkZXZfcGF0aFty ZWFkX3N6XSA9ICdcMCc7CisKKyAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9kZXYodGd0LT5jZmcs IHRndC0+dWRldl9wYXRoLCAmdWRldl9oY3RsKSkgeworICAgICAgICByZXQgPSBmYWxzZTsKKyAg ICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHJldCA9IHhsdV9fdnNjc2lfY29tcGFyZV9oY3Rs KHRndC0+cGRldl9oY3RsLCAmdWRldl9oY3RsKTsKKworb3V0OgorICAgIGxpYnhsX3ZzY3NpX2hj dGxfZGlzcG9zZSgmdWRldl9oY3RsKTsKKyAgICByZXR1cm4gcmV0OworfQorCisvKiAvc3lzL2tl cm5lbC9jb25maWcvdGFyZ2V0L3hlbi1wdnNjc2kvbmFhLjx3d24+L3RwZ3RfMS9sdW4vbHVuXzAv PFg+L3VkZXZfcGF0aCAqLworc3RhdGljIGJvb2wgeGx1X192c2NzaV93YWxrX2Rpcl9sdW4oc3Ry dWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIg KmRpcnA7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3Ry bGVuKHRndC0+cGF0aCk7CisgICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07 CisKKyAgICBkaXJwID0gb3BlbmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAg ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0g cmVhZGRpcihkaXJwKSkpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8 fCAhc3RyY21wKGRlLT5kX25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg ICAgICAgc25wcmludGYoc3ViZGlyLCBzaXplb2YodGd0LT5wYXRoKSAtIHBhdGhfbGVuLCAiLyVz L3VkZXZfcGF0aCIsIGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5kID0geGx1X192c2NzaV9j b21wYXJlX3VkZXYodGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJlYWs7 CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnApOwor ICAgIHJldHVybiBmb3VuZDsKK30KKworLyogL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4t cHZzY3NpL25hYS48d3duPi90cGd0XzEvbHVuL2x1bl8wICovCitzdGF0aWMgYm9vbCB4bHVfX3Zz Y3NpX3dhbGtfZGlyX2x1bnMoc3RydWN0IHhsdV9fdnNjc2lfdGFyZ2V0ICp0Z3QpCit7CisgICAg Ym9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3RydWN0IGRpcmVudCAqZGU7CisgICAg c2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7CisgICAgY2hhciAqc3ViZGlyID0g JnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0gb3BlbmRpcih0Z3QtPnBhdGgpOwor ICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm91bmQgPSBmYWxz ZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkpIHsKKyAgICAgICAgaWYgKCFzdHJj bXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5kX25hbWUsICIuLiIpKQorICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNzY2FuZihkZS0+ZF9uYW1lLCAibHVuXyV1 IiwgJnRndC0+bHVuKSAhPSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKworICAgICAgICBz bnByaW50ZihzdWJkaXIsIHNpemVvZih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMiLCBkZS0+ ZF9uYW1lKTsKKworICAgICAgICBmb3VuZCA9IHhsdV9fdnNjc2lfd2Fsa19kaXJfbHVuKHRndCk7 CisgICAgICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICpzdWJk aXIgPSAnXDAnOworICAgIH0KKyAgICBjbG9zZWRpcihkaXJwKTsKKyAgICByZXR1cm4gZm91bmQ7 Cit9CisKKy8qIC9zeXMva2VybmVsL2NvbmZpZy90YXJnZXQveGVuLXB2c2NzaS9uYWEuPHd3bj4v dHBndF8xICovCitzdGF0aWMgYm9vbCB4bHVfX3ZzY3NpX3dhbGtfZGlyX25hYShzdHJ1Y3QgeGx1 X192c2NzaV90YXJnZXQgKnRndCkKK3sKKyAgICBib29sIGZvdW5kOworICAgIERJUiAqZGlycDsK KyAgICBzdHJ1Y3QgZGlyZW50ICpkZTsKKyAgICBzaXplX3QgcGF0aF9sZW4gPSBzdHJsZW4odGd0 LT5wYXRoKTsKKyAgICBjaGFyICpzdWJkaXIgPSAmdGd0LT5wYXRoW3BhdGhfbGVuXTsKKyAgICB1 bnNpZ25lZCBpbnQgdHBndDsKKworICAgIGRpcnAgPSBvcGVuZGlyKHRndC0+cGF0aCk7CisgICAg aWYgKCFkaXJwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3VuZCA9IGZhbHNlOwor ICAgIHdoaWxlICgoZGUgPSByZWFkZGlyKGRpcnApKSkgeworICAgICAgICBpZiAoIXN0cmNtcChk ZS0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAg ICBjb250aW51ZTsKKworICAgICAgICBpZiAoc3NjYW5mKGRlLT5kX25hbWUsICJ0cGd0XyV1Iiwg JnRwZ3QpICE9IDEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzbnByaW50Zihz dWJkaXIsIHNpemVvZih0Z3QtPnBhdGgpIC0gcGF0aF9sZW4sICIvJXMvbHVuIiwgZGUtPmRfbmFt ZSk7CisKKyAgICAgICAgZm91bmQgPSB4bHVfX3ZzY3NpX3dhbGtfZGlyX2x1bnModGd0KTsKKyAg ICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9 ICdcMCc7CisgICAgfQorICAgIGNsb3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30K KworLyogL3N5cy9rZXJuZWwvY29uZmlnL3RhcmdldC94ZW4tcHZzY3NpL25hYS48d3duPiAqLwor c3RhdGljIGJvb2wgeGx1X192c2NzaV9maW5kX3RhcmdldF93d24oc3RydWN0IHhsdV9fdnNjc2lf dGFyZ2V0ICp0Z3QpCit7CisgICAgYm9vbCBmb3VuZDsKKyAgICBESVIgKmRpcnA7CisgICAgc3Ry dWN0IGRpcmVudCAqZGU7CisgICAgc2l6ZV90IHBhdGhfbGVuID0gc3RybGVuKHRndC0+cGF0aCk7 CisgICAgY2hhciAqc3ViZGlyID0gJnRndC0+cGF0aFtwYXRoX2xlbl07CisKKyAgICBkaXJwID0g b3BlbmRpcih0Z3QtPnBhdGgpOworICAgIGlmICghZGlycCkKKyAgICAgICAgcmV0dXJuIGZhbHNl OworCisgICAgZm91bmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoKGRlID0gcmVhZGRpcihkaXJwKSkp IHsKKyAgICAgICAgaWYgKCFzdHJjbXAoZGUtPmRfbmFtZSwgIi4iKSB8fCAhc3RyY21wKGRlLT5k X25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHNzY2Fu ZihkZS0+ZF9uYW1lLCAibmFhLiUxNmMiLCB0Z3QtPnd3bikgIT0gMSkKKyAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICBpZiAoIXhsdV9fdnNjc2lfd3duX3ZhbGlkKHRndC0+d3duKSkKKyAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNucHJpbnRmKHN1YmRpciwgc2l6ZW9mKHRn dC0+cGF0aCkgLSBwYXRoX2xlbiwgIi8lcyIsIGRlLT5kX25hbWUpOworCisgICAgICAgIGZvdW5k ID0geGx1X192c2NzaV93YWxrX2Rpcl9uYWEodGd0KTsKKyAgICAgICAgaWYgKGZvdW5kKQorICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKnN1YmRpciA9ICdcMCc7CisgICAgfQorICAgIGNs b3NlZGlyKGRpcnApOworICAgIHJldHVybiBmb3VuZDsKK30KKworLyoKKyAqIENvbnZlcnQgcGRl diBmcm9tIGNvbmZpZyBzdHJpbmcgaW50byBwZGV2IHByb3BlcnR5IGZvciBiYWNrZW5kLAorICog d2hpY2ggaXMgZWl0aGVyIGg6Yzp0OmwgZm9yIHhlbmxpbnV4IG9yIG5hYS53d246bHVuIGZvciBw dm9wcworICovCitzdGF0aWMgaW50IHhsdV9fdnNjc2lfZGV2X3RvX3BkZXYoWExVX0NvbmZpZyAq Y2ZnLCBsaWJ4bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX3ZzY3NpX2hjdGwgKnBkZXZfaGN0bCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9wZGV2ICpwZGV2KQoreworICAgIGludCByYyA9 IEVSUk9SX0lOVkFMOworICAgIHN0cnVjdCB4bHVfX3ZzY3NpX3RhcmdldCAqdGd0OworICAgIHN0 YXRpYyBjb25zdCBjaGFyIHhlbl9wdnNjc2lbXSA9IFhMVV9TWVNGU19UQVJHRVRfUFZTQ1NJOwor CisgICAgLyogRmlyc3QgZ2V0IGhjdGwgcmVwcmVzZW50YXRpb24gb2YgY29uZmlnIGl0ZW0gKi8K KyAgICBpZiAoeGx1X192c2NzaV9wYXJzZV9kZXYoY2ZnLCBzdHIsIHBkZXZfaGN0bCkpCisgICAg ICAgIGdvdG8gb3V0OworCisgICAgLyogQ2hlY2sgaWYgYSBTQ1NJIHRhcmdldCBpdGVtIGV4aXN0 cyBmb3IgdGhlIGNvbmZpZyBpdGVtICovCisgICAgaWYgKGFjY2Vzcyh4ZW5fcHZzY3NpLCBGX09L KSA9PSAwKSB7CisgICAgICAgIHRndCA9IGNhbGxvYygxLCBzaXplb2YoKnRndCkpOworICAgICAg ICBpZiAoIXRndCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIHRndC0+Y2ZnID0gY2ZnOworICAgICAgICB0 Z3QtPnBkZXZfaGN0bCA9IHBkZXZfaGN0bDsKKyAgICAgICAgdGd0LT5wZGV2ID0gcGRldjsKKyAg ICAgICAgc25wcmludGYodGd0LT5wYXRoLCBzaXplb2YodGd0LT5wYXRoKSwgIiVzIiwgeGVuX3B2 c2NzaSk7CisgICAgICAgIGlmICh4bHVfX3ZzY3NpX2ZpbmRfdGFyZ2V0X3d3bih0Z3QpID09IHRy dWUpIHsKKyAgICAgICAgICAgIExPRyhjZmcsICInJXMnIG1hcHMgdG8gJyVzKCVzKSciLCBzdHIs IHRndC0+cGF0aCwgdGd0LT51ZGV2X3BhdGgpOworICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRl dl9pbml0X3R5cGUocGRldiwgTElCWExfVlNDU0lfUERFVl9UWVBFX1dXTik7CisgICAgICAgICAg ICBpZiAoYXNwcmludGYoJnBkZXYtPnUud3duLm0sICJuYWEuJXM6JXUiLCB0Z3QtPnd3biwgdGd0 LT5sdW4pIDwgMCkgeworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnJl ZSh0Z3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEFzc3VtZSB4ZW5saW51eCBiYWNrZW5k ICovCisgICAgICAgIGxpYnhsX3ZzY3NpX3BkZXZfaW5pdF90eXBlKHBkZXYsIExJQlhMX1ZTQ1NJ X1BERVZfVFlQRV9IQ1RMKTsKKyAgICAgICAgbGlieGxfdnNjc2lfaGN0bF9jb3B5KGN0eCwgJnBk ZXYtPnUuaGN0bC5tLCBwZGV2X2hjdGwpOworICAgIH0KKyAgICByYyA9IDA7CisKK291dDoKKyAg ICByZXR1cm4gcmM7Cit9CisKKy8qIFdXTiBhcyB1bmRlcnN0b29kIGJ5IHB2b3BzICovCitzdGF0 aWMgaW50IHhsdV9fdnNjc2lfd3duX3RvX3BkZXYoWExVX0NvbmZpZyAqY2ZnLCBjaGFyICpzdHIs IGxpYnhsX3ZzY3NpX3BkZXYgKnBkZXYpCit7CisgICAgaW50IHJjID0gRVJST1JfSU5WQUw7Cisg ICAgdW5zaWduZWQgaW50IGx1bjsKKyAgICBjaGFyIHd3bltYTFVfV1dOX0xFTiArIDFdOworCisg ICAgbWVtc2V0KHd3biwgMCwgc2l6ZW9mKHd3bikpOworICAgIGlmIChzc2NhbmYoc3RyLCAibmFh LiUxNmM6JXUiLCB3d24sICZsdW4pID09IDIgJiYgeGx1X192c2NzaV93d25fdmFsaWQod3duKSkg eworICAgICAgICBsaWJ4bF92c2NzaV9wZGV2X2luaXRfdHlwZShwZGV2LCBMSUJYTF9WU0NTSV9Q REVWX1RZUEVfV1dOKTsKKyAgICAgICAgcGRldi0+dS53d24ubSA9IHN0cmR1cChzdHIpOworICAg ICAgICByYyA9IHBkZXYtPnUud3duLm0gPyAwIDogRVJST1JfTk9NRU07CisgICAgfQorICAgIHJl dHVybiByYzsKK30KKworc3RhdGljIGludCB4bHVfX3ZzY3NpX3BhcnNlX3BkZXYoWExVX0NvbmZp ZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfdnNjc2lfcGRldiAqcGRldikKK3sKKyAgICBpbnQgcmMgPSBFUlJP Ul9JTlZBTDsKKyAgICBsaWJ4bF92c2NzaV9oY3RsIHBkZXZfaGN0bDsKKworICAgIGxpYnhsX3Zz Y3NpX2hjdGxfaW5pdCgmcGRldl9oY3RsKTsKKyAgICBpZiAoc3RybmNtcChzdHIsICIvZGV2LyIs IDUpID09IDApIHsKKyAgICAgICAgcmMgPSB4bHVfX3ZzY3NpX2Rldl90b19wZGV2KGNmZywgY3R4 LCBzdHIsICZwZGV2X2hjdGwsIHBkZXYpOworICAgIH0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJu YWEuIiwgNCkgPT0gMCkgeworICAgICAgICByYyA9IHhsdV9fdnNjc2lfd3duX3RvX3BkZXYoY2Zn LCBzdHIsIHBkZXYpOworICAgIH0gZWxzZSBpZiAoeGx1X192c2NzaV9wYXJzZV9oY3RsKHN0ciwg JnBkZXZfaGN0bCkgPT0gMCkgeworICAgICAgICAvKiBFaXRoZXIgeGVubGludXgsIG9yIHB2b3Bz IHdpdGggcHJvcGVybHkgY29uZmlndXJlZCBhbGlhcyBpbiBzeXNmcyAqLworICAgICAgICBsaWJ4 bF92c2NzaV9wZGV2X2luaXRfdHlwZShwZGV2LCBMSUJYTF9WU0NTSV9QREVWX1RZUEVfSENUTCk7 CisgICAgICAgIGxpYnhsX3ZzY3NpX2hjdGxfY29weShjdHgsICZwZGV2LT51LmhjdGwubSwgJnBk ZXZfaGN0bCk7CisgICAgICAgIHJjID0gMDsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gMCkgewor ICAgICAgICAgICAgcGRldi0+cF9kZXZuYW1lID0gc3RyZHVwKHN0cik7CisgICAgICAgICAgICBp ZiAoIXBkZXYtPnBfZGV2bmFtZSkKKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX05PTUVNOwor ICAgIH0KKworICAgIGxpYnhsX3ZzY3NpX2hjdGxfZGlzcG9zZSgmcGRldl9oY3RsKTsKKyAgICBy ZXR1cm4gcmM7Cit9CisKK2ludCB4bHVfdnNjc2lfcGFyc2UoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4 bF9jdHggKmN0eCwgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9kZXZpY2VfdnNjc2kgKm5ld19ob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF92c2NzaV9kZXYgKm5ld19kZXYpCit7CisgICAgaW50IHJjOworICAgIGNoYXIg KnRtcCwgKnBkZXYsICp2ZGV2LCAqZmhvc3Q7CisKKyAgICB0bXAgPSBzdHJkdXAoc3RyKTsKKyAg ICBpZiAoIXRtcCkgeworICAgICAgICByYyA9IEVSUk9SX05PTUVNOworICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisKKyAgICBwZGV2ID0gc3RydG9rKHRtcCwgIiwiKTsKKyAgICB2ZGV2ID0gc3Ry dG9rKE5VTEwsICIsIik7CisgICAgZmhvc3QgPSBzdHJ0b2soTlVMTCwgIiwiKTsKKyAgICBpZiAo IShwZGV2ICYmIHZkZXYpKSB7CisgICAgICAgIExPRyhjZmcsICJpbnZhbGlkIGRldnNwZWM6ICcl cydcbiIsIHN0cik7CisgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0 OworICAgIH0KKworICAgIHBkZXYgPSB4bHVfX3ZzY3NpX3RyaW1fc3RyaW5nKHBkZXYpOworICAg IHZkZXYgPSB4bHVfX3ZzY3NpX3RyaW1fc3RyaW5nKHZkZXYpOworCisgICAgcmMgPSB4bHVfX3Zz Y3NpX3BhcnNlX3BkZXYoY2ZnLCBjdHgsIHBkZXYsICZuZXdfZGV2LT5wZGV2KTsKKyAgICBpZiAo cmMpIHsKKyAgICAgICAgTE9HKGNmZywgImZhaWxlZCB0byBwYXJzZSAlcywgcmMgPT0gJWQiLCBw ZGV2LCByYyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh4bHVfX3ZzY3Np X3BhcnNlX2hjdGwodmRldiwgJm5ld19kZXYtPnZkZXYpKSB7CisgICAgICAgIExPRyhjZmcsICJp bnZhbGlkICclcycsIGV4cGVjdGluZyBoc3Q6Y2huOnRndDpsdW4iLCB2ZGV2KTsKKyAgICAgICAg cmMgPSBFUlJPUl9JTlZBTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogUmVj b3JkIGdyb3VwIGluZGV4ICovCisgICAgbmV3X2hvc3QtPnZfaHN0ID0gbmV3X2Rldi0+dmRldi5o c3Q7CisKKyAgICBpZiAoZmhvc3QpIHsKKyAgICAgICAgZmhvc3QgPSB4bHVfX3ZzY3NpX3RyaW1f c3RyaW5nKGZob3N0KTsKKyAgICAgICAgaWYgKHN0cmNtcChmaG9zdCwgImZlYXR1cmUtaG9zdCIp ID09IDApIHsKKyAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZuZXdfaG9zdC0+c2NzaV9y YXdfY21kcywgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMT0coY2ZnLCAi aW52YWxpZCBvcHRpb24gJyVzJywgZXhwZWN0aW5nICVzIiwgZmhvc3QsICJmZWF0dXJlLWhvc3Qi KTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsK KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmbmV3X2hv c3QtPnNjc2lfcmF3X2NtZHMsIGZhbHNlKTsKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBmcmVl KHRtcCk7CisgICAgcmV0dXJuIHJjOworfQorCisKK3N0YXRpYyBpbnQgeGx1X3ZzY3NpX2FwcGVu ZF9kZXYobGlieGxfY3R4ICpjdHgsIGxpYnhsX2RldmljZV92c2NzaSAqaHN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92c2NzaV9kZXYgKmRldikKK3sKKyAgICBpbnQg cmMsIG51bTsKKyAgICBsaWJ4bF92c2NzaV9kZXYgKmRldnMsICp0bXA7CisgICAgbGlieGxfZGV2 aWQgbmV4dF92c2NzaV9kZXZfaWQgPSAwOworCisgICAgZm9yIChudW0gPSAwOyBudW0gPCBoc3Qt Pm51bV92c2NzaV9kZXZzOyBudW0rKykgeworICAgICAgICB0bXAgPSBoc3QtPnZzY3NpX2RldnMg KyBudW07CisgICAgICAgIGlmIChuZXh0X3ZzY3NpX2Rldl9pZCA8PSB0bXAtPnZzY3NpX2Rldl9p ZCkKKyAgICAgICAgICAgIG5leHRfdnNjc2lfZGV2X2lkID0gdG1wLT52c2NzaV9kZXZfaWQgKyAx OworICAgIH0KKworICAgIGRldnMgPSByZWFsbG9jKGhzdC0+dnNjc2lfZGV2cywgc2l6ZW9mKCpk ZXYpICogKGhzdC0+bnVtX3ZzY3NpX2RldnMgKyAxKSk7CisgICAgaWYgKCFkZXZzKSB7CisgICAg ICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGhz dC0+dnNjc2lfZGV2cyA9IGRldnM7CisgICAgbGlieGxfdnNjc2lfZGV2X2luaXQoaHN0LT52c2Nz aV9kZXZzICsgaHN0LT5udW1fdnNjc2lfZGV2cyk7CisgICAgZGV2LT52c2NzaV9kZXZfaWQgPSBu ZXh0X3ZzY3NpX2Rldl9pZDsKKyAgICBsaWJ4bF92c2NzaV9kZXZfY29weShjdHgsIGhzdC0+dnNj c2lfZGV2cyArIGhzdC0+bnVtX3ZzY3NpX2RldnMsIGRldik7CisgICAgaHN0LT5udW1fdnNjc2lf ZGV2cysrOworICAgIHJjID0gMDsKK291dDoKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCB4bHVf dnNjc2lfZ2V0X2hvc3QoWExVX0NvbmZpZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgbGlieGxfZGV2 aWNlX3ZzY3NpICp2c2NzaV9ob3N0KQoreworICAgIGxpYnhsX3ZzY3NpX2RldiAqbmV3X2RldiA9 IE5VTEw7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpICpuZXdfaG9zdCwgKnZzY3NpX2hvc3RzID0g TlVMTCwgKnRtcDsKKyAgICBpbnQgcmMsIGZvdW5kX2hvc3QgPSAtMSwgaTsKKyAgICBpbnQgbnVt X2hvc3RzOworCisgICAgbmV3X2hvc3QgPSBtYWxsb2Moc2l6ZW9mKCpuZXdfaG9zdCkpOworICAg IG5ld19kZXYgPSBtYWxsb2Moc2l6ZW9mKCpuZXdfZGV2KSk7CisgICAgaWYgKCEobmV3X2hvc3Qg JiYgbmV3X2RldikpIHsKKyAgICAgICAgcmMgPSBFUlJPUl9OT01FTTsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorICAgIGxpYnhsX2RldmljZV92c2NzaV9pbml0KG5ld19ob3N0KTsKKyAgICBs aWJ4bF92c2NzaV9kZXZfaW5pdChuZXdfZGV2KTsKKworICAgIHJjID0geGx1X3ZzY3NpX3BhcnNl KGNmZywgY3R4LCBzdHIsIG5ld19ob3N0LCBuZXdfZGV2KTsKKyAgICBpZiAocmMpCisgICAgICAg IGdvdG8gb3V0OworCisgICAgLyogTG9vayBmb3IgZXhpc3RpbmcgdnNjc2lfaG9zdCBmb3IgZ2l2 ZW4gZG9tYWluICovCisgICAgdnNjc2lfaG9zdHMgPSBsaWJ4bF9kZXZpY2VfdnNjc2lfbGlzdChj dHgsIGRvbWlkLCAmbnVtX2hvc3RzKTsKKyAgICBpZiAodnNjc2lfaG9zdHMpIHsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IG51bV9ob3N0czsgKytpKSB7CisgICAgICAgICAgICBpZiAodnNjc2lf aG9zdHNbaV0udl9oc3QgPT0gbmV3X2hvc3QtPnZfaHN0KSB7CisgICAgICAgICAgICAgICAgZm91 bmRfaG9zdCA9IGk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoZm91bmRfaG9zdCA9PSAtMSkgeworICAgICAgICAvKiBO b3QgZm91bmQsIGNyZWF0ZSBuZXcgaG9zdCAqLworICAgICAgICB0bXAgPSBuZXdfaG9zdDsKKyAg ICB9IGVsc2UgeworICAgICAgICB0bXAgPSB2c2NzaV9ob3N0cyArIGZvdW5kX2hvc3Q7CisKKyAg ICAgICAgLyogQ2hlY2sgaWYgdGhlIHZkZXYgYWRkcmVzcyBpcyBhbHJlYWR5IHRha2VuICovCisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCB0bXAtPm51bV92c2NzaV9kZXZzOyArK2kpIHsKKyAgICAg ICAgICAgIGlmICh0bXAtPnZzY3NpX2RldnNbaV0udnNjc2lfZGV2X2lkICE9IC0xICYmCisgICAg ICAgICAgICAgICAgdG1wLT52c2NzaV9kZXZzW2ldLnZkZXYuY2huID09IG5ld19kZXYtPnZkZXYu Y2huICYmCisgICAgICAgICAgICAgICAgdG1wLT52c2NzaV9kZXZzW2ldLnZkZXYudGd0ID09IG5l d19kZXYtPnZkZXYudGd0ICYmCisgICAgICAgICAgICAgICAgdG1wLT52c2NzaV9kZXZzW2ldLnZk ZXYubHVuID09IG5ld19kZXYtPnZkZXYubHVuKSB7CisgICAgICAgICAgICAgICAgTE9HKGNmZywg InZkZXYgJyV1OiV1OiV1OiV1JyBpcyBhbHJlYWR5IHVzZWQuXG4iLAorICAgICAgICAgICAgICAg ICAgICBuZXdfZGV2LT52ZGV2LmhzdCwgbmV3X2Rldi0+dmRldi5jaG4sIG5ld19kZXYtPnZkZXYu dGd0LCBuZXdfZGV2LT52ZGV2Lmx1bik7CisgICAgICAgICAgICAgICAgcmMgPSBFUlJPUl9JTlZB TDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor CisgICAgICAgIGlmIChsaWJ4bF9kZWZib29sX3ZhbChuZXdfaG9zdC0+c2NzaV9yYXdfY21kcykg IT0KKyAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHRtcC0+c2NzaV9yYXdfY21kcykpIHsK KyAgICAgICAgICAgIExPRyhjZmcsICJkaWZmZXJlbnQgZmVhdHVyZS1ob3N0IHNldHRpbmc6ICIK KyAgICAgICAgICAgICAgICAgICAgICAiZXhpc3RpbmcgaG9zdCBoYXMgaXQgJXMsIG5ldyBob3N0 IGhhcyBpdCAlc1xuIiwKKyAgICAgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3ZhbChuZXdfaG9z dC0+c2NzaV9yYXdfY21kcykgPyAic2V0IiA6ICJ1bnNldCIsCisgICAgICAgICAgICAgICAgbGli eGxfZGVmYm9vbF92YWwodG1wLT5zY3NpX3Jhd19jbWRzKSA/ICJzZXQiIDogInVuc2V0Iik7Cisg ICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lfY29weShjdHgsIHZzY3NpX2hv c3QsIHRtcCk7CisgICAgcmMgPSB4bHVfdnNjc2lfYXBwZW5kX2RldihjdHgsIHZzY3NpX2hvc3Qs IG5ld19kZXYpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IDA7 CisKK291dDoKKyAgICBpZiAodnNjc2lfaG9zdHMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IG51bV9ob3N0czsgKytpKQorICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2Rpc3Bvc2Uo JnZzY3NpX2hvc3RzW2ldKTsKKyAgICAgICAgZnJlZSh2c2NzaV9ob3N0cyk7CisgICAgfQorICAg IGxpYnhsX3ZzY3NpX2Rldl9kaXNwb3NlKG5ld19kZXYpOworICAgIGxpYnhsX2RldmljZV92c2Nz aV9kaXNwb3NlKG5ld19ob3N0KTsKKyAgICBmcmVlKG5ld19kZXYpOworICAgIGZyZWUobmV3X2hv c3QpOworICAgIHJldHVybiByYzsKK30KKworaW50IHhsdV92c2NzaV9kZXRhY2goWExVX0NvbmZp ZyAqY2ZnLCBsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsIGNoYXIgKnN0cikKK3sKKyAg ICBsaWJ4bF92c2NzaV9kZXYgdl9kZXYgPSB7IH0sICp2ZDsKKyAgICBsaWJ4bF9kZXZpY2VfdnNj c2kgdl9oc3QgPSB7IH0sICp2aCwgKnZzY3NpX2hvc3RzOworICAgIGludCBudW1faG9zdHMsIGgs IGQsIGZvdW5kID0gMDsKKyAgICBjaGFyICp0bXAgPSBOVUxMOworCisgICAgbGlieGxfZGV2aWNl X3ZzY3NpX2luaXQoJnZfaHN0KTsKKyAgICBsaWJ4bF92c2NzaV9kZXZfaW5pdCgmdl9kZXYpOwor CisgICAgLyogQ3JlYXRlIGEgZHVtbXkgY2ZnICovCisgICAgaWYgKGFzcHJpbnRmKCZ0bXAsICIw OjA6MDowLCVzIiwgc3RyKSA8IDApIHsKKyAgICAgICAgTE9HKGNmZywgImFzcHJpbnRmIGZhaWxl ZCB3aGlsZSByZW1vdmluZyAlcyBmcm9tIGRvbWlkICV1Iiwgc3RyLCBkb21pZCk7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh4bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgsIHRt cCwgJnZfaHN0LCAmdl9kZXYpKQorICAgICAgICBnb3RvIG91dDsKKworICAgIHZzY3NpX2hvc3Rz ID0gbGlieGxfZGV2aWNlX3ZzY3NpX2xpc3QoY3R4LCBkb21pZCwgJm51bV9ob3N0cyk7CisgICAg aWYgKCF2c2NzaV9ob3N0cykKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBmb3IgKGggPSAwOyBo IDwgbnVtX2hvc3RzOyArK2gpIHsKKyAgICAgICAgdmggPSB2c2NzaV9ob3N0cyArIGg7CisgICAg ICAgIGZvciAoZCA9IDA7IGQgPCB2aC0+bnVtX3ZzY3NpX2RldnM7IGQrKykgeworICAgICAgICAg ICAgdmQgPSB2aC0+dnNjc2lfZGV2cyArIGQ7CisjZGVmaW5lIENNUChtZW1iZXIpICh2ZC0+dmRl di5tZW1iZXIgPT0gdl9kZXYudmRldi5tZW1iZXIpCisgICAgICAgICAgICBpZiAoIWZvdW5kICYm IHZkLT52c2NzaV9kZXZfaWQgIT0gLTEgJiYKKyAgICAgICAgICAgICAgICBDTVAoaHN0KSAmJiBD TVAoY2huKSAmJiBDTVAodGd0KSAmJiBDTVAobHVuKSkgeworICAgICAgICAgICAgICAgIHZkLT5y ZW1vdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV92c2NzaV9yZW1vdmUo Y3R4LCBkb21pZCwgdmgsIE5VTEwpOworICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAg ICAgICAgIH0KKyN1bmRlZiBDTVAKKyAgICAgICAgICAgIGxpYnhsX3ZzY3NpX2Rldl9kaXNwb3Nl KHZkKTsKKyAgICAgICAgfQorICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2lfZGlzcG9zZSh2aCk7 CisgICAgfQorICAgIGZyZWUodnNjc2lfaG9zdHMpOworCitvdXQ6CisgICAgZnJlZSh0bXApOwor ICAgIGxpYnhsX3ZzY3NpX2Rldl9kaXNwb3NlKCZ2X2Rldik7CisgICAgbGlieGxfZGV2aWNlX3Zz Y3NpX2Rpc3Bvc2UoJnZfaHN0KTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisKK2ludCB4bHVfdnNj c2lfY29uZmlnX2FkZChYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3Ry LAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3ZzY3NpcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKip2c2NzaXMpCit7CisgICAgaW50IHJj LCBpOworICAgIGxpYnhsX3ZzY3NpX2RldiB2X2RldiA9IHsgfTsKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2kgKnRtcCwgdl9oc3QgPSB7IH07CisgICAgYm9vbCBoc3RfZm91bmQgPSBmYWxzZTsKKwor ICAgIC8qCisgICAgICogIzE6IHBhcnNlIHRoZSBkZXZzcGVjIGFuZCBwbGFjZSBpdCBpbiB0ZW1w b3JhcnkgaG9zdCtkZXYgcGFydAorICAgICAqICMyOiBmaW5kIGV4aXN0aW5nIHZzY3NpX2hvc3Qg d2l0aCBudW1iZXIgdl9oc3QKKyAgICAgKiAgICAgaWYgZm91bmQsIGFwcGVuZCB0aGUgdnNjc2lf ZGV2IHRvIHRoaXMgdnNjc2lfaG9zdAorICAgICAqICMzOiBvdGhlcndpc2UsIGNyZWF0ZSBuZXcg dnNjc2lfaG9zdCBhbmQgYXBwZW5kIHZzY3NpX2RldgorICAgICAqIE5vdGU6IHZfaHN0IGRvZXMg bm90IHJlcHJlc2VudCB0aGUgaW5kZXggbmFtZWQgIm51bV92c2NzaXMiLAorICAgICAqICAgICAg IGl0IGlzIGEgcHJpdmF0ZSBpbmRleCB1c2VkIGp1c3QgaW4gdGhlIGNvbmZpZyBmaWxlCisgICAg ICovCisgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2luaXQoJnZfaHN0KTsKKyAgICBsaWJ4bF92c2Nz aV9kZXZfaW5pdCgmdl9kZXYpOworCisgICAgcmMgPSB4bHVfdnNjc2lfcGFyc2UoY2ZnLCBjdHgs IHN0ciwgJnZfaHN0LCAmdl9kZXYpOworICAgIGlmIChyYykKKyAgICAgICAgZ290byBvdXQ7CisK KyAgICBpZiAoKm51bV92c2NzaXMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8ICpudW1fdnNj c2lzOyBpKyspIHsKKyAgICAgICAgICAgIHRtcCA9ICp2c2NzaXMgKyBpOworICAgICAgICAgICAg aWYgKHRtcC0+dl9oc3QgPT0gdl9oc3Qudl9oc3QpIHsKKyAgICAgICAgICAgICAgICByYyA9IHhs dV92c2NzaV9hcHBlbmRfZGV2KGN0eCwgdG1wLCAmdl9kZXYpOworICAgICAgICAgICAgICAgIGlm IChyYykgeworICAgICAgICAgICAgICAgICAgICBMT0coY2ZnLCAieGx1X3ZzY3NpX2FwcGVuZF9k ZXYgZmFpbGVkOiAlZFxuIiwgcmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaHN0X2ZvdW5kID0gdHJ1ZTsKKyAgICAg ICAgICAgICAgICBicmVhazsKKwkgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg IGlmICghaHN0X2ZvdW5kIHx8ICEqbnVtX3ZzY3NpcykgeworICAgICAgICB0bXAgPSByZWFsbG9j KCp2c2NzaXMsIHNpemVvZih2X2hzdCkgKiAoKm51bV92c2NzaXMgKyAxKSk7CisgICAgICAgIGlm ICghdG1wKSB7CisgICAgICAgICAgICBMT0coY2ZnLCAicmVhbGxvYyAjJWQgZmFpbGVkIiwgKm51 bV92c2NzaXMgKyAxKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfTk9NRU07CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgICAgICAqdnNjc2lzID0gdG1wOworICAgICAgICB0 bXAgPSAqdnNjc2lzICsgKm51bV92c2NzaXM7CisgICAgICAgIGxpYnhsX2RldmljZV92c2NzaV9p bml0KHRtcCk7CisKKyAgICAgICAgdl9oc3QuZGV2aWQgPSAqbnVtX3ZzY3NpczsKKyAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpX2NvcHkoY3R4LCB0bXAsICZ2X2hzdCk7CisKKyAgICAgICAgcmMg PSB4bHVfdnNjc2lfYXBwZW5kX2RldihjdHgsIHRtcCwgJnZfZGV2KTsKKyAgICAgICAgaWYgKHJj KSB7CisgICAgICAgICAgICBMT0coY2ZnLCAieGx1X3ZzY3NpX2FwcGVuZF9kZXYgZmFpbGVkOiAl ZFxuIiwgcmMpOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAo Km51bV92c2NzaXMpKys7CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGxpYnhsX3Zz Y3NpX2Rldl9kaXNwb3NlKCZ2X2Rldik7CisgICAgbGlieGxfZGV2aWNlX3ZzY3NpX2Rpc3Bvc2Uo JnZfaHN0KTsKKyAgICByZXR1cm4gcmM7Cit9CisjZWxzZSAvKiAhIF9fbGludXhfXyAqLworaW50 IHhsdV92c2NzaV9nZXRfaG9zdChYTFVfQ29uZmlnICpjb25maWcsCisgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyLAorICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKnZzY3NpX2hvc3QpCit7CisgICAgcmV0 dXJuIEVSUk9SX0lOVkFMOworfQorCitpbnQgeGx1X3ZzY3NpX3BhcnNlKFhMVV9Db25maWcgKmNm ZywKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Zz Y3NpICpuZXdfaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lfZGV2ICpuZXdf ZGV2KQoreworICAgIHJldHVybiBFUlJPUl9JTlZBTDsKK30KKworaW50IHhsdV92c2NzaV9kZXRh Y2goWExVX0NvbmZpZyAqY2ZnLAorICAgICAgICAgICAgICAgICAgICAgbGlieGxfY3R4ICpjdHgs CisgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKnN0cikKK3sKKyAgICByZXR1cm4gRVJST1JfSU5WQUw7Cit9CisKK2ludCB4bHVf dnNjc2lfY29uZmlnX2FkZChYTFVfQ29uZmlnICpjZmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfY3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtX3ZzY3NpcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdnNjc2kgKip2c2NzaXMpCit7CisgICAgcmV0 dXJuIEVSUk9SX0lOVkFMOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4 bHV0aWwuaCBiL3Rvb2xzL2xpYnhsL2xpYnhsdXRpbC5oCmluZGV4IGU4MWI2NDQuLmRiMDQ2YTIg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsdXRpbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsdXRpbC5oCkBAIC0xMTgsNiArMTE4LDI0IEBAIGludCB4bHVfcmRtX3BhcnNlKFhMVV9Db25m aWcgKmNmZywgbGlieGxfcmRtX3Jlc2VydmUgKnJkbSwgY29uc3QgY2hhciAqc3RyKTsKIGludCB4 bHVfdmlmX3BhcnNlX3JhdGUoWExVX0NvbmZpZyAqY2ZnLCBjb25zdCBjaGFyICpyYXRlLAogICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfbmljICpuaWMpOwogCisvKiBGaWxsIHZz Y3NpX2hvc3Qgd2l0aCBkZXZpY2UgZGVzY3JpYmVkIGluIHN0ciAocGRldix2ZGV2WyxvcHRpb25z XSkgKi8KK2ludCB4bHVfdnNjc2lfZ2V0X2hvc3QoWExVX0NvbmZpZyAqY29uZmlnLAorICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9jdHggKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwK KyAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3ZzY3NpICp2c2NzaV9ob3N0KTsK Ky8qIFBhcnNlIGNvbmZpZyBzdHJpbmcgYW5kIGZpbGwgcHJvdmlkZWQgdnNjc2kgaG9zdCBhbmQg dnNjc2kgZGV2aWNlICovCitpbnQgeGx1X3ZzY3NpX3BhcnNlKFhMVV9Db25maWcgKmNmZywgbGli eGxfY3R4ICpjdHgsIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxf ZGV2aWNlX3ZzY3NpICpuZXdfaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lf ZGV2ICpuZXdfZGV2KTsKKy8qIERldGFjaCB2c2NzaSBkZXZpY2UgZGVzY3JpYmVkIGluIGNvbmZp ZyBzdHJpbmcgKHBkZXYsdmRldlssb3B0aW9uc10pICovCitpbnQgeGx1X3ZzY3NpX2RldGFjaChY TFVfQ29uZmlnICpjZmcsIGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgY2hhciAqc3Ry KTsKKy8qIEFkZCB2c2NzaSBkZXZpY2UgZGVzY3JpYmVkIGluIGNvbmZpZyBzdHJpbmcgKHBkZXYs dmRldlssb3B0aW9uc10pIHRvIGRfY29uZmlnICovCitpbnQgeGx1X3ZzY3NpX2NvbmZpZ19hZGQo WExVX0NvbmZpZyAqY2ZnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2N0eCAqY3R4 LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgKm51bV92c2NzaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfZGV2aWNlX3ZzY3NpICoqdnNjc2lzKTsKICNlbmRpZiAvKiBMSUJYTFVUSUxfSCAqLwog CiAvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwveGwuaCBiL3Rvb2xzL2xpYnhsL3hsLmgKaW5k ZXggYmRhYjEyNS4uODc3YzY5NSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwveGwuaAorKysgYi90 b29scy9saWJ4bC94bC5oCkBAIC04OSw2ICs4OSw5IEBAIGludCBtYWluX2NoYW5uZWxsaXN0KGlu dCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl9ibG9ja2F0dGFjaChpbnQgYXJnYywgY2hh ciAqKmFyZ3YpOwogaW50IG1haW5fYmxvY2tsaXN0KGludCBhcmdjLCBjaGFyICoqYXJndik7CiBp bnQgbWFpbl9ibG9ja2RldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpOworaW50IG1haW5fdnNj c2lhdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKK2ludCBtYWluX3ZzY3NpbGlzdChpbnQg YXJnYywgY2hhciAqKmFyZ3YpOworaW50IG1haW5fdnNjc2lkZXRhY2goaW50IGFyZ2MsIGNoYXIg Kiphcmd2KTsKIGludCBtYWluX3Z0cG1hdHRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KTsKIGlu dCBtYWluX3Z0cG1saXN0KGludCBhcmdjLCBjaGFyICoqYXJndik7CiBpbnQgbWFpbl92dHBtZGV0 YWNoKGludCBhcmdjLCBjaGFyICoqYXJndik7CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC94bF9j bWRpbXBsLmMgYi90b29scy9saWJ4bC94bF9jbWRpbXBsLmMKaW5kZXggMDM0NDJlMS4uZmQ4OTEy ZSAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwveGxfY21kaW1wbC5jCisrKyBiL3Rvb2xzL2xpYnhs L3hsX2NtZGltcGwuYwpAQCAtMTI2Myw3ICsxMjYzLDcgQEAgc3RhdGljIHZvaWQgcGFyc2VfY29u ZmlnX2RhdGEoY29uc3QgY2hhciAqY29uZmlnX3NvdXJjZSwKICAgICBjb25zdCBjaGFyICpidWY7 CiAgICAgbG9uZyBsLCB2Y3B1cyA9IDA7CiAgICAgWExVX0NvbmZpZyAqY29uZmlnOwotICAgIFhM VV9Db25maWdMaXN0ICpjcHVzLCAqdmJkcywgKm5pY3MsICpwY2lzLCAqY3ZmYnMsICpjcHVpZHMs ICp2dHBtczsKKyAgICBYTFVfQ29uZmlnTGlzdCAqY3B1cywgKnZiZHMsICpuaWNzLCAqcGNpcywg KmN2ZmJzLCAqY3B1aWRzLCAqdnRwbXMsICp2c2NzaXM7CiAgICAgWExVX0NvbmZpZ0xpc3QgKmNo YW5uZWxzLCAqaW9wb3J0cywgKmlycXMsICppb21lbSwgKnZpcmlkaWFuLCAqZHRkZXZzOwogICAg IGludCBudW1faW9wb3J0cywgbnVtX2lycXMsIG51bV9pb21lbSwgbnVtX2NwdXMsIG51bV92aXJp ZGlhbjsKICAgICBpbnQgcGNpX3Bvd2VyX21nbXQgPSAwOwpAQCAtMTc5Myw2ICsxNzkzLDE3IEBA IHN0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZ19kYXRhKGNvbnN0IGNoYXIgKmNvbmZpZ19zb3VyY2Us CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIXhsdV9jZmdfZ2V0X2xpc3QoY29uZmlnLCAi dnNjc2kiLCAmdnNjc2lzLCAwLCAwKSkgeworICAgICAgICBpbnQgbnVtX3ZzY3NpX2l0ZW1zID0g MDsKKyAgICAgICAgZF9jb25maWctPm51bV92c2NzaXMgPSAwOworICAgICAgICBkX2NvbmZpZy0+ dnNjc2lzID0gTlVMTDsKKyAgICAgICAgd2hpbGUgKChidWYgPSB4bHVfY2ZnX2dldF9saXN0aXRl bSAodnNjc2lzLCBudW1fdnNjc2lfaXRlbXMpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAo eGx1X3ZzY3NpX2NvbmZpZ19hZGQoY29uZmlnLCBjdHgsIGJ1ZiwgJmRfY29uZmlnLT5udW1fdnNj c2lzLCAmZF9jb25maWctPnZzY3NpcykpCisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAg ICAgICAgIG51bV92c2NzaV9pdGVtcysrOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCF4 bHVfY2ZnX2dldF9saXN0KGNvbmZpZywgInZ0cG0iLCAmdnRwbXMsIDAsIDApKSB7CiAgICAgICAg IGRfY29uZmlnLT5udW1fdnRwbXMgPSAwOwogICAgICAgICBkX2NvbmZpZy0+dnRwbXMgPSBOVUxM OwpAQCAtNjczOCw2ICs2NzQ5LDE5OCBAQCBpbnQgbWFpbl9ibG9ja2RldGFjaChpbnQgYXJnYywg Y2hhciAqKmFyZ3YpCiAgICAgcmV0dXJuIHJjOwogfQogCitpbnQgbWFpbl92c2NzaWF0dGFjaChp bnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgaW50IG9w dCwgcmM7CisgICAgWExVX0NvbmZpZyAqY29uZmlnID0gTlVMTDsKKyAgICBsaWJ4bF9kZXZpY2Vf dnNjc2kgKnZzY3NpX2hvc3QgPSBOVUxMOworICAgIGNoYXIgKnN0ciA9IE5VTEwsICpmZWF0X2J1 ZiA9IE5VTEw7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInNjc2kt YXR0YWNoIiwgMSkgeworICAgICAgICAvKiBObyBvcHRpb25zICovCisgICAgfQorCisgICAgaWYg KGFyZ2MgPCA0IHx8IGFyZ2MgPiA1KSB7CisgICAgICAgIGhlbHAoInNjc2ktYXR0YWNoIik7Cisg ICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVy X3RvX2RvbWlkKGN0eCwgYXJndltvcHRpbmRdLCAmZG9taWQpIDwgMCkgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIiVzIGlzIGFuIGludmFsaWQgZG9tYWluIGlkZW50aWZpZXJcbiIsIGFyZ3Zb b3B0aW5kXSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIG9wdGluZCsrOworCisg ICAgaWYgKGFyZ2MgPT0gNSkgeworICAgICAgICBpZiAoYXNwcmludGYoJmZlYXRfYnVmLCAiLCVz IiwgYXJndls0XSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoImFzcHJpbnRmIik7CisgICAg ICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChhc3ByaW50Zigm c3RyLCAiJXMsJXMlcyIsIGFyZ3ZbMl0sIGFyZ3ZbM10sIGZlYXRfYnVmID86ICIiKSA8IDApIHsK KyAgICAgICAgcGVycm9yKCJhc3ByaW50ZiIpOworICAgICAgICByYyA9IDE7CisgICAgICAgIGdv dG8gb3V0OzsKKyAgICB9CisKKyAgICB2c2NzaV9ob3N0ID0geG1hbGxvYyhzaXplb2YoKnZzY3Np X2hvc3QpKTsKKyAgICBsaWJ4bF9kZXZpY2VfdnNjc2lfaW5pdCh2c2NzaV9ob3N0KTsKKworICAg IGNvbmZpZyA9IHhsdV9jZmdfaW5pdChzdGRlcnIsICJjb21tYW5kIGxpbmUiKTsKKyAgICBpZiAo IWNvbmZpZykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBhbGxvY2F0ZSBm b3IgY29uZmlndXJhdGlvblxuIik7CisgICAgICAgIHJjID0gMTsKKyAgICAgICAgZ290byBvdXQ7 CisgICAgfQorCisgICAgLyogUGFyc2UgY29uZmlnIHN0cmluZyBhbmQgc3RvcmUgcmVzdWx0ICov CisgICAgcmMgPSB4bHVfdnNjc2lfZ2V0X2hvc3QoY29uZmlnLCBjdHgsIGRvbWlkLCBzdHIsIHZz Y3NpX2hvc3QpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgaWYg KGRyeXJ1bl9vbmx5KSB7CisgICAgICAgIGNoYXIgKmpzb24gPSBsaWJ4bF9kZXZpY2VfdnNjc2lf dG9fanNvbihjdHgsIHZzY3NpX2hvc3QpOworICAgICAgICBwcmludGYoInZzY3NpOiAlc1xuIiwg anNvbik7CisgICAgICAgIGZyZWUoanNvbik7CisgICAgICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSB8 fCBmZmx1c2goc3Rkb3V0KSkgeyBwZXJyb3IoInN0ZG91dCIpOyBleGl0KC0xKTsgfQorICAgICAg ICByYyA9IDA7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIEZpbmFsbHkgYWRk IHRoZSBkZXZpY2UgKi8KKyAgICBpZiAobGlieGxfZGV2aWNlX3ZzY3NpX2FkZChjdHgsIGRvbWlk LCB2c2NzaV9ob3N0LCBOVUxMKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2Rl dmljZV92c2NzaV9hZGQgZmFpbGVkLlxuIik7CisgICAgICAgIHJjID0gMTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIGlmIChjb25maWcpCisgICAg ICAgIHhsdV9jZmdfZGVzdHJveShjb25maWcpOworICAgIGxpYnhsX2RldmljZV92c2NzaV9kaXNw b3NlKHZzY3NpX2hvc3QpOworICAgIGZyZWUodnNjc2lfaG9zdCk7CisgICAgZnJlZShzdHIpOwor ICAgIGZyZWUoZmVhdF9idWYpOworICAgIHJldHVybiByYzsKK30KKworaW50IG1haW5fdnNjc2ls aXN0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIHVpbnQzMl90 IGRvbWlkOworICAgIGxpYnhsX2RldmljZV92c2NzaSAqdnNjc2lfaG9zdHM7CisgICAgbGlieGxf dnNjc2lpbmZvIHZzY3NpaW5mbzsKKyAgICBpbnQgbnVtX2hvc3RzLCBoLCBkOworCisgICAgU1dJ VENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJzY3NpLWxpc3QiLCAxKSB7CisgICAgICAg IC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisgICAgaWYgKGFyZ2MgPCAyKSB7CisgICAgICAgIGhl bHAoInNjc2ktbGlzdCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiAgICAg IElkeCAgQkUgIHN0YXRlIGhvc3QgcF9oc3Qgdl9oc3Qgc3RhdGUgKi8KKyAgICBwcmludGYoIiUt M3MgJS0zcyAlLTVzICUtNXMgJS0xMHMgJS0xMHMgJS01c1xuIiwKKyAgICAgICAgICAgIklkeCIs ICJCRSIsICJzdGF0ZSIsICJob3N0IiwgInBoeS1oY3RsIiwgInZpci1oY3RsIiwgImRldnN0YXRl Iik7CisgICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyAt LWFyZ2MsICsrYXJndikgeworICAgICAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19k b21pZChjdHgsICphcmd2LCAmZG9taWQpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICIlcyBpcyBhbiBpbnZhbGlkIGRvbWFpbiBpZGVudGlmaWVyXG4iLCAqYXJndik7CisgICAg ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoISh2c2NzaV9ob3N0cyA9 IGxpYnhsX2RldmljZV92c2NzaV9saXN0KGN0eCwgZG9taWQsICZudW1faG9zdHMpKSkgeworICAg ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChoID0gMDsgaCA8IG51 bV9ob3N0czsgKytoKSB7CisgICAgICAgICAgICBmb3IgKGQgPSAwOyBkIDwgdnNjc2lfaG9zdHNb aF0ubnVtX3ZzY3NpX2RldnM7IGQrKykgeworICAgICAgICAgICAgICAgIGlmICghbGlieGxfZGV2 aWNlX3ZzY3NpX2dldGluZm8oY3R4LCBkb21pZCwgJnZzY3NpX2hvc3RzW2hdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZzY3NpX2hvc3RzW2hdLnZz Y3NpX2RldnNbZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmdnNjc2lpbmZvKSkgeworICAgICAgICAgICAgICAgICAgICBjaGFyIHBkZXZbNjRdLCB2 ZGV2WzY0XTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2c2NzaWluZm8ucGRldi50eXBl KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIExJQlhMX1ZTQ1NJX1BERVZfVFlQRV9I Q1RMOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHBkZXYsIHNpemVvZihw ZGV2KSwgIiV1OiV1OiV1OiV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2c2NzaWluZm8ucGRldi51LmhjdGwubS5oc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdnNjc2lpbmZvLnBkZXYudS5oY3RsLm0uY2huLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby5wZGV2LnUuaGN0bC5tLnRndCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8ucGRldi51LmhjdGwubS5s dW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSBMSUJYTF9WU0NTSV9QREVWX1RZUEVfV1dOOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNucHJpbnRmKHBkZXYsIHNpemVvZihwZGV2KSwgIiVzIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8ucGRldi51Lnd3bi5tKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRldlswXSA9ICdcMCc7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgc25wcmludGYodmRldiwgc2l6ZW9mKHZkZXYpLCAiJXU6JXU6 JXU6JXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2NzaWluZm8udmRldi5oc3Qs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3NpaW5mby52ZGV2LmNobiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnZkZXYudGd0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2c2NzaWluZm8udmRldi5sdW4pOworICAgICAgICAgICAgICAgICAg ICAvKiAgICAgIElkeCAgQkUgIHN0YXRlIFN0YSAqLworICAgICAgICAgICAgICAgICAgICBwcmlu dGYoIiUtM2QgJS0zZCAlLTVkICUtNWQgJS0xMHMgJS0xMHMgJWRcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB2c2NzaWluZm8uZGV2aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICB2c2NzaWluZm8uYmFja2VuZF9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZzY3Np aW5mby52c2NzaV9ob3N0X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lp bmZvLmJhY2tlbmRfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGV2LCB2ZGV2LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnNjc2lpbmZvLnZzY3NpX2Rldl9zdGF0ZSk7CisK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlieGxfdnNjc2lpbmZvX2Rpc3Bv c2UoJnZzY3NpaW5mbyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2Vf dnNjc2lfZGlzcG9zZSgmdnNjc2lfaG9zdHNbaF0pOworICAgICAgICB9CisgICAgICAgIGZyZWUo dnNjc2lfaG9zdHMpOworCisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBtYWluX3Zz Y3NpZGV0YWNoKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIGNo YXIgKmRvbSA9IGFyZ3ZbMV0sICpzdHIgPSBhcmd2WzJdOworICAgIHVpbnQzMl90IGRvbWlkOwor ICAgIFhMVV9Db25maWcgKmNvbmZpZyA9IE5VTEw7CisgICAgaW50IGZvdW5kID0gMDsKKworICAg IFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAic2NzaS1kZXRhY2giLCAxKSB7Cisg ICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICBpZiAoYXJnYyA8IDMpIHsKKyAg ICAgICAgaGVscCgic2NzaS1kZXRhY2giKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg ICAgaWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJfdG9fZG9taWQoY3R4LCBkb20sICZkb21pZCkg PCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4g aWRlbnRpZmllclxuIiwgZG9tKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY29u ZmlnID0geGx1X2NmZ19pbml0KHN0ZGVyciwgImNvbW1hbmQgbGluZSIpOworICAgIGlmICghY29u ZmlnKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZvciBj b25maWd1cmF0aW9uXG4iKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgZm91bmQg PSB4bHVfdnNjc2lfZGV0YWNoKGNvbmZpZywgY3R4LCBkb21pZCwgc3RyKTsKKyAgICBpZiAoIWZv dW5kKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzKCV1KSB2ZGV2ICVzIGRvZXMgbm90IGV4 aXN0IGluIGRvbWFpbiAlc1xuIiwgX19mdW5jX18sIF9fTElORV9fLCBzdHIsIGRvbSk7CisKK291 dDoKKyAgICBpZiAoY29uZmlnKQorICAgICAgICB4bHVfY2ZnX2Rlc3Ryb3koY29uZmlnKTsKKyAg ICByZXR1cm4gIWZvdW5kOworfQorCiBpbnQgbWFpbl92dHBtYXR0YWNoKGludCBhcmdjLCBjaGFy ICoqYXJndikKIHsKICAgICBpbnQgb3B0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwveGxfY21k dGFibGUuYyBiL3Rvb2xzL2xpYnhsL3hsX2NtZHRhYmxlLmMKaW5kZXggZmRjMWFjNi4uMTFlMWMy NiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwveGxfY21kdGFibGUuYworKysgYi90b29scy9saWJ4 bC94bF9jbWR0YWJsZS5jCkBAIC0zNTEsNiArMzUxLDIxIEBAIHN0cnVjdCBjbWRfc3BlYyBjbWRf dGFibGVbXSA9IHsKICAgICAgICJEZXN0cm95IGEgZG9tYWluJ3MgdmlydHVhbCBibG9jayBkZXZp Y2UiLAogICAgICAgIjxEb21haW4+IDxEZXZJZD4iLAogICAgIH0sCisgICAgeyAic2NzaS1hdHRh Y2giLAorICAgICAgJm1haW5fdnNjc2lhdHRhY2gsIDEsIDEsCisgICAgICAiQXR0YWNoIGEgZG9t MCBTQ1NJIGRldmljZSB0byBhIGRvbWFpbi4iLAorICAgICAgIjxEb21haW4+IDxQaHlzRGV2aWNl PiA8VmlydERldmljZT4iLAorICAgIH0sCisgICAgeyAic2NzaS1saXN0IiwKKyAgICAgICZtYWlu X3ZzY3NpbGlzdCwgMCwgMCwKKyAgICAgICJMaXN0IGFsbCBkb20wIFNDU0kgZGV2aWNlcyBjdXJy ZW50bHkgYXR0YWNoZWQgdG8gYSBkb21haW4uIiwKKyAgICAgICI8RG9tYWluKHMpPiIsCisgICAg fSwKKyAgICB7ICJzY3NpLWRldGFjaCIsCisgICAgICAmbWFpbl92c2NzaWRldGFjaCwgMCwgMSwK KyAgICAgICJEZXRhY2ggYSBzcGVjaWZpZWQgU0NTSSBkZXZpY2UgZnJvbSBhIGRvbWFpbi4iLAor ICAgICAgIjxEb21haW4+IDxWaXJ0RGV2aWNlPiIsCisgICAgfSwKICAgICB7ICJ2dHBtLWF0dGFj aCIsCiAgICAgICAmbWFpbl92dHBtYXR0YWNoLCAxLCAxLAogICAgICAgIkNyZWF0ZSBhIG5ldyB2 aXJ0dWFsIFRQTSBkZXZpY2UiLAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9y ZwpodHRwOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK