ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggMjBlNWQwYy4uNDM3MjJkNiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw1MiBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjQxIiBkYXRlPSIyMS4wNC4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8vMwN4gLXYuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgLXYgc3dpdGNoLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDXy8zA3sXOyckg1yBTU0kg1cTBzKPOztnIINDPxNrB0NLP08/XCivNz8cg0NLPydrPytTJIHNlZ21lbnRhdGlvbiBmYXVsdC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSBzZWdtZW50YXRpb24gZmF1bHQgbWF5IG9jY3VycmVkIGlmIHRoZSBTU0kgcGFnZSBoYXMgcmVtb3RlIHN1YnJlcXVlc3RzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9cgz8LSwcLP1MvFIEZhc3RDR0kuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiBGYXN0Q0dJIGhhbmRsaW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkg0NXU2CDLINDF0szP19nNIM3PxNXM0c0gzsUgwtnMINXLwdrBziDTINDPzc/d2MAKKy0td2l0aC1wZXJsX21vZHVsZXNfcGF0aD1QQVRIIMnMySDEydLFy9TJ19kgcGVybF9tb2R1bGVzLAor1M8gzsEg09TB0tTFINDSz8nTyM/Eycwgc2VnbWVudGF0aW9uIGZhdWx0LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgdGhlIHBlcmwgbW9kdWxlcyBwYXRoIHdhcyBub3Qgc2V0IHVzaW5nCistLXdpdGgtcGVybF9tb2R1bGVzX3BhdGg9UEFUSCBvciB0aGUgInBlcmxfbW9kdWxlcyIsIHRoZW4KK3RoZSBzZWdtZW50YXRpb24gZmF1bHQgd2FzIG9jY3VycmVkLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy40MCIgZGF0ZT0iMTkuMDQuMjAwNiI+CiAKIDxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5jIGIvc3JjL2NvcmUvbmdpbnguYwppbmRleCAxMmEyYjhhLi40ODQ5MTk4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5jCisrKyBiL3NyYy9jb3JlL25naW54LmMKQEAgLTE3NSw3ICsxNzUsOSBAQAogCiBuZ3hfdWludF90ICBuZ3hfbWF4X21vZHVsZTsKIAotc3RhdGljIGNoYXIgKm5neF9udWxsX2Vudmlyb24gPSBOVUxMOworc3RhdGljIG5neF91aW50X3QgIG5neF9zaG93X3ZlcnNpb247CisKK3N0YXRpYyBjaGFyICAqbmd4X251bGxfZW52aXJvbiA9IE5VTEw7CiAKIAogaW50IG5neF9jZGVjbApAQCAtMjI5LDYgKzIzMSwxNyBAQAogICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKKyAgICBpZiAobmd4X3Nob3dfdmVyc2lvbikgeworICAgICAgICBuZ3hfd3JpdGVfZmQobmd4X3N0ZGVycl9maWxlbm8sICJuZ2lueCB2ZXJzaW9uOiAiIE5HSU5YX1ZFUiBDUkxGLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJuZ2lueCB2ZXJzaW9uOiAiIE5HSU5YX1ZFUiBDUkxGKSAtIDEpOworCisjaWZkZWYgTkdYX0NPTVBJTEVSCisgICAgICAgIG5neF93cml0ZV9mZChuZ3hfc3RkZXJyX2ZpbGVubywgImJ1aWx0IGJ5ICIgTkdYX0NPTVBJTEVSIENSTEYsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YoImJ1aWx0IGJ5ICIgTkdYX0NPTVBJTEVSIENSTEYpIC0gMSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKG5neF90ZXN0X2NvbmZpZykgewogICAgICAgICBsb2ctPmxvZ19sZXZlbCA9IE5HWF9MT0dfSU5GTzsKICAgICB9CkBAIC00NzIsNiArNDg1LDEwIEBACiAKICAgICAgICAgc3dpdGNoIChhcmd2W2ldWzFdKSB7CiAKKyAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBuZ3hfc2hvd192ZXJzaW9uID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgbmd4X3Rlc3RfY29uZmlnID0gMTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggMmUxM2U2Yi4uZWMyMzA2MSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjQwIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy40MSIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfbG9nLmMgYi9zcmMvY29yZS9uZ3hfbG9nLmMKaW5kZXggOWUyMzU5Mi4uMjFkNTk3OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2xvZy5jCisrKyBiL3NyYy9jb3JlL25neF9sb2cuYwpAQCAtMTk4LDYgKzE5OCw4IEBACiAKICNpZiAoTkdYX1dJTjMyKQogCisgICAgbmd4X3N0ZGVycl9maWxlbm8gPSBHZXRTdGRIYW5kbGUoU1REX0VSUk9SX0hBTkRMRSk7CisKICAgICBuZ3hfc3RkZXJyLmZkID0gbmd4X29wZW5fZmlsZShOR1hfRVJST1JfTE9HX1BBVEgsIE5HWF9GSUxFX1JEV1IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfQ1JFQVRFX09SX09QRU58TkdYX0ZJTEVfQVBQRU5EKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9kYXZfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Rhdl9tb2R1bGUuYwppbmRleCBlNjBiOGNmLi5iNDFiZDhlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Rhdl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Rhdl9tb2R1bGUuYwpAQCAtMTE2LDEwICsxMTYsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfQkFEX1JFUVVFU1Q7Ci0gICAgICAgIH0KLQogICAgICAgICByLT5yZXF1ZXN0X2JvZHlfaW5fZmlsZV9vbmx5ID0gMTsKICAgICAgICAgci0+cmVxdWVzdF9ib2R5X2luX3BlcnNpc3RlbnRfZmlsZSA9IDE7CiAgICAgICAgIHItPnJlcXVlc3RfYm9keV9kZWxldGVfaW5jb21wbGV0ZV9maWxlID0gMTsKQEAgLTMxMiw2ICszMDgsOCBAQAogICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IDA7CiAgICAgfQogCiAgICAgci0+aGVhZGVyc19vdXQuc3RhdHVzID0gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IGY5MDFhNTIuLmZmNTUxMTggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTExNzMsNiArMTE3MywxMSBAQAogICAgICAgICBpZiAoZi0+dHlwZSA9PSBOR1hfSFRUUF9GQVNUQ0dJX1NUREVSUikgewogCiAgICAgICAgICAgICBpZiAoZi0+bGVuZ3RoKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoZi0+cG9zID09IGYtPmxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgbGluZS5kYXRhID0gZi0+cG9zOwogCiAgICAgICAgICAgICAgICAgaWYgKGYtPnBvcyArIGYtPmxlbmd0aCA8PSBmLT5sYXN0KSB7CkBAIC0xMjEyLDYgKzEyMTcsMTAgQEAKIAogICAgICAgICAvKiBmLT50eXBlID09IE5HWF9IVFRQX0ZBU1RDR0lfU1RET1VUICovCiAKKyAgICAgICAgaWYgKGYtPnBvcyA9PSBmLT5sYXN0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChwLT5mcmVlKSB7CiAgICAgICAgICAgICBiID0gcC0+ZnJlZS0+YnVmOwogICAgICAgICAgICAgcC0+ZnJlZSA9IHAtPmZyZWUtPm5leHQ7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCmluZGV4IDBkYmVjNTAuLjMzOTllNTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCkBAIC04Niw2ICs4NiwxMCBAQAogICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgKmNsbmY7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKIAorICAgIGlmIChyLT5tZXRob2QgIT0gTkdYX0hUVFBfR0VUICYmIHItPm1ldGhvZCAhPSBOR1hfSFRUUF9IRUFEKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfQUxMT1dFRDsKKyAgICB9CisKICAgICBpZiAoci0+dXJpLmRhdGFbci0+dXJpLmxlbiAtIDFdID09ICcvJykgewogICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgIH0KQEAgLTk1LDEwICs5OSw2IEBACiAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgfQogCi0gICAgaWYgKHItPm1ldGhvZCAhPSBOR1hfSFRUUF9HRVQgJiYgci0+bWV0aG9kICE9IE5HWF9IVFRQX0hFQUQpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX05PVF9BTExPV0VEOwotICAgIH0KLQogICAgIHJjID0gbmd4X2h0dHBfZGlzY2FyZF9ib2R5KHIpOwogCiAgICAgaWYgKHJjICE9IE5HWF9PSyAmJiByYyAhPSBOR1hfQUdBSU4pIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvcGVybC9uZ3hfaHR0cF9wZXJsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKaW5kZXggMTM2YmFjMy4uYWEwZTQxZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9wZXJsL25neF9odHRwX3BlcmxfbW9kdWxlLmMKQEAgLTQ4Myw4ICs0ODMsMTAgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoY2YtPmN5Y2xlLCAmcG1jZi0+bW9kdWxlcykgIT0gTkdYX09LKSB7Ci0gICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICBpZiAocG1jZi0+bW9kdWxlcy5kYXRhKSB7CisgICAgICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoY2YtPmN5Y2xlLCAmcG1jZi0+bW9kdWxlcykgIT0gTkdYX09LKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KICAgICB9CiAKICAgICBQRVJMX1NZU19JTklUKCZuZ3hfYXJnYywgJm5neF9hcmd2KTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCmluZGV4IDExYzE2MzIuLjFiMWU5NjMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwpAQCAtNjcsMTcgKzY3LDE4IEBACiAgICAgICAgICAgICAgICAgci0+bWV0aG9kX2VuZCA9IHAgLSAxOwogICAgICAgICAgICAgICAgIG0gPSByLT5yZXF1ZXN0X3N0YXJ0OwogCi0gICAgICAgICAgICAgICAgaWYgKHAgLSBtID09IDMpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHAgLSBtKSB7CiAKKyAgICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdID09ICdHJyAmJiBtWzFdID09ICdFJyAmJiBtWzJdID09ICdUJykgewogICAgICAgICAgICAgICAgICAgICAgICAgci0+bWV0aG9kID0gTkdYX0hUVFBfR0VUOwogCiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobVswXSA9PSAnUCcgJiYgbVsxXSA9PSAnVScgJiYgbVsyXSA9PSAnVCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHItPm1ldGhvZCA9IE5HWF9IVFRQX1BVVDsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCAtIG0gPT0gNCkgewotCisgICAgICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PSAnUCcgJiYgbVsxXSA9PSAnTycKICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1bMl0gPT0gJ1MnICYmIG1bM10gPT0gJ1QnKQogICAgICAgICAgICAgICAgICAgICB7CkBAIC04OCwyMiArODksMjMgQEAKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgci0+bWV0aG9kID0gTkdYX0hUVFBfSEVBRDsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCAtIG0gPT0gNSkgewotCisgICAgICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PSAnTScgJiYgbVsxXSA9PSAnSycKICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1bMl0gPT0gJ0MnICYmIG1bM10gPT0gJ08nICYmIG1bNF0gPT0gJ0wnKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByLT5tZXRob2QgPSBOR1hfSFRUUF9NS0NPTDsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCAtIG0gPT0gNikgewotCisgICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PSAnRCcgJiYgbVsxXSA9PSAnRScgJiYgbVsyXSA9PSAnTCcKICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1bM10gPT0gJ0UnICYmIG1bNF0gPT0gJ1QnICYmIG1bNV0gPT0gJ0UnKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICByLT5tZXRob2QgPSBOR1hfSFRUUF9ERUxFVEU7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19zcGFjZXNfYmVmb3JlX3VyaTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCA2YmJhZjQ0Li42MTVhZTc1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0xMjE4LDcgKzEyMTgsOSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHItPm1ldGhvZCA9PSBOR1hfSFRUUF9QT1NUICYmIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA9PSAtMSkgeworICAgIGlmIChyLT5tZXRob2QgJiAoTkdYX0hUVFBfUE9TVHxOR1hfSFRUUF9QVVQpCisgICAgICAgICYmIHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA9PSAtMSkKKyAgICB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgUE9TVCBtZXRob2Qgd2l0aG91dCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyIik7CiAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfTEVOR1RIX1JFUVVJUkVEKTsKQEAgLTE0MzIsNyArMTQzNCw2IEBACiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIG5neF9odHRwX3NwZWNpYWxfcmVzcG9uc2VfaGFuZGxlcihyLCByYykpOwotCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxNTQsMTkgKzIxNTUsMTEgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2ludF90IGVycm9yKQogewotICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7Ci0gICAgbmd4X2h0dHBfY2xlYW51cF90ICAqY2xuOworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCiAgICAgYyA9IHItPmNvbm5lY3Rpb247Ci0gICAgciA9IHItPm1haW47CiAKLSAgICBmb3IgKGNsbiA9IHItPmNsZWFudXA7IGNsbjsgY2xuID0gY2xuLT5uZXh0KSB7Ci0gICAgICAgIGlmIChjbG4tPmhhbmRsZXIpIHsKLSAgICAgICAgICAgIGNsbi0+aGFuZGxlcihjbG4tPmRhdGEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbmd4X2h0dHBfcmVxdWVzdF9kb25lKHIsIGVycm9yKTsKKyAgICBuZ3hfaHR0cF9yZXF1ZXN0X2RvbmUoci0+bWFpbiwgZXJyb3IpOwogICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiB9CiAKQEAgLTIxNzcsNiArMjE3MCw3IEBACiAgICAgbmd4X2xvZ190ICAgICAgICAgICAgICAgICAgKmxvZzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgbjsKICAgICBzdHJ1Y3QgbGluZ2VyICAgICAgICAgICAgICAgbGluZ2VyOworICAgIG5neF9odHRwX2NsZWFudXBfdCAgICAgICAgICpjbG47CiAgICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqbG9nX2hhbmRsZXI7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgKmNsY2Y7CkBAIC0yMTkxLDYgKzIxODUsMTIgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGZvciAoY2xuID0gci0+Y2xlYW51cDsgY2xuOyBjbG4gPSBjbG4tPm5leHQpIHsKKyAgICAgICAgaWYgKGNsbi0+aGFuZGxlcikgeworICAgICAgICAgICAgY2xuLT5oYW5kbGVyKGNsbi0+ZGF0YSk7CisgICAgICAgIH0KKyAgICB9CisKICNpZiAoTkdYX1NUQVRfU1RVQikKIAogICAgIGlmIChyLT5zdGF0X3JlYWRpbmcpIHsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zaG1lbS5jIGIvc3JjL29zL3VuaXgvbmd4X3NobWVtLmMKaW5kZXggNjZkZjFiYi4uZjdmODMxZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NobWVtLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NobWVtLmMKQEAgLTEzLDggKzEzLDkgQEAKIG5neF9pbnRfdAogbmd4X3NobV9hbGxvYyhuZ3hfc2htX3QgKnNobSkKIHsKLSAgICBzaG0tPmFkZHIgPSBtbWFwKE5VTEwsIHNobS0+c2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfQU5PTnxNQVBfU0hBUkVELCAtMSwgMCk7CisgICAgc2htLT5hZGRyID0gKHVfY2hhciAqKSBtbWFwKE5VTEwsIHNobS0+c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9BTk9OfE1BUF9TSEFSRUQsIC0xLCAwKTsKIAogICAgIGlmIChzaG0tPmFkZHIgPT0gTUFQX0ZBSUxFRCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCkBAIC0yOSw3ICszMCw3IEBACiB2b2lkCiBuZ3hfc2htX2ZyZWUobmd4X3NobV90ICpzaG0pCiB7Ci0gICAgaWYgKG11bm1hcChzaG0tPmFkZHIsIHNobS0+c2l6ZSkgPT0gLTEpIHsKKyAgICBpZiAobXVubWFwKCh2b2lkICopIHNobS0+YWRkciwgc2htLT5zaXplKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHNobS0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgIm11bm1hcCglcCwgJXV6KSBmYWlsZWQiLCBzaG0tPmFkZHIsIHNobS0+c2l6ZSk7CiAgICAgfQpAQCAtNTAsNyArNTEsOCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIHNobS0+YWRkciA9IG1tYXAoTlVMTCwgc2htLT5zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIHNobS0+YWRkciA9ICh1X2NoYXIgKikgbW1hcChOVUxMLCBzaG0tPnNpemUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfU0hBUkVELCBmZCwgMCk7CiAKICAgICBpZiAoc2htLT5hZGRyID09IE1BUF9GQUlMRUQpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLApAQCAtNjksNyArNzEsNyBAQAogdm9pZAogbmd4X3NobV9mcmVlKG5neF9zaG1fdCAqc2htKQogewotICAgIGlmIChtdW5tYXAoc2htLT5hZGRyLCBzaG0tPnNpemUpID09IC0xKSB7CisgICAgaWYgKG11bm1hcCgodm9pZCAqKSBzaG0tPmFkZHIsIHNobS0+c2l6ZSkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBzaG0tPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICJtdW5tYXAoJXAsICV1eikgZmFpbGVkIiwgc2htLT5hZGRyLCBzaG0tPnNpemUpOwogICAgIH0K