ZGlmZiAtLWdpdCBhL2F1dG8vY2MvYmNjIGIvYXV0by9jYy9iY2MKaW5kZXggNTc2NWM0Ny4uYTc2YjY4ZiAxMDA2NDQKLS0tIGEvYXV0by9jYy9iY2MKKysrIGIvYXV0by9jYy9iY2MKQEAgLTMyLDE3ICszMiwzMSBAQAogIyBkaXNhYmxlIGxvZ28KIENGTEFHUz0iJENGTEFHUyAtcSIKIAorCiAjIHByZWNvbXBpbGVkIGhlYWRlcnMKIENPUkVfREVQUz0iJENPUkVfREVQUyAkT0JKUy9uZ3hfY29uZmlnLmNzbSIKIE5HWF9QQ0g9IiRPQkpTL25neF9jb25maWcuY3NtIgogTkdYX0JVSUxEX1BDSD0iLUg9JE9CSlMvbmd4X2NvbmZpZy5jc20iCiBOR1hfVVNFX1BDSD0iLUh1IC1IPSRPQkpTL25neF9jb25maWcuY3NtIgogCi1MSU5LPSJcJChDQykiCisKKyMgV2luMzIgR1VJIG1vZGUgYXBwbGljYXRpb24KK0xJTks9IlwkKENDKSAtbGFhIgorCisKKyMgdGhlIHJlc291cmNlIGZpbGUKK05HWF9SRVM9IiRPQkpTL25naW54LnJlcyIKK05HWF9SQ0M9ImJyY2MzMiAtZm8kT0JKUy9uZ2lueC5yZXMgXCQoQ09SRV9JTkNTKSAkTkdYX1dJTjMyX1JDIgorIyB0aGUgcHJhZ21hIGFsbG93cyB0byBsaW5rIHRoZSByZXNvdXJjZSBmaWxlIHVzaW5nIGJjYzMyIGFuZAorIyB0byBhdm9pZCB0aGUgZGlyZWN0IGlsaW5rMzIgY2FsbGluZyBhbmQgdGhlIGMwdzMyLm9iaidzIFdpbk1haW4vbWFpbiBwcm9ibGVtCitOR1hfUFJBR01BPSIjcHJhZ21hIHJlc291cmNlIFwiJE9CSlMvbmdpbngucmVzXCIiCisKIAogbmd4X2luY2x1ZGVfb3B0PSItSSIKIG5neF9vYmpvdXQ9Ii1vIgogbmd4X2Jpbm91dD0iLWUiCiBuZ3hfb2JqZXh0PSJvYmoiCiBuZ3hfYmluZXh0PSIuZXhlIgotbmd4X2RpcnNlcD0nXFwnCisKK25neF9yZWdleF9kaXJzZXA9J1xcJworbmd4X2RpcnNlcD0iXFwiCmRpZmYgLS1naXQgYS9hdXRvL2NjL2NvbmYgYi9hdXRvL2NjL2NvbmYKaW5kZXggNzdlZWRhNy4uYWNiNjhmOCAxMDA2NDQKLS0tIGEvYXV0by9jYy9jb25mCisrKyBiL2F1dG8vY2MvY29uZgpAQCAtNjQsOCArNjQsOCBAQAogIyAgICAgICAgICAgIC4gYXV0by9jYy9hY2MKICMgICAgICAgIDs7CiAKLSAgICAgICAgbXN2YykKLSAgICAgICAgICAgICMgTVNWQyA2LjAgU1AyCisgICAgICAgIG1zdmMqKQorICAgICAgICAgICAgIyBNU1ZDKysgNi4wIFNQMiwgTVNWQysrIFRvb2xraXQgMjAwMwogCiAgICAgICAgICAgICAuIGF1dG8vY2MvbXN2YwogICAgICAgICA7OwpAQCAtOTMsNiArOTMsMjIgQEAKIAogaWYgWyAiJFBMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCiAKKyAgICBpZiB0ZXN0IC1uICIkTkdYX0xEX09QVCI7IHRoZW4KKyAgICAgICAgbmd4X2ZlYXR1cmU9LS13aXRoLWxkLW9wdD1cIiROR1hfTERfT1BUXCIKKyAgICAgICAgbmd4X2ZlYXR1cmVfbmFtZT1EVU1NWQorICAgICAgICBuZ3hfZmVhdHVyZV9ydW49bm8KKyAgICAgICAgbmd4X2ZlYXR1cmVfaW5jcz0KKyAgICAgICAgbmd4X2ZlYXR1cmVfbGlicz0KKyAgICAgICAgbmd4X2ZlYXR1cmVfdGVzdD0KKyAgICAgICAgLiBhdXRvL2ZlYXR1cmUKKworICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSBubyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICQwOiBlcnJvcjogdGhlIGludmFsaWQgdmFsdWUgaW4gLS13aXRoLWxkLW9wdD1cIiROR1hfTERfT1BUXCIKKyAgICAgICAgICAgIGVjaG8KKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgIGZpCisKICAgICBuZ3hfZmVhdHVyZT0iZ2NjIHZhcmlhZGljIG1hY3JvcyIKICAgICBuZ3hfZmVhdHVyZV9uYW1lPUhBVkVfR0NDX1ZBUklBRElDX01BQ1JPUwogICAgIG5neF9mZWF0dXJlX3J1bj15ZXMKZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggNjFmMDQ4Yi4uNzU2ZTM5NyAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTEwNCw2ICsxMDQsMyBAQAogZmkKIAogTElOSz0iXCQoQ0MpIgotCi0KLUNDX1NUUk9ORz0iLVdhbGwgLVdlcnJvciIKZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggOTRkNWNkZC4uODljNmYzNSAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTY0LDYgKzY0LDMgQEAKIENGTEFHUz0iJENGTEFHUyAtZyIKIAogTElOSz0iXCQoQ0MpIgotCi0KLUNDX1NUUk9ORz0iLXcxIC1XZXJyb3IiCmRpZmYgLS1naXQgYS9hdXRvL2NjL21zdmMgYi9hdXRvL2NjL21zdmMKaW5kZXggZDQ3ZDRiMi4uODI3MmNhYyAxMDA2NDQKLS0tIGEvYXV0by9jYy9tc3ZjCisrKyBiL2F1dG8vY2MvbXN2YwpAQCAtMiw3ICsyLDcgQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKLSMgTVNWQyA2LjAgU1AyCisjIE1TVkMgNi4wIFNQMiwgTVNWQyBUb29sa2l0IDIwMDMgKDcuMSkKIAogIyBvcHRpbWl6YXRpb25zCiAKQEAgLTMxLDggKzMxLDggQEAKICAgICA7OwogCiAgICAgcGVudGl1bTQpCi0gICAgICAgICMgb3B0aW1pemUgZm9yIFBlbnRpdW0gNAotICAgICAgICAjQ1BVX09QVD0iLUc3IgorICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIDQsIE1TVkMgNworICAgICAgICBDUFVfT1BUPSItRzciCiAgICAgOzsKIGVzYWMKIApAQCAtNDcsMzAgKzQ3LDQ4IEBACiAjIHN0b3Agb24gd2FybmluZwogQ0ZMQUdTPSIkQ0ZMQUdTIC1XWCIKIAotIyBsaW5rIHdpdGggbGliY210LmxpYiwgbXVsdGl0aHJlYWRlZAotI0xJQkM9Ii1NVCIKLSMgbGluayB3aXRoIG1zdmNydC5kbGwKLUxJQkM9Ii1NRCIKLQotQ0ZMQUdTPSIkQ0ZMQUdTICRMSUJDIgotCiAjIGRpc2FibGUgbG9nbwogQ0ZMQUdTPSIkQ0ZMQUdTIC1ub2xvZ28iCiAKKwogTElOSz0iXCQoQ0MpIgogCi0jIGxpbmsgZmxhZ3MKKyMgdGhlIGxpbmsgZmxhZ3MKIENPUkVfTElOSz0iJENPUkVfTElOSyAtbGluayAtdmVyYm9zZTpsaWIiCiAKK2lmIFsgJE5HWF9DQ19OQU1FID0gbXN2YzcgXTsgdGhlbgorICAgICMgbGluayB3aXRoIGxpYmNtdC5saWIsIG11bHRpdGhyZWFkZWQKKyAgICBMSUJDPSItTVQiCitlbHNlCisgICAgIyBsaW5rIHdpdGggbXN2Y3J0LmRsbAorICAgIExJQkM9Ii1NRCIKK2ZpCisKK0NGTEFHUz0iJENGTEFHUyAkTElCQyIKKworIyBXaW4zMiBHVUkgbW9kZSBhcHBsaWNhdGlvbgorQ09SRV9MSUJTPSIkQ09SRV9MSUJTIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIgorQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC1zdWJzeXN0ZW06d2luZG93cyAtZW50cnk6bWFpbkNSVFN0YXJ0dXAiCisKICMgZGVidWcKIENGTEFHUz0iJENGTEFHUyAtWWQiCiBDT1JFX0xJTks9IiRDT1JFX0xJTksgLWRlYnVnIC1kZWJ1Z3R5cGU6Y29mZiIKIAorCiAjIHByZWNvbXBpbGVkIGhlYWRlcnMKLUNPUkVfREVQUz0iJENPUkVfREVQUyAkT0JKUy9uZ3hfY29uZmlnLnBjaCIKLU5HWF9QQ0g9IiRPQkpTL25neF9jb25maWcucGNoIgotTkdYX0JVSUxEX1BDSD0iLVljbmd4X2NvbmZpZy5oIC1GcCRPQkpTL25neF9jb25maWcucGNoIgotTkdYX1VTRV9QQ0g9Ii1ZdW5neF9jb25maWcuaCAtRnAkT0JKUy9uZ3hfY29uZmlnLnBjaCIKK2lmIFsgJE5HWF9DQ19OQU1FICE9IG1zdmM3IF07IHRoZW4KKyAgICBDT1JFX0RFUFM9IiRDT1JFX0RFUFMgJE9CSlMvbmd4X2NvbmZpZy5wY2giCisgICAgTkdYX1BDSD0iJE9CSlMvbmd4X2NvbmZpZy5wY2giCisgICAgTkdYX0JVSUxEX1BDSD0iLVljbmd4X2NvbmZpZy5oIC1GcCRPQkpTL25neF9jb25maWcucGNoIgorICAgIE5HWF9VU0VfUENIPSItWXVuZ3hfY29uZmlnLmggLUZwJE9CSlMvbmd4X2NvbmZpZy5wY2giCitmaQorCisKKyMgdGhlIHJlc291cmNlIGZpbGUKK05HWF9SRVM9IiRPQkpTL25naW54LnJlcyIKK05HWF9SQ0M9InJjIC1mbyROR1hfUkVTIFwkKENPUkVfSU5DUykgJE5HWF9XSU4zMl9SQyIKK0NPUkVfTElOSz0iJE5HWF9SRVMgJENPUkVfTElOSyIKKwogCiBuZ3hfb2Jqb3V0PSItRm8iCiBuZ3hfYmlub3V0PSItRmUiCmRpZmYgLS1naXQgYS9hdXRvL2NjL25hbWUgYi9hdXRvL2NjL25hbWUKaW5kZXggYjk3NDQ3OS4uY2JlZDZhNyAxMDA2NDQKLS0tIGEvYXV0by9jYy9uYW1lCisrKyBiL2F1dG8vY2MvbmFtZQpAQCAtNiw4ICs2LDE3IEBACiAKIAogaWYgWyAkQ0MgPSBjbCBdOyB0aGVuCi0gICAgTkdYX0NDX05BTUU9bXN2YwotICAgIGVjaG8gIiB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMgY29tcGlsZXIiCisgICAgaWYgYCROR1hfV0lORSAkQ0MgLXYgMj4mMSBcCisgICAgICAgIHwgZ3JlcCAnXk1pY3Jvc29mdCAoUikgMzItYml0IEMvQysrIE9wdGltaXppbmcgQ29tcGlsZXIgVmVyc2lvbiAxMycgXAorICAgICAgICAgIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KKworICAgICAgICBOR1hfQ0NfTkFNRT1tc3ZjNworICAgICAgICBlY2hvICIgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysgNyBjb21waWxlciIKKworICAgIGVsc2UKKyAgICAgICAgTkdYX0NDX05BTUU9bXN2YworICAgICAgICBlY2hvICIgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIiCisgICAgZmkKIAogZWxzZQogaWYgWyAkQ0MgPSB3Y2wzODYgXTsgdGhlbgpkaWZmIC0tZ2l0IGEvYXV0by9jYy9vd2MgYi9hdXRvL2NjL293YwppbmRleCAwYzgxOTRkLi43ODlmZmFkIDEwMDY0NAotLS0gYS9hdXRvL2NjL293YworKysgYi9hdXRvL2NjL293YwpAQCAtNTksMTggKzU5LDI1IEBACiBDRkxBR1M9IiRDRkxBR1MgLXpxIgogCiAjIE9wZW4gV2F0Y29tIEMgMS4yCi0jaGF2ZT1IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MgLiBhdXRvL2hhdmUKKyNoYXZlPU5HWF9IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MgLiBhdXRvL2hhdmUKIAotIyBwcmVjb21waWxlZCBoZWFkZXJzIAorCisjIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzIAogQ09SRV9ERVBTPSIkQ09SRV9ERVBTICRPQkpTL25neF9jb25maWcucGNoIgogTkdYX1BDSD0iJE9CSlMvbmd4X2NvbmZpZy5wY2giCiBOR1hfQlVJTERfUENIPSItZmhxPSRPQkpTL25neF9jb25maWcucGNoIgogTkdYX1VTRV9QQ0g9Ii1maD0kT0JKUy9uZ3hfY29uZmlnLnBjaCIKIAorCiBMSU5LPSJcJChDQykiCiAKLSMgbGluayBmbGFncwotQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC1sPW50IgorIyB0aGUgbGluayBmbGFncywgYnVpbHQgdGFyZ2V0IGlzIE5UIEdVSSBtb2RlIGFwcGxpY2F0aW9uCitDT1JFX0xJTks9IiRDT1JFX0xJTksgLWw9bnRfd2luIgorCisKKyMgdGhlIHJlc291cmNlIGZpbGUKK05HWF9SQ0M9IndyYyBcJChDT1JFX0lOQ1MpIC1mbz0kT0JKUy9uZ2lueC5yZXMgJE5HWF9XSU4zMl9SQyAkT0JKUy9uZ2lueC5leGUiCisKIAogbmd4X2luY2x1ZGVfb3B0PSItaT0iCiBuZ3hfb2Jqb3V0PSItZm8iCmRpZmYgLS1naXQgYS9hdXRvL2ZlYXR1cmUgYi9hdXRvL2ZlYXR1cmUKaW5kZXggNzg2NzZlZi4uNDEwZjUzOSAxMDA2NDQKLS0tIGEvYXV0by9mZWF0dXJlCisrKyBiL2F1dG8vZmVhdHVyZQpAQCAtMzUsNiArMzUsNyBAQAogCiBuZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAogICAgICAgICAgIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jICROR1hfTERfT1BUICRuZ3hfZmVhdHVyZV9saWJzIgorCiBldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKIAogCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9tZDUvY29uZiBiL2F1dG8vbGliL21kNS9jb25mCmluZGV4IDYyMzk4NmYuLjI3ZmQ2NDEgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL21kNS9jb25mCisrKyBiL2F1dG8vbGliL21kNS9jb25mCkBAIC0xNywxMiArMTcsMTIgQEAKIAogICAgIGNhc2UgIiROR1hfQ0NfTkFNRSIgaW4KIAotICAgICAgICBtc3ZjIHwgb3djIHwgYmNjKQorICAgICAgICBtc3ZjKiB8IG93YyogfCBiY2MpCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJE1ENS9tZDUubGliIgogICAgICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTICRNRDUvbWQ1LmxpYiIKICAgICAgICAgOzsKIAotICAgICAgICBpY2MpCisgICAgICAgIGljYyopCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJE1ENS9saWJtZDUuYSIKIAogICAgICAgICAgICAgIyB0byBhbGxvdyAtaXBvIG9wdGltaXphdGlvbiB3ZSBsaW5rIHdpdGggdGhlICoubyBidXQgbm90IGxpYnJhcnkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL3BjcmUvY29uZiBiL2F1dG8vbGliL3BjcmUvY29uZgppbmRleCBjZDUxNmUxLi5jZjI2YmUyIDEwMDY0NAotLS0gYS9hdXRvL2xpYi9wY3JlL2NvbmYKKysrIGIvYXV0by9saWIvcGNyZS9jb25mCkBAIC05LDcgKzksNyBAQAogCiAgICAgY2FzZSAiJE5HWF9DQ19OQU1FIiBpbgogCi0gICAgICAgIG1zdmMgfCBvd2MgfCBiY2MpCisgICAgICAgIG1zdmMqIHwgb3djKiB8IGJjYykKICAgICAgICAgICAgIGhhdmU9TkdYX1BDUkUgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIGhhdmU9UENSRV9TVEFUSUMgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIENPUkVfREVQUz0iJENPUkVfREVQUyAkUENSRS9wY3JlLmgiCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFBDUkUvcGNyZS5saWIiCiAgICAgICAgIDs7CiAKLSAgICAgICAgaWNjKQorICAgICAgICBpY2MqKQogICAgICAgICAgICAgaGF2ZT1OR1hfUENSRSAuIGF1dG8vaGF2ZQogICAgICAgICAgICAgQ09SRV9ERVBTPSIkQ09SRV9ERVBTICRQQ1JFL3BjcmUuaCIKIApkaWZmIC0tZ2l0IGEvYXV0by9saWIvemxpYi9jb25mIGIvYXV0by9saWIvemxpYi9jb25mCmluZGV4IGY4MzNkNjEuLjc5N2EyZDMgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3psaWIvY29uZgorKysgYi9hdXRvL2xpYi96bGliL2NvbmYKQEAgLTcsMTIgKzcsMTIgQEAKIAogICAgIGNhc2UgIiROR1hfQ0NfTkFNRSIgaW4KIAotICAgICAgICBtc3ZjIHwgb3djIHwgYmNjKQorICAgICAgICBtc3ZjKiB8IG93YyogfCBiY2MpCiAgICAgICAgICAgICBMSU5LX0RFUFM9IiRMSU5LX0RFUFMgJFpMSUIvemxpYi5saWIiCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJFpMSUIvemxpYi5saWIiCiAgICAgICAgIDs7CiAKLSAgICAgICAgaWNjKQorICAgICAgICBpY2MqKQogICAgICAgICAgICAgTElOS19ERVBTPSIkTElOS19ERVBTICRaTElCL2xpYnouYSIKIAogICAgICAgICAgICAgIyB0byBhbGxvdyAtaXBvIG9wdGltaXphdGlvbiB3ZSBsaW5rIHdpdGggdGhlICoubyBidXQgbm90IGxpYnJhcnkKZGlmZiAtLWdpdCBhL2F1dG8vbWFrZSBiL2F1dG8vbWFrZQppbmRleCA4NzQ0ZDFmLi5jMTY1MDc4IDEwMDY0NAotLS0gYS9hdXRvL21ha2UKKysrIGIvYXV0by9tYWtlCkBAIC0xMzIsNyArMTMyLDE1IEBACiAKIG5neF9tb2R1bGVzX29iaj1gZWNobyAkbmd4X21vZHVsZXNfYyB8IHNlZCAtZSAicy9cKC4qXC5cKWMvXDEkbmd4X29iamV4dC8iYAogCi1uZ3hfZGVwcz1gZWNobyAkbmd4X2FsbF9vYmpzICRuZ3hfbW9kdWxlc19vYmogJExJTktfREVQUyBcCisKK2lmIHRlc3QgLW4gIiROR1hfUkVTIjsgdGhlbgorICAgbmd4X3Jlcz0kTkdYX1JFUworZWxzZQorICAgbmd4X3Jlcz0iJE5HWF9SQyAkTkdYX0lDT05TIgorICAgbmd4X3JjYz1gZWNobyAkTkdYX1JDQyB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKK2ZpCisKK25neF9kZXBzPWBlY2hvICRuZ3hfYWxsX29ianMgJG5neF9tb2R1bGVzX29iaiAkbmd4X3JlcyAkTElOS19ERVBTIFwKICAgICB8IHNlZCAtZSAicy8gICpcKFteIF1bXiBdKlwpLyRuZ3hfcmVnZXhfY29udFwxL2ciIFwKICAgICAgICAgICAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKIApAQCAtMTQ2LDEwICsxNTQsMTIgQEAKIG5neF9saW5rPSR7Q09SRV9MSU5LOitgZWNobyAkQ09SRV9MSU5LIFwKICAgICB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nIiAtZSAicy9eLyRuZ3hfcmVnZXhfY29udC8iYH0KIAorCiBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKIAogJE5HWF9PQkpTJHtuZ3hfZGlyc2VwfW5naW54JHtuZ3hfYmluZXh0fToJJG5neF9kZXBzJG5neF9zcGFjZXIKIAlcJChMSU5LKSAke25neF9iaW5vdXR9JE5HWF9PQkpTJHtuZ3hfZGlyc2VwfW5naW54JG5neF9jb250JG5neF9vYmpzJG5neF9saWJzJG5neF9saW5rCisJJG5neF9yY2MKIAogRU5ECiAKQEAgLTI1Niw2ICsyNjYsMjQgQEAKIGZpCiAKIAorIyBXaW4zMiByZXNvdXJjZSBmaWxlCisKK2lmIHRlc3QgLW4gIiROR1hfUkVTIjsgdGhlbgorCisgICAgbmd4X3Jlcz1gZWNobyAiJE5HWF9SRVM6CSROR1hfUkMgJE5HWF9JQ09OUyIgXAorICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicy9cLy8kbmd4X3JlZ2V4X2RpcnNlcC9nImAKKyAgICBuZ3hfcmNjPWBlY2hvICROR1hfUkNDIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorCisgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworJG5neF9yZXMKKwkkbmd4X3JjYworCitFTkQKKworZmkKKworCiAjIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzCiAKIGlmIHRlc3QgLW4gIiROR1hfUENIIjsgdGhlbgpkaWZmIC0tZ2l0IGEvYXV0by9tb2R1bGVzIGIvYXV0by9tb2R1bGVzCmluZGV4IDdkNzkyMDUuLjM5ZGZhOWQgMTAwNjQ0Ci0tLSBhL2F1dG8vbW9kdWxlcworKysgYi9hdXRvL21vZHVsZXMKQEAgLTE1NCw5ICsxNTQsMTQgQEAKIGZpCiAKIAotZWNobyAiI2luY2x1ZGUgPG5neF9jb25maWcuaD4iICAgICAgICAgICAgICAgID4gJE5HWF9NT0RVTEVTX0MKLWVjaG8gIiNpbmNsdWRlIDxuZ3hfY29yZS5oPiIgICAgICAgICAgICAgICAgICA+PiAkTkdYX01PRFVMRVNfQwotZWNobyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTU9EVUxFU19DCitjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAkTkdYX01PRFVMRVNfQworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisKKyROR1hfUFJBR01BCisKK0VORAogCiBmb3IgbW9kIGluICRtb2R1bGVzCiBkbwpAQCAtMTcxLDUgKzE3Niw4IEBACiAgICAgZWNobyAiICAgICYkbW9kLCIgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NT0RVTEVTX0MKIGRvbmUKIAotZWNobyAiICAgIE5VTEwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTU9EVUxFU19DCi1lY2hvICJ9OyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NT0RVTEVTX0MKK2NhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01PRFVMRVNfQworICAgIE5VTEwKK307CisKK0VORApkaWZmIC0tZ2l0IGEvYXV0by9vcHRpb25zIGIvYXV0by9vcHRpb25zCmluZGV4IDQwYTA5YjkuLjcyZTViMzYgMTAwNjQ0Ci0tLSBhL2F1dG8vb3B0aW9ucworKysgYi9hdXRvL29wdGlvbnMKQEAgLTI2LDYgKzI2LDkgQEAKIFRFU1RfQlVJTERfRVBPTEw9Tk8KIFRFU1RfQlVJTERfUlRTSUc9Tk8KIAorUExBVEZPUk09CitOR1hfV0lORT0KKwogRVZFTlRfRk9VTkQ9Tk8KIAogRVZFTlRfUlRTSUc9Tk8KQEAgLTE5NSw5ICsxOTgsOCBAQAogZmkKIAogCi1pZiBbICIuJFBMQVRGT1JNIiA9ICIud2luMzIiIC1hICRFVkVOVF9QT0xMID0gWUVTIF07IHRoZW4KLSAgICBFVkVOVF9QT0xMPU5PCi0gICAgZWNobyAiJDA6IHdhcm5pbmc6IC0td2l0aC1wb2xsX21vZHVsZSBvcHRpb24gaXMgaWdub3JlZCBmb3Igd2luMzIiCitpZiBbICIuJFBMQVRGT1JNIiA9ICIud2luMzIiIF07IHRoZW4KKyAgICBOR1hfV0lORT0kV0lORQogZmkKIAogCkBAIC0yMTEsMTIgKzIxMyw2IEBACiBmaQogCiAKLWlmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KLSAgICBOR1hfVVNFUj1ub2JvZHkKLSAgICBOR1hfR1JPVVA9bm9ib2R5Ci1maQotCi0KIGNhc2UgIi4kU0JJTl9QQVRIIiBpbgogICAgIC4vKikKICAgICA7OwpkaWZmIC0tZ2l0IGEvYXV0by9vcy9jb25mIGIvYXV0by9vcy9jb25mCmluZGV4IDUxNTRmMmIuLjVkY2Y0MDAgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvY29uZgorKysgYi9hdXRvL29zL2NvbmYKQEAgLTQ1LDYgKzQ1LDEyIEBACiAKIGlmIFsgJFBMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KIAorICAgIGlmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KKyAgICAgICAgTkdYX1VTRVI9bm9ib2R5CisgICAgICAgIE5HWF9HUk9VUD1ub2JvZHkKKyAgICBmaQorCisKICAgICBuZ3hfZmVhdHVyZT0iL2Rldi9wb2xsIgogICAgIG5neF9mZWF0dXJlX25hbWU9ImRldnBvbGwiCiAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCmRpZmYgLS1naXQgYS9hdXRvL29zL2xpbnV4IGIvYXV0by9vcy9saW51eAppbmRleCBlNjhhMGQyLi44NTE4YzYxIDEwMDY0NAotLS0gYS9hdXRvL29zL2xpbnV4CisrKyBiL2F1dG8vb3MvbGludXgKQEAgLTIwLDYgKzIwLDEzIEBACiAKIENDX0FVWF9GTEFHUz0iLURfR05VX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IgogCisKK2lmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KKyAgICBOR1hfVVNFUj1ub2JvZHkKKyAgICBOR1hfR1JPVVA9bm9ncm91cAorZmkKKworCiAjIExpbnV4IGtlcm5lbCB2ZXJzaW9uCiAKIHZlcnNpb249YGdyZXAgIiNkZWZpbmUgTElOVVhfVkVSU0lPTl9DT0RFIiAvdXNyL2luY2x1ZGUvbGludXgvdmVyc2lvbi5oIFwKZGlmZiAtLWdpdCBhL2F1dG8vb3Mvd2luMzIgYi9hdXRvL29zL3dpbjMyCmluZGV4IDllODNlNjcuLmRmYmIyNDYgMTAwNjQ0Ci0tLSBhL2F1dG8vb3Mvd2luMzIKKysrIGIvYXV0by9vcy93aW4zMgpAQCAtMTUsNyArMTUsOCBAQAogQ09SRV9ERVBTPSIkV0lOMzJfREVQUyIKIENPUkVfU1JDUz0iJFdJTjMyX1NSQ1MgJElPQ1BfU1JDUyIKIE9TX0NPTkZJRz0iJFdJTjMyX0NPTkZJRyIKLUNPUkVfTElCUz0iJENPUkVfTElCUyB3czJfMzIubGliIgorQ09SRV9MSUJTPSIkQ09SRV9MSUJTIHNoZWxsMzIubGliIHdzMl8zMi5saWIiCitOR1hfSUNPTlM9IiROR1hfV0lOMzJfSUNPTlMiCiAKIEVWRU5UX01PRFVMRVM9IiRFVkVOVF9NT0RVTEVTICRJT0NQX01PRFVMRSIKIEVWRU5UX0ZPVU5EPVlFUwpkaWZmIC0tZ2l0IGEvYXV0by9zb3VyY2VzIGIvYXV0by9zb3VyY2VzCmluZGV4IGJmNTgyOWYuLjI3MjlmMWIgMTAwNjQ0Ci0tLSBhL2F1dG8vc291cmNlcworKysgYi9hdXRvL3NvdXJjZXMKQEAgLTE3NSw4ICsxNzUsMTAgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc2hhcmVkLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9wcm9jZXNzLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9hdG9taWMuaCBcCisgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9vcy5oIFwKKyAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZ3VpLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmgiCiAKIFdJTjMyX0NPTkZJRz1zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCkBAIC0xODcsMTQgKzE4OSwxOSBAQAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9maWxlcy5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfdGltZS5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5jIFwKKyAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmMgXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9zb2NrZXQuYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3dzYXJlY3YuYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3dzYXJlY3ZfY2hhaW4uYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3dzYXNlbmRfY2hhaW4uYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYyBcCisgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X2d1aS5jIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jIFwKICAgICAgICAgICAgIHNyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYyIKIAorTkdYX1dJTjMyX0lDT05TPSJzcmMvb3Mvd2luMzIvbmdpbnguaWNvIHNyYy9vcy93aW4zMi90cmF5LmljbyIKK05HWF9XSU4zMl9SQz0ic3JjL29zL3dpbjMyL25naW54LnJjIgorCiAKIEhUVFBfTU9EVUxFUz0ibmd4X2h0dHBfbW9kdWxlIFwKICAgICAgICAgICAgICAgbmd4X2h0dHBfY29yZV9tb2R1bGUgXApkaWZmIC0tZ2l0IGEvYXV0by91bml4IGIvYXV0by91bml4CmluZGV4IGVjMGUzOTUuLmFmOWVlMDEgMTAwNzU1Ci0tLSBhL2F1dG8vdW5peAorKysgYi9hdXRvL3VuaXgKQEAgLTgsMTcgKzgsMTcgQEAKICMgQyB0eXBlcwogCiBuZ3hfdHlwZT0iaW50IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotbmd4X2Zvcm1hdHM9IiVkIjsgLiBhdXRvL2ZtdC9mbXQKKyNuZ3hfZm9ybWF0cz0iJWQiOyAuIGF1dG8vZm10L2ZtdAogCiBuZ3hfdHlwZT0ibG9uZyI7IC4gYXV0by90eXBlcy9zaXplb2YKLW5neF9mb3JtYXRzPSIlbGQiOyAuIGF1dG8vZm10L2ZtdAorI25neF9mb3JtYXRzPSIlbGQiOyAuIGF1dG8vZm10L2ZtdAogCiBuZ3hfdHlwZT0ibG9uZyBsb25nIjsgLiBhdXRvL3R5cGVzL3NpemVvZgotbmd4X2Zvcm1hdHM9IiVsbGQgJXFkIjsgLiBhdXRvL2ZtdC9mbXQKKyNuZ3hfZm9ybWF0cz0iJWxsZCAlcWQiOyAuIGF1dG8vZm10L2ZtdAogCiBuZ3hfdHlwZT0idm9pZCAqIjsgLiBhdXRvL3R5cGVzL3NpemVvZjsgbmd4X3B0cl9zaXplPSRuZ3hfc2l6ZQotbmd4X2ZtdF9uYW1lPVBUUl9GTVQ7Ci1ldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9wdHJfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9wdHJmbXQKKyNuZ3hfZm10X25hbWU9UFRSX0ZNVDsKKyNldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9wdHJfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9wdHJmbXQKIAogCiAjIFBPU0lYIHR5cGVzCkBAIC00NiwyOCArNDYsMjggQEAKIAogIyBwcmludGYoKSBmb3JtYXRzCiAKLUNDX1dBUk49JENDX1NUUk9ORwotbmd4X2ZtdF9jb2xsZWN0PW5vCi0KLW5neF9mbXRfbmFtZT1PRkZfVF9GTVQ7IG5neF90eXBlPSJvZmZfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKKyNDQ19XQVJOPSRDQ19TVFJPTkcKKyNuZ3hfZm10X2NvbGxlY3Q9bm8KKyMKKyNuZ3hfZm10X25hbWU9T0ZGX1RfRk1UOyBuZ3hfdHlwZT0ib2ZmX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCiBuZ3hfcGFyYW09T0ZGX1RfTUFYX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQotZXZhbCBuZ3hfZm9ybWF0cz1cJHtuZ3hfJHtuZ3hfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9mbXQKLQotbmd4X2ZtdF9uYW1lPVRJTUVfVF9GTVQ7IG5neF90eXBlPSJ0aW1lX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCisjZXZhbCBuZ3hfZm9ybWF0cz1cJHtuZ3hfJHtuZ3hfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9mbXQKKyMKKyNuZ3hfZm10X25hbWU9VElNRV9UX0ZNVDsgbmd4X3R5cGU9InRpbWVfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKIG5neF9wYXJhbT1USU1FX1RfU0laRTsgbmd4X3ZhbHVlPSRuZ3hfc2l6ZTsgLiBhdXRvL3R5cGVzL3ZhbHVlCiBuZ3hfcGFyYW09VElNRV9UX0xFTjsgbmd4X3ZhbHVlPSRuZ3hfbWF4X2xlbjsgLiBhdXRvL3R5cGVzL3ZhbHVlCi1ldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9zaXplfV9mbXR9OyAuIGF1dG8vZm10L2ZtdAotCi1uZ3hfZm10X25hbWU9U0laRV9UX0ZNVDsgbmd4X3R5cGU9InNpemVfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKLWV2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10Ci0KLW5neF9mbXRfbmFtZT1TSVpFX1RfWF9GTVQ7IC4gYXV0by9mbXQveGZtdAotCi1uZ3hfZm10X25hbWU9UElEX1RfRk1UOyBuZ3hfdHlwZT0icGlkX3QiOyAuIGF1dG8vdHlwZXMvc2l6ZW9mCi1ldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9zaXplfV9mbXR9OyAuIGF1dG8vZm10L2ZtdAotCi1uZ3hfZm10X25hbWU9UkxJTV9UX0ZNVDsgbmd4X3R5cGU9InJsaW1fdCI7IC4gYXV0by90eXBlcy9zaXplb2YKLWV2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10CisjZXZhbCBuZ3hfZm9ybWF0cz1cJHtuZ3hfJHtuZ3hfc2l6ZX1fZm10fTsgLiBhdXRvL2ZtdC9mbXQKKyMKKyNuZ3hfZm10X25hbWU9U0laRV9UX0ZNVDsgbmd4X3R5cGU9InNpemVfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKKyNldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9zaXplfV9mbXR9OyAuIGF1dG8vZm10L2ZtdAorIworI25neF9mbXRfbmFtZT1TSVpFX1RfWF9GTVQ7IC4gYXV0by9mbXQveGZtdAorIworI25neF9mbXRfbmFtZT1QSURfVF9GTVQ7IG5neF90eXBlPSJwaWRfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKKyNldmFsIG5neF9mb3JtYXRzPVwke25neF8ke25neF9zaXplfV9mbXR9OyAuIGF1dG8vZm10L2ZtdAorIworI25neF9mbXRfbmFtZT1STElNX1RfRk1UOyBuZ3hfdHlwZT0icmxpbV90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgorI2V2YWwgbmd4X2Zvcm1hdHM9XCR7bmd4XyR7bmd4X3NpemV9X2ZtdH07IC4gYXV0by9mbXQvZm10CiAKIAogIyBzeXNjYWxscywgbGliYyBjYWxscyBhbmQgc29tZSBmZWF0dXJlcwpAQCAtOTMsMTkgKzkzLDIzIEBACiAKIG5neF9mZWF0dXJlPSJzdHJlcnJvcl9yKCkiCiBuZ3hfZmVhdHVyZV9uYW1lPSJzdHJlcnJvcl9yIgotbmd4X2ZlYXR1cmVfcnVuPW5vCituZ3hfZmVhdHVyZV9ydW49eWVzCiBuZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3RyaW5nLmg+Igogbmd4X2ZlYXR1cmVfbGlicz0KLW5neF9mZWF0dXJlX3Rlc3Q9ImNoYXIgYnVmWzIwXTsgaW50IG47IG4gPSBzdHJlcnJvcl9yKDEsIGJ1ZiwgMjApIgorbmd4X2ZlYXR1cmVfdGVzdD0iY2hhciBidWZbMzJdOyBpbnQgbjsgbiA9IHN0cmVycm9yX3IoMSwgYnVmLCAzMik7CisgICAgICAgICAgICAgICAgICBpZiAobiA+IDMyKSByZXR1cm4gMTsiCiAuIGF1dG8vZmVhdHVyZQogCiAKLW5neF9mZWF0dXJlPSJnbnVfc3RyZXJyb3JfcigpIgorIyBHTlUgc3R5bGUgc3RyZXJyb3JfcigpIHJldHVybnMgbm90IGxlbmd0aCwgYnV0IHBvaW50ZXIKKworbmd4X2ZlYXR1cmU9ImdudSBzdHlsZSBzdHJlcnJvcl9yKCkiCiBuZ3hfZmVhdHVyZV9uYW1lPSJnbnVfc3RyZXJyb3JfciIKLW5neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfcnVuPXllcwogbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHN0cmluZy5oPiIKIG5neF9mZWF0dXJlX2xpYnM9Ci1uZ3hfZmVhdHVyZV90ZXN0PSJjaGFyIGJ1ZlsyMF0sICpzdHI7IHN0ciA9IHN0cmVycm9yX3IoMSwgYnVmLCAyMCkiCituZ3hfZmVhdHVyZV90ZXN0PSJjaGFyIGJ1ZlszMl07IGludCBuOyBuID0gc3RyZXJyb3JfcigxLCBidWYsIDMyKTsKKyAgICAgICAgICAgICAgICAgIGlmIChuIDwgMzIpIHJldHVybiAxOyIKIC4gYXV0by9mZWF0dXJlCiAKIApAQCAtMTg0LDE2ICsxODgsNiBAQAogLiBhdXRvL2ZlYXR1cmUKIAogCi1uZ3hfZmVhdHVyZT0ic3RydWN0IHNvY2thZGRyX2luLnNpbl9sZW4iCi1uZ3hfZmVhdHVyZV9uYW1lPSJzaW5fbGVuIgotbmd4X2ZlYXR1cmVfcnVuPW5vCi1uZ3hfZmVhdHVyZV9pbmNzPSIjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4iCi1uZ3hfZmVhdHVyZV9saWJzPQotbmd4X2ZlYXR1cmVfdGVzdD0ic3RydWN0IHNvY2thZGRyX2luIHNhOyBzYS5zaW5fbGVuID0gNSIKLS4gYXV0by9mZWF0dXJlCi0KLQogbmd4X2ZlYXR1cmU9InN0cnVjdCBtc2doZHIubXNnX2NvbnRyb2wiCiBuZ3hfZmVhdHVyZV9uYW1lPSJtc2doZHJfbXNnX2NvbnRyb2wiCiBuZ3hfZmVhdHVyZV9ydW49bm8KZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggNDQyOTNmNS4uNTIzNjA0NyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTYsNiArNiw5MiBAQAogICAgICAgICAgICAgdGl0bGU9Im5naW54Ij4KIAogCis8Y2hhbmdlcyB2ZXI9IjAuMS41IiBkYXRlPSIxMS4xMS4yMDA0Ij4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorzsEgU29sYXJpcyDJIExpbnV4IM3Px8zPIMLZ1Nggz97Fztggzc7Px88g08/Pwt3FzsnKICJyZWN2bXNnKCkgcmV0dXJuZWQKK25vdCBlbm91Z2ggZGF0YSIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitvbiBTb2xhcmlzIGFuZCBMaW51eCB0aGVyZSBtYXkgYmUgdG9vIG1hbnkgInJlY3Ztc2coKSByZXR1cm5lZCBub3QgZW5vdWdoIGRhdGEiCithbGVydHMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor1yDSxdbJzcUg0NLPy9PJIMLF2iDJ09DPzNjaz9fBzsnRIHNlbmRmaWxlIM7BIFNvbGFyaXMg18/azsnLwczBCivP28nCy8EgIndyaXRldigpIGZhaWxlZCAoMjI6IEludmFsaWQgYXJndW1lbnQpIi4g7sEgxNLVx8nIINDMwdTGz9LNwcgsCivOxSDQz8TExdLWydfBwN3JyCBzZW5kZmlsZSwg0NLPw8XT0yDawcPJy8zJ18HM09EuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGVyZSB3ZXJlIHRoZSAid3JpdGV2KCkgZmFpbGVkICgyMjogSW52YWxpZCBhcmd1bWVudCkiIGVycm9ycyBvbgorU29sYXJpcyBpbiBwcm94eSBtb2RlIHdpdGhvdXQgc2VuZGZpbGUuIE9uIG90aGVyIHBsYXRmb3JtcyB0aGF0IGRvIG5vdAorc3VwcG9ydCBzZW5kZmlsZSBhdCBhbGwgdGhlIHByb2Nlc3MgZ290IGNhdWdodCBpbiBhbiBlbmRsZXNzIGxvb3AuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor0NLJIMnT0M/M2NrP18HOyckgc2VuZGZpbGUg1yDSxdbJzcUg0NLPy9PJIM7BIFNvbGFyaXMg18/azsnLwcwKK3NlZ21lbnRhdGlvbiBmYXVsdC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3NlZ21lbnRhdGlvbiBmYXVsdCBvbiBTb2xhcmlzIGluIHByb3h5IG1vZGUgYW5kIHVzaW5nIHNlbmRmaWxlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK3NlZ21lbnRhdGlvbiBmYXVsdCDOwSBTb2xhcmlzLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorc2VnbWVudGF0aW9uIGZhdWx0IG9uIFNvbGFyaXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz8LOz9fMxc7JxSDJ09DPzM7Rxc3Px88gxsHKzMEgzsEgzMXU1SDOxSDSwcLP1MHMzyDOwSBMaW51eC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK29uLWxpbmUgdXBncmFkZSBkaWQgbm90IHdvcmsgb24gTGludXguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgor1yDT0MnTy8UgxsHKzM/XLCDX2cTB18HFzc/NIM3PxNXMxc0gbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZSwKK87FINDF0sXLz8TJ0s/XwczJ09gg0NLPwsXM2Swgy8HX2d7LySDJINrOwcvJINDSz8PFztTBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgbW9kdWxlIGRpZCBub3QgZXNjYXBlIHRoZSBzcGFjZXMsCit0aGUgcXVvdGVzLCBhbmQgdGhlIHBlcmNlbnQgc2lnbnMgaW4gdGhlIGRpcmVjdG9yeSBsaXN0aW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9XNxc7Y28XOycUgz9DF0sHDycogy8/QydLP18HOydEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgZGVjcmVhc2Ugb2YgdGhlIGNvcHkgb3BlcmF0aW9ucy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHVzZXJpZF9wM3AuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgdXNlcmlkX3AzcCBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjQiIGRhdGU9IjI2LjEwLjIwMDQiPgogCiA8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5jIGIvc3JjL2NvcmUvbmdpbnguYwppbmRleCBhYjg1YjIzLi41M2FjNjY2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5jCisrKyBiL3NyYy9jb3JlL25naW54LmMKQEAgLTE4LDYgKzE4LDEzIEBACiBzdGF0aWMgY2hhciAqbmd4X3NldF91c2VyKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogCiAKK3N0YXRpYyBuZ3hfY29uZl9lbnVtX3QgIG5neF9kZWJ1Z19wb2ludHNbXSA9IHsKKyAgICB7IG5neF9zdHJpbmcoInN0b3AiKSwgTkdYX0RFQlVHX1BPSU5UU19TVE9QIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJhYm9ydCIpLCBOR1hfREVCVUdfUE9JTlRTX0FCT1JUIH0sCisgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIDAgfQorfTsgIAorCisKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfY29yZV9jb21tYW5kc1tdID0gewogCiAgICAgeyBuZ3hfc3RyaW5nKCJkYWVtb24iKSwKQEAgLTQxLDYgKzQ4LDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIHdvcmtlcl9wcm9jZXNzZXMpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJkZWJ1Z19wb2ludHMiKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X2VudW1fc2xvdCwKKyAgICAgIDAsCisgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIGRlYnVnX3BvaW50cyksCisgICAgICAmbmd4X2RlYnVnX3BvaW50cyB9LAorCiAjaWYgKE5HWF9USFJFQURTKQogCiAgICAgeyBuZ3hfc3RyaW5nKCJ3b3JrZXJfdGhyZWFkcyIpLApAQCAtOTcsNiArMTExLDcgQEAKIG5neF91aW50X3QgIG5neF9tYXhfbW9kdWxlOwogCiAKKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBjaGFyICpjb25zdCAqZW52cCkKIHsKICAgICBuZ3hfaW50X3QgICAgICAgICBpOwpAQCAtMTE4LDcgKzEzMyw3IEBACiAKICAgICBuZ3hfcGlkID0gbmd4X2dldHBpZCgpOwogCi0gICAgaWYgKCEobG9nID0gbmd4X2xvZ19pbml0X3N0ZGVycigpKSkgeworICAgIGlmICghKGxvZyA9IG5neF9sb2dfaW5pdCgpKSkgewogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKQEAgLTE2NSw3ICsxODAsNyBAQAogICAgIGlmIChjeWNsZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChuZ3hfdGVzdF9jb25maWcpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGNvbmZpZ3VyYXRpb24gZmlsZSAlcyB0ZXN0IGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY29uZmlndXJhdGlvbiBmaWxlIFwiJXNcIiB0ZXN0IGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfY3ljbGUuY29uZl9maWxlLmRhdGEpOwogICAgICAgICB9CiAKQEAgLTE3NCw3ICsxODksNyBAQAogCiAgICAgaWYgKG5neF90ZXN0X2NvbmZpZykgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJ0aGUgY29uZmlndXJhdGlvbiBmaWxlICVzIHdhcyB0ZXN0ZWQgc3VjY2Vzc2Z1bGx5IiwKKyAgICAgICAgICAgICAgICAgICAgICAidGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVzXCIgd2FzIHRlc3RlZCBzdWNjZXNzZnVsbHkiLAogICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5jb25mX2ZpbGUuZGF0YSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE4Nyw3ICsyMDIsNyBAQAogCiAgICAgbmd4X3Byb2Nlc3MgPSBjY2YtPm1hc3RlciA/IE5HWF9QUk9DRVNTX01BU1RFUiA6IE5HWF9QUk9DRVNTX1NJTkdMRTsKIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogCiAjaWYgMAogCkBAIC0yNDEsMTEgKzI1NiwxNCBAQAogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjeWNsZS0+bG9nLCAwLAorICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAidXNpbmcgaW5oZXJpdGVkIHNvY2tldHMgZnJvbSBcIiVzXCIiLCBpbmhlcml0ZWQpOwogCi0gICAgbmd4X2luaXRfYXJyYXkoY3ljbGUtPmxpc3RlbmluZywgY3ljbGUtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgMTAsIHNpemVvZihuZ3hfbGlzdGVuaW5nX3QpLCBOR1hfRVJST1IpOworICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY3ljbGUtPmxpc3RlbmluZywgY3ljbGUtPnBvb2wsIDEwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2xpc3RlbmluZ190KSkgPT0gTkdYX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CiAKICAgICBmb3IgKHAgPSBpbmhlcml0ZWQsIHYgPSBwOyAqcDsgcCsrKSB7CiAgICAgICAgIGlmICgqcCA9PSAnOicgfHwgKnAgPT0gJzsnKSB7CkBAIC0yNjAsNyArMjc4LDcgQEAKIAogICAgICAgICAgICAgdiA9IHAgKyAxOwogCi0gICAgICAgICAgICBpZiAoIShscyA9IG5neF9wdXNoX2FycmF5KCZjeWNsZS0+bGlzdGVuaW5nKSkpIHsKKyAgICAgICAgICAgIGlmICghKGxzID0gbmd4X2FycmF5X3B1c2goJmN5Y2xlLT5saXN0ZW5pbmcpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKQEAgLTI3Niw3ICsyOTQsOCBAQAogCiBuZ3hfcGlkX3Qgbmd4X2V4ZWNfbmV3X2JpbmFyeShuZ3hfY3ljbGVfdCAqY3ljbGUsIGNoYXIgKmNvbnN0ICphcmd2KQogewotICAgIGNoYXIgICAgICAgICAgICAgKmVudlszXSwgKnZhciwgKnA7CisgICAgY2hhciAgICAgICAgICAgICAqZW52WzNdLCAqdmFyOworICAgIHVfY2hhciAgICAgICAgICAgKnA7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgaTsKICAgICBuZ3hfcGlkX3QgICAgICAgICBwaWQ7CiAgICAgbmd4X2V4ZWNfY3R4X3QgICAgY3R4OwpAQCAtMjkwLDIwICszMDksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGN5Y2xlLT5saXN0ZW5pbmcubmVsdHMgKiAoTkdYX0lOVDMyX0xFTiArIDEpICsgMiwKICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7CiAKLSAgICBwID0gKGNoYXIgKikgbmd4X2NweW1lbSh2YXIsIE5HSU5YX1ZBUiAiPSIsIHNpemVvZihOR0lOWF9WQVIpKTsKKyAgICBwID0gbmd4X2NweW1lbSh2YXIsIE5HSU5YX1ZBUiAiPSIsIHNpemVvZihOR0lOWF9WQVIpKTsKIAogICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgcCArPSBuZ3hfc25wcmludGYocCwgTkdYX0lOVDMyX0xFTiArIDIsICIldTsiLCBsc1tpXS5mZCk7CisgICAgICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiJXVkOyIsIGxzW2ldLmZkKTsKICAgICB9CiAKKyAgICAqcCA9ICdcMCc7CisKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN5Y2xlLT5sb2csIDAsICJpbmhlcml0ZWQ6ICVzIiwgdmFyKTsKIAogICAgIGVudlswXSA9IHZhcjsKIAogI2lmIChOR1hfU0VUUFJPQ1RJVExFX1VTRVNfRU5WKQogCi0gICAgLyogYWxsb2NhdGUgc3BhcmUgMzAwIGJ5dGVzIGZvciB0aGUgbmV3IGJpbmFyeSBwcm9jZXNzIHRpdGxlICovCisgICAgLyogYWxsb2NhdGUgdGhlIHNwYXJlIDMwMCBieXRlcyBmb3IgdGhlIG5ldyBiaW5hcnkgcHJvY2VzcyB0aXRsZSAqLwogCiAgICAgZW52WzFdID0gIlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCIKICAgICAgICAgICAgICAiWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYIgpAQCAtNDMwLDEyICs0NTEsMTMgQEAKICAgICBjY2YtPmRhZW1vbiA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+bWFzdGVyID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY2NmLT53b3JrZXJfcHJvY2Vzc2VzID0gTkdYX0NPTkZfVU5TRVQ7Ci0jaWYgKE5HWF9USFJFQURTKQotICAgIGNjZi0+d29ya2VyX3RocmVhZHMgPSBOR1hfQ09ORl9VTlNFVDsKLSAgICBjY2YtPnRocmVhZF9zdGFja19zaXplID0gTkdYX0NPTkZfVU5TRVQ7Ci0jZW5kaWYKKyAgICBjY2YtPmRlYnVnX3BvaW50cyA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+dXNlciA9IChuZ3hfdWlkX3QpIE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+Z3JvdXAgPSAobmd4X2dpZF90KSBOR1hfQ09ORl9VTlNFVDsKKyNpZiAoTkdYX1RIUkVBRFMpCisgICAgY2NmLT53b3JrZXJfdGhyZWFkcyA9IE5HWF9DT05GX1VOU0VUOworICAgIGNjZi0+dGhyZWFkX3N0YWNrX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOworI2VuZGlmCiAKICAgICByZXR1cm4gY2NmOwogfQpAQCAtNDQ1LDcgKzQ2Nyw3IEBACiB7CiAgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmID0gY29uZjsKIAotI2lmICEoV0lOMzIpCisjaWYgIShOR1hfV0lOMzIpCiAgICAgc3RydWN0IHBhc3N3ZCAgICAqcHdkOwogICAgIHN0cnVjdCBncm91cCAgICAgKmdycDsKICNlbmRpZgpAQCAtNDUzLDYgKzQ3NSw3IEBACiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPmRhZW1vbiwgMSk7CiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPm1hc3RlciwgMSk7CiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPndvcmtlcl9wcm9jZXNzZXMsIDEpOworICAgIG5neF9jb25mX2luaXRfdmFsdWUoY2NmLT5kZWJ1Z19wb2ludHMsIDApOwogCiAjaWYgKE5HWF9USFJFQURTKQogICAgIG5neF9jb25mX2luaXRfdmFsdWUoY2NmLT53b3JrZXJfdGhyZWFkcywgMCk7CkBAIC00NjAsOSArNDgzLDkgQEAKICAgICBuZ3hfY29uZl9pbml0X3NpemVfdmFsdWUoY2NmLT50aHJlYWRfc3RhY2tfc2l6ZSwgMiAqIDEwMjQgKiAxMDI0KTsKICNlbmRpZgogCi0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKIAotICAgIGlmIChjY2YtPnVzZXIgPT0gKHVpZF90KSBOR1hfQ09ORl9VTlNFVCkgeworICAgIGlmIChjY2YtPnVzZXIgPT0gKHVpZF90KSBOR1hfQ09ORl9VTlNFVCAmJiBnZXRldWlkKCkgPT0gMCkgewogCiAgICAgICAgIHB3ZCA9IGdldHB3bmFtKE5HWF9VU0VSKTsKICAgICAgICAgaWYgKHB3ZCA9PSBOVUxMKSB7CkBAIC01MDksNyArNTMyLDcgQEAKIAogc3RhdGljIGNoYXIgKm5neF9zZXRfdXNlcihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogCiAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfV0FSTiwgY2YsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJcInVzZXJcIiBpcyBub3Qgc3VwcG9ydGVkLCBpZ25vcmVkIik7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCAwZDQyOTk4Li4yYmUyNmUwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuNCIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuNSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKaW5kZXggZmI2MjlhNC4uM2M3ODk4YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwpAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICBmZCA9IG5neF9vcGVuX2ZpbGUoZmlsZW5hbWUtPmRhdGEsIE5HWF9GSUxFX1JET05MWSwgTkdYX0ZJTEVfT1BFTik7CiAgICAgICAgIGlmIChmZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgJXMgZmFpbGVkIiwgZmlsZW5hbWUtPmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgZmlsZW5hbWUtPmRhdGEpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTg0LDcgKzg0LDcgQEAKIAogICAgICAgICBpZiAobmd4X2ZkX2luZm8oZmQsICZjZi0+Y29uZl9maWxlLT5maWxlLmluZm8pID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZkX2luZm9fbiAiICVzIGZhaWxlZCIsIGZpbGVuYW1lLT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZkX2luZm9fbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlbmFtZS0+ZGF0YSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIShjZi0+Y29uZl9maWxlLT5idWZmZXIgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKGNmLT5wb29sLCAxMDI0KSkpIHsKQEAgLTEwMyw4ICsxMDMsMTIgQEAKICAgICAgICAgcmMgPSBuZ3hfY29uZl9yZWFkX3Rva2VuKGNmKTsKIAogICAgICAgICAvKgotICAgICAgICAgKiBuZ3hfY29uZl9yZWFkX3Rva2VuKCkgcmV0dXJucyBOR1hfT0ssIE5HWF9FUlJPUiwKLSAgICAgICAgICogTkdYX0NPTkZfRklMRV9ET05FIG9yIE5HWF9DT05GX0JMT0NLX0RPTkUKKyAgICAgICAgICogbmd4X2NvbmZfcmVhZF90b2tlbigpIG1heSByZXR1cm4KKyAgICAgICAgICogICAgTkdYX0VSUk9SICAgICAgICAgICAgIHRoZXJlIGlzIGVycm9yCisgICAgICAgICAqICAgIE5HWF9PSyAgICAgICAgICAgICAgICB0aGUgdG9rZW4gdGVybWluYXRlZCBieSAiOyIgd2FzIGZvdW5kCisgICAgICAgICAqICAgIE5HWF9DT05GX0JMT0NLX1NUQVJUICB0aGUgdG9rZW4gdGVybWluYXRlZCBieSAieyIgd2FzIGZvdW5kCisgICAgICAgICAqICAgIE5HWF9DT05GX0JMT0NLX0RPTkUgICB0aGUgIn0iIHdhcyBmb3VuZAorICAgICAgICAgKiAgICBOR1hfQ09ORl9GSUxFX0RPTkUgICAgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBkb25lCiAgICAgICAgICAqLwogCiAjaWYgMApAQCAtMTE1LDEzICsxMTksMTYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHJjICE9IE5HWF9PSykgeworICAgICAgICBpZiAocmMgIT0gTkdYX09LICYmIHJjICE9IE5HWF9DT05GX0JMT0NLX1NUQVJUKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChjZi0+aGFuZGxlcikgewogCi0gICAgICAgICAgICAvKiBjdXN0b20gaGFuZGxlciwgaS5lLiB1c2VkIGluIGh0dHAgInR5cGVzIHsgLi4uIH0iIGRpcmVjdGl2ZSAqLworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRoZSBjdXN0b20gaGFuZGxlciwgaS5lLiwgdGhhdCBpcyB1c2VkIGluIHRoZSBodHRwJ3MKKyAgICAgICAgICAgICAqICJ0eXBlcyB7IC4uLiB9IiBkaXJlY3RpdmUKKyAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBydiA9ICgqY2YtPmhhbmRsZXIpKGNmLCBOVUxMLCBjZi0+aGFuZGxlcl9jb25mKTsKICAgICAgICAgICAgIGlmIChydiA9PSBOR1hfQ09ORl9PSykgewpAQCAtMTgyLDYgKzE4OSwzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgICBpZiAoIShjbWQtPnR5cGUgJiBOR1hfQ09ORl9CTE9DSykgJiYgcmMgIT0gTkdYX09LKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RpdmUgXCIlc1wiIGluICVzOiVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIG5vdCB0ZXJtaW5hdGVkIGJ5IFwiO1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmICgoY21kLT50eXBlICYgTkdYX0NPTkZfQkxPQ0spCisgICAgICAgICAgICAgICAgICAgICAgICAmJiByYyAhPSBOR1hfQ09ORl9CTE9DS19TVEFSVCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0aXZlIFwiJXNcIiBpbiAlczolZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMgbm90IHRoZSBvcGVuaW5nIFwie1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIC8qIGlzIHRoZSBkaXJlY3RpdmUncyBhcmd1bWVudCBjb3VudCByaWdodCA/ICovCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZC0+dHlwZSAmIE5HWF9DT05GX0FOWSkgewpAQCAtMzk2LDEwICs0MjgsMTQgQEAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGNoID09ICc7JyB8fCBjaCA9PSAneycpIHsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnOycpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY2ggPT0gJ3snKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0JMT0NLX1NUQVJUOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkICclYycgaW4gJXM6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaCwgY2YtPmNvbmZfZmlsZS0+ZmlsZS5uYW1lLmRhdGEsCkBAIC00MjcsNiArNDYzLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd7JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfQkxPQ0tfU1RBUlQ7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKIAogICAgICAgICAgICAgY2FzZSAnfSc6CkBAIC01MzgsMTAgKzU3OCwxNCBAQAogbmd4X2xvZ19kZWJ1ZyhjZi0+bG9nLCAiRk9VTkQgJWQ6JyVzJyIgXyB3b3JkLT5sZW4gXyB3b3JkLT5kYXRhKTsKICNlbmRpZgogCi0gICAgICAgICAgICAgICAgaWYgKGNoID09ICc7JyB8fCBjaCA9PSAneycpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgICAgICAgICAgfQogCisgICAgICAgICAgICAgICAgaWYgKGNoID09ICd7JykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfQkxPQ0tfU1RBUlQ7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm91bmQgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NzUsNiArNjE5LDE4IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCisjaWYgKE5HWF9XSU4zMikKKworICAgIGlmIChuYW1lLT5sZW4gPiAyCisgICAgICAgICYmIG5hbWUtPmRhdGFbMV0gPT0gJzonCisgICAgICAgICYmICgobmFtZS0+ZGF0YVswXSA+PSAnYScgJiYgbmFtZS0+ZGF0YVswXSA8PSAneicpCisgICAgICAgICAgICAgfHwgKG5hbWUtPmRhdGFbMF0gPj0gJ0EnICYmIG5hbWUtPmRhdGFbMF0gPD0gJ1onKSkpCisgICAgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworI2VuZGlmCisKICAgICBvbGQgPSAqbmFtZTsKIAogICAgIG5hbWUtPmxlbiA9IGN5Y2xlLT5yb290LmxlbiArIG9sZC5sZW47CkBAIC02NjQsMjAgKzcyMCwyMiBAQAogdm9pZCBuZ3hfY29uZl9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2NvbmZfdCAqY2YsIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmbXQsIC4uLikKIHsKLSAgICBpbnQgICAgICBsZW47Ci0gICAgY2hhciAgICAgZXJyc3RyW05HWF9NQVhfQ09ORl9FUlJTVFJdOworICAgIHVfY2hhciAgIGVycnN0cltOR1hfTUFYX0NPTkZfRVJSU1RSXSwgKmJ1ZiwgKmxhc3Q7CiAgICAgdmFfbGlzdCAgYXJnczsKIAorICAgIGxhc3QgPSBlcnJzdHIgKyBOR1hfTUFYX0NPTkZfRVJSU1RSOworCiAgICAgdmFfc3RhcnQoYXJncywgZm10KTsKLSAgICBsZW4gPSBuZ3hfdnNucHJpbnRmKGVycnN0ciwgc2l6ZW9mKGVycnN0cikgLSAxLCBmbXQsIGFyZ3MpOworICAgIGJ1ZiA9IG5neF92c25wcmludGYoZXJyc3RyLCBsYXN0IC0gZXJyc3RyLCBmbXQsIGFyZ3MpOwogICAgIHZhX2VuZChhcmdzKTsKIAorICAgICpidWYgPSAnXDAnOworCiAgICAgaWYgKGVycikgewotICAgICAgICBsZW4gKz0gbmd4X3NucHJpbnRmKGVycnN0ciArIGxlbiwgc2l6ZW9mKGVycnN0cikgLSBsZW4gLSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKCVkOiAiLCBlcnIpOwotICAgICAgICBsZW4gKz0gbmd4X3N0cmVycm9yX3IoZXJyLCBlcnJzdHIgKyBsZW4sIHNpemVvZihlcnJzdHIpIC0gbGVuIC0gMSk7Ci0gICAgICAgIGVycnN0cltsZW4rK10gPSAnKSc7Ci0gICAgICAgIGVycnN0cltsZW5dID0gJ1wwJzsKKyAgICAgICAgYnVmID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGFzdCAtIGJ1ZiAtIDEsICIgKCVkOiAiLCBlcnIpOworICAgICAgICBidWYgPSBuZ3hfc3RyZXJyb3JfcihlcnIsIGJ1ZiwgbGFzdCAtIGJ1ZiAtIDEpOworICAgICAgICAqYnVmKysgPSAnKSc7CisgICAgICAgICpidWYgPSAnXDAnOwogICAgIH0KIAogICAgIG5neF9sb2dfZXJyb3IobGV2ZWwsIGNmLT5sb2csIDAsICIlcyBpbiAlczolZCIsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmggYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKaW5kZXggM2EzZGI1Mi4uMGU5NDA1NiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaApAQCAtNTksOCArNTksOSBAQAogI2RlZmluZSBOR1hfQ09ORl9PSyAgICAgICAgICBOVUxMCiAjZGVmaW5lIE5HWF9DT05GX0VSUk9SICAgICAgIChjaGFyICopIC0xCiAKLSNkZWZpbmUgTkdYX0NPTkZfQkxPQ0tfRE9ORSAgMQotI2RlZmluZSBOR1hfQ09ORl9GSUxFX0RPTkUgICAyCisjZGVmaW5lIE5HWF9DT05GX0JMT0NLX1NUQVJUIDEKKyNkZWZpbmUgTkdYX0NPTkZfQkxPQ0tfRE9ORSAgMgorI2RlZmluZSBOR1hfQ09ORl9GSUxFX0RPTkUgICAzCiAKICNkZWZpbmUgTkdYX01PRFVMRSAgICAgICAgICAgMCwgMAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggMzU5MGZhZS4uOWZhZjAwYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtMzksNyArMzksNyBAQAogI2VuZGlmCiAKIAotI2lmICEoV0lOMzIpCisjaWYgIShOR1hfV0lOMzIpCiAKICNkZWZpbmUgbmd4X3NpZ25hbF9oZWxwZXIobikgICAgIFNJRyMjbgogI2RlZmluZSBuZ3hfc2lnbmFsX3ZhbHVlKG4pICAgICAgbmd4X3NpZ25hbF9oZWxwZXIobikKQEAgLTcyLDggKzcyLDYgQEAKIHR5cGVkZWYgdV9pbnQgICAgICAgICAgICAgIG5neF91aW50X3Q7CiB0eXBlZGVmIGludCAgICAgICAgICAgICAgICBuZ3hfZmxhZ190OwogI2RlZmluZSBOR1hfSU5UX1RfTEVOICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQotI2RlZmluZSBOR1hfSU5UX1RfRk1UICAgICAgImQiCi0jZGVmaW5lIE5HWF9VSU5UX1RfRk1UICAgICAidSIKIAogI2Vsc2UKIApAQCAtODEsOCArNzksNiBAQAogdHlwZWRlZiB1X2xvbmcgICAgICAgICAgICAgbmd4X3VpbnRfdDsKIHR5cGVkZWYgbG9uZyAgICAgICAgICAgICAgIG5neF9mbGFnX3Q7CiAjZGVmaW5lIE5HWF9JTlRfVF9MRU4gICAgICBzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxCi0jZGVmaW5lIE5HWF9JTlRfVF9GTVQgICAgICAibGxkIgotI2RlZmluZSBOR1hfVUlOVF9UX0ZNVCAgICAgImxsdSIKIAogI2VuZGlmCiAKQEAgLTEzMSw1ICsxMjcsMTIgQEAKICNkZWZpbmUgTkdYX01BWEhPU1ROQU1FTEVOIE1BWEhPU1ROQU1FTEVOCiAqLwogCisjaWYgKChfX0dOVV9fID09IDIpICYmIChfX0dOVUNfTUlOT1JfXyA8IDgpKQorI2RlZmluZSBOR1hfTUFYX1VJTlQzMl9WQUxVRSAgMHhmZmZmZmZmZkxMCisjZWxzZQorI2RlZmluZSBOR1hfTUFYX1VJTlQzMl9WQUxVRSAgMHhmZmZmZmZmZgorI2VuZGlmCisKKwogCiAjZW5kaWYgLyogX05HWF9DT05GSUdfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IDE5ZjU2MjkuLjA2ZmQ4NWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtMzAsMjggKzMwLDI3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotI2lmIChIQVZFX1NJTl9MRU4pCi0gICAgYWRkcl9pbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCiAgICAgYWRkcl9pbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyID0gYWRkcjsKICAgICBhZGRyX2luLT5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOwogCi0gICAgaWYgKCEobHMtPmFkZHJfdGV4dC5kYXRhID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgSU5FVF9BRERSU1RSTEVOICsgNikpKSB7CisKKyAgICBscy0+YWRkcl90ZXh0LmRhdGEgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVF9BRERSU1RSTEVOIC0gMSArIHNpemVvZigiOjY1NTM1IikgLSAxKTsKKyAgICBpZiAobHMtPmFkZHJfdGV4dC5kYXRhID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgbGVuID0gbmd4X2luZXRfbnRvcChBRl9JTkVULCAmYWRkciwgbHMtPmFkZHJfdGV4dC5kYXRhLCBJTkVUX0FERFJTVFJMRU4pOwotICAgIGxzLT5hZGRyX3RleHQubGVuID0gbmd4X3NucHJpbnRmKChjaGFyICopIGxzLT5hZGRyX3RleHQuZGF0YSArIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LCAiOiVkIiwgcG9ydCk7CisKKyAgICBscy0+YWRkcl90ZXh0LmxlbiA9IG5neF9zcHJpbnRmKGxzLT5hZGRyX3RleHQuZGF0YSArIGxlbiwgIjolZCIsIHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAtIGxzLT5hZGRyX3RleHQuZGF0YTsKKwogCiAgICAgbHMtPmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CiAgICAgbHMtPmZhbWlseSA9IEFGX0lORVQ7CiAgICAgbHMtPnR5cGUgPSBTT0NLX1NUUkVBTTsKICAgICBscy0+cHJvdG9jb2wgPSBJUFBST1RPX0lQOwotI2lmIChXSU4zMikKLSAgICBscy0+ZmxhZ3MgPSBXU0FfRkxBR19PVkVSTEFQUEVEOwotI2VuZGlmCiAgICAgbHMtPnNvY2thZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyX2luOwogICAgIGxzLT5zb2NrbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAgbHMtPmFkZHIgPSBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW4sIHNpbl9hZGRyKTsKQEAgLTYzLDYgKzYyLDcgQEAKIAogbmd4X2ludF90IG5neF9zZXRfaW5oZXJpdGVkX3NvY2tldHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQogeworICAgIHNpemVfdCAgICAgICAgICAgICAgIGxlbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICBpOwogICAgIG5neF9saXN0ZW5pbmdfdCAgICAgKmxzOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgKmFkZHJfaW47CkBAIC05NSwyMCArOTUsMjYgQEAKICAgICAgICAgICAgIGxzW2ldLmlnbm9yZSA9IDE7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorCiAgICAgICAgIGxzW2ldLmFkZHJfdGV4dF9tYXhfbGVuID0gSU5FVF9BRERSU1RSTEVOOwogCi0gICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhID0gbmd4X3BhbGxvYyhjeWNsZS0+cG9vbCwgbHNbaV0uYWRkcl90ZXh0X21heF9sZW4pOworCisgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhID0gbmd4X3BhbGxvYyhjeWNsZS0+cG9vbCwgSU5FVF9BRERSU1RSTEVOIC0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2l6ZW9mKCI6NjU1MzUiKSAtIDEpOwogICAgICAgICBpZiAobHNbaV0uYWRkcl90ZXh0LmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCiAgICAgICAgIGxzW2ldLmZhbWlseSA9IGFkZHJfaW4tPnNpbl9mYW1pbHk7Ci0gICAgICAgIGxzW2ldLmFkZHJfdGV4dC5sZW4gPSBuZ3hfc29ja19udG9wKGxzW2ldLmZhbWlseSwgbHNbaV0uc29ja2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5hZGRyX3RleHRfbWF4X2xlbik7Ci0gICAgICAgIGlmIChsc1tpXS5hZGRyX3RleHQubGVuID09IDApIHsKKyAgICAgICAgbGVuID0gbmd4X3NvY2tfbnRvcChsc1tpXS5mYW1pbHksIGxzW2ldLnNvY2thZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhLCBJTkVUX0FERFJTVFJMRU4pOworICAgICAgICBpZiAobGVuID09IDApIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KKworICAgICAgICBsc1tpXS5hZGRyX3RleHQubGVuID0gbmd4X3NwcmludGYobHNbaV0uYWRkcl90ZXh0LmRhdGEgKyBsZW4sICI6JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG50b2hzKGFkZHJfaW4tPnNpbl9wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gbHNbaV0uYWRkcl90ZXh0LmRhdGE7CiAgICAgfQogCiAgICAgcmV0dXJuIE5HWF9PSzsKQEAgLTE1NywxNiArMTYzLDE1IEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHMgPSBuZ3hfc29ja2V0KGxzW2ldLmZhbWlseSwgbHNbaV0udHlwZSwgbHNbaV0ucHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5mbGFncyk7CisgICAgICAgICAgICBzID0gbmd4X3NvY2tldChsc1tpXS5mYW1pbHksIGxzW2ldLnR5cGUsIGxzW2ldLnByb3RvY29sKTsKIAogICAgICAgICAgICAgaWYgKHMgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbiAiICVzIGZhaWxlZCIsIGxzW2ldLmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbiAiICVWIGZhaWxlZCIsICZsc1tpXS5hZGRyX3RleHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAogICAgICAgICAgICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgpAQCAtMTgyLDggKzE4Nyw4IEBACiAgICAgICAgICAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBTT19SRVVTRUFERFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmcmV1c2VhZGRyLCBzaXplb2YoaW50KSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFNPX1JFVVNFQUREUikgJXMgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFNPX1JFVVNFQUREUikgJVYgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKQEAgLTE5Miw4ICsxOTcsOCBAQAogICAgICAgICAgICAgaWYgKCEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG5neF9ub25ibG9ja2luZyhzKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbm9uYmxvY2tpbmdfbiAiICVzIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWRkcl90ZXh0LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ub25ibG9ja2luZ19uICIgJVYgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMDIsOCArMjA3LDggQEAKICAgICAgICAgICAgIGlmIChsc1tpXS5ub25ibG9ja2luZykgewogICAgICAgICAgICAgICAgIGlmIChuZ3hfbm9uYmxvY2tpbmcocykgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X25vbmJsb2NraW5nX24gIiAlcyBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbm9uYmxvY2tpbmdfbiAiICVWIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjEyLDE1ICsyMTcsMTUgQEAKICAgICAgICAgICAgIGlmIChiaW5kKHMsIGxzW2ldLnNvY2thZGRyLCBsc1tpXS5zb2NrbGVuKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIGVyciA9IG5neF9zb2NrZXRfZXJybm87CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdG8gJXMgZmFpbGVkIiwgbHNbaV0uYWRkcl90ZXh0LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmQoKSB0byAlViBmYWlsZWQiLCAmbHNbaV0uYWRkcl90ZXh0KTsKIAogICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTkdYX0VBRERSSU5VU0UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAKICAgICAgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJXMgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5hZGRyX3RleHQuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJVYgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKIAogICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMjgsNyArMjMzLDcgQEAKIAogICAgICAgICAgICAgaWYgKGxpc3RlbihzLCBsc1tpXS5iYWNrbG9nKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpc3RlbigpIHRvICVzIGZhaWxlZCIsIGxzW2ldLmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0ZW4oKSB0byAlViBmYWlsZWQiLCAmbHNbaV0uYWRkcl90ZXh0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCkBAIC0yNzMsNyArMjc4LDcgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgaSsrKSB7CiAgICAgICAgIGZkID0gbHNbaV0uZmQ7CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgLyoKICAgICAgICAgICogV2luc29jayBhc3NpZ25lcyBhIHNvY2tldCBudW1iZXIgZGl2aXNpYmxlIGJ5IDQKICAgICAgICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgpAQCAtMjk2LDggKzMwMSw3IEBACiAKICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQobHNbaV0uZmQpID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiICVzIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJVYgZmFpbGVkIiwgJmxzW2ldLmFkZHJfdGV4dCk7CiAgICAgICAgIH0KIAogICAgICAgICBjeWNsZS0+Y29ubmVjdGlvbnNbZmRdLmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CkBAIC00MDgsNyArNDEyLDcgQEAKICAgICB9CiAKICAgICBpZiAoZXJyID09IE5HWF9FQ09OTlJFU0VUCi0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKICAgICAgICAgfHwgZXJyID09IE5HWF9FUElQRQogI2VuZGlmCiAgICAgICAgIHx8IGVyciA9PSBOR1hfRU5PVENPTk4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IDhlMmJhMzkuLmUyMjU3YWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtMjQsNyArMjQsNiBAQAogICAgIGludCAgICAgICAgICAgICAgIGZhbWlseTsKICAgICBpbnQgICAgICAgICAgICAgICB0eXBlOwogICAgIGludCAgICAgICAgICAgICAgIHByb3RvY29sOwotICAgIGludCAgICAgICAgICAgICAgIGZsYWdzOyAgICAgIC8qIFdpbnNvY2syIGZsYWdzICovCiAKICAgICB2b2lkICAgICAgICAgICAgKCpoYW5kbGVyKShuZ3hfY29ubmVjdGlvbl90ICpjKTsgLyogaGFuZGxlciBvZiBhY2NlcHRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCkBAIC00OCw5ICs0Nyw2IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgaW5oZXJpdGVkOjE7ICAgLyogaW5oZXJpdGVkIGZyb20gcHJldmlvdXMgcHJvY2VzcyAqLwogICAgIHVuc2lnbmVkICAgICAgICAgIG5vbmJsb2NraW5nX2FjY2VwdDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgIG5vbmJsb2NraW5nOjE7Ci0jaWYgMAotICAgIHVuc2lnbmVkICAgICAgICAgIG92ZXJsYXBwZWQ6MTsgIC8qIFdpbnNvY2syIG92ZXJsYXBwZWQgKi8KLSNlbmRpZgogICAgIHVuc2lnbmVkICAgICAgICAgIHNoYXJlZDoxOyAgICAvKiBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIG9yIHByb2Nlc3NlcyAqLwogI2lmIChIQVZFX0RFRkVSUkVEX0FDQ0VQVCkKICAgICB1bnNpZ25lZCAgICAgICAgICBkZWZlcnJlZF9hY2NlcHQ6MTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5jIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKaW5kZXggYTE0MDJmMS4uODVkOTQ1OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorc3RhdGljIG5neF9pbnRfdCBuZ3hfY21wX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqczEsIHN0cnVjdCBzb2NrYWRkciAqczIpOwogc3RhdGljIHZvaWQgbmd4X2NsZWFuX29sZF9jeWNsZXMobmd4X2V2ZW50X3QgKmV2KTsKIAogCkBAIC0xOTUsNyArMTk2LDcgQEAKICAgICBmYWlsZWQgPSAwOwogCiAKLSNpZiAhKFdJTjMyKQorI2lmICEoTkdYX1dJTjMyKQogICAgIGlmIChuZ3hfY3JlYXRlX3BpZGZpbGUoY3ljbGUsIG9sZF9jeWNsZSkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIGZhaWxlZCA9IDE7CiAgICAgfQpAQCAtMjA0LDYgKzIwNSw4IEBACiAKICAgICBpZiAoIWZhaWxlZCkgewogCisgICAgICAgIC8qIG9wZW4gdGhlIG5ldyBmaWxlcyAqLworCiAgICAgICAgIHBhcnQgPSAmY3ljbGUtPm9wZW5fZmlsZXMucGFydDsKICAgICAgICAgZmlsZSA9IHBhcnQtPmVsdHM7CiAKQEAgLTIyNyw3ICsyMzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU58TkdYX0ZJTEVfQVBQRU5EKTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibG9nOiAlMFggJWQgXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2c6ICVwICVkIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZVtpXSwgZmlsZVtpXS5mZCwgZmlsZVtpXS5uYW1lLmRhdGEpOwogCiAgICAgICAgICAgICBpZiAoZmlsZVtpXS5mZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7CkBAIC0yMzgsNyArMjQxLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogICAgICAgICAgICAgaWYgKG5neF9maWxlX2FwcGVuZF9tb2RlKGZpbGVbaV0uZmQpID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9hcHBlbmRfbW9kZV9uICIgXCIlc1wiIGZhaWxlZCIsCkBAIC0yNjYsNiArMjY5LDkgQEAKICAgICB9CiAKICAgICBpZiAoIWZhaWxlZCkgeworCisgICAgICAgIC8qIGhhbmRsZSB0aGUgbGlzdGVuaW5nIHNvY2tldHMgKi8KKwogICAgICAgICBpZiAob2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHMpIHsKICAgICAgICAgICAgIGxzID0gb2xkX2N5Y2xlLT5saXN0ZW5pbmcuZWx0czsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBvbGRfY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgaSsrKSB7CkBAIC0yNzQsMTYgKzI4MCwxNyBAQAogCiAgICAgICAgICAgICBubHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CiAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgbisrKSB7CisKICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb2xkX2N5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uaWdub3JlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfbWVtY21wKG5sc1tuXS5zb2NrYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uc29ja2FkZHIsIGxzW2ldLnNvY2tsZW4pID09IDApCisgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfY21wX3NvY2thZGRyKG5sc1tuXS5zb2NrYWRkciwgbHNbaV0uc29ja2FkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfT0spCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZkID0gbHNbaV0uZmQ7Ci0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogV2luc29jayBhc3NpZ25lcyBhIHNvY2tldCBudW1iZXIgZGl2aXNpYmxlIGJ5IDQgc28KICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIGZpbmQgYSBjb25uZWN0aW9uIHdlIGRpdmlkZSBhIHNvY2tldCBudW1iZXIgYnkgNC4KQEAgLTI5NCwxMCArMzAxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmQgPj0gKG5neF9zb2NrZXRfdCkgY3ljbGUtPmNvbm5lY3Rpb25fbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCBjb25uZWN0aW9ucyBpcyBub3QgZW5vdWdoIHRvIGhvbGQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBvcGVuIGxpc3RlbmluZyBzb2NrZXQgb24gJXMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW4gb3BlbiBsaXN0ZW5pbmcgc29ja2V0IG9uICVWLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIGF0IGxlYXN0ICVkIGNvbm5lY3Rpb25zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+Y29ubmVjdGlvbl9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmFkZHJfdGV4dC5kYXRhLCBmZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCwgZmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zNzIsOCArMzc5LDggQEAKIAogICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQobHNbaV0uZmQpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlcyBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWRkcl90ZXh0LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJVYgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTM4NCwxMiArMzkxLDEyIEBACiAKICAgICAvKiBjb21taXQgdGhlIG5ldyBjeWNsZSBjb25maWd1cmF0aW9uICovCiAKLSNpZiAhKFdJTjMyKQorI2lmICEoTkdYX1dJTjMyKQogCiAgICAgaWYgKCFuZ3hfdGVzdF9jb25maWcgJiYgY3ljbGUtPmxvZy0+ZmlsZS0+ZmQgIT0gU1RERVJSX0ZJTEVOTykgewogCiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfQ09SRSwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiZHVwMjogJTBYICVkIFwiJXNcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICJkdXAyOiAlcCAlZCBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nLT5maWxlLAogICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nLT5maWxlLT5mZCwgY3ljbGUtPmxvZy0+ZmlsZS0+bmFtZS5kYXRhKTsKIApAQCAtNDI2LDggKzQzMyw4IEBACiAKICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQobHNbaV0uZmQpID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJXMgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWRkcl90ZXh0LmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlViBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTEyLDEzICs1MTksMzggQEAKIH0KIAogCi0jaWYgIShXSU4zMikKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2NtcF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnMxLCBzdHJ1Y3Qgc29ja2FkZHIgKnMyKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgKnNpbjEsICpzaW4yOworCisgICAgLyogQUZfSU5FVCBvbmx5ICovCisKKyAgICBpZiAoczEtPnNhX2ZhbWlseSAhPSBBRl9JTkVUIHx8IHMyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgeworICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworICAgIH0KKworICAgIHNpbjEgPSAoc3RydWN0IHNvY2thZGRyX2luICopIHMxOworICAgIHNpbjIgPSAoc3RydWN0IHNvY2thZGRyX2luICopIHMyOworCisgICAgaWYgKHNpbjEtPnNpbl9hZGRyLnNfYWRkciAhPSBzaW4yLT5zaW5fYWRkci5zX2FkZHIpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICB9CisKKyAgICBpZiAoc2luMS0+c2luX3BvcnQgIT0gc2luMi0+c2luX3BvcnQpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKKyNpZiAhKE5HWF9XSU4zMikKIAogbmd4X2ludF90IG5neF9jcmVhdGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9jeWNsZV90ICpvbGRfY3ljbGUpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgdHJ1bmM7CiAgICAgc2l6ZV90ICAgICAgICAgICAgbGVuOwotICAgIHVfY2hhciAgICAgICAgICAgKm5hbWUsIHBpZFtOR1hfSU5UNjRfTEVOICsgMV07CisgICAgdV9jaGFyICAgICAgICAgICAqbmFtZSwgcGlkW05HWF9JTlQ2NF9MRU5dOwogICAgIG5neF9maWxlX3QgICAgICAgIGZpbGU7CiAgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmLCAqb2xkX2NjZjsKIApAQCAtNTQ4LDggKzU4MCw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBsZW4gPSBuZ3hfc25wcmludGYoKGNoYXIgKikgcGlkLCBOR1hfSU5UNjRfTEVOICsgMSwgUElEX1RfRk1ULCBuZ3hfcGlkKTsKLQogICAgIG5neF9tZW16ZXJvKCZmaWxlLCBzaXplb2Yobmd4X2ZpbGVfdCkpOwogICAgIGZpbGUubmFtZSA9IChuZ3hfaW5oZXJpdGVkICYmIGdldHBwaWQoKSA+IDEpID8gY2NmLT5uZXdwaWQgOiBjY2YtPnBpZDsKICAgICBmaWxlLmxvZyA9IGN5Y2xlLT5sb2c7CkBAIC01NjYsNiArNTk2LDggQEAKICAgICB9CiAKICAgICBpZiAoIW5neF90ZXN0X2NvbmZpZykgeworICAgICAgICBsZW4gPSBuZ3hfc3ByaW50ZihwaWQsICIlUCIsIG5neF9waWQpIC0gcGlkOworCiAgICAgICAgIGlmIChuZ3hfd3JpdGVfZmlsZSgmZmlsZSwgcGlkLCBsZW4sIDApID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQpAQCAtNjE1LDcgKzY0Nyw3IEBACiAgICAgbmd4X3VpbnRfdCAgICAgICAgaTsKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICpwYXJ0OwogICAgIG5neF9vcGVuX2ZpbGVfdCAgKmZpbGU7Ci0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKICAgICBuZ3hfZmlsZV9pbmZvX3QgICBmaTsKICNlbmRpZgogCkBAIC02NDksNyArNjgxLDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgaWYgKG5neF9maWxlX2FwcGVuZF9tb2RlKGZkKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9hcHBlbmRfbW9kZV9uICIgXCIlc1wiIGZhaWxlZCIsCkBAIC03MzAsNyArNzYyLDcgQEAKICAgICAgICAgZmlsZVtpXS5mZCA9IGZkOwogICAgIH0KIAotI2lmICEoV0lOMzIpCisjaWYgIShOR1hfV0lOMzIpCiAKICAgICBpZiAoY3ljbGUtPmxvZy0+ZmlsZS0+ZmQgIT0gU1RERVJSX0ZJTEVOTykgewogICAgICAgICBpZiAoZHVwMihjeWNsZS0+bG9nLT5maWxlLT5mZCwgU1RERVJSX0ZJTEVOTykgPT0gLTEpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5oIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKaW5kZXggNDViN2IyMy4uMmJhZjgyOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKQEAgLTEyLDYgKzEyLDEwIEBACiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KIAogCisjZGVmaW5lIE5HWF9ERUJVR19QT0lOVFNfU1RPUCAgIDEKKyNkZWZpbmUgTkdYX0RFQlVHX1BPSU5UU19BQk9SVCAgMgorCisKIHN0cnVjdCBuZ3hfY3ljbGVfcyB7CiAgICAgdm9pZCAgICAgICAgICAgKioqKmNvbmZfY3R4OwogICAgIG5neF9wb29sX3QgICAgICAgICpwb29sOwpAQCAtNDAsNiArNDQsNyBAQAogICAgICBuZ3hfZmxhZ190ICBtYXN0ZXI7CiAKICAgICAgbmd4X2ludF90ICAgd29ya2VyX3Byb2Nlc3NlczsKKyAgICAgbmd4X2ludF90ICAgZGVidWdfcG9pbnRzOwogCiAgICAgIG5neF91aWRfdCAgIHVzZXI7CiAgICAgIG5neF9naWRfdCAgIGdyb3VwOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuYyBiL3NyYy9jb3JlL25neF9maWxlLmMKaW5kZXggYzdlZTUxMy4uOGUxZWRiZCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5jCkBAIC01NSw5ICs1NSw4IEBACiAgICAgbnVtID0gbmd4X25leHRfdGVtcF9udW1iZXIoMCk7CiAKICAgICBmb3IgKCA7OyApIHsKLSAgICAgICAgbmd4X3NucHJpbnRmKChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbGUtPm5hbWUuZGF0YSArIHBhdGgtPm5hbWUubGVuICsgMSArIHBhdGgtPmxlbiksCi0gICAgICAgICAgICAgICAgICAgICAxMSwgIiUwMTB1IiwgbnVtKTsKKyAgICAgICAgbmd4X3NwcmludGYoZmlsZS0+bmFtZS5kYXRhICsgcGF0aC0+bmFtZS5sZW4gKyAxICsgcGF0aC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAiJTAxMHVkJVoiLCBudW0pOwogCiAgICAgICAgIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKGZpbGUsIHBhdGgpOwogCkBAIC04Myw3ICs4Miw3IEBACiAKICAgICAgICAgaWYgKChwYXRoLT5sZXZlbFswXSA9PSAwKQogICAgICAgICAgICAgfHwgKGVyciAhPSBOR1hfRU5PRU5UCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgICAgICAgICAgJiYgZXJyICE9IE5HWF9FTk9URElSCiAjZW5kaWYKICAgICAgICAgKSkgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2luZXQuYyBiL3NyYy9jb3JlL25neF9pbmV0LmMKaW5kZXggYmY4YTc4OC4uNWNhYmI0OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2luZXQuYworKysgYi9zcmMvY29yZS9uZ3hfaW5ldC5jCkBAIC05LDYgKzksMTcgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKKy8qCisgKiBuZ3hfc29ja19udG9wKCkgYW5kIG5neF9pbmV0X250b3AoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMKKyAqICJuZ3hfc3ByaW50Zih0ZXh0LCAiJXVkLiV1ZC4ldWQuJXVkIiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSkiLAorICogaG93ZXZlciwgdGhleSB3ZXJlIGltcGxlbWVudGVkIGxvbmcgYmVmb3JlIHRoZSBuZ3hfc3ByaW50ZigpIGFwcGVhcmVkCisgKiBhbmQgdGhleSBhcmUgZmFzdGVyIGJ5IDEuNS0yLjUgdGltZXMsIHNvIGl0IGlzIHdvcnRoIHRvIGtlZXAgdGhlbS4KKyAqCisgKiBCeSB0aGUgd2F5LCB0aGUgaW1wbGVtZW50YXRpb24gdXNpbmcgbmd4X3NwcmludGYoKSBpcyBmYXN0ZXIgYnkgMi41LTMgdGltZXMKKyAqIHRoYW4gdXNpbmcgRnJlZUJTRCBsaWJjJ3Mgc25ycGludGYoKS4KKyAqLworCisKIG5neF9pbmxpbmUgc3RhdGljIHNpemVfdCBuZ3hfc3ByaW50X3VjaGFyKHVfY2hhciAqdGV4dCwgdV9jaGFyIGMsIHNpemVfdCBsZW4pCiB7CiAgICAgc2l6ZV90ICAgICAgbjsKQEAgLTEwNSwxNSArMTE2LDggQEAKICAgICB0ZXh0W25dID0gJ1wwJzsKIAogICAgIHJldHVybiBuOwotCi0jaWYgMAotICAgIHJldHVybiBuZ3hfc25wcmludGYoKGNoYXIgKikgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA+IElORVRfQUREUlNUUkxFTiA/IElORVRfQUREUlNUUkxFTiA6IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIldS4ldS4ldS4ldSIsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOwotI2VuZGlmCiB9CiAKLQogc2l6ZV90IG5neF9pbmV0X250b3AoaW50IGZhbWlseSwgdm9pZCAqYWRkciwgdV9jaGFyICp0ZXh0LCBzaXplX3QgbGVuKQogewogICAgIHVfY2hhciAgICAgICpwOwpAQCAtMTYzLDEyICsxNjcsNiBAQAogICAgIHRleHRbbl0gPSAnXDAnOwogCiAgICAgcmV0dXJuIG47Ci0KLSNpZiAwCi0gICAgcmV0dXJuIG5neF9zbnByaW50ZigoY2hhciAqKSB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuID4gSU5FVF9BRERSU1RSTEVOID8gSU5FVF9BRERSU1RSTEVOIDogbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIiV1LiV1LiV1LiV1IiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7Ci0jZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfbG9nLmMgYi9zcmMvY29yZS9uZ3hfbG9nLmMKaW5kZXggZjFjMGU5Ny4uNTIxYmE3YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2xvZy5jCisrKyBiL3NyYy9jb3JlL25neF9sb2cuYwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLXN0YXRpYyB2b2lkIG5neF9sb2dfd3JpdGUobmd4X2xvZ190ICpsb2csIGNoYXIgKmVycnN0ciwgc2l6ZV90IGxlbik7CitzdGF0aWMgdm9pZCBuZ3hfbG9nX3dyaXRlKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmVycnN0ciwgc2l6ZV90IGxlbik7CiBzdGF0aWMgY2hhciAqbmd4X3NldF9lcnJvcl9sb2cobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiAKIApAQCAtMzgsNyArMzgsNyBAQAogICAgIG5neF9lcnJsb2dfY29tbWFuZHMsICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0NPUkVfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwotICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgY2hpbGQgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KIH07CiAKIApAQCAtNjUsMTIxICs2NSwxMDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogI2VuZGlmCiB7Ci0gICAgY2hhciAgICAgIGVycnN0cltNQVhfRVJST1JfU1RSXTsKLSAgICBzaXplX3QgICAgbGVuLCBtYXg7CiAjaWYgKE5HWF9IQVZFX1ZBUklBRElDX01BQ1JPUykKLSAgICB2YV9saXN0ICAgYXJnczsKKyAgICB2YV9saXN0ICBhcmdzOwogI2VuZGlmCisgICAgdV9jaGFyICAgZXJyc3RyW05HWF9NQVhfRVJST1JfU1RSXSwgKnAsICpsYXN0OwogCiAgICAgaWYgKGxvZy0+ZmlsZS0+ZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgewogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbGFzdCA9IGVycnN0ciArIE5HWF9NQVhfRVJST1JfU1RSOworCiAgICAgbmd4X21lbWNweShlcnJzdHIsIG5neF9jYWNoZWRfZXJyX2xvZ190aW1lLmRhdGEsCiAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2Vycl9sb2dfdGltZS5sZW4pOwogCi0jaWYgKFdJTjMyKQotICAgIG1heCA9IE1BWF9FUlJPUl9TVFIgLSAyOwotI2Vsc2UKLSAgICBtYXggPSBNQVhfRVJST1JfU1RSIC0gMTsKLSNlbmRpZgorICAgIHAgPSBlcnJzdHIgKyBuZ3hfY2FjaGVkX2Vycl9sb2dfdGltZS5sZW47CiAKLSAgICBsZW4gPSBuZ3hfY2FjaGVkX2Vycl9sb2dfdGltZS5sZW47Ci0KLSAgICBsZW4gKz0gbmd4X3NucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLCAiIFslc10gIiwgZXJyX2xldmVsc1tsZXZlbF0pOworICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiIFslc10gIiwgZXJyX2xldmVsc1tsZXZlbF0pOwogCiAgICAgLyogcGlkI3RpZCAqLwotICAgIGxlbiArPSBuZ3hfc25wcmludGYoZXJyc3RyICsgbGVuLCBtYXggLSBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBQSURfVF9GTVQgIiMiIFRJRF9UX0ZNVCAiOiAiLCBuZ3hfbG9nX3BpZCwgbmd4X2xvZ190aWQpOworICAgIHAgPSBuZ3hfc3ByaW50ZihwLCAiJVAjIiBOR1hfVElEX1RfRk1UICI6ICIsIG5neF9sb2dfcGlkLCBuZ3hfbG9nX3RpZCk7CiAKICAgICBpZiAobG9nLT5kYXRhICYmICooaW50ICopIGxvZy0+ZGF0YSAhPSAtMSkgewotICAgICAgICBsZW4gKz0gbmd4X3NucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqJXUgIiwgKih1X2ludCAqKSBsb2ctPmRhdGEpOworICAgICAgICBwID0gbmd4X3NwcmludGYocCwgIioldWQgIiwgKih1X2ludCAqKSBsb2ctPmRhdGEpOwogICAgIH0KIAogI2lmIChOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MpCiAKICAgICB2YV9zdGFydChhcmdzLCBmbXQpOwotICAgIGxlbiArPSBuZ3hfdnNucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLCBmbXQsIGFyZ3MpOworICAgIHAgPSBuZ3hfdnNucHJpbnRmKHAsIGxhc3QgLSBwLCBmbXQsIGFyZ3MpOwogICAgIHZhX2VuZChhcmdzKTsKIAogI2Vsc2UKIAotICAgIGxlbiArPSBuZ3hfdnNucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLCBmbXQsIGFyZ3MpOworICAgIHAgPSBuZ3hfdnNucHJpbnRmKHAsIGxhc3QgLSBwLCBmbXQsIGFyZ3MpOwogCiAjZW5kaWYKIAogICAgIGlmIChlcnIpIHsKIAotICAgICAgICBpZiAobGVuID4gbWF4IC0gNTApIHsKKyAgICAgICAgaWYgKHAgPiBsYXN0IC0gNTApIHsKIAogICAgICAgICAgICAgLyogbGVhdmUgYSBzcGFjZSBmb3IgYW4gZXJyb3IgY29kZSAqLwogCi0gICAgICAgICAgICBsZW4gPSBtYXggLSA1MDsKLSAgICAgICAgICAgIGVycnN0cltsZW4rK10gPSAnLic7Ci0gICAgICAgICAgICBlcnJzdHJbbGVuKytdID0gJy4nOwotICAgICAgICAgICAgZXJyc3RyW2xlbisrXSA9ICcuJzsKKyAgICAgICAgICAgIHAgPSBsYXN0IC0gNTA7CisgICAgICAgICAgICAqcCsrID0gJy4nOworICAgICAgICAgICAgKnArKyA9ICcuJzsKKyAgICAgICAgICAgICpwKysgPSAnLic7CiAgICAgICAgIH0KIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQorCiAgICAgICAgIGlmICgodW5zaWduZWQpIGVyciA+PSAweDgwMDAwMDAwKSB7Ci0gICAgICAgICAgICBsZW4gKz0gbmd4X3NucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLCAiICglWDogIiwgZXJyKTsKKyAgICAgICAgICAgIHAgPSBuZ3hfc25wcmludGYocCwgbGFzdCAtIHAsICIgKCVYZDogIiwgZXJyKTsKKwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGVuICs9IG5neF9zbnByaW50ZihlcnJzdHIgKyBsZW4sIG1heCAtIGxlbiwgIiAoJWQ6ICIsIGVycik7CisgICAgICAgICAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxhc3QgLSBwLCAiICglZDogIiwgZXJyKTsKICAgICAgICAgfQorCiAjZWxzZQotICAgICAgICBsZW4gKz0gbmd4X3NucHJpbnRmKGVycnN0ciArIGxlbiwgbWF4IC0gbGVuLCAiICglZDogIiwgZXJyKTsKKworICAgICAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxhc3QgLSBwLCAiICglZDogIiwgZXJyKTsKKwogI2VuZGlmCiAKLSAgICAgICAgaWYgKGxlbiA+PSBtYXgpIHsKLSAgICAgICAgICAgIG5neF9sb2dfd3JpdGUobG9nLCBlcnJzdHIsIG1heCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgcCA9IG5neF9zdHJlcnJvcl9yKGVyciwgcCwgbGFzdCAtIHApOwogCi0gICAgICAgIGxlbiArPSBuZ3hfc3RyZXJyb3JfcihlcnIsIGVycnN0ciArIGxlbiwgbWF4IC0gbGVuKTsKLQotICAgICAgICBpZiAobGVuID49IG1heCkgewotICAgICAgICAgICAgbmd4X2xvZ193cml0ZShsb2csIGVycnN0ciwgbWF4KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGVycnN0cltsZW4rK10gPSAnKSc7Ci0KLSAgICAgICAgaWYgKGxlbiA+PSBtYXgpIHsKLSAgICAgICAgICAgIG5neF9sb2dfd3JpdGUobG9nLCBlcnJzdHIsIG1heCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsZW4gPj0gbWF4KSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX3dyaXRlKGxvZywgZXJyc3RyLCBtYXgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAocCA8IGxhc3QpIHsKKyAgICAgICAgICAgICpwKysgPSAnKSc7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobGV2ZWwgIT0gTkdYX0xPR19ERUJVRyAmJiBsb2ctPmhhbmRsZXIpIHsKLSAgICAgICAgbGVuICs9IGxvZy0+aGFuZGxlcihsb2ctPmRhdGEsIGVycnN0ciArIGxlbiwgbWF4IC0gbGVuKTsKLQotICAgICAgICBpZiAobGVuID49IG1heCkgewotICAgICAgICAgICAgbGVuID0gbWF4OwotICAgICAgICB9CisgICAgICAgIHAgPSBsb2ctPmhhbmRsZXIobG9nLT5kYXRhLCBwLCBsYXN0IC0gcCk7CiAgICAgfQogCi0gICAgbmd4X2xvZ193cml0ZShsb2csIGVycnN0ciwgbGVuKTsKKyAgICBuZ3hfbG9nX3dyaXRlKGxvZywgZXJyc3RyLCBwIC0gZXJyc3RyKTsKIH0KIAogCi1zdGF0aWMgdm9pZCBuZ3hfbG9nX3dyaXRlKG5neF9sb2dfdCAqbG9nLCBjaGFyICplcnJzdHIsIHNpemVfdCBsZW4pCitzdGF0aWMgdm9pZCBuZ3hfbG9nX3dyaXRlKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmVycnN0ciwgc2l6ZV90IGxlbikKIHsKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICB1X2xvbmcgIHdyaXR0ZW47CiAKKyAgICBpZiAobGVuID49IE5HWF9NQVhfRVJST1JfU1RSIC0gMSkgeworICAgICAgICBsZW4gPSBOR1hfTUFYX0VSUk9SX1NUUiAtIDI7CisgICAgfQorCiAgICAgZXJyc3RyW2xlbisrXSA9IENSOwogICAgIGVycnN0cltsZW4rK10gPSBMRjsKICAgICBXcml0ZUZpbGUobG9nLT5maWxlLT5mZCwgZXJyc3RyLCBsZW4sICZ3cml0dGVuLCBOVUxMKTsKIAogI2Vsc2UKIAorICAgIGlmIChsZW4gPT0gTkdYX01BWF9FUlJPUl9TVFIpIHsKKyAgICAgICAgbGVuLS07CisgICAgfQorCiAgICAgZXJyc3RyW2xlbisrXSA9IExGOwogICAgIHdyaXRlKGxvZy0+ZmlsZS0+ZmQsIGVycnN0ciwgbGVuKTsKIApAQCAtMTkyLDcgKzE3NSw3IEBACiB2b2lkIG5neF9sb2dfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0gICAgdmFfbGlzdCAgICBhcmdzOworICAgIHZhX2xpc3QgIGFyZ3M7CiAKICAgICBpZiAobG9nLT5sb2dfbGV2ZWwgPj0gbGV2ZWwpIHsKICAgICAgICAgdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTIwNCw0NiArMTg3LDM5IEBACiAKIHZvaWQgbmd4X2xvZ19kZWJ1Z19jb3JlKG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKLSAgICB2YV9saXN0ICAgIGFyZ3M7CisgICAgdmFfbGlzdCAgYXJnczsKIAogICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CiAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgZXJyLCBmbXQsIGFyZ3MpOwogICAgIHZhX2VuZChhcmdzKTsKIH0KIAotCi12b2lkIG5neF9hc3NlcnRfY29yZShuZ3hfbG9nX3QgKmxvZywgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0gICAgdmFfbGlzdCAgICBhcmdzOwotCi0gICAgdmFfc3RhcnQoYXJncywgZm10KTsKLSAgICBuZ3hfbG9nX2Vycm9yX2NvcmUoTkdYX0xPR19BTEVSVCwgbG9nLCAwLCBmbXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLX0KLQogI2VuZGlmCiAKIAotbmd4X2xvZ190ICpuZ3hfbG9nX2luaXRfc3RkZXJyKCkKK25neF9sb2dfdCAqbmd4X2xvZ19pbml0KCkKIHsKLSNpZiAoV0lOMzIpCisgICAgbmd4X2xvZy5maWxlID0gJm5neF9zdGRlcnI7CisgICAgbmd4X2xvZy5sb2dfbGV2ZWwgPSBOR1hfTE9HX05PVElDRTsKIAotICAgIG5neF9zdGRlcnJfZmlsZW5vID0gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpOwotICAgIG5neF9zdGRlcnIuZmQgPSBuZ3hfc3RkZXJyX2ZpbGVubzsKKyNpZiAoTkdYX1dJTjMyKQogCi0gICAgaWYgKG5neF9zdGRlcnJfZmlsZW5vID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKKyAgICBuZ3hfc3RkZXJyLmZkID0gbmd4X29wZW5fZmlsZShOR1hfRVJST1JfTE9HX1BBVEgsIE5HWF9GSUxFX1JEV1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU58TkdYX0ZJTEVfQVBQRU5EKTsKIAotICAgICAgICAvKiBUT0RPOiB3aGVyZSBjYW4gd2UgbG9nIGVycm9yID8gKi8KLQorICAgIGlmIChuZ3hfc3RkZXJyLmZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKKyAgICAgICAgbmd4X21lc3NhZ2VfYm94KCJuZ2lueCIsIE1CX09LLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IG9wZW4gZXJyb3IgbG9nIGZpbGU6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiIiBOR1hfRVJST1JfTE9HX1BBVEggIlwiIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICB9IGVsc2UgaWYgKG5neF9zdGRlcnJfZmlsZW5vID09IE5VTEwpIHsKLQotICAgICAgICAvKiB0aGVyZSBhcmUgbm8gYXNzb2NpYXRlZCBzdGFuZGFyZCBoYW5kbGVzICovCi0KLSAgICAgICAgLyogVE9ETzogd2hlcmUgY2FuIHdlIGNhbiBsb2cgcG9zc2libGUgZXJyb3JzID8gKi8KLQotICAgICAgICBuZ3hfc3RkZXJyLmZkID0gTkdYX0lOVkFMSURfRklMRTsKKyAgICBpZiAobmd4X2ZpbGVfYXBwZW5kX21vZGUobmd4X3N0ZGVyci5mZCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9tZXNzYWdlX2JveCgibmdpbngiLCBNQl9PSywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBvcGVuIGVycm9yIGxvZyBmaWxlOiAiCisgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9hcHBlbmRfbW9kZV9uICIgXCIiIE5HWF9FUlJPUl9MT0dfUEFUSAorICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICNlbHNlCkBAIC0yNTIsNjEgKzIyOCwxMCBAQAogCiAjZW5kaWYKIAotICAgIG5neF9sb2cuZmlsZSA9ICZuZ3hfc3RkZXJyOwotICAgIG5neF9sb2cubG9nX2xldmVsID0gTkdYX0xPR19OT1RJQ0U7Ci0KICAgICByZXR1cm4gJm5neF9sb2c7CiB9CiAKIAotI2lmIDAKLQotbmd4X2ludF90IG5neF9sb2dfaW5pdF9lcnJvcl9sb2coKQotewotICAgIG5neF9mZF90ICBmZDsKLQotI2lmZGVmIE5HWF9FUlJPUl9MT0dfUEFUSAotCi0gICAgZmQgPSBuZ3hfb3Blbl9maWxlKE5HWF9FUlJPUl9MT0dfUEFUSCwgTkdYX0ZJTEVfUkRXUiwKLSAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU58TkdYX0ZJTEVfQVBQRU5EKTsKLQotICAgIGlmIChmZCA9PSBOR1hfSU5WQUxJRF9GSUxFKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgKCZuZ3hfbG9nKSwgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiIiBOR1hfRVJST1JfTE9HX1BBVEggIlwiIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotI2lmIChXSU4zMikKLQotICAgIGlmIChuZ3hfZmlsZV9hcHBlbmRfbW9kZShmZCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgKCZuZ3hfbG9nKSwgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9maWxlX2FwcGVuZF9tb2RlX24gIiBcIiIgTkdYX0VSUk9SX0xPR19QQVRICi0gICAgICAgICAgICAgICAgICAgICAgIlwiIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotI2Vsc2UKLQotICAgIGlmIChkdXAyKGZkLCBTVERFUlJfRklMRU5PKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCAoJm5neF9sb2cpLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgImR1cDIoU1RERVJSKSBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSNlbmRpZgotCi0jZWxzZSAgLyogbm8gTkdYX0VSUk9SX0xPR19QQVRIICovCi0KLSAgICBuZ3hfbG9nLmxvZ19sZXZlbCA9IE5HWF9MT0dfSU5GTzsKLQotI2VuZGlmCi0KLSAgICByZXR1cm4gTkdYX09LOwotfQotCi0jZW5kaWYKLQotCiBuZ3hfbG9nX3QgKm5neF9sb2dfY3JlYXRlX2VycmxvZyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9hcnJheV90ICphcmdzKQogewogICAgIG5neF9sb2dfdCAgKmxvZzsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuaCBiL3NyYy9jb3JlL25neF9sb2cuaAppbmRleCA1ZGRkOGZjLi5jNTRjMTg3IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmgKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5oCkBAIC00MCw3ICs0MCw3IEBACiAjZGVmaW5lIE5HWF9MT0dfREVCVUdfQUxMICAgICAgICAgMHg3ZmZmZmZmMAogCiAKLXR5cGVkZWYgc2l6ZV90ICAoKm5neF9sb2dfaGFuZGxlcl9wdCkgKHZvaWQgKmN0eCwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK3R5cGVkZWYgdV9jaGFyICooKm5neF9sb2dfaGFuZGxlcl9wdCkgKHZvaWQgKmN0eCwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKIHN0cnVjdCBuZ3hfbG9nX3MgewpAQCAtNTAsNyArNTAsOCBAQAogICAgIG5neF9sb2dfaGFuZGxlcl9wdCAgIGhhbmRsZXI7CiB9OwogCi0jZGVmaW5lIE1BWF9FUlJPUl9TVFIJIDIwNDgKKworI2RlZmluZSBOR1hfTUFYX0VSUk9SX1NUUiAgIDIwNDgKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtODgsNyArODksNiBAQAogdm9pZCBuZ3hfbG9nX2Vycm9yX2NvcmUobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CiB2b2lkIG5neF9sb2dfZGVidWdfY29yZShuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotdm9pZCBuZ3hfYXNzZXJ0X2NvcmUobmd4X2xvZ190ICpsb2csIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogCiAjZW5kaWYgLyogVkFSSUFESUMgTUFDUk9TICovCkBAIC0xOTUsMTAgKzE5NSw3IEBACiAjZGVmaW5lIG5neF9sb2dfYWxsb2NfbG9nKHBvb2wsIGxvZykgIG5neF9wYWxsb2MocG9vbCwgbG9nLCBzaXplb2Yobmd4X2xvZ190KSkKICNkZWZpbmUgbmd4X2xvZ19jb3B5X2xvZyhuZXcsIG9sZCkgICAgbmd4X21lbWNweShuZXcsIG9sZCwgc2l6ZW9mKG5neF9sb2dfdCkpCiAKLW5neF9sb2dfdCAqbmd4X2xvZ19pbml0X3N0ZGVycigpOwotI2lmIDAKLW5neF9pbnRfdCBuZ3hfbG9nX2luaXRfZXJyb3JfbG9nKCk7Ci0jZW5kaWYKK25neF9sb2dfdCAqbmd4X2xvZ19pbml0KCk7CiBuZ3hfbG9nX3QgKm5neF9sb2dfY3JlYXRlX2VycmxvZyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9hcnJheV90ICphcmdzKTsKIGNoYXIgKm5neF9zZXRfZXJyb3JfbG9nX2xldmVscyhuZ3hfY29uZl90ICpjZiwgbmd4X2xvZ190ICpsb2cpOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKaW5kZXggMjNiNzg0Ni4uMzBkZGEzNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCisrKyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwpAQCAtMTYyLDcgKzE2MiwxMSBAQAogICAgICAgICAgICAgICAgIGN0eC0+aW4gPSBjdHgtPmluLT5uZXh0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihjbCwgY3R4LT5idWYsIGN0eC0+cG9vbCwgTkdYX0VSUk9SKTsKKyAgICAgICAgICAgIGlmICghKGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoY3R4LT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2wtPmJ1ZiA9IGN0eC0+YnVmOworICAgICAgICAgICAgY2wtPm5leHQgPSBOVUxMOwogICAgICAgICAgICAgKmxhc3Rfb3V0ID0gY2w7CiAgICAgICAgICAgICBsYXN0X291dCA9ICZjbC0+bmV4dDsKICAgICAgICAgICAgIGN0eC0+YnVmID0gTlVMTDsKQEAgLTI2Niw3ICsyNzAsNyBAQAogCiAgICAgICAgIGlmICgoc2l6ZV90KSBuICE9IHNpemUpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgc3JjLT5maWxlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yZWFkX2ZpbGVfbiAiIHJlYWRzIG9ubHkgJWQgb2YgJWQgZnJvbSBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlYWRfZmlsZV9uICIgcmVhZHMgb25seSAleiBvZiAldXogZnJvbSBmaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgc2l6ZSk7CiAgICAgICAgICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTMwNiwyMCArMzEwLDI0IEBACiAgICAgZm9yICgvKiB2b2lkICovOyBpbjsgaW4gPSBpbi0+bmV4dCkgewogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3R4LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJXUklURVIgYnVmOiAlZCIsIG5neF9idWZfc2l6ZShpbi0+YnVmKSk7CisgICAgICAgICAgICAgICAgICAgICAgICJjaGFpbiB3cml0ZXIgYnVmIHNpemU6ICV1eiIsIG5neF9idWZfc2l6ZShpbi0+YnVmKSk7CiAKLSAgICAgICAgbmd4X2FsbG9jX2xpbmtfYW5kX3NldF9idWYoY2wsIGluLT5idWYsIGN0eC0+cG9vbCwgTkdYX0VSUk9SKTsKKyAgICAgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhjdHgtPnBvb2wpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorICAgICAgICBjbC0+YnVmID0gaW4tPmJ1ZjsKKyAgICAgICAgY2wtPm5leHQgPSBOVUxMOwogICAgICAgICAqY3R4LT5sYXN0ID0gY2w7CiAgICAgICAgIGN0eC0+bGFzdCA9ICZjbC0+bmV4dDsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN0eC0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJXUklURVIwOiAlWCIsIGN0eC0+b3V0KTsKKyAgICAgICAgICAgICAgICAgICAiY2hhaW4gd3JpdGVyIGluOiAlcCIsIGN0eC0+b3V0KTsKIAogICAgIGN0eC0+b3V0ID0gbmd4X3NlbmRfY2hhaW4oY3R4LT5jb25uZWN0aW9uLCBjdHgtPm91dCwgY3R4LT5saW1pdCk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN0eC0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJXUklURVIxOiAlWCIsIGN0eC0+b3V0KTsKKyAgICAgICAgICAgICAgICAgICAiY2hhaW4gd3JpdGVyIG91dDogJXAiLCBjdHgtPm91dCk7CiAKICAgICBpZiAoY3R4LT5vdXQgPT0gTkdYX0NIQUlOX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMgYi9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKaW5kZXggZTQxZTk3MS4uZWQxM2RlNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCisrKyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwpAQCAtMzMsOCArMzMsNyBAQAogCiAgICAgZm9yIChsID0gcG9vbC0+bGFyZ2U7IGw7IGwgPSBsLT5uZXh0KSB7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19BTExPQywgcG9vbC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiZnJlZTogIiBQVFJfRk1ULCBsLT5hbGxvYyk7CisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQUxMT0MsIHBvb2wtPmxvZywgMCwgImZyZWU6ICVwIiwgbC0+YWxsb2MpOwogCiAgICAgICAgIGlmIChsLT5hbGxvYykgewogICAgICAgICAgICAgZnJlZShsLT5hbGxvYyk7CkBAIC01MCw4ICs0OSw3IEBACiAKICAgICBmb3IgKHAgPSBwb29sLCBuID0gcG9vbC0+bmV4dDsgLyogdm9pZCAqLzsgcCA9IG4sIG4gPSBuLT5uZXh0KSB7CiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQUxMT0MsIHBvb2wtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImZyZWU6ICIgUFRSX0ZNVCAiLCB1bnVzZWQ6ICIgU0laRV9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgcCwgcC0+ZW5kIC0gcC0+bGFzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICJmcmVlOiAlcCwgdW51c2VkOiAldXoiLCBwLCBwLT5lbmQgLSBwLT5sYXN0KTsKIAogICAgICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NCw3ICsxNjIsNyBAQAogICAgIGZvciAobCA9IHBvb2wtPmxhcmdlOyBsOyBsID0gbC0+bmV4dCkgewogICAgICAgICBpZiAocCA9PSBsLT5hbGxvYykgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19BTExPQywgcG9vbC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWU6ICIgUFRSX0ZNVCwgbC0+YWxsb2MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWU6ICVwIiwgbC0+YWxsb2MpOwogICAgICAgICAgICAgZnJlZShsLT5hbGxvYyk7CiAgICAgICAgICAgICBsLT5hbGxvYyA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9yZWdleC5jIGIvc3JjL2NvcmUvbmd4X3JlZ2V4LmMKaW5kZXggMjdkYWQ4ZC4uMzViNDg5MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3JlZ2V4LmMKKysrIGIvc3JjL2NvcmUvbmd4X3JlZ2V4LmMKQEAgLTUzLDExICs1MywxMSBAQAogCiAgICAgaWYgKHJlID09IE5VTEwpIHsKICAgICAgICBpZiAoKHNpemVfdCkgZXJyb2ZmID09IHBhdHRlcm4tPmxlbikgewotICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikgZXJyLT5kYXRhLCBlcnItPmxlbiAtIDEsCisgICAgICAgICAgIG5neF9zbnByaW50ZihlcnItPmRhdGEsIGVyci0+bGVuIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICJwY3JlX2NvbXBpbGUoKSBmYWlsZWQ6ICVzIGluIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJzdHIsIHBhdHRlcm4tPmRhdGEpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikgZXJyLT5kYXRhLCBlcnItPmxlbiAtIDEsCisgICAgICAgICAgIG5neF9zbnByaW50ZihlcnItPmRhdGEsIGVyci0+bGVuIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICJwY3JlX2NvbXBpbGUoKSBmYWlsZWQ6ICVzIGluIFwiJXNcIiBhdCBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyc3RyLCBwYXR0ZXJuLT5kYXRhLCBwYXR0ZXJuLT5kYXRhICsgZXJyb2ZmKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCmluZGV4IDM5MGNhNDMuLjk0ZWFkZmIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuYworKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKQEAgLTMwLDQyICszMCw5MiBAQAogCiAvKgogICogc3VwcG9ydGVkIGZvcm1hdHM6Ci0gKiAgICAlWzBdW3dpZHRoXU8gICAgIG9mZl90Ci0gKiAgICAlWzBdW3dpZHRoXVQgICAgIHRpbWVfdAotICogICAgJVswXVt3aWR0aF1TICAgICBzc2l6ZV90Ci0gKiAgICAlWzBdW3dpZHRoXXVTICAgIHNpemVfdAotICogICAgJVswXVt3aWR0aF11eFMgICBzaXplX3QgaW4gaGV4Ci0gKiAgICAlWzBdW3dpZHRoXWwgICAgIGxvbmcKLSAqICAgICVbMF1bd2lkdGhdZCAgICAgaW50Ci0gKiAgICAlWzBdW3dpZHRoXWkgICAgIG5neF9pbnRfdAotICogICAgJVswXVt3aWR0aF11aSAgICBuZ3hfdWludF90Ci0gKiAgICAlWzBdW3dpZHRoXXV4aSAgIG5neF91aW50X3QgaW4gaGV4Ci0gKiAgICAlcyAgICAgICAgICAgICAgIG51bGwtdGVybWluYXRlZCBzdHJpbmcKLSAqICAgICVjICAgICAgICAgICAgICAgY2hhcgotICogICAgJSUgICAgICAgICAgICAgICAlCisgKiAgICAlWzBdW3dpZHRoXU8gICAgICAgICAgICAgIG9mZl90CisgKiAgICAlWzBdW3dpZHRoXVQgICAgICAgICAgICAgIHRpbWVfdAorICogICAgJVswXVt3aWR0aF1bdV1beHxYXXogICAgICBzc2l6ZV90L3NpemVfdAorICogICAgJVswXVt3aWR0aF1bdV1beHxYXWQgICAgICBpbnQvdV9pbnQKKyAqICAgICVbMF1bd2lkdGhdW3VdW3h8WF1sICAgICAgbG9uZworICogICAgJVswXVt3aWR0aHxtXVt1XVt4fFhdaSAgICBuZ3hfaW50X3Qvbmd4X3VpbnRfdAorICogICAgJVswXVt3aWR0aF1bdV1beHxYXUQgICAgICBpbnQzMl90L3VpbnQzMl90CisgKiAgICAlWzBdW3dpZHRoXVt1XVt4fFhdTCAgICAgIGludDY0X3QvdWludDY0X3QKKyAqICAgICVQICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BpZF90CisgKiAgICAlciAgICAgICAgICAgICAgICAgICAgICAgIHJsaW1fdAorICogICAgJXAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyCisgKiAgICAlViAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgdG8gbmd4X3N0cl90CisgKiAgICAlcyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwtdGVybWluYXRlZCBzdHJpbmcKKyAqICAgICVaICAgICAgICAgICAgICAgICAgICAgICAgJ1wwJworICogICAgJWMgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgKiAgICAlJSAgICAgICAgICAgICAgICAgICAgICAgICUKICAqCisgKiAgVE9ETzoKKyAqICAgICVNICAgICAgICAgICAgICAgICAgICAgICAgbmd4X21zZWNfdAorICogICAgJUEgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYXRvbWljX3QKKyAqCisgKiAgcmVzZXJ2ZWQ6CisgKiAgICAldCAgICAgICAgICAgICAgICAgICAgICAgIHB0cmRpZmZfdAorICogICAgJVMgICAgICAgICAgICAgICAgICAgICAgICBudWxsLXRlbWluYXRlZCB3Y2hhciBzdHJpbmcKKyAqICAgICVDICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXIKICAqLwogCi11X2NoYXIgKm5neF9zcHJpbnRmKHVfY2hhciAqYnVmLCBjaGFyICpmbXQsIC4uLikKKwordV9jaGFyICpuZ3hfc3ByaW50Zih1X2NoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7Ci0gICAgdV9jaGFyICAgICAgICAqcCwgYywgdGVtcFtOR1hfTUFYX0lOVF9MRU5dOwotICAgIGludCAgICAgICAgICAgIGQ7Ci0gICAgbG9uZyAgICAgICAgICAgbDsKLSAgICBvZmZfdCAgICAgICAgICBvZmZzZXQ7Ci0gICAgc2l6ZV90ICAgICAgICAgc2l6ZSwgbGVuOwotICAgIHNzaXplX3QgICAgICAgIHNzaXplOwotICAgIHRpbWVfdCAgICAgICAgIHNlYzsKLSAgICB2YV9saXN0ICAgICAgICBhcmc7Ci0gICAgbmd4X2ludF90ICAgICAgaTsKLSAgICBuZ3hfdWludF90ICAgICB1aSwgemVybywgd2lkdGgsIHNpZ24sIGhleGFkZWNpbWFsOwotICAgIHN0YXRpYyB1X2NoYXIgIGhleFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiOworICAgIHVfY2hhciAgICpwOworICAgIHZhX2xpc3QgICBhcmdzOwogCi0gICAgdmFfc3RhcnQoYXJnLCBmbXQpOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisgICAgcCA9IG5neF92c25wcmludGYoYnVmLCAvKiBTVFVCICovIDY1NTM2LCBmbXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKIAotICAgIHdoaWxlICgqZm10KSB7CisgICAgcmV0dXJuIHA7Cit9CisKKwordV9jaGFyICpuZ3hfc25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHVfY2hhciAgICpwOworICAgIHZhX2xpc3QgICBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyAgICBwID0gbmd4X3ZzbnByaW50ZihidWYsIG1heCwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1cm4gcDsKK30KKworCit1X2NoYXIgKm5neF92c25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQoreworICAgIHVfY2hhciAgICAgICAgICpwLCB6ZXJvLCAqbGFzdCwgdGVtcFtOR1hfTUFYX0lOVF9MRU5dOworICAgIGludCAgICAgICAgICAgICBkOworICAgIHNpemVfdCAgICAgICAgICBsZW47CisgICAgdWludDMyX3QgICAgICAgIHVpMzI7CisgICAgaW50NjRfdCAgICAgICAgIGk2NDsKKyAgICB1aW50NjRfdCAgICAgICAgdWk2NDsKKyAgICBuZ3hfc3RyX3QgICAgICAqczsKKyAgICBuZ3hfdWludF90ICAgICAgd2lkdGgsIHNpZ24sIGhleGFkZWNpbWFsOworICAgIHN0YXRpYyB1X2NoYXIgICBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKyAgICBzdGF0aWMgdV9jaGFyICAgSEVYW10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisKKyAgICBpZiAobWF4ID09IDApIHsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisKKyAgICBsYXN0ID0gYnVmICsgbWF4OworCisgICAgd2hpbGUgKCpmbXQgJiYgYnVmIDwgbGFzdCkgeworCisgICAgICAgIC8qCisgICAgICAgICAqICJidWYgPCBsYXN0IiBtZWFucyB0aGF0IHdlIGNvdWxkIGNvcHkgYXQgbGVhc3Qgb25lIGNoYXJhY3RlcjoKKyAgICAgICAgICogdGhlIHBsYWluIGNoYXJhY3RlciwgIiUlIiwgIiVjIiwgYW5kIG1pbnVzIHdpdGhvdXQgdGhlIGNoZWNraW5nCisgICAgICAgICAqLworCiAgICAgICAgIGlmICgqZm10ID09ICclJykgewogCi0gICAgICAgICAgICB6ZXJvID0gKCorK2ZtdCA9PSAnMCcpID8gMSA6IDA7CisgICAgICAgICAgICBpNjQgPSAwOworICAgICAgICAgICAgdWk2NCA9IDA7CisKKyAgICAgICAgICAgIHplcm8gPSAodV9jaGFyKSAoKCorK2ZtdCA9PSAnMCcpID8gJzAnIDogJyAnKTsKICAgICAgICAgICAgIHdpZHRoID0gMDsKICAgICAgICAgICAgIHNpZ24gPSAxOwogICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAwOwpAQCAtODUsOCArMTM1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGZtdCsrOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgICAgICAgICBoZXhhZGVjaW1hbCA9IDI7CisgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAwOworICAgICAgICAgICAgICAgICAgICBmbXQrKzsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgICAgICAgICBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAgICAgaGV4YWRlY2ltYWwgPSAxOworICAgICAgICAgICAgICAgICAgICBzaWduID0gMDsKICAgICAgICAgICAgICAgICAgICAgZm10Kys7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDAsMTM3ICsxNTcsMTE2IEBACiAKICAgICAgICAgICAgIHN3aXRjaCAoKmZtdCkgewogCi0gICAgICAgICAgICBjYXNlICdPJzoKLSAgICAgICAgICAgICAgICBvZmZzZXQgPSB2YV9hcmcoYXJnLCBvZmZfdCk7CisgICAgICAgICAgICBjYXNlICdWJzoKKyAgICAgICAgICAgICAgICBzID0gdmFfYXJnKGFyZ3MsIG5neF9zdHJfdCAqKTsKIAotICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICpidWYrKyA9ICctJzsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGVuID0gKGJ1ZiArIHMtPmxlbiA8IGxhc3QpID8gcy0+bGVuIDogKHNpemVfdCkgKGxhc3QgLSBidWYpOworICAgICAgICAgICAgICAgIGJ1ZiA9IG5neF9jcHltZW0oYnVmLCBzLT5kYXRhLCBsZW4pOworICAgICAgICAgICAgICAgIGZtdCsrOwogCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKG9mZnNldCAlIDEwICsgJzAnKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChvZmZzZXQgLz0gMTApOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ1QnOgotICAgICAgICAgICAgICAgIHNlYyA9IHZhX2FyZyhhcmcsIHRpbWVfdCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc2VjIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAqYnVmKysgPSAnLSc7Ci0gICAgICAgICAgICAgICAgICAgIHNlYyA9IC1zZWM7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKHNlYyAlIDEwICsgJzAnKTsKLSAgICAgICAgICAgICAgICB9IHdoaWxlIChzZWMgLz0gMTApOwotCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNzaXplID0gdmFfYXJnKGFyZywgc3NpemVfdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHNzaXplIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IChzaXplX3QpIC1zc2l6ZTsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IChzaXplX3QpIHNzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gdmFfYXJnKGFyZywgc2l6ZV90KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGV4YWRlY2ltYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgKi0tcCA9IGhleFtzaXplICYgMHhmXTsKLSAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoc2l6ZSA+Pj0gNCk7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKHNpemUgJSAxMCArICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHNpemUgLz0gMTApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdsJzoKLSAgICAgICAgICAgICAgICBsID0gdmFfYXJnKGFyZywgbG9uZyk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICBsID0gLWw7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKGwgJSAxMCArICcwJyk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAobCAvPSAxMCk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgZCA9IHZhX2FyZyhhcmcsIGludCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJy0nOwotICAgICAgICAgICAgICAgICAgICBkID0gLWQ7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAqLS1wID0gKHVfY2hhcikgKGQgJSAxMCArICcwJyk7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoZCAvPSAxMCk7Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgaSA9IHZhX2FyZyhhcmcsIG5neF9pbnRfdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqYnVmKysgPSAnLSc7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aSA9IChuZ3hfdWludF90KSAtaTsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdWkgPSAobmd4X3VpbnRfdCkgaTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdWkgPSB2YV9hcmcoYXJnLCBuZ3hfdWludF90KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGV4YWRlY2ltYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICAgICAgKi0tcCA9IGhleFt1aSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHVpID4+PSA0KTsKLQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICotLXAgPSAodV9jaGFyKSAodWkgJSAxMCArICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHVpIC89IDEwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgY2FzZSAncyc6Ci0gICAgICAgICAgICAgICAgcCA9IHZhX2FyZyhhcmcsIHVfY2hhciAqKTsKKyAgICAgICAgICAgICAgICBwID0gdmFfYXJnKGFyZ3MsIHVfY2hhciAqKTsKIAotICAgICAgICAgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgICAgIHdoaWxlICgqcCAmJiBidWYgPCBsYXN0KSB7CiAgICAgICAgICAgICAgICAgICAgICpidWYrKyA9ICpwKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGZtdCsrOwogCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgIGNhc2UgJ08nOgorICAgICAgICAgICAgICAgIGk2NCA9IChpbnQ2NF90KSB2YV9hcmcoYXJncywgb2ZmX3QpOworICAgICAgICAgICAgICAgIHNpZ24gPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdQJzoKKyAgICAgICAgICAgICAgICBpNjQgPSAoaW50NjRfdCkgdmFfYXJnKGFyZ3MsIG5neF9waWRfdCk7CisgICAgICAgICAgICAgICAgc2lnbiA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIGk2NCA9IChpbnQ2NF90KSB2YV9hcmcoYXJncywgdGltZV90KTsKKyAgICAgICAgICAgICAgICBzaWduID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAneic6CisgICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgICAgICAgICAgICAgaTY0ID0gKGludDY0X3QpIHZhX2FyZyhhcmdzLCBzc2l6ZV90KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aTY0ID0gKHVpbnQ2NF90KSB2YV9hcmcoYXJncywgc2l6ZV90KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgICAgIGk2NCA9IChpbnQ2NF90KSB2YV9hcmcoYXJncywgbmd4X2ludF90KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aTY0ID0gKHVpbnQ2NF90KSB2YV9hcmcoYXJncywgbmd4X3VpbnRfdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdkJzoKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgICAgICBpNjQgPSAoaW50NjRfdCkgdmFfYXJnKGFyZ3MsIGludCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdWk2NCA9ICh1aW50NjRfdCkgdmFfYXJnKGFyZ3MsIHVfaW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ2wnOgorICAgICAgICAgICAgICAgIGlmIChzaWduKSB7CisgICAgICAgICAgICAgICAgICAgIGk2NCA9IChpbnQ2NF90KSB2YV9hcmcoYXJncywgbG9uZyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdWk2NCA9ICh1aW50NjRfdCkgdmFfYXJnKGFyZ3MsIHVfbG9uZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgICAgICBpNjQgPSAoaW50NjRfdCkgdmFfYXJnKGFyZ3MsIGludDMyX3QpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVpNjQgPSAodWludDY0X3QpIHZhX2FyZyhhcmdzLCB1aW50MzJfdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikgeworICAgICAgICAgICAgICAgICAgICBpNjQgPSB2YV9hcmcoYXJncywgaW50NjRfdCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdWk2NCA9IHZhX2FyZyhhcmdzLCB1aW50NjRfdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWYgIShOR1hfV0lOMzIpCisgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICBpNjQgPSAoaW50NjRfdCkgdmFfYXJnKGFyZ3MsIHJsaW1fdCk7CisgICAgICAgICAgICAgICAgc2lnbiA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgdWk2NCA9ICh1aW50cHRyX3QpIHZhX2FyZyhhcmdzLCB2b2lkICopOworICAgICAgICAgICAgICAgIGhleGFkZWNpbWFsID0gMjsKKyAgICAgICAgICAgICAgICBzaWduID0gMDsKKyAgICAgICAgICAgICAgICB6ZXJvID0gJzAnOworICAgICAgICAgICAgICAgIHdpZHRoID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICAgICAgZCA9IHZhX2FyZyhhcmcsIGludCk7CisgICAgICAgICAgICAgICAgZCA9IHZhX2FyZyhhcmdzLCBpbnQpOwogICAgICAgICAgICAgICAgICpidWYrKyA9ICh1X2NoYXIpIChkICYgMHhmZik7CiAgICAgICAgICAgICAgICAgZm10Kys7CiAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgY2FzZSAnWic6CisgICAgICAgICAgICAgICAgKmJ1ZisrID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBmbXQrKzsKKworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBjYXNlICclJzoKICAgICAgICAgICAgICAgICAqYnVmKysgPSAnJSc7CiAgICAgICAgICAgICAgICAgZm10Kys7CkBAIC0yNDMsMTUgKzI3OSw3MSBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBsZW4gPSAodGVtcCArIE5HWF9NQVhfSU5UX0xFTikgLSBwOworICAgICAgICAgICAgaWYgKHNpZ24pIHsKKyAgICAgICAgICAgICAgICBpZiAoaTY0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICAqYnVmKysgPSAnLSc7CisgICAgICAgICAgICAgICAgICAgIHVpNjQgPSAodWludDY0X3QpIC1pNjQ7CiAKLSAgICAgICAgICAgIGMgPSAodV9jaGFyKSAoemVybyA/ICcwJyA6ICcgJyk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChsZW4rKyA8IHdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgKmJ1ZisrID0gYzsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aTY0ID0gKHVpbnQ2NF90KSBpNjQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBidWYgPSBuZ3hfY3B5bWVtKGJ1ZiwgcCwgKCh0ZW1wICsgTkdYX01BWF9JTlRfTEVOKSAtIHApKTsKKyAgICAgICAgICAgIGlmIChoZXhhZGVjaW1hbCA9PSAxKSB7CisgICAgICAgICAgICAgICAgZG8geworCisgICAgICAgICAgICAgICAgICAgIC8qIHRoZSAiKHVpbnQzMl90KSIgY2FzdCBkaXNhYmxlcyB0aGUgQkNDJ3Mgd2FybmluZyAqLworICAgICAgICAgICAgICAgICAgICAqLS1wID0gaGV4Wyh1aW50MzJfdCkgKHVpNjQgJiAweGYpXTsKKworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHVpNjQgPj49IDQpOworCisgICAgICAgICAgICB9IGVsc2UgaWYgKGhleGFkZWNpbWFsID09IDIpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisKKyAgICAgICAgICAgICAgICAgICAgLyogdGhlICIodWludDMyX3QpIiBjYXN0IGRpc2FibGVzIHRoZSBCQ0MncyB3YXJuaW5nICovCisgICAgICAgICAgICAgICAgICAgICotLXAgPSBIRVhbKHVpbnQzMl90KSAodWk2NCAmIDB4ZildOworCisgICAgICAgICAgICAgICAgfSB3aGlsZSAodWk2NCA+Pj0gNCk7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodWk2NCA8PSBOR1hfTUFYX1VJTlQzMl9WQUxVRSkgeworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUbyBkaXZpZGUgNjQtYml0IG51bWJlciBhbmQgdG8gZmluZCB0aGUgcmVtYWluZGVyCisgICAgICAgICAgICAgICAgICogb24gdGhlIHg4NiBwbGF0Zm9ybSBnY2MgYW5kIGljYyBjYWxsIHRoZSBsaWJjIGZ1bmN0aW9ucworICAgICAgICAgICAgICAgICAqIFt1XWRpdmRpMygpIGFuZCBbdV1tb2RkaTMoKSwgdGhleSBjYWxsIGFub3RoZXIgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgKiBpbiByZXR1cm4uICBPbiBGcmVlQlNEIGl0IGlzIHRoZSBxZGl2cmVtKCkgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgICogaXRzIHNvdXJjZSBjb2RlIGlzIGFib3V0IDE3MCBsaW5lcyBvZiB0aGUgY29kZS4KKyAgICAgICAgICAgICAgICAgKiBUaGUgZ2xpYmMgY291bnRlcnBhcnQgaXMgYWJvdXQgMTUwIGxpbmVzIG9mIHRoZSBjb2RlLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogRm9yIDMyLWJpdCBudW1iZXJzIGdjYyBhbmQgaWNjIHVzZSB0aGUgaW5saW5lZAorICAgICAgICAgICAgICAgICAqIG11bHRpcGxpY2F0aW9uIGFuZCBzaGlmdHMuICBGb3IgZXhhbXBsZSwgdW5zaWduZWQKKyAgICAgICAgICAgICAgICAgKiAiaTMyIC8gMTAiIGlzIGNvbXBpbGVkIHRvICIoaTMyICogMHhDQ0NDQ0NDRCkgPj4gMzUiLgorICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgdWkzMiA9ICh1aW50MzJfdCkgdWk2NDsKKworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpICh1aTMyICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHVpMzIgLz0gMTApOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgKi0tcCA9ICh1X2NoYXIpICh1aTY0ICUgMTAgKyAnMCcpOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHVpNjQgLz0gMTApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW4gPSAodGVtcCArIE5HWF9NQVhfSU5UX0xFTikgLSBwOworCisgICAgICAgICAgICB3aGlsZSAobGVuKysgPCB3aWR0aCAmJiBidWYgPCBsYXN0KSB7CisgICAgICAgICAgICAgICAgKmJ1ZisrID0gemVybzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGVuID0gKHRlbXAgKyBOR1hfTUFYX0lOVF9MRU4pIC0gcDsKKyAgICAgICAgICAgIGlmIChidWYgKyBsZW4gPiBsYXN0KSB7CisgICAgICAgICAgICAgICAgbGVuID0gbGFzdCAtIGJ1ZjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVmID0gbmd4X2NweW1lbShidWYsIHAsIGxlbik7CiAKICAgICAgICAgICAgIGZtdCsrOwogCkBAIC0yNjAsMTAgKzM1Miw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2YV9lbmQoYXJnKTsKLQotICAgICpidWYgPSAnXDAnOwotCiAgICAgcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNTA1LDEyICs1OTMsMTQgQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSkKK25neF91aW50X3Qgbmd4X2VzY2FwZV91cmkodV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3VpbnRfdCB0eXBlKQogewotICAgIG5neF9pbnRfdCAgICAgICAgIG47Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgaTsKKyAgICBuZ3hfdWludF90ICAgICAgICBpLCBuOworICAgIHVpbnQzMl90ICAgICAgICAgKmVzY2FwZTsKICAgICBzdGF0aWMgdV9jaGFyICAgICBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKLSAgICBzdGF0aWMgdWludDMyX3QgICBlc2NhcGVbXSA9CisKKyAgICBzdGF0aWMgdWludDMyX3QgICB1cmlbXSA9CiAgICAgICAgIHsgMHhmZmZmZmZmZiwgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgLyogPz49PCA7Ojk4IDc2NTQgMzIxMCAgLy4tLCArKikoICcmJSQgIyIhICAqLwpAQCAtNTI3LDYgKzYxNywzMSBAQAogICAgICAgICAgIDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KICAgICAgICAgICAweGZmZmZmZmZmICAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovIH07CiAKKyAgICBzdGF0aWMgdWludDMyX3QgICBodG1sW10gPQorICAgICAgICB7IDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KKworICAgICAgICAgICAgICAgICAgICAgIC8qID8+PTwgOzo5OCA3NjU0IDMyMTAgIC8uLSwgKyopKCAnJiUkICMiISAgKi8KKyAgICAgICAgICAweDgwMDAwMDIxLCAvKiAwMDAwIDAwMDAgMDAwMCAwMDAwICAwMDAwIDAwMDAgMTAxMCAwMTAxICovCisKKyAgICAgICAgICAgICAgICAgICAgICAvKiBfXl1cIFtaWVggV1ZVVCBTUlFQICBPTk1MIEtKSUggR0ZFRCBDQkFAICovCisgICAgICAgICAgMHgwMDAwMDAwMCwgLyogMDAwMCAwMDAwIDAwMDAgMDAwMCAgMDAwMCAwMDAwIDAwMDAgMDAwMCAqLworCisgICAgICAgICAgICAgICAgICAgICAgLyogIH59fCB7enl4IHd2dXQgc3JxcCAgb25tbCBramloIGdmZWQgY2JhYCAqLworICAgICAgICAgIDB4ODAwMDAwMDAsIC8qIDEwMDAgMDAwMCAwMDAwIDAwMDAgIDAwMDAgMDAwMCAwMDAwIDAwMDAgKi8KKworICAgICAgICAgIDB4ZmZmZmZmZmYsIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8KKyAgICAgICAgICAweGZmZmZmZmZmLCAvKiAxMTExIDExMTEgMTExMSAxMTExICAxMTExIDExMTEgMTExMSAxMTExICovCisgICAgICAgICAgMHhmZmZmZmZmZiwgLyogMTExMSAxMTExIDExMTEgMTExMSAgMTExMSAxMTExIDExMTEgMTExMSAqLworICAgICAgICAgIDB4ZmZmZmZmZmYgIC8qIDExMTEgMTExMSAxMTExIDExMTEgIDExMTEgMTExMSAxMTExIDExMTEgKi8gfTsKKworCisgICAgaWYgKHR5cGUgPT0gTkdYX0VTQ0FQRV9IVE1MKSB7CisgICAgICAgIGVzY2FwZSA9IGh0bWw7CisKKyAgICB9IGVsc2UgeworICAgICAgICBlc2NhcGUgPSB1cmk7CisgICAgfQorCiAgICAgaWYgKGRzdCA9PSBOVUxMKSB7CiAKICAgICAgICAgLyogZmluZCB0aGUgbnVtYmVyIG9mIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGVzY2FwZWQgKi8KQEAgLTU1NSw1ICs2NzAsNSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIE5HWF9PSzsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCBkN2NhYWFmLi41MWUwZmQwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC0yMiwxNiArMjIsMTMgQEAKICNkZWZpbmUgbmd4X251bGxfc3RyaW5nICB7IDAsIE5VTEwgfQogCiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKIAogI2RlZmluZSBuZ3hfc3RybmNhc2VjbXAoczEsIHMyLCBuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuaWNtcCgoY29uc3QgY2hhciAqKSBzMSwgKGNvbnN0IGNoYXIgKikgczIsIG4pCiAjZGVmaW5lIG5neF9zdHJjYXNlY21wKHMxLCBzMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljbXAoKGNvbnN0IGNoYXIgKikgczEsIChjb25zdCBjaGFyICopIHMyKQogCi0jZGVmaW5lIG5neF9zbnByaW50ZiAgICAgICBfc25wcmludGYKLSNkZWZpbmUgbmd4X3ZzbnByaW50ZiAgICAgIF92c25wcmludGYKLQogI2Vsc2UKIAogI2RlZmluZSBuZ3hfc3RybmNhc2VjbXAoczEsIHMyLCBuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0zOSwyMSArMzYsMjAgQEAKICNkZWZpbmUgbmd4X3N0cmNhc2VjbXAoczEsIHMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2FzZWNtcCgoY29uc3QgY2hhciAqKSBzMSwgKGNvbnN0IGNoYXIgKikgczIpCiAKLSNkZWZpbmUgbmd4X3NucHJpbnRmICAgICAgIHNucHJpbnRmCi0jZGVmaW5lIG5neF92c25wcmludGYgICAgICB2c25wcmludGYKLQogI2VuZGlmCiAKIAotI2RlZmluZSBuZ3hfc3RybmNtcChzMSwgczIsIG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybmNtcCgoY29uc3QgY2hhciAqKSBzMSwgKGNvbnN0IGNoYXIgKikgczIsIG4pCisjZGVmaW5lIG5neF9zdHJuY21wKHMxLCBzMiwgbikgIHN0cm5jbXAoKGNvbnN0IGNoYXIgKikgczEsIChjb25zdCBjaGFyICopIHMyLCBuKQorCiAKIC8qIG1zdmMgYW5kIGljYyBjb21waWxlIHN0cmNtcCgpIHRvIGlubGluZSBsb29wICovCiAjZGVmaW5lIG5neF9zdHJjbXAoczEsIHMyKSAgc3RyY21wKChjb25zdCBjaGFyICopIHMxLCAoY29uc3QgY2hhciAqKSBzMikKIAorCiAjZGVmaW5lIG5neF9zdHJzdHIoczEsIHMyKSAgc3Ryc3RyKChjb25zdCBjaGFyICopIHMxLCAoY29uc3QgY2hhciAqKSBzMikKICNkZWZpbmUgbmd4X3N0cmxlbihzKSAgICAgICBzdHJsZW4oKGNvbnN0IGNoYXIgKikgcykKIAorCiAvKgogICogbXN2YyBhbmQgaWNjIGNvbXBpbGUgbWVtc2V0KCkgdG8gdGhlIGlubGluZSAicmVwIHN0b3MiCiAgKiB3aGlsZSBaZXJvTWVtb3J5KCkgYW5kIGJ6ZXJvKCkgYXJlIHRoZSBjYWxscy4KQEAgLTYyLDE1ICs1OCwyMCBAQAogI2RlZmluZSBuZ3hfbWVtemVybyhidWYsIG4pICAgICAgIG1lbXNldChidWYsIDAsIG4pCiAjZGVmaW5lIG5neF9tZW1zZXQoYnVmLCBjLCBuKSAgICAgbWVtc2V0KGJ1ZiwgYywgbikKIAorCiAvKiBtc3ZjIGFuZCBpY2MgY29tcGlsZSBtZW1jcHkoKSB0byB0aGUgaW5saW5lICJyZXAgbW92cyIgKi8KICNkZWZpbmUgbmd4X21lbWNweShkc3QsIHNyYywgbikgICBtZW1jcHkoZHN0LCBzcmMsIG4pCiAjZGVmaW5lIG5neF9jcHltZW0oZHN0LCBzcmMsIG4pICAgKCh1X2NoYXIgKikgbWVtY3B5KGRzdCwgc3JjLCBuKSkgKyBuCiAKKwogLyogbXN2YyBhbmQgaWNjIGNvbXBpbGUgbWVtY21wKCkgdG8gdGhlIGlubGluZSBsb29wICovCiAjZGVmaW5lIG5neF9tZW1jbXAgICAgICAgICAgICAgICAgbWVtY21wCiAKKwogdV9jaGFyICpuZ3hfY3B5c3Rybih1X2NoYXIgKmRzdCwgdV9jaGFyICpzcmMsIHNpemVfdCBuKTsKLXVfY2hhciAqbmd4X3NwcmludGYodV9jaGFyICpidWYsIGNoYXIgKmZtdCwgLi4uKTsKK3VfY2hhciAqbmd4X3NwcmludGYodV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3VfY2hhciAqbmd4X3NucHJpbnRmKHVfY2hhciAqYnVmLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cit1X2NoYXIgKm5neF92c25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKIAogbmd4X2ludF90IG5neF9yc3RybmNtcCh1X2NoYXIgKnMxLCB1X2NoYXIgKnMyLCBzaXplX3Qgbik7CiBuZ3hfaW50X3Qgbmd4X3JzdHJuY2FzZWNtcCh1X2NoYXIgKnMxLCB1X2NoYXIgKnMyLCBzaXplX3Qgbik7CkBAIC04Niw3ICs4NywxMyBAQAogCiB2b2lkIG5neF9lbmNvZGVfYmFzZTY0KG5neF9zdHJfdCAqZHN0LCBuZ3hfc3RyX3QgKnNyYyk7CiBuZ3hfaW50X3Qgbmd4X2RlY29kZV9iYXNlNjQobmd4X3N0cl90ICpkc3QsIG5neF9zdHJfdCAqc3JjKTsKLW5neF9pbnRfdCBuZ3hfZXNjYXBlX3VyaSh1X2NoYXIgKmRzdCwgdV9jaGFyICpzcmMsIHNpemVfdCBzaXplKTsKKworCisjZGVmaW5lIE5HWF9FU0NBUEVfVVJJICAgMAorI2RlZmluZSBOR1hfRVNDQVBFX0hUTUwgIDEKKworbmd4X3VpbnRfdCBuZ3hfZXNjYXBlX3VyaSh1X2NoYXIgKmRzdCwgdV9jaGFyICpzcmMsIHNpemVfdCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IHR5cGUpOwogCiAKICNkZWZpbmUgIG5neF9xc29ydCAgICAgICAgICAgICAgICBxc29ydApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwppbmRleCA0MGRiYmRiLi5mMDZkNjQ0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfdGltZXMuYworKysgYi9zcmMvY29yZS9uZ3hfdGltZXMuYwpAQCAtOTQsNyArOTQsNyBAQAogICAgIG5neF9vbGRfZWxhcHNlZF9tc2VjID0gMDsKICAgICBuZ3hfZWxhcHNlZF9tc2VjID0gMDsKIAotI2lmICEoV0lOMzIpCisjaWYgIShOR1hfV0lOMzIpCiAgICAgdHpzZXQoKTsKICNlbmRpZgogCkBAIC0xNTAsMTUgKzE1MCwxNCBAQAogCiAgICAgcCA9IGNhY2hlZF9odHRwX3RpbWVbc2xvdF07CiAKLSAgICBuZ3hfc25wcmludGYoKGNoYXIgKikgcCwgc2l6ZW9mKCJNb24sIDI4IFNlcCAxOTcwIDA2OjAwOjAwIEdNVCIpLAotICAgICAgICAgICAgICAgICAiJXMsICUwMmQgJXMgJTRkICUwMmQ6JTAyZDolMDJkIEdNVCIsCi0gICAgICAgICAgICAgICAgIHdlZWtbbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX3dkYXldLAotICAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fbWRheSwKLSAgICAgICAgICAgICAgICAgbW9udGhzW25neF9jYWNoZWRfZ210aW1lLm5neF90bV9tb24gLSAxXSwKLSAgICAgICAgICAgICAgICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX3llYXIsCi0gICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9ob3VyLAotICAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fbWluLAotICAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fc2VjKTsKKyAgICBuZ3hfc3ByaW50ZihwLCAiJXMsICUwMmQgJXMgJTRkICUwMmQ6JTAyZDolMDJkIEdNVCIsCisgICAgICAgICAgICAgICAgd2Vla1tuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fd2RheV0sCisgICAgICAgICAgICAgICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX21kYXksCisgICAgICAgICAgICAgICAgbW9udGhzW25neF9jYWNoZWRfZ210aW1lLm5neF90bV9tb24gLSAxXSwKKyAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1feWVhciwKKyAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1faG91ciwKKyAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fbWluLAorICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9zZWMpOwogCiAgICAgbmd4X2NhY2hlZF9odHRwX3RpbWUuZGF0YSA9IHA7CiAKQEAgLTE4MywyNCArMTgyLDIyIEBACiAKICAgICBwID0gY2FjaGVkX2Vycl9sb2dfdGltZVtzbG90XTsKIAotICAgIG5neF9zbnByaW50ZigoY2hhciAqKSBwLCBzaXplb2YoIjE5NzAvMDkvMjggMTI6MDA6MDAiKSwKLSAgICAgICAgICAgICAgICAgIiU0ZC8lMDJkLyUwMmQgJTAyZDolMDJkOiUwMmQiLAotICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwgdG0ubmd4X3RtX21vbiwKLSAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21kYXksIHRtLm5neF90bV9ob3VyLAotICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWluLCB0bS5uZ3hfdG1fc2VjKTsKKyAgICBuZ3hfc3ByaW50ZihwLCAiJTRkLyUwMmQvJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCisgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3llYXIsIHRtLm5neF90bV9tb24sCisgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21kYXksIHRtLm5neF90bV9ob3VyLAorICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sIHRtLm5neF90bV9zZWMpOwogCiAgICAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWUuZGF0YSA9IHA7CiAKIAogICAgIHAgPSBjYWNoZWRfaHR0cF9sb2dfdGltZVtzbG90XTsKIAotICAgIG5neF9zbnByaW50ZigoY2hhciAqKSBwLCBzaXplb2YoIjI4L1NlcC8xOTcwOjEyOjAwOjAwICswNjAwIiksCi0gICAgICAgICAgICAgICAgICIlMDJkLyVzLyVkOiUwMmQ6JTAyZDolMDJkICVjJTAyZCUwMmQiLAotICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWRheSwgbW9udGhzW3RtLm5neF90bV9tb24gLSAxXSwKLSAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3llYXIsIHRtLm5neF90bV9ob3VyLAotICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWluLCB0bS5uZ3hfdG1fc2VjLAotICAgICAgICAgICAgICAgICBuZ3hfZ210b2ZmIDwgMCA/ICctJyA6ICcrJywKLSAgICAgICAgICAgICAgICAgYWJzKG5neF9nbXRvZmYgLyA2MCksIGFicyhuZ3hfZ210b2ZmICUgNjApKTsKKyAgICBuZ3hfc3ByaW50ZihwLCAiJTAyZC8lcy8lZDolMDJkOiUwMmQ6JTAyZCAlYyUwMmQlMDJkIiwKKyAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWRheSwgbW9udGhzW3RtLm5neF90bV9tb24gLSAxXSwKKyAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwgdG0ubmd4X3RtX2hvdXIsCisgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwgdG0ubmd4X3RtX3NlYywKKyAgICAgICAgICAgICAgICBuZ3hfZ210b2ZmIDwgMCA/ICctJyA6ICcrJywKKyAgICAgICAgICAgICAgICBhYnMobmd4X2dtdG9mZiAvIDYwKSwgYWJzKG5neF9nbXRvZmYgJSA2MCkpOwogCiAgICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lLmRhdGEgPSBwOwogCkBAIC0yMTMsOSArMjEwLDYgQEAKIAogCiB1X2NoYXIgKm5neF9odHRwX3RpbWUodV9jaGFyICpidWYsIHRpbWVfdCB0KQotI2lmIDAKLXNpemVfdCBuZ3hfaHR0cF90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCkKLSNlbmRpZgogewogICAgIG5neF90bV90ICB0bTsKIApAQCAtMjI5LDI1ICsyMjMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX2hvdXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9zZWMpOwotCi0jaWYgMAotICAgIHJldHVybiBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLCBzaXplb2YoIk1vbiwgMjggU2VwIDE5NzAgMDY6MDA6MDAgR01UIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1t0bS5uZ3hfdG1fd2RheV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbdG0ubmd4X3RtX21vbiAtIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX2hvdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9zZWMpOwotI2VuZGlmCiB9CiAKIAogdV9jaGFyICpuZ3hfaHR0cF9jb29raWVfdGltZSh1X2NoYXIgKmJ1ZiwgdGltZV90IHQpCi0jaWYgMAotc2l6ZV90IG5neF9odHRwX2Nvb2tpZV90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCkKLSNlbmRpZgogewogICAgIG5neF90bV90ICB0bTsKIApAQCAtMjcwLDMyICsyNDksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1faG91ciwKICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwKICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3NlYyk7Ci0KLSNpZiAwCi0gICAgaWYgKHRtLm5neF90bV95ZWFyID4gMjAzNykgewotICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJNb24sIDI4LVNlcC0xOTcwIDA2OjAwOjAwIEdNVCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMsICUwMmQtJXMtJWQgJTAyZDolMDJkOiUwMmQgR01UIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla1t0bS5uZ3hfdG1fd2RheV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbdG0ubmd4X3RtX21vbiAtIDFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX2hvdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9zZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIk1vbiwgMjgtU2VwLTcwIDA2OjAwOjAwIEdNVCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMsICUwMmQtJXMtJTAyZCAlMDJkOiUwMmQ6JTAyZCBHTVQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrW3RtLm5neF90bV93ZGF5XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21kYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoc1t0bS5uZ3hfdG1fbW9uIC0gMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyICUgMTAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1faG91ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX21pbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX3NlYyk7Ci0gICAgfQotI2VuZGlmCiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Fpb19tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9haW9fbW9kdWxlLmMKaW5kZXggNDgzZDY3NS4uMzk4YzU3MSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Fpb19tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfYWlvX21vZHVsZS5jCkBAIC0xMTAsNiArMTEwLDEwIEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCisgICAgaWYgKGZsYWdzICYgTkdYX0NMT1NFX0VWRU5UKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCiAgICAgcmMgPSBhaW9fY2FuY2VsKGMtPmZkLCBOVUxMKTsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgImFpb19jYW5jZWw6ICVkIiwgcmMpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwppbmRleCBlYTFkMTliLi42NjNlMmJmIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAjaWYgKE5HWF9ERUJVRykKICAgICBjID0gZXYtPmRhdGE7CiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiZGV2cG9sbCBhZGQgZXZlbnQ6IGZkOiVkIGV2OiUwNFgiLCBjLT5mZCwgZXZlbnQpOworICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGFkZCBldmVudDogZmQ6JWQgZXY6JTA0WGQiLCBjLT5mZCwgZXZlbnQpOwogI2VuZGlmCiAKICAgICBldi0+YWN0aXZlID0gMTsKQEAgLTIyOSw3ICsyMjksNyBAQAogI2VuZGlmCiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGRlbCBldmVudDogZmQ6JWQgZXY6JTA0WCIsIGMtPmZkLCBldmVudCk7CisgICAgICAgICAgICAgICAgICAgImRldnBvbGwgZGVsIGV2ZW50OiBmZDolZCBldjolMDRYZCIsIGMtPmZkLCBldmVudCk7CiAKICAgICBpZiAobmd4X2RldnBvbGxfc2V0X2V2ZW50KGV2LCBQT0xMUkVNT1ZFLCBmbGFncykgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CkBAIC0yNjgsNyArMjY4LDcgQEAKICAgICBjID0gZXYtPmRhdGE7CiAKICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGZkOiVkIGV2OiUwNFggZmw6JTA0WCIsIGMtPmZkLCBldmVudCwgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIGZkOiVkIGV2OiUwNFhkIGZsOiUwNFhkIiwgYy0+ZmQsIGV2ZW50LCBmbGFncyk7CiAKICAgICBpZiAobmNoYW5nZXMgPj0gbWF4X2NoYW5nZXMpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGV2LT5sb2csIDAsCkBAIC00NTMsMTMgKzQ1MywxMyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImRldnBvbGw6IGZkOiVkLCBldjolMDRYLCByZXY6JTA0WCIsCisgICAgICAgICAgICAgICAgICAgICAgICJkZXZwb2xsOiBmZDolZCwgZXY6JTA0WGQsIHJldjolMDRYZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uZmQsCiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCBldmVudF9saXN0W2ldLnJldmVudHMpOwogCiAgICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMgJiAoUE9MTEVSUnxQT0xMSFVQfFBPTExOVkFMKSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW9jdGwoRFBfUE9MTCkgZXJyb3IgZmQ6JWQgZXY6JTA0WCByZXY6JTA0WCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpb2N0bChEUF9QT0xMKSBlcnJvciBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKICAgICAgICAgfQpAQCAtNDY4LDcgKzQ2OCw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmFuZ2UgaW9jdGwoRFBfUE9MTCkgZXZlbnRzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImZkOiVkIGV2OiUwNFggcmV2OiUwNFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZmQ6JWQgZXY6JTA0WGQgcmV2OiUwNFhkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5mZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0ucmV2ZW50cyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwppbmRleCA0NTc5MWU5Li44MDk2OTMyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCkBAIC0yMzIsNyArMjMyLDcgQEAKICAgICBlZS5kYXRhLnB0ciA9ICh2b2lkICopICgodWludHB0cl90KSBjIHwgZXYtPmluc3RhbmNlKTsKIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImVwb2xsIGFkZCBldmVudDogZmQ6JWQgb3A6JWQgZXY6JTA4WCIsCisgICAgICAgICAgICAgICAgICAgImVwb2xsIGFkZCBldmVudDogZmQ6JWQgb3A6JWQgZXY6JTA4WEQiLAogICAgICAgICAgICAgICAgICAgIGMtPmZkLCBvcCwgZWUuZXZlbnRzKTsKIAogICAgIGlmIChlcG9sbF9jdGwoZXAsIG9wLCBjLT5mZCwgJmVlKSA9PSAtMSkgewpAQCAtMjkxLDcgKzI5MSw3IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiZXBvbGwgZGVsIGV2ZW50OiBmZDolZCBvcDolZCBldjolMDhYIiwKKyAgICAgICAgICAgICAgICAgICAiZXBvbGwgZGVsIGV2ZW50OiBmZDolZCBvcDolZCBldjolMDhYRCIsCiAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIG9wLCBlZS5ldmVudHMpOwogCiAgICAgaWYgKGVwb2xsX2N0bChlcCwgb3AsIGMtPmZkLCAmZWUpID09IC0xKSB7CkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICBlZS5kYXRhLnB0ciA9ICh2b2lkICopICgodWludHB0cl90KSBjIHwgYy0+cmVhZC0+aW5zdGFuY2UpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJlcG9sbCBhZGQgY29ubmVjdGlvbjogZmQ6JWQgZXY6JTA4WCIsIGMtPmZkLCBlZS5ldmVudHMpOworICAgICAgICAgICAgICAgICAgICJlcG9sbCBhZGQgY29ubmVjdGlvbjogZmQ6JWQgZXY6JTA4WEQiLCBjLT5mZCwgZWUuZXZlbnRzKTsKIAogICAgIGlmIChlcG9sbF9jdGwoZXAsIEVQT0xMX0NUTF9BREQsIGMtPmZkLCAmZWUpID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBuZ3hfZXJybm8sCkBAIC01MTMsNyArNTEzLDcgQEAKICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsOiBzdGFsZSBldmVudCAiIFBUUl9GTVQsIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsOiBzdGFsZSBldmVudCAlcCIsIGMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNTIyLDE4ICs1MjIsMTggQEAKICNlbmRpZgogCiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsOiBmZDolZCBldjolMDRYIGQ6IiBQVFJfRk1ULAorICAgICAgICAgICAgICAgICAgICAgICAiZXBvbGw6IGZkOiVkIGV2OiUwNFhEIGQ6JXAiLAogICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMsIGV2ZW50X2xpc3RbaV0uZGF0YSk7CiAKICAgICAgICAgaWYgKGV2ZW50X2xpc3RbaV0uZXZlbnRzICYgKEVQT0xMRVJSfEVQT0xMSFVQKSkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImVwb2xsX3dhaXQoKSBlcnJvciBvbiBmZDolZCBldjolMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcG9sbF93YWl0KCkgZXJyb3Igb24gZmQ6JWQgZXY6JTA0WEQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChldmVudF9saXN0W2ldLmV2ZW50cyAmIH4oRVBPTExJTnxFUE9MTE9VVHxFUE9MTEVSUnxFUE9MTEhVUCkpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYW5nZSBlcG9sbF93YWl0KCkgZXZlbnRzIGZkOiVkIGV2OiUwNFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyYW5nZSBlcG9sbF93YWl0KCkgZXZlbnRzIGZkOiVkIGV2OiUwNFhEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIGV2ZW50X2xpc3RbaV0uZXZlbnRzKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9pb2NwX21vZHVsZS5jCmluZGV4IDFkMTVjOTMuLjRhM2NkOWYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9pb2NwX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9pb2NwX21vZHVsZS5jCkBAIC04Miw3ICs4Miw3IEBACiAgICAgbmd4X292ZXJsYXBwZWRfd3NhcmVjdiwKICAgICBOVUxMLAogICAgIE5VTEwsCi0gICAgbmd4X3dzYXNlbmRfY2hhaW4sCisgICAgbmd4X292ZXJsYXBwZWRfd3Nhc2VuZF9jaGFpbiwKICAgICAwCiB9OwogCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICBjLT53cml0ZS0+YWN0aXZlID0gMTsKIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImlvY3AgYWRkOiBmZDolZCBrOiVkIG92OiIgUFRSX0ZNVCwgYy0+ZmQsIGtleSwgJmV2LT5vdmxwKTsKKyAgICAgICAgICAgICAgICAgICAiaW9jcCBhZGQ6IGZkOiVkIGs6JWQgb3Y6JXAiLCBjLT5mZCwga2V5LCAmZXYtPm92bHApOwogCiAgICAgaWYgKENyZWF0ZUlvQ29tcGxldGlvblBvcnQoKEhBTkRMRSkgYy0+ZmQsIGlvY3AsIGtleSwgMCkgPT0gTlVMTCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgbmd4X2Vycm5vLApAQCAtMTUyLDEwICsxNTIsMTYgQEAKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaW9jcF9kZWxfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2ludCBmbGFncykKIHsKKyNpZiAwCisgICAgaWYgKGZsYWdzICYgTkdYX0NMT1NFX0VWRU5UKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCiAgICAgaWYgKENhbmNlbElvKChIQU5ETEUpIGMtPmZkKSA9PSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBuZ3hfZXJybm8sICJDYW5jZWxJbygpIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KKyNlbmRpZgogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTE5NSwxMiArMjAxLDE5IEBACiAgICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CiAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJpb2NwOiAlZCBiOiVkIGs6JWQgb3Y6IiBQVFJfRk1ULCByYywgYnl0ZXMsIGtleSwgb3ZscCk7CisgICAgICAgICAgICAgICAgICAgImlvY3A6ICVkIGI6JWQgazolZCBvdjolcCIsIHJjLCBieXRlcywga2V5LCBvdmxwKTsKIAogICAgIGRlbHRhID0gbmd4X2VsYXBzZWRfbXNlYzsKICAgICBuZ3hfZWxhcHNlZF9tc2VjID0gKG5neF9lcG9jaF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgdHYudHZfdXNlYyAvIDEwMDAgLSBuZ3hfc3RhcnRfbXNlYzsKIAorICAgIGlmICh0aW1lciAhPSBJTkZJTklURSkgeworICAgICAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWMgLSBkZWx0YTsKKworICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiaW9jcCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7CisgICAgfQorCiAgICAgaWYgKGVycikgewogICAgICAgICBpZiAob3ZscCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoZXJyICE9IFdBSVRfVElNRU9VVCkgewpAQCAtMjEwLDQ5ICsyMjMsNzYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvdmxwLT5lcnJvciA9IGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICh0aW1lciAhPSBJTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9lbGFwc2VkX21zZWMgLSBkZWx0YTsKLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaW9jcCB0aW1lcjogJWQsIGRlbHRhOiAlZCIsIHRpbWVyLCAoaW50KSBkZWx0YSk7Ci0gICAgfQotCi0gICAgaWYgKG92bHApIHsKLSAgICAgICAgZXYgPSBvdmxwLT5ldmVudDsKLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaW9jcCBldmVudDoiIFBUUl9GTVQsIGV2KTsKLQotICAgICAgICBzd2l0Y2ggKGtleSkgewotCi0gICAgICAgIGNhc2UgTkdYX0lPQ1BfQUNDRVBUOgotICAgICAgICAgICAgaWYgKGJ5dGVzKSB7Ci0gICAgICAgICAgICAgICAgZXYtPnJlYWR5ID0gMTsKKyAgICAgICAgICAgIGlmICh0aW1lciAhPSBJTkZJTklURSAmJiBkZWx0YSkgeworICAgICAgICAgICAgICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKChuZ3hfbXNlY190KSBkZWx0YSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIE5HWF9JT0NQX0lPOgotICAgICAgICAgICAgZXYtPmNvbXBsZXRlID0gMTsKLSAgICAgICAgICAgIGV2LT5yZWFkeSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE5HWF9JT0NQX0NPTk5FQ1Q6Ci0gICAgICAgICAgICBldi0+cmVhZHkgPSAxOworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCi0gICAgICAgIGV2LT5hdmFpbGFibGUgPSBieXRlczsKLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaW9jcCBldmVudCBoYW5kbGVyOiAiIFBUUl9GTVQsIGV2LT5ldmVudF9oYW5kbGVyKTsKLQotICAgICAgICBldi0+ZXZlbnRfaGFuZGxlcihldik7CisgICAgICAgIG92bHAtPmVycm9yID0gZXJyOwogICAgIH0KIAorICAgIGlmIChvdmxwID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgcmV0dXJuZWQgbm8gb3BlcmF0aW9uIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisKKyAgICBldiA9IG92bHAtPmV2ZW50OworCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgZXJyLCAiaW9jcCBldmVudDolcCIsIGV2KTsKKworCisgICAgaWYgKGVyciA9PSBFUlJPUl9ORVROQU1FX0RFTEVURUQgLyogdGhlIHNvY2tldCB3YXMgY2xvc2VkICovCisgICAgICAgIHx8IGVyciA9PSBFUlJPUl9PUEVSQVRJT05fQUJPUlRFRCAvKiB0aGUgb3BlcmF0aW9uIHdhcyBjYW5jZWxlZCAqLykKKyAgICB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhlIFdTQV9PUEVSQVRJT05fQUJPUlRFRCBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbgorICAgICAgICAgKiBmb3IgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkCisgICAgICAgICAqLworCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgImlvY3A6IGFib3J0ZWQgZXZlbnQgJXAiLCBldik7IAorCisgICAgICAgIGlmICh0aW1lciAhPSBJTkZJTklURSAmJiBkZWx0YSkgeworICAgICAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKG5neF9tc2VjX3QpIGRlbHRhKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKGVycikgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAiR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cygpIHJldHVybmVkIG9wZXJhdGlvbiBlcnJvciIpOworICAgIH0KKworICAgIHN3aXRjaCAoa2V5KSB7CisKKyAgICBjYXNlIE5HWF9JT0NQX0FDQ0VQVDoKKyAgICAgICAgaWYgKGJ5dGVzKSB7CisgICAgICAgICAgICBldi0+cmVhZHkgPSAxOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOR1hfSU9DUF9JTzoKKyAgICAgICAgZXYtPmNvbXBsZXRlID0gMTsKKyAgICAgICAgZXYtPnJlYWR5ID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5HWF9JT0NQX0NPTk5FQ1Q6CisgICAgICAgIGV2LT5yZWFkeSA9IDE7CisgICAgfQorCisgICAgZXYtPmF2YWlsYWJsZSA9IGJ5dGVzOworCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiaW9jcCBldmVudCBoYW5kbGVyOiAlcCIsIGV2LT5ldmVudF9oYW5kbGVyKTsKKworICAgIGV2LT5ldmVudF9oYW5kbGVyKGV2KTsKKwogICAgIGlmICh0aW1lciAhPSBJTkZJTklURSAmJiBkZWx0YSkgewogICAgICAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygobmd4X21zZWNfdCkgZGVsdGEpOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCmluZGV4IGU2YmViYjUuLmUwZmFlNmYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYwpAQCAtMzY3LDcgKzM2Nyw3IEBACiAgICAgYyA9IGV2LT5kYXRhOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJrZXZlbnQgc2V0IGV2ZW50OiAlZDogZnQ6JWQgZmw6JTA0WCIsCisgICAgICAgICAgICAgICAgICAgImtldmVudCBzZXQgZXZlbnQ6ICVkOiBmdDolZCBmbDolMDRYZCIsCiAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIGZpbHRlciwgZmxhZ3MpOwogCiAgICAgaWYgKG5jaGFuZ2VzID49IG1heF9jaGFuZ2VzKSB7CkBAIC01OTksNyArNTk5LDcgQEAKICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudDogc3RhbGUgZXZlbnQgIiBQVFJfRk1ULCBldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudDogc3RhbGUgZXZlbnQgJXAiLCBldik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTc3Niw5ICs3NzYsOCBAQAogewogICAgIG5neF9sb2dfZGVidWc2KE5HWF9MT0dfREVCVUdfRVZFTlQsIGxvZywgMCwKICAgICAgICAgICAgICAgICAgICAoa2V2LT5pZGVudCA+IDB4ODAwMDAwMCAmJiBrZXYtPmlkZW50ICE9ICh1bnNpZ25lZCkgLTEpID8KLSAgICAgICAgICAgICAgICAgICAgImtldmVudDogIiBQVFJfRk1UICI6IGZ0OiVkIGZsOiUwNFggZmY6JTA4WCBkOiVkIHVkOiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFRSX0ZNVDoKLSAgICAgICAgICAgICAgICAgICAgImtldmVudDogJWQ6IGZ0OiVkIGZsOiUwNFggZmY6JTA4WCBkOiVkIHVkOiIgUFRSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAgImtldmVudDogJXA6IGZ0OiVkIGZsOiUwNFhkIGZmOiUwOFhkIGQ6JWQgdWQ6JXAiOgorICAgICAgICAgICAgICAgICAgICAia2V2ZW50OiAlZDogZnQ6JWQgZmw6JTA0WGQgZmY6JTA4WGQgZDolZCB1ZDolcCIsCiAgICAgICAgICAgICAgICAgICAgIGtldi0+aWRlbnQsIGtldi0+ZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICBrZXYtPmZsYWdzLCBrZXYtPmZmbGFncywKICAgICAgICAgICAgICAgICAgICAga2V2LT5kYXRhLCBrZXYtPnVkYXRhKTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKaW5kZXggYmY3OGU4Zi4uMThmNzJjMyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogICAgIGlmIChjeWNsZS0+bG9nLT5sb2dfbGV2ZWwgJiBOR1hfTE9HX0RFQlVHX0FMTCkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmV2ZW50czsgaSsrKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvbGw6ICVkOiBmZDolZCBldjolMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb2xsOiAlZDogZmQ6JWQgZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZXZlbnRfbGlzdFtpXS5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzgwLDEzICszODAsMTMgQEAKIAogI2lmIDAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInBvbGw6ICVkOiBmZDolZCBldjolMDRYIHJldjolMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInBvbGw6ICVkOiBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICBpLCBldmVudF9saXN0W2ldLmZkLAogICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKICNlbHNlCiAgICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMpIHsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicG9sbDogJWQ6IGZkOiVkIGV2OiUwNFggcmV2OiUwNFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvbGw6ICVkOiBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgZXZlbnRfbGlzdFtpXS5mZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2xpc3RbaV0uZXZlbnRzLCBldmVudF9saXN0W2ldLnJldmVudHMpOwogICAgICAgICB9CkBAIC0zOTQsNyArMzk0LDcgQEAKIAogICAgICAgICBpZiAoZXZlbnRfbGlzdFtpXS5yZXZlbnRzICYgUE9MTE5WQUwpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInBvbGwoKSBlcnJvciBmZDolZCBldjolMDRYIHJldjolMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInBvbGwoKSBlcnJvciBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKICAgICAgICAgfQpAQCAtNDAyLDcgKzQwMiw3IEBACiAgICAgICAgIGlmIChldmVudF9saXN0W2ldLnJldmVudHMgJiB+KFBPTExJTnxQT0xMT1VUfFBPTExFUlJ8UE9MTEhVUHxQT0xMTlZBTCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmFuZ2UgcG9sbCgpIGV2ZW50cyBmZDolZCBldjolMDRYIHJldjolMDRYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmFuZ2UgcG9sbCgpIGV2ZW50cyBmZDolZCBldjolMDRYZCByZXY6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmZkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9saXN0W2ldLmV2ZW50cywgZXZlbnRfbGlzdFtpXS5yZXZlbnRzKTsKICAgICAgICAgfQpAQCAtNTI5LDcgKzUyOSw3IEBACiAgICAgZm9yICggOzsgKSB7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0IGV2ZW50ICIgUFRSX0ZNVCwgZXYpOworICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQgZXZlbnQgJXAiLCBldik7CiAKICAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCmluZGV4IDRmMmY0ODAuLjNjMGVhOTUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKQEAgLTM4Myw3ICszODMsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGVyciA9IDA7CiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJydHNpZyBzaWdubzolZCBmZDolZCBiYW5kOiVYIiwKKyAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIHNpZ25vOiVkIGZkOiVkIGJhbmQ6JTA0WGQiLAogICAgICAgICAgICAgICAgICAgICAgICBzaWdubywgc2kuc2lfZmQsIHNpLnNpX2JhbmQpOwogICAgIH0KIApAQCAtNDM0LDcgKzQzNCw3IEBACiAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnOiBzdGFsZSBldmVudCAiIFBUUl9GTVQsIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnOiBzdGFsZSBldmVudCAlcCIsIGMpOwogCiAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYwppbmRleCAwNmNhNGIzLi4xNGU2ZjgxIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHN0YXRpYyBmZF9zZXQgICAgICAgICB3b3JrX3JlYWRfZmRfc2V0Owogc3RhdGljIGZkX3NldCAgICAgICAgIHdvcmtfd3JpdGVfZmRfc2V0OwogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiBzdGF0aWMgaW50ICAgICAgICAgICAgbWF4X3JlYWQ7CiBzdGF0aWMgaW50ICAgICAgICAgICAgbWF4X3dyaXRlOwogI2Vsc2UKQEAgLTExNCw3ICsxMTQsNyBAQAogCiAgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVHxOR1hfVVNFX09ORVNIT1RfRVZFTlQ7CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICBtYXhfcmVhZCA9IG1heF93cml0ZSA9IDA7CiAjZWxzZQogICAgIG1heF9mZCA9IC0xOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAKICAgICBpZiAoKGV2ZW50ID09IE5HWF9SRUFEX0VWRU5UKSAmJiAobWF4X3JlYWQgPj0gRkRfU0VUU0laRSkKICAgICAgICAgfHwgKGV2ZW50ID09IE5HWF9XUklURV9FVkVOVCkgJiYgKG1heF93cml0ZSA+PSBGRF9TRVRTSVpFKSkKQEAgLTIxMSw3ICsyMTEsNyBAQAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBkZWwgZXZlbnQgZmQ6JWQgZXY6JWQiLCBjLT5mZCwgZXZlbnQpOwogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAKICAgICBpZiAoZXZlbnQgPT0gTkdYX1JFQURfRVZFTlQpIHsKICAgICAgICAgRkRfQ0xSKGMtPmZkLCAmbWFzdGVyX3JlYWRfZmRfc2V0KTsKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAgICAgZXhwaXJlID0gMTsKIAotI2lmICEoV0lOMzIpCisjaWYgIShOR1hfV0lOMzIpCiAKICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewogICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKQEAgLTMyNCw3ICszMjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCBldmVudDogZmQ6JWQgd3I6JWQiLCBjLT5mZCwgZXYtPndyaXRlKTsKICAgICAgICAgfQogCi0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIm1heF9mZDogJWQiLCBtYXhfZmQpOwogI2VuZGlmCkBAIC0zNDgsOSArMzQ4LDkgQEAKICAgICB3b3JrX3dyaXRlX2ZkX3NldCA9IG1hc3Rlcl93cml0ZV9mZF9zZXQ7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJzZWxlY3QgcmVhZCBmZF9zZXQ6ICUwOFgiLCAqKGludCAqKSAmd29ya19yZWFkX2ZkX3NldCk7CisgICAgICAgICAgICAgICAgICAgInNlbGVjdCByZWFkIGZkX3NldDogJTA4WGQiLCAqKGludCAqKSAmd29ya19yZWFkX2ZkX3NldCk7CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICByZWFkeSA9IHNlbGVjdCgwLCAmd29ya19yZWFkX2ZkX3NldCwgJndvcmtfd3JpdGVfZmRfc2V0LCBOVUxMLCB0cCk7CiAjZWxzZQogICAgIHJlYWR5ID0gc2VsZWN0KG1heF9mZCArIDEsICZ3b3JrX3JlYWRfZmRfc2V0LCAmd29ya193cml0ZV9mZF9zZXQsIE5VTEwsIHRwKTsKQEAgLTQzMyw3ICs0MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICJzZWxlY3QgcmVhZHkgJWQiLCByZWFkeSk7CiAKICAgICBpZiAoZXJyKSB7Ci0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXJyLCAic2VsZWN0KCkgZmFpbGVkIik7CiAjZWxzZQogICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCkBAIC01MzQsNyArNTM0LDcgQEAKICAgICBmb3IgKCA7OyApIHsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQgZXZlbnQgIiBQVFJfRk1ULCBldik7CisgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCBldmVudCAlcCIsIGV2KTsKIAogICAgICAgICBpZiAoZXYgPT0gTlVMTCkgewogICAgICAgICAgICAgYnJlYWs7CkBAIC01OTcsNyArNTk3LDcgQEAKIAogICAgIC8qIGRpc2FibGUgd2FybmluZzogdGhlIGRlZmF1bHQgRkRfU0VUU0laRSBpcyAxMDI0VSBpbiBGcmVlQlNEIDUueCAqLwogCi0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKICAgICBpZiAoKHVuc2lnbmVkKSBlY2YtPmNvbm5lY3Rpb25zID4gRkRfU0VUU0laRSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgInRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyAiCkBAIC02MDYsNyArNjA2LDcgQEAKICAgICB9CiAjZW5kaWYKIAotI2lmIChOR1hfVEhSRUFEUykKKyNpZiAoTkdYX1RIUkVBRFMpICYmICEoTkdYX1dJTjMyKQogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZSB0aHJlYWRlZCBtb2RlIik7CiAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IGYwMDZjNmIuLjU2M2NmNDIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiBzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9tb2R1bGVfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7Ci0jaWYgIShXSU4zMikKKyNpZiAhKE5HWF9XSU4zMikKIAogICAgIHNpemVfdCAgICAgICAgICAgICBzaXplOwogICAgIGNoYXIgICAgICAgICAgICAgICpzaGFyZWQ7CkBAIC0yNDAsNyArMjQwLDcgQEAKICNlbmRpZgogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY291bnRlcjogIiBQVFJfRk1UICIsICVkIiwKKyAgICAgICAgICAgICAgICAgICAiY291bnRlcjogJXAsICVkIiwKICAgICAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAqbmd4X2Nvbm5lY3Rpb25fY291bnRlcik7CiAKICNlbmRpZgpAQCAtMjU5LDcgKzI1OSw3IEBACiAgICAgbmd4X2NvcmVfY29uZl90ICAgICAqY2NmOwogICAgIG5neF9ldmVudF9jb25mX3QgICAgKmVjZjsKICAgICBuZ3hfZXZlbnRfbW9kdWxlX3QgICptb2R1bGU7Ci0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgbmd4X2lvY3BfY29uZl90ICAgICAqaW9jcGNmOwogI2VuZGlmCiAKQEAgLTM1Miw3ICszNTIsNyBAQAogCiAgICAgICAgIGZkID0gc1tpXS5mZDsKIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogICAgICAgICAvKgogICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAogICAgICAgICAgKiBzbyB0byBmaW5kIGEgY29ubmVjdGlvbiB3ZSBkaXZpZGUgYSBzb2NrZXQgbnVtYmVyIGJ5IDQuCkBAIC00MTIsMTAgKzQxMiwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKIAogICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9JT0NQX0VWRU5UKSB7Ci0gICAgICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSAmbmd4X2V2ZW50X2FjY2VwdGV4OworICAgICAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdGV4OwogCiAgICAgICAgICAgICBpZiAobmd4X2FkZF9ldmVudChyZXYsIDAsIE5HWF9JT0NQX0FDQ0VQVCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTQyOSw3ICs0MjksOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSAmbmd4X2V2ZW50X2FjY2VwdDsKKyAgICAgICAgICAgIHJldi0+ZXZlbnRfaGFuZGxlciA9IG5neF9ldmVudF9hY2NlcHQ7CisKICAgICAgICAgICAgIGlmIChuZ3hfYWRkX2V2ZW50KHJldiwgTkdYX1JFQURfRVZFTlQsIDApID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CkBAIC00MzcsNyArNDM4LDcgQEAKIAogI2Vsc2UKIAotICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSAmbmd4X2V2ZW50X2FjY2VwdDsKKyAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdDsKIAogICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewogICAgICAgICAgICAgY29udGludWU7CkBAIC01ODAsNyArNTgxLDcgQEAKICAgICBlY2YtPmNvbm5lY3Rpb25zID0gbmd4X2F0b2kodmFsdWVbMV0uZGF0YSwgdmFsdWVbMV0ubGVuKTsKICAgICBpZiAoZWNmLT5jb25uZWN0aW9ucyA9PSAobmd4X3VpbnRfdCkgTkdYX0VSUk9SKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG51bWJlciBcIiVzXCIiLCB2YWx1ZVsxXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIG51bWJlciBcIiVWXCIiLCAmdmFsdWVbMV0pOwogCiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CkBAIC02MzEsMTIgKzYzMiwxMiBAQAogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIndoZW4gdGhlIHNlcnZlciBydW5zIHdpdGhvdXQgYSBtYXN0ZXIgcHJvY2VzcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAidGhlIFwiJXNcIiBldmVudCB0eXBlIG11c3QgYmUgdGhlIHNhbWUgYXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBcIiVWXCIgZXZlbnQgdHlwZSBtdXN0IGJlIHRoZSBzYW1lIGFzICIKICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBwcmV2aW91cyBjb25maWd1cmF0aW9uIC0gXCIlc1wiICIKICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgaXQgY2FuIG5vdCBiZSBjaGFuZ2VkIG9uIHRoZSBmbHksICIKICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBjaGFuZ2UgaXQgeW91IG5lZWQgdG8gc3RvcCBzZXJ2ZXIgIgogICAgICAgICAgICAgICAgICAgICAgICAgImFuZCBzdGFydCBpdCBhZ2FpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXS5kYXRhLCBvbGRfZWNmLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVsxXSwgb2xkX2VjZi0+bmFtZSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KQEAgLTY0Nyw3ICs2NDgsNyBAQAogICAgIH0KIAogICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgZXZlbnQgdHlwZSBcIiVzXCIiLCB2YWx1ZVsxXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgZXZlbnQgdHlwZSBcIiVWXCIiLCAmdmFsdWVbMV0pOwogCiAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogfQpAQCAtNjgxLDcgKzY4Miw3IEBACiAKICAgICBpZiAoaCA9PSBOVUxMIHx8IGgtPmhfYWRkcl9saXN0WzBdID09IE5VTEwpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3QgJXMgbm90IGZvdW5kIiwgdmFsdWVbMV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdCBcIiVzXCIgbm90IGZvdW5kIiwgdmFsdWVbMV0uZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKQEAgLTc1NSw3ICs3NTYsNyBAQAogCiAjZWxpZiAoSEFWRV9TRUxFQ1QpCiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+Y29ubmVjdGlvbnMsIERFRkFVTFRfQ09OTkVDVElPTlMpOwogI2Vsc2UKICAgICBuZ3hfY29uZl9pbml0X3Vuc2lnbmVkX3ZhbHVlKGVjZi0+Y29ubmVjdGlvbnMsCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKaW5kZXggZjM0MWExNC4uMTkxYjQ5MiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaApAQCAtODEsNyArODEsNyBAQAogICAgIHVuc2lnbmVkICAgICAgICAgcG9zdGVkX3JlYWR5OjE7CiAjZW5kaWYKIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogICAgIC8qIHNldHNvY2tvcHQoU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUKSB3YXMgc3VjY2VzZnVsbCAqLwogICAgIHVuc2lnbmVkICAgICAgICAgYWNjZXB0X2NvbnRleHRfdXBkYXRlZDoxOwogI2VuZGlmCkBAIC00NzMsNyArNDczLDcgQEAKIG5neF9pbnRfdCBuZ3hfZW5hYmxlX2FjY2VwdF9ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIAogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiB2b2lkIG5neF9ldmVudF9hY2NlcHRleChuZ3hfZXZlbnRfdCAqZXYpOwogaW50IG5neF9ldmVudF9wb3N0X2FjY2VwdGV4KG5neF9saXN0ZW5pbmdfdCAqbHMsIGludCBuKTsKICNlbmRpZgpAQCAtNDkwLDcgKzQ5MCw3IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50X3Bvc3RlZC5oPgogI2luY2x1ZGUgPG5neF9ldmVudF9idXN5X2xvY2suaD4KIAotI2lmIChXSU4zMikKKyNpZiAoTkdYX1dJTjMyKQogI2luY2x1ZGUgPG5neF9pb2NwX21vZHVsZS5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCmluZGV4IDlhZTVjY2QuLjA4NWE2NWUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwpAQCAtMTEsMTMgKzExLDEzIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGludCAgICAgIGZsYWc7Ci0gICAgdV9jaGFyICAqbmFtZTsKKyAgICBpbnQgICAgICAgICBmbGFnOworICAgIG5neF9zdHJfdCAgKm5hbWU7CiB9IG5neF9hY2NlcHRfbG9nX2N0eF90OwogCiAKIHN0YXRpYyB2b2lkIG5neF9jbG9zZV9hY2NlcHRlZF9zb2NrZXQobmd4X3NvY2tldF90IHMsIG5neF9sb2dfdCAqbG9nKTsKLXN0YXRpYyBzaXplX3Qgbmd4X2FjY2VwdF9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK3N0YXRpYyB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogCiB2b2lkIG5neF9ldmVudF9hY2NlcHQobmd4X2V2ZW50X3QgKmV2KQpAQCAtNDYsOCArNDYsOCBAQAogICAgIGxzID0gZXYtPmRhdGE7CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJhY2NlcHQgb24gJXMsIHJlYWR5OiAlZCIsCi0gICAgICAgICAgICAgICAgICAgbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LmRhdGEsIGV2LT5hdmFpbGFibGUpOworICAgICAgICAgICAgICAgICAgICJhY2NlcHQgb24gJVYsIHJlYWR5OiAlZCIsCisgICAgICAgICAgICAgICAgICAgJmxzLT5saXN0ZW5pbmctPmFkZHJfdGV4dCwgZXYtPmF2YWlsYWJsZSk7CiAKICAgICBldi0+cmVhZHkgPSAwOwogICAgIGFjY2VwdGVkID0gMDsKQEAgLTg4LDcgKzg4LDcgQEAKIAogICAgICAgICAvKiAtMSBkaXNhYmxlcyB0aGUgY29ubmVjdGlvbiBudW1iZXIgbG9nZ2luZyAqLwogICAgICAgICBjdHgtPmZsYWcgPSAtMTsKLSAgICAgICAgY3R4LT5uYW1lID0gbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LmRhdGE7CisgICAgICAgIGN0eC0+bmFtZSA9ICZscy0+bGlzdGVuaW5nLT5hZGRyX3RleHQ7CiAKICAgICAgICAgbG9nLT5kYXRhID0gY3R4OwogICAgICAgICBsb2ctPmhhbmRsZXIgPSBuZ3hfYWNjZXB0X2xvZ19lcnJvcjsKQEAgLTExNCw4ICsxMTQsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGV2LT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIG9uICVzIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5saXN0ZW5pbmctPmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIG9uICVWIGZhaWxlZCIsICZscy0+bGlzdGVuaW5nLT5hZGRyX3RleHQpOwogCiAgICAgICAgICAgICBpZiAoZXJyID09IE5HWF9FQ09OTkFCT1JURUQpIHsKICAgICAgICAgICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpIHsKQEAgLTE0NCwxMCArMTQzLDEwIEBACiAgICAgICAgIGlmICgobmd4X3VpbnRfdCkgcyA+PSBlY2YtPmNvbm5lY3Rpb25zKSB7CiAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIG9uICVzIHJldHVybmVkIHNvY2tldCAjJWQgd2hpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0KCkgb24gJVYgcmV0dXJuZWQgc29ja2V0ICMlZCB3aGlsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5ICVkIGNvbm5lY3Rpb25zIHdhcyBjb25maWd1cmVkLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9zaW5nIHRoZSBjb25uZWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LmRhdGEsIHMsIGVjZi0+Y29ubmVjdGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LCBzLCBlY2YtPmNvbm5lY3Rpb25zKTsKIAogICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX3NvY2tldChzLCBsb2cpOwogICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKQEAgLTE4NSw3ICsxODQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgLyoKICAgICAgICAgICogV2luc29jayBhc3NpZ25lcyBhIHNvY2tldCBudW1iZXIgZGl2aXNpYmxlIGJ5IDQKICAgICAgICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgpAQCAtMTkzLDkgKzE5Miw5IEBACiAKICAgICAgICAgaWYgKHMgJSA0KSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSBvbiAlcyByZXR1cm5lZCBzb2NrZXQgIyVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSBvbiAlViByZXR1cm5lZCBzb2NrZXQgIyVkLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZGl2aXNpYmxlIGJ5IDQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBscy0+bGlzdGVuaW5nLT5hZGRyX3RleHQuZGF0YSwgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICZscy0+bGlzdGVuaW5nLT5hZGRyX3RleHQsIHMpOwogICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgfQogCkBAIC00NjcsOSArNDY2LDkgQEAKIH0KIAogCi1zdGF0aWMgc2l6ZV90IG5neF9hY2NlcHRfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogICAgIG5neF9hY2NlcHRfbG9nX2N0eF90ICAqY3R4ID0gZGF0YTsKIAotICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJXMiLCBjdHgtPm5hbWUpOworICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJVYiLCBjdHgtPm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCmluZGV4IDk4NzdiM2IuLjQ4NjYzNmIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKQEAgLTE0LDIyICsxNCwyNCBAQAogewogICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCi0gICAgYyA9IChuZ3hfY29ubmVjdGlvbl90ICopIHJldi0+ZGF0YTsKKyAgICBjID0gcmV2LT5kYXRhOworCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAiQWNjZXB0RXg6ICVkIiwgYy0+ZmQpOwogCiAgICAgaWYgKHJldi0+b3ZscC5lcnJvcikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgYy0+bG9nLCByZXYtPm92bHAuZXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdEV4KCkgJXMgZmFpbGVkIiwgYy0+bGlzdGVuaW5nLT5hZGRyX3RleHQuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdEV4KCkgJVYgZmFpbGVkIiwgJmMtPmxpc3RlbmluZy0+YWRkcl90ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8qIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCBpcyByZXF1aXJlZCBmb3Igc2h1dGRvd24oKSB0byB3b3JrICovCiAKICAgICBpZiAoc2V0c29ja29wdChjLT5mZCwgU09MX1NPQ0tFVCwgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhULAotICAgICAgICAgICAgICAgICAgIChjaGFyICopJmMtPmxpc3RlbmluZy0+ZmQsIHNpemVvZihuZ3hfc29ja2V0X3QpKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAoY2hhciAqKSAmYy0+bGlzdGVuaW5nLT5mZCwgc2l6ZW9mKG5neF9zb2NrZXRfdCkpID09IC0xKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQpIGZhaWxlZCBmb3IgJXMiLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmFkZHJfdGV4dC5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQpIGZhaWxlZCBmb3IgJVYiLAorICAgICAgICAgICAgICAgICAgICAgICZjLT5hZGRyX3RleHQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGMtPmFjY2VwdF9jb250ZXh0X3VwZGF0ZWQgPSAxOwogICAgIH0KQEAgLTQ5LDYgKzUxLDIzIEBACiAgICAgICAgIGMtPmJ1ZmZlciA9IE5VTEw7CiAgICAgfQogCisgICAgaWYgKGMtPmxpc3RlbmluZy0+YWRkcl9udG9wKSB7CisgICAgICAgIGMtPmFkZHJfdGV4dC5kYXRhID0gbmd4X3BhbGxvYyhjLT5wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+bGlzdGVuaW5nLT5hZGRyX3RleHRfbWF4X2xlbik7CisgICAgICAgIGlmIChjLT5hZGRyX3RleHQuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBUT0RPOiBjbG9zZSBzb2NrZXQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGMtPmFkZHJfdGV4dC5sZW4gPSBuZ3hfc29ja19udG9wKGMtPmxpc3RlbmluZy0+ZmFtaWx5LCBjLT5zb2NrYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+YWRkcl90ZXh0LmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmxpc3RlbmluZy0+YWRkcl90ZXh0X21heF9sZW4pOworICAgICAgICBpZiAoYy0+YWRkcl90ZXh0LmxlbiA9PSAwKSB7CisgICAgICAgICAgICAvKiBUT0RPOiBjbG9zZSBzb2NrZXQgKi8KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIG5neF9ldmVudF9wb3N0X2FjY2VwdGV4KGMtPmxpc3RlbmluZywgMSk7CiAKICAgICBjLT5udW1iZXIgPSBuZ3hfYXRvbWljX2luYyhuZ3hfY29ubmVjdGlvbl9jb3VudGVyKTsKQEAgLTczLDEwICs5MiwxMCBAQAogCiAgICAgICAgIC8qIFRPRE86IGxvb2sgdXAgcmV1c2VkIHNvY2tldHMgKi8KIAotICAgICAgICBzID0gbmd4X3NvY2tldChscy0+ZmFtaWx5LCBscy0+dHlwZSwgbHMtPnByb3RvY29sLCBscy0+ZmxhZ3MpOworICAgICAgICBzID0gbmd4X3NvY2tldChscy0+ZmFtaWx5LCBscy0+dHlwZSwgbHMtPnByb3RvY29sKTsKIAotICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBscy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc29ja2V0X24gIiBzOiVkIGZsOiVkIiwgcywgbHMtPmZsYWdzKTsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgbHMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NvY2tldF9uICIgczolZCIsIHMpOwogCiAgICAgICAgIGlmIChzID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxzLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCkBAIC0xMDcsNDkgKzEyNiw2MCBAQAogICAgICAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwogICAgICAgICBuZ3hfbWVtemVybyh3ZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwogCi0gICAgICAgIHJldi0+aW5kZXggPSB3ZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7CisgICAgICAgIGMtPmxpc3RlbmluZyA9IGxzOworCisgICAgICAgIHJldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKKyAgICAgICAgd2V2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOwogCiAgICAgICAgIHJldi0+b3ZscC5ldmVudCA9IHJldjsKICAgICAgICAgd2V2LT5vdmxwLmV2ZW50ID0gd2V2OworICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfZXZlbnRfYWNjZXB0ZXg7CiAKLSAgICAgICAgcmV2LT5kYXRhID0gd2V2LT5kYXRhID0gYzsKKyAgICAgICAgcmV2LT5kYXRhID0gYzsKKyAgICAgICAgd2V2LT5kYXRhID0gYzsKKwogICAgICAgICBjLT5yZWFkID0gcmV2OwogICAgICAgICBjLT53cml0ZSA9IHdldjsKIAotICAgICAgICBjLT5saXN0ZW5pbmcgPSBsczsKICAgICAgICAgYy0+ZmQgPSBzOworICAgICAgICBjLT51bmV4cGVjdGVkX2VvZiA9IDE7CisKKyAgICAgICAgcmV2LT5yZWFkeSA9IDE7CisgICAgICAgIHdldi0+d3JpdGUgPSAxOworICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKIAogICAgICAgICBjLT5jdHggPSBscy0+Y3R4OwogICAgICAgICBjLT5zZXJ2ZXJzID0gbHMtPnNlcnZlcnM7CiAKLSAgICAgICAgYy0+dW5leHBlY3RlZF9lb2YgPSAxOwotICAgICAgICB3ZXYtPndyaXRlID0gMTsKLSAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdGV4OworICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CisgICAgICAgIGMtPnNlbmRfY2hhaW4gPSBuZ3hfc2VuZF9jaGFpbjsKIAotICAgICAgICByZXYtPnJlYWR5ID0gMTsKLSAgICAgICAgd2V2LT5yZWFkeSA9IDE7CisgICAgICAgIGlmICghKGMtPnBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2wobHMtPnBvb2xfc2l6ZSwgbHMtPmxvZykpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CiAKLSAgICAgICAgbmd4X3Rlc3RfbnVsbChjLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9jcmVhdGVfcG9vbChscy0+cG9vbF9zaXplLCBscy0+bG9nKSwKLSAgICAgICAgICAgICAgICAgICAgICBOR1hfRVJST1IpOworICAgICAgICBjLT5idWZmZXIgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKGMtPnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMtPnBvc3RfYWNjZXB0X2J1ZmZlcl9zaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogKGMtPmxpc3RlbmluZy0+c29ja2xlbiArIDE2KSk7CisgICAgICAgIGlmIChjLT5idWZmZXIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQogCi0gICAgICAgIG5neF90ZXN0X251bGwoYy0+YnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9jcmVhdGVfdGVtcF9idWYoYy0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5wb3N0X2FjY2VwdF9idWZmZXJfc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAyICogKGMtPmxpc3RlbmluZy0+c29ja2xlbiArIDE2KSksCi0gICAgICAgICAgICAgICAgICAgICAgTkdYX0VSUk9SKTsKKyAgICAgICAgaWYgKCEoYy0+bG9jYWxfc29ja2FkZHIgPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIGxzLT5zb2NrbGVuKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KIAotICAgICAgICBuZ3hfdGVzdF9udWxsKGMtPmxvY2FsX3NvY2thZGRyLCBuZ3hfcGFsbG9jKGMtPnBvb2wsIGxzLT5zb2NrbGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICBOR1hfRVJST1IpOworICAgICAgICBpZiAoIShjLT5zb2NrYWRkciA9IG5neF9wYWxsb2MoYy0+cG9vbCwgbHMtPnNvY2tsZW4pKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQogCi0gICAgICAgIG5neF90ZXN0X251bGwoYy0+c29ja2FkZHIsIG5neF9wYWxsb2MoYy0+cG9vbCwgbHMtPnNvY2tsZW4pLAotICAgICAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7Ci0KLSAgICAgICAgbmd4X3Rlc3RfbnVsbChjLT5sb2csIG5neF9wYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9sb2dfdCkpLAotICAgICAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7CisgICAgICAgIGlmICghKGMtPmxvZyA9IG5neF9wYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9sb2dfdCkpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQogCiAgICAgICAgIG5neF9tZW1jcHkoYy0+bG9nLCBscy0+bG9nLCBzaXplb2Yobmd4X2xvZ190KSk7Ci0gICAgICAgIGMtPnJlYWQtPmxvZyA9IGMtPndyaXRlLT5sb2cgPSBjLT5sb2c7CisgICAgICAgIGMtPnJlYWQtPmxvZyA9IGMtPmxvZzsKKyAgICAgICAgYy0+d3JpdGUtPmxvZyA9IGMtPmxvZzsKIAogICAgICAgICBpZiAobmd4X2FkZF9ldmVudChyZXYsIDAsIE5HWF9JT0NQX0lPKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCmluZGV4IGI0MWVjYTcuLmMwNjg5NjggMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCkBAIC0xMyw3ICsxMyw3IEBACiAKIC8qIEFGX0lORVQgb25seSAqLwogCi1pbnQgbmd4X2V2ZW50X2Nvbm5lY3RfcGVlcihuZ3hfcGVlcl9jb25uZWN0aW9uX3QgKnBjKQorbmd4X2ludF90IG5neF9ldmVudF9jb25uZWN0X3BlZXIobmd4X3BlZXJfY29ubmVjdGlvbl90ICpwYykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICBpbnN0YW5jZTsKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIC8qIG5neF91bmxvY2tfbXV0ZXgocGMtPnBlZXJzLT5tdXRleCk7ICovCiAKIAotICAgIHMgPSBuZ3hfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX0lQLCAwKTsKKyAgICBzID0gbmd4X3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19JUCk7CiAKICAgICBpZiAocyA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHBjLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAvKgogICAgICAqIFdpbnNvY2sgYXNzaWduZXMgYSBzb2NrZXQgbnVtYmVyIGRpdmlzaWJsZSBieSA0CiAgICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgpAQCAtMjYxLDcgKzI2MSw3IEBACiAgICAgYWRkci5zaW5fYWRkci5zX2FkZHIgPSBwZWVyLT5hZGRyOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgcGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY29ubmVjdCB0byAlcywgIyVkIiwgcGVlci0+YWRkcl9wb3J0X3RleHQuZGF0YSwgYy0+bnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAiY29ubmVjdCB0byAlViwgIyVkIiwgJnBlZXItPmFkZHJfcG9ydF90ZXh0LCBjLT5udW1iZXIpOwogCiAgICAgcmMgPSBjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaAppbmRleCAzNDVjMmY5Li4wNDA4Njk0IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaApAQCAtNjAsNyArNjAsNyBAQAogfSBuZ3hfcGVlcl9jb25uZWN0aW9uX3Q7CiAKIAotaW50IG5neF9ldmVudF9jb25uZWN0X3BlZXIobmd4X3BlZXJfY29ubmVjdGlvbl90ICpwYyk7CituZ3hfaW50X3Qgbmd4X2V2ZW50X2Nvbm5lY3RfcGVlcihuZ3hfcGVlcl9jb25uZWN0aW9uX3QgKnBjKTsKIHZvaWQgbmd4X2V2ZW50X2Nvbm5lY3RfcGVlcl9mYWlsZWQobmd4X3BlZXJfY29ubmVjdGlvbl90ICpwYyk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0ZXguYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdGV4LmMKaW5kZXggZjNhZDJmNS4uMzBjY2Y5OCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3RleC5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGNbbl0ubG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJXU0FXYWl0Rm9yTXVsdGlwbGVFdmVudHMoKSAiCi0gICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIHVuZXhwZWN0ZWQgbmV0d29yayBldmVudCAlbHUiLAorICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCB1bmV4cGVjdGVkIG5ldHdvcmsgZXZlbnQgJXVsIiwKICAgICAgICAgICAgICAgICAgICAgICBuZS5sTmV0d29ya0V2ZW50cyk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9tdXRleC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9tdXRleC5jCmluZGV4IGFiNGU2YWIuLjIzMzVlNWIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfbXV0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X211dGV4LmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF90ICpldikKIHsKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJsb2NrIGV2ZW50IG11dGV4ICIgUFRSX0ZNVCAiIGxvY2s6JVgiLCBtLCBtLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAibG9jayBldmVudCBtdXRleCAlcCBsb2NrOiVYRCIsIG0sIG0tPmxvY2spOwogCiAgICAgaWYgKG0tPmxvY2spIHsKIApAQCAtNDgsMTMgKzQ4LDEyIEBACiAKICAgICBpZiAobS0+bG9jayA9PSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJ0cmluZyB0byB1bmxvY2sgdGhlIGZyZWUgZXZlbnQgbXV0ZXggIiBQVFJfRk1ULCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAidHJpbmcgdG8gdW5sb2NrIHRoZSBmcmVlIGV2ZW50IG11dGV4ICVwIiwgbSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJ1bmxvY2sgZXZlbnQgbXV0ZXggIiBQVFJfRk1UICIsIG5leHQgZXZlbnQ6ICIgUFRSX0ZNVCwKLSAgICAgICAgICAgICAgICAgICBtLCBtLT5ldmVudHMpOworICAgICAgICAgICAgICAgICAgICJ1bmxvY2sgZXZlbnQgbXV0ZXggJXAsIG5leHQgZXZlbnQ6ICVwIiwgbSwgbS0+ZXZlbnRzKTsKIAogICAgIG0tPmxvY2sgPSAwOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IDdhNzAzOGQuLmI1YzViNzIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC03Myw3ICs3Myw3IEBACiAgICAgfQogCiAgICAgaWYgKCFTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkpIHsKLSAgICAgICAgaGFuZHNoYWtlID0gImluIFNTTCBoYW5kc2hha2UiOworICAgICAgICBoYW5kc2hha2UgPSAiIGluIFNTTCBoYW5kc2hha2UiOwogCiAgICAgfSBlbHNlIHsKICAgICAgICAgaGFuZHNoYWtlID0gIiI7CkBAIC0yNjksNyArMjY5LDcgQEAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKIAogICAgICAgICBpZiAoIVNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSkgewotICAgICAgICAgICAgaGFuZHNoYWtlID0gImluIFNTTCBoYW5kc2hha2UiOworICAgICAgICAgICAgaGFuZHNoYWtlID0gIiBpbiBTU0wgaGFuZHNoYWtlIjsKIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaGFuZHNoYWtlID0gIiI7CkBAIC0zMTAsNiArMzEwLDkgQEAKICAgICB9CiAKICAgICBhZ2FpbiA9IDA7CisjaWYgKE5HWF9TVVBQUkVTU19XQVJOKQorICAgIHNzbGVyciA9IDA7CisjZW5kaWYKIAogICAgIGZvciAoIDs7ICkgewogICAgICAgICBuID0gU1NMX3NodXRkb3duKGMtPnNzbC0+c3NsKTsKQEAgLTM2NiwyMyArMzY5LDE4IEBACiB2b2lkIG5neF9zc2xfZXJyb3Iobmd4X3VpbnRfdCBsZXZlbCwgbmd4X2xvZ190ICpsb2csIG5neF9lcnJfdCBlcnIsCiAgICAgICAgICAgICAgICAgICAgY2hhciAqZm10LCAuLi4pCiB7ICAgCi0gICAgaW50ICAgICAgICBsZW47Ci0gICAgY2hhciAgICAgICBlcnJzdHJbTkdYX01BWF9DT05GX0VSUlNUUl07Ci0gICAgdmFfbGlzdCAgICBhcmdzOworICAgIHVfY2hhciAgIGVycnN0cltOR1hfTUFYX0NPTkZfRVJSU1RSXSwgKnAsICpsYXN0OworICAgIHZhX2xpc3QgIGFyZ3M7CisKKyAgICBsYXN0ID0gZXJyc3RyICsgTkdYX01BWF9DT05GX0VSUlNUUjsKIAogICAgIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0gICAgbGVuID0gbmd4X3ZzbnByaW50ZihlcnJzdHIsIHNpemVvZihlcnJzdHIpIC0gMSwgZm10LCBhcmdzKTsKKyAgICBwID0gbmd4X3ZzbnByaW50ZihlcnJzdHIsIHNpemVvZihlcnJzdHIpIC0gMSwgZm10LCBhcmdzKTsKICAgICB2YV9lbmQoYXJncyk7CiAKLSAgICBlcnJzdHJbbGVuKytdID0gJyAnOwotICAgIGVycnN0cltsZW4rK10gPSAnKCc7Ci0gICAgZXJyc3RyW2xlbisrXSA9ICdTJzsKLSAgICBlcnJzdHJbbGVuKytdID0gJ1MnOwotICAgIGVycnN0cltsZW4rK10gPSAnTCc7Ci0gICAgZXJyc3RyW2xlbisrXSA9ICc6JzsKLSAgICBlcnJzdHJbbGVuKytdID0gJyAnOworICAgIHAgPSBuZ3hfY3B5c3RybihwLCAiIChTU0w6ICIsIGxhc3QgLSBwKTsKIAotICAgIEVSUl9lcnJvcl9zdHJpbmdfbihFUlJfZ2V0X2Vycm9yKCksIGVycnN0ciArIGxlbiwgc2l6ZW9mKGVycnN0cikgLSBsZW4gLSAxKTsKKyAgICBFUlJfZXJyb3Jfc3RyaW5nX24oRVJSX2dldF9lcnJvcigpLCAoY2hhciAqKSBwLCBsYXN0IC0gcCk7CiAKICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIGVyciwgIiVzKSIsIGVycnN0cik7CiB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCmluZGV4IDI0YmM0ZDMuLjI3Mzk0MTkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCkBAIC03OSw3ICs3OSw4IEBACiAKIG5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV9yZWFkX3Vwc3RyZWFtKG5neF9ldmVudF9waXBlX3QgKnApCiB7Ci0gICAgaW50ICAgICAgICAgICBuLCByYywgc2l6ZTsKKyAgICBzc2l6ZV90ICAgICAgIG4sIHNpemU7CisgICAgbmd4X2ludF90ICAgICByYzsKICAgICBuZ3hfYnVmX3QgICAgKmI7CiAgICAgbmd4X2NoYWluX3QgICpjaGFpbiwgKmNsLCAqdGw7CiAKQEAgLTEwOSw3ICsxMTAsNyBAQAogICAgICAgICAgICAgbiA9IHAtPnByZXJlYWRfc2l6ZTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgcHJlcmVhZDogJWQiLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIHByZXJlYWQ6ICV6Iiwgbik7CiAKICAgICAgICAgICAgIGlmIChuKSB7CiAgICAgICAgICAgICAgICAgcC0+cmVhZCA9IDE7CkBAIC0xOTcsNyArMTk4LDcgQEAKICAgICAgICAgICAgICAgICByYyA9IG5neF9ldmVudF9waXBlX3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShwKTsKIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZSB0ZW1wIG9mZnNldDogJWQiLCBwLT50ZW1wX2ZpbGUtPm9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgdGVtcCBvZmZzZXQ6ICVPIiwgcC0+dGVtcF9maWxlLT5vZmZzZXQpOwogCiAgICAgICAgICAgICAgICAgaWYgKHJjID09IE5HWF9BR0FJTikgewogICAgICAgICAgICAgICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9MRVZFTF9FVkVOVApAQCAtMjM3LDcgKzIzOCw3IEBACiAgICAgICAgICAgICBuID0gbmd4X3JlY3ZfY2hhaW4ocC0+dXBzdHJlYW0sIGNoYWluKTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgcmVjdiBjaGFpbjogJWQiLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIHJlY3YgY2hhaW46ICV6Iiwgbik7CiAKICAgICAgICAgICAgIGlmIChwLT5mcmVlX3Jhd19idWZzKSB7CiAgICAgICAgICAgICAgICAgY2hhaW4tPm5leHQgPSBwLT5mcmVlX3Jhd19idWZzOwpAQCAtMzAzLDcgKzMwNCw3IEBACiAKICAgICBmb3IgKGNsID0gcC0+YnVzeTsgY2w7IGNsID0gY2wtPm5leHQpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgYnVzeSAiIFBUUl9GTVQgIiwgcG9zICIgUFRSX0ZNVCAiLCBzaXplOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBidXN5ICVwLCBwb3MgJXAsIHNpemU6ICV6IiwKICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvcyk7CiAgICAgfQpAQCAtMzExLDkgKzMxMiw4IEBACiAgICAgZm9yIChjbCA9IHAtPm91dDsgY2w7IGNsID0gY2wtPm5leHQpIHsKICAgICAgICAgaWYgKGNsLT5idWYtPmluX2ZpbGUgJiYgY2wtPmJ1Zi0+dGVtcG9yYXJ5KSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNShOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgb3V0IHNoYWRvdyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfRk1UICIsIHBvcyAiIFBUUl9GTVQgIiwgc2l6ZTogJWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbGU6ICIgT0ZGX1RfRk1UICIsIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgc2hhZG93ICVwLCBwb3MgJXAsIHNpemU6ICV6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlOiAlTywgc2l6ZTogJXoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKQEAgLTMyMSwxMyArMzIxLDEyIEBACiAKICAgICAgICAgfSBlbHNlIGlmIChjbC0+YnVmLT5pbl9maWxlKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBidWYgb3V0IGZpbGUgIiBPRkZfVF9GTVQgIiwgc2l6ZTogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmIG91dCBmaWxlICVPLCBzaXplOiAleiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5maWxlX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmZpbGVfbGFzdCAtIGNsLT5idWYtPmZpbGVfcG9zKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgIiBQVFJfRk1UICIsIHBvcyAiIFBUUl9GTVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBvdXQgJXAsIHBvcyAlcCwgc2l6ZTogJXoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2wtPmJ1Zi0+c3RhcnQsIGNsLT5idWYtPnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MpOwogICAgICAgICB9CkBAIC0zMzUsMTQgKzMzNCwxNCBAQAogCiAgICAgZm9yIChjbCA9IHAtPmluOyBjbDsgY2wgPSBjbC0+bmV4dCkgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBpbiAiIFBUUl9GTVQgIiwgcG9zICIgUFRSX0ZNVCAiLCBzaXplOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBpbiAlcCwgcG9zICVwLCBzaXplOiAleiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnN0YXJ0LCBjbC0+YnVmLT5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3MpOwogICAgIH0KIAogICAgIGZvciAoY2wgPSBwLT5mcmVlX3Jhd19idWZzOyBjbDsgY2wgPSBjbC0+bmV4dCkgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBmcmVlICIgUFRSX0ZNVCAiLCBsYXN0ICIgUFRSX0ZNVCAiLCBzaXplOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiBmcmVlICVwLCBsYXN0ICVwLCBzaXplOiAleiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNsLT5idWYtPnN0YXJ0LCBjbC0+YnVmLT5sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5lbmQgLSBjbC0+YnVmLT5sYXN0KTsKICAgICB9CkBAIC00NDMsNyArNDQyLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgd3JpdGUgYnVzeTogIiBTSVpFX1RfRk1ULCBic2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIHdyaXRlIGJ1c3k6ICV1eiIsIGJzaXplKTsKIAogICAgICAgICBvdXQgPSBOVUxMOwogICAgICAgICBsbCA9IE5VTEw7CkBAIC00ODIsNyArNDgxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgd3JpdGU6IG91dDoiIFBUUl9GTVQgIiwgZjolZCIsIG91dCwgZmx1c2gpOworICAgICAgICAgICAgICAgICAgICAgICAicGlwZSB3cml0ZTogb3V0OiVwLCBmOiVkIiwgb3V0LCBmbHVzaCk7CiAKICAgICAgICAgaWYgKG91dCA9PSBOVUxMICYmICFmbHVzaCkgewogICAgICAgICAgICAgYnJlYWs7CkBAIC01NTMsMTMgKzU1MiwxMyBAQAogICAgICAgICBsbCA9IE5VTEw7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBvZmZzZXQ6ICVkIiwgcC0+dGVtcF9maWxlLT5vZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAgICAicGlwZSBvZmZzZXQ6ICVPIiwgcC0+dGVtcF9maWxlLT5vZmZzZXQpOwogCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGJzaXplID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpcGUgYnVmICIgUFRSX0ZNVCAiLCBwb3MgIiBQVFJfRk1UICIsIHNpemU6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIGJ1ZiAlcCwgcG9zICVwLCBzaXplOiAleiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbC0+YnVmLT5zdGFydCwgY2wtPmJ1Zi0+cG9zLCBic2l6ZSk7CiAKICAgICAgICAgICAgIGlmICgoc2l6ZSArIGJzaXplID4gcC0+dGVtcF9maWxlX3dyaXRlX3NpemUpCkBAIC01NzQsNyArNTczLDcgQEAKIAogICAgICAgICB9IHdoaWxlIChjbCk7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLCAic2l6ZTogJWQiLCBzaXplKTsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLCAic2l6ZTogJXoiLCBzaXplKTsKIAogICAgICAgICBpZiAoY2wpIHsKICAgICAgICAgICAgcC0+aW4gPSBjbDsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcG9zdGVkLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3Bvc3RlZC5jCmluZGV4IGViMDY0ZjUuLmFlZDA3ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcG9zdGVkLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuYwpAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBldiA9IChuZ3hfZXZlbnRfdCAqKSBuZ3hfcG9zdGVkX2V2ZW50czsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJwb3N0ZWQgZXZlbnQgIiBQVFJfRk1ULCBldik7CisgICAgICAgICAgICAgICAgICAgICAgInBvc3RlZCBldmVudCAlcCIsIGV2KTsKIAogICAgICAgICBpZiAoZXYgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzgsNyArMzgsNyBAQAogfQogCiAKLSNpZiAoTkdYX1RIUkVBRFMpCisjaWYgKE5HWF9USFJFQURTKSAmJiAhKE5HWF9XSU4zMikKIAogdm9pZCBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBmb3IgKCA7OyApIHsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RlZCBldmVudCAiIFBUUl9GTVQsIGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RlZCBldmVudCAlcCIsIGV2KTsKIAogICAgICAgICAgICAgaWYgKGV2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOwpAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrKGV2LT5sb2NrKSA9PSAwKSB7CiAKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3N0ZWQgZXZlbnQgIiBQVFJfRk1UICIgaXMgYnVzeSIsIGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zdGVkIGV2ZW50ICVwIGlzIGJ1c3kiLCBldik7CiAKICAgICAgICAgICAgICAgICBldiA9IGV2LT5uZXh0OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTA1LDggKzEwNSw3IEBACiAgICAgICAgICAgICBpZiAoZXYtPmxvY2sgIT0gZXYtPm93bl9sb2NrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCooZXYtPm93bl9sb2NrKSkgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBvd24gbG9jayBvZiB0aGUgcG9zdGVkIGV2ZW50ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfRk1UICIgaXMgYnVzeSIsIGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBvd24gbG9jayBvZiB0aGUgcG9zdGVkIGV2ZW50ICVwIGlzIGJ1c3kiLCBldik7CiAgICAgICAgICAgICAgICAgICAgIG5neF91bmxvY2soZXYtPmxvY2spOwogICAgICAgICAgICAgICAgICAgICBldiA9IGV2LT5uZXh0OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE1Myw3ICsxNTIsNyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RlZCBldmVudCAiIFBUUl9GTVQgIiBpcyBkb25lIiwgZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3RlZCBldmVudCAlcCBpcyBkb25lIiwgZXYpOwogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcG9zdGVkLmgKaW5kZXggNWUyOWVkYy4uODYxMDBhZiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3Bvc3RlZC5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZXYtPm5leHQtPnByZXYgPSAmZXYtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGV2LT5sb2csIDAsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zdCBldmVudCAiIFBUUl9GTVQsIGV2KTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zdCBldmVudCAlcCIsIGV2KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0gZWxzZSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGV2LT5sb2csIDAsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlIHBvc3RlZCBldmVudCAiIFBUUl9GTVQsIGV2KTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlIHBvc3RlZCBldmVudCAlcCIsIGV2KTsgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIH0KIAogI2RlZmluZSBuZ3hfZGVsZXRlX3Bvc3RlZF9ldmVudChldikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMzUsNyArMzUsNyBAQAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBldi0+cHJldiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGV2LT5sb2csIDAsICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlIHBvc3RlZCBldmVudCAiIFBUUl9GTVQsIGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSBwb3N0ZWQgZXZlbnQgJXAiLCBldik7CiAKIAogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKaW5kZXggYTA5ZjA3Zi4uYzFjYTEyNCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYwpAQCAtMTEwLDE0ICsxMTAsMTMgQEAKICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50ICIgUFRSX0ZNVCAiIGlzIGJ1c3kgaW4gZXhwaXJlIHRpbWVycyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudCAlcCBpcyBidXN5IGluIGV4cGlyZSB0aW1lcnMiLCBldik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAjZW5kaWYKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudCB0aW1lciBkZWw6ICVkOiAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXIgZGVsOiAlZDogJWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9pZGVudChldi0+ZGF0YSksIGV2LT5yYnRyZWVfa2V5KTsKIAogICAgICAgICAgICAgbmd4X3JidHJlZV9kZWxldGUoKG5neF9yYnRyZWVfdCAqKikgJm5neF9ldmVudF90aW1lcl9yYnRyZWUsCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKaW5kZXggZjQwZTU3Mi4uOWQ2MzE5YSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaApAQCAtODksNyArODksNyBAQAogCiAgICAgICAgIGlmIChhYnMoa2V5IC0gZXYtPnJidHJlZV9rZXkpIDwgMTAwIC8gTkdYX1RJTUVSX1JFU09MVVRJT04pIHsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXI6ICVkLCBvbGQ6ICVkLCBuZXc6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJldmVudCB0aW1lcjogJWQsIG9sZDogJWksIG5ldzogJWkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9pZGVudChldi0+ZGF0YSksIGV2LT5yYnRyZWVfa2V5LCBrZXkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICBldi0+cmJ0cmVlX2tleSA9IGtleTsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGFkZDogJWQ6ICVkIiwKKyAgICAgICAgICAgICAgICAgICAiZXZlbnQgdGltZXIgYWRkOiAlZDogJWkiLAogICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfaWRlbnQoZXYtPmRhdGEpLCBldi0+cmJ0cmVlX2tleSk7CiAKICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X2V2ZW50X3RpbWVyX211dGV4KSA9PSBOR1hfRVJST1IpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX2hhbmRsZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX2hhbmRsZXIuYwppbmRleCAzYTMyM2IxLi45ZTVjNDNjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2FjY2Vzc19oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hY2Nlc3NfaGFuZGxlci5jCkBAIC05Nyw4ICs5Nyw5IEBACiAgICAgcnVsZSA9IGFsY2YtPnJ1bGVzLT5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBhbGNmLT5ydWxlcy0+bmVsdHM7IGkrKykgewogCi1uZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwgIiUwOFggJTA4WCAlMDhYIiwKLSAgICAgICAgICAgICAgIGFkZHJfaW4tPnNpbl9hZGRyLnNfYWRkciwgcnVsZVtpXS5tYXNrLCBydWxlW2ldLmFkZHIpOworICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIiUwOFhEICUwOFhEICUwOFhEIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbi0+c2luX2FkZHIuc19hZGRyLCBydWxlW2ldLm1hc2ssIHJ1bGVbaV0uYWRkcik7CiAKICAgICAgICAgaWYgKChhZGRyX2luLT5zaW5fYWRkci5zX2FkZHIgJiBydWxlW2ldLm1hc2spID09IHJ1bGVbaV0uYWRkcikgewogICAgICAgICAgICAgaWYgKHJ1bGVbaV0uZGVueSkgewpAQCAtMTU3LDggKzE1OCw4IEBACiAgICAgfQogCiAgICAgaWYgKG5neF9wdG9jaWRyKCZ2YWx1ZVsxXSwgJmluX2NpZHIpID09IE5HWF9FUlJPUikgewotICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsICJpbnZhbGlkIHBhcmFtdGVyIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXS5kYXRhKTsKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLCAiaW52YWxpZCBwYXJhbXRlciBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlWzFdKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jCmluZGV4IDk5YWEzNWQuLmM3OGQ0ZTYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyLmMKQEAgLTI0LDYgKzI0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9zdHJfdCAgICAgIG5hbWU7CisgICAgbmd4X3VpbnRfdCAgICAgZXNjYXBlOwogICAgIG5neF91aW50X3QgICAgIGRpcjsKICAgICB0aW1lX3QgICAgICAgICBtdGltZTsKICAgICBvZmZfdCAgICAgICAgICBzaXplOwpAQCAtMjY5LDEwICsyNzAsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVudHJ5LT5uYW1lLmxlbiA9IGxlbjsgICAgICAgIAorICAgICAgICBlbnRyeS0+ZXNjYXBlID0gMiAqIG5neF9lc2NhcGVfdXJpKE5VTEwsIG5neF9kZV9uYW1lKCZkaXIpLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9IVE1MKTsKIAotICAgICAgICBpZiAoIShlbnRyeS0+bmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBsZW4gKyAxKSkpIHsKKyAgICAgICAgaWYgKCEoZW50cnktPm5hbWUuZGF0YSA9IG5neF9wYWxsb2MocG9vbCwgbGVuICsgZW50cnktPmVzY2FwZSArIDEpKSkgewogICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihyLCAmZGlyLCBkbmFtZS5kYXRhKTsKICAgICAgICAgfQorCiAgICAgICAgIG5neF9jcHlzdHJuKGVudHJ5LT5uYW1lLmRhdGEsIG5neF9kZV9uYW1lKCZkaXIpLCBsZW4gKyAxKTsKIAogICAgICAgICBlbnRyeS0+ZGlyID0gbmd4X2RlX2lzX2RpcigmZGlyKTsKQEAgLTI5OCw3ICszMDIsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLm5lbHRzOyBpKyspIHsKICAgICAgICAgbGVuICs9IHNpemVvZigiPGEgaHJlZj1cIiIpIC0gMQogICAgICAgICAgICAgICAgKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSBpcyBmb3IgIi8iICovCi0gICAgICAgICAgICAgICArIGVudHJ5W2ldLm5hbWUubGVuCisgICAgICAgICAgICAgICArIGVudHJ5W2ldLm5hbWUubGVuICsgZW50cnlbaV0uZXNjYXBlCiAgICAgICAgICAgICAgICArIHNpemVvZigiXCI+IikgLSAxCiAgICAgICAgICAgICAgICArIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTgogICAgICAgICAgICAgICAgKyBzaXplb2YoIjwvYT4iKSAtIDEKQEAgLTMyOSw3ICszMzMsMTcgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLm5lbHRzOyBpKyspIHsKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIjxhIGhyZWY9XCIiLCBzaXplb2YoIjxhIGhyZWY9XCIiKSAtIDEpOwotICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCBlbnRyeVtpXS5uYW1lLmRhdGEsIGVudHJ5W2ldLm5hbWUubGVuKTsKKworICAgICAgICBpZiAoZW50cnlbaV0uZXNjYXBlKSB7CisgICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShiLT5sYXN0LCBlbnRyeVtpXS5uYW1lLmRhdGEsIGVudHJ5W2ldLm5hbWUubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9IVE1MKTsKKworICAgICAgICAgICAgYi0+bGFzdCArPSBlbnRyeVtpXS5uYW1lLmxlbiArIGVudHJ5W2ldLmVzY2FwZTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgZW50cnlbaV0ubmFtZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlbaV0ubmFtZS5sZW4pOworICAgICAgICB9CiAKICAgICAgICAgaWYgKGVudHJ5W2ldLmRpcikgewogICAgICAgICAgICAgKmItPmxhc3QrKyA9ICcvJzsKQEAgLTM3NSw3ICszODksNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGVuZ3RoID0gZW50cnlbaV0uc2l6ZTsKIAotICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEwMjQgKiAxMDI0ICogMTAyNCkgeworICAgICAgICAgICAgaWYgKGxlbmd0aCA+IDEwMjQgKiAxMDI0ICogMTAyNCAtIDEpIHsKICAgICAgICAgICAgICAgICBzaXplID0gKG5neF9pbnRfdCkgKGxlbmd0aCAvICgxMDI0ICogMTAyNCAqIDEwMjQpKTsKICAgICAgICAgICAgICAgICBpZiAoKGxlbmd0aCAlICgxMDI0ICogMTAyNCAqIDEwMjQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gMiAtIDEpKQpAQCAtMzg0LDcgKzM5OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNjYWxlID0gJ0cnOwogCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEwMjQgKiAxMDI0KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGxlbmd0aCA+IDEwMjQgKiAxMDI0IC0gMSkgewogICAgICAgICAgICAgICAgIHNpemUgPSAobmd4X2ludF90KSAobGVuZ3RoIC8gKDEwMjQgKiAxMDI0KSk7CiAgICAgICAgICAgICAgICAgaWYgKChsZW5ndGggJSAoMTAyNCAqIDEwMjQpKSA+ICgxMDI0ICogMTAyNCAvIDIgLSAxKSkgewogICAgICAgICAgICAgICAgICAgICBzaXplKys7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyLmMKaW5kZXggZjJlODVlNS4uY2Y5ZDNkMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXIuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfY29tbWFuZHMsICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX2luaXQsICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCi0gICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBjaGlsZCAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogfTsKIAogCkBAIC0yODcsOCArMjg3LDcgQEAKICAgICBpZiAoc3JjID09IGRzdCkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCJjaGFyc2V0X21hcFwiIGJldHdlZW4gdGhlIHNhbWUgY2hhcnNldHMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBhbmQgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLmRhdGEsIHZhbHVlWzJdLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJVZcIiBhbmQgXCIlVlwiIiwgJnZhbHVlWzFdLCAmdmFsdWVbMl0pOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCkBAIC0yOTksOCArMjk4LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgXCJjaGFyc2V0X21hcFwiIGJldHdlZW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgYW5kIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbMV0uZGF0YSwgdmFsdWVbMl0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJVZcIiBhbmQgXCIlVlwiIiwgJnZhbHVlWzFdLCAmdmFsdWVbMl0pOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAgICAgfQpAQCAtMzU3LDE0ICszNTUsMTQgQEAKICAgICBzcmMgPSBuZ3hfaGV4dG9pKHZhbHVlWzBdLmRhdGEsIHZhbHVlWzBdLmxlbik7CiAgICAgaWYgKHNyYyA9PSBOR1hfRVJST1IgfHwgc3JjID4gMjU1KSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIFwiJXNcIiIsIHZhbHVlWzBdLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlWzBdKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAogICAgIGRzdCA9IG5neF9oZXh0b2kodmFsdWVbMV0uZGF0YSwgdmFsdWVbMV0ubGVuKTsKICAgICBpZiAoZHN0ID09IE5HWF9FUlJPUiB8fCBkc3QgPiAyNTUpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlc1wiIiwgdmFsdWVbMV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZSBcIiVWXCIiLCAmdmFsdWVbMV0pOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCkBAIC01MjUsOCArNTIzLDggQEAKIAogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vIFwiY2hhcnNldF9tYXBcIiBiZXR3ZWVuIHRoZSBjaGFyc2V0cyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgYW5kIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXRbaV0ubmFtZS5kYXRhLCBjaGFyc2V0W25dLm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2V0W2ldLm5hbWUsICZjaGFyc2V0W25dLm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlci5jCmluZGV4IDc4ODEyNDguLjkyOWE3ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfaW5pdCwgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KLSAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IGNoaWxkICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiB9OwogCiAKQEAgLTg0LDcgKzg0LDExIEBACiAgICAgICAgIHNpemUgKz0gbmd4X2J1Zl9zaXplKGNsLT5idWYpOwogCiAgICAgICAgIGlmIChjbC0+YnVmLT5mbHVzaCB8fCBuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSB8fCBjbC0+YnVmLT5pbl9maWxlKSB7Ci0gICAgICAgICAgICBuZ3hfdGVzdF9udWxsKHRsLCBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSwgTkdYX0VSUk9SKTsKKworICAgICAgICAgICAgaWYgKCEodGwgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0bC0+YnVmID0gY2wtPmJ1ZjsKICAgICAgICAgICAgICpsbCA9IHRsOwogICAgICAgICAgICAgbGwgPSAmdGwtPm5leHQ7CkBAIC0xMDIsMzAgKzEwNiwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghKGNodW5rID0gbmd4X3BhbGxvYyhyLT5wb29sLCAxMSkpKSB7CisgICAgICAgIGlmICghKGNodW5rID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2YoIjAwMDAwMDAwIiBDUkxGKSAtIDEpKSkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCiAgICAgICAgIGItPnRlbXBvcmFyeSA9IDE7CiAgICAgICAgIGItPnBvcyA9IGNodW5rOwotICAgICAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoY2h1bmssICIldXhTIiBDUkxGLCBzaXplKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9zcHJpbnRmKGNodW5rLCAiJXh6IiBDUkxGLCBzaXplKTsKIAogICAgICAgICBvdXQuYnVmID0gYjsKLSNpZiAwCi0gICAgICAgIG5neF90ZXN0X251bGwoY2h1bmssIG5neF9wYWxsb2Moci0+cG9vbCwgMTEpLCBOR1hfRVJST1IpOwotICAgICAgICBsZW4gPSBuZ3hfc25wcmludGYoKGNoYXIgKikgY2h1bmssIDExLCBTSVpFX1RfWF9GTVQgQ1JMRiwgc2l6ZSk7Ci0KLSAgICAgICAgbmd4X3Rlc3RfbnVsbChiLCBuZ3hfY2FsbG9jX2J1ZihyLT5wb29sKSwgTkdYX0VSUk9SKTsKLSAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKLSAgICAgICAgYi0+cG9zID0gY2h1bms7Ci0gICAgICAgIGItPmxhc3QgPSBjaHVuayArIGxlbjsKLQotICAgICAgICBvdXQuYnVmID0gYjsKLSNlbmRpZgogICAgIH0KIAogICAgIGlmIChjbC0+YnVmLT5sYXN0X2J1ZikgewotICAgICAgICBuZ3hfdGVzdF9udWxsKGIsIG5neF9jYWxsb2NfYnVmKHItPnBvb2wpLCBOR1hfRVJST1IpOworICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKICAgICAgICAgYi0+bWVtb3J5ID0gMTsKICAgICAgICAgYi0+bGFzdF9idWYgPSAxOwogICAgICAgICBiLT5wb3MgPSAodV9jaGFyICopIENSTEYgIjAiIENSTEYgQ1JMRjsKQEAgLTE0Nyw3ICsxNDMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2JvZHlfZmlsdGVyKHIsIG91dC5uZXh0KTsKICAgICAgICAgfQogCi0gICAgICAgIG5neF90ZXN0X251bGwoYiwgbmd4X2NhbGxvY19idWYoci0+cG9vbCksIE5HWF9FUlJPUik7CisgICAgICAgIGlmICghKGIgPSBuZ3hfY2FsbG9jX2J1ZihyLT5wb29sKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKwogICAgICAgICBiLT5tZW1vcnkgPSAxOwogICAgICAgICBiLT5wb3MgPSAodV9jaGFyICopIENSTEY7CiAgICAgICAgIGItPmxhc3QgPSBiLT5wb3MgKyAyOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlci5jCmluZGV4IGJiM2ExZjAuLmY4OTgwYWYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyLmMKQEAgLTgwLDcgKzgwLDcgQEAKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9nemlwX2ZpbHRlcl9hbGxvYyh2b2lkICpvcGFxdWUsIHVfaW50IGl0ZW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IHNpemUpOwogc3RhdGljIHZvaWQgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfZnJlZSh2b2lkICpvcGFxdWUsIHZvaWQgKmFkZHJlc3MpOwotbmd4X2lubGluZSBzdGF0aWMgaW50IG5neF9odHRwX2d6aXBfZXJyb3Iobmd4X2h0dHBfZ3ppcF9jdHhfdCAqY3R4KTsKK3N0YXRpYyBpbnQgbmd4X2h0dHBfZ3ppcF9lcnJvcihuZ3hfaHR0cF9nemlwX2N0eF90ICpjdHgpOwogCiBzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9nemlwX2xvZ19yYXRpbyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpOwpAQCAtNTA3LDcgKzUwNywxMSBAQAogICAgICAgICBiLT5wb3MgPSBnemhlYWRlcjsKICAgICAgICAgYi0+bGFzdCA9IGItPnBvcyArIDEwOwogCi0gICAgICAgIG5neF9hbGxvY19saW5rX2FuZF9zZXRfYnVmKGNsLCBiLCByLT5wb29sLCBuZ3hfaHR0cF9nemlwX2Vycm9yKGN0eCkpOworICAgICAgICBpZiAoIShjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpKSkgeworICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KTsKKyAgICAgICAgfQorICAgICAgICBjbC0+YnVmID0gYjsKKyAgICAgICAgY2wtPm5leHQgPSBOVUxMOwogICAgICAgICBjdHgtPm91dCA9IGNsOwogICAgICAgICBjdHgtPmxhc3Rfb3V0ID0gJmNsLT5uZXh0OwogCkBAIC01MzQsNyArNTM4LDcgQEAKICAgICAgICAgICAgICAgICAmJiAhY3R4LT5yZWRvKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnemlwIGluOiAiIFBUUl9GTVQsIGN0eC0+aW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnemlwIGluOiAlcCIsIGN0eC0+aW4pOwogCiAgICAgICAgICAgICAgICAgaWYgKGN0eC0+aW4gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU0Nyw3ICs1NTEsNyBAQAogICAgICAgICAgICAgICAgIGN0eC0+enN0cmVhbS5hdmFpbF9pbiA9IGN0eC0+aW5fYnVmLT5sYXN0IC0gY3R4LT5pbl9idWYtPnBvczsKIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnemlwIGluX2J1ZjoiIFBUUl9GTVQgIiBuaToiIFBUUl9GTVQgIiBhaTolZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImd6aXAgaW5fYnVmOiVwIG5pOiVwIGFpOiV1ZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5pbl9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT56c3RyZWFtLm5leHRfaW4sIGN0eC0+enN0cmVhbS5hdmFpbF9pbik7CiAKQEAgLTYwOCwxMCArNjEyLDEwIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWc2KE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmxhdGUgaW46IG5pOiVYIG5vOiVYIGFpOiVkIGFvOiVkIGZsOiVkIHJlZG86JWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT56c3RyZWFtLm5leHRfaW4sIGN0eC0+enN0cmVhbS5uZXh0X291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+enN0cmVhbS5hdmFpbF9pbiwgY3R4LT56c3RyZWFtLmF2YWlsX291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Zmx1c2gsIGN0eC0+cmVkbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmxhdGUgaW46IG5pOiVwIG5vOiVwIGFpOiV1ZCBhbzoldWQgZmw6JWQgcmVkbzolZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT56c3RyZWFtLm5leHRfaW4sIGN0eC0+enN0cmVhbS5uZXh0X291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnpzdHJlYW0uYXZhaWxfaW4sIGN0eC0+enN0cmVhbS5hdmFpbF9vdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5mbHVzaCwgY3R4LT5yZWRvKTsKIAogICAgICAgICAgICAgcmMgPSBkZWZsYXRlKCZjdHgtPnpzdHJlYW0sIGN0eC0+Zmx1c2gpOwogCkBAIC02MjIsMTMgKzYyNiwxMyBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZsYXRlIG91dDogbmk6JVggbm86JVggYWk6JWQgYW86JWQgcmM6JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmxhdGUgb3V0OiBuaTolcCBubzolcCBhaToldWQgYW86JXVkIHJjOiVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+enN0cmVhbS5uZXh0X2luLCBjdHgtPnpzdHJlYW0ubmV4dF9vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnpzdHJlYW0uYXZhaWxfaW4sIGN0eC0+enN0cmVhbS5hdmFpbF9vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYyk7CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImd6aXAgaW5fYnVmOiIgUFRSX0ZNVCAiIHBvczoiIFBUUl9GTVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3ppcCBpbl9idWY6JXAgcG9zOiVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+aW5fYnVmLCBjdHgtPmluX2J1Zi0+cG9zKTsKIAogCkBAIC02NDYsOCArNjUwLDExIEBACiAKICAgICAgICAgICAgICAgICAvKiB6bGliIHdhbnRzIHRvIG91dHB1dCBzb21lIG1vcmUgZ3ppcHBlZCBkYXRhICovCiAKLSAgICAgICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihjbCwgY3R4LT5vdXRfYnVmLCByLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KSk7CisgICAgICAgICAgICAgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2wtPmJ1ZiA9IGN0eC0+b3V0X2J1ZjsKKyAgICAgICAgICAgICAgICBjbC0+bmV4dCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgKmN0eC0+bGFzdF9vdXQgPSBjbDsKICAgICAgICAgICAgICAgICBjdHgtPmxhc3Rfb3V0ID0gJmNsLT5uZXh0OwogCkBAIC02NjMsOCArNjcwLDExIEBACiAgICAgICAgICAgICAgICAgY3R4LT5vdXRfYnVmLT5mbHVzaCA9IDA7CiAgICAgICAgICAgICAgICAgY3R4LT5mbHVzaCA9IFpfTk9fRkxVU0g7CiAKLSAgICAgICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihjbCwgY3R4LT5vdXRfYnVmLCByLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KSk7CisgICAgICAgICAgICAgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2wtPmJ1ZiA9IGN0eC0+b3V0X2J1ZjsKKyAgICAgICAgICAgICAgICBjbC0+bmV4dCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgKmN0eC0+bGFzdF9vdXQgPSBjbDsKICAgICAgICAgICAgICAgICBjdHgtPmxhc3Rfb3V0ID0gJmNsLT5uZXh0OwogCkBAIC02ODYsOCArNjk2LDExIEBACiAKICAgICAgICAgICAgICAgICBuZ3hfcGZyZWUoci0+cG9vbCwgY3R4LT5wcmVhbGxvY2F0ZWQpOwogCi0gICAgICAgICAgICAgICAgbmd4X2FsbG9jX2xpbmtfYW5kX3NldF9idWYoY2wsIGN0eC0+b3V0X2J1Ziwgci0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9nemlwX2Vycm9yKGN0eCkpOworICAgICAgICAgICAgICAgIGlmICghKGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9nemlwX2Vycm9yKGN0eCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNsLT5idWYgPSBjdHgtPm91dF9idWY7CisgICAgICAgICAgICAgICAgY2wtPm5leHQgPSBOVUxMOwogICAgICAgICAgICAgICAgICpjdHgtPmxhc3Rfb3V0ID0gY2w7CiAgICAgICAgICAgICAgICAgY3R4LT5sYXN0X291dCA9ICZjbC0+bmV4dDsKIApAQCAtNzAzLDggKzcxNiwxMSBAQAogCiAgICAgICAgICAgICAgICAgICAgIGItPmxhc3RfYnVmID0gMTsKIAotICAgICAgICAgICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihjbCwgYiwgci0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfZ3ppcF9lcnJvcihjdHgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9nemlwX2Vycm9yKGN0eCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2wtPmJ1ZiA9IGI7CisgICAgICAgICAgICAgICAgICAgIGNsLT5uZXh0ID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgKmN0eC0+bGFzdF9vdXQgPSBjbDsKICAgICAgICAgICAgICAgICAgICAgY3R4LT5sYXN0X291dCA9ICZjbC0+bmV4dDsKICAgICAgICAgICAgICAgICAgICAgdHJhaWxlciA9IChzdHJ1Y3QgZ3p0cmFpbGVyICopIGItPnBvczsKQEAgLTczNSw4ICs3NTEsMTEgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbmYtPm5vX2J1ZmZlciAmJiBjdHgtPmluID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihjbCwgY3R4LT5vdXRfYnVmLCByLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KSk7CisgICAgICAgICAgICAgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2d6aXBfZXJyb3IoY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2wtPmJ1ZiA9IGN0eC0+b3V0X2J1ZjsKKyAgICAgICAgICAgICAgICBjbC0+bmV4dCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgKmN0eC0+bGFzdF9vdXQgPSBjbDsKICAgICAgICAgICAgICAgICBjdHgtPmxhc3Rfb3V0ID0gJmNsLT5uZXh0OwogCkBAIC03ODIsMTAgKzgwMSwxMiBAQAogICAgIG5neF91aW50X3QgICBhbGxvYzsKIAogICAgIGFsbG9jID0gaXRlbXMgKiBzaXplOworCiAgICAgaWYgKGFsbG9jICUgNTEyICE9IDApIHsKIAogICAgICAgICAvKgotICAgICAgICAgKiB0aGUgemxpYiBkZWZsYXRlX3N0YXRlIGFsbG9jYXRpb24sIGl0IHRha2VzIGFib3V0IDZLLCB3ZSBhbGxvY2F0ZSA4SworICAgICAgICAgKiBUaGUgemxpYiBkZWZsYXRlX3N0YXRlIGFsbG9jYXRpb24sIGl0IHRha2VzIGFib3V0IDZLLAorICAgICAgICAgKiB3ZSBhbGxvY2F0ZSA4Sy4gIE90aGVyIGFsbG9jYXRpb25zIGFyZSBkaXZpc2libGUgYnkgNTEyLgogICAgICAgICAgKi8KIAogICAgICAgICBhbGxvYyA9IChhbGxvYyArIG5neF9wYWdlc2l6ZSAtIDEpICYgfihuZ3hfcGFnZXNpemUgLSAxKTsKQEAgLTc5NywxNCArODE4LDE0IEBACiAgICAgICAgIGN0eC0+YWxsb2NhdGVkIC09IGFsbG9jOwogCiAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfSFRUUCwgY3R4LT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJnemlwIGFsbG9jOiBuOiVkIHM6JWQgYTolZCBwOiIgUFRSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImd6aXAgYWxsb2M6IG46JXVkIHM6JXVkIGE6JXVkIHA6JXAiLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcywgc2l6ZSwgYWxsb2MsIHApOwogCiAgICAgICAgIHJldHVybiBwOwogICAgIH0KIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3R4LT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAiZ3ppcCBmaWx0ZXIgZmFpbGVkIHRvIHVzZSBwcmVhbGxvY2F0ZWQgbWVtb3J5OiAlZCBvZiAlZCIsCisgICAgICAgICAgICAgICAgICAiZ3ppcCBmaWx0ZXIgZmFpbGVkIHRvIHVzZSBwcmVhbGxvY2F0ZWQgbWVtb3J5OiAldWQgb2YgJXVkIiwKICAgICAgICAgICAgICAgICAgIGl0ZW1zICogc2l6ZSwgY3R4LT5hbGxvY2F0ZWQpOwogCiAgICAgcCA9IG5neF9wYWxsb2MoY3R4LT5yZXF1ZXN0LT5wb29sLCBpdGVtcyAqIHNpemUpOwpAQCAtODE5LDcgKzg0MCw3IEBACiAgICAgbmd4X2h0dHBfZ3ppcF9jdHhfdCAqY3R4ID0gb3BhcXVlOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjdHgtPnJlcXVlc3QtPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiZ3ppcCBmcmVlOiAlWCIsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICJnemlwIGZyZWU6ICVwIiwgYWRkcmVzcyk7CiAjZW5kaWYKIH0KIApAQCAtODM3LDggKzg1OCw2IEBACiAgICAgICAgIHJldHVybiBidWYgKyAxOwogICAgIH0KIAotICAgIC8qIHdlIHByZWZlciBkbyBub3QgdXNlIHRoZSBGUFUgKi8KLQogICAgIHppbnQgPSAobmd4X3VpbnRfdCkgKGN0eC0+emluIC8gY3R4LT56b3V0KTsKICAgICB6ZnJhYyA9IChuZ3hfdWludF90KSAoKGN0eC0+emluICogMTAwIC8gY3R4LT56b3V0KSAlIDEwMCk7CiAKQEAgLTg1NSwxNiArODc0LDEwIEBACiAgICAgfQogCiAgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiV1aS4lMDJ1aSIsIHppbnQsIHpmcmFjKTsKLQotI2lmIDAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgTkdYX0lOVDMyX0xFTiArIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIgTkdYX1VJTlRfVF9GTVQgIi4lMDIiIE5HWF9VSU5UX1RfRk1ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemludCwgemZyYWMpOwotI2VuZGlmCiB9CiAKIAotbmd4X2lubGluZSBzdGF0aWMgaW50IG5neF9odHRwX2d6aXBfZXJyb3Iobmd4X2h0dHBfZ3ppcF9jdHhfdCAqY3R4KQorc3RhdGljIGludCBuZ3hfaHR0cF9nemlwX2Vycm9yKG5neF9odHRwX2d6aXBfY3R4X3QgKmN0eCkKIHsKICAgICBkZWZsYXRlRW5kKCZjdHgtPnpzdHJlYW0pOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyLmMKaW5kZXggZmFmODE5Mi4uZTg2ZjZhZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXIuYwpAQCAtMTM4LDEyICsxMzgsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+ZXhwaXJlcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2MtPnZhbHVlLmRhdGE7CiAKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgIGNjLT52YWx1ZS5sZW4gPSBuZ3hfc25wcmludGYoKGNoYXIgKikgY2MtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigibWF4LWFnZT0iKSArIFRJTUVfVF9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXgtYWdlPSIgVElNRV9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+ZXhwaXJlcyk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9oYW5kbGVyLmMKaW5kZXggNjBiNmMwMS4uMDEzZjYyYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9oYW5kbGVyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+dXJpLCAmY3JjKTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBpbmRleCBjYWNoZSBnZXQ6ICIgUFRSX0ZNVCwgY3R4LT5jYWNoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBpbmRleCBjYWNoZSBnZXQ6ICVwIiwgY3R4LT5jYWNoZSk7CiAKICAgICAgICAgICAgIGlmIChjdHgtPmNhY2hlICYmICFjdHgtPmNhY2hlLT5leHBpcmVkKSB7CiAKQEAgLTI1MSw3ICsyNTEsNyBAQAogICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgJXMgZmFpbGVkIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZSk7CiAKICAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT1RESVIpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfaW5kZXhfZXJyb3IociwgY3R4LCBlcnIpOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiAlcyBmYWlsZWQiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIG5hbWUpOwogCiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgICAgICB9CkBAIC0zMzEsNyArMzMxLDcgQEAKICAgICAgICAgICAgIGN0eC0+cmVkaXJlY3QubGVuLS07CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgaW5kZXggY2FjaGUgYWxsb2M6ICIgUFRSX0ZNVCwgY3R4LT5jYWNoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBpbmRleCBjYWNoZSBhbGxvYzogJXAiLCBjdHgtPmNhY2hlKTsKIAogICAgICAgICAgICAgaWYgKGN0eC0+Y2FjaGUpIHsKICAgICAgICAgICAgICAgICBjdHgtPmNhY2hlLT5mZCA9IE5HWF9JTlZBTElEX0ZJTEU7CkBAIC0zNzMsNyArMzczLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmlsZV9pbmZvX24gIiAlcyBmYWlsZWQiLCBjdHgtPnBhdGguZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgbmd4X2ZpbGVfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIGN0eC0+cGF0aC5kYXRhKTsKIAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KQEAgLTUwMiwxNyArNTAyLDE3IEBACiAKICAgICBpZiAodmFsdWVbMV0uZGF0YVswXSA9PSAnLycgJiYgaWxjZi0+aW5kaWNlcy5uZWx0cyA9PSAwKSB7CiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBpbmRleCBcIiVzXCIgaW4gXCIlc1wiIGRpcmVjdGl2ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaW5kZXggXCIlVlwiIGluIFwiJVZcIiBkaXJlY3RpdmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qgbm90IGJlIGFic29sdXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLmRhdGEsIGNtZC0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVsxXSwgJmNtZC0+bmFtZSk7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKICAgICBmb3IgKGkgPSAxOyBpIDwgY2YtPmFyZ3MtPm5lbHRzOyBpKyspIHsKICAgICAgICAgaWYgKHZhbHVlW2ldLmxlbiA9PSAwKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4IFwiJXNcIiBpbiBcIiVzXCIgZGlyZWN0aXZlIGlzIGludmFsaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLmRhdGEsIGNtZC0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5kZXggXCIlVlwiIGluIFwiJVZcIiBkaXJlY3RpdmUgaXMgaW52YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlWzFdLCAmY21kLT5uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlci5jCmluZGV4IDA0ZDFmZGUuLjI0ZWE1OGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlci5jCkBAIC0zMyw3ICszMyw3IEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIG5neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfaW5pdCwgICAgIC8qIGluaXQgbW9kdWxlICovCi0gICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBjaGlsZCAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXIuYwppbmRleCAwODJmZDNjLi5mOTY0NTZjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyLmMKQEAgLTEwNywxMSArMTA3LDEzIEBACiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksIHN1ZmZpeCwgaTsKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICpwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKICAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgZW5kOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgIHJjOworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCwgaTsKKyAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICpjb250ZW50X3JhbmdlOwogICAgIG5neF9odHRwX3JhbmdlX3QgICAgICAgICAgICAgKnJhbmdlOwogICAgIG5neF9odHRwX3JhbmdlX2ZpbHRlcl9jdHhfdCAgKmN0eDsKIApAQCAtMTQxLDggKzE0MywxMSBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotICAgIG5neF9pbml0X2FycmF5KHItPmhlYWRlcnNfb3V0LnJhbmdlcywgci0+cG9vbCwgNSwgc2l6ZW9mKG5neF9odHRwX3JhbmdlX3QpLAotICAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7CisgICAgaWYgKG5neF9hcnJheV9pbml0KCZyLT5oZWFkZXJzX291dC5yYW5nZXMsIHItPnBvb2wsIDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3JhbmdlX3QpKSA9PSBOR1hfRVJST1IpCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KIAogICAgIHJjID0gMDsKICAgICByYW5nZSA9IE5VTEw7CkBAIC0xODAsOCArMTg1LDEwIEBACiAgICAgICAgICAgICB3aGlsZSAoKnAgPT0gJyAnKSB7IHArKzsgfQogCiAgICAgICAgICAgICBpZiAoKnAgPT0gJywnIHx8ICpwID09ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBuZ3hfdGVzdF9udWxsKHJhbmdlLCBuZ3hfcHVzaF9hcnJheSgmci0+aGVhZGVyc19vdXQucmFuZ2VzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9FUlJPUik7CisgICAgICAgICAgICAgICAgaWYgKCEocmFuZ2UgPSBuZ3hfYXJyYXlfcHVzaCgmci0+aGVhZGVyc19vdXQucmFuZ2VzKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICByYW5nZS0+c3RhcnQgPSBzdGFydDsKICAgICAgICAgICAgICAgICByYW5nZS0+ZW5kID0gci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbjsKIApAQCAtMjIzLDcgKzIzMCwxMCBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBuZ3hfdGVzdF9udWxsKHJhbmdlLCBuZ3hfcHVzaF9hcnJheSgmci0+aGVhZGVyc19vdXQucmFuZ2VzKSwgTkdYX0VSUk9SKTsKKyAgICAgICAgaWYgKCEocmFuZ2UgPSBuZ3hfYXJyYXlfcHVzaCgmci0+aGVhZGVyc19vdXQucmFuZ2VzKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKwogICAgICAgICByYW5nZS0+c3RhcnQgPSBzdGFydDsKIAogICAgICAgICBpZiAoZW5kID49IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pIHsKQEAgLTI0OSwyOSArMjU5LDI2IEBACiAgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IHJjOwogICAgICAgICByLT5oZWFkZXJzX291dC5yYW5nZXMubmVsdHMgPSAwOwogCi0gICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKLSAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UgPT0gTlVMTCkgeworICAgICAgICBpZiAoIShjb250ZW50X3JhbmdlID0gbmd4X2xpc3RfcHVzaCgmci0+aGVhZGVyc19vdXQuaGVhZGVycykpKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+a2V5LmxlbiA9IHNpemVvZigiQ29udGVudC1SYW5nZSIpIC0gMTsKLSAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+a2V5LmRhdGEgPSAodV9jaGFyICopICJDb250ZW50LVJhbmdlIjsKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZSA9IGNvbnRlbnRfcmFuZ2U7CiAKLSAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wYWxsb2Moci0+cG9vbCwgOCArIDIwICsgMSk7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgY29udGVudF9yYW5nZS0+a2V5LmxlbiA9IHNpemVvZigiQ29udGVudC1SYW5nZSIpIC0gMTsKKyAgICAgICAgY29udGVudF9yYW5nZS0+a2V5LmRhdGEgPSAodV9jaGFyICopICJDb250ZW50LVJhbmdlIjsKKworICAgICAgICBjb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhID0KKyAgICAgICAgICAgICAgICAgICBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZigiYnl0ZXMgKi8iKSAtIDEgKyBOR1hfT0ZGX1RfTEVOKTsKKworICAgICAgICBpZiAoY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUubGVuID0KLSAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcyAqLyVPIiwgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbikKLSAgICAgICAgICAgICAgICAtIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UtPnZhbHVlLmRhdGE7Ci0jaWYgMAotICAgICAgICAgICAgICAgIG5neF9zbnByaW50ZigoY2hhciAqKSByLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4ICsgMjAgKyAxLCAiYnl0ZXMgKi8iIE9GRl9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbik7Ci0jZW5kaWYKKyAgICAgICAgY29udGVudF9yYW5nZS0+dmFsdWUubGVuID0gbmd4X3NwcmludGYoY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzICovJU8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGNvbnRlbnRfcmFuZ2UtPnZhbHVlLmRhdGE7CiAKICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IC0xOwogICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGgpIHsKQEAgLTI4MCwxNzcgKzI4NywxMzUgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9QQVJUSUFMX0NPTlRFTlQ7CisKKyAgICBpZiAoci0+aGVhZGVyc19vdXQucmFuZ2VzLm5lbHRzID09IDEpIHsKKworICAgICAgICBpZiAoIShjb250ZW50X3JhbmdlID0gbmd4X2xpc3RfcHVzaCgmci0+aGVhZGVyc19vdXQuaGVhZGVycykpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZSA9IGNvbnRlbnRfcmFuZ2U7CisKKyAgICAgICAgY29udGVudF9yYW5nZS0+a2V5LmxlbiA9IHNpemVvZigiQ29udGVudC1SYW5nZSIpIC0gMTsKKyAgICAgICAgY29udGVudF9yYW5nZS0+a2V5LmRhdGEgPSAodV9jaGFyICopICJDb250ZW50LVJhbmdlIjsKKworICAgICAgICBjb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhID0KKyAgICAgICAgICAgICAgIG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKCJieXRlcyAtLyIpIC0gMSArIDMgKiBOR1hfT0ZGX1RfTEVOKTsKKyAgICAgICAgaWYgKGNvbnRlbnRfcmFuZ2UtPnZhbHVlLmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qICJDb250ZW50LVJhbmdlOiBieXRlcyBTU1NTLUVFRUUvVFRUVCIgaGVhZGVyICovCisKKyAgICAgICAgY29udGVudF9yYW5nZS0+dmFsdWUubGVuID0gbmd4X3NwcmludGYoY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzICVPLSVPLyVPIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhOworCisgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSByYW5nZS0+ZW5kIC0gcmFuZ2UtPnN0YXJ0OworCisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgfQorCisKKyAgICAvKiBUT0RPOiB3aGF0IGlmIG5vIGNvbnRlbnRfdHlwZSA/PyAqLworCisgICAgbmd4X2h0dHBfY3JlYXRlX2N0eChyLCBjdHgsIG5neF9odHRwX3JhbmdlX2JvZHlfZmlsdGVyX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9yYW5nZV9maWx0ZXJfY3R4X3QpLCBOR1hfRVJST1IpOworCisKKyAgICBsZW4gPSBzaXplb2YoQ1JMRiAiLS0wMTIzNDU2Nzg5IiBDUkxGICJDb250ZW50LVR5cGU6ICIpIC0gMQorICAgICAgICAgICsgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5sZW4KKyAgICAgICAgICArIHNpemVvZihDUkxGICJDb250ZW50LVJhbmdlOiBieXRlcyAiKSAtIDE7CisKKyAgICBpZiAoci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4pIHsKKyAgICAgICAgbGVuICs9IHNpemVvZigiOyBjaGFyc2V0PSIpIC0gMSArIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuOworICAgIH0KKworICAgIGlmICghKGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIGxlbikpKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgYm91bmRhcnkgPSBuZ3hfbmV4dF90ZW1wX251bWJlcigwKTsKKworICAgIC8qCisgICAgICogVGhlIGJvdW5kYXJ5IGhlYWRlciBvZiB0aGUgcmFuZ2U6CisgICAgICogQ1JMRgorICAgICAqICItLTAxMjM0NTY3ODkiIENSTEYKKyAgICAgKiAiQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnIiBDUkxGCisgICAgICogIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICIKKyAgICAgKi8KKworICAgIGlmIChyLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikgeworICAgICAgICBjdHgtPmJvdW5kYXJ5X2hlYWRlci5sZW4gPSBuZ3hfc3ByaW50ZihjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTAxMHVkIiBDUkxGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZTogJVY7IGNoYXJzZXQ9JVYiIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1SYW5nZTogYnl0ZXMgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+aGVhZGVyc19vdXQuY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhOworCisgICAgICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuID0gMDsKIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX1BBUlRJQUxfQ09OVEVOVDsKLQotICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQucmFuZ2VzLm5lbHRzID09IDEpIHsKLQotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xpc3RfcHVzaCgmci0+aGVhZGVyc19vdXQuaGVhZGVycyk7Ci0gICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+a2V5LmxlbiA9IHNpemVvZigiQ29udGVudC1SYW5nZSIpIC0gMTsKLSAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfcmFuZ2UtPmtleS5kYXRhID0gKHVfY2hhciAqKSAiQ29udGVudC1SYW5nZSI7Ci0KLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhyLT5wb29sLCA2ICsgMjAgKyAxICsgMjAgKyAxICsgMjAgKyAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VSUk9SKTsKLQotICAgICAgICAgICAgLyogIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzIFNTU1MtRUVFRS9UVFRUIiBoZWFkZXIgKi8KLQotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUubGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3JhbmdlLT52YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcyAlTy0lTy8lTyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKQotICAgICAgICAgICAgICAgICAgICAgICAgIC0gci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YTsKLQotI2lmIDAKLSAgICAgICAgICAgICAgICAgICBuZ3hfc25wcmludGYoKGNoYXIgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNiArIDIwICsgMSArIDIwICsgMSArIDIwICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzICIgT0ZGX1RfRk1UICItIiBPRkZfVF9GTVQgIi8iIE9GRl9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnN0YXJ0LCByYW5nZS0+ZW5kIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IHJhbmdlLT5lbmQgLSByYW5nZS0+c3RhcnQ7Ci0KLSAgICAgICAgfSBlbHNlIHsKLQotI2lmIDAKLSAgICAgICAgICAgIC8qIFRPRE86IHdoYXQgaWYgbm8gY29udGVudF90eXBlID8/ICovCi0KLSAgICAgICAgICAgIGlmICghKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZSA9Ci0gICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfYWRkX2hlYWRlcigmci0+aGVhZGVyc19vdXQsIG5neF9odHRwX2hlYWRlcnNfb3V0KSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgICAgICBuZ3hfaHR0cF9jcmVhdGVfY3R4KHIsIGN0eCwgbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXJfbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfcmFuZ2VfZmlsdGVyX2N0eF90KSwgTkdYX0VSUk9SKTsKLQotICAgICAgICAgICAgbGVuID0gNCArIDEwICsgMiArIDE0ICsgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5sZW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDIgKyAyMSArIDE7Ci0KLSAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikgewotICAgICAgICAgICAgICAgIGxlbiArPSAxMCArIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfdGVzdF9udWxsKGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGEsIG5neF9wYWxsb2Moci0+cG9vbCwgbGVuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VSUk9SKTsKLQotICAgICAgICAgICAgYm91bmRhcnkgPSBuZ3hfbmV4dF90ZW1wX251bWJlcigwKTsKLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZSBib3VuZGFyeSBoZWFkZXIgb2YgdGhlIHJhbmdlOgotICAgICAgICAgICAgICogQ1JMRgotICAgICAgICAgICAgICogIi0tMDEyMzQ1Njc4OSIgQ1JMRgotICAgICAgICAgICAgICogIkNvbnRlbnQtVHlwZTogaW1hZ2UvanBlZyIgQ1JMRgotICAgICAgICAgICAgICogIkNvbnRlbnQtUmFuZ2U6IGJ5dGVzICIKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4pIHsKLSAgICAgICAgICAgICAgICBjdHgtPmJvdW5kYXJ5X2hlYWRlci5sZW4gPQotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkxGICItLSUwMTB1aSIgQ1JMRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlczsgY2hhcnNldD0lcyIgQ1JMRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1SYW5nZTogYnl0ZXMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5kYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAtIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGE7Ci0jaWYgMAotICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zbnByaW50ZigoY2hhciAqKSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTAxMCIgTkdYX1VJTlRfVF9GTVQgQ1JMRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlczsgY2hhcnNldD0lcyIgQ1JMRgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1SYW5nZTogYnl0ZXMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5kYXRhKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4gPSAwOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmxlbiA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zcHJpbnRmKGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSTEYgIi0tJTAxMHVpIiBDUkxGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6ICVzIiBDUkxGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVJhbmdlOiBieXRlcyAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAtIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGE7Ci0KLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NucHJpbnRmKChjaGFyICopIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGEsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JMRiAiLS0lMDEwIiBOR1hfVUlOVF9UX0ZNVCBDUkxGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6ICVzIiBDUkxGCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVJhbmdlOiBieXRlcyAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhKTsKLQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcGFsbG9jKHItPnBvb2wsIDMxICsgMTAgKyAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VSUk9SKTsKLQotICAgICAgICAgICAgLyogIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PTAxMjM0NTY3ODkiICovCi0KLSAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUubGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NwcmludGYoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PSUwMTB1aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5KQotICAgICAgICAgICAgICAgICAgICAgICAtIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YTsKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgbmd4X3NucHJpbnRmKChjaGFyICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEgKyAxMCArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBhcnQvYnl0ZXJhbmdlczsgYm91bmRhcnk9JTAxMCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX1VJTlRfVF9GTVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5KTsKLSNlbmRpZgotCi0gICAgICAgICAgICAvKiB0aGUgc2l6ZSBvZiB0aGUgbGFzdCBib3VuZGFyeSBDUkxGICItLTAxMjM0NTY3ODktLSIgQ1JMRiAqLwotICAgICAgICAgICAgbGVuID0gNCArIDEwICsgNDsKLQotICAgICAgICAgICAgcmFuZ2UgPSByLT5oZWFkZXJzX291dC5yYW5nZXMuZWx0czsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByLT5oZWFkZXJzX291dC5yYW5nZXMubmVsdHM7IGkrKykgewotICAgICAgICAgICAgICAgIG5neF90ZXN0X251bGwocmFuZ2VbaV0uY29udGVudF9yYW5nZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhyLT5wb29sLCAyMCArIDEgKyAyMCArIDEgKyAyMCArIDUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VSUk9SKTsKLQotICAgICAgICAgICAgICAgIC8qIHRoZSBzaXplIG9mIHRoZSByYW5nZTogIlNTU1MtRUVFRS9UVFRUIiBDUkxGIENSTEYgKi8KLQotICAgICAgICAgICAgICAgIHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UubGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zcHJpbnRmKHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlTy0lTy8lTyIgQ1JMRiBDUkxGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSByYW5nZVtpXS5jb250ZW50X3JhbmdlLmRhdGE7Ci0jaWYgMAotICAgICAgICAgICAgICAgICAgbmd4X3NucHJpbnRmKChjaGFyICopIHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMCArIDEgKyAyMCArIDEgKyAyMCArIDUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZGX1RfRk1UICItIiBPRkZfVF9GTVQgIi8iIE9GRl9UX0ZNVCBDUkxGIENSTEYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbik7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIGxlbiArPSBjdHgtPmJvdW5kYXJ5X2hlYWRlci5sZW4gKyByYW5nZVtpXS5jb250ZW50X3JhbmdlLmxlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoc2l6ZV90KSAocmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gbGVuOwotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGggPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmxlbiA9IG5neF9zcHJpbnRmKGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JMRiAiLS0lMDEwdWQiIENSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiAlViIgQ1JMRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb250ZW50LVJhbmdlOiBieXRlcyAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGE7CiAgICAgfQogCisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhID0KKyAgICAgICAgICAgbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2YoIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2J5dGVyYW5nZXM7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvdW5kYXJ5PTAxMjM0NTY3ODkiKSAtIDEpOworCisgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+dmFsdWUuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgLyogIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PTAxMjM0NTY3ODkiICovCisKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmxlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3ByaW50ZihyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVsdGlwYXJ0L2J5dGVyYW5nZXM7IGJvdW5kYXJ5PSUwMTB1ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5kYXRhOworCisgICAgLyogdGhlIHNpemUgb2YgdGhlIGxhc3QgYm91bmRhcnkgQ1JMRiAiLS0wMTIzNDU2Nzg5LS0iIENSTEYgKi8KKyAgICBsZW4gPSBzaXplb2YoQ1JMRiAiLS0wMTIzNDU2Nzg5LS0iIENSTEYpIC0gMTsKKworICAgIHJhbmdlID0gci0+aGVhZGVyc19vdXQucmFuZ2VzLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IHItPmhlYWRlcnNfb3V0LnJhbmdlcy5uZWx0czsgaSsrKSB7CisKKyAgICAgICAgLyogdGhlIHNpemUgb2YgdGhlIHJhbmdlOiAiU1NTUy1FRUVFL1RUVFQiIENSTEYgQ1JMRiAqLworCisgICAgICAgIHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wYWxsb2Moci0+cG9vbCwgMyAqIE5HWF9PRkZfVF9MRU4gKyAyICsgNCk7CisKKyAgICAgICAgaWYgKHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VbaV0uY29udGVudF9yYW5nZS5sZW4gPSBuZ3hfc3ByaW50ZihyYW5nZVtpXS5jb250ZW50X3JhbmdlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlTy0lTy8lTyIgQ1JMRiBDUkxGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YTsKKworICAgICAgICBsZW4gKz0gY3R4LT5ib3VuZGFyeV9oZWFkZXIubGVuICsgcmFuZ2VbaV0uY29udGVudF9yYW5nZS5sZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHNpemVfdCkgKHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0KTsKKyAgICB9CisKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gbGVuOworICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoID0gTlVMTDsKKwogICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiB9CiAKQEAgLTQ5NiwzMyArNDYxLDU0IEBACiAgICAgICAgICAgICAgKiAiQ29udGVudC1SYW5nZTogYnl0ZXMgIgogICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoYiwgbmd4X2NhbGxvY19idWYoci0+cG9vbCksIE5HWF9FUlJPUik7CisgICAgICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYi0+bWVtb3J5ID0gMTsKICAgICAgICAgICAgIGItPnBvcyA9IGN0eC0+Ym91bmRhcnlfaGVhZGVyLmRhdGE7CiAgICAgICAgICAgICBiLT5sYXN0ID0gY3R4LT5ib3VuZGFyeV9oZWFkZXIuZGF0YSArIGN0eC0+Ym91bmRhcnlfaGVhZGVyLmxlbjsKIAotICAgICAgICAgICAgbmd4X3Rlc3RfbnVsbChoY2wsIG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpLCBOR1hfRVJST1IpOworICAgICAgICAgICAgaWYgKCEoaGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaGNsLT5idWYgPSBiOwogCisKICAgICAgICAgICAgIC8qICJTU1NTLUVFRUUvVFRUVCIgQ1JMRiBDUkxGICovCiAKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoYiwgbmd4X2NhbGxvY19idWYoci0+cG9vbCksIE5HWF9FUlJPUik7CisgICAgICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKICAgICAgICAgICAgIGItPnBvcyA9IHJhbmdlW2ldLmNvbnRlbnRfcmFuZ2UuZGF0YTsKICAgICAgICAgICAgIGItPmxhc3QgPSByYW5nZVtpXS5jb250ZW50X3JhbmdlLmRhdGEgKyByYW5nZVtpXS5jb250ZW50X3JhbmdlLmxlbjsKIAotICAgICAgICAgICAgbmd4X3Rlc3RfbnVsbChyY2wsIG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpLCBOR1hfRVJST1IpOworICAgICAgICAgICAgaWYgKCEocmNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcmNsLT5idWYgPSBiOwogCisKICAgICAgICAgICAgIC8qIHRoZSByYW5nZSBkYXRhICovCiAKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoYiwgbmd4X2NhbGxvY19idWYoci0+cG9vbCksIE5HWF9FUlJPUik7CisgICAgICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYi0+aW5fZmlsZSA9IDE7CiAgICAgICAgICAgICBiLT5maWxlX3BvcyA9IHJhbmdlW2ldLnN0YXJ0OwogICAgICAgICAgICAgYi0+ZmlsZV9sYXN0ID0gcmFuZ2VbaV0uZW5kOwogICAgICAgICAgICAgYi0+ZmlsZSA9IGluLT5idWYtPmZpbGU7CiAKLSAgICAgICAgICAgIG5neF9hbGxvY19saW5rX2FuZF9zZXRfYnVmKGRjbCwgYiwgci0+cG9vbCwgTkdYX0VSUk9SKTsKKyAgICAgICAgICAgIGlmICghKGRjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRjbC0+YnVmID0gYjsKIAogICAgICAgICAgICAgKmxsID0gaGNsOwogICAgICAgICAgICAgaGNsLT5uZXh0ID0gcmNsOwpAQCAtNTMyLDE1ICs1MTgsMjkgQEAKIAogICAgICAgICAvKiB0aGUgbGFzdCBib3VuZGFyeSBDUkxGICItLTAxMjM0NTY3ODktLSIgQ1JMRiAgKi8KIAotICAgICAgICBuZ3hfdGVzdF9udWxsKGIsIG5neF9jYWxsb2NfYnVmKHItPnBvb2wpLCBOR1hfRVJST1IpOworICAgICAgICBpZiAoIShiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCkpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKICAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKICAgICAgICAgYi0+bGFzdF9idWYgPSAxOwotICAgICAgICBuZ3hfdGVzdF9udWxsKGItPnBvcywgbmd4X3BhbGxvYyhyLT5wb29sLCA0ICsgMTAgKyA0KSwgTkdYX0VSUk9SKTsKKworICAgICAgICBiLT5wb3MgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZihDUkxGICItLTAxMjM0NTY3ODktLSIgQ1JMRikgLSAxKTsKKyAgICAgICAgaWYgKGItPnBvcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+cG9zLCBjdHgtPmJvdW5kYXJ5X2hlYWRlci5kYXRhLCA0ICsgMTApOwogICAgICAgICAqYi0+bGFzdCsrID0gJy0nOyAqYi0+bGFzdCsrID0gJy0nOwogICAgICAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKIAotICAgICAgICBuZ3hfYWxsb2NfbGlua19hbmRfc2V0X2J1ZihoY2wsIGIsIHItPnBvb2wsIE5HWF9FUlJPUik7CisgICAgICAgIGlmICghKGhjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGhjbC0+YnVmID0gYjsKKyAgICAgICAgaGNsLT5uZXh0ID0gTlVMTDsKKwogICAgICAgICAqbGwgPSBoY2w7CiAKICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfYm9keV9maWx0ZXIociwgb3V0KTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfaGFuZGxlci5jCmluZGV4IGFhM2E2NTYuLjA5NzNlZjAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX2hhbmRsZXIuYwpAQCAtMTQ2LDggKzE0Niw4IEBACiAgICAgICAgIGlmIChyYyA9PSBOR1hfREVDTElORUQpIHsKICAgICAgICAgICAgIGlmIChzY2YtPmxvZykgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgZG9lcyBub3QgbWF0Y2ggXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVbaV0ucmVfbmFtZS5kYXRhLCByLT51cmkuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlVlwiIGRvZXMgbm90IG1hdGNoIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnVsZVtpXS5yZV9uYW1lLCAmci0+dXJpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNTYsMTUgKzE1NiwxNSBAQAogICAgICAgICBpZiAocmMgPCAwKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlZ2V4X2V4ZWNfbgotICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZDogJWQgb24gXCIlc1wiIHVzaW5nIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCByLT51cmkuZGF0YSwgcnVsZVtpXS5yZV9uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZhaWxlZDogJWQgb24gXCIlVlwiIHVzaW5nIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCAmci0+dXJpLCAmcnVsZVtpXS5yZV9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2NmLT5sb2cpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBtYXRjaGVzIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVbaV0ucmVfbmFtZS5kYXRhLCByLT51cmkuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgbWF0Y2hlcyBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcnVsZVtpXS5yZV9uYW1lLCAmci0+dXJpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChydWxlW2ldLnN0YXR1cykgewpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgIHVyaS5sZW4gKz0gbWF0Y2hlc1syICogbiArIDFdIC0gbWF0Y2hlc1syICogbl07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoISh1cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgdXJpLmxlbiArIDEpKSkgeworICAgICAgICBpZiAoISh1cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgdXJpLmxlbikpKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTIwMywxMSArMjAzLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgICpwID0gJ1wwJzsKLQogICAgICAgICBpZiAoc2NmLT5sb2cpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInJld3JpdHRlbiB1cmk6IFwiJXNcIiIsIHVyaS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInJld3JpdHRlbiB1cmk6IFwiJVZcIiIsICZ1cmkpOwogICAgICAgICB9CiAKICAgICAgICAgci0+dXJpID0gdXJpOwpAQCAtMzUzLDcgKzM1MSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBwYXJhbWV0ZXIgXCIlc1wiIiwgdmFsdWVbM10uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcGFyYW1ldGVyIFwiJVZcIiIsICZ2YWx1ZVszXSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtNDI3LDcgKzQyNSw3IEBACiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBwYXJhbWV0ZXIgXCIlc1wiIiwgdmFsdWVbM10uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBhcmFtZXRlciBcIiVWXCIiLCAmdmFsdWVbM10pOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfaGFuZGxlci5jCmluZGV4IGM0ZmZkZTMuLjEyY2Y1YjMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19oYW5kbGVyLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCAmZmlsZV9jcmMpOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBvcGVuIGZpbGUgY2FjaGUgZ2V0OiAiIFBUUl9GTVQsIGZpbGUpOworICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBvcGVuIGZpbGUgY2FjaGUgZ2V0OiAlcCIsIGZpbGUpOwogCiAgICAgICAgIGlmIChmaWxlICYmICFmaWxlLT5leHBpcmVkKSB7CiAgICAgICAgICAgICByLT5jYWNoZSA9IGZpbGU7CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZyZWRpcmVjdF9jcmMpOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZWRpcmVjdCBjYWNoZSBnZXQ6ICIgUFRSX0ZNVCwgcmVkaXJlY3QpOworICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZWRpcmVjdCBjYWNoZSBnZXQ6ICVwIiwgcmVkaXJlY3QpOwogCiAgICAgICAgIGlmIChyZWRpcmVjdCAmJiAhcmVkaXJlY3QtPmV4cGlyZWQpIHsKIApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKICAgICAvKiBvcGVuIGZpbGUgKi8KIAotI2lmIChXSU45WCkKKyNpZiAoTkdYX1dJTjlYKQogCiAgICAgLyogVE9ETzogcmVkaXJlY3QgY2FjaGUgKi8KIApAQCAtMjc2LDcgKzI3Niw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmd4X2lzX2RpcigmZmkpKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnKGxvZywgIkhUVFAgRElSOiAnJXMnIiBfIG5hbWUuZGF0YSk7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJIVFRQIERJUjogXCIlc1wiIiwgbmFtZS5kYXRhKTsKIAogICAgICAgICAgICAgaWYgKCEoci0+aGVhZGVyc19vdXQubG9jYXRpb24gPQogICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2FkZF9oZWFkZXIoJnItPmhlYWRlcnNfb3V0LCBuZ3hfaHR0cF9oZWFkZXJzX291dCkpKQpAQCAtMzg0LDcgKzM4NSw3IEBACiAgICAgICAgICAgICBsb2NhdGlvbi5sZW4tLTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZWRpcmVjdCBjYWNoZSBhbGxvYzogIiBQVFJfRk1ULCByZWRpcmVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCByZWRpcmVjdCBjYWNoZSBhbGxvYzogJXAiLCByZWRpcmVjdCk7CiAKICAgICAgICAgICAgIGlmIChyZWRpcmVjdCkgewogICAgICAgICAgICAgICAgIHJlZGlyZWN0LT5mZCA9IE5HWF9JTlZBTElEX0ZJTEU7CkBAIC00MDMsMTEgKzQwNCwxMSBAQAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfTU9WRURfUEVSTUFORU5UTFk7CiAgICAgfQogCi0jaWYgIShXSU4zMikgLyogdGhlIG5vdCByZWd1bGFyIGZpbGVzIGFyZSBwcm9iYWJseSBVbml4IHNwZWNpZmljICovCisjaWYgIShOR1hfV0lOMzIpIC8qIHRoZSBub3QgcmVndWxhciBmaWxlcyBhcmUgcHJvYmFibHkgVW5peCBzcGVjaWZpYyAqLwogCiAgICAgaWYgKCFuZ3hfaXNfZmlsZSgmZmkpKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGEgcmVndWxhciBmaWxlIiwgbmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAiXCIlc1wiIGlzIG5vdCBhIHJlZ3VsYXIgZmlsZSIsIG5hbWUuZGF0YSk7CiAKICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGZkKSA9PSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKQEAgLTQ1OSw3ICs0NjAsNyBAQAogI2VuZGlmCiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJodHRwIG9wZW4gZmlsZSBjYWNoZSBhbGxvYzogIiBQVFJfRk1ULCBmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgb3BlbiBmaWxlIGNhY2hlIGFsbG9jOiAlcCIsIGZpbGUpOwogCiAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICBmaWxlLT5mZCA9IGZkOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfaGFuZGxlci5jCmluZGV4IDM1N2FmZmYuLmNlNDlhZTQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdHVzX2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXR1c19oYW5kbGVyLmMKQEAgLTE3MSwxMCArMTcxLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBiLT5sYXN0ICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBiLT5sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1RVQjogc2hvdWxkIGJlIE5HWF9QSURfVF9MRU4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9JTlQ2NF9MRU4gKyBOR1hfSU5UMzJfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUElEX1RfRk1UICIgJTR1Iiwgbmd4X3BpZCwgaSk7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIiVQICU1dWkiLCBuZ3hfcGlkLCBpKTsKIAogICAgICAgICAgICAgc3dpdGNoIChyLT5odHRwX3N0YXRlKSB7CiAgICAgICAgICAgICBjYXNlIE5HWF9IVFRQX0lOSVRJTkdfUkVRVUVTVF9TVEFURToKQEAgLTI1MCwxMCArMjQ3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBiLT5sYXN0ICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBiLT5sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1RVQjogc2hvdWxkIGJlIE5HWF9QSURfVF9MRU4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9JTlQ2NF9MRU4gKyBOR1hfSU5UMzJfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUElEX1RfRk1UICIgJTR1Iiwgbmd4X3BpZCwgaSk7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIiVQICU1dWkiLCBuZ3hfcGlkLCBpKTsKIAogICAgICAgICAgICAgKihiLT5sYXN0KyspID0gJyAnOwogICAgICAgICAgICAgKihiLT5sYXN0KyspID0gJ3MnOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYwppbmRleCBiYWZkZWE4Li4yMzg1Y2VlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXIuYwpAQCAtMjcsMTUgKzI3LDEzIEBACiAgICAgbmd4X3N0cl90ICAgZG9tYWluOwogICAgIG5neF9zdHJfdCAgIHBhdGg7CiAgICAgdGltZV90ICAgICAgZXhwaXJlczsKLQotICAgIG5neF9pbnRfdCAgIHAzcDsKLSAgICBuZ3hfc3RyX3QgICBwM3Bfc3RyaW5nOworICAgIG5neF9zdHJfdCAgIHAzcDsKIH0gbmd4X2h0dHBfdXNlcmlkX2NvbmZfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdWludDMyX3QgICAgICAgICAgdWlkX2dvdFs0XTsKLSAgICB1aW50MzJfdCAgICAgICAgICB1aWRfc2V0WzRdOworICAgIHVpbnQzMl90ICAgIHVpZF9nb3RbNF07CisgICAgdWludDMyX3QgICAgdWlkX3NldFs0XTsKIH0gbmd4X2h0dHBfdXNlcmlkX2N0eF90OwogCiAKQEAgLTU2LDggKzU0LDEwIEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfdXNlcmlkX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF91c2VyaWRfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNoaWxkKTsKLWNoYXIgKm5neF9jb25mX2NoZWNrX2RvbWFpbihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSk7CitjaGFyICpuZ3hfaHR0cF91c2VyaWRfZG9tYWluKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKK2NoYXIgKm5neF9odHRwX3VzZXJpZF9wYXRoKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIGNoYXIgKm5neF9odHRwX3VzZXJpZF9leHBpcmVzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOworY2hhciAqbmd4X2h0dHBfdXNlcmlkX3AzcChuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSk7CiAKIAogc3RhdGljIHVpbnQzMl90ICBzZXF1ZW5jZXJfdjEgPSAxOwpAQCAtNzksOCArNzksMTEgQEAKIH07CiAKIAotc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2NvbmZfY2hlY2tfZG9tYWluX3AgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NvbmZfY2hlY2tfZG9tYWluOworc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2h0dHBfdXNlcmlkX2RvbWFpbl9wID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXNlcmlkX2RvbWFpbjsKKworc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2h0dHBfdXNlcmlkX3BhdGhfcCA9IG5neF9odHRwX3VzZXJpZF9wYXRoOworc3RhdGljIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgbmd4X2h0dHBfdXNlcmlkX3AzcF9wID0gbmd4X2h0dHBfdXNlcmlkX3AzcDsKIAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2h0dHBfdXNlcmlkX2NvbW1hbmRzW10gPSB7CkBAIC0xMTEsMTQgKzExNCwxNCBAQAogICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXNlcmlkX2NvbmZfdCwgZG9tYWluKSwKLSAgICAgICZuZ3hfY29uZl9jaGVja19kb21haW5fcCB9LAorICAgICAgJm5neF9odHRwX3VzZXJpZF9kb21haW5fcCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJ1c2VyaWRfcGF0aCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCiAgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF91c2VyaWRfY29uZl90LCBwYXRoKSwKLSAgICAgIE5VTEwgfSwKKyAgICAgICZuZ3hfaHR0cF91c2VyaWRfcGF0aF9wIH0sCiAKICAgICB7IG5neF9zdHJpbmcoInVzZXJpZF9leHBpcmVzIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCkBAIC0xMjcsNiArMTMwLDEzIEBACiAgICAgICAwLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJ1c2VyaWRfcDNwIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF91c2VyaWRfY29uZl90LCBwM3ApLAorICAgICAgJm5neF9odHRwX3VzZXJpZF9wM3BfcCB9LAorCiAgICAgbmd4X251bGxfY29tbWFuZAogfTsKIApAQCAtMjEwLDQwICsyMjAsNDQgQEAKIAogICAgIGZvciAoaSA9IDA7IGkgPCByLT5oZWFkZXJzX2luLmNvb2tpZXMubmVsdHM7IGkrKykgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImNvb2tpZTogXCIlc1wiIiwgY29va2llc1tpXS0+dmFsdWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJjb29raWU6IFwiJVZcIiIsICZjb29raWVzW2ldLT52YWx1ZSk7CiAKKyAgICAgICAgaWYgKGNvbmYtPm5hbWUubGVuID49IGNvb2tpZXNbaV0tPnZhbHVlLmxlbikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBzdGFydCA9IGNvb2tpZXNbaV0tPnZhbHVlLmRhdGE7CiAgICAgICAgIGVuZCA9IGNvb2tpZXNbaV0tPnZhbHVlLmRhdGEgKyBjb29raWVzW2ldLT52YWx1ZS5sZW47CiAKLSAgICAgICAgZm9yIChzdGFydCA9IGNvb2tpZXNbaV0tPnZhbHVlLmRhdGE7IHN0YXJ0IDwgZW5kOyAvKiB2b2lkICovKSB7CisgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCkgewogCi0gICAgICAgICAgICBpZiAoY29uZi0+bmFtZS5sZW4gPj0gY29va2llc1tpXS0+dmFsdWUubGVuCi0gICAgICAgICAgICAgICAgfHwgbmd4X3N0cm5jbXAoc3RhcnQsIGNvbmYtPm5hbWUuZGF0YSwgY29uZi0+bmFtZS5sZW4pICE9IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3RhcnQgKz0gY29uZi0+bmFtZS5sZW47CisgICAgICAgICAgICBpZiAobmd4X3N0cm5jbXAoc3RhcnQsIGNvbmYtPm5hbWUuZGF0YSwgY29uZi0+bmFtZS5sZW4pICE9IDApIHsKKwogICAgICAgICAgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAqc3RhcnQrKyAhPSAnOycpIHsgLyogdm9pZCAqLyB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKC8qIHZvaWQgKi87IHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnICc7IHN0YXJ0KyspIHsgLyoqLyB9CisgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnICcpIHsgc3RhcnQrKzsgfQogCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoc3RhcnQgKz0gY29uZi0+bmFtZS5sZW47IHN0YXJ0IDwgZW5kICYmICpzdGFydCA9PSAnICc7IHN0YXJ0KyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogdm9pZCAqLwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhcnQgKz0gY29uZi0+bmFtZS5sZW47CiAKLSAgICAgICAgICAgIGlmICgqc3RhcnQgIT0gJz0nKSB7CisgICAgICAgICAgICB3aGlsZSAoc3RhcnQgPCBlbmQgJiYgKnN0YXJ0ID09ICcgJykgeyBzdGFydCsrOyB9CisKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBlbmQgfHwgKnN0YXJ0KysgIT0gJz0nKSB7CisgICAgICAgICAgICAgICAgLyogdGhlIGludmFsaWQgIkNvb2tpZSIgaGVhZGVyICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoc3RhcnQrKzsgc3RhcnQgPCBlbmQgJiYgKnN0YXJ0ID09ICcgJzsgc3RhcnQrKykgeyAvKiB2b2lkICovIH0KKyAgICAgICAgICAgIHdoaWxlIChzdGFydCA8IGVuZCAmJiAqc3RhcnQgPT0gJyAnKSB7IHN0YXJ0Kys7IH0KIAotICAgICAgICAgICAgZm9yIChsYXN0ID0gc3RhcnQ7IGxhc3QgPCBlbmQgJiYgKmxhc3QgIT0gJzsnOyBsYXN0KyspIHsgLyoqLyB9CisgICAgICAgICAgICBsYXN0ID0gc3RhcnQ7CisKKyAgICAgICAgICAgIHdoaWxlIChsYXN0IDwgZW5kICYmICpsYXN0KysgIT0gJzsnKSB7IC8qIHZvaWQgKi8gfQogCiAgICAgICAgICAgICBpZiAobGFzdCAtIHN0YXJ0IDwgMjIpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgdG9vIHNob3J0IHVzZXJpZCBjb29raWUgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZXNbaV0tPnZhbHVlLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IHRvbyBzaG9ydCB1c2VyaWQgY29va2llIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29va2llc1tpXS0+dmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0yNTksMTMgKzI3MywxMyBAQAogCiAgICAgICAgICAgICBpZiAobmd4X2RlY29kZV9iYXNlNjQoJmRzdCwgJnNyYykgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzZW50IGludmFsaWQgdXNlcmlkIGNvb2tpZSBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llc1tpXS0+dmFsdWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgaW52YWxpZCB1c2VyaWQgY29va2llIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29va2llc1tpXS0+dmFsdWUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1aWQ6ICUwOFglMDhYJTA4WCUwOFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInVpZDogJTA4WEQlMDhYRCUwOFhEJTA4WEQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51aWRfZ290WzBdLCBjdHgtPnVpZF9nb3RbMV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnVpZF9nb3RbMl0sIGN0eC0+dWlkX2dvdFszXSk7CiAKQEAgLTI4MCwxNCArMjk0LDEzIEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3VzZXJpZF9zZXRfdWlkKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXNlcmlkX2N0eF90ICpjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3VzZXJpZF9jb25mX3QgKmNvbmYpCi0KIHsKICAgICB1X2NoYXIgICAgICAgICAgICAgICpjb29raWUsICpwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgIGxlbjsKICAgICBzb2NrbGVuX3QgICAgICAgICAgICBzbGVuOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgIGFkZHJfaW47CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgc3JjLCBkc3Q7Ci0gICAgbmd4X3RhYmxlX2VsdF90ICAgICAqc2V0X2Nvb2tpZTsKKyAgICBuZ3hfdGFibGVfZWx0X3QgICAgICpzZXRfY29va2llLCAqcDNwOwogCiAgICAgLyogVE9ETzogbXV0ZXggZm9yIHNlcXVlbmNlcnMgKi8KIApAQCAtMzMzLDE4ICszNDYsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGxlbiA9IGNvbmYtPm5hbWUubGVuICsgMSArIG5neF9iYXNlNjRfZW5jb2RlZF9sZW5ndGgoMTYpICsgMTsKKyAgICBsZW4gPSBjb25mLT5uYW1lLmxlbiArIDEgKyBuZ3hfYmFzZTY0X2VuY29kZWRfbGVuZ3RoKDE2KSArIGNvbmYtPnBhdGgubGVuOwogCiAgICAgaWYgKGNvbmYtPmV4cGlyZXMpIHsKICAgICAgICAgbGVuICs9IHNpemVvZihleHBpcmVzKSAtIDEgKyAyOwogICAgIH0KIAogICAgIGlmIChjb25mLT5kb21haW4ubGVuID4gMSkgewotICAgICAgICBsZW4gKz0gc2l6ZW9mKCI7IGRvbWFpbj0iKSAtIDEgKyBjb25mLT5kb21haW4ubGVuOwotICAgIH0KLQotICAgIGlmIChjb25mLT5wYXRoLmxlbikgewotICAgICAgICBsZW4gKz0gc2l6ZW9mKCI7IHBhdGg9IikgLSAxICsgY29uZi0+cGF0aC5sZW47CisgICAgICAgIGxlbiArPSBjb25mLT5kb21haW4ubGVuOwogICAgIH0KIAogICAgIGlmICghKGNvb2tpZSA9IG5neF9wYWxsb2Moci0+cG9vbCwgbGVuKSkpIHsKQEAgLTM3MSwxOSArMzgwLDEwIEBACiAgICAgfQogCiAgICAgaWYgKGNvbmYtPmRvbWFpbi5sZW4gPiAxKSB7Ci0gICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsICI7IGRvbWFpbj0iLCBzaXplb2YoIjsgZG9tYWluPSIpIC0gMSk7CiAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHAsIGNvbmYtPmRvbWFpbi5kYXRhLCBjb25mLT5kb21haW4ubGVuKTsKICAgICB9CiAKLSAgICBpZiAoY29uZi0+cGF0aC5sZW4pIHsKLSAgICAgICAgcCA9IG5neF9jcHltZW0ocCwgIjsgcGF0aD0iLCBzaXplb2YoIjsgcGF0aD0iKSAtIDEpOwotICAgICAgICBwID0gbmd4X2NweW1lbShwLCBjb25mLT5wYXRoLmRhdGEsIGNvbmYtPnBhdGgubGVuKTsKLSAgICB9Ci0KLSAgICAqcCA9ICdcMCc7Ci0KLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAidWlkIGNvb2tpZTogXCIlc1wiIiwgY29va2llKTsKKyAgICBwID0gbmd4X2NweW1lbShwLCBjb25mLT5wYXRoLmRhdGEsIGNvbmYtPnBhdGgubGVuKTsKIAogICAgIGlmICghKHNldF9jb29raWUgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKSkpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTM5NCw2ICszOTQsMjEgQEAKICAgICBzZXRfY29va2llLT52YWx1ZS5sZW4gPSBwIC0gY29va2llOwogICAgIHNldF9jb29raWUtPnZhbHVlLmRhdGEgPSBjb29raWU7CiAKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAidWlkIGNvb2tpZTogXCIlVlwiIiwgJnNldF9jb29raWUtPnZhbHVlKTsKKworICAgIGlmIChjb25mLT5wM3AubGVuID09IDEpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBpZiAoIShwM3AgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKSkpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBwM3AtPmtleS5sZW4gPSBzaXplb2YoIlAzUCIpIC0gMTsKKyAgICBwM3AtPmtleS5kYXRhID0gKHVfY2hhciAqKSAiUDNQIjsKKyAgICBwM3AtPnZhbHVlID0gY29uZi0+cDNwOworCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIApAQCAtNDI1LDkgKzQ0MCw5IEBACiAKICAgICAqYnVmKysgPSAnPSc7CiAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgMzMsICIlMDhYJTA4WCUwOFglMDhYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dWlkX2dvdFswXSwgY3R4LT51aWRfZ290WzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51aWRfZ290WzJdLCBjdHgtPnVpZF9nb3RbM10pOworICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlMDhYRCUwOFhEJTA4WEQlMDhYRCIsCisgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dWlkX2dvdFswXSwgY3R4LT51aWRfZ290WzFdLAorICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnVpZF9nb3RbMl0sIGN0eC0+dWlkX2dvdFszXSk7CiB9CiAKIApAQCAtNDU4LDkgKzQ3Myw5IEBACiAKICAgICAqYnVmKysgPSAnPSc7CiAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgMzMsICIlMDhYJTA4WCUwOFglMDhYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dWlkX3NldFswXSwgY3R4LT51aWRfc2V0WzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51aWRfc2V0WzJdLCBjdHgtPnVpZF9zZXRbM10pOworICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlMDhYRCUwOFhEJTA4WEQlMDhYRCIsCisgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dWlkX3NldFswXSwgY3R4LT51aWRfc2V0WzFdLAorICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnVpZF9zZXRbMl0sIGN0eC0+dWlkX3NldFszXSk7CiB9CiAKIApAQCAtNTEwLDYgKzUyNSw4IEBACiAgICAgY29uZi0+ZG9tYWluLmRhdGUgPSBOVUxMOwogICAgIGNvbmYtPnBhdGgubGVuID0gMDsKICAgICBjb25mLT5wYXRoLmRhdGUgPSBOVUxMOworICAgIGNvbmYtPnAzcC5sZW4gPSAwOworICAgIGNvbmYtPnAzcC5kYXRlID0gTlVMTDsKIAogICAgICovCiAKQEAgLTUzMSw3ICs1NDgsOCBAQAogCiAgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPm5hbWUsIHByZXYtPm5hbWUsICJ1aWQiKTsKICAgICBuZ3hfY29uZl9tZXJnZV9zdHJfdmFsdWUoY29uZi0+ZG9tYWluLCBwcmV2LT5kb21haW4sICIuIik7Ci0gICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPnBhdGgsIHByZXYtPnBhdGgsICIvIik7CisgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPnBhdGgsIHByZXYtPnBhdGgsICI7IHBhdGg9LyIpOworICAgIG5neF9jb25mX21lcmdlX3N0cl92YWx1ZShjb25mLT5wM3AsIHByZXYtPnAzcCwgIi4iKTsKIAogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNlcnZpY2UsIHByZXYtPnNlcnZpY2UsIE5HWF9DT05GX1VOU0VUKTsKICAgICBuZ3hfY29uZl9tZXJnZV9zZWNfdmFsdWUoY29uZi0+ZXhwaXJlcywgcHJldi0+ZXhwaXJlcywgMCk7CkBAIC01NDAsMTUgKzU1OCw0OSBAQAogfQogCiAKLWNoYXIgKm5neF9jb25mX2NoZWNrX2RvbWFpbihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSkKK2NoYXIgKm5neF9odHRwX3VzZXJpZF9kb21haW4obmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpCiB7CiAgICAgbmd4X3N0cl90ICAqZG9tYWluID0gZGF0YTsKIAorICAgIHVfY2hhciAgKnAsICpuZXc7CisKICAgICBpZiAoZG9tYWluLT5sZW4gPT0gNCAmJiBuZ3hfc3RyY21wKGRvbWFpbi0+ZGF0YSwgIm5vbmUiKSA9PSAwKSB7CiAgICAgICAgIGRvbWFpbi0+bGVuID0gMTsKICAgICAgICAgZG9tYWluLT5kYXRhID0gKHVfY2hhciAqKSAiLiI7CisKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogICAgIH0KIAorICAgIGlmICghKG5ldyA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIHNpemVvZigiOyBkb21haW49IikgLSAxICsgZG9tYWluLT5sZW4pKSkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgcCA9IG5neF9jcHltZW0obmV3LCAiOyBkb21haW49Iiwgc2l6ZW9mKCI7IGRvbWFpbj0iKSAtIDEpOworICAgIHAgPSBuZ3hfY3B5bWVtKHAsIGRvbWFpbi0+ZGF0YSwgZG9tYWluLT5sZW4pOworCisgICAgZG9tYWluLT5sZW4gKz0gc2l6ZW9mKCI7IGRvbWFpbj0iKSAtIDE7CisgICAgZG9tYWluLT5kYXRhID0gbmV3OworCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQorCisKK2NoYXIgKm5neF9odHRwX3VzZXJpZF9wYXRoKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQoreworICAgIG5neF9zdHJfdCAgKnBhdGggPSBkYXRhOworCisgICAgdV9jaGFyICAqcCwgKm5ldzsKKworICAgIGlmICghKG5ldyA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIHNpemVvZigiOyBwYXRoPSIpIC0gMSArIHBhdGgtPmxlbikpKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBwID0gbmd4X2NweW1lbShuZXcsICI7IHBhdGg9Iiwgc2l6ZW9mKCI7IHBhdGg9IikgLSAxKTsKKyAgICBwID0gbmd4X2NweW1lbShwLCBwYXRoLT5kYXRhLCBwYXRoLT5sZW4pOworCisgICAgcGF0aC0+bGVuICs9IHNpemVvZigiOyBwYXRoPSIpIC0gMTsKKyAgICBwYXRoLT5kYXRhID0gbmV3OworCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQogCkBAIC01ODYsMyArNjM4LDE2IEBACiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CisKKworY2hhciAqbmd4X2h0dHBfdXNlcmlkX3AzcChuZ3hfY29uZl90ICpjZiwgdm9pZCAqcG9zdCwgdm9pZCAqZGF0YSkKK3sKKyAgICBuZ3hfc3RyX3QgICpwM3AgPSBkYXRhOworCisgICAgaWYgKHAzcC0+bGVuID09IDQgJiYgbmd4X3N0cmNtcChwM3AtPmRhdGEsICJub25lIikgPT0gMCkgeworICAgICAgICBwM3AtPmxlbiA9IDE7CisgICAgICAgIHAzcC0+ZGF0YSA9ICh1X2NoYXIgKikgIi4iOworICAgIH0KKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfY2FjaGUuYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfY2FjaGUuYwppbmRleCAwYTJhMjAwLi5mMGI1NmY1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2NhY2hlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9jYWNoZS5jCkBAIC0xNzMsOCArMTczLDggQEAKICAgICBuZ3hfY3B5c3RybihjLT5zdGF0dXNfbGluZS5kYXRhLCBwLT5zdGF0dXNfc3RhcnQsIGMtPnN0YXR1c19saW5lLmxlbiArIDEpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgY2FjaGUgc3RhdHVzICVkIFwiJXNcIiIsIAotICAgICAgICAgICAgICAgICAgIGMtPnN0YXR1cywgYy0+c3RhdHVzX2xpbmUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgImh0dHAgY2FjaGUgc3RhdHVzICV1aSBcIiVWXCIiLCAKKyAgICAgICAgICAgICAgICAgICBjLT5zdGF0dXMsICZjLT5zdGF0dXNfbGluZSk7CiAKICAgICAvKiBUT0RPOiBuZ3hfaW5pdF90YWJsZSAqLwogICAgIGMtPmhlYWRlcnNfaW4uaGVhZGVycyA9IG5neF9jcmVhdGVfdGFibGUoci0+cG9vbCwgMjApOwpAQCAtMjE5LDggKzIxOSw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgY2FjaGUgaGVhZGVyOiBcIiVzOiAlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPmtleS5kYXRhLCBoLT52YWx1ZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGNhY2hlIGhlYWRlcjogXCIlVjogJVZcIiIsICZoLT5rZXksICZoLT52YWx1ZSk7CiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC02MTQsNyArNjEzLDcgQEAKICAgICBlcCA9IHAtPnVwc3RyZWFtLT5ldmVudF9waXBlOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBwLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgY2FjaGUgdXBkYXRlIGxlbjogIiBPRkZfVF9GTVQgIjoiIE9GRl9UX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBjYWNoZSB1cGRhdGUgbGVuOiAlTzolTyIsCiAgICAgICAgICAgICAgICAgICAgcC0+Y2FjaGUtPmN0eC5sZW5ndGgsIGVwLT5yZWFkX2xlbmd0aCk7CiAKICAgICBpZiAocC0+Y2FjaGUtPmN0eC5sZW5ndGggPT0gLTEpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKaW5kZXggNjRmN2MwNy4uOTE1ZDM3OCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKQEAgLTcxMCwyNiArNzEwLDc1IEBACiB9CiAKIAotc2l6ZV90IG5neF9odHRwX3Byb3h5X2xvZ19lcnJvcih2b2lkICpkYXRhLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit1X2NoYXIgKm5neF9odHRwX3Byb3h5X2xvZ19lcnJvcih2b2lkICpkYXRhLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKICAgICBuZ3hfaHR0cF9wcm94eV9sb2dfY3R4X3QgKmN0eCA9IGRhdGE7CiAKLSAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICpyOwotICAgIG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAgKnBlZXI7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGU7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgdXJpOworICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgICAgICAgKnI7CisgICAgbmd4X3BlZXJfY29ubmVjdGlvbl90ICAgICAgICAgICAqcGVlcjsKKyAgICBuZ3hfaHR0cF9wcm94eV91cHN0cmVhbV9jb25mX3QgICp1YzsKIAogICAgIHIgPSBjdHgtPnByb3h5LT5yZXF1ZXN0OworICAgIHVjID0gY3R4LT5wcm94eS0+bGNmLT51cHN0cmVhbTsKICAgICBwZWVyID0gJmN0eC0+cHJveHktPnVwc3RyZWFtLT5wZWVyOwogCi0gICAgcmV0dXJuIG5neF9zbnByaW50ZihidWYsIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgd2hpbGUgJXMsIGNsaWVudDogJXMsIFVSTDogJXMsIHVwc3RyZWFtOiAlcyVzJXMlcyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHJveHktPmFjdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmFkZHJfdGV4dC5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgci0+dW5wYXJzZWRfdXJpLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBwZWVyLT5wZWVycy0+cGVlcnNbcGVlci0+Y3VyX3BlZXJdLmFkZHJfcG9ydF90ZXh0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnByb3h5LT5sY2YtPnVwc3RyZWFtLT51cmkuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5kYXRhICsgY3R4LT5wcm94eS0+bGNmLT51cHN0cmVhbS0+bG9jYXRpb24tPmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHItPmFyZ3MubGVuID8gIj8iIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICByLT5hcmdzLmxlbiA/IHItPmFyZ3MuZGF0YSA6ICh1X2NoYXIgKikgIiIpOworICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAiIHdoaWxlICVzLCBjbGllbnQ6ICVWLCBVUkw6ICVWLCB1cHN0cmVhbTogJVYlViIsCisgICAgICAgICAgICAgICAgICAgICBjdHgtPnByb3h5LT5hY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAmci0+Y29ubmVjdGlvbi0+YWRkcl90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgJnItPnVucGFyc2VkX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgICZwZWVyLT5wZWVycy0+cGVlcnNbcGVlci0+Y3VyX3BlZXJdLmFkZHJfcG9ydF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgJmN0eC0+cHJveHktPmxjZi0+dXBzdHJlYW0tPnVyaSk7CisgICAgbGVuIC09IHAgLSBidWY7CisgICAgYnVmID0gcDsKKworICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7CisgICAgICAgIGVzY2FwZSA9IDIgKiBuZ3hfZXNjYXBlX3VyaShOVUxMLCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9VUkkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVzY2FwZSA9IDA7CisgICAgfQorCisgICAgaWYgKGVzY2FwZSkgeworICAgICAgICBpZiAobGVuID49IHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZSkgeworCisgICAgICAgICAgICBuZ3hfZXNjYXBlX3VyaShidWYsIHItPnVyaS5kYXRhICsgdWMtPmxvY2F0aW9uLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4sIE5HWF9FU0NBUEVfVVJJKTsKKworICAgICAgICAgICAgYnVmICs9IHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiArIGVzY2FwZTsKKworICAgICAgICAgICAgaWYgKHItPmFyZ3MubGVuID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZW4gLT0gci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuICsgZXNjYXBlOworCisgICAgICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiPyVWIiwgJnItPmFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuICsgZXNjYXBlKTsKKyAgICAgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9lc2NhcGVfdXJpKHAsIHItPnVyaS5kYXRhICsgdWMtPmxvY2F0aW9uLT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiwgTkdYX0VTQ0FQRV9VUkkpOworCisgICAgICAgIHVyaS5sZW4gPSByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CisgICAgICAgIHVyaS5kYXRhID0gcDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHVyaS5sZW4gPSByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW47CisgICAgICAgIHVyaS5kYXRhID0gci0+dXJpLmRhdGEgKyB1Yy0+bG9jYXRpb24tPmxlbjsKKworICAgIH0KKworICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIlViVzJVYiLAorICAgICAgICAgICAgICAgICAgICAgICAgJnVyaSwgci0+YXJncy5sZW4gPyAiPyIgOiAiIiwgJnItPmFyZ3MpOwogfQogCiAKQEAgLTc1OSw4ICs4MDgsNyBAQAogICAgICAgICAqYnVmKysgPSAnLSc7CiAKICAgICB9IGVsc2UgewotICAgICAgICBidWYgKz0gbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgVElNRV9UX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX1RfRk1ULCBwLT5zdGF0ZS0+ZXhwaXJlZCk7CisgICAgICAgIGJ1ZiA9IG5neF9zcHJpbnRmKGJ1ZiwgIiVUIiwgcC0+c3RhdGUtPmV4cGlyZWQpOwogICAgIH0KIAogICAgICpidWYrKyA9ICcvJzsKQEAgLTc2OSw4ICs4MTcsNyBAQAogICAgICAgICAqYnVmKysgPSAnLSc7CiAKICAgICB9IGVsc2UgewotICAgICAgICBidWYgKz0gbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgVElNRV9UX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX1RfRk1ULCBwLT5zdGF0ZS0+YmxfdGltZSk7CisgICAgICAgIGJ1ZiA9IG5neF9zcHJpbnRmKGJ1ZiwgIiVUIiwgcC0+c3RhdGUtPmJsX3RpbWUpOwogICAgIH0KIAogICAgICpidWYrKyA9ICcvJzsKQEAgLTc4Myw4ICs4MzAsNyBAQAogICAgICAgICAqYnVmKysgPSAnLSc7CiAKICAgICB9IGVsc2UgewotICAgICAgICBidWYgKz0gbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgNCwgIiUiIE5HWF9VSU5UX1RfRk1ULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnN0YXRlLT5zdGF0dXMpOworICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIldWkiLCBwLT5zdGF0ZS0+c3RhdHVzKTsKICAgICB9CiAKICAgICAqYnVmKysgPSAnLyc7CkBAIC04MDMsOCArODQ5LDcgQEAKICAgICAgICAgKmJ1ZisrID0gJy0nOwogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgYnVmICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBidWYsIFRJTUVfVF9MRU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNRV9UX0ZNVCwgcC0+c3RhdGUtPmV4cGlyZXMpOworICAgICAgICBidWYgPSBuZ3hfc3ByaW50ZihidWYsICIlVCIsIHAtPnN0YXRlLT5leHBpcmVzKTsKICAgICB9CiAKICAgICAqYnVmKysgPSAnICc7CkBAIC0xMTY2LDcgKzEyMTEsNyBAQAogICAgICAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbaV0uYWRkciA9ICooaW5fYWRkcl90ICopKGgtPmhfYWRkcl9saXN0W2ldKTsKICAgICAgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzW2ldLnBvcnQgPSBsY2YtPnVwc3RyZWFtLT5wb3J0OwogCi0gICAgICAgICAgICBsZW4gPSBJTkVUX0FERFJTVFJMRU4gKyBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMTsKKyAgICAgICAgICAgIGxlbiA9IElORVRfQUREUlNUUkxFTiAtIDEgKyAxICsgbGNmLT51cHN0cmVhbS0+cG9ydF90ZXh0LmxlbjsKIAogICAgICAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbaV0uYWRkcl9wb3J0X3RleHQuZGF0YSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wYWxsb2MoY2YtPnBvb2wsIGxlbik7CkBAIC0xMTgxLDEyICsxMjI2LDEyIEBACiAKICAgICAgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzW2ldLmFkZHJfcG9ydF90ZXh0LmRhdGFbbGVuKytdID0gJzonOwogCi0gICAgICAgICAgICBuZ3hfY3B5c3RybihsY2YtPnBlZXJzLT5wZWVyc1tpXS5hZGRyX3BvcnRfdGV4dC5kYXRhICsgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgbGNmLT51cHN0cmVhbS0+cG9ydF90ZXh0LmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMSk7CisgICAgICAgICAgICBuZ3hfbWVtY3B5KGxjZi0+cGVlcnMtPnBlZXJzW2ldLmFkZHJfcG9ydF90ZXh0LmRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGxjZi0+dXBzdHJlYW0tPnBvcnRfdGV4dC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuKTsKIAogICAgICAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbaV0uYWRkcl9wb3J0X3RleHQubGVuID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gKyBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuICsgbGNmLT51cHN0cmVhbS0+cG9ydF90ZXh0LmxlbjsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKQEAgLTEyMDQsMTAgKzEyNDksMTEgQEAKICAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbMF0uYWRkciA9IGFkZHI7CiAgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzWzBdLnBvcnQgPSBsY2YtPnVwc3RyZWFtLT5wb3J0OwogCi0gICAgICAgIGxlbiA9IGxjZi0+dXBzdHJlYW0tPmhvc3QubGVuICsgbGNmLT51cHN0cmVhbS0+cG9ydF90ZXh0LmxlbiArIDE7CisgICAgICAgIGxlbiA9IGxjZi0+dXBzdHJlYW0tPmhvc3QubGVuICsgMSArIGxjZi0+dXBzdHJlYW0tPnBvcnRfdGV4dC5sZW47CiAKLSAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbMF0uYWRkcl9wb3J0X3RleHQuZGF0YSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuICsgMSk7CisgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmxlbiA9IGxlbjsKKworICAgICAgICBsY2YtPnBlZXJzLT5wZWVyc1swXS5hZGRyX3BvcnRfdGV4dC5kYXRhID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgbGVuKTsKICAgICAgICAgaWYgKGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CkBAIC0xMjE5LDkgKzEyNjUsOSBAQAogCiAgICAgICAgIGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmRhdGFbbGVuKytdID0gJzonOwogCi0gICAgICAgIG5neF9jcHlzdHJuKGxjZi0+cGVlcnMtPnBlZXJzWzBdLmFkZHJfcG9ydF90ZXh0LmRhdGEgKyBsZW4sCi0gICAgICAgICAgICAgICAgICAgIGxjZi0+dXBzdHJlYW0tPnBvcnRfdGV4dC5kYXRhLAotICAgICAgICAgICAgICAgICAgICBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuICsgMSk7CisgICAgICAgIG5neF9tZW1jcHkobGNmLT5wZWVycy0+cGVlcnNbMF0uYWRkcl9wb3J0X3RleHQuZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQuZGF0YSwKKyAgICAgICAgICAgICAgICAgICBsY2YtPnVwc3RyZWFtLT5wb3J0X3RleHQubGVuKTsKICAgICB9CiAKICAgICBjbGNmID0gbmd4X2h0dHBfY29uZl9nZXRfbW9kdWxlX2xvY19jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuaCBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oCmluZGV4IDc2ZGI2NTIuLjA5NGVlM2IgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oCisrKyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oCkBAIC0yNDUsNyArMjQ1LDcgQEAKIHZvaWQgbmd4X2h0dHBfcHJveHlfYnVzeV9sb2NrX2hhbmRsZXIobmd4X2V2ZW50X3QgKnJldik7CiB2b2lkIG5neF9odHRwX3Byb3h5X3Vwc3RyZWFtX2J1c3lfbG9jayhuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCk7CiAKLXNpemVfdCBuZ3hfaHR0cF9wcm94eV9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKK3VfY2hhciAqbmd4X2h0dHBfcHJveHlfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIHZvaWQgbmd4X2h0dHBfcHJveHlfZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCwgaW50IHJjKTsKIHZvaWQgbmd4X2h0dHBfcHJveHlfY2xvc2VfY29ubmVjdGlvbihuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYwppbmRleCA5YjNkODg0Li4wODUyYTQyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCkBAIC0yNSw3ICsyNSw4IEBACiBzdGF0aWMgc3NpemVfdCBuZ3hfaHR0cF9wcm94eV9yZWFkX3Vwc3RyZWFtX2hlYWRlcihuZ3hfaHR0cF9wcm94eV9jdHhfdCAqKTsKIHN0YXRpYyB2b2lkIG5neF9odHRwX3Byb3h5X3NlbmRfcmVzcG9uc2Uobmd4X2h0dHBfcHJveHlfY3R4X3QgKnApOwogc3RhdGljIHZvaWQgbmd4X2h0dHBfcHJveHlfcHJvY2Vzc19ib2R5KG5neF9ldmVudF90ICpldik7Ci1zdGF0aWMgdm9pZCBuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtKG5neF9odHRwX3Byb3h5X2N0eF90ICpwLCBpbnQgZnRfdHlwZSk7CitzdGF0aWMgdm9pZCBuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtKG5neF9odHRwX3Byb3h5X2N0eF90ICpwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IGZ0X3R5cGUpOwogCiAKIHN0YXRpYyBuZ3hfc3RyX3QgaHR0cF9tZXRob2RzW10gPSB7CkBAIC0xMzcsNyArMTM4LDggQEAKIAogICAgIGlmIChyLT5xdW90ZWRfdXJpKSB7CiAgICAgICAgIGVzY2FwZSA9IDIgKiBuZ3hfZXNjYXBlX3VyaShOVUxMLCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1Yy0+bG9jYXRpb24tPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9FU0NBUEVfVVJJKTsKICAgICB9IGVsc2UgewogICAgICAgICBlc2NhcGUgPSAwOwogICAgIH0KQEAgLTI0Niw3ICsyNDgsNyBAQAogCiAgICAgaWYgKGVzY2FwZSkgewogICAgICAgICBuZ3hfZXNjYXBlX3VyaShiLT5sYXN0LCByLT51cmkuZGF0YSArIHVjLT5sb2NhdGlvbi0+bGVuLAotICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4pOworICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4sIE5HWF9FU0NBUEVfVVJJKTsKICAgICAgICAgYi0+bGFzdCArPSByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGU7CiAKICAgICB9IGVsc2UgewpAQCAtNDA5LDggKzQxMSw4IEBACiAgICAgICAgICooYi0+bGFzdCsrKSA9IENSOyAqKGItPmxhc3QrKykgPSBMRjsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgaGVhZGVyOiBcIiVzOiAlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyW2ldLmtleS5kYXRhLCBoZWFkZXJbaV0udmFsdWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHByb3h5IGhlYWRlcjogXCIlVjogJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXJbaV0ua2V5LCAmaGVhZGVyW2ldLnZhbHVlKTsKICAgICB9CiAKICAgICAvKiBhZGQgIlxyXG4iIGF0IHRoZSBoZWFkZXIgZW5kICovCkBAIC02NzAsNyArNjcyLDcgQEAKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfcHJveHlfY29ubmVjdChuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCkKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHJjOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICpjOwogICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICpyOwogICAgIG5neF9vdXRwdXRfY2hhaW5fY3R4X3QgICpvdXRwdXQ7CkBAIC02ODMsNyArNjg1LDcgQEAKICAgICByYyA9IG5neF9ldmVudF9jb25uZWN0X3BlZXIoJnAtPnVwc3RyZWFtLT5wZWVyKTsKIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgcC0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHByb3h5IGNvbm5lY3Q6ICVkIiwgcmMpOworICAgICAgICAgICAgICAgICAgICJodHRwIHByb3h5IGNvbm5lY3Q6ICVpIiwgcmMpOwogCiAgICAgaWYgKHJjID09IE5HWF9FUlJPUikgewogICAgICAgICBuZ3hfaHR0cF9wcm94eV9maW5hbGl6ZV9yZXF1ZXN0KHAsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CkBAIC03MDUsNiArNzA3LDggQEAKICAgICBjLT53cml0ZS0+ZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3Byb3h5X3NlbmRfcmVxdWVzdF9oYW5kbGVyOwogICAgIGMtPnJlYWQtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9wcm94eV9wcm9jZXNzX3Vwc3RyZWFtX3N0YXR1c19saW5lOwogCisgICAgYy0+c2VuZGZpbGUgPSByLT5jb25uZWN0aW9uLT5zZW5kZmlsZTsKKwogICAgIGMtPnBvb2wgPSByLT5wb29sOwogICAgIGMtPnJlYWQtPmxvZyA9IGMtPndyaXRlLT5sb2cgPSBjLT5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CiAKQEAgLTEwMjgsOCArMTAzMiw4IEBACiAgICAgICAgICAgICAgICAgcC0+dXBzdHJlYW0tPnN0YXR1c19saW5lLmxlbiArIDEpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCBwcm94eSBzdGF0dXMgJWQgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICBwLT51cHN0cmVhbS0+c3RhdHVzLCBwLT51cHN0cmVhbS0+c3RhdHVzX2xpbmUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgc3RhdHVzICV1aSBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgIHAtPnVwc3RyZWFtLT5zdGF0dXMsICZwLT51cHN0cmVhbS0+c3RhdHVzX2xpbmUpOwogCiAKICAgICAvKiBpbml0IG9yIHJlaW5pdCB0aGUgcC0+dXBzdHJlYW0tPmhlYWRlcnNfaW4uaGVhZGVycyB0YWJsZSAqLwpAQCAtMTE0Myw4ICsxMTQ3LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwcm94eSBoZWFkZXI6IFwiJXM6ICVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+a2V5LmRhdGEsIGgtPnZhbHVlLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgaGVhZGVyOiBcIiVWOiAlVlwiIiwgJmgtPmtleSwgJmgtPnZhbHVlKTsKIAogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTE0NjcsNyArMTQ3MCw3IEBACiAKICAgICAgICAgaWYgKGVwLT51cHN0cmVhbV9kb25lIHx8IGVwLT51cHN0cmVhbV9lb2YgfHwgZXAtPnVwc3RyZWFtX2Vycm9yKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwcm94eSB1cHN0cmVhbSBleGl0OiAiIFBUUl9GTVQsIGVwLT5vdXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgdXBzdHJlYW0gZXhpdDogJXAiLCBlcC0+b3V0KTsKICAgICAgICAgICAgIG5neF9odHRwX2J1c3lfdW5sb2NrKHAtPmxjZi0+YnVzeV9sb2NrLCAmcC0+YnVzeV9sb2NrKTsKICAgICAgICAgICAgIG5neF9odHRwX3Byb3h5X2ZpbmFsaXplX3JlcXVlc3QocCwgMCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDg0LDEyICsxNDg3LDEzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgbmd4X2h0dHBfcHJveHlfbmV4dF91cHN0cmVhbShuZ3hfaHR0cF9wcm94eV9jdHhfdCAqcCwgaW50IGZ0X3R5cGUpCitzdGF0aWMgdm9pZCBuZ3hfaHR0cF9wcm94eV9uZXh0X3Vwc3RyZWFtKG5neF9odHRwX3Byb3h5X2N0eF90ICpwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IGZ0X3R5cGUpCiB7Ci0gICAgaW50ICBzdGF0dXM7CisgICAgbmd4X3VpbnRfdCAgc3RhdHVzOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBwLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgcHJveHkgbmV4dCB1cHN0cmVhbTogJWQiLCBmdF90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBwcm94eSBuZXh0IHVwc3RyZWFtOiAldWkiLCBmdF90eXBlKTsKIAogICAgIG5neF9odHRwX2J1c3lfdW5sb2NrKHAtPmxjZi0+YnVzeV9sb2NrLCAmcC0+YnVzeV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuYyBiL3NyYy9odHRwL25neF9odHRwLmMKaW5kZXggOTBiYmJlMi4uYTU1MGFjYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCkBAIC04Myw3ICs4Myw3IEBACiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAgKipjc2NmcCwgKmNzY2Y7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgICpjbGNmOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICAqY21jZjsKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICBuZ3hfaW9jcF9jb25mX3QgICAgICAgICAgICAgKmlvY3BjZjsKICNlbmRpZgogCkBAIC0zNDMsOSArMzQzLDggQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYWRkclthXS5kZWZhdWx0X3NlcnZlcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGR1cGxpY2F0ZSBkZWZhdWx0IHNlcnZlciBpbiAlczolZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNjZltsXS5maWxlX25hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc2NmW2xdLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZHVwbGljYXRlIGRlZmF1bHQgc2VydmVyIGluICVWOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNjZltsXS5maWxlX25hbWUsIGxzY2ZbbF0ubGluZSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTE2LDcgKzUxNSw3IEBACiAgICAgICAgICAgICBjbGNmID0gY3NjZi0+Y3R4LT5sb2NfY29uZltuZ3hfaHR0cF9jb3JlX21vZHVsZS5jdHhfaW5kZXhdOwogICAgICAgICAgICAgbHMtPmxvZyA9IGNsY2YtPmVycl9sb2c7CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgICAgIGlvY3BjZiA9IG5neF9ldmVudF9nZXRfY29uZihjZi0+Y3ljbGUtPmNvbmZfY3R4LCBuZ3hfaW9jcF9tb2R1bGUpOwogICAgICAgICAgICAgaWYgKGlvY3BjZi0+YWNjZXB0ZXhfcmVhZCkgewogICAgICAgICAgICAgICAgIGxzLT5wb3N0X2FjY2VwdF9idWZmZXJfc2l6ZSA9IGNzY2YtPmNsaWVudF9oZWFkZXJfYnVmZmVyX3NpemU7CkBAIC01ODIsMTggKzU4MSwxOCBAQAogICAgIGluX3BvcnQgPSBpbl9wb3J0cy5lbHRzOwogICAgIGZvciAocCA9IDA7IHAgPCBpbl9wb3J0cy5uZWx0czsgcCsrKSB7CiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAicG9ydDogJWQgJTA4eCIsIGluX3BvcnRbcF0ucG9ydCwgJmluX3BvcnRbcF0pOworICAgICAgICAgICAgICAgICAgICAgICJwb3J0OiAlZCAlcCIsIGluX3BvcnRbcF0ucG9ydCwgJmluX3BvcnRbcF0pOwogICAgICAgICBpbl9hZGRyID0gaW5fcG9ydFtwXS5hZGRycy5lbHRzOwogICAgICAgICBmb3IgKGEgPSAwOyBhIDwgaW5fcG9ydFtwXS5hZGRycy5uZWx0czsgYSsrKSB7CiAgICAgICAgICAgICBuZ3hfaW5ldF9udG9wKEFGX0lORVQsICZpbl9hZGRyW2FdLmFkZHIsIGFkZHJlc3MsIDIwKTsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczolZCAlMDh4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczolZCAlcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLCBpbl9wb3J0W3BdLnBvcnQsIGluX2FkZHJbYV0uY29yZV9zcnZfY29uZik7CiAgICAgICAgICAgICBzX25hbWUgPSBpbl9hZGRyW2FdLm5hbWVzLmVsdHM7CiAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgaW5fYWRkclthXS5uYW1lcy5uZWx0czsgbisrKSB7CiAgICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiVkICVzICUwOHgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLCBpbl9wb3J0W3BdLnBvcnQsIHNfbmFtZVtuXS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczolZCAlViAlcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIGluX3BvcnRbcF0ucG9ydCwgJnNfbmFtZVtuXS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzX25hbWVbbl0uY29yZV9zcnZfY29uZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY3MSw3ICs2NzAsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBjc2NmLT5zZXJ2ZXJfbmFtZXMubmVsdHM7IGkrKykgewogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIm5hbWU6ICVzIiwgc2VydmVyX25hbWVzW2ldLm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICJuYW1lOiAlViIsICZzZXJ2ZXJfbmFtZXNbaV0ubmFtZSk7CiAKICAgICAgICAgLyogVE9ETzogZHVwbGljYXRlIG5hbWVzIGNhbiBiZSBjaGVja2VkIGhlcmUgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuaCBiL3NyYy9odHRwL25neF9odHRwLmgKaW5kZXggMzAzYTRkYS4uNDYxOTRmMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCkBAIC0zMyw3ICszMyw3IEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVfaW50ICAgICBjb25uZWN0aW9uOworICAgIHVfaW50ICAgICAgICAgICAgICBjb25uZWN0aW9uOwogCiAgICAgLyoKICAgICAgKiB3ZSBkZWNsYXJlICJhY3Rpb24iIGFzICJjaGFyICoiIGJlY2F1c2UgdGhlIGFjdGlvbnMgYXJlIHVzdWFsbHkKQEAgLTQxLDkgKzQxLDkgQEAKICAgICAgKiBhbGwgdGhlIHRpbWUgdGhlaXIgdHlwZXMKICAgICAgKi8KIAotICAgIGNoYXIgICAgICphY3Rpb247Ci0gICAgdV9jaGFyICAgKmNsaWVudDsKLSAgICB1X2NoYXIgICAqdXJsOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmFjdGlvbjsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICpjbGllbnQ7CisgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqcmVxdWVzdDsKIH0gbmd4X2h0dHBfbG9nX2N0eF90OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDhmMTAxYmEuLjdlOGNmNjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAjaW5jbHVkZSA8bmdpbnguaD4KIAotLyogU1RVQiAqLworCiAjZGVmaW5lIE5HWF9IVFRQX0xPQ0FUSU9OX0VYQUNUICAgICAgICAgICAxCiAjZGVmaW5lIE5HWF9IVFRQX0xPQ0FUSU9OX0FVVE9fUkVESVJFQ1QgICAyCiAjZGVmaW5lIE5HWF9IVFRQX0xPQ0FUSU9OX1JFR0VYICAgICAgICAgICAzCkBAIC0zMjksMTIgKzMyOSwxMiBAQAogCiB2b2lkIG5neF9odHRwX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewotICAgIG5neF9odHRwX2xvZ19jdHhfdCAgKmxjeDsKKyAgICBuZ3hfaHR0cF9sb2dfY3R4X3QgICpjdHg7CiAKICAgICByLT5jb25uZWN0aW9uLT51bmV4cGVjdGVkX2VvZiA9IDA7CiAKLSAgICBsY3ggPSByLT5jb25uZWN0aW9uLT5sb2ctPmRhdGE7Ci0gICAgbGN4LT5hY3Rpb24gPSBOVUxMOworICAgIGN0eCA9IHItPmNvbm5lY3Rpb24tPmxvZy0+ZGF0YTsKKyAgICBjdHgtPmFjdGlvbiA9IE5VTEw7CiAKICAgICBzd2l0Y2ggKHItPmhlYWRlcnNfaW4uY29ubmVjdGlvbl90eXBlKSB7CiAgICAgY2FzZSAwOgpAQCAtNTI2LDE3ICs1MjYsMTUgQEAKIAogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgY2w6ICIgU0laRV9UX0ZNVCAiIG1heDogIiBTSVpFX1RfRk1ULAotICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiwKLSAgICAgICAgICAgICAgICAgICBjbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgImh0dHAgY2w6JXogbWF4OiV1eiIsCisgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uLCBjbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSk7CiAKICAgICBpZiAoci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uICE9IC0xCiAgICAgICAgICYmIGNsY2YtPmNsaWVudF9tYXhfYm9keV9zaXplCiAgICAgICAgICYmIGNsY2YtPmNsaWVudF9tYXhfYm9keV9zaXplIDwgKHNpemVfdCkgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uKQogICAgIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgaW50ZW50ZWQgdG8gc2VuZCB0b28gbGFyZ2UgYm9keTogIgotICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9GTVQgIiBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBpbnRlbnRlZCB0byBzZW5kIHRvbyBsYXJnZSBib2R5OiAleiBieXRlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uKTsKIAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFOwpAQCAtNTgzLDkgKzU4MSw4IEBACiAjZW5kaWYKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImZpbmQgbG9jYXRpb246ICVzXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgY2xjZnBbaV0tPmV4YWN0X21hdGNoID8gIj0gIiA6ICIiLAotICAgICAgICAgICAgICAgICAgICAgICBjbGNmcFtpXS0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImZpbmQgbG9jYXRpb246ICVzXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgY2xjZnBbaV0tPmV4YWN0X21hdGNoID8gIj0gIiA6ICIiLCAmY2xjZnBbaV0tPm5hbWUpOwogCiAgICAgICAgIGlmIChjbGNmcFtpXS0+YXV0b19yZWRpcmVjdAogICAgICAgICAgICAgJiYgci0+dXJpLmxlbiA9PSBjbGNmcFtpXS0+bmFtZS5sZW4gLSAxCkBAIC02NDksOCArNjQ2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiZmluZCBsb2NhdGlvbjogfiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICBjbGNmcFtpXS0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImZpbmQgbG9jYXRpb246IH4gXCIlVlwiIiwgJmNsY2ZwW2ldLT5uYW1lKTsKIAogICAgICAgICBuID0gbmd4X3JlZ2V4X2V4ZWMoY2xjZnBbaV0tPnJlZ2V4LCAmci0+dXJpLCBOVUxMLCAwKTsKIApAQCAtNjYxLDggKzY1Nyw4IEBACiAgICAgICAgIGlmIChuIDwgMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yZWdleF9leGVjX24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmYWlsZWQ6ICVkIG9uIFwiJXNcIiB1c2luZyBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuLCByLT51cmkuZGF0YSwgY2xjZnBbaV0tPm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkOiAlZCBvbiBcIiVWXCIgdXNpbmcgXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbiwgJnItPnVyaSwgJmNsY2ZwW2ldLT5uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIApAQCAtODA5LDE0ICs4MDUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc3RyX3QgKnVyaSwgbmd4X3N0cl90ICphcmdzKQogewogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCByZWRpcmVjdDogXCIlc1wiIiwgdXJpLT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgcmVkaXJlY3Q6IFwiJVZcIiIsIHVyaSk7CiAKLSAgICByLT51cmkubGVuID0gdXJpLT5sZW47Ci0gICAgci0+dXJpLmRhdGEgPSB1cmktPmRhdGE7CisgICAgci0+dXJpID0gKnVyaTsKIAogICAgIGlmIChhcmdzKSB7Ci0gICAgICAgIHItPmFyZ3MubGVuID0gYXJncy0+bGVuOwotICAgICAgICByLT5hcmdzLmRhdGEgPSBhcmdzLT5kYXRhOworICAgICAgICByLT5hcmdzID0gKmFyZ3M7CiAgICAgfQogCiAgICAgaWYgKG5neF9odHRwX3NldF9leHRlbihyKSAhPSBOR1hfT0spIHsKQEAgLTEwOTIsMTYgKzEwODYsMTQgQEAKICAgICAgICAgICAgIGNsY2YtPm5hbWUgPSB2YWx1ZVsyXTsKICNlbHNlCiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB1c2luZyBvZiB0aGUgcmVnZXggXCIlc1wiICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgUENSRSBsaWJyYXJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVsyXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHVzaW5nIG9mIHRoZSByZWdleCBcIiVWXCIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBQQ1JFIGxpYnJhcnkiLCAmdmFsdWVbMl0pOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogI2VuZGlmCiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsb2NhdGlvbiBtb2RpZmllciBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlWzFdLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvY2F0aW9uIG1vZGlmaWVyIFwiJVZcIiIsICZ2YWx1ZVsxXSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtMTEyMyw5ICsxMTE1LDkgQEAKIAogICAgICAgICBpZiAocGNsY2YtPmV4YWN0X21hdGNoKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIFwiJXNcIiBjb3VsZCBub3QgYmUgaW5zaWRlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIGV4YWN0IGxvY2F0aW9uIFwiJXNcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xjZi0+bmFtZS5kYXRhLCBwY2xjZi0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24gXCIlVlwiIGNvdWxkIG5vdCBiZSBpbnNpZGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZXhhY3QgbG9jYXRpb24gXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2xjZi0+bmFtZSwgJnBjbGNmLT5uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCkBAIC0xMTM5LDggKzExMzEsOCBAQAogI2VuZGlmCiAgICAgICAgIHsKICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24gXCIlc1wiIGlzIG91dHNpZGUgbG9jYXRpb24gXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGNmLT5uYW1lLmRhdGEsIHBjbGNmLT5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiBcIiVWXCIgaXMgb3V0c2lkZSBsb2NhdGlvbiBcIiVWXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjbGNmLT5uYW1lLCAmcGNsY2YtPm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTEzMDEsNyArMTI5Myw3IEBACiAgICAgaWYgKGNvbmYtPmxpc3Rlbi5uZWx0cyA9PSAwKSB7CiAgICAgICAgIG5neF90ZXN0X251bGwobCwgbmd4X3B1c2hfYXJyYXkoJmNvbmYtPmxpc3RlbiksIE5HWF9DT05GX0VSUk9SKTsKICAgICAgICAgbC0+YWRkciA9IElOQUREUl9BTlk7Ci0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIGwtPnBvcnQgPSA4MDsKICNlbHNlCiAgICAgICAgIC8qIFNUVUI6IGdldHVpZCgpIHNob3VsZCBiZSBjYWNoZWQgKi8KQEAgLTE1NjEsOSArMTU1Myw5IEBACiAgICAgICAgICAgICAgICB8fCAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM2KSkgeyAvKiAibGlzdGVuIDk5OTk5IiAqLwogCiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvcnQgXCIlc1wiIGluIFwiJXNcIiBkaXJlY3RpdmUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHBvcnQgXCIlc1wiIGluIFwiJVZcIiBkaXJlY3RpdmUsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdCBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNjU1MzUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHJbcF0sIGNtZC0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyW3BdLCAmY21kLT5uYW1lKTsKIAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAKQEAgLTE1ODMsNyArMTU3NSw3IEBACiAgICAgICAgIGlmIChoID09IE5VTEwgfHwgaC0+aF9hZGRyX2xpc3RbMF0gPT0gTlVMTCkgewogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBub3QgcmVzb2x2ZSBob3N0IFwiJXNcIiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gXCIlc1wiIGRpcmVjdGl2ZSIsIGFkZHIsIGNtZC0+bmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBcIiVWXCIgZGlyZWN0aXZlIiwgYWRkciwgJmNtZC0+bmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtMTYxMiw5ICsxNjA0LDkgQEAKICAgICBmb3IgKGkgPSAxOyBpIDwgY2YtPmFyZ3MtPm5lbHRzOyBpKyspIHsKICAgICAgICAgaWYgKHZhbHVlW2ldLmxlbiA9PSAwKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lIFwiJXNcIiBpcyBpbnZhbGlkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gXCIlc1wiIGRpcmVjdGl2ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbaV0uZGF0YSwgY21kLT5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXIgbmFtZSBcIiVWXCIgaXMgaW52YWxpZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIFwiJVZcIiBkaXJlY3RpdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZVtpXSwgJmNtZC0+bmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtMTY1OSwxMyArMTY1MSwxMyBAQAogCiAgICAgICAgIGlmICgobmd4X3VpbnRfdCkgbGNmLT5hbGlhcyA9PSBhbGlhcykgewogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgZGlyZWN0aXZlIGlzIGR1cGxpY2F0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLT5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgZGlyZWN0aXZlIGlzIGR1cGxpY2F0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZC0+bmFtZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBkaXJlY3RpdmUgaXMgZHVwbGljYXRlLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJVZcIiBkaXJlY3RpdmUgaXMgZHVwbGljYXRlLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiBkaXJlY3RpdmUgaXMgc3BlY2lmaWVkIGJlZm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLT5uYW1lLmRhdGEsIGxjZi0+YWxpYXMgPyAiYWxpYXMiIDogInJvb3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5uYW1lLCBsY2YtPmFsaWFzID8gImFsaWFzIiA6ICJyb290Iik7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CkBAIC0xNzA4LDcgKzE3MDAsNyBAQAogICAgIGlmICh2YWx1ZVtpXS5kYXRhWzBdID09ICc9JykgewogICAgICAgICBpZiAoaSA9PSAxKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlc1wiIiwgdmFsdWVbaV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlW2ldKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCkBAIC0xNzE2LDcgKzE3MDgsNyBAQAogCiAgICAgICAgIGlmIChvdmVyd3JpdGUgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlc1wiIiwgdmFsdWVbaV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgdmFsdWVbaV0pOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKQEAgLTE3MzUsMTQgKzE3MjcsMTQgQEAKICAgICAgICAgZXJyLT5zdGF0dXMgPSBuZ3hfYXRvaSh2YWx1ZVtpXS5kYXRhLCB2YWx1ZVtpXS5sZW4pOwogICAgICAgICBpZiAoZXJyLT5zdGF0dXMgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlc1wiIiwgdmFsdWVbaV0uZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlW2ldKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnItPnN0YXR1cyA8IDQwMCB8fCBlcnItPnN0YXR1cyA+IDU5OSkgewogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSBcIiVzXCIgbXVzdCBiZSBiZXR3ZWVuIDQwMCBhbmQgNTk5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtpXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgXCIlVlwiIG11c3QgYmUgYmV0d2VlbiA0MDAgYW5kIDU5OSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhbHVlW2ldKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9maWxlX2NhY2hlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9maWxlX2NhY2hlLmMKaW5kZXggYWNkOGRiZC4uOGY5MjBkMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfZmlsZV9jYWNoZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2ZpbGVfY2FjaGUuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VFWElTVCkgewogICAgICAgICAgICAgaWYgKG5neF93aW4zMl9yZW5hbWVfZmlsZSh0ZW1wX2ZpbGUsICZjdHgtPmZpbGUubmFtZSwgci0+cG9vbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCA1OTVkZDU5Li4zZmExMTA4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0zMTksMTMgKzMxOSw2IEBACiAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID49IDApIHsKICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiQ29udGVudC1MZW5ndGg6ICVPIiBDUkxGLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pOwotCi0jaWYgMAotICAgICAgICAgICAgYi0+bGFzdCArPSBuZ3hfc25wcmludGYoKGNoYXIgKikgYi0+bGFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJDb250ZW50LUxlbmd0aDogIikgKyBOR1hfT0ZGX1RfTEVOICsgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAiIE9GRl9UX0ZNVCBDUkxGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKTsKLSNlbmRpZgogICAgICAgICB9CiAgICAgfQogCkBAIC0zOTYsMTIgKzM4OSw2IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiS2VlcC1BbGl2ZTogdGltZW91dD0lVCIgQ1JMRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGNmLT5rZWVwYWxpdmVfaGVhZGVyKTsKLSNpZiAwCi0gICAgICAgICAgICBiLT5sYXN0ICs9IG5neF9zbnByaW50ZigoY2hhciAqKSBiLT5sYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiS2VlcC1BbGl2ZTogdGltZW91dD0iKSArIFRJTUVfVF9MRU4gKyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLZWVwLUFsaXZlOiB0aW1lb3V0PSIgVElNRV9UX0ZNVCBDUkxGLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpOwotI2VuZGlmCiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX2hhbmRsZXIuYwppbmRleCA5YTEzODlkLi41ODFhMWNlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgIG5neF9odHRwX2xvZ190ICAgICAgICAgICAqbG9nOwogICAgIG5neF9odHRwX2xvZ19vcF90ICAgICAgICAqb3A7CiAgICAgbmd4X2h0dHBfbG9nX2xvY19jb25mX3QgICpsY2Y7Ci0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgdV9sb25nICAgICAgICAgICAgICAgICAgICB3cml0dGVuOwogI2VuZGlmCiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgbGVuICs9IDI7CiAjZWxzZQogICAgICAgICBsZW4rKzsKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgKnArKyA9IENSOyAqcCsrID0gTEY7CiAgICAgICAgIFdyaXRlRmlsZShsb2dbbF0uZmlsZS0+ZmQsIGxpbmUsIHAgLSBsaW5lLCAmd3JpdHRlbiwgTlVMTCk7CiAjZWxzZQpAQCAtMjExLDEyICsyMTEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnRwdHJfdCBkYXRhKQogewogICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIldWkiLCByLT5jb25uZWN0aW9uLT5udW1iZXIpOwotCi0jaWYgMAotICAgIHJldHVybiBidWYgKyBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLCBOR1hfSU5UX1RfTEVOICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBOR1hfVUlOVF9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPm51bWJlcik7Ci0jZW5kaWYKIH0KIAogCkBAIC0yNDksMTEgKzI0Myw2IEBACiAgICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwogCiAgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiVsLiUwM2wiLCB0di50dl9zZWMsIHR2LnR2X3VzZWMgLyAxMDAwKTsKLQotI2lmIDAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgVElNRV9UX0xFTiArIDUsICIlbGQuJTAzbGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHYudHZfc2VjLCB0di50dl91c2VjIC8gMTAwMCk7Ci0jZW5kaWYKIH0KIAogCkBAIC0yNzQsMTEgKzI2Myw2IEBACiB7CiAgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiV1aSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHItPmVycl9zdGF0dXMgPyByLT5lcnJfc3RhdHVzIDogci0+aGVhZGVyc19vdXQuc3RhdHVzKTsKLQotI2lmIDAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgNCwgIiUiIE5HWF9VSU5UX1RfRk1ULAotICAgICAgICAgICAgICAgICAgICAgICAgci0+ZXJyX3N0YXR1cyA/IHItPmVycl9zdGF0dXMgOiByLT5oZWFkZXJzX291dC5zdGF0dXMpOwotI2VuZGlmCiB9CiAKIApAQCAtMjg2LDExICsyNzAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QgZGF0YSkKIHsKICAgICByZXR1cm4gbmd4X3NwcmludGYoYnVmLCAiJU8iLCByLT5jb25uZWN0aW9uLT5zZW50KTsKLQotI2lmIDAKLSAgICByZXR1cm4gYnVmICsgbmd4X3NucHJpbnRmKChjaGFyICopIGJ1ZiwgTkdYX09GRl9UX0xFTiArIDEsIE9GRl9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPnNlbnQpOwotI2VuZGlmCiB9CiAKIApAQCAtMjk4LDEwICsyNzcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpCiB7CiAgICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiVPIiwgci0+Y29ubmVjdGlvbi0+c2VudCAtIHItPmhlYWRlcl9zaXplKTsKLSNpZiAwCi0gICAgcmV0dXJuIGJ1ZiArIG5neF9zbnByaW50ZigoY2hhciAqKSBidWYsIE5HWF9PRkZfVF9MRU4gKyAxLCBPRkZfVF9GTVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5jb25uZWN0aW9uLT5zZW50IC0gci0+aGVhZGVyX3NpemUpOwotI2VuZGlmCiB9CiAKIApAQCAtNDcwLDkgKzQ0NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIE5HWF9PRkZfVF9MRU47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBidWYgKyBuZ3hfc25wcmludGYoKGNoYXIgKikgYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX09GRl9UX0xFTiArIDIsIE9GRl9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pOworICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIlTyIsIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoZGF0YSA9PSBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX291dF90LCBsYXN0X21vZGlmaWVkKSkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKaW5kZXggZTcwYTZlYS4uYmZlNWVmYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIC8qIGNoZWNrICIvLiIsICIvLyIsIGFuZCAiJSIgaW4gVVJJICovCisgICAgICAgIC8qIGNoZWNrICIvLiIsICIvLyIsICIlIiwgYW5kICJcIiAoV2luMzIpIGluIFVSSSAqLwogICAgICAgICBjYXNlIHN3X2FmdGVyX3NsYXNoX2luX3VyaToKICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgICAgIGNhc2UgQ1I6CkBAIC0yMjQsNiArMjI0LDExIEBACiAgICAgICAgICAgICAgICAgci0+cXVvdGVkX3VyaSA9IDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191cmk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgKE5HWF9XSU4zMikKKyAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICByLT5jb21wbGV4X3VyaSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgICAgIHItPmNvbXBsZXhfdXJpID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNyw3ICsyNDIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLyogY2hlY2sgIi8iIGFuZCAiJSIgaW4gVVJJICovCisgICAgICAgIC8qIGNoZWNrICIvIiwgIiUiIGFuZCAiXCIgKFdpbjMyKSBpbiBVUkkgKi8KICAgICAgICAgY2FzZSBzd19jaGVja191cmk6CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgICBjYXNlIENSOgpAQCAtMjU3LDYgKzI2MiwxMiBAQAogICAgICAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICAgICAgICAgci0+dXJpX2V4dCA9IHA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWYgKE5HWF9XSU4zMikKKyAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICByLT5jb21wbGV4X3VyaSA9IDE7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19hZnRlcl9zbGFzaF9pbl91cmk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgICAgIHItPnVyaV9leHQgPSBOVUxMOwogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfYWZ0ZXJfc2xhc2hfaW5fdXJpOwpAQCAtNjU3LDcgKzY2OCw3IEBACiAgICAgICAgIHN3X3NsYXNoLAogICAgICAgICBzd19kb3QsCiAgICAgICAgIHN3X2RvdF9kb3QsCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIHN3X2RvdF9kb3RfZG90LAogI2VuZGlmCiAgICAgICAgIHN3X3F1b3RlZCwKQEAgLTY3MSwxNyArNjgyLDQyIEBACiAgICAgcCA9IHItPnVyaV9zdGFydDsKICAgICB1ID0gci0+dXJpLmRhdGE7CiAgICAgci0+dXJpX2V4dCA9IE5VTEw7CisgICAgci0+YXJnc19zdGFydCA9IE5VTEw7CiAKICAgICBjaCA9ICpwKys7CiAKLSAgICB3aGlsZSAocCA8IHItPnVyaV9zdGFydCArIHItPnVyaS5sZW4gKyAxKSB7CisgICAgd2hpbGUgKHAgPCByLT51cmlfc3RhcnQgKyByLT51cmkubGVuICsgMSAmJiByLT5hcmdzX3N0YXJ0ID09IE5VTEwpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiB3ZSB1c2UgImNoID0gKnArKyIgaW5zaWRlIHRoZSBjeWNsZSBidXQgdGhpcyBvcGVyYXRpb24gaXMgc2FmZQorICAgICAgICAgKiBiZWNhdXNlIGFmdGVyIHRoZSBVUkkgdGhlcmUgaXMgYWx3YXlzIGF0IGxlYXN0IG9uZSBjaGFyY3RlcjoKKyAgICAgICAgICogdGhlIGxpbmUgZmVlZAorICAgICAgICAgKi8KIAogICAgICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInM6JWQgaW46JyV4OiVjJywgb3V0OiclYyciLCBzdGF0ZSwgY2gsIGNoLCAqdSk7CisgICAgICAgICAgICAgICAgICAgICAgICJzOiVkIGluOiclWGQ6JWMnLCBvdXQ6JyVjJyIsIHN0YXRlLCBjaCwgY2gsICp1KTsKIAogICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgICAgIGNhc2Ugc3dfdXN1YWw6CiAgICAgICAgICAgICBzd2l0Y2goY2gpIHsKKyNpZiAoTkdYX1dJTjMyKQorICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIHItPnVyaV9leHQgPSBOVUxMOworCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gci0+dXJpX3N0YXJ0ICsgci0+dXJpLmxlbikgeworCisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIHdlIG9taXQgdGhlIGxhc3QgIlwiIHRvIGNhdXNlIHJlZGlyZWN0IGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICogdGhlIGJyb3dzZXJzIGRvIG5vdCB0cmVhdCAiXCIgYXMgIi8iIGluIHJlbGF0aXZlIFVSTCBwYXRoCisgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc2xhc2g7CisgICAgICAgICAgICAgICAgKnUrKyA9ICcvJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgci0+dXJpX2V4dCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zbGFzaDsKQEAgLTY5MSw2ICs3MjcsOSBAQAogICAgICAgICAgICAgICAgIHF1b3RlZF9zdGF0ZSA9IHN0YXRlOwogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfcXVvdGVkOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnPyc6CisgICAgICAgICAgICAgICAgci0+YXJnc19zdGFydCA9IHA7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICcuJzoKICAgICAgICAgICAgICAgICByLT51cmlfZXh0ID0gdSArIDE7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNzAyLDYgKzc0MSwxMCBAQAogCiAgICAgICAgIGNhc2Ugc3dfc2xhc2g6CiAgICAgICAgICAgICBzd2l0Y2goY2gpIHsKKyNpZiAoTkdYX1dJTjMyKQorICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJy4nOgpAQCAtNzIyLDYgKzc2NSwxMCBAQAogCiAgICAgICAgIGNhc2Ugc3dfZG90OgogICAgICAgICAgICAgc3dpdGNoKGNoKSB7CisjaWYgKE5HWF9XSU4zMikKKyAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZgogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zbGFzaDsKICAgICAgICAgICAgICAgICB1LS07CkBAIC03NDQsNiArNzkxLDEwIEBACiAKICAgICAgICAgY2FzZSBzd19kb3RfZG90OgogICAgICAgICAgICAgc3dpdGNoKGNoKSB7CisjaWYgKE5HWF9XSU4zMikKKyAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyNlbmRpZgogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zbGFzaDsKICAgICAgICAgICAgICAgICB1IC09IDQ7CkBAIC03NTgsNyArODA5LDcgQEAKICAgICAgICAgICAgICAgICBxdW90ZWRfc3RhdGUgPSBzdGF0ZTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3F1b3RlZDsKICAgICAgICAgICAgICAgICBicmVhazsKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgICAgIGNhc2UgJy4nOgogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfZG90X2RvdF9kb3Q7CiAgICAgICAgICAgICAgICAgKnUrKyA9IGNoOwpAQCAtNzcyLDkgKzgyMywxMCBAQAogICAgICAgICAgICAgY2ggPSAqcCsrOwogICAgICAgICAgICAgYnJlYWs7CiAKLSNpZiAoV0lOMzIpCisjaWYgKE5HWF9XSU4zMikKICAgICAgICAgY2FzZSBzd19kb3RfZG90X2RvdDoKICAgICAgICAgICAgIHN3aXRjaChjaCkgeworICAgICAgICAgICAgY2FzZSAnXFwnOgogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zbGFzaDsKICAgICAgICAgICAgICAgICB1IC09IDU7CkBAIC04NTcsMTIgKzkwOSw3IEBACiAKICAgICBpZiAoci0+dXJpX2V4dCkgewogICAgICAgICByLT5leHRlbi5sZW4gPSB1IC0gci0+dXJpX2V4dDsKLQotICAgICAgICBpZiAoIShyLT5leHRlbi5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT5leHRlbi5sZW4gKyAxKSkpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfY3B5c3RybihyLT5leHRlbi5kYXRhLCByLT51cmlfZXh0LCByLT5leHRlbi5sZW4gKyAxKTsKKyAgICAgICAgci0+ZXh0ZW4uZGF0YSA9IHItPnVyaV9leHQ7CiAgICAgfQogCiAgICAgci0+dXJpX2V4dCA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggZDc4YTc3OS4uYTJjZjFhMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMzQsMjQgKzM0LDIyIEBACiAKIHN0YXRpYyB2b2lkIG5neF9odHRwX2NsaWVudF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsaWVudF9lcnJvciwgaW50IGVycm9yKTsKLXN0YXRpYyBzaXplX3Qgbmd4X2h0dHBfbG9nX2Vycm9yKHZvaWQgKmRhdGEsIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CitzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pOwogCiAKIC8qIE5HWF9IVFRQX1BBUlNFXy4uLiBlcnJvcnMgKi8KIAogc3RhdGljIGNoYXIgKmNsaWVudF9oZWFkZXJfZXJyb3JzW10gPSB7Ci0gICAgImNsaWVudCAlcyBzZW50IGludmFsaWQgbWV0aG9kIiwKLSAgICAiY2xpZW50ICVzIHNlbnQgaW52YWxpZCByZXF1ZXN0IiwKLSAgICAiY2xpZW50ICVzIHNlbnQgdG9vIGxvbmcgVVJJIiwKLSAgICAiY2xpZW50ICVzIHNlbnQgaW52YWxpZCBtZXRob2QgaW4gSFRUUC8wLjkgcmVxdWVzdCIsCisgICAgImNsaWVudCAlViBzZW50IGludmFsaWQgbWV0aG9kIFwiJVZcIiIsCisgICAgImNsaWVudCAlViBzZW50IGludmFsaWQgcmVxdWVzdCBcIiVWXCIiLAorICAgICJjbGllbnQgJVYgc2VudCB0b28gbG9uZyBVUkkgaW4gcmVxdWVzdCBcIiVWXCIiLAorICAgICJjbGllbnQgJVYgc2VudCBpbnZhbGlkIG1ldGhvZCBpbiBIVFRQLzAuOSByZXF1ZXN0IFwiJVZcIiIsCiAKLSAgICAiY2xpZW50ICVzIHNlbnQgaW52YWxpZCBoZWFkZXIsIFVSTDogJXMiLAotICAgICJjbGllbnQgJXMgc2VudCB0b28gbG9uZyBoZWFkZXIgbGluZSwgVVJMOiAlcyIsCi0gICAgImNsaWVudCAlcyBzZW50IEhUVFAvMS4xIHJlcXVlc3Qgd2l0aG91dCBcIkhvc3RcIiBoZWFkZXIsIFVSTDogJXMiLAotICAgICJjbGllbnQgJXMgc2VudCBpbnZhbGlkIFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXIsIFVSTDogJXMiLAotICAgICJjbGllbnQgJXMgc2VudCBQT1NUIG1ldGhvZCB3aXRob3V0IFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXIsIFVSTDogJXMiLAotICAgICJjbGllbnQgJXMgc2VudCBwbGFpbiBIVFRQIHJlcXVlc3QgdG8gSFRUUFMgcG9ydCwgVVJMOiAlcyIsCi0gICAgImNsaWVudCAlcyBzZW50IGludmFsaWQgXCJIb3N0XCIgaGVhZGVyIFwiJXNcIiwgVVJMOiAlcyIKKyAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCBoZWFkZXIsIFVSTDogXCIlVlwiIiwKKyAgICAiY2xpZW50ICVWIHNlbnQgdG9vIGxvbmcgaGVhZGVyIGxpbmUsIFVSTDogXCIlVlwiIiwKKyAgICAiY2xpZW50ICVWIHNlbnQgSFRUUC8xLjEgcmVxdWVzdCB3aXRob3V0IFwiSG9zdFwiIGhlYWRlciwgVVJMOiBcIiVWXCIiLAorICAgICJjbGllbnQgJVYgc2VudCBpbnZhbGlkIFwiQ29udGVudC1MZW5ndGhcIiBoZWFkZXIsIFVSTDogXCIlVlwiIiwKKyAgICAiY2xpZW50ICVWIHNlbnQgUE9TVCBtZXRob2Qgd2l0aG91dCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyLCBVUkw6IFwiJVZcIiIsCiB9OwogCiAKQEAgLTEwNSwxNCArMTAzLDE1IEBACiAgICAgbmd4X2V2ZW50X3QgICAgICAgICAqcmV2OwogICAgIG5neF9odHRwX2xvZ19jdHhfdCAgKmN0eDsKIAotICAgIGlmICghKGN0eCA9IG5neF9wY2FsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9sb2dfY3R4X3QpKSkpIHsKKyAgICBpZiAoIShjdHggPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9sb2dfY3R4X3QpKSkpIHsKICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGN0eC0+Y29ubmVjdGlvbiA9IGMtPm51bWJlcjsKLSAgICBjdHgtPmNsaWVudCA9IGMtPmFkZHJfdGV4dC5kYXRhOworICAgIGN0eC0+Y2xpZW50ID0gJmMtPmFkZHJfdGV4dDsKICAgICBjdHgtPmFjdGlvbiA9ICJyZWFkaW5nIGNsaWVudCByZXF1ZXN0IGxpbmUiOworICAgIGN0eC0+cmVxdWVzdCA9IE5VTEw7CiAgICAgYy0+bG9nLT5kYXRhID0gY3R4OwogICAgIGMtPmxvZy0+aGFuZGxlciA9IG5neF9odHRwX2xvZ19lcnJvcjsKICAgICBjLT5sb2dfZXJyb3IgPSBOR1hfRVJST1JfSU5GTzsKQEAgLTI3OCw3ICsyNzcsNyBAQAogICAgICAgICAgKiBBY2NlcHRFeCgpIGFscmVhZHkgZ2F2ZSB0aGlzIGFkZHJlc3MuCiAgICAgICAgICAqLwogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIGlmIChjLT5sb2NhbF9zb2NrYWRkcikgewogICAgICAgICAgICAgci0+aW5fYWRkciA9CiAgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYy0+bG9jYWxfc29ja2FkZHIpLT5zaW5fYWRkci5zX2FkZHI7CkBAIC0yOTUsNyArMjk0LDcgQEAKIAogICAgICAgICAgICAgci0+aW5fYWRkciA9IGFkZHJfaW4uc2luX2FkZHIuc19hZGRyOwogCi0jaWYgKFdJTjMyKQorI2lmIChOR1hfV0lOMzIpCiAgICAgICAgIH0KICNlbmRpZgogCkBAIC00MjgsOSArNDI3LDkgQEAKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfc3NsX2hhbmRzaGFrZShuZ3hfZXZlbnRfdCAqcmV2KQogewotICAgIGludCAgICAgICAgICAgICAgICAgIG47Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgcmM7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgYnVmWzFdOworICAgIHNzaXplX3QgICAgICAgICAgICAgIG47CisgICAgbmd4X2ludF90ICAgICAgICAgICAgcmM7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAqYzsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICpyOwogCkBAIC00NTQsNyArNDUzLDcgQEAKICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgIGlmIChidWZbMF0gPT0gMHg4MCAvKiBTU0x2MiAqLyB8fCBidWZbMF0gPT0gMHgxNiAvKiBTU0x2My9UTFN2MSAqLykgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwcyBzc2wgaGFuZHNoYWtlOiAweCVYIiwgYnVmWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwcyBzc2wgaGFuZHNoYWtlOiAweCUwMlhkIiwgYnVmWzBdKTsKIAogICAgICAgICAgICAgYy0+cmVjdiA9IG5neF9zc2xfcmVjdjsKICAgICAgICAgICAgIGMtPnNlbmRfY2hhaW4gPSBuZ3hfc3NsX3NlbmRfY2hhaW47CkBAIC00ODgsNyArNDg3LDYgQEAKIAogc3RhdGljIHZvaWQgbmd4X2h0dHBfcHJvY2Vzc19yZXF1ZXN0X2xpbmUobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICpwOwogICAgIHNzaXplX3QgICAgICAgICAgICAgIG47CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgcmMsIHJ2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7CkBAIC01MjQsMjEgKzUyMiw5IEBACiAKICAgICAgICAgICAgIC8qIHRoZSByZXF1ZXN0IGxpbmUgaGFzIGJlZW4gcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLwogCi0gICAgICAgICAgICAvKiBjb3B5IHVucGFyc2VkIFVSSSAqLworICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IHItPnJlcXVlc3RfZW5kIC0gci0+cmVxdWVzdF9zdGFydDsKKyAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5kYXRhID0gci0+cmVxdWVzdF9zdGFydDsKIAotICAgICAgICAgICAgci0+dW5wYXJzZWRfdXJpLmxlbiA9IHItPnVyaV9lbmQgLSByLT51cmlfc3RhcnQ7Ci0gICAgICAgICAgICByLT51bnBhcnNlZF91cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+dW5wYXJzZWRfdXJpLmxlbiArIDEpOwotICAgICAgICAgICAgaWYgKHItPnVucGFyc2VkX3VyaS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9jcHlzdHJuKHItPnVucGFyc2VkX3VyaS5kYXRhLCByLT51cmlfc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByLT51bnBhcnNlZF91cmkubGVuICsgMSk7Ci0KLQotICAgICAgICAgICAgLyogY29weSBVUkkgKi8KIAogICAgICAgICAgICAgaWYgKHItPmFyZ3Nfc3RhcnQpIHsKICAgICAgICAgICAgICAgICByLT51cmkubGVuID0gci0+YXJnc19zdGFydCAtIDEgLSByLT51cmlfc3RhcnQ7CkBAIC01NDYsMTMgKzUzMiwxNCBAQAogICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gPSByLT51cmlfZW5kIC0gci0+dXJpX3N0YXJ0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIShyLT51cmkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+dXJpLmxlbiArIDEpKSkgewotICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKLSAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKHItPmNvbXBsZXhfdXJpIHx8IHItPnF1b3RlZF91cmkpIHsKKworICAgICAgICAgICAgICAgIGlmICghKHItPnVyaS5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCByLT51cmkubGVuICsgMSkpKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcGFyc2VfY29tcGxleF91cmkocik7CiAKICAgICAgICAgICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSB7CkBAIC01NjIsNzQgKzU0OSw1NSBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChyYyAhPSBOR1hfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IHItPnJlcXVlc3RfZW5kIC0gci0+cmVxdWVzdF9zdGFydDsKLSAgICAgICAgICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmRhdGEgPSByLT5yZXF1ZXN0X3N0YXJ0OwotCiAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCByYywgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5neF9jcHlzdHJuKHItPnVyaS5kYXRhLCByLT51cmlfc3RhcnQsIHItPnVyaS5sZW4gKyAxKTsKKyAgICAgICAgICAgICAgICByLT51cmkuZGF0YSA9IHItPnVyaV9zdGFydDsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgci0+dW5wYXJzZWRfdXJpLmxlbiA9IHItPnVyaV9lbmQgLSByLT51cmlfc3RhcnQ7CisgICAgICAgICAgICByLT51bnBhcnNlZF91cmkuZGF0YSA9IHItPnVyaV9zdGFydDsKIAotICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IHItPnJlcXVlc3RfZW5kIC0gci0+cmVxdWVzdF9zdGFydDsKLSAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5kYXRhID0gci0+cmVxdWVzdF9zdGFydDsKLSAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5kYXRhW3ItPnJlcXVlc3RfbGluZS5sZW5dID0gJ1wwJzsKIAogICAgICAgICAgICAgaWYgKHItPm1ldGhvZCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgci0+bWV0aG9kX25hbWUubGVuID0gci0+bWV0aG9kX2VuZCAtIHItPnJlcXVlc3Rfc3RhcnQgKyAxOwogICAgICAgICAgICAgICAgIHItPm1ldGhvZF9uYW1lLmRhdGEgPSByLT5yZXF1ZXN0X2xpbmUuZGF0YTsKICAgICAgICAgICAgIH0KIAorCiAgICAgICAgICAgICBpZiAoci0+dXJpX2V4dCkgewotCi0gICAgICAgICAgICAgICAgLyogY29weSBVUkkgZXh0ZW50aW9uICovCi0KICAgICAgICAgICAgICAgICBpZiAoci0+YXJnc19zdGFydCkgewogICAgICAgICAgICAgICAgICAgICByLT5leHRlbi5sZW4gPSByLT5hcmdzX3N0YXJ0IC0gMSAtIHItPnVyaV9leHQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgci0+ZXh0ZW4ubGVuID0gci0+dXJpX2VuZCAtIHItPnVyaV9leHQ7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCEoci0+ZXh0ZW4uZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgci0+ZXh0ZW4ubGVuICsgMSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5neF9jcHlzdHJuKHItPmV4dGVuLmRhdGEsIHItPnVyaV9leHQsIHItPmV4dGVuLmxlbiArIDEpOworICAgICAgICAgICAgICAgIHItPmV4dGVuLmRhdGEgPSByLT51cmlfZXh0OwogICAgICAgICAgICAgfQogCisKICAgICAgICAgICAgIGlmIChyLT5hcmdzX3N0YXJ0ICYmIHItPnVyaV9lbmQgPiByLT5hcmdzX3N0YXJ0KSB7Ci0KLSAgICAgICAgICAgICAgICAvKiBjb3B5IFVSSSBhcmd1bWVudHMgKi8KLQogICAgICAgICAgICAgICAgIHItPmFyZ3MubGVuID0gci0+dXJpX2VuZCAtIHItPmFyZ3Nfc3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIShyLT5hcmdzLmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHItPmFyZ3MubGVuICsgMSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG5neF9jcHlzdHJuKHItPmFyZ3MuZGF0YSwgci0+YXJnc19zdGFydCwgci0+YXJncy5sZW4gKyAxKTsKKyAgICAgICAgICAgICAgICByLT5hcmdzLmRhdGEgPSByLT5hcmdzX3N0YXJ0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHJlcXVlc3QgbGluZTogXCIlc1wiIiwgci0+cmVxdWVzdF9saW5lLmRhdGEpOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHVyaTogXCIlc1wiIiwgci0+dXJpLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgcmVxdWVzdCBsaW5lOiBcIiVWXCIiLCAmci0+cmVxdWVzdF9saW5lKTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBhcmdzOiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+YXJncy5kYXRhID8gci0+YXJncy5kYXRhIDogKHVfY2hhciAqKSAiIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCB1cmk6IFwiJVZcIiIsICZyLT51cmkpOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGV4dGVuOiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+ZXh0ZW4uZGF0YSA/IHItPmV4dGVuLmRhdGEgOiAodV9jaGFyICopICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGFyZ3M6IFwiJVZcIiIsICZyLT5hcmdzKTsKKworICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBleHRlbjogXCIlVlwiIiwgJnItPmV4dGVuKTsKKworICAgICAgICAgICAgY3R4ID0gYy0+bG9nLT5kYXRhOworICAgICAgICAgICAgY3R4LT5yZXF1ZXN0ID0gcjsKIAogICAgICAgICAgICAgaWYgKHItPmh0dHBfdmVyc2lvbiA8IE5HWF9IVFRQX1ZFUlNJT05fMTApIHsKICAgICAgICAgICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9ibG9ja19yZWFkOwpAQCAtNjU1LDEwICs2MjMsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotCi0gICAgICAgICAgICBjdHggPSBjLT5sb2ctPmRhdGE7CiAgICAgICAgICAgICBjdHgtPmFjdGlvbiA9ICJyZWFkaW5nIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMiOwotICAgICAgICAgICAgY3R4LT51cmwgPSByLT51bnBhcnNlZF91cmkuZGF0YTsKIAogICAgICAgICAgICAgcmV2LT5ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfcHJvY2Vzc19yZXF1ZXN0X2hlYWRlcnM7CiAgICAgICAgICAgICBuZ3hfaHR0cF9wcm9jZXNzX3JlcXVlc3RfaGVhZGVycyhyZXYpOwpAQCAtNjY5LDYgKzYzNCw5IEBACiAKICAgICAgICAgICAgIC8qIHRoZXJlIHdhcyBlcnJvciB3aGlsZSBhIHJlcXVlc3QgbGluZSBwYXJzaW5nICovCiAKKyAgICAgICAgICAgIG5neF9odHRwX2NsaWVudF9lcnJvcihyLCByYywgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworCisjaWYgMAogICAgICAgICAgICAgZm9yIChwID0gci0+cmVxdWVzdF9zdGFydDsgcCA8IHItPmhlYWRlcl9pbi0+bGFzdDsgcCsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCpwID09IENSIHx8ICpwID09IExGKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjg2LDYgKzY1NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJjID09IE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfTUVUSE9EKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX05PVF9JTVBMRU1FTlRFRDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworI2VuZGlmCisKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC04MTEsOCArNzgxLDggQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBoZWFkZXI6IFwiJXM6ICVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+a2V5LmRhdGEsIGgtPnZhbHVlLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgaGVhZGVyOiBcIiVWOiAlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZoLT5rZXksICZoLT52YWx1ZSk7CiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC05NzMsNyArOTQzLDcgQEAKICAgICAgICAgYiA9IGhjLT5mcmVlWy0taGMtPm5mcmVlXTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgbGFyZ2UgaGVhZGVyIGZyZWU6ICIgUFRSX0ZNVCAiICIgU0laRV9UX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgbGFyZ2UgaGVhZGVyIGZyZWU6ICVwICV1eiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGItPnBvcywgYi0+ZW5kIC0gYi0+bGFzdCk7CiAKICAgICB9IGVsc2UgaWYgKGhjLT5uYnVzeSA8IGNzY2YtPmxhcmdlX2NsaWVudF9oZWFkZXJfYnVmZmVycy5udW0pIHsKQEAgLTk5Myw3ICs5NjMsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJodHRwIGxhcmdlIGhlYWRlciBhbGxvYzogIiBQVFJfRk1UICIgIiBTSVpFX1RfRk1ULAorICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBsYXJnZSBoZWFkZXIgYWxsb2M6ICVwICV1eiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGItPnBvcywgYi0+ZW5kIC0gYi0+bGFzdCk7CiAKICAgICB9IGVsc2UgewpAQCAtMTA5NSw3ICsxMDY1LDcgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHItPnZpcnR1YWxfbmFtZXMtPm5lbHRzOyBpKyspIHsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic2VydmVyIG5hbWU6ICVzIiwgbmFtZVtpXS5uYW1lLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lOiAlViIsICZuYW1lW2ldLm5hbWUpOwogCiAgICAgICAgICAgICBpZiAobmFtZVtpXS53aWxkY2FyZCkgewogICAgICAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gPD0gbmFtZVtpXS5uYW1lLmxlbikgewpAQCAtMTU3OSw3ICsxNTQ5LDcgQEAKIAogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLCAic2V0IGh0dHAga2VlcGFsaXZlIGhhbmRsZXIiKTsKIAotICAgIGN0eCA9IChuZ3hfaHR0cF9sb2dfY3R4X3QgKikgYy0+bG9nLT5kYXRhOworICAgIGN0eCA9IGMtPmxvZy0+ZGF0YTsKICAgICBjdHgtPmFjdGlvbiA9ICJjbG9zaW5nIHJlcXVlc3QiOwogCiAgICAgaGMgPSByLT5odHRwX2Nvbm5lY3Rpb247CkBAIC0xNjc3LDcgKzE2NDcsNyBAQAogICAgICAgICBiLT5sYXN0ID0gYi0+c3RhcnQ7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsICJoYyBmcmVlOiAiIFBUUl9GTVQgIiAlZCIsCisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsICJoYyBmcmVlOiAlcCAlZCIsCiAgICAgICAgICAgICAgICAgICAgaGMtPmZyZWUsIGhjLT5uZnJlZSk7CiAKICAgICBpZiAoaGMtPmZyZWUpIHsKQEAgLTE2ODksNyArMTY1OSw3IEBACiAgICAgICAgIGhjLT5uZnJlZSA9IDA7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsICJoYyBidXN5OiAiIFBUUl9GTVQgIiAlZCIsCisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsICJoYyBidXN5OiAlcCAlZCIsCiAgICAgICAgICAgICAgICAgICAgaGMtPmJ1c3ksIGhjLT5uYnVzeSk7CiAKICAgICBpZiAoaGMtPmJ1c3kpIHsKQEAgLTE3ODUsOCArMTc1NSw5IEBACiAKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpIHsKICAgICAgICAgaWYgKHJldi0+cGVuZGluZ19lb2YpIHsKKyAgICAgICAgICAgIHJldi0+bG9nLT5oYW5kbGVyID0gTlVMTDsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIHJldi0+a3FfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCB0aGF0IGNsaWVudCAlcyBjbG9zZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgdGhhdCBjbGllbnQgJVYgY2xvc2VkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgImtlZXBhbGl2ZSBjb25uZWN0aW9uIiwgY3R4LT5jbGllbnQpOwogICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NDEsNyArMTgxMiw3IEBACiAKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlcyBjbG9zZWQga2VlcGFsaXZlIGNvbm5lY3Rpb24iLCBjdHgtPmNsaWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlViBjbG9zZWQga2VlcGFsaXZlIGNvbm5lY3Rpb24iLCBjdHgtPmNsaWVudCk7CiAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMDU1LDcgKzIwMjYsNyBAQAogICAgIGlmIChyLT5maWxlLmZkICE9IE5HWF9JTlZBTElEX0ZJTEUpIHsKICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKHItPmZpbGUuZmQpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsIHItPmZpbGUubmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIFwiJVZcIiBmYWlsZWQiLCAmci0+ZmlsZS5uYW1lKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjA2Nyw4ICsyMDM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRklMRV9FUlJPUikKICAgICAgICAgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIGRlbGV0ZWQgZmlsZSBcIiVzXCIgZmFpbGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgci0+cmVxdWVzdF9ib2R5LT50ZW1wX2ZpbGUtPmZpbGUubmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2ZpbGVfbiAiIGRlbGV0ZWQgZmlsZSBcIiVWXCIgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnItPnJlcXVlc3RfYm9keS0+dGVtcF9maWxlLT5maWxlLm5hbWUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDg4LDkgKzIwNTksOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogY3R4LT51cmwgd2FzIGFsbG9jYXRlZCBmcm9tIHItPnBvb2wgKi8KKyAgICAvKiB0aGUgdmFyaXVvcyByZXF1ZXN0IHN0cmluZ3Mgd2VyZSBhbGxvY2F0ZWQgZnJvbSByLT5wb29sICovCiAgICAgY3R4ID0gbG9nLT5kYXRhOwotICAgIGN0eC0+dXJsID0gTlVMTDsKKyAgICBjdHgtPnJlcXVlc3QgPSBOVUxMOwogCiAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IDA7CiAKQEAgLTIxNDgsNiArMjExOSw3IEBACiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9jbGllbnRfZXJyb3Iobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGllbnRfZXJyb3IsIGludCBlcnJvcikKIHsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpwOwogICAgIG5neF9odHRwX2xvZ19jdHhfdCAgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOwogCkBAIC0yMTY0LDEzICsyMTM2LDE1IEBACiAKICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmhhbmRsZXIgPSBOVUxMOwogCi0gICAgaWYgKGN0eC0+dXJsKSB7CisgICAgaWYgKGN0eC0+cmVxdWVzdCkgeworCiAgICAgICAgIHN3aXRjaCAoY2xpZW50X2Vycm9yKSB7CiAKICAgICAgICAgY2FzZSBOR1hfSFRUUF9QQVJTRV9JTlZBTElEX0hPU1Q6CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfZXJyb3JzW2NsaWVudF9lcnJvciAtIE5HWF9IVFRQX0NMSUVOVF9FUlJPUl0sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y2xpZW50LCByLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsIGN0eC0+dXJsKTsKKyAgICAgICAgICAgICAgICAgICAiY2xpZW50ICVWIHNlbnQgaW52YWxpZCBcIkhvc3RcIiBoZWFkZXIgXCIlVlwiLCBVUkw6IFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLAorICAgICAgICAgICAgICAgICAgICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSk7CiAKICAgICAgICAgICAgIGVycm9yID0gTkdYX0hUVFBfSU5WQUxJRF9IT1NUOwogCkBAIC0yMTg2LDI0ICsyMTYwLDQ5IEBACiAKICAgICAgICAgY2FzZSBOR1hfSFRUUF9QQVJTRV9IVFRQX1RPX0hUVFBTOgogICAgICAgICAgICAgZXJyb3IgPSBOR1hfSFRUUF9UT19IVFRQUzsKKyAgICAgICAgICAgIGlmIChjdHgtPnJlcXVlc3QtPmhlYWRlcnNfaW4ucmVmZXJlcikgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgImNsaWVudCAlViBzZW50IHBsYWluIEhUVFAgcmVxdWVzdCB0byBIVFRQUyBwb3J0LCAiCisgICAgICAgICAgICAgICAgICAgICJVUkw6IFwiJVZcIiwgcmVmZXJyZXIgXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSwKKyAgICAgICAgICAgICAgICAgICAgJmN0eC0+cmVxdWVzdC0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZSk7CiAKLSAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICJjbGllbnQgJVYgc2VudCBwbGFpbiBIVFRQIHJlcXVlc3QgdG8gSFRUUFMgcG9ydCwgIgorICAgICAgICAgICAgICAgICAgICAiVVJMOiBcIiVWXCIiLCBjdHgtPmNsaWVudCwgJmN0eC0+cmVxdWVzdC0+dW5wYXJzZWRfdXJpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2hlYWRlcl9lcnJvcnNbY2xpZW50X2Vycm9yIC0gTkdYX0hUVFBfQ0xJRU5UX0VSUk9SXSwKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsIGN0eC0+dXJsKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZjdHgtPnJlcXVlc3QtPnVucGFyc2VkX3VyaSk7CiAgICAgICAgIH0KIAogICAgIH0gZWxzZSB7CisKICAgICAgICAgaWYgKGVycm9yID09IE5HWF9IVFRQX1JFUVVFU1RfVVJJX1RPT19MQVJHRSkgewogICAgICAgICAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IHItPmhlYWRlcl9pbi0+ZW5kIC0gci0+cmVxdWVzdF9zdGFydDsKICAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5kYXRhID0gci0+cmVxdWVzdF9zdGFydDsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHItPnJlcXVlc3RfbGluZS5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHAgPSByLT5yZXF1ZXN0X3N0YXJ0OyBwIDwgci0+aGVhZGVyX2luLT5sYXN0OyBwKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpwID09IENSIHx8ICpwID09IExGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHItPnJlcXVlc3RfbGluZS5sZW4gPSBwIC0gci0+cmVxdWVzdF9zdGFydDsKKyAgICAgICAgICAgICAgICByLT5yZXF1ZXN0X2xpbmUuZGF0YSA9IHItPnJlcXVlc3Rfc3RhcnQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfZXJyb3JzW2NsaWVudF9lcnJvciAtIE5HWF9IVFRQX0NMSUVOVF9FUlJPUl0sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y2xpZW50KTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jbGllbnQsICZyLT5yZXF1ZXN0X2xpbmUpOwogICAgIH0KIAogICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+aGFuZGxlciA9IG5neF9odHRwX2xvZ19lcnJvcjsKQEAgLTIyMTIsMjAgKzIyMTEsMzUgQEAKIH0KIAogCi1zdGF0aWMgc2l6ZV90IG5neF9odHRwX2xvZ19lcnJvcih2b2lkICpkYXRhLCBjaGFyICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfZXJyb3Iodm9pZCAqZGF0YSwgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAgICAgbmd4X2h0dHBfbG9nX2N0eF90ICpjdHggPSBkYXRhOwogCi0gICAgaWYgKGN0eC0+YWN0aW9uICYmIGN0eC0+dXJsKSB7Ci0gICAgICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgJXMsIGNsaWVudDogJXMsIFVSTDogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YWN0aW9uLCBjdHgtPmNsaWVudCwgY3R4LT51cmwpOworICAgIHVfY2hhciAqcDsKIAotICAgIH0gZWxzZSBpZiAoY3R4LT5hY3Rpb24gPT0gTlVMTCAmJiBjdHgtPnVybCkgewotICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiLCBjbGllbnQ6ICVzLCBVUkw6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNsaWVudCwgY3R4LT51cmwpOworICAgIHAgPSBidWY7CiAKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiIHdoaWxlICVzLCBjbGllbnQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmFjdGlvbiwgY3R4LT5jbGllbnQpOworICAgIGlmIChjdHgtPmFjdGlvbikgeworICAgICAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiB3aGlsZSAlcyIsIGN0eC0+YWN0aW9uKTsKKyAgICAgICAgbGVuIC09IHAgLSBidWY7CiAgICAgfQorCisgICAgcCA9IG5neF9zbnByaW50ZihwLCBsZW4sICIsIGNsaWVudDogJVYiLCBjdHgtPmNsaWVudCk7CisKKyAgICBpZiAoY3R4LT5yZXF1ZXN0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgbGVuIC09IHAgLSBidWY7CisKKyAgICBwID0gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiwgVVJMOiBcIiVWXCIiLCAmY3R4LT5yZXF1ZXN0LT51bnBhcnNlZF91cmkpOworCisgICAgaWYgKGN0eC0+cmVxdWVzdC0+aGVhZGVyc19pbi5yZWZlcmVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgbGVuIC09IHAgLSBidWY7CisKKyAgICByZXR1cm4gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiwgcmVmZXJyZXI6IFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5yZXF1ZXN0LT5oZWFkZXJzX2luLnJlZmVyZXItPnZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBmMWI5NTdiLi4zMWIxMTg3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC00MSw4ICs0MSw5IEBACiAjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX05PX0hPU1RfSEVBREVSICAgICAgMTYKICNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9DTF9IRUFERVIgICAxNwogI2RlZmluZSBOR1hfSFRUUF9QQVJTRV9QT1NUX1dPX0NMX0hFQURFUiAgIDE4Ci0jZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0hUVFBfVE9fSFRUUFMgICAgICAgMTkKLSNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IT1NUICAgICAgICAyMAorCisjZGVmaW5lIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfSE9TVCAgICAgICAgMTkKKyNkZWZpbmUgTkdYX0hUVFBfUEFSU0VfSFRUUF9UT19IVFRQUyAgICAgICAyMAogCiAKICNkZWZpbmUgTkdYX0hUVFBfT0sgICAgICAgICAgICAgICAgICAgICAgICAyMDAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3RfYm9keS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKaW5kZXggZWU4ZTM2OC4uYzllYzZmYSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICBuID0gYy0+cmVjdihjLCByLT5yZXF1ZXN0X2JvZHktPmJ1Zi0+bGFzdCwgc2l6ZSk7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJodHRwIGNsaWVudCByZXF1ZXN0IGJvZHkgcmVjdiAiIFNJWkVfVF9GTVQsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBjbGllbnQgcmVxdWVzdCBib2R5IHJlY3YgJXoiLCBuKTsKIAogICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4pIHsKICAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKQEAgLTE4NCw3ICsxODQsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIGNsaWVudCByZXF1ZXN0IGJvZHkgcmVzdCAiIFNJWkVfVF9GTVQsCisgICAgICAgICAgICAgICAgICAgImh0dHAgY2xpZW50IHJlcXVlc3QgYm9keSByZXN0ICV1eiIsCiAgICAgICAgICAgICAgICAgICAgci0+cmVxdWVzdF9ib2R5LT5yZXN0KTsKIAogICAgIGlmIChyLT5yZXF1ZXN0X2JvZHktPnJlc3QpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKaW5kZXggM2EyNmQ2NS4uNTFhMWI0NyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMKQEAgLTQwLDE1ICs0MCwxMSBAQAogCiBjaGFyICpuZ3hfaHR0cF9zY3JpcHRfc3RhdHVzKG5neF9odHRwX3JlcXVlc3RfdCAqciwgY2hhciAqcCwgc2l6ZV90IGxlbikKIHsKLSAgICBwICs9IG5neF9zbnByaW50ZihwLCBsZW4sICIlZCIsIHItPmhlYWRlcnNfb3V0LnN0YXR1cyk7Ci0KLSAgICByZXR1cm4gcDsKKyAgICByZXR1cm4gbmd4X3NucHJpbnRmKHAsIGxlbiwgIiVkIiwgci0+aGVhZGVyc19vdXQuc3RhdHVzKTsKIH0KIAogCiBjaGFyICpuZ3hfaHR0cF9zY3JpcHRfc2VudChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIGNoYXIgKnAsIHNpemVfdCBsZW4pCiB7Ci0gICAgcCArPSBuZ3hfc25wcmludGYocCwgbGVuLCBPRkZfRk1ULCByLT5jb25uZWN0aW9uLT5zZW50KTsKLQotICAgIHJldHVybiBwOworICAgIHJldHVybiBuZ3hfc3ByaW50ZihwLCAiJU8iLCByLT5jb25uZWN0aW9uLT5zZW50KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlci5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKaW5kZXggMzdlMGYzZi4uNjdmNjg2MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyLmMKQEAgLTY5LDYgKzY5LDEyIEBACiAgICAgZm9yIChjbCA9IGN0eC0+b3V0OyBjbDsgY2wgPSBjbC0+bmV4dCkgewogICAgICAgICBsbCA9ICZjbC0+bmV4dDsKIAorI2lmIDEKKyAgICAgICAgaWYgKG5neF9idWZfc2l6ZShjbC0+YnVmKSA9PSAwICYmICFuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKKyAgICAgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBzaXplICs9IG5neF9idWZfc2l6ZShjbC0+YnVmKTsKIAogICAgICAgICBpZiAoY2wtPmJ1Zi0+Zmx1c2ggfHwgY2wtPmJ1Zi0+cmVjeWNsZWQpIHsKQEAgLTgzLDEwICs4OSwyMCBAQAogICAgIC8qIGFkZCB0aGUgbmV3IGNoYWluIHRvIHRoZSBleGlzdGVudCBvbmUgKi8KIAogICAgIGZvciAobG4gPSBpbjsgbG47IGxuID0gbG4tPm5leHQpIHsKLSAgICAgICAgbmd4X2FsbG9jX2xpbmtfYW5kX3NldF9idWYoY2wsIGxuLT5idWYsIHItPnBvb2wsIE5HWF9FUlJPUik7CisgICAgICAgIGlmICghKGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCkpKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2wtPmJ1ZiA9IGxuLT5idWY7CiAgICAgICAgICpsbCA9IGNsOwogICAgICAgICBsbCA9ICZjbC0+bmV4dDsKIAorI2lmIDEKKyAgICAgICAgaWYgKG5neF9idWZfc2l6ZShjbC0+YnVmKSA9PSAwICYmICFuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKKyAgICAgICAgICAgIG5neF9kZWJ1Z19wb2ludCgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBzaXplICs9IG5neF9idWZfc2l6ZShjbC0+YnVmKTsKIAogICAgICAgICBpZiAoY2wtPmJ1Zi0+Zmx1c2ggfHwgY2wtPmJ1Zi0+cmVjeWNsZWQpIHsKQEAgLTk4LDExICsxMTQsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgICpsbCA9IE5VTEw7CisKICAgICBjID0gci0+Y29ubmVjdGlvbjsKIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfSFRUUCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlIGZpbHRlcjogbDolZCBmOiIgT0ZGX1RfRk1UICIgczoiIE9GRl9UX0ZNVCwKLSAgICAgICAgICAgICAgICAgICBsYXN0LCBmbHVzaCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgImh0dHAgd3JpdGUgZmlsdGVyOiBsOiVkIGY6JU8gczolTyIsIGxhc3QsIGZsdXNoLCBzaXplKTsKIAogICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHItPm1haW4gPyByLT5tYWluIDogciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CkBAIC0xMjUsNiArMTQyLDkgQEAKICAgICAgICAgaWYgKCFsYXN0KSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSBodHRwIG91dHB1dCBjaGFpbiBpcyBlbXB0eSIpOworCisgICAgICAgICAgICBuZ3hfZGVidWdfcG9pbnQoKTsKKwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTkdYX09LOwpAQCAtMTM2LDcgKzE1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsY2YtPmxpbWl0X3JhdGUgPyBjbGNmLT5saW1pdF9yYXRlOiBPRkZfVF9NQVhfVkFMVUUpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgd3JpdGUgZmlsdGVyICVYIiwgY2hhaW4pOworICAgICAgICAgICAgICAgICAgICJodHRwIHdyaXRlIGZpbHRlciAlcCIsIGNoYWluKTsKIAogICAgIGlmIChjbGNmLT5saW1pdF9yYXRlKSB7CiAgICAgICAgIHNlbnQgPSBjLT5zZW50IC0gc2VudDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYwppbmRleCBiOGMxMzM1Li40ZDQ1ZjA3IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZV9jaGFpbi5jCkBAIC0xMywxMSArMTMsMTAgQEAKIG5neF9jaGFpbl90ICpuZ3hfYWlvX3dyaXRlX2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICppbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxpbWl0KQogewotICAgIGludCAgICAgICAgICAgbjsKICAgICB1X2NoYXIgICAgICAgKmJ1ZiwgKnByZXY7CiAgICAgb2ZmX3QgICAgICAgICBzZW5kLCBzZW50OwogICAgIHNpemVfdCAgICAgICAgbGVuOwotICAgIHNzaXplX3QgICAgICAgc2l6ZTsKKyAgICBzc2l6ZV90ICAgICAgIG4sIHNpemU7CiAgICAgbmd4X2Vycl90ICAgICBlcnI7CiAgICAgbmd4X2NoYWluX3QgICpjbDsKIApAQCAtNjMsNyArNjIsNyBAQAogCiAgICAgICAgIG4gPSBuZ3hfYWlvX3dyaXRlKGMsIGJ1ZiwgbGVuKTsKIAotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJhaW9fd3JpdGU6ICVkIiwgbik7CisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgImFpb193cml0ZTogJXoiLCBuKTsKIAogICAgICAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ0hBSU5fRVJST1I7CkBAIC03NSw3ICs3NCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJhaW9fd3JpdGUgc2VudDogIiBPRkZfVF9GTVQsIGMtPnNlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAiYWlvX3dyaXRlIHNlbnQ6ICVPIiwgYy0+c2VudCk7CiAKICAgICAgICAgZm9yIChjbCA9IGluOyBjbDsgY2wgPSBjbC0+bmV4dCkgewogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfYWxsb2MuYyBiL3NyYy9vcy91bml4L25neF9hbGxvYy5jCmluZGV4IGRjMzYwOTIuLjdlYzRmODcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9hbGxvYy5jCisrKyBiL3NyYy9vcy91bml4L25neF9hbGxvYy5jCkBAIC0xNywxMSArMTcsMTAgQEAKIAogICAgIGlmICghKHAgPSBtYWxsb2Moc2l6ZSkpKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgIm1hbGxvYygpICIgU0laRV9UX0ZNVCAiIGJ5dGVzIGZhaWxlZCIsIHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICJtYWxsb2MoKSAldXogYnl0ZXMgZmFpbGVkIiwgc2l6ZSk7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19BTExPQywgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJtYWxsb2M6ICIgUFRSX0ZNVCAiOiIgU0laRV9UX0ZNVCwgcCwgc2l6ZSk7CisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19BTExPQywgbG9nLCAwLCAibWFsbG9jOiAlcDoldXoiLCBwLCBzaXplKTsKIAogICAgIHJldHVybiBwOwogfQpAQCAtNDksMTIgKzQ4LDEyIEBACiAKICAgICBpZiAocG9zaXhfbWVtYWxpZ24oJnAsIGFsaWdubWVudCwgc2l6ZSkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAicG9zaXhfbWVtYWxpZ24oKSAiIFNJWkVfVF9GTVQgIiBieXRlcyBhbGlnbmVkIHRvICIKLSAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfRk1UICIgZmFpbGVkIiwgc2l6ZSwgYWxpZ25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAicG9zaXhfbWVtYWxpZ24oKSAldXogYnl0ZXMgYWxpZ25lZCB0byAldXogZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQUxMT0MsIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAicG9zaXhfbWVtYWxpZ246ICIgUFRSX0ZNVCAiOiIgU0laRV9UX0ZNVCwgcCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgInBvc2l4X21lbWFsaWduOiAlcDoldXoiLCBwLCBzaXplKTsKIAogICAgIHJldHVybiBwOwogfQpAQCAtNjcsMTIgKzY2LDEyIEBACiAKICAgICBpZiAoIShwID0gbWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKSkpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAibWVtYWxpZ24oKSAiIFNJWkVfVF9GTVQgIiBieXRlcyBhbGlnbmVkIHRvICIKLSAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfRk1UICIgZmFpbGVkIiwgc2l6ZSwgYWxpZ25tZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAibWVtYWxpZ24oKSAldXogYnl0ZXMgYWxpZ25lZCB0byAldXogZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplLCBhbGlnbm1lbnQpOwogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQUxMT0MsIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAibWVtYWxpZ246ICIgUFRSX0ZNVCAiOiIgU0laRV9UX0ZNVCwgcCwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIm1lbWFsaWduOiAlcDoldXoiLCBwLCBzaXplKTsKIAogICAgIHJldHVybiBwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYyBiL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKaW5kZXggM2QwOWQ2OC4uNWM1YTVlMSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCkBAIC0xMjAsOSArMTIwLDE0IEBACiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCisgICAgaWYgKG4gPT0gMCkgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0NPUkUsIGxvZywgMCwgInJlY3Ztc2coKSByZXR1cm5lZCB6ZXJvIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCiAgICAgaWYgKChzaXplX3QpIG4gPCBzaXplb2Yobmd4X2NoYW5uZWxfdCkpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInJlY3Ztc2coKSByZXR1cm5lZCBub3QgZW5vdWdoIGRhdGEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAicmVjdm1zZygpIHJldHVybmVkIG5vdCBlbm91Z2ggZGF0YTogJXV6Iiwgbik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uYyBiL3NyYy9vcy91bml4L25neF9lcnJuby5jCmluZGV4IDBjOTNkMjMuLmNlZDBlYWYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9lcnJuby5jCisrKyBiL3NyYy9vcy91bml4L25neF9lcnJuby5jCkBAIC0xMCwzMiArMTAsMjkgQEAKIAogI2lmIChOR1hfU1RSRVJST1JfUikKIAotbmd4X2ludF90IG5neF9zdHJlcnJvcl9yKGludCBlcnIsIGNoYXIgKmVycnN0ciwgc2l6ZV90IHNpemUpCit1X2NoYXIgKm5neF9zdHJlcnJvcl9yKGludCBlcnIsIHVfY2hhciAqZXJyc3RyLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICBzaXplX3QgIGxlbjsKLQogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgZXJyc3RyWzBdID0gJ1wwJzsKIAotICAgIHN0cmVycm9yX3IoZXJyLCBlcnJzdHIsIHNpemUpOworICAgIHN0cmVycm9yX3IoZXJyLCAoY2hhciAqKSBlcnJzdHIsIHNpemUpOwogCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykgewotICAgICAgICBpZiAoZXJyc3RyW2xlbl0gPT0gJ1wwJykgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICB3aGlsZSAoKmVycnN0ciAmJiBzaXplKSB7CisgICAgICAgIGVycnN0cisrOworICAgICAgICBzaXplLS07CiAgICAgfQogCi0gICAgcmV0dXJuIGxlbjsKKyAgICByZXR1cm4gZXJyc3RyOwogfQogCiAjZWxpZiAoTkdYX0dOVV9TVFJFUlJPUl9SKQogCiAvKiBMaW51eCBzdHJlcnJvcl9yKCkgKi8KIAotbmd4X2ludF90IG5neF9zdHJlcnJvcl9yKGludCBlcnIsIGNoYXIgKmVycnN0ciwgc2l6ZV90IHNpemUpCit1X2NoYXIgKm5neF9zdHJlcnJvcl9yKGludCBlcnIsIHVfY2hhciAqZXJyc3RyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBjaGFyICAgICpzdHI7CiAgICAgc2l6ZV90ICAgbGVuOwpAQCAtNDYsMjAgKzQzLDE4IEBACiAKICAgICBlcnJzdHJbMF0gPSAnXDAnOwogCi0gICAgc3RyID0gc3RyZXJyb3JfcihlcnIsIGVycnN0ciwgc2l6ZSk7CisgICAgc3RyID0gc3RyZXJyb3JfcihlcnIsIChjaGFyICopIGVycnN0ciwgc2l6ZSk7CiAKLSAgICBpZiAoc3RyICE9IGVycnN0cikgewotICAgICAgICByZXR1cm4gbmd4X2NweXN0cm4oKHVfY2hhciAqKSBlcnJzdHIsICh1X2NoYXIgKikgc3RyLCBzaXplKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtICh1X2NoYXIgKikgZXJyc3RyOworICAgIGlmIChzdHIgIT0gKGNoYXIgKikgZXJyc3RyKSB7CisgICAgICAgIHJldHVybiBuZ3hfY3B5c3RybihlcnJzdHIsICh1X2NoYXIgKikgc3RyLCBzaXplKTsKICAgICB9CiAKLSAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKSB7Ci0gICAgICAgIGlmIChlcnJzdHJbbGVuXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHdoaWxlICgqZXJyc3RyICYmIHNpemUpIHsKKyAgICAgICAgZXJyc3RyKys7CisgICAgICAgIHNpemUtLTsKICAgICB9CiAKLSAgICByZXR1cm4gbGVuOworICAgIHJldHVybiBlcnJzdHI7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmggYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAppbmRleCBjYzliMWQxLi45YTM5MmY4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaApAQCAtNDcsMTQgKzQ3LDE0IEBACiAKICNpZiAoSEFWRV9TVFJFUlJPUl9SIHx8IEhBVkVfR05VX1NUUkVSUk9SX1IpCiAKLW5neF9pbnRfdCBuZ3hfc3RyZXJyb3JfcihpbnQgZXJyLCBjaGFyICplcnJzdHIsIHNpemVfdCBzaXplKTsKK3VfY2hhciAqbmd4X3N0cmVycm9yX3IoaW50IGVyciwgdV9jaGFyICplcnJzdHIsIHNpemVfdCBzaXplKTsKIAogI2Vsc2UKIAogLyogU29sYXJpcyBoYXMgdGhyZWFkcy1zYWZlIHN0cmVycm9yKCkgKi8KIAogI2RlZmluZSBuZ3hfc3RyZXJyb3JfcihlcnIsIGVycnN0ciwgc2l6ZSkgIFwKLSAgICAgICAgICAgICAoY2hhciAqKSBuZ3hfY3B5c3RybihlcnJzdHIsIHN0cmVycm9yKGVyciksIHNpemUpIC0gKGVycnN0cikKKyAgICAgICAgICAgICBuZ3hfY3B5c3RybihlcnJzdHIsICh1X2NoYXIgKikgc3RyZXJyb3IoZXJyKSwgc2l6ZSkKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5jIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKaW5kZXggZGE3NWJhMC4uN2JmNWFkMSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgICBzc2l6ZV90IG47CiAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0NPUkUsIGZpbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAicmVhZDogJWQsICVYLCAlZCwgIiBPRkZfVF9GTVQsIGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgInJlYWQ6ICVkLCAlcCwgJXV6LCAlTyIsIGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CiAKICNpZiAoTkdYX1BSRUFEKQogCkBAIC01Nyw2ICs1Nyw5IEBACiB7CiAgICAgc3NpemVfdCBuOwogCisgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19DT1JFLCBmaWxlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgIndyaXRlOiAlZCwgJXAsICV1eiwgJU8iLCBmaWxlLT5mZCwgYnVmLCBzaXplLCBvZmZzZXQpOworCiAjaWYgKE5HWF9QV1JJVEUpCiAKICAgICBuID0gcHdyaXRlKGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CkBAIC02OCw3ICs3MSw3IEBACiAKICAgICBpZiAoKHNpemVfdCkgbiAhPSBzaXplKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBmaWxlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInB3cml0ZSgpIGhhcyB3cml0dGVuIG9ubHkgJWQgb2YgJWQiLCBuLCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAicHdyaXRlKCkgaGFzIHdyaXR0ZW4gb25seSAleiBvZiAldXoiLCBuLCBzaXplKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKQEAgLTkyLDcgKzk1LDcgQEAKIAogICAgIGlmICgoc2l6ZV90KSBuICE9IHNpemUpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGZpbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAid3JpdGUoKSBoYXMgd3JpdHRlbiBvbmx5ICVkIG9mICVkIiwgbiwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgIndyaXRlKCkgaGFzIHdyaXR0ZW4gb25seSAleiBvZiAldXoiLCBuLCBzaXplKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKQEAgLTEyMCwxNyArMTIzLDE5IEBACiB9CiAKIAorI2RlZmluZSBOR1hfSU9WUyAgOAorCiBzc2l6ZV90IG5neF93cml0ZV9jaGFpbl90b19maWxlKG5neF9maWxlX3QgKmZpbGUsIG5neF9jaGFpbl90ICpjbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LCBuZ3hfcG9vbF90ICpwb29sKQogewogICAgIHVfY2hhciAgICAgICAgKnByZXY7CiAgICAgc2l6ZV90ICAgICAgICAgc2l6ZTsKICAgICBzc2l6ZV90ICAgICAgICBuOwotICAgIHN0cnVjdCBpb3ZlYyAgKmlvdjsKICAgICBuZ3hfZXJyX3QgICAgICBlcnI7Ci0gICAgbmd4X2FycmF5X3QgICAgaW87CisgICAgbmd4X2FycmF5X3QgICAgdmVjOworICAgIHN0cnVjdCBpb3ZlYyAgKmlvdiwgaW92c1tOR1hfSU9WU107CiAKLSAgICAvKiB1c2UgcHdyaXRlKCkgaWYgdGhlcmUncyB0aGUgb25seSBidWYgaW4gYSBjaGFpbiAqLworICAgIC8qIHVzZSBwd3JpdGUoKSBpZiB0aGVyZSBpcyB0aGUgb25seSBidWYgaW4gYSBjaGFpbiAqLwogCiAgICAgaWYgKGNsLT5uZXh0ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIG5neF93cml0ZV9maWxlKGZpbGUsIGNsLT5idWYtPnBvcywKQEAgLTEzOCw2MSArMTQzLDc0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQpOwogICAgIH0KIAotICAgIHByZXYgPSBOVUxMOwotICAgIGlvdiA9IE5VTEw7Ci0gICAgc2l6ZSA9IDA7CisgICAgdmVjLmVsdHMgPSBpb3ZzOworICAgIHZlYy5zaXplID0gc2l6ZW9mKHN0cnVjdCBpb3ZlYyk7CisgICAgdmVjLm5hbGxvYyA9IE5HWF9JT1ZTOyAKKyAgICB2ZWMucG9vbCA9IHBvb2w7CiAKLSAgICBuZ3hfaW5pdF9hcnJheShpbywgcG9vbCwgMTAsIHNpemVvZihzdHJ1Y3QgaW92ZWMpLCBOR1hfRVJST1IpOworICAgIGRvIHsKKyAgICAgICAgcHJldiA9IE5VTEw7CisgICAgICAgIGlvdiA9IE5VTEw7CisgICAgICAgIHNpemUgPSAwOwogCi0gICAgLyogY3JlYXRlIHRoZSBpb3ZlYyBhbmQgY29hbGVzY2UgdGhlIG5laWdoYm91cmluZyBidWZzICovCisgICAgICAgIHZlYy5uZWx0cyA9IDA7CiAKLSAgICB3aGlsZSAoY2wpIHsKLSAgICAgICAgaWYgKHByZXYgPT0gY2wtPmJ1Zi0+cG9zKSB7Ci0gICAgICAgICAgICBpb3YtPmlvdl9sZW4gKz0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKKyAgICAgICAgLyogY3JlYXRlIHRoZSBpb3ZlYyBhbmQgY29hbGVzY2UgdGhlIG5laWdoYm91cmluZyBidWZzICovCiAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwoaW92LCBuZ3hfcHVzaF9hcnJheSgmaW8pLCBOR1hfRVJST1IpOwotICAgICAgICAgICAgaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopIGNsLT5idWYtPnBvczsKLSAgICAgICAgICAgIGlvdi0+aW92X2xlbiA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CisgICAgICAgIHdoaWxlIChjbCAmJiB2ZWMubmVsdHMgPCBJT1ZfTUFYKSB7CisgICAgICAgICAgICBpZiAocHJldiA9PSBjbC0+YnVmLT5wb3MpIHsKKyAgICAgICAgICAgICAgICBpb3YtPmlvdl9sZW4gKz0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIShpb3YgPSBuZ3hfYXJyYXlfcHVzaCgmdmVjKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpb3YtPmlvdl9iYXNlID0gKHZvaWQgKikgY2wtPmJ1Zi0+cG9zOworICAgICAgICAgICAgICAgIGlvdi0+aW92X2xlbiA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNpemUgKz0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKKyAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5sYXN0OworICAgICAgICAgICAgY2wgPSBjbC0+bmV4dDsKICAgICAgICAgfQogCi0gICAgICAgIHNpemUgKz0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKLSAgICAgICAgcHJldiA9IGNsLT5idWYtPmxhc3Q7Ci0gICAgICAgIGNsID0gY2wtPm5leHQ7Ci0gICAgfQorICAgICAgICAvKiB1c2UgcHdyaXRlKCkgaWYgdGhlcmUgaXMgdGhlIG9ubHkgaW92ZWMgYnVmZmVyICovCiAKLSAgICAvKiB1c2UgcHdyaXRlKCkgaWYgdGhlcmUncyB0aGUgb25seSBpb3ZlYyBidWZmZXIgKi8KKyAgICAgICAgaWYgKHZlYy5uZWx0cyA9PSAxKSB7CisgICAgICAgICAgICBpb3YgPSB2ZWMuZWx0czsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfd3JpdGVfZmlsZShmaWxlLCAodV9jaGFyICopIGlvdlswXS5pb3ZfYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZbMF0uaW92X2xlbiwgb2Zmc2V0KTsKKyAgICAgICAgfQogCi0gICAgaWYgKGlvLm5lbHRzID09IDEpIHsKLSAgICAgICAgaW92ID0gaW8uZWx0czsKLSAgICAgICAgcmV0dXJuIG5neF93cml0ZV9maWxlKGZpbGUsICh1X2NoYXIgKikgaW92WzBdLmlvdl9iYXNlLCBpb3ZbMF0uaW92X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCk7Ci0gICAgfQorICAgICAgICBpZiAoZmlsZS0+c3lzX29mZnNldCAhPSBvZmZzZXQpIHsKKyAgICAgICAgICAgIGlmIChsc2VlayhmaWxlLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgZmlsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHNlZWsoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQogCi0gICAgaWYgKGZpbGUtPnN5c19vZmZzZXQgIT0gb2Zmc2V0KSB7Ci0gICAgICAgIGlmIChsc2VlayhmaWxlLT5mZCwgb2Zmc2V0LCBTRUVLX1NFVCkgPT0gLTEpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBmaWxlLT5sb2csIG5neF9lcnJubywgImxzZWVrKCkgZmFpbGVkIik7CisgICAgICAgICAgICBmaWxlLT5zeXNfb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgbiA9IHdyaXRldihmaWxlLT5mZCwgdmVjLmVsdHMsIHZlYy5uZWx0cyk7CisKKyAgICAgICAgaWYgKG4gPT0gLTEpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBmaWxlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRldigpIGZhaWxlZCIpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGZpbGUtPnN5c19vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgfQorICAgICAgICBpZiAoKHNpemVfdCkgbiAhPSBzaXplKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgZmlsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGV2KCkgaGFzIHdyaXR0ZW4gb25seSAleiBvZiAldXoiLCBuLCBzaXplKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KIAotICAgIG4gPSB3cml0ZXYoZmlsZS0+ZmQsIGlvLmVsdHMsIGlvLm5lbHRzKTsKKyAgICAgICAgZmlsZS0+c3lzX29mZnNldCArPSBuOworICAgICAgICBmaWxlLT5vZmZzZXQgKz0gbjsKIAotICAgIGlmIChuID09IC0xKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBmaWxlLT5sb2csIG5neF9lcnJubywgIndyaXRldigpIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIGlmICgoc2l6ZV90KSBuICE9IHNpemUpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGZpbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAid3JpdGV2KCkgaGFzIHdyaXR0ZW4gb25seSAlZCBvZiAlZCIsIG4sIHNpemUpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIGZpbGUtPnN5c19vZmZzZXQgKz0gbjsKLSAgICBmaWxlLT5vZmZzZXQgKz0gbjsKKyAgICB9IHdoaWxlIChjbCk7CiAKICAgICByZXR1cm4gbjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX2luaXQuYwppbmRleCAzOWEwNTdiLi5mYWY4ZTlmIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfaW5pdC5jCkBAIC05LDggKzksOCBAQAogCiAKIC8qIEZyZWVCU0QgMy4wIGF0IGxlYXN0ICovCi1jaGFyIG5neF9mcmVlYnNkX2tlcm5fb3N0eXBlWzIwXTsKLWNoYXIgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGVhc2VbMjBdOworY2hhciBuZ3hfZnJlZWJzZF9rZXJuX29zdHlwZVsxNl07CitjaGFyIG5neF9mcmVlYnNkX2tlcm5fb3NyZWxlYXNlWzEyOF07CiBpbnQgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGRhdGU7CiBpbnQgbmd4X2ZyZWVic2RfaHdfbmNwdTsKIGludCBuZ3hfZnJlZWJzZF9uZXRfaW5ldF90Y3Bfc2VuZHNwYWNlOwpAQCAtOTUsNyArOTUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgIG5neF9mcmVlYnNkX2tlcm5fb3N0eXBlLCAmc2l6ZSwgTlVMTCwgMCkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAic3lzY3RsYnluYW1lKGtlcm4ub3N0eXBlKSBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKworICAgICAgICBpZiAobmd4X2Vycm5vICE9IE5HWF9FTk9NRU0pIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfZnJlZWJzZF9rZXJuX29zdHlwZVtzaXplIC0gMV0gPSAnXDAnOwogICAgIH0KIAogICAgIHNpemUgPSBzaXplb2Yobmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGVhc2UpOwpAQCAtMTAzLDcgKzEwOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgbmd4X2ZyZWVic2Rfa2Vybl9vc3JlbGVhc2UsICZzaXplLCBOVUxMLCAwKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICJzeXNjdGxieW5hbWUoa2Vybi5vc3JlbGVhc2UpIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworCisgICAgICAgIGlmIChuZ3hfZXJybm8gIT0gTkdYX0VOT01FTSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9mcmVlYnNkX2tlcm5fb3NyZWxlYXNlW3NpemUgLSAxXSA9ICdcMCc7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5jIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKaW5kZXggNzc0YWRiOS4uYjY0MzI1YiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKQEAgLTIxLDkgKzIxLDEwIEBACiAgKiBUaGUgU3lzViBzZW1vcCgpIGlzIGEgY2hlYXAgc3lzY2FsbCwgcGFydGljdWxhcmx5IGlmIGl0IGhhcyBsaXR0bGUgc2VtYnVmJ3MKICAqIGFuZCBkb2VzIG5vdCB1c2UgU0VNX1VORE8uCiAgKgotICogVGhlIGNvbmRpdGlvbiB2YXJpYWJsZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHNpZ25hbCAjNjQuICBUaGUgc2lnbmFsIGhhbmRsZXIKLSAqIGlzIFNJR19JR04gc28gdGhlIGtpbGwoKSBpcyBhIGNoZWFwIHN5c2NhbGwuICBUaGUgdGhyZWFkIHdhaXRzIGEgc2lnbmFsCi0gKiBpbiBrZXZlbnQoKS4gIFRoZSB1c2Ugb2YgdGhlIEVWRklMVF9TSUdOQUwgaXMgc2FmZSBzaW5jZSBGcmVlQlNEIDQuNy4KKyAqIFRoZSBjb25kaXRpb24gdmFyaWFibGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgc2lnbmFsICM2NC4KKyAqIFRoZSBzaWduYWwgaGFuZGxlciBpcyBTSUdfSUdOIHNvIHRoZSBraWxsKCkgaXMgYSBjaGVhcCBzeXNjYWxsLgorICogVGhlIHRocmVhZCB3YWl0cyBhIHNpZ25hbCBpbiBrZXZlbnQoKS4gIFRoZSB1c2Ugb2YgdGhlIEVWRklMVF9TSUdOQUwKKyAqIGlzIHNhZmUgc2luY2UgRnJlZUJTRCA0LjEwLVNUQUJMRS4KICAqCiAgKiBUaGlzIHRocmVhZHMgaW1wbGVtZW50YXRpb24gY3VycmVudGx5IHdvcmtzIG9uIGkzODYgKDQ4NispIGFuZCBhbWQ2NAogICogcGxhdGZvcm1zIG9ubHkuCkBAIC0xMTQsMTUgKzExNSwxNiBAQAogI2VuZGlmCiAKIAotaW50IG5neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLCB2b2lkKiAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZywKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX3QgKmxvZykKK25neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpCiB7Ci0gICAgaW50ICAgIGlkLCBlcnI7Ci0gICAgY2hhciAgKnN0YWNrLCAqc3RhY2tfdG9wOworICAgIG5neF9waWRfdCAgIGlkOworICAgIG5neF9lcnJfdCAgIGVycjsKKyAgICBjaGFyICAgICAgICpzdGFjaywgKnN0YWNrX3RvcDsKIAogICAgIGlmIChudGhyZWFkcyA+PSBtYXhfdGhyZWFkcykgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJubyBtb3JlIHRoYW4gJWQgdGhyZWFkcyBjYW4gYmUgY3JlYXRlZCIsIG1heF90aHJlYWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAibm8gbW9yZSB0aGFuICV1aSB0aHJlYWRzIGNhbiBiZSBjcmVhdGVkIiwgbWF4X3RocmVhZHMpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIApAQCAtMTMzLDIwICsxMzUsMjEgQEAKIAogICAgIGlmIChzdGFjayA9PSBNQVBfRkFJTEVEKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgIm1tYXAoIiBQVFJfRk1UICI6IiBTSVpFX1RfRk1UCi0gICAgICAgICAgICAgICAgICAgICAgIiwgTUFQX1NUQUNLKSB0aHJlYWQgc3RhY2sgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAibW1hcCglcDoldXosIE1BUF9TVEFDSykgdGhyZWFkIHN0YWNrIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zdGFjaywgdXNhYmxlX3N0YWNrX3NpemUpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAogICAgIGlmIChzdGFjayAhPSBsYXN0X3N0YWNrKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCAwLCAic3RhY2sgYWRkcmVzcyB3YXMgY2hhbmdlZCIpOworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAic3RhY2sgJXAgYWRkcmVzcyB3YXMgY2hhbmdlZCB0byAlcCIsIGxhc3Rfc3RhY2ssIHN0YWNrKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICBzdGFja190b3AgPSBzdGFjayArIHVzYWJsZV9zdGFja19zaXplOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgInRocmVhZCBzdGFjazogIiBQVFJfRk1UICItIiBQVFJfRk1ULCBzdGFjaywgc3RhY2tfdG9wKTsKKyAgICAgICAgICAgICAgICAgICAidGhyZWFkIHN0YWNrOiAlcC0lcCIsIHN0YWNrLCBzdGFja190b3ApOwogCiAgICAgbmd4X3NldF9lcnJubygwKTsKIApAQCAtMTY0LDcgKzE2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBuZ3hfdGhyZWFkX3N0YWNrX3NpemU7CiAgICAgICAgIHRpZHNbbnRocmVhZHNdID0gaWQ7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsICJyZm9yaygpZWQgdGhyZWFkOiAlZCIsIGlkKTsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsICJyZm9yaygpZWQgdGhyZWFkOiAlUCIsIGlkKTsKICAgICB9CiAKICAgICByZXR1cm4gZXJyOwpAQCAtMjA1LDMwICsyMDgsMzAgQEAKICAgICByZWRfem9uZSA9IG5neF9mcmVlYnNkX2tlcm5fdXNyc3RhY2sgLSAoc2l6ZSArIHJ6X3NpemUpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJ1c3JzdGFjazogIiBQVFJfRk1UICIgcmVkIHpvbmU6ICIgUFRSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAidXNyc3RhY2s6ICVwIHJlZCB6b25lOiAlcCIsCiAgICAgICAgICAgICAgICAgICAgbmd4X2ZyZWVic2Rfa2Vybl91c3JzdGFjaywgcmVkX3pvbmUpOwogCiAgICAgem9uZSA9IG1tYXAocmVkX3pvbmUsIHJ6X3NpemUsIFBST1RfTk9ORSwgTUFQX0FOT04sIC0xLCAwKTsKICAgICBpZiAoem9uZSA9PSBNQVBfRkFJTEVEKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJtbWFwKCIgUFRSX0ZNVCAiOiIgU0laRV9UX0ZNVAotICAgICAgICAgICAgICAgICAgICAgICIsIFBST1RfTk9ORSwgTUFQX0FOT04pIHJlZCB6b25lIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIm1tYXAoJXA6JXV6LCBQUk9UX05PTkUsIE1BUF9BTk9OKSByZWQgem9uZSBmYWlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgIHJlZF96b25lLCByel9zaXplKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICBpZiAoem9uZSAhPSByZWRfem9uZSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInJlZCB6b25lIGFkZHJlc3Mgd2FzIGNoYW5nZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAicmVkIHpvbmUgJXAgYWRkcmVzcyB3YXMgY2hhbmdlZCB0byAlcCIsIHJlZF96b25lLCB6b25lKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICAvKiBjcmVhdGUgdGhlIHRocmVhZHMgZXJybm8ncyBhcnJheSAqLworICAgIC8qIGNyZWF0ZSB0aGUgdGhyZWFkIGVycm5vJyBhcnJheSAqLwogCiAgICAgaWYgKCEoZXJybm9zID0gbmd4X2NhbGxvYyhuICogc2l6ZW9mKGludCksIGN5Y2xlLT5sb2cpKSkgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIC8qIGNyZWF0ZSB0aGUgdGhyZWFkcyB0aWRzIGFycmF5ICovCisgICAgLyogY3JlYXRlIHRoZSB0aHJlYWQgdGlkcyBhcnJheSAqLwogCiAgICAgaWYgKCEodGlkcyA9IG5neF9jYWxsb2MoKG4gKyAxKSAqIHNpemVvZihuZ3hfdGlkX3QpLCBjeWNsZS0+bG9nKSkpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTIzNiw3ICsyMzksNyBAQAogCiAgICAgdGlkc1swXSA9IG5neF9waWQ7CiAKLSAgICAvKiBjcmVhdGUgdGhlIHRocmVhZHMgdGxzJ3MgYXJyYXkgKi8KKyAgICAvKiBjcmVhdGUgdGhlIHRocmVhZCB0bHMnIGFycmF5ICovCiAKICAgICBuZ3hfdGxzID0gbmd4X2NhbGxvYyhOR1hfVEhSRUFEX0tFWVNfTUFYICogKG4gKyAxKSAqIHNpemVvZih2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2cpOwpAQCAtMjc0LDcgKzI3Nyw3IEBACiB9CiAKIAotbmd4X2ludF90IG5neF90aHJlYWRfa2V5X2NyZWF0ZShuZ3hfdGxzX2tleV90ICprZXkpCituZ3hfZXJyX3Qgbmd4X3RocmVhZF9rZXlfY3JlYXRlKG5neF90bHNfa2V5X3QgKmtleSkKIHsKICAgICBpZiAobmtleXMgPj0gTkdYX1RIUkVBRF9LRVlTX01BWCkgewogICAgICAgICByZXR1cm4gTkdYX0VOT01FTTsKQEAgLTI4Niw3ICsyODksNyBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfdGhyZWFkX3NldF90bHMobmd4X3Rsc19rZXlfdCBrZXksIHZvaWQgKnZhbHVlKQorbmd4X2Vycl90IG5neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgaWYgKGtleSA+PSBOR1hfVEhSRUFEX0tFWVNfTUFYKSB7CiAgICAgICAgIHJldHVybiBOR1hfRUlOVkFMOwpAQCAtMjk3LDcgKzMwMCw3IEBACiB9CiAKIAotbmd4X211dGV4X3QgKm5neF9tdXRleF9pbml0KG5neF9sb2dfdCAqbG9nLCB1aW50IGZsYWdzKQorbmd4X211dGV4X3QgKm5neF9tdXRleF9pbml0KG5neF9sb2dfdCAqbG9nLCBuZ3hfdWludF90IGZsYWdzKQogewogICAgIG5neF9tdXRleF90ICAqbTsKICAgICB1bmlvbiBzZW11biAgIG9wOwpAQCAtMzYxLDEwICszNjQsMTAgQEAKICNpZiAoTkdYX0RFQlVHKQogICAgIGlmICh0cnkpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAidHJ5IGxvY2sgbXV0ZXggIiBQVFJfRk1UICIgbG9jazolWCIsIG0sIG0tPmxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAidHJ5IGxvY2sgbXV0ZXggJXAgbG9jazolWEQiLCBtLCBtLT5sb2NrKTsKICAgICB9IGVsc2UgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJsb2NrIG11dGV4ICIgUFRSX0ZNVCAiIGxvY2s6JVgiLCBtLCBtLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImxvY2sgbXV0ZXggJXAgbG9jazolWEQiLCBtLCBtLT5sb2NrKTsKICAgICB9CiAjZW5kaWYKIApAQCAtMzk1LDcgKzM5OCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXRleCAiIFBUUl9GTVQgIiBsb2NrOiVYIiwgbSwgbS0+bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibXV0ZXggJXAgbG9jazolWEQiLCBtLCBtLT5sb2NrKTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFRoZSBtdXRleCBpcyBsb2NrZWQgc28gd2UgaW5jcmVhc2UgYSBudW1iZXIKQEAgLTQwNiw4ICs0MDksOCBAQAogCiAgICAgICAgICAgICBpZiAoKGxvY2sgJiB+TkdYX01VVEVYX0xPQ0tfQlVTWSkgPiBudGhyZWFkcykgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWQgdGhyZWFkcyB3YWl0IGZvciBtdXRleCAiIFBUUl9GTVQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHdoaWxlIG9ubHkgJWQgdGhyZWFkcyBhcmUgYXZhaWxhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlRCB0aHJlYWRzIHdhaXQgZm9yIG11dGV4ICVwLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgb25seSAldWkgdGhyZWFkcyBhcmUgYXZhaWxhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgJiB+TkdYX01VVEVYX0xPQ0tfQlVTWSwgbSwgbnRocmVhZHMpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CkBAIC00MTUsNyArNDE4LDcgQEAKICAgICAgICAgICAgIGlmIChuZ3hfYXRvbWljX2NtcF9zZXQoJm0tPmxvY2ssIG9sZCwgbG9jaykpIHsKIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2FpdCBtdXRleCAiIFBUUl9GTVQgIiBsb2NrOiVYIiwgbSwgbS0+bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhaXQgbXV0ZXggJXAgbG9jazolWEQiLCBtLCBtLT5sb2NrKTsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVGhlIG51bWJlciBvZiB0aGUgd2FpdGluZyB0aHJlYWRzIGhhcyBiZWVuIGluY3JlYXNlZApAQCAtNDMwLDE0ICs0MzMsMTIgQEAKIAogICAgICAgICAgICAgICAgIGlmIChzZW1vcChtLT5zZW1pZCwgJm9wLCAxKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG0tPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW1vcCgpIGZhaWxlZCB3aGlsZSB3YWl0aW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gbXV0ZXggIiBQVFJfRk1ULCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW1vcCgpIGZhaWxlZCB3aGlsZSB3YWl0aW5nIG9uIG11dGV4ICVwIiwgbSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXRleCB3YWtlZCB1cCAiIFBUUl9GTVQgIiBsb2NrOiVYIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCBtLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXV0ZXggd2FrZWQgdXAgJXAgbG9jazolWEQiLCBtLCBtLT5sb2NrKTsKIAogICAgICAgICAgICAgICAgIHRyaWVzID0gMDsKICAgICAgICAgICAgICAgICBvbGQgPSBtLT5sb2NrOwpAQCAtNDYyLDcgKzQ2Myw3IEBACiAgICAgICAgIGlmICh0cmllcysrID4gMTAwMCkgewogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibXV0ZXggIiBQVFJfRk1UICIgaXMgY29udGVzdGVkIiwgbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAibXV0ZXggJXAgaXMgY29udGVzdGVkIiwgbSk7CiAKICAgICAgICAgICAgIC8qIHRoZSBtdXRleCBpcyBwcm9iYWJseSBjb250ZXN0ZWQgc28gd2UgYXJlIGdpdmluZyB1cCBub3cgKi8KIApAQCAtNDc0LDcgKzQ3NSw3IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJtdXRleCAiIFBUUl9GTVQgIiBpcyBsb2NrZWQsIGxvY2s6JVgiLCBtLCBtLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAibXV0ZXggJXAgaXMgbG9ja2VkLCBsb2NrOiVYRCIsIG0sIG0tPmxvY2spOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTQ5Myw3ICs0OTQsNyBAQAogCiAgICAgaWYgKCEob2xkICYgTkdYX01VVEVYX0xPQ0tfQlVTWSkpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgInRyeWluZyB0byB1bmxvY2sgdGhlIGZyZWUgbXV0ZXggIiBQVFJfRk1ULCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAidHJ5aW5nIHRvIHVubG9jayB0aGUgZnJlZSBtdXRleCAlcCIsIG0pOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIApAQCAtNTAxLDcgKzUwMiw3IEBACiAKICNpZiAwCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJ1bmxvY2sgbXV0ZXggIiBQVFJfRk1UICIgbG9jazolWCIsIG0sIG9sZCk7CisgICAgICAgICAgICAgICAgICAgInVubG9jayBtdXRleCAlcCBsb2NrOiVYRCIsIG0sIG9sZCk7CiAjZW5kaWYKIAogICAgIGZvciAoIDs7ICkgewpAQCAtNTE2LDcgKzUxNyw3IEBACiAKICAgICBpZiAobS0+c2VtaWQgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAibXV0ZXggIiBQVFJfRk1UICIgaXMgdW5sb2NrZWQiLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIm11dGV4ICVwIGlzIHVubG9ja2VkIiwgbSk7CiAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CkBAIC01NDYsNyArNTQ3LDcgQEAKICAgICAgICAgICAgIC8qIHdha2UgdXAgdGhlIHRocmVhZCB0aGF0IHdhaXRzIG9uIHNlbWFwaG9yZSAqLwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAid2FrZSB1cCBtdXRleCAiIFBUUl9GTVQgIiIsIG0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIndha2UgdXAgbXV0ZXggJXAiLCBtKTsKIAogICAgICAgICAgICAgb3Auc2VtX251bSA9IDA7CiAgICAgICAgICAgICBvcC5zZW1fb3AgPSAxOwpAQCAtNTU0LDggKzU1NSw3IEBACiAKICAgICAgICAgICAgIGlmIChzZW1vcChtLT5zZW1pZCwgJm9wLCAxKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vtb3AoKSBmYWlsZWQgd2hpbGUgd2FraW5nIHVwIG9uIG11dGV4ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBUUl9GTVQsIG0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbW9wKCkgZmFpbGVkIHdoaWxlIHdha2luZyB1cCBvbiBtdXRleCAlcCIsIG0pOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKQEAgLTU2Niw3ICs1NjYsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAibXV0ZXggIiBQVFJfRk1UICIgaXMgdW5sb2NrZWQiLCBtKTsKKyAgICAgICAgICAgICAgICAgICAibXV0ZXggJXAgaXMgdW5sb2NrZWQiLCBtKTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC02NDcsMjEgKzY0NywyMCBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY3YgIiBQVFJfRk1UICIgd2FpdCwga3E6JWQsIHNpZ25vOiVkIiwKLSAgICAgICAgICAgICAgICAgICBjdiwgY3YtPmtxLCBjdi0+c2lnbm8pOworICAgICAgICAgICAgICAgICAgICJjdiAlcCB3YWl0LCBrcTolZCwgc2lnbm86JWQiLCBjdiwgY3YtPmtxLCBjdi0+c2lnbm8pOwogCiAgICAgZm9yICggOzsgKSB7CiAgICAgICAgIG4gPSBrZXZlbnQoY3YtPmtxLCBOVUxMLCAwLCAma2V2LCAxLCBOVUxMKTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0NPUkUsIGN2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJjdiAiIFBUUl9GTVQgIiBrZXZlbnQ6ICVkIiwgY3YsIG4pOworICAgICAgICAgICAgICAgICAgICAgICAiY3YgJXAga2V2ZW50OiAlZCIsIGN2LCBuKTsKIAogICAgICAgICBpZiAobiA9PSAtMSkgewogICAgICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcigoZXJyID09IE5HWF9FSU5UUikgPyBOR1hfTE9HX0lORk8gOiBOR1hfTE9HX0FMRVJULAogICAgICAgICAgICAgICAgICAgICAgICAgICBjdi0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSBmYWlsZWQgd2hpbGUgd2FpdGluZyBjb25kaXRpb24gdmFyaWFibGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICBQVFJfRk1ULCBjdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSBmYWlsZWQgd2hpbGUgd2FpdGluZyBjb25kaXRpb24gdmFyaWFibGUgJXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjdik7CiAKICAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VJTlRSKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC02NzMsNyArNjcyLDcgQEAKICAgICAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjdi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmV0dXJuZWQgbm8gZXZlbnRzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHdhaXRpbmcgY29uZGl0aW9uIHZhcmlhYmxlICIgUFRSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHdhaXRpbmcgY29uZGl0aW9uIHZhcmlhYmxlICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY3YpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTY4MSw3ICs2ODAsNyBAQAogICAgICAgICBpZiAoa2V2LmZpbHRlciAhPSBFVkZJTFRfU0lHTkFMKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXR1cm5lZCB1bmV4cGVjdGVkIGV2ZW50czogJWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgd2FpdGluZyBjb25kaXRpb24gdmFyaWFibGUgIiBQVFJfRk1ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgd2FpdGluZyBjb25kaXRpb24gdmFyaWFibGUgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXYuZmlsdGVyLCBjdik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNjg5LDcgKzY4OCw3IEBACiAgICAgICAgIGlmIChrZXYuaWRlbnQgIT0gKHVpbnRwdHJfdCkgY3YtPnNpZ25vKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXR1cm5lZCB1bmV4cGVjdGVkIHNpZ25hbDogJWQgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHdhaXRpbmcgY29uZGl0aW9uIHZhcmlhYmxlICIgUFRSX0ZNVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHdhaXRpbmcgY29uZGl0aW9uIHZhcmlhYmxlICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V2LmlkZW50LCBjdik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNjk3LDggKzY5Niw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY3YgIiBQVFJfRk1UICIgaXMgd2FrZWQgdXAiLCBjdik7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdi0+bG9nLCAwLCAiY3YgJXAgaXMgd2FrZWQgdXAiLCBjdik7CiAKICAgICBpZiAobmd4X211dGV4X2xvY2sobSkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CkBAIC03MTMsNyArNzExLDcgQEAKICAgICBuZ3hfZXJyX3QgIGVycjsKIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY3YgIiBQVFJfRk1UICIgdG8gc2lnbmFsICIgUElEX1RfRk1UICIgJWQiLAorICAgICAgICAgICAgICAgICAgICJjdiAlcCB0byBzaWduYWwgJVAgJWQiLAogICAgICAgICAgICAgICAgICAgIGN2LCBjdi0+dGlkLCBjdi0+c2lnbm8pOwogCiAgICAgaWYgKGtpbGwoY3YtPnRpZCwgY3YtPnNpZ25vKSA9PSAtMSkgewpAQCAtNzIxLDggKzcxOSw3IEBACiAgICAgICAgIGVyciA9IG5neF9lcnJubzsKIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN2LT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAia2lsbCgpIGZhaWxlZCB3aGlsZSBzaWduYWxpbmcgY29uZGl0aW9uIHZhcmlhYmxlICIKLSAgICAgICAgICAgICAgICAgICAgICBQVFJfRk1ULCBjdik7CisgICAgICAgICAgICAgICAgICAgICAia2lsbCgpIGZhaWxlZCB3aGlsZSBzaWduYWxpbmcgY29uZGl0aW9uIHZhcmlhYmxlICVwIiwgY3YpOwogCiAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VTUkNIKSB7CiAgICAgICAgICAgICBjdi0+dGlkID0gLTE7CkBAIC03MzEsOCArNzI4LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImN2ICIgUFRSX0ZNVCAiIGlzIHNpZ25hbGVkIiwgY3YpOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwgImN2ICVwIGlzIHNpZ25hbGVkIiwgY3YpOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5oIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKaW5kZXggYmVmMjMwYS4uMmFmMGFkYiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgbmd4X2xvZ19waWQgICAgbmd4X3RocmVhZF9zZWxmKCkKICNkZWZpbmUgbmd4X2xvZ190aWQgICAgMAogCi0jZGVmaW5lIFRJRF9UX0ZNVCAgICAgIFBJRF9UX0ZNVAorI2RlZmluZSBOR1hfVElEX1RfRk1UICAiJVAiCiAKIAogI2RlZmluZSBOR1hfTVVURVhfTElHSFQgICAgICAxCkBAIC05MSwxMCArOTEsMTAgQEAKIAogZXh0ZXJuIHZvaWQgICAgKipuZ3hfdGxzOwogCi1uZ3hfaW50X3Qgbmd4X3RocmVhZF9rZXlfY3JlYXRlKG5neF90bHNfa2V5X3QgKmtleSk7CituZ3hfZXJyX3Qgbmd4X3RocmVhZF9rZXlfY3JlYXRlKG5neF90bHNfa2V5X3QgKmtleSk7CiAjZGVmaW5lIG5neF90aHJlYWRfa2V5X2NyZWF0ZV9uICAidGhlIHRscyBrZXkgY3JlYXRpb24iCiAKLW5neF9pbnRfdCBuZ3hfdGhyZWFkX3NldF90bHMobmd4X3Rsc19rZXlfdCBrZXksIHZvaWQgKnZhbHVlKTsKK25neF9lcnJfdCBuZ3hfdGhyZWFkX3NldF90bHMobmd4X3Rsc19rZXlfdCBrZXksIHZvaWQgKnZhbHVlKTsKICNkZWZpbmUgbmd4X3RocmVhZF9zZXRfdGxzX24gICAgICJ0aGUgdGxzIGtleSBzZXR0aW5nIgogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDgzMDNjMDYuLjE5MmExYTEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxlKCkgc2VudCBvbmx5ICIgT0ZGX1RfRk1UICIgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGUoKSBzZW50IG9ubHkgJU8gYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW50KTsKIAogICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yOTAsMTQgKzI5MCwxNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGU6ICVkLCBAIiBPRkZfVF9GTVQgIiAiIE9GRl9UX0ZNVCAiOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kZmlsZTogJWQsIEAlTyAlTzoldXoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGZpbGUtPmZpbGVfcG9zLCBzZW50LCBmc2l6ZSArIGhzaXplKTsKIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmMgPSB3cml0ZXYoYy0+ZmQsIGhlYWRlci5lbHRzLCBoZWFkZXIubmVsdHMpOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGV2OiAlZCBvZiAiIFNJWkVfVF9GTVQsIHJjLCBoc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGV2OiAlZCBvZiAldXoiLCByYywgaHNpemUpOwogCiAgICAgICAgICAgICBpZiAocmMgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmggYi9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKaW5kZXggOWEwZmVlOS4uZmIyY2JjOCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPG5ldGRiLmg+CiAKICNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAgICAgICAgLyogdHpzZXQoKSAqLworI2luY2x1ZGUgPG1hbGxvYy5oPiAgICAgICAgICAgICAvKiBtZW1hbGlnbigpICovCiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfc2VuZGZpbGVfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDRkZTdhYzIuLmFkNDBmNTUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jCkBAIC0xOTUsNyArMTk1LDcgQEAKICAgICAgICAgICAgIHNlbnQgPSByYyA+IDAgPyByYyA6IDA7CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kZmlsZTogJWQsIEAiIE9GRl9UX0ZNVCAiICVkOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kZmlsZTogJWQsIEAlTyAlejoldXoiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGZpbGUtPmZpbGVfcG9zLCBzZW50LCBmc2l6ZSk7CiAKICAgICAgICAgfSBlbHNlIHsKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAgICAgICAgICAgICBzZW50ID0gcmMgPiAwID8gcmMgOiAwOwogCi0gICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJ3cml0ZXY6ICVkIiwgc2VudCk7CisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJ3cml0ZXY6ICV6Iiwgc2VudCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2VuZCAtIHNwcmV2ID09IHNlbnQpIHsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCmluZGV4IDFjN2IxYjYuLjE5ZDY1YTQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiB2b2lkIG5neF9wb3NpeF9zdGF0dXMobmd4X2xvZ190ICpsb2cpCiB7CiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICJnZXRybGltaXQoUkxJTUlUX05PRklMRSk6ICIgUkxJTV9UX0ZNVCAiOiIgUkxJTV9UX0ZNVCwKKyAgICAgICAgICAgICAgICAgICJnZXRybGltaXQoUkxJTUlUX05PRklMRSk6ICVyOiVyIiwKICAgICAgICAgICAgICAgICAgIHJsbXQucmxpbV9jdXIsIHJsbXQucmxpbV9tYXgpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYwppbmRleCA0ZjdlZDY0Li4zMTQxZTE0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQ09SRSwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAic3Bhd24gJXM6ICIgUElEX1RfRk1ULCBuYW1lLCBwaWQpOworICAgICAgICAgICAgICAgICAgICJzcGF3biAlczogJVAiLCBuYW1lLCBwaWQpOwogCiAgICAgbmd4X3Byb2Nlc3Nlc1tzXS5waWQgPSBwaWQ7CiAgICAgbmd4X3Byb2Nlc3Nlc1tzXS5leGl0ZWQgPSAwOwpAQCAtMjgyLDIyICsyODIsNDAgQEAKIAogICAgICAgICBpZiAoV1RFUk1TSUcoc3RhdHVzKSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBuZ3hfY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICIgUElEX1RfRk1UICIgZXhpdGVkIG9uIHNpZ25hbCAlZCVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICVQIGV4aXRlZCBvbiBzaWduYWwgJWQlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIHBpZCwgV1RFUk1TSUcoc3RhdHVzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgV0NPUkVEVU1QKHN0YXR1cykgPyAiIChjb3JlIGR1bXBlZCkiIDogIiIpOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbmd4X2N5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIlcyAiIFBJRF9UX0ZNVCAiIGV4aXRlZCB3aXRoIGNvZGUgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgJVAgZXhpdGVkIHdpdGggY29kZSAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIHBpZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoV0VYSVRTVEFUVVMoc3RhdHVzKSA9PSAyICYmIG5neF9wcm9jZXNzZXNbaV0ucmVzcGF3bikgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBuZ3hfY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzICIgUElEX1RfRk1UCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgZXhpdGVkIHdpdGggZmF0YWwgY29kZSAlZCBhbmQgY291bGQgbm90IHJlc3Bhd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLCBwaWQsIFdFWElUU1RBVFVTKHN0YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgIiVzICVQIGV4aXRlZCB3aXRoIGZhdGFsIGNvZGUgJWQgYW5kIGNvdWxkIG5vdCByZXNwYXduIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIHBpZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2ldLnJlc3Bhd24gPSAwOwogICAgICAgICB9CiAgICAgfQogfQorCisKK3ZvaWQgbmd4X2RlYnVnX3BvaW50KCkKK3sKKyAgICBuZ3hfY29yZV9jb25mX3QgICpjY2Y7CisKKyAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb3JlX21vZHVsZSk7CisKKyAgICBzd2l0Y2ggKGNjZi0+ZGVidWdfcG9pbnRzKSB7CisKKyAgICBjYXNlIE5HWF9ERUJVR19QT0lOVFNfU1RPUDoKKyAgICAgICAgcmFpc2UoU0lHU1RPUCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBOR1hfREVCVUdfUE9JTlRTX0FCT1JUOgorICAgICAgICBhYm9ydCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmggYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCmluZGV4IDljYjA3MDAuLjEyNzAzYjMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaApAQCAtNTMsNiArNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsIG5neF9pbnRfdCByZXNwYXduKTsKIG5neF9waWRfdCBuZ3hfZXhlY3V0ZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9leGVjX2N0eF90ICpjdHgpOwogdm9pZCBuZ3hfcHJvY2Vzc19nZXRfc3RhdHVzKHZvaWQpOwordm9pZCBuZ3hfZGVidWdfcG9pbnQodm9pZCk7CiAKIAogI2lmIChOR1hfSEFWRV9TQ0hFRF9ZSUVMRCkKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCmluZGV4IDFkYTQ5MTUuLjA0NDdiYzQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwpAQCAtMzIyLDExICszMjIsMTAgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzYoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhc3MgY2hhbm5lbCBzOiVkIHBpZDoiIFBJRF9UX0ZNVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmZDolZCB0byBzOiVkIHBpZDoiIFBJRF9UX0ZNVCAiIGZkOiVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLnNsb3QsIGNoLnBpZCwgY2guZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wcm9jZXNzZXNbaV0uY2hhbm5lbFswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzIGNoYW5uZWwgczolZCBwaWQ6JVAgZmQ6JWQgdG8gczolaSBwaWQ6JVAgZmQ6JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaC5zbG90LCBjaC5waWQsIGNoLmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tpXS5jaGFubmVsWzBdKTsKIAogICAgICAgICAgICAgLyogVE9ETzogTkdYX0FHQUlOICovCiAKQEAgLTM4NCw3ICszODMsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBuZ3hfbGFzdF9wcm9jZXNzOyBpKyspIHsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnNyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQ6ICVkICIgUElEX1RfRk1UICIgZTolZCB0OiVkIGQ6JWQgcjolZCBqOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkOiAlZCAlUCBlOiVkIHQ6JWQgZDolZCByOiVkIGo6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tpXS5leGl0aW5nLApAQCAtNDIxLDEzICs0MjAsMTIgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQ09SRSwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgImtpbGwgKCIgUElEX1RfRk1UICIsICVkKSIgLAotICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwgc2lnbm8pOworICAgICAgICAgICAgICAgICAgICAgICAia2lsbCAoJVAsICVkKSIgLCBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwgc2lnbm8pOwogCiAgICAgICAgIGlmIChraWxsKG5neF9wcm9jZXNzZXNbaV0ucGlkLCBzaWdubykgPT0gLTEpIHsKICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAia2lsbCglZCwgJWQpIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJraWxsKCVQLCAlZCkgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tpXS5waWQsIHNpZ25vKTsKIAogICAgICAgICAgICAgaWYgKGVyciA9PSBOR1hfRVNSQ0gpIHsKQEAgLTQ1OSw3ICs0NTcsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBuZ3hfbGFzdF9wcm9jZXNzOyBpKyspIHsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnNyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQ6ICVkICIgUElEX1RfRk1UICIgZTolZCB0OiVkIGQ6JWQgcjolZCBqOiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkOiAlZCAlUCBlOiVkIHQ6JWQgZDolZCByOiVkIGo6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICBpLAogICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2ldLnBpZCwKICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tpXS5leGl0aW5nLApAQCAtNDkyLDggKzQ5MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0NPUkUsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJwYXNzIGNsb3NlIGNoYW5uZWwgczolZCBwaWQ6IiBQSURfVF9GTVQKLSAgICAgICAgICAgICAgICAgICAgICAgIiB0bzoiIFBJRF9UX0ZNVCwgY2guc2xvdCwgY2gucGlkLCBuZ3hfcHJvY2Vzc2VzW25dLnBpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXNzIGNsb3NlIGNoYW5uZWwgczolaSBwaWQ6JVAgdG86JVAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaC5zbG90LCBjaC5waWQsIG5neF9wcm9jZXNzZXNbbl0ucGlkKTsKIAogICAgICAgICAgICAgICAgICAgICAvKiBUT0RPOiBOR1hfQUdBSU4gKi8KIApAQCAtNzg2LDkgKzc4NCwxOSBAQAogCiAgICAgbiA9IG5neF9yZWFkX2NoYW5uZWwoYy0+ZmQsICZjaCwgc2l6ZW9mKG5neF9jaGFubmVsX3QpLCBldi0+bG9nKTsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgImNoYW5uZWw6ICVkIiwgbik7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBldi0+bG9nLCAwLCAiY2hhbm5lbDogJWkiLCBuKTsKIAotICAgIGlmIChuIDw9IDApIHsKKyAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgaWYgKGNsb3NlKGMtPmZkKSA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBldi0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSgpIGNoYW5uZWwgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBjLT5mZCA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgxMiw4ICs4MjAsNyBAQAogICAgIGNhc2UgTkdYX0NNRF9PUEVOX0NIQU5ORUw6CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19DT1JFLCBldi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGNoYW5uZWwgczolZCBwaWQ6IiBQSURfVF9GTVQgIiBmZDolZCIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoLnNsb3QsIGNoLnBpZCwgY2guZmQpOworICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGNoYW5uZWwgczolaSBwaWQ6JVAgZmQ6JWQiLCBjaC5zbG90LCBjaC5waWQsIGNoLmZkKTsKIAogICAgICAgICBuZ3hfcHJvY2Vzc2VzW2NoLnNsb3RdLnBpZCA9IGNoLnBpZDsKICAgICAgICAgbmd4X3Byb2Nlc3Nlc1tjaC5zbG90XS5jaGFubmVsWzBdID0gY2guZmQ7CkBAIC04MjIsOCArODI5LDcgQEAKICAgICBjYXNlIE5HWF9DTURfQ0xPU0VfQ0hBTk5FTDoKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0NPUkUsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSBjaGFubmVsIHM6JWQgcGlkOiIgUElEX1RfRk1UICIgb3VyOiIgUElEX1RfRk1UCi0gICAgICAgICAgICAgICAgICAgICAgICIgZmQ6JWQiLAorICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UgY2hhbm5lbCBzOiVpIHBpZDolUCBvdXI6JVAgZmQ6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICBjaC5zbG90LCBjaC5waWQsIG5neF9wcm9jZXNzZXNbY2guc2xvdF0ucGlkLAogICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2NoLnNsb3RdLmNoYW5uZWxbMF0pOwogCkBAIC04ODIsNyArODg4LDcgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCogbmd4X3dvcmtlcl90aHJlYWRfY3ljbGUodm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkICpuZ3hfd29ya2VyX3RocmVhZF9jeWNsZSh2b2lkICpkYXRhKQogewogICAgIG5neF90aHJlYWRfdCAgKnRociA9IGRhdGE7CiAKQEAgLTkwOSw3ICs5MTUsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAidGhyZWFkICIgVElEX1RfRk1UICIgc3RhcnRlZCIsIG5neF90aHJlYWRfc2VsZigpKTsKKyAgICAgICAgICAgICAgICAgICAidGhyZWFkICIgTkdYX1RJRF9UX0ZNVCAiIHN0YXJ0ZWQiLCBuZ3hfdGhyZWFkX3NlbGYoKSk7CiAKICAgICBuZ3hfc2V0dGhydGl0bGUoIndvcmtlciB0aHJlYWQiKTsKIApAQCAtOTQxLDcgKzk0Nyw4IEBACiAgICAgICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKIAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZCAlZCBpcyBkb25lIiwgbmd4X3RocmVhZF9zZWxmKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgInRocmVhZCAiIE5HWF9USURfVF9GTVQgIiBpcyBkb25lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF90aHJlYWRfc2VsZigpKTsKIAogICAgICAgICAgICAgcmV0dXJuICh2b2lkICopIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jIGIvc3JjL29zL3VuaXgvbmd4X3B0aHJlYWRfdGhyZWFkLmMKaW5kZXggYWQ3OTg3Yi4uNDkwM2Q1ZSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3B0aHJlYWRfdGhyZWFkLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3B0aHJlYWRfdGhyZWFkLmMKQEAgLTE1LDE0ICsxNSwxNCBAQAogc3RhdGljIHB0aHJlYWRfYXR0cl90ICB0aHJfYXR0cjsKIAogCi1pbnQgbmd4X2NyZWF0ZV90aHJlYWQobmd4X3RpZF90ICp0aWQsIHZvaWQqICgqZnVuYykodm9pZCAqYXJnKSwgdm9pZCAqYXJnLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfdCAqbG9nKQorbmd4X2Vycl90IG5neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLCB2b2lkKiAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBpbnQgIGVycjsKIAogICAgIGlmIChudGhyZWFkcyA+PSBtYXhfdGhyZWFkcykgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJubyBtb3JlIHRoYW4gJWQgdGhyZWFkcyBjYW4gYmUgY3JlYXRlZCIsIG1heF90aHJlYWRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAibm8gbW9yZSB0aGFuICV1aSB0aHJlYWRzIGNhbiBiZSBjcmVhdGVkIiwgbWF4X3RocmVhZHMpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIApAQCAtMzQsNyArMzQsNyBAQAogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJ0aHJlYWQgaXMgY3JlYXRlZDogIiBUSURfVF9GTVQsICp0aWQpOworICAgICAgICAgICAgICAgICAgICJ0aHJlYWQgaXMgY3JlYXRlZDogIiBOR1hfVElEX1RfRk1ULCAqdGlkKTsKIAogICAgIG50aHJlYWRzKys7CiAKQEAgLTcwLDcgKzcwLDcgQEAKIH0KIAogCi1uZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIHVpbnQgZmxhZ3MpCituZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpCiB7CiAgICAgaW50ICAgICAgICAgICBlcnI7CiAgICAgbmd4X211dGV4X3QgICptOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9tdXRleF9kZXN0cm95KCIgUFRSX0ZNVCAiKSBmYWlsZWQiLCBtKTsKKyAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9tdXRleF9kZXN0cm95KCVwKSBmYWlsZWQiLCBtKTsKICAgICB9CiAKICAgICBuZ3hfZnJlZShtKTsKQEAgLTExNiwxOCArMTE2LDE3IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibG9jayBtdXRleCAiIFBUUl9GTVQsIG0pOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwgImxvY2sgbXV0ZXggJXAiLCBtKTsKIAogICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9jaygmbS0+bXV0ZXgpOwogCiAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfbG9jaygiIFBUUl9GTVQgIikgZmFpbGVkIiwgbSk7CisgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfbG9jayglcCkgZmFpbGVkIiwgbSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJtdXRleCAiIFBUUl9GTVQgIiBpcyBsb2NrZWQiLCBtKTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsICJtdXRleCAlcCBpcyBsb2NrZWQiLCBtKTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC0xNDEsOCArMTQwLDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgInRyeSBsb2NrIG11dGV4ICIgUFRSX0ZNVCwgbSk7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAidHJ5IGxvY2sgbXV0ZXggJXAiLCBtKTsKIAogICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmbS0+bXV0ZXgpOwogCkBAIC0xNTIsMTIgKzE1MCwxMSBAQAogCiAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygiIFBUUl9GTVQgIikgZmFpbGVkIiwgbSk7CisgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfdHJ5bG9jayglcCkgZmFpbGVkIiwgbSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJtdXRleCAiIFBUUl9GTVQgIiBpcyBsb2NrZWQiLCBtKTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsICJtdXRleCAlcCBpcyBsb2NrZWQiLCBtKTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC0xNzEsMTggKzE2OCwxNyBAQAogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwgInVubG9jayBtdXRleCAiIFBUUl9GTVQsIG0pOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwgInVubG9jayBtdXRleCAlcCIsIG0pOwogCiAgICAgZXJyID0gcHRocmVhZF9tdXRleF91bmxvY2soJm0tPm11dGV4KTsKIAogICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG0tPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICJwdGhyZWFkX211dGV4X3VubG9jaygiIFBUUl9GTVQgIikgZmFpbGVkIiwgbSk7CisgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfdW5sb2NrKCVwKSBmYWlsZWQiLCBtKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgIm11dGV4ICIgUFRSX0ZNVCAiIGlzIHVubG9ja2VkIiwgbSk7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibXV0ZXggJXAgaXMgdW5sb2NrZWQiLCBtKTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC0yMTksNyArMjE1LDcgQEAKIAogICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN2LT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9jb25kX2Rlc3Ryb3koIiBQVFJfRk1UICIpIGZhaWxlZCIsIGN2KTsKKyAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9jb25kX2Rlc3Ryb3koJXApIGZhaWxlZCIsIGN2KTsKICAgICB9CiAKICAgICBuZ3hfZnJlZShjdik7CkBAIC0yMzAsMjIgKzIyNiwxOSBAQAogewogICAgIGludCAgZXJyOwogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJjdiAiIFBUUl9GTVQgIiB3YWl0IiwgY3YpOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwgImN2ICVwIHdhaXQiLCBjdik7CiAKICAgICBlcnIgPSBwdGhyZWFkX2NvbmRfd2FpdCgmY3YtPmNvbmQsICZtLT5tdXRleCk7CiAKICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjdi0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfY29uZF93YWl0KCIgUFRSX0ZNVCAiKSBmYWlsZWQiLCBjdik7CisgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfY29uZF93YWl0KCVwKSBmYWlsZWQiLCBjdik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJjdiAiIFBUUl9GTVQgIiBpcyB3YWtlZCB1cCIsIGN2KTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN2LT5sb2csIDAsICJjdiAlcCBpcyB3YWtlZCB1cCIsIGN2KTsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAibXV0ZXggIiBQVFJfRk1UICIgaXMgbG9ja2VkIiwgbSk7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibXV0ZXggJXAgaXMgbG9ja2VkIiwgbSk7CiAKICAgICByZXR1cm4gTkdYX09LOwogfQpAQCAtMjU1LDE5ICsyNDgsMTcgQEAKIHsKICAgICBpbnQgIGVycjsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiY3YgIiBQVFJfRk1UICIgdG8gc2lnbmFsIiwgY3YpOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgY3YtPmxvZywgMCwgImN2ICVwIHRvIHNpZ25hbCIsIGN2KTsKIAogICAgIGVyciA9IHB0aHJlYWRfY29uZF9zaWduYWwoJmN2LT5jb25kKTsKIAogICAgIGlmIChlcnIgIT0gMCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN2LT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9jb25kX3NpZ25hbCgiIFBUUl9GTVQgIikgZmFpbGVkIiwgY3YpOworICAgICAgICAgICAgICAgICAgICAgICJwdGhyZWFkX2NvbmRfc2lnbmFsKCVwKSBmYWlsZWQiLCBjdik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJjdiAiIFBUUl9GTVQgIiBpcyBzaWduYWxlZCIsIGN2KTsKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN2LT5sb2csIDAsICJjdiAlcCBpcyBzaWduYWxlZCIsIGN2KTsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmMgYi9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmMKaW5kZXggNjBmMmRlMC4uN2YzYzVlOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NoYXJlZC5jCisrKyBiL3NyYy9vcy91bml4L25neF9zaGFyZWQuYwpAQCAtMTgsOCArMTgsNyBAQAogCiAgICAgaWYgKHAgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJtbWFwKE1BUF9BTk9OfE1BUF9TSEFSRUQsICIgU0laRV9UX0ZNVCAiKSBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgIHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICJtbWFwKE1BUF9BTk9OfE1BUF9TSEFSRUQsICV1eikgZmFpbGVkIiwgc2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtNDUsOCArNDQsNyBAQAogCiAgICAgaWYgKHAgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJtbWFwKC9kZXYvemVybywgTUFQX1NIQVJFRCwgIiBTSVpFX1RfRk1UICIpIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgIm1tYXAoL2Rldi96ZXJvLCBNQVBfU0hBUkVELCAldXopIGZhaWxlZCIsIHNpemUpOwogICAgICAgICBwID0gTlVMTDsKICAgICB9CiAKQEAgLTcyLDcgKzcwLDcgQEAKIAogICAgIGlmIChpZCA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJzaG1nZXQoIiBTSVpFX1RfRk1UICIpIGZhaWxlZCIsIHNpemUpOworICAgICAgICAgICAgICAgICAgICAgICJzaG1nZXQoJXV6KSBmYWlsZWQiLCBzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmggYi9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmgKaW5kZXggMzQ0NDlkMC4uYzZlYjk0MSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5oCisrKyBiL3NyYy9vcy91bml4L25neF9zb2NrZXQuaApAQCAtMTUsNyArMTUsNyBAQAogCiB0eXBlZGVmIGludCAgbmd4X3NvY2tldF90OwogCi0jZGVmaW5lIG5neF9zb2NrZXQoYWYsIHR5cGUsIHByb3RvLCBmbGFncykgICBzb2NrZXQoYWYsIHR5cGUsIHByb3RvKQorI2RlZmluZSBuZ3hfc29ja2V0ICAgICAgICAgIHNvY2tldAogI2RlZmluZSBuZ3hfc29ja2V0X24gICAgICAgICJzb2NrZXQoKSIKIAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX3NlbmRmaWxldl9jaGFpbi5jCmluZGV4IDk0MzBkYzAuLjIxZjhiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX3NlbmRmaWxldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9zb2xhcmlzX3NlbmRmaWxldl9jaGFpbi5jCkBAIC0xMzYsOCArMTM2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kZmlsZXYoKSBzZW50IG9ubHkgIiBTSVpFX1RfRk1UICIgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VuZGZpbGV2KCkgc2VudCBvbmx5ICV6IGJ5dGVzIiwgc2VudCk7CiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgd2V2LT5lcnJvciA9IDE7CkBAIC0xNDcsNyArMTQ2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxldjogJWQgIiBTSVpFX1RfRk1ULCBuLCBzZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgInNlbmRmaWxldjogJXogJXoiLCBuLCBzZW50KTsKIAogICAgICAgICBpZiAoc2VuZCAtIHNwcmV2ID09IHNlbnQpIHsKICAgICAgICAgICAgIGNvbXBsZXRlID0gMTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90aHJlYWQuaCBiL3NyYy9vcy91bml4L25neF90aHJlYWQuaAppbmRleCAxNmUyMTZlLi5hYzdjZmFkIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfdGhyZWFkLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3RocmVhZC5oCkBAIC0yOSw5ICsyOSw5IEBACiAjZGVmaW5lIG5neF9sb2dfdGlkICAgICAgICAgICAgICAgICAgKGludCkgbmd4X3RocmVhZF9zZWxmKCkKIAogI2lmIChOR1hfRlJFRUJTRCkgJiYgIShOR1hfTElOVVhUSFJFQURTKQotI2RlZmluZSBUSURfVF9GTVQgICAgICAgICAgICAgICAgICAgIFBUUl9GTVQKKyNkZWZpbmUgTkdYX1RJRF9UX0ZNVCAgICAgICAgICAgICAgICAiJXAiCiAjZWxzZQotI2RlZmluZSBUSURfVF9GTVQgICAgICAgICAgICAgICAgICAgICIlZCIKKyNkZWZpbmUgTkdYX1RJRF9UX0ZNVCAgICAgICAgICAgICAgICAiJWQiCiAjZW5kaWYKIAogCkBAIC05MiwxMSArOTIsMTEgQEAKIAogCiBuZ3hfaW50X3Qgbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSk7Ci1pbnQgbmd4X2NyZWF0ZV90aHJlYWQobmd4X3RpZF90ICp0aWQsIHZvaWQqICgqZnVuYykodm9pZCAqYXJnKSwgdm9pZCAqYXJnLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfdCAqbG9nKTsKK25neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpOwogCiAKLW5neF9tdXRleF90ICpuZ3hfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZywgdWludCBmbGFncyk7CituZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpOwogdm9pZCBuZ3hfbXV0ZXhfZGVzdHJveShuZ3hfbXV0ZXhfdCAqbSk7CiAKIApAQCAtMTEwLDggKzExMCw4IEBACiAKICNkZWZpbmUgbmd4X3RocmVhZF92b2xhdGlsZQogCi0jZGVmaW5lIG5neF9sb2dfdGlkICAwCi0jZGVmaW5lIFRJRF9UX0ZNVCAgICAiJWQiCisjZGVmaW5lIG5neF9sb2dfdGlkICAgICAgICAgICAwCisjZGVmaW5lIE5HWF9USURfVF9GTVQgICAgICAgICAiJWQiCiAKICNkZWZpbmUgbmd4X211dGV4X3RyeWxvY2sobSkgIE5HWF9PSwogI2RlZmluZSBuZ3hfbXV0ZXhfbG9jayhtKSAgICAgTkdYX09LCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKaW5kZXggZTU3YjU5My4uZTM4OTMyMiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwpAQCAtOSwxNCArOSwxNCBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKLSNkZWZpbmUgTkdYX0lPVlMgIDgKKyNkZWZpbmUgTkdYX0lPVlMgIDE2CiAKIAogbmd4X2NoYWluX3QgKm5neF93cml0ZXZfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLCBvZmZfdCBsaW1pdCkKIHsKICAgICB1X2NoYXIgICAgICAgICpwcmV2OwotICAgIHNzaXplX3QgICAgICAgIG4sIHNpemU7Ci0gICAgb2ZmX3QgICAgICAgICAgc2VuZCwgc3ByZXYsIHNlbnQ7CisgICAgc3NpemVfdCAgICAgICAgbiwgc2l6ZSwgc2VudDsKKyAgICBvZmZfdCAgICAgICAgICBzZW5kLCBzcHJldjsKICAgICBuZ3hfdWludF90ICAgICBlaW50ciwgY29tcGxldGU7CiAgICAgbmd4X2Vycl90ICAgICAgZXJyOwogICAgIG5neF9hcnJheV90ICAgIHZlYzsKQEAgLTY2LDYgKzY2LDEyIEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKKyNpZiAxCisgICAgICAgICAgICBpZiAoIW5neF9idWZfaW5fbWVtb3J5KGNsLT5idWYpKSB7CisgICAgICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CisgICAgICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CiAKICAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7CkBAIC0xMTAsOCArMTE2LDcgQEAKIAogICAgICAgICBzZW50ID0gbiA+IDAgPyBuIDogMDsKIAotICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZXY6ICIgT0ZGX1RfRk1ULCBzZW50KTsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAid3JpdGV2OiAleiIsIHNlbnQpOwogCiAgICAgICAgIGlmIChzZW5kIC0gc3ByZXYgPT0gc2VudCkgewogICAgICAgICAgICAgY29tcGxldGUgPSAxOwpAQCAtMTE5LDcgKzEyNCw4IEBACiAKICAgICAgICAgYy0+c2VudCArPSBzZW50OwogCi0gICAgICAgIGZvciAoY2wgPSBpbjsgY2wgJiYgc2VudCA+IDA7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgZm9yIChjbCA9IGluOyBjbDsgY2wgPSBjbC0+bmV4dCkgeworCiAgICAgICAgICAgICBpZiAobmd4X2J1Zl9zcGVjaWFsKGNsLT5idWYpKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbnguaWNvIGIvc3JjL29zL3dpbjMyL25naW54LmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmIzMzBiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zL3dpbjMyL25naW54LmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbngucmMgYi9zcmMvb3Mvd2luMzIvbmdpbngucmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyZTI0MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ2lueC5yYwpAQCAtMCwwICsxLDE2IEBACisKKy8vIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKworI2luY2x1ZGUgPG5neF9ndWkuaD4KKworbmdpbnggICBpY29uICBkaXNjYXJkYWJsZSAgInNyY1xcb3NcXHdpbjMyXFxuZ2lueC5pY28iCit0cmF5ICAgIGljb24gIGRpc2NhcmRhYmxlICAic3JjXFxvc1xcd2luMzJcXHRyYXkuaWNvIgorCituZ2lueCAgIG1lbnUgIGRpc2NhcmRhYmxlIAorYmVnaW4KKyAgICBwb3B1cCAiJm5naW54IgorICAgIGJlZ2luCisgICAgICAgIG1lbnVpdGVtICImRXhpdCIsICAgTkdYX1dNX0VYSVQKKyAgICAgICAgbWVudWl0ZW0gIiZBYm91dCIsICBOR1hfV01fQUJPVVQKKyAgICBlbmQKK2VuZApkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9hbGxvYy5jIGIvc3JjL29zL3dpbjMyL25neF9hbGxvYy5jCmluZGV4IGVhMzZjYWQuLmU3M2FhMzIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfYWxsb2MuYworKysgYi9zcmMvb3Mvd2luMzIvbmd4X2FsbG9jLmMKQEAgLTE3LDExICsxNywxMCBAQAogCiAgICAgaWYgKCEocCA9IG1hbGxvYyhzaXplKSkpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAibWFsbG9jKCkgIiBTSVpFX1RfRk1UICIgYnl0ZXMgZmFpbGVkIiwgc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgIm1hbGxvYygpICV1eiBieXRlcyBmYWlsZWQiLCBzaXplKTsKICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0FMTE9DLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgIm1hbGxvYzogIiBQVFJfRk1UICI6IiBTSVpFX1RfRk1ULCBwLCBzaXplKTsKKyAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0FMTE9DLCBsb2csIDAsICJtYWxsb2M6ICVwOiV1eiIsIHAsIHNpemUpOwogCiAgICAgcmV0dXJuIHA7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oIGIvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaAppbmRleCAzZWYxNTA5Li5iNDkxNWQwIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKQEAgLTE4LDcgKzE4LDcgQEAKICNkZWZpbmUgbmd4X2F0b21pY19pbmMocCkgICAgICAgSW50ZXJsb2NrZWRJbmNyZW1lbnQoKGxvbmcgKikgcCkKIAogCi0jaWYgZGVmaW5lZCggX19XQVRDT01DX18gKSB8fCBkZWZpbmVkKCBfX0JPUkxBTkRDX18gKQorI2lmIGRlZmluZWQoIF9fV0FUQ09NQ19fICkgfHwgZGVmaW5lZCggX19CT1JMQU5EQ19fICkgfHwgKCBfTVNDX1ZFUiA+PSAxMzAwICkKIAogLyogdGhlIG5ldyBTREsgaGVhZGVycyAqLwogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmMgYi9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmMKaW5kZXggNmY4ZDJkYS4uOGU5MjgwZCAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9lcnJuby5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uYwpAQCAtMTUsNjQgKzE1LDEwMSBAQAogCiAKIHN0YXRpYyBuZ3hfc3RyX3QgIHdzYV9lcnJvcnNbXSA9IHsKLSAgICBuZ3hfc3RyaW5nKCJJbnZhbGlkIGFyZ3VtZW50IiksICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAyMiAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDIzICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMjQgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAyNSAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDI2ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMjcgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAyOCAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDI5ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzAgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzMSAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDMyICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzMgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzNCAqLwotICAgIG5neF9zdHJpbmcoIlJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlIiksICAgICAgICAgIC8qIDEwMDM1ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzYgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzNyAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDM4ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzkgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0MCAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQxICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDIgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0MyAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQ0ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDUgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0NiAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQ3ICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDggKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0OSAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDUwICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNTEgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA1MiAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDUzICovCi0gICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNTQgKi8KLSAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA1NSAqLwotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDU2ICovCi0gICAgbmd4X3N0cmluZygiU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQiKSAgICAgICAgICAgICAgICAgICAgLyogMTAwNTcgKi8KKyAgICBuZ3hfc3RyaW5nKCJBbiBpbnZhbGlkIGFyZ3VtZW50IHdhcyBzdXBwbGllZCIpLCAgICAgIC8qIFdTQUVJTlZBTCAxMDAyMiAqLworICAgIG5neF9zdHJpbmcoIlRvbyBtYW55IG9wZW4gc29ja2V0cyIpLCAgICAgICAgICAgICAgICAgLyogV1NBRU1GSUxFIDEwMDIzICovCisKKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAyNCAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDI1ICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMjYgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAyNyAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDI4ICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMjkgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzMCAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDMxICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzIgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzMyAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDM0ICovCisKKyAgICAvKiBXU0FFV09VTERCTE9DSyAxMDAzNSAqLworICAgIG5neF9zdHJpbmcoIkEgbm9uLWJsb2NraW5nIHNvY2tldCBvcGVyYXRpb24gY291bGQgbm90IGJlIGNvbXBsZXRlZCAiCisgICAgICAgICAgICAgICAiaW1tZWRpYXRlbHkiKSwKKworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDM2ICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwMzcgKi8KKworICAgIC8qIFdTQUVOT1RTT0NLIDEwMDM4ICovCisgICAgbmd4X3N0cmluZygiQW4gb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgc29ja2V0IiksCisKKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDAzOSAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQwICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDEgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0MiAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQzICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDQgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0NSAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQ2ICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNDcgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA0OCAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDQ5ICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNTAgKi8KKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA1MSAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDUyICovCisgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAwNTMgKi8KKworICAgIC8qIFdTQUVDT05OUkVTRVQgMTAwNTQgKi8KKyAgICBuZ3hfc3RyaW5nKCJBbiBleGlzdGluZyBjb25uZWN0aW9uIHdhcyBmb3JjaWJseSBjbG9zZWQgYnkgdGhlIHJlbW90ZSBob3N0IiksCisKKyAgICAvKiBXU0FFTk9CVUZTIDEwMDU1ICovCisgICAgbmd4X3N0cmluZygiQW4gb3BlcmF0aW9uIG9uIGEgc29ja2V0IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQgYmVjYXVzZSAiCisgICAgICAgICAgICAgICAidGhlIHN5c3RlbSBsYWNrZWQgc3VmZmljaWVudCBidWZmZXIgc3BhY2Ugb3IgIgorICAgICAgICAgICAgICAgImJlY2F1c2UgYSBxdWV1ZSB3YXMgZnVsbCIpLAorCisgICAgLyogV1NBRUlTQ09OTiAxMDA1NiAqLworICAgIG5neF9zdHJpbmcoIkEgY29ubmVjdCByZXF1ZXN0IHdhcyBtYWRlIG9uIGFuIGFscmVhZHkgY29ubmVjdGVkIHNvY2tldCIpLAorCisgICAgLyogV1NBRU5PVENPTk4gMTAwNTcgKi8KKyAgICBuZ3hfc3RyaW5nKCJBIHJlcXVlc3QgdG8gc2VuZCBvciByZWNlaXZlIGRhdGEgd2FzIGRpc2FsbG93ZWQgYmVjYXVzZSIKKyAgICAgICAgICAgICAgICJ0aGUgc29ja2V0IGlzIG5vdCBjb25uZWN0ZWQgYW5kICh3aGVuIHNlbmRpbmcgb24gYSBkYXRhZ3JhbSAiCisgICAgICAgICAgICAgICAic29ja2V0IHVzaW5nIGEgc2VuZHRvIGNhbGwpIG5vIGFkZHJlc3Mgd2FzIHN1cHBsaWVkIiksCisKKyAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA1OCAqLworICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMDU5ICovCisKKyAgICAvKiBXU0FFVElNRURPVVQgMTAwNjAgKi8KKyAgICBuZ3hfc3RyaW5nKCJBIGNvbm5lY3Rpb24gYXR0ZW1wdCBmYWlsZWQgYmVjYXVzZSB0aGUgY29ubmVjdGVkIHBhcnR5ICIKKyAgICAgICAgICAgICAgICJkaWQgbm90IHByb3Blcmx5IHJlc3BvbmQgYWZ0ZXIgYSBwZXJpb2Qgb2YgdGltZSwgIgorICAgICAgICAgICAgICAgIm9yIGVzdGFibGlzaGVkIGNvbm5lY3Rpb24gZmFpbGVkIGJlY2F1c2UgY29ubmVjdGVkIGhvc3QgIgorICAgICAgICAgICAgICAgImhhcyBmYWlsZWQgdG8gcmVzcG9uZCIpLAorCisgICAgLyogV1NBRUNPTk5SRUZVU0VEIDEwMDYxICovCisgICAgbmd4X3N0cmluZygiTm8gY29ubmVjdGlvbiBjb3VsZCBiZSBtYWRlIGJlY2F1c2UgdGhlIHRhcmdldCBtYWNoaW5lICIKKyAgICAgICAgICAgICAgICJhY3RpdmVseSByZWZ1c2VkIGl0IikKIH07CiAKIAotaW50IG5neF9zdHJlcnJvcl9yKG5neF9lcnJfdCBlcnIsIGNoYXIgKmVycnN0ciwgc2l6ZV90IHNpemUpCit1X2NoYXIgKm5neF9zdHJlcnJvcl9yKG5neF9lcnJfdCBlcnIsIHVfY2hhciAqZXJyc3RyLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpbnQgICAgICAgIG47CiAgICAgdV9pbnQgICAgICBsZW47CiAgICAgbmd4X2Vycl90ICBmb3JtYXRfZXJyb3I7CiAKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgIHJldHVybiBlcnJzdHI7CisgICAgfQorCiAgICAgbGVuID0gRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTQogICAgICAgICAgICAgICAgICAgICAgICAgfEZPUk1BVF9NRVNTQUdFX0lHTk9SRV9JTlNFUlRTLAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUFLRUxBTkdJRChMQU5HX05FVVRSQUwsIFNVQkxBTkdfREVGQVVMVCksCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJzdHIsIHNpemUsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgZXJyc3RyLCBzaXplLCBOVUxMKTsKIAogICAgIGlmIChsZW4gPT0gMCkgewogICAgICAgICBmb3JtYXRfZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKIAogICAgICAgICBpZiAoZm9ybWF0X2Vycm9yID09IEVSUk9SX01SX01JRF9OT1RfRk9VTkQpIHsKLSAgICAgICAgICAgIG4gPSBlcnIgLSBXU0FCQVNFRVJSIC0gMjI7CisgICAgICAgICAgICBuID0gZXJyIC0gV1NBRUlOVkFMOwogCi0gICAgICAgICAgICBpZiAobiA+PSAwICYmIG4gPD0gMzUpIHsKKyAgICAgICAgICAgIGlmIChuID49IDAgJiYgbiA8PSBXU0FFQ09OTlJFRlVTRUQgLSBXU0FFSU5WQUwpIHsKICAgICAgICAgICAgICAgICBsZW4gPSB3c2FfZXJyb3JzW25dLmxlbjsKIAogICAgICAgICAgICAgICAgIGlmIChsZW4pIHsKQEAgLTgxLDIxICsxMTgsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIG5neF9tZW1jcHkoZXJyc3RyLCB3c2FfZXJyb3JzW25dLmRhdGEsIGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZW47CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycnN0ciArIGxlbjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBsZW4gPSBuZ3hfc25wcmludGYoZXJyc3RyLCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvcm1hdE1lc3NhZ2UoKSBlcnJvcjooJWQpIiwgZm9ybWF0X2Vycm9yKTsKLSAgICAgICAgcmV0dXJuIGxlbjsKLQorICAgICAgICByZXR1cm4gbmd4X3NucHJpbnRmKGVycnN0ciwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRm9ybWF0TWVzc2FnZSgpIGVycm9yOiglZCkiLCBmb3JtYXRfZXJyb3IpOwogICAgIH0KIAogICAgIC8qIHJlbW92ZSAiLlxyXG5cMCIgKi8KICAgICB3aGlsZSAoZXJyc3RyW2xlbl0gPT0gJ1wwJyB8fCBlcnJzdHJbbGVuXSA9PSBDUgogICAgICAgICAgICB8fCBlcnJzdHJbbGVuXSA9PSBMRiB8fCBlcnJzdHJbbGVuXSA9PSAnLicpCisgICAgewogICAgICAgICAtLWxlbjsKKyAgICB9CiAKLSAgICByZXR1cm4gKytsZW47CisgICAgcmV0dXJuICZlcnJzdHJbKytsZW5dOwogfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9lcnJuby5oIGIvc3JjL29zL3dpbjMyL25neF9lcnJuby5oCmluZGV4IGY2MGVhNzQuLjg2M2RjZTggMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmgKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgTkdYX0VBTFJFQURZICAgICAgICAgICAgICAgV1NBRUFMUkVBRFkKICNkZWZpbmUgTkdYX0VJTlZBTCAgICAgICAgICAgICAgICAgV1NBRUlOVkFMCiAKLWludCBuZ3hfc3RyZXJyb3JfcihuZ3hfZXJyX3QgZXJyLCBjaGFyICplcnJzdHIsIHNpemVfdCBzaXplKTsKK3VfY2hhciAqbmd4X3N0cmVycm9yX3Iobmd4X2Vycl90IGVyciwgdV9jaGFyICplcnJzdHIsIHNpemVfdCBzaXplKTsKIAogCiAjZW5kaWYgLyogX05HWF9FUlJOT19IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5jIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCmluZGV4IGRlYTMxMDYuLmZmZDUyYzkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYworKysgYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKQEAgLTE4LDE5ICsxOCwyMCBAQAogICAgIGlmIChuZ3hfd2luMzJfdmVyc2lvbiA8IE5HWF9XSU5fTlQpIHsKIAogICAgICAgICAvKgotICAgICAgICAgKiBpbiBXaW45WCB0aGUgb3ZlcmxhcHBlZCBwb2ludGVyIG11c3QgYmUgTlVMTAotICAgICAgICAgKiBzbyB3ZSBuZWVkIHRvIHVzZSBTZXRGaWxlUG9pbnRlcigpIHRvIHNldCB0aGUgb2Zmc2V0CisgICAgICAgICAqIHVuZGVyIFdpbjlYIHRoZSBvdmVybGFwcGVkIHBvaW50ZXIgbXVzdCBiZSBOVUxMCisgICAgICAgICAqIHNvIHdlIGhhdmUgdG8gdXNlIFNldEZpbGVQb2ludGVyKCkgdG8gc2V0IHRoZSBvZmZzZXQKICAgICAgICAgICovCiAKICAgICAgICAgaWYgKGZpbGUtPm9mZnNldCAhPSBvZmZzZXQpIHsKIAogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHRoZSBtYXhpbXVtIGZpbGUgc2l6ZSBvbiBGQVQxNiBpcyAyRywgYnV0IG9uIEZBVDMyCi0gICAgICAgICAgICAgKiB0aGUgc2l6ZSBpcyA0RyBzbyB3ZSBuZWVkIHRvIHVzZSBoaWdoX29mZnNldAorICAgICAgICAgICAgICogdGhlIG1heGltdW0gZmlsZSBzaXplIG9uIHRoZSBGQVQxNiBpcyAyRywgYnV0IG9uIHRoZSBGQVQzMgorICAgICAgICAgICAgICogdGhlIHNpemUgaXMgNEcgc28gd2UgaGF2ZSB0byB1c2UgdGhlIGhpZ2hfb2Zmc2V0CiAgICAgICAgICAgICAgKiBiZWNhdXNlIGEgc2luZ2xlIG9mZnNldCBpcyBzaWduZWQgdmFsdWUKICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBoaWdoX29mZnNldCA9IChsb25nKSAob2Zmc2V0ID4+IDMyKTsKKwogICAgICAgICAgICAgaWYgKFNldEZpbGVQb2ludGVyKGZpbGUtPmZkLCAobG9uZykgb2Zmc2V0LCAmaGlnaF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9CRUdJTikgPT0gSU5WQUxJRF9TRVRfRklMRV9QT0lOVEVSKQogICAgICAgICAgICAgewpAQCAtODEsMTUgKzgyLDE1IEBACiAgICAgaWYgKG5neF93aW4zMl92ZXJzaW9uIDwgTkdYX1dJTl9OVCkgewogCiAgICAgICAgIC8qCi0gICAgICAgICAqIGluIFdpbjlYIHRoZSBvdmVybGFwcGVkIHBvaW50ZXIgbXVzdCBiZSBOVUxMCi0gICAgICAgICAqIHNvIHdlIG5lZWQgdG8gdXNlIFNldEZpbGVQb2ludGVyKCkgdG8gc2V0IHRoZSBvZmZzZXQKKyAgICAgICAgICogdW5kZXIgV2luOVggdGhlIG92ZXJsYXBwZWQgcG9pbnRlciBtdXN0IGJlIE5VTEwKKyAgICAgICAgICogc28gd2UgaGF2ZSB0byB1c2UgU2V0RmlsZVBvaW50ZXIoKSB0byBzZXQgdGhlIG9mZnNldAogICAgICAgICAgKi8KIAogICAgICAgICBpZiAoZmlsZS0+b2Zmc2V0ICE9IG9mZnNldCkgewogCiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogdGhlIG1heGltdW0gZmlsZSBzaXplIG9uIEZBVDE2IGlzIDJHLCBidXQgb24gRkFUMzIKLSAgICAgICAgICAgICAqIHRoZSBzaXplIGlzIDRHIHNvIHdlIG5lZWQgdG8gdXNlIGhpZ2hfb2Zmc2V0CisgICAgICAgICAgICAgKiB0aGUgbWF4aW11bSBmaWxlIHNpemUgb24gdGhlIEZBVDE2IGlzIDJHLCBidXQgb24gdGhlIEZBVDMyCisgICAgICAgICAgICAgKiB0aGUgc2l6ZSBpcyA0RyBzbyB3ZSBoYXZlIHRvIHVzZSBoaWdoX29mZnNldAogICAgICAgICAgICAgICogYmVjYXVzZSBhIHNpbmdsZSBvZmZzZXQgaXMgc2lnbmVkIHZhbHVlCiAgICAgICAgICAgICAgKi8KIApAQCAtMTg5LDggKzE5MCw3IEBACiAgICAgZG8gewogICAgICAgICBudW0gPSBuZ3hfbmV4dF90ZW1wX251bWJlcihjb2xsaXNpb24pOwogCi0gICAgICAgIG5neF9zbnByaW50ZigoY2hhciAqKSBuYW1lICsgdG8tPmxlbiwgMSArIDEwICsgMSArIHNpemVvZigiREVMRVRFIiksCi0gICAgICAgICAgICAgICAgICAgICAiLiUwMTB1LkRFTEVURSIsIG51bSk7CisgICAgICAgIG5neF9zcHJpbnRmKG5hbWUgKyB0by0+bGVuLCAiLiUwMTB1LkRFTEVURSIsIG51bSk7CiAKICAgICAgICAgaWYgKE1vdmVGaWxlKChjb25zdCBjaGFyICopIHRvLT5kYXRhLCAoY29uc3QgY2hhciAqKSBuYW1lKSA9PSAwKSB7CiAgICAgICAgICAgICBjb2xsaXNpb24gPSAxOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9ndWkuYyBiL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY3MzgyMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmMKQEAgLTAsMCArMSw4NSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKKyNkZWZpbmUgTkdYX01BWF9URVhUICAgMjA0OAorCisKK3ZvaWQgbmd4X21lc3NhZ2VfYm94KGNoYXIgKnRpdGxlLCBuZ3hfdWludF90IHR5cGUsIG5neF9lcnJfdCBlcnIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIHVfY2hhciAgIHRleHRbTkdYX01BWF9URVhUXSwgKnAsICpsYXN0OworCisgICAgbGFzdCA9IHRleHQgKyBOR1hfTUFYX1RFWFQ7CisKKyAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgIHAgPSBuZ3hfdnNucHJpbnRmKHRleHQsIE5HWF9NQVhfVEVYVCwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICBpZiAoZXJyKSB7CisKKyAgICAgICAgaWYgKHAgPiBsYXN0IC0gNTApIHsKKworICAgICAgICAgICAgLyogbGVhdmUgYSBzcGFjZSBmb3IgYW4gZXJyb3IgY29kZSAqLworCisgICAgICAgICAgICBwID0gbGFzdCAtIDUwOworICAgICAgICAgICAgKnArKyA9ICcuJzsKKyAgICAgICAgICAgICpwKysgPSAnLic7CisgICAgICAgICAgICAqcCsrID0gJy4nOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh1bnNpZ25lZCkgZXJyID49IDB4ODAwMDAwMDApIHsKKyAgICAgICAgICAgIHAgPSBuZ3hfc25wcmludGYocCwgbGFzdCAtIHAsICIgKCVYZDogIiwgZXJyKTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcCA9IG5neF9zbnByaW50ZihwLCBsYXN0IC0gcCwgIiAoJWQ6ICIsIGVycik7CisgICAgICAgIH0KKworICAgICAgICBwID0gbmd4X3N0cmVycm9yX3IoZXJyLCBwLCBsYXN0IC0gcCk7CisKKyAgICAgICAgaWYgKHAgPCBsYXN0KSB7CisgICAgICAgICAgICAqcCsrID0gJyknOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHAgPT0gbGFzdCkgeworICAgICAgICBwLS07CisgICAgfQorCisgICAgKnAgPSAnXDAnOworCisgICAgTWVzc2FnZUJveChOVUxMLCAoY2hhciAqKSB0ZXh0LCB0aXRsZSwgdHlwZSk7Cit9CisKKworbmd4X2ludF90IG5neF9zeXN0ZW1fdHJheV9pY29uKEhXTkQgd2luZG93LCB1X2xvbmcgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJQ09OIGljb24sIHVfY2hhciAqdGlwKQoreworICAgIE5PVElGWUlDT05EQVRBICBuaTsKKworICAgIG5pLmNiU2l6ZSA9IHNpemVvZihOT1RJRllJQ09OREFUQSk7CisgICAgbmkuaFduZCA9IHdpbmRvdzsKKyAgICBuaS51SUQgPSAwOworICAgIG5pLnVGbGFncyA9IE5JRl9NRVNTQUdFfE5JRl9JQ09OfE5JRl9USVA7CisgICAgbmkudUNhbGxiYWNrTWVzc2FnZSA9IE5HWF9XTV9UUkFZOworICAgIG5pLmhJY29uID0gaWNvbjsKKworICAgIGlmICh0aXApIHsKKyAgICAgICAgbmd4X2NweXN0cm4oKHVfY2hhciAqKSBuaS5zelRpcCwgdGlwLCA2NCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmkuc3pUaXBbMF0gPSAnXDAnOworICAgIH0KKworICAgIGlmIChTaGVsbF9Ob3RpZnlJY29uKGFjdGlvbiwgJm5pKSA9PSAwKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZ3VpLmggYi9zcmMvb3Mvd2luMzIvbmd4X2d1aS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMmZkOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X2d1aS5oCkBAIC0wLDAgKzEsMjcgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpZm5kZWYgX05HWF9HVUlfSF9JTkNMVURFRF8KKyNkZWZpbmUgX05HWF9HVUlfSF9JTkNMVURFRF8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisKKworI2RlZmluZSBOR1hfV01fVFJBWSAgICBXTV9VU0VSCisjZGVmaW5lIE5HWF9XTV9FWElUICAgIFdNX1VTRVIgKyAxCisjZGVmaW5lIE5HWF9XTV9BQk9VVCAgIFdNX1VTRVIgKyAyCisKKwordm9pZCBuZ3hfbWVzc2FnZV9ib3goY2hhciAqdGl0bGUsIG5neF91aW50X3QgdHlwZSwgbmd4X2Vycl90IGVyciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworbmd4X2ludF90IG5neF9zeXN0ZW1fdHJheV9pY29uKEhXTkQgd2luZG93LCB1X2xvbmcgYWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhJQ09OIGljb24sIHVfY2hhciAqdGlwKTsKKworCisjZW5kaWYgLyogX05HWF9HVUlfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfb3MuaCBiL3NyYy9vcy93aW4zMi9uZ3hfb3MuaAppbmRleCA5OGM4ZTE1Li5jMjdmOGE4IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X29zLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9vcy5oCkBAIC0xMCw2ICsxMCw3IEBACiAKICNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CiAjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfZ3VpLmg+CiAKICNkZWZpbmUgTkdYX0lPX1NFTkRGSUxFICAgIDEKICNkZWZpbmUgTkdYX0lPX1pFUk9DT1BZICAgIDIKQEAgLTU2LDYgKzU3LDcgQEAKIAogZXh0ZXJuIG5neF9vc19pb190ICBuZ3hfb3NfaW87CiBleHRlcm4gbmd4X3VpbnRfdCAgIG5neF9uY3B1OworZXh0ZXJuIG5neF91aW50X3QgICBuZ3hfbWF4X3dzYWJ1ZnM7CiBleHRlcm4gbmd4X2ludF90ICAgIG5neF9tYXhfc29ja2V0czsKIGV4dGVybiBuZ3hfdWludF90ICAgbmd4X2luaGVyaXRlZF9ub25ibG9ja2luZzsKIGV4dGVybiBuZ3hfdWludF90ICAgbmd4X3dpbjMyX3ZlcnNpb247CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3MuaCBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCmluZGV4IGI5YjRhZWIuLmEyODJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKIG5neF9waWRfdCBuZ3hfZXhlY3V0ZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9leGVjX2N0eF90ICpjdHgpOwogCisjZGVmaW5lIG5neF9kZWJ1Z19wb2ludCgpCiAjZGVmaW5lIG5neF9zY2hlZF95aWVsZCgpICBTbGVlcCgwKQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggODQzYzMxMS4uZTA2MzVhNSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTcsOCArNywxMyBAQAogI2luY2x1ZGUgPG5neF9jb25maWcuaD4KICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogI2luY2x1ZGUgPG5neF9ldmVudC5oPgorI2luY2x1ZGUgPG5naW54Lmg+CiAKIAorc3RhdGljIHZvaWQgKm5neF93b3JrZXJfdGhyZWFkX2N5Y2xlKHZvaWQgKmRhdGEpOworc3RhdGljIGxvbmcgX19zdGRjYWxsIG5neF93aW5kb3dfcHJvY2VkdXJlKEhXTkQgd2luZG93LCB1X2ludCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IHdwYXJhbSwgbG9uZyBscGFyYW0pOworCiAjaWYgMAogbmd4X3BpZF90ICAgICBuZ3hfbmV3X2JpbmFyeTsKIApAQCAtMzcsNiArNDIsOCBAQAogI2VuZGlmCiAKIAorc3RhdGljIEhNRU5VICBuZ3hfbWVudTsKKwogCiB2b2lkIG5neF9tYXN0ZXJfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CkBAIC00OCw3ICs1NSwxNyBAQAogCiB2b2lkIG5neF9zaW5nbGVfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7Ci0gICAgbmd4X2ludF90ICBpOworICAgIGludCAgICAgICAgICAgICAgIHJjOworICAgIG5neF9pbnRfdCAgICAgICAgIGk7CisgICAgbmd4X2Vycl90ICAgICAgICAgZXJyOworICAgIG5neF90aWRfdCAgICAgICAgIHRpZDsKKyAgICBNU0cgICAgICAgICAgICAgICBtZXNzYWdlOworICAgIEhXTkQgICAgICAgICAgICAgIHdpbmRvdzsKKyAgICBITUVOVSAgICAgICAgICAgICBtZW51OworICAgIEhJQ09OICAgICAgICAgICAgIGljb24sdHJheTsKKyAgICBXTkRDTEFTUyAgICAgICAgICB3YzsKKyAgICBISU5TVEFOQ0UgICAgICAgICBpbnN0YW5jZTsKKyAgICBuZ3hfY29yZV9jb25mX3QgICpjY2Y7CiAKICAgICBuZ3hfaW5pdF90ZW1wX251bWJlcigpOwogCkBAIC02MSw5ICs3OCwxOTcgQEAKICAgICAgICAgfQogICAgIH0KIAorCisgICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfY29yZV9tb2R1bGUpOworCisgICAgaWYgKG5neF9pbml0X3RocmVhZHMobmd4X3RocmVhZHNfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NmLT50aHJlYWRfc3RhY2tfc2l6ZSwgY3ljbGUpID09IE5HWF9FUlJPUikKKyAgICB7ICAgICAKKyAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKyAgICBlcnIgPSBuZ3hfdGhyZWFkX2tleV9jcmVhdGUoJm5neF9jb3JlX3Rsc19rZXkpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfdGhyZWFkX2tleV9jcmVhdGVfbiAiIGZhaWxlZCIpOworICAgICAgICAvKiBmYXRhbCAqLworICAgICAgICBleGl0KDIpOworICAgIH0KKworCisgICAgaW5zdGFuY2UgPSBHZXRNb2R1bGVIYW5kbGUoTlVMTCk7CisKKyAgICBpY29uID0gTG9hZEljb24oaW5zdGFuY2UsICJuZ2lueCIpOworICAgIGlmIChpY29uID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIkxvYWRJY29uKFwibmdpbnhcIikgZmFpbGVkIik7CisgICAgICAgIC8qIGZhdGFsICovCisgICAgICAgIGV4aXQoMik7CisgICAgfQorCisgICAgdHJheSA9IExvYWRJY29uKGluc3RhbmNlLCAidHJheSIpOworICAgIGlmIChpY29uID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIkxvYWRJY29uKFwidHJheVwiKSBmYWlsZWQiKTsKKyAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKyAgICBtZW51ID0gTG9hZE1lbnUoaW5zdGFuY2UsICJuZ2lueCIpOworICAgIGlmIChtZW51ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIkxvYWRNZW51KCkgZmFpbGVkIik7CisgICAgICAgIC8qIGZhdGFsICovCisgICAgICAgIGV4aXQoMik7CisgICAgfQorCisgICAgbmd4X21lbnUgPSBHZXRTdWJNZW51KG1lbnUsIDApOworICAgIGlmIChuZ3hfbWVudSA9PSBOVUxMKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICJHZXRTdWJNZW51KCkgZmFpbGVkIik7CisgICAgICAgIC8qIGZhdGFsICovCisgICAgICAgIGV4aXQoMik7CisgICAgfQorCisKKyAgICB3Yy5zdHlsZSA9IENTX0hSRURSQVd8Q1NfVlJFRFJBVzsgCisgICAgd2MubHBmblduZFByb2MgPSBuZ3hfd2luZG93X3Byb2NlZHVyZTsKKyAgICB3Yy5jYkNsc0V4dHJhID0gMDsKKyAgICB3Yy5jYlduZEV4dHJhID0gMDsKKyAgICB3Yy5oSW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICB3Yy5oSWNvbiA9IGljb247CisgICAgd2MuaEN1cnNvciA9IE5VTEw7CisgICAgd2MuaGJyQmFja2dyb3VuZCA9IE5VTEw7CisgICAgd2MubHBzek1lbnVOYW1lID0gIE5VTEw7CisgICAgd2MubHBzekNsYXNzTmFtZSA9ICJuZ2lueCI7CisKKyAgICBpZiAoUmVnaXN0ZXJDbGFzcygmd2MpID09IDApIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIlJlZ2lzdGVyQ2xhc3MoKSBmYWlsZWQiKTsKKyAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKworICAgIHdpbmRvdyA9IENyZWF0ZVdpbmRvdygibmdpbngiLCAibmdpbngiLCBXU19PVkVSTEFQUEVEV0lORE9XLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICBDV19VU0VERUZBVUxULCBDV19VU0VERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBpbnN0YW5jZSwgTlVMTCk7CisKKyAgICBpZiAod2luZG93ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIkNyZWF0ZVdpbmRvdygpIGZhaWxlZCIpOworICAgICAgICAvKiBmYXRhbCAqLworICAgICAgICBleGl0KDIpOworICAgIH0KKworCisgICAgaWYgKG5neF9zeXN0ZW1fdHJheV9pY29uKHdpbmRvdywgTklNX0FERCwgdHJheSwgKHVfY2hhciAqKSAiIG5naW54IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICJTaGVsbF9Ob3RpZnlJY29uKE5JTV9BREQpIGZhaWxlZCIpOworICAgICAgICAvKiBmYXRhbCAqLworICAgICAgICBleGl0KDIpOworICAgIH0KKworCisgICAgaWYgKG5neF9jcmVhdGVfdGhyZWFkKCZ0aWQsIG5neF93b3JrZXJfdGhyZWFkX2N5Y2xlLCBOVUxMLCBjeWNsZS0+bG9nKSAhPSAwKQorICAgIHsKKyAgICAgICAgLyogZmF0YWwgKi8KKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICByYyA9IEdldE1lc3NhZ2UoJm1lc3NhZ2UsIE5VTEwsIDAsIDApOworCisgICAgICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRNZXNzYWdlKCkgZmFpbGVkIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CisKKyAgICAgICAgVHJhbnNsYXRlTWVzc2FnZSgmbWVzc2FnZSk7CisgICAgICAgIERpc3BhdGNoTWVzc2FnZSgmbWVzc2FnZSk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkICpuZ3hfd29ya2VyX3RocmVhZF9jeWNsZSh2b2lkICpkYXRhKQoreworICAgIG5neF9jeWNsZV90ICAqY3ljbGU7CisKKyAgICBjeWNsZSA9IChuZ3hfY3ljbGVfdCAqKSBuZ3hfY3ljbGU7CisKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwgIndvcmtlciBjeWNsZSIpOwogCiAgICAgICAgIG5neF9wcm9jZXNzX2V2ZW50cyhjeWNsZSk7CiAgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIGxvbmcgX19zdGRjYWxsIG5neF93aW5kb3dfcHJvY2VkdXJlKEhXTkQgd2luZG93LCB1X2ludCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IHdwYXJhbSwgbG9uZyBscGFyYW0pCit7CisgICAgUE9JTlQgIG1vdXNlOworCisgICAgc3dpdGNoIChtZXNzYWdlKSB7CisKKyAgICBjYXNlIE5HWF9XTV9UUkFZOgorICAgICAgICBpZiAobHBhcmFtID09IFdNX1JCVVRUT05ET1dOKSB7CisgICAgICAgICAgICBpZiAoR2V0Q3Vyc29yUG9zKCZtb3VzZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbmd4X2N5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRDdXJzb3JQb3MoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFNldEZvcmVncm91bmRXaW5kb3cod2luZG93KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBuZ3hfY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNldEZvcmVncm91bmRXaW5kb3coKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFRyYWNrUG9wdXBNZW51KG5neF9tZW51LCBUUE1fUklHSFRCVVRUT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2UueCwgbW91c2UueSwgMCwgd2luZG93LCBOVUxMKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbmd4X2N5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFja1BvcHVwTWVudSgpIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIFdNX0NPTU1BTkQ6CisgICAgICAgIGlmICh3cGFyYW0gPT0gTkdYX1dNX0FCT1VUKSB7CisgICAgICAgICAgICBuZ3hfbWVzc2FnZV9ib3goIm5naW54IiwgTUJfT0ssIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdJTlhfVkVSIENSTEYgIihDKSAyMDAyLTIwMDQgSWdvciBTeXNvZXYiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHdwYXJhbSA9PSBOR1hfV01fRVhJVCkgeworICAgICAgICAgICAgaWYgKG5neF9zeXN0ZW1fdHJheV9pY29uKHdpbmRvdywgTklNX0RFTEVURSwgTlVMTCwgTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG5neF9jeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2hlbGxfTm90aWZ5SWNvbihOSU1fREVMRVRFKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFBvc3RRdWl0TWVzc2FnZSgwKTsKKworICAgICAgICByZXR1cm4gMDsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBEZWZXaW5kb3dQcm9jKHdpbmRvdywgbWVzc2FnZSwgd3BhcmFtLCBscGFyYW0pOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmggYi9zcmMvb3Mvd2luMzIvbmd4X3NvY2tldC5oCmluZGV4IDRjZTYwYTcuLmQ0OWFkMmMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfc29ja2V0LmgKKysrIGIvc3JjL29zL3dpbjMyL25neF9zb2NrZXQuaApAQCAtMTksMTIgKzE5LDggQEAKIHR5cGVkZWYgaW50ICAgICBzb2NrbGVuX3Q7CiAKIAotI2RlZmluZSBuZ3hfc29ja2V0KGFmLCB0eXBlLCBwcm90bywgZmxhZ3MpICAgc29ja2V0KGFmLCB0eXBlLCBwcm90bykKLQotI2lmIDAKLSNkZWZpbmUgbmd4X3NvY2tldChhZiwgdHlwZSwgcHJvdG8sIGZsYWdzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFdTQVNvY2tldChhZiwgdHlwZSwgcHJvdG8sIE5VTEwsIDAsIGZsYWdzKQotI2VuZGlmCisjZGVmaW5lIG5neF9zb2NrZXQoYWYsIHR5cGUsIHByb3RvKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgIFdTQVNvY2tldChhZiwgdHlwZSwgcHJvdG8sIE5VTEwsIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpCiAKICNkZWZpbmUgbmd4X3NvY2tldF9uICAgICAgICAiV1NBU29ja2V0KCkiCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmMgYi9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYWUwZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5jCkBAIC0wLDAgKzEsNjggQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKworCituZ3hfaW50X3QgICAgICBuZ3hfdGhyZWFkc19uOworCisKK3N0YXRpYyBzaXplX3QgIHN0YWNrX3NpemU7CisKKworbmd4X2Vycl90IG5neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLCB2b2lkKiAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICBuZ3hfZXJyX3QgIGVycjsKKworICAgICp0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgc3RhY2tfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChMUFRIUkVBRF9TVEFSVF9ST1VUSU5FKSBmdW5jLCBhcmcsIDAsIE5VTEwpOworCisgICAgaWYgKCp0aWQgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlcnIgPSBuZ3hfZXJybm87CisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIGVyciwgIkNyZWF0ZVRocmVhZCgpIGZhaWxlZCIpOworICAgIHJldHVybiBlcnI7Cit9CisKKworbmd4X2ludF90IG5neF9pbml0X3RocmVhZHMoaW50IG4sIHNpemVfdCBzaXplLCBuZ3hfY3ljbGVfdCAqY3ljbGUpCit7CisgICAgc3RhY2tfc2l6ZSA9IHNpemU7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK25neF9lcnJfdCBuZ3hfdGhyZWFkX2tleV9jcmVhdGUobmd4X3Rsc19rZXlfdCAqa2V5KQoreworICAgICprZXkgPSBUbHNBbGxvYygpOworCisgICAgaWYgKCprZXkgPT0gVExTX09VVF9PRl9JTkRFWEVTKSB7CisgICAgICAgIHJldHVybiBuZ3hfZXJybm87CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKworbmd4X2Vycl90IG5neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90ICprZXksIHZvaWQgKmRhdGEpCit7CisgICAgaWYgKFRsc1NldFZhbHVlKCprZXksIGRhdGEpID09IDApIHsKKyAgICAgICAgcmV0dXJuIG5neF9lcnJubzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCituZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpCit7CisgICAgcmV0dXJuIChuZ3hfbXV0ZXhfdCAqKSAxOworfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF90aHJlYWQuaCBiL3NyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmgKaW5kZXggYjNiNmU2Ny4uNWIzYzRkYSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF90aHJlYWQuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5oCkBAIC0xMiwyMSArMTIsNDYgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLSNpZiAoTkdYX1RIUkVBRFMpCit0eXBlZGVmIEhBTkRMRSAgbmd4X3RpZF90OwordHlwZWRlZiBEV09SRCAgIG5neF90bHNfa2V5X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEhBTkRMRSAgICAgIG11dGV4OworICAgIG5neF9sb2dfdCAgICpsb2c7Cit9IG5neF9tdXRleF90OworCisKK25neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpOworbmd4X2ludF90IG5neF9pbml0X3RocmVhZHMoaW50IG4sIHNpemVfdCBzaXplLCBuZ3hfY3ljbGVfdCAqY3ljbGUpOworCituZ3hfZXJyX3Qgbmd4X3RocmVhZF9rZXlfY3JlYXRlKG5neF90bHNfa2V5X3QgKmtleSk7CisjZGVmaW5lIG5neF90aHJlYWRfa2V5X2NyZWF0ZV9uICAgICAiVGxzQWxsb2MoKSIKK25neF9lcnJfdCBuZ3hfdGhyZWFkX3NldF90bHMobmd4X3Rsc19rZXlfdCAqa2V5LCB2b2lkICpkYXRhKTsKKyNkZWZpbmUgbmd4X3RocmVhZF9zZXRfdGxzX24gICAgICAgICAiVGxzU2V0VmFsdWUoKSIKKyNkZWZpbmUgbmd4X3RocmVhZF9nZXRfdGxzICAgICAgICAgICBUbHNHZXRWYWx1ZQorCiAKICNkZWZpbmUgbmd4X3RocmVhZF92b2xhdGlsZSAgdm9sYXRpbGUKIAotI2Vsc2UgLyogIU5HWF9USFJFQURTICovCisjZGVmaW5lIG5neF9sb2dfdGlkICAgICAgICAgICAgICAgICBHZXRDdXJyZW50VGhyZWFkSWQoKQorI2RlZmluZSBOR1hfVElEX1RfRk1UICAgICAgICAgICAgICAgIiV1ZCIKIAotI2RlZmluZSBuZ3hfdGhyZWFkX3ZvbGF0aWxlCiAKLSNkZWZpbmUgbmd4X2xvZ190aWQgIDAKLSNkZWZpbmUgVElEX1RfRk1UICAgICIlZCIKK25neF9tdXRleF90ICpuZ3hfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZywgbmd4X3VpbnRfdCBmbGFncyk7CiAKLSNkZWZpbmUgbmd4X211dGV4X2xvY2sobSkgICAgIE5HWF9PSworCisvKiBTVFVCICovCisjZGVmaW5lIE5HWF9NVVRFWF9MSUdIVCAgICAgICAgICAgICAwCisKKyNkZWZpbmUgbmd4X211dGV4X2xvY2sobSkgICAgICAgICAgIE5HWF9PSworI2RlZmluZSBuZ3hfbXV0ZXhfdHJ5bG9jayhtKSAgICAgICAgTkdYX09LCiAjZGVmaW5lIG5neF9tdXRleF91bmxvY2sobSkKKy8qICovCiAKLSNlbmRpZgorCitleHRlcm4gbmd4X2ludF90ICBuZ3hfdGhyZWFkc19uOwogCiAKICNlbmRpZiAvKiBfTkdYX1RIUkVBRF9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaCBiL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKaW5kZXggYTZjMzM2ZC4uZTdkMzA4NiAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCkBAIC04LDggKzgsNiBAQAogI2RlZmluZSBfTkdYX1dJTjMyX0NPTkZJR19IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgV0lOMzIgICAgICAgMQotCiAjZGVmaW5lIFNUUklDVAogI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAKQEAgLTI1LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjaW5jbHVkZSA8bXN3c29jay5oPgorI2luY2x1ZGUgPHNoZWxsYXBpLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+ICAgIC8qIG9mZnNldG9mKCkgKi8KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtOTYsOCArOTUsMTAgQEAKIAogI2lmZGVmIF9NU0NfVkVSCiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgIHVpbnQzMl90OwordHlwZWRlZiBfX2ludDMyICAgICAgICAgICBpbnQzMl90OwogI2Vsc2UgLyogX19XQVRDT01DX18gKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgdWludDMyX3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICAgIGludDMyX3Q7CiAjZW5kaWYKIAogdHlwZWRlZiBfX2ludDY0ICAgICAgICAgICBpbnQ2NF90OwpAQCAtMTE1LDE3ICsxMTYsMTMgQEAKIAogI2RlZmluZSBUSU1FX1RfTEVOICAgICAgICBzaXplb2YoIi0yMTQ3NDgzNjQ4IikgLSAxCiAKLSNkZWZpbmUgT0ZGX1RfRk1UICAgICAgICAgIiVJNjRkIgotI2RlZmluZSBTSVpFX1RfRk1UICAgICAgICAiJWQiCi0jZGVmaW5lIFNJWkVfVF9YX0ZNVCAgICAgICIleCIKLSNkZWZpbmUgUElEX1RfRk1UICAgICAgICAgIiVkIgotI2RlZmluZSBUSU1FX1RfRk1UICAgICAgICAiJWx1IgotI2RlZmluZSBQVFJfRk1UICAgICAgICAgICAiJTA4WCIKLQogCiAjZGVmaW5lIE5HWF9XSU5fTlQgICAgICAgIDIwMDAwMAogCiAKKyNkZWZpbmUgTkdYX1RIUkVBRFMgICAgICAgMQorCisKICNpZm5kZWYgSEFWRV9JTkhFUklURURfTk9OQkxPQ0sKICNkZWZpbmUgSEFWRV9JTkhFUklURURfTk9OQkxPQ0sgIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF93aW4zMl9pbml0LmMgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYwppbmRleCBlYTFjZmQxLi5jYjhjOTMxIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYworKysgYi9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2luaXQuYwpAQCAtMTAsNiArMTAsNyBAQAogCiBuZ3hfdWludF90ICBuZ3hfd2luMzJfdmVyc2lvbjsKIG5neF91aW50X3QgIG5neF9uY3B1Oworbmd4X3VpbnRfdCAgbmd4X21heF93c2FidWZzOwogbmd4X2ludF90ICAgbmd4X21heF9zb2NrZXRzOwogbmd4X3VpbnRfdCAgbmd4X2luaGVyaXRlZF9ub25ibG9ja2luZyA9IDE7CiBuZ3hfZmRfdCAgICBuZ3hfc3RkZXJyX2ZpbGVubzsKQEAgLTMxLDYgKzMyLDkgQEAKIH0gbmd4X29zdmlleF9zdHViX3Q7CiAKIAorc3RhdGljIHVfaW50ICAgICAgICAgICAgICAgb3N2aWV4Oworc3RhdGljIE9TVkVSU0lPTklORk9FWCAgICAgb3N2aTsKKwogLyogU2hvdWxkIHRoZXNlIHBvaW50ZXJzIGJlIHBlciBwcm90b2NvbCA/ICovCiBMUEZOX0FDQ0VQVEVYICAgICAgICAgICAgICBhY2NlcHRleDsKIExQRk5fR0VUQUNDRVBURVhTT0NLQUREUlMgIGdldGFjY2VwdGV4c29ja2FkZHJzOwpAQCAtNDMsMTMgKzQ3LDEwIEBACiAKIG5neF9pbnRfdCBuZ3hfb3NfaW5pdChuZ3hfbG9nX3QgKmxvZykKIHsKLSAgICB1X2ludCAgICAgICAgICAgICAgIG9zdmlleDsKLSAgICBEV09SRCAgICAgICAgICAgICAgIGJ5dGVzOwotICAgIFNPQ0tFVCAgICAgICAgICAgICAgczsKLSAgICBXU0FEQVRBICAgICAgICAgICAgIHdzZDsKLSAgICBTWVNURU1fSU5GTyAgICAgICAgIHNpOwotICAgIE9TVkVSU0lPTklORk9FWCAgICAgb3N2aTsKLSAgICBuZ3hfb3N2aWV4X3N0dWJfdCAgKm9zdmlleF9zdHViOworICAgIERXT1JEICAgICAgICBieXRlczsKKyAgICBTT0NLRVQgICAgICAgczsKKyAgICBXU0FEQVRBICAgICAgd3NkOworICAgIFNZU1RFTV9JTkZPICBzaTsKIAogICAgIC8qIGdldCBXaW5kb3dzIHZlcnNpb24gKi8KIApAQCAtOTAsNDMgKzkxLDYgQEAKICAgICBpZiAob3N2aWV4KSB7CiAgICAgICAgIG5neF93aW4zMl92ZXJzaW9uICs9IG9zdmkud1NlcnZpY2VQYWNrTWFqb3IgKiAxMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG9zdmkud1NlcnZpY2VQYWNrTWlub3I7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogdGhlIE1TVkMgNi4wIFNQMiBkZWZpbmVzIHdTdWl0ZU1hc2sgYW5kIHdQcm9kdWN0VHlwZQotICAgICAgICAgKiBhcyBXT1JEIHdSZXNlcnZlZFsyXQotICAgICAgICAgKi8KLSAgICAgICAgb3N2aWV4X3N0dWIgPSAobmd4X29zdmlleF9zdHViX3QgKikgJm9zdmkud1NlcnZpY2VQYWNrTWlub3I7Ci0KLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAiT1M6ICV1IGJ1aWxkOiV1LCBcIiVzXCIsIHN1aXRlOiV4LCB0eXBlOiV1IiwKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfd2luMzJfdmVyc2lvbiwgb3N2aS5kd0J1aWxkTnVtYmVyLCBvc3ZpLnN6Q1NEVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICBvc3ZpZXhfc3R1Yi0+d1N1aXRlTWFzaywgb3N2aWV4X3N0dWItPndQcm9kdWN0VHlwZSk7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAob3N2aS5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKLQotICAgICAgICAgICAgLyogV2luOXggYnVpbGQgKi8KLQotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwgIk9TOiAldSBidWlsZDoldS4ldS4ldSwgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3dpbjMyX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9zdmkuZHdCdWlsZE51bWJlciA+PiAyNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zdmkuZHdCdWlsZE51bWJlciA+PiAxNikgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICBvc3ZpLmR3QnVpbGROdW1iZXIgJiAweGZmZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9zdmkuc3pDU0RWZXJzaW9uKTsKLQotICAgICAgICB9IGVsc2UgewotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVkVSX1BMQVRGT1JNX1dJTjMyX05UCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogd2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IFZFUl9QTEFURk9STV9XSU4zMl9DRQotICAgICAgICAgICAgICogYW5kIHdlIGRvIG5vdCBzdXBwb3J0IFZFUl9QTEFURk9STV9XSU4zMnMgYXQgYWxsCi0gICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwgIk9TOiAldSBidWlsZDoldSwgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3dpbjMyX3ZlcnNpb24sIG9zdmkuZHdCdWlsZE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3N2aS5zekNTRFZlcnNpb24pOwotICAgICAgICB9CiAgICAgfQogCiAgICAgR2V0U3lzdGVtSW5mbygmc2kpOwpAQCAtMTQzLDE1ICsxMDcsMTkgQEAKICAgICB9CiAKICAgICBpZiAobmd4X3dpbjMyX3ZlcnNpb24gPCBOR1hfV0lOX05UKSB7CisgICAgICAgIG5neF9tYXhfd3NhYnVmcyA9IDE2OwogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAorICAgIC8qIFNUVUI6IG5neF91aW50X3QgbWF4ICovCisgICAgbmd4X21heF93c2FidWZzID0gMTAyNCAqIDEwMjQ7CisKICAgICAvKiBnZXQgQWNjZXB0RXgoKSwgR2V0QWNjZXB0RXhTb2NrQWRkcnMoKSBhbmQgVHJhbnNtaXRGaWxlKCkgYWRkcmVzc2VzICovCiAKLSAgICBzID0gbmd4X3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19JUCwgMCk7CisgICAgcyA9IG5neF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fSVApOwogICAgIGlmIChzID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbiAiICVzIGZhbGllZCIpOworICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbiAiIGZhbGllZCIpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIApAQCAtMTk0LDQgKzE2Miw0NiBAQAogCiB2b2lkIG5neF9vc19zdGF0dXMobmd4X2xvZ190ICpsb2cpCiB7CisgICAgbmd4X29zdmlleF9zdHViX3QgICpvc3ZpZXhfc3R1YjsKKworICAgIGlmIChvc3ZpZXgpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiB0aGUgTVNWQyA2LjAgU1AyIGRlZmluZXMgd1N1aXRlTWFzayBhbmQgd1Byb2R1Y3RUeXBlCisgICAgICAgICAqIGFzIFdPUkQgd1Jlc2VydmVkWzJdCisgICAgICAgICAqLworICAgICAgICBvc3ZpZXhfc3R1YiA9IChuZ3hfb3N2aWV4X3N0dWJfdCAqKSAmb3N2aS53U2VydmljZVBhY2tNaW5vcjsKKworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJPUzogJXVkIGJ1aWxkOiV1ZCwgXCIlc1wiLCBzdWl0ZTolWGQsIHR5cGU6JXVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfd2luMzJfdmVyc2lvbiwgb3N2aS5kd0J1aWxkTnVtYmVyLCBvc3ZpLnN6Q1NEVmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICBvc3ZpZXhfc3R1Yi0+d1N1aXRlTWFzaywgb3N2aWV4X3N0dWItPndQcm9kdWN0VHlwZSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAob3N2aS5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX1dJTkRPV1MpIHsKKworICAgICAgICAgICAgLyogV2luOXggYnVpbGQgKi8KKworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIk9TOiAldSBidWlsZDoldWQuJXVkLiV1ZCwgXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3dpbjMyX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdmkuZHdCdWlsZE51bWJlciA+PiAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zdmkuZHdCdWlsZE51bWJlciA+PiAxNikgJiAweGZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvc3ZpLmR3QnVpbGROdW1iZXIgJiAweGZmZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9zdmkuc3pDU0RWZXJzaW9uKTsKKworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVkVSX1BMQVRGT1JNX1dJTjMyX05UCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogd2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IFZFUl9QTEFURk9STV9XSU4zMl9DRQorICAgICAgICAgICAgICogYW5kIHdlIGRvIG5vdCBzdXBwb3J0IFZFUl9QTEFURk9STV9XSU4zMnMgYXQgYWxsCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGxvZywgMCwgIk9TOiAldWQgYnVpbGQ6JXVkLCBcIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfd2luMzJfdmVyc2lvbiwgb3N2aS5kd0J1aWxkTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvc3ZpLnN6Q1NEVmVyc2lvbik7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dzYXJlY3YuYyBiL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdi5jCmluZGV4IGJiMGU1NTYuLmFjN2E1YzQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdi5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdi5jCkBAIC0yNSw3ICsyNSw3IEBACiAgICAgcmMgPSBXU0FSZWN2KGMtPmZkLCB3c2FidWYsIDEsICZieXRlcywgJmZsYWdzLCBOVUxMLCBOVUxMKTsKIAogICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiV1NBUmVjdjogZmQ6JWQgcmM6JWQgJWQgb2YgJWQiLCBjLT5mZCwgcmMsIGJ5dGVzLCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAiV1NBUmVjdjogZmQ6JWQgcmM6JWQgJXVsIG9mICV6IiwgYy0+ZmQsIHJjLCBieXRlcywgc2l6ZSk7CiAKICAgICByZXYgPSBjLT5yZWFkOwogCkBAIC04NSw2ICs4NSwxMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJXU0FSZWN2IG92bHA6IGZkOiVkICV1bCBvZiAleiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgcmV2LT5hdmFpbGFibGUsIHNpemUpOworCiAgICAgICAgICAgICByZXR1cm4gcmV2LT5hdmFpbGFibGU7CiAgICAgICAgIH0KIApAQCAtOTUsNiArOTksOSBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCisgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIldTQVJlY3Y6IGZkOiVkICV1bCBvZiAleiIsIGMtPmZkLCBieXRlcywgc2l6ZSk7CisKICAgICAgICAgcmV0dXJuIGJ5dGVzOwogICAgIH0KIApAQCAtMTEwLDEyICsxMTcsMTUgQEAKICAgICByZXYtPmNvbXBsZXRlID0gMDsKIAogICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiV1NBUmVjdjogZmQ6JWQgcmM6JWQgJWQgb2YgJWQiLCBjLT5mZCwgcmMsIGJ5dGVzLCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAiV1NBUmVjdiBvdmxwOiBmZDolZCByYzolZCAldWwgb2YgJXoiLAorICAgICAgICAgICAgICAgICAgIGMtPmZkLCByYywgYnl0ZXMsIHNpemUpOwogCiAgICAgaWYgKHJjID09IC0xKSB7CiAgICAgICAgIGVyciA9IG5neF9zb2NrZXRfZXJybm87CiAgICAgICAgIGlmIChlcnIgPT0gV1NBX0lPX1BFTkRJTkcpIHsKICAgICAgICAgICAgIHJldi0+YWN0aXZlID0gMTsKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIldTQVJlY3YoKSBwb3N0ZWQiKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgIH0KIApAQCAtMTQ4LDk0ICsxNTgsMyBAQAogCiAgICAgcmV0dXJuIGJ5dGVzOwogfQotCi0jaWYgMAotCi0vKiBERUxFTFRFIElUIFdIRU4gQUJPVkUgRlVOQyBXT1VMRCBCRSBURVNURUQgKi8KLQotc3NpemVfdCBuZ3hfd3NhcmVjdihuZ3hfY29ubmVjdGlvbl90ICpjLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQotewotICAgIGludCAgICAgICAgICAgICAgIHJjOwotICAgIHVfaW50ICAgICAgICAgICAgIGZsYWdzOwotICAgIHNpemVfdCAgICAgICAgICAgIGJ5dGVzOwotICAgIFdTQUJVRiAgICAgICAgICAgIHdzYWJ1ZlsxXTsKLSAgICBuZ3hfZXJyX3QgICAgICAgICBlcnI7Ci0gICAgbmd4X2V2ZW50X3QgICAgICAqcmV2OwotICAgIExQV1NBT1ZFUkxBUFBFRCAgIG92bHA7Ci0KLSAgICByZXYgPSBjLT5yZWFkOwotICAgIGJ5dGVzID0gMDsKLQotICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpICYmIHJldi0+cmVhZHkpIHsKLSAgICAgICAgcmV2LT5yZWFkeSA9IDA7Ci0KLSAgICAgICAgLyogdGhlIG92ZXJsYXBwZWQgV1NBUmVjdigpIGNvbXBsZXRlZCAqLwotCi0gICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0lPQ1BfRVZFTlQpIHsKLSAgICAgICAgICAgIGlmIChyZXYtPm92bHAuZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBjLT5sb2csIHJldi0+b3ZscC5lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXU0FSZWN2KCkgZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIHJldi0+YXZhaWxhYmxlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFdTQUdldE92ZXJsYXBwZWRSZXN1bHQoYy0+ZmQsIChMUFdTQU9WRVJMQVBQRUQpICZyZXYtPm92bHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZieXRlcywgMCwgTlVMTCkgPT0gMCkgewotICAgICAgICAgICAgZXJyID0gbmd4X3NvY2tldF9lcnJubzsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBjLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiV1NBUmVjdigpIG9yIFdTQUdldE92ZXJsYXBwZWRSZXN1bHQoKSBmYWlsZWQiKTsKLQotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBieXRlczsKLSAgICB9Ci0KLSAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpIHsKLSAgICAgICAgb3ZscCA9IChMUFdTQU9WRVJMQVBQRUQpICZjLT5yZWFkLT5vdmxwOwotICAgICAgICBuZ3hfbWVtemVybyhvdmxwLCBzaXplb2YoV1NBT1ZFUkxBUFBFRCkpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgb3ZscCA9IE5VTEw7Ci0gICAgfQotCi0gICAgd3NhYnVmWzBdLmJ1ZiA9IGJ1ZjsKLSAgICB3c2FidWZbMF0ubGVuID0gc2l6ZTsKLSAgICBmbGFncyA9IDA7Ci0KLSAgICByYyA9IFdTQVJlY3YoYy0+ZmQsIHdzYWJ1ZiwgMSwgJmJ5dGVzLCAmZmxhZ3MsIG92bHAsIE5VTEwpOwotCi0gICAgbmd4X2xvZ19kZWJ1ZyhjLT5sb2csICJXU0FSZWN2OiAlZDolZCIgXyByYyBfIGJ5dGVzKTsKLQotICAgIGlmIChyYyA9PSAtMSkgewotICAgICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOwotICAgICAgICBpZiAoZXJyID09IFdTQV9JT19QRU5ESU5HKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwotCi0gICAgICAgIH0gZWxzZSBpZiAoZXJyID09IFdTQUVXT1VMREJMT0NLKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBlcnIsICJXU0FSZWN2KCkgRUFHQUlOIik7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgYy0+bG9nLCBlcnIsICJXU0FSZWN2KCkgZmFpbGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfSU9DUF9FVkVOVCkgewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIElmIGEgc29ja2V0IHdhcyBib3VuZCB3aXRoIEkvTyBjb21wbGV0aW9uIHBvcnQKLSAgICAgICAgICogdGhlbiBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgd291bGQgYW55d2F5IHJldHVybiBpdHMgc3RhdHVzCi0gICAgICAgICAqIGRlc3BpdGUgdGhhdCBXU0FSZWN2KCkgd2FzIGFscmVhZHkgY29tcGxldGVkLgotICAgICAgICAgKi8KLQotICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwotICAgIH0KLQotICAgIHJldHVybiBieXRlczsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dzYXNlbmRfY2hhaW4uYyBiL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCmluZGV4IDA4ZjkzYzguLjFkNzVlMDkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCkBAIC05LDE3ICs5LDIxIEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorI2RlZmluZSBOR1hfV1NBQlVGUyAgOAorCisKIG5neF9jaGFpbl90ICpuZ3hfd3Nhc2VuZF9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgbGltaXQpCiB7CiAgICAgaW50ICAgICAgICAgICByYzsKICAgICB1X2NoYXIgICAgICAgKnByZXY7Ci0gICAgc2l6ZV90ICAgICAgICBzaXplOwotICAgIHVfbG9uZyAgICAgICAgc2VudDsKLSAgICBMUFdTQUJVRiAgICAgIHdzYWJ1ZjsKKyAgICB1X2xvbmcgICAgICAgIHNpemUsIHNlbnQsIHNlbmQsIHNwcmV2OworICAgIG5neF91aW50X3QgICAgY29tcGxldGU7CiAgICAgbmd4X2Vycl90ICAgICBlcnI7CiAgICAgbmd4X2V2ZW50X3QgICp3ZXY7Ci0gICAgbmd4X2FycmF5X3QgICB3c2FidWZzOworICAgIG5neF9hcnJheV90ICAgdmVjOworICAgIExQV1NBQlVGICAgICAgd3NhYnVmOworICAgIFdTQUJVRiAgICAgICAgd3NhYnVmc1tOR1hfV1NBQlVGU107CiAgICAgbmd4X2NoYWluX3QgICpjbDsKIAogICAgIHdldiA9IGMtPndyaXRlOwpAQCAtMjgsODAgKzMyLDExOSBAQAogICAgICAgICByZXR1cm4gaW47CiAgICAgfQogCisgICAgc2VuZCA9IDA7CisgICAgY29tcGxldGUgPSAwOworCiAgICAgLyoKICAgICAgKiBXU0FCVUZzIG11c3QgYmUgNC1ieXRlIGFsaWduZWQgb3RoZXJ3aXNlCiAgICAgICogV1NBU2VuZCgpIHdpbGwgcmV0dXJuIHVuZG9jdW1lbnRlZCBXU0FFSU5WQUwgZXJyb3IuCiAgICAgICovCiAKLSAgICBuZ3hfaW5pdF9hcnJheSh3c2FidWZzLCBjLT5wb29sLCAxMCwgc2l6ZW9mKFdTQUJVRiksIE5HWF9DSEFJTl9FUlJPUik7CisgICAgdmVjLmVsdHMgPSB3c2FidWZzOworICAgIHZlYy5zaXplID0gc2l6ZW9mKFdTQUJVRik7CisgICAgdmVjLm5hbGxvYyA9IE5HWF9XU0FCVUZTOyAKKyAgICB2ZWMucG9vbCA9IGMtPnBvb2w7CiAKLSAgICBwcmV2ID0gTlVMTDsKLSAgICB3c2FidWYgPSBOVUxMOworICAgIGZvciAoIDs7ICkgeworICAgICAgICBwcmV2ID0gTlVMTDsKKyAgICAgICAgd3NhYnVmID0gTlVMTDsKKyAgICAgICAgc3ByZXYgPSBzZW5kOwogCi0gICAgLyogY3JlYXRlIHRoZSBXU0FCVUYgYW5kIGNvYWxlc2NlIHRoZSBuZWlnaGJvdXJpbmcgYnVmcyAqLworICAgICAgICB2ZWMubmVsdHMgPSAwOwogCi0gICAgZm9yIChjbCA9IGluOyBjbDsgY2wgPSBjbC0+bmV4dCkgeworICAgICAgICAvKiBjcmVhdGUgdGhlIFdTQUJVRiBhbmQgY29hbGVzY2UgdGhlIG5laWdoYm91cmluZyBidWZzICovCiAKLSAgICAgICAgaWYgKHByZXYgPT0gY2wtPmJ1Zi0+cG9zKSB7Ci0gICAgICAgICAgICB3c2FidWYtPmxlbiArPSBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zOwotICAgICAgICAgICAgcHJldiA9IGNsLT5idWYtPmxhc3Q7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF90ZXN0X251bGwod3NhYnVmLCBuZ3hfcHVzaF9hcnJheSgmd3NhYnVmcyksIE5HWF9DSEFJTl9FUlJPUik7Ci0gICAgICAgICAgICB3c2FidWYtPmJ1ZiA9IChjaGFyICopIGNsLT5idWYtPnBvczsKLSAgICAgICAgICAgIHdzYWJ1Zi0+bGVuID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKLSAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5sYXN0OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmMgPSBXU0FTZW5kKGMtPmZkLCB3c2FidWZzLmVsdHMsIHdzYWJ1ZnMubmVsdHMsICZzZW50LCAwLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmIChyYyA9PSAtMSkgewotICAgICAgICBlcnIgPSBuZ3hfZXJybm87Ci0KLSAgICAgICAgaWYgKGVyciA9PSBXU0FFV09VTERCTE9DSykgewotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZCgpIG5vdCByZWFkeSIpOwotICAgICAgICAgICAgd2V2LT5yZWFkeSA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gaW47Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOwotICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgZXJyLCAiV1NBU2VuZCgpIGZhaWxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIldTQVNlbmQ6ICVkIiwgc2VudCk7Ci0KLSAgICBjLT5zZW50ICs9IHNlbnQ7Ci0KLSAgICBmb3IgKGNsID0gaW47IGNsICYmIHNlbnQgPiAwOyBjbCA9IGNsLT5uZXh0KSB7Ci0KLSAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7Ci0KLSAgICAgICAgaWYgKHNlbnQgPj0gc2l6ZSkgewotICAgICAgICAgICAgc2VudCAtPSBzaXplOwotCi0gICAgICAgICAgICBpZiAobmd4X2J1Zl9pbl9tZW1vcnkoY2wtPmJ1ZikpIHsKLSAgICAgICAgICAgICAgICBjbC0+YnVmLT5wb3MgPSBjbC0+YnVmLT5sYXN0OworICAgICAgICBmb3IgKGNsID0gaW47CisgICAgICAgICAgICAgY2wgJiYgdmVjLm5lbHRzIDwgbmd4X21heF93c2FidWZzICYmIHNlbmQgPCBsaW1pdDsKKyAgICAgICAgICAgICBjbCA9IGNsLT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmd4X2J1Zl9zcGVjaWFsKGNsLT5idWYpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CisKKyAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgc2l6ZSA9ICh1X2xvbmcpIChsaW1pdCAtIHNlbmQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocHJldiA9PSBjbC0+YnVmLT5wb3MpIHsKKyAgICAgICAgICAgICAgICB3c2FidWYtPmxlbiArPSBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghKHdzYWJ1ZiA9IG5neF9hcnJheV9wdXNoKCZ2ZWMpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdzYWJ1Zi0+YnVmID0gKGNoYXIgKikgY2wtPmJ1Zi0+cG9zOworICAgICAgICAgICAgICAgIHdzYWJ1Zi0+bGVuID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldiA9IGNsLT5idWYtPmxhc3Q7CisgICAgICAgICAgICBzZW5kICs9IHNpemU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobmd4X2J1Zl9pbl9tZW1vcnkoY2wtPmJ1ZikpIHsKKyAgICAgICAgc2VudCA9IDA7CisKKyAgICAgICAgcmMgPSBXU0FTZW5kKGMtPmZkLCB2ZWMuZWx0cywgdmVjLm5lbHRzLCAmc2VudCwgMCwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisKKyAgICAgICAgICAgIGlmIChlcnIgPT0gV1NBRVdPVUxEQkxPQ0spIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZCgpIG5vdCByZWFkeSIpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdldi0+ZXJyb3IgPSAxOworICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwgIldTQVNlbmQoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZDogZmQ6JWQsIHM6JXVsIiwgYy0+ZmQsIHNlbnQpOworCisgICAgICAgIGlmIChzZW5kIC0gc3ByZXYgPT0gc2VudCkgeworICAgICAgICAgICAgY29tcGxldGUgPSAxOworICAgICAgICB9CisKKyAgICAgICAgYy0+c2VudCArPSBzZW50OworCisgICAgICAgIGZvciAoY2wgPSBpbjsgY2wgJiYgc2VudCA+IDA7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHNlbnQgPT0gMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaXplID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKKworICAgICAgICAgICAgaWYgKHNlbnQgPj0gc2l6ZSkgeworICAgICAgICAgICAgICAgIHNlbnQgLT0gc2l6ZTsKKyAgICAgICAgICAgICAgICBjbC0+YnVmLT5wb3MgPSBjbC0+YnVmLT5sYXN0OworCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNsLT5idWYtPnBvcyArPSBzZW50OworCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICAgICAgaWYgKCFjb21wbGV0ZSkgeworICAgICAgICAgICAgd2V2LT5yZWFkeSA9IDA7CisgICAgICAgICAgICByZXR1cm4gY2w7CisgICAgICAgIH0KIAotICAgIGlmIChjbCkgewotICAgICAgICB3ZXYtPnJlYWR5ID0gMDsKLSAgICB9CisgICAgICAgIGlmIChzZW5kID49IGxpbWl0IHx8IGNsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBjbDsKKyAgICAgICAgfQogCi0gICAgcmV0dXJuIGNsOworICAgICAgICBpbiA9IGNsOworICAgIH0KIH0KIAogCkBAIC0xMTEsMTMgKzE1NCwxNCBAQAogICAgIGludCAgICAgICAgICAgICAgIHJjOwogICAgIHVfY2hhciAgICAgICAgICAgKnByZXY7CiAgICAgc2l6ZV90ICAgICAgICAgICAgc2l6ZTsKLSAgICB1X2xvbmcgICAgICAgICAgICBzZW50OworICAgIHVfbG9uZyAgICAgICAgICAgIHNlbmQsIHNlbnQ7CiAgICAgTFBXU0FCVUYgICAgICAgICAgd3NhYnVmOwogICAgIG5neF9lcnJfdCAgICAgICAgIGVycjsKICAgICBuZ3hfZXZlbnRfdCAgICAgICp3ZXY7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgd3NhYnVmczsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICB2ZWM7CiAgICAgbmd4X2NoYWluX3QgICAgICAqY2w7CiAgICAgTFBXU0FPVkVSTEFQUEVEICAgb3ZscDsKKyAgICBXU0FCVUYgICAgICAgICAgICB3c2FidWZzW05HWF9XU0FCVUZTXTsKIAogICAgIHdldiA9IGMtPndyaXRlOwogCkBAIC0xMjUsNiArMTY5LDkgQEAKICAgICAgICAgcmV0dXJuIGluOwogICAgIH0KIAorICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAid2V2LT5jb21wbGV0ZTogJWQiLCB3ZXYtPmNvbXBsZXRlKTsKKwogICAgIGlmICghd2V2LT5jb21wbGV0ZSkgewogCiAgICAgICAgIC8qIHBvc3QgdGhlIG92ZXJsYXBwZWQgV1NBU2VuZCgpICovCkBAIC0xMzQsMzIgKzE4MSw1MiBAQAogICAgICAgICAgKiBXU0FTZW5kKCkgd2lsbCByZXR1cm4gdW5kb2N1bWVudGVkIFdTQUVJTlZBTCBlcnJvci4KICAgICAgICAgICovCiAKLSAgICAgICAgbmd4X2luaXRfYXJyYXkod3NhYnVmcywgYy0+cG9vbCwgMTAsIHNpemVvZihXU0FCVUYpLCBOR1hfQ0hBSU5fRVJST1IpOworICAgICAgICB2ZWMuZWx0cyA9IHdzYWJ1ZnM7CisgICAgICAgIHZlYy5uZWx0cyA9IDA7CisgICAgICAgIHZlYy5zaXplID0gc2l6ZW9mKFdTQUJVRik7CisgICAgICAgIHZlYy5uYWxsb2MgPSBOR1hfV1NBQlVGUzsgCisgICAgICAgIHZlYy5wb29sID0gYy0+cG9vbDsKIAorICAgICAgICBzZW5kID0gMDsKICAgICAgICAgcHJldiA9IE5VTEw7CiAgICAgICAgIHdzYWJ1ZiA9IE5VTEw7CiAgCiAgICAgICAgIC8qIGNyZWF0ZSB0aGUgV1NBQlVGIGFuZCBjb2FsZXNjZSB0aGUgbmVpZ2hib3VyaW5nIGJ1ZnMgKi8KIAotICAgICAgICBmb3IgKGNsID0gaW47IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisgICAgICAgIGZvciAoY2wgPSBpbjsKKyAgICAgICAgICAgICBjbCAmJiB2ZWMubmVsdHMgPCBuZ3hfbWF4X3dzYWJ1ZnMgJiYgc2VuZCA8IGxpbWl0OworICAgICAgICAgICAgIGNsID0gY2wtPm5leHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2l6ZSA9IGNsLT5idWYtPmxhc3QgLSBjbC0+YnVmLT5wb3M7CisKKyAgICAgICAgICAgIGlmIChzZW5kICsgc2l6ZSA+IGxpbWl0KSB7CisgICAgICAgICAgICAgICAgc2l6ZSA9ICh1X2xvbmcpIChsaW1pdCAtIHNlbmQpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAocHJldiA9PSBjbC0+YnVmLT5wb3MpIHsKICAgICAgICAgICAgICAgICB3c2FidWYtPmxlbiArPSBjbC0+YnVmLT5sYXN0IC0gY2wtPmJ1Zi0+cG9zOwotICAgICAgICAgICAgICAgIHByZXYgPSBjbC0+YnVmLT5sYXN0OwotIAorCiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5neF90ZXN0X251bGwod3NhYnVmLCBuZ3hfcHVzaF9hcnJheSgmd3NhYnVmcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfQ0hBSU5fRVJST1IpOworICAgICAgICAgICAgICAgIGlmICghKHdzYWJ1ZiA9IG5neF9hcnJheV9wdXNoKCZ2ZWMpKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIHdzYWJ1Zi0+YnVmID0gKGNoYXIgKikgY2wtPmJ1Zi0+cG9zOwogICAgICAgICAgICAgICAgIHdzYWJ1Zi0+bGVuID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKLSAgICAgICAgICAgICAgICBwcmV2ID0gY2wtPmJ1Zi0+bGFzdDsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldiA9IGNsLT5idWYtPmxhc3Q7CisgICAgICAgICAgICBzZW5kICs9IHNpemU7CiAgICAgICAgIH0KIAogICAgICAgICBvdmxwID0gKExQV1NBT1ZFUkxBUFBFRCkgJmMtPndyaXRlLT5vdmxwOwogICAgICAgICBuZ3hfbWVtemVybyhvdmxwLCBzaXplb2YoV1NBT1ZFUkxBUFBFRCkpOwogIAotICAgICAgICByYyA9IFdTQVNlbmQoYy0+ZmQsIHdzYWJ1ZnMuZWx0cywgd3NhYnVmcy5uZWx0cywgJnNlbnQsIDAsIG92bHAsIE5VTEwpOworICAgICAgICByYyA9IFdTQVNlbmQoYy0+ZmQsIHZlYy5lbHRzLCB2ZWMubmVsdHMsICZzZW50LCAwLCBvdmxwLCBOVUxMKTsKIAogICAgICAgICB3ZXYtPmNvbXBsZXRlID0gMDsKIApAQCAtMTY3LDYgKzIzNCw4IEBACiAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CiAKICAgICAgICAgICAgIGlmIChlcnIgPT0gV1NBX0lPX1BFTkRJTkcpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZCgpIHBvc3RlZCIpOwogICAgICAgICAgICAgICAgIHdldi0+YWN0aXZlID0gMTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW47CiAKQEAgLTE4OCw2ICsyNTcsOSBAQAogICAgICAgICAgICAgcmV0dXJuIGluOwogICAgICAgICB9CiAKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZDogZmQ6JWQsIHM6JXVsIiwgYy0+ZmQsIHNlbnQpOworCiAgICAgfSBlbHNlIHsKIAogICAgICAgICAvKiB0aGUgb3ZlcmxhcHBlZCBXU0FTZW5kKCkgY29tcGxldGUgKi8KQEAgLTIxNCwyNyArMjg2LDMwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJXU0FTZW5kOiAlZCIsIHNlbnQpOworICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiV1NBU2VuZCBvdmxwOiBmZDolZCwgczoldWwiLCBjLT5mZCwgc2VudCk7CiAKICAgICBjLT5zZW50ICs9IHNlbnQ7CiAKICAgICBmb3IgKGNsID0gaW47IGNsICYmIHNlbnQgPiAwOyBjbCA9IGNsLT5uZXh0KSB7CisgICAgICAgIGlmIChuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlbnQgPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBzaXplID0gY2wtPmJ1Zi0+bGFzdCAtIGNsLT5idWYtPnBvczsKIAogICAgICAgICBpZiAoc2VudCA+PSBzaXplKSB7CiAgICAgICAgICAgICBzZW50IC09IHNpemU7Ci0KLSAgICAgICAgICAgIGlmIChuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSkgewotICAgICAgICAgICAgICAgIGNsLT5idWYtPnBvcyA9IGNsLT5idWYtPmxhc3Q7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjbC0+YnVmLT5wb3MgPSBjbC0+YnVmLT5sYXN0OwogCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfYnVmX2luX21lbW9yeShjbC0+YnVmKSkgewotICAgICAgICAgICAgY2wtPmJ1Zi0+cG9zICs9IHNlbnQ7Ci0gICAgICAgIH0KKyAgICAgICAgY2wtPmJ1Zi0+cG9zICs9IHNlbnQ7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL3RyYXkuaWNvIGIvc3JjL29zL3dpbjMyL3RyYXkuaWNvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3N2NiYWMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvdHJheS5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgo=