From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PULL 20/21] move xen-hvm.c to hw/i386/xen/ Date: Fri, 21 Apr 2017 13:15:01 -0700 Message-ID: <1492805702-19690-20-git-send-email-sstabellini@kernel.org> References: <1492805702-19690-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d1ey8-0000dC-Hv for xen-devel@lists.xenproject.org; Fri, 21 Apr 2017 20:15:53 +0000 In-Reply-To: <1492805702-19690-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: peter.maydell@linaro.org Cc: sstabellini@kernel.org, stefanha@gmail.com, qemu-devel@nongnu.org, Anthony Xu , stefanha@redhat.com, anthony.perard@citrix.com, xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org RnJvbTogQW50aG9ueSBYdSA8YW50aG9ueS54dUBpbnRlbC5jb20+Cgptb3ZlIHhlbi1odm0uYyB0 byBody9pMzg2L3hlbi8KClNpZ25lZC1vZmYgLWJ5OiBBbnRob255IFh1IDxhbnRob255Lnh1QGlu dGVsLmNvbT4KUmV2aWV3ZWQtYnk6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlAa2Vy bmVsLm9yZz4KLS0tCiBNYWtlZmlsZS50YXJnZXQgICAgICAgICAgIHwgICAgMyArLQogaHcvaTM4 Ni94ZW4vTWFrZWZpbGUub2JqcyB8ICAgIDIgKy0KIGh3L2kzODYveGVuL3RyYWNlLWV2ZW50cyAg fCAgIDExICsKIGh3L2kzODYveGVuL3hlbi1odm0uYyAgICAgfCAxNDI5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3R1YnMvTWFrZWZpbGUub2JqcyAgICAg ICB8ICAgIDEgKwogc3R1YnMveGVuLWh2bS5jICAgICAgICAgICB8ICAgNjMgKysKIHRyYWNlLWV2 ZW50cyAgICAgICAgICAgICAgfCAgIDExIC0KIHhlbi1odm0tc3R1Yi5jICAgICAgICAgICAgfCAg IDYzIC0tCiB4ZW4taHZtLmMgICAgICAgICAgICAgICAgIHwgMTQyOSAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDkgZmlsZXMgY2hhbmdlZCwgMTUwNiBpbnNl cnRpb25zKCspLCAxNTA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGh3L2kzODYv eGVuL3hlbi1odm0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN0dWJzL3hlbi1odm0uYwogZGVsZXRl IG1vZGUgMTAwNjQ0IHhlbi1odm0tc3R1Yi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgeGVuLWh2bS5j CgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudGFyZ2V0IGIvTWFrZWZpbGUudGFyZ2V0CmluZGV4IDQ4 YzAyN2YuLmQ1ZmYwYzcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnRhcmdldAorKysgYi9NYWtlZmls ZS50YXJnZXQKQEAgLTE1MCw4ICsxNTAsNyBAQCBvYmoteSArPSBtaWdyYXRpb24vcmFtLm8gbWln cmF0aW9uL3NhdmV2bS5vCiBMSUJTIDo9ICQobGlic19zb2Z0bW11KSAkKExJQlMpCiAKICMgeGVu IHN1cHBvcnQKLW9iai0kKENPTkZJR19YRU5fSTM4NikgKz0geGVuLWh2bS5vIHhlbi1tYXBjYWNo ZS5vCi1vYmotJChjYWxsIGxub3QsJChDT05GSUdfWEVOX0kzODYpKSArPSB4ZW4taHZtLXN0dWIu bworb2JqLSQoQ09ORklHX1hFTl9JMzg2KSArPSB4ZW4tbWFwY2FjaGUubwogCiAjIEhhcmR3YXJl IHN1cHBvcnQKIGlmZXEgKCQoVEFSR0VUX05BTUUpLCBzcGFyYzY0KQpkaWZmIC0tZ2l0IGEvaHcv aTM4Ni94ZW4vTWFrZWZpbGUub2JqcyBiL2h3L2kzODYveGVuL01ha2VmaWxlLm9ianMKaW5kZXgg ODAxYTY4ZC4uZGFmNGY1MyAxMDA2NDQKLS0tIGEvaHcvaTM4Ni94ZW4vTWFrZWZpbGUub2Jqcwor KysgYi9ody9pMzg2L3hlbi9NYWtlZmlsZS5vYmpzCkBAIC0xICsxIEBACi1vYmoteSArPSB4ZW5f cGxhdGZvcm0ubyB4ZW5fYXBpYy5vIHhlbl9wdmRldmljZS5vCitvYmoteSArPSB4ZW5fcGxhdGZv cm0ubyB4ZW5fYXBpYy5vIHhlbl9wdmRldmljZS5vIHhlbi1odm0ubwpkaWZmIC0tZ2l0IGEvaHcv aTM4Ni94ZW4vdHJhY2UtZXZlbnRzIGIvaHcvaTM4Ni94ZW4vdHJhY2UtZXZlbnRzCmluZGV4IDMy MWZlNjAuLmYyNWQ2MjIgMTAwNjQ0Ci0tLSBhL2h3L2kzODYveGVuL3RyYWNlLWV2ZW50cworKysg Yi9ody9pMzg2L3hlbi90cmFjZS1ldmVudHMKQEAgLTQsMyArNCwxNCBAQCB4ZW5fcGxhdGZvcm1f bG9nKGNoYXIgKnMpICJ4ZW4gcGxhdGZvcm06ICVzIgogIyBody9pMzg2L3hlbi94ZW5fcHZkZXZp Y2UuYwogeGVuX3B2X21taW9fcmVhZCh1aW50NjRfdCBhZGRyKSAiV0FSTklORzogcmVhZCBmcm9t IFhlbiBQViBEZXZpY2UgTU1JTyBzcGFjZSAoYWRkcmVzcyAlIlBSSXg2NCIpIgogeGVuX3B2X21t aW9fd3JpdGUodWludDY0X3QgYWRkcikgIldBUk5JTkc6IHdyaXRlIHRvIFhlbiBQViBEZXZpY2Ug TU1JTyBzcGFjZSAoYWRkcmVzcyAlIlBSSXg2NCIpIgorCisjIHhlbi1odm0uYworeGVuX3JhbV9h bGxvYyh1bnNpZ25lZCBsb25nIHJhbV9hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpICJyZXF1ZXN0 ZWQ6ICUjbHgsIHNpemUgJSNseCIKK3hlbl9jbGllbnRfc2V0X21lbW9yeSh1aW50NjRfdCBzdGFy dF9hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgbG9nX2RpcnR5KSAiJSMiUFJJeDY0IiBz aXplICUjbHgsIGxvZ19kaXJ0eSAlaSIKK2hhbmRsZV9pb3JlcSh2b2lkICpyZXEsIHVpbnQzMl90 IHR5cGUsIHVpbnQzMl90IGRpciwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRyLCB1 aW50NjRfdCBhZGRyLCB1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qgc2l6 ZSkgIkkvTz0lcCB0eXBlPSVkIGRpcj0lZCBkZj0lZCBwdHI9JWQgcG9ydD0lIyJQUkl4NjQiIGRh dGE9JSMiUFJJeDY0IiBjb3VudD0lZCBzaXplPSVkIgoraGFuZGxlX2lvcmVxX3JlYWQodm9pZCAq cmVxLCB1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBkZiwgdWludDMyX3QgZGF0YV9pc19wdHIsIHVp bnQ2NF90IGFkZHIsIHVpbnQ2NF90IGRhdGEsIHVpbnQzMl90IGNvdW50LCB1aW50MzJfdCBzaXpl KSAiSS9PPSVwIHJlYWQgdHlwZT0lZCBkZj0lZCBwdHI9JWQgcG9ydD0lIyJQUkl4NjQiIGRhdGE9 JSMiUFJJeDY0IiBjb3VudD0lZCBzaXplPSVkIgoraGFuZGxlX2lvcmVxX3dyaXRlKHZvaWQgKnJl cSwgdWludDMyX3QgdHlwZSwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRyLCB1aW50 NjRfdCBhZGRyLCB1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qgc2l6ZSkg IkkvTz0lcCB3cml0ZSB0eXBlPSVkIGRmPSVkIHB0cj0lZCBwb3J0PSUjIlBSSXg2NCIgZGF0YT0l IyJQUkl4NjQiIGNvdW50PSVkIHNpemU9JWQiCitjcHVfaW9yZXFfcGlvKHZvaWQgKnJlcSwgdWlu dDMyX3QgZGlyLCB1aW50MzJfdCBkZiwgdWludDMyX3QgZGF0YV9pc19wdHIsIHVpbnQ2NF90IGFk ZHIsIHVpbnQ2NF90IGRhdGEsIHVpbnQzMl90IGNvdW50LCB1aW50MzJfdCBzaXplKSAiSS9PPSVw IHBpbyBkaXI9JWQgZGY9JWQgcHRyPSVkIHBvcnQ9JSMiUFJJeDY0IiBkYXRhPSUjIlBSSXg2NCIg Y291bnQ9JWQgc2l6ZT0lZCIKK2NwdV9pb3JlcV9waW9fcmVhZF9yZWcodm9pZCAqcmVxLCB1aW50 NjRfdCBkYXRhLCB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBzaXplKSAiSS9PPSVwIHBpbyByZWFk IHJlZyBkYXRhPSUjIlBSSXg2NCIgcG9ydD0lIyJQUkl4NjQiIHNpemU9JWQiCitjcHVfaW9yZXFf cGlvX3dyaXRlX3JlZyh2b2lkICpyZXEsIHVpbnQ2NF90IGRhdGEsIHVpbnQ2NF90IGFkZHIsIHVp bnQzMl90IHNpemUpICJJL089JXAgcGlvIHdyaXRlIHJlZyBkYXRhPSUjIlBSSXg2NCIgcG9ydD0l IyJQUkl4NjQiIHNpemU9JWQiCitjcHVfaW9yZXFfbW92ZSh2b2lkICpyZXEsIHVpbnQzMl90IGRp ciwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRyLCB1aW50NjRfdCBhZGRyLCB1aW50 NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qgc2l6ZSkgIkkvTz0lcCBjb3B5IGRp cj0lZCBkZj0lZCBwdHI9JWQgcG9ydD0lIyJQUkl4NjQiIGRhdGE9JSMiUFJJeDY0IiBjb3VudD0l ZCBzaXplPSVkIgpkaWZmIC0tZ2l0IGEvaHcvaTM4Ni94ZW4veGVuLWh2bS5jIGIvaHcvaTM4Ni94 ZW4veGVuLWh2bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxYzA1ZmYK LS0tIC9kZXYvbnVsbAorKysgYi9ody9pMzg2L3hlbi94ZW4taHZtLmMKQEAgLTAsMCArMSwxNDI5 IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwICAgICAgIENpdHJpeCBMdGQuCisgKgorICog VGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVy c2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0 b3J5LgorICoKKyAqIENvbnRyaWJ1dGlvbnMgYWZ0ZXIgMjAxMi0wMS0xMyBhcmUgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdQTCwgdmVyc2lvbiAyIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgInFlbXUvb3NkZXAu aCIKKworI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImh3L3BjaS9wY2kuaCIKKyNpbmNsdWRl ICJody9pMzg2L3BjLmgiCisjaW5jbHVkZSAiaHcvaTM4Ni9hcGljLW1zaWRlZi5oIgorI2luY2x1 ZGUgImh3L3hlbi94ZW5fY29tbW9uLmgiCisjaW5jbHVkZSAiaHcveGVuL3hlbl9iYWNrZW5kLmgi CisjaW5jbHVkZSAicW1wLWNvbW1hbmRzLmgiCisKKyNpbmNsdWRlICJzeXNlbXUvY2hhci5oIgor I2luY2x1ZGUgInFlbXUvZXJyb3ItcmVwb3J0LmgiCisjaW5jbHVkZSAicWVtdS9yYW5nZS5oIgor I2luY2x1ZGUgInN5c2VtdS94ZW4tbWFwY2FjaGUuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgorI2lu Y2x1ZGUgImV4ZWMvYWRkcmVzcy1zcGFjZXMuaCIKKworI2luY2x1ZGUgPHhlbi9odm0vaW9yZXEu aD4KKyNpbmNsdWRlIDx4ZW4vaHZtL3BhcmFtcy5oPgorI2luY2x1ZGUgPHhlbi9odm0vZTgyMC5o PgorCisvLyNkZWZpbmUgREVCVUdfWEVOX0hWTQorCisjaWZkZWYgREVCVUdfWEVOX0hWTQorI2Rl ZmluZSBEUFJJTlRGKGZtdCwgLi4uKSBcCisgICAgZG8geyBmcHJpbnRmKHN0ZGVyciwgInhlbjog IiBmbXQsICMjIF9fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERQUklO VEYoZm10LCAuLi4pIFwKKyAgICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIE1l bW9yeVJlZ2lvbiByYW1fbWVtb3J5LCByYW1fNjQwaywgcmFtX2xvLCByYW1faGk7CitzdGF0aWMg TWVtb3J5UmVnaW9uICpmcmFtZWJ1ZmZlcjsKK3N0YXRpYyBib29sIHhlbl9pbl9taWdyYXRpb247 CisKKy8qIENvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9uICovCisKKy8qIFRoaXMgYWxs b3dzIFFFTVUgdG8gYnVpbGQgb24gYSBzeXN0ZW0gdGhhdCBoYXMgWGVuIDQuNSBvciBlYXJsaWVy CisgKiBpbnN0YWxsZWQuICBUaGlzIGhlcmUgKG5vdCBpbiBody94ZW4veGVuX2NvbW1vbi5oKSBi ZWNhdXNlIHhlbi9odm0vaW9yZXEuaAorICogbmVlZHMgdG8gYmUgaW5jbHVkZWQgYmVmb3JlIHRo aXMgYmxvY2sgYW5kIGh3L3hlbi94ZW5fY29tbW9uLmggbmVlZHMgdG8KKyAqIGJlIGluY2x1ZGVk IGJlZm9yZSB4ZW4vaHZtL2lvcmVxLmgKKyAqLworI2lmbmRlZiBJT1JFUV9UWVBFX1ZNV0FSRV9Q T1JUCisjZGVmaW5lIElPUkVRX1RZUEVfVk1XQVJFX1BPUlQgIDMKK3N0cnVjdCB2bXdhcmVfcmVn cyB7CisgICAgdWludDMyX3QgZXNpOworICAgIHVpbnQzMl90IGVkaTsKKyAgICB1aW50MzJfdCBl Yng7CisgICAgdWludDMyX3QgZWN4OworICAgIHVpbnQzMl90IGVkeDsKK307Cit0eXBlZGVmIHN0 cnVjdCB2bXdhcmVfcmVncyB2bXdhcmVfcmVnc190OworCitzdHJ1Y3Qgc2hhcmVkX3ZtcG9ydF9p b3BhZ2UgeworICAgIHN0cnVjdCB2bXdhcmVfcmVncyB2Y3B1X3ZtcG9ydF9yZWdzWzFdOworfTsK K3R5cGVkZWYgc3RydWN0IHNoYXJlZF92bXBvcnRfaW9wYWdlIHNoYXJlZF92bXBvcnRfaW9wYWdl X3Q7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB1aW50MzJfdCB4ZW5fdmNwdV9lcG9ydChzaGFy ZWRfaW9wYWdlX3QgKnNoYXJlZF9wYWdlLCBpbnQgaSkKK3sKKyAgICByZXR1cm4gc2hhcmVkX3Bh Z2UtPnZjcHVfaW9yZXFbaV0udnBfZXBvcnQ7Cit9CitzdGF0aWMgaW5saW5lIGlvcmVxX3QgKnhl bl92Y3B1X2lvcmVxKHNoYXJlZF9pb3BhZ2VfdCAqc2hhcmVkX3BhZ2UsIGludCB2Y3B1KQorewor ICAgIHJldHVybiAmc2hhcmVkX3BhZ2UtPnZjcHVfaW9yZXFbdmNwdV07Cit9CisKKyNkZWZpbmUg QlVGRkVSX0lPX01BWF9ERUxBWSAgMTAwCisKK3R5cGVkZWYgc3RydWN0IFhlblBoeXNtYXAgewor ICAgIGh3YWRkciBzdGFydF9hZGRyOworICAgIHJhbV9hZGRyX3Qgc2l6ZTsKKyAgICBjb25zdCBj aGFyICpuYW1lOworICAgIGh3YWRkciBwaHlzX29mZnNldDsKKworICAgIFFMSVNUX0VOVFJZKFhl blBoeXNtYXApIGxpc3Q7Cit9IFhlblBoeXNtYXA7CisKK3R5cGVkZWYgc3RydWN0IFhlbklPU3Rh dGUgeworICAgIGlvc2VydmlkX3QgaW9zZXJ2aWQ7CisgICAgc2hhcmVkX2lvcGFnZV90ICpzaGFy ZWRfcGFnZTsKKyAgICBzaGFyZWRfdm1wb3J0X2lvcGFnZV90ICpzaGFyZWRfdm1wb3J0X3BhZ2U7 CisgICAgYnVmZmVyZWRfaW9wYWdlX3QgKmJ1ZmZlcmVkX2lvX3BhZ2U7CisgICAgUUVNVVRpbWVy ICpidWZmZXJlZF9pb190aW1lcjsKKyAgICBDUFVTdGF0ZSAqKmNwdV9ieV92Y3B1X2lkOworICAg IC8qIHRoZSBldnRjaG4gcG9ydCBmb3IgcG9sbGluZyB0aGUgbm90aWZpY2F0aW9uLCAqLworICAg IGV2dGNobl9wb3J0X3QgKmlvcmVxX2xvY2FsX3BvcnQ7CisgICAgLyogZXZ0Y2huIGxvY2FsIHBv cnQgZm9yIGJ1ZmZlcmVkIGlvICovCisgICAgZXZ0Y2huX3BvcnRfdCBidWZpb3JlcV9sb2NhbF9w b3J0OworICAgIC8qIHRoZSBldnRjaG4gZmQgZm9yIHBvbGxpbmcgKi8KKyAgICB4ZW5ldnRjaG5f aGFuZGxlICp4Y2VfaGFuZGxlOworICAgIC8qIHdoaWNoIHZjcHUgd2UgYXJlIHNlcnZpbmcgKi8K KyAgICBpbnQgc2VuZF92Y3B1OworCisgICAgc3RydWN0IHhzX2hhbmRsZSAqeGVuc3RvcmU7Cisg ICAgTWVtb3J5TGlzdGVuZXIgbWVtb3J5X2xpc3RlbmVyOworICAgIE1lbW9yeUxpc3RlbmVyIGlv X2xpc3RlbmVyOworICAgIERldmljZUxpc3RlbmVyIGRldmljZV9saXN0ZW5lcjsKKyAgICBRTElT VF9IRUFEKCwgWGVuUGh5c21hcCkgcGh5c21hcDsKKyAgICBod2FkZHIgZnJlZV9waHlzX29mZnNl dDsKKyAgICBjb25zdCBYZW5QaHlzbWFwICpsb2dfZm9yX2RpcnR5Yml0OworCisgICAgTm90aWZp ZXIgZXhpdDsKKyAgICBOb3RpZmllciBzdXNwZW5kOworICAgIE5vdGlmaWVyIHdha2V1cDsKK30g WGVuSU9TdGF0ZTsKKworLyogWGVuIHNwZWNpZmljIGZ1bmN0aW9uIGZvciBwaWl4IHBjaSAqLwor CitpbnQgeGVuX3BjaV9zbG90X2dldF9waXJxKFBDSURldmljZSAqcGNpX2RldiwgaW50IGlycV9u dW0pCit7CisgICAgcmV0dXJuIGlycV9udW0gKyAoKHBjaV9kZXYtPmRldmZuID4+IDMpIDw8IDIp OworfQorCit2b2lkIHhlbl9waWl4M19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycV9udW0s IGludCBsZXZlbCkKK3sKKyAgICB4ZW5fc2V0X3BjaV9pbnR4X2xldmVsKHhlbl9kb21pZCwgMCwg MCwgaXJxX251bSA+PiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxX251bSAmIDMs IGxldmVsKTsKK30KKwordm9pZCB4ZW5fcGlpeF9wY2lfd3JpdGVfY29uZmlnX2NsaWVudCh1aW50 MzJfdCBhZGRyZXNzLCB1aW50MzJfdCB2YWwsIGludCBsZW4pCit7CisgICAgaW50IGk7CisKKyAg ICAvKiBTY2FuIGZvciB1cGRhdGVzIHRvIFBDSSBsaW5rIHJvdXRlcyAoMHg2MC0weDYzKS4gKi8K KyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgdWludDhfdCB2ID0gKHZh bCA+PiAoOCAqIGkpKSAmIDB4ZmY7CisgICAgICAgIGlmICh2ICYgMHg4MCkgeworICAgICAgICAg ICAgdiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgdiAmPSAweGY7CisgICAgICAgIGlmICgoKGFk ZHJlc3MgKyBpKSA+PSAweDYwKSAmJiAoKGFkZHJlc3MgKyBpKSA8PSAweDYzKSkgeworICAgICAg ICAgICAgeGVuX3NldF9wY2lfbGlua19yb3V0ZSh4ZW5fZG9taWQsIGFkZHJlc3MgKyBpIC0gMHg2 MCwgdik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCB4ZW5faXNfcGlycV9tc2kodWludDMy X3QgbXNpX2RhdGEpCit7CisgICAgLyogSWYgdmVjdG9yIGlzIDAsIHRoZSBtc2kgaXMgcmVtYXBw ZWQgaW50byBhIHBpcnEsIHBhc3NlZCBhcworICAgICAqIGRlc3RfaWQuCisgICAgICovCisgICAg cmV0dXJuICgobXNpX2RhdGEgJiBNU0lfREFUQV9WRUNUT1JfTUFTSykgPj4gTVNJX0RBVEFfVkVD VE9SX1NISUZUKSA9PSAwOworfQorCit2b2lkIHhlbl9odm1faW5qZWN0X21zaSh1aW50NjRfdCBh ZGRyLCB1aW50MzJfdCBkYXRhKQoreworICAgIHhlbl9pbmplY3RfbXNpKHhlbl9kb21pZCwgYWRk ciwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9zdXNwZW5kX25vdGlmaWVyKE5vdGlmaWVy ICpub3RpZmllciwgdm9pZCAqZGF0YSkKK3sKKyAgICB4Y19zZXRfaHZtX3BhcmFtKHhlbl94Yywg eGVuX2RvbWlkLCBIVk1fUEFSQU1fQUNQSV9TX1NUQVRFLCAzKTsKK30KKworLyogWGVuIEludGVy cnVwdCBDb250cm9sbGVyICovCisKK3N0YXRpYyB2b2lkIHhlbl9zZXRfaXJxKHZvaWQgKm9wYXF1 ZSwgaW50IGlycSwgaW50IGxldmVsKQoreworICAgIHhlbl9zZXRfaXNhX2lycV9sZXZlbCh4ZW5f ZG9taWQsIGlycSwgbGV2ZWwpOworfQorCitxZW11X2lycSAqeGVuX2ludGVycnVwdF9jb250cm9s bGVyX2luaXQodm9pZCkKK3sKKyAgICByZXR1cm4gcWVtdV9hbGxvY2F0ZV9pcnFzKHhlbl9zZXRf aXJxLCBOVUxMLCAxNik7Cit9CisKKy8qIE1lbW9yeSBPcHMgKi8KKworc3RhdGljIHZvaWQgeGVu X3JhbV9pbml0KFBDTWFjaGluZVN0YXRlICpwY21zLAorICAgICAgICAgICAgICAgICAgICAgICAg IHJhbV9hZGRyX3QgcmFtX3NpemUsIE1lbW9yeVJlZ2lvbiAqKnJhbV9tZW1vcnlfcCkKK3sKKyAg ICBNZW1vcnlSZWdpb24gKnN5c21lbSA9IGdldF9zeXN0ZW1fbWVtb3J5KCk7CisgICAgcmFtX2Fk ZHJfdCBibG9ja19sZW47CisgICAgdWludDY0X3QgdXNlcl9sb3dtZW0gPSBvYmplY3RfcHJvcGVy dHlfZ2V0X2ludChxZGV2X2dldF9tYWNoaW5lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQQ19NQUNISU5FX01BWF9SQU1fQkVMT1dfNEcsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXJyb3Jf YWJvcnQpOworCisgICAgLyogSGFuZGxlIHRoZSBtYWNoaW5lIG9wdCBtYXgtcmFtLWJlbG93LTRn LiAgSXQgaXMgYmFzaWNhbGx5IGRvaW5nCisgICAgICogbWluKHhlbiBsaW1pdCwgdXNlciBsaW1p dCkuCisgICAgICovCisgICAgaWYgKCF1c2VyX2xvd21lbSkgeworICAgICAgICB1c2VyX2xvd21l bSA9IEhWTV9CRUxPV180R19SQU1fRU5EOyAvKiBkZWZhdWx0ICovCisgICAgfQorICAgIGlmIChI Vk1fQkVMT1dfNEdfUkFNX0VORCA8PSB1c2VyX2xvd21lbSkgeworICAgICAgICB1c2VyX2xvd21l bSA9IEhWTV9CRUxPV180R19SQU1fRU5EOworICAgIH0KKworICAgIGlmIChyYW1fc2l6ZSA+PSB1 c2VyX2xvd21lbSkgeworICAgICAgICBwY21zLT5hYm92ZV80Z19tZW1fc2l6ZSA9IHJhbV9zaXpl IC0gdXNlcl9sb3dtZW07CisgICAgICAgIHBjbXMtPmJlbG93XzRnX21lbV9zaXplID0gdXNlcl9s b3dtZW07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcGNtcy0+YWJvdmVfNGdfbWVtX3NpemUgPSAw OworICAgICAgICBwY21zLT5iZWxvd180Z19tZW1fc2l6ZSA9IHJhbV9zaXplOworICAgIH0KKyAg ICBpZiAoIXBjbXMtPmFib3ZlXzRnX21lbV9zaXplKSB7CisgICAgICAgIGJsb2NrX2xlbiA9IHJh bV9zaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFhlbiBkb2VzIG5v dCBhbGxvY2F0ZSB0aGUgbWVtb3J5IGNvbnRpbnVvdXNseSwgaXQga2VlcHMgYQorICAgICAgICAg KiBob2xlIG9mIHRoZSBzaXplIGNvbXB1dGVkIGFib3ZlIG9yIHBhc3NlZCBpbi4KKyAgICAgICAg ICovCisgICAgICAgIGJsb2NrX2xlbiA9ICgxVUxMIDw8IDMyKSArIHBjbXMtPmFib3ZlXzRnX21l bV9zaXplOworICAgIH0KKyAgICBtZW1vcnlfcmVnaW9uX2luaXRfcmFtKCZyYW1fbWVtb3J5LCBO VUxMLCAieGVuLnJhbSIsIGJsb2NrX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZl cnJvcl9mYXRhbCk7CisgICAgKnJhbV9tZW1vcnlfcCA9ICZyYW1fbWVtb3J5OworICAgIHZtc3Rh dGVfcmVnaXN0ZXJfcmFtX2dsb2JhbCgmcmFtX21lbW9yeSk7CisKKyAgICBtZW1vcnlfcmVnaW9u X2luaXRfYWxpYXMoJnJhbV82NDBrLCBOVUxMLCAieGVuLnJhbS42NDBrIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnJhbV9tZW1vcnksIDAsIDB4YTAwMDApOworICAgIG1lbW9yeV9y ZWdpb25fYWRkX3N1YnJlZ2lvbihzeXNtZW0sIDAsICZyYW1fNjQwayk7CisgICAgLyogU2tpcCBv ZiB0aGUgVkdBIElPIG1lbW9yeSBzcGFjZSwgaXQgd2lsbCBiZSByZWdpc3RlcmVkIGxhdGVyIGJ5 IHRoZSBWR0EKKyAgICAgKiBlbXVsYXRlZCBkZXZpY2UuCisgICAgICoKKyAgICAgKiBUaGUgYXJl YSBiZXR3ZWVuIDB4YzAwMDAgYW5kIDB4MTAwMDAwIHdpbGwgYmUgdXNlZCBieSBTZWFCSU9TIHRv IGxvYWQKKyAgICAgKiB0aGUgT3B0aW9ucyBST00sIHNvIGl0IGlzIHJlZ2lzdGVyZWQgaGVyZSBh cyBSQU0uCisgICAgICovCisgICAgbWVtb3J5X3JlZ2lvbl9pbml0X2FsaWFzKCZyYW1fbG8sIE5V TEwsICJ4ZW4ucmFtLmxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhbV9tZW1v cnksIDB4YzAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjbXMtPmJlbG93XzRn X21lbV9zaXplIC0gMHhjMDAwMCk7CisgICAgbWVtb3J5X3JlZ2lvbl9hZGRfc3VicmVnaW9uKHN5 c21lbSwgMHhjMDAwMCwgJnJhbV9sbyk7CisgICAgaWYgKHBjbXMtPmFib3ZlXzRnX21lbV9zaXpl ID4gMCkgeworICAgICAgICBtZW1vcnlfcmVnaW9uX2luaXRfYWxpYXMoJnJhbV9oaSwgTlVMTCwg Inhlbi5yYW0uaGkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJhbV9tZW1v cnksIDB4MTAwMDAwMDAwVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNt cy0+YWJvdmVfNGdfbWVtX3NpemUpOworICAgICAgICBtZW1vcnlfcmVnaW9uX2FkZF9zdWJyZWdp b24oc3lzbWVtLCAweDEwMDAwMDAwMFVMTCwgJnJhbV9oaSk7CisgICAgfQorfQorCit2b2lkIHhl bl9yYW1fYWxsb2MocmFtX2FkZHJfdCByYW1fYWRkciwgcmFtX2FkZHJfdCBzaXplLCBNZW1vcnlS ZWdpb24gKm1yLAorICAgICAgICAgICAgICAgICAgIEVycm9yICoqZXJycCkKK3sKKyAgICB1bnNp Z25lZCBsb25nIG5yX3BmbjsKKyAgICB4ZW5fcGZuX3QgKnBmbl9saXN0OworICAgIGludCBpOwor CisgICAgaWYgKHJ1bnN0YXRlX2NoZWNrKFJVTl9TVEFURV9JTk1JR1JBVEUpKSB7CisgICAgICAg IC8qIFJBTSBhbHJlYWR5IHBvcHVsYXRlZCBpbiBYZW4gKi8KKyAgICAgICAgZnByaW50ZihzdGRl cnIsICIlczogZG8gbm90IGFsbG9jICJSQU1fQUREUl9GTVQKKyAgICAgICAgICAgICAgICAiIGJ5 dGVzIG9mIHJhbSBhdCAiUkFNX0FERFJfRk1UIiB3aGVuIHJ1bnN0YXRlIGlzIElOTUlHUkFURVxu IiwKKyAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc2l6ZSwgcmFtX2FkZHIpOyAKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIGlmIChtciA9PSAmcmFtX21lbW9yeSkgeworICAgICAgICBy ZXR1cm47CisgICAgfQorCisgICAgdHJhY2VfeGVuX3JhbV9hbGxvYyhyYW1fYWRkciwgc2l6ZSk7 CisKKyAgICBucl9wZm4gPSBzaXplID4+IFRBUkdFVF9QQUdFX0JJVFM7CisgICAgcGZuX2xpc3Qg PSBnX21hbGxvYyhzaXplb2YgKCpwZm5fbGlzdCkgKiBucl9wZm4pOworCisgICAgZm9yIChpID0g MDsgaSA8IG5yX3BmbjsgaSsrKSB7CisgICAgICAgIHBmbl9saXN0W2ldID0gKHJhbV9hZGRyID4+ IFRBUkdFVF9QQUdFX0JJVFMpICsgaTsKKyAgICB9CisKKyAgICBpZiAoeGNfZG9tYWluX3BvcHVs YXRlX3BoeXNtYXBfZXhhY3QoeGVuX3hjLCB4ZW5fZG9taWQsIG5yX3BmbiwgMCwgMCwgcGZuX2xp c3QpKSB7CisgICAgICAgIGVycm9yX3NldGcoZXJycCwgInhlbjogZmFpbGVkIHRvIHBvcHVsYXRl IHJhbSBhdCAiIFJBTV9BRERSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICByYW1fYWRkcik7Cisg ICAgfQorCisgICAgZ19mcmVlKHBmbl9saXN0KTsKK30KKworc3RhdGljIFhlblBoeXNtYXAgKmdl dF9waHlzbWFwcGluZyhYZW5JT1N0YXRlICpzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaHdhZGRyIHN0YXJ0X2FkZHIsIHJhbV9hZGRyX3Qgc2l6ZSkKK3sKKyAgICBY ZW5QaHlzbWFwICpwaHlzbWFwID0gTlVMTDsKKworICAgIHN0YXJ0X2FkZHIgJj0gVEFSR0VUX1BB R0VfTUFTSzsKKworICAgIFFMSVNUX0ZPUkVBQ0gocGh5c21hcCwgJnN0YXRlLT5waHlzbWFwLCBs aXN0KSB7CisgICAgICAgIGlmIChyYW5nZV9jb3ZlcnNfYnl0ZShwaHlzbWFwLT5zdGFydF9hZGRy LCBwaHlzbWFwLT5zaXplLCBzdGFydF9hZGRyKSkgeworICAgICAgICAgICAgcmV0dXJuIHBoeXNt YXA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBod2Fk ZHIgeGVuX3BoeXNfb2Zmc2V0X3RvX2dhZGRyKGh3YWRkciBzdGFydF9hZGRyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBzaXpl LCB2b2lkICpvcGFxdWUpCit7CisgICAgaHdhZGRyIGFkZHIgPSBzdGFydF9hZGRyICYgVEFSR0VU X1BBR0VfTUFTSzsKKyAgICBYZW5JT1N0YXRlICp4ZW5faW9fc3RhdGUgPSBvcGFxdWU7CisgICAg WGVuUGh5c21hcCAqcGh5c21hcCA9IE5VTEw7CisKKyAgICBRTElTVF9GT1JFQUNIKHBoeXNtYXAs ICZ4ZW5faW9fc3RhdGUtPnBoeXNtYXAsIGxpc3QpIHsKKyAgICAgICAgaWYgKHJhbmdlX2NvdmVy c19ieXRlKHBoeXNtYXAtPnBoeXNfb2Zmc2V0LCBwaHlzbWFwLT5zaXplLCBhZGRyKSkgeworICAg ICAgICAgICAgcmV0dXJuIHBoeXNtYXAtPnN0YXJ0X2FkZHI7CisgICAgICAgIH0KKyAgICB9CisK KyAgICByZXR1cm4gc3RhcnRfYWRkcjsKK30KKworc3RhdGljIGludCB4ZW5fYWRkX3RvX3BoeXNt YXAoWGVuSU9TdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2Fk ZHIgc3RhcnRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyX3Qg c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvbiAqbXIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod2FkZHIgb2Zmc2V0X3dpdGhpbl9yZWdpb24p Cit7CisgICAgdW5zaWduZWQgbG9uZyBpID0gMDsKKyAgICBpbnQgcmMgPSAwOworICAgIFhlblBo eXNtYXAgKnBoeXNtYXAgPSBOVUxMOworICAgIGh3YWRkciBwZm4sIHN0YXJ0X2dwZm47CisgICAg aHdhZGRyIHBoeXNfb2Zmc2V0ID0gbWVtb3J5X3JlZ2lvbl9nZXRfcmFtX2FkZHIobXIpOworICAg IGNoYXIgcGF0aFs4MF0sIHZhbHVlWzE3XTsKKyAgICBjb25zdCBjaGFyICptcl9uYW1lOworCisg ICAgaWYgKGdldF9waHlzbWFwcGluZyhzdGF0ZSwgc3RhcnRfYWRkciwgc2l6ZSkpIHsKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgcmV0dXJu IC0xOworICAgIH0KKworICAgIC8qIFhlbiBjYW4gb25seSBoYW5kbGUgYSBzaW5nbGUgZGlydHkg bG9nIHJlZ2lvbiBmb3Igbm93IGFuZCB3ZSB3YW50CisgICAgICogdGhlIGxpbmVhciBmcmFtZWJ1 ZmZlciB0byBiZSB0aGF0IHJlZ2lvbi4KKyAgICAgKiBBdm9pZCB0cmFja2luZyBhbnkgcmVnaW9u cyB0aGF0IGlzIG5vdCB2aWRlb3JhbSBhbmQgYXZvaWQgdHJhY2tpbmcKKyAgICAgKiB0aGUgbGVn YWN5IHZnYSByZWdpb24uICovCisgICAgaWYgKG1yID09IGZyYW1lYnVmZmVyICYmIHN0YXJ0X2Fk ZHIgPiAweGJmZmZmKSB7CisgICAgICAgIGdvdG8gZ29fcGh5c21hcDsKKyAgICB9CisgICAgcmV0 dXJuIC0xOworCitnb19waHlzbWFwOgorICAgIERQUklOVEYoIm1hcHBpbmcgdnJhbSB0byAlIkhX QUREUl9QUkl4IiAtICUiSFdBRERSX1BSSXgiXG4iLAorICAgICAgICAgICAgc3RhcnRfYWRkciwg c3RhcnRfYWRkciArIHNpemUpOworCisgICAgcGZuID0gcGh5c19vZmZzZXQgPj4gVEFSR0VUX1BB R0VfQklUUzsKKyAgICBzdGFydF9ncGZuID0gc3RhcnRfYWRkciA+PiBUQVJHRVRfUEFHRV9CSVRT OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplID4+IFRBUkdFVF9QQUdFX0JJVFM7IGkrKykgewor ICAgICAgICB1bnNpZ25lZCBsb25nIGlkeCA9IHBmbiArIGk7CisgICAgICAgIHhlbl9wZm5fdCBn cGZuID0gc3RhcnRfZ3BmbiArIGk7CisKKyAgICAgICAgcmMgPSB4ZW5feGNfZG9tYWluX2FkZF90 b19waHlzbWFwKHhlbl94YywgeGVuX2RvbWlkLCBYRU5NQVBTUEFDRV9nbWZuLCBpZHgsIGdwZm4p OworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIERQUklOVEYoImFkZF90b19waHlzbWFw IE1GTiAlIlBSSV94ZW5fcGZuIiB0byBQRk4gJSIKKyAgICAgICAgICAgICAgICAgICAgUFJJX3hl bl9wZm4iIGZhaWxlZDogJWQgKGVycm5vOiAlZClcbiIsIGlkeCwgZ3BmbiwgcmMsIGVycm5vKTsK KyAgICAgICAgICAgIHJldHVybiAtcmM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtcl9uYW1l ID0gbWVtb3J5X3JlZ2lvbl9uYW1lKG1yKTsKKworICAgIHBoeXNtYXAgPSBnX21hbGxvYyhzaXpl b2YgKFhlblBoeXNtYXApKTsKKworICAgIHBoeXNtYXAtPnN0YXJ0X2FkZHIgPSBzdGFydF9hZGRy OworICAgIHBoeXNtYXAtPnNpemUgPSBzaXplOworICAgIHBoeXNtYXAtPm5hbWUgPSBtcl9uYW1l OworICAgIHBoeXNtYXAtPnBoeXNfb2Zmc2V0ID0gcGh5c19vZmZzZXQ7CisKKyAgICBRTElTVF9J TlNFUlRfSEVBRCgmc3RhdGUtPnBoeXNtYXAsIHBoeXNtYXAsIGxpc3QpOworCisgICAgeGNfZG9t YWluX3Bpbl9tZW1vcnlfY2FjaGVhdHRyKHhlbl94YywgeGVuX2RvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9hZGRyID4+IFRBUkdFVF9QQUdFX0JJVFMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGFydF9hZGRyICsgc2l6ZSAtIDEp ID4+IFRBUkdFVF9QQUdFX0JJVFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFhFTl9ET01DVExfTUVNX0NBQ0hFQVRUUl9XQik7CisKKyAgICBzbnByaW50ZihwYXRoLCBzaXpl b2YocGF0aCksCisgICAgICAgICAgICAiL2xvY2FsL2RvbWFpbi8wL2RldmljZS1tb2RlbC8lZC9w aHlzbWFwLyUiUFJJeDY0Ii9zdGFydF9hZGRyIiwKKyAgICAgICAgICAgIHhlbl9kb21pZCwgKHVp bnQ2NF90KXBoeXNfb2Zmc2V0KTsKKyAgICBzbnByaW50Zih2YWx1ZSwgc2l6ZW9mKHZhbHVlKSwg IiUiUFJJeDY0LCAodWludDY0X3Qpc3RhcnRfYWRkcik7CisgICAgaWYgKCF4c193cml0ZShzdGF0 ZS0+eGVuc3RvcmUsIDAsIHBhdGgsIHZhbHVlLCBzdHJsZW4odmFsdWUpKSkgeworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwKKyAgICAg ICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3BoeXNtYXAvJSJQUkl4NjQi L3NpemUiLAorICAgICAgICAgICAgeGVuX2RvbWlkLCAodWludDY0X3QpcGh5c19vZmZzZXQpOwor ICAgIHNucHJpbnRmKHZhbHVlLCBzaXplb2YodmFsdWUpLCAiJSJQUkl4NjQsICh1aW50NjRfdClz aXplKTsKKyAgICBpZiAoIXhzX3dyaXRlKHN0YXRlLT54ZW5zdG9yZSwgMCwgcGF0aCwgdmFsdWUs IHN0cmxlbih2YWx1ZSkpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG1y X25hbWUpIHsKKyAgICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAorICAgICAgICAg ICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3BoeXNtYXAvJSJQUkl4NjQi L25hbWUiLAorICAgICAgICAgICAgICAgIHhlbl9kb21pZCwgKHVpbnQ2NF90KXBoeXNfb2Zmc2V0 KTsKKyAgICAgICAgaWYgKCF4c193cml0ZShzdGF0ZS0+eGVuc3RvcmUsIDAsIHBhdGgsIG1yX25h bWUsIHN0cmxlbihtcl9uYW1lKSkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHhlbl9yZW1vdmVfZnJv bV9waHlzbWFwKFhlbklPU3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBod2FkZHIgc3RhcnRfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcmFtX2FkZHJfdCBzaXplKQoreworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDA7CisgICAg aW50IHJjID0gMDsKKyAgICBYZW5QaHlzbWFwICpwaHlzbWFwID0gTlVMTDsKKyAgICBod2FkZHIg cGh5c19vZmZzZXQgPSAwOworCisgICAgcGh5c21hcCA9IGdldF9waHlzbWFwcGluZyhzdGF0ZSwg c3RhcnRfYWRkciwgc2l6ZSk7CisgICAgaWYgKHBoeXNtYXAgPT0gTlVMTCkgeworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgcGh5c19vZmZzZXQgPSBwaHlzbWFwLT5waHlzX29mZnNl dDsKKyAgICBzaXplID0gcGh5c21hcC0+c2l6ZTsKKworICAgIERQUklOVEYoInVubWFwcGluZyB2 cmFtIHRvICUiSFdBRERSX1BSSXgiIC0gJSJIV0FERFJfUFJJeCIsIGF0ICIKKyAgICAgICAgICAg ICIlIkhXQUREUl9QUkl4IlxuIiwgc3RhcnRfYWRkciwgc3RhcnRfYWRkciArIHNpemUsIHBoeXNf b2Zmc2V0KTsKKworICAgIHNpemUgPj49IFRBUkdFVF9QQUdFX0JJVFM7CisgICAgc3RhcnRfYWRk ciA+Pj0gVEFSR0VUX1BBR0VfQklUUzsKKyAgICBwaHlzX29mZnNldCA+Pj0gVEFSR0VUX1BBR0Vf QklUUzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIHhlbl9wZm5f dCBpZHggPSBzdGFydF9hZGRyICsgaTsKKyAgICAgICAgeGVuX3Bmbl90IGdwZm4gPSBwaHlzX29m ZnNldCArIGk7CisKKyAgICAgICAgcmMgPSB4ZW5feGNfZG9tYWluX2FkZF90b19waHlzbWFwKHhl bl94YywgeGVuX2RvbWlkLCBYRU5NQVBTUEFDRV9nbWZuLCBpZHgsIGdwZm4pOworICAgICAgICBp ZiAocmMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiYWRkX3RvX3BoeXNtYXAgTUZO ICUiUFJJX3hlbl9wZm4iIHRvIFBGTiAlIgorICAgICAgICAgICAgICAgICAgICBQUklfeGVuX3Bm biIgZmFpbGVkOiAlZCAoZXJybm86ICVkKVxuIiwgaWR4LCBncGZuLCByYywgZXJybm8pOworICAg ICAgICAgICAgcmV0dXJuIC1yYzsKKyAgICAgICAgfQorICAgIH0KKworICAgIFFMSVNUX1JFTU9W RShwaHlzbWFwLCBsaXN0KTsKKyAgICBpZiAoc3RhdGUtPmxvZ19mb3JfZGlydHliaXQgPT0gcGh5 c21hcCkgeworICAgICAgICBzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCA9IE5VTEw7CisgICAgfQor ICAgIGdfZnJlZShwaHlzbWFwKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB4 ZW5fc2V0X21lbW9yeShzdHJ1Y3QgTWVtb3J5TGlzdGVuZXIgKmxpc3RlbmVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJvb2wgYWRkKQoreworICAgIFhlbklPU3RhdGUgKnN0YXRlID0g Y29udGFpbmVyX29mKGxpc3RlbmVyLCBYZW5JT1N0YXRlLCBtZW1vcnlfbGlzdGVuZXIpOworICAg IGh3YWRkciBzdGFydF9hZGRyID0gc2VjdGlvbi0+b2Zmc2V0X3dpdGhpbl9hZGRyZXNzX3NwYWNl OworICAgIHJhbV9hZGRyX3Qgc2l6ZSA9IGludDEyOF9nZXQ2NChzZWN0aW9uLT5zaXplKTsKKyAg ICBib29sIGxvZ19kaXJ0eSA9IG1lbW9yeV9yZWdpb25faXNfbG9nZ2luZyhzZWN0aW9uLT5tciwg RElSVFlfTUVNT1JZX1ZHQSk7CisgICAgaHZtbWVtX3R5cGVfdCBtZW1fdHlwZTsKKworICAgIGlm IChzZWN0aW9uLT5tciA9PSAmcmFtX21lbW9yeSkgeworICAgICAgICByZXR1cm47CisgICAgfSBl bHNlIHsKKyAgICAgICAgaWYgKGFkZCkgeworICAgICAgICAgICAgeGVuX21hcF9tZW1vcnlfc2Vj dGlvbih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2VjdGlvbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB4ZW5f dW5tYXBfbWVtb3J5X3NlY3Rpb24oeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbik7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoIW1lbW9yeV9yZWdpb25faXNfcmFtKHNlY3Rpb24tPm1yKSkgeworICAgICAg ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGxvZ19kaXJ0eSAhPSBhZGQpIHsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIHRyYWNlX3hlbl9jbGllbnRfc2V0X21lbW9yeShzdGFydF9h ZGRyLCBzaXplLCBsb2dfZGlydHkpOworCisgICAgc3RhcnRfYWRkciAmPSBUQVJHRVRfUEFHRV9N QVNLOworICAgIHNpemUgPSBUQVJHRVRfUEFHRV9BTElHTihzaXplKTsKKworICAgIGlmIChhZGQp IHsKKyAgICAgICAgaWYgKCFtZW1vcnlfcmVnaW9uX2lzX3JvbShzZWN0aW9uLT5tcikpIHsKKyAg ICAgICAgICAgIHhlbl9hZGRfdG9fcGh5c21hcChzdGF0ZSwgc3RhcnRfYWRkciwgc2l6ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5tciwgc2VjdGlvbi0+b2Zmc2V0 X3dpdGhpbl9yZWdpb24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVtX3R5cGUg PSBIVk1NRU1fcmFtX3JvOworICAgICAgICAgICAgaWYgKHhlbl9zZXRfbWVtX3R5cGUoeGVuX2Rv bWlkLCBtZW1fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2Fk ZHIgPj4gVEFSR0VUX1BBR0VfQklUUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemUgPj4gVEFSR0VUX1BBR0VfQklUUykpIHsKKyAgICAgICAgICAgICAgICBEUFJJTlRGKCJ4 ZW5fc2V0X21lbV90eXBlIGVycm9yLCBhZGRyOiAiVEFSR0VUX0ZNVF9wbHgiXG4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgc3RhcnRfYWRkcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9IGVsc2UgeworICAgICAgICBpZiAoeGVuX3JlbW92ZV9mcm9tX3BoeXNtYXAoc3RhdGUs IHN0YXJ0X2FkZHIsIHNpemUpIDwgMCkgeworICAgICAgICAgICAgRFBSSU5URigicGh5c21hcHBp bmcgZG9lcyBub3QgZXhpc3QgYXQgIlRBUkdFVF9GTVRfcGx4IlxuIiwgc3RhcnRfYWRkcik7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9yZWdpb25fYWRkKE1lbW9yeUxp c3RlbmVyICpsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lv blNlY3Rpb24gKnNlY3Rpb24pCit7CisgICAgbWVtb3J5X3JlZ2lvbl9yZWYoc2VjdGlvbi0+bXIp OworICAgIHhlbl9zZXRfbWVtb3J5KGxpc3RlbmVyLCBzZWN0aW9uLCB0cnVlKTsKK30KKworc3Rh dGljIHZvaWQgeGVuX3JlZ2lvbl9kZWwoTWVtb3J5TGlzdGVuZXIgKmxpc3RlbmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbikKK3sKKyAg ICB4ZW5fc2V0X21lbW9yeShsaXN0ZW5lciwgc2VjdGlvbiwgZmFsc2UpOworICAgIG1lbW9yeV9y ZWdpb25fdW5yZWYoc2VjdGlvbi0+bXIpOworfQorCitzdGF0aWMgdm9pZCB4ZW5faW9fYWRkKE1l bW9yeUxpc3RlbmVyICpsaXN0ZW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVn aW9uU2VjdGlvbiAqc2VjdGlvbikKK3sKKyAgICBYZW5JT1N0YXRlICpzdGF0ZSA9IGNvbnRhaW5l cl9vZihsaXN0ZW5lciwgWGVuSU9TdGF0ZSwgaW9fbGlzdGVuZXIpOworICAgIE1lbW9yeVJlZ2lv biAqbXIgPSBzZWN0aW9uLT5tcjsKKworICAgIGlmIChtci0+b3BzID09ICZ1bmFzc2lnbmVkX2lv X29wcykgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbWVtb3J5X3JlZ2lvbl9yZWYo bXIpOworCisgICAgeGVuX21hcF9pb19zZWN0aW9uKHhlbl9kb21pZCwgc3RhdGUtPmlvc2Vydmlk LCBzZWN0aW9uKTsKK30KKworc3RhdGljIHZvaWQgeGVuX2lvX2RlbChNZW1vcnlMaXN0ZW5lciAq bGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvblNlY3Rpb24gKnNl Y3Rpb24pCit7CisgICAgWGVuSU9TdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2YobGlzdGVuZXIs IFhlbklPU3RhdGUsIGlvX2xpc3RlbmVyKTsKKyAgICBNZW1vcnlSZWdpb24gKm1yID0gc2VjdGlv bi0+bXI7CisKKyAgICBpZiAobXItPm9wcyA9PSAmdW5hc3NpZ25lZF9pb19vcHMpIHsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIHhlbl91bm1hcF9pb19zZWN0aW9uKHhlbl9kb21pZCwg c3RhdGUtPmlvc2VydmlkLCBzZWN0aW9uKTsKKworICAgIG1lbW9yeV9yZWdpb25fdW5yZWYobXIp OworfQorCitzdGF0aWMgdm9pZCB4ZW5fZGV2aWNlX3JlYWxpemUoRGV2aWNlTGlzdGVuZXIgKmxp c3RlbmVyLAorCQkJICAgICAgIERldmljZVN0YXRlICpkZXYpCit7CisgICAgWGVuSU9TdGF0ZSAq c3RhdGUgPSBjb250YWluZXJfb2YobGlzdGVuZXIsIFhlbklPU3RhdGUsIGRldmljZV9saXN0ZW5l cik7CisKKyAgICBpZiAob2JqZWN0X2R5bmFtaWNfY2FzdChPQkpFQ1QoZGV2KSwgVFlQRV9QQ0lf REVWSUNFKSkgeworICAgICAgICBQQ0lEZXZpY2UgKnBjaV9kZXYgPSBQQ0lfREVWSUNFKGRldik7 CisKKyAgICAgICAgeGVuX21hcF9wY2lkZXYoeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsIHBj aV9kZXYpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgeGVuX2RldmljZV91bnJlYWxpemUoRGV2 aWNlTGlzdGVuZXIgKmxpc3RlbmVyLAorCQkJCSBEZXZpY2VTdGF0ZSAqZGV2KQoreworICAgIFhl bklPU3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKGxpc3RlbmVyLCBYZW5JT1N0YXRlLCBkZXZp Y2VfbGlzdGVuZXIpOworCisgICAgaWYgKG9iamVjdF9keW5hbWljX2Nhc3QoT0JKRUNUKGRldiks IFRZUEVfUENJX0RFVklDRSkpIHsKKyAgICAgICAgUENJRGV2aWNlICpwY2lfZGV2ID0gUENJX0RF VklDRShkZXYpOworCisgICAgICAgIHhlbl91bm1hcF9wY2lkZXYoeGVuX2RvbWlkLCBzdGF0ZS0+ aW9zZXJ2aWQsIHBjaV9kZXYpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgeGVuX3N5bmNfZGly dHlfYml0bWFwKFhlbklPU3RhdGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGh3YWRkciBzdGFydF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJhbV9hZGRyX3Qgc2l6ZSkKK3sKKyAgICBod2FkZHIgbnBhZ2VzID0gc2l6ZSA+PiBUQVJH RVRfUEFHRV9CSVRTOworICAgIGNvbnN0IGludCB3aWR0aCA9IHNpemVvZih1bnNpZ25lZCBsb25n KSAqIDg7CisgICAgdW5zaWduZWQgbG9uZyBiaXRtYXBbRElWX1JPVU5EX1VQKG5wYWdlcywgd2lk dGgpXTsKKyAgICBpbnQgcmMsIGksIGo7CisgICAgY29uc3QgWGVuUGh5c21hcCAqcGh5c21hcCA9 IE5VTEw7CisKKyAgICBwaHlzbWFwID0gZ2V0X3BoeXNtYXBwaW5nKHN0YXRlLCBzdGFydF9hZGRy LCBzaXplKTsKKyAgICBpZiAocGh5c21hcCA9PSBOVUxMKSB7CisgICAgICAgIC8qIG5vdCBoYW5k bGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3RhdGUtPmxvZ19mb3Jf ZGlydHliaXQgPT0gTlVMTCkgeworICAgICAgICBzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCA9IHBo eXNtYXA7CisgICAgfSBlbHNlIGlmIChzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCAhPSBwaHlzbWFw KSB7CisgICAgICAgIC8qIE9ubHkgb25lIHJhbmdlIGZvciBkaXJ0eSBiaXRtYXAgY2FuIGJlIHRy YWNrZWQuICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByYyA9IHhlbl90cmFja19k aXJ0eV92cmFtKHhlbl9kb21pZCwgc3RhcnRfYWRkciA+PiBUQVJHRVRfUEFHRV9CSVRTLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnBhZ2VzLCBiaXRtYXApOworICAgIGlmIChyYyA8 IDApIHsKKyNpZm5kZWYgRU5PREFUQQorI2RlZmluZSBFTk9EQVRBICBFTk9FTlQKKyNlbmRpZgor ICAgICAgICBpZiAoZXJybm8gPT0gRU5PREFUQSkgeworICAgICAgICAgICAgbWVtb3J5X3JlZ2lv bl9zZXRfZGlydHkoZnJhbWVidWZmZXIsIDAsIHNpemUpOworICAgICAgICAgICAgRFBSSU5URigi eGVuOiB0cmFja19kaXJ0eV92cmFtIGZhaWxlZCAoMHgiIFRBUkdFVF9GTVRfcGx4CisgICAgICAg ICAgICAgICAgICAgICIsIDB4IiBUQVJHRVRfRk1UX3BseCAiKTogJXNcbiIsCisgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2FkZHIsIHN0YXJ0X2FkZHIgKyBzaXplLCBzdHJlcnJvcihlcnJubykp OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBp IDwgQVJSQVlfU0laRShiaXRtYXApOyBpKyspIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtYXAg PSBiaXRtYXBbaV07CisgICAgICAgIHdoaWxlIChtYXAgIT0gMCkgeworICAgICAgICAgICAgaiA9 IGN0emwobWFwKTsKKyAgICAgICAgICAgIG1hcCAmPSB+KDF1bCA8PCBqKTsKKyAgICAgICAgICAg IG1lbW9yeV9yZWdpb25fc2V0X2RpcnR5KGZyYW1lYnVmZmVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGkgKiB3aWR0aCArIGopICogVEFSR0VUX1BBR0VfU0laRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9QQUdFX1NJWkUpOworICAg ICAgICB9OworICAgIH0KK30KKworc3RhdGljIHZvaWQgeGVuX2xvZ19zdGFydChNZW1vcnlMaXN0 ZW5lciAqbGlzdGVuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeVJlZ2lvblNl Y3Rpb24gKnNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGQsIGludCBu ZXcpCit7CisgICAgWGVuSU9TdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2YobGlzdGVuZXIsIFhl bklPU3RhdGUsIG1lbW9yeV9saXN0ZW5lcik7CisKKyAgICBpZiAobmV3ICYgfm9sZCAmICgxIDw8 IERJUlRZX01FTU9SWV9WR0EpKSB7CisgICAgICAgIHhlbl9zeW5jX2RpcnR5X2JpdG1hcChzdGF0 ZSwgc2VjdGlvbi0+b2Zmc2V0X3dpdGhpbl9hZGRyZXNzX3NwYWNlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50MTI4X2dldDY0KHNlY3Rpb24tPnNpemUpKTsKKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkIHhlbl9sb2dfc3RvcChNZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIsIE1lbW9y eVJlZ2lvblNlY3Rpb24gKnNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9s ZCwgaW50IG5ldykKK3sKKyAgICBYZW5JT1N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZihsaXN0 ZW5lciwgWGVuSU9TdGF0ZSwgbWVtb3J5X2xpc3RlbmVyKTsKKworICAgIGlmIChvbGQgJiB+bmV3 ICYgKDEgPDwgRElSVFlfTUVNT1JZX1ZHQSkpIHsKKyAgICAgICAgc3RhdGUtPmxvZ19mb3JfZGly dHliaXQgPSBOVUxMOworICAgICAgICAvKiBEaXNhYmxlIGRpcnR5IGJpdCB0cmFja2luZyAqLwor ICAgICAgICB4ZW5fdHJhY2tfZGlydHlfdnJhbSh4ZW5fZG9taWQsIDAsIDAsIE5VTEwpOworICAg IH0KK30KKworc3RhdGljIHZvaWQgeGVuX2xvZ19zeW5jKE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5l ciwgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbikKK3sKKyAgICBYZW5JT1N0YXRlICpzdGF0 ZSA9IGNvbnRhaW5lcl9vZihsaXN0ZW5lciwgWGVuSU9TdGF0ZSwgbWVtb3J5X2xpc3RlbmVyKTsK KworICAgIHhlbl9zeW5jX2RpcnR5X2JpdG1hcChzdGF0ZSwgc2VjdGlvbi0+b2Zmc2V0X3dpdGhp bl9hZGRyZXNzX3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQxMjhfZ2V0NjQo c2VjdGlvbi0+c2l6ZSkpOworfQorCitzdGF0aWMgdm9pZCB4ZW5fbG9nX2dsb2JhbF9zdGFydChN ZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIpCit7CisgICAgaWYgKHhlbl9lbmFibGVkKCkpIHsKKyAg ICAgICAgeGVuX2luX21pZ3JhdGlvbiA9IHRydWU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB4 ZW5fbG9nX2dsb2JhbF9zdG9wKE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5lcikKK3sKKyAgICB4ZW5f aW5fbWlncmF0aW9uID0gZmFsc2U7Cit9CisKK3N0YXRpYyBNZW1vcnlMaXN0ZW5lciB4ZW5fbWVt b3J5X2xpc3RlbmVyID0geworICAgIC5yZWdpb25fYWRkID0geGVuX3JlZ2lvbl9hZGQsCisgICAg LnJlZ2lvbl9kZWwgPSB4ZW5fcmVnaW9uX2RlbCwKKyAgICAubG9nX3N0YXJ0ID0geGVuX2xvZ19z dGFydCwKKyAgICAubG9nX3N0b3AgPSB4ZW5fbG9nX3N0b3AsCisgICAgLmxvZ19zeW5jID0geGVu X2xvZ19zeW5jLAorICAgIC5sb2dfZ2xvYmFsX3N0YXJ0ID0geGVuX2xvZ19nbG9iYWxfc3RhcnQs CisgICAgLmxvZ19nbG9iYWxfc3RvcCA9IHhlbl9sb2dfZ2xvYmFsX3N0b3AsCisgICAgLnByaW9y aXR5ID0gMTAsCit9OworCitzdGF0aWMgTWVtb3J5TGlzdGVuZXIgeGVuX2lvX2xpc3RlbmVyID0g eworICAgIC5yZWdpb25fYWRkID0geGVuX2lvX2FkZCwKKyAgICAucmVnaW9uX2RlbCA9IHhlbl9p b19kZWwsCisgICAgLnByaW9yaXR5ID0gMTAsCit9OworCitzdGF0aWMgRGV2aWNlTGlzdGVuZXIg eGVuX2RldmljZV9saXN0ZW5lciA9IHsKKyAgICAucmVhbGl6ZSA9IHhlbl9kZXZpY2VfcmVhbGl6 ZSwKKyAgICAudW5yZWFsaXplID0geGVuX2RldmljZV91bnJlYWxpemUsCit9OworCisvKiBnZXQg dGhlIGlvcmVxIHBhY2tldHMgZnJvbSBzaGFyZSBtZW0gKi8KK3N0YXRpYyBpb3JlcV90ICpjcHVf Z2V0X2lvcmVxX2Zyb21fc2hhcmVkX21lbW9yeShYZW5JT1N0YXRlICpzdGF0ZSwgaW50IHZjcHUp Cit7CisgICAgaW9yZXFfdCAqcmVxID0geGVuX3ZjcHVfaW9yZXEoc3RhdGUtPnNoYXJlZF9wYWdl LCB2Y3B1KTsKKworICAgIGlmIChyZXEtPnN0YXRlICE9IFNUQVRFX0lPUkVRX1JFQURZKSB7Cisg ICAgICAgIERQUklOVEYoIkkvTyByZXF1ZXN0IG5vdCByZWFkeTogIgorICAgICAgICAgICAgICAg ICIleCwgcHRyOiAleCwgcG9ydDogJSJQUkl4NjQiLCAiCisgICAgICAgICAgICAgICAgImRhdGE6 ICUiUFJJeDY0IiwgY291bnQ6ICV1LCBzaXplOiAldVxuIiwKKyAgICAgICAgICAgICAgICByZXEt PnN0YXRlLCByZXEtPmRhdGFfaXNfcHRyLCByZXEtPmFkZHIsCisgICAgICAgICAgICAgICAgcmVx LT5kYXRhLCByZXEtPmNvdW50LCByZXEtPnNpemUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAg ICB9CisKKyAgICB4ZW5fcm1iKCk7IC8qIHNlZSBJT1JFUV9SRUFEWSAvdGhlbi8gcmVhZCBjb250 ZW50cyBvZiBpb3JlcSAqLworCisgICAgcmVxLT5zdGF0ZSA9IFNUQVRFX0lPUkVRX0lOUFJPQ0VT UzsKKyAgICByZXR1cm4gcmVxOworfQorCisvKiB1c2UgcG9sbCB0byBnZXQgdGhlIHBvcnQgbm90 aWZpY2F0aW9uICovCisvKiBpb3JlcV92ZWMtLW91dCx0aGUgKi8KKy8qIHJldHZhbC0tdGhlIG51 bWJlciBvZiBpb3JlcSBwYWNrZXQgKi8KK3N0YXRpYyBpb3JlcV90ICpjcHVfZ2V0X2lvcmVxKFhl bklPU3RhdGUgKnN0YXRlKQoreworICAgIGludCBpOworICAgIGV2dGNobl9wb3J0X3QgcG9ydDsK KworICAgIHBvcnQgPSB4ZW5ldnRjaG5fcGVuZGluZyhzdGF0ZS0+eGNlX2hhbmRsZSk7CisgICAg aWYgKHBvcnQgPT0gc3RhdGUtPmJ1ZmlvcmVxX2xvY2FsX3BvcnQpIHsKKyAgICAgICAgdGltZXJf bW9kKHN0YXRlLT5idWZmZXJlZF9pb190aW1lciwKKyAgICAgICAgICAgICAgICBCVUZGRVJfSU9f TUFYX0RFTEFZICsgcWVtdV9jbG9ja19nZXRfbXMoUUVNVV9DTE9DS19SRUFMVElNRSkpOworICAg ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocG9ydCAhPSAtMSkgeworICAgICAg ICBmb3IgKGkgPSAwOyBpIDwgbWF4X2NwdXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHN0YXRl LT5pb3JlcV9sb2NhbF9wb3J0W2ldID09IHBvcnQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID09IG1heF9jcHVzKSB7 CisgICAgICAgICAgICBod19lcnJvcigiRmF0YWwgZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGdldCBp byBldmVudCFcbiIpOworICAgICAgICB9CisKKyAgICAgICAgLyogdW5tYXNrIHRoZSB3YW50ZWQg cG9ydCBhZ2FpbiAqLworICAgICAgICB4ZW5ldnRjaG5fdW5tYXNrKHN0YXRlLT54Y2VfaGFuZGxl LCBwb3J0KTsKKworICAgICAgICAvKiBnZXQgdGhlIGlvIHBhY2tldCBmcm9tIHNoYXJlZCBtZW1v cnkgKi8KKyAgICAgICAgc3RhdGUtPnNlbmRfdmNwdSA9IGk7CisgICAgICAgIHJldHVybiBjcHVf Z2V0X2lvcmVxX2Zyb21fc2hhcmVkX21lbW9yeShzdGF0ZSwgaSk7CisgICAgfQorCisgICAgLyog cmVhZCBlcnJvciBvciByZWFkIG5vdGhpbmcgKi8KKyAgICByZXR1cm4gTlVMTDsKK30KKworc3Rh dGljIHVpbnQzMl90IGRvX2lucCh1aW50MzJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCit7 CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVy biBjcHVfaW5iKGFkZHIpOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gY3B1 X2ludyhhZGRyKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIGNwdV9pbmwo YWRkcik7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBod19lcnJvcigiaW5wOiBiYWQg c2l6ZTogJTA0eCAlbHgiLCBhZGRyLCBzaXplKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRv X291dHAodWludDMyX3QgYWRkciwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1aW50MzJf dCB2YWwpCit7CisgICAgc3dpdGNoIChzaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg ICAgIHJldHVybiBjcHVfb3V0YihhZGRyLCB2YWwpOworICAgICAgICBjYXNlIDI6CisgICAgICAg ICAgICByZXR1cm4gY3B1X291dHcoYWRkciwgdmFsKTsKKyAgICAgICAgY2FzZSA0OgorICAgICAg ICAgICAgcmV0dXJuIGNwdV9vdXRsKGFkZHIsIHZhbCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBod19lcnJvcigib3V0cDogYmFkIHNpemU6ICUwNHggJWx4IiwgYWRkciwgc2l6ZSk7 CisgICAgfQorfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9ucyB3aGljaCByZWFkL3dyaXRlIGFu IG9iamVjdCBmcm9tL3RvIHBoeXNpY2FsIGd1ZXN0CisgKiBtZW1vcnksIGFzIHBhcnQgb2YgdGhl IGltcGxlbWVudGF0aW9uIG9mIGFuIGlvcmVxLgorICoKKyAqIEVxdWl2YWxlbnQgdG8KKyAqICAg Y3B1X3BoeXNpY2FsX21lbW9yeV9ydyhhZGRyICsgKHJlcS0+ZGYgPyAtMSA6ICsxKSAqIHJlcS0+ c2l6ZSAqIGksCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsLCByZXEtPnNpemUsIDAv MSkKKyAqIGV4Y2VwdCB3aXRob3V0IHRoZSBpbnRlZ2VyIG92ZXJmbG93IHByb2JsZW1zLgorICov CitzdGF0aWMgdm9pZCByd19waHlzX3JlcV9pdGVtKGh3YWRkciBhZGRyLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpb3JlcV90ICpyZXEsIHVpbnQzMl90IGksIHZvaWQgKnZhbCwgaW50 IHJ3KQoreworICAgIC8qIERvIGV2ZXJ5dGhpbmcgdW5zaWduZWQgc28gb3ZlcmZsb3cganVzdCBy ZXN1bHRzIGluIGEgdHJ1bmNhdGVkIHJlc3VsdAorICAgICAqIGFuZCBhY2Nlc3NlcyB0byB1bmRl c2lyZWQgcGFydHMgb2YgZ3Vlc3QgbWVtb3J5LCB3aGljaCBpcyB1cAorICAgICAqIHRvIHRoZSBn dWVzdCAqLworICAgIGh3YWRkciBvZmZzZXQgPSAoaHdhZGRyKXJlcS0+c2l6ZSAqIGk7CisgICAg aWYgKHJlcS0+ZGYpIHsKKyAgICAgICAgYWRkciAtPSBvZmZzZXQ7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgYWRkciArPSBvZmZzZXQ7CisgICAgfQorICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfcnco YWRkciwgdmFsLCByZXEtPnNpemUsIHJ3KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlYWRf cGh5c19yZXFfaXRlbShod2FkZHIgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW9yZXFfdCAqcmVxLCB1aW50MzJfdCBpLCB2b2lkICp2YWwpCit7CisgICAgcndf cGh5c19yZXFfaXRlbShhZGRyLCByZXEsIGksIHZhbCwgMCk7Cit9CitzdGF0aWMgaW5saW5lIHZv aWQgd3JpdGVfcGh5c19yZXFfaXRlbShod2FkZHIgYWRkciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlvcmVxX3QgKnJlcSwgdWludDMyX3QgaSwgdm9pZCAqdmFsKQor eworICAgIHJ3X3BoeXNfcmVxX2l0ZW0oYWRkciwgcmVxLCBpLCB2YWwsIDEpOworfQorCisKK3N0 YXRpYyB2b2lkIGNwdV9pb3JlcV9waW8oaW9yZXFfdCAqcmVxKQoreworICAgIHVpbnQzMl90IGk7 CisKKyAgICB0cmFjZV9jcHVfaW9yZXFfcGlvKHJlcSwgcmVxLT5kaXIsIHJlcS0+ZGYsIHJlcS0+ ZGF0YV9pc19wdHIsIHJlcS0+YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmRh dGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSk7CisKKyAgICBpZiAocmVxLT5zaXplID4gc2l6ZW9m KHVpbnQzMl90KSkgeworICAgICAgICBod19lcnJvcigiUElPOiBiYWQgc2l6ZSAoJXUpIiwgcmVx LT5zaXplKTsKKyAgICB9CisKKyAgICBpZiAocmVxLT5kaXIgPT0gSU9SRVFfUkVBRCkgeworICAg ICAgICBpZiAoIXJlcS0+ZGF0YV9pc19wdHIpIHsKKyAgICAgICAgICAgIHJlcS0+ZGF0YSA9IGRv X2lucChyZXEtPmFkZHIsIHJlcS0+c2l6ZSk7CisgICAgICAgICAgICB0cmFjZV9jcHVfaW9yZXFf cGlvX3JlYWRfcmVnKHJlcSwgcmVxLT5kYXRhLCByZXEtPmFkZHIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+c2l6ZSk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICB1aW50MzJfdCB0bXA7CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBy ZXEtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB0bXAgPSBkb19pbnAocmVxLT5hZGRy LCByZXEtPnNpemUpOworICAgICAgICAgICAgICAgIHdyaXRlX3BoeXNfcmVxX2l0ZW0ocmVxLT5k YXRhLCByZXEsIGksICZ0bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNl IGlmIChyZXEtPmRpciA9PSBJT1JFUV9XUklURSkgeworICAgICAgICBpZiAoIXJlcS0+ZGF0YV9p c19wdHIpIHsKKyAgICAgICAgICAgIHRyYWNlX2NwdV9pb3JlcV9waW9fd3JpdGVfcmVnKHJlcSwg cmVxLT5kYXRhLCByZXEtPmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXEtPnNpemUpOworICAgICAgICAgICAgZG9fb3V0cChyZXEtPmFkZHIsIHJlcS0+ c2l6ZSwgcmVxLT5kYXRhKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCByZXEtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB0bXAg PSAwOworCisgICAgICAgICAgICAgICAgcmVhZF9waHlzX3JlcV9pdGVtKHJlcS0+ZGF0YSwgcmVx LCBpLCAmdG1wKTsKKyAgICAgICAgICAgICAgICBkb19vdXRwKHJlcS0+YWRkciwgcmVxLT5zaXpl LCB0bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgdm9p ZCBjcHVfaW9yZXFfbW92ZShpb3JlcV90ICpyZXEpCit7CisgICAgdWludDMyX3QgaTsKKworICAg IHRyYWNlX2NwdV9pb3JlcV9tb3ZlKHJlcSwgcmVxLT5kaXIsIHJlcS0+ZGYsIHJlcS0+ZGF0YV9p c19wdHIsIHJlcS0+YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmRhdGEsIHJl cS0+Y291bnQsIHJlcS0+c2l6ZSk7CisKKyAgICBpZiAocmVxLT5zaXplID4gc2l6ZW9mKHJlcS0+ ZGF0YSkpIHsKKyAgICAgICAgaHdfZXJyb3IoIk1NSU86IGJhZCBzaXplICgldSkiLCByZXEtPnNp emUpOworICAgIH0KKworICAgIGlmICghcmVxLT5kYXRhX2lzX3B0cikgeworICAgICAgICBpZiAo cmVxLT5kaXIgPT0gSU9SRVFfUkVBRCkgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJl cS0+Y291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHJlYWRfcGh5c19yZXFfaXRlbShyZXEt PmFkZHIsIHJlcSwgaSwgJnJlcS0+ZGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAocmVxLT5kaXIgPT0gSU9SRVFfV1JJVEUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCByZXEtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICB3cml0ZV9waHlzX3JlcV9p dGVtKHJlcS0+YWRkciwgcmVxLCBpLCAmcmVxLT5kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHVpbnQ2NF90IHRtcDsKKworICAgICAgICBpZiAo cmVxLT5kaXIgPT0gSU9SRVFfUkVBRCkgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJl cS0+Y291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIHJlYWRfcGh5c19yZXFfaXRlbShyZXEt PmFkZHIsIHJlcSwgaSwgJnRtcCk7CisgICAgICAgICAgICAgICAgd3JpdGVfcGh5c19yZXFfaXRl bShyZXEtPmRhdGEsIHJlcSwgaSwgJnRtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz ZSBpZiAocmVxLT5kaXIgPT0gSU9SRVFfV1JJVEUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCByZXEtPmNvdW50OyBpKyspIHsKKyAgICAgICAgICAgICAgICByZWFkX3BoeXNfcmVxX2l0 ZW0ocmVxLT5kYXRhLCByZXEsIGksICZ0bXApOworICAgICAgICAgICAgICAgIHdyaXRlX3BoeXNf cmVxX2l0ZW0ocmVxLT5hZGRyLCByZXEsIGksICZ0bXApOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCByZWdzX3RvX2NwdSh2bXdhcmVfcmVnc190ICp2 bXBvcnRfcmVncywgaW9yZXFfdCAqcmVxKQoreworICAgIFg4NkNQVSAqY3B1OworICAgIENQVVg4 NlN0YXRlICplbnY7CisKKyAgICBjcHUgPSBYODZfQ1BVKGN1cnJlbnRfY3B1KTsKKyAgICBlbnYg PSAmY3B1LT5lbnY7CisgICAgZW52LT5yZWdzW1JfRUFYXSA9IHJlcS0+ZGF0YTsKKyAgICBlbnYt PnJlZ3NbUl9FQlhdID0gdm1wb3J0X3JlZ3MtPmVieDsKKyAgICBlbnYtPnJlZ3NbUl9FQ1hdID0g dm1wb3J0X3JlZ3MtPmVjeDsKKyAgICBlbnYtPnJlZ3NbUl9FRFhdID0gdm1wb3J0X3JlZ3MtPmVk eDsKKyAgICBlbnYtPnJlZ3NbUl9FU0ldID0gdm1wb3J0X3JlZ3MtPmVzaTsKKyAgICBlbnYtPnJl Z3NbUl9FREldID0gdm1wb3J0X3JlZ3MtPmVkaTsKK30KKworc3RhdGljIHZvaWQgcmVnc19mcm9t X2NwdSh2bXdhcmVfcmVnc190ICp2bXBvcnRfcmVncykKK3sKKyAgICBYODZDUFUgKmNwdSA9IFg4 Nl9DUFUoY3VycmVudF9jcHUpOworICAgIENQVVg4NlN0YXRlICplbnYgPSAmY3B1LT5lbnY7CisK KyAgICB2bXBvcnRfcmVncy0+ZWJ4ID0gZW52LT5yZWdzW1JfRUJYXTsKKyAgICB2bXBvcnRfcmVn cy0+ZWN4ID0gZW52LT5yZWdzW1JfRUNYXTsKKyAgICB2bXBvcnRfcmVncy0+ZWR4ID0gZW52LT5y ZWdzW1JfRURYXTsKKyAgICB2bXBvcnRfcmVncy0+ZXNpID0gZW52LT5yZWdzW1JfRVNJXTsKKyAg ICB2bXBvcnRfcmVncy0+ZWRpID0gZW52LT5yZWdzW1JfRURJXTsKK30KKworc3RhdGljIHZvaWQg aGFuZGxlX3ZtcG9ydF9pb3JlcShYZW5JT1N0YXRlICpzdGF0ZSwgaW9yZXFfdCAqcmVxKQorewor ICAgIHZtd2FyZV9yZWdzX3QgKnZtcG9ydF9yZWdzOworCisgICAgYXNzZXJ0KHN0YXRlLT5zaGFy ZWRfdm1wb3J0X3BhZ2UpOworICAgIHZtcG9ydF9yZWdzID0KKyAgICAgICAgJnN0YXRlLT5zaGFy ZWRfdm1wb3J0X3BhZ2UtPnZjcHVfdm1wb3J0X3JlZ3Nbc3RhdGUtPnNlbmRfdmNwdV07CisgICAg UUVNVV9CVUlMRF9CVUdfT04oc2l6ZW9mKCpyZXEpIDwgc2l6ZW9mKCp2bXBvcnRfcmVncykpOwor CisgICAgY3VycmVudF9jcHUgPSBzdGF0ZS0+Y3B1X2J5X3ZjcHVfaWRbc3RhdGUtPnNlbmRfdmNw dV07CisgICAgcmVnc190b19jcHUodm1wb3J0X3JlZ3MsIHJlcSk7CisgICAgY3B1X2lvcmVxX3Bp byhyZXEpOworICAgIHJlZ3NfZnJvbV9jcHUodm1wb3J0X3JlZ3MpOworICAgIGN1cnJlbnRfY3B1 ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX2lvcmVxKFhlbklPU3RhdGUgKnN0YXRl LCBpb3JlcV90ICpyZXEpCit7CisgICAgdHJhY2VfaGFuZGxlX2lvcmVxKHJlcSwgcmVxLT50eXBl LCByZXEtPmRpciwgcmVxLT5kZiwgcmVxLT5kYXRhX2lzX3B0ciwKKyAgICAgICAgICAgICAgICAg ICAgICAgcmVxLT5hZGRyLCByZXEtPmRhdGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSk7CisKKyAg ICBpZiAoIXJlcS0+ZGF0YV9pc19wdHIgJiYgKHJlcS0+ZGlyID09IElPUkVRX1dSSVRFKSAmJgor ICAgICAgICAgICAgKHJlcS0+c2l6ZSA8IHNpemVvZiAodGFyZ2V0X3Vsb25nKSkpIHsKKyAgICAg ICAgcmVxLT5kYXRhICY9ICgodGFyZ2V0X3Vsb25nKSAxIDw8ICg4ICogcmVxLT5zaXplKSkgLSAx OworICAgIH0KKworICAgIGlmIChyZXEtPmRpciA9PSBJT1JFUV9XUklURSkKKyAgICAgICAgdHJh Y2VfaGFuZGxlX2lvcmVxX3dyaXRlKHJlcSwgcmVxLT50eXBlLCByZXEtPmRmLCByZXEtPmRhdGFf aXNfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5hZGRyLCByZXEt PmRhdGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSk7CisKKyAgICBzd2l0Y2ggKHJlcS0+dHlwZSkg eworICAgICAgICBjYXNlIElPUkVRX1RZUEVfUElPOgorICAgICAgICAgICAgY3B1X2lvcmVxX3Bp byhyZXEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSU9SRVFfVFlQRV9DT1BZ OgorICAgICAgICAgICAgY3B1X2lvcmVxX21vdmUocmVxKTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICBjYXNlIElPUkVRX1RZUEVfVk1XQVJFX1BPUlQ6CisgICAgICAgICAgICBoYW5kbGVf dm1wb3J0X2lvcmVxKHN0YXRlLCByZXEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgSU9SRVFfVFlQRV9USU1FT0ZGU0VUOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh c2UgSU9SRVFfVFlQRV9JTlZBTElEQVRFOgorICAgICAgICAgICAgeGVuX2ludmFsaWRhdGVfbWFw X2NhY2hlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJT1JFUV9UWVBFX1BD SV9DT05GSUc6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IHNiZGYgPSByZXEtPmFkZHIgPj4gMzI7 CisgICAgICAgICAgICB1aW50MzJfdCB2YWw7CisKKyAgICAgICAgICAgIC8qIEZha2UgYSB3cml0 ZSB0byBwb3J0IDB4Q0Y4IHNvIHRoYXQKKyAgICAgICAgICAgICAqIHRoZSBjb25maWcgc3BhY2Ug YWNjZXNzIHdpbGwgdGFyZ2V0IHRoZQorICAgICAgICAgICAgICogY29ycmVjdCBkZXZpY2UgbW9k ZWwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHZhbCA9ICgxdSA8PCAzMSkgfAorICAg ICAgICAgICAgICAgICAgKChyZXEtPmFkZHIgJiAweDBmMDApIDw8IDE2KSB8CisgICAgICAgICAg ICAgICAgICAoKHNiZGYgJiAweGZmZmYpIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgIChyZXEt PmFkZHIgJiAweGZjKTsKKyAgICAgICAgICAgIGRvX291dHAoMHhjZjgsIDQsIHZhbCk7CisKKyAg ICAgICAgICAgIC8qIE5vdyBpc3N1ZSB0aGUgY29uZmlnIHNwYWNlIGFjY2VzcyB2aWEKKyAgICAg ICAgICAgICAqIHBvcnQgMHhDRkMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmVxLT5h ZGRyID0gMHhjZmMgfCAocmVxLT5hZGRyICYgMHgwMyk7CisgICAgICAgICAgICBjcHVfaW9yZXFf cGlvKHJlcSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0 OgorICAgICAgICAgICAgaHdfZXJyb3IoIkludmFsaWQgaW9yZXEgdHlwZSAweCV4XG4iLCByZXEt PnR5cGUpOworICAgIH0KKyAgICBpZiAocmVxLT5kaXIgPT0gSU9SRVFfUkVBRCkgeworICAgICAg ICB0cmFjZV9oYW5kbGVfaW9yZXFfcmVhZChyZXEsIHJlcS0+dHlwZSwgcmVxLT5kZiwgcmVxLT5k YXRhX2lzX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxLT5hZGRyLCBy ZXEtPmRhdGEsIHJlcS0+Y291bnQsIHJlcS0+c2l6ZSk7CisgICAgfQorfQorCitzdGF0aWMgaW50 IGhhbmRsZV9idWZmZXJlZF9pb3BhZ2UoWGVuSU9TdGF0ZSAqc3RhdGUpCit7CisgICAgYnVmZmVy ZWRfaW9wYWdlX3QgKmJ1Zl9wYWdlID0gc3RhdGUtPmJ1ZmZlcmVkX2lvX3BhZ2U7CisgICAgYnVm X2lvcmVxX3QgKmJ1Zl9yZXEgPSBOVUxMOworICAgIGlvcmVxX3QgcmVxOworICAgIGludCBxdzsK KworICAgIGlmICghYnVmX3BhZ2UpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg bWVtc2V0KCZyZXEsIDB4MDAsIHNpemVvZihyZXEpKTsKKyAgICByZXEuc3RhdGUgPSBTVEFURV9J T1JFUV9SRUFEWTsKKyAgICByZXEuY291bnQgPSAxOworICAgIHJlcS5kaXIgPSBJT1JFUV9XUklU RTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludDMyX3QgcmRwdHIgPSBidWZfcGFnZS0+ cmVhZF9wb2ludGVyLCB3cnB0cjsKKworICAgICAgICB4ZW5fcm1iKCk7CisgICAgICAgIHdycHRy ID0gYnVmX3BhZ2UtPndyaXRlX3BvaW50ZXI7CisgICAgICAgIHhlbl9ybWIoKTsKKyAgICAgICAg aWYgKHJkcHRyICE9IGJ1Zl9wYWdlLT5yZWFkX3BvaW50ZXIpIHsKKyAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyZHB0ciA9PSB3cnB0cikgeworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnVmX3JlcSA9ICZidWZfcGFnZS0+YnVmX2lv cmVxW3JkcHRyICUgSU9SRVFfQlVGRkVSX1NMT1RfTlVNXTsKKyAgICAgICAgcmVxLnNpemUgPSAx VSA8PCBidWZfcmVxLT5zaXplOworICAgICAgICByZXEuYWRkciA9IGJ1Zl9yZXEtPmFkZHI7Cisg ICAgICAgIHJlcS5kYXRhID0gYnVmX3JlcS0+ZGF0YTsKKyAgICAgICAgcmVxLnR5cGUgPSBidWZf cmVxLT50eXBlOworICAgICAgICB4ZW5fcm1iKCk7CisgICAgICAgIHF3ID0gKHJlcS5zaXplID09 IDgpOworICAgICAgICBpZiAocXcpIHsKKyAgICAgICAgICAgIGlmIChyZHB0ciArIDEgPT0gd3Jw dHIpIHsKKyAgICAgICAgICAgICAgICBod19lcnJvcigiSW5jb21wbGV0ZSBxdWFkIHdvcmQgYnVm ZmVyZWQgaW9yZXEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1Zl9yZXEgPSAmYnVm X3BhZ2UtPmJ1Zl9pb3JlcVsocmRwdHIgKyAxKSAlCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSU9SRVFfQlVGRkVSX1NMT1RfTlVNXTsKKyAgICAgICAgICAgIHJl cS5kYXRhIHw9ICgodWludDY0X3QpYnVmX3JlcS0+ZGF0YSkgPDwgMzI7CisgICAgICAgICAgICB4 ZW5fcm1iKCk7CisgICAgICAgIH0KKworICAgICAgICBoYW5kbGVfaW9yZXEoc3RhdGUsICZyZXEp OworCisgICAgICAgIC8qIE9ubHkgcmVxLmRhdGEgbWF5IGdldCB1cGRhdGVkIGJ5IGhhbmRsZV9p b3JlcSgpLCBhbGJlaXQgZXZlbiB0aGF0CisgICAgICAgICAqIHNob3VsZCBub3QgaGFwcGVuIGFz IHN1Y2ggZGF0YSB3b3VsZCBuZXZlciBtYWtlIGl0IHRvIHRoZSBndWVzdCAod2UKKyAgICAgICAg ICogY2FuIG9ubHkgdXNlZnVsbHkgc2VlIHdyaXRlcyBoZXJlIGFmdGVyIGFsbCkuCisgICAgICAg ICAqLworICAgICAgICBhc3NlcnQocmVxLnN0YXRlID09IFNUQVRFX0lPUkVRX1JFQURZKTsKKyAg ICAgICAgYXNzZXJ0KHJlcS5jb3VudCA9PSAxKTsKKyAgICAgICAgYXNzZXJ0KHJlcS5kaXIgPT0g SU9SRVFfV1JJVEUpOworICAgICAgICBhc3NlcnQoIXJlcS5kYXRhX2lzX3B0cik7CisKKyAgICAg ICAgYXRvbWljX2FkZCgmYnVmX3BhZ2UtPnJlYWRfcG9pbnRlciwgcXcgKyAxKTsKKyAgICB9CisK KyAgICByZXR1cm4gcmVxLmNvdW50OworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYnVmZmVyZWRf aW8odm9pZCAqb3BhcXVlKQoreworICAgIFhlbklPU3RhdGUgKnN0YXRlID0gb3BhcXVlOworCisg ICAgaWYgKGhhbmRsZV9idWZmZXJlZF9pb3BhZ2Uoc3RhdGUpKSB7CisgICAgICAgIHRpbWVyX21v ZChzdGF0ZS0+YnVmZmVyZWRfaW9fdGltZXIsCisgICAgICAgICAgICAgICAgQlVGRkVSX0lPX01B WF9ERUxBWSArIHFlbXVfY2xvY2tfZ2V0X21zKFFFTVVfQ0xPQ0tfUkVBTFRJTUUpKTsKKyAgICB9 IGVsc2UgeworICAgICAgICB0aW1lcl9kZWwoc3RhdGUtPmJ1ZmZlcmVkX2lvX3RpbWVyKTsKKyAg ICAgICAgeGVuZXZ0Y2huX3VubWFzayhzdGF0ZS0+eGNlX2hhbmRsZSwgc3RhdGUtPmJ1ZmlvcmVx X2xvY2FsX3BvcnQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgY3B1X2hhbmRsZV9pb3JlcSh2 b2lkICpvcGFxdWUpCit7CisgICAgWGVuSU9TdGF0ZSAqc3RhdGUgPSBvcGFxdWU7CisgICAgaW9y ZXFfdCAqcmVxID0gY3B1X2dldF9pb3JlcShzdGF0ZSk7CisKKyAgICBoYW5kbGVfYnVmZmVyZWRf aW9wYWdlKHN0YXRlKTsKKyAgICBpZiAocmVxKSB7CisgICAgICAgIGlvcmVxX3QgY29weSA9ICpy ZXE7CisKKyAgICAgICAgeGVuX3JtYigpOworICAgICAgICBoYW5kbGVfaW9yZXEoc3RhdGUsICZj b3B5KTsKKyAgICAgICAgcmVxLT5kYXRhID0gY29weS5kYXRhOworCisgICAgICAgIGlmIChyZXEt PnN0YXRlICE9IFNUQVRFX0lPUkVRX0lOUFJPQ0VTUykgeworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsICJCYWRuZXNzIGluIEkvTyByZXF1ZXN0IC4uLiBub3QgaW4gc2VydmljZT8hOiAiCisg ICAgICAgICAgICAgICAgICAgICIleCwgcHRyOiAleCwgcG9ydDogJSJQUkl4NjQiLCAiCisgICAg ICAgICAgICAgICAgICAgICJkYXRhOiAlIlBSSXg2NCIsIGNvdW50OiAldSwgc2l6ZTogJXUsIHR5 cGU6ICV1XG4iLAorICAgICAgICAgICAgICAgICAgICByZXEtPnN0YXRlLCByZXEtPmRhdGFfaXNf cHRyLCByZXEtPmFkZHIsCisgICAgICAgICAgICAgICAgICAgIHJlcS0+ZGF0YSwgcmVxLT5jb3Vu dCwgcmVxLT5zaXplLCByZXEtPnR5cGUpOworICAgICAgICAgICAgZGVzdHJveV9odm1fZG9tYWlu KGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHhlbl93 bWIoKTsgLyogVXBkYXRlIGlvcmVxIGNvbnRlbnRzIC90aGVuLyB1cGRhdGUgc3RhdGUuICovCisK KyAgICAgICAgLyoKKyAgICAgICAgICogV2UgZG8gdGhpcyBiZWZvcmUgd2Ugc2VuZCB0aGUgcmVz cG9uc2Ugc28gdGhhdCB0aGUgdG9vbHMKKyAgICAgICAgICogaGF2ZSB0aGUgb3Bwb3J0dW5pdHkg dG8gcGljayB1cCBvbiB0aGUgcmVzZXQgYmVmb3JlIHRoZQorICAgICAgICAgKiBndWVzdCByZXN1 bWVzIGFuZCBkb2VzIGEgaGx0IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCB3aGljaAorICAgICAg ICAgKiBjYXVzZXMgWGVuIHRvIHBvd2VyZG93biB0aGUgZG9tYWluLgorICAgICAgICAgKi8KKyAg ICAgICAgaWYgKHJ1bnN0YXRlX2lzX3J1bm5pbmcoKSkgeworICAgICAgICAgICAgaWYgKHFlbXVf c2h1dGRvd25fcmVxdWVzdGVkX2dldCgpKSB7CisgICAgICAgICAgICAgICAgZGVzdHJveV9odm1f ZG9tYWluKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChxZW11X3Jlc2V0 X3JlcXVlc3RlZF9nZXQoKSkgeworICAgICAgICAgICAgICAgIHFlbXVfc3lzdGVtX3Jlc2V0KFZN UkVTRVRfUkVQT1JUKTsKKyAgICAgICAgICAgICAgICBkZXN0cm95X2h2bV9kb21haW4odHJ1ZSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXEtPnN0YXRlID0gU1RBVEVf SU9SRVNQX1JFQURZOworICAgICAgICB4ZW5ldnRjaG5fbm90aWZ5KHN0YXRlLT54Y2VfaGFuZGxl LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pb3JlcV9sb2NhbF9wb3J0W3N0YXRl LT5zZW5kX3ZjcHVdKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHhlbl9tYWluX2xvb3BfcHJl cGFyZShYZW5JT1N0YXRlICpzdGF0ZSkKK3sKKyAgICBpbnQgZXZ0Y2huX2ZkID0gLTE7CisKKyAg ICBpZiAoc3RhdGUtPnhjZV9oYW5kbGUgIT0gTlVMTCkgeworICAgICAgICBldnRjaG5fZmQgPSB4 ZW5ldnRjaG5fZmQoc3RhdGUtPnhjZV9oYW5kbGUpOworICAgIH0KKworICAgIHN0YXRlLT5idWZm ZXJlZF9pb190aW1lciA9IHRpbWVyX25ld19tcyhRRU1VX0NMT0NLX1JFQUxUSU1FLCBoYW5kbGVf YnVmZmVyZWRfaW8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhdGUpOworCisgICAgaWYgKGV2dGNobl9mZCAhPSAtMSkgeworICAgICAgICBDUFVT dGF0ZSAqY3B1X3N0YXRlOworCisgICAgICAgIERQUklOVEYoIiVzOiBJbml0IGNwdV9ieV92Y3B1 X2lkXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgIENQVV9GT1JFQUNIKGNwdV9zdGF0ZSkgeworICAg ICAgICAgICAgRFBSSU5URigiJXM6IGNwdV9ieV92Y3B1X2lkWyVkXT0lcFxuIiwKKyAgICAgICAg ICAgICAgICAgICAgX19mdW5jX18sIGNwdV9zdGF0ZS0+Y3B1X2luZGV4LCBjcHVfc3RhdGUpOwor ICAgICAgICAgICAgc3RhdGUtPmNwdV9ieV92Y3B1X2lkW2NwdV9zdGF0ZS0+Y3B1X2luZGV4XSA9 IGNwdV9zdGF0ZTsKKyAgICAgICAgfQorICAgICAgICBxZW11X3NldF9mZF9oYW5kbGVyKGV2dGNo bl9mZCwgY3B1X2hhbmRsZV9pb3JlcSwgTlVMTCwgc3RhdGUpOworICAgIH0KK30KKworCitzdGF0 aWMgdm9pZCB4ZW5faHZtX2NoYW5nZV9zdGF0ZV9oYW5kbGVyKHZvaWQgKm9wYXF1ZSwgaW50IHJ1 bm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1blN0YXRl IHJzdGF0ZSkKK3sKKyAgICBYZW5JT1N0YXRlICpzdGF0ZSA9IG9wYXF1ZTsKKworICAgIGlmIChy dW5uaW5nKSB7CisgICAgICAgIHhlbl9tYWluX2xvb3BfcHJlcGFyZShzdGF0ZSk7CisgICAgfQor CisgICAgeGVuX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUoeGVuX2RvbWlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5pb3NlcnZpZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAocnN0YXRlID09IFJVTl9TVEFURV9SVU5OSU5HKSk7Cit9CisKK3N0YXRpYyB2 b2lkIHhlbl9leGl0X25vdGlmaWVyKE5vdGlmaWVyICpuLCB2b2lkICpkYXRhKQoreworICAgIFhl bklPU3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKG4sIFhlbklPU3RhdGUsIGV4aXQpOworCisg ICAgeGVuZXZ0Y2huX2Nsb3NlKHN0YXRlLT54Y2VfaGFuZGxlKTsKKyAgICB4c19kYWVtb25fY2xv c2Uoc3RhdGUtPnhlbnN0b3JlKTsKK30KKworc3RhdGljIHZvaWQgeGVuX3JlYWRfcGh5c21hcChY ZW5JT1N0YXRlICpzdGF0ZSkKK3sKKyAgICBYZW5QaHlzbWFwICpwaHlzbWFwID0gTlVMTDsKKyAg ICB1bnNpZ25lZCBpbnQgbGVuLCBudW0sIGk7CisgICAgY2hhciBwYXRoWzgwXSwgKnZhbHVlID0g TlVMTDsKKyAgICBjaGFyICoqZW50cmllcyA9IE5VTEw7CisKKyAgICBzbnByaW50ZihwYXRoLCBz aXplb2YocGF0aCksCisgICAgICAgICAgICAiL2xvY2FsL2RvbWFpbi8wL2RldmljZS1tb2RlbC8l ZC9waHlzbWFwIiwgeGVuX2RvbWlkKTsKKyAgICBlbnRyaWVzID0geHNfZGlyZWN0b3J5KHN0YXRl LT54ZW5zdG9yZSwgMCwgcGF0aCwgJm51bSk7CisgICAgaWYgKGVudHJpZXMgPT0gTlVMTCkKKyAg ICAgICAgcmV0dXJuOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAg IHBoeXNtYXAgPSBnX21hbGxvYyhzaXplb2YgKFhlblBoeXNtYXApKTsKKyAgICAgICAgcGh5c21h cC0+cGh5c19vZmZzZXQgPSBzdHJ0b3VsbChlbnRyaWVzW2ldLCBOVUxMLCAxNik7CisgICAgICAg IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwKKyAgICAgICAgICAgICAgICAiL2xvY2FsL2Rv bWFpbi8wL2RldmljZS1tb2RlbC8lZC9waHlzbWFwLyVzL3N0YXJ0X2FkZHIiLAorICAgICAgICAg ICAgICAgIHhlbl9kb21pZCwgZW50cmllc1tpXSk7CisgICAgICAgIHZhbHVlID0geHNfcmVhZChz dGF0ZS0+eGVuc3RvcmUsIDAsIHBhdGgsICZsZW4pOworICAgICAgICBpZiAodmFsdWUgPT0gTlVM TCkgeworICAgICAgICAgICAgZ19mcmVlKHBoeXNtYXApOworICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIH0KKyAgICAgICAgcGh5c21hcC0+c3RhcnRfYWRkciA9IHN0cnRvdWxsKHZhbHVl LCBOVUxMLCAxNik7CisgICAgICAgIGZyZWUodmFsdWUpOworCisgICAgICAgIHNucHJpbnRmKHBh dGgsIHNpemVvZihwYXRoKSwKKyAgICAgICAgICAgICAgICAiL2xvY2FsL2RvbWFpbi8wL2Rldmlj ZS1tb2RlbC8lZC9waHlzbWFwLyVzL3NpemUiLAorICAgICAgICAgICAgICAgIHhlbl9kb21pZCwg ZW50cmllc1tpXSk7CisgICAgICAgIHZhbHVlID0geHNfcmVhZChzdGF0ZS0+eGVuc3RvcmUsIDAs IHBhdGgsICZsZW4pOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAg Z19mcmVlKHBoeXNtYXApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg ICAgcGh5c21hcC0+c2l6ZSA9IHN0cnRvdWxsKHZhbHVlLCBOVUxMLCAxNik7CisgICAgICAgIGZy ZWUodmFsdWUpOworCisgICAgICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwKKyAgICAg ICAgICAgICAgICAiL2xvY2FsL2RvbWFpbi8wL2RldmljZS1tb2RlbC8lZC9waHlzbWFwLyVzL25h bWUiLAorICAgICAgICAgICAgICAgIHhlbl9kb21pZCwgZW50cmllc1tpXSk7CisgICAgICAgIHBo eXNtYXAtPm5hbWUgPSB4c19yZWFkKHN0YXRlLT54ZW5zdG9yZSwgMCwgcGF0aCwgJmxlbik7CisK KyAgICAgICAgUUxJU1RfSU5TRVJUX0hFQUQoJnN0YXRlLT5waHlzbWFwLCBwaHlzbWFwLCBsaXN0 KTsKKyAgICB9CisgICAgZnJlZShlbnRyaWVzKTsKK30KKworc3RhdGljIHZvaWQgeGVuX3dha2V1 cF9ub3RpZmllcihOb3RpZmllciAqbm90aWZpZXIsIHZvaWQgKmRhdGEpCit7CisgICAgeGNfc2V0 X2h2bV9wYXJhbSh4ZW5feGMsIHhlbl9kb21pZCwgSFZNX1BBUkFNX0FDUElfU19TVEFURSwgMCk7 Cit9CisKK3ZvaWQgeGVuX2h2bV9pbml0KFBDTWFjaGluZVN0YXRlICpwY21zLCBNZW1vcnlSZWdp b24gKipyYW1fbWVtb3J5KQoreworICAgIGludCBpLCByYzsKKyAgICB4ZW5fcGZuX3QgaW9yZXFf cGZuOworICAgIHhlbl9wZm5fdCBidWZpb3JlcV9wZm47CisgICAgZXZ0Y2huX3BvcnRfdCBidWZp b3JlcV9ldnRjaG47CisgICAgWGVuSU9TdGF0ZSAqc3RhdGU7CisKKyAgICBzdGF0ZSA9IGdfbWFs bG9jMChzaXplb2YgKFhlbklPU3RhdGUpKTsKKworICAgIHN0YXRlLT54Y2VfaGFuZGxlID0geGVu ZXZ0Y2huX29wZW4oTlVMTCwgMCk7CisgICAgaWYgKHN0YXRlLT54Y2VfaGFuZGxlID09IE5VTEwp IHsKKyAgICAgICAgcGVycm9yKCJ4ZW46IGV2ZW50IGNoYW5uZWwgb3BlbiIpOworICAgICAgICBn b3RvIGVycjsKKyAgICB9CisKKyAgICBzdGF0ZS0+eGVuc3RvcmUgPSB4c19kYWVtb25fb3Blbigp OworICAgIGlmIChzdGF0ZS0+eGVuc3RvcmUgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoInhl bjogeGVuc3RvcmUgb3BlbiIpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICBpZiAo eGVuX2RvbWlkX3Jlc3RyaWN0KSB7CisgICAgICAgIHJjID0geGVuX3Jlc3RyaWN0KHhlbl9kb21p ZCk7CisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgiZmFp bGVkIHRvIHJlc3RyaWN0OiBlcnJvciAlZCIsIGVycm5vKTsKKyAgICAgICAgICAgIGdvdG8gZXJy OworICAgICAgICB9CisgICAgfQorCisgICAgeGVuX2NyZWF0ZV9pb3JlcV9zZXJ2ZXIoeGVuX2Rv bWlkLCAmc3RhdGUtPmlvc2VydmlkKTsKKworICAgIHN0YXRlLT5leGl0Lm5vdGlmeSA9IHhlbl9l eGl0X25vdGlmaWVyOworICAgIHFlbXVfYWRkX2V4aXRfbm90aWZpZXIoJnN0YXRlLT5leGl0KTsK KworICAgIHN0YXRlLT5zdXNwZW5kLm5vdGlmeSA9IHhlbl9zdXNwZW5kX25vdGlmaWVyOworICAg IHFlbXVfcmVnaXN0ZXJfc3VzcGVuZF9ub3RpZmllcigmc3RhdGUtPnN1c3BlbmQpOworCisgICAg c3RhdGUtPndha2V1cC5ub3RpZnkgPSB4ZW5fd2FrZXVwX25vdGlmaWVyOworICAgIHFlbXVfcmVn aXN0ZXJfd2FrZXVwX25vdGlmaWVyKCZzdGF0ZS0+d2FrZXVwKTsKKworICAgIHJjID0geGVuX2dl dF9pb3JlcV9zZXJ2ZXJfaW5mbyh4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlvcmVxX3BmbiwgJmJ1ZmlvcmVxX3BmbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1ZmlvcmVxX2V2dGNobik7CisgICAg aWYgKHJjIDwgMCkgeworICAgICAgICBlcnJvcl9yZXBvcnQoImZhaWxlZCB0byBnZXQgaW9yZXEg c2VydmVyIGluZm86IGVycm9yICVkIGhhbmRsZT0lcCIsCisgICAgICAgICAgICAgICAgICAgICBl cnJubywgeGVuX3hjKTsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorCisgICAgRFBSSU5URigi c2hhcmVkIHBhZ2UgYXQgcGZuICVseFxuIiwgaW9yZXFfcGZuKTsKKyAgICBEUFJJTlRGKCJidWZm ZXJlZCBpbyBwYWdlIGF0IHBmbiAlbHhcbiIsIGJ1ZmlvcmVxX3Bmbik7CisgICAgRFBSSU5URigi YnVmZmVyZWQgaW8gZXZ0Y2huIGlzICV4XG4iLCBidWZpb3JlcV9ldnRjaG4pOworCisgICAgc3Rh dGUtPnNoYXJlZF9wYWdlID0geGVuZm9yZWlnbm1lbW9yeV9tYXAoeGVuX2ZtZW0sIHhlbl9kb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JF QUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCAmaW9yZXFfcGZuLCBOVUxMKTsKKyAgICBpZiAoc3RhdGUtPnNoYXJlZF9wYWdlID09 IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJtYXAgc2hhcmVkIElPIHBhZ2UgcmV0dXJu ZWQgZXJyb3IgJWQgaGFuZGxlPSVwIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm5vLCB4ZW5f eGMpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICByYyA9IHhlbl9nZXRfdm1wb3J0 X3JlZ3NfcGZuKHhlbl94YywgeGVuX2RvbWlkLCAmaW9yZXFfcGZuKTsKKyAgICBpZiAoIXJjKSB7 CisgICAgICAgIERQUklOVEYoInNoYXJlZCB2bXBvcnQgcGFnZSBhdCBwZm4gJWx4XG4iLCBpb3Jl cV9wZm4pOworICAgICAgICBzdGF0ZS0+c2hhcmVkX3ZtcG9ydF9wYWdlID0KKyAgICAgICAgICAg IHhlbmZvcmVpZ25tZW1vcnlfbWFwKHhlbl9mbWVtLCB4ZW5fZG9taWQsIFBST1RfUkVBRHxQUk9U X1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmlvcmVxX3Bmbiwg TlVMTCk7CisgICAgICAgIGlmIChzdGF0ZS0+c2hhcmVkX3ZtcG9ydF9wYWdlID09IE5VTEwpIHsK KyAgICAgICAgICAgIGVycm9yX3JlcG9ydCgibWFwIHNoYXJlZCB2bXBvcnQgSU8gcGFnZSByZXR1 cm5lZCBlcnJvciAlZCBoYW5kbGU9JXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5v LCB4ZW5feGMpOworICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug aWYgKHJjICE9IC1FTk9TWVMpIHsKKyAgICAgICAgZXJyb3JfcmVwb3J0KCJnZXQgdm1wb3J0IHJl Z3MgcGZuIHJldHVybmVkIGVycm9yICVkLCByYz0lZCIsCisgICAgICAgICAgICAgICAgICAgICBl cnJubywgcmMpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICBzdGF0ZS0+YnVmZmVy ZWRfaW9fcGFnZSA9IHhlbmZvcmVpZ25tZW1vcnlfbWFwKHhlbl9mbWVtLCB4ZW5fZG9taWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JF QUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsICZidWZpb3JlcV9wZm4sIE5VTEwpOworICAgIGlmIChzdGF0ZS0+YnVmZmVy ZWRfaW9fcGFnZSA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX3JlcG9ydCgibWFwIGJ1ZmZlcmVk IElPIHBhZ2UgcmV0dXJuZWQgZXJyb3IgJWQiLCBlcnJubyk7CisgICAgICAgIGdvdG8gZXJyOwor ICAgIH0KKworICAgIC8qIE5vdGU6IGNwdXMgaXMgZW1wdHkgYXQgdGhpcyBwb2ludCBpbiBpbml0 ICovCisgICAgc3RhdGUtPmNwdV9ieV92Y3B1X2lkID0gZ19tYWxsb2MwKG1heF9jcHVzICogc2l6 ZW9mKENQVVN0YXRlICopKTsKKworICAgIHJjID0geGVuX3NldF9pb3JlcV9zZXJ2ZXJfc3RhdGUo eGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsIHRydWUpOworICAgIGlmIChyYyA8IDApIHsKKyAg ICAgICAgZXJyb3JfcmVwb3J0KCJmYWlsZWQgdG8gZW5hYmxlIGlvcmVxIHNlcnZlciBpbmZvOiBl cnJvciAlZCBoYW5kbGU9JXAiLAorICAgICAgICAgICAgICAgICAgICAgZXJybm8sIHhlbl94Yyk7 CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworICAgIHN0YXRlLT5pb3JlcV9sb2NhbF9wb3J0 ID0gZ19tYWxsb2MwKG1heF9jcHVzICogc2l6ZW9mIChldnRjaG5fcG9ydF90KSk7CisKKyAgICAv KiBGSVhNRTogaG93IGFib3V0IGlmIHdlIG92ZXJmbG93IHRoZSBwYWdlIGhlcmU/ICovCisgICAg Zm9yIChpID0gMDsgaSA8IG1heF9jcHVzOyBpKyspIHsKKyAgICAgICAgcmMgPSB4ZW5ldnRjaG5f YmluZF9pbnRlcmRvbWFpbihzdGF0ZS0+eGNlX2hhbmRsZSwgeGVuX2RvbWlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl92Y3B1X2Vwb3J0KHN0YXRlLT5zaGFy ZWRfcGFnZSwgaSkpOworICAgICAgICBpZiAocmMgPT0gLTEpIHsKKyAgICAgICAgICAgIGVycm9y X3JlcG9ydCgic2hhcmVkIGV2dGNobiAlZCBiaW5kIGVycm9yICVkIiwgaSwgZXJybm8pOworICAg ICAgICAgICAgZ290byBlcnI7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmlvcmVxX2xvY2Fs X3BvcnRbaV0gPSByYzsKKyAgICB9CisKKyAgICByYyA9IHhlbmV2dGNobl9iaW5kX2ludGVyZG9t YWluKHN0YXRlLT54Y2VfaGFuZGxlLCB4ZW5fZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBidWZpb3JlcV9ldnRjaG4pOworICAgIGlmIChyYyA9PSAtMSkgeworICAg ICAgICBlcnJvcl9yZXBvcnQoImJ1ZmZlcmVkIGV2dGNobiBiaW5kIGVycm9yICVkIiwgZXJybm8p OworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisgICAgc3RhdGUtPmJ1ZmlvcmVxX2xvY2FsX3Bv cnQgPSByYzsKKworICAgIC8qIEluaXQgUkFNIG1hbmFnZW1lbnQgKi8KKyAgICB4ZW5fbWFwX2Nh Y2hlX2luaXQoeGVuX3BoeXNfb2Zmc2V0X3RvX2dhZGRyLCBzdGF0ZSk7CisgICAgeGVuX3JhbV9p bml0KHBjbXMsIHJhbV9zaXplLCByYW1fbWVtb3J5KTsKKworICAgIHFlbXVfYWRkX3ZtX2NoYW5n ZV9zdGF0ZV9oYW5kbGVyKHhlbl9odm1fY2hhbmdlX3N0YXRlX2hhbmRsZXIsIHN0YXRlKTsKKwor ICAgIHN0YXRlLT5tZW1vcnlfbGlzdGVuZXIgPSB4ZW5fbWVtb3J5X2xpc3RlbmVyOworICAgIFFM SVNUX0lOSVQoJnN0YXRlLT5waHlzbWFwKTsKKyAgICBtZW1vcnlfbGlzdGVuZXJfcmVnaXN0ZXIo JnN0YXRlLT5tZW1vcnlfbGlzdGVuZXIsICZhZGRyZXNzX3NwYWNlX21lbW9yeSk7CisgICAgc3Rh dGUtPmxvZ19mb3JfZGlydHliaXQgPSBOVUxMOworCisgICAgc3RhdGUtPmlvX2xpc3RlbmVyID0g eGVuX2lvX2xpc3RlbmVyOworICAgIG1lbW9yeV9saXN0ZW5lcl9yZWdpc3Rlcigmc3RhdGUtPmlv X2xpc3RlbmVyLCAmYWRkcmVzc19zcGFjZV9pbyk7CisKKyAgICBzdGF0ZS0+ZGV2aWNlX2xpc3Rl bmVyID0geGVuX2RldmljZV9saXN0ZW5lcjsKKyAgICBkZXZpY2VfbGlzdGVuZXJfcmVnaXN0ZXIo JnN0YXRlLT5kZXZpY2VfbGlzdGVuZXIpOworCisgICAgLyogSW5pdGlhbGl6ZSBiYWNrZW5kIGNv cmUgJiBkcml2ZXJzICovCisgICAgaWYgKHhlbl9iZV9pbml0KCkgIT0gMCkgeworICAgICAgICBl cnJvcl9yZXBvcnQoInhlbiBiYWNrZW5kIGNvcmUgc2V0dXAgZmFpbGVkIik7CisgICAgICAgIGdv dG8gZXJyOworICAgIH0KKyAgICB4ZW5fYmVfcmVnaXN0ZXJfY29tbW9uKCk7CisgICAgeGVuX3Jl YWRfcGh5c21hcChzdGF0ZSk7CisKKyAgICAvKiBEaXNhYmxlIEFDUEkgYnVpbGQgYmVjYXVzZSBY ZW4gaGFuZGxlcyBpdCAqLworICAgIHBjbXMtPmFjcGlfYnVpbGRfZW5hYmxlZCA9IGZhbHNlOwor CisgICAgcmV0dXJuOworCitlcnI6CisgICAgZXJyb3JfcmVwb3J0KCJ4ZW4gaGFyZHdhcmUgdmly dHVhbCBtYWNoaW5lIGluaXRpYWxpc2F0aW9uIGZhaWxlZCIpOworICAgIGV4aXQoMSk7Cit9CisK K3ZvaWQgZGVzdHJveV9odm1fZG9tYWluKGJvb2wgcmVib290KQoreworICAgIHhjX2ludGVyZmFj ZSAqeGNfaGFuZGxlOworICAgIGludCBzdHM7CisKKyAgICB4Y19oYW5kbGUgPSB4Y19pbnRlcmZh Y2Vfb3BlbigwLCAwLCAwKTsKKyAgICBpZiAoeGNfaGFuZGxlID09IE5VTEwpIHsKKyAgICAgICAg ZnByaW50ZihzdGRlcnIsICJDYW5ub3QgYWNxdWlyZSB4ZW5jdHJsIGhhbmRsZVxuIik7CisgICAg fSBlbHNlIHsKKyAgICAgICAgc3RzID0geGNfZG9tYWluX3NodXRkb3duKHhjX2hhbmRsZSwgeGVu X2RvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVib290ID8gU0hVVERP V05fcmVib290IDogU0hVVERPV05fcG93ZXJvZmYpOworICAgICAgICBpZiAoc3RzICE9IDApIHsK KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAieGNfZG9tYWluX3NodXRkb3duIGZhaWxlZCB0 byBpc3N1ZSAlcywgIgorICAgICAgICAgICAgICAgICAgICAic3RzICVkLCAlc1xuIiwgcmVib290 ID8gInJlYm9vdCIgOiAicG93ZXJvZmYiLAorICAgICAgICAgICAgICAgICAgICBzdHMsIHN0cmVy cm9yKGVycm5vKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIklzc3VlZCBkb21haW4gJWQgJXNcbiIsIHhlbl9kb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgcmVib290ID8gInJlYm9vdCIgOiAicG93ZXJvZmYiKTsKKyAgICAgICAgfQorICAgICAgICB4 Y19pbnRlcmZhY2VfY2xvc2UoeGNfaGFuZGxlKTsKKyAgICB9Cit9CisKK3ZvaWQgeGVuX3JlZ2lz dGVyX2ZyYW1lYnVmZmVyKE1lbW9yeVJlZ2lvbiAqbXIpCit7CisgICAgZnJhbWVidWZmZXIgPSBt cjsKK30KKwordm9pZCB4ZW5fc2h1dGRvd25fZmF0YWxfZXJyb3IoY29uc3QgY2hhciAqZm10LCAu Li4pCit7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBmbXQpOworICAgIHZm cHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICBmcHJpbnRmKHN0 ZGVyciwgIldpbGwgZGVzdHJveSB0aGUgZG9tYWluLlxuIik7CisgICAgLyogZGVzdHJveSB0aGUg ZG9tYWluICovCisgICAgcWVtdV9zeXN0ZW1fc2h1dGRvd25fcmVxdWVzdCgpOworfQorCit2b2lk IHhlbl9odm1fbW9kaWZpZWRfbWVtb3J5KHJhbV9hZGRyX3Qgc3RhcnQsIHJhbV9hZGRyX3QgbGVu Z3RoKQoreworICAgIGlmICh1bmxpa2VseSh4ZW5faW5fbWlncmF0aW9uKSkgeworICAgICAgICBp bnQgcmM7CisgICAgICAgIHJhbV9hZGRyX3Qgc3RhcnRfcGZuLCBuYl9wYWdlczsKKworICAgICAg ICBpZiAobGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IFRBUkdFVF9QQUdFX1NJ WkU7CisgICAgICAgIH0KKyAgICAgICAgc3RhcnRfcGZuID0gc3RhcnQgPj4gVEFSR0VUX1BBR0Vf QklUUzsKKyAgICAgICAgbmJfcGFnZXMgPSAoKHN0YXJ0ICsgbGVuZ3RoICsgVEFSR0VUX1BBR0Vf U0laRSAtIDEpID4+IFRBUkdFVF9QQUdFX0JJVFMpCisgICAgICAgICAgICAtIHN0YXJ0X3BmbjsK KyAgICAgICAgcmMgPSB4ZW5fbW9kaWZpZWRfbWVtb3J5KHhlbl9kb21pZCwgc3RhcnRfcGZuLCBu Yl9wYWdlcyk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs CisgICAgICAgICAgICAgICAgICAgICIlcyBmYWlsZWQgZm9yICJSQU1fQUREUl9GTVQiICgiUkFN X0FERFJfRk1UIik6ICVpLCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIHN0 YXJ0LCBuYl9wYWdlcywgcmMsIHN0cmVycm9yKC1yYykpOworICAgICAgICB9CisgICAgfQorfQor Cit2b2lkIHFtcF94ZW5fc2V0X2dsb2JhbF9kaXJ0eV9sb2coYm9vbCBlbmFibGUsIEVycm9yICoq ZXJycCkKK3sKKyAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgIG1lbW9yeV9nbG9iYWxfZGlydHlf bG9nX3N0YXJ0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtb3J5X2dsb2JhbF9kaXJ0eV9s b2dfc3RvcCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3N0dWJzL01ha2VmaWxlLm9ianMgYi9z dHVicy9NYWtlZmlsZS5vYmpzCmluZGV4IDZjODA2MTMuLmY1YjQ3YmYgMTAwNjQ0Ci0tLSBhL3N0 dWJzL01ha2VmaWxlLm9ianMKKysrIGIvc3R1YnMvTWFrZWZpbGUub2JqcwpAQCAtMzgsMyArMzgs NCBAQCBzdHViLW9iai15ICs9IHRhcmdldC1nZXQtbW9uaXRvci1kZWYubwogc3R1Yi1vYmoteSAr PSBwY19tYWR0X2NwdV9lbnRyeS5vCiBzdHViLW9iai15ICs9IHZtZ2VuaWQubwogc3R1Yi1vYmot eSArPSB4ZW4tY29tbW9uLm8KK3N0dWItb2JqLXkgKz0geGVuLWh2bS5vCmRpZmYgLS1naXQgYS9z dHVicy94ZW4taHZtLmMgYi9zdHVicy94ZW4taHZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uM2NhNmM1MQotLS0gL2Rldi9udWxsCisrKyBiL3N0dWJzL3hlbi1odm0uYwpA QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwICAgICAgIENpdHJpeCBM dGQuCisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCisgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3At bGV2ZWwgZGlyZWN0b3J5LgorICoKKyAqIENvbnRyaWJ1dGlvbnMgYWZ0ZXIgMjAxMi0wMS0xMyBh cmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICogR05VIEdQTCwgdmVyc2lvbiAy IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUg InFlbXUvb3NkZXAuaCIKKyNpbmNsdWRlICJxZW11LWNvbW1vbi5oIgorI2luY2x1ZGUgImh3L3hl bi94ZW4uaCIKKyNpbmNsdWRlICJleGVjL21lbW9yeS5oIgorI2luY2x1ZGUgInFtcC1jb21tYW5k cy5oIgorCitpbnQgeGVuX3BjaV9zbG90X2dldF9waXJxKFBDSURldmljZSAqcGNpX2RldiwgaW50 IGlycV9udW0pCit7CisgICAgcmV0dXJuIC0xOworfQorCit2b2lkIHhlbl9waWl4M19zZXRfaXJx KHZvaWQgKm9wYXF1ZSwgaW50IGlycV9udW0sIGludCBsZXZlbCkKK3sKK30KKwordm9pZCB4ZW5f cGlpeF9wY2lfd3JpdGVfY29uZmlnX2NsaWVudCh1aW50MzJfdCBhZGRyZXNzLCB1aW50MzJfdCB2 YWwsIGludCBsZW4pCit7Cit9CisKK3ZvaWQgeGVuX2h2bV9pbmplY3RfbXNpKHVpbnQ2NF90IGFk ZHIsIHVpbnQzMl90IGRhdGEpCit7Cit9CisKK2ludCB4ZW5faXNfcGlycV9tc2kodWludDMyX3Qg bXNpX2RhdGEpCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeGVuX3JhbV9hbGxvYyhyYW1f YWRkcl90IHJhbV9hZGRyLCByYW1fYWRkcl90IHNpemUsIE1lbW9yeVJlZ2lvbiAqbXIsCisgICAg ICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQoreworfQorCitxZW11X2lycSAqeGVuX2ludGVy cnVwdF9jb250cm9sbGVyX2luaXQodm9pZCkKK3sKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9p ZCB4ZW5fcmVnaXN0ZXJfZnJhbWVidWZmZXIoTWVtb3J5UmVnaW9uICptcikKK3sKK30KKwordm9p ZCB4ZW5faHZtX21vZGlmaWVkX21lbW9yeShyYW1fYWRkcl90IHN0YXJ0LCByYW1fYWRkcl90IGxl bmd0aCkKK3sKK30KKwordm9pZCB4ZW5faHZtX2luaXQoUENNYWNoaW5lU3RhdGUgKnBjbXMsIE1l bW9yeVJlZ2lvbiAqKnJhbV9tZW1vcnkpCit7Cit9CisKK3ZvaWQgcW1wX3hlbl9zZXRfZ2xvYmFs X2RpcnR5X2xvZyhib29sIGVuYWJsZSwgRXJyb3IgKiplcnJwKQoreworfQpkaWZmIC0tZ2l0IGEv dHJhY2UtZXZlbnRzIGIvdHJhY2UtZXZlbnRzCmluZGV4IGIwN2EwOWIuLjRlMTQ0ODcgMTAwNjQ0 Ci0tLSBhL3RyYWNlLWV2ZW50cworKysgYi90cmFjZS1ldmVudHMKQEAgLTQ4LDE3ICs0OCw2IEBA IHNwaWNlX3ZtY19yZWdpc3Rlcl9pbnRlcmZhY2Uodm9pZCAqc2NkKSAic3BpY2Ugdm1jIHJlZ2lz dGVyZWQgaW50ZXJmYWNlICVwIgogc3BpY2Vfdm1jX3VucmVnaXN0ZXJfaW50ZXJmYWNlKHZvaWQg KnNjZCkgInNwaWNlIHZtYyB1bnJlZ2lzdGVyZWQgaW50ZXJmYWNlICVwIgogc3BpY2Vfdm1jX2V2 ZW50KGludCBldmVudCkgInNwaWNlIHZtYyBldmVudCAlZCIKIAotIyB4ZW4taHZtLmMKLXhlbl9y YW1fYWxsb2ModW5zaWduZWQgbG9uZyByYW1fYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKSAicmVx dWVzdGVkOiAlI2x4LCBzaXplICUjbHgiCi14ZW5fY2xpZW50X3NldF9tZW1vcnkodWludDY0X3Qg c3RhcnRfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBib29sIGxvZ19kaXJ0eSkgIiUjIlBSSXg2 NCIgc2l6ZSAlI2x4LCBsb2dfZGlydHkgJWkiCi1oYW5kbGVfaW9yZXEodm9pZCAqcmVxLCB1aW50 MzJfdCB0eXBlLCB1aW50MzJfdCBkaXIsIHVpbnQzMl90IGRmLCB1aW50MzJfdCBkYXRhX2lzX3B0 ciwgdWludDY0X3QgYWRkciwgdWludDY0X3QgZGF0YSwgdWludDMyX3QgY291bnQsIHVpbnQzMl90 IHNpemUpICJJL089JXAgdHlwZT0lZCBkaXI9JWQgZGY9JWQgcHRyPSVkIHBvcnQ9JSMiUFJJeDY0 IiBkYXRhPSUjIlBSSXg2NCIgY291bnQ9JWQgc2l6ZT0lZCIKLWhhbmRsZV9pb3JlcV9yZWFkKHZv aWQgKnJlcSwgdWludDMyX3QgdHlwZSwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRy LCB1aW50NjRfdCBhZGRyLCB1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qg c2l6ZSkgIkkvTz0lcCByZWFkIHR5cGU9JWQgZGY9JWQgcHRyPSVkIHBvcnQ9JSMiUFJJeDY0IiBk YXRhPSUjIlBSSXg2NCIgY291bnQ9JWQgc2l6ZT0lZCIKLWhhbmRsZV9pb3JlcV93cml0ZSh2b2lk ICpyZXEsIHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IGRmLCB1aW50MzJfdCBkYXRhX2lzX3B0ciwg dWludDY0X3QgYWRkciwgdWludDY0X3QgZGF0YSwgdWludDMyX3QgY291bnQsIHVpbnQzMl90IHNp emUpICJJL089JXAgd3JpdGUgdHlwZT0lZCBkZj0lZCBwdHI9JWQgcG9ydD0lIyJQUkl4NjQiIGRh dGE9JSMiUFJJeDY0IiBjb3VudD0lZCBzaXplPSVkIgotY3B1X2lvcmVxX3Bpbyh2b2lkICpyZXEs IHVpbnQzMl90IGRpciwgdWludDMyX3QgZGYsIHVpbnQzMl90IGRhdGFfaXNfcHRyLCB1aW50NjRf dCBhZGRyLCB1aW50NjRfdCBkYXRhLCB1aW50MzJfdCBjb3VudCwgdWludDMyX3Qgc2l6ZSkgIkkv Tz0lcCBwaW8gZGlyPSVkIGRmPSVkIHB0cj0lZCBwb3J0PSUjIlBSSXg2NCIgZGF0YT0lIyJQUkl4 NjQiIGNvdW50PSVkIHNpemU9JWQiCi1jcHVfaW9yZXFfcGlvX3JlYWRfcmVnKHZvaWQgKnJlcSwg dWludDY0X3QgZGF0YSwgdWludDY0X3QgYWRkciwgdWludDMyX3Qgc2l6ZSkgIkkvTz0lcCBwaW8g cmVhZCByZWcgZGF0YT0lIyJQUkl4NjQiIHBvcnQ9JSMiUFJJeDY0IiBzaXplPSVkIgotY3B1X2lv cmVxX3Bpb193cml0ZV9yZWcodm9pZCAqcmVxLCB1aW50NjRfdCBkYXRhLCB1aW50NjRfdCBhZGRy LCB1aW50MzJfdCBzaXplKSAiSS9PPSVwIHBpbyB3cml0ZSByZWcgZGF0YT0lIyJQUkl4NjQiIHBv cnQ9JSMiUFJJeDY0IiBzaXplPSVkIgotY3B1X2lvcmVxX21vdmUodm9pZCAqcmVxLCB1aW50MzJf dCBkaXIsIHVpbnQzMl90IGRmLCB1aW50MzJfdCBkYXRhX2lzX3B0ciwgdWludDY0X3QgYWRkciwg dWludDY0X3QgZGF0YSwgdWludDMyX3QgY291bnQsIHVpbnQzMl90IHNpemUpICJJL089JXAgY29w eSBkaXI9JWQgZGY9JWQgcHRyPSVkIHBvcnQ9JSMiUFJJeDY0IiBkYXRhPSUjIlBSSXg2NCIgY291 bnQ9JWQgc2l6ZT0lZCIKLQogIyB4ZW4tbWFwY2FjaGUuYwogeGVuX21hcF9jYWNoZSh1aW50NjRf dCBwaHlzX2FkZHIpICJ3YW50ICUjIlBSSXg2NAogeGVuX3JlbWFwX2J1Y2tldCh1aW50NjRfdCBp bmRleCkgImluZGV4ICUjIlBSSXg2NApkaWZmIC0tZ2l0IGEveGVuLWh2bS1zdHViLmMgYi94ZW4t aHZtLXN0dWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhNmM1MS4uMDAwMDAw MAotLS0gYS94ZW4taHZtLXN0dWIuYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8q Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgICAgICAgQ2l0cml4IEx0ZC4KLSAqCi0gKiBUaGlzIHdv cmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMLCB2ZXJzaW9uIDIu ICBTZWUKLSAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCi0g KgotICogQ29udHJpYnV0aW9ucyBhZnRlciAyMDEyLTAxLTEzIGFyZSBsaWNlbnNlZCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlCi0gKiBHTlUgR1BMLCB2ZXJzaW9uIDIgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSAicWVtdS9vc2RlcC5oIgotI2lu Y2x1ZGUgInFlbXUtY29tbW9uLmgiCi0jaW5jbHVkZSAiaHcveGVuL3hlbi5oIgotI2luY2x1ZGUg ImV4ZWMvbWVtb3J5LmgiCi0jaW5jbHVkZSAicW1wLWNvbW1hbmRzLmgiCi0KLWludCB4ZW5fcGNp X3Nsb3RfZ2V0X3BpcnEoUENJRGV2aWNlICpwY2lfZGV2LCBpbnQgaXJxX251bSkKLXsKLSAgICBy ZXR1cm4gLTE7Ci19Ci0KLXZvaWQgeGVuX3BpaXgzX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQg aXJxX251bSwgaW50IGxldmVsKQotewotfQotCi12b2lkIHhlbl9waWl4X3BjaV93cml0ZV9jb25m aWdfY2xpZW50KHVpbnQzMl90IGFkZHJlc3MsIHVpbnQzMl90IHZhbCwgaW50IGxlbikKLXsKLX0K LQotdm9pZCB4ZW5faHZtX2luamVjdF9tc2kodWludDY0X3QgYWRkciwgdWludDMyX3QgZGF0YSkK LXsKLX0KLQotaW50IHhlbl9pc19waXJxX21zaSh1aW50MzJfdCBtc2lfZGF0YSkKLXsKLSAgICBy ZXR1cm4gMDsKLX0KLQotdm9pZCB4ZW5fcmFtX2FsbG9jKHJhbV9hZGRyX3QgcmFtX2FkZHIsIHJh bV9hZGRyX3Qgc2l6ZSwgTWVtb3J5UmVnaW9uICptciwKLSAgICAgICAgICAgICAgICAgICBFcnJv ciAqKmVycnApCi17Ci19Ci0KLXFlbXVfaXJxICp4ZW5faW50ZXJydXB0X2NvbnRyb2xsZXJfaW5p dCh2b2lkKQotewotICAgIHJldHVybiBOVUxMOwotfQotCi12b2lkIHhlbl9yZWdpc3Rlcl9mcmFt ZWJ1ZmZlcihNZW1vcnlSZWdpb24gKm1yKQotewotfQotCi12b2lkIHhlbl9odm1fbW9kaWZpZWRf bWVtb3J5KHJhbV9hZGRyX3Qgc3RhcnQsIHJhbV9hZGRyX3QgbGVuZ3RoKQotewotfQotCi12b2lk IHhlbl9odm1faW5pdChQQ01hY2hpbmVTdGF0ZSAqcGNtcywgTWVtb3J5UmVnaW9uICoqcmFtX21l bW9yeSkKLXsKLX0KLQotdm9pZCBxbXBfeGVuX3NldF9nbG9iYWxfZGlydHlfbG9nKGJvb2wgZW5h YmxlLCBFcnJvciAqKmVycnApCi17Ci19CmRpZmYgLS1naXQgYS94ZW4taHZtLmMgYi94ZW4taHZt LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNWUyNjMuLjAwMDAwMDAKLS0tIGEv eGVuLWh2bS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQyOSArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IChDKSAyMDEwICAgICAgIENpdHJpeCBMdGQuCi0gKgotICogVGhpcyB3b3JrIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLiAgU2VlCi0gKiB0 aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgotICoKLSAqIENvbnRy aWJ1dGlvbnMgYWZ0ZXIgMjAxMi0wMS0xMyBhcmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZQotICogR05VIEdQTCwgdmVyc2lvbiAyIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKLQotI2luY2x1ZGUgImNw dS5oIgotI2luY2x1ZGUgImh3L3BjaS9wY2kuaCIKLSNpbmNsdWRlICJody9pMzg2L3BjLmgiCi0j aW5jbHVkZSAiaHcvaTM4Ni9hcGljLW1zaWRlZi5oIgotI2luY2x1ZGUgImh3L3hlbi94ZW5fY29t bW9uLmgiCi0jaW5jbHVkZSAiaHcveGVuL3hlbl9iYWNrZW5kLmgiCi0jaW5jbHVkZSAicW1wLWNv bW1hbmRzLmgiCi0KLSNpbmNsdWRlICJzeXNlbXUvY2hhci5oIgotI2luY2x1ZGUgInFlbXUvZXJy b3ItcmVwb3J0LmgiCi0jaW5jbHVkZSAicWVtdS9yYW5nZS5oIgotI2luY2x1ZGUgInN5c2VtdS94 ZW4tbWFwY2FjaGUuaCIKLSNpbmNsdWRlICJ0cmFjZS1yb290LmgiCi0jaW5jbHVkZSAiZXhlYy9h ZGRyZXNzLXNwYWNlcy5oIgotCi0jaW5jbHVkZSA8eGVuL2h2bS9pb3JlcS5oPgotI2luY2x1ZGUg PHhlbi9odm0vcGFyYW1zLmg+Ci0jaW5jbHVkZSA8eGVuL2h2bS9lODIwLmg+Ci0KLS8vI2RlZmlu ZSBERUJVR19YRU5fSFZNCi0KLSNpZmRlZiBERUJVR19YRU5fSFZNCi0jZGVmaW5lIERQUklOVEYo Zm10LCAuLi4pIFwKLSAgICBkbyB7IGZwcmludGYoc3RkZXJyLCAieGVuOiAiIGZtdCwgIyMgX19W QV9BUkdTX18pOyB9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgRFBSSU5URihmbXQsIC4uLikg XAotICAgIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgTWVtb3J5UmVnaW9uIHJh bV9tZW1vcnksIHJhbV82NDBrLCByYW1fbG8sIHJhbV9oaTsKLXN0YXRpYyBNZW1vcnlSZWdpb24g KmZyYW1lYnVmZmVyOwotc3RhdGljIGJvb2wgeGVuX2luX21pZ3JhdGlvbjsKLQotLyogQ29tcGF0 aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb24gKi8KLQotLyogVGhpcyBhbGxvd3MgUUVNVSB0byBi dWlsZCBvbiBhIHN5c3RlbSB0aGF0IGhhcyBYZW4gNC41IG9yIGVhcmxpZXIKLSAqIGluc3RhbGxl ZC4gIFRoaXMgaGVyZSAobm90IGluIGh3L3hlbi94ZW5fY29tbW9uLmgpIGJlY2F1c2UgeGVuL2h2 bS9pb3JlcS5oCi0gKiBuZWVkcyB0byBiZSBpbmNsdWRlZCBiZWZvcmUgdGhpcyBibG9jayBhbmQg aHcveGVuL3hlbl9jb21tb24uaCBuZWVkcyB0bwotICogYmUgaW5jbHVkZWQgYmVmb3JlIHhlbi9o dm0vaW9yZXEuaAotICovCi0jaWZuZGVmIElPUkVRX1RZUEVfVk1XQVJFX1BPUlQKLSNkZWZpbmUg SU9SRVFfVFlQRV9WTVdBUkVfUE9SVCAgMwotc3RydWN0IHZtd2FyZV9yZWdzIHsKLSAgICB1aW50 MzJfdCBlc2k7Ci0gICAgdWludDMyX3QgZWRpOwotICAgIHVpbnQzMl90IGVieDsKLSAgICB1aW50 MzJfdCBlY3g7Ci0gICAgdWludDMyX3QgZWR4OwotfTsKLXR5cGVkZWYgc3RydWN0IHZtd2FyZV9y ZWdzIHZtd2FyZV9yZWdzX3Q7Ci0KLXN0cnVjdCBzaGFyZWRfdm1wb3J0X2lvcGFnZSB7Ci0gICAg c3RydWN0IHZtd2FyZV9yZWdzIHZjcHVfdm1wb3J0X3JlZ3NbMV07Ci19OwotdHlwZWRlZiBzdHJ1 Y3Qgc2hhcmVkX3ZtcG9ydF9pb3BhZ2Ugc2hhcmVkX3ZtcG9ydF9pb3BhZ2VfdDsKLSNlbmRpZgot Ci1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHhlbl92Y3B1X2Vwb3J0KHNoYXJlZF9pb3BhZ2VfdCAq c2hhcmVkX3BhZ2UsIGludCBpKQotewotICAgIHJldHVybiBzaGFyZWRfcGFnZS0+dmNwdV9pb3Jl cVtpXS52cF9lcG9ydDsKLX0KLXN0YXRpYyBpbmxpbmUgaW9yZXFfdCAqeGVuX3ZjcHVfaW9yZXEo c2hhcmVkX2lvcGFnZV90ICpzaGFyZWRfcGFnZSwgaW50IHZjcHUpCi17Ci0gICAgcmV0dXJuICZz aGFyZWRfcGFnZS0+dmNwdV9pb3JlcVt2Y3B1XTsKLX0KLQotI2RlZmluZSBCVUZGRVJfSU9fTUFY X0RFTEFZICAxMDAKLQotdHlwZWRlZiBzdHJ1Y3QgWGVuUGh5c21hcCB7Ci0gICAgaHdhZGRyIHN0 YXJ0X2FkZHI7Ci0gICAgcmFtX2FkZHJfdCBzaXplOwotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0g ICAgaHdhZGRyIHBoeXNfb2Zmc2V0OwotCi0gICAgUUxJU1RfRU5UUlkoWGVuUGh5c21hcCkgbGlz dDsKLX0gWGVuUGh5c21hcDsKLQotdHlwZWRlZiBzdHJ1Y3QgWGVuSU9TdGF0ZSB7Ci0gICAgaW9z ZXJ2aWRfdCBpb3NlcnZpZDsKLSAgICBzaGFyZWRfaW9wYWdlX3QgKnNoYXJlZF9wYWdlOwotICAg IHNoYXJlZF92bXBvcnRfaW9wYWdlX3QgKnNoYXJlZF92bXBvcnRfcGFnZTsKLSAgICBidWZmZXJl ZF9pb3BhZ2VfdCAqYnVmZmVyZWRfaW9fcGFnZTsKLSAgICBRRU1VVGltZXIgKmJ1ZmZlcmVkX2lv X3RpbWVyOwotICAgIENQVVN0YXRlICoqY3B1X2J5X3ZjcHVfaWQ7Ci0gICAgLyogdGhlIGV2dGNo biBwb3J0IGZvciBwb2xsaW5nIHRoZSBub3RpZmljYXRpb24sICovCi0gICAgZXZ0Y2huX3BvcnRf dCAqaW9yZXFfbG9jYWxfcG9ydDsKLSAgICAvKiBldnRjaG4gbG9jYWwgcG9ydCBmb3IgYnVmZmVy ZWQgaW8gKi8KLSAgICBldnRjaG5fcG9ydF90IGJ1ZmlvcmVxX2xvY2FsX3BvcnQ7Ci0gICAgLyog dGhlIGV2dGNobiBmZCBmb3IgcG9sbGluZyAqLwotICAgIHhlbmV2dGNobl9oYW5kbGUgKnhjZV9o YW5kbGU7Ci0gICAgLyogd2hpY2ggdmNwdSB3ZSBhcmUgc2VydmluZyAqLwotICAgIGludCBzZW5k X3ZjcHU7Ci0KLSAgICBzdHJ1Y3QgeHNfaGFuZGxlICp4ZW5zdG9yZTsKLSAgICBNZW1vcnlMaXN0 ZW5lciBtZW1vcnlfbGlzdGVuZXI7Ci0gICAgTWVtb3J5TGlzdGVuZXIgaW9fbGlzdGVuZXI7Ci0g ICAgRGV2aWNlTGlzdGVuZXIgZGV2aWNlX2xpc3RlbmVyOwotICAgIFFMSVNUX0hFQUQoLCBYZW5Q aHlzbWFwKSBwaHlzbWFwOwotICAgIGh3YWRkciBmcmVlX3BoeXNfb2Zmc2V0OwotICAgIGNvbnN0 IFhlblBoeXNtYXAgKmxvZ19mb3JfZGlydHliaXQ7Ci0KLSAgICBOb3RpZmllciBleGl0OwotICAg IE5vdGlmaWVyIHN1c3BlbmQ7Ci0gICAgTm90aWZpZXIgd2FrZXVwOwotfSBYZW5JT1N0YXRlOwot Ci0vKiBYZW4gc3BlY2lmaWMgZnVuY3Rpb24gZm9yIHBpaXggcGNpICovCi0KLWludCB4ZW5fcGNp X3Nsb3RfZ2V0X3BpcnEoUENJRGV2aWNlICpwY2lfZGV2LCBpbnQgaXJxX251bSkKLXsKLSAgICBy ZXR1cm4gaXJxX251bSArICgocGNpX2Rldi0+ZGV2Zm4gPj4gMykgPDwgMik7Ci19Ci0KLXZvaWQg eGVuX3BpaXgzX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxX251bSwgaW50IGxldmVsKQot ewotICAgIHhlbl9zZXRfcGNpX2ludHhfbGV2ZWwoeGVuX2RvbWlkLCAwLCAwLCBpcnFfbnVtID4+ IDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFfbnVtICYgMywgbGV2ZWwpOwotfQot Ci12b2lkIHhlbl9waWl4X3BjaV93cml0ZV9jb25maWdfY2xpZW50KHVpbnQzMl90IGFkZHJlc3Ms IHVpbnQzMl90IHZhbCwgaW50IGxlbikKLXsKLSAgICBpbnQgaTsKLQotICAgIC8qIFNjYW4gZm9y IHVwZGF0ZXMgdG8gUENJIGxpbmsgcm91dGVzICgweDYwLTB4NjMpLiAqLwotICAgIGZvciAoaSA9 IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICB1aW50OF90IHYgPSAodmFsID4+ICg4ICogaSkp ICYgMHhmZjsKLSAgICAgICAgaWYgKHYgJiAweDgwKSB7Ci0gICAgICAgICAgICB2ID0gMDsKLSAg ICAgICAgfQotICAgICAgICB2ICY9IDB4ZjsKLSAgICAgICAgaWYgKCgoYWRkcmVzcyArIGkpID49 IDB4NjApICYmICgoYWRkcmVzcyArIGkpIDw9IDB4NjMpKSB7Ci0gICAgICAgICAgICB4ZW5fc2V0 X3BjaV9saW5rX3JvdXRlKHhlbl9kb21pZCwgYWRkcmVzcyArIGkgLSAweDYwLCB2KTsKLSAgICAg ICAgfQotICAgIH0KLX0KLQotaW50IHhlbl9pc19waXJxX21zaSh1aW50MzJfdCBtc2lfZGF0YSkK LXsKLSAgICAvKiBJZiB2ZWN0b3IgaXMgMCwgdGhlIG1zaSBpcyByZW1hcHBlZCBpbnRvIGEgcGly cSwgcGFzc2VkIGFzCi0gICAgICogZGVzdF9pZC4KLSAgICAgKi8KLSAgICByZXR1cm4gKChtc2lf ZGF0YSAmIE1TSV9EQVRBX1ZFQ1RPUl9NQVNLKSA+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQpID09 IDA7Ci19Ci0KLXZvaWQgeGVuX2h2bV9pbmplY3RfbXNpKHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90 IGRhdGEpCi17Ci0gICAgeGVuX2luamVjdF9tc2koeGVuX2RvbWlkLCBhZGRyLCBkYXRhKTsKLX0K LQotc3RhdGljIHZvaWQgeGVuX3N1c3BlbmRfbm90aWZpZXIoTm90aWZpZXIgKm5vdGlmaWVyLCB2 b2lkICpkYXRhKQotewotICAgIHhjX3NldF9odm1fcGFyYW0oeGVuX3hjLCB4ZW5fZG9taWQsIEhW TV9QQVJBTV9BQ1BJX1NfU1RBVEUsIDMpOwotfQotCi0vKiBYZW4gSW50ZXJydXB0IENvbnRyb2xs ZXIgKi8KLQotc3RhdGljIHZvaWQgeGVuX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBp bnQgbGV2ZWwpCi17Ci0gICAgeGVuX3NldF9pc2FfaXJxX2xldmVsKHhlbl9kb21pZCwgaXJxLCBs ZXZlbCk7Ci19Ci0KLXFlbXVfaXJxICp4ZW5faW50ZXJydXB0X2NvbnRyb2xsZXJfaW5pdCh2b2lk KQotewotICAgIHJldHVybiBxZW11X2FsbG9jYXRlX2lycXMoeGVuX3NldF9pcnEsIE5VTEwsIDE2 KTsKLX0KLQotLyogTWVtb3J5IE9wcyAqLwotCi1zdGF0aWMgdm9pZCB4ZW5fcmFtX2luaXQoUENN YWNoaW5lU3RhdGUgKnBjbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBy YW1fc2l6ZSwgTWVtb3J5UmVnaW9uICoqcmFtX21lbW9yeV9wKQotewotICAgIE1lbW9yeVJlZ2lv biAqc3lzbWVtID0gZ2V0X3N5c3RlbV9tZW1vcnkoKTsKLSAgICByYW1fYWRkcl90IGJsb2NrX2xl bjsKLSAgICB1aW50NjRfdCB1c2VyX2xvd21lbSA9IG9iamVjdF9wcm9wZXJ0eV9nZXRfaW50KHFk ZXZfZ2V0X21hY2hpbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBDX01BQ0hJTkVfTUFYX1JBTV9CRUxPV180RywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvcl9hYm9ydCk7Ci0KLSAg ICAvKiBIYW5kbGUgdGhlIG1hY2hpbmUgb3B0IG1heC1yYW0tYmVsb3ctNGcuICBJdCBpcyBiYXNp Y2FsbHkgZG9pbmcKLSAgICAgKiBtaW4oeGVuIGxpbWl0LCB1c2VyIGxpbWl0KS4KLSAgICAgKi8K LSAgICBpZiAoIXVzZXJfbG93bWVtKSB7Ci0gICAgICAgIHVzZXJfbG93bWVtID0gSFZNX0JFTE9X XzRHX1JBTV9FTkQ7IC8qIGRlZmF1bHQgKi8KLSAgICB9Ci0gICAgaWYgKEhWTV9CRUxPV180R19S QU1fRU5EIDw9IHVzZXJfbG93bWVtKSB7Ci0gICAgICAgIHVzZXJfbG93bWVtID0gSFZNX0JFTE9X XzRHX1JBTV9FTkQ7Ci0gICAgfQotCi0gICAgaWYgKHJhbV9zaXplID49IHVzZXJfbG93bWVtKSB7 Ci0gICAgICAgIHBjbXMtPmFib3ZlXzRnX21lbV9zaXplID0gcmFtX3NpemUgLSB1c2VyX2xvd21l bTsKLSAgICAgICAgcGNtcy0+YmVsb3dfNGdfbWVtX3NpemUgPSB1c2VyX2xvd21lbTsKLSAgICB9 IGVsc2UgewotICAgICAgICBwY21zLT5hYm92ZV80Z19tZW1fc2l6ZSA9IDA7Ci0gICAgICAgIHBj bXMtPmJlbG93XzRnX21lbV9zaXplID0gcmFtX3NpemU7Ci0gICAgfQotICAgIGlmICghcGNtcy0+ YWJvdmVfNGdfbWVtX3NpemUpIHsKLSAgICAgICAgYmxvY2tfbGVuID0gcmFtX3NpemU7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogWGVuIGRvZXMgbm90IGFsbG9jYXRlIHRo ZSBtZW1vcnkgY29udGludW91c2x5LCBpdCBrZWVwcyBhCi0gICAgICAgICAqIGhvbGUgb2YgdGhl IHNpemUgY29tcHV0ZWQgYWJvdmUgb3IgcGFzc2VkIGluLgotICAgICAgICAgKi8KLSAgICAgICAg YmxvY2tfbGVuID0gKDFVTEwgPDwgMzIpICsgcGNtcy0+YWJvdmVfNGdfbWVtX3NpemU7Ci0gICAg fQotICAgIG1lbW9yeV9yZWdpb25faW5pdF9yYW0oJnJhbV9tZW1vcnksIE5VTEwsICJ4ZW4ucmFt IiwgYmxvY2tfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yX2ZhdGFsKTsK LSAgICAqcmFtX21lbW9yeV9wID0gJnJhbV9tZW1vcnk7Ci0gICAgdm1zdGF0ZV9yZWdpc3Rlcl9y YW1fZ2xvYmFsKCZyYW1fbWVtb3J5KTsKLQotICAgIG1lbW9yeV9yZWdpb25faW5pdF9hbGlhcygm cmFtXzY0MGssIE5VTEwsICJ4ZW4ucmFtLjY0MGsiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcmFtX21lbW9yeSwgMCwgMHhhMDAwMCk7Ci0gICAgbWVtb3J5X3JlZ2lvbl9hZGRfc3Vi cmVnaW9uKHN5c21lbSwgMCwgJnJhbV82NDBrKTsKLSAgICAvKiBTa2lwIG9mIHRoZSBWR0EgSU8g bWVtb3J5IHNwYWNlLCBpdCB3aWxsIGJlIHJlZ2lzdGVyZWQgbGF0ZXIgYnkgdGhlIFZHQQotICAg ICAqIGVtdWxhdGVkIGRldmljZS4KLSAgICAgKgotICAgICAqIFRoZSBhcmVhIGJldHdlZW4gMHhj MDAwMCBhbmQgMHgxMDAwMDAgd2lsbCBiZSB1c2VkIGJ5IFNlYUJJT1MgdG8gbG9hZAotICAgICAq IHRoZSBPcHRpb25zIFJPTSwgc28gaXQgaXMgcmVnaXN0ZXJlZCBoZXJlIGFzIFJBTS4KLSAgICAg Ki8KLSAgICBtZW1vcnlfcmVnaW9uX2luaXRfYWxpYXMoJnJhbV9sbywgTlVMTCwgInhlbi5yYW0u bG8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFtX21lbW9yeSwgMHhjMDAwMCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNtcy0+YmVsb3dfNGdfbWVtX3NpemUgLSAw eGMwMDAwKTsKLSAgICBtZW1vcnlfcmVnaW9uX2FkZF9zdWJyZWdpb24oc3lzbWVtLCAweGMwMDAw LCAmcmFtX2xvKTsKLSAgICBpZiAocGNtcy0+YWJvdmVfNGdfbWVtX3NpemUgPiAwKSB7Ci0gICAg ICAgIG1lbW9yeV9yZWdpb25faW5pdF9hbGlhcygmcmFtX2hpLCBOVUxMLCAieGVuLnJhbS5oaSIs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmFtX21lbW9yeSwgMHgxMDAwMDAw MDBVTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY21zLT5hYm92ZV80Z19t ZW1fc2l6ZSk7Ci0gICAgICAgIG1lbW9yeV9yZWdpb25fYWRkX3N1YnJlZ2lvbihzeXNtZW0sIDB4 MTAwMDAwMDAwVUxMLCAmcmFtX2hpKTsKLSAgICB9Ci19Ci0KLXZvaWQgeGVuX3JhbV9hbGxvYyhy YW1fYWRkcl90IHJhbV9hZGRyLCByYW1fYWRkcl90IHNpemUsIE1lbW9yeVJlZ2lvbiAqbXIsCi0g ICAgICAgICAgICAgICAgICAgRXJyb3IgKiplcnJwKQotewotICAgIHVuc2lnbmVkIGxvbmcgbnJf cGZuOwotICAgIHhlbl9wZm5fdCAqcGZuX2xpc3Q7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAocnVu c3RhdGVfY2hlY2soUlVOX1NUQVRFX0lOTUlHUkFURSkpIHsKLSAgICAgICAgLyogUkFNIGFscmVh ZHkgcG9wdWxhdGVkIGluIFhlbiAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBkbyBu b3QgYWxsb2MgIlJBTV9BRERSX0ZNVAotICAgICAgICAgICAgICAgICIgYnl0ZXMgb2YgcmFtIGF0 ICJSQU1fQUREUl9GTVQiIHdoZW4gcnVuc3RhdGUgaXMgSU5NSUdSQVRFXG4iLAotICAgICAgICAg ICAgICAgIF9fZnVuY19fLCBzaXplLCByYW1fYWRkcik7IAotICAgICAgICByZXR1cm47Ci0gICAg fQotCi0gICAgaWYgKG1yID09ICZyYW1fbWVtb3J5KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9 Ci0KLSAgICB0cmFjZV94ZW5fcmFtX2FsbG9jKHJhbV9hZGRyLCBzaXplKTsKLQotICAgIG5yX3Bm biA9IHNpemUgPj4gVEFSR0VUX1BBR0VfQklUUzsKLSAgICBwZm5fbGlzdCA9IGdfbWFsbG9jKHNp emVvZiAoKnBmbl9saXN0KSAqIG5yX3Bmbik7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnJfcGZu OyBpKyspIHsKLSAgICAgICAgcGZuX2xpc3RbaV0gPSAocmFtX2FkZHIgPj4gVEFSR0VUX1BBR0Vf QklUUykgKyBpOwotICAgIH0KLQotICAgIGlmICh4Y19kb21haW5fcG9wdWxhdGVfcGh5c21hcF9l eGFjdCh4ZW5feGMsIHhlbl9kb21pZCwgbnJfcGZuLCAwLCAwLCBwZm5fbGlzdCkpIHsKLSAgICAg ICAgZXJyb3Jfc2V0ZyhlcnJwLCAieGVuOiBmYWlsZWQgdG8gcG9wdWxhdGUgcmFtIGF0ICIgUkFN X0FERFJfRk1ULAotICAgICAgICAgICAgICAgICAgIHJhbV9hZGRyKTsKLSAgICB9Ci0KLSAgICBn X2ZyZWUocGZuX2xpc3QpOwotfQotCi1zdGF0aWMgWGVuUGh5c21hcCAqZ2V0X3BoeXNtYXBwaW5n KFhlbklPU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo d2FkZHIgc3RhcnRfYWRkciwgcmFtX2FkZHJfdCBzaXplKQotewotICAgIFhlblBoeXNtYXAgKnBo eXNtYXAgPSBOVUxMOwotCi0gICAgc3RhcnRfYWRkciAmPSBUQVJHRVRfUEFHRV9NQVNLOwotCi0g ICAgUUxJU1RfRk9SRUFDSChwaHlzbWFwLCAmc3RhdGUtPnBoeXNtYXAsIGxpc3QpIHsKLSAgICAg ICAgaWYgKHJhbmdlX2NvdmVyc19ieXRlKHBoeXNtYXAtPnN0YXJ0X2FkZHIsIHBoeXNtYXAtPnNp emUsIHN0YXJ0X2FkZHIpKSB7Ci0gICAgICAgICAgICByZXR1cm4gcGh5c21hcDsKLSAgICAgICAg fQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGh3YWRkciB4ZW5fcGh5c19v ZmZzZXRfdG9fZ2FkZHIoaHdhZGRyIHN0YXJ0X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRkcl90IHNpemUsIHZvaWQgKm9wYXF1 ZSkKLXsKLSAgICBod2FkZHIgYWRkciA9IHN0YXJ0X2FkZHIgJiBUQVJHRVRfUEFHRV9NQVNLOwot ICAgIFhlbklPU3RhdGUgKnhlbl9pb19zdGF0ZSA9IG9wYXF1ZTsKLSAgICBYZW5QaHlzbWFwICpw aHlzbWFwID0gTlVMTDsKLQotICAgIFFMSVNUX0ZPUkVBQ0gocGh5c21hcCwgJnhlbl9pb19zdGF0 ZS0+cGh5c21hcCwgbGlzdCkgewotICAgICAgICBpZiAocmFuZ2VfY292ZXJzX2J5dGUocGh5c21h cC0+cGh5c19vZmZzZXQsIHBoeXNtYXAtPnNpemUsIGFkZHIpKSB7Ci0gICAgICAgICAgICByZXR1 cm4gcGh5c21hcC0+c3RhcnRfYWRkcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBz dGFydF9hZGRyOwotfQotCi1zdGF0aWMgaW50IHhlbl9hZGRfdG9fcGh5c21hcChYZW5JT1N0YXRl ICpzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YWRkciBzdGFydF9hZGRy LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBzaXplLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uICptciwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGh3YWRkciBvZmZzZXRfd2l0aGluX3JlZ2lvbikKLXsKLSAgICB1bnNp Z25lZCBsb25nIGkgPSAwOwotICAgIGludCByYyA9IDA7Ci0gICAgWGVuUGh5c21hcCAqcGh5c21h cCA9IE5VTEw7Ci0gICAgaHdhZGRyIHBmbiwgc3RhcnRfZ3BmbjsKLSAgICBod2FkZHIgcGh5c19v ZmZzZXQgPSBtZW1vcnlfcmVnaW9uX2dldF9yYW1fYWRkcihtcik7Ci0gICAgY2hhciBwYXRoWzgw XSwgdmFsdWVbMTddOwotICAgIGNvbnN0IGNoYXIgKm1yX25hbWU7Ci0KLSAgICBpZiAoZ2V0X3Bo eXNtYXBwaW5nKHN0YXRlLCBzdGFydF9hZGRyLCBzaXplKSkgewotICAgICAgICByZXR1cm4gMDsK LSAgICB9Ci0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQot Ci0gICAgLyogWGVuIGNhbiBvbmx5IGhhbmRsZSBhIHNpbmdsZSBkaXJ0eSBsb2cgcmVnaW9uIGZv ciBub3cgYW5kIHdlIHdhbnQKLSAgICAgKiB0aGUgbGluZWFyIGZyYW1lYnVmZmVyIHRvIGJlIHRo YXQgcmVnaW9uLgotICAgICAqIEF2b2lkIHRyYWNraW5nIGFueSByZWdpb25zIHRoYXQgaXMgbm90 IHZpZGVvcmFtIGFuZCBhdm9pZCB0cmFja2luZwotICAgICAqIHRoZSBsZWdhY3kgdmdhIHJlZ2lv bi4gKi8KLSAgICBpZiAobXIgPT0gZnJhbWVidWZmZXIgJiYgc3RhcnRfYWRkciA+IDB4YmZmZmYp IHsKLSAgICAgICAgZ290byBnb19waHlzbWFwOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci0KLWdv X3BoeXNtYXA6Ci0gICAgRFBSSU5URigibWFwcGluZyB2cmFtIHRvICUiSFdBRERSX1BSSXgiIC0g JSJIV0FERFJfUFJJeCJcbiIsCi0gICAgICAgICAgICBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsg c2l6ZSk7Ci0KLSAgICBwZm4gPSBwaHlzX29mZnNldCA+PiBUQVJHRVRfUEFHRV9CSVRTOwotICAg IHN0YXJ0X2dwZm4gPSBzdGFydF9hZGRyID4+IFRBUkdFVF9QQUdFX0JJVFM7Ci0gICAgZm9yIChp ID0gMDsgaSA8IHNpemUgPj4gVEFSR0VUX1BBR0VfQklUUzsgaSsrKSB7Ci0gICAgICAgIHVuc2ln bmVkIGxvbmcgaWR4ID0gcGZuICsgaTsKLSAgICAgICAgeGVuX3Bmbl90IGdwZm4gPSBzdGFydF9n cGZuICsgaTsKLQotICAgICAgICByYyA9IHhlbl94Y19kb21haW5fYWRkX3RvX3BoeXNtYXAoeGVu X3hjLCB4ZW5fZG9taWQsIFhFTk1BUFNQQUNFX2dtZm4sIGlkeCwgZ3Bmbik7Ci0gICAgICAgIGlm IChyYykgewotICAgICAgICAgICAgRFBSSU5URigiYWRkX3RvX3BoeXNtYXAgTUZOICUiUFJJX3hl bl9wZm4iIHRvIFBGTiAlIgotICAgICAgICAgICAgICAgICAgICBQUklfeGVuX3BmbiIgZmFpbGVk OiAlZCAoZXJybm86ICVkKVxuIiwgaWR4LCBncGZuLCByYywgZXJybm8pOwotICAgICAgICAgICAg cmV0dXJuIC1yYzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1yX25hbWUgPSBtZW1vcnlfcmVn aW9uX25hbWUobXIpOwotCi0gICAgcGh5c21hcCA9IGdfbWFsbG9jKHNpemVvZiAoWGVuUGh5c21h cCkpOwotCi0gICAgcGh5c21hcC0+c3RhcnRfYWRkciA9IHN0YXJ0X2FkZHI7Ci0gICAgcGh5c21h cC0+c2l6ZSA9IHNpemU7Ci0gICAgcGh5c21hcC0+bmFtZSA9IG1yX25hbWU7Ci0gICAgcGh5c21h cC0+cGh5c19vZmZzZXQgPSBwaHlzX29mZnNldDsKLQotICAgIFFMSVNUX0lOU0VSVF9IRUFEKCZz dGF0ZS0+cGh5c21hcCwgcGh5c21hcCwgbGlzdCk7Ci0KLSAgICB4Y19kb21haW5fcGluX21lbW9y eV9jYWNoZWF0dHIoeGVuX3hjLCB4ZW5fZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2FkZHIgPj4gVEFSR0VUX1BBR0VfQklUUywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0X2FkZHIgKyBzaXplIC0gMSkgPj4gVEFSR0VUX1BB R0VfQklUUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX0RPTUNUTF9N RU1fQ0FDSEVBVFRSX1dCKTsKLQotICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwKLSAg ICAgICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3BoeXNtYXAvJSJQUkl4 NjQiL3N0YXJ0X2FkZHIiLAotICAgICAgICAgICAgeGVuX2RvbWlkLCAodWludDY0X3QpcGh5c19v ZmZzZXQpOwotICAgIHNucHJpbnRmKHZhbHVlLCBzaXplb2YodmFsdWUpLCAiJSJQUkl4NjQsICh1 aW50NjRfdClzdGFydF9hZGRyKTsKLSAgICBpZiAoIXhzX3dyaXRlKHN0YXRlLT54ZW5zdG9yZSwg MCwgcGF0aCwgdmFsdWUsIHN0cmxlbih2YWx1ZSkpKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAg ICB9Ci0gICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAotICAgICAgICAgICAgIi9sb2Nh bC9kb21haW4vMC9kZXZpY2UtbW9kZWwvJWQvcGh5c21hcC8lIlBSSXg2NCIvc2l6ZSIsCi0gICAg ICAgICAgICB4ZW5fZG9taWQsICh1aW50NjRfdClwaHlzX29mZnNldCk7Ci0gICAgc25wcmludGYo dmFsdWUsIHNpemVvZih2YWx1ZSksICIlIlBSSXg2NCwgKHVpbnQ2NF90KXNpemUpOwotICAgIGlm ICgheHNfd3JpdGUoc3RhdGUtPnhlbnN0b3JlLCAwLCBwYXRoLCB2YWx1ZSwgc3RybGVuKHZhbHVl KSkpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAobXJfbmFtZSkgewotICAg ICAgICBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksCi0gICAgICAgICAgICAgICAgIi9sb2Nh bC9kb21haW4vMC9kZXZpY2UtbW9kZWwvJWQvcGh5c21hcC8lIlBSSXg2NCIvbmFtZSIsCi0gICAg ICAgICAgICAgICAgeGVuX2RvbWlkLCAodWludDY0X3QpcGh5c19vZmZzZXQpOwotICAgICAgICBp ZiAoIXhzX3dyaXRlKHN0YXRlLT54ZW5zdG9yZSwgMCwgcGF0aCwgbXJfbmFtZSwgc3RybGVuKG1y X25hbWUpKSkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgeGVuX3JlbW92ZV9mcm9tX3BoeXNtYXAoWGVu SU9TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3YWRk ciBzdGFydF9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1fYWRk cl90IHNpemUpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBpID0gMDsKLSAgICBpbnQgcmMgPSAwOwot ICAgIFhlblBoeXNtYXAgKnBoeXNtYXAgPSBOVUxMOwotICAgIGh3YWRkciBwaHlzX29mZnNldCA9 IDA7Ci0KLSAgICBwaHlzbWFwID0gZ2V0X3BoeXNtYXBwaW5nKHN0YXRlLCBzdGFydF9hZGRyLCBz aXplKTsKLSAgICBpZiAocGh5c21hcCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAg ICB9Ci0KLSAgICBwaHlzX29mZnNldCA9IHBoeXNtYXAtPnBoeXNfb2Zmc2V0OwotICAgIHNpemUg PSBwaHlzbWFwLT5zaXplOwotCi0gICAgRFBSSU5URigidW5tYXBwaW5nIHZyYW0gdG8gJSJIV0FE RFJfUFJJeCIgLSAlIkhXQUREUl9QUkl4IiwgYXQgIgotICAgICAgICAgICAgIiUiSFdBRERSX1BS SXgiXG4iLCBzdGFydF9hZGRyLCBzdGFydF9hZGRyICsgc2l6ZSwgcGh5c19vZmZzZXQpOwotCi0g ICAgc2l6ZSA+Pj0gVEFSR0VUX1BBR0VfQklUUzsKLSAgICBzdGFydF9hZGRyID4+PSBUQVJHRVRf UEFHRV9CSVRTOwotICAgIHBoeXNfb2Zmc2V0ID4+PSBUQVJHRVRfUEFHRV9CSVRTOwotICAgIGZv ciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgeGVuX3Bmbl90IGlkeCA9IHN0YXJ0 X2FkZHIgKyBpOwotICAgICAgICB4ZW5fcGZuX3QgZ3BmbiA9IHBoeXNfb2Zmc2V0ICsgaTsKLQot ICAgICAgICByYyA9IHhlbl94Y19kb21haW5fYWRkX3RvX3BoeXNtYXAoeGVuX3hjLCB4ZW5fZG9t aWQsIFhFTk1BUFNQQUNFX2dtZm4sIGlkeCwgZ3Bmbik7Ci0gICAgICAgIGlmIChyYykgewotICAg ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJhZGRfdG9fcGh5c21hcCBNRk4gJSJQUklfeGVuX3Bm biIgdG8gUEZOICUiCi0gICAgICAgICAgICAgICAgICAgIFBSSV94ZW5fcGZuIiBmYWlsZWQ6ICVk IChlcnJubzogJWQpXG4iLCBpZHgsIGdwZm4sIHJjLCBlcnJubyk7Ci0gICAgICAgICAgICByZXR1 cm4gLXJjOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUUxJU1RfUkVNT1ZFKHBoeXNtYXAsIGxp c3QpOwotICAgIGlmIChzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCA9PSBwaHlzbWFwKSB7Ci0gICAg ICAgIHN0YXRlLT5sb2dfZm9yX2RpcnR5Yml0ID0gTlVMTDsKLSAgICB9Ci0gICAgZ19mcmVlKHBo eXNtYXApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9zZXRfbWVtb3J5 KHN0cnVjdCBNZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICBNZW1vcnlSZWdpb25TZWN0aW9uICpzZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgYm9vbCBhZGQpCi17Ci0gICAgWGVuSU9TdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2Yo bGlzdGVuZXIsIFhlbklPU3RhdGUsIG1lbW9yeV9saXN0ZW5lcik7Ci0gICAgaHdhZGRyIHN0YXJ0 X2FkZHIgPSBzZWN0aW9uLT5vZmZzZXRfd2l0aGluX2FkZHJlc3Nfc3BhY2U7Ci0gICAgcmFtX2Fk ZHJfdCBzaXplID0gaW50MTI4X2dldDY0KHNlY3Rpb24tPnNpemUpOwotICAgIGJvb2wgbG9nX2Rp cnR5ID0gbWVtb3J5X3JlZ2lvbl9pc19sb2dnaW5nKHNlY3Rpb24tPm1yLCBESVJUWV9NRU1PUllf VkdBKTsKLSAgICBodm1tZW1fdHlwZV90IG1lbV90eXBlOwotCi0gICAgaWYgKHNlY3Rpb24tPm1y ID09ICZyYW1fbWVtb3J5KSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAg ICBpZiAoYWRkKSB7Ci0gICAgICAgICAgICB4ZW5fbWFwX21lbW9yeV9zZWN0aW9uKHhlbl9kb21p ZCwgc3RhdGUtPmlvc2VydmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWN0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHhlbl91bm1hcF9tZW1vcnlf c2VjdGlvbih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh bWVtb3J5X3JlZ2lvbl9pc19yYW0oc2VjdGlvbi0+bXIpKSB7Ci0gICAgICAgIHJldHVybjsKLSAg ICB9Ci0KLSAgICBpZiAobG9nX2RpcnR5ICE9IGFkZCkgewotICAgICAgICByZXR1cm47Ci0gICAg fQotCi0gICAgdHJhY2VfeGVuX2NsaWVudF9zZXRfbWVtb3J5KHN0YXJ0X2FkZHIsIHNpemUsIGxv Z19kaXJ0eSk7Ci0KLSAgICBzdGFydF9hZGRyICY9IFRBUkdFVF9QQUdFX01BU0s7Ci0gICAgc2l6 ZSA9IFRBUkdFVF9QQUdFX0FMSUdOKHNpemUpOwotCi0gICAgaWYgKGFkZCkgewotICAgICAgICBp ZiAoIW1lbW9yeV9yZWdpb25faXNfcm9tKHNlY3Rpb24tPm1yKSkgewotICAgICAgICAgICAgeGVu X2FkZF90b19waHlzbWFwKHN0YXRlLCBzdGFydF9hZGRyLCBzaXplLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlY3Rpb24tPm1yLCBzZWN0aW9uLT5vZmZzZXRfd2l0aGluX3JlZ2lv bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1fdHlwZSA9IEhWTU1FTV9yYW1f cm87Ci0gICAgICAgICAgICBpZiAoeGVuX3NldF9tZW1fdHlwZSh4ZW5fZG9taWQsIG1lbV90eXBl LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfYWRkciA+PiBUQVJHRVRf UEFHRV9CSVRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA+PiBUQVJH RVRfUEFHRV9CSVRTKSkgewotICAgICAgICAgICAgICAgIERQUklOVEYoInhlbl9zZXRfbWVtX3R5 cGUgZXJyb3IsIGFkZHI6ICJUQVJHRVRfRk1UX3BseCJcbiIsCi0gICAgICAgICAgICAgICAgICAg ICAgICBzdGFydF9hZGRyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7 Ci0gICAgICAgIGlmICh4ZW5fcmVtb3ZlX2Zyb21fcGh5c21hcChzdGF0ZSwgc3RhcnRfYWRkciwg c2l6ZSkgPCAwKSB7Ci0gICAgICAgICAgICBEUFJJTlRGKCJwaHlzbWFwcGluZyBkb2VzIG5vdCBl eGlzdCBhdCAiVEFSR0VUX0ZNVF9wbHgiXG4iLCBzdGFydF9hZGRyKTsKLSAgICAgICAgfQotICAg IH0KLX0KLQotc3RhdGljIHZvaWQgeGVuX3JlZ2lvbl9hZGQoTWVtb3J5TGlzdGVuZXIgKmxpc3Rl bmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2Vj dGlvbikKLXsKLSAgICBtZW1vcnlfcmVnaW9uX3JlZihzZWN0aW9uLT5tcik7Ci0gICAgeGVuX3Nl dF9tZW1vcnkobGlzdGVuZXIsIHNlY3Rpb24sIHRydWUpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5f cmVnaW9uX2RlbChNZW1vcnlMaXN0ZW5lciAqbGlzdGVuZXIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBNZW1vcnlSZWdpb25TZWN0aW9uICpzZWN0aW9uKQotewotICAgIHhlbl9zZXRfbWVt b3J5KGxpc3RlbmVyLCBzZWN0aW9uLCBmYWxzZSk7Ci0gICAgbWVtb3J5X3JlZ2lvbl91bnJlZihz ZWN0aW9uLT5tcik7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9pb19hZGQoTWVtb3J5TGlzdGVuZXIg Kmxpc3RlbmVyLAotICAgICAgICAgICAgICAgICAgICAgICBNZW1vcnlSZWdpb25TZWN0aW9uICpz ZWN0aW9uKQotewotICAgIFhlbklPU3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKGxpc3RlbmVy LCBYZW5JT1N0YXRlLCBpb19saXN0ZW5lcik7Ci0gICAgTWVtb3J5UmVnaW9uICptciA9IHNlY3Rp b24tPm1yOwotCi0gICAgaWYgKG1yLT5vcHMgPT0gJnVuYXNzaWduZWRfaW9fb3BzKSB7Ci0gICAg ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtZW1vcnlfcmVnaW9uX3JlZihtcik7Ci0KLSAgICB4 ZW5fbWFwX2lvX3NlY3Rpb24oeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2aWQsIHNlY3Rpb24pOwot fQotCi1zdGF0aWMgdm9pZCB4ZW5faW9fZGVsKE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5lciwKLSAg ICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlvbikKLXsKLSAg ICBYZW5JT1N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZihsaXN0ZW5lciwgWGVuSU9TdGF0ZSwg aW9fbGlzdGVuZXIpOwotICAgIE1lbW9yeVJlZ2lvbiAqbXIgPSBzZWN0aW9uLT5tcjsKLQotICAg IGlmIChtci0+b3BzID09ICZ1bmFzc2lnbmVkX2lvX29wcykgewotICAgICAgICByZXR1cm47Ci0g ICAgfQotCi0gICAgeGVuX3VubWFwX2lvX3NlY3Rpb24oeGVuX2RvbWlkLCBzdGF0ZS0+aW9zZXJ2 aWQsIHNlY3Rpb24pOwotCi0gICAgbWVtb3J5X3JlZ2lvbl91bnJlZihtcik7Ci19Ci0KLXN0YXRp YyB2b2lkIHhlbl9kZXZpY2VfcmVhbGl6ZShEZXZpY2VMaXN0ZW5lciAqbGlzdGVuZXIsCi0JCQkg ICAgICAgRGV2aWNlU3RhdGUgKmRldikKLXsKLSAgICBYZW5JT1N0YXRlICpzdGF0ZSA9IGNvbnRh aW5lcl9vZihsaXN0ZW5lciwgWGVuSU9TdGF0ZSwgZGV2aWNlX2xpc3RlbmVyKTsKLQotICAgIGlm IChvYmplY3RfZHluYW1pY19jYXN0KE9CSkVDVChkZXYpLCBUWVBFX1BDSV9ERVZJQ0UpKSB7Ci0g ICAgICAgIFBDSURldmljZSAqcGNpX2RldiA9IFBDSV9ERVZJQ0UoZGV2KTsKLQotICAgICAgICB4 ZW5fbWFwX3BjaWRldih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwgcGNpX2Rldik7Ci0gICAg fQotfQotCi1zdGF0aWMgdm9pZCB4ZW5fZGV2aWNlX3VucmVhbGl6ZShEZXZpY2VMaXN0ZW5lciAq bGlzdGVuZXIsCi0JCQkJIERldmljZVN0YXRlICpkZXYpCi17Ci0gICAgWGVuSU9TdGF0ZSAqc3Rh dGUgPSBjb250YWluZXJfb2YobGlzdGVuZXIsIFhlbklPU3RhdGUsIGRldmljZV9saXN0ZW5lcik7 Ci0KLSAgICBpZiAob2JqZWN0X2R5bmFtaWNfY2FzdChPQkpFQ1QoZGV2KSwgVFlQRV9QQ0lfREVW SUNFKSkgewotICAgICAgICBQQ0lEZXZpY2UgKnBjaV9kZXYgPSBQQ0lfREVWSUNFKGRldik7Ci0K LSAgICAgICAgeGVuX3VubWFwX3BjaWRldih4ZW5fZG9taWQsIHN0YXRlLT5pb3NlcnZpZCwgcGNp X2Rldik7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB4ZW5fc3luY19kaXJ0eV9iaXRtYXAoWGVu SU9TdGF0ZSAqc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdhZGRy IHN0YXJ0X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJf dCBzaXplKQotewotICAgIGh3YWRkciBucGFnZXMgPSBzaXplID4+IFRBUkdFVF9QQUdFX0JJVFM7 Ci0gICAgY29uc3QgaW50IHdpZHRoID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogODsKLSAgICB1 bnNpZ25lZCBsb25nIGJpdG1hcFtESVZfUk9VTkRfVVAobnBhZ2VzLCB3aWR0aCldOwotICAgIGlu dCByYywgaSwgajsKLSAgICBjb25zdCBYZW5QaHlzbWFwICpwaHlzbWFwID0gTlVMTDsKLQotICAg IHBoeXNtYXAgPSBnZXRfcGh5c21hcHBpbmcoc3RhdGUsIHN0YXJ0X2FkZHIsIHNpemUpOwotICAg IGlmIChwaHlzbWFwID09IE5VTEwpIHsKLSAgICAgICAgLyogbm90IGhhbmRsZWQgKi8KLSAgICAg ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCA9PSBO VUxMKSB7Ci0gICAgICAgIHN0YXRlLT5sb2dfZm9yX2RpcnR5Yml0ID0gcGh5c21hcDsKLSAgICB9 IGVsc2UgaWYgKHN0YXRlLT5sb2dfZm9yX2RpcnR5Yml0ICE9IHBoeXNtYXApIHsKLSAgICAgICAg LyogT25seSBvbmUgcmFuZ2UgZm9yIGRpcnR5IGJpdG1hcCBjYW4gYmUgdHJhY2tlZC4gKi8KLSAg ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJjID0geGVuX3RyYWNrX2RpcnR5X3ZyYW0oeGVu X2RvbWlkLCBzdGFydF9hZGRyID4+IFRBUkdFVF9QQUdFX0JJVFMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBucGFnZXMsIGJpdG1hcCk7Ci0gICAgaWYgKHJjIDwgMCkgewotI2lmbmRl ZiBFTk9EQVRBCi0jZGVmaW5lIEVOT0RBVEEgIEVOT0VOVAotI2VuZGlmCi0gICAgICAgIGlmIChl cnJubyA9PSBFTk9EQVRBKSB7Ci0gICAgICAgICAgICBtZW1vcnlfcmVnaW9uX3NldF9kaXJ0eShm cmFtZWJ1ZmZlciwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICBEUFJJTlRGKCJ4ZW46IHRyYWNrX2Rp cnR5X3ZyYW0gZmFpbGVkICgweCIgVEFSR0VUX0ZNVF9wbHgKLSAgICAgICAgICAgICAgICAgICAg IiwgMHgiIFRBUkdFVF9GTVRfcGx4ICIpOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgc3Rh cnRfYWRkciwgc3RhcnRfYWRkciArIHNpemUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgIH0K LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpF KGJpdG1hcCk7IGkrKykgewotICAgICAgICB1bnNpZ25lZCBsb25nIG1hcCA9IGJpdG1hcFtpXTsK LSAgICAgICAgd2hpbGUgKG1hcCAhPSAwKSB7Ci0gICAgICAgICAgICBqID0gY3R6bChtYXApOwot ICAgICAgICAgICAgbWFwICY9IH4oMXVsIDw8IGopOwotICAgICAgICAgICAgbWVtb3J5X3JlZ2lv bl9zZXRfZGlydHkoZnJhbWVidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaSAqIHdpZHRoICsgaikgKiBUQVJHRVRfUEFHRV9TSVpFLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVEFSR0VUX1BBR0VfU0laRSk7Ci0gICAgICAgIH07Ci0gICAg fQotfQotCi1zdGF0aWMgdm9pZCB4ZW5fbG9nX3N0YXJ0KE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5l ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5UmVnaW9uU2VjdGlvbiAqc2VjdGlv biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZCwgaW50IG5ldykKLXsKLSAgICBY ZW5JT1N0YXRlICpzdGF0ZSA9IGNvbnRhaW5lcl9vZihsaXN0ZW5lciwgWGVuSU9TdGF0ZSwgbWVt b3J5X2xpc3RlbmVyKTsKLQotICAgIGlmIChuZXcgJiB+b2xkICYgKDEgPDwgRElSVFlfTUVNT1JZ X1ZHQSkpIHsKLSAgICAgICAgeGVuX3N5bmNfZGlydHlfYml0bWFwKHN0YXRlLCBzZWN0aW9uLT5v ZmZzZXRfd2l0aGluX2FkZHJlc3Nfc3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQxMjhfZ2V0NjQoc2VjdGlvbi0+c2l6ZSkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQg eGVuX2xvZ19zdG9wKE1lbW9yeUxpc3RlbmVyICpsaXN0ZW5lciwgTWVtb3J5UmVnaW9uU2VjdGlv biAqc2VjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2xkLCBpbnQgbmV3KQot ewotICAgIFhlbklPU3RhdGUgKnN0YXRlID0gY29udGFpbmVyX29mKGxpc3RlbmVyLCBYZW5JT1N0 YXRlLCBtZW1vcnlfbGlzdGVuZXIpOwotCi0gICAgaWYgKG9sZCAmIH5uZXcgJiAoMSA8PCBESVJU WV9NRU1PUllfVkdBKSkgewotICAgICAgICBzdGF0ZS0+bG9nX2Zvcl9kaXJ0eWJpdCA9IE5VTEw7 Ci0gICAgICAgIC8qIERpc2FibGUgZGlydHkgYml0IHRyYWNraW5nICovCi0gICAgICAgIHhlbl90 cmFja19kaXJ0eV92cmFtKHhlbl9kb21pZCwgMCwgMCwgTlVMTCk7Ci0gICAgfQotfQotCi1zdGF0 aWMgdm9pZCB4ZW5fbG9nX3N5bmMoTWVtb3J5TGlzdGVuZXIgKmxpc3RlbmVyLCBNZW1vcnlSZWdp b25TZWN0aW9uICpzZWN0aW9uKQotewotICAgIFhlbklPU3RhdGUgKnN0YXRlID0gY29udGFpbmVy X29mKGxpc3RlbmVyLCBYZW5JT1N0YXRlLCBtZW1vcnlfbGlzdGVuZXIpOwotCi0gICAgeGVuX3N5 bmNfZGlydHlfYml0bWFwKHN0YXRlLCBzZWN0aW9uLT5vZmZzZXRfd2l0aGluX2FkZHJlc3Nfc3Bh Y2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludDEyOF9nZXQ2NChzZWN0aW9uLT5zaXpl KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9sb2dfZ2xvYmFsX3N0YXJ0KE1lbW9yeUxpc3RlbmVy ICpsaXN0ZW5lcikKLXsKLSAgICBpZiAoeGVuX2VuYWJsZWQoKSkgewotICAgICAgICB4ZW5faW5f bWlncmF0aW9uID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHhlbl9sb2dfZ2xvYmFs X3N0b3AoTWVtb3J5TGlzdGVuZXIgKmxpc3RlbmVyKQotewotICAgIHhlbl9pbl9taWdyYXRpb24g PSBmYWxzZTsKLX0KLQotc3RhdGljIE1lbW9yeUxpc3RlbmVyIHhlbl9tZW1vcnlfbGlzdGVuZXIg PSB7Ci0gICAgLnJlZ2lvbl9hZGQgPSB4ZW5fcmVnaW9uX2FkZCwKLSAgICAucmVnaW9uX2RlbCA9 IHhlbl9yZWdpb25fZGVsLAotICAgIC5sb2dfc3RhcnQgPSB4ZW5fbG9nX3N0YXJ0LAotICAgIC5s b2dfc3RvcCA9IHhlbl9sb2dfc3RvcCwKLSAgICAubG9nX3N5bmMgPSB4ZW5fbG9nX3N5bmMsCi0g ICAgLmxvZ19nbG9iYWxfc3RhcnQgPSB4ZW5fbG9nX2dsb2JhbF9zdGFydCwKLSAgICAubG9nX2ds b2JhbF9zdG9wID0geGVuX2xvZ19nbG9iYWxfc3RvcCwKLSAgICAucHJpb3JpdHkgPSAxMCwKLX07 Ci0KLXN0YXRpYyBNZW1vcnlMaXN0ZW5lciB4ZW5faW9fbGlzdGVuZXIgPSB7Ci0gICAgLnJlZ2lv bl9hZGQgPSB4ZW5faW9fYWRkLAotICAgIC5yZWdpb25fZGVsID0geGVuX2lvX2RlbCwKLSAgICAu cHJpb3JpdHkgPSAxMCwKLX07Ci0KLXN0YXRpYyBEZXZpY2VMaXN0ZW5lciB4ZW5fZGV2aWNlX2xp c3RlbmVyID0gewotICAgIC5yZWFsaXplID0geGVuX2RldmljZV9yZWFsaXplLAotICAgIC51bnJl YWxpemUgPSB4ZW5fZGV2aWNlX3VucmVhbGl6ZSwKLX07Ci0KLS8qIGdldCB0aGUgaW9yZXEgcGFj a2V0cyBmcm9tIHNoYXJlIG1lbSAqLwotc3RhdGljIGlvcmVxX3QgKmNwdV9nZXRfaW9yZXFfZnJv bV9zaGFyZWRfbWVtb3J5KFhlbklPU3RhdGUgKnN0YXRlLCBpbnQgdmNwdSkKLXsKLSAgICBpb3Jl cV90ICpyZXEgPSB4ZW5fdmNwdV9pb3JlcShzdGF0ZS0+c2hhcmVkX3BhZ2UsIHZjcHUpOwotCi0g ICAgaWYgKHJlcS0+c3RhdGUgIT0gU1RBVEVfSU9SRVFfUkVBRFkpIHsKLSAgICAgICAgRFBSSU5U RigiSS9PIHJlcXVlc3Qgbm90IHJlYWR5OiAiCi0gICAgICAgICAgICAgICAgIiV4LCBwdHI6ICV4 LCBwb3J0OiAlIlBSSXg2NCIsICIKLSAgICAgICAgICAgICAgICAiZGF0YTogJSJQUkl4NjQiLCBj b3VudDogJXUsIHNpemU6ICV1XG4iLAotICAgICAgICAgICAgICAgIHJlcS0+c3RhdGUsIHJlcS0+ ZGF0YV9pc19wdHIsIHJlcS0+YWRkciwKLSAgICAgICAgICAgICAgICByZXEtPmRhdGEsIHJlcS0+ Y291bnQsIHJlcS0+c2l6ZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHhl bl9ybWIoKTsgLyogc2VlIElPUkVRX1JFQURZIC90aGVuLyByZWFkIGNvbnRlbnRzIG9mIGlvcmVx ICovCi0KLSAgICByZXEtPnN0YXRlID0gU1RBVEVfSU9SRVFfSU5QUk9DRVNTOwotICAgIHJldHVy biByZXE7Ci19Ci0KLS8qIHVzZSBwb2xsIHRvIGdldCB0aGUgcG9ydCBub3RpZmljYXRpb24gKi8K LS8qIGlvcmVxX3ZlYy0tb3V0LHRoZSAqLwotLyogcmV0dmFsLS10aGUgbnVtYmVyIG9mIGlvcmVx IHBhY2tldCAqLwotc3RhdGljIGlvcmVxX3QgKmNwdV9nZXRfaW9yZXEoWGVuSU9TdGF0ZSAqc3Rh dGUpCi17Ci0gICAgaW50IGk7Ci0gICAgZXZ0Y2huX3BvcnRfdCBwb3J0OwotCi0gICAgcG9ydCA9 IHhlbmV2dGNobl9wZW5kaW5nKHN0YXRlLT54Y2VfaGFuZGxlKTsKLSAgICBpZiAocG9ydCA9PSBz dGF0ZS0+YnVmaW9yZXFfbG9jYWxfcG9ydCkgewotICAgICAgICB0aW1lcl9tb2Qoc3RhdGUtPmJ1 ZmZlcmVkX2lvX3RpbWVyLAotICAgICAgICAgICAgICAgIEJVRkZFUl9JT19NQVhfREVMQVkgKyBx ZW11X2Nsb2NrX2dldF9tcyhRRU1VX0NMT0NLX1JFQUxUSU1FKSk7Ci0gICAgICAgIHJldHVybiBO VUxMOwotICAgIH0KLQotICAgIGlmIChwb3J0ICE9IC0xKSB7Ci0gICAgICAgIGZvciAoaSA9IDA7 IGkgPCBtYXhfY3B1czsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPmlvcmVxX2xvY2Fs X3BvcnRbaV0gPT0gcG9ydCkgewotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGkgPT0gbWF4X2NwdXMpIHsKLSAgICAgICAgICAg IGh3X2Vycm9yKCJGYXRhbCBlcnJvciB3aGlsZSB0cnlpbmcgdG8gZ2V0IGlvIGV2ZW50IVxuIik7 Ci0gICAgICAgIH0KLQotICAgICAgICAvKiB1bm1hc2sgdGhlIHdhbnRlZCBwb3J0IGFnYWluICov Ci0gICAgICAgIHhlbmV2dGNobl91bm1hc2soc3RhdGUtPnhjZV9oYW5kbGUsIHBvcnQpOwotCi0g ICAgICAgIC8qIGdldCB0aGUgaW8gcGFja2V0IGZyb20gc2hhcmVkIG1lbW9yeSAqLwotICAgICAg ICBzdGF0ZS0+c2VuZF92Y3B1ID0gaTsKLSAgICAgICAgcmV0dXJuIGNwdV9nZXRfaW9yZXFfZnJv bV9zaGFyZWRfbWVtb3J5KHN0YXRlLCBpKTsKLSAgICB9Ci0KLSAgICAvKiByZWFkIGVycm9yIG9y IHJlYWQgbm90aGluZyAqLwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdWludDMyX3Qg ZG9faW5wKHVpbnQzMl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLSAgICBzd2l0Y2gg KHNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIGNwdV9pbmIoYWRk cik7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiBjcHVfaW53KGFkZHIpOwot ICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICByZXR1cm4gY3B1X2lubChhZGRyKTsKLSAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGh3X2Vycm9yKCJpbnA6IGJhZCBzaXplOiAlMDR4ICVs eCIsIGFkZHIsIHNpemUpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZG9fb3V0cCh1aW50MzJf dCBhZGRyLAotICAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVpbnQzMl90IHZhbCkKLXsKLSAg ICBzd2l0Y2ggKHNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgcmV0dXJuIGNw dV9vdXRiKGFkZHIsIHZhbCk7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHJldHVybiBj cHVfb3V0dyhhZGRyLCB2YWwpOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICByZXR1cm4g Y3B1X291dGwoYWRkciwgdmFsKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGh3X2Vy cm9yKCJvdXRwOiBiYWQgc2l6ZTogJTA0eCAlbHgiLCBhZGRyLCBzaXplKTsKLSAgICB9Ci19Ci0K LS8qCi0gKiBIZWxwZXIgZnVuY3Rpb25zIHdoaWNoIHJlYWQvd3JpdGUgYW4gb2JqZWN0IGZyb20v dG8gcGh5c2ljYWwgZ3Vlc3QKLSAqIG1lbW9yeSwgYXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRp b24gb2YgYW4gaW9yZXEuCi0gKgotICogRXF1aXZhbGVudCB0bwotICogICBjcHVfcGh5c2ljYWxf bWVtb3J5X3J3KGFkZHIgKyAocmVxLT5kZiA/IC0xIDogKzEpICogcmVxLT5zaXplICogaSwKLSAq ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwsIHJlcS0+c2l6ZSwgMC8xKQotICogZXhjZXB0 IHdpdGhvdXQgdGhlIGludGVnZXIgb3ZlcmZsb3cgcHJvYmxlbXMuCi0gKi8KLXN0YXRpYyB2b2lk IHJ3X3BoeXNfcmVxX2l0ZW0oaHdhZGRyIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlvcmVxX3QgKnJlcSwgdWludDMyX3QgaSwgdm9pZCAqdmFsLCBpbnQgcncpCi17Ci0gICAg LyogRG8gZXZlcnl0aGluZyB1bnNpZ25lZCBzbyBvdmVyZmxvdyBqdXN0IHJlc3VsdHMgaW4gYSB0 cnVuY2F0ZWQgcmVzdWx0Ci0gICAgICogYW5kIGFjY2Vzc2VzIHRvIHVuZGVzaXJlZCBwYXJ0cyBv ZiBndWVzdCBtZW1vcnksIHdoaWNoIGlzIHVwCi0gICAgICogdG8gdGhlIGd1ZXN0ICovCi0gICAg aHdhZGRyIG9mZnNldCA9IChod2FkZHIpcmVxLT5zaXplICogaTsKLSAgICBpZiAocmVxLT5kZikg ewotICAgICAgICBhZGRyIC09IG9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBhZGRyICs9 IG9mZnNldDsKLSAgICB9Ci0gICAgY3B1X3BoeXNpY2FsX21lbW9yeV9ydyhhZGRyLCB2YWwsIHJl cS0+c2l6ZSwgcncpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhZF9waHlzX3JlcV9pdGVt KGh3YWRkciBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3Jl cV90ICpyZXEsIHVpbnQzMl90IGksIHZvaWQgKnZhbCkKLXsKLSAgICByd19waHlzX3JlcV9pdGVt KGFkZHIsIHJlcSwgaSwgdmFsLCAwKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9waHlz X3JlcV9pdGVtKGh3YWRkciBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW9yZXFfdCAqcmVxLCB1aW50MzJfdCBpLCB2b2lkICp2YWwpCi17Ci0gICAgcndfcGh5 c19yZXFfaXRlbShhZGRyLCByZXEsIGksIHZhbCwgMSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgY3B1 X2lvcmVxX3Bpbyhpb3JlcV90ICpyZXEpCi17Ci0gICAgdWludDMyX3QgaTsKLQotICAgIHRyYWNl X2NwdV9pb3JlcV9waW8ocmVxLCByZXEtPmRpciwgcmVxLT5kZiwgcmVxLT5kYXRhX2lzX3B0ciwg cmVxLT5hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZGF0YSwgcmVxLT5jb3Vu dCwgcmVxLT5zaXplKTsKLQotICAgIGlmIChyZXEtPnNpemUgPiBzaXplb2YodWludDMyX3QpKSB7 Ci0gICAgICAgIGh3X2Vycm9yKCJQSU86IGJhZCBzaXplICgldSkiLCByZXEtPnNpemUpOwotICAg IH0KLQotICAgIGlmIChyZXEtPmRpciA9PSBJT1JFUV9SRUFEKSB7Ci0gICAgICAgIGlmICghcmVx LT5kYXRhX2lzX3B0cikgewotICAgICAgICAgICAgcmVxLT5kYXRhID0gZG9faW5wKHJlcS0+YWRk ciwgcmVxLT5zaXplKTsKLSAgICAgICAgICAgIHRyYWNlX2NwdV9pb3JlcV9waW9fcmVhZF9yZWco cmVxLCByZXEtPmRhdGEsIHJlcS0+YWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVxLT5zaXplKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHVp bnQzMl90IHRtcDsKLQotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlcS0+Y291bnQ7IGkr KykgewotICAgICAgICAgICAgICAgIHRtcCA9IGRvX2lucChyZXEtPmFkZHIsIHJlcS0+c2l6ZSk7 Ci0gICAgICAgICAgICAgICAgd3JpdGVfcGh5c19yZXFfaXRlbShyZXEtPmRhdGEsIHJlcSwgaSwg JnRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJlcS0+ZGly ID09IElPUkVRX1dSSVRFKSB7Ci0gICAgICAgIGlmICghcmVxLT5kYXRhX2lzX3B0cikgewotICAg ICAgICAgICAgdHJhY2VfY3B1X2lvcmVxX3Bpb193cml0ZV9yZWcocmVxLCByZXEtPmRhdGEsIHJl cS0+YWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ c2l6ZSk7Ci0gICAgICAgICAgICBkb19vdXRwKHJlcS0+YWRkciwgcmVxLT5zaXplLCByZXEtPmRh dGEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlcS0+ Y291bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHVpbnQzMl90IHRtcCA9IDA7Ci0KLSAgICAg ICAgICAgICAgICByZWFkX3BoeXNfcmVxX2l0ZW0ocmVxLT5kYXRhLCByZXEsIGksICZ0bXApOwot ICAgICAgICAgICAgICAgIGRvX291dHAocmVxLT5hZGRyLCByZXEtPnNpemUsIHRtcCk7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGNwdV9pb3JlcV9t b3ZlKGlvcmVxX3QgKnJlcSkKLXsKLSAgICB1aW50MzJfdCBpOwotCi0gICAgdHJhY2VfY3B1X2lv cmVxX21vdmUocmVxLCByZXEtPmRpciwgcmVxLT5kZiwgcmVxLT5kYXRhX2lzX3B0ciwgcmVxLT5h ZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlcS0+ZGF0YSwgcmVxLT5jb3VudCwgcmVx LT5zaXplKTsKLQotICAgIGlmIChyZXEtPnNpemUgPiBzaXplb2YocmVxLT5kYXRhKSkgewotICAg ICAgICBod19lcnJvcigiTU1JTzogYmFkIHNpemUgKCV1KSIsIHJlcS0+c2l6ZSk7Ci0gICAgfQot Ci0gICAgaWYgKCFyZXEtPmRhdGFfaXNfcHRyKSB7Ci0gICAgICAgIGlmIChyZXEtPmRpciA9PSBJ T1JFUV9SRUFEKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxLT5jb3VudDsgaSsr KSB7Ci0gICAgICAgICAgICAgICAgcmVhZF9waHlzX3JlcV9pdGVtKHJlcS0+YWRkciwgcmVxLCBp LCAmcmVxLT5kYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChyZXEtPmRp ciA9PSBJT1JFUV9XUklURSkgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlcS0+Y291 bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHdyaXRlX3BoeXNfcmVxX2l0ZW0ocmVxLT5hZGRy LCByZXEsIGksICZyZXEtPmRhdGEpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBl bHNlIHsKLSAgICAgICAgdWludDY0X3QgdG1wOwotCi0gICAgICAgIGlmIChyZXEtPmRpciA9PSBJ T1JFUV9SRUFEKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVxLT5jb3VudDsgaSsr KSB7Ci0gICAgICAgICAgICAgICAgcmVhZF9waHlzX3JlcV9pdGVtKHJlcS0+YWRkciwgcmVxLCBp LCAmdG1wKTsKLSAgICAgICAgICAgICAgICB3cml0ZV9waHlzX3JlcV9pdGVtKHJlcS0+ZGF0YSwg cmVxLCBpLCAmdG1wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChyZXEtPmRp ciA9PSBJT1JFUV9XUklURSkgewotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlcS0+Y291 bnQ7IGkrKykgewotICAgICAgICAgICAgICAgIHJlYWRfcGh5c19yZXFfaXRlbShyZXEtPmRhdGEs IHJlcSwgaSwgJnRtcCk7Ci0gICAgICAgICAgICAgICAgd3JpdGVfcGh5c19yZXFfaXRlbShyZXEt PmFkZHIsIHJlcSwgaSwgJnRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19 Ci0KLXN0YXRpYyB2b2lkIHJlZ3NfdG9fY3B1KHZtd2FyZV9yZWdzX3QgKnZtcG9ydF9yZWdzLCBp b3JlcV90ICpyZXEpCi17Ci0gICAgWDg2Q1BVICpjcHU7Ci0gICAgQ1BVWDg2U3RhdGUgKmVudjsK LQotICAgIGNwdSA9IFg4Nl9DUFUoY3VycmVudF9jcHUpOwotICAgIGVudiA9ICZjcHUtPmVudjsK LSAgICBlbnYtPnJlZ3NbUl9FQVhdID0gcmVxLT5kYXRhOwotICAgIGVudi0+cmVnc1tSX0VCWF0g PSB2bXBvcnRfcmVncy0+ZWJ4OwotICAgIGVudi0+cmVnc1tSX0VDWF0gPSB2bXBvcnRfcmVncy0+ ZWN4OwotICAgIGVudi0+cmVnc1tSX0VEWF0gPSB2bXBvcnRfcmVncy0+ZWR4OwotICAgIGVudi0+ cmVnc1tSX0VTSV0gPSB2bXBvcnRfcmVncy0+ZXNpOwotICAgIGVudi0+cmVnc1tSX0VESV0gPSB2 bXBvcnRfcmVncy0+ZWRpOwotfQotCi1zdGF0aWMgdm9pZCByZWdzX2Zyb21fY3B1KHZtd2FyZV9y ZWdzX3QgKnZtcG9ydF9yZWdzKQotewotICAgIFg4NkNQVSAqY3B1ID0gWDg2X0NQVShjdXJyZW50 X2NwdSk7Ci0gICAgQ1BVWDg2U3RhdGUgKmVudiA9ICZjcHUtPmVudjsKLQotICAgIHZtcG9ydF9y ZWdzLT5lYnggPSBlbnYtPnJlZ3NbUl9FQlhdOwotICAgIHZtcG9ydF9yZWdzLT5lY3ggPSBlbnYt PnJlZ3NbUl9FQ1hdOwotICAgIHZtcG9ydF9yZWdzLT5lZHggPSBlbnYtPnJlZ3NbUl9FRFhdOwot ICAgIHZtcG9ydF9yZWdzLT5lc2kgPSBlbnYtPnJlZ3NbUl9FU0ldOwotICAgIHZtcG9ydF9yZWdz LT5lZGkgPSBlbnYtPnJlZ3NbUl9FREldOwotfQotCi1zdGF0aWMgdm9pZCBoYW5kbGVfdm1wb3J0 X2lvcmVxKFhlbklPU3RhdGUgKnN0YXRlLCBpb3JlcV90ICpyZXEpCi17Ci0gICAgdm13YXJlX3Jl Z3NfdCAqdm1wb3J0X3JlZ3M7Ci0KLSAgICBhc3NlcnQoc3RhdGUtPnNoYXJlZF92bXBvcnRfcGFn ZSk7Ci0gICAgdm1wb3J0X3JlZ3MgPQotICAgICAgICAmc3RhdGUtPnNoYXJlZF92bXBvcnRfcGFn ZS0+dmNwdV92bXBvcnRfcmVnc1tzdGF0ZS0+c2VuZF92Y3B1XTsKLSAgICBRRU1VX0JVSUxEX0JV R19PTihzaXplb2YoKnJlcSkgPCBzaXplb2YoKnZtcG9ydF9yZWdzKSk7Ci0KLSAgICBjdXJyZW50 X2NwdSA9IHN0YXRlLT5jcHVfYnlfdmNwdV9pZFtzdGF0ZS0+c2VuZF92Y3B1XTsKLSAgICByZWdz X3RvX2NwdSh2bXBvcnRfcmVncywgcmVxKTsKLSAgICBjcHVfaW9yZXFfcGlvKHJlcSk7Ci0gICAg cmVnc19mcm9tX2NwdSh2bXBvcnRfcmVncyk7Ci0gICAgY3VycmVudF9jcHUgPSBOVUxMOwotfQot Ci1zdGF0aWMgdm9pZCBoYW5kbGVfaW9yZXEoWGVuSU9TdGF0ZSAqc3RhdGUsIGlvcmVxX3QgKnJl cSkKLXsKLSAgICB0cmFjZV9oYW5kbGVfaW9yZXEocmVxLCByZXEtPnR5cGUsIHJlcS0+ZGlyLCBy ZXEtPmRmLCByZXEtPmRhdGFfaXNfcHRyLAotICAgICAgICAgICAgICAgICAgICAgICByZXEtPmFk ZHIsIHJlcS0+ZGF0YSwgcmVxLT5jb3VudCwgcmVxLT5zaXplKTsKLQotICAgIGlmICghcmVxLT5k YXRhX2lzX3B0ciAmJiAocmVxLT5kaXIgPT0gSU9SRVFfV1JJVEUpICYmCi0gICAgICAgICAgICAo cmVxLT5zaXplIDwgc2l6ZW9mICh0YXJnZXRfdWxvbmcpKSkgewotICAgICAgICByZXEtPmRhdGEg Jj0gKCh0YXJnZXRfdWxvbmcpIDEgPDwgKDggKiByZXEtPnNpemUpKSAtIDE7Ci0gICAgfQotCi0g ICAgaWYgKHJlcS0+ZGlyID09IElPUkVRX1dSSVRFKQotICAgICAgICB0cmFjZV9oYW5kbGVfaW9y ZXFfd3JpdGUocmVxLCByZXEtPnR5cGUsIHJlcS0+ZGYsIHJlcS0+ZGF0YV9pc19wdHIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmFkZHIsIHJlcS0+ZGF0YSwgcmVxLT5j b3VudCwgcmVxLT5zaXplKTsKLQotICAgIHN3aXRjaCAocmVxLT50eXBlKSB7Ci0gICAgICAgIGNh c2UgSU9SRVFfVFlQRV9QSU86Ci0gICAgICAgICAgICBjcHVfaW9yZXFfcGlvKHJlcSk7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJT1JFUV9UWVBFX0NPUFk6Ci0gICAgICAgICAg ICBjcHVfaW9yZXFfbW92ZShyZXEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug SU9SRVFfVFlQRV9WTVdBUkVfUE9SVDoKLSAgICAgICAgICAgIGhhbmRsZV92bXBvcnRfaW9yZXEo c3RhdGUsIHJlcSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJT1JFUV9UWVBF X1RJTUVPRkZTRVQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJT1JFUV9UWVBF X0lOVkFMSURBVEU6Ci0gICAgICAgICAgICB4ZW5faW52YWxpZGF0ZV9tYXBfY2FjaGUoKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElPUkVRX1RZUEVfUENJX0NPTkZJRzogewot ICAgICAgICAgICAgdWludDMyX3Qgc2JkZiA9IHJlcS0+YWRkciA+PiAzMjsKLSAgICAgICAgICAg IHVpbnQzMl90IHZhbDsKLQotICAgICAgICAgICAgLyogRmFrZSBhIHdyaXRlIHRvIHBvcnQgMHhD Rjggc28gdGhhdAotICAgICAgICAgICAgICogdGhlIGNvbmZpZyBzcGFjZSBhY2Nlc3Mgd2lsbCB0 YXJnZXQgdGhlCi0gICAgICAgICAgICAgKiBjb3JyZWN0IGRldmljZSBtb2RlbC4KLSAgICAgICAg ICAgICAqLwotICAgICAgICAgICAgdmFsID0gKDF1IDw8IDMxKSB8Ci0gICAgICAgICAgICAgICAg ICAoKHJlcS0+YWRkciAmIDB4MGYwMCkgPDwgMTYpIHwKLSAgICAgICAgICAgICAgICAgICgoc2Jk ZiAmIDB4ZmZmZikgPDwgOCkgfAotICAgICAgICAgICAgICAgICAgKHJlcS0+YWRkciAmIDB4ZmMp OwotICAgICAgICAgICAgZG9fb3V0cCgweGNmOCwgNCwgdmFsKTsKLQotICAgICAgICAgICAgLyog Tm93IGlzc3VlIHRoZSBjb25maWcgc3BhY2UgYWNjZXNzIHZpYQotICAgICAgICAgICAgICogcG9y dCAweENGQwotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXEtPmFkZHIgPSAweGNmYyB8 IChyZXEtPmFkZHIgJiAweDAzKTsKLSAgICAgICAgICAgIGNwdV9pb3JlcV9waW8ocmVxKTsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg ICBod19lcnJvcigiSW52YWxpZCBpb3JlcSB0eXBlIDB4JXhcbiIsIHJlcS0+dHlwZSk7Ci0gICAg fQotICAgIGlmIChyZXEtPmRpciA9PSBJT1JFUV9SRUFEKSB7Ci0gICAgICAgIHRyYWNlX2hhbmRs ZV9pb3JlcV9yZWFkKHJlcSwgcmVxLT50eXBlLCByZXEtPmRmLCByZXEtPmRhdGFfaXNfcHRyLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXEtPmFkZHIsIHJlcS0+ZGF0YSwgcmVx LT5jb3VudCwgcmVxLT5zaXplKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgaGFuZGxlX2J1ZmZl cmVkX2lvcGFnZShYZW5JT1N0YXRlICpzdGF0ZSkKLXsKLSAgICBidWZmZXJlZF9pb3BhZ2VfdCAq YnVmX3BhZ2UgPSBzdGF0ZS0+YnVmZmVyZWRfaW9fcGFnZTsKLSAgICBidWZfaW9yZXFfdCAqYnVm X3JlcSA9IE5VTEw7Ci0gICAgaW9yZXFfdCByZXE7Ci0gICAgaW50IHF3OwotCi0gICAgaWYgKCFi dWZfcGFnZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJnJlcSwg MHgwMCwgc2l6ZW9mKHJlcSkpOwotICAgIHJlcS5zdGF0ZSA9IFNUQVRFX0lPUkVRX1JFQURZOwot ICAgIHJlcS5jb3VudCA9IDE7Ci0gICAgcmVxLmRpciA9IElPUkVRX1dSSVRFOwotCi0gICAgZm9y ICg7OykgewotICAgICAgICB1aW50MzJfdCByZHB0ciA9IGJ1Zl9wYWdlLT5yZWFkX3BvaW50ZXIs IHdycHRyOwotCi0gICAgICAgIHhlbl9ybWIoKTsKLSAgICAgICAgd3JwdHIgPSBidWZfcGFnZS0+ d3JpdGVfcG9pbnRlcjsKLSAgICAgICAgeGVuX3JtYigpOwotICAgICAgICBpZiAocmRwdHIgIT0g YnVmX3BhZ2UtPnJlYWRfcG9pbnRlcikgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKHJkcHRyID09IHdycHRyKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfQotICAgICAgICBidWZfcmVxID0gJmJ1Zl9wYWdlLT5idWZfaW9yZXFbcmRwdHIgJSBJ T1JFUV9CVUZGRVJfU0xPVF9OVU1dOwotICAgICAgICByZXEuc2l6ZSA9IDFVIDw8IGJ1Zl9yZXEt PnNpemU7Ci0gICAgICAgIHJlcS5hZGRyID0gYnVmX3JlcS0+YWRkcjsKLSAgICAgICAgcmVxLmRh dGEgPSBidWZfcmVxLT5kYXRhOwotICAgICAgICByZXEudHlwZSA9IGJ1Zl9yZXEtPnR5cGU7Ci0g ICAgICAgIHhlbl9ybWIoKTsKLSAgICAgICAgcXcgPSAocmVxLnNpemUgPT0gOCk7Ci0gICAgICAg IGlmIChxdykgewotICAgICAgICAgICAgaWYgKHJkcHRyICsgMSA9PSB3cnB0cikgewotICAgICAg ICAgICAgICAgIGh3X2Vycm9yKCJJbmNvbXBsZXRlIHF1YWQgd29yZCBidWZmZXJlZCBpb3JlcSIp OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnVmX3JlcSA9ICZidWZfcGFnZS0+YnVmX2lv cmVxWyhyZHB0ciArIDEpICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJT1JFUV9CVUZGRVJfU0xPVF9OVU1dOwotICAgICAgICAgICAgcmVxLmRhdGEgfD0gKCh1 aW50NjRfdClidWZfcmVxLT5kYXRhKSA8PCAzMjsKLSAgICAgICAgICAgIHhlbl9ybWIoKTsKLSAg ICAgICAgfQotCi0gICAgICAgIGhhbmRsZV9pb3JlcShzdGF0ZSwgJnJlcSk7Ci0KLSAgICAgICAg LyogT25seSByZXEuZGF0YSBtYXkgZ2V0IHVwZGF0ZWQgYnkgaGFuZGxlX2lvcmVxKCksIGFsYmVp dCBldmVuIHRoYXQKLSAgICAgICAgICogc2hvdWxkIG5vdCBoYXBwZW4gYXMgc3VjaCBkYXRhIHdv dWxkIG5ldmVyIG1ha2UgaXQgdG8gdGhlIGd1ZXN0ICh3ZQotICAgICAgICAgKiBjYW4gb25seSB1 c2VmdWxseSBzZWUgd3JpdGVzIGhlcmUgYWZ0ZXIgYWxsKS4KLSAgICAgICAgICovCi0gICAgICAg IGFzc2VydChyZXEuc3RhdGUgPT0gU1RBVEVfSU9SRVFfUkVBRFkpOwotICAgICAgICBhc3NlcnQo cmVxLmNvdW50ID09IDEpOwotICAgICAgICBhc3NlcnQocmVxLmRpciA9PSBJT1JFUV9XUklURSk7 Ci0gICAgICAgIGFzc2VydCghcmVxLmRhdGFfaXNfcHRyKTsKLQotICAgICAgICBhdG9taWNfYWRk KCZidWZfcGFnZS0+cmVhZF9wb2ludGVyLCBxdyArIDEpOwotICAgIH0KLQotICAgIHJldHVybiBy ZXEuY291bnQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGhhbmRsZV9idWZmZXJlZF9pbyh2b2lkICpvcGFx dWUpCi17Ci0gICAgWGVuSU9TdGF0ZSAqc3RhdGUgPSBvcGFxdWU7Ci0KLSAgICBpZiAoaGFuZGxl X2J1ZmZlcmVkX2lvcGFnZShzdGF0ZSkpIHsKLSAgICAgICAgdGltZXJfbW9kKHN0YXRlLT5idWZm ZXJlZF9pb190aW1lciwKLSAgICAgICAgICAgICAgICBCVUZGRVJfSU9fTUFYX0RFTEFZICsgcWVt dV9jbG9ja19nZXRfbXMoUUVNVV9DTE9DS19SRUFMVElNRSkpOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIHRpbWVyX2RlbChzdGF0ZS0+YnVmZmVyZWRfaW9fdGltZXIpOwotICAgICAgICB4ZW5ldnRj aG5fdW5tYXNrKHN0YXRlLT54Y2VfaGFuZGxlLCBzdGF0ZS0+YnVmaW9yZXFfbG9jYWxfcG9ydCk7 Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjcHVfaGFuZGxlX2lvcmVxKHZvaWQgKm9wYXF1ZSkK LXsKLSAgICBYZW5JT1N0YXRlICpzdGF0ZSA9IG9wYXF1ZTsKLSAgICBpb3JlcV90ICpyZXEgPSBj cHVfZ2V0X2lvcmVxKHN0YXRlKTsKLQotICAgIGhhbmRsZV9idWZmZXJlZF9pb3BhZ2Uoc3RhdGUp OwotICAgIGlmIChyZXEpIHsKLSAgICAgICAgaW9yZXFfdCBjb3B5ID0gKnJlcTsKLQotICAgICAg ICB4ZW5fcm1iKCk7Ci0gICAgICAgIGhhbmRsZV9pb3JlcShzdGF0ZSwgJmNvcHkpOwotICAgICAg ICByZXEtPmRhdGEgPSBjb3B5LmRhdGE7Ci0KLSAgICAgICAgaWYgKHJlcS0+c3RhdGUgIT0gU1RB VEVfSU9SRVFfSU5QUk9DRVNTKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZG5l c3MgaW4gSS9PIHJlcXVlc3QgLi4uIG5vdCBpbiBzZXJ2aWNlPyE6ICIKLSAgICAgICAgICAgICAg ICAgICAgIiV4LCBwdHI6ICV4LCBwb3J0OiAlIlBSSXg2NCIsICIKLSAgICAgICAgICAgICAgICAg ICAgImRhdGE6ICUiUFJJeDY0IiwgY291bnQ6ICV1LCBzaXplOiAldSwgdHlwZTogJXVcbiIsCi0g ICAgICAgICAgICAgICAgICAgIHJlcS0+c3RhdGUsIHJlcS0+ZGF0YV9pc19wdHIsIHJlcS0+YWRk ciwKLSAgICAgICAgICAgICAgICAgICAgcmVxLT5kYXRhLCByZXEtPmNvdW50LCByZXEtPnNpemUs IHJlcS0+dHlwZSk7Ci0gICAgICAgICAgICBkZXN0cm95X2h2bV9kb21haW4oZmFsc2UpOwotICAg ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgeGVuX3dtYigpOyAvKiBVcGRh dGUgaW9yZXEgY29udGVudHMgL3RoZW4vIHVwZGF0ZSBzdGF0ZS4gKi8KLQotICAgICAgICAvKgot ICAgICAgICAgKiBXZSBkbyB0aGlzIGJlZm9yZSB3ZSBzZW5kIHRoZSByZXNwb25zZSBzbyB0aGF0 IHRoZSB0b29scwotICAgICAgICAgKiBoYXZlIHRoZSBvcHBvcnR1bml0eSB0byBwaWNrIHVwIG9u IHRoZSByZXNldCBiZWZvcmUgdGhlCi0gICAgICAgICAqIGd1ZXN0IHJlc3VtZXMgYW5kIGRvZXMg YSBobHQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkIHdoaWNoCi0gICAgICAgICAqIGNhdXNlcyBY ZW4gdG8gcG93ZXJkb3duIHRoZSBkb21haW4uCi0gICAgICAgICAqLwotICAgICAgICBpZiAocnVu c3RhdGVfaXNfcnVubmluZygpKSB7Ci0gICAgICAgICAgICBpZiAocWVtdV9zaHV0ZG93bl9yZXF1 ZXN0ZWRfZ2V0KCkpIHsKLSAgICAgICAgICAgICAgICBkZXN0cm95X2h2bV9kb21haW4oZmFsc2Up OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHFlbXVfcmVzZXRfcmVxdWVzdGVkX2dl dCgpKSB7Ci0gICAgICAgICAgICAgICAgcWVtdV9zeXN0ZW1fcmVzZXQoVk1SRVNFVF9SRVBPUlQp OwotICAgICAgICAgICAgICAgIGRlc3Ryb3lfaHZtX2RvbWFpbih0cnVlKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotCi0gICAgICAgIHJlcS0+c3RhdGUgPSBTVEFURV9JT1JFU1BfUkVBRFk7 Ci0gICAgICAgIHhlbmV2dGNobl9ub3RpZnkoc3RhdGUtPnhjZV9oYW5kbGUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdGUtPmlvcmVxX2xvY2FsX3BvcnRbc3RhdGUtPnNlbmRfdmNwdV0p OwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgeGVuX21haW5fbG9vcF9wcmVwYXJlKFhlbklPU3Rh dGUgKnN0YXRlKQotewotICAgIGludCBldnRjaG5fZmQgPSAtMTsKLQotICAgIGlmIChzdGF0ZS0+ eGNlX2hhbmRsZSAhPSBOVUxMKSB7Ci0gICAgICAgIGV2dGNobl9mZCA9IHhlbmV2dGNobl9mZChz dGF0ZS0+eGNlX2hhbmRsZSk7Ci0gICAgfQotCi0gICAgc3RhdGUtPmJ1ZmZlcmVkX2lvX3RpbWVy ID0gdGltZXJfbmV3X21zKFFFTVVfQ0xPQ0tfUkVBTFRJTUUsIGhhbmRsZV9idWZmZXJlZF9pbywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSk7 Ci0KLSAgICBpZiAoZXZ0Y2huX2ZkICE9IC0xKSB7Ci0gICAgICAgIENQVVN0YXRlICpjcHVfc3Rh dGU7Ci0KLSAgICAgICAgRFBSSU5URigiJXM6IEluaXQgY3B1X2J5X3ZjcHVfaWRcbiIsIF9fZnVu Y19fKTsKLSAgICAgICAgQ1BVX0ZPUkVBQ0goY3B1X3N0YXRlKSB7Ci0gICAgICAgICAgICBEUFJJ TlRGKCIlczogY3B1X2J5X3ZjcHVfaWRbJWRdPSVwXG4iLAotICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXywgY3B1X3N0YXRlLT5jcHVfaW5kZXgsIGNwdV9zdGF0ZSk7Ci0gICAgICAgICAgICBz dGF0ZS0+Y3B1X2J5X3ZjcHVfaWRbY3B1X3N0YXRlLT5jcHVfaW5kZXhdID0gY3B1X3N0YXRlOwot ICAgICAgICB9Ci0gICAgICAgIHFlbXVfc2V0X2ZkX2hhbmRsZXIoZXZ0Y2huX2ZkLCBjcHVfaGFu ZGxlX2lvcmVxLCBOVUxMLCBzdGF0ZSk7Ci0gICAgfQotfQotCi0KLXN0YXRpYyB2b2lkIHhlbl9o dm1fY2hhbmdlX3N0YXRlX2hhbmRsZXIodm9pZCAqb3BhcXVlLCBpbnQgcnVubmluZywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVuU3RhdGUgcnN0YXRlKQotewot ICAgIFhlbklPU3RhdGUgKnN0YXRlID0gb3BhcXVlOwotCi0gICAgaWYgKHJ1bm5pbmcpIHsKLSAg ICAgICAgeGVuX21haW5fbG9vcF9wcmVwYXJlKHN0YXRlKTsKLSAgICB9Ci0KLSAgICB4ZW5fc2V0 X2lvcmVxX3NlcnZlcl9zdGF0ZSh4ZW5fZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RhdGUtPmlvc2VydmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChy c3RhdGUgPT0gUlVOX1NUQVRFX1JVTk5JTkcpKTsKLX0KLQotc3RhdGljIHZvaWQgeGVuX2V4aXRf bm90aWZpZXIoTm90aWZpZXIgKm4sIHZvaWQgKmRhdGEpCi17Ci0gICAgWGVuSU9TdGF0ZSAqc3Rh dGUgPSBjb250YWluZXJfb2YobiwgWGVuSU9TdGF0ZSwgZXhpdCk7Ci0KLSAgICB4ZW5ldnRjaG5f Y2xvc2Uoc3RhdGUtPnhjZV9oYW5kbGUpOwotICAgIHhzX2RhZW1vbl9jbG9zZShzdGF0ZS0+eGVu c3RvcmUpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fcmVhZF9waHlzbWFwKFhlbklPU3RhdGUgKnN0 YXRlKQotewotICAgIFhlblBoeXNtYXAgKnBoeXNtYXAgPSBOVUxMOwotICAgIHVuc2lnbmVkIGlu dCBsZW4sIG51bSwgaTsKLSAgICBjaGFyIHBhdGhbODBdLCAqdmFsdWUgPSBOVUxMOwotICAgIGNo YXIgKiplbnRyaWVzID0gTlVMTDsKLQotICAgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwK LSAgICAgICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3BoeXNtYXAiLCB4 ZW5fZG9taWQpOwotICAgIGVudHJpZXMgPSB4c19kaXJlY3Rvcnkoc3RhdGUtPnhlbnN0b3JlLCAw LCBwYXRoLCAmbnVtKTsKLSAgICBpZiAoZW50cmllcyA9PSBOVUxMKQotICAgICAgICByZXR1cm47 Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgcGh5c21hcCA9IGdf bWFsbG9jKHNpemVvZiAoWGVuUGh5c21hcCkpOwotICAgICAgICBwaHlzbWFwLT5waHlzX29mZnNl dCA9IHN0cnRvdWxsKGVudHJpZXNbaV0sIE5VTEwsIDE2KTsKLSAgICAgICAgc25wcmludGYocGF0 aCwgc2l6ZW9mKHBhdGgpLAotICAgICAgICAgICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNl LW1vZGVsLyVkL3BoeXNtYXAvJXMvc3RhcnRfYWRkciIsCi0gICAgICAgICAgICAgICAgeGVuX2Rv bWlkLCBlbnRyaWVzW2ldKTsKLSAgICAgICAgdmFsdWUgPSB4c19yZWFkKHN0YXRlLT54ZW5zdG9y ZSwgMCwgcGF0aCwgJmxlbik7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAg ICAgICBnX2ZyZWUocGh5c21hcCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot ICAgICAgICBwaHlzbWFwLT5zdGFydF9hZGRyID0gc3RydG91bGwodmFsdWUsIE5VTEwsIDE2KTsK LSAgICAgICAgZnJlZSh2YWx1ZSk7Ci0KLSAgICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBh dGgpLAotICAgICAgICAgICAgICAgICIvbG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3Bo eXNtYXAvJXMvc2l6ZSIsCi0gICAgICAgICAgICAgICAgeGVuX2RvbWlkLCBlbnRyaWVzW2ldKTsK LSAgICAgICAgdmFsdWUgPSB4c19yZWFkKHN0YXRlLT54ZW5zdG9yZSwgMCwgcGF0aCwgJmxlbik7 Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBnX2ZyZWUocGh5c21h cCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBwaHlzbWFwLT5z aXplID0gc3RydG91bGwodmFsdWUsIE5VTEwsIDE2KTsKLSAgICAgICAgZnJlZSh2YWx1ZSk7Ci0K LSAgICAgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAotICAgICAgICAgICAgICAgICIv bG9jYWwvZG9tYWluLzAvZGV2aWNlLW1vZGVsLyVkL3BoeXNtYXAvJXMvbmFtZSIsCi0gICAgICAg ICAgICAgICAgeGVuX2RvbWlkLCBlbnRyaWVzW2ldKTsKLSAgICAgICAgcGh5c21hcC0+bmFtZSA9 IHhzX3JlYWQoc3RhdGUtPnhlbnN0b3JlLCAwLCBwYXRoLCAmbGVuKTsKLQotICAgICAgICBRTElT VF9JTlNFUlRfSEVBRCgmc3RhdGUtPnBoeXNtYXAsIHBoeXNtYXAsIGxpc3QpOwotICAgIH0KLSAg ICBmcmVlKGVudHJpZXMpOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5fd2FrZXVwX25vdGlmaWVyKE5v dGlmaWVyICpub3RpZmllciwgdm9pZCAqZGF0YSkKLXsKLSAgICB4Y19zZXRfaHZtX3BhcmFtKHhl bl94YywgeGVuX2RvbWlkLCBIVk1fUEFSQU1fQUNQSV9TX1NUQVRFLCAwKTsKLX0KLQotdm9pZCB4 ZW5faHZtX2luaXQoUENNYWNoaW5lU3RhdGUgKnBjbXMsIE1lbW9yeVJlZ2lvbiAqKnJhbV9tZW1v cnkpCi17Ci0gICAgaW50IGksIHJjOwotICAgIHhlbl9wZm5fdCBpb3JlcV9wZm47Ci0gICAgeGVu X3Bmbl90IGJ1ZmlvcmVxX3BmbjsKLSAgICBldnRjaG5fcG9ydF90IGJ1ZmlvcmVxX2V2dGNobjsK LSAgICBYZW5JT1N0YXRlICpzdGF0ZTsKLQotICAgIHN0YXRlID0gZ19tYWxsb2MwKHNpemVvZiAo WGVuSU9TdGF0ZSkpOwotCi0gICAgc3RhdGUtPnhjZV9oYW5kbGUgPSB4ZW5ldnRjaG5fb3BlbihO VUxMLCAwKTsKLSAgICBpZiAoc3RhdGUtPnhjZV9oYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBw ZXJyb3IoInhlbjogZXZlbnQgY2hhbm5lbCBvcGVuIik7Ci0gICAgICAgIGdvdG8gZXJyOwotICAg IH0KLQotICAgIHN0YXRlLT54ZW5zdG9yZSA9IHhzX2RhZW1vbl9vcGVuKCk7Ci0gICAgaWYgKHN0 YXRlLT54ZW5zdG9yZSA9PSBOVUxMKSB7Ci0gICAgICAgIHBlcnJvcigieGVuOiB4ZW5zdG9yZSBv cGVuIik7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLQotICAgIGlmICh4ZW5fZG9taWRfcmVz dHJpY3QpIHsKLSAgICAgICAgcmMgPSB4ZW5fcmVzdHJpY3QoeGVuX2RvbWlkKTsKLSAgICAgICAg aWYgKHJjIDwgMCkgewotICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJmYWlsZWQgdG8gcmVzdHJp Y3Q6IGVycm9yICVkIiwgZXJybm8pOwotICAgICAgICAgICAgZ290byBlcnI7Ci0gICAgICAgIH0K LSAgICB9Ci0KLSAgICB4ZW5fY3JlYXRlX2lvcmVxX3NlcnZlcih4ZW5fZG9taWQsICZzdGF0ZS0+ aW9zZXJ2aWQpOwotCi0gICAgc3RhdGUtPmV4aXQubm90aWZ5ID0geGVuX2V4aXRfbm90aWZpZXI7 Ci0gICAgcWVtdV9hZGRfZXhpdF9ub3RpZmllcigmc3RhdGUtPmV4aXQpOwotCi0gICAgc3RhdGUt PnN1c3BlbmQubm90aWZ5ID0geGVuX3N1c3BlbmRfbm90aWZpZXI7Ci0gICAgcWVtdV9yZWdpc3Rl cl9zdXNwZW5kX25vdGlmaWVyKCZzdGF0ZS0+c3VzcGVuZCk7Ci0KLSAgICBzdGF0ZS0+d2FrZXVw Lm5vdGlmeSA9IHhlbl93YWtldXBfbm90aWZpZXI7Ci0gICAgcWVtdV9yZWdpc3Rlcl93YWtldXBf bm90aWZpZXIoJnN0YXRlLT53YWtldXApOwotCi0gICAgcmMgPSB4ZW5fZ2V0X2lvcmVxX3NlcnZl cl9pbmZvKHhlbl9kb21pZCwgc3RhdGUtPmlvc2VydmlkLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmaW9yZXFfcGZuLCAmYnVmaW9yZXFfcGZuLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmYnVmaW9yZXFfZXZ0Y2huKTsKLSAgICBpZiAocmMgPCAwKSB7 Ci0gICAgICAgIGVycm9yX3JlcG9ydCgiZmFpbGVkIHRvIGdldCBpb3JlcSBzZXJ2ZXIgaW5mbzog ZXJyb3IgJWQgaGFuZGxlPSVwIiwKLSAgICAgICAgICAgICAgICAgICAgIGVycm5vLCB4ZW5feGMp OwotICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0KLSAgICBEUFJJTlRGKCJzaGFyZWQgcGFnZSBh dCBwZm4gJWx4XG4iLCBpb3JlcV9wZm4pOwotICAgIERQUklOVEYoImJ1ZmZlcmVkIGlvIHBhZ2Ug YXQgcGZuICVseFxuIiwgYnVmaW9yZXFfcGZuKTsKLSAgICBEUFJJTlRGKCJidWZmZXJlZCBpbyBl dnRjaG4gaXMgJXhcbiIsIGJ1ZmlvcmVxX2V2dGNobik7Ci0KLSAgICBzdGF0ZS0+c2hhcmVkX3Bh Z2UgPSB4ZW5mb3JlaWdubWVtb3J5X21hcCh4ZW5fZm1lbSwgeGVuX2RvbWlkLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRF LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZpb3Jl cV9wZm4sIE5VTEwpOwotICAgIGlmIChzdGF0ZS0+c2hhcmVkX3BhZ2UgPT0gTlVMTCkgewotICAg ICAgICBlcnJvcl9yZXBvcnQoIm1hcCBzaGFyZWQgSU8gcGFnZSByZXR1cm5lZCBlcnJvciAlZCBo YW5kbGU9JXAiLAotICAgICAgICAgICAgICAgICAgICAgZXJybm8sIHhlbl94Yyk7Ci0gICAgICAg IGdvdG8gZXJyOwotICAgIH0KLQotICAgIHJjID0geGVuX2dldF92bXBvcnRfcmVnc19wZm4oeGVu X3hjLCB4ZW5fZG9taWQsICZpb3JlcV9wZm4pOwotICAgIGlmICghcmMpIHsKLSAgICAgICAgRFBS SU5URigic2hhcmVkIHZtcG9ydCBwYWdlIGF0IHBmbiAlbHhcbiIsIGlvcmVxX3Bmbik7Ci0gICAg ICAgIHN0YXRlLT5zaGFyZWRfdm1wb3J0X3BhZ2UgPQotICAgICAgICAgICAgeGVuZm9yZWlnbm1l bW9yeV9tYXAoeGVuX2ZtZW0sIHhlbl9kb21pZCwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmaW9yZXFfcGZuLCBOVUxMKTsKLSAgICAg ICAgaWYgKHN0YXRlLT5zaGFyZWRfdm1wb3J0X3BhZ2UgPT0gTlVMTCkgewotICAgICAgICAgICAg ZXJyb3JfcmVwb3J0KCJtYXAgc2hhcmVkIHZtcG9ydCBJTyBwYWdlIHJldHVybmVkIGVycm9yICVk IGhhbmRsZT0lcCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIHhlbl94Yyk7Ci0g ICAgICAgICAgICBnb3RvIGVycjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAocmMgIT0gLUVO T1NZUykgewotICAgICAgICBlcnJvcl9yZXBvcnQoImdldCB2bXBvcnQgcmVncyBwZm4gcmV0dXJu ZWQgZXJyb3IgJWQsIHJjPSVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGVycm5vLCByYyk7Ci0g ICAgICAgIGdvdG8gZXJyOwotICAgIH0KLQotICAgIHN0YXRlLT5idWZmZXJlZF9pb19wYWdlID0g eGVuZm9yZWlnbm1lbW9yeV9tYXAoeGVuX2ZtZW0sIHhlbl9kb21pZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRF LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg JmJ1ZmlvcmVxX3BmbiwgTlVMTCk7Ci0gICAgaWYgKHN0YXRlLT5idWZmZXJlZF9pb19wYWdlID09 IE5VTEwpIHsKLSAgICAgICAgZXJyb3JfcmVwb3J0KCJtYXAgYnVmZmVyZWQgSU8gcGFnZSByZXR1 cm5lZCBlcnJvciAlZCIsIGVycm5vKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgfQotCi0gICAg LyogTm90ZTogY3B1cyBpcyBlbXB0eSBhdCB0aGlzIHBvaW50IGluIGluaXQgKi8KLSAgICBzdGF0 ZS0+Y3B1X2J5X3ZjcHVfaWQgPSBnX21hbGxvYzAobWF4X2NwdXMgKiBzaXplb2YoQ1BVU3RhdGUg KikpOwotCi0gICAgcmMgPSB4ZW5fc2V0X2lvcmVxX3NlcnZlcl9zdGF0ZSh4ZW5fZG9taWQsIHN0 YXRlLT5pb3NlcnZpZCwgdHJ1ZSk7Ci0gICAgaWYgKHJjIDwgMCkgewotICAgICAgICBlcnJvcl9y ZXBvcnQoImZhaWxlZCB0byBlbmFibGUgaW9yZXEgc2VydmVyIGluZm86IGVycm9yICVkIGhhbmRs ZT0lcCIsCi0gICAgICAgICAgICAgICAgICAgICBlcnJubywgeGVuX3hjKTsKLSAgICAgICAgZ290 byBlcnI7Ci0gICAgfQotCi0gICAgc3RhdGUtPmlvcmVxX2xvY2FsX3BvcnQgPSBnX21hbGxvYzAo bWF4X2NwdXMgKiBzaXplb2YgKGV2dGNobl9wb3J0X3QpKTsKLQotICAgIC8qIEZJWE1FOiBob3cg YWJvdXQgaWYgd2Ugb3ZlcmZsb3cgdGhlIHBhZ2UgaGVyZT8gKi8KLSAgICBmb3IgKGkgPSAwOyBp IDwgbWF4X2NwdXM7IGkrKykgewotICAgICAgICByYyA9IHhlbmV2dGNobl9iaW5kX2ludGVyZG9t YWluKHN0YXRlLT54Y2VfaGFuZGxlLCB4ZW5fZG9taWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgeGVuX3ZjcHVfZXBvcnQoc3RhdGUtPnNoYXJlZF9wYWdlLCBpKSk7 Ci0gICAgICAgIGlmIChyYyA9PSAtMSkgewotICAgICAgICAgICAgZXJyb3JfcmVwb3J0KCJzaGFy ZWQgZXZ0Y2huICVkIGJpbmQgZXJyb3IgJWQiLCBpLCBlcnJubyk7Ci0gICAgICAgICAgICBnb3Rv IGVycjsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS0+aW9yZXFfbG9jYWxfcG9ydFtpXSA9IHJj OwotICAgIH0KLQotICAgIHJjID0geGVuZXZ0Y2huX2JpbmRfaW50ZXJkb21haW4oc3RhdGUtPnhj ZV9oYW5kbGUsIHhlbl9kb21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJ1ZmlvcmVxX2V2dGNobik7Ci0gICAgaWYgKHJjID09IC0xKSB7Ci0gICAgICAgIGVycm9yX3Jl cG9ydCgiYnVmZmVyZWQgZXZ0Y2huIGJpbmQgZXJyb3IgJWQiLCBlcnJubyk7Ci0gICAgICAgIGdv dG8gZXJyOwotICAgIH0KLSAgICBzdGF0ZS0+YnVmaW9yZXFfbG9jYWxfcG9ydCA9IHJjOwotCi0g ICAgLyogSW5pdCBSQU0gbWFuYWdlbWVudCAqLwotICAgIHhlbl9tYXBfY2FjaGVfaW5pdCh4ZW5f cGh5c19vZmZzZXRfdG9fZ2FkZHIsIHN0YXRlKTsKLSAgICB4ZW5fcmFtX2luaXQocGNtcywgcmFt X3NpemUsIHJhbV9tZW1vcnkpOwotCi0gICAgcWVtdV9hZGRfdm1fY2hhbmdlX3N0YXRlX2hhbmRs ZXIoeGVuX2h2bV9jaGFuZ2Vfc3RhdGVfaGFuZGxlciwgc3RhdGUpOwotCi0gICAgc3RhdGUtPm1l bW9yeV9saXN0ZW5lciA9IHhlbl9tZW1vcnlfbGlzdGVuZXI7Ci0gICAgUUxJU1RfSU5JVCgmc3Rh dGUtPnBoeXNtYXApOwotICAgIG1lbW9yeV9saXN0ZW5lcl9yZWdpc3Rlcigmc3RhdGUtPm1lbW9y eV9saXN0ZW5lciwgJmFkZHJlc3Nfc3BhY2VfbWVtb3J5KTsKLSAgICBzdGF0ZS0+bG9nX2Zvcl9k aXJ0eWJpdCA9IE5VTEw7Ci0KLSAgICBzdGF0ZS0+aW9fbGlzdGVuZXIgPSB4ZW5faW9fbGlzdGVu ZXI7Ci0gICAgbWVtb3J5X2xpc3RlbmVyX3JlZ2lzdGVyKCZzdGF0ZS0+aW9fbGlzdGVuZXIsICZh ZGRyZXNzX3NwYWNlX2lvKTsKLQotICAgIHN0YXRlLT5kZXZpY2VfbGlzdGVuZXIgPSB4ZW5fZGV2 aWNlX2xpc3RlbmVyOwotICAgIGRldmljZV9saXN0ZW5lcl9yZWdpc3Rlcigmc3RhdGUtPmRldmlj ZV9saXN0ZW5lcik7Ci0KLSAgICAvKiBJbml0aWFsaXplIGJhY2tlbmQgY29yZSAmIGRyaXZlcnMg Ki8KLSAgICBpZiAoeGVuX2JlX2luaXQoKSAhPSAwKSB7Ci0gICAgICAgIGVycm9yX3JlcG9ydCgi eGVuIGJhY2tlbmQgY29yZSBzZXR1cCBmYWlsZWQiKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAg fQotICAgIHhlbl9iZV9yZWdpc3Rlcl9jb21tb24oKTsKLSAgICB4ZW5fcmVhZF9waHlzbWFwKHN0 YXRlKTsKLQotICAgIC8qIERpc2FibGUgQUNQSSBidWlsZCBiZWNhdXNlIFhlbiBoYW5kbGVzIGl0 ICovCi0gICAgcGNtcy0+YWNwaV9idWlsZF9lbmFibGVkID0gZmFsc2U7Ci0KLSAgICByZXR1cm47 Ci0KLWVycjoKLSAgICBlcnJvcl9yZXBvcnQoInhlbiBoYXJkd2FyZSB2aXJ0dWFsIG1hY2hpbmUg aW5pdGlhbGlzYXRpb24gZmFpbGVkIik7Ci0gICAgZXhpdCgxKTsKLX0KLQotdm9pZCBkZXN0cm95 X2h2bV9kb21haW4oYm9vbCByZWJvb3QpCi17Ci0gICAgeGNfaW50ZXJmYWNlICp4Y19oYW5kbGU7 Ci0gICAgaW50IHN0czsKLQotICAgIHhjX2hhbmRsZSA9IHhjX2ludGVyZmFjZV9vcGVuKDAsIDAs IDApOwotICAgIGlmICh4Y19oYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIkNhbm5vdCBhY3F1aXJlIHhlbmN0cmwgaGFuZGxlXG4iKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBzdHMgPSB4Y19kb21haW5fc2h1dGRvd24oeGNfaGFuZGxlLCB4ZW5fZG9taWQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QgPyBTSFVURE9XTl9yZWJvb3QgOiBT SFVURE9XTl9wb3dlcm9mZik7Ci0gICAgICAgIGlmIChzdHMgIT0gMCkgewotICAgICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJ4Y19kb21haW5fc2h1dGRvd24gZmFpbGVkIHRvIGlzc3VlICVzLCAi Ci0gICAgICAgICAgICAgICAgICAgICJzdHMgJWQsICVzXG4iLCByZWJvb3QgPyAicmVib290IiA6 ICJwb3dlcm9mZiIsCi0gICAgICAgICAgICAgICAgICAgIHN0cywgc3RyZXJyb3IoZXJybm8pKTsK LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSXNzdWVkIGRv bWFpbiAlZCAlc1xuIiwgeGVuX2RvbWlkLAotICAgICAgICAgICAgICAgICAgICByZWJvb3QgPyAi cmVib290IiA6ICJwb3dlcm9mZiIpOwotICAgICAgICB9Ci0gICAgICAgIHhjX2ludGVyZmFjZV9j bG9zZSh4Y19oYW5kbGUpOwotICAgIH0KLX0KLQotdm9pZCB4ZW5fcmVnaXN0ZXJfZnJhbWVidWZm ZXIoTWVtb3J5UmVnaW9uICptcikKLXsKLSAgICBmcmFtZWJ1ZmZlciA9IG1yOwotfQotCi12b2lk IHhlbl9zaHV0ZG93bl9mYXRhbF9lcnJvcihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgICB2 YV9saXN0IGFwOwotCi0gICAgdmFfc3RhcnQoYXAsIGZtdCk7Ci0gICAgdmZwcmludGYoc3RkZXJy LCBmbXQsIGFwKTsKLSAgICB2YV9lbmQoYXApOwotICAgIGZwcmludGYoc3RkZXJyLCAiV2lsbCBk ZXN0cm95IHRoZSBkb21haW4uXG4iKTsKLSAgICAvKiBkZXN0cm95IHRoZSBkb21haW4gKi8KLSAg ICBxZW11X3N5c3RlbV9zaHV0ZG93bl9yZXF1ZXN0KCk7Ci19Ci0KLXZvaWQgeGVuX2h2bV9tb2Rp ZmllZF9tZW1vcnkocmFtX2FkZHJfdCBzdGFydCwgcmFtX2FkZHJfdCBsZW5ndGgpCi17Ci0gICAg aWYgKHVubGlrZWx5KHhlbl9pbl9taWdyYXRpb24pKSB7Ci0gICAgICAgIGludCByYzsKLSAgICAg ICAgcmFtX2FkZHJfdCBzdGFydF9wZm4sIG5iX3BhZ2VzOwotCi0gICAgICAgIGlmIChsZW5ndGgg PT0gMCkgewotICAgICAgICAgICAgbGVuZ3RoID0gVEFSR0VUX1BBR0VfU0laRTsKLSAgICAgICAg fQotICAgICAgICBzdGFydF9wZm4gPSBzdGFydCA+PiBUQVJHRVRfUEFHRV9CSVRTOwotICAgICAg ICBuYl9wYWdlcyA9ICgoc3RhcnQgKyBsZW5ndGggKyBUQVJHRVRfUEFHRV9TSVpFIC0gMSkgPj4g VEFSR0VUX1BBR0VfQklUUykKLSAgICAgICAgICAgIC0gc3RhcnRfcGZuOwotICAgICAgICByYyA9 IHhlbl9tb2RpZmllZF9tZW1vcnkoeGVuX2RvbWlkLCBzdGFydF9wZm4sIG5iX3BhZ2VzKTsKLSAg ICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAg ICAgICAgICAgIiVzIGZhaWxlZCBmb3IgIlJBTV9BRERSX0ZNVCIgKCJSQU1fQUREUl9GTVQiKTog JWksICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXywgc3RhcnQsIG5iX3BhZ2Vz LCByYywgc3RyZXJyb3IoLXJjKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgcW1wX3hl bl9zZXRfZ2xvYmFsX2RpcnR5X2xvZyhib29sIGVuYWJsZSwgRXJyb3IgKiplcnJwKQotewotICAg IGlmIChlbmFibGUpIHsKLSAgICAgICAgbWVtb3J5X2dsb2JhbF9kaXJ0eV9sb2dfc3RhcnQoKTsK LSAgICB9IGVsc2UgewotICAgICAgICBtZW1vcnlfZ2xvYmFsX2RpcnR5X2xvZ19zdG9wKCk7Ci0g ICAgfQotfQotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK