From mboxrd@z Thu Jan 1 00:00:00 1970 From: Changlong Xie Subject: [PATCH v13 12/26] secondary vm suspend/resume/checkpoint code Date: Fri, 25 Mar 2016 14:44:19 +0800 Message-ID: <1458888273-7469-13-git-send-email-xiecl.fnst@cn.fujitsu.com> References: <1458888273-7469-1-git-send-email-xiecl.fnst@cn.fujitsu.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1458888273-7469-1-git-send-email-xiecl.fnst@cn.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen devel , Konrad Rzeszutek Wilk , Andrew Cooper , Ian Campbell , Ian Jackson , Wei Liu Cc: Lars Kurth , Changlong Xie , Wen Congyang , Li Zhijian , Gui Jianfeng , Jiang Yunhong , Dong Eddie , Anthony Perard , Shriram Rajagopalan , Yang Hongyang List-Id: xen-devel@lists.xenproject.org RnJvbTogV2VuIENvbmd5YW5nIDx3ZW5jeUBjbi5mdWppdHN1LmNvbT4KClNlY29uZGFyeSB2bSBp cyBydW5uaW5nIGluIGNvbG8gbW9kZS4gU28gd2Ugd2lsbCBkbwp0aGUgZm9sbG93aW5nIHRoaW5n cyBhZ2FpbiBhbmQgYWdhaW46CjEuIFJlc3VtZSBzZWNvbmRhcnkgdm0KICAgYS4gU2VuZCBDSEVD S1BPSU5UX1NWTV9SRUFEWSB0byBtYXN0ZXIuCiAgIGIuIElmIGl0IGlzIG5vdCB0aGUgZmlyc3Qg cmVzdW1lLCBjYWxsIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfcHJlcmVzdW1lKCkuCiAgIGMu IElmIGl0IGlzIHRoZSBmaXJzdCByZXN1bWUocmVzdW1lIHJpZ2h0IGFmdGVyIGxpdmUgbWlncmF0 aW9uKSwKICAgICAgLSBjYWxsIGxpYnhsX194Y19kb21haW5fcmVzdG9yZV9kb25lKCkgdG8gYnVp bGQgdGhlIHNlY29uZGFyeSB2bS4KICAgICAgLSBlbmFibGUgc2Vjb25kYXJ5IHZtJ3MgbG9nZGly dHkuCiAgICAgIC0gY2FsbCBsaWJ4bF9fZG9tYWluX3Jlc3VtZSgpIHRvIHJlc3VtZSBzZWNvbmRh cnkgdm0uCiAgICAgIC0gY2FsbCBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3NldHVwKCkgdG8g c2V0dXAgY2hlY2twb2ludCBkZXZpY2VzLgogICBkLiBTZW5kIENIRUNLUE9JTlRfU1ZNX1JFU1VN RUQgdG8gbWFzdGVyLgoyLiBXYWl0IGEgbmV3IGNoZWNrcG9pbnQKICAgYS4gQ2FsbCBsaWJ4bF9f Y2hlY2twb2ludF9kZXZpY2VzX2NvbW1pdCgpLgogICBiLiBSZWFkIENIRUNLUE9JTlRfTkVXIGZy b20gbWFzdGVyLgozLiBTdXNwZW5kIHNlY29uZGFyeSB2bQogICBhLiBTdXNwZW5kIHNlY29uZGFy eSB2bS4KICAgYi4gQ2FsbCBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3Bvc3RzdXNwZW5kKCku CiAgIGMuIFNlbmQgQ0hFQ0tQT0lOVF9TVk1fU1VTUEVOREVEIHRvIG1hc3Rlci4KNC4gQ2hlY2tw b2ludAogICBhLiBSZWFkIGVtdWxhdG9yIHhlbnN0b3JlIGRhdGEgYW5kIGVtdWxhdG9yIGNvbnRl eHQKICAgYi4gUkVDX1RZUEVfQ0hFQ0tQT0lOVF9FTkQKClNpZ25lZC1vZmYtYnk6IFdlbiBDb25n eWFuZyA8d2VuY3lAY24uZnVqaXRzdS5jb20+ClNpZ25lZC1vZmYtYnk6IFlhbmcgSG9uZ3lhbmcg PGhvbmd5YW5nLnlhbmdAZWFzeXN0YWNrLmNuPgpTaWduZWQtb2ZmLWJ5OiBDaGFuZ2xvbmcgWGll IDx4aWVjbC5mbnN0QGNuLmZ1aml0c3UuY29tPgotLS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVu Z3Vlc3QuaCAgICAgfCAgIDIwICsKIHRvb2xzL2xpYnhjL3hjX3NyX3NhdmUuYyAgICAgICAgICAg fCAgICAzICstCiB0b29scy9saWJ4bC9NYWtlZmlsZSAgICAgICAgICAgICAgIHwgICAgMSArCiB0 b29scy9saWJ4bC9saWJ4bF9jb2xvLmggICAgICAgICAgIHwgICA1NSArKwogdG9vbHMvbGlieGwv bGlieGxfY29sb19yZXN0b3JlLmMgICB8IDEwMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgICAgICAgIHwgICA0NSArKwog dG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCAgICAgICB8ICAgMTAgKy0KIHRvb2xzL2xpYnhs L2xpYnhsX3NhdmVfY2FsbG91dC5jICAgfCAgICA2ICstCiB0b29scy9saWJ4bC9saWJ4bF9zYXZl X21zZ3NfZ2VuLnBsIHwgICAxMSArLQogdG9vbHMvbGlieGwvbGlieGxfc3RyZWFtX3JlYWQuYyAg ICB8ICAgMTIgKwogdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsICAgICAgICB8ICAgIDEgKwog MTEgZmlsZXMgY2hhbmdlZCwgMTE4MCBpbnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4bC9saWJ4bF9jb2xvLmgKIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy9saWJ4bC9saWJ4bF9jb2xvX3Jlc3RvcmUuYwoKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3QuaCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuZ3Vlc3Qu aAppbmRleCBiNGY0YmZiLi4zMTkzZDBmIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9pbmNsdWRl L3hlbmd1ZXN0LmgKKysrIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94ZW5ndWVzdC5oCkBAIC03OCw2 ICs3OCw3IEBAIHN0cnVjdCBzYXZlX2NhbGxiYWNrcyB7CiB0eXBlZGVmIGVudW0gewogICAgIFhD X01JR19TVFJFQU1fTk9ORSwgLyogcGxhaW4gc3RyZWFtICovCiAgICAgWENfTUlHX1NUUkVBTV9S RU1VUywKKyAgICBYQ19NSUdfU1RSRUFNX0NPTE8sCiB9IHhjX21pZ3JhdGlvbl9zdHJlYW1fdDsK IAogLyoqCkBAIC05Nyw2ICs5OCwxNiBAQCBpbnQgeGNfZG9tYWluX3NhdmUoeGNfaW50ZXJmYWNl ICp4Y2gsIGludCBpb19mZCwgdWludDMyX3QgZG9tLCB1aW50MzJfdCBtYXhfaXRlcgogCiAvKiBj YWxsYmFja3MgcHJvdmlkZWQgYnkgeGNfZG9tYWluX3Jlc3RvcmUgKi8KIHN0cnVjdCByZXN0b3Jl X2NhbGxiYWNrcyB7CisgICAgLyogQ2FsbGVkIGFmdGVyIGEgbmV3IGNoZWNrcG9pbnQgdG8gc3Vz cGVuZCB0aGUgZ3Vlc3QuCisgICAgICovCisgICAgaW50ICgqc3VzcGVuZCkodm9pZCogZGF0YSk7 CisKKyAgICAvKiBDYWxsZWQgYWZ0ZXIgdGhlIHNlY29uZGFyeSB2bSBpcyByZWFkeSB0byByZXN1 bWUuCisgICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gcmVzdW1lcyB0aGUgZ3Vlc3QgJiB0aGUgZGV2 aWNlIG1vZGVsLAorICAgICAqIHJldHVybnMgdG8geGNfZG9tYWluX3Jlc3RvcmUuCisgICAgICov CisgICAgaW50ICgqcG9zdGNvcHkpKHZvaWQqIGRhdGEpOworCiAgICAgLyogQSBjaGVja3BvaW50 IHJlY29yZCBoYXMgYmVlbiBmb3VuZCBpbiB0aGUgc3RyZWFtLgogICAgICAqIHJldHVybnM6ICov CiAjZGVmaW5lIFhHUl9DSEVDS1BPSU5UX0VSUk9SICAgIDAgLyogVGVybWluYXRlIHByb2Nlc3Np bmcgKi8KQEAgLTEwNCw2ICsxMTUsMTUgQEAgc3RydWN0IHJlc3RvcmVfY2FsbGJhY2tzIHsKICNk ZWZpbmUgWEdSX0NIRUNLUE9JTlRfRkFJTE9WRVIgMiAvKiBGYWlsb3ZlciBhbmQgcmVzdW1lIFZN ICovCiAgICAgaW50ICgqY2hlY2twb2ludCkodm9pZCogZGF0YSk7CiAKKyAgICAvKgorICAgICAq IENhbGxlZCBhZnRlciB0aGUgY2hlY2twb2ludCBjYWxsYmFjay4KKyAgICAgKgorICAgICAqIHJl dHVybnM6CisgICAgICogMDogdGVybWluYXRlIGNoZWNrcG9pbnRpbmcgZ3JhY2VmdWxseQorICAg ICAqIDE6IHRha2UgYW5vdGhlciBjaGVja3BvaW50CisgICAgICovCisgICAgaW50ICgqd2FpdF9j aGVja3BvaW50KSh2b2lkKiBkYXRhKTsKKwogICAgIC8qIHRvIGJlIHByb3ZpZGVkIGFzIHRoZSBs YXN0IGFyZ3VtZW50IHRvIGVhY2ggY2FsbGJhY2sgZnVuY3Rpb24gKi8KICAgICB2b2lkKiBkYXRh OwogfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX3NyX3NhdmUuYyBiL3Rvb2xzL2xpYnhj L3hjX3NyX3NhdmUuYwppbmRleCAxY2NkYmJiLi5kM2Q5NWQ0IDEwMDY0NAotLS0gYS90b29scy9s aWJ4Yy94Y19zcl9zYXZlLmMKKysrIGIvdG9vbHMvbGlieGMveGNfc3Jfc2F2ZS5jCkBAIC04NDYs NyArODQ2LDggQEAgaW50IHhjX2RvbWFpbl9zYXZlKHhjX2ludGVyZmFjZSAqeGNoLCBpbnQgaW9f ZmQsIHVpbnQzMl90IGRvbSwKIAogICAgIC8qIElmIGFsdGVyaW5nIG1pZ3JhdGlvbl9zdHJlYW0g dXBkYXRlIHRoaXMgYXNzZXJ0IHRvby4gKi8KICAgICBhc3NlcnQoc3RyZWFtX3R5cGUgPT0gWENf TUlHX1NUUkVBTV9OT05FIHx8Ci0gICAgICAgICAgIHN0cmVhbV90eXBlID09IFhDX01JR19TVFJF QU1fUkVNVVMpOworICAgICAgICAgICBzdHJlYW1fdHlwZSA9PSBYQ19NSUdfU1RSRUFNX1JFTVVT IHx8CisgICAgICAgICAgIHN0cmVhbV90eXBlID09IFhDX01JR19TVFJFQU1fQ09MTyk7CiAKICAg ICAvKgogICAgICAqIFRPRE86IEZpbmQgc29tZSB0aW1lIHRvIGJldHRlciB0d2VhayB0aGUgbGl2 ZSBtaWdyYXRpb24gYWxnb3JpdGhtLgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUg Yi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRleCA4ZmE3Yjg3Li4zNWEwN2E3IDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9NYWtlZmlsZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtNjUs NiArNjUsNyBAQCBMSUJYTF9PQkpTLXkgKz0gbGlieGxfbm9fY29udmVydF9jYWxsb3V0Lm8KIGVu ZGlmCiAKIExJQlhMX09CSlMteSArPSBsaWJ4bF9yZW11cy5vIGxpYnhsX2NoZWNrcG9pbnRfZGV2 aWNlLm8gbGlieGxfcmVtdXNfZGlza19kcmJkLm8KK0xJQlhMX09CSlMteSArPSBsaWJ4bF9jb2xv X3Jlc3RvcmUubwogCiBMSUJYTF9PQkpTLSQoQ09ORklHX1g4NikgKz0gbGlieGxfY3B1aWQubyBs aWJ4bF94ODYubyBsaWJ4bF9wc3IubwogTElCWExfT0JKUy0kKENPTkZJR19BUk0pICs9IGxpYnhs X25vY3B1aWQubyBsaWJ4bF9hcm0ubyBsaWJ4bF9saWJmZHRfY29tcGF0Lm8KZGlmZiAtLWdpdCBh L3Rvb2xzL2xpYnhsL2xpYnhsX2NvbG8uaCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NvbG8uaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmI5OGNjCi0tLSAvZGV2L251bGwKKysr IGIvdG9vbHMvbGlieGwvbGlieGxfY29sby5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTYgRlVKSVRTVSBMSU1JVEVECisgKiBBdXRob3I6IFdlbiBDb25neWFuZyA8 d2VuY3lAY24uZnVqaXRzdS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25s eS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGlu IGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisj aWZuZGVmIExJQlhMX0NPTE9fSAorI2RlZmluZSBMSUJYTF9DT0xPX0gKKworc3RydWN0IGxpYnhs X19hbzsKK3N0cnVjdCBsaWJ4bF9fZWdjOworCitlbnVtIHsKKyAgICBMSUJYTF9DT0xPX1NFVFVQ RUQsCisgICAgTElCWExfQ09MT19TVVNQRU5ERUQsCisgICAgTElCWExfQ09MT19SRVNVTUVELAor fTsKKwordHlwZWRlZiBzdHJ1Y3QgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgbGlieGxfX2Rv bWFpbl9jcmVhdGVfc3RhdGU7Cit0eXBlZGVmIHZvaWQgbGlieGxfX2RvbWFpbl9jcmVhdGVfY2Io c3RydWN0IGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByYywgdWludDMyX3QgZG9taWQpOworCit0eXBlZGVmIHN0 cnVjdCBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGU7 Cit0eXBlZGVmIHZvaWQgbGlieGxfX2NvbG9fY2FsbGJhY2soc3RydWN0IGxpYnhsX19lZ2MgKmVn YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3Jl X3N0YXRlICpjcnMsIGludCByYyk7CisKK3N0cnVjdCBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRl IHsKKyAgICAvKiBtdXN0IHNldCBieSBjYWxsZXIgb2YgbGlieGxfX2NvbG9fKHNldHVwfHRlYXJk b3duKSAqLworICAgIHN0cnVjdCBsaWJ4bF9fYW8gKmFvOworICAgIHVpbnQzMl90IGRvbWlkOwor ICAgIGludCBzZW5kX2JhY2tfZmQ7CisgICAgaW50IHJlY3ZfZmQ7CisgICAgaW50IGh2bTsKKyAg ICBsaWJ4bF9fY29sb19jYWxsYmFjayAqY2FsbGJhY2s7CisKKyAgICAvKiBwcml2YXRlLCBjb2xv IHJlc3RvcmUgY2hlY2twb2ludCBzdGF0ZSAqLworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX2Ni ICpzYXZlZF9jYjsKKyAgICB2b2lkICpjcmNzOworfTsKKworZXh0ZXJuIHZvaWQgbGlieGxfX2Nv bG9fcmVzdG9yZV9zZXR1cChzdHJ1Y3QgbGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMpOwor ZXh0ZXJuIHZvaWQgbGlieGxfX2NvbG9fcmVzdG9yZV90ZWFyZG93bihzdHJ1Y3QgbGlieGxfX2Vn YyAqZWdjLCB2b2lkICpkY3Nfdm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJldCwgaW50IHJldHZhbCwgaW50IGVycm5vdmFsKTsKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfY29sb19yZXN0b3JlLmMgYi90b29scy9saWJ4bC9s aWJ4bF9jb2xvX3Jlc3RvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h OGY3NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfY29sb19yZXN0b3Jl LmMKQEAgLTAsMCArMSwxMDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEZVSklUU1Ug TElNSVRFRAorICogQXV0aG9yOiBXZW4gQ29uZ3lhbmcgPHdlbmN5QGNuLmZ1aml0c3UuY29tPgor ICogICAgICAgICBZYW5nIEhvbmd5YW5nIDxob25neWFuZy55YW5nQGVhc3lzdGFjay5jbj4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBl eGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIg LyogbXVzdCBjb21lIGJlZm9yZSBhbnkgb3RoZXIgaGVhZGVycyAqLworCisjaW5jbHVkZSAibGli eGxfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJ4bF9zcl9zdHJlYW1fZm9ybWF0LmgiCisKK3R5 cGVkZWYgc3RydWN0IGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSBsaWJ4bF9f Y29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGU7CitzdHJ1Y3QgbGlieGxfX2NvbG9fcmVzdG9y ZV9jaGVja3BvaW50X3N0YXRlIHsKKyAgICBsaWJ4bF9fZG9tYWluX3N1c3BlbmRfc3RhdGUgZHNw czsKKyAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoIGxkczsKKyAgICBsaWJ4bF9fY29sb19yZXN0 b3JlX3N0YXRlICpjcnM7CisgICAgbGlieGxfX3N0cmVhbV93cml0ZV9zdGF0ZSBzd3M7CisgICAg aW50IHN0YXR1czsKKyAgICBib29sIHByZXJlc3VtZTsKKyAgICAvKiB1c2VkIGZvciB0ZWFyZG93 biAqLworICAgIGludCB0ZWFyZG93bl9kZXZpY2VzOworICAgIGludCBzYXZlZF9yYzsKKyAgICBj aGFyICpzdGF0ZV9maWxlOworCisgICAgdm9pZCAoKmNhbGxiYWNrKShsaWJ4bF9fZWdjICosCisg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUg KiwKKyAgICAgICAgICAgICAgICAgICAgIGludCk7Cit9OworCitzdGF0aWMgY29uc3QgbGlieGxf X2NoZWNrcG9pbnRfZGV2aWNlX2luc3RhbmNlX29wcyAqY29sb19yZXN0b3JlX29wc1tdID0gewor ICAgIE5VTEwsCit9OworCisvKiA9PT09PT09PT09PT09PT09PT09PT0gY29sbzogY29tbW9uIGZ1 bmN0aW9ucyA9PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIHZvaWQgY29sb19lbmFi bGVfbG9nZGlydHkobGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzLCBsaWJ4bF9fZWdjICpl Z2MpCit7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9P RihjcnMsICpkY3MsIGNycyk7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0 YXRlICpjcmNzID0gY3JzLT5jcmNzOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLwor ICAgIGNvbnN0IHVpbnQzMl90IGRvbWlkID0gY3JzLT5kb21pZDsKKyAgICBsaWJ4bF9fbG9nZGly dHlfc3dpdGNoICpjb25zdCBsZHMgPSAmY3Jjcy0+bGRzOworCisgICAgRUdDX0dDOworCisgICAg Lyogd2UgbmVlZCB0byBrbm93IHdoaWNoIHBhZ2VzIGFyZSBkaXJ0eSB0byByZXN0b3JlIHRoZSBn dWVzdCAqLworICAgIGlmICh4Y19zaGFkb3dfY29udHJvbChDVFgtPnhjaCwgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIFhFTl9ET01DVExfU0hBRE9XX09QX0VOQUJMRV9MT0dESVJU WSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCkgPCAw KSB7CisgICAgICAgIExPRyhFUlJPUiwgImNhbm5vdCBlbmFibGUgc2Vjb25kYXJ5IHZtJ3MgbG9n ZGlydHkiKTsKKyAgICAgICAgbGRzLT5jYWxsYmFjayhlZ2MsIGxkcywgRVJST1JfRkFJTCk7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY3JzLT5odm0pIHsKKyAgICAgICAgbGli eGxfX2RvbWFpbl9jb21tb25fc3dpdGNoX3FlbXVfbG9nZGlydHkoZWdjLCBkb21pZCwgMSwgbGRz KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxkcy0+Y2FsbGJhY2soZWdjLCBsZHMs IDApOworfQorCitzdGF0aWMgdm9pZCBjb2xvX2Rpc2FibGVfbG9nZGlydHkobGlieGxfX2NvbG9f cmVzdG9yZV9zdGF0ZSAqY3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19lZ2MgKmVnYykKK3sKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0g Q09OVEFJTkVSX09GKGNycywgKmRjcywgY3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2No ZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBjcnMtPmNyY3M7CisKKyAgICAvKiBDb252ZW5pZW5jZSBh bGlhc2VzICovCisgICAgY29uc3QgdWludDMyX3QgZG9taWQgPSBjcnMtPmRvbWlkOworICAgIGxp YnhsX19sb2dkaXJ0eV9zd2l0Y2ggKmNvbnN0IGxkcyA9ICZjcmNzLT5sZHM7CisKKyAgICBFR0Nf R0M7CisKKyAgICAvKiB3ZSBuZWVkIHRvIGtub3cgd2hpY2ggcGFnZXMgYXJlIGRpcnR5IHRvIHJl c3RvcmUgdGhlIGd1ZXN0ICovCisgICAgaWYgKHhjX3NoYWRvd19jb250cm9sKENUWC0+eGNoLCBk b21pZCwgWEVOX0RPTUNUTF9TSEFET1dfT1BfT0ZGLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAwLCBOVUxMLCAwLCBOVUxMKSA8IDApCisgICAgICAgIExPRyhXQVJOLCAiY2Fubm90 IGRpc2FibGUgc2Vjb25kYXJ5IHZtJ3MgbG9nZGlydHkiKTsKKworICAgIGlmIChjcnMtPmh2bSkg eworICAgICAgICBsaWJ4bF9fZG9tYWluX2NvbW1vbl9zd2l0Y2hfcWVtdV9sb2dkaXJ0eShlZ2Ms IGRvbWlkLCAwLCBsZHMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGRzLT5jYWxs YmFjayhlZ2MsIGxkcywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdW1lX3ZtKGxpYnhs X19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3Rv cmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCByZXN0b3JlX2RldmljZV9tb2RlbCkKK3sKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0 ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNyY3MtPmNycywgKmRjcywgY3JzKTsKKyAgICBpbnQgcmM7 CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NvbG9fcmVzdG9y ZV9zdGF0ZSAqY29uc3QgY3JzID0gY3Jjcy0+Y3JzOworCisgICAgRUdDX0dDOworCisgICAgaWYg KCFjcnMtPnNhdmVkX2NiKSB7CisgICAgICAgIC8qIFRPRE86IHN5bmMgbW11IGZvciBodm0/ICov CisgICAgICAgIGlmIChyZXN0b3JlX2RldmljZV9tb2RlbCkgeworICAgICAgICAgICAgcmMgPSBs aWJ4bF9fcW1wX3Jlc3RvcmUoZ2MsIGNycy0+ZG9taWQsIGNyY3MtPnN0YXRlX2ZpbGUpOworICAg ICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IHJl c3RvcmUgZGV2aWNlIG1vZGVsIGZvciBzZWNvbmRhcnkgdm0iKTsKKyAgICAgICAgICAgICAgICBj cmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIHJjKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmMgPSBsaWJ4bF9fZG9tYWluX3Jlc3Vt ZShnYywgY3JzLT5kb21pZCwgMCk7CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIExPRyhF UlJPUiwgImNhbm5vdCByZXN1bWUgc2Vjb25kYXJ5IHZtIik7CisKKyAgICAgICAgY3Jjcy0+Y2Fs bGJhY2soZWdjLCBjcmNzLCByYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgor ICAgICAqIFRPRE86IGdldCBzdG9yZSBnZm4gYW5kIGNvbnNvbGUgZ2ZuCisgICAgICogIFdlIHNo b3VsZCBjYWxsIHRoZSBjYWxsYmFjayByZXN0b3JlX3Jlc3VsdHMgaW4KKyAgICAgKiAgeGNfZG9t YWluX3Jlc3RvcmUoKSBiZWZvcmUgcmVzdW1pbmcgdGhlIGd1ZXN0LgorICAgICAqLworICAgIGxp YnhsX194Y19kb21haW5fcmVzdG9yZV9kb25lKGVnYywgZGNzLCAwLCAwLCAwKTsKKworICAgIHJl dHVybjsKK30KKworc3RhdGljIGludCBpbml0X2RldmljZV9zdWJraW5kKGxpYnhsX19jaGVja3Bv aW50X2RldmljZXNfc3RhdGUgKmNkcykKK3sKKyAgICAvKiBpbml0IGRldmljZSBzdWJraW5kLXNw ZWNpZmljIHN0YXRlIGluIHRoZSBsaWJ4bCBjdHggKi8KKyAgICBpbnQgcmM7CisgICAgU1RBVEVf QU9fR0MoY2RzLT5hbyk7CisKKyAgICByYyA9IDA7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0 aWMgdm9pZCBjbGVhbnVwX2RldmljZV9zdWJraW5kKGxpYnhsX19jaGVja3BvaW50X2RldmljZXNf c3RhdGUgKmNkcykKK3sKKyAgICAvKiBjbGVhbnVwIGRldmljZSBzdWJraW5kLXNwZWNpZmljIHN0 YXRlIGluIHRoZSBsaWJ4bCBjdHggKi8KKyAgICBTVEFURV9BT19HQyhjZHMtPmFvKTsKK30KKwor LyogPT09PT09PT09PT09PT09PSBjb2xvOiBzZXR1cCByZXN0b3JlIGVudmlyb25tZW50ID09PT09 PT09PT09PT09PT0gKi8KKworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9fZG9tYWluX2NyZWF0ZV9j YihsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCByYywgdWludDMyX3QgZG9taWQpOworCitzdGF0aWMg aW50IGluaXRfZHNwcyhsaWJ4bF9fZG9tYWluX3N1c3BlbmRfc3RhdGUgKmRzcHMpCit7CisgICAg aW50IHJjID0gRVJST1JfRkFJTDsKKyAgICBsaWJ4bF9kb21haW5fdHlwZSB0eXBlOworCisgICAg U1RBVEVfQU9fR0MoZHNwcy0+YW8pOworCisgICAgbGlieGxfX3hzd2FpdF9pbml0KCZkc3BzLT5w dmNvbnRyb2wpOworICAgIGxpYnhsX19ldl9ldnRjaG5faW5pdCgmZHNwcy0+Z3Vlc3RfZXZ0Y2hu KTsKKyAgICBsaWJ4bF9fZXZfeHN3YXRjaF9pbml0KCZkc3BzLT5ndWVzdF93YXRjaCk7CisgICAg bGlieGxfX2V2X3RpbWVfaW5pdCgmZHNwcy0+Z3Vlc3RfdGltZW91dCk7CisKKyAgICB0eXBlID0g bGlieGxfX2RvbWFpbl90eXBlKGdjLCBkc3BzLT5kb21pZCk7CisgICAgaWYgKHR5cGUgPT0gTElC WExfRE9NQUlOX1RZUEVfSU5WQUxJRCkKKyAgICAgICAgZ290byBvdXQ7CisKKyAgICBkc3BzLT50 eXBlID0gdHlwZTsKKworICAgIGRzcHMtPmd1ZXN0X2V2dGNobi5wb3J0ID0gLTE7CisgICAgZHNw cy0+Z3Vlc3RfZXZ0Y2huX2xvY2tmZCA9IC0xOworICAgIGRzcHMtPmd1ZXN0X3Jlc3BvbmRlZCA9 IDA7CisgICAgZHNwcy0+ZG1fc2F2ZWZpbGUgPSBsaWJ4bF9fZGV2aWNlX21vZGVsX3NhdmVmaWxl KGdjLCBkc3BzLT5kb21pZCk7CisKKyAgICAvKiBTZWNvbmRhcnkgdm0gaXMgbm90IGNyZWF0ZWQs IHNvIHdlIGNhbm5vdCBnZXQgZXZ0Y2huIHBvcnQgKi8KKworICAgIHJjID0gMDsKKworb3V0Ogor ICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIGNoZWNrcG9pbnQgY2FsbGJhY2tzIGFyZSBjYWxs ZWQgaW4gdGhlIGZvbGxvd2luZyBvcmRlcjoKKyAqIDEuIHJlc3VtZQorICogMi4gd2FpdCBjaGVj a3BvaW50CisgKiAzLiBzdXNwZW5kCisgKiA0LiBjaGVja3BvaW50CisgKi8KK3N0YXRpYyB2b2lk IGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3Jlc3VtZV9jYWxsYmFjayh2b2lkICpkYXRhKTsK K3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9tYWluX3dhaXRfY2hlY2twb2ludF9j YWxsYmFjayh2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jlc3RvcmVfZG9t YWluX3N1c3BlbmRfY2FsbGJhY2sodm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBsaWJ4bF9fY29s b19yZXN0b3JlX2RvbWFpbl9jaGVja3BvaW50X2NhbGxiYWNrKHZvaWQgKmRhdGEpOworCit2b2lk IGxpYnhsX19jb2xvX3Jlc3RvcmVfc2V0dXAobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycykKK3sKKyAg ICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRj cywgY3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3M7 CisgICAgaW50IHJjID0gRVJST1JfRkFJTDsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMg Ki8KKyAgICBsaWJ4bF9fc3JtX3Jlc3RvcmVfYXV0b2dlbl9jYWxsYmFja3MgKmNvbnN0IGNhbGxi YWNrcyA9CisgICAgICAgICZkY3MtPnNycy5zaHMuY2FsbGJhY2tzLnJlc3RvcmUuYTsKKyAgICBj b25zdCBpbnQgZG9taWQgPSBjcnMtPmRvbWlkOworCisgICAgU1RBVEVfQU9fR0MoY3JzLT5hbyk7 CisKKyAgICBHQ05FVyhjcmNzKTsKKyAgICBjcnMtPmNyY3MgPSBjcmNzOworICAgIGNyY3MtPmNy cyA9IGNyczsKKworICAgIC8qIHNldHVwIGRzcHMgKi8KKyAgICBjcmNzLT5kc3BzLmFvID0gYW87 CisgICAgY3Jjcy0+ZHNwcy5kb21pZCA9IGRvbWlkOworICAgIGlmIChpbml0X2RzcHMoJmNyY3Mt PmRzcHMpKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGNhbGxiYWNrcy0+cG9zdGNvcHkgPSBs aWJ4bF9fY29sb19yZXN0b3JlX2RvbWFpbl9yZXN1bWVfY2FsbGJhY2s7CisgICAgY2FsbGJhY2tz LT53YWl0X2NoZWNrcG9pbnQgPSBsaWJ4bF9fY29sb19yZXN0b3JlX2RvbWFpbl93YWl0X2NoZWNr cG9pbnRfY2FsbGJhY2s7CisgICAgY2FsbGJhY2tzLT5zdXNwZW5kID0gbGlieGxfX2NvbG9fcmVz dG9yZV9kb21haW5fc3VzcGVuZF9jYWxsYmFjazsKKyAgICBjYWxsYmFja3MtPmNoZWNrcG9pbnQg PSBsaWJ4bF9fY29sb19yZXN0b3JlX2RvbWFpbl9jaGVja3BvaW50X2NhbGxiYWNrOworCisgICAg LyoKKyAgICAgKiBTZWNvbmRhcnkgdm0gaXMgcnVubmluZyBpbiBjb2xvIG1vZGUsIHNvIHdlIG5l ZWQgdG8gY2FsbAorICAgICAqIGxpYnhsX194Y19kb21haW5fcmVzdG9yZV9kb25lKCkgdG8gY3Jl YXRlIHNlY29uZGFyeSB2bS4KKyAgICAgKiBCdXQgd2Ugd2lsbCBleGl0IGluIGRvbWFpbl9jcmVh dGVfY2IoKS4gU28gcmVwbGFjZSB0aGUKKyAgICAgKiBjYWxsYmFjayBoZXJlLgorICAgICAqLwor ICAgIGNycy0+c2F2ZWRfY2IgPSBkY3MtPmNhbGxiYWNrOworICAgIGRjcy0+Y2FsbGJhY2sgPSBs aWJ4bF9fY29sb19kb21haW5fY3JlYXRlX2NiOworICAgIGNyY3MtPnN0YXRlX2ZpbGUgPSBHQ1NQ UklOVEYoTElCWExfREVWSUNFX01PREVMX1JFU1RPUkVfRklMRSIuJWQiLCBkb21pZCk7CisgICAg Y3Jjcy0+c3RhdHVzID0gTElCWExfQ09MT19TRVRVUEVEOworCisgICAgbGlieGxfX2xvZ2RpcnR5 X2luaXQoJmNyY3MtPmxkcyk7CisgICAgY3Jjcy0+bGRzLmFvID0gYW87CisKKyAgICBjcmNzLT5z d3MuZmQgPSBjcnMtPnNlbmRfYmFja19mZDsKKyAgICBjcmNzLT5zd3MuYW8gPSBhbzsKKyAgICBj cmNzLT5zd3MuYmFja19jaGFubmVsID0gdHJ1ZTsKKworICAgIGRjcy0+Y2RzLmNvbmNyZXRlX2Rh dGEgPSBjcnM7CisKKyAgICBsaWJ4bF9fc3RyZWFtX3dyaXRlX3N0YXJ0KGVnYywgJmNyY3MtPnN3 cyk7CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBjcnMtPmNhbGxiYWNrKGVnYywgY3JzLCBy Yyk7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19kb21haW5fY3Jl YXRlX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjLCB1aW50MzJfdCBkb21pZCkKK3sKKyAg ICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBkY3MtPmNycy5j cmNzOworCisgICAgY3Jjcy0+Y2FsbGJhY2soZWdjLCBjcmNzLCByYyk7Cit9CisKKy8qID09PT09 PT09PT09PT09PT0gY29sbzogdGVhcmRvd24gcmVzdG9yZSBlbnZpcm9ubWVudCA9PT09PT09PT09 PT09PT09ICovCisKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV90ZWFyZG93bl9kZXZpY2VzX2Rv bmUobGlieGxfX2VnYyAqZWdjLAorICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3RhdGUg KmNkcywgaW50IHJjKTsKK3N0YXRpYyB2b2lkIGRvX2ZhaWxvdmVyKGxpYnhsX19lZ2MgKmVnYywg bGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzKTsKK3N0YXRpYyB2b2lkIGRvX2ZhaWxvdmVy X2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUqIGNyY3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX2Rpc2FibGVfbG9nZGlydHlf ZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpsZHMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcmMpOworc3RhdGljIHZvaWQgbGlieGxfX2NvbG9fcmVzdG9y ZV90ZWFyZG93bl9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0YXRlICpjcnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKTsKKwor dm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJkb3duKGxpYnhsX19lZ2MgKmVnYywgdm9pZCAq ZGNzX3ZvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldCwgaW50 IHJldHZhbCwgaW50IGVycm5vdmFsKQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRl ICpkY3MgPSBkY3Nfdm9pZDsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3Rh dGUgKmNyY3MgPSBkY3MtPmNycy5jcmNzOworICAgIGludCByYyA9IDE7CisKKyAgICAvKiBjb252 ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY29uc3Qg Y3JzID0gJmRjcy0+Y3JzOworICAgIEVHQ19HQzsKKworICAgIGlmIChyZXQgPT0gMCAmJiByZXR2 YWwgPT0gMCkKKyAgICAgICAgcmMgPSAwOworCisgICAgTE9HKElORk8sICIlcyIsIHJjID8gImNv bG8gZmFpbHMiIDogImZhaWxvdmVyIik7CisKKyAgICBsaWJ4bF9fc3RyZWFtX3dyaXRlX2Fib3J0 KGVnYywgJmNyY3MtPnN3cywgMSk7CisgICAgaWYgKGNycy0+c2F2ZWRfY2IpIHsKKyAgICAgICAg LyogY3Jjcy0+c3RhdHVzIGlzIExJQlhMX0NPTE9fU0VUVVBFRCAqLworICAgICAgICBkY3MtPnNy cy5jb21wbGV0aW9uX2NhbGxiYWNrID0gTlVMTDsKKyAgICB9CisgICAgbGlieGxfX3hjX2RvbWFp bl9yZXN0b3JlX2RvbmUoZWdjLCBkY3MsIHJldCwgcmV0dmFsLCBlcnJub3ZhbCk7CisKKyAgICBj cmNzLT5zYXZlZF9yYyA9IHJjOworICAgIGlmICghY3Jjcy0+dGVhcmRvd25fZGV2aWNlcykgewor ICAgICAgICBjb2xvX3Jlc3RvcmVfdGVhcmRvd25fZGV2aWNlc19kb25lKGVnYywgJmRjcy0+Y2Rz LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRjcy0+Y2RzLmNhbGxiYWNrID0g Y29sb19yZXN0b3JlX3RlYXJkb3duX2RldmljZXNfZG9uZTsKKyAgICBsaWJ4bF9fY2hlY2twb2lu dF9kZXZpY2VzX3RlYXJkb3duKGVnYywgJmRjcy0+Y2RzKTsKK30KKworc3RhdGljIHZvaWQgY29s b19yZXN0b3JlX3RlYXJkb3duX2RldmljZXNfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgbGli eGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzLCBpbnQgcmMpCit7CisgICAgbGlieGxf X2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzID0gY2RzLT5jb25jcmV0ZV9kYXRhOworICAgIGxpYnhs X19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGNycy0+Y3JjczsKKyAgICBs aWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRjcywg Y3JzKTsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykKKyAgICAgICAgTE9HKEVSUk9SLCAi Q09MTzogZmFpbGVkIHRvIHRlYXJkb3duIGRldmljZSBmb3IgZ3Vlc3Qgd2l0aCBkb21pZCAldSwi CisgICAgICAgICAgICAiIHJjICVkIiwgY2RzLT5kb21pZCwgcmMpOworCisgICAgaWYgKGNyY3Mt PnRlYXJkb3duX2RldmljZXMpCisgICAgICAgIGNsZWFudXBfZGV2aWNlX3N1YmtpbmQoY2RzKTsK KworICAgIHJjID0gY3Jjcy0+c2F2ZWRfcmM7CisgICAgaWYgKCFyYykgeworICAgICAgICBjcmNz LT5jYWxsYmFjayA9IGRvX2ZhaWxvdmVyX2RvbmU7CisgICAgICAgIGRvX2ZhaWxvdmVyKGVnYywg Y3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVf dGVhcmRvd25fZG9uZShlZ2MsIGNycywgcmMpOworfQorCitzdGF0aWMgdm9pZCBkb19mYWlsb3Zl cihsaWJ4bF9fZWdjICplZ2MsIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycykKK3sKKyAg ICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBjcnMtPmNyY3M7 CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgY29uc3QgaW50IHN0YXR1cyA9 IGNyY3MtPnN0YXR1czsKKyAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpjb25zdCBsZHMgPSAm Y3Jjcy0+bGRzOworCisgICAgRUdDX0dDOworCisgICAgc3dpdGNoKHN0YXR1cykgeworICAgIGNh c2UgTElCWExfQ09MT19TRVRVUEVEOgorICAgICAgICAvKgorICAgICAgICAgKiBXZSB3aWxsIGNv bWUgaGVyZSBvbmx5IHdoZW4gcmVhZGluZyBlbXVsYXRvciB4ZW5zdG9yZSBkYXRhIG9yCisgICAg ICAgICAqIGVtdWxhdG9yIGNvbnRleHQgZmFpbHMsIGFuZCBsaWJ4bF9feGNfZG9tYWluX3Jlc3Rv cmVfZG9uZSgpCisgICAgICAgICAqIGlzIG5vdCBjYWxsZWQuIEluIHRoaXMgY2FzZSwgdGhlIG1p Z3JhdGlvbiBpcyBub3QgZmluaXNoZWQsCisgICAgICAgICAqIHNvIHdlIGNhbm5vdCBkbyBmYWls b3Zlci4KKyAgICAgICAgICovCisgICAgICAgIExPRyhFUlJPUiwgIm1pZ3JhdGlvbiBmYWlscyIp OworICAgICAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIEVSUk9SX0ZBSUwpOworICAgICAg ICByZXR1cm47CisgICAgY2FzZSBMSUJYTF9DT0xPX1NVU1BFTkRFRDoKKyAgICBjYXNlIExJQlhM X0NPTE9fUkVTVU1FRDoKKyAgICAgICAgLyogZGlzYWJsZSBsb2dkaXJ0eSBmaXJzdCAqLworICAg ICAgICBsZHMtPmNhbGxiYWNrID0gY29sb19kaXNhYmxlX2xvZ2RpcnR5X2RvbmU7CisgICAgICAg IGNvbG9fZGlzYWJsZV9sb2dkaXJ0eShjcnMsIGVnYyk7CisgICAgICAgIHJldHVybjsKKyAgICBk ZWZhdWx0OgorICAgICAgICBMT0coRVJST1IsICJpbnZhbGlkIHN0YXR1czogJWQiLCBzdGF0dXMp OworICAgICAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIEVSUk9SX0ZBSUwpOworICAgIH0K K30KKworc3RhdGljIHZvaWQgZG9fZmFpbG92ZXJfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9z dGF0ZSogY3JjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAg IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3Jz LCAqZGNzLCBjcnMpOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGxpYnhs X19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNvbnN0IGNycyA9IGNyY3MtPmNyczsKKworICAgIEVHQ19H QzsKKworICAgIGlmIChyYykKKyAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IGRvIGZhaWxvdmVy Iik7CisKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJkb3duX2RvbmUoZWdjLCBjcnMsIHJj KTsKK30KKworc3RhdGljIHZvaWQgY29sb19kaXNhYmxlX2xvZ2RpcnR5X2RvbmUobGlieGxfX2Vn YyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2xv Z2RpcnR5X3N3aXRjaCAqbGRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHJjKQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAq Y3JjcyA9IENPTlRBSU5FUl9PRihsZHMsICpjcmNzLCBsZHMpOworCisgICAgRUdDX0dDOworCisg ICAgaWYgKHJjKQorICAgICAgICBMT0coV0FSTiwgImNhbm5vdCBkaXNhYmxlIGxvZ2RpcnR5Iik7 CisKKyAgICBpZiAoY3Jjcy0+c3RhdHVzID09IExJQlhMX0NPTE9fU1VTUEVOREVEKSB7CisgICAg ICAgIC8qCisgICAgICAgICAqIGZhaWxvdmVyIHdoZW4gcmVhZGluZyBzdGF0ZSBmcm9tIG1hc3Rl ciwgc28gbm8gbmVlZCB0bworICAgICAgICAgKiBjYWxsIGxpYnhsX19xbXBfcmVzdG9yZSgpLgor ICAgICAgICAgKi8KKyAgICAgICAgY29sb19yZXN1bWVfdm0oZWdjLCBjcmNzLCAwKTsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIElmIHdlIGNhbm5vdCBkaXNhYmxlIGxvZ2RpcnR5 LCB3ZSBzdGlsbCBjYW4gZG8gZmFpbG92ZXIgKi8KKyAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNy Y3MsIDApOworfQorCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX3RlYXJkb3duX2Rv bmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgbGlieGxfX2Rv bWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcnMsICpkY3MsIGNycyk7Cisg ICAgRUdDX0dDOworCisgICAgLyogY29udmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGNvbnN0IGlu dCBkb21pZCA9IGNycy0+ZG9taWQ7CisgICAgY29uc3QgbGlieGxfY3R4ICpjb25zdCBjdHggPSBs aWJ4bF9fZ2Nfb3duZXIoZ2MpOworICAgIHhjX2ludGVyZmFjZSAqY29uc3QgeGNoID0gY3R4LT54 Y2g7CisKKyAgICBpZiAoIXJjKQorICAgICAgICAvKiBmYWlsb3Zlciwgbm8gbmVlZCB0byBkZXN0 cm95IHRoZSBzZWNvbmRhcnkgdm0gKi8KKyAgICAgICAgZ290byBvdXQ7CisKKyAgICB4Y19kb21h aW5fZGVzdHJveSh4Y2gsIGRvbWlkKTsKKworb3V0OgorICAgIGlmIChjcnMtPnNhdmVkX2NiKSB7 CisgICAgICAgIGRjcy0+Y2FsbGJhY2sgPSBjcnMtPnNhdmVkX2NiOworICAgICAgICBjcnMtPnNh dmVkX2NiID0gTlVMTDsKKyAgICB9CisKKyAgICBkY3MtPmNhbGxiYWNrKGVnYywgZGNzLCByYywg Y3JzLT5kb21pZCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fY29tbW9uX3dyaXRlX3N0cmVhbV9k b25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfc3RhdGUgKnN0cmVhbSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX2Nv bW1vbl9yZWFkX3N0cmVhbV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpzdHJlYW0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7CisKKy8q ID09PT09PT09PT09PT09PT09PT09PT09PSBjb2xvOiBjaGVja3BvaW50ID09PT09PT09PT09PT09 PT09PT09PT09ICovCisKKy8qCisgKiBEbyB0aGUgZm9sbG93aW5nIHRoaW5ncyB3aGVuIHJlc3Vt aW5nIHNlY29uZGFyeSB2bToKKyAqICAxLiByZWFkIGVtdWxhdG9yIHhlbnN0b3JlIGRhdGEKKyAq ICAyLiByZWFkIGVtdWxhdG9yIGNvbnRleHQKKyAqICAzLiBSRUNfVFlQRV9DSEVDS1BPSU5UX0VO RAorICovCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX2RvbWFpbl9jaGVja3BvaW50 X2NhbGxiYWNrKHZvaWQgKmRhdGEpCit7CisgICAgbGlieGxfX3NhdmVfaGVscGVyX3N0YXRlICpz aHMgPSBkYXRhOworICAgIGxpYnhsX19zdHJlYW1fcmVhZF9zdGF0ZSAqc3JzID0gQ09OVEFJTkVS X09GKHNocywgKnNycywgc2hzKTsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNz ID0gQ09OVEFJTkVSX09GKHNycywgKmRjcywgc3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3Jl X2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBkY3MtPmNycy5jcmNzOworCisgICAgY3Jjcy0+Y2Fs bGJhY2sgPSBOVUxMOworICAgIGRjcy0+c3JzLmNoZWNrcG9pbnRfY2FsbGJhY2sgPSBjb2xvX2Nv bW1vbl9yZWFkX3N0cmVhbV9kb25lOworICAgIGxpYnhsX19zdHJlYW1fcmVhZF9zdGFydF9jaGVj a3BvaW50KHNocy0+ZWdjLCAmZGNzLT5zcnMpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09 PT0gY29sbzogcmVzdW1lIHNlY29uZGFyeSB2bSA9PT09PT09PT09PT09PT09PT09PT0gKi8KKwor LyoKKyAqIERvIHRoZSBmb2xsb3dpbmcgdGhpbmdzIHdoZW4gcmVzdW1pbmcgc2Vjb25kYXJ5IHZt IHRoZSBmaXJzdCB0aW1lOgorICogIDEuIHJlc3VtZSBzZWNvbmRhcnkgdm0KKyAqICAyLiBlbmFi bGUgbG9nIGRpcnR5CisgKiAgMy4gc2V0dXAgY2hlY2twb2ludCBkZXZpY2VzCisgKiAgNC4gd3Jp dGUgQ0hFQ0tQT0lOVF9TVk1fUkVBRFkKKyAqICA1LiB1bnBhdXNlIHNlY29uZGFyeSB2bQorICog IDYuIHdyaXRlIENIRUNLUE9JTlRfU1ZNX1JFU1VNRUQKKyAqCisgKiBEbyB0aGUgZm9sbG93aW5n IHRoaW5ncyB3aGVuIHJlc3VtaW5nIHNlY29uZGFyeSB2bToKKyAqICAxLiB3cml0ZSBDSEVDS1BP SU5UX1NWTV9SRUFEWQorICogIDIuIHJlc3VtZSBzZWNvbmRhcnkgdm0KKyAqICAzLiB3cml0ZSBD SEVDS1BPSU5UX1NWTV9SRVNVTUVECisgKi8KK3N0YXRpYyB2b2lkIGNvbG9fc2VuZF9zdm1fcmVh ZHkobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MpOworc3RhdGljIHZvaWQgY29s b19zZW5kX3N2bV9yZWFkeV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUg KmNyY3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKTsKK3N0 YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9wcmVyZXN1bWVfY2IobGlieGxfX2VnYyAqZWdjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY2hlY2twb2ludF9kZXZp Y2VzX3N0YXRlICpjZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX3Jlc3RvcmVfcmVzdW1lX3ZtKGxpYnhsX19lZ2MgKmVn YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9y ZV9jaGVja3BvaW50X3N0YXRlICpjcmNzKTsKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdW1lX3ZtX2Rv bmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4 bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMgdm9pZCBjb2xvX3dyaXRlX3N2bV9yZXN1 bWVkKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzKTsKK3N0YXRpYyB2b2lk IGNvbG9fZW5hYmxlX2xvZ2RpcnR5X2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fbG9nZGlydHlfc3dpdGNoICpsZHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWwpOworc3RhdGlj IHZvaWQgY29sb19yZWVuYWJsZV9sb2dkaXJ0eShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19sb2dkaXJ0eV9zd2l0Y2ggKmxkcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKTsKK3N0YXRpYyB2b2lkIGNv bG9fcmVlbmFibGVfbG9nZGlydHlfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2xvZ2RpcnR5X3N3aXRjaCAqbGRzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYyk7CitzdGF0aWMg dm9pZCBjb2xvX3NldHVwX2NoZWNrcG9pbnRfZGV2aWNlcyhsaWJ4bF9fZWdjICplZ2MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3Jl X3N0YXRlICpjcnMpOworc3RhdGljIHZvaWQgY29sb19yZXN0b3JlX3NldHVwX2Nkc19kb25lKGxp YnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHJjKTsKK3N0YXRpYyB2b2lkIGNvbG9fdW5wYXVzZV9z dm0obGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f Y29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MpOworCitzdGF0aWMgdm9pZCBsaWJ4 bF9fY29sb19yZXN0b3JlX2RvbWFpbl9yZXN1bWVfY2FsbGJhY2sodm9pZCAqZGF0YSkKK3sKKyAg ICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKnNocyA9IGRhdGE7CisgICAgbGlieGxfX3N0cmVh bV9yZWFkX3N0YXRlICpzcnMgPSBDT05UQUlORVJfT0Yoc2hzLCAqc3JzLCBzaHMpOworICAgIGxp YnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0Yoc3JzLCAqZGNzLCBz cnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IGRj cy0+Y3JzLmNyY3M7CisKKyAgICBpZiAoY3Jjcy0+dGVhcmRvd25fZGV2aWNlcykKKyAgICAgICAg Y29sb19zZW5kX3N2bV9yZWFkeShzaHMtPmVnYywgY3Jjcyk7CisgICAgZWxzZQorICAgICAgICBj b2xvX3Jlc3RvcmVfcmVzdW1lX3ZtKHNocy0+ZWdjLCBjcmNzKTsKK30KKworc3RhdGljIHZvaWQg Y29sb19zZW5kX3N2bV9yZWFkeShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzKQor eworICAgIGxpYnhsX3NyX2NoZWNrcG9pbnRfc3RhdGUgc3JjcyA9IHsgLmlkID0gQ0hFQ0tQT0lO VF9TVk1fUkVBRFkgfTsKKworICAgIGNyY3MtPmNhbGxiYWNrID0gY29sb19zZW5kX3N2bV9yZWFk eV9kb25lOworICAgIGNyY3MtPnN3cy5jaGVja3BvaW50X2NhbGxiYWNrID0gY29sb19jb21tb25f d3JpdGVfc3RyZWFtX2RvbmU7CisgICAgbGlieGxfX3N0cmVhbV93cml0ZV9jaGVja3BvaW50X3N0 YXRlKGVnYywgJmNyY3MtPnN3cywgJnNyY3MpOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3NlbmRf c3ZtX3JlYWR5X2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgbGli eGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcmNzLT5jcnMsICpk Y3MsIGNycyk7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2No ZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzID0gJmRjcy0+Y2RzOworCisgICAgaWYgKCFjcmNz LT5wcmVyZXN1bWUpIHsKKyAgICAgICAgY3Jjcy0+cHJlcmVzdW1lID0gdHJ1ZTsKKyAgICAgICAg Y29sb191bnBhdXNlX3N2bShlZ2MsIGNyY3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgY2RzLT5jYWxsYmFjayA9IGNvbG9fcmVzdG9yZV9wcmVyZXN1bWVfY2I7CisgICAgbGlieGxf X2NoZWNrcG9pbnRfZGV2aWNlc19wcmVyZXN1bWUoZWdjLCBjZHMpOworfQorCitzdGF0aWMgdm9p ZCBjb2xvX3Jlc3RvcmVfcHJlcmVzdW1lX2NiKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0 ZSAqY2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7 CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzID0gY2RzLT5jb25jcmV0ZV9kYXRh OworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jz LCAqZGNzLCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAq Y3JjcyA9IGNycy0+Y3JjczsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAgICBs aWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKmNvbnN0IHNocyA9ICZkY3MtPnNycy5zaHM7CisKKyAg ICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAicHJlcmVzdW1l IGZhaWxzIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGNvbG9fcmVzdG9yZV9y ZXN1bWVfdm0oZWdjLCBjcmNzKTsKKworICAgIHJldHVybjsKKworb3V0OgorICAgIGxpYnhsX194 Y19kb21haW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tfZG9uZShlZ2MsIHNocywgMCk7Cit9 CisKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9yZXN1bWVfdm0obGlieGxfX2VnYyAqZWdjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2No ZWNrcG9pbnRfc3RhdGUgKmNyY3MpCit7CisKKyAgICBjcmNzLT5jYWxsYmFjayA9IGNvbG9fcmVz dW1lX3ZtX2RvbmU7CisgICAgY29sb19yZXN1bWVfdm0oZWdjLCBjcmNzLCAxKTsKK30KKworc3Rh dGljIHZvaWQgY29sb19yZXN1bWVfdm1fZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0 ZSAqY3JjcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJjKQoreworICAg IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3Jz LCAqZGNzLCBjcnMpOworCisgICAgLyogQ29udmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGxpYnhs X19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNvbnN0IGNycyA9IGNyY3MtPmNyczsKKyAgICBsaWJ4bF9f bG9nZGlydHlfc3dpdGNoICpjb25zdCBsZHMgPSAmY3Jjcy0+bGRzOworICAgIGxpYnhsX19zYXZl X2hlbHBlcl9zdGF0ZSAqY29uc3Qgc2hzID0gJmRjcy0+c3JzLnNoczsKKworICAgIEVHQ19HQzsK KworICAgIGlmIChyYykgeworICAgICAgICBMT0coRVJST1IsICJjYW5ub3QgcmVzdW1lIHNlY29u ZGFyeSB2bSIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBjcmNzLT5zdGF0dXMg PSBMSUJYTF9DT0xPX1JFU1VNRUQ7CisKKyAgICAvKiBhdm9pZCBjYWxsaW5nIHN0cmVhbS0+Y29t cGxldGlvbl9jYWxsYmFjaygpIG1vcmUgdGhhbiBvbmNlICovCisgICAgaWYgKGNycy0+c2F2ZWRf Y2IpIHsKKyAgICAgICAgZGNzLT5jYWxsYmFjayA9IGNycy0+c2F2ZWRfY2I7CisgICAgICAgIGNy cy0+c2F2ZWRfY2IgPSBOVUxMOworCisgICAgICAgIGRjcy0+c3JzLmNvbXBsZXRpb25fY2FsbGJh Y2sgPSBOVUxMOworCisgICAgICAgIGxkcy0+Y2FsbGJhY2sgPSBjb2xvX2VuYWJsZV9sb2dkaXJ0 eV9kb25lOworICAgICAgICBjb2xvX2VuYWJsZV9sb2dkaXJ0eShjcnMsIGVnYyk7CisgICAgICAg IHJldHVybjsKKyAgICB9CisKKyAgICBjb2xvX3dyaXRlX3N2bV9yZXN1bWVkKGVnYywgY3Jjcyk7 CisgICAgcmV0dXJuOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9h c3luY19jYWxsYmFja19kb25lKGVnYywgc2hzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29sb193 cml0ZV9zdm1fcmVzdW1lZChsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcykK K3sKKyAgICBsaWJ4bF9zcl9jaGVja3BvaW50X3N0YXRlIHNyY3MgPSB7IC5pZCA9IENIRUNLUE9J TlRfU1ZNX1JFU1VNRUQgfTsKKworICAgIGNyY3MtPmNhbGxiYWNrID0gTlVMTDsKKyAgICBjcmNz LT5zd3MuY2hlY2twb2ludF9jYWxsYmFjayA9IGNvbG9fY29tbW9uX3dyaXRlX3N0cmVhbV9kb25l OworICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfY2hlY2twb2ludF9zdGF0ZShlZ2MsICZjcmNzLT5z d3MsICZzcmNzKTsKK30KKworc3RhdGljIHZvaWQgY29sb19lbmFibGVfbG9nZGlydHlfZG9uZShs aWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp YnhsX19sb2dkaXJ0eV9zd2l0Y2ggKmxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHJjKQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9z dGF0ZSAqY3JjcyA9IENPTlRBSU5FUl9PRihsZHMsICpjcmNzLCBsZHMpOworCisgICAgLyogQ29u dmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNvbnN0 IGNycyA9IGNyY3MtPmNyczsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChyYykgeworICAgICAg ICAvKgorICAgICAgICAgKiBsb2ctZGlydHkgYWxyZWFkeSBlbmFibGVkPyBUaGVyZSdzIG5vIHRl c3Qgb3AsCisgICAgICAgICAqIHNvIGF0dGVtcHQgdG8gZGlzYWJsZSB0aGVuIHJlZW5hYmxlIGl0 CisgICAgICAgICAqLworICAgICAgICBsZHMtPmNhbGxiYWNrID0gY29sb19yZWVuYWJsZV9sb2dk aXJ0eTsKKyAgICAgICAgY29sb19kaXNhYmxlX2xvZ2RpcnR5KGNycywgZWdjKTsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIGNvbG9fc2V0dXBfY2hlY2twb2ludF9kZXZpY2VzKGVnYywg Y3JzKTsKK30KKworc3RhdGljIHZvaWQgY29sb19yZWVuYWJsZV9sb2dkaXJ0eShsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19sb2dkaXJ0 eV9zd2l0Y2ggKmxkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJj KQoreworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9IENP TlRBSU5FUl9PRihsZHMsICpjcmNzLCBsZHMpOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0 YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworCisgICAgLyog Q29udmVuaWVuY2UgYWxpYXNlcyAqLworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNv bnN0IGNycyA9IGNyY3MtPmNyczsKKyAgICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKmNvbnN0 IHNocyA9ICZkY3MtPnNycy5zaHM7CisKKyAgICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAg ICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IGVuYWJsZSBsb2dkaXJ0eSIpOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICBsZHMtPmNhbGxiYWNrID0gY29sb19yZWVuYWJsZV9sb2dkaXJ0 eV9kb25lOworICAgIGNvbG9fZW5hYmxlX2xvZ2RpcnR5KGNycywgZWdjKTsKKworICAgIHJldHVy bjsKKworb3V0OgorICAgIGxpYnhsX194Y19kb21haW5fc2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJh Y2tfZG9uZShlZ2MsIHNocywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fcmVlbmFibGVfbG9n ZGlydHlfZG9uZShsaWJ4bF9fZWdjICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfX2xvZ2RpcnR5X3N3aXRjaCAqbGRzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBsaWJ4bF9fY29sb19yZXN0 b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBDT05UQUlORVJfT0YobGRzLCAqY3JjcywgbGRz KTsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNy Y3MtPmNycywgKmRjcywgY3JzKTsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFzZXMgKi8KKyAg ICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKmNvbnN0IHNocyA9ICZkY3MtPnNycy5zaHM7CisK KyAgICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90 IGVuYWJsZSBsb2dkaXJ0eSIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBjb2xv X3NldHVwX2NoZWNrcG9pbnRfZGV2aWNlcyhlZ2MsIGNyY3MtPmNycyk7CisKKyAgICByZXR1cm47 CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNr X2RvbmUoZWdjLCBzaHMsIDApOworfQorCisvKgorICogV2UgY2Fubm90IHNldHVwIGNoZWNrcG9p bnQgZGV2aWNlcyBpbiBsaWJ4bF9fY29sb19yZXN0b3JlX3NldHVwKCksCisgKiBiZWNhdXNlIHRo ZSBndWVzdCBpcyBub3QgcmVhZHkuCisgKi8KK3N0YXRpYyB2b2lkIGNvbG9fc2V0dXBfY2hlY2tw b2ludF9kZXZpY2VzKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycykKK3sKKyAgICBs aWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNycywgKmRjcywg Y3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPSBj cnMtPmNyY3M7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2No ZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzID0gJmRjcy0+Y2RzOworICAgIGxpYnhsX19zYXZl X2hlbHBlcl9zdGF0ZSAqY29uc3Qgc2hzID0gJmRjcy0+c3JzLnNoczsKKworICAgIFNUQVRFX0FP X0dDKGNycy0+YW8pOworCisgICAgLyogVE9ETzogZGlzay9uaWMgc3VwcG9ydCAqLworICAgIGNk cy0+ZGV2aWNlX2tpbmRfZmxhZ3MgPSAwOworICAgIGNkcy0+Y2FsbGJhY2sgPSBjb2xvX3Jlc3Rv cmVfc2V0dXBfY2RzX2RvbmU7CisgICAgY2RzLT5hbyA9IGFvOworICAgIGNkcy0+ZG9taWQgPSBj cnMtPmRvbWlkOworICAgIGNkcy0+b3BzID0gY29sb19yZXN0b3JlX29wczsKKworICAgIGlmIChp bml0X2RldmljZV9zdWJraW5kKGNkcykpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgY3Jjcy0+ dGVhcmRvd25fZGV2aWNlcyA9IDE7CisKKyAgICBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3Nl dHVwKGVnYywgY2RzKTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWlu X3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNrX2RvbmUoZWdjLCBzaHMsIDApOworfQorCitzdGF0 aWMgdm9pZCBjb2xvX3Jlc3RvcmVfc2V0dXBfY2RzX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jaGVja3BvaW50X2Rl dmljZXNfc3RhdGUgKmNkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgcmMpCit7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzID0gY2RzLT5j b25jcmV0ZV9kYXRhOworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05U QUlORVJfT0YoY3JzLCAqZGNzLCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2tw b2ludF9zdGF0ZSAqY3JjcyA9IGNycy0+Y3JjczsKKworICAgIC8qIENvbnZlbmllbmNlIGFsaWFz ZXMgKi8KKyAgICBsaWJ4bF9fc2F2ZV9oZWxwZXJfc3RhdGUgKmNvbnN0IHNocyA9ICZkY3MtPnNy cy5zaHM7CisKKyAgICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9S LCAiQ09MTzogZmFpbGVkIHRvIHNldHVwIGRldmljZSBmb3IgZ3Vlc3Qgd2l0aCBkb21pZCAldSIs CisgICAgICAgICAgICBjZHMtPmRvbWlkKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgY29sb19zZW5kX3N2bV9yZWFkeShlZ2MsIGNyY3MpOworCisgICAgcmV0dXJuOworCitvdXQ6 CisgICAgbGlieGxfX3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19kb25lKGVn Yywgc2hzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29sb191bnBhdXNlX3N2bShsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVf Y2hlY2twb2ludF9zdGF0ZSAqY3JjcykKK3sKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0 ZSAqZGNzID0gQ09OVEFJTkVSX09GKGNyY3MtPmNycywgKmRjcywgY3JzKTsKKyAgICBpbnQgcmM7 CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgY29uc3QgdWludDMyX3QgZG9t aWQgPSBjcmNzLT5jcnMtPmRvbWlkOworICAgIGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqY29u c3Qgc2hzID0gJmRjcy0+c3JzLnNoczsKKworICAgIEVHQ19HQzsKKworICAgIC8qIFdlIGhhdmUg ZW5hYmxlZCBzZWNvbmRhcnkgdm0ncyBsb2dkaXJ0eSwgc28gd2UgY2FuIHVucGF1c2UgaXQgbm93 ICovCisgICAgcmMgPSBsaWJ4bF9kb21haW5fdW5wYXVzZShDVFgsIGRvbWlkKTsKKyAgICBpZiAo cmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiY2Fubm90IHVucGF1c2Ugc2Vjb25kYXJ5IHZtIik7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGNvbG9fd3JpdGVfc3ZtX3Jlc3VtZWQo ZWdjLCBjcmNzKTsKKworICAgIHJldHVybjsKKworb3V0OgorICAgIGxpYnhsX194Y19kb21haW5f c2F2ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tfZG9uZShlZ2MsIHNocywgMCk7Cit9CisKKy8qID09 PT09PT09PT09PT09PT09PT09PSBjb2xvOiB3YWl0IG5ldyBjaGVja3BvaW50ID09PT09PT09PT09 PT09PT09PT09PSAqLworCitzdGF0aWMgdm9pZCBjb2xvX3Jlc3RvcmVfY29tbWl0X2NiKGxpYnhs X19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2No ZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcmMpOworc3RhdGljIHZvaWQgY29sb19zdHJlYW1fcmVhZF9kb25lKGxpYnhs X19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fY29s b19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHJlYWxfc2l6ZSk7CisKK3N0YXRpYyB2b2lkIGxpYnhsX19jb2xvX3Jl c3RvcmVfZG9tYWluX3dhaXRfY2hlY2twb2ludF9jYWxsYmFjayh2b2lkICpkYXRhKQoreworICAg IGxpYnhsX19zYXZlX2hlbHBlcl9zdGF0ZSAqc2hzID0gZGF0YTsKKyAgICBsaWJ4bF9fc3RyZWFt X3JlYWRfc3RhdGUgKnNycyA9IENPTlRBSU5FUl9PRihzaHMsICpzcnMsIHNocyk7CisgICAgbGli eGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihzcnMsICpkY3MsIHNy cyk7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2NoZWNrcG9p bnRfZGV2aWNlc19zdGF0ZSAqY2RzID0gJmRjcy0+Y2RzOworCisgICAgY2RzLT5jYWxsYmFjayA9 IGNvbG9fcmVzdG9yZV9jb21taXRfY2I7CisgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19j b21taXQoc2hzLT5lZ2MsIGNkcyk7Cit9CisKK3N0YXRpYyB2b2lkIGNvbG9fcmVzdG9yZV9jb21t aXRfY2IobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fY2hlY2twb2ludF9kZXZpY2VzX3N0YXRlICpjZHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0 YXRlICpjcnMgPSBjZHMtPmNvbmNyZXRlX2RhdGE7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVf c3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcnMsICpkY3MsIGNycyk7CisgICAgbGlieGxfX2Nv bG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzID0gY3JzLT5jcmNzOworCisgICAgRUdD X0dDOworCisgICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJPUiwgImNvbW1pdCBmYWlscyIp OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBjcmNzLT5jYWxsYmFjayA9IGNvbG9f c3RyZWFtX3JlYWRfZG9uZTsKKyAgICBkY3MtPnNycy5jaGVja3BvaW50X2NhbGxiYWNrID0gY29s b19jb21tb25fcmVhZF9zdHJlYW1fZG9uZTsKKyAgICBsaWJ4bF9fc3RyZWFtX3JlYWRfY2hlY2tw b2ludF9zdGF0ZShlZ2MsICZkY3MtPnNycyk7CisKKyAgICByZXR1cm47CisKK291dDoKKyAgICBs aWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNrX2RvbmUoZWdjLCAmZGNz LT5zcnMuc2hzLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29sb19zdHJlYW1fcmVhZF9kb25lKGxp YnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f Y29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGlkKQoreworICAgIGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRl ICpkY3MgPSBDT05UQUlORVJfT0YoY3Jjcy0+Y3JzLCAqZGNzLCBjcnMpOworICAgIGludCBvayA9 IDA7CisKKyAgICBFR0NfR0M7CisKKyAgICBpZiAoaWQgIT0gQ0hFQ0tQT0lOVF9ORVcpIHsKKyAg ICAgICAgTE9HKEVSUk9SLCAiaW52YWxpZCBzZWN0aW9uOiAlZCIsIGlkKTsKKyAgICAgICAgZ290 byBvdXQ7CisgICAgfQorCisgICAgb2sgPSAxOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFp bl9zYXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19kb25lKGVnYywgJmRjcy0+c3JzLnNocywgb2sp OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT0gY29sbzogc3VzcGVuZCBzZWNvbmRhcnkg dm0gPT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qCisgKiBEbyB0aGUgZm9sbG93aW5nIHRo aW5ncyB3aGVuIHJlc3VtaW5nIHNlY29uZGFyeSB2bToKKyAqICAxLiBzdXNwZW5kIHNlY29uZGFy eSB2bQorICogIDIuIHNlbmQgQ0hFQ0tQT0lOVF9TVk1fU1VTUEVOREVECisgKi8KK3N0YXRpYyB2 b2lkIGNvbG9fc3VzcGVuZF92bV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19kb21haW5fc3VzcGVuZF9zdGF0ZSAqZHNwcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvayk7CitzdGF0aWMgdm9pZCBjb2xv X3Jlc3RvcmVfcG9zdHN1c3BlbmRfY2IobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3RhdGUg KmNkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpOwor CitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX2RvbWFpbl9zdXNwZW5kX2NhbGxiYWNr KHZvaWQgKmRhdGEpCit7CisgICAgbGlieGxfX3NhdmVfaGVscGVyX3N0YXRlICpzaHMgPSBkYXRh OworICAgIGxpYnhsX19zdHJlYW1fcmVhZF9zdGF0ZSAqc3JzID0gQ09OVEFJTkVSX09GKHNocywg KnNycywgc2hzKTsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJ TkVSX09GKHNycywgKmRjcywgc3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9p bnRfc3RhdGUgKmNyY3MgPSBkY3MtPmNycy5jcmNzOworCisgICAgU1RBVEVfQU9fR0MoZGNzLT5h byk7CisKKyAgICAvKiBDb252ZW5pZW5jZSBhbGlhc2VzICovCisgICAgbGlieGxfX2RvbWFpbl9z dXNwZW5kX3N0YXRlICpjb25zdCBkc3BzID0gJmNyY3MtPmRzcHM7CisKKyAgICAvKiBzdXNwZW5k IHNlY29uZGFyeSB2bSAqLworICAgIGRzcHMtPmNhbGxiYWNrX2NvbW1vbl9kb25lID0gY29sb19z dXNwZW5kX3ZtX2RvbmU7CisKKyAgICBsaWJ4bF9fZG9tYWluX3N1c3BlbmQoc2hzLT5lZ2MsIGRz cHMpOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3N1c3BlbmRfdm1fZG9uZShsaWJ4bF9fZWdjICpl Z2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZG9tYWluX3N1c3Bl bmRfc3RhdGUgKmRzcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMp Cit7CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9jaGVja3BvaW50X3N0YXRlICpjcmNzID0gQ09O VEFJTkVSX09GKGRzcHMsICpjcmNzLCBkc3BzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3N0 YXRlICpjcnMgPSBjcmNzLT5jcnM7CisgICAgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgKmRj cyA9IENPTlRBSU5FUl9PRihjcnMsICpkY3MsIGNycyk7CisKKyAgICAvKiBDb252ZW5pZW5jZSBh bGlhc2VzICovCisgICAgbGlieGxfX2NoZWNrcG9pbnRfZGV2aWNlc19zdGF0ZSAqY2RzID0gJmRj cy0+Y2RzOworCisgICAgRUdDX0dDOworCisgICAgaWYgKHJjKSB7CisgICAgICAgIExPRyhFUlJP UiwgImNhbm5vdCBzdXNwZW5kIHNlY29uZGFyeSB2bSIpOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBjcmNzLT5zdGF0dXMgPSBMSUJYTF9DT0xPX1NVU1BFTkRFRDsKKworICAgIGNk cy0+Y2FsbGJhY2sgPSBjb2xvX3Jlc3RvcmVfcG9zdHN1c3BlbmRfY2I7CisgICAgbGlieGxfX2No ZWNrcG9pbnRfZGV2aWNlc19wb3N0c3VzcGVuZChlZ2MsIGNkcyk7CisKKyAgICByZXR1cm47CisK K291dDoKKyAgICBsaWJ4bF9feGNfZG9tYWluX3NhdmVyZXN0b3JlX2FzeW5jX2NhbGxiYWNrX2Rv bmUoZWdjLCAmZGNzLT5zcnMuc2hzLCAhcmMpOworfQorCitzdGF0aWMgdm9pZCBjb2xvX3Jlc3Rv cmVfcG9zdHN1c3BlbmRfY2IobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3RhdGUgKmNkcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAg bGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAqY3JzID0gY2RzLT5jb25jcmV0ZV9kYXRhOworICAg IGxpYnhsX19kb21haW5fY3JlYXRlX3N0YXRlICpkY3MgPSBDT05UQUlORVJfT0YoY3JzLCAqZGNz LCBjcnMpOworICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfY2hlY2twb2ludF9zdGF0ZSAqY3JjcyA9 IGNycy0+Y3JjczsKKyAgICBsaWJ4bF9zcl9jaGVja3BvaW50X3N0YXRlIHNyY3MgPSB7IC5pZCA9 IENIRUNLUE9JTlRfU1ZNX1NVU1BFTkRFRCB9OworCisgICAgRUdDX0dDOworCisgICAgaWYgKHJj KSB7CisgICAgICAgIExPRyhFUlJPUiwgInBvc3RzdXNwZW5kIGZhaWxzIik7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKworICAgIGNyY3MtPmNhbGxiYWNrID0gTlVMTDsKKyAgICBjcmNzLT5z d3MuY2hlY2twb2ludF9jYWxsYmFjayA9IGNvbG9fY29tbW9uX3dyaXRlX3N0cmVhbV9kb25lOwor ICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfY2hlY2twb2ludF9zdGF0ZShlZ2MsICZjcmNzLT5zd3Ms ICZzcmNzKTsKKworICAgIHJldHVybjsKKworb3V0OgorICAgIGxpYnhsX194Y19kb21haW5fc2F2 ZXJlc3RvcmVfYXN5bmNfY2FsbGJhY2tfZG9uZShlZ2MsICZkY3MtPnNycy5zaHMsICFyYyk7Cit9 CisKKy8qID09PT09PT09PT09PT09PT09PT09PSBjb2xvOiBjb21tb24gY2FsbGJhY2sgPT09PT09 PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyB2b2lkIGNvbG9fY29tbW9uX3dyaXRlX3N0cmVh bV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19zdHJlYW1fd3JpdGVfc3RhdGUgKnN0cmVhbSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBsaWJ4bF9fY29s b19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3MgPQorICAgICAgICBDT05UQUlORVJfT0Yo c3RyZWFtLCAqY3Jjcywgc3dzKTsKKyAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNz ID0gQ09OVEFJTkVSX09GKGNyY3MtPmNycywgKmRjcywgY3JzKTsKKyAgICBpbnQgb2s7CisKKyAg ICBFR0NfR0M7CisKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIC8qIFRPRE86IGl0IG1heSBi ZSBhIGludGVybmFsIGVycm9yLCBidXQgd2UgZG9uJ3Qga25vdyAqLworICAgICAgICBMT0coRVJS T1IsICJzZW5kaW5nIGRhdGEgZmFpbHMiKTsKKyAgICAgICAgb2sgPSAyOworICAgICAgICBnb3Rv IG91dDsKKyAgICB9CisKKyAgICBpZiAoIWNyY3MtPmNhbGxiYWNrKSB7CisgICAgICAgIC8qIEV2 ZXJ5dGhpbnMgaXMgT0sgKi8KKyAgICAgICAgb2sgPSAxOworICAgICAgICBnb3RvIG91dDsKKyAg ICB9CisKKyAgICBjcmNzLT5jYWxsYmFjayhlZ2MsIGNyY3MsIDApOworCisgICAgcmV0dXJuOwor CitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9hc3luY19jYWxsYmFja19k b25lKGVnYywgJmRjcy0+c3JzLnNocywgb2spOworfQorCitzdGF0aWMgdm9pZCBjb2xvX2NvbW1v bl9yZWFkX3N0cmVhbV9kb25lKGxpYnhsX19lZ2MgKmVnYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlICpzdHJlYW0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBs aWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzID0gQ09OVEFJTkVSX09GKHN0cmVhbSwgKmRj cywgc3JzKTsKKyAgICBsaWJ4bF9fY29sb19yZXN0b3JlX2NoZWNrcG9pbnRfc3RhdGUgKmNyY3Mg PSBkY3MtPmNycy5jcmNzOworICAgIGludCBvazsKKworICAgIEVHQ19HQzsKKworICAgIGlmIChy YyA8IDApIHsKKyAgICAgICAgLyogVE9ETzogaXQgbWF5IGJlIGEgaW50ZXJuYWwgZXJyb3IsIGJ1 dCB3ZSBkb24ndCBrbm93ICovCisgICAgICAgIExPRyhFUlJPUiwgInJlYWRpbmcgZGF0YSBmYWls cyIpOworICAgICAgICBvayA9IDI7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlm ICghY3Jjcy0+Y2FsbGJhY2spIHsKKyAgICAgICAgLyogRXZlcnl0aGlucyBpcyBPSyAqLworICAg ICAgICBvayA9IDE7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIHJjIGNvbnRh aW5zIHRoZSBpZCAqLworICAgIGNyY3MtPmNhbGxiYWNrKGVnYywgY3JjcywgcmMpOworCisgICAg cmV0dXJuOworCitvdXQ6CisgICAgbGlieGxfX3hjX2RvbWFpbl9zYXZlcmVzdG9yZV9hc3luY19j YWxsYmFja19kb25lKGVnYywgJmRjcy0+c3JzLnNocywgb2spOworfQpkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwvbGlieGxfY3JlYXRlLmMgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwppbmRl eCA0ZDJiOTVjLi5jNThkZDdlIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUu YworKysgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwpAQCAtOTg1LDYgKzk4NSwyMyBAQCBz dGF0aWMgdm9pZCBkb21jcmVhdGVfY29uc29sZV9hdmFpbGFibGUobGlieGxfX2VnYyAqZWdjLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjcy0+YW9wX2NvbnNvbGVf aG93LmZvcl9ldmVudCkpOwogfQogCitzdGF0aWMgdm9pZCBsaWJ4bF9fY29sb19yZXN0b3JlX3Nl dHVwX2RvbmUobGlieGxfX2VnYyAqZWdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX19jb2xvX3Jlc3RvcmVfc3RhdGUgKmNycywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgbGlieGxfX2Rv bWFpbl9jcmVhdGVfc3RhdGUgKmRjcyA9IENPTlRBSU5FUl9PRihjcnMsICpkY3MsIGNycyk7CisK KyAgICBFR0NfR0M7CisKKyAgICBpZiAocmMpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiY29sbyBy ZXN0b3JlIHNldHVwIGZhaWxzOiAlZCIsIHJjKTsKKyAgICAgICAgZG9tY3JlYXRlX3N0cmVhbV9k b25lKGVnYywgJmRjcy0+c3JzLCByYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBs aWJ4bF9fc3RyZWFtX3JlYWRfc3RhcnQoZWdjLCAmZGNzLT5zcnMpOworfQorCiBzdGF0aWMgdm9p ZCBkb21jcmVhdGVfYm9vdGxvYWRlcl9kb25lKGxpYnhsX19lZ2MgKmVnYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2Jvb3Rsb2FkZXJfc3RhdGUgKmJsLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCkBAIC05OTgsNiAr MTAxNSw4IEBAIHN0YXRpYyB2b2lkIGRvbWNyZWF0ZV9ib290bG9hZGVyX2RvbmUobGlieGxfX2Vn YyAqZWdjLAogICAgIGNvbnN0IGludCByZXN0b3JlX2ZkID0gZGNzLT5yZXN0b3JlX2ZkOwogICAg IGxpYnhsX19kb21haW5fYnVpbGRfc3RhdGUgKmNvbnN0IHN0YXRlID0gJmRjcy0+YnVpbGRfc3Rh dGU7CiAgICAgY29uc3QgaW50IGNoZWNrcG9pbnRlZF9zdHJlYW0gPSBkY3MtPnJlc3RvcmVfcGFy YW1zLmNoZWNrcG9pbnRlZF9zdHJlYW07CisgICAgbGlieGxfX2NvbG9fcmVzdG9yZV9zdGF0ZSAq Y29uc3QgY3JzID0gJmRjcy0+Y3JzOworICAgIGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpjb25z dCBpbmZvID0gJmRfY29uZmlnLT5iX2luZm87CiAKICAgICBpZiAocmMpIHsKICAgICAgICAgZG9t Y3JlYXRlX3JlYnVpbGRfZG9uZShlZ2MsIGRjcywgcmMpOwpAQCAtMTAyNiw2ICsxMDQ1LDIyIEBA IHN0YXRpYyB2b2lkIGRvbWNyZWF0ZV9ib290bG9hZGVyX2RvbmUobGlieGxfX2VnYyAqZWdjLAog CiAgICAgLyogUmVzdG9yZSAqLwogCisgICAgLyogQ09MTyBvbmx5IHN1cHBvcnRzIEhWTSBub3cg YmVjYXVzZSBpdCBkb2VzIG5vdCB3b3JrIHZlcnkKKyAgICAgKiB3ZWxsIHdpdGggcHYgZHJpdmVy czoKKyAgICAgKiAxLiBXZSBuZWVkIHRvIHJlc3VtZSB2bSBpbiB0aGUgc2xvdyBwYXRoLiBJbiB0 aGlzIGNhc2Ugd2UKKyAgICAgKiAgICBuZWVkIHRvIGRpc2Nvbm5lY3QvcmVjb25uZWN0IGJhY2tl bmQgYW5kIGZyb250ZW5kLiBJdAorICAgICAqICAgIHdpbGwgdGFrZSB0b28gbXVjaCB0aW1lIGFu ZCB0aGUgcGVyZm9ybWFuY2UgaXMgdmVyeSBzbG93LgorICAgICAqIDIuIFBWIGRpc2sgY2Fubm90 IHJldXNlIGJsb2NrIHJlcGxpY2F0aW9uIHRoYXQgaXMgaW1wbGVtZW50ZWQKKyAgICAgKiAgICBp biBRRU1VLgorICAgICAqLworICAgIGlmIChpbmZvLT50eXBlICE9IExJQlhMX0RPTUFJTl9UWVBF X0hWTSAmJgorICAgICAgICBjaGVja3BvaW50ZWRfc3RyZWFtID09IExJQlhMX0NIRUNLUE9JTlRF RF9TVFJFQU1fQ09MTykgeworICAgICAgICBMT0coRVJST1IsICJDT0xPIG9ubHkgc3VwcG9ydHMg SFZNLCB1bmFibGUgdG8gcmVzdG9yZSBkb21haW4gJWQiLAorICAgICAgICAgICAgZG9taWQpOwor ICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKwogICAg IHJjID0gbGlieGxfX2J1aWxkX3ByZShnYywgZG9taWQsIGRfY29uZmlnLCBzdGF0ZSk7CiAgICAg aWYgKHJjKQogICAgICAgICBnb3RvIG91dDsKQEAgLTEwMzksNiArMTA3NCwxNiBAQCBzdGF0aWMg dm9pZCBkb21jcmVhdGVfYm9vdGxvYWRlcl9kb25lKGxpYnhsX19lZ2MgKmVnYywKIAogICAgIGlm IChyZXN0b3JlX2ZkID49IDApIHsKICAgICAgICAgc3dpdGNoIChjaGVja3BvaW50ZWRfc3RyZWFt KSB7CisgICAgICAgIGNhc2UgTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xPOgorICAgICAg ICAgICAgLyogY29sbyByZXN0b3JlIHNldHVwICovCisgICAgICAgICAgICBjcnMtPmFvID0gYW87 CisgICAgICAgICAgICBjcnMtPmRvbWlkID0gZG9taWQ7CisgICAgICAgICAgICBjcnMtPnNlbmRf YmFja19mZCA9IGRjcy0+c2VuZF9iYWNrX2ZkOworICAgICAgICAgICAgY3JzLT5yZWN2X2ZkID0g cmVzdG9yZV9mZDsKKyAgICAgICAgICAgIGNycy0+aHZtID0gKGluZm8tPnR5cGUgPT0gTElCWExf RE9NQUlOX1RZUEVfSFZNKTsKKyAgICAgICAgICAgIGNycy0+Y2FsbGJhY2sgPSBsaWJ4bF9fY29s b19yZXN0b3JlX3NldHVwX2RvbmU7CisgICAgICAgICAgICBsaWJ4bF9fY29sb19yZXN0b3JlX3Nl dHVwKGVnYywgY3JzKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIExJQlhMX0NI RUNLUE9JTlRFRF9TVFJFQU1fUkVNVVM6CiAgICAgICAgICAgICBsaWJ4bF9fcmVtdXNfcmVzdG9y ZV9zZXR1cChlZ2MsIGRjcyk7CiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KZGlmZiAt LWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggYi90b29scy9saWJ4bC9saWJ4bF9p bnRlcm5hbC5oCmluZGV4IDFmYWZiYTguLjgzYWMyMGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhs L2xpYnhsX2ludGVybmFsLmgKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaApAQCAt ODcsNiArODcsOCBAQAogI2luY2x1ZGUgIl9saWJ4bF90eXBlc19pbnRlcm5hbC5oIgogI2luY2x1 ZGUgIl9saWJ4bF90eXBlc19pbnRlcm5hbF9qc29uLmgiCiAKKyNpbmNsdWRlICJsaWJ4bF9jb2xv LmgiCisKICNkZWZpbmUgTElCWExfSU5JVF9USU1FT1VUIDEwCiAjZGVmaW5lIExJQlhMX0RFU1RS T1lfVElNRU9VVCAxMAogI2RlZmluZSBMSUJYTF9IT1RQTFVHX1RJTUVPVVQgNDAKQEAgLTM0MjIs MTIgKzM0MjQsNiBAQCBfaGlkZGVuIGludCBsaWJ4bF9fZGVzdHJveV9xZGlza19iYWNrZW5kKGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkKTsKIAogLyotLS0tLSBEb21haW4gY3JlYXRpb24g LS0tLS0qLwogCi10eXBlZGVmIHN0cnVjdCBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSBsaWJ4 bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZTsKLQotdHlwZWRlZiB2b2lkIGxpYnhsX19kb21haW5fY3Jl YXRlX2NiKGxpYnhsX19lZ2MgKmVnYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSosCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHJjLCB1aW50MzJfdCBkb21pZCk7Ci0KIC8qIFN0YXRlIGZvciBt YW5pcHVsYXRpbmcgYSBsaWJ4bCBtaWdyYXRpb24gdjIgc3RyZWFtICovCiB0eXBlZGVmIHN0cnVj dCBsaWJ4bF9fc3RyZWFtX3JlYWRfc3RhdGUgbGlieGxfX3N0cmVhbV9yZWFkX3N0YXRlOwogCkBA IC0zNTEwLDYgKzM1MDYsOCBAQCBzdHJ1Y3QgbGlieGxfX2RvbWFpbl9jcmVhdGVfc3RhdGUgewog ICAgIC8qIHByaXZhdGUgdG8gZG9tYWluX2NyZWF0ZSAqLwogICAgIGludCBndWVzdF9kb21pZDsK ICAgICBsaWJ4bF9fZG9tYWluX2J1aWxkX3N0YXRlIGJ1aWxkX3N0YXRlOworICAgIGxpYnhsX19j b2xvX3Jlc3RvcmVfc3RhdGUgY3JzOworICAgIGxpYnhsX19jaGVja3BvaW50X2RldmljZXNfc3Rh dGUgY2RzOwogICAgIGxpYnhsX19ib290bG9hZGVyX3N0YXRlIGJsOwogICAgIGxpYnhsX19zdHVi X2RtX3NwYXduX3N0YXRlIGRtc3M7CiAgICAgICAgIC8qIElmIHdlJ3JlIG5vdCBkb2luZyBzdHVi ZG9tLCB3ZSB1c2Ugb25seSBkbXNzLmRtLApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxf c2F2ZV9jYWxsb3V0LmMgYi90b29scy9saWJ4bC9saWJ4bF9zYXZlX2NhbGxvdXQuYwppbmRleCBm MTVjMjM1Li4yZTYyNjdkIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9zYXZlX2NhbGxv dXQuYworKysgYi90b29scy9saWJ4bC9saWJ4bF9zYXZlX2NhbGxvdXQuYwpAQCAtNjgsNyArNjgs MTEgQEAgdm9pZCBsaWJ4bF9feGNfZG9tYWluX3Jlc3RvcmUobGlieGxfX2VnYyAqZWdjLCBsaWJ4 bF9fZG9tYWluX2NyZWF0ZV9zdGF0ZSAqZGNzLAogICAgIHNocy0+YW8gPSBhbzsKICAgICBzaHMt PmRvbWlkID0gZG9taWQ7CiAgICAgc2hzLT5yZWN2X2NhbGxiYWNrID0gbGlieGxfX3NybV9jYWxs b3V0X3JlY2VpdmVkX3Jlc3RvcmU7Ci0gICAgc2hzLT5jb21wbGV0aW9uX2NhbGxiYWNrID0gbGli eGxfX3hjX2RvbWFpbl9yZXN0b3JlX2RvbmU7CisgICAgaWYgKGRjcy0+cmVzdG9yZV9wYXJhbXMu Y2hlY2twb2ludGVkX3N0cmVhbSA9PQorICAgICAgICBMSUJYTF9DSEVDS1BPSU5URURfU1RSRUFN X0NPTE8pCisgICAgICAgIHNocy0+Y29tcGxldGlvbl9jYWxsYmFjayA9IGxpYnhsX19jb2xvX3Jl c3RvcmVfdGVhcmRvd247CisgICAgZWxzZQorICAgICAgICBzaHMtPmNvbXBsZXRpb25fY2FsbGJh Y2sgPSBsaWJ4bF9feGNfZG9tYWluX3Jlc3RvcmVfZG9uZTsKICAgICBzaHMtPmNhbGxlcl9zdGF0 ZSA9IGRjczsKICAgICBzaHMtPm5lZWRfcmVzdWx0cyA9IDE7CiAKZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL2xpYnhsX3NhdmVfbXNnc19nZW4ucGwgYi90b29scy9saWJ4bC9saWJ4bF9zYXZlX21z Z3NfZ2VuLnBsCmluZGV4IGQ2ZDI5NjcuLmNiYjZjYTEgMTAwNzU1Ci0tLSBhL3Rvb2xzL2xpYnhs L2xpYnhsX3NhdmVfbXNnc19nZW4ucGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfc2F2ZV9tc2dz X2dlbi5wbApAQCAtMjMsMTQgKzIzLDE1IEBAIG91ciBAbXNncyA9ICgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVFJJTkcgZG9pbmdfd2hhdCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5zaWduZWQg bG9uZycsICdkb25lJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICd1bnNpZ25lZCBsb25nJywgJ3RvdGFsJ10gXSwKLSAgICBbICAzLCAnc2N4QScsICAg InN1c3BlbmQiLCBbXSBdLAotICAgIFsgIDQsICdzY3hBJywgICAicG9zdGNvcHkiLCBbXSBdLAor ICAgIFsgIDMsICdzcmN4QScsICAic3VzcGVuZCIsIFtdIF0sCisgICAgWyAgNCwgJ3NyY3hBJywg ICJwb3N0Y29weSIsIFtdIF0sCiAgICAgWyAgNSwgJ3NyY3hBJywgICJjaGVja3BvaW50IiwgW10g XSwKLSAgICBbICA2LCAnc2N4QScsICAgInN3aXRjaF9xZW11X2xvZ2RpcnR5IiwgIFtxdyhpbnQg ZG9taWQKKyAgICBbICA2LCAncmN4QScsICAgIndhaXRfY2hlY2twb2ludCIsIFtdIF0sCisgICAg WyAgNywgJ3NjeEEnLCAgICJzd2l0Y2hfcWVtdV9sb2dkaXJ0eSIsICBbcXcoaW50IGRvbWlkCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5h YmxlKV0gXSwKLSAgICBbICA3LCAncicsICAgICAgInJlc3RvcmVfcmVzdWx0cyIsICAgICAgIFsn dW5zaWduZWQgbG9uZycsICdzdG9yZV9tZm4nLAorICAgIFsgIDgsICdyJywgICAgICAicmVzdG9y ZV9yZXN1bHRzIiwgICAgICAgWyd1bnNpZ25lZCBsb25nJywgJ3N0b3JlX21mbicsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Vuc2lnbmVkIGxvbmcnLCAn Y29uc29sZV9tZm4nXSBdLAotICAgIFsgIDgsICdzclcnLCAgICAiY29tcGxldGUiLCAgICAgICAg ICAgICAgW3F3KGludCByZXR2YWwKKyAgICBbICA5LCAnc3JXJywgICAgImNvbXBsZXRlIiwgICAg ICAgICAgICAgIFtxdyhpbnQgcmV0dmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGVycm5vdmFsKV0gXSwKICk7CiAKZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhsL2xpYnhsX3N0cmVhbV9yZWFkLmMgYi90b29scy9saWJ4bC9saWJ4bF9zdHJlYW1f cmVhZC5jCmluZGV4IDMwMmFlNTMuLjk2NTkwNTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xp YnhsX3N0cmVhbV9yZWFkLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfc3RyZWFtX3JlYWQuYwpA QCAtODUwLDYgKzg1MCwxOCBAQCB2b2lkIGxpYnhsX194Y19kb21haW5fcmVzdG9yZV9kb25lKGxp YnhsX19lZ2MgKmVnYywgdm9pZCAqZGNzX3ZvaWQsCiAgICAgICovCiAgICAgaWYgKGxpYnhsX19z dHJlYW1fcmVhZF9pbnVzZShzdHJlYW0pKSB7CiAgICAgICAgIHN3aXRjaCAoY2hlY2twb2ludGVk X3N0cmVhbSkgeworICAgICAgICBjYXNlIExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fQ09MTzoK KyAgICAgICAgICAgIGlmIChzdHJlYW0tPmNvbXBsZXRpb25fY2FsbGJhY2spIHsKKyAgICAgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlc3RvcmUsIGp1c3QgYnVpbGQgdGhlIHNl Y29uZGFyeSB2bSwgZG9uJ3QgY2xvc2UKKyAgICAgICAgICAgICAgICAgKiB0aGUgc3RyZWFtCisg ICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3RyZWFtLT5jb21wbGV0aW9uX2Nh bGxiYWNrKGVnYywgc3RyZWFtLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgLyogZmFpbG92ZXIsIGp1c3QgY2xvc2UgdGhlIHN0cmVhbSAqLworICAgICAgICAgICAg ICAgIHN0cmVhbV9jb21wbGV0ZShlZ2MsIHN0cmVhbSwgMCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMSUJYTF9DSEVDS1BPSU5URURfU1RSRUFNX1JF TVVTOgogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEZhaWxvdmVyIGZyb20gcHJpbWFy eS4gRG9tYWluIHN0YXRlIGlzIGN1cnJlbnRseSBhdCBhCmRpZmYgLS1naXQgYS90b29scy9saWJ4 bC9saWJ4bF90eXBlcy5pZGwgYi90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKaW5kZXggNTli MTgzYy4uNDcxNzUxNyAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCisr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbApAQCAtMjMzLDYgKzIzMyw3IEBAIGxpYnhs X2hkdHlwZSA9IEVudW1lcmF0aW9uKCJoZHR5cGUiLCBbCiBsaWJ4bF9jaGVja3BvaW50ZWRfc3Ry ZWFtID0gRW51bWVyYXRpb24oImNoZWNrcG9pbnRlZF9zdHJlYW0iLCBbCiAgICAgKDAsICJOT05F IiksCiAgICAgKDEsICJSRU1VUyIpLAorICAgICgyLCAiQ09MTyIpLAogICAgIF0pCiAKICMKLS0g CjEuOS4zCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=