From mboxrd@z Thu Jan 1 00:00:00 1970 From: Dongwon Kim Subject: [RFC PATCH 16/60] hyper_dmabuf: define hypervisor specific backend API Date: Tue, 19 Dec 2017 11:29:32 -0800 Message-ID: <1513711816-2618-16-git-send-email-dongwon.kim@intel.com> References: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1513711816-2618-1-git-send-email-dongwon.kim@intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: linux-kernel@vger.kernel.org Cc: xen-devel@lists.xenproject.org, mateuszx.potrola@intel.com, dri-devel@lists.freedesktop.org, dongwon.kim@intel.com List-Id: dri-devel@lists.freedesktop.org Rm9yIGFkb3B0aW9uIG9mIGh5cGVyX2RtYWJ1ZiBkcml2ZXIgdG8gdmFyaW91cyBoeXBlcnZpc29y cwpvdGhlciB0aGFuIFhlbiwgYSAiYmFja2VuZCIgbGF5ZXIgaXMgZGVmaW5lZCBhbmQgc2VwYXJh dGVkIG91dApmcm9tIGV4aXN0aW5nIG9uZS1ib2R5IHN0cnVjdHVyZS4KCiJCYWNrZW5kIiBpcyBi YXNpY2FsbHkgYSBsaXN0IG9mIGVudHJ5IHBvaW50cyBvZiBmdW5jdGlvbiBjYWxscwp0aGF0IHBy b3ZpZGVzIG1ldGhvZCB0byBkbyBLZXJuZWwncyBwYWdlLWxldmVsIHNoYXJpbmcgYW5kIGludGVy ClZNcyBjb21tdW5pY2F0aW9uIHVzaW5nIGh5cGVydmlzb3IncyBuYXRpdmUgbWVjaGFuaXNtICho eXBlcmNhbGwpLgoKQWxsIGJhY2tlbmQgQVBJcyBhcmUgbGlzdGVkIHVwIGluICJzdHJ1Y3QgaHlw ZXJfZG1hYnVmX2JhY2tlbmRfb3BzIgphcyBzaG93biBiZWxvdy4KCnN0cnVjdCBoeXBlcl9kbWFi dWZfYmFja2VuZF9vcHMgewogICAgICAgIC8qIHJldHJlaXZpbmcgaWQgb2YgY3VycmVudCB2aXJ0 dWFsIG1hY2hpbmUgKi8KICAgICAgICBpbnQgKCpnZXRfdm1faWQpKHZvaWQpOwoKICAgICAgICAv KiBnZXQgcGFnZXMgc2hhcmVkIHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZCAqLwogICAg ICAgIGludCAoKnNoYXJlX3BhZ2VzKShzdHJ1Y3QgcGFnZSAqKiwgaW50LCBpbnQsIHZvaWQgKiop OwoKICAgICAgICAvKiBtYWtlIHNoYXJlZCBwYWdlcyB1bnNoYXJlZCB2aWEgaHlwZXJ2aXNvciBz cGVjaWZpYyBtZXRob2QgKi8KICAgICAgICBpbnQgKCp1bnNoYXJlX3BhZ2VzKSh2b2lkICoqLCBp bnQpOwoKICAgICAgICAvKiBtYXAgcmVtb3RlbHkgc2hhcmVkIHBhZ2VzIG9uIGltcG9ydGVyJ3Mg c2lkZSB2aWEKICAgICAgICAgKiBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZAogICAgICAgICAq LwogICAgICAgIHN0cnVjdCBwYWdlICoqICgqbWFwX3NoYXJlZF9wYWdlcykoaW50LCBpbnQsIGlu dCwgdm9pZCAqKik7CgogICAgICAgIC8qIHVubWFwIGFuZCBmcmVlIHNoYXJlZCBwYWdlcyBvbiBp bXBvcnRlcidzIHNpZGUgdmlhCiAgICAgICAgICogaHlwZXJ2aXNvci1zcGVjaWZpYyBtZXRob2QK ICAgICAgICAgKi8KICAgICAgICBpbnQgKCp1bm1hcF9zaGFyZWRfcGFnZXMpKHZvaWQgKiosIGlu dCk7CgogICAgICAgIC8qIGluaXRpYWxpemUgY29tbXVuaWNhdGlvbiBlbnZpcm9ubWVudCAqLwog ICAgICAgIGludCAoKmluaXRfY29tbV9lbnYpKHZvaWQpOwoKICAgICAgICB2b2lkICgqZGVzdHJv eV9jb21tKSh2b2lkKTsKCiAgICAgICAgLyogdXBzdHJlYW0gY2ggc2V0dXAgKHJlY2VpdmluZyBh bmQgcmVzcG9uZGluZykgKi8KICAgICAgICBpbnQgKCppbml0X3J4X2NoKShpbnQpOwoKICAgICAg ICAvKiBkb3duc3RyZWFtIGNoIHNldHVwICh0cmFuc21pdHRpbmcgYW5kIHBhcnNpbmcgcmVzcG9u c2VzKSAqLwogICAgICAgIGludCAoKmluaXRfdHhfY2gpKGludCk7CgogICAgICAgIGludCAoKnNl bmRfcmVxKShpbnQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICosIGludCk7Cn07CgpXaXRoaW4g dGhpcyBuZXcgc3RydWN0dXJlLCBvbmx5IGJhY2tlbmQgQVBJcyBuZWVkIHRvIGJlIHJlLWRlc2ln bmVkIG9yCnJlcGxhY2VkIHdpdGggbmV3IG9uZXMgd2hlbiBwb3J0aW5nIHRoaXMgc2hhcmluZyBt b2RlbCB0byBhIGRpZmZlcmVudApoeXBlcnZpc29yIGVudmlyb25tZW50LCB3aGljaCBpcyBhIGxv dCBzaW1wbGVyIHRoYW4gY29tcGxldGVseSByZWRlc2lnaW5nCndob2xlIGRyaXZlciBmb3IgYSBu ZXcgaHlwZXJ2aXNvci4KClNpZ25lZC1vZmYtYnk6IERvbmd3b24gS2ltIDxkb25nd29uLmtpbUBp bnRlbC5jb20+Ci0tLQogZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgfCAgMTEgKy0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf Y29uZi5oICAgICAgIHwgICAxIC0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfZHJ2LmMgICAgICAgIHwgIDMzICstCiBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJf ZG1hYnVmX2Rydi5oICAgICAgICB8IDExMiArKy0tLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi9oeXBlcl9kbWFidWZfaWQuYyAgICAgICAgIHwgICA2ICstCiBkcml2ZXJzL3hlbi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX2ltcC5jICAgICAgICB8IDQyNiArKy0tLS0tLS0tLS0tLS0tLS0t LS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW1wLmggICAgICAgIHwg IDE0IC0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuYyAgICAg IHwgMTM0ICsrKy0tLS0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9j dGwuaCAgICAgIHwgIDg3ICsrKysrCiBkcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1h YnVmX21zZy5jICAgICAgICB8ICA1MiArKy0KIGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfbXNnLmggICAgICAgIHwgIDIzICstCiAuLi4veGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfcmVtb3RlX3N5bmMuYyAgICB8ICAgNCArLQogZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaCAgICAgfCAgMjYgKy0KIC4uLi94ZW4vaHlwZXJfZG1h YnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYyAgIHwgMzAzICsrKysrKysrKy0tLS0tLQog Li4uL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oICAgfCAgNTEg Ky0tCiAuLi4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5jICB8 ICA2NyArKy0tCiAuLi4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlz dC5oICB8ICAzMiArLQogLi4uL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5f ZHJ2LmMgICAgfCAgMjIgKysKIC4uLi94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZf eGVuX2Rydi5oICAgIHwgIDIwICsKIC4uLi94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFi dWZfeGVuX3NobS5jICAgIHwgMzU2ICsrKysrKysrKysrKysrKysrCiAuLi4veGVuL2h5cGVyX2Rt YWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaCAgICB8ICAxOSArCiAyMSBmaWxlcyBjaGFu Z2VkLCA5NDkgaW5zZXJ0aW9ucygrKSwgODUwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW9jdGwuaAogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hl bl9kcnYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4v aHlwZXJfZG1hYnVmX3hlbl9kcnYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMveGVuL2h5 cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaAoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZSBiL2RyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9NYWtlZmlsZQppbmRleCBjOWI4YjdmLi5kOTBjZmMzIDEwMDY0NAotLS0g YS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL01ha2VmaWxlCkBAIC0xLDUgKzEsNyBAQAogVEFSR0VUX01PRFVMRTo9aHlwZXJf ZG1hYnVmCiAKK1BMQVRGT1JNOj1YRU4KKwogIyBJZiB3ZSBydW5uaW5nIGJ5IGtlcm5lbCBidWls ZGluZyBzeXN0ZW0KIGlmbmVxICgkKEtFUk5FTFJFTEVBU0UpLCkKIAkkKFRBUkdFVF9NT0RVTEUp LW9ianMgOj0gaHlwZXJfZG1hYnVmX2Rydi5vIFwKQEAgLTksOCArMTEsMTMgQEAgaWZuZXEgKCQo S0VSTkVMUkVMRUFTRSksKQogCQkJCSBoeXBlcl9kbWFidWZfbXNnLm8gXAogCQkJCSBoeXBlcl9k bWFidWZfaWQubyBcCiAJCQkJIGh5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5vIFwKLQkJCQkgeGVu L2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5vIFwKLQkJCQkgeGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29t bV9saXN0Lm8KKworaWZlcSAoJChDT05GSUdfWEVOKSwgeSkKKwkkKFRBUkdFVF9NT0RVTEUpLW9i anMgKz0geGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5vIFwKKwkJCQkgeGVuL2h5cGVyX2RtYWJ1 Zl94ZW5fY29tbV9saXN0Lm8gXAorCQkJCSB4ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0ubyBcCisJ CQkJIHhlbi9oeXBlcl9kbWFidWZfeGVuX2Rydi5vCitlbmRpZgogCiBvYmotJChDT05GSUdfSFlQ RVJfRE1BQlVGKSA6PSAkKFRBUkdFVF9NT0RVTEUpLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94 ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9jb25mLmggYi9kcml2ZXJzL3hlbi9oeXBlcl9k bWFidWYvaHlwZXJfZG1hYnVmX2NvbmYuaAppbmRleCAzZDliMmQ2Li5kMDEyYjA1IDEwMDY0NAot LS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2NvbmYuaAorKysgYi9k cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2NvbmYuaApAQCAtMSwyICsxIEBA CiAjZGVmaW5lIENVUlJFTlRfVEFSR0VUIFhFTgotI2RlZmluZSBJTlRFUl9ET01BSU5fRE1BQlVG X1NZTkNIUk9OSVpBVElPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5 cGVyX2RtYWJ1Zl9kcnYuYyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf ZHJ2LmMKaW5kZXggNjZkNmNiOS4uZGRjYzk1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuYworKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFi dWYvaHlwZXJfZG1hYnVmX2Rydi5jCkBAIC0xLDE1ICsxLDE4IEBACi0jaW5jbHVkZSA8bGludXgv aW5pdC5oPiAgICAgICAvKiBtb2R1bGVfaW5pdCwgbW9kdWxlX2V4aXQgKi8KLSNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4gLyogdmVyc2lvbiBpbmZvLCBNT0RVTEVfTElDRU5TRSwgTU9EVUxFX0FV VEhPUiwgcHJpbnRrKCkgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8eGVu L2dyYW50X3RhYmxlLmg+Ci0jaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgogI2luY2x1ZGUg Imh5cGVyX2RtYWJ1Zl9jb25mLmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX21zZy5oIgorI2lu Y2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKICNpbmNsdWRlICJoeXBlcl9kbWFidWZfbGlzdC5o IgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pZC5oIgotI2luY2x1ZGUgInhlbi9oeXBlcl9kbWFi dWZfeGVuX2NvbW1fbGlzdC5oIgotI2luY2x1ZGUgInhlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0u aCIKIAotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworI2lmZGVmIENPTkZJR19YRU4K KyNpbmNsdWRlICJ4ZW4vaHlwZXJfZG1hYnVmX3hlbl9kcnYuaCIKK2V4dGVybiBzdHJ1Y3QgaHlw ZXJfZG1hYnVmX2JhY2tlbmRfb3BzIHhlbl9iYWNrZW5kX29wczsKKyNlbmRpZgorCitNT0RVTEVf TElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJJT1RHLVBFRCwgSU5URUwiKTsKIAogaW50 IHJlZ2lzdGVyX2RldmljZSh2b2lkKTsKQEAgLTI5LDI0ICszMiwyNCBAQCBzdGF0aWMgaW50IGh5 cGVyX2RtYWJ1Zl9kcnZfaW5pdCh2b2lkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKyNpZmRl ZiBDT05GSUdfWEVOCisJaHlwZXJfZG1hYnVmX3ByaXZhdGUuYmFja2VuZF9vcHMgPSAmeGVuX2Jh Y2tlbmRfb3BzOworI2VuZGlmCisKIAlwcmludGsoIEtFUk5fTk9USUNFICJpbml0aWFsaXppbmcg ZGF0YWJhc2UgZm9yIGltcG9ydGVkL2V4cG9ydGVkIGRtYWJ1ZnNcbiIpOwogCiAJLyogZGV2aWNl IHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiAqLwogCS8qIGN1cnJlbnRseSBvbmx5IGRvZXMgd29y ay1xdWV1ZSBpbml0aWFsaXphdGlvbiAqLwogCWh5cGVyX2RtYWJ1Zl9wcml2YXRlLndvcmtfcXVl dWUgPSBjcmVhdGVfd29ya3F1ZXVlKCJoeXBlcl9kbWFidWZfd3F1ZXVlIik7Ci0JaHlwZXJfZG1h YnVmX3ByaXZhdGUuZG9taWQgPSBoeXBlcl9kbWFidWZfZ2V0X2RvbWlkKCk7CisJaHlwZXJfZG1h YnVmX3ByaXZhdGUuZG9taWQgPSBoeXBlcl9kbWFidWZfcHJpdmF0ZS5iYWNrZW5kX29wcy0+Z2V0 X3ZtX2lkKCk7CiAKIAlyZXQgPSBoeXBlcl9kbWFidWZfdGFibGVfaW5pdCgpOwogCWlmIChyZXQg PCAwKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IGh5cGVyX2RtYWJ1Zl9yaW5n X3RhYmxlX2luaXQoKTsKLQlpZiAocmV0IDwgMCkgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJ cmV0ID0gaHlwZXJfZG1hYnVmX3ByaXZhdGUuYmFja2VuZF9vcHMtPmluaXRfY29tbV9lbnYoKTsK IAotCXJldCA9IGh5cGVyX2RtYWJ1Zl9zZXR1cF9kYXRhX2RpcigpOwogCWlmIChyZXQgPCAwKSB7 CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTYxLDggKzY0LDcgQEAgc3RhdGljIHZvaWQgaHlw ZXJfZG1hYnVmX2Rydl9leGl0KHZvaWQpCiAJLyogaGFzaCB0YWJsZXMgZm9yIGV4cG9ydC9pbXBv cnQgZW50cmllcyBhbmQgcmluZ19pbmZvcyAqLwogCWh5cGVyX2RtYWJ1Zl90YWJsZV9kZXN0cm95 KCk7CiAKLQloeXBlcl9kbWFidWZfY2xlYW51cF9yaW5nYnVmcygpOwotCWh5cGVyX2RtYWJ1Zl9y aW5nX3RhYmxlX2Rlc3Ryb3koKTsKKwloeXBlcl9kbWFidWZfcHJpdmF0ZS5iYWNrZW5kX29wcy0+ ZGVzdHJveV9jb21tKCk7CiAKIAkvKiBkZXN0cm95IHdvcmtxdWV1ZSAqLwogCWlmIChoeXBlcl9k bWFidWZfcHJpdmF0ZS53b3JrX3F1ZXVlKQpAQCAtNzIsNyArNzQsNiBAQCBzdGF0aWMgdm9pZCBo eXBlcl9kbWFidWZfZHJ2X2V4aXQodm9pZCkKIAlpZiAoaHlwZXJfZG1hYnVmX3ByaXZhdGUuaWRf cXVldWUpCiAJCWRlc3Ryb3lfcmV1c2FibGVfbGlzdCgpOwogCi0JaHlwZXJfZG1hYnVmX2Rlc3Ry b3lfZGF0YV9kaXIoKTsKIAlwcmludGsoIEtFUk5fTk9USUNFICJkbWFfYnVmLXNyY19zaW5rIG1v ZGVsOiBFeGl0aW5nIiApOwogCXVucmVnaXN0ZXJfZGV2aWNlKCk7CiB9CmRpZmYgLS1naXQgYS9k cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5oIGIvZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9kcnYuaAppbmRleCAzN2IwY2MxLi4wM2Q3N2Q3IDEw MDY0NAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2Rydi5oCisr KyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfZHJ2LmgKQEAgLTYsOTQg KzYsNDggQEAgc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlz dDsKIH07CiAKLXN0cnVjdCBoeXBlcl9kbWFidWZfcHJpdmF0ZSB7Ci0gICAgICAgIHN0cnVjdCBk ZXZpY2UgKmRldmljZTsKLQlpbnQgZG9taWQ7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndv cmtfcXVldWU7Ci0Jc3RydWN0IGxpc3RfcmV1c2FibGVfaWQgKmlkX3F1ZXVlOwotfTsKK3N0cnVj dCBoeXBlcl9kbWFidWZfYmFja2VuZF9vcHMgeworCS8qIHJldHJlaXZpbmcgaWQgb2YgY3VycmVu dCB2aXJ0dWFsIG1hY2hpbmUgKi8KKwlpbnQgKCpnZXRfdm1faWQpKHZvaWQpOwogCi10eXBlZGVm IGludCAoKmh5cGVyX2RtYWJ1Zl9pb2N0bF90KSh2b2lkICpkYXRhKTsKKwkvKiBnZXQgcGFnZXMg c2hhcmVkIHZpYSBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZCAqLworCWludCAoKnNoYXJlX3Bh Z2VzKShzdHJ1Y3QgcGFnZSAqKiwgaW50LCBpbnQsIHZvaWQgKiopOwogCi1zdHJ1Y3QgaHlwZXJf ZG1hYnVmX2lvY3RsX2Rlc2MgewotCXVuc2lnbmVkIGludCBjbWQ7Ci0JaW50IGZsYWdzOwotCWh5 cGVyX2RtYWJ1Zl9pb2N0bF90IGZ1bmM7Ci0JY29uc3QgY2hhciAqbmFtZTsKLX07CisJLyogbWFr ZSBzaGFyZWQgcGFnZXMgdW5zaGFyZWQgdmlhIGh5cGVydmlzb3Igc3BlY2lmaWMgbWV0aG9kICov CisJaW50ICgqdW5zaGFyZV9wYWdlcykodm9pZCAqKiwgaW50KTsKIAotI2RlZmluZSBIWVBFUl9E TUFCVUZfSU9DVExfREVGKGlvY3RsLCBfZnVuYywgX2ZsYWdzKSAJXAotCVtfSU9DX05SKGlvY3Rs KV0gPSB7CQkJCVwKLQkJCS5jbWQgPSBpb2N0bCwJCQlcCi0JCQkuZnVuYyA9IF9mdW5jLAkJCVwK LQkJCS5mbGFncyA9IF9mbGFncywJCVwKLQkJCS5uYW1lID0gI2lvY3RsCQkJXAotCX0KKwkvKiBt YXAgcmVtb3RlbHkgc2hhcmVkIHBhZ2VzIG9uIGltcG9ydGVyJ3Mgc2lkZSB2aWEKKwkgKiBoeXBl cnZpc29yLXNwZWNpZmljIG1ldGhvZAorCSAqLworCXN0cnVjdCBwYWdlICoqICgqbWFwX3NoYXJl ZF9wYWdlcykoaW50LCBpbnQsIGludCwgdm9pZCAqKik7CiAKLSNkZWZpbmUgSU9DVExfSFlQRVJf RE1BQlVGX0VYUE9SVEVSX1JJTkdfU0VUVVAgXAotX0lPQyhfSU9DX05PTkUsICdHJywgMCwgc2l6 ZW9mKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0ZXJfcmluZ19zZXR1cCkpCi1zdHJ1 Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydGVyX3Jpbmdfc2V0dXAgewotCS8qIElOIHBhcmFt ZXRlcnMgKi8KLQkvKiBSZW1vdGUgZG9tYWluIGlkICovCi0JdWludDMyX3QgcmVtb3RlX2RvbWFp bjsKLX07CisJLyogdW5tYXAgYW5kIGZyZWUgc2hhcmVkIHBhZ2VzIG9uIGltcG9ydGVyJ3Mgc2lk ZSB2aWEKKwkgKiBoeXBlcnZpc29yLXNwZWNpZmljIG1ldGhvZAorCSAqLworCWludCAoKnVubWFw X3NoYXJlZF9wYWdlcykodm9pZCAqKiwgaW50KTsKIAotI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFC VUZfSU1QT1JURVJfUklOR19TRVRVUCBcCi1fSU9DKF9JT0NfTk9ORSwgJ0cnLCAxLCBzaXplb2Yo c3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nX3NldHVwKSkKLXN0cnVjdCBp b2N0bF9oeXBlcl9kbWFidWZfaW1wb3J0ZXJfcmluZ19zZXR1cCB7Ci0JLyogSU4gcGFyYW1ldGVy cyAqLwotCS8qIFNvdXJjZSBkb21haW4gaWQgKi8KLQl1aW50MzJfdCBzb3VyY2VfZG9tYWluOwot fTsKKwkvKiBpbml0aWFsaXplIGNvbW11bmljYXRpb24gZW52aXJvbm1lbnQgKi8KKwlpbnQgKCpp bml0X2NvbW1fZW52KSh2b2lkKTsKIAotI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JU X1JFTU9URSBcCi1fSU9DKF9JT0NfTk9ORSwgJ0cnLCAyLCBzaXplb2Yoc3RydWN0IGlvY3RsX2h5 cGVyX2RtYWJ1Zl9leHBvcnRfcmVtb3RlKSkKLXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhw b3J0X3JlbW90ZSB7Ci0JLyogSU4gcGFyYW1ldGVycyAqLwotCS8qIERNQSBidWYgZmQgdG8gYmUg ZXhwb3J0ZWQgKi8KLQl1aW50MzJfdCBkbWFidWZfZmQ7Ci0JLyogRG9tYWluIGlkIHRvIHdoaWNo IGJ1ZmZlciBzaG91bGQgYmUgZXhwb3J0ZWQgKi8KLQl1aW50MzJfdCByZW1vdGVfZG9tYWluOwot CS8qIGV4cG9ydGVkIGRtYSBidWYgaWQgKi8KLQl1aW50MzJfdCBoeXBlcl9kbWFidWZfaWQ7Ci0J dWludDMyX3QgcHJpdmF0ZVs0XTsKLX07CisJdm9pZCAoKmRlc3Ryb3lfY29tbSkodm9pZCk7CiAK LSNkZWZpbmUgSU9DVExfSFlQRVJfRE1BQlVGX0VYUE9SVF9GRCBcCi1fSU9DKF9JT0NfTk9ORSwg J0cnLCAzLCBzaXplb2Yoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfZmQpKQotc3Ry dWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfZmQgewotCS8qIElOIHBhcmFtZXRlcnMgKi8K LQkvKiBoeXBlciBkbWFidWYgaWQgdG8gYmUgaW1wb3J0ZWQgKi8KLQl1aW50MzJfdCBoeXBlcl9k bWFidWZfaWQ7Ci0JLyogZmxhZ3MgKi8KLQl1aW50MzJfdCBmbGFnczsKLQkvKiBPVVQgcGFyYW1l dGVycyAqLwotCS8qIGV4cG9ydGVkIGRtYSBidWYgZmQgKi8KLQl1aW50MzJfdCBmZDsKLX07CisJ LyogdXBzdHJlYW0gY2ggc2V0dXAgKHJlY2VpdmluZyBhbmQgcmVzcG9uZGluZykgKi8KKwlpbnQg KCppbml0X3J4X2NoKShpbnQpOworCisJLyogZG93bnN0cmVhbSBjaCBzZXR1cCAodHJhbnNtaXR0 aW5nIGFuZCBwYXJzaW5nIHJlc3BvbnNlcykgKi8KKwlpbnQgKCppbml0X3R4X2NoKShpbnQpOwog Ci0jZGVmaW5lIElPQ1RMX0hZUEVSX0RNQUJVRl9VTkVYUE9SVCBcCi1fSU9DKF9JT0NfTk9ORSwg J0cnLCA0LCBzaXplb2Yoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCkpCi1zdHJ1 Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3VuZXhwb3J0IHsKLQkvKiBJTiBwYXJhbWV0ZXJzICovCi0J LyogaHlwZXIgZG1hYnVmIGlkIHRvIGJlIHVuZXhwb3J0ZWQgKi8KLQl1aW50MzJfdCBoeXBlcl9k bWFidWZfaWQ7Ci0JLyogT1VUIHBhcmFtZXRlcnMgKi8KLQkvKiBTdGF0dXMgb2YgcmVxdWVzdCAq LwotCXVpbnQzMl90IHN0YXR1czsKKwlpbnQgKCpzZW5kX3JlcSkoaW50LCBzdHJ1Y3QgaHlwZXJf ZG1hYnVmX3JlcSAqLCBpbnQpOwogfTsKIAotI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFCVUZfUVVF UlkgXAotX0lPQyhfSU9DX05PTkUsICdHJywgNSwgc2l6ZW9mKHN0cnVjdCBpb2N0bF9oeXBlcl9k bWFidWZfcXVlcnkpKQotc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9xdWVyeSB7Ci0JLyogaW4g cGFyYW1ldGVycyAqLwotCS8qIGh5cGVyIGRtYWJ1ZiBpZCB0byBiZSBxdWVyaWVkICovCi0JdWlu dDMyX3QgaHlwZXJfZG1hYnVmX2lkOwotCS8qIGl0ZW0gdG8gYmUgcXVlcmllZCAqLwotCXVpbnQz Ml90IGl0ZW07Ci0JLyogT1VUIHBhcmFtZXRlcnMgKi8KLQkvKiBWYWx1ZSBvZiBxdWVyaWVkIGl0 ZW0gKi8KLQl1aW50MzJfdCBpbmZvOworc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRlIHsKKyAg ICAgICAgc3RydWN0IGRldmljZSAqZGV2aWNlOworCWludCBkb21pZDsKKwlzdHJ1Y3Qgd29ya3F1 ZXVlX3N0cnVjdCAqd29ya19xdWV1ZTsKKwlzdHJ1Y3QgbGlzdF9yZXVzYWJsZV9pZCAqaWRfcXVl dWU7CisKKwkvKiBiYWNrZW5kIG9wcyAtIGh5cGVydmlzb3Igc3BlY2lmaWMgKi8KKwlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX2JhY2tlbmRfb3BzICpiYWNrZW5kX29wczsKIH07CiAKLSNlbmRpZiAvL19f TElOVVhfUFVCTElDX0hZUEVSX0RNQUJVRl9EUlZfSF9fCisjZW5kaWYgLyogX19MSU5VWF9QVUJM SUNfSFlQRVJfRE1BQlVGX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVy X2RtYWJ1Zi9oeXBlcl9kbWFidWZfaWQuYyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfaWQuYwppbmRleCA3YmJiMTc5Li5iNThhMTExIDEwMDY0NAotLS0gYS9kcml2ZXJz L3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lkLmMKKysrIGIvZHJpdmVycy94ZW4vaHlw ZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pZC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxp bnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1h YnVmX21zZy5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKICNpbmNsdWRlICJoeXBl cl9kbWFidWZfaWQuaCIKIApAQCAtMTksNiArMjAsNyBAQCB2b2lkIHN0b3JlX3JldXNhYmxlX2lk KGludCBpZCkKIHN0YXRpYyBpbnQgcmV0cmlldmVfcmV1c2FibGVfaWQodm9pZCkKIHsKIAlzdHJ1 Y3QgbGlzdF9yZXVzYWJsZV9pZCAqcmV1c2FibGVfaGVhZCA9IGh5cGVyX2RtYWJ1Zl9wcml2YXRl LmlkX3F1ZXVlOworCWludCBpZDsKIAogCS8qIGNoZWNrIHRoZXJlIGlzIHJldXNhYmxlIGlkICov CiAJaWYgKCFsaXN0X2VtcHR5KCZyZXVzYWJsZV9oZWFkLT5saXN0KSkgewpAQCAtMjcsNyArMjks OSBAQCBzdGF0aWMgaW50IHJldHJpZXZlX3JldXNhYmxlX2lkKHZvaWQpCiAJCQkJCQkgbGlzdCk7 CiAKIAkJbGlzdF9kZWwoJnJldXNhYmxlX2hlYWQtPmxpc3QpOwotCQlyZXR1cm4gcmV1c2FibGVf aGVhZC0+aWQ7CisJCWlkID0gcmV1c2FibGVfaGVhZC0+aWQ7CisJCWtmcmVlKHJldXNhYmxlX2hl YWQpOworCQlyZXR1cm4gaWQ7CiAJfQogCiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pbXAuYyBiL2RyaXZlcnMveGVuL2h5cGVy X2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW1wLmMKaW5kZXggYjEwOTEzOC4uMGYxMDRiOSAxMDA2NDQK LS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pbXAuYworKysgYi9k cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2ltcC5jCkBAIC04LDEwICs4LDEy IEBACiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3N0cnVjdC5oIgogI2luY2x1ZGUgImh5cGVyX2Rt YWJ1Zl9pbXAuaCIKICNpbmNsdWRlICJoeXBlcl9kbWFidWZfaWQuaCIKLSNpbmNsdWRlICJ4ZW4v aHlwZXJfZG1hYnVmX3hlbl9jb21tLmgiCiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX21zZy5oIgor I2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKICNpbmNsdWRlICJoeXBlcl9kbWFidWZfbGlz dC5oIgogCitleHRlcm4gc3RydWN0IGh5cGVyX2RtYWJ1Zl9wcml2YXRlIGh5cGVyX2RtYWJ1Zl9w cml2YXRlOworCiAjZGVmaW5lIFJFRlNfUEVSX1BBR0UgKFBBR0VfU0laRS9zaXplb2YoZ3JhbnRf cmVmX3QpKQogCiBpbnQgZG1hYnVmX3JlZmNvdW50KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQpA QCAtMTM4LDM5NyArMTQwLDEwIEBAIHN0cnVjdCBzZ190YWJsZSogaHlwZXJfZG1hYnVmX2NyZWF0 ZV9zZ3Qoc3RydWN0IHBhZ2UgKipwYWdlcywKIC8qIGZyZWUgc2dfdGFibGUgKi8KIHZvaWQgaHlw ZXJfZG1hYnVmX2ZyZWVfc2d0KHN0cnVjdCBzZ190YWJsZSogc2d0KQogewotCXNnX2ZyZWVfdGFi bGUoc2d0KTsKLQlrZnJlZShzZ3QpOwotfQotCi0vKgotICogQ3JlYXRlcyAyIGxldmVsIHBhZ2Ug ZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgcmVmZXJlbmNpbmcgc2hhcmVkIHBhZ2VzLgotICogVG9w IGxldmVsIHBhZ2UgaXMgYSBzaW5nbGUgcGFnZSB0aGF0IGNvbnRhaW5zIHVwIHRvIDEwMjQgcmVm aWRzIHRoYXQKLSAqIHBvaW50IHRvIDJuZCBsZXZlbCBwYWdlcy4KLSAqIEVhY2ggMm5kIGxldmVs IHBhZ2UgY29udGFpbnMgdXAgdG8gMTAyNCByZWZpZHMgdGhhdCBwb2ludCB0byBzaGFyZWQKLSAq IGRhdGEgcGFnZXMuCi0gKiBUaGVyZSB3aWxsIGFsd2F5cyBiZSBvbmUgdG9wIGxldmVsIHBhZ2Ug YW5kIG51bWJlciBvZiAybmQgbGV2ZWwgcGFnZXMKLSAqIGRlcGVuZHMgb24gbnVtYmVyIG9mIHNo YXJlZCBkYXRhIHBhZ2VzLgotICoKLSAqICAgICAgVG9wIGxldmVsIHBhZ2UgICAgICAgICAgICAg ICAgMm5kIGxldmVsIHBhZ2VzICAgICAgICAgICAgRGF0YSBwYWdlcwotICogKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rICAg4pSMPistLS0tLS0tLS0tLS0tLS0tLS0tLSsg4pSMLS0tPistLS0t LS0tLS0tLS0rCi0gKiB8Mm5kIGxldmVsIHBhZ2UgMCByZWZpZCAgIHwtLS3ilJggfERhdGEgcGFn ZSAwIHJlZmlkICAgfC3ilJggICAgfERhdGEgcGFnZSAwIHwKLSAqIHwybmQgbGV2ZWwgcGFnZSAx IHJlZmlkICAgfC0tLeKUkCB8RGF0YSBwYWdlIDEgcmVmaWQgICB8LeKUkCAgICArLS0tLS0tLS0t LS0tKwotICogfCAgICAgICAgICAgLi4uICAgICAgICAgICB8ICAgfCB8ICAgICAuLi4uICAgICAg ICAgICB8IHwKLSAqIHwybmQgbGV2ZWwgcGFnZSAxMDIzIHJlZmlkfC3ilJAgfCB8RGF0YSBwYWdl IDEwMjMgcmVmaWR8IOKUlC0tLT4rLS0tLS0tLS0tLS0tKwotICogKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rIHwgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgfERhdGEgcGFnZSAxIHwK LSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICstLS0tLS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDi lJQ+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICB8RGF0YSBwYWdlIDEwMjQgcmVmaWR8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIHxEYXRhIHBhZ2UgMTAyNSByZWZpZHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgfCAgICAgICAuLi4gICAgICAgICAgfAotICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICB8RGF0YSBwYWdlIDIwNDcgcmVmaWR8Ci0gKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgICstLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgLi4u Li4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilJQtLT4rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxEYXRhIHBhZ2Ug MTA0NzU1MiByZWZpZHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfERhdGEg cGFnZSAxMDQ3NTUzIHJlZmlkfAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAgIC4uLiAgICAgICAgICAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHxEYXRhIHBhZ2UgMTA0ODU3NSByZWZpZHwtLT4rLS0tLS0tLS0tLS0tLS0tLS0tKwotICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r ICAgfERhdGEgcGFnZSAxMDQ4NTc1IHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0rCi0gKgot ICogVXNpbmcgc3VjaCAyIGxldmVsIHN0cnVjdHVyZSBpdCBpcyBwb3NzaWJsZSB0byByZWZlcmVu Y2UgdXAgdG8gNEdCIG9mCi0gKiBzaGFyZWQgZGF0YSB1c2luZyBzaW5nbGUgcmVmaWQgcG9pbnRp bmcgdG8gdG9wIGxldmVsIHBhZ2UuCi0gKgotICogUmV0dXJucyByZWZpZCBvZiB0b3AgbGV2ZWwg cGFnZS4KLSAqLwotZ3JhbnRfcmVmX3QgaHlwZXJfZG1hYnVmX2NyZWF0ZV9hZGRyZXNzaW5nX3Rh YmxlcyhncmFudF9yZWZfdCAqZGF0YV9yZWZzLCBpbnQgbmVudHMsIGludCByZG9tYWluLAotCQkJ CQkJICBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZvICpzaGFyZWRfcGFnZXNf aW5mbykKLXsKLQkvKgotCSAqIENhbGN1bGF0ZSBudW1iZXIgb2YgcGFnZXMgbmVlZGVkIGZvciAy bmQgbGV2ZWwgYWRkcmVzaW5nOgotCSAqLwotCWludCBuXzJuZF9sZXZlbF9wYWdlcyA9IChuZW50 cy9SRUZTX1BFUl9QQUdFICsKLQkJCQkoKG5lbnRzICUgUkVGU19QRVJfUEFHRSkgPyAxOiAwKSk7 Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBncmVmX3BhZ2Vfc3RhcnQ7Ci0JZ3JhbnRfcmVmX3Qg KnRtcF9wYWdlOwotCWdyYW50X3JlZl90IHRvcF9sZXZlbF9yZWY7Ci0JZ3JhbnRfcmVmX3QgKiBh ZGRyX3JlZnM7Ci0JYWRkcl9yZWZzID0ga2NhbGxvYyhzaXplb2YoZ3JhbnRfcmVmX3QpLCBuXzJu ZF9sZXZlbF9wYWdlcywgR0ZQX0tFUk5FTCk7Ci0KLQlncmVmX3BhZ2Vfc3RhcnQgPSBfX2dldF9m cmVlX3BhZ2VzKEdGUF9LRVJORUwsIG5fMm5kX2xldmVsX3BhZ2VzKTsKLQl0bXBfcGFnZSA9IChn cmFudF9yZWZfdCAqKWdyZWZfcGFnZV9zdGFydDsKLQotCS8qIFN0b3JlIDJuZCBsZXZlbCBwYWdl cyB0byBiZSBmcmVlZCBsYXRlciAqLwotCXNoYXJlZF9wYWdlc19pbmZvLT5hZGRyX3BhZ2VzID0g dG1wX3BhZ2U7Ci0KLQkvKlRPRE86IG1ha2Ugc3VyZSB0aGF0IGFsbG9jYXRlZCBtZW1vcnkgaXMg ZmlsbGVkIHdpdGggMCovCi0KLQkvKiBTaGFyZSAybmQgbGV2ZWwgYWRkcmVzc2luZyBwYWdlcyBp biByZWFkb25seSBtb2RlKi8KLQlmb3IgKGk9MDsgaTwgbl8ybmRfbGV2ZWxfcGFnZXM7IGkrKykg ewotCQlhZGRyX3JlZnNbaV0gPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MocmRvbWFpbiwK LQkJCQkJCQkgICB2aXJ0X3RvX21mbigodW5zaWduZWQgbG9uZyl0bXBfcGFnZStpKlBBR0VfU0la RSApLAotCQkJCQkJCSAgIDEpOwotCX0KLQotCS8qCi0JICogZmlsbCBzZWNvbmQgbGV2ZWwgcGFn ZXMgd2l0aCBkYXRhIHJlZnMKLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbmVudHM7IGkrKykgewot CQl0bXBfcGFnZVtpXSA9IGRhdGFfcmVmc1tpXTsKLQl9Ci0KLQotCS8qIGFsbG9jYXRlIHRvcCBs ZXZlbCBwYWdlICovCi0JZ3JlZl9wYWdlX3N0YXJ0ID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VS TkVMLCAxKTsKLQl0bXBfcGFnZSA9IChncmFudF9yZWZfdCAqKWdyZWZfcGFnZV9zdGFydDsKLQot CS8qIFN0b3JlIHRvcCBsZXZlbCBwYWdlIHRvIGJlIGZyZWVkIGxhdGVyICovCi0Jc2hhcmVkX3Bh Z2VzX2luZm8tPnRvcF9sZXZlbF9wYWdlID0gdG1wX3BhZ2U7Ci0KLQkvKgotCSAqIGZpbGwgdG9w IGxldmVsIHBhZ2Ugd2l0aCByZWZlcmVuY2UgbnVtYmVycyBvZiBzZWNvbmQgbGV2ZWwgcGFnZXMg cmVmcy4KLQkgKi8KLQlmb3IgKGk9MDsgaTwgbl8ybmRfbGV2ZWxfcGFnZXM7IGkrKykgewotCQl0 bXBfcGFnZVtpXSA9ICBhZGRyX3JlZnNbaV07Ci0JfQotCi0JLyogU2hhcmUgdG9wIGxldmVsIGFk ZHJlc3NpbmcgcGFnZSBpbiByZWFkb25seSBtb2RlKi8KLQl0b3BfbGV2ZWxfcmVmID0gZ250dGFi X2dyYW50X2ZvcmVpZ25fYWNjZXNzKHJkb21haW4sCi0JCQkJCQkgICAgdmlydF90b19tZm4oKHVu c2lnbmVkIGxvbmcpdG1wX3BhZ2UpLAotCQkJCQkJICAgIDEpOwotCi0Ja2ZyZWUoYWRkcl9yZWZz KTsKLQotCXJldHVybiB0b3BfbGV2ZWxfcmVmOwotfQotCi0vKgotICogTWFwcyBwcm92aWRlZCB0 b3AgbGV2ZWwgcmVmIGlkIGFuZCB0aGVuIHJldHVybiBhcnJheSBvZiBwYWdlcyBjb250YWluaW5n IGRhdGEgcmVmcy4KLSAqLwotc3RydWN0IHBhZ2UqKiBoeXBlcl9kbWFidWZfZ2V0X2RhdGFfcmVm cyhncmFudF9yZWZfdCB0b3BfbGV2ZWxfcmVmLCBpbnQgZG9taWQsIGludCBuZW50cywKLQkJCQkJ IHN0cnVjdCBoeXBlcl9kbWFidWZfc2hhcmVkX3BhZ2VzX2luZm8gKnNoYXJlZF9wYWdlc19pbmZv KQotewotCXN0cnVjdCBwYWdlICp0b3BfbGV2ZWxfcGFnZTsKLQlzdHJ1Y3QgcGFnZSAqKmxldmVs Ml9wYWdlczsKLQotCWdyYW50X3JlZl90ICp0b3BfbGV2ZWxfcmVmczsKLQotCXN0cnVjdCBnbnR0 YWJfbWFwX2dyYW50X3JlZiB0b3BfbGV2ZWxfbWFwX29wczsKLQlzdHJ1Y3QgZ250dGFiX3VubWFw X2dyYW50X3JlZiB0b3BfbGV2ZWxfdW5tYXBfb3BzOwotCi0Jc3RydWN0IGdudHRhYl9tYXBfZ3Jh bnRfcmVmICptYXBfb3BzOwotCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9v cHM7Ci0KLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JaW50IG5fbGV2ZWwyX3JlZnMgPSAwOwotCWlu dCBpOwotCi0Jbl9sZXZlbDJfcmVmcyA9IChuZW50cyAvIFJFRlNfUEVSX1BBR0UpICsgKChuZW50 cyAlIFJFRlNfUEVSX1BBR0UpID8gMSA6IDApOwotCi0JbGV2ZWwyX3BhZ2VzID0ga2NhbGxvYyhz aXplb2Yoc3RydWN0IHBhZ2UqKSwgbl9sZXZlbDJfcmVmcywgR0ZQX0tFUk5FTCk7Ci0KLQltYXBf b3BzID0ga2NhbGxvYyhzaXplb2YobWFwX29wc1swXSksIFJFRlNfUEVSX1BBR0UsIEdGUF9LRVJO RUwpOwotCXVubWFwX29wcyA9IGtjYWxsb2Moc2l6ZW9mKHVubWFwX29wc1swXSksIFJFRlNfUEVS X1BBR0UsIEdGUF9LRVJORUwpOwotCi0JLyogTWFwIHRvcCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2Ug Ki8KLQlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKDEsICZ0b3BfbGV2ZWxfcGFnZSkpIHsKLQkJcHJp bnRrKCJDYW5ub3QgYWxsb2NhdGUgcGFnZXNcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlh ZGRyID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHRvcF9sZXZlbF9w YWdlKSk7Ci0JZ250dGFiX3NldF9tYXBfb3AoJnRvcF9sZXZlbF9tYXBfb3BzLCBhZGRyLCBHTlRN QVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCi0JCQkgIHRvcF9sZXZlbF9yZWYsIGRvbWlk KTsKLQotCWdudHRhYl9zZXRfdW5tYXBfb3AoJnRvcF9sZXZlbF91bm1hcF9vcHMsIGFkZHIsIEdO VE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25seSwgLTEpOwotCi0JaWYgKGdudHRhYl9tYXBf cmVmcygmdG9wX2xldmVsX21hcF9vcHMsIE5VTEwsICZ0b3BfbGV2ZWxfcGFnZSwgMSkpIHsKLQkJ cHJpbnRrKCJcbnhlbjogZG9tMDogSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCIpOwot CQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAodG9wX2xldmVsX21hcF9vcHMuc3RhdHVzKSB7Ci0J CXByaW50aygiXG54ZW46IGRvbTA6IEhZUEVSVklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWQgc3Rh dHVzID0gJWQiLAotCQkJCXRvcF9sZXZlbF9tYXBfb3BzLnN0YXR1cyk7Ci0JCXJldHVybiBOVUxM OwotCX0gZWxzZSB7Ci0JCXRvcF9sZXZlbF91bm1hcF9vcHMuaGFuZGxlID0gdG9wX2xldmVsX21h cF9vcHMuaGFuZGxlOwotCX0KLQotCS8qIFBhcnNlIGNvbnRlbnRzIG9mIHRvcCBsZXZlbCBhZGRy ZXNzaW5nIHBhZ2UgdG8gZmluZCBob3cgbWFueSBzZWNvbmQgbGV2ZWwgcGFnZXMgaXMgdGhlcmUq LwotCXRvcF9sZXZlbF9yZWZzID0gcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHRvcF9sZXZlbF9w YWdlKSk7Ci0KLQkvKiBNYXAgYWxsIHNlY29uZCBsZXZlbCBwYWdlcyAqLwotCWlmIChnbnR0YWJf YWxsb2NfcGFnZXMobl9sZXZlbDJfcmVmcywgbGV2ZWwyX3BhZ2VzKSkgewotCQlwcmludGsoIkNh bm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWZvciAoaSA9 IDA7IGkgPCBuX2xldmVsMl9yZWZzOyBpKyspIHsKLQkJYWRkciA9ICh1bnNpZ25lZCBsb25nKXBm bl90b19rYWRkcihwYWdlX3RvX3BmbihsZXZlbDJfcGFnZXNbaV0pKTsKLQkJZ250dGFiX3NldF9t YXBfb3AoJm1hcF9vcHNbaV0sIGFkZHIsIEdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25s eSwKLQkJCQkgIHRvcF9sZXZlbF9yZWZzW2ldLCBkb21pZCk7Ci0JCWdudHRhYl9zZXRfdW5tYXBf b3AoJnVubWFwX29wc1tpXSwgYWRkciwgR05UTUFQX2hvc3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5 LCAtMSk7Ci0JfQotCi0JaWYgKGdudHRhYl9tYXBfcmVmcyhtYXBfb3BzLCBOVUxMLCBsZXZlbDJf cGFnZXMsIG5fbGV2ZWwyX3JlZnMpKSB7Ci0JCXByaW50aygiXG54ZW46IGRvbTA6IEhZUEVSVklT T1IgbWFwIGdyYW50IHJlZiBmYWlsZWQiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JLyogQ2hl Y2tzIGlmIHBhZ2VzIHdlcmUgbWFwcGVkIGNvcnJlY3RseSBhbmQgYXQgdGhlIHNhbWUgdGltZSBp cyBjYWxjdWxhdGluZyB0b3RhbCBudW1iZXIgb2YgZGF0YSByZWZpZHMqLwotCWZvciAoaSA9IDA7 IGkgPCBuX2xldmVsMl9yZWZzOyBpKyspIHsKLQkJaWYgKG1hcF9vcHNbaV0uc3RhdHVzKSB7Ci0J CQlwcmludGsoIlxueGVuOiBkb20wOiBIWVBFUlZJU09SIG1hcCBncmFudCByZWYgZmFpbGVkIHN0 YXR1cyA9ICVkIiwKLQkJCSAgICAgICBtYXBfb3BzW2ldLnN0YXR1cyk7Ci0JCQlyZXR1cm4gTlVM TDsKLQkJfSBlbHNlIHsKLQkJCXVubWFwX29wc1tpXS5oYW5kbGUgPSBtYXBfb3BzW2ldLmhhbmRs ZTsKLQkJfQotCX0KLQotCS8qIFVubWFwIHRvcCBsZXZlbCBwYWdlLCBhcyBpdCB3b24ndCBiZSBu ZWVkZWQgYW55IGxvbmdlciAqLwotCWlmIChnbnR0YWJfdW5tYXBfcmVmcygmdG9wX2xldmVsX3Vu bWFwX29wcywgTlVMTCwgJnRvcF9sZXZlbF9wYWdlLCAxKSkgewotCQlwcmludGsoIlx4ZW46IGNh bm5vdCB1bm1hcCB0b3AgbGV2ZWwgcGFnZVxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWdu dHRhYl9mcmVlX3BhZ2VzKDEsICZ0b3BfbGV2ZWxfcGFnZSk7Ci0Ja2ZyZWUobWFwX29wcyk7Ci0J c2hhcmVkX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9IHVubWFwX29wczsKLQotCXJldHVybiBsZXZl bDJfcGFnZXM7Ci19Ci0KLQotLyogVGhpcyBjb2xsZWN0cyBhbGwgcmVmZXJlbmNlIG51bWJlcnMg Zm9yIDJuZCBsZXZlbCBzaGFyZWQgcGFnZXMgYW5kIGNyZWF0ZSBhIHRhYmxlCi0gKiB3aXRoIHRo b3NlIGluIDFzdCBsZXZlbCBzaGFyZWQgcGFnZXMgdGhlbiByZXR1cm4gcmVmZXJlbmNlIG51bWJl cnMgZm9yIHRoaXMgdG9wIGxldmVsCi0gKiB0YWJsZS4gKi8KLWdyYW50X3JlZl90IGh5cGVyX2Rt YWJ1Zl9jcmVhdGVfZ3JlZl90YWJsZShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgcmRvbWFpbiwg aW50IG5lbnRzLAotCQkJCQkgICBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZv ICpzaGFyZWRfcGFnZXNfaW5mbykKLXsKLQlpbnQgaSA9IDA7Ci0JZ3JhbnRfcmVmX3QgKmRhdGFf cmVmczsKLQlncmFudF9yZWZfdCB0b3BfbGV2ZWxfcmVmOwotCi0JLyogYWxsb2NhdGUgdGVtcCBh cnJheSBmb3IgcmVmcyBvZiBzaGFyZWQgZGF0YSBwYWdlcyAqLwotCWRhdGFfcmVmcyA9IGtjYWxs b2MobmVudHMsIHNpemVvZihncmFudF9yZWZfdCksIEdGUF9LRVJORUwpOwotCi0JLyogc2hhcmUg ZGF0YSBwYWdlcyBpbiBydyBtb2RlKi8KLQlmb3IgKGk9MDsgaTxuZW50czsgaSsrKSB7Ci0JCWRh dGFfcmVmc1tpXSA9IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2VzcyhyZG9tYWluLAotCQkJCQkJ CSAgIHBmbl90b19tZm4ocGFnZV90b19wZm4ocGFnZXNbaV0pKSwKLQkJCQkJCQkgICAwKTsKLQl9 Ci0KLQkvKiBjcmVhdGUgYWRkaXRpb25hbCBzaGFyZWQgcGFnZXMgd2l0aCAyIGxldmVsIGFkZHJl c3Npbmcgb2YgZGF0YSBwYWdlcyAqLwotCXRvcF9sZXZlbF9yZWYgPSBoeXBlcl9kbWFidWZfY3Jl YXRlX2FkZHJlc3NpbmdfdGFibGVzKGRhdGFfcmVmcywgbmVudHMsIHJkb21haW4sCi0JCQkJCQkJ ICAgICAgc2hhcmVkX3BhZ2VzX2luZm8pOwotCi0JLyogU3RvcmUgZXhwb3J0ZWQgcGFnZXMgcmVm aWQgdG8gYmUgdW5zaGFyZWQgbGF0ZXIgKi8KLQlzaGFyZWRfcGFnZXNfaW5mby0+ZGF0YV9yZWZz ID0gZGF0YV9yZWZzOwotCXNoYXJlZF9wYWdlc19pbmZvLT50b3BfbGV2ZWxfcmVmID0gdG9wX2xl dmVsX3JlZjsKLQotCXJldHVybiB0b3BfbGV2ZWxfcmVmOwotfQotCi1pbnQgaHlwZXJfZG1hYnVm X2NsZWFudXBfZ3JlZl90YWJsZShzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5m bykgewotCXVpbnQzMl90IGkgPSAwOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfc2hhcmVkX3BhZ2Vz X2luZm8gKnNoYXJlZF9wYWdlc19pbmZvID0gJnNndF9pbmZvLT5zaGFyZWRfcGFnZXNfaW5mbzsK LQotCWdyYW50X3JlZl90ICpyZWYgPSBzaGFyZWRfcGFnZXNfaW5mby0+dG9wX2xldmVsX3BhZ2U7 Ci0JaW50IG5fMm5kX2xldmVsX3BhZ2VzID0gKHNndF9pbmZvLT5uZW50cy9SRUZTX1BFUl9QQUdF ICsKLQkJCQkoKHNndF9pbmZvLT5uZW50cyAlIFJFRlNfUEVSX1BBR0UpID8gMTogMCkpOwotCi0K LQlpZiAoc2hhcmVkX3BhZ2VzX2luZm8tPmRhdGFfcmVmcyA9PSBOVUxMIHx8Ci0JICAgIHNoYXJl ZF9wYWdlc19pbmZvLT5hZGRyX3BhZ2VzID09ICBOVUxMIHx8Ci0JICAgIHNoYXJlZF9wYWdlc19p bmZvLT50b3BfbGV2ZWxfcGFnZSA9PSBOVUxMIHx8Ci0JICAgIHNoYXJlZF9wYWdlc19pbmZvLT50 b3BfbGV2ZWxfcmVmID09IC0xKSB7Ci0JCXByaW50aygiZ3JlZiB0YWJsZSBmb3IgaHlwZXJfZG1h YnVmIGFscmVhZHkgY2xlYW5lZCB1cFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIEVuZCBm b3JlaWduIGFjY2VzcyBmb3IgMm5kIGxldmVsIGFkZHJlc3NpbmcgcGFnZXMgKi8KLQl3aGlsZShy ZWZbaV0gIT0gMCAmJiBpIDwgbl8ybmRfbGV2ZWxfcGFnZXMpIHsKLQkJaWYgKGdudHRhYl9xdWVy eV9mb3JlaWduX2FjY2VzcyhyZWZbaV0pKSB7Ci0JCQlwcmludGsoInJlZmlkIG5vdCBzaGFyZWQg ISFcbiIpOwotCQl9Ci0JCWlmICghZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYocmVmW2ld LCAxKSkgewotCQkJcHJpbnRrKCJyZWZpZCBzdGlsbCBpbiB1c2UhISFcbiIpOwotCQl9Ci0JCWdu dHRhYl9mcmVlX2dyYW50X3JlZmVyZW5jZShyZWZbaV0pOwotCQlpKys7Ci0JfQotCWZyZWVfcGFn ZXMoKHVuc2lnbmVkIGxvbmcpc2hhcmVkX3BhZ2VzX2luZm8tPmFkZHJfcGFnZXMsIGkpOwotCi0K LQkvKiBFbmQgZm9yZWlnbiBhY2Nlc3MgZm9yIHRvcCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2UgKi8K LQlpZiAoZ250dGFiX3F1ZXJ5X2ZvcmVpZ25fYWNjZXNzKHNoYXJlZF9wYWdlc19pbmZvLT50b3Bf bGV2ZWxfcmVmKSkgewotCQlwcmludGsoInJlZmlkIG5vdCBzaGFyZWQgISFcbiIpOwotCX0KLQln bnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihzaGFyZWRfcGFnZXNfaW5mby0+dG9wX2xldmVs X3JlZiwgMSk7Ci0JZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKHNoYXJlZF9wYWdlc19pbmZv LT50b3BfbGV2ZWxfcmVmKTsKLQotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpc2hhcmVkX3Bh Z2VzX2luZm8tPnRvcF9sZXZlbF9wYWdlLCAxKTsKLQotCS8qIEVuZCBmb3JlaWduIGFjY2VzcyBm b3IgZGF0YSBwYWdlcywgYnV0IGRvIG5vdCBmcmVlIHRoZW0gKi8KLQlmb3IgKGkgPSAwOyBpIDwg c2d0X2luZm8tPm5lbnRzOyBpKyspIHsKLQkJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vz cyhzaGFyZWRfcGFnZXNfaW5mby0+ZGF0YV9yZWZzW2ldKSkgewotCQkJcHJpbnRrKCJyZWZpZCBu b3Qgc2hhcmVkICEhXG4iKTsKLQkJfQotCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihz aGFyZWRfcGFnZXNfaW5mby0+ZGF0YV9yZWZzW2ldLCAwKTsKLQkJZ250dGFiX2ZyZWVfZ3JhbnRf cmVmZXJlbmNlKHNoYXJlZF9wYWdlc19pbmZvLT5kYXRhX3JlZnNbaV0pOwotCX0KLQotCWtmcmVl KHNoYXJlZF9wYWdlc19pbmZvLT5kYXRhX3JlZnMpOwotCi0Jc2hhcmVkX3BhZ2VzX2luZm8tPmRh dGFfcmVmcyA9IE5VTEw7Ci0Jc2hhcmVkX3BhZ2VzX2luZm8tPmFkZHJfcGFnZXMgPSBOVUxMOwot CXNoYXJlZF9wYWdlc19pbmZvLT50b3BfbGV2ZWxfcGFnZSA9IE5VTEw7Ci0Jc2hhcmVkX3BhZ2Vz X2luZm8tPnRvcF9sZXZlbF9yZWYgPSAtMTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgaHlwZXJf ZG1hYnVmX2NsZWFudXBfaW1wb3J0ZWRfcGFnZXMoc3RydWN0IGh5cGVyX2RtYWJ1Zl9pbXBvcnRl ZF9zZ3RfaW5mbyAqc2d0X2luZm8pIHsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdl c19pbmZvICpzaGFyZWRfcGFnZXNfaW5mbyA9ICZzZ3RfaW5mby0+c2hhcmVkX3BhZ2VzX2luZm87 Ci0KLQlpZihzaGFyZWRfcGFnZXNfaW5mby0+dW5tYXBfb3BzID09IE5VTEwgfHwKLQkgICBzaGFy ZWRfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyA9PSBOVUxMKSB7Ci0JCXByaW50aygiSW1wb3J0ZWQg cGFnZXMgYWxyZWFkeSBjbGVhbmVkIHVwIG9yIGJ1ZmZlciB3YXMgbm90IGltcG9ydGVkIHlldFxu Iik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChnbnR0YWJfdW5tYXBfcmVmcyhzaGFyZWRfcGFn ZXNfaW5mby0+dW5tYXBfb3BzLCBOVUxMLAotCQkJICAgICAgc2hhcmVkX3BhZ2VzX2luZm8tPmRh dGFfcGFnZXMsIHNndF9pbmZvLT5uZW50cykgKSB7Ci0JCXByaW50aygiQ2Fubm90IHVubWFwIGRh dGEgcGFnZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlnbnR0YWJfZnJlZV9wYWdl cyhzZ3RfaW5mby0+bmVudHMsIHNoYXJlZF9wYWdlc19pbmZvLT5kYXRhX3BhZ2VzKTsKLQlrZnJl ZShzaGFyZWRfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyk7Ci0Ja2ZyZWUoc2hhcmVkX3BhZ2VzX2lu Zm8tPnVubWFwX29wcyk7Ci0Jc2hhcmVkX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9IE5VTEw7Ci0J c2hhcmVkX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0K LS8qIG1hcCBhbmQgY29uc3RydWN0IHNnX2xpc3RzIGZyb20gcmVmZXJlbmNlIG51bWJlcnMgKi8K LXN0cnVjdCBzZ190YWJsZSogaHlwZXJfZG1hYnVmX21hcF9wYWdlcyhncmFudF9yZWZfdCB0b3Bf bGV2ZWxfZ3JlZiwgaW50IGZyc3Rfb2ZzdCwKLQkJCQkJaW50IGxhc3RfbGVuLCBpbnQgbmVudHMs IGludCBzZG9tYWluLAotCQkJCQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZv ICpzaGFyZWRfcGFnZXNfaW5mbykKLXsKLQlzdHJ1Y3Qgc2dfdGFibGUgKnN0OwotCXN0cnVjdCBw YWdlICoqcGFnZXM7Ci0Jc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICpvcHM7Ci0Jc3RydWN0 IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKnVubWFwX29wczsKLQl1bnNpZ25lZCBsb25nIGFkZHI7 Ci0JZ3JhbnRfcmVmX3QgKnJlZnM7Ci0JaW50IGk7Ci0JaW50IG5fbGV2ZWwyX3JlZnMgPSAobmVu dHMgLyBSRUZTX1BFUl9QQUdFKSArICgobmVudHMgJSBSRUZTX1BFUl9QQUdFKSA/IDEgOiAwKTsK LQotCS8qIEdldCBkYXRhIHJlZmlkcyAqLwotCXN0cnVjdCBwYWdlKiogcmVmaWRfcGFnZXMgPSBo eXBlcl9kbWFidWZfZ2V0X2RhdGFfcmVmcyh0b3BfbGV2ZWxfZ3JlZiwgc2RvbWFpbiwgbmVudHMs Ci0JCQkJCQkJICAgICAgIHNoYXJlZF9wYWdlc19pbmZvKTsKLQotCXBhZ2VzID0ga2NhbGxvYyhz aXplb2Yoc3RydWN0IHBhZ2UqKSwgbmVudHMsIEdGUF9LRVJORUwpOwotCWlmIChwYWdlcyA9PSBO VUxMKSB7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIGFsbG9jYXRlIG5ldyBwYWdlcyB0aGF0 IGFyZSBtYXBwZWQgdG8gc2hhcmVkIHBhZ2VzIHZpYSBncmFudC10YWJsZSAqLwotCWlmIChnbnR0 YWJfYWxsb2NfcGFnZXMobmVudHMsIHBhZ2VzKSkgewotCQlwcmludGsoIkNhbm5vdCBhbGxvY2F0 ZSBwYWdlc1xuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCW9wcyA9IGtjYWxsb2MobmVudHMs IHNpemVvZihzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYpLAotCQkgICAgICBHRlBfS0VSTkVM KTsKLQl1bm1hcF9vcHMgPSBrY2FsbG9jKG5lbnRzLCBzaXplb2Yoc3RydWN0IGdudHRhYl91bm1h cF9ncmFudF9yZWYpLAotCQkJICAgIEdGUF9LRVJORUwpOwotCi0JZm9yIChpPTA7IGk8bmVudHM7 IGkrKykgewotCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZu KHBhZ2VzW2ldKSk7Ci0JCXJlZnMgPSBwZm5fdG9fa2FkZHIocGFnZV90b19wZm4ocmVmaWRfcGFn ZXNbaSAvIFJFRlNfUEVSX1BBR0VdKSk7Ci0JCWdudHRhYl9zZXRfbWFwX29wKCZvcHNbaV0sIGFk ZHIsIEdOVE1BUF9ob3N0X21hcCB8IEdOVE1BUF9yZWFkb25seSwKLQkJCQlyZWZzW2kgJSBSRUZT X1BFUl9QQUdFXSwgc2RvbWFpbik7Ci0JCWdudHRhYl9zZXRfdW5tYXBfb3AoJnVubWFwX29wc1tp XSwgYWRkciwgR05UTUFQX2hvc3RfbWFwIHwgR05UTUFQX3JlYWRvbmx5LCAtMSk7Ci0JfQotCi0J aWYgKGdudHRhYl9tYXBfcmVmcyhvcHMsIE5VTEwsIHBhZ2VzLCBuZW50cykpIHsKLQkJcHJpbnRr KCJcbnhlbjogZG9tMDogSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZFxuIik7Ci0JCXJl dHVybiBOVUxMOwotCX0KLQotCWZvciAoaT0wOyBpPG5lbnRzOyBpKyspIHsKLQkJaWYgKG9wc1tp XS5zdGF0dXMpIHsKLQkJCXByaW50aygiXG54ZW46IGRvbTA6IEhZUEVSVklTT1IgbWFwIGdyYW50 IHJlZiBmYWlsZWQgc3RhdHVzID0gJWRcbiIsCi0JCQkJb3BzWzBdLnN0YXR1cyk7Ci0JCQlyZXR1 cm4gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCXVubWFwX29wc1tpXS5oYW5kbGUgPSBvcHNbaV0uaGFu ZGxlOwotCQl9CisJaWYgKHNndCkgeworCQlzZ19mcmVlX3RhYmxlKHNndCk7CisJCWtmcmVlKHNn dCk7CiAJfQotCi0Jc3QgPSBoeXBlcl9kbWFidWZfY3JlYXRlX3NndChwYWdlcywgZnJzdF9vZnN0 LCBsYXN0X2xlbiwgbmVudHMpOwotCi0JaWYgKGdudHRhYl91bm1hcF9yZWZzKHNoYXJlZF9wYWdl c19pbmZvLT51bm1hcF9vcHMsIE5VTEwsIHJlZmlkX3BhZ2VzLAotCQkJbl9sZXZlbDJfcmVmcykg KSB7Ci0JCXByaW50aygiQ2Fubm90IHVubWFwIDJuZCBsZXZlbCByZWZzXG4iKTsKLQkJcmV0dXJu IE5VTEw7Ci0JfQotCi0JZ250dGFiX2ZyZWVfcGFnZXMobl9sZXZlbDJfcmVmcywgcmVmaWRfcGFn ZXMpOwotCWtmcmVlKHJlZmlkX3BhZ2VzKTsKLQotCWtmcmVlKHNoYXJlZF9wYWdlc19pbmZvLT51 bm1hcF9vcHMpOwotCXNoYXJlZF9wYWdlc19pbmZvLT51bm1hcF9vcHMgPSB1bm1hcF9vcHM7Ci0J c2hhcmVkX3BhZ2VzX2luZm8tPmRhdGFfcGFnZXMgPSBwYWdlczsKLQlrZnJlZShvcHMpOwotCi0J cmV0dXJuIHN0OwogfQogCiBpbnQgaHlwZXJfZG1hYnVmX2NsZWFudXBfc2d0X2luZm8oc3RydWN0 IGh5cGVyX2RtYWJ1Zl9zZ3RfaW5mbyAqc2d0X2luZm8sIGludCBmb3JjZSkKQEAgLTUzNyw2ICsx NTIsNyBAQCBpbnQgaHlwZXJfZG1hYnVmX2NsZWFudXBfc2d0X2luZm8oc3RydWN0IGh5cGVyX2Rt YWJ1Zl9zZ3RfaW5mbyAqc2d0X2luZm8sIGludCBmbwogCXN0cnVjdCBhdHRhY2htZW50X2xpc3Qg KmF0dGFjaGw7CiAJc3RydWN0IGttYXBfdmFkZHJfbGlzdCAqdmFfa21hcGw7CiAJc3RydWN0IHZt YXBfdmFkZHJfbGlzdCAqdmFfdm1hcGw7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9iYWNrZW5kX29w cyAqb3BzID0gaHlwZXJfZG1hYnVmX3ByaXZhdGUuYmFja2VuZF9vcHM7CiAKIAlpZiAoIXNndF9p bmZvKSB7CiAJCXByaW50aygiaW52YWxpZCBoeXBlcl9kbWFidWZfaWRcbiIpOwpAQCAtNTk4LDcg KzIxNCw3IEBAIGludCBoeXBlcl9kbWFidWZfY2xlYW51cF9zZ3RfaW5mbyhzdHJ1Y3QgaHlwZXJf ZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5mbywgaW50IGZvCiAJfQogCiAJLyogU3RhcnQgY2xlYW51 cCBvZiBidWZmZXIgaW4gcmV2ZXJzZSBvcmRlciB0byBleHBvcnRpbmcgKi8KLQloeXBlcl9kbWFi dWZfY2xlYW51cF9ncmVmX3RhYmxlKHNndF9pbmZvKTsKKwlvcHMtPnVuc2hhcmVfcGFnZXMoJnNn dF9pbmZvLT5yZWZzX2luZm8sIHNndF9pbmZvLT5uZW50cyk7CiAKIAkvKiB1bm1hcCBkbWEtYnVm ICovCiAJZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KHNndF9pbmZvLT5hY3RpdmVfYXR0YWNoZWQt PmF0dGFjaCwKQEAgLTYyMCwyMSArMjM2LDIyIEBAIGludCBoeXBlcl9kbWFidWZfY2xlYW51cF9z Z3RfaW5mbyhzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5mbywgaW50IGZvCiAJ cmV0dXJuIDA7CiB9CiAKLWlubGluZSBpbnQgaHlwZXJfZG1hYnVmX3N5bmNfcmVxdWVzdF9hbmRf d2FpdChpbnQgaWQsIGludCBvcHMpCitpbmxpbmUgaW50IGh5cGVyX2RtYWJ1Zl9zeW5jX3JlcXVl c3RfYW5kX3dhaXQoaW50IGlkLCBpbnQgZG1hYnVmX29wcykKIHsKLQlzdHJ1Y3QgaHlwZXJfZG1h YnVmX3JpbmdfcnEgKnJlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOworCXN0cnVj dCBoeXBlcl9kbWFidWZfYmFja2VuZF9vcHMgKm9wcyA9IGh5cGVyX2RtYWJ1Zl9wcml2YXRlLmJh Y2tlbmRfb3BzOwogCWludCBvcGVyYW5kc1syXTsKIAlpbnQgcmV0OwogCiAJb3BlcmFuZHNbMF0g PSBpZDsKLQlvcGVyYW5kc1sxXSA9IG9wczsKKwlvcGVyYW5kc1sxXSA9IGRtYWJ1Zl9vcHM7CiAK IAlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CiAKIAloeXBlcl9k bWFidWZfY3JlYXRlX3JlcXVlc3QocmVxLCBIWVBFUl9ETUFCVUZfT1BTX1RPX1NPVVJDRSwgJm9w ZXJhbmRzWzBdKTsKIAogCS8qIHNlbmQgcmVxdWVzdCBhbmQgd2FpdCBmb3IgYSByZXNwb25zZSAq LwotCXJldCA9IGh5cGVyX2RtYWJ1Zl9zZW5kX3JlcXVlc3QoSFlQRVJfRE1BQlVGX0RPTV9JRChp ZCksIHJlcSwgdHJ1ZSk7CisJcmV0ID0gb3BzLT5zZW5kX3JlcShIWVBFUl9ETUFCVUZfRE9NX0lE KGlkKSwgcmVxLCB0cnVlKTsKIAogCWtmcmVlKHJlcSk7CiAKQEAgLTc1Myw2ICszNzAsNyBAQCBz dGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3BzX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1l bnQgKmF0dGFjaG1lbnQsCiBzdGF0aWMgdm9pZCBoeXBlcl9kbWFidWZfb3BzX3JlbGVhc2Uoc3Ry dWN0IGRtYV9idWYgKmRtYV9idWYpCiB7CiAJc3RydWN0IGh5cGVyX2RtYWJ1Zl9pbXBvcnRlZF9z Z3RfaW5mbyAqc2d0X2luZm87CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9iYWNrZW5kX29wcyAqb3Bz ID0gaHlwZXJfZG1hYnVmX3ByaXZhdGUuYmFja2VuZF9vcHM7CiAJaW50IHJldDsKIAlpbnQgZmlu YWxfcmVsZWFzZTsKIApAQCAtNzYxLDE2ICszNzksMjIgQEAgc3RhdGljIHZvaWQgaHlwZXJfZG1h YnVmX29wc19yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKQogCiAJc2d0X2luZm8gPSAo c3RydWN0IGh5cGVyX2RtYWJ1Zl9pbXBvcnRlZF9zZ3RfaW5mbyAqKWRtYV9idWYtPnByaXY7CiAK LQlmaW5hbF9yZWxlYXNlID0gc2d0X2luZm8gJiYgIXNndF9pbmZvLT52YWxpZCAmJgotCQkgICAg ICAgIWRtYWJ1Zl9yZWZjb3VudChzZ3RfaW5mby0+ZG1hX2J1Zik7Ci0KIAlpZiAoIWRtYWJ1Zl9y ZWZjb3VudChzZ3RfaW5mby0+ZG1hX2J1ZikpIHsKIAkJc2d0X2luZm8tPmRtYV9idWYgPSBOVUxM OwogCX0KIAotCWlmIChmaW5hbF9yZWxlYXNlKSB7Ci0JCWh5cGVyX2RtYWJ1Zl9jbGVhbnVwX2lt cG9ydGVkX3BhZ2VzKHNndF9pbmZvKTsKKwlzZ3RfaW5mby0+bnVtX2ltcG9ydGVycy0tOworCisJ aWYgKHNndF9pbmZvLT5udW1faW1wb3J0ZXJzID09IDApIHsKKwkJb3BzLT51bm1hcF9zaGFyZWRf cGFnZXMoJnNndF9pbmZvLT5yZWZzX2luZm8sIHNndF9pbmZvLT5uZW50cyk7CiAJCWh5cGVyX2Rt YWJ1Zl9mcmVlX3NndChzZ3RfaW5mby0+c2d0KTsKKwkJc2d0X2luZm8tPnNndCA9IE5VTEw7CisJ fQorCisJZmluYWxfcmVsZWFzZSA9IHNndF9pbmZvICYmICFzZ3RfaW5mby0+dmFsaWQgJiYKKwkJ ICAgICAgICAhc2d0X2luZm8tPm51bV9pbXBvcnRlcnM7CisKKwlpZiAoZmluYWxfcmVsZWFzZSkg ewogCQlyZXQgPSBoeXBlcl9kbWFidWZfc3luY19yZXF1ZXN0X2FuZF93YWl0KHNndF9pbmZvLT5o eXBlcl9kbWFidWZfaWQsCiAJCQkJCQkJSFlQRVJfRE1BQlVGX09QU19SRUxFQVNFX0ZJTkFMKTsK IAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2Rt YWJ1Zl9pbXAuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfaW1wLmgK aW5kZXggMWIwODAxZi4uYTRhNmQ2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9pbXAuaAorKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlw ZXJfZG1hYnVmX2ltcC5oCkBAIC0xMSwyMCArMTEsNiBAQCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Bh Z2VzX2luZm8gKmh5cGVyX2RtYWJ1Zl9leHRfcGdzKHN0cnVjdCBzZ190YWJsZSAqc2d0KTsKIHN0 cnVjdCBzZ190YWJsZSogaHlwZXJfZG1hYnVmX2NyZWF0ZV9zZ3Qoc3RydWN0IHBhZ2UgKipwYWdl cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZyc3Rfb2ZzdCwgaW50IGxh c3RfbGVuLCBpbnQgbmVudHMpOwogCi1ncmFudF9yZWZfdCBoeXBlcl9kbWFidWZfY3JlYXRlX2dy ZWZfdGFibGUoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHJkb21haW4sIGludCBuZW50cywKLQkJ CQkJICAgc3RydWN0IGh5cGVyX2RtYWJ1Zl9zaGFyZWRfcGFnZXNfaW5mbyAqc2hhcmVkX3BhZ2Vz X2luZm8pOwotCi1pbnQgaHlwZXJfZG1hYnVmX2NsZWFudXBfZ3JlZl90YWJsZShzdHJ1Y3QgaHlw ZXJfZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5mbyk7Ci0KLWludCBoeXBlcl9kbWFidWZfY2xlYW51 cF9pbXBvcnRlZF9wYWdlcyhzdHJ1Y3QgaHlwZXJfZG1hYnVmX2ltcG9ydGVkX3NndF9pbmZvICpz Z3RfaW5mbyk7Ci0KLS8qIG1hcCBmaXJzdCBsZXZlbCB0YWJsZXMgdGhhdCBjb250YWlucyByZWZl cmVuY2UgbnVtYmVycyBmb3IgYWN0dWFsIHNoYXJlZCBwYWdlcyAqLwotZ3JhbnRfcmVmX3QgKmh5 cGVyX2RtYWJ1Zl9tYXBfZ3JlZl90YWJsZShncmFudF9yZWZfdCAqZ3JlZl90YWJsZSwgaW50IG5f cGFnZXNfdGFibGUpOwotCi0vKiBtYXAgYW5kIGNvbnN0cnVjdCBzZ19saXN0cyBmcm9tIHJlZmVy ZW5jZSBudW1iZXJzICovCi1zdHJ1Y3Qgc2dfdGFibGUqIGh5cGVyX2RtYWJ1Zl9tYXBfcGFnZXMo Z3JhbnRfcmVmX3QgZ3JlZiwgaW50IGZyc3Rfb2ZzdCwgaW50IGxhc3RfbGVuLCBpbnQgbmVudHMs IGludCBzZG9tYWluLAotCQkJCQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZv ICpzaGFyZWRfcGFnZXNfaW5mbyk7Ci0KIGludCBoeXBlcl9kbWFidWZfY2xlYW51cF9zZ3RfaW5m byhzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5mbywgaW50IGZvcmNlKTsKIAog dm9pZCBoeXBlcl9kbWFidWZfZnJlZV9zZ3Qoc3RydWN0IHNnX3RhYmxlICpzZ3QpOwpkaWZmIC0t Z2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5jIGIvZHJp dmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0bC5jCmluZGV4IDVjNmQ5Yzgu LjcwMTA3YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFi dWZfaW9jdGwuYworKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX2lv Y3RsLmMKQEAgLTgsNDcgKzgsMzcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlICJoeXBlcl9kbWFidWZfc3RydWN0LmgiCi0jaW5j bHVkZSAiaHlwZXJfZG1hYnVmX2ltcC5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pb2N0bC5o IgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1hYnVm X21zZy5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKICNpbmNsdWRlICJoeXBlcl9k bWFidWZfaWQuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZfaW1wLmgiCiAjaW5jbHVkZSAiaHlw ZXJfZG1hYnVmX3F1ZXJ5LmgiCi0jaW5jbHVkZSAieGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5o IgotI2luY2x1ZGUgInhlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oIgotI2luY2x1ZGUg Imh5cGVyX2RtYWJ1Zl9tc2cuaCIKIAogZXh0ZXJuIHN0cnVjdCBoeXBlcl9kbWFidWZfcHJpdmF0 ZSBoeXBlcl9kbWFidWZfcHJpdmF0ZTsKIAotc3RhdGljIGludCBoeXBlcl9kbWFidWZfZXhwb3J0 ZXJfcmluZ19zZXR1cCh2b2lkICpkYXRhKQorc3RhdGljIGludCBoeXBlcl9kbWFidWZfdHhfY2hf c2V0dXAodm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydGVy X3Jpbmdfc2V0dXAgKnJpbmdfYXR0cjsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19l eHBvcnQgKnJpbmdfaW5mbzsKKwlzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3R4X2NoX3NldHVw ICp0eF9jaF9hdHRyOworCXN0cnVjdCBoeXBlcl9kbWFidWZfYmFja2VuZF9vcHMgKm9wcyA9IGh5 cGVyX2RtYWJ1Zl9wcml2YXRlLmJhY2tlbmRfb3BzOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFk YXRhKSB7CiAJCXByaW50aygidXNlciBkYXRhIGlzIE5VTExcbiIpOwogCQlyZXR1cm4gLTE7CiAJ fQotCXJpbmdfYXR0ciA9IChzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX2V4cG9ydGVyX3Jpbmdf c2V0dXAgKilkYXRhOwotCi0JLyogY2hlY2sgaWYgdGhlIHJpbmcgY2ggYWxyZWFkeSBleGlzdHMg Ki8KLQlyaW5nX2luZm8gPSBoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlcl9yaW5nKHJpbmdfYXR0 ci0+cmVtb3RlX2RvbWFpbik7Ci0KLQlpZiAocmluZ19pbmZvKSB7Ci0JCXByaW50aygiKGV4cG9y dGVyJ3MpIHJpbmcgY2ggdG8gZG9taWQgPSAlZCBhbHJlYWR5IGV4aXN0XG5ncmVmID0gJWQsIHBv cnQgPSAlZFxuIiwKLQkJCXJpbmdfaW5mby0+cmRvbWFpbiwgcmluZ19pbmZvLT5ncmVmX3Jpbmcs IHJpbmdfaW5mby0+cG9ydCk7Ci0JCXJldHVybiAwOwotCX0KKwl0eF9jaF9hdHRyID0gKHN0cnVj dCBpb2N0bF9oeXBlcl9kbWFidWZfdHhfY2hfc2V0dXAgKilkYXRhOwogCi0JcmV0ID0gaHlwZXJf ZG1hYnVmX2V4cG9ydGVyX3JpbmdidWZfaW5pdChyaW5nX2F0dHItPnJlbW90ZV9kb21haW4pOwor CXJldCA9IG9wcy0+aW5pdF90eF9jaCh0eF9jaF9hdHRyLT5yZW1vdGVfZG9tYWluKTsKIAogCXJl dHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2ltcG9ydGVyX3Jpbmdfc2V0 dXAodm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3J4X2NoX3NldHVwKHZvaWQg KmRhdGEpCiB7Ci0Jc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nX3NldHVw ICpzZXR1cF9pbXBfcmluZ19hdHRyOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZvX2lt cG9ydCAqcmluZ19pbmZvOworCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcnhfY2hfc2V0dXAg KnJ4X2NoX2F0dHI7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9iYWNrZW5kX29wcyAqb3BzID0gaHlw ZXJfZG1hYnVmX3ByaXZhdGUuYmFja2VuZF9vcHM7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIWRh dGEpIHsKQEAgLTU2LDE3ICs0Niw5IEBAIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2ltcG9ydGVy X3Jpbmdfc2V0dXAodm9pZCAqZGF0YSkKIAkJcmV0dXJuIC0xOwogCX0KIAotCXNldHVwX2ltcF9y aW5nX2F0dHIgPSAoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nX3NldHVw ICopZGF0YTsKLQotCS8qIGNoZWNrIGlmIHRoZSByaW5nIGNoIGFscmVhZHkgZXhpc3QgKi8KLQly aW5nX2luZm8gPSBoeXBlcl9kbWFidWZfZmluZF9pbXBvcnRlcl9yaW5nKHNldHVwX2ltcF9yaW5n X2F0dHItPnNvdXJjZV9kb21haW4pOworCXJ4X2NoX2F0dHIgPSAoc3RydWN0IGlvY3RsX2h5cGVy X2RtYWJ1Zl9yeF9jaF9zZXR1cCAqKWRhdGE7CiAKLQlpZiAocmluZ19pbmZvKSB7Ci0JCXByaW50 aygiKGltcG9ydGVyJ3MpIHJpbmcgY2ggdG8gZG9taWQgPSAlZCBhbHJlYWR5IGV4aXN0XG4iLCBy aW5nX2luZm8tPnNkb21haW4pOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXQgPSBoeXBlcl9kbWFi dWZfaW1wb3J0ZXJfcmluZ2J1Zl9pbml0KHNldHVwX2ltcF9yaW5nX2F0dHItPnNvdXJjZV9kb21h aW4pOworCXJldCA9IG9wcy0+aW5pdF9yeF9jaChyeF9jaF9hdHRyLT5zb3VyY2VfZG9tYWluKTsK IAogCXJldHVybiByZXQ7CiB9CkBAIC03NCwxMyArNTYsMTQgQEAgc3RhdGljIGludCBoeXBlcl9k bWFidWZfaW1wb3J0ZXJfcmluZ19zZXR1cCh2b2lkICpkYXRhKQogc3RhdGljIGludCBoeXBlcl9k bWFidWZfZXhwb3J0X3JlbW90ZSh2b2lkICpkYXRhKQogewogCXN0cnVjdCBpb2N0bF9oeXBlcl9k bWFidWZfZXhwb3J0X3JlbW90ZSAqZXhwb3J0X3JlbW90ZV9hdHRyOworCXN0cnVjdCBoeXBlcl9k bWFidWZfYmFja2VuZF9vcHMgKm9wcyA9IGh5cGVyX2RtYWJ1Zl9wcml2YXRlLmJhY2tlbmRfb3Bz OwogCXN0cnVjdCBkbWFfYnVmICpkbWFfYnVmOwogCXN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQg KmF0dGFjaG1lbnQ7CiAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CiAJc3RydWN0IGh5cGVyX2RtYWJ1 Zl9wYWdlc19pbmZvICpwYWdlX2luZm87CiAJc3RydWN0IGh5cGVyX2RtYWJ1Zl9zZ3RfaW5mbyAq c2d0X2luZm87Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX3JxICpyZXE7Ci0JaW50IG9wZXJh bmRzWzldOworCXN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXE7CisJaW50IG9wZXJhbmRzW01B WF9OVU1CRVJfT0ZfT1BFUkFORFNdOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFkYXRhKSB7CkBA IC0xMjUsNiArMTA4LDcgQEAgc3RhdGljIGludCBoeXBlcl9kbWFidWZfZXhwb3J0X3JlbW90ZSh2 b2lkICpkYXRhKQogCXNndF9pbmZvID0ga21hbGxvYyhzaXplb2YoKnNndF9pbmZvKSwgR0ZQX0tF Uk5FTCk7CiAKIAlzZ3RfaW5mby0+aHlwZXJfZG1hYnVmX2lkID0gaHlwZXJfZG1hYnVmX2dldF9p ZCgpOworCiAJLyogVE9ETzogV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciB1c2luZyBwb3J0IG51 bWJlciBvbiBldmVudCBjaGFubmVsPyAqLwogCXNndF9pbmZvLT5oeXBlcl9kbWFidWZfcmRvbWFp biA9IGV4cG9ydF9yZW1vdGVfYXR0ci0+cmVtb3RlX2RvbWFpbjsKIAlzZ3RfaW5mby0+ZG1hX2J1 ZiA9IGRtYV9idWY7CkBAIC0xNjMsMTUgKzE0NywxNCBAQCBzdGF0aWMgaW50IGh5cGVyX2RtYWJ1 Zl9leHBvcnRfcmVtb3RlKHZvaWQgKmRhdGEpCiAKIAlleHBvcnRfcmVtb3RlX2F0dHItPmh5cGVy X2RtYWJ1Zl9pZCA9IHNndF9pbmZvLT5oeXBlcl9kbWFidWZfaWQ7CiAKLQkvKiBub3cgY3JlYXRl IHRhYmxlIG9mIGdyZWZzIGZvciBzaGFyZWQgcGFnZXMgYW5kICovCi0KIAkvKiBub3cgY3JlYXRl IHJlcXVlc3QgZm9yIGltcG9ydGVyIHZpYSByaW5nICovCiAJb3BlcmFuZHNbMF0gPSBwYWdlX2lu Zm8tPmh5cGVyX2RtYWJ1Zl9pZDsKIAlvcGVyYW5kc1sxXSA9IHBhZ2VfaW5mby0+bmVudHM7CiAJ b3BlcmFuZHNbMl0gPSBwYWdlX2luZm8tPmZyc3Rfb2ZzdDsKIAlvcGVyYW5kc1szXSA9IHBhZ2Vf aW5mby0+bGFzdF9sZW47Ci0Jb3BlcmFuZHNbNF0gPSBoeXBlcl9kbWFidWZfY3JlYXRlX2dyZWZf dGFibGUocGFnZV9pbmZvLT5wYWdlcywgZXhwb3J0X3JlbW90ZV9hdHRyLT5yZW1vdGVfZG9tYWlu LAotCQkJCQkJICAgICBwYWdlX2luZm8tPm5lbnRzLCAmc2d0X2luZm8tPnNoYXJlZF9wYWdlc19p bmZvKTsKKwlvcGVyYW5kc1s0XSA9IG9wcy0+c2hhcmVfcGFnZXMgKHBhZ2VfaW5mby0+cGFnZXMs IGV4cG9ydF9yZW1vdGVfYXR0ci0+cmVtb3RlX2RvbWFpbiwKKwkJCQkJcGFnZV9pbmZvLT5uZW50 cywgJnNndF9pbmZvLT5yZWZzX2luZm8pOworCiAJLyogZHJpdmVyL2FwcGxpY2F0aW9uIHNwZWNp ZmljIHByaXZhdGUgaW5mbywgbWF4IDMyIGJ5dGVzICovCiAJb3BlcmFuZHNbNV0gPSBleHBvcnRf cmVtb3RlX2F0dHItPnByaXZhdGVbMF07CiAJb3BlcmFuZHNbNl0gPSBleHBvcnRfcmVtb3RlX2F0 dHItPnByaXZhdGVbMV07CkBAIC0xODIsNyArMTY1LDggQEAgc3RhdGljIGludCBoeXBlcl9kbWFi dWZfZXhwb3J0X3JlbW90ZSh2b2lkICpkYXRhKQogCiAJLyogY29tcG9zaW5nIGEgbWVzc2FnZSB0 byB0aGUgaW1wb3J0ZXIgKi8KIAloeXBlcl9kbWFidWZfY3JlYXRlX3JlcXVlc3QocmVxLCBIWVBF Ul9ETUFCVUZfRVhQT1JULCAmb3BlcmFuZHNbMF0pOwotCWlmKGh5cGVyX2RtYWJ1Zl9zZW5kX3Jl cXVlc3QoZXhwb3J0X3JlbW90ZV9hdHRyLT5yZW1vdGVfZG9tYWluLCByZXEsIGZhbHNlKSkKKwor CWlmKG9wcy0+c2VuZF9yZXEoZXhwb3J0X3JlbW90ZV9hdHRyLT5yZW1vdGVfZG9tYWluLCByZXEs IGZhbHNlKSkKIAkJZ290byBmYWlsX3NlbmRfcmVxdWVzdDsKIAogCS8qIGZyZWUgbXNnICovCkBA IC0yMTUsOCArMTk5LDEwIEBAIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9ydF9yZW1vdGUo dm9pZCAqZGF0YSkKIHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX2V4cG9ydF9mZF9pb2N0bCh2b2lk ICpkYXRhKQogewogCXN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0X2ZkICpleHBvcnRf ZmRfYXR0cjsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2ltcG9ydGVkX3NndF9pbmZvICppbXBvcnRl ZF9zZ3RfaW5mbzsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfcnEgKnJlcTsKKwlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX2JhY2tlbmRfb3BzICpvcHMgPSBoeXBlcl9kbWFidWZfcHJpdmF0ZS5iYWNr ZW5kX29wczsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2ltcG9ydGVkX3NndF9pbmZvICpzZ3RfaW5m bzsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxOworCXN0cnVjdCBwYWdlICoqZGF0YV9w YWdlczsKIAlpbnQgb3BlcmFuZDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjI4LDQzICsyMTQsNDgg QEAgc3RhdGljIGludCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkX2lvY3RsKHZvaWQgKmRhdGEpCiAJ ZXhwb3J0X2ZkX2F0dHIgPSAoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl9leHBvcnRfZmQgKilk YXRhOwogCiAJLyogbG9vayBmb3IgZG1hYnVmIGZvciB0aGUgaWQgKi8KLQlpbXBvcnRlZF9zZ3Rf aW5mbyA9IGh5cGVyX2RtYWJ1Zl9maW5kX2ltcG9ydGVkKGV4cG9ydF9mZF9hdHRyLT5oeXBlcl9k bWFidWZfaWQpOwotCWlmIChpbXBvcnRlZF9zZ3RfaW5mbyA9PSBOVUxMKSAvKiBjYW4ndCBmaW5k IHNndCBmcm9tIHRoZSB0YWJsZSAqLworCXNndF9pbmZvID0gaHlwZXJfZG1hYnVmX2ZpbmRfaW1w b3J0ZWQoZXhwb3J0X2ZkX2F0dHItPmh5cGVyX2RtYWJ1Zl9pZCk7CisJaWYgKHNndF9pbmZvID09 IE5VTEwpIC8qIGNhbid0IGZpbmQgc2d0IGZyb20gdGhlIHRhYmxlICovCiAJCXJldHVybiAtMTsK IAogCXByaW50aygiJXMgRm91bmQgYnVmZmVyIGdyZWYgJWQgIG9mZiAlZCBsYXN0IGxlbiAlZCBu ZW50cyAlZCBkb21haW4gJWRcbiIsIF9fZnVuY19fLAotCQlpbXBvcnRlZF9zZ3RfaW5mby0+Z3Jl ZiwgaW1wb3J0ZWRfc2d0X2luZm8tPmZyc3Rfb2ZzdCwKLQkJaW1wb3J0ZWRfc2d0X2luZm8tPmxh c3RfbGVuLCBpbXBvcnRlZF9zZ3RfaW5mby0+bmVudHMsCi0JCUhZUEVSX0RNQUJVRl9ET01fSUQo aW1wb3J0ZWRfc2d0X2luZm8tPmh5cGVyX2RtYWJ1Zl9pZCkpOwotCi0JaWYgKCFpbXBvcnRlZF9z Z3RfaW5mby0+c2d0KSB7Ci0JCWltcG9ydGVkX3NndF9pbmZvLT5zZ3QgPSBoeXBlcl9kbWFidWZf bWFwX3BhZ2VzKGltcG9ydGVkX3NndF9pbmZvLT5ncmVmLAotCQkJCQkJCWltcG9ydGVkX3NndF9p bmZvLT5mcnN0X29mc3QsCi0JCQkJCQkJaW1wb3J0ZWRfc2d0X2luZm8tPmxhc3RfbGVuLAotCQkJ CQkJCWltcG9ydGVkX3NndF9pbmZvLT5uZW50cywKLQkJCQkJCQlIWVBFUl9ETUFCVUZfRE9NX0lE KGltcG9ydGVkX3NndF9pbmZvLT5oeXBlcl9kbWFidWZfaWQpLAotCQkJCQkJCSZpbXBvcnRlZF9z Z3RfaW5mby0+c2hhcmVkX3BhZ2VzX2luZm8pOwotCi0JCS8qIHNlbmQgbm90aWZpdGljYXRpbyBm b3IgZmlyc3QgZXhwb3J0X2ZkIHRvIGV4cG9ydGVyICovCi0JCW9wZXJhbmQgPSBpbXBvcnRlZF9z Z3RfaW5mby0+aHlwZXJfZG1hYnVmX2lkOwotCQlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZigqcmVx KSwgR0ZQX0tFUk5FTCk7Ci0JCWh5cGVyX2RtYWJ1Zl9jcmVhdGVfcmVxdWVzdChyZXEsIEhZUEVS X0RNQUJVRl9GSVJTVF9FWFBPUlQsICZvcGVyYW5kKTsKLQotCQlyZXQgPSBoeXBlcl9kbWFidWZf c2VuZF9yZXF1ZXN0KEhZUEVSX0RNQUJVRl9ET01fSUQob3BlcmFuZCksIHJlcSwgZmFsc2UpOwot Ci0JCWlmICghaW1wb3J0ZWRfc2d0X2luZm8tPnNndCB8fCByZXQpIHsKLQkJCWtmcmVlKHJlcSk7 Ci0JCQlwcmludGsoIkZhaWxlZCB0byBjcmVhdGUgc2d0IG9yIG5vdGlmeSBleHBvcnRlclxuIik7 Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQlzZ3RfaW5mby0+cmVmX2hhbmRsZSwgc2d0X2lu Zm8tPmZyc3Rfb2ZzdCwKKwkJc2d0X2luZm8tPmxhc3RfbGVuLCBzZ3RfaW5mby0+bmVudHMsCisJ CUhZUEVSX0RNQUJVRl9ET01fSUQoc2d0X2luZm8tPmh5cGVyX2RtYWJ1Zl9pZCkpOworCisJaWYg KCFzZ3RfaW5mby0+c2d0KSB7CisJCWRhdGFfcGFnZXMgPSBvcHMtPm1hcF9zaGFyZWRfcGFnZXMo c2d0X2luZm8tPnJlZl9oYW5kbGUsCisJCQkJCQkgICBIWVBFUl9ETUFCVUZfRE9NX0lEKHNndF9p bmZvLT5oeXBlcl9kbWFidWZfaWQpLAorCQkJCQkJICAgc2d0X2luZm8tPm5lbnRzLAorCQkJCQkJ ICAgJnNndF9pbmZvLT5yZWZzX2luZm8pOworCisJCXNndF9pbmZvLT5zZ3QgPSBoeXBlcl9kbWFi dWZfY3JlYXRlX3NndChkYXRhX3BhZ2VzLCBzZ3RfaW5mby0+ZnJzdF9vZnN0LAorCQkJCQkJCXNn dF9pbmZvLT5sYXN0X2xlbiwgc2d0X2luZm8tPm5lbnRzKTsKKworCX0KKworCS8qIHNlbmQgbm90 aWZpY2F0aW9uIGZvciBleHBvcnRfZmQgdG8gZXhwb3J0ZXIgKi8KKwlvcGVyYW5kID0gc2d0X2lu Zm8tPmh5cGVyX2RtYWJ1Zl9pZDsKKworCXJlcSA9IGtjYWxsb2MoMSwgc2l6ZW9mKCpyZXEpLCBH RlBfS0VSTkVMKTsKKwloeXBlcl9kbWFidWZfY3JlYXRlX3JlcXVlc3QocmVxLCBIWVBFUl9ETUFC VUZfRklSU1RfRVhQT1JULCAmb3BlcmFuZCk7CisKKwlyZXQgPSBvcHMtPnNlbmRfcmVxKEhZUEVS X0RNQUJVRl9ET01fSUQob3BlcmFuZCksIHJlcSwgZmFsc2UpOworCisJaWYgKCFzZ3RfaW5mby0+ c2d0IHx8IHJldCkgewogCQlrZnJlZShyZXEpOworCQlwcmludGsoIkZhaWxlZCB0byBjcmVhdGUg c2d0IG9yIG5vdGlmeSBleHBvcnRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KKwlrZnJl ZShyZXEpOwogCi0JZXhwb3J0X2ZkX2F0dHItPmZkID0gaHlwZXJfZG1hYnVmX2V4cG9ydF9mZChp bXBvcnRlZF9zZ3RfaW5mbywgZXhwb3J0X2ZkX2F0dHItPmZsYWdzKTsKKwlleHBvcnRfZmRfYXR0 ci0+ZmQgPSBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkKHNndF9pbmZvLCBleHBvcnRfZmRfYXR0ci0+ ZmxhZ3MpOwogCiAJaWYgKGV4cG9ydF9mZF9hdHRyLT5mZCA8IDApIHsKIAkJLyogZmFpbCB0byBn ZXQgZmQgKi8KIAkJcmV0ID0gZXhwb3J0X2ZkX2F0dHItPmZkOworCX0gZWxzZSB7CisJCXNndF9p bmZvLT5udW1faW1wb3J0ZXJzKys7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTI3Niw4ICsyNjcs OSBAQCBzdGF0aWMgaW50IGh5cGVyX2RtYWJ1Zl9leHBvcnRfZmRfaW9jdGwodm9pZCAqZGF0YSkK IHN0YXRpYyBpbnQgaHlwZXJfZG1hYnVmX3VuZXhwb3J0KHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0 IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCAqdW5leHBvcnRfYXR0cjsKKwlzdHJ1Y3QgaHlw ZXJfZG1hYnVmX2JhY2tlbmRfb3BzICpvcHMgPSBoeXBlcl9kbWFidWZfcHJpdmF0ZS5iYWNrZW5k X29wczsKIAlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3NndF9pbmZvICpzZ3RfaW5mbzsKLQlzdHJ1Y3Qg aHlwZXJfZG1hYnVmX3JpbmdfcnEgKnJlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVx OwogCWludCByZXQ7CiAKIAlpZiAoIWRhdGEpIHsKQEAgLTMwMSw3ICsyOTMsNyBAQCBzdGF0aWMg aW50IGh5cGVyX2RtYWJ1Zl91bmV4cG9ydCh2b2lkICpkYXRhKQogCWh5cGVyX2RtYWJ1Zl9jcmVh dGVfcmVxdWVzdChyZXEsIEhZUEVSX0RNQUJVRl9OT1RJRllfVU5FWFBPUlQsICZ1bmV4cG9ydF9h dHRyLT5oeXBlcl9kbWFidWZfaWQpOwogCiAJLyogTm93IHNlbmQgdW5leHBvcnQgcmVxdWVzdCB0 byByZW1vdGUgZG9tYWluLCBtYXJraW5nIHRoYXQgYnVmZmVyIHNob3VsZCBub3QgYmUgdXNlZCBh bnltb3JlICovCi0JcmV0ID0gaHlwZXJfZG1hYnVmX3NlbmRfcmVxdWVzdChzZ3RfaW5mby0+aHlw ZXJfZG1hYnVmX3Jkb21haW4sIHJlcSwgdHJ1ZSk7CisJcmV0ID0gb3BzLT5zZW5kX3JlcShzZ3Rf aW5mby0+aHlwZXJfZG1hYnVmX3Jkb21haW4sIHJlcSwgdHJ1ZSk7CiAJaWYgKHJldCA8IDApIHsK IAkJa2ZyZWUocmVxKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00MDUsOCArMzk3LDggQEAgc3Rh dGljIGludCBoeXBlcl9kbWFidWZfcXVlcnkodm9pZCAqZGF0YSkKIH0KIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBoeXBlcl9kbWFidWZfaW9jdGxfZGVzYyBoeXBlcl9kbWFidWZfaW9jdGxzW10gPSB7 Ci0JSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihJT0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JURVJfUklO R19TRVRVUCwgaHlwZXJfZG1hYnVmX2V4cG9ydGVyX3Jpbmdfc2V0dXAsIDApLAotCUhZUEVSX0RN QUJVRl9JT0NUTF9ERUYoSU9DVExfSFlQRVJfRE1BQlVGX0lNUE9SVEVSX1JJTkdfU0VUVVAsIGh5 cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nX3NldHVwLCAwKSwKKwlIWVBFUl9ETUFCVUZfSU9DVExf REVGKElPQ1RMX0hZUEVSX0RNQUJVRl9UWF9DSF9TRVRVUCwgaHlwZXJfZG1hYnVmX3R4X2NoX3Nl dHVwLCAwKSwKKwlIWVBFUl9ETUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9SWF9D SF9TRVRVUCwgaHlwZXJfZG1hYnVmX3J4X2NoX3NldHVwLCAwKSwKIAlIWVBFUl9ETUFCVUZfSU9D VExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9FWFBPUlRfUkVNT1RFLCBoeXBlcl9kbWFidWZfZXhw b3J0X3JlbW90ZSwgMCksCiAJSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihJT0NUTF9IWVBFUl9ETUFC VUZfRVhQT1JUX0ZELCBoeXBlcl9kbWFidWZfZXhwb3J0X2ZkX2lvY3RsLCAwKSwKIAlIWVBFUl9E TUFCVUZfSU9DVExfREVGKElPQ1RMX0hZUEVSX0RNQUJVRl9VTkVYUE9SVCwgaHlwZXJfZG1hYnVm X3VuZXhwb3J0LCAwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBl cl9kbWFidWZfaW9jdGwuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZf aW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIxNmQzCi0tLSAv ZGV2L251bGwKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9pb2N0 bC5oCkBAIC0wLDAgKzEsODcgQEAKKyNpZm5kZWYgX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVG X0lPQ1RMX0hfXworI2RlZmluZSBfX0xJTlVYX1BVQkxJQ19IWVBFUl9ETUFCVUZfSU9DVExfSF9f CisKK3R5cGVkZWYgaW50ICgqaHlwZXJfZG1hYnVmX2lvY3RsX3QpKHZvaWQgKmRhdGEpOworCitz dHJ1Y3QgaHlwZXJfZG1hYnVmX2lvY3RsX2Rlc2MgeworCXVuc2lnbmVkIGludCBjbWQ7CisJaW50 IGZsYWdzOworCWh5cGVyX2RtYWJ1Zl9pb2N0bF90IGZ1bmM7CisJY29uc3QgY2hhciAqbmFtZTsK K307CisKKyNkZWZpbmUgSFlQRVJfRE1BQlVGX0lPQ1RMX0RFRihpb2N0bCwgX2Z1bmMsIF9mbGFn cykgCVwKKwlbX0lPQ19OUihpb2N0bCldID0gewkJCQlcCisJCQkuY21kID0gaW9jdGwsCQkJXAor CQkJLmZ1bmMgPSBfZnVuYywJCQlcCisJCQkuZmxhZ3MgPSBfZmxhZ3MsCQlcCisJCQkubmFtZSA9 ICNpb2N0bAkJCVwKKwl9CisKKyNkZWZpbmUgSU9DVExfSFlQRVJfRE1BQlVGX1RYX0NIX1NFVFVQ IFwKK19JT0MoX0lPQ19OT05FLCAnRycsIDAsIHNpemVvZihzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1h YnVmX3R4X2NoX3NldHVwKSkKK3N0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfdHhfY2hfc2V0dXAg eworCS8qIElOIHBhcmFtZXRlcnMgKi8KKwkvKiBSZW1vdGUgZG9tYWluIGlkICovCisJaW50IHJl bW90ZV9kb21haW47Cit9OworCisjZGVmaW5lIElPQ1RMX0hZUEVSX0RNQUJVRl9SWF9DSF9TRVRV UCBcCitfSU9DKF9JT0NfTk9ORSwgJ0cnLCAxLCBzaXplb2Yoc3RydWN0IGlvY3RsX2h5cGVyX2Rt YWJ1Zl9yeF9jaF9zZXR1cCkpCitzdHJ1Y3QgaW9jdGxfaHlwZXJfZG1hYnVmX3J4X2NoX3NldHVw IHsKKwkvKiBJTiBwYXJhbWV0ZXJzICovCisJLyogU291cmNlIGRvbWFpbiBpZCAqLworCWludCBz b3VyY2VfZG9tYWluOworfTsKKworI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFCVUZfRVhQT1JUX1JF TU9URSBcCitfSU9DKF9JT0NfTk9ORSwgJ0cnLCAyLCBzaXplb2Yoc3RydWN0IGlvY3RsX2h5cGVy X2RtYWJ1Zl9leHBvcnRfcmVtb3RlKSkKK3N0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0 X3JlbW90ZSB7CisJLyogSU4gcGFyYW1ldGVycyAqLworCS8qIERNQSBidWYgZmQgdG8gYmUgZXhw b3J0ZWQgKi8KKwlpbnQgZG1hYnVmX2ZkOworCS8qIERvbWFpbiBpZCB0byB3aGljaCBidWZmZXIg c2hvdWxkIGJlIGV4cG9ydGVkICovCisJaW50IHJlbW90ZV9kb21haW47CisJLyogZXhwb3J0ZWQg ZG1hIGJ1ZiBpZCAqLworCWludCBoeXBlcl9kbWFidWZfaWQ7CisJaW50IHByaXZhdGVbNF07Cit9 OworCisjZGVmaW5lIElPQ1RMX0hZUEVSX0RNQUJVRl9FWFBPUlRfRkQgXAorX0lPQyhfSU9DX05P TkUsICdHJywgMywgc2l6ZW9mKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0X2ZkKSkK K3N0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfZXhwb3J0X2ZkIHsKKwkvKiBJTiBwYXJhbWV0ZXJz ICovCisJLyogaHlwZXIgZG1hYnVmIGlkIHRvIGJlIGltcG9ydGVkICovCisJaW50IGh5cGVyX2Rt YWJ1Zl9pZDsKKwkvKiBmbGFncyAqLworCWludCBmbGFnczsKKwkvKiBPVVQgcGFyYW1ldGVycyAq LworCS8qIGV4cG9ydGVkIGRtYSBidWYgZmQgKi8KKwlpbnQgZmQ7Cit9OworCisjZGVmaW5lIElP Q1RMX0hZUEVSX0RNQUJVRl9VTkVYUE9SVCBcCitfSU9DKF9JT0NfTk9ORSwgJ0cnLCA0LCBzaXpl b2Yoc3RydWN0IGlvY3RsX2h5cGVyX2RtYWJ1Zl91bmV4cG9ydCkpCitzdHJ1Y3QgaW9jdGxfaHlw ZXJfZG1hYnVmX3VuZXhwb3J0IHsKKwkvKiBJTiBwYXJhbWV0ZXJzICovCisJLyogaHlwZXIgZG1h YnVmIGlkIHRvIGJlIHVuZXhwb3J0ZWQgKi8KKwlpbnQgaHlwZXJfZG1hYnVmX2lkOworCS8qIE9V VCBwYXJhbWV0ZXJzICovCisJLyogU3RhdHVzIG9mIHJlcXVlc3QgKi8KKwlpbnQgc3RhdHVzOwor fTsKKworI2RlZmluZSBJT0NUTF9IWVBFUl9ETUFCVUZfUVVFUlkgXAorX0lPQyhfSU9DX05PTkUs ICdHJywgNSwgc2l6ZW9mKHN0cnVjdCBpb2N0bF9oeXBlcl9kbWFidWZfcXVlcnkpKQorc3RydWN0 IGlvY3RsX2h5cGVyX2RtYWJ1Zl9xdWVyeSB7CisJLyogaW4gcGFyYW1ldGVycyAqLworCS8qIGh5 cGVyIGRtYWJ1ZiBpZCB0byBiZSBxdWVyaWVkICovCisJaW50IGh5cGVyX2RtYWJ1Zl9pZDsKKwkv KiBpdGVtIHRvIGJlIHF1ZXJpZWQgKi8KKwlpbnQgaXRlbTsKKwkvKiBPVVQgcGFyYW1ldGVycyAq LworCS8qIFZhbHVlIG9mIHF1ZXJpZWQgaXRlbSAqLworCWludCBpbmZvOworfTsKKworI2VuZGlm IC8vX19MSU5VWF9QVUJMSUNfSFlQRVJfRE1BQlVGX0RSVl9IX18KZGlmZiAtLWdpdCBhL2RyaXZl cnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMgYi9kcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5jCmluZGV4IGEyZDY4N2YuLjQ2NDcxMTUgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmMKKysrIGIv ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuYwpAQCAtNSwxMSArNSwx MCBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KICNpbmNsdWRlIDx4ZW4vZ3JhbnRfdGFi bGUuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlICJoeXBlcl9kbWFi dWZfbXNnLmgiCiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX2Rydi5oIgogI2luY2x1ZGUgImh5cGVy X2RtYWJ1Zl9pbXAuaCIKICNpbmNsdWRlICJoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuaCIKLSNp bmNsdWRlICJ4ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgiCi0jaW5jbHVkZSAiaHlwZXJfZG1h YnVmX21zZy5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCiAKICNkZWZpbmUgRk9S Q0VEX1VORVhQT1JUSU5HIDAKQEAgLTE4LDE4ICsxNywxNyBAQCBleHRlcm4gc3RydWN0IGh5cGVy X2RtYWJ1Zl9wcml2YXRlIGh5cGVyX2RtYWJ1Zl9wcml2YXRlOwogCiBzdHJ1Y3QgY21kX3Byb2Nl c3MgewogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmlu Z19ycSAqcnE7CisJc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJxOwogCWludCBkb21pZDsKIH07 CiAKLXZvaWQgaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoeXBlcl9kbWFidWZf cmluZ19ycSAqcmVxdWVzdCwKLQkJCQkgICAgICAgIGVudW0gaHlwZXJfZG1hYnVmX2NvbW1hbmQg Y29tbWFuZCwgaW50ICpvcGVyYW5kcykKK3ZvaWQgaHlwZXJfZG1hYnVmX2NyZWF0ZV9yZXF1ZXN0 KHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEsCisJCQkJIGVudW0gaHlwZXJfZG1hYnVmX2Nv bW1hbmQgY29tbWFuZCwgaW50ICpvcGVyYW5kcykKIHsKIAlpbnQgaTsKIAotCXJlcXVlc3QtPnJl cXVlc3RfaWQgPSBoeXBlcl9kbWFidWZfbmV4dF9yZXFfaWRfZXhwb3J0KCk7Ci0JcmVxdWVzdC0+ c3RhdHVzID0gSFlQRVJfRE1BQlVGX1JFUV9OT1RfUkVTUE9OREVEOwotCXJlcXVlc3QtPmNvbW1h bmQgPSBjb21tYW5kOworCXJlcS0+c3RhdHVzID0gSFlQRVJfRE1BQlVGX1JFUV9OT1RfUkVTUE9O REVEOworCXJlcS0+Y29tbWFuZCA9IGNvbW1hbmQ7CiAKIAlzd2l0Y2goY29tbWFuZCkgewogCS8q IGFzIGV4cG9ydGVyLCBjb21tYW5kcyB0byBpbXBvcnRlciAqLwpAQCAtNDQsNyArNDIsNyBAQCB2 b2lkIGh5cGVyX2RtYWJ1Zl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jpbmdf cnEgKnJlcXVlc3QsCiAJCSAqIG9wZXJhbmRzNX44IDogRHJpdmVyLXNwZWNpZmljIHByaXZhdGUg ZGF0YSAoZS5nLiBncmFwaGljIGJ1ZmZlcidzIG1ldGEgaW5mbykKIAkJICovCiAJCWZvciAoaT0w OyBpIDwgODsgaSsrKQotCQkJcmVxdWVzdC0+b3BlcmFuZHNbaV0gPSBvcGVyYW5kc1tpXTsKKwkJ CXJlcS0+b3BlcmFuZHNbaV0gPSBvcGVyYW5kc1tpXTsKIAkJYnJlYWs7CiAKIAljYXNlIEhZUEVS X0RNQUJVRl9OT1RJRllfVU5FWFBPUlQ6CkBAIC01Miw3ICs1MCw3IEBAIHZvaWQgaHlwZXJfZG1h YnVmX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSAqcmVxdWVzdCwK IAkJLyogY29tbWFuZCA6IERNQUJVRl9ERVNUUk9ZLAogCQkgKiBvcGVyYW5kczAgOiBoeXBlcl9k bWFidWZfaWQKIAkJICovCi0JCXJlcXVlc3QtPm9wZXJhbmRzWzBdID0gb3BlcmFuZHNbMF07CisJ CXJlcS0+b3BlcmFuZHNbMF0gPSBvcGVyYW5kc1swXTsKIAkJYnJlYWs7CiAKIAljYXNlIEhZUEVS X0RNQUJVRl9GSVJTVF9FWFBPUlQ6CkBAIC02MCw3ICs1OCw3IEBAIHZvaWQgaHlwZXJfZG1hYnVm X2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSAqcmVxdWVzdCwKIAkJ LyogY29tbWFuZCA6IEhZUEVSX0RNQUJVRl9GSVJTVF9FWFBPUlQsCiAJCSAqIG9wZXJhbmRzMCA6 IGh5cGVyX2RtYWJ1Zl9pZAogCQkgKi8KLQkJcmVxdWVzdC0+b3BlcmFuZHNbMF0gPSBvcGVyYW5k c1swXTsKKwkJcmVxLT5vcGVyYW5kc1swXSA9IG9wZXJhbmRzWzBdOwogCQlicmVhazsKIAogCWNh c2UgSFlQRVJfRE1BQlVGX09QU19UT19SRU1PVEU6CkBAIC03Nyw3ICs3NSw3IEBAIHZvaWQgaHlw ZXJfZG1hYnVmX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSAqcmVx dWVzdCwKIAkJICogb3BlcmFuZHMxIDogbWFwKD0xKS91bm1hcCg9MikvYXR0YWNoKD0zKS9kZXRh Y2goPTQpCiAJCSAqLwogCQlmb3IgKGk9MDsgaTwyOyBpKyspCi0JCQlyZXF1ZXN0LT5vcGVyYW5k c1tpXSA9IG9wZXJhbmRzW2ldOworCQkJcmVxLT5vcGVyYW5kc1tpXSA9IG9wZXJhbmRzW2ldOwog CQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC04OCwxMCArODYsMTAgQEAgdm9pZCBoeXBlcl9kbWFi dWZfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX3JxICpyZXF1ZXN0LAog CiB2b2lkIGNtZF9wcm9jZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0 cnVjdCBoeXBlcl9kbWFidWZfaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkX3NndF9pbmZvOwog CXN0cnVjdCBoeXBlcl9kbWFidWZfc2d0X2luZm8gKnNndF9pbmZvOworCXN0cnVjdCBoeXBlcl9k bWFidWZfaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkX3NndF9pbmZvOwogCXN0cnVjdCBjbWRf cHJvY2VzcyAqcHJvYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY21kX3Byb2Nlc3MsIHdv cmspOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSAqcmVxOworCXN0cnVjdCBoeXBlcl9k bWFidWZfcmVxICpyZXE7CiAJaW50IGRvbWlkOwogCWludCBpOwogCkBAIC0xMTQsNyArMTEyLDcg QEAgdm9pZCBjbWRfcHJvY2Vzc193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJaW1w b3J0ZWRfc2d0X2luZm8tPmZyc3Rfb2ZzdCA9IHJlcS0+b3BlcmFuZHNbMl07CiAJCWltcG9ydGVk X3NndF9pbmZvLT5sYXN0X2xlbiA9IHJlcS0+b3BlcmFuZHNbM107CiAJCWltcG9ydGVkX3NndF9p bmZvLT5uZW50cyA9IHJlcS0+b3BlcmFuZHNbMV07Ci0JCWltcG9ydGVkX3NndF9pbmZvLT5ncmVm ID0gcmVxLT5vcGVyYW5kc1s0XTsKKwkJaW1wb3J0ZWRfc2d0X2luZm8tPnJlZl9oYW5kbGUgPSBy ZXEtPm9wZXJhbmRzWzRdOwogCiAJCXByaW50aygiRE1BQlVGIHdhcyBleHBvcnRlZFxuIik7CiAJ CXByaW50aygiXHRoeXBlcl9kbWFidWZfaWQgJWRcbiIsIHJlcS0+b3BlcmFuZHNbMF0pOwpAQCAt MTM5LDEwICsxMzcsNyBAQCB2b2lkIGNtZF9wcm9jZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoc2d0X2luZm8tPmltcG9ydGVyX2V4cG9y dGVkKQotCQkJcHJpbnRrKCJ3YXJuaW5nOiBleHBvcnRlZCBmbGFnIGlzIG5vdCBzdXBwb3NlZCB0 byBiZSAxIGFscmVhZHlcbiIpOwotCi0JCXNndF9pbmZvLT5pbXBvcnRlcl9leHBvcnRlZCA9IDE7 CisJCXNndF9pbmZvLT5pbXBvcnRlcl9leHBvcnRlZCsrOwogCQlicmVhazsKIAogCWNhc2UgSFlQ RVJfRE1BQlVGX09QU19UT19SRU1PVEU6CkBAIC0xNjAsMTEgKzE1NSwxMSBAQCB2b2lkIGNtZF9w cm9jZXNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCWtmcmVlKHByb2MpOwogfQog Ci1pbnQgaHlwZXJfZG1hYnVmX21zZ19wYXJzZShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFi dWZfcmluZ19ycSAqcmVxKQoraW50IGh5cGVyX2RtYWJ1Zl9tc2dfcGFyc2UoaW50IGRvbWlkLCBz dHJ1Y3QgaHlwZXJfZG1hYnVmX3JlcSAqcmVxKQogewogCXN0cnVjdCBjbWRfcHJvY2VzcyAqcHJv YzsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfcnEgKnRlbXBfcmVxOwotCXN0cnVjdCBoeXBl cl9kbWFidWZfaW1wb3J0ZWRfc2d0X2luZm8gKmltcG9ydGVkX3NndF9pbmZvOworCXN0cnVjdCBo eXBlcl9kbWFidWZfcmVxICp0ZW1wX3JlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX2ltcG9ydGVk X3NndF9pbmZvICpzZ3RfaW5mbzsKIAlpbnQgcmV0OwogCiAJaWYgKCFyZXEpIHsKQEAgLTE4OSwy MiArMTg0LDIxIEBAIGludCBoeXBlcl9kbWFidWZfbXNnX3BhcnNlKGludCBkb21pZCwgc3RydWN0 IGh5cGVyX2RtYWJ1Zl9yaW5nX3JxICpyZXEpCiAJCSAqIG9wZXJhbmRzMCA6IGh5cGVyX2RtYWJ1 Zl9pZAogCQkgKi8KIAotCQlpbXBvcnRlZF9zZ3RfaW5mbyA9Ci0JCQloeXBlcl9kbWFidWZfZmlu ZF9pbXBvcnRlZChyZXEtPm9wZXJhbmRzWzBdKTsKKwkJc2d0X2luZm8gPSBoeXBlcl9kbWFidWZf ZmluZF9pbXBvcnRlZChyZXEtPm9wZXJhbmRzWzBdKTsKIAotCQlpZiAoaW1wb3J0ZWRfc2d0X2lu Zm8pIHsKKwkJaWYgKHNndF9pbmZvKSB7CiAJCQkvKiBpZiBhbnl0aGluZyBpcyBzdGlsbCB1c2lu ZyBkbWFfYnVmICovCi0JCQlpZiAoaW1wb3J0ZWRfc2d0X2luZm8tPmRtYV9idWYgJiYKLQkJCSAg ICBkbWFidWZfcmVmY291bnQoaW1wb3J0ZWRfc2d0X2luZm8tPmRtYV9idWYpID4gMCkgeworCQkJ aWYgKHNndF9pbmZvLT5kbWFfYnVmICYmCisJCQkgICAgZG1hYnVmX3JlZmNvdW50KHNndF9pbmZv LT5kbWFfYnVmKSA+IDApIHsKIAkJCQkvKgogCQkJCSAqIEJ1ZmZlciBpcyBzdGlsbCBpbiAgdXNl LCBqdXN0IG1hcmsgdGhhdCBpdCBzaG91bGQKIAkJCQkgKiBub3QgYmUgYWxsb3dlZCB0byBleHBv cnQgaXRzIGZkIGFueW1vcmUuCiAJCQkJICovCi0JCQkJaW1wb3J0ZWRfc2d0X2luZm8tPnZhbGlk ID0gMDsKKwkJCQlzZ3RfaW5mby0+dmFsaWQgPSAwOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBObyBv bmUgaXMgdXNpbmcgYnVmZmVyLCByZW1vdmUgaXQgZnJvbSBpbXBvcnRlZCBsaXN0ICovCiAJCQkJ aHlwZXJfZG1hYnVmX3JlbW92ZV9pbXBvcnRlZChyZXEtPm9wZXJhbmRzWzBdKTsKLQkJCQlrZnJl ZShpbXBvcnRlZF9zZ3RfaW5mbyk7CisJCQkJa2ZyZWUoc2d0X2luZm8pOwogCQkJfQogCQl9IGVs c2UgewogCQkJcmVxLT5zdGF0dXMgPSBIWVBFUl9ETUFCVUZfUkVRX0VSUk9SOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cuaCBiL2RyaXZlcnMv eGVuL2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfbXNnLmgKaW5kZXggMWU5ZDgyNy4uYWM0Y2Fl YiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9tc2cu aAorKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX21zZy5oCkBAIC0x LDYgKzEsMjIgQEAKICNpZm5kZWYgX19IWVBFUl9ETUFCVUZfTVNHX0hfXwogI2RlZmluZSBfX0hZ UEVSX0RNQUJVRl9NU0dfSF9fCiAKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9PUEVSQU5EUyA5CisK K3N0cnVjdCBoeXBlcl9kbWFidWZfcmVxIHsKKwl1bnNpZ25lZCBpbnQgcmVxdWVzdF9pZDsKKwl1 bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBjb21tYW5kOworCXVuc2lnbmVkIGlu dCBvcGVyYW5kc1tNQVhfTlVNQkVSX09GX09QRVJBTkRTXTsKK307CisKK3N0cnVjdCBoeXBlcl9k bWFidWZfcmVzcCB7CisJdW5zaWduZWQgaW50IHJlc3BvbnNlX2lkOworCXVuc2lnbmVkIGludCBz dGF0dXM7CisJdW5zaWduZWQgaW50IGNvbW1hbmQ7CisJdW5zaWduZWQgaW50IG9wZXJhbmRzW01B WF9OVU1CRVJfT0ZfT1BFUkFORFNdOworfTsKKwogZW51bSBoeXBlcl9kbWFidWZfY29tbWFuZCB7 CiAJSFlQRVJfRE1BQlVGX0VYUE9SVCA9IDB4MTAsCiAJSFlQRVJfRE1BQlVGX0ZJUlNUX0VYUE9S VCwKQEAgLTM1LDEwICs1MSwxMSBAQCBlbnVtIGh5cGVyX2RtYWJ1Zl9yZXFfZmVlZGJhY2sgewog fTsKIAogLyogY3JlYXRlIGEgcmVxdWVzdCBwYWNrZXQgd2l0aCBnaXZlbiBjb21tYW5kIGFuZCBv cGVyYW5kcyAqLwotdm9pZCBoeXBlcl9kbWFidWZfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGh5cGVy X2RtYWJ1Zl9yaW5nX3JxICpyZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVudW0gaHlwZXJfZG1hYnVmX2NvbW1hbmQgY29tbWFuZCwgaW50ICpvcGVyYW5k cyk7Cit2b2lkIGh5cGVyX2RtYWJ1Zl9jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgaHlwZXJfZG1hYnVm X3JlcSAqcmVxLAorCQkJCSBlbnVtIGh5cGVyX2RtYWJ1Zl9jb21tYW5kIGNvbW1hbmQsCisJCQkJ IGludCAqb3BlcmFuZHMpOwogCiAvKiBwYXJzZSBpbmNvbWluZyByZXF1ZXN0IHBhY2tldCAob3Ig cmVzcG9uc2UpIGFuZCB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbnMgZm9yIHRob3NlICovCi1pbnQg aHlwZXJfZG1hYnVmX21zZ19wYXJzZShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmlu Z19ycSAqcmVxKTsKK2ludCBoeXBlcl9kbWFidWZfbXNnX3BhcnNlKGludCBkb21pZCwgc3RydWN0 IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSk7CiAKICNlbmRpZiAvLyBfX0hZUEVSX0RNQUJVRl9NU0df SF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3Jl bW90ZV9zeW5jLmMgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3JlbW90 ZV9zeW5jLmMKaW5kZXggYzU5NTBlMC4uMGY0NzM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4v aHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9yZW1vdGVfc3luYy5jCisrKyBiL2RyaXZlcnMveGVu L2h5cGVyX2RtYWJ1Zi9oeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMuYwpAQCAtNSw5ICs1LDkgQEAK ICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+CiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3N0cnVj dC5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9saXN0LmgiCisjaW5jbHVkZSAiaHlwZXJfZG1h YnVmX21zZy5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9kcnYuaCIKICNpbmNsdWRlICJoeXBl cl9kbWFidWZfaWQuaCIKLSNpbmNsdWRlICJ4ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgiCiAj aW5jbHVkZSAiaHlwZXJfZG1hYnVmX21zZy5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl9pbXAu aCIKIApAQCAtMTMzLDYgKzEzMyw4IEBAIGludCBoeXBlcl9kbWFidWZfcmVtb3RlX3N5bmMoaW50 IGlkLCBpbnQgb3BzKQogCiAJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX1JFTEVBU0U6CiAJCS8qIHBs YWNlIGhvbGRlciAqLworICAgICAgICAgICAgICAgIHNndF9pbmZvLT5pbXBvcnRlcl9leHBvcnRl ZC0tOworCiAJCWJyZWFrOwogCiAJY2FzZSBIWVBFUl9ETUFCVUZfT1BTX0JFR0lOX0NQVV9BQ0NF U1M6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYvaHlwZXJfZG1hYnVmX3N0 cnVjdC5oIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL2h5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaApp bmRleCBiNTJmOTU4Li5mMDUzZGQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1h YnVmL2h5cGVyX2RtYWJ1Zl9zdHJ1Y3QuaAorKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYv aHlwZXJfZG1hYnVmX3N0cnVjdC5oCkBAIC0xLDE0ICsxLDYgQEAKICNpZm5kZWYgX19IWVBFUl9E TUFCVUZfU1RSVUNUX0hfXwogI2RlZmluZSBfX0hZUEVSX0RNQUJVRl9TVFJVQ1RfSF9fCiAKLSNp bmNsdWRlIDx4ZW4vaW50ZXJmYWNlL2dyYW50X3RhYmxlLmg+Ci0KLS8qIGVhY2ggZ3JhbnRfcmVm X3QgaXMgNCBieXRlcywgc28gdG90YWwgNDA5NiBncmFudF9yZWZfdCBjYW4gYmUKLSAqIGluIHRo aXMgYmxvY2sgbWVhbmluZyB3ZSBjYW4gc2hhcmUgNEtCKjQwOTYgPSAxNk1CIG9mIGJ1ZmZlcgot ICogKG5lZWRzIHRvIGJlIGluY3JlYXNlZCBmb3IgbGFyZ2UgYnVmZmVyIHVzZS1jYXNlcyBzdWNo IGFzIDRLCi0gKiBmcmFtZSBidWZmZXIpICovCi0jZGVmaW5lIE1BWF9BTExPV0VEX05VTV9QQUdF U19GT1JfR1JFRl9OVU1fQVJSQVlTIDQKLQogLyogc3RhY2sgb2YgbWFwcGVkIHNndHMgKi8KIHN0 cnVjdCBzZ3RfbGlzdCB7CiAJc3RydWN0IHNnX3RhYmxlICpzZ3Q7CkBAIC0zMywxNSArMjUsNiBA QCBzdHJ1Y3Qgdm1hcF92YWRkcl9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9Owog Ci1zdHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZvIHsKLQlncmFudF9yZWZfdCAq ZGF0YV9yZWZzOwkvKiB0YWJsZSB3aXRoIHNoYXJlZCBidWZmZXIgcGFnZXMgcmVmaWQgKi8KLQln cmFudF9yZWZfdCAqYWRkcl9wYWdlczsgLyogcGFnZXMgb2YgMm5kIGxldmVsIGFkZHJlc3Npbmcg Ki8KLQlncmFudF9yZWZfdCAqdG9wX2xldmVsX3BhZ2U7IC8qIHBhZ2Ugb2YgdG9wIGxldmVsIGFk ZHJlc3NpbmcsIGl0IGNvbnRhaW5zIHJlZmlkcyBvZiAybmQgbGV2ZWwgcGFnZXMgKi8KLQlncmFu dF9yZWZfdCB0b3BfbGV2ZWxfcmVmOyAvKiB0b3AgbGV2ZWwgcmVmaWQgKi8KLQlzdHJ1Y3QgZ250 dGFiX3VubWFwX2dyYW50X3JlZiogdW5tYXBfb3BzOyAvKiB1bm1hcCBvcHMgZm9yIG1hcHBlZCBw YWdlcyAqLwotCXN0cnVjdCBwYWdlICoqZGF0YV9wYWdlczsgLyogZGF0YSBwYWdlcyB0byBiZSB1 bm1hcHBlZCAqLwotfTsKLQogLyogRXhwb3J0ZXIgYnVpbGRzIHBhZ2VzX2luZm8gYmVmb3JlIHNo YXJpbmcgcGFnZXMgKi8KIHN0cnVjdCBoeXBlcl9kbWFidWZfcGFnZXNfaW5mbyB7CiAgICAgICAg IGludCBoeXBlcl9kbWFidWZfaWQ7IC8qIHVuaXF1ZSBpZCB0byByZWZlcmVuY2UgZG1hYnVmIGlu IHNvdXJjZSBkb21haW4gKi8KQEAgLTY5LDggKzUyLDggQEAgc3RydWN0IGh5cGVyX2RtYWJ1Zl9z Z3RfaW5mbyB7CiAJc3RydWN0IGttYXBfdmFkZHJfbGlzdCAqdmFfa21hcHBlZDsKIAlzdHJ1Y3Qg dm1hcF92YWRkcl9saXN0ICp2YV92bWFwcGVkOwogCWJvb2wgdmFsaWQ7Ci0JYm9vbCBpbXBvcnRl cl9leHBvcnRlZDsgLyogZXhwb3J0ZWQgbG9jYWxseSBvbiBpbXBvcnRlcidzIHNpZGUgKi8KLQlz dHJ1Y3QgaHlwZXJfZG1hYnVmX3NoYXJlZF9wYWdlc19pbmZvIHNoYXJlZF9wYWdlc19pbmZvOwor CWludCBpbXBvcnRlcl9leHBvcnRlZDsgLyogZXhwb3J0ZWQgbG9jYWxseSBvbiBpbXBvcnRlcidz IHNpZGUgKi8KKwl2b2lkICpyZWZzX2luZm87IC8qIGh5cGVydmlzb3Itc3BlY2lmaWMgaW5mbyBm b3IgdGhlIHJlZmVyZW5jZXMgKi8KIAlpbnQgcHJpdmF0ZVs0XTsgLyogZGV2aWNlIHNwZWNpZmlj IGluZm8gKGUuZy4gaW1hZ2UncyBtZXRhIGluZm8/KSAqLwogfTsKIApAQCAtNzksMTQgKzYyLDE1 IEBAIHN0cnVjdCBoeXBlcl9kbWFidWZfc2d0X2luZm8gewogICogaXRzIG93biBtZW1vcnkgbWFw IG9uY2UgdXNlcnNwYWNlIGFza3MgZm9yIHJlZmVyZW5jZSBmb3IgdGhlIGJ1ZmZlciAqLwogc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9pbXBvcnRlZF9zZ3RfaW5mbyB7CiAJaW50IGh5cGVyX2RtYWJ1Zl9p ZDsgLyogdW5pcXVlIGlkIHRvIHJlZmVyZW5jZSBkbWFidWYgKEhZUEVSX0RNQUJVRl9JRF9JTVBP UlRFUihzb3VyY2UgZG9tYWluIGlkLCBleHBvcnRlcidzIGh5cGVyX2RtYWJ1Zl9pZCAqLworCWlu dCByZWZfaGFuZGxlOyAvKiByZWZlcmVuY2UgbnVtYmVyIG9mIHRvcCBsZXZlbCBhZGRyZXNzaW5n IHBhZ2Ugb2Ygc2hhcmVkIHBhZ2VzICovCiAJaW50IGZyc3Rfb2ZzdDsJLyogc3RhcnQgb2Zmc2V0 IGluIHNoYXJlZCBwYWdlICMxICovCiAJaW50IGxhc3RfbGVuOwkvKiBsZW5ndGggb2YgZGF0YSBp biB0aGUgbGFzdCBzaGFyZWQgcGFnZSAqLwogCWludCBuZW50czsJLyogbnVtYmVyIG9mIHBhZ2Vz IHRvIGJlIHNoYXJlZCAqLwotCWdyYW50X3JlZl90IGdyZWY7IC8qIHJlZmVyZW5jZSBudW1iZXIg b2YgdG9wIGxldmVsIGFkZHJlc3NpbmcgcGFnZSBvZiBzaGFyZWQgcGFnZXMgKi8KIAlzdHJ1Y3Qg ZG1hX2J1ZiAqZG1hX2J1ZjsKIAlzdHJ1Y3Qgc2dfdGFibGUgKnNndDsgLyogc2d0IHBvaW50ZXIg YWZ0ZXIgaW1wb3J0aW5nIGJ1ZmZlciAqLwotCXN0cnVjdCBoeXBlcl9kbWFidWZfc2hhcmVkX3Bh Z2VzX2luZm8gc2hhcmVkX3BhZ2VzX2luZm87CisJdm9pZCAqcmVmc19pbmZvOwogCWJvb2wgdmFs aWQ7CisJaW50IG51bV9pbXBvcnRlcnM7CiAJaW50IHByaXZhdGVbNF07IC8qIGRldmljZSBzcGVj aWZpYyBpbmZvIChlLmcuIGltYWdlJ3MgbWV0YSBpbmZvPykgKi8KIH07CiAKZGlmZiAtLWdpdCBh L2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmMgYi9k cml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5jCmluZGV4 IGY5ZTBkZjMuLmJkMzdlYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94 ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tLmMKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVm L3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uYwpAQCAtMTAsMTYgKzEwLDE1IEBACiAjaW5jbHVk ZSA8YXNtL3hlbi9wYWdlLmg+CiAjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9jb21tLmgiCiAj aW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuaCIKLSNpbmNsdWRlICIuLi9oeXBl cl9kbWFidWZfaW1wLmgiCi0jaW5jbHVkZSAiLi4vaHlwZXJfZG1hYnVmX2xpc3QuaCIKLSNpbmNs dWRlICIuLi9oeXBlcl9kbWFidWZfbXNnLmgiCiAKIHN0YXRpYyBpbnQgZXhwb3J0X3JlcV9pZCA9 IDA7CiAKLXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSByZXFfcGVuZGluZyA9IHswfTsKK3N0 cnVjdCBoeXBlcl9kbWFidWZfcmVxIHJlcV9wZW5kaW5nID0gezB9OwogCi0vKiBDcmVhdGVzIGVu dHJ5IGluIHhlbiBzdG9yZSB0aGF0IHdpbGwga2VlcCBkZXRhaWxzIG9mIGFsbCBleHBvcnRlciBy aW5ncyBjcmVhdGVkIGJ5IHRoaXMgZG9tYWluICovCi1pbnQzMl90IGh5cGVyX2RtYWJ1Zl9zZXR1 cF9kYXRhX2RpcigpCisvKiBDcmVhdGVzIGVudHJ5IGluIHhlbiBzdG9yZSB0aGF0IHdpbGwga2Vl cCBkZXRhaWxzIG9mIGFsbAorICogZXhwb3J0ZXIgcmluZ3MgY3JlYXRlZCBieSB0aGlzIGRvbWFp bgorICovCitzdGF0aWMgaW50IHhlbl9jb21tX3NldHVwX2RhdGFfZGlyKHZvaWQpCiB7CiAJY2hh ciBidWZbMjU1XTsKIApAQCAtMjcsMTMgKzI2LDEzIEBAIGludDMyX3QgaHlwZXJfZG1hYnVmX3Nl dHVwX2RhdGFfZGlyKCkKIAlyZXR1cm4geGVuYnVzX21rZGlyKFhCVF9OSUwsIGJ1ZiwgIiIpOwog fQogCi0KIC8qIFJlbW92ZXMgZW50cnkgZnJvbSB4ZW5zdG9yZSB3aXRoIGV4cG9ydGVyIHJpbmcg ZGV0YWlscy4KLSAqIE90aGVyIGRvbWFpbnMgdGhhdCBoYXMgY29ubmVjdGVkIHRvIGFueSBvZiBl eHBvcnRlciByaW5ncyBjcmVhdGVkIGJ5IHRoaXMgZG9tYWluLAotICogd2lsbCBiZSBub3RpZmll ZCBhYm91dCByZW1vdmFsIG9mIHRoaXMgZW50cnkgYW5kIHdpbGwgdHJlYXQgdGhhdCBhcyBzaWdu YWwgdG8KLSAqIGNsZWFudXAgaW1wb3J0ZXIgcmluZ3MgY3JlYXRlZCBmb3IgdGhpcyBkb21haW4K KyAqIE90aGVyIGRvbWFpbnMgdGhhdCBoYXMgY29ubmVjdGVkIHRvIGFueSBvZiBleHBvcnRlciBy aW5ncworICogY3JlYXRlZCBieSB0aGlzIGRvbWFpbiwgd2lsbCBiZSBub3RpZmllZCBhYm91dCBy ZW1vdmFsIG9mCisgKiB0aGlzIGVudHJ5IGFuZCB3aWxsIHRyZWF0IHRoYXQgYXMgc2lnbmFsIHRv IGNsZWFudXAgaW1wb3J0ZXIKKyAqIHJpbmdzIGNyZWF0ZWQgZm9yIHRoaXMgZG9tYWluCiAgKi8K LWludDMyX3QgaHlwZXJfZG1hYnVmX2Rlc3Ryb3lfZGF0YV9kaXIoKQorc3RhdGljIGludCB4ZW5f Y29tbV9kZXN0cm95X2RhdGFfZGlyKHZvaWQpCiB7CiAJY2hhciBidWZbMjU1XTsKIApAQCAtNDEs MTggKzQwLDE5IEBAIGludDMyX3QgaHlwZXJfZG1hYnVmX2Rlc3Ryb3lfZGF0YV9kaXIoKQogCXJl dHVybiB4ZW5idXNfcm0oWEJUX05JTCwgYnVmLCAiIik7CiB9CiAKLS8qCi0gKiBBZGRzIHhlbnN0 b3JlIGVudHJpZXMgd2l0aCBkZXRhaWxzIG9mIGV4cG9ydGVyIHJpbmcgY3JlYXRlZCBmb3IgZ2l2 ZW4gcmVtb3RlIGRvbWFpbi4KLSAqIEl0IHJlcXVpcmVzIHNwZWNpYWwgZGFlbW9uIHJ1bm5pbmcg aW4gZG9tMCB0byBtYWtlIHN1cmUgdGhhdCBnaXZlbiByZW1vdGUgZG9tYWluIHdpbGwKLSAqIGhh dmUgcmlnaHQgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRoYXQgZGF0YS4KKy8qIEFkZHMgeGVuc3Rv cmUgZW50cmllcyB3aXRoIGRldGFpbHMgb2YgZXhwb3J0ZXIgcmluZyBjcmVhdGVkCisgKiBmb3Ig Z2l2ZW4gcmVtb3RlIGRvbWFpbi4gSXQgcmVxdWlyZXMgc3BlY2lhbCBkYWVtb24gcnVubmluZwor ICogaW4gZG9tMCB0byBtYWtlIHN1cmUgdGhhdCBnaXZlbiByZW1vdGUgZG9tYWluIHdpbGwgaGF2 ZSByaWdodAorICogcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRoYXQgZGF0YS4KICAqLwotc3RhdGlj IGludDMyX3QgaHlwZXJfZG1hYnVmX2V4cG9zZV9yaW5nX2RldGFpbHModWludDMyX3QgZG9taWQs IHVpbnQzMl90IHJkb21pZCwgdWludDMyX3QgZ3JlZmlkLCB1aW50MzJfdCBwb3J0KQorc3RhdGlj IGludCB4ZW5fY29tbV9leHBvc2VfcmluZ19kZXRhaWxzKGludCBkb21pZCwgaW50IHJkb21pZCwK KwkJCQkJaW50IGdyZWYsIGludCBwb3J0KQogewogCWNoYXIgYnVmWzI1NV07CiAJaW50IHJldDsK IAogCXNwcmludGYoYnVmLCAiL2xvY2FsL2RvbWFpbi8lZC9kYXRhL2h5cGVyX2RtYWJ1Zi8lZCIs IGRvbWlkLCByZG9taWQpOwotCXJldCA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwgYnVmLCAiZ3Jl ZmlkIiwgIiVkIiwgZ3JlZmlkKTsKKwlyZXQgPSB4ZW5idXNfcHJpbnRmKFhCVF9OSUwsIGJ1Ziwg ImdyZWZpZCIsICIlZCIsIGdyZWYpOwogCiAJaWYgKHJldCkgewogCQlwcmludGsoIkZhaWxlZCB0 byB3cml0ZSB4ZW5idXMgZW50cnkgJXM6ICVkXG4iLCBidWYsIHJldCk7CkBAIC03Miw3ICs3Miw3 IEBAIHN0YXRpYyBpbnQzMl90IGh5cGVyX2RtYWJ1Zl9leHBvc2VfcmluZ19kZXRhaWxzKHVpbnQz Ml90IGRvbWlkLCB1aW50MzJfdCByZG9taWQsCiAvKgogICogUXVlcmllcyBkZXRhaWxzIG9mIHJp bmcgZXhwb3NlZCBieSByZW1vdGUgZG9tYWluLgogICovCi1zdGF0aWMgaW50MzJfdCBoeXBlcl9k bWFidWZfZ2V0X3JpbmdfZGV0YWlscyh1aW50MzJfdCBkb21pZCwgdWludDMyX3QgcmRvbWlkLCB1 aW50MzJfdCAqZ3JlZmlkLCB1aW50MzJfdCAqcG9ydCkKK3N0YXRpYyBpbnQgeGVuX2NvbW1fZ2V0 X3JpbmdfZGV0YWlscyhpbnQgZG9taWQsIGludCByZG9taWQsIGludCAqZ3JlZmlkLCBpbnQgKnBv cnQpCiB7CiAJY2hhciBidWZbMjU1XTsKIAlpbnQgcmV0OwpAQCAtOTUsMTAgKzk1LDEwIEBAIHN0 YXRpYyBpbnQzMl90IGh5cGVyX2RtYWJ1Zl9nZXRfcmluZ19kZXRhaWxzKHVpbnQzMl90IGRvbWlk LCB1aW50MzJfdCByZG9taWQsIHVpCiAJcmV0dXJuIChyZXQgPD0gMCA/IDEgOiAwKTsKIH0KIAot aW50MzJfdCBoeXBlcl9kbWFidWZfZ2V0X2RvbWlkKHZvaWQpCitpbnQgaHlwZXJfZG1hYnVmX2dl dF9kb21pZCh2b2lkKQogewogCXN0cnVjdCB4ZW5idXNfdHJhbnNhY3Rpb24geGJ0OwotCWludDMy X3QgZG9taWQ7CisJaW50IGRvbWlkOwogCiAgICAgICAgIHhlbmJ1c190cmFuc2FjdGlvbl9zdGFy dCgmeGJ0KTsKIApAQCAtMTEwLDI5ICsxMTAsMzUgQEAgaW50MzJfdCBoeXBlcl9kbWFidWZfZ2V0 X2RvbWlkKHZvaWQpCiAJcmV0dXJuIGRvbWlkOwogfQogCi1pbnQgaHlwZXJfZG1hYnVmX25leHRf cmVxX2lkX2V4cG9ydCh2b2lkKQorc3RhdGljIGludCB4ZW5fY29tbV9uZXh0X3JlcV9pZCh2b2lk KQogewogICAgICAgICBleHBvcnRfcmVxX2lkKys7CiAgICAgICAgIHJldHVybiBleHBvcnRfcmVx X2lkOwogfQogCiAvKiBGb3Igbm93IGNhY2hlIGxhdGFzdCByaW5ncyBhcyBnbG9iYWwgdmFyaWFi bGVzIFRPRE86IGtlZXAgdGhlbSBpbiBsaXN0Ki8KLXN0YXRpYyBpcnFyZXR1cm5fdCBoeXBlcl9k bWFidWZfZnJvbnRfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbyk7Ci1zdGF0aWMgaXJxcmV0 dXJuX3QgaHlwZXJfZG1hYnVmX2JhY2tfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbyk7Ci0K LS8qCi0gKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGFueSBjaGFu Z2Ugb2YgeGVuYnVzIHBhdGggYmVpbmcgd2F0Y2hlZC4KLSAqIFVzZWQgZm9yIGRldGVjdGluZyBj cmVhdGlvbi9kZXN0cnVjdGlvbiBvZiByZW1vdGUgZG9tYWluIGV4cG9ydGVyIHJpbmcuCi0gKiBX aGVuIHJlbW90ZSBkb21haW4ncyBleHBvcnRlciByaW5nIHdpbGwgYmUgZGV0ZWN0ZWQsIGltcG9y dGVyIHJpbmcgb24gdGhpcyBkb21haW4gd2lsbCBiZSBjcmVhdGVkLgotICogV2hlbiByZW1vdGUg ZG9tYWluJ3MgZXhwb3J0ZXIgcmluZyBkZXN0cnVjdGlvbiB3aWxsIGJlIGRldGVjdGVkIGl0IHdp bGwgY2VsYW51cCB0aGlzIGRvbWFpbiBpbXBvcnRlciByaW5nLgotICogRGVzdHJ1Y3Rpb24gY2Fu IGJlIGNhdXNlZCBieSB1bmxvYWRpbmcgbW9kdWxlIGJ5IHJlbW90ZSBkb21haW4gb3IgaXQncyBj cmFzaC9mb3JjZSBzaHV0ZG93bi4KK3N0YXRpYyBpcnFyZXR1cm5fdCBmcm9udF9yaW5nX2lzcihp bnQgaXJxLCB2b2lkICppbmZvKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBiYWNrX3JpbmdfaXNyKGlu dCBpcnEsIHZvaWQgKmluZm8pOworCisvKiBDYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUg Y2FsbGVkIG9uIGFueSBjaGFuZ2Ugb2YgeGVuYnVzIHBhdGgKKyAqIGJlaW5nIHdhdGNoZWQuIFVz ZWQgZm9yIGRldGVjdGluZyBjcmVhdGlvbi9kZXN0cnVjdGlvbiBvZiByZW1vdGUKKyAqIGRvbWFp biBleHBvcnRlciByaW5nLgorICoKKyAqIFdoZW4gcmVtb3RlIGRvbWFpbidzIGV4cG9ydGVyIHJp bmcgd2lsbCBiZSBkZXRlY3RlZCwgaW1wb3J0ZXIgcmluZworICogb24gdGhpcyBkb21haW4gd2ls bCBiZSBjcmVhdGVkLgorICoKKyAqIFdoZW4gcmVtb3RlIGRvbWFpbidzIGV4cG9ydGVyIHJpbmcg ZGVzdHJ1Y3Rpb24gd2lsbCBiZSBkZXRlY3RlZCBpdAorICogd2lsbCBjZWxhbnVwIHRoaXMgZG9t YWluIGltcG9ydGVyIHJpbmcuCisgKgorICogRGVzdHJ1Y3Rpb24gY2FuIGJlIGNhdXNlZCBieSB1 bmxvYWRpbmcgbW9kdWxlIGJ5IHJlbW90ZSBkb21haW4gb3IKKyAqIGl0J3MgY3Jhc2gvZm9yY2Ug c2h1dGRvd24uCiAgKi8KLXN0YXRpYyB2b2lkIHJlbW90ZV9kb21haW5fZXhwb3J0ZXJfd2F0Y2hf Y2Ioc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2gsCi0JCQkJICAgY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqdG9rZW4pCitzdGF0aWMgdm9pZCByZW1vdGVfZG9tX2V4cG9ydGVyX3dhdGNo X2NiKHN0cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLAorCQkJCQkgY29uc3QgY2hhciAqcGF0aCwg Y29uc3QgY2hhciAqdG9rZW4pCiB7CiAJaW50IHJkb20scmV0OwogCXVpbnQzMl90IGdyZWZpZCwg cG9ydDsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19pbXBvcnQgKnJpbmdfaW5mbzsK KwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2luZm87CiAKIAkvKiBDaGVjayB3 aGljaCBkb21haW4gaGFzIGNoYW5nZWQgaXRzIGV4cG9ydGVyIHJpbmdzICovCiAJcmV0ID0gc3Nj YW5mKHdhdGNoLT5ub2RlLCAiL2xvY2FsL2RvbWFpbi8lZC8iLCAmcmRvbSk7CkBAIC0xNDEsMzkg KzE0Nyw0OSBAQCBzdGF0aWMgdm9pZCByZW1vdGVfZG9tYWluX2V4cG9ydGVyX3dhdGNoX2NiKHN0 cnVjdCB4ZW5idXNfd2F0Y2ggKndhdGNoLAogCX0KIAogCS8qIENoZWNrIGlmIHdlIGhhdmUgaW1w b3J0ZXIgcmluZyBmb3IgZ2l2ZW4gcmVtb3RlIGRvbWFpbiBhbHJhZHkgY3JlYXRlZCAqLwotCXJp bmdfaW5mbyA9IGh5cGVyX2RtYWJ1Zl9maW5kX2ltcG9ydGVyX3JpbmcocmRvbSk7Ci0KLQkvKgot CSAqIFRyeSB0byBxdWVyeSByZW1vdGUgZG9tYWluIGV4cG9ydGVyIHJpbmcgZGV0YWlscyAtIGlm IHRoYXQgd2lsbCBmYWlsIGFuZCB3ZSBoYXZlCi0JICogaW1wb3J0ZXIgcmluZyB0aGF0IG1lYW5z IHJlbW90ZSBkb21haW5zIGhhcyBjbGVhbnVwIGl0cyBleHBvcnRlciByaW5nLCBzbyBvdXIKLQkg KiBpbXBvcnRlciByaW5nIGlzIG5vIGxvbmdlciB1c2VmdWwuCi0JICogSWYgcXVlcnlpbmcgZGV0 YWlscyB3aWxsIHN1Y2NlZWQgYW5kIHdlIGRvbid0IGhhdmUgaW1wb3J0ZXIgcmluZywgaXQgbWVh bnMgdGhhdAotCSAqIHJlbW90ZSBkb21haW4gaGFzIHNldHVwIGl0IGZvciB1cyBhbmQgd2Ugc2hv dWxkIGNvbm5lY3QgdG8gaXQuCisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF9yeF9yaW5nKHJk b20pOworCisJLyogVHJ5IHRvIHF1ZXJ5IHJlbW90ZSBkb21haW4gZXhwb3J0ZXIgcmluZyBkZXRh aWxzIC0gaWYgdGhhdCB3aWxsCisJICogZmFpbCBhbmQgd2UgaGF2ZSBpbXBvcnRlciByaW5nIHRo YXQgbWVhbnMgcmVtb3RlIGRvbWFpbnMgaGFzIGNsZWFudXAKKwkgKiBpdHMgZXhwb3J0ZXIgcmlu Zywgc28gb3VyIGltcG9ydGVyIHJpbmcgaXMgbm8gbG9uZ2VyIHVzZWZ1bC4KKwkgKgorCSAqIElm IHF1ZXJ5aW5nIGRldGFpbHMgd2lsbCBzdWNjZWVkIGFuZCB3ZSBkb24ndCBoYXZlIGltcG9ydGVy IHJpbmcsCisJICogaXQgbWVhbnMgdGhhdCByZW1vdGUgZG9tYWluIGhhcyBzZXR1cCBpdCBmb3Ig dXMgYW5kIHdlIHNob3VsZCBjb25uZWN0CisJICogdG8gaXQuCiAJICovCi0JcmV0ID0gaHlwZXJf ZG1hYnVmX2dldF9yaW5nX2RldGFpbHMoaHlwZXJfZG1hYnVmX2dldF9kb21pZCgpLCByZG9tLCAm Z3JlZmlkLCAmcG9ydCk7CisJcmV0ID0geGVuX2NvbW1fZ2V0X3JpbmdfZGV0YWlscyhoeXBlcl9k bWFidWZfZ2V0X2RvbWlkKCksIHJkb20sCisJCQkJCSZncmVmaWQsICZwb3J0KTsKIAogCWlmIChy aW5nX2luZm8gJiYgcmV0ICE9IDApIHsKIAkJcHJpbnRrKCJSZW1vdGUgZXhwb3J0ZXIgY2xvc2Vk LCBjbGVhbmludXAgaW1wb3J0ZXJcbiIpOwotCQloeXBlcl9kbWFidWZfaW1wb3J0ZXJfcmluZ2J1 Zl9jbGVhbnVwKHJkb20pOworCQloeXBlcl9kbWFidWZfeGVuX2NsZWFudXBfcnhfcmJ1ZihyZG9t KTsKIAl9IGVsc2UgaWYgKCFyaW5nX2luZm8gJiYgcmV0ID09IDApIHsKIAkJcHJpbnRrKCJSZWdp c3RlcmluZyBpbXBvcnRlclxuIik7Ci0JCWh5cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nYnVmX2lu aXQocmRvbSk7CisJCWh5cGVyX2RtYWJ1Zl94ZW5faW5pdF9yeF9yYnVmKHJkb20pOwogCX0KIH0K IAogLyogZXhwb3J0ZXIgbmVlZHMgdG8gZ2VuZXJhdGVkIGluZm8gZm9yIHBhZ2Ugc2hhcmluZyAq LwotaW50IGh5cGVyX2RtYWJ1Zl9leHBvcnRlcl9yaW5nYnVmX2luaXQoaW50IHJkb21haW4pCitp bnQgaHlwZXJfZG1hYnVmX3hlbl9pbml0X3R4X3JidWYoaW50IGRvbWlkKQogewotCXN0cnVjdCBo eXBlcl9kbWFidWZfcmluZ19pbmZvX2V4cG9ydCAqcmluZ19pbmZvOwotCXN0cnVjdCBoeXBlcl9k bWFidWZfc3JpbmcgKnNyaW5nOworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdf aW5mbzsKKwlzdHJ1Y3QgeGVuX2NvbW1fc3JpbmcgKnNyaW5nOwogCXN0cnVjdCBldnRjaG5fYWxs b2NfdW5ib3VuZCBhbGxvY191bmJvdW5kOwogCXN0cnVjdCBldnRjaG5fY2xvc2UgY2xvc2U7CiAK IAl2b2lkICpzaGFyZWRfcmluZzsKIAlpbnQgcmV0OwogCi0JcmluZ19pbmZvID0gKHN0cnVjdCBo eXBlcl9kbWFidWZfcmluZ19pbmZvX2V4cG9ydCopCi0JCQkJa21hbGxvYyhzaXplb2YoKnJpbmdf aW5mbyksIEdGUF9LRVJORUwpOworCS8qIGNoZWNrIGlmIHRoZXJlJ3MgYW55IGV4aXN0aW5nIHR4 IGNoYW5uZWwgaW4gdGhlIHRhYmxlICovCisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF90eF9y aW5nKGRvbWlkKTsKKworCWlmIChyaW5nX2luZm8pIHsKKwkJcHJpbnRrKCJ0eCByaW5nIGNoIHRv IGRvbWlkID0gJWQgYWxyZWFkeSBleGlzdFxuZ3JlZiA9ICVkLCBwb3J0ID0gJWRcbiIsCisJCXJp bmdfaW5mby0+cmRvbWFpbiwgcmluZ19pbmZvLT5ncmVmX3JpbmcsIHJpbmdfaW5mby0+cG9ydCk7 CisJCXJldHVybiAwOworCX0KKworCXJpbmdfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpyaW5nX2lu Zm8pLCBHRlBfS0VSTkVMKTsKIAogCS8qIGZyb20gZXhwb3J0ZXIgdG8gaW1wb3J0ZXIgKi8KIAlz aGFyZWRfcmluZyA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAxKTsKQEAg LTE4MSwyMCArMTk3LDIyIEBAIGludCBoeXBlcl9kbWFidWZfZXhwb3J0ZXJfcmluZ2J1Zl9pbml0 KGludCByZG9tYWluKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcmluZyA9IChzdHJ1Y3Qg aHlwZXJfZG1hYnVmX3NyaW5nICopIHNoYXJlZF9yaW5nOworCXNyaW5nID0gKHN0cnVjdCB4ZW5f Y29tbV9zcmluZyAqKSBzaGFyZWRfcmluZzsKIAogCVNIQVJFRF9SSU5HX0lOSVQoc3JpbmcpOwog CiAJRlJPTlRfUklOR19JTklUKCYocmluZ19pbmZvLT5yaW5nX2Zyb250KSwgc3JpbmcsIFBBR0Vf U0laRSk7CiAKLQlyaW5nX2luZm8tPmdyZWZfcmluZyA9IGdudHRhYl9ncmFudF9mb3JlaWduX2Fj Y2VzcyhyZG9tYWluLAotCQkJCQkJCXZpcnRfdG9fbWZuKHNoYXJlZF9yaW5nKSwgMCk7CisJcmlu Z19pbmZvLT5ncmVmX3JpbmcgPSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoZG9taWQsCisJ CQkJCQkJICAgdmlydF90b19tZm4oc2hhcmVkX3JpbmcpLAorCQkJCQkJCSAgIDApOwogCWlmIChy aW5nX2luZm8tPmdyZWZfcmluZyA8IDApIHsKLQkJcmV0dXJuIC1FSU5WQUw7IC8qIGZhaWwgdG8g Z2V0IGdyZWYgKi8KKwkJLyogZmFpbCB0byBnZXQgZ3JlZiAqLworCQlyZXR1cm4gLUVJTlZBTDsK IAl9CiAKIAlhbGxvY191bmJvdW5kLmRvbSA9IERPTUlEX1NFTEY7Ci0JYWxsb2NfdW5ib3VuZC5y ZW1vdGVfZG9tID0gcmRvbWFpbjsKKwlhbGxvY191bmJvdW5kLnJlbW90ZV9kb20gPSBkb21pZDsK IAlyZXQgPSBIWVBFUlZJU09SX2V2ZW50X2NoYW5uZWxfb3AoRVZUQ0hOT1BfYWxsb2NfdW5ib3Vu ZCwKIAkJCQkJJmFsbG9jX3VuYm91bmQpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtMjA0LDcgKzIy Miw3IEBAIGludCBoeXBlcl9kbWFidWZfZXhwb3J0ZXJfcmluZ2J1Zl9pbml0KGludCByZG9tYWlu KQogCiAJLyogc2V0dGluZyB1cCBpbnRlcnJ1cHQgKi8KIAlyZXQgPSBiaW5kX2V2dGNobl90b19p cnFoYW5kbGVyKGFsbG9jX3VuYm91bmQucG9ydCwKLQkJCQkJaHlwZXJfZG1hYnVmX2Zyb250X3Jp bmdfaXNyLCAwLAorCQkJCQlmcm9udF9yaW5nX2lzciwgMCwKIAkJCQkJTlVMTCwgKHZvaWQqKSBy aW5nX2luZm8pOwogCiAJaWYgKHJldCA8IDApIHsKQEAgLTIxNiw3ICsyMzQsNyBAQCBpbnQgaHlw ZXJfZG1hYnVmX2V4cG9ydGVyX3JpbmdidWZfaW5pdChpbnQgcmRvbWFpbikKIAkJcmV0dXJuIC1F SU5WQUw7CiAJfQogCi0JcmluZ19pbmZvLT5yZG9tYWluID0gcmRvbWFpbjsKKwlyaW5nX2luZm8t PnJkb21haW4gPSBkb21pZDsKIAlyaW5nX2luZm8tPmlycSA9IHJldDsKIAlyaW5nX2luZm8tPnBv cnQgPSBhbGxvY191bmJvdW5kLnBvcnQ7CiAKQEAgLTIyNiwxMDkgKzI0NCwxMjggQEAgaW50IGh5 cGVyX2RtYWJ1Zl9leHBvcnRlcl9yaW5nYnVmX2luaXQoaW50IHJkb21haW4pCiAJCXJpbmdfaW5m by0+cG9ydCwKIAkJcmluZ19pbmZvLT5pcnEpOwogCi0JcmV0ID0gaHlwZXJfZG1hYnVmX3JlZ2lz dGVyX2V4cG9ydGVyX3JpbmcocmluZ19pbmZvKTsKKwlyZXQgPSB4ZW5fY29tbV9hZGRfdHhfcmlu ZyhyaW5nX2luZm8pOwogCi0JcmV0ID0gaHlwZXJfZG1hYnVmX2V4cG9zZV9yaW5nX2RldGFpbHMo aHlwZXJfZG1hYnVmX2dldF9kb21pZCgpLCByZG9tYWluLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8tPmdyZWZfcmluZywgcmluZ19pbmZv LT5wb3J0KTsKKwlyZXQgPSB4ZW5fY29tbV9leHBvc2VfcmluZ19kZXRhaWxzKGh5cGVyX2RtYWJ1 Zl9nZXRfZG9taWQoKSwgZG9taWQsCisJCQkJCSAgIHJpbmdfaW5mby0+Z3JlZl9yaW5nLCByaW5n X2luZm8tPnBvcnQpOwogCiAJLyoKIAkgKiBSZWdpc3RlciB3YXRjaCBmb3IgcmVtb3RlIGRvbWFp biBleHBvcnRlciByaW5nLgotCSAqIFdoZW4gcmVtb3RlIGRvbWFpbiB3aWxsIHNldHVwIGl0cyBl eHBvcnRlciByaW5nLCB3ZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29ubmVjdCBvdXIgaW1wb3J0ZXIg cmluZyB0byBpdC4KKwkgKiBXaGVuIHJlbW90ZSBkb21haW4gd2lsbCBzZXR1cCBpdHMgZXhwb3J0 ZXIgcmluZywKKwkgKiB3ZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29ubmVjdCBvdXIgaW1wb3J0ZXIg cmluZyB0byBpdC4KIAkgKi8KLQlyaW5nX2luZm8tPndhdGNoLmNhbGxiYWNrID0gcmVtb3RlX2Rv bWFpbl9leHBvcnRlcl93YXRjaF9jYjsKKwlyaW5nX2luZm8tPndhdGNoLmNhbGxiYWNrID0gcmVt b3RlX2RvbV9leHBvcnRlcl93YXRjaF9jYjsKIAlyaW5nX2luZm8tPndhdGNoLm5vZGUgPSAoY29u c3QgY2hhciopIGttYWxsb2Moc2l6ZW9mKGNoYXIpICogMjU1LCBHRlBfS0VSTkVMKTsKLQlzcHJp bnRmKChjaGFyKilyaW5nX2luZm8tPndhdGNoLm5vZGUsICIvbG9jYWwvZG9tYWluLyVkL2RhdGEv aHlwZXJfZG1hYnVmLyVkL3BvcnQiLCByZG9tYWluLCBoeXBlcl9kbWFidWZfZ2V0X2RvbWlkKCkp OworCXNwcmludGYoKGNoYXIqKXJpbmdfaW5mby0+d2F0Y2gubm9kZSwKKwkJIi9sb2NhbC9kb21h aW4vJWQvZGF0YS9oeXBlcl9kbWFidWYvJWQvcG9ydCIsCisJCWRvbWlkLCBoeXBlcl9kbWFidWZf Z2V0X2RvbWlkKCkpOworCiAJcmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNo KTsKIAogCXJldHVybiByZXQ7CiB9CiAKIC8qIGNsZWFucyB1cCBleHBvcnRlciByaW5nIGNyZWF0 ZWQgZm9yIGdpdmVuIHJlbW90ZSBkb21haW4gKi8KLXZvaWQgaHlwZXJfZG1hYnVmX2V4cG9ydGVy X3JpbmdidWZfY2xlYW51cChpbnQgcmRvbWFpbikKK3ZvaWQgaHlwZXJfZG1hYnVmX3hlbl9jbGVh bnVwX3R4X3JidWYoaW50IGRvbWlkKQogewotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZv X2V4cG9ydCAqcmluZ19pbmZvOworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdf aW5mbzsKIAogCS8qIGNoZWNrIGlmIHdlIGF0IGFsbCBoYXZlIGV4cG9ydGVyIHJpbmcgZm9yIGdp dmVuIHJkb21haW4gKi8KLQlyaW5nX2luZm8gPSBoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlcl9y aW5nKHJkb21haW4pOworCXJpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfdHhfcmluZyhkb21pZCk7 CiAKIAlpZiAoIXJpbmdfaW5mbykgewogCQlyZXR1cm47CiAJfQogCi0JaHlwZXJfZG1hYnVmX3Jl bW92ZV9leHBvcnRlcl9yaW5nKHJkb21haW4pOworCXhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGRv bWlkKTsKIAogCXVucmVnaXN0ZXJfeGVuYnVzX3dhdGNoKCZyaW5nX2luZm8tPndhdGNoKTsKIAlr ZnJlZShyaW5nX2luZm8tPndhdGNoLm5vZGUpOwogCi0JLyogTm8gbmVlZCB0byBjbG9zZSBjb21t dW5pY2F0aW9uIGNoYW5uZWwsIHdpbGwgYmUgZG9uZSBieSB0aGlzIGZ1bmN0aW9uICovCi0JdW5i aW5kX2Zyb21faXJxaGFuZGxlcihyaW5nX2luZm8tPmlycSwJKHZvaWQqKSByaW5nX2luZm8pOwor CS8qIE5vIG5lZWQgdG8gY2xvc2UgY29tbXVuaWNhdGlvbiBjaGFubmVsLCB3aWxsIGJlIGRvbmUg YnkKKwkgKiB0aGlzIGZ1bmN0aW9uCisJICovCisJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihyaW5n X2luZm8tPmlycSwgKHZvaWQqKSByaW5nX2luZm8pOwogCi0JLyogTm8gbmVlZCB0byBmcmVlIHNy aW5nIHBhZ2UsIHdpbGwgYmUgZnJlZWQgYnkgdGhpcyBmdW5jdGlvbiB3aGVuIG90aGVyIHNpZGUg d2lsbCBlbmQgaXRzIGFjY2VzcyAqLworCS8qIE5vIG5lZWQgdG8gZnJlZSBzcmluZyBwYWdlLCB3 aWxsIGJlIGZyZWVkIGJ5IHRoaXMgZnVuY3Rpb24KKwkgKiB3aGVuIG90aGVyIHNpZGUgd2lsbCBl bmQgaXRzIGFjY2VzcworCSAqLwogCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3MocmluZ19pbmZv LT5ncmVmX3JpbmcsIDAsCiAJCQkJICAodW5zaWduZWQgbG9uZykgcmluZ19pbmZvLT5yaW5nX2Zy b250LnNyaW5nKTsKIAogCWtmcmVlKHJpbmdfaW5mbyk7CiB9CiAKLS8qIGltcG9ydGVyIG5lZWRz IHRvIGtub3cgYWJvdXQgc2hhcmVkIHBhZ2UgYW5kIHBvcnQgbnVtYmVycyBmb3IgcmluZyBidWZm ZXIgYW5kIGV2ZW50IGNoYW5uZWwgKi8KLWludCBoeXBlcl9kbWFidWZfaW1wb3J0ZXJfcmluZ2J1 Zl9pbml0KGludCBzZG9tYWluKQorLyogaW1wb3J0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCBzaGFy ZWQgcGFnZSBhbmQgcG9ydCBudW1iZXJzIGZvcgorICogcmluZyBidWZmZXIgYW5kIGV2ZW50IGNo YW5uZWwKKyAqLworaW50IGh5cGVyX2RtYWJ1Zl94ZW5faW5pdF9yeF9yYnVmKGludCBkb21pZCkK IHsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19pbXBvcnQgKnJpbmdfaW5mbzsKLQlz dHJ1Y3QgaHlwZXJfZG1hYnVmX3NyaW5nICpzcmluZzsKKwlzdHJ1Y3QgeGVuX2NvbW1fcnhfcmlu Z19pbmZvICpyaW5nX2luZm87CisJc3RydWN0IHhlbl9jb21tX3NyaW5nICpzcmluZzsKIAogCXN0 cnVjdCBwYWdlICpzaGFyZWRfcmluZzsKIAotCXN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAq b3BzOworCXN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqbWFwX29wczsKKwogCWludCByZXQ7 Ci0JaW50IGltcG9ydGVyX2dyZWYsIGltcG9ydGVyX3BvcnQ7CisJaW50IHJ4X2dyZWYsIHJ4X3Bv cnQ7CiAKLQlyZXQgPSBoeXBlcl9kbWFidWZfZ2V0X3JpbmdfZGV0YWlscyhoeXBlcl9kbWFidWZf Z2V0X2RvbWlkKCksIHNkb21haW4sCi0JCQkJCSAgICAmaW1wb3J0ZXJfZ3JlZiwgJmltcG9ydGVy X3BvcnQpOworCS8qIGNoZWNrIGlmIHRoZXJlJ3MgZXhpc3RpbmcgcnggcmluZyBjaGFubmVsICov CisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF9yeF9yaW5nKGRvbWlkKTsKKworCWlmIChyaW5n X2luZm8pIHsKKwkJcHJpbnRrKCJyeCByaW5nIGNoIGZyb20gZG9taWQgPSAlZCBhbHJlYWR5IGV4 aXN0XG4iLCByaW5nX2luZm8tPnNkb21haW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXQgPSB4 ZW5fY29tbV9nZXRfcmluZ19kZXRhaWxzKGh5cGVyX2RtYWJ1Zl9nZXRfZG9taWQoKSwgZG9taWQs CisJCQkJCSZyeF9ncmVmLCAmcnhfcG9ydCk7CiAKIAlpZiAocmV0KSB7Ci0JCXByaW50aygiRG9t YWluICVkIGhhcyBub3QgY3JlYXRlZCBleHBvcnRlciByaW5nIGZvciBjdXJyZW50IGRvbWFpblxu Iiwgc2RvbWFpbik7CisJCXByaW50aygiRG9tYWluICVkIGhhcyBub3QgY3JlYXRlZCBleHBvcnRl ciByaW5nIGZvciBjdXJyZW50IGRvbWFpblxuIiwgZG9taWQpOwogCQlyZXR1cm4gcmV0OwogCX0K IAotCXJpbmdfaW5mbyA9IChzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19pbXBvcnQgKikK LQkJCWttYWxsb2Moc2l6ZW9mKCpyaW5nX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlyaW5nX2luZm8g PSBrbWFsbG9jKHNpemVvZigqcmluZ19pbmZvKSwgR0ZQX0tFUk5FTCk7CiAKLQlyaW5nX2luZm8t PnNkb21haW4gPSBzZG9tYWluOwotCXJpbmdfaW5mby0+ZXZ0Y2huID0gaW1wb3J0ZXJfcG9ydDsK KwlyaW5nX2luZm8tPnNkb21haW4gPSBkb21pZDsKKwlyaW5nX2luZm8tPmV2dGNobiA9IHJ4X3Bv cnQ7CiAKLQlvcHMgPSAoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmKilrbWFsbG9jKHNpemVv Zigqb3BzKSwgR0ZQX0tFUk5FTCk7CisJbWFwX29wcyA9IGttYWxsb2Moc2l6ZW9mKCptYXBfb3Bz KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKDEsICZzaGFyZWRfcmlu ZykpIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZ250dGFiX3NldF9tYXBfb3AoJm9wc1sw XSwgKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHNoYXJlZF9yaW5nKSks Ci0JCQlHTlRNQVBfaG9zdF9tYXAsIGltcG9ydGVyX2dyZWYsIHNkb21haW4pOworCWdudHRhYl9z ZXRfbWFwX29wKCZtYXBfb3BzWzBdLCAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGFnZV90 b19wZm4oc2hhcmVkX3JpbmcpKSwKKwkJCSAgR05UTUFQX2hvc3RfbWFwLCByeF9ncmVmLCBkb21p ZCk7CisKIAlnbnR0YWJfc2V0X3VubWFwX29wKCZyaW5nX2luZm8tPnVubWFwX29wLCAodW5zaWdu ZWQgbG9uZylwZm5fdG9fa2FkZHIocGFnZV90b19wZm4oc2hhcmVkX3JpbmcpKSwKLQkJCUdOVE1B UF9ob3N0X21hcCwgLTEpOworCQkJICAgIEdOVE1BUF9ob3N0X21hcCwgLTEpOwogCi0JcmV0ID0g Z250dGFiX21hcF9yZWZzKG9wcywgTlVMTCwgJnNoYXJlZF9yaW5nLCAxKTsKKwlyZXQgPSBnbnR0 YWJfbWFwX3JlZnMobWFwX29wcywgTlVMTCwgJnNoYXJlZF9yaW5nLCAxKTsKIAlpZiAocmV0IDwg MCkgewogCQlwcmludGsoIkNhbm5vdCBtYXAgcmluZ1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwog CX0KIAotCWlmIChvcHNbMF0uc3RhdHVzKSB7CisJaWYgKG1hcF9vcHNbMF0uc3RhdHVzKSB7CiAJ CXByaW50aygiUmluZyBtYXBwaW5nIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0g ZWxzZSB7Ci0JCXJpbmdfaW5mby0+dW5tYXBfb3AuaGFuZGxlID0gb3BzWzBdLmhhbmRsZTsKKwkJ cmluZ19pbmZvLT51bm1hcF9vcC5oYW5kbGUgPSBtYXBfb3BzWzBdLmhhbmRsZTsKIAl9CiAKLQlr ZnJlZShvcHMpOworCWtmcmVlKG1hcF9vcHMpOwogCi0Jc3JpbmcgPSAoc3RydWN0IGh5cGVyX2Rt YWJ1Zl9zcmluZyopIHBmbl90b19rYWRkcihwYWdlX3RvX3BmbihzaGFyZWRfcmluZykpOworCXNy aW5nID0gKHN0cnVjdCB4ZW5fY29tbV9zcmluZyAqKXBmbl90b19rYWRkcihwYWdlX3RvX3Bmbihz aGFyZWRfcmluZykpOwogCiAJQkFDS19SSU5HX0lOSVQoJnJpbmdfaW5mby0+cmluZ19iYWNrLCBz cmluZywgUEFHRV9TSVpFKTsKIAotCXJldCA9IGJpbmRfaW50ZXJkb21haW5fZXZ0Y2huX3RvX2ly cWhhbmRsZXIoc2RvbWFpbiwgaW1wb3J0ZXJfcG9ydCwKLQkJCQkJCWh5cGVyX2RtYWJ1Zl9iYWNr X3JpbmdfaXNyLCAwLAotCQkJCQkJTlVMTCwgKHZvaWQqKXJpbmdfaW5mbyk7CisJcmV0ID0gYmlu ZF9pbnRlcmRvbWFpbl9ldnRjaG5fdG9faXJxaGFuZGxlcihkb21pZCwgcnhfcG9ydCwKKwkJCQkJ CSAgICBiYWNrX3JpbmdfaXNyLCAwLAorCQkJCQkJICAgIE5VTEwsICh2b2lkKilyaW5nX2luZm8p OwogCWlmIChyZXQgPCAwKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTMzNiwzNSArMzcz LDM1IEBAIGludCBoeXBlcl9kbWFidWZfaW1wb3J0ZXJfcmluZ2J1Zl9pbml0KGludCBzZG9tYWlu KQogCXJpbmdfaW5mby0+aXJxID0gcmV0OwogCiAJcHJpbnRrKCIlczogYm91bmQgdG8gZXZlbnRj aGFubmVsIHBvcnQ6ICVkICBpcnE6ICVkXG4iLCBfX2Z1bmNfXywKLQkJaW1wb3J0ZXJfcG9ydCwK KwkJcnhfcG9ydCwKIAkJcmluZ19pbmZvLT5pcnEpOwogCi0JcmV0ID0gaHlwZXJfZG1hYnVmX3Jl Z2lzdGVyX2ltcG9ydGVyX3JpbmcocmluZ19pbmZvKTsKKwlyZXQgPSB4ZW5fY29tbV9hZGRfcnhf cmluZyhyaW5nX2luZm8pOwogCiAJLyogU2V0dXAgY29tbXVuY2F0aW9uIGNoYW5uZWwgaW4gb3Bw b3NpdGUgZGlyZWN0aW9uICovCi0JaWYgKCFoeXBlcl9kbWFidWZfZmluZF9leHBvcnRlcl9yaW5n KHNkb21haW4pKSB7Ci0JCXJldCA9IGh5cGVyX2RtYWJ1Zl9leHBvcnRlcl9yaW5nYnVmX2luaXQo c2RvbWFpbik7CisJaWYgKCF4ZW5fY29tbV9maW5kX3R4X3JpbmcoZG9taWQpKSB7CisJCXJldCA9 IGh5cGVyX2RtYWJ1Zl94ZW5faW5pdF90eF9yYnVmKGRvbWlkKTsKIAl9CiAKIAlyZXR1cm4gcmV0 OwogfQogCiAvKiBjbGVuYXMgdXAgaW1wb3J0ZXIgcmluZyBjcmVhdGUgZm9yIGdpdmVuIHNvdXJj ZSBkb21haW4gKi8KLXZvaWQgaHlwZXJfZG1hYnVmX2ltcG9ydGVyX3JpbmdidWZfY2xlYW51cChp bnQgc2RvbWFpbikKK3ZvaWQgaHlwZXJfZG1hYnVmX3hlbl9jbGVhbnVwX3J4X3JidWYoaW50IGRv bWlkKQogewotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZvX2ltcG9ydCAqcmluZ19pbmZv OworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKIAlzdHJ1Y3QgcGFn ZSAqc2hhcmVkX3Jpbmc7CiAKIAkvKiBjaGVjayBpZiB3ZSBoYXZlIGltcG9ydGVyIHJpbmcgY3Jl YXRlZCBmb3IgZ2l2ZW4gc2RvbWFpbiAqLwotCXJpbmdfaW5mbyA9IGh5cGVyX2RtYWJ1Zl9maW5k X2ltcG9ydGVyX3Jpbmcoc2RvbWFpbik7CisJcmluZ19pbmZvID0geGVuX2NvbW1fZmluZF9yeF9y aW5nKGRvbWlkKTsKIAogCWlmICghcmluZ19pbmZvKQogCQlyZXR1cm47CiAKLQloeXBlcl9kbWFi dWZfcmVtb3ZlX2ltcG9ydGVyX3Jpbmcoc2RvbWFpbik7CisJeGVuX2NvbW1fcmVtb3ZlX3J4X3Jp bmcoZG9taWQpOwogCiAJLyogbm8gbmVlZCB0byBjbG9zZSBldmVudCBjaGFubmVsLCB3aWxsIGJl IGRvbmUgYnkgdGhhdCBmdW5jdGlvbiAqLwotCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocmluZ19p bmZvLT5pcnEsCSh2b2lkKikgcmluZ19pbmZvKTsKKwl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHJp bmdfaW5mby0+aXJxLCAodm9pZCopcmluZ19pbmZvKTsKIAogCS8qIHVubWFwcGluZyBzaGFyZWQg cmluZyBwYWdlICovCiAJc2hhcmVkX3JpbmcgPSB2aXJ0X3RvX3BhZ2UocmluZ19pbmZvLT5yaW5n X2JhY2suc3JpbmcpOwpAQCAtMzc0LDIzICs0MTEsMzkgQEAgdm9pZCBoeXBlcl9kbWFidWZfaW1w b3J0ZXJfcmluZ2J1Zl9jbGVhbnVwKGludCBzZG9tYWluKQogCWtmcmVlKHJpbmdfaW5mbyk7CiB9 CiAKLS8qIGNsZWFucyB1cCBhbGwgZXhwb3J0ZXIvaW1wb3J0ZXIgcmluZ3MgKi8KLXZvaWQgaHlw ZXJfZG1hYnVmX2NsZWFudXBfcmluZ2J1ZnModm9pZCkKK2ludCBoeXBlcl9kbWFidWZfeGVuX2lu aXRfY29tbV9lbnYodm9pZCkKIHsKLQloeXBlcl9kbWFidWZfZm9yZWFjaF9leHBvcnRlcl9yaW5n KGh5cGVyX2RtYWJ1Zl9leHBvcnRlcl9yaW5nYnVmX2NsZWFudXApOwotCWh5cGVyX2RtYWJ1Zl9m b3JlYWNoX2ltcG9ydGVyX3JpbmcoaHlwZXJfZG1hYnVmX2ltcG9ydGVyX3JpbmdidWZfY2xlYW51 cCk7CisJaW50IHJldDsKKworCXhlbl9jb21tX3JpbmdfdGFibGVfaW5pdCgpOworCXJldCA9IHhl bl9jb21tX3NldHVwX2RhdGFfZGlyKCk7CisKKwlyZXR1cm4gcmV0OwogfQogCi1pbnQgaHlwZXJf ZG1hYnVmX3NlbmRfcmVxdWVzdChpbnQgZG9tYWluLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jpbmdf cnEgKnJlcSwgaW50IHdhaXQpCisvKiBjbGVhbnMgdXAgYWxsIHR4L3J4IHJpbmdzICovCitzdGF0 aWMgdm9pZCBoeXBlcl9kbWFidWZfeGVuX2NsZWFudXBfYWxsX3JidWZzKHZvaWQpCiB7Ci0Jc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9mcm9udF9yaW5nICpyaW5nOwotCXN0cnVjdCBoeXBlcl9kbWFidWZf cmluZ19ycSAqbmV3X3JlcTsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19leHBvcnQg KnJpbmdfaW5mbzsKKwl4ZW5fY29tbV9mb3JlYWNoX3R4X3JpbmcoaHlwZXJfZG1hYnVmX3hlbl9j bGVhbnVwX3R4X3JidWYpOworCXhlbl9jb21tX2ZvcmVhY2hfcnhfcmluZyhoeXBlcl9kbWFidWZf eGVuX2NsZWFudXBfcnhfcmJ1Zik7Cit9CisKK3ZvaWQgaHlwZXJfZG1hYnVmX3hlbl9kZXN0cm95 X2NvbW0odm9pZCkKK3sKKwloeXBlcl9kbWFidWZfeGVuX2NsZWFudXBfYWxsX3JidWZzKCk7CisJ eGVuX2NvbW1fZGVzdHJveV9kYXRhX2RpcigpOworfQorCitpbnQgaHlwZXJfZG1hYnVmX3hlbl9z ZW5kX3JlcShpbnQgZG9taWQsIHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICpyZXEsIGludCB3YWl0 KQoreworCXN0cnVjdCB4ZW5fY29tbV9mcm9udF9yaW5nICpyaW5nOworCXN0cnVjdCBoeXBlcl9k bWFidWZfcmVxICpuZXdfcmVxOworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKnJpbmdf aW5mbzsKIAlpbnQgbm90aWZ5OwogCWludCB0aW1lb3V0ID0gMTAwMDsKIAogCS8qIGZpbmQgYSBy aW5nIGluZm8gZm9yIHRoZSBjaGFubmVsICovCi0JcmluZ19pbmZvID0gaHlwZXJfZG1hYnVmX2Zp bmRfZXhwb3J0ZXJfcmluZyhkb21haW4pOworCXJpbmdfaW5mbyA9IHhlbl9jb21tX2ZpbmRfdHhf cmluZyhkb21pZCk7CiAJaWYgKCFyaW5nX2luZm8pIHsKIAkJcHJpbnRrKCJDYW4ndCBmaW5kIHJp bmcgaW5mbyBmb3IgdGhlIGNoYW5uZWxcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTQwNyw2 ICs0NjAsOCBAQCBpbnQgaHlwZXJfZG1hYnVmX3NlbmRfcmVxdWVzdChpbnQgZG9tYWluLCBzdHJ1 Y3QgaHlwZXJfZG1hYnVmX3JpbmdfcnEgKnJlcSwgaW50CiAJCXJldHVybiAtRUlPOwogCX0KIAor CXJlcS0+cmVxdWVzdF9pZCA9IHhlbl9jb21tX25leHRfcmVxX2lkKCk7CisKIAkvKiB1cGRhdGUg cmVxX3BlbmRpbmcgd2l0aCBjdXJyZW50IHJlcXVlc3QgKi8KIAltZW1jcHkoJnJlcV9wZW5kaW5n LCByZXEsIHNpemVvZihyZXFfcGVuZGluZykpOwogCkBAIC00MzgsMTkgKzQ5MywxOSBAQCBpbnQg aHlwZXJfZG1hYnVmX3NlbmRfcmVxdWVzdChpbnQgZG9tYWluLCBzdHJ1Y3QgaHlwZXJfZG1hYnVm X3JpbmdfcnEgKnJlcSwgaW50CiB9CiAKIC8qIElTUiBmb3IgaGFuZGxpbmcgcmVxdWVzdCAqLwot c3RhdGljIGlycXJldHVybl90IGh5cGVyX2RtYWJ1Zl9iYWNrX3JpbmdfaXNyKGludCBpcnEsIHZv aWQgKmluZm8pCitzdGF0aWMgaXJxcmV0dXJuX3QgYmFja19yaW5nX2lzcihpbnQgaXJxLCB2b2lk ICppbmZvKQogewogCVJJTkdfSURYIHJjLCBycDsKLQlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jpbmdf cnEgcmVxOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycCByZXNwOworCXN0cnVjdCBoeXBl cl9kbWFidWZfcmVxIHJlcTsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jlc3AgcmVzcDsKIAogCWlu dCBub3RpZnksIG1vcmVfdG9fZG87CiAJaW50IHJldDsKIAotCXN0cnVjdCBoeXBlcl9kbWFidWZf cmluZ19pbmZvX2ltcG9ydCAqcmluZ19pbmZvOwotCXN0cnVjdCBoeXBlcl9kbWFidWZfYmFja19y aW5nICpyaW5nOworCXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKnJpbmdfaW5mbzsKKwlz dHJ1Y3QgeGVuX2NvbW1fYmFja19yaW5nICpyaW5nOwogCi0JcmluZ19pbmZvID0gKHN0cnVjdCBo eXBlcl9kbWFidWZfcmluZ19pbmZvX2ltcG9ydCAqKWluZm87CisJcmluZ19pbmZvID0gKHN0cnVj dCB4ZW5fY29tbV9yeF9yaW5nX2luZm8gKilpbmZvOwogCXJpbmcgPSAmcmluZ19pbmZvLT5yaW5n X2JhY2s7CiAKIAlkbyB7CkBAIC00OTAsMTcgKzU0NSwxNyBAQCBzdGF0aWMgaXJxcmV0dXJuX3Qg aHlwZXJfZG1hYnVmX2JhY2tfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKIH0KIAogLyog SVNSIGZvciBoYW5kbGluZyByZXNwb25zZXMgKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBoeXBlcl9k bWFidWZfZnJvbnRfcmluZ19pc3IoaW50IGlycSwgdm9pZCAqaW5mbykKK3N0YXRpYyBpcnFyZXR1 cm5fdCBmcm9udF9yaW5nX2lzcihpbnQgaXJxLCB2b2lkICppbmZvKQogewogCS8qIGZyb250IHJp bmcgb25seSBjYXJlIGFib3V0IHJlc3BvbnNlIGZyb20gYmFjayAqLwotCXN0cnVjdCBoeXBlcl9k bWFidWZfcmluZ19ycCAqcmVzcDsKKwlzdHJ1Y3QgaHlwZXJfZG1hYnVmX3Jlc3AgKnJlc3A7CiAJ UklOR19JRFggaSwgcnA7CiAJaW50IG1vcmVfdG9fZG8sIHJldDsKIAotCXN0cnVjdCBoeXBlcl9k bWFidWZfcmluZ19pbmZvX2V4cG9ydCAqcmluZ19pbmZvOwotCXN0cnVjdCBoeXBlcl9kbWFidWZf ZnJvbnRfcmluZyAqcmluZzsKKwlzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpyaW5nX2lu Zm87CisJc3RydWN0IHhlbl9jb21tX2Zyb250X3JpbmcgKnJpbmc7CiAKLQlyaW5nX2luZm8gPSAo c3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX2luZm9fZXhwb3J0ICopaW5mbzsKKwlyaW5nX2luZm8g PSAoc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqKWluZm87CiAJcmluZyA9ICZyaW5nX2lu Zm8tPnJpbmdfZnJvbnQ7CiAKIAlkbyB7CkBAIC01MTgsNyArNTczLDcgQEAgc3RhdGljIGlycXJl dHVybl90IGh5cGVyX2RtYWJ1Zl9mcm9udF9yaW5nX2lzcihpbnQgaXJxLCB2b2lkICppbmZvKQog CQkJaWYgKHJlc3AtPnN0YXR1cyA9PSBIWVBFUl9ETUFCVUZfUkVRX05FRURTX0ZPTExPV19VUCkg ewogCQkJCS8qIHBhcnNpbmcgcmVzcG9uc2UgKi8KIAkJCQlyZXQgPSBoeXBlcl9kbWFidWZfbXNn X3BhcnNlKHJpbmdfaW5mby0+cmRvbWFpbiwKLQkJCQkJCQkoc3RydWN0IGh5cGVyX2RtYWJ1Zl9y aW5nX3JxICopcmVzcCk7CisJCQkJCQkJKHN0cnVjdCBoeXBlcl9kbWFidWZfcmVxICopcmVzcCk7 CiAKIAkJCQlpZiAocmV0IDwgMCkgewogCQkJCQlwcmludGsoImdldHRpbmcgZXJyb3Igd2hpbGUg cGFyc2luZyByZXNwb25zZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFi dWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVm L3hlbi9oeXBlcl9kbWFidWZfeGVuX2NvbW0uaAppbmRleCA0YWIwMzFhLi5iYTQxZTlkIDEwMDY0 NAotLS0gYS9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29t bS5oCisrKyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9j b21tLmgKQEAgLTMsMjcgKzMsMTQgQEAKIAogI2luY2x1ZGUgInhlbi9pbnRlcmZhY2UvaW8vcmlu Zy5oIgogI2luY2x1ZGUgInhlbi94ZW5idXMuaCIKKyNpbmNsdWRlICIuLi9oeXBlcl9kbWFidWZf bXNnLmgiCiAKICNkZWZpbmUgTUFYX05VTUJFUl9PRl9PUEVSQU5EUyA5CiAKLXN0cnVjdCBoeXBl cl9kbWFidWZfcmluZ19ycSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCByZXF1ZXN0X2lkOwotICAg ICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOwotICAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZDsK LSAgICAgICAgdW5zaWduZWQgaW50IG9wZXJhbmRzW01BWF9OVU1CRVJfT0ZfT1BFUkFORFNdOwot fTsKLQotc3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX3JwIHsKLSAgICAgICAgdW5zaWduZWQgaW50 IHJlc3BvbnNlX2lkOwotICAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzOwotICAgICAgICB1bnNp Z25lZCBpbnQgY29tbWFuZDsKLSAgICAgICAgdW5zaWduZWQgaW50IG9wZXJhbmRzW01BWF9OVU1C RVJfT0ZfT1BFUkFORFNdOwotfTsKK0RFRklORV9SSU5HX1RZUEVTKHhlbl9jb21tLCBzdHJ1Y3Qg aHlwZXJfZG1hYnVmX3JlcSwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXNwKTsKIAotREVGSU5FX1JJ TkdfVFlQRVMoaHlwZXJfZG1hYnVmLCBzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfcnEsIHN0cnVj dCBoeXBlcl9kbWFidWZfcmluZ19ycCk7Ci0KLXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZv X2V4cG9ydCB7Ci0gICAgICAgIHN0cnVjdCBoeXBlcl9kbWFidWZfZnJvbnRfcmluZyByaW5nX2Zy b250Oworc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyB7CisgICAgICAgIHN0cnVjdCB4ZW5f Y29tbV9mcm9udF9yaW5nIHJpbmdfZnJvbnQ7CiAJaW50IHJkb21haW47CiAgICAgICAgIGludCBn cmVmX3Jpbmc7CiAgICAgICAgIGludCBpcnE7CkBAIC0zMSwzOSArMTgsMzUgQEAgc3RydWN0IGh5 cGVyX2RtYWJ1Zl9yaW5nX2luZm9fZXhwb3J0IHsKIAlzdHJ1Y3QgeGVuYnVzX3dhdGNoIHdhdGNo OwogfTsKIAotc3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX2luZm9faW1wb3J0IHsKK3N0cnVjdCB4 ZW5fY29tbV9yeF9yaW5nX2luZm8gewogICAgICAgICBpbnQgc2RvbWFpbjsKICAgICAgICAgaW50 IGlycTsKICAgICAgICAgaW50IGV2dGNobjsKLSAgICAgICAgc3RydWN0IGh5cGVyX2RtYWJ1Zl9i YWNrX3JpbmcgcmluZ19iYWNrOworICAgICAgICBzdHJ1Y3QgeGVuX2NvbW1fYmFja19yaW5nIHJp bmdfYmFjazsKIAlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiB1bm1hcF9vcDsKIH07CiAK LWludDMyX3QgaHlwZXJfZG1hYnVmX2dldF9kb21pZCh2b2lkKTsKLWludDMyX3QgaHlwZXJfZG1h YnVmX3NldHVwX2RhdGFfZGlyKHZvaWQpOwotaW50MzJfdCBoeXBlcl9kbWFidWZfZGVzdHJveV9k YXRhX2Rpcih2b2lkKTsKK2ludCBoeXBlcl9kbWFidWZfZ2V0X2RvbWlkKHZvaWQpOwogCi1pbnQg aHlwZXJfZG1hYnVmX25leHRfcmVxX2lkX2V4cG9ydCh2b2lkKTsKK2ludCBoeXBlcl9kbWFidWZf eGVuX2luaXRfY29tbV9lbnYodm9pZCk7CiAKIC8qIGV4cG9ydGVyIG5lZWRzIHRvIGdlbmVyYXRl ZCBpbmZvIGZvciBwYWdlIHNoYXJpbmcgKi8KLWludCBoeXBlcl9kbWFidWZfZXhwb3J0ZXJfcmlu Z2J1Zl9pbml0KGludCByZG9tYWluKTsKK2ludCBoeXBlcl9kbWFidWZfeGVuX2luaXRfdHhfcmJ1 ZihpbnQgZG9taWQpOwogCi0vKiBpbXBvcnRlciBuZWVkcyB0byBrbm93IGFib3V0IHNoYXJlZCBw YWdlIGFuZCBwb3J0IG51bWJlcnMgZm9yIHJpbmcgYnVmZmVyIGFuZCBldmVudCBjaGFubmVsICov Ci1pbnQgaHlwZXJfZG1hYnVmX2ltcG9ydGVyX3JpbmdidWZfaW5pdChpbnQgc2RvbWFpbik7Cisv KiBpbXBvcnRlciBuZWVkcyB0byBrbm93IGFib3V0IHNoYXJlZCBwYWdlIGFuZCBwb3J0IG51bWJl cnMKKyAqIGZvciByaW5nIGJ1ZmZlciBhbmQgZXZlbnQgY2hhbm5lbAorICovCitpbnQgaHlwZXJf ZG1hYnVmX3hlbl9pbml0X3J4X3JidWYoaW50IGRvbWlkKTsKIAogLyogY2xlYW5zIHVwIGV4cG9y dGVyIHJpbmcgY3JlYXRlZCBmb3IgZ2l2ZW4gZG9tYWluICovCi12b2lkIGh5cGVyX2RtYWJ1Zl9l eHBvcnRlcl9yaW5nYnVmX2NsZWFudXAoaW50IHJkb21haW4pOwordm9pZCBoeXBlcl9kbWFidWZf eGVuX2NsZWFudXBfdHhfcmJ1ZihpbnQgZG9taWQpOwogCiAvKiBjbGVhbnMgdXAgaW1wb3J0ZXIg cmluZyBjcmVhdGVkIGZvciBnaXZlbiBkb21haW4gKi8KLXZvaWQgaHlwZXJfZG1hYnVmX2ltcG9y dGVyX3JpbmdidWZfY2xlYW51cChpbnQgc2RvbWFpbik7Cit2b2lkIGh5cGVyX2RtYWJ1Zl94ZW5f Y2xlYW51cF9yeF9yYnVmKGludCBkb21pZCk7CiAKLS8qIGNsZWFucyB1cCBhbGwgZXhwb3J0ZXIv aW1wb3J0ZXIgcmluZ3MgKi8KLXZvaWQgaHlwZXJfZG1hYnVmX2NsZWFudXBfcmluZ2J1ZnModm9p ZCk7Cit2b2lkIGh5cGVyX2RtYWJ1Zl94ZW5fZGVzdHJveV9jb21tKHZvaWQpOwogCiAvKiBzZW5k IHJlcXVlc3QgdG8gdGhlIHJlbW90ZSBkb21haW4gKi8KLWludCBoeXBlcl9kbWFidWZfc2VuZF9y ZXF1ZXN0KGludCBkb21haW4sIHN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19ycSAqcmVxLCBpbnQg d2FpdCk7Ci0KLS8qIGNhbGxlZCBieSBpbnRlcnJ1cHQgKFdPUktRVUVVRSkgKi8KLWludCBoeXBl cl9kbWFidWZfc2VuZF9yZXNwb25zZShzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfcnAqIHJlc3Bv bnNlLCBpbnQgZG9tYWluKTsKK2ludCBoeXBlcl9kbWFidWZfeGVuX3NlbmRfcmVxKGludCBkb21p ZCwgc3RydWN0IGh5cGVyX2RtYWJ1Zl9yZXEgKnJlcSwgaW50IHdhaXQpOwogCiAjZW5kaWYgLy8g X19IWVBFUl9ETUFCVUZfWEVOX0NPTU1fSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9oeXBl cl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMgYi9kcml2ZXJzL3hlbi9o eXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94ZW5fY29tbV9saXN0LmMKaW5kZXggYTA2ODI3 Ni4uMmExZjQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBl cl9kbWFidWZfeGVuX2NvbW1fbGlzdC5jCisrKyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94 ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21tX2xpc3QuYwpAQCAtOSw4MCArOSw3MyBAQAogI2luY2x1 ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIgogI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5f Y29tbV9saXN0LmgiCiAKLURFQ0xBUkVfSEFTSFRBQkxFKGh5cGVyX2RtYWJ1Zl9oYXNoX2ltcG9y dGVyX3JpbmcsIE1BWF9FTlRSWV9JTVBPUlRfUklORyk7Ci1ERUNMQVJFX0hBU0hUQUJMRShoeXBl cl9kbWFidWZfaGFzaF9leHBvcnRlcl9yaW5nLCBNQVhfRU5UUllfRVhQT1JUX1JJTkcpOworREVD TEFSRV9IQVNIVEFCTEUoeGVuX2NvbW1fdHhfcmluZ19oYXNoLCBNQVhfRU5UUllfVFhfUklORyk7 CitERUNMQVJFX0hBU0hUQUJMRSh4ZW5fY29tbV9yeF9yaW5nX2hhc2gsIE1BWF9FTlRSWV9SWF9S SU5HKTsKIAotaW50IGh5cGVyX2RtYWJ1Zl9yaW5nX3RhYmxlX2luaXQoKQordm9pZCB4ZW5fY29t bV9yaW5nX3RhYmxlX2luaXQoKQogewotCWhhc2hfaW5pdChoeXBlcl9kbWFidWZfaGFzaF9pbXBv cnRlcl9yaW5nKTsKLQloYXNoX2luaXQoaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZXJfcmluZyk7 Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBoeXBlcl9kbWFidWZfcmluZ190YWJsZV9kZXN0cm95KCkK LXsKLQkvKiBUT0RPOiBjbGVhbnVwIHRhYmxlcyovCi0JcmV0dXJuIDA7CisJaGFzaF9pbml0KHhl bl9jb21tX3J4X3JpbmdfaGFzaCk7CisJaGFzaF9pbml0KHhlbl9jb21tX3R4X3JpbmdfaGFzaCk7 CiB9CiAKLWludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfZXhwb3J0ZXJfcmluZyhzdHJ1Y3QgaHlw ZXJfZG1hYnVmX3JpbmdfaW5mb19leHBvcnQgKnJpbmdfaW5mbykKK2ludCB4ZW5fY29tbV9hZGRf dHhfcmluZyhzdHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICpyaW5nX2luZm8pCiB7Ci0Jc3Ry dWN0IGh5cGVyX2RtYWJ1Zl9leHBvcnRlcl9yaW5nX2luZm8gKmluZm9fZW50cnk7CisJc3RydWN0 IHhlbl9jb21tX3R4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKIAogCWluZm9fZW50cnkg PSBrbWFsbG9jKHNpemVvZigqaW5mb19lbnRyeSksIEdGUF9LRVJORUwpOwogCiAJaW5mb19lbnRy eS0+aW5mbyA9IHJpbmdfaW5mbzsKIAotCWhhc2hfYWRkKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9y dGVyX3JpbmcsICZpbmZvX2VudHJ5LT5ub2RlLAorCWhhc2hfYWRkKHhlbl9jb21tX3R4X3Jpbmdf aGFzaCwgJmluZm9fZW50cnktPm5vZGUsCiAJCWluZm9fZW50cnktPmluZm8tPnJkb21haW4pOwog CiAJcmV0dXJuIDA7CiB9CiAKLWludCBoeXBlcl9kbWFidWZfcmVnaXN0ZXJfaW1wb3J0ZXJfcmlu ZyhzdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19pbXBvcnQgKnJpbmdfaW5mbykKK2ludCB4 ZW5fY29tbV9hZGRfcnhfcmluZyhzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2lu Zm8pCiB7Ci0Jc3RydWN0IGh5cGVyX2RtYWJ1Zl9pbXBvcnRlcl9yaW5nX2luZm8gKmluZm9fZW50 cnk7CisJc3RydWN0IHhlbl9jb21tX3J4X3JpbmdfaW5mb19lbnRyeSAqaW5mb19lbnRyeTsKIAog CWluZm9fZW50cnkgPSBrbWFsbG9jKHNpemVvZigqaW5mb19lbnRyeSksIEdGUF9LRVJORUwpOwog CiAJaW5mb19lbnRyeS0+aW5mbyA9IHJpbmdfaW5mbzsKIAotCWhhc2hfYWRkKGh5cGVyX2RtYWJ1 Zl9oYXNoX2ltcG9ydGVyX3JpbmcsICZpbmZvX2VudHJ5LT5ub2RlLAorCWhhc2hfYWRkKHhlbl9j b21tX3J4X3JpbmdfaGFzaCwgJmluZm9fZW50cnktPm5vZGUsCiAJCWluZm9fZW50cnktPmluZm8t PnNkb21haW4pOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19p bmZvX2V4cG9ydCAqaHlwZXJfZG1hYnVmX2ZpbmRfZXhwb3J0ZXJfcmluZyhpbnQgZG9taWQpCitz dHJ1Y3QgeGVuX2NvbW1fdHhfcmluZ19pbmZvICp4ZW5fY29tbV9maW5kX3R4X3JpbmcoaW50IGRv bWlkKQogewotCXN0cnVjdCBoeXBlcl9kbWFidWZfZXhwb3J0ZXJfcmluZ19pbmZvICppbmZvX2Vu dHJ5OworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CiAJ aW50IGJrdDsKIAotCWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfZXhwb3J0ZXJfcmlu ZywgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQorCWhhc2hfZm9yX2VhY2goeGVuX2NvbW1fdHhfcmlu Z19oYXNoLCBia3QsIGluZm9fZW50cnksIG5vZGUpCiAJCWlmKGluZm9fZW50cnktPmluZm8tPnJk b21haW4gPT0gZG9taWQpCiAJCQlyZXR1cm4gaW5mb19lbnRyeS0+aW5mbzsKIAogCXJldHVybiBO VUxMOwogfQogCi1zdHJ1Y3QgaHlwZXJfZG1hYnVmX3JpbmdfaW5mb19pbXBvcnQgKmh5cGVyX2Rt YWJ1Zl9maW5kX2ltcG9ydGVyX3JpbmcoaW50IGRvbWlkKQorc3RydWN0IHhlbl9jb21tX3J4X3Jp bmdfaW5mbyAqeGVuX2NvbW1fZmluZF9yeF9yaW5nKGludCBkb21pZCkKIHsKLQlzdHJ1Y3QgaHlw ZXJfZG1hYnVmX2ltcG9ydGVyX3JpbmdfaW5mbyAqaW5mb19lbnRyeTsKKwlzdHJ1Y3QgeGVuX2Nv bW1fcnhfcmluZ19pbmZvX2VudHJ5ICppbmZvX2VudHJ5OwogCWludCBia3Q7CiAKLQloYXNoX2Zv cl9lYWNoKGh5cGVyX2RtYWJ1Zl9oYXNoX2ltcG9ydGVyX3JpbmcsIGJrdCwgaW5mb19lbnRyeSwg bm9kZSkKKwloYXNoX2Zvcl9lYWNoKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgYmt0LCBpbmZvX2Vu dHJ5LCBub2RlKQogCQlpZihpbmZvX2VudHJ5LT5pbmZvLT5zZG9tYWluID09IGRvbWlkKQogCQkJ cmV0dXJuIGluZm9fZW50cnktPmluZm87CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IGh5cGVy X2RtYWJ1Zl9yZW1vdmVfZXhwb3J0ZXJfcmluZyhpbnQgZG9taWQpCitpbnQgeGVuX2NvbW1fcmVt b3ZlX3R4X3JpbmcoaW50IGRvbWlkKQogewotCXN0cnVjdCBoeXBlcl9kbWFidWZfZXhwb3J0ZXJf cmluZ19pbmZvICppbmZvX2VudHJ5OworCXN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm9fZW50 cnkgKmluZm9fZW50cnk7CiAJaW50IGJrdDsKIAotCWhhc2hfZm9yX2VhY2goaHlwZXJfZG1hYnVm X2hhc2hfZXhwb3J0ZXJfcmluZywgYmt0LCBpbmZvX2VudHJ5LCBub2RlKQorCWhhc2hfZm9yX2Vh Y2goeGVuX2NvbW1fdHhfcmluZ19oYXNoLCBia3QsIGluZm9fZW50cnksIG5vZGUpCiAJCWlmKGlu Zm9fZW50cnktPmluZm8tPnJkb21haW4gPT0gZG9taWQpIHsKIAkJCWhhc2hfZGVsKCZpbmZvX2Vu dHJ5LT5ub2RlKTsKIAkJCWtmcmVlKGluZm9fZW50cnkpOwpAQCAtOTIsMTIgKzg1LDEyIEBAIGlu dCBoeXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVyX3JpbmcoaW50IGRvbWlkKQogCXJldHVybiAt MTsKIH0KIAotaW50IGh5cGVyX2RtYWJ1Zl9yZW1vdmVfaW1wb3J0ZXJfcmluZyhpbnQgZG9taWQp CitpbnQgeGVuX2NvbW1fcmVtb3ZlX3J4X3JpbmcoaW50IGRvbWlkKQogewotCXN0cnVjdCBoeXBl cl9kbWFidWZfaW1wb3J0ZXJfcmluZ19pbmZvICppbmZvX2VudHJ5OworCXN0cnVjdCB4ZW5fY29t bV9yeF9yaW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CiAJaW50IGJrdDsKIAotCWhhc2hfZm9y X2VhY2goaHlwZXJfZG1hYnVmX2hhc2hfaW1wb3J0ZXJfcmluZywgYmt0LCBpbmZvX2VudHJ5LCBu b2RlKQorCWhhc2hfZm9yX2VhY2goeGVuX2NvbW1fcnhfcmluZ19oYXNoLCBia3QsIGluZm9fZW50 cnksIG5vZGUpCiAJCWlmKGluZm9fZW50cnktPmluZm8tPnNkb21haW4gPT0gZG9taWQpIHsKIAkJ CWhhc2hfZGVsKCZpbmZvX2VudHJ5LT5ub2RlKTsKIAkJCWtmcmVlKGluZm9fZW50cnkpOwpAQCAt MTA3LDI0ICsxMDAsMjYgQEAgaW50IGh5cGVyX2RtYWJ1Zl9yZW1vdmVfaW1wb3J0ZXJfcmluZyhp bnQgZG9taWQpCiAJcmV0dXJuIC0xOwogfQogCi12b2lkIGh5cGVyX2RtYWJ1Zl9mb3JlYWNoX2V4 cG9ydGVyX3Jpbmcodm9pZCAoKmZ1bmMpKGludCByZG9tKSkKK3ZvaWQgeGVuX2NvbW1fZm9yZWFj aF90eF9yaW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKQogewotCXN0cnVjdCBoeXBlcl9kbWFi dWZfZXhwb3J0ZXJfcmluZ19pbmZvICppbmZvX2VudHJ5OworCXN0cnVjdCB4ZW5fY29tbV90eF9y aW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKIAlp bnQgYmt0OwogCi0JaGFzaF9mb3JfZWFjaF9zYWZlKGh5cGVyX2RtYWJ1Zl9oYXNoX2V4cG9ydGVy X3JpbmcsIGJrdCwgdG1wLCBpbmZvX2VudHJ5LCBub2RlKSB7CisJaGFzaF9mb3JfZWFjaF9zYWZl KHhlbl9jb21tX3R4X3JpbmdfaGFzaCwgYmt0LCB0bXAsCisJCQkgICBpbmZvX2VudHJ5LCBub2Rl KSB7CiAJCWZ1bmMoaW5mb19lbnRyeS0+aW5mby0+cmRvbWFpbik7CiAJfQogfQogCi12b2lkIGh5 cGVyX2RtYWJ1Zl9mb3JlYWNoX2ltcG9ydGVyX3Jpbmcodm9pZCAoKmZ1bmMpKGludCBzZG9tKSkK K3ZvaWQgeGVuX2NvbW1fZm9yZWFjaF9yeF9yaW5nKHZvaWQgKCpmdW5jKShpbnQgZG9taWQpKQog ewotCXN0cnVjdCBoeXBlcl9kbWFidWZfaW1wb3J0ZXJfcmluZ19pbmZvICppbmZvX2VudHJ5Owor CXN0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm9fZW50cnkgKmluZm9fZW50cnk7CiAJc3RydWN0 IGhsaXN0X25vZGUgKnRtcDsKIAlpbnQgYmt0OwogCi0JaGFzaF9mb3JfZWFjaF9zYWZlKGh5cGVy X2RtYWJ1Zl9oYXNoX2ltcG9ydGVyX3JpbmcsIGJrdCwgdG1wLCBpbmZvX2VudHJ5LCBub2RlKSB7 CisJaGFzaF9mb3JfZWFjaF9zYWZlKHhlbl9jb21tX3J4X3JpbmdfaGFzaCwgYmt0LCB0bXAsCisJ CQkgICBpbmZvX2VudHJ5LCBub2RlKSB7CiAJCWZ1bmMoaW5mb19lbnRyeS0+aW5mby0+c2RvbWFp bik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBl cl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9o eXBlcl9kbWFidWZfeGVuX2NvbW1fbGlzdC5oCmluZGV4IGZkMTk1OGMuLjE4YjNhZmQgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9jb21t X2xpc3QuaAorKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94 ZW5fY29tbV9saXN0LmgKQEAgLTIsNDAgKzIsMzggQEAKICNkZWZpbmUgX19IWVBFUl9ETUFCVUZf WEVOX0NPTU1fTElTVF9IX18KIAogLyogbnVtYmVyIG9mIGJpdHMgdG8gYmUgdXNlZCBmb3IgZXhw b3J0ZWQgZG1hYnVmcyBoYXNoIHRhYmxlICovCi0jZGVmaW5lIE1BWF9FTlRSWV9FWFBPUlRfUklO RyA3CisjZGVmaW5lIE1BWF9FTlRSWV9UWF9SSU5HIDcKIC8qIG51bWJlciBvZiBiaXRzIHRvIGJl IHVzZWQgZm9yIGltcG9ydGVkIGRtYWJ1ZnMgaGFzaCB0YWJsZSAqLwotI2RlZmluZSBNQVhfRU5U UllfSU1QT1JUX1JJTkcgNworI2RlZmluZSBNQVhfRU5UUllfUlhfUklORyA3CiAKLXN0cnVjdCBo eXBlcl9kbWFidWZfZXhwb3J0ZXJfcmluZ19pbmZvIHsKLSAgICAgICAgc3RydWN0IGh5cGVyX2Rt YWJ1Zl9yaW5nX2luZm9fZXhwb3J0ICppbmZvOworc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5m b19lbnRyeSB7CisgICAgICAgIHN0cnVjdCB4ZW5fY29tbV90eF9yaW5nX2luZm8gKmluZm87CiAg ICAgICAgIHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7CiB9OwogCi1zdHJ1Y3QgaHlwZXJfZG1hYnVm X2ltcG9ydGVyX3JpbmdfaW5mbyB7Ci0gICAgICAgIHN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19p bmZvX2ltcG9ydCAqaW5mbzsKK3N0cnVjdCB4ZW5fY29tbV9yeF9yaW5nX2luZm9fZW50cnkgewor ICAgICAgICBzdHJ1Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICppbmZvOwogICAgICAgICBzdHJ1 Y3QgaGxpc3Rfbm9kZSBub2RlOwogfTsKIAotaW50IGh5cGVyX2RtYWJ1Zl9yaW5nX3RhYmxlX2lu aXQodm9pZCk7Cit2b2lkIHhlbl9jb21tX3JpbmdfdGFibGVfaW5pdCh2b2lkKTsKIAotaW50IGh5 cGVyX2RtYWJ1Zl9yaW5nX3RhYmxlX2Rlc3Ryb3kodm9pZCk7CitpbnQgeGVuX2NvbW1fYWRkX3R4 X3Jpbmcoc3RydWN0IHhlbl9jb21tX3R4X3JpbmdfaW5mbyAqcmluZ19pbmZvKTsKIAotaW50IGh5 cGVyX2RtYWJ1Zl9yZWdpc3Rlcl9leHBvcnRlcl9yaW5nKHN0cnVjdCBoeXBlcl9kbWFidWZfcmlu Z19pbmZvX2V4cG9ydCAqcmluZ19pbmZvKTsKK2ludCB4ZW5fY29tbV9hZGRfcnhfcmluZyhzdHJ1 Y3QgeGVuX2NvbW1fcnhfcmluZ19pbmZvICpyaW5nX2luZm8pOwogCi1pbnQgaHlwZXJfZG1hYnVm X3JlZ2lzdGVyX2ltcG9ydGVyX3Jpbmcoc3RydWN0IGh5cGVyX2RtYWJ1Zl9yaW5nX2luZm9faW1w b3J0ICpyaW5nX2luZm8pOworaW50IHhlbl9jb21tX3JlbW92ZV90eF9yaW5nKGludCBkb21pZCk7 CiAKLXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZvX2V4cG9ydCAqaHlwZXJfZG1hYnVmX2Zp bmRfZXhwb3J0ZXJfcmluZyhpbnQgZG9taWQpOworaW50IHhlbl9jb21tX3JlbW92ZV9yeF9yaW5n KGludCBkb21pZCk7CiAKLXN0cnVjdCBoeXBlcl9kbWFidWZfcmluZ19pbmZvX2ltcG9ydCAqaHlw ZXJfZG1hYnVmX2ZpbmRfaW1wb3J0ZXJfcmluZyhpbnQgZG9taWQpOworc3RydWN0IHhlbl9jb21t X3R4X3JpbmdfaW5mbyAqeGVuX2NvbW1fZmluZF90eF9yaW5nKGludCBkb21pZCk7CiAKLWludCBo eXBlcl9kbWFidWZfcmVtb3ZlX2V4cG9ydGVyX3JpbmcoaW50IGRvbWlkKTsKLQotaW50IGh5cGVy X2RtYWJ1Zl9yZW1vdmVfaW1wb3J0ZXJfcmluZyhpbnQgZG9taWQpOworc3RydWN0IHhlbl9jb21t X3J4X3JpbmdfaW5mbyAqeGVuX2NvbW1fZmluZF9yeF9yaW5nKGludCBkb21pZCk7CiAKIC8qIGl0 ZXJhdGVzIG92ZXIgYWxsIGV4cG9ydGVyIHJpbmdzIGFuZCBjYWxscyBwcm92aWRlZCBmdW5jdGlv biBmb3IgZWFjaCBvZiB0aGVtICovCi12b2lkIGh5cGVyX2RtYWJ1Zl9mb3JlYWNoX2V4cG9ydGVy X3Jpbmcodm9pZCAoKmZ1bmMpKGludCByZG9tKSk7Cit2b2lkIHhlbl9jb21tX2ZvcmVhY2hfdHhf cmluZyh2b2lkICgqZnVuYykoaW50IGRvbWlkKSk7CiAKIC8qIGl0ZXJhdGVzIG92ZXIgYWxsIGlt cG9ydGVyIHJpbmdzIGFuZCBjYWxscyBwcm92aWRlZCBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGVt ICovCi12b2lkIGh5cGVyX2RtYWJ1Zl9mb3JlYWNoX2ltcG9ydGVyX3Jpbmcodm9pZCAoKmZ1bmMp KGludCBzZG9tKSk7Cit2b2lkIHhlbl9jb21tX2ZvcmVhY2hfcnhfcmluZyh2b2lkICgqZnVuYyko aW50IGRvbWlkKSk7CiAKICNlbmRpZiAvLyBfX0hZUEVSX0RNQUJVRl9YRU5fQ09NTV9MSVNUX0hf XwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZf eGVuX2Rydi5jIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVu X2Rydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Yjg3MWEKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL3hlbi9oeXBlcl9kbWFidWYveGVuL2h5cGVyX2RtYWJ1Zl94 ZW5fZHJ2LmMKQEAgLTAsMCArMSwyMiBAQAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVk ZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSAiLi4vaHlwZXJfZG1hYnVmX21zZy5oIgor I2luY2x1ZGUgIi4uL2h5cGVyX2RtYWJ1Zl9kcnYuaCIKKyNpbmNsdWRlICJoeXBlcl9kbWFidWZf eGVuX2Rydi5oIgorI2luY2x1ZGUgImh5cGVyX2RtYWJ1Zl94ZW5fY29tbS5oIgorI2luY2x1ZGUg Imh5cGVyX2RtYWJ1Zl94ZW5fc2htLmgiCisKK3N0cnVjdCBoeXBlcl9kbWFidWZfYmFja2VuZF9v cHMgeGVuX2JhY2tlbmRfb3BzID0geworCS5nZXRfdm1faWQgPSBoeXBlcl9kbWFidWZfZ2V0X2Rv bWlkLAorCS5zaGFyZV9wYWdlcyA9IGh5cGVyX2RtYWJ1Zl94ZW5fc2hhcmVfcGFnZXMsCisJLnVu c2hhcmVfcGFnZXMgPSBoeXBlcl9kbWFidWZfeGVuX3Vuc2hhcmVfcGFnZXMsCisJLm1hcF9zaGFy ZWRfcGFnZXMgPSAodm9pZCAqKWh5cGVyX2RtYWJ1Zl94ZW5fbWFwX3NoYXJlZF9wYWdlcywKKwku dW5tYXBfc2hhcmVkX3BhZ2VzID0gaHlwZXJfZG1hYnVmX3hlbl91bm1hcF9zaGFyZWRfcGFnZXMs CisJLmluaXRfY29tbV9lbnYgPSBoeXBlcl9kbWFidWZfeGVuX2luaXRfY29tbV9lbnYsCisJLmRl c3Ryb3lfY29tbSA9IGh5cGVyX2RtYWJ1Zl94ZW5fZGVzdHJveV9jb21tLAorCS5pbml0X3J4X2No ID0gaHlwZXJfZG1hYnVmX3hlbl9pbml0X3J4X3JidWYsCisJLmluaXRfdHhfY2ggPSBoeXBlcl9k bWFidWZfeGVuX2luaXRfdHhfcmJ1ZiwKKwkuc2VuZF9yZXEgPSBoeXBlcl9kbWFidWZfeGVuX3Nl bmRfcmVxLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlw ZXJfZG1hYnVmX3hlbl9kcnYuaCBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJf ZG1hYnVmX3hlbl9kcnYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzUx YzA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBl cl9kbWFidWZfeGVuX2Rydi5oCkBAIC0wLDAgKzEsMjAgQEAKKyNpZm5kZWYgX19IWVBFUl9ETUFC VUZfWEVOX0RSVl9IX18KKyNkZWZpbmUgX19IWVBFUl9ETUFCVUZfWEVOX0RSVl9IX18KKyNpbmNs dWRlIDx4ZW4vaW50ZXJmYWNlL2dyYW50X3RhYmxlLmg+CisKK2V4dGVybiBzdHJ1Y3QgaHlwZXJf ZG1hYnVmX2JhY2tlbmRfb3BzIHhlbl9iYWNrZW5kX29wczsKKworLyogTWFpbiBwdXJwb3NlIG9m IHRoaXMgc3RydWN0dXJlIGlzIHRvIGtlZXAKKyAqIGFsbCByZWZlcmVuY2VzIGNyZWF0ZWQgb3Ig YWNxdWlyZWQgZm9yIHNoYXJpbmcKKyAqIHBhZ2VzIHdpdGggYW5vdGhlciBkb21haW4gZm9yIGZy ZWVpbmcgdGhvc2UgbGF0ZXIKKyAqIHdoZW4gdW5zaGFyaW5nLgorICovCitzdHJ1Y3QgeGVuX3No YXJlZF9wYWdlc19pbmZvIHsKKyAgICAgICAgZ3JhbnRfcmVmX3QgbHZsM19ncmVmOyAvKiB0b3Ag bGV2ZWwgcmVmaWQgKi8KKyAgICAgICAgZ3JhbnRfcmVmX3QgKmx2bDNfdGFibGU7IC8qIHBhZ2Ug b2YgdG9wIGxldmVsIGFkZHJlc3NpbmcsIGl0IGNvbnRhaW5zIHJlZmlkcyBvZiAybmQgbGV2ZWwg cGFnZXMgKi8KKyAgICAgICAgZ3JhbnRfcmVmX3QgKmx2bDJfdGFibGU7IC8qIHRhYmxlIG9mIDJu ZCBsZXZlbCBwYWdlcywgdGhhdCBjb250YWlucyByZWZpZHMgdG8gZGF0YSBwYWdlcyAqLworICAg ICAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiogdW5tYXBfb3BzOyAvKiB1bm1hcCBv cHMgZm9yIG1hcHBlZCBwYWdlcyAqLworICAgICAgICBzdHJ1Y3QgcGFnZSAqKmRhdGFfcGFnZXM7 IC8qIGRhdGEgcGFnZXMgdG8gYmUgdW5tYXBwZWQgKi8KK307CisKKyNlbmRpZiAvLyBfX0hZUEVS X0RNQUJVRl9YRU5fQ09NTV9IX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1 Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uYyBiL2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94 ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jMDA0NWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVm L3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5jCkBAIC0wLDAgKzEsMzU2IEBACisjaW5jbHVkZSA8 bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3hl bi9wYWdlLmg+CisjaW5jbHVkZSAiaHlwZXJfZG1hYnVmX3hlbl9kcnYuaCIKKworI2RlZmluZSBS RUZTX1BFUl9QQUdFIChQQUdFX1NJWkUvc2l6ZW9mKGdyYW50X3JlZl90KSkKKworLyoKKyAqIENy ZWF0ZXMgMiBsZXZlbCBwYWdlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgZm9yIHJlZmVyZW5jaW5nIHNo YXJlZCBwYWdlcy4KKyAqIFRvcCBsZXZlbCBwYWdlIGlzIGEgc2luZ2xlIHBhZ2UgdGhhdCBjb250 YWlucyB1cCB0byAxMDI0IHJlZmlkcyB0aGF0CisgKiBwb2ludCB0byAybmQgbGV2ZWwgcGFnZXMu CisgKiBFYWNoIDJuZCBsZXZlbCBwYWdlIGNvbnRhaW5zIHVwIHRvIDEwMjQgcmVmaWRzIHRoYXQg cG9pbnQgdG8gc2hhcmVkCisgKiBkYXRhIHBhZ2VzLgorICogVGhlcmUgd2lsbCBhbHdheXMgYmUg b25lIHRvcCBsZXZlbCBwYWdlIGFuZCBudW1iZXIgb2YgMm5kIGxldmVsIHBhZ2VzCisgKiBkZXBl bmRzIG9uIG51bWJlciBvZiBzaGFyZWQgZGF0YSBwYWdlcy4KKyAqCisgKiAgICAgIDNyZCBsZXZl bCBwYWdlICAgICAgICAgICAgICAgIDJuZCBsZXZlbCBwYWdlcyAgICAgICAgICAgIERhdGEgcGFn ZXMKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAgIOKUjD4rLS0tLS0tLS0tLS0tLS0t LS0tLS0rIOKUjC0tLT4rLS0tLS0tLS0tLS0tKworICogfDJuZCBsZXZlbCBwYWdlIDAgcmVmaWQg ICB8LS0t4pSYIHxEYXRhIHBhZ2UgMCByZWZpZCAgIHwt4pSYICAgIHxEYXRhIHBhZ2UgMCB8Cisg KiB8Mm5kIGxldmVsIHBhZ2UgMSByZWZpZCAgIHwtLS3ilJAgfERhdGEgcGFnZSAxIHJlZmlkICAg fC3ilJAgICAgKy0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgIC4uLiAgICAgICAgICAgfCAg IHwgfCAgICAgLi4uLiAgICAgICAgICAgfCB8CisgKiB8Mm5kIGxldmVsIHBhZ2UgMTAyMyByZWZp ZHwt4pSQIHwgfERhdGEgcGFnZSAxMDIzIHJlZmlkfCDilJQtLS0+Ky0tLS0tLS0tLS0tLSsKKyAq ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyB8IHwgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKyAg ICAgIHxEYXRhIHBhZ2UgMSB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwg4pSUPistLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAxMDI0IHJlZmlkfAorICogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICB8RGF0YSBwYWdlIDEwMjUgcmVmaWR8CisgKiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICAgLi4uICAgICAgICAgIHwKKyAqICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgfERhdGEgcGFnZSAyMDQ3IHJlZmlkfAorICog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisg KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAgICAgIC4uLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pSU LS0+Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8RGF0YSBwYWdlIDEwNDc1NTIgcmVmaWR8CisgKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHxEYXRhIHBhZ2UgMTA0NzU1MyByZWZpZHwKKyAqICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAgICAuLi4gICAgICAgICAgICAgfAorICogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8RGF0YSBwYWdlIDEwNDg1NzUgcmVmaWR8LS0+Ky0tLS0t LS0tLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKyAgIHxEYXRhIHBhZ2UgMTA0ODU3NSB8CisgKiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0t LS0tLS0tLS0tLS0tKworICoKKyAqIFVzaW5nIHN1Y2ggMiBsZXZlbCBzdHJ1Y3R1cmUgaXQgaXMg cG9zc2libGUgdG8gcmVmZXJlbmNlIHVwIHRvIDRHQiBvZgorICogc2hhcmVkIGRhdGEgdXNpbmcg c2luZ2xlIHJlZmlkIHBvaW50aW5nIHRvIHRvcCBsZXZlbCBwYWdlLgorICoKKyAqIFJldHVybnMg cmVmaWQgb2YgdG9wIGxldmVsIHBhZ2UuCisgKi8KK2ludCBoeXBlcl9kbWFidWZfeGVuX3NoYXJl X3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBkb21pZCwgaW50IG5lbnRzLAorCQkJCSB2 b2lkICoqcmVmc19pbmZvKQoreworCWdyYW50X3JlZl90IGx2bDNfZ3JlZjsKKwlncmFudF9yZWZf dCAqbHZsMl90YWJsZTsKKwlncmFudF9yZWZfdCAqbHZsM190YWJsZTsKKworCS8qCisJICogQ2Fs Y3VsYXRlIG51bWJlciBvZiBwYWdlcyBuZWVkZWQgZm9yIDJuZCBsZXZlbCBhZGRyZXNpbmc6CisJ ICovCisJaW50IG5fbHZsMl9ncmVmcyA9IChuZW50cy9SRUZTX1BFUl9QQUdFICsKKwkJCSAgICgo bmVudHMgJSBSRUZTX1BFUl9QQUdFKSA/IDE6IDApKTsKKworCXN0cnVjdCB4ZW5fc2hhcmVkX3Bh Z2VzX2luZm8gKnNoX3BhZ2VzX2luZm87CisJaW50IGk7CisKKwlsdmwzX3RhYmxlID0gKGdyYW50 X3JlZl90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAxKTsKKwlsdmwyX3RhYmxlID0g KGdyYW50X3JlZl90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBuX2x2bDJfZ3JlZnMp OworCisJc2hfcGFnZXNfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpzaF9wYWdlc19pbmZvKSwgR0ZQ X0tFUk5FTCk7CisJKnJlZnNfaW5mbyA9ICh2b2lkICopc2hfcGFnZXNfaW5mbzsKKworCS8qIHNo YXJlIGRhdGEgcGFnZXMgaW4gcncgbW9kZSovCisJZm9yIChpPTA7IGk8bmVudHM7IGkrKykgewor CQlsdmwyX3RhYmxlW2ldID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGRvbWlkLAorCQkJ CQkJCSAgICBwZm5fdG9fbWZuKHBhZ2VfdG9fcGZuKHBhZ2VzW2ldKSksCisJCQkJCQkJICAgIDAp OworCX0KKworCS8qIFNoYXJlIDJuZCBsZXZlbCBhZGRyZXNzaW5nIHBhZ2VzIGluIHJlYWRvbmx5 IG1vZGUqLworCWZvciAoaT0wOyBpPCBuX2x2bDJfZ3JlZnM7IGkrKykgeworCQlsdmwzX3RhYmxl W2ldID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGRvbWlkLAorCQkJCQkJCSAgIHZpcnRf dG9fbWZuKCh1bnNpZ25lZCBsb25nKWx2bDJfdGFibGUraSpQQUdFX1NJWkUgKSwKKwkJCQkJCQkg ICAxKTsKKwl9CisKKwkvKiBTaGFyZSBsdmwzX3RhYmxlIGluIHJlYWRvbmx5IG1vZGUqLworCWx2 bDNfZ3JlZiA9IGdudHRhYl9ncmFudF9mb3JlaWduX2FjY2Vzcyhkb21pZCwKKwkJCQkJCXZpcnRf dG9fbWZuKCh1bnNpZ25lZCBsb25nKWx2bDNfdGFibGUpLAorCQkJCQkJMSk7CisKKworCS8qIFN0 b3JlIGx2bDNfdGFibGUgcGFnZSB0byBiZSBmcmVlZCBsYXRlciAqLworCXNoX3BhZ2VzX2luZm8t Pmx2bDNfdGFibGUgPSBsdmwzX3RhYmxlOworCisJLyogU3RvcmUgbHZsMl90YWJsZSBwYWdlcyB0 byBiZSBmcmVlZCBsYXRlciAqLworCXNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGUgPSBsdmwyX3Rh YmxlOworCisJLyogU3RvcmUgZXhwb3J0ZWQgcGFnZXMgcmVmaWQgdG8gYmUgdW5zaGFyZWQgbGF0 ZXIgKi8KKwlzaF9wYWdlc19pbmZvLT5sdmwzX2dyZWYgPSBsdmwzX2dyZWY7CisKKwlyZXR1cm4g bHZsM19ncmVmOworfQorCitpbnQgaHlwZXJfZG1hYnVmX3hlbl91bnNoYXJlX3BhZ2VzKHZvaWQg KipyZWZzX2luZm8sIGludCBuZW50cykgeworCXN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8g KnNoX3BhZ2VzX2luZm87CisJaW50IG5fbHZsMl9ncmVmcyA9IChuZW50cy9SRUZTX1BFUl9QQUdF ICsgKChuZW50cyAlIFJFRlNfUEVSX1BBR0UpID8gMTogMCkpOworCWludCBpOworCisJc2hfcGFn ZXNfaW5mbyA9IChzdHJ1Y3QgeGVuX3NoYXJlZF9wYWdlc19pbmZvICopKCpyZWZzX2luZm8pOwor CisJaWYgKHNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUgPT0gTlVMTCB8fAorCSAgICBzaF9wYWdl c19pbmZvLT5sdmwyX3RhYmxlID09ICBOVUxMIHx8CisJICAgIHNoX3BhZ2VzX2luZm8tPmx2bDNf Z3JlZiA9PSAtMSkgeworCQlwcmludGsoImdyZWYgdGFibGUgZm9yIGh5cGVyX2RtYWJ1ZiBhbHJl YWR5IGNsZWFuZWQgdXBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBFbmQgZm9yZWlnbiBh Y2Nlc3MgZm9yIGRhdGEgcGFnZXMsIGJ1dCBkbyBub3QgZnJlZSB0aGVtICovCisJZm9yIChpID0g MDsgaSA8IG5lbnRzOyBpKyspIHsKKwkJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vzcyhz aF9wYWdlc19pbmZvLT5sdmwyX3RhYmxlW2ldKSkgeworCQkJcHJpbnRrKCJyZWZpZCBub3Qgc2hh cmVkICEhXG4iKTsKKwkJfQorCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzX3JlZihzaF9wYWdl c19pbmZvLT5sdmwyX3RhYmxlW2ldLCAwKTsKKwkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNl KHNoX3BhZ2VzX2luZm8tPmx2bDJfdGFibGVbaV0pOworCX0KKworCS8qIEVuZCBmb3JlaWduIGFj Y2VzcyBmb3IgMm5kIGxldmVsIGFkZHJlc3NpbmcgcGFnZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg bl9sdmwyX2dyZWZzOyBpKyspIHsKKwkJaWYgKGdudHRhYl9xdWVyeV9mb3JlaWduX2FjY2Vzcyhz aF9wYWdlc19pbmZvLT5sdmwzX3RhYmxlW2ldKSkgeworCQkJcHJpbnRrKCJyZWZpZCBub3Qgc2hh cmVkICEhXG4iKTsKKwkJfQorCQlpZiAoIWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3NfcmVmKHNo X3BhZ2VzX2luZm8tPmx2bDNfdGFibGVbaV0sIDEpKSB7CisJCQlwcmludGsoInJlZmlkIHN0aWxs IGluIHVzZSEhIVxuIik7CisJCX0KKwkJZ250dGFiX2ZyZWVfZ3JhbnRfcmVmZXJlbmNlKHNoX3Bh Z2VzX2luZm8tPmx2bDNfdGFibGVbaV0pOworCX0KKworCS8qIEVuZCBmb3JlaWduIGFjY2VzcyBm b3IgdG9wIGxldmVsIGFkZHJlc3NpbmcgcGFnZSAqLworCWlmIChnbnR0YWJfcXVlcnlfZm9yZWln bl9hY2Nlc3Moc2hfcGFnZXNfaW5mby0+bHZsM19ncmVmKSkgeworCQlwcmludGsoImdyZWYgbm90 IHNoYXJlZCAhIVxuIik7CisJfQorCisJZ250dGFiX2VuZF9mb3JlaWduX2FjY2Vzc19yZWYoc2hf cGFnZXNfaW5mby0+bHZsM19ncmVmLCAxKTsKKwlnbnR0YWJfZnJlZV9ncmFudF9yZWZlcmVuY2Uo c2hfcGFnZXNfaW5mby0+bHZsM19ncmVmKTsKKworCS8qIGZyZWVpbmcgYWxsIHBhZ2VzIHVzZWQg Zm9yIDIgbGV2ZWwgYWRkcmVzc2luZyAqLworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpc2hf cGFnZXNfaW5mby0+bHZsMl90YWJsZSwgbl9sdmwyX2dyZWZzKTsKKwlmcmVlX3BhZ2VzKCh1bnNp Z25lZCBsb25nKXNoX3BhZ2VzX2luZm8tPmx2bDNfdGFibGUsIDEpOworCisJc2hfcGFnZXNfaW5m by0+bHZsM19ncmVmID0gLTE7CisJc2hfcGFnZXNfaW5mby0+bHZsMl90YWJsZSA9IE5VTEw7CisJ c2hfcGFnZXNfaW5mby0+bHZsM190YWJsZSA9IE5VTEw7CisJa2ZyZWUoc2hfcGFnZXNfaW5mbyk7 CisJc2hfcGFnZXNfaW5mbyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIE1hcHMg cHJvdmlkZWQgdG9wIGxldmVsIHJlZiBpZCBhbmQgdGhlbiByZXR1cm4gYXJyYXkgb2YgcGFnZXMg Y29udGFpbmluZyBkYXRhIHJlZnMuCisgKi8KK3N0cnVjdCBwYWdlICoqIGh5cGVyX2RtYWJ1Zl94 ZW5fbWFwX3NoYXJlZF9wYWdlcyhpbnQgbHZsM19ncmVmLCBpbnQgZG9taWQsIGludCBuZW50cywg dm9pZCAqKnJlZnNfaW5mbykKK3sKKwlzdHJ1Y3QgcGFnZSAqbHZsM190YWJsZV9wYWdlOworCXN0 cnVjdCBwYWdlICoqbHZsMl90YWJsZV9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKmRhdGFfcGFnZXM7 CisJc3RydWN0IHhlbl9zaGFyZWRfcGFnZXNfaW5mbyAqc2hfcGFnZXNfaW5mbzsKKworCWdyYW50 X3JlZl90ICpsdmwzX3RhYmxlOworCWdyYW50X3JlZl90ICpsdmwyX3RhYmxlOworCisJc3RydWN0 IGdudHRhYl9tYXBfZ3JhbnRfcmVmIGx2bDNfbWFwX29wczsKKwlzdHJ1Y3QgZ250dGFiX3VubWFw X2dyYW50X3JlZiBsdmwzX3VubWFwX29wczsKKworCXN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3Jl ZiAqbHZsMl9tYXBfb3BzOworCXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICpsdmwyX3Vu bWFwX29wczsKKworCXN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqZGF0YV9tYXBfb3BzOwor CXN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICpkYXRhX3VubWFwX29wczsKKworCWludCBu ZW50c19sYXN0ID0gbmVudHMgJSBSRUZTX1BFUl9QQUdFOworCWludCBuX2x2bDJfZ3JlZnMgPSAo bmVudHMgLyBSRUZTX1BFUl9QQUdFKSArICgobmVudHNfbGFzdCA+IDApID8gMSA6IDApOworCWlu dCBpLCBqLCBrOworCisJc2hfcGFnZXNfaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCpzaF9wYWdlc19p bmZvKSwgR0ZQX0tFUk5FTCk7CisJKnJlZnNfaW5mbyA9ICh2b2lkICopIHNoX3BhZ2VzX2luZm87 CisKKwlsdmwyX3RhYmxlX3BhZ2VzID0ga2NhbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UqKSwgbl9s dmwyX2dyZWZzLCBHRlBfS0VSTkVMKTsKKwlkYXRhX3BhZ2VzID0ga2NhbGxvYyhzaXplb2Yoc3Ry dWN0IHBhZ2UqKSwgbmVudHMsIEdGUF9LRVJORUwpOworCisJbHZsMl9tYXBfb3BzID0ga2NhbGxv YyhzaXplb2YoKmx2bDJfbWFwX29wcyksIG5fbHZsMl9ncmVmcywgR0ZQX0tFUk5FTCk7CisJbHZs Ml91bm1hcF9vcHMgPSBrY2FsbG9jKHNpemVvZigqbHZsMl91bm1hcF9vcHMpLCBuX2x2bDJfZ3Jl ZnMsIEdGUF9LRVJORUwpOworCisJZGF0YV9tYXBfb3BzID0ga2NhbGxvYyhzaXplb2YoKmRhdGFf bWFwX29wcyksIG5lbnRzLCBHRlBfS0VSTkVMKTsKKwlkYXRhX3VubWFwX29wcyA9IGtjYWxsb2Mo c2l6ZW9mKCpkYXRhX3VubWFwX29wcyksIG5lbnRzLCBHRlBfS0VSTkVMKTsKKworCS8qIE1hcCB0 b3AgbGV2ZWwgYWRkcmVzc2luZyBwYWdlICovCisJaWYgKGdudHRhYl9hbGxvY19wYWdlcygxLCAm bHZsM190YWJsZV9wYWdlKSkgeworCQlwcmludGsoIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7 CisJCXJldHVybiBOVUxMOworCX0KKworCWx2bDNfdGFibGUgPSAoZ3JhbnRfcmVmX3QgKilwZm5f dG9fa2FkZHIocGFnZV90b19wZm4obHZsM190YWJsZV9wYWdlKSk7CisKKwlnbnR0YWJfc2V0X21h cF9vcCgmbHZsM19tYXBfb3BzLCAodW5zaWduZWQgbG9uZylsdmwzX3RhYmxlLCBHTlRNQVBfaG9z dF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCisJCQkgIChncmFudF9yZWZfdClsdmwzX2dyZWYsIGRv bWlkKTsKKworCWdudHRhYl9zZXRfdW5tYXBfb3AoJmx2bDNfdW5tYXBfb3BzLCAodW5zaWduZWQg bG9uZylsdmwzX3RhYmxlLCBHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksIC0xKTsK KworCWlmIChnbnR0YWJfbWFwX3JlZnMoJmx2bDNfbWFwX29wcywgTlVMTCwgJmx2bDNfdGFibGVf cGFnZSwgMSkpIHsKKwkJcHJpbnRrKCJcbnhlbjogZG9tMDogSFlQRVJWSVNPUiBtYXAgZ3JhbnQg cmVmIGZhaWxlZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAobHZsM19tYXBfb3BzLnN0 YXR1cykgeworCQlwcmludGsoIlxueGVuOiBkb20wOiBIWVBFUlZJU09SIG1hcCBncmFudCByZWYg ZmFpbGVkIHN0YXR1cyA9ICVkIiwKKwkJCWx2bDNfbWFwX29wcy5zdGF0dXMpOworCQlyZXR1cm4g TlVMTDsKKwl9IGVsc2UgeworCQlsdmwzX3VubWFwX29wcy5oYW5kbGUgPSBsdmwzX21hcF9vcHMu aGFuZGxlOworCX0KKworCS8qIE1hcCBhbGwgc2Vjb25kIGxldmVsIHBhZ2VzICovCisJaWYgKGdu dHRhYl9hbGxvY19wYWdlcyhuX2x2bDJfZ3JlZnMsIGx2bDJfdGFibGVfcGFnZXMpKSB7CisJCXBy aW50aygiQ2Fubm90IGFsbG9jYXRlIHBhZ2VzXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ Zm9yIChpID0gMDsgaSA8IG5fbHZsMl9ncmVmczsgaSsrKSB7CisJCWx2bDJfdGFibGUgPSAoZ3Jh bnRfcmVmX3QgKilwZm5fdG9fa2FkZHIocGFnZV90b19wZm4obHZsMl90YWJsZV9wYWdlc1tpXSkp OworCQlnbnR0YWJfc2V0X21hcF9vcCgmbHZsMl9tYXBfb3BzW2ldLCAodW5zaWduZWQgbG9uZyls dmwyX3RhYmxlLCBHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBfcmVhZG9ubHksCisJCQkJICBsdmwz X3RhYmxlW2ldLCBkb21pZCk7CisJCWdudHRhYl9zZXRfdW5tYXBfb3AoJmx2bDJfdW5tYXBfb3Bz W2ldLCAodW5zaWduZWQgbG9uZylsdmwyX3RhYmxlLCBHTlRNQVBfaG9zdF9tYXAgfCBHTlRNQVBf cmVhZG9ubHksIC0xKTsKKwl9CisKKwkvKiBVbm1hcCB0b3AgbGV2ZWwgcGFnZSwgYXMgaXQgd29u J3QgYmUgbmVlZGVkIGFueSBsb25nZXIgKi8KKwlpZiAoZ250dGFiX3VubWFwX3JlZnMoJmx2bDNf dW5tYXBfb3BzLCBOVUxMLCAmbHZsM190YWJsZV9wYWdlLCAxKSkgeworCQlwcmludGsoIlx4ZW46 IGNhbm5vdCB1bm1hcCB0b3AgbGV2ZWwgcGFnZVxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwor CWlmIChnbnR0YWJfbWFwX3JlZnMobHZsMl9tYXBfb3BzLCBOVUxMLCBsdmwyX3RhYmxlX3BhZ2Vz LCBuX2x2bDJfZ3JlZnMpKSB7CisJCXByaW50aygiXG54ZW46IGRvbTA6IEhZUEVSVklTT1IgbWFw IGdyYW50IHJlZiBmYWlsZWQiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogQ2hlY2tzIGlm IHBhZ2VzIHdlcmUgbWFwcGVkIGNvcnJlY3RseSAqLworCWZvciAoaSA9IDA7IGkgPCBuX2x2bDJf Z3JlZnM7IGkrKykgeworCQlpZiAobHZsMl9tYXBfb3BzW2ldLnN0YXR1cykgeworCQkJcHJpbnRr KCJcbnhlbjogZG9tMDogSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCBzdGF0dXMgPSAl ZCIsCisJCQkgICAgICAgbHZsMl9tYXBfb3BzW2ldLnN0YXR1cyk7CisJCQlyZXR1cm4gTlVMTDsK KwkJfSBlbHNlIHsKKwkJCWx2bDJfdW5tYXBfb3BzW2ldLmhhbmRsZSA9IGx2bDJfbWFwX29wc1tp XS5oYW5kbGU7CisJCX0KKwl9CisKKwlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKG5lbnRzLCBkYXRh X3BhZ2VzKSkgeworCQlwcmludGsoIkNhbm5vdCBhbGxvY2F0ZSBwYWdlc1xuIik7CisJCXJldHVy biBOVUxMOworCX0KKworCWsgPSAwOworCisJZm9yIChpID0gMDsgaSA8IChuZW50c19sYXN0ID8g bl9sdmwyX2dyZWZzIC0gMSA6IG5fbHZsMl9ncmVmcyk7IGkrKykgeworCQlsdmwyX3RhYmxlID0g cGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKGx2bDJfdGFibGVfcGFnZXNbaV0pKTsKKwkJZm9yIChq ID0gMDsgaiA8IFJFRlNfUEVSX1BBR0U7IGorKykgeworCQkJZ250dGFiX3NldF9tYXBfb3AoJmRh dGFfbWFwX29wc1trXSwKKwkJCQkJICAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIocGFnZV90 b19wZm4oZGF0YV9wYWdlc1trXSkpLAorCQkJCQkgIEdOVE1BUF9ob3N0X21hcCwKKwkJCQkJICBs dmwyX3RhYmxlW2pdLCBkb21pZCk7CisKKwkJCWdudHRhYl9zZXRfdW5tYXBfb3AoJmRhdGFfdW5t YXBfb3BzW2tdLAorCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9f cGZuKGRhdGFfcGFnZXNba10pKSwKKwkJCQkJICAgIEdOVE1BUF9ob3N0X21hcCwgLTEpOworCQkJ aysrOworCQl9CisJfQorCisJLyogZm9yIGdyZWZzIGluIHRoZSBsYXN0IGx2bDIgdGFibGUgcGFn ZSAqLworCWx2bDJfdGFibGUgPSBwZm5fdG9fa2FkZHIocGFnZV90b19wZm4obHZsMl90YWJsZV9w YWdlc1tuX2x2bDJfZ3JlZnMgLSAxXSkpOworCisJZm9yIChqID0gMDsgaiA8IG5lbnRzX2xhc3Q7 IGorKykgeworCQlnbnR0YWJfc2V0X21hcF9vcCgmZGF0YV9tYXBfb3BzW2tdLAorCQkJCSAgKHVu c2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKGRhdGFfcGFnZXNba10pKSwKKwkJ CQkgIEdOVE1BUF9ob3N0X21hcCwKKwkJCQkgIGx2bDJfdGFibGVbal0sIGRvbWlkKTsKKworCQln bnR0YWJfc2V0X3VubWFwX29wKCZkYXRhX3VubWFwX29wc1trXSwKKwkJCQkgICAgKHVuc2lnbmVk IGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKGRhdGFfcGFnZXNba10pKSwKKwkJCQkgICAg R05UTUFQX2hvc3RfbWFwLCAtMSk7CisJCWsrKzsKKwl9CisKKwlpZiAoZ250dGFiX21hcF9yZWZz KGRhdGFfbWFwX29wcywgTlVMTCwgZGF0YV9wYWdlcywgbmVudHMpKSB7CisJCXByaW50aygiXG54 ZW46IGRvbTA6IEhZUEVSVklTT1IgbWFwIGdyYW50IHJlZiBmYWlsZWRcbiIpOworCQlyZXR1cm4g TlVMTDsKKwl9CisKKwkvKiB1bm1hcHBpbmcgbHZsMiB0YWJsZSBwYWdlcyAqLworCWlmIChnbnR0 YWJfdW5tYXBfcmVmcyhsdmwyX3VubWFwX29wcywgTlVMTCwgbHZsMl90YWJsZV9wYWdlcywKKwkJ CSAgICAgIG5fbHZsMl9ncmVmcykpIHsKKwkJcHJpbnRrKCJDYW5ub3QgdW5tYXAgMm5kIGxldmVs IHJlZnNcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbmVudHM7 IGkrKykgeworCQlpZiAoZGF0YV9tYXBfb3BzW2ldLnN0YXR1cykgeworCQkJcHJpbnRrKCJcbnhl bjogZG9tMDogSFlQRVJWSVNPUiBtYXAgZ3JhbnQgcmVmIGZhaWxlZCBzdGF0dXMgPSAlZFxuIiwK KwkJCQlkYXRhX21hcF9vcHNbaV0uc3RhdHVzKTsKKwkJCXJldHVybiBOVUxMOworCQl9IGVsc2Ug eworCQkJZGF0YV91bm1hcF9vcHNbaV0uaGFuZGxlID0gZGF0YV9tYXBfb3BzW2ldLmhhbmRsZTsK KwkJfQorCX0KKworCS8qIHN0b3JlIHRoZXNlIHJlZmVyZW5jZXMgZm9yIHVubWFwcGluZyBpbiB0 aGUgZnV0dXJlICovCisJc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzID0gZGF0YV91bm1hcF9vcHM7 CisJc2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyA9IGRhdGFfcGFnZXM7CisKKwlnbnR0YWJfZnJl ZV9wYWdlcygxLCAmbHZsM190YWJsZV9wYWdlKTsKKwlnbnR0YWJfZnJlZV9wYWdlcyhuX2x2bDJf Z3JlZnMsIGx2bDJfdGFibGVfcGFnZXMpOworCWtmcmVlKGx2bDJfdGFibGVfcGFnZXMpOworCWtm cmVlKGx2bDJfbWFwX29wcyk7CisJa2ZyZWUobHZsMl91bm1hcF9vcHMpOworCWtmcmVlKGRhdGFf bWFwX29wcyk7CisKKwlyZXR1cm4gZGF0YV9wYWdlczsKK30KKworaW50IGh5cGVyX2RtYWJ1Zl94 ZW5fdW5tYXBfc2hhcmVkX3BhZ2VzKHZvaWQgKipyZWZzX2luZm8sIGludCBuZW50cykgeworCXN0 cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKnNoX3BhZ2VzX2luZm87CisKKwlzaF9wYWdlc19p bmZvID0gKHN0cnVjdCB4ZW5fc2hhcmVkX3BhZ2VzX2luZm8gKikoKnJlZnNfaW5mbyk7CisKKwlp ZiAoc2hfcGFnZXNfaW5mby0+dW5tYXBfb3BzID09IE5VTEwgfHwKKwkgICAgc2hfcGFnZXNfaW5m by0+ZGF0YV9wYWdlcyA9PSBOVUxMKSB7CisJCXByaW50aygiSW1wb3J0ZWQgcGFnZXMgYWxyZWFk eSBjbGVhbmVkIHVwIG9yIGJ1ZmZlciB3YXMgbm90IGltcG9ydGVkIHlldFxuIik7CisJCXJldHVy biAwOworCX0KKworCWlmIChnbnR0YWJfdW5tYXBfcmVmcyhzaF9wYWdlc19pbmZvLT51bm1hcF9v cHMsIE5VTEwsCisJCQkgICAgICBzaF9wYWdlc19pbmZvLT5kYXRhX3BhZ2VzLCBuZW50cykgKSB7 CisJCXByaW50aygiQ2Fubm90IHVubWFwIGRhdGEgcGFnZXNcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlnbnR0YWJfZnJlZV9wYWdlcyhuZW50cywgc2hfcGFnZXNfaW5mby0+ZGF0YV9w YWdlcyk7CisKKwlrZnJlZShzaF9wYWdlc19pbmZvLT5kYXRhX3BhZ2VzKTsKKwlrZnJlZShzaF9w YWdlc19pbmZvLT51bm1hcF9vcHMpOworCXNoX3BhZ2VzX2luZm8tPnVubWFwX29wcyA9IE5VTEw7 CisJc2hfcGFnZXNfaW5mby0+ZGF0YV9wYWdlcyA9IE5VTEw7CisJa2ZyZWUoc2hfcGFnZXNfaW5m byk7CisJc2hfcGFnZXNfaW5mbyA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBh L2RyaXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaCBiL2Ry aXZlcnMveGVuL2h5cGVyX2RtYWJ1Zi94ZW4vaHlwZXJfZG1hYnVmX3hlbl9zaG0uaApuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg3ODA0Ci0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy94ZW4vaHlwZXJfZG1hYnVmL3hlbi9oeXBlcl9kbWFidWZfeGVuX3NobS5oCkBAIC0w LDAgKzEsMTkgQEAKKyNpZm5kZWYgX19IWVBFUl9ETUFCVUZfWEVOX1NITV9IX18KKyNkZWZpbmUg X19IWVBFUl9ETUFCVUZfWEVOX1NITV9IX18KKworLyogVGhpcyBjb2xsZWN0cyBhbGwgcmVmZXJl bmNlIG51bWJlcnMgZm9yIDJuZCBsZXZlbCBzaGFyZWQgcGFnZXMgYW5kIGNyZWF0ZSBhIHRhYmxl CisgKiB3aXRoIHRob3NlIGluIDFzdCBsZXZlbCBzaGFyZWQgcGFnZXMgdGhlbiByZXR1cm4gcmVm ZXJlbmNlIG51bWJlcnMgZm9yIHRoaXMgdG9wIGxldmVsCisgKiB0YWJsZS4gKi8KK2ludCBoeXBl cl9kbWFidWZfeGVuX3NoYXJlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIGludCBkb21pZCwg aW50IG5lbnRzLAorCQkJCSB2b2lkICoqcmVmc19pbmZvKTsKKworaW50IGh5cGVyX2RtYWJ1Zl94 ZW5fdW5zaGFyZV9wYWdlcyh2b2lkICoqcmVmc19pbmZvLCBpbnQgbmVudHMpOworCisvKiBNYXBz IHByb3ZpZGVkIHRvcCBsZXZlbCByZWYgaWQgYW5kIHRoZW4gcmV0dXJuIGFycmF5IG9mIHBhZ2Vz IGNvbnRhaW5pbmcgZGF0YSByZWZzLgorICovCitzdHJ1Y3QgcGFnZSAqKiBoeXBlcl9kbWFidWZf eGVuX21hcF9zaGFyZWRfcGFnZXMoaW50IGx2bDNfZ3JlZiwgaW50IGRvbWlkLCBpbnQgbmVudHMs CisJCQkJCQl2b2lkICoqcmVmc19pbmZvKTsKKworaW50IGh5cGVyX2RtYWJ1Zl94ZW5fdW5tYXBf c2hhcmVkX3BhZ2VzKHZvaWQgKipyZWZzX2luZm8sIGludCBuZW50cyk7CisKKyNlbmRpZiAvKiBf X0hZUEVSX0RNQUJVRl9YRU5fU0hNX0hfXyAqLwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn L21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs