ZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCA1ZmZiYzZjLi41ZGFjMTk5IDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9hbGxvYy5oIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9maWxlcy5oIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9jaGFubmVsLmggXAotICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3NoYXJlZC5oIFwKKyAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zaG1lbS5oIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9wcm9jZXNzLmggXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3NldHByb2N0aXRsZS5oIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9hdG9taWMuaCBcCkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zZW5kLmMgXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9jaGFubmVsLmMgXAotICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X3NoYXJlZC5jIFwKKyAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zaG1lbS5jIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9wcm9jZXNzLmMgXAogICAgICAgICAgICAgc3JjL29zL3VuaXgvbmd4X2RhZW1vbi5jIFwKICAgICAgICAgICAgIHNyYy9vcy91bml4L25neF9zZXRwcm9jdGl0bGUuYyBcCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZXJybm8uaCBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X2FsbG9jLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9maWxlcy5oIFwKLSAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc2hhcmVkLmggXAorICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9zaG1lbS5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oIFwKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmggXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF90aHJlYWQuaCBcCkBAIC0yMDcsNiArMjA3LDcgQEAKICAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfZXJybm8uYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X2FsbG9jLmMgXAogICAgICAgICAgICAgc3JjL29zL3dpbjMyL25neF9maWxlcy5jIFwKKyAgICAgICAgICAgIHNyYy9vcy93aW4zMi9uZ3hfc2htZW0uYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3RpbWUuYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3MuYyBcCiAgICAgICAgICAgICBzcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5jIFwKZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggNzJlYjg3OS4uN2VmNGRiZiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw2MSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjI0IiBkYXRlPSIwMS4wMi4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJ3b3JrYXJvdW5kIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/CyM/EIM/bycLLySDXIGtxdWV1ZSDXzyBGcmVlQlNELgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorZm9yIGJ1ZyBpbiBGcmVlQlNEIGtxdWV1ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivP1NfF1Cwg08/axMHXwcXN2cogxMnSxcvUydfPyiBwb3N0X2FjdGlvbiwg1MXQxdLYIM7FINDF0sXEwaPU09Egy8zJxc7U1S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyBhIHJlc3BvbnNlIGdlbmVyYXRlZCBieSB0aGUgInBvc3RfYWN0aW9uIiBkaXJlY3RpdmUgaXMgbm90IHRyYW5zZmVycmVkCit0byBhIGNsaWVudC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivQ0skgydPQz8zY2s/Xwc7JySDCz8zY28/HzyDLz8zJ3sXT1NfBIMzPxy3GwcrMz9cg0NLPydPIz8TJzMEg1dTF3svBINDBzdHUyS4gCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbWVtb3J5IGxlYWtzIHdlcmUgb2NjdXJpbmcgaWYgbWFueSBsb2cgZmlsZXMgd2VyZSB1c2VkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9fO1NXSySDPxM7Px88gbG9jYXRpb24g0sHCz9TBzMEg1M/M2MvPINDF0tfB0SDEydLFy9TJ18EgcHJveHlfcmVkaXJlY3QuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgZmlyc3QgInByb3h5X3JlZGlyZWN0IiBkaXJlY3RpdmUgd2FzIHdvcmtpbmcgaW5zaWRlIG9uZSBsb2NhdGlvbi4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivOwSA2NC3CydTO2cgg0MzB1MbP0s3ByCDQ0skg09TB0tTFIM3PxyDQ0s/J2s/K1Mkgc2VnbWVudGF0aW9uIGZhdWx0LAorxdPMySDJ09DPzNjaz9fBzM/T2CDCz8zY28/FIMvPzMneydPU188gyc2jziDXIMTJ0sXL1MnXwcggc2VydmVyX25hbWU7CivP28nCy8Eg0M/R18nMwdPYINcgMC4zLjE4LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorb24gNjQtYml0IHBsYXRmb3JtcyBzZWdtZW50YXRpb24gZmF1bHQgbWF5IG9jY3VycmVkIG9uIHN0YXJ0CitpZiB0aGUgbWFueSBuYW1lcyB3ZXJlIHVzZWQgaW4gdGhlICJzZXJ2ZXJfbmFtZSIgZGlyZWN0aXZlczsKK2J1ZyBhcHBlYXJlZCBpbiAwLjMuMTguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjIzIiBkYXRlPSIyNC4wMS4yMDA2Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDA5MTJhYzUuLmMyZjk3MzcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yMyIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMjQiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2FycmF5LmMgYi9zcmMvY29yZS9uZ3hfYXJyYXkuYwppbmRleCBiNjE2N2FmLi4xYjlmN2NiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfYXJyYXkuYworKysgYi9zcmMvY29yZS9uZ3hfYXJyYXkuYwpAQCAtOCw3ICs4LDggQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLW5neF9hcnJheV90ICpuZ3hfYXJyYXlfY3JlYXRlKG5neF9wb29sX3QgKnAsIG5neF91aW50X3Qgbiwgc2l6ZV90IHNpemUpCituZ3hfYXJyYXlfdCAqCituZ3hfYXJyYXlfY3JlYXRlKG5neF9wb29sX3QgKnAsIG5neF91aW50X3Qgbiwgc2l6ZV90IHNpemUpCiB7CiAgICAgbmd4X2FycmF5X3QgKmE7CiAKQEAgLTMxLDcgKzMyLDggQEAKIH0KIAogCi12b2lkIG5neF9hcnJheV9kZXN0cm95KG5neF9hcnJheV90ICphKQordm9pZAorbmd4X2FycmF5X2Rlc3Ryb3kobmd4X2FycmF5X3QgKmEpCiB7CiAgICAgbmd4X3Bvb2xfdCAgKnA7CiAKQEAgLTQ3LDcgKzQ5LDggQEAKIH0KIAogCi12b2lkICpuZ3hfYXJyYXlfcHVzaChuZ3hfYXJyYXlfdCAqYSkKK3ZvaWQgKgorbmd4X2FycmF5X3B1c2gobmd4X2FycmF5X3QgKmEpCiB7CiAgICAgdm9pZCAgICAgICAgKmVsdCwgKm5ldzsKICAgICBzaXplX3QgICAgICAgc2l6ZTsKQEAgLTkyLDcgKzk1LDggQEAKIH0KIAogCi12b2lkICpuZ3hfYXJyYXlfcHVzaF9uKG5neF9hcnJheV90ICphLCBuZ3hfdWludF90IG4pCit2b2lkICoKK25neF9hcnJheV9wdXNoX24obmd4X2FycmF5X3QgKmEsIG5neF91aW50X3QgbikKIHsKICAgICB2b2lkICAgICAgICAqZWx0LCAqbmV3OwogICAgIHNpemVfdCAgICAgICBzaXplOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCmluZGV4IDU4OWViMGUuLmFiMDk3YzAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKQEAgLTY3MCwyMCArNjcwLDkgQEAKIAogICAgIG5hbWUtPmxlbiA9IGN5Y2xlLT5yb290LmxlbiArIG9sZC5sZW47CiAKLSAgICBpZiAoY3ljbGUtPmNvbm5lY3Rpb25zKSB7Ci0gICAgICAgIG5hbWUtPmRhdGEgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCBuYW1lLT5sZW4gKyAxKTsKLSAgICAgICAgaWYgKG5hbWUtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuICBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgLyogdGhlIGluaXRfY3ljbGUgKi8KLQotICAgICAgICBuYW1lLT5kYXRhID0gbmd4X2FsbG9jKG5hbWUtPmxlbiArIDEsIGN5Y2xlLT5sb2cpOwotICAgICAgICBpZiAobmFtZS0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gIE5HWF9FUlJPUjsKLSAgICAgICAgfQorICAgIG5hbWUtPmRhdGEgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCBuYW1lLT5sZW4gKyAxKTsKKyAgICBpZiAobmFtZS0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAgTkdYX0VSUk9SOwogICAgIH0KIAogICAgIHAgPSBuZ3hfY3B5bWVtKG5hbWUtPmRhdGEsIGN5Y2xlLT5yb290LmRhdGEsIGN5Y2xlLT5yb290LmxlbiksCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggZDkyNGVjNS4uNjA3OGQ4OSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtOTksNyArOTksOCBAQAogI2VuZGlmCiAKICNkZWZpbmUgbmd4X2FsaWduKGQsIGEpICAgICAoKChkKSArIChhIC0gMSkpICYgfihhIC0gMSkpCi0jZGVmaW5lIG5neF9hbGlnbl9wdHIocCwgYSkgKHVfY2hhciAqKSAoKCh1aW50cHRyX3QpIChwKSArIChhIC0gMSkpICYgfihhIC0gMSkpCisjZGVmaW5lIG5neF9hbGlnbl9wdHIocCwgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHVfY2hhciAqKSAoKCh1aW50cHRyX3QpIChwKSArICgodWludHB0cl90KSBhIC0gMSkpICYgfigodWludHB0cl90KSBhIC0gMSkpCiAKIAogI2RlZmluZSBuZ3hfYWJvcnQgICAgICAgYWJvcnQKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IDkzYjQzYzQuLjc1NjA0MjggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtNzIyLDkgKzcyMiw3IEBACiAgICAgICAgIHx8IGVyciA9PSBOR1hfRVBJUEUKICNlbmRpZgogICAgICAgICB8fCBlcnIgPT0gTkdYX0VOT1RDT05OCi0jaWYgIShOR1hfQ1JJVF9FVElNRURPVVQpCiAgICAgICAgIHx8IGVyciA9PSBOR1hfRVRJTUVET1VUCi0jZW5kaWYKICAgICAgICAgfHwgZXJyID09IE5HWF9FQ09OTlJFRlVTRUQKICAgICAgICAgfHwgZXJyID09IE5HWF9FSE9TVFVOUkVBQ0gpCiAgICAgewpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvcmUuaCBiL3NyYy9jb3JlL25neF9jb3JlLmgKaW5kZXggMzgzOTVjYi4uNDZlODhkZiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvcmUuaAorKysgYi9zcmMvY29yZS9uZ3hfY29yZS5oCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8bmd4X3RpbWUuaD4KICNpbmNsdWRlIDxuZ3hfc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmd4X3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmd4X3NoYXJlZC5oPgorI2luY2x1ZGUgPG5neF9zaG1lbS5oPgogI2luY2x1ZGUgPG5neF9wcm9jZXNzLmg+CiAjaW5jbHVkZSA8bmd4X3VzZXIuaD4KICNpbmNsdWRlIDxuZ3hfc3RyaW5nLmg+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuYyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCmluZGV4IGUxM2JjZDguLjRiZmY4MjggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKK3N0YXRpYyB2b2lkIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKG5neF9jb25mX3QgKmNvbmYpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfY21wX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqc2ExLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMik7CiBzdGF0aWMgdm9pZCBuZ3hfY2xlYW5fb2xkX2N5Y2xlcyhuZ3hfZXZlbnRfdCAqZXYpOwogCkBAIC00MCwxNyArNDEsMTggQEAKIG5neF9jeWNsZV90ICoKIG5neF9pbml0X2N5Y2xlKG5neF9jeWNsZV90ICpvbGRfY3ljbGUpCiB7Ci0gICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAqcnY7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgaSwgbiwgZmFpbGVkOwotICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAgKmxvZzsKLSAgICBuZ3hfY29uZl90ICAgICAgICAgICAgICAgICBjb25mOwotICAgIG5neF9wb29sX3QgICAgICAgICAgICAgICAgKnBvb2w7Ci0gICAgbmd4X2N5Y2xlX3QgICAgICAgICAgICAgICAqY3ljbGUsICoqb2xkOwotICAgIG5neF9saXN0X3BhcnRfdCAgICAgICAgICAgKnBhcnQ7Ci0gICAgbmd4X29wZW5fZmlsZV90ICAgICAgICAgICAqZmlsZTsKLSAgICBuZ3hfbGlzdGVuaW5nX3QgICAgICAgICAgICpscywgKm5sczsKLSAgICBuZ3hfY29yZV9jb25mX3QgICAgICAgICAgICpjY2Y7Ci0gICAgbmd4X2NvcmVfbW9kdWxlX3QgICAgICAgICAqbW9kdWxlOworICAgIHZvaWQgICAgICAgICAgICAgICAqcnY7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICBpLCBuLCBmYWlsZWQ7CisgICAgbmd4X2xvZ190ICAgICAgICAgICpsb2c7CisgICAgbmd4X2NvbmZfdCAgICAgICAgICBjb25mOworICAgIG5neF9wb29sX3QgICAgICAgICAqcG9vbDsKKyAgICBuZ3hfY3ljbGVfdCAgICAgICAgKmN5Y2xlLCAqKm9sZDsKKyAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgKnBhcnQ7CisgICAgbmd4X29wZW5fZmlsZV90ICAgICpmaWxlOworICAgIG5neF9saXN0ZW5pbmdfdCAgICAqbHMsICpubHM7CisgICAgbmd4X2NvcmVfY29uZl90ICAgICpjY2Y7CisgICAgbmd4X2NvcmVfbW9kdWxlX3QgICptb2R1bGU7CisKIAogICAgIGxvZyA9IG9sZF9jeWNsZS0+bG9nOwogCkBAIC02OSwxMSArNzEsMjAgQEAKICAgICBjeWNsZS0+cG9vbCA9IHBvb2w7CiAgICAgY3ljbGUtPmxvZyA9IGxvZzsKICAgICBjeWNsZS0+b2xkX2N5Y2xlID0gb2xkX2N5Y2xlOwotICAgIGN5Y2xlLT5jb25mX2ZpbGUgPSBvbGRfY3ljbGUtPmNvbmZfZmlsZTsKICAgICBjeWNsZS0+cm9vdC5sZW4gPSBzaXplb2YoTkdYX1BSRUZJWCkgLSAxOwogICAgIGN5Y2xlLT5yb290LmRhdGEgPSAodV9jaGFyICopIE5HWF9QUkVGSVg7CiAKIAorICAgIGN5Y2xlLT5jb25mX2ZpbGUubGVuID0gb2xkX2N5Y2xlLT5jb25mX2ZpbGUubGVuOworICAgIGN5Y2xlLT5jb25mX2ZpbGUuZGF0YSA9IG5neF9wYWxsb2MocG9vbCwgb2xkX2N5Y2xlLT5jb25mX2ZpbGUubGVuICsgMSk7CisgICAgaWYgKGN5Y2xlLT5jb25mX2ZpbGUuZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZ3hfY3B5c3RybihjeWNsZS0+Y29uZl9maWxlLmRhdGEsIG9sZF9jeWNsZS0+Y29uZl9maWxlLmRhdGEsCisgICAgICAgICAgICAgICAgb2xkX2N5Y2xlLT5jb25mX2ZpbGUubGVuICsgMSk7CisKKwogICAgIG4gPSBvbGRfY3ljbGUtPnBhdGhlcy5uZWx0cyA/IG9sZF9jeWNsZS0+cGF0aGVzLm5lbHRzIDogMTA7CiAKICAgICBjeWNsZS0+cGF0aGVzLmVsdHMgPSBuZ3hfcGNhbGxvYyhwb29sLCBuICogc2l6ZW9mKG5neF9wYXRoX3QgKikpOwpAQCAtOTksNyArMTEwLDcgQEAKICAgICB9CiAKICAgICBpZiAobmd4X2xpc3RfaW5pdCgmY3ljbGUtPm9wZW5fZmlsZXMsIHBvb2wsIG4sIHNpemVvZihuZ3hfb3Blbl9maWxlX3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgewogICAgICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE2OCw2ICsxNzksMjIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisKKyNpZiAwCisgICAgY3ljbGUtPnNobS5zaXplID0gLyogU1RVQiAqLyBuZ3hfcGFnZXNpemU7CisgICAgY3ljbGUtPnNobS5sb2cgPSBsb2c7CisKKyAgICBpZiAobmd4X3NobV9hbGxvYygmY3ljbGUtPnNobSkgIT0gTkdYX09LKSB7CisgICAgICAgIG5neF9kZXN0cm95X3Bvb2woY29uZi50ZW1wX3Bvb2wpOworICAgICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjeWNsZS0+c2htX2xhc3QgPSBjeWNsZS0+c2htLmFkZHI7CisgICAgY3ljbGUtPnNobV9lbmQgPSBjeWNsZS0+c2htLmFkZHIgKyBjeWNsZS0+c2htLnNpemU7CisjZW5kaWYKKworCiAgICAgY29uZi5jdHggPSBjeWNsZS0+Y29uZl9jdHg7CiAgICAgY29uZi5jeWNsZSA9IGN5Y2xlOwogICAgIGNvbmYucG9vbCA9IHBvb2w7CkBAIC0xODAsOCArMjA3LDcgQEAKICNlbmRpZgogCiAgICAgaWYgKG5neF9jb25mX3BhcnNlKCZjb25mLCAmY3ljbGUtPmNvbmZfZmlsZSkgIT0gTkdYX0NPTkZfT0spIHsKLSAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjb25mLnRlbXBfcG9vbCk7Ci0gICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKCZjb25mKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0yMDMsOCArMjI5LDcgQEAKICAgICAgICAgICAgIGlmIChtb2R1bGUtPmluaXRfY29uZihjeWNsZSwgY3ljbGUtPmNvbmZfY3R4W25neF9tb2R1bGVzW2ldLT5pbmRleF0pCiAgICAgICAgICAgICAgICAgPT0gTkdYX0NPTkZfRVJST1IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjb25mLnRlbXBfcG9vbCk7Ci0gICAgICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKKyAgICAgICAgICAgICAgICBuZ3hfZGVzdHJveV9jeWNsZV9wb29scygmY29uZik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM5Nyw2ICs0MjIsNyBAQAogICAgICAgICB9CiAgICAgfQogCisKICAgICBpZiAoZmFpbGVkKSB7CiAKICAgICAgICAgLyogcm9sbGJhY2sgdGhlIG5ldyBjeWNsZSBjb25maWd1cmF0aW9uICovCkBAIC00MjksOCArNDU1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfdGVzdF9jb25maWcpIHsKLSAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2woY29uZi50ZW1wX3Bvb2wpOwotICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKKyAgICAgICAgICAgIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKCZjb25mKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKQEAgLTQ0Nyw4ICs0NzIsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjb25mLnRlbXBfcG9vbCk7Ci0gICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgIG5neF9kZXN0cm95X2N5Y2xlX3Bvb2xzKCZjb25mKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC01MzMsMTYgKzU1NywxNiBAQAogCiAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjb25mLnRlbXBfcG9vbCk7CiAKLSAgICBpZiAob2xkX2N5Y2xlLT5jb25uZWN0aW9ucyA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIGFuIG9sZCBjeWNsZSBpcyBhbiBpbml0IGN5Y2xlICovCisgICAgaWYgKG5neF9wcm9jZXNzID09IE5HWF9QUk9DRVNTX01BU1RFUiB8fCBuZ3hfaXNfaW5pdF9jeWNsZShvbGRfY3ljbGUpKSB7CisKKyAgICAgICAgaWYgKG9sZF9jeWNsZS0+c2htLmFkZHIpIHsKKyAgICAgICAgICAgIG5neF9zaG1fZnJlZSgmb2xkX2N5Y2xlLT5zaG0pOworICAgICAgICB9CisKICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChvbGRfY3ljbGUtPnBvb2wpOwogICAgICAgICByZXR1cm4gY3ljbGU7CiAgICAgfQogCi0gICAgaWYgKG5neF9wcm9jZXNzID09IE5HWF9QUk9DRVNTX01BU1RFUikgewotICAgICAgICBuZ3hfZGVzdHJveV9wb29sKG9sZF9jeWNsZS0+cG9vbCk7Ci0gICAgICAgIHJldHVybiBjeWNsZTsKLSAgICB9CiAKICAgICBpZiAobmd4X3RlbXBfcG9vbCA9PSBOVUxMKSB7CiAgICAgICAgIG5neF90ZW1wX3Bvb2wgPSBuZ3hfY3JlYXRlX3Bvb2woMTI4LCBjeWNsZS0+bG9nKTsKQEAgLTU4Niw2ICs2MTAsMTUgQEAKIH0KIAogCitzdGF0aWMgdm9pZAorbmd4X2Rlc3Ryb3lfY3ljbGVfcG9vbHMobmd4X2NvbmZfdCAqY29uZikKK3sKKyAgICBuZ3hfc2htX2ZyZWUoJmNvbmYtPmN5Y2xlLT5zaG0pOworICAgIG5neF9kZXN0cm95X3Bvb2woY29uZi0+dGVtcF9wb29sKTsKKyAgICBuZ3hfZGVzdHJveV9wb29sKGNvbmYtPnBvb2wpOworfQorCisKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9jbXBfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyICpzYTEsIHN0cnVjdCBzb2NrYWRkciAqc2EyKQogewpAQCAtNjIzLDcgKzY1Niw3IEBACiAgICAgbmd4X2ZpbGVfdCAgICAgICAgZmlsZTsKICAgICBuZ3hfY29yZV9jb25mX3QgICpjY2YsICpvbGRfY2NmOwogCi0gICAgaWYgKCFuZ3hfdGVzdF9jb25maWcgJiYgb2xkX2N5Y2xlICYmIG9sZF9jeWNsZS0+Y29uZl9jdHggPT0gTlVMTCkgeworICAgIGlmICghbmd4X3Rlc3RfY29uZmlnICYmIG5neF9pc19pbml0X2N5Y2xlKG9sZF9jeWNsZSkpIHsKIAogICAgICAgICAvKgogICAgICAgICAgKiBkbyBub3QgY3JlYXRlIHRoZSBwaWQgZmlsZSBpbiB0aGUgZmlyc3Qgbmd4X2luaXRfY3ljbGUoKSBjYWxsCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuaCBiL3NyYy9jb3JlL25neF9jeWNsZS5oCmluZGV4IGNiZjhjN2IuLmIyOWNmMzQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5oCkBAIC0zMiw2ICszMiwxMCBAQAogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAqZnJlZV9jb25uZWN0aW9uczsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIGZyZWVfY29ubmVjdGlvbl9uOwogCisgICAgbmd4X3NobV90ICAgICAgICAgICAgICAgICBzaG07CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICpzaG1fbGFzdDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgKnNobV9lbmQ7CisKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgIGxpc3RlbmluZzsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgIHBhdGhlczsKICAgICBuZ3hfbGlzdF90ICAgICAgICAgICAgICAgIG9wZW5fZmlsZXM7CkBAIC05MCw2ICs5NCw5IEBACiB9IG5neF9jb3JlX3Rsc190OwogCiAKKyNkZWZpbmUgbmd4X2lzX2luaXRfY3ljbGUob2xkKSAgKG9sZCAmJiBvbGQtPmNvbmZfY3R4ID09IE5VTEwpCisKKwogbmd4X2N5Y2xlX3QgKm5neF9pbml0X2N5Y2xlKG5neF9jeWNsZV90ICpvbGRfY3ljbGUpOwogbmd4X2ludF90IG5neF9jcmVhdGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9jeWNsZV90ICpvbGRfY3ljbGUpOwogdm9pZCBuZ3hfZGVsZXRlX3BpZGZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuYyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwppbmRleCBhMDIyOWIyLi5lYjBlODZkIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCkBAIC0yMjEsNiArMjIxLDQ2IEBACiB9CiAKIAordm9pZCAqCituZ3hfc2hhbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICB1X2NoYXIgICpwOworCisgICAgaWYgKHNpemUgPCBzaXplb2YoaW50KSB8fCAoc2l6ZSAmIDEpKSB7CisgICAgICAgIHAgPSBuZ3hfY3ljbGUtPnNobV9sYXN0OworCisgICAgfSBlbHNlIHsKKyAgICAgICAgcCA9IG5neF9hbGlnbl9wdHIobmd4X2N5Y2xlLT5zaG1fbGFzdCwgTkdYX0FMSUdOTUVOVCk7CisgICAgfQorCisgICAgaWYgKChzaXplX3QpIChuZ3hfY3ljbGUtPnNobV9lbmQgLSBwKSA+PSBzaXplKSB7CisgICAgICAgIG5neF9jeWNsZS0+c2htX2xhc3QgPSBwICsgc2l6ZTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfQorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBuZ3hfY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9uIG9mICV1eiBieXRlcyBpbiBzaGFyZWQgbWVtb3J5IGZhaWxlZCwgIgorICAgICAgICAgICAgICAgICAgIm9ubHkgJXV6IGFyZSBhdmFpbGFibGUiLAorICAgICAgICAgICAgICAgICAgc2l6ZSwgbmd4X2N5Y2xlLT5zaG1fZW5kIC0gbmd4X2N5Y2xlLT5zaG1fbGFzdCk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCit2b2lkICoKK25neF9zaGNhbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwOworCisgICAgcCA9IG5neF9zaGFsbG9jKHNpemUpOworICAgIGlmIChwKSB7CisgICAgICAgIG5neF9tZW16ZXJvKHAsIHNpemUpOworICAgIH0KKworICAgIHJldHVybiBwOworfQorCisKIG5neF9wb29sX2NsZWFudXBfdCAqCiBuZ3hfcG9vbF9jbGVhbnVwX2FkZChuZ3hfcG9vbF90ICpwLCBzaXplX3Qgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuaCBiL3NyYy9jb3JlL25neF9wYWxsb2MuaAppbmRleCAyMzk3MjgxLi44NWU3N2Y1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmgKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5oCkBAIC03MSw2ICs3MSwxMCBAQAogdm9pZCAqbmd4X3BjYWxsb2Mobmd4X3Bvb2xfdCAqcG9vbCwgc2l6ZV90IHNpemUpOwogbmd4X2ludF90IG5neF9wZnJlZShuZ3hfcG9vbF90ICpwb29sLCB2b2lkICpwKTsKIAordm9pZCAqbmd4X3NoYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCAqbmd4X3NoY2FsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgbmd4X3NoZnJlZSh2b2lkICpwKTsKKwogCiBuZ3hfcG9vbF9jbGVhbnVwX3QgKm5neF9wb29sX2NsZWFudXBfYWRkKG5neF9wb29sX3QgKnAsIHNpemVfdCBzaXplKTsKIHZvaWQgbmd4X3Bvb2xfY2xlYW51cF9maWxlKHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IDY3MmVhYzIuLmYzYjE5YTcgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTQxNCwxMSArNDE0LDEyIEBACiBuZ3hfZXZlbnRfbW9kdWxlX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIHZvaWQgICAgICAgICAgICAgICoqKmNmOworICAgIHVfY2hhciAgICAgICAgICAgICAgKnNoYXJlZDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICBzaXplOwogICAgIG5neF9ldmVudF9jb25mX3QgICAgKmVjZjsKICAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CisgICAgbmd4X3NobV90ICAgICAgICAgICAgc2htOwogI2lmICEoTkdYX1dJTjMyKQotICAgIGNoYXIgICAgICAgICAgICAgICAgKnNoYXJlZDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICBzaXplOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgIGxpbWl0OwogICAgIHN0cnVjdCBybGltaXQgICAgICAgIHJsbXQ7CiAjZW5kaWYKQEAgLTQ2MSw2ICs0NjIsOCBAQAogICAgICAgICB9CiAgICAgfQogCisjZW5kaWYgLyogIShOR1hfV0lOMzIpICovCisKIAogICAgIGlmIChjY2YtPm1hc3RlciA9PSAwIHx8IG5neF9hY2NlcHRfbXV0ZXhfcHRyKSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CkBAIC00ODMsMTEgKzQ4NiwxNSBAQAogCiAjZW5kaWYKIAotICAgIHNoYXJlZCA9IG5neF9jcmVhdGVfc2hhcmVkX21lbW9yeShzaXplLCBjeWNsZS0+bG9nKTsKLSAgICBpZiAoc2hhcmVkID09IE5VTEwpIHsKKyAgICBzaG0uc2l6ZSA9IHNpemU7CisgICAgc2htLmxvZyA9IGN5Y2xlLT5sb2c7CisKKyAgICBpZiAobmd4X3NobV9hbGxvYygmc2htKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKKyAgICBzaGFyZWQgPSBzaG0uYWRkcjsKKwogICAgIG5neF9hY2NlcHRfbXV0ZXhfcHRyID0gKG5neF9hdG9taWNfdCAqKSBzaGFyZWQ7CiAgICAgbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDEgKiAxMjgpOwogCkBAIC01MDgsOCArNTE1LDYgQEAKICAgICAgICAgICAgICAgICAgICAiY291bnRlcjogJXAsICVkIiwKICAgICAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAqbmd4X2Nvbm5lY3Rpb25fY291bnRlcik7CiAKLSNlbmRpZiAvKiAhKE5HWF9XSU4zMikgKi8KLQogICAgIHJldHVybiBOR1hfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2J1c3lfbG9jay5jCmluZGV4IDFiMDlhZDkuLjJkMGJhZDUgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9idXN5X2xvY2suYwpAQCAtMjAsNyArMjAsNiBAQAogICogTkdYX0FHQUlOOiAgdGhlIGFsbCBidXN5IGxvY2tzIGFyZSBoZWxkIGJ1dCB3ZSB3aWxsIHdhaXQgdGhlIHNwZWNpZmllZCB0aW1lCiAgKiBOR1hfQlVTWTogICBjdHgtPnRpbWVyID09IDA6IHRoZXJlIGFyZSBtYW55IHRoZSBidXN5IGxvY2tzCiAgKiAgICAgICAgICAgICBjdHgtPnRpbWVyICE9IDA6IHRoZXJlIGFyZSBtYW55IHRoZSB3YWl0aW5nIGxvY2tzCi0gKiBOR1hfRVJST1I6ICBhbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRoZSBtdXRleCBsb2NraW5nCiAgKi8KIAogbmd4X2ludF90CkBAIC0zNiw2ICszNSw3IEBACiAKICAgICBpZiAoYmwtPmJ1c3kgPCBibC0+bWF4X2J1c3kpIHsKICAgICAgICAgYmwtPmJ1c3krKzsKKwogICAgICAgICByYyA9IE5HWF9PSzsKIAogICAgIH0gZWxzZSBpZiAoY3R4LT50aW1lciAmJiBibC0+d2FpdGluZyA8IGJsLT5tYXhfd2FpdGluZykgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggZjYzZTI4OC4uYzg1ZjU4NyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBwbGNmLT5yZWRpcmVjdHMtPm5lbHRzOyBpKyspIHsKLSAgICAgICAgcmMgPSBwci0+aGFuZGxlcihyLCBoLCBwcmVmaXgsIHByKTsKKyAgICAgICAgcmMgPSBwcltpXS5oYW5kbGVyKHIsIGgsIHByZWZpeCwgJnByW2ldKTsKIAogICAgICAgICBpZiAocmMgIT0gTkdYX0RFQ0xJTkVEKSB7CiAgICAgICAgICAgICByZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCBhNzM0NDhiLi4yNzg0OTIxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTE4ODAsMjQgKzE4ODAsMjkgQEAKICAgICAgICAgbHMtPmNvbmYuc25kYnVmID0gLTE7CiAgICAgfQogCi0gICAgaWYgKGNvbmYtPnNlcnZlcl9uYW1lcy5uZWx0cyA9PSAwKSB7Ci0gICAgICAgIHNuID0gbmd4X2FycmF5X3B1c2goJmNvbmYtPnNlcnZlcl9uYW1lcyk7Ci0gICAgICAgIGlmIChzbiA9PSBOVUxMKSB7CisgICAgaWYgKGNvbmYtPnNlcnZlcl9uYW1lLmRhdGEgPT0gTlVMTCkgeworICAgICAgICBjb25mLT5zZXJ2ZXJfbmFtZS5kYXRhID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgTkdYX01BWEhPU1ROQU1FTEVOKTsKKyAgICAgICAgaWYgKGNvbmYtPnNlcnZlcl9uYW1lLmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgc24tPm5hbWUuZGF0YSA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIE5HWF9NQVhIT1NUTkFNRUxFTik7Ci0gICAgICAgIGlmIChzbi0+bmFtZS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZXRob3N0bmFtZSgoY2hhciAqKSBzbi0+bmFtZS5kYXRhLCBOR1hfTUFYSE9TVE5BTUVMRU4pID09IC0xKSB7CisgICAgICAgIGlmIChnZXRob3N0bmFtZSgoY2hhciAqKSBjb25mLT5zZXJ2ZXJfbmFtZS5kYXRhLCBOR1hfTUFYSE9TVE5BTUVMRU4pCisgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgewogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdldGhvc3RuYW1lKCkgZmFpbGVkIik7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBzbi0+bmFtZS5sZW4gPSBuZ3hfc3RybGVuKHNuLT5uYW1lLmRhdGEpOworICAgICAgICBjb25mLT5zZXJ2ZXJfbmFtZS5sZW4gPSBuZ3hfc3RybGVuKGNvbmYtPnNlcnZlcl9uYW1lLmRhdGEpOworCisgICAgICAgIHNuID0gbmd4X2FycmF5X3B1c2goJmNvbmYtPnNlcnZlcl9uYW1lcyk7CisgICAgICAgIGlmIChzbiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBzbi0+bmFtZS5sZW4gPSBjb25mLT5zZXJ2ZXJfbmFtZS5sZW47CisgICAgICAgIHNuLT5uYW1lLmRhdGEgPSBjb25mLT5zZXJ2ZXJfbmFtZS5kYXRhOwogICAgICAgICBzbi0+Y29yZV9zcnZfY29uZiA9IGNvbmY7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggN2ZkZGRlMC4uOWVmNWE4MCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTUxOCw2ICsxNTE4LDggQEAKICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICBpZiAoY2xjZi0+cG9zdF9hY3Rpb24uZGF0YSkgeworICAgICAgICByLT5odHRwX3ZlcnNpb24gPSBOR1hfSFRUUF9WRVJTSU9OXzk7CisgICAgICAgIHItPmhlYWRlcl9vbmx5ID0gMTsKICAgICAgICAgbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJmNsY2YtPnBvc3RfYWN0aW9uLCBOVUxMKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9yZWFkdl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKaW5kZXggYjU1ZTJmMi4uNWMyYmI1YSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMKQEAgLTExMSw2ICsxMTEsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChuID09IDApIHsKKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBvbiBGcmVlQlNEIHJlY3YoKSBtYXkgcmV0dXJuIDAgb24gY2xvc2VkIHNvY2tldAorICAgICAgICAgICAgICAgICAgICAgKiBldmVuIGlmIGtxdWV1ZSByZXBvcnRlZCBhYm91dCBhdmFpbGFibGUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHJldHVybmVkIDAgd2hpbGUga2V2ZW50KCkgcmVwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCBhdmFpbGFibGUgYnl0ZXMiLCByZXYtPmF2YWlsYWJsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV2LT5lb2YgPSAxOworICAgICAgICAgICAgICAgICAgICByZXYtPmF2YWlsYWJsZSA9IDA7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9yZWN2LmMgYi9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jCmluZGV4IDBkMzg3MjkuLmE4YTM1MWEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9yZWN2LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3JlY3YuYwpAQCAtNzAsNiArNzAsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChuID09IDApIHsKKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBvbiBGcmVlQlNEIHJlY3YoKSBtYXkgcmV0dXJuIDAgb24gY2xvc2VkIHNvY2tldAorICAgICAgICAgICAgICAgICAgICAgKiBldmVuIGlmIGtxdWV1ZSByZXBvcnRlZCBhYm91dCBhdmFpbGFibGUgZGF0YQorICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdigpIHJldHVybmVkIDAgd2hpbGUga2Vldm50KCkgcmVwb3J0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCBhdmFpbGFibGUgYnl0ZXMiLCByZXYtPmF2YWlsYWJsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgcmV2LT5lb2YgPSAxOworICAgICAgICAgICAgICAgICAgICByZXYtPmF2YWlsYWJsZSA9IDA7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgcmV0dXJuIG47CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zaGFyZWQuYyBiL3NyYy9vcy91bml4L25neF9zaGFyZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBiNWY2MC4uMDAwMDAwMAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2Ci0gKi8KLQotCi0jaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgotI2luY2x1ZGUgPG5neF9jb3JlLmg+Ci0KLQotI2lmIChOR1hfSEFWRV9NQVBfQU5PTikKLQotdm9pZCAqbmd4X2NyZWF0ZV9zaGFyZWRfbWVtb3J5KHNpemVfdCBzaXplLCBuZ3hfbG9nX3QgKmxvZykKLXsKLSAgICB2b2lkICAqcDsKLQotICAgIHAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTnxNQVBfU0hBUkVELCAtMSwgMCk7Ci0KLSAgICBpZiAocCA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgIm1tYXAoTUFQX0FOT058TUFQX1NIQVJFRCwgJXV6KSBmYWlsZWQiLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHA7Ci19Ci0KLSNlbGlmIChOR1hfSEFWRV9NQVBfREVWWkVSTykKLQotdm9pZCAqbmd4X2NyZWF0ZV9zaGFyZWRfbWVtb3J5KHNpemVfdCBzaXplLCBuZ3hfbG9nX3QgKmxvZykKLXsKLSAgICB2b2lkICAgICAgKnA7Ci0gICAgbmd4X2ZkX3QgICBmZDsKLQotICAgIGZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKTsKLQotICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJvcGVuKFwiL2Rldi96ZXJvXCIpIGZhaWxlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBwID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOwotCi0gICAgaWYgKHAgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJtbWFwKC9kZXYvemVybywgTUFQX1NIQVJFRCwgJXV6KSBmYWlsZWQiLCBzaXplKTsKLSAgICAgICAgcCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKGNsb3NlKGZkKSA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJjbG9zZShcIi9kZXYvemVyb1wiKSBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcDsKLX0KLQotI2VsaWYgKE5HWF9IQVZFX1NZU1ZTSE0pCi0KLSNpbmNsdWRlIDxzeXMvaXBjLmg+Ci0jaW5jbHVkZSA8c3lzL3NobS5oPgotCi0KLXZvaWQgKm5neF9jcmVhdGVfc2hhcmVkX21lbW9yeShzaXplX3Qgc2l6ZSwgbmd4X2xvZ190ICpsb2cpCi17Ci0gICAgaW50ICAgIGlkOwotICAgIHZvaWQgICpwOwotCi0gICAgaWQgPSBzaG1nZXQoSVBDX1BSSVZBVEUsIHNpemUsIChTSE1fUnxTSE1fV3xJUENfQ1JFQVQpKTsKLQotICAgIGlmIChpZCA9PSAtMSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICJzaG1nZXQoJXV6KSBmYWlsZWQiLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBsb2csIDAsICJzaG1nZXQgaWQ6ICVkIiwgaWQpOwotCi0gICAgcCA9IHNobWF0KGlkLCBOVUxMLCAwKTsKLQotICAgIGlmIChwID09ICh2b2lkICopIC0xKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sICJzaG1hdCgpIGZhaWxlZCIpOwotICAgICAgICBwID0gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoc2htY3RsKGlkLCBJUENfUk1JRCwgTlVMTCkgPT0gLTEpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9lcnJubywgInNobWN0bChJUENfUk1JRCkgZmFpbGVkIik7Ci0gICAgICAgIHAgPSBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBwOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zaGFyZWQuaCBiL3NyYy9vcy91bml4L25neF9zaGFyZWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjllNGEzMy4uMDAwMDAwMAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc2hhcmVkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2Ci0gKi8KLQotCi0jaWZuZGVmIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCi0jZGVmaW5lIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCi0KLQotI2luY2x1ZGUgPG5neF9jb25maWcuaD4KLSNpbmNsdWRlIDxuZ3hfY29yZS5oPgotCi0KLXZvaWQgKm5neF9jcmVhdGVfc2hhcmVkX21lbW9yeShzaXplX3Qgc2l6ZSwgbmd4X2xvZ190ICpsb2cpOwotCi0KLSNlbmRpZiAvKiBfTkdYX1NIQVJFRF9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NobWVtLmMgYi9zcmMvb3MvdW5peC9uZ3hfc2htZW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmRmMWJiCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NobWVtLmMKQEAgLTAsMCArMSwxMjMgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKKyAqLworCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKworCisjaWYgKE5HWF9IQVZFX01BUF9BTk9OKQorCituZ3hfaW50X3QKK25neF9zaG1fYWxsb2Mobmd4X3NobV90ICpzaG0pCit7CisgICAgc2htLT5hZGRyID0gbW1hcChOVUxMLCBzaG0tPnNpemUsCisgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX0FOT058TUFQX1NIQVJFRCwgLTEsIDApOworCisgICAgaWYgKHNobS0+YWRkciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgc2htLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAibW1hcChNQVBfQU5PTnxNQVBfU0hBUkVELCAldXopIGZhaWxlZCIsIHNobS0+c2l6ZSk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCit2b2lkCituZ3hfc2htX2ZyZWUobmd4X3NobV90ICpzaG0pCit7CisgICAgaWYgKG11bm1hcChzaG0tPmFkZHIsIHNobS0+c2l6ZSkgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICJtdW5tYXAoJXAsICV1eikgZmFpbGVkIiwgc2htLT5hZGRyLCBzaG0tPnNpemUpOworICAgIH0KK30KKworI2VsaWYgKE5HWF9IQVZFX01BUF9ERVZaRVJPKQorCituZ3hfaW50X3QKK25neF9zaG1fYWxsb2Mobmd4X3NobV90ICpzaG0pCit7CisgICAgbmd4X2ZkX3QgIGZkOworCisgICAgZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworCisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgc2htLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAib3BlbihcIi9kZXYvemVyb1wiKSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBzaG0tPmFkZHIgPSBtbWFwKE5VTEwsIHNobS0+c2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsIGZkLCAwKTsKKworICAgIGlmIChzaG0tPmFkZHIgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIm1tYXAoL2Rldi96ZXJvLCBNQVBfU0hBUkVELCAldXopIGZhaWxlZCIsIHNobS0+c2l6ZSk7CisgICAgfQorCisgICAgaWYgKGNsb3NlKGZkKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgImNsb3NlKFwiL2Rldi96ZXJvXCIpIGZhaWxlZCIpOworICAgIH0KKworICAgIHJldHVybiAoc2htLT5hZGRyID09IE1BUF9GQUlMRUQpID8gTkdYX0VSUk9SIDogTkdYX09LOworfQorCisKK3ZvaWQKK25neF9zaG1fZnJlZShuZ3hfc2htX3QgKnNobSkKK3sKKyAgICBpZiAobXVubWFwKHNobS0+YWRkciwgc2htLT5zaXplKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIm11bm1hcCglcCwgJXV6KSBmYWlsZWQiLCBzaG0tPmFkZHIsIHNobS0+c2l6ZSk7CisgICAgfQorfQorCisjZWxpZiAoTkdYX0hBVkVfU1lTVlNITSkKKworI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc2htLmg+CisKKworbmd4X2ludF90CituZ3hfc2htX2FsbG9jKG5neF9zaG1fdCAqc2htKQoreworICAgIGludCAgaWQ7CisKKyAgICBpZCA9IHNobWdldChJUENfUFJJVkFURSwgc2htLT5zaXplLCAoU0hNX1J8U0hNX1d8SVBDX0NSRUFUKSk7CisKKyAgICBpZiAoaWQgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICJzaG1nZXQoJXV6KSBmYWlsZWQiLCBzaG0tPnNpemUpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgc2htLT5sb2csIDAsICJzaG1nZXQgaWQ6ICVkIiwgaWQpOworCisgICAgc2htLT5hZGRyID0gc2htYXQoaWQsIE5VTEwsIDApOworCisgICAgaWYgKHNobS0+YWRkciA9PSAodm9pZCAqKSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sICJzaG1hdCgpIGZhaWxlZCIpOworICAgIH0KKworICAgIGlmIChzaG1jdGwoaWQsIElQQ19STUlELCBOVUxMKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgInNobWN0bChJUENfUk1JRCkgZmFpbGVkIik7CisgICAgfQorCisgICAgcmV0dXJuIChzaG0tPmFkZHIgPT0gKHZvaWQgKikgLTEpID8gTkdYX0VSUk9SIDogTkdYX09LOworfQorCisKK3ZvaWQKK25neF9zaG1fZnJlZShuZ3hfc2htX3QgKnNobSkKK3sKKyAgICBpZiAoc2htZHQoc2htLT5hZGRyKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgInNobWR0KCVwKSBmYWlsZWQiLCBzaG0tPmFkZHIpOworICAgIH0KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc2htZW0uaCBiL3NyYy9vcy91bml4L25neF9zaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzU0ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvb3MvdW5peC9uZ3hfc2htZW0uaApAQCAtMCwwICsxLDI2IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaWZuZGVmIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCisjZGVmaW5lIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1X2NoYXIgICAgICAqYWRkcjsKKyAgICBzaXplX3QgICAgICAgc2l6ZTsKKyAgICBuZ3hfbG9nX3QgICAqbG9nOworfSBuZ3hfc2htX3Q7CisKKworbmd4X2ludF90IG5neF9zaG1fYWxsb2Mobmd4X3NobV90ICpzaG0pOwordm9pZCBuZ3hfc2htX2ZyZWUobmd4X3NobV90ICpzaG0pOworCisKKyNlbmRpZiAvKiBfTkdYX1NIQVJFRF9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9zaGFyZWQuaCBiL3NyYy9vcy93aW4zMi9uZ3hfc2hhcmVkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTRhMzMuLjAwMDAwMDAKLS0tIGEvc3JjL29zL3dpbjMyL25neF9zaGFyZWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLQotLyoKLSAqIENvcHlyaWdodCAoQykgSWdvciBTeXNvZXYKLSAqLwotCi0KLSNpZm5kZWYgX05HWF9TSEFSRURfSF9JTkNMVURFRF8KLSNkZWZpbmUgX05HWF9TSEFSRURfSF9JTkNMVURFRF8KLQotCi0jaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgotI2luY2x1ZGUgPG5neF9jb3JlLmg+Ci0KLQotdm9pZCAqbmd4X2NyZWF0ZV9zaGFyZWRfbWVtb3J5KHNpemVfdCBzaXplLCBuZ3hfbG9nX3QgKmxvZyk7Ci0KLQotI2VuZGlmIC8qIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3NobWVtLmMgYi9zcmMvb3Mvd2luMzIvbmd4X3NobWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4ZmI2MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfc2htZW0uYwpAQCAtMCwwICsxLDU4IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisKKworLyoKKyAqIFRPRE86CisgKiAgICAgbWFwaW5nIG5hbWUgb3IgaW5oZXJpdGFibGUgaGFuZGxlCisgKi8KKworbmd4X2ludF90CituZ3hfc2htX2FsbG9jKG5neF9zaG1fdCAqc2htKQoreworICAgIHNobS0+aGFuZGxlID0gQ3JlYXRlRmlsZU1hcHBpbmcoSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIFBBR0VfUkVBRFdSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2htLT5zaXplLCBOVUxMKTsKKworICAgIGlmIChzaG0tPmhhbmRsZSA9PSBOVUxMKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgc2htLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAiQ3JlYXRlRmlsZU1hcHBpbmcoJXV6KSBmYWlsZWQiLCBzaG0tPnNpemUpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIHNobS0+YWRkciA9IE1hcFZpZXdPZkZpbGUoc2htLT5oYW5kbGUsIEZJTEVfTUFQX1dSSVRFLCAwLCAwLCAwKTsKKworICAgIGlmIChzaG0tPmFkZHIgPT0gTlVMTCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgIk1hcFZpZXdPZkZpbGUoJXV6KSBmYWlsZWQiLCBzaG0tPnNpemUpOworCisgICAgICAgIGlmIChDbG9zZUhhbmRsZShzaG0tPmhhbmRsZSkgPT0gMCkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2xvc2VIYW5kbGUoKSBmYWlsZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCit2b2lkCituZ3hfc2htX2ZyZWUobmd4X3NobV90ICpzaG0pCit7CisgICAgaWYgKFVubWFwVmlld09mRmlsZShzaG0tPmFkZHIpID09IDApIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICJVbm1hcFZpZXdPZkZpbGUoJXApIGZhaWxlZCIsIHNobS0+YWRkcik7CisgICAgfQorCisgICAgaWYgKENsb3NlSGFuZGxlKHNobS0+aGFuZGxlKSA9PSAwKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgc2htLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAiQ2xvc2VIYW5kbGUoKSBmYWlsZWQiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3NobWVtLmggYi9zcmMvb3Mvd2luMzIvbmd4X3NobWVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmUzZTcxZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfc2htZW0uaApAQCAtMCwwICsxLDI3IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaWZuZGVmIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCisjZGVmaW5lIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1X2NoYXIgICAgICAqYWRkcjsKKyAgICBzaXplX3QgICAgICAgc2l6ZTsKKyAgICBIQU5ETEUgICAgICAgaGFuZGxlOworICAgIG5neF9sb2dfdCAgICpsb2c7Cit9IG5neF9zaG1fdDsKKworCituZ3hfaW50X3Qgbmd4X3NobV9hbGxvYyhuZ3hfc2htX3QgKnNobSk7Cit2b2lkIG5neF9zaG1fZnJlZShuZ3hfc2htX3QgKnNobSk7CisKKworI2VuZGlmIC8qIF9OR1hfU0hBUkVEX0hfSU5DTFVERURfICovCg==