ZGlmZiAtLWdpdCBhL2F1dG8vaW5pdCBiL2F1dG8vaW5pdAppbmRleCAwYjMzYzNiLi42YzUyYzIxIDEwMDY0NAotLS0gYS9hdXRvL2luaXQKKysrIGIvYXV0by9pbml0CkBAIC01NCw4ICs1NCwxNiBAQAogCiB1cGdyYWRlOgogCSROR1hfU0JJTl9QQVRIIC10CisKKwkjIHVwZ3JhZGUgY29tcGF0aWJpbGl0eSBmcm9tIDAuMS54IHRvIDAuMi54CisJY3AgJE5HWF9QSURfUEFUSCAkTkdYX1BJRF9QQVRILm9sZGJpbgorCiAJa2lsbCAtVVNSMiBcYGNhdCAkTkdYX1BJRF9QQVRIXGAKIAlzbGVlcCAxCi0JdGVzdCAtZiAkTkdYX1BJRF9QQVRILm5ld2JpbgotCWtpbGwgLVdJTkNIIFxgY2F0ICROR1hfUElEX1BBVEhcYAorCXRlc3QgLWYgJE5HWF9QSURfUEFUSC5vbGRiaW4KKworCSMgdXBncmFkZSBjb21wYXRpYmlsaXR5IGZyb20gMC4xLnggdG8gMC4yLngKKwljcCAkTkdYX1BJRF9QQVRIICROR1hfUElEX1BBVEgubmV3YmluCisKKwlraWxsIC1XSU5DSCBcYGNhdCAkTkdYX1BJRF9QQVRILm9sZGJpblxgCiBFTkQKZGlmZiAtLWdpdCBhL2F1dG8vc3VtbWFyeSBiL2F1dG8vc3VtbWFyeQppbmRleCA3ZWY2ZWRlLi42OTBhNjVlIDEwMDY0NAotLS0gYS9hdXRvL3N1bW1hcnkKKysrIGIvYXV0by9zdW1tYXJ5CkBAIC0yLDYgKzIsMjEgQEAKICMgQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgogCiAKKyMjIyBTVFVCCisKK2lmIFsgJFVTRV9USFJFQURTICE9IE5PIF07IHRoZW4KKworY2F0IDw8IEVORAorCiskMDogZXJyb3I6IHRoZSB0aHJlYWRzIHN1cHBvcnQgaXMgYnJva2VuIG5vdy4KKworRU5ECisgICAgICAgIGV4aXQgMQorICAgIGZpCisKKyMjIworCisKIGVjaG8KIGVjaG8gIkNvbmZpZ3VyYXRpb24gc3VtbWFyeSIKIApkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCAzYTMxNmRlLi5mMGMxNzUzIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDEzOSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4yLjAiIGRhdGU9IjIzLjA5LjIwMDUiPgorCis8Y2hhbmdlPgorPHBhcmEgbGFuZz0icnUiPgor6drNxc7JzMnT2CDJzcXOwSBwaWQtxsHKzM/XLCDJ09DPzNja1cXN2cUg188g19LFzdEgz8LOz9fMxc7J0SDJ09DPzM7Rxc3Px88KK8bByszBLiDy1d7Oz8Ug0MXSxcnNxc7P18HOycUg1MXQxdLYIM7FIM7V1s7PLgor89TB0tnKIM/Tzs/Xzs/KINDSz8PF09MgxM/CwdfM0cXUIMsg09fPxc3VIHBpZC3GwcrMINPVxsbJy9MgIi5vbGRiaW4iCivJINrB0NXTy8HF1CDOz9fZyiDJ09DPzM7Rxc3ZyiDGwcrMLgor7s/X2cogz9POz9fOz8og0NLPw8XT0yDTz9rEwaPUIM/C2d7O2cogcGlkLcbByswgwsXaINPVxsbJy9PBICIubmV3YmluIi4KK+XTzMkgzs/X2cogz9POz9fOz8og0NLPw8XT0yDX2cjPxMnULCDUzyDT1MHS2cog0NLPw8XT0yDQxdLFyc3Fzs/X2dfBxdQg09fPygorcGlkLcbByswgYyDT1cbGycvTz80gIi5vbGRiaW4iINcgcGlkLcbByswgwsXaINPVxsbJy9PBLgor8NLJIM/Czs/XzMXOyckg0yDXxdLTyckgMC4xLsggxM8gMC4yLjAgztXWzs8g1d7J1NnXwdTYLCDe1M8g09TB0tnKINDSz8PF09MKKzAuMS54IMkgzs/X2cog0NLPw8XT0yAwLjIuMCDPwsEgydPQz8zY2tXA1CBwaWQtxsHKzCDCxdog09XGxsnL08/XLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorVGhlIHBpZC1maWxlIG5hbWVzIHVzZWQgZHVyaW5nIG9ubGluZSB1cGdyYWRlIHdhcyBjaGFuZ2VkIGFuZCBub3cgaXMgbm90CityZXF1aXJlZCBhIG1hbnVhbCByZW5hbWUgb3BlcmF0aW9uLgorVGhlIG9sZCBtYXN0ZXIgcHJvY2VzcyBhZGRzIHRoZSAiLm9sZGJpbiIgc3VmZml4IHRvIGl0cyBwaWQtZmlsZSBhbmQKK2V4ZWN1dGVzIGEgbmV3IGJpbmFyeSBmaWxlLgorVGhlIG5ldyBtYXN0ZXIgcHJvY2VzcyBjcmVhdGVzIHVzdWFsIHBpZC1maWxlIHdpdGhvdXQgdGhlICIubmV3YmluIiBzdWZmaXguCitJZiB0aGUgbWFzdGVyIHByb2Nlc3MgZXhpdHMsIHRoZW4gb2xkIG1hc3RlciBwcm9jZXNzIHJlbmFtZXMgYmFjaworaXRzIHBpZC1maWxlIHdpdGggdGhlICIub2xkYmluIiBzdWZmaXggdG8gdGhlIHBpZC1maWxlIHdpdGhvdXQgc3VmZml4LgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iY2hhbmdlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSB3b3JrZXJfY29ubmVjdGlvbnMsIM7P18/FIM7B2tfBzsnFIMTJ0sXL1MnX2SBjb25uZWN0aW9uczsKK8TJ0sXL1MnXwSDUxdDF0tgg2sHEwaPUIM3By9PJzcHM2M7PxSDeydPMzyDTz8XEyc7FzsnKLAorwSDOxSDNwcvTyc3BzNjOzyDXz9rNz9bO2cogzs/NxdIgxMXTy9LJ0NTP0sEgxMzRINPPy8XUwS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAid29ya2VyX2Nvbm5lY3Rpb25zIiBkaXJlY3RpdmUsIG5ldyBuYW1lIG9mIHRoZSAiY29ubmVjdGlvbnMiIGRpcmVjdGl2ZTsKK25vdyB0aGUgZGlyZWN0aXZlIHNwZWNpZmllcyBtYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucywKK2J1dCBub3QgbWF4aW11bSBzb2NrZXQgZGVzY3JpcHRvciBudW1iZXIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK1NTTCDQz8TExdLWydfBxdQgy9zbydLP18HOycUg08XT08nKINcg0NLFxMXMwcggz8TOz8fPINLBws/excfPINDSz8PF09PBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorU1NMIHN1cHBvcnRzIHRoZSBzZXNzaW9uIGNhY2hlIGluc2lkZSBvbmUgd29ya2VyIHByb2Nlc3MuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBzYXRpc2Z5X2FueS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAic2F0aXNmeV9hbnkiIGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivNz8TVzMkgbmd4X2h0dHBfYWNjZXNzX21vZHVsZSDJIG5neF9odHRwX2F1dGhfYmFzaWNfbW9kdWxlIM7FINLBws/UwcDUCivEzNEg0M/E2sHQ0s/Tz9cuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfYWNjZXNzX21vZHVsZSBhbmQgbmd4X2h0dHBfYXV0aF9iYXNpY19tb2R1bGUgZG8gbm90IHJ1bgorZm9yIHN1YnJlcXVlc3RzLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ19kgd29ya2VyX3JsaW1pdF9ub2ZpbGUgySB3b3JrZXJfcmxpbWl0X3NpZ3BlbmRpbmcuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIndvcmtlcl9ybGltaXRfbm9maWxlIiBhbmQgIndvcmtlcl9ybGltaXRfc2lncGVuZGluZyIgZGlyZWN0aXZlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivF08zJINfTxSDC3MvFzsTZLCDJ09DPzNja1cXN2cUgxMzRIMLBzMHO08nSz9fLySDOwcfS1drLySwgz8vB2tnXwczJ09gKK9cgzsXSwcLP3sXNINPP09TP0c7JySDQz9PMxSDPxM7PyiDP28nCy8ksINTPIG5naW54IM7FIM/C0sHdwczT0SDLIM7JzQor1yDUxd7FzsnFIDYwINPFy9XOxC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIGFsbCBiYWNrZW5kIHVzaW5nIGluIGxvYWQtYmFsYW5jaW5nIGZhaWxlZCBhZnRlciBvbmUgZXJyb3IsIHRoZW4KK25naW54IGRpZCBub3QgdHJ5IGRvIGNvbm5lY3QgdG8gdGhlbSBkdXJpbmcgNjAgc2Vjb25kcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivXINDB0tPJzsfFIMHSx9XNxc7Uz9cgSU1BUC9QT1AzIMvPzcHOxC4KK/PQwdPJws8gUm9iIE11ZWxsZXIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpbiBJTUFQL1BPUDMgY29tbWFuZCBhcmd1bWVudCBwYXJzaW5nLgorVGhhbmtzIHRvIFJvYiBNdWVsbGVyLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8/bycLLySDQ0skgydPQz8zY2s/Xwc7JySBTU0wg1yBJTUFQL1BPUDMg0NLPy9PJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgorZXJyb3JzIHdoaWxlIHVzaW5nIFNTTCBpbiBJTUFQL1BPUDMgcHJveHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvJINDSySDJ09DPzNjaz9fBzsnJIFNTSSDJINPWwdTJ0S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2Vycm9ycyB3aGlsZSB1c2luZyBTU0kgYW5kIGd6aXBwaW5nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9cgz9TXxdTByCAzMDQgzsUgxM/CwdfM0czJ09gg09TSz8vJINrBx8/Mz9fLwSDP1NfF1MEgIkV4cGlyZXMiIMkKKyJDYWNoZS1Db250cm9sIi4KK/PQwdPJws8g4czFy9PBzsTS1SDr1cvV28vJztUuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIkV4cGlyZXMiIGFuZCAiQ2FjaGUtQ29udHJvbCIgaGVhZGVyIGxpbmVzIHdlcmUgb21pdHRlZAorZnJvbSB0aGUgMzA0IHJlc3BvbnNlcy4KK1RoYW5rcyB0byBBbGV4YW5kciBLdWt1c2hraW4uCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjQ1IiBkYXRlPSIwOC4wOS4yMDA1Ij4KIAogPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggMTBkYjU1NS4uMDllZGFlNSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC00Miw2ICs0MiwxMyBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2NvcmVfY29uZl90LCBtYXN0ZXIpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJwaWQiKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAorICAgICAgMCwKKyAgICAgIG9mZnNldG9mKG5neF9jb3JlX2NvbmZfdCwgcGlkKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygid29ya2VyX3Byb2Nlc3NlcyIpLAogICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfY29uZl9zZXRfbnVtX3Nsb3QsCkBAIC01Niw2ICs2Myw0MSBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2NvcmVfY29uZl90LCBkZWJ1Z19wb2ludHMpLAogICAgICAgJm5neF9kZWJ1Z19wb2ludHMgfSwKIAorICAgIHsgbmd4X3N0cmluZygidXNlciIpLAorICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfVEFLRTEyLAorICAgICAgbmd4X3NldF91c2VyLAorICAgICAgMCwKKyAgICAgIDAsCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIndvcmtlcl9wcmlvcml0eSIpLAorICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfc2V0X3ByaW9yaXR5LAorICAgICAgMCwKKyAgICAgIDAsCisgICAgICBOVUxMIH0sCisKKyAgICB7IG5neF9zdHJpbmcoIndvcmtlcl9ybGltaXRfbm9maWxlIiksCisgICAgICBOR1hfTUFJTl9DT05GfE5HWF9ESVJFQ1RfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9jb25mX3NldF9udW1fc2xvdCwKKyAgICAgIDAsCisgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIHJsaW1pdF9ub2ZpbGUpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJ3b3JrZXJfcmxpbWl0X3NpZ3BlbmRpbmciKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LAorICAgICAgMCwKKyAgICAgIG9mZnNldG9mKG5neF9jb3JlX2NvbmZfdCwgcmxpbWl0X3NpZ3BlbmRpbmcpLAorICAgICAgTlVMTCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJ3b3JraW5nX2RpcmVjdG9yeSIpLAorICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICAwLAorICAgICAgb2Zmc2V0b2Yobmd4X2NvcmVfY29uZl90LCB3b3JraW5nX2RpcmVjdG9yeSksCisgICAgICBOVUxMIH0sCisKICNpZiAoTkdYX1RIUkVBRFMpCiAKICAgICB7IG5neF9zdHJpbmcoIndvcmtlcl90aHJlYWRzIiksCkBAIC03NCwzNCArMTE2LDYgQEAKIAogI2VuZGlmCiAKLSAgICB7IG5neF9zdHJpbmcoInVzZXIiKSwKLSAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxMiwKLSAgICAgIG5neF9zZXRfdXNlciwKLSAgICAgIDAsCi0gICAgICAwLAotICAgICAgTlVMTCB9LAotCi0gICAgeyBuZ3hfc3RyaW5nKCJ3b3JrZXJfcHJpb3JpdHkiKSwKLSAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X3NldF9wcmlvcml0eSwKLSAgICAgIDAsCi0gICAgICAwLAotICAgICAgTlVMTCB9LAotCi0gICAgeyBuZ3hfc3RyaW5nKCJwaWQiKSwKLSAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAotICAgICAgMCwKLSAgICAgIG9mZnNldG9mKG5neF9jb3JlX2NvbmZfdCwgcGlkKSwKLSAgICAgIE5VTEwgfSwKLQotICAgIHsgbmd4X3N0cmluZygid29ya2luZ19kaXJlY3RvcnkiKSwKLSAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAotICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAotICAgICAgMCwKLSAgICAgIG9mZnNldG9mKG5neF9jb3JlX2NvbmZfdCwgd29ya2luZ19kaXJlY3RvcnkpLAotICAgICAgTlVMTCB9LAotCiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCkBAIC0zMjQsMTMgKzMzOCwxNSBAQAogfQogCiAKLW5neF9waWRfdCBuZ3hfZXhlY19uZXdfYmluYXJ5KG5neF9jeWNsZV90ICpjeWNsZSwgY2hhciAqY29uc3QgKmFyZ3YpCituZ3hfcGlkX3QKK25neF9leGVjX25ld19iaW5hcnkobmd4X2N5Y2xlX3QgKmN5Y2xlLCBjaGFyICpjb25zdCAqYXJndikKIHsKICAgICBjaGFyICAgICAgICAgICAgICplbnZbM10sICp2YXI7CiAgICAgdV9jaGFyICAgICAgICAgICAqcDsKICAgICBuZ3hfdWludF90ICAgICAgICBpOwogICAgIG5neF9waWRfdCAgICAgICAgIHBpZDsKICAgICBuZ3hfZXhlY19jdHhfdCAgICBjdHg7CisgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmOwogICAgIG5neF9saXN0ZW5pbmdfdCAgKmxzOwogCiAgICAgY3R4LnBhdGggPSBhcmd2WzBdOwpAQCAtMzc0LDE1ICszOTAsNDIgQEAKIAogICAgIGN0eC5lbnZwID0gKGNoYXIgKmNvbnN0ICopICZlbnY7CiAKKyAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsIG5neF9jb3JlX21vZHVsZSk7CisKKyAgICBpZiAobmd4X3JlbmFtZV9maWxlKChjaGFyICopIGNjZi0+cGlkLmRhdGEsIChjaGFyICopIGNjZi0+b2xkcGlkLmRhdGEpCisgICAgICAgICE9IE5HWF9PSykKKyAgICB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgIG5neF9yZW5hbWVfZmlsZV9uICIgJXMgdG8gJXMgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIGV4ZWN1dGluZyBuZXcgYmluYXJ5IHByb2Nlc3MgXCIlc1wiIiwKKyAgICAgICAgICAgICAgICAgICAgICBjY2YtPnBpZC5kYXRhLCBjY2YtPm9sZHBpZC5kYXRhLCBhcmd2WzBdKTsKKworICAgICAgICBuZ3hfZnJlZSh2YXIpOworCisgICAgICAgIHJldHVybiBOR1hfSU5WQUxJRF9QSUQ7CisgICAgfQorCiAgICAgcGlkID0gbmd4X2V4ZWN1dGUoY3ljbGUsICZjdHgpOwogCisgICAgaWYgKHBpZCA9PSBOR1hfSU5WQUxJRF9QSUQpIHsKKyAgICAgICAgaWYgKG5neF9yZW5hbWVfZmlsZSgoY2hhciAqKSBjY2YtPm9sZHBpZC5kYXRhLCAoY2hhciAqKSBjY2YtPnBpZC5kYXRhKQorICAgICAgICAgICAgIT0gTkdYX09LKQorICAgICAgICB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlbmFtZV9maWxlX24gIiAlcyBiYWNrIHRvICVzIGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnRlciB0cnkgdG8gZXhlY3V0aW5nIG5ldyBiaW5hcnkgcHJvY2VzcyBcIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjY2YtPm9sZHBpZC5kYXRhLCBjY2YtPnBpZC5kYXRhLCBhcmd2WzBdKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIG5neF9mcmVlKHZhcik7CiAKICAgICByZXR1cm4gcGlkOwogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2dldG9wdChuZ3hfY3ljbGVfdCAqY3ljbGUsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndikKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9nZXRvcHQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpCiB7CiAgICAgbmd4X2ludF90ICBpOwogCkBAIC00ODUsNyArNTI4LDcgQEAKICAgICAgKiBzZXQgYnkgcGNhbGxvYygpCiAgICAgICoKICAgICAgKiAgICAgY2NmLT5waWQgPSBOVUxMOwotICAgICAqICAgICBjY2YtPm5ld3BpZCA9IE5VTEw7CisgICAgICogICAgIGNjZi0+b2xkcGlkID0gTlVMTDsKICAgICAgKiAgICAgY2NmLT5wcmlvcml0eSA9IDA7CiAgICAgICovCiAKQEAgLTQ5Myw4ICs1MzYsMTMgQEAKICAgICBjY2YtPm1hc3RlciA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+d29ya2VyX3Byb2Nlc3NlcyA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+ZGVidWdfcG9pbnRzID0gTkdYX0NPTkZfVU5TRVQ7CisKKyAgICBjY2YtPnJsaW1pdF9ub2ZpbGUgPSBOR1hfQ09ORl9VTlNFVDsKKyAgICBjY2YtPnJsaW1pdF9zaWdwZW5kaW5nID0gTkdYX0NPTkZfVU5TRVQ7CisKICAgICBjY2YtPnVzZXIgPSAobmd4X3VpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogICAgIGNjZi0+Z3JvdXAgPSAobmd4X2dpZF90KSBOR1hfQ09ORl9VTlNFVF9VSU5UOworCiAjaWYgKE5HWF9USFJFQURTKQogICAgIGNjZi0+d29ya2VyX3RocmVhZHMgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjY2YtPnRocmVhZF9zdGFja19zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKQEAgLTU1OCwxNSArNjA2LDE1IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBjY2YtPm5ld3BpZC5sZW4gPSBjY2YtPnBpZC5sZW4gKyBzaXplb2YoTkdYX05FV1BJRF9FWFQpOworICAgIGNjZi0+b2xkcGlkLmxlbiA9IGNjZi0+cGlkLmxlbiArIHNpemVvZihOR1hfT0xEUElEX0VYVCk7CiAKLSAgICBjY2YtPm5ld3BpZC5kYXRhID0gbmd4X3BhbGxvYyhjeWNsZS0+cG9vbCwgY2NmLT5uZXdwaWQubGVuKTsKLSAgICBpZiAoY2NmLT5uZXdwaWQuZGF0YSA9PSBOVUxMKSB7CisgICAgY2NmLT5vbGRwaWQuZGF0YSA9IG5neF9wYWxsb2MoY3ljbGUtPnBvb2wsIGNjZi0+b2xkcGlkLmxlbik7CisgICAgaWYgKGNjZi0+b2xkcGlkLmRhdGEgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgbmd4X21lbWNweShuZ3hfY3B5bWVtKGNjZi0+bmV3cGlkLmRhdGEsIGNjZi0+cGlkLmRhdGEsIGNjZi0+cGlkLmxlbiksCi0gICAgICAgICAgICAgICBOR1hfTkVXUElEX0VYVCwgc2l6ZW9mKE5HWF9ORVdQSURfRVhUKSk7CisgICAgbmd4X21lbWNweShuZ3hfY3B5bWVtKGNjZi0+b2xkcGlkLmRhdGEsIGNjZi0+cGlkLmRhdGEsIGNjZi0+cGlkLmxlbiksCisgICAgICAgICAgICAgICBOR1hfT0xEUElEX0VYVCwgc2l6ZW9mKE5HWF9PTERQSURfRVhUKSk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCA5MDRjMmVhLi4yMjkyN2IzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsMTAgKzgsMTAgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS40NSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjIuMCIKIAogI2RlZmluZSBOR0lOWF9WQVIgICAgICAgICAgIk5HSU5YIgotI2RlZmluZSBOR1hfTkVXUElEX0VYVCAgICAgIi5uZXdiaW4iCisjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKIAogCiAjZW5kaWYgLyogX05HSU5YX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKaW5kZXggYTUzNmJkNi4uMTEwYzllMiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwpAQCAtNjIsNiArNjIsNyBAQAogICAgIGNoYXIgICAgICAgICAgICAgKnJ2OwogICAgIG5neF9mZF90ICAgICAgICAgIGZkOwogICAgIG5neF9pbnRfdCAgICAgICAgIHJjOworICAgIG5neF91aW50X3QgICAgICAgIGJsb2NrOwogICAgIG5neF9jb25mX2ZpbGVfdCAgKnByZXY7CiAKICNpZiAoTkdYX1NVUFBSRVNTX1dBUk4pCkBAIC0xMDMsMTMgKzEwNCwyMCBAQAogICAgICAgICBjZi0+Y29uZl9maWxlLT5maWxlLm9mZnNldCA9IDA7CiAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmZpbGUubG9nID0gY2YtPmxvZzs7CiAgICAgICAgIGNmLT5jb25mX2ZpbGUtPmxpbmUgPSAxOworCisgICAgICAgIGJsb2NrID0gMDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGJsb2NrID0gMTsKICAgICB9CiAKKwogICAgIGZvciAoIDs7ICkgewogICAgICAgICByYyA9IG5neF9jb25mX3JlYWRfdG9rZW4oY2YpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIG5neF9jb25mX3JlYWRfdG9rZW4oKSBtYXkgcmV0dXJuCisgICAgICAgICAqCiAgICAgICAgICAqICAgIE5HWF9FUlJPUiAgICAgICAgICAgICB0aGVyZSBpcyBlcnJvcgogICAgICAgICAgKiAgICBOR1hfT0sgICAgICAgICAgICAgICAgdGhlIHRva2VuIHRlcm1pbmF0ZWQgYnkgIjsiIHdhcyBmb3VuZAogICAgICAgICAgKiAgICBOR1hfQ09ORl9CTE9DS19TVEFSVCAgdGhlIHRva2VuIHRlcm1pbmF0ZWQgYnkgInsiIHdhcyBmb3VuZApAQCAtMTIxLDYgKzEyOSwxOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAocmMgPT0gTkdYX0NPTkZfQkxPQ0tfRE9ORSkgeworICAgICAgICAgICAgYmxvY2sgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9DT05GX0ZJTEVfRE9ORSAmJiBibG9jaykgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGluICVzOiV1aSwgZXhwZWN0aW5nIFwifVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZi0+Y29uZl9maWxlLT5maWxlLm5hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZi0+Y29uZl9maWxlLT5saW5lKTsKKyAgICAgICAgICAgIHJjID0gTkdYX0VSUk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBpZiAocmMgIT0gTkdYX09LICYmIHJjICE9IE5HWF9DT05GX0JMT0NLX1NUQVJUKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjM5LDcgKzY2MCw3IEBACiAKICAgICBuYW1lLT5sZW4gPSBjeWNsZS0+cm9vdC5sZW4gKyBvbGQubGVuOwogCi0gICAgaWYgKGN5Y2xlLT5jb25uZWN0aW9ucykgeworICAgIGlmIChjeWNsZS0+Y29ubmVjdGlvbnMwKSB7CiAgICAgICAgIG5hbWUtPmRhdGEgPSBuZ3hfcGFsbG9jKGN5Y2xlLT5wb29sLCBuYW1lLT5sZW4gKyAxKTsKICAgICAgICAgaWYgKG5hbWUtPmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuICBOR1hfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCBjNDIzYzA1Li5hNzM3MWJmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTIzNywxMyArMjM3LDE0IEBACiAgICAgICAgICAgICB9CiAKICNpZiAoTkdYX1dJTjMyKQorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogV2luc29jayBhc3NpZ25lcyBhIHNvY2tldCBudW1iZXIgZGl2aXNpYmxlIGJ5IDQKICAgICAgICAgICAgICAqIHNvIHRvIGZpbmQgYSBjb25uZWN0aW9uIHdlIGRpdmlkZSBhIHNvY2tldCBudW1iZXIgYnkgNC4KICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBpZiAocyAlIDQpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxzLT5sb2csIDAsCisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc29ja2V0X24gIiBjcmVhdGVkIHNvY2tldCAlZCIsIHMpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CkBAIC0zMjksOSArMzMwLDkgQEAKIHZvaWQKIG5neF9jbG9zZV9saXN0ZW5pbmdfc29ja2V0cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgaTsKLSAgICBuZ3hfc29ja2V0X3QgICAgICBmZDsKLSAgICBuZ3hfbGlzdGVuaW5nX3QgICpsczsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaTsKKyAgICBuZ3hfbGlzdGVuaW5nX3QgICAqbHM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9JT0NQX0VWRU5UKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTM0MiwzNSArMzQzLDg3IEBACiAKICAgICBscyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgaSsrKSB7Ci0gICAgICAgIGZkID0gbHNbaV0uZmQ7CiAKLSNpZiAoTkdYX1dJTjMyKQotICAgICAgICAvKgotICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAotICAgICAgICAgKiBzbyB0byBmaW5kIGEgY29ubmVjdGlvbiB3ZSBkaXZpZGUgYSBzb2NrZXQgbnVtYmVyIGJ5IDQuCi0gICAgICAgICAqLwotCi0gICAgICAgIGZkIC89IDQ7Ci0jZW5kaWYKKyAgICAgICAgYyA9IGxzW2ldLmNvbm5lY3Rpb247CiAKICAgICAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfUlRTSUdfRVZFTlQpIHsKLSAgICAgICAgICAgIGlmIChjeWNsZS0+Y29ubmVjdGlvbnNbZmRdLnJlYWQtPmFjdGl2ZSkgewotICAgICAgICAgICAgICAgIG5neF9kZWxfY29ubigmY3ljbGUtPmNvbm5lY3Rpb25zW2ZkXSwgTkdYX0NMT1NFX0VWRU5UKTsKKyAgICAgICAgICAgIGlmIChjLT5yZWFkLT5hY3RpdmUpIHsKKyAgICAgICAgICAgICAgICBuZ3hfZGVsX2Nvbm4oYywgTkdYX0NMT1NFX0VWRU5UKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGN5Y2xlLT5yZWFkX2V2ZW50c1tmZF0uYWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2RlbF9ldmVudCgmY3ljbGUtPnJlYWRfZXZlbnRzW2ZkXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9SRUFEX0VWRU5ULCBOR1hfQ0xPU0VfRVZFTlQpOworICAgICAgICAgICAgaWYgKGMtPnJlYWQtPmFjdGl2ZSkgeworICAgICAgICAgICAgICAgIG5neF9kZWxfZXZlbnQoYy0+cmVhZCwgTkdYX1JFQURfRVZFTlQsIE5HWF9DTE9TRV9FVkVOVCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChmZCkgPT0gLTEpIHsKKyAgICAgICAgbmd4X2ZyZWVfY29ubmVjdGlvbihjKTsKKworICAgICAgICBjLT5mZCA9IChuZ3hfc29ja2V0X3QpIC0xOworCisgICAgICAgIGlmIChuZ3hfY2xvc2Vfc29ja2V0KGxzW2ldLmZkKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlViBmYWlsZWQiLCAmbHNbaV0uYWRkcl90ZXh0KTsKICAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICBjeWNsZS0+Y29ubmVjdGlvbnNbZmRdLmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CisKK25neF9jb25uZWN0aW9uX3QgKgorbmd4X2dldF9jb25uZWN0aW9uKG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZykKK3sKKyAgICBuZ3hfY29ubmVjdGlvbl90ICpjOworCisgICAgLyogZGlzYWJsZSB3YXJuaW5nOiBXaW4zMiBTT0NLRVQgaXMgdV9pbnQgd2hpbGUgVU5JWCBzb2NrZXQgaXMgaW50ICovCisKKyAgICBpZiAobmd4X2N5Y2xlLT5maWxlcyAmJiAobmd4X3VpbnRfdCkgcyA+PSBuZ3hfY3ljbGUtPmZpbGVzX24pIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInRoZSBuZXcgc29ja2V0IGhhcyBudW1iZXIgJWQsICIKKyAgICAgICAgICAgICAgICAgICAgICAiYnV0IG9ubHkgJXVpIGZpbGVzIGFyZSBhdmFpbGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgIHMsIG5neF9jeWNsZS0+ZmlsZXNfbik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIG5neF9tdXRleF9sb2NrICovCisKKyAgICBjID0gbmd4X2N5Y2xlLT5mcmVlX2Nvbm5lY3Rpb25zOworCisgICAgaWYgKGMgPT0gTlVMTCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiJXVpIHdvcmtlcl9jb25uZWN0aW9ucyBpcyBub3QgZW5vdWdoIiwKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfY3ljbGUtPmNvbm5lY3Rpb25fbik7CisKKyAgICAgICAgLyogbmd4X211dGV4X3VubG9jayAqLworCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG5neF9jeWNsZS0+ZnJlZV9jb25uZWN0aW9ucyA9IGMtPmRhdGE7CisgICAgbmd4X2N5Y2xlLT5mcmVlX2Nvbm5lY3Rpb25fbi0tOworCisgICAgLyogbmd4X211dGV4X3VubG9jayAqLworCisgICAgaWYgKG5neF9jeWNsZS0+ZmlsZXMpIHsKKyAgICAgICAgbmd4X2N5Y2xlLT5maWxlc1tzXSA9IGM7CisgICAgfQorCisgICAgcmV0dXJuIGM7Cit9CisKKwordm9pZAorbmd4X2ZyZWVfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjKQoreworICAgIC8qIG5neF9tdXRleF9sb2NrICovCisKKyAgICBjLT5kYXRhID0gbmd4X2N5Y2xlLT5mcmVlX2Nvbm5lY3Rpb25zOworICAgIG5neF9jeWNsZS0+ZnJlZV9jb25uZWN0aW9ucyA9IGM7CisgICAgbmd4X2N5Y2xlLT5mcmVlX2Nvbm5lY3Rpb25fbisrOworCisgICAgLyogbmd4X211dGV4X3VubG9jayAqLworCisgICAgaWYgKG5neF9jeWNsZS0+ZmlsZXMpIHsKKyAgICAgICAgbmd4X2N5Y2xlLT5maWxlc1tjLT5mZF0gPSBOVUxMOwogICAgIH0KIH0KIApAQCAtNDUxLDkgKzUwNCwxMCBAQAogCiAjZW5kaWYKIAorICAgIG5neF9mcmVlX2Nvbm5lY3Rpb24oYyk7CisKICAgICBmZCA9IGMtPmZkOwogICAgIGMtPmZkID0gKG5neF9zb2NrZXRfdCkgLTE7Ci0gICAgYy0+ZGF0YSA9IE5VTEw7CiAKICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChmZCkgPT0gLTEpIHsKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggM2MyODBiZC4uZTEzZjI4NSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC0xMiw1NCArMTIsNjAgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfc29ja2V0X3QgICAgICBmZDsKK3R5cGVkZWYgc3RydWN0IG5neF9saXN0ZW5pbmdfcyAgbmd4X2xpc3RlbmluZ190OwogCi0gICAgc3RydWN0IHNvY2thZGRyICAqc29ja2FkZHI7Ci0gICAgc29ja2xlbl90ICAgICAgICAgc29ja2xlbjsgICAgLyogc2l6ZSBvZiBzb2NrYWRkciAqLwotICAgIHNpemVfdCAgICAgICAgICAgIGFkZHI7ICAgICAgIC8qIG9mZnNldCB0byBhZGRyZXNzIGluIHNvY2thZGRyICovCi0gICAgc2l6ZV90ICAgICAgICAgICAgYWRkcl90ZXh0X21heF9sZW47Ci0gICAgbmd4X3N0cl90ICAgICAgICAgYWRkcl90ZXh0Oworc3RydWN0IG5neF9saXN0ZW5pbmdfcyB7CisgICAgbmd4X3NvY2tldF90ICAgICAgICBmZDsKIAotICAgIGludCAgICAgICAgICAgICAgIGZhbWlseTsKLSAgICBpbnQgICAgICAgICAgICAgICB0eXBlOworICAgIHN0cnVjdCBzb2NrYWRkciAgICAqc29ja2FkZHI7CisgICAgc29ja2xlbl90ICAgICAgICAgICBzb2NrbGVuOyAgICAvKiBzaXplIG9mIHNvY2thZGRyICovCisgICAgc2l6ZV90ICAgICAgICAgICAgICBhZGRyOyAgICAgICAvKiBvZmZzZXQgdG8gYWRkcmVzcyBpbiBzb2NrYWRkciAqLworICAgIHNpemVfdCAgICAgICAgICAgICAgYWRkcl90ZXh0X21heF9sZW47CisgICAgbmd4X3N0cl90ICAgICAgICAgICBhZGRyX3RleHQ7CiAKLSAgICB2b2lkICAgICAgICAgICAgKCpoYW5kbGVyKShuZ3hfY29ubmVjdGlvbl90ICpjKTsgLyogaGFuZGxlciBvZiBhY2NlcHRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uICovCi0gICAgdm9pZCAgICAgICAgICAgICAqY3R4OyAgICAgICAgLyogbmd4X2h0dHBfY29uZl9jdHhfdCwgZm9yIGV4YW1wbGUgKi8KLSAgICB2b2lkICAgICAgICAgICAgICpzZXJ2ZXJzOyAgICAvKiBhcnJheSBvZiBuZ3hfaHR0cF9pbl9hZGRyX3QsIGZvciBleGFtcGxlICovCisgICAgaW50ICAgICAgICAgICAgICAgICBmYW1pbHk7CisgICAgaW50ICAgICAgICAgICAgICAgICB0eXBlOworICAgIGludCAgICAgICAgICAgICAgICAgYmFja2xvZzsKIAotICAgIG5neF9sb2dfdCAgICAgICAgKmxvZzsKLSAgICBpbnQgICAgICAgICAgICAgICBiYWNrbG9nOworICAgIC8qIGhhbmRsZXIgb2YgYWNjZXB0ZWQgY29ubmVjdGlvbiAqLworICAgIHZvaWQgICAgICAgICAgICAgICgqaGFuZGxlcikobmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiAKLSAgICBzaXplX3QgICAgICAgICAgICBwb29sX3NpemU7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgcG9zdF9hY2NlcHRfYnVmZmVyX3NpemU7IC8qIHNob3VsZCBiZSBoZXJlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIEFjY2VwdEV4KCkgcHJlcmVhZCAqLwotICAgIHRpbWVfdCAgICAgICAgICAgIHBvc3RfYWNjZXB0X3RpbWVvdXQ7ICAgICAvKiBzaG91bGQgYmUgaGVyZSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBkZWZlcnJlZCBhY2NlcHQgKi8KKyAgICB2b2lkICAgICAgICAgICAgICAgKmN0eDsgICAgICAvKiBuZ3hfaHR0cF9jb25mX2N0eF90LCBmb3IgZXhhbXBsZSAqLworICAgIHZvaWQgICAgICAgICAgICAgICAqc2VydmVyczsgIC8qIGFycmF5IG9mIG5neF9odHRwX2luX2FkZHJfdCwgZm9yIGV4YW1wbGUgKi8KIAotICAgIHVuc2lnbmVkICAgICAgICAgIG9wZW46MTsKLSAgICB1bnNpZ25lZCAgICAgICAgICByZW1haW46MTsKLSAgICB1bnNpZ25lZCAgICAgICAgICBpZ25vcmU6MTsKKyAgICBuZ3hfbG9nX3QgICAgICAgICAgIGxvZzsKIAotICAgIHVuc2lnbmVkICAgICAgICAgIGJvdW5kOjE7ICAgICAgIC8qIGFscmVhZHkgYm91bmQgKi8KLSAgICB1bnNpZ25lZCAgICAgICAgICBpbmhlcml0ZWQ6MTsgICAvKiBpbmhlcml0ZWQgZnJvbSBwcmV2aW91cyBwcm9jZXNzICovCi0gICAgdW5zaWduZWQgICAgICAgICAgbm9uYmxvY2tpbmdfYWNjZXB0OjE7Ci0gICAgdW5zaWduZWQgICAgICAgICAgY2hhbmdlX2JhY2tsb2c6MTsKLSAgICB1bnNpZ25lZCAgICAgICAgICBub25ibG9ja2luZzoxOwotICAgIHVuc2lnbmVkICAgICAgICAgIHNoYXJlZDoxOyAgICAvKiBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzIG9yIHByb2Nlc3NlcyAqLwotICAgIHVuc2lnbmVkICAgICAgICAgIGFkZHJfbnRvcDoxOworICAgIHNpemVfdCAgICAgICAgICAgICAgcG9vbF9zaXplOworICAgIC8qIHNob3VsZCBiZSBoZXJlIGJlY2F1c2Ugb2YgdGhlIEFjY2VwdEV4KCkgcHJlcmVhZCAqLworICAgIHNpemVfdCAgICAgICAgICAgICAgcG9zdF9hY2NlcHRfYnVmZmVyX3NpemU7CisgICAgLyogc2hvdWxkIGJlIGhlcmUgYmVjYXVzZSBvZiB0aGUgZGVmZXJyZWQgYWNjZXB0ICovCisgICAgdGltZV90ICAgICAgICAgICAgICBwb3N0X2FjY2VwdF90aW1lb3V0OworCisgICAgbmd4X2xpc3RlbmluZ190ICAgICpwcmV2aW91czsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgKmNvbm5lY3Rpb247CisKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIG9wZW46MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIHJlbWFpbjoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgaWdub3JlOjE7CisKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIGJvdW5kOjE7ICAgICAgIC8qIGFscmVhZHkgYm91bmQgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIGluaGVyaXRlZDoxOyAgIC8qIGluaGVyaXRlZCBmcm9tIHByZXZpb3VzIHByb2Nlc3MgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIG5vbmJsb2NraW5nX2FjY2VwdDoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgY2hhbmdlX2JhY2tsb2c6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIG5vbmJsb2NraW5nOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICBzaGFyZWQ6MTsgICAgLyogc2hhcmVkIGJldHdlZW4gdGhyZWFkcyBvciBwcm9jZXNzZXMgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgICAgIGFkZHJfbnRvcDoxOwogCiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCkKLSAgICB1bnNpZ25lZCAgICAgICAgICBkZWZlcnJlZF9hY2NlcHQ6MTsKLSAgICB1bnNpZ25lZCAgICAgICAgICBkZWxldGVfZGVmZXJyZWQ6MTsKLSAgICB1bnNpZ25lZCAgICAgICAgICBhZGRfZGVmZXJyZWQ6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgIGRlZmVycmVkX2FjY2VwdDoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgZGVsZXRlX2RlZmVycmVkOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICBhZGRfZGVmZXJyZWQ6MTsKICNpZmRlZiBTT19BQ0NFUFRGSUxURVIKLSAgICBjaGFyICAgICAgICAgICAgICphY2NlcHRfZmlsdGVyOworICAgIGNoYXIgICAgICAgICAgICAgICAqYWNjZXB0X2ZpbHRlcjsKICNlbmRpZgogI2VuZGlmCiAKLX0gbmd4X2xpc3RlbmluZ190OworfTsKIAogCiB0eXBlZGVmIGVudW0gewpAQCAtMTYwLDggKzE2Niw4IEBACiB2b2lkIG5neF9jbG9zZV9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpOwogbmd4X2ludF90IG5neF9jb25uZWN0aW9uX2Vycm9yKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9lcnJfdCBlcnIsIGNoYXIgKnRleHQpOwogCi0KLWV4dGVybiBuZ3hfb3NfaW9fdCAgbmd4X2lvOworbmd4X2Nvbm5lY3Rpb25fdCAqbmd4X2dldF9jb25uZWN0aW9uKG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZyk7Cit2b2lkIG5neF9mcmVlX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiAKIAogI2VuZGlmIC8qIF9OR1hfQ09OTkVDVElPTl9IX0lOQ0xVREVEXyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwppbmRleCAyYzc4MjM1Li44Mzk4NDNmIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwpAQCAtMzM2LDcgKzMzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5mZCA9IGxzW2ldLmZkOwotICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLnJlbWFpbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0ucHJldmlvdXMgPSAmbHNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5yZW1haW4gPSAxOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHNbbl0uYmFja2xvZyAhPSBubHNbaV0uYmFja2xvZykgewpAQCAtNTk0LDcgKzU5NCw3IEBACiAKICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQobHNbaV0uZmQpID09IC0xKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgJVYgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgbGlzdGVuaW5nIHNvY2tldCBvbiAlViBmYWlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKICAgICAgICAgfQogICAgIH0KQEAgLTYyNyw3ICs2MjcsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9sZF9jeWNsZS0+Y29ubmVjdGlvbnMgPT0gTlVMTCkgeworICAgIGlmIChvbGRfY3ljbGUtPmNvbm5lY3Rpb25zMCA9PSBOVUxMKSB7CiAgICAgICAgIC8qIGFuIG9sZCBjeWNsZSBpcyBhbiBpbml0IGN5Y2xlICovCiAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wob2xkX2N5Y2xlLT5wb29sKTsKICAgICAgICAgcmV0dXJuIGN5Y2xlOwpAQCAtNzQyLDcgKzc0Miw4IEBACiAgICAgfQogCiAgICAgbmd4X21lbXplcm8oJmZpbGUsIHNpemVvZihuZ3hfZmlsZV90KSk7Ci0gICAgZmlsZS5uYW1lID0gKG5neF9pbmhlcml0ZWQgJiYgZ2V0cHBpZCgpID4gMSkgPyBjY2YtPm5ld3BpZCA6IGNjZi0+cGlkOworCisgICAgZmlsZS5uYW1lID0gY2NmLT5waWQ7CiAgICAgZmlsZS5sb2cgPSBjeWNsZS0+bG9nOwogCiAgICAgdHJ1bmMgPSBuZ3hfdGVzdF9jb25maWcgPyAwOiBOR1hfRklMRV9UUlVOQ0FURTsKQEAgLTc4NiwxMiArNzg3LDcgQEAKIAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKIAotICAgIGlmIChuZ3hfaW5oZXJpdGVkICYmIGdldHBwaWQoKSA+IDEpIHsKLSAgICAgICAgbmFtZSA9IGNjZi0+bmV3cGlkLmRhdGE7Ci0KLSAgICB9IGVsc2UgeyAKLSAgICAgICAgbmFtZSA9IGNjZi0+cGlkLmRhdGE7Ci0gICAgfQorICAgIG5hbWUgPSBuZ3hfbmV3X2JpbmFyeSA/IGNjZi0+b2xkcGlkLmRhdGEgOiBjY2YtPnBpZC5kYXRhOwogCiAgICAgaWYgKG5neF9kZWxldGVfZmlsZShuYW1lKSA9PSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKQEAgLTk2Myw3ICs5NTksNyBAQAogICAgICAgICBmb3VuZCA9IDA7CiAKICAgICAgICAgZm9yIChuID0gMDsgbiA8IGN5Y2xlW2ldLT5jb25uZWN0aW9uX247IG4rKykgewotICAgICAgICAgICAgaWYgKGN5Y2xlW2ldLT5jb25uZWN0aW9uc1tuXS5mZCAhPSAobmd4X3NvY2tldF90KSAtMSkgeworICAgICAgICAgICAgaWYgKGN5Y2xlW2ldLT5jb25uZWN0aW9uczBbbl0uZmQgIT0gKG5neF9zb2NrZXRfdCkgLTEpIHsKICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CiAKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGxvZywgMCwgImxpdmUgZmQ6JWQiLCBuKTsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jeWNsZS5oIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKaW5kZXggNmVkNzUzYS4uYmYxZDQzMCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKKysrIGIvc3JjL2NvcmUvbmd4X2N5Y2xlLmgKQEAgLTI4LDE0ICsyOCwyMCBAQAogICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAqbG9nOwogICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAqbmV3X2xvZzsKIAorICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICoqZmlsZXM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICpmcmVlX2Nvbm5lY3Rpb25zOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgZnJlZV9jb25uZWN0aW9uX247CisKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgIGxpc3RlbmluZzsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgIHBhdGhlczsKICAgICBuZ3hfbGlzdF90ICAgICAgICAgICAgICAgIG9wZW5fZmlsZXM7CiAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25fbjsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgKmNvbm5lY3Rpb25zOwotICAgIG5neF9ldmVudF90ICAgICAgICAgICAgICAqcmVhZF9ldmVudHM7Ci0gICAgbmd4X2V2ZW50X3QgICAgICAgICAgICAgICp3cml0ZV9ldmVudHM7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBmaWxlc19uOworCisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICpjb25uZWN0aW9uczA7CisgICAgbmd4X2V2ZW50X3QgICAgICAgICAgICAgICpyZWFkX2V2ZW50czA7CisgICAgbmd4X2V2ZW50X3QgICAgICAgICAgICAgICp3cml0ZV9ldmVudHMwOwogCiAgICAgbmd4X2N5Y2xlX3QgICAgICAgICAgICAgICpvbGRfY3ljbGU7CiAKQEAgLTUxLDYgKzU3LDkgQEAKICAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHdvcmtlcl9wcm9jZXNzZXM7CiAgICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICBkZWJ1Z19wb2ludHM7CiAKKyAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHJsaW1pdF9ub2ZpbGU7CisgICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICBybGltaXRfc2lncGVuZGluZzsKKwogICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk7CiAKICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgKnVzZXJuYW1lOwpAQCAtNjAsNyArNjksNyBAQAogICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgd29ya2luZ19kaXJlY3Rvcnk7CiAKICAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgIHBpZDsKLSAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgIG5ld3BpZDsKKyAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgIG9sZHBpZDsKIAogI2lmIChOR1hfVEhSRUFEUykKICAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgIHdvcmtlcl90aHJlYWRzOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2xvZy5oIGIvc3JjL2NvcmUvbmd4X2xvZy5oCmluZGV4IGRmMGQ1MjUuLjI5MGNhNzQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9sb2cuaAorKysgYi9zcmMvY29yZS9uZ3hfbG9nLmgKQEAgLTcyLDEzICs3MiwxMyBAQAogI2RlZmluZSBOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MgIDEKIAogI2RlZmluZSBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIGFyZ3MuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCA+PSBsZXZlbCkgbmd4X2xvZ19lcnJvcl9jb3JlKGxldmVsLCBsb2csIGFyZ3MpCisgICAgaWYgKChsb2cpLT5sb2dfbGV2ZWwgPj0gbGV2ZWwpIG5neF9sb2dfZXJyb3JfY29yZShsZXZlbCwgbG9nLCBhcmdzKQogCiB2b2lkIG5neF9sb2dfZXJyb3JfY29yZShuZ3hfdWludF90IGxldmVsLCBuZ3hfbG9nX3QgKmxvZywgbmd4X2Vycl90IGVyciwKICAgICBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKICNkZWZpbmUgbmd4X2xvZ19kZWJ1ZyhsZXZlbCwgbG9nLCBhcmdzLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAobG9nLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGxvZyktPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgbmd4X2xvZ19lcnJvcl9jb3JlKE5HWF9MT0dfREVCVUcsIGxvZywgYXJncykKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTg4LDEzICs4OCwxMyBAQAogI2RlZmluZSBOR1hfSEFWRV9WQVJJQURJQ19NQUNST1MgIDEKIAogI2RlZmluZSBuZ3hfbG9nX2Vycm9yKGxldmVsLCBsb2csIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCA+PSBsZXZlbCkgbmd4X2xvZ19lcnJvcl9jb3JlKGxldmVsLCBsb2csIF9fVkFfQVJHU19fKQorICAgIGlmICgobG9nKS0+bG9nX2xldmVsID49IGxldmVsKSBuZ3hfbG9nX2Vycm9yX2NvcmUobGV2ZWwsIGxvZywgX19WQV9BUkdTX18pCiAKIHZvaWQgbmd4X2xvZ19lcnJvcl9jb3JlKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLAogICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnKGxldmVsLCBsb2csIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2Vycm9yX2NvcmUoTkdYX0xPR19ERUJVRywgbG9nLCBfX1ZBX0FSR1NfXykKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzNCw0MyArMTM0LDQzIEBACiAjZWxzZSAvKiBOTyBWQVJJQURJQyBNQUNST1MgKi8KIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnMChsZXZlbCwgbG9nLCBlcnIsIGZtdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCkKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnMShsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSkKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnMihsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMikgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMikKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnMyhsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMykgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMykKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnNChsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCkKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnNShsZXZlbCwgbG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnNihsZXZlbCwgbG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KSAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNikKIAogI2RlZmluZSBuZ3hfbG9nX2RlYnVnNyhsZXZlbCwgbG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KSAgICAgICAgICAgICAgXAotICAgIGlmIChsb2ctPmxvZ19sZXZlbCAmIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgobG9nKS0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBuZ3hfbG9nX2RlYnVnX2NvcmUobG9nLCBlcnIsIGZtdCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KQogCiAjZGVmaW5lIG5neF9sb2dfZGVidWc4KGxldmVsLCBsb2csIGVyciwgZm10LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpICAgICAgICBcCi0gICAgaWYgKGxvZy0+bG9nX2xldmVsICYgbGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChsb2cpLT5sb2dfbGV2ZWwgJiBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIG5neF9sb2dfZGVidWdfY29yZShsb2csIGVyciwgZm10LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKaW5kZXggNDEzYjBkZS4uNWZhYTFmYiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAgICAgbmd4X2V2ZW50X2FjdGlvbnMgPSBuZ3hfZGV2cG9sbF9tb2R1bGVfY3R4LmFjdGlvbnM7CiAKLSAgICBuZ3hfZXZlbnRfZmxhZ3MgPSBOR1hfVVNFX0xFVkVMX0VWRU5UOworICAgIG5neF9ldmVudF9mbGFncyA9IE5HWF9VU0VfTEVWRUxfRVZFTlR8TkdYX1VTRV9GRF9FVkVOVDsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC00NDksMTAgKzQ0OSwxMCBAQAogICAgIGxvY2sgPSAxOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50czsgaSsrKSB7Ci0gICAgICAgIGMgPSAmbmd4X2N5Y2xlLT5jb25uZWN0aW9uc1tldmVudF9saXN0W2ldLmZkXTsKKyAgICAgICAgYyA9IG5neF9jeWNsZS0+ZmlsZXNbZXZlbnRfbGlzdFtpXS5mZF07CiAKICAgICAgICAgaWYgKGMtPmZkID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAobmd4X2N5Y2xlLT5yZWFkX2V2ZW50c1tldmVudF9saXN0W2ldLmZkXS5jbG9zZWQpIHsKKyAgICAgICAgICAgIGlmIChjLT5yZWFkLT5jbG9zZWQpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtNDYwLDI2ICs0NjAsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotI2lmIDAKLSAgICAgICAgaWYgKGMtPmZkID09IC0xKSB7Ci0gICAgICAgICAgICBvbGRfY3ljbGUgPSBuZ3hfb2xkX2N5Y2xlcy5lbHRzOwotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG5neF9vbGRfY3ljbGVzLm5lbHRzOyBqKyspIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkX2N5Y2xlW2pdID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGMgPSAmb2xkX2N5Y2xlW2pdLT5jb25uZWN0aW9uc1tldmVudF9saXN0W2ldLmZkXTsKLSAgICAgICAgICAgICAgICBpZiAoYy0+ZmQgIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGMtPmZkID09IC0xKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIDAsICJ1bmtub3duIGN5Y2xlIik7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICByZXZlbnRzID0gZXZlbnRfbGlzdFtpXS5yZXZlbnRzOwogCiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCmluZGV4IDY4ZDU5MmMuLjdkZTBlNGIgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCkBAIC0xMDksNyArMTA5LDkgQEAKIAogICAgIG5neF9ldmVudF9hY3Rpb25zID0gbmd4X3BvbGxfbW9kdWxlX2N0eC5hY3Rpb25zOwogCi0gICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVHxOR1hfVVNFX09ORVNIT1RfRVZFTlQ7CisgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVAorICAgICAgICAgICAgICAgICAgICAgIHxOR1hfVVNFX09ORVNIT1RfRVZFTlQKKyAgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9GRF9FVkVOVDsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC0yMjksNyArMjMxLDcgQEAKIAogICAgICAgICAgICAgZXZlbnRfbGlzdFtldi0+aW5kZXhdID0gZXZlbnRfbGlzdFtuZXZlbnRzXTsKIAotICAgICAgICAgICAgYyA9ICZuZ3hfY3ljbGUtPmNvbm5lY3Rpb25zW2V2ZW50X2xpc3RbbmV2ZW50c10uZmRdOworICAgICAgICAgICAgYyA9IG5neF9jeWNsZS0+ZmlsZXNbZXZlbnRfbGlzdFtuZXZlbnRzXS5mZF07CiAKICAgICAgICAgICAgIGlmIChjLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgICAgIGN5Y2xlID0gbmd4X29sZF9jeWNsZXMuZWx0czsKQEAgLTIzNyw3ICsyMzksNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoY3ljbGVbaV0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYyA9ICZjeWNsZVtpXS0+Y29ubmVjdGlvbnNbZXZlbnRfbGlzdFtuZXZlbnRzXS5mZF07CisgICAgICAgICAgICAgICAgICAgIGMgPSBjeWNsZVtpXS0+ZmlsZXNbZXZlbnRfbGlzdFtuZXZlbnRzXS5mZF07CiAgICAgICAgICAgICAgICAgICAgIGlmIChjLT5mZCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQyNSw3ICs0MjcsNyBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBjID0gJm5neF9jeWNsZS0+Y29ubmVjdGlvbnNbZXZlbnRfbGlzdFtpXS5mZF07CisgICAgICAgIGMgPSBuZ3hfY3ljbGUtPmZpbGVzW2V2ZW50X2xpc3RbaV0uZmRdOwogCiAgICAgICAgIGlmIChjLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgb2xkX2N5Y2xlID0gbmd4X29sZF9jeWNsZXMuZWx0czsKQEAgLTQzMyw3ICs0MzUsNyBAQAogICAgICAgICAgICAgICAgIGlmIChvbGRfY3ljbGVbbl0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYyA9ICZvbGRfY3ljbGVbbl0tPmNvbm5lY3Rpb25zW2V2ZW50X2xpc3RbaV0uZmRdOworICAgICAgICAgICAgICAgIGMgPSBvbGRfY3ljbGVbbl0tPmZpbGVzW2V2ZW50X2xpc3RbaV0uZmRdOwogICAgICAgICAgICAgICAgIGlmIChjLT5mZCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKaW5kZXggNjk3OTJjNi4uOTJlMzNhMCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwpAQCAtMTY1LDcgKzE2NSw5IEBACiAKICAgICBuZ3hfZXZlbnRfYWN0aW9ucyA9IG5neF9ydHNpZ19tb2R1bGVfY3R4LmFjdGlvbnM7CiAKLSAgICBuZ3hfZXZlbnRfZmxhZ3MgPSBOR1hfVVNFX1JUU0lHX0VWRU5UfE5HWF9VU0VfR1JFRURZX0VWRU5UOworICAgIG5neF9ldmVudF9mbGFncyA9IE5HWF9VU0VfUlRTSUdfRVZFTlQKKyAgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9HUkVFRFlfRVZFTlQKKyAgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9GRF9FVkVOVDsKIAogICAgIHJldHVybiBOR1hfT0s7CiB9CkBAIC00MjgsNyArNDMwLDcgQEAKIAogICAgICAgICAvKiBUT0RPOiBvbGRfY3ljbGVzICovCiAKLSAgICAgICAgYyA9ICZuZ3hfY3ljbGUtPmNvbm5lY3Rpb25zW3NpLnNpX2ZkXTsKKyAgICAgICAgYyA9IG5neF9jeWNsZS0+ZmlsZXNbc2kuc2lfZmRdOwogCiAgICAgICAgIGluc3RhbmNlID0gc2lnbm8gLSBydHNjZi0+c2lnbm87CiAKQEAgLTU5Niw3ICs1OTgsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjID0gJmN5Y2xlLT5jb25uZWN0aW9uc1tvdmVyZmxvd19jdXJyZW50KytdOworICAgICAgICAgICAgYyA9IGN5Y2xlLT5maWxlc1tvdmVyZmxvd19jdXJyZW50KytdOwogCiAgICAgICAgICAgICBpZiAoYy0+ZmQgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY1Miw3ICs2NTQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICAgICAgYyA9ICZjeWNsZS0+Y29ubmVjdGlvbnNbb3ZlcmZsb3dfbGlzdFtpXS5mZF07CisgICAgICAgICAgICBjID0gY3ljbGUtPmZpbGVzW292ZXJmbG93X2xpc3RbaV0uZmRdOwogCiAgICAgICAgICAgICByZXYgPSBjLT5yZWFkOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKaW5kZXggNTU1N2MzNC4uZWFjYTQ2NyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwpAQCAtMTEzLDYgKzExMywxMyBAQAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2V2ZW50X2NvcmVfY29tbWFuZHNbXSA9IHsKIAorICAgIHsgbmd4X3N0cmluZygid29ya2VyX2Nvbm5lY3Rpb25zIiksCisgICAgICBOR1hfRVZFTlRfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIG5neF9ldmVudF9jb25uZWN0aW9ucywKKyAgICAgIDAsCisgICAgICAwLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJjb25uZWN0aW9ucyIpLAogICAgICAgTkdYX0VWRU5UX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCiAgICAgICBuZ3hfZXZlbnRfY29ubmVjdGlvbnMsCkBAIC0zMjIsMTMgKzMyOSwxNSBAQAogc3RhdGljIG5neF9pbnRfdAogbmd4X2V2ZW50X21vZHVsZV9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSNpZiAhKE5HWF9XSU4zMikKLQotICAgIHNpemVfdCAgICAgICAgICAgICAgIHNpemU7CiAgICAgdm9pZCAgICAgICAgICAgICAgKioqY2Y7Ci0gICAgY2hhciAgICAgICAgICAgICAgICAqc2hhcmVkOwotICAgIG5neF9jb3JlX2NvbmZfdCAgICAgKmNjZjsKICAgICBuZ3hfZXZlbnRfY29uZl90ICAgICplY2Y7CisjaWYgIShOR1hfV0lOMzIpCisgICAgY2hhciAgICAgICAgICAgICAgICAqc2hhcmVkOworICAgIHNpemVfdCAgICAgICAgICAgICAgIHNpemU7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgbGltaXQ7CisgICAgc3RydWN0IHJsaW1pdCAgICAgICAgcmxtdDsKKyAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CisjZW5kaWYKIAogICAgIGNmID0gbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2V2ZW50c19tb2R1bGUpOwogCkBAIC0zNDMsOSArMzUyLDMwIEBACiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAidXNpbmcgdGhlIFwiJXNcIiBldmVudCBtZXRob2QiLCBlY2YtPm5hbWUpOwogCisjaWYgIShOR1hfV0lOMzIpCiAKICAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsIG5neF9jb3JlX21vZHVsZSk7CiAKKyAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybG10KSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAiZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUpIGZhaWxlZCwgaWdub3JlZCIpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGVjZi0+Y29ubmVjdGlvbnMgPiAobmd4X3VpbnRfdCkgcmxtdC5ybGltX2N1cgorICAgICAgICAgICAgJiYgKGNjZi0+cmxpbWl0X25vZmlsZSA9PSBOR1hfQ09ORl9VTlNFVAorICAgICAgICAgICAgICAgIHx8IGVjZi0+Y29ubmVjdGlvbnMgPiAobmd4X3VpbnRfdCkgY2NmLT5ybGltaXRfbm9maWxlKSkKKyAgICAgICAgeworICAgICAgICAgICAgbGltaXQgPSAoY2NmLT5ybGltaXRfbm9maWxlID09IE5HWF9DT05GX1VOU0VUKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgKG5neF9pbnRfdCkgcmxtdC5ybGltX2N1ciA6IGNjZi0+cmxpbWl0X25vZmlsZTsKKworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICIldWkgd29ya2VyX2Nvbm5lY3Rpb25zIGFyZSBtb3JlIHRoYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlbiBmaWxlIHJlc291cmNlIGxpbWl0OiAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVjZi0+Y29ubmVjdGlvbnMsIGxpbWl0KTsKKyAgICAgICAgfQorICAgIH0KKworCiAgICAgaWYgKGNjZi0+bWFzdGVyID09IDAgfHwgbmd4X2FjY2VwdF9tdXRleF9wdHIpIHsKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CkBAIC0zOTAsNyArNDIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAiY291bnRlcjogJXAsICVkIiwKICAgICAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9jb3VudGVyLCAqbmd4X2Nvbm5lY3Rpb25fY291bnRlcik7CiAKLSNlbmRpZgorI2VuZGlmIC8qICEoTkdYX1dJTjMyKSAqLwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTQwMCwxNSArNDMwLDE2IEBACiBuZ3hfZXZlbnRfcHJvY2Vzc19pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfdWludF90ICAgICAgICAgICBtLCBpOwotICAgIG5neF9zb2NrZXRfdCAgICAgICAgIGZkOwogICAgIG5neF9ldmVudF90ICAgICAgICAgKnJldiwgKndldjsKLSAgICBuZ3hfbGlzdGVuaW5nX3QgICAgICpzOwotICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7CisgICAgbmd4X2xpc3RlbmluZ190ICAgICAqbHM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAqYywgKm5leHQsICpvbGQ7CiAgICAgbmd4X2NvcmVfY29uZl90ICAgICAqY2NmOwogICAgIG5neF9ldmVudF9jb25mX3QgICAgKmVjZjsKICAgICBuZ3hfZXZlbnRfbW9kdWxlX3QgICptb2R1bGU7CiAjaWYgKE5HWF9XSU4zMikKICAgICBuZ3hfaW9jcF9jb25mX3QgICAgICppb2NwY2Y7CisjZWxzZQorICAgIHN0cnVjdCBybGltaXQgICAgICAgIHJsbXQ7CiAjZW5kaWYKIAogICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2NvcmVfbW9kdWxlKTsKQEAgLTQ0OSwyOCArNDgwLDQyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjeWNsZS0+Y29ubmVjdGlvbnMgPSBuZ3hfYWxsb2Moc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QpICogZWNmLT5jb25uZWN0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7Ci0gICAgaWYgKGN5Y2xlLT5jb25uZWN0aW9ucyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7CisjaWYgIShOR1hfV0lOMzIpCisKKyAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9GRF9FVkVOVCkgeworCisgICAgICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsbXQpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldHJsaW1pdChSTElNSVRfTk9GSUxFKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjeWNsZS0+ZmlsZXNfbiA9IChuZ3hfdWludF90KSBybG10LnJsaW1fY3VyOworCisgICAgICAgIGN5Y2xlLT5maWxlcyA9IG5neF9jYWxsb2Moc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QgKikgKiBjeWNsZS0+ZmlsZXNfbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nKTsKKyAgICAgICAgaWYgKGN5Y2xlLT5maWxlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CiAgICAgfQogCi0gICAgYyA9IGN5Y2xlLT5jb25uZWN0aW9uczsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmNvbm5lY3Rpb25fbjsgaSsrKSB7Ci0gICAgICAgIGNbaV0uZmQgPSAobmd4X3NvY2tldF90KSAtMTsKLSAgICAgICAgY1tpXS5kYXRhID0gTlVMTDsKLSNpZiAoTkdYX1RIUkVBRFMpCi0gICAgICAgIGNbaV0ubG9jayA9IDA7CiAjZW5kaWYKLSAgICB9CiAKLSAgICBjeWNsZS0+cmVhZF9ldmVudHMgPSBuZ3hfYWxsb2Moc2l6ZW9mKG5neF9ldmVudF90KSAqIGVjZi0+Y29ubmVjdGlvbnMsCisgICAgY3ljbGUtPmNvbm5lY3Rpb25zMCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nKTsKLSAgICBpZiAoY3ljbGUtPnJlYWRfZXZlbnRzID09IE5VTEwpIHsKKyAgICBpZiAoY3ljbGUtPmNvbm5lY3Rpb25zMCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgcmV2ID0gY3ljbGUtPnJlYWRfZXZlbnRzOworICAgIGMgPSBjeWNsZS0+Y29ubmVjdGlvbnMwOworCisgICAgY3ljbGUtPnJlYWRfZXZlbnRzMCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2V2ZW50X3QpICogZWNmLT5jb25uZWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7CisgICAgaWYgKGN5Y2xlLT5yZWFkX2V2ZW50czAgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKworICAgIHJldiA9IGN5Y2xlLT5yZWFkX2V2ZW50czA7CiAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5jb25uZWN0aW9uX247IGkrKykgewogICAgICAgICByZXZbaV0uY2xvc2VkID0gMTsKICAgICAgICAgcmV2W2ldLmluc3RhbmNlID0gMTsKQEAgLTQ4MCwxMyArNTI1LDEzIEBACiAjZW5kaWYKICAgICB9CiAKLSAgICBjeWNsZS0+d3JpdGVfZXZlbnRzID0gbmd4X2FsbG9jKHNpemVvZihuZ3hfZXZlbnRfdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAorICAgIGN5Y2xlLT53cml0ZV9ldmVudHMwID0gbmd4X2FsbG9jKHNpemVvZihuZ3hfZXZlbnRfdCkgKiBlY2YtPmNvbm5lY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7Ci0gICAgaWYgKGN5Y2xlLT53cml0ZV9ldmVudHMgPT0gTlVMTCkgeworICAgIGlmIChjeWNsZS0+d3JpdGVfZXZlbnRzMCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgd2V2ID0gY3ljbGUtPndyaXRlX2V2ZW50czsKKyAgICB3ZXYgPSBjeWNsZS0+d3JpdGVfZXZlbnRzMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmNvbm5lY3Rpb25fbjsgaSsrKSB7CiAgICAgICAgIHdldltpXS5jbG9zZWQgPSAxOwogI2lmIChOR1hfVEhSRUFEUykKQEAgLTQ5NSw0MSArNTQwLDU3IEBACiAjZW5kaWYKICAgICB9CiAKKyAgICBpID0gY3ljbGUtPmNvbm5lY3Rpb25fbjsKKyAgICBuZXh0ID0gTlVMTDsKKworICAgIGRvIHsKKyAgICAgICAgaS0tOworCisgICAgICAgIGNbaV0uZGF0YSA9IG5leHQ7CisgICAgICAgIGNbaV0ucmVhZCA9ICZjeWNsZS0+cmVhZF9ldmVudHMwW2ldOworICAgICAgICBjW2ldLndyaXRlID0gJmN5Y2xlLT53cml0ZV9ldmVudHMwW2ldOworICAgICAgICBjW2ldLmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CisKKyAgICAgICAgbmV4dCA9ICZjW2ldOworCisjaWYgKE5HWF9USFJFQURTKQorICAgICAgICBjW2ldLmxvY2sgPSAwOworI2VuZGlmCisgICAgfSB3aGlsZSAoaSk7CisKKyAgICBjeWNsZS0+ZnJlZV9jb25uZWN0aW9ucyA9IG5leHQ7CisgICAgY3ljbGUtPmZyZWVfY29ubmVjdGlvbl9uID0gZWNmLT5jb25uZWN0aW9uczsKKwogICAgIC8qIGZvciBlYWNoIGxpc3RlbmluZyBzb2NrZXQgKi8KIAotICAgIHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CisgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CiAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewogCi0gICAgICAgIGZkID0gc1tpXS5mZDsKKyAgICAgICAgYyA9IG5neF9nZXRfY29ubmVjdGlvbihsc1tpXS5mZCwgY3ljbGUtPmxvZyk7CiAKLSNpZiAoTkdYX1dJTjMyKQotICAgICAgICAvKgotICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAotICAgICAgICAgKiBzbyB0byBmaW5kIGEgY29ubmVjdGlvbiB3ZSBkaXZpZGUgYSBzb2NrZXQgbnVtYmVyIGJ5IDQuCi0gICAgICAgICAqLworICAgICAgICBpZiAoYyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CiAKLSAgICAgICAgZmQgLz0gNDsKLSNlbmRpZgotCi0gICAgICAgIGMgPSAmY3ljbGUtPmNvbm5lY3Rpb25zW2ZkXTsKLSAgICAgICAgcmV2ID0gJmN5Y2xlLT5yZWFkX2V2ZW50c1tmZF07Ci0gICAgICAgIHdldiA9ICZjeWNsZS0+d3JpdGVfZXZlbnRzW2ZkXTsKKyAgICAgICAgcmV2ID0gYy0+cmVhZDsKKyAgICAgICAgd2V2ID0gYy0+d3JpdGU7CiAKICAgICAgICAgbmd4X21lbXplcm8oYywgc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QpKTsKKworICAgICAgICBjLT5yZWFkID0gcmV2OworICAgICAgICBjLT53cml0ZSA9IHdldjsKKyAgICAgICAgYy0+ZmQgPSBsc1tpXS5mZDsKKyAgICAgICAgYy0+bG9nID0gJmxzW2ldLmxvZzsKKworICAgICAgICBjLT5saXN0ZW5pbmcgPSAmbHNbaV07CisgICAgICAgIGxzW2ldLmNvbm5lY3Rpb24gPSBjOworCisgICAgICAgIGMtPmN0eCA9IGxzW2ldLmN0eDsKKyAgICAgICAgYy0+c2VydmVycyA9IGxzW2ldLnNlcnZlcnM7CisKICAgICAgICAgbmd4X21lbXplcm8ocmV2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKICAgICAgICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKIAotICAgICAgICBjLT5mZCA9IHNbaV0uZmQ7Ci0gICAgICAgIGMtPmxpc3RlbmluZyA9ICZzW2ldOwotCi0gICAgICAgIGMtPmN0eCA9IHNbaV0uY3R4OwotICAgICAgICBjLT5zZXJ2ZXJzID0gc1tpXS5zZXJ2ZXJzOwotICAgICAgICBjLT5sb2cgPSBzW2ldLmxvZzsKLSAgICAgICAgYy0+cmVhZCA9IHJldjsKLQotICAgICAgICAvKiByZXF1aXJlZCBieSBpb2NwIGluICJjLT53cml0ZS0+YWN0aXZlID0gMSIgKi8KLSAgICAgICAgYy0+d3JpdGUgPSB3ZXY7Ci0KICAgICAgICAgLyogcmVxdWlyZWQgYnkgcG9sbCAqLwogICAgICAgICB3ZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7CiAKQEAgLTU0MiwyNCArNjAzLDI2IEBACiAgICAgICAgIHJldi0+YWNjZXB0ID0gMTsKIAogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQpCi0gICAgICAgIHJldi0+ZGVmZXJyZWRfYWNjZXB0ID0gc1tpXS5kZWZlcnJlZF9hY2NlcHQ7CisgICAgICAgIHJldi0+ZGVmZXJyZWRfYWNjZXB0ID0gbHNbaV0uZGVmZXJyZWRfYWNjZXB0OwogI2VuZGlmCiAKICAgICAgICAgaWYgKCEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9JT0NQX0VWRU5UKSkgewotICAgICAgICAgICAgaWYgKHNbaV0ucmVtYWluKSB7CisgICAgICAgICAgICBpZiAobHNbaV0ucHJldmlvdXMpIHsKIAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogZGVsZXRlIHRoZSBvbGQgYWNjZXB0IGV2ZW50cyB0aGF0IHdlcmUgYm91bmQgdG8KICAgICAgICAgICAgICAgICAgKiB0aGUgb2xkIGN5Y2xlIHJlYWQgZXZlbnRzIGFycmF5CiAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudCgmY3ljbGUtPm9sZF9jeWNsZS0+cmVhZF9ldmVudHNbZmRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX1JFQURfRVZFTlQsIE5HWF9DTE9TRV9FVkVOVCkgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgIG9sZCA9IGxzW2ldLnByZXZpb3VzLT5jb25uZWN0aW9uOworCisgICAgICAgICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQob2xkLT5yZWFkLCBOR1hfUkVBRF9FVkVOVCwgTkdYX0NMT1NFX0VWRU5UKQorICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGN5Y2xlLT5vbGRfY3ljbGUtPmNvbm5lY3Rpb25zW2ZkXS5mZCA9IChuZ3hfc29ja2V0X3QpIC0xOworICAgICAgICAgICAgICAgIG9sZC0+ZmQgPSAobmd4X3NvY2tldF90KSAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC01NzIsOSArNjM1LDExIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgbHNbaV0ubG9nLmhhbmRsZXIgPSBuZ3hfYWNjZXB0ZXhfbG9nX2Vycm9yOworCiAgICAgICAgICAgICBpb2NwY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfaW9jcF9tb2R1bGUpOwotICAgICAgICAgICAgaWYgKG5neF9ldmVudF9wb3N0X2FjY2VwdGV4KCZzW2ldLCBpb2NwY2YtPnBvc3RfYWNjZXB0ZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICBpZiAobmd4X2V2ZW50X3Bvc3RfYWNjZXB0ZXgoJmxzW2ldLCBpb2NwY2YtPnBvc3RfYWNjZXB0ZXgpCisgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CkBAIC02MDcsNiArNjcyLDcgQEAKICAgICAgICAgfQogCiAjZW5kaWYKKwogICAgIH0KIAogICAgIHJldHVybiBOR1hfT0s7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKaW5kZXggM2U5M2JmNy4uZWVlMTY1ZSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuaApAQCAtMjE4LDYzICsyMTgsNjkgQEAKIAogCiAvKgotICogVGhlIGV2ZW50IGZpbHRlciByZXF1aXJlcyB0byByZWFkL3dyaXRlIHRoZSB3aG9sZSBkYXRhIC0KKyAqIFRoZSBldmVudCBmaWx0ZXIgcmVxdWlyZXMgdG8gcmVhZC93cml0ZSB0aGUgd2hvbGUgZGF0YToKICAqIHNlbGVjdCwgcG9sbCwgL2Rldi9wb2xsLCBrcXVldWUsIGVwb2xsLgogICovCiAjZGVmaW5lIE5HWF9VU0VfTEVWRUxfRVZFTlQgICAgICAweDAwMDAwMDAxCiAKIC8qCiAgKiBUaGUgZXZlbnQgZmlsdGVyIGlzIGRlbGV0ZWQgYWZ0ZXIgYSBub3RpZmljYXRpb24gd2l0aG91dCBhbiBhZGRpdGlvbmFsCi0gKiBzeXNjYWxsIC0gc2VsZWN0LCBwb2xsLCBrcXVldWUsIGVwb2xsLCBTb2xhcmlzIDEwJ3MgZXZlbnQgcG9ydHMuCisgKiBzeXNjYWxsOiBzZWxlY3QsIHBvbGwsIGtxdWV1ZSwgZXBvbGwsIFNvbGFyaXMgMTAncyBldmVudCBwb3J0cy4KICAqLwogI2RlZmluZSBOR1hfVVNFX09ORVNIT1RfRVZFTlQgICAgMHgwMDAwMDAwMgogCiAvKgotICogVGhlIGV2ZW50IGZpbHRlciBub3RpZmllcyBvbmx5IHRoZSBjaGFuZ2VzIGFuZCBhbiBpbml0aWFsIGxldmVsIC0KKyAqIFRoZSBldmVudCBmaWx0ZXIgbm90aWZpZXMgb25seSB0aGUgY2hhbmdlcyBhbmQgYW4gaW5pdGlhbCBsZXZlbDoKICAqIGtxdWV1ZSwgZXBvbGwuCiAgKi8KICNkZWZpbmUgTkdYX1VTRV9DTEVBUl9FVkVOVCAgICAgIDB4MDAwMDAwMDQKIAogLyoKLSAqIFRoZSBldmVudCBmaWx0ZXIgaGFzIGtxdWV1ZSBmZWF0dXJlcyAtIHRoZSBlb2YgZmxhZywgZXJybm8sCisgKiBUaGUgZXZlbnQgZmlsdGVyIGhhcyBrcXVldWUgZmVhdHVyZXM6IHRoZSBlb2YgZmxhZywgZXJybm8sCiAgKiBhdmFpbGFibGUgZGF0YSwgZXRjLgogICovCi0jZGVmaW5lIE5HWF9VU0VfS1FVRVVFX0VWRU5UICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTkdYX1VTRV9LUVVFVUVfRVZFTlQgICAgIDB4MDAwMDAwMDgKIAogLyoKLSAqIFRoZSBldmVudCBmaWx0ZXIgc3VwcG9ydHMgbG93IHdhdGVyIG1hcmsgLSBrcXVldWUncyBOT1RFX0xPV0FULgorICogVGhlIGV2ZW50IGZpbHRlciBzdXBwb3J0cyBsb3cgd2F0ZXIgbWFyazoga3F1ZXVlJ3MgTk9URV9MT1dBVC4KICAqIGtxdWV1ZSBpbiBGcmVlQlNEIDQuMS00LjIgaGFzIG5vIE5PVEVfTE9XQVQgc28gd2UgbmVlZCBhIHNlcGFyYXRlIGZsYWcuCiAgKi8KLSNkZWZpbmUgTkdYX1VTRV9MT1dBVF9FVkVOVCAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBOR1hfVVNFX0xPV0FUX0VWRU5UICAgICAgMHgwMDAwMDAxMAogCiAvKgotICogVGhlIGV2ZW50IGZpbHRlciByZXF1aXJlcyB0byBkbyBpL28gb3BlcmF0aW9uIHVudGlsIEVBR0FJTiAtCisgKiBUaGUgZXZlbnQgZmlsdGVyIHJlcXVpcmVzIHRvIGRvIGkvbyBvcGVyYXRpb24gdW50aWwgRUFHQUlOOgogICogZXBvbGwsIHJ0IHNpZ25hbHMuCiAgKi8KLSNkZWZpbmUgTkdYX1VTRV9HUkVFRFlfRVZFTlQgICAgMHgwMDAwMDAyMAorI2RlZmluZSBOR1hfVVNFX0dSRUVEWV9FVkVOVCAgICAgMHgwMDAwMDAyMAogCiAvKgotICogVGhlIGV2ZW50IGZpbHRlciBpcyBlcG9sbCwKKyAqIFRoZSBldmVudCBmaWx0ZXIgaXMgZXBvbGwuCiAgKi8KICNkZWZpbmUgTkdYX1VTRV9FUE9MTF9FVkVOVCAgICAgIDB4MDAwMDAwNDAKIAogLyoKLSAqIE5vIG5lZWQgdG8gYWRkIG9yIGRlbGV0ZSB0aGUgZXZlbnQgZmlsdGVycyAtIHJ0IHNpZ25hbHMuCisgKiBObyBuZWVkIHRvIGFkZCBvciBkZWxldGUgdGhlIGV2ZW50IGZpbHRlcnM6IHJ0IHNpZ25hbHMuCiAgKi8KICNkZWZpbmUgTkdYX1VTRV9SVFNJR19FVkVOVCAgICAgIDB4MDAwMDAwODAKIAogLyoKLSAqIE5vIG5lZWQgdG8gYWRkIG9yIGRlbGV0ZSB0aGUgZXZlbnQgZmlsdGVycyAtIG92ZXJsYXBwZWQsIGFpb19yZWFkLAorICogTm8gbmVlZCB0byBhZGQgb3IgZGVsZXRlIHRoZSBldmVudCBmaWx0ZXJzOiBvdmVybGFwcGVkLCBhaW9fcmVhZCwKICAqIGFpb3JlYWQsIGlvX3N1Ym1pdC4KICAqLwogI2RlZmluZSBOR1hfVVNFX0FJT19FVkVOVCAgICAgICAgMHgwMDAwMDEwMAogCiAvKgotICogTmVlZCB0byBhZGQgc29ja2V0IG9yIGhhbmRsZSBvbmx5IG9uY2UgLSBpL28gY29tcGxldGlvbiBwb3J0LgorICogTmVlZCB0byBhZGQgc29ja2V0IG9yIGhhbmRsZSBvbmx5IG9uY2U6IGkvbyBjb21wbGV0aW9uIHBvcnQuCiAgKiBJdCBhbHNvIHJlcXVpcmVzIE5HWF9IQVZFX0FJTyBhbmQgTkdYX1VTRV9BSU9fRVZFTlQgdG8gYmUgc2V0LgogICovCiAjZGVmaW5lIE5HWF9VU0VfSU9DUF9FVkVOVCAgICAgICAweDAwMDAwMjAwCiAKKy8qCisgKiBUaGUgZXZlbnQgZmlsdGVyIGhhcyBubyBvcGFxdWUgZGF0YSBhbmQgcmVxdWlyZXMgZmlsZSBkZXNjcmlwdG9ycyB0YWJsZToKKyAqIHBvbGwsIC9kZXYvcG9sbCwgcnQgc2lnbmFscy4KKyAqLworI2RlZmluZSBOR1hfVVNFX0ZEX0VWRU5UICAgICAgICAgMHgwMDAwMDQwMAorCiAKIAogLyoKQEAgLTM5MSwxMyArMzk3LDE0IEBACiAjZGVmaW5lIG5neF9kZWxfdGltZXIgICAgICAgIG5neF9ldmVudF9kZWxfdGltZXIKIAogCitleHRlcm4gbmd4X29zX2lvX3QgIG5neF9pbzsKKwogI2RlZmluZSBuZ3hfcmVjdiAgICAgICAgICAgICBuZ3hfaW8ucmVjdgogI2RlZmluZSBuZ3hfcmVjdl9jaGFpbiAgICAgICBuZ3hfaW8ucmVjdl9jaGFpbgogI2RlZmluZSBuZ3hfc2VuZCAgICAgICAgICAgICBuZ3hfaW8uc2VuZAogI2RlZmluZSBuZ3hfc2VuZF9jaGFpbiAgICAgICBuZ3hfaW8uc2VuZF9jaGFpbgogCiAKLQogI2RlZmluZSBOR1hfRVZFTlRfTU9EVUxFICAgICAgMHg1NDRFNTY0NSAgLyogIkVWTlQiICovCiAjZGVmaW5lIE5HWF9FVkVOVF9DT05GICAgICAgICAweDAyMDAwMDAwCiAKQEAgLTQ3MSw2ICs0NzgsNyBAQAogbmd4X2ludF90IG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChuZ3hfY3ljbGVfdCAqY3ljbGUpOwogbmd4X2ludF90IG5neF9kaXNhYmxlX2FjY2VwdF9ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIG5neF9pbnRfdCBuZ3hfZW5hYmxlX2FjY2VwdF9ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3VfY2hhciAqbmd4X2FjY2VwdF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIAogCiBuZ3hfaW50X3Qgbmd4X2hhbmRsZV9yZWFkX2V2ZW50KG5neF9ldmVudF90ICpyZXYsIHVfaW50IGZsYWdzKTsKQEAgLTQ3OSw3ICs0ODcsOCBAQAogCiAjaWYgKE5HWF9XSU4zMikKIHZvaWQgbmd4X2V2ZW50X2FjY2VwdGV4KG5neF9ldmVudF90ICpldik7Ci1pbnQgbmd4X2V2ZW50X3Bvc3RfYWNjZXB0ZXgobmd4X2xpc3RlbmluZ190ICpscywgaW50IG4pOworbmd4X2ludF90IG5neF9ldmVudF9wb3N0X2FjY2VwdGV4KG5neF9saXN0ZW5pbmdfdCAqbHMsIG5neF91aW50X3Qgbik7Cit1X2NoYXIgKm5neF9hY2NlcHRleF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCmluZGV4IDZkOWY2NmUuLjRkZjlkYzYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwpAQCAtOSwyNiArOSwyNiBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKLXN0YXRpYyB2b2lkIG5neF9jbG9zZV9hY2NlcHRlZF9zb2NrZXQobmd4X3NvY2tldF90IHMsIG5neF9sb2dfdCAqbG9nKTsKLXN0YXRpYyB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CisvKiB0aGUgYnVmZmVyIHNpemUgaXMgZW5vdWdoIHRvIGhvbGQgInN0cnVjdCBzb2NrYWRkcl91biIgKi8KKyNkZWZpbmUgTkdYX1NPQ0tMRU4gIDUxMgorCisKK3N0YXRpYyB2b2lkIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpOwogCiAKIHZvaWQKIG5neF9ldmVudF9hY2NlcHQobmd4X2V2ZW50X3QgKmV2KQogewotICAgIG5neF91aW50X3QgICAgICAgICBpbnN0YW5jZTsKLSNpZiAwCi0gICAgbmd4X3VpbnRfdCAgICAgICAgIGFjY2VwdGVkOwotI2VuZGlmCi0gICAgc29ja2xlbl90ICAgICAgICAgIGxlbjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgICAqc2E7CisgICAgc29ja2xlbl90ICAgICAgICAgIHNsOwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CiAgICAgbmd4X2xvZ190ICAgICAgICAgKmxvZzsKLSAgICBuZ3hfcG9vbF90ICAgICAgICAqcG9vbDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaW5zdGFuY2U7CiAgICAgbmd4X3NvY2tldF90ICAgICAgIHM7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgKnJldiwgKndldjsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAqYywgKmxzOworICAgIG5neF9saXN0ZW5pbmdfdCAgICpsczsKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAqYywgKmxjOwogICAgIG5neF9ldmVudF9jb25mX3QgICplY2Y7CisgICAgY2hhciAgICAgICAgICAgICAgIHNhW05HWF9TT0NLTEVOXTsKIAogICAgIGVjZiA9IG5neF9ldmVudF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LCBuZ3hfZXZlbnRfY29yZV9tb2R1bGUpOwogCkBAIC0zOSw3NyArMzksMjggQEAKICAgICAgICAgZXYtPmF2YWlsYWJsZSA9IGVjZi0+bXVsdGlfYWNjZXB0OwogICAgIH0KIAotICAgIGxzID0gZXYtPmRhdGE7CisgICAgbGMgPSBldi0+ZGF0YTsKKyAgICBscyA9IGxjLT5saXN0ZW5pbmc7CisgICAgZXYtPnJlYWR5ID0gMDsKIAogICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImFjY2VwdCBvbiAlViwgcmVhZHk6ICVkIiwKLSAgICAgICAgICAgICAgICAgICAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LCBldi0+YXZhaWxhYmxlKTsKLQotICAgIGV2LT5yZWFkeSA9IDA7Ci0gICAgcG9vbCA9IE5VTEw7Ci0jaWYgMAotICAgIGFjY2VwdGVkID0gMDsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICJhY2NlcHQgb24gJVYsIHJlYWR5OiAlZCIsICZscy0+YWRkcl90ZXh0LCBldi0+YXZhaWxhYmxlKTsKIAogICAgIGRvIHsKKyAgICAgICAgc2wgPSBOR1hfU09DS0xFTjsKIAotICAgICAgICBpZiAocG9vbCA9PSBOVUxMKSB7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDcmVhdGUgdGhlIHBvb2wgYmVmb3JlIGFjY2VwdCgpIHRvIGF2b2lkIHRoZSBjb3B5aW5nIG9mCi0gICAgICAgICAgICAgKiB0aGUgc29ja2FkZHIuICBBbHRob3VnaCBhY2NlcHQoKSBjYW4gZmFpbCBpdCBpcyB1bmNvbW1vbgotICAgICAgICAgICAgICogY2FzZSBhbmQgYmVzaWRlcyB0aGUgcG9vbCBjYW4gYmUgZ290IGZyb20gdGhlIGZyZWUgcG9vbCBsaXN0LgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIHBvb2wgPSBuZ3hfY3JlYXRlX3Bvb2wobHMtPmxpc3RlbmluZy0+cG9vbF9zaXplLCBldi0+bG9nKTsKLSAgICAgICAgICAgIGlmIChwb29sID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzYSA9IG5neF9wYWxsb2MocG9vbCwgbHMtPmxpc3RlbmluZy0+c29ja2xlbik7Ci0gICAgICAgIGlmIChzYSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9nID0gbmd4X3BhbGxvYyhwb29sLCBzaXplb2Yobmd4X2xvZ190KSk7Ci0gICAgICAgIGlmIChsb2cgPT0gTlVMTCkgewotICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9tZW1jcHkobG9nLCBscy0+bG9nLCBzaXplb2Yobmd4X2xvZ190KSk7Ci0gICAgICAgIHBvb2wtPmxvZyA9IGxvZzsKLQotICAgICAgICBsb2ctPmRhdGEgPSAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0OwotICAgICAgICBsb2ctPmhhbmRsZXIgPSBuZ3hfYWNjZXB0X2xvZ19lcnJvcjsKLQotICAgICAgICBsZW4gPSBscy0+bGlzdGVuaW5nLT5zb2NrbGVuOwotCi0gICAgICAgIHMgPSBhY2NlcHQobHMtPmZkLCBzYSwgJmxlbik7CisgICAgICAgIHMgPSBhY2NlcHQobGMtPmZkLCAoc3RydWN0IHNvY2thZGRyICopIHNhLCAmc2wpOwogCiAgICAgICAgIGlmIChzID09IC0xKSB7CiAgICAgICAgICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOwogCiAgICAgICAgICAgICBpZiAoZXJyID09IE5HWF9FQUdBSU4pIHsKLSNpZiAwCi0gICAgICAgICAgICAgICAgaWYgKCEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9SVFNJR19FVkVOVCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBsb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRUFHQUlOIGFmdGVyICVkIGFjY2VwdGVkIGNvbm5lY3Rpb24ocykiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkKTsKLSAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VDT05OQUJPUlRFRCkgPyBOR1hfTE9HX0NSSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfTE9HX0FMRVJULAotICAgICAgICAgICAgICAgICAgICAgICAgICBldi0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSBvbiAlViBmYWlsZWQiLCAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXYtPmxvZywgZXJyLCAiYWNjZXB0KCkgZmFpbGVkIik7CiAKICAgICAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VDT05OQUJPUlRFRCkgewogICAgICAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewpAQCAtMTE3LDEyICs2OCwxMCBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChldi0+YXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIHJldXNlIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBwb29sICovCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMzEsMzQgKzgwLDU4IEBACiAgICAgICAgIG5neF9hdG9taWNfaW5jKG5neF9zdGF0X2FjdGl2ZSk7CiAjZW5kaWYKIAotICAgICAgICBuZ3hfYWNjZXB0X2Rpc2FibGVkID0gKG5neF91aW50X3QpIHMgKyBOR1hfQUNDRVBUX1RIUkVTSE9MRAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBlY2YtPmNvbm5lY3Rpb25zOworICAgICAgICBuZ3hfYWNjZXB0X2Rpc2FibGVkID0gTkdYX0FDQ0VQVF9USFJFU0hPTEQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gbmd4X2N5Y2xlLT5mcmVlX2Nvbm5lY3Rpb25fbjsKIAotICAgICAgICAvKiBkaXNhYmxlIHdhcm5pbmc6IFdpbjMyIFNPQ0tFVCBpcyB1X2ludCB3aGlsZSBVTklYIHNvY2tldCBpcyBpbnQgKi8KKyAgICAgICAgYyA9IG5neF9nZXRfY29ubmVjdGlvbihzLCBldi0+bG9nKTsKIAotICAgICAgICBpZiAoKG5neF91aW50X3QpIHMgPj0gZWNmLT5jb25uZWN0aW9ucykgeworICAgICAgICBpZiAoYyA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZXYtPmxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiIGZhaWxlZCIpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGV2LT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQoKSBvbiAlViByZXR1cm5lZCBzb2NrZXQgIyVkIHdoaWxlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgJWQgY29ubmVjdGlvbnMgd2FzIGNvbmZpZ3VyZWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImNsb3NpbmcgdGhlIGNvbm5lY3Rpb24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbHMtPmxpc3RlbmluZy0+YWRkcl90ZXh0LCBzLCBlY2YtPmNvbm5lY3Rpb25zKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KHMsIGxvZyk7Ci0gICAgICAgICAgICBuZ3hfZGVzdHJveV9wb29sKHBvb2wpOworICAgICAgICByZXYgPSBjLT5yZWFkOworICAgICAgICB3ZXYgPSBjLT53cml0ZTsKKworICAgICAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOworCisgICAgICAgIGMtPnJlYWQgPSByZXY7CisgICAgICAgIGMtPndyaXRlID0gd2V2OworICAgICAgICBjLT5mZCA9IHM7CisgICAgICAgIGMtPmxvZyA9IGV2LT5sb2c7CisKKyAgICAgICAgYy0+cG9vbCA9IG5neF9jcmVhdGVfcG9vbChscy0+cG9vbF9zaXplLCBldi0+bG9nKTsKKyAgICAgICAgaWYgKGMtPnBvb2wgPT0gTlVMTCkgeworICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjLT5zb2NrYWRkciA9IG5neF9wYWxsb2MoYy0+cG9vbCwgc2wpOworICAgICAgICBpZiAoYy0+c29ja2FkZHIgPT0gTlVMTCkgeworICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbWVtY3B5KGMtPnNvY2thZGRyLCBzYSwgc2wpOworCisgICAgICAgIGxvZyA9IG5neF9wYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9sb2dfdCkpOworICAgICAgICBpZiAobG9nID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgLyogc2V0IGEgYmxvY2tpbmcgbW9kZSBmb3IgYWlvIGFuZCBub24tYmxvY2tpbmcgbW9kZSBmb3Igb3RoZXJzICovCiAKICAgICAgICAgaWYgKG5neF9pbmhlcml0ZWRfbm9uYmxvY2tpbmcpIHsKLSAgICAgICAgICAgIGlmICgobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpKSB7CisgICAgICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9BSU9fRVZFTlQpIHsKICAgICAgICAgICAgICAgICBpZiAobmd4X2Jsb2NraW5nKHMpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGV2LT5sb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Jsb2NraW5nX24gIiBmYWlsZWQiKTsKLQotICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KHMsIGxvZyk7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTY2LDYxICsxMzksMzUgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICghKG5neF9ldmVudF9mbGFncyAmIChOR1hfVVNFX0FJT19FVkVOVHxOR1hfVVNFX1JUU0lHX0VWRU5UKSkpIHsKICAgICAgICAgICAgICAgICBpZiAobmd4X25vbmJsb2NraW5nKHMpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGV2LT5sb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X25vbmJsb2NraW5nX24gIiBmYWlsZWQiKTsKLQotICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KHMsIGxvZyk7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSNpZiAoTkdYX1dJTjMyKQotICAgICAgICAvKgotICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAotICAgICAgICAgKiBzbyB0byBmaW5kIGEgY29ubmVjdGlvbiB3ZSBkaXZpZGUgYSBzb2NrZXQgbnVtYmVyIGJ5IDQuCi0gICAgICAgICAqLworICAgICAgICAqbG9nID0gbHMtPmxvZzsKIAotICAgICAgICBpZiAocyAlIDQpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCgpIG9uICVWIHJldHVybmVkIHNvY2tldCAjJWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBkaXZpc2libGUgYnkgNCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZscy0+bGlzdGVuaW5nLT5hZGRyX3RleHQsIHMpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQorICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CisgICAgICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zZW5kX2NoYWluOwogCi0gICAgICAgIGMgPSAmbmd4X2N5Y2xlLT5jb25uZWN0aW9uc1tzIC8gNF07Ci0gICAgICAgIHJldiA9ICZuZ3hfY3ljbGUtPnJlYWRfZXZlbnRzW3MgLyA0XTsKLSAgICAgICAgd2V2ID0gJm5neF9jeWNsZS0+d3JpdGVfZXZlbnRzW3MgLyA0XTsKLSNlbHNlCi0gICAgICAgIGMgPSAmbmd4X2N5Y2xlLT5jb25uZWN0aW9uc1tzXTsKLSAgICAgICAgcmV2ID0gJm5neF9jeWNsZS0+cmVhZF9ldmVudHNbc107Ci0gICAgICAgIHdldiA9ICZuZ3hfY3ljbGUtPndyaXRlX2V2ZW50c1tzXTsKLSNlbmRpZgorICAgICAgICBjLT5sb2cgPSBsb2c7CisgICAgICAgIGMtPnBvb2wtPmxvZyA9IGxvZzsKKworICAgICAgICBjLT5saXN0ZW5pbmcgPSBsczsKKyAgICAgICAgYy0+c29ja2xlbiA9IHNsOworCisgICAgICAgIGMtPnVuZXhwZWN0ZWRfZW9mID0gMTsKKworICAgICAgICBjLT5jdHggPSBsYy0+Y3R4OworICAgICAgICBjLT5zZXJ2ZXJzID0gbGMtPnNlcnZlcnM7CiAKICAgICAgICAgaW5zdGFuY2UgPSByZXYtPmluc3RhbmNlOwogCi0jaWYgKE5HWF9USFJFQURTKQotCi0gICAgICAgIGlmICgqKCZjLT5sb2NrKSkgewotICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgZXYtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGlubG9jayBpbiBhY2NlcHQsIGZkOiVkIiwgcyk7Ci0gICAgICAgICAgICBuZ3hfc3BpbmxvY2soJmMtPmxvY2ssIDEwMDApOwotICAgICAgICAgICAgbmd4X3VubG9jaygmYy0+bG9jayk7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KICAgICAgICAgbmd4X21lbXplcm8ocmV2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKICAgICAgICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKLSAgICAgICAgbmd4X21lbXplcm8oYywgc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QpKTsKLQotICAgICAgICBjLT5wb29sID0gcG9vbDsKLQotICAgICAgICBjLT5saXN0ZW5pbmcgPSBscy0+bGlzdGVuaW5nOwotICAgICAgICBjLT5zb2NrYWRkciA9IHNhOwotICAgICAgICBjLT5zb2NrbGVuID0gbGVuOwogCiAgICAgICAgIHJldi0+aW5zdGFuY2UgPSAhaW5zdGFuY2U7CiAgICAgICAgIHdldi0+aW5zdGFuY2UgPSAhaW5zdGFuY2U7CkBAIC0yMzEsMTIgKzE3OCw2IEBACiAgICAgICAgIHJldi0+ZGF0YSA9IGM7CiAgICAgICAgIHdldi0+ZGF0YSA9IGM7CiAKLSAgICAgICAgYy0+cmVhZCA9IHJldjsKLSAgICAgICAgYy0+d3JpdGUgPSB3ZXY7Ci0KLSAgICAgICAgYy0+ZmQgPSBzOwotICAgICAgICBjLT51bmV4cGVjdGVkX2VvZiA9IDE7Ci0KICAgICAgICAgd2V2LT53cml0ZSA9IDE7CiAgICAgICAgIHdldi0+cmVhZHkgPSAxOwogCkBAIC0yNTIsMTQgKzE5Myw2IEBACiAjZW5kaWYKICAgICAgICAgfQogCi0gICAgICAgIGMtPmN0eCA9IGxzLT5jdHg7Ci0gICAgICAgIGMtPnNlcnZlcnMgPSBscy0+c2VydmVyczsKLQotICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7Ci0gICAgICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKLSAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zZW5kX2NoYWluOwotCi0gICAgICAgIGMtPmxvZyA9IGxvZzsKICAgICAgICAgcmV2LT5sb2cgPSBsb2c7CiAgICAgICAgIHdldi0+bG9nID0gbG9nOwogCkBAIC0yODUsMjQgKzIxOCwyMSBAQAogICAgICAgICB3ZXYtPm93bl9sb2NrID0gJmMtPmxvY2s7CiAjZW5kaWYKIAotICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBldi0+bG9nLCAwLAorICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQ6IGZkOiVkIGM6JWQiLCBzLCBjLT5udW1iZXIpOwogCi0gICAgICAgIGlmIChjLT5saXN0ZW5pbmctPmFkZHJfbnRvcCkgewotICAgICAgICAgICAgYy0+YWRkcl90ZXh0LmRhdGEgPSBuZ3hfcGFsbG9jKGMtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+bGlzdGVuaW5nLT5hZGRyX3RleHRfbWF4X2xlbik7CisgICAgICAgIGlmIChscy0+YWRkcl9udG9wKSB7CisgICAgICAgICAgICBjLT5hZGRyX3RleHQuZGF0YSA9IG5neF9wYWxsb2MoYy0+cG9vbCwgbHMtPmFkZHJfdGV4dF9tYXhfbGVuKTsKICAgICAgICAgICAgIGlmIChjLT5hZGRyX3RleHQuZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX3NvY2tldChzLCBsb2cpOwotICAgICAgICAgICAgICAgIG5neF9kZXN0cm95X3Bvb2wocG9vbCk7CisgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgIAotICAgICAgICAgICAgYy0+YWRkcl90ZXh0LmxlbiA9IG5neF9zb2NrX250b3AoYy0+bGlzdGVuaW5nLT5mYW1pbHksIGMtPnNvY2thZGRyLAorICAgICAgICAgICAgYy0+YWRkcl90ZXh0LmxlbiA9IG5neF9zb2NrX250b3AobHMtPmZhbWlseSwgYy0+c29ja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5hZGRyX3RleHQuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmxpc3RlbmluZy0+YWRkcl90ZXh0X21heF9sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMtPmFkZHJfdGV4dF9tYXhfbGVuKTsKICAgICAgICAgICAgIGlmIChjLT5hZGRyX3RleHQubGVuID09IDApIHsKLSAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KHMsIGxvZyk7Ci0gICAgICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKKyAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyOCwyNyArMjU4LDIwIEBACiAKICAgICAgICAgaWYgKG5neF9hZGRfY29ubiAmJiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9FUE9MTF9FVkVOVCkgPT0gMCkgewogICAgICAgICAgICAgaWYgKG5neF9hZGRfY29ubihjKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KHMsIGxvZyk7Ci0gICAgICAgICAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChwb29sKTsKKyAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfYWNjZXB0ZWRfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBwb29sID0gTlVMTDsKLQogICAgICAgICBsb2ctPmRhdGEgPSBOVUxMOwogICAgICAgICBsb2ctPmhhbmRsZXIgPSBOVUxMOwogCi0gICAgICAgIGxzLT5saXN0ZW5pbmctPmhhbmRsZXIoYyk7CisgICAgICAgIGxzLT5oYW5kbGVyKGMpOwogCiAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0tRVUVVRV9FVkVOVCkgewogICAgICAgICAgICAgZXYtPmF2YWlsYWJsZS0tOwogICAgICAgICB9CiAKLSNpZiAwCi0gICAgICAgIGFjY2VwdGVkKys7Ci0jZW5kaWYKLQogICAgIH0gd2hpbGUgKGV2LT5hdmFpbGFibGUpOwogfQogCkBAIC0zODksMjcgKzMxMiwyMiBAQAogbmd4X2ludF90CiBuZ3hfZW5hYmxlX2FjY2VwdF9ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewotICAgIG5neF91aW50X3QgICAgICAgIGk7Ci0gICAgbmd4X2xpc3RlbmluZ190ICAqczsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaTsKKyAgICBuZ3hfbGlzdGVuaW5nX3QgICAqbHM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAKLSAgICBzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOworICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKIAotICAgICAgICAvKgotICAgICAgICAgKiB3ZSBkbyBub3QgbmVlZCB0byBoYW5kbGUgdGhlIFdpbnNvY2sgc29ja2V0cyBoZXJlIChkaXZpZGUgYSBzb2NrZXQKLSAgICAgICAgICogbnVtYmVyIGJ5IDQpIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiB3b3VsZCBuZXZlciBjYWxsZWQKLSAgICAgICAgICogaW4gdGhlIFdpbnNvY2sgZW52aXJvbm1lbnQKLSAgICAgICAgICovCisgICAgICAgIGMgPSBsc1tpXS5jb25uZWN0aW9uOwogCiAgICAgICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX1JUU0lHX0VWRU5UKSB7Ci0gICAgICAgICAgICBpZiAobmd4X2FkZF9jb25uKCZjeWNsZS0+Y29ubmVjdGlvbnNbc1tpXS5mZF0pID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgaWYgKG5neF9hZGRfY29ubihjKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmd4X2FkZF9ldmVudCgmY3ljbGUtPnJlYWRfZXZlbnRzW3NbaV0uZmRdLCBOR1hfUkVBRF9FVkVOVCwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZ3hfYWRkX2V2ZW50KGMtPnJlYWQsIE5HWF9SRUFEX0VWRU5ULCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00MjIsMzYgKzM0MCwyNyBAQAogbmd4X2ludF90CiBuZ3hfZGlzYWJsZV9hY2NlcHRfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBuZ3hfdWludF90ICAgICAgICBpOwotICAgIG5neF9saXN0ZW5pbmdfdCAgKnM7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CisgICAgbmd4X2xpc3RlbmluZ190ICAgKmxzOworICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCi0gICAgcyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKKyAgICBscyA9IGN5Y2xlLT5saXN0ZW5pbmcuZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmxpc3RlbmluZy5uZWx0czsgaSsrKSB7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UgZG8gbm90IG5lZWQgdG8gaGFuZGxlIHRoZSBXaW5zb2NrIHNvY2tldHMgaGVyZSAoZGl2aWRlIGEgc29ja2V0Ci0gICAgICAgICAqIG51bWJlciBieSA0KSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gd291bGQgbmV2ZXIgY2FsbGVkCi0gICAgICAgICAqIGluIHRoZSBXaW5zb2NrIGVudmlyb25tZW50Ci0gICAgICAgICAqLworICAgICAgICBjID0gbHNbaV0uY29ubmVjdGlvbjsKKworICAgICAgICBpZiAoIWMtPnJlYWQtPmFjdGl2ZSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KIAogICAgICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9SVFNJR19FVkVOVCkgewotICAgICAgICAgICAgaWYgKCFjeWNsZS0+Y29ubmVjdGlvbnNbc1tpXS5mZF0ucmVhZC0+YWN0aXZlKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChuZ3hfZGVsX2Nvbm4oJmN5Y2xlLT5jb25uZWN0aW9uc1tzW2ldLmZkXSwgTkdYX0RJU0FCTEVfRVZFTlQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCi0gICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAobmd4X2RlbF9jb25uKGMsIE5HWF9ESVNBQkxFX0VWRU5UKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWN5Y2xlLT5yZWFkX2V2ZW50c1tzW2ldLmZkXS5hY3RpdmUpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQoJmN5Y2xlLT5yZWFkX2V2ZW50c1tzW2ldLmZkXSwgTkdYX1JFQURfRVZFTlQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9ESVNBQkxFX0VWRU5UKSA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudChjLT5yZWFkLCBOR1hfUkVBRF9FVkVOVCwgTkdYX0RJU0FCTEVfRVZFTlQpCisgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CkBAIC00NjMsMjEgKzM3MiwzMyBAQAogCiAKIHN0YXRpYyB2b2lkCi1uZ3hfY2xvc2VfYWNjZXB0ZWRfc29ja2V0KG5neF9zb2NrZXRfdCBzLCBuZ3hfbG9nX3QgKmxvZykKK25neF9jbG9zZV9hY2NlcHRlZF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpCiB7Ci0gICAgaWYgKG5neF9jbG9zZV9zb2NrZXQocykgPT0gLTEpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgbmd4X3NvY2tldF90ICBmZDsKKworICAgIG5neF9mcmVlX2Nvbm5lY3Rpb24oYyk7CisKKyAgICBmZCA9IGMtPmZkOworICAgIGMtPmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CisKKyAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChmZCkgPT0gLTEpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgZmFpbGVkIik7CiAgICAgfQogCisgICAgaWYgKGMtPnBvb2wpIHsKKyAgICAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjLT5wb29sKTsKKyAgICB9CisKICNpZiAoTkdYX1NUQVRfU1RVQikKICAgICBuZ3hfYXRvbWljX2RlYyhuZ3hfc3RhdF9hY3RpdmUpOwogI2VuZGlmCiB9CiAKIAotc3RhdGljIHVfY2hhciAqCit1X2NoYXIgKgogbmd4X2FjY2VwdF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewotICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0KCkgb24gJVYiLCBsb2ctPmRhdGEpOworICAgIHJldHVybiBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIgd2hpbGUgYWNjZXB0aW5nIG5ldyBjb25uZWN0aW9uIG9uICVWIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy0+ZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKaW5kZXggYmMyNDQzZC4uOTYxOTcxNCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYwpAQCAtOSwxMiArOSwxOCBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKLXZvaWQgbmd4X2V2ZW50X2FjY2VwdGV4KG5neF9ldmVudF90ICpyZXYpCitzdGF0aWMgdm9pZCBuZ3hfY2xvc2VfcG9zdGVkX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CisKKwordm9pZAorbmd4X2V2ZW50X2FjY2VwdGV4KG5neF9ldmVudF90ICpyZXYpCiB7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAKICAgICBjID0gcmV2LT5kYXRhOwogCisgICAgYy0+bG9nLT5oYW5kbGVyID0gbmd4X2FjY2VwdF9sb2dfZXJyb3I7CisKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJBY2NlcHRFeDogJWQiLCBjLT5mZCk7CiAKICAgICBpZiAocmV2LT5vdmxwLmVycm9yKSB7CkBAIC03OCwxMSArODQsMTMgQEAKIH0KIAogCi1pbnQgbmd4X2V2ZW50X3Bvc3RfYWNjZXB0ZXgobmd4X2xpc3RlbmluZ190ICpscywgaW50IG4pCituZ3hfaW50X3QKK25neF9ldmVudF9wb3N0X2FjY2VwdGV4KG5neF9saXN0ZW5pbmdfdCAqbHMsIG5neF91aW50X3QgbikKIHsKICAgICB1X2xvbmcgICAgICAgICAgICAgcmN2ZDsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgaTsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgZXJyOworICAgIG5neF9sb2dfdCAgICAgICAgICpsb2c7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgKnJldiwgKndldjsKICAgICBuZ3hfc29ja2V0X3QgICAgICAgczsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKQEAgLTkzLDM5ICsxMDEsODIgQEAKIAogICAgICAgICBzID0gbmd4X3NvY2tldChscy0+ZmFtaWx5LCBscy0+dHlwZSwgMCk7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgbHMtPmxvZywgMCwKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgJmxzLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbiAiIHM6JWQiLCBzKTsKIAogICAgICAgICBpZiAocyA9PSAtMSkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBscy0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc29ja2V0X24gIiBmb3IgQWNjZXB0RXgoKSAlcyBwb3N0IGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5hZGRyX3RleHQuZGF0YSk7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsICZscy0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc29ja2V0X24gIiBmYWlsZWQiKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdpbnNvY2sgYXNzaWduZXMgYSBzb2NrZXQgbnVtYmVyIGRpdmlzaWJsZSBieSA0Ci0gICAgICAgICAqIHNvIHRvIGZpbmQgYSBjb25uZWN0aW9uIHdlIGRpdmlkZSBhIHNvY2tldCBudW1iZXIgYnkgNC4KLSAgICAgICAgICovCisgICAgICAgIGMgPSBuZ3hfZ2V0X2Nvbm5lY3Rpb24ocywgJmxzLT5sb2cpOwogCi0gICAgICAgIGlmIChzICUgNCkgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBscy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfc29ja2V0X24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjcmVhdGVkIHNvY2tldCAlZCwgbm90IGRpdmlzaWJsZSBieSA0Iiwgcyk7Ci0KLSAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIGlmIChjID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAotICAgICAgICBjID0gJm5neF9jeWNsZS0+Y29ubmVjdGlvbnNbcyAvIDRdOwotICAgICAgICByZXYgPSAmbmd4X2N5Y2xlLT5yZWFkX2V2ZW50c1tzIC8gNF07Ci0gICAgICAgIHdldiA9ICZuZ3hfY3ljbGUtPndyaXRlX2V2ZW50c1tzIC8gNF07CisgICAgICAgIHJldiA9IGMtPnJlYWQ7CisgICAgICAgIHdldiA9IGMtPndyaXRlOwogCiAgICAgICAgIG5neF9tZW16ZXJvKGMsIHNpemVvZihuZ3hfY29ubmVjdGlvbl90KSk7CisKKyAgICAgICAgYy0+cmVhZCA9IHJldjsKKyAgICAgICAgYy0+d3JpdGUgPSB3ZXY7CisgICAgICAgIGMtPmZkID0gczsKKyAgICAgICAgYy0+bG9nID0gJmxzLT5sb2c7CisKKyAgICAgICAgYy0+cG9vbCA9IG5neF9jcmVhdGVfcG9vbChscy0+cG9vbF9zaXplLCAmbHMtPmxvZyk7CisgICAgICAgIGlmIChjLT5wb29sID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5neF9jbG9zZV9wb3N0ZWRfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBsb2cgPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfbG9nX3QpKTsKKyAgICAgICAgaWYgKGxvZyA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZ3hfY2xvc2VfcG9zdGVkX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgYy0+YnVmZmVyID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLCBscy0+cG9zdF9hY2NlcHRfYnVmZmVyX3NpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDIgKiAobHMtPnNvY2tsZW4gKyAxNikpOworICAgICAgICBpZiAoYy0+YnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5neF9jbG9zZV9wb3N0ZWRfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjLT5sb2NhbF9zb2NrYWRkciA9IG5neF9wYWxsb2MoYy0+cG9vbCwgbHMtPnNvY2tsZW4pOworICAgICAgICBpZiAoYy0+bG9jYWxfc29ja2FkZHIgPT0gTlVMTCkgeworICAgICAgICAgICAgbmd4X2Nsb3NlX3Bvc3RlZF9jb25uZWN0aW9uKGMpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGMtPnNvY2thZGRyID0gbmd4X3BhbGxvYyhjLT5wb29sLCBscy0+c29ja2xlbik7CisgICAgICAgIGlmIChjLT5zb2NrYWRkciA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZ3hfY2xvc2VfcG9zdGVkX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgKmxvZyA9IGxzLT5sb2c7CisgICAgICAgIGMtPmxvZyA9IGxvZzsKKworICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CisgICAgICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zZW5kX2NoYWluOworCisgICAgICAgIGMtPnVuZXhwZWN0ZWRfZW9mID0gMTsKKworICAgICAgICBjLT5jdHggPSBscy0+Y3R4OworICAgICAgICBjLT5zZXJ2ZXJzID0gbHMtPnNlcnZlcnM7CisKKyAgICAgICAgYy0+bGlzdGVuaW5nID0gbHM7CisKICAgICAgICAgbmd4X21lbXplcm8ocmV2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKICAgICAgICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKIAotICAgICAgICBjLT5saXN0ZW5pbmcgPSBsczsKKyAgICAgICAgcmV2LT5kYXRhID0gYzsKKyAgICAgICAgd2V2LT5kYXRhID0gYzsKIAogICAgICAgICByZXYtPmluZGV4ID0gTkdYX0lOVkFMSURfSU5ERVg7CiAgICAgICAgIHdldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKQEAgLTEzNCw1OCArMTg1LDE1IEBACiAgICAgICAgIHdldi0+b3ZscC5ldmVudCA9IHdldjsKICAgICAgICAgcmV2LT5oYW5kbGVyID0gbmd4X2V2ZW50X2FjY2VwdGV4OwogCi0gICAgICAgIHJldi0+ZGF0YSA9IGM7Ci0gICAgICAgIHdldi0+ZGF0YSA9IGM7Ci0KLSAgICAgICAgYy0+cmVhZCA9IHJldjsKLSAgICAgICAgYy0+d3JpdGUgPSB3ZXY7Ci0KLSAgICAgICAgYy0+ZmQgPSBzOwotICAgICAgICBjLT51bmV4cGVjdGVkX2VvZiA9IDE7Ci0KICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CiAgICAgICAgIHdldi0+d3JpdGUgPSAxOwogICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKIAotICAgICAgICBjLT5jdHggPSBscy0+Y3R4OwotICAgICAgICBjLT5zZXJ2ZXJzID0gbHMtPnNlcnZlcnM7Ci0KLSAgICAgICAgYy0+cmVjdiA9IG5neF9yZWN2OwotICAgICAgICBjLT5zZW5kID0gbmd4X3NlbmQ7Ci0gICAgICAgIGMtPnNlbmRfY2hhaW4gPSBuZ3hfc2VuZF9jaGFpbjsKLQotICAgICAgICBjLT5wb29sID0gbmd4X2NyZWF0ZV9wb29sKGxzLT5wb29sX3NpemUsIGxzLT5sb2cpOwotICAgICAgICBpZiAoYy0+cG9vbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgYy0+YnVmZmVyID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5wb3N0X2FjY2VwdF9idWZmZXJfc2l6ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMiAqIChjLT5saXN0ZW5pbmctPnNvY2tsZW4gKyAxNikpOwotICAgICAgICBpZiAoYy0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBjLT5sb2NhbF9zb2NrYWRkciA9IG5neF9wYWxsb2MoYy0+cG9vbCwgbHMtPnNvY2tsZW4pOwotICAgICAgICBpZiAoYy0+bG9jYWxfc29ja2FkZHIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGMtPnNvY2thZGRyID0gbmd4X3BhbGxvYyhjLT5wb29sLCBscy0+c29ja2xlbik7Ci0gICAgICAgIGlmIChjLT5zb2NrYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgYy0+bG9nID0gbmd4X3BhbGxvYyhjLT5wb29sLCBzaXplb2Yobmd4X2xvZ190KSk7Ci0gICAgICAgIGlmIChjLT5sb2cgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9tZW1jcHkoYy0+bG9nLCBscy0+bG9nLCBzaXplb2Yobmd4X2xvZ190KSk7Ci0gICAgICAgIGMtPnJlYWQtPmxvZyA9IGMtPmxvZzsKLSAgICAgICAgYy0+d3JpdGUtPmxvZyA9IGMtPmxvZzsKKyAgICAgICAgcmV2LT5sb2cgPSBjLT5sb2c7CisgICAgICAgIHdldi0+bG9nID0gYy0+bG9nOwogCiAgICAgICAgIGlmIChuZ3hfYWRkX2V2ZW50KHJldiwgMCwgTkdYX0lPQ1BfSU8pID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2Nsb3NlX3Bvc3RlZF9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCkBAIC0xOTYsOSArMjA0LDEwIEBACiAKICAgICAgICAgICAgIGVyciA9IG5neF9zb2NrZXRfZXJybm87CiAgICAgICAgICAgICBpZiAoZXJyICE9IFdTQV9JT19QRU5ESU5HKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBscy0+bG9nLCBlcnIsCisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCAmbHMtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFjY2VwdEV4KCkgJXMgZmFsaWVkIiwgbHMtPmFkZHJfdGV4dC5kYXRhKTsKIAorICAgICAgICAgICAgICAgIG5neF9jbG9zZV9wb3N0ZWRfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yMDYsMyArMjE1LDMxIEBACiAKICAgICByZXR1cm4gTkdYX09LOwogfQorCisKK3N0YXRpYyB2b2lkCituZ3hfY2xvc2VfcG9zdGVkX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYykKK3sKKyAgICBuZ3hfc29ja2V0X3QgIGZkOworCisgICAgbmd4X2ZyZWVfY29ubmVjdGlvbihjKTsKKworICAgIGZkID0gYy0+ZmQ7CisgICAgYy0+ZmQgPSAobmd4X3NvY2tldF90KSAtMTsKKworICAgIGlmIChuZ3hfY2xvc2Vfc29ja2V0KGZkKSA9PSAtMSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiBmYWlsZWQiKTsKKyAgICB9CisKKyAgICBpZiAoYy0+cG9vbCkgeworICAgICAgICBuZ3hfZGVzdHJveV9wb29sKGMtPnBvb2wpOworICAgIH0KK30KKworCit1X2NoYXIgKgorbmd4X2FjY2VwdGV4X2xvZ19lcnJvcihuZ3hfbG9nX3QgKmxvZywgdV9jaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisgICAgcmV0dXJuIG5neF9zbnByaW50ZihidWYsIGxlbiwgIiB3aGlsZSBwb3N0aW5nIEFjY2VwdEV4KCkgb24gJVYiLCBsb2ctPmRhdGEpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCBiZTFkOTYzLi5jZGNiNGM0IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtMTAsMjIgKzEwLDE4IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50X2Nvbm5lY3QuaD4KIAogCi0jZGVmaW5lIE5HWF9SRVNPTFZFUl9CVUZTSVpFICA4MTkyCi0KLQogbmd4X2ludF90CiBuZ3hfZXZlbnRfY29ubmVjdF9wZWVyKG5neF9wZWVyX2Nvbm5lY3Rpb25fdCAqcGMpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgaW5zdGFuY2UsIGxldmVsOwotICAgIHVfaW50ICAgICAgICAgICAgICAgIGV2ZW50OwotICAgIHRpbWVfdCAgICAgICAgICAgICAgIG5vdzsKLSAgICBuZ3hfZXJyX3QgICAgICAgICAgICBlcnI7Ci0gICAgbmd4X3BlZXJfdCAgICAgICAgICAqcGVlcjsKLSAgICBuZ3hfc29ja2V0X3QgICAgICAgICBzOwotICAgIG5neF9ldmVudF90ICAgICAgICAgKnJldiwgKndldjsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjOwotICAgIG5neF9ldmVudF9jb25mX3QgICAgKmVjZjsKKyAgICBpbnQgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGluc3RhbmNlLCBsZXZlbCwgaTsKKyAgICB1X2ludCAgICAgICAgICAgICAgZXZlbnQ7CisgICAgdGltZV90ICAgICAgICAgICAgIG5vdzsKKyAgICBuZ3hfZXJyX3QgICAgICAgICAgZXJyOworICAgIG5neF9wZWVyX3QgICAgICAgICpwZWVyOworICAgIG5neF9zb2NrZXRfdCAgICAgICBzOworICAgIG5neF9ldmVudF90ICAgICAgICpyZXYsICp3ZXY7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAKICAgICBub3cgPSBuZ3hfdGltZSgpOwogCkBAIC00Nyw2ICs0Myw3IEBACiAKICAgICAgICAgcGMtPmNvbm5lY3Rpb24gPSBjOwogICAgICAgICBwYy0+Y2FjaGVkID0gMTsKKwogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApAQCAtMTAyLDkgKzk5LDE2IEBACiAgICAgICAgICAgICBwYy0+dHJpZXMtLTsKIAogICAgICAgICAgICAgaWYgKHBjLT50cmllcyA9PSAwKSB7CisKKyAgICAgICAgICAgICAgICAvKiBhbGwgcGVlcnMgZmFpbGVkLCBtYXJrIHRoZW0gYXMgbGl2ZSBmb3IgcXVpY2sgcmVjb3ZlcnkgKi8KKworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYy0+cGVlcnMtPm51bWJlcjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHBjLT5wZWVycy0+cGVlcltpXS5mYWlscyA9IDA7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgLyogbmd4X3VubG9ja19tdXRleChwYy0+cGVlcnMtPm11dGV4KTsgKi8KIAotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9CVVNZOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTI0LDI3ICsxMjgsMjYgQEAKICAgICB9CiAKIAotICAgIGVjZiA9IG5neF9ldmVudF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LCBuZ3hfZXZlbnRfY29yZV9tb2R1bGUpOworICAgIGMgPSBuZ3hfZ2V0X2Nvbm5lY3Rpb24ocywgcGMtPmxvZyk7CiAKLSAgICAvKiBkaXNhYmxlIHdhcm5pbmc6IFdpbjMyIFNPQ0tFVCBpcyB1X2ludCB3aGlsZSBVTklYIHNvY2tldCBpcyBpbnQgKi8KLQotICAgIGlmICgobmd4X3VpbnRfdCkgcyA+PSBlY2YtPmNvbm5lY3Rpb25zKSB7Ci0KLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBwYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXQoKSByZXR1cm5lZCBzb2NrZXQgIyVkIHdoaWxlIG9ubHkgJWQgIgotICAgICAgICAgICAgICAgICAgICAgICJjb25uZWN0aW9ucyB3YXMgY29uZmlndXJlZCwgY2xvc2luZyB0aGUgc29ja2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICBzLCBlY2YtPmNvbm5lY3Rpb25zKTsKLQorICAgIGlmIChjID09IE5VTEwpIHsKICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQocykgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgcGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICJmYWlsZWQiKTsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFRPRE86IHNsZWVwIGZvciBzb21lIHRpbWUgKi8KLQogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorICAgIHJldiA9IGMtPnJlYWQ7CisgICAgd2V2ID0gYy0+d3JpdGU7CisKKyAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOworCisgICAgYy0+cmVhZCA9IHJldjsKKyAgICBjLT53cml0ZSA9IHdldjsKKyAgICBjLT5mZCA9IHM7CisgICAgYy0+bG9nID0gcGMtPmxvZzsKIAogICAgIGlmIChwYy0+cmN2YnVmKSB7CiAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKQEAgLTE1Miw2ICsxNTUsOCBAQAogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBwYy0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19SQ1ZCVUYpIGZhaWxlZCIpOwogCisgICAgICAgICAgICBuZ3hfZnJlZV9jb25uZWN0aW9uKGMpOworCiAgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgcGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiIGZhaWxlZCIpOwpAQCAtMTY1LDYgKzE3MCw4IEBACiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgcGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbm9uYmxvY2tpbmdfbiAiIGZhaWxlZCIpOwogCisgICAgICAgIG5neF9mcmVlX2Nvbm5lY3Rpb24oYyk7CisKICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQocykgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgcGMtPmxvZywgbmd4X3NvY2tldF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX3NvY2tldF9uICIgZmFpbGVkIik7CkBAIC0xNzMsNDYgKzE4MCwxOSBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotI2lmIChOR1hfV0lOMzIpCisgICAgYy0+cmVjdiA9IG5neF9yZWN2OworICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CiAKLSAgICAvKgotICAgICAqIFdpbnNvY2sgYXNzaWduZXMgYSBzb2NrZXQgbnVtYmVyIGRpdmlzaWJsZSBieSA0Ci0gICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgotICAgICAqLworICAgIGMtPmxvZ19lcnJvciA9IHBjLT5sb2dfZXJyb3I7CiAKLSAgICBpZiAocyAlIDQpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBwYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgIG5neF9zb2NrZXRfbgotICAgICAgICAgICAgICAgICAgICAgICIgY3JlYXRlZCBzb2NrZXQgJWQsIG5vdCBkaXZpc2libGUgYnkgNCIsIHMpOwotICAgICAgICBleGl0KDEpOworICAgIGlmIChwZWVyLT5zb2NrYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpIHsKKyAgICAgICAgYy0+dGNwX25vcHVzaCA9IE5HWF9UQ1BfTk9QVVNIX0RJU0FCTEVEOworICAgICAgICBjLT50Y3Bfbm9kZWxheSA9IE5HWF9UQ1BfTk9ERUxBWV9ESVNBQkxFRDsKICAgICB9CiAKLSAgICBjID0gJm5neF9jeWNsZS0+Y29ubmVjdGlvbnNbcyAvIDRdOwotICAgIHJldiA9ICZuZ3hfY3ljbGUtPnJlYWRfZXZlbnRzW3MgLyA0XTsKLSAgICB3ZXYgPSAmbmd4X2N5Y2xlLT53cml0ZV9ldmVudHNbcyAvIDRdOwotCi0jZWxzZQotCi0gICAgYyA9ICZuZ3hfY3ljbGUtPmNvbm5lY3Rpb25zW3NdOwotICAgIHJldiA9ICZuZ3hfY3ljbGUtPnJlYWRfZXZlbnRzW3NdOwotICAgIHdldiA9ICZuZ3hfY3ljbGUtPndyaXRlX2V2ZW50c1tzXTsKLQotI2VuZGlmCi0KICAgICBpbnN0YW5jZSA9IHJldi0+aW5zdGFuY2U7CiAKLSNpZiAoTkdYX1RIUkVBRFMpCi0KLSAgICBpZiAoKigmYy0+bG9jaykpIHsKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgcGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgInNwaW5sb2NrIGluIGNvbm5lY3QsIGZkOiVkIiwgcyk7Ci0gICAgICAgIG5neF9zcGlubG9jaygmYy0+bG9jaywgMTAwMCk7Ci0gICAgICAgIG5neF91bmxvY2soJmMtPmxvY2spOwotICAgIH0KLQotI2VuZGlmCi0KLSAgICBuZ3hfbWVtemVybyhjLCBzaXplb2Yobmd4X2Nvbm5lY3Rpb25fdCkpOwogICAgIG5neF9tZW16ZXJvKHJldiwgc2l6ZW9mKG5neF9ldmVudF90KSk7CiAgICAgbmd4X21lbXplcm8od2V2LCBzaXplb2Yobmd4X2V2ZW50X3QpKTsKIApAQCAtMjI1LDI3ICsyMDUsMTEgQEAKICAgICByZXYtPmRhdGEgPSBjOwogICAgIHdldi0+ZGF0YSA9IGM7CiAKLSAgICBjLT5yZWFkID0gcmV2OwotICAgIGMtPndyaXRlID0gd2V2OwogICAgIHdldi0+d3JpdGUgPSAxOwogCi0gICAgYy0+cmVjdiA9IG5neF9yZWN2OwotICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKLSAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47Ci0KLSAgICBjLT5sb2cgPSBwYy0+bG9nOwogICAgIHJldi0+bG9nID0gcGMtPmxvZzsKICAgICB3ZXYtPmxvZyA9IHBjLT5sb2c7CiAKLSAgICBjLT5mZCA9IHM7Ci0KLSAgICBjLT5sb2dfZXJyb3IgPSBwYy0+bG9nX2Vycm9yOwotCi0gICAgaWYgKHBlZXItPnNvY2thZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewotICAgICAgICBjLT50Y3Bfbm9wdXNoID0gTkdYX1RDUF9OT1BVU0hfRElTQUJMRUQ7Ci0gICAgICAgIGMtPnRjcF9ub2RlbGF5ID0gTkdYX1RDUF9OT0RFTEFZX0RJU0FCTEVEOwotICAgIH0KLQogICAgIHBjLT5jb25uZWN0aW9uID0gYzsKIAogICAgIC8qCkBAIC0yNzIsOCArMjM2LDggQEAKICAgICAgICAgfQogICAgIH0gCiAKLSAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBwYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJjb25uZWN0IHRvICVWLCAjJWQiLCAmcGVlci0+bmFtZSwgYy0+bnVtYmVyKTsKKyAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJjb25uZWN0IHRvICVWLCBmZDolZCAjJWQiLCAmcGVlci0+bmFtZSwgcywgYy0+bnVtYmVyKTsKIAogICAgIHJjID0gY29ubmVjdChzLCBwZWVyLT5zb2NrYWRkciwgcGVlci0+c29ja2xlbik7CiAKQEAgLTI5Myw3ICsyNTcsNyBAQAogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihsZXZlbCwgYy0+bG9nLCBlcnIsICJjb25uZWN0KCkgdG8gJVYgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBlZXItPm5hbWUpOwogCi0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTk5FQ1RfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCmluZGV4IGM4ZTcwNzQuLjIzMzliYWQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCkBAIC0xMyw5ICsxMyw2IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAotI2RlZmluZSBOR1hfQ09OTkVDVF9FUlJPUiAgIC0xMAotCi0KIHR5cGVkZWYgc3RydWN0IHsKICAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgKnNvY2thZGRyOwogICAgIHNvY2tsZW5fdCAgICAgICAgICAgc29ja2xlbjsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKaW5kZXggYjAyOTI2YS4uYjdlMDcyNSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCiBuZ3hfaW50X3QKLW5neF9zc2xfY3JlYXRlX3Nlc3Npb24obmd4X3NzbF9jdHhfdCAqc3NsX2N0eCwgbmd4X2Nvbm5lY3Rpb25fdCAqYywKK25neF9zc2xfY3JlYXRlX2Nvbm5lY3Rpb24obmd4X3NzbF9jdHhfdCAqc3NsX2N0eCwgbmd4X2Nvbm5lY3Rpb25fdCAqYywKICAgICBuZ3hfdWludF90IGZsYWdzKQogeyAgIAogICAgIG5neF9zc2xfdCAgKnNzbDsKQEAgLTkxLDI4ICs5MSwyOCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIHNzbC0+YnVmID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLCBOR1hfU1NMX0JVRlNJWkUpOwotICAgIGlmIChzc2wtPmJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQotCiAgICAgaWYgKGZsYWdzICYgTkdYX1NTTF9CVUZGRVIpIHsKICAgICAgICAgc3NsLT5idWZmZXIgPSAxOworCisgICAgICAgIHNzbC0+YnVmID0gbmd4X2NyZWF0ZV90ZW1wX2J1ZihjLT5wb29sLCBOR1hfU1NMX0JVRlNJWkUpOworICAgICAgICBpZiAoc3NsLT5idWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHNzbC0+c3NsID0gU1NMX25ldyhzc2xfY3R4KTsKKyAgICBzc2wtPmNvbm5lY3Rpb24gPSBTU0xfbmV3KHNzbF9jdHgpOwogCi0gICAgaWYgKHNzbC0+c3NsID09IE5VTEwpIHsKKyAgICBpZiAoc3NsLT5jb25uZWN0aW9uID09IE5VTEwpIHsKICAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIDAsICJTU0xfbmV3KCkgZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKFNTTF9zZXRfZmQoc3NsLT5zc2wsIGMtPmZkKSA9PSAwKSB7CisgICAgaWYgKFNTTF9zZXRfZmQoc3NsLT5jb25uZWN0aW9uLCBjLT5mZCkgPT0gMCkgewogICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwgIlNTTF9zZXRfZmQoKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBTU0xfc2V0X2FjY2VwdF9zdGF0ZShzc2wtPnNzbCk7CisgICAgU1NMX3NldF9hY2NlcHRfc3RhdGUoc3NsLT5jb25uZWN0aW9uKTsKIAogICAgIGMtPnNzbCA9IHNzbDsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAKICAgICBmb3IgKCA7OyApIHsKIAotICAgICAgICBuID0gU1NMX3JlYWQoYy0+c3NsLT5zc2wsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIG4gPSBTU0xfcmVhZChjLT5zc2wtPmNvbm5lY3Rpb24sIGJ1Ziwgc2l6ZSk7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAiU1NMX3JlYWQ6ICVkIiwgbik7IAogCkBAIC0xNDgsMTMgKzE0OCwxNCBAQAogCiAjaWYgKE5HWF9ERUJVRykKIAotICAgICAgICAgICAgaWYgKCFjLT5zc2wtPmhhbmRzaGFrZWQgJiYgU1NMX2lzX2luaXRfZmluaXNoZWQoYy0+c3NsLT5zc2wpKSB7CisgICAgICAgICAgICBpZiAoIWMtPnNzbC0+aGFuZHNoYWtlZCAmJiBTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPmNvbm5lY3Rpb24pKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICBidWZbMTI5XSwgKnMsICpkOwogICAgICAgICAgICAgICAgIFNTTF9DSVBIRVIgICpjaXBoZXI7CiAKICAgICAgICAgICAgICAgICBjLT5zc2wtPmhhbmRzaGFrZWQgPSAxOwogCi0gICAgICAgICAgICAgICAgY2lwaGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihjLT5zc2wtPnNzbCk7CisgICAgICAgICAgICAgICAgY2lwaGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihjLT5zc2wtPmNvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICAgICAgaWYgKGNpcGhlcikgewogICAgICAgICAgICAgICAgICAgICBTU0xfQ0lQSEVSX2Rlc2NyaXB0aW9uKGNpcGhlciwgJmJ1ZlsxXSwgMTI4KTsKQEAgLTE3OSw2ICsxODAsMTIgQEAKIAogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgY2lwaGVyOiBcIiVzXCIiLCAmYnVmWzFdKTsgCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNTTF9zZXNzaW9uX3JldXNlZChjLT5zc2wtPmNvbm5lY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIHJldXNlZCBzZXNzaW9uIik7CisgICAgICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBubyBzaGFyZWQgY2lwaGVycyIpOyAKQEAgLTIxNCw5ICsyMjEsMTAgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9zc2xfaGFuZGxlX3JlY3Yobmd4X2Nvbm5lY3Rpb25fdCAqYywgaW50IG4pCiB7Ci0gICAgaW50ICAgICAgICAgc3NsZXJyOwotICAgIG5neF9lcnJfdCAgIGVycjsKLSAgICBjaGFyICAgICAgICpoYW5kc2hha2U7CisgICAgaW50ICAgICAgICAgIHNzbGVycjsKKyAgICBjaGFyICAgICAgICAqaGFuZHNoYWtlOworICAgIG5neF9lcnJfdCAgICBlcnI7CisgICAgbmd4X3VpbnRfdCAgIGxldmVsOwogCiAgICAgaWYgKG4gPiAwKSB7CiAKQEAgLTI0MiwxNCArMjUwLDE0IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgaWYgKCFTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPnNzbCkpIHsKKyAgICBpZiAoIVNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+Y29ubmVjdGlvbikpIHsKICAgICAgICAgaGFuZHNoYWtlID0gIiBpbiBTU0wgaGFuZHNoYWtlIjsKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIGhhbmRzaGFrZSA9ICIiOwogICAgIH0KIAotICAgIHNzbGVyciA9IFNTTF9nZXRfZXJyb3IoYy0+c3NsLT5zc2wsIG4pOworICAgIHNzbGVyciA9IFNTTF9nZXRfZXJyb3IoYy0+c3NsLT5jb25uZWN0aW9uLCBuKTsKIAogICAgIGVyciA9IChzc2xlcnIgPT0gU1NMX0VSUk9SX1NZU0NBTEwpID8gbmd4X2Vycm5vIDogMDsKIApAQCAtMjY0LDcgKzI3Miw3IEBACiAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgZG9lcyBTU0wgJXNoYW5kc2hha2UiLAotICAgICAgICAgICAgICAgICAgICAgIFNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSA/ICJyZSIgOiAiIik7CisgICAgICAgICAgICAgICAgICAgICAgU1NMX2lzX2luaXRfZmluaXNoZWQoYy0+c3NsLT5jb25uZWN0aW9uKSA/ICJyZSIgOiAiIik7CiAKICAgICAgICAgYy0+d3JpdGUtPnJlYWR5ID0gMDsKIApAQCAtMjk0LDggKzMwMiwzNCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAiU1NMX3JlYWQoKSBmYWlsZWQlcyIsIGhhbmRzaGFrZSk7CisgICAgbGV2ZWwgPSBOR1hfTE9HX0NSSVQ7CisKKyAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSB7CisKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRUNPTk5SRVNFVAorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FUElQRQorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FTk9UQ09OTgorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FQ09OTlJFRlVTRUQKKyAgICAgICAgICAgIHx8IGVyciA9PSBOR1hfRUhPU1RVTlJFQUNIKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGMtPmxvZ19lcnJvcikgeworCisgICAgICAgICAgICBjYXNlIE5HWF9FUlJPUl9JR05PUkVfRUNPTk5SRVNFVDoKKyAgICAgICAgICAgIGNhc2UgTkdYX0VSUk9SX0lORk86CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0lORk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTkdYX0VSUk9SX0VSUjoKKyAgICAgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfRVJSOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbmd4X3NzbF9lcnJvcihsZXZlbCwgYy0+bG9nLCBlcnIsICJTU0xfcmVhZCgpIGZhaWxlZCVzIiwgaGFuZHNoYWtlKTsKIAogICAgIHJldHVybiBOR1hfRVJST1I7CiB9CkBAIC00NDgsMTIgKzQ4MiwxMyBAQAogc3NpemVfdAogbmd4X3NzbF93cml0ZShuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2NoYXIgKmRhdGEsIHNpemVfdCBzaXplKQogewotICAgIGludCAgICAgICAgbiwgc3NsZXJyOwotICAgIG5neF9lcnJfdCAgZXJyOworICAgIGludCAgICAgICAgIG4sIHNzbGVycjsKKyAgICBuZ3hfZXJyX3QgICBlcnI7CisgICAgbmd4X3VpbnRfdCAgbGV2ZWw7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJTU0wgdG8gd3JpdGU6ICVkIiwgc2l6ZSk7CiAKLSAgICBuID0gU1NMX3dyaXRlKGMtPnNzbC0+c3NsLCBkYXRhLCBzaXplKTsKKyAgICBuID0gU1NMX3dyaXRlKGMtPnNzbC0+Y29ubmVjdGlvbiwgZGF0YSwgc2l6ZSk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJTU0xfd3JpdGU6ICVkIiwgbik7CiAKQEAgLTQ2MSwxMyArNDk2LDEzIEBACiAKICNpZiAoTkdYX0RFQlVHKQogCi0gICAgICAgIGlmICghYy0+c3NsLT5oYW5kc2hha2VkICYmIFNTTF9pc19pbml0X2ZpbmlzaGVkKGMtPnNzbC0+c3NsKSkgeworICAgICAgICBpZiAoIWMtPnNzbC0+aGFuZHNoYWtlZCAmJiBTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPmNvbm5lY3Rpb24pKSB7CiAgICAgICAgICAgICBjaGFyICAgICAgICAgYnVmWzEyOV0sICpzLCAqZDsKICAgICAgICAgICAgIFNTTF9DSVBIRVIgICpjaXBoZXI7CiAKICAgICAgICAgICAgIGMtPnNzbC0+aGFuZHNoYWtlZCA9IDE7CiAKLSAgICAgICAgICAgIGNpcGhlciA9IFNTTF9nZXRfY3VycmVudF9jaXBoZXIoYy0+c3NsLT5zc2wpOworICAgICAgICAgICAgY2lwaGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihjLT5zc2wtPmNvbm5lY3Rpb24pOwogCiAgICAgICAgICAgICBpZiAoY2lwaGVyKSB7CiAgICAgICAgICAgICAgICAgU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihjaXBoZXIsICZidWZbMV0sIDEyOCk7CkBAIC00OTIsNiArNTI3LDEyIEBACiAKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBjaXBoZXI6IFwiJXNcIiIsICZidWZbMV0pOyAKKworICAgICAgICAgICAgICAgIGlmIChTU0xfc2Vzc2lvbl9yZXVzZWQoYy0+c3NsLT5jb25uZWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgcmV1c2VkIHNlc3Npb24iKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgbm8gc2hhcmVkIGNpcGhlcnMiKTsgCkBAIC01MjEsNyArNTYyLDcgQEAKICAgICAgICAgcmV0dXJuIG47CiAgICAgfQogCi0gICAgc3NsZXJyID0gU1NMX2dldF9lcnJvcihjLT5zc2wtPnNzbCwgbik7CisgICAgc3NsZXJyID0gU1NMX2dldF9lcnJvcihjLT5zc2wtPmNvbm5lY3Rpb24sIG4pOwogCiAgICAgZXJyID0gKHNzbGVyciA9PSBTU0xfRVJST1JfU1lTQ0FMTCkgPyBuZ3hfZXJybm8gOiAwOwogCkBAIC01MzYsNyArNTc3LDcgQEAKIAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBkb2VzIFNTTCAlc2hhbmRzaGFrZSIsCi0gICAgICAgICAgICAgICAgICAgICAgU1NMX2lzX2luaXRfZmluaXNoZWQoYy0+c3NsLT5zc2wpID8gInJlIiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICBTU0xfaXNfaW5pdF9maW5pc2hlZChjLT5zc2wtPmNvbm5lY3Rpb24pID8gInJlIiA6ICIiKTsKIAogICAgICAgICBjLT5yZWFkLT5yZWFkeSA9IDA7CiAKQEAgLTU2MCw3ICs2MDEsMzQgQEAKICAgICBjLT5zc2wtPm5vX3Jjdl9zaHV0ID0gMTsKICAgICBjLT5zc2wtPm5vX3NlbmRfc2h1dCA9IDE7CiAKLSAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgZXJyLCAiU1NMX3dyaXRlKCkgZmFpbGVkIik7CisgICAgbGV2ZWwgPSBOR1hfTE9HX0NSSVQ7CisKKyAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9TWVNDQUxMKSB7CisKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRUNPTk5SRVNFVAorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FUElQRQorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FTk9UQ09OTgorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FQ09OTlJFRlVTRUQKKyAgICAgICAgICAgIHx8IGVyciA9PSBOR1hfRUhPU1RVTlJFQUNIKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGMtPmxvZ19lcnJvcikgeworCisgICAgICAgICAgICBjYXNlIE5HWF9FUlJPUl9JR05PUkVfRUNPTk5SRVNFVDoKKyAgICAgICAgICAgIGNhc2UgTkdYX0VSUk9SX0lORk86CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0lORk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgTkdYX0VSUk9SX0VSUjoKKyAgICAgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfRVJSOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgbmd4X3NzbF9lcnJvcihsZXZlbCwgYy0+bG9nLCBlcnIsICJTU0xfd3JpdGUoKSBmYWlsZWQiKTsKIAogICAgIHJldHVybiBOR1hfRVJST1I7CiB9CkBAIC02MDIsNyArNjcwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChtb2RlKSB7Ci0gICAgICAgICAgICBTU0xfc2V0X3NodXRkb3duKGMtPnNzbC0+c3NsLCBtb2RlKTsKKyAgICAgICAgICAgIFNTTF9zZXRfc2h1dGRvd24oYy0+c3NsLT5jb25uZWN0aW9uLCBtb2RlKTsKICAgICAgICAgICAgIGMtPnNzbC0+c2h1dGRvd25fc2V0ID0gMTsKICAgICAgICAgfQogICAgIH0KQEAgLTYxMywxMyArNjgxLDE0IEBACiAjZW5kaWYKIAogICAgIGZvciAoIDs7ICkgewotICAgICAgICBuID0gU1NMX3NodXRkb3duKGMtPnNzbC0+c3NsKTsKKyAgICAgICAgbiA9IFNTTF9zaHV0ZG93bihjLT5zc2wtPmNvbm5lY3Rpb24pOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF9zaHV0ZG93bjogJWQiLCBuKTsKIAogICAgICAgICBpZiAobiA9PSAxIHx8IChuID09IDAgJiYgYy0+cmVhZC0+dGltZWRvdXQpKSB7Ci0gICAgICAgICAgICBTU0xfZnJlZShjLT5zc2wtPnNzbCk7CisgICAgICAgICAgICBTU0xfZnJlZShjLT5zc2wtPmNvbm5lY3Rpb24pOwogICAgICAgICAgICAgYy0+c3NsID0gTlVMTDsKKwogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCkBAIC02MzIsNyArNzAxLDcgQEAKICAgICB9CiAKICAgICBpZiAoIWFnYWluKSB7Ci0gICAgICAgIHNzbGVyciA9IFNTTF9nZXRfZXJyb3IoYy0+c3NsLT5zc2wsIG4pOworICAgICAgICBzc2xlcnIgPSBTU0xfZ2V0X2Vycm9yKGMtPnNzbC0+Y29ubmVjdGlvbiwgbik7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiU1NMX2dldF9lcnJvcjogJWQiLCBzc2xlcnIpOwpAQCAtNjYwLDYgKzcyOSw5IEBACiAKICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwgIlNTTF9zaHV0ZG93bigpIGZhaWxlZCIpOwogCisgICAgU1NMX2ZyZWUoYy0+c3NsLT5jb25uZWN0aW9uKTsKKyAgICBjLT5zc2wgPSBOVUxMOworCiAgICAgcmV0dXJuIE5HWF9FUlJPUjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaAppbmRleCBmMjk4YWViLi5mYTdmMjdlIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaApAQCAtMjMsNyArMjMsNyBAQAogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBTU0wgICAgICAgICAgICAgICAgICAgKnNzbDsKKyAgICBTU0wgICAgICAgICAgICAgICAgICAgKmNvbm5lY3Rpb247CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICBsYXN0OwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAqYnVmOwogICAgIG5neF9ldmVudF9oYW5kbGVyX3B0ICAgc2F2ZWRfcmVhZF9oYW5kbGVyOwpAQCAtNDksOCArNDksOCBAQAogCiAKIG5neF9pbnRfdCBuZ3hfc3NsX2luaXQobmd4X2xvZ190ICpsb2cpOwotbmd4X2ludF90IG5neF9zc2xfY3JlYXRlX3Nlc3Npb24obmd4X3NzbF9jdHhfdCAqY3R4LCBuZ3hfY29ubmVjdGlvbl90ICpjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3VpbnRfdCBmbGFncyk7CituZ3hfaW50X3Qgbmd4X3NzbF9jcmVhdGVfY29ubmVjdGlvbihuZ3hfc3NsX2N0eF90ICpjdHgsIG5neF9jb25uZWN0aW9uX3QgKmMsCisgICAgbmd4X3VpbnRfdCBmbGFncyk7CiAKICNkZWZpbmUgbmd4X3NzbF9oYW5kc2hha2UoYykgICAgIE5HWF9PSwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCmluZGV4IDI4MzhlOWYuLmZiNDA2NjkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jCkBAIC0yMDMsNyArMjAzLDEwIEBACiAgICAgaWYgKG5neF9vcGVuX2RpcigmZG5hbWUsICZkaXIpID09IE5HWF9FUlJPUikgewogICAgICAgICBlcnIgPSBuZ3hfZXJybm87CiAKLSAgICAgICAgaWYgKGVyciA9PSBOR1hfRU5PRU5UIHx8IGVyciA9PSBOR1hfRU5PVERJUikgeworICAgICAgICBpZiAoZXJyID09IE5HWF9FTk9FTlQKKyAgICAgICAgICAgIHx8IGVyciA9PSBOR1hfRU5PVERJUgorICAgICAgICAgICAgfHwgZXJyID09IE5HWF9FTkFNRVRPT0xPTkcpCisgICAgICAgIHsKICAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19FUlI7CiAgICAgICAgICAgICByYyA9IE5HWF9IVFRQX05PVF9GT1VORDsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKaW5kZXggMWFkMjI1Zi4uNDNjYjVjOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCkBAIC04Miw3ICs4MiwxMCBAQAogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAqZXhwaXJlcywgKmNjLCAqKmNjcDsKICAgICBuZ3hfaHR0cF9oZWFkZXJzX2NvbmZfdCAgKmNvbmY7CiAKLSAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX09LIHx8IHItPm1haW4pIHsKKyAgICBpZiAoKHItPmhlYWRlcnNfb3V0LnN0YXR1cyAhPSBOR1hfSFRUUF9PSworICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzICE9IE5HWF9IVFRQX05PVF9NT0RJRklFRCkKKyAgICAgICAgfHwgci0+bWFpbikKKyAgICB7CiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCAxNDE1ZjIxLi5jODA3ZGY5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9wYXNzX3VucGFyc2VkX3VyaSIpLAotICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLnBhc3NfdW5wYXJzZWRfdXJpKSwKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NsX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKaW5kZXggNTEzN2FmMC4uMTMwZjJiMyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMKQEAgLTgzLDYgKzgzLDkgQEAKIH07CiAKIAorc3RhdGljIHVfY2hhciBuZ3hfaHR0cF9zZXNzaW9uX2lkX2N0eFtdID0gIkhUVFAiOworCisKIHN0YXRpYyB2b2lkICoKIG5neF9odHRwX3NzbF9jcmVhdGVfc3J2X2NvbmYobmd4X2NvbmZfdCAqY2YpCiB7CkBAIC0xNDcsMTIgKzE1MCw2IEBACiAgICAgfQogCiAKLSNpZiAwCi0gICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhjb25mLT5zc2xfY3R4LCBTU0xfT1BfQUxMKTsKLSAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbF9jdHgsIFNTTF9PUF9OT19TU0x2Myk7Ci0gICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhjb25mLT5zc2xfY3R4LCBTU0xfT1BfU0lOR0xFX0RIX1VTRSk7Ci0jZW5kaWYKLQogICAgIGlmIChjb25mLT5jaXBoZXJzLmxlbikgewogICAgICAgICBpZiAoU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY29uZi0+c3NsX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgY29uZi0+Y2lwaGVycy5kYXRhKSA9PSAwKQpAQCAtMTgyLDcgKzE3OSwxNiBAQAogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgU1NMX0NUWF9zZXRfdmVyaWZ5KGNvbmYtPnNzbF9jdHgsIFNTTF9WRVJJRllfTk9ORSwgTlVMTCk7CisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhjb25mLT5zc2xfY3R4LCBTU0xfT1BfQUxMKTsKKworICAgIFNTTF9DVFhfc2V0X21vZGUoY29uZi0+c3NsX2N0eCwgU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVIpOworCisgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVhZChjb25mLT5zc2xfY3R4LCAxKTsKKworICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25fY2FjaGVfbW9kZShjb25mLT5zc2xfY3R4LCBTU0xfU0VTU19DQUNIRV9TRVJWRVIpOworCisgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9pZF9jb250ZXh0KGNvbmYtPnNzbF9jdHgsIG5neF9odHRwX3Nlc3Npb25faWRfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc2Vzc2lvbl9pZF9jdHgpIC0gMSk7CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCmluZGV4IGVhYzNjMTkuLmQ4ODg0Y2EgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCkBAIC0yMDMsNyArMjAzLDEwIEBACiAgICAgaWYgKGZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCi0gICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT0VOVCB8fCBlcnIgPT0gTkdYX0VOT1RESVIpIHsKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRU5PRU5UCisgICAgICAgICAgICB8fCBlcnIgPT0gTkdYX0VOT1RESVIKKyAgICAgICAgICAgIHx8IGVyciA9PSBOR1hfRU5BTUVUT09MT05HKQorICAgICAgICB7CiAgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfRVJSOwogICAgICAgICAgICAgcmMgPSBOR1hfSFRUUF9OT1RfRk9VTkQ7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCmluZGV4IDY0NmUxNmQuLjU0NzAyY2MgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwpAQCAtNjQ2LDcgKzY0NiwxMCBAQAogICAgICAgICAgICAgbHMtPnBvc3RfYWNjZXB0X3RpbWVvdXQgPSBjc2NmLT5jbGllbnRfaGVhZGVyX3RpbWVvdXQ7CiAKICAgICAgICAgICAgIGNsY2YgPSBjc2NmLT5jdHgtPmxvY19jb25mW25neF9odHRwX2NvcmVfbW9kdWxlLmN0eF9pbmRleF07Ci0gICAgICAgICAgICBscy0+bG9nID0gY2xjZi0+ZXJyX2xvZzsKKworICAgICAgICAgICAgbHMtPmxvZyA9ICpjbGNmLT5lcnJfbG9nOworICAgICAgICAgICAgbHMtPmxvZy5kYXRhID0gJmxzLT5hZGRyX3RleHQ7CisgICAgICAgICAgICBscy0+bG9nLmhhbmRsZXIgPSBuZ3hfYWNjZXB0X2xvZ19lcnJvcjsKIAogI2lmIChOR1hfV0lOMzIpCiAgICAgICAgICAgICBpb2NwY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYoY2YtPmN5Y2xlLT5jb25mX2N0eCwgbmd4X2lvY3BfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDY2MzczZTMuLmU5ZjU5NDIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMjg0LDYgKzI4NCwxMyBAQAogICAgICAgMCwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygic2F0aXNmeV9hbnkiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCwgc2F0aXNmeV9hbnkpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJpbnRlcm5hbCIpLAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfTk9BUkdTLAogICAgICAgbmd4X2h0dHBfY29yZV9pbnRlcm5hbCwKQEAgLTQwMSw1MCArNDA4LDQzIEBACiAKICAgICByLT5jb25uZWN0aW9uLT51bmV4cGVjdGVkX2VvZiA9IDA7CiAKLSAgICBzd2l0Y2ggKHItPmhlYWRlcnNfaW4uY29ubmVjdGlvbl90eXBlKSB7Ci0gICAgY2FzZSAwOgotICAgICAgICBpZiAoci0+aHR0cF92ZXJzaW9uID4gTkdYX0hUVFBfVkVSU0lPTl8xMCkgeworICAgIGlmIChyLT5lcnJfY3R4ID09IE5VTEwpIHsKKyAgICAgICAgc3dpdGNoIChyLT5oZWFkZXJzX2luLmNvbm5lY3Rpb25fdHlwZSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBpZiAoci0+aHR0cF92ZXJzaW9uID4gTkdYX0hUVFBfVkVSU0lPTl8xMCkgeworICAgICAgICAgICAgICAgIHItPmtlZXBhbGl2ZSA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHItPmtlZXBhbGl2ZSA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5HWF9IVFRQX0NPTk5FQ1RJT05fQ0xPU0U6CisgICAgICAgICAgICByLT5rZWVwYWxpdmUgPSAwOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBOR1hfSFRUUF9DT05ORUNUSU9OX0tFRVBfQUxJVkU6CiAgICAgICAgICAgICByLT5rZWVwYWxpdmUgPSAxOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoci0+a2VlcGFsaXZlICYmIHItPmhlYWRlcnNfaW4ubXNpZSAmJiByLT5tZXRob2QgPT0gTkdYX0hUVFBfUE9TVCkgeworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTVNJRSBtYXkgd2FpdCBmb3Igc29tZSB0aW1lIGlmIHRoZSByZXNwb25zZSBmb3IgdGhlIFBPU1QgcmVxdWVzdAorICAgICAgICAgICAgICogaXMgc2VudCBvdmVyIHRoZSBrZWVwYWxpdmUgY29ubmVjdGlvbgorICAgICAgICAgICAgICovCisKICAgICAgICAgICAgIHItPmtlZXBhbGl2ZSA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIE5HWF9IVFRQX0NPTk5FQ1RJT05fQ0xPU0U6Ci0gICAgICAgIHItPmtlZXBhbGl2ZSA9IDA7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5jb250ZW50X2xlbmd0aF9uID4gMCkgeworICAgICAgICAgICAgci0+bGluZ2VyaW5nX2Nsb3NlID0gMTsKIAotICAgIGNhc2UgTkdYX0hUVFBfQ09OTkVDVElPTl9LRUVQX0FMSVZFOgotICAgICAgICByLT5rZWVwYWxpdmUgPSAxOwotICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHItPmxpbmdlcmluZ19jbG9zZSA9IDA7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoci0+a2VlcGFsaXZlICYmIHItPmhlYWRlcnNfaW4ubXNpZSAmJiByLT5tZXRob2QgPT0gTkdYX0hUVFBfUE9TVCkgewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE1TSUUgbWF5IHdhaXQgZm9yIHNvbWUgdGltZSBpZiB0aGUgcmVzcG9uc2UgZm9yIHRoZSBQT1NUIHJlcXVlc3QKLSAgICAgICAgICogaXMgc2VudCBvdmVyIHRoZSBrZWVwYWxpdmUgY29ubmVjdGlvbgotICAgICAgICAgKi8KLQotICAgICAgICByLT5rZWVwYWxpdmUgPSAwOwotICAgIH0KLQotI2lmIDAKLSAgICAvKiBURVNUIFNUVUIgKi8gci0+aHR0cF92ZXJzaW9uID0gTkdYX0hUVFBfVkVSU0lPTl8xMDsKLSAgICAvKiBURVNUIFNUVUIgKi8gci0+a2VlcGFsaXZlID0gMDsKLSNlbmRpZgotCi0gICAgaWYgKHItPmhlYWRlcnNfaW4uY29udGVudF9sZW5ndGhfbiA+IDApIHsKLSAgICAgICAgci0+bGluZ2VyaW5nX2Nsb3NlID0gMTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHItPmxpbmdlcmluZ19jbG9zZSA9IDA7Ci0gICAgfQotCi0jaWYgMAotICAgIC8qIFRFU1QgU1RVQiAqLyByLT5saW5nZXJpbmdfY2xvc2UgPSAxOwotI2VuZGlmCi0KICAgICByLT53cml0ZV9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfY29yZV9ydW5fcGhhc2VzOwogCiAgICAgci0+dmFsaWRfdW5wYXJzZWRfdXJpID0gMTsKQEAgLTQ5OCw2ICs0OTgsMTAgQEAKICAgICAgICAgICAgIHItPnBoYXNlID0gTkdYX0hUVFBfRklORF9DT05GSUdfUEhBU0U7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoci0+cGhhc2UgPT0gTkdYX0hUVFBfQUNDRVNTX1BIQVNFICYmIHItPm1haW4pIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKICAgICAgICAgaWYgKHItPnBoYXNlID09IE5HWF9IVFRQX0NPTlRFTlRfUEhBU0UgJiYgci0+Y29udGVudF9oYW5kbGVyKSB7CiAgICAgICAgICAgICByLT53cml0ZV9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfcmVxdWVzdF9lbXB0eV9oYW5kbGVyOwogICAgICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCByLT5jb250ZW50X2hhbmRsZXIocikpOwpAQCAtNTE1LDcgKzUxOSw3IEBACiAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciB1c2UgciBoZXJlIGJlY2F1c2UgCi0gICAgICAgICAgICAgICAgICogaXQgY291bGQgcG9pbnQgdG8gYWxyZWFkeSBmcmVlZCBkYXRhCisgICAgICAgICAgICAgICAgICogaXQgbWF5IHBvaW50IHRvIGFscmVhZHkgZnJlZWQgZGF0YQogICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTI1LDYgKzUyOSwzMCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoci0+cGhhc2UgPT0gTkdYX0hUVFBfQUNDRVNTX1BIQVNFKSB7CisgICAgICAgICAgICAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgICAgICAgICAgICAgaWYgKGNsY2YtPnNhdGlzZnlfYW55KSB7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJjID09IE5HWF9PSykgeworICAgICAgICAgICAgICAgICAgICAgICAgci0+YWNjZXNzX2NvZGUgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQud3d3X2F1dGhlbnRpY2F0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0Lnd3d19hdXRoZW50aWNhdGUtPmhhc2ggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfSFRUUF9GT1JCSURERU4gfHwgcmMgPT0gTkdYX0hUVFBfVU5BVVRIT1JJWkVEKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByLT5hY2Nlc3NfY29kZSA9IHJjOworCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKHJjID49IE5HWF9IVFRQX1NQRUNJQUxfUkVTUE9OU0UKICAgICAgICAgICAgICAgICB8fCByYyA9PSBOR1hfSFRUUF9OT19DT05URU5UCiAgICAgICAgICAgICAgICAgfHwgcmMgPT0gTkdYX0VSUk9SKQpAQCAtNTQ1LDYgKzU3MywxMiBAQAogICAgICAgICAgICAgaWYgKHJjID09IE5HWF9PSyAmJiBjbWNmLT5waGFzZXNbci0+cGhhc2VdLnR5cGUgPT0gTkdYX09LKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyLT5waGFzZSA9PSBOR1hfSFRUUF9BQ0NFU1NfUEhBU0UgJiYgci0+YWNjZXNzX2NvZGUpIHsKKyAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3Qociwgci0+YWNjZXNzX2NvZGUpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMTAyLDYgKzExMzYsNyBAQAogCiAgICAgc3ItPmludGVybmFsID0gMTsKIAorICAgIHNyLT5kaXNjYXJkX2JvZHkgPSByLT5kaXNjYXJkX2JvZHk7CiAgICAgc3ItPm1haW5fZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gci0+bWFpbl9maWx0ZXJfbmVlZF9pbl9tZW1vcnk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKQEAgLTE3OTMsNiArMTgyOCw3IEBACiAgICAgbGNmLT5jbGllbnRfbWF4X2JvZHlfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgbGNmLT5jbGllbnRfYm9keV9idWZmZXJfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1NJWkU7CiAgICAgbGNmLT5jbGllbnRfYm9keV90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKKyAgICBsY2YtPnNhdGlzZnlfYW55ID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgbGNmLT5pbnRlcm5hbCA9IE5HWF9DT05GX1VOU0VUOwogICAgIGxjZi0+c2VuZGZpbGUgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBsY2YtPnRjcF9ub3B1c2ggPSBOR1hfQ09ORl9VTlNFVDsKQEAgLTE4OTUsNiArMTkzMSw3IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfbXNlY192YWx1ZShjb25mLT5jbGllbnRfYm9keV90aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+Y2xpZW50X2JvZHlfdGltZW91dCwgNjAwMDApOwogCisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+c2F0aXNmeV9hbnksIHByZXYtPnNhdGlzZnlfYW55LCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5pbnRlcm5hbCwgcHJldi0+aW50ZXJuYWwsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnNlbmRmaWxlLCBwcmV2LT5zZW5kZmlsZSwgMCk7CiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dGNwX25vcHVzaCwgcHJldi0+dGNwX25vcHVzaCwgMCk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAppbmRleCA1OWZjMzJhLi5kMTc1ZjJlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKQEAgLTIxNyw2ICsyMTcsNyBAQAogCiAgICAgdGltZV90ICAgICAgICBrZWVwYWxpdmVfaGVhZGVyOyAgICAgICAgLyoga2VlcGFsaXZlX3RpbWVvdXQgKi8KIAorICAgIG5neF9mbGFnX3QgICAgc2F0aXNmeV9hbnk7ICAgICAgICAgICAgIC8qIHNhdGlzZnlfYW55ICovCiAgICAgbmd4X2ZsYWdfdCAgICBpbnRlcm5hbDsgICAgICAgICAgICAgICAgLyogaW50ZXJuYWwgKi8KICAgICBuZ3hfZmxhZ190ICAgIHNlbmRmaWxlOyAgICAgICAgICAgICAgICAvKiBzZW5kZmlsZSAqLwogICAgIG5neF9mbGFnX3QgICAgdGNwX25vcHVzaDsgICAgICAgICAgICAgIC8qIHRjcF9ub3B1c2ggKi8KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCA1OTRhMjcyLi5jYjM5MzdjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC0zNTksNyArMzU5LDcgQEAKICAgICBpZiAoc3NjZi0+ZW5hYmxlKSB7CiAKICAgICAgICAgaWYgKGMtPnNzbCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAobmd4X3NzbF9jcmVhdGVfc2Vzc2lvbihzc2NmLT5zc2xfY3R4LCBjLCBOR1hfU1NMX0JVRkZFUikKKyAgICAgICAgICAgIGlmIChuZ3hfc3NsX2NyZWF0ZV9jb25uZWN0aW9uKHNzY2YtPnNzbF9jdHgsIGMsIE5HWF9TU0xfQlVGRkVSKQogICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwpAQCAtMTczMiwxMCArMTczMiw2IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBwb3N0cG9uZWQgb3V0cHV0IGZpbHRlcjogJWQiLCByYyk7CiAKLSAgICAgICAgaWYgKHJjID09IE5HWF9BR0FJTikgewotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICB9Ci0KICAgICAgICAgLyoKICAgICAgICAgICogd2UgdHJlYXQgTkdYX0VSUk9SIGFzIE5HWF9PSywgYmVjYXVzZSB3ZSBuZWVkIHRvIGNvbXBsZXRlCiAgICAgICAgICAqIGFsbCBwb3N0cG9uZWQgcmVxdWVzdHMKQEAgLTE3NDQsNiArMTc0MCwxMSBAQAogICAgICAgICBwciA9IHItPnBvc3Rwb25lZDsKIAogICAgICAgICBpZiAocHIgPT0gTlVMTCkgeworCisgICAgICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBmZTU2YjI2Li44ZGJmMGJhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0zMDcsNiArMzA3LDcgQEAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2U7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlX2hhbmRsZXI7CiAgICAgbmd4X2h0dHBfaGFuZGxlcl9wdCAgICAgICAgICAgICAgIGNvbnRlbnRfaGFuZGxlcjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX2NvZGU7CiAKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICAgICAgICoqdmFyaWFibGVzOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwppbmRleCAwNGE3YTU3Li44MzRjMzAyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKQEAgLTQ1OSw3ICs0NTksMTEgQEAKIAogICAgIHUtPnN0YXRlLT5wZWVyID0gJnUtPnBlZXIucGVlcnMtPnBlZXJbdS0+cGVlci5jdXJfcGVlcl0ubmFtZTsKIAotICAgIGlmIChyYyA9PSBOR1hfQ09OTkVDVF9FUlJPUikgeworICAgIGlmIChyYyA9PSBOR1hfQlVTWSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsICJubyBsaXZlIHVwc3RyZWFtcyIpOworICAgIH0KKworICAgIGlmIChyYyA9PSBOR1hfQlVTWSB8fCByYyA9PSBOR1hfREVDTElORUQpIHsKICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fbmV4dChyLCB1LCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUik7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcC5oIGIvc3JjL2ltYXAvbmd4X2ltYXAuaAppbmRleCA3YmVlMmFkLi5jNDIzMjRjIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcC5oCisrKyBiL3NyYy9pbWFwL25neF9pbWFwLmgKQEAgLTEwMSw2ICsxMDEsOCBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIHF1aXQ6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICBwcm90b2NvbDoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIHF1b3RlZDoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIGJhY2tzbGFzaDoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIG5vX3N5bmNfbGl0ZXJhbDoxOwogCiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgbG9naW47CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgcGFzc3dkOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCmluZGV4IDFlMmJjNGMuLjYxNjIyMjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKQEAgLTE1MCw3ICsxNTAsOCBAQAogCiAgICAgcmMgPSBuZ3hfZXZlbnRfY29ubmVjdF9wZWVyKCZjdHgtPnBlZXIpOwogCi0gICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA9PSBOR1hfQ09OTkVDVF9FUlJPUikgeworICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPT0gTkdYX0JVU1kgfHwgcmMgPT0gTkdYX0RFQ0xJTkVEKSB7CisgICAgICAgIG5neF9jbG9zZV9jb25uZWN0aW9uKGN0eC0+cGVlci5jb25uZWN0aW9uKTsKICAgICAgICAgbmd4X2ltYXBfc2Vzc2lvbl9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NDgsNiArNDQ5LDcgQEAKIAogICAgICAgICAgICAgICAgIHAgPSBuZ3hfcGNhbGxvYyhzLT5jb25uZWN0aW9uLT5wb29sLCBzaXplKTsKICAgICAgICAgICAgICAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9jb25uZWN0aW9uKGN0eC0+cGVlci5jb25uZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgbmd4X2ltYXBfc2Vzc2lvbl9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC02NDEsOCArNjQzLDkgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfaW1hcF9hdXRoX3NsZWVwX2hhbmRsZXIobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgICpjOwotICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgKnM7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKKyAgICBuZ3hfaW1hcF9zZXNzaW9uX3QgICAgICAgICpzOworICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIHJldi0+bG9nLCAwLCAiaW1hcCBhdXRoIHNsZWVwIGhhbmRsZXIiKTsKIApAQCAtNjYyLDYgKzY2NSwxOCBAQAogICAgICAgICAgICAgcy0+Y29ubmVjdGlvbi0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX2F1dGhfc3RhdGU7CiAgICAgICAgIH0KIAorICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJpbiBhdXRoIHN0YXRlIjsKKworICAgICAgICBuZ3hfaW1hcF9zZW5kKHMtPmNvbm5lY3Rpb24tPndyaXRlKTsKKworICAgICAgICBpZiAoYy0+Y2xvc2VkKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7CisKKyAgICAgICAgbmd4X2FkZF90aW1lcihyZXYsIGNzY2YtPnRpbWVvdXQpOworCiAgICAgICAgIGlmIChyZXYtPnJlYWR5KSB7CiAgICAgICAgICAgICBzLT5jb25uZWN0aW9uLT5yZWFkLT5oYW5kbGVyKHJldik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC02NzEsOCArNjg2LDYgQEAKICAgICAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24ocy0+Y29ubmVjdGlvbik7CiAgICAgICAgIH0KIAotICAgICAgICBuZ3hfaW1hcF9zZW5kKHMtPmNvbm5lY3Rpb24tPndyaXRlKTsKLQogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwppbmRleCAwMjAzZjQ0Li45ZDY2Mjk4IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKQEAgLTQxOCw3ICs0MTgsOSBAQAogICAgIGxzLT5jdHggPSBjZi0+Y3R4OwogCiAgICAgLyogU1RVQiAqLwotICAgIGxzLT5sb2cgPSBjZi0+Y3ljbGUtPm5ld19sb2c7CisgICAgbHMtPmxvZyA9ICpjZi0+Y3ljbGUtPm5ld19sb2c7CisgICAgbHMtPmxvZy5kYXRhID0gJmxzLT5hZGRyX3RleHQ7CisgICAgbHMtPmxvZy5oYW5kbGVyID0gbmd4X2FjY2VwdF9sb2dfZXJyb3I7CiAgICAgLyoqLwogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCmluZGV4IDBkZGY1MWYuLjY0OTdjZWQgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKQEAgLTMzLDYgKzMzLDcgQEAKIHN0YXRpYyB1X2NoYXIgIHBvcDNfb2tbXSA9ICIrT0siIENSTEY7CiBzdGF0aWMgdV9jaGFyICBwb3AzX2ludmFsaWRfY29tbWFuZFtdID0gIi1FUlIgaW52YWxpZCBjb21tYW5kIiBDUkxGOwogCitzdGF0aWMgdV9jaGFyICBpbWFwX3N0YXJbXSA9ICIqICI7CiBzdGF0aWMgdV9jaGFyICBpbWFwX29rW10gPSAiT0sgY29tcGxldGVkIiBDUkxGOwogc3RhdGljIHVfY2hhciAgaW1hcF9uZXh0W10gPSAiKyBPSyIgQ1JMRjsKIHN0YXRpYyB1X2NoYXIgIGltYXBfYnllW10gPSAiKiBCWUUiIENSTEY7CkBAIC00MiwyNiArNDMsNDggQEAKIHZvaWQKIG5neF9pbWFwX2luaXRfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjKQogewotICAgIG5neF9pbWFwX2xvZ19jdHhfdCAgKmN0eDsKKyAgICBuZ3hfaW1hcF9sb2dfY3R4X3QgICAqbGN0eDsKKyNpZiAoTkdYX0lNQVBfU1NMKQorICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICpjdHg7CisgICAgbmd4X2ltYXBfc3NsX2NvbmZfdCAgKnNzbGNmOworI2VuZGlmCiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIGMtPmxvZywgMCwgImltYXAgaW5pdCBjb25uZWN0aW9uIik7CiAKLSAgICBjdHggPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9sb2dfY3R4X3QpKTsKLSAgICBpZiAoY3R4ID09IE5VTEwpIHsKKyAgICBsY3R4ID0gbmd4X3BhbGxvYyhjLT5wb29sLCBzaXplb2Yobmd4X2ltYXBfbG9nX2N0eF90KSk7CisgICAgaWYgKGxjdHggPT0gTlVMTCkgewogICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47CiAgICAgfSAKIAotICAgIGN0eC0+Y2xpZW50ID0gJmMtPmFkZHJfdGV4dDsKLSAgICBjdHgtPnNlc3Npb24gPSBOVUxMOworICAgIGxjdHgtPmNsaWVudCA9ICZjLT5hZGRyX3RleHQ7CisgICAgbGN0eC0+c2Vzc2lvbiA9IE5VTEw7CiAKICAgICBjLT5sb2ctPmNvbm5lY3Rpb24gPSBjLT5udW1iZXI7CiAgICAgYy0+bG9nLT5oYW5kbGVyID0gbmd4X2ltYXBfbG9nX2Vycm9yOwotICAgIGMtPmxvZy0+ZGF0YSA9IGN0eDsKKyAgICBjLT5sb2ctPmRhdGEgPSBsY3R4OwogICAgIGMtPmxvZy0+YWN0aW9uID0gInNlbmRpbmcgY2xpZW50IGdyZWV0aW5nIGxpbmUiOwogCiAgICAgYy0+bG9nX2Vycm9yID0gTkdYX0VSUk9SX0lORk87CiAKKyNpZiAoTkdYX0lNQVBfU1NMKQorCisgICAgY3R4ID0gYy0+Y3R4OworICAgIHNzbGNmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihjdHgsIG5neF9pbWFwX3NzbF9tb2R1bGUpOworCisgICAgaWYgKHNzbGNmLT5lbmFibGUpIHsKKyAgICAgICAgaWYgKG5neF9zc2xfY3JlYXRlX2Nvbm5lY3Rpb24oc3NsY2YtPnNzbF9jdHgsIGMsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGMtPnJlY3YgPSBuZ3hfc3NsX3JlY3Y7CisgICAgICAgIGMtPnNlbmQgPSBuZ3hfc3NsX3dyaXRlOworICAgICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NzbF9zZW5kX2NoYWluOworICAgIH0KKworI2VuZGlmCisKICAgICBuZ3hfaW1hcF9pbml0X3Nlc3Npb24oYy0+cmVhZCk7CiB9CiAKQEAgLTc2LDI3ICs5OSwxNSBAQAogICAgIG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAgKmNzY2Y7CiAjaWYgKE5HWF9JTUFQX1NTTCkKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKLSAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICAgICAgICpzc2xjZjsKICNlbmRpZgogCiAgICAgYyA9IHJldi0+ZGF0YTsKLQogICAgIGN0eCA9IGMtPmN0eDsKLQogICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKGN0eCwgbmd4X2ltYXBfY29yZV9tb2R1bGUpOwogCiAjaWYgKE5HWF9JTUFQX1NTTCkKIAotICAgIHNzbGNmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihjdHgsIG5neF9pbWFwX3NzbF9tb2R1bGUpOwotCi0gICAgaWYgKHNzbGNmLT5lbmFibGUpIHsKLQotICAgICAgICBpZiAobmd4X3NzbF9jcmVhdGVfc2Vzc2lvbihzc2xjZi0+c3NsX2N0eCwgYywgTkdYX1NTTF9CVUZGRVIpCi0gICAgICAgICAgICA9PSBOR1hfRVJST1IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBpZiAoYy0+c3NsKSB7CiAKICAgICAgICAgcmMgPSBuZ3hfc3NsX2hhbmRzaGFrZShjKTsKIApAQCAtMTE2LDkgKzEyNyw2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjLT5yZWN2ID0gbmd4X3NzbF9yZWN2OwotICAgICAgICBjLT5zZW5kID0gbmd4X3NzbF93cml0ZTsKLSAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zc2xfc2VuZF9jaGFpbjsKICAgICB9CiAKICNlbmRpZgpAQCAtMjc1LDExICsyODMsMTEgQEAKIHZvaWQKIG5neF9pbWFwX2F1dGhfc3RhdGUobmd4X2V2ZW50X3QgKnJldikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICp0ZXh0LCAqbGFzdCwgKnA7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqdGV4dCwgKmxhc3QsICpwLCAqZHN0LCAqc3JjLCAqZW5kOwogICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgIHRleHRfbGVuLCBsYXN0X2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICphcmc7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgdGFnOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHRhZywgaTsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICpjOwogICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICAgICAgKnM7CiAgICAgbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKQEAgLTMyNCw2ICszMzIsMjcgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19JTUFQLCBjLT5sb2csIDAsICJpbWFwIGF1dGggY29tbWFuZDogJWkiLAogICAgICAgICAgICAgICAgICAgICAgICBzLT5jb21tYW5kKTsKIAorICAgICAgICBpZiAocy0+YmFja3NsYXNoKSB7CisKKyAgICAgICAgICAgIGFyZyA9IHMtPmFyZ3MuZWx0czsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHMtPmFyZ3MubmVsdHM7IGkrKykgeworICAgICAgICAgICAgICAgIGRzdCA9IGFyZ1tpXS5kYXRhOworICAgICAgICAgICAgICAgIGVuZCA9IGRzdCArIGFyZ1tpXS5sZW47CisKKyAgICAgICAgICAgICAgICBmb3IgKHNyYyA9IGRzdDsgc3JjIDwgZW5kOyBkc3QrKykgeworICAgICAgICAgICAgICAgICAgICAqZHN0ID0gKnNyYzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpzcmMrKyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqZHN0ID0gKnNyYysrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXJnW2ldLmxlbiA9IGRzdCAtIGFyZ1tpXS5kYXRhOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzLT5iYWNrc2xhc2ggPSAwOworICAgICAgICB9CisKICAgICAgICAgc3dpdGNoIChzLT5jb21tYW5kKSB7CiAKICAgICAgICAgY2FzZSBOR1hfSU1BUF9MT0dJTjoKQEAgLTQwNSw2ICs0MzQsMTEgQEAKICAgICB9CiAKICAgICBpZiAodGFnKSB7CisgICAgICAgIGlmIChzLT50YWcubGVuID09IDApIHsKKyAgICAgICAgICAgIHMtPnRhZy5sZW4gPSBzaXplb2YoaW1hcF9zdGFyKSAtIDE7CisgICAgICAgICAgICBzLT50YWcuZGF0YSA9ICh1X2NoYXIgKikgaW1hcF9zdGFyOworICAgICAgICB9CisKICAgICAgICAgaWYgKHMtPnRhZ2dlZF9saW5lLmxlbiA8IHMtPnRhZy5sZW4gKyB0ZXh0X2xlbiArIGxhc3RfbGVuKSB7CiAgICAgICAgICAgICBzLT50YWdnZWRfbGluZS5sZW4gPSBzLT50YWcubGVuICsgdGV4dF9sZW4gKyBsYXN0X2xlbjsKICAgICAgICAgICAgIHMtPnRhZ2dlZF9saW5lLmRhdGEgPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIHMtPnRhZ2dlZF9saW5lLmxlbik7CkBAIC02OTMsNiArNzI3LDggQEAKIAogI2VuZGlmCiAKKyAgICBjLT5jbG9zZWQgPSAxOworCiAgICAgcG9vbCA9IGMtPnBvb2w7CiAKICAgICBuZ3hfY2xvc2VfY29ubmVjdGlvbihjKTsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3BhcnNlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jCmluZGV4IDM3NDYwNWUuLjQ3MzgyNWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX3BhcnNlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYwpAQCAtMjAsNyArMjAsOSBAQAogICAgICAgICBzd19jb21tYW5kLAogICAgICAgICBzd19zcGFjZXNfYmVmb3JlX2FyZ3VtZW50LAogICAgICAgICBzd19hcmd1bWVudCwKKyAgICAgICAgc3dfYmFja3NsYXNoLAogICAgICAgICBzd19saXRlcmFsLAorICAgICAgICBzd19ub19zeW5jX2xpdGVyYWxfYXJndW1lbnQsCiAgICAgICAgIHN3X3N0YXJ0X2xpdGVyYWxfYXJndW1lbnQsCiAgICAgICAgIHN3X2xpdGVyYWxfYXJndW1lbnQsCiAgICAgICAgIHN3X2VuZF9saXRlcmFsX2FyZ3VtZW50LApAQCAtMjI1LDYgKzIyNywyMiBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAgIGlmIChzLT5xdW90ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+YmFja3NsYXNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19iYWNrc2xhc2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBzd19iYWNrc2xhc2g6CisgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICBjYXNlIENSOgorICAgICAgICAgICAgY2FzZSBMRjoKKyAgICAgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfYXJndW1lbnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMjM3LDYgKzI1NSwxOCBAQAogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc3RhcnRfbGl0ZXJhbF9hcmd1bWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaCA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X25vX3N5bmNfbGl0ZXJhbF9hcmd1bWVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKworICAgICAgICBjYXNlIHN3X25vX3N5bmNfbGl0ZXJhbF9hcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChjaCA9PSAnfScpIHsKKyAgICAgICAgICAgICAgICBzLT5ub19zeW5jX2xpdGVyYWwgPSAxOworICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc3RhcnRfbGl0ZXJhbF9hcmd1bWVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKIAogICAgICAgICBjYXNlIHN3X3N0YXJ0X2xpdGVyYWxfYXJndW1lbnQ6CkBAIC0yNDYsMTAgKzI3NiwxNyBAQAogICAgICAgICAgICAgY2FzZSBMRjoKICAgICAgICAgICAgICAgICBzLT5idWZmZXItPnBvcyA9IHAgKyAxOwogICAgICAgICAgICAgICAgIHMtPmFyZ19zdGFydCA9IHAgKyAxOwotICAgICAgICAgICAgICAgIHMtPnN0YXRlID0gc3dfbGl0ZXJhbF9hcmd1bWVudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0lNQVBfTkVYVDsKKyAgICAgICAgICAgICAgICBpZiAocy0+bm9fc3luY19saXRlcmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcy0+c3RhdGUgPSBzd19saXRlcmFsX2FyZ3VtZW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0lNQVBfTkVYVDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19saXRlcmFsX2FyZ3VtZW50OworICAgICAgICAgICAgICAgIHMtPm5vX3N5bmNfbGl0ZXJhbCA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ugc3dfbGl0ZXJhbF9hcmd1bWVudDoKICAgICAgICAgICAgIGlmIChzLT5saXRlcmFsX2xlbiAmJiAtLXMtPmxpdGVyYWxfbGVuKSB7CkBAIC0zMTIsOSArMzQ5LDExIEBACiAgICAgICAgIH0KICAgICAgICAgYXJnLT5sZW4gPSBzLT5hcmdfZW5kIC0gcy0+YXJnX3N0YXJ0OwogICAgICAgICBhcmctPmRhdGEgPSBzLT5hcmdfc3RhcnQ7CisKICAgICAgICAgcy0+YXJnX3N0YXJ0ID0gTlVMTDsKICAgICAgICAgcy0+Y21kX3N0YXJ0ID0gTlVMTDsKICAgICAgICAgcy0+cXVvdGVkID0gMDsKKyAgICAgICAgcy0+bm9fc3luY19saXRlcmFsID0gMDsKICAgICAgICAgcy0+bGl0ZXJhbF9sZW4gPSAwOwogICAgIH0KIApAQCAtMzI2LDYgKzM2NSw3IEBACiAKICAgICBzLT5zdGF0ZSA9IHN3X3N0YXJ0OwogICAgIHMtPnF1b3RlZCA9IDA7CisgICAgcy0+bm9fc3luY19saXRlcmFsID0gMDsKICAgICBzLT5saXRlcmFsX2xlbiA9IDA7CiAKICAgICByZXR1cm4gTkdYX0lNQVBfUEFSU0VfSU5WQUxJRF9DT01NQU5EOwpAQCAtNDMyLDcgKzQ3MiwxNCBAQAogCiAgICAgICAgIGNhc2Ugc3dfYXJndW1lbnQ6CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICBjYXNlICcgJzoKKworICAgICAgICAgLyogCisgICAgICAgICAgKiB0aGUgc3BhY2Ugc2hvdWxkIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgYXQgdXNlcm5hbWUKKyAgICAgICAgICAqIG9yIHBhc3N3b3JkLCBidXQgbm90IG9mIGFyZ3VtZW50IGluIG90aGVyIGNvbW1hbmRzCisgICAgICAgICAgKgorICAgICAgICAgICogY2FzZSAnICc6CisgICAgICAgICAgKi8KKwogICAgICAgICAgICAgY2FzZSBDUjoKICAgICAgICAgICAgIGNhc2UgTEY6CiAgICAgICAgICAgICAgICAgYXJnID0gbmd4X2FycmF5X3B1c2goJnMtPmFyZ3MpOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYwppbmRleCA1NTAyZGM2Li44NmE0ZmY4IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wcm94eV9tb2R1bGUuYwpAQCAtMTExLDggKzExMSw4IEBACiAKICAgICByYyA9IG5neF9ldmVudF9jb25uZWN0X3BlZXIoJnAtPnVwc3RyZWFtKTsKIAotICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgcmMgPT0gTkdYX0NPTk5FQ1RfRVJST1IpIHsKLSAgICAgICAgbmd4X2ltYXBfc2Vzc2lvbl9pbnRlcm5hbF9zZXJ2ZXJfZXJyb3Iocyk7CisgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA9PSBOR1hfQlVTWSB8fCByYyA9PSBOR1hfREVDTElORUQpIHsKKyAgICAgICAgbmd4X2ltYXBfcHJveHlfaW50ZXJuYWxfc2VydmVyX2Vycm9yKHMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMKaW5kZXggYjA3MmQ5MS4uYmQ0NTc5ZSAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYwpAQCAtNzYsNiArNzYsOSBAQAogfTsKIAogCitzdGF0aWMgdV9jaGFyIG5neF9pbWFwX3Nlc3Npb25faWRfY3R4W10gPSAiSU1BUCI7CisKKwogc3RhdGljIHZvaWQgKgogbmd4X2ltYXBfc3NsX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKQogeyAgICAgICAgICAgCkBAIC0xNzYsNyArMTc5LDE2IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBTU0xfQ1RYX3NldF92ZXJpZnkoY29uZi0+c3NsX2N0eCwgU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKKyAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbF9jdHgsIFNTTF9PUF9BTEwpOworCisgICAgU1NMX0NUWF9zZXRfbW9kZShjb25mLT5zc2xfY3R4LCBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUik7CisKKyAgICBTU0xfQ1RYX3NldF9yZWFkX2FoZWFkKGNvbmYtPnNzbF9jdHgsIDEpOworCisgICAgU1NMX0NUWF9zZXRfc2Vzc2lvbl9jYWNoZV9tb2RlKGNvbmYtPnNzbF9jdHgsIFNTTF9TRVNTX0NBQ0hFX1NFUlZFUik7CisKKyAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoY29uZi0+c3NsX2N0eCwgbmd4X2ltYXBfc2Vzc2lvbl9pZF9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaW1hcF9zZXNzaW9uX2lkX2N0eCkgLSAxKTsKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCmluZGV4IGMwNTJiNjAuLjAxYTA1MTQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYwpAQCAtOSw4ICs5LDkgQEAKICNpbmNsdWRlIDxuZ3hfY2hhbm5lbC5oPgogCiAKLW5neF9pbnRfdCBuZ3hfd3JpdGVfY2hhbm5lbChuZ3hfc29ja2V0X3Qgcywgbmd4X2NoYW5uZWxfdCAqY2gsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfdCAqbG9nKSAKK25neF9pbnRfdAorbmd4X3dyaXRlX2NoYW5uZWwobmd4X3NvY2tldF90IHMsIG5neF9jaGFubmVsX3QgKmNoLCBzaXplX3Qgc2l6ZSwKKyAgICBuZ3hfbG9nX3QgKmxvZykgCiB7CiAgICAgc3NpemVfdCAgICAgICAgICAgICBuOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOwpAQCAtNzcsOCArNzgsOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfcmVhZF9jaGFubmVsKG5neF9zb2NrZXRfdCBzLCBuZ3hfY2hhbm5lbF90ICpjaCwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX3QgKmxvZykKK25neF9pbnRfdAorbmd4X3JlYWRfY2hhbm5lbChuZ3hfc29ja2V0X3Qgcywgbmd4X2NoYW5uZWxfdCAqY2gsIHNpemVfdCBzaXplLCBuZ3hfbG9nX3QgKmxvZykKIHsgICAKICAgICBzc2l6ZV90ICAgICAgICAgICAgIG47CiAgICAgbmd4X2Vycl90ICAgICAgICAgICBlcnI7CkBAIC0xNzgsMzEgKzE3OSw0MCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfYWRkX2NoYW5uZWxfZXZlbnQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfZmRfdCBmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2ludF90IGV2ZW50LCBuZ3hfZXZlbnRfaGFuZGxlcl9wdCBoYW5kbGVyKQorbmd4X2ludF90CituZ3hfYWRkX2NoYW5uZWxfZXZlbnQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfZmRfdCBmZCwgbmd4X2ludF90IGV2ZW50LAorICAgIG5neF9ldmVudF9oYW5kbGVyX3B0IGhhbmRsZXIpCiB7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgKmV2LCAqcmV2LCAqd2V2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCi0gICAgYyA9ICZjeWNsZS0+Y29ubmVjdGlvbnNbZmRdOwotICAgIHJldiA9ICZjeWNsZS0+cmVhZF9ldmVudHNbZmRdOwotICAgIHdldiA9ICZjeWNsZS0+d3JpdGVfZXZlbnRzW2ZkXTsKKyAgICBjID0gbmd4X2dldF9jb25uZWN0aW9uKGZkLCBjeWNsZS0+bG9nKTsKKworICAgIGlmIChjID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICByZXYgPSBjLT5yZWFkOworICAgIHdldiA9IGMtPndyaXRlOwogCiAgICAgbmd4X21lbXplcm8oYywgc2l6ZW9mKG5neF9jb25uZWN0aW9uX3QpKTsKLSAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOwotICAgIG5neF9tZW16ZXJvKHdldiwgc2l6ZW9mKG5neF9ldmVudF90KSk7Ci0KLSAgICBjLT5mZCA9IGZkOwotICAgIGMtPnBvb2wgPSBjeWNsZS0+cG9vbDsKIAogICAgIGMtPnJlYWQgPSByZXY7CiAgICAgYy0+d3JpdGUgPSB3ZXY7Ci0KKyAgICBjLT5mZCA9IGZkOwogICAgIGMtPmxvZyA9IGN5Y2xlLT5sb2c7CisKKyAgICBjLT5wb29sID0gY3ljbGUtPnBvb2w7CisKKyAgICBuZ3hfbWVtemVybyhyZXYsIHNpemVvZihuZ3hfZXZlbnRfdCkpOworICAgIG5neF9tZW16ZXJvKHdldiwgc2l6ZW9mKG5neF9ldmVudF90KSk7CisKICAgICByZXYtPmxvZyA9IGN5Y2xlLT5sb2c7CiAgICAgd2V2LT5sb2cgPSBjeWNsZS0+bG9nOworCiAgICAgcmV2LT5pbmRleCA9IE5HWF9JTlZBTElEX0lOREVYOwogICAgIHdldi0+aW5kZXggPSBOR1hfSU5WQUxJRF9JTkRFWDsKKwogICAgIHJldi0+ZGF0YSA9IGM7CiAgICAgd2V2LT5kYXRhID0gYzsKIApAQCAtMjE5LDExICsyMjksMTMgQEAKIAogICAgIGlmIChuZ3hfYWRkX2Nvbm4gJiYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfRVBPTExfRVZFTlQpID09IDApIHsKICAgICAgICAgaWYgKG5neF9hZGRfY29ubihjKSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIG5neF9mcmVlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgCiAgICAgfSBlbHNlIHsgCiAgICAgICAgIGlmIChuZ3hfYWRkX2V2ZW50KGV2LCBldmVudCwgMCkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICBuZ3hfZnJlZV9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMiw3ICsyNDQsOCBAQAogfQogCiAKLXZvaWQgbmd4X2Nsb3NlX2NoYW5uZWwobmd4X2ZkX3QgKmZkLCBuZ3hfbG9nX3QgKmxvZykKK3ZvaWQKK25neF9jbG9zZV9jaGFubmVsKG5neF9mZF90ICpmZCwgbmd4X2xvZ190ICpsb2cpCiB7CiAgICAgaWYgKGNsb3NlKGZkWzBdKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLCAiY2xvc2UoKSBjaGFubmVsIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuaCBiL3NyYy9vcy91bml4L25neF9jaGFubmVsLmgKaW5kZXggYThjODY2My4uMzY1ZDQzOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5oCkBAIC0yMiwxMSArMjIsMTEgQEAKIAogCiBuZ3hfaW50X3Qgbmd4X3dyaXRlX2NoYW5uZWwobmd4X3NvY2tldF90IHMsIG5neF9jaGFubmVsX3QgKmNoLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX3QgKmxvZyk7CisgICAgbmd4X2xvZ190ICpsb2cpOwogbmd4X2ludF90IG5neF9yZWFkX2NoYW5uZWwobmd4X3NvY2tldF90IHMsIG5neF9jaGFubmVsX3QgKmNoLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfdCAqbG9nKTsKKyAgICBuZ3hfbG9nX3QgKmxvZyk7CiBuZ3hfaW50X3Qgbmd4X2FkZF9jaGFubmVsX2V2ZW50KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X2ZkX3QgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9pbnRfdCBldmVudCwgbmd4X2V2ZW50X2hhbmRsZXJfcHQgaGFuZGxlcik7CisgICAgbmd4X2ludF90IGV2ZW50LCBuZ3hfZXZlbnRfaGFuZGxlcl9wdCBoYW5kbGVyKTsKIHZvaWQgbmd4X2Nsb3NlX2NoYW5uZWwobmd4X2ZkX3QgKmZkLCBuZ3hfbG9nX3QgKmxvZyk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2Vycm5vLmggYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAppbmRleCAzMTBhMWRjLi5lNTUwNzg4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZXJybm8uaApAQCAtMzMsNiArMzMsNyBAQAogI2RlZmluZSBOR1hfRU5PVENPTk4gICAgICBFTk9UQ09OTgogI2RlZmluZSBOR1hfRVRJTUVET1VUICAgICBFVElNRURPVVQKICNkZWZpbmUgTkdYX0VDT05OUkVGVVNFRCAgRUNPTk5SRUZVU0VECisjZGVmaW5lIE5HWF9FTkFNRVRPT0xPTkcgIEVOQU1FVE9PTE9ORwogI2RlZmluZSBOR1hfRUhPU1RVTlJFQUNIICBFSE9TVFVOUkVBQ0gKICNkZWZpbmUgTkdYX0VOT1NZUyAgICAgICAgRU5PU1lTCiAjZGVmaW5lIE5HWF9FQ0FOQ0VMRUQgICAgIEVDQU5DRUxFRApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKaW5kZXggZWFmN2FlNC4uN2YyNWY5MSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBtb3JlIHRoYW4gJWQgcHJvY2Vzc2VzIGNhbiBiZSBzcGF3bmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX01BWF9QUk9DRVNTRVMpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOR1hfSU5WQUxJRF9QSUQ7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvY2tldHBhaXIoKSBmYWlsZWQgd2hpbGUgc3Bhd25pbmcgXCIlc1wiIiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5HWF9JTlZBTElEX1BJRDsKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQ09SRSwgY3ljbGUtPmxvZywgMCwKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbm9uYmxvY2tpbmdfbiAiIGZhaWxlZCB3aGlsZSBzcGF3bmluZyBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKICAgICAgICAgICAgIG5neF9jbG9zZV9jaGFubmVsKG5neF9wcm9jZXNzZXNbc10uY2hhbm5lbCwgY3ljbGUtPmxvZyk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5HWF9JTlZBTElEX1BJRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfbm9uYmxvY2tpbmcobmd4X3Byb2Nlc3Nlc1tzXS5jaGFubmVsWzFdKSA9PSAtMSkgewpAQCAtMTI4LDcgKzEyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ub25ibG9ja2luZ19uICIgZmFpbGVkIHdoaWxlIHNwYXduaW5nIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgICAgbmd4X2Nsb3NlX2NoYW5uZWwobmd4X3Byb2Nlc3Nlc1tzXS5jaGFubmVsLCBjeWNsZS0+bG9nKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTkdYX0lOVkFMSURfUElEOwogICAgICAgICB9CiAKICAgICAgICAgb24gPSAxOwpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiaW9jdGwoRklPQVNZTkMpIGZhaWxlZCB3aGlsZSBzcGF3bmluZyBcIiVzXCIiLCBuYW1lKTsKICAgICAgICAgICAgIG5neF9jbG9zZV9jaGFubmVsKG5neF9wcm9jZXNzZXNbc10uY2hhbm5lbCwgY3ljbGUtPmxvZyk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5HWF9JTlZBTElEX1BJRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmY250bChuZ3hfcHJvY2Vzc2VzW3NdLmNoYW5uZWxbMF0sIEZfU0VUT1dOLCBuZ3hfcGlkKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmY250bChGX1NFVE9XTikgZmFpbGVkIHdoaWxlIHNwYXduaW5nIFwiJXNcIiIsIG5hbWUpOwogICAgICAgICAgICAgbmd4X2Nsb3NlX2NoYW5uZWwobmd4X3Byb2Nlc3Nlc1tzXS5jaGFubmVsLCBjeWNsZS0+bG9nKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTkdYX0lOVkFMSURfUElEOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGZjbnRsKG5neF9wcm9jZXNzZXNbc10uY2hhbm5lbFswXSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmNudGwoRkRfQ0xPRVhFQykgZmFpbGVkIHdoaWxlIHNwYXduaW5nIFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKICAgICAgICAgICAgIG5neF9jbG9zZV9jaGFubmVsKG5neF9wcm9jZXNzZXNbc10uY2hhbm5lbCwgY3ljbGUtPmxvZyk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5HWF9JTlZBTElEX1BJRDsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmY250bChuZ3hfcHJvY2Vzc2VzW3NdLmNoYW5uZWxbMV0sIEZfU0VURkQsIEZEX0NMT0VYRUMpID09IC0xKSB7CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZjbnRsKEZEX0NMT0VYRUMpIGZhaWxlZCB3aGlsZSBzcGF3bmluZyBcIiVzXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgICAgICBuZ3hfY2xvc2VfY2hhbm5lbChuZ3hfcHJvY2Vzc2VzW3NdLmNoYW5uZWwsIGN5Y2xlLT5sb2cpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOR1hfSU5WQUxJRF9QSUQ7CiAgICAgICAgIH0KIAogICAgICAgICBuZ3hfY2hhbm5lbCA9IG5neF9wcm9jZXNzZXNbc10uY2hhbm5lbFsxXTsKQEAgLTE4MCw3ICsxODAsNyBAQAogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAiZm9yaygpIGZhaWxlZCB3aGlsZSBzcGF3bmluZyBcIiVzXCIiLCBuYW1lKTsKICAgICAgICAgbmd4X2Nsb3NlX2NoYW5uZWwobmd4X3Byb2Nlc3Nlc1tzXS5jaGFubmVsLCBjeWNsZS0+bG9nKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIE5HWF9JTlZBTElEX1BJRDsKIAogICAgIGNhc2UgMDoKICAgICAgICAgbmd4X3BpZCA9IG5neF9nZXRwaWQoKTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmggYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5oCmluZGV4IDM2ODRiMTUuLjA2ZmYyMWMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuaApAQCAtMTMsNiArMTMsOCBAQAogCiB0eXBlZGVmIHBpZF90ICAgICAgIG5neF9waWRfdDsKIAorI2RlZmluZSBOR1hfSU5WQUxJRF9QSUQgIC0xCisKIHR5cGVkZWYgdm9pZCAoKm5neF9zcGF3bl9wcm9jX3B0KSAobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpkYXRhKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggMGM4ZmRkMi4uMDM0YjA5ZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC01MTMsOSArNTEzLDEwIEBACiBzdGF0aWMgbmd4X3VpbnRfdAogbmd4X3JlYXBfY2hpbGRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBuZ3hfaW50X3QgICAgICBpLCBuOwotICAgIG5neF91aW50X3QgICAgIGxpdmU7Ci0gICAgbmd4X2NoYW5uZWxfdCAgY2g7CisgICAgbmd4X2ludF90ICAgICAgICAgaSwgbjsKKyAgICBuZ3hfdWludF90ICAgICAgICBsaXZlOworICAgIG5neF9jaGFubmVsX3QgICAgIGNoOworICAgIG5neF9jb3JlX2NvbmZfdCAgKmNjZjsKIAogICAgIGNoLmNvbW1hbmQgPSBOR1hfQ01EX0NMT1NFX0NIQU5ORUw7CiAgICAgY2guZmQgPSAtMTsKQEAgLTU3NSw3ICs1NzYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChuZ3hfc3Bhd25fcHJvY2VzcyhjeWNsZSwgbmd4X3Byb2Nlc3Nlc1tpXS5wcm9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW2ldLmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wcm9jZXNzZXNbaV0ubmFtZSwgaSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0lOVkFMSURfUElEKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4gbm90IHJlc3Bhd24gJXMiLCBuZ3hfcHJvY2Vzc2VzW2ldLm5hbWUpOwpAQCAtNjE1LDYgKzYxNiwyMCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAobmd4X3Byb2Nlc3Nlc1tpXS5waWQgPT0gbmd4X25ld19iaW5hcnkpIHsKKworICAgICAgICAgICAgICAgIGNjZiA9IChuZ3hfY29yZV9jb25mX3QgKikgbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY29yZV9tb2R1bGUpOworCisgICAgICAgICAgICAgICAgaWYgKG5neF9yZW5hbWVfZmlsZSgoY2hhciAqKSBjY2YtPm9sZHBpZC5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgY2NmLT5waWQuZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgIT0gTkdYX09LKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3JlbmFtZV9maWxlX24gIiAlcyBiYWNrIHRvICVzIGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFmdGVyIHRoZSBuZXcgYmluYXJ5IHByb2Nlc3MgXCIlc1wiIGV4aXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NmLT5vbGRwaWQuZGF0YSwgY2NmLT5waWQuZGF0YSwgbmd4X2FyZ3ZbMF0pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIG5neF9uZXdfYmluYXJ5ID0gMDsKICAgICAgICAgICAgICAgICBpZiAobmd4X25vYWNjZXB0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG5neF9yZXN0YXJ0ID0gMTsKQEAgLTc5NSw2ICs4MTAsNyBAQAogICAgIHNpZ3NldF90ICAgICAgICAgICBzZXQ7CiAgICAgbmd4X2ludF90ICAgICAgICAgIG47CiAgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CisgICAgc3RydWN0IHJsaW1pdCAgICAgIHJsbXQ7CiAgICAgc3RydWN0IHRpbWV2YWwgICAgIHR2OwogICAgIG5neF9jb3JlX2NvbmZfdCAgICpjY2Y7CiAgICAgbmd4X2xpc3RlbmluZ190ICAgKmxzOwpAQCAtODE4LDYgKzgzNCwzMCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKGNjZi0+cmxpbWl0X25vZmlsZSAhPSBOR1hfQ09ORl9VTlNFVCkgeworICAgICAgICAgICAgcmxtdC5ybGltX2N1ciA9IChybGltX3QpIGNjZi0+cmxpbWl0X25vZmlsZTsKKyAgICAgICAgICAgIHJsbXQucmxpbV9tYXggPSAocmxpbV90KSBjY2YtPnJsaW1pdF9ub2ZpbGU7CisKKyAgICAgICAgICAgIGlmIChzZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsbXQpID09IC0xKSB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICVpKSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NmLT5ybGltaXRfbm9maWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisjaWZkZWYgUkxJTUlUX1NJR1BFTkRJTkcKKyAgICAgICAgaWYgKGNjZi0+cmxpbWl0X3NpZ3BlbmRpbmcgIT0gTkdYX0NPTkZfVU5TRVQpIHsKKyAgICAgICAgICAgIHJsbXQucmxpbV9jdXIgPSAocmxpbV90KSBjY2YtPnJsaW1pdF9zaWdwZW5kaW5nOworICAgICAgICAgICAgcmxtdC5ybGltX21heCA9IChybGltX3QpIGNjZi0+cmxpbWl0X3NpZ3BlbmRpbmc7CisKKyAgICAgICAgICAgIGlmIChzZXRybGltaXQoUkxJTUlUX1NJR1BFTkRJTkcsICZybG10KSA9PSAtMSkgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHJsaW1pdChSTElNSVRfU0lHUEVORElORywgJWkpIGZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY2YtPnJsaW1pdF9zaWdwZW5kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgaWYgKHNldGdpZChjY2YtPmdyb3VwKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRnaWQoJWQpIGZhaWxlZCIsIGNjZi0+Z3JvdXApOwpAQCAtODc0LDcgKzkxNCw3IEBACiAgICAgICovIAogICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLSAgICAgICAgbHNbaV0ucmVtYWluID0gMDsKKyAgICAgICAgbHNbaV0ucHJldmlvdXMgPSBOVUxMOwogICAgIH0KIAogICAgIGZvciAoaSA9IDA7IG5neF9tb2R1bGVzW2ldOyBpKyspIHsKQEAgLTkyOCw2ICs5NjgsNyBAQAogbmd4X2NoYW5uZWxfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgIG47CisgICAgbmd4X3NvY2tldF90ICAgICAgIGZkOwogICAgIG5neF9jaGFubmVsX3QgICAgICBjaDsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKIApAQCAtOTQ1LDEyICs5ODYsMTcgQEAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGV2LT5sb2csIDAsICJjaGFubmVsOiAlaSIsIG4pOwogCiAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIGlmIChjbG9zZShjLT5mZCkgPT0gLTEpIHsKKworICAgICAgICBuZ3hfZnJlZV9jb25uZWN0aW9uKGMpOworCisgICAgICAgIGZkID0gYy0+ZmQ7CisgICAgICAgIGMtPmZkID0gKG5neF9zb2NrZXRfdCkgLTE7CisKKyAgICAgICAgaWYgKGNsb3NlKGZkKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBldi0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSgpIGNoYW5uZWwgZmFpbGVkIik7CiAgICAgICAgIH0KIAotICAgICAgICBjLT5mZCA9IC0xOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMTQ0LDcgKzExOTAsNyBAQAogCiAgICAgbmd4X3dvcmtlcl9wcm9jZXNzX2luaXQoY3ljbGUsIDApOwogCi0gICAgZXYgPSAmY3ljbGUtPnJlYWRfZXZlbnRzW25neF9jaGFubmVsXTsKKyAgICBldiA9ICZjeWNsZS0+cmVhZF9ldmVudHMwW25neF9jaGFubmVsXTsKIAogICAgIG5neF9hY2NlcHRfbXV0ZXggPSBOVUxMOwogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmggYi9zcmMvb3Mvd2luMzIvbmd4X2Vycm5vLmgKaW5kZXggMzcxYjcyOS4uNDZmNDM4MiAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9lcnJuby5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfZXJybm8uaApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBOR1hfRU5PVENPTk4gICAgICAgICAgICAgICBXU0FFTk9UQ09OTgogI2RlZmluZSBOR1hfRVRJTUVET1VUICAgICAgICAgICAgICBXU0FFVElNRURPVVQKICNkZWZpbmUgTkdYX0VDT05OUkVGVVNFRCAgICAgICAgICAgV1NBRUNPTk5SRUZVU0VECisjZGVmaW5lIE5HWF9FTkFNRVRPT0xPTkcgICAgICAgICAgIEVSUk9SX0JBRF9QQVRITkFNRQogI2RlZmluZSBOR1hfRUhPU1RVTlJFQUNIICAgICAgICAgICBXU0FFSE9TVFVOUkVBQ0gKICNkZWZpbmUgTkdYX0VOT01PUkVGSUxFUyAgICAgICAgICAgRVJST1JfTk9fTU9SRV9GSUxFUwogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3MuaCBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCmluZGV4IGEyODJkMTcuLmJkMjgyYjIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzcy5oCkBAIC04LDcgKzgsOSBAQAogI2RlZmluZSBfTkdYX1BST0NFU1NfSF9JTkNMVURFRF8KIAogCi10eXBlZGVmIERXT1JEICAgICAgICBuZ3hfcGlkX3Q7Cit0eXBlZGVmIERXT1JEICAgICAgICAgICAgbmd4X3BpZF90OworI2RlZmluZSBOR1hfSU5WQUxJRF9QSUQgIDAKKwogCiAjZGVmaW5lIG5neF9nZXRwaWQgICBHZXRDdXJyZW50UHJvY2Vzc0lkCiAjZGVmaW5lIG5neF9sb2dfcGlkICBuZ3hfcGlkCg==