From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jun Kamada Subject: [RFC] [4/4] PV driver for FC transport layer (FC transport layer driver) Date: Fri, 29 Jun 2007 20:08:16 +0900 Message-ID: <20070629200737.69F2.KAMA@jp.fujitsu.com> References: <20070629195146.69E6.KAMA@jp.fujitsu.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------_4684E7F96BA404902400_MULTIPART_MIXED_" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20070629195146.69E6.KAMA@jp.fujitsu.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com Cc: kama@jp.fujitsu.com, xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org --------_4684E7F96BA404902400_MULTIPART_MIXED_ Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Jun Kamada Linux Technology Development Div. Server Systems Unit Fujitsu Ltd. kama@jp.fujitsu.com --------_4684E7F96BA404902400_MULTIPART_MIXED_ Content-Type: application/octet-stream; name="fcdriver.patch" Content-Disposition: attachment; filename="fcdriver.patch" Content-Transfer-Encoding: base64 IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEp1biBLYW1hZGEgPGthbWFAanAuZnVqaXRzdS5j b20+CiMgRGF0ZSAxMTgzMTE0MTM4IC0zMjQwMAojIE5vZGUgSUQgOTlkNDdlM2Y1NDMwZmFhMDAx NGY5NWVmOTgxMGEzNGNmNzc1YmVmYwojIFBhcmVudCAgMGYxNjliMzZiZTgxMjkzZGYwOWYxYzY2 YjYyODRkYzAwMjcwODU0ZgpGQyB0cmFuc3BvcnQgbGF5ZXIgZXh0ZW5zaW9uIGZvciBwdi1zY3Np IGRyaXZlcgoKU2lnbmVkLW9mZi1ieTogSnVuIEthbWFkYSA8a2FtYUBqcC5mdWppdHN1LmNvbT4K U2lnbmVkLW9mZi1ieTogVG9tb25hcmkgSG9yaWtvc2hpIDx0Lmhvcmlrb3NoaUBqcC5mdWppdHN1 LmNvbT4KU2lnbmVkLW9mZi1ieTogVHN1bmVoaXNhIERvaSA8RG9pLlRzdW5laGlzYUBqcC5mdWpp dHN1LmNvbT4KU2lnbmVkLW9mZi1ieTogQWtpcmEgSGF5YWthd2EgPGhheWFrYXdhLmFraXJhQGpw LmZ1aml0c3UuY29tPgoKZGlmZiAtciAwZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRyaXZl cnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCi0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5z cG9ydF9mYy5jCUZyaSBKdW4gMjkgMTg6MDk6MTkgMjAwNyArMDkwMAorKysgYi9kcml2ZXJzL3Nj c2kvc2NzaV90cmFuc3BvcnRfZmMuYwlGcmkgSnVuIDI5IDE5OjQ4OjU4IDIwMDcgKzA5MDAKQEAg LTI1Myw2ICsyNTMsMjQgQEAgc3RydWN0IGZjX2ludGVybmFsIHsKIH07CiAKICNkZWZpbmUgdG9f ZmNfaW50ZXJuYWwodG1wbCkJY29udGFpbmVyX29mKHRtcGwsIHN0cnVjdCBmY19pbnRlcm5hbCwg dCkKKworI2lmZGVmIENPTkZJR19YRU5fU0NTSV9GQworc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBs YXRlICoKK2ZjX3Nob3N0MmZ0KHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBm Y19pbnRlcm5hbAkqaSA9IHRvX2ZjX2ludGVybmFsKHNob3N0LT50cmFuc3BvcnR0KTsKKworCXJl dHVybiBpLT5mOworfQorCit2b2lkCitmY191cGRhdGVfZnQoc3RydWN0IFNjc2lfSG9zdCAqc2hv c3QsIHN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZSAqZnQpCit7CisJc3RydWN0IGZjX2ludGVy bmFsCSppID0gdG9fZmNfaW50ZXJuYWwoc2hvc3QtPnRyYW5zcG9ydHQpOworCisJaS0+ZiA9IGZ0 OworfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZmNfdGFyZ2V0X3NldHVwKHN0cnVjdCB0cmFuc3Bv cnRfY29udGFpbmVyICp0Yywgc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGNsYXNz X2RldmljZSAqY2RldikKZGlmZiAtciAwZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRyaXZl cnMveGVuL0tjb25maWcKLS0tIGEvZHJpdmVycy94ZW4vS2NvbmZpZwlGcmkgSnVuIDI5IDE4OjA5 OjE5IDIwMDcgKzA5MDAKKysrIGIvZHJpdmVycy94ZW4vS2NvbmZpZwlGcmkgSnVuIDI5IDE5OjQ4 OjU4IDIwMDcgKzA5MDAKQEAgLTE5NCw2ICsxOTQsMTEgQEAgY29uZmlnIFhFTl9TQ1NJX0ZST05U RU5ECiAJICBUaGUgU0NTSSBmcm9udGVuZCBkcml2ZXIgYWxsb3dzIHRoZSBrZXJuZWwgdG8gYWNj ZXNzIFNDU0kgSEJBcwogCSAgd2l0aGluIGFub3RoZXIgZ3Vlc3QgT1MuCiAKK2NvbmZpZyBYRU5f U0NTSV9GQworCXRyaXN0YXRlICJTQ1NJIEZpYnJlIENoYW5uZWwgU3VwcG9ydCIKKwlkZXBlbmRz IG9uIFhFTl9TQ1NJX0JBQ0tFTkQgfHwgWEVOX1NDU0lfRlJPTlRFTkQKKwlkZWZhdWx0IHkKKwog Y29uZmlnIFhFTl9ORVRERVZfRlJPTlRFTkQKIAl0cmlzdGF0ZSAiTmV0d29yay1kZXZpY2UgZnJv bnRlbmQgZHJpdmVyIgogCWRlcGVuZHMgb24gWEVOICYmIE5FVApkaWZmIC1yIDBmMTY5YjM2YmU4 MSAtciA5OWQ0N2UzZjU0MzAgZHJpdmVycy94ZW4vc2NzaWJhY2svTWFrZWZpbGUKLS0tIGEvZHJp dmVycy94ZW4vc2NzaWJhY2svTWFrZWZpbGUJRnJpIEp1biAyOSAxODowOToxOSAyMDA3ICswOTAw CisrKyBiL2RyaXZlcnMveGVuL3Njc2liYWNrL01ha2VmaWxlCUZyaSBKdW4gMjkgMTk6NDg6NTgg MjAwNyArMDkwMApAQCAtMSwyICsxLDMgQEAgb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0JBQ0tFTkQp CSs9IHNjc2liawogb2JqLSQoQ09ORklHX1hFTl9TQ1NJX0JBQ0tFTkQpCSs9IHNjc2liay5vCitv YmotJChDT05GSUdfWEVOX1NDU0lfRkMpCSs9IGZjYmFjay5vCiBzY3NpYmsteQkJCSs9IGludGVy ZmFjZS5vIHNjc2liYWNrLm8KZGlmZiAtciAwZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRy aXZlcnMveGVuL3Njc2liYWNrL2NvbW1vbi5oCi0tLSBhL2RyaXZlcnMveGVuL3Njc2liYWNrL2Nv bW1vbi5oCUZyaSBKdW4gMjkgMTg6MDk6MTkgMjAwNyArMDkwMAorKysgYi9kcml2ZXJzL3hlbi9z Y3NpYmFjay9jb21tb24uaAlGcmkgSnVuIDI5IDE5OjQ4OjU4IDIwMDcgKzA5MDAKQEAgLTc5LDYg Kzc5LDEwIEBAIHN0cnVjdCBzY3NpYmFja19pbmZvIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsK IAl1bnNpZ25lZCBpbnQgd2FpdGluZ19yZXFzOwogCisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJX0ZD CisJdm9pZAkqZmNpbmZvOworI2VuZGlmCisKIAlzdHJ1Y3QgcGFnZSAqKm1tYXBfcGFnZXM7CiB9 OwogCmRpZmYgLXIgMGYxNjliMzZiZTgxIC1yIDk5ZDQ3ZTNmNTQzMCBkcml2ZXJzL3hlbi9zY3Np YmFjay9mY2JhY2suYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAw MAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9mY2JhY2suYwlGcmkgSnVuIDI5IDE5OjQ4OjU4 IDIwMDcgKzA5MDAKQEAgLTAsMCArMSw3MjQgQEAKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4K KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+Cisj aW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDx4ZW4veGVuYnVzLmg+CisjaW5jbHVk ZSA8eGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2Uv aW8vcmluZy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3Np L3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KKworI2lu Y2x1ZGUgImZjLmgiCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK2V4dGVybiB2b2lkCXVuYmluZF9m cm9tX2lycWhhbmRsZXIodW5zaWduZWQgaW50LCB2b2lkICopOworZXh0ZXJuIHN0cnVjdCBmY19m dW5jdGlvbl90ZW1wbGF0ZQkqZmNfc2hvc3QyZnQoc3RydWN0IFNjc2lfSG9zdCAqKTsKKworc3Rh dGljIHN0cnVjdCBtdXRleAlsb2NrOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGlj IHN0cnVjdCBzY3NpX3RhcmdldCAqCitzaG9zdF90b19zdGFyZ2V0KHN0cnVjdCBTY3NpX0hvc3Qg KnNob3N0LAorCQkgdW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBpZCkKK3sKKwlz dHJ1Y3Qgc2NzaV90YXJnZXQJKnN0YXJnZXQsICpmb3VuZF9zdGFyZ2V0ID0gTlVMTDsKKworCWxp c3RfZm9yX2VhY2hfZW50cnkoc3RhcmdldCwgJihzaG9zdC0+X190YXJnZXRzKSwgc2libGluZ3Mp IHsKKwkJaWYgKChzdGFyZ2V0LT5jaGFubmVsID09IGNoYW5uZWwpICYmIChzdGFyZ2V0LT5pZCA9 PSBpZCkpIHsKKwkJCWZvdW5kX3N0YXJnZXQgPSBzdGFyZ2V0OworCQkJYnJlYWs7CisJCX0KKwl9 CisKKwlyZXR1cm4gZm91bmRfc3RhcmdldDsKK30KKworc3RhdGljIHN0cnVjdCBmY19ycG9ydCAq CitzaG9zdF90b19ycG9ydChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCwgdTY0IG5vZGVfbmFtZSwK KwkgICAgICAgdTY0IHBvcnRfbmFtZSwgdTMyIHBvcnRfaWQsIHUzMiByb2xlcykKK3sKKwlzdHJ1 Y3QgZmNfcnBvcnQJCSpycG9ydCwgKmZvdW5kX3Jwb3J0ID0gTlVMTDsKKworCWxpc3RfZm9yX2Vh Y2hfZW50cnkocnBvcnQsICZmY19ob3N0X3Jwb3J0cyhzaG9zdCksIHBlZXJzKSB7CisJCWlmICgo cnBvcnQtPm5vZGVfbmFtZSA9PSBub2RlX25hbWUpICYmCisJCQkocnBvcnQtPnBvcnRfbmFtZSA9 PSBwb3J0X25hbWUpICYmCisJCQkocnBvcnQtPnBvcnRfaWQgICA9PSBwb3J0X2lkKSAgICYmCisJ CQkocnBvcnQtPnJvbGVzICAgICA9PSByb2xlcykpIHsKKwkJCWZvdW5kX3Jwb3J0ID0gcnBvcnQ7 CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBmb3VuZF9ycG9ydDsKK30KKworCisvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQKK2ZjYmFja19tYWluKHN0cnVjdCBmY2JhY2tf aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmNpZl9iYWNrX3JpbmcJKnJpbmcgPSAmKGluZm8tPnJp bmcpOworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOworCXN0cnVjdCBmY2lmX3Jlc3Bv bnNlCSpyaW5nX3JlczsKKworCS8qIE11c3QgY2hlY2sgYnkgY2xhc3Mgb3Igc29tZXRoaW5nIC4u LiAqLworCWlmICgoc3RyY21wKGluZm8tPnNjc2lpbmZvLT5ob3N0LT5ob3N0dC0+bmFtZSwgInFs YTJ4eHgiKSAhPSAwKSAmJgorCQkoc3RyY21wKGluZm8tPnNjc2lpbmZvLT5ob3N0LT5ob3N0dC0+ bmFtZSwgImxwZmMiKSAhPSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICI8PDwl czogbm90IGEgc3VwcG9ydGVkIGZpYnJlIGNoYW5uZWwgY2FyZD4+PlxuIiwKKwkJICAgICAgIF9f RlVOQ1RJT05fXyk7CisJCXJldHVybiAtMTsKKwl9CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwkK KwkvKgorCSAgUmVjZWl2ZSByZXF1ZXN0IGZyb20gRG9tVQorCSovCisJeworCQlyaW5nX3JlcSA9 IFJJTkdfR0VUX1JFUVVFU1QocmluZywgMCk7CisJfQorCisJLyoKKwkgIFBlcmZvcm0gc3BlY2lm aWVkIGZ1bmN0aW9uIGFuZCBzZW5kIHJlc3BvbnNlIHRvIERvbVUKKwkqLworCXsKKwkJc3RydWN0 IGZjX2Z1bmN0aW9uX3RlbXBsYXRlCisJCQkJKmZ0ID0gZmNfc2hvc3QyZnQoaW5mby0+c2NzaWlu Zm8tPmhvc3QpOworCQlzdHJ1Y3Qgc2NzaV90YXJnZXQJKnN0YXJnZXQ7CisJCXN0cnVjdCBmY19y cG9ydAkJKnJwb3J0OworCQkKKwkJcmluZ19yZXMgPSBSSU5HX0dFVF9SRVNQT05TRShyaW5nLCAx KTsKKworCQlyaW5nX3Jlcy0+cnNsdCA9IC0xOworCisJCXN3aXRjaCAocmluZ19yZXEtPmNtbmQp IHsKKwkJY2FzZSBDTU5EX0dFVF9IT1NUX1BPUlRfSUQ6CisJCQlpZiAoKGZ0LT5zaG93X2hvc3Rf cG9ydF9pZCAhPSAwKSAmJgorCQkJCShmdC0+Z2V0X2hvc3RfcG9ydF9pZCAhPSBOVUxMKSkgewor CQkJCWZ0LT5nZXRfaG9zdF9wb3J0X2lkKGluZm8tPnNjc2lpbmZvLT5ob3N0KTsKKwkJCQlyaW5n X3Jlcy0+dS5naHBpLnBvcnRfaWQgPQorCQkJCQkoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopCisJ CQkJCSAoaW5mby0+c2NzaWluZm8tPmhvc3QtPnNob3N0X2RhdGEpKS0+cG9ydF9pZDsKKwkJCQly aW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJCXJpbmdfcmVzLT5yc2x0ID0gMDsK KwkJCX0KKwkJCWJyZWFrOworCQkJCisJCWNhc2UgQ01ORF9HRVRfSE9TVF9QT1JUX1RZUEU6CisJ CQlpZiAoKGZ0LT5zaG93X2hvc3RfcG9ydF90eXBlICE9IDApICYmCisJCQkJKGZ0LT5nZXRfaG9z dF9wb3J0X3R5cGUgIT0gTlVMTCkpIHsKKwkJCQlmdC0+Z2V0X2hvc3RfcG9ydF90eXBlKGluZm8t PnNjc2lpbmZvLT5ob3N0KTsKKwkJCQlyaW5nX3Jlcy0+dS5naHB0LnBvcnRfdHlwZSA9CisJCQkJ CSgoc3RydWN0IGZjX2hvc3RfYXR0cnMgKikKKwkJCQkJIChpbmZvLT5zY3NpaW5mby0+aG9zdC0+ c2hvc3RfZGF0YSkpLT5wb3J0X3R5cGU7CisJCQkJcmluZ19yZXMtPnJxaWQgPSByaW5nX3JlcS0+ cnFpZDsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJCQorCQlj YXNlIENNTkRfR0VUX0hPU1RfUE9SVF9TVEFURToKKwkJCWlmICgoZnQtPnNob3dfaG9zdF9wb3J0 X3N0YXRlICE9IDApICYmCisJCQkJKGZ0LT5nZXRfaG9zdF9wb3J0X3N0YXRlICE9IE5VTEwpKSB7 CisJCQkJZnQtPmdldF9ob3N0X3BvcnRfc3RhdGUoaW5mby0+c2NzaWluZm8tPmhvc3QpOworCQkJ CXJpbmdfcmVzLT51LmdocHMucG9ydF9zdGF0ZSA9CisJCQkJCSgoc3RydWN0IGZjX2hvc3RfYXR0 cnMgKikKKwkJCQkJIChpbmZvLT5zY3NpaW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5wb3J0X3N0 YXRlOworCQkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQkJcmluZ19yZXMt PnJzbHQgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCQkKKwkJY2FzZSBDTU5EX0dFVF9IT1NUX0FD VElWRV9GQzRTOgorCQkJaWYgKChmdC0+c2hvd19ob3N0X2FjdGl2ZV9mYzRzICE9IDApICYmCisJ CQkJKGZ0LT5nZXRfaG9zdF9hY3RpdmVfZmM0cyAhPSBOVUxMKSkgeworCQkJCWZ0LT5nZXRfaG9z dF9hY3RpdmVfZmM0cyhpbmZvLT5zY3NpaW5mby0+aG9zdCk7CisJCQkJbWVtY3B5KHJpbmdfcmVz LT51LmdoYWYuYWN0aXZlX2ZjNHMsCisJCQkJICAgICAgICgoc3RydWN0IGZjX2hvc3RfYXR0cnMg KikKKwkJCQkJKGluZm8tPnNjc2lpbmZvLT5ob3N0LT5zaG9zdF9kYXRhKSktPmFjdGl2ZV9mYzRz LAorCQkJCSAgICAgICBzaXplb2YocmluZ19yZXMtPnUuZ2hhZi5hY3RpdmVfZmM0cykpOworCQkJ CXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQkJcmluZ19yZXMtPnJzbHQgPSAw OworCQkJfQorCQkJYnJlYWs7CisJCQkKKwkJY2FzZSBDTU5EX0dFVF9IT1NUX1NQRUVEOgorCQkJ aWYgKChmdC0+c2hvd19ob3N0X3NwZWVkICE9IDApICYmCisJCQkJKGZ0LT5nZXRfaG9zdF9zcGVl ZCAhPSBOVUxMKSkgeworCQkJCWZ0LT5nZXRfaG9zdF9zcGVlZChpbmZvLT5zY3NpaW5mby0+aG9z dCk7CisJCQkJcmluZ19yZXMtPnUuZ2hzcC5zcGVlZCA9CisJCQkJCSgoc3RydWN0IGZjX2hvc3Rf YXR0cnMgKikKKwkJCQkJIChpbmZvLT5zY3NpaW5mby0+aG9zdC0+c2hvc3RfZGF0YSkpLT5zcGVl ZDsKKwkJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlkOworCQkJCXJpbmdfcmVzLT5y c2x0ID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQkJCisJCWNhc2UgQ01ORF9HRVRfSE9TVF9GQUJS SUNfTkFNRToKKwkJCWlmICgoZnQtPnNob3dfaG9zdF9mYWJyaWNfbmFtZSAhPSAwKSAmJgorCQkJ CShmdC0+Z2V0X2hvc3RfZmFicmljX25hbWUgIT0gTlVMTCkpIHsKKwkJCQlmdC0+Z2V0X2hvc3Rf ZmFicmljX25hbWUoaW5mby0+c2NzaWluZm8tPmhvc3QpOworCQkJCXJpbmdfcmVzLT51LmdoZm4u ZmFicmljX25hbWUgPQorCQkJCQkoKHN0cnVjdCBmY19ob3N0X2F0dHJzICopCisJCQkJCSAoaW5m by0+c2NzaWluZm8tPmhvc3QtPnNob3N0X2RhdGEpKS0+ZmFicmljX25hbWU7CisJCQkJcmluZ19y ZXMtPnJxaWQgPSByaW5nX3JlcS0+cnFpZDsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQl9 CisJCQlicmVhazsKKwkJCQorCQljYXNlIENNTkRfR0VUX0hPU1RfU1RBVFM6IHsKKwkJCXN0cnVj dCBmY19ob3N0X3N0YXRpc3RpY3MJCSpoczsKKworCQkJaWYgKGZ0LT5nZXRfZmNfaG9zdF9zdGF0 cyAhPSBOVUxMKSB7CisJCQkJaWYgKChocyA9IGZ0LT5nZXRfZmNfaG9zdF9zdGF0cygKKwkJCQkJ aW5mby0+c2NzaWluZm8tPmhvc3QpKSA9PSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQlyaW5nX3Jlcy0+dS5naHN0LnN0YXRzID0gKmhzOworCQkJCXJpbmdfcmVzLT5ycWlkICAgICAg ICAgPSByaW5nX3JlcS0+cnFpZDsKKwkJCQlyaW5nX3Jlcy0+cnNsdCAgICAgICAgID0gMDsKKwkJ CX0KKwkJCWJyZWFrOyB9CisJCSAgCisJCWNhc2UgQ01ORF9SRVNFVF9IT1NUX1NUQVRTOgorCQkJ aWYgKGZ0LT5yZXNldF9mY19ob3N0X3N0YXRzICE9IE5VTEwpIHsKKwkJCQlmdC0+cmVzZXRfZmNf aG9zdF9zdGF0cyhpbmZvLT5zY3NpaW5mby0+aG9zdCk7CisJCQkJcmluZ19yZXMtPnJxaWQgPSBy aW5nX3JlcS0+cnFpZDsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQl9CisJCQlicmVhazsK KwkJCQorCQljYXNlIENNTkRfSVNTVUVfSE9TVF9MSVA6CisJCQlpZiAoZnQtPmlzc3VlX2ZjX2hv c3RfbGlwICE9IE5VTEwpIHsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IGZ0LT5pc3N1ZV9mY19ob3N0 X2xpcCgKKwkJCQkJCQlpbmZvLT5zY3NpaW5mby0+aG9zdCk7CisJCQkJcmluZ19yZXMtPnJxaWQg PSByaW5nX3JlcS0+cnFpZDsKKwkJCX0KKwkJCWJyZWFrOworCQkJCisJCWNhc2UgQ01ORF9HRVRf U1RBUkdFVF9QT1JUX0lEOgorCQkJaWYgKChmdC0+c2hvd19zdGFyZ2V0X3BvcnRfaWQgIT0gMCkg JiYKKwkJCQkoZnQtPmdldF9zdGFyZ2V0X3BvcnRfaWQgIT0gTlVMTCkpIHsKKwkJCQlpZiAoKHN0 YXJnZXQgPSBzaG9zdF90b19zdGFyZ2V0KAorCQkJCQlpbmZvLT5zY3NpaW5mby0+aG9zdCwKKwkJ CQkJcmluZ19yZXEtPnUuZ3RwaS5jaGFubmVsLAorCQkJCQlyaW5nX3JlcS0+dS5ndHBpLmlkKSkg PT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZnQtPmdldF9zdGFyZ2V0X3BvcnRf aWQoc3RhcmdldCk7CisJCQkJcmluZ19yZXMtPnUuZ3RwaS5wb3J0X2lkID0KKwkJCQkJKChzdHJ1 Y3QgZmNfc3RhcmdldF9hdHRycyAqKQorCQkJCQkgKCYoc3RhcmdldC0+c3RhcmdldF9kYXRhKSkp LT5wb3J0X2lkOworCQkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQkJcmlu Z19yZXMtPnJzbHQgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCQkKKwkJY2FzZSBDTU5EX0dFVF9T VEFSR0VUX05PREVfTkFNRToKKwkJCWlmICgoZnQtPnNob3dfc3RhcmdldF9ub2RlX25hbWUgIT0g MCkgJiYKKwkJCQkoZnQtPmdldF9zdGFyZ2V0X25vZGVfbmFtZSAhPSBOVUxMKSkgeworCQkJCWlm ICgoc3RhcmdldCA9IHNob3N0X3RvX3N0YXJnZXQoCisJCQkJCWluZm8tPnNjc2lpbmZvLT5ob3N0 LAorCQkJCQlyaW5nX3JlcS0+dS5ndG5uLmNoYW5uZWwsCisJCQkJCXJpbmdfcmVxLT51Lmd0bm4u aWQpKSA9PSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlmdC0+Z2V0X3N0YXJnZXRf bm9kZV9uYW1lKHN0YXJnZXQpOworCQkJCXJpbmdfcmVzLT51Lmd0bm4ubm9kZV9uYW1lID0KKwkJ CQkJKChzdHJ1Y3QgZmNfc3RhcmdldF9hdHRycyAqKQorCQkJCQkoJihzdGFyZ2V0LT5zdGFyZ2V0 X2RhdGEpKSktPm5vZGVfbmFtZTsKKwkJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdfcmVxLT5ycWlk OworCQkJCXJpbmdfcmVzLT5yc2x0ID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQkJCisJCWNhc2Ug Q01ORF9HRVRfU1RBUkdFVF9QT1JUX05BTUU6CisJCQlpZiAoKGZ0LT5zaG93X3N0YXJnZXRfcG9y dF9uYW1lICE9IDApICYmCisJCQkJKGZ0LT5nZXRfc3RhcmdldF9wb3J0X25hbWUgIT0gTlVMTCkp IHsKKwkJCQlpZiAoKHN0YXJnZXQgPSBzaG9zdF90b19zdGFyZ2V0KAorCQkJCQlpbmZvLT5zY3Np aW5mby0+aG9zdCwKKwkJCQkJcmluZ19yZXEtPnUuZ3Rwbi5jaGFubmVsLAorCQkJCQlyaW5nX3Jl cS0+dS5ndHBuLmlkKSkgPT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZnQtPmdl dF9zdGFyZ2V0X3BvcnRfbmFtZShzdGFyZ2V0KTsKKwkJCQlyaW5nX3Jlcy0+dS5ndHBuLnBvcnRf bmFtZSA9CisJCQkJCSgoc3RydWN0IGZjX3N0YXJnZXRfYXR0cnMgKikKKwkJCQkJKCYoc3Rhcmdl dC0+c3RhcmdldF9kYXRhKSkpLT5wb3J0X25hbWU7CisJCQkJcmluZ19yZXMtPnJxaWQgPSByaW5n X3JlcS0+cnFpZDsKKwkJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJ CQorCQljYXNlIENNTkRfR0VUX1JQT1JUX0xPU1NfVE1POgorCQkJaWYgKChmdC0+c2hvd19ycG9y dF9kZXZfbG9zc190bW8gIT0gMCkgJiYKKwkJCQkoZnQtPmdldF9ycG9ydF9kZXZfbG9zc190bW8g IT0gTlVMTCkpIHsKKwkJCQlpZiAoKHJwb3J0ID0gc2hvc3RfdG9fcnBvcnQoCisJCQkJCWluZm8t PnNjc2lpbmZvLT5ob3N0LAorCQkJCQlyaW5nX3JlcS0+dS5ncGx0Lm5vZGVfbmFtZSwKKwkJCQkJ cmluZ19yZXEtPnUuZ3BsdC5wb3J0X25hbWUsCisJCQkJCXJpbmdfcmVxLT51LmdwbHQucG9ydF9p ZCwKKwkJCQkJcmluZ19yZXEtPnUuZ3BsdC5yb2xlcykpID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7 CisJCQkJfQorCQkJCWZ0LT5nZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0KTsKKwkJCQlyaW5n X3Jlcy0+dS5ncGx0LnRpbWVvdXQgPSBycG9ydC0+ZGV2X2xvc3NfdG1vOworCQkJCXJpbmdfcmVz LT5ycWlkICAgICAgICAgICA9IHJpbmdfcmVxLT5ycWlkOworCQkJCXJpbmdfcmVzLT5yc2x0ICAg ICAgICAgICA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJCQorCQljYXNlIENNTkRfU0VUX1JQT1JU X0xPU1NfVE1POgorCQkJaWYgKGZ0LT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vICE9IE5VTEwpIHsK KwkJCQlpZiAoKHJwb3J0ID0gc2hvc3RfdG9fcnBvcnQoCisJCQkJCWluZm8tPnNjc2lpbmZvLT5o b3N0LAorCQkJCQlyaW5nX3JlcS0+dS5zcGx0Lm5vZGVfbmFtZSwKKwkJCQkJcmluZ19yZXEtPnUu c3BsdC5wb3J0X25hbWUsCisJCQkJCXJpbmdfcmVxLT51LnNwbHQucG9ydF9pZCwKKwkJCQkJcmlu Z19yZXEtPnUuc3BsdC5yb2xlcykpID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ CWZ0LT5zZXRfcnBvcnRfZGV2X2xvc3NfdG1vKHJwb3J0LAorCQkJCQkJcmluZ19yZXEtPnUuc3Bs dC50aW1lb3V0KTsKKwkJCQlyaW5nX3Jlcy0+dS5zcGx0LnRpbWVvdXQgPSBycG9ydC0+ZGV2X2xv c3NfdG1vOworCQkJCXJpbmdfcmVzLT5ycWlkICAgICAgICAgICA9IHJpbmdfcmVxLT5ycWlkOwor CQkJCXJpbmdfcmVzLT5yc2x0ICAgICAgICAgICA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJCQor CQljYXNlIENNTkRfR0VUX0lOSVRJQUxfU0hPU1RfQVRUUklCOiB7CisJCQlzdHJ1Y3QgZmNfaG9z dF9hdHRycwkqaG9zdF9hdHRycyA9CisJCQkJCShzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJ CQkoaW5mby0+c2NzaWluZm8tPmhvc3QtPnNob3N0X2RhdGEpOworCQkJc3RydWN0IGdpaGEJCSpn aWhhID0gKHN0cnVjdCBnaWhhICopCisJCQkJCQkJKGluZm8tPmdudF9hcmVhLT5hZGRyKTsKKwor CQkJbWVtY3B5KGdpaGEtPmFjdGl2ZV9mYzRzLCBob3N0X2F0dHJzLT5hY3RpdmVfZmM0cywKKwkJ CQkgICBzaXplb2YoZ2loYS0+YWN0aXZlX2ZjNHMpKTsKKwkJCWdpaGEtPmZhYnJpY19uYW1lICAg ICAgID0gaG9zdF9hdHRycy0+ZmFicmljX25hbWU7CisJCQlnaWhhLT5tYXhmcmFtZV9zaXplICAg ICA9IGhvc3RfYXR0cnMtPm1heGZyYW1lX3NpemU7CisJCQlnaWhhLT5ub2RlX25hbWUgICAgICAg ICA9IGhvc3RfYXR0cnMtPm5vZGVfbmFtZTsKKwkJCWdpaGEtPnBlcm1hbmVudF9wb3J0X25hbWUg PQorCQkJCWhvc3RfYXR0cnMtPnBlcm1hbmVudF9wb3J0X25hbWU7CisJCQlnaWhhLT5wb3J0X2lk ICAgICAgICAgICA9IGhvc3RfYXR0cnMtPnBvcnRfaWQ7CisJCQlnaWhhLT5wb3J0X25hbWUgICAg ICAgICA9IGhvc3RfYXR0cnMtPnBvcnRfbmFtZTsKKwkJCWdpaGEtPnBvcnRfc3RhdGUgICAgICAg ID0gaG9zdF9hdHRycy0+cG9ydF9zdGF0ZTsKKwkJCWdpaGEtPnBvcnRfdHlwZSAgICAgICAgID0g aG9zdF9hdHRycy0+cG9ydF90eXBlOworCQkJbWVtY3B5KGdpaGEtPnNlcmlhbF9udW1iZXIsIGhv c3RfYXR0cnMtPnNlcmlhbF9udW1iZXIsCisJCQkgICAgICAgc2l6ZW9mKGdpaGEtPnNlcmlhbF9u dW1iZXIpKTsKKwkJCWdpaGEtPnNwZWVkICAgICAgICAgICAgID0gaG9zdF9hdHRycy0+c3BlZWQ7 CisJCQl7CisJCQkJc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcwkqaHM7CisKKwkJCQlpZiAoZnQt PmdldF9mY19ob3N0X3N0YXRzICE9IE5VTEwpIHsKKwkJCQkJaWYgKChocyA9IGZ0LT5nZXRfZmNf aG9zdF9zdGF0cygKKwkJCQkJCWluZm8tPnNjc2lpbmZvLT5ob3N0KSkgIT0gTlVMTCkgeworCQkJ CQkJZ2loYS0+c3RhdHMgPSAqaHM7CisJCQkJCX0gZWxzZSB7CisJCQkJCQltZW1zZXQoJihnaWhh LT5zdGF0cyksIDAsCisJCQkJCQkgICAgICAgc2l6ZW9mKGdpaGEtPnN0YXRzKSk7CisJCQkJCX0K KwkJCQl9CisJCQl9CisJCQlnaWhhLT5zdXBwb3J0ZWRfY2xhc3NlcyA9CisJCQkJaG9zdF9hdHRy cy0+c3VwcG9ydGVkX2NsYXNzZXM7CisJCQltZW1jcHkoZ2loYS0+c3VwcG9ydGVkX2ZjNHMsCisJ CQkgICAgICAgaG9zdF9hdHRycy0+c3VwcG9ydGVkX2ZjNHMsCisJCQkgICAgICAgc2l6ZW9mKGdp aGEtPnN1cHBvcnRlZF9mYzRzKSk7CisJCQlnaWhhLT5zdXBwb3J0ZWRfc3BlZWRzICA9IGhvc3Rf YXR0cnMtPnN1cHBvcnRlZF9zcGVlZHM7CisJCQltZW1jcHkoZ2loYS0+c3ltYm9saWNfbmFtZSwg aG9zdF9hdHRycy0+c3ltYm9saWNfbmFtZSwKKwkJCQkgICBzaXplb2YoZ2loYS0+c3ltYm9saWNf bmFtZSkpOworCQkJZ2loYS0+dGd0aWRfYmluZF90eXBlICAgPSBob3N0X2F0dHJzLT50Z3RpZF9i aW5kX3R5cGU7CisJCQkKKwkJCXJpbmdfcmVzLT5ycWlkICAgICAgICAgID0gcmluZ19yZXEtPnJx aWQ7CisJCQlyaW5nX3Jlcy0+cnNsdCAgICAgICAgICA9IDA7CisJCQkKKwkJCWJyZWFrOyB9CisJ CSAgCisJCWNhc2UgQ01ORF9HRVRfSU5JVElBTF9TVEFSR0VUX0FUVFJJQjogeworCQkJc3RydWN0 IHNjc2lfdGFyZ2V0CSpzdGFyZ2V0OworCQkJc3RydWN0IGZjX3N0YXJnZXRfYXR0cnMJKnN0YXJn ZXRfYXR0cnM7CisJCQl1bnNpZ25lZCBpbnQJCWkgPSAwOworCQkJc3RydWN0IGdpdGEJCSpnaXRh ID0gKHN0cnVjdCBnaXRhICopCisJCQkJCQkoaW5mby0+Z250X2FyZWEtPmFkZHIpOworCisJCQls aXN0X2Zvcl9lYWNoX2VudHJ5KHN0YXJnZXQsCisJCQkJCSAgICAmKGluZm8tPnNjc2lpbmZvLT5o b3N0LT5fX3RhcmdldHMpLAorCQkJCQkgICAgc2libGluZ3MpIHsKKwkJCQlzdGFyZ2V0X2F0dHJz ID0gKHN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzICopCisJCQkJCQkoJihzdGFyZ2V0LT5zdGFyZ2V0 X2RhdGEpKTsKKwkJCQlnaXRhLT5lW2ldLmNoYW5uZWwgICA9IHN0YXJnZXQtPmNoYW5uZWw7CisJ CQkJZ2l0YS0+ZVtpXS5pZCAgICAgICAgPSBzdGFyZ2V0LT5pZDsKKwkJCQlnaXRhLT5lW2ldLm5v ZGVfbmFtZSA9IHN0YXJnZXRfYXR0cnMtPm5vZGVfbmFtZTsKKwkJCQlnaXRhLT5lW2ldLnBvcnRf aWQgICA9IHN0YXJnZXRfYXR0cnMtPnBvcnRfaWQ7CisJCQkJZ2l0YS0+ZVtpXS5wb3J0X25hbWUg PSBzdGFyZ2V0X2F0dHJzLT5wb3J0X25hbWU7CisJCQkJaSsrOworCQkJCWlmIChpID4gU0NTSV9G Q19NQVhfU1RBUkdFVCkgeworCQkJCQlyaW5nX3Jlcy0+cnNsdCA9IC0xOworCQkJCQlnb3RvIG91 dF9naXRhOworCQkJCX0KKwkJCX0KKwkJCWdpdGEtPm51bSA9IGk7CisKKwkJCXJpbmdfcmVzLT5y cWlkID0gcmluZ19yZXEtPnJxaWQ7CisJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisKK291dF9naXRh OgorCQkJYnJlYWs7IH0KKwkJICAKKwkJY2FzZSBDTU5EX0dFVF9JTklUSUFMX1JQT1JUX0FUVFJJ QjogeworCQkJc3RydWN0IGZjX3Jwb3J0CQkqZm91bmRfcnBvcnQ7CisJCQl1bnNpZ25lZCBpbnQJ CWkgPSAwOworCQkJc3RydWN0IGdpcGEJCSpnaXBhID0gKHN0cnVjdCBnaXBhICopCisJCQkJCQko aW5mby0+Z250X2FyZWEtPmFkZHIpOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZvdW5kX3Jw b3J0LAorCQkJCSZmY19ob3N0X3Jwb3J0cyhpbmZvLT5zY3NpaW5mby0+aG9zdCksIHBlZXJzKSB7 CisJCQkJZ2lwYS0+ZVtpXS5kZXZfbG9zc190bW8gICA9CisJCQkJCWZvdW5kX3Jwb3J0LT5kZXZf bG9zc190bW87CisJCQkJZ2lwYS0+ZVtpXS5tYXhmcmFtZV9zaXplICA9CisJCQkJCWZvdW5kX3Jw b3J0LT5tYXhmcmFtZV9zaXplOworCQkJCWdpcGEtPmVbaV0ubm9kZV9uYW1lICAgICAgPQorCQkJ CQlmb3VuZF9ycG9ydC0+bm9kZV9uYW1lOworCQkJCWdpcGEtPmVbaV0ucG9ydF9pZCAgICAgICAg PQorCQkJCQlmb3VuZF9ycG9ydC0+cG9ydF9pZDsKKwkJCQlnaXBhLT5lW2ldLnBvcnRfbmFtZSAg ICAgID0KKwkJCQkJZm91bmRfcnBvcnQtPnBvcnRfbmFtZTsKKwkJCQlnaXBhLT5lW2ldLnBvcnRf c3RhdGUgICAgID0KKwkJCQkJZm91bmRfcnBvcnQtPnBvcnRfc3RhdGU7CisJCQkJZ2lwYS0+ZVtp XS5yb2xlcyAgICAgICAgICA9CisJCQkJCWZvdW5kX3Jwb3J0LT5yb2xlczsKKwkJCQlnaXBhLT5l W2ldLnNjc2lfdGFyZ2V0X2lkID0KKwkJCQkJZm91bmRfcnBvcnQtPnNjc2lfdGFyZ2V0X2lkOwor CQkJCWdpcGEtPmVbaV0uc3VwcG9ydGVkX2NsYXNzZXMgPQorCQkJCQlmb3VuZF9ycG9ydC0+c3Vw cG9ydGVkX2NsYXNzZXM7CisJCQkJZ2lwYS0+ZVtpXS5jaGFubmVsICAgICAgID0KKwkJCQkJZm91 bmRfcnBvcnQtPmNoYW5uZWw7CisJCQkJaSsrOworCQkJCWlmIChpID4gU0NTSV9GQ19NQVhfUlBP UlQpIHsKKwkJCQkJcmluZ19yZXMtPnJzbHQgPSAtMTsKKwkJCQkJZ290byBvdXRfZ2lwYTsKKwkJ CQl9CisJCQl9CisJCQlnaXBhLT5udW0gPSBpOworCisJCQlyaW5nX3Jlcy0+cnFpZCA9IHJpbmdf cmVxLT5ycWlkOworCQkJcmluZ19yZXMtPnJzbHQgPSAwOworCitvdXRfZ2lwYToKKwkJCWJyZWFr OyB9CisJCSAgCisJCWNhc2UgQ01ORF9HRVRfRlVOQ1RJT05fVEVNUExBVEU6IHsKKwkJCXN0cnVj dCBmY19mdW5jdGlvbl90ZW1wbGF0ZQkqZnQ7CisJCQlzdHJ1Y3QgZ2Z0cAkJKmdmdHAgPSAoc3Ry dWN0IGdmdHAgKikKKwkJCQkJCShpbmZvLT5nbnRfYXJlYS0+YWRkcik7CisKKwkJCWZ0ID0gZmNf c2hvc3QyZnQoaW5mby0+c2NzaWluZm8tPmhvc3QpOworCQkJbWVtY3B5KCYoZ2Z0cC0+ZnQpLCBm dCwgc2l6ZW9mKGdmdHAtPmZ0KSk7CisKKwkJCXJpbmdfcmVzLT5ycWlkID0gcmluZ19yZXEtPnJx aWQ7CisJCQlyaW5nX3Jlcy0+cnNsdCA9IDA7CisJCQkKKwkJCWJyZWFrOyB9CisJCSAgCisJCWRl ZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiB1bmtub3duIGNvbW1hbmQ+Pj5cbiIs CisJCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJCXJpbmdfcmVzLT5yc2x0ID0gLTE7CisJCQli cmVhazsKKwkJfQorCisJCVJJTkdfUFVTSF9SRVNQT05TRVMocmluZyk7CisJCW5vdGlmeV9yZW1v dGVfdmlhX2lycShpbmZvLT5pcnEpOworCX0KKworCW11dGV4X3VubG9jaygmbG9jayk7CisJCisJ cmV0dXJuIDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50CitmY2Jh Y2tfc2NoZWR1bGUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmNiYWNrX2luZm8JKmluZm8gPSAo c3RydWN0IGZjYmFja19pbmZvICopZGF0YTsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3Rv cCgpKSB7CisJCWluZm8tPmNvbmQgPSAwOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaW5m by0+d3EsCisJCQkJCSBpbmZvLT5jb25kIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CisKKwkJ c21wX21iKCk7CisKKwkJLyogZG8gbWFpbiBwcm9jZXNzaW5nICovCisJCSh2b2lkKWZjYmFja19t YWluKGluZm8pOworCX0KKworCWluZm8tPmt0aHJlYWQgPSBOVUxMOworCQorCXJldHVybiAwOwor fQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2ZjYmFja19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9p ZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGZjYmFja19pbmZvCSppbmZvOwor CisJaW5mbyA9IChzdHJ1Y3QgZmNiYWNrX2luZm8gKilkZXZfaWQ7CisKKwlpbmZvLT5jb25kID0g MTsKKwl3YWtlX3VwKCYoaW5mby0+d3EpKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwor CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2lkZXMgb24g b3Bwb3NpdGUgc2lkZSBvZiBfX3NldHVwX3hlbnN0b3JlKCkKKyAqIAkJaW4gc2NzaWZyb250L2Zj ZnJvbnQuYworICovCitzdGF0aWMgaW50CitfX3NldHVwX3hlbnN0b3JlKHN0cnVjdCBmY2JhY2tf aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZQkqZGV2ID0gaW5mby0+c2NzaWlu Zm8tPmRldjsKKwl1bnNpZ25lZCBsb25nCQlybmdyZWY7CisJdW5zaWduZWQgaW50CQlldnRjaG47 CisJaW50CQkJZ250cmVmOworCWludAkJCXJldCA9IDA7CisKKwlpZiAoKHJldCA9IHhlbmJ1c19n YXRoZXIoWEJUX05JTCwgZGV2LT5vdGhlcmVuZCwKKwkJCQkgImZjX3JuZ3JlZiIsICIlbHUiLCAm cm5ncmVmLAorCQkJCSAiZmNfZXZ0Y2huIiwgIiV1IiwgICZldnRjaG4sCisJCQkJICJmY19nbnRy ZWYiLCAiJWQiLCAgJmdudHJlZiwgTlVMTCkpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICI8 PDwlczogeGVuYnVzX2dhdGhlcigpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9f KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpbmZvLT5ybmdyZWYgPSBybmdyZWY7CisJaW5mby0+ ZXZ0Y2huID0gZXZ0Y2huOworCWluZm8tPmdudHJlZiA9IGdudHJlZjsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgdm9pZAorX191bnNldHVwX3hlbnN0b3JlKHN0cnVjdCBmY2JhY2tfaW5mbyAq aW5mbykKK3sKKwkvKiBjdXJyZW50bHksIG5vdGhpbmcgdG8gZG8gKi8KK30KKworLyoKKyAqIFRo aXMgZnVuY3Rpb24gcmVzaWRlcyBvbiBvcHBvc2l0ZSBzaWRlIG9mIF9fc2V0dXBfc2hhcmVkX3Jp bmcoKQorICoJCWluIHNjc2lmcm9udC9mY2Zyb250LmMKKyAqLworc3RhdGljIGludAorX19zZXR1 cF9zaGFyZWRfcmluZyhzdHJ1Y3QgZmNiYWNrX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgbG9u ZwkJCXJuZ3JlZiA9IGluZm8tPnJuZ3JlZjsKKwlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYJ b3A7CisJc3RydWN0IGZjaWZfc3JpbmcJCSpzcmluZzsKKwlpbnQJCQkJcmV0ID0gMDsKKwkKKwkv KiBtYXAgc2hhcmVkIHJpbmcgdG8gRG9tMCdzIFZBICovCisJaW5mby0+cmluZ19hcmVhID0gYWxs b2Nfdm1fYXJlYShQQUdFX1NJWkUpOworCWlmIChpbmZvLT5yaW5nX2FyZWEgPT0gTlVMTCkgewor CQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiBhbGxvY192bV9hcmVhKCkgZXJyb3I+Pj5cbiIsCisJ CSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJ fQorCisJZ250dGFiX3NldF9tYXBfb3AoJm9wLCAodW5zaWduZWQgbG9uZykoaW5mby0+cmluZ19h cmVhLT5hZGRyKSwKKwkJCQkJICBHTlRNQVBfaG9zdF9tYXAsIHJuZ3JlZiwKKwkJCQkJICBpbmZv LT5zY3NpaW5mby0+ZGV2LT5vdGhlcmVuZF9pZCk7CisJcmV0ID0gSFlQRVJWSVNPUl9ncmFudF90 YWJsZV9vcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCAmb3AsIDEpOworCUJVR19PTihyZXQpOwor CWlmIChvcC5zdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICI8PDwl czogSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCgpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19G VU5DVElPTl9fKTsKKwkJcmV0ID0gb3Auc3RhdHVzOworCQlnb3RvIG91dDE7CisJfQorCisJc3Jp bmcgPSAoc3RydWN0IGZjaWZfc3JpbmcgKikoaW5mby0+cmluZ19hcmVhLT5hZGRyKTsKKwlCQUNL X1JJTkdfSU5JVCgmKGluZm8tPnJpbmcpLCBzcmluZywgUEFHRV9TSVpFKTsKKworCS8qIGF0IHRo aXMgcG9pbnQsIHlvdSBjYW4gYWNjZXNzIHNoYXJlZCByaW5nIGJ5IGluZm8tPmZjaW5mby5zcmlu ZyAqLworCisJcmV0dXJuIDA7CisKK291dDE6CisJZnJlZV92bV9hcmVhKGluZm8tPnJpbmdfYXJl YSk7CisJCitvdXQwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitfX3Vuc2V0dXBf c2hhcmVkX3Jpbmcoc3RydWN0IGZjYmFja19pbmZvICppbmZvKQoreworCWZyZWVfdm1fYXJlYShp bmZvLT5yaW5nX2FyZWEpOworCisJLyogbXVzdCBwZXJmb3JtIHNvbWV0aGluZyBhYm91dCAiZ3Jh bnQgdGFibGUiICovCisKKwlpbmZvLT5ybmdyZWYgICAgID0gR1JBTlRfSU5WQUxJRF9SRUY7CisJ aW5mby0+cmluZy5zcmluZyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK19fc2V0dXBfZXZlbnRf Y2hhbm5lbChzdHJ1Y3QgZmNiYWNrX2luZm8gKmluZm8pCit7CisJaW50CQlyZXQgPSAwOworCQor CS8qIGZvciBmcm9udGVuZCBkcml2ZW4gY29tbXVuaWNhdGlvbiAqLworCS8qIChmcm9udGVuZCAt PiBiYWNrZW5kIC0+IGZyb250ZW5kKSAqLworCXsKKwkJaW50CQlpcnE7CisKKwkJaW5pdF93YWl0 cXVldWVfaGVhZCgmKGluZm8tPndxKSk7CisJCQorCQlpZiAoKGlycSA9IGJpbmRfaW50ZXJkb21h aW5fZXZ0Y2huX3RvX2lycWhhbmRsZXIoCisJCQkJaW5mby0+c2NzaWluZm8tPmRldi0+b3RoZXJl bmRfaWQsIGluZm8tPmV2dGNobiwKKwkJCQlmY2JhY2tfaW50ciwgMCwgImZjaWYtYmFja2VuZCIs IGluZm8pKSA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICI8PDwlczogYmlu ZF9pbnRlcmRvbWFpbl9ldnRjaG5fdG9faXJxaGFuZGxlcigpIGVycm9yPj4+XG4iLAorCQkJICAg ICAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXQgPSBpcnE7CisJCQlnb3RvIG91dDsKKwkJfQorCQlp bmZvLT5pcnEgPSBpcnE7CisKKwkJaW5mby0+a3RocmVhZCA9IGt0aHJlYWRfcnVuKGZjYmFja19z Y2hlZHVsZSwgaW5mbywgImZjaWYiKTsKKwkJaWYgKElTX0VSUihpbmZvLT5rdGhyZWFkKSkgewor CQkJcHJpbnRrKEtFUk5fRVJSICI8PDwlczoga3RocmVhZF9ydW4oKSBlcnJvcj4+PlxuIiwKKwkJ CSAgICAgICBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCitvdXQ6CisJcmV0dXJuIHJldDsKK30K Kworc3RhdGljIHZvaWQKK19fdW5zZXR1cF9ldmVudF9jaGFubmVsKHN0cnVjdCBmY2JhY2tfaW5m byAqaW5mbykKK3sKKwlrdGhyZWFkX3N0b3AoaW5mby0+a3RocmVhZCk7CisJdW5iaW5kX2Zyb21f aXJxaGFuZGxlcihpbmZvLT5pcnEsIGluZm8pOworfQorCitzdGF0aWMgaW50CitfX3NldHVwX2dy YW50X3RhYmxlKHN0cnVjdCBmY2JhY2tfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZ250dGFiX21h cF9ncmFudF9yZWYgCW9wOworCXN0cnVjdCB2bV9zdHJ1Y3QJCSpnbnRfYXJlYTsKKwlpbnQJCQkJ ZXJyOworCisJaWYgKChnbnRfYXJlYSA9IGFsbG9jX3ZtX2FyZWEoUEFHRV9TSVpFKSkgPT0gTlVM TCkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiBhbGxvY192bV9hcmVhKCkgZXJyb3I+Pj5c biIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwln bnR0YWJfc2V0X21hcF9vcCgmb3AsICh1bnNpZ25lZCBsb25nKShnbnRfYXJlYS0+YWRkciksCisJ CQkgIEdOVE1BUF9ob3N0X21hcCwKKwkJCSAgaW5mby0+Z250cmVmLCBpbmZvLT5zY3NpaW5mby0+ ZGV2LT5vdGhlcmVuZF9pZCk7CisKKwllcnIgPSBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdO VFRBQk9QX21hcF9ncmFudF9yZWYsICZvcCwgMSk7CisJaWYgKG9wLnN0YXR1cykgeworCQlwcmlu dGsoS0VSTl9FUlIKKwkJICAgICAgICI8PDwlczogSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcCgp IGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIG9wLnN0YXR1 czsKKwl9CisKKwlpbmZvLT5nbnRfYXJlYSA9IGdudF9hcmVhOworCQorCXJldHVybiAwOworfQor CitpbnQKK2ZjYmFja19jb25uZWN0aW9uX3NldHVwKHN0cnVjdCBzY3NpYmFja19pbmZvICpzY3Np aW5mbykKK3sKKwlzdHJ1Y3QgZmNiYWNrX2luZm8JKmluZm87CisJaW50CQkJcmV0ID0gMDsKKwor CXsKKwkJc2NzaWluZm8tPmZjaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmY2JhY2tfaW5m byksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoc2NzaWluZm8tPmZjaW5mbyA9PSBOVUxM KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQwOworCQl9CisJCW1lbXNldChzY3Np aW5mby0+ZmNpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGZjYmFja19pbmZvKSk7CisJCWluZm8gPSAo c3RydWN0IGZjYmFja19pbmZvICopKHNjc2lpbmZvLT5mY2luZm8pOworCQlpbmZvLT5zY3NpaW5m byA9IHNjc2lpbmZvOworCX0KKwkKKwkvKiBleGNoYW5nZSB2YXJpb3VzIHBhcmFtZXRlcnMgdGhy b3VnaCB4ZW5zdG9yZSAqLworCWlmICgocmV0ID0gX19zZXR1cF94ZW5zdG9yZShpbmZvKSkgIT0g MCkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiBfX3NldHVwX3hlbnN0b3JlKCkgZXJyb3I+ Pj5cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDE7CisJfQorCisJLyog cHJlcGFyZSBmb3Igc2hhcmVkIHJpbmcgKi8KKwlpZiAoKHJldCA9IF9fc2V0dXBfc2hhcmVkX3Jp bmcoaW5mbykpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICI8PDwlczogX19zZXR1cF9zaGFy ZWRfcmluZygpIGVycm9yPj4+XG4iLAorCQkJICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBvdXQx OworCX0KKworCS8qIHByZXBhcmUgZm9yIGV2ZW50IGNoYW5uZWwgKi8KKwlpZiAoKHJldCA9IF9f c2V0dXBfZXZlbnRfY2hhbm5lbChpbmZvKSkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8 PCVzOiBfX3NldHVwX2V2ZW50X2NoYW5uZWwoKSBlcnJvcj4+PlxuIiwKKwkJCSAgIF9fRlVOQ1RJ T05fXyk7CisJCWdvdG8gb3V0MjsKKwl9CisKKwkvKiBwcmVwYXJlIGZvciBncmFudCB0YWJsZSAq LworCWlmICgocmV0ID0gX19zZXR1cF9ncmFudF90YWJsZShpbmZvKSkgIT0gMCkgeworCQlwcmlu dGsoS0VSTl9FUlIgIjw8PCVzOiBfX3NldHVwX2dyYW50X3RhYmxlKCkgZXJyb3I+Pj5cbiIsCisJ CQkgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDI7CisJfQorCisJbXV0ZXhfaW5pdCgmbG9j ayk7CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlfX3Vuc2V0dXBfc2hhcmVkX3JpbmcoaW5mbyk7 CisKK291dDE6CisJa2ZyZWUoc2NzaWluZm8tPmZjaW5mbyk7CisKK291dDA6CisJcmV0dXJuIHJl dDsKK30KKwordm9pZAorZmNiYWNrX2Nvbm5lY3Rpb25fdW5zZXR1cChzdHJ1Y3Qgc2NzaWJhY2tf aW5mbyAqc2NzaWluZm8pCit7CisJc3RydWN0IGZjYmFja19pbmZvCSppbmZvID0gKHN0cnVjdCBm Y2JhY2tfaW5mbyAqKQorCQkJCQkJKHNjc2lpbmZvLT5mY2luZm8pOworCisJX191bnNldHVwX2V2 ZW50X2NoYW5uZWwoaW5mbyk7CisJX191bnNldHVwX3NoYXJlZF9yaW5nKGluZm8pOworCV9fdW5z ZXR1cF94ZW5zdG9yZShpbmZvKTsKKworCWtmcmVlKHNjc2lpbmZvLT5mY2luZm8pOworfQorCisK K01PRFVMRV9ERVNDUklQVElPTigiWGVuIFBhcmEtVmlydHVhbCBTQ1NJIEZpYnJlIENoYW5uZWwg QmFja2VuZCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtciAwZjE2OWIz NmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRyaXZlcnMveGVuL3Njc2liYWNrL2ludGVyZmFjZS5jCi0t LSBhL2RyaXZlcnMveGVuL3Njc2liYWNrL2ludGVyZmFjZS5jCUZyaSBKdW4gMjkgMTg6MDk6MTkg MjAwNyArMDkwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpYmFjay9pbnRlcmZhY2UuYwlGcmkgSnVu IDI5IDE5OjQ4OjU4IDIwMDcgKzA5MDAKQEAgLTMzLDYgKzMzLDEwIEBACiAjaW5jbHVkZSAiY29t bW9uLmgiCiAjaW5jbHVkZSA8eGVuL2V2dGNobi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQu aD4KKworI2lmZGVmIENPTkZJR19YRU5fU0NTSV9GQworZXh0ZXJuIHZvaWQJCWZjYmFja19jb25u ZWN0aW9uX3Vuc2V0dXAoc3RydWN0IHNjc2liYWNrX2luZm8gKik7CisjZW5kaWYKIAogc3RhdGlj IGttZW1fY2FjaGVfdCAqc2NzaWJhY2tfY2FjaGVwOwogCkBAIC0xMzAsNiArMTM0LDEwIEBAIGZy ZWVfdm06CiAKIHZvaWQgc2NzaWJhY2tfZGlzY29ubmVjdChzdHJ1Y3Qgc2NzaWJhY2tfaW5mbyAq aW5mbykKIHsKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMKKwlmY2JhY2tfY29ubmVjdGlvbl91 bnNldHVwKGluZm8pOworI2VuZGlmCisJCiAJaWYgKGluZm8tPmt0aHJlYWQpIHsKIAkJa3RocmVh ZF9zdG9wKGluZm8tPmt0aHJlYWQpOwogCQlpbmZvLT5rdGhyZWFkID0gTlVMTDsKZGlmZiAtciAw ZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRyaXZlcnMveGVuL3Njc2liYWNrL3Njc2liYWNr LmMKLS0tIGEvZHJpdmVycy94ZW4vc2NzaWJhY2svc2NzaWJhY2suYwlGcmkgSnVuIDI5IDE4OjA5 OjE5IDIwMDcgKzA5MDAKKysrIGIvZHJpdmVycy94ZW4vc2NzaWJhY2svc2NzaWJhY2suYwlGcmkg SnVuIDI5IDE5OjQ4OjU4IDIwMDcgKzA5MDAKQEAgLTQ1LDYgKzQ1LDEwIEBACiAKICNkZWZpbmUg SU5WQUxJRF9HUkFOVF9IQU5ETEUJMHhGRkZGCiAKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMK K2V4dGVybiBpbnQJZmNiYWNrX2Nvbm5lY3Rpb25fc2V0dXAoc3RydWN0IHNjc2liYWNrX2luZm8g Kik7CisjZW5kaWYKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXN0cnVjdCBzY3NpYmFja19pbmZvICpp bmZvOwogCXVuc2lnbmVkIGxvbmcgcnFpZDsKQEAgLTUzNiw2ICs1NDAsMTggQEAgc3RhdGljIGlu dCBzY3NpYmFja19jb25uZWN0KHN0cnVjdCBzY3NpYgogCQl4ZW5idXNfZGV2X2Vycm9yKGluZm8t PmRldiwgZXJyLCAic3RhcnQgc2NzaWlmIik7CiAJfQogCisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJ X0ZDCisJeworCQlpbnQJcmV0OworCisJCWlmICgocmV0ID0gZmNiYWNrX2Nvbm5lY3Rpb25fc2V0 dXAoaW5mbykpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiPDw8JXM6IGZjYmFja19zZXR1 cCgpIGVycm9yPj4+XG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gcmV0 OworCQl9CisJfQorI2VuZGlmCQorCQogCXJldHVybiAwOwogfQogCkBAIC02NzQsNiArNjkwLDEz IEBAIHN0YXRpYyBpbnQgX19pbml0IHNjc2liYWNrX2luaXQodm9pZCkKIAlpZiAoIWlzX3J1bm5p bmdfb25feGVuKCkpCiAJCXJldHVybiAtRU5PREVWOwogCisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJ X0ZDCisJaWYgKCFpc19pbml0aWFsX3hlbmRvbWFpbigpKSB7CisJCXByaW50ayhLRVJOX0VSUiAi PDw8JXM6IE5vdCBvbiBhIERvbTA+Pj5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtMTsK Kwl9CisjZW5kaWYKKwogCW1tYXBfcGFnZXMgPSBDQU5fUVVFVUUgKiBTR19UQUJMRVNJWkU7CiAK IAlwZW5kaW5nX3JlcXMgICAgICAgICAgPSBrbWFsbG9jKHNpemVvZihwZW5kaW5nX3JlcXNbMF0p ICoKZGlmZiAtciAwZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1NDMwIGRyaXZlcnMveGVuL3Njc2lm cm9udC9NYWtlZmlsZQotLS0gYS9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvTWFrZWZpbGUJRnJpIEp1 biAyOSAxODowOToxOSAyMDA3ICswOTAwCisrKyBiL2RyaXZlcnMveGVuL3Njc2lmcm9udC9NYWtl ZmlsZQlGcmkgSnVuIDI5IDE5OjQ4OjU4IDIwMDcgKzA5MDAKQEAgLTEsNCArMSw1IEBAIG9iai0k KENPTkZJR19YRU5fU0NTSV9GUk9OVEVORCkJOj0geGVuc2MKIG9iai0kKENPTkZJR19YRU5fU0NT SV9GUk9OVEVORCkJOj0geGVuc2NzaS5vCitvYmotJChDT05GSUdfWEVOX1NDU0lfRkMpCSs9IGZj ZnJvbnQubwogCiB4ZW5zY3NpLW9ianMgOj0gc2NzaWZyb250Lm8KIApkaWZmIC1yIDBmMTY5YjM2 YmU4MSAtciA5OWQ0N2UzZjU0MzAgZHJpdmVycy94ZW4vc2NzaWZyb250L2ZjLmgKLS0tIC9kZXYv bnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy94ZW4vc2Nz aWZyb250L2ZjLmgJRnJpIEp1biAyOSAxOTo0ODo1OCAyMDA3ICswOTAwCkBAIC0wLDAgKzEsMjI5 IEBACisjZGVmaW5lIENNTkRfR0VUX0hPU1RfUE9SVF9JRAkJCSAgMQkvKiBnaHBpICovCisjZGVm aW5lIENNTkRfR0VUX0hPU1RfUE9SVF9UWVBFCQkJICAyCS8qIGdocHQgKi8KKyNkZWZpbmUgQ01O RF9HRVRfSE9TVF9QT1JUX1NUQVRFCQkgIDMJLyogZ2hwcyAqLworI2RlZmluZSBDTU5EX0dFVF9I T1NUX0FDVElWRV9GQzRTCQkgIDQJLyogZ2hhZiAqLworI2RlZmluZSBDTU5EX0dFVF9IT1NUX1NQ RUVECQkJICA1CS8qIGdoc3AgKi8KKyNkZWZpbmUgQ01ORF9HRVRfSE9TVF9GQUJSSUNfTkFNRQkJ ICA2CS8qIGdoZm4gKi8KKyNkZWZpbmUgQ01ORF9HRVRfSE9TVF9TVEFUUwkJCSAgNwkvKiBnaHN0 ICovCisjZGVmaW5lIENNTkRfUkVTRVRfSE9TVF9TVEFUUwkJCSAgOAkvKiByaHN0ICovCisjZGVm aW5lIENNTkRfSVNTVUVfSE9TVF9MSVAJCQkgIDkJLyogaWhsaSAqLworI2RlZmluZSBDTU5EX0dF VF9TVEFSR0VUX1BPUlRfSUQJCSAyMQkvKiBndHBpICovCisjZGVmaW5lIENNTkRfR0VUX1NUQVJH RVRfTk9ERV9OQU1FCQkgMjIJLyogZ3RubiAqLworI2RlZmluZSBDTU5EX0dFVF9TVEFSR0VUX1BP UlRfTkFNRQkJIDIzCS8qIGd0cG4gKi8KKyNkZWZpbmUgQ01ORF9HRVRfUlBPUlRfTE9TU19UTU8J CQkgNDEJLyogZ3BsdCAqLworI2RlZmluZSBDTU5EX1NFVF9SUE9SVF9MT1NTX1RNTwkJCSA0Mgkv KiBzcGx0ICovCisjZGVmaW5lIENNTkRfR0VUX0lOSVRJQUxfU0hPU1RfQVRUUklCCQkxMDEJLyog Z2loYSAqLworI2RlZmluZSBDTU5EX0dFVF9JTklUSUFMX1NUQVJHRVRfQVRUUklCCQkxMDIJLyog Z2l0YSAqLworI2RlZmluZSBDTU5EX0dFVF9JTklUSUFMX1JQT1JUX0FUVFJJQgkJMTAzCS8qIGdp cGEgKi8KKyNkZWZpbmUgQ01ORF9HRVRfRlVOQ1RJT05fVEVNUExBVEUJCTEyMQkvKiBnZnRwICov CisKKyNkZWZpbmUgR1JBTlRfSU5WQUxJRF9SRUYJCQkwCisKKworLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor CURlZmluaXRpb24gb2YgUmluZyBTdHJ1Y3R1cmVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBE ZWZpbml0aW9uIG9mCisgKgl1bmlvbiAgZmNpZl9zcmluZ19lbnRyeSwKKyAqCXN0cnVjdCBmY2lm X3NyaW5nLAorICoJc3RydWN0IGZjaWZfZnJvbnRfcmluZywKKyAqCXN0cnVjdCBmY2lmX2JhY2tf cmluZywKKyAqCWZjaWZfc3JpbmdfdCwKKyAqCWZjaWZfZnJvbnRfcmluZ190LAorICoJZmNpZl9i YWNrX3JpbmdfdAorKi8KK3N0cnVjdCBmY2lmX3JlcXVlc3QgeworCXVuc2lnbmVkIGludAlycWlk OworCXVuc2lnbmVkIGludAljbW5kOworCXVuaW9uIHsKKwkJLyogR2V0X3NUYXJnZXRfUG9ydF9J ZCAqLworCQkvKiBHZXRfc1RhcmdldF9Ob2RlX05hbWUgKi8KKwkJLyogR2V0X3NUYXJnZXRfUG9y dF9OYW1lICovCisJCXN0cnVjdCB7CisJCQl1MzIJY2hhbm5lbDsKKwkJCXUzMglpZDsKKwkJfSBn dHBpLCBndG5uLCBndHBuOworCSAgCisJCS8qIEdldF9yUG9ydF9Mb3NzX1RtbyAqLworCQlzdHJ1 Y3QgeworCQkJdTY0CW5vZGVfbmFtZTsKKwkJCXU2NAlwb3J0X25hbWU7CisJCQl1MzIJcG9ydF9p ZDsKKwkJCXUzMglyb2xlczsKKwkJfSBncGx0OworCisJCS8qIFNldF9yUG9ydF9Mb3NzX1RtbyAq LworCQlzdHJ1Y3QgeworCQkJdTY0CW5vZGVfbmFtZTsKKwkJCXU2NAlwb3J0X25hbWU7CisJCQl1 MzIJcG9ydF9pZDsKKwkJCXUzMglyb2xlczsKKwkJCXUzMgl0aW1lb3V0OworCQl9IHNwbHQ7CisJ fSB1OworfTsKKworc3RydWN0IGZjaWZfcmVzcG9uc2UgeworCXVuc2lnbmVkIGludAlycWlkOwor CXVuc2lnbmVkIGludAlyc2x0OworCXVuaW9uIHsKKwkJLyogR2V0X0hvc3RfUG9ydF9JZCAqLwor CQlzdHJ1Y3QgeworCQkJdTMyCXBvcnRfaWQ7CisJCX0gZ2hwaTsKKworCQkvKiBHZXRfSG9zdF9Q b3J0X1R5cGUgKi8KKwkJc3RydWN0IHsKKwkJCWVudW0gZmNfcG9ydF90eXBlCXBvcnRfdHlwZTsK KwkJfSBnaHB0OworCSAgCisJCS8qIEdldF9Ib3N0X1BvcnRfU3RhdGUgKi8KKwkJc3RydWN0IHsK KwkJCWVudW0gZmNfcG9ydF9zdGF0ZQlwb3J0X3N0YXRlOworCQl9IGdocHM7CisJICAKKwkJLyog R2V0X0hvc3RfQWN0aXZlX0ZjNHMgKi8KKwkJc3RydWN0IHsKKwkJCXU4CWFjdGl2ZV9mYzRzW0ZD X0ZDNF9MSVNUX1NJWkVdOworCQl9IGdoYWY7CisJICAKKwkJLyogR2V0X0hvc3RfU1BlZWQgKi8K KwkJc3RydWN0IHsKKwkJCXUzMglzcGVlZDsKKwkJfSBnaHNwOworCSAgCisJCS8qIEdldF9Ib3N0 X0ZhYnJpY19OYW1lICovCisJCXN0cnVjdCB7CisJCQl1NjQJZmFicmljX25hbWU7CisJCX0gZ2hm bjsKKwkgIAorCQkvKiBHZXRfSG9zdF9TVGF0cyAqLworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGZj X2hvc3Rfc3RhdGlzdGljcwlzdGF0czsKKwkJfSBnaHN0OworCSAgCisJCS8qIEdldF9zVGFyZ2V0 X1BvcnRfSWQgKi8KKwkJc3RydWN0IHsKKwkJCXUzMglwb3J0X2lkOworCQl9IGd0cGk7CisJICAK KwkJLyogR2V0X3NUYXJnZXRfTm9kZV9OYW1lICovCisJCXN0cnVjdCB7CisJCQl1NjQJbm9kZV9u YW1lOworCQl9IGd0bm47CisJICAKKwkJLyogR2V0X3NUYXJnZXRfUG9ydF9OYW1lICovCisJCXN0 cnVjdCB7CisJCQl1NjQJcG9ydF9uYW1lOworCQl9IGd0cG47CisJICAKKwkJLyogR2V0X3JQb3J0 X0xvc3NfVG1vICovCisJCXN0cnVjdCB7CisJCQl1MzIJdGltZW91dDsKKwkJfSBncGx0OworCSAg CisJCS8qIFNldF9yUG9ydF9Mb3NzX1RtbyAqLworCQlzdHJ1Y3QgeworCQkJdTMyCXRpbWVvdXQ7 CisJCX0gc3BsdDsKKwl9IHU7Cit9OworCitERUZJTkVfUklOR19UWVBFUyhmY2lmLCBzdHJ1Y3Qg ZmNpZl9yZXF1ZXN0LCBzdHJ1Y3QgZmNpZl9yZXNwb25zZSk7CisKKworLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCURlZmluaXRpb24gb2YgR3JhbnQgVGFibGUgU3RydWN0dXJlcworICAgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLworCisjZGVmaW5lIFNDU0lfRkNfTUFYX1NUQVJHRVQJMzIJLyogbGltaXRlZCBieSBQQUdF X1NJWkUgKi8KKyNkZWZpbmUgU0NTSV9GQ19NQVhfUlBPUlQJMzIJLyogbGltaXRlZCBieSBQQUdF X1NJWkUgKi8KKworc3RydWN0IGdpaGEgeworCXU4CQkJYWN0aXZlX2ZjNHNbRkNfRkM0X0xJU1Rf U0laRV07CisJdTY0CQkJZmFicmljX25hbWU7CisJdTMyCQkJbWF4ZnJhbWVfc2l6ZTsKKwl1NjQJ CQlub2RlX25hbWU7CisJdTY0CQkJcGVybWFuZW50X3BvcnRfbmFtZTsKKwl1MzIJCQlwb3J0X2lk OworCXU2NAkJCXBvcnRfbmFtZTsKKwllbnVtIGZjX3BvcnRfc3RhdGUJcG9ydF9zdGF0ZTsKKwll bnVtIGZjX3BvcnRfdHlwZQlwb3J0X3R5cGU7CisJY2hhcgkJCXNlcmlhbF9udW1iZXJbRkNfU0VS SUFMX05VTUJFUl9TSVpFXTsKKwl1MzIJCQlzcGVlZDsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0 aWNzCXN0YXRzOworCXUzMgkJCXN1cHBvcnRlZF9jbGFzc2VzOworCXU4CQkJc3VwcG9ydGVkX2Zj NHNbRkNfRkM0X0xJU1RfU0laRV07CisJdTMyCQkJc3VwcG9ydGVkX3NwZWVkczsKKwljaGFyCQkJ c3ltYm9saWNfbmFtZVtGQ19TWU1CT0xJQ19OQU1FX1NJWkVdOworCWVudW0gZmNfdGd0aWRfYmlu ZGluZ190eXBlCXRndGlkX2JpbmRfdHlwZTsKK307CisKK3N0cnVjdCBnaXRhIHsKKwl1MzIJCQlu dW07CisJc3RydWN0IHsKKwkJdTY0CQlub2RlX25hbWU7CisJCXUzMgkJcG9ydF9pZDsKKwkJdTY0 CQlwb3J0X25hbWU7CisJCXUzMgkJY2hhbm5lbDsKKwkJdTMyCQlpZDsKKwl9IGVbU0NTSV9GQ19N QVhfU1RBUkdFVF07Cit9OworCitzdHJ1Y3QgZ2lwYSB7CisJdTMyCQkJbnVtOworCXN0cnVjdCB7 CisJCXUzMgkJZGV2X2xvc3NfdG1vOworCQl1MzIJCW1heGZyYW1lX3NpemU7CisJCXU2NAkJbm9k ZV9uYW1lOworCQl1MzIJCXBvcnRfaWQ7CisJCXU2NAkJcG9ydF9uYW1lOworCQllbnVtIGZjX3Bv cnRfc3RhdGUJcG9ydF9zdGF0ZTsKKwkJdTMyCQlyb2xlczsKKwkJdTMyCQlzY3NpX3RhcmdldF9p ZDsKKwkJdTMyCQlzdXBwb3J0ZWRfY2xhc3NlczsKKwkJdTMyCQljaGFubmVsOworCX0gZVtTQ1NJ X0ZDX01BWF9SUE9SVF07Cit9OworCitzdHJ1Y3QgZ2Z0cCB7CisJc3RydWN0IGZjX2Z1bmN0aW9u X3RlbXBsYXRlCWZ0OworfTsKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJRGVmaW5pdGlvbiBvZiBJ bnRlcm5hbCBJbmZvcm1hdGlvbiBTdHJ1Y3R1cmVzCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0 cnVjdCBmY2Zyb250X2luZm8geworCXN0cnVjdCBzY3NpZnJvbnRfaW5mbwkJKnNjc2lpbmZvOwor CXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MJaHM7CisJdW5zaWduZWQgbG9uZwkJCXJuZ3JlZjsK Kwl1bnNpZ25lZCBpbnQJCQlpcnE7CisKKwlzdHJ1Y3QgZmNpZl9mcm9udF9yaW5nCQlyaW5nOwor CisJdm9pZAkJCQkqYWRkcjsKKwlpbnQJCQkJZ250cmVmOworICAKKwl3YWl0X3F1ZXVlX2hlYWRf dAkJd3E7CisJaW50CQkJCWNvbmQ7Cit9OworCitzdHJ1Y3QgZmNiYWNrX2luZm8geworCXN0cnVj dCBzY3NpYmFja19pbmZvCQkqc2NzaWluZm87CisKKwl1bnNpZ25lZCBsb25nCQkJcm5ncmVmOwor CXVuc2lnbmVkIGludAkJCWV2dGNobjsKKwl1bnNpZ25lZCBpbnQJCQlpcnE7CisKKwlzdHJ1Y3Qg dm1fc3RydWN0CQkqcmluZ19hcmVhOworCXN0cnVjdCBmY2lmX2JhY2tfcmluZwkJcmluZzsKKwor CXN0cnVjdCB2bV9zdHJ1Y3QJCSpnbnRfYXJlYTsKKwlpbnQJCQkJZ250cmVmOworCisJc3RydWN0 IHRhc2tfc3RydWN0CQkqa3RocmVhZDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAkJd3E7CisJaW50CQkJ CWNvbmQ7Cit9OwpkaWZmIC1yIDBmMTY5YjM2YmU4MSAtciA5OWQ0N2UzZjU0MzAgZHJpdmVycy94 ZW4vc2NzaWZyb250L2ZjZnJvbnQuYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAg MTk3MCArMDAwMAorKysgYi9kcml2ZXJzL3hlbi9zY3NpZnJvbnQvZmNmcm9udC5jCUZyaSBKdW4g MjkgMTk6NDg6NTggMjAwNyArMDkwMApAQCAtMCwwICsxLDEwMjcgQEAKKyNpbmNsdWRlIDxhc20v cGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Rldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o PgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+ CisjaW5jbHVkZSA8eGVuL3hlbmJ1cy5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4K KyNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3Bv cnQuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjaW5jbHVkZSA8eGVu L2ludGVyZmFjZS9pby9yaW5nLmg+CisKKyNpbmNsdWRlICJmYy5oIgorCisvKiBtdXN0IGJlIG1l cmdlZCBpbnRvIG9uZSBpbnN0YW5jZSAqLworI2lmIDEKKyNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNl L2lvL3Njc2lpZi5oPgorI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvaW8vcmluZy5oPgorCisvKiB0 ZW50YXRpdmUuIE11c3QgYmUgbW92ZWQgdG8gKi5oIGZpbGUgKi8KK3N0cnVjdCBzY3NpX3NoYWRv dyB7CisJc3RydWN0IHNjc2lpZl9yZXF1ZXN0IHJpbmdfcmVxOworCXVuc2lnbmVkIGxvbmcgcmVx X3Njc2lfY21uZDsKK307CisKKyNkZWZpbmUgU0NTSV9SSU5HX1NJWkUgX19SSU5HX1NJWkUoKHN0 cnVjdCBzY3NpaWZfc3JpbmcgKikwLCBQQUdFX1NJWkUpCisKK3N0cnVjdCBzY3NpZnJvbnRfaW5m byB7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0 OworCXVuc2lnbmVkIGludCBldnRjaG47CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBs b25nIHJpbmdfcmVmOworCXN0cnVjdCBzY3NpaWZfZnJvbnRfcmluZyByaW5nOworCXN0cnVjdCBz Y3NpX3NoYWRvdyBzaGFkb3dbU0NTSV9SSU5HX1NJWkVdOworCXVuc2lnbmVkIGxvbmcgc2hhZG93 X2ZyZWU7CisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJX0ZDCisJdm9pZAkqZmNpbmZvOworI2VuZGlm Cit9OworI2VuZGlmIC8qIDEgKi8KKworZXh0ZXJuIHZvaWQJbm90aWZ5X3JlbW90ZV92aWFfaXJx KGludCk7CitleHRlcm4gaW50CWlycV90b19ldnRjaG5fcG9ydChpbnQpOworZXh0ZXJuIGludAli aW5kX2xpc3RlbmluZ19wb3J0X3RvX2lycWhhbmRsZXIodW5zaWduZWQgaW50LAorCQkJaXJxcmV0 dXJuX3QgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQl1bnNp Z25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7CitleHRlcm4gaW50CWdudHRhYl9lbmRf Zm9yZWlnbl9hY2Nlc3NfcmVmKGdyYW50X3JlZl90LCBpbnQpOworZXh0ZXJuIHZvaWQJdW5iaW5k X2Zyb21faXJxaGFuZGxlcih1bnNpZ25lZCBpbnQsIHZvaWQgKik7CitleHRlcm4gdm9pZAlnbnR0 YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKGdyYW50X3JlZl90LCBpbnQsIHVuc2lnbmVkIGxvbmcpOwor CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlCSpmY19zaG9zdDJmdChzdHJ1Y3Qg U2NzaV9Ib3N0ICopOworZXh0ZXJuIHZvaWQJZmNfdXBkYXRlX2Z0KHN0cnVjdCBTY3NpX0hvc3Qg KiwKKwkJCSAgICAgc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlICopOworCisvKiBjb3BpZWQg ImZ0Iiwgd2hpY2ggaXMgY29ycmVjdGVkIGJ5IERvbTAncyAiZnQiICovCitzdGF0aWMgc3RydWN0 IGZjX2Z1bmN0aW9uX3RlbXBsYXRlCXB2ZmNfdHJhbnNwb3J0X2Z1bmN0aW9uczsKK3N0YXRpYyBz dHJ1Y3QgbXV0ZXgJCQlsb2NrOworc3RhdGljIHVuc2lnbmVkIGludAkJCXJxaWRfc2VlZCA9IDA7 CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RhdGljIHN0cnVjdCBmY2lmX3Jlc3BvbnNlICoK K19fZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShzdHJ1Y3QgZmNmcm9udF9pbmZvICppbmZv KQoreworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJCSpyaW5nID0gJihpbmZvLT5yaW5nKTsKKwlz dHJ1Y3QgZmNpZl9yZXNwb25zZQkJKnJpbmdfcmVzOworCQorCVJJTkdfUFVTSF9SRVFVRVNUUyhy aW5nKTsKKwlub3RpZnlfcmVtb3RlX3ZpYV9pcnEoaW5mby0+aXJxKTsKKworCWluZm8tPmNvbmQg PSAwOworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShpbmZvLT53cSwgaW5mby0+Y29uZCk7CisJ CisJcmluZ19yZXMgPSBSSU5HX0dFVF9SRVNQT05TRShyaW5nLCAxKTsKKworI2lmIDEKKwlwcmlu dGsoS0VSTl9FUlIgIjw8PCVzOiBycWlkPSV1Pj4+XG4iLCBfX0ZVTkNUSU9OX18sIHJpbmdfcmVz LT5ycWlkKTsKKyNlbmRpZgorCisJcmV0dXJuIHJpbmdfcmVzOworfQorCisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KKworc3RhdGljIHZvaWQKK2ZjX2dldF9ob3N0X3BvcnRfaWQoc3RydWN0IFNjc2lf SG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGZjZnJvbnRfaW5mbwkqaW5mbyA9ICgoc3RydWN0IHNj c2lmcm9udF9pbmZvICopCisJCQkJCSAoc2hvc3QtPmhvc3RkYXRhKSktPmZjaW5mbzsKKwlzdHJ1 Y3QgZmNpZl9mcm9udF9yaW5nCSpyaW5nID0gJihpbmZvLT5yaW5nKTsKKwlzdHJ1Y3QgZmNpZl9y ZXF1ZXN0CSpyaW5nX3JlcTsKKwlzdHJ1Y3QgZmNpZl9yZXNwb25zZQkqcmluZ19yZXM7CisKKwlt dXRleF9sb2NrKCZsb2NrKTsKKwkKKwlyaW5nX3JlcSAgICAgICA9IFJJTkdfR0VUX1JFUVVFU1Qo JihpbmZvLT5yaW5nKSwgcmluZy0+cmVxX3Byb2RfcHZ0KTsKKwlyaW5nX3JlcS0+cnFpZCA9IHJx aWRfc2VlZCsrOworCXJpbmdfcmVxLT5jbW5kID0gQ01ORF9HRVRfSE9TVF9QT1JUX0lEOworCQor CXJpbmdfcmVzID0gX19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGluZm8pOworCWlmIChy aW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJCWZjX2hvc3RfcG9ydF9pZChzaG9zdCkgPSByaW5nX3Jl cy0+dS5naHBpLnBvcnRfaWQ7CisJfSBlbHNlIHsKKwkJZmNfaG9zdF9wb3J0X2lkKHNob3N0KSA9 ICh1MzIpMHhmZmZmZmZmZjsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2spOworfQorCitzdGF0 aWMgdm9pZAorZmNfZ2V0X2hvc3RfcG9ydF90eXBlKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQor eworCXN0cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoKHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAq KQorCQkJCQkgKHNob3N0LT5ob3N0ZGF0YSkpLT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRf cmluZwkqcmluZyA9ICYoaW5mby0+cmluZyk7CisJc3RydWN0IGZjaWZfcmVxdWVzdAkqcmluZ19y ZXE7CisJc3RydWN0IGZjaWZfcmVzcG9uc2UJKnJpbmdfcmVzOworCisJbXV0ZXhfbG9jaygmbG9j ayk7CisJCisJcmluZ19yZXEgICAgICAgPSBSSU5HX0dFVF9SRVFVRVNUKCYoaW5mby0+cmluZyks IHJpbmctPnJlcV9wcm9kX3B2dCk7CisJcmluZ19yZXEtPnJxaWQgPSBycWlkX3NlZWQrKzsKKwly aW5nX3JlcS0+Y21uZCA9IENNTkRfR0VUX0hPU1RfUE9SVF9UWVBFOworCQorCXJpbmdfcmVzID0g X19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGluZm8pOworCWlmIChyaW5nX3Jlcy0+cnNs dCA9PSAwKSB7CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9IHJpbmdfcmVzLT51LmdocHQu cG9ydF90eXBlOworCX0gZWxzZSB7CisJCWZjX2hvc3RfcG9ydF90eXBlKHNob3N0KSA9ICh1MzIp MHhmZmZmZmZmZjsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2spOworfQorCitzdGF0aWMgdm9p ZAorZmNfZ2V0X2hvc3RfcG9ydF9zdGF0ZShzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlz dHJ1Y3QgZmNmcm9udF9pbmZvCSppbmZvID0gKChzdHJ1Y3Qgc2NzaWZyb250X2luZm8gKikKKwkJ CQkJIChzaG9zdC0+aG9zdGRhdGEpKS0+ZmNpbmZvOworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJ KnJpbmcgPSAmKGluZm8tPnJpbmcpOworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOwor CXN0cnVjdCBmY2lmX3Jlc3BvbnNlCSpyaW5nX3JlczsKKworCW11dGV4X2xvY2soJmxvY2spOwor CisJcmluZ19yZXEgICAgICAgPSBSSU5HX0dFVF9SRVFVRVNUKCYoaW5mby0+cmluZyksIHJpbmct PnJlcV9wcm9kX3B2dCk7CisJcmluZ19yZXEtPnJxaWQgPSBycWlkX3NlZWQrKzsKKwlyaW5nX3Jl cS0+Y21uZCA9IENNTkRfR0VUX0hPU1RfUE9SVF9TVEFURTsKKwkKKwlyaW5nX3JlcyA9IF9fZG9f cmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShpbmZvKTsKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0g MCkgeworCQlmY19ob3N0X3BvcnRfc3RhdGUoc2hvc3QpID0gcmluZ19yZXMtPnUuZ2hwcy5wb3J0 X3N0YXRlOworCX0gZWxzZSB7CisJCWZjX2hvc3RfcG9ydF9zdGF0ZShzaG9zdCkgPSAodTMyKTB4 ZmZmZmZmZmY7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIHZvaWQK K2ZjX2dldF9ob3N0X2FjdGl2ZV9mYzRzKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0 cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoKHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqKQorCQkJ CQkgKHNob3N0LT5ob3N0ZGF0YSkpLT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRfcmluZwkq cmluZyA9ICYoaW5mby0+cmluZyk7CisJc3RydWN0IGZjaWZfcmVxdWVzdAkqcmluZ19yZXE7CisJ c3RydWN0IGZjaWZfcmVzcG9uc2UJKnJpbmdfcmVzOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisK KwlyaW5nX3JlcSAgICAgICA9IFJJTkdfR0VUX1JFUVVFU1QoJihpbmZvLT5yaW5nKSwgcmluZy0+ cmVxX3Byb2RfcHZ0KTsKKwlyaW5nX3JlcS0+cnFpZCA9IHJxaWRfc2VlZCsrOworCXJpbmdfcmVx LT5jbW5kID0gQ01ORF9HRVRfSE9TVF9BQ1RJVkVfRkM0UzsKKwkKKwlyaW5nX3JlcyA9IF9fZG9f cmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShpbmZvKTsKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0g MCkgeworCQltZW1jcHkoZmNfaG9zdF9hY3RpdmVfZmM0cyhzaG9zdCksCisJCSAgICAgICByaW5n X3Jlcy0+dS5naGFmLmFjdGl2ZV9mYzRzLAorCQkgICAgICAgc2l6ZW9mKGZjX2hvc3RfYWN0aXZl X2ZjNHMoc2hvc3QpKSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KGZjX2hvc3RfYWN0aXZlX2ZjNHMo c2hvc3QpLCAwLAorCQkgICAgICAgc2l6ZW9mKGZjX2hvc3RfYWN0aXZlX2ZjNHMoc2hvc3QpKSk7 CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2dldF9o b3N0X3NwZWVkKHN0cnVjdCBTY3NpX0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBmY2Zyb250X2lu Zm8JKmluZm8gPSAoKHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqKQorCQkJCQkgKHNob3N0LT5ob3N0 ZGF0YSkpLT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRfcmluZwkqcmluZyA9ICYoaW5mby0+ cmluZyk7CisJc3RydWN0IGZjaWZfcmVxdWVzdAkqcmluZ19yZXE7CisJc3RydWN0IGZjaWZfcmVz cG9uc2UJKnJpbmdfcmVzOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisKKwlyaW5nX3JlcSAgICAg ICA9IFJJTkdfR0VUX1JFUVVFU1QoJihpbmZvLT5yaW5nKSwgcmluZy0+cmVxX3Byb2RfcHZ0KTsK KwlyaW5nX3JlcS0+cnFpZCA9IHJxaWRfc2VlZCsrOworCXJpbmdfcmVxLT5jbW5kID0gQ01ORF9H RVRfSE9TVF9TUEVFRDsKKwkKKwlyaW5nX3JlcyA9IF9fZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNw b25zZShpbmZvKTsKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0gMCkgeworCQlmY19ob3N0X3NwZWVk KHNob3N0KSA9IHJpbmdfcmVzLT51Lmdoc3Auc3BlZWQ7CisJfSBlbHNlIHsKKwkJZmNfaG9zdF9z cGVlZChzaG9zdCkgPSAodTMyKTB4ZmZmZmZmZmY7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsb2Nr KTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2dldF9ob3N0X2ZhYnJpY19uYW1lKHN0cnVjdCBTY3Np X0hvc3QgKnNob3N0KQoreworCXN0cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoKHN0cnVjdCBz Y3NpZnJvbnRfaW5mbyAqKQorCQkJCQkgKHNob3N0LT5ob3N0ZGF0YSkpLT5mY2luZm87CisJc3Ry dWN0IGZjaWZfZnJvbnRfcmluZwkqcmluZyA9ICYoaW5mby0+cmluZyk7CisJc3RydWN0IGZjaWZf cmVxdWVzdAkqcmluZ19yZXE7CisJc3RydWN0IGZjaWZfcmVzcG9uc2UJKnJpbmdfcmVzOworCisJ bXV0ZXhfbG9jaygmbG9jayk7CisKKwlyaW5nX3JlcSAgICAgICA9IFJJTkdfR0VUX1JFUVVFU1Qo JihpbmZvLT5yaW5nKSwgcmluZy0+cmVxX3Byb2RfcHZ0KTsKKwlyaW5nX3JlcS0+cnFpZCA9IHJx aWRfc2VlZCsrOworCXJpbmdfcmVxLT5jbW5kID0gQ01ORF9HRVRfSE9TVF9GQUJSSUNfTkFNRTsK KwkKKwlyaW5nX3JlcyA9IF9fZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShpbmZvKTsKKwlp ZiAocmluZ19yZXMtPnJzbHQgPT0gMCkgeworCQlmY19ob3N0X2ZhYnJpY19uYW1lKHNob3N0KSA9 IHJpbmdfcmVzLT51LmdoZm4uZmFicmljX25hbWU7CisJfSBlbHNlIHsKKwkJZmNfaG9zdF9mYWJy aWNfbmFtZShzaG9zdCkgPSAodTY0KTB4ZmZmZmZmZmZmZmZmZmZmZjsKKwl9CisKKwltdXRleF91 bmxvY2soJmxvY2spOworfQorCitzdGF0aWMgc3RydWN0IGZjX2hvc3Rfc3RhdGlzdGljcyAqCitm Y19nZXRfc3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGZjZnJvbnRf aW5mbwkJKmluZm8gPSAoKHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqKQorCQkJCQkJIChzaG9zdC0+ aG9zdGRhdGEpKS0+ZmNpbmZvOworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJCSpyaW5nID0gJihp bmZvLT5yaW5nKTsKKwlzdHJ1Y3QgZmNpZl9yZXF1ZXN0CQkqcmluZ19yZXE7CisJc3RydWN0IGZj aWZfcmVzcG9uc2UJCSpyaW5nX3JlczsKKwlzdHJ1Y3QgZmNfaG9zdF9zdGF0aXN0aWNzCSpyZXQ7 CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKworCXJpbmdfcmVxICAgICAgID0gUklOR19HRVRfUkVR VUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFfcHJvZF9wdnQpOworCXJpbmdfcmVxLT5ycWlk ID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9IT1NUX1NUQVRTOwor CQorCXJpbmdfcmVzID0gX19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGluZm8pOworCWlm IChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJCS8qICJpbmZvLT5ocyIgaXMgYXBwcm9wcmlhdGUg cG9zaXRpb24gPyAqLworCQltZW1jcHkoJihpbmZvLT5ocyksICYocmluZ19yZXMtPnUuZ2hzdC5z dGF0cyksCisJCSAgICAgICBzaXplb2YoaW5mby0+aHMpKTsKKwkJcmV0ID0gJihyaW5nX3Jlcy0+ dS5naHN0LnN0YXRzKTsKKwl9IGVsc2UgeworCQlyZXQgPSBOVUxMOworCX0KKworCW11dGV4X3Vu bG9jaygmbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorZmNfcmVzZXRf c3RhdHMoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGZjZnJvbnRfaW5mbwkq aW5mbyA9ICgoc3RydWN0IHNjc2lmcm9udF9pbmZvICopCisJCQkJCSAoc2hvc3QtPmhvc3RkYXRh KSktPmZjaW5mbzsKKwlzdHJ1Y3QgZmNpZl9mcm9udF9yaW5nCSpyaW5nID0gJihpbmZvLT5yaW5n KTsKKwlzdHJ1Y3QgZmNpZl9yZXF1ZXN0CSpyaW5nX3JlcTsKKwlzdHJ1Y3QgZmNpZl9yZXNwb25z ZQkqcmluZ19yZXM7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKworCXJpbmdfcmVxICAgICAgID0g UklOR19HRVRfUkVRVUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFfcHJvZF9wdnQpOworCXJp bmdfcmVxLT5ycWlkID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX1JFU0VU X0hPU1RfU1RBVFM7CisJCisJcmluZ19yZXMgPSBfX2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9u c2UoaW5mbyk7CisKKwltdXRleF91bmxvY2soJmxvY2spOworfQorCitzdGF0aWMgaW50CitmY19p c3N1ZV9saXAoc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QpCit7CisJc3RydWN0IGZjZnJvbnRfaW5m bwkqaW5mbyA9ICgoc3RydWN0IHNjc2lmcm9udF9pbmZvICopCisJCQkJCSAoc2hvc3QtPmhvc3Rk YXRhKSktPmZjaW5mbzsKKwlzdHJ1Y3QgZmNpZl9mcm9udF9yaW5nCSpyaW5nID0gJihpbmZvLT5y aW5nKTsKKwlzdHJ1Y3QgZmNpZl9yZXF1ZXN0CSpyaW5nX3JlcTsKKwlzdHJ1Y3QgZmNpZl9yZXNw b25zZQkqcmluZ19yZXM7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKworCXJpbmdfcmVxICAgICAg ID0gUklOR19HRVRfUkVRVUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFfcHJvZF9wdnQpOwor CXJpbmdfcmVxLT5ycWlkID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0lT U1VFX0hPU1RfTElQOworCQorCXJpbmdfcmVzID0gX19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3Bv bnNlKGluZm8pOworCQorCW11dGV4X3VubG9jaygmbG9jayk7CisKKwlyZXR1cm4gcmluZ19yZXMt PnJzbHQ7Cit9CisKK3N0YXRpYyB2b2lkCitmY19nZXRfc3RhcmdldF9wb3J0X2lkKHN0cnVjdCBz Y3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaG9zdCA9IGRldl90 b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZmNmcm9udF9pbmZvCSppbmZv ICA9ICgoc3RydWN0IHNjc2lmcm9udF9pbmZvICopCisJCQkJCSAgKHNob3N0LT5ob3N0ZGF0YSkp LT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRfcmluZwkqcmluZyAgPSAmKGluZm8tPnJpbmcp OworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOworCXN0cnVjdCBmY2lmX3Jlc3BvbnNl CSpyaW5nX3JlczsKKworCW11dGV4X2xvY2soJmxvY2spOworCisJcmluZ19yZXEgPSBSSU5HX0dF VF9SRVFVRVNUKCYoaW5mby0+cmluZyksIHJpbmctPnJlcV9wcm9kX3B2dCk7CisJcmluZ19yZXEt PnJxaWQgICAgICAgICAgID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgICAgICAgICAg ID0gQ01ORF9HRVRfU1RBUkdFVF9QT1JUX0lEOworCXJpbmdfcmVxLT51Lmd0cGkuY2hhbm5lbCA9 IHN0YXJnZXQtPmNoYW5uZWw7CisJcmluZ19yZXEtPnUuZ3RwaS5pZCAgICAgID0gc3RhcmdldC0+ aWQ7CisJCisJcmluZ19yZXMgPSBfX2RvX3JlcXVlc3RfYW5kX3dhaXRfcmVzcG9uc2UoaW5mbyk7 CisJaWYgKHJpbmdfcmVzLT5yc2x0ID09IDApIHsKKwkJZmNfc3RhcmdldF9wb3J0X2lkKHN0YXJn ZXQpID0gcmluZ19yZXMtPnUuZ3RwaS5wb3J0X2lkOworCX0gZWxzZSB7CisJCWZjX3N0YXJnZXRf cG9ydF9pZChzdGFyZ2V0KSA9ICh1MzIpMHhmZmZmZmZmZjsKKwl9CisKKwltdXRleF91bmxvY2so JmxvY2spOworfQorCitzdGF0aWMgdm9pZAorZmNfZ2V0X3N0YXJnZXRfbm9kZV9uYW1lKHN0cnVj dCBzY3NpX3RhcmdldCAqc3RhcmdldCkKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaG9zdCA9IGRl dl90b19zaG9zdChzdGFyZ2V0LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZmNmcm9udF9pbmZvCSpp bmZvICA9ICgoc3RydWN0IHNjc2lmcm9udF9pbmZvICopCisJCQkJCSAgKHNob3N0LT5ob3N0ZGF0 YSkpLT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRfcmluZwkqcmluZyAgPSAmKGluZm8tPnJp bmcpOworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOworCXN0cnVjdCBmY2lmX3Jlc3Bv bnNlCSpyaW5nX3JlczsKKworCW11dGV4X2xvY2soJmxvY2spOworCisJcmluZ19yZXEgPSBSSU5H X0dFVF9SRVFVRVNUKCYoaW5mby0+cmluZyksIHJpbmctPnJlcV9wcm9kX3B2dCk7CisJcmluZ19y ZXEtPnJxaWQgICAgICAgICAgID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgICAgICAg ICAgID0gQ01ORF9HRVRfU1RBUkdFVF9OT0RFX05BTUU7CisJcmluZ19yZXEtPnUuZ3Rubi5jaGFu bmVsID0gc3RhcmdldC0+Y2hhbm5lbDsKKwlyaW5nX3JlcS0+dS5ndG5uLmlkICAgICAgPSBzdGFy Z2V0LT5pZDsKKwkKKwlyaW5nX3JlcyA9IF9fZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShp bmZvKTsKKwlpZiAocmluZ19yZXMtPnJzbHQgPT0gMCkgeworCQlmY19zdGFyZ2V0X25vZGVfbmFt ZShzdGFyZ2V0KSA9IHJpbmdfcmVzLT51Lmd0bm4ubm9kZV9uYW1lOworCX0gZWxzZSB7CisJCWZj X3N0YXJnZXRfbm9kZV9uYW1lKHN0YXJnZXQpID0gKHU2NCkweGZmZmZmZmZmZmZmZmZmZmY7CisJ fQorCisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKK30KKworc3RhdGljIHZvaWQKK2ZjX2dldF9zdGFy Z2V0X3BvcnRfbmFtZShzdHJ1Y3Qgc2NzaV90YXJnZXQgKnN0YXJnZXQpCit7CisJc3RydWN0IFNj c2lfSG9zdAkqc2hvc3QgPSBkZXZfdG9fc2hvc3Qoc3RhcmdldC0+ZGV2LnBhcmVudCk7CisJc3Ry dWN0IGZjZnJvbnRfaW5mbwkqaW5mbyAgPSAoKHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqKQorCQkJ CQkgIChzaG9zdC0+aG9zdGRhdGEpKS0+ZmNpbmZvOworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJ KnJpbmcgID0gJihpbmZvLT5yaW5nKTsKKwlzdHJ1Y3QgZmNpZl9yZXF1ZXN0CSpyaW5nX3JlcTsK KwlzdHJ1Y3QgZmNpZl9yZXNwb25zZQkqcmluZ19yZXM7CisKKwltdXRleF9sb2NrKCZsb2NrKTsK KworCXJpbmdfcmVxID0gUklOR19HRVRfUkVRVUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFf cHJvZF9wdnQpOworCXJpbmdfcmVxLT5ycWlkICAgICAgICAgICA9IHJxaWRfc2VlZCsrOworCXJp bmdfcmVxLT5jbW5kICAgICAgICAgICA9IENNTkRfR0VUX1NUQVJHRVRfUE9SVF9OQU1FOworCXJp bmdfcmVxLT51Lmd0cG4uY2hhbm5lbCA9IHN0YXJnZXQtPmNoYW5uZWw7CisJcmluZ19yZXEtPnUu Z3Rwbi5pZCAgICAgID0gc3RhcmdldC0+aWQ7CisJCisJcmluZ19yZXMgPSBfX2RvX3JlcXVlc3Rf YW5kX3dhaXRfcmVzcG9uc2UoaW5mbyk7CisJaWYgKHJpbmdfcmVzLT5yc2x0ID09IDApIHsKKwkJ ZmNfc3RhcmdldF9wb3J0X25hbWUoc3RhcmdldCkgPSByaW5nX3Jlcy0+dS5ndHBuLnBvcnRfbmFt ZTsKKwl9IGVsc2UgeworCQlmY19zdGFyZ2V0X3BvcnRfbmFtZShzdGFyZ2V0KSA9ICh1NjQpMHhm ZmZmZmZmZmZmZmZmZmZmOworCX0KKworCW11dGV4X3VubG9jaygmbG9jayk7Cit9CisKK3N0YXRp YyB2b2lkCitmY19nZXRfcnBvcnRfbG9zc190bW8oc3RydWN0IGZjX3Jwb3J0ICpycG9ydCkKK3sK KwlzdHJ1Y3QgU2NzaV9Ib3N0CSpzaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKKwlzdHJ1 Y3QgZmNmcm9udF9pbmZvCSppbmZvICA9ICgoc3RydWN0IHNjc2lmcm9udF9pbmZvICopCisJCQkJ CSAgKHNob3N0LT5ob3N0ZGF0YSkpLT5mY2luZm87CisJc3RydWN0IGZjaWZfZnJvbnRfcmluZwkq cmluZyAgPSAmKGluZm8tPnJpbmcpOworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOwor CXN0cnVjdCBmY2lmX3Jlc3BvbnNlCSpyaW5nX3JlczsKKworCW11dGV4X2xvY2soJmxvY2spOwor CisJcmluZ19yZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCYoaW5mby0+cmluZyksIHJpbmctPnJlcV9w cm9kX3B2dCk7CisJcmluZ19yZXEtPnJxaWQgICAgICAgICAgICAgPSBycWlkX3NlZWQrKzsKKwly aW5nX3JlcS0+Y21uZCAgICAgICAgICAgICA9IENNTkRfR0VUX1JQT1JUX0xPU1NfVE1POworCXJp bmdfcmVxLT51LmdwbHQubm9kZV9uYW1lID0gcnBvcnQtPm5vZGVfbmFtZTsKKwlyaW5nX3JlcS0+ dS5ncGx0LnBvcnRfbmFtZSA9IHJwb3J0LT5wb3J0X25hbWU7CisJcmluZ19yZXEtPnUuZ3BsdC5w b3J0X2lkICAgPSBycG9ydC0+cG9ydF9pZDsKKwlyaW5nX3JlcS0+dS5ncGx0LnJvbGVzICAgICA9 IHJwb3J0LT5yb2xlczsKKworCXJpbmdfcmVzID0gX19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3Bv bnNlKGluZm8pOworCWlmIChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJCXJwb3J0LT5kZXZfbG9z c190bW8gPSByaW5nX3Jlcy0+dS5ncGx0LnRpbWVvdXQ7CisJfSBlbHNlIHsKKwkJcnBvcnQtPmRl dl9sb3NzX3RtbyA9ICh1MzIpMHhmZmZmZmZmZjsKKwl9CisKKwltdXRleF91bmxvY2soJmxvY2sp OworfQorCitzdGF0aWMgdm9pZAorZmNfc2V0X3Jwb3J0X2xvc3NfdG1vKHN0cnVjdCBmY19ycG9y dCAqcnBvcnQsIHVpbnQzMl90IHRpbWVvdXQpCit7CisJc3RydWN0IFNjc2lfSG9zdAkqc2hvc3Qg PSBycG9ydF90b19zaG9zdChycG9ydCk7CisJc3RydWN0IGZjZnJvbnRfaW5mbwkqaW5mbyAgPSAo KHN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqKQorCQkJCQkgIChzaG9zdC0+aG9zdGRhdGEpKS0+ZmNp bmZvOworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJKnJpbmcgID0gJihpbmZvLT5yaW5nKTsKKwlz dHJ1Y3QgZmNpZl9yZXF1ZXN0CSpyaW5nX3JlcTsKKwlzdHJ1Y3QgZmNpZl9yZXNwb25zZQkqcmlu Z19yZXM7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKworCXJpbmdfcmVxID0gUklOR19HRVRfUkVR VUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFfcHJvZF9wdnQpOworCXJpbmdfcmVxLT5ycWlk ICAgICAgICAgICAgID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgICAgICAgICAgICAg PSBDTU5EX1NFVF9SUE9SVF9MT1NTX1RNTzsKKwlyaW5nX3JlcS0+dS5zcGx0Lm5vZGVfbmFtZSA9 IHJwb3J0LT5ub2RlX25hbWU7CisJcmluZ19yZXEtPnUuc3BsdC5wb3J0X25hbWUgPSBycG9ydC0+ cG9ydF9uYW1lOworCXJpbmdfcmVxLT51LnNwbHQucG9ydF9pZCAgID0gcnBvcnQtPnBvcnRfaWQ7 CisJcmluZ19yZXEtPnUuc3BsdC5yb2xlcyAgICAgPSBycG9ydC0+cm9sZXM7CisJcmluZ19yZXEt PnUuc3BsdC50aW1lb3V0ICAgPSB0aW1lb3V0OworCQorCXJpbmdfcmVzID0gX19kb19yZXF1ZXN0 X2FuZF93YWl0X3Jlc3BvbnNlKGluZm8pOworCWlmIChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJ CXJwb3J0LT5kZXZfbG9zc190bW8gPSByaW5nX3Jlcy0+dS5zcGx0LnRpbWVvdXQ7CisJfSBlbHNl IHsKKwkJcnBvcnQtPmRldl9sb3NzX3RtbyA9ICh1MzIpMHhmZmZmZmZmZjsKKwl9CisKKwltdXRl eF91bmxvY2soJmxvY2spOworfQorCitzdHJ1Y3QgZmNfZnVuY3Rpb25fdGVtcGxhdGUJZmNfdHJh bnNwb3J0X2Z1bmN0aW9ucyA9IHsKKwkuZ2V0X3Jwb3J0X2Rldl9sb3NzX3RtbwkJPSBmY19nZXRf cnBvcnRfbG9zc190bW8sCisJLnNldF9ycG9ydF9kZXZfbG9zc190bW8JCT0gZmNfc2V0X3Jwb3J0 X2xvc3NfdG1vLAorCS5nZXRfc3RhcmdldF9ub2RlX25hbWUJCT0gZmNfZ2V0X3N0YXJnZXRfbm9k ZV9uYW1lLAorCS5nZXRfc3RhcmdldF9wb3J0X25hbWUJCT0gZmNfZ2V0X3N0YXJnZXRfcG9ydF9u YW1lLAorCS5nZXRfc3RhcmdldF9wb3J0X2lkCQk9IGZjX2dldF9zdGFyZ2V0X3BvcnRfaWQsCisJ LmdldF9ob3N0X3BvcnRfaWQJCT0gZmNfZ2V0X2hvc3RfcG9ydF9pZCwKKwkuZ2V0X2hvc3RfcG9y dF90eXBlCQk9IGZjX2dldF9ob3N0X3BvcnRfdHlwZSwKKwkuZ2V0X2hvc3RfcG9ydF9zdGF0ZQkJ PSBmY19nZXRfaG9zdF9wb3J0X3N0YXRlLAorCS5nZXRfaG9zdF9hY3RpdmVfZmM0cwkJPSBmY19n ZXRfaG9zdF9hY3RpdmVfZmM0cywKKwkuZ2V0X2hvc3Rfc3BlZWQJCQk9IGZjX2dldF9ob3N0X3Nw ZWVkLAorCS5nZXRfaG9zdF9mYWJyaWNfbmFtZQkJPSBmY19nZXRfaG9zdF9mYWJyaWNfbmFtZSwK KwkuZ2V0X2ZjX2hvc3Rfc3RhdHMJCT0gZmNfZ2V0X3N0YXRzLAorCS5yZXNldF9mY19ob3N0X3N0 YXRzCQk9IGZjX3Jlc2V0X3N0YXRzLAorCS5pc3N1ZV9mY19ob3N0X2xpcAkJPSBmY19pc3N1ZV9s aXAsCisKKy8vCS5kZF9mY3Jwb3J0X3NpemUJCT0gc2l6ZW9mKHN0cnVjdCBmY19ycG9ydF9kYXRh KSwKKworCS8qIHJlbW90ZSBwb3J0IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ycG9ydF9t YXhmcmFtZV9zaXplCT0gMSwKKwkuc2hvd19ycG9ydF9zdXBwb3J0ZWRfY2xhc3Nlcwk9IDEsCisJ LnNob3dfcnBvcnRfZGV2X2xvc3NfdG1vCT0gMSwKKworCS8qIHRhcmdldCBkeW5hbWljIGF0dHJp YnV0ZXMgKi8KKwkuc2hvd19zdGFyZ2V0X25vZGVfbmFtZQkJPSAxLAorCS5zaG93X3N0YXJnZXRf cG9ydF9uYW1lCQk9IDEsCisJLnNob3dfc3RhcmdldF9wb3J0X2lkCQk9IDEsCisKKwkvKiBob3N0 IGZpeGVkIGF0dHJpYnV0ZXMgKi8KKwkuc2hvd19ob3N0X25vZGVfbmFtZQkJPSAxLAorCS5zaG93 X2hvc3RfcG9ydF9uYW1lCQk9IDEsCisJLnNob3dfaG9zdF9wZXJtYW5lbnRfcG9ydF9uYW1lCT0g MSwKKwkuc2hvd19ob3N0X3N1cHBvcnRlZF9jbGFzc2VzCT0gMSwKKwkuc2hvd19ob3N0X3N1cHBv cnRlZF9mYzRzCT0gMSwKKwkuc2hvd19ob3N0X3N5bWJvbGljX25hbWUJPSAxLAorCS5zaG93X2hv c3Rfc3VwcG9ydGVkX3NwZWVkcwk9IDEsCisJLnNob3dfaG9zdF9tYXhmcmFtZV9zaXplCT0gMSwK Kwkuc2hvd19ob3N0X3NlcmlhbF9udW1iZXIJPSAxLAorCisJLyogaG9zdCBkeW5hbWljIGF0dHJp YnV0ZSAqLworCS5zaG93X2hvc3RfcG9ydF9pZAkJPSAxLAorCS5zaG93X2hvc3RfcG9ydF90eXBl CQk9IDEsCisJLnNob3dfaG9zdF9wb3J0X3N0YXRlCQk9IDEsCisJLnNob3dfaG9zdF9hY3RpdmVf ZmM0cwkJPSAxLAorCS5zaG93X2hvc3Rfc3BlZWQJCT0gMSwKKwkuc2hvd19ob3N0X2ZhYnJpY19u YW1lCQk9IDEsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGlycXJldHVy bl90CitmY2Zyb250X2ludHIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq cHRyZWdzKQoreworCXN0cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoc3RydWN0IGZjZnJvbnRf aW5mbyAqKWRldl9pZDsKKwlzdHJ1Y3QgZmNpZl9mcm9udF9yaW5nCSpyaW5nID0gJihpbmZvLT5y aW5nKTsKKwlzdHJ1Y3QgZmNpZl9yZXNwb25zZQkqcmluZ19yZXM7CisJCisJcmluZ19yZXMgPSBS SU5HX0dFVF9SRVNQT05TRShyaW5nLCAxKTsKKworCWluZm8tPmNvbmQgPSAxOworCXdha2VfdXAo JihpbmZvLT53cSkpOworCQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCisKK3N0YXRpYyBpbnQKK19fc2V0dXBfZ3JhbnRfdGFibGUoc3RydWN0IGZjZnJv bnRfaW5mbyAqaW5mbykKK3sKKwl2b2lkCSphZGRyOworCWludAlnbnRyZWY7CisKKwlpZiAoKGFk ZHIgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJcmV0dXJu IC1FTk9NRU07CisJfQorCSAgCisJZ250cmVmID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNz KGluZm8tPnNjc2lpbmZvLT5kZXYtPm90aGVyZW5kX2lkLAorCQkJCQkgICAgIHZpcnRfdG9fbWZu KGFkZHIpLCAwKTsKKwlpZiAoZ250cmVmIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAg ICAgICI8PDwlczogZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKCkgZXJyb3I+Pj5cbiIsCisJ CSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gZ250cmVmOworCX0KKworCWluZm8tPmFk ZHIgICA9IGFkZHI7CisJaW5mby0+Z250cmVmID0gZ250cmVmOworCQorCXJldHVybiAwOworfQor CisvKgorICogVGhpcyBmdW5jdGlvbiByZXNpZGVzIG9uIG9wcG9zaXRlIHNpZGUgb2YgX19zZXR1 cF9zaGFyZWRfcmluZygpCisgKiAJCWluIHNjc2liYWNrL2ZjYmFjay5jCisgKi8KK3N0YXRpYyBp bnQKK19fc2V0dXBfc2hhcmVkX3Jpbmcoc3RydWN0IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlz dHJ1Y3QgeGVuYnVzX2RldmljZQkqZGV2ID0gaW5mby0+c2NzaWluZm8tPmRldjsKKwlzdHJ1Y3Qg ZmNpZl9zcmluZwkqc3Jpbmc7CisJdW5zaWduZWQgbG9uZwkJcm5ncmVmID0gR1JBTlRfSU5WQUxJ RF9SRUY7CisJaW50CQkJcmV0ID0gMDsKKworCWlmICgoc3JpbmcgPSAoc3RydWN0IGZjaWZfc3Jp bmcgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCkpCisJICAgID09IE5VTEwpIHsKKwkJcHJp bnRrKEtFUk5fRVJSICI8PDwlczogX19nZXRfZnJlZV9wYWdlKCkgZXJyb3I+Pj5cbiIsCisJCSAg ICAgICBfX0ZVTkNUSU9OX18pOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDA7CisJfQor CQorCVNIQVJFRF9SSU5HX0lOSVQoc3JpbmcpOworCisJLyoKKwkgKiBEbyBmb2xsb3dpbmcKKwkg KgkJaW5mby0+cmluZy5zcmluZyA9IHNyaW5nOworCSAqCQkuLi4KKwkgKi8KKwlGUk9OVF9SSU5H X0lOSVQoJihpbmZvLT5yaW5nKSwgc3JpbmcsIFBBR0VfU0laRSk7CisKKwlybmdyZWYgPSB4ZW5i dXNfZ3JhbnRfcmluZyhkZXYsIHZpcnRfdG9fbWZuKGluZm8tPnJpbmcuc3JpbmcpKTsKKwlpZiAo cm5ncmVmIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiB4ZW5idXNfZ3JhbnRfcmlu ZygpIGVycm9yPj4+XG4iLAorCQkJICAgX19GVU5DVElPTl9fKTsKKwkJcmV0ID0gLUVOT01FTTsK KwkJZ290byBvdXQxOworCX0KKwlpbmZvLT5ybmdyZWYgPSBybmdyZWY7CisKKwlyZXR1cm4gMDsK Kworb3V0MToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpc3JpbmcpOworCitvdXQwOgorCXJl dHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitfX3Vuc2V0dXBfc2hhcmVkX3Jpbmcoc3RydWN0 IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+cm5ncmVmICE9IEdSQU5UX0lOVkFM SURfUkVGKSB7CisJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nlc3MoaW5mby0+cm5ncmVmLCAwLAor CQkJCQkgICh1bnNpZ25lZCBsb25nKShpbmZvLT5yaW5nLnNyaW5nKSk7CisJCWluZm8tPnJuZ3Jl ZiA9IEdSQU5UX0lOVkFMSURfUkVGOworCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoaW5m by0+cmluZy5zcmluZykpOworCQlpbmZvLT5yaW5nLnNyaW5nID0gTlVMTDsKKwl9Cit9CisKKy8q CisgKiBUaGlzIGZ1bmN0aW9uIHJlc2lkZXMgb24gb3Bwb3NpdGUgc2lkZSBvZiBfX3NldHVwX2V2 ZW50X2NoYW5uZWwoKQorICogCQlpbiBzY3NpYmFjay9mY2JhY2suYworICovCitzdGF0aWMgaW50 CitfX3NldHVwX2V2ZW50X2NoYW5uZWwoc3RydWN0IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlz dHJ1Y3QgeGVuYnVzX2RldmljZQkqZGV2ID0gaW5mby0+c2NzaWluZm8tPmRldjsKKwlpbnQJCQly ZXQgPSAwOworCisJLyogZm9yIGZyb250ZW5kIGRyaXZlbiBjb21tdW5pY2F0aW9uICovCisJLyog KGZyb250ZW5kIC0+IGJhY2tlbmQgLT4gZnJvbnRlbmQpICovCisJeworCQlpbnQJaXJxID0gMDsK KworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoaW5mby0+d3EpKTsKKwkKKwkJaXJxID0gYmluZF9s aXN0ZW5pbmdfcG9ydF90b19pcnFoYW5kbGVyKGRldi0+b3RoZXJlbmRfaWQsCisJCQlmY2Zyb250 X2ludHIsIFNBX1NBTVBMRV9SQU5ET00sICJmY2Zyb250IiwgaW5mbyk7CisJCWlmIChpcnEgPD0g MCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIjw8PCVzOiBiaW5kX2xpc3Rlbmlu Z19wb3J0X3RvX2lycWhhbmRsZXIoKSBlcnJvcj4+PlxuIiwKKwkJCSAgICAgICBfX0ZVTkNUSU9O X18pOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWluZm8tPmlycSA9 IGlycTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorX191bnNl dHVwX2V2ZW50X2NoYW5uZWwoc3RydWN0IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5m by0+aXJxKSB7CisJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIoaW5mby0+aXJxLCBpbmZvKTsKKwkJ aW5mby0+aXJxID0gMDsKKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlc2lkZXMgb24g b3Bwb3NpdGUgc2lkZSBvZiBfX3NldHVwX3hlbnN0b3JlKCkKKyAqIAkJaW4gc2NzaWJhY2svZmNi YWNrLmMKKyAqLworc3RhdGljIGludAorX19zZXR1cF94ZW5zdG9yZShzdHJ1Y3QgZmNmcm9udF9p bmZvICppbmZvKQoreworCXN0cnVjdCB4ZW5idXNfZGV2aWNlCQkqZGV2ID0gaW5mby0+c2NzaWlu Zm8tPmRldjsKKwlzdHJ1Y3QgeGVuYnVzX3RyYW5zYWN0aW9uCXhidDsKKwlpbnQJCQkJcmV0ID0g MDsKKworYWdhaW46CisJaWYgKChyZXQgPSB4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCkp ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICI8PDwlczogeGVuYnVzX3RyYW5zYWN0aW9uX3N0 YXJ0KCkgZXJyb3I+Pj5cbiIsCisJCQkgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDA7CisJ fQorCisJaWYgKChyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwKKwkJCQkg ImZjX3JuZ3JlZiIsICIlbHUiLCBpbmZvLT5ybmdyZWYpKSAhPSAwKSB7CisJCXByaW50ayhLRVJO X0VSUiAiPDw8JXM6IHhlbmJ1c19wcmludGYoKSBlcnJvcj4+PlxuIiwKKwkJICAgICAgIF9fRlVO Q1RJT05fXyk7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlpZiAoKHJldCA9IHhlbmJ1c19wcmludGYo eGJ0LCBkZXYtPm5vZGVuYW1lLAorCQkJCSAiZmNfZXZ0Y2huIiwgIiV1IiwKKwkJCQkgaXJxX3Rv X2V2dGNobl9wb3J0KGluZm8tPmlycSkpKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiPDw8 JXM6IHhlbmJ1c19wcmludGYoKSBlcnJvcj4+PlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7 CisJCWdvdG8gb3V0MTsKKwl9CisKKwlpZiAoKHJldCA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYt Pm5vZGVuYW1lLAorCQkJCSAiZmNfZ250cmVmIiwgIiVkIiwgaW5mby0+Z250cmVmKSkgIT0gMCkg eworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiB4ZW5idXNfcHJpbnRmKCkgZXJyb3I+Pj5cbiIs CisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDE7CisJfQorCQorCWlmICgocmV0 ID0geGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApKSAhPSAwKSB7CisJCWlmIChyZXQgPT0g LUVBR0FJTikgeworCQkJZ290byBhZ2FpbjsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0VS UgorCQkJICAgICAgICI8PDwlczogeGVuYnVzX3RyYW5zYWN0aW9uX2VuZCgpIGVycm9yPj4+XG4i LAorCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlnb3RvIG91dDA7CisJCX0KKwl9CisKKwly ZXR1cm4gMDsKKworb3V0MToKKwkodm9pZCl4ZW5idXNfdHJhbnNhY3Rpb25fZW5kKHhidCwgMCk7 CisJCitvdXQwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitfX3Vuc2V0dXBfeGVu c3RvcmUoc3RydWN0IGZjZnJvbnRfaW5mbyAqaW5mbykKK3sKKwkvKiBjdXJyZW50bHksIG5vdGhp bmcgdG8gZG8gKi8KK30KKworaW50CitmY2Zyb250X2Nvbm5lY3Rpb25fc2V0dXAoc3RydWN0IHNj c2lmcm9udF9pbmZvICpzY3NpaW5mbykKK3sKKwlzdHJ1Y3QgZmNmcm9udF9pbmZvCSppbmZvOwor CWludAkJCXJldDsKKwkKKwl7CisJCXNjc2lpbmZvLT5mY2luZm8gPSBrbWFsbG9jKHNpemVvZihz dHJ1Y3QgZmNmcm9udF9pbmZvKSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmIChzY3NpaW5m by0+ZmNpbmZvID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDA7CisJ CX0KKwkJbWVtc2V0KHNjc2lpbmZvLT5mY2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgZmNmcm9udF9p bmZvKSk7CisJCWluZm8gPSAoc3RydWN0IGZjZnJvbnRfaW5mbyAqKShzY3NpaW5mby0+ZmNpbmZv KTsKKwkJaW5mby0+c2NzaWluZm8gPSBzY3NpaW5mbzsKKwl9CisKKwkvKiBwcmVwYXJlIGZvciBn cmFudCB0YWJsZSAqLworCWlmICgocmV0ID0gX19zZXR1cF9ncmFudF90YWJsZShpbmZvKSkgIT0g MCkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiBfX3NldHVwX2dyYW50X3RhYmxlKCkgZXJy b3I+Pj5cbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDE7CisJfQorCQor CS8qIHByZXBhcmUgZm9yIHNoYXJlZCByaW5nICovCisJaWYgKChyZXQgPSBfX3NldHVwX3NoYXJl ZF9yaW5nKGluZm8pKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiPDw8JXM6IF9fc2V0dXBf c2hhcmVkX3JpbmcoKSBlcnJvcj4+PlxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdv dG8gb3V0MTsKKwl9CisKKwkvKiBwcmVwYXJlIGZvciBldmVudCBjaGFubmVsICovCisJaWYgKChy ZXQgPSBfX3NldHVwX2V2ZW50X2NoYW5uZWwoaW5mbykpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5f RVJSICI8PDwlczogX19zZXR1cF9ldmVudF9jaGFubmVsKCkgZXJyb3I+Pj5cbiIsCisJCSAgICAg ICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIG91dDI7CisJfQorCisJLyogZXhjaGFuZ2UgdmFyaW91 cyBwYXJhbWV0ZXJzIHRocm91Z2ggeGVuc3RvcmUgKi8KKwlpZiAoKHJldCA9IF9fc2V0dXBfeGVu c3RvcmUoaW5mbykpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICI8PDwlczogX19zZXR1cF94 ZW5zdG9yZSgpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBv dXQzOworCX0KKworCW11dGV4X2luaXQoJmxvY2spOworCQorCXJldHVybiAwOworCitvdXQzOgor CV9fdW5zZXR1cF9ldmVudF9jaGFubmVsKGluZm8pOworCQorb3V0MjoKKwlfX3Vuc2V0dXBfc2hh cmVkX3JpbmcoaW5mbyk7CisJCitvdXQxOgorCWtmcmVlKHNjc2lpbmZvLT5mY2luZm8pOworCQor b3V0MDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkCitmY2Zyb250X2Nvbm5lY3Rpb25fdW5zZXR1 cChzdHJ1Y3Qgc2NzaWZyb250X2luZm8gKnNjc2lpbmZvKQoreworCXN0cnVjdCBmY2Zyb250X2lu Zm8JKmluZm8gPSAoc3RydWN0IGZjZnJvbnRfaW5mbyAqKQorCQkJCQkJKHNjc2lpbmZvLT5mY2lu Zm8pOworCisJX191bnNldHVwX3hlbnN0b3JlKGluZm8pOworCV9fdW5zZXR1cF9ldmVudF9jaGFu bmVsKGluZm8pOworCV9fdW5zZXR1cF9zaGFyZWRfcmluZyhpbmZvKTsKKworCWtmcmVlKHNjc2lp bmZvLT5mY2luZm8pOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaW50CitmY2Zyb250 X2dldF9pbml0aWFsX2F0dHJpYnV0ZShzdHJ1Y3Qgc2NzaWZyb250X2luZm8gKnNjc2lpbmZvKQor eworCXN0cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoc3RydWN0IGZjZnJvbnRfaW5mbyAqKQor CQkJCQkJKHNjc2lpbmZvLT5mY2luZm8pOworCXN0cnVjdCBmY2lmX2Zyb250X3JpbmcJKnJpbmcg PSAmKGluZm8tPnJpbmcpOworCXN0cnVjdCBmY2lmX3JlcXVlc3QJKnJpbmdfcmVxOworCXN0cnVj dCBmY2lmX3Jlc3BvbnNlCSpyaW5nX3JlczsKKwlpbnQJCQlyZXQgPSAwOworCisJLyogZ2V0IFND U0kgaG9zdCBhdHRyaWJ1dGVzICovCisJeworCQlzdHJ1Y3QgZmNfaG9zdF9hdHRycwkqaG9zdF9h dHRycyA9IChzdHJ1Y3QgZmNfaG9zdF9hdHRycyAqKQorCQkJCQkJKHNjc2lpbmZvLT5ob3N0LT5z aG9zdF9kYXRhKTsKKwkJc3RydWN0IGdpaGEJCSpnaWhhID0gKHN0cnVjdCBnaWhhICopKGluZm8t PmFkZHIpOworCQkgIAorCQltdXRleF9sb2NrKCZsb2NrKTsKKworCQlyaW5nX3JlcSA9IFJJTkdf R0VUX1JFUVVFU1QoJihpbmZvLT5yaW5nKSwgcmluZy0+cmVxX3Byb2RfcHZ0KTsKKwkJcmluZ19y ZXEtPnJxaWQgPSBycWlkX3NlZWQrKzsKKwkJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9JTklU SUFMX1NIT1NUX0FUVFJJQjsKKwkKKwkJcmluZ19yZXMgPSBfX2RvX3JlcXVlc3RfYW5kX3dhaXRf cmVzcG9uc2UoaW5mbyk7CisKKwkJaWYgKHJpbmdfcmVzLT5yc2x0ID09IDApIHsKKwkJCW1lbWNw eShob3N0X2F0dHJzLT5hY3RpdmVfZmM0cywgZ2loYS0+YWN0aXZlX2ZjNHMsCisJCQkJICAgc2l6 ZW9mKGhvc3RfYXR0cnMtPmFjdGl2ZV9mYzRzKSk7CisJCQlob3N0X2F0dHJzLT5mYWJyaWNfbmFt ZSAgICAgICAgID0gZ2loYS0+ZmFicmljX25hbWU7CisJCQlob3N0X2F0dHJzLT5tYXhmcmFtZV9z aXplICAgICAgID0gZ2loYS0+bWF4ZnJhbWVfc2l6ZTsKKwkJCWhvc3RfYXR0cnMtPm5vZGVfbmFt ZSAgICAgICAgICAgPSBnaWhhLT5ub2RlX25hbWU7CisJCQlob3N0X2F0dHJzLT5wZXJtYW5lbnRf cG9ydF9uYW1lID0gZ2loYS0+cGVybWFuZW50X3BvcnRfbmFtZTsKKwkJCWhvc3RfYXR0cnMtPnBv cnRfaWQgICAgICAgICAgICAgPSBnaWhhLT5wb3J0X2lkOworCQkJaG9zdF9hdHRycy0+cG9ydF9u YW1lICAgICAgICAgICA9IGdpaGEtPnBvcnRfbmFtZTsKKwkJCWhvc3RfYXR0cnMtPnBvcnRfc3Rh dGUgICAgICAgICAgPSBnaWhhLT5wb3J0X3N0YXRlOworCQkJaG9zdF9hdHRycy0+cG9ydF90eXBl ICAgICAgICAgICA9IGdpaGEtPnBvcnRfdHlwZTsKKwkJCW1lbWNweShob3N0X2F0dHJzLT5zZXJp YWxfbnVtYmVyLCBnaWhhLT5zZXJpYWxfbnVtYmVyLAorCQkJCSAgIHNpemVvZihob3N0X2F0dHJz LT5zZXJpYWxfbnVtYmVyKSk7CisJCQlob3N0X2F0dHJzLT5zcGVlZCAgICAgICAgICAgICAgID0g Z2loYS0+c3BlZWQ7CisJCQkvKiAiaW5mby0+aHMiIGlzIGFwcHJvcHJpYXRlIHBvc2l0aW9uID8g Ki8KKwkJCW1lbWNweSgmKGluZm8tPmhzKSwgJihnaWhhLT5zdGF0cyksIHNpemVvZihpbmZvLT5o cykpOworCQkJaG9zdF9hdHRycy0+c3VwcG9ydGVkX2NsYXNzZXMgICA9IGdpaGEtPnN1cHBvcnRl ZF9jbGFzc2VzOworCQkJbWVtY3B5KGhvc3RfYXR0cnMtPnN1cHBvcnRlZF9mYzRzLAorCQkJICAg ICAgIGdpaGEtPnN1cHBvcnRlZF9mYzRzLAorCQkJICAgICAgIHNpemVvZihob3N0X2F0dHJzLT5z dXBwb3J0ZWRfZmM0cykpOworCQkJaG9zdF9hdHRycy0+c3VwcG9ydGVkX3NwZWVkcyAgICA9IGdp aGEtPnN1cHBvcnRlZF9zcGVlZHM7CisJCQltZW1jcHkoaG9zdF9hdHRycy0+c3ltYm9saWNfbmFt ZSwgZ2loYS0+c3ltYm9saWNfbmFtZSwKKwkJCSAgICAgICBzaXplb2YoaG9zdF9hdHRycy0+c3lt Ym9saWNfbmFtZSkpOworCQkJaG9zdF9hdHRycy0+dGd0aWRfYmluZF90eXBlICAgICA9IGdpaGEt PnRndGlkX2JpbmRfdHlwZTsKKwkJfQorCisJCW11dGV4X3VubG9jaygmbG9jayk7CisJfQorCQor CS8qIGdldCBTQ1NJIHRhcmdldCBhdHRyaWJ1dGVzICovCisJeworCQlzdHJ1Y3Qgc2NzaV90YXJn ZXQJKnN0YXJnZXQ7CisJCXN0cnVjdCBmY19zdGFyZ2V0X2F0dHJzCSpzdGFyZ2V0X2F0dHJzOwor CQlzdHJ1Y3QgZ2l0YQkJKmdpdGEgPSAoc3RydWN0IGdpdGEgKikoaW5mby0+YWRkcik7CisJCXVu c2lnbmVkIGludAkJaTsKKworCQltdXRleF9sb2NrKCZsb2NrKTsKKworCQlyaW5nX3JlcSA9IFJJ TkdfR0VUX1JFUVVFU1QoJihpbmZvLT5yaW5nKSwgcmluZy0+cmVxX3Byb2RfcHZ0KTsKKwkJcmlu Z19yZXEtPnJxaWQgPSBycWlkX3NlZWQrKzsKKwkJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9J TklUSUFMX1NUQVJHRVRfQVRUUklCOworCQorCQlyaW5nX3JlcyA9IF9fZG9fcmVxdWVzdF9hbmRf d2FpdF9yZXNwb25zZShpbmZvKTsKKworCQlpZiAocmluZ19yZXMtPnJzbHQgPT0gMCkgeworCQkJ Zm9yIChpID0gMDsgaSA8IGdpdGEtPm51bTsgaSsrKSB7CisJCQkJbGlzdF9mb3JfZWFjaF9lbnRy eShzdGFyZ2V0LAorCQkJCQkJJihzY3NpaW5mby0+aG9zdC0+X190YXJnZXRzKSwKKwkJCQkJCXNp YmxpbmdzKSB7CisJCQkJCXN0YXJnZXRfYXR0cnMgPQorCQkJCQkJKHN0cnVjdCBmY19zdGFyZ2V0 X2F0dHJzICopCisJCQkJCQkoJihzdGFyZ2V0LT5zdGFyZ2V0X2RhdGEpKTsKKwkJCQkJaWYgKChz dGFyZ2V0LT5jaGFubmVsID09CisJCQkJCSAgICAgZ2l0YS0+ZVtpXS5jaGFubmVsKSAmJgorCQkJ CQkgICAgKHN0YXJnZXQtPmlkID09IGdpdGEtPmVbaV0uaWQpKSB7CisJCQkJCQlzdGFyZ2V0X2F0 dHJzLT5ub2RlX25hbWUgPQorCQkJCQkJCWdpdGEtPmVbaV0ubm9kZV9uYW1lOworCQkJCQkJc3Rh cmdldF9hdHRycy0+cG9ydF9pZCAgID0KKwkJCQkJCQlnaXRhLT5lW2ldLnBvcnRfaWQ7CisJCQkJ CQlzdGFyZ2V0X2F0dHJzLT5wb3J0X25hbWUgPQorCQkJCQkJCWdpdGEtPmVbaV0ucG9ydF9uYW1l OworCQkJCQkJYnJlYWs7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlwcmludGsoS0VSTl9FUlIgIjw8 PCVzOiBTQ1NJIHRhcmdldCBub3QgYWRkZWQ+Pj5cbiIsCisJCQkJCQkgICAgICAgX19GVU5DVElP Tl9fKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCisJCW11dGV4X3VubG9jaygmbG9jayk7 CisJfQorCisJLyogZ2V0IHJlbW90ZSBwb3J0IGF0dGlidXRlcyAqLworCXsKKwkJaW50CQkJCWNo YW5uZWw7CisJCXN0cnVjdCBmY19ycG9ydF9pZGVudGlmaWVycwlpZHM7CisJCXN0cnVjdCBmY19y cG9ydAkJCSpycG9ydDsKKwkJc3RydWN0IGdpcGEJCQkqZ2lwYSA9IChzdHJ1Y3QgZ2lwYSAqKQor CQkJCQkJCQkoaW5mby0+YWRkcik7CisJCXVuc2lnbmVkIGludAkJCWk7CisKKwkJbXV0ZXhfbG9j aygmbG9jayk7CisKKwkJcmluZ19yZXEgPSBSSU5HX0dFVF9SRVFVRVNUKCYoaW5mby0+cmluZyks IHJpbmctPnJlcV9wcm9kX3B2dCk7CisJCXJpbmdfcmVxLT5ycWlkID0gcnFpZF9zZWVkKys7CisJ CXJpbmdfcmVxLT5jbW5kID0gQ01ORF9HRVRfSU5JVElBTF9SUE9SVF9BVFRSSUI7CisJCisJCXJp bmdfcmVzID0gX19kb19yZXF1ZXN0X2FuZF93YWl0X3Jlc3BvbnNlKGluZm8pOworCisJCWlmIChy aW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgZ2lwYS0+bnVtOyBpKysp IHsKKwkJCQljaGFubmVsICAgICAgID0gZ2lwYS0+ZVtpXS5jaGFubmVsOworCQkJCWlkcy5ub2Rl X25hbWUgPSBnaXBhLT5lW2ldLm5vZGVfbmFtZTsKKwkJCQlpZHMucG9ydF9pZCAgID0gZ2lwYS0+ ZVtpXS5wb3J0X2lkOworCQkJCWlkcy5wb3J0X25hbWUgPSBnaXBhLT5lW2ldLnBvcnRfbmFtZTsK KwkJCQlpZHMucm9sZXMgICAgID0gZ2lwYS0+ZVtpXS5yb2xlczsKKworCQkJCXJwb3J0ID0gZmNf cmVtb3RlX3BvcnRfYWRkKHNjc2lpbmZvLT5ob3N0LAorCQkJCQkJCSAgIGNoYW5uZWwsICZpZHMp OworCQkJCWlmIChycG9ydCA9PSBOVUxMKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWJy ZWFrOworCQkJCX0KKworCQkJCXJwb3J0LT5kZXZfbG9zc190bW8gPQorCQkJCQlnaXBhLT5lW2ld LmRldl9sb3NzX3RtbzsKKwkJCQlycG9ydC0+bWF4ZnJhbWVfc2l6ZSA9CisJCQkJCWdpcGEtPmVb aV0ubWF4ZnJhbWVfc2l6ZTsKKwkJCQlycG9ydC0+cG9ydF9zdGF0ZSA9CisJCQkJCWdpcGEtPmVb aV0ucG9ydF9zdGF0ZTsKKwkJCQlycG9ydC0+c2NzaV90YXJnZXRfaWQgPQorCQkJCQlnaXBhLT5l W2ldLnNjc2lfdGFyZ2V0X2lkOworCQkJCXJwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlcyA9CisJCQkJ CWdpcGEtPmVbaV0uc3VwcG9ydGVkX2NsYXNzZXM7CisJCQl9CisJCX0KKworCQltdXRleF91bmxv Y2soJmxvY2spOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgQ09SUkVDVF9GVChz LCBmLCB2LCBkKQlcCisJaWYgKCgocyktPmYpID09ICh2KSkgewlcCisJCShkKS0+ZiA9ICh2KTsJ XAorCX0KKworaW50CitmY2Zyb250X2dldF9mdW5jdGlvbl90ZW1wbGF0ZShzdHJ1Y3Qgc2NzaWZy b250X2luZm8gKnNjc2lpbmZvKQoreworCXN0cnVjdCBmY2Zyb250X2luZm8JKmluZm8gPSAoc3Ry dWN0IGZjZnJvbnRfaW5mbyAqKQorCQkJCQkJCQkJCQkoc2NzaWluZm8tPmZjaW5mbyk7CisJc3Ry dWN0IGZjaWZfZnJvbnRfcmluZwkqcmluZyA9ICYoaW5mby0+cmluZyk7CisJc3RydWN0IGZjaWZf cmVxdWVzdAkqcmluZ19yZXE7CisJc3RydWN0IGZjaWZfcmVzcG9uc2UJKnJpbmdfcmVzOworCXN0 cnVjdCBnZnRwCQkqZ2Z0cCA9IChzdHJ1Y3QgZ2Z0cCAqKShpbmZvLT5hZGRyKTsKKworCXN0cnVj dCBmY19mdW5jdGlvbl90ZW1wbGF0ZQkqb3JpZ2Z0ID0gZmNfc2hvc3QyZnQoc2NzaWluZm8tPmhv c3QpOworCXN0cnVjdCBmY19mdW5jdGlvbl90ZW1wbGF0ZQkqcHZmY2Z0ID0gJnB2ZmNfdHJhbnNw b3J0X2Z1bmN0aW9uczsKKwkKKwltZW1jcHkocHZmY2Z0LCBvcmlnZnQsIHNpemVvZigqcHZmY2Z0 KSk7CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKworCXJpbmdfcmVxICAgICAgID0gUklOR19HRVRf UkVRVUVTVCgmKGluZm8tPnJpbmcpLCByaW5nLT5yZXFfcHJvZF9wdnQpOworCXJpbmdfcmVxLT5y cWlkID0gcnFpZF9zZWVkKys7CisJcmluZ19yZXEtPmNtbmQgPSBDTU5EX0dFVF9GVU5DVElPTl9U RU1QTEFURTsKKwkKKwlyaW5nX3JlcyA9IF9fZG9fcmVxdWVzdF9hbmRfd2FpdF9yZXNwb25zZShp bmZvKTsKKworCWlmIChyaW5nX3Jlcy0+cnNsdCA9PSAwKSB7CisJCXN0cnVjdCBmY19mdW5jdGlv bl90ZW1wbGF0ZQkqZnQgPSAmKGdmdHAtPmZ0KTsKKworCQlDT1JSRUNUX0ZUKGZ0LCBnZXRfcnBv cnRfZGV2X2xvc3NfdG1vLCAgICAgICAgTlVMTCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwg c2V0X3Jwb3J0X2Rldl9sb3NzX3RtbywgICAgICAgIE5VTEwsIHB2ZmNmdCk7CisJCUNPUlJFQ1Rf RlQoZnQsIGdldF9zdGFyZ2V0X25vZGVfbmFtZSwgICAgICAgICBOVUxMLCBwdmZjZnQpOworCQlD T1JSRUNUX0ZUKGZ0LCBnZXRfc3RhcmdldF9wb3J0X25hbWUsICAgICAgICAgTlVMTCwgcHZmY2Z0 KTsKKwkJQ09SUkVDVF9GVChmdCwgZ2V0X3N0YXJnZXRfcG9ydF9pZCwgICAgICAgICAgIE5VTEws IHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIGdldF9ob3N0X3BvcnRfaWQsICAgICAgICAgICAg ICBOVUxMLCBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBnZXRfaG9zdF9wb3J0X3R5cGUsICAg ICAgICAgICAgTlVMTCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgZ2V0X2hvc3RfcG9ydF9z dGF0ZSwgICAgICAgICAgIE5VTEwsIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIGdldF9ob3N0 X2FjdGl2ZV9mYzRzLCAgICAgICAgICBOVUxMLCBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBn ZXRfaG9zdF9zcGVlZCwgICAgICAgICAgICAgICAgTlVMTCwgcHZmY2Z0KTsKKwkJQ09SUkVDVF9G VChmdCwgZ2V0X2hvc3RfZmFicmljX25hbWUsICAgICAgICAgIE5VTEwsIHB2ZmNmdCk7CisJCUNP UlJFQ1RfRlQoZnQsIGdldF9mY19ob3N0X3N0YXRzLCAgICAgICAgICAgICBOVUxMLCBwdmZjZnQp OworCQlDT1JSRUNUX0ZUKGZ0LCByZXNldF9mY19ob3N0X3N0YXRzLCAgICAgICAgICAgTlVMTCwg cHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgaXNzdWVfZmNfaG9zdF9saXAsICAgICAgICAgICAg IE5VTEwsIHB2ZmNmdCk7CisKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ycG9ydF9tYXhmcmFtZV9z aXplLCAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfcnBvcnRfc3Vw cG9ydGVkX2NsYXNzZXMsICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X3Jw b3J0X2Rldl9sb3NzX3RtbywgICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwg c2hvd19zdGFyZ2V0X25vZGVfbmFtZSwgICAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1Rf RlQoZnQsIHNob3dfc3RhcmdldF9wb3J0X25hbWUsICAgICAgICAwLCAgICBwdmZjZnQpOworCQlD T1JSRUNUX0ZUKGZ0LCBzaG93X3N0YXJnZXRfcG9ydF9pZCwgICAgICAgICAgMCwgICAgcHZmY2Z0 KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X25vZGVfbmFtZSwgICAgICAgICAgIDAsICAg IHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9wb3J0X25hbWUsICAgICAgICAg ICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3RfcGVybWFuZW50X3Bv cnRfbmFtZSwgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X3N1cHBv cnRlZF9jbGFzc2VzLCAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9z dF9zdXBwb3J0ZWRfZmM0cywgICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBz aG93X2hvc3Rfc3ltYm9saWNfbmFtZSwgICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9G VChmdCwgc2hvd19ob3N0X3N1cHBvcnRlZF9zcGVlZHMsICAgIDAsICAgIHB2ZmNmdCk7CisJCUNP UlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9tYXhmcmFtZV9zaXplLCAgICAgICAwLCAgICBwdmZjZnQp OworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3Rfc2VyaWFsX251bWJlciwgICAgICAgMCwgICAg cHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0X3BvcnRfaWQsICAgICAgICAgICAg IDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNob3dfaG9zdF9wb3J0X3R5cGUsICAg ICAgICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZUKGZ0LCBzaG93X2hvc3RfcG9ydF9z dGF0ZSwgICAgICAgICAgMCwgICAgcHZmY2Z0KTsKKwkJQ09SUkVDVF9GVChmdCwgc2hvd19ob3N0 X2FjdGl2ZV9mYzRzLCAgICAgICAgIDAsICAgIHB2ZmNmdCk7CisJCUNPUlJFQ1RfRlQoZnQsIHNo b3dfaG9zdF9zcGVlZCwgICAgICAgICAgICAgICAwLCAgICBwdmZjZnQpOworCQlDT1JSRUNUX0ZU KGZ0LCBzaG93X2hvc3RfZmFicmljX25hbWUsICAgICAgICAgMCwgICAgcHZmY2Z0KTsKKwl9CisK KwkvKiByZXBsYWNlIHJlZ2lzdGVyZWQgImZ0IiBieSBuZXcgInB2ZmNmdCIuIElzIHRoaXMgYWxs b3dlZCA/ICovCisJZmNfdXBkYXRlX2Z0KHNjc2lpbmZvLT5ob3N0LCBwdmZjZnQpOworCQorCW11 dGV4X3VubG9jaygmbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9O KCJYZW4gUGFyYS1WaXJ0dWFsIFNDU0kgRmlicmUgQ2hhbm5lbCBGcm9udGVuZCBEcml2ZXIiKTsK K01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtciAwZjE2OWIzNmJlODEgLXIgOTlkNDdlM2Y1 NDMwIGRyaXZlcnMveGVuL3Njc2lmcm9udC9zY3NpZnJvbnQuYwotLS0gYS9kcml2ZXJzL3hlbi9z Y3NpZnJvbnQvc2NzaWZyb250LmMJRnJpIEp1biAyOSAxODowOToxOSAyMDA3ICswOTAwCisrKyBi L2RyaXZlcnMveGVuL3Njc2lmcm9udC9zY3NpZnJvbnQuYwlGcmkgSnVuIDI5IDE5OjQ4OjU4IDIw MDcgKzA5MDAKQEAgLTUxLDYgKzUxLDEwIEBACiAjaW5jbHVkZSA8eGVuL3BsYXRmb3JtLWNvbXBh dC5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMKKyNpbmNsdWRlIDxzY3Np L3Njc2lfdHJhbnNwb3J0X2ZjLmg+CisjZW5kaWYKKwogI2RlZmluZSBHUkFOVF9JTlZBTElEX1JF RiAwCiAKIApAQCAtNTgsNiArNjIsMTEgQEAKIAlwcl9kZWJ1ZygiKGZpbGU9JXMsIGxpbmU9JWQp ICIgX2YsCVwKIAkJIF9fRklMRV9fICwgX19MSU5FX18gLCAjIyBfYSApCiAKKyNpZmRlZiBDT05G SUdfWEVOX1NDU0lfRkMKK2V4dGVybiBpbnQJZmNmcm9udF9jb25uZWN0aW9uX3NldHVwKHN0cnVj dCBzY3NpZnJvbnRfaW5mbyAqKTsKK2V4dGVybiBpbnQJZmNmcm9udF9nZXRfaW5pdGlhbF9hdHRy aWJ1dGUoc3RydWN0IHNjc2lmcm9udF9pbmZvICopOworZXh0ZXJuIGludAlmY2Zyb250X2dldF9m dW5jdGlvbl90ZW1wbGF0ZShzdHJ1Y3Qgc2NzaWZyb250X2luZm8gKik7CisjZW5kaWYKIAogc3Ry dWN0IHNjc2lfc2hhZG93IHsKIAlzdHJ1Y3Qgc2NzaWlmX3JlcXVlc3QgcmluZ19yZXE7CkBAIC03 NSw4ICs4NCwxNSBAQCBzdHJ1Y3Qgc2NzaWZyb250X2luZm8gewogCXN0cnVjdCBzY3NpaWZfZnJv bnRfcmluZyByaW5nOwogCXN0cnVjdCBzY3NpX3NoYWRvdyBzaGFkb3dbU0NTSV9SSU5HX1NJWkVd OwogCXVuc2lnbmVkIGxvbmcgc2hhZG93X2ZyZWU7CisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJX0ZD CisJdm9pZAkqZmNpbmZvOworI2VuZGlmCiB9OwogCisjaWZkZWYgQ09ORklHX1hFTl9TQ1NJX0ZD CitleHRlcm4gc3RydWN0IGZjX2Z1bmN0aW9uX3RlbXBsYXRlCWZjX3RyYW5zcG9ydF9mdW5jdGlv bnM7CitzdGF0aWMgc3RydWN0IHNjc2lfdHJhbnNwb3J0X3RlbXBsYXRlCSpmY190cmFuc3BvcnRf dGVtcGxhdGUgPSBOVUxMOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IEdFVF9JRF9GUk9N X0ZSRUVMSVNUKAogCXN0cnVjdCBzY3NpZnJvbnRfaW5mbyAqaW5mbykKQEAgLTQxNyw2ICs0MzMs MTEgQEAgc3RhdGljIGludCBzY3NpZnJvbnRfY29ubmVjdChzdHJ1Y3Qgc2NzaQogCiAJc2NzaV9z Y2FuX2hvc3QoaG9zdCk7CiAKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMKKwkodm9pZClmY2Zy b250X2dldF9pbml0aWFsX2F0dHJpYnV0ZShpbmZvKTsKKwkodm9pZClmY2Zyb250X2dldF9mdW5j dGlvbl90ZW1wbGF0ZShpbmZvKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0MSw2 ICs0NjIsMjAgQEAgc3RhdGljIGludCBzY3NpZnJvbnRfcHJvYmUoc3RydWN0IHhlbmJ1cwogCQlp bmZvLT5zaGFkb3dbaV0ucmluZ19yZXEucnFpZCA9IGkgKyAxOwogCWluZm8tPnNoYWRvd1tTQ1NJ X1JJTkdfU0laRSAtIDFdLnJpbmdfcmVxLnJxaWQgPSAweDBmZmZmZmZmOwogCisjaWZkZWYgQ09O RklHX1hFTl9TQ1NJX0ZDCisJaG9zdC0+dHJhbnNwb3J0dCA9IGZjX3RyYW5zcG9ydF90ZW1wbGF0 ZTsKKwl7CisJCWludAlyZXQ7CisKKwkJaWYgKChyZXQgPSBmY2Zyb250X2Nvbm5lY3Rpb25fc2V0 dXAoaW5mbykpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICI8PDwlczog ZmNmcm9udF9jb25uZWN0aW9uX3NldHVwKCkgZXJyb3I+Pj5cbiIsCisJCQkgICAgICAgX19GVU5D VElPTl9fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisjZW5kaWYKKwogCWVyciA9IHNjc2lm cm9udF9pbml0X3JpbmcoaW5mbyk7CiAJaWYgKGVycikgewogCQlzY3NpX2hvc3RfcHV0KGhvc3Qp OwpAQCAtNDU1LDYgKzQ5MCwxMCBAQCBzdGF0aWMgaW50IHNjc2lmcm9udF9yZW1vdmUoc3RydWN0 IHhlbmJ1CiB7CiAJc3RydWN0IHNjc2lmcm9udF9pbmZvICppbmZvID0gZGV2LT5kZXYuZHJpdmVy X2RhdGE7CiAKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMKKwlmY2Zyb250X2Nvbm5lY3Rpb25f dW5zZXR1cChpbmZvKTsKKyNlbmRpZgorCQogCXNjc2lmcm9udF9mcmVlKGluZm8pOwogCQogCXJl dHVybiAwOwpAQCAtNTA3LDYgKzU0NiwyMCBAQCBzdGF0aWMgaW50IF9faW5pdCBzY3NpZnJvbnRf aW5pdCh2b2lkKQogCWlmICghaXNfcnVubmluZ19vbl94ZW4oKSkKIAkJcmV0dXJuIC1FTk9ERVY7 CiAKKyNpZmRlZiBDT05GSUdfWEVOX1NDU0lfRkMKKwlpZiAoaXNfaW5pdGlhbF94ZW5kb21haW4o KSkgeworCQlwcmludGsoS0VSTl9FUlIgIjw8PCVzOiBOb3Qgb24gYSBEb21VPj4+XG4iLCBfX0ZV TkNUSU9OX18pOworCQlyZXR1cm4gMDsKKwl9CisKKwlmY190cmFuc3BvcnRfdGVtcGxhdGUgPSBm Y19hdHRhY2hfdHJhbnNwb3J0KCZmY190cmFuc3BvcnRfZnVuY3Rpb25zKTsKKwlpZiAoZmNfdHJh bnNwb3J0X3RlbXBsYXRlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICI8PDwlczogZmNf YXR0YWNoX3RyYW5zcG9ydCgpIGVycm9yPj4+XG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorI2VuZGlmCisKIAllcnIgPSB4ZW5idXNfcmVnaXN0ZXJf ZnJvbnRlbmQoJnNjc2lmcm9udF9kcml2ZXIpOwogCiAJcmV0dXJuIGVycjsKQEAgLTUxNSw2ICs1 NjgsMTAgQEAgc3RhdGljIHZvaWQgc2NzaWZyb250X2V4aXQodm9pZCkKIHN0YXRpYyB2b2lkIHNj c2lmcm9udF9leGl0KHZvaWQpCiB7CiAJeGVuYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpZnJv bnRfZHJpdmVyKTsKKworI2lmZGVmIENPTkZJR19YRU5fU0NTSV9GQworCWZjX3JlbGVhc2VfdHJh bnNwb3J0KGZjX3RyYW5zcG9ydF90ZW1wbGF0ZSk7CisjZW5kaWYKIH0KIAogbW9kdWxlX2luaXQo c2NzaWZyb250X2luaXQpOwo= --------_4684E7F96BA404902400_MULTIPART_MIXED_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------_4684E7F96BA404902400_MULTIPART_MIXED_--