ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggOTZlYTg2NS4uMWI2ZGJlZiAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTE4Miw1ICsxODIsMyBAQAogaWYgWyAiLiRDUFAiID0gIi4iIF07IHRoZW4KICAgICBDUFA9IiRDQyAtRSIKIGZpCi0KLU5HWF9QRVJMX0NGTEFHUz0iJENGTEFHUyIKZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggYWZjYWJlNi4uZjFmOWQzZCAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTkxLDYgKzkxLDggQEAKIENGTEFHUz0iJENGTEFHUyAtd2Q4MTAiCiAjIHBhcmFtZXRlciB3YXMgbmV2ZXIgcmVmZXJlbmNlZAogQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDg2OSIKKyMgYXR0cmlidXRlICJ1bnVzZWQiIGlzIG9ubHkgYWxsb3dlZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdhcm5pbmcgb24gcFRIWF8KK0NGTEFHUz0iJENGTEFHUyAtd2QxMzAxIgogCiAjIFNUVUIKICMgZW51bWVyYXRlZCB0eXBlIG1peGVkIHdpdGggYW5vdGhlciB0eXBlCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9wZXJsL2NvbmYgYi9hdXRvL2xpYi9wZXJsL2NvbmYKaW5kZXggOWRiYzI3OS4uZTAxZjliNmMgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BlcmwvY29uZgorKysgYi9hdXRvL2xpYi9wZXJsL2NvbmYKQEAgLTE5LDkgKzE5LDE2IEBACiAgICAgICAgIGV4aXQgMTsKICAgICBmaQogCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIGAkTkdYX1BFUkwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzYCIKLSAgICAjIGdjYyA0LjEvNC4yCi0gICAgQ0ZMQUdTPWBlY2hvICRDRkxBR1MgfCBzZWQgLWUgJ3MvLVd1bnVzZWQtdmFsdWUvLVduby11bnVzZWQtdmFsdWUvJ2AKKyAgICBOR1hfUEVSTF9DRkxBR1M9IiRDRkxBR1MgYCROR1hfUEVSTCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHNgIgorICAgIE5HWF9QTV9DRkxBR1M9YCROR1hfUEVSTCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBjY29wdHNgCisKKyAgICAjIGdjYyA0LjEvNC4yIHdhcm4gYWJvdXQgdW51c2VkIHZhbHVlcyBpbiBwVEhYXworICAgIE5HWF9QRVJMX0NGTEFHUz1gZWNobyAkTkdYX1BFUkxfQ0ZMQUdTIFwKKyAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICdzLy1XdW51c2VkLXZhbHVlLy1Xbm8tdW51c2VkLXZhbHVlLydgCisgICAgIyBpY2M4IHdhcm5zICdkZWNsYXJhdGlvbiBoaWRlcyBwYXJhbWV0ZXIgIm15X3BlcmwiJyBpbiBFTlRFUiBhbmQgTEVBVkUKKyAgICBOR1hfUEVSTF9DRkxBR1M9YGVjaG8gJE5HWF9QRVJMX0NGTEFHUyBcCisgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAncy8td2QxNzEvLXdkMTcxIC13ZDE1OTkvJ2AKKwogICAgIG5neF9wZXJsX2xkb3B0cz1gJE5HWF9QRVJMIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0c2AKIAogICAgIGlmICROR1hfUEVSTCAtVjp1c2VtdWx0aXBsaWNpdHkgfCBncmVwIGRlZmluZSA+IC9kZXYvbnVsbDsgdGhlbgpkaWZmIC0tZ2l0IGEvYXV0by9saWIvcGVybC9tYWtlIGIvYXV0by9saWIvcGVybC9tYWtlCmluZGV4IGI3YzhjYjMuLjczYWQxMjAgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL3BlcmwvbWFrZQorKysgYi9hdXRvL2xpYi9wZXJsL21ha2UKQEAgLTI0LDkgKzI0LDggQEAKIAljcCAtcCBzcmMvaHR0cC9tb2R1bGVzL3BlcmwvTWFrZWZpbGUuUEwgJE5HWF9PQkpTL3NyYy9odHRwL21vZHVsZXMvcGVybC8KIAogCWNkICROR1hfT0JKUy9zcmMvaHR0cC9tb2R1bGVzL3BlcmwJCQkJXAotCQkmJiBOR1hfUEVSTF9DRkxBR1M9IiROR1hfUEVSTF9DRkxBR1MgJE5HWF9DQ19PUFQiCVwKKwkJJiYgTkdYX1BNX0NGTEFHUz0iXCQoTkdYX1BNX0NGTEFHUykgLWcgJE5HWF9DQ19PUFQiCVwKIAkJCU5HWF9QQ1JFPSRQQ1JFCQkJCQlcCi0JCQlOR1hfWkxJQj0kWkxJQgkJCQkJXAogCQkJTkdYX09CSlM9JE5HWF9PQkpTCQkJCVwKIAkJJE5HWF9QRVJMIE1ha2VmaWxlLlBMCQkJCQlcCiAJCQlMSUI9JE5HWF9QRVJMX01PRFVMRVMKZGlmZiAtLWdpdCBhL2F1dG8vbWFrZSBiL2F1dG8vbWFrZQppbmRleCBmNzljM2IwLi4wMjk5MThjIDEwMDY0NAotLS0gYS9hdXRvL21ha2UKKysrIGIvYXV0by9tYWtlCkBAIC0yMiw2ICsyMiwxMSBAQAogCiBFTkQKIAoraWYgdGVzdCAtbiAiJE5HWF9QRVJMX0NGTEFHUyI7IHRoZW4KKyAgICBlY2hvIE5HWF9QRVJMX0NGTEFHUyA9ICROR1hfUEVSTF9DRkxBR1MgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorICAgIGVjaG8gTkdYX1BNX0NGTEFHUyA9ICROR1hfUE1fQ0ZMQUdTICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCitmaQorCiBpZiBbICIkQk1BS0UiID0gd21ha2UgXTsgdGhlbgogICAgIGVjaG8gTUFLRSA9IHdtYWtlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiAkTkdYX01BS0VGSUxFCiAKQEAgLTIzOCwyMyArMjQzLDM3IEBACiAgICAgICAgIG5neF9jYz0iXCQoQ0MpICRuZ3hfY29tcGlsZV9vcHQgXCQoQ0ZMQUdTKSAkbmd4X3VzZV9wY2ggXCQoQUxMX0lOQ1MpIgogICAgIGVsc2UKICAgICAgICAgbmd4X2NjPSJcJChDQykgJG5neF9jb21waWxlX29wdCBcJChDRkxBR1MpIFwkKENPUkVfSU5DUykgXCQoSFRUUF9JTkNTKSIKKyAgICAgICAgbmd4X3BlcmxfY2M9IlwkKENDKSAkbmd4X2NvbXBpbGVfb3B0IFwkKE5HWF9QRVJMX0NGTEFHUykgIgorICAgICAgICBuZ3hfcGVybF9jYz0iJG5neF9wZXJsX2NjIFwkKENPUkVfSU5DUykgXCQoSFRUUF9JTkNTKSIKICAgICBmaQogCi0gICAgZm9yIG5neF9zcmMgaW4gJEhUVFBfU1JDUworICAgIGZvciBuZ3hfc291cmNlIGluICRIVFRQX1NSQ1MKICAgICBkbwotICAgICAgICBuZ3hfc3JjPWBlY2hvICRuZ3hfc3JjIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAorICAgICAgICBuZ3hfc3JjPWBlY2hvICRuZ3hfc291cmNlIHwgc2VkIC1lICJzL1wvLyRuZ3hfcmVnZXhfZGlyc2VwL2ciYAogICAgICAgICBuZ3hfb2JqPWBlY2hvICRuZ3hfc3JjIFwKICAgICAgICAgICAgIHwgc2VkIC1lICJzI15cKC4qXC5cKWNwcFxcJCMkbmd4X29ianNfZGlyXDEkbmd4X29iamV4dCNnIiBcCiAgICAgICAgICAgICAgICAgICAtZSAicyNeXCguKlwuXCljY1xcJCMkbmd4X29ianNfZGlyXDEkbmd4X29iamV4dCNnIiBcCiAgICAgICAgICAgICAgICAgICAtZSAicyNeXCguKlwuXCljXFwkIyRuZ3hfb2Jqc19kaXJcMSRuZ3hfb2JqZXh0I2ciIFwKICAgICAgICAgICAgICAgICAgIC1lICJzI15cKC4qXC5cKVNcXCQjJG5neF9vYmpzX2RpclwxJG5neF9vYmpleHQjZyJgCiAKLSAgICAgICAgY2F0IDw8IEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQorICAgICAgICBpZiBbICRuZ3hfc291cmNlID0gc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMgXTsgdGhlbgorCisgICAgICAgICAgICBjYXQgPDwgRU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+ICROR1hfTUFLRUZJTEUKKworJG5neF9vYmo6CVwkKENPUkVfREVQUykgXCQoSFRUUF9ERVBTKSRuZ3hfY29udCRuZ3hfc3JjCisJJG5neF9wZXJsX2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfb2JqJG5neF90YWIkbmd4X3NyYyROR1hfQVVYCisKK0VORAorICAgICAgICBlbHNlCisKKyAgICAgICAgICAgIGNhdCA8PCBFTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gJE5HWF9NQUtFRklMRQogCiAkbmd4X29iajoJXCQoQ09SRV9ERVBTKSBcJChIVFRQX0RFUFMpJG5neF9jb250JG5neF9zcmMKIAkkbmd4X2NjJG5neF90YWIkbmd4X29iam91dCRuZ3hfb2JqJG5neF90YWIkbmd4X3NyYyROR1hfQVVYCiAKIEVORAorCisgICAgICAgIGZpCiAgICAgIGRvbmUKIAogZmkKZGlmZiAtLWdpdCBhL2RvY3MvR05VbWFrZWZpbGUgYi9kb2NzL0dOVW1ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMmQ0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL0dOVW1ha2VmaWxlCkBAIC0wLDAgKzEsNTMgQEAKKworVkVSPQkkKHNoZWxsIGdyZXAgTkdJTlhfVkVSIHNyYy9jb3JlL25naW54LmgJCQkJXAorCQl8IHNlZCAtZSAncyVeLipcIm5naW54L1woLipcKVwiJVwxJScpCitOR0lOWD0JbmdpbngtJChWRVIpCitURU1QPQl0bXAKK0NQPQkkKEhPTUUpL2phdmEKKworZGVmaW5lICBYU0xTY3JpcHQKKwlqYXZhdm0gLWNwICQoQ1ApL3hzbHMvc2F4b24uamFyOiQoQ1ApL3hzbHMveHNscy5qYXIJCVwKKwkJY29tLnBhdWx0LlN0eWxlU2hlZXQJCQkJCVwKKwkJLXggY29tLnBhdWx0LlhYIC15IGNvbS5wYXVsdC5YWAkJCQlcCisJJCgxKSBkb2NzL3hzbHMvZHVtcC54c2xzCQkJCQlcCisJfCBhd2sgJ0JFR0lOe2U9MH0vXlxuKiQkL3tlPTE7bmV4dH17aWYoZSl7cHJpbnQiIjtlPTB9O3ByaW50fScgPiAkKDIpCisKKwlpZiBbICEgLXMgJCgyKSBdOyB0aGVuIHJtICQoMik7IGZpOyB0ZXN0IC1zICQoMikKK2VuZGVmCisKK2RlZmluZSAgWFNMVAorCXhzbHRwcm9jICQoc2hlbGwgZWNobyAkNAkJCQkJXAorCQl8IHNlZCAtZSAicy9cKFtePSBdKlwpPVwoW149IF0qXCkvLS1wYXJhbSBcMSBcIidcMidcIi9nIikgXAorCQkkMyAkMQkJCQkJCQlcCisJPiAkKEhUTUwpLyQoc3RyaXAgJCgyKSkKK2VuZGVmCisKKworY2hhbmdlczoJJChURU1QKS8kKE5HSU5YKS9DSEFOR0VTLnJ1CQkJCVwKKwkJJChURU1QKS8kKE5HSU5YKS9DSEFOR0VTCisKKworJChURU1QKS8kKE5HSU5YKS9DSEFOR0VTLnJ1Oglkb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAkJXAorCQkJCWRvY3MveHNsdC9jaGFuZ2VzLnhzbHQKKworCXRlc3QgLWQgJChURU1QKS8kKE5HSU5YKSB8fCBta2RpciAtcCAkKFRFTVApLyQoTkdJTlgpCisKKwl4c2x0cHJvYyAtLXBhcmFtIGxhbmcgIidydSciCQkJCQlcCisJCS1vICQoVEVNUCkvJChOR0lOWCkvQ0hBTkdFUy5ydQkJCQlcCisJCWRvY3MveHNsdC9jaGFuZ2VzLnhzbHQgZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKworCiskKFRFTVApLyQoTkdJTlgpL0NIQU5HRVM6CWRvY3MveG1sL25naW54L2NoYW5nZXMueG1sCQlcCisJCQkJZG9jcy94c2x0L2NoYW5nZXMueHNsdAorCisJdGVzdCAtZCAkKFRFTVApLyQoTkdJTlgpIHx8IG1rZGlyIC0gcCQoVEVNUCkvJChOR0lOWCkKKworCXhzbHRwcm9jIC0tcGFyYW0gbGFuZyAiJ2VuJyIJCQkJCVwKKwkJLW8gJChURU1QKS8kKE5HSU5YKS9DSEFOR0VTCQkJCVwKKwkJZG9jcy94c2x0L2NoYW5nZXMueHNsdCBkb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorCisKK2RvY3MveHNsdC9jaGFuZ2VzLnhzbHQ6CQlkb2NzL3hzbHMvY2hhbmdlcy54c2xzCisKKwkkKGNhbGwgWFNMU2NyaXB0LCBkb2NzL3hzbHMvY2hhbmdlcy54c2xzLCAkQCkKKwpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCA5MjBiMGEzLi4wYWQ4NmM1IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOCw5ICs4LDggQEAKIDx0aXRsZSBsYW5nPSJydSI+6drNxc7FzsnRINcgbmdpbng8L3RpdGxlPgogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCi08IS0tCiAKLTxjaGFuZ2VzIHZlcj0iMC40LjAiIGRhdGU9IjE5LjA4LjIwMDYiPgorPGNoYW5nZXMgdmVyPSIwLjQuMCIgZGF0ZT0iMzAuMDguMjAwNiI+CiAKIDxjaGFuZ2U+CiA8cGFyYSBsYW5nPSJydSI+CkBAIC0yMywxMyArMjIsNzMgQEAKIDwvcGFyYT4KIDwvY2hhbmdlPgogCi08L2NoYW5nZXM+Cis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivUxdDF0tgg1MXMzyDawdDSz9PBINcgzc/E1czFIG5neF9odHRwX3BlcmxfbW9kdWxlIM7FINPeydTZ18HF1NPRCivawdLBzsXFOiDO1dbOzyDR187PIMnOycPJydLP18HU2CDe1MXOycUg0yDQz83P3djAIM3F1M/EwSAkci0+aGFzX3JlcXVlc3RfYm9keS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyB0aGUgcmVxdWVzdCBib2R5IGlzIG5vdCByZWFkIGJlZm9yZWhhbmQgZm9yIHRoZSBuZ3hfaHR0cF9wZXJsX21vZHVsZToKK2l0J3MgcmVxdWlyZWQgdG8gc3RhcnQgdGhlIHJlYWRpbmcgdXNpbmcgdGhlICRyLT5oYXNfcmVxdWVzdF9ib2R5IG1ldGhvZC4KKzwvcGFyYT4KKzwvY2hhbmdlPgogCi0tLT4KKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzNggbmd4X2h0dHBfcGVybF9tb2R1bGUg0M/ExMXS1snXwcXUIMvPxCDXz9rX0sHUwSBERUNMSU5FRC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZ3hfaHR0cF9wZXJsX21vZHVsZSBzdXBwb3J0cyB0aGUgREVDTElORUQgcmV0dXJuIGNvZGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9kYXZfbW9kdWxlINDPxMTF0tbJ18HF1CDXyM/E0d3VwCDT1NLPy9Ug2sHHz8zP18vBICJEYXRlIgorxMzRIM3F1M/EwSBQVVQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfZGF2X21vZHVsZSBzdXBwb3J0cyB0aGUgaW5jb21pbmcgIkRhdGUiIGhlYWRlciBsaW5lCitmb3IgdGhlIFBVVCBtZXRob2QuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBzc2kg0sHCz9TBxdQg187V1NLJIMLMz8vBIGlmLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJzc2kiIGRpcmVjdGl2ZSBpcyBhdmFpbGFibGUgaW5zaWRlIHRoZSAiaWYiIGJsb2NrLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSz8nTyM/Eycwgc2VnbWVudGF0aW9uIGZhdWx0LCDF08zJINcgxMnSxcvUydfFIGluZGV4IMnT0M/M2NrP18HMwdPYCivQxdLFzcXOztnFIMkg0NLJINzUz80g0MXS18/FIMnN0SDJzsTFy9POz8fPIMbByszBIMLZzM8gwsXaINDF0sXNxc7O2cg7CivP28nCy8Eg0M/R18nMwdPYINcgMC4xLjI5LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyZWQgaWYgdGhlcmUgd2FzIGFuICJpbmRleCIgZGlyZWN0aXZlIHdpdGgKK3ZhcmlhYmxlcyBhbmQgdGhlIGZpcnN0IGluZGV4IG5hbWUgd2FzIHdpdGhvdXQgdmFyaWFibGVzOworYnVnIGFwcGVhcmVkIGluIDAuMS4yOS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CiAKIAogPGNoYW5nZXMgdmVyPSIwLjMuNjEiIGRhdGU9IjI4LjA4LjIwMDYiPgogCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgdGNwX25vZGVsYXkg1MXQxdLYINDPINXNz8zewc7JwCDXy8zA3sXOwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyB0aGUgInRjcF9ub2RlbGF5IiBkaXJlY3RpdmUgaXMgdHVybmVkIG9uIGJ5IGRlZmF1bHQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKwogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KIDxwYXJhIGxhbmc9InJ1Ij4KIMTJ0sXL1MnXwSBtc2llX3JlZnJlc2guCmRpZmYgLS1naXQgYS9taXNjL0dOVW1ha2VmaWxlIGIvbWlzYy9HTlVtYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjgyMjEwCi0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9HTlVtYWtlZmlsZQpAQCAtMCwwICsxLDY5IEBACisKK1ZFUj0JJChzaGVsbCBncmVwIE5HSU5YX1ZFUiBzcmMvY29yZS9uZ2lueC5oCQkJCVwKKwkJfCBzZWQgLWUgJ3MlXi4qXCJuZ2lueC9cKC4qXClcIiVcMSUnKQorTkdJTlg9CW5naW54LSQoVkVSKQorVEVNUD0JdG1wCisKKworcmVsZWFzZToKKwlybSAtcmYgJChURU1QKQorCisJc3ZuIGV4cG9ydCAtckhFQUQgLiAkKFRFTVApLyQoTkdJTlgpCisKKwltdiAkKFRFTVApLyQoTkdJTlgpL2F1dG8vY29uZmlndXJlICQoVEVNUCkvJChOR0lOWCkKKworCSMgZGVsZXRlIGluY29tcGxldGUgc291cmNlcworCXJtICQoVEVNUCkvJChOR0lOWCkvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCisJcm0gJChURU1QKS8kKE5HSU5YKS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3RleC5jCisJcm0gJChURU1QKS8kKE5HSU5YKS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuKgorCXJtIC1yICQoVEVNUCkvJChOR0lOWCkvc3JjL29zL3dpbjMyCisKKwlybSAkKFRFTVApLyQoTkdJTlgpL3NyYy9jb3JlL25neF9zbGFiLioKKwlybSAkKFRFTVApLyQoTkdJTlgpL3NyYy9jb3JlL25neF9yZXNvbHZlci4qCisKKwlybSAtciAkKFRFTVApLyQoTkdJTlgpL3NyYy9teXNxbAorCisJcm0gJChURU1QKS8kKE5HSU5YKS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXR1c19tb2R1bGUuYworCisJbXYgJChURU1QKS8kKE5HSU5YKS9kb2NzL3RleHQvTElDRU5TRSAkKFRFTVApLyQoTkdJTlgpCisJbXYgJChURU1QKS8kKE5HSU5YKS9kb2NzL3RleHQvUkVBRE1FICQoVEVNUCkvJChOR0lOWCkKKwltdiAkKFRFTVApLyQoTkdJTlgpL2RvY3MvaHRtbCAkKFRFTVApLyQoTkdJTlgpCisKKwkkKE1BS0UpIC1mIGRvY3MvR05VbWFrZWZpbGUgY2hhbmdlcworCisJcm0gLXIgJChURU1QKS8kKE5HSU5YKS9kb2NzCisJcm0gLXIgJChURU1QKS8kKE5HSU5YKS9taXNjCisKKwl0YXIgLWMgLXogLWYgJChOR0lOWCkudGFyLmd6IC0tZGlyZWN0b3J5ICQoVEVNUCkgJChOR0lOWCkKKworCitpY29uczoJc3JjL29zL3dpbjMyL25naW54LmljbyBzcmMvb3Mvd2luMzIvbmdpbnhfdHJheS5pY28KKworIyAzMngzMiBhbmQgMTZ4MTYgaWNvbnMKKworc3JjL29zL3dpbjMyL25naW54LmljbzoJc3JjL29zL3dpbjMyL25naW54X2ljb24zMi54cG0JCQlcCisJCQlzcmMvb3Mvd2luMzIvbmdpbnhfaWNvbjE2LnhwbQorCisJdGVzdCAtZCAkKFRFTVApIHx8IG1rZGlyICQoVEVNUCkKKworCXhwbXRvcHBtIC0tYWxwaGFvdXQ9JChURU1QKS9uZ2lueDMyLnBibQkJCQlcCisJCXNyYy9vcy93aW4zMi9uZ2lueF9pY29uMzIueHBtID4gJChURU1QKS9uZ2lueDMyLnBwbQorCisJeHBtdG9wcG0gLS1hbHBoYW91dD0kKFRFTVApL25naW54MTYucGJtCQkJCVwKKwkJc3JjL29zL3dpbjMyL25naW54X2ljb24xNi54cG0gPiAkKFRFTVApL25naW54MTYucHBtCisKKwlwcG10b3dpbmljb24gLW91dHB1dCBzcmMvb3Mvd2luMzIvbmdpbnguaWNvIC1hbmRwZ21zCQlcCisJCSQoVEVNUCkvbmdpbngzMi5wcG0gJChURU1QKS9uZ2lueDMyLnBibQkJCVwKKwkJJChURU1QKS9uZ2lueDE2LnBwbSAkKFRFTVApL25naW54MTYucGJtCisKKyMgdHJheSBpY29uCisKK3NyYy9vcy93aW4zMi9uZ2lueF90cmF5LmljbzoJc3JjL29zL3dpbjMyL25naW54X3RyYXkueHBtCisKKwl0ZXN0IC1kICQoVEVNUCkgfHwgbWtkaXIgJChURU1QKQorCisJeHBtdG9wcG0gLS1hbHBoYW91dD0kKFRFTVApL25naW54X3RyYXkucGJtCQkJXAorCQlzcmMvb3Mvd2luMzIvbmdpbnhfdHJheS54cG0gPiAkKFRFTVApL25naW54X3RyYXkucHBtCisKKwlwcG10b3dpbmljb24gLW91dHB1dCBzcmMvb3Mvd2luMzIvbmdpbnhfdHJheS5pY28gLWFuZHBnbXMJXAorCQkkKFRFTVApL25naW54X3RyYXkucHBtICQoVEVNUCkvbmdpbnhfdHJheS5wYm0KZGlmZiAtLWdpdCBhL21pc2MvUkVBRE1FIGIvbWlzYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUyMmFiYQotLS0gL2Rldi9udWxsCisrKyBiL21pc2MvUkVBRE1FCkBAIC0wLDAgKzEsMTYgQEAKKworR05VbWFrZWZpbGUsIGluIHN2biBpdCBpcyBhdmFpbGFibGUgc2luY2UgMC40LjAgb25seS4KKworCittYWtlIC1mIG1pc2MvR05VbWFrZWZpbGUgcmVsZWFzZQorCit0aGUgcmVxdWlyZWQgdG9vbHM6CisqKSB4c2x0cHJvYyB0byBidWlsZCBDSEFOR0VTLAorKikgamF2YSBhbmQgWFNMU2NyaXB0ICggaHR0cDovL3BhdWx0LmNvbS9wYXVsdC9YU0xTY3JpcHQvICkgdG8gYnVpbGQgWFNMVHMKKyAgIGZyb20gWFNMU2NyaXB0IHNvdXJjZXMuCisKKworbWFrZSAtZiBtaXNjL0dOVW1ha2VmaWxlIGljb25zCisKK3RoZSByZXF1aXJlZCB0b29sOgorKikgbmV0cGJtIHRvIGNyZWF0ZSBXaW4zMiBpY29ucyBmcm9tIHhwbSBzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggMWJhOTcxOS4uM2RhMTQyMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjYxIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuNC4wIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWNjZXNzX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hY2Nlc3NfbW9kdWxlLmMKaW5kZXggOTNjODY1Mi4uMmNkOGE4ZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hY2Nlc3NfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hY2Nlc3NfbW9kdWxlLmMKQEAgLTI5LDcgKzI5LDcgQEAKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9hY2Nlc3NfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9hY2Nlc3NfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2FjY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2FjY2Vzc19pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2h0dHBfYWNjZXNzX2NvbW1hbmRzW10gPSB7CkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfYWNjZXNzX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfYWNjZXNzX2luaXQsICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtNzYsNyArNzYsNyBAQAogICAgIG5neF9odHRwX2FjY2Vzc19jb21tYW5kcywgICAgICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX2FjY2Vzc19pbml0LCAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC0yMTUsMTIgKzIxNSwxMiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2FjY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX2FjY2Vzc19pbml0KG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICpoOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCi0gICAgY21jZiA9IG5neF9odHRwX2N5Y2xlX2dldF9tb2R1bGVfbWFpbl9jb25mKGN5Y2xlLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgY21jZiA9IG5neF9odHRwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0FDQ0VTU19QSEFTRV0uaGFuZGxlcnMpOwogICAgIGlmIChoID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYWRkaXRpb25fZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hZGRpdGlvbl9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMzEyMDlmOS4uOWRiODdiZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hZGRpdGlvbl9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hZGRpdGlvbl9maWx0ZXJfbW9kdWxlLmMKQEAgLTIwLDEwICsyMCwxMCBAQAogfSBuZ3hfaHR0cF9hZGRpdGlvbl9jdHhfdDsKIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2FkZGl0aW9uX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfYWRkaXRpb25fY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2FkZGl0aW9uX21lcmdlX2NvbmYobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBhcmVudCwKICAgICB2b2lkICpjaGlsZCk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2FkZGl0aW9uX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2h0dHBfYWRkaXRpb25fY29tbWFuZHNbXSA9IHsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9hZGRpdGlvbl9maWx0ZXJfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9hZGRpdGlvbl9maWx0ZXJfaW5pdCwgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgbmd4X2h0dHBfYWRkaXRpb25fY29tbWFuZHMsICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfYWRkaXRpb25fZmlsdGVyX2luaXQsICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTE3OCw3ICsxNzgsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2FkZGl0aW9uX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX2FkZGl0aW9uX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyOwogICAgIG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfYWRkaXRpb25faGVhZGVyX2ZpbHRlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYwppbmRleCAxMTM1MjdmLi41YTRmOWQ4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfYXV0aF9iYXNpY19jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2F1dGhfYmFzaWNfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dGhfYmFzaWNfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2luaXQobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2F1dGhfYmFzaWMobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpOwogCiAKQEAgLTYyLDcgKzYyLDcgQEAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfYXV0aF9iYXNpY19pbml0LCAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtODEsNyArODEsNyBAQAogICAgIG5neF9odHRwX2F1dGhfYmFzaWNfY29tbWFuZHMsICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX2F1dGhfYmFzaWNfaW5pdCwgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC0zNTEsMTIgKzM1MSwxMiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2F1dGhfYmFzaWNfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaHR0cF9hdXRoX2Jhc2ljX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfaGFuZGxlcl9wdCAgICAgICAgKmg7CiAgICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CiAKLSAgICBjbWNmID0gbmd4X2h0dHBfY3ljbGVfZ2V0X21vZHVsZV9tYWluX2NvbmYoY3ljbGUsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICBjbWNmID0gbmd4X2h0dHBfY29uZl9nZXRfbW9kdWxlX21haW5fY29uZihjZiwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCiAgICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfQUNDRVNTX1BIQVNFXS5oYW5kbGVycyk7CiAgICAgaWYgKGggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwppbmRleCA3MDY0ZjM3Li4xYzc3MDkzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwpAQCAtNDgsNyArNDgsNyBAQAogICAgIGNvbnN0IHZvaWQgKnR3byk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2Rpcl90ICpkaXIsIG5neF9zdHJfdCAqbmFtZSk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2F1dG9pbmRleF9pbml0KG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9hdXRvaW5kZXhfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9hdXRvaW5kZXhfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7CkBAIC04Myw3ICs4Myw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfYXV0b2luZGV4X2luaXQsICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtMTAyLDcgKzEwMiw3IEBACiAgICAgbmd4X2h0dHBfYXV0b2luZGV4X2NvbW1hbmRzLCAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfYXV0b2luZGV4X2luaXQsICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTU5MCwyNSArNTkwLDYgQEAKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9hdXRvaW5kZXhfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCi17Ci0gICAgbmd4X2h0dHBfaGFuZGxlcl9wdCAgICAgICAgKmg7Ci0gICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7Ci0KLSAgICBjbWNmID0gbmd4X2h0dHBfY3ljbGVfZ2V0X21vZHVsZV9tYWluX2NvbmYoY3ljbGUsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0NPTlRFTlRfUEhBU0VdLmhhbmRsZXJzKTsKLSAgICBpZiAoaCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQotCi0gICAgKmggPSBuZ3hfaHR0cF9hdXRvaW5kZXhfaGFuZGxlcjsKLQotICAgIHJldHVybiBOR1hfT0s7Ci19Ci0KLQogc3RhdGljIHZvaWQgKgogbmd4X2h0dHBfYXV0b2luZGV4X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZikKIHsKQEAgLTYzOSwzICs2MjAsMjIgQEAKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9hdXRvaW5kZXhfaW5pdChuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKKyAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKKworICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICBoID0gbmd4X2FycmF5X3B1c2goJmNtY2YtPnBoYXNlc1tOR1hfSFRUUF9DT05URU5UX1BIQVNFXS5oYW5kbGVycyk7CisgICAgaWYgKGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgICpoID0gbmd4X2h0dHBfYXV0b2luZGV4X2hhbmRsZXI7CisKKyAgICByZXR1cm4gTkdYX09LOworfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggYWI2ZjVjZS4uYmY2ZWNjOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCkBAIC0xMDIsOCArMTAyLDYgQEAKICAgICB2b2lkICpjb25mKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfYWRkX2NoYXJzZXQobmd4X2FycmF5X3QgKmNoYXJzZXRzLCBuZ3hfc3RyX3QgKm5hbWUpOwogCi1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKLQogc3RhdGljIHZvaWQgKm5neF9odHRwX2NoYXJzZXRfY3JlYXRlX21haW5fY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfY2hhcnNldF9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2NoYXJzZXRfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCkBAIC0xNjksNyArMTY3LDcgQEAKICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9jb21tYW5kcywgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9pbml0LCAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMTMzNCwxOSArMTMzMiw2IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCi17Ci0gICAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXI7Ci0gICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF9jaGFyc2V0X2hlYWRlcl9maWx0ZXI7Ci0KLSAgICBuZ3hfaHR0cF9uZXh0X2JvZHlfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2JvZHlfZmlsdGVyOwotICAgIG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlciA9IG5neF9odHRwX2NoYXJzZXRfYm9keV9maWx0ZXI7Ci0KLSAgICByZXR1cm4gTkdYX09LOwotfQotCi0KIHN0YXRpYyB2b2lkICoKIG5neF9odHRwX2NoYXJzZXRfY3JlYXRlX21haW5fY29uZihuZ3hfY29uZl90ICpjZikKIHsKQEAgLTE1MTYsNSArMTUwMSwxMSBAQAogICAgICAgICBkc3RbdGFibGVzW3RdLnNyY10gPSB0YWJsZXNbdF0uZHN0MnNyYzsKICAgICB9CiAKKyAgICBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcjsKKyAgICBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX2NoYXJzZXRfaGVhZGVyX2ZpbHRlcjsKKworICAgIG5neF9odHRwX25leHRfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXI7CisgICAgbmd4X2h0dHBfdG9wX2JvZHlfZmlsdGVyID0gbmd4X2h0dHBfY2hhcnNldF9ib2R5X2ZpbHRlcjsKKwogICAgIHJldHVybiBOR1hfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA0ZTAyMTk0Li4zY2MyMGViIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTksMTIgKzksMTIgQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX2NodW5rZWRfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfY2h1bmtlZF9maWx0ZXJfaW5pdCwgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtMzMsNyArMzMsNyBAQAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX2NodW5rZWRfZmlsdGVyX2luaXQsICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC0xODMsNyArMTgzLDcgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9jaHVua2VkX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX2NodW5rZWRfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXI7CiAgICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF9jaHVua2VkX2hlYWRlcl9maWx0ZXI7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Rhdl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCmluZGV4IDhiZWRlNzMuLjAyZGQzODggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZGF2X21vZHVsZS5jCkBAIC0yOCw3ICsyOCw3IEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfZGF2X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfZGF2X21lcmdlX2xvY19jb25mKG5neF9jb25mX3QgKmNmLAogICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9kYXZfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9kYXZfaW5pdChuZ3hfY29uZl90ICpjZik7CiAKIAogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2h0dHBfZGF2X21ldGhvZHNfbWFza1tdID0gewpAQCAtNjksNyArNjksNyBAQAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX2Rhdl9tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX2Rhdl9pbml0LCAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTg4LDcgKzg4LDcgQEAKICAgICBuZ3hfaHR0cF9kYXZfY29tbWFuZHMsICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9kYXZfaW5pdCwgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMjQ1LDYgKzI0NSw3IEBACiB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICpmYWlsZWQ7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICpuYW1lOworICAgIHRpbWVfdCAgICAgICAgICAgICAgICAgICAgZGF0ZTsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgIGVycjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgKnRlbXAsIHBhdGg7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBzdGF0dXM7CkBAIC0yOTUsNiArMjk2LDI0IEBACiAKICNlbmRpZgogCisgICAgaWYgKHItPmhlYWRlcnNfaW4uZGF0ZSkgeworICAgICAgICBkYXRlID0gbmd4X2h0dHBfcGFyc2VfdGltZShyLT5oZWFkZXJzX2luLmRhdGUtPnZhbHVlLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uZGF0ZS0+dmFsdWUubGVuKTsKKworICAgICAgICBpZiAoZGF0ZSAhPSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfc2V0X2ZpbGVfdGltZSh0ZW1wLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnJlcXVlc3RfYm9keS0+dGVtcF9maWxlLT5maWxlLmZkLCBkYXRlKQorICAgICAgICAgICAgICAgICE9IE5HWF9PSykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfZXJybm87CisgICAgICAgICAgICAgICAgZmFpbGVkID0gbmd4X3NldF9maWxlX3RpbWVfbjsKKyAgICAgICAgICAgICAgICBuYW1lID0gdGVtcC0+ZGF0YTsKKworICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgZmFpbGVkID0gbmd4X3JlbmFtZV9maWxlX247CiAgICAgbmFtZSA9IHBhdGguZGF0YTsKIApAQCAtMzMyLDEzICszNTEsMTAgQEAKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogICAgIH0KIAotCi0jZWxzZQorI2VuZGlmCiAKIGZhaWxlZDoKIAotI2VuZGlmCi0KICAgICBpZiAobmd4X2RlbGV0ZV9maWxlKHRlbXAtPmRhdGEpID09IE5HWF9GSUxFX0VSUk9SKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCByLT5jb25uZWN0aW9uLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZGVsZXRlX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLApAQCAtNTQzLDEyICs1NTksMTIgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9kYXZfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaHR0cF9kYXZfaW5pdChuZ3hfY29uZl90ICpjZikKIHsKICAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAotICAgIGNtY2YgPSBuZ3hfaHR0cF9jeWNsZV9nZXRfbW9kdWxlX21haW5fY29uZihjeWNsZSwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICBoID0gbmd4X2FycmF5X3B1c2goJmNtY2YtPnBoYXNlc1tOR1hfSFRUUF9DT05URU5UX1BIQVNFXS5oYW5kbGVycyk7CiAgICAgaWYgKGggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMjZjMTY0OS4uZTNiZjc1MiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCkBAIC04Myw3ICs4Myw3IEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2d6aXBfcmF0aW9fdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9nemlwX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2d6aXBfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIHZvaWQgKm5neF9odHRwX2d6aXBfY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2d6aXBfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwKICAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgbmd4X2h0dHBfZ3ppcF9hZGRfdmFyaWFibGVzLCAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfaW5pdCwgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgICAgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfY29tbWFuZHMsICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfZ3ppcF9maWx0ZXJfaW5pdCwgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTEwMzAsMTkgKzEwMzAsNiBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2d6aXBfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQotewotICAgIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyOwotICAgIG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfZ3ppcF9oZWFkZXJfZmlsdGVyOwotCi0gICAgbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlciA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcjsKLSAgICBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF9nemlwX2JvZHlfZmlsdGVyOwotCi0gICAgcmV0dXJuIE5HWF9PSzsKLX0KLQotCiBzdGF0aWMgdm9pZCAqCiBuZ3hfaHR0cF9nemlwX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKQogewpAQCAtMTEyMyw2ICsxMTEwLDE5IEBACiB9CiAKIAorc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfZ3ppcF9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcjsKKyAgICBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX2d6aXBfaGVhZGVyX2ZpbHRlcjsKKworICAgIG5neF9odHRwX25leHRfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXI7CisgICAgbmd4X2h0dHBfdG9wX2JvZHlfZmlsdGVyID0gbmd4X2h0dHBfZ3ppcF9ib2R5X2ZpbHRlcjsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwogc3RhdGljIGNoYXIgKgogbmd4X2h0dHBfZ3ppcF90eXBlcyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKaW5kZXggODA2NTc0Mi4uZmNiMzFhNyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCkBAIC0yOCwxMCArMjgsMTAgQEAKICNkZWZpbmUgTkdYX0hUVFBfRVhQSVJFU19FUE9DSCAgIC0yMTQ3NDgzNjQ1CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfaGVhZGVyc19jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfaGVhZGVyc19tZXJnZV9jb25mKG5neF9jb25mX3QgKmNmLAogICAgIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9oZWFkZXJzX2V4cGlyZXMobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwKICAgICB2b2lkICpjb25mKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9oZWFkZXJzX2FkZChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLApAQCAtNjIsNyArNjIsNyBAQAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfaW5pdCwgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtODEsNyArODEsNyBAQAogICAgIG5neF9odHRwX2hlYWRlcnNfZmlsdGVyX2NvbW1hbmRzLCAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX2hlYWRlcnNfZmlsdGVyX2luaXQsICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC0yNzQsMTYgKzI3NCw2IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCi17Ci0gICAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXI7Ci0gICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcjsKLQotICAgIHJldHVybiBOR1hfT0s7Ci19Ci0KLQogc3RhdGljIHZvaWQgKgogbmd4X2h0dHBfaGVhZGVyc19jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZikKIHsKQEAgLTMzMSw2ICszMjEsMTYgQEAKIH0KIAogCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKQoreworICAgIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyOworICAgIG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfaGVhZGVyc19maWx0ZXI7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKIHN0YXRpYyBjaGFyICoKIG5neF9odHRwX2hlYWRlcnNfZXhwaXJlcyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKaW5kZXggYjkzZTZmYi4uY2QxYzUxZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCkBAIC00MCw3ICs0MCw3IEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2luZGV4X2Vycm9yKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF9pbmRleF9jdHhfdCAqY3R4LCBuZ3hfZXJyX3QgZXJyKTsKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9pbmRleF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2luZGV4X2luaXQobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIHZvaWQgKm5neF9odHRwX2luZGV4X2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfaW5kZXhfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7CkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfaW5kZXhfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9pbmRleF9pbml0LCAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC05Myw3ICs5Myw3IEBACiAgICAgbmd4X2h0dHBfaW5kZXhfY29tbWFuZHMsICAgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfaW5kZXhfaW5pdCwgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTE5OCw3ICsxOTgsNyBAQAogICAgICAgICAgICAgbGVuICs9IDE2OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxlbiA+IGN0eC0+cGF0aC5sZW4pIHsKKyAgICAgICAgaWYgKGxlbiA+IChzaXplX3QpIChjdHgtPnBhdGguZGF0YSArIGN0eC0+cGF0aC5sZW4gLSBjdHgtPmluZGV4LmRhdGEpKSB7CiAKICAgICAgICAgICAgIGxhc3QgPSBuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgociwgJmN0eC0+cGF0aCwgbGVuKTsKICAgICAgICAgICAgIGlmIChsYXN0ID09IE5VTEwpIHsKQEAgLTM3OCw3ICszNzgsNyBAQAogICAgIH0KIAogICAgIGNvbmYtPmluZGljZXMgPSBOVUxMOwotICAgIGNvbmYtPm1heF9pbmRleF9sZW4gPSAxOworICAgIGNvbmYtPm1heF9pbmRleF9sZW4gPSAwOwogCiAgICAgcmV0dXJuIGNvbmY7CiB9CkBAIC00MjIsNiArNDIyLDI1IEBACiB9CiAKIAorc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfaW5kZXhfaW5pdChuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKKyAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKKworICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICBoID0gbmd4X2FycmF5X3B1c2goJmNtY2YtPnBoYXNlc1tOR1hfSFRUUF9DT05URU5UX1BIQVNFXS5oYW5kbGVycyk7CisgICAgaWYgKGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgICpoID0gbmd4X2h0dHBfaW5kZXhfaGFuZGxlcjsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKwogLyogVE9ETzogd2FybiBhYm91dCBkdXBsaWNhdGUgaW5kaWNlcyAqLwogCiBzdGF0aWMgY2hhciAqCkBAIC00MjksOCArNDQ4LDggQEAKIHsKICAgICBuZ3hfaHR0cF9pbmRleF9sb2NfY29uZl90ICppbGNmID0gY29uZjsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpLCBuOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICp2YWx1ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgbjsKICAgICBuZ3hfaHR0cF9pbmRleF90ICAgICAgICAgICAqaW5kZXg7CiAgICAgbmd4X2h0dHBfc2NyaXB0X2NvbXBpbGVfdCAgIHNjOwogCkBAIC00NzEsOSArNDkwLDcgQEAKICAgICAgICAgbiA9IG5neF9odHRwX3NjcmlwdF92YXJpYWJsZXNfY291bnQoJnZhbHVlW2ldKTsKIAogICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoaWxjZi0+bWF4X2luZGV4X2xlbiAhPSAwCi0gICAgICAgICAgICAgICAgJiYgaWxjZi0+bWF4X2luZGV4X2xlbiA8IGluZGV4LT5uYW1lLmxlbikKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbGNmLT5tYXhfaW5kZXhfbGVuIDwgaW5kZXgtPm5hbWUubGVuKSB7CiAgICAgICAgICAgICAgICAgaWxjZi0+bWF4X2luZGV4X2xlbiA9IGluZGV4LT5uYW1lLmxlbjsKICAgICAgICAgICAgIH0KIApAQCAtNDk2LDI4ICs1MTMsNyBAQAogICAgICAgICBpZiAobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGUoJnNjKSAhPSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgfQotCi0gICAgICAgIGlsY2YtPm1heF9pbmRleF9sZW4gPSAwOwogICAgIH0KIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KLQotCi1zdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9pbmRleF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKLXsKLSAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKLSAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKLQotICAgIGNtY2YgPSBuZ3hfaHR0cF9jeWNsZV9nZXRfbW9kdWxlX21haW5fY29uZihjeWNsZSwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwotCi0gICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfQ09OVEVOVF9QSEFTRV0uaGFuZGxlcnMpOwotICAgIGlmIChoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICAqaCA9IG5neF9odHRwX2luZGV4X2hhbmRsZXI7Ci0KLSAgICByZXR1cm4gTkdYX09LOwotfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jCmluZGV4IDZkZDhhMzIuLmRjNjI2MzYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTEwLDEyICsxMCwxMiBAQAogCiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX2luaXQsICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC0zNCw3ICszNCw3IEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9pbml0LCAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTQ3LDcgKzQ3LDggQEAKIHN0YXRpYyBuZ3hfaHR0cF9vdXRwdXRfaGVhZGVyX2ZpbHRlcl9wdCAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyOwogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfbm90X21vZGlmaWVkX2hlYWRlcl9maWx0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQorc3RhdGljCituZ3hfaW50X3Qgbmd4X2h0dHBfbm90X21vZGlmaWVkX2hlYWRlcl9maWx0ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIHRpbWVfdCAgaW1zOwogCkBAIC04MCw3ICs4MSw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorc3RhdGljCituZ3hfaW50X3Qgbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyOwogICAgIG5neF9odHRwX3RvcF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfbm90X21vZGlmaWVkX2hlYWRlcl9maWx0ZXI7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCmluZGV4IDdiZWIwOTEuLmFiMzQ2ZjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCkBAIC00OSwxMyArNDksMTMgQEAKIH0gbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX2N0eF90OwogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3JhbmdlX2JvZHlfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZik7CiAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9yYW5nZV9oZWFkZXJfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcl9pbml0LCAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtNzQsNyArNzQsNyBAQAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX3JhbmdlX2hlYWRlcl9maWx0ZXJfaW5pdCwgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC04Niw3ICs4Niw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXJfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcl9pbml0LCAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcl9pbml0LCAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtNTg4LDcgKzU4OCw3IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfcmFuZ2VfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX3JhbmdlX2hlYWRlcl9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZikKIHsKICAgICBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3JhbmdlX2hlYWRlcl9maWx0ZXI7CkBAIC01OTgsNyArNTk4LDcgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX3JhbmdlX2JvZHlfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlciA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF9yYW5nZV9ib2R5X2ZpbHRlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVhbGlwX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWFsaXBfbW9kdWxlLmMKaW5kZXggOGYxMjhkMi4uZGY1ODU5OCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWFsaXBfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWFsaXBfbW9kdWxlLmMKQEAgLTMwLDcgKzMwLDcgQEAKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF9yZWFsaXBfY3JlYXRlX2xvY19jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9yZWFsaXBfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3JlYWxpcF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3JlYWxpcF9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2NvbmZfZW51bV90ICBuZ3hfaHR0cF9yZWFsaXBfaGVhZGVyW10gPSB7CkBAIC02Myw3ICs2Myw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfcmVhbGlwX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfcmVhbGlwX2luaXQsICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtODIsNyArODIsNyBAQAogICAgIG5neF9odHRwX3JlYWxpcF9jb21tYW5kcywgICAgICAgICAgICAgIC8qIG1vZHVsZSBkaXJlY3RpdmVzICovCiAgICAgTkdYX0hUVFBfTU9EVUxFLCAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIHR5cGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLwotICAgIG5neF9odHRwX3JlYWxpcF9pbml0LCAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCkBAIC0yNTAsMTIgKzI1MCwxMiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX3JlYWxpcF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX3JlYWxpcF9pbml0KG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICpoOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCi0gICAgY21jZiA9IG5neF9odHRwX2N5Y2xlX2dldF9tb2R1bGVfbWFpbl9jb25mKGN5Y2xlLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgY21jZiA9IG5neF9odHRwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX1BPU1RfUkVBRF9QSEFTRV0uaGFuZGxlcnMpOwogICAgIGlmIChoID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwppbmRleCAzMGZiY2Q4Li42ZGIxYmMwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCkBAIC0yMyw3ICsyMyw3IEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfcmV3cml0ZV9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX3Jld3JpdGVfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Jld3JpdGVfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9yZXdyaXRlX2luaXQobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX3Jld3JpdGUobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfcmV3cml0ZV9yZXR1cm4obmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwKICAgICB2b2lkICpjb25mKTsKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9yZXdyaXRlX2luaXQsICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC0xMjMsNyArMTIzLDcgQEAKICAgICBuZ3hfaHR0cF9yZXdyaXRlX2NvbW1hbmRzLCAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9yZXdyaXRlX2luaXQsICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMjY3LDEyICsyNjcsMTIgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9yZXdyaXRlX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2h0dHBfcmV3cml0ZV9pbml0KG5neF9jb25mX3QgKmNmKQogewogICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICpoOwogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCi0gICAgY21jZiA9IG5neF9odHRwX2N5Y2xlX2dldF9tb2R1bGVfbWFpbl9jb25mKGN5Y2xlLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgY21jZiA9IG5neF9odHRwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX1NFUlZFUl9SRVdSSVRFX1BIQVNFXS5oYW5kbGVycyk7CiAgICAgaWYgKGggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCmluZGV4IGVmODcwYmUuLjUwNDVmZDYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKQEAgLTEwNiwxMyArMTA2LDE0IEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfc3NpX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9zc2lfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwKICAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3NpX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3NzaV9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZik7CiAKIAogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX3NzaV9maWx0ZXJfY29tbWFuZHNbXSA9IHsKIAogICAgIHsgbmd4X3N0cmluZygic3NpIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfSFRUUF9MSUZfQ09ORgorICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9DT05GX0ZMQUcsCiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfc3NpX2xvY19jb25mX3QsIGVuYWJsZSksCkBAIC0xNjAsNyArMTYxLDcgQEAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgbmd4X2h0dHBfc3NpX3ByZWNvbmZpZ3VyYXRpb24sICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9pbml0LCAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIG5neF9odHRwX3NzaV9jcmVhdGVfbWFpbl9jb25mLCAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBuZ3hfaHR0cF9zc2lfaW5pdF9tYWluX2NvbmYsICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtMTc5LDcgKzE4MCw3IEBACiAgICAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9jb21tYW5kcywgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9pbml0LCAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTI2NTQsNyArMjY1NSw3IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfc3NpX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9odHRwX3NzaV9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZikKIHsKICAgICBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfaGVhZGVyX2ZpbHRlciA9IG5neF9odHRwX3NzaV9oZWFkZXJfZmlsdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYwppbmRleCBhZDA4ODUyLi5mOWRmNDZlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYwpAQCAtMTgsNyArMTgsNyBAQAogc3RhdGljIHZvaWQgKm5neF9odHRwX3N0YXRpY19jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX3N0YXRpY19tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwKICAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3RhdGljX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfc3RhdGljX2luaXQobmd4X2NvbmZfdCAqY2YpOwogCiAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaHR0cF9zdGF0aWNfY29tbWFuZHNbXSA9IHsKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3N0YXRpY19tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX3N0YXRpY19pbml0LCAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTU5LDcgKzU5LDcgQEAKICAgICBuZ3hfaHR0cF9zdGF0aWNfY29tbWFuZHMsICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9zdGF0aWNfaW5pdCwgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMzE3LDEyICszMTcsMTIgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF9zdGF0aWNfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaHR0cF9zdGF0aWNfaW5pdChuZ3hfY29uZl90ICpjZikKIHsKICAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAotICAgIGNtY2YgPSBuZ3hfaHR0cF9jeWNsZV9nZXRfbW9kdWxlX21haW5fY29uZihjeWNsZSwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICBoID0gbmd4X2FycmF5X3B1c2goJmNtY2YtPnBoYXNlc1tOR1hfSFRUUF9DT05URU5UX1BIQVNFXS5oYW5kbGVycyk7CiAgICAgaWYgKGggPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCmluZGV4IDY0OGYxYWQuLmMzNDFhMDggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTU5LDcgKzU5LDcgQEAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdXNlcmlkX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdXNlcmlkX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdXNlcmlkX2luaXQobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIHZvaWQgKm5neF9odHRwX3VzZXJpZF9jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfdXNlcmlkX21lcmdlX2NvbmYobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBhcmVudCwKICAgICB2b2lkICpjaGlsZCk7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAogc3RhdGljIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZV9jdHggPSB7CiAgICAgbmd4X2h0dHBfdXNlcmlkX2FkZF92YXJpYWJsZXMsICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfdXNlcmlkX2luaXQsICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwpAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgbmd4X2h0dHBfdXNlcmlkX2NvbW1hbmRzLCAgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfdXNlcmlkX2luaXQsICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTYyMiwxNiArNjIyLDYgQEAKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF91c2VyaWRfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCi17Ci0gICAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXI7Ci0gICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF91c2VyaWRfZmlsdGVyOwotCi0gICAgcmV0dXJuIE5HWF9PSzsKLX0KLQotCiBzdGF0aWMgdm9pZCAqCiBuZ3hfaHR0cF91c2VyaWRfY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpCiB7CkBAIC02OTMsNiArNjgzLDE2IEBACiB9CiAKIAorc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfdXNlcmlkX2luaXQobmd4X2NvbmZfdCAqY2YpCit7CisgICAgbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyID0gbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXI7CisgICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF91c2VyaWRfZmlsdGVyOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCiBzdGF0aWMgY2hhciAqCiBuZ3hfaHR0cF91c2VyaWRfZG9tYWluKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL01ha2VmaWxlLlBMIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL01ha2VmaWxlLlBMCmluZGV4IDQ4ZjFlYmMuLmMzM2IxZmMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9NYWtlZmlsZS5QTAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL3BlcmwvTWFrZWZpbGUuUEwKQEAgLTEyLDcgKzEyLDcgQEAKICAgICBBQlNUUkFDVF9GUk9NICAgICA9PiAnbmdpbngucG0nLCAgICAgIyByZXRyaWV2ZSBhYnN0cmFjdCBmcm9tIG1vZHVsZQogICAgIEFVVEhPUiAgICAgICAgICAgID0+ICdJZ29yIFN5c29ldicsCiAKLSAgICBDQ0ZMQUdTICAgICAgICAgICA9PiAiJEVOVntOR1hfUEVSTF9DRkxBR1N9IiwKKyAgICBDQ0ZMQUdTICAgICAgICAgICA9PiAiJEVOVntOR1hfUE1fQ0ZMQUdTfSIsCiAgICAgT1BUSU1JWkUgICAgICAgICAgPT4gJy1PJywKIAogICAgIElOQyAgICAgICAgICAgICAgID0+ICItSSAuLi8uLi8uLi8uLi8uLi9zcmMvY29yZSAiIC4KQEAgLTIyLDggKzIyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiLUkgLi4vLi4vLi4vLi4vLi4vc3JjL2h0dHAvbW9kdWxlcyAiIC4KICAgICAgICAgICAgICAgICAgICAgICAgICAiLUkgLi4vLi4vLi4vLi4vLi4vc3JjL2h0dHAvbW9kdWxlcy9wZXJsICIgLgogICAgICAgICAgICAgICAgICAgICAgICAgICItSSAuLi8uLi8uLi8uLi8uLi8kRU5We05HWF9PQkpTfSAiIC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAiLUkgLi4vLi4vLi4vLi4vLi4vJEVOVntOR1hfUENSRX0gIiAuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIi1JIC4uLy4uLy4uLy4uLy4uLyRFTlZ7TkdYX1pMSUJ9ICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKCRFTlZ7TkdYX1BDUkV9ID1+IC9eKFlFU3xOTykvID8gIiIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJEVOVntOR1hfUENSRX0gPX4gbSNeLyMgPyAiLUkgJEVOVntOR1hfUENSRX0gIiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1JIC4uLy4uLy4uLy4uLy4uLyRFTlZ7TkdYX1BDUkV9ICIpKSwKIAogICAgIGRlcGVuZCA9PiB7CiAgICAgICAgICduZ2lueC5jJyAgICAgPT4KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC5wbSBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC5wbQppbmRleCBiYWRkNDk0Li4zMDllYWE1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3BlcmwvbmdpbngucG0KKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25naW54LnBtCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgSFRUUF9TRVJWRVJfRVJST1IKICk7CiAKLW91ciAkVkVSU0lPTiA9ICcwLjMuNDMnOworb3VyICRWRVJTSU9OID0gJzAuNC4wJzsKIAogcmVxdWlyZSBYU0xvYWRlcjsKIFhTTG9hZGVyOjpsb2FkKCduZ2lueCcsICRWRVJTSU9OKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC54cyBiL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ2lueC54cwppbmRleCA1M2I2YTkyLi42ZTZhZmVkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3BlcmwvbmdpbngueHMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25naW54LnhzCkBAIC0zMjksNiArMzI5LDQyIEBACiAKIAogdm9pZAoraGFzX3JlcXVlc3RfYm9keShyLCBuZXh0KQorICAgIENPREU6CisKKyAgICBkWFNUQVJHOworICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICpyOworICAgIFNWICAgICAgICAgICAgICAgICAgICpuZXh0OworICAgIG5neF9odHRwX3BlcmxfY3R4X3QgICpjdHg7CisKKyAgICBuZ3hfaHR0cF9wZXJsX3NldF9yZXF1ZXN0KHIpOworCisgICAgaWYgKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA8PSAwKSB7CisgICAgICAgIFhTUkVUVVJOX1VOREVGOworICAgIH0KKworICAgIG5leHQgPSBTVCgxKTsKKworICAgIGN0eCA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHIsIG5neF9odHRwX3BlcmxfbW9kdWxlKTsKKyAgICBjdHgtPm5leHQgPSBuZXh0OworCisgICAgci0+cmVxdWVzdF9ib2R5X2luX3NpbmdsZV9idWYgPSAxOworICAgIHItPnJlcXVlc3RfYm9keV9pbl9wZXJzaXN0ZW50X2ZpbGUgPSAxOworICAgIHItPnJlcXVlc3RfYm9keV9kZWxldGVfaW5jb21wbGV0ZV9maWxlID0gMTsKKworICAgIGlmIChyLT5yZXF1ZXN0X2JvZHlfaW5fZmlsZV9vbmx5KSB7CisgICAgICAgIHItPnJlcXVlc3RfYm9keV9maWxlX2xvZ19sZXZlbCA9IDA7CisgICAgfQorCisgICAgbmd4X2h0dHBfcmVhZF9jbGllbnRfcmVxdWVzdF9ib2R5KHIsIG5neF9odHRwX3BlcmxfaGFuZGxlX3JlcXVlc3QpOworCisgICAgc3ZfdXBncmFkZShUQVJHLCBTVnRfSVYpOworICAgIHN2X3NldGl2KFRBUkcsIDEpOworCisgICAgU1QoMCkgPSBUQVJHOworCisKK3ZvaWQKIHJlcXVlc3RfYm9keShyKQogICAgIENPREU6CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKaW5kZXggNmY5NzljNi4uZTU5ZWNlNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgKnNzaV9jdHgsIG5neF9zdHJfdCAqKnBhcmFtcyk7CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgbmd4X2h0dHBfcGVybF9oYW5kbGVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogc3RhdGljIG5neF9pbnRfdAogICAgIG5neF9odHRwX3BlcmxfZ2V0X2ludGVycHJldGVyKG5neF9odHRwX3BlcmxfbWFpbl9jb25mX3QgKnBtY2YsCiAgICAgUGVybEludGVycHJldGVyICoqcGVybCwgbmd4X2xvZ190ICpsb2cpOwpAQCAtMTc2LDYgKzE3NSw5IEBACiAjZW5kaWYKIAogCitzdGF0aWMgbmd4X3N0cl90ICBuZ3hfbnVsbF9uYW1lID0gbmd4X251bGxfc3RyaW5nOworCisKIHN0YXRpYyBIViAgKm5naW54X3N0YXNoOwogCiBzdGF0aWMgdm9pZApAQCAtMTkwLDEzICsxOTIsMTYgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3BlcmxfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgbmd4X2ludF90ICByYzsKLQogICAgIC8qIFRPRE86IFdpbjMyICovCiAgICAgaWYgKHItPnplcm9faW5fdXJpKSB7CiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfRk9VTkQ7CiAgICAgfQogCisgICAgbmd4X2h0dHBfcGVybF9oYW5kbGVfcmVxdWVzdChyKTsKKworICAgIHJldHVybiBOR1hfRE9ORTsKKworI2lmIDAKICAgICByLT5yZXF1ZXN0X2JvZHlfaW5fc2luZ2xlX2J1ZiA9IDE7CiAgICAgci0+cmVxdWVzdF9ib2R5X2luX3BlcnNpc3RlbnRfZmlsZSA9IDE7CiAgICAgci0+cmVxdWVzdF9ib2R5X2RlbGV0ZV9pbmNvbXBsZXRlX2ZpbGUgPSAxOwpAQCAtMjEyLDE0ICsyMTcsMTYgQEAKICAgICB9CiAKICAgICByZXR1cm4gTkdYX0RPTkU7CisjZW5kaWYKIH0KIAogCi1zdGF0aWMgdm9pZAordm9pZAogbmd4X2h0dHBfcGVybF9oYW5kbGVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CisgICAgU1YgICAgICAgICAgICAgICAgICAgICAgICAgKnN1YjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgIHVyaSwgYXJnczsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgdXJpLCBhcmdzLCAqaGFuZGxlcjsKICAgICBuZ3hfaHR0cF9wZXJsX2N0eF90ICAgICAgICAqY3R4OwogICAgIG5neF9odHRwX3BlcmxfbG9jX2NvbmZfdCAgICpwbGNmOwogICAgIG5neF9odHRwX3BlcmxfbWFpbl9jb25mX3QgICpwbWNmOwpAQCAtMjMxLDcgKzIzOCw3IEBACiAgICAgaWYgKGN0eCA9PSBOVUxMKSB7CiAgICAgICAgIGN0eCA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9wZXJsX2N0eF90KSk7CiAgICAgICAgIGlmIChjdHggPT0gTlVMTCkgewotICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfRVJST1IpOwogCSAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjUxLDEwICsyNTgsMTggQEAKIAogICAgIGRUSFhhKGN0eC0+cGVybCk7CiAKLSAgICBwbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9wZXJsX21vZHVsZSk7CisgICAgaWYgKGN0eC0+bmV4dCA9PSBOVUxMKSB7CisgICAgICAgIHBsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3BlcmxfbW9kdWxlKTsKKyAgICAgICAgc3ViID0gcGxjZi0+c3ViOworICAgICAgICBoYW5kbGVyID0gJnBsY2YtPmhhbmRsZXI7CiAKLSAgICByYyA9IG5neF9odHRwX3BlcmxfY2FsbF9oYW5kbGVyKGFUSFhfIHIsIHBsY2YtPnN1YiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbGNmLT5oYW5kbGVyLCBOVUxMKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdWIgPSBjdHgtPm5leHQ7CisgICAgICAgIGhhbmRsZXIgPSAmbmd4X251bGxfbmFtZTsKKyAgICAgICAgY3R4LT5uZXh0ID0gTlVMTDsKKyAgICB9CisKKyAgICByYyA9IG5neF9odHRwX3BlcmxfY2FsbF9oYW5kbGVyKGFUSFhfIHIsIHN1YiwgTlVMTCwgaGFuZGxlciwgTlVMTCk7CiAKICAgICB9CiAKQEAgLTI3OCw2ICsyOTMsMTAgQEAKICAgICBjdHgtPmZpbGVuYW1lLmRhdGEgPSBOVUxMOwogICAgIGN0eC0+cmVkaXJlY3RfdXJpLmxlbiA9IDA7CiAKKyAgICBpZiAoY3R4LT5kb25lIHx8IGN0eC0+bmV4dCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHVyaS5sZW4pIHsKICAgICAgICAgbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJnVyaSwgJmFyZ3MpOwogICAgICAgICByZXR1cm47CkBAIC0yODUsNiArMzA0LDcgQEAKIAogICAgIGlmIChyYyA9PSBOR1hfT0sgfHwgcmMgPT0gTkdYX0hUVFBfT0spIHsKICAgICAgICAgbmd4X2h0dHBfc2VuZF9zcGVjaWFsKHIsIE5HWF9IVFRQX0xBU1QpOworICAgICAgICBjdHgtPmRvbmUgPSAxOwogICAgIH0KIAogICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgcmMpOwpAQCAtNjY2LDE0ICs2ODYsNiBAQAogfQogCiAKLSNpZiAoX19JTlRFTF9DT01QSUxFUikKLS8qCi0gKiBkaXNhYmxlICdkZWNsYXJhdGlvbiBoaWRlcyBwYXJhbWV0ZXIgIm15X3BlcmwiJyB3YXJuaW5nIGZvciBFTlRFUiBhbmQgTEVBVkUKLSAqLwotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6MTU5OSkKLSNlbmRpZgotCi0KIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3BlcmxfY2FsbF9oYW5kbGVyKHBUSFhfIG5neF9odHRwX3JlcXVlc3RfdCAqciwgU1YgKnN1YiwKICAgICBuZ3hfc3RyX3QgKiphcmdzLCBuZ3hfc3RyX3QgKmhhbmRsZXIsIG5neF9zdHJfdCAqcnYpCkBAIC03NzMsMTEgKzc4NSw2IEBACiB9CiAKIAotI2lmIChfX0lOVEVMX0NPTVBJTEVSKQotI3ByYWdtYSB3YXJuaW5nKGRlZmF1bHQ6MTU5OSkKLSNlbmRpZgotCi0KIHN0YXRpYyB2b2lkCiBuZ3hfaHR0cF9wZXJsX2V2YWxfYW5vbl9zdWIocFRIWF8gbmd4X3N0cl90ICpoYW5kbGVyLCBTViAqKnN2KQogewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmggYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuaAppbmRleCAxNjA5YzQ3Li42NmQxNWRhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Blcmwvbmd4X2h0dHBfcGVybF9tb2R1bGUuaApAQCAtMjQsNiArMjQsOSBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgZmlsZW5hbWU7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICByZWRpcmVjdF91cmk7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICByZWRpcmVjdF9hcmdzOworICAgIFNWICAgICAgICAgICAgICAgICAgICAgICAqbmV4dDsKKworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgZG9uZTsgICAvKiB1bnNpZ25lZCAgZG9uZToxOyAqLwogCiAjaWYgKE5HWF9IVFRQX1NTSSkKICAgICBuZ3hfaHR0cF9zc2lfY3R4X3QgICAgICAgKnNzaTsKQEAgLTQ3LDQgKzUwLDcgQEAKIGV4dGVybiB2b2lkICBib290X0R5bmFMb2FkZXIocFRIWF8gQ1YqIGN2KTsKIAogCit2b2lkIG5neF9odHRwX3BlcmxfaGFuZGxlX3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKKworCiAjZW5kaWYgLyogX05HWF9IVFRQX1BFUkxfTU9EVUxFX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCA4ODY2N2M2Li4zOTUyODJkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTc1LDggKzc1LDkgQEAKIHsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgKnJ2OwogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgY2g7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIG1pLCBtLCBzLCBsLCBwLCBhLCBpOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgcmMsIGo7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBtaSwgbSwgcywgbCwgcCwgYSwgaSwgbjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIGZpbmRfY29uZmlnX2luZGV4LCB1c2VfcmV3cml0ZSwgdXNlX2FjY2VzczsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIGxhc3QsIGJpbmRfYWxsLCBkb25lOwogICAgIG5neF9jb25mX3QgICAgICAgICAgICAgICAgICAgcGNmOwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgaGVhZGVyc19pbiwgaW5fcG9ydHM7CkBAIC05Myw5ICs5NCwxMSBAQAogICAgIG5neF9odHRwX2NvbmZfaW5fYWRkcl90ICAgICAqaW5fYWRkcjsKICAgICBuZ3hfaGFzaF9rZXlzX2FycmF5c190ICAgICAgIGhhOwogICAgIG5neF9odHRwX3NlcnZlcl9uYW1lX3QgICAgICAqbmFtZTsKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgICAgKnBoOwogICAgIG5neF9odHRwX3ZpcnR1YWxfbmFtZXNfdCAgICAqdm47CiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAgKipjc2NmcCwgKmNzY2Y7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgICpjbGNmOworICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfcHQgICAgY2hlY2tlcjsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAgKmNtY2Y7CiAjaWYgKE5HWF9XSU4zMikKICAgICBuZ3hfaW9jcF9jb25mX3QgICAgICAgICAgICAgKmlvY3BjZjsKQEAgLTI5Myw4ICsyOTYsNiBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgY21jZi0+cGhhc2VzW05HWF9IVFRQX1BPU1RfUkVBRF9QSEFTRV0udHlwZSA9IE5HWF9PSzsKLQogCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfU0VSVkVSX1JFV1JJVEVfUEhBU0VdLmhhbmRsZXJzLAogICAgICAgICAgICAgICAgICAgICAgICBjZi0+cG9vbCwgMSwgc2l6ZW9mKG5neF9odHRwX2hhbmRsZXJfcHQpKQpAQCAtMzAzLDI3ICszMDQsNiBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgY21jZi0+cGhhc2VzW05HWF9IVFRQX1NFUlZFUl9SRVdSSVRFX1BIQVNFXS50eXBlID0gTkdYX09LOwotCi0KLSAgICAvKiB0aGUgc3BlY2lhbCBmaW5kIGNvbmZpZyBwaGFzZSBmb3IgYSBzaW5nbGUgaGFuZGxlciAqLwotCi0gICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfRklORF9DT05GSUdfUEhBU0VdLmhhbmRsZXJzLAotICAgICAgICAgICAgICAgICAgICAgICBjZi0+cG9vbCwgMSwgc2l6ZW9mKG5neF9odHRwX2hhbmRsZXJfcHQpKQotICAgICAgICAhPSBOR1hfT0spCi0gICAgewotICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgfQotCi0gICAgY21jZi0+cGhhc2VzW05HWF9IVFRQX0ZJTkRfQ09ORklHX1BIQVNFXS50eXBlID0gTkdYX09LOwotCi0gICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfRklORF9DT05GSUdfUEhBU0VdLmhhbmRsZXJzKTsKLSAgICBpZiAoaCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICB9Ci0KLSAgICAqaCA9IG5neF9odHRwX2ZpbmRfbG9jYXRpb25fY29uZmlnOwotCiAKICAgICBpZiAobmd4X2FycmF5X2luaXQoJmNtY2YtPnBoYXNlc1tOR1hfSFRUUF9SRVdSSVRFX1BIQVNFXS5oYW5kbGVycywKICAgICAgICAgICAgICAgICAgICAgICAgY2YtPnBvb2wsIDEsIHNpemVvZihuZ3hfaHR0cF9oYW5kbGVyX3B0KSkKQEAgLTMzMiw4ICszMTIsNiBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgY21jZi0+cGhhc2VzW05HWF9IVFRQX1JFV1JJVEVfUEhBU0VdLnR5cGUgPSBOR1hfT0s7Ci0KIAogICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX1BSRUFDQ0VTU19QSEFTRV0uaGFuZGxlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5wb29sLCAxLCBzaXplb2Yobmd4X2h0dHBfaGFuZGxlcl9wdCkpCkBAIC0zNDIsOCArMzIwLDYgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9QUkVBQ0NFU1NfUEhBU0VdLnR5cGUgPSBOR1hfT0s7Ci0KIAogICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0FDQ0VTU19QSEFTRV0uaGFuZGxlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5wb29sLCAyLCBzaXplb2Yobmd4X2h0dHBfaGFuZGxlcl9wdCkpCkBAIC0zNTIsOCArMzI4LDYgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9BQ0NFU1NfUEhBU0VdLnR5cGUgPSBOR1hfREVDTElORUQ7Ci0KIAogICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0NPTlRFTlRfUEhBU0VdLmhhbmRsZXJzLAogICAgICAgICAgICAgICAgICAgICAgICBjZi0+cG9vbCwgNCwgc2l6ZW9mKG5neF9odHRwX2hhbmRsZXJfcHQpKQpAQCAtMzYyLDggKzMzNiw2IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBjbWNmLT5waGFzZXNbTkdYX0hUVFBfQ09OVEVOVF9QSEFTRV0udHlwZSA9IE5HWF9PSzsKLQogCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfTE9HX1BIQVNFXS5oYW5kbGVycywKICAgICAgICAgICAgICAgICAgICAgICAgY2YtPnBvb2wsIDEsIHNpemVvZihuZ3hfaHR0cF9oYW5kbGVyX3B0KSkKQEAgLTM3Miw4ICszNDQsNiBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgY21jZi0+cGhhc2VzW05HWF9IVFRQX0xPR19QSEFTRV0udHlwZSA9IE5HWF9PSzsKLQogCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZoZWFkZXJzX2luLCBjZi0+dGVtcF9wb29sLCAzMiwgc2l6ZW9mKG5neF9oYXNoX2tleV90KSkKICAgICAgICAgIT0gTkdYX09LKQpAQCAtNDMyLDYgKzQwMiw5MSBAQAogICAgICpjZiA9IHBjZjsKIAogCisgICAgY21jZi0+cGhhc2VfZW5naW5lLnNlcnZlcl9yZXdyaXRlX2luZGV4ID0gKG5neF91aW50X3QpIC0xOworICAgIGZpbmRfY29uZmlnX2luZGV4ID0gMDsKKyAgICB1c2VfcmV3cml0ZSA9IGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9SRVdSSVRFX1BIQVNFXS5oYW5kbGVycy5uZWx0cyA/IDEgOiAwOworICAgIHVzZV9hY2Nlc3MgPSBjbWNmLT5waGFzZXNbTkdYX0hUVFBfQUNDRVNTX1BIQVNFXS5oYW5kbGVycy5uZWx0cyA/IDEgOiAwOworCisgICAgbiA9IHVzZV9yZXdyaXRlICsgdXNlX2FjY2VzcyArIDE7IC8qIGZpbmQgY29uZmlnIHBoYXNlICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTkdYX0hUVFBfTE9HX1BIQVNFOyBpKyspIHsKKyAgICAgICAgbiArPSBjbWNmLT5waGFzZXNbaV0uaGFuZGxlcnMubmVsdHM7CisgICAgfQorCisgICAgcGggPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgIG4gKiBzaXplb2Yobmd4X2h0dHBfcGhhc2VfaGFuZGxlcl90KSArIHNpemVvZih2b2lkICopKTsKKyAgICBpZiAocGggPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgY21jZi0+cGhhc2VfZW5naW5lLmhhbmRsZXJzID0gcGg7CisgICAgbiA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTkdYX0hUVFBfTE9HX1BIQVNFOyBpKyspIHsKKyAgICAgICAgaCA9IGNtY2YtPnBoYXNlc1tpXS5oYW5kbGVycy5lbHRzOworCisgICAgICAgIHN3aXRjaCAoaSkgeworCisgICAgICAgIGNhc2UgTkdYX0hUVFBfU0VSVkVSX1JFV1JJVEVfUEhBU0U6CisgICAgICAgICAgICBpZiAoY21jZi0+cGhhc2VfZW5naW5lLnNlcnZlcl9yZXdyaXRlX2luZGV4ID09IChuZ3hfdWludF90KSAtMSkgeworICAgICAgICAgICAgICAgIGNtY2YtPnBoYXNlX2VuZ2luZS5zZXJ2ZXJfcmV3cml0ZV9pbmRleCA9IG47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaGVja2VyID0gbmd4X2h0dHBfY29yZV9nZW5lcmljX3BoYXNlOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5HWF9IVFRQX0ZJTkRfQ09ORklHX1BIQVNFOgorICAgICAgICAgICAgZmluZF9jb25maWdfaW5kZXggPSBuOworCisgICAgICAgICAgICBwaC0+Y2hlY2tlciA9IG5neF9odHRwX2NvcmVfZmluZF9jb25maWdfcGhhc2U7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBwaCsrOworCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIE5HWF9IVFRQX1BPU1RfUkVXUklURV9QSEFTRToKKyAgICAgICAgICAgIGlmICh1c2VfcmV3cml0ZSkgeworICAgICAgICAgICAgICAgIHBoLT5jaGVja2VyID0gbmd4X2h0dHBfY29yZV9wb3N0X3Jld3JpdGVfcGhhc2U7CisgICAgICAgICAgICAgICAgcGgtPm5leHQgPSBmaW5kX2NvbmZpZ19pbmRleDsKKyAgICAgICAgICAgICAgICBuKys7CisgICAgICAgICAgICAgICAgcGgrKzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0U6CisgICAgICAgICAgICBjaGVja2VyID0gbmd4X2h0dHBfY29yZV9hY2Nlc3NfcGhhc2U7CisgICAgICAgICAgICBuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5HWF9IVFRQX1BPU1RfQUNDRVNTX1BIQVNFOgorICAgICAgICAgICAgaWYgKHVzZV9hY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBwaC0+Y2hlY2tlciA9IG5neF9odHRwX2NvcmVfcG9zdF9hY2Nlc3NfcGhhc2U7CisgICAgICAgICAgICAgICAgcGgtPm5leHQgPSBuOworICAgICAgICAgICAgICAgIHBoKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgTkdYX0hUVFBfQ09OVEVOVF9QSEFTRToKKyAgICAgICAgICAgIGNoZWNrZXIgPSBuZ3hfaHR0cF9jb3JlX2NvbnRlbnRfcGhhc2U7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY2hlY2tlciA9IG5neF9odHRwX2NvcmVfZ2VuZXJpY19waGFzZTsKKyAgICAgICAgfQorCisgICAgICAgIG4gKz0gY21jZi0+cGhhc2VzW2ldLmhhbmRsZXJzLm5lbHRzOworCisgICAgICAgIGZvciAoaiA9IGNtY2YtPnBoYXNlc1tpXS5oYW5kbGVycy5uZWx0cyAtIDE7IGogPj0wOyBqLS0pIHsKKyAgICAgICAgICAgIHBoLT5jaGVja2VyID0gY2hlY2tlcjsKKyAgICAgICAgICAgIHBoLT5oYW5kbGVyID0gaFtqXTsKKyAgICAgICAgICAgIHBoLT5uZXh0ID0gbjsKKyAgICAgICAgICAgIHBoKys7CisgICAgICAgIH0KKyAgICB9CisKKwogICAgIC8qCiAgICAgICogY3JlYXRlIHRoZSBsaXN0cyBvZiBwb3J0cywgYWRkcmVzc2VzIGFuZCBzZXJ2ZXIgbmFtZXMKICAgICAgKiB0byBxdWlja2x5IGZpbmQgdGhlIHNlcnZlciBjb3JlIG1vZHVsZSBjb25maWd1cmF0aW9uIGF0IHJ1bi10aW1lCkBAIC05MzYsNyArOTkxLDYgQEAKICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQotICAgICAgICBzZXJ2ZXJfbmFtZXMgPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKIAogICAgICAgICAqbmFtZSA9IHNlcnZlcl9uYW1lc1tpXTsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3B5X2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcHlfZmlsdGVyX21vZHVsZS5jCmluZGV4IDg3NjEyZWIuLjMxMWMxOTUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcHlfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcHlfZmlsdGVyX21vZHVsZS5jCkBAIC0xNyw3ICsxNyw3IEBACiBzdGF0aWMgdm9pZCAqbmd4X2h0dHBfY29weV9maWx0ZXJfY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX2NvcHlfZmlsdGVyX21lcmdlX2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2NvcHlfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfY29weV9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZik7CiAKIAogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX2NvcHlfZmlsdGVyX2NvbW1hbmRzW10gPSB7CkBAIC0zNSw3ICszNSw3IEBACiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfY29weV9maWx0ZXJfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCi0gICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKyAgICBuZ3hfaHR0cF9jb3B5X2ZpbHRlcl9pbml0LCAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLwogCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFpbiBjb25maWd1cmF0aW9uICovCkBAIC01NCw3ICs1NCw3IEBACiAgICAgbmd4X2h0dHBfY29weV9maWx0ZXJfY29tbWFuZHMsICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCi0gICAgbmd4X2h0dHBfY29weV9maWx0ZXJfaW5pdCwgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2NvcHlfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2h0dHBfY29weV9maWx0ZXJfaW5pdChuZ3hfY29uZl90ICpjZikKIHsKICAgICBuZ3hfaHR0cF9uZXh0X2ZpbHRlciA9IG5neF9odHRwX3RvcF9ib2R5X2ZpbHRlcjsKICAgICBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXIgPSBuZ3hfaHR0cF9jb3B5X2ZpbHRlcjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDJhNWQzZGEuLmU3ZjU0ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMjMsNyArMjMsNiBAQAogI2RlZmluZSBOR1hfSFRUUF9MT0NBVElPTl9SRUdFWCAgICAgICAgICAgNAogCiAKLXN0YXRpYyB2b2lkIG5neF9odHRwX2NvcmVfcnVuX3BoYXNlcyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9jb3JlX2ZpbmRfbG9jYXRpb24obmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9hcnJheV90ICpsb2NhdGlvbnMsIHNpemVfdCBsZW4pOwogCkBAIC00NzQsNiArNDczLDggQEAKIHZvaWQKIG5neF9odHRwX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogeworICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOworCiAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5hY3Rpb24gPSBOVUxMOwogCiAgICAgci0+Y29ubmVjdGlvbi0+dW5leHBlY3RlZF9lb2YgPSAwOwpAQCAtNTAwLDggKzUwMSw4IEBACiAgICAgICAgIGlmIChyLT5rZWVwYWxpdmUgJiYgci0+aGVhZGVyc19pbi5tc2llICYmIHItPm1ldGhvZCA9PSBOR1hfSFRUUF9QT1NUKSB7CiAKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNU0lFIG1heSB3YWl0IGZvciBzb21lIHRpbWUgaWYgdGhlIHJlc3BvbnNlIGZvcgotICAgICAgICAgICAgICogdGhlIFBPU1QgcmVxdWVzdCBpcyBzZW50IG92ZXIgdGhlIGtlZXBhbGl2ZSBjb25uZWN0aW9uCisgICAgICAgICAgICAgKiBNU0lFIG1heSB3YWl0IGZvciBzb21lIHRpbWUgaWYgYW4gcmVzcG9uc2UgZm9yCisgICAgICAgICAgICAgKiBhIFBPU1QgcmVxdWVzdCB3YXMgc2VudCBvdmVyIGEga2VlcGFsaXZlIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICByLT5rZWVwYWxpdmUgPSAwOwpAQCAtNTE1LDE3MiArNTE2LDg0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICByLT53cml0ZV9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfY29yZV9ydW5fcGhhc2VzOwotCiAgICAgci0+dmFsaWRfdW5wYXJzZWRfdXJpID0gMTsKICAgICByLT52YWxpZF9sb2NhdGlvbiA9IDE7Ci0gICAgci0+dXJpX2NoYW5nZWQgPSAxOwogCi0gICAgci0+cGhhc2UgPSAoIXItPmludGVybmFsKSA/IE5HWF9IVFRQX1BPU1RfUkVBRF9QSEFTRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfU0VSVkVSX1JFV1JJVEVfUEhBU0U7Ci0gICAgci0+cGhhc2VfaGFuZGxlciA9IDA7CisgICAgaWYgKCFyLT5pbnRlcm5hbCkgeworICAgICAgICByLT5waGFzZV9oYW5kbGVyID0gMDsKIAorICAgIH0gZWxzZSB7CisgICAgICAgIGNtY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX21haW5fY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgICAgIHItPnBoYXNlX2hhbmRsZXIgPSBjbWNmLT5waGFzZV9lbmdpbmUuc2VydmVyX3Jld3JpdGVfaW5kZXg7CisgICAgfQorCisgICAgci0+d3JpdGVfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX2NvcmVfcnVuX3BoYXNlczsKICAgICBuZ3hfaHR0cF9jb3JlX3J1bl9waGFzZXMocik7CiB9CiAKIAotc3RhdGljIHZvaWQKK3ZvaWQKIG5neF9odHRwX2NvcmVfcnVuX3BoYXNlcyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHJjOwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICBwYXRoOwotICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICpoOwotICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICpjbGNmOworICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAgICpwaDsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAotICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJodHRwIHBoYXNlIGhhbmRsZXIiKTsKLQogICAgIGNtY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX21haW5fY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICBmb3IgKC8qIHZvaWQgKi87IHItPnBoYXNlIDwgTkdYX0hUVFBfTE9HX1BIQVNFOyByLT5waGFzZSsrKSB7CisgICAgcGggPSBjbWNmLT5waGFzZV9lbmdpbmUuaGFuZGxlcnM7CiAKLSAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX1JFV1JJVEVfUEhBU0UgKyAxICYmIHItPnVyaV9jaGFuZ2VkKSB7CisgICAgd2hpbGUgKHBoW3ItPnBoYXNlX2hhbmRsZXJdLmNoZWNrZXIpIHsKIAotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidXJpIGNoYW5nZXM6ICVkIiwgci0+dXJpX2NoYW5nZXMpOworICAgICAgICByYyA9IHBoW3ItPnBoYXNlX2hhbmRsZXJdLmNoZWNrZXIociwgJnBoW3ItPnBoYXNlX2hhbmRsZXJdKTsKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGdjYyBiZWZvcmUgMy4zIGNvbXBpbGVzIHRoZSBicm9rZW4gY29kZSBmb3IKLSAgICAgICAgICAgICAqICAgICBpZiAoci0+dXJpX2NoYW5nZXMtLSA9PSAwKQotICAgICAgICAgICAgICogaWYgdGhlIHItPnVyaV9jaGFuZ2VzIGlzIGRlZmluZWQgYXMKLSAgICAgICAgICAgICAqICAgICB1bnNpZ25lZCAgdXJpX2NoYW5nZXM6NAotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHItPnVyaV9jaGFuZ2VzLS07Ci0KLSAgICAgICAgICAgIGlmIChyLT51cmlfY2hhbmdlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJld3JpdGUgb3IgaW50ZXJuYWwgcmVkaXJlY3Rpb24gY3ljbGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndoaWxlIHByb2Nlc3NpbmcgXCIlVlwiIiwgJnItPnVyaSk7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgci0+cGhhc2UgPSBOR1hfSFRUUF9GSU5EX0NPTkZJR19QSEFTRTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0UgJiYgciAhPSByLT5tYWluKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9DT05URU5UX1BIQVNFICYmIHItPmNvbnRlbnRfaGFuZGxlcikgewotICAgICAgICAgICAgci0+d3JpdGVfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3JlcXVlc3RfZW1wdHlfaGFuZGxlcjsKLSAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3Qociwgci0+Y29udGVudF9oYW5kbGVyKHIpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGggPSBjbWNmLT5waGFzZXNbci0+cGhhc2VdLmhhbmRsZXJzLmVsdHM7Ci0gICAgICAgIGZvciAoci0+cGhhc2VfaGFuZGxlciA9IGNtY2YtPnBoYXNlc1tyLT5waGFzZV0uaGFuZGxlcnMubmVsdHMgLSAxOwotICAgICAgICAgICAgIHItPnBoYXNlX2hhbmRsZXIgPj0gMDsKLSAgICAgICAgICAgICByLT5waGFzZV9oYW5kbGVyLS0pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJjID0gaFtyLT5waGFzZV9oYW5kbGVyXShyKTsKLQotICAgICAgICAgICAgaWYgKHJjID09IE5HWF9ET05FKSB7Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciB1c2UgciBoZXJlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgKiBpdCBtYXkgcG9pbnQgdG8gYWxyZWFkeSBmcmVlZCBkYXRhCi0gICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfREVDTElORUQpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX0FDQ0VTU19QSEFTRSkgewotICAgICAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgICAgICAgICAgICAgIGlmIChjbGNmLT5zYXRpc2Z5X2FueSkgewotCi0gICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHItPmFjY2Vzc19jb2RlID0gMDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC53d3dfYXV0aGVudGljYXRlLT5oYXNoID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAocmMgPT0gTkdYX0hUVFBfRk9SQklEREVOIHx8IHJjID09IE5HWF9IVFRQX1VOQVVUSE9SSVpFRCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgci0+YWNjZXNzX2NvZGUgPSByYzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyYyA+PSBOR1hfSFRUUF9TUEVDSUFMX1JFU1BPTlNFCi0gICAgICAgICAgICAgICAgfHwgcmMgPT0gTkdYX0hUVFBfTk9fQ09OVEVOVAotICAgICAgICAgICAgICAgIHx8IHJjID09IE5HWF9FUlJPUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHJjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9DT05URU5UX1BIQVNFKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCByYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocmMgPT0gTkdYX09LICYmIGNtY2YtPnBoYXNlc1tyLT5waGFzZV0udHlwZSA9PSBOR1hfT0spIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX0FDQ0VTU19QSEFTRSAmJiByLT5hY2Nlc3NfY29kZSkgewotCi0gICAgICAgICAgICBpZiAoci0+YWNjZXNzX2NvZGUgPT0gTkdYX0hUVFBfRk9SQklEREVOKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VzcyBmb3JiaWRkZW4gYnkgcnVsZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHItPmFjY2Vzc19jb2RlKTsKKyAgICAgICAgaWYgKHJjID09IE5HWF9PSykgewogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQotCi0gICAgLyogbm8gY29udGVudCBoYW5kbGVyIHdhcyBmb3VuZCAqLwotCi0gICAgaWYgKHItPnVyaS5kYXRhW3ItPnVyaS5sZW4gLSAxXSA9PSAnLycgJiYgIXItPnplcm9faW5fdXJpKSB7Ci0KLSAgICAgICAgaWYgKG5neF9odHRwX21hcF91cmlfdG9fcGF0aChyLCAmcGF0aCwgMCkgIT0gTlVMTCkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyZWN0b3J5IGluZGV4IG9mIFwiJVZcIiBpcyBmb3JiaWRkZW4iLCAmcGF0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0ZPUkJJRERFTik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsICJubyBoYW5kbGVyIGZvdW5kIik7Ci0KLSAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX05PVF9GT1VORCk7CiB9CiAKIAogbmd4X2ludF90Ci1uZ3hfaHR0cF9maW5kX2xvY2F0aW9uX2NvbmZpZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCituZ3hfaHR0cF9jb3JlX2dlbmVyaWNfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgKnBoKQoreworICAgIG5neF9pbnRfdCAgcmM7CisKKyAgICAvKgorICAgICAqIGdlbmVyaWMgcGhhc2UgY2hlY2tlciwKKyAgICAgKiB1c2VkIGJ5IHRoZSBwb3N0IHJlYWQsIHNlcnZlciByZXdyaXRlLCByZXdyaXRlLCBhbmQgcHJlLWFjY2VzcyBwaGFzZXMKKyAgICAgKi8KKworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJnZW5lcmljIHBoYXNlOiAldWkiLCByLT5waGFzZV9oYW5kbGVyKTsKKworICAgIHJjID0gcGgtPmhhbmRsZXIocik7CisKKyAgICBpZiAocmMgPT0gTkdYX09LKSB7CisgICAgICAgIHItPnBoYXNlX2hhbmRsZXIgPSBwaC0+bmV4dDsKKyAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gTkdYX0RFQ0xJTkVEKSB7CisgICAgICAgIHItPnBoYXNlX2hhbmRsZXIrKzsKKyAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gTkdYX0FHQUlOIHx8IHJjID09IE5HWF9ET05FKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgLyogcmMgPT0gTkdYX0VSUk9SIHx8IHJjID09IE5HWF9IVFRQXy4uLiAgKi8KKworICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgcmMpOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCituZ3hfaW50X3QKK25neF9odHRwX2NvcmVfZmluZF9jb25maWdfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAqcGgpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKQEAgLTY5NCwxMyArNjA3LDE1IEBACiAgICAgcmMgPSBuZ3hfaHR0cF9jb3JlX2ZpbmRfbG9jYXRpb24ociwgJmNzY2YtPmxvY2F0aW9ucywgMCk7CiAKICAgICBpZiAocmMgPT0gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiByYzsKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAogICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAogICAgIGlmICghci0+aW50ZXJuYWwgJiYgY2xjZi0+aW50ZXJuYWwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX05PVF9GT1VORDsKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9OT1RfRk9VTkQpOworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLApAQCAtNzIzLDE0ICs2MzgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IGludGVudGVkIHRvIHNlbmQgdG9vIGxhcmdlIGJvZHk6ICVPIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24pOwogCi0gICAgICAgIHJldHVybiBOR1hfSFRUUF9SRVFVRVNUX0VOVElUWV9UT09fTEFSR0U7CisgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFKTsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKIAogICAgIGlmIChyYyA9PSBOR1hfSFRUUF9MT0NBVElPTl9BVVRPX1JFRElSRUNUKSB7CiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uID0gbmd4X2xpc3RfcHVzaCgmci0+aGVhZGVyc19vdXQuaGVhZGVycyk7CiAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5sb2NhdGlvbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCiAgICAgICAgIC8qCkBAIC03NDAsOSArNjU3LDE5MCBAQAogCiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZSA9IGNsY2YtPm5hbWU7CiAKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX01PVkVEX1BFUk1BTkVOVExZOworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKKyAgICByLT5waGFzZV9oYW5kbGVyKys7CisgICAgcmV0dXJuIE5HWF9BR0FJTjsKK30KKworCituZ3hfaW50X3QKK25neF9odHRwX2NvcmVfcG9zdF9yZXdyaXRlX3BoYXNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgKnBoKQoreworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJwb3N0IHJld3JpdGUgcGhhc2U6ICV1aSIsIHItPnBoYXNlX2hhbmRsZXIpOworCisgICAgaWYgKCFyLT51cmlfY2hhbmdlZCkgeworICAgICAgICByLT5waGFzZV9oYW5kbGVyKys7CisgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgfQorCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgInVyaSBjaGFuZ2VzOiAlZCIsIHItPnVyaV9jaGFuZ2VzKTsKKworICAgIC8qCisgICAgICogZ2NjIGJlZm9yZSAzLjMgY29tcGlsZXMgdGhlIGJyb2tlbiBjb2RlIGZvcgorICAgICAqICAgICBpZiAoci0+dXJpX2NoYW5nZXMtLSA9PSAwKQorICAgICAqIGlmIHRoZSByLT51cmlfY2hhbmdlcyBpcyBkZWZpbmVkIGFzCisgICAgICogICAgIHVuc2lnbmVkICB1cmlfY2hhbmdlczo0CisgICAgICovCisKKyAgICByLT51cmlfY2hhbmdlcy0tOworCisgICAgaWYgKHItPnVyaV9jaGFuZ2VzID09IDApIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJyZXdyaXRlIG9yIGludGVybmFsIHJlZGlyZWN0aW9uIGN5Y2xlICIKKyAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgcHJvY2Vzc2luZyBcIiVWXCIiLCAmci0+dXJpKTsKKworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgci0+cGhhc2VfaGFuZGxlciA9IHBoLT5uZXh0OworCisgICAgcmV0dXJuIE5HWF9BR0FJTjsKK30KKworCituZ3hfaW50X3QKK25neF9odHRwX2NvcmVfYWNjZXNzX3BoYXNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfcGhhc2VfaGFuZGxlcl90ICpwaCkKK3sKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOworCisgICAgaWYgKHIgIT0gci0+bWFpbikgeworICAgICAgICByLT5waGFzZV9oYW5kbGVyID0gcGgtPm5leHQ7CisgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgfQorCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImFjY2VzcyBwaGFzZTogJXVpIiwgci0+cGhhc2VfaGFuZGxlcik7CisKKyAgICByYyA9IHBoLT5oYW5kbGVyKHIpOworCisgICAgaWYgKHJjID09IE5HWF9ERUNMSU5FRCkgeworICAgICAgICByLT5waGFzZV9oYW5kbGVyKys7CisgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgfQorCisgICAgaWYgKHJjID09IE5HWF9BR0FJTiB8fCByYyA9PSBOR1hfRE9ORSkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIGlmIChjbGNmLT5zYXRpc2Z5X2FueSA9PSAwKSB7CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICAgICAgci0+cGhhc2VfaGFuZGxlcisrOworICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICAgICAgci0+YWNjZXNzX2NvZGUgPSAwOworCisgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQud3d3X2F1dGhlbnRpY2F0ZSkgeworICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUtPmhhc2ggPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByLT5waGFzZV9oYW5kbGVyID0gcGgtPm5leHQ7CisgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9IVFRQX0ZPUkJJRERFTiB8fCByYyA9PSBOR1hfSFRUUF9VTkFVVEhPUklaRUQpIHsKKyAgICAgICAgICAgIHItPmFjY2Vzc19jb2RlID0gcmM7CisKKyAgICAgICAgICAgIHItPnBoYXNlX2hhbmRsZXIrKzsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByYyA9PSBOR1hfRVJST1IgfHwgcmMgPT0gTkdYX0hUVFBfLi4uICAqLworCisgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCByYyk7CisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCituZ3hfaW50X3QKK25neF9odHRwX2NvcmVfcG9zdF9hY2Nlc3NfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAqcGgpCit7CisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgInBvc3QgYWNjZXNzIHBoYXNlOiAldWkiLCByLT5waGFzZV9oYW5kbGVyKTsKKworICAgIGlmIChyLT5hY2Nlc3NfY29kZSkgeworCisgICAgICAgIGlmIChyLT5hY2Nlc3NfY29kZSA9PSBOR1hfSFRUUF9GT1JCSURERU4pIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VzcyBmb3JiaWRkZW4gYnkgcnVsZSIpOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCByLT5hY2Nlc3NfY29kZSk7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgci0+cGhhc2VfaGFuZGxlcisrOworICAgIHJldHVybiBOR1hfQUdBSU47Cit9CisKKworbmd4X2ludF90CituZ3hfaHR0cF9jb3JlX2NvbnRlbnRfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAqcGgpCit7CisgICAgbmd4X2ludF90ICByYzsKKyAgICBuZ3hfc3RyX3QgIHBhdGg7CisKKyAgICBpZiAoci0+Y29udGVudF9oYW5kbGVyKSB7CisgICAgICAgIHItPndyaXRlX2V2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9yZXF1ZXN0X2VtcHR5X2hhbmRsZXI7CisgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3Qociwgci0+Y29udGVudF9oYW5kbGVyKHIpKTsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiY29udGVudCBwaGFzZTogJXVpIiwgci0+cGhhc2VfaGFuZGxlcik7CisKKyAgICByYyA9IHBoLT5oYW5kbGVyKHIpOworCisgICAgaWYgKHJjID09IE5HWF9ET05FKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKHJjICE9IE5HWF9ERUNMSU5FRCkgeworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHJjKTsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICAvKiByYyA9PSBOR1hfREVDTElORUQgKi8KKworICAgIHBoKys7CisKKyAgICBpZiAocGgtPmNoZWNrZXIpIHsKKyAgICAgICAgci0+cGhhc2VfaGFuZGxlcisrOworICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgIH0KKworICAgIC8qIG5vIGNvbnRlbnQgaGFuZGxlciB3YXMgZm91bmQgKi8KKworICAgIGlmIChyLT51cmkuZGF0YVtyLT51cmkubGVuIC0gMV0gPT0gJy8nICYmICFyLT56ZXJvX2luX3VyaSkgeworCisgICAgICAgIGlmIChuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgociwgJnBhdGgsIDApICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSBpbmRleCBvZiBcIiVWXCIgaXMgZm9yYmlkZGVuIiwgJnBhdGgpOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9GT1JCSURERU4pOworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwgIm5vIGhhbmRsZXIgZm91bmQiKTsKKworICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfTk9UX0ZPVU5EKTsKICAgICByZXR1cm4gTkdYX09LOwogfQogCkBAIC0xOTE2LDcgKzIwMTQsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKG5neF9hcnJheV9pbml0KCZjc2NmLT5zZXJ2ZXJfbmFtZXMsIGNmLT5wb29sLCA0LAorICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY3NjZi0+c2VydmVyX25hbWVzLCBjZi0+dGVtcF9wb29sLCA0LAogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc2VydmVyX25hbWVfdCkpCiAgICAgICAgID09IE5HWF9FUlJPUikKICAgICB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAppbmRleCAwZjI2OWExLi41MDE1NmIxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKQEAgLTQ5LDI4ICs0OSw0OCBAQAogICAgIE5HWF9IVFRQX1BPU1RfUkVBRF9QSEFTRSA9IDAsCiAKICAgICBOR1hfSFRUUF9TRVJWRVJfUkVXUklURV9QSEFTRSwKKwogICAgIE5HWF9IVFRQX0ZJTkRfQ09ORklHX1BIQVNFLAogICAgIE5HWF9IVFRQX1JFV1JJVEVfUEhBU0UsCisgICAgTkdYX0hUVFBfUE9TVF9SRVdSSVRFX1BIQVNFLAogCiAgICAgTkdYX0hUVFBfUFJFQUNDRVNTX1BIQVNFLAogCiAgICAgTkdYX0hUVFBfQUNDRVNTX1BIQVNFLAorICAgIE5HWF9IVFRQX1BPU1RfQUNDRVNTX1BIQVNFLAorCiAgICAgTkdYX0hUVFBfQ09OVEVOVF9QSEFTRSwKIAogICAgIE5HWF9IVFRQX0xPR19QSEFTRQogfSBuZ3hfaHR0cF9waGFzZXM7CiAKK3R5cGVkZWYgc3RydWN0IG5neF9odHRwX3BoYXNlX2hhbmRsZXJfcyAgbmd4X2h0dHBfcGhhc2VfaGFuZGxlcl90OworCit0eXBlZGVmIG5neF9pbnRfdCAoKm5neF9odHRwX3BoYXNlX2hhbmRsZXJfcHQpKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgKnBoKTsKKworc3RydWN0IG5neF9odHRwX3BoYXNlX2hhbmRsZXJfcyB7CisgICAgbmd4X2h0dHBfcGhhc2VfaGFuZGxlcl9wdCAgY2hlY2tlcjsKKyAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICBoYW5kbGVyOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIG5leHQ7Cit9OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgICpoYW5kbGVyczsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBzZXJ2ZXJfcmV3cml0ZV9pbmRleDsKK30gbmd4X2h0dHBfcGhhc2VfZW5naW5lX3Q7CisKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIGhhbmRsZXJzOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIHR5cGU7ICAgICAgICAgICAgICAgIC8qIE5HWF9PSywgTkdYX0RFQ0xJTkVEICovCiB9IG5neF9odHRwX3BoYXNlX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIHNlcnZlcnM7ICAgICAgICAgLyogbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICovCiAKLSAgICBuZ3hfaHR0cF9waGFzZV90ICAgICAgICAgICBwaGFzZXNbTkdYX0hUVFBfTE9HX1BIQVNFICsgMV07CisgICAgbmd4X2h0dHBfcGhhc2VfZW5naW5lX3QgICAgcGhhc2VfZW5naW5lOwogCiAgICAgbmd4X2hhc2hfdCAgICAgICAgICAgICAgICAgaGVhZGVyc19pbl9oYXNoOwogCkBAIC04NSw2ICsxMDUsOCBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHZhcmlhYmxlc19oYXNoX2J1Y2tldF9zaXplOwogCiAgICAgbmd4X2hhc2hfa2V5c19hcnJheXNfdCAgICAqdmFyaWFibGVzX2tleXM7CisKKyAgICBuZ3hfaHR0cF9waGFzZV90ICAgICAgICAgICBwaGFzZXNbTkdYX0hUVFBfTE9HX1BIQVNFICsgMV07CiB9IG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3Q7CiAKIApAQCAtMjYyLDcgKzI4NCwxOSBAQAogfTsKIAogCi1uZ3hfaW50X3Qgbmd4X2h0dHBfZmluZF9sb2NhdGlvbl9jb25maWcobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKK3ZvaWQgbmd4X2h0dHBfY29yZV9ydW5fcGhhc2VzKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CituZ3hfaW50X3Qgbmd4X2h0dHBfY29yZV9nZW5lcmljX3BoYXNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgKnBoKTsKK25neF9pbnRfdCBuZ3hfaHR0cF9jb3JlX2ZpbmRfY29uZmlnX3BoYXNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF9waGFzZV9oYW5kbGVyX3QgKnBoKTsKK25neF9pbnRfdCBuZ3hfaHR0cF9jb3JlX3Bvc3RfcmV3cml0ZV9waGFzZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfcGhhc2VfaGFuZGxlcl90ICpwaCk7CituZ3hfaW50X3Qgbmd4X2h0dHBfY29yZV9hY2Nlc3NfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAqcGgpOworbmd4X2ludF90IG5neF9odHRwX2NvcmVfcG9zdF9hY2Nlc3NfcGhhc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3BoYXNlX2hhbmRsZXJfdCAqcGgpOworbmd4X2ludF90IG5neF9odHRwX2NvcmVfY29udGVudF9waGFzZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfcGhhc2VfaGFuZGxlcl90ICpwaCk7CiAKIG5neF9pbnRfdCBuZ3hfaHR0cF9zZXRfY29udGVudF90eXBlKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CiBuZ3hfaW50X3Qgbmd4X2h0dHBfc2V0X2V4dGVuKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBhMWIwMmY1Li43ODY4MmM1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKQEAgLTEwLDEzICsxMCwxMyBAQAogI2luY2x1ZGUgPG5naW54Lmg+CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogCiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX2hlYWRlcl9maWx0ZXJfaW5pdCwgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTM1LDcgKzM1LDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX2luaXQsICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMTUyLDggKzE1Miw4IEBACiB7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqcDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBsZW47Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgc3RhdHVzLCBpOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgKmI7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgc3RhdHVzLCBpOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgIG91dDsKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgKmhlYWRlcjsKQEAgLTUzMyw3ICs1MzMsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9odHRwX2hlYWRlcl9maWx0ZXJfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfdG9wX2hlYWRlcl9maWx0ZXIgPSBuZ3hfaHR0cF9oZWFkZXJfZmlsdGVyOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggOTViYmRmYS4uMzI2MjE2NiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTEsMTIgKzExLDEyIEBACiAKIHN0YXRpYyBuZ3hfaW50X3QKICAgICBuZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfb3V0cHV0X3Bvc3Rwb25lZF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcik7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9pbml0LCAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTM1LDcgKzM1LDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfaW5pdCwgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfbmV4dF9maWx0ZXIgPSBuZ3hfaHR0cF90b3BfYm9keV9maWx0ZXI7CiAgICAgbmd4X2h0dHBfdG9wX2JvZHlfZmlsdGVyID0gbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCmluZGV4IGViOGI1NTcuLjczZWVlYjAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKQEAgLTE0MCw2ICsxNDAsOSBAQAogCiAgICAgeyBuZ3hfc3RyaW5nKCJEZXN0aW5hdGlvbiIpLCBvZmZzZXRvZihuZ3hfaHR0cF9oZWFkZXJzX2luX3QsIGRlc3RpbmF0aW9uKSwKICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfcHJvY2Vzc19oZWFkZXJfbGluZSB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJEYXRlIiksIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgZGF0ZSksCisgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKICNlbmRpZgogCiAgICAgeyBuZ3hfc3RyaW5nKCJDb29raWUiKSwgMCwgbmd4X2h0dHBfcHJvY2Vzc19jb29raWUgfSwKQEAgLTkzMyw5ICs5MzYsMTEgQEAKIHsKICAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgICBuOwogICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAgKnJldjsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOwogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CiAKLSAgICByZXYgPSByLT5jb25uZWN0aW9uLT5yZWFkOworICAgIGMgPSByLT5jb25uZWN0aW9uOworICAgIHJldiA9IGMtPnJlYWQ7CiAKICAgICBuID0gci0+aGVhZGVyX2luLT5sYXN0IC0gci0+aGVhZGVyX2luLT5wb3M7CiAKQEAgLTk0NCw4ICs5NDksOCBAQAogICAgIH0KIAogICAgIGlmIChyZXYtPnJlYWR5KSB7Ci0gICAgICAgIG4gPSByLT5jb25uZWN0aW9uLT5yZWN2KHItPmNvbm5lY3Rpb24sIHItPmhlYWRlcl9pbi0+bGFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyX2luLT5lbmQgLSByLT5oZWFkZXJfaW4tPmxhc3QpOworICAgICAgICBuID0gYy0+cmVjdihjLCByLT5oZWFkZXJfaW4tPmxhc3QsCisgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcl9pbi0+ZW5kIC0gci0+aGVhZGVyX2luLT5sYXN0KTsKICAgICB9IGVsc2UgewogICAgICAgICBuID0gTkdYX0FHQUlOOwogICAgIH0KQEAgLTk2NiwxMSArOTcxLDE0IEBACiAgICAgfQogCiAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgY2xvc2VkIHByZW1hdHVyZWx5IGNvbm5lY3Rpb24iKTsKICAgICB9CiAKICAgICBpZiAobiA9PSAwIHx8IG4gPT0gTkdYX0VSUk9SKSB7CisgICAgICAgIGMtPmVycm9yID0gcmV2LT5lcnJvcjsKKyAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAic2VuZGluZyByZXNwb25zZSB0byBjbGllbnQiOworCiAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KQEAgLTExNTUsOCArMTE2Myw5IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBkdXBsaWNhdGUgaGVhZGVyIGxpbmU6IFwiJVY6ICVWXCIiLAotICAgICAgICAgICAgICAgICAgJmgtPmtleSwgJmgtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICJjbGllbnQgc2VudCBkdXBsaWNhdGUgaGVhZGVyIGxpbmU6IFwiJVY6ICVWXCIsICIKKyAgICAgICAgICAgICAgICAgICJwcmV2aW91cyB2YWx1ZTogXCIlVjogJVZcIiIsCisgICAgICAgICAgICAgICAgICAmaC0+a2V5LCAmaC0+dmFsdWUsICYoKnBoKS0+a2V5LCAmKCpwaCktPnZhbHVlKTsKIAogICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOwogCkBAIC0xNDYwLDYgKzE0NjksMTMgQEAKICAgICAgICAgICAgICAgICAgICAiaHR0cCBmaW5hbGl6ZSByZXF1ZXN0OiAlZCwgXCIlVj8lVlwiIiwKICAgICAgICAgICAgICAgICAgICByYywgJnItPnVyaSwgJnItPmFyZ3MpOwogCisgICAgaWYgKHJjID09IE5HWF9ERUNMSU5FRCkgeworICAgICAgICByLT5jb250ZW50X2hhbmRsZXIgPSBOVUxMOworICAgICAgICByLT53cml0ZV9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfY29yZV9ydW5fcGhhc2VzOworICAgICAgICBuZ3hfaHR0cF9jb3JlX3J1bl9waGFzZXMocik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAociAhPSByLT5tYWluCiAgICAgICAgICYmIHJjICE9IE5HWF9FUlJPUgogICAgICAgICAmJiAhci0+Y29ubmVjdGlvbi0+ZXJyb3IKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCA1NDY2NmJiLi5iOWFkMmI1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0xODQsNiArMTg0LDcgQEAKICNpZiAoTkdYX0hUVFBfREFWKQogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICpkZXB0aDsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb247CisgICAgbmd4X3RhYmxlX2VsdF90ICAgICAgICAgICAgICAgICAgKmRhdGU7CiAjZW5kaWYKIAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyOwpAQCAtMzUyLDcgKzM1Myw2IEBACiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9uYW1lOwogICAgIG5neF9odHRwX3ZpcnR1YWxfbmFtZXNfdCAgICAgICAgICp2aXJ0dWFsX25hbWVzOwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZV9oYW5kbGVyOwogICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICAgICAgICBjb250ZW50X2hhbmRsZXI7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc19jb2RlOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYwppbmRleCBmYjE4M2M2Li4wNDM0N2MyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYwpAQCAtNDE3LDEyICs0MTcsMTIgQEAKICAgICAgICAgbmd4X2RlbF90aW1lcihyZXYpOwogICAgIH0KIAorICAgIHItPmRpc2NhcmRfYm9keSA9IDE7CisKICAgICBpZiAoci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uIDw9IDApIHsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSAgICByLT5kaXNjYXJkX2JvZHkgPSAxOwotCiAgICAgc2l6ZSA9IHItPmhlYWRlcl9pbi0+bGFzdCAtIHItPmhlYWRlcl9pbi0+cG9zOwogCiAgICAgaWYgKHNpemUpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwppbmRleCA3MTQyOGIwLi42NjU4ZWQwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnVyaSwgKmxvY2F0aW9uOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIGVyciwgbXNpZV9wYWRkaW5nOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGksIG4sIGVyciwgbXNpZV9wYWRkaW5nOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgKm91dCwgKmNsOwogICAgIG5neF9odHRwX2Vycl9wYWdlX3QgICAgICAgKmVycl9wYWdlOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CkBAIC0zNzUsOCArMzc1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoci0+emVyb19pbl91cmkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCB1cmktPmxlbjsgbisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyaS0+ZGF0YVtuXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gemVybzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHItPnplcm9faW5fdXJpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgci0+emVyb19pbl91cmkgPSAwOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgemVybzoKKwogICAgICAgICAgICAgICAgIGlmICh1cmktPmRhdGFbMF0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9pbnRlcm5hbF9yZWRpcmVjdChyLCB1cmksIE5VTEwpOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IGNlZGUwOGQuLjJjZGZkYzggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtMTEzNCwxMSArMTEzNCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgdW1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX3Vwc3RyZWFtX21vZHVsZSk7CisKICAgICBpZiAoci0+dXBzdHJlYW0tPmhlYWRlcnNfaW4ueF9hY2NlbF9yZWRpcmVjdCkgewogICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIE5HWF9ERUNMSU5FRCk7CiAKLSAgICAgICAgdW1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX3Vwc3RyZWFtX21vZHVsZSk7Ci0KICAgICAgICAgcGFydCA9ICZyLT51cHN0cmVhbS0+aGVhZGVyc19pbi5oZWFkZXJzLnBhcnQ7CiAgICAgICAgIGggPSBwYXJ0LT5lbHRzOwogCkBAIC0xMTg4LDI5ICsxMTg4LDYgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG5neF9odHRwX3Vwc3RyZWFtX3NlbmRfcmVzcG9uc2UociwgdSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLW5neF9odHRwX3Vwc3RyZWFtX3NlbmRfcmVzcG9uc2Uobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF91cHN0cmVhbV90ICp1KQotewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwX25vZGVsYXk7Ci0gICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOwotICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBpOwotICAgIG5neF9saXN0X3BhcnRfdCAgICAgICAgICAgICAgICAqcGFydDsKLSAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgKmg7Ci0gICAgbmd4X2V2ZW50X3BpcGVfdCAgICAgICAgICAgICAgICpwOwotICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgICAgICAqYzsKLSAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICAgICAgICAgICAgKmNsOwotICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgICAgICAqY2xmOwotICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAgICAqY2xjZjsKLSAgICBuZ3hfaHR0cF91cHN0cmVhbV9oZWFkZXJfdCAgICAgKmhoOwotICAgIG5neF9odHRwX3Vwc3RyZWFtX21haW5fY29uZl90ICAqdW1jZjsKLQotICAgIHVtY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX21haW5fY29uZihyLCBuZ3hfaHR0cF91cHN0cmVhbV9tb2R1bGUpOwotCiAgICAgcGFydCA9ICZyLT51cHN0cmVhbS0+aGVhZGVyc19pbi5oZWFkZXJzLnBhcnQ7CiAgICAgaCA9IHBhcnQtPmVsdHM7CiAKQEAgLTEyNzAsNiArMTI0NywyMiBAQAogICAgICAgICB1LT5sZW5ndGggPSBOR1hfTUFYX1NJWkVfVF9WQUxVRTsKICAgICB9CiAKKyAgICBuZ3hfaHR0cF91cHN0cmVhbV9zZW5kX3Jlc3BvbnNlKHIsIHUpOworfQorCisKK3N0YXRpYyB2b2lkCituZ3hfaHR0cF91cHN0cmVhbV9zZW5kX3Jlc3BvbnNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdXBzdHJlYW1fdCAqdSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfbm9kZWxheTsKKyAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgICBzaXplOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgIHJjOworICAgIG5neF9ldmVudF9waXBlX3QgICAgICAgICAgKnA7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICAgICAgICpjbDsKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgICpjbGY7CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKwogICAgIHJjID0gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CiAKICAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHJjID4gTkdYX09LIHx8IHItPnBvc3RfYWN0aW9uKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMGZmMmRiMy4uYjI1ZDA3ZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfd3JpdGVfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTAsMTIgKzEwLDEyIEBACiAjaW5jbHVkZSA8bmd4X2h0dHAuaD4KIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3dyaXRlX2ZpbHRlcl9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3dyaXRlX2ZpbHRlcl9pbml0KG5neF9jb25mX3QgKmNmKTsKIAogCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3dyaXRlX2ZpbHRlcl9tb2R1bGVfY3R4ID0gewogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByZWNvbmZpZ3VyYXRpb24gKi8KLSAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwb3N0Y29uZmlndXJhdGlvbiAqLworICAgIG5neF9odHRwX3dyaXRlX2ZpbHRlcl9pbml0LCAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTM0LDcgKzM0LDcgQEAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KLSAgICBuZ3hfaHR0cF93cml0ZV9maWx0ZXJfaW5pdCwgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBwcm9jZXNzICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHRocmVhZCAqLwpAQCAtMjcxLDcgKzI3MSw3IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2h0dHBfd3JpdGVfZmlsdGVyX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2h0dHBfd3JpdGVfZmlsdGVyX2luaXQobmd4X2NvbmZfdCAqY2YpCiB7CiAgICAgbmd4X2h0dHBfdG9wX2JvZHlfZmlsdGVyID0gbmd4X2h0dHBfd3JpdGVfZmlsdGVyOwogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCmluZGV4IDU3NTgzMTMuLjE4MDEwNDUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5jCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5jCkBAIC0yMjEsNiArMjIxLDI0IEBACiAKIAogbmd4X2ludF90CituZ3hfc2V0X2ZpbGVfdGltZSh1X2NoYXIgKm5hbWUsIG5neF9mZF90IGZkLCB0aW1lX3QgcykKK3sKKyAgICBzdHJ1Y3QgdGltZXZhbCAgdHZbMl07CisKKyAgICB0dlswXS50dl9zZWMgPSBzOworICAgIHR2WzBdLnR2X3VzZWMgPSAwOworICAgIHR2WzFdLnR2X3NlYyA9IHM7CisgICAgdHZbMV0udHZfdXNlYyA9IDA7CisKKyAgICBpZiAodXRpbWVzKChjaGFyICopIG5hbWUsIHR2KSAhPSAtMSkgeworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIHJldHVybiBOR1hfRVJST1I7Cit9CisKKworbmd4X2ludF90CiBuZ3hfb3Blbl9kaXIobmd4X3N0cl90ICpuYW1lLCBuZ3hfZGlyX3QgKmRpcikKIHsKICAgICBkaXItPmRpciA9IG9wZW5kaXIoKGNvbnN0IGNoYXIgKikgbmFtZS0+ZGF0YSk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuaCBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCmluZGV4IGRmZmVmNTIuLmZmMjUxNTYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9maWxlcy5oCisrKyBiL3NyYy9vcy91bml4L25neF9maWxlcy5oCkBAIC01OCwxMSArNTgsMTUgQEAKIAogCiAjZGVmaW5lIG5neF9yZW5hbWVfZmlsZShvLCBuKSAgICByZW5hbWUoKGNvbnN0IGNoYXIgKikgbywgKGNvbnN0IGNoYXIgKikgbikKLSNkZWZpbmUgbmd4X3JlbmFtZV9maWxlX24gICAgICAgICJyZW5hbWUiCisjZGVmaW5lIG5neF9yZW5hbWVfZmlsZV9uICAgICAgICAicmVuYW1lKCkiCiAKIAogI2RlZmluZSBuZ3hfY2hhbmdlX2ZpbGVfYWNjZXNzKG4sIGEpIGNobW9kKChjb25zdCBjaGFyICopIG4sIGEpCi0jZGVmaW5lIG5neF9jaGFuZ2VfZmlsZV9hY2Nlc3NfbiAiY2htb2QiCisjZGVmaW5lIG5neF9jaGFuZ2VfZmlsZV9hY2Nlc3NfbiAiY2htb2QoKSIKKworCituZ3hfaW50X3Qgbmd4X3NldF9maWxlX3RpbWUodV9jaGFyICpuYW1lLCBuZ3hfZmRfdCBmZCwgdGltZV90IHMpOworI2RlZmluZSBuZ3hfc2V0X2ZpbGVfdGltZV9uICAgICAgInV0aW1lcygpIgogCiAKICNkZWZpbmUgbmd4X2ZpbGVfaW5mbyhmaWxlLCBzYikgIHN0YXQoKGNvbnN0IGNoYXIgKikgZmlsZSwgc2IpCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbnhfaWNvbjE2LnhwbSBiL3NyYy9vcy93aW4zMi9uZ2lueF9pY29uMTYueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTY4NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvbmdpbnhfaWNvbjE2LnhwbQpAQCAtMCwwICsxLDI0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogbmdpbnhfeHBtW10gPSB7CisiMTYgMTYgMiAyIiwKKy8qIGNvbG9ycyAqLworIiAgIGMgbm9uZSIsCisiR0cgYyAjMDA5OTAwIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICAgICAgICIsCisiICAgICAgICBHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgIiwKKyIgICAgICBHR0dHR0cgICAgICAgIEdHR0dHRyAgICAgICIsCisiICAgIEdHR0dHRyAgICAgICAgICAgIEdHR0dHRyAgICAiLAorIiAgICBHR0dHR0cgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgIEdHR0dHRyAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICIsCisiICBHR0dHR0cgICAgR0dHR0dHR0dHR0dHR0dHR0dHICAiLAorIiAgICBHR0dHR0cgICAgR0dHR0dHR0dHR0dHR0cgICAgIiwKKyIgICAgR0dHR0dHICAgICAgICAgICAgR0dHR0dHICAgICIsCisiICAgICAgR0dHR0dHICAgICAgICBHR0dHR0cgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgIiwKKyIgICAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICAgICAgICIsCisiICAgICAgICBHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorfTsgCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbnhfaWNvbjMyLnhwbSBiL3NyYy9vcy93aW4zMi9uZ2lueF9pY29uMzIueHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjY2MzgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3Mvd2luMzIvbmdpbnhfaWNvbjMyLnhwbQpAQCAtMCwwICsxLDM5IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogbmdpbnhfeHBtW10gPSB7CisiMzIgMzIgMiAyIiwKKy8qIGNvbG9ycyAqLworIiAgIGMgbm9uZSIsCisiR0cgYyAjMDA5OTAwIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAiLAorIiAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAiLAorIiAgICAgICAgICBHR0dHR0dHR0dHICAgICAgICAgICAgICAgICAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgICAiLAorIiAgICAgICAgICBHR0dHR0dHR0dHICAgICAgICAgICAgICAgICAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgICAiLAorIiAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgICAgICAiLAorIiAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgICAgICBHR0dHR0dHR0dHICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRyAgICAgICAgICAiLAorIiAgICAgICAgICBHR0dHR0dHR0dHICAgICAgICAgICAgICAgICAgICAgICAgR0dHR0dHR0dHRyAgICAgICAgICAiLAorIiAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAiLAorIiAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0cgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICBHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHRyAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0cgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmdpbnhfdHJheS54cG0gYi9zcmMvb3Mvd2luMzIvbmdpbnhfdHJheS54cG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE4YTZlYQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ2lueF90cmF5LnhwbQpAQCAtMCwwICsxLDI0IEBACisvKiBYUE0gKi8KK3N0YXRpYyBjaGFyICogbmdpbnhfeHBtW10gPSB7CisiMTYgMTYgMiAyIiwKKy8qIGNvbG9ycyAqLworIiAgIGMgbm9uZSIsCisiR0cgYyAjMDA4MDAwIiwKKy8qIHBpeGVscyAqLworIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgICAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICAgICAgICIsCisiICAgICAgICBHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgIiwKKyIgICAgICBHR0dHR0cgICAgICAgIEdHR0dHRyAgICAgICIsCisiICAgIEdHR0dHRyAgICAgICAgICAgIEdHR0dHRyAgICAiLAorIiAgICBHR0dHR0cgICAgICAgICAgICAgICAgICAgICAgIiwKKyIgIEdHR0dHRyAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICIsCisiICBHR0dHR0cgICAgR0dHR0dHR0dHR0dHR0dHR0dHICAiLAorIiAgICBHR0dHR0cgICAgR0dHR0dHR0dHR0dHR0cgICAgIiwKKyIgICAgR0dHR0dHICAgICAgICAgICAgR0dHR0dHICAgICIsCisiICAgICAgR0dHR0dHICAgICAgICBHR0dHR0cgICAgICAiLAorIiAgICAgIEdHR0dHR0dHR0dHR0dHR0dHR0dHICAgICAgIiwKKyIgICAgICAgIEdHR0dHR0dHR0dHR0dHR0cgICAgICAgICIsCisiICAgICAgICBHR0dHR0dHR0dHR0dHR0dHICAgICAgICAiLAorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIgorfTsgCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMgYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKaW5kZXggZGNmZmNhNy4uYWVlODcwNCAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYwpAQCAtMjYxLDYgKzI2MSwyNyBAQAogCiAKIG5neF9pbnRfdAorbmd4X3NldF9maWxlX3RpbWUodV9jaGFyICpuYW1lLCBuZ3hfZmRfdCBmZCwgdGltZV90IHMpCit7CisgICAgdWludDY0X3QgIGludGVydmFsczsKKyAgICBGSUxFVElNRSAgZnQ7CisKKyAgICAvKiAxMTY0NDQ3MzYwMDAwMDAwMDAgaXMgY29tbWVudGVkIGluIHNyYy9vcy93aW4zMi9uZ3hfdGltZS5jICovCisKKyAgICBpbnRlcnZhbHMgPSBzICogMTAwMDAwMDAgKyAxMTY0NDQ3MzYwMDAwMDAwMDA7CisKKyAgICBmdC5kd0xvd0RhdGVUaW1lID0gKERXT1JEKSBpbnRlcnZhbHM7CisgICAgZnQuZHdIaWdoRGF0ZVRpbWUgPSAoRFdPUkQpIChpbnRlcnZhbHMgPj4gMzIpOworCisgICAgaWYgKFNldEZpbGVUaW1lKGZkLCBOVUxMLCBOVUxMLCAmZnQpICE9IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0VSUk9SOworfQorCisKK25neF9pbnRfdAogbmd4X2ZpbGVfaW5mbyh1X2NoYXIgKmZpbGUsIG5neF9maWxlX2luZm9fdCAqc2IpCiB7CiAgICAgLyogV2luOTUgKi8KQEAgLTMwMSwxMSArMzIyLDExIEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgaWYgKEZpbmROZXh0RmlsZShkaXItPmRpciwgJmRpci0+ZmQpID09IDApIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICBpZiAoRmluZE5leHRGaWxlKGRpci0+ZGlyLCAmZGlyLT5mZCkgIT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAotICAgIHJldHVybiBOR1hfT0s7CisgICAgcmV0dXJuIE5HWF9FUlJPUjsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmggYi9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmgKaW5kZXggYjFjNzIzMC4uYzQyYzA1NSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9maWxlcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuaApAQCAtODAsMTIgKzgwLDE3IEBACiAgICAgbmd4X3Bvb2xfdCAqcG9vbCk7CiAKIAorCituZ3hfaW50X3Qgbmd4X3NldF9maWxlX3RpbWUodV9jaGFyICpuYW1lLCBuZ3hfZmRfdCBmZCwgdGltZV90IHMpOworI2RlZmluZSBuZ3hfc2V0X2ZpbGVfdGltZV9uICAgICAgICAgIlNldEZpbGVUaW1lKCkiCisKKwogbmd4X2ludF90IG5neF9maWxlX2luZm8odV9jaGFyICpmaWxlbmFtZSwgbmd4X2ZpbGVfaW5mb190ICpmaSk7CiAjZGVmaW5lIG5neF9maWxlX2luZm9fbiAgICAgICAgICAgICAiR2V0RmlsZUF0dHJpYnV0ZXNFeCgpIgogCiAKICNkZWZpbmUgbmd4X2ZkX2luZm8oZmQsIGZpKSAgICAgICAgIEdldEZpbGVJbmZvcm1hdGlvbkJ5SGFuZGxlKGZkLCBmaSkKLSNkZWZpbmUgbmd4X2ZkX2luZm9fbiAgICAgICAgICAgICAgICJHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSIKKyNkZWZpbmUgbmd4X2ZkX2luZm9fbiAgICAgICAgICAgICAgICJHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZSgpIgogCiAKICNkZWZpbmUgbmd4X2lzX2RpcihmaSkgICAgICAoKGZpKS0+ZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkK