ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggYWYyNzlmYS4uMTdiYjEzOCAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTM3LDcgKzM3LDcgQEAKIGNhc2UgIiROR1hfUExBVEZPUk0iIGluCiAKICAgICAqOnN1bjR1KQotICAgICAgICAjICItbWNwdT12OSIgZW5hYmxlcyB0aGUgImNhc3hhIiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24KKyAgICAgICAgIyAiLW1jcHU9djkiIGVuYWJsZXMgdGhlICJjYXNhIiBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb24KICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1tY3B1PXY5IgogICAgIDs7CiAKQEAgLTEzNCw2ICsxMzQsOCBAQAogICAgICAgICAjIHdlIGhhdmUgYSBsb3Qgb2YgdGhlIHVudXNlZCBmdW5jdGlvbiBhcmd1bWVudHMKICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tdW51c2VkLXBhcmFtZXRlciIKICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xbm8tdW51c2VkLWZ1bmN0aW9uIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVd1bnVzZWQtdmFyaWFibGUiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV3VudXNlZC12YWx1ZSIKICAgICAgICAgI0NGTEFHUz0iJENGTEFHUyAtV3VucmVhY2hhYmxlLWNvZGUiCiAgICAgOzsKIApkaWZmIC0tZ2l0IGEvYXV0by9jYy9pY2MgYi9hdXRvL2NjL2ljYwppbmRleCAwYWE5NzVlLi5kM2ExNTFjIDEwMDY0NAotLS0gYS9hdXRvL2NjL2ljYworKysgYi9hdXRvL2NjL2ljYwpAQCAtMjIsOCArMjIsMTggQEAKIAogIyBzaW5nbGUtZmlsZSBJUCBvcHRpbWl6YXRpb25zCiAjSVBPPSItaXAiCisKICMgbXVsdGktZmlsZSBJUCBvcHRpbWl6YXRpb25zCi1JUE89Ii1pcG8gLWlwb19vYmoiCitjYXNlICIkTkdYX0lDQ19WRVIiIGluCisgICAgOS4qKQorICAgICAgICBJUE89Ii1pcG8iCisgICAgOzsKKworICAgICopCisgICAgICAgIElQTz0iLWlwbyAtaXBvX29iaiIKKyAgICA7OworZXNhYworCiBDRkxBR1M9IiRDRkxBR1MgJElQTyIKIENPUkVfTElOSz0iJENPUkVfTElOSyAkSVBPIgogQ09SRV9MSU5LPSIkQ09SRV9MSU5LIC1vcHRfcmVwb3J0X2ZpbGU9JE5HWF9PQkpTL29wdF9yZXBvcnRfZmlsZSIKQEAgLTcyLDcgKzgyLDcgQEAKIENGTEFHUz0iJENGTEFHUyAtd2QxODEiCiAjIHplcm8gdXNlZCBmb3IgdW5kZWZpbmVkIHByZXByb2Nlc3NpbmcgaWRlbnRpZmllcgogQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE5MyIKLSN0aGUgZm9ybWF0IHN0cmluZyBlbmRzIGJlZm9yZSB0aGlzIGFyZ3VtZW50CisjIHRoZSBmb3JtYXQgc3RyaW5nIGVuZHMgYmVmb3JlIHRoaXMgYXJndW1lbnQKIENGTEFHUz0iJENGTEFHUyAtd2QyNjgiCiAjIGludmFsaWQgZm9ybWF0IHN0cmluZyBjb252ZXJzaW9uCiBDRkxBR1M9IiRDRkxBR1MgLXdkMjY5IgpAQCAtOTIsMTUgKzEwMiwxNyBAQAogQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE0MTgiCiAjIGV4dGVybmFsIGRlY2xhcmF0aW9uIGluIHByaW1hcnkgc291cmNlIGZpbGUKIENGTEFHUz0iJENGTEFHUyAtd2QxNDE5IgotIyBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyIGludGVncmFsIHR5cGUKLUNGTEFHUz0iJENGTEFHUyAtd2QxNjgzIgotIyBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUsIHdhcm5pbmcgb24gb2Zmc2V0b2YoKQotQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE2ODQiCiAKIGNhc2UgIiROR1hfSUNDX1ZFUiIgaW4KICAgICA4LiogfCA5LiopCiAgICAgICAgICMgImNjIiBjbG9iYmVyIGlnbm9yZWQsIHdhcm5pbmdzIGZvciBMaXVueCdzIGh0b25zKCkKICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE0NjkiCisgICAgICAgICMgZXhwbGljaXQgY29udmVyc2lvbiBvZiBhIDY0LWJpdCBpbnRlZ3JhbCB0eXBlIHRvIGEgc21hbGxlcgorICAgICAgICAjIGludGVncmFsIHR5cGUKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC13ZDE2ODMiCisgICAgICAgICMgY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gc2FtZS1zaXplZCBpbnRlZ3JhbCB0eXBlLAorICAgICAgICAjIHdhcm5pbmcgb24gb2Zmc2V0b2YoKQorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXdkMTY4NCIKIAogICAgICAgICAjIFNUVUIKICAgICAgICAgIyBub24tUE9EIGNsYXNzIHR5cGUgcGFzc2VkIHRocm91Z2ggZWxsaXBzaXMsIExpbnV4IG9ubHkgPwpkaWZmIC0tZ2l0IGEvYXV0by9jYy9uYW1lIGIvYXV0by9jYy9uYW1lCmluZGV4IGZhYTMyOTAuLjcyMDJhYWEgMTAwNjQ0Ci0tLSBhL2F1dG8vY2MvbmFtZQorKysgYi9hdXRvL2NjL25hbWUKQEAgLTExLDQ3ICsxMSw0NyBAQAogICAgICAgICAgIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KIAogICAgICAgICBOR1hfQ0NfTkFNRT1tc3ZjNwotICAgICAgICBlY2hvICIgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBDKysgNyBjb21waWxlciIKKyAgICAgICAgZWNobyAiIE1pY3Jvc29mdCBWaXN1YWwgQysrIDcgY29tcGlsZXIiCiAKICAgICBlbHNlCiAgICAgICAgIE5HWF9DQ19OQU1FPW1zdmMKLSAgICAgICAgZWNobyAiIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIgorICAgICAgICBlY2hvICIgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIiCiAgICAgZmkKIAogZWxzZQogaWYgWyAkQ0MgPSB3Y2wzODYgXTsgdGhlbgogICAgIE5HWF9DQ19OQU1FPW93YwotICAgIGVjaG8gIiB1c2luZyBPcGVuIFdhdGNvbSBDIGNvbXBpbGVyIgorICAgIGVjaG8gIiBPcGVuIFdhdGNvbSBDIGNvbXBpbGVyIgogCiBlbHNlCiBpZiBbICRDQyA9IGJjYzMyIF07IHRoZW4KICAgICBOR1hfQ0NfTkFNRT1iY2MKLSAgICBlY2hvICIgdXNpbmcgQm9ybGFuZCBDKysgY29tcGlsZXIiCisgICAgZWNobyAiIEJvcmxhbmQgQysrIGNvbXBpbGVyIgogCiBlbHNlCiBpZiBgJENDIC12IDI+JjEgfCBncmVwICdnY2MgdmVyc2lvbicgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgogICAgIE5HWF9DQ19OQU1FPWdjYwotICAgIGVjaG8gIiB1c2luZyBHTlUgQyBjb21waWxlciIKKyAgICBlY2hvICIgR05VIEMgY29tcGlsZXIiCiAKIGVsc2UKIGlmIGAkQ0MgLVYgMj4mMSB8IGdyZXAgJ15JbnRlbChSKSBDJyAyPiYxID4vZGV2L251bGxgOyB0aGVuCiAgICAgTkdYX0NDX05BTUU9aWNjCi0gICAgZWNobyAiIHVzaW5nIEludGVsIEMrKyBjb21waWxlciIKKyAgICBlY2hvICIgSW50ZWwgQysrIGNvbXBpbGVyIgogCiBlbHNlCiBpZiBgJENDIC1WIDI+JjEgfCBncmVwICdTdW4gQycgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgogICAgIE5HWF9DQ19OQU1FPXN1bmMKLSAgICBlY2hvICIgdXNpbmcgU3VuIEMgY29tcGlsZXIiCisgICAgZWNobyAiIFN1biBDIGNvbXBpbGVyIgogCiBlbHNlCiBpZiBgJENDIC1WIDI+JjEgfCBncmVwICdeQ29tcGFxIEMnIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KICAgICBOR1hfQ0NfTkFNRT1jY2MKLSAgICBlY2hvICIgdXNpbmcgQ29tcGFxIEMgY29tcGlsZXIiCisgICAgZWNobyAiIENvbXBhcSBDIGNvbXBpbGVyIgogCiBlbHNlCiBpZiBgJENDIC1WIDI+JjEgfCBncmVwICdeYUNDOiAnIDI+JjEgPi9kZXYvbnVsbGA7IHRoZW4KICAgICBOR1hfQ0NfTkFNRT1hY2MKLSAgICBlY2hvICIgdXNpbmcgSFAgYUMrKyBjb21waWxlciIKKyAgICBlY2hvICIgSFAgYUMrKyBjb21waWxlciIKIAogZWxzZQogICAgIE5HWF9DQ19OQU1FPXVua25vd24KZGlmZiAtLWdpdCBhL2F1dG8vY29uZmlndXJlIGIvYXV0by9jb25maWd1cmUKaW5kZXggZGFmZjRiZC4uODkzOTBlYSAxMDA3NTUKLS0tIGEvYXV0by9jb25maWd1cmUKKysrIGIvYXV0by9jb25maWd1cmUKQEAgLTE5LDEyICsxOSwyOCBAQAogZmkKIAogCitpZiB0ZXN0IC16ICIkTkdYX1BMQVRGT1JNIjsgdGhlbgorICAgIGVjaG8gImNoZWNraW5nIGZvciBPUyIKKworICAgIE5HWF9TWVNURU09YHVuYW1lIC1zIDI+L2Rldi9udWxsYAorICAgIE5HWF9SRUxFQVNFPWB1bmFtZSAtciAyPi9kZXYvbnVsbGAKKyAgICBOR1hfTUFDSElORT1gdW5hbWUgLW0gMj4vZGV2L251bGxgCisKKyAgICBlY2hvICIgKyAkTkdYX1NZU1RFTSAkTkdYX1JFTEVBU0UgJE5HWF9NQUNISU5FIgorCisgICAgTkdYX1BMQVRGT1JNPSIkTkdYX1NZU1RFTTokTkdYX1JFTEVBU0U6JE5HWF9NQUNISU5FIjsKKworZWxzZQorICAgIGVjaG8gImJ1aWxkaW5nIGZvciAkTkdYX1BMQVRGT1JNIgorZmkKKworCiBpZiBbICIkTkdYX1BMQVRGT1JNIiAhPSB3aW4zMiBdOyB0aGVuCiAgICAgLiBhdXRvL2hlYWRlcnMKIGZpCiAKLS4gYXV0by9vcy9jb25mCiAuIGF1dG8vY2MvY29uZgorLiBhdXRvL29zL2NvbmYKIAogaWYgWyAiJE5HWF9QTEFURk9STSIgIT0gd2luMzIgXTsgdGhlbgogICAgIC4gYXV0by9vcy9mZWF0dXJlcwpkaWZmIC0tZ2l0IGEvYXV0by9vcy9jb25mIGIvYXV0by9vcy9jb25mCmluZGV4IDY5ODEzY2UuLjU2YmRkMjIgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvY29uZgorKysgYi9hdXRvL29zL2NvbmYKQEAgLTIsMjAgKzIsNyBAQAogIyBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAKIAotaWYgdGVzdCAteiAiJE5HWF9QTEFURk9STSI7IHRoZW4KLSAgICBlY2hvICJjaGVja2luZyBmb3IgT1MiCi0KLSAgICBOR1hfU1lTVEVNPWB1bmFtZSAtcyAyPi9kZXYvbnVsbGAKLSAgICBOR1hfUkVMRUFTRT1gdW5hbWUgLXIgMj4vZGV2L251bGxgCi0gICAgTkdYX01BQ0hJTkU9YHVuYW1lIC1tIDI+L2Rldi9udWxsYAotCi0gICAgZWNobyAiICsgJE5HWF9TWVNURU0gJE5HWF9SRUxFQVNFICROR1hfTUFDSElORSIKLQotICAgIE5HWF9QTEFURk9STT0iJE5HWF9TWVNURU06JE5HWF9SRUxFQVNFOiROR1hfTUFDSElORSI7Ci0KLWVsc2UKLSAgICBlY2hvICJidWlsZGluZyBmb3IgJE5HWF9QTEFURk9STSIKLWZpCitlY2hvICJjaGVja2luZyBmb3IgJE5HWF9TWVNURU0gc3BlY2lmaWMgZmVhdHVyZXMiCiAKIGNhc2UgIiROR1hfUExBVEZPUk0iIGluCiAKZGlmZiAtLWdpdCBhL2F1dG8vb3MvZmVhdHVyZXMgYi9hdXRvL29zL2ZlYXR1cmVzCmluZGV4IDQ0YzMzY2QuLjNlYzkxMTAgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvZmVhdHVyZXMKKysrIGIvYXV0by9vcy9mZWF0dXJlcwpAQCAtOTIsNiArOTIsOSBAQAogCiBpZiBbICIkTkdYX1NZU1RFTSIgPSAiTmV0QlNEIiBdOyB0aGVuCiAKKyAgICBoYXZlPU5HWF9IQVZFX1RJTUVSX0VWRU5UIC4gYXV0by9oYXZlCisgICAgZWNobyAiICsga3F1ZXVlJ3MgRVZGSUxUX1RJTUVSIGZvdW5kIgorCiAgICAgIyBOZXRCU0QgMi4wIGluY29tcGF0aWJseSBkZWZpbmVzIGtldmVudC51ZGF0YSBhcyAiaW50cHRyX3QiCiAKICAgICBjYXQgPDwgRU5EID4+ICROR1hfQVVUT19DT05GSUdfSApkaWZmIC0tZ2l0IGEvYXV0by9vcy9mcmVlYnNkIGIvYXV0by9vcy9mcmVlYnNkCmluZGV4IGU1NDUxMjIuLjg3MGVjOTIgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvZnJlZWJzZAorKysgYi9hdXRvL29zL2ZyZWVic2QKQEAgLTM3LDcgKzM3LDcgQEAKICMgc2VuZGZpbGUKIAogaWYgWyAkb3NyZWxkYXRlIC1ndCAzMDAwMDcgXTsgdGhlbgotICAgIGVjaG8gIiArIHVzaW5nIHNlbmRmaWxlKCkiCisgICAgZWNobyAiICsgc2VuZGZpbGUoKSBmb3VuZCIKIAogICAgIGhhdmU9TkdYX0hBVkVfU0VOREZJTEUgLiBhdXRvL2hhdmUKICAgICBDT1JFX1NSQ1M9IiRDT1JFX1NSQ1MgJEZSRUVCU0RfU0VOREZJTEVfU1JDUyIKQEAgLTQ5LDcgKzQ5LDcgQEAKIGlmIFsgXCggJG9zcmVsZGF0ZSAtbHQgNTAwMDAwIC1hICRvc3JlbGRhdGUgLWdlIDQxMDAwMCBcKSBcCiAgICAgIC1vICRvc3JlbGRhdGUgLWdlIDUwMDAxMSBdCiB0aGVuCi0gICAgZWNobyAiICsgdXNpbmcga3F1ZXVlIgorICAgIGVjaG8gIiArIGtxdWV1ZSBmb3VuZCIKIAogICAgIGhhdmU9TkdYX0hBVkVfS1FVRVVFIC4gYXV0by9oYXZlCiAgICAgaGF2ZT1OR1hfSEFWRV9DTEVBUl9FVkVOVCAuIGF1dG8vaGF2ZQpAQCAtNjcsMTAgKzY3LDE5IEBACiBpZiBbIFwoICR2ZXJzaW9uIC1sdCA1MDAwMDAgLWEgJHZlcnNpb24gLWdlIDQzMDAwMCBcKSBcCiAgICAgIC1vICR2ZXJzaW9uIC1nZSA1MDAwMTggXQogdGhlbgotICAgIGVjaG8gIiArIHVzaW5nIGtxdWV1ZSdzIE5PVEVfTE9XQVQiCisgICAgZWNobyAiICsga3F1ZXVlJ3MgTk9URV9MT1dBVCBmb3VuZCIKICAgICBoYXZlPU5HWF9IQVZFX0xPV0FUX0VWRU5UIC4gYXV0by9oYXZlCiBmaQogCisjIGtxdWV1ZSdzIEVWRklMVF9USU1FUgorCitpZiBbIFwoICR2ZXJzaW9uIC1sdCA1MDAwMDAgLWEgJHZlcnNpb24gLWdlIDQ0MDAwMSBcKSBcCisgICAgIC1vICR2ZXJzaW9uIC1nZSA1MDAwMjMgXQordGhlbgorICAgIGVjaG8gIiArIGtxdWV1ZSdzIEVWRklMVF9USU1FUiBmb3VuZCIKKyAgICBoYXZlPU5HWF9IQVZFX1RJTUVSX0VWRU5UIC4gYXV0by9oYXZlCitmaQorCiAKIGlmIFsgJFVTRV9USFJFQURTID0gInJmb3JrIiBdOyB0aGVuCiAKZGlmZiAtLWdpdCBhL2F1dG8vb3MvbGludXggYi9hdXRvL29zL2xpbnV4CmluZGV4IDMyZWY0Y2IuLmMzMWY4NDggMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvbGludXgKKysrIGIvYXV0by9vcy9saW51eApAQCAtMjUsNyArMjUsNyBAQAogIyBlbmFibGUgdGhlIHJ0IHNpZ25hbHMgb24gTGludXggMi4yLjE5IGFuZCBvbndhcmQKIAogaWYgWyAkdmVyc2lvbiAtZ2UgMTMxNjA5IC1vICRFVkVOVF9SVFNJRyA9IFlFUyBdOyB0aGVuCi0gICAgZWNobyAiICsgdXNpbmcgcnQgc2lnbmFscyIKKyAgICBlY2hvICIgKyBydCBzaWduYWxzIGZvdW5kIgogICAgIGhhdmU9TkdYX0hBVkVfUlRTSUcgLiBhdXRvL2hhdmUKICAgICBoYXZlPU5HWF9IQVZFX1BPTEwgLiBhdXRvL2hhdmUKICAgICBFVkVOVF9NT0RVTEVTPSIkRVZFTlRfTU9EVUxFUyAkUlRTSUdfTU9EVUxFIgpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCBiNGI5NzVmLi5mYTEzNDJjIDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDE0MSBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjMiIGRhdGU9IjE5LjEwLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQwdLBzcXU0tkgImJsIiDJICJhZiIgxMnSxcvUydfZIGxpc3RlbiDQxdLFyc3Fzs/Xwc7ZINcgImJhY2tsb2ciCivJICJhY2NlcHRfZmlsdGVyIi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAiYmwiIGFuZCAiYWYiIHBhcmFtZXRlcnMgb2YgdGhlICJsaXN0ZW4iIGRpcmVjdGl2ZSB3YXMgcmVuYW1lZCB0bwordGhlICJiYWNrbG9nIiBhbmQgImFjY2VwdF9maWx0ZXIiLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQwdLBzcXU0tkgInJjdmJ1ZiIgySAic25kYnVmIiDXIMTJ0sXL1MnXxSBsaXN0ZW4uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInJjdmJ1ZiIgYW5kICJzbmRidWYiIHBhcmFtZXRlcnMgb2YgdGhlICJsaXN0ZW4iIGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivQwdLBzcXU0iDMz8fBICRtc2VjINTF0MXS2CDOxSDU0sXC1cXUIMTP0M/MzsnUxczYzs/HzyDTydPUxc3Oz8fPCivX2drP18EgZ2V0dGltZW9mZGF5KCkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIiRtc2VjIiBsb2cgcGFyYW1ldGVyIGRvZXMgbm90IHJlcXVpcmUgbm93IHRoZSBhZGRpdGlvbmFsCit0aGUgZ2V0dGltZW9mZGF5KCkgc3lzdGVtIGNhbGwuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8vMwN4gLXQg1MXQxdLYINDSz9fF0tHF1CDEydLFy9TJ19kgbGlzdGVuLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIC10IHN3aXRjaCBub3cgdGVzdHMgdGhlICJsaXN0ZW4iIGRpcmVjdGl2ZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDXIMTJ0sXL1MnXxSBsaXN0ZW4gwtnMINXLwdrBziDOxdfF0s7ZyiDBxNLF0ywg1M8gbmdpbngg0M/TzMUKK9PJx87BzMEgLUhVUCDP09TB18zRzCDP1MvS2dTZyiDTz8vF1CDXINPP09TP0c7JySBDTE9TRUQuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitpZiB0aGUgaW52YWxpZCBhZGRyZXNzIHdhcyBzcGVjaWZpZWQgaW4gdGhlICJsaXN0ZW4iIGRpcmVjdGl2ZSwgdGhlbgorYWZ0ZXIgdGhlIC1IVVAgc2lnbmFsIG5naW54IGxlZnQgYW4gb3BlbiBzb2NrZXQgaW4gdGhlIENMT1NFRCBzdGF0ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivEzNEgyc7ExcvTztnIIMbByszP1ywg08/ExdLWwd3JyCDXIMnNxc7JINDF0sXNxc7O1cAsIM3PxyDOxdfF0s7PINfZ09TB18zR1NjT0Qor1MnQIG1pbWUg0M8g1c3PzN7BzsnAOworz9vJwsvBINDP0dfJzMHT2CDXIDAuMy4wLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG1pbWUgdHlwZSBtYXkgYmUgaW5jb3JyZWN0bHkgc2V0IHRvIGRlZmF1bHQgdmFsdWUgZm9yIGluZGV4IGZpbGUgd2l0aAordmFyaWFibGUgaW4gdGhlIG5hbWU7CitidWcgYXBwZWFyZWQgaW4gMC4zLjAuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSB0aW1lcl9yZXNvbHV0aW9uLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJ0aW1lcl9yZXNvbHV0aW9uIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DB0sHNxdTSIMzPx8EgJHVwc3RyZWFtX3Jlc3BvbnNlX3RpbWUg1yDNyczMydPFy9XOxMHILgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG1pbGxpc2Vjb25kICIkdXBzdHJlYW1fcmVzcG9uc2VfdGltZSIgbG9nIHBhcmFtZXRlci4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivX0sXNxc7O2cogxsHKzCDTINTFzM/NINrB0NLP08Egy8zJxc7UwSDUxdDF0tgg1cTBzNHF1NPRINPSwdrVINDP08zFINTPx88sCivLwcsgy8zJxc7U1SDQxdLFxMHOINrBx8/Mz9fPyyDP1NfF1MEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CithIHRlbXBvcmFyeSBmaWxlIHdpdGggY2xpZW50IHJlcXVlc3QgYm9keSBub3cgaXMgcmVtb3ZlZCBqdXN0IGFmdGVyCit0aGUgcmVzcG9uc2UgaGVhZGVyIHdhcyB0cmFuc2ZlcnJlZCB0byBhIGNsaWVudC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivTz9fNxdPUyc3P09TYINMgT3BlblNTTCAwLjkuNi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK09wZW5TU0wgMC45LjYgY29tcGF0aWJpbGl0eS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivQ1dTJIMsgxsHKzMHNINMgU1NMINPF0tTJxsnLwdTPzSDJIMvMwN7PzSDOxSDNz8fMySDC2dTYIM/Uzs/TydTFzNjO2c3JLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIFNTTCBjZXJ0aWZpY2F0ZSBhbmQga2V5IGZpbGUgcGF0aHMgY291bGQgbm90IGJlIHJlbGF0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSBzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzIM7FINLBws/UwczBIMTM0SDNz8TVzNEgbmd4X2ltYXBfc3NsX21vZHVsZS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAic3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyIgZGlyZWN0aXZlIGRpZCBub3Qgd29yayBpbgordGhlIG5neF9pbWFwX3NzbF9tb2R1bGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHNzbF9wcm90b2NvbHMg0M/a18/M0czBINrBxMHU2CDUz8zYy88gz8TJziDQ0s/Uz8vPzC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAic3NsX3Byb3RvY29scyIgZGlyZWN0aXZlIGFsbG93ZWQgdG8gc3BlY2lmeSB0aGUgc2luZ2xlIHByb3RvY29sIG9ubHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjIiIGRhdGU9IjEyLjEwLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmdpbnguYyBiL3NyYy9jb3JlL25naW54LmMKaW5kZXggY2MxM2Y3NS4uZTA4Y2ExNiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmdpbnguYworKysgYi9zcmMvY29yZS9uZ2lueC5jCkBAIC0yOSwxOSArMjksMjYgQEAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfY29yZV9jb21tYW5kc1tdID0gewogCiAgICAgeyBuZ3hfc3RyaW5nKCJkYWVtb24iKSwKLSAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICAwLAogICAgICAgb2Zmc2V0b2Yobmd4X2NvcmVfY29uZl90LCBkYWVtb24pLAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJtYXN0ZXJfcHJvY2VzcyIpLAotICAgICAgTkdYX01BSU5fQ09ORnxOR1hfRElSRUNUX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBOR1hfTUFJTl9DT05GfE5HWF9ESVJFQ1RfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKICAgICAgIDAsCiAgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIG1hc3RlciksCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInRpbWVyX3Jlc29sdXRpb24iKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X21zZWNfc2xvdCwKKyAgICAgIDAsCisgICAgICBvZmZzZXRvZihuZ3hfY29yZV9jb25mX3QsIHRpbWVyX3Jlc29sdXRpb24pLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwaWQiKSwKICAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LApAQCAtNTM0LDYgKzU0MSw4IEBACiAKICAgICBjY2YtPmRhZW1vbiA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+bWFzdGVyID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgY2NmLT50aW1lcl9yZXNvbHV0aW9uID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKKwogICAgIGNjZi0+d29ya2VyX3Byb2Nlc3NlcyA9IE5HWF9DT05GX1VOU0VUOwogICAgIGNjZi0+ZGVidWdfcG9pbnRzID0gTkdYX0NPTkZfVU5TRVQ7CiAKQEAgLTU2NCw2ICs1NzMsOCBAQAogCiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPmRhZW1vbiwgMSk7CiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPm1hc3RlciwgMSk7CisgICAgbmd4X2NvbmZfaW5pdF9tc2VjX3ZhbHVlKGNjZi0+dGltZXJfcmVzb2x1dGlvbiwgMCk7CisKICAgICBuZ3hfY29uZl9pbml0X3ZhbHVlKGNjZi0+d29ya2VyX3Byb2Nlc3NlcywgMSk7CiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPmRlYnVnX3BvaW50cywgMCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IDY3ZThlNmIuLmU0ODJjNDIgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4yIgorI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy4zIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYyBiL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuYwppbmRleCAwZTY3MWVmLi43OGU2MWY4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmMKKysrIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5jCkBAIC02MjQsNyArNjI0LDcgQEAKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwogICAgIGZpbGUgPSB2YWx1ZVsxXTsKIAotICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoY2YtPmN5Y2xlLCAmZmlsZSkgPT0gTkdYX0VSUk9SKXsKKyAgICBpZiAobmd4X2NvbmZfZnVsbF9uYW1lKGNmLT5jeWNsZSwgJmZpbGUpID09IE5HWF9FUlJPUikgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29uZmlnLmggYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKaW5kZXggN2M1Njg3ZS4uM2I1MWU5NiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCisrKyBiL3NyYy9jb3JlL25neF9jb25maWcuaApAQCAtMTA0LDYgKzEwNCw5IEBACiAjZGVmaW5lIG5neF9hbGlnbihwKSAgICAodV9jaGFyICopICgoKHVpbnRwdHJfdCkgcCArIE5HWF9BTElHTikgJiB+TkdYX0FMSUdOKQogCiAKKyNkZWZpbmUgbmd4X2Fib3J0ICAgICAgIGFib3J0CisKKwogLyogVE9ETzogYXV0b19jb25mOiBuZ3hfaW5saW5lICAgaW5saW5lIF9faW5saW5lIF9faW5saW5lX18gKi8KICNpZm5kZWYgbmd4X2lubGluZQogI2RlZmluZSBuZ3hfaW5saW5lICAgaW5saW5lCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCAzZjM2ZDMxLi5jYWMzOTQ0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTY2LDEzICs2NiwxMiBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGk7CiAgICAgbmd4X2xpc3RlbmluZ190ICAgICAgICAgICAqbHM7CiAgICAgc3RydWN0IHNvY2thZGRyX2luICAgICAgICAqc2luOworICAgIHNvY2tsZW5fdCAgICAgICAgICAgICAgICAgIG9sZW47CiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKICAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgICBlcnI7Ci0gICAgc29ja2xlbl90ICAgICAgICAgICAgICAgICAgYWZsZW47CiAgICAgc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnICAgYWY7CiAjZW5kaWYKICNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgVENQX0RFRkVSX0FDQ0VQVCkKLSAgICBzb2NrbGVuX3QgICAgICAgICAgICAgICAgICB0bGVuOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7CiAjZW5kaWYKIApAQCAtMTI2LDEyICsxMjUsMzggQEAKIAogICAgICAgICBsc1tpXS5iYWNrbG9nID0gLTE7CiAKKyAgICAgICAgb2xlbiA9IHNpemVvZihpbnQpOworCisgICAgICAgIGlmIChnZXRzb2Nrb3B0KGxzW2ldLmZkLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICh2b2lkICopICZsc1tpXS5yY3ZidWYsCisgICAgICAgICAgICAgICAgICAgICAgICZvbGVuKQorICAgICAgICAgICAgPT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImdldHNvY2tvcHQoU09fUkNWQlVGKSAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKKworICAgICAgICAgICAgbHNbaV0ucmN2YnVmID0gLTE7CisgICAgICAgIH0KKworICAgICAgICBvbGVuID0gc2l6ZW9mKGludCk7CisKKyAgICAgICAgaWYgKGdldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKHZvaWQgKikgJmxzW2ldLnNuZGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgJm9sZW4pCisgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0c29ja29wdChTT19TTkRCVUYpICVWIGZhaWxlZCwgaWdub3JlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOworCisgICAgICAgICAgICBsc1tpXS5zbmRidWYgPSAtMTsKKyAgICAgICAgfQorCiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKIAogICAgICAgICBuZ3hfbWVtemVybygmYWYsIHNpemVvZihzdHJ1Y3QgYWNjZXB0X2ZpbHRlcl9hcmcpKTsKLSAgICAgICAgYWZsZW4gPSBzaXplb2Yoc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnKTsKKyAgICAgICAgb2xlbiA9IHNpemVvZihzdHJ1Y3QgYWNjZXB0X2ZpbHRlcl9hcmcpOwogCi0gICAgICAgIGlmIChnZXRzb2Nrb3B0KGxzW2ldLmZkLCBTT0xfU09DS0VULCBTT19BQ0NFUFRGSUxURVIsICZhZiwgJmFmbGVuKQorICAgICAgICBpZiAoZ2V0c29ja29wdChsc1tpXS5mZCwgU09MX1NPQ0tFVCwgU09fQUNDRVBURklMVEVSLCAmYWYsICZvbGVuKQogICAgICAgICAgICAgPT0gLTEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKQEAgLTE0Niw3ICsxNzEsNyBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoYWZsZW4gPCBzaXplb2Yoc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnKSB8fCBhZi5hZl9uYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgaWYgKG9sZW4gPCBzaXplb2Yoc3RydWN0IGFjY2VwdF9maWx0ZXJfYXJnKSB8fCBhZi5hZl9uYW1lWzBdID09ICdcMCcpIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTE2Miw5ICsxODcsOSBAQAogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBUQ1BfREVGRVJfQUNDRVBUKQogCiAgICAgICAgIHRpbWVvdXQgPSAwOwotICAgICAgICB0bGVuID0gc2l6ZW9mKGludCk7CisgICAgICAgIG9sZW4gPSBzaXplb2YoaW50KTsKIAotICAgICAgICBpZiAoZ2V0c29ja29wdChsc1tpXS5mZCwgSVBQUk9UT19UQ1AsIFRDUF9ERUZFUl9BQ0NFUFQsICZ0aW1lb3V0LCAmdGxlbikKKyAgICAgICAgaWYgKGdldHNvY2tvcHQobHNbaV0uZmQsIElQUFJPVE9fVENQLCBUQ1BfREVGRVJfQUNDRVBULCAmdGltZW91dCwgJm9sZW4pCiAgICAgICAgICAgICA9PSAtMSkKICAgICAgICAgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLApAQCAtMTg4LDcgKzIxMyw4IEBACiBuZ3hfaW50X3QKIG5neF9vcGVuX2xpc3RlbmluZ19zb2NrZXRzKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKLSAgICBuZ3hfdWludF90ICAgICAgICB0cmllcywgZmFpbGVkLCByZXVzZWFkZHIsIGk7CisgICAgaW50ICAgICAgICAgICAgICAgcmV1c2VhZGRyOworICAgIG5neF91aW50X3QgICAgICAgIGksIHRyaWVzLCBmYWlsZWQ7CiAgICAgbmd4X2Vycl90ICAgICAgICAgZXJyOwogICAgIG5neF9sb2dfdCAgICAgICAgKmxvZzsKICAgICBuZ3hfc29ja2V0X3QgICAgICBzOwpAQCAtMjAxLDkgKzIyNyw5IEBACiAKICAgICBsb2cgPSBjeWNsZS0+bG9nOwogCi0gICAgLyogVE9ETzogdHJpZXMgY29uZmlndXJhYmxlICovCisgICAgLyogVE9ETzogY29uZmlndXJhYmxlIHRyeSBudW1iZXIgKi8KIAotICAgIGZvciAodHJpZXMgPSAvKiBTVFVCICovIDU7IHRyaWVzOyB0cmllcy0tKSB7CisgICAgZm9yICh0cmllcyA9IDUgOyB0cmllczsgdHJpZXMtLSkgewogICAgICAgICBmYWlsZWQgPSAwOwogCiAgICAgICAgIC8qIGZvciBlYWNoIGxpc3RlbmluZyBzb2NrZXQgKi8KQEAgLTIzNiwyNSArMjYyLDE5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KIAotI2lmIChOR1hfV0lOMzIpCi0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNAotICAgICAgICAgICAgICogc28gdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgotICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgIGlmIChzICUgNCkgewotICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3NvY2tldF9uICIgY3JlYXRlZCBzb2NrZXQgJWQiLCBzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgfQotI2VuZGlmCi0KICAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZyZXVzZWFkZHIsIHNpemVvZihpbnQpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnJldXNlYWRkciwgc2l6ZW9mKGludCkpCisgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19SRVVTRUFERFIpICVWIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChuZ3hfY2xvc2Vfc29ja2V0KHMpID09IC0xKQorICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgbmd4X3NvY2tldF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlViBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOworCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KIApAQCAtMjY1LDU2ICsyODUsNTQgQEAKICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X25vbmJsb2NraW5nX24gIiAlViBmYWlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KIAotI2lmIDAKLSAgICAgICAgICAgIGlmIChsc1tpXS5ub25ibG9ja2luZykgewotICAgICAgICAgICAgICAgIGlmIChuZ3hfbm9uYmxvY2tpbmcocykgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X25vbmJsb2NraW5nX24gIiAlViBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAobmd4X2Nsb3NlX3NvY2tldChzKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlViBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKKwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgICAgICAgICBpZiAoYmluZChzLCBsc1tpXS5zb2NrYWRkciwgbHNbaV0uc29ja2xlbikgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOworCisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSBOR1hfRUFERFJJTlVTRSAmJiBuZ3hfdGVzdF9jb25maWcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiaW5kKCkgdG8gJVYgZmFpbGVkIiwgJmxzW2ldLmFkZHJfdGV4dCk7CiAKLSAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FQUREUklOVVNFKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotCiAgICAgICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9zb2NrZXQocykgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgbG9nLCBuZ3hfc29ja2V0X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9zb2NrZXRfbiAiICVWIGZhaWxlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCk7CiAKKyAgICAgICAgICAgICAgICBpZiAoZXJyICE9IE5HWF9FQUREUklOVVNFKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKKwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobGlzdGVuKHMsIGxzW2ldLmJhY2tsb2cpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdGVuKCkgdG8gJVYgZmFpbGVkIiwgJmxzW2ldLmFkZHJfdGV4dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogVE9ETzogZGVmZXJyZWQgYWNjZXB0ICovCisgICAgICAgICAgICBsc1tpXS5saXN0ZW4gPSAxOwogCiAgICAgICAgICAgICBsc1tpXS5mZCA9IHM7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZhaWxlZCkKKyAgICAgICAgaWYgKCFmYWlsZWQpIHsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgLyogVE9ETzogZGVsYXkgY29uZmlndXJhYmxlICovCiAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgbG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJ0cnkgYWdhaW4gdG8gYmluZCgpIGFmdGVyIDUwMG1zIik7CisKICAgICAgICAgbmd4X21zbGVlcCg1MDApOwogICAgIH0KIApAQCAtMzI4LDYgKzM0NiwxNDMgQEAKIAogCiB2b2lkCituZ3hfY29uZmlndXJlX2xpc3RlbmluZ19zb2NrZXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQoreworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGk7CisgICAgbmd4X2xpc3RlbmluZ190ICAgICAgICAgICAqbHM7CisKKyNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgU09fQUNDRVBURklMVEVSKQorICAgIHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZyAgIGFmOworI2VuZGlmCisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFRDUF9ERUZFUl9BQ0NFUFQpCisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKyNlbmRpZgorCisgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgeworCisgICAgICAgIGlmIChsc1tpXS5yY3ZidWYgIT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KGxzW2ldLmZkLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmbHNbaV0ucmN2YnVmLCBzaXplb2YoaW50KSkKKyAgICAgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19SQ1ZCVUYpICVWIGZhaWxlZCwgaWdub3JlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobHNbaV0uc25kYnVmICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdChsc1tpXS5mZCwgU09MX1NPQ0tFVCwgU09fU05EQlVGLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJmxzW2ldLnNuZGJ1Ziwgc2l6ZW9mKGludCkpCisgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoU09fU05EQlVGKSAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGxzW2ldLmxpc3RlbikgeworICAgICAgICAgICAgaWYgKGxpc3Rlbihsc1tpXS5mZCwgbHNbaV0uYmFja2xvZykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhbmdpbmcgdGhlIGxpc3RlbigpIGJhY2tsb2cgdG8gJWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCwgbHNbaV0uYmFja2xvZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBzZXR0aW5nIGRlZmVycmVkIG1vZGUgc2hvdWxkIGJlIGxhc3Qgb3BlcmF0aW9uIG9uIHNvY2tldCwKKyAgICAgICAgICogYmVjYXVzZSBjb2RlIG1heSBwcmVtYXR1cmVseSBjb250aW51ZSBjeWNsZSBvbiBmYWlsdXJlCisgICAgICAgICAqLworCisjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCkKKworI2lmZGVmIFNPX0FDQ0VQVEZJTFRFUgorCisgICAgICAgIGlmIChscy0+ZGVsZXRlX2RlZmVycmVkKSB7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdChscy0+ZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwgTlVMTCwgMCkgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19BQ0NFUFRGSUxURVIsIE5VTEwpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgJVYgZmFpbGVkLCBpZ25vcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZscy0+YWRkcl90ZXh0KTsKKworICAgICAgICAgICAgICAgIGlmIChscy0+YWNjZXB0X2ZpbHRlcikgeworICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjaGFuZ2UgdGhlIGFjY2VwdCBmaWx0ZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBcIiVzXCIgZm9yICVWLCBpZ25vcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscy0+YWNjZXB0X2ZpbHRlciwgJmxzLT5hZGRyX3RleHQpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBscy0+ZGVmZXJyZWRfYWNjZXB0ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChscy0+YWRkX2RlZmVycmVkKSB7CisgICAgICAgICAgICBuZ3hfbWVtemVybygmYWYsIHNpemVvZihzdHJ1Y3QgYWNjZXB0X2ZpbHRlcl9hcmcpKTsKKyAgICAgICAgICAgICh2b2lkKSBuZ3hfY3B5c3RybigodV9jaGFyICopIGFmLmFmX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBscy0+YWNjZXB0X2ZpbHRlciwgMTYpOworCisgICAgICAgICAgICBpZiAoc2V0c29ja29wdChscy0+ZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpCisgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChTT19BQ0NFUFRGSUxURVIsIFwiJXNcIikgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmb3IgJVYgZmFpbGVkLCBpZ25vcmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzLT5hY2NlcHRfZmlsdGVyLCAmbHMtPmFkZHJfdGV4dCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxzLT5kZWZlcnJlZF9hY2NlcHQgPSAxOworICAgICAgICB9CisKKyNlbmRpZgorCisjaWZkZWYgVENQX0RFRkVSX0FDQ0VQVAorCisgICAgICAgIGlmIChscy0+YWRkX2RlZmVycmVkIHx8IGxzLT5kZWxldGVfZGVmZXJyZWQpIHsKKworICAgICAgICAgICAgaWYgKGxzLT5hZGRfZGVmZXJyZWQpIHsKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gKGludCkgKGxzLT5wb3N0X2FjY2VwdF90aW1lb3V0IC8gMTAwMCk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGltZW91dCA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KGxzLT5mZCwgSVBQUk9UT19UQ1AsIFRDUF9ERUZFUl9BQ0NFUFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZW91dCwgc2l6ZW9mKGludCkpCisgICAgICAgICAgICAgICAgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0c29ja29wdChUQ1BfREVGRVJfQUNDRVBULCAlZCkgZm9yICVWIGZhaWxlZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlnbm9yZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwgJmxzLT5hZGRyX3RleHQpOworCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobHMtPmFkZF9kZWZlcnJlZCkgeyAKKyAgICAgICAgICAgIGxzLT5kZWZlcnJlZF9hY2NlcHQgPSAxOworICAgICAgICB9CisKKyNlbmRpZgorCisjZW5kaWYgLyogTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICovCisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKK3ZvaWQKIG5neF9jbG9zZV9saXN0ZW5pbmdfc29ja2V0cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CkBAIC0zNjEsNiArNTE2LDkgQEAKIAogICAgICAgICBjLT5mZCA9IChuZ3hfc29ja2V0X3QpIC0xOwogCisgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfQ09SRSwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgImNsb3NlIGxpc3RlbmluZyAlViAjJWQgIiwgJmxzW2ldLmFkZHJfdGV4dCwgbHNbaV0uZmQpOworCiAgICAgICAgIGlmIChuZ3hfY2xvc2Vfc29ja2V0KGxzW2ldLmZkKSA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCBuZ3hfc29ja2V0X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2Vfc29ja2V0X24gIiAlViBmYWlsZWQiLCAmbHNbaV0uYWRkcl90ZXh0KTsKQEAgLTQ5NSwyOCArNjUzLDI3IEBACiAgICAgICogYmVmb3JlIHdlIGNsZWFuIHRoZSBjb25uZWN0aW9uCiAgICAgICovCiAKLSAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9PSykgeworICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKIAotICAgICAgICBpZiAoYy0+cmVhZC0+cHJldikgewotICAgICAgICAgICAgbmd4X2RlbGV0ZV9wb3N0ZWRfZXZlbnQoYy0+cmVhZCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYy0+d3JpdGUtPnByZXYpIHsKLSAgICAgICAgICAgIG5neF9kZWxldGVfcG9zdGVkX2V2ZW50KGMtPndyaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGMtPnJlYWQtPmNsb3NlZCA9IDE7Ci0gICAgICAgIGMtPndyaXRlLT5jbG9zZWQgPSAxOwotCi0gICAgICAgIGlmIChjLT5zaW5nbGVfY29ubmVjdGlvbikgewotICAgICAgICAgICAgbmd4X3VubG9jaygmYy0+bG9jayk7Ci0gICAgICAgICAgICBjLT5yZWFkLT5sb2NrZWQgPSAwOwotICAgICAgICAgICAgYy0+d3JpdGUtPmxvY2tlZCA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKyAgICBpZiAoYy0+cmVhZC0+cHJldikgeworICAgICAgICBuZ3hfZGVsZXRlX3Bvc3RlZF9ldmVudChjLT5yZWFkKTsKICAgICB9CiAKKyAgICBpZiAoYy0+d3JpdGUtPnByZXYpIHsKKyAgICAgICAgbmd4X2RlbGV0ZV9wb3N0ZWRfZXZlbnQoYy0+d3JpdGUpOworICAgIH0KKworICAgIGMtPnJlYWQtPmNsb3NlZCA9IDE7CisgICAgYy0+d3JpdGUtPmNsb3NlZCA9IDE7CisKKyAgICBpZiAoYy0+c2luZ2xlX2Nvbm5lY3Rpb24pIHsKKyAgICAgICAgbmd4X3VubG9jaygmYy0+bG9jayk7CisgICAgICAgIGMtPnJlYWQtPmxvY2tlZCA9IDA7CisgICAgICAgIGMtPndyaXRlLT5sb2NrZWQgPSAwOworICAgIH0KKworICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOworCiAjZWxzZQogCiAgICAgaWYgKGMtPnJlYWQtPnByZXYpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IGNhNWIwNTMuLmMyYjc3ZTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtMjUsNyArMjUsMTAgQEAKIAogICAgIGludCAgICAgICAgICAgICAgICAgZmFtaWx5OwogICAgIGludCAgICAgICAgICAgICAgICAgdHlwZTsKKwogICAgIGludCAgICAgICAgICAgICAgICAgYmFja2xvZzsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjdmJ1ZjsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHNuZGJ1ZjsKIAogICAgIC8qIGhhbmRsZXIgb2YgYWNjZXB0ZWQgY29ubmVjdGlvbiAqLwogICAgIG5neF9jb25uZWN0aW9uX2hhbmRsZXJfcHQgICBoYW5kbGVyOwpAQCAtNTEsNyArNTQsNyBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgYm91bmQ6MTsgICAgICAgLyogYWxyZWFkeSBib3VuZCAqLwogICAgIHVuc2lnbmVkICAgICAgICAgICAgaW5oZXJpdGVkOjE7ICAgLyogaW5oZXJpdGVkIGZyb20gcHJldmlvdXMgcHJvY2VzcyAqLwogICAgIHVuc2lnbmVkICAgICAgICAgICAgbm9uYmxvY2tpbmdfYWNjZXB0OjE7Ci0gICAgdW5zaWduZWQgICAgICAgICAgICBjaGFuZ2VfYmFja2xvZzoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgbGlzdGVuOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICBub25ibG9ja2luZzoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgc2hhcmVkOjE7ICAgIC8qIHNoYXJlZCBiZXR3ZWVuIHRocmVhZHMgb3IgcHJvY2Vzc2VzICovCiAgICAgdW5zaWduZWQgICAgICAgICAgICBhZGRyX250b3A6MTsKQEAgLTE2Miw2ICsxNjUsNyBAQAogICAgIGluX2FkZHJfdCBhZGRyLCBpbl9wb3J0X3QgcG9ydCk7CiBuZ3hfaW50X3Qgbmd4X3NldF9pbmhlcml0ZWRfc29ja2V0cyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogbmd4X2ludF90IG5neF9vcGVuX2xpc3RlbmluZ19zb2NrZXRzKG5neF9jeWNsZV90ICpjeWNsZSk7Cit2b2lkIG5neF9jb25maWd1cmVfbGlzdGVuaW5nX3NvY2tldChuZ3hfY3ljbGVfdCAqY3ljbGUpOwogdm9pZCBuZ3hfY2xvc2VfbGlzdGVuaW5nX3NvY2tldHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHZvaWQgbmd4X2Nsb3NlX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiBuZ3hfaW50X3Qgbmd4X2Nvbm5lY3Rpb25fZXJyb3Iobmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2Vycl90IGVyciwgY2hhciAqdGV4dCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuYyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCmluZGV4IGQ4Zjk1ZmEuLjU4Njc5ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5jCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5jCkBAIC0zNyw3ICszNyw4IEBACiAjZW5kaWYKIAogCi1uZ3hfY3ljbGVfdCAqbmd4X2luaXRfY3ljbGUobmd4X2N5Y2xlX3QgKm9sZF9jeWNsZSkKK25neF9jeWNsZV90ICoKK25neF9pbml0X2N5Y2xlKG5neF9jeWNsZV90ICpvbGRfY3ljbGUpCiB7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgICAgICAqcnY7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgaSwgbiwgZmFpbGVkOwpAQCAtNDUsMTggKzQ2LDExIEBACiAgICAgbmd4X2NvbmZfdCAgICAgICAgICAgICAgICAgY29uZjsKICAgICBuZ3hfcG9vbF90ICAgICAgICAgICAgICAgICpwb29sOwogICAgIG5neF9jeWNsZV90ICAgICAgICAgICAgICAgKmN5Y2xlLCAqKm9sZDsKLSAgICBuZ3hfc29ja2V0X3QgICAgICAgICAgICAgICBmZDsKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgICAgICAgICpwYXJ0OwogICAgIG5neF9vcGVuX2ZpbGVfdCAgICAgICAgICAgKmZpbGU7CiAgICAgbmd4X2xpc3RlbmluZ190ICAgICAgICAgICAqbHMsICpubHM7CiAgICAgbmd4X2NvcmVfY29uZl90ICAgICAgICAgICAqY2NmOwogICAgIG5neF9jb3JlX21vZHVsZV90ICAgICAgICAgKm1vZHVsZTsKLSNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgU09fQUNDRVBURklMVEVSKQotICAgIHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZyAgIGFmOwotI2VuZGlmCi0jaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFRDUF9ERUZFUl9BQ0NFUFQpCi0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKLSNlbmRpZgogCiAgICAgbG9nID0gb2xkX2N5Y2xlLT5sb2c7CiAKQEAgLTMxNSwzOSArMzA5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfY21wX3NvY2thZGRyKG5sc1tuXS5zb2NrYWRkciwgbHNbaV0uc29ja2FkZHIpCiAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfT0spCiAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZkID0gbHNbaV0uZmQ7Ci0jaWYgKE5HWF9XSU4zMikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgKiBXaW5zb2NrIGFzc2lnbmVzIGEgc29ja2V0IG51bWJlciBkaXZpc2libGUgYnkgNCBzbwotICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gZmluZCBhIGNvbm5lY3Rpb24gd2UgZGl2aWRlIGEgc29ja2V0IG51bWJlciBieSA0LgotICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZkIC89IDQ7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZCA+PSAobmd4X3NvY2tldF90KSBjeWNsZS0+Y29ubmVjdGlvbl9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIGNvbm5lY3Rpb25zIGlzIG5vdCBlbm91Z2ggdG8gaG9sZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIG9wZW4gbGlzdGVuaW5nIHNvY2tldCBvbiAlViwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCBhdCBsZWFzdCAlZCBjb25uZWN0aW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmNvbm5lY3Rpb25fbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHNbaV0uYWRkcl90ZXh0LCBmZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbGVkID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmZkID0gbHNbaV0uZmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0ucHJldmlvdXMgPSAmbHNbaV07CiAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5yZW1haW4gPSAxOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHNbbl0uYmFja2xvZyAhPSBubHNbaV0uYmFja2xvZykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5sc1tuXS5jaGFuZ2VfYmFja2xvZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxzW25dLmxpc3RlbiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICNpZiAoTkdYX0hBVkVfREVGRVJSRURfQUNDRVBUICYmIGRlZmluZWQgU09fQUNDRVBURklMVEVSKQogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogRnJlZUJTRCwgZXhjZXB0IHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGNhbiBub3QgcmVtb3ZlIGFjY2VwdCBmaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGNvdWxkIG5vdCByZW1vdmUgYWNjZXB0IGZpbHRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICBubHNbbl0uZGVmZXJyZWRfYWNjZXB0ID0gbHNbaV0uZGVmZXJyZWRfYWNjZXB0OwogCkBAIC00MDQsOTMgKzM3OCwxMyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFuZ3hfdGVzdF9jb25maWcgJiYgIWZhaWxlZCkgeworICAgICAgICBpZiAoIWZhaWxlZCkgewogICAgICAgICAgICAgaWYgKG5neF9vcGVuX2xpc3RlbmluZ19zb2NrZXRzKGN5Y2xlKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgICAgICBmYWlsZWQgPSAxOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoIWZhaWxlZCkgewotICAgICAgICAgICAgICAgIGxzID0gY3ljbGUtPmxpc3RlbmluZy5lbHRzOwotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjeWNsZS0+bGlzdGVuaW5nLm5lbHRzOyBpKyspIHsKLQotICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uY2hhbmdlX2JhY2tsb2cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0ZW4obHNbaV0uZmQsIGxzW2ldLmJhY2tsb2cpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIG5neF9zb2NrZXRfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhbmdpbmcgdGhlIGxpc3RlbigpIGJhY2tsb2cgdG8gJWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxzW2ldLmFkZHJfdGV4dCwgbHNbaV0uYmFja2xvZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQpCi0KLSNpZmRlZiBTT19BQ0NFUFRGSUxURVIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmRlbGV0ZV9kZWZlcnJlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoU09fQUNDRVBURklMVEVSLCBOVUxMKSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsc1tpXS5hZGRyX3RleHQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFjY2VwdF9maWx0ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBsb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjaGFuZ2UgdGhlIGFjY2VwdCBmaWx0ZXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBcIiVzXCIgZm9yICVWLCBpZ25vcmVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc1tpXS5hY2NlcHRfZmlsdGVyLCAmbHNbaV0uYWRkcl90ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uZGVmZXJyZWRfYWNjZXB0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChsc1tpXS5hZGRfZGVmZXJyZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9tZW16ZXJvKCZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpOwotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIG5neF9jcHlzdHJuKCh1X2NoYXIgKikgYWYuYWZfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGxzW2ldLmFjY2VwdF9maWx0ZXIsIDE2KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIFNPTF9TT0NLRVQsIFNPX0FDQ0VQVEZJTFRFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZiwgc2l6ZW9mKHN0cnVjdCBhY2NlcHRfZmlsdGVyX2FyZykpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbG9nLCBuZ3hfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNldHNvY2tvcHQoU09fQUNDRVBURklMVEVSLCBcIiVzXCIpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yICVWIGZhaWxlZCwgaWdub3JlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uYWNjZXB0X2ZpbHRlciwgJmxzW2ldLmFkZHJfdGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGxzW2ldLmRlZmVycmVkX2FjY2VwdCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotCi0jaWZkZWYgVENQX0RFRkVSX0FDQ0VQVAotICAgICAgICAgICAgICAgICAgICBpZiAobHNbaV0uYWRkX2RlZmVycmVkIHx8IGxzW2ldLmRlbGV0ZV9kZWZlcnJlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IDA7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsc1tpXS5hZGRfZGVmZXJyZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gKGludCkgKGxzW2ldLnBvc3RfYWNjZXB0X3RpbWVvdXQgLyAxMDAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQobHNbaV0uZmQsIElQUFJPVE9fVENQLCBUQ1BfREVGRVJfQUNDRVBULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRpbWVvdXQsIHNpemVvZihpbnQpKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9ERUZFUl9BQ0NFUFQsICVkKSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciAlViBmYWlsZWQsIGlnbm9yZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsICZsc1tpXS5hZGRyX3RleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxzW2ldLmFkZF9kZWZlcnJlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbHNbaV0uZGVmZXJyZWRfYWNjZXB0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCi0jZW5kaWYKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW5neF90ZXN0X2NvbmZpZyAmJiAhZmFpbGVkKSB7CisgICAgICAgICAgICAgICAgbmd4X2NvbmZpZ3VyZV9saXN0ZW5pbmdfc29ja2V0KGN5Y2xlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTY4MCw3ICs1NzQsOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2NtcF9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwgc3RydWN0IHNvY2thZGRyICpzYTIpCitzdGF0aWMgbmd4X2ludF90CituZ3hfY21wX3NvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqc2ExLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhMikKIHsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICpzaW4xLCAqc2luMjsKIApAQCAtNzA3LDcgKzYwMiw4IEBACiAKICNpZiAhKE5HWF9XSU4zMikKIAotbmd4X2ludF90IG5neF9jcmVhdGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9jeWNsZV90ICpvbGRfY3ljbGUpCituZ3hfaW50X3QKK25neF9jcmVhdGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9jeWNsZV90ICpvbGRfY3ljbGUpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgdHJ1bmM7CiAgICAgc2l6ZV90ICAgICAgICAgICAgbGVuOwpAQCAtNzc2LDcgKzY3Miw4IEBACiB9CiAKIAotdm9pZCBuZ3hfZGVsZXRlX3BpZGZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlKQordm9pZAorbmd4X2RlbGV0ZV9waWRmaWxlKG5neF9jeWNsZV90ICpjeWNsZSkKIHsgICAKICAgICB1X2NoYXIgICAgICAgICAgICpuYW1lOwogICAgIG5neF9jb3JlX2NvbmZfdCAgKmNjZjsKQEAgLTc5OCw3ICs2OTUsOCBAQAogI2VuZGlmCiAKIAotdm9pZCBuZ3hfcmVvcGVuX2ZpbGVzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpZF90IHVzZXIpCit2b2lkCituZ3hfcmVvcGVuX2ZpbGVzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpZF90IHVzZXIpCiB7CiAgICAgbmd4X2ZkX3QgICAgICAgICAgZmQ7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgaTsKQEAgLTkzNiw3ICs4MzQsOCBAQAogfQogCiAKLXN0YXRpYyB2b2lkIG5neF9jbGVhbl9vbGRfY3ljbGVzKG5neF9ldmVudF90ICpldikKK3N0YXRpYyB2b2lkCituZ3hfY2xlYW5fb2xkX2N5Y2xlcyhuZ3hfZXZlbnRfdCAqZXYpCiB7CiAgICAgbmd4X3VpbnRfdCAgICAgaSwgbiwgZm91bmQsIGxpdmU7CiAgICAgbmd4X2xvZ190ICAgICAqbG9nOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmggYi9zcmMvY29yZS9uZ3hfY3ljbGUuaAppbmRleCBhOTQ0NDRhLi5iMjk3OTk0IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuaApAQCAtNTQsNiArNTQsOCBAQAogICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgZGFlbW9uOwogICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgbWFzdGVyOwogCisgICAgIG5neF9tc2VjX3QgICAgICAgICAgICAgICB0aW1lcl9yZXNvbHV0aW9uOworCiAgICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICB3b3JrZXJfcHJvY2Vzc2VzOwogICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgZGVidWdfcG9pbnRzOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfZmlsZS5jIGIvc3JjL2NvcmUvbmd4X2ZpbGUuYwppbmRleCA3NmU3MWM3Li4wYzY1NzYwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfZmlsZS5jCisrKyBiL3NyYy9jb3JlL25neF9maWxlLmMKQEAgLTQwLDggKzQwLDggQEAKIHsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgIGVycjsKICAgICBuZ3hfYXRvbWljX3VpbnRfdCAgICAgICAgIG47Ci0gICAgbmd4X3Bvb2xfY2xlYW51cF9maWxlX3QgICpjbG47Ci0KKyAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICAgICAgKmNsbjsKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgKmNsbmY7CiAKICAgICBmaWxlLT5uYW1lLmxlbiA9IHBhdGgtPm5hbWUubGVuICsgMSArIHBhdGgtPmxlbiArIE5HWF9BVE9NSUNfVF9MRU47CiAKQEAgLTY2LDYgKzY2LDExIEBACiAKICAgICAgICAgbmd4X2NyZWF0ZV9oYXNoZWRfZmlsZW5hbWUoZmlsZSwgcGF0aCk7CiAKKyAgICAgICAgY2xuID0gbmd4X3Bvb2xfY2xlYW51cF9hZGQocG9vbCwgc2l6ZW9mKG5neF9wb29sX2NsZWFudXBfZmlsZV90KSk7CisgICAgICAgIGlmIChjbG4gPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCiAjaWYgMQogICAgICAgICBmaWxlLT5mZCA9IG5neF9vcGVuX3RlbXBmaWxlKGZpbGUtPm5hbWUuZGF0YSwgcGVyc2lzdGVudCk7CiAjZWxzZQpAQCAtNzYsMTkgKzgxLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICJ0ZW1wIGZkOiVkIiwgZmlsZS0+ZmQpOwogCiAgICAgICAgIGlmIChmaWxlLT5mZCAhPSBOR1hfSU5WQUxJRF9GSUxFKSB7Ci0gICAgICAgICAgICBjbG4gPSBuZ3hfcGFsbG9jKHBvb2wsIHNpemVvZihuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCkpOwotICAgICAgICAgICAgaWYgKGNsbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsgCi0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNsbi0+ZmQgPSBmaWxlLT5mZDsKLSAgICAgICAgICAgIGNsbi0+bmFtZSA9IGZpbGUtPm5hbWUuZGF0YTsKLSAgICAgICAgICAgIGNsbi0+bG9nID0gcG9vbC0+bG9nOworICAgICAgICAgICAgY2xuLT5oYW5kbGVyID0gbmd4X3Bvb2xfY2xlYW51cF9maWxlOworICAgICAgICAgICAgY2xuZiA9IGNsbi0+ZGF0YTsKIAotICAgICAgICAgICAgaWYgKG5neF9wb29sX2NsZWFudXBfYWRkKHBvb2wsIG5neF9wb29sX2NsZWFudXBfZmlsZSwgY2xuKSA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjbG5mLT5mZCA9IGZpbGUtPmZkOworICAgICAgICAgICAgY2xuZi0+bmFtZSA9IGZpbGUtPm5hbWUuZGF0YTsKKyAgICAgICAgICAgIGNsbmYtPmxvZyA9IHBvb2wtPmxvZzsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3BhbGxvYy5jIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCmluZGV4IDliYjUwZjcuLmQxZTdiYmQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9wYWxsb2MuYworKysgYi9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAKIG5neF9wb29sX2NsZWFudXBfdCAqCi1uZ3hfcG9vbF9jbGVhbnVwX2FkZChuZ3hfcG9vbF90ICpwLCBuZ3hfcG9vbF9jbGVhbnVwX3B0IGhhbmRsZXIsIHZvaWQgKmRhdGEpCituZ3hfcG9vbF9jbGVhbnVwX2FkZChuZ3hfcG9vbF90ICpwLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICpjOwogCkBAIC0yMTYsMTIgKzIxNiwyMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBjLT5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICBjLT5kYXRhID0gZGF0YTsKKyAgICBpZiAoc2l6ZSkgeworICAgICAgICBjLT5kYXRhID0gbmd4X3BhbGxvYyhwLCBzaXplKTsKKyAgICAgICAgaWYgKGMtPmRhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGMtPmRhdGEgPSBOVUxMOworICAgIH0KKworICAgIGMtPmhhbmRsZXIgPSBOVUxMOwogICAgIGMtPm5leHQgPSBwLT5jbGVhbnVwOwogCiAgICAgcC0+Y2xlYW51cCA9IGM7CiAKKyAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0FMTE9DLCBwLT5sb2csIDAsICJhZGQgY2xlYW51cDogJXAiLCBjKTsKKwogICAgIHJldHVybiBjOwogfQogCkBAIC0yMzEsNiArMjQyLDkgQEAKIHsKICAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgKmMgPSBkYXRhOwogCisgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19BTExPQywgYy0+bG9nLCAwLCAicnVuIGNsZWFudXA6ICVwLCBmZDolZCIsCisgICAgICAgICAgICAgICAgICAgYywgYy0+ZmQpOworCiAgICAgaWYgKG5neF9jbG9zZV9maWxlKGMtPmZkKSA9PSBOR1hfRklMRV9FUlJPUikgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgIG5neF9jbG9zZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgYy0+bmFtZSk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmggYi9zcmMvY29yZS9uZ3hfcGFsbG9jLmgKaW5kZXggNjJhNTcxOC4uYjhiMTY5MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3BhbGxvYy5oCisrKyBiL3NyYy9jb3JlL25neF9wYWxsb2MuaApAQCAtNzEsOCArNzEsNyBAQAogbmd4X2ludF90IG5neF9wZnJlZShuZ3hfcG9vbF90ICpwb29sLCB2b2lkICpwKTsKIAogCi1uZ3hfcG9vbF9jbGVhbnVwX3QgKm5neF9wb29sX2NsZWFudXBfYWRkKG5neF9wb29sX3QgKnAsCi0gICAgbmd4X3Bvb2xfY2xlYW51cF9wdCBoYW5kbGVyLCB2b2lkICpkYXRhKTsKK25neF9wb29sX2NsZWFudXBfdCAqbmd4X3Bvb2xfY2xlYW51cF9hZGQobmd4X3Bvb2xfdCAqcCwgc2l6ZV90IHNpemUpOwogdm9pZCBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGUodm9pZCAqZGF0YSk7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3BhcnNlLmMgYi9zcmMvY29yZS9uZ3hfcGFyc2UuYwppbmRleCBkYWQ5ZWZjLi5mOGU1ZjZjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFyc2UuYworKysgYi9zcmMvY29yZS9uZ3hfcGFyc2UuYwpAQCAtOCwxMSArOCwxMyBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotbmd4X2ludF90IG5neF9wYXJzZV9zaXplKG5neF9zdHJfdCAqbGluZSkKK3NzaXplX3QKK25neF9wYXJzZV9zaXplKG5neF9zdHJfdCAqbGluZSkKIHsKICAgICB1X2NoYXIgICAgIGxhc3Q7CiAgICAgc2l6ZV90ICAgICBsZW47Ci0gICAgbmd4X2ludF90ICBzY2FsZSwgc2l6ZTsKKyAgICBzc2l6ZV90ICAgIHNpemU7CisgICAgbmd4X2ludF90ICBzY2FsZTsKIAogICAgIGxlbiA9IGxpbmUtPmxlbjsKICAgICBsYXN0ID0gbGluZS0+ZGF0YVtsZW4gLSAxXTsKQEAgLTM0LDcgKzM2LDcgQEAKICAgICAgICAgc2NhbGUgPSAxOwogICAgIH0KIAotICAgIHNpemUgPSBuZ3hfYXRvaShsaW5lLT5kYXRhLCBsZW4pOworICAgIHNpemUgPSBuZ3hfYXRvc3oobGluZS0+ZGF0YSwgbGVuKTsKICAgICBpZiAoc2l6ZSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CkBAIC00NSw3ICs0Nyw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9wYXJzZV90aW1lKG5neF9zdHJfdCAqbGluZSwgbmd4X2ludF90IHNlYykKK25neF9pbnRfdAorbmd4X3BhcnNlX3RpbWUobmd4X3N0cl90ICpsaW5lLCBuZ3hfaW50X3Qgc2VjKQogewogICAgIHNpemVfdCAgICAgIGxlbjsKICAgICB1X2NoYXIgICAgICpzdGFydCwgbGFzdDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYXJzZS5oIGIvc3JjL2NvcmUvbmd4X3BhcnNlLmgKaW5kZXggNDRmZmYyZS4uNDY0Y2VmYyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3BhcnNlLmgKKysrIGIvc3JjL2NvcmUvbmd4X3BhcnNlLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgTkdYX1BBUlNFX0xBUkdFX1RJTUUgIC0yCiAKIAotbmd4X2ludF90IG5neF9wYXJzZV9zaXplKG5neF9zdHJfdCAqbGluZSk7Citzc2l6ZV90IG5neF9wYXJzZV9zaXplKG5neF9zdHJfdCAqbGluZSk7CiBuZ3hfaW50X3Qgbmd4X3BhcnNlX3RpbWUobmd4X3N0cl90ICpsaW5lLCBuZ3hfaW50X3Qgc2VjKTsKIAogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfcmFkaXhfdHJlZS5jIGIvc3JjL2NvcmUvbmd4X3JhZGl4X3RyZWUuYwppbmRleCBmODJhNWU1Li45NTdlYzMwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcmFkaXhfdHJlZS5jCisrKyBiL3NyYy9jb3JlL25neF9yYWRpeF90cmVlLmMKQEAgLTIwNSw2ICsyMDUsNyBAQAogICAgIGZvciAoIDs7ICkgewogICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodCA9PSBub2RlKSB7CiAgICAgICAgICAgICBub2RlLT5wYXJlbnQtPnJpZ2h0ID0gTlVMTDsKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbm9kZS0+cGFyZW50LT5sZWZ0ID0gTlVMTDsKICAgICAgICAgfQpAQCAtMjE0LDExICsyMTUsMTUgQEAKIAogICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwogCi0gICAgICAgIGlmIChub2RlLT5yaWdodAotICAgICAgICAgICAgfHwgbm9kZS0+bGVmdAotICAgICAgICAgICAgfHwgbm9kZS0+dmFsdWUgIT0gTkdYX1JBRElYX05PX1ZBTFVFCi0gICAgICAgICAgICB8fCBub2RlLT5wYXJlbnQgPT0gTlVMTCkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZS0+cmlnaHQgfHwgbm9kZS0+bGVmdCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+dmFsdWUgIT0gTkdYX1JBRElYX05PX1ZBTFVFKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5wYXJlbnQgPT0gTlVMTCkgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3BpbmxvY2suYyBiL3NyYy9jb3JlL25neF9zcGlubG9jay5jCmluZGV4IDAwZTdmY2EuLmEzMDgyYTAgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zcGlubG9jay5jCisrKyBiL3NyYy9jb3JlL25neF9zcGlubG9jay5jCkBAIC0xMiw3ICsxMiw4IEBACiAgKiBUT0RPOiB0aGUgUDQgb3B0aW1pemVkIGFzc2VtYmxlciB2ZXJzaW9uIHdpdGggdGhlICJwYXVzZSIgb3BlcmF0aW9uCiAgKi8KIAotdm9pZCBuZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pCit2b2lkCituZ3hfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfdWludF90IHNwaW4pCiB7CiAKICNpZiAoTkdYX0hBVkVfQVRPTUlDX09QUykKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5jIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKaW5kZXggYzgwNmQ1NS4uODhhOWU5OCAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKQEAgLTgsNjEgKzgsMzMgQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLW5neF9tc2VjX3QgICAgICAgIG5neF9jdXJyZW50X3RpbWU7Ci0KLW5neF9pbnRfdCAgICAgICAgIG5neF9nbXRvZmY7Ci0KLXN0YXRpYyBuZ3hfdG1fdCAgIG5neF9jYWNoZWRfZ210aW1lOwotCi0KIC8qCi0gKiBJbiB0aGUgdGhyZWFkZWQgbW9kZSBvbmx5IG9uZSB0aHJlYWQgdXBkYXRlcyB0aGUgY2FjaGVkIHRpbWUgYW5kIHN0cmluZ3MKLSAqIGFuZCB0aGVzZSBvcGVyYXRpb25zIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIG11dGV4LiAgVGhlIHJlYWRpbmcgb2YgdGhlIGNhY2hlZAotICogdGltZSBhbmQgc3RyaW5ncyBpcyBub3QgcHJvdGVjdGVkIGJ5IHRoZSBtdXRleC4gIFRvIGF2b2lkIHRoZSByYWNlCi0gKiBjb25kaXRpb25zIGZvciBub24tYXRvbWljIHZhbHVlcyB3ZSB1c2UgdGhlIE5HWF9USU1FX1NMT1RTIHNsb3RzIHRvIHN0b3JlCi0gKiB0aW1lIHZhbHVlIGFuZCBzdHJpbmdzLiAgVGh1cyB0aHJlYWQgbWF5IGdldCB0aGUgY29ycnVwdGVkIHZhbHVlcyBvbmx5Ci0gKiBpZiBpdCBpcyBwcmVlbXB0ZWQgd2hpbGUgY29weWluZyBhbmQgdGhlbiBpdCBpcyBub3Qgc2NoZWR1bGVkIHRvIHJ1bgotICogbW9yZSB0aGFuIE5HWF9USU1FX1NMT1RTIHNlY29uZHMuCisgKiBUaGUgdGltZSBtYXkgYmUgdXBkYXRlZCBieSBzaWduYWwgaGFuZGxlciBvciBieSBzZXZlcmFsIHRocmVhZHMuCisgKiBUaGUgdGltZSB1cGRhdGUgb3BlcmF0aW9ucyBhcmUgcmFyZSBhbmQgcmVxdWlyZSB0byBob2xkIHRoZSBuZ3hfdGltZV9sb2NrLgorICogVGhlIHRpbWUgcmVhZCBvcGVyYXRpb25zIGFyZSBmcmVxdWVudCwgc28gdGhleSBhcmUgbG9jay1mcmVlIGFuZCBnZXQgdGltZQorICogdmFsdWVzIGFuZCBzdHJpbmdzIGZyb20gdGhlIGN1cnJlbnQgc2xvdC4gIFRodXMgdGhyZWFkIG1heSBnZXQgdGhlIGNvcnJ1cHRlZAorICogdmFsdWVzIG9ubHkgaWYgaXQgaXMgcHJlZW1wdGVkIHdoaWxlIGNvcHlpbmcgYW5kIHRoZW4gaXQgaXMgbm90IHNjaGVkdWxlZAorICogdG8gcnVuIG1vcmUgdGhhbiBOR1hfVElNRV9TTE9UUyBzZWNvbmRzLgogICovCiAKLSNpZiAoTkdYX1RIUkVBRFMpCisjZGVmaW5lIE5HWF9USU1FX1NMT1RTICAgNjQKIAotI2RlZmluZSBOR1hfVElNRV9TTE9UUyAgNjAKLXN0YXRpYyBuZ3hfdWludF90ICAgICAgIHNsb3QgPSBOR1hfVElNRV9TTE9UUzsKK3N0YXRpYyBuZ3hfdWludF90ICAgICAgICBzbG90ID0gTkdYX1RJTUVfU0xPVFM7CitzdGF0aWMgbmd4X2F0b21pY190ICAgICAgbmd4X3RpbWVfbG9jazsKIAotc3RhdGljIG5neF9tdXRleF90ICAgICAqbmd4X3RpbWVfbXV0ZXg7Cit2b2xhdGlsZSBuZ3hfbXNlY190ICAgICAgbmd4X2N1cnJlbnRfbXNlYzsKK3ZvbGF0aWxlIG5neF90aW1lX3QgICAgICpuZ3hfY2FjaGVkX3RpbWU7Cit2b2xhdGlsZSBuZ3hfc3RyX3QgICAgICAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWU7Cit2b2xhdGlsZSBuZ3hfc3RyX3QgICAgICAgbmd4X2NhY2hlZF9odHRwX3RpbWU7Cit2b2xhdGlsZSBuZ3hfc3RyX3QgICAgICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lOwogCi0jZWxzZQotCi0jZGVmaW5lIE5HWF9USU1FX1NMT1RTICAxCi0jZGVmaW5lIHNsb3QgICAgICAgICAgICAwCi0KLSNlbmRpZgotCi0KLSNpZiAoTkdYX1RIUkVBRFMgJiYgKE5HWF9USU1FX1RfU0laRSA+IE5HWF9TSUdfQVRPTUlDX1RfU0laRSkpCi0KLXZvbGF0aWxlIHRpbWVfdCAgKm5neF9jYWNoZWRfdGltZTsKLXN0YXRpYyB0aW1lX3QgICAgIGNhY2hlZF90aW1lW05HWF9USU1FX1NMT1RTXTsKLQotI2Vsc2UKLQotdm9sYXRpbGUgdGltZV90ICAgbmd4X2NhY2hlZF90aW1lOwotCi0jZW5kaWYKLQotCi1uZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9zdHJfdCAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWU7Ci1uZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9zdHJfdCAgbmd4X2NhY2hlZF9odHRwX3RpbWU7Ci1uZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9zdHJfdCAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lOwotCi0KLXN0YXRpYyB1X2NoYXIgIGNhY2hlZF9lcnJfbG9nX3RpbWVbTkdYX1RJTUVfU0xPVFNdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVvZigiMTk3MC8wOS8yOCAxMjowMDowMCIpXTsKLXN0YXRpYyB1X2NoYXIgIGNhY2hlZF9odHRwX3RpbWVbTkdYX1RJTUVfU0xPVFNdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVvZigiTW9uLCAyOCBTZXAgMTk3MCAwNjowMDowMCBHTVQiKV07Ci1zdGF0aWMgdV9jaGFyICBjYWNoZWRfaHR0cF9sb2dfdGltZVtOR1hfVElNRV9TTE9UU10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2l6ZW9mKCIyOC9TZXAvMTk3MDoxMjowMDowMCArMDYwMCIpXTsKK3N0YXRpYyBuZ3hfdGltZV90ICAgICAgICBjYWNoZWRfdGltZVtOR1hfVElNRV9TTE9UU107CitzdGF0aWMgdV9jaGFyICAgICAgICAgICAgY2FjaGVkX2Vycl9sb2dfdGltZVtOR1hfVElNRV9TTE9UU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplb2YoIjE5NzAvMDkvMjggMTI6MDA6MDAiKV07CitzdGF0aWMgdV9jaGFyICAgICAgICAgICAgY2FjaGVkX2h0dHBfdGltZVtOR1hfVElNRV9TTE9UU10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaXplb2YoIk1vbiwgMjggU2VwIDE5NzAgMDY6MDA6MDAgR01UIildOworc3RhdGljIHVfY2hhciAgICAgICAgICAgIGNhY2hlZF9odHRwX2xvZ190aW1lW05HWF9USU1FX1NMT1RTXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpemVvZigiMjgvU2VwLzE5NzA6MTI6MDA6MDAgKzA2MDAiKV07CiAKIAogc3RhdGljIGNoYXIgICp3ZWVrW10gPSB7ICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiIH07CkBAIC03Miw2MyArNDQsMjkgQEAKIHZvaWQKIG5neF90aW1lX2luaXQodm9pZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7Ci0KLSAgICBuZ3hfbWVtemVybygmbmd4X2NhY2hlZF9nbXRpbWUsIHNpemVvZihuZ3hfdG1fdCkpOwotI2lmZGVmIG5neF90bV96b25lCi0gICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX3pvbmUgPSAiR01UIjsKLSNlbmRpZgotCiAgICAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWUubGVuID0gc2l6ZW9mKCIxOTcwLzA5LzI4IDEyOjAwOjAwIikgLSAxOwogICAgIG5neF9jYWNoZWRfaHR0cF90aW1lLmxlbiA9IHNpemVvZigiTW9uLCAyOCBTZXAgMTk3MCAwNjowMDowMCBHTVQiKSAtIDE7CiAgICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lLmxlbiA9IHNpemVvZigiMjgvU2VwLzE5NzA6MTI6MDA6MDAgKzA2MDAiKSAtIDE7CiAKLSNpZiAoTkdYX1RIUkVBRFMgJiYgKE5HWF9USU1FX1RfU0laRSA+IE5HWF9TSUdfQVRPTUlDX1RfU0laRSkpCiAgICAgbmd4X2NhY2hlZF90aW1lID0gJmNhY2hlZF90aW1lWzBdOwotI2VuZGlmCi0KLSAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0KLSAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKIAogI2lmICEoTkdYX1dJTjMyKQogICAgIHR6c2V0KCk7CiAjZW5kaWYKIAotICAgIG5neF90aW1lX3VwZGF0ZSh0di50dl9zZWMpOworICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKIH0KIAogCi0jaWYgKE5HWF9USFJFQURTKQotCi1uZ3hfaW50X3QKLW5neF90aW1lX211dGV4X2luaXQobmd4X2xvZ190ICpsb2cpCi17Ci0gICAgbmd4X3RpbWVfbXV0ZXggPSBuZ3hfbXV0ZXhfaW5pdChsb2csIE5HWF9NVVRFWF9MSUdIVCk7Ci0KLSAgICBpZiAobmd4X3RpbWVfbXV0ZXggPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIHJldHVybiBOR1hfT0s7Ci19Ci0KLSNlbmRpZgotCi0KIHZvaWQKLW5neF90aW1lX3VwZGF0ZSh0aW1lX3QgcykKK25neF90aW1lX3VwZGF0ZSh0aW1lX3Qgc2VjLCBuZ3hfdWludF90IG1zZWMpCiB7Ci0gICAgdV9jaGFyICAgICpwOwotICAgIG5neF90bV90ICAgdG07CisgICAgdV9jaGFyICAgICAgICAgICpwMCwgKnAxLCAqcDI7CisgICAgbmd4X3RtX3QgICAgICAgICB0bSwgZ210OworICAgIG5neF90aW1lX3QgICAgICAqdHA7CisgICAgc3RydWN0IHRpbWV2YWwgICB0djsKIAotICAgIGlmIChuZ3hfdGltZSgpID09IHMpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lmIChOR1hfVEhSRUFEUykKLQotICAgIGlmIChuZ3hfbXV0ZXhfdHJ5bG9jayhuZ3hfdGltZV9tdXRleCkgIT0gTkdYX09LKSB7CisgICAgaWYgKCFuZ3hfdHJ5bG9jaygmbmd4X3RpbWVfbG9jaykpIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTM4LDc1ICs3Niw4MCBAQAogICAgICAgICBzbG90Kys7CiAgICAgfQogCi0jaWYgKE5HWF9USFJFQURTICYmIChOR1hfVElNRV9UX1NJWkUgPiBOR1hfU0lHX0FUT01JQ19UX1NJWkUpKQotICAgIG5neF9jYWNoZWRfdGltZSA9ICZjYWNoZWRfdGltZVtzbG90XTsKLSNlbmRpZgorICAgIGlmIChzZWMgPT0gMCkgeworICAgICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7CiAKLSNlbmRpZgorICAgICAgICBzZWMgPSB0di50dl9zZWM7CisgICAgICAgIG1zZWMgPSB0di50dl91c2VjIC8gMTAwMDsKKyAgICB9CiAKLSAgICBuZ3hfdGltZSgpID0gczsKKyAgICBuZ3hfY3VycmVudF9tc2VjID0gKG5neF9tc2VjX3QpIHNlYyAqIDEwMDAgKyBtc2VjOwogCi0gICAgbmd4X2dtdGltZShzLCAmbmd4X2NhY2hlZF9nbXRpbWUpOworICAgIHRwID0gJmNhY2hlZF90aW1lW3Nsb3RdOworCisgICAgdHAtPm1zZWMgPSBtc2VjOworCisgICAgaWYgKHRwLT5zZWMgPT0gc2VjKSB7CisgICAgICAgIG5neF91bmxvY2soJm5neF90aW1lX2xvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHAtPnNlYyA9IHNlYzsKKworICAgIG5neF9nbXRpbWUoc2VjLCAmZ210KTsKIAogCi0gICAgcCA9IGNhY2hlZF9odHRwX3RpbWVbc2xvdF07CisgICAgcDAgPSBjYWNoZWRfaHR0cF90aW1lW3Nsb3RdOwogCi0gICAgKHZvaWQpIG5neF9zcHJpbnRmKHAsICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKLSAgICAgICAgICAgICAgICAgICAgICAgd2Vla1tuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1fd2RheV0sCi0gICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9tZGF5LAotICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX21vbiAtIDFdLAotICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2FjaGVkX2dtdGltZS5uZ3hfdG1feWVhciwKLSAgICAgICAgICAgICAgICAgICAgICAgbmd4X2NhY2hlZF9nbXRpbWUubmd4X3RtX2hvdXIsCi0gICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9taW4sCi0gICAgICAgICAgICAgICAgICAgICAgIG5neF9jYWNoZWRfZ210aW1lLm5neF90bV9zZWMpOwotCi0gICAgbmd4X2NhY2hlZF9odHRwX3RpbWUuZGF0YSA9IHA7Ci0KKyAgICAodm9pZCkgbmd4X3NwcmludGYocDAsICIlcywgJTAyZCAlcyAlNGQgJTAyZDolMDJkOiUwMmQgR01UIiwKKyAgICAgICAgICAgICAgICAgICAgICAgd2Vla1tnbXQubmd4X3RtX3dkYXldLCBnbXQubmd4X3RtX21kYXksCisgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoc1tnbXQubmd4X3RtX21vbiAtIDFdLCBnbXQubmd4X3RtX3llYXIsCisgICAgICAgICAgICAgICAgICAgICAgIGdtdC5uZ3hfdG1faG91ciwgZ210Lm5neF90bV9taW4sIGdtdC5uZ3hfdG1fc2VjKTsKIAogI2lmIChOR1hfSEFWRV9HRVRUSU1FWk9ORSkKIAotICAgIG5neF9nbXRvZmYgPSBuZ3hfZ2V0dGltZXpvbmUoKTsKLSAgICBuZ3hfZ210aW1lKHMgKyBuZ3hfZ210b2ZmICogNjAsICZ0bSk7CisgICAgdHAtPmdtdG9mZiA9IG5neF9nZXR0aW1lem9uZSgpOworICAgIG5neF9nbXRpbWUoc2VjICsgdHAtPmdtdG9mZiAqIDYwLCAmdG0pOwogCiAjZWxpZiAoTkdYX0hBVkVfR01UT0ZGKQogCi0gICAgbmd4X2xvY2FsdGltZSgmdG0pOwotICAgIG5neF9nbXRvZmYgPSAobmd4X2ludF90KSAodG0ubmd4X3RtX2dtdG9mZiAvIDYwKTsKKyAgICBuZ3hfbG9jYWx0aW1lKHNlYywgJnRtKTsKKyAgICB0cC0+Z210b2ZmID0gKG5neF9pbnRfdCkgKHRtLm5neF90bV9nbXRvZmYgLyA2MCk7CiAKICNlbHNlCiAKLSAgICBuZ3hfbG9jYWx0aW1lKCZ0bSk7Ci0gICAgbmd4X2dtdG9mZiA9IG5neF90aW1lem9uZSh0bS5uZ3hfdG1faXNkc3QpOworICAgIG5neF9sb2NhbHRpbWUoc2VjLCAmdG0pOworICAgIHRwLT5nbXRvZmYgPSBuZ3hfdGltZXpvbmUodG0ubmd4X3RtX2lzZHN0KTsKIAogI2VuZGlmCiAKIAotICAgIHAgPSBjYWNoZWRfZXJyX2xvZ190aW1lW3Nsb3RdOworICAgIHAxID0gY2FjaGVkX2Vycl9sb2dfdGltZVtzbG90XTsKIAotICAgICh2b2lkKSBuZ3hfc3ByaW50ZihwLCAiJTRkLyUwMmQvJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCisgICAgKHZvaWQpIG5neF9zcHJpbnRmKHAxLCAiJTRkLyUwMmQvJTAyZCAlMDJkOiUwMmQ6JTAyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV95ZWFyLCB0bS5uZ3hfdG1fbW9uLAogICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1fbWRheSwgdG0ubmd4X3RtX2hvdXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sIHRtLm5neF90bV9zZWMpOwogCi0gICAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWUuZGF0YSA9IHA7CiAKKyAgICBwMiA9IGNhY2hlZF9odHRwX2xvZ190aW1lW3Nsb3RdOwogCi0gICAgcCA9IGNhY2hlZF9odHRwX2xvZ190aW1lW3Nsb3RdOwotCi0gICAgKHZvaWQpIG5neF9zcHJpbnRmKHAsICIlMDJkLyVzLyVkOiUwMmQ6JTAyZDolMDJkICVjJTAyZCUwMmQiLAorICAgICh2b2lkKSBuZ3hfc3ByaW50ZihwMiwgIiUwMmQvJXMvJWQ6JTAyZDolMDJkOiUwMmQgJWMlMDJkJTAyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LCBtb250aHNbdG0ubmd4X3RtX21vbiAtIDFdLAogICAgICAgICAgICAgICAgICAgICAgICB0bS5uZ3hfdG1feWVhciwgdG0ubmd4X3RtX2hvdXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9taW4sIHRtLm5neF90bV9zZWMsCi0gICAgICAgICAgICAgICAgICAgICAgIG5neF9nbXRvZmYgPCAwID8gJy0nIDogJysnLAotICAgICAgICAgICAgICAgICAgICAgICBhYnMobmd4X2dtdG9mZiAvIDYwKSwgYWJzKG5neF9nbXRvZmYgJSA2MCkpOwotCi0gICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lLmRhdGEgPSBwOworICAgICAgICAgICAgICAgICAgICAgICB0cC0+Z210b2ZmIDwgMCA/ICctJyA6ICcrJywKKyAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Ficyh0cC0+Z210b2ZmIC8gNjApLCBuZ3hfYWJzKHRwLT5nbXRvZmYgJSA2MCkpOwogCiAKLSNpZiAoTkdYX1RIUkVBRFMpCi0gICAgbmd4X211dGV4X3VubG9jayhuZ3hfdGltZV9tdXRleCk7Ci0jZW5kaWYKKyAgICBuZ3hfbWVtb3J5X2JhcnJpZXIoKTsKIAorICAgIG5neF9jYWNoZWRfdGltZSA9IHRwOworICAgIG5neF9jYWNoZWRfaHR0cF90aW1lLmRhdGEgPSBwMDsKKyAgICBuZ3hfY2FjaGVkX2Vycl9sb2dfdGltZS5kYXRhID0gcDE7CisgICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lLmRhdGEgPSBwMjsKKworICAgIG5neF91bmxvY2soJm5neF90aW1lX2xvY2spOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5oIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKaW5kZXggYmJjYjQxMy4uNmU3YWI2MyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmgKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmgKQEAgLTEyLDQwICsxMiwzNCBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIHRpbWVfdCAgICAgIHNlYzsKKyAgICBuZ3hfdWludF90ICBtc2VjOworICAgIG5neF9pbnRfdCAgIGdtdG9mZjsKK30gbmd4X3RpbWVfdDsKKworCiB2b2lkIG5neF90aW1lX2luaXQodm9pZCk7Ci12b2lkIG5neF90aW1lX3VwZGF0ZSh0aW1lX3Qgcyk7Cit2b2lkIG5neF90aW1lX3VwZGF0ZSh0aW1lX3Qgc2VjLCBuZ3hfdWludF90IG1zZWMpOwogdV9jaGFyICpuZ3hfaHR0cF90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCk7CiB1X2NoYXIgKm5neF9odHRwX2Nvb2tpZV90aW1lKHVfY2hhciAqYnVmLCB0aW1lX3QgdCk7CiB2b2lkIG5neF9nbXRpbWUodGltZV90IHQsIG5neF90bV90ICp0cCk7CiAKLSNpZiAoTkdYX1RIUkVBRFMpCi1uZ3hfaW50X3Qgbmd4X3RpbWVfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZyk7Ci0jZW5kaWYKIAotI2lmIChOR1hfVEhSRUFEUyAmJiAoTkdYX1RJTUVfVF9TSVpFID4gTkdYX1NJR19BVE9NSUNfVF9TSVpFKSkKK2V4dGVybiB2b2xhdGlsZSBuZ3hfdGltZV90ICAqbmd4X2NhY2hlZF90aW1lOwogCi0jZGVmaW5lIG5neF90aW1lKCkgICAgICAgICpuZ3hfY2FjaGVkX3RpbWUKLWV4dGVybiB2b2xhdGlsZSB0aW1lX3QgICAgKm5neF9jYWNoZWRfdGltZTsKKyNkZWZpbmUgbmd4X3RpbWUoKSAgICAgICAgICAgbmd4X2NhY2hlZF90aW1lLT5zZWMKKyNkZWZpbmUgbmd4X3RpbWVvZmRheSgpICAgICAgKG5neF90aW1lX3QgKikgbmd4X2NhY2hlZF90aW1lCiAKLSNlbHNlCi0KLSNkZWZpbmUgbmd4X3RpbWUoKSAgICAgICAgIG5neF9jYWNoZWRfdGltZQotZXh0ZXJuIHZvbGF0aWxlIHRpbWVfdCAgICAgbmd4X2NhY2hlZF90aW1lOwotCi0jZW5kaWYKLQotCi1leHRlcm4gbmd4X3RocmVhZF92b2xhdGlsZSBuZ3hfc3RyX3QgIG5neF9jYWNoZWRfZXJyX2xvZ190aW1lOwotZXh0ZXJuIG5neF90aHJlYWRfdm9sYXRpbGUgbmd4X3N0cl90ICBuZ3hfY2FjaGVkX2h0dHBfdGltZTsKLWV4dGVybiBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9zdHJfdCAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lOwotCi1leHRlcm4gbmd4X2ludF90ICAgbmd4X2dtdG9mZjsKK2V4dGVybiB2b2xhdGlsZSBuZ3hfc3RyX3QgICAgbmd4X2NhY2hlZF9lcnJfbG9nX3RpbWU7CitleHRlcm4gdm9sYXRpbGUgbmd4X3N0cl90ICAgIG5neF9jYWNoZWRfaHR0cF90aW1lOworZXh0ZXJuIHZvbGF0aWxlIG5neF9zdHJfdCAgICBuZ3hfY2FjaGVkX2h0dHBfbG9nX3RpbWU7CiAKIC8qCiAgKiBtaWxsaXNlY29uZHMgZWxhcHNlZCBzaW5jZSBlcG9jaCBhbmQgdHJ1bmNhdGVkIHRvIG5neF9tc2VjX3QsCiAgKiB1c2VkIGluIGV2ZW50IHRpbWVycwogICovCi1leHRlcm4gbmd4X21zZWNfdCAgbmd4X2N1cnJlbnRfdGltZTsKK2V4dGVybiB2b2xhdGlsZSBuZ3hfbXNlY190ICBuZ3hfY3VycmVudF9tc2VjOwogCiAKICNlbmRpZiAvKiBfTkdYX1RJTUVTX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfYWlvX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Fpb19tb2R1bGUuYwppbmRleCBiZjc4YThlLi5mYjNjOGM4IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfYWlvX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9haW9fbW9kdWxlLmMKQEAgLTE0LDEyICsxNCwxMyBAQAogI2VuZGlmCiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfYWlvX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2Fpb19pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcik7CiBzdGF0aWMgdm9pZCBuZ3hfYWlvX2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2Fpb19hZGRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2Fpb19kZWxfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2Fpb19kZWxfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2ludCBmbGFncyk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9haW9fcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2Fpb19wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgbmd4X3VpbnRfdCBmbGFncyk7CiAKIAogbmd4X29zX2lvX3Qgbmd4X29zX2FpbyA9IHsKQEAgLTczLDkgKzc0LDkgQEAKICNpZiAoTkdYX0hBVkVfS1FVRVVFKQogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfYWlvX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2Fpb19pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcikKIHsKLSAgICBpZiAobmd4X2txdWV1ZV9tb2R1bGVfY3R4LmFjdGlvbnMuaW5pdChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgaWYgKG5neF9rcXVldWVfbW9kdWxlX2N0eC5hY3Rpb25zLmluaXQoY3ljbGUsIHRpbWVyKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKQEAgLTE1OSw5ICsxNjAsOSBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9haW9fcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2Fpb19wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsIG5neF91aW50X3QgZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIG5neF9rcXVldWVfbW9kdWxlX2N0eC5hY3Rpb25zLnByb2Nlc3NfZXZlbnRzKGN5Y2xlKTsKKyAgICByZXR1cm4gbmd4X2txdWV1ZV9tb2R1bGVfY3R4LmFjdGlvbnMucHJvY2Vzc19ldmVudHMoY3ljbGUsIHRpbWVyLCBmbGFncyk7CiB9CiAKICNlbmRpZiAvKiBOR1hfSEFWRV9LUVVFVUUgKi8KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9kZXZwb2xsX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKaW5kZXggN2VlODYwMi4uNTRhNTk1NiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMKQEAgLTMxLDEyICszMSwxMyBAQAogfSBuZ3hfZGV2cG9sbF9jb25mX3Q7CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfZGV2cG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9kZXZwb2xsX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKTsKIHN0YXRpYyB2b2lkIG5neF9kZXZwb2xsX2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2RldnBvbGxfYWRkX2V2ZW50KG5neF9ldmVudF90ICpldiwgaW50IGV2ZW50LCB1X2ludCBmbGFncyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9kZXZwb2xsX2RlbF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfZGV2cG9sbF9zZXRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2RldnBvbGxfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2RldnBvbGxfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlLAorICAgIG5neF9tc2VjX3QgdGltZXIsIG5neF91aW50X3QgZmxhZ3MpOwogCiBzdGF0aWMgdm9pZCAqbmd4X2RldnBvbGxfY3JlYXRlX2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBjaGFyICpuZ3hfZGV2cG9sbF9pbml0X2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpjb25mKTsKQEAgLTEwNyw3ICsxMDgsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9kZXZwb2xsX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2RldnBvbGxfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfZGV2cG9sbF9jb25mX3QgICpkcGNmOwpAQCAtMzIzLDQ4ICszMjQsMjEgQEAKIAogCiBuZ3hfaW50X3QKLW5neF9kZXZwb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9kZXZwb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lciwKKyAgICBuZ3hfdWludF90IGZsYWdzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgZXZlbnRzLCByZXZlbnRzOwogICAgIHNpemVfdCAgICAgICAgICAgICAgbjsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgIGVycjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIGk7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICBsb2NrLCBhY2NlcHRfbG9jazsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgIHRpbWVyLCBkZWx0YTsKLSNpZiAwCi0gICAgbmd4X2N5Y2xlX3QgICAgICAgKipvbGRfY3ljbGU7Ci0jZW5kaWYKLSAgICBuZ3hfZXZlbnRfdCAgICAgICAgKnJldiwgKndldjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgIGxldmVsOworICAgIG5neF9tc2VjX3QgICAgICAgICAgZGVsdGE7CisgICAgbmd4X2V2ZW50X3QgICAgICAgICpyZXYsICp3ZXYsICoqcXVldWU7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICpjOwogICAgIHN0cnVjdCBkdnBvbGwgICAgICAgZHZwOwotICAgIHN0cnVjdCB0aW1ldmFsICAgICAgdHY7Ci0KLSAgICB0aW1lciA9IG5neF9ldmVudF9maW5kX3RpbWVyKCk7CiAKICAgICAvKiBOR1hfVElNRVJfSU5GSU5JVEUgPT0gSU5GVElNICovCiAKLSAgICBhY2NlcHRfbG9jayA9IDA7Ci0KLSAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0gCi0KLSAgICAgICAgICAgIGlmIChuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKLSAgICAgICAgICAgICAgICBhY2NlcHRfbG9jayA9IDE7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aW1lciA9IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJkZXZwb2xsIHRpbWVyOiAlTSIsIHRpbWVyKTsKIApAQCAtMzczLDcgKzM0Nyw2IEBACiAgICAgICAgIGlmICh3cml0ZShkcCwgY2hhbmdlX2xpc3QsIG4pICE9IChzc2l6ZV90KSBuKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlKC9kZXYvcG9sbCkgZmFpbGVkIik7Ci0gICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogICAgIH0KQEAgLTM5MSwyMSArMzY0LDMyIEBACiAKICAgICBuY2hhbmdlcyA9IDA7CiAKLSAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0gICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWU7Ci0gICAgbmd4X2N1cnJlbnRfdGltZSA9IChuZ3hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOworICAgIAorICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgeworICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CisgICAgfQogCiAgICAgaWYgKGVycikgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCi0gICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZywgZXJyLCAiaW9jdGwoRFBfUE9MTCkgZmFpbGVkIik7Ci0gICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CisgICAgICAgIGlmIChlcnIgPT0gTkdYX0VJTlRSKSB7CisKKyAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfdGltZXJfYWxhcm0pIHsKKyAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfdGltZXJfYWxhcm0gPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgICAgICB9CisgCisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfSU5GTzsKKyAKKyAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQUxFUlQ7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCBjeWNsZS0+bG9nLCBlcnIsICJpb2N0bChEUF9QT0xMKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZSAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWMgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiZGV2cG9sbCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CkBAIC00MTMsMTcgKzM5NywxNSBAQAogICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImlvY3RsKERQX1BPTEwpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICBpZiAoZXZlbnRzID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKLSAgICBsb2NrID0gMTsKKyAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgZXZlbnRzOyBpKyspIHsKICAgICAgICAgYyA9IG5neF9jeWNsZS0+ZmlsZXNbZXZlbnRfbGlzdFtpXS5mZF07CkBAIC00NjgsNzQgKzQ1MCw0OSBAQAogICAgICAgICAgICAgcmV2ZW50cyB8PSBQT0xMSU58UE9MTE9VVDsKICAgICAgICAgfQogCi0gICAgICAgIHdldiA9IGMtPndyaXRlOwotCi0gICAgICAgIGlmICgocmV2ZW50cyAmIFBPTExPVVQpICYmIHdldi0+YWN0aXZlKSB7Ci0gICAgICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKLQotICAgICAgICAgICAgaWYgKCFuZ3hfdGhyZWFkZWQgJiYgIW5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgewotICAgICAgICAgICAgICAgIHdldi0+aGFuZGxlcih3ZXYpOwotCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KHdldik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBQT0xMSU4gbXVzdCBiZSBoYW5kbGVkIGFmdGVyIFBPTExPVVQgYmVjYXVzZSB3ZSB1c2UKLSAgICAgICAgICogdGhlIG9wdGltaXphdGlvbiB0byBhdm9pZCB0aGUgdW5uZWNlc3NhcnkgbXV0ZXggbG9ja2luZy91bmxvY2tpbmcKLSAgICAgICAgICogaWYgdGhlIGFjY2VwdCBldmVudCBpcyB0aGUgbGFzdCBvbmUuCi0gICAgICAgICAqLwotCiAgICAgICAgIHJldiA9IGMtPnJlYWQ7CiAKICAgICAgICAgaWYgKChyZXZlbnRzICYgUE9MTElOKSAmJiByZXYtPmFjdGl2ZSkgewotICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CiAKLSAgICAgICAgICAgIGlmICghbmd4X3RocmVhZGVkICYmICFuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBOR1hfUE9TVF9USFJFQURfRVZFTlRTKSAmJiAhcmV2LT5hY2NlcHQpIHsKKyAgICAgICAgICAgICAgICByZXYtPnBvc3RlZF9yZWFkeSA9IDE7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmbGFncyAmIE5HWF9QT1NUX0VWRU5UUykgeworICAgICAgICAgICAgICAgIHF1ZXVlID0gKG5neF9ldmVudF90ICoqKSAocmV2LT5hY2NlcHQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZ3hfcG9zdGVkX2FjY2VwdF9ldmVudHMgOiAmbmd4X3Bvc3RlZF9ldmVudHMpOworCisgICAgICAgICAgICAgICAgbmd4X2xvY2tlZF9wb3N0X2V2ZW50KHJldiwgcXVldWUpOworCisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJldi0+aGFuZGxlcihyZXYpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJldi0+YWNjZXB0KSB7Ci0gICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQocmV2KTsKKyAgICAgICAgd2V2ID0gYy0+d3JpdGU7CiAKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA8PSAwKSB7Ci0gICAgICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgIGlmICgocmV2ZW50cyAmIFBPTExPVVQpICYmIHdldi0+YWN0aXZlKSB7CiAKLSAgICAgICAgICAgICAgICBjLT5yZWFkLT5oYW5kbGVyKHJldik7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBOR1hfUE9TVF9USFJFQURfRVZFTlRTKSB7CisgICAgICAgICAgICAgICAgd2V2LT5wb3N0ZWRfcmVhZHkgPSAxOwogCi0gICAgICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfZGlzYWJsZWQgPiAwKSB7IAotICAgICAgICAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwotICAgICAgICAgICAgICAgICAgICBhY2NlcHRfbG9jayA9IDA7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PSBldmVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jayA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmbGFncyAmIE5HWF9QT1NUX0VWRU5UUykgeworICAgICAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudCh3ZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAKLSAgICAgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXB0X2xvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdldi0+aGFuZGxlcih3ZXYpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGFjY2VwdF9sb2NrKSB7Ci0gICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgfQotCi0gICAgaWYgKGxvY2spIHsKLSAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7Ci0gICAgfQotCi0gICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKLQotICAgIGlmICghbmd4X3RocmVhZGVkKSB7Ci0gICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgfQorICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwppbmRleCBhNTNiOGViLi4xNDAxM2RjIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCkBAIC03MCwxMyArNzAsMTQgQEAKIH0gbmd4X2Vwb2xsX2NvbmZfdDsKIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9lcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9lcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcik7CiBzdGF0aWMgdm9pZCBuZ3hfZXBvbGxfZG9uZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfZXBvbGxfYWRkX2V2ZW50KG5neF9ldmVudF90ICpldiwgaW50IGV2ZW50LCB1X2ludCBmbGFncyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9lcG9sbF9kZWxfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2Vwb2xsX2FkZF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfZXBvbGxfZGVsX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9pbnQgZmxhZ3MpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfZXBvbGxfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2Vwb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lciwKKyAgICBuZ3hfdWludF90IGZsYWdzKTsKIAogc3RhdGljIHZvaWQgKm5neF9lcG9sbF9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIGNoYXIgKm5neF9lcG9sbF9pbml0X2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlLCB2b2lkICpjb25mKTsKQEAgLTEzNyw3ICsxMzgsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9lcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9lcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcikKIHsKICAgICBuZ3hfZXZlbnRfY29uZl90ICAqZWNmOwogICAgIG5neF9lcG9sbF9jb25mX3QgICplcGNmOwpAQCAtMzgyLDU3ICszODMsMjAgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfZXBvbGxfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2Vwb2xsX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lciwgbmd4X3VpbnRfdCBmbGFncykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgZXZlbnRzOwogICAgIHVpbnQzMl90ICAgICAgICAgICByZXZlbnRzOwogICAgIG5neF9pbnRfdCAgICAgICAgICBpbnN0YW5jZSwgaTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgbG9jaywgYWNjZXB0X2xvY2s7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGxldmVsOwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CiAgICAgbmd4X2xvZ190ICAgICAgICAgKmxvZzsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgdGltZXIsIGRlbHRhOwotICAgIG5neF9ldmVudF90ICAgICAgICpyZXYsICp3ZXY7Ci0gICAgc3RydWN0IHRpbWV2YWwgICAgIHR2OworICAgIG5neF9tc2VjX3QgICAgICAgICBkZWx0YTsKKyAgICBuZ3hfZXZlbnRfdCAgICAgICAqcmV2LCAqd2V2LCAqKnF1ZXVlOwogICAgIG5neF9jb25uZWN0aW9uX3QgICpjOwogCi0gICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwotCi0jaWYgKE5HWF9USFJFQURTKQotCi0gICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9FUlJPUikgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUgfHwgdGltZXIgPiA1MDApIHsKLSAgICAgICAgdGltZXIgPSA1MDA7Ci0gICAgfQotCi0jZW5kaWYKLQogICAgIC8qIE5HWF9USU1FUl9JTkZJTklURSA9PSBJTkZUSU0gKi8KIAotICAgIGFjY2VwdF9sb2NrID0gMDsKLQotICAgIGlmIChuZ3hfYWNjZXB0X211dGV4KSB7Ci0gICAgICAgIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkID4gMCkgewotICAgICAgICAgICAgbmd4X2FjY2VwdF9kaXNhYmxlZC0tOwotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmd4X3RyeWxvY2tfYWNjZXB0X211dGV4KGN5Y2xlKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7Ci0gICAgICAgICAgICAgICAgYWNjZXB0X2xvY2sgPSAxOwotCi0gICAgICAgICAgICB9IGVsc2UgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURQotICAgICAgICAgICAgICAgICAgICAgICB8fCB0aW1lciA+IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGltZXIgPSBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZXBvbGwgdGltZXI6ICVNIiwgdGltZXIpOwogCkBAIC00NDQsMTQgKzQwOCwxNCBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAotICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKLQotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKLSAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKKyAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWM7CisgICAgCisgICAgaWYgKGZsYWdzICYgTkdYX1VQREFURV9USU1FKSB7CisgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKKyAgICB9CiAKICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZSAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWMgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiZXBvbGwgdGltZXI6ICVNLCBkZWx0YTogJU0iLCB0aW1lciwgZGVsdGEpOwpAQCAtNDU5LDMwICs0MjMsMzQgQEAKICAgICAgICAgaWYgKGV2ZW50cyA9PSAwKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcG9sbF93YWl0KCkgcmV0dXJuZWQgbm8gZXZlbnRzIHdpdGhvdXQgdGltZW91dCIpOwotICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoZXJyKSB7Ci0gICAgICAgIG5neF9sb2dfZXJyb3IoKGVyciA9PSBOR1hfRUlOVFIpID8gTkdYX0xPR19JTkZPIDogTkdYX0xPR19BTEVSVCwKLSAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nLCBlcnIsICJlcG9sbF93YWl0KCkgZmFpbGVkIik7Ci0gICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CisgICAgICAgIGlmIChlcnIgPT0gTkdYX0VJTlRSKSB7CisKKyAgICAgICAgICAgIGlmIChuZ3hfZXZlbnRfdGltZXJfYWxhcm0pIHsKKyAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfdGltZXJfYWxhcm0gPSAwOworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgICAgICB9CisgCisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfSU5GTzsKKyAKKyAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQUxFUlQ7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfbG9nX2Vycm9yKGxldmVsLCBjeWNsZS0+bG9nLCBlcnIsICJlcG9sbF93YWl0KCkgZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgaWYgKGV2ZW50cyA+IDApIHsKLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9IAotCi0gICAgICAgIGxvY2sgPSAxOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgbG9jayA9MDsKKyAgICBpZiAoZXZlbnRzID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CiAKKyAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisKICAgICBsb2cgPSBjeWNsZS0+bG9nOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGV2ZW50czsgaSsrKSB7CkBAIC01MzksOTQgKzUwNyw0NyBAQAogICAgICAgICAgICAgcmV2ZW50cyB8PSBFUE9MTElOfEVQT0xMT1VUOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKChyZXZlbnRzICYgRVBPTExJTikgJiYgcmV2LT5hY3RpdmUpIHsKKworICAgICAgICAgICAgaWYgKChmbGFncyAmIE5HWF9QT1NUX1RIUkVBRF9FVkVOVFMpICYmICFyZXYtPmFjY2VwdCkgeworICAgICAgICAgICAgICAgIHJldi0+cG9zdGVkX3JlYWR5ID0gMTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXYtPnJlYWR5ID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZsYWdzICYgTkdYX1BPU1RfRVZFTlRTKSB7CisgICAgICAgICAgICAgICAgcXVldWUgPSAobmd4X2V2ZW50X3QgKiopIChyZXYtPmFjY2VwdCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50cyA6ICZuZ3hfcG9zdGVkX2V2ZW50cyk7CisKKyAgICAgICAgICAgICAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQocmV2LCBxdWV1ZSk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV2LT5oYW5kbGVyKHJldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICB3ZXYgPSBjLT53cml0ZTsKIAogICAgICAgICBpZiAoKHJldmVudHMgJiBFUE9MTE9VVCkgJiYgd2V2LT5hY3RpdmUpIHsKIAotICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgeworICAgICAgICAgICAgaWYgKGZsYWdzICYgTkdYX1BPU1RfVEhSRUFEX0VWRU5UUykgewogICAgICAgICAgICAgICAgIHdldi0+cG9zdGVkX3JlYWR5ID0gMTsKLSAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudCh3ZXYpOwogCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHdldi0+cmVhZHkgPSAxOwotCi0gICAgICAgICAgICAgICAgaWYgKCFuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgd2V2LT5oYW5kbGVyKHdldik7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudCh3ZXYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEVQT0xMSU4gbXVzdCBiZSBoYW5kbGVkIGFmdGVyIEVQT0xMT1VUIGJlY2F1c2Ugd2UgdXNlCi0gICAgICAgICAqIHRoZSBvcHRpbWl6YXRpb24gdG8gYXZvaWQgdGhlIHVubmVjZXNzYXJ5IG11dGV4IGxvY2tpbmcvdW5sb2NraW5nCi0gICAgICAgICAqIGlmIHRoZSBhY2NlcHQgZXZlbnQgaXMgdGhlIGxhc3Qgb25lLgotICAgICAgICAgKi8KLQotICAgICAgICBpZiAoKHJldmVudHMgJiBFUE9MTElOKSAmJiByZXYtPmFjdGl2ZSkgewotCi0gICAgICAgICAgICBpZiAobmd4X3RocmVhZGVkICYmICFyZXYtPmFjY2VwdCkgewotICAgICAgICAgICAgICAgIHJldi0+cG9zdGVkX3JlYWR5ID0gMTsKLQotICAgICAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KHJldik7Ci0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBOR1hfUE9TVF9FVkVOVFMpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQod2V2LCAmbmd4X3Bvc3RlZF9ldmVudHMpOwogCi0gICAgICAgICAgICBpZiAoIW5neF90aHJlYWRlZCAmJiAhbmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7Ci0gICAgICAgICAgICAgICAgcmV2LT5oYW5kbGVyKHJldik7Ci0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJldi0+YWNjZXB0KSB7Ci0gICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQocmV2KTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkIDw9IDApIHsKLQotICAgICAgICAgICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwotCi0gICAgICAgICAgICAgICAgcmV2LT5oYW5kbGVyKHJldik7Ci0KLSAgICAgICAgICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgYWNjZXB0X2xvY2sgPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PSBldmVudHMpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9jayA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhY2NlcHRfbG9jaykgewotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2V2LT5oYW5kbGVyKHdldik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYWNjZXB0X2xvY2spIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICB9Ci0KLSAgICBpZiAobG9jaykgewotICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKLSAgICB9Ci0KLSAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwotCi0gICAgaWYgKG5neF9wb3N0ZWRfZXZlbnRzKSB7Ci0gICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZChjeWNsZSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CiAKICAgICByZXR1cm4gTkdYX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2lvY3BfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYwppbmRleCAyNjlkOTU1Li5iN2IxYzYyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYwpAQCAtMTAsMTEgKzEwLDEzIEBACiAjaW5jbHVkZSA8bmd4X2lvY3BfbW9kdWxlLmg+CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfaW9jcF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9pb2NwX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKTsKK3N0YXRpYyBuZ3hfdGhyZWFkX3ZhbHVlX3QgX19zdGRjYWxsIG5neF9pb2NwX3RpbWVyKHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgbmd4X2lvY3BfZG9uZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaW9jcF9hZGRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGtleSk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9pb2NwX2RlbF9jb25uZWN0aW9uKG5neF9jb25uZWN0aW9uX3QgKmMsIHVfaW50IGZsYWdzKTsKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2lvY3BfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2lvY3BfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyLAorICAgIG5neF91aW50X3QgZmxhZ3MpOwogc3RhdGljIHZvaWQgKm5neF9pb2NwX2NyZWF0ZV9jb25mKG5neF9jeWNsZV90ICpjeWNsZSk7CiBzdGF0aWMgY2hhciAqbmd4X2lvY3BfaW5pdF9jb25mKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqY29uZik7CiAKQEAgLTkzLDExICs5NSwxMyBAQAogfTsKIAogCi1zdGF0aWMgSEFORExFICBpb2NwOworc3RhdGljIEhBTkRMRSAgICAgIGlvY3A7CitzdGF0aWMgbmd4X3RpZF90ICAgdGltZXJfdGhyZWFkOworc3RhdGljIG5neF9tc2VjX3QgIG1zZWM7CiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2lvY3BfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaW9jcF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcikKIHsKICAgICBuZ3hfaW9jcF9jb25mX3QgICpjZjsKIApAQCAtMTA5LDcgKzExMyw3IEBACiAgICAgfQogCiAgICAgaWYgKGlvY3AgPT0gTlVMTCkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgIkNyZWF0ZUlvQ29tcGxldGlvblBvcnQoKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CkBAIC0xMjAsMTAgKzEyNCw1NSBAQAogCiAgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9BSU9fRVZFTlR8TkdYX1VTRV9JT0NQX0VWRU5UOwogCisgICAgaWYgKHRpbWVyID09IDApIHsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoZSB3YWl0YWJsZSB0aW1lciBjb3VsZCBub3QgYmUgdXNlZCwgYmVjYXVzZQorICAgICAqIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKSBkb2VzIG5vdCBzZXQgYSB0aHJlYWQgdG8gYWxlcnRhYmxlIHN0YXRlCisgICAgICovCisKKyAgICBpZiAodGltZXJfdGhyZWFkID09IE5VTEwpIHsKKworICAgICAgICBtc2VjID0gdGltZXI7CisKKyAgICAgICAgaWYgKG5neF9jcmVhdGVfdGhyZWFkKCZ0aW1lcl90aHJlYWQsIG5neF9pb2NwX3RpbWVyLCAmbXNlYywgY3ljbGUtPmxvZykKKyAgICAgICAgICAgICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBuZ3hfZXZlbnRfZmxhZ3MgfD0gTkdYX1VTRV9USU1FUl9FVkVOVDsKKwogICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAorc3RhdGljIG5neF90aHJlYWRfdmFsdWVfdCBfX3N0ZGNhbGwKK25neF9pb2NwX3RpbWVyKHZvaWQgKmRhdGEpCit7CisgICAgbmd4X21zZWNfdCAgdGltZXIgPSAqKG5neF9tc2VjX3QgKikgZGF0YTsKKworICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIG5neF9jeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJUSFJFQUQgJXAgJXAiLCAmbXNlYywgZGF0YSk7CisKKyAgICBmb3IgKCA7OyApIHsKKyAgICAgICAgU2xlZXAodGltZXIpOworCisgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKKyNpZiAxCisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIG5neF9jeWNsZS0+bG9nLCAwLCAidGltZXIiKTsKKyNlbmRpZgorICAgIH0KKworI2lmZGVmIF9fV0FUQ09NQ19fCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworCiBzdGF0aWMgdm9pZAogbmd4X2lvY3BfZG9uZShuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CkBAIC0xNzgsMTkgKzIyNywxNyBAQAogCiAKIHN0YXRpYwotbmd4X2ludF90IG5neF9pb2NwX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9pbnRfdCBuZ3hfaW9jcF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgbmd4X3VpbnRfdCBmbGFncykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgcmM7CiAgICAgdV9pbnQgICAgICAgICAgICAgIGtleTsKICAgICB1X2xvbmcgICAgICAgICAgICAgYnl0ZXM7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgdGltZXIsIGRlbHRhOworICAgIG5neF9tc2VjX3QgICAgICAgICBkZWx0YTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAqZXY7Ci0gICAgc3RydWN0IHRpbWV2YWwgICAgIHR2OwogICAgIG5neF9ldmVudF9vdmxwX3QgICpvdmxwOwogCi0gICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwotCiAgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSkgewogICAgICAgICB0aW1lciA9IElORklOSVRFOwogICAgIH0KQEAgLTIwNiwxNyArMjUzLDE3IEBACiAgICAgICAgIGVyciA9IDA7CiAgICAgfQogCi0gICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwotICAgIG5neF90aW1lX3VwZGF0ZSh0di50dl9zZWMpOworICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKKyAgICAKKyAgICBpZiAoZmxhZ3MgJiBOR1hfVVBEQVRFX1RJTUUpIHsKKyAgICAgICAgbmd4X3RpbWVfdXBkYXRlKDAsIDApOworICAgIH0KIAogICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImlvY3A6ICVkIGI6JWQgazolZCBvdjolcCIsIHJjLCBieXRlcywga2V5LCBvdmxwKTsKIAotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKLSAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKLQogICAgIGlmICh0aW1lciAhPSBJTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjIC0gZGVsdGE7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImlvY3AgdGltZXI6ICVNLCBkZWx0YTogJU0iLCB0aW1lciwgZGVsdGEpOwpAQCAtMjMxLDggKzI3OCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKLQogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCkBAIC0yNjMsOCArMzA4LDYgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAiaW9jcDogYWJvcnRlZCBldmVudCAlcCIsIGV2KTsgCiAKLSAgICAgICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKLQogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApAQCAtMjk3LDggKzM0MCw2IEBACiAKICAgICBldi0+aGFuZGxlcihldik7CiAKLSAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwotCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9rcXVldWVfbW9kdWxlLmMKaW5kZXggZTgwZTFhYi4uMWM2YWI1NSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2txdWV1ZV9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfa3F1ZXVlX21vZHVsZS5jCkBAIC0xNiwxMyArMTYsMTQgQEAKIH0gbmd4X2txdWV1ZV9jb25mX3Q7CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfa3F1ZXVlX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2txdWV1ZV9pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcik7CiBzdGF0aWMgdm9pZCBuZ3hfa3F1ZXVlX2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2txdWV1ZV9hZGRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2txdWV1ZV9kZWxfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2txdWV1ZV9zZXRfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZmlsdGVyLCB1X2ludCBmbGFncyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9rcXVldWVfcHJvY2Vzc19jaGFuZ2VzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpbnRfdCB0cnkpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfa3F1ZXVlX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9rcXVldWVfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyLAorICAgIG5neF91aW50X3QgZmxhZ3MpOwogc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfa3F1ZXVlX2R1bXBfZXZlbnQobmd4X2xvZ190ICpsb2csCiAgICAgc3RydWN0IGtldmVudCAqa2V2KTsKIApAQCAtMTExLDggKzExMiw5IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2txdWV1ZV9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9rcXVldWVfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIpCiB7CisgICAgc3RydWN0IGtldmVudCAgICAgICBrZXY7CiAgICAgc3RydWN0IHRpbWVzcGVjICAgICB0czsKICAgICBuZ3hfa3F1ZXVlX2NvbmZfdCAgKmtjZjsKIApAQCAtMTkxLDI1ICsxOTMsNTAgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIG5neF9ldmVudF9mbGFncyA9IDA7CisKKyNpZiAoTkdYX0hBVkVfVElNRVJfRVZFTlQpCisKKyAgICBpZiAodGltZXIpIHsKKyAgICAgICAga2V2LmlkZW50ID0gMDsKKyAgICAgICAga2V2LmZpbHRlciA9IEVWRklMVF9USU1FUjsKKyAgICAgICAga2V2LmZsYWdzID0gRVZfQUREfEVWX0VOQUJMRTsKKyAgICAgICAga2V2LmZmbGFncyA9IDA7CisgICAgICAgIGtldi5kYXRhID0gdGltZXI7CisgICAgICAgIGtldi51ZGF0YSA9IDA7CisKKyAgICAgICAgdHMudHZfc2VjID0gMDsKKyAgICAgICAgdHMudHZfbnNlYyA9IDA7CisKKyAgICAgICAgaWYgKGtldmVudChuZ3hfa3F1ZXVlLCAma2V2LCAxLCBOVUxMLCAwLCAmdHMpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudChFVkZJTFRfVElNRVIpIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9ldmVudF9mbGFncyB8PSBOR1hfVVNFX1RJTUVSX0VWRU5UOworICAgIH0KKworI2VuZGlmCisKKyAgICBuZ3hfZXZlbnRfZmxhZ3MgfD0gTkdYX1VTRV9PTkVTSE9UX0VWRU5UfE5HWF9VU0VfS1FVRVVFX0VWRU5UOworCisjaWYgKE5HWF9IQVZFX0NMRUFSX0VWRU5UKQorICAgIG5neF9ldmVudF9mbGFncyB8PSBOR1hfVVNFX0NMRUFSX0VWRU5UOworI2Vsc2UKKyAgICBuZ3hfZXZlbnRfZmxhZ3MgfD0gTkdYX1VTRV9MRVZFTF9FVkVOVDsKKyNlbmRpZgorCisjaWYgKE5HWF9IQVZFX0xPV0FUX0VWRU5UKQorICAgIG5neF9ldmVudF9mbGFncyB8PSBOR1hfVVNFX0xPV0FUX0VWRU5UOworI2VuZGlmCisKICAgICBuZXZlbnRzID0ga2NmLT5ldmVudHM7CiAKICAgICBuZ3hfaW8gPSBuZ3hfb3NfaW87CiAKICAgICBuZ3hfZXZlbnRfYWN0aW9ucyA9IG5neF9rcXVldWVfbW9kdWxlX2N0eC5hY3Rpb25zOwogCi0gICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9PTkVTSE9UX0VWRU5UCi0jaWYgMQotI2lmIChOR1hfSEFWRV9DTEVBUl9FVkVOVCkKLSAgICAgICAgICAgICAgICAgICAgIHxOR1hfVVNFX0NMRUFSX0VWRU5UCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgfE5HWF9VU0VfTEVWRUxfRVZFTlQKLSNlbmRpZgotI2VuZGlmCi0jaWYgKE5HWF9IQVZFX0xPV0FUX0VWRU5UKQotICAgICAgICAgICAgICAgICAgICAgfE5HWF9VU0VfTE9XQVRfRVZFTlQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgfE5HWF9VU0VfS1FVRVVFX0VWRU5UOwotCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIApAQCAtMjU0LDkgKzI4MSw3IEBACiAgICAgZXYtPmRpc2FibGVkID0gMDsKICAgICBldi0+b25lc2hvdCA9IChmbGFncyAmIE5HWF9PTkVTSE9UX0VWRU5UKSA/IDEgOiAwOwogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKGxpc3RfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhsaXN0X211dGV4KTsKIAogI2lmIDEKIApAQCAtMzE3LDkgKzM0Miw3IEBACiAgICAgZXYtPmFjdGl2ZSA9IDA7CiAgICAgZXYtPmRpc2FibGVkID0gMDsKIAotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhsaXN0X211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9CisgICAgbmd4X211dGV4X2xvY2sobGlzdF9tdXRleCk7CiAKICNpZiAxCiAKQEAgLTQ0MSw1NiArNDY0LDE5IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X2txdWV1ZV9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfa3F1ZXVlX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lciwKKyAgICBuZ3hfdWludF90IGZsYWdzKQogewotICAgIGludCAgICAgICAgICAgICAgICBldmVudHMsIG47Ci0gICAgbmd4X2ludF90ICAgICAgICAgIGksIGluc3RhbmNlOwotICAgIG5neF91aW50X3QgICAgICAgICBsb2NrLCBhY2NlcHRfbG9jazsKLSAgICBuZ3hfZXJyX3QgICAgICAgICAgZXJyOwotICAgIG5neF9tc2VjX3QgICAgICAgICB0aW1lciwgZGVsdGE7Ci0gICAgbmd4X2V2ZW50X3QgICAgICAgKmV2OwotICAgIHN0cnVjdCB0aW1ldmFsICAgICB0djsKLSAgICBzdHJ1Y3QgdGltZXNwZWMgICAgdHMsICp0cDsKLQotICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKLQotI2lmIChOR1hfVEhSRUFEUykKLQotICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFIHx8IHRpbWVyID4gNTAwKSB7Ci0gICAgICAgIHRpbWVyID0gNTAwOwotICAgIH0KLQotI2VuZGlmCi0KLSAgICBhY2NlcHRfbG9jayA9IDA7Ci0KLSAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgewotICAgICAgICAgICAgICAgIGFjY2VwdF9sb2NrID0gMTsKLQotICAgICAgICAgICAgfSBlbHNlIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUKLSAgICAgICAgICAgICAgICAgICAgICAgfHwgdGltZXIgPiBuZ3hfYWNjZXB0X211dGV4X2RlbGF5KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRpbWVyID0gbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBpbnQgICAgICAgICAgICAgICBldmVudHMsIG47CisgICAgbmd4X2ludF90ICAgICAgICAgaSwgaW5zdGFuY2U7CisgICAgbmd4X3VpbnRfdCAgICAgICAgbGV2ZWw7CisgICAgbmd4X2Vycl90ICAgICAgICAgZXJyOworICAgIG5neF9tc2VjX3QgICAgICAgIGRlbHRhOworICAgIG5neF9ldmVudF90ICAgICAgKmV2LCAqKnF1ZXVlOworICAgIHN0cnVjdCB0aW1lc3BlYyAgIHRzLCAqdHA7CiAKICAgICBpZiAobmd4X3RocmVhZGVkKSB7CiAgICAgICAgIGlmIChuZ3hfa3F1ZXVlX3Byb2Nlc3NfY2hhbmdlcyhjeWNsZSwgMCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCkBAIC01MjEsMjQgKzUwNywzNSBAQAogICAgICAgICBlcnIgPSAwOwogICAgIH0KIAotICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKKyAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWM7CisKKyAgICBpZiAoZmxhZ3MgJiBOR1hfVVBEQVRFX1RJTUUpIHsKKyAgICAgICAgbmd4X3RpbWVfdXBkYXRlKDAsIDApOworICAgIH0KIAogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImtldmVudCBldmVudHM6ICVkIiwgZXZlbnRzKTsKIAotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKLSAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKLQogICAgIGlmIChlcnIpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcigoZXJyID09IE5HWF9FSU5UUikgPyBOR1hfTE9HX0lORk8gOiBOR1hfTE9HX0FMRVJULAotICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2csIGVyciwgImtldmVudCgpIGZhaWxlZCIpOwotICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOworICAgICAgICBpZiAoZXJyID09IE5HWF9FSU5UUikgeworCisgICAgICAgICAgICBpZiAobmd4X2V2ZW50X3RpbWVyX2FsYXJtKSB7CisgICAgICAgICAgICAgICAgbmd4X2V2ZW50X3RpbWVyX2FsYXJtID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfSU5GTzsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0FMRVJUOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2xvZ19lcnJvcihsZXZlbCwgY3ljbGUtPmxvZywgZXJyLCAia2V2ZW50KCkgZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCiAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjIC0gZGVsdGE7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CkBAIC01NDcsMjMgKzU0NCwxNiBAQAogICAgICAgICBpZiAoZXZlbnRzID09IDApIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImtldmVudCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGV2ZW50cyA+IDApIHsKLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9jayA9IDE7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBsb2NrID0wOworICAgIGlmIChldmVudHMgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAorICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKwogICAgIGZvciAoaSA9IDA7IGkgPCBldmVudHM7IGkrKykgewogCiAgICAgICAgIG5neF9rcXVldWVfZHVtcF9ldmVudChjeWNsZS0+bG9nLCAmZXZlbnRfbGlzdFtpXSk7CkBAIC01NzQsNiArNTY0LDE1IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisjaWYgKE5HWF9IQVZFX1RJTUVSX0VWRU5UKQorCisgICAgICAgIGlmIChldmVudF9saXN0W2ldLmZpbHRlciA9PSBFVkZJTFRfVElNRVIpIHsKKyAgICAgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyNlbmRpZgorCiAgICAgICAgIGV2ID0gKG5neF9ldmVudF90ICopIGV2ZW50X2xpc3RbaV0udWRhdGE7CiAKICAgICAgICAgc3dpdGNoIChldmVudF9saXN0W2ldLmZpbHRlcikgewpAQCAtNjA2LDcgKzYwNSw3IEBACiAKICNpZiAoTkdYX1RIUkVBRFMpCiAKLSAgICAgICAgICAgIGlmIChuZ3hfdGhyZWFkZWQgJiYgIWV2LT5hY2NlcHQpIHsKKyAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBOR1hfUE9TVF9USFJFQURfRVZFTlRTKSAmJiAhZXYtPmFjY2VwdCkgewogICAgICAgICAgICAgICAgIGV2LT5wb3N0ZWRfcmVhZHkgPSAxOwogICAgICAgICAgICAgICAgIGV2LT5wb3N0ZWRfYXZhaWxhYmxlID0gZXZlbnRfbGlzdFtpXS5kYXRhOwogCkBAIC02MTUsNyArNjE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXYtPnBvc3RlZF9lcnJubyA9IGV2ZW50X2xpc3RbaV0uZmZsYWdzOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KGV2KTsKKyAgICAgICAgICAgICAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQoZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY1MSw2MCArNjUwLDE4IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbmd4X3RocmVhZGVkICYmICFuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKLSAgICAgICAgICAgIGV2LT5oYW5kbGVyKGV2KTsKKyAgICAgICAgaWYgKGZsYWdzICYgTkdYX1BPU1RfRVZFTlRTKSB7CisgICAgICAgICAgICBxdWV1ZSA9IChuZ3hfZXZlbnRfdCAqKikgKGV2LT5hY2NlcHQgPyAmbmd4X3Bvc3RlZF9hY2NlcHRfZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfZXZlbnRzKTsKKyAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpOworCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZXYtPmFjY2VwdCkgewotICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7Ci0KICAgICAgICAgZXYtPmhhbmRsZXIoZXYpOwotCi0gICAgICAgIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkID4gMCkgewotICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgICAgIGFjY2VwdF9sb2NrID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpICsgMSA9PSBldmVudHMpIHsKLSAgICAgICAgICAgIGxvY2sgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgaWYgKGFjY2VwdF9sb2NrKSB7Ci0gICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYWNjZXB0X2xvY2spIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICB9Ci0KLSAgICBpZiAobG9jaykgewotICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKLSAgICB9Ci0KLSAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwotCi0gICAgaWYgKG5neF9wb3N0ZWRfZXZlbnRzKSB7Ci0gICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZChjeWNsZSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CiAKICAgICByZXR1cm4gTkdYX09LOwogfQpAQCAtNzE5LDE0ICs2NzYsOSBAQAogICAgIHN0cnVjdCB0aW1lc3BlYyAgIHRzOwogICAgIHN0cnVjdCBrZXZlbnQgICAgKmNoYW5nZXM7CiAKLSAgICBpZiAobmd4X211dGV4X2xvY2soa2V2ZW50X211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9CisgICAgbmd4X211dGV4X2xvY2soa2V2ZW50X211dGV4KTsKIAotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhsaXN0X211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgbmd4X211dGV4X3VubG9jayhrZXZlbnRfbXV0ZXgpOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhsaXN0X211dGV4KTsKIAogICAgIGlmIChuY2hhbmdlcyA9PSAwKSB7CiAgICAgICAgIG5neF9tdXRleF91bmxvY2sobGlzdF9tdXRleCk7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCmluZGV4IDI5YjM3NWEuLjYxZDYxNzkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9wb2xsX21vZHVsZS5jCkBAIC05LDIzICs5LDE4IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9wb2xsX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKTsKIHN0YXRpYyB2b2lkIG5neF9wb2xsX2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X3BvbGxfYWRkX2V2ZW50KG5neF9ldmVudF90ICpldiwgaW50IGV2ZW50LCB1X2ludCBmbGFncyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9wb2xsX2RlbF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfcG9sbF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfcG9sbF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgbmd4X3VpbnRfdCBmbGFncyk7CiBzdGF0aWMgY2hhciAqbmd4X3BvbGxfaW5pdF9jb25mKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqY29uZik7CiAKIAogc3RhdGljIHN0cnVjdCBwb2xsZmQgICpldmVudF9saXN0Owogc3RhdGljIGludCAgICAgICAgICAgICBuZXZlbnRzOwogCi0jaWYgMAotc3RhdGljIG5neF9ldmVudF90ICAgKipyZWFkeV9pbmRleDsKLSNlbmRpZgotCi1zdGF0aWMgbmd4X2V2ZW50X3QgICAgKmFjY2VwdF9ldmVudHM7Ci0KIAogc3RhdGljIG5neF9zdHJfdCAgICBwb2xsX25hbWUgPSBuZ3hfc3RyaW5nKCJwb2xsIik7CiAKQEAgLTY3LDcgKzYyLDcgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfcG9sbF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9wb2xsX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKQogewogICAgIHN0cnVjdCBwb2xsZmQgICAqbGlzdDsKIApAQCAtOTEsMjcgKzg2LDEzIEBACiAgICAgICAgIH0KIAogICAgICAgICBldmVudF9saXN0ID0gbGlzdDsKLQotI2lmIDAKLSAgICAgICAgaWYgKHJlYWR5X2luZGV4KSB7Ci0gICAgICAgICAgICBuZ3hfZnJlZShyZWFkeV9pbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWFkeV9pbmRleCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2V2ZW50X3QgKikgKiAyICogY3ljbGUtPmNvbm5lY3Rpb25fbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7Ci0gICAgICAgIGlmIChyZWFkeV9pbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKICAgICBuZ3hfaW8gPSBuZ3hfb3NfaW87CiAKICAgICBuZ3hfZXZlbnRfYWN0aW9ucyA9IG5neF9wb2xsX21vZHVsZV9jdHguYWN0aW9uczsKIAotICAgIG5neF9ldmVudF9mbGFncyA9IE5HWF9VU0VfTEVWRUxfRVZFTlQKLSAgICAgICAgICAgICAgICAgICAgICB8TkdYX1VTRV9PTkVTSE9UX0VWRU5UCi0gICAgICAgICAgICAgICAgICAgICAgfE5HWF9VU0VfRkRfRVZFTlQ7CisgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVHxOR1hfVVNFX0ZEX0VWRU5UOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTEyMSwxNCArMTAyLDggQEAKIG5neF9wb2xsX2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIG5neF9mcmVlKGV2ZW50X2xpc3QpOwotI2lmIDAKLSAgICBuZ3hfZnJlZShyZWFkeV9pbmRleCk7Ci0jZW5kaWYKIAogICAgIGV2ZW50X2xpc3QgPSBOVUxMOwotI2lmIDAKLSAgICByZWFkeV9pbmRleCA9IE5VTEw7Ci0jZW5kaWYKIH0KIAogCkBAIC0xODksMTAgKzE2NCw4IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfcG9sbF9kZWxfZXZlbnQobmd4X2V2ZW50X3QgKmV2LCBpbnQgZXZlbnQsIHVfaW50IGZsYWdzKQogewotICAgIG5neF91aW50X3QgICAgICAgICAgaTsKLSAgICBuZ3hfY3ljbGVfdCAgICAgICAqKmN5Y2xlOwotICAgIG5neF9ldmVudF90ICAgICAgICAqZTsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAgKmM7CisgICAgbmd4X2V2ZW50X3QgICAgICAgKmU7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAKICAgICBjID0gZXYtPmRhdGE7CiAKQEAgLTIzNCwxOSArMjA3LDYgQEAKICAgICAgICAgICAgIGMgPSBuZ3hfY3ljbGUtPmZpbGVzW2V2ZW50X2xpc3RbbmV2ZW50c10uZmRdOwogCiAgICAgICAgICAgICBpZiAoYy0+ZmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBjeWNsZSA9IG5neF9vbGRfY3ljbGVzLmVsdHM7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5neF9vbGRfY3ljbGVzLm5lbHRzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN5Y2xlW2ldID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGMgPSBjeWNsZVtpXS0+ZmlsZXNbZXZlbnRfbGlzdFtuZXZlbnRzXS5mZF07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjLT5mZCAhPSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGxhc3QgZXZlbnQiKTsKIApAQCAtMjc1LDE5ICsyMzUsMTUgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfcG9sbF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfcG9sbF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsIG5neF91aW50X3QgZmxhZ3MpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICByZWFkeSwgcmV2ZW50czsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgIGVycjsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIGksIG5yZWFkeTsKLSAgICBuZ3hfdWludF90ICAgICAgICAgIG4sIGZvdW5kLCBsb2NrOwotICAgIG5neF9tc2VjX3QgICAgICAgICAgdGltZXIsIGRlbHRhOwotICAgIG5neF9jeWNsZV90ICAgICAgICoqb2xkX2N5Y2xlOwotICAgIG5neF9ldmVudF90ICAgICAgICAqZXY7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICBmb3VuZCwgbGV2ZWw7CisgICAgbmd4X21zZWNfdCAgICAgICAgICBkZWx0YTsKKyAgICBuZ3hfZXZlbnRfdCAgICAgICAgKmV2LCAqKnF1ZXVlOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgIHR2OwotCi0gICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwogCiAgICAgLyogTkdYX1RJTUVSX0lORklOSVRFID09IElORlRJTSAqLwogCkBAIC0zMDEsMjQgKzI1Nyw2IEBACiAgICAgfQogI2VuZGlmCiAKLSAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCA9PSAwCi0gICAgICAgICAgICAgICAgJiYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURQotICAgICAgICAgICAgICAgICAgICB8fCB0aW1lciA+IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXkpKQotICAgICAgICAgICAgeyAKLSAgICAgICAgICAgICAgICB0aW1lciA9IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci0gICAgICAgICAgICB9IAotICAgICAgICB9Ci0gICAgfQotCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwgInBvbGwgdGltZXI6ICVNIiwgdGltZXIpOwogCiAgICAgcmVhZHkgPSBwb2xsKGV2ZW50X2xpc3QsICh1X2ludCkgbmV2ZW50cywgKGludCkgdGltZXIpOwpAQCAtMzI5LDI0ICsyNjcsMzUgQEAKICAgICAgICAgZXJyID0gMDsKICAgICB9CiAKLSAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0gICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOwogCi0gICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lOwotICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOworICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgeworICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CisgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAicG9sbCByZWFkeSAlZCBvZiAlZCIsIHJlYWR5LCBuZXZlbnRzKTsKIAogICAgIGlmIChlcnIpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcigoZXJyID09IE5HWF9FSU5UUikgPyBOR1hfTE9HX0lORk8gOiBOR1hfTE9HX0FMRVJULAotICAgICAgICAgICAgICAgICAgICAgIGN5Y2xlLT5sb2csIGVyciwgInBvbGwoKSBmYWlsZWQiKTsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRUlOVFIpIHsKKworICAgICAgICAgICAgaWYgKG5neF9ldmVudF90aW1lcl9hbGFybSkgeworICAgICAgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9hbGFybSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19JTkZPOworIAorICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19BTEVSVDsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZXJyb3IobGV2ZWwsIGN5Y2xlLT5sb2csIGVyciwgInBvbGwoKSBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7Ci0gICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZSAtIGRlbHRhOworICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X21zZWMgLSBkZWx0YTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAicG9sbCB0aW1lcjogJU0sIGRlbHRhOiAlTSIsIHRpbWVyLCBkZWx0YSk7CkBAIC0zNTQsMjQgKzMwMywyMyBAQAogICAgICAgICBpZiAocmVhZHkgPT0gMCkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9sbCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICBpZiAocmVhZHkgPT0gMCkgeworICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAotICAgIGxvY2sgPSAxOworICAgIG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKwogICAgIG5yZWFkeSA9IDA7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbmV2ZW50cyAmJiByZWFkeTsgaSsrKSB7CiAKICAgICAgICAgcmV2ZW50cyA9IGV2ZW50X2xpc3RbaV0ucmV2ZW50czsKIAotI2lmIDAKKyNpZiAxCiAgICAgICAgIG5neF9sb2dfZGVidWc0KE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJwb2xsOiAlZDogZmQ6JWQgZXY6JTA0WGQgcmV2OiUwNFhkIiwKICAgICAgICAgICAgICAgICAgICAgICAgaSwgZXZlbnRfbGlzdFtpXS5mZCwgZXZlbnRfbGlzdFtpXS5ldmVudHMsIHJldmVudHMpOwpAQCAtNDA2LDE5ICszNTQsNiBAQAogICAgICAgICBjID0gbmd4X2N5Y2xlLT5maWxlc1tldmVudF9saXN0W2ldLmZkXTsKIAogICAgICAgICBpZiAoYy0+ZmQgPT0gLTEpIHsKLSAgICAgICAgICAgIG9sZF9jeWNsZSA9IG5neF9vbGRfY3ljbGVzLmVsdHM7Ci0gICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbmd4X29sZF9jeWNsZXMubmVsdHM7IG4rKykgewotICAgICAgICAgICAgICAgIGlmIChvbGRfY3ljbGVbbl0gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYyA9IG9sZF9jeWNsZVtuXS0+ZmlsZXNbZXZlbnRfbGlzdFtpXS5mZF07Ci0gICAgICAgICAgICAgICAgaWYgKGMtPmZkICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjLT5mZCA9PSAtMSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLCAidW5leHBlY3RlZCBldmVudCIpOwogCiAgICAgICAgICAgICAvKgpAQCAtNDUzLDQzICszODgsMzEgQEAKICAgICAgICAgICAgIGZvdW5kID0gMTsKIAogICAgICAgICAgICAgZXYgPSBjLT5yZWFkOwotICAgICAgICAgICAgZXYtPnJlYWR5ID0gMTsKIAotICAgICAgICAgICAgaWYgKGV2LT5vbmVzaG90KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2LT50aW1lcl9zZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2RlbF90aW1lcihldik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5neF9wb2xsX2RlbF9ldmVudChldiwgTkdYX1JFQURfRVZFTlQsIDApOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChmbGFncyAmIE5HWF9QT1NUX1RIUkVBRF9FVkVOVFMpICYmICFldi0+YWNjZXB0KSB7CisgICAgICAgICAgICAgICAgZXYtPnBvc3RlZF9yZWFkeSA9IDE7CiAKLSAgICAgICAgICAgIGlmIChldi0+YWNjZXB0KSB7Ci0gICAgICAgICAgICAgICAgZXYtPm5leHQgPSBhY2NlcHRfZXZlbnRzOwotICAgICAgICAgICAgICAgIGFjY2VwdF9ldmVudHMgPSBldjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYpOworICAgICAgICAgICAgICAgIGV2LT5yZWFkeSA9IDE7CiAgICAgICAgICAgICB9CiAKLSNpZiAwCi0gICAgICAgICAgICByZWFkeV9pbmRleFtucmVhZHkrK10gPSBjLT5yZWFkOwotI2VuZGlmCisgICAgICAgICAgICBxdWV1ZSA9IChuZ3hfZXZlbnRfdCAqKikgKGV2LT5hY2NlcHQgPyAmbmd4X3Bvc3RlZF9hY2NlcHRfZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfZXZlbnRzKTsKKyAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpOyAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChyZXZlbnRzICYgUE9MTE9VVCkgewogICAgICAgICAgICAgZm91bmQgPSAxOwogICAgICAgICAgICAgZXYgPSBjLT53cml0ZTsKLSAgICAgICAgICAgIGV2LT5yZWFkeSA9IDE7CiAKLSAgICAgICAgICAgIGlmIChldi0+b25lc2hvdCkgewotICAgICAgICAgICAgICAgIGlmIChldi0+dGltZXJfc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9kZWxfdGltZXIoZXYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuZ3hfcG9sbF9kZWxfZXZlbnQoZXYsIE5HWF9XUklURV9FVkVOVCwgMCk7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBOR1hfUE9TVF9USFJFQURfRVZFTlRTKSB7CisgICAgICAgICAgICAgICAgZXYtPnBvc3RlZF9yZWFkeSA9IDE7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZXYtPnJlYWR5ID0gMTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYpOwotI2lmIDAKLSAgICAgICAgICAgIHJlYWR5X2luZGV4W25yZWFkeSsrXSA9IGMtPndyaXRlOwotI2VuZGlmCisgICAgICAgICAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQoZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZm91bmQpIHsKQEAgLTQ5OCw4MyArNDIxLDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAwCi0gICAgZm9yIChpID0gMDsgaSA8IG5yZWFkeTsgaSsrKSB7Ci0gICAgICAgIGV2ID0gcmVhZHlfaW5kZXhbaV07Ci0KLSAgICAgICAgaWYgKCFldi0+YWN0aXZlKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGV2LT5yZWFkeSA9IDE7Ci0KLSAgICAgICAgaWYgKGV2LT5vbmVzaG90KSB7Ci0gICAgICAgICAgICBpZiAoZXYtPnRpbWVyX3NldCkgewotICAgICAgICAgICAgICAgIG5neF9kZWxfdGltZXIoZXYpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZXYtPndyaXRlKSB7Ci0gICAgICAgICAgICAgICAgbmd4X3BvbGxfZGVsX2V2ZW50KGV2LCBOR1hfV1JJVEVfRVZFTlQsIDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZ3hfcG9sbF9kZWxfZXZlbnQoZXYsIE5HWF9SRUFEX0VWRU5ULCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGV2LT5oYW5kbGVyKGV2KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGV2ID0gYWNjZXB0X2V2ZW50czsKLQotICAgIGZvciAoIDs7ICkgewotCi0gICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgImFjY2VwdCBldmVudCAlcCIsIGV2KTsKLQotICAgICAgICBpZiAoZXYgPT0gTlVMTCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKLQotICAgICAgICBldi0+aGFuZGxlcihldik7Ci0KLSAgICAgICAgaWYgKG5neF9hY2NlcHRfZGlzYWJsZWQgPiAwKSB7Ci0gICAgICAgICAgICBsb2NrID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZXYgPSBldi0+bmV4dDsKLQotICAgICAgICBpZiAoZXYgPT0gTlVMTCkgewotICAgICAgICAgICAgbG9jayA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICBhY2NlcHRfZXZlbnRzID0gTlVMTDsKLQotICAgIGlmIChsb2NrKSB7Ci0gICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKIAogICAgIGlmIChyZWFkeSAhPSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwgInBvbGwgcmVhZHkgIT0gZXZlbnRzIik7CiAgICAgfQogCi0gICAgbmd4X2V2ZW50X2V4cGlyZV90aW1lcnMoKTsKLQotICAgIGlmICghbmd4X3RocmVhZGVkKSB7Ci0gICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgfQotCiAgICAgcmV0dXJuIG5yZWFkeTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCmluZGV4IGY4OGRkNWQuLjQ1MDk0M2MgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKQEAgLTM4LDEyICszOCwxNCBAQAogCiBleHRlcm4gbmd4X2V2ZW50X21vZHVsZV90ICBuZ3hfcG9sbF9tb2R1bGVfY3R4OwogCi1zdGF0aWMgbmd4X2ludF90IG5neF9ydHNpZ19pbml0KG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9ydHNpZ19pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcik7CiBzdGF0aWMgdm9pZCBuZ3hfcnRzaWdfZG9uZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfcnRzaWdfYWRkX2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9ydHNpZ19kZWxfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2ludCBmbGFncyk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9ydHNpZ19wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfcnRzaWdfcHJvY2Vzc19vdmVyZmxvdyhuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfcnRzaWdfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlLAorICAgIG5neF9tc2VjX3QgdGltZXIsIG5neF91aW50X3QgZmxhZ3MpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfcnRzaWdfcHJvY2Vzc19vdmVyZmxvdyhuZ3hfY3ljbGVfdCAqY3ljbGUsCisgICAgbmd4X21zZWNfdCB0aW1lciwgbmd4X3VpbnRfdCBmbGFncyk7CiAKIHN0YXRpYyB2b2lkICpuZ3hfcnRzaWdfY3JlYXRlX2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIHN0YXRpYyBjaGFyICpuZ3hfcnRzaWdfaW5pdF9jb25mKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqY29uZik7CkBAIC0xMzQsNyArMTM2LDcgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfcnRzaWdfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfcnRzaWdfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIpCiB7CiAgICAgbmd4X3J0c2lnX2NvbmZfdCAgKnJ0c2NmOwogCkBAIC0xNDQsNiArMTQ2LDcgQEAKICAgICBzaWdhZGRzZXQoJnNldCwgcnRzY2YtPnNpZ25vKTsKICAgICBzaWdhZGRzZXQoJnNldCwgcnRzY2YtPnNpZ25vICsgMSk7CiAgICAgc2lnYWRkc2V0KCZzZXQsIFNJR0lPKTsKKyAgICBzaWdhZGRzZXQoJnNldCwgU0lHQUxSTSk7CiAKICAgICBpZiAoc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2V0LCBOVUxMKSA9PSAtMSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKQEAgLTI3OSw1OSArMjgyLDE5IEBACiAKIAogc3RhdGljIG5neF9pbnRfdAotbmd4X3J0c2lnX3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9ydHNpZ19wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsIG5neF91aW50X3QgZmxhZ3MpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICBzaWdubzsKICAgICBuZ3hfaW50X3QgICAgICAgICAgIGluc3RhbmNlOwotICAgIG5neF9tc2VjX3QgICAgICAgICAgdGltZXIsIGRlbHRhOworICAgIG5neF9tc2VjX3QgICAgICAgICAgZGVsdGE7CiAgICAgbmd4X2Vycl90ICAgICAgICAgICBlcnI7CiAgICAgc2lnaW5mb190ICAgICAgICAgICBzaTsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgKnJldiwgKndldjsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgIHR2OwogICAgIHN0cnVjdCB0aW1lc3BlYyAgICAgdHMsICp0cDsKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICAgIHNhOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKICAgICBuZ3hfcnRzaWdfY29uZl90ICAgKnJ0c2NmOwogCi0gICAgaWYgKG92ZXJmbG93KSB7Ci0gICAgICAgIHRpbWVyID0gMDsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRpbWVyID0gbmd4X2V2ZW50X2ZpbmRfdGltZXIoKTsKLQotI2lmIChOR1hfVEhSRUFEUykKLQotICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURSB8fCB0aW1lciA+IDUwMCkgewotICAgICAgICAgICAgdGltZXIgPSA1MDA7Ci0gICAgICAgIH0KLQotI2VuZGlmCi0KLSAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXgpIHsKLSAgICAgICAgICAgIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkID4gMCkgewotICAgICAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X2hlbGQgPSAwOwotCi0gICAgICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCA9PSAwCi0gICAgICAgICAgICAgICAgICAgICYmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRpbWVyID4gbmd4X2FjY2VwdF9tdXRleF9kZWxheSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0aW1lciA9IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXk7Ci0gICAgICAgICAgICAgICAgfSAKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKICAgICAgICAgdHAgPSBOVUxMOwogCkBAIC0zNTcsNyArMzIwLDYgQEAKICAgICAgICAgaWYgKGVyciA9PSBOR1hfRUFHQUlOKSB7CiAKICAgICAgICAgICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ3RpbWVkd2FpdCgpIHJldHVybmVkIEVBR0FJTiB3aXRob3V0IHRpbWVvdXQiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpAQCAtMzczLDIxICszMzUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgc2lnbm8sIHNpLnNpX2ZkLCBzaS5zaV9iYW5kKTsKICAgICB9CiAKLSAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0gICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWU7Ci0gICAgbmd4X2N1cnJlbnRfdGltZSA9IChuZ3hfbXNlY190KSB0di50dl9zZWMgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDA7CisgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOworICAgIAorICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgeworICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CisgICAgfQogCiAgICAgaWYgKGVycikgewotICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwogICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCiAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZywgZXJyLCAic2lndGltZWR3YWl0KCkgZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCiAgICAgaWYgKHRpbWVyICE9IE5HWF9USU1FUl9JTkZJTklURSkgewotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWUgLSBkZWx0YTsKKyAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjIC0gZGVsdGE7CiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKQEAgLTQwNCw5ICszNjUsOCBAQAogICAgICAgICBjID0gbmd4X2N5Y2xlLT5maWxlc1tzaS5zaV9mZF07CiAKICAgICAgICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICAgICAgLyogdGhlIHN0YWxlIGV2ZW50ICovCiAKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CisgICAgICAgICAgICAvKiB0aGUgc3RhbGUgZXZlbnQgKi8KIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQpAQCAtNDE1LDg0ICszNzUsMzYgQEAKIAogICAgICAgICByZXYgPSBjLT5yZWFkOwogCi0gICAgICAgIGlmIChjLT5yZWFkLT5pbnN0YW5jZSAhPSBpbnN0YW5jZSkgeworICAgICAgICBpZiAocmV2LT5pbnN0YW5jZSAhPSBpbnN0YW5jZSkgewogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogdGhlIHN0YWxlIGV2ZW50IGZyb20gYSBmaWxlIGRlc2NyaXB0b3IKICAgICAgICAgICAgICAqIHRoYXQgd2FzIGp1c3QgY2xvc2VkIGluIHRoaXMgaXRlcmF0aW9uCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLQogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJydHNpZzogc3RhbGUgZXZlbnQgJXAiLCBjKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzaS5zaV9iYW5kICYgKFBPTExJTnxQT0xMSFVQfFBPTExFUlIpKSB7Ci0gICAgICAgICAgICBpZiAocmV2LT5hY3RpdmUpIHsKLQotICAgICAgICAgICAgICAgIGlmIChuZ3hfdGhyZWFkZWQgJiYgIXJldi0+YWNjZXB0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHJldi0+cG9zdGVkX3JlYWR5ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQocmV2KTsKLQotICAgICAgICAgICAgICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKLQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldi0+cmVhZHkgPSAxOwotCi0gICAgICAgICAgICAgICAgICAgIGlmICghbmd4X3RocmVhZGVkICYmICFuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldi0+aGFuZGxlcihyZXYpOwotCi0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV2LT5hY2NlcHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZ3hfYWNjZXB0X2Rpc2FibGVkIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXYtPmhhbmRsZXIocmV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQocmV2KTsgCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICgoc2kuc2lfYmFuZCAmIChQT0xMSU58UE9MTEhVUHxQT0xMRVJSKSkgJiYgcmV2LT5hY3RpdmUpIHsKKyAgICAgICAgICAgIHJldi0+cmVhZHkgPSAxOworICAgICAgICAgICAgcmV2LT5oYW5kbGVyKHJldik7CiAgICAgICAgIH0KIAogICAgICAgICB3ZXYgPSBjLT53cml0ZTsKIAotICAgICAgICBpZiAoc2kuc2lfYmFuZCAmIChQT0xMT1VUfFBPTExIVVB8UE9MTEVSUikpIHsKLSAgICAgICAgICAgIGlmICh3ZXYtPmFjdGl2ZSkgewotCi0gICAgICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICB3ZXYtPnBvc3RlZF9yZWFkeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KHdldik7Ci0KLSAgICAgICAgICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7Ci0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB3ZXYtPnJlYWR5ID0gMTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIW5neF90aHJlYWRlZCAmJiAhbmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3ZXYtPmhhbmRsZXIod2V2KTsKLQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQod2V2KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKChzaS5zaV9iYW5kICYgKFBPTExPVVR8UE9MTEhVUHxQT0xMRVJSKSkgJiYgd2V2LT5hY3RpdmUpIHsKKyAgICAgICAgICAgIHdldi0+cmVhZHkgPSAxOworICAgICAgICAgICAgd2V2LT5oYW5kbGVyKHdldik7CiAgICAgICAgIH0KIAorICAgIH0gZWxzZSBpZiAoc2lnbm8gPT0gU0lHQUxSTSkgeworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisKICAgICB9IGVsc2UgaWYgKHNpZ25vID09IFNJR0lPKSB7Ci0gICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CiAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJydCBzaWduYWwgcXVldWUgb3ZlcmZsb3dlZCIpOwpAQCAtNTIwLDQ4ICs0MzIsMzUgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKIAogICAgIH0gZWxzZSBpZiAoc2lnbm8gIT0gLTEpIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLQogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgInNpZ3RpbWVkd2FpdCgpIHJldHVybmVkIHVuZXhwZWN0ZWQgc2lnbmFsOiAlZCIsIHNpZ25vKTsKIAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0KLSAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOwotCi0gICAgaWYgKG5neF9wb3N0ZWRfZXZlbnRzKSB7Ci0gICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZChjeWNsZSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2lnbm8gPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKLSAgICB9IGVsc2UgeworICAgIGlmIChzaWdubyAhPSAtMSkgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KKworICAgIHJldHVybiBOR1hfQUdBSU47CiB9CiAKIAotLyogVE9ETzogb2xkIGN5bGNlcyAqLwotCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfcnRzaWdfcHJvY2Vzc19vdmVyZmxvdyhuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfcnRzaWdfcHJvY2Vzc19vdmVyZmxvdyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgbmd4X3VpbnRfdCBmbGFncykKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgbmFtZVsyXSwgcnRzaWdfbWF4LCBydHNpZ19uciwgZXZlbnRzLCByZWFkeTsKICAgICBzaXplX3QgICAgICAgICAgICAgbGVuOwogICAgIG5neF9pbnRfdCAgICAgICAgICB0ZXN0ZWQsIG4sIGk7CiAgICAgbmd4X2Vycl90ICAgICAgICAgIGVycjsKLSAgICBuZ3hfZXZlbnRfdCAgICAgICAqcmV2LCAqd2V2OworICAgIG5neF9ldmVudF90ICAgICAgICpyZXYsICp3ZXYsICoqcXVldWU7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAgICAgbmd4X3J0c2lnX2NvbmZfdCAgKnJ0c2NmOwogCisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAicnRzaWcgcHJvY2VzcyBvdmVyZmxvdyIpOworCiAgICAgcnRzY2YgPSBuZ3hfZXZlbnRfZ2V0X2NvbmYobmd4X2N5Y2xlLT5jb25mX2N0eCwgbmd4X3J0c2lnX21vZHVsZSk7CiAKICAgICB0ZXN0ZWQgPSAwOwpAQCAtNjA4LDYgKzUwNyw5IEBACiAgICAgICAgIGZvciAoIDs7ICkgewogICAgICAgICAgICAgcmVhZHkgPSBwb2xsKG92ZXJmbG93X2xpc3QsIG4sIDApOwogCisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInJ0c2lnIG92ZXJmbG93IHBvbGw6JWQiLCByZWFkeSk7CisKICAgICAgICAgICAgIGlmIChyZWFkeSA9PSAtMSkgewogICAgICAgICAgICAgICAgIGVyciA9IG5neF9lcnJubzsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKChlcnIgPT0gTkdYX0VJTlRSKSA/IE5HWF9MT0dfSU5GTyA6IE5HWF9MT0dfQUxFUlQsCkBAIC02MjYsOSArNTI4LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KKyAgICAgICAgbmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIGMgPSBjeWNsZS0+ZmlsZXNbb3ZlcmZsb3dfbGlzdFtpXS5mZF07CkBAIC02NDcsMTMgKzU0NywyMSBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlc3RlZCsrOwogCi0gICAgICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgeworICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBOR1hfUE9TVF9USFJFQURfRVZFTlRTKSAmJiAhcmV2LT5hY2NlcHQpIHsKICAgICAgICAgICAgICAgICAgICAgcmV2LT5wb3N0ZWRfcmVhZHkgPSAxOwotICAgICAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChyZXYpOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmV2LT5yZWFkeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHJldi0+aGFuZGxlcihyZXYpOyAKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBOR1hfUE9TVF9FVkVOVFMpIHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUgPSAobmd4X2V2ZW50X3QgKiopIChyZXYtPmFjY2VwdCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50cyA6ICZuZ3hfcG9zdGVkX2V2ZW50cyk7CisKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvY2tlZF9wb3N0X2V2ZW50KHJldiwgcXVldWUpOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV2LT5oYW5kbGVyKHJldik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC02NjcsMTMgKzU3NSwxOCBAQAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHRlc3RlZCsrOwogCi0gICAgICAgICAgICAgICAgaWYgKG5neF90aHJlYWRlZCkgeworICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE5HWF9QT1NUX1RIUkVBRF9FVkVOVFMpIHsKICAgICAgICAgICAgICAgICAgICAgd2V2LT5wb3N0ZWRfcmVhZHkgPSAxOwotICAgICAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudCh3ZXYpOwogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgd2V2LT5yZWFkeSA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHdldi0+aGFuZGxlcih3ZXYpOyAKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBOR1hfUE9TVF9FVkVOVFMpIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvY2tlZF9wb3N0X2V2ZW50KHdldiwgJm5neF9wb3N0ZWRfZXZlbnRzKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHdldi0+aGFuZGxlcih3ZXYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjg4LDggKzYwMSw4IEBACiAgICAgICAgICAgICAgICAgICogQ2hlY2sgdGhlIGN1cnJlbnQgcnQgcXVldWUgbGVuZ3RoIHRvIHByZXZlbnQKICAgICAgICAgICAgICAgICAgKiB0aGUgbmV3IG92ZXJmbG93LgogICAgICAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgICAgICogTGVhcm4gdGhlIC9wcm9jL3N5cy9rZXJuZWwvcnRzaWctbWF4IHZhbHVlIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgKiBpdCBjYW4gYmUgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjaGVja2luZy4KKyAgICAgICAgICAgICAgICAgKiBsZWFybiB0aGUgIi9wcm9jL3N5cy9rZXJuZWwvcnRzaWctbWF4IiB2YWx1ZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgICogaXQgY2FuIGJlIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2hlY2tpbmcKICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgIG5hbWVbMF0gPSBDVExfS0VSTjsKQEAgLTcxMywxNiArNjI2LDE3IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBkcmFpbiB0aGUgcnQgc2lnbmFsIHF1ZXVlIGlmIHRoZSAvcHJvYy9zeXMva2VybmVsL3J0c2lnLW5yCisgICAgICAgICAgICAgICAgICogZHJhaW4gdGhlIHJ0IHNpZ25hbCBxdWV1ZSBpZiB0aGUgLyJwcm9jL3N5cy9rZXJuZWwvcnRzaWctbnIiCiAgICAgICAgICAgICAgICAgICogaXMgYmlnZ2VyIHRoYW4KLSAgICAgICAgICAgICAgICAgKiAgICAvcHJvYy9zeXMva2VybmVsL3J0c2lnLW1heCAvIHJ0c2lnX292ZXJmbG93X3RocmVzaG9sZAorICAgICAgICAgICAgICAgICAqICAgICIvcHJvYy9zeXMva2VybmVsL3J0c2lnLW1heCIgLyAicnRzaWdfb3ZlcmZsb3dfdGhyZXNob2xkIgogICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgaWYgKHJ0c2lnX21heCAvIHJ0c2NmLT5vdmVyZmxvd190aHJlc2hvbGQgPCBydHNpZ19ucikgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicnRzaWcgcXVldWUgc3RhdGU6ICVkLyVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRzaWdfbnIsIHJ0c2lnX21heCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZ3hfcnRzaWdfcHJvY2Vzc19ldmVudHMoY3ljbGUpID09IE5HWF9PSykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmd4X3J0c2lnX3Byb2Nlc3NfZXZlbnRzKGN5Y2xlLCAwLCBmbGFncykgPT0gTkdYX09LKQorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB2b2lkICovCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC03MzQsMjAgKzY0OCwxNyBAQAogICAgICAgICAgICAgICAgICAqIHNvIGRyYWluIHRoZSBydCBzaWduYWwgcXVldWUgdW5jb25kaXRpb25hbGx5CiAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICB3aGlsZSAobmd4X3J0c2lnX3Byb2Nlc3NfZXZlbnRzKGN5Y2xlKSA9PSBOR1hfT0spIHsgLyogdm9pZCAqLyB9CisgICAgICAgICAgICAgICAgd2hpbGUgKG5neF9ydHNpZ19wcm9jZXNzX2V2ZW50cyhjeWNsZSwgMCwgZmxhZ3MpID09IE5HWF9PSykgeworICAgICAgICAgICAgICAgICAgICAvKiB2b2lkICovCisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0ZXN0ZWQgPSAwOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5neF9wb3N0ZWRfZXZlbnRzKSB7Ci0gICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZChjeWNsZSk7Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9ldmVudF9wcm9jZXNzX3Bvc3RlZChjeWNsZSk7Ci0gICAgICAgIH0KKyAgICBpZiAoZmxhZ3MgJiBOR1hfVVBEQVRFX1RJTUUpIHsKKyAgICAgICAgbmd4X3RpbWVfdXBkYXRlKDAsIDApOwogICAgIH0KIAogICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jCmluZGV4IDViZTNhZmEuLmRhNDMwM2QgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYwpAQCAtMTAsMTEgKzEwLDEyIEBACiAKIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9zZWxlY3RfaW5pdChuZ3hfY3ljbGVfdCAqY3ljbGUpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfc2VsZWN0X2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKTsKIHN0YXRpYyB2b2lkIG5neF9zZWxlY3RfZG9uZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfc2VsZWN0X2FkZF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfc2VsZWN0X2RlbF9ldmVudChuZ3hfZXZlbnRfdCAqZXYsIGludCBldmVudCwgdV9pbnQgZmxhZ3MpOwotc3RhdGljIG5neF9pbnRfdCBuZ3hfc2VsZWN0X3Byb2Nlc3NfZXZlbnRzKG5neF9jeWNsZV90ICpjeWNsZSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9zZWxlY3RfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyLAorICAgIG5neF91aW50X3QgZmxhZ3MpOwogc3RhdGljIGNoYXIgKm5neF9zZWxlY3RfaW5pdF9jb25mKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqY29uZik7CiAKIApAQCAtMzMsMTEgKzM0LDYgQEAKIHN0YXRpYyBuZ3hfdWludF90ICAgICBuZXZlbnRzOwogCiBzdGF0aWMgbmd4X2V2ZW50X3QgICoqZXZlbnRfaW5kZXg7Ci0jaWYgMAotc3RhdGljIG5neF9ldmVudF90ICAqKnJlYWR5X2luZGV4OwotI2VuZGlmCi0KLXN0YXRpYyBuZ3hfZXZlbnRfdCAgICphY2NlcHRfZXZlbnRzOwogCiAKIHN0YXRpYyBuZ3hfc3RyX3QgICAgc2VsZWN0X25hbWUgPSBuZ3hfc3RyaW5nKCJzZWxlY3QiKTsKQEAgLTc5LDcgKzc1LDcgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfc2VsZWN0X2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X3NlbGVjdF9pbml0KG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X21zZWNfdCB0aW1lcikKIHsKICAgICBuZ3hfZXZlbnRfdCAgKippbmRleDsKIApAQCAtMTAzLDI2ICs5OSwxNSBAQAogICAgICAgICAgICAgbmd4X21lbWNweShpbmRleCwgZXZlbnRfaW5kZXgsIHNpemVvZihuZ3hfZXZlbnRfdCAqKSAqIG5ldmVudHMpOwogICAgICAgICAgICAgbmd4X2ZyZWUoZXZlbnRfaW5kZXgpOwogICAgICAgICB9CisKICAgICAgICAgZXZlbnRfaW5kZXggPSBpbmRleDsKLQotI2lmIDAKLSAgICAgICAgaWYgKHJlYWR5X2luZGV4KSB7Ci0gICAgICAgICAgICBuZ3hfZnJlZShyZWFkeV9pbmRleCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZWFkeV9pbmRleCA9IG5neF9hbGxvYyhzaXplb2Yobmd4X2V2ZW50X3QgKikgKiAyICogY3ljbGUtPmNvbm5lY3Rpb25fbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUtPmxvZyk7Ci0gICAgICAgIGlmIChyZWFkeV9pbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAKICAgICBuZ3hfaW8gPSBuZ3hfb3NfaW87CiAKICAgICBuZ3hfZXZlbnRfYWN0aW9ucyA9IG5neF9zZWxlY3RfbW9kdWxlX2N0eC5hY3Rpb25zOwogCi0gICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVHxOR1hfVVNFX09ORVNIT1RfRVZFTlQ7CisgICAgbmd4X2V2ZW50X2ZsYWdzID0gTkdYX1VTRV9MRVZFTF9FVkVOVDsKIAogI2lmIChOR1hfV0lOMzIpCiAgICAgbWF4X3JlYWQgPSBtYXhfd3JpdGUgPSAwOwpAQCAtMTM4LDkgKzEyMyw2IEBACiBuZ3hfc2VsZWN0X2RvbmUobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIG5neF9mcmVlKGV2ZW50X2luZGV4KTsKLSNpZiAwCi0gICAgbmd4X2ZyZWUocmVhZHlfaW5kZXgpOwotI2VuZGlmCiAKICAgICBldmVudF9pbmRleCA9IE5VTEw7CiB9CkBAIC0yNjIsNDEgKzI0NCwyMiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKLW5neF9zZWxlY3RfcHJvY2Vzc19ldmVudHMobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X3NlbGVjdF9wcm9jZXNzX2V2ZW50cyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgbmd4X3VpbnRfdCBmbGFncykKIHsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5LCBucmVhZHk7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICBpLCBmb3VuZCwgbG9jazsKLSAgICBuZ3hfZXJyX3QgICAgICAgICAgICAgICAgIGVycjsKLSAgICBuZ3hfbXNlY190ICAgICAgICAgICAgICAgIHRpbWVyLCBkZWx0YTsKLSAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgKmV2OwotICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAqYzsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgICAgICAgIHR2LCAqdHA7Ci0jaWYgKE5HWF9IQVZFX1NFTEVDVF9DSEFOR0VfVElNRU9VVCkKLSAgICBzdGF0aWMgbmd4X21zZWNfdCAgICAgICAgIGRlbHRhcyA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgICByZWFkeSwgbnJlYWR5OworICAgIG5neF91aW50X3QgICAgICAgICAgaSwgZm91bmQ7CisgICAgbmd4X2Vycl90ICAgICAgICAgICBlcnI7CisgICAgbmd4X21zZWNfdCAgICAgICAgICBkZWx0YTsKKyAgICBuZ3hfZXZlbnRfdCAgICAgICAgKmV2LCAqKnF1ZXVlOworICAgIG5neF9jb25uZWN0aW9uX3QgICAqYzsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgICAgIHR2LCAqdHA7CisjaWYgIShOR1hfV0lOMzIpCisgICAgbmd4X3VpbnRfdCAgICAgICAgICBsZXZlbDsKICNlbmRpZgogCi0gICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOwotCiAjaWYgIShOR1hfV0lOMzIpCiAKLSAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCA9PSAwCi0gICAgICAgICAgICAgICAgJiYgKHRpbWVyID09IE5HWF9USU1FUl9JTkZJTklURQotICAgICAgICAgICAgICAgICAgICB8fCB0aW1lciA+IG5neF9hY2NlcHRfbXV0ZXhfZGVsYXkpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRpbWVyID0gbmd4X2FjY2VwdF9tdXRleF9kZWxheTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChtYXhfZmQgPT0gLTEpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5ldmVudHM7IGkrKykgewogICAgICAgICAgICAgYyA9IGV2ZW50X2luZGV4W2ldLT5kYXRhOwpAQCAtMzUzLDkgKzMxNiwxMyBAQAogI2VuZGlmCiAKICNpZiAoTkdYX1dJTjMyKQorCiAgICAgcmVhZHkgPSBzZWxlY3QoMCwgJndvcmtfcmVhZF9mZF9zZXQsICZ3b3JrX3dyaXRlX2ZkX3NldCwgTlVMTCwgdHApOworCiAjZWxzZQorCiAgICAgcmVhZHkgPSBzZWxlY3QobWF4X2ZkICsgMSwgJndvcmtfcmVhZF9mZF9zZXQsICZ3b3JrX3dyaXRlX2ZkX3NldCwgTlVMTCwgdHApOworCiAjZW5kaWYKIAogICAgIGlmIChyZWFkeSA9PSAtMSkgewpAQCAtMzY0LDU4ICszMzEsMTQgQEAKICAgICAgICAgZXJyID0gMDsKICAgICB9CiAKLSNpZiAoTkdYX0hBVkVfU0VMRUNUX0NIQU5HRV9USU1FT1VUKQorICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYzsKIAotICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSB0aW1lciAtICgobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBsZWFybiB0aGUgcmVhbCB0aW1lIGFuZCB1cGRhdGUgdGhlIGNhY2hlZCB0aW1lCi0gICAgICAgICAqIGlmIHRoZSBzdW0gb2YgdGhlIGxhc3QgZGVsdGFzIG92ZXJjb21lcyAxIHNlY29uZAotICAgICAgICAgKi8KLQotICAgICAgICBkZWx0YXMgKz0gZGVsdGE7Ci0gICAgICAgIGlmIChkZWx0YXMgPiAxMDAwKSB7Ci0gICAgICAgICAgICBuZ3hfZ2V0dGltZW9mZGF5KCZ0dik7Ci0gICAgICAgICAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKLSAgICAgICAgICAgIGRlbHRhcyA9IHR2LnR2X3VzZWMgLyAxMDAwOwotCi0gICAgICAgICAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0di50dl91c2VjIC8gMTAwMDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9jdXJyZW50X3RpbWUgKz0gZGVsdGE7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAic2VsZWN0IHRpbWVyOiAlTSwgZGVsdGE6ICVNIiwgdGltZXIsIGRlbHRhKTsKLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRlbHRhcyA9IDA7Ci0KLSAgICAgICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOwotICAgICAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKLQotICAgICAgICBkZWx0YSA9IG5neF9jdXJyZW50X3RpbWU7Ci0gICAgICAgIG5neF9jdXJyZW50X3RpbWUgPSAobmd4X21zZWNfdCkgdHYudHZfc2VjICogMTAwMCArIHR2LnR2X3VzZWMgLyAxMDAwOwotCi0gICAgICAgIGlmIChyZWFkeSA9PSAwKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QoKSByZXR1cm5lZCBubyBldmVudHMgd2l0aG91dCB0aW1lb3V0Iik7Ci0gICAgICAgICAgICBuZ3hfYWNjZXB0X211dGV4X3VubG9jaygpOwotICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgfQorICAgIGlmIChmbGFncyAmIE5HWF9VUERBVEVfVElNRSkgeworICAgICAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAgICAgfQogCi0jZWxzZSAvKiAhKE5HWF9IQVZFX1NFTEVDVF9DSEFOR0VfVElNRU9VVCkgKi8KLQotICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKLQotICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfdGltZTsKLSAgICBuZ3hfY3VycmVudF90aW1lID0gKG5neF9tc2VjX3QpIHR2LnR2X3NlYyAqIDEwMDAgKyB0di50dl91c2VjIC8gMTAwMDsKLQogICAgIGlmICh0aW1lciAhPSBOR1hfVElNRVJfSU5GSU5JVEUpIHsKLSAgICAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF90aW1lIC0gZGVsdGE7CisgICAgICAgIGRlbHRhID0gbmd4X2N1cnJlbnRfbXNlYyAtIGRlbHRhOwogCiAgICAgICAgIG5neF9sb2dfZGVidWcyKE5HWF9MT0dfREVCVUdfRVZFTlQsIGN5Y2xlLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgdGltZXI6ICVNLCBkZWx0YTogJU0iLCB0aW1lciwgZGVsdGEpOwpAQCAtNDI0LDM0ICszNDcsNDggQEAKICAgICAgICAgaWYgKHJlYWR5ID09IDApIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIHJldHVybmVkIG5vIGV2ZW50cyB3aXRob3V0IHRpbWVvdXQiKTsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAgICAgfQogCi0jZW5kaWYgLyogTkdYX0hBVkVfU0VMRUNUX0NIQU5HRV9USU1FT1VUICovCi0KICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJzZWxlY3QgcmVhZHkgJWQiLCByZWFkeSk7CiAKLSAgICBpZiAoZXJyKSB7CiAjaWYgKE5HWF9XSU4zMikKKworICAgIGlmIChlcnIpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBlcnIsICJzZWxlY3QoKSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKICNlbHNlCi0gICAgICAgIG5neF9sb2dfZXJyb3IoKGVyciA9PSBOR1hfRUlOVFIpID8gTkdYX0xPR19JTkZPIDogTkdYX0xPR19BTEVSVCwKLSAgICAgICAgICAgICAgICAgICAgICBjeWNsZS0+bG9nLCBlcnIsICJzZWxlY3QoKSBmYWlsZWQiKTsKKworICAgIGlmIChlcnIpIHsKKyAgICAgICAgaWYgKGVyciA9PSBOR1hfRUlOVFIpIHsKKworICAgICAgICAgICAgaWYgKG5neF9ldmVudF90aW1lcl9hbGFybSkgeworICAgICAgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9hbGFybSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgIH0KKyAKKyAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19JTkZPOworIAorICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19BTEVSVDsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9sb2dfZXJyb3IobGV2ZWwsIGN5Y2xlLT5sb2csIGVyciwgInNlbGVjdCgpIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgIH0KKwogI2VuZGlmCi0gICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7CisKKyAgICBpZiAobmV2ZW50cyA9PSAwKSB7CisgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCisgICAgbmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICBsb2NrID0gMTsKICAgICBucmVhZHkgPSAwOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG5ldmVudHM7IGkrKykgewpAQCAtNDc3LDExMCArNDE0LDIwIEBACiAgICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgICAgZXYtPnJlYWR5ID0gMTsKIAotICAgICAgICAgICAgaWYgKGV2LT5vbmVzaG90KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV2LT50aW1lcl9zZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgbmd4X2RlbF90aW1lcihldik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGV2LT53cml0ZSkgewotICAgICAgICAgICAgICAgICAgICBuZ3hfc2VsZWN0X2RlbF9ldmVudChldiwgTkdYX1dSSVRFX0VWRU5ULCAwKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBuZ3hfc2VsZWN0X2RlbF9ldmVudChldiwgTkdYX1JFQURfRVZFTlQsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGV2LT5hY2NlcHQpIHsKLSAgICAgICAgICAgICAgICBldi0+bmV4dCA9IGFjY2VwdF9ldmVudHM7Ci0gICAgICAgICAgICAgICAgYWNjZXB0X2V2ZW50cyA9IGV2OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChldik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBxdWV1ZSA9IChuZ3hfZXZlbnRfdCAqKikgKGV2LT5hY2NlcHQgPyAmbmd4X3Bvc3RlZF9hY2NlcHRfZXZlbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfZXZlbnRzKTsKKyAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpOyAKIAogICAgICAgICAgICAgbnJlYWR5Kys7Ci0KLSNpZiAwCi0gICAgICAgICAgICByZWFkeV9pbmRleFtucmVhZHkrK10gPSBldjsKLSNlbmRpZgogICAgICAgICB9CiAgICAgfQogCi0jaWYgMAotICAgIGZvciAoaSA9IDA7IGkgPCBucmVhZHk7IGkrKykgewotICAgICAgICBldiA9IHJlYWR5X2luZGV4W2ldOwotICAgICAgICByZWFkeS0tOwotCi0gICAgICAgIGlmICghZXYtPmFjdGl2ZSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBldi0+cmVhZHkgPSAxOwotCi0gICAgICAgIGlmIChldi0+b25lc2hvdCkgewotICAgICAgICAgICAgaWYgKGV2LT50aW1lcl9zZXQpIHsKLSAgICAgICAgICAgICAgICBuZ3hfZGVsX3RpbWVyKGV2KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGV2LT53cml0ZSkgewotICAgICAgICAgICAgICAgIG5neF9zZWxlY3RfZGVsX2V2ZW50KGV2LCBOR1hfV1JJVEVfRVZFTlQsIDApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuZ3hfc2VsZWN0X2RlbF9ldmVudChldiwgTkdYX1JFQURfRVZFTlQsIDApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZXYtPmhhbmRsZXIoZXYpOwotICAgIH0KLSNlbmRpZgotCi0gICAgZXYgPSBhY2NlcHRfZXZlbnRzOwotCi0gICAgZm9yICggOzsgKSB7Ci0KLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAiYWNjZXB0IGV2ZW50ICVwIiwgZXYpOwotCi0gICAgICAgIGlmIChldiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwotCi0gICAgICAgIGV2LT5oYW5kbGVyKGV2KTsKLQotICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKLSAgICAgICAgICAgIGxvY2sgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBldiA9IGV2LT5uZXh0OwotCi0gICAgICAgIGlmIChldiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBsb2NrID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9hY2NlcHRfbXV0ZXhfdW5sb2NrKCk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKTsKLSAgICBhY2NlcHRfZXZlbnRzID0gTlVMTDsKLQotICAgIGlmIChsb2NrKSB7Ci0gICAgICAgIG5neF9tdXRleF91bmxvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKIAogICAgIGlmIChyZWFkeSAhPSBucmVhZHkpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLCAic2VsZWN0IHJlYWR5ICE9IGV2ZW50cyIpOwogICAgIH0KIAotICAgIG5neF9ldmVudF9leHBpcmVfdGltZXJzKCk7Ci0KLSAgICBpZiAoIW5neF90aHJlYWRlZCkgewotICAgICAgICBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQoY3ljbGUpOwotICAgIH0KLQogICAgIHJldHVybiBOR1hfT0s7CiB9CiAKQEAgLTU5OSwxOSArNDQ2LDI1IEBACiAgICAgLyogZGlzYWJsZSB3YXJuaW5nOiB0aGUgZGVmYXVsdCBGRF9TRVRTSVpFIGlzIDEwMjRVIGluIEZyZWVCU0QgNS54ICovCiAKICNpZiAhKE5HWF9XSU4zMikKKwogICAgIGlmICgodW5zaWduZWQpIGVjZi0+Y29ubmVjdGlvbnMgPiBGRF9TRVRTSVpFKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY3ljbGUtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAidGhlIG1heGltdW0gbnVtYmVyIG9mIGZpbGVzICIKICAgICAgICAgICAgICAgICAgICAgICAic3VwcG9ydGVkIGJ5IHNlbGVjdCgpIGlzICIgbmd4X3ZhbHVlKEZEX1NFVFNJWkUpKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KKwogI2VuZGlmCiAKICNpZiAoTkdYX1RIUkVBRFMpICYmICEoTkdYX1dJTjMyKQorCiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgInNlbGVjdCgpIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIHRocmVhZGVkIG1vZGUiKTsKICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisKICNlbHNlCisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5jIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCmluZGV4IDJlMmEwNjUuLjZkYzZlM2MgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKQEAgLTM0LDYgKzM0LDkgQEAKIHN0YXRpYyBjaGFyICpuZ3hfYWNjZXB0X211dGV4X2NoZWNrKG5neF9jb25mX3QgKmNmLCB2b2lkICpwb3N0LCB2b2lkICpkYXRhKTsKIAogCitzdGF0aWMgbmd4X3VpbnRfdCAgICAgbmd4X3RpbWVyX3Jlc29sdXRpb247CitzaWdfYXRvbWljX3QgICAgICAgICAgbmd4X2V2ZW50X3RpbWVyX2FsYXJtOworCiBzdGF0aWMgbmd4X3VpbnRfdCAgICAgbmd4X2V2ZW50X21heF9tb2R1bGU7CiAKIG5neF91aW50X3QgICAgICAgICAgICBuZ3hfZXZlbnRfZmxhZ3M7CkBAIC0xOTIsNiArMTk1LDc3IEBACiB9OwogCiAKK3ZvaWQKK25neF9wcm9jZXNzX2V2ZW50c19hbmRfdGltZXJzKG5neF9jeWNsZV90ICpjeWNsZSkKK3sKKyAgICBuZ3hfdWludF90ICBmbGFnczsKKyAgICBuZ3hfbXNlY190ICB0aW1lcjsKKworICAgIGlmIChuZ3hfdGltZXJfcmVzb2x1dGlvbikgeworICAgICAgICB0aW1lciA9IE5HWF9USU1FUl9JTkZJTklURTsKKyAgICAgICAgZmxhZ3MgPSAwOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdGltZXIgPSBuZ3hfZXZlbnRfZmluZF90aW1lcigpOworICAgICAgICBmbGFncyA9IE5HWF9VUERBVEVfVElNRTsKKworI2lmIChOR1hfVEhSRUFEUykKKworICAgICAgICBpZiAodGltZXIgPT0gTkdYX1RJTUVSX0lORklOSVRFIHx8IHRpbWVyID4gNTAwKSB7CisgICAgICAgICAgICB0aW1lciA9IDUwMDsKKyAgICAgICAgfQorCisjZW5kaWYKKyAgICB9CisKKyAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgeworICAgICAgICBpZiAobmd4X2FjY2VwdF9kaXNhYmxlZCA+IDApIHsKKyAgICAgICAgICAgIG5neF9hY2NlcHRfZGlzYWJsZWQtLTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG5neF90cnlsb2NrX2FjY2VwdF9tdXRleChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleF9oZWxkKSB7CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTkdYX1BPU1RfRVZFTlRTOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh0aW1lciA9PSBOR1hfVElNRVJfSU5GSU5JVEUKKyAgICAgICAgICAgICAgICAgICAgfHwgdGltZXIgPiBuZ3hfYWNjZXB0X211dGV4X2RlbGF5KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBuZ3hfYWNjZXB0X211dGV4X2RlbGF5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICh2b2lkKSBuZ3hfcHJvY2Vzc19ldmVudHMoY3ljbGUsIHRpbWVyLCBmbGFncyk7CisKKyAgICBuZ3hfZXZlbnRfZXhwaXJlX3RpbWVycygpOworCisgICAgaWYgKG5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50cykgeworICAgICAgICBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQoY3ljbGUsICZuZ3hfcG9zdGVkX2FjY2VwdF9ldmVudHMpOworICAgIH0KKworICAgIGlmIChuZ3hfYWNjZXB0X211dGV4X2hlbGQpIHsKKyAgICAgICAgbmd4X2FjY2VwdF9tdXRleCA9IDA7CisgICAgfQorCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAicG9zdGVkIGV2ZW50cyAlcCIsIG5neF9wb3N0ZWRfZXZlbnRzKTsKKworICAgIGlmIChuZ3hfcG9zdGVkX2V2ZW50cykgeworICAgICAgICBpZiAobmd4X3RocmVhZGVkKSB7CisgICAgICAgICAgICBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQoY3ljbGUpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQoY3ljbGUsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKwogbmd4X2ludF90CiBuZ3hfaGFuZGxlX3JlYWRfZXZlbnQobmd4X2V2ZW50X3QgKnJldiwgdV9pbnQgZmxhZ3MpCiB7CkBAIC0zMzIsMTIgKzQwNiwxMiBAQAogewogICAgIHZvaWQgICAgICAgICAgICAgICoqKmNmOwogICAgIG5neF9ldmVudF9jb25mX3QgICAgKmVjZjsKKyAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CiAjaWYgIShOR1hfV0lOMzIpCiAgICAgY2hhciAgICAgICAgICAgICAgICAqc2hhcmVkOwogICAgIHNpemVfdCAgICAgICAgICAgICAgIHNpemU7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgbGltaXQ7CiAgICAgc3RydWN0IHJsaW1pdCAgICAgICAgcmxtdDsKLSAgICBuZ3hfY29yZV9jb25mX3QgICAgICpjY2Y7CiAjZW5kaWYKIAogICAgIGNmID0gbmd4X2dldF9jb25mKGN5Y2xlLT5jb25mX2N0eCwgbmd4X2V2ZW50c19tb2R1bGUpOwpAQCAtMzUzLDEwICs0MjcsMTIgQEAKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgInVzaW5nIHRoZSBcIiVzXCIgZXZlbnQgbWV0aG9kIiwgZWNmLT5uYW1lKTsKIAotI2lmICEoTkdYX1dJTjMyKQotCiAgICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfY29yZV9tb2R1bGUpOwogCisgICAgbmd4X3RpbWVyX3Jlc29sdXRpb24gPSBjY2YtPnRpbWVyX3Jlc29sdXRpb247CisKKyNpZiAhKE5HWF9XSU4zMikKKwogICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsbXQpID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICJnZXRybGltaXQoUkxJTUlUX05PRklMRSkgZmFpbGVkLCBpZ25vcmVkIik7CkBAIC00MTcsNiArNDkzLDggQEAKIAogI2VuZGlmCiAKKyAgICAqbmd4X2Nvbm5lY3Rpb25fY291bnRlciA9IDE7CisKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJjb3VudGVyOiAlcCwgJWQiLAogICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2NvdW50ZXIsICpuZ3hfY29ubmVjdGlvbl9jb3VudGVyKTsKQEAgLTQyNyw2ICs1MDUsMjMgQEAKIH0KIAogCisjaWYgIShOR1hfV0lOMzIpCisKK3ZvaWQKK25neF90aW1lcl9zaWduYWxfaGFuZGxlcihpbnQgc2lnbm8pCit7CisgICAgbmd4X2V2ZW50X3RpbWVyX2FsYXJtID0gMTsKKworICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKKworI2lmIDEKKyAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBuZ3hfY3ljbGUtPmxvZywgMCwgInRpbWVyIHNpZ25hbCIpOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9ldmVudF9wcm9jZXNzX2luaXQobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewpAQCAtNDQxLDYgKzUzNiw4IEBACiAgICAgbmd4X2lvY3BfY29uZl90ICAgICAqaW9jcGNmOwogI2Vsc2UKICAgICBzdHJ1Y3QgcmxpbWl0ICAgICAgICBybG10OworICAgIHN0cnVjdCBzaWdhY3Rpb24gICAgIHNhOworICAgIHN0cnVjdCBpdGltZXJ2YWwgICAgIGl0djsKICNlbmRpZgogCiAgICAgY2NmID0gKG5neF9jb3JlX2NvbmZfdCAqKSBuZ3hfZ2V0X2NvbmYoY3ljbGUtPmNvbmZfY3R4LCBuZ3hfY29yZV9tb2R1bGUpOwpAQCAtNDczLDcgKzU3MCw4IEBACiAKICAgICAgICAgaWYgKG5neF9tb2R1bGVzW21dLT5jdHhfaW5kZXggPT0gZWNmLT51c2UpIHsKICAgICAgICAgICAgIG1vZHVsZSA9IG5neF9tb2R1bGVzW21dLT5jdHg7Ci0gICAgICAgICAgICBpZiAobW9kdWxlLT5hY3Rpb25zLmluaXQoY3ljbGUpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgaWYgKG1vZHVsZS0+YWN0aW9ucy5pbml0KGN5Y2xlLCBuZ3hfdGltZXJfcmVzb2x1dGlvbikgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8qIGZhdGFsICovCiAgICAgICAgICAgICAgICAgZXhpdCgyKTsKICAgICAgICAgICAgIH0KQEAgLTQ4Myw2ICs1ODEsMjkgQEAKIAogI2lmICEoTkdYX1dJTjMyKQogCisgICAgaWYgKG5neF90aW1lcl9yZXNvbHV0aW9uICYmICEobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9USU1FUl9FVkVOVCkpIHsKKworICAgICAgICBuZ3hfbWVtemVybygmc2EsIHNpemVvZihzdHJ1Y3Qgc2lnYWN0aW9uKSk7CisgICAgICAgIHNhLnNhX2hhbmRsZXIgPSBuZ3hfdGltZXJfc2lnbmFsX2hhbmRsZXI7CisgICAgICAgIHNpZ2VtcHR5c2V0KCZzYS5zYV9tYXNrKTsKKworICAgICAgICBpZiAoc2lnYWN0aW9uKFNJR0FMUk0sICZzYSwgTlVMTCkgPT0gLTEpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnYWN0aW9uKFNJR0FMUk0pIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGl0di5pdF9pbnRlcnZhbC50dl9zZWMgPSBuZ3hfdGltZXJfcmVzb2x1dGlvbiAvIDEwMDA7CisgICAgICAgIGl0di5pdF9pbnRlcnZhbC50dl91c2VjID0gKG5neF90aW1lcl9yZXNvbHV0aW9uICUgMTAwMCkgKiAxMDAwOworICAgICAgICBpdHYuaXRfdmFsdWUudHZfc2VjID0gbmd4X3RpbWVyX3Jlc29sdXRpb24gLyAxMDAwOworICAgICAgICBpdHYuaXRfdmFsdWUudHZfdXNlYyA9IChuZ3hfdGltZXJfcmVzb2x1dGlvbiAlIDEwMDAgKSAqIDEwMDA7CisKKyAgICAgICAgaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgJml0diwgTlVMTCkgPT0gLTEpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0aXRpbWVyKCkgZmFpbGVkIik7CisgICAgICAgIH0gCisgICAgfQorCiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfRkRfRVZFTlQpIHsKIAogICAgICAgICBpZiAoZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZybG10KSA9PSAtMSkgewpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudC5oIGIvc3JjL2V2ZW50L25neF9ldmVudC5oCmluZGV4IDlkOTE3ZWEuLmFmM2U0YTQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmgKQEAgLTEzNCw2ICsxMzQsOSBAQAogCiAgICAgdW5zaWduZWQgICAgICAgICBjbG9zZWQ6MTsKIAorICAgIC8qIHRvIHRlc3Qgb24gd29ya2VyIGV4aXQgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgIGNoYW5uZWw6MTsKKwogI2lmIChOR1hfVEhSRUFEUykKIAogICAgIHVuc2lnbmVkICAgICAgICAgbG9ja2VkOjE7CkBAIC0xOTYsOSArMTk5LDEwIEBACiAgICAgbmd4X2ludF90ICAoKmRlbF9jb25uKShuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2ludCBmbGFncyk7CiAKICAgICBuZ3hfaW50X3QgICgqcHJvY2Vzc19jaGFuZ2VzKShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF91aW50X3Qgbm93YWl0KTsKLSAgICBuZ3hfaW50X3QgICgqcHJvY2Vzc19ldmVudHMpKG5neF9jeWNsZV90ICpjeWNsZSk7CisgICAgbmd4X2ludF90ICAoKnByb2Nlc3NfZXZlbnRzKShuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9tc2VjX3QgdGltZXIsCisgICAgICAgICAgICAgICAgICAgbmd4X3VpbnRfdCBmbGFncyk7CiAKLSAgICBuZ3hfaW50X3QgICgqaW5pdCkobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKKyAgICBuZ3hfaW50X3QgICgqaW5pdCkobmd4X2N5Y2xlX3QgKmN5Y2xlLCBuZ3hfbXNlY190IHRpbWVyKTsKICAgICB2b2lkICAgICAgICgqZG9uZSkobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIH0gbmd4X2V2ZW50X2FjdGlvbnNfdDsKIApAQCAtMjE0LDcgKzIxOCw3IEBACiAKIC8qCiAgKiBUaGUgZXZlbnQgZmlsdGVyIGlzIGRlbGV0ZWQgYWZ0ZXIgYSBub3RpZmljYXRpb24gd2l0aG91dCBhbiBhZGRpdGlvbmFsCi0gKiBzeXNjYWxsOiBzZWxlY3QsIHBvbGwsIGtxdWV1ZSwgZXBvbGwsIFNvbGFyaXMgMTAncyBldmVudCBwb3J0cy4KKyAqIHN5c2NhbGw6IGtxdWV1ZSwgZXBvbGwsIFNvbGFyaXMgMTAncyBldmVudCBwb3J0cy4KICAqLwogI2RlZmluZSBOR1hfVVNFX09ORVNIT1RfRVZFTlQgICAgMHgwMDAwMDAwMgogCkBAIC0yNzAsNiArMjc0LDEyIEBACiAgKi8KICNkZWZpbmUgTkdYX1VTRV9GRF9FVkVOVCAgICAgICAgIDB4MDAwMDA0MDAKIAorLyoKKyAqIFRoZSBldmVudCBtb2R1bGUgaGFuZGxlcyBwZXJpb2RpYyBvciBhYnNvbHV0ZSB0aW1lciBldmVudCBieSBpdHNlbGY6CisgKiBrcXVldWUgaW4gRnJlZUJTRCA0LjQgYW5kIE5ldEJTRCAyLjAsIFNvbGFyaXMgMTAncyBldmVudCBwb3J0cy4KKyAqLworI2RlZmluZSBOR1hfVVNFX1RJTUVSX0VWRU5UICAgICAgMHgwMDAwMDgwMAorCiAKIAogLyoKQEAgLTQ0NiwxMyArNDU2LDEyIEBACiAjZW5kaWYKIAogCi0KLSNkZWZpbmUgbmd4X2FjY2VwdF9tdXRleF91bmxvY2soKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgaWYgKG5neF9hY2NlcHRfbXV0ZXhfaGVsZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICpuZ3hfYWNjZXB0X211dGV4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgfQorI2RlZmluZSBOR1hfVVBEQVRFX1RJTUUgICAgICAgICAxCisjZGVmaW5lIE5HWF9QT1NUX0VWRU5UUyAgICAgICAgIDIKKyNkZWZpbmUgTkdYX1BPU1RfVEhSRUFEX0VWRU5UUyAgNAogCiAKK2V4dGVybiBzaWdfYXRvbWljX3QgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9hbGFybTsKIGV4dGVybiBuZ3hfdWludF90ICAgICAgICAgICAgIG5neF9ldmVudF9mbGFnczsKIGV4dGVybiBuZ3hfbW9kdWxlX3QgICAgICAgICAgIG5neF9ldmVudHNfbW9kdWxlOwogZXh0ZXJuIG5neF9tb2R1bGVfdCAgICAgICAgICAgbmd4X2V2ZW50X2NvcmVfbW9kdWxlOwpAQCAtNDcwLDYgKzQ3OSw3IEBACiB1X2NoYXIgKm5neF9hY2NlcHRfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbik7CiAKIAordm9pZCBuZ3hfcHJvY2Vzc19ldmVudHNfYW5kX3RpbWVycyhuZ3hfY3ljbGVfdCAqY3ljbGUpOwogbmd4X2ludF90IG5neF9oYW5kbGVfcmVhZF9ldmVudChuZ3hfZXZlbnRfdCAqcmV2LCB1X2ludCBmbGFncyk7CiBuZ3hfaW50X3Qgbmd4X2hhbmRsZV93cml0ZV9ldmVudChuZ3hfZXZlbnRfdCAqd2V2LCBzaXplX3QgbG93YXQpOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKaW5kZXggZjI2OTg0NC4uOTU2YTNmMSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgICAgICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOwogICAgICAgICAgICAgaWYgKGVyciAhPSBXU0FfSU9fUEVORElORykgewogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgJmxzLT5sb2csIGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBY2NlcHRFeCgpICVzIGZhbGllZCIsIGxzLT5hZGRyX3RleHQuZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWNjZXB0RXgoKSAlViBmYWxpZWQiLCAmbHMtPmFkZHJfdGV4dCk7CiAKICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfcG9zdGVkX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2J1c3lfbG9jay5jCmluZGV4IDRkNDk5YTMuLjFiMDlhZDkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9idXN5X2xvY2suYwpAQCAtMTAsNyArMTAsNyBAQAogCiAKIHN0YXRpYyBpbnQgbmd4X2V2ZW50X2J1c3lfbG9ja19sb29rX2NhY2hhYmxlKG5neF9ldmVudF9idXN5X2xvY2tfdCAqYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpOworICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCk7CiBzdGF0aWMgdm9pZCBuZ3hfZXZlbnRfYnVzeV9sb2NrX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KTsKIHN0YXRpYyB2b2lkIG5neF9ldmVudF9idXN5X2xvY2tfcG9zdGVkX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KTsKIApAQCAtMjMsMTQgKzIzLDEyIEBACiAgKiBOR1hfRVJST1I6ICBhbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRoZSBtdXRleCBsb2NraW5nCiAgKi8KIAotbmd4X2ludF90IG5neF9ldmVudF9idXN5X2xvY2sobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKK25neF9pbnRfdAorbmd4X2V2ZW50X2J1c3lfbG9jayhuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLCBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpCiB7CiAgICAgbmd4X2ludF90ICByYzsKIAotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhibC0+bXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhibC0+bXV0ZXgpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgY3R4LT5ldmVudC0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJldmVudCBidXN5IGxvY2s6IGI6JWQgbWI6JWQiLApAQCAtNjYsMTQgKzY0LDEzIEBACiB9CiAKIAotbmd4X2ludF90IG5neF9ldmVudF9idXN5X2xvY2tfY2FjaGFibGUobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKK25neF9pbnRfdAorbmd4X2V2ZW50X2J1c3lfbG9ja19jYWNoYWJsZShuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLAorICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKIHsKICAgICBuZ3hfaW50X3QgIHJjOwogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKGJsLT5tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQorICAgIG5neF9tdXRleF9sb2NrKGJsLT5tdXRleCk7CiAKICAgICByYyA9IG5neF9ldmVudF9idXN5X2xvY2tfbG9va19jYWNoYWJsZShibCwgY3R4KTsKIApAQCAtMTEyLDE1ICsxMDksMTQgQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2V2ZW50X2J1c3lfdW5sb2NrKG5neF9ldmVudF9idXN5X2xvY2tfdCAqYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKK3ZvaWQKK25neF9ldmVudF9idXN5X3VubG9jayhuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLAorICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKIHsKICAgICBuZ3hfZXZlbnRfdCAgICAgICAgICAgICAgICAqZXY7CiAgICAgbmd4X2V2ZW50X2J1c3lfbG9ja19jdHhfdCAgKndha2V1cDsKIAotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhibC0+bXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhibC0+bXV0ZXgpOwogCiAgICAgaWYgKGJsLT5ldmVudHMpIHsKICAgICAgICAgd2FrZXVwID0gYmwtPmV2ZW50czsKQEAgLTEzOCw3ICsxMzQsNyBAQAogCiAgICAgaWYgKHdha2V1cCA9PSBOVUxMKSB7CiAgICAgICAgIG5neF9tdXRleF91bmxvY2soYmwtPm11dGV4KTsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChjdHgtPm1kNSkgewpAQCAtMTUyLDEzICsxNDgsNyBAQAogCiAgICAgICAgICAgICBldiA9IHdha2V1cC0+ZXZlbnQ7CiAKLSAgICAgICAgICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYpOwotCi0gICAgICAgICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKyAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KGV2LCAmbmd4X3Bvc3RlZF9ldmVudHMpOwogICAgICAgICB9CiAKICAgICAgICAgbmd4X211dGV4X3VubG9jayhibC0+bXV0ZXgpOwpAQCAtMTc3LDI3ICsxNjcsMTggQEAKICAgICAgICAgICAgIG5neF9kZWxfdGltZXIoZXYpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBuZ3hfcG9zdF9ldmVudChldik7Ci0KLSAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgIG5neF9wb3N0X2V2ZW50KGV2LCAmbmd4X3Bvc3RlZF9ldmVudHMpOwogICAgIH0KLQotICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAotbmd4X2ludF90IG5neF9ldmVudF9idXN5X2xvY2tfY2FuY2VsKG5neF9ldmVudF9idXN5X2xvY2tfdCAqYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2J1c3lfbG9ja19jdHhfdCAqY3R4KQordm9pZAorbmd4X2V2ZW50X2J1c3lfbG9ja19jYW5jZWwobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKKyAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpCiB7CiAgICAgbmd4X2V2ZW50X2J1c3lfbG9ja19jdHhfdCAgKmMsICpwOwogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKGJsLT5tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQorICAgIG5neF9tdXRleF9sb2NrKGJsLT5tdXRleCk7CiAKICAgICBibC0+d2FpdGluZy0tOwogCkBAIC0yMTYsMTMgKzE5NywxMiBAQAogICAgIH0KIAogICAgIG5neF9tdXRleF91bmxvY2soYmwtPm11dGV4KTsKLQotICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAotc3RhdGljIGludCBuZ3hfZXZlbnRfYnVzeV9sb2NrX2xvb2tfY2FjaGFibGUobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9ldmVudF9idXN5X2xvY2tfbG9va19jYWNoYWJsZShuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLAorICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCkKIHsKICAgICBuZ3hfaW50X3QgICAgZnJlZTsKICAgICBuZ3hfdWludF90ICAgaSwgYml0LCBjYWNoYWJsZSwgbWFzazsKQEAgLTI4NiwyMSArMjY2LDE3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbmd4X2V2ZW50X2J1c3lfbG9ja19oYW5kbGVyKG5neF9ldmVudF90ICpldikKK3N0YXRpYyB2b2lkCituZ3hfZXZlbnRfYnVzeV9sb2NrX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQogewotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBuZ3hfcG9zdF9ldmVudChldik7Ci0KLSAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKLQogICAgIGV2LT5oYW5kbGVyID0gbmd4X2V2ZW50X2J1c3lfbG9ja19wb3N0ZWRfaGFuZGxlcjsKKworICAgIG5neF9wb3N0X2V2ZW50KGV2LCAmbmd4X3Bvc3RlZF9ldmVudHMpOwogfQogCiAKLXN0YXRpYyB2b2lkIG5neF9ldmVudF9idXN5X2xvY2tfcG9zdGVkX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQorc3RhdGljIHZvaWQKK25neF9ldmVudF9idXN5X2xvY2tfcG9zdGVkX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KQogewogICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgICpjdHg7CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2J1c3lfbG9jay5oCmluZGV4IGNlNjAwMDIuLjViNTBiZTYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYnVzeV9sb2NrLmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9idXN5X2xvY2suaApAQCAtNTIsMTMgKzUyLDEzIEBACiAKIAogbmd4X2ludF90IG5neF9ldmVudF9idXN5X2xvY2sobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCk7CisgICAgbmd4X2V2ZW50X2J1c3lfbG9ja19jdHhfdCAqY3R4KTsKIG5neF9pbnRfdCBuZ3hfZXZlbnRfYnVzeV9sb2NrX2NhY2hhYmxlKG5neF9ldmVudF9idXN5X2xvY2tfdCAqYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpOwotbmd4X2ludF90IG5neF9ldmVudF9idXN5X3VubG9jayhuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpOwotbmd4X2ludF90IG5neF9ldmVudF9idXN5X2xvY2tfY2FuY2VsKG5neF9ldmVudF9idXN5X2xvY2tfdCAqYmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2J1c3lfbG9ja19jdHhfdCAqY3R4KTsKKyAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpOwordm9pZCBuZ3hfZXZlbnRfYnVzeV91bmxvY2sobmd4X2V2ZW50X2J1c3lfbG9ja190ICpibCwKKyAgICBuZ3hfZXZlbnRfYnVzeV9sb2NrX2N0eF90ICpjdHgpOwordm9pZCBuZ3hfZXZlbnRfYnVzeV9sb2NrX2NhbmNlbChuZ3hfZXZlbnRfYnVzeV9sb2NrX3QgKmJsLAorICAgIG5neF9ldmVudF9idXN5X2xvY2tfY3R4X3QgKmN0eCk7CiAKIAogI2VuZGlmIC8qIF9OR1hfRVZFTlRfQlVTWV9MT0NLX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCmluZGV4IDYxODJlZjAuLmIyMGQxNmQgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5jCkBAIC0xNDEsNyArMTQxLDggQEAKIAogICAgIGlmIChwYy0+cmN2YnVmKSB7CiAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwKLSAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJnBjLT5yY3ZidWYsIHNpemVvZihpbnQpKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmcGMtPnJjdmJ1Ziwgc2l6ZW9mKGludCkpID09IC0xKQorICAgICAgICB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHBjLT5sb2csIG5neF9zb2NrZXRfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFNPX1JDVkJVRikgZmFpbGVkIik7CiAKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKaW5kZXggNDhhMDNhMS4uNWU4ZTc0NyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMKQEAgLTEwNSw3ICsxMDUsMjcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbC0+Y3R4LCBTU0xfT1BfQUxMKTsKKyAgICAvKgorICAgICAqIHRoZXNlIG9wdGlvbnMgYXJlIG5lZWRlZCBvbiBjbGllbnQgc2lkZSBvbmx5OgorICAgICAqICAgIFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUcKKyAgICAgKiAgICBTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRworICAgICAqICAgIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRworICAgICAqLworCisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyk7CisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSKTsKKworICAgIC8qIHRoaXMgb3B0aW9uIGFsbG93IGEgcG90ZW50aWFsIFNTTCAyLjAgcm9sbGJhY2sgKENBTi0yMDA1LTI5NjkpICovCisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkcpOworCisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyk7CisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX1RMU19ENV9CVUcpOworICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsLT5jdHgsIFNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUcpOworCisjaWZkZWYgU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUworICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsLT5jdHgsIFNTTF9PUF9ET05UX0lOU0VSVF9FTVBUWV9GUkFHTUVOVFMpOworI2VuZGlmCisKIAogICAgIGlmIChuZ3hfc3NsX3Byb3RvY29sc1twcm90b2NvbHMgPj4gMV0gIT0gMCkgewogICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbC0+Y3R4LCBuZ3hfc3NsX3Byb3RvY29sc1twcm90b2NvbHMgPj4gMV0pOwpAQCAtMTIwLDIwICsxNDAsMzEgQEAKIAogCiBuZ3hfaW50X3QKLW5neF9zc2xfY2VydGlmaWNhdGUobmd4X3NzbF90ICpzc2wsIHVfY2hhciAqY2VydCwgdV9jaGFyICprZXkpCituZ3hfc3NsX2NlcnRpZmljYXRlKG5neF9jb25mX3QgKmNmLCBuZ3hfc3NsX3QgKnNzbCwgbmd4X3N0cl90ICpjZXJ0LAorICAgIG5neF9zdHJfdCAqa2V5KQogewotICAgIGlmIChTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKHNzbC0+Y3R4LCAoY2hhciAqKSBjZXJ0KSA9PSAwKSB7Ci0gICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgc3NsLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoXCIlc1wiKSBmYWlsZWQiLAotICAgICAgICAgICAgICAgICAgICAgIGNlcnQpOworICAgIGlmIChuZ3hfY29uZl9mdWxsX25hbWUoY2YtPmN5Y2xlLCBjZXJ0KSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKHNzbC0+Y3R4LCAoY2hhciAqKSBrZXksIFNTTF9GSUxFVFlQRV9QRU0pCisgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoc3NsLT5jdHgsIChjaGFyICopIGNlcnQtPmRhdGEpCiAgICAgICAgID09IDApCiAgICAgewogICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfRU1FUkcsIHNzbC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoXCIlc1wiKSBmYWlsZWQiLCBrZXkpOworICAgICAgICAgICAgICAgICAgICAgICJTU0xfQ1RYX3VzZV9jZXJ0aWZpY2F0ZV9jaGFpbl9maWxlKFwiJXNcIikgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5kYXRhKTsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAobmd4X2NvbmZfZnVsbF9uYW1lKGNmLT5jeWNsZSwga2V5KSA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKHNzbC0+Y3R4LCAoY2hhciAqKSBrZXktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfRklMRVRZUEVfUEVNKSA9PSAwKQorICAgIHsKKyAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0VNRVJHLCBzc2wtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKFwiJXNcIikgZmFpbGVkIiwga2V5LT5kYXRhKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKQEAgLTQwMiwxMyArNDMzLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5neF9wb3N0X2V2ZW50KGMtPndyaXRlKTsKLQotICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChjLT53cml0ZSwgJm5neF9wb3N0ZWRfZXZlbnRzKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBOR1hfT0s7CkBAIC02MzIsMTMgKzY1Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChjLT5yZWFkKTsKLQotICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChjLT5yZWFkLCAmbmd4X3Bvc3RlZF9ldmVudHMpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG47CkBAIC05MjUsOCArOTQ0LDggQEAKIG5neF9vcGVuc3NsX25vZW5naW5lKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7CiAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAiXCJzc2xfZW5naW5lXCIgaXMgbm90IHN1cHBvcnRlZDogIiBOR1hfU1NMX05BTUUKLSAgICAgICAgICAgICAgICAgICAgICAgIiBsaWJyYXJ5IGRvZXMgbm90IHN1cHBvcnQgY3J5cHRvIGFjY2VsZXJhdG9ycyIpOworICAgICAgICAgICAgICAgICAgICAgICAiXCJzc2xfZW5naW5lXCIgZGlyZWN0aXZlIGlzIGF2YWlsYWJsZSBvbmx5IGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgIk9wZW5TU0wgMC45LjcgYW5kIGhpZ2hlciwiKTsKIAogICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfb3BlbnNzbC5oIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKaW5kZXggY2QzODk4Yy4uNmU4MWNkZiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmgKQEAgLTU4LDcgKzU4LDggQEAKIAogbmd4X2ludF90IG5neF9zc2xfaW5pdChuZ3hfbG9nX3QgKmxvZyk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9jcmVhdGUobmd4X3NzbF90ICpzc2wsIG5neF91aW50X3QgcHJvdG9jb2xzKTsKLW5neF9pbnRfdCBuZ3hfc3NsX2NlcnRpZmljYXRlKG5neF9zc2xfdCAqc3NsLCB1X2NoYXIgKmNlcnQsIHVfY2hhciAqa2V5KTsKK25neF9pbnRfdCBuZ3hfc3NsX2NlcnRpZmljYXRlKG5neF9jb25mX3QgKmNmLCBuZ3hfc3NsX3QgKnNzbCwKKyAgICBuZ3hfc3RyX3QgKmNlcnQsIG5neF9zdHJfdCAqa2V5KTsKIG5neF9pbnRfdCBuZ3hfc3NsX2dlbmVyYXRlX3JzYTUxMl9rZXkobmd4X3NzbF90ICpzc2wpOwogbmd4X2ludF90IG5neF9zc2xfY3JlYXRlX2Nvbm5lY3Rpb24obmd4X3NzbF90ICpzc2wsIG5neF9jb25uZWN0aW9uX3QgKmMsCiAgICAgbmd4X3VpbnRfdCBmbGFncyk7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3Bvc3RlZC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuYwppbmRleCAxODFhYjRjLi5hN2IwOWZkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3Bvc3RlZC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcG9zdGVkLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8bmd4X2V2ZW50Lmg+CiAKIAorbmd4X3RocmVhZF92b2xhdGlsZSBuZ3hfZXZlbnRfdCAgKm5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50czsKIG5neF90aHJlYWRfdm9sYXRpbGUgbmd4X2V2ZW50X3QgICpuZ3hfcG9zdGVkX2V2ZW50czsKIAogI2lmIChOR1hfVEhSRUFEUykKQEAgLTE2LDEzICsxNywxNSBAQAogI2VuZGlmCiAKIAotdm9pZCBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQobmd4X2N5Y2xlX3QgKmN5Y2xlKQordm9pZAorbmd4X2V2ZW50X3Byb2Nlc3NfcG9zdGVkKG5neF9jeWNsZV90ICpjeWNsZSwKKyAgICBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9ldmVudF90ICoqcG9zdGVkKQogewogICAgIG5neF9ldmVudF90ICAqZXY7CiAKICAgICBmb3IgKCA7OyApIHsKIAotICAgICAgICBldiA9IChuZ3hfZXZlbnRfdCAqKSBuZ3hfcG9zdGVkX2V2ZW50czsKKyAgICAgICAgZXYgPSAobmd4X2V2ZW50X3QgKikgKnBvc3RlZDsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJwb3N0ZWQgZXZlbnQgJXAiLCBldik7CkBAIC00MCw3ICs0Myw4IEBACiAKICNpZiAoTkdYX1RIUkVBRFMpICYmICEoTkdYX1dJTjMyKQogCi12b2lkIG5neF93YWtldXBfd29ya2VyX3RocmVhZChuZ3hfY3ljbGVfdCAqY3ljbGUpCit2b2lkCituZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIG5neF9pbnRfdCAgICAgaTsKICNpZiAwCkBAIC03Niw3ICs4MCw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9ldmVudF90aHJlYWRfcHJvY2Vzc19wb3N0ZWQobmd4X2N5Y2xlX3QgKmN5Y2xlKQorbmd4X2ludF90CituZ3hfZXZlbnRfdGhyZWFkX3Byb2Nlc3NfcG9zdGVkKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBuZ3hfZXZlbnRfdCAgKmV2OwogCkBAIC0xMzksOSArMTQ0LDcgQEAKIAogICAgICAgICAgICAgZXYtPmhhbmRsZXIoZXYpOwogCi0gICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CiAKICAgICAgICAgICAgIGlmIChldi0+bG9ja2VkKSB7CiAgICAgICAgICAgICAgICAgbmd4X3VubG9jayhldi0+bG9jayk7CkBAIC0xNjEsNyArMTY0LDggQEAKIAogI2Vsc2UKIAotdm9pZCBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWQobmd4X2N5Y2xlX3QgKmN5Y2xlKQordm9pZAorbmd4X3dha2V1cF93b3JrZXJfdGhyZWFkKG5neF9jeWNsZV90ICpjeWNsZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcG9zdGVkLmgKaW5kZXggODYxMDBhZi4uZjljNTVlNSAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9wb3N0ZWQuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3Bvc3RlZC5oCkBAIC0xMyw0MyArMTMsNjIgQEAKICNpbmNsdWRlIDxuZ3hfZXZlbnQuaD4KIAogCi0jZGVmaW5lIG5neF9wb3N0X2V2ZW50KGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBpZiAoZXYtPnByZXYgPT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZXYtPm5leHQgPSAobmd4X2V2ZW50X3QgKikgbmd4X3Bvc3RlZF9ldmVudHM7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZXYtPnByZXYgPSAobmd4X2V2ZW50X3QgKiopICZuZ3hfcG9zdGVkX2V2ZW50czsgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmd4X3Bvc3RlZF9ldmVudHMgPSBldjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKGV2LT5uZXh0KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIGV2LT5uZXh0LT5wcmV2ID0gJmV2LT5uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBldi0+bG9nLCAwLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvc3QgZXZlbnQgJXAiLCBldik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9IGVsc2UgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBldi0+bG9nLCAwLCAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVwZGF0ZSBwb3N0ZWQgZXZlbnQgJXAiLCBldik7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9CisjaWYgKE5HWF9USFJFQURTKQorZXh0ZXJuIG5neF9tdXRleF90ICAqbmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXg7CisjZW5kaWYKKworCisjZGVmaW5lIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGV2LT5wcmV2ID09IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGV2LT5uZXh0ID0gKG5neF9ldmVudF90ICopICpxdWV1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGV2LT5wcmV2ID0gKG5neF9ldmVudF90ICoqKSBxdWV1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICpxdWV1ZSA9IGV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChldi0+bmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBldi0+bmV4dC0+cHJldiA9ICZldi0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgInBvc3QgZXZlbnQgJXAiLCBldik7ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGUgcG9zdGVkIGV2ZW50ICVwIiwgZXYpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisKKyNkZWZpbmUgbmd4X3Bvc3RfZXZlbnQoZXYsIHF1ZXVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQoZXYsIHF1ZXVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KTsKKwogCiAjZGVmaW5lIG5neF9kZWxldGVfcG9zdGVkX2V2ZW50KGV2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICooZXYtPnByZXYpID0gZXYtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChldi0+bmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBldi0+bmV4dC0+cHJldiA9IGV2LT5wcmV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGV2LT5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICJkZWxldGUgcG9zdGVkIGV2ZW50ICVwIiwgZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICooZXYtPnByZXYpID0gZXYtPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChldi0+bmV4dCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBldi0+bmV4dC0+cHJldiA9IGV2LT5wcmV2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGV2LT5wcmV2ID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQ09SRSwgZXYtPmxvZywgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICJkZWxldGUgcG9zdGVkIGV2ZW50ICVwIiwgZXYpOwogCiAKIAotdm9pZCBuZ3hfZXZlbnRfcHJvY2Vzc19wb3N0ZWQobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKK3ZvaWQgbmd4X2V2ZW50X3Byb2Nlc3NfcG9zdGVkKG5neF9jeWNsZV90ICpjeWNsZSwKKyAgICBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9ldmVudF90ICoqcG9zdGVkKTsKIHZvaWQgbmd4X3dha2V1cF93b3JrZXJfdGhyZWFkKG5neF9jeWNsZV90ICpjeWNsZSk7CiAKLWV4dGVybiBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9ldmVudF90ICAqbmd4X3Bvc3RlZF9ldmVudHM7Ci0KLQogI2lmIChOR1hfVEhSRUFEUykKIG5neF9pbnRfdCBuZ3hfZXZlbnRfdGhyZWFkX3Byb2Nlc3NfcG9zdGVkKG5neF9jeWNsZV90ICpjeWNsZSk7Ci0KLWV4dGVybiBuZ3hfbXV0ZXhfdCAgICAgICAgICAgICAgICAgICAgICAqbmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXg7CiAjZW5kaWYKIAogCitleHRlcm4gbmd4X3RocmVhZF92b2xhdGlsZSBuZ3hfZXZlbnRfdCAgKm5neF9wb3N0ZWRfYWNjZXB0X2V2ZW50czsKK2V4dGVybiBuZ3hfdGhyZWFkX3ZvbGF0aWxlIG5neF9ldmVudF90ICAqbmd4X3Bvc3RlZF9ldmVudHM7CisKKwogI2VuZGlmIC8qIF9OR1hfRVZFTlRfUE9TVEVEX0hfSU5DTFVERURfICovCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmMKaW5kZXggMTc0Y2M2NS4uM2ViMjNmNiAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuYwpAQCAtNTIsOSArNTIsNyBAQAogICAgICAgICByZXR1cm4gTkdYX1RJTUVSX0lORklOSVRFOwogICAgIH0KIAotICAgIGlmIChuZ3hfbXV0ZXhfbG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICByZXR1cm4gTkdYX1RJTUVSX0VSUk9SOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpOwogCiAgICAgcm9vdCA9IG5neF9ldmVudF90aW1lcl9yYnRyZWUucm9vdDsKICAgICBzZW50aW5lbCA9IG5neF9ldmVudF90aW1lcl9yYnRyZWUuc2VudGluZWw7CkBAIC02Myw3ICs2MSw3IEBACiAKICAgICBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9ldmVudF90aW1lcl9tdXRleCk7CiAKLSAgICB0aW1lciA9IChuZ3hfbXNlY19pbnRfdCkgbm9kZS0+a2V5IC0gKG5neF9tc2VjX2ludF90KSBuZ3hfY3VycmVudF90aW1lOworICAgIHRpbWVyID0gKG5neF9tc2VjX2ludF90KSBub2RlLT5rZXkgLSAobmd4X21zZWNfaW50X3QpIG5neF9jdXJyZW50X21zZWM7CiAKICAgICByZXR1cm4gKG5neF9tc2VjX3QpICh0aW1lciA+IDAgPyB0aW1lciA6IDApOwogfQpAQCAtNzksOSArNzcsNyBAQAogCiAgICAgZm9yICggOzsgKSB7CiAKLSAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9ldmVudF90aW1lcl9tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgbmd4X211dGV4X2xvY2sobmd4X2V2ZW50X3RpbWVyX211dGV4KTsKIAogICAgICAgICByb290ID0gbmd4X2V2ZW50X3RpbWVyX3JidHJlZS5yb290OwogCkBAIC05Myw3ICs4OSw3IEBACiAKICAgICAgICAgLyogbm9kZS0+a2V5IDw9IG5neF9jdXJyZW50X3RpbWUgKi8KIAotICAgICAgICBpZiAoKG5neF9tc2VjX2ludF90KSBub2RlLT5rZXkgLSAobmd4X21zZWNfaW50X3QpIG5neF9jdXJyZW50X3RpbWUgPD0gMCkKKyAgICAgICAgaWYgKChuZ3hfbXNlY19pbnRfdCkgbm9kZS0+a2V5IC0gKG5neF9tc2VjX2ludF90KSBuZ3hfY3VycmVudF9tc2VjIDw9IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIGV2ID0gKG5neF9ldmVudF90ICopICgoY2hhciAqKSBub2RlIC0gb2Zmc2V0b2Yobmd4X2V2ZW50X3QsIHRpbWVyKSk7CiAKQEAgLTEzMywxNCArMTI5LDkgQEAKIAogI2lmIChOR1hfVEhSRUFEUykKICAgICAgICAgICAgIGlmIChuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgZXYtPnBvc3RlZF90aW1lZG91dCA9IDE7Ci0gICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYpOwogCi0gICAgICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgICAgICAgICAgbmd4X3Bvc3RfZXZlbnQoZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAKICAgICAgICAgICAgICAgICBuZ3hfdW5sb2NrKGV2LT5sb2NrKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oIGIvc3JjL2V2ZW50L25neF9ldmVudF90aW1lci5oCmluZGV4IGY5ODAyMzQuLmNlMzJjZTkgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfdGltZXIuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X3RpbWVyLmgKQEAgLTE0LDcgKzE0LDYgQEAKIAogCiAjZGVmaW5lIE5HWF9USU1FUl9JTkZJTklURSAgKG5neF9tc2VjX3QpIC0xCi0jZGVmaW5lIE5HWF9USU1FUl9FUlJPUiAgICAgKG5neF9tc2VjX3QpIC0yCiAKICNkZWZpbmUgTkdYX1RJTUVSX0xBWllfREVMQVkgIDMwMAogCkBAIC0zOSw5ICszOCw3IEBACiAgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGRlbDogJWQ6ICVNIiwKICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgZXYtPnRpbWVyLmtleSk7CiAKLSAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X2V2ZW50X3RpbWVyX211dGV4KSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBuZ3hfbXV0ZXhfbG9jayhuZ3hfZXZlbnRfdGltZXJfbXV0ZXgpOwogCiAgICAgbmd4X3JidHJlZV9kZWxldGUoJm5neF9ldmVudF90aW1lcl9yYnRyZWUsICZldi0+dGltZXIpOwogCkBAIC02Myw3ICs2MCw3IEBACiAgICAgbmd4X21zZWNfdCAgICAgIGtleTsKICAgICBuZ3hfbXNlY19pbnRfdCAgZGlmZjsKIAotICAgIGtleSA9IG5neF9jdXJyZW50X3RpbWUgKyB0aW1lcjsKKyAgICBrZXkgPSBuZ3hfY3VycmVudF9tc2VjICsgdGltZXI7CiAKICAgICBpZiAoZXYtPnRpbWVyX3NldCkgewogCkBAIC05MSw5ICs4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgImV2ZW50IHRpbWVyIGFkZDogJWQ6ICVNOiVNIiwKICAgICAgICAgICAgICAgICAgICAgbmd4X2V2ZW50X2lkZW50KGV2LT5kYXRhKSwgdGltZXIsIGV2LT50aW1lci5rZXkpOwogCi0gICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9ldmVudF90aW1lcl9tdXRleCkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbmd4X211dGV4X2xvY2sobmd4X2V2ZW50X3RpbWVyX211dGV4KTsKIAogICAgIG5neF9yYnRyZWVfaW5zZXJ0KCZuZ3hfZXZlbnRfdGltZXJfcmJ0cmVlLCAmZXYtPnRpbWVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwppbmRleCA3MGY3OTc0Li4zNjIzZTJhIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwpAQCAtMTQ0LDYgKzE0NCw3IEBACiAgICAgbmd4X2Rpcl90ICAgICAgICAgICAgICAgICAgICAgICBkaXI7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBpLCBsZXZlbDsKICAgICBuZ3hfcG9vbF90ICAgICAgICAgICAgICAgICAgICAgKnBvb2w7CisgICAgbmd4X3RpbWVfdCAgICAgICAgICAgICAgICAgICAgICp0cDsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICAgICAgIG91dDsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM7CiAgICAgbmd4X2h0dHBfYXV0b2luZGV4X2VudHJ5X3QgICAgICplbnRyeTsKQEAgLTM3Miw2ICszNzMsOCBAQAogICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsICI8aHI+PHByZT48YSBocmVmPVwiLi4vXCI+Li4vPC9hPiIgQ1JMRiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoIjxocj48cHJlPjxhIGhyZWY9XCIuLi9cIj4uLi88L2E+IiBDUkxGKSAtIDEpOwogCisgICAgdHAgPSBuZ3hfdGltZW9mZGF5KCk7CisKICAgICBmb3IgKGkgPSAwOyBpIDwgZW50cmllcy5uZWx0czsgaSsrKSB7CiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsICI8YSBocmVmPVwiIiwgc2l6ZW9mKCI8YSBocmVmPVwiIikgLSAxKTsKIApAQCAtNDI4LDcgKzQzMSw3IEBACiAKICAgICAgICAgKmItPmxhc3QrKyA9ICcgJzsKIAotICAgICAgICBuZ3hfZ210aW1lKGVudHJ5W2ldLm10aW1lICsgbmd4X2dtdG9mZiAqIDYwICogYWxjZi0+bG9jYWx0aW1lLCAmdG0pOworICAgICAgICBuZ3hfZ210aW1lKGVudHJ5W2ldLm10aW1lICsgdHAtPmdtdG9mZiAqIDYwICogYWxjZi0+bG9jYWx0aW1lLCAmdG0pOwogCiAgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiJTAyZC0lcy0lZCAlMDJkOiUwMmQgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLm5neF90bV9tZGF5LApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nZW9fbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwppbmRleCBlZWRjMWY3Li42ZDk0YTA2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYwpAQCAtMTIzLDYgKzEyMyw3IEBACiAgICAgfQogCiAgICAgdHJlZSA9IG5neF9yYWRpeF90cmVlX2NyZWF0ZShjZi0+cG9vbCwgLTEpOworCiAgICAgaWYgKHRyZWUgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKaW5kZXggMDFiNmQwYy4uYjdkYWE2ZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCkBAIC0xMjYsNyArMTI2LDggQEAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpOwogICAgIG5neF9odHRwX2luZGV4X3QgICAgICAgICAgICAgKmluZGV4OwogICAgIG5neF9odHRwX2luZGV4X2N0eF90ICAgICAgICAgKmN0eDsKLSAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgICAgICpjbG47CisgICAgbmd4X3Bvb2xfY2xlYW51cF90ICAgICAgICAgICAqY2xuOworICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgICAgKmNsbmY7CiAgICAgbmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgICAgICAgY29kZTsKICAgICBuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgICAgICBlOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAgKmNsY2Y7CkBAIC0xODAsOSArMTgxLDkgQEAKICAgICAgICAgICAgIGUuaXAgPSBpbmRleFtpXS5sZW5ndGhzLT5lbHRzOwogICAgICAgICAgICAgZS5yZXF1ZXN0ID0gcjsKIAotICAgICAgICAgICAgLyogMSBieXRlIGZvciB0ZXJtaW5hdGluZyAnXDAnIGFuZCA0IGJ5dGVzIGlzIHByZWFsbG9jYXRpb24gKi8KKyAgICAgICAgICAgIC8qIDEgYnl0ZSBmb3IgdGVybWluYXRpbmcgJ1wwJyAqLwogCi0gICAgICAgICAgICBsZW4gPSAxICsgNDsKKyAgICAgICAgICAgIGxlbiA9IDE7CiAKICAgICAgICAgICAgIHdoaWxlICgqKHVpbnRwdHJfdCAqKSBlLmlwKSB7CiAgICAgICAgICAgICAgICAgbGNvZGUgPSAqKG5neF9odHRwX3NjcmlwdF9sZW5fY29kZV9wdCAqKSBlLmlwOwpAQCAtMTkwLDYgKzE5MSwxMCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjdHgtPmluZGV4LmxlbiA9IGxlbjsKKworICAgICAgICAgICAgLyogMTYgYnl0ZXMgYXJlIHByZWFsbG9jYXRpb24gKi8KKworICAgICAgICAgICAgbGVuICs9IDE2OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGxlbiA+IGN0eC0+cGF0aC5sZW4pIHsKQEAgLTIyOCw2ICsyMzMsMTEgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuIGluZGV4IFwiJXNcIiIsIGN0eC0+cGF0aC5kYXRhKTsKIAorICAgICAgICBjbG4gPSBuZ3hfcG9vbF9jbGVhbnVwX2FkZChyLT5wb29sLCBzaXplb2Yobmd4X3Bvb2xfY2xlYW51cF9maWxlX3QpKTsKKyAgICAgICAgaWYgKGNsbiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgICAgICB9CisKICAgICAgICAgZmQgPSBuZ3hfb3Blbl9maWxlKGN0eC0+cGF0aC5kYXRhLCBOR1hfRklMRV9SRE9OTFksIE5HWF9GSUxFX09QRU4pOwogCiAgICAgICAgIGlmIChmZCA9PSAobmd4X2ZkX3QpIE5HWF9BR0FJTikgewpAQCAtMjY4LDE5ICsyNzgsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CiAgICAgICAgIH0KIAorICAgICAgICBjbG4tPmhhbmRsZXIgPSBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGU7CisgICAgICAgIGNsbmYgPSBjbG4tPmRhdGE7CiAKLSAgICAgICAgY2xuID0gbmd4X3BhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X3Bvb2xfY2xlYW51cF9maWxlX3QpKTsKLSAgICAgICAgaWYgKGNsbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOyAKLSAgICAgICAgfQotCi0gICAgICAgIGNsbi0+ZmQgPSBmZDsKLSAgICAgICAgY2xuLT5uYW1lID0gY3R4LT5wYXRoLmRhdGE7Ci0gICAgICAgIGNsbi0+bG9nID0gci0+cG9vbC0+bG9nOwotCi0gICAgICAgIGlmIChuZ3hfcG9vbF9jbGVhbnVwX2FkZChyLT5wb29sLCBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGUsIGNsbikgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICAgICAgfQorICAgICAgICBjbG5mLT5mZCA9IGZkOworICAgICAgICBjbG5mLT5uYW1lID0gY3R4LT5wYXRoLmRhdGE7CisgICAgICAgIGNsbmYtPmxvZyA9IHItPnBvb2wtPmxvZzsKIAogICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA1ZjllZTNhLi5hZjgyYjBlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCkBAIC0xOTY4LDYgKzE5NjgsNyBAQAogewogICAgIG5neF9odHRwX3NzaV9jdHhfdCAgICAgICAgICpjdHg7CiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZ2OworICAgIG5neF90aW1lX3QgICAgICAgICAgICAgICAgICp0cDsKICAgICBzdHJ1Y3QgdG0gICAgICAgICAgICAgICAgICAgdG07CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltOR1hfSFRUUF9TU0lfREFURV9MRU5dOwogCkBAIC0xOTc2LDEyICsxOTc3LDE0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIHRwID0gbmd4X3RpbWVvZmRheSgpOworCiAgICAgY3R4ID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9jdHgociwgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUpOwogCiAgICAgaWYgKGN0eC0+dGltZWZtdC5sZW4gPT0gc2l6ZW9mKCIlcyIpIC0gMQogICAgICAgICAmJiBjdHgtPnRpbWVmbXQuZGF0YVswXSA9PSAnJScgJiYgY3R4LT50aW1lZm10LmRhdGFbMV0gPT0gJ3MnKQogICAgIHsKLSAgICAgICAgdnYtPnZhbHVlID0gbmd4X3RpbWUoKSArIChnbXQgPyAwIDogbmd4X2dtdG9mZik7CisgICAgICAgIHZ2LT52YWx1ZSA9IHRwLT5zZWMgKyAoZ210ID8gMCA6IHRwLT5nbXRvZmYpOwogCiAgICAgICAgIHZ2LT50ZXh0LmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIE5HWF9USU1FX1RfTEVOKTsKICAgICAgICAgaWYgKHZ2LT50ZXh0LmRhdGEgPT0gTlVMTCkgewpAQCAtMTk5NCwxMiArMTk5NywxMiBAQAogICAgIH0KIAogICAgIGlmIChnbXQpIHsKLSAgICAgICAgbmd4X2xpYmNfZ210aW1lKCZ0bSk7CisgICAgICAgIG5neF9saWJjX2dtdGltZSh0cC0+c2VjLCAmdG0pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5neF9saWJjX2xvY2FsdGltZSgmdG0pOworICAgICAgICBuZ3hfbGliY19sb2NhbHRpbWUodHAtPnNlYywgJnRtKTsKICAgICB9CiAKLSAgICB2di0+dmFsdWUgPSBuZ3hfdGltZSgpICsgKGdtdCA/IDAgOiBuZ3hfZ210b2ZmKTsKKyAgICB2di0+dmFsdWUgPSB0cC0+c2VjICsgKGdtdCA/IDAgOiB0cC0+Z210b2ZmKTsKIAogICAgIHZ2LT50ZXh0LmxlbiA9IHN0cmZ0aW1lKGJ1ZiwgTkdYX0hUVFBfU1NJX0RBVEVfTEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIGN0eC0+dGltZWZtdC5kYXRhLCAmdG0pOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2xfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYwppbmRleCBiYjlhNTVmLi4wOWJmNjNkIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzbF9tb2R1bGUuYwpAQCAtMTcsNiArMTcsMTUgQEAKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9zc2xfbWVyZ2Vfc3J2X2NvbmYobmd4X2NvbmZfdCAqY2YsCiAgICAgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7CiAKKyNpZiAhZGVmaW5lZCAoU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSkKKworc3RhdGljIGNoYXIgKm5neF9odHRwX3NzbF9ub3N1cHBvcnRlZChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAorICAgIHZvaWQgKmNvbmYpOworCitzdGF0aWMgY2hhciAgbmd4X2h0dHBfc3NsX29wZW5zc2wwOTdbXSA9ICJPcGVuU1NMIDAuOS43IGFuZCBoaWdoZXIiOworCisjZW5kaWYKKwogCiBzdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaHR0cF9zc2xfcHJvdG9jb2xzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJTU0x2MiIpLCBOR1hfU1NMX1NTTHYyIH0sCkBAIC0yNiw2ICszNSw3IEBACiB9OwogCiAKKwogc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX3NzbF9jb21tYW5kc1tdID0gewogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2wiKSwKQEAgLTUwLDE0ICs2MCwxNCBAQAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2xfcHJvdG9jb2xzIiksCi0gICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCiAgICAgICBuZ3hfY29uZl9zZXRfYml0bWFza19zbG90LAogICAgICAgTkdYX0hUVFBfU1JWX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfc3NsX3Nydl9jb25mX3QsIHByb3RvY29scyksCiAgICAgICAmbmd4X2h0dHBfc3NsX3Byb3RvY29scyB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2xfY2lwaGVycyIpLAotICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GXzFNT1JFLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAogICAgICAgTkdYX0hUVFBfU1JWX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfc3NsX3Nydl9jb25mX3QsIGNpcGhlcnMpLApAQCAtNjUsMTAgKzc1LDE0IEBACiAKICAgICB7IG5neF9zdHJpbmcoInNzbF9wcmVmZXJfc2VydmVyX2NpcGhlcnMiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfQ09ORl9GTEFHLAorI2lmZGVmIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9TUlZfQ09ORl9PRkZTRVQsCiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9zc2xfc3J2X2NvbmZfdCwgcHJlZmVyX3NlcnZlcl9jaXBoZXJzKSwKICAgICAgIE5VTEwgfSwKKyNlbHNlCisgICAgICBuZ3hfaHR0cF9zc2xfbm9zdXBwb3J0ZWQsIDAsIDAsIG5neF9odHRwX3NzbF9vcGVuc3NsMDk3IH0sCisjZW5kaWYKIAogICAgICAgbmd4X251bGxfY29tbWFuZAogfTsKQEAgLTE0NCw2ICsxNTgsOCBAQAogICAgIG5neF9odHRwX3NzbF9zcnZfY29uZl90ICpwcmV2ID0gcGFyZW50OwogICAgIG5neF9odHRwX3NzbF9zcnZfY29uZl90ICpjb25mID0gY2hpbGQ7CiAKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICpjbG47CisKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5lbmFibGUsIHByZXYtPmVuYWJsZSwgMCk7CiAKICAgICBpZiAoY29uZi0+ZW5hYmxlID09IDApIHsKQEAgLTE3MiwyOSArMTg4LDM3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAobmd4X3Bvb2xfY2xlYW51cF9hZGQoY2YtPnBvb2wsIG5neF9zc2xfY2xlYW51cF9jdHgsICZjb25mLT5zc2wpID09IE5VTEwpCi0gICAgeworICAgIGNsbiA9IG5neF9wb29sX2NsZWFudXBfYWRkKGNmLT5wb29sLCAwKTsKKyAgICBpZiAoY2xuID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGlmIChuZ3hfc3NsX2NlcnRpZmljYXRlKCZjb25mLT5zc2wsIGNvbmYtPmNlcnRpZmljYXRlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+Y2VydGlmaWNhdGVfa2V5LmRhdGEpICE9IE5HWF9PSykKKyAgICBjbG4tPmhhbmRsZXIgPSBuZ3hfc3NsX2NsZWFudXBfY3R4OworICAgIGNsbi0+ZGF0YSA9ICZjb25mLT5zc2w7CisKKyAgICBpZiAobmd4X3NzbF9jZXJ0aWZpY2F0ZShjZiwgJmNvbmYtPnNzbCwgJmNvbmYtPmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25mLT5jZXJ0aWZpY2F0ZV9rZXkpICE9IE5HWF9PSykKICAgICB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKICAgICBpZiAoU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoY29uZi0+c3NsLmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgY29uZi0+Y2lwaGVycy5kYXRhKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKSBjb25mLT5jaXBoZXJzLmRhdGEpCisgICAgICAgID09IDApCiAgICAgewogICAgICAgICBuZ3hfc3NsX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KFwiJVZcIikgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAmY29uZi0+Y2lwaGVycyk7CiAgICAgfQogCisjaWZkZWYgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQorCiAgICAgaWYgKGNvbmYtPnByZWZlcl9zZXJ2ZXJfY2lwaGVycykgewogICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbC5jdHgsIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpOwogICAgIH0KIAorI2VuZGlmCisKICAgICAvKiBhIHRlbXBvcmFyeSA1MTItYml0IFJTQSBrZXkgaXMgcmVxdWlyZWQgZm9yIGV4cG9ydCB2ZXJzaW9ucyBvZiBNU0lFICovCiAgICAgaWYgKG5neF9zc2xfZ2VuZXJhdGVfcnNhNTEyX2tleSgmY29uZi0+c3NsKSAhPSBOR1hfT0spIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwpAQCAtMjA3LDMgKzIzMSwxOCBAQAogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQorCisKKyNpZiAhZGVmaW5lZCAoU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSkKKworc3RhdGljIGNoYXIgKgorbmd4X2h0dHBfc3NsX25vc3VwcG9ydGVkKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCit7CisgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiXCIlVlwiIGRpcmVjdGl2ZSBpcyBhdmFpbGFibGUgb25seSBpbiAlcywiLAorICAgICAgICAgICAgICAgICAgICAgICAmY21kLT5uYW1lLCBjbWQtPnBvc3QpOworCisgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKaW5kZXggYzVkNWFmOC4uMGU5OTVmNSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0aWNfbW9kdWxlLmMKQEAgLTgyLDcgKzgyLDggQEAKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOwogICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgIG91dDsKICAgICBuZ3hfZmlsZV9pbmZvX3QgICAgICAgICAgICBmaTsKLSAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgICpjbG47CisgICAgbmd4X3Bvb2xfY2xlYW51cF90ICAgICAgICAqY2xuOworICAgIG5neF9wb29sX2NsZWFudXBfZmlsZV90ICAgKmNsbmY7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKIAogICAgIGlmIChyLT51cmkuZGF0YVtyLT51cmkubGVuIC0gMV0gPT0gJy8nKSB7CkBAIC0xMTksNiArMTIwLDExIEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBsb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImh0dHAgZmlsZW5hbWU6IFwiJXNcIiIsIHBhdGguZGF0YSk7CiAKKyAgICBjbG4gPSBuZ3hfcG9vbF9jbGVhbnVwX2FkZChyLT5wb29sLCBzaXplb2Yobmd4X3Bvb2xfY2xlYW51cF9maWxlX3QpKTsKKyAgICBpZiAoY2xuID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKICAgICBmZCA9IG5neF9vcGVuX2ZpbGUocGF0aC5kYXRhLCBOR1hfRklMRV9SRE9OTFksIE5HWF9GSUxFX09QRU4pOwogCiAgICAgaWYgKGZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKQEAgLTIyMywxOCArMjI5LDEyIEBACiAKICAgICBsb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHJlc3BvbnNlIHRvIGNsaWVudCI7CiAKLSAgICBjbG4gPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCkpOwotICAgIGlmIChjbG4gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwotICAgIH0KKyAgICBjbG4tPmhhbmRsZXIgPSBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGU7CisgICAgY2xuZiA9IGNsbi0+ZGF0YTsKIAotICAgIGNsbi0+ZmQgPSBmZDsKLSAgICBjbG4tPm5hbWUgPSBwYXRoLmRhdGE7Ci0gICAgY2xuLT5sb2cgPSByLT5wb29sLT5sb2c7Ci0KLSAgICBpZiAobmd4X3Bvb2xfY2xlYW51cF9hZGQoci0+cG9vbCwgbmd4X3Bvb2xfY2xlYW51cF9maWxlLCBjbG4pID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICB9CisgICAgY2xuZi0+ZmQgPSBmZDsKKyAgICBjbG5mLT5uYW1lID0gcGF0aC5kYXRhOworICAgIGNsbmYtPmxvZyA9IHItPnBvb2wtPmxvZzsKIAogICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX09LOwogICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSBuZ3hfZmlsZV9zaXplKCZmaSk7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCBkY2IzOTU2Li44NjdiZjMxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTY1OSw2ICs2NTksOCBAQAogI2VuZGlmCiAKICAgICAgICAgICAgIGxzLT5iYWNrbG9nID0gaW5fYWRkclthXS5jb25mLmJhY2tsb2c7CisgICAgICAgICAgICBscy0+cmN2YnVmID0gaW5fYWRkclthXS5jb25mLnJjdmJ1ZjsKKyAgICAgICAgICAgIGxzLT5zbmRidWYgPSBpbl9hZGRyW2FdLmNvbmYuc25kYnVmOwogCiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKICAgICAgICAgICAgIGxzLT5hY2NlcHRfZmlsdGVyID0gaW5fYWRkclthXS5jb25mLmFjY2VwdF9maWx0ZXI7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCA0YzZjZmMwLi4yMTIyNGQzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTE1MiwxMSArMTUyLDcgQEAKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygibGlzdGVuIiksCi0jaWYgMAotICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GXzFNT1JFLAotI2Vsc2UKICAgICAgIE5HWF9IVFRQX1NSVl9DT05GfE5HWF9DT05GXzFNT1JFLAotI2VuZGlmCiAgICAgICBuZ3hfaHR0cF9jb3JlX2xpc3RlbiwKICAgICAgIE5HWF9IVFRQX1NSVl9DT05GX09GRlNFVCwKICAgICAgIDAsCkBAIC0yMDEwLDcgKzIwMDYsNyBAQAogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqc2NmID0gY29uZjsKIAogICAgIGNoYXIgICAgICAgICAgICAgICAgICplcnI7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgKnZhbHVlOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICp2YWx1ZSwgc2l6ZTsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgbjsKICAgICBzdHJ1Y3QgaG9zdGVudCAgICAgICAqaDsKICAgICBuZ3hfaHR0cF9saXN0ZW5fdCAgICAqbHM7CkBAIC0yMDUwLDYgKzIwNDYsOCBAQAogICAgIGxzLT5maWxlX25hbWUgPSBjZi0+Y29uZl9maWxlLT5maWxlLm5hbWU7CiAgICAgbHMtPmxpbmUgPSBjZi0+Y29uZl9maWxlLT5saW5lOwogICAgIGxzLT5jb25mLmJhY2tsb2cgPSAtMTsKKyAgICBscy0+Y29uZi5yY3ZidWYgPSAtMTsKKyAgICBscy0+Y29uZi5zbmRidWYgPSAtMTsKIAogICAgIGlmIChpbmV0X3Vwc3RyZWFtLmhvc3QubGVuKSB7CiAgICAgICAgIGluZXRfdXBzdHJlYW0uaG9zdC5kYXRhW2luZXRfdXBzdHJlYW0uaG9zdC5sZW5dID0gJ1wwJzsKQEAgLTIxMDAsOCArMjA5OCw4IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZVtuXS5kYXRhLCAiYmw9IiwgMykgPT0gMCkgewotICAgICAgICAgICAgbHMtPmNvbmYuYmFja2xvZyA9IG5neF9hdG9pKHZhbHVlW25dLmRhdGEgKyAzLCB2YWx1ZVtuXS5sZW4gLSAzKTsKKyAgICAgICAgaWYgKG5neF9zdHJuY21wKHZhbHVlW25dLmRhdGEsICJiYWNrbG9nPSIsIDgpID09IDApIHsKKyAgICAgICAgICAgIGxzLT5jb25mLmJhY2tsb2cgPSBuZ3hfYXRvaSh2YWx1ZVtuXS5kYXRhICsgOCwgdmFsdWVbbl0ubGVuIC0gOCk7CiAgICAgICAgICAgICBscy0+Y29uZi5iaW5kID0gMTsKIAogICAgICAgICAgICAgaWYgKGxzLT5jb25mLmJhY2tsb2cgPT0gTkdYX0VSUk9SIHx8IGxzLT5jb25mLmJhY2tsb2cgPT0gMCkgewpAQCAtMjExMyw5ICsyMTExLDQxIEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZVtuXS5kYXRhLCAiYWY9IiwgMykgPT0gMCkgeworICAgICAgICBpZiAobmd4X3N0cm5jbXAodmFsdWVbbl0uZGF0YSwgInJjdmJ1Zj0iLCA3KSA9PSAwKSB7CisgICAgICAgICAgICBzaXplLmxlbiA9IHZhbHVlW25dLmxlbiAtIDc7CisgICAgICAgICAgICBzaXplLmRhdGEgPSB2YWx1ZVtuXS5kYXRhICsgNzsKKworICAgICAgICAgICAgbHMtPmNvbmYucmN2YnVmID0gbmd4X3BhcnNlX3NpemUoJnNpemUpOworICAgICAgICAgICAgbHMtPmNvbmYuYmluZCA9IDE7CisKKyAgICAgICAgICAgIGlmIChscy0+Y29uZi5yY3ZidWYgPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCByY3ZidWYgXCIlVlwiIiwgJnZhbHVlW25dKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5neF9zdHJuY21wKHZhbHVlW25dLmRhdGEsICJzbmRidWY9IiwgNykgPT0gMCkgeworICAgICAgICAgICAgc2l6ZS5sZW4gPSB2YWx1ZVtuXS5sZW4gLSA3OworICAgICAgICAgICAgc2l6ZS5kYXRhID0gdmFsdWVbbl0uZGF0YSArIDc7CisKKyAgICAgICAgICAgIGxzLT5jb25mLnNuZGJ1ZiA9IG5neF9wYXJzZV9zaXplKCZzaXplKTsKKyAgICAgICAgICAgIGxzLT5jb25mLmJpbmQgPSAxOworCisgICAgICAgICAgICBpZiAobHMtPmNvbmYuc25kYnVmID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgc25kYnVmIFwiJVZcIiIsICZ2YWx1ZVtuXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfc3RybmNtcCh2YWx1ZVtuXS5kYXRhLCAiYWNjZXB0X2ZpbHRlcj0iLCAxNCkgPT0gMCkgewogI2lmIChOR1hfSEFWRV9ERUZFUlJFRF9BQ0NFUFQgJiYgZGVmaW5lZCBTT19BQ0NFUFRGSUxURVIpCi0gICAgICAgICAgICBscy0+Y29uZi5hY2NlcHRfZmlsdGVyID0gKGNoYXIgKikgJnZhbHVlW25dLmRhdGFbM107CisgICAgICAgICAgICBscy0+Y29uZi5hY2NlcHRfZmlsdGVyID0gKGNoYXIgKikgJnZhbHVlW25dLmRhdGFbMTRdOwogICAgICAgICAgICAgbHMtPmNvbmYuYmluZCA9IDE7CiAjZWxzZQogICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggNGRlODAwNy4uY2Y0MTVlZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xOCw2ICsxOCw4IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgYmluZDoxOwogCiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYmFja2xvZzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICByY3ZidWY7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgc25kYnVmOwogCiAjaWYgKE5HWF9IQVZFX0RFRkVSUkVEX0FDQ0VQVCAmJiBkZWZpbmVkIFNPX0FDQ0VQVEZJTFRFUikKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICphY2NlcHRfZmlsdGVyOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX21vZHVsZS5jCmluZGV4IDNjYWEyZTkuLjYxN2Q0NmEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2xvZ19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMKQEAgLTMwOSwxMSArMzA5LDExIEBACiBzdGF0aWMgdV9jaGFyICoKIG5neF9odHRwX2xvZ19tc2VjKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsIG5neF9odHRwX2xvZ19vcF90ICpvcCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CisgICAgbmd4X3RpbWVfdCAgKnRwOwogCi0gICAgbmd4X2dldHRpbWVvZmRheSgmdHYpOworICAgIHRwID0gbmd4X3RpbWVvZmRheSgpOwogCi0gICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiVsLiUwM2wiLCB0di50dl9zZWMsIHR2LnR2X3VzZWMgLyAxMDAwKTsKKyAgICByZXR1cm4gbmd4X3NwcmludGYoYnVmLCAiJVQuJTAzTSIsIHRwLT5zZWMsIHRwLT5tc2VjKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggMmZiMTc2NC4uOTA3MWFlNSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMTYzLDE1ICsxNjMsOCBAQAogICAgICAgICAvKiB0aGUgZGVmZXJyZWQgYWNjZXB0KCksIHJ0c2lnLCBhaW8sIGlvY3AgKi8KIAogICAgICAgICBpZiAobmd4X2FjY2VwdF9tdXRleCkgewotICAgICAgICAgICAgaWYgKG5neF9tdXRleF9sb2NrKG5neF9wb3N0ZWRfZXZlbnRzX211dGV4KSA9PSBOR1hfRVJST1IpIHsKIAotICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChyZXYpOyAKLQotICAgICAgICAgICAgbmd4X211dGV4X3VubG9jayhuZ3hfcG9zdGVkX2V2ZW50c19tdXRleCk7CisgICAgICAgICAgICBuZ3hfcG9zdF9ldmVudChyZXYsICZuZ3hfcG9zdGVkX2V2ZW50cyk7CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKICAgICAgICAgICAgIG5neF9hdG9taWNfZmV0Y2hfYWRkKG5neF9zdGF0X3JlYWRpbmcsIDEpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKaW5kZXggYTFjNmEyZS4uNmQxYmQ0OSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCkBAIC02Niw2ICs2Niw4IEBACiAgICAgdWludHB0cl90IGRhdGEpOwogc3RhdGljIHVfY2hhciAqbmd4X2h0dHBfdXBzdHJlYW1fbG9nX3N0YXR1cyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgdV9jaGFyICpidWYsIG5neF9odHRwX2xvZ19vcF90ICpvcCk7CitzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF91cHN0cmVhbV9sb2dfcmVzcG9uc2VfdGltZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgdV9jaGFyICpidWYsIG5neF9odHRwX2xvZ19vcF90ICpvcCk7CiAKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX3Vwc3RyZWFtX2xvZ19lcnJvcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqYnVmLAogICAgIHNpemVfdCBsZW4pOwpAQCAtMjA0LDYgKzIwNiw4IEBACiAgICAgeyBuZ3hfc3RyaW5nKCJ1cHN0cmVhbV9zdGF0dXMiKSwgMCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9sb2dfc3RhdHVzX2dldGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9sb2dfc3RhdHVzIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJ1cHN0cmVhbV9yZXNwb25zZV90aW1lIiksIE5HWF9USU1FX1RfTEVOICsgNCwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9sb2dfcmVzcG9uc2VfdGltZSB9LAogICAgIHsgbmd4X251bGxfc3RyaW5nLCAwLCBOVUxMLCBOVUxMLCBOVUxMIH0KIH07CiAKQEAgLTIxNyw2ICsyMjEsNyBAQAogdm9pZAogbmd4X2h0dHBfdXBzdHJlYW1faW5pdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7CisgICAgbmd4X3RpbWVfdCAgICAgICAgICAgICAgICAqdHA7CiAgICAgbmd4X2Nvbm5lY3Rpb25fdCAgICAgICAgICAqYzsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAgICAgICp1OwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CkBAIC0yODYsNiArMjkxLDEwIEBACiAKICAgICBuZ3hfbWVtemVybyh1LT5zdGF0ZSwgc2l6ZW9mKG5neF9odHRwX3Vwc3RyZWFtX3N0YXRlX3QpKTsKIAorICAgIHRwID0gbmd4X3RpbWVvZmRheSgpOworCisgICAgdS0+c3RhdGUtPnJlc3BvbnNlX3RpbWUgPSB0cC0+c2VjICogMTAwMCArIHRwLT5tc2VjOworCiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fY29ubmVjdChyLCB1KTsKIH0KIApAQCAtOTc4LDYgKzk4Nyw4IEBACiAgICAgbmd4X2xpc3RfcGFydF90ICAgICAgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAqaDsKICAgICBuZ3hfZXZlbnRfcGlwZV90ICAgICAgICAgICAgICAgKnA7CisgICAgbmd4X3Bvb2xfY2xlYW51cF90ICAgICAgICAgICAgICpjbDsKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGVfdCAgICAgICAgKmNsZjsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAgICAgKmNsY2Y7CiAgICAgbmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyX3QgICAgICpoaDsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV9tYWluX2NvbmZfdCAgKnVtY2Y7CkBAIC0xMDMzLDYgKzEwNDQsMjAgQEAKIAogICAgIHUtPmhlYWRlcl9zZW50ID0gMTsKIAorICAgIGlmIChyLT5yZXF1ZXN0X2JvZHktPnRlbXBfZmlsZSkgeworICAgICAgICBmb3IgKGNsID0gci0+cG9vbC0+Y2xlYW51cDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChjbC0+aGFuZGxlciA9PSBuZ3hfcG9vbF9jbGVhbnVwX2ZpbGUpIHsKKyAgICAgICAgICAgICAgICBjbGYgPSBjbC0+ZGF0YTsKKworICAgICAgICAgICAgICAgIGlmIChjbGYtPmZkID09IHItPnJlcXVlc3RfYm9keS0+dGVtcF9maWxlLT5maWxlLmZkKSB7CisgICAgICAgICAgICAgICAgICAgIGNsLT5oYW5kbGVyKGNsZik7CisgICAgICAgICAgICAgICAgICAgIGNsLT5oYW5kbGVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLyogVE9ETzogcHJlYWxsb2NhdGUgZXZlbnRfcGlwZSBidWZzLCBsb29rICJDb250ZW50LUxlbmd0aCIgKi8KIAogI2lmIDAKQEAgLTE0MDQsOSArMTQyOSwxNyBAQAogbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAqdSwgbmd4X2ludF90IHJjKQogeworICAgIG5neF90aW1lX3QgICp0cDsKKwogICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJmaW5hbGl6ZSBodHRwIHVwc3RyZWFtIHJlcXVlc3Q6ICVpIiwgcmMpOwogCisgICAgaWYgKHUtPnN0YXRlLT5yZXNwb25zZV90aW1lKSB7CisgICAgICAgIHRwID0gbmd4X3RpbWVvZmRheSgpOworICAgICAgICB1LT5zdGF0ZS0+cmVzcG9uc2VfdGltZSA9IHRwLT5zZWMgKiAxMDAwICsgdHAtPm1zZWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHUtPnN0YXRlLT5yZXNwb25zZV90aW1lOworICAgIH0KKwogICAgIHUtPmZpbmFsaXplX3JlcXVlc3QociwgcmMpOwogCiAgICAgaWYgKHUtPnBlZXIuY29ubmVjdGlvbikgewpAQCAtMTQxOSw4ICsxNDUyLDcgQEAKIAogICAgIHUtPnBlZXIuY29ubmVjdGlvbiA9IE5VTEw7CiAKLSAgICBpZiAodS0+aGVhZGVyX3NlbnQKLSAgICAgICAgJiYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+PSBOR1hfSFRUUF9TUEVDSUFMX1JFU1BPTlNFKSkKKyAgICBpZiAodS0+aGVhZGVyX3NlbnQgJiYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+PSBOR1hfSFRUUF9TUEVDSUFMX1JFU1BPTlNFKSkKICAgICB7CiAgICAgICAgIHJjID0gMDsKICAgICB9CkBAIC0xNzgzLDYgKzE4MTUsNDQgQEAKIAogCiBzdGF0aWMgdV9jaGFyICoKK25neF9odHRwX3Vwc3RyZWFtX2xvZ19yZXNwb25zZV90aW1lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCisgICAgbmd4X2h0dHBfbG9nX29wX3QgKm9wKQoreworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX3Vwc3RyZWFtX3QgICAgICAgICp1OworICAgIG5neF9odHRwX3Vwc3RyZWFtX3N0YXRlX3QgICpzdGF0ZTsKKworICAgIHUgPSByLT51cHN0cmVhbTsKKworICAgIGlmICh1ID09IE5VTEwpIHsKKyAgICAgICAgKmJ1ZiA9ICctJzsKKyAgICAgICAgcmV0dXJuIGJ1ZiArIDE7CisgICAgfQorCisgICAgaSA9IDA7CisgICAgc3RhdGUgPSB1LT5zdGF0ZXMuZWx0czsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBpZiAoc3RhdGVbaV0uc3RhdHVzID09IDApIHsKKyAgICAgICAgICAgICpidWYrKyA9ICctJzsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmID0gbmd4X3NwcmludGYoYnVmLCAiJWQuJTAzZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbaV0ucmVzcG9uc2VfdGltZSAvIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbaV0ucmVzcG9uc2VfdGltZSAlIDEwMDApOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCsraSA9PSB1LT5zdGF0ZXMubmVsdHMpIHsKKyAgICAgICAgICAgIHJldHVybiBidWY7CisgICAgICAgIH0KKworICAgICAgICAqYnVmKysgPSAnLCc7CisgICAgICAgICpidWYrKyA9ICcgJzsKKyAgICB9Cit9CisKKworc3RhdGljIHVfY2hhciAqCiBuZ3hfaHR0cF91cHN0cmVhbV9sb2dfZXJyb3Iobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKICAgICB1X2NoYXIgICAgICAgICAgICAgICAgICpwOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaCBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKaW5kZXggZGQ3YjNjMS4uNjM3YTM4ZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCkBAIC0yOSwxMiArMjksMTIgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgdGltZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBibF90aW1lOworICAgIG5neF9tc2VjX3QgICAgICAgICAgICAgICAgICAgICAgYmxfdGltZTsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgIGJsX3N0YXRlOwogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgdGltZV90ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lOwotICAgIAorICAgIG5neF9tc2VjX3QgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VfdGltZTsKKwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAqcGVlcjsKIH0gbmd4X2h0dHBfdXBzdHJlYW1fc3RhdGVfdDsKIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKaW5kZXggOWQ2NjI5OC4uZDAzN2FkOCAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCkBAIC00MTEsNiArNDExLDkgQEAKICAgICB9CiAKICAgICBscy0+YmFja2xvZyA9IC0xOworICAgIGxzLT5yY3ZidWYgPSAtMTsKKyAgICBscy0+c25kYnVmID0gLTE7CisKICAgICBscy0+YWRkcl9udG9wID0gMTsKICAgICBscy0+aGFuZGxlciA9IG5neF9pbWFwX2luaXRfY29ubmVjdGlvbjsKICAgICBscy0+cG9vbF9zaXplID0gMjU2OwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jCmluZGV4IGJlNmZjYTkuLmQ2NjNlODggMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMKQEAgLTE3LDYgKzE3LDE1IEBACiBzdGF0aWMgdm9pZCAqbmd4X2ltYXBfc3NsX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaW1hcF9zc2xfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCk7CiAKKyNpZiAhZGVmaW5lZCAoU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSkKKworc3RhdGljIGNoYXIgKm5neF9pbWFwX3NzbF9ub3N1cHBvcnRlZChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAorICAgIHZvaWQgKmNvbmYpOworCitzdGF0aWMgY2hhciAgbmd4X2ltYXBfc3NsX29wZW5zc2wwOTdbXSA9ICJPcGVuU1NMIDAuOS43IGFuZCBoaWdoZXIiOworCisjZW5kaWYKKwogCiBzdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaW1hcF9zc2xfcHJvdG9jb2xzW10gPSB7IAogICAgIHsgbmd4X3N0cmluZygiU1NMdjIiKSwgTkdYX1NTTF9TU0x2MiB9LApAQCAtNTAsNyArNTksNyBAQAogICAgICAgTlVMTCB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2xfcHJvdG9jb2xzIiksCi0gICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCiAgICAgICBuZ3hfY29uZl9zZXRfYml0bWFza19zbG90LAogICAgICAgTkdYX0lNQVBfU1JWX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2ltYXBfc3NsX2NvbmZfdCwgcHJvdG9jb2xzKSwKQEAgLTY1LDEwICs3NCwxNSBAQAogCiAgICAgeyBuZ3hfc3RyaW5nKCJzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzIiksCiAgICAgICBOR1hfSU1BUF9NQUlOX0NPTkZ8TkdYX0lNQVBfU1JWX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyNpZmRlZiBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFCiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LAogICAgICAgTkdYX0lNQVBfU1JWX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2ltYXBfc3NsX2NvbmZfdCwgcHJlZmVyX3NlcnZlcl9jaXBoZXJzKSwKICAgICAgIE5VTEwgfSwKKyNlbHNlCisgICAgICBuZ3hfaW1hcF9zc2xfbm9zdXBwb3J0ZWQsIDAsIDAsIG5neF9pbWFwX3NzbF9vcGVuc3NsMDk3IH0sCisjZW5kaWYKKwogCiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwpAQCAtMTM4LDYgKzE1Miw4IEBACiAgICAgbmd4X2ltYXBfc3NsX2NvbmZfdCAqcHJldiA9IHBhcmVudDsKICAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICpjb25mID0gY2hpbGQ7CiAKKyAgICBuZ3hfcG9vbF9jbGVhbnVwX3QgICpjbG47CisKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5lbmFibGUsIHByZXYtPmVuYWJsZSwgMCk7CiAKICAgICBpZiAoY29uZi0+ZW5hYmxlID09IDApIHsKQEAgLTE2NiwyMCArMTgyLDI1IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAobmd4X3Bvb2xfY2xlYW51cF9hZGQoY2YtPnBvb2wsIG5neF9zc2xfY2xlYW51cF9jdHgsICZjb25mLT5zc2wpID09IE5VTEwpCi0gICAgeworICAgIGNsbiA9IG5neF9wb29sX2NsZWFudXBfYWRkKGNmLT5wb29sLCAwKTsKKyAgICBpZiAoY2xuID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGlmIChuZ3hfc3NsX2NlcnRpZmljYXRlKCZjb25mLT5zc2wsIGNvbmYtPmNlcnRpZmljYXRlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZi0+Y2VydGlmaWNhdGVfa2V5LmRhdGEpICE9IE5HWF9PSykKKyAgICBjbG4tPmhhbmRsZXIgPSBuZ3hfc3NsX2NsZWFudXBfY3R4OworICAgIGNsbi0+ZGF0YSA9ICZjb25mLT5zc2w7CisKKyAgICBpZiAobmd4X3NzbF9jZXJ0aWZpY2F0ZShjZiwgJmNvbmYtPnNzbCwgJmNvbmYtPmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25mLT5jZXJ0aWZpY2F0ZV9rZXkpCisgICAgICAgICE9IE5HWF9PSykKICAgICB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKICAgICBpZiAoY29uZi0+Y2lwaGVycy5sZW4pIHsKICAgICAgICAgaWYgKFNTTF9DVFhfc2V0X2NpcGhlcl9saXN0KGNvbmYtPnNzbC5jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIGNvbmYtPmNpcGhlcnMuZGF0YSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKikgY29uZi0+Y2lwaGVycy5kYXRhKQorICAgICAgICAgICAgPT0gMCkKICAgICAgICAgewogICAgICAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0VNRVJHLCBjZi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QoXCIlVlwiKSBmYWlsZWQiLApAQCAtMTg3LDYgKzIwOCwxNCBAQAogICAgICAgICB9CiAgICAgfQogCisjaWZkZWYgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQorCisgICAgaWYgKGNvbmYtPnByZWZlcl9zZXJ2ZXJfY2lwaGVycykgeworICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKGNvbmYtPnNzbC5jdHgsIFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpOworICAgIH0KKworI2VuZGlmCisKICAgICBpZiAobmd4X3NzbF9nZW5lcmF0ZV9yc2E1MTJfa2V5KCZjb25mLT5zc2wpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQpAQCAtMTk4LDMgKzIyNywxOCBAQAogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQorCisgICAgCisjaWYgIWRlZmluZWQgKFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpCisgICAgCitzdGF0aWMgY2hhciAqCituZ3hfaW1hcF9zc2xfbm9zdXBwb3J0ZWQobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKK3sgICAKKyAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgZGlyZWN0aXZlIGlzIGF2YWlsYWJsZSBvbmx5IGluICVzLCIsCisgICAgICAgICAgICAgICAgICAgICAgICZjbWQtPm5hbWUsIGNtZC0+cG9zdCk7CisKKyAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oIGIvc3JjL29zL3VuaXgvbmd4X2F0b21pYy5oCmluZGV4IDU4NTYxMDMuLjNkZmNlNzQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9hdG9taWMuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfYXRvbWljLmgKQEAgLTMzLDYgKzMzLDggQEAKIAogLyogdGhlIGNvZGUgaW4gc3JjL29zL3VuaXgvbmd4X3N1bnByb194ODYuaWwgKi8KIAorI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICAgICAgX19hc20gKCIudm9sYXRpbGUiKTsgX19hc20gKCIubm9udm9sYXRpbGUiKQorCiAKICNlbHNlIC8qICggX19HTlVDX18gfHwgX19JTlRFTF9DT01QSUxFUiApICovCiAKQEAgLTY0LDYgKzY2LDggQEAKIAogLyogdGhlIGNvZGUgaW4gc3JjL29zL3VuaXgvbmd4X3N1bnByb19hbWQ2NC5pbCAqLwogCisjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpICAgICAgICBfX2FzbSAoIi52b2xhdGlsZSIpOyBfX2FzbSAoIi5ub252b2xhdGlsZSIpCisKIAogI2Vsc2UgLyogKCBfX0dOVUNfXyB8fCBfX0lOVEVMX0NPTVBJTEVSICkgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYyBiL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKaW5kZXggMDUxZjQ2Ni4uYzdmMTI5MyAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCkBAIC0yMDcsNiArMjA3LDkgQEAKICAgICB3ZXYtPm93bl9sb2NrID0gJmMtPmxvY2s7CiAjZW5kaWYKIAorICAgIHJldi0+Y2hhbm5lbCA9IDE7CisgICAgd2V2LT5jaGFubmVsID0gMTsKKwogICAgIGV2ID0gKGV2ZW50ID09IE5HWF9SRUFEX0VWRU5UKSA/IHJldiA6IHdldjsKIAogICAgIGV2LT5oYW5kbGVyID0gaGFuZGxlcjsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5jIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKaW5kZXggYjdlODAzYi4uM2M1NTBmYiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmMKQEAgLTUxLDcgKzUxLDggQEAKIHN0YXRpYyBpbnQgICBlcnJubzA7ICAgLyogdGhlIG1haW4gdGhyZWFkJ3MgZXJybm8gKi8KIHN0YXRpYyBpbnQgICplcnJub3M7ICAgLyogdGhlIHRocmVhZHMgZXJybm8ncyBhcnJheSAqLwogCi1pbnQgKl9fZXJyb3IoKQoraW50ICoKK19fZXJyb3IoKQogewogICAgIGludCAgdGlkOwogCkBAIC03Miw3ICs3Myw4IEBACiAKIGV4dGVybiBpbnQgIF9faXN0aHJlYWRlZDsKIAotdm9pZCBfc3BpbmxvY2sobmd4X2F0b21pY190ICpsb2NrKQordm9pZAorX3NwaW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaykKIHsKICAgICBuZ3hfaW50X3QgIHRyaWVzOwogCkBAIC0xMDcsNyArMTA5LDggQEAKIAogI2lmbmRlZiBfc3BpbnVubG9jawogCi12b2lkIF9zcGludW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaykKK3ZvaWQKK19zcGludW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaykKIHsKICAgICAqbG9jayA9IDA7CiB9CkBAIC0xMTUsOCArMTE4LDkgQEAKICNlbmRpZgogCiAKLW5neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpCituZ3hfZXJyX3QKK25neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLCBuZ3hfdGhyZWFkX3ZhbHVlX3QgKCpmdW5jKSh2b2lkICphcmcpLAorICAgIHZvaWQgKmFyZywgbmd4X2xvZ190ICpsb2cpCiB7CiAgICAgbmd4X3BpZF90ICAgaWQ7CiAgICAgbmd4X2Vycl90ICAgZXJyOwpAQCAtMTc0LDcgKzE3OCw4IEBACiB9CiAKIAotbmd4X2ludF90IG5neF9pbml0X3RocmVhZHMoaW50IG4sIHNpemVfdCBzaXplLCBuZ3hfY3ljbGVfdCAqY3ljbGUpCituZ3hfaW50X3QKK25neF9pbml0X3RocmVhZHMoaW50IG4sIHNpemVfdCBzaXplLCBuZ3hfY3ljbGVfdCAqY3ljbGUpCiB7CiAgICAgY2hhciAgICAgICAgICAgICAgKnJlZF96b25lLCAqem9uZTsKICAgICBzaXplX3QgICAgICAgICAgICAgbGVuOwpAQCAtMjY0LDcgKzI2OSw4IEBACiB9CiAKIAotbmd4X3RpZF90IG5neF90aHJlYWRfc2VsZigpCituZ3hfdGlkX3QKK25neF90aHJlYWRfc2VsZigpCiB7CiAgICAgbmd4X2ludF90ICB0aWQ7CiAKQEAgLTI3OCw3ICsyODQsOCBAQAogfQogCiAKLW5neF9lcnJfdCBuZ3hfdGhyZWFkX2tleV9jcmVhdGUobmd4X3Rsc19rZXlfdCAqa2V5KQorbmd4X2Vycl90CituZ3hfdGhyZWFkX2tleV9jcmVhdGUobmd4X3Rsc19rZXlfdCAqa2V5KQogewogICAgIGlmIChua2V5cyA+PSBOR1hfVEhSRUFEX0tFWVNfTUFYKSB7CiAgICAgICAgIHJldHVybiBOR1hfRU5PTUVNOwpAQCAtMjkwLDcgKzI5Nyw4IEBACiB9CiAKIAotbmd4X2Vycl90IG5neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90IGtleSwgdm9pZCAqdmFsdWUpCituZ3hfZXJyX3QKK25neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgaWYgKGtleSA+PSBOR1hfVEhSRUFEX0tFWVNfTUFYKSB7CiAgICAgICAgIHJldHVybiBOR1hfRUlOVkFMOwpAQCAtMzAxLDcgKzMwOSw4IEBACiB9CiAKIAotbmd4X211dGV4X3QgKm5neF9tdXRleF9pbml0KG5neF9sb2dfdCAqbG9nLCBuZ3hfdWludF90IGZsYWdzKQorbmd4X211dGV4X3QgKgorbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpCiB7CiAgICAgbmd4X211dGV4X3QgICptOwogICAgIHVuaW9uIHNlbXVuICAgb3A7CkBAIC0zNDIsNyArMzUxLDggQEAKIH0KIAogCi12b2lkIG5neF9tdXRleF9kZXN0cm95KG5neF9tdXRleF90ICptKQordm9pZAorbmd4X211dGV4X2Rlc3Ryb3kobmd4X211dGV4X3QgKm0pCiB7CiAgICAgaWYgKHNlbWN0bChtLT5zZW1pZCwgMCwgSVBDX1JNSUQpID09IC0xKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBuZ3hfZXJybm8sCkBAIC0zNTMsNyArMzYzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X211dGV4X2RvbG9jayhuZ3hfbXV0ZXhfdCAqbSwgbmd4X2ludF90IHRyeSkKK25neF9pbnRfdAorbmd4X211dGV4X2RvbG9jayhuZ3hfbXV0ZXhfdCAqbSwgbmd4X2ludF90IHRyeSkKIHsKICAgICB1aW50MzJfdCAgICAgICBsb2NrLCBvbGQ7CiAgICAgbmd4X3VpbnRfdCAgICAgdHJpZXM7CkBAIC00MTQsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlRCB0aHJlYWRzIHdhaXQgZm9yIG11dGV4ICVwLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpbGUgb25seSAldWkgdGhyZWFkcyBhcmUgYXZhaWxhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2sgJiB+TkdYX01VVEVYX0xPQ0tfQlVTWSwgbSwgbnRocmVhZHMpOwotICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICAgICAgbmd4X2Fib3J0KCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChuZ3hfYXRvbWljX2NtcF9zZXQoJm0tPmxvY2ssIG9sZCwgbG9jaykpIHsKQEAgLTQzNiw3ICs0NDcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzZW1vcChtLT5zZW1pZCwgJm9wLCAxKSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG0tPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbW9wKCkgZmFpbGVkIHdoaWxlIHdhaXRpbmcgb24gbXV0ZXggJXAiLCBtKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2Fib3J0KCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLApAQCAtNDgzLDEzICs0OTQsMTQgQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X211dGV4X3VubG9jayhuZ3hfbXV0ZXhfdCAqbSkKK3ZvaWQKK25neF9tdXRleF91bmxvY2sobmd4X211dGV4X3QgKm0pCiB7CiAgICAgdWludDMyX3QgICAgICAgbG9jaywgb2xkOwogICAgIHN0cnVjdCBzZW1idWYgIG9wOwogCiAgICAgaWYgKCFuZ3hfdGhyZWFkZWQpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIG9sZCA9IG0tPmxvY2s7CkBAIC00OTcsNyArNTA5LDcgQEAKICAgICBpZiAoIShvbGQgJiBOR1hfTVVURVhfTE9DS19CVVNZKSkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIG0tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAidHJ5aW5nIHRvIHVubG9jayB0aGUgZnJlZSBtdXRleCAlcCIsIG0pOwotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICBuZ3hfYWJvcnQoKTsKICAgICB9CiAKICAgICAvKiBmcmVlIHRoZSBtdXRleCAqLwpAQCAtNTIxLDcgKzUzMyw3IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfTVVURVgsIG0tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIm11dGV4ICVwIGlzIHVubG9ja2VkIiwgbSk7CiAKLSAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8qIGNoZWNrIHdoZXRoZXIgd2UgbmVlZCB0byB3YWtlIHVwIGEgd2FpdGluZyB0aHJlYWQgKi8KQEAgLTU1OCw3ICs1NzAsNyBAQAogICAgICAgICAgICAgaWYgKHNlbW9wKG0tPnNlbWlkLCAmb3AsIDEpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtLT5sb2csIG5neF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW1vcCgpIGZhaWxlZCB3aGlsZSB3YWtpbmcgdXAgb24gbXV0ZXggJXAiLCBtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgICAgIG5neF9hYm9ydCgpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBicmVhazsKQEAgLTU3MCwxMSArNTgyLDEyIEBACiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJtdXRleCAlcCBpcyB1bmxvY2tlZCIsIG0pOwogCi0gICAgcmV0dXJuIE5HWF9PSzsKKyAgICByZXR1cm47CiB9CiAKIAotbmd4X2NvbmRfdCAqbmd4X2NvbmRfaW5pdChuZ3hfbG9nX3QgKmxvZykKK25neF9jb25kX3QgKgorbmd4X2NvbmRfaW5pdChuZ3hfbG9nX3QgKmxvZykKIHsKICAgICBuZ3hfY29uZF90ICAqY3Y7CiAKQEAgLTU5Miw3ICs2MDUsOCBAQAogfQogCiAKLXZvaWQgbmd4X2NvbmRfZGVzdHJveShuZ3hfY29uZF90ICpjdikKK3ZvaWQKK25neF9jb25kX2Rlc3Ryb3kobmd4X2NvbmRfdCAqY3YpCiB7CiAgICAgaWYgKGNsb3NlKGN2LT5rcSkgPT0gLTEpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjdi0+bG9nLCBuZ3hfZXJybm8sCkBAIC02MDMsNyArNjE3LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NvbmRfd2FpdChuZ3hfY29uZF90ICpjdiwgbmd4X211dGV4X3QgKm0pCituZ3hfaW50X3QKK25neF9jb25kX3dhaXQobmd4X2NvbmRfdCAqY3YsIG5neF9tdXRleF90ICptKQogewogICAgIGludCAgICAgICAgICAgICAgbjsKICAgICBuZ3hfZXJyX3QgICAgICAgIGVycjsKQEAgLTY0Nyw5ICs2NjIsNyBAQAogICAgICAgICBjdi0+dGlkID0gbmd4X3RocmVhZF9zZWxmKCk7CiAgICAgfQogCi0gICAgaWYgKG5neF9tdXRleF91bmxvY2sobSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQorICAgIG5neF9tdXRleF91bmxvY2sobSk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0NPUkUsIGN2LT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgImN2ICVwIHdhaXQsIGtxOiVkLCBzaWdubzolZCIsIGN2LCBjdi0+a3EsIGN2LT5zaWdubyk7CkBAIC03MDMsMTUgKzcxNiwxNCBAQAogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdi0+bG9nLCAwLCAiY3YgJXAgaXMgd2FrZWQgdXAiLCBjdik7CiAKLSAgICBpZiAobmd4X211dGV4X2xvY2sobSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7Ci0gICAgfQorICAgIG5neF9tdXRleF9sb2NrKG0pOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NvbmRfc2lnbmFsKG5neF9jb25kX3QgKmN2KQorbmd4X2ludF90CituZ3hfY29uZF9zaWduYWwobmd4X2NvbmRfdCAqY3YpCiB7CiAgICAgbmd4X2Vycl90ICBlcnI7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5oIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKaW5kZXggNzllNzQ4YS4uMjA5NTdhNSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2RfcmZvcmtfdGhyZWFkLmgKQEAgLTU1LDcgKzU1LDggQEAKIGV4dGVybiBzaXplX3QgICBuZ3hfdGhyZWFkX3N0YWNrX3NpemU7CiAKIAotc3RhdGljIG5neF9pbmxpbmUgbmd4X2ludF90IG5neF9nZXR0aWQoKQorc3RhdGljIG5neF9pbmxpbmUgbmd4X2ludF90CituZ3hfZ2V0dGlkKCkKIHsKICAgICBjaGFyICAqc3A7CiAKQEAgLTk3LDcgKzk4LDggQEAKICNkZWZpbmUgbmd4X3RocmVhZF9zZXRfdGxzX24gICAgICJ0aGUgdGxzIGtleSBzZXR0aW5nIgogCiAKLXN0YXRpYyB2b2lkICpuZ3hfdGhyZWFkX2dldF90bHMobmd4X3Rsc19rZXlfdCBrZXkpCitzdGF0aWMgdm9pZCAqCituZ3hfdGhyZWFkX2dldF90bHMobmd4X3Rsc19rZXlfdCBrZXkpCiB7ICAgCiAgICAgaWYgKGtleSA+PSBOR1hfVEhSRUFEX0tFWVNfTUFYKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTA4LDkgKzExMCw5IEBACiAKIAogI2RlZmluZSBuZ3hfbXV0ZXhfdHJ5bG9jayhtKSAgbmd4X211dGV4X2RvbG9jayhtLCAxKQotI2RlZmluZSBuZ3hfbXV0ZXhfbG9jayhtKSAgICAgbmd4X211dGV4X2RvbG9jayhtLCAwKQorI2RlZmluZSBuZ3hfbXV0ZXhfbG9jayhtKSAgICAgKHZvaWQpIG5neF9tdXRleF9kb2xvY2sobSwgMCkKIG5neF9pbnRfdCBuZ3hfbXV0ZXhfZG9sb2NrKG5neF9tdXRleF90ICptLCBuZ3hfaW50X3QgdHJ5KTsKLW5neF9pbnRfdCBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9tdXRleF90ICptKTsKK3ZvaWQgbmd4X211dGV4X3VubG9jayhuZ3hfbXV0ZXhfdCAqbSk7CiAKIAogdHlwZWRlZiBpbnQgKCpuZ3hfcmZvcmtfdGhyZWFkX2Z1bmNfcHQpKHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfYW1kNjQuaAppbmRleCAwN2IyZDUwLi4zNzRlM2I4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmgKQEAgLTcyLDMgKzcyLDYgQEAKIAogICAgIHJldHVybiBhZGQ7CiB9CisKKworI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICAgICBfX2FzbV9fIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19wcGMuaCBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oCmluZGV4IDhmYzNiYzAuLjU4YjI0YzMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oCkBAIC02NCwzICs2NCwxMCBAQAogCiAgICAgcmV0dXJuIHJlczsKIH0KKworCisjaWYgKE5HWF9TTVApCisjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpICAgX19hc21fXyB2b2xhdGlsZSAoInN5bmNcbiIgOjo6ICJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkgICBfX2FzbV9fIHZvbGF0aWxlICgiIiA6OjogIm1lbW9yeSIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3NwYXJjNjQuaCBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3NwYXJjNjQuaAppbmRleCBjNzAyMmE5Li44MzE0MzE4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfc3BhcmM2NC5oCkBAIC02NywzICs2NywxMyBAQAogICAgICAgICBvbGQgPSByZXM7CiAgICAgfQogfQorCisKKyNpZiAoTkdYX1NNUCkKKyNkZWZpbmUgbmd4X21lbW9yeV9iYXJyaWVyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJtZW1iYXIgI0xvYWRMb2FkIHwgI0xvYWRTdG9yZSB8ICNTdG9yZVN0b3JlIHwgI1N0b3JlTG9hZCIgICAgICAgIFwKKyAgICAgICAgICAgIDo6OiAibWVtb3J5IikKKyNlbHNlCisjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpICAgX19hc21fXyB2b2xhdGlsZSAoIiIgOjo6ICJtZW1vcnkiKQorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaCBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oCmluZGV4IGUzYzBjOTMuLjMwNTNlNzIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3g4Ni5oCkBAIC0xMDEsMyArMTAxLDExIEBACiB9CiAKICNlbmRpZgorCisKKy8qCisgKiBvbiB4ODYgdGhlIHdyaXRlIG9wZXJhdGlvbnMgZ28gaW4gYSBwcm9ncmFtIG9yZGVyLCBzbyB3ZSBuZWVkIG9ubHkKKyAqIHRvIGRpc2FibGUgdGhlIGdjYyByZW9yZGVyIG9wdGltaXphdGlvbnMKKyAqLworCisjZGVmaW5lIG5neF9tZW1vcnlfYmFycmllcigpICAgIF9fYXNtX18gdm9sYXRpbGUgKCIiIDo6OiAibWVtb3J5IikKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaCBiL3NyYy9vcy91bml4L25neF9saW51eF9jb25maWcuaAppbmRleCBkM2VmMzI1Li5hYzdkN2E4IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfbGludXhfY29uZmlnLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X2NvbmZpZy5oCkBAIC05OCwxMSArOTgsNiBAQAogI2VuZGlmCiAKIAotI2lmbmRlZiBOR1hfSEFWRV9TRUxFQ1RfQ0hBTkdFX1RJTUVPVVQKLSNkZWZpbmUgTkdYX0hBVkVfU0VMRUNUX0NIQU5HRV9USU1FT1VUICAgMQotI2VuZGlmCi0KLQogI2RlZmluZSBOR1hfSEFWRV9PU19TUEVDSUZJQ19JTklUICAgIDEKIAogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwppbmRleCBmMjBmNDRjLi40YTJiNTgxIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAgICAgCi0gICAgbmd4X21heF9zb2NrZXRzID0gcmxtdC5ybGltX2N1cjsKKyAgICBuZ3hfbWF4X3NvY2tldHMgPSAobmd4X2ludF90KSBybG10LnJsaW1fY3VyOwogCiAjaWYgKE5HWF9IQVZFX0lOSEVSSVRFRF9OT05CTE9DSykKICAgICBuZ3hfaW5oZXJpdGVkX25vbmJsb2NraW5nID0gMTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCmluZGV4IDA3YTdjNjYuLjVlODhlZjMgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYwpAQCAtMjgyLDcgKzI4Miw2IEBACiBuZ3hfc2lnbmFsX2hhbmRsZXIoaW50IHNpZ25vKQogewogICAgIGNoYXIgICAgICAgICAgICAqYWN0aW9uOwotICAgIHN0cnVjdCB0aW1ldmFsICAgdHY7CiAgICAgbmd4X2ludF90ICAgICAgICBpZ25vcmU7CiAgICAgbmd4X2Vycl90ICAgICAgICBlcnI7CiAgICAgbmd4X3NpZ25hbF90ICAgICpzaWc7CkBAIC0yOTcsOCArMjk2LDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICBuZ3hfdGltZV91cGRhdGUodHYudHZfc2VjKTsKKyAgICBuZ3hfdGltZV91cGRhdGUoMCwgMCk7CiAKICAgICBhY3Rpb24gPSAiIjsKIApAQCAtNDU2LDYgKzQ1NCw3IEBACiAgICAgICAgICAgICBpZiAoZXJyID09IE5HWF9FQ0hJTEQpIHsKICAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgbmd4X2N5Y2xlLT5sb2csIGVycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhaXRwaWQoKSBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICNlbmRpZgpAQCAtNTI3LDYgKzUyNiw2IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOR1hfREVCVUdfUE9JTlRTX0FCT1JUOgotICAgICAgICBhYm9ydCgpOworICAgICAgICBuZ3hfYWJvcnQoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwppbmRleCAwMjlkZTQzLi5mNGVjMDZmIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTIxLDcgKzIxLDcgQEAKIHN0YXRpYyB2b2lkIG5neF9jaGFubmVsX2hhbmRsZXIobmd4X2V2ZW50X3QgKmV2KTsKICNpZiAoTkdYX1RIUkVBRFMpCiBzdGF0aWMgdm9pZCBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWRzKG5neF9jeWNsZV90ICpjeWNsZSk7Ci1zdGF0aWMgdm9pZCAqbmd4X3dvcmtlcl90aHJlYWRfY3ljbGUodm9pZCAqZGF0YSk7CitzdGF0aWMgbmd4X3RocmVhZF92YWx1ZV90IG5neF93b3JrZXJfdGhyZWFkX2N5Y2xlKHZvaWQgKmRhdGEpOwogI2VuZGlmCiAjaWYgMAogc3RhdGljIHZvaWQgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX2N5Y2xlKG5neF9jeWNsZV90ICpjeWNsZSwgdm9pZCAqZGF0YSk7CkBAIC02OSw3ICs2OSw2IEBACiAgICAgbmd4X2ludF90ICAgICAgICAgIGk7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgIG47CiAgICAgc2lnc2V0X3QgICAgICAgICAgIHNldDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgICAgdHY7CiAgICAgc3RydWN0IGl0aW1lcnZhbCAgIGl0djsKICAgICBuZ3hfdWludF90ICAgICAgICAgbGl2ZTsKICAgICBuZ3hfbXNlY190ICAgICAgICAgZGVsYXk7CkBAIC0xNDUsOCArMTQ0LDcgQEAKIAogICAgICAgICBzaWdzdXNwZW5kKCZzZXQpOwogCi0gICAgICAgIG5neF9nZXR0aW1lb2ZkYXkoJnR2KTsKLSAgICAgICAgbmd4X3RpbWVfdXBkYXRlKHR2LnR2X3NlYyk7CisgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKIAogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLCAid2FrZSB1cCIpOwogCkBAIC0yNzUsNyArMjczLDcgQEAKICAgICBmb3IgKCA7OyApIHsKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwgIndvcmtlciBjeWNsZSIpOwogCi0gICAgICAgIG5neF9wcm9jZXNzX2V2ZW50cyhjeWNsZSk7CisgICAgICAgIG5neF9wcm9jZXNzX2V2ZW50c19hbmRfdGltZXJzKGN5Y2xlKTsKIAogICAgICAgICBpZiAobmd4X3Rlcm1pbmF0ZSB8fCBuZ3hfcXVpdCkgewogICAgICAgICAgICAgbmd4X21hc3Rlcl9leGl0KGN5Y2xlKTsKQEAgLTY0NSw2ICs2NDMsOCBAQAogc3RhdGljIHZvaWQKIG5neF93b3JrZXJfcHJvY2Vzc19jeWNsZShuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmRhdGEpCiB7CisgICAgbmd4X3VpbnRfdCAgICAgICAgIGk7CisgICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7CiAjaWYgKE5HWF9USFJFQURTKQogICAgIG5neF9pbnRfdCAgICAgICAgICBuOwogICAgIG5neF9lcnJfdCAgICAgICAgICBlcnI7CkBAIC02NTcsMTEgKzY1Nyw2IEBACiAKICNpZiAoTkdYX1RIUkVBRFMpCiAKLSAgICBpZiAobmd4X3RpbWVfbXV0ZXhfaW5pdChjeWNsZS0+bG9nKSA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgLyogZmF0YWwgKi8KLSAgICAgICAgZXhpdCgyKTsKLSAgICB9Ci0KICAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsIG5neF9jb3JlX21vZHVsZSk7CiAKICAgICBpZiAobmd4X3RocmVhZHNfbikgewpAQCAtNzMxLDcgKzcyNiw3IEBACiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgMCwgIndvcmtlciBjeWNsZSIpOwogCi0gICAgICAgIG5neF9wcm9jZXNzX2V2ZW50cyhjeWNsZSk7CisgICAgICAgIG5neF9wcm9jZXNzX2V2ZW50c19hbmRfdGltZXJzKGN5Y2xlKTsKIAogICAgICAgICBpZiAobmd4X3Rlcm1pbmF0ZSkgewogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgImV4aXRpbmciKTsKQEAgLTc0MCw2ICs3MzUsMjEgQEAKICAgICAgICAgICAgIG5neF93YWtldXBfd29ya2VyX3RocmVhZHMoY3ljbGUpOwogI2VuZGlmCiAKKyAgICAgICAgICAgIGMgPSBjeWNsZS0+Y29ubmVjdGlvbnM7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ljbGUtPmNvbm5lY3Rpb25fbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNbaV0uZmQgIT0gLTEKKyAgICAgICAgICAgICAgICAgICAgJiYgY1tpXS5yZWFkCisgICAgICAgICAgICAgICAgICAgICYmICFjW2ldLnJlYWQtPmFjY2VwdAorICAgICAgICAgICAgICAgICAgICAmJiAhY1tpXS5yZWFkLT5jaGFubmVsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuIHNvY2tldCAjJWQgbGVmdCBpbiAldWkgY29ubmVjdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYm9ydGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tpXS5mZCwgaSk7CisgICAgICAgICAgICAgICAgICAgIG5neF9hYm9ydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHdlIGRvIG5vdCBkZXN0cm95IGN5Y2xlLT5wb29sIGhlcmUgYmVjYXVzZSBhIHNpZ25hbCBoYW5kbGVyCiAgICAgICAgICAgICAgKiB0aGF0IHVzZXMgY3ljbGUtPmxvZyBjYW4gYmUgY2FsbGVkIGF0IHRoaXMgcG9pbnQKQEAgLTEwNTQsNyArMTA2NCw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgKgorc3RhdGljIG5neF90aHJlYWRfdmFsdWVfdAogbmd4X3dvcmtlcl90aHJlYWRfY3ljbGUodm9pZCAqZGF0YSkKIHsKICAgICBuZ3hfdGhyZWFkX3QgICp0aHIgPSBkYXRhOwpAQCAtMTA3NSw3ICsxMDg1LDcgQEAKICAgICBpZiAoZXJyKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgIG5neF90aHJlYWRfc2lnbWFza19uICIgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiAodm9pZCAqKSAxOworICAgICAgICByZXR1cm4gKG5neF90aHJlYWRfdmFsdWVfdCkgMTsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0NPUkUsIGN5Y2xlLT5sb2csIDAsCkBAIC0xMDg1LDI1ICsxMDk1LDIzIEBACiAKICAgICB0bHMgPSBuZ3hfY2FsbG9jKHNpemVvZihuZ3hfY29yZV90bHNfdCksIGN5Y2xlLT5sb2cpOwogICAgIGlmICh0bHMgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gKHZvaWQgKikgMTsKKyAgICAgICAgcmV0dXJuIChuZ3hfdGhyZWFkX3ZhbHVlX3QpIDE7CiAgICAgfQogCiAgICAgZXJyID0gbmd4X3RocmVhZF9zZXRfdGxzKG5neF9jb3JlX3Rsc19rZXksIHRscyk7CiAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgIG5neF90aHJlYWRfc2V0X3Rsc19uICIgZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiAodm9pZCAqKSAxOworICAgICAgICByZXR1cm4gKG5neF90aHJlYWRfdmFsdWVfdCkgMTsKICAgICB9CiAKLSAgICBpZiAobmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICByZXR1cm4gKHZvaWQgKikgMTsKLSAgICB9CisgICAgbmd4X211dGV4X2xvY2sobmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpOwogCiAgICAgZm9yICggOzsgKSB7CiAgICAgICAgIHRoci0+c3RhdGUgPSBOR1hfVEhSRUFEX0ZSRUU7CiAKICAgICAgICAgaWYgKG5neF9jb25kX3dhaXQodGhyLT5jdiwgbmd4X3Bvc3RlZF9ldmVudHNfbXV0ZXgpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuICh2b2lkICopIDE7CisgICAgICAgICAgICByZXR1cm4gKG5neF90aHJlYWRfdmFsdWVfdCkgMTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfdGVybWluYXRlKSB7CkBAIC0xMTE1LDIyICsxMTIzLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhyZWFkICIgTkdYX1RJRF9UX0ZNVCAiIGlzIGRvbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3RocmVhZF9zZWxmKCkpOwogCi0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKikgMDsKKyAgICAgICAgICAgIHJldHVybiAobmd4X3RocmVhZF92YWx1ZV90KSAwOwogICAgICAgICB9CiAKICAgICAgICAgdGhyLT5zdGF0ZSA9IE5HWF9USFJFQURfQlVTWTsKIAogICAgICAgICBpZiAobmd4X2V2ZW50X3RocmVhZF9wcm9jZXNzX3Bvc3RlZChjeWNsZSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKikgMTsKKyAgICAgICAgICAgIHJldHVybiAobmd4X3RocmVhZF92YWx1ZV90KSAxOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9ldmVudF90aHJlYWRfcHJvY2Vzc19wb3N0ZWQoY3ljbGUpID09IE5HWF9FUlJPUikgewotICAgICAgICAgICAgcmV0dXJuICh2b2lkICopIDE7CisgICAgICAgICAgICByZXR1cm4gKG5neF90aHJlYWRfdmFsdWVfdCkgMTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChuZ3hfcHJvY2Vzc19jaGFuZ2VzKSB7CiAgICAgICAgICAgICBpZiAobmd4X3Byb2Nlc3NfY2hhbmdlcyhjeWNsZSwgMSkgPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopIDE7CisgICAgICAgICAgICAgICAgcmV0dXJuIChuZ3hfdGhyZWFkX3ZhbHVlX3QpIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTg1LDcgKzExOTMsNyBAQAogCiAgICAgICAgIG5neF9hZGRfdGltZXIoZXYsIDYwICogNjAgKiAxMDAwKTsKIAotICAgICAgICBuZ3hfcHJvY2Vzc19ldmVudHMoY3ljbGUpOworICAgICAgICBuZ3hfcHJvY2Vzc19ldmVudHNfYW5kX3RpbWVycyhjeWNsZSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHRocmVhZF90aHJlYWQuYyBiL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCmluZGV4IDBiNTVjNzEuLmM5MWU2NWQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCkBAIC0xNSw4ICsxNSw5IEBACiBzdGF0aWMgcHRocmVhZF9hdHRyX3QgIHRocl9hdHRyOwogCiAKLW5neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpCituZ3hfZXJyX3QKK25neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLCBuZ3hfdGhyZWFkX3ZhbHVlX3QgKCpmdW5jKSh2b2lkICphcmcpLAorICAgIHZvaWQgKmFyZywgbmd4X2xvZ190ICpsb2cpCiB7CiAgICAgaW50ICBlcnI7CiAKQEAgLTQyLDcgKzQzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9pbnRfdAorbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSkKIHsgICAKICAgICBpbnQgIGVycjsKIApAQCAtNzAsNyArNzIsOCBAQAogfQogCiAKLW5neF9tdXRleF90ICpuZ3hfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZywgbmd4X3VpbnRfdCBmbGFncykKK25neF9tdXRleF90ICoKK25neF9tdXRleF9pbml0KG5neF9sb2dfdCAqbG9nLCBuZ3hfdWludF90IGZsYWdzKQogewogICAgIGludCAgICAgICAgICAgZXJyOwogICAgIG5neF9tdXRleF90ICAqbTsKQEAgLTk0LDcgKzk3LDggQEAKIH0KIAogCi12b2lkIG5neF9tdXRleF9kZXN0cm95KG5neF9tdXRleF90ICptKQordm9pZAorbmd4X211dGV4X2Rlc3Ryb3kobmd4X211dGV4X3QgKm0pCiB7CiAgICAgaW50ICBlcnI7CiAKQEAgLTEwOSwxMiArMTEzLDEzIEBACiB9CiAKIAotbmd4X2ludF90IG5neF9tdXRleF9sb2NrKG5neF9tdXRleF90ICptKQordm9pZAorbmd4X211dGV4X2xvY2sobmd4X211dGV4X3QgKm0pCiB7CiAgICAgaW50ICBlcnI7CiAKICAgICBpZiAoIW5neF90aHJlYWRlZCkgewotICAgICAgICByZXR1cm4gTkdYX09LOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibG9jayBtdXRleCAlcCIsIG0pOwpAQCAtMTI0LDE2ICsxMjksMTcgQEAKICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtLT5sb2csIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9tdXRleF9sb2NrKCVwKSBmYWlsZWQiLCBtKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgbmd4X2Fib3J0KCk7CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibXV0ZXggJXAgaXMgbG9ja2VkIiwgbSk7CiAKLSAgICByZXR1cm4gTkdYX09LOworICAgIHJldHVybjsKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X211dGV4X3RyeWxvY2sobmd4X211dGV4X3QgKm0pCituZ3hfaW50X3QKK25neF9tdXRleF90cnlsb2NrKG5neF9tdXRleF90ICptKQogewogICAgIGludCAgZXJyOwogCkBAIC0xNTIsNyArMTU4LDcgQEAKICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBtLT5sb2csIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9tdXRleF90cnlsb2NrKCVwKSBmYWlsZWQiLCBtKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgbmd4X2Fib3J0KCk7CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibXV0ZXggJXAgaXMgbG9ja2VkIiwgbSk7CkBAIC0xNjEsMTIgKzE2NywxMyBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfbXV0ZXhfdW5sb2NrKG5neF9tdXRleF90ICptKQordm9pZAorbmd4X211dGV4X3VubG9jayhuZ3hfbXV0ZXhfdCAqbSkKIHsKICAgICBpbnQgIGVycjsKIAogICAgIGlmICghbmd4X3RocmVhZGVkKSB7Ci0gICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX01VVEVYLCBtLT5sb2csIDAsICJ1bmxvY2sgbXV0ZXggJXAiLCBtKTsKQEAgLTE3NiwxNiArMTgzLDE3IEBACiAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgbS0+bG9nLCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfbXV0ZXhfdW5sb2NrKCVwKSBmYWlsZWQiLCBtKTsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgbmd4X2Fib3J0KCk7CiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19NVVRFWCwgbS0+bG9nLCAwLCAibXV0ZXggJXAgaXMgdW5sb2NrZWQiLCBtKTsKIAotICAgIHJldHVybiBOR1hfT0s7CisgICAgcmV0dXJuOwogfQogCiAKLW5neF9jb25kX3QgKm5neF9jb25kX2luaXQobmd4X2xvZ190ICpsb2cpCituZ3hfY29uZF90ICoKK25neF9jb25kX2luaXQobmd4X2xvZ190ICpsb2cpCiB7CiAgICAgaW50ICAgICAgICAgIGVycjsKICAgICBuZ3hfY29uZF90ICAqY3Y7CkBAIC0yMDksNyArMjE3LDggQEAKIH0KIAogCi12b2lkIG5neF9jb25kX2Rlc3Ryb3kobmd4X2NvbmRfdCAqY3YpCit2b2lkCituZ3hfY29uZF9kZXN0cm95KG5neF9jb25kX3QgKmN2KQogewogICAgIGludCAgZXJyOwogCkBAIC0yMjQsNyArMjMzLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NvbmRfd2FpdChuZ3hfY29uZF90ICpjdiwgbmd4X211dGV4X3QgKm0pCituZ3hfaW50X3QKK25neF9jb25kX3dhaXQobmd4X2NvbmRfdCAqY3YsIG5neF9tdXRleF90ICptKQogewogICAgIGludCAgZXJyOwogCkBAIC0yNDYsNyArMjU2LDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2NvbmRfc2lnbmFsKG5neF9jb25kX3QgKmN2KQorbmd4X2ludF90CituZ3hfY29uZF9zaWduYWwobmd4X2NvbmRfdCAqY3YpCiB7CiAgICAgaW50ICBlcnI7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zb2NrZXQuYyBiL3NyYy9vcy91bml4L25neF9zb2NrZXQuYwppbmRleCAxMjE5NTg5Li42MDg4NWRkIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29ja2V0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NvY2tldC5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKiB3aGlsZSBmY250bChGX1NFVEZMLCB+T19OT05CTE9DSykgbmVlZHMgdG8gbGVhcm4gYmVmb3JlCiAgKiB0aGUgcHJldmlvdXMgc3RhdGUgdXNpbmcgZmNudGwoRl9HRVRGTCkuCiAgKgotICogaW9jdGwoKSBhbmQgZmNudGwoKSBhcmUgc3lzY2FsbHMgb24gYXQgbGVhc3QgRnJlZUJTRCAyLngsIExpbnV4IDIuMgorICogaW9jdGwoKSBhbmQgZmNudGwoKSBhcmUgc3lzY2FsbHMgYXQgbGVhc3QgaW4gRnJlZUJTRCAyLngsIExpbnV4IDIuMgogICogYW5kIFNvbGFyaXMgNy4KICAqCiAgKiBpb2N0bCgpIGluIExpbnV4IDIuNCBhbmQgMi42IHVzZXMgQktMLCBob3dldmVyLCBmY250bChGX1NFVEZMKSB1c2VzIGl0IHRvby4KQEAgLTczLDYgKzczLDcgQEAKIAogI2VsaWYgKE5HWF9MSU5VWCkKIAorCiBpbnQKIG5neF90Y3Bfbm9wdXNoKG5neF9zb2NrZXRfdCBzKQogewpAQCAtODQsNiArODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZjb3JrLCBzaXplb2YoaW50KSk7CiB9CiAKKwogaW50CiBuZ3hfdGNwX3B1c2gobmd4X3NvY2tldF90IHMpCiB7CkBAIC0xMDMsNiArMTA1LDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCiBpbnQKIG5neF90Y3BfcHVzaChuZ3hfc29ja2V0X3QgcykKIHsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaCBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaAppbmRleCBlNjM0NDE2Li42YjRjZTg0IDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3N1bnByb19hdG9taWNfc3BhcmM2NC5oCkBAIC01MCwzICs1MCw5IEBACiAgICAgICAgIG9sZCA9IHJlczsKICAgICB9CiB9CisKKworI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbSAoIi52b2xhdGlsZSIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2FzbSAoIm1lbWJhciAjTG9hZExvYWQgfCAjTG9hZFN0b3JlIHwgI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkIik7ICAgXAorICAgICAgICBfX2FzbSAoIi5ub252b2xhdGlsZSIpCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfdGhyZWFkLmggYi9zcmMvb3MvdW5peC9uZ3hfdGhyZWFkLmgKaW5kZXggZTYzMGIzNS4uNTE3MWJlNiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3RocmVhZC5oCisrKyBiL3NyYy9vcy91bml4L25neF90aHJlYWQuaApAQCAtNjYsOCArNjYsOCBAQAogCiAKIG5neF9pbnRfdCBuZ3hfbXV0ZXhfdHJ5bG9jayhuZ3hfbXV0ZXhfdCAqbSk7Ci1uZ3hfaW50X3Qgbmd4X211dGV4X2xvY2sobmd4X211dGV4X3QgKm0pOwotbmd4X2ludF90IG5neF9tdXRleF91bmxvY2sobmd4X211dGV4X3QgKm0pOwordm9pZCBuZ3hfbXV0ZXhfbG9jayhuZ3hfbXV0ZXhfdCAqbSk7Cit2b2lkIG5neF9tdXRleF91bmxvY2sobmd4X211dGV4X3QgKm0pOwogCiAjZW5kaWYKIApAQCAtOTAsMTAgKzkwLDExIEBACiBleHRlcm4gdm9sYXRpbGUgbmd4X3RocmVhZF90ICBuZ3hfdGhyZWFkc1tOR1hfTUFYX1RIUkVBRFNdOwogCiAKLW5neF9pbnRfdCBuZ3hfaW5pdF90aHJlYWRzKGludCBuLCBzaXplX3Qgc2l6ZSwgbmd4X2N5Y2xlX3QgKmN5Y2xlKTsKLW5neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpOwordHlwZWRlZiB2b2lkICogIG5neF90aHJlYWRfdmFsdWVfdDsKIAorbmd4X2ludF90IG5neF9pbml0X3RocmVhZHMoaW50IG4sIHNpemVfdCBzaXplLCBuZ3hfY3ljbGVfdCAqY3ljbGUpOworbmd4X2Vycl90IG5neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLAorICAgIG5neF90aHJlYWRfdmFsdWVfdCAoKmZ1bmMpKHZvaWQgKmFyZyksIHZvaWQgKmFyZywgbmd4X2xvZ190ICpsb2cpOwogCiBuZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpOwogdm9pZCBuZ3hfbXV0ZXhfZGVzdHJveShuZ3hfbXV0ZXhfdCAqbSk7CkBAIC0xMTMsNyArMTE0LDcgQEAKICNkZWZpbmUgTkdYX1RJRF9UX0ZNVCAgICAgICAgICIlZCIKIAogI2RlZmluZSBuZ3hfbXV0ZXhfdHJ5bG9jayhtKSAgTkdYX09LCi0jZGVmaW5lIG5neF9tdXRleF9sb2NrKG0pICAgICBOR1hfT0sKKyNkZWZpbmUgbmd4X211dGV4X2xvY2sobSkKICNkZWZpbmUgbmd4X211dGV4X3VubG9jayhtKQogCiAjZGVmaW5lIG5neF9jb25kX3NpZ25hbChjdikKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90aW1lLmMgYi9zcmMvb3MvdW5peC9uZ3hfdGltZS5jCmluZGV4IDFiMWE1NjYuLjkyNzEzMmQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF90aW1lLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuYwpAQCAtOCwyMCArOCwxNiBAQAogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAKIAotdm9pZCBuZ3hfbG9jYWx0aW1lKG5neF90bV90ICp0bSkKK3ZvaWQKK25neF9sb2NhbHRpbWUodGltZV90IHMsIG5neF90bV90ICp0bSkKIHsKICNpZiAoTkdYX0hBVkVfTE9DQUxUSU1FX1IpCi0gICAgdGltZV90ICAgICBub3c7Ci0KLSAgICBub3cgPSBuZ3hfdGltZSgpOwotICAgICh2b2lkKSBsb2NhbHRpbWVfcigmbm93LCB0bSk7CisgICAgKHZvaWQpIGxvY2FsdGltZV9yKCZzLCB0bSk7CiAKICNlbHNlCi0gICAgdGltZV90ICAgICBub3c7CiAgICAgbmd4X3RtX3QgICp0OwogCi0gICAgbm93ID0gbmd4X3RpbWUoKTsKLSAgICB0ID0gbG9jYWx0aW1lKCZub3cpOworICAgIHQgPSBsb2NhbHRpbWUoJnMpOwogICAgICp0bSA9ICp0OwogCiAjZW5kaWYKQEAgLTMxLDQwICsyNywzMiBAQAogfQogCiAKLXZvaWQgbmd4X2xpYmNfbG9jYWx0aW1lKHN0cnVjdCB0bSAqdG0pCit2b2lkCituZ3hfbGliY19sb2NhbHRpbWUodGltZV90IHMsIHN0cnVjdCB0bSAqdG0pCiB7CiAjaWYgKE5HWF9IQVZFX0xPQ0FMVElNRV9SKQotICAgIHRpbWVfdCAgICAgIG5vdzsKLQotICAgIG5vdyA9IG5neF90aW1lKCk7Ci0gICAgKHZvaWQpIGxvY2FsdGltZV9yKCZub3csIHRtKTsKKyAgICAodm9pZCkgbG9jYWx0aW1lX3IoJnMsIHRtKTsKIAogI2Vsc2UKLSAgICB0aW1lX3QgICAgICBub3c7CiAgICAgc3RydWN0IHRtICAqdDsKIAotICAgIG5vdyA9IG5neF90aW1lKCk7Ci0gICAgdCA9IGxvY2FsdGltZSgmbm93KTsKKyAgICB0ID0gbG9jYWx0aW1lKCZzKTsKICAgICAqdG0gPSAqdDsKIAogI2VuZGlmCiB9CiAKIAotdm9pZCBuZ3hfbGliY19nbXRpbWUoc3RydWN0IHRtICp0bSkKK3ZvaWQKK25neF9saWJjX2dtdGltZSh0aW1lX3Qgcywgc3RydWN0IHRtICp0bSkKIHsKICNpZiAoTkdYX0hBVkVfTE9DQUxUSU1FX1IpCi0gICAgdGltZV90ICAgICAgbm93OwotCi0gICAgbm93ID0gbmd4X3RpbWUoKTsKLSAgICAodm9pZCkgZ210aW1lX3IoJm5vdywgdG0pOworICAgICh2b2lkKSBnbXRpbWVfcigmcywgdG0pOwogCiAjZWxzZQotICAgIHRpbWVfdCAgICAgIG5vdzsKICAgICBzdHJ1Y3QgdG0gICp0OwogCi0gICAgbm93ID0gbmd4X3RpbWUoKTsKLSAgICB0ID0gZ210aW1lKCZub3cpOworICAgIHQgPSBnbXRpbWUoJnMpOwogICAgICp0bSA9ICp0OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF90aW1lLmggYi9zcmMvb3MvdW5peC9uZ3hfdGltZS5oCmluZGV4IGY5ZmUzYzUuLmIzMWJkNDcgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF90aW1lLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3RpbWUuaApAQCAtNTIsOSArNTIsOSBAQAogI2VuZGlmCiAKIAotdm9pZCBuZ3hfbG9jYWx0aW1lKG5neF90bV90ICp0bSk7Ci12b2lkIG5neF9saWJjX2xvY2FsdGltZShzdHJ1Y3QgdG0gKnRtKTsKLXZvaWQgbmd4X2xpYmNfZ210aW1lKHN0cnVjdCB0bSAqdG0pOwordm9pZCBuZ3hfbG9jYWx0aW1lKHRpbWVfdCBzLCBuZ3hfdG1fdCAqdG0pOwordm9pZCBuZ3hfbGliY19sb2NhbHRpbWUodGltZV90IHMsIHN0cnVjdCB0bSAqdG0pOwordm9pZCBuZ3hfbGliY19nbXRpbWUodGltZV90IHMsIHN0cnVjdCB0bSAqdG0pOwogCiAjZGVmaW5lIG5neF9nZXR0aW1lb2ZkYXkodHApICAodm9pZCkgZ2V0dGltZW9mZGF5KHRwLCBOVUxMKTsKICNkZWZpbmUgbmd4X21zbGVlcChtcykgICAgICAgICh2b2lkKSB1c2xlZXAobXMgKiAxMDAwKQpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaCBiL3NyYy9vcy93aW4zMi9uZ3hfYXRvbWljLmgKaW5kZXggODdkZTU3ZC4uMWUzMzM0NSAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9hdG9taWMuaAorKysgYi9zcmMvb3Mvd2luMzIvbmd4X2F0b21pYy5oCkBAIC00MSw2ICs0MSw5IEBACiAjZGVmaW5lIG5neF9hdG9taWNfZmV0Y2hfYWRkKHAsIGFkZCkgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgobG9uZyAqKSBwLCBhZGQpCiAKIAorI2RlZmluZSBuZ3hfbWVtb3J5X2JhcnJpZXIoKQorCisKIHZvaWQgbmd4X3NwaW5sb2NrKG5neF9hdG9taWNfdCAqbG9jaywgbmd4X3VpbnRfdCBzcGluKTsKIAogI2RlZmluZSBuZ3hfdHJ5bG9jayhsb2NrKSAgKCoobG9jaykgPT0gMCAmJiBuZ3hfYXRvbWljX2NtcF9zZXQobG9jaywgMCwgMSkpCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCmluZGV4IDdlYWJlZmUuLmJlMzYzZTIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bmdpbnguaD4KIAogCi1zdGF0aWMgdm9pZCAqbmd4X3dvcmtlcl90aHJlYWRfY3ljbGUodm9pZCAqZGF0YSk7CitzdGF0aWMgbmd4X3RocmVhZF92YWx1ZV90IF9fc3RkY2FsbCBuZ3hfd29ya2VyX3RocmVhZF9jeWNsZSh2b2lkICpkYXRhKTsKIHN0YXRpYyBsb25nIF9fc3RkY2FsbCBuZ3hfd2luZG93X3Byb2NlZHVyZShIV05EIHdpbmRvdywgdV9pbnQgbWVzc2FnZSwKICAgICB1X2ludCB3cGFyYW0sIGxvbmcgbHBhcmFtKTsKIApAQCAtMjAyLDcgKzIwMiw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgKgorc3RhdGljIG5neF90aHJlYWRfdmFsdWVfdCBfX3N0ZGNhbGwKIG5neF93b3JrZXJfdGhyZWFkX2N5Y2xlKHZvaWQgKmRhdGEpCiB7CiAgICAgbmd4X2N5Y2xlX3QgICpjeWNsZTsKQEAgLTIxMiwxMCArMjEyLDEwIEBACiAgICAgd2hpbGUgKCFuZ3hfcXVpdCkgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjeWNsZS0+bG9nLCAwLCAid29ya2VyIGN5Y2xlIik7CiAKLSAgICAgICAgbmd4X3Byb2Nlc3NfZXZlbnRzKGN5Y2xlKTsKKyAgICAgICAgbmd4X3Byb2Nlc3NfZXZlbnRzX2FuZF90aW1lcnMoY3ljbGUpOwogICAgIH0KIAotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiAwOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmMgYi9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5jCmluZGV4IDA3MDNhYzcuLmY4Y2VkZDIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF90aHJlYWQuYwpAQCAtMTQsMTMgKzE0LDEzIEBACiBzdGF0aWMgc2l6ZV90ICBzdGFja19zaXplOwogCiAKLW5neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsCi0gICAgICAgICAgICAgICAgICAgICAgbmd4X2xvZ190ICpsb2cpCituZ3hfZXJyX3QKK25neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLAorICAgIG5neF90aHJlYWRfdmFsdWVfdCAoX19zdGRjYWxsICpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsIG5neF9sb2dfdCAqbG9nKQogewogICAgIG5neF9lcnJfdCAgZXJyOwogCi0gICAgKnRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCBzdGFja19zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgKExQVEhSRUFEX1NUQVJUX1JPVVRJTkUpIGZ1bmMsIGFyZywgMCwgTlVMTCk7CisgICAgKnRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCBzdGFja19zaXplLCBmdW5jLCBhcmcsIDAsIE5VTEwpOwogCiAgICAgaWYgKCp0aWQgIT0gTlVMTCkgewogICAgICAgICByZXR1cm4gMDsKQEAgLTMyLDcgKzMyLDggQEAKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSkKK25neF9pbnRfdAorbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSkKIHsKICAgICBzdGFja19zaXplID0gc2l6ZTsKIApAQCAtNDAsNyArNDEsOCBAQAogfQogCiAKLW5neF9lcnJfdCBuZ3hfdGhyZWFkX2tleV9jcmVhdGUobmd4X3Rsc19rZXlfdCAqa2V5KQorbmd4X2Vycl90CituZ3hfdGhyZWFkX2tleV9jcmVhdGUobmd4X3Rsc19rZXlfdCAqa2V5KQogewogICAgICprZXkgPSBUbHNBbGxvYygpOwogCkBAIC01Miw3ICs1NCw4IEBACiB9CiAKIAotbmd4X2Vycl90IG5neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90ICprZXksIHZvaWQgKmRhdGEpCituZ3hfZXJyX3QKK25neF90aHJlYWRfc2V0X3RscyhuZ3hfdGxzX2tleV90ICprZXksIHZvaWQgKmRhdGEpCiB7CiAgICAgaWYgKFRsc1NldFZhbHVlKCprZXksIGRhdGEpID09IDApIHsKICAgICAgICAgcmV0dXJuIG5neF9lcnJubzsKQEAgLTYyLDcgKzY1LDggQEAKIH0KIAogCi1uZ3hfbXV0ZXhfdCAqbmd4X211dGV4X2luaXQobmd4X2xvZ190ICpsb2csIG5neF91aW50X3QgZmxhZ3MpCituZ3hfbXV0ZXhfdCAqCituZ3hfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZywgbmd4X3VpbnRfdCBmbGFncykKIHsKICAgICByZXR1cm4gKG5neF9tdXRleF90ICopIDE7CiB9CkBAIC03MCwxNSArNzQsMjIgQEAKIAogLyogU1RVQiAqLwogCi1uZ3hfaW50X3QKK3ZvaWQKIG5neF9tdXRleF9sb2NrKG5neF9tdXRleF90ICptKSB7Ci0gICAgcmV0dXJuIE5HWF9PSzsKKyAgICByZXR1cm47CiB9CiAKIAorCiBuZ3hfaW50X3QKIG5neF9tdXRleF90cnlsb2NrKG5neF9tdXRleF90ICptKSB7CiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KIAorCit2b2lkCituZ3hfbXV0ZXhfdW5sb2NrKG5neF9tdXRleF90ICptKSB7CisgICAgcmV0dXJuOworfQorCiAvKiovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5oIGIvc3JjL29zL3dpbjMyL25neF90aHJlYWQuaAppbmRleCBiNTVkY2NhLi4zZGExZGMyIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3RocmVhZC5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfdGhyZWFkLmgKQEAgLTE0LDYgKzE0LDcgQEAKIAogdHlwZWRlZiBIQU5ETEUgIG5neF90aWRfdDsKIHR5cGVkZWYgRFdPUkQgICBuZ3hfdGxzX2tleV90OwordHlwZWRlZiBEV09SRCAgIG5neF90aHJlYWRfdmFsdWVfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0yMiw4ICsyMyw4IEBACiB9IG5neF9tdXRleF90OwogCiAKLW5neF9lcnJfdCBuZ3hfY3JlYXRlX3RocmVhZChuZ3hfdGlkX3QgKnRpZCwgdm9pZCogKCpmdW5jKSh2b2lkICphcmcpLAotICAgIHZvaWQgKmFyZywgbmd4X2xvZ190ICpsb2cpOworbmd4X2Vycl90IG5neF9jcmVhdGVfdGhyZWFkKG5neF90aWRfdCAqdGlkLAorICAgIG5neF90aHJlYWRfdmFsdWVfdCAoX19zdGRjYWxsICpmdW5jKSh2b2lkICphcmcpLCB2b2lkICphcmcsIG5neF9sb2dfdCAqbG9nKTsKIG5neF9pbnRfdCBuZ3hfaW5pdF90aHJlYWRzKGludCBuLCBzaXplX3Qgc2l6ZSwgbmd4X2N5Y2xlX3QgKmN5Y2xlKTsKIAogbmd4X2Vycl90IG5neF90aHJlYWRfa2V5X2NyZWF0ZShuZ3hfdGxzX2tleV90ICprZXkpOwpAQCAtNDEsMTQgKzQyLDEzIEBACiAKIG5neF9tdXRleF90ICpuZ3hfbXV0ZXhfaW5pdChuZ3hfbG9nX3QgKmxvZywgbmd4X3VpbnRfdCBmbGFncyk7CiAKLW5neF9pbnRfdCBuZ3hfbXV0ZXhfbG9jayhuZ3hfbXV0ZXhfdCAqbSk7Cit2b2lkIG5neF9tdXRleF9sb2NrKG5neF9tdXRleF90ICptKTsKIG5neF9pbnRfdCBuZ3hfbXV0ZXhfdHJ5bG9jayhuZ3hfbXV0ZXhfdCAqbSk7Cit2b2lkIG5neF9tdXRleF91bmxvY2sobmd4X211dGV4X3QgKm0pOwogCiAKIC8qIFNUVUIgKi8KICNkZWZpbmUgTkdYX01VVEVYX0xJR0hUICAgICAgICAgICAgIDAKLQotI2RlZmluZSBuZ3hfbXV0ZXhfdW5sb2NrKG0pCiAvKiovCiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25neF90aW1lLmMgYi9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuYwppbmRleCAwNGExYWY2Li4zOWNlNjMzIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuYworKysgYi9zcmMvb3Mvd2luMzIvbmd4X3RpbWUuYwpAQCAtOCw3ICs4LDggQEAKICNpbmNsdWRlIDxuZ3hfY29yZS5oPgogCiAKLXZvaWQgbmd4X2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHApCit2b2lkCituZ3hfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0cCkKIHsKICAgICB1aW50NjRfdCAgaW50ZXJ2YWxzOwogICAgIEZJTEVUSU1FICBmdDsKQEAgLTM2LDI5ICszNywyOCBAQAogfQogCiAKLXZvaWQgbmd4X2xpYmNfbG9jYWx0aW1lKHN0cnVjdCB0bSAqdG0pCit2b2lkCituZ3hfbGliY19sb2NhbHRpbWUodGltZV90IHMsIHN0cnVjdCB0bSAqdG0pCiB7Ci0gICAgdGltZV90ICAgICAgbm93OwogICAgIHN0cnVjdCB0bSAgKnQ7CiAKLSAgICBub3cgPSBuZ3hfdGltZSgpOwotICAgIHQgPSBsb2NhbHRpbWUoJm5vdyk7CisgICAgdCA9IGxvY2FsdGltZSgmcyk7CiAgICAgKnRtID0gKnQ7CiB9CiAKIAotdm9pZCBuZ3hfbGliY19nbXRpbWUoc3RydWN0IHRtICp0bSkKK3ZvaWQKK25neF9saWJjX2dtdGltZSh0aW1lX3Qgcywgc3RydWN0IHRtICp0bSkKIHsKLSAgICB0aW1lX3QgICAgICBub3c7CiAgICAgc3RydWN0IHRtICAqdDsKIAotICAgIG5vdyA9IG5neF90aW1lKCk7Ci0gICAgdCA9IGdtdGltZSgmbm93KTsKKyAgICB0ID0gZ210aW1lKCZzKTsKICAgICAqdG0gPSAqdDsKIH0KIAogCi1uZ3hfaW50X3Qgbmd4X2dldHRpbWV6b25lKHZvaWQpCituZ3hfaW50X3QKK25neF9nZXR0aW1lem9uZSh2b2lkKQogewogICAgIFRJTUVfWk9ORV9JTkZPUk1BVElPTiAgdHo7CiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfdGltZS5oIGIvc3JjL29zL3dpbjMyL25neF90aW1lLmgKaW5kZXggNGMxNDk4NC4uMjI1YzM4YyAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF90aW1lLmgKKysrIGIvc3JjL29zL3dpbjMyL25neF90aW1lLmgKQEAgLTQwLDggKzQwLDggQEAKICNkZWZpbmUgTkdYX0hBVkVfR0VUVElNRVpPTkUgIDEKIAogbmd4X2ludF90IG5neF9nZXR0aW1lem9uZSh2b2lkKTsKLXZvaWQgbmd4X2xpYmNfbG9jYWx0aW1lKHN0cnVjdCB0bSAqdG0pOwotdm9pZCBuZ3hfbGliY19nbXRpbWUoc3RydWN0IHRtICp0bSk7Cit2b2lkIG5neF9saWJjX2xvY2FsdGltZSh0aW1lX3Qgcywgc3RydWN0IHRtICp0bSk7Cit2b2lkIG5neF9saWJjX2dtdGltZSh0aW1lX3Qgcywgc3RydWN0IHRtICp0bSk7CiB2b2lkIG5neF9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnRwKTsKIAogCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaAppbmRleCBhODE0YWNiLi45NjU4YzEyIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKQEAgLTgsNiArOCwxMCBAQAogI2RlZmluZSBfTkdYX1dJTjMyX0NPTkZJR19IX0lOQ0xVREVEXwogCiAKKyNkZWZpbmUgV0lOMzIgICAgICAgICAweDA0MDAKKyNkZWZpbmUgX1dJTjMyX1dJTk5UICAweDA0MDAKKworCiAjZGVmaW5lIFNUUklDVAogI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAK