ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggOTZjODM4MS4uOWRmYTY3MiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSwzMCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4xLjIwIiBkYXRlPSIxNy4wMi4yMDA1Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK87P19nFINDB0sHNxdTS2SBzY3JpcHRfZmlsZW5hbWUgySByZW1vdGVfcG9ydCDXIMTJ0sXL1MnXxSBmYXN0Y2dpX3BhcmFtcy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBuZXcgInNjcmlwdF9maWxlbmFtZSIgYW5kICJyZW1vdGVfcG9ydCIgcGFyYW1ldGVycworb2Z0aGUgZmFzdGNnaV9wYXJhbXMgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK87F0NLB18nM2M7PIM/C0sHCwdTZ18HM09Eg0M/Uz8sgc3RkZXJyIM/UIEZhc3RDR0kt08XS18XSwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBGYXN0Q0dJIHN0ZGVyciBzdHJlYW0gd2FzIGhhbmRsZWQgaW5jb3JyZdN0bHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjE5IiBkYXRlPSIxNi4wMi4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggMDcxY2YxYy4uMGU3NTA4MyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4xLjE5IgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4yMCIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCmluZGV4IGNhZGQwYWEuLmI2NTc3OTAgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzID09ICdcbicgfHwgKnMgPT0gJ1xyJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzID09IExGIHx8ICpzID09IENSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfaGFuZGxlci5jCmluZGV4IDQzZjk5Y2EuLmQ2MTMwNzkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX2hhbmRsZXIuYwpAQCAtNjgsMjMgKzY4LDI3IEBACiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc7CiAKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBoZWFkZXI7CisKICAgICBuZ3hfaHR0cF9mYXN0Y2dpX3Vwc3RyZWFtX3QgICp1cHN0cmVhbTsKIH0gbmd4X2h0dHBfZmFzdGNnaV9jdHhfdDsKIAogCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfUkVNT1RFX0FERFIgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfUkVNT1RFX1VTRVIgICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX05BTUUgICAgICAgICAgMHgwMDA4Ci0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX0FERFIgICAgICAgICAgMHgwMDEwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX1BPUlQgICAgICAgICAgMHgwMDIwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0NSSVBUX05BTUUgICAgICAgICAgMHgwMDQwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfQVVUSF9UWVBFICAgICAgICAgICAgMHgwMDgwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX1BST1RPQ09MICAgICAgMHgwMTAwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX1NPRlRXQVJFICAgICAgMHgwMjAwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfR0FURVdBWV9JTlRFUkZBQ0UgICAgMHgwNDAwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfUkVRVUVTVF9VUkkgICAgICAgICAgMHgwODAwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfUkVESVJFQ1RfU1RBVFVTICAgICAgMHgxMDAwCi0jZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfRE9DVU1FTlRfUk9PVCAgICAgICAgMHgyMDAwCisjZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfUkVNT1RFX0FERFIgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1JFTU9URV9VU0VSICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkdYX0hUVFBfRkFTVENHSV9TRVJWRVJfTkFNRSAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfU0VSVkVSX0FERFIgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1NFUlZFUl9QT1JUICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgTkdYX0hUVFBfRkFTVENHSV9TQ1JJUFRfTkFNRSAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfQVVUSF9UWVBFICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1NFUlZFUl9QUk9UT0NPTCAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTkdYX0hUVFBfRkFTVENHSV9TRVJWRVJfU09GVFdBUkUgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfR0FURVdBWV9JTlRFUkZBQ0UgICAgMHgwMDAwMDQwMAorI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1JFUVVFU1RfVVJJICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgTkdYX0hUVFBfRkFTVENHSV9SRURJUkVDVF9TVEFUVVMgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIE5HWF9IVFRQX0ZBU1RDR0lfRE9DVU1FTlRfUk9PVCAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1NDUklQVF9GSUxFTkFNRSAgICAgIDB4MDAwMDQwMDAKKyNkZWZpbmUgTkdYX0hUVFBfRkFTVENHSV9SRU1PVEVfUE9SVCAgICAgICAgICAweDAwMDA4MDAwCiAKIAogI2RlZmluZSBOR1hfSFRUUF9GQVNUQ0dJX1JFU1BPTkRFUiAgICAgIDEKQEAgLTE5OSw3ICsyMDMsMTAgQEAKIAogICAgIHsgbmd4X3N0cmluZygicmVkaXJlY3Rfc3RhdHVzIiksIE5HWF9IVFRQX0ZBU1RDR0lfUkVESVJFQ1RfU1RBVFVTIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X3VyaSIpLCBOR1hfSFRUUF9GQVNUQ0dJX1JFUVVFU1RfVVJJIH0sCisKICAgICB7IG5neF9zdHJpbmcoImRvY3VtZW50X3Jvb3QiKSwgTkdYX0hUVFBfRkFTVENHSV9ET0NVTUVOVF9ST09UIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJzY3JpcHRfZmlsZW5hbWUiKSwgTkdYX0hUVFBfRkFTVENHSV9TQ1JJUFRfRklMRU5BTUUgfSwKKyAgICB7IG5neF9zdHJpbmcoInJlbW90ZV9wb3J0IiksIE5HWF9IVFRQX0ZBU1RDR0lfUkVNT1RFX1BPUlQgfSwKIAogICAgIHsgbmd4X251bGxfc3RyaW5nLCAwIH0KIH07CkBAIC00MjEsMTYgKzQyOCwxOCBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfZmFzdGNnaV9jcmVhdGVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCwgKnBvcywgYWRkcl90ZXh0W0lORVRfQUREUlNUUkxFTl07Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCBsZW4sIGluZGV4LCBwYWRkaW5nLCBhZGRyX2xlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLCAqcG9zLCBhZGRyX3RleHRbSU5FVF9BRERSU1RSTEVOXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfdGV4dFtzaXplb2YoIjY1NTM1IikgLSAxXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIGxlbiwgaW5kZXgsIHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2xlbiwgcG9ydF9sZW47CiAgICAgb2ZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3BvczsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICAgICAgICAgKmI7CiAgICAgc29ja2xlbl90ICAgICAgICAgICAgICAgICAgICAgICAgICBzbGVuOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICAgICAqY2wsICpib2R5OwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICAgICAgaSwgbiwgbmV4dCwgKnZpbmRleDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgIGksIG4sIG5leHQsICp2aW5kZXgsIHBvcnQ7CiAgICAgbmd4X2xpc3RfcGFydF90ICAgICAgICAgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICAqaGVhZGVyOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgICAgICAgICAgICAgICAgc2luOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgICAgICAgICAgICAgICAgc2luLCAqc2lucDsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAgICAgICAgKnZhcjsKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAgICAgICAgKnZhbHVlOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAgICAgICAqY2xjZjsKQEAgLTUyMCw2ICs1MjksMTIgQEAKICAgICAgICAgICAgICAgICAgKyBzaXplb2YoIkRPQ1VNRU5UX1JPT1QiKSAtIDEgKyBjbGNmLT5yb290LmxlbjsKICAgICB9CiAKKyAgICBpZiAoZmxjZi0+cGFyYW1zICYgTkdYX0hUVFBfRkFTVENHSV9TQ1JJUFRfRklMRU5BTUUpIHsKKyAgICAgICAgbGVuICs9IDEgKyAoKGZsY2YtPnJvb3QubGVuICsgci0+dXJpLmxlbiArIGluZGV4ID4gMTI3KSA/IDQgOiAxKQorICAgICAgICAgICAgICAgICArIHNpemVvZigiU0NSSVBUX0ZJTEVOQU1FIikgLSAxCisgICAgICAgICAgICAgICAgICsgZmxjZi0+cm9vdC5sZW4gKyByLT51cmkubGVuICsgaW5kZXg7CisgICAgfQorCiAgICAgaWYgKGZsY2YtPnBhcmFtcyAmIE5HWF9IVFRQX0ZBU1RDR0lfU0NSSVBUX05BTUUpIHsKICAgICAgICAgbGVuICs9IDEgKyAoKHItPnVyaS5sZW4gKyBpbmRleCA+IDEyNykgPyA0IDogMSkKICAgICAgICAgICAgICAgICAgKyBzaXplb2YoIlNDUklQVF9OQU1FIikgLSAxICsgci0+dXJpLmxlbiArIGluZGV4IDsKQEAgLTUyOSw2ICs1NDQsMjUgQEAKICAgICAgICAgbGVuICs9IDEgKyAxICsgc2l6ZW9mKCJSRU1PVEVfQUREUiIpIC0gMSArIHItPmNvbm5lY3Rpb24tPmFkZHJfdGV4dC5sZW47CiAgICAgfQogCisgICAgcG9ydF9sZW4gPSAwOworCisgICAgaWYgKGZsY2YtPnBhcmFtcyAmIE5HWF9IVFRQX0ZBU1RDR0lfUkVNT1RFX1BPUlQpIHsKKworICAgICAgICAvKiBBRl9JTkVUIG9ubHkgKi8KKworICAgICAgICBpZiAoci0+Y29ubmVjdGlvbi0+c29ja2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgICAgICBzaW5wID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSByLT5jb25uZWN0aW9uLT5zb2NrYWRkcjsKKworICAgICAgICAgICAgcG9ydCA9IG50b2hzKHNpbnAtPnNpbl9wb3J0KTsKKworICAgICAgICAgICAgaWYgKHBvcnQgPiAwICYmIHBvcnQgPCA2NTUzNikgeworICAgICAgICAgICAgICAgIHBvcnRfbGVuID0gbmd4X3NwcmludGYocG9ydF90ZXh0LCAiJXVpIiwgcG9ydCkgLSBwb3J0X3RleHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbiArPSAxICsgMSArIHNpemVvZigiUkVNT1RFX1BPUlQiKSAtIDEgKyBwb3J0X2xlbjsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChmbGNmLT5wYXJhbXMgJiBOR1hfSFRUUF9GQVNUQ0dJX1NFUlZFUl9OQU1FKSB7CiAgICAgICAgIGxlbiArPSAxICsgMSArIHNpemVvZigiU0VSVkVSX05BTUUiKSAtIDEgKyByLT5zZXJ2ZXJfbmFtZS5sZW47CiAgICAgfQpAQCAtODMxLDYgKzg2NSwzMSBAQAogICAgIH0KIAogCisgICAgaWYgKGZsY2YtPnBhcmFtcyAmIE5HWF9IVFRQX0ZBU1RDR0lfU0NSSVBUX0ZJTEVOQU1FKSB7CisgICAgICAgICpiLT5sYXN0KysgPSBzaXplb2YoIlNDUklQVF9GSUxFTkFNRSIpIC0gMTsKKworICAgICAgICBsZW4gPSBmbGNmLT5yb290LmxlbiArIHItPnVyaS5sZW4gKyBpbmRleDsKKyAgICAgICAgaWYgKGxlbiA+IDEyNykgeworICAgICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpICgoKGxlbiA+PiAyNCkgJiAweDdmKSB8IDB4ODApOworICAgICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpICgobGVuID4+IDE2KSAmIDB4ZmYpOworICAgICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpICgobGVuID4+IDgpICYgMHhmZik7CisgICAgICAgICAgICAqYi0+bGFzdCsrID0gKHVfY2hhcikgKGxlbiAmIDB4ZmYpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqYi0+bGFzdCsrID0gKHVfY2hhcikgbGVuOworICAgICAgICB9CisKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIlNDUklQVF9GSUxFTkFNRSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiU0NSSVBUX0ZJTEVOQU1FIikgLSAxKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgZmxjZi0+cm9vdC5kYXRhLCBmbGNmLT5yb290Lmxlbik7CisgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIHItPnVyaS5kYXRhLCByLT51cmkubGVuKTsKKworICAgICAgICBpZiAoaW5kZXgpIHsKKyAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIGZsY2YtPmluZGV4LmRhdGEsIGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworCiAgICAgaWYgKGZsY2YtPnBhcmFtcyAmIE5HWF9IVFRQX0ZBU1RDR0lfU0NSSVBUX05BTUUpIHsKICAgICAgICAgKmItPmxhc3QrKyA9IHNpemVvZigiU0NSSVBUX05BTUUiKSAtIDE7CiAKQEAgLTg2Myw2ICs5MjIsMTQgQEAKICAgICB9CiAKIAorICAgIGlmIChwb3J0X2xlbikgeworICAgICAgICAqYi0+bGFzdCsrID0gc2l6ZW9mKCJSRU1PVEVfUE9SVCIpIC0gMTsKKyAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpIHBvcnRfbGVuOworICAgICAgICBiLT5sYXN0ID0gbmd4X2NweW1lbShiLT5sYXN0LCAiUkVNT1RFX1BPUlQiLCBzaXplb2YoIlJFTU9URV9QT1JUIikgLSAxKTsKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgcG9ydF90ZXh0LCBwb3J0X2xlbik7CisgICAgfQorCisKICAgICBpZiAoZmxjZi0+cGFyYW1zICYgTkdYX0hUVFBfRkFTVENHSV9TRVJWRVJfTkFNRSkgewogICAgICAgICAqYi0+bGFzdCsrID0gc2l6ZW9mKCJTRVJWRVJfTkFNRSIpIC0gMTsKICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpIHItPnNlcnZlcl9uYW1lLmxlbjsKQEAgLTExNTEsMTIgKzEyMTgsMTMgQEAKICAgICB9CiAKICAgICBmLT5zdGF0ZSA9IG5neF9odHRwX2Zhc3RjZ2lfc3RfdmVyc2lvbjsKKyAgICBmLT5oZWFkZXIgPSAwOwogCiAgICAgbmd4X21lbXplcm8oJmYtPnVwc3RyZWFtLT5oZWFkZXJzX2luLAogICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9mYXN0Y2dpX2hlYWRlcnNfaW5fdCkpOwogCiAgICAgaWYgKGYtPnVwc3RyZWFtLT5oZWFkZXJzX2luLmhlYWRlcnMucGFydC5lbHRzKSB7Ci0gICAgICAgIGlmIChuZ3hfbGlzdF9pbml0KCZmLT51cHN0cmVhbS0+aGVhZGVyc19pbi5oZWFkZXJzLCByLT5wb29sLCA1LAorICAgICAgICBpZiAobmd4X2xpc3RfaW5pdCgmZi0+dXBzdHJlYW0tPmhlYWRlcnNfaW4uaGVhZGVycywgci0+cG9vbCwgOCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpID09IE5HWF9FUlJPUikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKQEAgLTExNzAsNyArMTIzOCw3IEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2Zhc3RjZ2lfcHJvY2Vzc19oZWFkZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICpzdGFydCwgKmxhc3Q7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgKnN0YXR1c19saW5lOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICpzdGF0dXNfbGluZSwgbGluZTsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgcmMsIHN0YXR1czsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgaTsKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAqaDsKQEAgLTExOTEsNyArMTI1OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5neF9saXN0X2luaXQoJmYtPnVwc3RyZWFtLT5oZWFkZXJzX2luLmhlYWRlcnMsIHItPnBvb2wsIDUsCisgICAgICAgIGlmIChuZ3hfbGlzdF9pbml0KCZmLT51cHN0cmVhbS0+aGVhZGVyc19pbi5oZWFkZXJzLCByLT5wb29sLCA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSkgPT0gTkdYX0VSUk9SKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwpAQCAtMTIyMCw3ICsxMjg4LDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfVVBTVFJFQU1fSU5WQUxJRF9IRUFERVI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChmLT50eXBlICE9IE5HWF9IVFRQX0ZBU1RDR0lfU1RET1VUKSB7CisgICAgICAgICAgICBpZiAoZi0+dHlwZSAhPSBOR1hfSFRUUF9GQVNUQ0dJX1NURE9VVAorICAgICAgICAgICAgICAgICYmIGYtPnR5cGUgIT0gTkdYX0hUVFBfRkFTVENHSV9TVERFUlIpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgdW5leHBlY3RlZCBGYXN0Q0dJIHJlY29yZDogJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+dHlwZSk7CkBAIC0xMjI4LDcgKzEyOTgsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKGYtPmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoZi0+dHlwZSA9PSBOR1hfSFRUUF9GQVNUQ0dJX1NURE9VVCAmJiBmLT5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cHN0cmVhbSBjbG9zZWQgcHJlbWF0dXJlbHkgRmFzdENHSSBzdGRvdXQiKTsKIApAQCAtMTI1OCw4ICsxMzI4LDU4IEBACiAgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwogICAgICAgICB9CiAKKwogICAgICAgICAvKiBmLT5zdGF0ZSA9PSBuZ3hfaHR0cF9mYXN0Y2dpX3N0X2RhdGEgKi8KIAorICAgICAgICBpZiAoZi0+dHlwZSA9PSBOR1hfSFRUUF9GQVNUQ0dJX1NUREVSUikgeworCisgICAgICAgICAgICBpZiAoZi0+aGVhZGVyKSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gc3BsaXQgYSBoZWFkZXIgaW4gRmFzdENHSSByZWNvcmRzIik7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfVVBTVFJFQU1fSU5WQUxJRF9IRUFERVI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmLT5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBsaW5lLmRhdGEgPSB1LT5oZWFkZXJfaW4ucG9zOworCisgICAgICAgICAgICAgICAgaWYgKHUtPmhlYWRlcl9pbi5wb3MgKyBmLT5sZW5ndGggPD0gdS0+aGVhZGVyX2luLmxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSBmLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcl9pbi5wb3MgKz0gZi0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBmLT5sZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICBmLT5zdGF0ZSA9IG5neF9odHRwX2Zhc3RjZ2lfc3RfcGFkZGluZzsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICBsaW5lLmxlbiA9IHUtPmhlYWRlcl9pbi5sYXN0IC0gdS0+aGVhZGVyX2luLnBvczsKKyAgICAgICAgICAgICAgICAgICAgZi0+bGVuZ3RoIC09IHUtPmhlYWRlcl9pbi5sYXN0IC0gdS0+aGVhZGVyX2luLnBvczsKKyAgICAgICAgICAgICAgICAgICAgdS0+aGVhZGVyX2luLnBvcyA9IHUtPmhlYWRlcl9pbi5sYXN0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdoaWxlIChsaW5lLmRhdGFbbGluZS5sZW4gLSAxXSA9PSBMRgorICAgICAgICAgICAgICAgICAgICAgICB8fCBsaW5lLmRhdGFbbGluZS5sZW4gLSAxXSA9PSBDUgorICAgICAgICAgICAgICAgICAgICAgICB8fCBsaW5lLmRhdGFbbGluZS5sZW4gLSAxXSA9PSAnLicKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgbGluZS5kYXRhW2xpbmUubGVuIC0gMV0gPT0gJyAnKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4tLTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFzdENHSSBzZW50IGluIHN0ZGVycjogXCIlVlwiIiwgJmxpbmUpOworCisgICAgICAgICAgICAgICAgaWYgKHUtPmhlYWRlcl9pbi5wb3MgPT0gdS0+aGVhZGVyX2luLmxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZi0+c3RhdGUgPSBuZ3hfaHR0cF9mYXN0Y2dpX3N0X3ZlcnNpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKworICAgICAgICAvKiBmLT50eXBlID09IE5HWF9IVFRQX0ZBU1RDR0lfU1RET1VUICovCisKICAgICAgICAgc3RhcnQgPSB1LT5oZWFkZXJfaW4ucG9zOwogCiAgICAgICAgIGlmICh1LT5oZWFkZXJfaW4ucG9zICsgZi0+bGVuZ3RoIDwgdS0+aGVhZGVyX2luLmxhc3QpIHsKQEAgLTEyNzYsNiArMTM5Niw4IEBACiAgICAgICAgICAgICBsYXN0ID0gTlVMTDsKICAgICAgICAgfQogCisgICAgICAgIGYtPmhlYWRlciA9IDE7CisKICAgICAgICAgZm9yICggOzsgKSB7CiAKICAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcGFyc2VfaGVhZGVyX2xpbmUociwgJnUtPmhlYWRlcl9pbik7CkBAIC0xNTcyLDYgKzE2OTQsOCBAQAogICAgICAgICAgICAgICAgIGlmIChmLT5wb3MgKyBmLT5sZW5ndGggPD0gZi0+bGFzdCkgewogICAgICAgICAgICAgICAgICAgICBsaW5lLmxlbiA9IGYtPmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgZi0+cG9zICs9IGYtPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgZi0+bGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZi0+c3RhdGUgPSBuZ3hfaHR0cF9mYXN0Y2dpX3N0X3BhZGRpbmc7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgeyAKICAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSBmLT5sYXN0IC0gZi0+cG9zOwpAQCAtMTU3OSwyMCArMTcwMywyNCBAQAogICAgICAgICAgICAgICAgICAgICBmLT5wb3MgPSBmLT5sYXN0OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogVE9ETzogY29weSBzcGxpdCBzdGRlcnIgb3V0cHV0IGludG8gYnVmZmVyLAotICAgICAgICAgICAgICAgICAqICAgICAgIGNsZWFuIGl0IHVwCi0gICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGxpbmUuZGF0YVtsaW5lLmxlbiAtIDFdID09IExGCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGxpbmUuZGF0YVtsaW5lLmxlbiAtIDFdID09IENSCisgICAgICAgICAgICAgICAgICAgICAgIHx8IGxpbmUuZGF0YVtsaW5lLmxlbiAtIDFdID09ICcuJworICAgICAgICAgICAgICAgICAgICAgICB8fCBsaW5lLmRhdGFbbGluZS5sZW4gLSAxXSA9PSAnICcpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsaW5lLmxlbi0tOworICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHAtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYXN0Q0dJIHN0ZGVycjogJVYiLCAmbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFzdENHSSBzZW50IGluIHN0ZGVycjogXCIlVlwiIiwgJmxpbmUpOwogCiAgICAgICAgICAgICAgICAgaWYgKGYtPnBvcyA9PSBmLT5sYXN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZi0+c3RhdGUgPSBuZ3hfaHR0cF9mYXN0Y2dpX3N0X3ZlcnNpb247CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGYtPnN0YXRlID0gbmd4X2h0dHBfZmFzdGNnaV9zdF92ZXJzaW9uOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQo=