ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggNmYxYTk1My4uMDU5NzA3MiAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTM0LDkgKzM0LDkgQEAKIGZpCiAKIAotY2FzZSAiJE5HWF9QTEFURk9STSIgaW4KK2Nhc2UgIiROR1hfTUFDSElORSIgaW4KIAotICAgICo6c3VuNHUpCisgICAgc3VuNHUgfCBzcGFyYyApCiAgICAgICAgICMgIi1tY3B1PXY5IiBlbmFibGVzIHRoZSAiY2FzYSIgYXNzZW1ibGVyIGluc3RydWN0aW9uCiAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtbWNwdT12OSIKICAgICA7OwpAQCAtODAsNiArODAsMTMgQEAKICAgICAgICAgQ1BVX09QVD0iLW1hcmNoPW9wdGVyb24iCiAgICAgOzsKIAorICAgIHNwYXJjMzIpCisgICAgICAgICMgYnVpbGQgMzItYml0IFVsdHJhU3BhcmMgYmluYXJ5CisgICAgICAgIENQVV9PUFQ9Ii1tMzIiCisgICAgICAgIENPUkVfTElOSz0iJENPUkVfTElOSyAtbTMyIgorICAgICAgICBDQ19BVVhfRkxBR1M9IiRDQ19BVVhfRkxBR1MgLW0zMiIKKyAgICA7OworCiAgICAgc3BhcmM2NCkKICAgICAgICAgIyBidWlsZCA2NC1iaXQgVWx0cmFTcGFyYyBiaW5hcnkKICAgICAgICAgQ1BVX09QVD0iLW02NCIKZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCBjOTRiNmU1Li41OTQwYjI4IDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC0xOTQsNiArMTk0LDExIEBACiAgICAgSFRUUF9TUkNTPSIkSFRUUF9TUkNTICRIVFRQX0ZBU1RDR0lfU1JDUyIKIGZpCiAKK2lmIFsgJEhUVFBfTUVNQ0FDSEVEID0gWUVTIF07IHRoZW4KKyAgICBIVFRQX01PRFVMRVM9IiRIVFRQX01PRFVMRVMgJEhUVFBfTUVNQ0FDSEVEX01PRFVMRSIKKyAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfTUVNQ0FDSEVEX1NSQ1MiCitmaQorCiBpZiBbICRIVFRQX0VNUFRZX0dJRiA9IFlFUyBdOyB0aGVuCiAgICAgSFRUUF9NT0RVTEVTPSIkSFRUUF9NT0RVTEVTICRIVFRQX0VNUFRZX0dJRl9NT0RVTEUiCiAgICAgSFRUUF9TUkNTPSIkSFRUUF9TUkNTICRIVFRQX0VNUFRZX0dJRl9TUkNTIgpkaWZmIC0tZ2l0IGEvYXV0by9vcHRpb25zIGIvYXV0by9vcHRpb25zCmluZGV4IDJkY2NiNzMuLjZjMjQ5YjEgMTAwNjQ0Ci0tLSBhL2F1dG8vb3B0aW9ucworKysgYi9hdXRvL29wdGlvbnMKQEAgLTYxLDYgKzYxLDcgQEAKIEhUVFBfUkVXUklURT1ZRVMKIEhUVFBfUFJPWFk9WUVTCiBIVFRQX0ZBU1RDR0k9WUVTCitIVFRQX01FTUNBQ0hFRD1ZRVMKIEhUVFBfRU1QVFlfR0lGPVlFUwogCiAjIFNUVUIKQEAgLTEzOCwxMSArMTM5LDEyIEBACiAgICAgICAgIC0td2l0aG91dC1odHRwX2F1dG9pbmRleF9tb2R1bGUpIEhUVFBfQVVUT0lOREVYPU5PICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3N0YXR1c19tb2R1bGUpICAgIEhUVFBfU1RBVFVTPU5PICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX2dlb19tb2R1bGUpICAgICAgIEhUVFBfR0VPPU5PICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIC0td2l0aG91dC1odHRwX3JlZmVyZXIpICAgICAgICAgIEhUVFBfUkVGRVJFUj1OTyAgICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aG91dC1odHRwX3JlZmVyZXJfbW9kdWxlKSAgIEhUVFBfUkVGRVJFUj1OTyAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3Jld3JpdGVfbW9kdWxlKSAgIEhUVFBfUkVXUklURT1OTyAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3Byb3h5X21vZHVsZSkgICAgIEhUVFBfUFJPWFk9Tk8gICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX2Zhc3RjZ2lfbW9kdWxlKSAgIEhUVFBfRkFTVENHST1OTyAgICAgICAgICAgIDs7Ci0gICAgICAgIC0td2l0aG91dC1odHRwX2VwbXR5X2dpZl9tb2R1bGUpIEhUVFBfRU1QVFlfR0lGPU5PICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aG91dC1odHRwX21lbWNhY2hlZF9tb2R1bGUpIEhUVFBfTUVNQ0FDSEVEPU5PICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aG91dC1odHRwX2VtcHR5X2dpZl9tb2R1bGUpIEhUVFBfRU1QVFlfR0lGPU5PICAgICAgICAgIDs7CiAKICAgICAgICAgIyBTVFVCCiAgICAgICAgIC0td2l0aC1odHRwX3N0dWJfc3RhdHVzX21vZHVsZSkgIEhUVFBfU1RVQl9TVEFUVVM9WUVTICAgICAgIDs7CkBAIC0yMTMsNiArMjE1LDcgQEAKICAgLS13aXRob3V0LXBvbGxfbW9kdWxlICAgICAgICAgICAgICBkaXNhYmxlIHBvbGwgbW9kdWxlCiAKICAgLS13aXRoLWh0dHBfc3NsX21vZHVsZSAgICAgICAgICAgICBlbmFibGUgbmd4X2h0dHBfc3NsX21vZHVsZQorICAtLXdpdGgtaHR0cF9yZWFsaXBfbW9kdWxlICAgICAgICAgIGVuYWJsZSBuZ3hfaHR0cF9yZWFsaXBfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX2NoYXJzZXRfbW9kdWxlICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9jaGFyc2V0X21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9nemlwX21vZHVsZSAgICAgICAgIGRpc2FibGUgbmd4X2h0dHBfZ3ppcF9tb2R1bGUKICAgLS13aXRob3V0LWh0dHBfc3NpX21vZHVsZSAgICAgICAgICBkaXNhYmxlIG5neF9odHRwX3NzaV9tb2R1bGUKQEAgLTIyMSw5ICsyMjQsMTIgQEAKICAgLS13aXRob3V0LWh0dHBfYXV0aF9iYXNpY19tb2R1bGUgICBkaXNhYmxlIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX2F1dG9pbmRleF9tb2R1bGUgICAgZGlzYWJsZSBuZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlCiAgIC0td2l0aG91dC1odHRwX2dlb19tb2R1bGUgICAgICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9nZW9fbW9kdWxlCisgIC0td2l0aG91dC1odHRwX3JlZmVyZXJfbW9kdWxlICAgICAgZGlzYWJsZSBuZ3hfaHR0cF9yZWZlcmVyX21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9yZXdyaXRlX21vZHVsZSAgICAgIGRpc2FibGUgbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUKICAgLS13aXRob3V0LWh0dHBfcHJveHlfbW9kdWxlICAgICAgICBkaXNhYmxlIG5neF9odHRwX3Byb3h5X21vZHVsZQogICAtLXdpdGhvdXQtaHR0cF9mYXN0Y2dpX21vZHVsZSAgICAgIGRpc2FibGUgbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUKKyAgLS13aXRob3V0LWh0dHBfbWVtY2FjaGVkX21vZHVsZSAgICBkaXNhYmxlIG5neF9odHRwX21lbWNhY2hlZF9tb2R1bGUKKyAgLS13aXRob3V0LWh0dHBfZW1wdHlfZ2lmX21vZHVsZSAgICBkaXNhYmxlIG5neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUKIAogICAtLWh0dHAtbG9nLXBhdGg9UEFUSCAgICAgICAgICAgICAgIHNldCBwYXRoIHRvIHRoZSBodHRwIGFjY2VzcyBsb2cKICAgLS1odHRwLWNsaWVudC1ib2R5LXRlbXAtcGF0aD1QQVRIICBzZXQgcGF0aCB0byB0aGUgaHR0cCBjbGllbnQgcmVxdWVzdCBib2R5CmRpZmYgLS1naXQgYS9hdXRvL29zL2NvbmYgYi9hdXRvL29zL2NvbmYKaW5kZXggNTZiZGQyMi4uNGFkNzJkOCAxMDA2NDQKLS0tIGEvYXV0by9vcy9jb25mCisrKyBiL2F1dG8vb3MvY29uZgpAQCAtNjMsNCArNjMsOCBAQAogICAgICAgICBoYXZlPU5HWF9IQVZFX05PTkFMSUdORUQgLiBhdXRvL2hhdmUKICAgICA7OwogCisgICAgc3VuNHUgfCBpYTY0ICkKKyAgICAgICAgaGF2ZT1OR1hfQUxJR05NRU5UIHZhbHVlPTE2IC4gYXV0by9kZWZpbmUKKyAgICA7OworCiBlc2FjCmRpZmYgLS1naXQgYS9hdXRvL3NvdXJjZXMgYi9hdXRvL3NvdXJjZXMKaW5kZXggYzQzMTZkNy4uMGI5MjQ1ZCAxMDA2NDQKLS0tIGEvYXV0by9zb3VyY2VzCisrKyBiL2F1dG8vc291cmNlcwpAQCAtMzU1LDYgKzM1NSwxMCBAQAogSFRUUF9GQVNUQ0dJX1NSQ1M9c3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCiAKIAorSFRUUF9NRU1DQUNIRURfTU9EVUxFPW5neF9odHRwX21lbWNhY2hlZF9tb2R1bGUKK0hUVFBfTUVNQ0FDSEVEX1NSQ1M9c3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlLmMKKworCiBIVFRQX0VNUFRZX0dJRl9NT0RVTEU9bmd4X2h0dHBfZW1wdHlfZ2lmX21vZHVsZQogSFRUUF9FTVBUWV9HSUZfU1JDUz1zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYwogCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDAwMTYzM2EuLjdmNjg2ZWYgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksMTI5IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuMTIiIGRhdGU9IjI2LjExLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9InNlY3VyaXR5Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkgbmdpbnggwtnMINPPwtLBziDTIM3PxNXMxc0gbmd4X2h0dHBfcmVhbGlwX21vZHVsZSwg1M8g0NLJIMnT0M/M2NrP18HOyckKK8TJ0sXL1MnX2SAic2F0aXNmeV9hbnkgb24iIMTJ0sXL1MnX2SDEz9PU1dDBIMkgwdXUxc7UycbJy8HDyckgzsUg0sHCz9TBzMkuCivtz8TVzNggbmd4X2h0dHBfcmVhbGlwX21vZHVsZSDOxSDTz8LJ0sHM09EgySDOxSDTz8LJ0sHF1NPRINDPINXNz8zewc7JwC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIG5naW54IHdhcyBidWlsdCB3aXRoIHRoZSBuZ3hfaHR0cF9yZWFsaXBfbW9kdWxlIGFuZCB0aGUgInNhdGlzZnlfYW55IG9uIgorZGlyZWN0aXZlIHdhcyB1c2VkLCB0aGVuIGFjY2VzcyBhbmQgYXV0aG9yaXphdGlvbiBkaXJlY3RpdmVzIGRpZCBub3Qgd29yay4KK1RoZSBuZ3hfaHR0cF9yZWFsaXBfbW9kdWxlIHdhcyBub3QgYnVpbHQgYW5kIGlzIG5vdCBidWlsdCBieSBkZWZhdWx0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8nN0SDQxdLFzcXOzs/KICIkdGltZV9nbXQiIMnazcXOxc7PIM7BICIkdGltZV9sb2NhbCIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIiR0aW1lX2dtdCIgdmFyaWFibGUgbmFtZSB3YXMgY2hhbmdlZCB0byAiJHRpbWVfbG9jYWwiLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnX2SBwcm94eV9oZWFkZXJfYnVmZmVyX3NpemUgySBmYXN0Y2dpX2hlYWRlcl9idWZmZXJfc2l6ZQor0MXSxcnNxc7P18HO2SDTz8/U18XU09TXxc7OzyDXIHByb3h5X2J1ZmZlcl9zaXplIMkgZmFzdGNnaV9idWZmZXJfc2l6ZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicHJveHlfaGVhZGVyX2J1ZmZlcl9zaXplIiBhbmQgImZhc3RjZ2lfaGVhZGVyX2J1ZmZlcl9zaXplIiBkaXJlY3RpdmVzCit3YXMgcmVuYW1lZCB0byB0aGUgInByb3h5X2J1ZmZlcl9zaXplIiBhbmQgImZhc3RjZ2lfYnVmZmVyX3NpemUiIGRpcmVjdGl2ZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBwcm94eV9idWZmZXJpbmcuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInByb3h5X2J1ZmZlcmluZyIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8nazcXOxc7JxSDXINLBws/UxSDTIGFjY2VwdCBtdXRleCDQ0skgydPQz8zY2s/Xwc7JySDNxdTPxMEgcnRzaWc7CivP28nCy8Eg0M/R18nMwdPYINcgMC4zLjAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgY2hhbmdlcyBpbiBhY2NlcHQgbXV0ZXggIGhhbmRsaW5nIHdoZW4gdGhlICJydHNpZyIgbWV0aG9kIHdhcyB1c2VkOworYnVnIGFwcGVhcmVkIGluIDAuMy4wLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkgy8zJxc7UINDF0sXEwcwg09TSz8vVICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIg1yDawcfPzM/P18vFCivawdDSz9PBLCDUzyBuZ2lueCDUxdDF0tgg19nEwaPUIM/bycLL1SA0MTEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgY2xpZW50IHNlbnQgdGhlICJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZCIgaGVhZGVyIGxpbmUsIHRoZW4KK25naW54IHJldHVybnMgdGhlIDQxMSBlcnJvci4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivQ0skgzsHTzMXEz9fBzsnJIMTJ0sXL1MnX2SBhdXRoX2Jhc2ljINMg1dLP187RIGh0dHAg1yDT1NLPy8UKKyJXV1ctQXV0aGVudGljYXRlIiDawcfPzM/Xy8Egz9TXxdTBINfZ18/EyczT0SByZWFsbSDCxdog1MXL09TBICJCYXNpYyByZWFsbSIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgImF1dGhfYmFzaWMiIGRpcmVjdGl2ZSB3YXMgaW5oZXJpdGVkIGZyb20gdGhlIGh0dHAgbGV2ZWwsCit0aGVuIHRoZSByZWFsbSBpbiB0aGUgIldXVy1BdXRoZW50aWNhdGUiIGhlYWRlciBsaW5lIHdhcyB3aXRob3V0Cit0aGUgIkJhc2ljIHJlYWxtIiB0ZXh0LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8XTzMkg1yDEydLFy9TJ18UgYWNjZXNzX2xvZyDC2cwg0dfOzyDVy8Hawc4gxs/SzcHUIGNvbWJpbmVkLCDUzyDXIMzPxwor2sHQydPZ18HMydPYINDV09TZxSDT1NLPy8k7CivP28nCy8Eg0M/R18nMwdPYINcgMC4zLjguCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgImNvbWJpbmVkIiBmb3JtYXQgd2FzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZSAiYWNjZXNzX2xvZyIgZGlyZWN0aXZlLAordGhlbiB0aGUgZW1wdHkgbGluZXMgd2FzIHdyaXR0ZW4gdG8gdGhlIGxvZzsKK2J1ZyBhcHBlYXJlZCBpbiAwLjMuOC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDOxSDSwcLP1MHMIM7BINDMwdTGz9LNxSBzcGFyYyDQz8QgzMDC2c3JIE9TLCDL0s/NxSBTb2xhcmlzLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorbmdpbnggZGlkIG5vdCBydW4gb24gdGhlIHNwYXJjIHBsYXRmb3JtIHVuZGVyIGFueSBPUyBleGNlcHQgU29sYXJpcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivXIMTJ0sXL1MnXxSBpZiDUxdDF0tggzsUgztXWzs8g0sHaxMXM0dTYINDSz8LFzM/NINPU0s/L1SDXIMvB19ney8HIIMkKK9rBy9LZ18HA3dXAINPLz8LL1S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK25vdyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHBsYWNlIHNwYWNlIGJldHdlZW4gdGhlIHF1b3RlZCBzdHJpbmcgYW5kIGNsb3NpbmcKK2JyYWNrZXQgaW4gdGhlICJpZiIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzwvY2hhbmdlcz4KKworCiA8Y2hhbmdlcyB2ZXI9IjAuMy4xMSIgZGF0ZT0iMTUuMTEuMjAwNSI+CiAKIDxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KQEAgLTE3LDcgKzE0MCw3IEBACiDP28nCy8Eg0M/R18nMwdPYINcgMC4zLjEwLgogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgotbmdpbnggZGlkIG5vdCBwYXNzIHdoaWxlIHByb3h5aW5nIHRoZSBjbGllbnQgcmVxdWVzdCBoZWFkZXJzIGFuZCBib2R5OworbmdpbnggZGlkIG5vdCBwYXNzIHRoZSBjbGllbnQgcmVxdWVzdCBoZWFkZXJzIGFuZCBib2R5IHdoaWxlIHByb3h5aW5nOwogYnVnIGFwcGVhcmVkIGluIDAuMy4xMC4KIDwvcGFyYT4KIDwvY2hhbmdlPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguaCBiL3NyYy9jb3JlL25naW54LmgKaW5kZXggOTVkOTNjYy4uNDRiMTVmOSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguaAorKysgYi9zcmMvY29yZS9uZ2lueC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBfTkdJTlhfSF9JTkNMVURFRF8KIAogCi0jZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjExIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4xMiIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgogI2RlZmluZSBOR1hfT0xEUElEX0VYVCAgICAgIi5vbGRiaW4iCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfYnVmLmMgYi9zcmMvY29yZS9uZ3hfYnVmLmMKaW5kZXggYjdmNTk3ZC4uMzFkOTkwMyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2J1Zi5jCisrKyBiL3NyYy9jb3JlL25neF9idWYuYwpAQCAtMTUxLDYgKzE1MSwzNCBAQAogfQogCiAKK25neF9jaGFpbl90ICoKK25neF9jaGFpbl9nZXRfZnJlZV9idWYobmd4X3Bvb2xfdCAqcCwgbmd4X2NoYWluX3QgKipmcmVlKQoreworICAgIG5neF9jaGFpbl90ICAqY2w7CisKKyAgICBpZiAoKmZyZWUpIHsKKyAgICAgICAgY2wgPSAqZnJlZTsKKyAgICAgICAgKmZyZWUgPSBjbC0+bmV4dDsKKyAgICAgICAgY2wtPm5leHQgPSBOVUxMOworICAgICAgICByZXR1cm4gY2w7CisgICAgfQorCisgICAgY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhwKTsKKyAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+YnVmID0gbmd4X2NhbGxvY19idWYocCk7CisgICAgaWYgKGNsLT5idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+bmV4dCA9IE5VTEw7CisKKyAgICByZXR1cm4gY2w7Cit9CisKKwogdm9pZAogbmd4X2NoYWluX3VwZGF0ZV9jaGFpbnMobmd4X2NoYWluX3QgKipmcmVlLCBuZ3hfY2hhaW5fdCAqKmJ1c3ksCiAgICAgbmd4X2NoYWluX3QgKipvdXQsIG5neF9idWZfdGFnX3QgdGFnKQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2J1Zi5oIGIvc3JjL2NvcmUvbmd4X2J1Zi5oCmluZGV4IDQ3MWFiMTkuLjYyNWRiMmEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9idWYuaAorKysgYi9zcmMvY29yZS9uZ3hfYnVmLmgKQEAgLTEzMiw2ICsxMzIsNyBAQAogCiBuZ3hfaW50X3Qgbmd4X2NoYWluX2FkZF9jb3B5KG5neF9wb29sX3QgKnBvb2wsIG5neF9jaGFpbl90ICoqY2hhaW4sCiAgICAgbmd4X2NoYWluX3QgKmluKTsKK25neF9jaGFpbl90ICpuZ3hfY2hhaW5fZ2V0X2ZyZWVfYnVmKG5neF9wb29sX3QgKnAsIG5neF9jaGFpbl90ICoqZnJlZSk7CiB2b2lkIG5neF9jaGFpbl91cGRhdGVfY2hhaW5zKG5neF9jaGFpbl90ICoqZnJlZSwgbmd4X2NoYWluX3QgKipidXN5LAogICAgIG5neF9jaGFpbl90ICoqb3V0LCBuZ3hfYnVmX3RhZ190IHRhZyk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwppbmRleCBhY2VjMTMwLi5kODlmYTdmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCkBAIC03Nyw4ICs3Nyw4IEBACiAKICAgICAgICAgZmQgPSBuZ3hfb3Blbl9maWxlKGZpbGVuYW1lLT5kYXRhLCBOR1hfRklMRV9SRE9OTFksIE5HWF9GSUxFX09QRU4pOwogICAgICAgICBpZiAoZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlbmFtZS0+ZGF0YSk7CisgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9vcGVuX2ZpbGVfbiAiIFwiJXNcIiBmYWlsZWQiLCBmaWxlbmFtZS0+ZGF0YSk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtNDUxLDEyICs0NTEsMTggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfQkxPQ0tfU1RBUlQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgXCIlY1wiIGluICVzOiV1aSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoLCBjZi0+Y29uZl9maWxlLT5maWxlLm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPmNvbmZfZmlsZS0+bGluZSk7CisgICAgICAgICAgICBpZiAoY2ggPT0gJyknKSB7CisgICAgICAgICAgICAgICAgbGFzdF9zcGFjZSA9IDE7CisgICAgICAgICAgICAgICAgbmVlZF9zcGFjZSA9IDA7CiAKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgXCIlY1wiIGluICVzOiV1aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gsIGNmLT5jb25mX2ZpbGUtPmZpbGUubmFtZS5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmxpbmUpOworCisgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobGFzdF9zcGFjZSkgewpAQCAtMTE2Nyw2ICsxMTczLDIwIEBACiAKIAogY2hhciAqCituZ3hfY29uZl9kZXByZWNhdGVkKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQoreworICAgIG5neF9jb25mX2RlcHJlY2F0ZWRfdCAgKmQgPSBwb3N0OworCisgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfV0FSTiwgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgXCIlc1wiIGRpcmVjdGl2ZSBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgdGhlIFwiJXNcIiBkaXJlY3RpdmUgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgIGQtPm9sZF9uYW1lLCBkLT5uZXdfbmFtZSk7CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CisKKworY2hhciAqCiBuZ3hfY29uZl9jaGVja19udW1fYm91bmRzKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKQogewogICAgIG5neF9jb25mX251bV9ib3VuZHNfdCAgKmJvdW5kcyA9IHBvc3Q7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmggYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKaW5kZXggMmVmNTk1ZC4uZTE4NTlmOCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaApAQCAtMTg5LDYgKzE4OSwxMyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X2NvbmZfcG9zdF9oYW5kbGVyX3B0ICBwb3N0X2hhbmRsZXI7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICpvbGRfbmFtZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgKm5ld19uYW1lOworfSBuZ3hfY29uZl9kZXByZWNhdGVkX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9jb25mX3Bvc3RfaGFuZGxlcl9wdCAgcG9zdF9oYW5kbGVyOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgbG93OwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgaGlnaDsKIH0gbmd4X2NvbmZfbnVtX2JvdW5kc190OwpAQCAtMjA4LDYgKzIxNSw4IEBACiB9IG5neF9jb25mX2JpdG1hc2tfdDsKIAogCisKK2NoYXIgKiBuZ3hfY29uZl9kZXByZWNhdGVkKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIGNoYXIgKm5neF9jb25mX2NoZWNrX251bV9ib3VuZHMobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBvc3QsIHZvaWQgKmRhdGEpOwogCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25maWcuaCBiL3NyYy9jb3JlL25neF9jb25maWcuaAppbmRleCAzYjUxZTk2Li45NjU2OWI4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZmlnLmgKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCkBAIC03NiwzMiArNzYsMzAgQEAKIAogI2lmIDEKIC8qIFNUVUI6IGF1dG9jb25mICovCi10eXBlZGVmIGludCAgICAgICAgICAgICAgICBuZ3hfaW50X3Q7Ci10eXBlZGVmIHVfaW50ICAgICAgICAgICAgICBuZ3hfdWludF90OwotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgbmd4X2ZsYWdfdDsKLSNkZWZpbmUgTkdYX0lOVF9UX0xFTiAgICAgIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKK3R5cGVkZWYgaW50ICAgICAgICAgICAgIG5neF9pbnRfdDsKK3R5cGVkZWYgdV9pbnQgICAgICAgICAgIG5neF91aW50X3Q7Cit0eXBlZGVmIGludCAgICAgICAgICAgICBuZ3hfZmxhZ190OworI2RlZmluZSBOR1hfSU5UX1RfTEVOICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQogCiAjZWxzZQogCi10eXBlZGVmIGxvbmcgICAgICAgICAgICAgICBuZ3hfaW50X3Q7Ci10eXBlZGVmIHVfbG9uZyAgICAgICAgICAgICBuZ3hfdWludF90OwotdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgbmd4X2ZsYWdfdDsKLSNkZWZpbmUgTkdYX0lOVF9UX0xFTiAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDgiKSAtIDEKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgIG5neF9pbnRfdDsKK3R5cGVkZWYgdV9sb25nICAgICAgICAgIG5neF91aW50X3Q7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgICBuZ3hfZmxhZ190OworI2RlZmluZSBOR1hfSU5UX1RfTEVOICAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQogCiAjZW5kaWYKIAotI2RlZmluZSBOR1hfSU5UMzJfTEVOICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQotI2RlZmluZSBOR1hfSU5UNjRfTEVOICAgICAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQorI2RlZmluZSBOR1hfSU5UMzJfTEVOICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQorI2RlZmluZSBOR1hfSU5UNjRfTEVOICAgc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMQogCiAKLSNpZiAoTkdYX1NPTEFSSVMpCi0jZGVmaW5lIE5HWF9BTElHTiAgICAgICAoX01BWF9BTElHTk1FTlQgLSAxKQotI2Vsc2UKLS8qIFRPRE86IGF1dG9fY29uZiAqLwotI2RlZmluZSBOR1hfQUxJR04gICAgICAgKHNpemVvZih1bnNpZ25lZCBsb25nKSAtIDEpICAvKiBwbGF0Zm9ybSB3b3JkICovCisjaWZuZGVmIE5HWF9BTElHTk1FTlQKKyNkZWZpbmUgTkdYX0FMSUdOTUVOVCAgIHNpemVvZih1bnNpZ25lZCBsb25nKSAgICAvKiBwbGF0Zm9ybSB3b3JkICovCiAjZW5kaWYKIAotI2RlZmluZSBuZ3hfYWxpZ24ocCkgICAgKHVfY2hhciAqKSAoKCh1aW50cHRyX3QpIHAgKyBOR1hfQUxJR04pICYgfk5HWF9BTElHTikKKyNkZWZpbmUgbmd4X2FsaWduKHApICAgICh1X2NoYXIgKikgKCgodWludHB0cl90KSBwICsgKE5HWF9BTElHTk1FTlQgLSAxKSkgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KE5HWF9BTElHTk1FTlQgLSAxKSkKIAogCiAjZGVmaW5lIG5neF9hYm9ydCAgICAgICBhYm9ydApAQCAtMTA5LDcgKzEwNyw3IEBACiAKIC8qIFRPRE86IGF1dG9fY29uZjogbmd4X2lubGluZSAgIGlubGluZSBfX2lubGluZSBfX2lubGluZV9fICovCiAjaWZuZGVmIG5neF9pbmxpbmUKLSNkZWZpbmUgbmd4X2lubGluZSAgIGlubGluZQorI2RlZmluZSBuZ3hfaW5saW5lICAgICAgaW5saW5lCiAjZW5kaWYKIAogI2RlZmluZSBOR1hfQUNDRVBUX1RIUkVTSE9MRCAgIDEwMApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2luZXQuYyBiL3NyYy9jb3JlL25neF9pbmV0LmMKaW5kZXggZDQ0ZTMwMC4uZWU2OGZjMSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2luZXQuYworKysgYi9zcmMvY29yZS9uZ3hfaW5ldC5jCkBAIC0xMiw4ICsxMiw4IEBACiAKIC8qCiAgKiBuZ3hfc29ja19udG9wKCkgYW5kIG5neF9pbmV0X250b3AoKSBtYXkgYmUgaW1wbGVtZW50ZWQgYXMKLSAqICJuZ3hfc3ByaW50Zih0ZXh0LCAiJXVkLiV1ZC4ldWQuJXVkIiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSkiLAotICogaG93ZXZlciwgdGhleSB3ZXJlIGltcGxlbWVudGVkIGxvbmcgYmVmb3JlIHRoZSBuZ3hfc3ByaW50ZigpIGFwcGVhcmVkCisgKiAibmd4X3NwcmludGYodGV4dCwgIiV1ZC4ldWQuJXVkLiV1ZCIsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pIiwgaG93ZXZlciwKKyAqIHRoZXkgaGFkIGJlZW4gaW1wbGVtZW50ZWQgbG9uZyBiZWZvcmUgdGhlIG5neF9zcHJpbnRmKCkgaGFkIGFwcGVhcmVkCiAgKiBhbmQgdGhleSBhcmUgZmFzdGVyIGJ5IDEuNS0yLjUgdGltZXMsIHNvIGl0IGlzIHdvcnRoIHRvIGtlZXAgdGhlbS4KICAqCiAgKiBCeSB0aGUgd2F5LCB0aGUgaW1wbGVtZW50YXRpb24gdXNpbmcgbmd4X3NwcmludGYoKSBpcyBmYXN0ZXIgYnkgMi41LTMgdGltZXMKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuYyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwppbmRleCBkMWU3YmJkLi5hMWY5ZDU5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCkBAIC0yMCw5ICsyMCwxMCBAQAogCiAgICAgcC0+bGFzdCA9ICh1X2NoYXIgKikgcCArIHNpemVvZihuZ3hfcG9vbF90KTsKICAgICBwLT5lbmQgPSAodV9jaGFyICopIHAgKyBzaXplOworICAgIHAtPmN1cnJlbnQgPSBwOworICAgIHAtPmNoYWluID0gTlVMTDsKICAgICBwLT5uZXh0ID0gTlVMTDsKICAgICBwLT5sYXJnZSA9IE5VTEw7Ci0gICAgcC0+Y2hhaW4gPSBOVUxMOwogICAgIHAtPmNsZWFudXAgPSBOVUxMOwogICAgIHAtPmxvZyA9IGxvZzsKIApAQCAtOTEsNyArOTIsNyBAQAogICAgICAgICAmJiBzaXplIDw9IChzaXplX3QpIChwb29sLT5lbmQgLSAodV9jaGFyICopIHBvb2wpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAoc2l6ZV90KSBuZ3hfYWxpZ24oc2l6ZW9mKG5neF9wb29sX3QpKSkKICAgICB7Ci0gICAgICAgIGZvciAocCA9IHBvb2wsIG4gPSBwb29sLT5uZXh0OyAvKiB2b2lkICovOyBwID0gbiwgbiA9IG4tPm5leHQpIHsKKyAgICAgICAgZm9yIChwID0gcG9vbC0+Y3VycmVudDsgLyogdm9pZCAqLyA7IHAgPSBwLT5uZXh0KSB7CiAgICAgICAgICAgICBtID0gbmd4X2FsaWduKHAtPmxhc3QpOwogCiAgICAgICAgICAgICBpZiAoKHNpemVfdCkgKHAtPmVuZCAtIG0pID49IHNpemUpIHsKQEAgLTEwMCw3ICsxMDEsMTEgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG4gPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKChzaXplX3QpIChwLT5lbmQgLSBtKSA8IE5HWF9BTElHTk1FTlQpIHsKKyAgICAgICAgICAgICAgICBwLT5jdXJyZW50ID0gcC0+bmV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHAtPm5leHQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMTIsNiArMTE3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCisgICAgICAgIGlmIChwLT5jdXJyZW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHAtPmN1cnJlbnQgPSBuOworICAgICAgICB9CisKICAgICAgICAgcC0+bmV4dCA9IG47CiAgICAgICAgIG0gPSBuZ3hfYWxpZ24obi0+bGFzdCk7CiAgICAgICAgIG4tPmxhc3QgPSBtICsgc2l6ZTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuaCBiL3NyYy9jb3JlL25neF9wYWxsb2MuaAppbmRleCBiOGIxNjkyLi4zMDU5MGVlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmgKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5oCkBAIC00NCw2ICs0NCw3IEBACiBzdHJ1Y3Qgbmd4X3Bvb2xfcyB7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgKmxhc3Q7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgKmVuZDsKKyAgICBuZ3hfcG9vbF90ICAgICAgICAgICAqY3VycmVudDsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAqY2hhaW47CiAgICAgbmd4X3Bvb2xfdCAgICAgICAgICAgKm5leHQ7CiAgICAgbmd4X3Bvb2xfbGFyZ2VfdCAgICAgKmxhcmdlOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCmluZGV4IGQ4NjZmZmQuLmU0NzY2NjcgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogICAgIH0KIAogICAgIGVlLmV2ZW50cyA9IGV2ZW50cyB8IGZsYWdzOwotICAgIGVlLmRhdGEudTY0ID0gKHVpbnRwdHJfdCkgYyB8IGV2LT5pbnN0YW5jZTsKKyAgICBlZS5kYXRhLnB0ciA9ICh2b2lkICopICgodWludHB0cl90KSBjIHwgZXYtPmluc3RhbmNlKTsKIAogICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImVwb2xsIGFkZCBldmVudDogZmQ6JWQgb3A6JWQgZXY6JTA4WEQiLApAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgaWYgKGUtPmFjdGl2ZSkgewogICAgICAgICBvcCA9IEVQT0xMX0NUTF9NT0Q7CiAgICAgICAgIGVlLmV2ZW50cyA9IHByZXYgfCBmbGFnczsKLSAgICAgICAgZWUuZGF0YS51NjQgPSAodWludHB0cl90KSBjIHwgZXYtPmluc3RhbmNlOworICAgICAgICBlZS5kYXRhLnB0ciA9ICh2b2lkICopICgodWludHB0cl90KSBjIHwgZXYtPmluc3RhbmNlKTsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIG9wID0gRVBPTExfQ1RMX0RFTDsKQEAgLTMyNiw3ICszMjYsNyBAQAogICAgIHN0cnVjdCBlcG9sbF9ldmVudCAgZWU7CiAKICAgICBlZS5ldmVudHMgPSBFUE9MTElOfEVQT0xMT1VUfEVQT0xMRVQ7Ci0gICAgZWUuZGF0YS51NjQgPSAodWludHB0cl90KSBjIHwgYy0+cmVhZC0+aW5zdGFuY2U7CisgICAgZWUuZGF0YS5wdHIgPSAodm9pZCAqKSAoKHVpbnRwdHJfdCkgYyB8IGMtPnJlYWQtPmluc3RhbmNlKTsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZXBvbGwgYWRkIGNvbm5lY3Rpb246IGZkOiVkIGV2OiUwOFhEIiwgYy0+ZmQsIGVlLmV2ZW50cyk7CkBAIC0zNjcsNyArMzY3LDcgQEAKIAogICAgIG9wID0gRVBPTExfQ1RMX0RFTDsKICAgICBlZS5ldmVudHMgPSAwOwotICAgIGVlLmRhdGEudTY0ID0gMDsKKyAgICBlZS5kYXRhLnB0ciA9IE5VTEw7CiAKICAgICBpZiAoZXBvbGxfY3RsKGVwLCBvcCwgYy0+ZmQsICZlZSkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIG5neF9lcnJubywKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCBhMzQ3ZTFjLi42NzJlYWMyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC00OCw3ICs0OCw2IEBACiAKIAogbmd4X2F0b21pY190ICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXhfcHRyOwotbmd4X2F0b21pY190ICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXhfbGFzdF9vd25lcjsKIG5neF9hdG9taWNfdCAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4Owogbmd4X3VpbnRfdCAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfaGVsZDsKIG5neF9tc2VjX3QgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OwpAQCAtMjU1LDcgKzI1NCw3IEBACiAgICAgfQogCiAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgewotICAgICAgICAqbmd4X2FjY2VwdF9tdXRleCA9IDA7CisgICAgICAgICh2b2lkKSBuZ3hfYXRvbWljX2NtcF9zZXQobmd4X2FjY2VwdF9tdXRleCwgbmd4X3BpZCwgMCk7CiAgICAgfQogCiAgICAgaWYgKGRlbHRhKSB7CkBAIC00NzEsNyArNDcwLDYgQEAKICAgICAvKiBUT0RPOiBhZGp1c3QgY2FjaGUgbGluZSBzaXplLCAxMjggaXMgUDQgY2FjaGUgbGluZSBzaXplICovCiAKICAgICBzaXplID0gMTI4ICAgICAgICAgICAgLyogbmd4X2FjY2VwdF9tdXRleCAqLwotICAgICAgICAgICArIDEyOCAgICAgICAgICAvKiBuZ3hfYWNjZXB0X211dGV4X2xhc3Rfb3duZXIgKi8KICAgICAgICAgICAgKyAxMjg7ICAgICAgICAgLyogbmd4X2Nvbm5lY3Rpb25fY291bnRlciAqLwogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCkBAIC00OTEsMTcgKzQ4OSwxNiBAQAogICAgIH0KIAogICAgIG5neF9hY2NlcHRfbXV0ZXhfcHRyID0gKG5neF9hdG9taWNfdCAqKSBzaGFyZWQ7Ci0gICAgbmd4X2FjY2VwdF9tdXRleF9sYXN0X293bmVyID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgMSAqIDEyOCk7Ci0gICAgbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDIgKiAxMjgpOworICAgIG5neF9jb25uZWN0aW9uX2NvdW50ZXIgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyAxICogMTI4KTsKIAogI2lmIChOR1hfU1RBVF9TVFVCKQogCi0gICAgbmd4X3N0YXRfYWNjZXB0ZWQgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyAzICogMTI4KTsKLSAgICBuZ3hfc3RhdF9oYW5kbGVkID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNCAqIDEyOCk7Ci0gICAgbmd4X3N0YXRfcmVxdWVzdHMgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyA1ICogMTI4KTsKLSAgICBuZ3hfc3RhdF9hY3RpdmUgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyA2ICogMTI4KTsKLSAgICBuZ3hfc3RhdF9yZWFkaW5nID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNyAqIDEyOCk7Ci0gICAgbmd4X3N0YXRfd3JpdGluZyA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDggKiAxMjgpOworICAgIG5neF9zdGF0X2FjY2VwdGVkID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgMiAqIDEyOCk7CisgICAgbmd4X3N0YXRfaGFuZGxlZCA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDMgKiAxMjgpOworICAgIG5neF9zdGF0X3JlcXVlc3RzID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNCAqIDEyOCk7CisgICAgbmd4X3N0YXRfYWN0aXZlID0gKG5neF9hdG9taWNfdCAqKSAoc2hhcmVkICsgNSAqIDEyOCk7CisgICAgbmd4X3N0YXRfcmVhZGluZyA9IChuZ3hfYXRvbWljX3QgKikgKHNoYXJlZCArIDYgKiAxMjgpOworICAgIG5neF9zdGF0X3dyaXRpbmcgPSAobmd4X2F0b21pY190ICopIChzaGFyZWQgKyA3ICogMTI4KTsKIAogI2VuZGlmCiAKQEAgLTkxOSw2ICs5MTYsMTIgQEAKICAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiIDsKICAgICB9CiAKKyAgICBpZiAobmd4X3N0cmNtcChjbWQtPm5hbWUuZGF0YSwgImNvbm5lY3Rpb25zIikgPT0gMCkgeworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19XQVJOLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgXCJjb25uZWN0aW9uc1wiIGRpcmVjdGl2ZSBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIHRoZSBcIndvcmtlcl9jb25uZWN0aW9uc1wiIGRpcmVjdGl2ZSBpbnN0ZWFkIik7CisgICAgfQorCiAgICAgdmFsdWUgPSBjZi0+YXJncy0+ZWx0czsKICAgICBlY2YtPmNvbm5lY3Rpb25zID0gbmd4X2F0b2kodmFsdWVbMV0uZGF0YSwgdmFsdWVbMV0ubGVuKTsKICAgICBpZiAoZWNmLT5jb25uZWN0aW9ucyA9PSAobmd4X3VpbnRfdCkgTkdYX0VSUk9SKSB7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKaW5kZXggMjE1NDYzNS4uYmU5NDNhZSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaApAQCAtNDM4LDcgKzQzOCw2IEBACiBleHRlcm4gbmd4X2F0b21pY190ICAgICAgICAgICpuZ3hfY29ubmVjdGlvbl9jb3VudGVyOwogCiBleHRlcm4gbmd4X2F0b21pY190ICAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4X3B0cjsKLWV4dGVybiBuZ3hfYXRvbWljX3QgICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXhfbGFzdF9vd25lcjsKIGV4dGVybiBuZ3hfYXRvbWljX3QgICAgICAgICAgKm5neF9hY2NlcHRfbXV0ZXg7CiBleHRlcm4gbmd4X3VpbnRfdCAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2hlbGQ7CiBleHRlcm4gbmd4X21zZWNfdCAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggZmI0M2FmNC4uYWZiMWExZiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC0yNjUsOSArMjY1LDcgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCBtdXRleCBsb2NrZWQiKTsKIAotICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkCi0gICAgICAgICAgICAmJiAoIShuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX1JUU0lHX0VWRU5UKQotICAgICAgICAgICAgICAgIHx8ICpuZ3hfYWNjZXB0X211dGV4X2xhc3Rfb3duZXIgPT0gKG5neF9hdG9taWNfdCkgbmd4X3BpZCkpCisgICAgICAgIGlmIChuZ3hfYWNjZXB0X211dGV4X2hlbGQgJiYgIShuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX1JUU0lHX0VWRU5UKSkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQpAQCAtMzA4LDE2ICszMDYsMTAgQEAKIAogICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9SVFNJR19FVkVOVCkgewogCi0gICAgICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7Ci0gICAgICAgICAgICAgICAgYy0+cmVhZC0+ZGlzYWJsZWQgPSAxOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBpZiAobmd4X2FkZF9jb25uKGMpID09IE5HWF9FUlJPUikgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4X2xhc3Rfb3duZXIgPSBuZ3hfcGlkOwotCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobmd4X2FkZF9ldmVudChjLT5yZWFkLCBOR1hfUkVBRF9FVkVOVCwgMCkgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKaW5kZXggOTk3MGVkMy4uNzc5ZWMxOCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9waXBlLmMKQEAgLTEyMiw2ICsxMjIsOCBAQAogCiAgICAgICAgIH0gZWxzZSB7CiAKKyNpZiAoTkdYX0hBVkVfS1FVRVVFKQorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICoga3F1ZXVlIG5vdGlmaWVzIGFib3V0IHRoZSBlbmQgb2YgZmlsZSBvciBhIHBlbmRpbmcgZXJyb3IuCiAgICAgICAgICAgICAgKiBUaGlzIHRlc3QgYWxsb3dzIG5vdCB0byBhbGxvY2F0ZSBhIGJ1ZiBvbiB0aGVzZSBjb25kaXRpb25zCkBAIC0xMjksMTQgKzEzMSwxNSBAQAogICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIGlmIChwLT51cHN0cmVhbS0+cmVhZC0+YXZhaWxhYmxlID09IDAKLSAgICAgICAgICAgICAgICAmJiBwLT51cHN0cmVhbS0+cmVhZC0+cGVuZGluZ19lb2YpCisgICAgICAgICAgICAgICAgJiYgcC0+dXBzdHJlYW0tPnJlYWQtPnBlbmRpbmdfZW9mCisgICAgICAgICAgICAgICAgLyogRnJlZUJTRCA1LngtNi54IG1heSBlcnJvbmVvdXNseSByZXBvcnQgRVRJTUVET1VUICovCisgICAgICAgICAgICAgICAgJiYgcC0+dXBzdHJlYW0tPnJlYWQtPmtxX2Vycm5vICE9IE5HWF9FVElNRURPVVQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcC0+dXBzdHJlYW0tPnJlYWQtPnJlYWR5ID0gMDsKICAgICAgICAgICAgICAgICBwLT51cHN0cmVhbS0+cmVhZC0+ZW9mID0gMDsKICAgICAgICAgICAgICAgICBwLT51cHN0cmVhbV9lb2YgPSAxOwogICAgICAgICAgICAgICAgIHAtPnJlYWQgPSAxOwogCi0jaWYgKE5HWF9IQVZFX0tRVUVVRSkKICAgICAgICAgICAgICAgICBpZiAocC0+dXBzdHJlYW0tPnJlYWQtPmtxX2Vycm5vKSB7CiAgICAgICAgICAgICAgICAgICAgIHAtPnVwc3RyZWFtLT5yZWFkLT5lcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHAtPnVwc3RyZWFtX2Vycm9yID0gMTsKQEAgLTE0NCwxMiArMTQ3LDEzIEBACiAKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcC0+bG9nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnVwc3RyZWFtLT5yZWFkLT5rcV9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZHYoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgdGhhdCB1cHN0cmVhbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3NlZCBjb25uZWN0aW9uIik7CiAgICAgICAgICAgICAgICAgfQotI2VuZGlmCiAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICBpZiAocC0+ZnJlZV9yYXdfYnVmcykgewogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlLmMKaW5kZXggYjEyOWE5OC4uY2Y4NTU1NyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRoX2Jhc2ljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUuYwpAQCAtMzMyLDMyICszMzIsMTAgQEAKICAgICBuZ3hfaHR0cF9hdXRoX2Jhc2ljX2xvY19jb25mX3QgICpwcmV2ID0gcGFyZW50OwogICAgIG5neF9odHRwX2F1dGhfYmFzaWNfbG9jX2NvbmZfdCAgKmNvbmYgPSBjaGlsZDsKIAotICAgIHNpemVfdCAgIGxlbjsKLSAgICB1X2NoYXIgICpyZWFsbSwgKnA7Ci0KLSAgICBpZiAoY29uZi0+cmVhbG0uZGF0YSkgewotICAgICAgICBpZiAoY29uZi0+cmVhbG0ubGVuKSB7Ci0gICAgICAgICAgICBsZW4gPSBzaXplb2YoIkJhc2ljIHJlYWxtPVwiIikgLSAxICsgY29uZi0+cmVhbG0ubGVuICsgMTsKLQotICAgICAgICAgICAgcmVhbG0gPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBsZW4pOwotICAgICAgICAgICAgaWYgKHJlYWxtID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHAgPSBuZ3hfY3B5bWVtKHJlYWxtLCAiQmFzaWMgcmVhbG09XCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJCYXNpYyByZWFsbT1cIiIpIC0gMSk7Ci0gICAgICAgICAgICBwID0gbmd4X2NweW1lbShwLCBjb25mLT5yZWFsbS5kYXRhLCBjb25mLT5yZWFsbS5sZW4pOwotICAgICAgICAgICAgKnAgPSAnIic7Ci0KLSAgICAgICAgICAgIGNvbmYtPnJlYWxtLmxlbiA9IGxlbjsKLSAgICAgICAgICAgIGNvbmYtPnJlYWxtLmRhdGEgPSByZWFsbTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIHsKKyAgICBpZiAoY29uZi0+cmVhbG0uZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIGNvbmYtPnJlYWxtID0gcHJldi0+cmVhbG07CiAgICAgfQogCi0KICAgICBpZiAoY29uZi0+dXNlcl9maWxlLmRhdGEpIHsKICAgICAgICAgaWYgKG5neF9jb25mX2Z1bGxfbmFtZShjZi0+Y3ljbGUsICZjb25mLT51c2VyX2ZpbGUpICE9IE5HWF9PSykgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwpAQCAtMzk1LDEwICszNzMsMjcgQEAKIHsKICAgICBuZ3hfc3RyX3QgICpyZWFsbSA9IGRhdGE7CiAKKyAgICBzaXplX3QgICBsZW47CisgICAgdV9jaGFyICAqYmFzaWMsICpwOworCiAgICAgaWYgKG5neF9zdHJjbXAocmVhbG0tPmRhdGEsICJvZmYiKSA9PSAwKSB7CiAgICAgICAgIHJlYWxtLT5sZW4gPSAwOwogICAgICAgICByZWFsbS0+ZGF0YSA9ICh1X2NoYXIgKikgIiI7CiAgICAgfQogCisgICAgbGVuID0gc2l6ZW9mKCJCYXNpYyByZWFsbT1cIiIpIC0gMSArIHJlYWxtLT5sZW4gKyAxOworCisgICAgYmFzaWMgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBsZW4pOworICAgIGlmIChiYXNpYyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBwID0gbmd4X2NweW1lbShiYXNpYywgIkJhc2ljIHJlYWxtPVwiIiwgc2l6ZW9mKCJCYXNpYyByZWFsbT1cIiIpIC0gMSk7CisgICAgcCA9IG5neF9jcHltZW0ocCwgcmVhbG0tPmRhdGEsIHJlYWxtLT5sZW4pOworICAgICpwID0gJyInOworCisgICAgcmVhbG0tPmxlbiA9IGxlbjsKKyAgICByZWFsbS0+ZGF0YSA9IGJhc2ljOworCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9lbXB0eV9naWZfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYwppbmRleCA1YzlhNDE1Li5jN2FmMTIxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYwpAQCAtMjgsNDkgKzI4LDQ5IEBACiAKIHN0YXRpYyB1X2NoYXIgIG5neF9lbXB0eV9naWZbXSA9IHsKIAotICAgICdHJywgJ0knLCAnRicsICc4JywgJzknLCAnYScsICAvKiBoZWFkZXIgKi8KKyAgICAnRycsICdJJywgJ0YnLCAnOCcsICc5JywgJ2EnLCAgLyogaGVhZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2dpY2FsIHNjcmVlbiBkZXNjcmlwdG9yICovCi0gICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGxvZ2ljYWwgc2NyZWVuIHdpZHRoICovCi0gICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGxvZ2ljYWwgc2NyZWVuIGhlaWdodCAqLwotICAgIDB4ODAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbG9iYWwgMS1iaXQgY29sb3IgdGFibGUgKi8KLSAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFja2dyb3VuZCBjb2xvciAjMSAqLwotICAgIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBhc3BlY3QgcmF0aW8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9naWNhbCBzY3JlZW4gZGVzY3JpcHRvciAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogbG9naWNhbCBzY3JlZW4gd2lkdGggICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogbG9naWNhbCBzY3JlZW4gaGVpZ2h0ICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDgwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ2xvYmFsIDEtYml0IGNvbG9yIHRhYmxlICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFja2dyb3VuZCBjb2xvciAjMSAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gYXNwZWN0IHJhdGlvICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbG9iYWwgY29sb3IgdGFibGUgKi8KLSAgICAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgLyogIzA6IGJsYWNrICovCi0gICAgMHhmZiwgMHhmZiwgMHhmZiwgICAgICAgICAgICAgIC8qICMxOiB3aGl0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbG9iYWwgY29sb3IgdGFibGUgICAgICAgICAgICAgICAgICAgICAqLworICAgIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAvKiAjMDogYmxhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsICAgICAgICAgICAgICAvKiAjMTogd2hpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdyYXBoaWMgY29udHJvbCBleHRlbnNpb24gKi8KLSAgICAweDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5zaW9uIGludHJvZHVjZXIgKi8KLSAgICAweGY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JhcGhpYyBjb250cm9sIGxhYmVsICovCi0gICAgMHgwNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgKi8KLSAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwYXJlbnQgY29sb3IgaXMgZ2l2ZW4sICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICBubyBkaXNwb3NhbCBzcGVjaWZpZWQsICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICB1c2VyIGlucHV0IGlzIG5vdCBleHBlY3RlZCAqLwotICAgIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBkZWxheSB0aW1lICovCi0gICAgMHgwMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYW5zcGFyZW50IGNvbG9yICMxICovCi0gICAgMHgwMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHRlcm1pbmF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JhcGhpYyBjb250cm9sIGV4dGVuc2lvbiAgICAgICAgICAgICAgKi8KKyAgICAweDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5zaW9uIGludHJvZHVjZXIgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweGY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JhcGhpYyBjb250cm9sIGxhYmVsICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwYXJlbnQgY29sb3IgaXMgZ2l2ZW4sICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG5vIGRpc3Bvc2FsIHNwZWNpZmllZCwgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgIHVzZXIgaW5wdXQgaXMgbm90IGV4cGVjdGVkICAgICAgICAgKi8KKyAgICAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogZGVsYXkgdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwYXJlbnQgY29sb3IgIzEgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgdGVybWluYXRvciAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBkZXNjcmlwdG9yICovCi0gICAgMHgyYywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGltYWdlIHNlcGFyYXRvciAqLwotICAgIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBsZWZ0IHBvc2l0aW9uICovCi0gICAgMHgwMCwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGltYWdlIHRvcCBwb3NpdGlvbiAqLwotICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSB3aWR0aCAqLwotICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBoZWlnaHQgKi8KLSAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gbG9jYWwgY29sb3IgdGFibGUsIG5vIGludGVybGFjZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2UgZGVzY3JpcHRvciAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDJjLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2Ugc2VwYXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2UgbGVmdCBwb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAwLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2UgdG9wIHBvc2l0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2Ugd2lkdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAxLCAweDAwLCAgICAgICAgICAgICAgICAgICAgLyogaW1hZ2UgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gbG9jYWwgY29sb3IgdGFibGUsIG5vIGludGVybGFjZWQgICAgKi8KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBiYXNlZCBpbWFnZSBkYXRhICovCi0gICAgMHgwMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExaVyBtaW5pbXVtIGNvZGUgc2l6ZSwgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG11c3QgYmUgYXQgbGVhc3QgMi1iaXQgKi8KLSAgICAweDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBiYXNlZCBpbWFnZSBkYXRhICAgICAgICAgICAgICAgICAqLworICAgIDB4MDIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMWlcgbWluaW11bSBjb2RlIHNpemUsICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgbXVzdCBiZSBhdCBsZWFzdCAyLWJpdCAgICAgICAgICAgICAqLworICAgIDB4MDIsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgIDB4NGMsIDB4MDEsICAgICAgICAgICAgICAgICAgICAvKiBjb21wcmVzc2VkIGJ5dGVzIDAxXzAwMV8xMDAsIDAwMDAwMDBfMSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA6IGNsZWFyIGNvZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDAxOiAxICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMTogZW5kIG9mIGluZm9ybWF0aW9uIGNvZGUgKi8KLSAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgdGVybWluYXRvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA6IGNsZWFyIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwMDE6IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDE6IGVuZCBvZiBpbmZvcm1hdGlvbiBjb2RlICAgICAgICAgICAqLworICAgIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBibG9jayB0ZXJtaW5hdG9yICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgMHgzQiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYWlsZXIgKi8KKyAgICAweDNCICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhaWxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDVkMmMxNTMuLjEyNWI4ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTExLDE2ICsxMSwxNiBAQAogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaHR0cF91cHN0cmVhbV9jb25mX3QgICAgICAgIHVwc3RyZWFtOworICAgIG5neF9odHRwX3Vwc3RyZWFtX2NvbmZfdCAgIHVwc3RyZWFtOwogCi0gICAgbmd4X3BlZXJzX3QgICAgICAgICAgICAgICAgICAgICpwZWVyczsKKyAgICBuZ3hfcGVlcnNfdCAgICAgICAgICAgICAgICpwZWVyczsKIAotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgaW5kZXg7CiAKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgKmZsdXNoZXM7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgICAgICpwYXJhbXNfbGVuOwotICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zOwotICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zX3NvdXJjZTsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICpmbHVzaGVzOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgKnBhcmFtc19sZW47CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAqcGFyYW1zOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgKnBhcmFtc19zb3VyY2U7CiB9IG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdDsKIAogCkBAIC0zOSwxNCArMzksMTQgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2h0dHBfZmFzdGNnaV9zdGF0ZV9lICAgICAgc3RhdGU7Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAqcG9zOwotICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgKmxhc3Q7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgdHlwZTsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzsKKyAgICBuZ3hfaHR0cF9mYXN0Y2dpX3N0YXRlX2UgICBzdGF0ZTsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpwb3M7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqbGFzdDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICB0eXBlOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgaGVhZGVyOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGhlYWRlcjsKIH0gbmd4X2h0dHBfZmFzdGNnaV9jdHhfdDsKIAogCkBAIC0xNTEsNiArMTUxLDEwIEBACiBzdGF0aWMgbmd4X2NvbmZfcG9zdF90ICBuZ3hfaHR0cF9mYXN0Y2dpX2xvd2F0X3Bvc3QgPQogICAgIHsgbmd4X2h0dHBfZmFzdGNnaV9sb3dhdF9jaGVjayB9OwogCitzdGF0aWMgbmd4X2NvbmZfZGVwcmVjYXRlZF90ICBuZ3hfY29uZl9kZXByZWNhdGVkX2Zhc3RjZ2lfaGVhZGVyX2J1ZmZlcl9zaXplID0geworICAgIG5neF9jb25mX2RlcHJlY2F0ZWQsICJmYXN0Y2dpX2hlYWRlcl9idWZmZXJfc2l6ZSIsICJmYXN0Y2dpX2J1ZmZlcl9zaXplIgorfTsKKwogCiBzdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaHR0cF9mYXN0Y2dpX25leHRfdXBzdHJlYW1fbWFza3NbXSA9IHsKICAgICB7IG5neF9zdHJpbmcoImVycm9yIiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SIH0sCkBAIC0xOTksMTIgKzIwMywxOSBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90LCB1cHN0cmVhbS5zZW5kX2xvd2F0KSwKICAgICAgICZuZ3hfaHR0cF9mYXN0Y2dpX2xvd2F0X3Bvc3QgfSwKIAorICAgIHsgbmd4X3N0cmluZygiZmFzdGNnaV9idWZmZXJfc2l6ZSIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0uYnVmZmVyX3NpemUpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX2hlYWRlcl9idWZmZXJfc2l6ZSIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplKSwKLSAgICAgIE5VTEwgfSwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0uYnVmZmVyX3NpemUpLAorICAgICAgJm5neF9jb25mX2RlcHJlY2F0ZWRfZmFzdGNnaV9oZWFkZXJfYnVmZmVyX3NpemUgfSwKIAogICAgIHsgbmd4X3N0cmluZygiZmFzdGNnaV9wYXNzX3JlcXVlc3RfaGVhZGVycyIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCkBAIC0zNzEsOCArMzgyLDEzIEBACiAgICAgdS0+YWJvcnRfcmVxdWVzdCA9IG5neF9odHRwX2Zhc3RjZ2lfYWJvcnRfcmVxdWVzdDsKICAgICB1LT5maW5hbGl6ZV9yZXF1ZXN0ID0gbmd4X2h0dHBfZmFzdGNnaV9maW5hbGl6ZV9yZXF1ZXN0OwogCi0gICAgdS0+cGlwZS5pbnB1dF9maWx0ZXIgPSBuZ3hfaHR0cF9mYXN0Y2dpX2lucHV0X2ZpbHRlcjsKLSAgICB1LT5waXBlLmlucHV0X2N0eCA9IHI7CisgICAgdS0+cGlwZSA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfZXZlbnRfcGlwZV90KSk7CisgICAgaWYgKHUtPnBpcGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIHUtPnBpcGUtPmlucHV0X2ZpbHRlciA9IG5neF9odHRwX2Zhc3RjZ2lfaW5wdXRfZmlsdGVyOworICAgIHUtPnBpcGUtPmlucHV0X2N0eCA9IHI7CiAKICAgICByLT51cHN0cmVhbSA9IHU7CiAKQEAgLTc5OSwxMyArODE1LDEzIEBACiAKICAgICAgICAgaWYgKGYtPnN0YXRlIDwgbmd4X2h0dHBfZmFzdGNnaV9zdF9kYXRhKSB7CiAKLSAgICAgICAgICAgIGYtPnBvcyA9IHUtPmhlYWRlcl9pbi5wb3M7Ci0gICAgICAgICAgICBmLT5sYXN0ID0gdS0+aGVhZGVyX2luLmxhc3Q7CisgICAgICAgICAgICBmLT5wb3MgPSB1LT5idWZmZXIucG9zOworICAgICAgICAgICAgZi0+bGFzdCA9IHUtPmJ1ZmZlci5sYXN0OwogCiAgICAgICAgICAgICByYyA9IG5neF9odHRwX2Zhc3RjZ2lfcHJvY2Vzc19yZWNvcmQociwgZik7CiAKLSAgICAgICAgICAgIHUtPmhlYWRlcl9pbi5wb3MgPSBmLT5wb3M7Ci0gICAgICAgICAgICB1LT5oZWFkZXJfaW4ubGFzdCA9IGYtPmxhc3Q7CisgICAgICAgICAgICB1LT5idWZmZXIucG9zID0gZi0+cG9zOworICAgICAgICAgICAgdS0+YnVmZmVyLmxhc3QgPSBmLT5sYXN0OwogCiAgICAgICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKQEAgLTgzNSwyMiArODUxLDIyIEBACiAKICAgICAgICAgaWYgKGYtPnN0YXRlID09IG5neF9odHRwX2Zhc3RjZ2lfc3RfcGFkZGluZykgewogCi0gICAgICAgICAgICBpZiAodS0+aGVhZGVyX2luLnBvcyArIGYtPnBhZGRpbmcgPCB1LT5oZWFkZXJfaW4ubGFzdCkgeworICAgICAgICAgICAgaWYgKHUtPmJ1ZmZlci5wb3MgKyBmLT5wYWRkaW5nIDwgdS0+YnVmZmVyLmxhc3QpIHsKICAgICAgICAgICAgICAgICBmLT5zdGF0ZSA9IG5neF9odHRwX2Zhc3RjZ2lfc3RfdmVyc2lvbjsKLSAgICAgICAgICAgICAgICB1LT5oZWFkZXJfaW4ucG9zICs9IGYtPnBhZGRpbmc7CisgICAgICAgICAgICAgICAgdS0+YnVmZmVyLnBvcyArPSBmLT5wYWRkaW5nOwogCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh1LT5oZWFkZXJfaW4ucG9zICsgZi0+cGFkZGluZyA9PSB1LT5oZWFkZXJfaW4ubGFzdCkgeworICAgICAgICAgICAgaWYgKHUtPmJ1ZmZlci5wb3MgKyBmLT5wYWRkaW5nID09IHUtPmJ1ZmZlci5sYXN0KSB7CiAgICAgICAgICAgICAgICAgZi0+c3RhdGUgPSBuZ3hfaHR0cF9mYXN0Y2dpX3N0X3ZlcnNpb247Ci0gICAgICAgICAgICAgICAgdS0+aGVhZGVyX2luLnBvcyA9IHUtPmhlYWRlcl9pbi5sYXN0OworICAgICAgICAgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIubGFzdDsKIAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGYtPnBhZGRpbmcgLT0gdS0+aGVhZGVyX2luLmxhc3QgLSB1LT5oZWFkZXJfaW4ucG9zOwotICAgICAgICAgICAgdS0+aGVhZGVyX2luLnBvcyA9IHUtPmhlYWRlcl9pbi5sYXN0OworICAgICAgICAgICAgZi0+cGFkZGluZyAtPSB1LT5idWZmZXIubGFzdCAtIHUtPmJ1ZmZlci5wb3M7CisgICAgICAgICAgICB1LT5idWZmZXIucG9zID0gdS0+YnVmZmVyLmxhc3Q7CiAKICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgIH0KQEAgLTg2OCwxOCArODg0LDE4IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChmLT5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICBsaW5lLmRhdGEgPSB1LT5oZWFkZXJfaW4ucG9zOworICAgICAgICAgICAgICAgIGxpbmUuZGF0YSA9IHUtPmJ1ZmZlci5wb3M7CiAKLSAgICAgICAgICAgICAgICBpZiAodS0+aGVhZGVyX2luLnBvcyArIGYtPmxlbmd0aCA8PSB1LT5oZWFkZXJfaW4ubGFzdCkgeworICAgICAgICAgICAgICAgIGlmICh1LT5idWZmZXIucG9zICsgZi0+bGVuZ3RoIDw9IHUtPmJ1ZmZlci5sYXN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUubGVuID0gZi0+bGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICB1LT5oZWFkZXJfaW4ucG9zICs9IGYtPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdS0+YnVmZmVyLnBvcyArPSBmLT5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGYtPnN0YXRlID0gbmd4X2h0dHBfZmFzdGNnaV9zdF9wYWRkaW5nOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSB1LT5oZWFkZXJfaW4ubGFzdCAtIHUtPmhlYWRlcl9pbi5wb3M7Ci0gICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCAtPSB1LT5oZWFkZXJfaW4ubGFzdCAtIHUtPmhlYWRlcl9pbi5wb3M7Ci0gICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcl9pbi5wb3MgPSB1LT5oZWFkZXJfaW4ubGFzdDsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSB1LT5idWZmZXIubGFzdCAtIHUtPmJ1ZmZlci5wb3M7CisgICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCAtPSB1LT5idWZmZXIubGFzdCAtIHUtPmJ1ZmZlci5wb3M7CisgICAgICAgICAgICAgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIubGFzdDsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICB3aGlsZSAobGluZS5kYXRhW2xpbmUubGVuIC0gMV0gPT0gTEYKQEAgLTg5Myw3ICs5MDksNyBAQAogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYXN0Q0dJIHNlbnQgaW4gc3RkZXJyOiBcIiVWXCIiLCAmbGluZSk7CiAKLSAgICAgICAgICAgICAgICBpZiAodS0+aGVhZGVyX2luLnBvcyA9PSB1LT5oZWFkZXJfaW4ubGFzdCkgeworICAgICAgICAgICAgICAgIGlmICh1LT5idWZmZXIucG9zID09IHUtPmJ1ZmZlci5sYXN0KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgICAgICAgICAgfQogCkBAIC05MDcsMTcgKzkyMywxNyBAQAogCiAgICAgICAgIC8qIGYtPnR5cGUgPT0gTkdYX0hUVFBfRkFTVENHSV9TVERPVVQgKi8KIAotICAgICAgICBzdGFydCA9IHUtPmhlYWRlcl9pbi5wb3M7CisgICAgICAgIHN0YXJ0ID0gdS0+YnVmZmVyLnBvczsKIAotICAgICAgICBpZiAodS0+aGVhZGVyX2luLnBvcyArIGYtPmxlbmd0aCA8IHUtPmhlYWRlcl9pbi5sYXN0KSB7CisgICAgICAgIGlmICh1LT5idWZmZXIucG9zICsgZi0+bGVuZ3RoIDwgdS0+YnVmZmVyLmxhc3QpIHsKIAogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHNldCB1LT5oZWFkZXJfaW4ubGFzdCB0byB0aGUgZW5kIG9mIHRoZSBGYXN0Q0dJIHJlY29yZCBkYXRhCisgICAgICAgICAgICAgKiBzZXQgdS0+YnVmZmVyLmxhc3QgdG8gdGhlIGVuZCBvZiB0aGUgRmFzdENHSSByZWNvcmQgZGF0YQogICAgICAgICAgICAgICogZm9yIG5neF9odHRwX3BhcnNlX2hlYWRlcl9saW5lKCkKICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICBsYXN0ID0gdS0+aGVhZGVyX2luLmxhc3Q7Ci0gICAgICAgICAgICB1LT5oZWFkZXJfaW4ubGFzdCA9IHUtPmhlYWRlcl9pbi5wb3MgKyBmLT5sZW5ndGg7CisgICAgICAgICAgICBsYXN0ID0gdS0+YnVmZmVyLmxhc3Q7CisgICAgICAgICAgICB1LT5idWZmZXIubGFzdCA9IHUtPmJ1ZmZlci5wb3MgKyBmLT5sZW5ndGg7CiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxhc3QgPSBOVUxMOwpAQCAtOTI3LDcgKzk0Myw3IEBACiAKICAgICAgICAgZm9yICggOzsgKSB7CiAKLSAgICAgICAgICAgIHJjID0gbmd4X2h0dHBfcGFyc2VfaGVhZGVyX2xpbmUociwgJnUtPmhlYWRlcl9pbik7CisgICAgICAgICAgICByYyA9IG5neF9odHRwX3BhcnNlX2hlYWRlcl9saW5lKHIsICZ1LT5idWZmZXIpOwogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGZhc3RjZ2kgcGFyc2VyOiAlZCIsIHJjKTsKQEAgLTEwMjQsMTMgKzEwNDAsMTMgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChsYXN0KSB7Ci0gICAgICAgICAgICB1LT5oZWFkZXJfaW4ubGFzdCA9IGxhc3Q7CisgICAgICAgICAgICB1LT5idWZmZXIubGFzdCA9IGxhc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBmLT5sZW5ndGggLT0gdS0+aGVhZGVyX2luLnBvcyAtIHN0YXJ0OworICAgICAgICBmLT5sZW5ndGggLT0gdS0+YnVmZmVyLnBvcyAtIHN0YXJ0OwogCiAgICAgICAgIGlmIChyYyA9PSBOR1hfQUdBSU4pIHsKLSAgICAgICAgICAgIGlmICh1LT5oZWFkZXJfaW4ucG9zID09IHUtPmhlYWRlcl9pbi5sYXN0KSB7CisgICAgICAgICAgICBpZiAodS0+YnVmZmVyLnBvcyA9PSB1LT5idWZmZXIubGFzdCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgICAgICB9CiAKQEAgLTE0MzksMTIgKzE0NTUsMTQgQEAKICAgICAgKiAgICAgY29uZi0+aW5kZXguZGF0YSA9IE5VTEw7CiAgICAgICovCiAKKyAgICBjb25mLT51cHN0cmVhbS5idWZmZXJpbmcgPSBOR1hfQ09ORl9VTlNFVDsKKwogICAgIGNvbmYtPnVwc3RyZWFtLmNvbm5lY3RfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+dXBzdHJlYW0uc2VuZF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKICAgICBjb25mLT51cHN0cmVhbS5yZWFkX3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVF9NU0VDOwogCiAgICAgY29uZi0+dXBzdHJlYW0uc2VuZF9sb3dhdCA9IE5HWF9DT05GX1VOU0VUX1NJWkU7Ci0gICAgY29uZi0+dXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKKyAgICBjb25mLT51cHN0cmVhbS5idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAKICAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKICAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CkBAIC0xNDg1LDYgKzE1MDMsOSBAQAogICAgIG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QgICAgIHNjOwogICAgIG5neF9odHRwX3NjcmlwdF9jb3B5X2NvZGVfdCAgKmNvcHk7CiAKKyAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5idWZmZXJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5idWZmZXJpbmcsIDEpOworCiAgICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT51cHN0cmVhbS5jb25uZWN0X3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5jb25uZWN0X3RpbWVvdXQsIDYwMDAwKTsKIApAQCAtMTQ5Nyw4ICsxNTE4LDggQEAKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnNlbmRfbG93YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5zZW5kX2xvd2F0LCAwKTsKIAotICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplLAorICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+dXBzdHJlYW0uYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaXplX3QpIG5neF9wYWdlc2l6ZSk7CiAKIApAQCAtMTUxMiw3ICsxNTMzLDcgQEAKICAgICB9CiAKIAotICAgIHNpemUgPSBjb25mLT51cHN0cmVhbS5oZWFkZXJfYnVmZmVyX3NpemU7CisgICAgc2l6ZSA9IGNvbmYtPnVwc3RyZWFtLmJ1ZmZlcl9zaXplOwogICAgIGlmIChzaXplIDwgY29uZi0+dXBzdHJlYW0uYnVmcy5zaXplKSB7CiAgICAgICAgIHNpemUgPSBjb25mLT51cHN0cmVhbS5idWZzLnNpemU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYwppbmRleCAzYmNmNzNhLi45NDM2ZTU5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAKIAogc3RhdGljIG5neF9zdHJfdCAgbmd4X2h0dHBfY29tYmluZWRfZm10ID0KLSAgICBuZ3hfc3RyaW5nKCIkcmVtb3RlX2FkZHIgLSAkcmVtb3RlX3VzZXIgWyR0aW1lX2dtdF0gIgorICAgIG5neF9zdHJpbmcoIiRyZW1vdGVfYWRkciAtICRyZW1vdGVfdXNlciBbJHRpbWVfbG9jYWxdICIKICAgICAgICAgICAgICAgICJcIiRyZXF1ZXN0XCIgJHN0YXR1cyAkYm9keV9ieXRlc19zZW50ICIKICAgICAgICAgICAgICAgICJcIiRodHRwX3JlZmVyZXJcIiBcIiRodHRwX3VzZXJfYWdlbnRcIiIpOwogCkBAIC0xODAsNyArMTgwLDcgQEAKIHN0YXRpYyBuZ3hfaHR0cF9sb2dfdmFyX3QgIG5neF9odHRwX2xvZ192YXJzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJjb25uZWN0aW9uIiksIE5HWF9BVE9NSUNfVF9MRU4sIG5neF9odHRwX2xvZ19jb25uZWN0aW9uIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJwaXBlIiksIDEsIG5neF9odHRwX2xvZ19waXBlIH0sCi0gICAgeyBuZ3hfc3RyaW5nKCJ0aW1lX2dtdCIpLCBzaXplb2YoIjI4L1NlcC8xOTcwOjEyOjAwOjAwICswNjAwIikgLSAxLAorICAgIHsgbmd4X3N0cmluZygidGltZV9sb2NhbCIpLCBzaXplb2YoIjI4L1NlcC8xOTcwOjEyOjAwOjAwICswNjAwIikgLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9sb2dfdGltZSB9LAogICAgIHsgbmd4X3N0cmluZygibXNlYyIpLCBOR1hfVElNRV9UX0xFTiArIDQsIG5neF9odHRwX2xvZ19tc2VjIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X3RpbWUiKSwgTkdYX1RJTUVfVF9MRU4sIG5neF9odHRwX2xvZ19yZXF1ZXN0X3RpbWUgfSwKQEAgLTEwMTksNiArMTAxOSwxMSBAQAogCiAgICAgaWYgKGNmLT5hcmdzLT5uZWx0cyA+PSAzKSB7CiAgICAgICAgIG5hbWUgPSB2YWx1ZVsyXTsKKworICAgICAgICBpZiAobmd4X3N0cmNtcChuYW1lLmRhdGEsICJjb21iaW5lZCIpID09IDApIHsKKyAgICAgICAgICAgIGxtY2YtPmNvbWJpbmVkX3VzZWQgPSAxOworICAgICAgICB9CisKICAgICB9IGVsc2UgewogICAgICAgICBuYW1lLmxlbiA9IHNpemVvZigiY29tYmluZWQiKSAtIDE7CiAgICAgICAgIG5hbWUuZGF0YSA9ICh1X2NoYXIgKikgImNvbWJpbmVkIjsKQEAgLTEzODQsNiArMTM4OSw3IEBACiB7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKnZhbHVlOwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICBhOworICAgIG5neF9odHRwX2hhbmRsZXJfcHQgICAgICAgICpoOwogICAgIG5neF9odHRwX2xvZ19mbXRfdCAgICAgICAgICpmbXQ7CiAgICAgbmd4X2h0dHBfbG9nX21haW5fY29uZl90ICAgKmxtY2Y7CiAgICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CkBAIC0xNDEyLDcgKzE0MTgsMTIgQEAKIAogICAgIGNtY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbWFpbl9jb25mKGNmLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKLSAgICBjbWNmLT5sb2dfaGFuZGxlciA9IG5neF9odHRwX2xvZ19oYW5kbGVyOworICAgIGggPSBuZ3hfYXJyYXlfcHVzaCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0xPR19QSEFTRV0uaGFuZGxlcnMpOworICAgIGlmIChoID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICAqaCA9IG5neF9odHRwX2xvZ19oYW5kbGVyOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxN2RkMQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZS5jCkBAIC0wLDAgKzEsNjE2IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCisjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgorI2luY2x1ZGUgPG5neF9jb3JlLmg+CisjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CisjaW5jbHVkZSA8bmd4X2h0dHAuaD4KKworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fY29uZl90ICAgdXBzdHJlYW07CisgICAgbmd4X3BlZXJzX3QgICAgICAgICAgICAgICAqcGVlcnM7Cit9IG5neF9odHRwX21lbWNhY2hlZF9sb2NfY29uZl90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICByZXN0OworICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgKnJlcXVlc3Q7Cit9IG5neF9odHRwX21lbWNhY2hlZF9jdHhfdDsKKworCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX21lbWNhY2hlZF9jcmVhdGVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9tZW1jYWNoZWRfcmVpbml0X3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfbWVtY2FjaGVkX3Byb2Nlc3NfaGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX21lbWNhY2hlZF9maWx0ZXJfaW5pdCh2b2lkICpkYXRhKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfbWVtY2FjaGVkX2ZpbHRlcih2b2lkICpkYXRhLCBzc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkIG5neF9odHRwX21lbWNhY2hlZF9hYm9ydF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcik7CitzdGF0aWMgdm9pZCBuZ3hfaHR0cF9tZW1jYWNoZWRfZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2ludF90IHJjKTsKKworc3RhdGljIHZvaWQgKm5neF9odHRwX21lbWNhY2hlZF9jcmVhdGVfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YpOworc3RhdGljIGNoYXIgKm5neF9odHRwX21lbWNhY2hlZF9tZXJnZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZiwKKyAgICB2b2lkICpwYXJlbnQsIHZvaWQgKmNoaWxkKTsKKworc3RhdGljIGNoYXIgKm5neF9odHRwX21lbWNhY2hlZF9wYXNzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCisgICAgdm9pZCAqY29uZik7CisKKworc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2h0dHBfbWVtY2FjaGVkX25leHRfdXBzdHJlYW1fbWFza3NbXSA9IHsKKyAgICB7IG5neF9zdHJpbmcoImVycm9yIiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJ0aW1lb3V0IiksIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX1RJTUVPVVQgfSwKKyAgICB7IG5neF9zdHJpbmcoImludmFsaWRfcmVzcG9uc2UiKSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfSU5WQUxJRF9IRUFERVIgfSwKKyAgICB7IG5neF9zdHJpbmcoIm5vdF9mb3VuZCIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9IVFRQXzQwNCB9LAorICAgIHsgbmd4X251bGxfc3RyaW5nLCAwIH0KK307CisKKworc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX21lbWNhY2hlZF9jb21tYW5kc1tdID0geworCisgICAgeyBuZ3hfc3RyaW5nKCJtZW1jYWNoZWRfcGFzcyIpLAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfcGFzcywKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIDAsCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIm1lbWNhY2hlZF9jb25uZWN0X3RpbWVvdXQiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9tc2VjX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCwgdXBzdHJlYW0uY29ubmVjdF90aW1lb3V0KSwKKyAgICAgIE5VTEwgfSwKKworICAgIHsgbmd4X3N0cmluZygibWVtY2FjaGVkX3NlbmRfdGltZW91dCIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X21zZWNfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX21lbWNhY2hlZF9sb2NfY29uZl90LCB1cHN0cmVhbS5zZW5kX3RpbWVvdXQpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJtZW1jYWNoZWRfYnVmZmVyX3NpemUiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9zaXplX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCwgdXBzdHJlYW0uYnVmZmVyX3NpemUpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJtZW1jYWNoZWRfcmVhZF90aW1lb3V0IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfbXNlY19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfbWVtY2FjaGVkX2xvY19jb25mX3QsIHVwc3RyZWFtLnJlYWRfdGltZW91dCksCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIm1lbWNhY2hlZF9uZXh0X3Vwc3RyZWFtIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCisgICAgICBuZ3hfY29uZl9zZXRfYml0bWFza19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfbWVtY2FjaGVkX2xvY19jb25mX3QsIHVwc3RyZWFtLm5leHRfdXBzdHJlYW0pLAorICAgICAgJm5neF9odHRwX21lbWNhY2hlZF9uZXh0X3Vwc3RyZWFtX21hc2tzIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIm1lbWNhY2hlZF91cHN0cmVhbV9tYXhfZmFpbHMiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9udW1fc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX21lbWNhY2hlZF9sb2NfY29uZl90LCB1cHN0cmVhbS5tYXhfZmFpbHMpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJtZW1jYWNoZWRfdXBzdHJlYW1fZmFpbF90aW1lb3V0IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc2VjX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCwgdXBzdHJlYW0uZmFpbF90aW1lb3V0KSwKKyAgICAgIE5VTEwgfSwKKworICAgICAgbmd4X251bGxfY29tbWFuZAorfTsKKworCituZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZV9jdHggPSB7CisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIHNlcnZlciBjb25maWd1cmF0aW9uICovCisKKyAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfY3JlYXRlX2xvY19jb25mLCAgICAvKiBjcmVhdGUgbG9jYXRpb24gY29uZmlncmF0aW9uICovCisgICAgbmd4X2h0dHBfbWVtY2FjaGVkX21lcmdlX2xvY19jb25mICAgICAgLyogbWVyZ2UgbG9jYXRpb24gY29uZmlncmF0aW9uICovCit9OworCisKK25neF9tb2R1bGVfdCAgbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZSA9IHsKKyAgICBOR1hfTU9EVUxFX1YxLAorICAgICZuZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlX2N0eCwgICAgICAgIC8qIG1vZHVsZSBjb250ZXh0ICovCisgICAgbmd4X2h0dHBfbWVtY2FjaGVkX2NvbW1hbmRzLCAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KKyAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtb2R1bGUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHRocmVhZCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgdGhyZWFkICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCBwcm9jZXNzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCBtYXN0ZXIgKi8KKyAgICBOR1hfTU9EVUxFX1YxX1BBRERJTkcKK307CisKKworI2RlZmluZSBOR1hfSFRUUF9NRU1DQUNIRURfRU5EICAgKHNpemVvZihuZ3hfaHR0cF9tZW1jYWNoZWRfZW5kKSAtIDEpCitzdGF0aWMgdV9jaGFyICBuZ3hfaHR0cF9tZW1jYWNoZWRfZW5kW10gPSBDUkxGICJFTkQiIENSTEY7CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfbWVtY2FjaGVkX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQoreworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgICAgICAgICAgICp1OworICAgIG5neF9odHRwX21lbWNhY2hlZF9jdHhfdCAgICAgICAqY3R4OworICAgIG5neF9odHRwX21lbWNhY2hlZF9sb2NfY29uZl90ICAqbWxjZjsKKworICAgIGlmIChyLT5tZXRob2QgIT0gTkdYX0hUVFBfR0VUICYmIHItPm1ldGhvZCAhPSBOR1hfSFRUUF9IRUFEKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfQUxMT1dFRDsKKyAgICB9CisKKyAgICByYyA9IG5neF9odHRwX2Rpc2NhcmRfYm9keShyKTsKKworICAgIGlmIChyYyAhPSBOR1hfT0sgJiYgcmMgIT0gTkdYX0FHQUlOKSB7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAobmd4X2h0dHBfc2V0X2NvbnRlbnRfdHlwZShyKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKKyAgICBtbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlKTsKKworICAgIHUgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfdXBzdHJlYW1fdCkpOworICAgIGlmICh1ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKKyAgICB1LT5wZWVyLmxvZyA9IHItPmNvbm5lY3Rpb24tPmxvZzsKKyAgICB1LT5wZWVyLmxvZ19lcnJvciA9IE5HWF9FUlJPUl9FUlI7CisgICAgdS0+cGVlci5wZWVycyA9IG1sY2YtPnBlZXJzOworICAgIHUtPnBlZXIudHJpZXMgPSBtbGNmLT5wZWVycy0+bnVtYmVyOworI2lmIChOR1hfVEhSRUFEUykKKyAgICB1LT5wZWVyLmxvY2sgPSAmci0+Y29ubmVjdGlvbi0+bG9jazsKKyNlbmRpZgorCisgICAgdS0+b3V0cHV0LnRhZyA9IChuZ3hfYnVmX3RhZ190KSAmbmd4X2h0dHBfbWVtY2FjaGVkX21vZHVsZTsKKworICAgIHUtPmNvbmYgPSAmbWxjZi0+dXBzdHJlYW07CisKKyAgICB1LT5jcmVhdGVfcmVxdWVzdCA9IG5neF9odHRwX21lbWNhY2hlZF9jcmVhdGVfcmVxdWVzdDsKKyAgICB1LT5yZWluaXRfcmVxdWVzdCA9IG5neF9odHRwX21lbWNhY2hlZF9yZWluaXRfcmVxdWVzdDsKKyAgICB1LT5wcm9jZXNzX2hlYWRlciA9IG5neF9odHRwX21lbWNhY2hlZF9wcm9jZXNzX2hlYWRlcjsKKyAgICB1LT5hYm9ydF9yZXF1ZXN0ID0gbmd4X2h0dHBfbWVtY2FjaGVkX2Fib3J0X3JlcXVlc3Q7CisgICAgdS0+ZmluYWxpemVfcmVxdWVzdCA9IG5neF9odHRwX21lbWNhY2hlZF9maW5hbGl6ZV9yZXF1ZXN0OworCisgICAgci0+dXBzdHJlYW0gPSB1OworCisgICAgY3R4ID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfbWVtY2FjaGVkX2N0eF90KSk7CisgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgfQorCisgICAgY3R4LT5yZXN0ID0gTkdYX0hUVFBfTUVNQ0FDSEVEX0VORDsKKyAgICBjdHgtPnJlcXVlc3QgPSByOworCisgICAgdS0+aW5wdXRfZmlsdGVyX2luaXQgPSBuZ3hfaHR0cF9tZW1jYWNoZWRfZmlsdGVyX2luaXQ7CisgICAgdS0+aW5wdXRfZmlsdGVyID0gbmd4X2h0dHBfbWVtY2FjaGVkX2ZpbHRlcjsKKyAgICB1LT5pbnB1dF9maWx0ZXJfY3R4ID0gY3R4OworCisgICAgbmd4X2h0dHBfdXBzdHJlYW1faW5pdChyKTsKKworICAgIHJldHVybiBOR1hfRE9ORTsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9tZW1jYWNoZWRfY3JlYXRlX3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyKQoreworICAgIHNpemVfdCAgICAgICAgbGVuOworICAgIG5neF9idWZfdCAgICAqYjsKKyAgICBuZ3hfY2hhaW5fdCAgKmNsOworCisgICAgbGVuID0gc2l6ZW9mKCJnZXQgIikgLSAxICsgci0+dXJpLmxlbiArIHNpemVvZigiICIgQ1JMRikgLSAxOworICAgIGlmIChyLT5hcmdzLmxlbikgeworICAgICAgICBsZW4gKz0gMSsgci0+YXJncy5sZW47CisgICAgfQorCisgICAgYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoci0+cG9vbCwgbGVuKTsKKyAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKTsKKyAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIGNsLT5idWYgPSBiOworICAgIGNsLT5uZXh0ID0gTlVMTDsKKworICAgIHItPnVwc3RyZWFtLT5yZXF1ZXN0X2J1ZnMgPSBjbDsKKworICAgICpiLT5sYXN0KysgPSAnZyc7ICpiLT5sYXN0KysgPSAnZSc7ICpiLT5sYXN0KysgPSAndCc7ICpiLT5sYXN0KysgPSAnICc7CisKKyAgICBiLT5sYXN0ID0gbmd4X2NvcHkoYi0+bGFzdCwgci0+dXJpLmRhdGEsIHItPnVyaS5sZW4pOworCisgICAgaWYgKHItPmFyZ3MubGVuKSB7CisgICAgICAgICpiLT5sYXN0KysgPSAnPyc7CisgICAgICAgIGItPmxhc3QgPSBuZ3hfY29weShiLT5sYXN0LCByLT5hcmdzLmRhdGEsIHItPmFyZ3MubGVuKTsKKyAgICB9CisKKyNpZiAoTkdYX0RFQlVHKQorICAgIHsKKyAgICBuZ3hfc3RyX3QgIHM7CisKKyAgICBzLmxlbiA9IGItPmxhc3QgLSBiLT5wb3M7CisgICAgcy5kYXRhID0gYi0+cG9zOworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIG1lbWNhY2hlZCByZXF1ZXN0OiBcIiVWXCIiLCAmcyk7CisgICAgfQorI2VuZGlmCisKKyAgICAqYi0+bGFzdCsrID0gJyAnOyAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfbWVtY2FjaGVkX3JlaW5pdF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX21lbWNhY2hlZF9wcm9jZXNzX2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgKnAsICpsZW47CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgIGxpbmU7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgKnU7CisKKyAgICB1ID0gci0+dXBzdHJlYW07CisKKyAgICBmb3IgKHAgPSB1LT5idWZmZXIucG9zOyBwIDwgdS0+YnVmZmVyLmxhc3Q7IHArKykgeworICAgICAgICBpZiAoKnAgPT0gTEYpIHsKKyAgICAgICAgICAgIGdvdG8gZm91bmQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0FHQUlOOworCitmb3VuZDoKKworICAgICpwID0gJ1wwJzsKKworICAgIGxpbmUubGVuID0gcCAtIHUtPmJ1ZmZlci5wb3MgLSAxOworICAgIGxpbmUuZGF0YSA9IHUtPmJ1ZmZlci5wb3M7CisKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAibWVtY2FjaGVkOiBcIiVWXCIiLCAmbGluZSk7CisKKyAgICBwID0gdS0+YnVmZmVyLnBvczsKKworICAgIGlmIChuZ3hfc3RybmNtcChwLCAiVkFMVUUgIiwgc2l6ZW9mKCJWQUxVRSAiKSAtIDEpID09IDApIHsKKworICAgICAgICBwICs9IHNpemVvZigiVkFMVUUgIikgLSAxOworCisgICAgICAgIGlmIChuZ3hfc3RybmNtcChwLCByLT51cmkuZGF0YSwgci0+dXJpLmxlbikgIT0gMCkgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtY2FjaGVkIHNlbnQgaW52YWxpZCBrZXkgaW4gcmVzcG9uc2UgXCIlVlwiICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBrZXkgXCIlVlwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmUsICZyLT51cmkpOworCisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfVVBTVFJFQU1fSU5WQUxJRF9IRUFERVI7CisgICAgICAgIH0KKworICAgICAgICBwICs9IHItPnVyaS5sZW47CisKKyAgICAgICAgaWYgKCpwKysgIT0gJyAnKSB7CisgICAgICAgICAgICBnb3RvIG5vX3ZhbGlkOworICAgICAgICB9CisKKyAgICAgICAgLyogc2tpcCBmbGFncyAqLworCisgICAgICAgIHdoaWxlICgqcCkgeworICAgICAgICAgICAgaWYgKCpwKysgPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgZ290byBsZW5ndGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBnb3RvIG5vX3ZhbGlkOworCisgICAgbGVuZ3RoOgorCisgICAgICAgIGxlbiA9IHA7CisKKyAgICAgICAgd2hpbGUgKCpwICYmICpwKysgIT0gQ1IpIHsgLyogdm9pZCAqLyB9CisKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IG5neF9hdG9vZihsZW4sIHAgLSBsZW4gLSAxKTsKKyAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPT0gLTEpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbWNhY2hlZCBzZW50IGludmFsaWQgbGVuZ3RoIGluIHJlc3BvbnNlIFwiJVZcIiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3Iga2V5IFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZsaW5lLCAmci0+dXJpKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKKyAgICAgICAgfQorCisgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPSAyMDA7CisgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSBwICsgMTsKKworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIGlmIChuZ3hfc3RyY21wKHAsICJFTkRceDBkIikgPT0gMCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJrZXk6IFwiJVZcIiB3YXMgbm90IGZvdW5kIGJ5IG1lbWNhY2hlZCIsICZyLT51cmkpOworCisgICAgICAgIHUtPmhlYWRlcnNfaW4uc3RhdHVzX24gPSA0MDQ7CisKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKK25vX3ZhbGlkOgorCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgIm1lbWNhY2hlZCBzZW50IGludmFsaWQgcmVzcG9uc2U6IFwiJVZcIiIsICZsaW5lKTsKKworICAgIHJldHVybiBOR1hfSFRUUF9VUFNUUkVBTV9JTlZBTElEX0hFQURFUjsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9tZW1jYWNoZWRfZmlsdGVyX2luaXQodm9pZCAqZGF0YSkKK3sKKyAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfY3R4X3QgICpjdHggPSBkYXRhOworCisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgKnU7CisKKyAgICB1ID0gY3R4LT5yZXF1ZXN0LT51cHN0cmVhbTsKKworICAgIHUtPmxlbmd0aCArPSBOR1hfSFRUUF9NRU1DQUNIRURfRU5EOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9tZW1jYWNoZWRfZmlsdGVyKHZvaWQgKmRhdGEsIHNzaXplX3QgYnl0ZXMpCit7CisgICAgbmd4X2h0dHBfbWVtY2FjaGVkX2N0eF90ICAqY3R4ID0gZGF0YTsKKworICAgIHVfY2hhciAgICAgICAgICAgICAgICpsYXN0OworICAgIG5neF9idWZfdCAgICAgICAgICAgICpiOworICAgIG5neF9jaGFpbl90ICAgICAgICAgICpjbCwgKipsbDsKKyAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKKworICAgIHUgPSBjdHgtPnJlcXVlc3QtPnVwc3RyZWFtOworICAgIGIgPSAmdS0+YnVmZmVyOworCisgICAgaWYgKHUtPmxlbmd0aCA9PSBjdHgtPnJlc3QpIHsKKworICAgICAgICBpZiAobmd4X3N0cm5jbXAoYi0+bGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX21lbWNhY2hlZF9lbmQgKyBOR1hfSFRUUF9NRU1DQUNIRURfRU5ECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjdHgtPnJlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlcykgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgY3R4LT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1jYWNoZWQgc2VudCBpbnZhbGlkIHRyYWlsZXIiKTsKKyAgICAgICAgfQorCisgICAgICAgIHUtPmxlbmd0aCAtPSBieXRlczsKKyAgICAgICAgY3R4LT5yZXN0IC09IGJ5dGVzOworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgZm9yIChjbCA9IHUtPm91dF9idWZzLCBsbCA9ICZ1LT5vdXRfYnVmczsgY2w7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgbGwgPSAmY2wtPm5leHQ7CisgICAgfQorCisgICAgY2wgPSBuZ3hfY2hhaW5fZ2V0X2ZyZWVfYnVmKGN0eC0+cmVxdWVzdC0+cG9vbCwgJnUtPmZyZWVfYnVmcyk7CisgICAgaWYgKGNsID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBjbC0+YnVmLT5mbHVzaCA9IDE7CisgICAgY2wtPmJ1Zi0+bWVtb3J5ID0gMTsKKworICAgICpsbCA9IGNsOworCisgICAgY2wtPmJ1Zi0+cG9zID0gYi0+bGFzdDsKKyAgICBiLT5sYXN0ICs9IGJ5dGVzOworICAgIGNsLT5idWYtPmxhc3QgPSBiLT5sYXN0OworCisgICAgbmd4X2xvZ19kZWJ1ZzQoTkdYX0xPR19ERUJVR19IVFRQLCBjdHgtPnJlcXVlc3QtPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAibWVtY2FjaGVkIGZpbHRlciBieXRlczoleiBzaXplOiV6IGxlbmd0aDoleiByZXN0OiV6IiwKKyAgICAgICAgICAgICAgICAgICBieXRlcywgYi0+bGFzdCAtIGItPnBvcywgdS0+bGVuZ3RoLCBjdHgtPnJlc3QpOworCisgICAgaWYgKGItPmxhc3QgLSBiLT5wb3MgPD0gKHNzaXplX3QpICh1LT5sZW5ndGggLSBOR1hfSFRUUF9NRU1DQUNIRURfRU5EKSkgeworICAgICAgICB1LT5sZW5ndGggLT0gYnl0ZXM7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisKKyAgICBsYXN0ID0gYi0+cG9zICsgdS0+bGVuZ3RoIC0gTkdYX0hUVFBfTUVNQ0FDSEVEX0VORDsKKworICAgIGlmIChuZ3hfc3RybmNtcChsYXN0LCBuZ3hfaHR0cF9tZW1jYWNoZWRfZW5kLCBiLT5sYXN0IC0gbGFzdCkgIT0gMCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBjdHgtPnJlcXVlc3QtPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAibWVtY2FjaGVkIHNlbnQgaW52YWxpZCB0cmFpbGVyIik7CisgICAgfQorCisgICAgY3R4LT5yZXN0ID0gdS0+bGVuZ3RoIC0gKGItPmxhc3QgLSBiLT5wb3MpOworICAgIGItPmxhc3QgPSBsYXN0OworICAgIGNsLT5idWYtPmxhc3QgPSBsYXN0OworICAgIHUtPmxlbmd0aCA9IGN0eC0+cmVzdDsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIHZvaWQKK25neF9odHRwX21lbWNhY2hlZF9hYm9ydF9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAiYWJvcnQgaHR0cCBtZW1jYWNoZWQgcmVxdWVzdCIpOworICAgIHJldHVybjsKK30KKworCitzdGF0aWMgdm9pZAorbmd4X2h0dHBfbWVtY2FjaGVkX2ZpbmFsaXplX3JlcXVlc3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaW50X3QgcmMpCit7CisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImZpbmFsaXplIGh0dHAgbWVtY2FjaGVkIHJlcXVlc3QiKTsKKyAgICByZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgKgorbmd4X2h0dHBfbWVtY2FjaGVkX2NyZWF0ZV9sb2NfY29uZihuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCAgKmNvbmY7CisKKyAgICBjb25mID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCkpOworICAgIGlmIChjb25mID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIC8qCisgICAgICogc2V0IGJ5IG5neF9wY2FsbG9jKCk6CisgICAgICoKKyAgICAgKiAgICAgY29uZi0+dXBzdHJlYW0uYnVmcy5udW0gPSAwOworICAgICAqICAgICBjb25mLT51cHN0cmVhbS5uZXh0X3Vwc3RyZWFtID0gMDsKKyAgICAgKiAgICAgY29uZi0+dXBzdHJlYW0udGVtcF9wYXRoID0gTlVMTDsKKyAgICAgKiAgICAgY29uZi0+dXBzdHJlYW0uc2NoZW1hID0geyAwLCBOVUxMIH07CisgICAgICogICAgIGNvbmYtPnVwc3RyZWFtLnVyaSA9IHsgMCwgTlVMTCB9OworICAgICAqICAgICBjb25mLT51cHN0cmVhbS5sb2NhdGlvbiA9IE5VTEw7CisgICAgICoKKyAgICAgKiAgICAgY29uZi0+cGVlcnMgPSBOVUxMOworICAgICAqLworCisgICAgY29uZi0+dXBzdHJlYW0uY29ubmVjdF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKKyAgICBjb25mLT51cHN0cmVhbS5zZW5kX3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVF9NU0VDOworICAgIGNvbmYtPnVwc3RyZWFtLnJlYWRfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CisKKyAgICBjb25mLT51cHN0cmVhbS5idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisKKyAgICBjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworICAgIGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUOworCisgICAgLyogImZhc3RjZ2lfY3ljbGljX3RlbXBfZmlsZSIgaXMgZGlzYWJsZWQgKi8KKyAgICBjb25mLT51cHN0cmVhbS5jeWNsaWNfdGVtcF9maWxlID0gMDsKKworICAgIC8qIHRoZSBoYXJkY29kZWQgdmFsdWVzICovCisgICAgY29uZi0+dXBzdHJlYW0uc2VuZF9sb3dhdCA9IDA7CisgICAgY29uZi0+dXBzdHJlYW0uYnVmcy5udW0gPSAwOworICAgIGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplID0gMDsKKyAgICBjb25mLT51cHN0cmVhbS5tYXhfdGVtcF9maWxlX3NpemUgPSAwOworICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplID0gMDsKKyAgICBjb25mLT51cHN0cmVhbS5wYXNzX3hfcG93ZXJlZF9ieSA9IDA7CisgICAgY29uZi0+dXBzdHJlYW0ucmVkaXJlY3RfZXJyb3JzID0gMTsKKyAgICBjb25mLT51cHN0cmVhbS5yZWRpcmVjdF80MDQgPSAxOworICAgIGNvbmYtPnVwc3RyZWFtLnBhc3Nfc2VydmVyID0gMTsKKyAgICBjb25mLT51cHN0cmVhbS5wYXNzX2RhdGUgPSAxOworICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9oZWFkZXJzID0gMDsKKyAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSA9IDA7CisKKyAgICByZXR1cm4gY29uZjsKK30KKworCitzdGF0aWMgY2hhciAqCituZ3hfaHR0cF9tZW1jYWNoZWRfbWVyZ2VfbG9jX2NvbmYobmd4X2NvbmZfdCAqY2YsIHZvaWQgKnBhcmVudCwgdm9pZCAqY2hpbGQpCit7CisgICAgbmd4X2h0dHBfbWVtY2FjaGVkX2xvY19jb25mX3QgKnByZXYgPSBwYXJlbnQ7CisgICAgbmd4X2h0dHBfbWVtY2FjaGVkX2xvY19jb25mX3QgKmNvbmYgPSBjaGlsZDsKKworICAgIG5neF91aW50X3QgIGk7CisKKyAgICBuZ3hfY29uZl9tZXJnZV9tc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmNvbm5lY3RfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLmNvbm5lY3RfdGltZW91dCwgNjAwMDApOworCisgICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT51cHN0cmVhbS5zZW5kX3RpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5zZW5kX3RpbWVvdXQsIDYwMDAwKTsKKworICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0ucmVhZF90aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ucmVhZF90aW1lb3V0LCA2MDAwMCk7CisKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uYnVmZmVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuZ3hfcGFnZXNpemUpOworCisgICAgbmd4X2NvbmZfbWVyZ2VfYml0bWFza192YWx1ZShjb25mLT51cHN0cmVhbS5uZXh0X3Vwc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0ubmV4dF91cHN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOR1hfQ09ORl9CSVRNQVNLX1NFVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxOR1hfSFRUUF9VUFNUUkVBTV9GVF9USU1FT1VUKSk7CisKKyAgICBuZ3hfY29uZl9tZXJnZV91bnNpZ25lZF92YWx1ZShjb25mLT51cHN0cmVhbS5tYXhfZmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5tYXhfZmFpbHMsIDEpOworCisgICAgbmd4X2NvbmZfbWVyZ2Vfc2VjX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLmZhaWxfdGltZW91dCwgMTApOworCisgICAgaWYgKGNvbmYtPnBlZXJzICYmIGNvbmYtPnBlZXJzLT5udW1iZXIgPiAxKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25mLT5wZWVycy0+bnVtYmVyOyBpKyspIHsKKyAgICAgICAgICAgIGNvbmYtPnBlZXJzLT5wZWVyW2ldLndlaWdodCA9IDE7CisgICAgICAgICAgICBjb25mLT5wZWVycy0+cGVlcltpXS5tYXhfZmFpbHMgPSBjb25mLT51cHN0cmVhbS5tYXhfZmFpbHM7CisgICAgICAgICAgICBjb25mLT5wZWVycy0+cGVlcltpXS5mYWlsX3RpbWVvdXQgPSBjb25mLT51cHN0cmVhbS5mYWlsX3RpbWVvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CisKKworc3RhdGljIGNoYXIgKgorbmd4X2h0dHBfbWVtY2FjaGVkX3Bhc3Mobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK3sKKyAgICBuZ3hfaHR0cF9tZW1jYWNoZWRfbG9jX2NvbmZfdCAqbGNmID0gY29uZjsKKworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnZhbHVlOworICAgIG5neF9pbmV0X3Vwc3RyZWFtX3QgICAgICAgIGluZXRfdXBzdHJlYW07CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKworICAgIGlmIChsY2YtPnVwc3RyZWFtLnNjaGVtYS5sZW4pIHsKKyAgICAgICAgcmV0dXJuICJpcyBkdXBsaWNhdGUiOworICAgIH0KKworICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CisKKyAgICBuZ3hfbWVtemVybygmaW5ldF91cHN0cmVhbSwgc2l6ZW9mKG5neF9pbmV0X3Vwc3RyZWFtX3QpKTsKKworICAgIGluZXRfdXBzdHJlYW0ubmFtZSA9IHZhbHVlWzFdOworICAgIGluZXRfdXBzdHJlYW0udXJsID0gdmFsdWVbMV07CisKKyAgICBsY2YtPnBlZXJzID0gbmd4X2luZXRfdXBzdHJlYW1fcGFyc2UoY2YsICZpbmV0X3Vwc3RyZWFtKTsKKyAgICBpZiAobGNmLT5wZWVycyA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBsY2YtPnVwc3RyZWFtLnNjaGVtYS5sZW4gPSBzaXplb2YoIm1lbWNhY2hlZDovLyIpIC0gMTsKKyAgICBsY2YtPnVwc3RyZWFtLnNjaGVtYS5kYXRhID0gKHVfY2hhciAqKSAibWVtY2FjaGVkOi8vIjsKKworICAgIGNsY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbG9jX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIGNsY2YtPmhhbmRsZXIgPSBuZ3hfaHR0cF9tZW1jYWNoZWRfaGFuZGxlcjsKKworICAgIGxjZi0+dXBzdHJlYW0ubG9jYXRpb24gPSBjbGNmLT5uYW1lOworCisgICAgaWYgKGNsY2YtPm5hbWUuZGF0YVtjbGNmLT5uYW1lLmxlbiAtIDFdID09ICcvJykgeworICAgICAgICBjbGNmLT5hdXRvX3JlZGlyZWN0ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCBmMTU4MWU5Li44Mjc4ZDM0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTExMSw2ICsxMTEsMTAgQEAKIHN0YXRpYyBuZ3hfY29uZl9wb3N0X3QgIG5neF9odHRwX3Byb3h5X2xvd2F0X3Bvc3QgPQogICAgIHsgbmd4X2h0dHBfcHJveHlfbG93YXRfY2hlY2sgfTsKIAorc3RhdGljIG5neF9jb25mX2RlcHJlY2F0ZWRfdCAgbmd4X2NvbmZfZGVwcmVjYXRlZF9wcm94eV9oZWFkZXJfYnVmZmVyX3NpemUgPSB7CisgICAgbmd4X2NvbmZfZGVwcmVjYXRlZCwgInByb3h5X2hlYWRlcl9idWZmZXJfc2l6ZSIsICJwcm94eV9idWZmZXJfc2l6ZSIKK307CisKIAogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2h0dHBfcHJveHlfbmV4dF91cHN0cmVhbV9tYXNrc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiZXJyb3IiKSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfRVJST1IgfSwKQEAgLTEzOCw2ICsxNDIsMTMgQEAKICAgICAgIDAsCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2J1ZmZlcmluZyIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCisgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgdXBzdHJlYW0uYnVmZmVyaW5nKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygicHJveHlfY29ubmVjdF90aW1lb3V0IiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfbXNlY19zbG90LApAQCAtMjAxLDEyICsyMTIsMTkgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5KSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygicHJveHlfYnVmZmVyX3NpemUiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9zaXplX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5idWZmZXJfc2l6ZSksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoInByb3h5X2hlYWRlcl9idWZmZXJfc2l6ZSIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3NpemVfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSksCi0gICAgICBOVUxMIH0sCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5idWZmZXJfc2l6ZSksCisgICAgICAmbmd4X2NvbmZfZGVwcmVjYXRlZF9wcm94eV9oZWFkZXJfYnVmZmVyX3NpemUgfSwKIAogICAgIHsgbmd4X3N0cmluZygicHJveHlfcmVhZF90aW1lb3V0IiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCkBAIC0zMzMsNiArMzUxLDcgQEAKIHN0YXRpYyBuZ3hfdGFibGVfZWx0X3QgIG5neF9odHRwX3Byb3h5X2hlYWRlcnNbXSA9IHsKICAgICB7IDAsIG5neF9zdHJpbmcoIkhvc3QiKSwgbmd4X3N0cmluZygiJHByb3h5X2hvc3QiKSB9LAogICAgIHsgMCwgbmd4X3N0cmluZygiQ29ubmVjdGlvbiIpLCBuZ3hfc3RyaW5nKCJjbG9zZSIpIH0sCisgICAgeyAwLCBuZ3hfc3RyaW5nKCJLZWVwLUFsaXZlIiksIG5neF9zdHJpbmcoIiIpIH0sCiAgICAgeyAwLCBuZ3hfbnVsbF9zdHJpbmcsIG5neF9udWxsX3N0cmluZyB9CiB9OwogCkBAIC0zOTUsNyArNDE0LDE1IEBACiAgICAgICAgIHUtPnJld3JpdGVfcmVkaXJlY3QgPSBuZ3hfaHR0cF9wcm94eV9yZXdyaXRlX3JlZGlyZWN0OwogICAgIH0KIAotICAgIHUtPnBpcGUuaW5wdXRfZmlsdGVyID0gbmd4X2V2ZW50X3BpcGVfY29weV9pbnB1dF9maWx0ZXI7CisgICAgaWYgKHBsY2YtPnVwc3RyZWFtLmJ1ZmZlcmluZykgeworCisgICAgICAgIHUtPnBpcGUgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2V2ZW50X3BpcGVfdCkpOworICAgICAgICBpZiAodS0+cGlwZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgdS0+cGlwZS0+aW5wdXRfZmlsdGVyID0gbmd4X2V2ZW50X3BpcGVfY29weV9pbnB1dF9maWx0ZXI7CisgICAgfQogCiAgICAgdS0+YWNjZWwgPSAxOwogCkBAIC04MjgsNyArODU1LDcgQEAKIAogICAgIHN0YXRlID0gci0+c3RhdGU7CiAKLSAgICBmb3IgKHBvcyA9IHUtPmhlYWRlcl9pbi5wb3M7IHBvcyA8IHUtPmhlYWRlcl9pbi5sYXN0OyBwb3MrKykgeworICAgIGZvciAocG9zID0gdS0+YnVmZmVyLnBvczsgcG9zIDwgdS0+YnVmZmVyLmxhc3Q7IHBvcysrKSB7CiAgICAgICAgIGNoID0gKnBvczsKIAogICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7CkBAIC05ODYsMTQgKzEwMTMsMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHUtPmhlYWRlcl9pbi5wb3MgPSBwb3M7CisgICAgdS0+YnVmZmVyLnBvcyA9IHBvczsKICAgICByLT5zdGF0ZSA9IHN0YXRlOwogCiAgICAgcmV0dXJuIE5HWF9BR0FJTjsKIAogZG9uZToKIAotICAgIHUtPmhlYWRlcl9pbi5wb3MgPSBwb3MgKyAxOworICAgIHUtPmJ1ZmZlci5wb3MgPSBwb3MgKyAxOwogCiAgICAgaWYgKHAtPnN0YXR1c19lbmQgPT0gTlVMTCkgewogICAgICAgICBwLT5zdGF0dXNfZW5kID0gcG9zOwpAQCAtMTAxOSw3ICsxMDQ2LDcgQEAKIAogICAgIGZvciAoIDs7ICApIHsKIAotICAgICAgICByYyA9IG5neF9odHRwX3BhcnNlX2hlYWRlcl9saW5lKHIsICZyLT51cHN0cmVhbS0+aGVhZGVyX2luKTsKKyAgICAgICAgcmMgPSBuZ3hfaHR0cF9wYXJzZV9oZWFkZXJfbGluZShyLCAmci0+dXBzdHJlYW0tPmJ1ZmZlcik7CiAKICAgICAgICAgaWYgKHJjID09IE5HWF9PSykgewogCkBAIC0xMzU5LDcgKzEzODYsNiBAQAogICAgICAqIHNldCBieSBuZ3hfcGNhbGxvYygpOgogICAgICAqCiAgICAgICogICAgIGNvbmYtPnVwc3RyZWFtLmJ1ZnMubnVtID0gMDsKLSAgICAgKiAgICAgY29uZi0+dXBzdHJlYW0ucGF0aCA9IE5VTEw7CiAgICAgICogICAgIGNvbmYtPnVwc3RyZWFtLm5leHRfdXBzdHJlYW0gPSAwOwogICAgICAqICAgICBjb25mLT51cHN0cmVhbS50ZW1wX3BhdGggPSBOVUxMOwogICAgICAqICAgICBjb25mLT51cHN0cmVhbS5zY2hlbWEgPSB7IDAsIE5VTEwgfTsKQEAgLTEzNzcsMTIgKzE0MDMsMTQgQEAKICAgICAgKiAgICAgY29uZi0+cmV3cml0ZV9sb2NhdGlvbnMgPSBOVUxMOwogICAgICAqLwogCisgICAgY29uZi0+dXBzdHJlYW0uYnVmZmVyaW5nID0gTkdYX0NPTkZfVU5TRVQ7CisKICAgICBjb25mLT51cHN0cmVhbS5jb25uZWN0X3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVF9NU0VDOwogICAgIGNvbmYtPnVwc3RyZWFtLnNlbmRfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+dXBzdHJlYW0ucmVhZF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKIAogICAgIGNvbmYtPnVwc3RyZWFtLnNlbmRfbG93YXQgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwotICAgIGNvbmYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CisgICAgY29uZi0+dXBzdHJlYW0uYnVmZmVyX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCiAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwpAQCAtMTQyNiw2ICsxNDU0LDkgQEAKICAgICBuZ3hfaHR0cF9zY3JpcHRfY29tcGlsZV90ICAgICBzYzsKICAgICBuZ3hfaHR0cF9zY3JpcHRfY29weV9jb2RlX3QgICpjb3B5OwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0uYnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uYnVmZmVyaW5nLCAxKTsKKwogICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+dXBzdHJlYW0uY29ubmVjdF90aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uY29ubmVjdF90aW1lb3V0LCA2MDAwMCk7CiAKQEAgLTE0MzgsOCArMTQ2OSw4IEBACiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS5zZW5kX2xvd2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uc2VuZF9sb3dhdCwgMCk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSwKKyAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmJ1ZmZlcl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuZ3hfcGFnZXNpemUpOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfYnVmc192YWx1ZShjb25mLT51cHN0cmVhbS5idWZzLCBwcmV2LT51cHN0cmVhbS5idWZzLApAQCAtMTQ1Miw3ICsxNDgzLDcgQEAKICAgICB9CiAKIAotICAgIHNpemUgPSBjb25mLT51cHN0cmVhbS5oZWFkZXJfYnVmZmVyX3NpemU7CisgICAgc2l6ZSA9IGNvbmYtPnVwc3RyZWFtLmJ1ZmZlcl9zaXplOwogICAgIGlmIChzaXplIDwgY29uZi0+dXBzdHJlYW0uYnVmcy5zaXplKSB7CiAgICAgICAgIHNpemUgPSBjb25mLT51cHN0cmVhbS5idWZzLnNpemU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwppbmRleCAwNWUyYzkzLi43YjIxZWFlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSwogICAgICAgICB8fCByLT5tYWluICE9IHIKICAgICAgICAgfHwgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9PSAtMQotICAgICAgICB8fCAhci0+ZmlsdGVyX2FsbG93X3JhbmdlcykKKyAgICAgICAgfHwgIXItPmFsbG93X3JhbmdlcykKICAgICB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWFsaXBfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYwppbmRleCA4NzMyNDIzLi4yMTBiYmY2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlYWxpcF9tb2R1bGUuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAKICAgICAqaCA9IG5neF9odHRwX3JlYWxpcF9oYW5kbGVyOwogCi0gICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfQUNDRVNTX1BIQVNFXS5oYW5kbGVycyk7CisgICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfUFJFQUNDRVNTX1BIQVNFXS5oYW5kbGVycyk7CiAgICAgaWYgKGggPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKaW5kZXggNzRjZDAxMC4uODA4ZDk0NSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAotICAgIHItPmZpbHRlcl9hbGxvd19yYW5nZXMgPSAxOworICAgIHItPmFsbG93X3JhbmdlcyA9IDE7CiAKICAgICByYyA9IG5neF9odHRwX3NlbmRfaGVhZGVyKHIpOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCBiZmI3YzZiLi4wMjM4OTk4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTMyNiw4ICszMjYsMTggQEAKICAgICBjbWNmLT5waGFzZXNbTkdYX0hUVFBfUkVXUklURV9QSEFTRV0udHlwZSA9IE5HWF9PSzsKIAogCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfUFJFQUNDRVNTX1BIQVNFXS5oYW5kbGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgY2YtPnBvb2wsIDEsIHNpemVvZihuZ3hfaHR0cF9oYW5kbGVyX3B0KSkKKyAgICAgICAgIT0gTkdYX09LKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9QUkVBQ0NFU1NfUEhBU0VdLnR5cGUgPSBOR1hfT0s7CisKKwogICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmY21jZi0+cGhhc2VzW05HWF9IVFRQX0FDQ0VTU19QSEFTRV0uaGFuZGxlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgIGNmLT5wb29sLCA0LCBzaXplb2Yobmd4X2h0dHBfaGFuZGxlcl9wdCkpCisgICAgICAgICAgICAgICAgICAgICAgIGNmLT5wb29sLCAyLCBzaXplb2Yobmd4X2h0dHBfaGFuZGxlcl9wdCkpCiAgICAgICAgICE9IE5HWF9PSykKICAgICB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKQEAgLTM0Niw2ICszNTYsMTYgQEAKICAgICBjbWNmLT5waGFzZXNbTkdYX0hUVFBfQ09OVEVOVF9QSEFTRV0udHlwZSA9IE5HWF9PSzsKIAogCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfTE9HX1BIQVNFXS5oYW5kbGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgY2YtPnBvb2wsIDEsIHNpemVvZihuZ3hfaHR0cF9oYW5kbGVyX3B0KSkKKyAgICAgICAgIT0gTkdYX09LKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9MT0dfUEhBU0VdLnR5cGUgPSBOR1hfT0s7CisKKwogICAgIGNtY2YtPmhlYWRlcnNfaW5faGFzaC5tYXhfc2l6ZSA9IDEwMDsKICAgICBjbWNmLT5oZWFkZXJzX2luX2hhc2guYnVja2V0X2xpbWl0ID0gMTsKICAgICBjbWNmLT5oZWFkZXJzX2luX2hhc2guYnVja2V0X3NpemUgPSBzaXplb2Yobmd4X2h0dHBfaGVhZGVyX3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHAuaCBiL3NyYy9odHRwL25neF9odHRwLmgKaW5kZXggOGU1YWU1Ny4uZGRjZDFiZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHAuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCkBAIC03Niw3ICs3NiwxMSBAQAogdm9pZCBuZ3hfaHR0cF9lbXB0eV9oYW5kbGVyKG5neF9ldmVudF90ICp3ZXYpOwogdm9pZCBuZ3hfaHR0cF9yZXF1ZXN0X2VtcHR5X2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKIAotbmd4X2ludF90IG5neF9odHRwX3NlbmRfbGFzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworI2RlZmluZSBOR1hfSFRUUF9MQVNUICAgMQorI2RlZmluZSBOR1hfSFRUUF9GTFVTSCAgMgorCituZ3hfaW50X3Qgbmd4X2h0dHBfc2VuZF9zcGVjaWFsKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3VpbnRfdCBmbGFncyk7CisKIHVfY2hhciAqIG5neF9odHRwX2xvZ19lcnJvcl9pbmZvKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgc2l6ZV90IGxlbik7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDVmZDUzMTcuLjQ3NDMzODkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAKICAgICBjbWNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9tYWluX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCi0gICAgZm9yICgvKiB2b2lkICovOyByLT5waGFzZSA8IE5HWF9IVFRQX0xBU1RfUEhBU0U7IHItPnBoYXNlKyspIHsKKyAgICBmb3IgKC8qIHZvaWQgKi87IHItPnBoYXNlIDwgTkdYX0hUVFBfTE9HX1BIQVNFOyByLT5waGFzZSsrKSB7CiAKICAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX1JFV1JJVEVfUEhBU0UgKyAxICYmIHItPnVyaV9jaGFuZ2VkKSB7CiAKQEAgLTEwOTgsNyArMTA5OCw4IEBACiAgICAgfQogCiAgICAgaWYgKG5neF9saXN0X2luaXQoJnNyLT5oZWFkZXJzX291dC5oZWFkZXJzLCByLT5wb29sLCAyMCwKLSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSkgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfdGFibGVfZWx0X3QpKQorICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCmluZGV4IDFiZTNiMzguLmU5Yzk5NGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaApAQCAtNTAsMTAgKzUwLDEyIEBACiAgICAgTkdYX0hUVFBfRklORF9DT05GSUdfUEhBU0UsCiAgICAgTkdYX0hUVFBfUkVXUklURV9QSEFTRSwKIAorICAgIE5HWF9IVFRQX1BSRUFDQ0VTU19QSEFTRSwKKwogICAgIE5HWF9IVFRQX0FDQ0VTU19QSEFTRSwKICAgICBOR1hfSFRUUF9DT05URU5UX1BIQVNFLAogCi0gICAgTkdYX0hUVFBfTEFTVF9QSEFTRQorICAgIE5HWF9IVFRQX0xPR19QSEFTRQogfSBuZ3hfaHR0cF9waGFzZXM7CiAKIApAQCAtNjYsOCArNjgsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIHNlcnZlcnM7ICAgICAgICAgLyogbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICovCiAKLSAgICBuZ3hfaHR0cF9waGFzZV90ICAgICAgICAgICBwaGFzZXNbTkdYX0hUVFBfTEFTVF9QSEFTRV07Ci0gICAgbmd4X2h0dHBfaGFuZGxlcl9wdCAgICAgICAgbG9nX2hhbmRsZXI7CisgICAgbmd4X2h0dHBfcGhhc2VfdCAgICAgICAgICAgcGhhc2VzW05HWF9IVFRQX0xPR19QSEFTRSArIDFdOwogCiAgICAgbmd4X2hhc2hfdCAgICAgICAgICAgICAgICAgaGVhZGVyc19pbl9oYXNoOwogICAgIG5neF9oYXNoX3QgICAgICAgICAgICAgICAgIHZhcmlhYmxlc19oYXNoOwpAQCAtODQsOCArODUsOCBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyoKLSAgICAgKiBhcnJheSBvZiB0aGUgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90LAotICAgICAqIHVzZWQgaW4gdGhlIHRyYW5zbGF0aW9uIGhhbmRsZXIgYW5kIGluIHRoZSBtZXJnZSBwaGFzZQorICAgICAqIGFycmF5IG9mIHRoZSBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgKiwKKyAgICAgKiB1c2VkIGluIHRoZSBuZ3hfaHR0cF9jb3JlX2ZpbmRfbG9jYXRpb24oKSBhbmQgaW4gdGhlIG1lcmdlIHBoYXNlCiAgICAgICovCiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgbG9jYXRpb25zOwogCkBAIC0yODcsNyArMjg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICNkZWZpbmUgbmd4X2h0dHBfY2xlYXJfYWNjZXB0X3JhbmdlcyhyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByLT5maWx0ZXJfYWxsb3dfcmFuZ2VzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByLT5hbGxvd19yYW5nZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoci0+aGVhZGVyc19vdXQuYWNjZXB0X3JhbmdlcykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgci0+aGVhZGVyc19vdXQuYWNjZXB0X3Jhbmdlcy0+aGFzaCA9IDAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgci0+aGVhZGVyc19vdXQuYWNjZXB0X3JhbmdlcyA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCBhNzNjNzg4Li5mNjk1MDU2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC05NSw2ICs5NSwxMCBAQAogICAgIHsgbmd4X3N0cmluZygiUmFuZ2UiKSwgb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19pbl90LCByYW5nZSksCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKIAorICAgIHsgbmd4X3N0cmluZygiVHJhbnNmZXItRW5jb2RpbmciKSwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19pbl90LCB0cmFuc2Zlcl9lbmNvZGluZyksCisgICAgICAgICAgICAgICAgIG5neF9odHRwX3Byb2Nlc3NfaGVhZGVyX2xpbmUgfSwKKwogI2lmIChOR1hfSFRUUF9HWklQKQogICAgIHsgbmd4X3N0cmluZygiQWNjZXB0LUVuY29kaW5nIiksCiAgICAgICAgICAgICAgICAgIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfaW5fdCwgYWNjZXB0X2VuY29kaW5nKSwKQEAgLTM3Nyw3ICszODEsOCBAQAogCiAKICAgICBpZiAobmd4X2xpc3RfaW5pdCgmci0+aGVhZGVyc19vdXQuaGVhZGVycywgci0+cG9vbCwgMjAsCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X3RhYmxlX2VsdF90KSkKKyAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgIHsKICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICByZXR1cm47CkBAIC02NjAsNyArNjY1LDggQEAKIAogCiAgICAgICAgICAgICBpZiAobmd4X2xpc3RfaW5pdCgmci0+aGVhZGVyc19pbi5oZWFkZXJzLCByLT5wb29sLCAyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfdGFibGVfZWx0X3QpKQorICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjY4LDcgKzY3NCw4IEBACiAKIAogICAgICAgICAgICAgaWYgKG5neF9hcnJheV9pbml0KCZyLT5oZWFkZXJzX2luLmNvb2tpZXMsIHItPnBvb2wsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X3RhYmxlX2VsdF90ICopKSA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCAqKSkKKyAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyMTMsNyArMTIyMCw3IEBACiAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmNvbnRlbnRfbGVuZ3RoX24gPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgaW52YWxpZCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyIik7Ci0gICAgICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0JBRF9SRVFVRVNUKTsKKyAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfTEVOR1RIX1JFUVVJUkVEKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMjIxLDcgKzEyMjgsMTYgQEAKICAgICBpZiAoci0+bWV0aG9kID09IE5HWF9IVFRQX1BPU1QgJiYgci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgUE9TVCBtZXRob2Qgd2l0aG91dCBcIkNvbnRlbnQtTGVuZ3RoXCIgaGVhZGVyIik7Ci0gICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfQkFEX1JFUVVFU1QpOworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0xFTkdUSF9SRVFVSVJFRCk7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgaWYgKHItPmhlYWRlcnNfaW4udHJhbnNmZXJfZW5jb2RpbmcKKyAgICAgICAgJiYgbmd4X3N0cnN0cihyLT5oZWFkZXJzX2luLnRyYW5zZmVyX2VuY29kaW5nLT52YWx1ZS5kYXRhLCAiY2h1bmtlZCIpKQorICAgIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHNlbnQgXCJUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFwiIGhlYWRlciIpOworICAgICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIE5HWF9IVFRQX0xFTkdUSF9SRVFVSVJFRCk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCkBAIC0yMDk1LDcgKzIxMTEsMTAgQEAKICNpZiAoTkdYX0hBVkVfS1FVRVVFKQogCiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7Ci0gICAgICAgIGlmIChyZXYtPnBlbmRpbmdfZW9mKSB7CisgICAgICAgIGlmIChyZXYtPnBlbmRpbmdfZW9mCisgICAgICAgICAgICAvKiBGcmVlQlNEIDUueC02LnggbWF5IGVycm9uZW91c2x5IHJlcG9ydCBFVElNRURPVVQgKi8KKyAgICAgICAgICAgICYmIHJldi0+a3FfZXJybm8gIT0gTkdYX0VUSU1FRE9VVCkKKyAgICAgICAgewogICAgICAgICAgICAgYy0+bG9nLT5oYW5kbGVyID0gTlVMTDsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIHJldi0+a3FfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCB0aGF0IGNsaWVudCAlViBjbG9zZWQgIgpAQCAtMjMxMiw3ICsyMzMxLDcgQEAKIAogCiBuZ3hfaW50X3QKLW5neF9odHRwX3NlbmRfbGFzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCituZ3hfaHR0cF9zZW5kX3NwZWNpYWwobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfdWludF90IGZsYWdzKQogewogICAgIG5neF9idWZfdCAgICAqYjsKICAgICBuZ3hfY2hhaW5fdCAgIG91dDsKQEAgLTIzMjIsNyArMjM0MSwxNCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGItPmxhc3RfYnVmID0gMTsKKyAgICBpZiAoZmxhZ3MgJiBOR1hfSFRUUF9MQVNUKSB7CisgICAgICAgIGItPmxhc3RfYnVmID0gMTsKKyAgICB9CisKKyAgICBpZiAoZmxhZ3MgJiBOR1hfSFRUUF9GTFVTSCkgeworICAgICAgICBiLT5mbHVzaCA9IDE7CisgICAgfQorCiAgICAgb3V0LmJ1ZiA9IGI7CiAgICAgb3V0Lm5leHQgPSBOVUxMOwogCkBAIC0yMzU0LDggKzIzODAsMTAgQEAKIG5neF9odHRwX3JlcXVlc3RfZG9uZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9pbnRfdCBlcnJvcikKIHsKICAgICBuZ3hfbG9nX3QgICAgICAgICAgICAgICAgICAqbG9nOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpLCBuOwogICAgIHN0cnVjdCBsaW5nZXIgICAgICAgICAgICAgICBsaW5nZXI7CiAgICAgbmd4X2h0dHBfbG9nX2N0eF90ICAgICAgICAgKmN0eDsKKyAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqbG9nX2hhbmRsZXI7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAgKmNsY2Y7CiAgICAgbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CiAKQEAgLTIzODYsOCArMjQxNCwxMCBAQAogCiAgICAgY21jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAotICAgIGlmIChjbWNmLT5sb2dfaGFuZGxlcikgewotICAgICAgICBjbWNmLT5sb2dfaGFuZGxlcihyKTsKKyAgICBsb2dfaGFuZGxlciA9IGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9MT0dfUEhBU0VdLmhhbmRsZXJzLmVsdHM7CisgICAgbiA9IGNtY2YtPnBoYXNlc1tOR1hfSFRUUF9MT0dfUEhBU0VdLmhhbmRsZXJzLm5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgbG9nX2hhbmRsZXJbaV0ocik7CiAgICAgfQogCiAgICAgaWYgKHItPmNvbm5lY3Rpb24tPnRpbWVkb3V0KSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggZGExMmI1OC4uN2IwZTdmMCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtNTgsNiArNTgsNyBAQAogI2RlZmluZSBOR1hfSFRUUF9OT1RfRk9VTkQgICAgICAgICAgICAgICAgIDQwNAogI2RlZmluZSBOR1hfSFRUUF9OT1RfQUxMT1dFRCAgICAgICAgICAgICAgIDQwNQogI2RlZmluZSBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUICAgICAgICAgIDQwOAorI2RlZmluZSBOR1hfSFRUUF9MRU5HVEhfUkVRVUlSRUQgICAgICAgICAgIDQxMQogI2RlZmluZSBOR1hfSFRUUF9SRVFVRVNUX0VOVElUWV9UT09fTEFSR0UgIDQxMwogI2RlZmluZSBOR1hfSFRUUF9SRVFVRVNUX1VSSV9UT09fTEFSR0UgICAgIDQxNAogI2RlZmluZSBOR1hfSFRUUF9SQU5HRV9OT1RfU0FUSVNGSUFCTEUgICAgIDQxNgpAQCAtMTQzLDYgKzE0NCw4IEBACiAKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqcmFuZ2U7CiAKKyAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqdHJhbnNmZXJfZW5jb2Rpbmc7CisKICNpZiAoTkdYX0hUVFBfR1pJUCkKICAgICBuZ3hfdGFibGVfZWx0X3QgICAgICAgICAgICAgICAgICAqYWNjZXB0X2VuY29kaW5nOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICp2aWE7CkBAIC00MDAsNyArNDAzLDcgQEAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9maWx0ZXJfbmVlZF9pbl9tZW1vcnk6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyX25lZWRfaW5fbWVtb3J5OjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9uZWVkX3RlbXBvcmFyeToxOwotICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJfYWxsb3dfcmFuZ2VzOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3JhbmdlczoxOwogCiAjaWYgKE5HWF9TVEFUX1NUVUIpCiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRfcmVhZGluZzoxOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCmluZGV4IGQxMTVmZGQuLmI4ZDY5OGYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKQEAgLTExNSw2ICsxMTUsMTQgQEAKIDsKIAogCitzdGF0aWMgY2hhciBlcnJvcl80MTFfcGFnZVtdID0KKyI8aHRtbD4iIENSTEYKKyI8aGVhZD48dGl0bGU+NDExIExlbmd0aCBSZXF1aXJlZDwvdGl0bGU+PC9oZWFkPiIgQ1JMRgorIjxib2R5IGJnY29sb3I9XCJ3aGl0ZVwiPiIgQ1JMRgorIjxjZW50ZXI+PGgxPjQxMSBMZW5ndGggUmVxdWlyZWQ8L2gxPjwvY2VudGVyPiIgQ1JMRgorOworCisKIHN0YXRpYyBjaGFyIGVycm9yXzQxM19wYWdlW10gPQogIjxodG1sPiIgQ1JMRgogIjxoZWFkPjx0aXRsZT40MTMgUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlPC90aXRsZT48L2hlYWQ+IiBDUkxGCkBAIC0yMTMsNyArMjIxLDcgQEAKICAgICBuZ3hfc3RyaW5nKGVycm9yXzQwOF9wYWdlKSwKICAgICBuZ3hfbnVsbF9zdHJpbmcsICAgICAgICAgICAgIC8qIDQwOSAqLwogICAgIG5neF9zdHJpbmcoZXJyb3JfNDEwX3BhZ2UpLAotICAgIG5neF9udWxsX3N0cmluZywgICAgICAgICAgICAgLyogNDExICovCisgICAgbmd4X3N0cmluZyhlcnJvcl80MTFfcGFnZSksCiAgICAgbmd4X251bGxfc3RyaW5nLCAgICAgICAgICAgICAvKiA0MTIgKi8KICAgICBuZ3hfc3RyaW5nKGVycm9yXzQxM19wYWdlKSwKICAgICBuZ3hfc3RyaW5nKGVycm9yXzQxNF9wYWdlKSwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDYyZjVkOWUuLjM3ZTk3OWEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtNiw3ICs2LDYgQEAKIAogI2luY2x1ZGUgPG5neF9jb25maWcuaD4KICNpbmNsdWRlIDxuZ3hfY29yZS5oPgotI2luY2x1ZGUgPG5neF9ldmVudF9jb25uZWN0Lmg+CiAjaW5jbHVkZSA8bmd4X2h0dHAuaD4KIAogCkBAIC0yNCw2ICsyMywxMiBAQAogc3RhdGljIHZvaWQgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19oZWFkZXIobmd4X2V2ZW50X3QgKnJldik7CiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF91cHN0cmVhbV9zZW5kX3Jlc3BvbnNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICp1KTsKK3N0YXRpYyB2b2lkCisgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19ub25fYnVmZmVyZWRfZG93bnN0cmVhbShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworc3RhdGljIHZvaWQgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19ub25fYnVmZmVyZWRfYm9keShuZ3hfZXZlbnRfdCAqZXYpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF91cHN0cmVhbV9ub25fYnVmZmVyZWRfZmlsdGVyX2luaXQodm9pZCAqZGF0YSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Vwc3RyZWFtX25vbl9idWZmZXJlZF9maWx0ZXIodm9pZCAqZGF0YSwKKyAgICBzc2l6ZV90IGJ5dGVzKTsKIHN0YXRpYyB2b2lkIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfZG93bnN0cmVhbShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogc3RhdGljIHZvaWQgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19ib2R5KG5neF9ldmVudF90ICpldik7CiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF91cHN0cmVhbV9kdW1teV9oYW5kbGVyKG5neF9ldmVudF90ICp3ZXYpOwpAQCAtNjk5LDIxICs3MDQsMjEgQEAKICAgICB1LT5vdXRwdXQuaW4gPSBOVUxMOwogICAgIHUtPm91dHB1dC5idXN5ID0gTlVMTDsKIAotICAgIC8qIHJlaW5pdCB1LT5oZWFkZXJfaW4gYnVmZmVyICovCisgICAgLyogcmVpbml0IHUtPmJ1ZmZlciAqLwogCiAjaWYgMAogICAgIGlmICh1LT5jYWNoZSkgewotICAgICAgICB1LT5oZWFkZXJfaW4ucG9zID0gdS0+aGVhZGVyX2luLnN0YXJ0ICsgdS0+Y2FjaGUtPmN0eC5oZWFkZXJfc2l6ZTsKLSAgICAgICAgdS0+aGVhZGVyX2luLmxhc3QgPSB1LT5oZWFkZXJfaW4ucG9zOworICAgICAgICB1LT5idWZmZXIucG9zID0gdS0+YnVmZmVyLnN0YXJ0ICsgdS0+Y2FjaGUtPmN0eC5oZWFkZXJfc2l6ZTsKKyAgICAgICAgdS0+YnVmZmVyLmxhc3QgPSB1LT5idWZmZXIucG9zOwogCiAgICAgfSBlbHNlIHsKLSAgICAgICAgdS0+aGVhZGVyX2luLnBvcyA9IHUtPmhlYWRlcl9pbi5zdGFydDsKLSAgICAgICAgdS0+aGVhZGVyX2luLmxhc3QgPSB1LT5oZWFkZXJfaW4uc3RhcnQ7CisgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIuc3RhcnQ7CisgICAgICAgIHUtPmJ1ZmZlci5sYXN0ID0gdS0+YnVmZmVyLnN0YXJ0OwogICAgIH0KICNlbHNlCiAKLSAgICAgICAgdS0+aGVhZGVyX2luLnBvcyA9IHUtPmhlYWRlcl9pbi5zdGFydDsKLSAgICAgICAgdS0+aGVhZGVyX2luLmxhc3QgPSB1LT5oZWFkZXJfaW4uc3RhcnQ7CisgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIuc3RhcnQ7CisgICAgICAgIHUtPmJ1ZmZlci5sYXN0ID0gdS0+YnVmZmVyLnN0YXJ0OwogCiAjZW5kaWYKIApAQCAtODgxLDIzICs4ODYsMjQgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh1LT5oZWFkZXJfaW4uc3RhcnQgPT0gTlVMTCkgewotICAgICAgICB1LT5oZWFkZXJfaW4uc3RhcnQgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHUtPmNvbmYtPmhlYWRlcl9idWZmZXJfc2l6ZSk7Ci0gICAgICAgIGlmICh1LT5oZWFkZXJfaW4uc3RhcnQgPT0gTlVMTCkgeworICAgIGlmICh1LT5idWZmZXIuc3RhcnQgPT0gTlVMTCkgeworICAgICAgICB1LT5idWZmZXIuc3RhcnQgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHUtPmNvbmYtPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgaWYgKHUtPmJ1ZmZlci5zdGFydCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICB1LT5oZWFkZXJfaW4ucG9zID0gdS0+aGVhZGVyX2luLnN0YXJ0OwotICAgICAgICB1LT5oZWFkZXJfaW4ubGFzdCA9IHUtPmhlYWRlcl9pbi5zdGFydDsKLSAgICAgICAgdS0+aGVhZGVyX2luLmVuZCA9IHUtPmhlYWRlcl9pbi5zdGFydCArIHUtPmNvbmYtPmhlYWRlcl9idWZmZXJfc2l6ZTsKLSAgICAgICAgdS0+aGVhZGVyX2luLnRlbXBvcmFyeSA9IDE7CisgICAgICAgIHUtPmJ1ZmZlci5wb3MgPSB1LT5idWZmZXIuc3RhcnQ7CisgICAgICAgIHUtPmJ1ZmZlci5sYXN0ID0gdS0+YnVmZmVyLnN0YXJ0OworICAgICAgICB1LT5idWZmZXIuZW5kID0gdS0+YnVmZmVyLnN0YXJ0ICsgdS0+Y29uZi0+YnVmZmVyX3NpemU7CisgICAgICAgIHUtPmJ1ZmZlci50ZW1wb3JhcnkgPSAxOwogCi0gICAgICAgIHUtPmhlYWRlcl9pbi50YWcgPSB1LT5vdXRwdXQudGFnOworICAgICAgICB1LT5idWZmZXIudGFnID0gdS0+b3V0cHV0LnRhZzsKIAogICAgICAgICBpZiAobmd4X2xpc3RfaW5pdCgmci0+dXBzdHJlYW0tPmhlYWRlcnNfaW4uaGVhZGVycywgci0+cG9vbCwgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpCisgICAgICAgICAgICAhPSBOR1hfT0spCiAgICAgICAgIHsKICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKQEAgLTkwNiwxNCArOTEyLDE0IEBACiAKICNpZiAwCiAgICAgICAgIGlmICh1LT5jYWNoZSkgewotICAgICAgICAgICAgdS0+aGVhZGVyX2luLnBvcyArPSB1LT5jYWNoZS0+Y3R4LmhlYWRlcl9zaXplOwotICAgICAgICAgICAgdS0+aGVhZGVyX2luLmxhc3QgPSB1LT5oZWFkZXJfaW4ucG9zOworICAgICAgICAgICAgdS0+YnVmZmVyLnBvcyArPSB1LT5jYWNoZS0+Y3R4LmhlYWRlcl9zaXplOworICAgICAgICAgICAgdS0+YnVmZmVyLmxhc3QgPSB1LT5idWZmZXIucG9zOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9CiAKLSAgICBuID0gdS0+cGVlci5jb25uZWN0aW9uLT5yZWN2KHUtPnBlZXIuY29ubmVjdGlvbiwgdS0+aGVhZGVyX2luLmxhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LT5oZWFkZXJfaW4uZW5kIC0gdS0+aGVhZGVyX2luLmxhc3QpOworICAgIG4gPSB1LT5wZWVyLmNvbm5lY3Rpb24tPnJlY3YodS0+cGVlci5jb25uZWN0aW9uLCB1LT5idWZmZXIubGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUtPmJ1ZmZlci5lbmQgLSB1LT5idWZmZXIubGFzdCk7CiAKICAgICBpZiAobiA9PSBOR1hfQUdBSU4pIHsKICNpZiAwCkBAIC05MzksNyArOTQ1LDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHUtPmhlYWRlcl9pbi5sYXN0ICs9IG47CisgICAgdS0+YnVmZmVyLmxhc3QgKz0gbjsKIAogI2lmIDAKICAgICB1LT52YWxpZF9oZWFkZXJfaW4gPSAwOwpAQCAtOTU0LDcgKzk2MCw3IEBACiAgICAgICAgIG5neF9hZGRfdGltZXIocmV2LCB1LT5yZWFkX3RpbWVvdXQpOwogI2VuZGlmCiAKLSAgICAgICAgaWYgKHUtPmhlYWRlcl9pbi5wb3MgPT0gdS0+aGVhZGVyX2luLmVuZCkgeworICAgICAgICBpZiAodS0+YnVmZmVyLnBvcyA9PSB1LT5idWZmZXIuZW5kKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgdG9vIGJpZyBoZWFkZXIiKTsKIApAQCAtMTAyMCw2ICsxMDI2LDEzIEBACiAgICAgICAgICYmIHUtPmNvbmYtPnJlZGlyZWN0X2Vycm9ycwogICAgICAgICAmJiByLT5lcnJfY3R4ID09IE5VTEwpCiAgICAgeworICAgICAgICBpZiAodS0+aGVhZGVyc19pbi5zdGF0dXNfbiA9PSBOR1hfSFRUUF9OT1RfRk9VTkQKKyAgICAgICAgICAgICYmIHUtPmNvbmYtPnJlZGlyZWN0XzQwNCkKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCA0MDQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCiAgICAgICAgIGlmIChjbGNmLT5lcnJvcl9wYWdlcykgewpAQCAtMTExMiw2ICsxMTI1LDcgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaHR0cF91cHN0cmVhbV9zZW5kX3Jlc3BvbnNlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdXBzdHJlYW1fdCAqdSkKIHsKKyAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGksIGtleTsKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgICAgICAgICAgICAgKnBhcnQ7CkBAIC0xMTY1LDYgKzExNzksMTMgQEAKICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSB1LT5oZWFkZXJzX2luLnN0YXR1c19uOwogICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1c19saW5lID0gdS0+aGVhZGVyc19pbi5zdGF0dXNfbGluZTsKIAorICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uICE9IC0xKSB7CisgICAgICAgIHUtPmxlbmd0aCA9IChzaXplX3QpIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX247CisKKyAgICB9IGVsc2UgeworICAgICAgICB1LT5sZW5ndGggPSBOR1hfTUFYX1NJWkVfVF9WQUxVRTsKKyAgICB9CisKICAgICByYyA9IG5neF9odHRwX3NlbmRfaGVhZGVyKHIpOwogCiAgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+IE5HWF9PSykgewpAQCAtMTE4OCw2ICsxMjA5LDUzIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICBpZiAodS0+cGlwZSA9PSBOVUxMKSB7CisKKyAgICAgICAgaWYgKHUtPmlucHV0X2ZpbHRlciA9PSBOVUxMKSB7CisgICAgICAgICAgICB1LT5pbnB1dF9maWx0ZXJfaW5pdCA9IG5neF9odHRwX3Vwc3RyZWFtX25vbl9idWZmZXJlZF9maWx0ZXJfaW5pdDsKKyAgICAgICAgICAgIHUtPmlucHV0X2ZpbHRlciA9IG5neF9odHRwX3Vwc3RyZWFtX25vbl9idWZmZXJlZF9maWx0ZXI7CisgICAgICAgICAgICB1LT5pbnB1dF9maWx0ZXJfY3R4ID0gcjsKKyAgICAgICAgfQorCisgICAgICAgIHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3Nfbm9uX2J1ZmZlcmVkX2JvZHk7CisgICAgICAgIHItPndyaXRlX2V2ZW50X2hhbmRsZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX25vbl9idWZmZXJlZF9kb3duc3RyZWFtOworCisgICAgICAgIHItPmxpbWl0X3JhdGUgPSAwOworCisgICAgICAgIGlmICh1LT5pbnB1dF9maWx0ZXJfaW5pdCh1LT5pbnB1dF9maWx0ZXJfY3R4KSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgMCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzaXplID0gdS0+YnVmZmVyLmxhc3QgLSB1LT5idWZmZXIucG9zOworCisgICAgICAgIGlmIChzaXplKSB7CisgICAgICAgICAgICB1LT5idWZmZXIubGFzdCA9IHUtPmJ1ZmZlci5wb3M7CisKKyAgICAgICAgICAgIGlmICh1LT5pbnB1dF9maWx0ZXIodS0+aW5wdXRfZmlsdGVyX2N0eCwgc2l6ZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3Nfbm9uX2J1ZmZlcmVkX2JvZHkoci0+Y29ubmVjdGlvbi0+d3JpdGUpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1LT5idWZmZXIucG9zID0gdS0+YnVmZmVyLnN0YXJ0OworICAgICAgICAgICAgdS0+YnVmZmVyLmxhc3QgPSB1LT5idWZmZXIuc3RhcnQ7CisKKyAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9zZW5kX3NwZWNpYWwociwgTkdYX0hUVFBfRkxVU0gpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8qIFRPRE86IHByZWFsbG9jYXRlIGV2ZW50X3BpcGUgYnVmcywgbG9vayAiQ29udGVudC1MZW5ndGgiICovCiAKICNpZiAwCkBAIC0xMjAxLDcgKzEyNjksNyBAQAogICAgIH0KIAogICAgIGlmICh1LT5jYWNoYWJsZSkgewotICAgICAgICBoZWFkZXIgPSAobmd4X2h0dHBfY2FjaGVfaGVhZGVyX3QgKikgdS0+aGVhZGVyX2luLT5zdGFydDsKKyAgICAgICAgaGVhZGVyID0gKG5neF9odHRwX2NhY2hlX2hlYWRlcl90ICopIHUtPmJ1ZmZlci0+c3RhcnQ7CiAKICAgICAgICAgaGVhZGVyLT5leHBpcmVzID0gdS0+Y2FjaGUtPmN0eC5leHBpcmVzOwogICAgICAgICBoZWFkZXItPmxhc3RfbW9kaWZpZWQgPSB1LT5jYWNoZS0+Y3R4Lmxhc3RfbW9kaWZpZWQ7CkBAIC0xMjE2LDcgKzEyODQsNyBAQAogCiAjZW5kaWYKIAotICAgIHAgPSAmdS0+cGlwZTsKKyAgICBwID0gdS0+cGlwZTsKIAogICAgIHAtPm91dHB1dF9maWx0ZXIgPSAobmd4X2V2ZW50X3BpcGVfb3V0cHV0X2ZpbHRlcl9wdCkgbmd4X2h0dHBfb3V0cHV0X2ZpbHRlcjsKICAgICBwLT5vdXRwdXRfY3R4ID0gcjsKQEAgLTEyNTYsMTEgKzEzMjQsMTEgQEAKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBwLT5wcmVyZWFkX2J1ZnMtPmJ1ZiA9ICZ1LT5oZWFkZXJfaW47CisgICAgcC0+cHJlcmVhZF9idWZzLT5idWYgPSAmdS0+YnVmZmVyOwogICAgIHAtPnByZXJlYWRfYnVmcy0+bmV4dCA9IE5VTEw7Ci0gICAgdS0+aGVhZGVyX2luLnJlY3ljbGVkID0gMTsKKyAgICB1LT5idWZmZXIucmVjeWNsZWQgPSAxOwogCi0gICAgcC0+cHJlcmVhZF9zaXplID0gdS0+aGVhZGVyX2luLmxhc3QgLSB1LT5oZWFkZXJfaW4ucG9zOworICAgIHAtPnByZXJlYWRfc2l6ZSA9IHUtPmJ1ZmZlci5sYXN0IC0gdS0+YnVmZmVyLnBvczsKIAogICAgIGlmICh1LT5jYWNoYWJsZSkgewogICAgICAgICBwLT5idWZfdG9fZmlsZSA9IG5neF9jYWxsb2NfYnVmKHItPnBvb2wpOwpAQCAtMTI2OCw4ICsxMzM2LDggQEAKICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgMCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgcC0+YnVmX3RvX2ZpbGUtPnBvcyA9IHUtPmhlYWRlcl9pbi5zdGFydDsKLSAgICAgICAgcC0+YnVmX3RvX2ZpbGUtPmxhc3QgPSB1LT5oZWFkZXJfaW4ucG9zOworICAgICAgICBwLT5idWZfdG9fZmlsZS0+cG9zID0gdS0+YnVmZmVyLnN0YXJ0OworICAgICAgICBwLT5idWZfdG9fZmlsZS0+bGFzdCA9IHUtPmJ1ZmZlci5wb3M7CiAgICAgICAgIHAtPmJ1Zl90b19maWxlLT50ZW1wb3JhcnkgPSAxOwogICAgIH0KIApAQCAtMTI4MiwxMCArMTM1MCwxMCBAQAogICAgIHAtPmZyZWVfYnVmcyA9IDE7CiAKICAgICAvKgotICAgICAqIGV2ZW50X3BpcGUgd291bGQgZG8gdS0+aGVhZGVyX2luLmxhc3QgKz0gcC0+cHJlcmVhZF9zaXplCisgICAgICogZXZlbnRfcGlwZSB3b3VsZCBkbyB1LT5idWZmZXIubGFzdCArPSBwLT5wcmVyZWFkX3NpemUKICAgICAgKiBhcyB0aG91Z2ggdGhlc2UgYnl0ZXMgd2VyZSByZWFkCiAgICAgICovCi0gICAgdS0+aGVhZGVyX2luLmxhc3QgPSB1LT5oZWFkZXJfaW4ucG9zOworICAgIHUtPmJ1ZmZlci5sYXN0ID0gdS0+YnVmZmVyLnBvczsKIAogICAgIGlmICh1LT5jb25mLT5jeWNsaWNfdGVtcF9maWxlKSB7CiAKQEAgLTEzMDIsOCArMTM3MCw2IEBACiAgICAgICAgIHAtPmN5Y2xpY190ZW1wX2ZpbGUgPSAwOwogICAgIH0KIAotICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQogICAgIHAtPnJlYWRfdGltZW91dCA9IHUtPmNvbmYtPnJlYWRfdGltZW91dDsKICAgICBwLT5zZW5kX3RpbWVvdXQgPSBjbGNmLT5zZW5kX3RpbWVvdXQ7CiAgICAgcC0+c2VuZF9sb3dhdCA9IGNsY2YtPnNlbmRfbG93YXQ7CkBAIC0xMzE2LDYgKzEzODIsMTkxIEBACiAKIAogc3RhdGljIHZvaWQKK25neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3Nfbm9uX2J1ZmZlcmVkX2Rvd25zdHJlYW0obmd4X2h0dHBfcmVxdWVzdF90ICpyKQoreworICAgIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3Nfbm9uX2J1ZmZlcmVkX2JvZHkoci0+Y29ubmVjdGlvbi0+d3JpdGUpOworfQorCisKK3N0YXRpYyB2b2lkCituZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX25vbl9idWZmZXJlZF9ib2R5KG5neF9ldmVudF90ICpldikKK3sKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBzaXplOworICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIG47CisgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAqYjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBkb193cml0ZTsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOworICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgKnI7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgICAgICAqdTsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOworCisgICAgYyA9IGV2LT5kYXRhOworCisgICAgaWYgKGV2LT53cml0ZSkgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gcHJvY2VzcyBub24gYnVmZmVyZWQgZG93bnN0cmVhbSIpOworICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7CisKKyAgICB9IGVsc2UgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gcHJvY2VzcyBub24gYnVmZmVyZWQgdXBzdHJlYW0iKTsKKyAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAicmVhZGluZyB1cHN0cmVhbSI7CisgICAgfQorCisgICAgaWYgKGV2LT50aW1lZG91dCkgeworICAgICAgICBpZiAoZXYtPndyaXRlKSB7CisgICAgICAgICAgICBjLT50aW1lZG91dCA9IDE7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgdGltZWQgb3V0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cHN0cmVhbSB0aW1lZCBvdXQiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHIgPSBjLT5kYXRhOworICAgIHUgPSByLT51cHN0cmVhbTsKKworICAgIGIgPSAmdS0+YnVmZmVyOworCisgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgZG9fd3JpdGUgPSBldi0+d3JpdGU7CisKKyAgICBmb3IgKCA7OyApIHsKKworICAgICAgICBpZiAoZG9fd3JpdGUpIHsKKworICAgICAgICAgICAgaWYgKHUtPm91dF9idWZzIHx8IHUtPmJ1c3lfYnVmcykgeworICAgICAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9vdXRwdXRfZmlsdGVyKHIsIHUtPm91dF9idWZzKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG5neF9jaGFpbl91cGRhdGVfY2hhaW5zKCZ1LT5mcmVlX2J1ZnMsICZ1LT5idXN5X2J1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnUtPm91dF9idWZzLCB1LT5vdXRwdXQudGFnKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHUtPmJ1c3lfYnVmcyA9PSBOVUxMKSB7CisKKyAgICAgICAgICAgICAgICBpZiAodS0+bGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgfHwgdS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLT5lb2YKKyAgICAgICAgICAgICAgICAgICAgfHwgdS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLT5lcnJvcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBiLT5wb3MgPSBiLT5zdGFydDsKKyAgICAgICAgICAgICAgICBiLT5sYXN0ID0gYi0+c3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzaXplID0gYi0+ZW5kIC0gYi0+bGFzdDsKKworICAgICAgICBpZiAoc2l6ZSA+IHUtPmxlbmd0aCkgeworICAgICAgICAgICAgc2l6ZSA9IHUtPmxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzaXplICYmIHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+cmVhZHkpIHsKKyAgICAgICAgICAgIG4gPSB1LT5wZWVyLmNvbm5lY3Rpb24tPnJlY3YodS0+cGVlci5jb25uZWN0aW9uLCBiLT5sYXN0LCBzaXplKTsKKworICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuID4gMCkgeworICAgICAgICAgICAgICAgIGlmICh1LT5pbnB1dF9maWx0ZXIodS0+aW5wdXRfZmlsdGVyX2N0eCwgbikgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2ZpbmFsaXplX3JlcXVlc3QociwgdSwgMCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRvX3dyaXRlID0gMTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobmd4X2hhbmRsZV93cml0ZV9ldmVudChyLT5jb25uZWN0aW9uLT53cml0ZSwgY2xjZi0+c2VuZF9sb3dhdCkKKyAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgIHsKKyAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChyLT5jb25uZWN0aW9uLT53cml0ZS0+YWN0aXZlKSB7CisgICAgICAgIG5neF9hZGRfdGltZXIoci0+Y29ubmVjdGlvbi0+d3JpdGUsIGNsY2YtPnNlbmRfdGltZW91dCk7CisKKyAgICB9IGVsc2UgaWYgKHItPmNvbm5lY3Rpb24tPndyaXRlLT50aW1lcl9zZXQpIHsKKyAgICAgICAgbmd4X2RlbF90aW1lcihyLT5jb25uZWN0aW9uLT53cml0ZSk7CisgICAgfQorCisgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudCh1LT5wZWVyLmNvbm5lY3Rpb24tPnJlYWQsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+YWN0aXZlKSB7CisgICAgICAgIG5neF9hZGRfdGltZXIodS0+cGVlci5jb25uZWN0aW9uLT5yZWFkLCB1LT5jb25mLT5yZWFkX3RpbWVvdXQpOworCisgICAgfSBlbHNlIGlmIChyLT5jb25uZWN0aW9uLT5yZWFkLT50aW1lcl9zZXQpIHsKKyAgICAgICAgbmd4X2RlbF90aW1lcihyLT5jb25uZWN0aW9uLT5yZWFkKTsKKyAgICB9Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfdXBzdHJlYW1fbm9uX2J1ZmZlcmVkX2ZpbHRlcl9pbml0KHZvaWQgKmRhdGEpCit7CisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF91cHN0cmVhbV9ub25fYnVmZmVyZWRfZmlsdGVyKHZvaWQgKmRhdGEsIHNzaXplX3QgYnl0ZXMpCit7CisgICAgbmd4X2h0dHBfcmVxdWVzdF90ICAqciA9IGRhdGE7CisKKyAgICBuZ3hfYnVmX3QgICAgICAgICAgICAqYjsKKyAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAqY2wsICoqbGw7CisgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgKnU7CisKKyAgICB1ID0gci0+dXBzdHJlYW07CisKKyAgICBmb3IgKGNsID0gdS0+b3V0X2J1ZnMsIGxsID0gJnUtPm91dF9idWZzOyBjbDsgY2wgPSBjbC0+bmV4dCkgeworICAgICAgICBsbCA9ICZjbC0+bmV4dDsKKyAgICB9CisKKyAgICBjbCA9IG5neF9jaGFpbl9nZXRfZnJlZV9idWYoci0+cG9vbCwgJnUtPmZyZWVfYnVmcyk7CisgICAgaWYgKGNsID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICAqbGwgPSBjbDsKKworICAgIGNsLT5idWYtPmZsdXNoID0gMTsKKyAgICBjbC0+YnVmLT5tZW1vcnkgPSAxOworCisgICAgYiA9ICZ1LT5idWZmZXI7CisKKyAgICBjbC0+YnVmLT5wb3MgPSBiLT5sYXN0OworICAgIGItPmxhc3QgKz0gYnl0ZXM7CisgICAgY2wtPmJ1Zi0+bGFzdCA9IGItPmxhc3Q7CisKKyAgICBpZiAodS0+bGVuZ3RoID09IE5HWF9NQVhfU0laRV9UX1ZBTFVFKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgdS0+bGVuZ3RoIC09IGJ5dGVzOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgdm9pZAogbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19kb3duc3RyZWFtKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX2JvZHkoci0+Y29ubmVjdGlvbi0+d3JpdGUpOwpAQCAtMTM0NSw3ICsxNTk2LDcgQEAKICAgICAgICAgYy0+bG9nLT5hY3Rpb24gPSAicmVhZGluZyB1cHN0cmVhbSI7CiAgICAgfQogCi0gICAgcCA9ICZ1LT5waXBlOworICAgIHAgPSB1LT5waXBlOwogCiAgICAgaWYgKGV2LT50aW1lZG91dCkgewogICAgICAgICBpZiAoZXYtPndyaXRlKSB7CkBAIC0xNjE0LDEwICsxODY1LDEwIEBACiAgICAgICAgIHJjID0gMDsKICAgICB9CiAKLSAgICBpZiAodS0+cGlwZS50ZW1wX2ZpbGUpIHsKKyAgICBpZiAodS0+cGlwZSAmJiB1LT5waXBlLT50ZW1wX2ZpbGUpIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIHRlbXAgZmQ6ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdS0+cGlwZS50ZW1wX2ZpbGUtPmZpbGUuZmQpOworICAgICAgICAgICAgICAgICAgICAgICB1LT5waXBlLT50ZW1wX2ZpbGUtPmZpbGUuZmQpOwogICAgIH0KIAogI2lmIDAKQEAgLTE2MzcsNyArMTg4OCw3IEBACiAgICAgci0+Y29ubmVjdGlvbi0+bG9nLT5hY3Rpb24gPSAic2VuZGluZyB0byBjbGllbnQiOwogCiAgICAgaWYgKHJjID09IDAgJiYgci0+bWFpbiA9PSByKSB7Ci0gICAgICAgIHJjID0gbmd4X2h0dHBfc2VuZF9sYXN0KHIpOworICAgICAgICByYyA9IG5neF9odHRwX3NlbmRfc3BlY2lhbChyLCBOR1hfSFRUUF9MQVNUKTsKICAgICB9CiAKICAgICBuZ3hfaHR0cF9maW5hbGl6ZV9yZXF1ZXN0KHIsIHJjKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IGFkNGMxZDQuLjIwMzI2NTkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtNTEsNyArNTEsNyBAQAogICAgIG5neF9tc2VjX3QgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKIAogICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9sb3dhdDsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9idWZmZXJfc2l6ZTsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplOwogCiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBidXN5X2J1ZmZlcnNfc2l6ZTsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF90ZW1wX2ZpbGVfc2l6ZTsKQEAgLTY4LDYgKzY4LDcgQEAKIAogICAgIG5neF9idWZzX3QgICAgICAgICAgICAgICAgICAgICAgYnVmczsKIAorICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyaW5nOwogICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgcGFzc19yZXF1ZXN0X2hlYWRlcnM7CiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICBwYXNzX3JlcXVlc3RfYm9keTsKIApAQCAtODYsNiArODcsOCBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb247CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICB1cmw7ICAvKiB1c2VkIGluIHByb3h5X3Jld3JpdGVfbG9jYXRpb24gKi8KIAorICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RfNDA0OyAvKiB1bnNpZ25lZCByZWRpcmVjdF80MDQ6MTsgKi8KKwogI2lmIChOR1hfSFRUUF9TU0wpCiAgICAgbmd4X3NzbF90ICAgICAgICAgICAgICAgICAgICAgICpzc2w7CiAjZW5kaWYKQEAgLTEzOSw3ICsxNDIsNyBAQAogc3RydWN0IG5neF9odHRwX3Vwc3RyZWFtX3MgewogICAgIG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAgICAgICAgICAgcGVlcjsKIAotICAgIG5neF9ldmVudF9waXBlX3QgICAgICAgICAgICAgICAgcGlwZTsKKyAgICBuZ3hfZXZlbnRfcGlwZV90ICAgICAgICAgICAgICAgKnBpcGU7CiAKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RfYnVmczsKIApAQCAtMTUwLDcgKzE1MywxNiBAQAogCiAgICAgbmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyc19pbl90ICBoZWFkZXJzX2luOwogCi0gICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfaW47CisgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CisKKyAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgKm91dF9idWZzOworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICAqYnVzeV9idWZzOworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICAgICAqZnJlZV9idWZzOworCisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgKCppbnB1dF9maWx0ZXJfaW5pdCkodm9pZCAqZGF0YSk7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgKCppbnB1dF9maWx0ZXIpKHZvaWQgKmRhdGEsIHNzaXplX3QgYnl0ZXMpOworICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAqaW5wdXRfZmlsdGVyX2N0eDsKIAogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICgqY3JlYXRlX3JlcXVlc3QpKG5neF9odHRwX3JlcXVlc3RfdCAqcik7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgKCpyZWluaXRfcmVxdWVzdCkobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKaW5kZXggZjAwNjE5ZC4uMzk2OWQ3ZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKQEAgLTg1MSw3ICs4NTEsOCBAQAogICAgIGNtY2YtPnZhcmlhYmxlc19oYXNoLm5hbWUgPSAiaHR0cCB2YXJpYWJsZXMiOwogCiAgICAgaWYgKG5neF9oYXNoX2luaXQoJmNtY2YtPnZhcmlhYmxlc19oYXNoLCBjZi0+cG9vbCwKLSAgICAgICAgICAgIGNtY2YtPmFsbF92YXJpYWJsZXMuZWx0cywgY21jZi0+YWxsX3ZhcmlhYmxlcy5uZWx0cykgIT0gTkdYX09LKQorICAgICAgICAgICAgICAgICAgICAgIGNtY2YtPmFsbF92YXJpYWJsZXMuZWx0cywgY21jZi0+YWxsX3ZhcmlhYmxlcy5uZWx0cykKKyAgICAgICAgIT0gTkdYX09LKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYwppbmRleCA3MjEzMzVlLi42NjJiMzM0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpCiAgICAgICAgICYmIHdldi0+cGVuZGluZ19lb2YKLSAgICAgICAgICAgLyogRnJlZUJTRCA2LjAgbWF5IGVycm9uZW91c2x5IHJlcG9ydCBFVElNRURPVVQgKi8KKyAgICAgICAgICAgLyogRnJlZUJTRCA1LngtNi54IG1heSBlcnJvbmVvdXNseSByZXBvcnQgRVRJTUVET1VUICovCiAgICAgICAgICYmIHdldi0+a3FfZXJybm8gIT0gTkdYX0VUSU1FRE9VVCkKICAgICB7CiAgICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCB3ZXYtPmtxX2Vycm5vLApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3JlYWR2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYwppbmRleCA5ZGU0Y2Q1Li4wZTk5Y2I0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYwpAQCAtMzIsMjMgKzMyLDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgIHJldi0+cGVuZGluZ19lb2YsIHJldi0+YXZhaWxhYmxlLCByZXYtPmtxX2Vycm5vKTsKIAogICAgICAgICBpZiAocmV2LT5hdmFpbGFibGUgPT0gMCkgewotICAgICAgICAgICAgaWYgKHJldi0+cGVuZGluZ19lb2YpIHsKKworICAgICAgICAgICAgaWYgKCFyZXYtPnBlbmRpbmdfZW9mKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRnJlZUJTRCA1LngtNi54IG1heSBlcnJvbmVvdXNseSByZXBvcnQgRVRJTUVET1VUICovCisgICAgICAgICAgICBpZiAocmV2LT5rcV9lcnJubyAhPSBOR1hfRVRJTUVET1VUKSB7CisKICAgICAgICAgICAgICAgICByZXYtPnJlYWR5ID0gMDsKICAgICAgICAgICAgICAgICByZXYtPmVvZiA9IDE7CiAKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCByZXYtPmtxX2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIGFib3V0IGFuIGNsb3NlZCBjb25uZWN0aW9uIik7Ci0KICAgICAgICAgICAgICAgICBpZiAocmV2LT5rcV9lcnJubykgewogICAgICAgICAgICAgICAgICAgICByZXYtPmVycm9yID0gMTsKICAgICAgICAgICAgICAgICAgICAgbmd4X3NldF9zb2NrZXRfZXJybm8ocmV2LT5rcV9lcnJubyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIHJldi0+a3FfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJlcG9ydGVkIGFib3V0IGFuIGNsb3NlZCBjb25uZWN0aW9uIik7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9yZWN2LmMgYi9zcmMvb3MvdW5peC9uZ3hfcmVjdi5jCmluZGV4IGU5NmNhNzguLjZmMDFhYjMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9yZWN2LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3JlY3YuYwpAQCAtMjUsNyArMjUsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgcmV2LT5wZW5kaW5nX2VvZiwgcmV2LT5hdmFpbGFibGUsIHJldi0+a3FfZXJybm8pOwogCiAgICAgICAgIGlmIChyZXYtPmF2YWlsYWJsZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAocmV2LT5wZW5kaW5nX2VvZikgeworCisgICAgICAgICAgICBpZiAoIXJldi0+cGVuZGluZ19lb2YpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBGcmVlQlNEIDUueC02LnggbWF5IGVycm9uZW91c2x5IHJlcG9ydCBFVElNRURPVVQgKi8KKyAgICAgICAgICAgIGlmIChyZXYtPmtxX2Vycm5vICE9IE5HWF9FVElNRURPVVQpIHsKKwogICAgICAgICAgICAgICAgIHJldi0+cmVhZHkgPSAwOwogICAgICAgICAgICAgICAgIHJldi0+ZW9mID0gMTsKIApAQCAtMzgsOSArNDUsNiBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUdBSU47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc2VuZC5jIGIvc3JjL29zL3VuaXgvbmd4X3NlbmQuYwppbmRleCAxNjdmMmVjLi4wYzNmOTU5IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc2VuZC5jCisrKyBiL3NyYy9vcy91bml4L25neF9zZW5kLmMKQEAgLTE5LDcgKzE5LDExIEBACiAKICNpZiAoTkdYX0hBVkVfS1FVRVVFKQogCi0gICAgaWYgKChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgJiYgd2V2LT5wZW5kaW5nX2VvZikgeworICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpCisgICAgICAgICYmIHdldi0+cGVuZGluZ19lb2YKKyAgICAgICAgICAgLyogRnJlZUJTRCA1LngtNi54IG1heSBlcnJvbmVvdXNseSByZXBvcnQgRVRJTUVET1VUICovCisgICAgICAgICYmIHdldi0+a3FfZXJybm8gIT0gTkdYX0VUSU1FRE9VVCkKKyAgICB7CiAgICAgICAgICh2b2lkKSBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCB3ZXYtPmtxX2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXZlbnQoKSByZXBvcnRlZCBhYm91dCBhbiBjbG9zZWQgY29ubmVjdGlvbiIpOwogICAgICAgICB3ZXYtPmVycm9yID0gMTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX2NvbmZpZy5oIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKaW5kZXggODRhNGM4NC4uYTY2OGI5NSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfY29uZmlnLmgKQEAgLTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGNyeXB0Lmg+CiAKKyNkZWZpbmUgTkdYX0FMSUdOTUVOVCAgX01BWF9BTElHTk1FTlQKKwogI2luY2x1ZGUgPG5neF9hdXRvX2NvbmZpZy5oPgogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYwppbmRleCBmOTVjMmNhLi4wOWUwOGUxIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCkBAIC0zMyw3ICszMywxMSBAQAogCiAjaWYgKE5HWF9IQVZFX0tRVUVVRSkKIAotICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9LUVVFVUVfRVZFTlQpICYmIHdldi0+cGVuZGluZ19lb2YpIHsKKyAgICBpZiAoKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKQorICAgICAgICAmJiB3ZXYtPnBlbmRpbmdfZW9mCisgICAgICAgICAgIC8qIEZyZWVCU0QgNS54LTYueCBtYXkgZXJyb25lb3VzbHkgcmVwb3J0IEVUSU1FRE9VVCAqLworICAgICAgICAmJiB3ZXYtPmtxX2Vycm5vICE9IE5HWF9FVElNRURPVVQpCisgICAgewogICAgICAgICAodm9pZCkgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgd2V2LT5rcV9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V2ZW50KCkgcmVwb3J0ZWQgYWJvdXQgYW4gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgICAgICAgd2V2LT5lcnJvciA9IDE7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oIGIvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaAppbmRleCAxZTMzMzQ1Li44MDAzYjc0IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKQEAgLTI1LDcgKzI1LDggQEAKIC8qIHRoZSBuZXcgU0RLIGhlYWRlcnMgKi8KIAogI2RlZmluZSBuZ3hfYXRvbWljX2NtcF9zZXQobG9jaywgb2xkLCBzZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAoSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKGxvbmcgKikgbG9jaywgc2V0LCBvbGQpID09IG9sZCkKKyAgICAgKChuZ3hfYXRvbWljX3VpbnRfdCkgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKGxvbmcgKikgbG9jaywgc2V0LCBvbGQpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gb2xkKQogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaAppbmRleCA5NjU4YzEyLi5mMmM3YTA2IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKQEAgLTEyNiwxMiArMTI2LDE0IEBACiAKIAogI2RlZmluZSBOR1hfU0laRV9UX0xFTiAgICAgICAgICBzaXplb2YoIi0yMTQ3NDgzNjQ4IikgLSAxCisjZGVmaW5lIE5HWF9NQVhfU0laRV9UX1ZBTFVFCTIxNDc0ODM2NDcKICNkZWZpbmUgTkdYX1RJTUVfVF9MRU4gICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQogI2RlZmluZSBOR1hfVElNRV9UX1NJWkUgICAgICAgICA0CiAjZGVmaW5lIE5HWF9PRkZfVF9MRU4gICAgICAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDciKSAtIDEKICNkZWZpbmUgTkdYX01BWF9PRkZfVF9WQUxVRSAgICAgOTIyMzM3MjAzNjg1NDc3NTgwNwogI2RlZmluZSBOR1hfU0lHX0FUT01JQ19UX1NJWkUgICA0CiAKKwogI2RlZmluZSBOR1hfSEFWRV9MSVRUTEVfRU5ESUFOICAxCiAjZGVmaW5lIE5HWF9IQVZFX05PTkFMSUdORUQgICAgIDEKIAo=