ZGlmZiAtLWdpdCBhL2F1dG8vY29uZmlndXJlIGIvYXV0by9jb25maWd1cmUKaW5kZXggZWIyZmVkMC4uYjRhMGI1NiAxMDA3NTUKLS0tIGEvYXV0by9jb25maWd1cmUKKysrIGIvYXV0by9jb25maWd1cmUKQEAgLTIzLDEzICsyMywxNCBAQAogCiAuIGF1dG8vY2MvY29uZgogLiBhdXRvL29zL2NvbmYKLS4gYXV0by9tb2R1bGVzCi0uIGF1dG8vbGliL2NvbmYKIAogaWYgWyAiJFBMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCiAgICAgLiBhdXRvL3RocmVhZHMKIGZpCiAKKy4gYXV0by9tb2R1bGVzCisuIGF1dG8vbGliL2NvbmYKKwogLiBhdXRvL21ha2UKIC4gYXV0by9saWIvbWFrZQogLiBhdXRvL2luc3RhbGwKZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCA2YzUxMTFhLi43ZDc5MjA1IDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC04Nyw3ICs4NywxNSBAQAogICAgIEhUVFBfU1JDUz0iJEhUVFBfU1JDUyAkSFRUUF9VU0VSSURfU1JDUyIKIGZpCiAKLUhUVFBfTU9EVUxFUz0iJEhUVFBfTU9EVUxFUyAkSFRUUF9TVEFUSUNfTU9EVUxFICRIVFRQX0lOREVYX01PRFVMRSIKK0hUVFBfTU9EVUxFUz0iJEhUVFBfTU9EVUxFUyAkSFRUUF9TVEFUSUNfTU9EVUxFIgorCitpZiBbICRIVFRQX0FVVE9JTkRFWCA9IFlFUyBdOyB0aGVuCisgICAgaGF2ZT1OR1hfSFRUUF9BVVRPSU5ERVggLiBhdXRvL2hhdmUKKyAgICBIVFRQX01PRFVMRVM9IiRIVFRQX01PRFVMRVMgJEhUVFBfQVVUT0lOREVYX01PRFVMRSIKKyAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfQVVUT0lOREVYX1NSQ1MiCitmaQorCitIVFRQX01PRFVMRVM9IiRIVFRQX01PRFVMRVMgJEhUVFBfSU5ERVhfTU9EVUxFIgogCiBpZiBbICRIVFRQX0FDQ0VTUyA9IFlFUyBdOyB0aGVuCiAgICAgaGF2ZT1OR1hfSFRUUF9BQ0NFU1MgLiBhdXRvL2hhdmUKZGlmZiAtLWdpdCBhL2F1dG8vb3B0aW9ucyBiL2F1dG8vb3B0aW9ucwppbmRleCA3NWU5Mzc2Li40MGEwOWI5IDEwMDY0NAotLS0gYS9hdXRvL29wdGlvbnMKKysrIGIvYXV0by9vcHRpb25zCkBAIC00Miw2ICs0Miw3IEBACiBIVFRQX1NTST1OTwogSFRUUF9BQ0NFU1M9WUVTCiBIVFRQX1VTRVJJRD1ZRVMKK0hUVFBfQVVUT0lOREVYPVlFUwogSFRUUF9TVEFUVVM9Tk8KIEhUVFBfUkVXUklURT1ZRVMKIEhUVFBfUFJPWFk9WUVTCkBAIC0xMDcsNiArMTA4LDcgQEAKICAgICAgICAgLS13aXRob3V0LWh0dHBfc3NpX21vZHVsZSkgICAgICAgSFRUUF9TU0k9Tk8gICAgICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRob3V0LWh0dHBfdXNlcmlkX21vZHVsZSkgICAgSFRUUF9VU0VSSUQ9Tk8gICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRob3V0LWh0dHBfYWNjZXNzX21vZHVsZSkgICAgSFRUUF9BQ0NFU1M9Tk8gICAgICAgICAgICAgOzsKKyAgICAgICAgLS13aXRob3V0LWh0dHBfYXV0b2luZGV4X21vZHVsZSkgSFRUUF9BVVRPSU5ERVg9Tk8gICAgICAgICAgOzsKICAgICAgICAgLS13aXRob3V0LWh0dHBfc3RhdHVzX21vZHVsZSkgICAgSFRUUF9TVEFUVVM9Tk8gICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRob3V0LWh0dHBfcmV3cml0ZV9tb2R1bGUpICAgSFRUUF9SRVdSSVRFPU5PICAgICAgICAgICAgOzsKICAgICAgICAgLS13aXRob3V0LWh0dHBfcHJveHlfbW9kdWxlKSAgICAgSFRUUF9QUk9YWT1OTyAgICAgICAgICAgICAgOzsKZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCAxNjIyZGNkLi5iZjU4MjlmIDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0yNzIsNiArMjcyLDEwIEBACiBIVFRQX0FDQ0VTU19TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX2hhbmRsZXIuYwogCiAKK0hUVFBfQVVUT0lOREVYX01PRFVMRT1uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlCitIVFRQX0FVVE9JTkRFWF9TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXIuYworCisKIEhUVFBfU1RBVFVTX01PRFVMRT1uZ3hfaHR0cF9zdGF0dXNfbW9kdWxlCiBIVFRQX1NUQVRVU19TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdHVzX2hhbmRsZXIuYwogCmRpZmYgLS1naXQgYS9hdXRvL3N1bW1hcnkgYi9hdXRvL3N1bW1hcnkKaW5kZXggNDVjNjhlMC4uYjhmYjgxZCAxMDA2NDQKLS0tIGEvYXV0by9zdW1tYXJ5CisrKyBiL2F1dG8vc3VtbWFyeQpAQCAtNiw2ICs2LDE2IEBACiBlY2hvICJDb25maWd1cmF0aW9uIHN1bW1hcnkiCiAKIAorY2FzZSAkVVNFX1RIUkVBRFMgaW4KKyAgICByZm9yaykgICAgICAgICBlY2hvICIgICsgdXNpbmcgcmZvcmsoKWVkIHRocmVhZHMiIDs7CisgICAgcHRocmVhZHMpICAgICAgZWNobyAiICArIHVzaW5nIGxpYnB0aHJlYWQgdGhyZWFkcyBsaWJyYXJ5IiA7OworICAgIGxpYnRocikgICAgICAgIGVjaG8gIiAgKyB1c2luZyBGcmVlQlNEIGxpYnRociB0aHJlYWRzIGxpYnJhcnkiIDs7CisgICAgbGliY19yKSAgICAgICAgZWNobyAiICArIHVzaW5nIEZyZWVCU0QgbGliY19yIHRocmVhZHMgbGlicmFyeSIgOzsKKyAgICBsaW51eHRocmVhZHMpICBlY2hvICIgICsgdXNpbmcgRnJlZUJTRCBMaW51eFRocmVhZHMgcG9ydCBsaWJyYXJ5IiA7OworICAgIE5PKSAgICAgICAgICAgIGVjaG8gIiAgKyB0aHJlYWRzIGFyZSBub3QgdXNlZCIgOzsKKyAgICAqKSAgICAgICAgICAgICBlY2hvICIgICsgdXNpbmcgbGliJFVTRV9USFJFQURTIHRocmVhZHMgbGlicmFyeSIgOzsKK2VzYWMKKwogaWYgWyAkVVNFX1BDUkUgPSBESVNBQkxFRCBdOyB0aGVuCiAgICAgZWNobyAiICsgUENSRSBsaWJyYXJ5IGlzIGRpc2FibGVkIgogCmRpZmYgLS1naXQgYS9hdXRvL3RocmVhZHMgYi9hdXRvL3RocmVhZHMKaW5kZXggOWFhZWE1MS4uYTEyZWVkMyAxMDA2NDQKLS0tIGEvYXV0by90aHJlYWRzCisrKyBiL2F1dG8vdGhyZWFkcwpAQCAtMjAsMTcgKzIwLDE2IEBACiAgICAgICAgIGVzYWMKICAgICA7OwogCi0gICAgcHRocmVhZCkKKyAgICBwdGhyZWFkcykKICAgICAgICAgaGF2ZT1OR1hfVEhSRUFEUyAuIGF1dG8vaGF2ZQogICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBUSFJFQURfU1JDUyIKICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1scHRocmVhZCIKICAgICA7OwogCi0gICAgZnJlZWJzZDQpCisgICAgbGlidGhyKQogICAgICAgICBoYXZlPU5HWF9USFJFQURTIC4gYXV0by9oYXZlCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAtcHRocmVhZCIKICAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRQVEhSRUFEX1NSQ1MiCi0gICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAtcHRocmVhZCIKKyAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1sdGhyIgogICAgIDs7CiAKICAgICBsaW51eHRocmVhZHMpCkBAIC00MiwyMiArNDEsMzAgQEAKICAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1MIC91c3IvbG9jYWwvbGliIC1sbHRocmVhZCAtbGxnY2NfciIKICAgICA7OwogCi0gICAgbGNfcikKLSAgICAgICAgaGF2ZT1OR1hfVEhSRUFEUyAuIGF1dG8vaGF2ZQotICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBUSFJFQURfU1JDUyIKLSAgICAgICAgQ09SRV9MSUJTPSIkQ09SRV9MSUJTIC1sY19yIgorICAgIGxpYmNfcikKKyAgICAgICAgY2FzZSAkUExBVEZPUk0gaW4KKyAgICAgICAgICAgIEZyZWVCU0Q6WzM0XSopCisgICAgICAgICAgICAgICAgaGF2ZT1OR1hfVEhSRUFEUyAuIGF1dG8vaGF2ZQorICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtcHRocmVhZCIKKyAgICAgICAgICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBUSFJFQURfU1JDUyIKKyAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgLXB0aHJlYWQiCisgICAgICAgICAgICA7OworCisgICAgICAgICAgICBGcmVlQlNEOjUqKQorICAgICAgICAgICAgICAgIGhhdmU9TkdYX1RIUkVBRFMgLiBhdXRvL2hhdmUKKyAgICAgICAgICAgICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJFBUSFJFQURfU1JDUyIKKyAgICAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgLWxjX3IiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCiAgICAgOzsKIAotICAgIGx0aHIpCi0gICAgICAgIGhhdmU9TkdYX1RIUkVBRFMgLiBhdXRvL2hhdmUKLSAgICAgICAgQ09SRV9TUkNTPSIkQ09SRV9TUkNTICRQVEhSRUFEX1NSQ1MiCi0gICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAtbHRociIKKyAgICBOTykKICAgICA7OwogCi0gICAgbGtzZSkKKyAgICAqKQogICAgICAgICBoYXZlPU5HWF9USFJFQURTIC4gYXV0by9oYXZlCiAgICAgICAgIENPUkVfU1JDUz0iJENPUkVfU1JDUyAkUFRIUkVBRF9TUkNTIgotICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgLWxrc2UiCisgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAtbCRVU0VfVEhSRUFEUyIKICAgICA7OwogCiBlc2FjCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IGRmODFjOGQuLjY5MGYwMDMgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC02LDYgKzYsMzggQEAKICAgICAgICAgICAgIHRpdGxlPSJuZ2lueCI+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjEuMyIgZGF0ZT0iMjUuMTAuMjAwNCI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZSDJIMTJ0sXL1MnXwSBhdXRvaW5kZXguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZSBhbmQgdGhlIGF1dG9pbmRleCBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBwcm94eV9zZXRfeF91cmwuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgcHJveHlfc2V0X3hfdXJsIGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNgg0NLPy9PJ0s/Xwc7JySDNz8cg0NLJ18XT1MkgyyDawcPJy8zJ18HOycAsIMXTzMkgzsUgydPQz8zY2s/XwczT0Qorc2VuZGZpbGUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Citwcm94eSBtb2R1bGUgbWF5IGdldCBjYXVnaHQgaW4gYW4gZW5kbGVzcyBsb29wIHdoZW4gc2VuZGZpbGUgaXMgbm90IHVzZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCiA8Y2hhbmdlcyB2ZXI9IjAuMS4yIiBkYXRlPSIyMS4xMC4yMDA0Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KQEAgLTM4LDEyICs3MCwxMiBAQAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgogPHBhcmEgbGFuZz0icnUiPgogzsXM2NrRINDF0sXLz87GycfV0snSz9fB1NggbmdpbngsIMXTzMkgy8/OxsnH1dLBw8nPzs7ZyiDGwcrMINXLwdrBzgot1yDLz83BzsTOz8og09TSz8vFLAor1yDLz83BzsTOz8og09TSz8vFOwogz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4xLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogaWYgY29uZmlndXJhdGlvbiBmaWxlIHdhcyBzZXQgaW4gY29tbWFuZCBsaW5lLCB0aGUgcmVjb25maWd1cmF0aW9uCi13YXMgaW1wb3NzaWJsZSwKK3dhcyBpbXBvc3NpYmxlOwogYnVnIGFwcGVhcmVkIGluIDAuMS4xLgogPC9wYXJhPgogPC9jaGFuZ2U+CkBAIC02MSwxMiArOTMsMTIgQEAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KIDxwYXJhIGxhbmc9InJ1Ij4KINDSySDJ09DPzNjaz9fBzsnJIHNlbmRmaWxlINTFy9PUIM/U18XUwSDOxSDQxdLFy8/EydLP18HM09EKLdPPx8zB087PIMTJ0sXL1MnXwc0gzc/E1czRIGNoYXJzZXQsCivTz8fMwdPOzyDEydLFy9TJ18HNIM3PxNXM0SBjaGFyc2V0Owogz9vJwsvBINDP0dfJzMHT2CDXIDAuMS4xLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogd2l0aCBzZW5kZmlsZSB0aGUgcmVzcG9uc2Ugd2FzIG5vdCByZWNvZGVkIGFjY29yZGluZyB0byB0aGUgY2hhcnNldAotbW9kdWxlIGRpcmVjdGl2ZXMsCittb2R1bGUgZGlyZWN0aXZlczsKIGJ1ZyBhcHBlYXJlZCBpbiAwLjEuMS4KIDwvcGFyYT4KIDwvY2hhbmdlPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggYmFjMDFmYy4uMDQyODJlZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjIiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjMiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2ZpbGUuaCBiL3NyYy9jb3JlL25neF9maWxlLmgKaW5kZXggOWE2ZmU2ZS4uZDA1YjZkNyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfZmlsZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAKICAgICBuZ3hfbG9nX3QgICAgICAgKmxvZzsKIAotICAgIHVuc2lnbmVkICAgICAgICAgaW5mb192YWxpZDoxOworICAgIG5neF91aW50X3QgICAgICAgdmFsaWRfaW5mbzoxOyAgLyogdW5zaWduZWQgIHZhbGlkX2luZm86MTsgKi8KIH07CiAKICNkZWZpbmUgTkdYX01BWF9QQVRIX0xFVkVMICAzCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfZ2FyYmFnZV9jb2xsZWN0b3IuYyBiL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCmluZGV4IGQ3M2NhOTUuLjczZjljYzEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCisrKyBiL3NyYy9jb3JlL25neF9nYXJiYWdlX2NvbGxlY3Rvci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdHgtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImdjIHBhdGg6IFwiJXNcIiIsIGZuYW1lLmRhdGEpOwogCi0gICAgICAgIGlmICghZGlyLmluZm9fdmFsaWQpIHsKKyAgICAgICAgaWYgKCFkaXIudmFsaWRfaW5mbykgewogICAgICAgICAgICAgaWYgKG5neF9kZV9pbmZvKGZuYW1lLmRhdGEsICZkaXIpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGN0eC0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGVfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIGZuYW1lLmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCmluZGV4IDhlNGUwOWEuLjM5MGNhNDMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuYworKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKQEAgLTQxLDYgKzQxLDcgQEAKICAqICAgICVbMF1bd2lkdGhddWkgICAgbmd4X3VpbnRfdAogICogICAgJVswXVt3aWR0aF11eGkgICBuZ3hfdWludF90IGluIGhleAogICogICAgJXMgICAgICAgICAgICAgICBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nCisgKiAgICAlYyAgICAgICAgICAgICAgIGNoYXIKICAqICAgICUlICAgICAgICAgICAgICAgJQogICoKICAqLwpAQCAtMjIzLDYgKzIyNCwxMyBAQAogCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgICAgIGQgPSB2YV9hcmcoYXJnLCBpbnQpOworICAgICAgICAgICAgICAgICpidWYrKyA9ICh1X2NoYXIpIChkICYgMHhmZik7CisgICAgICAgICAgICAgICAgZm10Kys7CisKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgY2FzZSAnJSc6CiAgICAgICAgICAgICAgICAgKmJ1ZisrID0gJyUnOwogICAgICAgICAgICAgICAgIGZtdCsrOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaAppbmRleCAwMjViOTE2Li4zNDVjMmY5IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaApAQCAtMzEsNyArMzEsNyBAQAogICAgIG5neF9pbnRfdCAgICAgICAgICAgY3VycmVudDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIG51bWJlcjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIG1heF9mYWlsczsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgIGZhaWxfdGltZW91dDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgIGZhaWxfdGltZW91dDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIGxhc3RfY2FjaGVkOwogCiAgLyogbmd4X211dGV4X3QgICAgICAgICptdXRleDsgKi8KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKaW5kZXggNzFmYzUwMC4uMjRiYzRkMyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKQEAgLTYxOSw2ICs2MTksOCBAQAogCiAgICAgICAgIGItPmluX2ZpbGUgPSAxOwogICAgICAgICBiLT50ZW1wX2ZpbGUgPSAxOworICAgICAgICBiLT50ZW1wb3JhcnkgPSAwOworICAgICAgICBiLT5yZWN5Y2xlZCA9IDA7CiAKICAgICAgICAgbmd4X2NoYWluX2FkZF9saW5rKHAtPm91dCwgcC0+bGFzdF9vdXQsIGNsKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTcyNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyLmMKQEAgLTAsMCArMSw1NjAgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfaHR0cC5oPgorCisKKyNpZiAwCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfYnVmX3QgICAgICpidWY7CisgICAgc2l6ZV90ICAgICAgICAgc2l6ZTsKKyAgICBuZ3hfcG9vbF90ICAgICpwb29sOworICAgIHNpemVfdCAgICAgICAgIGFsbG9jX3NpemU7CisgICAgbmd4X2NoYWluX3QgICoqbGFzdF9vdXQ7Cit9IG5neF9odHRwX2F1dG9pbmRleF9jdHhfdDsKKworI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9zdHJfdCAgICAgIG5hbWU7CisgICAgbmd4X3VpbnRfdCAgICAgZGlyOworICAgIHRpbWVfdCAgICAgICAgIG10aW1lOworICAgIG9mZl90ICAgICAgICAgIHNpemU7Cit9IG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfZmxhZ190ICAgICBlbmFibGU7Cit9IG5neF9odHRwX2F1dG9pbmRleF9sb2NfY29uZl90OworCisKKyNkZWZpbmUgTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOICA1MAorCisKK3N0YXRpYyBpbnQgbmd4X2h0dHBfYXV0b2luZGV4X2NtcF9lbnRyaWVzKGNvbnN0IHZvaWQgKm9uZSwgY29uc3Qgdm9pZCAqdHdvKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2Rpcl90ICpkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKm5hbWUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRvaW5kZXhfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIHZvaWQgKm5neF9odHRwX2F1dG9pbmRleF9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOworc3RhdGljIGNoYXIgKm5neF9odHRwX2F1dG9pbmRleF9tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7CisKKworc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX2F1dG9pbmRleF9jb21tYW5kc1tdID0geworCisgICAgeyBuZ3hfc3RyaW5nKCJhdXRvaW5kZXgiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2F1dG9pbmRleF9sb2NfY29uZl90LCBlbmFibGUpLAorICAgICAgTlVMTCB9LAorCisgICAgICBuZ3hfbnVsbF9jb21tYW5kCit9OworCisKK25neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlX2N0eCA9IHsKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmUgY29uZiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCisKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZXJnZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiAqLworCisgICAgbmd4X2h0dHBfYXV0b2luZGV4X2NyZWF0ZV9sb2NfY29uZiwgICAgLyogY3JlYXRlIGxvY2F0aW9uIGNvbmZpZ3JhdGlvbiAqLworICAgIG5neF9odHRwX2F1dG9pbmRleF9tZXJnZV9sb2NfY29uZiAgICAgIC8qIG1lcmdlIGxvY2F0aW9uIGNvbmZpZ3JhdGlvbiAqLworfTsKKworCituZ3hfbW9kdWxlX3QgIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUgPSB7CisgICAgTkdYX01PRFVMRSwKKyAgICAmbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZV9jdHgsICAgICAgICAvKiBtb2R1bGUgY29udGV4dCAqLyAKKyAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfY29tbWFuZHMsICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLworICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCisgICAgbmd4X2h0dHBfYXV0b2luZGV4X2luaXQsICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IGNoaWxkICovCit9OworCisKK3N0YXRpYyB1X2NoYXIgdGl0bGVbXSA9CisiPGh0bWw+IiBDUkxGCisiPGhlYWQ+PHRpdGxlPkluZGV4IG9mICIKKzsKKworCitzdGF0aWMgdV9jaGFyIGhlYWRlcltdID0KKyI8L3RpdGxlPjwvaGVhZD4iIENSTEYKKyI8Ym9keSBiZ2NvbG9yPVwid2hpdGVcIj4iIENSTEYKKyI8aDE+SW5kZXggb2YgIgorOworCitzdGF0aWMgdV9jaGFyIHRhaWxbXSA9CisiPC9ib2R5PiIgQ1JMRgorIjwvaHRtbD4iIENSTEYKKzsKKworCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgKmxhc3QsIHNjYWxlOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuOworICAgIG9mZl90ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOworICAgIG5neF90bV90ICAgICAgICAgICAgICAgICAgICAgICAgdG07CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICByYywgc2l6ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGksIGxldmVsOworICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgICAgICAgZXJyOworICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgICAqYjsKKyAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgIG91dDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIGRuYW1lLCBmbmFtZTsKKyAgICBuZ3hfZGlyX3QgICAgICAgICAgICAgICAgICAgICAgIGRpcjsKKyAgICBuZ3hfcG9vbF90ICAgICAgICAgICAgICAgICAgICAgKnBvb2w7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOworICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAgICAqY2xjZjsKKyAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfZW50cnlfdCAgICAgKmVudHJ5OworICAgIG5neF9odHRwX2F1dG9pbmRleF9sb2NfY29uZl90ICAqYWxjZjsKKworICAgIHN0YXRpYyBjaGFyICAqbW9udGhzW10gPSB7ICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIiB9OworCisgICAgaWYgKHItPnVyaS5kYXRhW3ItPnVyaS5sZW4gLSAxXSAhPSAnLycpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKKyAgICB9CisKKyAgICBhbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlKTsKKworICAgIGlmICghYWxjZi0+ZW5hYmxlKSB7CisgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CisgICAgfQorCisgICAgLyogVE9ETzogcG9vbCBzaG91bGQgYmUgdGVtcG9yYXJ5IHBvb2wgKi8KKyAgICBwb29sID0gci0+cG9vbDsKKworICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIGlmIChjbGNmLT5hbGlhcykgeworICAgICAgICBkbmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBOR1hfRElSX01BU0tfTEVOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2xjZi0+bmFtZS5sZW4pOworICAgICAgICBpZiAoZG5hbWUuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICB9CisgICAgCisgICAgICAgIGxhc3QgPSBuZ3hfY3B5bWVtKGRuYW1lLmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOworICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4obGFzdCwgci0+dXJpLmRhdGEgKyBjbGNmLT5uYW1lLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSBjbGNmLT5uYW1lLmxlbik7CisKKyAgICB9IGVsc2UgeworICAgICAgICBkbmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBjbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBOR1hfRElSX01BU0tfTEVOKTsKKyAgICAgICAgaWYgKGRuYW1lLmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3QgPSBuZ3hfY3B5bWVtKGRuYW1lLmRhdGEsIGNsY2YtPnJvb3QuZGF0YSwgY2xjZi0+cm9vdC5sZW4pOworICAgICAgICBsYXN0ID0gbmd4X2NweXN0cm4obGFzdCwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4pOworCisgICAgfQorCisgICAgZG5hbWUubGVuID0gbGFzdCAtIGRuYW1lLmRhdGE7CisKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiaHR0cCBhdXRvaW5kZXg6IFwiJXNcIiIsIGRuYW1lLmRhdGEpOworCisKKyAgICBpZiAobmd4X29wZW5fZGlyKCZkbmFtZSwgJmRpcikgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIGVyciA9IG5neF9lcnJubzsKKworICAgICAgICBpZiAoZXJyID09IE5HWF9FTk9FTlQgfHwgZXJyID09IE5HWF9FTk9URElSKSB7CisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfRVJSOworICAgICAgICAgICAgcmMgPSBOR1hfSFRUUF9OT1RfRk9VTkQ7CisKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gTkdYX0VBQ0NFUykgeworICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0VSUjsKKyAgICAgICAgICAgIHJjID0gTkdYX0hUVFBfRk9SQklEREVOOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQ1JJVDsKKyAgICAgICAgICAgIHJjID0gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19lcnJvcihsZXZlbCwgci0+Y29ubmVjdGlvbi0+bG9nLCBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgbmd4X29wZW5fZGlyX24gIiBcIiVzXCIgZmFpbGVkIiwgZG5hbWUuZGF0YSk7CisKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworI2lmIChOR1hfU1VQUFJFU1NfV0FSTikKKyAgICAvKiBNU1ZDIHRoaW5rcyAnZW50cmllcycgbWF5IGJlIHVzZWQgd2l0aG91dCBoYXZpbmcgYmVlbiBpbml0aWFsaXplZCAqLworICAgIG5neF9tZW16ZXJvKCZlbnRyaWVzLCBzaXplb2Yobmd4X2FycmF5X3QpKTsKKyNlbmRpZgorCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZlbnRyaWVzLCBwb29sLCA1MCwgc2l6ZW9mKG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgfQorCisgICAgZm5hbWUubGVuID0gMDsKKyNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCisgICAgZm5hbWUuZGF0YSA9IE5VTEw7CisjZW5kaWYKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBuZ3hfc2V0X2Vycm5vKDApOworCisgICAgICAgIGlmIChuZ3hfcmVhZF9kaXIoJmRpcikgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisKKyAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT01PUkVGSUxFUykgeworICAgICAgICAgICAgICAgIHJjID0gTkdYX09LOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9yZWFkX2Rpcl9uICIgXCIlc1wiIGZhaWxlZCIsIGRuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBhdXRvaW5kZXggZmlsZTogXCIlc1wiIiwgbmd4X2RlX25hbWUoJmRpcikpOworCisgICAgICAgIGxlbiA9IG5neF9kZV9uYW1lbGVuKCZkaXIpOworCisgICAgICAgIGlmICghZGlyLnZhbGlkX2luZm8pIHsKKworICAgICAgICAgICAgaWYgKGRuYW1lLmxlbiArIDEgKyBsZW4gPiBmbmFtZS5sZW4pIHsKKyAgICAgICAgICAgICAgICBmbmFtZS5sZW4gPSBkbmFtZS5sZW4gKyAxICsgbGVuICsgMzI7CisKKyAgICAgICAgICAgICAgICBpZiAoIShmbmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBmbmFtZS5sZW4pKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsIGRuYW1lLmRhdGEpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxhc3QgPSBuZ3hfY3B5c3RybihmbmFtZS5kYXRhLCBkbmFtZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmFtZS5sZW4gKyAxKTsKKyAgICAgICAgICAgICAgICAqbGFzdCsrID0gJy8nOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBuZ3hfY3B5c3RybihsYXN0LCBuZ3hfZGVfbmFtZSgmZGlyKSwgbGVuICsgMSk7CisKKyAgICAgICAgICAgIGlmIChuZ3hfZGVfaW5mbyhmbmFtZS5kYXRhLCAmZGlyKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9kZV9pbmZvX24gIiBcIiVzXCIgZmFpbGVkIiwgZm5hbWUuZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihyLCAmZGlyLCBkbmFtZS5kYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsZW4gPT0gMSAmJiBuZ3hfZGVfbmFtZSgmZGlyKVswXSA9PSAnLicpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxlbiA9PSAyCisgICAgICAgICAgICAmJiBuZ3hfZGVfbmFtZSgmZGlyKVswXSA9PSAnLicKKyAgICAgICAgICAgICYmIG5neF9kZV9uYW1lKCZkaXIpWzBdID09ICcuJykKKyAgICAgICAgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIShlbnRyeSA9IG5neF9hcnJheV9wdXNoKCZlbnRyaWVzKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+bmFtZS5sZW4gPSBsZW47ICAgICAgICAKKworICAgICAgICBpZiAoIShlbnRyeS0+bmFtZS5kYXRhID0gbmd4X3BhbGxvYyhwb29sLCBsZW4gKyAxKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgZG5hbWUuZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgbmd4X2NweXN0cm4oZW50cnktPm5hbWUuZGF0YSwgbmd4X2RlX25hbWUoJmRpciksIGxlbiArIDEpOworCisgICAgICAgIGVudHJ5LT5kaXIgPSBuZ3hfZGVfaXNfZGlyKCZkaXIpOworICAgICAgICBlbnRyeS0+bXRpbWUgPSBuZ3hfZGVfbXRpbWUoJmRpcik7CisgICAgICAgIGVudHJ5LT5zaXplID0gbmd4X2RlX3NpemUoJmRpcik7CisgICAgfQorCisgICAgaWYgKG5neF9jbG9zZV9kaXIoJmRpcikgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2Rpcl9uICIgXCIlc1wiIGZhaWxlZCIsIGRuYW1lLmRhdGEpOworICAgIH0KKworICAgIGxlbiA9IHNpemVvZih0aXRsZSkgLSAxCisgICAgICAgICAgKyByLT51cmkubGVuCisgICAgICAgICAgKyBzaXplb2YoaGVhZGVyKSAtIDEKKyAgICAgICAgICArIHItPnVyaS5sZW4KKyAgICAgICAgICArIHNpemVvZigiPC9oMT4iKSAtIDEKKyAgICAgICAgICArIHNpemVvZigiPGhyPjxwcmU+PGEgaHJlZj1cIi4uL1wiPi4uLzwvYT4iIENSTEYpIC0gMQorICAgICAgICAgICsgc2l6ZW9mKCI8L3ByZT48aHI+IikgLSAxCisgICAgICAgICAgKyBzaXplb2YodGFpbCkgLSAxOworCisgICAgZW50cnkgPSBlbnRyaWVzLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IGVudHJpZXMubmVsdHM7IGkrKykgeworICAgICAgICBsZW4gKz0gc2l6ZW9mKCI8YSBocmVmPVwiIikgLSAxCisgICAgICAgICAgICAgICArIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxIGlzIGZvciAiLyIgKi8KKyAgICAgICAgICAgICAgICsgZW50cnlbaV0ubmFtZS5sZW4KKyAgICAgICAgICAgICAgICsgc2l6ZW9mKCJcIj4iKSAtIDEKKyAgICAgICAgICAgICAgICsgTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOCisgICAgICAgICAgICAgICArIHNpemVvZigiPC9hPiIpIC0gMQorICAgICAgICAgICAgICAgKyAxCisgICAgICAgICAgICAgICArIHNpemVvZigiMjgtU2VwLTE5NzAgMTI6MDAgIikgLSAxCisgICAgICAgICAgICAgICArIHNpemVvZigiMTAyM0ciKSAtIDEKKyAgICAgICAgICAgICAgICsgMjsKKyAgICB9CisKKyAgICBpZiAoIShiID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihyLT5wb29sLCBsZW4pKSkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIGlmIChlbnRyaWVzLm5lbHRzID4gMSkgeworICAgICAgICBuZ3hfcXNvcnQoZW50cnksIChzaXplX3QpIGVudHJpZXMubmVsdHMsCisgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfYXV0b2luZGV4X2VudHJ5X3QpLAorICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfYXV0b2luZGV4X2NtcF9lbnRyaWVzKTsKKyAgICB9CisKKyAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCB0aXRsZSwgc2l6ZW9mKHRpdGxlKSAtIDEpOworICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnVyaS5kYXRhLCByLT51cmkubGVuKTsKKyAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCBoZWFkZXIsIHNpemVvZihoZWFkZXIpIC0gMSk7CisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4pOworICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsICI8L2gxPiIsIHNpemVvZigiPC9oMT4iKSAtIDEpOworCisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIjxocj48cHJlPjxhIGhyZWY9XCIuLi9cIj4uLi88L2E+IiBDUkxGLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiPGhyPjxwcmU+PGEgaHJlZj1cIi4uL1wiPi4uLzwvYT4iIENSTEYpIC0gMSk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcy5uZWx0czsgaSsrKSB7CisgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsICI8YSBocmVmPVwiIiwgc2l6ZW9mKCI8YSBocmVmPVwiIikgLSAxKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgZW50cnlbaV0ubmFtZS5kYXRhLCBlbnRyeVtpXS5uYW1lLmxlbik7CisKKyAgICAgICAgaWYgKGVudHJ5W2ldLmRpcikgeworICAgICAgICAgICAgKmItPmxhc3QrKyA9ICcvJzsKKyAgICAgICAgfQorCisgICAgICAgICpiLT5sYXN0KysgPSAnIic7CisgICAgICAgICpiLT5sYXN0KysgPSAnPic7CisKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHlzdHJuKGItPmxhc3QsIGVudHJ5W2ldLm5hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTiArIDEpOworCisgICAgICAgIGxlbiA9IGVudHJ5W2ldLm5hbWUubGVuOworCisgICAgICAgIGlmIChsZW4gPiBOR1hfSFRUUF9BVVRPSU5ERVhfTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QgLSAzLCAiLi4mZ3Q7PC9hPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIi4uJmd0OzwvYT4iKSAtIDEpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZW50cnlbaV0uZGlyICYmIE5HWF9IVFRQX0FVVE9JTkRFWF9OQU1FX0xFTiAtIGxlbiA+IDApIHsKKyAgICAgICAgICAgICAgICAqYi0+bGFzdCsrID0gJy8nOworICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCAiPC9hPiIsIHNpemVvZigiPC9hPiIpIC0gMSk7CisgICAgICAgICAgICBuZ3hfbWVtc2V0KGItPmxhc3QsICcgJywgTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOIC0gbGVuKTsKKyAgICAgICAgICAgIGItPmxhc3QgKz0gTkdYX0hUVFBfQVVUT0lOREVYX05BTUVfTEVOIC0gbGVuOworICAgICAgICB9CisKKyAgICAgICAgKmItPmxhc3QrKyA9ICcgJzsKKworICAgICAgICBuZ3hfZ210aW1lKGVudHJ5W2ldLm10aW1lLCAmdG0pOworCisgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiJTAyZC0lcy0lZCAlMDJkOiUwMmQgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhzW3RtLm5neF90bV9tb24gLSAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG0ubmd4X3RtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWluKTsKKworICAgICAgICBpZiAoZW50cnlbaV0uZGlyKSB7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCAiICAgLSIsIHNpemVvZigiICAgLSIpIC0gMSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlbmd0aCA9IGVudHJ5W2ldLnNpemU7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPiA5OTk5OTk5OTkpIHsKKyAgICAgICAgICAgICAgICBzaXplID0gKG5neF9pbnRfdCkgbGVuZ3RoIC8gMTAyNCAqIDEwMjQgKiAxMDI0OworICAgICAgICAgICAgICAgIGlmICgobGVuZ3RoICUgMTAyNCAqIDEwMjQgKiAxMDI0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gMiAtIDEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2FsZSA9ICdHJzsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiA5OTk5OTkpIHsKKyAgICAgICAgICAgICAgICBzaXplID0gKG5neF9pbnRfdCkgbGVuZ3RoIC8gMTAyNCAqIDEwMjQ7CisgICAgICAgICAgICAgICAgaWYgKChsZW5ndGggJSAxMDI0ICogMTAyNCkgPiAoMTAyNCAqIDEwMjQgLyAyIC0gMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2FsZSA9ICdNJzsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiA5OTk5KSB7CisgICAgICAgICAgICAgICAgc2l6ZSA9IChuZ3hfaW50X3QpIGxlbmd0aCAvIDEwMjQ7CisgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCAlIDEwMjQgPiA1MTEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzY2FsZSA9ICdLJzsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplID0gKG5neF9pbnRfdCkgbGVuZ3RoOworICAgICAgICAgICAgICAgIHNjYWxlID0gJyAnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X3NwcmludGYoYi0+bGFzdCwgIiU0aSIsIHNpemUpOworCisgICAgICAgICAgICBpZiAoc2NhbGUgIT0gJyAnKSB7CisgICAgICAgICAgICAgICAgKmItPmxhc3QrKyA9IHNjYWxlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKmItPmxhc3QrKyA9IENSOworICAgICAgICAqYi0+bGFzdCsrID0gTEY7CisgICAgfQorCisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIjwvcHJlPjxocj4iLCBzaXplb2YoIjwvcHJlPjxocj4iKSAtIDEpOworCisgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgdGFpbCwgc2l6ZW9mKHRhaWwpIC0gMSk7CisKKyAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gYi0+bGFzdCAtIGItPnBvczsKKworICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZSA9IG5neF9saXN0X3B1c2goJnItPmhlYWRlcnNfb3V0LmhlYWRlcnMpOworICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+a2V5LmxlbiA9IDA7CisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT5rZXkuZGF0YSA9IE5VTEw7CisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT52YWx1ZS5sZW4gPSBzaXplb2YoInRleHQvaHRtbCIpIC0gMTsKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUtPnZhbHVlLmRhdGEgPSAodV9jaGFyICopICJ0ZXh0L2h0bWwiOworCisgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2hlYWRlcihyKTsKKworICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPiBOR1hfT0sgfHwgci0+aGVhZGVyX29ubHkpIHsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIGlmICghci0+bWFpbikgeworICAgICAgICBiLT5sYXN0X2J1ZiA9IDE7CisgICAgfQorCisgICAgb3V0LmJ1ZiA9IGI7CisgICAgb3V0Lm5leHQgPSBOVUxMOworCisgICAgcmV0dXJuIG5neF9odHRwX291dHB1dF9maWx0ZXIociwgJm91dCk7Cit9CisKKworc3RhdGljIGludCBuZ3hfaHR0cF9hdXRvaW5kZXhfY21wX2VudHJpZXMoY29uc3Qgdm9pZCAqb25lLCBjb25zdCB2b2lkICp0d28pCit7CisgICAgbmd4X2h0dHBfYXV0b2luZGV4X2VudHJ5X3QgKmZpcnN0ID0gKG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90ICopIG9uZTsKKyAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfZW50cnlfdCAqc2Vjb25kID0gKG5neF9odHRwX2F1dG9pbmRleF9lbnRyeV90ICopIHR3bzsKKworICAgIGlmIChmaXJzdC0+ZGlyICYmICFzZWNvbmQtPmRpcikgeworICAgICAgICAvKiBtb3ZlIHRoZSBkaXJlY3RvcmllcyB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghZmlyc3QtPmRpciAmJiBzZWNvbmQtPmRpcikgeworICAgICAgICAvKiBtb3ZlIHRoZSBkaXJlY3RvcmllcyB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIChpbnQpIG5neF9zdHJjbXAoZmlyc3QtPm5hbWUuZGF0YSwgc2Vjb25kLT5uYW1lLmRhdGEpOworfQorCisKKyNpZiAwCisKK3N0YXRpYyBuZ3hfYnVmX3QgKm5neF9odHRwX2F1dG9pbmRleF9hbGxvYyhuZ3hfaHR0cF9hdXRvaW5kZXhfY3R4X3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSkKK3sKKyAgICBuZ3hfY2hhaW5fdCAgKmNsOworCisgICAgaWYgKGN0eC0+YnVmKSB7CisKKyAgICAgICAgaWYgKChzaXplX3QpIChjdHgtPmJ1Zi0+ZW5kIC0gY3R4LT5idWYtPmxhc3QpID49IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBjdHgtPmJ1ZjsKKyAgICAgICAgfQorCisgICAgICAgIGN0eC0+c2l6ZSArPSBjdHgtPmJ1Zi0+bGFzdCAtIGN0eC0+YnVmLT5wb3M7CisgICAgfQorCisgICAgaWYgKCEoY3R4LT5idWYgPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKGN0eC0+cG9vbCwgY3R4LT5hbGxvY19zaXplKSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCEoY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhjdHgtPnBvb2wpKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+YnVmID0gY3R4LT5idWY7CisgICAgY2wtPm5leHQgPSBOVUxMOworCisgICAgKmN0eC0+bGFzdF9vdXQgPSBjbDsKKyAgICBjdHgtPmxhc3Rfb3V0ID0gJmNsLT5uZXh0OworCisgICAgcmV0dXJuIGN0eC0+YnVmOworfQorCisjZW5kaWYKKworCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9kaXJfdCAqZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICpuYW1lKQoreworICAgIGlmIChuZ3hfY2xvc2VfZGlyKGRpcikgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2Rpcl9uICIgXCIlc1wiIGZhaWxlZCIsIG5hbWUpOworICAgIH0KKworICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Cit9CisKKworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRvaW5kZXhfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCit7CisgICAgbmd4X2h0dHBfaGFuZGxlcl9wdCAgICAgICAgKmg7CisgICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CisKKyAgICBjbWNmID0gbmd4X2h0dHBfY3ljbGVfZ2V0X21vZHVsZV9tYWluX2NvbmYoY3ljbGUsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0NPTlRFTlRfUEhBU0VdLmhhbmRsZXJzKTsKKyAgICBpZiAoaCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgKmggPSBuZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlcjsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIHZvaWQgKm5neF9odHRwX2F1dG9pbmRleF9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpCit7CisgICAgbmd4X2h0dHBfYXV0b2luZGV4X2xvY19jb25mX3QgICpjb25mOworCisgICAgY29uZiA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9hdXRvaW5kZXhfbG9jX2NvbmZfdCkpOworICAgIGlmIChjb25mID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIGNvbmYtPmVuYWJsZSA9IE5HWF9DT05GX1VOU0VUOworCisgICAgcmV0dXJuIGNvbmY7Cit9CisKKworc3RhdGljIGNoYXIgKm5neF9odHRwX2F1dG9pbmRleF9tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCkKK3sKKyAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfbG9jX2NvbmZfdCAqcHJldiA9IHBhcmVudDsKKyAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfbG9jX2NvbmZfdCAqY29uZiA9IGNoaWxkOworCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsIDApOworCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X2hhbmRsZXIuYwppbmRleCA2OGE5ZDM2Li42MGI2YzAxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X2hhbmRsZXIuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAgKiB0aGF0IHBhdGggY29udGFpbnMgdGhlIHVzdWFsIGZpbGUgaW4gcGxhY2Ugb2YgdGhlIGRpcmVjdG9yeS4KICAqLwogCi1uZ3hfaW50X3Qgbmd4X2h0dHBfaW5kZXhfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2luZGV4X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICpuYW1lOwogICAgIG5neF9mZF90ICAgICAgICAgICAgICAgICAgICBmZDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKaW5kZXggNWQ2MTE2Ny4uNjRmN2MwNyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMKQEAgLTk4LDYgKzk4LDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBwcmVzZXJ2ZV9ob3N0KSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygicHJveHlfc2V0X3hfdXJsIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBzZXRfeF91cmwpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9zZXRfeF9yZWFsX2lwIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCkBAIC04OTQsNiArOTAxLDcgQEAKICAgICBjb25mLT5zZW5kX2xvd2F0ID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAogICAgIGNvbmYtPnByZXNlcnZlX2hvc3QgPSBOR1hfQ09ORl9VTlNFVDsKKyAgICBjb25mLT5zZXRfeF91cmwgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT5zZXRfeF9yZWFsX2lwID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+YWRkX3hfZm9yd2FyZGVkX2ZvciA9IE5HWF9DT05GX1VOU0VUOwogCkBAIC05MzgsNiArOTQ2LDcgQEAKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnNlbmRfbG93YXQsIHByZXYtPnNlbmRfbG93YXQsIDApOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+cHJlc2VydmVfaG9zdCwgcHJldi0+cHJlc2VydmVfaG9zdCwgMCk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+c2V0X3hfdXJsLCBwcmV2LT5zZXRfeF91cmwsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNldF94X3JlYWxfaXAsIHByZXYtPnNldF94X3JlYWxfaXAsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmFkZF94X2ZvcndhcmRlZF9mb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+YWRkX3hfZm9yd2FyZGVkX2ZvciwgMCk7CkBAIC0xMTQ3LDYgKzExNTYsMTAgQEAKIAogICAgICAgICBsY2YtPnBlZXJzLT5udW1iZXIgPSBpOwogCisgICAgICAgIC8qIFNUVUIgKi8KKyAgICAgICAgbGNmLT5wZWVycy0+bWF4X2ZhaWxzID0gMTsKKyAgICAgICAgbGNmLT5wZWVycy0+ZmFpbF90aW1lb3V0ID0gNjA7CisKICAgICAgICAgZm9yIChpID0gMDsgaC0+aF9hZGRyX2xpc3RbaV0gIT0gTlVMTDsgaSsrKSB7CiAgICAgICAgICAgICBsY2YtPnBlZXJzLT5wZWVyc1tpXS5ob3N0LmRhdGEgPSBob3N0OwogICAgICAgICAgICAgbGNmLT5wZWVycy0+cGVlcnNbaV0uaG9zdC5sZW4gPSBsY2YtPnVwc3RyZWFtLT5ob3N0LmxlbjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfaGFuZGxlci5oIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKaW5kZXggM2U3MjFiYS4uNzZkYjY1MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmgKQEAgLTc1LDYgKzc1LDcgQEAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgICBjeWNsaWNfdGVtcF9maWxlOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2hvc3Q7CisgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgc2V0X3hfdXJsOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgIHNldF94X3JlYWxfaXA7CiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICAgYWRkX3hfZm9yd2FyZGVkX2ZvcjsKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgICBwYXNzX3NlcnZlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYyBiL3NyYy9odHRwL21vZHVsZXMvcHJveHkvbmd4X2h0dHBfcHJveHlfdXBzdHJlYW0uYwppbmRleCA4ODQ3OWRhLi45YjNkODg0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV91cHN0cmVhbS5jCkBAIC00Myw2ICs0Myw3IEBACiAKIHN0YXRpYyBjaGFyICBodHRwX3ZlcnNpb25bXSA9ICIgSFRUUC8xLjAiIENSTEY7CiBzdGF0aWMgY2hhciAgaG9zdF9oZWFkZXJbXSA9ICJIb3N0OiAiOworc3RhdGljIGNoYXIgIHhfdXJsX2hlYWRlcltdID0gIlgtVVJMOiBodHRwIjsKIHN0YXRpYyBjaGFyICB4X3JlYWxfaXBfaGVhZGVyW10gPSAiWC1SZWFsLUlQOiAiOwogc3RhdGljIGNoYXIgIHhfZm9yd2FyZGVkX2Zvcl9oZWFkZXJbXSA9ICJYLUZvcndhcmRlZC1Gb3I6ICI7CiBzdGF0aWMgY2hhciAgY29ubmVjdGlvbl9jbG9zZV9oZWFkZXJbXSA9ICJDb25uZWN0aW9uOiBjbG9zZSIgQ1JMRjsKQEAgLTE0MiwxOCArMTQzLDM2IEBACiAgICAgfQogCiAgICAgbGVuICs9IHVjLT51cmkubGVuCi0gICAgICAgICAgICsgci0+dXJpLmxlbiAtIHVjLT5sb2NhdGlvbi0+bGVuICsgZXNjYXBlCi0gICAgICAgICAgICsgMSArIHItPmFyZ3MubGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSBpcyBmb3IgIj8iICovCi0gICAgICAgICAgICsgc2l6ZW9mKGh0dHBfdmVyc2lvbikgLSAxCi0gICAgICAgICAgICsgc2l6ZW9mKGNvbm5lY3Rpb25fY2xvc2VfaGVhZGVyKSAtIDEKLSAgICAgICAgICAgKyAyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyIGlzIGZvciAiXHJcbiIgYXQgdGhlIGhlYWRlciBlbmQgKi8KKyAgICAgICAgKyByLT51cmkubGVuIC0gdWMtPmxvY2F0aW9uLT5sZW4gKyBlc2NhcGUKKyAgICAgICAgKyAxICsgci0+YXJncy5sZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgaXMgZm9yICI/IiAqLworICAgICAgICArIHNpemVvZihodHRwX3ZlcnNpb24pIC0gMQorICAgICAgICArIHNpemVvZihjb25uZWN0aW9uX2Nsb3NlX2hlYWRlcikgLSAxCisgICAgICAgICsgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyIGlzIGZvciAiXHJcbiIgYXQgdGhlIGhlYWRlciBlbmQgKi8KKworCisgICAgaWYgKHAtPmxjZi0+c2V0X3hfdXJsKSB7CisgICAgICAgIGxlbiArPSBzaXplb2YoeF91cmxfaGVhZGVyKSAtIDEKKyAgICAgICAgICAgICsgNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDQgaXMgZm9yICJzOi8vIiAqLworICAgICAgICAgICAgKyByLT5wb3J0X3RleHQtPmxlbgorICAgICAgICAgICAgKyByLT51bnBhcnNlZF91cmkubGVuCisgICAgICAgICAgICArIDI7ICAgICAgICAgICAgICAgICAgICAgICAgLyogMiBpcyBmb3IgIlxyXG4iIGF0IHRoZSBoZWFkZXIgZW5kICovCisKKyAgICAgICAgaWYgKHItPmhlYWRlcnNfaW4uaG9zdCkgeworICAgICAgICAgICAgbGVuICs9IHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbjsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuICs9IHItPnNlcnZlcl9uYW1lLmxlbjsKKyAgICAgICAgfQorCisgICAgfQorCiAKICAgICBpZiAocC0+bGNmLT5wcmVzZXJ2ZV9ob3N0ICYmIHItPmhlYWRlcnNfaW4uaG9zdCkgewogICAgICAgICBsZW4gKz0gc2l6ZW9mKGhvc3RfaGVhZGVyKSAtIDEKLSAgICAgICAgICAgICAgICsgci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuCi0gICAgICAgICAgICAgICArIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMSBpcyBmb3IgIjoiICovCi0gICAgICAgICAgICAgICArIHVjLT5wb3J0X3RleHQubGVuCi0gICAgICAgICAgICAgICArIDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiBpcyBmb3IgIlxyXG4iICovCisgICAgICAgICAgICArIHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbgorICAgICAgICAgICAgKyAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgaXMgZm9yICI6IiAqLworICAgICAgICAgICAgKyB1Yy0+cG9ydF90ZXh0LmxlbgorICAgICAgICAgICAgKyAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgaXMgZm9yICJcclxuIiAqLwogICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgaXMgZm9yICJcclxuIiAqLwogICAgICAgICBsZW4gKz0gc2l6ZW9mKGhvc3RfaGVhZGVyKSAtIDEgKyB1Yy0+aG9zdF9oZWFkZXIubGVuICsgMjsKICAgICB9CkBAIC0xNjcsMTAgKzE4NiwxMCBAQAogICAgIGlmIChwLT5sY2YtPmFkZF94X2ZvcndhcmRlZF9mb3IpIHsKICAgICAgICAgaWYgKHItPmhlYWRlcnNfaW4ueF9mb3J3YXJkZWRfZm9yKSB7CiAgICAgICAgICAgICBsZW4gKz0gc2l6ZW9mKHhfZm9yd2FyZGVkX2Zvcl9oZWFkZXIpIC0gMQotICAgICAgICAgICAgICAgICAgICsgci0+aGVhZGVyc19pbi54X2ZvcndhcmRlZF9mb3ItPnZhbHVlLmxlbgotICAgICAgICAgICAgICAgICAgICsgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiBpcyBvZnIgIiwgIiAqLwotICAgICAgICAgICAgICAgICAgICsgSU5FVF9BRERSU1RSTEVOIC0gMQotICAgICAgICAgICAgICAgICAgICsgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgaXMgZm9yICJcclxuIiAqLworICAgICAgICAgICAgICAgICsgci0+aGVhZGVyc19pbi54X2ZvcndhcmRlZF9mb3ItPnZhbHVlLmxlbgorICAgICAgICAgICAgICAgICsgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMiBpcyBvZnIgIiwgIiAqLworICAgICAgICAgICAgICAgICsgSU5FVF9BRERSU1RSTEVOIC0gMQorICAgICAgICAgICAgICAgICsgMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDIgaXMgZm9yICJcclxuIiAqLwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGVuICs9IHNpemVvZih4X2ZvcndhcmRlZF9mb3JfaGVhZGVyKSAtIDEgKyBJTkVUX0FERFJTVFJMRU4gLSAxICsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyIGlzIGZvciAiXHJcbiIgKi8KQEAgLTI3MSw2ICsyOTAsMzkgQEAKICAgICAqKGItPmxhc3QrKykgPSBDUjsgKihiLT5sYXN0KyspID0gTEY7CiAKIAorICAgIC8qIHRoZSAiWC1VUkwiIGhlYWRlciAqLworCisgICAgaWYgKHAtPmxjZi0+c2V0X3hfdXJsKSB7CisKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgeF91cmxfaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoeF91cmxfaGVhZGVyKSAtIDEpOworCisjaWYgKE5HWF9PUEVOU1NMKQorCisgICAgICAgIGlmIChyLT5jb25uZWN0aW9uLT5zc2wpIHsKKyAgICAgICAgICAgICooYi0+bGFzdCsrKSA9ICdzJzsKKyAgICAgICAgfQorCisjZW5kaWYKKworICAgICAgICAqKGItPmxhc3QrKykgPSAnOic7ICooYi0+bGFzdCsrKSA9ICcvJzsgKihiLT5sYXN0KyspID0gJy8nOworCisgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3QpIHsKKyAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT5zZXJ2ZXJfbmFtZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUubGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnBvcnRfdGV4dC0+ZGF0YSwgci0+cG9ydF90ZXh0LT5sZW4pOworICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCByLT51bnBhcnNlZF91cmkuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dW5wYXJzZWRfdXJpLmxlbik7CisKKyAgICAgICAgKihiLT5sYXN0KyspID0gQ1I7ICooYi0+bGFzdCsrKSA9IExGOworICAgIH0KKworCiAgICAgLyogdGhlICJYLVJlYWwtSVAiIGhlYWRlciAqLwogCiAgICAgaWYgKHAtPmxjZi0+c2V0X3hfcmVhbF9pcCkgewpAQCAtMzM5LDYgKzM5MSwxNCBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoJmhlYWRlcltpXSA9PSByLT5oZWFkZXJzX2luLnhfcmVhbF9pcCAmJiBwLT5sY2YtPnNldF94X3JlYWxfaXApIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCZoZWFkZXJbaV0gPT0gci0+aGVhZGVyc19pbi54X3VybCAmJiBwLT5sY2YtPnNldF94X3VybCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCBoZWFkZXJbaV0ua2V5LmRhdGEsIGhlYWRlcltpXS5rZXkubGVuKTsKIAogICAgICAgICAqKGItPmxhc3QrKykgPSAnOic7ICooYi0+bGFzdCsrKSA9ICcgJzsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDg1NDRlMjUuLjhmMTAxYmEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMTAxMiw3ICsxMDEyLDcgQEAKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgcmV0dXJuIHJjOworICAgIHJldHVybiAoaW50KSByYzsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKaW5kZXggYTA4M2I0NS4uNTk1ZGQ1OSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgewogICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+a2V5LmxlbiA9IDA7CiAgICAgICAgIGxlbiArPSBzaXplb2YoIkxvY2F0aW9uOiBodHRwOi8vIikgLSAxCi0gICAgICAgICAgICAgICArIHItPnNlcnZlcl9uYW1lLT5sZW4gKyByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+dmFsdWUubGVuICsgMjsKKyAgICAgICAgICAgICAgICsgci0+c2VydmVyX25hbWUubGVuICsgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlLmxlbiArIDI7CiAKICAgICAgICAgaWYgKHItPnBvcnQgIT0gODApIHsKICAgICAgICAgICAgIGxlbiArPSByLT5wb3J0X3RleHQtPmxlbjsKQEAgLTM1Niw4ICszNTYsOCBAQAogICAgICAgICBwID0gYi0+bGFzdCArIHNpemVvZigiTG9jYXRpb246ICIpIC0gMTsKICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIkxvY2F0aW9uOiBodHRwOi8vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJMb2NhdGlvbjogaHR0cDovLyIpIC0gMSk7Ci0gICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnNlcnZlcl9uYW1lLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5zZXJ2ZXJfbmFtZS0+bGVuKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgci0+c2VydmVyX25hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUubGVuKTsKICAgICAgICAgaWYgKHItPnBvcnQgIT0gODApIHsKICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnBvcnRfdGV4dC0+ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnBvcnRfdGV4dC0+bGVuKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCA3NDE3M2Q4Li5kNzhhNzc5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC04NCw2ICs4NCw4IEBACiAjaWYgKE5HWF9IVFRQX1BST1hZKQogICAgIHsgbmd4X3N0cmluZygiWC1Gb3J3YXJkZWQtRm9yIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIHhfZm9yd2FyZGVkX2ZvcikgfSwKKyAgICB7IG5neF9zdHJpbmcoIlgtUmVhbC1JUCIpLCBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIHhfcmVhbF9pcCkgfSwKKyAgICB7IG5neF9zdHJpbmcoIlgtVVJMIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgeF91cmwpIH0sCiAjZW5kaWYKICAgICAKICAgICB7IG5neF9udWxsX3N0cmluZywgMCB9CkBAIC0zNTEsNyArMzUzLDcgQEAKICNlbmRpZgogCiAgICAgc2VydmVyX25hbWUgPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKLSAgICByLT5zZXJ2ZXJfbmFtZSA9ICZzZXJ2ZXJfbmFtZS0+bmFtZTsKKyAgICByLT5zZXJ2ZXJfbmFtZSA9IHNlcnZlcl9uYW1lLT5uYW1lOwogCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogICAgIGMtPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7CkBAIC0xMTIyLDcgKzExMjQsMTQgQEAKIAogICAgICAgICAgICAgci0+c3J2X2NvbmYgPSBuYW1lW2ldLmNvcmVfc3J2X2NvbmYtPmN0eC0+c3J2X2NvbmY7CiAgICAgICAgICAgICByLT5sb2NfY29uZiA9IG5hbWVbaV0uY29yZV9zcnZfY29uZi0+Y3R4LT5sb2NfY29uZjsKLSAgICAgICAgICAgIHItPnNlcnZlcl9uYW1lID0gJm5hbWVbaV0ubmFtZTsKKworICAgICAgICAgICAgaWYgKG5hbWVbaV0ud2lsZGNhcmQpIHsKKyAgICAgICAgICAgICAgICByLT5zZXJ2ZXJfbmFtZS5sZW4gPSByLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW47CisgICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUuZGF0YSA9IHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByLT5zZXJ2ZXJfbmFtZSA9IG5hbWVbaV0ubmFtZTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogICAgICAgICAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5maWxlID0gY2xjZi0+ZXJyX2xvZy0+ZmlsZTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCA4YTljOGYyLi5mMWI5NTdiIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0xNDYsNiArMTQ2LDggQEAKIAogI2lmIChOR1hfSFRUUF9QUk9YWSkKICAgICBuZ3hfdGFibGVfZWx0X3QgICp4X2ZvcndhcmRlZF9mb3I7CisgICAgbmd4X3RhYmxlX2VsdF90ICAqeF9yZWFsX2lwOworICAgIG5neF90YWJsZV9lbHRfdCAgKnhfdXJsOwogI2VuZGlmCiAKICAgICBuZ3hfYXJyYXlfdCAgICAgICBjb29raWVzOwpAQCAtMjgzLDcgKzI4NSw3IEBACiAgICAgdWludDMyX3QgICAgICAgICAgICAgaW5fYWRkcjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICBwb3J0OwogICAgIG5neF9zdHJfdCAgICAgICAgICAgKnBvcnRfdGV4dDsgICAgLyogIjo4MCIgKi8KLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICpzZXJ2ZXJfbmFtZTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICBzZXJ2ZXJfbmFtZTsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICp2aXJ0dWFsX25hbWVzOwogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgcGhhc2U7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uYyBiL3NyYy9vcy91bml4L25neF9lcnJuby5jCmluZGV4IDJmYWY2M2EuLjBjOTNkMjMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9lcnJuby5jCisrKyBiL3NyYy9vcy91bml4L25neF9lcnJuby5jCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotI2lmIChIQVZFX1NUUkVSUk9SX1IpCisjaWYgKE5HWF9TVFJFUlJPUl9SKQogCiBuZ3hfaW50X3Qgbmd4X3N0cmVycm9yX3IoaW50IGVyciwgY2hhciAqZXJyc3RyLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTMxLDcgKzMxLDcgQEAKICAgICByZXR1cm4gbGVuOwogfQogCi0jZWxpZiAoSEFWRV9HTlVfU1RSRVJST1JfUikKKyNlbGlmIChOR1hfR05VX1NUUkVSUk9SX1IpCiAKIC8qIExpbnV4IHN0cmVycm9yX3IoKSAqLwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaCBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCmluZGV4IDcyMThiYjIuLmNjOWIxZDEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9lcnJuby5oCisrKyBiL3NyYy9vcy91bml4L25neF9lcnJuby5oCkBAIC01MSw2ICs1MSw4IEBACiAKICNlbHNlCiAKKy8qIFNvbGFyaXMgaGFzIHRocmVhZHMtc2FmZSBzdHJlcnJvcigpICovCisKICNkZWZpbmUgbmd4X3N0cmVycm9yX3IoZXJyLCBlcnJzdHIsIHNpemUpICBcCiAgICAgICAgICAgICAgKGNoYXIgKikgbmd4X2NweXN0cm4oZXJyc3RyLCBzdHJlcnJvcihlcnIpLCBzaXplKSAtIChlcnJzdHIpCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9maWxlcy5jIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKaW5kZXggZjJiYTNhNC4uZGE3NWJhMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMKQEAgLTE1LDcgKzE1LDcgQEAKICAgICBuZ3hfbG9nX2RlYnVnNChOR1hfTE9HX0RFQlVHX0NPUkUsIGZpbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAicmVhZDogJWQsICVYLCAlZCwgIiBPRkZfVF9GTVQsIGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CiAKLSNpZiAoSEFWRV9QUkVBRCkKKyNpZiAoTkdYX1BSRUFEKQogCiAgICAgbiA9IHByZWFkKGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CiAKQEAgLTU3LDcgKzU3LDcgQEAKIHsKICAgICBzc2l6ZV90IG47CiAKLSNpZiAoSEFWRV9QV1JJVEUpCisjaWYgKE5HWF9QV1JJVEUpCiAKICAgICBuID0gcHdyaXRlKGZpbGUtPmZkLCBidWYsIHNpemUsIG9mZnNldCk7CiAKQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGRpci0+aW5mb192YWxpZCA9IDA7CisgICAgZGlyLT52YWxpZF9pbmZvID0gMDsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuaCBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCmluZGV4IDA2YzIyZjUuLmI3ODlkNjEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5oCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCkBAIC05OCw3ICs5OCw3IEBACiAjZGVmaW5lIG5neF9kZWxldGVfZGlyX24gICAgICAgICAicm1kaXIoKSIKIAogCi0jZGVmaW5lIG5neF9kZV9uYW1lKGRpcikgICAgICAgICAoZGlyKS0+ZGUtPmRfbmFtZQorI2RlZmluZSBuZ3hfZGVfbmFtZShkaXIpICAgICAgICAgKCh1X2NoYXIgKikgKGRpciktPmRlLT5kX25hbWUpCiAjaWYgKE5HWF9GUkVFQlNEKQogI2RlZmluZSBuZ3hfZGVfbmFtZWxlbihkaXIpICAgICAgKGRpciktPmRlLT5kX25hbWxlbgogI2Vsc2UKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90eXBlcy5oIGIvc3JjL29zL3VuaXgvbmd4X3R5cGVzLmgKaW5kZXggNDlmYjE3ZC4uODcwYzQxNCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3R5cGVzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3R5cGVzLmgKQEAgLTE5LDcgKzE5LDggQEAKICAgICBESVIgICAgICAgICAgICAgICpkaXI7CiAgICAgc3RydWN0IGRpcmVudCAgICAqZGU7CiAgICAgc3RydWN0IHN0YXQgICAgICAgaW5mbzsKLSAgICB1bnNpZ25lZCAgICAgICAgICBpbmZvX3ZhbGlkOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgdmFsaWRfaW5mbzoxOyAgLyogdW5zaWduZWQgIHZhbGlkX2luZm86MTsgKi8KIH0gbmd4X2Rpcl90OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYwppbmRleCBiZjZmYWNkLi5kZWEzMTA2IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCkBAIC0yNzYsNyArMjc2LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsgCiAgICAgfQogICAgIAotICAgIGRpci0+aW5mb192YWxpZCA9IDE7CisgICAgZGlyLT52YWxpZF9pbmZvID0gMTsKICAgICBkaXItPnJlYWR5ID0gMTsKIAogICAgIHJldHVybiBOR1hfT0s7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmggYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmgKaW5kZXggOTgwYjU4NS4uNmQ2MDMxNSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAjZGVmaW5lIG5neF9kZWxldGVfZGlyX24gICAgICAgICAgICAiUmVtb3ZlRGlyZWN0b3J5KCkiCiAKIAotI2RlZmluZSBuZ3hfZGVfbmFtZShkaXIpICAgICAgICAgICAgKGRpciktPmZkLmNGaWxlTmFtZQorI2RlZmluZSBuZ3hfZGVfbmFtZShkaXIpICAgICAgICAgICAgKCh1X2NoYXIgKikgKGRpciktPmZkLmNGaWxlTmFtZSkKICNkZWZpbmUgbmd4X2RlX25hbWVsZW4oZGlyKSAgICAgICAgIG5neF9zdHJsZW4oKGRpciktPmZkLmNGaWxlTmFtZSkKICNkZWZpbmUgbmd4X2RlX2luZm8obmFtZSwgZGlyKSAgICAgIE5HWF9PSwogI2RlZmluZSBuZ3hfZGVfaW5mb19uICAgICAgICAgICAgICAgImR1bW15KCkiCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3R5cGVzLmggYi9zcmMvb3Mvd2luMzIvbmd4X3R5cGVzLmgKaW5kZXggNDUzNmExZi4uZTdhNTE1MSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF90eXBlcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfdHlwZXMuaApAQCAtMTksOCArMTksOSBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIEhBTkRMRSAgICAgICAgICAgIGRpcjsKICAgICBXSU4zMl9GSU5EX0RBVEEgICBmZDsKLSAgICB1bnNpZ25lZCAgICAgICAgICBpbmZvX3ZhbGlkOwotICAgIHVuc2lnbmVkICAgICAgICAgIHJlYWR5OworCisgICAgdW5zaWduZWQgICAgICAgICAgdmFsaWRfaW5mbzoxOworICAgIHVuc2lnbmVkICAgICAgICAgIHJlYWR5OjE7CiB9IG5neF9kaXJfdDsKIAogCg==