ZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZG1hX2NoX2NmZy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbWFjaC16eDI5NzUyMHYzL2luY2x1ZGUvbWFjaC9kbWFfY2hfY2ZnLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA2MGFjNjM0Li44ZDdhMmQ1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZG1hX2NoX2NmZy5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My9pbmNsdWRlL21hY2gvZG1hX2NoX2NmZy5oCkBAIC03Nyw3ICs3Nyw3IEBACiAJDQogCURNQV9DSEFOTkVMX0NPTkZJRyhETUFfQ0hfRU1CTVMsCQlmYWxzZSwJZmFsc2UpLA0KIAkjaWYgMQkvKiBvbmx5IHBzIGNvcmUgdXNlZCAqLwkNCi0JRE1BX0NIQU5ORUxfQ09ORklHKERNQV9DSF9VU0lNMSwJCWZhbHNlLAlmYWxzZSksDQorCURNQV9DSEFOTkVMX0NPTkZJRyhETUFfQ0hfVVNJTTEsCQlmYWxzZSwJdHJ1ZSksDQogCSNlbmRpZgkNCiAJRE1BX0NIQU5ORUxfQ09ORklHKERNQV9DSF9NMk1fVFgsCQlmYWxzZSwJdHJ1ZSksDQogCURNQV9DSEFOTkVMX0NPTkZJRyhETUFfQ0hfTTJNX1JYLAkJZmFsc2UsCXRydWUpLA0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My96eDI5NzUyMHYzLW1kbC1kZXZpY2VzLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvengyOTc1MjB2My1tZGwtZGV2aWNlcy5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNzUxYmI3ZC4uMDcwMmE0ZQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tYWNoLXp4Mjk3NTIwdjMvengyOTc1MjB2My1tZGwtZGV2aWNlcy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21hY2gtengyOTc1MjB2My96eDI5NzUyMHYzLW1kbC1kZXZpY2VzLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCS5xdWlya3MgPSBEV19NQ0lfUVVJUktfQlJPS0VOX0NBUkRfREVURUNUSU9OICBcCiAJCXwgRFdfTUNJX1FVSVJLX1VOQUxJR05fRE1BX1NaIHwgRFdfTUNJX1FVSVJLX1VOQUxJR05fRE1BX1NUQVJULAogCS5jYXBzCT0gKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHxNTUNfQ0FQX1VIU19TRFI1MCB8TU1DX0NBUF9OT05SRU1PVkFCTEUpLAotCS5idXNfaHogPSAyNioxMDAwKjEwMDAsCisJLmJ1c19oeiA9IDUwKjEwMDAqMTAwMCwKIAkvLy5jYXBzCT0gKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfTU1DX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RfSElHSFNQRUVEIHwgTU1DX0NBUF9OT05SRU1PVkFCTEUpLAogCS5wbV9jYXBzID0gTU1DX1BNX0tFRVBfUE9XRVIgfCBNTUNfUE1fSUdOT1JFX1BNX05PVElGWSwKIAkvLy5pbml0ID0gc2RtbWNfaW5pdCwKQEAgLTk0OCw3ICs5NDgsNyBAQAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHp4Mjlfa2V5cGFkX2ludFtdID0gewogCSNpZiAxCiAJewotCQkuYWN0aXZlX2xvdwk9IDEsCQkJCS8q5piv5ZCm5L2O55S15bmz5pyJ5pWI44CCMTog5oyJ5LiL5Li65L2O55S15bmzICAwOiDmjInkuIvkuLrpq5jnlLXlubMqLworCQkuYWN0aXZlX2xvdwk9IDEsCQkJCS8qyse38bXNtefGvdPQ0KehozE6ILC0z8LOqrXNtefGvSAgMDogsLTPws6quN+158a9Ki8KIAkJLmRlc2MgICAgICAgPSAia3BkX3Bvd2VyIiwKIAkJLmNvZGUgICAgICAgPSBLRVlfUE9XRVIgICAgICAgICAvKiBwb3dlcjogMTE2ICovLAogCQkudXNlX3BtdV9wd3JvbiA9IDEsICAgICAgICAgICAgIC8qdHJ1ZTogdXNlIHBtdSBwd3JvbiBpbnRlcnJ1cHQgZmFzZTogdXNlIHp4Mjk3NTIwdjIgZXh0IGludCovCkBAIC0xNDg3LDE1ICsxNDg3LDExIEBACiAJLyoKIAkgICppMmMgZGV2aWNlcyBvbiBidXMgMQogCSAgKi8KLS8veGYubGlAMjAyMzA2MjYgYWRkIGZvciBUMTA2QlVHLTI2IHN0YXJ0Ci0jaWYgMAogCWRldmljZXNfbnVtID0gQVJSQVlfU0laRSh6eDI5X2kyYzFfZGV2aWNlcyk7CiAJaWYgKGRldmljZXNfbnVtKXsKIAkJcmV0ID0gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSx6eDI5X2kyYzFfZGV2aWNlcywgZGV2aWNlc19udW0pOwogCQlpZihyZXQpCiAJCQlCVUcoKTsKIAl9Ci0jZW5kaWYKLS8veGYubGlAMjAyMzA2MjYgYWRkIGZvciBUMTA2QlVHLTI2IGVuZAogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tbS9mYXVsdC5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvYXJjaC9hcm0vbW0vZmF1bHQuYwppbmRleCA3M2Y3NmFjLi5jNmEwNjAyIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9hcmNoL2FybS9tbS9mYXVsdC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2FyY2gvYXJtL21tL2ZhdWx0LmMKQEAgLTIxLDEyICsyMSwxMiBAQAogI2lmZGVmIENPTkZJR19NTVUKICNpZmRlZiBDT05GSUdfS1BST0JFUwogc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MqcmVncyx1bnNpZ25lZCBpbnQgZnNyKXtpbnQgCi1yZXQ9KDB4MTBjZis0Nzc3LTB4MjM3OCk7aWYoIXVzZXJfbW9kZShyZWdzKSl7cHJlZW1wdF9kaXNhYmxlKCk7aWYoCi1rcHJvYmVfcnVubmluZygpJiZrcHJvYmVfZmF1bHRfaGFuZGxlcihyZWdzLGZzcikpcmV0PSgweDI1MjYrOTItMHgyNTgxKTsKK3JldD0oMHgxMmFkKzMzNjctMHgxZmQ0KTtpZighdXNlcl9tb2RlKHJlZ3MpKXtwcmVlbXB0X2Rpc2FibGUoKTtpZigKK2twcm9iZV9ydW5uaW5nKCkmJmtwcm9iZV9mYXVsdF9oYW5kbGVyKHJlZ3MsZnNyKSlyZXQ9KDB4MTJjZisxNjgyLTB4MTk2MCk7CiBwcmVlbXB0X2VuYWJsZSgpO31yZXR1cm4gcmV0O30KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncypyZWdzLHVuc2lnbmVkIGludCBmc3Ipe3JldHVybgotKDB4NjgrNTgxOC0weDE3MjIpO30KKygweDFiZjIrMjA0OC0weDIzZjIpO30KICNlbmRpZgogdm9pZCBzaG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0Km1tLHVuc2lnbmVkIGxvbmcgYWRkcil7cGdkX3QqcGdkO2lmKCFtbSltbT0mCiBpbml0X21tO3ByaW50ayhLRVJOX0FMRVJUIlx4NzBceDY3XHg2NFx4MjBceDNkXHgyMFx4MjVceDcwIiAiXG4iLG1tLT5wZ2QpO3BnZD0KQEAgLTM0LDEwICszNCwxMCBAQAogIlx4NWJceDI1XHgzMFx4MzhceDZjXHg3OFx4NWRceDIwXHgyYVx4NzBceDY3XHg2NFx4M2RceDI1XHgzMFx4MzhceDZjXHg2Y1x4NzgiLAogYWRkciwobG9uZyBsb25nKXBnZF92YWwoKnBnZCkpO2Rve3B1ZF90KnB1ZDtwbWRfdCpwbWQ7cHRlX3QqcHRlO2lmKHBnZF9ub25lKCpwZ2QKICkpYnJlYWs7aWYocGdkX2JhZCgqcGdkKSl7cHJpbnRrKCJceDI4XHg2Mlx4NjFceDY0XHgyOSIpO2JyZWFrO31wdWQ9cHVkX29mZnNldCgKLXBnZCxhZGRyKTtpZihQVFJTX1BFUl9QVUQhPSgweGE5Mys2NDI3LTB4MjNhZCkpcHJpbnRrKAorcGdkLGFkZHIpO2lmKFBUUlNfUEVSX1BVRCE9KDB4ODI0KzM1LTB4ODQ2KSlwcmludGsoCiAiXHgyY1x4MjBceDJhXHg3MFx4NzVceDY0XHgzZFx4MjVceDMwXHgzOFx4NmNceDZjXHg3OCIsKGxvbmcgbG9uZylwdWRfdmFsKCpwdWQpKQogO2lmKHB1ZF9ub25lKCpwdWQpKWJyZWFrO2lmKHB1ZF9iYWQoKnB1ZCkpe3ByaW50aygiXHgyOFx4NjJceDYxXHg2NFx4MjkiKTticmVhazsKLX1wbWQ9cG1kX29mZnNldChwdWQsYWRkcik7aWYoUFRSU19QRVJfUE1EIT0oMHgxMDJkKzE3MTQtMHgxNmRlKSlwcmludGsoCit9cG1kPXBtZF9vZmZzZXQocHVkLGFkZHIpO2lmKFBUUlNfUEVSX1BNRCE9KDB4MzY0KzM4LTB4Mzg5KSlwcmludGsoCiAiXHgyY1x4MjBceDJhXHg3MFx4NmRceDY0XHgzZFx4MjVceDMwXHgzOFx4NmNceDZjXHg3OCIsKGxvbmcgbG9uZylwbWRfdmFsKCpwbWQpKQogO2lmKHBtZF9ub25lKCpwbWQpKWJyZWFrO2lmKHBtZF9iYWQoKnBtZCkpe3ByaW50aygiXHgyOFx4NjJceDYxXHg2NFx4MjkiKTticmVhazsKIH1pZihQYWdlSGlnaE1lbShwZm5fdG9fcGFnZShwbWRfdmFsKCpwbWQpPj5QQUdFX1NISUZUKSkpYnJlYWs7cHRlPXB0ZV9vZmZzZXRfbWFwCkBAIC00NywyMSArNDcsMjEgQEAKIHByaW50aygiXHgyY1x4MjBceDJhXHg3MFx4NzBceDc0XHg2NVx4M2RceDI1XHgzMFx4MzhceDZjXHg2Y1x4NzgiLChsb25nIGxvbmcpCiBwdGVfdmFsKHB0ZVtQVEVfSFdUQUJMRV9QVFJTXSkpOwogI2VuZGlmCi1wdGVfdW5tYXAocHRlKTt9d2hpbGUoKDB4YWRiKzQwMDQtMHgxYTdmKSk7cHJpbnRrKCJcbiIpO30KK3B0ZV91bm1hcChwdGUpO313aGlsZSgoMHgyNzIrODQ3NS0weDIzOGQpKTtwcmludGsoIlxuIik7fQogI2Vsc2UJCQkJCQogdm9pZCBzaG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0Km1tLHVuc2lnbmVkIGxvbmcgYWRkcil7fQogI2VuZGlmCQkJCQkKIHN0YXRpYyB2b2lkIF9fZG9fa2VybmVsX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QqbW0sdW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIAogaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXtpZihmaXh1cF9leGNlcHRpb24ocmVncykpcmV0dXJuO2J1c3Rfc3BpbmxvY2tzKAotKDB4NjkzKzUwNTEtMHgxYTRkKSk7cHJpbnRrKEtFUk5fQUxFUlQKKygweDE1NDUrNDEyNS0weDI1NjEpKTtwcmludGsoS0VSTl9BTEVSVAogIlx4NTVceDZlXHg2MVx4NjJceDZjXHg2NVx4MjBceDc0XHg2Zlx4MjBceDY4XHg2MVx4NmVceDY0XHg2Y1x4NjVceDIwXHg2Ylx4NjVceDcyXHg2ZVx4NjVceDZjXHgyMFx4MjVceDczXHgyMFx4NjFceDc0XHgyMFx4NzZceDY5XHg3Mlx4NzRceDc1XHg2MVx4NmNceDIwXHg2MVx4NjRceDY0XHg3Mlx4NjVceDczXHg3M1x4MjBceDI1XHgzMFx4MzhceDZjXHg3OCIgIlxuIgogLChhZGRyPFBBR0VfU0laRSk/CiAiXHg0ZVx4NTVceDRjXHg0Y1x4MjBceDcwXHg2Zlx4NjlceDZlXHg3NFx4NjVceDcyXHgyMFx4NjRceDY1XHg3Mlx4NjVceDY2XHg2NVx4NzJceDY1XHg2ZVx4NjNceDY1IgogOiJceDcwXHg2MVx4NjdceDY5XHg2ZVx4NjdceDIwXHg3Mlx4NjVceDcxXHg3NVx4NjVceDczXHg3NCIsYWRkcik7c2hvd19wdGUobW0sCi1hZGRyKTtkaWUoIlx4NGZceDZmXHg3MFx4NzMiLHJlZ3MsZnNyKTtidXN0X3NwaW5sb2NrcygoMHgxOWEwKzE3MTUtMHgyMDUzKSk7Ci1kb19leGl0KFNJR0tJTEwpO31zdGF0aWMgdm9pZCBfX2RvX3VzZXJfZmF1bHQoc3RydWN0IHRhc2tfc3RydWN0KnRzayx1bnNpZ25lZCAKLWxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHVuc2lnbmVkIGludCBzaWcsaW50IGNvZGUsc3RydWN0IHB0X3JlZ3MqcmVncyl7c3RydWN0Ci0gc2lnaW5mbyBzaTsKK2FkZHIpO2RpZSgiXHg0Zlx4NmZceDcwXHg3MyIscmVncyxmc3IpO2J1c3Rfc3BpbmxvY2tzKCgweGM4NCs1OTAtMHhlZDIpKTtkb19leGl0CisoU0lHS0lMTCk7fXN0YXRpYyB2b2lkIF9fZG9fdXNlcl9mYXVsdChzdHJ1Y3QgdGFza19zdHJ1Y3QqdHNrLHVuc2lnbmVkIGxvbmcgYWRkcgorLHVuc2lnbmVkIGludCBmc3IsdW5zaWduZWQgaW50IHNpZyxpbnQgY29kZSxzdHJ1Y3QgcHRfcmVncypyZWdzKXtzdHJ1Y3Qgc2lnaW5mbyAKK3NpOwogI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCiBpZigoKHVzZXJfZGVidWcmVURCR19TRUdWKSYmKHNpZz09U0lHU0VHVikpfHwoKHVzZXJfZGVidWcmVURCR19CVVMpJiYoc2lnPT0KIFNJR0JVUykpKXtwcmludGsoS0VSTl9ERUJVRwpAQCAtNjksMTIgKzY5LDEyIEBACiAsdHNrLT5jb21tLHNpZyxhZGRyLGZzcik7c2hvd19wdGUodHNrLT5tbSxhZGRyKTtzaG93X3JlZ3MocmVncyk7fQogI2VuZGlmCiB0c2stPnRocmVhZC5hZGRyZXNzPWFkZHI7dHNrLT50aHJlYWQuZXJyb3JfY29kZT1mc3I7dHNrLT50aHJlYWQudHJhcF9ubz0KLSgweDE4ODQrMzA1LTB4MTlhNyk7c2kuc2lfc2lnbm89c2lnO3NpLnNpX2Vycm5vPSgweDE4NGMrMzA4NC0weDI0NTgpO3NpLnNpX2NvZGU9Ci1jb2RlO3NpLnNpX2FkZHI9KHZvaWQgX191c2VyKilhZGRyO2ZvcmNlX3NpZ19pbmZvKHNpZywmc2ksdHNrKTt9dm9pZCBkb19iYWRfYXJlYQotKHVuc2lnbmVkIGxvbmcgYWRkcix1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe3N0cnVjdCB0YXNrX3N0cnVjdCp0c2sKLT1jdXJyZW50O3N0cnVjdCBtbV9zdHJ1Y3QqbW09dHNrLT5hY3RpdmVfbW07aWYodXNlcl9tb2RlKHJlZ3MpKV9fZG9fdXNlcl9mYXVsdCgKLXRzayxhZGRyLGZzcixTSUdTRUdWLFNFR1ZfTUFQRVJSLHJlZ3MpO2Vsc2UgX19kb19rZXJuZWxfZmF1bHQobW0sYWRkcixmc3IscmVncyk7Ci19CisoMHgxMTAwKzEwMzYtMHgxNGZlKTtzaS5zaV9zaWdubz1zaWc7c2kuc2lfZXJybm89KDB4MTgwNCszMjg2LTB4MjRkYSk7c2kuc2lfY29kZQorPWNvZGU7c2kuc2lfYWRkcj0odm9pZCBfX3VzZXIqKWFkZHI7Zm9yY2Vfc2lnX2luZm8oc2lnLCZzaSx0c2spO312b2lkIAorZG9fYmFkX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7c3RydWN0IAordGFza19zdHJ1Y3QqdHNrPWN1cnJlbnQ7c3RydWN0IG1tX3N0cnVjdCptbT10c2stPmFjdGl2ZV9tbTtpZih1c2VyX21vZGUocmVncykpCitfX2RvX3VzZXJfZmF1bHQodHNrLGFkZHIsZnNyLFNJR1NFR1YsU0VHVl9NQVBFUlIscmVncyk7ZWxzZSBfX2RvX2tlcm5lbF9mYXVsdChtbQorLGFkZHIsZnNyLHJlZ3MpO30KICNpZmRlZiBDT05GSUdfTU1VCiAjZGVmaW5lIFZNX0ZBVUxUX0JBRE1BUAkJNjU1MzYKICNkZWZpbmUgVk1fRkFVTFRfQkFEQUNDRVNTCTEzMTA3MgpAQCAtOTEsOCArOTEsOCBAQAogc3RhdGljIGludCBfX2twcm9iZXMgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgCiBwdF9yZWdzKnJlZ3Mpe3N0cnVjdCB0YXNrX3N0cnVjdCp0c2s7c3RydWN0IG1tX3N0cnVjdCptbTtpbnQgZmF1bHQsc2lnLGNvZGU7aW50IAogd3JpdGU9ZnNyJkZTUl9XUklURTt1bnNpZ25lZCBpbnQgZmxhZ3M9RkFVTFRfRkxBR19BTExPV19SRVRSWXwKLUZBVUxUX0ZMQUdfS0lMTEFCTEV8KHdyaXRlP0ZBVUxUX0ZMQUdfV1JJVEU6KDB4MjdiKzUzODctMHgxNzg2KSk7aWYoCi1ub3RpZnlfcGFnZV9mYXVsdChyZWdzLGZzcikpcmV0dXJuKDB4NDEyKzQ1MTQtMHgxNWI0KTt0c2s9Y3VycmVudDttbT10c2stPm1tO2lmKAorRkFVTFRfRkxBR19LSUxMQUJMRXwod3JpdGU/RkFVTFRfRkxBR19XUklURTooMHg2YzArNDI1Ni0weDE3NjApKTtpZigKK25vdGlmeV9wYWdlX2ZhdWx0KHJlZ3MsZnNyKSlyZXR1cm4oMHhkZWIrMjI0NS0weDE2YjApO3Rzaz1jdXJyZW50O21tPXRzay0+bW07aWYoCiBpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykpbG9jYWxfaXJxX2VuYWJsZSgpO2lmKCFtbXx8cGFnZWZhdWx0X2Rpc2FibGVkKCkpZ290byAKIG5vX2NvbnRleHQ7aWYoIWRvd25fcmVhZF90cnlsb2NrKCZtbS0+bW1hcF9zZW0pKXtpZighdXNlcl9tb2RlKHJlZ3MpJiYhCiBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5BUk1fcGMpKWdvdG8gbm9fY29udGV4dDtyZXRyeTpkb3duX3JlYWQoJm1tLT4KQEAgLTEwMSwyMyArMTAxLDIzIEBACiBpZighdXNlcl9tb2RlKHJlZ3MpJiYhc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMocmVncy0+QVJNX3BjKSlnb3RvIG5vX2NvbnRleHQ7CiAjZW5kaWYKIH1mYXVsdD1fX2RvX3BhZ2VfZmF1bHQobW0sYWRkcixmc3IsZmxhZ3MsdHNrKTtpZigoZmF1bHQmVk1fRkFVTFRfUkVUUlkpJiYKLWZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKXJldHVybigweGQ0ZCsxODg5LTB4MTRhZSk7cGVyZl9zd19ldmVudCgKLVBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMsKDB4MTczYisyMDMxLTB4MWYyOSkscmVncyxhZGRyKTtpZighKGZhdWx0JgorZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpcmV0dXJuKDB4YmExKzE5MDYtMHgxMzEzKTtwZXJmX3N3X2V2ZW50KAorUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUUywoMHgxODcrODAyOS0weDIwZTMpLHJlZ3MsYWRkcik7aWYoIShmYXVsdCYKIFZNX0ZBVUxUX0VSUk9SKSYmZmxhZ3MmRkFVTFRfRkxBR19BTExPV19SRVRSWSl7aWYoZmF1bHQmVk1fRkFVTFRfTUFKT1Ipe3Rzay0+Ci1tYWpfZmx0Kys7cGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwoMHgyODkrNTAyMy0weDE2MjcpLHJlZ3MsCittYWpfZmx0Kys7cGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiwoMHg3NDErMjAwNC0weGYxNCkscmVncywKIGFkZHIpO31lbHNle3Rzay0+bWluX2ZsdCsrO3BlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19QQUdFX0ZBVUxUU19NSU4sCi0oMHhmZWMrODAxLTB4MTMwYykscmVncyxhZGRyKTt9aWYoZmF1bHQmVk1fRkFVTFRfUkVUUlkpe2ZsYWdzJj1+CisoMHhkOGIrMjY3LTB4ZTk1KSxyZWdzLGFkZHIpO31pZihmYXVsdCZWTV9GQVVMVF9SRVRSWSl7ZmxhZ3MmPX4KIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlk7Z290byByZXRyeTt9fXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7aWYobGlrZWx5KCEoZmF1bHQmKAotVk1fRkFVTFRfRVJST1J8Vk1fRkFVTFRfQkFETUFQfFZNX0ZBVUxUX0JBREFDQ0VTUykpKSlyZXR1cm4oMHgxNTQ3KzQwNjUtMHgyNTI4KTsKLWlmKGZhdWx0JlZNX0ZBVUxUX09PTSl7cGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTtyZXR1cm4oMHhiNmErNTQxMi0weDIwOGUpO31pZighCitWTV9GQVVMVF9FUlJPUnxWTV9GQVVMVF9CQURNQVB8Vk1fRkFVTFRfQkFEQUNDRVNTKSkpKXJldHVybigweDEzMGYrMjgxNS0weDFlMGUpOworaWYoZmF1bHQmVk1fRkFVTFRfT09NKXtwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpO3JldHVybigweDMxNys0MTY1LTB4MTM1Yyk7fWlmKCEKIHVzZXJfbW9kZShyZWdzKSlnb3RvIG5vX2NvbnRleHQ7aWYoZmF1bHQmVk1fRkFVTFRfU0lHQlVTKXtzaWc9U0lHQlVTO2NvZGU9CiBCVVNfQURSRVJSO31lbHNle3NpZz1TSUdTRUdWO2NvZGU9ZmF1bHQ9PVZNX0ZBVUxUX0JBREFDQ0VTUz9TRUdWX0FDQ0VSUjoKIFNFR1ZfTUFQRVJSO31fX2RvX3VzZXJfZmF1bHQodHNrLGFkZHIsZnNyLHNpZyxjb2RlLHJlZ3MpO3JldHVybgotKDB4MTU0OCsyMDUtMHgxNjE1KTtub19jb250ZXh0Ol9fZG9fa2VybmVsX2ZhdWx0KG1tLGFkZHIsZnNyLHJlZ3MpO3JldHVybgotKDB4NDRjKzYzMDctMHgxY2VmKTt9CisoMHhlMTgrMTE5Mi0weDEyYzApO25vX2NvbnRleHQ6X19kb19rZXJuZWxfZmF1bHQobW0sYWRkcixmc3IscmVncyk7cmV0dXJuCisoMHgxMzkzKzU5My0weDE1ZTQpO30KICNlbHNlCQkJCQkKIHN0YXRpYyBpbnQgZG9fcGFnZV9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzCi0pe3JldHVybigweGVmYSs0MjQ2LTB4MWY5MCk7fQorKXtyZXR1cm4oMHgxZjgrNjk1OC0weDFkMjYpO30KICNlbmRpZgkJCQkJCiAjaWZkZWYgQ09ORklHX01NVQogc3RhdGljIGludCBfX2twcm9iZXMgZG9fdHJhbnNsYXRpb25fZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IsCkBAIC0xMzAsMjEgKzEzMCwyMSBAQAogYmFkX2FyZWE7aWYoIXB1ZF9wcmVzZW50KCpwdWQpKXNldF9wdWQocHVkLCpwdWRfayk7cG1kPXBtZF9vZmZzZXQocHVkLGFkZHIpOwogcG1kX2s9cG1kX29mZnNldChwdWRfayxhZGRyKTsKICNpZmRlZiBDT05GSUdfQVJNX0xQQUUKLWluZGV4PSgweDFkNSsyNzgtMHgyZWIpOworaW5kZXg9KDB4Y2UzKzU5NTEtMHgyNDIyKTsKICNlbHNlCi1pbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4MTRmYSsxNzUzLTB4MWJkMik7CitpbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4ZThhKzQ2MTktMHgyMDk0KTsKICNlbmRpZgogaWYocG1kX25vbmUocG1kX2tbaW5kZXhdKSlnb3RvIGJhZF9hcmVhO2NvcHlfcG1kKHBtZCxwbWRfayk7cmV0dXJuCi0oMHhjMGMrNjIxNi0weDI0NTQpO2JhZF9hcmVhOmRvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpO3JldHVybgotKDB4MTkzYSsyMDgzLTB4MjE1ZCk7fQorKDB4MTE1KzkzMjEtMHgyNTdlKTtiYWRfYXJlYTpkb19iYWRfYXJlYShhZGRyLGZzcixyZWdzKTtyZXR1cm4KKygweDQ5NCs4NjM2LTB4MjY1MCk7fQogI2Vsc2UJCQkJCQogc3RhdGljIGludCBkb190cmFuc2xhdGlvbl9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgCi1wdF9yZWdzKnJlZ3Mpe3JldHVybigweDc1MSszMTMzLTB4MTM4ZSk7fQorcHRfcmVncypyZWdzKXtyZXR1cm4oMHhlM2IrMzI5Ny0weDFiMWMpO30KICNlbmRpZgkJCQkJCiBzdGF0aWMgaW50IGRvX3NlY3RfZmF1bHQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3Isc3RydWN0IHB0X3JlZ3MqcmVncwogKXtpZihpbnRlcnJ1cHRzX2VuYWJsZWQocmVncykpbG9jYWxfaXJxX2VuYWJsZSgpO2RvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpOwotcmV0dXJuKDB4MzZkKzYyMjctMHgxYmMwKTt9c3RhdGljIGludCBkb19iYWQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCBmc3IKLSxzdHJ1Y3QgcHRfcmVncypyZWdzKXtyZXR1cm4oMHg5MGErNjQzMC0weDIyMjcpO31zdHJ1Y3QgZnNyX2luZm97aW50KCpmbikoCityZXR1cm4oMHg4ZTMrNjE3Mi0weDIwZmYpO31zdGF0aWMgaW50IGRvX2JhZCh1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcgorLHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe3JldHVybigweDE3M2ErMTY5Mi0weDFkZDUpO31zdHJ1Y3QgZnNyX2luZm97aW50KCpmbikoCiB1bnNpZ25lZCBsb25nIGFkZHIsdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKTtpbnQgc2lnO2ludCBjb2RlO2NvbnN0IAogY2hhcipuYW1lO307CiAjaWZkZWYgQ09ORklHX0FSTV9MUEFFCkBAIC0xNTMsMjEgKzE1MywyMSBAQAogI2luY2x1ZGUgImZzci0ybGV2ZWwuYyIKICNlbmRpZgogdm9pZCBfX2luaXQgaG9va19mYXVsdF9jb2RlKGludCBucixpbnQoKmZuKSh1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGludCxzdHJ1Y3QgCi1wdF9yZWdzKiksaW50IHNpZyxpbnQgY29kZSxjb25zdCBjaGFyKm5hbWUpe2lmKG5yPCgweDEwZTQrNDMwNy0weDIxYjcpfHxucj49CitwdF9yZWdzKiksaW50IHNpZyxpbnQgY29kZSxjb25zdCBjaGFyKm5hbWUpe2lmKG5yPCgweGMwYSs3MjUtMHhlZGYpfHxucj49CiBBUlJBWV9TSVpFKGZzcl9pbmZvKSlCVUcoKTtmc3JfaW5mb1tucl0uZm49Zm47ZnNyX2luZm9bbnJdLnNpZz1zaWc7ZnNyX2luZm9bbnJdLgogY29kZT1jb2RlO2Zzcl9pbmZvW25yXS5uYW1lPW5hbWU7fQogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKIHN0YXRpYyBERUNMQVJFX1JXU0VNKHNocmlua2VyX3J3c2VtKTthdG9taWNfdCBfY29kZV9wYWdlX2NvdW50PUFUT01JQ19JTklUKAotKDB4YWJhKzI2MTYtMHgxNGYyKSk7c3RydWN0IGFkZHJfaW5mb3tzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7dW5zaWduZWQgbG9uZyB2YWRkcjsKKygweDQzOSs0MzM0LTB4MTUyNykpO3N0cnVjdCBhZGRyX2luZm97c3RydWN0IGxpc3RfaGVhZCBub2RlO3Vuc2lnbmVkIGxvbmcgdmFkZHI7CiB1bnNpZ25lZCBsb25nIGthZGRyO3Vuc2lnbmVkIGxvbmcgcGFnZV9pbmRleDt9O2VudW0gbW9kZW1fYWNjZXNzX3RlY2hub2xvZ3l7R1NNPQotKDB4ODU4KzE3NzgtMHhmNGEpLFVUUkFOPSgweDdiYis2MTI3LTB4MWZhOSksTFRFPSgweDc1OCsxNTYzLTB4ZDcxKSxDT009Ci0oMHgyMDIyKzEyNTYtMHgyNTA3KSxOUl9NT0RFTV9BQ0NFU1M9KDB4NDY4Kzc5NTQtMHgyMzc2KX07c3RydWN0IGxpc3RfaGVhZCAKKygweDEzZTgrMzQ2LTB4MTU0MiksVVRSQU49KDB4ZGI1KzU0ODYtMHgyMzIyKSxMVEU9KDB4MzcwKzc2ODktMHgyMTc3KSxDT009CisoMHgxMmM4KzQxOTItMHgyMzI1KSxOUl9NT0RFTV9BQ0NFU1M9KDB4M2FiKzE4MTItMHhhYmIpfTtzdHJ1Y3QgbGlzdF9oZWFkIAogbW9kZW1fcGFnZV9saXN0W05SX01PREVNX0FDQ0VTU109e0xJU1RfSEVBRF9JTklUKG1vZGVtX3BhZ2VfbGlzdFsKLSgweDdiMSs3NzkyLTB4MjYyMSldKSxMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4ZjgrODgxOC0weDIzNjkpXSksCi1MSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4MTM2NSsxMzY5LTB4MThiYyldKSxMSVNUX0hFQURfSU5JVCgKLW1vZGVtX3BhZ2VfbGlzdFsoMHg3MzArNzg5Mi0weDI2MDEpXSksfTt1bnNpZ25lZCBpbnQgcGFnZV91c2VkWwotKDB4N2M5KzM0MTQtMHgxNGY3KV07c3RydWN0IGNvbXBsZXRpb24gcGFnZV9jb21wbGV0aW9uWygweDU4YSs2NDkyLTB4MWViZSkqCi0oMHhhZjErODgxLTB4ZTQyKV07c3RhdGljIHZvaWQgdW5tYXBfcHRlX3JhbmdlKHBtZF90KnBtZCx1bnNpZ25lZCBsb25nIGFkZHIsCisoMHhjMis3Nzg3LTB4MWYyZCldKSxMSVNUX0hFQURfSU5JVChtb2RlbV9wYWdlX2xpc3RbKDB4MTNlMis0NzcwLTB4MjY4MyldKSwKK0xJU1RfSEVBRF9JTklUKG1vZGVtX3BhZ2VfbGlzdFsoMHg1NjQrNDQwMS0weDE2OTMpXSksTElTVF9IRUFEX0lOSVQoCittb2RlbV9wYWdlX2xpc3RbKDB4MTk5KzIyODItMHhhODApXSksfTt1bnNpZ25lZCBpbnQgcGFnZV91c2VkWworKDB4MTM5MCs0MDcyLTB4MjM1MCldO3N0cnVjdCBjb21wbGV0aW9uIHBhZ2VfY29tcGxldGlvblsoMHg4OGQrNjAyNy0weDFmZjApKgorKDB4MTViMisyNTItMHgxNjhlKV07c3RhdGljIHZvaWQgdW5tYXBfcHRlX3JhbmdlKHBtZF90KnBtZCx1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBsb25nIGVuZCl7cHRlX3QqcHRlO3B0ZT1wdGVfb2Zmc2V0X2tlcm5lbChwbWQsYWRkcik7ZG97cHRlX3QgcHRlbnQ9CiBwdGVwX2dldF9hbmRfY2xlYXIoJmluaXRfbW0sYWRkcixwdGUpO1dBUk5fT04oIXB0ZV9ub25lKHB0ZW50KSYmIXB0ZV9wcmVzZW50KAogcHRlbnQpKTt9d2hpbGUocHRlKyssYWRkcis9UEFHRV9TSVpFLGFkZHIhPWVuZCk7fXN0YXRpYyB2b2lkIHVubWFwX3BtZF9yYW5nZSgKQEAgLTE4MSwyOSArMTgxLDI5IEBACiBhZGRyLHVuc2lnbmVkIGxvbmcgZW5kKXtwZ2RfdCpwZ2Q7dW5zaWduZWQgbG9uZyBuZXh0O0JVR19PTihhZGRyPj1lbmQpO3BnZD0KIHBnZF9vZmZzZXRfayhhZGRyKTtkb3tuZXh0PXBnZF9hZGRyX2VuZChhZGRyLGVuZCk7aWYocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCiBjb250aW51ZTt1bm1hcF9wdWRfcmFuZ2UocGdkLGFkZHIsbmV4dCk7fXdoaWxlKHBnZCsrLGFkZHI9bmV4dCxhZGRyIT1lbmQpO312b2lkIAotc2hyaW5rX21vZGVtX21lbSh1bnNpZ25lZCBpbnQgYWNjZXNzX3R5cGUpe2ludCBpPSgweGYxYSszNTMzLTB4MWNlNyk7dW5zaWduZWQgCitzaHJpbmtfbW9kZW1fbWVtKHVuc2lnbmVkIGludCBhY2Nlc3NfdHlwZSl7aW50IGk9KDB4Njk2KzQwODQtMHgxNjhhKTt1bnNpZ25lZCAKIGxvbmcgdmFkZHI7c3RydWN0IGFkZHJfaW5mbyphZGRyLCp0bXBfYWRkcjtzdHJ1Y3QgbGlzdF9oZWFkIHRtcF9wYWdlX2xpc3Q7Zm9yKGk9Ci0oMHg1NmMrNjY3OS0weDFmODMpO2k8TlJfTU9ERU1fQUNDRVNTO2krKyl7aWYoaT09YWNjZXNzX3R5cGUpY29udGludWU7ZG93bl93cml0ZQotKCZzaHJpbmtlcl9yd3NlbSk7bGlzdF9yZXBsYWNlX2luaXQoJm1vZGVtX3BhZ2VfbGlzdFtpXSwmdG1wX3BhZ2VfbGlzdCk7dXBfd3JpdGUKLSgmc2hyaW5rZXJfcndzZW0pO2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLHRtcF9hZGRyLCZ0bXBfcGFnZV9saXN0LG5vZGUpeworKDB4Zis5MzQtMHgzYjUpO2k8TlJfTU9ERU1fQUNDRVNTO2krKyl7aWYoaT09YWNjZXNzX3R5cGUpY29udGludWU7ZG93bl93cml0ZSgmCitzaHJpbmtlcl9yd3NlbSk7bGlzdF9yZXBsYWNlX2luaXQoJm1vZGVtX3BhZ2VfbGlzdFtpXSwmdG1wX3BhZ2VfbGlzdCk7dXBfd3JpdGUoJgorc2hyaW5rZXJfcndzZW0pO2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLHRtcF9hZGRyLCZ0bXBfcGFnZV9saXN0LG5vZGUpewogbGlzdF9kZWxfaW5pdCgmYWRkci0+bm9kZSk7cGFnZV9jb21wbGV0aW9uW2FkZHItPnBhZ2VfaW5kZXhdLmRvbmU9Ci0oMHg1ODArNDg5OS0weDE4YTMpO3BhZ2VfdXNlZFthZGRyLT5wYWdlX2luZGV4L0JJVFNfUEVSX0xPTkddJj1+KAotKDB4OWY1Kzg5OC0weGQ3Nik8PChhZGRyLT5wYWdlX2luZGV4JUJJVFNfUEVSX0xPTkcpKTt2YWRkcj1hZGRyLT52YWRkciZQQUdFX01BU0sKLTtpZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0fHx2YWRkcj5jcHBzX2dsb2JhbF92YXIubW9kZW1fdGV4dF9lbmQpCi17cGFuaWMoCisoMHgxNzNmKzMxMTktMHgyMzZlKTtwYWdlX3VzZWRbYWRkci0+cGFnZV9pbmRleC9CSVRTX1BFUl9MT05HXSY9figKKygweDFkMys2NDcyLTB4MWIxYSk8PChhZGRyLT5wYWdlX2luZGV4JUJJVFNfUEVSX0xPTkcpKTt2YWRkcj1hZGRyLT52YWRkciYKK1BBR0VfTUFTSztpZih2YWRkcjxjcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0fHx2YWRkcj5jcHBzX2dsb2JhbF92YXIuCittb2RlbV90ZXh0X2VuZCl7cGFuaWMoCiAiXHg2MVx4NjRceDY0XHg3Mlx4NWZceDY5XHg2ZVx4NjZceDZmXHgzYVx4MjBceDI1XHgzMFx4MzhceDc4XHgyMFx4NjlceDczXHgyMFx4MjBceDY0XHg2NVx4NzNceDc0XHg3Mlx4NmZceDc5IgogLGFkZHIpO31mbHVzaF9jYWNoZV92dW5tYXAodmFkZHIsdmFkZHIrUEFHRV9TSVpFKTt1bm1hcF9wYWdlX3JhbmdlKHZhZGRyLHZhZGRyKwogUEFHRV9TSVpFKTtmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhZGRyLHZhZGRyK1BBR0VfU0laRSk7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQogdW5zaWduZWQgaW50IGZsYWdzO2xvY2FsX2lycV9zYXZlKGZsYWdzKTtzZXRfbWVtb3J5X3J3KGFkZHItPmthZGRyLAotKDB4MTdlMSs0NzYtMHgxOWJjKSk7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworKDB4YWRmKzg5Mi0weGU1YSkpO2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogZnJlZV9wYWdlKGFkZHItPmthZGRyKTtrZnJlZShhZGRyKTthdG9taWNfZGVjKCZfY29kZV9wYWdlX2NvdW50KTt9O319CiBFWFBPUlRfU1lNQk9MKHNocmlua19tb2RlbV9tZW0pO3BoeXNfYWRkcl90IHZpcnRfaXNfbWFwcGluZyh1bnNpZ25lZCBsb25nIGFkZHIpewogcGdkX3QqcGdkO3BtZF90KnBtZDtwdGVfdCpwdGVwLHB0ZTt1bnNpZ25lZCBsb25nIHBmbjtwZ2Q9cGdkX29mZnNldF9rKGFkZHIpO2lmKCEKIHBnZF9ub25lKCpwZ2QpKXtwbWQ9cG1kX29mZnNldChwZ2QsYWRkcik7aWYoIXBtZF9ub25lKCpwbWQpKXtwdGVwPXB0ZV9vZmZzZXRfbWFwCiAocG1kLGFkZHIpO3B0ZT0qcHRlcDtpZihwdGVfcHJlc2VudChwdGUpKXtwZm49cHRlX3BmbihwdGUpO3JldHVybiBfX3Bmbl90b19waHlzKAotcGZuKTt9fX1yZXR1cm4oMHhkMmMrMzIzMC0weDE5Y2EpO31zdGF0aWMgaW50IHN5bmNfcGdkKHVuc2lnbmVkIGxvbmcgYWRkciwKK3Bmbik7fX19cmV0dXJuKDB4YTYyKzMyNTUtMHgxNzE5KTt9c3RhdGljIGludCBzeW5jX3BnZCh1bnNpZ25lZCBsb25nIGFkZHIsCiB1bnNpZ25lZCBpbnQgZnNyLHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe3Vuc2lnbmVkIGludCBpbmRleDtwZ2RfdCpwZ2QsKnBnZF9rO3B1ZF90KgogcHVkLCpwdWRfaztwbWRfdCpwbWQsKnBtZF9rO2luZGV4PXBnZF9pbmRleChhZGRyKTtwZ2Q9Y3B1X2dldF9wZ2QoKStpbmRleDtwZ2Rfaz0KIGluaXRfbW0ucGdkK2luZGV4O2lmKHBnZF9ub25lKCpwZ2RfaykpZ290byBiYWRfYXJlYTtpZighcGdkX3ByZXNlbnQoKnBnZCkpCkBAIC0yMTEsMTMgKzIxMSwxMyBAQAogcHVkX25vbmUoKnB1ZF9rKSlnb3RvIGJhZF9hcmVhO2lmKCFwdWRfcHJlc2VudCgqcHVkKSlzZXRfcHVkKHB1ZCwqcHVkX2spO3BtZD0KIHBtZF9vZmZzZXQocHVkLGFkZHIpO3BtZF9rPXBtZF9vZmZzZXQocHVkX2ssYWRkcik7CiAjaWZkZWYgQ09ORklHX0FSTV9MUEFFCi1pbmRleD0oMHhkMWIrNTMwLTB4ZjJkKTsKK2luZGV4PSgweDFkZDArMTQ4NC0weDIzOWMpOwogI2Vsc2UKLWluZGV4PShhZGRyPj5TRUNUSU9OX1NISUZUKSYoMHhmOTIrNTg1LTB4MTFkYSk7CitpbmRleD0oYWRkcj4+U0VDVElPTl9TSElGVCkmKDB4M2JhKzM2NjEtMHgxMjA2KTsKICNlbmRpZgogaWYocG1kX25vbmUocG1kX2tbaW5kZXhdKSlnb3RvIGJhZF9hcmVhO2NvcHlfcG1kKHBtZCxwbWRfayk7cmV0dXJuCi0oMHgxMjYrNzkxOC0weDIwMTQpO2JhZF9hcmVhOmRvX2JhZF9hcmVhKGFkZHIsZnNyLHJlZ3MpO3JldHVybgotKDB4ODJiKzY2MTMtMHgyMjAwKTt9dW5zaWduZWQgbG9uZypyZWFkX2NvZGVfZmlsZSh1bnNpZ25lZCBsb25nIHBhZ2VfaW5kZXgpeworKDB4OGIxKzYwODctMHgyMDc4KTtiYWRfYXJlYTpkb19iYWRfYXJlYShhZGRyLGZzcixyZWdzKTtyZXR1cm4KKygweGQyZCszOTQ2LTB4MWM5Nyk7fXVuc2lnbmVkIGxvbmcqcmVhZF9jb2RlX2ZpbGUodW5zaWduZWQgbG9uZyBwYWdlX2luZGV4KXsKIHVuc2lnbmVkIGxvbmcqY29kZV9idWY7c3NpemVfdCByZXN1bHQ7Y29kZV9idWY9Z2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpO2lmKCEKIGNvZGVfYnVmKXBhbmljKAogIlx4NmRceDY1XHg2ZFx4NjVceDZmXHg3Mlx4NzlceDIwXHg2ZVx4NmZceDc0XHgyMFx4NjVceDZlXHg2Zlx4NzVceDY3XHg2OFx4MjFceDIxIgpAQCAtMjI2LDIzICsyMjYsMjMgQEAKICJceDZmXHg3MFx4NjVceDZlXHgyMFx4NjZceDY5XHg2Y1x4NjVceDIwXHg2NVx4NzJceDcyXHg2Zlx4NzIiICJcbiIpO30KIG1tX3NlZ21lbnRfdCBvbGRfZnM7b2xkX2ZzPWdldF9mcygpO3NldF9mcyhLRVJORUxfRFMpO2xvZmZfdCBwb3M7cG9zPXBhZ2VfaW5kZXgqCiBQQUdFX1NJWkUrY3Bwc19nbG9iYWxfdmFyLm1vZGVtX29mZnNldDtyZXN1bHQ9dmZzX3JlYWQoY3Bwc19nbG9iYWxfdmFyLmZwX2NvZGUsKAotY2hhciopY29kZV9idWYsUEFHRV9TSVpFLCZwb3MpO2lmKHJlc3VsdDwoMHgyMDkwKzEwMzAtMHgyNDk2KSl7cGFuaWMoCitjaGFyKiljb2RlX2J1ZixQQUdFX1NJWkUsJnBvcyk7aWYocmVzdWx0PCgweGY5KzUwMi0weDJlZikpe3BhbmljKAogIlx4NzJceDY1XHg2MVx4NjRceDIwXHg2M1x4NmZceDY0XHg2NVx4MjBceDY2XHg2OVx4NmNceDY1XHgyMFx4NjVceDcyXHg3Mlx4NmZceDcyIiAiXG4iCiApO30KICNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCiB1bnNpZ25lZCBpbnQgZmxhZ3M7bG9jYWxfaXJxX3NhdmUoZmxhZ3MpO3NldF9tZW1vcnlfcm8oKHVuc2lnbmVkIGxvbmcpY29kZV9idWYsCi0oMHgxNzNjKzI4NjMtMHgyMjZhKSk7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworKDB4OTk5KzM3MDItMHgxODBlKSk7bG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogI2VuZGlmCiBzZXRfZnMob2xkX2ZzKTtyZXR1cm4gY29kZV9idWY7fXZvaWQgcmVhZF9jb2RlX21hcHBpbmcodW5zaWduZWQgbG9uZyBhZGRyLAogdW5zaWduZWQgaW50IGZzcixzdHJ1Y3QgcHRfcmVncypyZWdzKXt1bnNpZ25lZCBsb25nIG9mZnNldDt1bnNpZ25lZCBsb25nIHZhZGRyOwogY29uc3Qgc3RydWN0IG1lbV90eXBlKm10eXBlO3Vuc2lnbmVkIGxvbmcqdmlyX2NvZGVidWY7dW5zaWduZWQgbG9uZyBwYWdlX2luZGV4OwotdW5zaWduZWQgbG9uZyBwYWdlX3NoaWZ0O2lmKHZpcnRfaXNfbWFwcGluZyhhZGRyJlBBR0VfTUFTSykhPSgweDFlMTQrODY2LTB4MjE3NikKK3Vuc2lnbmVkIGxvbmcgcGFnZV9zaGlmdDtpZih2aXJ0X2lzX21hcHBpbmcoYWRkciZQQUdFX01BU0spIT0oMHg1YzYrNTIwMi0weDFhMTgpCiApe3N5bmNfcGdkKGFkZHImUEFHRV9NQVNLLGZzcixyZWdzKTtyZXR1cm47fXZhZGRyPWFkZHImUEFHRV9NQVNLO29mZnNldD12YWRkciYofgogY3Bwc19nbG9iYWxfdmFyLmNwa29fdGV4dF9zdGFydCk7cGFnZV9pbmRleD1vZmZzZXQ+PlBBR0VfU0hJRlQ7cGFnZV9zaGlmdD0KIHBhZ2VfaW5kZXglQklUU19QRVJfTE9ORztpZigocGFnZV91c2VkW3BhZ2VfaW5kZXgvQklUU19QRVJfTE9OR10+PnBhZ2Vfc2hpZnQpJgotKDB4OTAxKzQwOTYtMHgxOTAwKSl7d2FpdF9mb3JfY29tcGxldGlvbigmcGFnZV9jb21wbGV0aW9uW3BhZ2VfaW5kZXhdKTtzeW5jX3BnZCgKKygweDg3MSsxNTg2LTB4ZWEyKSl7d2FpdF9mb3JfY29tcGxldGlvbigmcGFnZV9jb21wbGV0aW9uW3BhZ2VfaW5kZXhdKTtzeW5jX3BnZCgKIHZhZGRyLGZzcixyZWdzKTtyZXR1cm47fWVsc2UgcGFnZV91c2VkW3BhZ2VfaW5kZXgvQklUU19QRVJfTE9OR118PSgKLSgweGQ2Mis1MjY5LTB4MjFmNik8PHBhZ2Vfc2hpZnQpO2xvY2FsX2lycV9lbmFibGUoKTt2aXJfY29kZWJ1Zj1yZWFkX2NvZGVfZmlsZSgKKygweDRkYysxMzI5LTB4YTBjKTw8cGFnZV9zaGlmdCk7bG9jYWxfaXJxX2VuYWJsZSgpO3Zpcl9jb2RlYnVmPXJlYWRfY29kZV9maWxlKAogcGFnZV9pbmRleCk7c3RydWN0IGFkZHJfaW5mbyphZGRyX2luZm87YWRkcl9pbmZvPWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyX2luZm8KICksR0ZQX0tFUk5FTCk7YWRkcl9pbmZvLT5rYWRkcj12aXJfY29kZWJ1ZjthZGRyX2luZm8tPnZhZGRyPWFkZHI7YWRkcl9pbmZvLT4KIHBhZ2VfaW5kZXg9cGFnZV9pbmRleDtkb3duX3dyaXRlKCZzaHJpbmtlcl9yd3NlbSk7aWYodmFkZHI8Y3Bwc19nbG9iYWxfdmFyLgpAQCAtMjYwLDQ2ICsyNjAsNDYgQEAKIHN0cnVjdCBwdF9yZWdzKnJlZ3Mpe2NvbnN0IHN0cnVjdCBmc3JfaW5mbyppbmY9ZnNyX2luZm8rZnNyX2ZzKGZzcik7c3RydWN0IAogc2lnaW5mbyBpbmZvOwogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKLWlmKGFkZHIhPSgweGIxNCs3MTQtMHhkZGUpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KK2lmKGFkZHIhPSgweGI1NCsyMDkxLTB4MTM3ZikmJmFkZHI+PWNwcHNfZ2xvYmFsX3Zhci5jcGtvX3RleHRfc3RhcnQmJmFkZHI8PQogY3Bwc19nbG9iYWxfdmFyLm1vZGVtX3RleHRfZW5kKXtyZWFkX2NvZGVfbWFwcGluZyhhZGRyLGZzciZ+RlNSX0xOWF9QRixyZWdzKTsKIHJldHVybjt9CiAjZW5kaWYKIGlmKCFpbmYtPmZuKGFkZHIsZnNyJn5GU1JfTE5YX1BGLHJlZ3MpKXJldHVybjtwcmludGsoS0VSTl9BTEVSVAogIlx4NTVceDZlXHg2OFx4NjFceDZlXHg2NFx4NmNceDY1XHg2NFx4MjBceDY2XHg2MVx4NzVceDZjXHg3NFx4M2FceDIwXHgyNVx4NzNceDIwXHgyOFx4MzBceDc4XHgyNVx4MzBceDMzXHg3OFx4MjlceDIwXHg2MVx4NzRceDIwXHgzMFx4NzhceDI1XHgzMFx4MzhceDZjXHg3OCIgIlxuIgotLGluZi0+bmFtZSxmc3IsYWRkcik7aW5mby5zaV9zaWdubz1pbmYtPnNpZztpbmZvLnNpX2Vycm5vPSgweGFmYysxNzI0LTB4MTFiOCk7CissaW5mLT5uYW1lLGZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4MTJmYis0OTAyLTB4MjYyMSk7CiBpbmZvLnNpX2NvZGU9aW5mLT5jb2RlO2luZm8uc2lfYWRkcj0odm9pZCBfX3VzZXIqKWFkZHI7YXJtX25vdGlmeV9kaWUoIiIscmVncywmCi1pbmZvLGZzciwoMHgxMzUyKzExNTEtMHgxN2QxKSk7fXZvaWQgX19pbml0IGhvb2tfaWZhdWx0X2NvZGUoaW50IG5yLGludCgqZm4pKAoraW5mbyxmc3IsKDB4NDViKzE3ODItMHhiNTEpKTt9dm9pZCBfX2luaXQgaG9va19pZmF1bHRfY29kZShpbnQgbnIsaW50KCpmbikoCiB1bnNpZ25lZCBsb25nLHVuc2lnbmVkIGludCxzdHJ1Y3QgcHRfcmVncyopLGludCBzaWcsaW50IGNvZGUsY29uc3QgY2hhcipuYW1lKXtpZgotKG5yPCgweDQ4ZiszNTk1LTB4MTI5YSl8fG5yPj1BUlJBWV9TSVpFKGlmc3JfaW5mbykpQlVHKCk7aWZzcl9pbmZvW25yXS5mbj1mbjsKKyhucjwoMHgxODhkKzE1MS0weDE5MjQpfHxucj49QVJSQVlfU0laRShpZnNyX2luZm8pKUJVRygpO2lmc3JfaW5mb1tucl0uZm49Zm47CiBpZnNyX2luZm9bbnJdLnNpZz1zaWc7aWZzcl9pbmZvW25yXS5jb2RlPWNvZGU7aWZzcl9pbmZvW25yXS5uYW1lPW5hbWU7fQogYXNtbGlua2FnZSB2b2lkIF9fZXhjZXB0aW9uIGRvX1ByZWZldGNoQWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLHVuc2lnbmVkIGludCAKIGlmc3Isc3RydWN0IHB0X3JlZ3MqcmVncyl7Y29uc3Qgc3RydWN0IGZzcl9pbmZvKmluZj1pZnNyX2luZm8rZnNyX2ZzKGlmc3IpOwogc3RydWN0IHNpZ2luZm8gaW5mbzsKICNpZmRlZiBDT05GSUdfTU9ERU1fQ09ERV9JU19NQVBQSU5HCi1pZihhZGRyIT0oMHgxMDdiKzQ5OTItMHgyM2ZiKSYmYWRkcj49Y3Bwc19nbG9iYWxfdmFyLmNwa29fdGV4dF9zdGFydCYmYWRkcjw9CitpZihhZGRyIT0oMHgxM2IxKzU2NS0weDE1ZTYpJiZhZGRyPj1jcHBzX2dsb2JhbF92YXIuY3Brb190ZXh0X3N0YXJ0JiZhZGRyPD0KIGNwcHNfZ2xvYmFsX3Zhci5tb2RlbV90ZXh0X2VuZCl7cmVhZF9jb2RlX21hcHBpbmcoYWRkcixpZnNyfEZTUl9MTlhfUEYscmVncyk7CiByZXR1cm47fQogI2VuZGlmCiBpZighaW5mLT5mbihhZGRyLGlmc3J8RlNSX0xOWF9QRixyZWdzKSlyZXR1cm47cHJpbnRrKEtFUk5fQUxFUlQKICJceDU1XHg2ZVx4NjhceDYxXHg2ZVx4NjRceDZjXHg2NVx4NjRceDIwXHg3MFx4NzJceDY1XHg2Nlx4NjVceDc0XHg2M1x4NjhceDIwXHg2MVx4NjJceDZmXHg3Mlx4NzRceDNhXHgyMFx4MjVceDczXHgyMFx4MjhceDMwXHg3OFx4MjVceDMwXHgzM1x4NzhceDI5XHgyMFx4NjFceDc0XHgyMFx4MzBceDc4XHgyNVx4MzBceDM4XHg2Y1x4NzgiICJcbiIKLSxpbmYtPm5hbWUsaWZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4ZGUzKzE1ODgtMHgxNDE3KTsKKyxpbmYtPm5hbWUsaWZzcixhZGRyKTtpbmZvLnNpX3NpZ25vPWluZi0+c2lnO2luZm8uc2lfZXJybm89KDB4ZDQ3KzQ5MDEtMHgyMDZjKTsKIGluZm8uc2lfY29kZT1pbmYtPmNvZGU7aW5mby5zaV9hZGRyPSh2b2lkIF9fdXNlciopYWRkcjthcm1fbm90aWZ5X2RpZSgiIixyZWdzLCYKLWluZm8saWZzciwoMHgzNTkrMTA1NC0weDc3NykpO30KK2luZm8saWZzciwoMHhmYjIrMzI5MC0weDFjOGMpKTt9CiAjaWZuZGVmIENPTkZJR19BUk1fTFBBRQogc3RhdGljIGludCBfX2luaXQgZXhjZXB0aW9uc19pbml0KHZvaWQpe2lmKGNwdV9hcmNoaXRlY3R1cmUoKT49Q1BVX0FSQ0hfQVJNdjYpewotaG9va19mYXVsdF9jb2RlKCgweDIwY2YrMjkzLTB4MjFmMCksZG9fdHJhbnNsYXRpb25fZmF1bHQsU0lHU0VHVixTRUdWX01BUEVSUiwKK2hvb2tfZmF1bHRfY29kZSgoMHg2NTQrNjQ5Ni0weDFmYjApLGRvX3RyYW5zbGF0aW9uX2ZhdWx0LFNJR1NFR1YsU0VHVl9NQVBFUlIsCiAiXHg0OVx4MmRceDYzXHg2MVx4NjNceDY4XHg2NVx4MjBceDZkXHg2MVx4NjlceDZlXHg3NFx4NjVceDZlXHg2MVx4NmVceDYzXHg2NVx4MjBceDY2XHg2MVx4NzVceDZjXHg3NCIKLSk7fWlmKGNwdV9hcmNoaXRlY3R1cmUoKT49Q1BVX0FSQ0hfQVJNdjcpe2hvb2tfZmF1bHRfY29kZSgoMHgxNjgwKzMxMS0weDE3YjQpLAorKTt9aWYoY3B1X2FyY2hpdGVjdHVyZSgpPj1DUFVfQVJDSF9BUk12Nyl7aG9va19mYXVsdF9jb2RlKCgweDY0MysyNDczLTB4ZmU5KSwKIGRvX2JhZCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAogIlx4NzNceDY1XHg2M1x4NzRceDY5XHg2Zlx4NmVceDIwXHg2MVx4NjNceDYzXHg2NVx4NzNceDczXHgyMFx4NjZceDZjXHg2MVx4NjdceDIwXHg2Nlx4NjFceDc1XHg2Y1x4NzQiCi0pO2hvb2tfZmF1bHRfY29kZSgoMHhiNDArMTczMC0weDExZmMpLGRvX2JhZCxTSUdTRUdWLFNFR1ZfTUFQRVJSLAorKTtob29rX2ZhdWx0X2NvZGUoKDB4MTBmOSszNTU2LTB4MWVkNyksZG9fYmFkLFNJR1NFR1YsU0VHVl9NQVBFUlIsCiAiXHg3M1x4NjVceDYzXHg3NFx4NjlceDZmXHg2ZVx4MjBceDYxXHg2M1x4NjNceDY1XHg3M1x4NzNceDIwXHg2Nlx4NmNceDYxXHg2N1x4MjBceDY2XHg2MVx4NzVceDZjXHg3NCIKICk7fQogI2lmZGVmIENPTkZJR19NT0RFTV9DT0RFX0lTX01BUFBJTkcKLWludCBpbmRleD0oMHhhZGIrMTYxNS0weDExMmEpO2ZvcihpbmRleD0oMHgxZDc1Kzc4My0weDIwODQpO2luZGV4PAotKDB4ZmMxKzIzODMtMHgxOGU4KSooMHgxMzIwKzQ5OTgtMHgyNjg2KTtpbmRleCsrKWluaXRfY29tcGxldGlvbigmCi1wYWdlX2NvbXBsZXRpb25baW5kZXhdKTsKK2ludCBpbmRleD0oMHhiNzArNjAwMy0weDIyZTMpO2ZvcihpbmRleD0oMHg2N2MrMjU3OC0weDEwOGUpO2luZGV4PAorKDB4MTU0ZCs5Ny0weDE1ODYpKigweGY1NisyMzE2LTB4MTg0Mik7aW5kZXgrKylpbml0X2NvbXBsZXRpb24oJnBhZ2VfY29tcGxldGlvblsKK2luZGV4XSk7CiAjZW5kaWYKLXJldHVybigweDFjNTcrMTkzNS0weDIzZTYpO31hcmNoX2luaXRjYWxsKGV4Y2VwdGlvbnNfaW5pdCk7CityZXR1cm4oMHgzMzIrNjM1LTB4NWFkKTt9YXJjaF9pbml0Y2FsbChleGNlcHRpb25zX2luaXQpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvY3Brby9jcGtvX21haW4uYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvY3Brby9jcGtvX21haW4uYwppbmRleCBmOGI1Yzk0Li41YTQ1MjQzIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL2Nwa28vY3Brb19tYWluLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9jcGtvL2Nwa29fbWFpbi5jCkBAIC03NiwzNiArNzYsMzcgQEAKIG1tcF9BbXJFbmNDbG9zZShWT0lEKnBDb2RlY0NvbnRleHQpO2V4dGVybiBVSU5UOCB6RHJ2RWRjcF9Jc0J1c3koaW50IEVkY3BOdW0pOwogZXh0ZXJuIFNJTlQzMiB6RHJ2VnBfQXVkaW9EYXRhV3JpdGUoY29uc3QgVk9JRCpwQnVmLFVJTlQzMiB1aUxlbik7ZXh0ZXJuIFNJTlQzMiAKIHpEcnZWcF9BdWRpb0RhdGFPcGVuKFVJTlQzMiBhdWRpb1R5cGUsVUlOVDMyIHNhbXBsZVJhdGUpO2V4dGVybiBTSU5UMzIgCi16RHJ2VnBfQXVkaW9EYXRhQ2xvc2Uodm9pZCk7ZXh0ZXJuIFNJTlQzMiB6RHJ2VnBfR2V0VnBMb29wX1dyYXAoVk9JRCk7dHlwZWRlZiAKLXN0cnVjdCBjcGtvX3NlY3Rpb257dW5zaWduZWQgaW50IGNwa29fdGV4dF9zdGFydDt1bnNpZ25lZCBpbnQgY3Brb19yb2RhdGFfc3RhcnQ7Cit6RHJ2VnBfQXVkaW9EYXRhQ2xvc2Uodm9pZCk7ZXh0ZXJuIFNJTlQzMiB6RHJ2VnBfR2V0VnBMb29wX1dyYXAoVk9JRCk7ZXh0ZXJuIAorVk9JRCB6RHJ2VnBfU3RhdHVzKFVJTlQzMipzYW1wbGVfcmF0ZSxVSU5UMzIqdm9pY2Vfc3RhdHVzKTt0eXBlZGVmIHN0cnVjdCAKK2Nwa29fc2VjdGlvbnt1bnNpZ25lZCBpbnQgY3Brb190ZXh0X3N0YXJ0O3Vuc2lnbmVkIGludCBjcGtvX3JvZGF0YV9zdGFydDsKIHVuc2lnbmVkIGludCBfX3V0cmFuX21vZGVtX3RleHRfc3RhcnQ7dW5zaWduZWQgaW50IF9fbHRlX21vZGVtX3RleHRfc3RhcnQ7CiB1bnNpZ25lZCBpbnQgX19jb21tX21vZGVtX3RleHRfc3RhcnQ7dW5zaWduZWQgaW50IG1vZGVtX3RleHRfZW5kO3Vuc2lnbmVkIGludCAKIGNwa29fZGF0YV9zdGFydDt1bnNpZ25lZCBpbnQgY3Brb19ic3Nfc3RhcnQ7dW5zaWduZWQgaW50IGNwa29fdGV4dF9vZmZzZXQ7fQogY3Brb19zZWN0aW9uX2xheW91dDtjcGtvX3NlY3Rpb25fbGF5b3V0IGNwa29fcHNfc2VjdGlvbjtpbnQgcmFpc2UoaW50IHNpZ25vKXsKLXJldHVybigweDE3MSs0Njg0LTB4MTNiZCk7fWV4dGVybiB1bnNpZ25lZCBpbnQgU3lzRW50cnkodm9pZCk7c3RhdGljIGludCAKK3JldHVybigweDMxNis2NzEyLTB4MWQ0ZSk7fWV4dGVybiB1bnNpZ25lZCBpbnQgU3lzRW50cnkodm9pZCk7c3RhdGljIGludCAKIGtvX01haW5fVGhyZWFkKHZvaWQqZGF0YSl7c3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtPXsuc2NoZWRfcHJpb3JpdHk9Ci1NQVhfVVNFUl9SVF9QUklPLygweDczKzk3MTAtMHgyNjVmKS0oMHg2N2ErMzQyNy0weDEzZGEpfTtpbnQgcmV0PQotKDB4ZDU3KzcwLTB4ZDlkKTtzY2hlZF9zZXRzY2hlZHVsZXIoY3VycmVudCxTQ0hFRF9GSUZPLCZwYXJhbSk7cmV0PVN5c0VudHJ5KCk7aWYKLShyZXQhPSgweDEzZjgrMzE0NC0weDIwNDApKXBhbmljKCJNYWluX1RocmVhZFxuIik7cGFyYW0uc2NoZWRfcHJpb3JpdHk9Ci1NQVhfVVNFUl9SVF9QUklPLSgweDI2Nys2Nzg3LTB4MWNiYyk7c2NoZWRfc2V0c2NoZWR1bGVyKGt0aHJlYWRkX3Rhc2ssU0NIRURfRklGTwotLCZwYXJhbSk7cmV0dXJuKDB4MTRmMCsxNzU1LTB4MWJjYik7fWludCB6dGVfbW9kZW1fa29fc3RhcnQodm9pZCl7a3RocmVhZF9ydW4oCitNQVhfVVNFUl9SVF9QUklPLygweGU2YisyMTIwLTB4MTZiMSktKDB4MTk3NSsxNTc4LTB4MWY5Yyl9O2ludCByZXQ9CisoMHgzYTArNjEzMS0weDFiOTMpO3NjaGVkX3NldHNjaGVkdWxlcihjdXJyZW50LFNDSEVEX0ZJRk8sJnBhcmFtKTtyZXQ9U3lzRW50cnkoKQorO2lmKHJldCE9KDB4MTQxOSszOTUwLTB4MjM4NykpcGFuaWMoIk1haW5fVGhyZWFkXG4iKTtwYXJhbS5zY2hlZF9wcmlvcml0eT0KK01BWF9VU0VSX1JUX1BSSU8tKDB4MTBlZCs4Mi0weDExMTEpO3NjaGVkX3NldHNjaGVkdWxlcihrdGhyZWFkZF90YXNrLFNDSEVEX0ZJRk8sCismcGFyYW0pO3JldHVybigweDIyNys4MDc1LTB4MjFiMik7fWludCB6dGVfbW9kZW1fa29fc3RhcnQodm9pZCl7a3RocmVhZF9ydW4oCiBrb19NYWluX1RocmVhZCxOVUxMLCJceDVhXHg1NFx4NDVceDRkXHg2MVx4NjlceDZlXHg1NFx4NjhceDcyXHg2NVx4NjFceDY0Iik7Ci1yZXR1cm4oMHgxZmEwKzEwNjktMHgyM2NkKTt9c3RhdGljIHZvaWQgY3Brb19zZWN0aW9uaW5mb19zZXQodm9pZCl7aW50IHJldDsKLXN0cnVjdCBmaWxlKmZwO21tX3NlZ21lbnRfdCBvbGRfZnM7bG9mZl90IGNwa29fcG9zPSgweDFlNTcrMTY1Mi0weDI0Y2IpO3N0cnVjdCAKK3JldHVybigweDg5MCs3NzQ4LTB4MjZkNCk7fXN0YXRpYyB2b2lkIGNwa29fc2VjdGlvbmluZm9fc2V0KHZvaWQpe2ludCByZXQ7c3RydWN0CisgZmlsZSpmcDttbV9zZWdtZW50X3Qgb2xkX2ZzO2xvZmZfdCBjcGtvX3Bvcz0oMHgxNTcwKzQ0MzYtMHgyNmM0KTtzdHJ1Y3QgCiBjcHBzX2dsb2JhbE1vZGVtIGdsb2JhbFZhcjtmcD1maWxwX29wZW4oCiAiXHgyZlx4NmNceDY5XHg2Mlx4MmZceDYzXHg3MFx4NmJceDZmXHgyZlx4NjNceDcwXHg2Ylx4NmZceDVmXHg3M1x4NjVceDYzXHg2OVx4NmVceDY2XHg2Zlx4MmVceDYyXHg2OVx4NmUiCi0sKDB4MTJmOSsyMTMwLTB4MWI0YiksKDB4NWY5KzY3OTMtMHgyMDgyKSk7aWYoSVNfRVJSKGZwKXx8ZnA9PU5VTEwpcGFuaWMoCissKDB4Mjk0KzE1MTItMHg4N2MpLCgweGUwNiszMjcxLTB4MWFjZCkpO2lmKElTX0VSUihmcCl8fGZwPT1OVUxMKXBhbmljKAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7b2xkX2ZzPQogZ2V0X2ZzKCk7c2V0X2ZzKEtFUk5FTF9EUyk7cmV0PXZmc19yZWFkKGZwLChjaGFyKikmY3Brb19wc19zZWN0aW9uLHNpemVvZigKLWNwa29fc2VjdGlvbl9sYXlvdXQpLCZjcGtvX3Bvcyk7aWYocmV0PD0oMHg1ZjUrNTg5MC0weDFjZjcpKXBhbmljKAorY3Brb19zZWN0aW9uX2xheW91dCksJmNwa29fcG9zKTtpZihyZXQ8PSgweDNjYSs3MjU3LTB4MjAyMykpcGFuaWMoCiAiXHg3Mlx4NjVceDYxXHg2NFx4MjBceDY2XHg2OVx4NmNceDY1XHgyMFx4NjVceDcyXHg3Mlx4NmZceDcyIiAiXG4iKTtmaWxwX2Nsb3NlKAogZnAsTlVMTCk7CiAjaWZkZWYgQ09ORklHX01PREVNX0NPREVfSVNfTUFQUElORwogZnA9ZmlscF9vcGVuKAogIlx4MmZceDZjXHg2OVx4NjJceDJmXHg2M1x4NzBceDZiXHg2Zlx4MmZceDYzXHg3MFx4NmJceDZmXHgyZVx4NmJceDZmIiwKLSgweGE4MyszMzQwLTB4MTc4ZiksKDB4NWM1KzcyOTYtMHgyMjQ1KSk7aWYoSVNfRVJSKGZwKXx8ZnA9PU5VTEwpcGFuaWMoCisoMHg5Y2ErNDYxNy0weDFiZDMpLCgweDY1OSs3MjE5LTB4MjI4YykpO2lmKElTX0VSUihmcCl8fGZwPT1OVUxMKXBhbmljKAogIlx4NmZceDcwXHg2NVx4NmVceDIwXHg2Nlx4NjlceDZjXHg2NVx4MjBceDY1XHg3Mlx4NzJceDZmXHg3MiIgIlxuIik7ZnAtPmZfcmEuCi1yYV9wYWdlcz0oMHhlZWMrMTYyNy0weDE1NDcpOworcmFfcGFnZXM9KDB4YWM2KzYwODAtMHgyMjg2KTsKICNlbmRpZgogaWYoY3Brb19wc19zZWN0aW9uLmNwa29fdGV4dF9zdGFydCl7Z2xvYmFsVmFyLmNwa29fdGV4dF9zdGFydD0odW5zaWduZWQgbG9uZykKIGNwa29fcHNfc2VjdGlvbi5jcGtvX3RleHRfc3RhcnQ7Z2xvYmFsVmFyLmNwa29fcm9kYXRhX3N0YXJ0PSh1bnNpZ25lZCBsb25nKQpAQCAtMTI1LDcgKzEyNiw3IEBACiB2ZnJlZV9tb2RlbV9zZWN0aW9uKGdsb2JhbFZhci5jcGtvX3RleHRfc3RhcnQsZ2xvYmFsVmFyLm1vZGVtX3RleHRfZW5kKTsKICNlbmRpZgogfWVsc2UgcGFuaWMoIlx4NjZceDY5XHg2Y1x4NjVceDIwXHg2NVx4NzJceDcyXHg2Zlx4NzIiICJcbiIpO31zdGF0aWMgaW50IAotY3Brb19zdGFydCh2b2lkKXtzdHJ1Y3QgY3Bwc19jYWxsYmFja3MgY2FsbGJhY2s9eygweGIyNSszMDI2LTB4MTZmNyl9O2NhbGxiYWNrLgorY3Brb19zdGFydCh2b2lkKXtzdHJ1Y3QgY3Bwc19jYWxsYmFja3MgY2FsbGJhY2s9eygweDViNys0MjM2LTB4MTY0Myl9O2NhbGxiYWNrLgogek9zc19SZXNldE5WRmFjdG9yeT16T3NzX1Jlc2V0TlZGYWN0b3J5O2NhbGxiYWNrLnpPc3NfTnZyYW1GbHVzaD16T3NzX052cmFtRmx1c2gKIDtjYWxsYmFjay56T3NzX052SXRlbVdyaXRlPXpPc3NfTnZJdGVtV3JpdGU7Y2FsbGJhY2suek9zc19Odkl0ZW1Xcml0ZUZhY3Rvcnk9CiB6T3NzX052SXRlbVdyaXRlRmFjdG9yeTtjYWxsYmFjay56T3NzX052SXRlbVJlYWQ9ek9zc19Odkl0ZW1SZWFkO2NhbGxiYWNrLgpAQCAtMTg5LDYgKzE5MCw3IEBACiBtbXBfQW1yRGVjQ2xvc2U7Y2FsbGJhY2subW1wX0FtckVuY0Nsb3NlPW1tcF9BbXJFbmNDbG9zZTtjYWxsYmFjay4KIHpEcnZWcF9BdWRpb0RhdGFPcGVuPXpEcnZWcF9BdWRpb0RhdGFPcGVuO2NhbGxiYWNrLnpEcnZWcF9BdWRpb0RhdGFXcml0ZT0KIHpEcnZWcF9BdWRpb0RhdGFXcml0ZTtjYWxsYmFjay56RHJ2VnBfQXVkaW9EYXRhQ2xvc2U9ekRydlZwX0F1ZGlvRGF0YUNsb3NlOworY2FsbGJhY2suekRydlZwX1N0YXR1cz16RHJ2VnBfU3RhdHVzOwogI2VuZGlmCQogY2FsbGJhY2sucHNtX01vZGVtRGV2U2xlZXA9cHNtX01vZGVtRGV2U2xlZXA7Y2FsbGJhY2sucHNtX01vZGVtU2xlZXBDaGVjaz0KIHBzbV9Nb2RlbVNsZWVwQ2hlY2s7Y2FsbGJhY2sucHNtX01vZGVtU2xlZXBUaW1lR2V0PXBzbV9Nb2RlbVNsZWVwVGltZUdldDsKQEAgLTE5Niw1ICsxOTgsNSBAQAogcHNtX0dldE1vZGVtU2xlZXBGbGFnU3RhdHVzPXBzbV9HZXRNb2RlbVNsZWVwRmxhZ1N0YXR1czsKICNlbmRpZgogY3Bwc19jYWxsYmFja3NfcmVnaXN0ZXIoJmNhbGxiYWNrKTtjcGtvX3NlY3Rpb25pbmZvX3NldCgpO3p0ZV9tb2RlbV9rb19zdGFydCgpOwotcmV0dXJuKDB4NmFhKzM1OTMtMHgxNGIzKTt9c3RhdGljIGludCBjcGtvX3N0b3Aodm9pZCl7cmV0dXJuKDB4YWYzKzE4NDMtMHgxMjI2KTsKK3JldHVybigweDE5OTcrMTY4LTB4MWEzZik7fXN0YXRpYyBpbnQgY3Brb19zdG9wKHZvaWQpe3JldHVybigweDYzNis1Nzg0LTB4MWNjZSk7CiB9bW9kdWxlX2luaXQoY3Brb19zdGFydCk7bW9kdWxlX2V4aXQoY3Brb19zdG9wKTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCmluZGV4IGVkYjVjNWEuLmVkYTExZTIgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwpAQCAtMTczMSw3ICsxNzMxLDYgQEAKIAlpbnQgcmV0OwogCQogCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwotCW11dGV4X2xvY2soJm90cE11dGV4KTsKIAkKIAkvKm9wcy5sZW4gPSBsZW47CiAJb3BzLmRhdGJ1ZiA9IGJ1ZjsKQEAgLTE3NDYsNyArMTc0NSw2IEBACiAJLy8qcmV0bGVuID0gb3BzLnJldGxlbjsKIAkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKIAotCW11dGV4X3VubG9jaygmb3RwTXV0ZXgpOwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAxNyw3ICsyMDE1LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwotCW11dGV4X2xvY2soJm90cE11dGV4KTsKIAogCXN3aXRjaCAob3BzLT5tb2RlKSB7CiAJY2FzZSBNVERfT1BTX1BMQUNFX09PQjoKQEAgLTIwMzQsNyArMjAzMSw2IEBACiAJZWxzZQogCQlyZXQgPSBuYW5kX2RvX3JlYWRfb3BzKG10ZCwgZnJvbSwgb3BzKTsKIG91dDoKLQltdXRleF91bmxvY2soJm90cE11dGV4KTsKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI0ODEsMTQgKzI0NzcsMTIgQEAKIAlpbnQgcmV0OwogCQkKIAluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9XUklUSU5HKTsKLQltdXRleF9sb2NrKCZvdHBNdXRleCk7CiAJb3BzLmxlbiA9IGxlbjsKIAlvcHMuZGF0YnVmID0gKHVpbnQ4X3QgKilidWY7CiAJb3BzLm9vYmJ1ZiA9IE5VTEw7CiAJb3BzLm1vZGUgPSAwOwogCXJldCA9IG5hbmRfZG9fd3JpdGVfb3BzKG10ZCwgdG8sICZvcHMpOwogCSpyZXRsZW4gPSBvcHMucmV0bGVuOwotCW11dGV4X3VubG9jaygmb3RwTXV0ZXgpOwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAkJCiAJcmV0dXJuIHJldDsKQEAgLTI2MDYsNyArMjYwMCw2IEBACiAJfQogCiAJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfV1JJVElORyk7Ci0JbXV0ZXhfbG9jaygmb3RwTXV0ZXgpOwogCiAJc3dpdGNoIChvcHMtPm1vZGUpIHsKIAljYXNlIE1URF9PUFNfUExBQ0VfT09COgpAQCAtMjYyMyw3ICsyNjE2LDYgQEAKIAllbHNlCiAJCXJldCA9IG5hbmRfZG9fd3JpdGVfb3BzKG10ZCwgdG8sIG9wcyk7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZvdHBNdXRleCk7CiAJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwkKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjcwNyw3ICsyNjk5LDYgQEAKIAogCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwogCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX0VSQVNJTkcpOwotCW11dGV4X2xvY2soJm90cE11dGV4KTsKIAogCS8qIFNoaWZ0IHRvIGdldCBmaXJzdCBwYWdlICovCiAJcGFnZSA9IChpbnQpKGluc3RyLT5hZGRyID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOwpAQCAtMjgxNyw3ICsyODA4LDYgQEAKIAlyZXQgPSBpbnN0ci0+c3RhdGUgPT0gTVREX0VSQVNFX0RPTkUgPyAwIDogLUVJTzsKIAogCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQltdXRleF91bmxvY2soJm90cE11dGV4KTsKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAKIAkvKiBEbyBjYWxsIGJhY2sgZnVuY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvc3BpX25hbmQuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbXRkL25hbmQvc3BpX25hbmQuYwppbmRleCAwY2MxZjViLi4wMzc2MTU1IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL210ZC9uYW5kL3NwaV9uYW5kLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9tdGQvbmFuZC9zcGlfbmFuZC5jCkBAIC00Nyw2ICs0Nyw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgd2FrZV9sb2NrIG5hbmRfd2FrZV9sb2NrOwogCitleHRlcm4gc3RydWN0IG11dGV4IG90cE11dGV4OworCiAjaWYgU1BJX05BTkRfREVCVUcKICNkZWZpbmUgc3BpX25hbmRfZGVidWcoZm10LGFyZ3MuLi4pICAgIHByaW50ayAoZm10ICwjI2FyZ3MpCiAjZWxzZQpAQCAtNzc1LDcgKzc3Nyw3IEBACiAgICAgLm9mZnMgPSA0LAogICAgIC5sZW4gPSA0LAogICAgIC52ZXJvZmZzID0gMjAsCi0gICAgLm1heGJsb2NrcyA9IDE2LAorICAgIC5tYXhibG9ja3MgPSAxMiwKICAgICAucGF0dGVybiA9IGJidF9wYXR0ZXJuLAogfTsKIApAQCAtNzg3LDcgKzc4OSw3IEBACiAgICAgLm9mZnMgPSA0LAogICAgIC5sZW4gPSA0LAogICAgIC52ZXJvZmZzID0gMjAsCi0gICAgLm1heGJsb2NrcyA9IDE2LAorICAgIC5tYXhibG9ja3MgPSAxMiwKICAgICAucGF0dGVybiA9IG1pcnJvcl9wYXR0ZXJuLAogfTsKIApAQCAtODQ2LDYgKzg0OCw3IEBACiAgICAgd2FrZV9sb2NrKCZuYW5kX3dha2VfbG9jayk7CiAJenhfY3B1aWRsZV9zZXRfYnVzeShJRExFX0ZMQUdfRkxBU0gpOwogCXNvZnRfc3Bpbl9sb2NrKE5BTkRfU0ZMT0NLKTsKKwltdXRleF9sb2NrKCZvdHBNdXRleCk7CiAKIAljdHJsLT5sb2NrKCk7CiB9CkBAIC04NTUsNyArODU4LDggQEAKIAlzdHJ1Y3Qgc3BpX25hbmRfY3RybF9vcHMgKmN0cmwgPSBzcGlfbmFuZC0+Y3RybDsKIAogCWN0cmwtPnVubG9jaygpOwkKLQkKKworCW11dGV4X3VubG9jaygmb3RwTXV0ZXgpOwogICAgIHNvZnRfc3Bpbl91bmxvY2soTkFORF9TRkxPQ0spOwogCXp4X2NwdWlkbGVfc2V0X2ZyZWUoSURMRV9GTEFHX0ZMQVNIKTsKIAl3YWtlX3VubG9jaygmbmFuZF93YWtlX2xvY2spOy8vTkVFRCBDSEVDSwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9haWN3Zl9zZGlvLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uYwppbmRleCBkOTY2Y2IwLi5hOWM3ZmI1IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgInNkaW9faG9zdC5oIgogI2luY2x1ZGUgInJ3bnhfZGVmcy5oIgogI2luY2x1ZGUgInJ3bnhfcGxhdGZvcm0uaCIKKyNpbmNsdWRlICJyd254X21zZ190eC5oIgogI2lmZGVmIENPTkZJR19JTkdFTklDX1QyMAogI2luY2x1ZGUgIm1hY2gvanptbWMuaCIKICNlbmRpZiAvKiBDT05GSUdfSU5HRU5JQ19UMjAgKi8KQEAgLTE0OSw2ICsxNTAsNyBAQAogICAgICAgICAgICAgY291bnQrKzsKICAgICAgICAgICAgIGlmIChjb3VudCA8IDMwKQogICAgICAgICAgICAgICAgIHVkZWxheSgyMDApOworICAgICAgICAgICAgICAgIC8vdXNsZWVwX3JhbmdlKDE1MCwgMjAwKTsKICAgICAgICAgICAgIGVsc2UgaWYoY291bnQgPCA0MCkKICAgICAgICAgICAgICAgICBtc2xlZXAoMik7CiAgICAgICAgICAgICBlbHNlCkBAIC0zMzIsNiArMzM0LDExIEBACiAgICAgc3RydWN0IGFpY19zZGlvX2RldiAqc2Rpb2RldiA9IE5VTEw7CiAKICAgICBzZGlvX2RiZygiJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAodGltZXJfcGVuZGluZygmZ19yd254X3BsYXQtPnNkaW9kZXYtPnRwX3RpbWVyKSkgeworCQlwcmludGsoIiVzIGRlbF90aW1lclxuIiwgX19mdW5jX18pOworCQlkZWxfdGltZXJfc3luYygmZ19yd254X3BsYXQtPnNkaW9kZXYtPnRwX3RpbWVyKTsKKwl9CisJY2FuY2VsX3dvcmtfc3luYygmZ19yd254X3BsYXQtPnNkaW9kZXYtPnRwX3dvcmspOwogICAgIGhvc3QgPSBmdW5jLT5jYXJkLT5ob3N0OwogICAgIGhvc3QtPmNhcHMgJj0gfk1NQ19DQVBfTk9OUkVNT1ZBQkxFOwogICAgIGJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YSgmZnVuYy0+ZGV2KTsKQEAgLTM0Myw2ICszNTAsOCBAQAogICAgIGlmICghc2Rpb2RldikgewogICAgICAgICByZXR1cm47CiAgICAgfQorCisJCiAgICAgc2Rpb2Rldi0+YnVzX2lmLT5zdGF0ZSA9IEJVU19ET1dOX1NUOwogICAgIGFpY3dmX3NkaW9fcmVsZWFzZShzZGlvZGV2KTsKICAgICBhaWN3Zl9zZGlvX2Z1bmNfZGVpbml0KHNkaW9kZXYpOwpAQCAtMTgyNiw2ICsxODM1LDc1IEBACiAgICAgc2Rpb19yZWxlYXNlX2hvc3Qoc2Rpb2Rldi0+ZnVuYyk7CiB9CiAKK2V4dGVybiB2b2lkIHNldF90eHB3cl9jdHJsKHN0cnVjdCBhaWNfc2Rpb19kZXYgKnNkaW9kZXYsIHM4X2wgdmFsdWUpOworI2lmIDAKK3N0YXRpYyB2b2lkIHNldF90eHB3cl9jdHJsKHN0cnVjdCBhaWNfc2Rpb19kZXYgKnNkaW9kZXYsIHM4X2wgdmFsdWUpCit7CisJbnZyYW1faW5mby50eHB3cl9sb3NzLmxvc3NfZW5hYmxlID0gMTsKKwlpZiAodmFsdWUgPiBURU1QX1RIRF8xICYmIHZhbHVlIDw9IFRFTVBfVEhEXzIpIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IC1URU1QX1NURVBfMTsKKwkJCXNkaW9kZXYucmFuZ2UgPSAxOworCQkJcndueF9zZW5kX3R4cHdyX2x2bF9yZXEoc2Rpb2Rldi0+cndueF9odyk7CisJCX0gZWxzZSBpZiAoc2Rpb2Rldi0+cmFuZ2UgPT0gMSkgeworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoc2Rpb2Rldi0+cmFuZ2UgPT0gMikgeworCQkJbnZyYW1faW5mby50eHB3cl9sb3NzLmxvc3NfdmFsdWUgKz0gVEVNUF9TVEVQXzE7CisJCQlzZGlvZGV2LnJhbmdlID0gMTsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9CisJfSBlbHNlIGlmICh2YWx1ZSA+IFRFTVBfVEhEXzIpIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IC1URU1QX1NURVBfMjsKKwkJCXNkaW9kZXYucmFuZ2UgPSAyOworCQkJcndueF9zZW5kX3R4cHdyX2x2bF9yZXEoc2Rpb2Rldi0+cndueF9odyk7CisJCX0gZWxzZSBpZiAoc2Rpb2Rldi0+cmFuZ2UgPT0gMSkgeworCQkJbnZyYW1faW5mby50eHB3cl9sb3NzLmxvc3NfdmFsdWUgKz0gLVRFTVBfU1RFUF8xOworCQkJc2Rpb2Rldi5yYW5nZSA9IDI7CisJCQlyd254X3NlbmRfdHhwd3JfbHZsX3JlcShzZGlvZGV2LT5yd254X2h3KTsKKwkJfSBlbHNlIHsKKwkJCWNvbnRpbnVlOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHNkaW9kZXYtPnJhbmdlID09IDEpIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IFRFTVBfU1RFUF8xOworCQkJc2Rpb2Rldi5yYW5nZSA9IDA7CisJCQlyd254X3NlbmRfdHhwd3JfbHZsX3JlcShzZGlvZGV2LT5yd254X2h3KTsKKwkJfSBlbHNlIGlmIChzZGlvZGV2LT5yYW5nZSA9PSAyKSB7CisJCQludnJhbV9pbmZvLnR4cHdyX2xvc3MubG9zc192YWx1ZSArPSBURU1QX1NURVBfMjsKKwkJCXNkaW9kZXYucmFuZ2UgPSAwOworCQkJcndueF9zZW5kX3R4cHdyX2x2bF9yZXEoc2Rpb2Rldi0+cndueF9odyk7CisJCX0KKwl9Cit9CisjZW5kaWYKK3ZvaWQgYWljd2ZfdGVtcF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByd254X2h3ICpyd254X2h3OworCXN0cnVjdCBtbV9zZXRfdmVuZG9yX2h3Y29uZmlnX2NmbSBjZm07CisJc3RydWN0IGFpY19zZGlvX2RldiAqc2Rpb2RldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWljX3NkaW9fZGV2LCB0cF93b3JrKTsKKwlyd254X2h3ID0gc2Rpb2Rldi0+cndueF9odzsKKwlyd254X3NlbmRfZ2V0X3RlbXBfcmVxKHJ3bnhfaHcsICZjZm0pOworCXNldF90eHB3cl9jdHJsKHNkaW9kZXYsIGNmbS5jaGlwX3RlbXBfY2ZtLmRlZ3JlZSk7CisJbW9kX3RpbWVyKCZzZGlvZGV2LT50cF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoVEVNUF9HRVRfSU5URVJWQUwpKTsKK30KKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LCAxNCwgMCkKK3N0YXRpYyB2b2lkIGFpY3dmX3RlbXBfdGltZXIodWxvbmcgZGF0YSkKKyNlbHNlCitzdGF0aWMgdm9pZCBhaWN3Zl90ZW1wX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KQorI2VuZGlmCit7CisjaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oNCwgMTQsIDApCisJc3RydWN0IGFpY19zZGlvX2RldiAqc2Rpb2RldiA9IChzdHJ1Y3QgYWljX3NkaW9fZGV2ICopIGRhdGE7CisjZWxzZQorCXN0cnVjdCBhaWNfc2Rpb19kZXYgKnNkaW9kZXYgPSBmcm9tX3RpbWVyKHNkaW9kZXYsIHQsIHRwX3RpbWVyKTsKKyNlbmRpZgorCWlmICghd29ya19wZW5kaW5nKCZzZGlvZGV2LT50cF93b3JrKSkKKwkJc2NoZWR1bGVfd29yaygmc2Rpb2Rldi0+dHBfd29yayk7CisJcmV0dXJuOworfQogdm9pZCAqYWljd2Zfc2Rpb19idXNfaW5pdChzdHJ1Y3QgYWljX3NkaW9fZGV2ICpzZGlvZGV2KQogewogICAgIGludCByZXQ7CkBAIC0xODY5LDYgKzE5NDcsMTcgQEAKICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0eF9wcml2LT5jbWRfdHhkb25lX3dhaXQpOwogICAgIGF0b21pY19zZXQoJnR4X3ByaXYtPnR4X3BrdGNudCwgMCk7CiAKKyNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LCAxNCwgMCkKKwkJaW5pdF90aW1lcigmc2Rpb2Rldi0+dHBfdGltZXIpOworCQlzZGlvZGV2LT50cF90aW1lci5kYXRhID0gKHVsb25nKSBzZGlvZGV2OworCQlzZGlvZGV2LT50cF90aW1lci5mdW5jdGlvbiA9IGFpY3dmX3RlbXBfdGltZXI7CisJCS8vc2Rpb2Rldi0+dHBfdGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhURU1QX0dFVF9JTlRFUlZBTCk7CisjZWxzZQorCQl0aW1lcl9zZXR1cCgmc2Rpb2Rldi0+dHBfdGltZXIsIGFpY3dmX3RlbXBfdGltZXIsIDApOworI2VuZGlmCisJCUlOSVRfV09SSygmc2Rpb2Rldi0+dHBfd29yaywgYWljd2ZfdGVtcF93b3JrZXIpOworCQltb2RfdGltZXIoJnNkaW9kZXYtPnRwX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMCAqIDEwMDApKTsKKwkJc2Rpb2Rldi0+cmFuZ2UgPSAwOwogI2lmIGRlZmluZWQoQ09ORklHX1NESU9fUFdSQ1RSTCkKICNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTig0LDE0LDApCiAgICAgaW5pdF90aW1lcigmc2Rpb2Rldi0+dGltZXIpOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9haWN3Zl9zZGlvLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uaAppbmRleCAxZmFjNGQ2Li45YTEwY2Q0IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2FpY3dmX3NkaW8uaApAQCAtMzksNiArMzksMTEgQEAKICNkZWZpbmUgU0RJT19TTEVFUF9TVCAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBTRElPX0FDVElWRV9TVCAgICAgICAgICAgICAgICAgICAxCiAKKyNkZWZpbmUgVEVNUF9HRVRfSU5URVJWQUwgICAgICAgICAgICAgICAgKDYwICogMTAwMCkgICAvL3RpbWUgaW50ZXJ2YWwKKyNkZWZpbmUgVEVNUF9USERfMSAgICAgICAgICAgICAgICAgICAgICAgODAgICAgICAgICAgICAvL3RlbXBlcmF0dXJlIDEgKKHmKQorI2RlZmluZSBURU1QX1RIRF8yICAgICAgICAgICAgICAgICAgICAgICAxMDAgICAgICAgICAgIC8vdGVtcGVyYXR1cmUgMiAooeYpCisjZGVmaW5lIFRFTVBfU1RFUF8xICAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICAgLy9zdGVwIChkQikKKyNkZWZpbmUgVEVNUF9TVEVQXzIgICAgICAgICAgICAgICAgICAgICAgOCAgICAgICAgICAgICAvL3N0ZXAgKGRCKQogI2RlZmluZSBEQVRBX0ZMT1dfQ1RSTF9USFJFU0ggMgogI2lmZGVmIENPTkZJR19UWF9ORVRJRl9GTE9XQ1RSTAogI2RlZmluZSBBSUNXRl9TRElPX1RYX0xPV19XQVRFUiAgICAgICAgICAxMDAKQEAgLTc5LDYgKzg0LDkgQEAKICAgICB1OCBmbG93Y3RybDsKICAgICBzcGlubG9ja190IHR4X2Zsb3dfbG9jazsKICNlbmRpZgorCXN0cnVjdCB0aW1lcl9saXN0IHRwX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCB0cF93b3JrOworCXU4IHJhbmdlOwogICAgICNpZiBkZWZpbmVkKENPTkZJR19TRElPX1BXUkNUUkwpCiAgICAgLy9mb3Igc2RpbyBwd3IgY3RybAogICAgIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwpAQCAtOTIsNiArMTAwLDcgQEAKIGludCBhaWN3Zl9zZGlvX3dyaXRlYihzdHJ1Y3QgYWljX3NkaW9fZGV2ICpzZGlvZGV2LCB1aW50IHJlZ2FkZHIsIHU4IHZhbCk7CiB2b2lkIGFpY3dmX3NkaW9faGFsX2lycWhhbmRsZXIoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7CiB2b2lkIGFpY3dmX3NkaW9faGFsX2lycWhhbmRsZXJfZnVuYzIoc3RydWN0IHNkaW9fZnVuYyAqZnVuYyk7Cit2b2lkIGFpY3dmX3RlbXBfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TRElPX1BXUkNUUkwpCiB2b2lkIGFpY3dmX3NkaW9fcHdyY3RsX3RpbWVyKHN0cnVjdCBhaWNfc2Rpb19kZXYgKnNkaW9kZXYsIHVpbnQgZHVyYXRpb24pOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9sbWFjX21zZy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9sbWFjX21zZy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggYzc2MDM4OS4uNWRkYmY3MAotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL2xtYWNfbXNnLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9sbWFjX21zZy5oCkBAIC0zODIsOCArMzgyLDggQEAKIAogICAgIE1NX0FQTV9TVEFMT1NTX0lORCwKIAotICAgIE1NX1NFVF9UWE9QX1JFUSwKLSAgICBNTV9TRVRfVFhPUF9DRk0sCisgICAgTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19SRVEsCisgICAgTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19DRk0sCiAKIAlNTV9HRVRfRldfVkVSU0lPTl9SRVEsCiAgICAgTU1fR0VUX0ZXX1ZFUlNJT05fQ0ZNLApAQCAtMTMwOSw3ICsxMzA5LDcgQEAKIHR5cGVkZWYgc3RydWN0CiB7CiAgICAgdThfbCBsb3NzX2VuYWJsZTsKLSAgICB1OF9sIGxvc3NfdmFsdWU7CisgICAgczhfbCBsb3NzX3ZhbHVlOwogfSB0eHB3cl9sb3NzX2NvbmZfdDsKIHR5cGVkZWYgc3RydWN0CiB7CkBAIC0xODU3LDYgKzE4NTcsMjEgQEAKICAgICB1OF9sICBjZmVfZW47CiB9OwogCitzdHJ1Y3QgbW1fZ2V0X2NoaXBfdGVtcF9yZXEKK3sKKyAgICB1MzJfbCBod2NvbmZpZ19pZDsKK307CitzdHJ1Y3QgbW1fZ2V0X2NoaXBfdGVtcF9jZm0KK3sKKyAgICBzOF9sIGRlZ3JlZTsKK307CitzdHJ1Y3QgbW1fc2V0X3ZlbmRvcl9od2NvbmZpZ19jZm0KK3sKKyAgICB1MzJfbCBod2NvbmZpZ19pZDsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBtbV9nZXRfY2hpcF90ZW1wX2NmbSBjaGlwX3RlbXBfY2ZtOworICAgIH07Cit9Owogc3RydWN0IG1tX2dldF9md192ZXJzaW9uX2NmbQogewogICAgIHU4X2wgZndfdmVyc2lvbl9sZW47CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfY21kcy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X2NtZHMuYwppbmRleCBlZWMyZmIwLi4yMDUwMTgxIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfY21kcy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9jbWRzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNlbHNlCiAjaW5jbHVkZSAiYWljd2ZfdXNiLmgiCiAjZW5kaWYKKyNpbmNsdWRlICAicHViX2RlYnVnX2luZm8uaCIKIC8qKgogICoKICAqLwpAQCAtMTIyLDYgKzEyMyw3IEBACiB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgcHJpbnRrKEtFUk5fRVJSICJ3bGFuIGVycm9yIHJlc2V0IGZsb3cuXG4iKTsKKwlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfV0lGSSwicndueCBzdGFydF9zeXN0ZW1fcmVzZXQgXG4iKTsKICAgICBjaGFyICpldmVudF9zdHJpbmcgPSAiREhESVNET1dOPTEiOwogICAgIGNoYXIgKmVudnBbXSA9IHsgZXZlbnRfc3RyaW5nLCBOVUxMIH07CiAgICAgcHJpbnRrKEtFUk5fRVJSICJzZW5kIGV2ZW50LlxuIik7CQpAQCAtMjEzLDggKzIxNSw5IEBACiAJCS8vcHJpbnRrKCJkZWZlciBwdXNoOiB0a249JWRcclxuIiwgY21kLT50a24pOwogCX0KIAotICAgIHNwaW5fdW5sb2NrX2JoKCZjbWRfbWdyLT5sb2NrKTsKKyAgICAvL3NwaW5fdW5sb2NrX2JoKCZjbWRfbWdyLT5sb2NrKTsKICAgICBpZiAoIWRlZmVyX3B1c2gpIHsKKwlzcGluX3VubG9ja19iaCgmY21kX21nci0+bG9jayk7CiAgICAgICAgIHByaW50aygicXVldWU6aWQ9JXgsIHBhcmFtX2xlbj0ldVxuIixjbWQtPmEyZV9tc2ctPmlkLCBjbWQtPmEyZV9tc2ctPnBhcmFtX2xlbik7CiAgICAgICAgICNpZmRlZiBBSUNXRl9TRElPX1NVUFBPUlQKICAgICAgICAgYWljd2Zfc2V0X2NtZF90eCgodm9pZCAqKShzZGlvZGV2KSwgY21kLT5hMmVfbXNnLCBzaXplb2Yoc3RydWN0IGxtYWNfbXNnKSArIGNtZC0+YTJlX21zZy0+cGFyYW1fbGVuKTsKQEAgLTIyNSwxMiArMjI4LDE2IEBACiAKICAgICAgICAga2ZyZWUoY21kLT5hMmVfbXNnKTsKICAgICB9IGVsc2UgeworCWlmKGNtZF9tZ3ItPnF1ZXVlX3N6IDw9IDEpeworCQlzcGluX3VubG9ja19iaCgmY21kX21nci0+bG9jayk7CiAgICAgICAgICNpZmRlZiBDTURfV09SS1FVRVVFCiAJCVdBS0VfQ01EX1dPUksoY21kX21ncik7CiAgICAgICAgICNlbHNlCiAgICAgICAgIC8vdGFza2xldF9zY2hlZHVsZSgmY21kX21nci0+Y21kX3Rhc2tsZXQpOwogICAgICAgICBjb21wbGV0ZSgmY21kX21nci0+Y21kcHJvY190cmdnKTsKICAgICAgICAgI2VuZGlmCisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2JoKCZjbWRfbWdyLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNDcsNiArMjU0LDcgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyB0b3V0ID0gbXNlY3NfdG9famlmZmllcyhSV05YXzgwMjExX0NNRF9USU1FT1VUX01TICogY21kX21nci0+cXVldWVfc3opOwogICAgICAgICBpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmY21kLT5jb21wbGV0ZSwgdG91dCkpIHsKICAgICAgICAgICAgIHByaW50ayhLRVJOX0NSSVQiY21kIHRpbWVkLW91dFxuIik7CisJCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfV0lGSSwicndueCBjbWQgdGltZWQtb3V0IFxuIik7CiAgICAgICAgICAgICAjaWZkZWYgQUlDV0ZfU0RJT19TVVBQT1JUCiAgICAgICAgICAgICByZXQgPSBhaWN3Zl9zZGlvX3dyaXRlYihzZGlvZGV2LCBTRElPV0lGSV9XQUtFVVBfUkVHLCAyKTsKICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CkBAIC01NDksNyArNTU3LDcgQEAKICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAKICAgIC8vIFJXTlhfREJHKFJXTlhfRk5fRU5UUllfU1RSKTsKLSAgIGlmKCEobXNnLT5pZCA9PSA3MykpCisgICBpZighKG1zZy0+aWQgPT0gNzMpICYmICEobXNnLT5pZCA9PSA3NCkpCiAgICBwcmludGsoIm1zZ2luZDogJWQsIHN6PSVkXG4iLCBtc2ctPmlkLCBjbWRfbWdyLT5xdWV1ZV9zeik7CiAjaWZkZWYgQ1JFQVRFX1RSQUNFX1BPSU5UUwogICAgIHRyYWNlX21zZ19yZWN2KG1zZy0+aWQpOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21haW4uYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tYWluLmMKaW5kZXggNTM3MzM0ZC4uYTZmNDRkZSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21haW4uYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfbWFpbi5jCkBAIC00Nyw3ICs0Nyw3IEBACiAjaWZkZWYgQUlDV0ZfVVNCX1NVUFBPUlQKICNpbmNsdWRlICJhaWN3Zl91c2IuaCIKICNlbmRpZgotCisjaW5jbHVkZSAgInB1Yl9kZWJ1Z19pbmZvLmgiCiAvL3N0YXRpYyB1OCB3aWZpX21hY19hZGRyWzZdID0gezB9OwogCiB1OCBjaGlwX3N1Yl9pZDsKQEAgLTE2OTYsNiArMTY5NiwxNyBAQAogICAgICAgICAgICAgICAgIGJ5dGVzX3dyaXR0ZW4gPSAtRUlOVkFMOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorICAgICAgICB9ICBlbHNlIGlmIChzdHJjYXNlY21wKGFyZ3ZbMF0sICJTRVRfVFhQV1JfTE9TUyIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChhcmdjID4gMSkgeworICAgICAgICAgICAgICAgIHM4X2wgZnVuYyA9IChzOF9sKWNvbW1hbmRfc3RydG91bChhcmd2WzFdLCBOVUxMLCAxMCk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJzZXQgdHhwd3IgbG9zczogJWRcbiIsIGZ1bmMpOworICAgICAgICAgICAgICAgIHNldF90eHB3cl9sb3NzX29mc3QoZnVuYyk7CisgICAgICAgICAgICAgICAgcndueF9zZW5kX3R4cHdyX2x2bF9yZXEocF9yd254X2h3KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJ3cm9uZyBhcmdzXG4iKTsKKyAgICAgICAgICAgICAgICBieXRlc193cml0dGVuID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAjaWZkZWYgQ09ORklHX1JGVEVTVF9VU0JfQlQKICAgICAgICAgZWxzZSBpZiAoc3RyY2FzZWNtcChhcmd2WzBdLCAiQlRfUkVTRVQiKSA9PSAwKSB7CkBAIC03MjYwLDcgKzcyNzEsNyBAQAogICAgIDB4MDBmZmNjODUsCiAgICAgMHgwMGZmY2Q3MCwKICAgICAweDAwZmZjZDgwLAotICAgIDB4MDBmZmNlNzAsCisgICAgMHgwMGZmY2Q5MCwKICAgICAweDAwZmZjZTgwLAogICAgIDB4MDBmZmNlOTMsCiAgICAgMHgwMGZmY2Y5MCwKQEAgLTcyODIsNiArNzI5MywxMDUgQEAKICAgICAweDAwZmZjNzkwLAogICAgICNlbmRpZgogfTsKK2NvbnN0IHVpbnQzMl90IHR4Z2Fpbl9tYXBfaFs5Nl0gPQoreworICAgIDB4ZmZkODg4LCAvLzExCisgICAgMHhmZmQ5NzksIC8vMTIKKyAgICAweGZmZDk4OCwgLy8xMworICAgIDB4ZmZkYTc5LCAvLzE0CisgICAgMHhmZmRhODgsIC8vMTUKKyAgICAweGZmZGI3OSwgLy8xNgorICAgIDB4ZmZkYjg4LCAvLzE3CisgICAgMHhmZmRjNzIsIC8vMTgKKyAgICAweGZmZGM4MCwgLy8xOQorICAgIDB4ZmZkZDgwLCAvLzIwCisgICAgMHhmZmRlNjYsIC8vMjEKKyAgICAweGZmZGU3MiwgLy8yMgorICAgIDB4ZmZkZTgwLCAvLzIzCisgICAgMHhmZmRmNzksIC8vMjQKKyAgICAweGZmZGY4OCwgLy8yNQorICAgIDB4ZmZkZjk4LCAvLzI2CisgICAgMHhmZmQwNzksIC8vLTUKKyAgICAweGZmZDA4OCwgLy8tNAorICAgIDB4ZmZkMTc5LCAvLy0zCisgICAgMHhmZmQxODgsIC8vLTIKKyAgICAweGZmZDI4OCwgLy8tMQorICAgIDB4ZmZkMzZjLCAvLzAKKyAgICAweGZmZDM3OSwgLy8xCisgICAgMHhmZmQzODgsIC8vMgorICAgIDB4ZmZkNDc5LCAvLzMKKyAgICAweGZmZDQ4OCwgLy80CisgICAgMHhmZmQ1NzksIC8vNQorICAgIDB4ZmZkNTg4LCAvLzYKKyAgICAweGZmZDY3OSwgLy83CisgICAgMHhmZmQ2ODgsIC8vOAorICAgIDB4ZmZkNzc5LCAvLzkKKyAgICAweGZmZDg3OSwgLy8xMAorICAgIDB4ZmZjODc5LCAvLzgKKyAgICAweGZmYzk2YiwgLy85CisgICAgMHhmZmM5NzksIC8vMTAKKyAgICAweGZmY2E2YiwgLy8xMQorICAgIDB4ZmZjYTc5LCAvLzEyCisgICAgMHhmZmNjNTYsIC8vMTMKKyAgICAweGZmY2M2MCwgLy8xNAorICAgIDB4ZmZjYzZiLCAvLzE1CisgICAgMHhmZmNjNzksIC8vMTYKKyAgICAweGZmY2Q3MiwgLy8xNworICAgIDB4ZmZjZTYwLCAvLzE4CisgICAgMHhmZmNlNzIsIC8vMTkKKyAgICAweGZmY2Y3MiwgLy8yMAorICAgIDB4ZmZjZjgwLCAvLzIxCisgICAgMHhmZmNmOTAsIC8vMjIKKyAgICAweGZmY2Y5MCwgLy8yMworICAgIDB4ZmZjMDc5LCAvLy04CisgICAgMHhmZmMxNmIsIC8vLTcKKyAgICAweGZmYzE3OSwgLy8tNgorICAgIDB4ZmZjMjZiLCAvLy01CisgICAgMHhmZmMyNzksIC8vLTQKKyAgICAweGZmYzM2YiwgLy8tMworICAgIDB4ZmZjMzc5LCAvLy0yCisgICAgMHhmZmM0NmIsIC8vLTEKKyAgICAweGZmYzQ3OSwgLy8wCisgICAgMHhmZmM1NmIsIC8vMQorICAgIDB4ZmZjNTc5LCAvLzIKKyAgICAweGZmYzY2YiwgLy8zCisgICAgMHhmZmM2NzksIC8vNAorICAgIDB4ZmZjNzZiLCAvLzUKKyAgICAweGZmYzc3OSwgLy82CisgICAgMHhmZmM4NmIsIC8vNworICAgIDB4ZmZjODc5LCAvLzgKKyAgICAweGZmYzk2YiwgLy85CisgICAgMHhmZmM5NzksIC8vMTAKKyAgICAweGZmY2E2YiwgLy8xMQorICAgIDB4ZmZjYTc5LCAvLzEyCisgICAgMHhmZmNjNTYsIC8vMTMKKyAgICAweGZmY2M2MCwgLy8xNAorICAgIDB4ZmZjYzZiLCAvLzE1CisgICAgMHhmZmNjNzksIC8vMTYKKyAgICAweGZmY2Q3MiwgLy8xNworICAgIDB4ZmZjZTYwLCAvLzE4CisgICAgMHhmZmNlNzIsIC8vMTkKKyAgICAweGZmY2Y3MiwgLy8yMAorICAgIDB4ZmZjZjgwLCAvLzIxCisgICAgMHhmZmNmOTAsIC8vMjIKKyAgICAweGZmY2Y5MCwgLy8yMworICAgIDB4ZmZjMDc5LCAvLy04CisgICAgMHhmZmMxNmIsIC8vLTcKKyAgICAweGZmYzE3OSwgLy8tNgorICAgIDB4ZmZjMjZiLCAvLy01CisgICAgMHhmZmMyNzksIC8vLTQKKyAgICAweGZmYzM2YiwgLy8tMworICAgIDB4ZmZjMzc5LCAvLy0yCisgICAgMHhmZmM0NmIsIC8vLTEKKyAgICAweGZmYzQ3OSwgLy8wCisgICAgMHhmZmM1NmIsIC8vMQorICAgIDB4ZmZjNTc5LCAvLzIKKyAgICAweGZmYzY2YiwgLy8zCisgICAgMHhmZmM2NzksIC8vNAorICAgIDB4ZmZjNzZiLCAvLzUKKyAgICAweGZmYzc3OSwgLy82CisgICAgMHhmZmM4NmIsIC8vNworfTsKIAogdTMyIHdpZmlfdHhnYWluX3RhYmxlXzI0Z184ODAwZGNkd1szMl0gPQogewpAQCAtNzYyNiw3ICs3NzM2LDcgQEAKICAgICAgICAgdTMyIHBhdGNoX3RibF93aWZpc2V0dGluZ191MDJfbnVtID0gc2l6ZW9mKHBhdGNoX3RibF93aWZpc2V0dGluZ191MDIpL3NpemVvZih1MzIpLzI7CiAgICAgICAgIHUzMiBsZHBjX2NmZ19zaXplID0gc2l6ZW9mKGxkcGNfY2ZnX3JhbSk7CiAgICAgICAgIHUzMiBhZ2NfY2ZnX3NpemUgPSBzaXplb2YoYWdjX2NmZ19yYW0pOwotICAgICAgICB1MzIgdHhnYWluX2NmZ19zaXplID0gc2l6ZW9mKHR4Z2Fpbl9tYXApOworICAgICAgICB1MzIgdHhnYWluX2NmZ19zaXplLCAqdHhnYWluX2NmZ19hcnJheTsKIAogCiAgICAgICAgIHN0cnVjdCBkYmdfbWVtX3JlYWRfY2ZtIGNmbTsKQEAgLTc3MDMsMTQgKzc4MTMsMjUgQEAKICAgICAgICAgfQogCiAgICAgICAgICNpZiAhZGVmaW5lZChDT05GSUdfRlBHQV9WRVJJRklDQVRJT04pCi0gICAgICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX2Jsb2NrX3dyaXRlX3JlcShyd254X2h3LCB0eGdhaW5fY2ZnX2FkZHIsIHR4Z2Fpbl9jZmdfc2l6ZSwgdHhnYWluX21hcCk7CisgICAgICAgIGlmICgoSVNfQ0hJUF9JRF9IKCkpKSB7CisgICAgICAgICAgICB0eGdhaW5fY2ZnX3NpemUgPSBzaXplb2YodHhnYWluX21hcF9oKTsKKyAgICAgICAgICAgIHR4Z2Fpbl9jZmdfYXJyYXkgPSAodTMyICopdHhnYWluX21hcF9oOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHhnYWluX2NmZ19zaXplID0gc2l6ZW9mKHR4Z2Fpbl9tYXApOworICAgICAgICAgICAgdHhnYWluX2NmZ19hcnJheSA9ICh1MzIgKil0eGdhaW5fbWFwOworICAgICAgICB9CisgICAgICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX2Jsb2NrX3dyaXRlX3JlcShyd254X2h3LCB0eGdhaW5fY2ZnX2FkZHIsIHR4Z2Fpbl9jZmdfc2l6ZSwgdHhnYWluX2NmZ19hcnJheSk7CiAgICAgICAgIGlmIChyZXQpIHsKICAgICAgICAgICAgIHByaW50aygidHhnYWluIHVwbG9hZCBmYWlsOiAleCwgZXJyOiVkXHJcbiIsIHR4Z2Fpbl9jZmdfYWRkciwgcmV0KTsKICAgICAgICAgfQogCWlmICgoY2hpcF9zdWJfaWQgPT0gMCkgJiYgKGNoaXBfbWN1X2lkID09IDApKSB7CiAJCXJldCA9IGFpY3dmX3BhdGNoX3RhYmxlX2xvYWQocndueF9odywgUldOWF9NQUNfUEFUQ0hfVEFCTEVfODgwMERDKTsKLSAgICAgICAgfWVsc2V7CisJfSBlbHNlIGlmIChjaGlwX3N1Yl9pZCA9PSAxKSB7CiAJCXJldCA9IGFpY3dmX3BhdGNoX3RhYmxlX2xvYWQocndueF9odywgUldOWF9NQUNfUEFUQ0hfVEFCTEVfODgwMERDX1UwMik7CisJfSBlbHNlIGlmIChjaGlwX3N1Yl9pZCA9PSAyKSB7CisJCXJldCA9IGFpY3dmX3BhdGNoX3RhYmxlX2xvYWQocndueF9odywgUldOWF9NQUNfUEFUQ0hfVEFCTEVfODgwMERDX0hfVTAyKTsKKwl9IGVsc2UgeworCQlwcmludGsoInVuc3VwcG9ydGVkIGlkOiAlZFxuIiwgY2hpcF9zdWJfaWQpOwogICAgICAgICAgICAgICAgIH0KIAlpZiAocmV0KSB7CiAJICAgIHByaW50aygicGF0Y2hfdGJsIHVwbG9hZCBmYWlsOiBlcnI6JWRcclxuIiwgcmV0KTsKQEAgLTc5NTEsMTkgKzgwNzIsNzggQEAKICAgICAgICAgfQogICAgIH0KIH0KK2V4dGVybiBpbnQgYWljd2ZfZHBkX3Jlc3VsdF9hcHBseV84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHJmX21pc2NfcmFtX2xpdGVfdCAqZHBkX3Jlcyk7CitleHRlcm4gaW50IGFpY3dmX2RwZF9yZXN1bHRfbG9hZF84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHJmX21pc2NfcmFtX2xpdGVfdCAqZHBkX3Jlcyk7CiAKLXN0YXRpYyB2b2lkIHJmX2NvbmZpZyhzdHJ1Y3QgcndueF9odyAqcndueF9odykKK2ludCByZl9jb25maWcoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCiB7Ci0gICAgI2lmIDAKLSAgICBpbnQgcmV0OwotICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX21hc2tfd3JpdGVfcmVxKHJ3bnhfaHcsCi0gICAgICAgICAgICAgICAgcmZfdGJsX21hc2tlZFswXVswXSwgcmZfdGJsX21hc2tlZFswXVsxXSwgcmZfdGJsX21hc2tlZFswXVsyXSk7Ci0gICAgaWYgKHJldCkgewotICAgICAgICBwcmludGsoInJmIGNvbmZpZyAleCB3cml0ZSBmYWlsOiAlZFxuIiwgcmZfdGJsX21hc2tlZFswXVswXSwgcmV0KTsKKwlpbnQgcmV0ID0wOworCXN0cnVjdCBtbV9zZXRfcmZfY2FsaWJfY2ZtIGNmbTsKKyAgICBpZiAoKHJldCA9IHJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHJ3bnhfaHcpKSkgeworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorCisgICAgaWYgKChyZXQgPSByd254X3NlbmRfdHhwd3Jfb2ZzdF9yZXEocndueF9odykpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisJaWYgKHRlc3Rtb2RlID09IDApIHsKKwkJaWYgKElTX0NISVBfSURfSCgpKSB7CisJCQlpZiAoKHJldCA9IHJ3bnhfc2VuZF9yZl9jb25maWdfcmVxKHJ3bnhfaHcsIDAsICAgIDEsICh1OF9sICopd2lmaV90eGdhaW5fdGFibGVfMjRnXzg4MDBkY2R3X2gsIDEyOCkpKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMTYsICAgIDEsICh1OF9sICopd2lmaV90eGdhaW5fdGFibGVfMjRnXzFfODgwMGRjZHdfaCwgMTI4KSkpCisJCQkJcmV0dXJuIC0xOworCQl9IGVsc2UgeworCQkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAwLAkxLCAodThfbCAqKXdpZmlfdHhnYWluX3RhYmxlXzI0Z184ODAwZGNkdywgMTI4KSkpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAxNiwJMSwgKHU4X2wgKil3aWZpX3R4Z2Fpbl90YWJsZV8yNGdfMV84ODAwZGNkdywgMTI4KSkpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMCwJMCwgKHU4X2wgKil3aWZpX3J4Z2Fpbl90YWJsZV8yNGdfMjBtXzg4MDBkY2R3LCAyNTYpKSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAzMiwgIDAsICh1OF9sICopd2lmaV9yeGdhaW5fdGFibGVfMjRnXzQwbV84ODAwZGNkdywgMjU2KSkpCisJCQlyZXR1cm4gLTE7CisJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NhbGliX3JlcShyd254X2h3LCAmY2ZtKSkpIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJfWVsc2UgaWYgKHRlc3Rtb2RlID09IDEpIHsKKwkJaWYgKGNoaXBfc3ViX2lkID49IDEpIHsKKyNpZmRlZiBDT05GSUdfRFBECisjaWZuZGVmIENPTkZJR19GT1JDRV9EUERfQ0FMSUIKKyAgICAgICAgICAgIGlmIChpc19maWxlX2V4aXN0KEZXX0RQRFJFU1VMVF9OQU1FXzg4MDBEQykgPT0gMSkgeworICAgICAgICAgICAgICAgIHByaW50aygiJXMgbG9hZCBkcGQgYmluXG4iLCBfX2Z1bmNfXyk7CisgICAgICAgICAgICAgICAgcmV0ID0gYWljd2ZfZHBkX3Jlc3VsdF9sb2FkXzg4MDBkYyhyd254X2h3LCAmZHBkX3Jlcyk7CisgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGsoImxvYWQgZHBkIGJpbiBmYWlsOiAlZFxuIiwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisgICAgICAgICAgICB9CiAgICAgI2VuZGlmCisgICAgICAgICAgICBpZiAoZHBkX3Jlcy5iaXRfbWFza1sxXSkgeworICAgICAgICAgICAgICAgIHJldCA9IGFpY3dmX2RwZF9yZXN1bHRfYXBwbHlfODgwMGRjKHJ3bnhfaHcsICZkcGRfcmVzKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50aygiYXBwbHkgZHBkIGJpbiBmYWlsOiAlZFxuIiwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKIH0KLWV4dGVybiBpbnQgYWljd2ZfZmRydl9kcGRfcmVzdWx0X2xvYWRfODgwMGRjKHN0cnVjdCByd254X2h3ICpyd254X2h3KTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0ID0gYWljd2ZfbWlzY19yYW1faW5pdF84ODAwZGMocndueF9odyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBwcmludGsoIm1pc2MgcmFtIGluaXQgZmFpbDogJWRcbiIsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2VuZGlmCisJICAgCQlyZXQgPSByd254X3NlbmRfcmZfY2FsaWJfcmVxKHJ3bnhfaHcsICZjZm0pOworCQkJaWYgKHJldCkgeworCQkJCXByaW50aygicmYgY2FsaWIgcmVxIGZhaWw6ICVkXG4iLCByZXQpOworCQkgICAJCXJldHVybiAtMTsKKwkgICAJCX0KKwkgICB9CisJfQorCXJldHVybiAwOworfQogc3RhdGljIGludCBzdGFydF9mcm9tX2Jvb3Ryb20oc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCiB7CiAgICAgaW50IHJldCA9IDA7CkBAIC04MDIyLDYgKzgyMDIsNyBAQAogCiAgICAgaWYgKCF3aXBoeSkgewogICAgICAgICBkZXZfZXJyKHJ3bnhfcGxhdGZvcm1fZ2V0X2Rldihyd254X3BsYXQpLCAiRmFpbGVkIHRvIGNyZWF0ZSBuZXcgd2lwaHlcbiIpOworCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfV0lGSSwicndueCBjZmc4MDIxMSB3aXBoeV9uZXcgZmFpbGVkIFxuIik7CiAgICAgICAgIHJldCA9IC1FTk9NRU07CiAgICAgICAgIGdvdG8gZXJyX291dDsKICAgICB9CkBAIC04MjIyLDUyICs4NDAzLDE0IEBACiAjZW5kaWYKICAgICB0YXNrbGV0X2luaXQoJnJ3bnhfaHctPnRhc2ssIHJ3bnhfdGFzaywgKHVuc2lnbmVkIGxvbmcpcndueF9odyk7CiAKLSAgICByZl9jb25maWcocndueF9odyk7Ci0gICAgaWYgKChyZXQgPSByd254X3NlbmRfdHhwd3JfbHZsX3JlcShyd254X2h3KSkpIHsKLSAgICAgICAgZ290byBlcnJfcGxhdG9uOwotICAgIH0KLQotICAgIGlmICgocmV0ID0gcndueF9zZW5kX3R4cHdyX29mc3RfcmVxKHJ3bnhfaHcpKSkgewotICAgICAgICBnb3RvIGVycl9wbGF0b247Ci0gICAgfQorICAgIGlmIChyZXQgPSByZl9jb25maWcocndueF9odykpCiAKIAotICAgIGlmICh0ZXN0bW9kZSA9PSAwKSB7Ci0JCWlmIChJU19DSElQX0lEX0goKSkgewotCQkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAwLCAgICAxLCAodThfbCAqKXdpZmlfdHhnYWluX3RhYmxlXzI0Z184ODAwZGNkd19oLCAxMjgpKSkKKwogCQkJCWdvdG8gZXJyX2xtYWNfcmVxczsKLQkJCWlmICgocmV0ID0gcndueF9zZW5kX3JmX2NvbmZpZ19yZXEocndueF9odywgMTYsICAgIDEsICh1OF9sICopd2lmaV90eGdhaW5fdGFibGVfMjRnXzFfODgwMGRjZHdfaCwgMTI4KSkpCi0JCQkJZ290byBlcnJfbG1hY19yZXFzOwotCQl9IGVsc2UgewotCQlpZiAoKHJldCA9IHJ3bnhfc2VuZF9yZl9jb25maWdfcmVxKHJ3bnhfaHcsIDAsCTEsICh1OF9sICopd2lmaV90eGdhaW5fdGFibGVfMjRnXzg4MDBkY2R3LCAxMjgpKSkKLSAgICAgICAgICAgIGdvdG8gZXJyX2xtYWNfcmVxczsKIAotICAgICAgICBpZiAoKHJldCA9IHJ3bnhfc2VuZF9yZl9jb25maWdfcmVxKHJ3bnhfaHcsIDE2LAkxLCAodThfbCAqKXdpZmlfdHhnYWluX3RhYmxlXzI0Z18xXzg4MDBkY2R3LCAxMjgpKSkKLQkJCWdvdG8gZXJyX2xtYWNfcmVxczsKLQkJfQotCQlpZiAoKHJldCA9IHJ3bnhfc2VuZF9yZl9jb25maWdfcmVxKHJ3bnhfaHcsIDAsCTAsICh1OF9sICopd2lmaV9yeGdhaW5fdGFibGVfMjRnXzIwbV84ODAwZGNkdywgMjU2KSkpCi0gICAgICAgICAgICBnb3RvIGVycl9sbWFjX3JlcXM7CiAKLQkJaWYgKChyZXQgPSByd254X3NlbmRfcmZfY29uZmlnX3JlcShyd254X2h3LCAzMiwgIDAsICh1OF9sICopd2lmaV9yeGdhaW5fdGFibGVfMjRnXzQwbV84ODAwZGNkdywgMjU2KSkpCi0gICAgICAgICAgICBnb3RvIGVycl9sbWFjX3JlcXM7CiAKLQl9ZWxzZSBpZiAodGVzdG1vZGUgPT0gMSkgewotCQlpZiAoY2hpcF9zdWJfaWQgPT0gMSkgewotICAgICAgICAgICAgI2lmZGVmIENPTkZJR19EUEQKLSAgICAgICAgICAgIGlmIChpc19maWxlX2V4aXN0KEZXX0RQRFJFU1VMVF9OQU1FXzg4MDBEQykgPT0gMSkgewotICAgICAgICAgICAgICAgIHByaW50aygiJXMgbG9hZCBkcGQgYmluXG4iLCBfX2Z1bmNfXyk7Ci0gICAgICAgICAgICAgICAgcmV0ID0gYWljd2ZfZmRydl9kcGRfcmVzdWx0X2xvYWRfODgwMGRjKHJ3bnhfaHcpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJsb2FkIGRwZCBiaW4gZmFpbDogJWRcbiIsIHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgIH0KLQl9Ci0gICAgICAgIGlmICgocmV0ID0gcndueF9zZW5kX3JmX2NhbGliX3JlcShyd254X2h3LCAmY2ZtKSkpIHsKLSAgICAgICAgICAgIGdvdG8gZXJyX2xtYWNfcmVxczsKLSAgICB9CiAKICAgICBpZiAoKHJldCA9IHJ3bnhfc2VuZF9nZXRfbWFjYWRkcl9yZXEocndueF9odywgKHN0cnVjdCBtbV9nZXRfbWFjX2FkZHJfY2ZtICopbWFjX2FkZHJfZWZ1c2UpKSkKICAgICAgICAgZ290byBlcnJfbG1hY19yZXFzOwpAQCAtODQwOCw3ICs4NTUxLDEwIEBACiAgICAgZmx1c2hfd29ya3F1ZXVlKHJ3bnhfaHctPmFwbVN0YWxvc3Nfd3EpOwogICAgIGRlc3Ryb3lfd29ya3F1ZXVlKHJ3bnhfaHctPmFwbVN0YWxvc3Nfd3EpOwogICAgIHJ3bnhfd2Rldl91bnJlZ2lzdGVyKHJ3bnhfaHcpOworICAgIGlmKHJ3bnhfaHctPndpcGh5ICYmIHJ3bnhfaHctPndpcGh5LT5yZWdpc3RlcmVkKXsKKyAgICAgICAgcHJpbnRrKCIlcyB3aXBoeV91bnJlZ2lzdGVyIFxyXG4iLCBfX2Z1bmNfXyk7CiAgICAgd2lwaHlfdW5yZWdpc3Rlcihyd254X2h3LT53aXBoeSk7CisgICAgfQogICAgIHJ3bnhfcmFkYXJfZGV0ZWN0aW9uX2RlaW5pdCgmcndueF9ody0+cmFkYXIpOwogICAgIHJ3bnhfcGxhdGZvcm1fb2ZmKHJ3bnhfaHcsIE5VTEwpOwogICAgIGttZW1fY2FjaGVfZGVzdHJveShyd254X2h3LT5zd190eGhkcl9jYWNoZSk7CkBAIC04NDU5LDYgKzg2MDUsNyBAQAogCiAJaWYgKCh3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmhvc3RpZl9yZWdpc3Rlcl9kb25lLCBtc2Vjc190b19qaWZmaWVzKFJFR0lTVFJBVElPTl9USU1FT1VUKSkgPT0gMCkgfHwgcndueF9kcml2ZXJfZXJyKSB7CiAJCXByaW50aygicmVnaXN0ZXJfZHJpdmVyIHRpbWVvdXQgb3IgZXJyb3JcbiIpOworCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfV0lGSSwicndueCByZWdpc3Rlcl9kcml2ZXIgdGltZW91dCBvciBlcnJvciBcbiIpOwogI2lmZGVmIEFJQ1dGX1NESU9fU1VQUE9SVAogICAgICAgICBhaWN3Zl9zZGlvX2V4aXQoKTsKICNlbmRpZiAvKiBBSUNXRl9TRElPX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDNiN2EyZWIuLjFhMDMxZTAKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21zZ190eC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguYwpAQCAtNDEwLDYgKzQxMCwyNCBAQAogICAgIHJldHVybiByd254X3NlbmRfbXNnKHJ3bnhfaHcsIHN0YXJ0X3JlcV9wYXJhbSwgMSwgTU1fU1RBUlRfQ0ZNLCBOVUxMKTsKIH0KIAorcndueF9zZW5kX2dldF90ZW1wX3JlcShzdHJ1Y3QgcndueF9odyAqcndueF9odywgc3RydWN0IG1tX3NldF92ZW5kb3JfaHdjb25maWdfY2ZtICpjZm0pCit7CisJaW50IGVycm9yOworCXN0cnVjdCBtbV9nZXRfY2hpcF90ZW1wX3JlcSAqcmVxOworCVJXTlhfREJHKFJXTlhfRk5fRU5UUllfU1RSKTsKKwlyZXEgPSByd254X21zZ196YWxsb2MoTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19SRVEsIFRBU0tfTU0sIERSVl9UQVNLX0lELCBzaXplb2Yoc3RydWN0IG1tX2dldF9jaGlwX3RlbXBfcmVxKSk7CisJaWYgKCFyZXEpCisJCXJldHVybiAtRU5PTUVNOworCXJlcS0+aHdjb25maWdfaWQgPSA1OworCWVycm9yID0gcndueF9zZW5kX21zZyhyd254X2h3LCByZXEsIDEsIE1NX1NFVF9WRU5ET1JfSFdDT05GSUdfQ0ZNLCBjZm0pOworCWlmICghZXJyb3IpIHsKKwkJcHJpbnRrKCJnZXRfY2hpcF90ZW1wIGRlZ3JlZT0lZFxuIiwgY2ZtLT5jaGlwX3RlbXBfY2ZtLmRlZ3JlZSk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKCJnZXRfY2hpcF90ZW1wIGVycj0lZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCXJldHVybiBlcnJvcjsKK30KIGludCByd254X3NlbmRfdmVyc2lvbl9yZXEoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHN0cnVjdCBtbV92ZXJzaW9uX2NmbSAqY2ZtKQogewogICAgIHZvaWQgKnZvaWRfcGFyYW07CkBAIC0xMDU3LDI5ICsxMDc1LDEyIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1pbnQgcndueF9zZW5kX3R4b3BfcmVxKHN0cnVjdCByd254X2h3ICpyd254X2h3LCB1aW50MTZfdCAqdHhvcCwgdThfbCBsb25nX25hdl9lbiwgdThfbCBjZmVfZW4pCi17Ci0gICAgc3RydWN0IG1tX3NldF90eG9wX3JlcSAqcmVxOwotICAgIGludCBlcnJvcjsKIAogICAgIC8qIEJ1aWxkIHRoZSBNTV9TRVRfVFhPUF9SRVEgbWVzc2FnZSAqLwotICAgIHJlcSA9IHJ3bnhfbXNnX3phbGxvYyhNTV9TRVRfVFhPUF9SRVEsIFRBU0tfTU0sIERSVl9UQVNLX0lELCBzaXplb2Yoc3RydWN0IG1tX3NldF90eG9wX3JlcSkpOwogCi0gICAgaWYgKCFyZXEpIHsKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQogCi0gICAgcmVxLT50eG9wX2JrID0gdHhvcFswXTsKLSAgICByZXEtPnR4b3BfYmUgPSB0eG9wWzFdOwotICAgIHJlcS0+dHhvcF92aSA9IHR4b3BbMl07Ci0gICAgcmVxLT50eG9wX3ZvID0gdHhvcFszXTsKLSAgICByZXEtPmxvbmdfbmF2X2VuID0gbG9uZ19uYXZfZW47Ci0gICAgcmVxLT5jZmVfZW4gPSBjZmVfZW47CiAgICAgLyogU2VuZCB0aGUgTU1fU0VUX1RYT1BfUkVRICBtZXNzYWdlIHRvIFVNQUMgRlcgKi8KLSAgICBlcnJvciA9IHJ3bnhfc2VuZF9tc2cocndueF9odywgcmVxLCAxLCBNTV9TRVRfVFhPUF9DRk0sIE5VTEwpOwogCi0gICAgcmV0dXJuIGVycm9yOwotfQogCiBpbnQgcndueF9zZW5kX2dldF9md192ZXJzaW9uX3JlcShzdHJ1Y3QgcndueF9odyAqcndueF9odywgc3RydWN0IG1tX2dldF9md192ZXJzaW9uX2NmbSAqY2ZtKQogewpAQCAtMTEzMiw4ICsxMTMzLDE5IEBACiAgICAgICAgIHJ3bnhfbXNnX2ZyZWUocndueF9odywgdHhwd3JfbHZsX3JlcSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0gZWxzZSB7CisKKwlpZiAodHhwd3JfbG9zcy0+bG9zc19lbmFibGUgPT0gMSkgeworCQlwcmludGsoIiVzOmxvc3NfdmFsdWU6JWRcclxuIiwgX19mdW5jX18sIHR4cHdyX2xvc3MtPmxvc3NfdmFsdWUpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IDExOyBpKyspCisgICAgICAgICAgICB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMWJfMTFhZ18yZzRbaV0gKz0gdHhwd3JfbG9zcy0+bG9zc192YWx1ZTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSA5OyBpKyspCisgICAgICAgICAgICB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMW5fMTFhY18yZzRbaV0gKz0gdHhwd3JfbG9zcy0+bG9zc192YWx1ZTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSAxMTsgaSsrKQorICAgICAgICAgICAgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFheF8yZzRbaV0gKz0gdHhwd3JfbG9zcy0+bG9zc192YWx1ZTsKKwl9CiAgICAgICAgIHByaW50aygiJXM6ZW5hYmxlOiVkXHJcbiIsICAgICAgICAgICAgICAgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+ZW5hYmxlKTsKICAgICAgICAgcHJpbnRrKCIlczpsdmxfMTFiXzExYWdfMW1fMmc0OiVkXHJcbiIsICBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFiXzExYWdfMmc0WzBdKTsKKyNpZiAwCiAgICAgICAgIHByaW50aygiJXM6bHZsXzExYl8xMWFnXzJtXzJnNDolZFxyXG4iLCAgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFsxXSk7CiAgICAgICAgIHByaW50aygiJXM6bHZsXzExYl8xMWFnXzVtNV8yZzQ6JWRcclxuIiwgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFsyXSk7CiAgICAgICAgIHByaW50aygiJXM6bHZsXzExYl8xMWFnXzExbV8yZzQ6JWRcclxuIiwgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFszXSk7CkBAIC0xMTY3LDE3ICsxMTc5LDkgQEAKICAgICAgICAgcHJpbnRrKCIlczpsdmxfMTFheF9tY3M5XzJnNDolZFxyXG4iLCAgICBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFheF8yZzRbOV0pOwogICAgICAgICBwcmludGsoIiVzOmx2bF8xMWF4X21jczEwXzJnNDolZFxyXG4iLCAgIF9fZnVuY19fLCB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMWF4XzJnNFsxMF0pOwogICAgICAgICBwcmludGsoIiVzOmx2bF8xMWF4X21jczExXzJnNDolZFxyXG4iLCAgIF9fZnVuY19fLCB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMWF4XzJnNFsxMV0pOworI2VuZGlmCiAKLQlpZiAodHhwd3JfbG9zcy0+bG9zc19lbmFibGUgPT0gMSkgewotCQlwcmludGsoIiVzOmxvc3NfdmFsdWU6JWRcclxuIiwgX19mdW5jX18sIHR4cHdyX2xvc3MtPmxvc3NfdmFsdWUpOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMTE7IGkrKykKLSAgICAgICAgICAgIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFtpXSArPSB0eHB3cl9sb3NzLT5sb3NzX3ZhbHVlOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IDk7IGkrKykKLSAgICAgICAgICAgIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExbl8xMWFjXzJnNFtpXSArPSB0eHB3cl9sb3NzLT5sb3NzX3ZhbHVlOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IDExOyBpKyspCi0gICAgICAgICAgICB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMWF4XzJnNFtpXSArPSB0eHB3cl9sb3NzLT5sb3NzX3ZhbHVlOwotCX0KICAgICAgICAgaWYgKCh0ZXN0bW9kZSA9PSAwKSAmJiAoY2hpcF9zdWJfaWQgPT0gMCkpIHsKICAgICAgICAgICAgIHR4cHdyX2x2bF9yZXEtPnR4cHdyX2x2bC5lbmFibGUgICAgICAgICA9IHR4cHdyX2x2bF92Mi0+ZW5hYmxlOwogICAgICAgICAgICAgdHhwd3JfbHZsX3JlcS0+dHhwd3JfbHZsLmRzc3MgICAgICAgICAgID0gdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFiXzExYWdfMmc0WzNdOyAvLyAxMU0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGY4ZWZjNjAuLjg1Y2VjNDgKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X21zZ190eC5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9tc2dfdHguaApAQCAtMTcsNiArMTcsNyBAQAogCiBpbnQgcndueF9zZW5kX3Jlc2V0KHN0cnVjdCByd254X2h3ICpyd254X2h3KTsKIGludCByd254X3NlbmRfc3RhcnQoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpOworaW50IHJ3bnhfc2VuZF9nZXRfdGVtcF9yZXEoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHN0cnVjdCBtbV9zZXRfdmVuZG9yX2h3Y29uZmlnX2NmbSAqY2ZtKTsKIGludCByd254X3NlbmRfdmVyc2lvbl9yZXEoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHN0cnVjdCBtbV92ZXJzaW9uX2NmbSAqY2ZtKTsKIGludCByd254X3NlbmRfYWRkX2lmKHN0cnVjdCByd254X2h3ICpyd254X2h3LCBjb25zdCB1bnNpZ25lZCBjaGFyICptYWMsCiAgICAgICAgICAgICAgICAgICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgYm9vbCBwMnAsIHN0cnVjdCBtbV9hZGRfaWZfY2ZtICpjZm0pOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X3BsYXRmb3JtLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfcGxhdGZvcm0uYwppbmRleCAyMTI5Y2Y3Li5lMTcwM2E0IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfcGxhdGZvcm0uYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfcGxhdGZvcm0uYwpAQCAtMTEwLDYgKzExMCw1MyBAQAogICAgIH0sCiB9OwogCitleHRlcm4gdTggY2hpcF9pZDsKK3ZvaWQgc2V0X3R4cHdyX2N0cmwoc3RydWN0IGFpY19zZGlvX2RldiAqc2Rpb2RldiwgczhfbCB2YWx1ZSkKK3sKKwlpZiAoIUlTX0NISVBfSURfSCgpKSB7CisJCXByaW50aygiJXMgICFoXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisJbnZyYW1faW5mby50eHB3cl9sb3NzLmxvc3NfZW5hYmxlID0gMTsKKwlpZiAodmFsdWUgPiBURU1QX1RIRF8xICYmIHZhbHVlIDw9IFRFTVBfVEhEXzIpIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IC1URU1QX1NURVBfMTsKKwkJCXNkaW9kZXYtPnJhbmdlID0gMTsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9IGVsc2UgaWYgKHNkaW9kZXYtPnJhbmdlID09IDEpIHsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChzZGlvZGV2LT5yYW5nZSA9PSAyKSB7CisJCQludnJhbV9pbmZvLnR4cHdyX2xvc3MubG9zc192YWx1ZSArPSBURU1QX1NURVBfMTsKKwkJCXNkaW9kZXYtPnJhbmdlID0gMTsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9CisJfSBlbHNlIGlmICh2YWx1ZSA+IFRFTVBfVEhEXzIpIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IC1URU1QX1NURVBfMjsKKwkJCXNkaW9kZXYtPnJhbmdlID0gMjsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9IGVsc2UgaWYgKHNkaW9kZXYtPnJhbmdlID09IDEpIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IC1URU1QX1NURVBfMTsKKwkJCXNkaW9kZXYtPnJhbmdlID0gMjsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNkaW9kZXYtPnJhbmdlID09IDApIHsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChzZGlvZGV2LT5yYW5nZSA9PSAxKSB7CisJCQludnJhbV9pbmZvLnR4cHdyX2xvc3MubG9zc192YWx1ZSArPSBURU1QX1NURVBfMTsKKwkJCXNkaW9kZXYtPnJhbmdlID0gMDsKKwkJCXJ3bnhfc2VuZF90eHB3cl9sdmxfcmVxKHNkaW9kZXYtPnJ3bnhfaHcpOworCQl9IGVsc2UgaWYgKHNkaW9kZXYtPnJhbmdlID09IDIpIHsKKwkJCW52cmFtX2luZm8udHhwd3JfbG9zcy5sb3NzX3ZhbHVlICs9IFRFTVBfU1RFUF8yOworCQkJc2Rpb2Rldi0+cmFuZ2UgPSAwOworCQkJcndueF9zZW5kX3R4cHdyX2x2bF9yZXEoc2Rpb2Rldi0+cndueF9odyk7CisJCX0KKwl9CisJcmV0dXJuOworfQogCiAjaWZkZWYgVkVORE9SX1NQRUNJRklFRF9GV19QQVRICiBpbnQgcndueF9sb2FkX2Zpcm13YXJlKHUzMiAqKmZ3X2J1ZiwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGRldmljZSAqZGV2aWNlKQpAQCAtMTI3LDggKzE3NCwxMSBAQAogICAgICAgICAqZndfYnVmID0gTlVMTDsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQorI2lmIChkZWZpbmVkKENPTkZJR19EUEQpICYmICFkZWZpbmVkKENPTkZJR19GT1JDRV9EUERfQ0FMSUIpKQogCWlmKHN0cmNtcChuYW1lLCBGV19EUERSRVNVTFRfTkFNRV84ODAwREMpID09IDApIHsKKyNlbHNlCisJaWYoMCkgeworI2VuZGlmCiAJCWxlbiA9IHNucHJpbnRmKHBhdGgsIEZXX1BBVEhfTUFYX0xFTiwgIiVzLyVzIiwgVkVORE9SX1NQRUNJRklFRF9EUERfUEFUSCwgbmFtZSk7CiAJfSBlbHNlIHsKICAgICBsZW4gPSBzbnByaW50ZihwYXRoLCBGV19QQVRIX01BWF9MRU4sICIlcy8lcyIsIFZFTkRPUl9TUEVDSUZJRURfRldfUEFUSCwgbmFtZSk7CkBAIC00MjUsNiArNDc1LDkgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0RQRAorcmZfbWlzY19yYW1fbGl0ZV90IGRwZF9yZXMgPSB7MCx9OworI2VuZGlmCiBpbnQgYWljd2ZfcGF0Y2hfdGFibGVfbG9hZChzdHJ1Y3QgcndueF9odyAqcndueF9odywgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgaW50IGVyciA9IDA7CkBAIC03MDMsNiArNzU2LDcgQEAKICAgICAqdHhwd3JfbHZsX3YyID0gbnZyYW1faW5mby50eHB3cl9sdmxfdjI7CiAgICAgcHJpbnRrKCIlczplbmFibGU6JWRcclxuIiwgICAgICAgICAgICAgICBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5lbmFibGUpOwogICAgIHByaW50aygiJXM6bHZsXzExYl8xMWFnXzFtXzJnNDolZFxyXG4iLCAgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFswXSk7CisjaWYgMAogICAgIHByaW50aygiJXM6bHZsXzExYl8xMWFnXzJtXzJnNDolZFxyXG4iLCAgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYl8xMWFnXzJnNFsxXSk7CiAgICAgcHJpbnRrKCIlczpsdmxfMTFiXzExYWdfNW01XzJnNDolZFxyXG4iLCBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFiXzExYWdfMmc0WzJdKTsKICAgICBwcmludGsoIiVzOmx2bF8xMWJfMTFhZ18xMW1fMmc0OiVkXHJcbiIsIF9fZnVuY19fLCB0eHB3cl9sdmxfdjItPnB3cmx2bF8xMWJfMTFhZ18yZzRbM10pOwpAQCAtNzM2LDYgKzc5MCw3IEBACiAgICAgcHJpbnRrKCIlczpsdmxfMTFheF9tY3M5XzJnNDolZFxyXG4iLCAgICBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFheF8yZzRbOV0pOwogICAgIHByaW50aygiJXM6bHZsXzExYXhfbWNzMTBfMmc0OiVkXHJcbiIsICAgX19mdW5jX18sIHR4cHdyX2x2bF92Mi0+cHdybHZsXzExYXhfMmc0WzEwXSk7CiAgICAgcHJpbnRrKCIlczpsdmxfMTFheF9tY3MxMV8yZzQ6JWRcclxuIiwgICBfX2Z1bmNfXywgdHhwd3JfbHZsX3YyLT5wd3JsdmxfMTFheF8yZzRbMTFdKTsKKyNlbmRpZgogfQogdm9pZCBnZXRfdXNlcmNvbmZpZ190eHB3cl9sb3NzKHR4cHdyX2xvc3NfY29uZl90ICp0eHB3cl9sb3NzKQogewpAQCAtNzQ0LDYgKzc5OSwxMiBAQAogICAgIHByaW50aygiJXM6bG9zc19lbmFibGU6JWRcclxuIiwgICAgIF9fZnVuY19fLCB0eHB3cl9sb3NzLT5sb3NzX2VuYWJsZSk7CiAgICAgcHJpbnRrKCIlczpsb3NzX3ZhbHVlOiVkXHJcbiIsICAgICAgX19mdW5jX18sIHR4cHdyX2xvc3MtPmxvc3NfdmFsdWUpOwogfQordm9pZCBzZXRfdHhwd3JfbG9zc19vZnN0KHM4X2wgdmFsdWUpCit7CisgICAgbnZyYW1faW5mby50eHB3cl9sb3NzLmxvc3NfZW5hYmxlID0gMTsKKyAgICBudnJhbV9pbmZvLnR4cHdyX2xvc3MubG9zc192YWx1ZSArPSB2YWx1ZTsKKyAgICBwcmludGsoIiVzOnZhbHVlOiVkXHJcbiIsICAgICAgX19mdW5jX18sIHZhbHVlKTsKK30KIHZvaWQgZ2V0X3VzZXJjb25maWdfdHhwd3Jfb2ZzdCh0eHB3cl9vZnN0X2NvbmZfdCAqdHhwd3Jfb2ZzdCkKIHsKICAgICB0eHB3cl9vZnN0LT5lbmFibGUgICAgICAgPSBudnJhbV9pbmZvLnR4cHdyX29mc3QuZW5hYmxlOwpAQCAtMTU1MSwxMyArMTYxMiwzMiBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK2ludCBhaWN3Zl9wbGF0X3BhdGNoX2xvYWRfODgwMGRjKHN0cnVjdCByd254X2h3ICpyd254X2h3KQoreworICAgIGludCByZXQgPSAwOworI2lmICFkZWZpbmVkKENPTkZJR19GUEdBX1ZFUklGSUNBVElPTikKKyAgICBpZiAoY2hpcF9zdWJfaWQgPT0gMCkgeworICAgICAgICByZXQgPSByd254X3BsYXRfYmluX2Z3X3VwbG9hZF8yKHJ3bnhfaHcsIFJPTV9GTUFDX1BBVENIX0FERFIsIFJXTlhfTUFDX1BBVENIX05BTUUyKTsKKyAgICB9IGVsc2UgaWYgKGNoaXBfc3ViX2lkID09IDEpIHsKKyAgICAgICAgcmV0ID0gcndueF9wbGF0X2Jpbl9md191cGxvYWRfMihyd254X2h3LCBST01fRk1BQ19QQVRDSF9BRERSLCBSV05YX01BQ19QQVRDSF9OQU1FMl9VMDIpOworICAgIH0gZWxzZSBpZiAoY2hpcF9zdWJfaWQgPT0gMikgeworICAgICAgICByZXQgPSByd254X3BsYXRfYmluX2Z3X3VwbG9hZF8yKHJ3bnhfaHcsIFJPTV9GTUFDX1BBVENIX0FERFIsIFJXTlhfTUFDX1BBVENIX05BTUUyXzg4MDBEQ19IX1UwMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgY2hpcF9zdWJfaWQpOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiByZXQ7Cit9CiAvKioKICAqIHJ3bnhfcGxhdF9wYXRjaF9sb2FkKCkgLSBMb2FkIHBhdGNoIGNvZGUKICAqCiAgKiBAcndueF9odzogTWFpbiBkcml2ZXIgZGF0YQogICovCi0gdWludDMyX3QgZHBkX3Jlc1tEUERfUkVTVUxUX1NJWkVfODgwMERDIC8gNF0gPSB7MCx9OwotZXh0ZXJuIGludCBhaWN3Zl9kcGRfY2FsaWJfODgwMGRjKHN0cnVjdCByd254X2h3ICpyd254X2h3LCB1aW50MzJfdCAqZHBkX3Jlcyk7CisjaWZkZWYgQ09ORklHX0RQRAorZXh0ZXJuIGludCBhaWN3Zl9kcGRfY2FsaWJfODgwMGRjKHN0cnVjdCByd254X2h3ICpyd254X2h3LCAgcmZfbWlzY19yYW1fbGl0ZV90ICpkcGRfcmVzKTsKK2V4dGVybiBpbnQgYWljd2ZfZHBkX3Jlc3VsdF9sb2FkXzg4MDBkYyhzdHJ1Y3QgcndueF9odyAqcndueF9odywgcmZfbWlzY19yYW1fbGl0ZV90ICpkcGRfcmVzKTsKK2V4dGVybiBpbnQgYWljd2ZfZHBkX3Jlc3VsdF9hcHBseV84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHJmX21pc2NfcmFtX2xpdGVfdCAqZHBkX3Jlcyk7CisjZW5kaWYKIHN0YXRpYyBpbnQgcndueF9wbGF0X3BhdGNoX2xvYWQoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCiB7CiAgICAgaW50IHJldCA9IDA7CkBAIC0xNTY2LDgxICsxNjQ2LDkzIEBACiAgICAgaWYgKHRlc3Rtb2RlID09IDApIHsKICAgICAgICAgI2lmICFkZWZpbmVkKENPTkZJR19GUEdBX1ZFUklGSUNBVElPTikKICAgICAgICAgaWYgKGNoaXBfc3ViX2lkID09IDApIHsKLSAgICAgICAgcmV0ID0gcndueF9wbGF0X2Jpbl9md191cGxvYWRfMihyd254X2h3LCBST01fRk1BQ19QQVRDSF9BRERSX1UwMSwgUldOWF9NQUNfUEFUQ0hfTkFNRTIpOwotICAgICAgICB9IGVsc2UgaWYgKGNoaXBfc3ViX2lkID09IDEpIHsKLSAgICAgICAgICAgIHJldCA9IHJ3bnhfcGxhdF9iaW5fZndfdXBsb2FkXzIocndueF9odywgUk9NX0ZNQUNfUEFUQ0hfQUREUiwgUldOWF9NQUNfUEFUQ0hfTkFNRTJfVTAyKTsKKyAgICAgICAgICAgIGFpY3dmX3BsYXRfcGF0Y2hfbG9hZF84ODAwZGMocndueF9odyk7CisgICAgICAgIH0gZWxzZSBpZiAoY2hpcF9zdWJfaWQgPj0gMSkgeworICAgICAgICAgICAgYWljd2ZfcGxhdF9wYXRjaF9sb2FkXzg4MDBkYyhyd254X2h3KTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoInBhdGNoIGxvYWQgZmFpbDogJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KICNpZmRlZiBDT05GSUdfRFBECiAjaWZkZWYgQ09ORklHX0ZPUkNFX0RQRF9DQUxJQgogCQlpZiAoMSkgewogCQkJcHJpbnRrKCJkcGQgY2FsaWIgJiB3cml0ZVxuIik7Ci0JCQlyZXQgPSBhaWN3Zl9kcGRfY2FsaWJfODgwMGRjKHJ3bnhfaHcsICZkcGRfcmVzWzBdKTsKKwkJCXJldCA9IGFpY3dmX2RwZF9jYWxpYl84ODAwZGMocndueF9odywgJmRwZF9yZXMpOwogCQkJaWYgKHJldCkgewogCQkJCXByaW50aygiZHBkIGNhbGliIGZhaWw6ICVkXG4iLCByZXQpOwogCQkJCXJldHVybiByZXQ7CiAJCQl9Ci0JCQlyZXQgPSBhaWN3Zl9kcGRfcmVzdWx0X3dyaXRlXzg4MDBkYygodm9pZCAqKWRwZF9yZXMsIERQRF9SRVNVTFRfU0laRV84ODAwREMpOwotCQkJaWYgKHJldCkgewotCQkJCXByaW50aygiZmlsZSB3cml0ZSBmYWlsOiAlZFxuIiwgcmV0KTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQogCQl9CiAjZWxzZQogCQlpZiAoaXNfZmlsZV9leGlzdChGV19EUERSRVNVTFRfTkFNRV84ODAwREMpID09IDEpIHsKIAkJCXByaW50aygiZHBkIGJpbiBsb2FkXG4iKTsKLQkJCXJldCA9IGFpY3dmX2RwZF9yZXN1bHRfbG9hZF84ODAwZGMocndueF9odyk7CisJCQlyZXQgPSBhaWN3Zl9kcGRfcmVzdWx0X2xvYWRfODgwMGRjKHJ3bnhfaHcsICZkcGRfcmVzKTs7CiAJCQlpZiAocmV0KSB7CiAJCQkJcHJpbnRrKCJsb2FkIGRwZCBiaW4gZmFpbDogJWRcbiIsIHJldCk7CiAJCQkJcmV0dXJuIHJldDsKIAkJCX0KKwkJCXJldCA9IGFpY3dmX2RwZF9yZXN1bHRfYXBwbHlfODgwMGRjKHJ3bnhfaHcsICZkcGRfcmVzKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoImFwcGx5IGRwZCBiaW4gZmFpbDogJWRcbiIsIHJldCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KIAkJfQogI2VuZGlmCiAJCWVsc2UKICNlbmRpZgogCQl7Ci0JCQlhaWN3Zl9taXNjX3JhbV9pbml0Xzg4MDBkYyhyd254X2h3KTsKKwkJCXJldCA9IGFpY3dmX21pc2NfcmFtX2luaXRfODgwMGRjKHJ3bnhfaHcpOworCQkJaWYgKHJldCkgeworCQkJCXByaW50aygibWlzYyByYW0gaW5pdCBmYWlsOiAlZFxuIiwgcmV0KTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcmludGsoInVuc3VwcG9ydGVkIGlkOiAlZFxuIiwgY2hpcF9zdWJfaWQpOwogICAgICAgICB9CiAgICAgICAgICNlbmRpZgogICAgIH0gZWxzZSBpZiAodGVzdG1vZGUgPT0gMSkgewotICAgIAlyZXQgPSByd254X3BsYXRfYmluX2Z3X3VwbG9hZF8yKHJ3bnhfaHcsIFJPTV9GTUFDX1BBVENIX0FERFIsIFJXTlhfTUFDX1BBVENIX05BTUUyX1UwMik7CiAJCQlwcmludGsoInBhdGNoIGxvYWRcbiIpOworCQlhaWN3Zl9wbGF0X3BhdGNoX2xvYWRfODgwMGRjKHJ3bnhfaHcpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoInBhdGNoIGxvYWQgZmFpbDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CiAjaWZkZWYgQ09ORklHX0RQRAogI2lmZGVmIENPTkZJR19GT1JDRV9EUERfQ0FMSUIKIAkJCWlmICgxKSB7CiAJCQkJcHJpbnRrKCJkcGQgY2FsaWIgJiB3cml0ZVxuIik7Ci0JCQkJcmV0ID0gYWljd2ZfZHBkX2NhbGliXzg4MDBkYyhyd254X2h3LCAmZHBkX3Jlc1swXSk7CisJCQkJcmV0ID0gYWljd2ZfZHBkX2NhbGliXzg4MDBkYyhyd254X2h3LCAmZHBkX3Jlcyk7CiAJCQkJaWYgKHJldCkgewogCQkJCQlwcmludGsoImRwZCBjYWxpYiBmYWlsOiAlZFxuIiwgcmV0KTsKIAkJCQkJcmV0dXJuIHJldDsKIAkJCQl9Ci0JCQkJcmV0ID0gYWljd2ZfZHBkX3Jlc3VsdF93cml0ZV84ODAwZGMoKHZvaWQgKilkcGRfcmVzLCBEUERfUkVTVUxUX1NJWkVfODgwMERDKTsKLQkJCQlpZiAocmV0KSB7Ci0JCQkJCXByaW50aygiZmlsZSB3cml0ZSBmYWlsOiAlZFxuIiwgcmV0KTsKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQl9CiAJCQl9CiAjZW5kaWYKICNlbmRpZgorCQlwcmludGsoIiVzIGxvYWQgcmZ0ZXN0IGJpblxuIiwgX19mdW5jX18pOwogICAgICAgICBpZiAoY2hpcF9zdWJfaWQgPT0gMCkgewogICAgICAgICByZXQgPSByd254X3BsYXRfYmluX2Z3X3VwbG9hZF8yKHJ3bnhfaHcsIFJPTV9GTUFDX1BBVENIX0FERFJfVTAxLCBSV05YX01BQ19SRl9QQVRDSF9OQU1FKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXJldCkgewogICAgICAgICAgICAgcmV0ID0gcndueF9wbGF0X2Jpbl9md191cGxvYWRfMihyd254X2h3LCBSQU1fTE1BQ19GV19BRERSLCBSV05YX01BQ19GV19SRl9CQVNFX05BTUUpOwogICAgICAgICAJfQorCQlpZiAocmV0KSB7CisJCQlwcmludGsoInJmdGVzdCBiaW4gbG9hZCBmYWlsOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KICAgICAgICAgfQogCWVsc2UgaWYgKHRlc3Rtb2RlID09IDQpIHsKLSAgICAgICAgICAgICAgICAjaWZkZWYgQ09ORklHX0RQRAorICAgICAgICAgICAgICAgICNpZiAoZGVmaW5lZChDT05GSUdfRFBEKSAmJiAhZGVmaW5lZChDT05GSUdfRk9SQ0VfRFBEX0NBTElCKSkKIAkJCQkJaWYgKGlzX2ZpbGVfZXhpc3QoRldfRFBEUkVTVUxUX05BTUVfODgwMERDKSA9PSAwKSB7CiAJCQkJCQlwcmludGsoInBhdGNoIGxvYWRcbiIpOwotCQkJCQkJcmV0ID0gcndueF9wbGF0X2Jpbl9md191cGxvYWRfMihyd254X2h3LCBST01fRk1BQ19QQVRDSF9BRERSLCBSV05YX01BQ19QQVRDSF9OQU1FMl9VMDIpOworCQkJCQkJYWljd2ZfcGxhdF9wYXRjaF9sb2FkXzg4MDBkYyhyd254X2h3KTsKIAkJCQkJCWlmIChyZXQpIHsKIAkJCQkJCQlwcmludGsoImxvYWQgcGF0Y2ggYmluIGZhaWw6ICVkXG4iLCByZXQpOwogCQkJCQkJCXJldHVybiByZXQ7CiAJCQkJCQl9CiAJCQkJCQlwcmludGsoImRwZCBjYWxpYiAmIHdyaXRlXG4iKTsKLQkJCQkJCXJldCA9IGFpY3dmX2RwZF9jYWxpYl84ODAwZGMocndueF9odywgJmRwZF9yZXNbMF0pOworCQkJCQkJcmV0ID0gYWljd2ZfZHBkX2NhbGliXzg4MDBkYyhyd254X2h3LCAmZHBkX3Jlcyk7CiAJCQkJCQlpZiAocmV0KSB7CiAJCQkJCQkJcHJpbnRrKCJkcGQgY2FsaWIgZmFpbDogJWRcbiIsIHJldCk7CiAJCQkJCQkJcmV0dXJuIHJldDsKQEAgLTE2NjgsNiArMTc2MCwxMiBAQAogICAgICAgICAgICAgcHJpbnRrKCJsb2FkIHJmdGVzdCBiaW4gZmFpbDogJWRcbiIsIHJldCk7CiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGlwX3N1Yl9pZCA9PSAyKSB7CisgICAgICAgIHJldCA9IHJ3bnhfcGxhdF9iaW5fZndfdXBsb2FkXzIocndueF9odywgUk9NX0ZNQUNfQ0FMSUJfQUREUiwgUldOWF9NQUNfQ0FMSUJfTkFNRV84ODAwRENfSF9VMDIpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICBwcmludGsoImxvYWQgY2FsaWIgYmluIGZhaWw6ICVkXG4iLCByZXQpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmV0OwogfQpAQCAtMTY5NCwzOCArMTc5MiwxOSBAQAogICAgICAgICByZXR1cm4gMTsKICAgICB9CiB9Ci1FWFBPUlRfU1lNQk9MKGlzX2ZpbGVfZXhpc3QpOwotaW50IGFpY3dmX2ZkcnZfZHBkX3Jlc3VsdF9sb2FkXzg4MDBkYyhzdHJ1Y3QgcndueF9odyAqcndueF9odykKKworI2VuZGlmCitpbnQgYWljd2ZfbWlzY19yYW1faW5pdF84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpCiB7CiAgICAgaW50IHJldCA9IDA7CiAgICAgdWludDMyX3QgY2ZnX2Jhc2UgPSAweDEwMTY0OwogICAgIHN0cnVjdCBkYmdfbWVtX3JlYWRfY2ZtIGNmbTsKICAgICB1aW50MzJfdCBtaXNjX3JhbV9hZGRyOwotCXByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKKyAgICB1aW50MzJfdCBtaXNjX3JhbV9zaXplID0gMTI7CisgICAgaW50IGk7CiAgICAgaWYgKHRlc3Rtb2RlID09IDEpIHsKICAgICAgICAgY2ZnX2Jhc2UgPSBSQU1fTE1BQ19GV19BRERSICsgMHgwMTY0OwogICAgIH0KLSAgICBpZiAoKHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3JlYWRfcmVxKHJ3bnhfaHcsIGNmZ19iYXNlICsgMHgxNCwgJmNmbSkpKSB7Ci0gICAgICAgIHByaW50aygicmYgbWlzYyByYW1bMHgleF0gcmQgZmFpbDogJWRcbiIsIGNmZ19iYXNlICsgMHgxNCwgcmV0KTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0gICAgbWlzY19yYW1fYWRkciA9IGNmbS5tZW1kYXRhOwotICAgIHJldCA9IHJ3bnhfcGxhdF9iaW5fZndfdXBsb2FkXzIocndueF9odywgbWlzY19yYW1fYWRkciwgRldfRFBEUkVTVUxUX05BTUVfODgwMERDKTsKLSAgICBpZiAocmV0KSB7Ci0gICAgICAgIHByaW50aygibG9hZCBjYWxpYiBiaW4gZmFpbDogJWRcbiIsIHJldCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLWludCBhaWN3Zl9taXNjX3JhbV9pbml0Xzg4MDBkYyhzdHJ1Y3QgcndueF9odyAqcndueF9odykKLXsKLSAgICBpbnQgcmV0ID0gMDsKLSAgICBjb25zdCB1aW50MzJfdCBjZmdfYmFzZSA9IDB4MTAxNjQ7Ci0gICAgc3RydWN0IGRiZ19tZW1fcmVhZF9jZm0gY2ZtOwotICAgIHVpbnQzMl90IG1pc2NfcmFtX2FkZHI7Ci0gICAgdWludDMyX3QgbWlzY19yYW1fc2l6ZSA9IDEyOwotICAgIGludCBpOwogICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3JlYWRfcmVxKHJ3bnhfaHcsIGNmZ19iYXNlICsgMHgxNCwgJmNmbSk7CiAgICAgaWYgKHJldCkgewogICAgICAgICBwcmludGsoInJmIG1pc2MgcmFtWzB4JXhdIHJkIGZhaWw6ICVkXG4iLCBjZmdfYmFzZSArIDB4MTQsIHJldCk7CkBAIC0xNzQzLDcgKzE4MjIsNyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAjaWZkZWYgQ09ORklHX0RQRAotaW50IGFpY3dmX2RwZF9jYWxpYl84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHVpbnQzMl90ICpkcGRfcmVzKQoraW50IGFpY3dmX2RwZF9jYWxpYl84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcsIHJmX21pc2NfcmFtX2xpdGVfdCAqZHBkX3JlcykKIHsKICAgICBpbnQgcmV0ID0gMDsKICAgICB1aW50MzJfdCBmd19hZGRyLCBib290X3R5cGU7CkBAIC0xNzY1LDcgKzE4NDQsNyBAQAogICAgICAgICBjb25zdCB1aW50MzJfdCBjZmdfYmFzZSA9IDB4MTAxNjQ7CiAgICAgICAgIHN0cnVjdCBkYmdfbWVtX3JlYWRfY2ZtIGNmbTsKICAgICAgICAgdWludDMyX3QgbWlzY19yYW1fYWRkcjsKLSAgICAgICAgdWludDMyX3QgbWlzY19yYW1fc2l6ZSA9IERQRF9SRVNVTFRfU0laRV84ODAwREM7CisgICAgICAgIHVpbnQzMl90IHJhbV9iYXNlX2FkZHIsIHJhbV93b3JkX2NudDsKICAgICAgICAgaW50IGk7CiAgICAgICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3JlYWRfcmVxKHJ3bnhfaHcsIGNmZ19iYXNlICsgMHgxNCwgJmNmbSk7CiAgICAgICAgIGlmIChyZXQpIHsKQEAgLTE3NzMsMjQgKzE4NTIsNTEgQEAKICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgIH0KICAgICAgICAgbWlzY19yYW1fYWRkciA9IGNmbS5tZW1kYXRhOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKG1pc2NfcmFtX3NpemUgLyA0KTsgaSsrKSB7Ci0gICAgICAgICAgICByZXQgPSByd254X3NlbmRfZGJnX21lbV9yZWFkX3JlcShyd254X2h3LCBtaXNjX3JhbV9hZGRyICsgaSAqIDQsICZjZm0pOworICAgICAgICByYW1fYmFzZV9hZGRyID0gbWlzY19yYW1fYWRkciArIG9mZnNldG9mKHJmX21pc2NfcmFtX3QsIGJpdF9tYXNrKTsKKyAgICAgICAgcmFtX3dvcmRfY250ID0gKE1FTUJFUl9TSVpFKHJmX21pc2NfcmFtX3QsIGJpdF9tYXNrKSArIE1FTUJFUl9TSVpFKHJmX21pc2NfcmFtX3QsIHJlc2VydmVkKSkgLyA0OworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFtX3dvcmRfY250OyBpKyspIHsKKyAgICAgICAgICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX3JlYWRfcmVxKHJ3bnhfaHcsIHJhbV9iYXNlX2FkZHIgKyBpICogNCwgJmNmbSk7CiAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgIHByaW50aygicmYgbWlzYyByYW1bMHgleF0gcmQgZmFpbDogJWRcbiIsICBtaXNjX3JhbV9hZGRyICsgaSAqIDQsIHJldCk7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJiaXRfbWFza1sweCV4XSByZCBmYWlsOiAlZFxuIiwgIHJhbV9iYXNlX2FkZHIgKyBpICogNCwgcmV0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZHBkX3Jlc1tpXSA9IGNmbS5tZW1kYXRhOworICAgICAgICAgICAgZHBkX3Jlcy0+Yml0X21hc2tbaV0gPSBjZm0ubWVtZGF0YTsKKyAgICAgICAgfQorICAgICAgICByYW1fYmFzZV9hZGRyID0gbWlzY19yYW1fYWRkciArIG9mZnNldG9mKHJmX21pc2NfcmFtX3QsIGRwZF9oaWdoKTsKKyAgICAgICAgcmFtX3dvcmRfY250ID0gTUVNQkVSX1NJWkUocmZfbWlzY19yYW1fdCwgZHBkX2hpZ2gpIC8gNDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHJhbV93b3JkX2NudDsgaSsrKSB7CisgICAgICAgICAgICByZXQgPSByd254X3NlbmRfZGJnX21lbV9yZWFkX3JlcShyd254X2h3LCByYW1fYmFzZV9hZGRyICsgaSAqIDQsICZjZm0pOworICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgIHByaW50aygiYml0X21hc2tbMHgleF0gcmQgZmFpbDogJWRcbiIsICByYW1fYmFzZV9hZGRyICsgaSAqIDQsIHJldCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRwZF9yZXMtPmRwZF9oaWdoW2ldID0gY2ZtLm1lbWRhdGE7CisgICAgICAgIH0KKyAgICAgICAgcmFtX2Jhc2VfYWRkciA9IG1pc2NfcmFtX2FkZHIgKyBvZmZzZXRvZihyZl9taXNjX3JhbV90LCBsb2Z0X3Jlcyk7CisgICAgICAgIHJhbV93b3JkX2NudCA9IE1FTUJFUl9TSVpFKHJmX21pc2NfcmFtX3QsIGxvZnRfcmVzKSAvIDQ7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW1fd29yZF9jbnQ7IGkrKykgeworICAgICAgICAgICAgcmV0ID0gcndueF9zZW5kX2RiZ19tZW1fcmVhZF9yZXEocndueF9odywgcmFtX2Jhc2VfYWRkciArIGkgKiA0LCAmY2ZtKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoImJpdF9tYXNrWzB4JXhdIHJkIGZhaWw6ICVkXG4iLCAgcmFtX2Jhc2VfYWRkciArIGkgKiA0LCByZXQpOworICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkcGRfcmVzLT5sb2Z0X3Jlc1tpXSA9IGNmbS5tZW1kYXRhOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9Ci1pbnQgYWljd2ZfZHBkX3Jlc3VsdF9sb2FkXzg4MDBkYyhzdHJ1Y3QgcndueF9odyAqcndueF9odykKK2ludCBhaWN3Zl9kcGRfcmVzdWx0X2FwcGx5Xzg4MDBkYyhzdHJ1Y3QgcndueF9odyAqcndueF9odywgcmZfbWlzY19yYW1fbGl0ZV90ICpkcGRfcmVzKQogewotCXByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKICAgICBpbnQgcmV0ID0gMDsKICAgICB1aW50MzJfdCBjZmdfYmFzZSA9IDB4MTAxNjQ7CiAgICAgc3RydWN0IGRiZ19tZW1fcmVhZF9jZm0gY2ZtOwogICAgIHVpbnQzMl90IG1pc2NfcmFtX2FkZHI7CisgICAgdWludDMyX3QgcmFtX2Jhc2VfYWRkciwgcmFtX2J5dGVfY250OworICAgIHByaW50aygiYml0X21hc2tbMV09JXhcbiIsIGRwZF9yZXMtPmJpdF9tYXNrWzFdKTsKKyAgICBpZiAoZHBkX3Jlcy0+Yml0X21hc2tbMV0gPT0gMCkgeworICAgICAgICBwcmludGsoInZvaWQgZHBkX3JlcywgYnlwYXNzIGl0LlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAlpZiAodGVzdG1vZGUgPT0gMSkgewogCQljZmdfYmFzZSA9IFJBTV9MTUFDX0ZXX0FERFIgKyAweDAxNjQ7CiAJfQpAQCAtMTc5OSwxMSArMTkwNSw1MiBAQAogICAgICAgICByZXR1cm4gcmV0OwogICAgIH0KICAgICBtaXNjX3JhbV9hZGRyID0gY2ZtLm1lbWRhdGE7Ci0gICAgcmV0ID0gcndueF9wbGF0X2Jpbl9md191cGxvYWRfMihyd254X2h3LCBtaXNjX3JhbV9hZGRyLCBGV19EUERSRVNVTFRfTkFNRV84ODAwREMpOworICAgIHByaW50aygibWlzY19yYW1fYWRkcjogJXhcbiIsIG1pc2NfcmFtX2FkZHIpOworICAgIHByaW50aygiYml0X21hc2tbMF09JXhcbiIsIGRwZF9yZXMtPmJpdF9tYXNrWzBdKTsKKyAgICByYW1fYmFzZV9hZGRyID0gbWlzY19yYW1fYWRkciArIG9mZnNldG9mKHJmX21pc2NfcmFtX3QsIGJpdF9tYXNrKTsKKyAgICByYW1fYnl0ZV9jbnQgPSBNRU1CRVJfU0laRShyZl9taXNjX3JhbV90LCBiaXRfbWFzaykgKyBNRU1CRVJfU0laRShyZl9taXNjX3JhbV90LCByZXNlcnZlZCk7CisgICAgcmV0ID0gcndueF9zZW5kX2RiZ19tZW1fYmxvY2tfd3JpdGVfcmVxKHJ3bnhfaHcsIHJhbV9iYXNlX2FkZHIsIHJhbV9ieXRlX2NudCwgKHUzMiAqKSZkcGRfcmVzLT5iaXRfbWFza1swXSk7CiAgICAgaWYgKHJldCkgewotICAgICAgICBwcmludGsoImxvYWQgY2FsaWIgYmluIGZhaWw6ICVkXG4iLCByZXQpOworICAgICAgICBwcmludGsoImJpdF9tYXNrIHdyIGZhaWw6ICV4LCByZXQ6JWRcclxuIiwgcmFtX2Jhc2VfYWRkciwgcmV0KTsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CisgICAgcHJpbnRrKCJkcGRfaGlnaFswXT0leFxuIiwgZHBkX3Jlcy0+ZHBkX2hpZ2hbMF0pOworICAgIHJhbV9iYXNlX2FkZHIgPSBtaXNjX3JhbV9hZGRyICsgb2Zmc2V0b2YocmZfbWlzY19yYW1fdCwgZHBkX2hpZ2gpOworICAgIHJhbV9ieXRlX2NudCA9IE1FTUJFUl9TSVpFKHJmX21pc2NfcmFtX3QsIGRwZF9oaWdoKTsKKyAgICByZXQgPSByd254X3NlbmRfZGJnX21lbV9ibG9ja193cml0ZV9yZXEocndueF9odywgcmFtX2Jhc2VfYWRkciwgcmFtX2J5dGVfY250LCAodTMyICopJmRwZF9yZXMtPmRwZF9oaWdoWzBdKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHByaW50aygiZHBkX2hpZ2ggd3IgZmFpbDogJXgsIHJldDolZFxyXG4iLCByYW1fYmFzZV9hZGRyLCByZXQpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBwcmludGsoImxvZnRfcmVzWzBdPSV4XG4iLCBkcGRfcmVzLT5sb2Z0X3Jlc1swXSk7CisgICAgcmFtX2Jhc2VfYWRkciA9IG1pc2NfcmFtX2FkZHIgKyBvZmZzZXRvZihyZl9taXNjX3JhbV90LCBsb2Z0X3Jlcyk7CisgICAgcmFtX2J5dGVfY250ID0gTUVNQkVSX1NJWkUocmZfbWlzY19yYW1fdCwgbG9mdF9yZXMpOworICAgIHJldCA9IHJ3bnhfc2VuZF9kYmdfbWVtX2Jsb2NrX3dyaXRlX3JlcShyd254X2h3LCByYW1fYmFzZV9hZGRyLCByYW1fYnl0ZV9jbnQsICh1MzIgKikmZHBkX3Jlcy0+bG9mdF9yZXNbMF0pOworICAgIGlmIChyZXQpIHsKKyAgICAgICAgcHJpbnRrKCJsb2Z0X3JlcyB3ciBmYWlsOiAleCwgcmV0OiVkXHJcbiIsIHJhbV9iYXNlX2FkZHIsIHJldCk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisjaWZuZGVmIENPTkZJR19GT1JDRV9EUERfQ0FMSUIKK2ludCBhaWN3Zl9kcGRfcmVzdWx0X2xvYWRfODgwMGRjKHN0cnVjdCByd254X2h3ICpyd254X2h3LCByZl9taXNjX3JhbV9saXRlX3QgKmRwZF9yZXMpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgaW50IHNpemU7CisgICAgdTMyICpkc3Q9TlVMTDsKKyAgICBjaGFyICpmaWxlbmFtZSA9IEZXX0RQRFJFU1VMVF9OQU1FXzg4MDBEQzsKKyAgICBwcmludGsoImRwZF9yZXMgZmlsZSBwYXRoOiVzIFxyXG4iLCBmaWxlbmFtZSk7CisgICAgc2l6ZSA9IHJ3bnhfcmVxdWVzdF9maXJtd2FyZV9jb21tb24ocndueF9odywgJmRzdCwgZmlsZW5hbWUpOworICAgIGlmIChzaXplIDw9IDApIHsKKyAgICAgICAgcHJpbnRrKCJ3cm9uZyBzaXplIG9mIGRwZF9yZXMgZmlsZVxuIik7CisgICAgICAgIGRzdCA9IE5VTEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcHJpbnRrKCIjIyMgTG9hZCBmaWxlIGRvbmU6ICVzLCBzaXplPSVkLCBkc3RbMF09JXhcbiIsIGZpbGVuYW1lLCBzaXplLCBkc3RbMF0pOworICAgIG1lbWNweSgodTggKilkcGRfcmVzLCAodTggKilkc3QsIHNpemVvZihyZl9taXNjX3JhbV9saXRlX3QpKTsKKyAgICBpZiAoZHN0KSB7CisgICAgICAgIHJ3bnhfcmVsZWFzZV9maXJtd2FyZV9jb21tb24oJmRzdCk7CisgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiBpbnQgYWljd2ZfZHBkX3Jlc3VsdF93cml0ZV84ODAwZGModm9pZCAqYnVmLCBpbnQgYnVmX2xlbikKQEAgLTE4NDYsNiArMTk5Myw3IEBACiAJZnAgPSBOVUxMOwogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qICFDT05GSUdfRk9SQ0VfRFBEX0NBTElCICovCiAjZW5kaWYKIAogI2lmIDAKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9wbGF0Zm9ybS5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X3BsYXRmb3JtLmgKaW5kZXggYTU4ODNkZS4uZjkxMTc2MyAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X3BsYXRmb3JtLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWljODgwMC9yd254X3BsYXRmb3JtLmgKQEAgLTQzLDIxICs0Myw0OSBAQAogI2VuZGlmCiAjZGVmaW5lIFJXTlhfTUFDX0NBTElCX0JBU0VfTkFNRV84ODAwREMgICAgICAgICJmbWFjZndfY2FsaWJfODgwMGRjIgogI2RlZmluZSBSV05YX01BQ19DQUxJQl9OQU1FXzg4MDBEQ19VMDIgICAgICAgICAgUldOWF9NQUNfQ0FMSUJfQkFTRV9OQU1FXzg4MDBEQyJfdTAyLmJpbiIKKyNkZWZpbmUgUldOWF9NQUNfQ0FMSUJfTkFNRV84ODAwRENfSF9VMDIgICAgICAgIFJXTlhfTUFDX0NBTElCX0JBU0VfTkFNRV84ODAwREMiX2hfdTAyLmJpbiIKIAorI2lmIChkZWZpbmVkKENPTkZJR19EUEQpICYmICFkZWZpbmVkKENPTkZJR19GT1JDRV9EUERfQ0FMSUIpKQorI2RlZmluZSBGV19EUERSRVNVTFRfTkFNRV84ODAwREMgICAgICAgICJhaWNfZHBkcmVzdWx0Xzg4MDBkYy5iaW4iCisjZW5kaWYKICNpZmRlZiBDT05GSUdfRFBECiAjZGVmaW5lIFJPTV9GTUFDX0NBTElCX0FERFIgICAgICAgICAgICAweDAwMTMwMDAwCi0jZGVmaW5lIEZXX0RQRFJFU1VMVF9OQU1FXzg4MDBEQyAgICAgICAgImFpY19kcGRyZXN1bHRfODgwMGRjLmJpbiIKLSNkZWZpbmUgRFBEX1JFU1VMVF9TSVpFXzg4MDBEQyAxODgwCiAjZGVmaW5lIEZXX1BBVEhfTUFYX0xFTiAyMDAKLWludCBhaWN3Zl9kcGRfcmVzdWx0X3dyaXRlXzg4MDBkYyh2b2lkICpidWYsIGludCBidWZfbGVuKTsKIGludCBpc19maWxlX2V4aXN0KGNoYXIqIG5hbWUpOwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQzMl90IGJpdF9tYXNrWzNdOworICAgIHVpbnQzMl90IHJlc2VydmVkOworICAgIHVpbnQzMl90IGRwZF9oaWdoWzk2XTsKKyAgICB1aW50MzJfdCBkcGRfMTFiWzk2XTsKKyAgICB1aW50MzJfdCBkcGRfbG93Wzk2XTsKKyAgICB1aW50MzJfdCBpZGFjXzExYls0OF07CisgICAgdWludDMyX3QgaWRhY19oaWdoWzQ4XTsKKyAgICB1aW50MzJfdCBpZGFjX2xvd1s0OF07CisgICAgdWludDMyX3QgbG9mdF9yZXNbMThdOworICAgIHVpbnQzMl90IHJ4X2lxaW1fcmVzWzE2XTsKK30gcmZfbWlzY19yYW1fdDsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdCBiaXRfbWFza1s0XTsKKyAgICB1aW50MzJfdCBkcGRfaGlnaFs5Nl07CisgICAgdWludDMyX3QgbG9mdF9yZXNbMThdOworfSByZl9taXNjX3JhbV9saXRlX3Q7CisjZGVmaW5lIE1FTUJFUl9TSVpFKHR5cGUsIG1lbWJlcikgICBzaXplb2YoKCh0eXBlICopMCktPm1lbWJlcikKKyNkZWZpbmUgRFBEX1JFU1VMVF9TSVpFXzg4MDBEQyAgICAgIHNpemVvZihyZl9taXNjX3JhbV9saXRlX3QpCitleHRlcm4gcmZfbWlzY19yYW1fbGl0ZV90IGRwZF9yZXM7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfRFBECisjaWZuZGVmIENPTkZJR19GT1JDRV9EUERfQ0FMSUIKK2ludCBhaWN3Zl9kcGRfcmVzdWx0X3dyaXRlXzg4MDBkYyh2b2lkICpidWYsIGludCBidWZfbGVuKTsKKyNlbmRpZgogI2VuZGlmCiAjZGVmaW5lIFJXTlhfTUFDX1BBVENIX0JBU0VfTkFNRSAgICAgICAgImZtYWNmd19wYXRjaF84ODAwZGMiCiAjZGVmaW5lIFJXTlhfTUFDX1BBVENIX05BTUUyIFJXTlhfTUFDX1BBVENIX0JBU0VfTkFNRSIuYmluIgogI2RlZmluZSBSV05YX01BQ19QQVRDSF9OQU1FMl9VMDIgUldOWF9NQUNfUEFUQ0hfQkFTRV9OQU1FIl91MDIuYmluIgorI2RlZmluZSBSV05YX01BQ19QQVRDSF9OQU1FMl84ODAwRENfSF9VMDIgUldOWF9NQUNfUEFUQ0hfQkFTRV9OQU1FIl9oX3UwMi5iaW4iCiAjZGVmaW5lIFJXTlhfTUFDX1BBVENIX1RBQkxFX05BTUVfODgwMERDICJmbWFjZndfcGF0Y2hfdGJsXzg4MDBkYyIKICNkZWZpbmUgUldOWF9NQUNfUEFUQ0hfVEFCTEVfODgwMERDIFJXTlhfTUFDX1BBVENIX1RBQkxFX05BTUVfODgwMERDICIuYmluIgogI2RlZmluZSBSV05YX01BQ19QQVRDSF9UQUJMRV84ODAwRENfVTAyIFJXTlhfTUFDX1BBVENIX1RBQkxFX05BTUVfODgwMERDICJfdTAyLmJpbiIKKyNkZWZpbmUgUldOWF9NQUNfUEFUQ0hfVEFCTEVfODgwMERDX0hfVTAyIFJXTlhfTUFDX1BBVENIX1RBQkxFX05BTUVfODgwMERDICJfaF91MDIuYmluIgogI2RlZmluZSBSV05YX01BQ19SRl9QQVRDSF9CQVNFX05BTUUgICAgICJmbWFjZndfcmZfcGF0Y2giCiAjZGVmaW5lIFJXTlhfTUFDX1JGX1BBVENIX05BTUUgUldOWF9NQUNfUkZfUEFUQ0hfQkFTRV9OQU1FIi5iaW4iCiAKQEAgLTE2NSw2ICsxOTMsNyBAQAogdm9pZCBnZXRfdXNlcmNvbmZpZ190eHB3cl9sb3NzKHR4cHdyX2xvc3NfY29uZl90ICp0eHB3cl9sb3NzKTsKIHZvaWQgZ2V0X3VzZXJjb25maWdfdHhwd3Jfb2ZzdCh0eHB3cl9vZnN0X2NvbmZfdCAqdHhwd3Jfb2ZzdCk7CiB2b2lkIGdldF91c2VyY29uZmlnX3h0YWxfY2FwKHh0YWxfY2FwX2NvbmZfdCAqeHRhbF9jYXApOwordm9pZCBzZXRfdHhwd3JfbG9zc19vZnN0KHM4X2wgdmFsdWUpOwogI2VuZGlmCiBpbnQgYWljd2ZfcGF0Y2hfdGFibGVfbG9hZChzdHJ1Y3QgcndueF9odyAqcndueF9odywgY2hhciAqZmlsZW5hbWUpOwogaW50IHJ3bnhfbG9hZF9maXJtd2FyZSh1MzIgKipmd19idWYsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CkBAIC0xNzUsNSArMjA0LDYgQEAKICAgICByZXR1cm4gcndueF9wbGF0LT5wY2lfZGV2LT5pcnE7CiB9CiBpbnQgYWljd2ZfbWlzY19yYW1faW5pdF84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpOworaW50IGFpY3dmX3BsYXRfcGF0Y2hfbG9hZF84ODAwZGMoc3RydWN0IHJ3bnhfaHcgKnJ3bnhfaHcpOwogCiAjZW5kaWYgLyogX1JXTlhfUExBVEZPUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9zdHJzLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfc3Rycy5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzJjYzBlOS4uYmQ1NTAyYgotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfc3Rycy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF9zdHJzLmMKQEAgLTEyOCw4ICsxMjgsOCBAQAogICAgICAgICBbTVNHX0koTU1fU0VUX1NUQUNLX1NUQVJUX1JFUSldID0gIk1NX1NFVF9TVEFDS19TVEFSVF9SRVEiLAogICAgICAgICBbTVNHX0koTU1fU0VUX1NUQUNLX1NUQVJUX0NGTSldID0gIk1NX1NFVF9TVEFDS19TVEFSVF9DRk0iLAogICAgICAgICBbTVNHX0koTU1fQVBNX1NUQUxPU1NfSU5EKV0gICAgID0gIk1NX0FQTV9TVEFMT1NTX0lORCIsCi0gICAgICAgIFtNU0dfSShNTV9TRVRfVFhPUF9SRVEpXSAgICAgICAgPSAiTU1fU0VUX1RYT1BfUkVRIiwKLSAgICAgICAgW01TR19JKE1NX1NFVF9UWE9QX0NGTSldICAgICAgICA9ICJNTV9TRVRfVFhPUF9DRk0iLAorICAgICAgICBbTVNHX0koTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19SRVEpXSAgICAgICAgPSAiTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19SRVEiLAorICAgICAgICBbTVNHX0koTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19DRk0pXSAgICAgICAgPSAiTU1fU0VUX1ZFTkRPUl9IV0NPTkZJR19DRk0iLAogICAgICAgICBbTVNHX0koTU1fR0VUX0ZXX1ZFUlNJT05fUkVRKV0gID0gIk1NX0dFVF9GV19WRVJTSU9OX1JFUSIsCiAgICAgICAgIFtNU0dfSShNTV9HRVRfRldfVkVSU0lPTl9DRk0pXSAgPSAiTU1fR0VUX0ZXX1ZFUlNJT05fQ0ZNIiwKIH07CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC93aXJlbGVzcy9haWM4ODAwL3J3bnhfdHguYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCmluZGV4IDM3YTMwNDYuLjRjNzllOTEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FpYzg4MDAvcndueF90eC5jCkBAIC0xNDc2LDcgKzE0NzYsNyBAQAogICAgICNlbHNlCiAgICAgZGVzYyA9ICZ0eGhkci0+ZGVzYzsKICAgICAjZW5kaWYKLQorCWRlc2MtPmhvc3QuZXRoZXJ0eXBlID0gMDsKICAgICBkZXNjLT5ob3N0LnN0YWlkID0gKHN0YSkgPyBzdGEtPnN0YV9pZHggOiAweEZGOwogICAgIGRlc2MtPmhvc3QudmlmX2lkeCA9IHZpZi0+dmlmX2luZGV4OwogICAgIGRlc2MtPmhvc3QudGlkID0gMHhGRjsKQEAgLTE5MTAsNyArMTkxMCw3IEBACiAJI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+PSBLRVJORUxfVkVSU0lPTigzLCA4LCAwKQogICAgICAgICBjZmc4MDIxMV9tZ210X3R4X3N0YXR1cygmc3dfdHhoZHItPnJ3bnhfdmlmLT53ZGV2LAogCSNlbHNlCi0JaWYgKHN3X3R4aGRyLT5yd254X3ZpZi0+dXAgJiYgc3dfdHhoZHItPnJ3bnhfdmlmLT5uZGV2KQorCWlmIChzd190eGhkci0+cndueF92aWYtPnVwICYmIHN3X3R4aGRyLT5yd254X3ZpZi0+bmRldiAmJiBzd190eGhkci0+cndueF92aWYtPm5kZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKICAgICAgICAgY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMoc3dfdHhoZHItPnJ3bnhfdmlmLT5uZGV2LAogCSNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylza2IsCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL25ldC96dm5ldC96dm5ldF9kZXYuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3p2bmV0L3p2bmV0X2Rldi5jCmluZGV4IDRkZDJhOWQuLmI5NDA5NTcgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3p2bmV0L3p2bmV0X2Rldi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvbmV0L3p2bmV0L3p2bmV0X2Rldi5jCkBAIC00MjcsNyArNDI3LDggQEAKIAlpZihnX3p2bmV0X3NrYl94bWl0X3F1ZXVlLnFsZW4gPj0gWlZORVRfWE1JVF9NQVhfUVVFVUVfTlVNKXsNCiAJCW5ldC0+c3RhdHMudHhfZXJyb3JzKys7DQogCQluZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsNCi0JCXp2X2Vycigid3JpdGUgZXJyLCBxbGVuOiVkISIsIGdfenZuZXRfc2tiX3htaXRfcXVldWUucWxlbik7DQorCQlpZihwcmludGtfcmF0ZWxpbWl0KCkpDQorCQkJenZfZXJyKCJ3cml0ZSBlcnIsIHFsZW46JWQhIiwgZ196dm5ldF9za2JfeG1pdF9xdWV1ZS5xbGVuKTsNCiAJCWtmcmVlX3NrYihza2IpOw0KIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7DQogCX0NCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvZGRyL3p4LWRkci5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL2Rkci96eC1kZHIuYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGMxNWUxZGQuLjhlMDE5MzMKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL2Rkci96eC1kZHIuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvZGRyL3p4LWRkci5jCkBAIC0zMCw3ICszMCw3IEBACiANCiAjaWZkZWYgQ09ORklHX0REUl9aWDI5X01PRFVMRQ0KIA0KLSNkZWZpbmUgRERSX1RFU1RfU0laRQkoMHg4MDAwKS8vMzJrDQorI2RlZmluZSBERFJfVEVTVF9TSVpFCSgweGYwMDApLy8zMmsgDQogDQogZXh0ZXJuIGludCBkZHJfZ2V0X2luZm8oc3RydWN0IGZsYXNoX2Rkcl9pbmZvICppbmZvKTsNCiBleHRlcm4gYm9vbCB6eDI5X2RtYV9maWx0ZXJfZm4oc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpwYXJhbSk7DQpAQCAtNjgsOSArNjgsOSBAQAogCXRlbXBfY29uZmlnLmRlc3RfYWRkcgk9IGRzdF9hZGRyOwkNCiAJdGVtcF9jb25maWcuY291bnQJCT0gc2l6ZTsNCiAJdGVtcF9jb25maWcuZG1hX2NvbnRyb2wudHJhbl9tb2RlIAkJPSBUUkFOX01FTV9UT19NRU07DQotCXRlbXBfY29uZmlnLmRtYV9jb250cm9sLnNyY19idXJzdF9zaXplIAk9IERNQV9CVVJTVF9TSVpFXzhCSVQ7DQorCXRlbXBfY29uZmlnLmRtYV9jb250cm9sLnNyY19idXJzdF9zaXplIAk9IERNQV9CVVJTVF9TSVpFXzY0QklUOw0KIAl0ZW1wX2NvbmZpZy5kbWFfY29udHJvbC5zcmNfYnVyc3RfbGVuIAk9IERNQV9CVVJTVF9MRU5fMTY7DQotCXRlbXBfY29uZmlnLmRtYV9jb250cm9sLmRlc3RfYnVyc3Rfc2l6ZSA9IERNQV9CVVJTVF9TSVpFXzhCSVQ7DQorCXRlbXBfY29uZmlnLmRtYV9jb250cm9sLmRlc3RfYnVyc3Rfc2l6ZSA9IERNQV9CVVJTVF9TSVpFXzY0QklUOw0KIAl0ZW1wX2NvbmZpZy5kbWFfY29udHJvbC5kZXN0X2J1cnN0X2xlbiAJPSBETUFfQlVSU1RfTEVOXzE2Ow0KIAl0ZW1wX2NvbmZpZy5kbWFfY29udHJvbC5pcnFfbW9kZSAJCT0gRE1BX0FMTF9JUlFfRU5BQkxFOw0KIAkNCkBAIC0yMjQsMTcgKzIyNCwyMyBAQAogCQlyZXR1cm4gMTsNCiAJfQ0KIAlkZHIucmVzdWx0ID1yZXN1bHRfaW5mbzsgDQotCWRkci5zaXplID0gc2l6ZTsNCi0JZGRyX2RtYV9jb25maWcoZGRydGVzdF9waHlfYWRkciwgZGRydGVzdF9waHlfYWRkcitzaXplLCBzaXplKTsNCisNCisJaWYoc2l6ZT49MHgxMDAwMCkNCisJCWRkci5zaXplID0gMHhmZmZjOwkNCisJZWxzZQ0KKwkJZGRyLnNpemUgPSBzaXplOw0KKwkNCisJZGRyX2RtYV9jb25maWcoZGRydGVzdF9waHlfYWRkciwgZGRydGVzdF9waHlfYWRkcitzaXplLCBkZHIuc2l6ZSk7DQogCWRkcl9kbWFfc3RhcnQoJmRkciwgbm9uY2FjaGVfZG1hX2NiKTsNCiAJDQogCXdoaWxlKCF6eF9ub25jYWNoZV9kbWFfZmxhZyk7DQogCQ0KLQlmb3IoYWRkcjE9KHVuc2lnbmVkIGludCl2aXJfYWRkcixhZGRyMj0odW5zaWduZWQgaW50KXZpcl9hZGRyK3NpemU7IGFkZHIxPCh1bnNpZ25lZCBpbnQpdmlyX2FkZHIrc2l6ZTsgYWRkcjErPTQsYWRkcjIrPTQpIHsNCisJZm9yKGFkZHIxPSh1bnNpZ25lZCBpbnQpdmlyX2FkZHIsYWRkcjI9KHVuc2lnbmVkIGludCl2aXJfYWRkcitzaXplOyBhZGRyMTwodW5zaWduZWQgaW50KXZpcl9hZGRyK2Rkci5zaXplOyBhZGRyMSs9NCxhZGRyMis9NCkgew0KIAkJaWYoenhfcmVhZF9yZWcoYWRkcjEpICE9IHp4X3JlYWRfcmVnKGFkZHIyKSkgew0KIAkJCQ0KLQkJCXByX2luZm8oImFkZHI6MHgleCBjYWNoZWFibGVfZG1hIGZhaWxlZC4gICAgXG4iLCBhZGRyMSk7DQorCQkJcHJfaW5mbygiYWRkcjoweCV4IG5vbmNhY2hlX2RtYSBmYWlsZWQuICAgIFxuIiwgYWRkcjEpOw0KIAkJCXNwcmludGYocmVzdWx0X2luZm8tPm5vbmNhY2hlX2RtYSwgImFkZHI6MHgleCBub25jYWNoZV9kbWEgZmFpbGVkIiwgYWRkcjEpOw0KKw0KIAkJCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIDIqc2l6ZSwgdmlyX2FkZHIsIGRkcnRlc3RfcGh5X2FkZHIgKTsNCiAJCQlkbWFfcmVsZWFzZV9jaGFubmVsKGRkcnRlc3RfY2hhbik7CQ0KIAkJCXJldHVybiAxOw0KQEAgLTMzMSwxNCArMzM3LDE5IEBACiAJCXJldHVybiAxOw0KIAl9DQogCWRkci5yZXN1bHQgPXJlc3VsdF9pbmZvOyANCi0JZGRyLnNpemUgPSBzaXplOwkNCi0JZGRyX2RtYV9jb25maWcoZGRydGVzdF9waHlfYWRkciwgZGRydGVzdF9waHlfYWRkcitzaXplLCBzaXplKTsNCisNCisJaWYoc2l6ZT49MHgxMDAwMCkNCisJCWRkci5zaXplID0gMHhmZmZjOwkNCisJZWxzZQ0KKwkJZGRyLnNpemUgPSBzaXplOw0KKwkNCisJZGRyX2RtYV9jb25maWcoZGRydGVzdF9waHlfYWRkciwgZGRydGVzdF9waHlfYWRkcitzaXplLCBkZHIuc2l6ZSApOw0KIAlkZHJfZG1hX3N0YXJ0KCZkZHIsIGNhY2hlYWJsZV9kbWFfY2IpOw0KIAkJDQogCXdoaWxlKCF6eF9jYWNoZWFibGVfZG1hX2ZsYWcpOw0KIAkNCiAJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCxkZHJ0ZXN0X3BoeV9hZGRyK3NpemUgLCBzaXplLERNQV9CSURJUkVDVElPTkFMKTsNCi0JZm9yKGFkZHIxPSh1bnNpZ25lZCBpbnQpZGRydGVzdF9idWZmZXIsIGFkZHIyPSh1bnNpZ25lZCBpbnQpZGRydGVzdF9idWZmZXIrc2l6ZTsgYWRkcjE8KHVuc2lnbmVkIGludClkZHJ0ZXN0X2J1ZmZlcitzaXplOyBhZGRyMSs9NCwgYWRkcjIrPTQgKXsNCisJZm9yKGFkZHIxPSh1bnNpZ25lZCBpbnQpZGRydGVzdF9idWZmZXIsIGFkZHIyPSh1bnNpZ25lZCBpbnQpZGRydGVzdF9idWZmZXIrc2l6ZTsgYWRkcjE8KHVuc2lnbmVkIGludClkZHJ0ZXN0X2J1ZmZlcitkZHIuc2l6ZSA7IGFkZHIxKz00LCBhZGRyMis9NCApew0KIAkJaWYoenhfcmVhZF9yZWcoYWRkcjEpICE9IHp4X3JlYWRfcmVnKGFkZHIyKSkgew0KIAkJCQ0KIAkJCXByX2luZm8oImFkZHI6MHgleCBjYWNoZWFibGVfZG1hIGZhaWxlZC4gXG4iLCBhZGRyMSk7DQpAQCAtNDQ0LDE3ICs0NTUsMjIgQEAKIA0KIAl0aW1lMT0gaW9yZWFkMzIoQ0xPQ0tERUxBWV9CQVNFK0NVUl9WQUxVRSk7DQogCWRkci5yZXN1bHQgPXJlc3VsdF9pbmZvOyANCi0JZGRyLnNpemUgPSBzaXplOwkNCisNCisJaWYoc2l6ZT49MHgxMDAwMCkNCisJCWRkci5zaXplID0gMHhmZmZmOwkNCisJZWxzZQ0KKwkJZGRyLnNpemUgPSBzaXplOwkNCisJDQogCWZvcihjbnQ9MDsgY250PDEwMDA7Y250Kyspew0KIAkJLy9hIHRvIGIgDQogCQl6eF9jYWNoZWFibGVfZG1hX2ZsYWc9MDsNCi0JCWRkcl9kbWFfY29uZmlnKGRkcnRlc3RfcGh5X2FkZHIsIGRkcnRlc3RfcGh5X2FkZHIrc2l6ZSwgc2l6ZSk7DQorCQlkZHJfZG1hX2NvbmZpZyhkZHJ0ZXN0X3BoeV9hZGRyLCBkZHJ0ZXN0X3BoeV9hZGRyK3NpemUsIGRkci5zaXplKTsNCiAJCWRkcl9kbWFfc3RhcnQoJmRkcixjYWNoZWFibGVfc3BlZWRfY2IpOw0KIAkJd2hpbGUoIXp4X2NhY2hlYWJsZV9kbWFfZmxhZyk7DQogCQkNCiAJCS8vYiB0byBhDQogCQl6eF9jYWNoZWFibGVfZG1hX2ZsYWc9MDsNCi0JCWRkcl9kbWFfY29uZmlnKGRkcnRlc3RfcGh5X2FkZHIrc2l6ZSwgZGRydGVzdF9waHlfYWRkciwgc2l6ZSk7DQorCQlkZHJfZG1hX2NvbmZpZyhkZHJ0ZXN0X3BoeV9hZGRyK3NpemUsIGRkcnRlc3RfcGh5X2FkZHIsIGRkci5zaXplKTsNCiAJCWRkcl9kbWFfc3RhcnQoJmRkcixjYWNoZWFibGVfc3BlZWRfY2IpOw0KIAkJd2hpbGUoIXp4X2NhY2hlYWJsZV9kbWFfZmxhZyk7DQogCQl6eF9jYWNoZWFibGVfZG1hX2ZsYWc9MDsNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtY3B1aWRsZS5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3Bvd2VyL3p4LWNwdWlkbGUuYwppbmRleCBhMmEzMTU0Li40NzEzOTE2IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvcG93ZXIvengtY3B1aWRsZS5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9wb3dlci96eC1jcHVpZGxlLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogewogCXVuc2lnbmVkIGludCB0ZW1wX2NvdW50OwogCi0JaWYgKGlkbGVfZGVidWdfbWFzayAmIERFQlVHX1dBS0VfTE9DSykgCisJaWYocG1fZ2V0X21hc2tfaW5mbygpJlBNX1NMRUVQX0ZMQUdfUFJJTlQpIC8vaWYgKGlkbGVfZGVidWdfbWFzayAmIERFQlVHX1dBS0VfTE9DSykgCiAJCXBtX2RlYnVnX3dha2Vsb2NrcygpOwogCQogCWlmKHBtX2dldF93YWtldXBfY291bnQoJnRlbXBfY291bnQsIGZhbHNlKSkKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQogCWNsb2NrX2V2ZW50X2hhbmRsZXIoKTsKIAkKLQlwbV9yYW1fbG9nKCIgQEBzbGVlcCBleGl0OnNsZWVwX2NvdW50PSVkLHJlYWxfaWRsZV90aW1lPSVsbGQsamlmZmllczoldVxuIixzbGVlcF9jb3VudCwgaWRsZV90aW1lLCBqaWZmaWVzKTsKKwlwbV9yYW1fbG9nKCIgQEBzbGVlcCBleGl0OnNsZWVwX2NvdW50PSV1LHJlYWxfaWRsZV90aW1lPSVsbGQsamlmZmllczoldVxuIixzbGVlcF9jb3VudCwgaWRsZV90aW1lLCBqaWZmaWVzKTsKIAkKIElSUV9MT0NLX0VYSVQ6CiAJI2lmZGVmIENPTkZJR19aWF9QTV9ERUJVRwpAQCAtNjU4LDcgKzY1OCw3IEBACiAJcHNtX1RpbWVDb21wZW5zYXRlKGlkbGVfdGltZSk7CiAJI2VuZGlmCiAKLQlwbV9yYW1fbG9nKCIgQEBzbGVlcCBleGl0OnNsZWVwX2NvdW50PSVkLHJlYWxfaWRsZV90aW1lPSVsbGQsamlmZmllczoldVxuIixzbGVlcF9jb3VudCwgaWRsZV90aW1lLCBqaWZmaWVzKTsKKwlwbV9yYW1fbG9nKCIgQEBzbGVlcCBleGl0OnNsZWVwX2NvdW50PSV1LHJlYWxfaWRsZV90aW1lPSVsbGQsamlmZmllczoldVxuIixzbGVlcF9jb3VudCwgaWRsZV90aW1lLCBqaWZmaWVzKTsKIAogCSNpZmRlZiBDT05GSUdfWlhfUkFNX0NPTlNPTEUgCiAJcG1fdWFydF9tb2RfdGltZXIoKTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS9wb3dlci96eC1wbS5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3Bvd2VyL3p4LXBtLmMKaW5kZXggOGE3MzFmMS4uOTNlN2Q0ZiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3Bvd2VyL3p4LXBtLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3Bvd2VyL3p4LXBtLmMKQEAgLTI1OCw2ICsyNTgsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocG1fcHNtX2ZsYWdfcHJpbnQpOwogCit2b2lkIHBtX2NwcHNtc2xlZXB0aW1lX3ByaW50KHUzMiBnc21fc2xlZXRpbWUsIHUzMiBwc19zbGVldGltZSkKK3sKKwkjaWZkZWYgQ09ORklHX0NQVV9JRExFCisJI2lmbmRlZiBDT05GSUdfQVJDSF9aWDI5NzUyMFYzX0NBUAorCXByaW50aygiXG4gZ3Ntc2xlZXA6ICV1OyAgcHNzbGVlcDoldSBcbiAiLCBnc21fc2xlZXRpbWUsIHBzX3NsZWV0aW1lKTsJCisJI2VuZGlmCisJI2VuZGlmCit9CitFWFBPUlRfU1lNQk9MKHBtX2NwcHNtc2xlZXB0aW1lX3ByaW50KTsKKwogdTMyIHByaW50X2NudD0wOwogCiB2b2lkIHBtX2lkbGVfc3JhbV9wcmludCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2Mtc3RyYXRlZ3kuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLXN0cmF0ZWd5LmMKaW5kZXggNWIwNTY4Zi4uYmY5MGIwYiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2Mtc3RyYXRlZ3kuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy1zdHJhdGVneS5jCkBAIC0yOCwxMSArMjgsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGVzDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi10eXBlZGVmIHN0cnVjdCBfVF9Uc2NQaHlfU3RyYXRlZ3kNCi17DQotCWNoYXIgbmFtZVszMl07DQotCXZvbGF0aWxlIHUzMiBmbGFnOw0KLX1UX1RzY1BfU3RyYXRlZ3k7DQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsIFZhcmlhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKg0KQEAgLTQzLDcgKzM4LDcgQEAKIDE6IGltaXRlIHJhdGUg1sHJ2beiyfq5/dK7tM47DQogMDogbGltaXRlIHJhdGXDu9PQt6LJ+rn9DQogKi8NCi1zdGF0aWMgIHZvbGF0aWxlIHUzMiBwc19yYXRlX2ZsYWc9MDsNCisvL3N0YXRpYyAgdm9sYXRpbGUgdTMyIHBzX3JhdGVfZmxhZz0wOw0KIC8qDQogtffTw9Ct0unVu7vYtffHsM/IvOyy4rLfwtTKx7fx1rTQ0Ln9DQog1Nq3otX9s6PXpMH0tOvKqdaux7CjrM/IvOyy4taux7C1xNe0zKzKx7K7ysdhbnkgcmVzaWRlbnQNCkBAIC01Miw3ICs0Nyw3IEBACiAxOiBhbnkgcmVzaWRlbnQg1sHJ2beiyfq5/dK7tM47DQogMDogYW55IHJlc2lkZW50IMO709C3osn6uf0NCiAqLw0KLXN0YXRpYyAgdm9sYXRpbGUgdTMyIGFueV9yZXNpZGVudF9mbGFnPTA7DQorLy9zdGF0aWMgIHZvbGF0aWxlIHUzMiBhbnlfcmVzaWRlbnRfZmxhZz0wOw0KIA0KIC8qDQogtffTw7X3xrXKx7fx1rTQ0Ln9DQpAQCAtNjAsNyArNTUsNyBAQAogMTogdHNjIGRmcyDWwcnZt6LJ+rn90ru0zjsNCiAwOiB0c2MgZGZzIMO709C3osn6uf0NCiAqLw0KLXN0YXRpYyAgdm9sYXRpbGUgdTMyIHBzX2ZyZXFfZmxhZz0wOw0KKy8vc3RhdGljICB2b2xhdGlsZSB1MzIgcHNfZnJlcV9mbGFnPTA7DQogDQogc3RydWN0IHRpbWVyX2xpc3QgdGltZXJfdHNjdHJsOw0KIHN0YXRpYyBpbnQgdGVtcF9wZXJjZW50ID0gMDsNCkBAIC03MCwxNyArNjUsMjIgQEAKIHR5cGVkZWYgdm9pZCAoKlRfUHJvYmVfU3RyYXRlZ3kpKHUzMiBwcm9iZV9udW0saW50IHRlbXBlcmF0dXJlICk7DQogVF9Qcm9iZV9TdHJhdGVneSBnX3Byb2JlX3N0cmF0ZWd5W1BST0JFX01BWF09ezAsfTsNCiANCi1UX1RzY1BfU3RyYXRlZ3kgZ19waHlfU3RyYXRlZ3lbU1RSQVRFR1lfUEhZX05VTV09ew0KLQl7Imx0ZSBkb3ducmF0ZTEiLCAgIDB9LA0KLQl7Imx0ZSBkb3ducmF0ZTIiLCAgIDB9LA0KLQl7IncgZG93bnJhdGUxIiwgICAgMH0sDQotCXsidyBkb3ducmF0ZTIiLCAgICAwfSwNCi0JeyJsdGUgdXBfdGFuc21pdGVwb3dlcjEiLCAgMH0sDQotCXsibHRlIHVwX3RhbnNtaXRlcG93ZXIyIiwgIDB9LA0KLQl7IncgdXBfdGFuc21pdGVwb3dlcjEiLCAgMH0sDQotCXsidyB1cF90YW5zbWl0ZXBvd2VyMiIsICAwfSwNCitUX1RzY1BfU3RyYXRlZ3kgZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19OVU1dPXsNCisJeyJwcyBhbnlyZXNpZGVudDogIiwgICAwfSwNCisJeyJwcyByYXRlIGxpbWl0OiAiLCAgIDB9LA0KKwl7InBzIGZyZXEgMzEyTTogIiwgICAwfSwNCiB9Ow0KIA0KK1RfVHNjUF9TdHJhdGVneSBnX3BoeV9TdHJhdGVneVtTVFJBVEVHWV9QSFlfTlVNXT17DQorCXsibHRlIGRvd25yYXRlMSBsaW1pdDogIiwgICAwfSwNCisJeyJsdGUgZG93bnJhdGUyIGxpbWl0OiAiLCAgIDB9LA0KKwl7IncgZG93bnJhdGUxIGxpbWl0OiAiLCAgICAwfSwNCisJeyJ3IGRvd25yYXRlMiBsaW1pdDogIiwgICAgMH0sDQorCXsibHRlIHVwX3RhbnNtaXRlcG93ZXIxIGxpbWl0OiAiLCAgMH0sDQorCXsibHRlIHVwX3RhbnNtaXRlcG93ZXIyIGxpbWl0OiAiLCAgMH0sDQorCXsidyB1cF90YW5zbWl0ZXBvd2VyMSBsaW1pdDogIiwgIDB9LA0KKwl7IncgdXBfdGFuc21pdGVwb3dlcjIgbGltaXQ6ICIsICAwfSwNCit9Ow0KIA0KIHU4IGdfYml0X3Byb2JlW1BST0JFX01BWF09ew0KIAlCSVRfUFJPQkVfQURDMSwNCkBAIC01OTEsMzIgKzU5MSwzNSBAQAogCQkJLypVU0VSKi8NCiAJCQlpZih0c2NfcmVhZF9yZWcoVFNDVFJMX1NIVVRET1dOKSE9MCl7DQogCQkJCS8qdXNlciBzdHJhdGVneSBzdGFydCovDQorCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX0FQLEJJVF9TSFVURE9XTixCSVRTX0ZPUl9BUFBJUkFNLFNUUlRFR1lfU1RBUlQpOwkJCQ0KKwkJCQkNCiAJCQkJaWYoZ190c2NfcHJpbnRfbG9nX2RlYnVnKQ0KIAkJCQkJdHNjX3ByaW50X2xvZygidXNlciBzdHJhdGVneSBzdGFydCByZXNlcnZlIFxuIikNCiAJCQl9DQogCQkJZWxzZXsNCiAJCQkJLy90c2NfcHJpbnRfbG9nKCJ1c2VyIHN0cmF0ZWd5IHN0b3AgcmVzZXJ2ZSBcbiIpDQorCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX0FQLEJJVF9TSFVURE9XTixCSVRTX0ZPUl9BUFBJUkFNLFNUUlRFR1lfU1RPUCk7CQkJCQkJDQogCQkJfQ0KIAkJfQ0KIAkJCQ0KIAkJLypQU19BTllSRVNJREVOVCovDQogCQlpZih0c2NfcmVhZF9yZWcoVFNDVFJMX1BTX0FOWVJFU0lERU5UKT09MCl7DQotCQkJaWYoYW55X3Jlc2lkZW50X2ZsYWcpew0KKwkJCWlmKGdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfQU5ZUkVTSURFTlRdLmZsYWcpew0KIAkJCQl0c2N0cmxfY2FsbGJhY2tfZGlzcGF0Y2goUFNfU1RSQVRFR1lfQU5ZUkVTSURFTlQsZmFsc2UpOyAvKsilyM7S4tekwfQs0rK+zcrH1f2zo9ekwfQqLw0KIAkJCQl0c2Nfc2V0X3JlZ19iaXRzKFRTQ1RSTF9QUyxCSVRfUFNfQU5ZUkVTSURFTlQsQklUU19GT1JfUFNJUkFNLGZhbHNlKTsNCiAJCQkJdHNjdHJsX3ByaW50X3RlbXAoKTsNCiAJCQkJc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgIkFueVJlc2lkZW50IHN0b3BcbiIpOw0KIAkJCQl0c2NfcHJpbnRfbG9nKCJBbnlSZXNpZGVudCAgc3RvcCFcbiIpOw0KLQkJCQlhbnlfcmVzaWRlbnRfZmxhZz0wOw0KKwkJCQlnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX0FOWVJFU0lERU5UXS5mbGFnPTA7DQogCQkJfQ0KIAkJfWVsc2V7CQkNCi0JCQlpZighYW55X3Jlc2lkZW50X2ZsYWcpew0KKwkJCWlmKCFnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX0FOWVJFU0lERU5UXS5mbGFnKXsNCiAJCQkJdHNjdHJsX2NhbGxiYWNrX2Rpc3BhdGNoKFBTX1NUUkFURUdZX0FOWVJFU0lERU5ULHRydWUpOy8qyM7S4tekwfQqLw0KIAkJCQl0c2Nfc2V0X3JlZ19iaXRzKFRTQ1RSTF9QUyxCSVRfUFNfQU5ZUkVTSURFTlQsQklUU19GT1JfUFNJUkFNLHRydWUpOw0KIAkJCQl0c2N0cmxfcHJpbnRfdGVtcCgpOw0KIAkJCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfVFNDLCAiQW55UmVzaWRlbnQgc3RhcnQhXG4iKTsNCiAJCQkJdHNjX3ByaW50X2xvZygiQW55UmVzaWRlbnQgIHN0YXJ0IVxuIik7DQotCQkJCWFueV9yZXNpZGVudF9mbGFnPTE7DQorCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfQU5ZUkVTSURFTlRdLmZsYWc9MTsNCiAJCQl9DQogCQl9DQogCQkNCkBAIC02NTEsMzMgKzY1NCwzMyBAQAogCQlpZihUc052RGF0YS5Nb2RlbXJhdGVfRW4gPT0gMHhCMikgew0KIAkJCS8v0K3S6dW7y9nCyrLfwtQNCiAJCQlpZih0c2NfcmVhZF9yZWcoVFNDVFJMX1BTX1JBVEUpPT0wKXsNCi0JCQkJaWYocHNfcmF0ZV9mbGFnIT0wKXsNCisJCQkJaWYoZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19SQVRFXS5mbGFnIT0wKXsNCiAJCQkJCXRzY3RybF9jYWxsYmFja19kaXNwYXRjaChQU19TVFJBVEVHWV9SQVRFLFNUUlRFR1lfU1RPUCk7Ly9TVE9QCQkNCiAJCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX1BTLEJJVF9QU19SQVRFLEJJVFNfRk9SX1BTSVJBTSxTVFJURUdZX1NUT1ApOw0KIAkJCQkJdHNjdHJsX3ByaW50X3RlbXAoKTsNCiAJCQkJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJwcyBtb2RlbSByYXRlIGxpbWl0ICBzdG9wIVxuIik7DQogCQkJCQl0c2NfcHJpbnRfbG9nKCJwcyBtb2RlbSByYXRlIGxpbWl0ICBzdG9wIVxuIik7DQotCQkJCQlwc19yYXRlX2ZsYWc9MDsNCisJCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfUkFURV0uZmxhZz0wOw0KIAkJCQl9DQogCQkJfQ0KIAkJCWVsc2UgaWYoKCh0c2NfcmVhZF9yZWcoVFNDVFJMX1BTX1JBVEUpJjB4MTAwMCk9PTB4MTAwMCl8fCgodHNjX3JlYWRfcmVnKFRTQ1RSTF9QU19SQVRFKSYweDAxMDApPT0weDAxMDApfHwoKHRzY19yZWFkX3JlZyhUU0NUUkxfUFNfUkFURSkmMHgwMDEwKT09MHgwMDEwKXx8KCh0c2NfcmVhZF9yZWcoVFNDVFJMX1BTX1JBVEUpJjB4MDAwMSk9PTB4MDAwMSkpDQogCQkJewkJDQotCQkJCWlmKHBzX3JhdGVfZmxhZyE9MSl7DQorCQkJCWlmKGdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfUkFURV0uZmxhZyE9MSl7DQogCQkJCQl0c2N0cmxfY2FsbGJhY2tfZGlzcGF0Y2goUFNfU1RSQVRFR1lfUkFURSxTVFJURUdZX1NUQVJUKTsvL1NUQVJUCQkNCiAJCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX1BTLEJJVF9QU19SQVRFLEJJVFNfRk9SX1BTSVJBTSxTVFJURUdZX1NUQVJUKTsNCiAJCQkJCXRzY3RybF9wcmludF90ZW1wKCk7DQogCQkJCQlzY19kZWJ1Z19pbmZvX3JlY29yZChNT0RVTEVfSURfQVBfVFNDLCAicHMgbW9kZW0gcmF0ZSBsaW1pdCAgc3RhcnQhXG4iKTsNCiAJCQkJCXRzY19wcmludF9sb2coInBzIG1vZGVtIHJhdGUgbGltaXQgIHN0YXJ0IVxuIik7DQotCQkJCQlwc19yYXRlX2ZsYWc9MTsNCisJCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfUkFURV0uZmxhZz0xOw0KIAkJCQl9DQogCQkJfWVsc2V7CQ0KLQkJCQlpZihwc19yYXRlX2ZsYWchPTIpew0KKwkJCQlpZihnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX1JBVEVdLmZsYWchPTIpew0KIAkJCQkJdHNjdHJsX2NhbGxiYWNrX2Rpc3BhdGNoKFBTX1NUUkFURUdZX1JBVEUsU1RSVEVHWV9IT0xEKTsvL0hPTEQJCQkNCiAJCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX1BTLEJJVF9QU19SQVRFLEJJVFNfRk9SX1BTSVJBTSxTVFJURUdZX0hPTEQpOw0KIAkJCQkJdHNjdHJsX3ByaW50X3RlbXAoKTsNCiAJCQkJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJwcyBtb2RlbSByYXRlIGxpbWl0ICBob2xkIVxuIik7DQogCQkJCQl0c2NfcHJpbnRfbG9nKCJwcyBtb2RlbSByYXRlIGxpbWl0ICBob2xkIVxuIik7DQotCQkJCQlwc19yYXRlX2ZsYWc9MjsNCisJCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfUkFURV0uZmxhZz0yOw0KIAkJCQl9DQogCQkJfQ0KIAkJCQ0KQEAgLTczNiw3ICs3MzksNyBAQAogCQkJLy90c2NfcHJpbnRfbG9nKCJDUFVfRlJFOnp4X2dldHNwZWVkKDApPSVkXG4iLHp4X2dldHNwZWVkKDApKTsNCiANCiAJCQlpZih0c2NfcmVhZF9yZWcoVFNDVFJMX0RGUyk9PTApew0KLQkJCQlpZihwc19mcmVxX2ZsYWcpew0KKwkJCQlpZihnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX0RGU10uZmxhZyl7DQogCQkJCQkvL3RzY19wcmludF9sb2coIkNQVV9GUkVRMDp6eF9nZXRzcGVlZCgwKT0lZFxuIix6eF9nZXRzcGVlZCgwKSk7DQogLy8JCQkJCWlmKHp4X2dldHNwZWVkKDApICE9IDYyNDAwMCApDQogLy8JCQkJCQl6eDI5X3NldF9mcmVxdWVuY3koMSwwKTsgLy96RHJ2UG93X1NldEFybVBzQ29yZUZyZXEoQ0xLNjI0TSk7DQpAQCAtNzQ2LDEwICs3NDksMTAgQEAKIAkJCQkJdHNjdHJsX3ByaW50X3RlbXAoKTsNCiAJCQkJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJwcyBmcmVxIDYyNE0gc3RhcnRcbiIgKTsNCiAJCQkJCXRzY19wcmludF9sb2coInBzIGZyZXEgNjI0TSBzdGFydFxuIik7DQotCQkJCQlwc19mcmVxX2ZsYWc9MDsNCisJCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfREZTXS5mbGFnPTA7DQogCQkJCX0JDQogCQkJfWVsc2V7DQotCQkJCWlmKCFwc19mcmVxX2ZsYWcpew0KKwkJCQlpZighZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19ERlNdLmZsYWcpew0KIAkJCQkJLy90c2NfcHJpbnRfbG9nKCJDUFVfRlJFUTE6enhfZ2V0c3BlZWQoMCk9JWRcbiIsenhfZ2V0c3BlZWQoMCkpOwkNCiAJCQkJCS8vengyOV9zZXRfZnJlcXVlbmN5KDAsMSk7IC8vekRydlBvd19TZXRBcm1Qc0NvcmVGcmVxKENMSzMxMk0pOw0KIAkJCQkJY3B1ZnJlcV9wb3dlcnNhdmUoKTsNCkBAIC03NTcsNyArNzYwLDcgQEAKIAkJCQkJdHNjdHJsX3ByaW50X3RlbXAoKTsNCiAJCQkJCXNjX2RlYnVnX2luZm9fcmVjb3JkKE1PRFVMRV9JRF9BUF9UU0MsICJwcyBmcmVxIDMxMk0gc3RhcnRcbiIgKTsNCiAJCQkJCXRzY19wcmludF9sb2coInBzIGZyZXEgMzEyTSBzdGFydFxuIik7DQotCQkJCQlwc19mcmVxX2ZsYWc9MTsNCisJCQkJCWdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfREZTXS5mbGFnPTE7DQogCQkJCX0NCiAJCQl9CQ0KIAkJCSNlbmRpZg0KQEAgLTc3MiwxOCArNzc1LDI3IEBACiAJew0KIAkJaWYoVHNOdkRhdGEuTW9kZW1yYXRlX0VuID09IDB4QjIpew0KIAkJCSAvKnN0b3AgcHMgy/nT0LLfwtQqLyANCi0JCQlpZihwc19yYXRlX2ZsYWchPTApew0KKwkJCWlmKGdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfUkFURV0uZmxhZyE9MCl7DQogCQkJCXRzY3RybF9jYWxsYmFja19kaXNwYXRjaChQU19TVFJBVEVHWV9SQVRFLFNUUlRFR1lfU1RPUCk7Ly9TVE9QDQogCQkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX1BTLEJJVF9QU19SQVRFLEJJVFNfRk9SX1BTSVJBTSxTVFJURUdZX1NUT1ApOw0KLQkJCQlwc19yYXRlX2ZsYWc9MDsNCisJCQkJZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19SQVRFXS5mbGFnPTA7DQogCQkJfQ0KIAkJfQ0KIAkJDQotCQlpZihhbnlfcmVzaWRlbnRfZmxhZyl7DQorCQlpZihnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX0FOWVJFU0lERU5UXS5mbGFnKXsNCiAJCQl0c2N0cmxfY2FsbGJhY2tfZGlzcGF0Y2goUFNfU1RSQVRFR1lfQU5ZUkVTSURFTlQsZmFsc2UpOyAvKsilyM7S4tekwfQs0rK+zcrH1f2zo9ekwfQqLw0KIAkJCXRzY19zZXRfcmVnX2JpdHMoVFNDVFJMX1BTLEJJVF9QU19BTllSRVNJREVOVCxCSVRTX0ZPUl9QU0lSQU0sZmFsc2UpOw0KLQkJCWFueV9yZXNpZGVudF9mbGFnPTA7DQorCQkJZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19BTllSRVNJREVOVF0uZmxhZz0wOw0KIAkJfQ0KKwkJDQorCQlpZihUc052RGF0YS5EZnNfRW4gPT0gMHhCMikgew0KKwkJCWlmKGdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfREZTXS5mbGFnKXsNCisJCQkJdHNjX3NldF9yZWdfYml0cyhUU0NUUkxfUFMsQklUX1BTX0ZSRVEsQklUU19GT1JfUFNJUkFNLGZhbHNlKTsNCisJCQkJY3B1ZnJlcV9ub3JtYWwoKTsNCisJCQkJZ19wc19TdHJhdGVneVtTVFJBVEVHWV9QU19ERlNdLmZsYWc9MDsNCisJCQl9CQkNCisJCX0NCisJCQ0KIAkJLy9zdG9wIFdJRkkgvbXL2SANCiAJCWlmKFRzTnZEYXRhLldpZmlfUmF0ZUxtaXRlX0VuID09IDB4QjIpew0KIAkJCXRzY3RybF9jYWxsYmFja19kaXNwYXRjaChXSUZJX1NUUkFURUdZLFNUUlRFR1lfU1RPUCk7Ly9TVE9QCQkNCkBAIC03OTgsNiArODEwLDcgQEAKIAkJLy9zdG9wIM7vwO2y48v509Cy38LUDQogCQlmb3IoaT0wO2k8U1RSQVRFR1lfUEhZX05VTTtpKyspewkJDQogCQkJdHNjX3NldF9yZWdfYml0cyhUU0NUUkxfUEhZLChCSVRfTElNSVRfTFRFX0RPV05SQVRFMStpKSxCSVRTX0ZPUl9QSFlJUkFNLFNUUlRFR1lfU1RPUCk7DQorCQkJZ19waHlfU3RyYXRlZ3lbaV0uZmxhZz0wOw0KIAkJfSANCiANCiAJCS8vc2NfZGVidWdfaW5mb19yZWNvcmQoTU9EVUxFX0lEX0FQX1RTQywgImNsb3NlIGFsbCBzdHJhdGVneSFcbiIpOw0KQEAgLTk0Nyw3ICs5NjAsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIHUzMiB6RHJ2VHNDdHJsX0Rmc0VuKHZvaWQpDQogew0KLQlpZihwc19mcmVxX2ZsYWcpDQorCWlmKGdfcHNfU3RyYXRlZ3lbU1RSQVRFR1lfUFNfREZTXS5mbGFnKQ0KIAkJcmV0dXJuIDE7DQogCWVsc2UNCiAJCXJldHVybiAwOw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5jCmluZGV4IDMzZGVlYmMuLjVkM2JiYmEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuYwpAQCAtMjUsNiArMjUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9jcF90eXBlcy5oPg0KICNpbmNsdWRlICJOdlBhcmFtX2Rydi5oIg0KICNpbmNsdWRlICJwdWJfZGVidWdfaW5mby5oIg0KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CS8qIEZvciBoYW5kbGluZyBtaXNjIGRldmljZXMgKi8NCisjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIEZvciBmaWxlIG9wZXJhdGlvbnMgKi8NCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPi8qRm9yIHN5c19vcGVuIG9wZXJhdGlvbiovDQorDQogDQogI2lmZGVmIFJGQ19EQ1hPX0VOIC8vamluZ3RpDQogI2RlZmluZSBJUkFNX1RFTVBDT01QX0RBQyAoSVJBTV9CQVNFX0FERFJfU0xBVkVfQUZDKzB4OCkgIC8vaGlnaDE2Yml0OiB0aGUgQURDIHZhbHVlIG9mIHRlbXAJDQpAQCAtNzAsNiArNzUsOCBAQAogDQogZXh0ZXJuIGludCB0c190ZW1wX3ZhbHVlX3RhYmxlW1RTX0FEQ19URU1QX05VTUJFUl1bVFNfQURDX1RFTVBfVk9MVEFHRV9OVU1CRVJdOw0KIGV4dGVybiB2b2xhdGlsZSB1MzIgdHNfYWRjX2ZsYWc7DQorZXh0ZXJuIFRfVHNjUF9TdHJhdGVneSBnX3BzX1N0cmF0ZWd5W1NUUkFURUdZX1BTX05VTV07DQorZXh0ZXJuIFRfVHNjUF9TdHJhdGVneSBnX3BoeV9TdHJhdGVneVtTVFJBVEVHWV9QSFlfTlVNXTsNCiANCiBpbnQgIHRzX3RlbXBfdmFsdWVfdGFibGVSZmRbVFNfQURDX1RFTVBfTlVNQkVSXVtUU19BRENfVEVNUF9WT0xUQUdFX05VTUJFUl09ew0KIHsNCkBAIC0yNTYsNiArMjYzLDQyIEBACiAgfQ0KICANCiAgenRlX3RzY19hdHRyKHRzY192YWx1ZSk7DQorDQorICBzdGF0aWMgc3NpemVfdCB0c2Nfc3RyYXRlZ3lfc3RhdHVzX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwNCisJCQkgICBjaGFyICpidWYpDQorIHsNCisJIGNoYXIgKnMgPSBidWY7DQorCSB1bnNpZ25lZCBpbnQgaTsNCisJIGludCByZXQsIHNpemUgPSAwOw0KKwkgDQorCWZvcihpPTA7IGk8U1RSQVRFR1lfUFNfTlVNO2krKyl7DQorCQlyZXQgPSBzcHJpbnRmKHMsICIlcyIsIGdfcHNfU3RyYXRlZ3lbaV0ubmFtZSk7DQorCQlzaXplICs9IHJldDsNCisJCXMgKz0gcmV0Ow0KKwkJcmV0ID0gc3ByaW50ZihzLCAiJWRcbiIsIGdfcHNfU3RyYXRlZ3lbaV0uZmxhZyk7DQorCQlzaXplICs9IHJldDsNCisJCXMgKz0gcmV0Ow0KKwl9DQorCWZvcihpPTA7IGk8U1RSQVRFR1lfUEhZX05VTTtpKyspew0KKwkJcmV0ID0gc3ByaW50ZihzLCAiJXMiLCBnX3BoeV9TdHJhdGVneVtpXS5uYW1lKTsNCisJCXNpemUgKz0gcmV0Ow0KKwkJcyArPSByZXQ7DQorCQlyZXQgPSBzcHJpbnRmKHMsICIlZFxuIiwgZ19waHlfU3RyYXRlZ3lbaV0uZmxhZyk7DQorCQlzaXplICs9IHJldDsNCisJCXMgKz0gcmV0Ow0KKwl9CQ0KKwlyZXR1cm4gc2l6ZTsNCit9DQorIA0KKyBzdGF0aWMgc3NpemVfdCB0c2Nfc3RyYXRlZ3lfc3RhdHVzX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsDQorCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pDQorIHsNCisJIGludCBlcnJvciA9IDA7DQorCSByZXR1cm4gZXJyb3I7DQorIH0NCisgDQorIHp0ZV90c2NfYXR0cih0c2Nfc3RyYXRlZ3lfc3RhdHVzKTsNCisgDQogIA0KIA0KICAgc3RhdGljIHNzaXplX3QgdHNjX3ByaW50X2xvZ19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsDQpAQCAtMjkyLDYgKzMzNSw3IEBACiAJICZ0c2NfcGVyY2VudF9hdHRyLmF0dHIsDQogCSAmdHNjX3B0c2NDdHJsRW5fYXR0ci5hdHRyLA0KIAkgJnRzY19wcmludF9sb2dfYXR0ci5hdHRyLA0KKwkgJnRzY19zdHJhdGVneV9zdGF0dXNfYXR0ci5hdHRyLA0KIAkgDQogCSBOVUxMLA0KICB9Ow0KQEAgLTMwMSw3ICszNDUsOTMgQEAKIAkgLmF0dHJzID0gZywNCiAgfTsNCiANCi0jaWYgMQ0KKyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiBGdW5jdGlvbjoNCisgKiBEZXNjcmlwdGlvbjogDQorICogUGFyYW1ldGVyczogDQorICogUmV0dXJuczogDQorICogT3RoZXJzOg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCisNCisgc3RhdGljIGludCB6eF90c2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCXJldHVybiAwOyANCit9DQorDQorc3RhdGljIGludCB6eF90c2NfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlyZXR1cm4gMDsNCit9DQorc3RhdGljIGxvbmcgenhfdHNjX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykNCit7DQorCWludCByZXQ9MDsNCisJdTggdGhyZXNoW1RIUkVTSE9MRF9OVU0rMV09ezB9Ow0KKwkNCisJc3dpdGNoKGNtZCkNCisJew0KKwkJY2FzZSBaWF9UU0NfU0VUX1RIUkVTSE9MRDoNCisJCQlyZXQ9IGNvcHlfZnJvbV91c2VyKHRocmVzaCwgKHU4KilhcmcsIHNpemVvZih0aHJlc2gpKTsNCisJCQlpZihyZXQpDQorCQkJCXByaW50aygienhfdHNjX2lvY3RsIGNvcHlfZnJvbV91c2VyIHJldD0lZFxuIiwgcmV0KTsNCisJCQkNCisJCQlpZih0aHJlc2hbMF0gPj0gUFJPQkVfTUFYKXsNCisJCQkJcHJpbnRrKCJzZXQgZXJyb3IgcHJvYmUgbnVtXG4iKTsNCisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisJCQltZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikoJlRzTnZEYXRhLlRocmVzaG9kc1t0aHJlc2hbMF1dKSwgdGhyZXNoKzEsIFRIUkVTSE9MRF9OVU0qc2l6ZW9mKHU4KSk7DQorCQkJbWVtY3B5KCh2b2lkKilUU0NUUkxfSVJBTV9OViwgJlRzTnZEYXRhLCBzaXplb2YoVHNOdkRhdGEpKTsJDQorCQkJYnJlYWs7DQorCQkJDQorCQljYXNlIFpYX1RTQ19HRVRfVEhSRVNIT0xEOg0KKwkJCXJldD0gY29weV9mcm9tX3VzZXIodGhyZXNoLCAodTgqKWFyZywgc2l6ZW9mKHRocmVzaCkpOw0KKwkJCWlmKHJldCkNCisJCQkJcHJpbnRrKCJ6eF90c2NfaW9jdGwgY29weV9mcm9tX3VzZXIgcmV0MT0lZFxuIiwgcmV0KTsNCisJCQkNCisJCQlpZih0aHJlc2hbMF0gPj0gUFJPQkVfTUFYKXsNCisJCQkJcHJpbnRrKCJnZXQgZXJyb3IgcHJvYmUgbnVtXG4iKTsNCisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisJCQkJCQkNCisJCQlyZXQ9IGNvcHlfdG9fdXNlcigodTgqKWFyZysxLCAodW5zaWduZWQgY2hhciAqKSgmVHNOdkRhdGEuVGhyZXNob2RzW3RocmVzaFswXV0pLCBUSFJFU0hPTERfTlVNKnNpemVvZih1OCkpOw0KKwkJCWlmKHJldCkNCisJCQkJcHJpbnRrKCJ6eF90c2NfaW9jdGwgY29weV90b191c2VyIHJldD0lZFxuIiwgcmV0KTsJCQkNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgWlhfVFNDX1NFVF9ERUNURVRfRU46DQorCQkJcmV0PSBjb3B5X2Zyb21fdXNlcigmVHNOdkRhdGEuRGV0ZWN0RW4sICh1OCopYXJnLCBzaXplb2YodTgpKTsNCisJCQlpZihyZXQpDQorCQkJCXByaW50aygienhfdHNjX2lvY3RsIGNvcHlfZnJvbV91c2VyIHJldD0lZFxuIiwgcmV0KTsNCisJCQkNCisJCQltZW1jcHkoKHZvaWQqKVRTQ1RSTF9JUkFNX05WLCAmVHNOdkRhdGEsIHNpemVvZihUc052RGF0YSkpOw0KKwkJCXRzY19zZXRfZGV0ZWN0X2VuKFRzTnZEYXRhLkRldGVjdEVuKTsNCisJCQlicmVhazsNCisJCQkNCisJCWNhc2UgWlhfVFNDX0dFVF9ERUNURVRfRU46CQkJDQorCQkJcmV0PSBjb3B5X3RvX3VzZXIoKHU4KilhcmcsICh1bnNpZ25lZCBjaGFyICopJlRzTnZEYXRhLkRldGVjdEVuLCBzaXplb2YodTgpKTsNCisJCQlpZihyZXQpDQorCQkJCXByaW50aygienhfdHNjX2lvY3RsIGNvcHlfdG9fdXNlciByZXQ9JWRcbiIsIHJldCk7CQkJDQorCQkJYnJlYWs7DQorCQkJDQorCQlkZWZhdWx0Og0KKwkJCWJyZWFrOwkJDQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHp4X3RzY19mb3BzID0gew0KKwkub3duZXIJCT0gVEhJU19NT0RVTEUsDQorCS51bmxvY2tlZF9pb2N0bAk9IHp4X3RzY19pb2N0bCwNCisJLm9wZW4JCT0genhfdHNjX29wZW4sDQorCS5yZWxlYXNlCT0genhfdHNjX2Nsb3NlLA0KK307DQorDQorc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHp4X3RzY19taXNjZGV2ID0gew0KKwkubWlub3IJCT0gTUlTQ19EWU5BTUlDX01JTk9SLA0KKwkubmFtZQkJPSAienhfdHNjIiwNCisJLmZvcHMJCT0gJnp4X3RzY19mb3BzLA0KK307DQorDQogDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogRnVuY3Rpb246DQpAQCAtNjI2LDYgKzc1Niw4IEBACiAJCVRzTnZEYXRhLlRocmVzaG9kc1tQUk9CRV9BRENSRl0uVEhST1NIT0xEXzMsVHNOdkRhdGEuVGhyZXNob2RzW1BST0JFX0FEQ1JGXS5USFJPU0hPTERfNCxUc052RGF0YS5UaHJlc2hvZHNbUFJPQkVfQURDUkZdLlRIUk9TSE9MRF81LFwNCiAJCVRzTnZEYXRhLlRocmVzaG9kc1tQUk9CRV9BRENSRl0uVEhST1NIT0xEXzYsVHNOdkRhdGEuVGhyZXNob2RzW1BST0JFX0FEQ1JGXS5USFJPU0hPTERfNyxcDQogCQlUc052RGF0YS5UaHJlc2hvZHNbUFJPQkVfQURDUkZdLlRIUk9TSE9MRF84LFRzTnZEYXRhLlRocmVzaG9kc1tQUk9CRV9BRENSRl0uVEhST1NIT0xEXzkpOw0KKw0KKwltZW1jcHkoKHZvaWQqKVRTQ1RSTF9JUkFNX05WLCAmVHNOdkRhdGEsIHNpemVvZihUc052RGF0YSkpOw0KIAkNCiAgICAgaWYoVHNOdkRhdGEuRGV0ZWN0RW4gIT0gMHhCMil7DQogCQl6RHJ2VHNjX1NldFRzY0VuKDApOy8vbmVlZAkJDQpAQCAtNjQ0LDYgKzc3NiwxMiBAQAogCQl9DQogIC8vICAgfQ0KIA0KKyAJcmV0ID0gbWlzY19yZWdpc3RlcigmenhfdHNjX21pc2NkZXYpOw0KKwlpZiAocmV0ICE9IDApIHsNCisJCXByaW50ayhLRVJOX0VSUiJ0c2MgY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24oZXJyPSVkKVxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCiAJcHJpbnRrKCJ6eF90c2NfaW5pdCAgZW5kLlxuIik7DQogIA0KIAkgcmV0dXJuIDA7DQpAQCAtNzE1LDQgKzg1MywzIEBACiB9DQogRVhQT1JUX1NZTUJPTCh6RHJ2VHNjX0dldFRzY0VuKTsNCiANCi0jZW5kaWYNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zb2MvenRlL3RzYy96eC10c2MuaAppbmRleCA2Yzc4YzU5Li5jYWQxMjU0IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3NvYy96dGUvdHNjL3p4LXRzYy5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc29jL3p0ZS90c2MvengtdHNjLmgKQEAgLTEyLDYgKzEyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBmaWxlcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02OCwxNiArNjksNDMgQEAKIAlTVFJURUdZX01BWCwKICB9IFRzX1RzQ3RybFN0cmF0ZWd5OyAKIAordHlwZWRlZiBzdHJ1Y3QgX1RfVHNjUGh5X1N0cmF0ZWd5Cit7CisJY2hhciBuYW1lWzMyXTsKKwl2b2xhdGlsZSB1MzIgZmxhZzsKK31UX1RzY1BfU3RyYXRlZ3k7CisKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNybyBkZWZpbmUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vLyNkZWZpbmUgdHNjX3JlYWRfcmVnKGFkZHIpICAgICAgICAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKikoYWRkcikpCi0vLyNkZWZpbmUJdHNjX3dyaXRlX3JlZyhhZGRyLCB2YWwpICAgICAgICAgICAgICAgICAoKCoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopKGFkZHIpKSA9IHZhbCkKKyNkZWZpbmUgWlhfVFNDX0RFViAgICAiL2Rldi96eF90c2MiCisKKyNkZWZpbmUgWlhfVFNDX0lPQ19NQUdJQyAgICAgJ1cnCisvKmlvY3RsIGNtZCB1c2QgYnkgZGV2aWNlKi8KKyNkZWZpbmUgWlhfVFNDX1NFVF9USFJFU0hPTEQgICAgICAgICAJX0lPVyhaWF9UU0NfSU9DX01BR0lDLCAxLCBjaGFyICopCisjZGVmaW5lIFpYX1RTQ19HRVRfVEhSRVNIT0xEICAgICAgICAgIF9JT1coWlhfVFNDX0lPQ19NQUdJQywgMiwgY2hhciAqKQorCisjZGVmaW5lIFpYX1RTQ19TRVRfREVDVEVUX0VOICAgICAgICAgCV9JT1coWlhfVFNDX0lPQ19NQUdJQywgMywgY2hhciAqKQorI2RlZmluZSBaWF9UU0NfR0VUX0RFQ1RFVF9FTiAgICAgICAgICBfSU9XKFpYX1RTQ19JT0NfTUFHSUMsIDQsIGNoYXIgKikKKworCisKKworCiAKICNkZWZpbmUgdHNjX3JlYWRfcmVnIAkJCQkJCQl6eF9yZWFkX3JlZwogI2RlZmluZSB0c2Nfd3JpdGVfcmVnCQkJCQkJCXp4X3dyaXRlX3JlZwogLyoqLworCisjZGVmaW5lICBTVFJBVEVHWV9QU19BTllSRVNJREVOVCAgCQkJMAorI2RlZmluZSAgU1RSQVRFR1lfUFNfUkFURSAgCQkJCQkxCisjZGVmaW5lICBTVFJBVEVHWV9QU19ERlMgIAkJCQkJMgorI2RlZmluZSAgU1RSQVRFR1lfUFNfTlVNICAJCQkJCTMKKworI2RlZmluZSAgVEhSRVNIT0xEX05VTSAgCQkJMTEKICNkZWZpbmUgIFNUUkFURUdZX1BIWV9OVU0gIAkJCQkJOAorCiAjZGVmaW5lICBCSVRTX0ZPUl9QSFlJUkFNCQkJCSAgICAxCiAvKlRTQ1RSTF9QSFkgaXJhbSDDv9K7Yml0se3KvlBIWbXE0ru49rLfwtTKx7fx1rTQ0CovCiAjZGVmaW5lICBCSVRfTElNSVRfTFRFX0RPV05SQVRFMSAgCQkJMApAQCAtOTUsNyArMTIzLDcgQEAKICNkZWZpbmUgIEJJVF9QU19SQVRFICAJCQkJCQkwCiAjZGVmaW5lICBCSVRfUFNfQU5ZUkVTSURFTlQgIAkJCQk0CiAjZGVmaW5lICBCSVRfUFNfRlJFUSAgCQkJCQkJOAotI2RlZmluZSAgQklUX1NIVVRET1dOICAJCQkJCQkxMgorCiAvKiovCiAvLyNkZWZpbmUgIFNUUkFURUdZX1BFUklQX05VTSAgCTIKICNkZWZpbmUgIEJJVFNfRk9SX1BFUElQSVJBTQkJCQkgICAgNApAQCAtMTA0LDExICsxMzIsMTIgQEAKICNkZWZpbmUgIEJJVF9DSEhSR0VSCSAJCQkJCTQKICNkZWZpbmUgIEJJVF9BUFJBVEUJIAkJCQkJCTgKIAorCiAvKiovCiAvLyNkZWZpbmUgIFNUUkFURUdZX0FQX05VTSAgCTIKICNkZWZpbmUgIEJJVFNfRk9SX0FQUElSQU0JCQkJICAgIDQKIC8qVFNDVFJMX0FQIGlyYW0gw7/LxGJpdLHtyr5BULXE0ru49rLfwtTKx7fx1rTQ0CovCi0JCQorI2RlZmluZSAgQklUX1NIVVRET1dOCSAJCQkJICAgIDAJCQogCiAvKlRTQ1RSTF9QSFkgaXJhbUluZm86w7/Su2JpdLHtyr5QSFm1xNK7uPay38LUyse38da00NAKIGJpdDA6bGltaXRfbHRlZG93bnJhdGUxCSAgMTrP3tbGbHRlz8LQ0MvZwsoxo7swOs2j1rnP3tbGbHRlz8LQ0MvZwsoxCkBAIC0xNjYsNyArMTk1LDEwIEBACiAjZGVmaW5lICBUU0NUUkxfVEVNUF9QRVJDRU5UCQkJCShJUkFNX1RTQ19CQVNFKzB4MTFjKSAgLypBUHJhdGUgLGdfdGVtcFBlcmNlbnQqLwogCiAKLSNkZWZpbmUgUFNfQ09SRV9TRUxfUkVHICAgICAgICAgICAgIChaWF9NQVRSSVhfQ1JNX0JBU0UrMHgyMCkvKnBzIGNvcmUgY2xrIHNlbCovCisjZGVmaW5lIFRTQ1RSTF9JUkFNX05WCQkoSVJBTV9UU0NfQkFTRSsweDIwMCkgIC8qVFNDIE5WOiBzaXplLTB4MTQwKi8KKworCisjZGVmaW5lIFBTX0NPUkVfU0VMX1JFRyAgICAgIChaWF9NQVRSSVhfQ1JNX0JBU0UrMHgyMCkvKnBzIGNvcmUgY2xrIHNlbCovCiAKIC8qKi8KICNkZWZpbmUgIFBST0JFX05VTSAgCVBST0JFX01BWApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyX3JwYy5jIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvYmluZGVyX3JwYy5jCmluZGV4IDg3N2E1ZTQuLjJkMzYyNjMgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2JpbmRlcl9ycGMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9iaW5kZXJfcnBjLmMKQEAgLTcwNSwxNiArNzA1LDE2IEBACiAJcGJycGNfY3R4LT5jaG4uY29yZV9pZCA9IENBUF9JRDsNCiAJcGJycGNfY3R4LT5jaG4uY2hhbm5lbF9pZCA9IElDUF9DSE5fQklOREVSX1JQQzsNCiAJcGJycGNfY3R4LT5jaG4uY2hhbm5lbF9zaXplID0gSUNQX0NITl9CSU5ERVJfUlBDX1NJWkU7DQotCQ0KLQlpZihicnBjX2Nobl9jcmVhdGUocGJycGNfY3R4KSkgew0KLQkJYnJwY19lcnIoImJycGNfY2huX2NyZWF0ZSBmYWlsLiIpOw0KLQkJcmV0dXJuIC0xOw0KLQl9DQogDQogCWlmKGJycGNfYWdlbnRfY3JlYXRlKHBicnBjX2N0eCkpIHsNCiAJCWJycGNfZXJyKCJicnBjX2FnZW50X2NyZWF0ZSBmYWlsLiIpOw0KIAkJcmV0dXJuIC0xOw0KIAl9DQorCQ0KKwlpZihicnBjX2Nobl9jcmVhdGUocGJycGNfY3R4KSkgew0KKwkJYnJwY19lcnIoImJycGNfY2huX2NyZWF0ZSBmYWlsLiIpOw0KKwkJcmV0dXJuIC0xOw0KKwl9CQ0KIA0KIAlpZihOVUxMICE9IGNiKSB7DQogCQltZW1zZXQoY2IsIDAsIHNpemVvZihzdHJ1Y3QgYmluZGVyX3JwY19vcGVyYXRpb25zX3N0cnVjdCkpOw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy92b2ljZWJ1ZmZlcmRydi92b2ljZV9idWZmZXJfZGV2LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3N0YWdpbmcvdm9pY2VidWZmZXJkcnYvdm9pY2VfYnVmZmVyX2Rldi5jCmluZGV4IGJlNzhiMGEuLjg0M2IxZGUgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvc3RhZ2luZy92b2ljZWJ1ZmZlcmRydi92b2ljZV9idWZmZXJfZGV2LmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy9zdGFnaW5nL3ZvaWNlYnVmZmVyZHJ2L3ZvaWNlX2J1ZmZlcl9kZXYuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dha2Vsb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvd2FrZWxvY2suaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvdm9sdGVfZHJ2Lmg+CiAKICNkZWZpbmUgTUFYX0JVRl9TSVpFCSAgICAgNjQwCiAjZGVmaW5lIE1BWF9CVUZfTlVNICAgICAgICAzCkBAIC00MSw2ICs0Miw4IEBACiBzdHJ1Y3Qgdm9pY2VfYnVmZmVyX2RldiAqdm9pY2VidWZmZGV2ID0gTlVMTDsKIHN0YXRpYyBjb25zdCBjaGFyIHZvaWNlX2J1ZmZlcl9zaG9ydG5hbWVbXSA9ICJ2b2ljZV9idWZmZXJfZGV2IjsKIAorZXh0ZXJuIHZvaWQgekRydlZwX1N0YXR1cyh1bnNpZ25lZCBpbnQgKnNhbXBsZV9yYXRlLCB1bnNpZ25lZCBpbnQgKnZvaWNlX3N0YXR1cyk7CisKIHN0YXRpYyBpbnQgdm9pY2VfYnVmZmVyX29wZW4oc3RydWN0IGlub2RlICogaXAsIHN0cnVjdCBmaWxlICogZnApOwogc3RhdGljIGludCB2b2ljZV9idWZmZXJfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgZmlsZSAqZnApOwogc3RhdGljIHNzaXplX3Qgdm9pY2VfYnVmZmVyX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKTsKQEAgLTE3OSw3ICsxODIsNyBAQAogCWlmICh0cnVlID09IGlzRW1wdHkpIHsKIAkJaWYgKHZvaWNlYnVmZl9yYXRlbGltaXQoKSkKIAkJCXByX2luZm8oInZvaWNlYnVmZmVyX3VscXVldWVfcmVhZCB1bHF1ZXVlIGlzIGVtcHR5XG4iKTsKLQkJbWVtc2V0KGJ1ZiwwLCBzaXplKTsvLyBhZGQgZm9yIHJlcGVhdCBwbGF5IG9sZCBkYXRhCisJCW1lbXNldChidWYsMCwgc2l6ZSk7Ly8gYXZvaWQgdG8gcmVwZWF0IHBsYXkgb2xkIGRhdGEKIAkJbXV0ZXhfdW5sb2NrKCZxdWV1ZS0+cXVlbG9jayk7CiAJCXJldHVybiAtRU5PREFUQTsKIAl9IGVsc2UgewpAQCAtMjk5LDcgKzMwMiwzMCBAQAogCiBzdGF0aWMgbG9uZyB2b2ljZV9idWZmZXJfaW9jdGwoc3RydWN0IGZpbGUgKmZwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gMDsKKwlpbnQgcmV0ID0gMDsKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworICAgIAljYXNlIFZPSUNFX0lPQ1RMX0dFVF9GUzogeworICAgIAkJaW50IGZzID0gMDsKKworICAgIAkJQ1BQU19GVU5DKGNwcHNfY2FsbGJhY2tzLCB6RHJ2VnBfU3RhdHVzKSgmZnMsIE5VTEwpOworICAgIAkJcHJfaW5mbygidm9pY2VfYnVmZmVyX2lvY3RsICB6RHJ2VnBfU3RhdHVzIGZzPSVkIVxuIiwgZnMpOworCisgICAgCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZmcywgc2l6ZW9mKGZzKSkpIHsKKyAgICAJCQlwcl9lcnIoInZvaWNlX2J1ZmZlcl9pb2N0bCAgekRydlZwX1N0YXR1cyBjb3B5X3RvX3VzZXIgZXJyIVxuIik7CisgICAgCQkJcmV0dXJuIC1FRkFVTFQ7CisgICAgCQl9CisKKyAgICAJCWJyZWFrOworICAgIAl9CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAJCXByX2luZm8oInZvaWNlX2J1ZmZlcl9pb2N0bCAgaW52YWxpZCBjbWQhXG4iKTsKKyAgICAJCWJyZWFrOworICAgIAl9CisJfQorCisgICAgcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB2b2ljZV9idWZmZXJfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9hZGJfc2VydmVyLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvYWRiX3NlcnZlci5jCmluZGV4IDFiMzdlNGIuLjg0MjY0MzEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9hZGJfc2VydmVyLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy91c2IvZ2FkZ2V0L2FkYl9zZXJ2ZXIuYwpAQCAtMzcsNyArMzcsNyBAQAogCiAgc3RydWN0IGFkYl9kZXYgKmdfYWRiX2FnZW50Owogc3NpemVfdCBhZGJfc2VydmVyX3dyaXRlMnVzYiggY29uc3QgY2hhciAqYnVmLHNpemVfdCBjb3VudCk7Ci1leHRlcm4gdm9pZCB1c2JfcnBtc2dfbm90aWZ5X2FwKHVzYl9ycG1zZ19jbWQgKm5vdGlmeSwgaW50IGhhc19wYXJhbSk7CitleHRlcm4gaW50IHVzYl9ycG1zZ19ub3RpZnlfYXAodXNiX3JwbXNnX2NtZCAqbm90aWZ5LCBpbnQgaGFzX3BhcmFtKTsKIGV4dGVybiBpbnQgdXNiX2dldF9hZGJfYWdlbnQodm9pZCk7CiAKIHZvaWQgYWRiX3JlY3ZfZnJvbV9hcCh2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCkBAIC03MCw2ICs3MCw3IEBACiAjZW5kaWYKIAkKIAlhZGJfc2VydmVyX3dyaXRlMnVzYigoY2hhciAqKWJ1ZiwgbGVuKTsKKwlnX2FkYl9hZ2VudC0+c2V0X3Rlc3QgPSAwOwogfSAKICNpZiAwCiBzdGF0aWMgc3NpemVfdCBhZGJfc2VydmVyX3JlYWQoc3RydWN0IGZpbGUgKmZwLCBjaGFyIF9fdXNlciAqYnVmLApAQCAtMjMxLDcgKzIzMiwxMSBAQAogCQl9CiAJCXRvdGFsX2NudCAtPSB0cmFuc2Zlcl9jbnQ7CiAJCXRtcCArPSB0cmFuc2Zlcl9jbnQ7Ci0JCQorCQlpZihnX2FkYl9hZ2VudC0+YWd0X2Vycm9yKXsKKwkJCXByaW50aygiYWRiX3JwbXNnX3dyaXRlMmFwLCBhZ3RfZXJyb3IgYnJlYWssIHRyYW5zIGxlbiBsZWZ0OiVkXG4iLCB0b3RhbF9jbnQpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQogCX0KIAlhdG9taWNfc2V0KCZnX2FkYl9hZ2VudC0+d3JpdGVfYnVzeSwgMCk7CiAJCkBAIC0yNjIsOCArMjY3LDE2IEBACiAjZW5kaWYKIAl9CiAjZW5kaWYKLQlpZiAoYWRiX2xvY2soJmdfYWRiX2FnZW50LT53cml0ZV9leGNsKSkKKwlpZiAoYWRiX2xvY2soJmdfYWRiX2FnZW50LT53cml0ZV9leGNsKSl7CisJCXByaW50aygiYWRiX3dyaXRlIHdyaXRlX2V4Y2wgbG9jayBmYWlsXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKKwl9CisJCisJaWYoZ19hZGJfYWdlbnQtPmFnZW50X3N0YXJ0ID09IDAgfHwgZ19hZGJfYWdlbnQtPmFnZW50X3N0YXRlID09IDApeworCQlwcmludGsoImFkYl93cml0ZSBkZXYtPmFndF9lcnJvclxuIik7CisJCWFkYl91bmxvY2soJmdfYWRiX2FnZW50LT53cml0ZV9leGNsKTsKKwkJcmV0dXJuIC1FSU87CQkKKwl9CiAJCiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQlpZiAoZ19hZGJfYWdlbnQtPmFndF9lcnJvcikgewpAQCAtMjc1LDE2ICsyODgsMTggQEAKIAkJLyogZ2V0IGFuIGlkbGUgdHggcmVxdWVzdCB0byB1c2UgKi8KIAkJcmVxID0gTlVMTDsKIAlVU0JTVEFDS19EQkcoImFkYl9zZXJ2ZXJfd3JpdGUydXNiIHdhaXRpbmcgd3JpdGVfd3EsIGFndF9lcnJvcjolZCwgdHhlbXB0eTolZFxuIixnX2FkYl9hZ2VudC0+YWd0X2Vycm9yLCBsaXN0X2VtcHR5KCZnX2FkYl9hZ2VudC0+dHhfaWRsZSkpOworCQlhdG9taWNfc2V0KCZnX2FkYl9hZ2VudC0+YWd0X3dyaXRlX2ZsYWcsIDEpOwogCQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZ19hZGJfYWdlbnQtPndyaXRlX3dxLAogCQkJKHJlcSA9IGFkYl9yZXFfZ2V0KGdfYWRiX2FnZW50LCAmZ19hZGJfYWdlbnQtPnR4X2lkbGUpKSB8fCBnX2FkYl9hZ2VudC0+YWd0X2Vycm9yKTsKIAogCQkJVVNCU1RBQ0tfREJHKCJhZGJfc2VydmVyX3dyaXRlMnVzYiByZXE6MHgleFxuIiwgcmVxKTsKKwkJYXRvbWljX3NldCgmZ19hZGJfYWdlbnQtPmFndF93cml0ZV9mbGFnLCAwKTsJCiAJCWlmIChyZXQgPCAwKSB7CiAJCQlyID0gcmV0OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYoZ19hZGJfYWdlbnQtPmFndF9lcnJvcil7Ci0JCQlwcmludGsoImdldCBhZ3RfZXJyb3IgZXJyLCBicmVhayB3cml0ZVxuIik7CisJCWlmKGdfYWRiX2FnZW50LT5hZ3RfZXJyb3IgfHwgKGdfYWRiX2FnZW50LT5hZGJfcmVhZHkgPT0gMCkgfHwgKGdfYWRiX2FnZW50LT5hZ2VudF9zdGF0ZSA9PSAwKSl7CisJCQlwcmludGsoIndyaXRlMnVzYiBnZXQgYWd0X2Vycm9yIGVyciwgYnJlYWsgd3JpdGVcbiIpOwogCQkJciA9IC1FSU87CiAJCQlicmVhazsJCQkKIAkJfQpAQCAtMjk2LDggKzMxMSwxMyBAQAogCQkJCXhmZXIgPSBjb3VudDsKIAkJCW1lbWNweShyZXEtPmJ1ZiwgYnVmLCB4ZmVyKTsKIAkJCWFkYl9ycG1zZ193cml0ZTJhcChOVUxMLCAwKTsKLQkJCQorCQkJaWYoZ19hZGJfYWdlbnQtPmFndF9lcnJvcil7CisJCQkJcHJpbnRrKCJhZnRlciB3cml0ZTJhcCBnZXQgYWd0X2Vycm9yIGVyciwgYnJlYWsgd3JpdGVcbiIpOworCQkJCXIgPSAtRUlPOworCQkJCWJyZWFrOwkJCQorCQkJfQkJCQogCQkJcmVxLT5sZW5ndGggPSB4ZmVyOworCQkJLy9wcmludGsoImFkYl9zZXJ2ZXJfd3JpdGUydXNiLCByZXE6JXgsIGRhdGFsZW46JWRcbiIsIHJlcSwgcmVxLT5sZW5ndGgpOwogCQkJcmV0ID0gdXNiX2VwX3F1ZXVlKGdfYWRiX2FnZW50LT5lcF9pbiwgcmVxLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJcHJpbnRrKCJhZGJfd3JpdGU6IHhmZXIgYWd0X2Vycm9yICVkXG4iLCByZXQpOwpAQCAtMzY5LDEwICszODksMTMgQEAKIAlnX2FkYl9hZ2VudC0+YWdlbnRfc3RhcnQgPSAwOwogCWdfYWRiX2FnZW50LT5hZ2VudF9zdGF0ZSA9IDA7CiAJZ19hZGJfYWdlbnQtPmFndF9lcnJvciA9IDE7Ci0JCi0JaWYoYXRvbWljX3JlYWQoJmdfYWRiX2FnZW50LT53cml0ZV9idXN5KSl7CisJcHJpbnRrKCJhZGJfYWdlbnRfY2xvc2UsYWd0X3dyaXRlX2ZsYWc6JWQsIHdyaXRlX2J1c3k6JWRcbiIsIGF0b21pY19yZWFkKCZnX2FkYl9hZ2VudC0+YWd0X3dyaXRlX2ZsYWcpLCBhdG9taWNfcmVhZCgmZ19hZGJfYWdlbnQtPndyaXRlX2J1c3kpKTsKKwlpZihhdG9taWNfcmVhZCgmZ19hZGJfYWdlbnQtPndyaXRlX2J1c3kpIHx8IGF0b21pY19yZWFkKCZnX2FkYl9hZ2VudC0+YWd0X3dyaXRlX2ZsYWcpKXsKKwkJcHJpbnRrKCJhZGJfYWdlbnRfY2xvc2UsIHdyaXRlX2J1c3kgaXMgMVxuIik7CiAJCWF0b21pY19zZXQoJmdfYWRiX2FnZW50LT53cml0ZV9idXN5LCAwKTsKIAkJd2FrZV91cCgmZ19hZGJfYWdlbnQtPmFndF93cml0ZV93cSk7CisJCXdha2VfdXAoJmdfYWRiX2FnZW50LT53cml0ZV93cSk7CisJCWdfYWRiX2FnZW50LT5zZXRfdGVzdCB8PSAweDQ7CiAJfQogI2lmIDAJCiAJZ19hZGJfYWdlbnQtPnJ4X2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy91c2IvZ2FkZ2V0L2FuZHJvaWQuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9hbmRyb2lkLmMKaW5kZXggYTVmYTNkYi4uYzY2MDFiNSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy91c2IvZ2FkZ2V0L2FuZHJvaWQuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvYW5kcm9pZC5jCkBAIC04Myw2ICs4Myw5IEBACiAKICNkZWZpbmUgcHJfZXJyCQlVU0JfREVCVUcKIAorI2lmZGVmIF9VU0VfVkVISUNMRV9EQwordm9pZCB1c2JfY2hlY2tfcGx1Z2luX21zZ19zZW50KHZvaWQpOworI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBjaGFyIGxvbmduYW1lW10gPSAiR2FkZ2V0IEFuZHJvaWQiOwogCkBAIC0yNTMyLDYgKzI1MzUsOSBAQAogCQl9CiAJCWFuZHJvaWRfZW5hYmxlKGRldik7CiAJCWRldi0+ZW5hYmxlZCA9IHRydWU7CisjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDCQkKKwkJdXNiX2NoZWNrX3BsdWdpbl9tc2dfc2VudCgpOworI2VuZGlmCiAJCXVzYl9yZWNvcmRfZGJnaW5mbyhVU0JfREVWX0VOQUJMRSwgMCwgMCk7CiAJfSBlbHNlIGlmICghZW5hYmxlZCAmJiBkZXYtPmVuYWJsZWQpIHsKIAkJVVNCX0RFQlVHKCJVU0IgRElTRU5BQkxFIik7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hZGIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9mX2FkYi5jCmluZGV4IDNhNTA2ZmMuLmEyYWU3YzkgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9mX2FkYi5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC9mX2FkYi5jCkBAIC03MSw2ICs3MSw4IEBACiAJYXRvbWljX3Qgd3JpdGVfYnVzeTsKIAlhdG9taWNfdCBhZ3RfcmVhZF9mbGFnOwogCWF0b21pY190IGFkYl9yZWFkX2ZsYWc7CisJYXRvbWljX3QgYWd0X3dyaXRlX2ZsYWc7CisJaW50IHNldF90ZXN0OwogCWludCBhZ3RfZXJyb3I7CiAJY2hhciAgICpyeDJhZ3RfYnVmOwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqcnBtc2dfdGhyZWFkOwkKQEAgLTYxOSw3ICs2MjEsNyBAQAogCQl9CiAKIAl9Ci0JaWYoYXRvbWljX3JlYWQoJl9hZGJfZGV2LT5yZWFkX2V4Y2wpKQorCWlmKGF0b21pY19yZWFkKCZfYWRiX2Rldi0+cmVhZF9leGNsKSB8fCBhdG9taWNfcmVhZCgmX2FkYl9kZXYtPm9wZW5fZXhjbCkpCiAJCWFkYl91bmxvY2soJl9hZGJfZGV2LT5vcGVuX2V4Y2wpOwogCQogI2lmZGVmIF9VU0VfVkVISUNMRV9EQwkKQEAgLTcwMCw3ICs3MDIsMTQgQEAKIAlkZXYtPmVycm9yID0gMTsKIAogCXdha2VfdXAoJmRldi0+cmVhZF93cSk7Ci0KKyNpZmRlZiBfVVNFX1ZFSElDTEVfREMKKwlpZihhdG9taWNfcmVhZCgmZGV2LT5hZ3Rfd3JpdGVfZmxhZykpeworCQlwcmludGsoImFkYl9mdW5jdGlvbl91bmJpbmQsIGFndF93cml0ZV9mbGFnIHNldCwgd2FrZXVwIHdyaXRlX3dxXG4iKTsKKwkJYXRvbWljX3NldCgmZGV2LT53cml0ZV9idXN5LCAwKTsKKwkJd2FrZV91cCgmZGV2LT53cml0ZV93cSk7CisJCWRldi0+c2V0X3Rlc3QgfD0gMjsKKwl9CisjZW5kaWYJCiAJYWRiX3JlcXVlc3RfZnJlZShkZXYtPnJ4X3JlcSwgZGV2LT5lcF9vdXQpOwogCXdoaWxlICgocmVxID0gYWRiX3JlcV9nZXQoZGV2LCAmZGV2LT50eF9pZGxlKSkpCiAJCWFkYl9yZXF1ZXN0X2ZyZWUocmVxLCBkZXYtPmVwX2luKTsKQEAgLTc5MCwxMCArNzk5LDIyIEBACiAKIAogI2lmZGVmIF9VU0VfVkVISUNMRV9EQwotCWFkYl9zZXJ2ZXJfcGx1Z19ub3RpZnkoVVNCX1JQTVNHX05PVElGWV9BREJfT0ZGTElORSk7CisJcHJpbnRrKCJhZGJfZnVuY3Rpb25fZGlzYWJsZSwgbm90aWZ5IGFkYiBvZmZsaW5lXG4iKTsKKwogCWRldi0+YWdlbnRfc3RhcnQgPSAwOwogCWRldi0+YWdlbnRfc3RhdGUgPSAwOwotCWRldi0+YWd0X2Vycm9yID0gMDsJCisJYWRiX3NlcnZlcl9wbHVnX25vdGlmeShVU0JfUlBNU0dfTk9USUZZX0FEQl9PRkZMSU5FKTsKKwlpZihhdG9taWNfcmVhZCgmZGV2LT53cml0ZV9idXN5KSA9PSAxKXsKKwlwcmludGsoImFkYl9mdW5jdGlvbl9kaXNhYmxlLCBjbGVhciBhZ3Rfd3JpdGVfd3FcbiIpOworCQlhdG9taWNfc2V0KCZkZXYtPndyaXRlX2J1c3ksIDApOworCQkJcHJpbnRrKCJhZGJfZnVuY3Rpb25fZGlzYWJsZSwgY2xlYXIgd3JpdGVfd3FcbiIpOworCQkJZGV2LT5hZ3RfZXJyb3IgPSAxOworCQkJd2FrZV91cCgmZGV2LT53cml0ZV93cSk7CisJCQkKKwkJd2FrZV91cCgmZGV2LT5hZ3Rfd3JpdGVfd3EpOworCQlkZXYtPnNldF90ZXN0IHw9IDE7CisJfQorCWRldi0+YWd0X2Vycm9yID0gMDsJCQogI2VuZGlmCQogCQogCXNjaGVkdWxlX3dvcmsoJmRldi0+b2ZmbGluZV9pbmZvcm0pOwpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYl9uZXRsaW5rLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX25ldGxpbmsuYwppbmRleCAxNWRlNzNlLi5jMDQyYTc4IDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX25ldGxpbmsuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX25ldGxpbmsuYwpAQCAtMzUsNyArMzUsMTAgQEAKIAlpbnQgc3dpdGNoX21vZGUgPSAwOw0KIAlpbnQgc2ltdWxhdGVfcGx1ZyA9IDA7DQogCXN0cnVjdCB3b3JrX3N0cnVjdCBzd2l0Y2hfdXNibW9kZTsNCi1leHRlcm4gdm9pZCB1c2JfcGx1Z19ub3RpZnlfYXAoZV91c2JfcnBtc2dfY21kX3R5cGUgcGx1Z190eXBlKTsNCitleHRlcm4gaW50IHVzYl9wbHVnX25vdGlmeV9hcChlX3VzYl9ycG1zZ19jbWRfdHlwZSBwbHVnX3R5cGUpOw0KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHBsdWdfbm90aWZ5X2R3b3JrOw0KKwlpbnQgdXNiX3JwbXNnX3Nlcl9pbml0ZWQgPSAwOw0KKwlpbnQgdXNiX3BsdWdpbl9tc2dfc2VudCA9IDA7DQogDQogI2VuZGlmDQogDQpAQCAtMzc4LDYgKzM4MSwzMSBAQAogCQ0KIAl1c2Jfbm90aWZ5X3VwKHN3aXRjaF9tb2RlLCBOVUxMKTsNCiB9DQoraW50IHVzYl9wbHVnX25vdGlmeV9jYXBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpDQorewkNCisJaW50IHJldCA9IDA7DQorCXByaW50aygiLS0tLXVzYl9wbHVnX25vdGlmeV9jYXBfd29yayBzdGFydFxuIik7DQorCXJldCA9IHVzYl9wbHVnX25vdGlmeV9hcCgoKHVzYl9wbHVnID09IDEpID8gVVNCX1JQTVNHX1VTQl9QTFVHX0lOIDogVVNCX1JQTVNHX1VTQl9QTFVHX09VVCkpOw0KKwlpZihyZXQpew0KKwkJcHJpbnRrKCJ1c2JfcGx1Z19ub3RpZnlfY2FwX3dvcmssIG5vdGlmeSBwbHVnOiVkLCBmYWlsLCByZXQ6JWRcbiIsIHVzYl9wbHVnLCByZXQpOw0KKwl9DQorfQ0KK3ZvaWQgdXNiX2NoZWNrX3BsdWdpbl9tc2dfc2VudCh2b2lkKQ0KK3sNCisJaWYodXNiX2dwaW9fZGV0ZWN0X2VuYWJsZSA9PSAwKXsNCisJCXByaW50aygidXNiX2NoZWNrX3BsdWdpbl9tc2dfc2VudCwgb25seSBmb3IgdXNiIHBsdWcsXG4iKTsNCisJCXJldHVybjsNCisJfQ0KKwlpZih1c2JfcGx1Z2luX21zZ19zZW50KXsNCisJCXByaW50aygidXNiX2NoZWNrX3BsdWdpbl9tc2dfc2VudCwgYWxyZWFkeSBzZW50IGRvIG5vdGhpbmdcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorCXVzYl9wbHVnaW5fbXNnX3NlbnQgPSAxOw0KKwlwcmludGsoInVzYl9jaGVja19wbHVnaW5fbXNnX3NlbnQsIGRvIHNlbmRcbiIpOw0KKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBsdWdfbm90aWZ5X2R3b3JrLCAwKTsJDQorDQorfQ0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9jaGVja19wbHVnaW5fbXNnX3NlbnQpOw0KICNlbmRpZg0KIGludCB1c2JfZG9fcmVqZWN0X2Nkcm9tKHZvaWQpDQogew0KQEAgLTYxOCwxMiArNjQ2LDEzIEBACiAjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDDQogCQljdXJfdXNibW9kZSA9IGdldF91c2JfZW51bV9tb2RlKCk7DQogCQlhZGJfYWdlbnRfc3RhdGUgPXZhbHVlOw0KLQkJaWYoY3VyX3VzYm1vZGUgPT0gMCl7DQorCQkvL2lmKGN1cl91c2Jtb2RlID09IDApew0KIAkJCWFkYl9lbmFibGVfcnBtc2dfYWdlbnQoYWRiX2FnZW50X3N0YXRlKTsNCiAJCQkNCi0JCX1lbHNlew0KLQkJCXByaW50aygiLS0tbm9uZSBhZGIsIHN3aXRjaCBpcyBmb3JiaWRlcm5cbiIpOw0KLQkJfQ0KKwkJLy99ZWxzZXsNCisJCQkvL3ByaW50aygiLS0tbm9uZSBhZGIsIHN3aXRjaCBpcyBmb3JiaWRlcm5cbiIpOw0KKwkJCXByaW50aygiLS0tY3VyX3VzYm1vZGU6JWQsIGFkYl9hZ2VudF9zdGF0ZTolZFxuIiwgIGN1cl91c2Jtb2RlLCBhZGJfYWdlbnRfc3RhdGUpOw0KKwkJLy99DQogI2VuZGlmDQogCSAgfQkNCiAJDQpAQCAtNzg4LDYgKzgxNyw4IEBACiAJDQogICAgSU5JVF9XT1JLKCZzd2l0Y2hfdXNibW9kZSwgdXNiX3N3aXRjaF9tb2RlX3dvcmspOyAgDQogCQkNCisJSU5JVF9ERUxBWUVEX1dPUksoJnBsdWdfbm90aWZ5X2R3b3JrLCB1c2JfcGx1Z19ub3RpZnlfY2FwX3dvcmspOw0KKwl1c2JfcnBtc2dfc2VyX2luaXRlZCA9IDE7CQkNCiAjZW5kaWYNCiAgICByZXR1cm4gcmV0Ow0KIH0NCkBAIC04MjQsOCArODU1LDE1IEBACiAJCQlzdHJjcHkoYnVmLCJVU0JFVkVOVD11c2JfZGV2aWNlX2luIik7DQogCQkJYWN0aW9uID0gS09CSl9BREQ7DQogCQkJdXNiX3BsdWcgPSAxOw0KLSNpZmRlZiBfVVNFX1ZFSElDTEVfREMJCQkNCi0JCQl1c2JfcGx1Z19ub3RpZnlfYXAoVVNCX1JQTVNHX1VTQl9QTFVHX0lOKTsNCisjaWZkZWYgX1VTRV9WRUhJQ0xFX0RDDQorCQkJaWYodXNiX3JwbXNnX3Nlcl9pbml0ZWQpew0KKwkJCQlpZih1c2JfcGx1Z19ub3RpZnlfYXAoVVNCX1JQTVNHX1VTQl9QTFVHX0lOKSl7DQorCQkJCQkvL2RlbGF5IDEgc2Vjb25kDQorCQkJCQkvL3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGx1Z19ub3RpZnlfZHdvcmssIDIwMCk7CQ0KKwkJCQkJcHJpbnRrKCJwbHVnaW4gbXNnIHNlbmQgZmFpbFxuIik7DQorCQkJCX0NCisJCQkJDQorCQkJfQ0KICNlbmRpZg0KIAkJCXVzYl9yZWNvcmRfZGJnaW5mbyhVU0JfREVWX1BMVUdJTiwgMCwgMCk7DQogCQkJYnJlYWs7DQpAQCAtODM3LDcgKzg3NSwxMCBAQAogCQkJYWN0aW9uID0gS09CSl9SRU1PVkU7DQogCQkJdXNiX3BsdWcgPSAwOw0KICNpZmRlZiBfVVNFX1ZFSElDTEVfREMNCi0JCQl1c2JfcGx1Z19ub3RpZnlfYXAoVVNCX1JQTVNHX1VTQl9QTFVHX09VVCk7DQorCQkJaWYodXNiX3BsdWdfbm90aWZ5X2FwKFVTQl9SUE1TR19VU0JfUExVR19PVVQpKXsNCisJCQkJLy9kZWxheSAxIHNlY29uZA0KKwkJCQkvL3NjaGVkdWxlX2RlbGF5ZWRfd29yaygmcGx1Z19ub3RpZnlfZHdvcmssIDIwMCk7DQorCQkJfQ0KICNlbmRpZg0KIAkJCXVzYl9yZWNvcmRfZGJnaW5mbyhVU0JfREVWX1BMVUdPVVQsIDAsIDApOw0KIAkJCWJyZWFrOw0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfcnBtc2dfc2VydmVyLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9kcml2ZXJzL3VzYi9nYWRnZXQvdXNiX3JwbXNnX3NlcnZlci5jCmluZGV4IDcwMmNiYmYuLmM3ZGFlZGEgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2RyaXZlcnMvdXNiL2dhZGdldC91c2JfcnBtc2dfc2VydmVyLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvZHJpdmVycy91c2IvZ2FkZ2V0L3VzYl9ycG1zZ19zZXJ2ZXIuYwpAQCAtNzIsNyArNzIsNyBAQAogaW50IHVzYl9ycG1zZzJhcCh2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwogCiAKLXZvaWQgdXNiX3JwbXNnX25vdGlmeV9hcCh1c2JfcnBtc2dfY21kICpub3RpZnksIGludCBoYXNfcGFyYW0pCitpbnQgdXNiX3JwbXNnX25vdGlmeV9hcCh1c2JfcnBtc2dfY21kICpub3RpZnksIGludCBoYXNfcGFyYW0pCiB7CiAJdXNiX3JwbXNnX2NtZCAqdF9kYXRhID0gTlVMTDsKIAkKQEAgLTgzLDE3ICs4MywxNyBAQAogCQltZW1jcHkodF9kYXRhLT5wYXJhbSwgbm90aWZ5LT5wYXJhbSwgc3RybGVuKG5vdGlmeS0+cGFyYW0pKTsKIAl9CiAJcHJpbnRrKCItLS11c2JfcnBtc2dfbm90aWZ5X2FwLCBkYXRhbGVuOiVkXG4iLCBzdHJsZW4odXNiX3Jlc3ApKTsKLQl1c2JfcnBtc2cyYXAodXNiX3Jlc3AsIHN0cmxlbih1c2JfcmVzcCkpOworCXJldHVybiB1c2JfcnBtc2cyYXAodXNiX3Jlc3AsIHN0cmxlbih1c2JfcmVzcCkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX3JwbXNnX25vdGlmeV9hcCk7CiAKLXZvaWQgdXNiX3BsdWdfbm90aWZ5X2FwKGVfdXNiX3JwbXNnX2NtZF90eXBlIHBsdWdfdHlwZSkKK2ludCB1c2JfcGx1Z19ub3RpZnlfYXAoZV91c2JfcnBtc2dfY21kX3R5cGUgcGx1Z190eXBlKQogewogCXVzYl9ycG1zZ19jbWQgbm90aWZ5OyAKIAltZW1zZXQoJm5vdGlmeSwgMCwgc2l6ZW9mKG5vdGlmeSkpOwogCW5vdGlmeS5jbWQgPSBwbHVnX3R5cGU7CiAJcHJpbnRrKCItLS0tdXNiX3BsdWdfbm90aWZ5X2FwLCB0eXBlOiVkXG4iLCBwbHVnX3R5cGUpOwotCXVzYl9ycG1zZ19ub3RpZnlfYXAoJm5vdGlmeSwgMCk7CisJcmV0dXJuIHVzYl9ycG1zZ19ub3RpZnlfYXAoJm5vdGlmeSwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGx1Z19ub3RpZnlfYXApOwogCkBAIC0yNzAsNiArMjcwLDcgQEAKIAkJfQogCQkJCiAJCQorCQlhdG9taWNfc2V0KCZycG1zZ19mbGFnLCAwKTsKIAkJaWYoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQl7CiAJCQlwcmludGsoInVuYmluZCB0aHJlYWQgc3RvcCIpOwpAQCAtMjc4LDcgKzI3OSw2IEBACiAJCQogCQkvL3ByaW50aygidXNiX3JwbXNnX3RocmVhZDogbm93IHVzYl9kaXNwYXRjaF9jbWRcbiIpOwogCi0JCWF0b21pY19zZXQoJnJwbXNnX2ZsYWcsIDApOwogCQl0X2NtZCA9ICh1c2JfcnBtc2dfY21kICopdXNiX21zZzsKIAkJLy9hbmRyb2lkX3NldF9ycG1zZ19yZXNwKHRfY21kLT5jbWQsIHVzYl9yZXNwKTsKIAkJdXNiX2Rpc3BhdGNoX2NtZCh1c2JfbXNnLCA0KyBzdHJsZW4odF9jbWQtPnBhcmFtKSk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9mcy9leGVjLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9mcy9leGVjLmMKaW5kZXggY2RlODE4MS4uNzIwMGRmMCAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvZnMvZXhlYy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2ZzL2V4ZWMuYwpAQCAtMjMyNyw3ICsyMzI3LDcgQEAKIAkgKiB1c2VyIHJhbWR1bXAgZW50cnkKIAkgKi8KICNpZmRlZiBDT05GSUdfUkFNRFVNUAotCWlmKHN5c2N0bF9yYW1kdW1wX29uX3VzZXIpCisJaWYoc3lzY3RsX3JhbWR1bXBfb25fdXNlciAmJiAoc2lnbnIgIT0gU0lHUVVJVCkpCiAJCXBhbmljKCJVc2VyIHJhbWR1bXAgZW5hYmxlZCwgdXNlciBwYW5pY1xuIik7Ly9yYW1kdW1wX2VudHJ5KCk7CiAJZWxzZQogCQlwcmludGsoIlVzZXIgcmFtZHVtcCBkaXNhYmxlZCwgY3VycmVudCBwcm9jZXNzIGlzOiAlcywgcGlkIGlzICVpIVxuIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGMyMzNlNjYuLjY5OGE2MzYgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtNzU3LDYgKzc1Nyw4IEBACiAgICAgaW50ICgqekRydlZwX0F1ZGlvRGF0YU9wZW4pKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKICAgICBpbnQgKCp6RHJ2VnBfQXVkaW9EYXRhV3JpdGUpKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgaW50KTsKICAgICBpbnQgKCp6RHJ2VnBfQXVkaW9EYXRhQ2xvc2UpKHZvaWQpOworCisgICAgdm9pZCAoKnpEcnZWcF9TdGF0dXMpKHVuc2lnbmVkIGludCAqLCB1bnNpZ25lZCBpbnQgKik7CiAgICAgCiAJdW5zaWduZWQgY2hhciAoKnpEcnZFZGNwX0lzQnVzeSkoaW50KTsKIH07CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NvY2tldF9ycG1zZy5oIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC9zb2NrZXRfcnBtc2cuaAppbmRleCAzZjNlYzRlLi5kY2VkMjBkIDEwMDc1NQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3NvY2tldF9ycG1zZy5oCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvc29ja2V0X3JwbXNnLmgKQEAgLTQ1LDcgKzQ1LDggQEAKIGV4dGVybiBzcGlubG9ja190IHNvY2tfc29ja2V0X3RhYmxlX2xvY2s7DQogZXh0ZXJuIHNwaW5sb2NrX3Qgc29ja19yZWxlYXNlX3RhYmxlX2xvY2s7DQogZXh0ZXJuIHNwaW5sb2NrX3Qgc29ja19yZWxlYXNlX2xvY2s7DQotZXh0ZXJuIHNwaW5sb2NrX3QgIHNvY2tfcmVsZWFzZV9wZWVyX2xvY2s7DQorZXh0ZXJuIHNwaW5sb2NrX3Qgc29ja19yZWxlYXNlX3BlZXJfbG9jazsNCitleHRlcm4gc3BpbmxvY2tfdCBzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jazsNCiB0eXBlZGVmIGVudW0gX3NvY19tc2dfdHlwZQ0KIHsNCiAJTVNHX1RZUEVfRklORCA9IDAsDQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC92b2x0ZV9kcnYuaCBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luY2x1ZGUvbGludXgvdm9sdGVfZHJ2LmgKaW5kZXggMjdlNmQxNy4uMTE0YjU2MSAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5jbHVkZS9saW51eC92b2x0ZV9kcnYuaAorKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbmNsdWRlL2xpbnV4L3ZvbHRlX2Rydi5oCkBAIC05Niw2ICs5Niw4IEBACiAjZGVmaW5lIFZPSUNFX0lPQ1RMX0dFVF9QQVRICV9JT1IoJ3YnLCAxOSwgaW50KSAKICNlbmRpZgogCisjZGVmaW5lIFZPSUNFX0lPQ1RMX0dFVF9GUwlfSU9SKCd2JywgMjAsIGludCkKKwogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgIHByaW50X2F1ZGlvKGZtdCwgLi4uKSAgXAogCQlwcmludGsoZm10LCAjI19fVkFfQVJHU19fKQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5pdC9kb19tb3VudHMuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2luaXQvZG9fbW91bnRzLmMKaW5kZXggNTgwNzA1Yy4uMWU1YjA4MCAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5pdC9kb19tb3VudHMuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbml0L2RvX21vdW50cy5jCkBAIC0zODksMTggKzM4OSwxMiBAQAogCQkgICAgICAgImV4cGxpY2l0IHRleHR1YWwgbmFtZSBmb3IgXCJyb290PVwiIGJvb3Qgb3B0aW9uLlxuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRkxBR1NfVVRJTFMKLQlleHRlcm4gaW50IGZsYWdzX2dldChUX0ZMQUdTX0lORk8gKnBfZmxhZ3NfaW5mbyk7Ci0JZXh0ZXJuIGludCBmbGFnc19zZXQoVF9GTEFHU19JTkZPICpwX2ZsYWdzX2luZm8pOwotCVRfRkxBR1NfSU5GTyBmbGFnc19pbmZvOwotCWludCByZXQ7Ci0JaWYgKHJldCA9IGZsYWdzX2dldCgmZmxhZ3NfaW5mbykgPCAwKQotCQlwYW5pYygiVkZTOiBVbmFibGUgZ2V0IGZsYWdzIik7Ci0JZmxhZ3NfaW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID0gKGZsYWdzX2luZm8uYm9vdF9mb3RhX2ZsYWcuYm9vdF90byA9PSBEVUFMX1NZU1RFTSkgPwotCQlEVUFMX1NZU1RFTTIgOiBEVUFMX1NZU1RFTTsKLQlpZiAocmV0ID0gZmxhZ3Nfc2V0KCZmbGFnc19pbmZvKSA8IDApCi0JCXBhbmljKCJWRlM6IFVuYWJsZSBzZXQgZmxhZ3MiKTsKKwlleHRlcm4gaW50IGZsYWdzX3N5c19zd2l0Y2godm9pZCk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlZGUzogVW5hYmxlIHRvIG1vdW50IHJvb3QgZnMgb24gJXMiLCBiKTsKKwlpZiAoZmxhZ3Nfc3lzX3N3aXRjaCgpIDwgMCkKKwkJcGFuaWMoIlZGUzogZmxhZ3Nfc3lzX3N3aXRjaCBmYWlsIik7CiAJZWxzZQotCQlrZXJuZWxfcmVzdGFydCgiVkZTOiBTd2l0Y2ggdG8gb3RoZXJzIHN5c3RlbSwgcGxlYXNlIHJlc2V0IG1hY2hpbmUiKTsKKwkJa2VybmVsX3Jlc3RhcnQoIlZGUzogU3dpdGNoIHRvIGFub3RoZXIgc3lzdGVtLCBwbGVhc2UgcmVzZXQgbWFjaGluZSIpOwogI2VuZGlmCiAJCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgYik7CiAJfQpkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5pdC9tYWluLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9pbml0L21haW4uYwpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDQ4MjM4NWYuLjg1NzBlM2EKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5pdC9tYWluLmMKKysrIGIvYXAvb3MvbGludXgvbGludXgtMy40LngvaW5pdC9tYWluLmMKQEAgLTgxLDYgKzgxLDExIEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRkxBR1NfVVRJTFMKKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlICJwdWJfZmxhZ3MuaCIKKyNlbmRpZgorCiBzdGF0aWMgaW50IGtlcm5lbF9pbml0KHZvaWQgKik7CiAKIGV4dGVybiB2b2lkIGluaXRfSVJRKHZvaWQpOwpAQCAtODY3LDYgKzg3MiwxNyBAQAogCXJ1bl9pbml0X3Byb2Nlc3MoIi9iaW4vaW5pdCIpOwogCXJ1bl9pbml0X3Byb2Nlc3MoIi9iaW4vc2giKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19GTEFHU19VVElMUworeworCWV4dGVybiBpbnQgZmxhZ3Nfc3lzX3N3aXRjaCh2b2lkKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiTm8gaW5pdCBmb3VuZC4gIFRyeSBwYXNzaW5nIGluaXQ9IG9wdGlvbiB0byBrZXJuZWwuICIKKwkgICAgICAiU2VlIExpbnV4IERvY3VtZW50YXRpb24vaW5pdC50eHQgZm9yIGd1aWRhbmNlLiIpOworCWlmIChmbGFnc19zeXNfc3dpdGNoKCkgPCAwKQorCQlwYW5pYygiaW5pdDogZmxhZ3Nfc3lzX3N3aXRjaCBmYWlsIik7CisJZWxzZQorCQlrZXJuZWxfcmVzdGFydCgiaW5pdDogU3dpdGNoIHRvIGFub3RoZXIgc3lzdGVtLCBwbGVhc2UgcmVzZXQgbWFjaGluZSIpOworfQorI2VuZGlmCiAJcGFuaWMoIk5vIGluaXQgZm91bmQuICBUcnkgcGFzc2luZyBpbml0PSBvcHRpb24gdG8ga2VybmVsLiAiCiAJICAgICAgIlNlZSBMaW51eCBEb2N1bWVudGF0aW9uL2luaXQudHh0IGZvciBndWlkYW5jZS4iKTsKIH0KZGlmZiAtLWdpdCBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2tlcm5lbC9leGl0LmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9rZXJuZWwvZXhpdC5jCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzIwYWIzNS4uYzJmYmMwOQotLS0gYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9rZXJuZWwvZXhpdC5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2tlcm5lbC9leGl0LmMKQEAgLTU5LDYgKzU5LDExIEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAorI2lmZGVmIENPTkZJR19GTEFHU19VVElMUworI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgInB1Yl9mbGFncy5oIgorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGV4aXRfbW0oc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKTsKIAogc3RhdGljIHZvaWQgX191bmhhc2hfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZ3JvdXBfZGVhZCkKQEAgLTcxNCw2ICs3MTksMTYgQEAKIAlpZiAodW5saWtlbHkocGlkX25zLT5jaGlsZF9yZWFwZXIgPT0gZmF0aGVyKSkgewogCQl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAkJaWYgKHVubGlrZWx5KHBpZF9ucyA9PSAmaW5pdF9waWRfbnMpKSB7CisjaWZkZWYgQ09ORklHX0ZMQUdTX1VUSUxTCisJCQlleHRlcm4gaW50IGZsYWdzX3N5c19zd2l0Y2godm9pZCk7CisJCQlwcmludGsoS0VSTl9FTUVSRyAiQXR0ZW1wdGVkIHRvIGtpbGwgaW5pdCEgZXhpdGNvZGU9MHglMDh4XG4iLAorCQkJCWZhdGhlci0+c2lnbmFsLT5ncm91cF9leGl0X2NvZGUgPzoKKwkJCQkJZmF0aGVyLT5leGl0X2NvZGUpOworCQkJaWYgKGZsYWdzX3N5c19zd2l0Y2goKSA8IDApCisJCQkJcGFuaWMoImluaXQ6IGZsYWdzX3N5c19zd2l0Y2ggZmFpbCIpOworCQkJZWxzZQorCQkJCWtlcm5lbF9yZXN0YXJ0KCJpbml0OiBTd2l0Y2ggdG8gYW5vdGhlciBzeXN0ZW0sIHBsZWFzZSByZXNldCBtYWNoaW5lIik7CisjZW5kaWYKIAkJCXBhbmljKCJBdHRlbXB0ZWQgdG8ga2lsbCBpbml0ISBleGl0Y29kZT0weCUwOHhcbiIsCiAJCQkJZmF0aGVyLT5zaWduYWwtPmdyb3VwX2V4aXRfY29kZSA/OgogCQkJCQlmYXRoZXItPmV4aXRfY29kZSk7CmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9saWIvZmxhZ3NfdXRpbHMvZmxhZ3NfdXRpbHMuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9mbGFnc191dGlscy5jCmluZGV4IDlmYmJhYTAuLjdkZGUyMDAgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9mbGFnc191dGlscy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L2xpYi9mbGFnc191dGlscy9mbGFnc191dGlscy5jCkBAIC01MDgsMyArNTA4LDYxIEBACiB9DQogRVhQT1JUX1NZTUJPTChmbGFnc19zZXQpOw0KIA0KK2ludCBmbGFnc19zeXNfc3dpdGNoKHZvaWQpDQorew0KKwlUX0ZMQUdTX0lORk8gZmxhZ3NfaW5mbyA9IHswfTsNCisJaW50IHJldCA9IC0xOw0KKw0KKwlyZXQgPSBmbGFnc19nZXQoJmZsYWdzX2luZm8pOw0KKwlpZiAocmV0IDwgMCkNCisJew0KKwkJZmxhZ3NfZXJyKCJmbGFncyBzd2l0Y2ggZmxhZ3NfZ2V0IGZhaWxcbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlpZiAoZmxhZ3NfaW5mby5ib290X2ZvdGFfZmxhZy5ib290X3RvID09IERVQUxfU1lTVEVNKQ0KKwl7DQorCQlmbGFnc19pbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTI7ICAvL0EtPkINCisJCWZsYWdzX2luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtLnN0YXR1cyA9IERVQUxTWVNURU1fU1RBVFVTX1VOQk9PVEFCTEU7DQorCQkvL2ZsYWdzX2luZm8oImZsYWdzIHN3aXRjaCBzeXN0ZW0gQSB0byBzeXN0ZW0gQlxuIik7DQorCX0NCisJZWxzZQ0KKwl7DQorCQlmbGFnc19pbmZvLmJvb3RfZm90YV9mbGFnLmJvb3RfdG8gPSBEVUFMX1NZU1RFTTsgICAvL0ItPkENCisJCWZsYWdzX2luZm8uYm9vdF9mb3RhX2ZsYWcuc3lzdGVtMi5zdGF0dXMgPSBEVUFMU1lTVEVNX1NUQVRVU19VTkJPT1RBQkxFOw0KKwkJLy9mbGFnc19pbmZvKCJmbGFncyBzd2l0Y2ggc3lzdGVtIEIgdG8gc3lzdGVtIEFcbiIpOw0KKwl9DQorCWZsYWdzX2luZm8uYm9vdF9mb3RhX2ZsYWcuZm90YV9zdGF0dXMgPSAxOyAgIC8vbnZzZXJ2ZXIgdXBkYXRlIGZsYWcNCisJcmV0ID0gZmxhZ3Nfc2V0KCZmbGFnc19pbmZvKTsNCisJaWYgKHJldCA8IDApDQorCXsNCisJCWZsYWdzX2VycigiZmxhZ3Mgc3dpdGNoIGZsYWdzX3NldCBmYWlsXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisJDQorCXJldHVybiByZXQ7DQorfQ0KK0VYUE9SVF9TWU1CT0woZmxhZ3Nfc3lzX3N3aXRjaCk7DQorDQoraW50IGZsYWdzX3NldF9udnJvZmxhZyh1bnNpZ25lZCBpbnQgZmxhZykNCit7DQorCVRfRkxBR1NfSU5GTyB0X2ZsYWcgPSB7MH07DQorDQorCWlmIChmbGFnc19nZXQoJnRfZmxhZykgIT0gMCkNCisJCXJldHVybiAtMTsNCisJaWYgKHRfZmxhZy5udnJvX2ZsYWcgPT0gZmxhZykNCisJCXJldHVybiAwOw0KKwlpZiAoKGZsYWcgPT0gTlZST19SRVNUT1JJTkcpIHx8IChmbGFnID09IE5WUk9fQkFDS0lOR19VUCkpDQorCXsNCisJCWlmICh0X2ZsYWcubnZyb19mbGFnICE9IE5WUk9fQkFDS0VEX1VQKQ0KKwkJew0KKwkJCWZsYWdzX2VycigiW2Vycm9yXWZsYWdzIG52cm8gb25seSBOVlJPX0JBQ0tFRF9VUCBzd2l0Y2ggdG8gTlZST19SRVNUT1JJTkcvTlZST19CQUNLSU5HX1VQXG4iKTsNCisJCQlyZXR1cm4gLTE7DQorCQl9DQorCX0NCisJdF9mbGFnLm52cm9fZmxhZyA9IGZsYWc7DQorDQorCXJldHVybiBmbGFnc19zZXQoJnRfZmxhZyk7DQorfQ0KK0VYUE9SVF9TWU1CT0woZmxhZ3Nfc2V0X252cm9mbGFnKTsNCisNCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9sb2cgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0MDE1ZWMuLjAwMDAwMDAKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbG9nCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotYml0YmFrZe+8muacquaJvuWIsOWRveS7pApkaWZmIC0tZ2l0IGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvZmFzdHByb2MvZmFzdDYuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9jb3JlL2Zhc3Rwcm9jL2Zhc3Q2LmMKaW5kZXggMTQ3NDYxMS4uNjM3ZDM3MyAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L2NvcmUvZmFzdHByb2MvZmFzdDYuYworKysgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvY29yZS9mYXN0cHJvYy9mYXN0Ni5jCkBAIC0zMDAsNyArMzAwLDExIEBACiAgICAgICAgIC8vcHJpbnRfc3VuKFNVTl9EQkcsICJmYXN0XzZfcmVjdiBmYXN0XzZfZmluZCBudWxsIFxuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICAKKyAgICBpZihmYXN0Nl9lbnRyeV9kYXRhLT5pbmRldiAhPSBOVUxMICYmIGZhc3Q2X2VudHJ5X2RhdGEtPmluZGV2ICE9IHNrYi0+aW5kZXYpeworCQkvKnR1cGxlz+DNrLWraW5kZXayu82so6zKx8bky/vB97PMwrfTydeqt6K1xLD8o6y1scew1rvQ6NKqtv60zr27u7sqLworICAgICAgICByY3VfcmVhZF91bmxvY2soKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIC8qxdC2z7GozsSzpLbIyse38bOsuf2z9r/aREVWtcRNVFUqLwogICAgIGRldiA9IGZhc3Q2X2VudHJ5X2RhdGEtPm91dGRldjsKICAgICBpZiAoIWRldiB8fCAoc2tiLT5sZW4gPiBkZXYtPm10dSkpCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0X3JwbXNnLmMgYi9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQvc29ja2V0X3JwbXNnLmMKaW5kZXggYTQyYmZjMi4uOGIyMjViNiAxMDA3NTUKLS0tIGEvYXAvb3MvbGludXgvbGludXgtMy40LngvbmV0L3NvY2tldF9ycG1zZy5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC9zb2NrZXRfcnBtc2cuYwpAQCAtODAsNiArODAsOSBAQAogREVGSU5FX1NQSU5MT0NLKHNvY2tfcmVsZWFzZV9wZWVyX2xvY2spOw0KIEVYUE9SVF9TWU1CT0xfR1BMKHNvY2tfcmVsZWFzZV9wZWVyX2xvY2spOw0KIA0KK0RFRklORV9TUElOTE9DSyhzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQorRVhQT1JUX1NZTUJPTF9HUEwoc29ja19zb2NrZXRhZGRyX3RhYmxlX2xvY2spOw0KKw0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppcGNzb2NrZXRfZGVidWdmc19kaXJfZW50cnlfcm9vdDsNCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqaXBjc29ja2V0X2RlYnVnZnNfZGlyX2VudHJ5X3Byb2M7DQogDQpAQCAtNjIyLDE1ICs2MjUsMTUgQEAKIHsNCiAJc3RydWN0IHNvY2tfc3VuYWRkcl9pbmZvICpwOw0KIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zLCpuOw0KLQkNCisJc3Bpbl9sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmZ19zdW5hZGRyX2luZm8sIGhsaXN0X25vZGUpIHsNCiAJCWlmKChwLT5zb2NrYWRkci5zdW5fZmFtaWx5ID09IHBzb2NrYWRkcl91bi0+c3VuX2ZhbWlseSkgXA0KIAkJCSYmKDAgPT0gbWVtY21wKHAtPnNvY2thZGRyLnN1bl9wYXRoLCBwc29ja2FkZHJfdW4tPnN1bl9wYXRoLCBVTklYX1BBVEhfTUFYKSkpewkJCQ0KLQkJCQkJCQ0KKwkJCXNwaW5fdW5sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7CQkJDQogCQkJcmV0dXJuIHRydWU7DQogCQl9DQogCX0NCi0JDQorCXNwaW5fdW5sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQogCXJldHVybiBmYWxzZTsNCiB9DQogDQpAQCAtNjUzLDcgKzY1Niw5IEBACiAJbWVtY3B5KCZwc29ja19zdW5hZGRyX2luZm8tPnNvY2thZGRyLCBwc29ja2FkZHJfdW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKTsJDQogCQkNCiAJSU5JVF9ITElTVF9OT0RFKCZwc29ja19zdW5hZGRyX2luZm8tPmhsaXN0X25vZGUpOw0KLQlobGlzdF9hZGRfaGVhZCgmcHNvY2tfc3VuYWRkcl9pbmZvLT5obGlzdF9ub2RlLCAmZ19zdW5hZGRyX2luZm8pOwkNCisJc3Bpbl9sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQorCWhsaXN0X2FkZF9oZWFkKCZwc29ja19zdW5hZGRyX2luZm8tPmhsaXN0X25vZGUsICZnX3N1bmFkZHJfaW5mbyk7DQorCXNwaW5fdW5sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQogfQ0KIA0KIHN0YXRpYyBpbnQgc29ja19zb2NfZGVsX2lwY19zdW5hZGRyKHN0cnVjdCBzb2NrYWRkcl91biAqcHNvY2thZGRyX3VuKQ0KQEAgLTY2MSw2ICs2NjYsNyBAQAogCXN0cnVjdCBzb2NrX3N1bmFkZHJfaW5mbyAqcDsNCiAJc3RydWN0IGhsaXN0X25vZGUgKnBvcywqbjsNCiAJaW50IHJldDsNCisJc3Bpbl9sb2NrKCZzb2NrX3NvY2tldGFkZHJfdGFibGVfbG9jayk7DQogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgcG9zLCBuLCAmZ19zdW5hZGRyX2luZm8sIGhsaXN0X25vZGUpIHsJCQ0KIAkJaWYocHNvY2thZGRyX3VuLT5zdW5fcGF0aFswXSl7DQogCQkJcmV0ID0gc3RybmNtcChwLT5zb2NrYWRkci5zdW5fcGF0aCwgcHNvY2thZGRyX3VuLT5zdW5fcGF0aCwgc3RybGVuKHBzb2NrYWRkcl91bi0+c3VuX3BhdGgpKTsNCkBAIC02NzIsMTAgKzY3OCwxMiBAQAogCQkJaGxpc3RfZGVsKCZwLT5obGlzdF9ub2RlKTsJCQkNCiAJCQlrZnJlZShwKTsNCiAJCQlza19zb2NfaW5mbygic3VuX3BhdGg9JXMsIGRlbCBzdWNlc3MuIiwgcHNvY2thZGRyX3VuLT5zdW5fcGF0aCk7DQorCQkJc3Bpbl91bmxvY2soJnNvY2tfc29ja2V0YWRkcl90YWJsZV9sb2NrKTsNCiAJCQlyZXR1cm4gMDsNCiAJCX0NCiAJfQ0KIAlza19zb2NfaW5mbygic3VuX3BhdGg9JXMsIGRlbCBmYWlsZWQiLCBwc29ja2FkZHJfdW4tPnN1bl9wYXRoKTsNCisJc3Bpbl91bmxvY2soJnNvY2tfc29ja2V0YWRkcl90YWJsZV9sb2NrKTsNCiAJcmV0dXJuIC0xOw0KIH0NCiANCmRpZmYgLS1naXQgYS9hcC9vcy9saW51eC9saW51eC0zLjQueC9uZXQveGZybS94ZnJtX3VzZXIuYyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCmluZGV4IGMyZDFlOTMuLmU2M2U1OTcgMTAwNzU1Ci0tLSBhL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCisrKyBiL2FwL29zL2xpbnV4L2xpbnV4LTMuNC54L25ldC94ZnJtL3hmcm1fdXNlci5jCkBAIC00NzgsNyArNDc4LDggQEAKIAlzdHJ1Y3QgbmxhdHRyICpldCA9IGF0dHJzW1hGUk1BX0VUSU1FUl9USFJFU0hdOwogCXN0cnVjdCBubGF0dHIgKnJ0ID0gYXR0cnNbWEZSTUFfUkVQTEFZX1RIUkVTSF07CiAKLQlpZiAocmUpIHsKKwkvL0JEU0EtMjAyMy0xOTQxCisJaWYgKHJlICYmIHgtPnJlcGxheV9lc24gJiYgeC0+cHJlcGxheV9lc24pIHsKIAkJc3RydWN0IHhmcm1fcmVwbGF5X3N0YXRlX2VzbiAqcmVwbGF5X2VzbjsKIAkJcmVwbGF5X2VzbiA9IG5sYV9kYXRhKHJlKTsKIAkJbWVtY3B5KHgtPnJlcGxheV9lc24sIHJlcGxheV9lc24sCg==