ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGE3ZWE4ZTMuLmQ3ODM1OWYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtNTE4LDYgKzUxOCwxNCBAQAogRTogemFiQHphYmJvLm5ldAogRDogbWFlc3RybyBwY2kgc291bmQKIAorTTogRGF2aWQgQnJvd25lbGwKK0Q6IEtlcm5lbCBlbmdpbmVlciwgbWVudG9yLCBhbmQgZnJpZW5kLiAgTWFpbnRhaW5lZCBVU0IgRUhDSSBhbmQKK0Q6IGdhZGdldCBsYXllcnMsIFNQSSBzdWJzeXN0ZW0sIEdQSU8gc3Vic3lzdGVtLCBhbmQgbW9yZSB0aGFuIGEgZmV3CitEOiBkZXZpY2UgZHJpdmVycy4gIEhpcyBlbmNvdXJhZ2VtZW50IGFsc28gaGVscGVkIG1hbnkgZW5naW5lZXJzIGdldAorRDogc3RhcnRlZCB3b3JraW5nIG9uIHRoZSBMaW51eCBrZXJuZWwuICBEYXZpZCBwYXNzZWQgYXdheSBpbiBlYXJseQorRDogMjAxMSwgYW5kIHdpbGwgYmUgZ3JlYXRseSBtaXNzZWQuCitXOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxMS80LzUvMzYKKwogTjogR2FyeSBCcnViYWtlcgogRTogeGF2eWVyQGl4Lm5ldGNvbS5jb20KIEQ6IFVTQiBTZXJpYWwgRW1wZWcgRW1wZWctY2FyIE1hcmsgSS9JSSBEcml2ZXIKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggZDlhMjAzYi4uZmQyNDhhMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC0yNTk4LDYgKzI1OTgsOCBAQAogCQkJCQl1bmxvY2sgZWplY3RhYmxlIG1lZGlhKTsKIAkJCQltID0gTUFYX1NFQ1RPUlNfNjQgKGRvbid0IHRyYW5zZmVyIG1vcmUKIAkJCQkJdGhhbiA2NCBzZWN0b3JzID0gMzIgS0IgYXQgYSB0aW1lKTsKKwkJCQluID0gSU5JVElBTF9SRUFEMTAgKGZvcmNlIGEgcmV0cnkgb2YgdGhlCisJCQkJCWluaXRpYWwgUkVBRCgxMCkgY29tbWFuZCk7CiAJCQkJbyA9IENBUEFDSVRZX09LIChhY2NlcHQgdGhlIGNhcGFjaXR5CiAJCQkJCXJlcG9ydGVkIGJ5IHRoZSBkZXZpY2UpOwogCQkJCXIgPSBJR05PUkVfUkVTSURVRSAodGhlIGRldmljZSByZXBvcnRzCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDI5ODAxZjcuLmU1MGZjNmUgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xNzM5LDcgKzE3MzksNyBAQAogRjoJZHJpdmVycy9uZXQvZW5pYy8KIAogQ0lSUlVTIExPR0lDIEVQOTNYWCBFVEhFUk5FVCBEUklWRVIKLU06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CitNOglIYXJ0bGV5IFN3ZWV0ZW4gPGhzd2VldGVuQHZpc2lvbmVuZ3JhdmVycy5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC00MjUyLDggKzQyNTIsNyBAQAogRjoJaW5jbHVkZS9saW51eC9tbWMvCiAKIE1VTFRJTUVESUEgQ0FSRCAoTU1DKSBFVEMuIE9WRVIgU1BJCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglkcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYwogRjoJaW5jbHVkZS9saW51eC9zcGkvbW1jX3NwaS5oCiAKQEAgLTQ2MDMsNyArNDYwMiw2IEBACiAKIE9NQVAgVVNCIFNVUFBPUlQKIE06CUZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPgotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9iYWxiaS91c2IuZ2l0CkBAIC00OTQ3LDYgKzQ5NDUsNyBAQAogRjoJZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi11bmljb3JlMzJpby5oCiBGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB1djMuYwogRjoJZHJpdmVycy92aWRlby9mYi1wdXYzLmMKK0Y6CWRyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKIAogUE1DIFNJRVJSQSBNYXhSQUlEIERSSVZFUgogTToJQW5pbCBSYXZpbmRyYW5hdGggPGFuaWxfcmF2aW5kcmFuYXRoQHBtYy1zaWVycmEuY29tPgpAQCAtNTk4NCw3ICs1OTgzLDYgQEAKIEY6CWRyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4KgogCiBTUEkgU1VCU1lTVEVNCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIE06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KIEw6CXNwaS1kZXZlbC1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3Qvc3BpLWRldmVsLWdlbmVyYWwvbGlzdC8KQEAgLTY0MzIsOSArNjQzMCw4IEBACiBGOglkcml2ZXJzL3VzYi9taXNjL3JpbzUwMCoKIAogVVNCIEVIQ0kgRFJJVkVSCi1NOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIEw6CWxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU9kZCBGaXhlcworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL3VzYi9laGNpLnR4dAogRjoJZHJpdmVycy91c2IvaG9zdC9laGNpKgogCkBAIC02NDQ4LDkgKzY0NDUsMTAgQEAKIEY6CWRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvCiAKIFVTQiBHQURHRVQvUEVSSVBIRVJBTCBTVUJTWVNURU0KLU06CURhdmlkIEJyb3duZWxsIDxkYnJvd25lbGxAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorTToJRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvZ2FkZ2V0CitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2JhbGJpL3VzYi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdXNiL2dhZGdldC8KIEY6CWluY2x1ZGUvbGludXgvdXNiL2dhZGdldCoKQEAgLTY0OTIsOSArNjQ5MCw4IEBACiBGOglzb3VuZC91c2IvbWlkaS4qCiAKIFVTQiBPSENJIERSSVZFUgotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiBMOglsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCi1TOglPZGQgRml4ZXMKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi91c2Ivb2hjaS50eHQKIEY6CWRyaXZlcnMvdXNiL2hvc3Qvb2hjaSoKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCBhZmI4ZTBkLi5iYWRiOTIzOSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMwogUEFUQ0hMRVZFTCA9IDAKIFNVQkxFVkVMID0gMAotRVhUUkFWRVJTSU9OID0gLXJjMQorRVhUUkFWRVJTSU9OID0gLXJjMwogTkFNRSA9IFNuZWFreSBXZWFzZWwKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTM3OCw3ICszNzgsNyBAQAogCiAjIFJlYWQgS0VSTkVMUkVMRUFTRSBmcm9tIGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlIChpZiBpdCBleGlzdHMpCiBLRVJORUxSRUxFQVNFID0gJChzaGVsbCBjYXQgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UgMj4gL2Rldi9udWxsKQotS0VSTkVMVkVSU0lPTiA9ICQoVkVSU0lPTikuJChQQVRDSExFVkVMKS4kKFNVQkxFVkVMKSQoRVhUUkFWRVJTSU9OKQorS0VSTkVMVkVSU0lPTiA9ICQoVkVSU0lPTikkKGlmICQoUEFUQ0hMRVZFTCksLiQoUEFUQ0hMRVZFTCkkKGlmICQoU1VCTEVWRUwpLC4kKFNVQkxFVkVMKSkpJChFWFRSQVZFUlNJT04pCiAKIGV4cG9ydCBWRVJTSU9OIFBBVENITEVWRUwgU1VCTEVWRUwgS0VSTkVMUkVMRUFTRSBLRVJORUxWRVJTSU9OCiBleHBvcnQgQVJDSCBTUkNBUkNIIENPTkZJR19TSEVMTCBIT1NUQ0MgSE9TVENGTEFHUyBDUk9TU19DT01QSUxFIEFTIExEIENDCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogCiBkZWZpbmUgZmlsZWNoa192ZXJzaW9uLmgKIAkoZWNobyBcI2RlZmluZSBMSU5VWF9WRVJTSU9OX0NPREUgJChzaGVsbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWV4cHIgJChWRVJTSU9OKSBcKiA2NTUzNiArICQoUEFUQ0hMRVZFTCkgXCogMjU2ICsgJChTVUJMRVZFTCkpOyAgICAgXAorCWV4cHIgJChWRVJTSU9OKSBcKiA2NTUzNiArIDAkKFBBVENITEVWRUwpIFwqIDI1NiArIDAkKFNVQkxFVkVMKSk7ICAgIFwKIAllY2hvICcjZGVmaW5lIEtFUk5FTF9WRVJTSU9OKGEsYixjKSAoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKSc7KQogZW5kZWYKIApAQCAtMTExMCwxMSArMTExMCw2IEBACiAKIFBIT05ZICs9IF9tb2RpbnN0XwogX21vZGluc3RfOgotCUBpZiBbIC16ICJgJChERVBNT0QpIC1WIDI+L2Rldi9udWxsIHwgZ3JlcCBtb2R1bGUtaW5pdC10b29sc2AiIF07IHRoZW4gXAotCQllY2hvICJXYXJuaW5nOiB5b3UgbWF5IG5lZWQgdG8gaW5zdGFsbCBtb2R1bGUtaW5pdC10b29scyI7IFwKLQkJZWNobyAiU2VlIGh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvZG9jcy9wb3N0LWhhbGxvd2Vlbi0yLjYudHh0IjtcCi0JCXNsZWVwIDE7IFwKLQlmaQogCUBybSAtcmYgJChNT0RMSUIpL2tlcm5lbAogCUBybSAtZiAkKE1PRExJQikvc291cmNlCiAJQG1rZGlyIC1wICQoTU9ETElCKS9rZXJuZWwKQEAgLTE1MzEsMTIgKzE1MjYsNyBAQAogCiAjIFJ1biBkZXBtb2Qgb25seSBpZiB3ZSBoYXZlIFN5c3RlbS5tYXAgYW5kIGRlcG1vZCBpcyBleGVjdXRhYmxlCiBxdWlldF9jbWRfZGVwbW9kID0gREVQTU9EICAkKEtFUk5FTFJFTEVBU0UpCi0gICAgICBjbWRfZGVwbW9kID0gXAotCWlmIFsgLXIgU3lzdGVtLm1hcCAtYSAteCAkKERFUE1PRCkgXTsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJJChERVBNT0QpIC1hZSAtRiBTeXN0ZW0ubWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJJChpZiAkKHN0cmlwICQoSU5TVEFMTF9NT0RfUEFUSCkpLCAtYiAkKElOU1RBTExfTU9EX1BBVEgpICkgICAgIFwKLQkJJChLRVJORUxSRUxFQVNFKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmaQorICAgICAgY21kX2RlcG1vZCA9ICQoc3JjdHJlZSkvc2NyaXB0cy9kZXBtb2Quc2ggJChERVBNT0QpICQoS0VSTkVMUkVMRUFTRSkKIAogIyBDcmVhdGUgdGVtcG9yYXJ5IGRpciBmb3IgbW9kdWxlIHN1cHBvcnQgZmlsZXMKICMgY2xlYW4gaXQgdXAgb25seSB3aGVuIGJ1aWxkaW5nIGFsbCBtb2R1bGVzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKaW5kZXggODIwNzk1NC4uMWQ0YjY1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwpAQCAtNDAyLDExICs0MDIsMTUgQEAKIAl9CiB9OwogCitzdGF0aWMgdTY0IGVwOTN4eF9ldGhfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlcDkzeHhfZXRoX2RldmljZSA9IHsKIAkubmFtZQkJPSAiZXA5M3h4LWV0aCIsCiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZlcDkzeHhfZXRoX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZlcDkzeHhfZXRoX2RhdGEsCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5kbWFfbWFzawkJPSAmZXA5M3h4X2V0aF9kbWFfbWFzaywKIAl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShlcDkzeHhfZXRoX3Jlc291cmNlKSwKIAkucmVzb3VyY2UJPSBlcDkzeHhfZXRoX3Jlc291cmNlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvS2NvbmZpZwppbmRleCBiOTJjMWU1Li4xNDM1ZmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvS2NvbmZpZwpAQCAtOTEsNiArOTEsMTEgQEAKIAloZWxwCiAJICBDb21tb24gc2V0dXAgY29kZSBmb3IgdGhlIGNhbWVyYSBpbnRlcmZhY2VzLgogCitjb25maWcgRVhZTk9TNF9TRVRVUF9VU0JfUEhZCisJYm9vbAorCWhlbHAKKwkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBVU0IgUEhZIGNvbnRyb2xsZXIKKwogIyBtYWNoaW5lIHN1cHBvcnQKIAogbWVudSAiRVhZTk9TNCBNYWNoaW5lcyIKQEAgLTE3Niw2ICsxODEsNyBAQAogCXNlbGVjdCBFWFlOT1M0X1NFVFVQX0kyQzMKIAlzZWxlY3QgRVhZTk9TNF9TRVRVUF9JMkM1CiAJc2VsZWN0IEVYWU5PUzRfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgRVhZTk9TNF9TRVRVUF9VU0JfUEhZCiAJc2VsZWN0IFNBTVNVTkdfREVWX1BXTQogCWhlbHAKIAkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgU2Ftc3VuZyBNb2JpbGUgTlVSSSBCb2FyZC4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZQppbmRleCBhOWJiOTRmLi42MGZlNWVjZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9NYWtlZmlsZQpAQCAtNTYsNCArNTYsNCBAQAogb2JqLSQoQ09ORklHX0VYWU5PUzRfU0VUVVBfU0RIQ0kpCSs9IHNldHVwLXNkaGNpLm8KIG9iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1NESENJX0dQSU8pCSs9IHNldHVwLXNkaGNpLWdwaW8ubwogCi1vYmotJChDT05GSUdfVVNCX1NVUFBPUlQpCQkrPSB1c2ItcGh5Lm8KK29iai0kKENPTkZJR19FWFlOT1M0X1NFVFVQX1VTQl9QSFkpCSs9IHNldHVwLXVzYi1waHkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L2NwdS5jCmluZGV4IDA4ODEzYTYuLjliYWJlNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvY3B1LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfVVNCX0hTUEhZLAorCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9VU0JfSFNQSFksCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihFWFlOT1M0X1BBX0hTUEhZKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXVzYi1waHkuaCBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9pbmNsdWRlL21hY2gvcmVncy11c2ItcGh5LmgKaW5kZXggNzAzMTE4ZC4uYzMzN2NmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L2luY2x1ZGUvbWFjaC9yZWdzLXVzYi1waHkuaAorKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvaW5jbHVkZS9tYWNoL3JlZ3MtdXNiLXBoeS5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9fUExBVF9TNVBfUkVHU19VU0JfUEhZX0gKICNkZWZpbmUgX19QTEFUX1M1UF9SRUdTX1VTQl9QSFlfSAogCi0jZGVmaW5lIEVYWU5PUzRfSFNPVEdfUEhZUkVHKHgpCQkoKHgpICsgUzVQX1ZBX1VTQl9IU1BIWSkKKyNkZWZpbmUgRVhZTk9TNF9IU09UR19QSFlSRUcoeCkJCSgoeCkgKyBTM0NfVkFfVVNCX0hTUEhZKQogCiAjZGVmaW5lIEVYWU5PUzRfUEhZUFdSCQkJRVhZTk9TNF9IU09UR19QSFlSRUcoMHgwMCkKICNkZWZpbmUgUEhZMV9IU0lDX05PUk1BTF9NQVNLCQkoMHhmIDw8IDkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vczQvdXNiLXBoeS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXVzYi1waHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1leHlub3M0L3VzYi1waHkuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1leHlub3M0L3NldHVwLXVzYi1waHkuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zNC90aW1lLmMKaW5kZXggODZiOWZhMC4uZWJiOGYzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWV4eW5vczQvdGltZS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIAlyZXR1cm4gKGN5Y2xlX3QpIH5fX3Jhd19yZWFkbChTM0NfVElNRVJSRUcoMHg0MCkpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBleHlub3M0X3B3bTRfcmVzdW1lKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwY2xrOwpAQCAtMjE4LDYgKzIxOSw3IEBACiAJZXh5bm9zNF9wd21faW5pdCg0LCB+MCk7CiAJZXh5bm9zNF9wd21fc3RhcnQoNCwgMSk7CiB9CisjZW5kaWYKIAogc3RydWN0IGNsb2Nrc291cmNlIHB3bV9jbG9ja3NvdXJjZSA9IHsKIAkubmFtZQkJPSAicHdtX3RpbWVyNCIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYwppbmRleCBkODU1OTM0Li5mNWE1MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMKQEAgLTI4NCwxNCArMjg0LDE1IEBACiAJZG1hX2Jhc2UgPSBpb3JlbWFwKHJlc1swXS5zdGFydCwgcmVzb3VyY2Vfc2l6ZSgmcmVzWzBdKSk7CiAJaWYgKCFkbWFfYmFzZSkgewogCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gaW9yZW1hcFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBleGl0X2RldmljZV9wdXQ7CiAJfQogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBBUlJBWV9TSVpFKHJlcykpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhZGQgcmVzb3VyY2VzIGZvciAlcyVkXG4iLAogCQkJX19mdW5jX18sIHBkZXYtPm5hbWUsIHBkZXYtPmlkKTsKLQkJZ290byBleGl0X2RldmljZV9kZWw7CisJCWdvdG8gZXhpdF9kZXZpY2VfcHV0OwogCX0KIAogCXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9zeXN0ZW1fZG1hX3BsYXRfaW5mbyksIEdGUF9LRVJORUwpOwpAQCAtMjk5LDcgKzMwMCw3IEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgJ3AnIGZvciAlc1xuIiwKIAkJCV9fZnVuY19fLCBwZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBleGl0X2RldmljZV9wdXQ7CisJCWdvdG8gZXhpdF9kZXZpY2VfZGVsOwogCX0KIAogCWQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb21hcF9kbWFfZGV2X2F0dHIpLCBHRlBfS0VSTkVMKTsKQEAgLTM4MCwxMCArMzgxLDEwIEBACiAJa2ZyZWUoZCk7CiBleGl0X3JlbGVhc2VfcDoKIAlrZnJlZShwKTsKLWV4aXRfZGV2aWNlX3B1dDoKLQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOwogZXhpdF9kZXZpY2VfZGVsOgogCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CitleGl0X2RldmljZV9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IGQ1NDk2OWIuLjVkZTZlYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0yNiwxMyArMjYsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwppbmRleCBhZTI5NjNhLi41ZGFjOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpAQCAtNjIyLDE5ICs2MjIsMTkgQEAKIAkJCSBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwxX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMCwKIAkucGFkcwkJPSBzZXJpYWwxX3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWwxX3BhZHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCmluZGV4IDczZmE5MGIuLjYzZGUyZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtNDQzMHNkcC5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl7IEVUSF9LUzg4NTFfSVJRLAlHUElPRl9JTiwJCSJldGhfaXJxIgl9LAogfTsKIAotc3RhdGljIGludCBvbWFwX2V0aGVybmV0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfZXRoZXJuZXRfaW5pdCh2b2lkKQogewogCWludCBzdGF0dXM7CiAKQEAgLTMyMiw2ICszMjIsNyBAQAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUgICA9IHRydWUsCiAJCS5vY3JfbWFzawk9IE1NQ19WRERfMjlfMzAsCisJCS5ub19vZmZfaW5pdAk9IHRydWUsCiAJfSwKIAl7CiAJCS5tbWMJCT0gMSwKQEAgLTY4MSwxOSArNjgyLDE5IEBACiAJCQkgT01BUF9QSU5fT1VUUFVUIHwgT01BUF9NVVhfTU9ERTApLAogfTsKIAotc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhID0geworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2RhdGEgc2VyaWFsMl9kYXRhIF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9IDEsCiAJLnBhZHMJCT0gc2VyaWFsMl9wYWRzLAogCS5wYWRzX2NudAk9IEFSUkFZX1NJWkUoc2VyaWFsMl9wYWRzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9kYXRhIHNlcmlhbDNfZGF0YSBfX2luaXRkYXRhID0gewogCS5pZAkJPSAyLAogCS5wYWRzCQk9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQJPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQJCT0gMywKIAkucGFkcwkJPSBzZXJpYWw0X3BhZHMsCiAJLnBhZHNfY250CT0gQVJSQVlfU0laRShzZXJpYWw0X3BhZHMpLApAQCAtNzI5LDcgKzczMCw3IEBACiAKIAlpZiAob21hcF9yZXYoKSA9PSBPTUFQNDQzMF9SRVZfRVMxXzApCiAJCXBhY2thZ2UgPSBPTUFQX1BBQ0tBR0VfQ0JMOwotCW9tYXA0X211eF9pbml0KGJvYXJkX211eCwgcGFja2FnZSk7CisJb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBOVUxMLCBwYWNrYWdlKTsKIAogCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwNDQzMF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwNDQzMF9jb25maWcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwppbmRleCBmM2JlYjhlLi5iMTI0YmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYwpAQCAtMjcsMTMgKzI3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2xlZC5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKaW5kZXggYzYzMTE1Yi4uNzc0NTZkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCkBAIC02Myw4ICs2Myw2IEBACiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9DUwk0CiAjZGVmaW5lIFNCX1QzNV9TTVNDOTExWF9HUElPCTY1CiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLXNtc2M5MTF4Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggMDhmMDhlOC4uYzNhOWZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtNDgsNiArNDgsNyBAQAogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAiY29udHJvbC5oIgorI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19MRURTX0dQSU8pIHx8IGRlZmluZWQoQ09ORklHX0xFRFNfR1BJT19NT0RVTEUpCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGNtX3QzNTE3X2xlZHNbXSA9IHsKQEAgLTE3Nyw3ICsxNzgsNyBAQAogCS5yZXNldF9ncGlvX3BvcnRbMl0gID0gLUVJTlZBTCwKIH07CiAKLXN0YXRpYyBpbnQgY21fdDM1MTdfaW5pdF91c2JoKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjbV90MzUxN19pbml0X3VzYmgodm9pZCkKIHsKIAlpbnQgZXJyOwogCkBAIC0yMDMsOCArMjA0LDYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfTVREX05BTkRfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjbV90MzUxN19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggY2Y1MjBkNy4uMzQ5NTZlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTYxLDggKzYxLDYgQEAKICNpbmNsdWRlICJ0aW1lci1ncC5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KICNkZWZpbmUgT01BUF9ETTkwMDBfR1BJT19JUlEJMjUKICNkZWZpbmUgT01BUDNfREVWS0lUX1RTX0dQSU8JMjcKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCmluZGV4IGJlNzE0MjYuLjdmMjFkMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKQEAgLTU0LDggKzU0LDYgQEAKICNpbmNsdWRlICJwbS5oIgogI2luY2x1ZGUgImNvbW1vbi1ib2FyZC1kZXZpY2VzLmgiCiAKLSNkZWZpbmUgTkFORF9CTE9DS19TSVpFCQlTWl8xMjhLCi0KIC8qCiAgKiBPTUFQMyBCZWFnbGUgcmV2aXNpb24KICAqIFJ1biB0aW1lIGRldGVjdGlvbiBvZiBCZWFnbGUgcmV2aXNpb24gaXMgZG9uZSBieSByZWFkaW5nIEdQSU8uCkBAIC0xMDYsNiArMTA0LDkgQEAKIAliZWFnbGVfcmV2ID0gZ3Bpb19nZXRfdmFsdWUoMTcxKSB8IChncGlvX2dldF92YWx1ZSgxNzIpIDw8IDEpCiAJCQl8IChncGlvX2dldF92YWx1ZSgxNzMpIDw8IDIpOwogCisJZ3Bpb19mcmVlX2FycmF5KG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MsCisJCQlBUlJBWV9TSVpFKG9tYXAzX2JlYWdsZV9yZXZfZ3Bpb3MpKTsKKwogCXN3aXRjaCAoYmVhZ2xlX3JldikgewogCWNhc2UgNzoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDMgQmVhZ2xlIFJldjogQXgvQnhcbiIpOwpAQCAtNTc5LDYgKzU4MCw5IEBACiAJb21hcF9uYW5kX2ZsYXNoX2luaXQoTkFORF9CVVNXSURUSF8xNiwgb21hcDNiZWFnbGVfbmFuZF9wYXJ0aXRpb25zLAogCQkJICAgICBBUlJBWV9TSVpFKG9tYXAzYmVhZ2xlX25hbmRfcGFydGl0aW9ucykpOwogCisJLyogRW5zdXJlIG1zZWN1cmUgaXMgbXV4J2QgdG8gYmUgYWJsZSB0byBzZXQgdGhlIFJUQy4gKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic3lzX2RybV9tc2VjdXJlIiwgT01BUF9QSU5fT0ZGX09VVFBVVF9ISUdIKTsKKwogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UxIiwgT01BUF9QSU5fT1VUUFVUKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IDFkMTA3MzYuLjJhMGJiNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgpAQCAtNDEsNyArNDIsNiBAQAogCiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpAQCAtNTcsOCArNTcsNiBAQAogI2RlZmluZSBQQU5ET1JBX1dJRklfTlJFU0VUX0dQSU8JMjMKICNkZWZpbmUgT01BUDNfUEFORE9SQV9UU19HUElPCQk5NAogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRQkJCVNaXzEyOEsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG9tYXAzcGFuZG9yYV9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCA4Mjg3MmQ3Li41ZjY0OWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01Niw4ICs1Niw2IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKLQogI2RlZmluZSBPTUFQM19BQ19HUElPCQkxMzYKICNkZWZpbmUgT01BUDNfVFNfR1BJTwkJMTYyCiAjZGVmaW5lIFRCX0JMX1BXTV9USU1FUgkJOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCA5MDQ4NWZjLi4wY2ZlMjAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNTI2LDE5ICs1MjYsMTkgQEAKIAkJCSBPTUFQX1BJTl9PVVRQVVQgfCBPTUFQX01VWF9NT0RFMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwyX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAxLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDJfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDJfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWwzX2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAyLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDNfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDNfcGFkcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfZGF0YSBzZXJpYWw0X2RhdGEgX19pbml0ZGF0YSA9IHsKIAkuaWQgICAgICAgICAgICAgPSAzLAogCS5wYWRzICAgICAgICAgICA9IHNlcmlhbDRfcGFkcywKIAkucGFkc19jbnQgICAgICAgPSBBUlJBWV9TSVpFKHNlcmlhbDRfcGFkcyksCkBAIC02ODcsNyArNjg3LDcgQEAKIAogCWlmIChvbWFwX3JldigpID09IE9NQVA0NDMwX1JFVl9FUzFfMCkKIAkJcGFja2FnZSA9IE9NQVBfUEFDS0FHRV9DQkw7Ci0Jb21hcDRfbXV4X2luaXQoYm9hcmRfbXV4LCBwYWNrYWdlKTsKKwlvbWFwNF9tdXhfaW5pdChib2FyZF9tdXgsIE5VTEwsIHBhY2thZ2UpOwogCiAJaWYgKHdsMTJ4eF9zZXRfcGxhdGZvcm1fZGF0YSgmb21hcF9wYW5kYV93bGFuX2RhdGEpKQogCQlwcl9lcnIoImVycm9yIHNldHRpbmcgd2wxMnh4IGRhdGFcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCmluZGV4IDE1NTU5MTguLjE3NWUxYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bC5oPgpAQCAtNDUsNyArNDYsNiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogI2luY2x1ZGUgPHZpZGVvL29tYXAtcGFuZWwtZ2VuZXJpYy1kcGkuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CkBAIC02NSw4ICs2NSw2IEBACiAjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9DUEVOCTE2OAogI2RlZmluZSBPVkVST19HUElPX1VTQkhfTlJFU0VUCTE4MwogCi0jZGVmaW5lIE5BTkRfQkxPQ0tfU0laRSBTWl8xMjhLCi0KICNkZWZpbmUgT1ZFUk9fU01TQzkxMVhfQ1MgICAgICA1CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYX0dQSU8gICAgMTc2CiAjZGVmaW5lIE9WRVJPX1NNU0M5MTFYMl9DUyAgICAgNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBmNjI0N2U3Li45OTAzNjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtNDg4LDYgKzQ4OCw3IEBACiAJCS5uYW1lCQkJPSAiVjI4X0EiLAogCQkubWluX3VWCQkJPSAyODAwMDAwLAogCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYWx3YXlzX29uCQk9IHRydWUsIC8qIGR1ZSBWSU8gbGVhayB0byBBSUMzNCBWRERzICovCiAJCS5hcHBseV91VgkJPSB0cnVlLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCkBAIC01ODIsNyArNTgzLDcgQEAKIHsKIAkvKiBGSVhNRSB0aGlzIGdwaW8gc2V0dXAgaXMganVzdCBhIHBsYWNlaG9sZGVyIGZvciBub3cgKi8KIAlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA2LCBHUElPRl9PVVRfSU5JVF9MT1csICJiYWNrbGlnaHRfcHdtIik7Ci0JZ3Bpb19yZXF1ZXN0X29uZShncGlvICsgNywgR1BJT0ZfT1VUX0lOSVRfSElHSCwgInNwZWFrZXJfZW4iKTsKKwlncGlvX3JlcXVlc3Rfb25lKGdwaW8gKyA3LCBHUElPRl9PVVRfSU5JVF9MT1csICJzcGVha2VyX2VuIik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20tZGlzcGxheS5jCmluZGV4IGM3YzZiZWIuLmQ0NjgzYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1kaXNwbGF5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLWRpc3BsYXkuYwpAQCAtMjYsNyArMjYsNyBAQAogCXsgTENEX1BBTkVMX1FWR0FfR1BJTywJR1BJT0ZfT1VUX0lOSVRfSElHSCwgImxjZCBxdmdhIgkgfSwKIH07CiAKLXN0YXRpYyB2b2lkIHpvb21fbGNkX3BhbmVsX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCB6b29tX2xjZF9wYW5lbF9pbml0KHZvaWQpCiB7CiAJem9vbV9sY2RfZ3Bpb3NbMF0uZ3BpbyA9IChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTM18wKSA/CiAJCQlMQ0RfUEFORUxfUkVTRVRfR1BJT19QUk9EIDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuYwppbmRleCBlOTQ5MDNiLi45NGNjZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5jCkBAIC04NSwxOCArODUsMTggQEAKIAlzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gKnNwaV9iaSA9ICZhZHM3ODQ2X3NwaV9ib2FyZF9pbmZvOwogCWludCBlcnI7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QoZ3Bpb19wZW5kb3duLCAiVFMgUGVuRG93biIpOwotCWlmIChlcnIpIHsKLQkJcHJfZXJyKCJDb3VsZCBub3Qgb2J0YWluIGdwaW8gZm9yIFRTIFBlbkRvd246ICVkXG4iLCBlcnIpOwotCQlyZXR1cm47CisJaWYgKGJvYXJkX3BkYXRhICYmIGJvYXJkX3BkYXRhLT5nZXRfcGVuZG93bl9zdGF0ZSkgeworCQllcnIgPSBncGlvX3JlcXVlc3Rfb25lKGdwaW9fcGVuZG93biwgR1BJT0ZfSU4sICJUU1BlbkRvd24iKTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJDb3VsZG4ndCBvYnRhaW4gZ3BpbyBmb3IgVFNQZW5Eb3duOiAlZFxuIiwgZXJyKTsKKwkJCXJldHVybjsKKwkJfQorCQlncGlvX2V4cG9ydChncGlvX3BlbmRvd24sIDApOworCisJCWlmIChncGlvX2RlYm91bmNlKQorCQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKIAl9CiAKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3BlbmRvd24pOwotCWdwaW9fZXhwb3J0KGdwaW9fcGVuZG93biwgMCk7Ci0KLQlpZiAoZ3Bpb19kZWJvdW5jZSkKLQkJZ3Bpb19zZXRfZGVib3VuY2UoZ3Bpb19wZW5kb3duLCBncGlvX2RlYm91bmNlKTsKLQogCWFkczc4NDZfY29uZmlnLmdwaW9fcGVuZG93biA9IGdwaW9fcGVuZG93bjsKIAogCXNwaV9iaS0+YnVzX251bQk9IGJ1c19udW07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi1ib2FyZC1kZXZpY2VzLmgKaW5kZXggZWI4MGIzYi4uNjc5NzE5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24tYm9hcmQtZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLWJvYXJkLWRldmljZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KICNkZWZpbmUgX19PTUFQX0NPTU1PTl9CT0FSRF9ERVZJQ0VTX18KIAorI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJU1pfMTI4SworCiBzdHJ1Y3QgdHdsNDAzMF9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG10ZF9wYXJ0aXRpb247CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKaW5kZXggN2I4NTU4NS4uNWI4Y2E2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAogCVdBUk4oSVNfRVJSKG9kKSwgImNvdWxkIG5vdCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXNcbiIsIG9oX25hbWUpOwogCi0JcmV0dXJuIFBUUl9FUlIob2QpOworCXJldHVybiBJU19FUlIob2QpID8gUFRSX0VSUihvZCkgOiAwOwogfQogcG9zdGNvcmVfaW5pdGNhbGwob21hcDRfbDNfaW5pdCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuYwppbmRleCBiMmYzMGJlLi42Njg2OGM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKQogewogCXUzMiByZWc7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJaWYgKHBvd2VyX29uKSB7CiAJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKQEAgLTE1Nyw5ICsxNTgsMTUgQEAKIAkJCU9NQVA0X01NQzFfUFdSRE5aX01BU0sgfAogCQkJT01BUDRfVVNCQzFfSUNVU0JfUFdSRE5aX01BU0spOwogCQlvbWFwNF9jdHJsX3BhZF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCS8qIDQgbWljcm9zZWMgZGVsYXkgZm9yIGNvbXBhcmF0b3IgdG8gZ2VuZXJhdGUgYW4gZXJyb3IqLwotCQl1ZGVsYXkoNCk7Ci0JCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNSk7CisJCWRvIHsKKwkJCXJlZyA9IG9tYXA0X2N0cmxfcGFkX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJCWlmICghKHJlZyAmIE9NQVA0X01NQzFfUEJJQVNMSVRFX1ZNT0RFX0VSUk9SX01BU0spKQorCQkJCWJyZWFrOworCQkJdXNsZWVwX3JhbmdlKDEwMCwgMjAwKTsKKwkJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCiAJCWlmIChyZWcgJiBPTUFQNF9NTUMxX1BCSUFTTElURV9WTU9ERV9FUlJPUl9NQVNLKSB7CiAJCQlwcl9lcnIoIlBiaWFzIFZvbHRhZ2UgaXMgbm90IHNhbWUgYXMgTERPXG4iKTsKIAkJCS8qIENhdXRpb24gOiBPbiBWTU9ERV9FUlJPUiBQb3dlciBEb3duIE1NQyBJTyAqLwpAQCAtMzMxLDYgKzMzOCw5IEBACiAJaWYgKGMtPm5vX29mZikKIAkJbW1jLT5zbG90c1swXS5ub19vZmYgPSAxOwogCisJaWYgKGMtPm5vX29mZl9pbml0KQorCQltbWMtPnNsb3RzWzBdLm5vX3JlZ3VsYXRvcl9vZmZfaW5pdCA9IGMtPm5vX29mZl9pbml0OworCiAJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKIAkJbW1jLT5zbG90c1swXS52Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXAgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKaW5kZXggZjExOTM0OC4uZjc1N2U3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApAQCAtMTgsNiArMTgsNyBAQAogCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCiAJYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwogCWJvb2wJbm9fb2ZmOwkJLyogcG93ZXJfc2F2aW5nIGFuZCBwb3dlciBpcyBub3QgdG8gZ28gb2ZmICovCisJYm9vbAlub19vZmZfaW5pdDsJLyogbm8gcG93ZXIgb2ZmIHdoZW4gbm90IGluIE1NQyBzbGVlcCBzdGF0ZSAqLwogCWJvb2wJdmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwOyAvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCiAJaW50CWdwaW9fY2Q7CS8qIG9yIC1FSU5WQUwgKi8KIAlpbnQJZ3Bpb193cDsJLyogb3IgLUVJTlZBTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggYTRhYjFlMy4uYzdmYjIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC04Myw2ICs4Myw5IEBACiB2b2lkIG9tYXBfbXV4X3dyaXRlX2FycmF5KHN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbiwKIAkJCQkgc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9tdXgpCiB7CisJaWYgKCFib2FyZF9tdXgpCisJCXJldHVybjsKKwogCXdoaWxlIChib2FyZF9tdXgtPnJlZ19vZmZzZXQgIT0gT01BUF9NVVhfVEVSTUlOQVRPUikgewogCQlvbWFwX211eF93cml0ZShwYXJ0aXRpb24sIGJvYXJkX211eC0+dmFsdWUsCiAJCQkgICAgICAgYm9hcmRfbXV4LT5yZWdfb2Zmc2V0KTsKQEAgLTkwNiw3ICs5MDksNyBAQAogdTE2IG9tYXBfbXV4X2dldF9ncGlvKGludCBncGlvKQogewogCXN0cnVjdCBvbWFwX211eF9wYXJ0aXRpb24gKnBhcnRpdGlvbjsKLQlzdHJ1Y3Qgb21hcF9tdXggKm07CisJc3RydWN0IG9tYXBfbXV4ICptID0gTlVMTDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocGFydGl0aW9uLCAmbXV4X3BhcnRpdGlvbnMsIG5vZGUpIHsKIAkJbSA9IG9tYXBfbXV4X2dldF9ieV9ncGlvKHBhcnRpdGlvbiwgZ3Bpbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaAppbmRleCAxMzdmMzIxLi4yMTMyMzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKQEAgLTMyMywxMCArMzIzLDEyIEBACiAKIC8qKgogICogb21hcDRfbXV4X2luaXQoKSAtIGluaXRpYWxpemUgbXV4IHN5c3RlbSB3aXRoIGJvYXJkIHNwZWNpZmljIHNldAotICogQGJvYXJkX211eDoJCUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZQorICogQGJvYXJkX3N1YnNldDoJQm9hcmQgc3BlY2lmaWMgbXV4IHRhYmxlCisgKiBAYm9hcmRfd2t1cF9zdWJzZXQ6CUJvYXJkIHNwZWNpZmljIG11eCB0YWJsZSBmb3Igd2FrZXVwIGluc3RhbmNlCiAgKiBAZmxhZ3M6CQlPTUFQIHBhY2thZ2UgdHlwZSB1c2VkIGZvciB0aGUgYm9hcmQKICAqLwotaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4LCBpbnQgZmxhZ3MpOworaW50IG9tYXA0X211eF9pbml0KHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfc3Vic2V0LAorCXN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfd2t1cF9zdWJzZXQsIGludCBmbGFncyk7CiAKIC8qKgogICogb21hcF9tdXhfaW5pdCAtIHByaXZhdGUgbXV4IGluaXQgZnVuY3Rpb24sIGRvIG5vdCBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eDQ0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCmluZGV4IDlhNjY0NDUuLmY1YTc0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4NDR4eC5jCkBAIC0xMzA5LDcgKzEzMDksOCBAQAogI2RlZmluZSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbCAgTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsIGludCBmbGFncykKK2ludCBfX2luaXQgb21hcDRfbXV4X2luaXQoc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF9zdWJzZXQsCisJc3RydWN0IG9tYXBfYm9hcmRfbXV4ICpib2FyZF93a3VwX3N1YnNldCwgaW50IGZsYWdzKQogewogCXN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHNfY29yZTsKIAlzdHJ1Y3Qgb21hcF9iYWxsICpwYWNrYWdlX2JhbGxzX3drdXAgPSBvbWFwNF93a3VwX2NibF9jYnNfYmFsbDsKQEAgLTEzNDcsNyArMTM0OCw3IEBACiAJCQkgICAgT01BUF9NVVhfR1BJT19JTl9NT0RFMywKIAkJCSAgICBPTUFQNF9DVFJMX01PRFVMRV9QQURfV0tVUF9NVVhfUEJBU0UsCiAJCQkgICAgT01BUDRfQ1RSTF9NT0RVTEVfUEFEX1dLVVBfTVVYX1NJWkUsCi0JCQkgICAgb21hcDRfd2t1cF9tdXhtb2RlcywgTlVMTCwgYm9hcmRfc3Vic2V0LAorCQkJICAgIG9tYXA0X3drdXBfbXV4bW9kZXMsIE5VTEwsIGJvYXJkX3drdXBfc3Vic2V0LAogCQkJICAgIHBhY2thZ2VfYmFsbHNfd2t1cCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwppbmRleCBlMDM0Mjk0Li4yOTNmYTZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYwpAQCAtMTYyOCw3ICsxNjI4LDcgQEAKIAkJCXZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG9tYXBfaHdtb2QgKnRlbXBfb2g7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmICghZm4pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IGFiYzU0OGEuLmUxYzY5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTUxMDksNyArNTEwOSw3IEBACiAJJm9tYXA0NHh4X2l2YV9zZXExX2h3bW9kLAogCiAJLyoga2JkIGNsYXNzICovCi0vKgkmb21hcDQ0eHhfa2JkX2h3bW9kLCAqLworCSZvbWFwNDR4eF9rYmRfaHdtb2QsCiAKIAkvKiBtYWlsYm94IGNsYXNzICovCiAJJm9tYXA0NHh4X21haWxib3hfaHdtb2QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfcGh5X2ludGVybmFsLmMKaW5kZXggZjQ3ODEzZS4uNTg3NzVlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX3BoeV9pbnRlcm5hbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9waHlfaW50ZXJuYWwuYwpAQCAtNTYsOCArNTYsMTAgQEAKIAkvKiBQb3dlciBkb3duIHRoZSBwaHkgKi8KIAlfX3Jhd193cml0ZWwoUEhZX1BELCBjdHJsX2Jhc2UgKyBDT05UUk9MX0RFVl9DT05GKTsKIAotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCWlvdW5tYXAoY3RybF9iYXNlKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJcGh5Y2xrID0gY2xrX2dldChkZXYsICJvY3Ayc2NwX3VzYl9waHlfaWNrIik7CiAJaWYgKElTX0VSUihwaHljbGspKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggMGQ0NjhlOS4uODE2OTUzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNiBAQAogb2JqLQkJCQk6PQogCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IHMzYzI0MTAubwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwKQkrPSBpcnEubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gZG1hLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMF9ETUEpCSs9IGRtYS5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gcG0ubyBzbGVlcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NTQxMjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLQotc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzID0gewotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2NwdWZyZXEuYwppbmRleCAyMjA0NmUyLi4xNTNhZjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHVmcmVxLmMKQEAgLTEwMSwxMiArMTAxLDE0IEBACiAJdW5zaWduZWQgbG9uZyB0bXAsIHRtcDE7CiAJdm9pZCBfX2lvbWVtICpyZWcgPSBOVUxMOwogCi0JaWYgKGNoID09IERNQzApCisJaWYgKGNoID09IERNQzApIHsKIAkJcmVnID0gKFM1UF9WQV9ETUMwICsgMHgzMCk7Ci0JZWxzZSBpZiAoY2ggPT0gRE1DMSkKKwl9IGVsc2UgaWYgKGNoID09IERNQzEpIHsKIAkJcmVnID0gKFM1UF9WQV9ETUMxICsgMHgzMCk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgRE1DIHBvcnRcbiIpOworCQlyZXR1cm47CisJfQogCiAJLyogRmluZCBjdXJyZW50IERSQU0gZnJlcXVlbmN5ICovCiAJdG1wID0gczVwdjIxMF9kcmFtX2NvbmZbY2hdLmZyZXE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXV4NTAwL2NwdS1kYjg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCmluZGV4IGMzYzQxNzYuLjQ1OThiMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvY3B1LWRiODUwMC5jCkBAIC0xNTksNiArMTU5LDkgQEAKIAkJLyogTm8gY3VzdG9tIGRhdGEgeWV0ICovCiAJfTsKIAorCWlmIChjcHVfaXNfdTg1MDB2MigpKQorCQlwZGF0YS5zdXBwb3J0c19zbGVlcG1vZGUgPSB0cnVlOworCiAJZGJ4NTAwX2FkZF9ncGlvcyhBUlJBWV9BTkRfU0laRShkYjg1MDBfZ3Bpb19iYXNlKSwKIAkJCSBJUlFfREI4NTAwX0dQSU8wLCAmcGRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL2luY2x1ZGUvcGxhdC9ncGlvLmggYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBlYTE5YTViLi5kNWQ3ZTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW5vbWFkaWsvaW5jbHVkZS9wbGF0L2dwaW8uaApAQCAtOTAsNiArOTAsNyBAQAogCWludCBudW1fZ3BpbzsKIAl1MzIgKCpnZXRfc2Vjb25kYXJ5X3N0YXR1cykodW5zaWduZWQgaW50IGJhbmspOwogCXZvaWQgKCpzZXRfaW9mb3JjZSkoYm9vbCBlbmFibGUpOworCWJvb2wgc3VwcG9ydHNfc2xlZXBtb2RlOwogfTsKIAogI2VuZGlmIC8qIF9fQVNNX1BMQVRfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKaW5kZXggMzA4MzE5NS4uMGQ4ODQ5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZmxhc2guaApAQCAtMTEsNiArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogZXh0ZXJuIHZvaWQgb21hcDFfc2V0X3ZwcChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW5hYmxlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvdm1tLmgKaW5kZXggMzJhMmY2Yy4uZTk5MmI5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pb3ZtbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW92bW0uaApAQCAtMjksOSArMjksNiBAQAogICogbG93ZXIgMTYgYml0IGlzIHVzZWQgZm9yIGgvdyBhbmQgdXBwZXIgMTYgYml0IGlzIGZvciBzL3cuCiAgKi8KICNkZWZpbmUgSU9WTUZfU1dfU0hJRlQJCTE2Ci0jZGVmaW5lIElPVk1GX0hXX1NJWkUJCSgxIDw8IElPVk1GX1NXX1NISUZUKQotI2RlZmluZSBJT1ZNRl9IV19NQVNLCQkoSU9WTUZfSFdfU0laRSAtIDEpCi0jZGVmaW5lIElPVk1GX1NXX01BU0sJCSh+SU9WTUZfSFdfTUFTSylVTAogCiAvKgogICogaW92bWE6IGgvdyBmbGFncyBkZXJpdmVkIGZyb20gY2FtIGFuZCByYW0gYXR0cmlidXRlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAppbmRleCBmMzhmZWY5Li5jN2I4NzQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKQEAgLTEwMSw2ICsxMDEsOSBAQAogCQkvKiBJZiB1c2luZyBwb3dlcl9zYXZpbmcgYW5kIHRoZSBNTUMgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLwogCQl1bnNpZ25lZCBub19vZmY6MTsKIAorCQkvKiBlTU1DIGRvZXMgbm90IGhhbmRsZSBwb3dlciBvZmYgd2hlbiBub3QgaW4gc2xlZXAgc3RhdGUgKi8KKwkJdW5zaWduZWQgbm9fcmVndWxhdG9yX29mZl9pbml0OjE7CisKIAkJLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLwogCQl1bnNpZ25lZCB2Y2NfYXV4X2Rpc2FibGVfaXNfc2xlZXA6MTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvdm1tLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwppbmRleCA1MWVmNDNlLi44M2EzN2M1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW92bW0uYwpAQCAtNjQ4LDcgKzY0OCw2IEBACiAJCQlyZXR1cm4gUFRSX0VSUih2YSk7CiAJfQogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTcwNiw3ICs3MDUsNiBAQAogCWlmICghdmEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZmxhZ3MgJj0gSU9WTUZfSFdfTUFTSzsKIAlmbGFncyB8PSBJT1ZNRl9ESVNDT05UOwogCWZsYWdzIHw9IElPVk1GX0FMTE9DOwogCkBAIC03OTUsNyArNzkzLDYgQEAKIAlpZiAoIXZhKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZsYWdzICY9IElPVk1GX0hXX01BU0s7CiAJZmxhZ3MgfD0gSU9WTUZfTElORUFSOwogCWZsYWdzIHw9IElPVk1GX01NSU87CiAKQEAgLTg1Myw3ICs4NTAsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlwYSA9IHZpcnRfdG9fcGh5cyh2YSk7CiAKLQlmbGFncyAmPSBJT1ZNRl9IV19NQVNLOwogCWZsYWdzIHw9IElPVk1GX0xJTkVBUjsKIAlmbGFncyB8PSBJT1ZNRl9BTExPQzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKaW5kZXggYTNmNTBiMy4uNmFmM2QwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCiAJCQlvbWFwX3NyYW1fc2l6ZSA9IFNaXzI1Nks7CiAJCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGV0ZWN0IFNSQU0gc2l6ZVxuIik7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKIAkJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwogCQl9CiAJfQpAQCAtMjIxLDEwICsyMjEsMTAgQEAKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggPSBST1VORF9ET1dOKG9tYXBfc3JhbV9zaXplLCBQQUdFX1NJWkUpOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKLQlfX3Bmbl90b19waHlzKG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiksCi0Jb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKLQkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKKwlwcl9pbmZvKCJTUkFNOiBNYXBwZWQgcGEgMHglMDhsbHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkJKGxvbmcgbG9uZykgX19wZm5fdG9fcGh5cyhvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4pLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCQlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOwogCiAJLyoKIAkgKiBOb3JtYWxseSBkZXZpY2VtYXBzX2luaXQoKSB3b3VsZCBmbHVzaCBjYWNoZXMgYW5kIHRsYiBhZnRlcgpAQCAtMjUyLDcgKzI1Miw3IEBACiB2b2lkICpvbWFwX3NyYW1fcHVzaF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlpZiAoc2l6ZSA+IChvbWFwX3NyYW1fY2VpbCAtIChvbWFwX3NyYW1fYmFzZSArIFNSQU1fQk9PVExPQURFUl9TWikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm90IGVub3VnaCBzcGFjZSBpbiBTUkFNXG4iKTsKKwkJcHJfZXJyKCJOb3QgZW5vdWdoIHNwYWNlIGluIFNSQU1cbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwppbmRleCBjMTBkMTBjLi4yYWJmOTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzM2MyNDEwX2RtYV9jaGFuICpjcCkKK3N0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3N1c3BlbmRfY2hhbihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3ApCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgInN1c3BlbmRpbmcgZG1hIGNoYW5uZWwgJWRcbiIsIGNwLT5udW1iZXIpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggOWFlZTdlMS4uZmM4YzVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CkBAIC02NjgsMyArNjY5LDggQEAKIAogCWlycWRiZigiczNjMjQxMDogcmVnaXN0ZXJlZCBpbnRlcnJ1cHQgaGFuZGxlcnNcbiIpOwogfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjR4eF9pcnFfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9kZXYtb25lbmFuZC5jCmluZGV4IDZkYjkyNjIuLjIwMzM2YzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2Rldi1vbmVuYW5kLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LW9uZW5hbmQuYwpAQCAtMTUsOCArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9vbmVuYW5kLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgpAQCAtNDUsMTMgKzQzLDMgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwX29uZW5hbmRfcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBzNXBfb25lbmFuZF9yZXNvdXJjZXMsCiB9OwotCi12b2lkIHM1cF9vbmVuYW5kX3NldF9wbGF0ZGF0YShzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKLXsKLQlzdHJ1Y3Qgb25lbmFuZF9wbGF0Zm9ybV9kYXRhICpwZDsKLQotCXBkID0ga21lbWR1cChwZGF0YSwgc2l6ZW9mKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIHBsYXRmb3JtIGRhdGFcbiIsIF9fZnVuY19fKTsKLQlzNXBfZGV2aWNlX29uZW5hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSBwZDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCmluZGV4IGE2YzNkMzIuLmQ5NzNkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9tYXAtczVwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBTNVBfVkFfVFdECQlTNVBfVkFfQ09SRVBFUkkoMHg2MDApCiAjZGVmaW5lIFM1UF9WQV9HSUNfRElTVAkJUzVQX1ZBX0NPUkVQRVJJKDB4MTAwMCkKIAotI2RlZmluZSBTNVBfVkFfVVNCX0hTUEhZCVMzQ19BRERSKDB4MDI5MDAwMDApCisjZGVmaW5lIFMzQ19WQV9VU0JfSFNQSFkJUzNDX0FERFIoMHgwMjkwMDAwMCkKIAogI2RlZmluZSBWQV9WSUMoeCkJCShTM0NfVkFfSVJRICsgKCh4KSAqIDB4MTAwMDApKQogI2RlZmluZSBWQV9WSUMwCQkJVkFfVklDKDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LW9uZW5hbmQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCmluZGV4IDQ1ZWM3MzIuLmY1NGFlNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtb25lbmFuZC5jCkBAIC0xMyw4ICsxMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CkBAIC00MywxMyArNDEsMyBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2Nfb25lbmFuZF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHMzY19vbmVuYW5kX3Jlc291cmNlcywKIH07Ci0KLXZvaWQgczNjX29uZW5hbmRfc2V0X3BsYXRkYXRhKHN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQotewotCXN0cnVjdCBvbmVuYW5kX3BsYXRmb3JtX2RhdGEgKnBkOwotCi0JcGQgPSBrbWVtZHVwKHBkYXRhLCBzaXplb2Yoc3RydWN0IG9uZW5hbmRfcGxhdGZvcm1fZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcGQpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgcGxhdGZvcm0gZGF0YVxuIiwgX19mdW5jX18pOwotCXMzY19kZXZpY2Vfb25lbmFuZC5kZXYucGxhdGZvcm1fZGF0YSA9IHBkOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAppbmRleCBiNjFiOGVlLi40YWYxMDhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaApAQCAtNzUsMTAgKzc1LDggQEAKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cGMxMDBfZGV2aWNlX3NwaTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXB2MjEwX2RldmljZV9zcGkwOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwdjIxMF9kZXZpY2Vfc3BpMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NDBfZGV2aWNlX3NwaTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NDQwX2RldmljZV9zcGkxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjQ1MF9kZXZpY2Vfc3BpMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHM1cDY0NTBfZGV2aWNlX3NwaTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzNXA2NHgwX2RldmljZV9zcGkwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczVwNjR4MF9kZXZpY2Vfc3BpMTsKIAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC90cmFwcy5jCmluZGV4IGYwM2NiMjcuLmJkM2U1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL3RyYXBzLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogCWNhc2UgRVhDRVBfVFJBUDoKIAljYXNlIEVYQ0VQX1VOSU1QSU5TOgotCQlpZiAoZ2V0X3VzZXIob3Bjb2RlLCAodWludDhfdCBfX3VzZXIgKilyZWdzLT5wYykgIT0gMCkKKwkJaWYgKHByb2JlX2tlcm5lbF9yZWFkKCZvcGNvZGUsICh1OCAqKXJlZ3MtPnBjLCAxKSA8IDApCiAJCQlicmVhazsKIAkJaWYgKG9wY29kZSA9PSAweGZmKSB7CiAJCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUtQT0lOVCwgc3RyLCByZWdzLCBjb2RlLCAwLCAwKSkKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2ZjcwMmE2Li4xM2M0ODE0IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC00NCw2ICs0NCw3IEBACiAgIFJPX0RBVEEoUEFHRV9TSVpFKQogCiAgIC8qIHdyaXRlYWJsZSAqLworICBfc2RhdGEgPSAuOyAgICAgLyogU3RhcnQgb2YgcncgZGF0YSBzZWN0aW9uICovCiAgIFJXX0RBVEFfU0VDVElPTigzMiwgUEFHRV9TSVpFLCBUSFJFQURfU0laRSkKICAgX2VkYXRhID0gLjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUyBiL2FyY2gvbW4xMDMwMC9tbS9jYWNoZS1kYmctZmx1c2gtYnktcmVnLlMKaW5kZXggNjY1OTE5Zi4uYTc3NWVhNSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL21tL2NhY2hlLWRiZy1mbHVzaC1ieS1yZWcuUworKysgYi9hcmNoL21uMTAzMDAvbW0vY2FjaGUtZGJnLWZsdXNoLWJ5LXJlZy5TCkBAIC0xMjAsMTQgKzEyMCwxNCBAQAogCSMgY29uZGl0aW9uYWxseSBwdXJnZSB0aGlzIGxpbmUgaW4gYWxsIHdheXMKIAltb3YJZDEsKEwxX0NBQ0hFX1dBWURJU1AqMCxhMCkKIAotZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfbm9fZGNhY2hlOgorZGVidWdnZXJfbG9jYWxfY2FjaGVfZmx1c2hpbnZfb25lX25vX2RjYWNoZToKIAkjCiAJIyBub3cgdHJ5IHRvIGZsdXNoIHRoZSBpY2FjaGUKIAkjCiAJbW92CUNIQ1RSLGEwCiAJbW92aHUJKGEwKSxkMAogCWJ0c3QJQ0hDVFJfSUNFTixkMAotCWJlcQltbjEwMzAwX2xvY2FsX2ljYWNoZV9pbnZfcmFuZ2VfcmVnX2VuZAorCWJlcQlkZWJ1Z2dlcl9sb2NhbF9jYWNoZV9mbHVzaGludl9vbmVfZW5kCiAKIAlMT0NBTF9DTElfU0FWRShkMSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZSBiL2FyY2gvcG93ZXJwYy9ib290Ly5naXRpZ25vcmUKaW5kZXggM2Q4MGMzZS4uMTJkYTc3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvLmdpdGlnbm9yZQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC8uZ2l0aWdub3JlCkBAIC0xLDUgKzEsNCBAQAogYWRkbm90ZQotZHRjCiBlbXB0eS5jCiBoYWNrLWNvZmYKIGluZmJsb2NrLmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvLmdpdGlnbm9yZSBiL2FyY2gvcG93ZXJwYy9ib290L2R0Yy1zcmMvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdjM2Y5NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdGMtc3JjLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWR0Yy1sZXhlci5sZXguYwotZHRjLXBhcnNlci50YWIuYwotZHRjLXBhcnNlci50YWIuaApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Jpby5oCmluZGV4IGQ5MDJhYmQuLmIxZDJkZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yaW8uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmlvLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgQVNNX1BQQ19SSU9fSAogCiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9yaW9faW5pdCh2b2lkKTsKLSNpZmRlZiBDT05GSUdfUkFQSURJTworI2lmZGVmIENPTkZJR19GU0xfUklPCiBleHRlcm4gaW50IGZzbF9yaW9fbWNoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBmc2xfcmlvX21jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHtyZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCmluZGV4IDM0ZDI3MjIuLjlmYjkzMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKQEAgLTE5NzksNyArMTk3OSw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHg4MDI0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJlNTUwMCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTU1MDAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9CT09LRSB8IFBQQ19GRUFUVVJFX0hBU19GUFUsCiAJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9UWVBFX0ZTTF9FIHwgTU1VX0ZUUl9CSUdfUEhZUyB8CiAJCQlNTVVfRlRSX1VTRV9UTEJJTFgsCiAJCS5pY2FjaGVfYnNpemUJCT0gNjQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCmluZGV4IGYyYzkwNmIuLjhjMzExMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jCkBAIC04MiwxMSArODIsMjkgQEAKIH0KIGVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9wYXJzZV9tZW0pOwogCisvKgorICogb3ZlcmxhcHNfaW5pdHJkIC0gY2hlY2sgZm9yIG92ZXJsYXAgd2l0aCBwYWdlIGFsaWduZWQgZXh0ZW5zaW9uIG9mCisgKiBpbml0cmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG92ZXJsYXBzX2luaXRyZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKCFpbml0cmRfc3RhcnQpCisJCXJldHVybiAwOworCisJcmV0dXJuCShzdGFydCArIHNpemUpID4gX0FMSUdOX0RPV04oaW5pdHJkX3N0YXJ0LCBQQUdFX1NJWkUpICYmCisJCQlzdGFydCA8PSBfQUxJR05fVVAoaW5pdHJkX2VuZCwgUEFHRV9TSVpFKTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKwogLyoqCiAgKiBtb3ZlX2RldmljZV90cmVlIC0gbW92ZSB0cmVlIHRvIGFuIHVudXNlZCBhcmVhLCBpZiBuZWVkZWQuCiAgKgogICogVGhlIGRldmljZSB0cmVlIG1heSBiZSBhbGxvY2F0ZWQgYmV5b25kIG91ciBtZW1vcnkgbGltaXQsIG9yIGluc2lkZSB0aGUKLSAqIGNyYXNoIGtlcm5lbCByZWdpb24gZm9yIGtkdW1wLiBJZiBzbywgbW92ZSBpdCBvdXQgb2YgdGhlIHdheS4KKyAqIGNyYXNoIGtlcm5lbCByZWdpb24gZm9yIGtkdW1wLCBvciB3aXRoaW4gdGhlIHBhZ2UgYWxpZ25lZCByYW5nZSBvZiBpbml0cmQuCisgKiBJZiBzbywgbW92ZSBpdCBvdXQgb2YgdGhlIHdheS4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IG1vdmVfZGV2aWNlX3RyZWUodm9pZCkKIHsKQEAgLTk5LDcgKzExNyw4IEBACiAJc2l6ZSA9IGJlMzJfdG9fY3B1KGluaXRpYWxfYm9vdF9wYXJhbXMtPnRvdGFsc2l6ZSk7CiAKIAlpZiAoKG1lbW9yeV9saW1pdCAmJiAoc3RhcnQgKyBzaXplKSA+IFBIWVNJQ0FMX1NUQVJUICsgbWVtb3J5X2xpbWl0KSB8fAotCQkJb3ZlcmxhcHNfY3Jhc2hrZXJuZWwoc3RhcnQsIHNpemUpKSB7CisJCQlvdmVybGFwc19jcmFzaGtlcm5lbChzdGFydCwgc2l6ZSkgfHwKKwkJCW92ZXJsYXBzX2luaXRyZChzdGFydCwgc2l6ZSkpIHsKIAkJcCA9IF9fdmEobWVtYmxvY2tfYWxsb2Moc2l6ZSwgUEFHRV9TSVpFKSk7CiAJCW1lbWNweShwLCBpbml0aWFsX2Jvb3RfcGFyYW1zLCBzaXplKTsKIAkJaW5pdGlhbF9ib290X3BhcmFtcyA9IChzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgKilwOwpAQCAtNTU1LDcgKzU3NCw5IEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogdGhlbiByZXNlcnZlIHRoZSBpbml0cmQsIGlmIGFueSAqLwogCWlmIChpbml0cmRfc3RhcnQgJiYgKGluaXRyZF9lbmQgPiBpbml0cmRfc3RhcnQpKQotCQltZW1ibG9ja19yZXNlcnZlKF9fcGEoaW5pdHJkX3N0YXJ0KSwgaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydCk7CisJCW1lbWJsb2NrX3Jlc2VydmUoX0FMSUdOX0RPV04oX19wYShpbml0cmRfc3RhcnQpLCBQQUdFX1NJWkUpLAorCQkJX0FMSUdOX1VQKGluaXRyZF9lbmQsIFBBR0VfU0laRSkgLQorCQkJX0FMSUdOX0RPV04oaW5pdHJkX3N0YXJ0LCBQQUdFX1NJWkUpKTsKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KIAogI2lmZGVmIENPTkZJR19QUEMzMgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggZDY1YjU5MS4uNWRlMGYyNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC0yMjMsMjEgKzIyMyw2IEBACiAjdW5kZWYgRlJFRVNFQwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi12b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAoc3RhcnQgPCBlbmQpCi0JCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0JZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJZnJlZV9wYWdlKHN0YXJ0KTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci19Ci0jZW5kaWYKLQotCiAjaWZkZWYgQ09ORklHXzh4eCAvKiBObyA4eHggc3BlY2lmaWMgLmMgZmlsZSB0byBwdXQgdGhhdCBpbiAuLi4gKi8KIHZvaWQgc2V0dXBfaW5pdGlhbF9tZW1vcnlfbGltaXQocGh5c19hZGRyX3QgZmlyc3RfbWVtYmxvY2tfYmFzZSwKIAkJCQlwaHlzX2FkZHJfdCBmaXJzdF9tZW1ibG9ja19zaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggNjM3NGIyMS4uZjZkYmI0YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC05OSwyMCArOTksNiBAQAogCQkoKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbikgPj4gMTApOwogfQogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi12b2lkIGZyZWVfaW5pdHJkX21lbSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpZiAoc3RhcnQgPCBlbmQpCi0JCXByaW50ayAoIkZyZWVpbmcgaW5pdHJkIG1lbW9yeTogJWxkayBmcmVlZFxuIiwgKGVuZCAtIHN0YXJ0KSA+PiAxMCk7Ci0JZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKLQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7Ci0JCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKLQkJZnJlZV9wYWdlKHN0YXJ0KTsKLQkJdG90YWxyYW1fcGFnZXMrKzsKLQl9Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgcGdkX2N0b3Iodm9pZCAqYWRkcikKIHsKIAltZW1zZXQoYWRkciwgMCwgUEdEX1RBQkxFX1NJWkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDU3ZTU0NWIuLjI5ZDRkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTM4Miw2ICszODIsMjUgQEAKIAltZW1faW5pdF9kb25lID0gMTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKworCXN0YXJ0ID0gX0FMSUdOX0RPV04oc3RhcnQsIFBBR0VfU0laRSk7CisJZW5kID0gX0FMSUdOX1VQKGVuZCwgUEFHRV9TSVpFKTsKKwlwcl9pbmZvKCJGcmVlaW5nIGluaXRyZCBtZW1vcnk6ICVsZGsgZnJlZWRcbiIsIChlbmQgLSBzdGFydCkgPj4gMTApOworCisJZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCArPSBQQUdFX1NJWkUpIHsKKwkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHN0YXJ0KSk7CisJCWluaXRfcGFnZV9jb3VudCh2aXJ0X3RvX3BhZ2Uoc3RhcnQpKTsKKwkJZnJlZV9wYWdlKHN0YXJ0KTsKKwkJdG90YWxyYW1fcGFnZXMrKzsKKwl9Cit9CisjZW5kaWYKKwogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBwYWdlIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IHRoZSBrZXJuZWwuCiAgKiBJdCBqdXN0IG1hcmtzIHRoZSBwYWdlIGFzIG5vdCBpLWNhY2hlIGNsZWFuLiAgV2UgZG8gdGhlIGktY2FjaGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKaW5kZXggMDYwOGIxNi4uZDkxNzU3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMKQEAgLTE5Niw5ICsxOTYsNiBAQAogCW91dF9iZTMyKCZsYmMtPmx0ZWNjciwgTFRFQ0NSX0NMRUFSKTsKIAlvdXRfYmUzMigmbGJjLT5sdGVkciwgTFRFRFJfRU5BQkxFKTsKIAotCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbnkgZGV0ZWN0ZWQgZXZlbnRzICovCi0Jb3V0X2JlMzIoJmxiYy0+bHRlaXIsIExURUlSX0VOQUJMRSk7Ci0KIAkvKiBTZXQgdGhlIG1vbml0b3IgdGltZW91dCB2YWx1ZSB0byB0aGUgbWF4aW11bSBmb3IgZXJyYXR1bSBBMDAxICovCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5vZGUsICJmc2wsZWxiYyIpKQogCQljbHJzZXRiaXRzX2JlMzIoJmxiYy0+bGJjciwgTEJDUl9CTVQsIExCQ1JfQk1UUFMpOwpAQCAtMzIyLDYgKzMxOSw5IEBACiAJCWdvdG8gZXJyOwogCX0KIAorCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhbnkgZGV0ZWN0ZWQgZXZlbnRzICovCisJb3V0X2JlMzIoJmZzbF9sYmNfY3RybF9kZXYtPnJlZ3MtPmx0ZWlyLCBMVEVJUl9FTkFCTEUpOworCiAJcmV0dXJuIDA7CiAKIGVycjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggOWZhYjJhYS4uOTBkNzdiZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTg5LDYgKzg5LDcgQEAKIAlzZWxlY3QgSEFWRV9HRVRfVVNFUl9QQUdFU19GQVNUCiAJc2VsZWN0IEhBVkVfQVJDSF9NVVRFWF9DUFVfUkVMQVgKIAlzZWxlY3QgSEFWRV9BUkNIX0pVTVBfTEFCRUwgaWYgIU1BUkNIX0c1CisJc2VsZWN0IEhBVkVfUkNVX1RBQkxFX0ZSRUUgaWYgU01QCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fVFJZTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0tfQkgKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9MT0NLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCBmNjMxNGFmLi4zOGU3MWViIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGdhbGxvYy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTE3LDE1ICsxNywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKLSNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJZG8ge30gd2hpbGUgKDApCi0KIHVuc2lnbmVkIGxvbmcgKmNyc3RfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgY3JzdF90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgY3JzdF90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CiAKIHVuc2lnbmVkIGxvbmcgKnBhZ2VfdGFibGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqKTsKIHZvaWQgcGFnZV90YWJsZV9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyAqKTsKLXZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgKik7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqLCB1bnNpZ25lZCBsb25nICopOwordm9pZCBfX3RsYl9yZW1vdmVfdGFibGUodm9pZCAqX3RhYmxlKTsKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfdGFibGUodW5zaWduZWQgbG9uZyAqcywgdW5zaWduZWQgbG9uZyB2YWwsIHNpemVfdCBuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTRlZmFjZi4uODAxZmJlMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yOTMsMTkgKzI5Myw2IEBACiAgKiBzd2FwIHB0ZSBpcyAxMDExIGFuZCAwMDAxLCAwMDExLCAwMTAxLCAwMTExIGFyZSBpbnZhbGlkLgogICovCiAKLS8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCi0jZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKLSNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAotI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKLQotLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLwotI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCi0jZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKLQogI2lmbmRlZiBfX3MzOTB4X18KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudCB0YWJsZSBhZGRyZXNzLXNwYWNlLWNvbnRyb2wtZWxlbWVudCAqLwpAQCAtMzI1LDYgKzMxMiwxOSBAQAogI2RlZmluZSBfU0VHTUVOVF9FTlRSWQkJKF9TRUdNRU5UX0VOVFJZX1BUTCkKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfRU1QVFkJKF9TRUdNRU5UX0VOVFJZX0lOVikKIAorLyogUGFnZSBzdGF0dXMgdGFibGUgYml0cyBmb3IgdmlydHVhbGl6YXRpb24gKi8KKyNkZWZpbmUgUkNQX0FDQ19CSVRTCTB4ZjAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDBVTAorI2RlZmluZSBSQ1BfUENMX0JJVAkweDAwODAwMDAwVUwKKyNkZWZpbmUgUkNQX0hSX0JJVAkweDAwNDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwVUwKKyNkZWZpbmUgUkNQX0dSX0JJVAkweDAwMDQwMDAwVUwKKyNkZWZpbmUgUkNQX0dDX0JJVAkweDAwMDIwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDBVTAorI2RlZmluZSBLVk1fVUNfQklUCTB4MDAwMDQwMDBVTAorCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAogLyogQml0cyBpbiB0aGUgc2VnbWVudC9yZWdpb24gdGFibGUgYWRkcmVzcy1zcGFjZS1jb250cm9sLWVsZW1lbnQgKi8KQEAgLTM2Nyw2ICszNjcsMTkgQEAKICNkZWZpbmUgX1NFR01FTlRfRU5UUllfTEFSR0UJMHg0MDAJLyogU1RFLWZvcm1hdCBjb250cm9sLCBsYXJnZSBwYWdlICAgKi8KICNkZWZpbmUgX1NFR01FTlRfRU5UUllfQ08JMHgxMDAJLyogY2hhbmdlLXJlY29yZGluZyBvdmVycmlkZSAgICovCiAKKy8qIFBhZ2Ugc3RhdHVzIHRhYmxlIGJpdHMgZm9yIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIFJDUF9BQ0NfQklUUwkweGYwMDAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfRlBfQklUCTB4MDgwMDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9QQ0xfQklUCTB4MDA4MDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9IUl9CSVQJMHgwMDQwMDAwMDAwMDAwMDAwVUwKKyNkZWZpbmUgUkNQX0hDX0JJVAkweDAwMjAwMDAwMDAwMDAwMDBVTAorI2RlZmluZSBSQ1BfR1JfQklUCTB4MDAwNDAwMDAwMDAwMDAwMFVMCisjZGVmaW5lIFJDUF9HQ19CSVQJMHgwMDAyMDAwMDAwMDAwMDAwVUwKKworLyogVXNlciBkaXJ0eSAvIHJlZmVyZW5jZWQgYml0IGZvciBLVk0ncyBtaWdyYXRpb24gZmVhdHVyZSAqLworI2RlZmluZSBLVk1fVVJfQklUCTB4MDAwMDgwMDAwMDAwMDAwMFVMCisjZGVmaW5lIEtWTV9VQ19CSVQJMHgwMDAwNDAwMDAwMDAwMDAwVUwKKwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMzUwZTdlZS4uMTVjOTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0xMzksMTEwICsxMzksNDcgQEAKIAlzdHJ1Y3Qgc2xpYmUgc2xpYmVbUURJT19NQVhfQlVGRkVSU19QRVJfUV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsIGFsaWduZWQoMjA0OCkpKTsKIAotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9mbGFncyAtIHN0b3JhZ2UgYmxvY2sgYWRkcmVzcyBsaXN0IGZsYWdzCi0gKiBAbGFzdDogbGFzdCBlbnRyeQotICogQGNvbnQ6IGNvbnRpZ3VvdXMgc3RvcmFnZQotICogQGZyYWc6IGZyYWdtZW50YXRpb24KLSAqLwotc3RydWN0IHNiYWxfZmxhZ3MgewotCXU4CTogMTsKLQl1OCBsYXN0IDogMTsKLQl1OCBjb250IDogMTsKLQl1OAk6IDE7Ci0JdTggZnJhZyA6IDI7Ci0JdTgJOiAyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRU5UUlkJCTB4NDAKKyNkZWZpbmUgU0JBTF9FRkxBR1NfQ09OVElHVU9VUwkJMHgyMAorI2RlZmluZSBTQkFMX0VGTEFHU19GSVJTVF9GUkFHCQkweDA0CisjZGVmaW5lIFNCQUxfRUZMQUdTX01JRERMRV9GUkFHCQkweDA4CisjZGVmaW5lIFNCQUxfRUZMQUdTX0xBU1RfRlJBRwkJMHgwYworI2RlZmluZSBTQkFMX0VGTEFHU19NQVNLCQkweDZmCiAKLSNkZWZpbmUgU0JBTF9GTEFHU19GSVJTVF9GUkFHCQkweDA0MDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19NSURETEVfRlJBRwkJMHgwODAwMDAwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1NfTEFTVF9GUkFHCQkweDBjMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19MQVNUX0VOVFJZCQkweDQwMDAwMDAwVUwKLSNkZWZpbmUgU0JBTF9GTEFHU19DT05USUdVT1VTCQkweDIwMDAwMDAwVUwKLQotI2RlZmluZSBTQkFMX0ZMQUdTMF9EQVRBX0NPTlRJTlVBVElPTgkweDIwVUwKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1BDSV9SRVEJCTB4NDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0RBVEFfQ09OVElOVUFUSU9OCTB4MjAKIAogLyogQXdlc29tZSBPcGVuRkNQIGV4dGVuc2lvbnMgKi8KLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9TVEFUVVMJCTB4MDBVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFCQkweDA4VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9SRUFECQkweDEwVUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MThVTAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTCQkweDA0VUwKLSNkZWZpbmUgU0JBTF9GTEFHUzBfQ09NTUFORAkJMHgwMlVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX0xBU1RfU0JBTAkJMHgwMFVMCi0jZGVmaW5lIFNCQUxfRkxBR1MwX09OTFlfU0JBTAkJU0JBTF9GTEFHUzBfQ09NTUFORAotI2RlZmluZSBTQkFMX0ZMQUdTMF9NSURETEVfU0JBTAkJU0JBTF9GTEFHUzBfTU9SRV9TQkFMUwotI2RlZmluZSBTQkFMX0ZMQUdTMF9GSVJTVF9TQkFMIFNCQUxfRkxBR1MwX01PUkVfU0JBTFMgfCBTQkFMX0ZMQUdTMF9DT01NQU5ECi0jZGVmaW5lIFNCQUxfRkxBR1MwX1BDSQkJCTB4NDAKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8wIC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMAotICogQHBjaTogUENJIGluZGljYXRvcgotICogQGNvbnQ6IGRhdGEgY29udGludWF0aW9uCi0gKiBAc2J0eXBlOiBzdG9yYWdlLWJsb2NrIHR5cGUgKEZDUCkKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMCB7Ci0JdTgJICA6IDE7Ci0JdTggcGNpCSAgOiAxOwotCXU4IGNvbnQgICA6IDE7Ci0JdTggc2J0eXBlIDogMjsKLQl1OAkgIDogMzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzEgLSBzYmFsIGZsYWdzIGZvciBzYmFsZSAxCi0gKiBAa2V5OiBzdG9yYWdlIGtleQotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xIHsKLQl1OCAgICAgOiA0OwotCXU4IGtleSA6IDQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCAtIHNiYWwgZmxhZ3MgZm9yIHNiYWxlIDE0Ci0gKiBAZXJyaWR4OiBlcnJvciBpbmRleAotICovCi1zdHJ1Y3Qgc2JhbF9zYmFsZl8xNCB7Ci0JdTgJICA6IDQ7Ci0JdTggZXJyaWR4IDogNDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHN0cnVjdCBzYmFsX3NiYWxmXzE1IC0gc2JhbCBmbGFncyBmb3Igc2JhbGUgMTUKLSAqIEByZWFzb246IHJlYXNvbiBmb3IgZXJyb3Igc3RhdGUKLSAqLwotc3RydWN0IHNiYWxfc2JhbGZfMTUgewotCXU4IHJlYXNvbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIHVuaW9uIHNiYWxfc2JhbGYgLSBzdG9yYWdlIGJsb2NrIGFkZHJlc3MgbGlzdCBmbGFncwotICogQGkwOiBzYmFsZjAKLSAqIEBpMTogc2JhbGYxCi0gKiBAaTE0OiBzYmFsZjE0Ci0gKiBAaTE1OiBzYmxhZjE1Ci0gKiBAdmFsdWU6IHJhdyB2YWx1ZQotICovCi11bmlvbiBzYmFsX3NiYWxmIHsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8wICBpMDsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xICBpMTsKLQlzdHJ1Y3Qgc2JhbF9zYmFsZl8xNCBpMTQ7Ci0Jc3RydWN0IHNiYWxfc2JhbGZfMTUgaTE1OwotCXU4IHZhbHVlOwotfTsKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfU1RBVFVTCTB4MDAKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEUJCTB4MDgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRAkJMHgxMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFECTB4MTgKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMJCTB4MDQKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0NPTU1BTkQJCTB4MDIKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0xBU1RfU0JBTAkJMHgwMAorI2RlZmluZSBTQkFMX1NGTEFHUzBfT05MWV9TQkFMCQlTQkFMX1NGTEFHUzBfQ09NTUFORAorI2RlZmluZSBTQkFMX1NGTEFHUzBfTUlERExFX1NCQUwJU0JBTF9TRkxBR1MwX01PUkVfU0JBTFMKKyNkZWZpbmUgU0JBTF9TRkxBR1MwX0ZJUlNUX1NCQUwgKFNCQUxfU0ZMQUdTMF9NT1JFX1NCQUxTIHwgU0JBTF9TRkxBR1MwX0NPTU1BTkQpCiAKIC8qKgogICogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgLSBTQkFMIGVudHJ5Ci0gKiBAZmxhZ3M6IGZsYWdzCisgKiBAZWZsYWdzOiBTQkFMIGVudHJ5IGZsYWdzCisgKiBAc2NvdW50OiBTQkFMIGNvdW50CisgKiBAc2ZsYWdzOiB3aG9sZSBTQkFMIGZsYWdzCiAgKiBAbGVuZ3RoOiBsZW5ndGgKICAqIEBhZGRyOiBhZGRyZXNzCiAqLwogc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgewotCXUzMiBmbGFnczsKKwl1OCBlZmxhZ3M7CisJLyogcHJpdmF0ZTogKi8KKwl1OCByZXMxOworCS8qIHB1YmxpYzogKi8KKwl1OCBzY291bnQ7CisJdTggc2ZsYWdzOwogCXUzMiBsZW5ndGg7CiAjaWZkZWYgQ09ORklHXzMyQklUCiAJLyogcHJpdmF0ZTogKi8KLQl2b2lkICpyZXNlcnZlZDsKKwl2b2lkICpyZXMyOwogCS8qIHB1YmxpYzogKi8KICNlbmRpZgogCXZvaWQgKmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKaW5kZXggNzdlZWU1NC4uYzY4N2EyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaApAQCAtMjYsNjcgKzI2LDYwIEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJc3RydWN0IG1tdV90YWJsZV9iYXRjaCAqYmF0Y2g7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgZnVsbG1tOwotCXVuc2lnbmVkIGludCBucl9wdGVzOwotCXVuc2lnbmVkIGludCBucl9weGRzOwotCXVuc2lnbmVkIGludCBtYXg7Ci0Jdm9pZCAqKmFycmF5OwotCXZvaWQgKmxvY2FsWzhdOworCXVuc2lnbmVkIGludCBuZWVkX2ZsdXNoOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9fdGxiX2FsbG9jX3BhZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk4sIDApOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCitzdHJ1Y3QgbW11X3RhYmxlX2JhdGNoIHsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXZvaWQJCQkqdGFibGVzWzBdOworfTsKIAotCWlmIChhZGRyKSB7Ci0JCXRsYi0+YXJyYXkgPSAodm9pZCAqKSBhZGRyOwotCQl0bGItPm1heCA9IFBBR0VfU0laRSAvIHNpemVvZih2b2lkICopOwotCX0KLX0KKyNkZWZpbmUgTUFYX1RBQkxFX0JBVENICQlcCisJKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IG1tdV90YWJsZV9iYXRjaCkpIC8gc2l6ZW9mKHZvaWQgKikpCisKK2V4dGVybiB2b2lkIHRsYl90YWJsZV9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKTsKK2V4dGVybiB2b2lkIHRsYl9yZW1vdmVfdGFibGUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgdm9pZCAqdGFibGUpOworI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZ2F0aGVyX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLAogCQkJCSAgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICB1bnNpZ25lZCBpbnQgZnVsbF9tbV9mbHVzaCkKIHsKIAl0bGItPm1tID0gbW07Ci0JdGxiLT5tYXggPSBBUlJBWV9TSVpFKHRsYi0+bG9jYWwpOwotCXRsYi0+YXJyYXkgPSB0bGItPmxvY2FsOwogCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKwl0bGItPm5lZWRfZmx1c2ggPSAwOworI2lmZGVmIENPTkZJR19IQVZFX1JDVV9UQUJMRV9GUkVFCisJdGxiLT5iYXRjaCA9IE5VTEw7CisjZW5kaWYKIAlpZiAodGxiLT5mdWxsbW0pCiAJCV9fdGxiX2ZsdXNoX21tKG1tKTsKLQllbHNlCi0JCV9fdGxiX2FsbG9jX3BhZ2UodGxiKTsKLQl0bGItPm5yX3B0ZXMgPSAwOwotCXRsYi0+bnJfcHhkcyA9IHRsYi0+bWF4OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZsdXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQogewotCWlmICghdGxiLT5mdWxsbW0gJiYgKHRsYi0+bnJfcHRlcyA+IDAgfHwgdGxiLT5ucl9weGRzIDwgdGxiLT5tYXgpKQotCQlfX3RsYl9mbHVzaF9tbSh0bGItPm1tKTsKLQl3aGlsZSAodGxiLT5ucl9wdGVzID4gMCkKLQkJcGFnZV90YWJsZV9mcmVlX3JjdSh0bGItPm1tLCB0bGItPmFycmF5Wy0tdGxiLT5ucl9wdGVzXSk7Ci0Jd2hpbGUgKHRsYi0+bnJfcHhkcyA8IHRsYi0+bWF4KQotCQljcnN0X3RhYmxlX2ZyZWVfcmN1KHRsYi0+bW0sIHRsYi0+YXJyYXlbdGxiLT5ucl9weGRzKytdKTsKKwlpZiAoIXRsYi0+bmVlZF9mbHVzaCkKKwkJcmV0dXJuOworCXRsYi0+bmVlZF9mbHVzaCA9IDA7CisJX190bGJfZmx1c2hfbW0odGxiLT5tbSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwl0bGJfdGFibGVfZmx1c2godGxiKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGxiX2ZpbmlzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXRsYl9mbHVzaF9tbXUodGxiKTsKLQotCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLQotCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwotCWNoZWNrX3BndF9jYWNoZSgpOwotCi0JaWYgKHRsYi0+YXJyYXkgIT0gdGxiLT5sb2NhbCkKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGxiLT5hcnJheSwgMCk7CiB9CiAKIC8qCkBAIC0xMTIsMTIgKzEwNSwxMSBAQAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX3RsYihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ3RhYmxlX3QgcHRlLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlpZiAoIXRsYi0+ZnVsbG1tKSB7Ci0JCXRsYi0+YXJyYXlbdGxiLT5ucl9wdGVzKytdID0gcHRlOwotCQlpZiAodGxiLT5ucl9wdGVzID49IHRsYi0+bnJfcHhkcykKLQkJCXRsYl9mbHVzaF9tbXUodGxiKTsKLQl9IGVsc2UKLQkJcGFnZV90YWJsZV9mcmVlKHRsYi0+bW0sICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjaWZkZWYgQ09ORklHX0hBVkVfUkNVX1RBQkxFX0ZSRUUKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQlyZXR1cm4gcGFnZV90YWJsZV9mcmVlX3JjdSh0bGIsICh1bnNpZ25lZCBsb25nICopIHB0ZSk7CisjZW5kaWYKKwlwYWdlX3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHRlKTsKIH0KIAogLyoKQEAgLTEzMywxMiArMTI1LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDMxKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwbWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcG1kKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcG1kKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwbWQpOwogI2VuZGlmCiB9CiAKQEAgLTE1NSwxMiArMTQ2LDExIEBACiAjaWZkZWYgX19zMzkweF9fCiAJaWYgKHRsYi0+bW0tPmNvbnRleHQuYXNjZV9saW1pdCA8PSAoMVVMIDw8IDQyKSkKIAkJcmV0dXJuOwotCWlmICghdGxiLT5mdWxsbW0pIHsKLQkJdGxiLT5hcnJheVstLXRsYi0+bnJfcHhkc10gPSBwdWQ7Ci0JCWlmICh0bGItPm5yX3B0ZXMgPj0gdGxiLT5ucl9weGRzKQotCQkJdGxiX2ZsdXNoX21tdSh0bGIpOwotCX0gZWxzZQotCQljcnN0X3RhYmxlX2ZyZWUodGxiLT5tbSwgKHVuc2lnbmVkIGxvbmcgKikgcHVkKTsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQorCWlmICghdGxiLT5mdWxsbW0pCisJCXJldHVybiB0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgcHVkKTsKKyNlbmRpZgorCWNyc3RfdGFibGVfZnJlZSh0bGItPm1tLCAodW5zaWduZWQgbG9uZyAqKSBwdWQpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwppbmRleCAzMGNhODVjLi42NzM0NWFlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCkBAIC03MzEsNiArNzMxLDcgQEAKIAl9CiAJbWVtY3B5KGZhY2lsaXRpZXMsIFMzOTBfbG93Y29yZS5zdGZsZV9mYWNfbGlzdCwgMTYpOwogCWZhY2lsaXRpZXNbMF0gJj0gMHhmZjAwZmZmM2Y0N2MwMDAwVUxMOworCWZhY2lsaXRpZXNbMV0gJj0gMHgyMDFjMDAwMDAwMDAwMDAwVUxMOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TIGIvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUwppbmRleCBhYjBlMDQxLi41ZmFhMWIxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCisrKyBiL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKQEAgLTkzLDQgKzkzLDYgQEAKIAogCS5zZWN0aW9uIF9fZXhfdGFibGUsImEiCiAJLnF1YWQJc2llX2luc3Qsc2llX2VycgorCS5xdWFkCXNpZV9leGl0LHNpZV9lcnIKKwkucXVhZAlzaWVfcmVlbnRlcixzaWVfZXJyCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCBiMDk3NjNmLi4zN2EyM2MyMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0yNCw5NCArMjQsMTIgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KIAotc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCB7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKLQl1bnNpZ25lZCBpbnQgcGd0X2luZGV4OwotCXVuc2lnbmVkIGludCBjcnN0X2luZGV4OwotCXVuc2lnbmVkIGxvbmcgKnRhYmxlWzBdOwotfTsKLQotI2RlZmluZSBSQ1VfRlJFRUxJU1RfU0laRSBcCi0JKChQQUdFX1NJWkUgLSBzaXplb2Yoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCkpIFwKLQkgIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqLCByY3VfdGFibGVfZnJlZWxpc3QpOwotCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICoqYmF0Y2hwID0gJl9fZ2V0X2NwdV92YXIocmN1X3RhYmxlX2ZyZWVsaXN0KTsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9ICpiYXRjaHA7Ci0KLQlpZiAoYmF0Y2gpCi0JCXJldHVybiBiYXRjaDsKLQliYXRjaCA9IChzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfQVRPTUlDKTsKLQlpZiAoYmF0Y2gpIHsKLQkJYmF0Y2gtPm1tID0gbW07Ci0JCWJhdGNoLT5wZ3RfaW5kZXggPSAwOwotCQliYXRjaC0+Y3JzdF9pbmRleCA9IFJDVV9GUkVFTElTVF9TSVpFOwotCQkqYmF0Y2hwID0gYmF0Y2g7Ci0JfQotCXJldHVybiBiYXRjaDsKLX0KLQotc3RhdGljIHZvaWQgcmN1X3RhYmxlX2ZyZWVsaXN0X2NhbGxiYWNrKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaCA9Ci0JCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0LCByY3UpOwotCi0Jd2hpbGUgKGJhdGNoLT5wZ3RfaW5kZXggPiAwKQotCQlfX3BhZ2VfdGFibGVfZnJlZShiYXRjaC0+bW0sIGJhdGNoLT50YWJsZVstLWJhdGNoLT5wZ3RfaW5kZXhdKTsKLQl3aGlsZSAoYmF0Y2gtPmNyc3RfaW5kZXggPCBSQ1VfRlJFRUxJU1RfU0laRSkKLQkJY3JzdF90YWJsZV9mcmVlKGJhdGNoLT5tbSwgYmF0Y2gtPnRhYmxlW2JhdGNoLT5jcnN0X2luZGV4KytdKTsKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJhdGNoKTsKLX0KLQotdm9pZCByY3VfdGFibGVfZnJlZWxpc3RfZmluaXNoKHZvaWQpCi17Ci0Jc3RydWN0IHJjdV90YWJsZV9mcmVlbGlzdCAqKmJhdGNocCA9ICZnZXRfY3B1X3ZhcihyY3VfdGFibGVfZnJlZWxpc3QpOwotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoID0gKmJhdGNocDsKLQotCWlmICghYmF0Y2gpCi0JCWdvdG8gb3V0OwotCWNhbGxfcmN1KCZiYXRjaC0+cmN1LCByY3VfdGFibGVfZnJlZWxpc3RfY2FsbGJhY2spOwotCSpiYXRjaHAgPSBOVUxMOwotb3V0OgotCXB1dF9jcHVfdmFyKHJjdV90YWJsZV9mcmVlbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNtcF9zeW5jKHZvaWQgKmFyZykKLXsKLX0KLQogI2lmbmRlZiBDT05GSUdfNjRCSVQKICNkZWZpbmUgQUxMT0NfT1JERVIJMQotI2RlZmluZSBUQUJMRVNfUEVSX1BBR0UJNAotI2RlZmluZSBGUkFHX01BU0sJMTVVTAotI2RlZmluZSBTRUNPTkRfSEFMVkVTCTEwVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS80KTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS80KTsKLQljbGVhcl90YWJsZSh0YWJsZSArIDUxMiwgX1BBR0VfVFlQRV9FTVBUWSwgUEFHRV9TSVpFLzQpOwotCW1lbXNldCh0YWJsZSArIDc2OCwgMCwgUEFHRV9TSVpFLzQpOwotfQotCisjZGVmaW5lIEZSQUdfTUFTSwkweDBmCiAjZWxzZQogI2RlZmluZSBBTExPQ19PUkRFUgkyCi0jZGVmaW5lIFRBQkxFU19QRVJfUEFHRQkyCi0jZGVmaW5lIEZSQUdfTUFTSwkzVUwKLSNkZWZpbmUgU0VDT05EX0hBTFZFUwkyVUwKLQotdm9pZCBjbGVhcl90YWJsZV9wZ3N0ZXModW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0JY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKLQltZW1zZXQodGFibGUgKyAyNTYsIDAsIFBBR0VfU0laRS8yKTsKLX0KLQorI2RlZmluZSBGUkFHX01BU0sJMHgwMwogI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgVk1BTExPQ19TVEFSVCA9IFZNQUxMT0NfRU5EIC0gVk1BTExPQ19TSVpFOwpAQCAtMTQwLDI5ICs1OCw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgdGFibGUsIEFMTE9DX09SREVSKTsKIH0KIAotdm9pZCBjcnN0X3RhYmxlX2ZyZWVfcmN1KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKLXsKLQlzdHJ1Y3QgcmN1X3RhYmxlX2ZyZWVsaXN0ICpiYXRjaDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWlmIChhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA8IDIgJiYKLQkgICAgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewotCQljcnN0X3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWJhdGNoID0gcmN1X3RhYmxlX2ZyZWVsaXN0X2dldChtbSk7Ci0JaWYgKCFiYXRjaCkgewotCQlzbXBfY2FsbF9mdW5jdGlvbihzbXBfc3luYywgTlVMTCwgMSk7Ci0JCWNyc3RfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JYmF0Y2gtPnRhYmxlWy0tYmF0Y2gtPmNyc3RfaW5kZXhdID0gdGFibGU7Ci0JaWYgKGJhdGNoLT5wZ3RfaW5kZXggPj0gYmF0Y2gtPmNyc3RfaW5kZXgpCi0JCXJjdV90YWJsZV9mcmVlbGlzdF9maW5pc2goKTsKLW91dDoKLQlwcmVlbXB0X2VuYWJsZSgpOwotfQotCiAjaWZkZWYgQ09ORklHXzY0QklUCiBpbnQgY3JzdF90YWJsZV91cGdyYWRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGxpbWl0KQogewpAQCAtMjM4LDEyNCArMTMzLDE3NSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0b21pY194b3JfYml0cyhhdG9taWNfdCAqdiwgdW5zaWduZWQgaW50IGJpdHMpCit7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OworCisJZG8geworCQlvbGQgPSBhdG9taWNfcmVhZCh2KTsKKwkJbmV3ID0gb2xkIF4gYml0czsKKwl9IHdoaWxlIChhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgIT0gb2xkKTsKKwlyZXR1cm4gbmV3OworfQorCiAvKgogICogcGFnZSB0YWJsZSBlbnRyeSBhbGxvY2F0aW9uL2ZyZWUgcm91dGluZXMuCiAgKi8KKyNpZmRlZiBDT05GSUdfUEdTVEUKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBsb25nICp0YWJsZTsKKworCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiBOVUxMOworCXBndGFibGVfcGFnZV9jdG9yKHBhZ2UpOworCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMyk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSBwYWdlX3RvX3BoeXMocGFnZSk7CisJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRS8yKTsKKwljbGVhcl90YWJsZSh0YWJsZSArIFBUUlNfUEVSX1BURSwgMCwgUEFHRV9TSVpFLzIpOworCXJldHVybiB0YWJsZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlwZ3RhYmxlX3BhZ2VfY3RvcihwYWdlKTsKKwlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK30KKyNlbmRpZgorCiB1bnNpZ25lZCBsb25nICpwYWdlX3RhYmxlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgKnRhYmxlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBpbnQgbWFzaywgYml0OwogCi0JYml0cyA9IChtbS0+Y29udGV4dC5oYXNfcGdzdGUpID8gM1VMIDogMVVMOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKQorCQlyZXR1cm4gcGFnZV90YWJsZV9hbGxvY19wZ3N0ZShtbSk7CisjZW5kaWYKKwkvKiBBbGxvY2F0ZSBmcmFnbWVudHMgb2YgYSA0SyBwYWdlIGFzIDFLLzJLIHBhZ2UgdGFibGUgKi8KIAlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JcGFnZSA9IE5VTEw7CisJbWFzayA9IEZSQUdfTUFTSzsKIAlpZiAoIWxpc3RfZW1wdHkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCkpIHsKIAkJcGFnZSA9IGxpc3RfZmlyc3RfZW50cnkoJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCwKIAkJCQkJc3RydWN0IHBhZ2UsIGxydSk7Ci0JCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJCXBhZ2UgPSBOVUxMOworCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopIHBhZ2VfdG9fcGh5cyhwYWdlKTsKKwkJbWFzayA9IGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpOworCQltYXNrID0gbWFzayB8IChtYXNrID4+IDQpOwogCX0KLQlpZiAoIXBhZ2UpIHsKKwlpZiAoKG1hc2sgJiBGUkFHX01BU0spID09IEZSQUdfTUFTSykgewogCQlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKIAkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOwogCQlpZiAoIXBhZ2UpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcGd0YWJsZV9wYWdlX2N0b3IocGFnZSk7Ci0JCXBhZ2UtPmZsYWdzICY9IH5GUkFHX01BU0s7CisJCWF0b21pY19zZXQoJnBhZ2UtPl9tYXBjb3VudCwgMSk7CiAJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCQlpZiAobW0tPmNvbnRleHQuaGFzX3Bnc3RlKQotCQkJY2xlYXJfdGFibGVfcGdzdGVzKHRhYmxlKTsKLQkJZWxzZQotCQkJY2xlYXJfdGFibGUodGFibGUsIF9QQUdFX1RZUEVfRU1QVFksIFBBR0VfU0laRSk7CisJCWNsZWFyX3RhYmxlKHRhYmxlLCBfUEFHRV9UWVBFX0VNUFRZLCBQQUdFX1NJWkUpOwogCQlzcGluX2xvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJCWxpc3RfYWRkKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOworCX0gZWxzZSB7CisJCWZvciAoYml0ID0gMTsgbWFzayAmIGJpdDsgYml0IDw8PSAxKQorCQkJdGFibGUgKz0gUFRSU19QRVJfUFRFOworCQltYXNrID0gYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCk7CisJCWlmICgobWFzayAmIEZSQUdfTUFTSykgPT0gRlJBR19NQVNLKQorCQkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CiAJfQotCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgcGFnZV90b19waHlzKHBhZ2UpOwotCXdoaWxlIChwYWdlLT5mbGFncyAmIGJpdHMpIHsKLQkJdGFibGUgKz0gMjU2OwotCQliaXRzIDw8PSAxOwotCX0KLQlwYWdlLT5mbGFncyB8PSBiaXRzOwotCWlmICgocGFnZS0+ZmxhZ3MgJiBGUkFHX01BU0spID09ICgoMVVMIDw8IFRBQkxFU19QRVJfUEFHRSkgLSAxKSkKLQkJbGlzdF9tb3ZlX3RhaWwoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7CiAJcmV0dXJuIHRhYmxlOwogfQogCi1zdGF0aWMgdm9pZCBfX3BhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOwotCi0JYml0cyA9ICgodW5zaWduZWQgbG9uZykgdGFibGUpICYgMTU7Ci0JdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgoKHVuc2lnbmVkIGxvbmcpIHRhYmxlKSBeIGJpdHMpOwotCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmICghKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSkgewotCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKLQkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JfQotfQotCiB2b2lkIHBhZ2VfdGFibGVfZnJlZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqdGFibGUpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0JdW5zaWduZWQgbG9uZyBiaXRzOworCXVuc2lnbmVkIGludCBiaXQsIG1hc2s7CiAKLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNpZmRlZiBDT05GSUdfUEdTVEUKKwlpZiAobW1faGFzX3Bnc3RlKG1tKSkKKwkJcmV0dXJuIHBhZ2VfdGFibGVfZnJlZV9wZ3N0ZSh0YWJsZSk7CisjZW5kaWYKKwkvKiBGcmVlIDFLLzJLIHBhZ2UgdGFibGUgZnJhZ21lbnQgb2YgYSA0SyBwYWdlICovCiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOworCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spLyhQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSkpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQlwYWdlLT5mbGFncyBePSBiaXRzOwotCWlmIChwYWdlLT5mbGFncyAmIEZSQUdfTUFTSykgewotCQkvKiBQYWdlIG5vdyBoYXMgc29tZSBmcmVlIHBndGFibGUgZnJhZ21lbnRzLiAqLwotCQlpZiAoIWxpc3RfZW1wdHkoJnBhZ2UtPmxydSkpCi0JCQlsaXN0X21vdmUoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7Ci0JCXBhZ2UgPSBOVUxMOwotCX0gZWxzZQotCQkvKiBBbGwgZnJhZ21lbnRzIG9mIHRoZSA0SyBwYWdlIGhhdmUgYmVlbiBmcmVlZC4gKi8KKwlpZiAoKGF0b21pY19yZWFkKCZwYWdlLT5fbWFwY291bnQpICYgRlJBR19NQVNLKSAhPSBGUkFHX01BU0spCiAJCWxpc3RfZGVsKCZwYWdlLT5scnUpOworCW1hc2sgPSBhdG9taWNfeG9yX2JpdHMoJnBhZ2UtPl9tYXBjb3VudCwgYml0KTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGQoJnBhZ2UtPmxydSwgJm1tLT5jb250ZXh0LnBndGFibGVfbGlzdCk7CiAJc3Bpbl91bmxvY2tfYmgoJm1tLT5jb250ZXh0Lmxpc3RfbG9jayk7Ci0JaWYgKHBhZ2UpIHsKKwlpZiAobWFzayA9PSAwKSB7CiAJCXBndGFibGVfcGFnZV9kdG9yKHBhZ2UpOworCQlhdG9taWNfc2V0KCZwYWdlLT5fbWFwY291bnQsIC0xKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJfQogfQogCi12b2lkIHBhZ2VfdGFibGVfZnJlZV9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgKnRhYmxlKQotewotCXN0cnVjdCByY3VfdGFibGVfZnJlZWxpc3QgKmJhdGNoOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYml0czsKKyNpZmRlZiBDT05GSUdfSEFWRV9SQ1VfVEFCTEVfRlJFRQogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpIDwgMiAmJgotCSAgICBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sobW0pLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpKSB7Ci0JCXBhZ2VfdGFibGVfZnJlZShtbSwgdGFibGUpOwotCQlnb3RvIG91dDsKK3N0YXRpYyB2b2lkIF9fcGFnZV90YWJsZV9mcmVlX3JjdSh2b2lkICp0YWJsZSwgdW5zaWduZWQgYml0KQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCisjaWZkZWYgQ09ORklHX1BHU1RFCisJaWYgKGJpdCA9PSBGUkFHX01BU0spCisJCXJldHVybiBwYWdlX3RhYmxlX2ZyZWVfcGdzdGUodGFibGUpOworI2VuZGlmCisJLyogRnJlZSAxSy8ySyBwYWdlIHRhYmxlIGZyYWdtZW50IG9mIGEgNEsgcGFnZSAqLworCXBhZ2UgPSBwZm5fdG9fcGFnZShfX3BhKHRhYmxlKSA+PiBQQUdFX1NISUZUKTsKKwlpZiAoYXRvbWljX3hvcl9iaXRzKCZwYWdlLT5fbWFwY291bnQsIGJpdCkgPT0gMCkgeworCQlwZ3RhYmxlX3BhZ2VfZHRvcihwYWdlKTsKKwkJYXRvbWljX3NldCgmcGFnZS0+X21hcGNvdW50LCAtMSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KLQliYXRjaCA9IHJjdV90YWJsZV9mcmVlbGlzdF9nZXQobW0pOwotCWlmICghYmF0Y2gpIHsKLQkJc21wX2NhbGxfZnVuY3Rpb24oc21wX3N5bmMsIE5VTEwsIDEpOwotCQlwYWdlX3RhYmxlX2ZyZWUobW0sIHRhYmxlKTsKLQkJZ290byBvdXQ7Cit9CisKK3ZvaWQgcGFnZV90YWJsZV9mcmVlX3JjdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nICp0YWJsZSkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgYml0LCBtYXNrOworCisJbW0gPSB0bGItPm1tOworI2lmZGVmIENPTkZJR19QR1NURQorCWlmIChtbV9oYXNfcGdzdGUobW0pKSB7CisJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikgKF9fcGEodGFibGUpIHwgRlJBR19NQVNLKTsKKwkJdGxiX3JlbW92ZV90YWJsZSh0bGIsIHRhYmxlKTsKKwkJcmV0dXJuOwogCX0KLQliaXRzID0gKG1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkgPyAzVUwgOiAxVUw7Ci0JYml0cyA8PD0gKF9fcGEodGFibGUpICYgKFBBR0VfU0laRSAtIDEpKSAvIDI1NiAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNlbmRpZgorCWJpdCA9IDEgPDwgKChfX3BhKHRhYmxlKSAmIH5QQUdFX01BU0spIC8gKFBUUlNfUEVSX1BURSpzaXplb2YocHRlX3QpKSk7CiAJcGFnZSA9IHBmbl90b19wYWdlKF9fcGEodGFibGUpID4+IFBBR0VfU0hJRlQpOwogCXNwaW5fbG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQkvKiBEZWxheWVkIGZyZWVpbmcgd2l0aCByY3UgcHJldmVudHMgcmV1c2Ugb2YgcGd0YWJsZSBmcmFnbWVudHMgKi8KLQlsaXN0X2RlbF9pbml0KCZwYWdlLT5scnUpOworCWlmICgoYXRvbWljX3JlYWQoJnBhZ2UtPl9tYXBjb3VudCkgJiBGUkFHX01BU0spICE9IEZSQUdfTUFTSykKKwkJbGlzdF9kZWwoJnBhZ2UtPmxydSk7CisJbWFzayA9IGF0b21pY194b3JfYml0cygmcGFnZS0+X21hcGNvdW50LCBiaXQgfCAoYml0IDw8IDQpKTsKKwlpZiAobWFzayAmIEZSQUdfTUFTSykKKwkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKIAlzcGluX3VubG9ja19iaCgmbW0tPmNvbnRleHQubGlzdF9sb2NrKTsKLQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopKCgodW5zaWduZWQgbG9uZykgdGFibGUpIHwgYml0cyk7Ci0JYmF0Y2gtPnRhYmxlW2JhdGNoLT5wZ3RfaW5kZXgrK10gPSB0YWJsZTsKLQlpZiAoYmF0Y2gtPnBndF9pbmRleCA+PSBiYXRjaC0+Y3JzdF9pbmRleCkKLQkJcmN1X3RhYmxlX2ZyZWVsaXN0X2ZpbmlzaCgpOwotb3V0OgotCXByZWVtcHRfZW5hYmxlKCk7CisJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSAoX19wYSh0YWJsZSkgfCAoYml0IDw8IDQpKTsKKwl0bGJfcmVtb3ZlX3RhYmxlKHRsYiwgdGFibGUpOwogfQogCit2b2lkIF9fdGxiX3JlbW92ZV90YWJsZSh2b2lkICpfdGFibGUpCit7CisJdm9pZCAqdGFibGUgPSAodm9pZCAqKSgodW5zaWduZWQgbG9uZykgX3RhYmxlICYgUEFHRV9NQVNLKTsKKwl1bnNpZ25lZCB0eXBlID0gKHVuc2lnbmVkIGxvbmcpIF90YWJsZSAmIH5QQUdFX01BU0s7CisKKwlpZiAodHlwZSkKKwkJX19wYWdlX3RhYmxlX2ZyZWVfcmN1KHRhYmxlLCB0eXBlKTsKKwllbHNlCisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHRhYmxlLCBBTExPQ19PUkRFUik7Cit9CisKKyNlbmRpZgorCiAvKgogICogc3dpdGNoIG9uIHBnc3RlcyBmb3IgaXRzIHVzZXJzcGFjZSBwcm9jZXNzIChmb3Iga3ZtKQogICovCkBAIC0zNjksNyArMzE1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwotCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKKwlpZiAobW1faGFzX3Bnc3RlKHRzay0+bW0pKQogCQlyZXR1cm4gMDsKIAogCS8qIGxldHMgY2hlY2sgaWYgd2UgYXJlIGFsbG93ZWQgdG8gcmVwbGFjZSB0aGUgbW0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBhZjMyZTE3Li4yNTM5ODZiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0yNiw3ICsyNiw2IEBACiAJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfSEFSRElSUVMKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKIAlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCiAKQEAgLTUyOCw2ICs1MjcsMjMgQEAKIGNvbmZpZyBQQ0lfU1lTQ0FMTAogCWRlZl9ib29sIFBDSQogCitjb25maWcgUENJQ19QQ0kKKwlib29sCisJZGVwZW5kcyBvbiBQQ0kgJiYgU1BBUkMzMiAmJiAhU1BBUkNfTEVPTgorCWRlZmF1bHQgeQorCitjb25maWcgTEVPTl9QQ0kKKwlib29sCisJZGVwZW5kcyBvbiBQQ0kgJiYgU1BBUkNfTEVPTgorCWRlZmF1bHQgeQorCitjb25maWcgR1JQQ0kyCisJYm9vbCAiR1JQQ0kyIEhvc3QgQnJpZGdlIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBMRU9OX1BDSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSB0aGUgR1JQQ0kyIEhvc3QgQnJpZGdlIERyaXZlci4KKwogc291cmNlICJkcml2ZXJzL3BjaS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvcGNtY2lhL0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfMzIuaAppbmRleCA0ODJjNzllLi43NDQwOTE1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzMyLmgKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlyZXR1cm4gc3VuX2ZkYy0+ZGF0YV84MjA3MjsKIAljYXNlIDc6IC8qIEZEX0RJUiAqLwogCQlyZXR1cm4gc3VuX3JlYWRfZGlyKCk7Ci0JfTsKKwl9CiAJcGFuaWMoInN1bl84MjA3Ml9mZF9pbmI6IEhvdyBkaWQgSSBnZXQgaGVyZT8iKTsKIH0KIApAQCAtMTYxLDcgKzE2MSw3IEBACiAJY2FzZSA0OiAvKiBGRF9TVEFUVVMgKi8KIAkJc3VuX2ZkYy0+c3RhdHVzXzgyMDcyID0gdmFsdWU7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJCXJldHVybiBzdW5fZmRjLT5kYXRhXzgyMDc3OwogCWNhc2UgNzogLyogRkRfRElSICovCiAJCXJldHVybiBzdW5fcmVhZF9kaXIoKTsKLQl9OworCX0KIAlwYW5pYygic3VuXzgyMDc3X2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwogfQogCkBAIC0yMTIsNyArMjEyLDcgQEAKIAljYXNlIDM6IC8qIEZEX1REUiAqLwogCQlzdW5fZmRjLT50YXBlY3RsXzgyMDc3ID0gdmFsdWU7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmxvcHB5XzY0LmgKaW5kZXggNjU5N2NlOC4uYmNlZjFmNSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mbG9wcHlfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2Zsb3BweV82NC5oCkBAIC0xMTEsNyArMTExLDcgQEAKIAljYXNlIDc6IC8qIEZEX0RJUiAqLwogCQkvKiBYWFg6IElzIERDTCBvbiAweDgwIGluIHN1bjRtPyAqLwogCQlyZXR1cm4gc2J1c19yZWFkYigmc3VuX2ZkYy0+ZGlyXzgyMDc3KTsKLQl9OworCX0KIAlwYW5pYygic3VuXzgyMDcyX2ZkX2luYjogSG93IGRpZCBJIGdldCBoZXJlPyIpOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAKIAljYXNlIDQ6IC8qIEZEX1NUQVRVUyAqLwogCQlzYnVzX3dyaXRlYih2YWx1ZSwgJnN1bl9mZGMtPnN0YXR1c184MjA3Nyk7CiAJCWJyZWFrOwotCX07CisJfQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9sZW9uLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaAppbmRleCA2YmRhZjFlLi5hNGU0NTdmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb24uaApAQCAtMzE4LDYgKzMxOCw5IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGxlb25fYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsCiAJCQkJCSAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCiAJCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBkb19hY2spOworZXh0ZXJuIHZvaWQgbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyh1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKTsKIGV4dGVybiB2b2lkIGxlb25fY2xlYXJfY2xvY2tfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGVvbl9sb2FkX3Byb2ZpbGVfaXJxKGludCBjcHUsIHVuc2lnbmVkIGludCBsaW1pdCk7CiBleHRlcm4gdm9pZCBsZW9uX2luaXRfdGltZXJzKGlycV9oYW5kbGVyX3QgY291bnRlcl9mbik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2xlb25fcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiNGIzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vbGVvbl9wY2kuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogYXNtL2xlb25fcGNpLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWVyb2ZsZXggR2Fpc2xlciBBQiwgRGFuaWVsIEhlbGxzdHJvbQorICovCisKKyNpZm5kZWYgX0FTTV9MRU9OX1BDSV9IXworI2RlZmluZSBfQVNNX0xFT05fUENJX0hfCisKKy8qIFBDSSByZWxhdGVkIGRlZmluaXRpb25zICovCitzdHJ1Y3QgbGVvbl9wY2lfaW5mbyB7CisJc3RydWN0IHBjaV9vcHMgKm9wczsKKwlzdHJ1Y3QgcmVzb3VyY2UJaW9fc3BhY2U7CisJc3RydWN0IHJlc291cmNlCW1lbV9zcGFjZTsKKwlpbnQgKCptYXBfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pOworfTsKKworZXh0ZXJuIHZvaWQgbGVvbl9wY2lfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldiwKKwkJCQlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyk7CisKKyNlbmRpZiAvKiBfQVNNX0xFT05fUENJX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAppbmRleCAzMzJhYzlhLi44NjJlM2NlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKQEAgLTQ3LDcgKzQ3LDMxIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKyNpZm5kZWYgQ09ORklHX0xFT05fUENJCiAvKiBnZW5lcmljIHBjaSBzdHVmZiAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS5oPgorI2Vsc2UKKy8qCisgKiBPbiBMRU9OIFBDSSBNZW1vcnkgc3BhY2UgaXMgbWFwcGVkIDE6MSB3aXRoIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuCisgKgorICogSS9PIHNwYWNlIGlzIGxvY2F0ZWQgYXQgbG93IDY0S2J5dGVzIGluIFBDSSBJL08gc3BhY2UuIFRoZSBJL08gYWRkcmVzc2VzCisgKiBhcmUgY29udmVydGVkIGludG8gQ1BVIGFkZHJlc3NlcyB0byB2aXJ0dWFsIGFkZHJlc3NlcyB0aGF0IGFyZSBtYXBwZWQgd2l0aAorICogTU1VIHRvIHRoZSBQQ0kgSG9zdCBQQ0kgSS9PIHNwYWNlIHdpbmRvdyB3aGljaCBhcmUgdHJhbnNsYXRlZCB0byB0aGUgbG93CisgKiA2NEtieXRlcyBieSB0aGUgSG9zdCBjb250cm9sbGVyLgorICovCisKK2V4dGVybiB2b2lkCitwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCXN0cnVjdCByZXNvdXJjZSAqcmVzKTsKKworZXh0ZXJuIHZvaWQKK3BjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJc3RydWN0IHBjaV9idXNfcmVnaW9uICpyZWdpb24pOworCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBQQ0lfSVJRX05PTkU7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fU1BBUkNfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpYy5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKaW5kZXggN2ViNWQ3OC4uNjY3NmNiYyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2ljLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAlpbnQJCQlwY2ljX2ltZGltOwogfTsKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZmRlZiBDT05GSUdfUENJQ19QQ0kKIGV4dGVybiBpbnQgcGNpY19wcmVzZW50KHZvaWQpOwogZXh0ZXJuIGludCBwY2ljX3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX3RpbWVfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV8zMi5oCmluZGV4IDQ3YTdlODYuLmFiYTE2MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fMzIuaApAQCAtMjIwLDcgKzIyMCw3IEBACiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSA0OgogCQlyZXR1cm4geGNoZ191MzIocHRyLCB4KTsKLQl9OworCX0KIAlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCmluZGV4IDNjOTZkM2IuLjEwYmNhYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaApAQCAtMjM0LDcgKzIzNCw3IEBACiAJCXJldHVybiB4Y2hnMzIocHRyLCB4KTsKIAljYXNlIDg6CiAJCXJldHVybiB4Y2hnNjQocHRyLCB4KTsKLQl9OworCX0KIAlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggOWNmZjI3MC4uYjkwYjRhMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTczLDcgKzczLDkgQEAKIAogb2JqLXkgICAgICAgICAgICAgICAgICAgICArPSBkbWEubwogCi1vYmotJChDT05GSUdfU1BBUkMzMl9QQ0kpICs9IHBjaWMubworb2JqLSQoQ09ORklHX1BDSUNfUENJKSAgICArPSBwY2ljLm8KK29iai0kKENPTkZJR19MRU9OX1BDSSkgICAgKz0gbGVvbl9wY2kubworb2JqLSQoQ09ORklHX0dSUENJMikgICAgICArPSBsZW9uX3BjaV9ncnBjaTIubwogCiBvYmotJChDT05GSUdfU01QKSAgICAgICAgICs9IHRyYW1wb2xpbmVfJChCSVRTKS5vIHNtcF8kKEJJVFMpLm8KIG9iai0kKENPTkZJR19TUEFSQzMyX1NNUCkgKz0gc3VuNG1fc21wLm8gc3VuNGRfc21wLm8gbGVvbl9zbXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwppbmRleCAxZTM0ZjI5Li5jYWVmOWRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwpAQCAtMTIzLDcgKzEyMyw3IEBACiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKLQl9OworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL2F1eGlvXzMyLmMKaW5kZXggODUwNWUwYS4uYWNmNTE1MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvYXV4aW9fMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hdXhpb18zMi5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcGFuaWMoIkNhbid0IHNldCBBVVhJTyByZWdpc3RlciBvbiB0aGlzIG1hY2hpbmUuIik7Ci0JfTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXV4aW9fbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChzZXRfYXV4aW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvY2htYy5jCmluZGV4IDY2OGM3YmUuLjVmNDUwMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2NobWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9jaG1jLmMKQEAgLTY2NCw3ICs2NjQsNyBAQAogCWNhc2UgMHgwOgogCQlicC0+aW50ZXJsZWF2ZSA9IDE2OwogCQlicmVhazsKLQl9OworCX0KIAogCS8qIFVLWzEwXSBpcyByZXNlcnZlZCwgYW5kIFVLWzExXSBpcyBub3Qgc2V0IGZvciB0aGUgU0RSQU0KIAkgKiBiYW5rIHNpemUgZGVmaW5pdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgzNDE5NjMuLjlmZTA4YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuUwpAQCAtMjI5LDcgKzIyOSw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCS5nbG9ibAlwYXRjaG1lX21heWJlX3NtcF9tc2cKIAotCWNtcAklbDcsIDEyCisJY21wCSVsNywgMTEKIHBhdGNobWVfbWF5YmVfc21wX21zZzoKIAliZ3UJbWF5YmVfc21wNG1fbXNnCiAJIG5vcApAQCAtMjkzLDcgKzI5Myw3IEBACiAJV1JJVEVfUEFVU0UKIAl3cgklbDQsIFBTUl9FVCwgJXBzcgogCVdSSVRFX1BBVVNFCi0Jc2xsCSVvMiwgMjgsICVvMgkJISBzaGlmdCBmb3Igc2ltcGxlciBjaGVja3MgYmVsb3cKKwlzbGwJJW8zLCAyOCwgJW8yCQkhIHNoaWZ0IGZvciBzaW1wbGVyIGNoZWNrcyBiZWxvdwogbWF5YmVfc21wNG1fbXNnX2NoZWNrX3NpbmdsZToKIAlhbmRjYwklbzIsIDB4MSwgJWcwCiAJYmVxLGEJbWF5YmVfc21wNG1fbXNnX2NoZWNrX21hc2sKQEAgLTE2MDQsNyArMTYwNCw3IEBACiAJcmV0bAogCSBub3AKIAotI2lmZGVmIENPTkZJR19QQ0kKKyNpZmRlZiBDT05GSUdfUENJQ19QQ0kKICNpbmNsdWRlIDxhc20vcGNpYy5oPgogCiAJLmFsaWduCTQKQEAgLTE2NTAsNyArMTY1MCw3IEBACiAJIHJkCSVwc3IsICVsMAogCS53b3JkCTAKIAotI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KKyNlbmRpZiAvKiBDT05GSUdfUENJQ19QQ0kgKi8KIAogCS5nbG9ibAlmbHVzaHdfYWxsCiBmbHVzaHdfYWxsOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKaW5kZXggMmY1MzhhYy4uZDE3MjU1YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCkBAIC0yMzYsNiArMjM2LDIxIEBACiAJcmV0dXJuIGxlb25fYnVpbGRfZGV2aWNlX2lycShyZWFsX2lycSwgaGFuZGxlX3NpbXBsZV9pcnEsICJlZGdlIiwgMCk7CiB9CiAKK3ZvaWQgbGVvbl91cGRhdGVfdmlycV9oYW5kbGluZyh1bnNpZ25lZCBpbnQgdmlycSwKKwkJCSAgICAgIGlycV9mbG93X2hhbmRsZXJfdCBmbG93X2hhbmRsZXIsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgZG9fYWNrKQoreworCXVuc2lnbmVkIGxvbmcgbWFzayA9ICh1bnNpZ25lZCBsb25nKWlycV9nZXRfY2hpcF9kYXRhKHZpcnEpOworCisJbWFzayAmPSB+TEVPTl9ET19BQ0tfSFc7CisJaWYgKGRvX2FjaykKKwkJbWFzayB8PSBMRU9OX0RPX0FDS19IVzsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHZpcnEsICZsZW9uX2lycSwKKwkJCQkgICAgICBmbG93X2hhbmRsZXIsIG5hbWUpOworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsICh2b2lkICopbWFzayk7Cit9CisKIHZvaWQgX19pbml0IGxlb25faW5pdF90aW1lcnMoaXJxX2hhbmRsZXJfdCBjb3VudGVyX2ZuKQogewogCWludCBpcnEsIGVpcnE7CkBAIC0zNjEsNiArMzc2LDIyIEBACiAJCXByb21faGFsdCgpOwogCX0KIAorI2lmZGVmIENPTkZJR19TTVAKKwl7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJLyoKKwkJICogSW4gU01QLCBzdW40bSBhZGRzIGEgSVBJIGhhbmRsZXIgdG8gSVJRIHRyYXAgaGFuZGxlciB0aGF0CisJCSAqIExFT04gbmV2ZXIgbXVzdCB0YWtlLCBzdW40ZCBhbmQgTEVPTiBvdmVyd3JpdGVzIHRoZSBicmFuY2gKKwkJICogd2l0aCBhIE5PUC4KKwkJICovCisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcGF0Y2htZV9tYXliZV9zbXBfbXNnWzBdID0gMHgwMTAwMDAwMDsgLyogTk9QIG91dCB0aGUgYnJhbmNoICovCisJCWxvY2FsX2ZsdXNoX2NhY2hlX2FsbCgpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorI2VuZGlmCisKIAlMRU9OM19CWVBBU1NfU1RPUkVfUEEoJmxlb24zX2dwdGltZXJfcmVncy0+ZVtsZW9uM19ncHRpbWVyX2lkeF0uY3RybCwKIAkJCSAgICAgIExFT04zX0dQVElNRVJfRU4gfAogCQkJICAgICAgTEVPTjNfR1BUSU1FUl9STCB8CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGE5YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2kuYwpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGxlb25fcGNpLmM6IExFT04gSG9zdCBQQ0kgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZXJvZmxleCBHYWlzbGVyIEFCLCBEYW5pZWwgSGVsbHN0cm9tCisgKgorICogQ29kZSBpcyBwYXJ0aWFsbHkgZGVyaXZlZCBmcm9tIHBjaWMuYworICovCisKKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbGVvbi5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX3BjaS5oPgorCisvKiBUaGUgTEVPTiBhcmNoaXRlY3R1cmUgZG9lcyBub3QgcmVseSBvbiBhIEJJT1Mgb3IgYm9vdGxvYWRlciB0byBzZXR1cAorICogUENJIGZvciB1cy4gVGhlIExpbnV4IGdlbmVyaWMgcm91dGluZXMgYXJlIHVzZWQgdG8gc2V0dXAgcmVzb3VyY2VzLAorICogcmVzZXQgdmFsdWVzIG9mIGNvbmZ1cmF0aW9uLXNwYWNlIHJlZ2lzdGVycyBzZXR0aW5ncyBhZSBwcmVzZXZlZC4KKyAqLwordm9pZCBsZW9uX3BjaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2LCBzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcm9vdF9idXM7CisKKwlyb290X2J1cyA9IHBjaV9zY2FuX2J1c19wYXJlbnRlZCgmb2ZkZXYtPmRldiwgMCwgaW5mby0+b3BzLCBpbmZvKTsKKwlpZiAocm9vdF9idXMpIHsKKwkJcm9vdF9idXMtPnJlc291cmNlWzBdID0gJmluZm8tPmlvX3NwYWNlOworCQlyb290X2J1cy0+cmVzb3VyY2VbMV0gPSAmaW5mby0+bWVtX3NwYWNlOworCQlyb290X2J1cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJCS8qIEluaXQgYWxsIFBDSSBkZXZpY2VzIGludG8gUENJIHRyZWUgKi8KKwkJcGNpX2J1c19hZGRfZGV2aWNlcyhyb290X2J1cyk7CisKKwkJLyogU2V0dXAgSVJRcyBvZiBhbGwgZGV2aWNlcyB1c2luZyBjdXN0b20gcm91dGluZXMgKi8KKwkJcGNpX2ZpeHVwX2lycXMocGNpX2NvbW1vbl9zd2l6emxlLCBpbmZvLT5tYXBfaXJxKTsKKworCQkvKiBBc3NpZ24gZGV2aWNlcyB3aXRoIHJlc291cmNlcyAqLworCQlwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7CisJfQorfQorCisvKiBQQ0kgTWVtb3J5IGFuZCBQcmVmZXRjaGFibGUgTWVtb3J5IGlzIGRpcmVjdC1tYXBwZWQuIEhvd2V2ZXIgSS9PIFNwYWNlIGlzCisgKiBhY2Nlc3NlZCB0aHJvdWdoIGEgV2luZG93IHdoaWNoIGlzIHRyYW5zbGF0ZWQgdG8gbG93IDY0S0IgaW4gUENJIHNwYWNlLCB0aGUKKyAqIGZpcnN0IDRLQiBpcyBub3QgdXNlZCBzbyA2MEtCIGlzIGF2YWlsYWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgZ2VuZXJpYyBjb2RlIHRvIHRyYW5zbGF0ZSByZXNvdXJjZSBhZGRyZXNzZXMgaW50bworICogUENJIGFkZHJlc3Nlcy4KKyAqLwordm9pZCBwY2liaW9zX3Jlc291cmNlX3RvX2J1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbiwKKwkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJc3RydWN0IGxlb25fcGNpX2luZm8gKmluZm8gPSBkZXYtPmJ1cy0+c3lzZGF0YTsKKworCXJlZ2lvbi0+c3RhcnQgPSByZXMtPnN0YXJ0OworCXJlZ2lvbi0+ZW5kID0gcmVzLT5lbmQ7CisKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKKwkJcmVnaW9uLT5zdGFydCAtPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCQlyZWdpb24tPmVuZCAtPSAoaW5mby0+aW9fc3BhY2Uuc3RhcnQgLSAweDEwMDApOworCX0KK30KK0VYUE9SVF9TWU1CT0wocGNpYmlvc19yZXNvdXJjZV90b19idXMpOworCisvKiBzZWUgcGNpYmlvc19yZXNvdXJjZV90b19idXMoKSBjb21tZW50ICovCit2b2lkIHBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJICAgICBzdHJ1Y3QgcGNpX2J1c19yZWdpb24gKnJlZ2lvbikKK3sKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbyAqaW5mbyA9IGRldi0+YnVzLT5zeXNkYXRhOworCisJcmVzLT5zdGFydCA9IHJlZ2lvbi0+c3RhcnQ7CisJcmVzLT5lbmQgPSByZWdpb24tPmVuZDsKKworCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgeworCQlyZXMtPnN0YXJ0ICs9IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJCXJlcy0+ZW5kICs9IChpbmZvLT5pb19zcGFjZS5zdGFydCAtIDB4MTAwMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChwY2liaW9zX2J1c190b19yZXNvdXJjZSk7CisKK3ZvaWQgX19kZXZpbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpwYnVzKQoreworCXN0cnVjdCBsZW9uX3BjaV9pbmZvICppbmZvID0gcGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCWludCBpLCBoYXNfaW8sIGhhc19tZW07CisJdTE2IGNtZDsKKworCS8qIEdlbmVyaWMgUENJIGJ1cyBwcm9iaW5nIHNldHMgdGhlc2UgdG8gcG9pbnQgYXQKKwkgKiAmaW97cG9ydCxtZW19X3Jlc291Y2Ugd2hpY2ggaXMgd3JvbmcgZm9yIHVzLgorCSAqLworCWlmIChwYnVzLT5zZWxmID09IE5VTEwpIHsKKwkJcGJ1cy0+cmVzb3VyY2VbMF0gPSAmaW5mby0+aW9fc3BhY2U7CisJCXBidXMtPnJlc291cmNlWzFdID0gJmluZm8tPm1lbV9zcGFjZTsKKwkJcGJ1cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmcGJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJLyoKKwkJICogV2UgY2FuIG5vdCByZWx5IG9uIHRoYXQgdGhlIGJvb3Rsb2FkZXIgaGFzIGVuYWJsZWQgSS9PCisJCSAqIG9yIG1lbW9yeSBhY2Nlc3MgdG8gUENJIGRldmljZXMuIEluc3RlYWQgd2UgZW5hYmxlIGl0IGhlcmUKKwkJICogaWYgdGhlIGRldmljZSBoYXMgQkFScyBvZiByZXNwZWN0aXZlIHR5cGUuCisJCSAqLworCQloYXNfaW8gPSBoYXNfbWVtID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IFBDSV9ST01fUkVTT1VSQ0U7IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBmID0gZGV2LT5yZXNvdXJjZVtpXS5mbGFnczsKKwkJCWlmIChmICYgSU9SRVNPVVJDRV9JTykKKwkJCQloYXNfaW8gPSAxOworCQkJZWxzZSBpZiAoZiAmIElPUkVTT1VSQ0VfTUVNKQorCQkJCWhhc19tZW0gPSAxOworCQl9CisJCS8qIFJPTSBCQVJzIGFyZSBtYXBwZWQgaW50byAzMi1iaXQgbWVtb3J5IHNwYWNlICovCisJCWlmIChkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmVuZCAhPSAwKSB7CisJCQlkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzIHw9CisJCQkJCQkJSU9SRVNPVVJDRV9ST01fRU5BQkxFOworCQkJaGFzX21lbSA9IDE7CisJCX0KKwkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBidXMsIGRldi0+ZGV2Zm4sIFBDSV9DT01NQU5ELCAmY21kKTsKKwkJaWYgKGhhc19pbyAmJiAhKGNtZCAmIFBDSV9DT01NQU5EX0lPKSkgeworI2lmZGVmIENPTkZJR19QQ0lfREVCVUcKKwkJCXByaW50ayhLRVJOX0lORk8gIkxFT05QQ0k6IEVuYWJsaW5nIEkvTyBmb3IgZGV2ICVzXG4iLAorCQkJCQkgcGNpX25hbWUoZGV2KSk7CisjZW5kaWYKKwkJCWNtZCB8PSBQQ0lfQ09NTUFORF9JTzsKKwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGJ1cywgZGV2LT5kZXZmbiwgUENJX0NPTU1BTkQsCisJCQkJCQkJCQljbWQpOworCQl9CisJCWlmIChoYXNfbWVtICYmICEoY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkgeworI2lmZGVmIENPTkZJR19QQ0lfREVCVUcKKwkJCXByaW50ayhLRVJOX0lORk8gIkxFT05QQ0k6IEVuYWJsaW5nIE1FTU9SWSBmb3IgZGV2IgorCQkJCQkgIiVzXG4iLCBwY2lfbmFtZShkZXYpKTsKKyNlbmRpZgorCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKKwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGJ1cywgZGV2LT5kZXZmbiwgUENJX0NPTU1BTkQsCisJCQkJCQkJCQljbWQpOworCQl9CisJfQorfQorCisvKgorICogT3RoZXIgYXJjaHMgcGFyc2UgYXJndW1lbnRzIGhlcmUuCisgKi8KK2NoYXIgKiBfX2RldmluaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCit7CisJcmV0dXJuIHN0cjsKK30KKworcmVzb3VyY2Vfc2l6ZV90IHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgY29uc3Qgc3RydWN0IHJlc291cmNlICpyZXMsCisJCQkJcmVzb3VyY2Vfc2l6ZV90IHNpemUsIHJlc291cmNlX3NpemVfdCBhbGlnbikKK3sKKwlyZXR1cm4gcmVzLT5zdGFydDsKK30KKworaW50IHBjaWJpb3NfZW5hYmxlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gcGNpX2VuYWJsZV9yZXNvdXJjZXMoZGV2LCBtYXNrKTsKK30KKworc3RydWN0IGRldmljZV9ub2RlICpwY2lfZGV2aWNlX3RvX09GX25vZGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyoKKwkgKiBDdXJyZW50bHkgdGhlIE9wZW5Cb290IG5vZGVzIGFyZSBub3QgY29ubmVjdGVkIHdpdGggdGhlIFBDSSBkZXZpY2UsCisJICogdGhpcyBpcyBiZWNhdXNlIHRoZSBMRU9OIFBST00gZG9lcyBub3QgY3JlYXRlIFBDSSBub2Rlcy4gRXZlbnR1YWxseQorCSAqIHRoaXMgd2lsbCBjaGFuZ2UgYW5kIHRoZSBzYW1lIGFwcHJvYWNoIGFzIHBjaWMuYyBjYW4gYmUgdXNlZCB0bworCSAqIG1hdGNoIFBST00gbm9kZXMgd2l0aCBwY2kgZGV2aWNlcy4KKwkgKi8KKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wocGNpX2RldmljZV90b19PRl9ub2RlKTsKKwordm9pZCBfX2RldmluaXQgcGNpYmlvc191cGRhdGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpcnEpCit7CisjaWZkZWYgQ09ORklHX1BDSV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJMRU9OUENJOiBBc3NpZ25pbmcgSVJRICUwMmQgdG8gJXNcbiIsIGlycSwKKwkJcGNpX25hbWUoZGV2KSk7CisjZW5kaWYKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGlycSk7Cit9CisKKy8qIGluL291dCByb3V0aW5lcyB0YWtlbiBmcm9tIHBjaWMuYworICoKKyAqIFRoaXMgcHJvYmFibHkgYmVsb25ncyBoZXJlIHJhdGhlciB0aGFuIGlvcG9ydC5jIGJlY2F1c2UKKyAqIHdlIGRvIG5vdCB3YW50IHRoaXMgY3J1ZCBsaW5rZWQgaW50byBTQnVzIGtlcm5lbHMuCisgKiBBbHNvLCB0aGluayBmb3IgYSBtb21lbnQgYWJvdXQgbGlrZXMgb2YgZmxvcHB5LmMgdGhhdAorICogaW5jbHVkZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgcGFydHMuIFRoZXkgbWF5IHdhbnQgdG8gcmVkZWZpbmUgaW5zL291dHMuCisgKgorICogV2UgZG8gbm90IHVzZSBob3JyaWJsZSBtYWNyb3MgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdG8KKyAqIGFkdmFuY2UgcG9pbnRlciBieSBzaXplb2Yoc2l6ZSkuCisgKi8KK3ZvaWQgb3V0c2IodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDE7CisJCW91dGIoKihjb25zdCBjaGFyICopc3JjLCBhZGRyKTsKKwkJc3JjICs9IDE7CisJCS8qIGFkZHIgKz0gMTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKG91dHNiKTsKKwordm9pZCBvdXRzdyh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gMjsKKwkJb3V0dygqKGNvbnN0IHNob3J0ICopc3JjLCBhZGRyKTsKKwkJc3JjICs9IDI7CisJCS8qIGFkZHIgKz0gMjsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKG91dHN3KTsKKwordm9pZCBvdXRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl3aGlsZSAoY291bnQpIHsKKwkJY291bnQgLT0gNDsKKwkJb3V0bCgqKGNvbnN0IGxvbmcgKilzcmMsIGFkZHIpOworCQlzcmMgKz0gNDsKKwkJLyogYWRkciArPSA0OyAqLworCX0KK30KK0VYUE9SVF9TWU1CT0wob3V0c2wpOworCit2b2lkIGluc2IodW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDE7CisJCSoodW5zaWduZWQgY2hhciAqKWRzdCA9IGluYihhZGRyKTsKKwkJZHN0ICs9IDE7CisJCS8qIGFkZHIgKz0gMTsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGluc2IpOworCit2b2lkIGluc3codW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJd2hpbGUgKGNvdW50KSB7CisJCWNvdW50IC09IDI7CisJCSoodW5zaWduZWQgc2hvcnQgKilkc3QgPSBpbncoYWRkcik7CisJCWRzdCArPSAyOworCQkvKiBhZGRyICs9IDI7ICovCisJfQorfQorRVhQT1JUX1NZTUJPTChpbnN3KTsKKwordm9pZCBpbnNsKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXdoaWxlIChjb3VudCkgeworCQljb3VudCAtPSA0OworCQkvKgorCQkgKiBYWFggSSBhbSBzdXJlIHdlIGFyZSBpbiBmb3IgYW4gdW5hbGlnbmVkIHRyYXAgaGVyZS4KKwkJICovCisJCSoodW5zaWduZWQgbG9uZyAqKWRzdCA9IGlubChhZGRyKTsKKwkJZHN0ICs9IDQ7CisJCS8qIGFkZHIgKz0gNDsgKi8KKwl9Cit9CitFWFBPUlRfU1lNQk9MKGluc2wpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3BjaV9ncnBjaTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGRjMDkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9wY2lfZ3JwY2kyLmMKQEAgLTAsMCArMSw4OTcgQEAKKy8qCisgKiBsZW9uX3BjaV9ncnBjaTIuYzogR1JQQ0kyIEhvc3QgUENJIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZXJvZmxleCBHYWlzbGVyIEFCLCBEYW5pZWwgSGVsbHN0cm9tCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9sZW9uLmg+CisjaW5jbHVkZSA8YXNtL3ZhZGRycy5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9sZW9uX3BjaS5oPgorCisjaW5jbHVkZSAiaXJxLmgiCisKK3N0cnVjdCBncnBjaTJfYmFyY2ZnIHsKKwl1bnNpZ25lZCBsb25nIHBjaWFkcjsJLyogUENJIFNwYWNlIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBsb25nIGFoYmFkcjsJLyogUENJIEJhc2UgYWRkcmVzcyBtYXBwZWQgdG8gdGhpcyBBSEIgYWRkciAqLworfTsKKworLyogRGV2aWNlIE5vZGUgQ29uZmlndXJhdGlvbiBvcHRpb25zOgorICogIC0gYmFyY2ZncyAgICA6IEN1c3RvbSBDb25maWd1cmF0aW9uIG9mIEhvc3QncyA2IHRhcmdldCBCQVJzCisgKiAgLSBpcnFfbWFzayAgIDogTGltaXQgd2hpY2ggUENJIGludGVycnVwdHMgYXJlIGVuYWJsZWQKKyAqICAtIGRvX3Jlc2V0ICAgOiBGb3JjZSBQQ0kgUmVzZXQgb24gc3RhcnR1cAorICoKKyAqIGJhcmNmZ3MKKyAqID09PT09PT0KKyAqCisgKiBPcHRpb25hbCBjdXN0b20gVGFyZ2V0IEJBUiBjb25maWd1cmF0aW9uIChzZWUgc3RydWN0IGdycGNpMl9iYXJjZmcpLiBBbGwKKyAqIGFkZHJlc3NlcyBhcmUgcGh5c2ljYWwuIEFycmF5IGFsd2F5cyBjb250YWlucyA2IGVsZW1lbnRzIChsZW49Mio0KjYgYnl0ZXMpCisgKgorICogLTEgbWVhbnMgbm90IGNvbmZpZ3VyZWQgKGxldCBob3N0IGRyaXZlciBkbyBkZWZhdWx0IHNldHVwKS4KKyAqCisgKiBbaSoyKzBdID0gUENJIEFkZHJlc3Mgb2YgQkFSW2ldIG9uIHRhcmdldCBpbnRlcmZhY2UKKyAqIFtpKjIrMV0gPSBBY2Nlc3NpbmcgUENJIGFkZHJlc3Mgb2YgQkFSW2ldIHJlc3VsdCBpbiB0aGlzIEFNQkEgYWRkcmVzcworICoKKyAqCisgKiBpcnFfbWFzaworICogPT09PT09PT0KKyAqCisgKiBMaW1pdCB3aGljaCBQQ0kgaW50ZXJydXB0cyBhcmUgZW5hYmxlZC4gMD1EaXNhYmxlLCAxPUVuYWJsZS4gQnkgZGVmYXVsdAorICogYWxsIGFyZSBlbmFibGVkLiBVc2UgdGhpcyB3aGVuIFBDSSBpbnRlcnJ1cHQgcGlucyBhcmUgZmxvYXRpbmcgb24gUENCLgorICogaW50LCBsZW49NC4KKyAqICBiaXQwID0gUENJIElOVEEjCisgKiAgYml0MSA9IFBDSSBJTlRCIworICogIGJpdDIgPSBQQ0kgSU5UQyMKKyAqICBiaXQzID0gUENJIElOVEQjCisgKgorICoKKyAqIHJlc2V0CisgKiA9PT09PQorICoKKyAqIEZvcmNlIFBDSSByZXNldCBvbiBzdGFydHVwLiBpbnQsIGxlbj00CisgKi8KKworLyogRW5hYmxlIERlYnVnZ2luZyBDb25maWd1cmF0aW9uIFNwYWNlIEFjY2VzcyAqLworI3VuZGVmIEdSUENJMl9ERUJVR19DRkdBQ0NFU1MKKworLyoKKyAqIEdSUENJMiBBUEIgUmVnaXN0ZXIgTUFQCisgKi8KK3N0cnVjdCBncnBjaTJfcmVncyB7CisJdW5zaWduZWQgaW50IGN0cmw7CQkvKiAweDAwIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQgc3RzX2NhcDsJCS8qIDB4MDQgU3RhdHVzIC8gQ2FwYWJpbGl0aWVzICovCisJaW50IHJlczE7CQkJLyogMHgwOCAqLworCXVuc2lnbmVkIGludCBpb19tYXA7CQkvKiAweDBDIEkvTyBNYXAgYWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBkbWFfY3RybDsJCS8qIDB4MTAgRE1BICovCisJdW5zaWduZWQgaW50IGRtYV9iZGJhc2U7CS8qIDB4MTQgRE1BICovCisJaW50IHJlczJbMl07CQkJLyogMHgxOCAqLworCXVuc2lnbmVkIGludCBiYXJzWzZdOwkJLyogMHgyMCByZWFkLW9ubHkgUENJIEJBUnMgKi8KKwlpbnQgcmVzM1syXTsJCQkvKiAweDM4ICovCisJdW5zaWduZWQgaW50IGFoYm1zdF9tYXBbMTZdOwkvKiAweDQwIEFIQi0+UENJIE1hcCBwZXIgQUhCIE1hc3RlciAqLworCisJLyogUENJIFRyYWNlIEJ1ZmZlciBSZWdpc3RlcnMgKE9QVElPTkFMKSAqLworCXVuc2lnbmVkIGludCB0X2N0cmw7CQkvKiAweDgwICovCisJdW5zaWduZWQgaW50IHRfY250OwkJLyogMHg4NCAqLworCXVuc2lnbmVkIGludCB0X2FkcGF0OwkJLyogMHg4OCAqLworCXVuc2lnbmVkIGludCB0X2FkbWFzazsJCS8qIDB4OEMgKi8KKwl1bnNpZ25lZCBpbnQgdF9zaWdwYXQ7CQkvKiAweDkwICovCisJdW5zaWduZWQgaW50IHRfc2lnbWFzazsJCS8qIDB4OTQgKi8KKwl1bnNpZ25lZCBpbnQgdF9hZHN0YXRlOwkJLyogMHg5OCAqLworCXVuc2lnbmVkIGludCB0X3NpZ3N0YXRlOwkvKiAweDlDICovCit9OworCisjZGVmaW5lIFJFR0xPQUQoYSkJKGJlMzJfdG9fY3B1KF9fcmF3X3JlYWRsKCYoYSkpKSkKKyNkZWZpbmUgUkVHU1RPUkUoYSwgdikJKF9fcmF3X3dyaXRlbChjcHVfdG9fYmUzMih2KSwgJihhKSkpCisKKyNkZWZpbmUgQ1RSTF9CVVNfQklUIDE2CisKKyNkZWZpbmUgQ1RSTF9SRVNFVCAoMTw8MzEpCisjZGVmaW5lIENUUkxfU0kgKDE8PDI3KQorI2RlZmluZSBDVFJMX1BFICgxPDwyNikKKyNkZWZpbmUgQ1RSTF9FSSAoMTw8MjUpCisjZGVmaW5lIENUUkxfRVIgKDE8PDI0KQorI2RlZmluZSBDVFJMX0JVUyAoMHhmZjw8Q1RSTF9CVVNfQklUKQorI2RlZmluZSBDVFJMX0hPU1RJTlQgMHhmCisKKyNkZWZpbmUgU1RTX0hPU1RfQklUCTMxCisjZGVmaW5lIFNUU19NU1RfQklUCTMwCisjZGVmaW5lIFNUU19UQVJfQklUCTI5CisjZGVmaW5lIFNUU19ETUFfQklUCTI4CisjZGVmaW5lIFNUU19ESV9CSVQJMjcKKyNkZWZpbmUgU1RTX0hJX0JJVAkyNgorI2RlZmluZSBTVFNfSVJRTU9ERV9CSVQJMjQKKyNkZWZpbmUgU1RTX1RSQUNFX0JJVAkyMworI2RlZmluZSBTVFNfQ0ZHRVJSVkFMSURfQklUIDIwCisjZGVmaW5lIFNUU19DRkdFUlJfQklUCTE5CisjZGVmaW5lIFNUU19JTlRUWVBFX0JJVAkxMgorI2RlZmluZSBTVFNfSU5UU1RTX0JJVAk4CisjZGVmaW5lIFNUU19GREVQVEhfQklUCTIKKyNkZWZpbmUgU1RTX0ZOVU1fQklUCTAKKworI2RlZmluZSBTVFNfSE9TVAkoMTw8U1RTX0hPU1RfQklUKQorI2RlZmluZSBTVFNfTVNUCQkoMTw8U1RTX01TVF9CSVQpCisjZGVmaW5lIFNUU19UQVIJCSgxPDxTVFNfVEFSX0JJVCkKKyNkZWZpbmUgU1RTX0RNQQkJKDE8PFNUU19ETUFfQklUKQorI2RlZmluZSBTVFNfREkJCSgxPDxTVFNfRElfQklUKQorI2RlZmluZSBTVFNfSEkJCSgxPDxTVFNfSElfQklUKQorI2RlZmluZSBTVFNfSVJRTU9ERQkoMHgzPDxTVFNfSVJRTU9ERV9CSVQpCisjZGVmaW5lIFNUU19UUkFDRQkoMTw8U1RTX1RSQUNFX0JJVCkKKyNkZWZpbmUgU1RTX0NGR0VSUlZBTElECSgxPDxTVFNfQ0ZHRVJSVkFMSURfQklUKQorI2RlZmluZSBTVFNfQ0ZHRVJSCSgxPDxTVFNfQ0ZHRVJSX0JJVCkKKyNkZWZpbmUgU1RTX0lOVFRZUEUJKDB4M2Y8PFNUU19JTlRUWVBFX0JJVCkKKyNkZWZpbmUgU1RTX0lOVFNUUwkoMHhmPDxTVFNfSU5UU1RTX0JJVCkKKyNkZWZpbmUgU1RTX0ZERVBUSAkoMHg3PDxTVFNfRkRFUFRIX0JJVCkKKyNkZWZpbmUgU1RTX0ZOVU0JKDB4Mzw8U1RTX0ZOVU1fQklUKQorCisjZGVmaW5lIFNUU19JU1lTRVJSCSgxPDwxNykKKyNkZWZpbmUgU1RTX0lETUEJKDE8PDE2KQorI2RlZmluZSBTVFNfSURNQUVSUgkoMTw8MTUpCisjZGVmaW5lIFNUU19JTVNUQUJSVAkoMTw8MTQpCisjZGVmaW5lIFNUU19JVEdUQUJSVAkoMTw8MTMpCisjZGVmaW5lIFNUU19JUEFSRVJSCSgxPDwxMikKKworI2RlZmluZSBTVFNfRVJSX0lSUSAoU1RTX0lTWVNFUlIgfCBTVFNfSU1TVEFCUlQgfCBTVFNfSVRHVEFCUlQgfCBTVFNfSVBBUkVSUikKKworc3RydWN0IGdycGNpMl9iZF9jaGFuIHsKKwl1bnNpZ25lZCBpbnQgY3RybDsJLyogMHgwMCBETUEgQ29udHJvbCAqLworCXVuc2lnbmVkIGludCBuY2hhbjsJLyogMHgwNCBOZXh0IERNQSBDaGFubmVsIEFkZHJlc3MgKi8KKwl1bnNpZ25lZCBpbnQgbmJkOwkvKiAweDA4IE5leHQgRGF0YSBEZXNjcmlwdG9yIGluIGNoYW4gKi8KKwl1bnNpZ25lZCBpbnQgcmVzOwkvKiAweDBDIFJlc2VydmVkICovCit9OworCisjZGVmaW5lIEJEX0NIQU5fRU4JCTB4ODAwMDAwMDAKKyNkZWZpbmUgQkRfQ0hBTl9UWVBFCQkweDAwMzAwMDAwCisjZGVmaW5lIEJEX0NIQU5fQkRDTlQJCTB4MDAwMGZmZmYKKyNkZWZpbmUgQkRfQ0hBTl9FTl9CSVQJCTMxCisjZGVmaW5lIEJEX0NIQU5fVFlQRV9CSVQJMjAKKyNkZWZpbmUgQkRfQ0hBTl9CRENOVF9CSVQJMAorCitzdHJ1Y3QgZ3JwY2kyX2JkX2RhdGEgeworCXVuc2lnbmVkIGludCBjdHJsOwkvKiAweDAwIERNQSBEYXRhIENvbnRyb2wgKi8KKwl1bnNpZ25lZCBpbnQgcGNpX2FkcjsJLyogMHgwNCBQQ0kgU3RhcnQgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBhaGJfYWRyOwkvKiAweDA4IEFIQiBTdGFydCBhZGRyZXNzICovCisJdW5zaWduZWQgaW50IG5leHQ7CS8qIDB4MEMgTmV4dCBEYXRhIERlc2NyaXB0b3IgaW4gY2hhbiAqLworfTsKKworI2RlZmluZSBCRF9EQVRBX0VOCQkweDgwMDAwMDAwCisjZGVmaW5lIEJEX0RBVEFfSUUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9EUgkJMHgyMDAwMDAwMAorI2RlZmluZSBCRF9EQVRBX1RZUEUJCTB4MDAzMDAwMDAKKyNkZWZpbmUgQkRfREFUQV9FUgkJMHgwMDA4MDAwMAorI2RlZmluZSBCRF9EQVRBX0xFTgkJMHgwMDAwZmZmZgorI2RlZmluZSBCRF9EQVRBX0VOX0JJVAkJMzEKKyNkZWZpbmUgQkRfREFUQV9JRV9CSVQJCTMwCisjZGVmaW5lIEJEX0RBVEFfRFJfQklUCQkyOQorI2RlZmluZSBCRF9EQVRBX1RZUEVfQklUCTIwCisjZGVmaW5lIEJEX0RBVEFfRVJfQklUCQkxOQorI2RlZmluZSBCRF9EQVRBX0xFTl9CSVQJCTAKKworLyogR1JQQ0kyIENhcGFiaWxpdHkgKi8KK3N0cnVjdCBncnBjaTJfY2FwX2ZpcnN0IHsKKwl1bnNpZ25lZCBpbnQgY3RybDsKKwl1bnNpZ25lZCBpbnQgcGNpMmFoYl9tYXBbNl07CisJdW5zaWduZWQgaW50IGV4dDJhaGJfbWFwOworCXVuc2lnbmVkIGludCBpb19tYXA7CisJdW5zaWduZWQgaW50IHBjaWJhcl9zaXplWzZdOworfTsKKyNkZWZpbmUgQ0FQOV9DVFJMX09GUyAwCisjZGVmaW5lIENBUDlfQkFSX09GUyAweDQKKyNkZWZpbmUgQ0FQOV9JT01BUF9PRlMgMHgyMAorI2RlZmluZSBDQVA5X0JBUlNJWkVfT0ZTIDB4MjQKKworc3RydWN0IGdycGNpMl9wcml2IHsKKwlzdHJ1Y3QgbGVvbl9wY2lfaW5mbwlpbmZvOyAvKiBtdXN0IGJlIG9uIHRvcCBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBncnBjaTJfcmVncwkqcmVnczsKKwljaGFyCQkJaXJxOworCWNoYXIJCQlpcnFfbW9kZTsgLyogSVJRIE1vZGUgZnJvbSBDQVBTVFMgUkVHICovCisJY2hhcgkJCWJ0X2VuYWJsZWQ7CisJY2hhcgkJCWRvX3Jlc2V0OworCWNoYXIJCQlpcnFfbWFzazsKKwl1MzIJCQlwY2lpZDsgLyogUENJIElEIG9mIEhvc3QgKi8KKwl1bnNpZ25lZCBjaGFyCQlpcnFfbWFwWzRdOworCisJLyogVmlydHVhbCBJUlEgbnVtYmVycyAqLworCXVuc2lnbmVkIGludAkJdmlycV9lcnI7CisJdW5zaWduZWQgaW50CQl2aXJxX2RtYTsKKworCS8qIEFIQiBQQ0kgV2luZG93cyAqLworCXVuc2lnbmVkIGxvbmcJCXBjaV9hcmVhOwkvKiBNRU1PUlkgKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfYXJlYV9lbmQ7CisJdW5zaWduZWQgbG9uZwkJcGNpX2lvOwkJLyogSS9PICovCisJdW5zaWduZWQgbG9uZwkJcGNpX2NvbmY7CS8qIENPTkZJR1VSQVRJT04gKi8KKwl1bnNpZ25lZCBsb25nCQlwY2lfY29uZl9lbmQ7CisJdW5zaWduZWQgbG9uZwkJcGNpX2lvX3ZhOworCisJc3RydWN0IGdycGNpMl9iYXJjZmcJdGd0YmFyc1s2XTsKK307CisKK0RFRklORV9TUElOTE9DSyhncnBjaTJfZGV2X2xvY2spOworc3RydWN0IGdycGNpMl9wcml2ICpncnBjaTJwcml2OworCitpbnQgZ3JwY2kyX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGRldi0+YnVzLT5zeXNkYXRhOworCWludCBpcnFfZ3JvdXA7CisKKwkvKiBVc2UgZGVmYXVsdCBJUlEgZGVjb2Rpbmcgb24gUENJIEJVUzAgYWNjb3JkaW5nIHNsb3QgbnVtYmVyaW5nICovCisJaXJxX2dyb3VwID0gc2xvdCAmIDB4MzsKKwlwaW4gPSAoKHBpbiAtIDEpICsgaXJxX2dyb3VwKSAmIDB4MzsKKworCXJldHVybiBwcml2LT5pcnFfbWFwW3Bpbl07Cit9CisKK3N0YXRpYyBpbnQgZ3JwY2kyX2NmZ19yMzIoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgKnBjaV9jb25mOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRtcDsKKworCWlmICh3aGVyZSAmIDB4MykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYnVzID09IDAgJiYgUENJX1NMT1QoZGV2Zm4pICE9IDApCisJCWRldmZuICs9ICgweDggKiA2KTsKKworCS8qIFNlbGVjdCBidXMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgKFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgJiB+KDB4ZmYgPDwgMTYpKSB8CisJCQkJICAgKGJ1cyA8PCAxNikpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCisJLyogY2xlYXIgb2xkIHN0YXR1cyAqLworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPnN0c19jYXAsIChTVFNfQ0ZHRVJSIHwgU1RTX0NGR0VSUlZBTElEKSk7CisKKwlwY2lfY29uZiA9ICh1bnNpZ25lZCBpbnQgKikgKHByaXYtPnBjaV9jb25mIHwKKwkJCQkJCShkZXZmbiA8PCA4KSB8ICh3aGVyZSAmIDB4ZmMpKTsKKwl0bXAgPSBMRU9OM19CWVBBU1NfTE9BRF9QQShwY2lfY29uZik7CisKKwkvKiBXYWl0IHVudGlsIEdSUENJMiBzaWduYWxzIHRoYXQgQ0ZHIGFjY2VzcyBpcyBkb25lLCBpdCBzaG91bGQgYmUKKwkgKiBkb25lIGluc3RhbnRhbmVvdXNseSB1bmxlc3MgYSBETUEgb3BlcmF0aW9uIGlzIG9uZ29pbmcuLi4KKwkgKi8KKwl3aGlsZSAoKFJFR0xPQUQocHJpdi0+cmVncy0+c3RzX2NhcCkgJiBTVFNfQ0ZHRVJSVkFMSUQpID09IDApCisJCTsKKworCWlmIChSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApICYgU1RTX0NGR0VSUikgeworCQkqdmFsID0gMHhmZmZmZmZmZjsKKwl9IGVsc2UgeworCQkvKiBCdXMgYWx3YXlzIGxpdHRsZSBlbmRpYW4gKHVuYWZmZWN0ZWQgYnkgYnl0ZS1zd2FwcGluZykgKi8KKwkJKnZhbCA9IGZsaXBfZHdvcmQodG1wKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3IxNihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqdmFsKQoreworCXUzMiB2OworCWludCByZXQ7CisKKwlpZiAod2hlcmUgJiAweDEpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4MywgJnYpOworCSp2YWwgPSAweGZmZmYgJiAodiA+PiAoOCAqICh3aGVyZSAmIDB4MykpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfcjgoc3RydWN0IGdycGNpMl9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYnVzLAorCQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCB1MzIgKnZhbCkKK3sKKwl1MzIgdjsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCAmdik7CisJKnZhbCA9IDB4ZmYgJiAodiA+PiAoOCAqICh3aGVyZSAmIDMpKSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGdycGNpMl9jZmdfdzMyKHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyIHZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgKnBjaV9jb25mOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAod2hlcmUgJiAweDMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJ1cyA9PSAwICYmIFBDSV9TTE9UKGRldmZuKSAhPSAwKQorCQlkZXZmbiArPSAoMHg4ICogNik7CisKKwkvKiBTZWxlY3QgYnVzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIChSRUdMT0FEKHByaXYtPnJlZ3MtPmN0cmwpICYgfigweGZmIDw8IDE2KSkgfAorCQkJCSAgIChidXMgPDwgMTYpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncnBjaTJfZGV2X2xvY2ssIGZsYWdzKTsKKworCS8qIGNsZWFyIG9sZCBzdGF0dXMgKi8KKwlSRUdTVE9SRShwcml2LT5yZWdzLT5zdHNfY2FwLCAoU1RTX0NGR0VSUiB8IFNUU19DRkdFUlJWQUxJRCkpOworCisJcGNpX2NvbmYgPSAodW5zaWduZWQgaW50ICopIChwcml2LT5wY2lfY29uZiB8CisJCQkJCQkoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZjKSk7CisJTEVPTjNfQllQQVNTX1NUT1JFX1BBKHBjaV9jb25mLCBmbGlwX2R3b3JkKHZhbCkpOworCisJLyogV2FpdCB1bnRpbCBHUlBDSTIgc2lnbmFscyB0aGF0IENGRyBhY2Nlc3MgaXMgZG9uZSwgaXQgc2hvdWxkIGJlCisJICogZG9uZSBpbnN0YW50YW5lb3VzbHkgdW5sZXNzIGEgRE1BIG9wZXJhdGlvbiBpcyBvbmdvaW5nLi4uCisJICovCisJd2hpbGUgKChSRUdMT0FEKHByaXYtPnJlZ3MtPnN0c19jYXApICYgU1RTX0NGR0VSUlZBTElEKSA9PSAwKQorCQk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3cxNihzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXYsIHVuc2lnbmVkIGludCBidXMsCisJCQkJdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiB2YWwpCit7CisJaW50IHJldDsKKwl1MzIgdjsKKworCWlmICh3aGVyZSAmIDB4MSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUmfjMsICZ2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXYgPSAodiAmIH4oMHhmZmZmIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpKSB8CisJICAgICgoMHhmZmZmICYgdmFsKSA8PCAoOCAqICh3aGVyZSAmIDB4MykpKTsKKwlyZXR1cm4gZ3JwY2kyX2NmZ193MzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCB2KTsKK30KKworc3RhdGljIGludCBncnBjaTJfY2ZnX3c4KHN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGJ1cywKKwkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCXUzMiB2OworCisJcmV0ID0gZ3JwY2kyX2NmZ19yMzIocHJpdiwgYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzLCAmdik7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCXYgPSAodiAmIH4oMHhmZiA8PCAoOCAqICh3aGVyZSAmIDB4MykpKSkgfAorCSAgICAoKDB4ZmYgJiB2YWwpIDw8ICg4ICogKHdoZXJlICYgMHgzKSkpOworCXJldHVybiBncnBjaTJfY2ZnX3czMihwcml2LCBidXMsIGRldmZuLCB3aGVyZSAmIH4weDMsIHYpOworfQorCisvKiBSZWFkIGZyb20gQ29uZmlndXJhdGlvbiBTcGFjZS4gV2hlbiBlbnRlcmluZyBoZXJlIHRoZSBQQ0kgbGF5ZXIgaGFzIHRha2VuCisgKiB0aGUgcGNpX2xvY2sgc3BpbmxvY2sgYW5kIElSUSBpcyBvZmYuCisgKi8KK3N0YXRpYyBpbnQgZ3JwY2kyX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGdycGNpMnByaXY7CisJdW5zaWduZWQgaW50IGJ1c25vID0gYnVzLT5udW1iZXI7CisJaW50IHJldDsKKworCWlmIChQQ0lfU0xPVChkZXZmbikgPiAxNSB8fCAoUENJX1NMT1QoZGV2Zm4pID09IDAgJiYgYnVzbm8gPT0gMCkpIHsKKwkJKnZhbCA9IH4wOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHNpemUpIHsKKwljYXNlIDE6CisJCXJldCA9IGdycGNpMl9jZmdfcjgocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlyZXQgPSBncnBjaTJfY2ZnX3IxNihwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJldCA9IGdycGNpMl9jZmdfcjMyKHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworI2lmZGVmIEdSUENJMl9ERUJVR19DRkdBQ0NFU1MKKwlwcmludGsoS0VSTl9JTkZPICJncnBjaTJfcmVhZF9jb25maWc6IFslMDJ4OiUwMng6JXhdIG9mcz0lZCB2YWw9JXggIgorCQkic2l6ZT0lZFxuIiwgYnVzbm8sIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLCB3aGVyZSwKKwkJKnZhbCwgc2l6ZSk7CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKKy8qIFdyaXRlIHRvIENvbmZpZ3VyYXRpb24gU3BhY2UuIFdoZW4gZW50ZXJpbmcgaGVyZSB0aGUgUENJIGxheWVyIGhhcyB0YWtlbgorICogdGhlIHBjaV9sb2NrIHNwaW5sb2NrIGFuZCBJUlEgaXMgb2ZmLgorICovCitzdGF0aWMgaW50IGdycGNpMl93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKwl1bnNpZ25lZCBpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKKworCWlmIChQQ0lfU0xPVChkZXZmbikgPiAxNSB8fCAoUENJX1NMT1QoZGV2Zm4pID09IDAgJiYgYnVzbm8gPT0gMCkpCisJCXJldHVybiAwOworCisjaWZkZWYgR1JQQ0kyX0RFQlVHX0NGR0FDQ0VTUworCXByaW50ayhLRVJOX0lORk8gImdycGNpMl93cml0ZV9jb25maWc6IFslMDJ4OiUwMng6JXhdIG9mcz0lZCBzaXplPSVkICIKKwkJInZhbD0leFxuIiwgYnVzbm8sIFBDSV9TTE9UKGRldmZuKSwgUENJX0ZVTkMoZGV2Zm4pLAorCQl3aGVyZSwgc2l6ZSwgdmFsKTsKKyNlbmRpZgorCisJc3dpdGNoIChzaXplKSB7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSAxOgorCQlyZXR1cm4gZ3JwY2kyX2NmZ193OChwcml2LCBidXNubywgZGV2Zm4sIHdoZXJlLCB2YWwpOworCWNhc2UgMjoKKwkJcmV0dXJuIGdycGNpMl9jZmdfdzE2KHByaXYsIGJ1c25vLCBkZXZmbiwgd2hlcmUsIHZhbCk7CisJY2FzZSA0OgorCQlyZXR1cm4gZ3JwY2kyX2NmZ193MzIocHJpdiwgYnVzbm8sIGRldmZuLCB3aGVyZSwgdmFsKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBncnBjaTJfb3BzID0geworCS5yZWFkID0JCWdycGNpMl9yZWFkX2NvbmZpZywKKwkud3JpdGUgPQlncnBjaTJfd3JpdGVfY29uZmlnLAorfTsKKworLyogR0VOSVJRIElSUSBjaGlwIGltcGxlbWVudGF0aW9uIGZvciBHUlBDSTIgaXJxbW9kZT0wLi4yLiBJbiBjb25maWd1cmF0aW9uCisgKiAzIHdoZXJlIGFsbCBQQ0kgSW50ZXJydXB0cyBoYXMgYSBzZXBhcmF0ZSBJUlEgb24gdGhlIHN5c3RlbSBJUlEgY29udHJvbGxlcgorICogdGhpcyBpcyBub3QgbmVlZGVkIGFuZCB0aGUgc3RhbmRhcmQgSVJRIGNvbnRyb2xsZXIgY2FuIGJlIHVzZWQuCisgKi8KKworc3RhdGljIHZvaWQgZ3JwY2kyX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpcnFpZHg7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKworCWlycWlkeCA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+Y2hpcF9kYXRhIC0gMTsKKwlpZiAoaXJxaWR4ID4gMykgLyogb25seSBtYXNrIFBDSSBpbnRlcnJ1cHRzIGhlcmUgKi8KKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworCVJFR1NUT1JFKHByaXYtPnJlZ3MtPmN0cmwsIFJFR0xPQUQocHJpdi0+cmVncy0+Y3RybCkgJiB+KDEgPDwgaXJxaWR4KSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGdycGNpMl91bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpcnFpZHg7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKworCWlycWlkeCA9ICh1bnNpZ25lZCBpbnQpZGF0YS0+Y2hpcF9kYXRhIC0gMTsKKwlpZiAoaXJxaWR4ID4gMykgLyogb25seSB1bm1hc2sgUENJIGludGVycnVwdHMgaGVyZSAqLworCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3JwY2kyX2Rldl9sb2NrLCBmbGFncyk7CisJUkVHU1RPUkUocHJpdi0+cmVncy0+Y3RybCwgUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKSB8ICgxIDw8IGlycWlkeCkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdycGNpMl9kZXZfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGdycGNpMl9zdGFydHVwX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZ3JwY2kyX3VubWFza19pcnEoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdycGNpMl9zaHV0ZG93bl9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWdycGNpMl9tYXNrX2lycShkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncnBjaTJfaXJxID0geworCS5uYW1lCQk9ICJncnBjaTIiLAorCS5pcnFfc3RhcnR1cAk9IGdycGNpMl9zdGFydHVwX2lycSwKKwkuaXJxX3NodXRkb3duCT0gZ3JwY2kyX3NodXRkb3duX2lycSwKKwkuaXJxX21hc2sJPSBncnBjaTJfbWFza19pcnEsCisJLmlycV91bm1hc2sJPSBncnBjaTJfdW5tYXNrX2lycSwKK307CisKKy8qIEhhbmRsZSBvbmUgb3IgbXVsdGlwbGUgSVJRcyBmcm9tIHRoZSBQQ0kgY29yZSAqLworc3RhdGljIHZvaWQgZ3JwY2kyX3BjaV9mbG93X2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGdycGNpMl9wcml2ICpwcml2ID0gZ3JwY2kycHJpdjsKKwlpbnQgaSwgYWNrID0gMDsKKwl1bnNpZ25lZCBpbnQgY3RybCwgc3RzX2NhcCwgcGNpX2ludHM7CisKKwljdHJsID0gUkVHTE9BRChwcml2LT5yZWdzLT5jdHJsKTsKKwlzdHNfY2FwID0gUkVHTE9BRChwcml2LT5yZWdzLT5zdHNfY2FwKTsKKworCS8qIEVycm9yIEludGVycnVwdD8gKi8KKwlpZiAoc3RzX2NhcCAmIFNUU19FUlJfSVJRKSB7CisJCWdlbmVyaWNfaGFuZGxlX2lycShwcml2LT52aXJxX2Vycik7CisJCWFjayA9IDE7CisJfQorCisJLyogUENJIEludGVycnVwdD8gKi8KKwlwY2lfaW50cyA9ICgofnN0c19jYXApID4+IFNUU19JTlRTVFNfQklUKSAmIGN0cmwgJiBDVFJMX0hPU1RJTlQ7CisJaWYgKHBjaV9pbnRzKSB7CisJCS8qIENhbGwgcmVzcGVjdGl2ZSBQQ0kgSW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJaWYgKHBjaV9pbnRzICYgKDEgPDwgaSkpCisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHByaXYtPmlycV9tYXBbaV0pOworCQl9CisJCWFjayA9IDE7CisJfQorCisJLyoKKwkgKiBEZWNvZGUgRE1BIEludGVycnVwdCBvbmx5IHdoZW4gc2hhcmVkIHdpdGggRXJyIGFuZCBQQ0kgSU5UWCMsIHdoZW4KKwkgKiB0aGUgRE1BIGlzIGEgdW5pcXVlIElSUSB0aGUgRE1BIGludGVycnVwdHMgZG9lc24ndCBlbmQgdXAgaGVyZSwgdGhleQorCSAqIGdvZXMgZGlyZWN0bHkgdG8gRE1BIElTUi4KKwkgKi8KKwlpZiAoKHByaXYtPmlycV9tb2RlID09IDApICYmIChzdHNfY2FwICYgKFNUU19JRE1BIHwgU1RTX0lETUFFUlIpKSkgeworCQlnZW5lcmljX2hhbmRsZV9pcnEocHJpdi0+dmlycV9kbWEpOworCQlhY2sgPSAxOworCX0KKworCS8qCisJICogQ2FsbCAiZmlyc3QgbGV2ZWwiIElSUSBjaGlwIGVuZC1vZi1pcnEgaGFuZGxlci4gSXQgd2lsbCBBQ0sgTEVPTiBJUlEKKwkgKiBDb250cm9sbGVyLCB0aGlzIG11c3QgYmUgZG9uZSBhZnRlciBJUlEgc291cmNlcyBoYXZlIGJlZW4gaGFuZGxlZCB0bworCSAqIGF2b2lkIGRvdWJsZSBJUlEgZ2VuZXJhdGlvbgorCSAqLworCWlmIChhY2spCisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9lb2koJmRlc2MtPmlycV9kYXRhKTsKK30KKworLyogQ3JlYXRlIGEgdmlydHVhbCBJUlEgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgdmlycSA9IDAsIHBpbDsKKworCXBpbCA9IDEgPDwgODsKKwl2aXJxID0gaXJxX2FsbG9jKGlycSwgcGlsKTsKKwlpZiAodmlycSA9PSAwKQorCQlnb3RvIG91dDsKKworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKHZpcnEsICZncnBjaTJfaXJxLCBoYW5kbGVfc2ltcGxlX2lycSwKKwkJCQkgICAgICAicGNpbHZsIik7CisJaXJxX3NldF9jaGlwX2RhdGEodmlycSwgKHZvaWQgKilpcnEpOworCitvdXQ6CisJcmV0dXJuIHZpcnE7Cit9CisKK3ZvaWQgZ3JwY2kyX2h3X2luaXQoc3RydWN0IGdycGNpMl9wcml2ICpwcml2KQoreworCXUzMiBhaGJhZHIsIHBjaWFkciwgYmFyX3N6LCBjYXBwdHIsIGlvX21hcCwgZGF0YTsKKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MgKnJlZ3MgPSBwcml2LT5yZWdzOworCWludCBpOworCXN0cnVjdCBncnBjaTJfYmFyY2ZnICpiYXJjZmcgPSBwcml2LT50Z3RiYXJzOworCisJLyogUmVzZXQgYW55IGVhcmxpZXIgc2V0dXAgKi8KKwlpZiAocHJpdi0+ZG9fcmVzZXQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiR1JQQ0kyOiBSZXNldHRpbmcgUENJIGJ1c1xuIik7CisJCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIENUUkxfUkVTRVQpOworCQlzc2xlZXAoMSk7IC8qIFdhaXQgZm9yIGJvYXJkcyB0byBzZXR0bGUgKi8KKwl9CisJUkVHU1RPUkUocmVncy0+Y3RybCwgMCk7CisJUkVHU1RPUkUocmVncy0+c3RzX2NhcCwgfjApOyAvKiBDbGVhciBTdGF0dXMgKi8KKwlSRUdTVE9SRShyZWdzLT5kbWFfY3RybCwgMCk7CisJUkVHU1RPUkUocmVncy0+ZG1hX2JkYmFzZSwgMCk7CisKKwkvKiBUcmFuc2xhdGUgSS9PIGFjY2Vzc2VzIHRvIDAsIEkvTyBTcGFjZSBhbHdheXMgQCBQQ0kgbG93IDY0S2J5dGVzICovCisJUkVHU1RPUkUocmVncy0+aW9fbWFwLCBSRUdMT0FEKHJlZ3MtPmlvX21hcCkgJiAweDAwMDBmZmZmKTsKKworCS8qIHNldCAxOjEgbWFwcGluZyBiZXR3ZWVuIEFIQiAtPiBQQ0kgbWVtb3J5IHNwYWNlLCBmb3IgYWxsIE1hc3RlcnMKKwkgKiBFYWNoIEFIQiBtYXN0ZXIgaGFzIGl0J3Mgb3duIG1hcHBpbmcgcmVnaXN0ZXJzLiBNYXggMTYgQUhCIG1hc3RlcnMuCisJICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCVJFR1NUT1JFKHJlZ3MtPmFoYm1zdF9tYXBbaV0sIHByaXYtPnBjaV9hcmVhKTsKKworCS8qIEdldCB0aGUgR1JQQ0kyIEhvc3QgUENJIElEICovCisJZ3JwY2kyX2NmZ19yMzIocHJpdiwgMCwgMCwgUENJX1ZFTkRPUl9JRCwgJnByaXYtPnBjaWlkKTsKKworCS8qIEdldCBhZGRyZXNzIHRvIGZpcnN0IChhbHdheXMgZGVmaW5lZCkgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgKi8KKwlncnBjaTJfY2ZnX3I4KHByaXYsIDAsIDAsIFBDSV9DQVBBQklMSVRZX0xJU1QsICZjYXBwdHIpOworCisJLyogRW5hYmxlL0Rpc2FibGUgQnl0ZSB0d2lzdGluZyAqLworCWdycGNpMl9jZmdfcjMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0lPTUFQX09GUywgJmlvX21hcCk7CisJaW9fbWFwID0gKGlvX21hcCAmIH4weDEpIHwgKHByaXYtPmJ0X2VuYWJsZWQgPyAxIDogMCk7CisJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfSU9NQVBfT0ZTLCBpb19tYXApOworCisJLyogU2V0dXAgdGhlIEhvc3QncyBQQ0kgVGFyZ2V0IEJBUnMgZm9yIG90aGVyIHBlcmlwaGVyYWxzIHRvIGFjY2VzcywKKwkgKiBhbmQgZG8gRE1BIHRvIHRoZSBob3N0J3MgbWVtb3J5LiBUaGUgdGFyZ2V0IEJBUnMgY2FuIGJlIHNpemVkIGFuZAorCSAqIGVuYWJsZWQgaW5kaXZpZHVhbGx5LgorCSAqCisJICogVXNlciBtYXkgc2V0IGN1c3RvbSB0YXJnZXQgQkFScywgYnV0IGRlZmF1bHQgaXM6CisJICogVGhlIGZpcnN0IEJBUnMgaXMgdXNlZCB0byBtYXAga2VybmVsIGxvdyAoRE1BIGlzIHBhcnQgb2Ygbm9ybWFsCisJICogcmVnaW9uIG9uIHNwYXJjIHdoaWNoIGlzIFNSTU1VX01BWE1FTSBiaWcpIG1haW4gbWVtb3J5IDE6MSB0byB0aGUKKwkgKiBQQ0kgYnVzLCB0aGUgb3RoZXIgQkFScyBhcmUgZGlzYWJsZWQuIFdlIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBCQVIKKwkgKiBpcyBhbHdheXMgYXZhaWxhYmxlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJaWYgKGJhcmNmZ1tpXS5wY2lhZHIgIT0gfjAgJiYgYmFyY2ZnW2ldLmFoYmFkciAhPSB+MCkgeworCQkJLyogVGFyZ2V0IEJBUnMgbXVzdCBoYXZlIHRoZSBwcm9wZXIgYWxpZ25tZW50ICovCisJCQlhaGJhZHIgPSBiYXJjZmdbaV0uYWhiYWRyOworCQkJcGNpYWRyID0gYmFyY2ZnW2ldLnBjaWFkcjsKKwkJCWJhcl9zeiA9ICgocGNpYWRyIC0gMSkgJiB+cGNpYWRyKSArIDE7CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJLyogTWFwIG1haW4gbWVtb3J5ICovCisJCQkJYmFyX3N6ID0gMHhmMDAwMDAwODsgLyogMjU2TUIgcHJlZmV0Y2hhYmxlICovCisJCQkJYWhiYWRyID0gMHhmMDAwMDAwMCAmICh1MzIpX19wYShQQUdFX0FMSUdOKAorCQkJCQkodW5zaWduZWQgbG9uZykgJl9lbmQpKTsKKwkJCQlwY2lhZHIgPSBhaGJhZHI7CisJCQl9IGVsc2UgeworCQkJCWJhcl9zeiA9IDA7CisJCQkJYWhiYWRyID0gMDsKKwkJCQlwY2lhZHIgPSAwOworCQkJfQorCQl9CisJCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIGNhcHB0citDQVA5X0JBUlNJWkVfT0ZTK2kqNCwgYmFyX3N6KTsKKwkJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgUENJX0JBU0VfQUREUkVTU18wK2kqNCwgcGNpYWRyKTsKKwkJZ3JwY2kyX2NmZ193MzIocHJpdiwgMCwgMCwgY2FwcHRyK0NBUDlfQkFSX09GUytpKjQsIGFoYmFkcik7CisJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgVEdUIEJBUlslZF06IDB4JTA4eCAoUENJKS0+IDB4JTA4eFxuIiwKKwkJCWksIHBjaWFkciwgYWhiYWRyKTsKKwl9CisKKwkvKiBzZXQgYXMgYnVzIG1hc3RlciBhbmQgZW5hYmxlIHBjaSBtZW1vcnkgcmVzcG9uc2VzICovCisJZ3JwY2kyX2NmZ19yMzIocHJpdiwgMCwgMCwgUENJX0NPTU1BTkQsICZkYXRhKTsKKwlkYXRhIHw9IChQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIpOworCWdycGNpMl9jZmdfdzMyKHByaXYsIDAsIDAsIFBDSV9DT01NQU5ELCBkYXRhKTsKKworCS8qIEVuYWJsZSBFcnJvciByZXNwb25lIChDUFUtVFJBUCkgb24gaWxsZWdhbCBtZW1vcnkgYWNjZXNzLiAqLworCVJFR1NUT1JFKHJlZ3MtPmN0cmwsIENUUkxfRVIgfCBDVFJMX1BFKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGdycGNpMl9qdW1wX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICphcmcpCit7CisJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IEp1bXAgSVJRIGhhcHBlbmVkXG4iKTsKKwlyZXR1cm4gSVJRX05PTkU7Cit9CisKKy8qIEhhbmRsZSBHUlBDSTIgRXJyb3IgSW50ZXJydXB0ICovCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3JwY2kyX2Vycl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBncnBjaTJfcHJpdiAqcHJpdiA9IGFyZzsKKwlzdHJ1Y3QgZ3JwY2kyX3JlZ3MgKnJlZ3MgPSBwcml2LT5yZWdzOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBSRUdMT0FEKHJlZ3MtPnN0c19jYXApOworCWlmICgoc3RhdHVzICYgU1RTX0VSUl9JUlEpID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBTVFNfSVBBUkVSUikKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IFBhcml0eSBFcnJvclxuIik7CisKKwlpZiAoc3RhdHVzICYgU1RTX0lUR1RBQlJUKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogVGFyZ2V0IEFib3J0XG4iKTsKKworCWlmIChzdGF0dXMgJiBTVFNfSU1TVEFCUlQpCisJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBNYXN0ZXIgQWJvcnRcbiIpOworCisJaWYgKHN0YXR1cyAmIFNUU19JU1lTRVJSKQorCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogU3lzdGVtIEVycm9yXG4iKTsKKworCS8qIENsZWFyIGhhbmRsZWQgSU5UIFRZUEUgSVJRcyAqLworCVJFR1NUT1JFKHJlZ3MtPnN0c19jYXAsIHN0YXR1cyAmIFNUU19FUlJfSVJRKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZ3JwY2kyX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQoreworCXN0cnVjdCBncnBjaTJfcmVncyAqcmVnczsKKwlzdHJ1Y3QgZ3JwY2kyX3ByaXYgKnByaXY7CisJaW50IGVyciwgaSwgbGVuOworCWNvbnN0IGludCAqdG1wOworCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OworCisJaWYgKGdycGNpMnByaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IG9ubHkgb25lIEdSUENJMiBjb3JlIHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvZmRldi0+bnVtX3Jlc291cmNlcyA8IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJHUlBDSTI6IG5vdCBlbm91Z2ggQVBCL0FIQiByZXNvdXJjZXNcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBGaW5kIERldmljZSBBZGRyZXNzICovCisJcmVncyA9IG9mX2lvcmVtYXAoJm9mZGV2LT5yZXNvdXJjZVswXSwgMCwKKwkJCSAgcmVzb3VyY2Vfc2l6ZSgmb2ZkZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgImdybGliLWdycGNpMiByZWdzIik7CisJaWYgKHJlZ3MgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkdSUENJMjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKgorCSAqIENoZWNrIHRoYXQgd2UncmUgaW4gSG9zdCBTbG90IGFuZCB0aGF0IHdlIGNhbiBhY3QgYXMgYSBIb3N0IEJyaWRnZQorCSAqIGFuZCBub3Qgb25seSBhcyB0YXJnZXQuCisJICovCisJY2FwYWJpbGl0eSA9IFJFR0xPQUQocmVncy0+c3RzX2NhcCk7CisJaWYgKChjYXBhYmlsaXR5ICYgU1RTX0hPU1QpIHx8ICEoY2FwYWJpbGl0eSAmIFNUU19NU1QpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdSUENJMjogbm90IGluIGhvc3Qgc3lzdGVtIHNsb3RcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycjE7CisJfQorCisJcHJpdiA9IGdycGNpMnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZ3JwY2kyX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZ3JwY2kycHJpdiA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisJbWVtc2V0KGdycGNpMnByaXYsIDAsIHNpemVvZigqZ3JwY2kycHJpdikpOworCXByaXYtPnJlZ3MgPSByZWdzOworCXByaXYtPmlycSA9IG9mZGV2LT5hcmNoZGF0YS5pcnFzWzBdOyAvKiBCQVNFIElSUSAqLworCXByaXYtPmlycV9tb2RlID0gKGNhcGFiaWxpdHkgJiBTVFNfSVJRTU9ERSkgPj4gU1RTX0lSUU1PREVfQklUOworCisJcHJpbnRrKEtFUk5fSU5GTyAiR1JQQ0kyOiBob3N0IGZvdW5kIGF0ICVwLCBpcnElZFxuIiwgcmVncywgcHJpdi0+aXJxKTsKKworCS8qIEJ5dGUgdHdpc3Rpbmcgc2hvdWxkIGJlIG1hZGUgY29uZmlndXJhYmxlIGZyb20ga2VybmVsIGNvbW1hbmQgbGluZSAqLworCXByaXYtPmJ0X2VuYWJsZWQgPSAxOworCisJLyogTGV0IHVzZXIgZG8gY3VzdG9tIFRhcmdldCBCQVIgYXNzaWdubWVudCAqLworCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJiYXJjZmciLCAmbGVuKTsKKwlpZiAodG1wICYmIChsZW4gPT0gMio0KjYpKQorCQltZW1jcHkocHJpdi0+dGd0YmFycywgdG1wLCAyKjQqNik7CisJZWxzZQorCQltZW1zZXQocHJpdi0+dGd0YmFycywgLTEsIDIqNCo2KTsKKworCS8qIExpbWl0IElSUSB1bm1hc2tpbmcgaW4gaXJxX21vZGUgMiBhbmQgMyAqLworCXRtcCA9IG9mX2dldF9wcm9wZXJ0eShvZmRldi0+ZGV2Lm9mX25vZGUsICJpcnFfbWFzayIsICZsZW4pOworCWlmICh0bXAgJiYgKGxlbiA9PSA0KSkKKwkJcHJpdi0+ZG9fcmVzZXQgPSAqdG1wOworCWVsc2UKKwkJcHJpdi0+aXJxX21hc2sgPSAweGY7CisKKwkvKiBPcHRpb25hbCBQQ0kgcmVzZXQuIEZvcmNlIFBDSSByZXNldCBvbiBzdGFydHVwICovCisJdG1wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5kZXYub2Zfbm9kZSwgInJlc2V0IiwgJmxlbik7CisJaWYgKHRtcCAmJiAobGVuID09IDQpKQorCQlwcml2LT5kb19yZXNldCA9ICp0bXA7CisJZWxzZQorCQlwcml2LT5kb19yZXNldCA9IDA7CisKKwkvKiBGaW5kIFBDSSBNZW1vcnksIEkvTyBhbmQgQ29uZmlndXJhdGlvbiBTcGFjZSBXaW5kb3dzICovCisJcHJpdi0+cGNpX2FyZWEgPSBvZmRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisJcHJpdi0+cGNpX2FyZWFfZW5kID0gb2ZkZXYtPnJlc291cmNlWzFdLmVuZCsxOworCXByaXYtPnBjaV9pbyA9IG9mZGV2LT5yZXNvdXJjZVsyXS5zdGFydDsKKwlwcml2LT5wY2lfY29uZiA9IG9mZGV2LT5yZXNvdXJjZVsyXS5zdGFydCArIDB4MTAwMDA7CisJcHJpdi0+cGNpX2NvbmZfZW5kID0gcHJpdi0+cGNpX2NvbmYgKyAweDEwMDAwOworCXByaXYtPnBjaV9pb192YSA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAocHJpdi0+cGNpX2lvLCAweDEwMDAwKTsKKwlpZiAoIXByaXYtPnBjaV9pb192YSkgeworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycjI7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTworCQkiR1JQQ0kyOiBNRU1PUlkgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIgorCQkiICAgICAgICBJL08gICAgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIgorCQkiICAgICAgICBDT05GSUcgU1BBQ0UgWzB4JTA4bHggLSAweCUwOGx4XVxuIiwKKwkJcHJpdi0+cGNpX2FyZWEsIHByaXYtPnBjaV9hcmVhX2VuZC0xLAorCQlwcml2LT5wY2lfaW8sIHByaXYtPnBjaV9jb25mLTEsCisJCXByaXYtPnBjaV9jb25mLCBwcml2LT5wY2lfY29uZl9lbmQtMSk7CisKKwkvKgorCSAqIEkvTyBTcGFjZSByZXNvdXJjZXMgaW4gSS9PIFdpbmRvdyBtYXBwZWQgaW50byBWaXJ0dWFsIEFkciBTcGFjZQorCSAqIFdlIG5ldmVyIHVzZSBsb3cgNEtCIGJlY2F1c2Ugc29tZSBkZXZpY2VzIHNlZW0gaGF2ZSBwcm9ibGVtcyB1c2luZworCSAqIGFkZHJlc3MgMC4KKwkgKi8KKwltZW1zZXQoJnByaXYtPmluZm8uaW9fc3BhY2UsIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLm5hbWUgPSAiR1JQQ0kyIFBDSSBJL08gU3BhY2UiOworCXByaXYtPmluZm8uaW9fc3BhY2Uuc3RhcnQgPSBwcml2LT5wY2lfaW9fdmEgKyAweDEwMDA7CisJcHJpdi0+aW5mby5pb19zcGFjZS5lbmQgPSBwcml2LT5wY2lfaW9fdmEgKyAweDEwMDAwIC0gMTsKKwlwcml2LT5pbmZvLmlvX3NwYWNlLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKKworCS8qCisJICogR1JQQ0kyIGhhcyBubyBwcmVmZXRjaGFibGUgbWVtb3J5LCBtYXAgZXZlcnl0aGluZyBhcworCSAqIG5vbi1wcmVmZXRjaGFibGUgbWVtb3J5CisJICovCisJbWVtc2V0KCZwcml2LT5pbmZvLm1lbV9zcGFjZSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCXByaXYtPmluZm8ubWVtX3NwYWNlLm5hbWUgPSAiR1JQQ0kyIFBDSSBNRU0gU3BhY2UiOworCXByaXYtPmluZm8ubWVtX3NwYWNlLnN0YXJ0ID0gcHJpdi0+cGNpX2FyZWE7CisJcHJpdi0+aW5mby5tZW1fc3BhY2UuZW5kID0gcHJpdi0+cGNpX2FyZWFfZW5kIC0gMTsKKwlwcml2LT5pbmZvLm1lbV9zcGFjZS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcHJpdi0+aW5mby5tZW1fc3BhY2UpIDwgMCkKKwkJZ290byBlcnIzOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZwcml2LT5pbmZvLmlvX3NwYWNlKSA8IDApCisJCWdvdG8gZXJyNDsKKworCWdycGNpMl9od19pbml0KHByaXYpOworCisJLyoKKwkgKiBHZXQgUENJIEludGVycnVwdCB0byBTeXN0ZW0gSVJRIG1hcHBpbmcgYW5kIHNldHVwIElSUSBoYW5kbGluZworCSAqIEVycm9yIElSUSBhbHdheXMgb24gUENJIElOVEEuCisJICovCisJaWYgKHByaXYtPmlycV9tb2RlIDwgMikgeworCQkvKiBBbGwgUENJIGludGVycnVwdHMgYXJlIHNoYXJlZCB1c2luZyB0aGUgc2FtZSBzeXN0ZW0gSVJRICovCisJCWxlb25fdXBkYXRlX3ZpcnFfaGFuZGxpbmcocHJpdi0+aXJxLCBncnBjaTJfcGNpX2Zsb3dfaXJxLAorCQkJCQkgInBjaWx2bCIsIDApOworCisJCXByaXYtPmlycV9tYXBbMF0gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSgxKTsKKwkJcHJpdi0+aXJxX21hcFsxXSA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDIpOworCQlwcml2LT5pcnFfbWFwWzJdID0gZ3JwY2kyX2J1aWxkX2RldmljZV9pcnEoMyk7CisJCXByaXYtPmlycV9tYXBbM10gPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSg0KTsKKworCQlwcml2LT52aXJxX2VyciA9IGdycGNpMl9idWlsZF9kZXZpY2VfaXJxKDUpOworCQlpZiAocHJpdi0+aXJxX21vZGUgJiAxKQorCQkJcHJpdi0+dmlycV9kbWEgPSBvZmRldi0+YXJjaGRhdGEuaXJxc1sxXTsKKwkJZWxzZQorCQkJcHJpdi0+dmlycV9kbWEgPSBncnBjaTJfYnVpbGRfZGV2aWNlX2lycSg2KTsKKworCQkvKiBFbmFibGUgSVJRcyBvbiBMRU9OIElSUSBjb250cm9sbGVyICovCisJCWVyciA9IHJlcXVlc3RfaXJxKHByaXYtPmlycSwgZ3JwY2kyX2p1bXBfaW50ZXJydXB0LCAwLAorCQkJCQkiR1JQQ0kyX0pVTVAiLCBwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaW50ayhLRVJOX0VSUiAiR1JQQ0kyOiBFUlIgSVJRIHJlcXVlc3QgZmFpbGVkXG4iKTsKKwl9IGVsc2UgeworCQkvKiBBbGwgUENJIGludGVycnVwdHMgaGF2ZSBhbiB1bmlxdWUgSVJRIGludGVycnVwdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkvKiBNYWtlIExFT04gSVJRIGxheWVyIGhhbmRsZSBsZXZlbCBJUlEgYnkgYWNraW5nICovCisJCQlsZW9uX3VwZGF0ZV92aXJxX2hhbmRsaW5nKG9mZGV2LT5hcmNoZGF0YS5pcnFzW2ldLAorCQkJCQkJIGhhbmRsZV9mYXN0ZW9pX2lycSwgInBjaWx2bCIsCisJCQkJCQkgMSk7CisJCQlwcml2LT5pcnFfbWFwW2ldID0gb2ZkZXYtPmFyY2hkYXRhLmlycXNbaV07CisJCX0KKwkJcHJpdi0+dmlycV9lcnIgPSBwcml2LT5pcnFfbWFwWzBdOworCQlpZiAocHJpdi0+aXJxX21vZGUgJiAxKQorCQkJcHJpdi0+dmlycV9kbWEgPSBvZmRldi0+YXJjaGRhdGEuaXJxc1s0XTsKKwkJZWxzZQorCQkJcHJpdi0+dmlycV9kbWEgPSBwcml2LT5pcnFfbWFwWzBdOworCisJCS8qIFVubWFzayBhbGwgUENJIGludGVycnVwdHMsIHJlcXVlc3RfaXJxIHdpbGwgbm90IGRvIHRoYXQgKi8KKwkJUkVHU1RPUkUocmVncy0+Y3RybCwgUkVHTE9BRChyZWdzLT5jdHJsKXwocHJpdi0+aXJxX21hc2smMHhmKSk7CisJfQorCisJLyogU2V0dXAgSVJRIGhhbmRsZXIgZm9yIG5vbi1jb25maWd1cmF0aW9uIHNwYWNlIGFjY2VzcyBlcnJvcnMgKi8KKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT52aXJxX2VyciwgZ3JwY2kyX2Vycl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJCSJHUlBDSTJfRVJSIiwgcHJpdik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiR1JQQ0kyOiBFUlIgVklSUSByZXF1ZXN0IGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gZXJyNTsKKwl9CisKKwkvKgorCSAqIEVuYWJsZSBFcnJvciBJbnRlcnJ1cHRzLiBQQ0kgaW50ZXJydXB0cyBhcmUgdW5tYXNrZWQgb25jZSByZXF1ZXN0X2lycQorCSAqIGlzIGNhbGxlZCBieSB0aGUgUENJIERldmljZSBkcml2ZXJzCisJICovCisJUkVHU1RPUkUocmVncy0+Y3RybCwgUkVHTE9BRChyZWdzLT5jdHJsKSB8IENUUkxfRUkgfCBDVFJMX1NJKTsKKworCS8qIEluaXQgY29tbW9uIGxheWVyIGFuZCBzY2FuIGJ1c2VzICovCisJcHJpdi0+aW5mby5vcHMgPSAmZ3JwY2kyX29wczsKKwlwcml2LT5pbmZvLm1hcF9pcnEgPSBncnBjaTJfbWFwX2lycTsKKwlsZW9uX3BjaV9pbml0KG9mZGV2LCAmcHJpdi0+aW5mbyk7CisKKwlyZXR1cm4gMDsKKworZXJyNToKKwlyZWxlYXNlX3Jlc291cmNlKCZwcml2LT5pbmZvLmlvX3NwYWNlKTsKK2VycjQ6CisJcmVsZWFzZV9yZXNvdXJjZSgmcHJpdi0+aW5mby5tZW1fc3BhY2UpOworZXJyMzoKKwllcnIgPSAtRU5PTUVNOworCWlvdW5tYXAoKHZvaWQgKilwcml2LT5wY2lfaW9fdmEpOworZXJyMjoKKwlrZnJlZShwcml2KTsKK2VycjE6CisJb2ZfaW91bm1hcCgmb2ZkZXYtPnJlc291cmNlWzBdLCByZWdzLAorCQlyZXNvdXJjZV9zaXplKCZvZmRldi0+cmVzb3VyY2VbMF0pKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBncnBjaTJfb2ZfbWF0Y2hbXSA9IHsKKwl7CisJIC5uYW1lID0gIkdBSVNMRVJfR1JQQ0kyIiwKKwkgfSwKKwl7CisJIC5uYW1lID0gIjAxXzA3YyIsCisJIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBncnBjaTJfb2ZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImdycGNpMiIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBncnBjaTJfb2ZfbWF0Y2gsCisJfSwKKwkucHJvYmUgPSBncnBjaTJfb2ZfcHJvYmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBncnBjaTJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdycGNpMl9vZl9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwoZ3JwY2kyX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwppbmRleCA4ZDM0OGM0Li45OWJhNWJhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJCQkgICAgICAgbWUtPm5hbWUsCiAJCQkgICAgICAgKGludCkgKEVMRl9SX1RZUEUocmVsW2ldLnJfaW5mbykgJiAweGZmKSk7CiAJCQlyZXR1cm4gLUVOT0VYRUM7Ci0JCX07CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKaW5kZXggNmUzODc0Yi4uYTY4OTU5OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJY2FzZSA0OgogCQkqdmFsdWUgPSByZXQgJiAweGZmZmZmZmZmOwogCQlicmVhazsKLQl9OworCX0KIAogCiAJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCX0KIAogCWlmICghc2F3X2lvIHx8ICFzYXdfbWVtKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggMjgzZmJjMy4uZjAzMGIwMiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCWRlZmF1bHQ6CiAJCQl0eXBlX3N0cmluZyA9ICJFQ0MgRXJyb3IiOwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJcHJpbnRrKCIlczogSU9NTVUgRXJyb3IsIHR5cGVbJXNdXG4iLAogCQkgICAgICAgcGJtLT5uYW1lLCB0eXBlX3N0cmluZyk7CiAKQEAgLTMxOSw3ICszMTksNyBAQAogCQkJZGVmYXVsdDoKIAkJCQl0eXBlX3N0cmluZyA9ICJFQ0MgRXJyb3IiOwogCQkJCWJyZWFrOwotCQkJfTsKKwkJCX0KIAkJCXByaW50aygiJXM6IElPTU1VIFRBRyglZClbZXJyb3IoJXMpIGN0eCgleCkgd3IoJWQpIHN0ciglZCkgIgogCQkJICAgICAgICJzeiglZEspIHZwZyglMDhseCldXG4iLAogCQkJICAgICAgIHBibS0+bmFtZSwgaSwgdHlwZV9zdHJpbmcsCkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCWRlZmF1bHQ6CiAJCWNoaXBzZXRfbmFtZSA9ICJTQ0hJWk8iOwogCQlicmVhazsKLQl9OworCX0KIAogCS8qIEZvciBTQ0hJWk8sIHRocmVlIE9CUCByZWdzOgogCSAqIDEpIFBCTSBjb250cm9sbGVyIHJlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Byb21faXJxdHJhbnMuYwppbmRleCA1NzBiOThmLi40MGU0OTM2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wcm9tX2lycXRyYW5zLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvbV9pcnF0cmFucy5jCkBAIC02OTQsNyArNjk0LDcgQEAKIAkJY2FzZSAzOgogCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKIAkJaWNsciArPSAoKHVuc2lnbmVkIGxvbmcpc2J1c19sZXZlbCAtIDFVTCkgKiA4VUw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHN5Y2hvX2NvbW1vbi5jCmluZGV4IGZlMmFmNjYuLjhkYjQ4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BzeWNob19jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wc3ljaG9fY29tbW9uLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQlkZWZhdWx0OgogCQkJdHlwZV9zdHIgPSAiRUNDIEVycm9yIjsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IElPTU1VIEVycm9yLCB0eXBlWyVzXVxuIiwKIAkJICAgICAgIHBibS0+bmFtZSwgdHlwZV9zdHIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zYnVzLmMKaW5kZXggMmNhMzJkMS4uYTE2MWI5YyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2J1cy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NidXMuYwpAQCAtOTcsNyArOTcsNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuOwotCX07CisJfQogCiAJdmFsID0gdXBhX3JlYWRxKGNmZ19yZWcpOwogCWlmICh2YWwgJiAoMVVMIDw8IDE0VUwpKSB7CkBAIC0yNDQsNyArMjQ0LDcgQEAKIAkJY2FzZSAzOgogCQkJaWNsciA9IHJlZ19iYXNlICsgU1lTSU9fSUNMUl9TTE9UMzsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAKIAkJaWNsciArPSAoKHVuc2lnbmVkIGxvbmcpc2J1c19sZXZlbCAtIDFVTCkgKiA4VUw7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggMzI0OWQzZi4uZDI2ZTFmNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIAlkZWZhdWx0OgogCQlwcmludGsoIlVOS05PV04hXG4iKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggZjNiNjg1MC4uYzRkZDA5OSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXByb21fcHJpbnRmKCJVbmtub3duIGNwdSB0eXBlLCBoYWx0aW5nLlxuIik7CiAJCQlwcm9tX2hhbHQoKTsKLQkJfTsKKwkJfQogCiAJCSoodW5zaWduZWQgaW50ICopIChhZGRyICsgIDApID0gaW5zbnNbMF07CiAJCXdtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwppbmRleCBkNWIzOTU4Li4yMWIxMjUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJCXByaW50aygiVU5LTk9XTiFcbiIpOwogCQlCVUcoKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiB9CiAKIHZvaWQgY3B1X3BhbmljKHZvaWQpCkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogLyogU2V0IHRoaXMgdXAgZWFybHkgc28gdGhhdCB0aGluZ3MgbGlrZSB0aGUgc2NoZWR1bGVyIGNhbiBpbml0CkBAIC00NDcsNyArNDQ3LDcgQEAKIAkJcHJpbnRrKCJVTktOT1dOIVxuIik7CiAJCUJVRygpOwogCQlicmVhazsKLQl9OworCX0KIAogCWlmICghcmV0KSB7CiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsICZzbXBfY29tbWVuY2VkX21hc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfaXJxLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwppbmRleCBhOWVhNjBlLi4xZDEzYzViIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9pcnEuYwpAQCAtMTAzLDEwICsxMDMsOSBAQAogCiAJc2JpbCA9IChzYnVzbCA8PCAyKTsKIAkvKiBMb29wIGZvciBlYWNoIHBlbmRpbmcgU0JJICovCi0JZm9yIChzYmlubyA9IDA7IGJ1c19tYXNrOyBzYmlubysrKSB7CisJZm9yIChzYmlubyA9IDA7IGJ1c19tYXNrOyBzYmlubysrLCBidXNfbWFzayA+Pj0gMSkgewogCQl1bnNpZ25lZCBpbnQgaWR4LCBtYXNrOwogCi0JCWJ1c19tYXNrID4+PSAxOwogCQlpZiAoIShidXNfbWFzayAmIDEpKQogCQkJY29udGludWU7CiAJCS8qIFhYWCBUaGlzIHNlZW1zIHRvIEFDSyB0aGUgaXJxIHR3aWNlLiAgYWNxdWlyZV9zYmkoKQpAQCAtMTE4LDE5ICsxMTcsMTYgQEAKIAkJbWFzayAmPSAoMHhmIDw8IHNiaWwpOwogCiAJCS8qIExvb3AgZm9yIGVhY2ggcGVuZGluZyBTQkkgc2xvdCAqLwotCQlpZHggPSAwOwogCQlzbG90ID0gKDEgPDwgc2JpbCk7Ci0JCXdoaWxlIChtYXNrICE9IDApIHsKKwkJZm9yIChpZHggPSAwOyBtYXNrICE9IDA7IGlkeCsrLCBzbG90IDw8PSAxKSB7CiAJCQl1bnNpZ25lZCBpbnQgcGlsOwogCQkJc3RydWN0IGlycV9idWNrZXQgKnA7CiAKLQkJCWlkeCsrOwotCQkJc2xvdCA8PD0gMTsKIAkJCWlmICghKG1hc2sgJiBzbG90KSkKIAkJCQljb250aW51ZTsKIAogCQkJbWFzayAmPSB+c2xvdDsKLQkJCXBpbCA9IHN1bjRkX2VuY29kZV9pcnEoc2Jpbm8sIHNiaWwsIGlkeCk7CisJCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKHNiaW5vLCBzYnVzbCwgaWR4KTsKIAogCQkJcCA9IGlycV9tYXBbcGlsXTsKIAkJCXdoaWxlIChwKSB7CkBAIC0yMTgsMTAgKzIxNCwxMCBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fbG9ja19pcnFzYXZlKCZzdW40ZF9pbXNrX2xvY2ssIGZsYWdzKTsKLQljY19zZXRfaW1za19vdGhlcihjcHVpZCwgY2NfZ2V0X2ltc2tfb3RoZXIoY3B1aWQpIHwgfigxIDw8IHJlYWxfaXJxKSk7CisJY2Nfc2V0X2ltc2tfb3RoZXIoY3B1aWQsIGNjX2dldF9pbXNrX290aGVyKGNwdWlkKSAmIH4oMSA8PCByZWFsX2lycSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1bjRkX2ltc2tfbG9jaywgZmxhZ3MpOwogI2Vsc2UKLQljY19zZXRfaW1zayhjY19nZXRfaW1zaygpIHwgfigxIDw8IHJlYWxfaXJxKSk7CisJY2Nfc2V0X2ltc2soY2NfZ2V0X2ltc2soKSAmIH4oMSA8PCByZWFsX2lycSkpOwogI2VuZGlmCiB9CiAKQEAgLTI5OSw1OCArMjk1LDE5IEBACiAJfQogfQogCi11bnNpZ25lZCBpbnQgc3VuNGRfYnVpbGRfZGV2aWNlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCByZWFsX2lycSkKK3Vuc2lnbmVkIGludCBfc3VuNGRfYnVpbGRfZGV2aWNlX2lycSh1bnNpZ25lZCBpbnQgcmVhbF9pcnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgYm9hcmQpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlvX3VuaXQsICpzYmkgPSBkcC0+cGFyZW50OwotCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKIAlzdHJ1Y3Qgc3VuNGRfaGFuZGxlcl9kYXRhICpoYW5kbGVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IHBpbDsKIAl1bnNpZ25lZCBpbnQgaXJxOwotCWludCBib2FyZCwgc2xvdDsKLQlpbnQgc2J1c2w7Ci0KLQlpcnEgPSAwOwotCXdoaWxlIChzYmkpIHsKLQkJaWYgKCFzdHJjbXAoc2JpLT5uYW1lLCAic2JpIikpCi0JCQlicmVhazsKLQotCQlzYmkgPSBzYmktPnBhcmVudDsKLQl9Ci0JaWYgKCFzYmkpCi0JCWdvdG8gZXJyX291dDsKLQotCXJlZ3MgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJyZWciLCBOVUxMKTsKLQlpZiAoIXJlZ3MpCi0JCWdvdG8gZXJyX291dDsKLQotCXNsb3QgPSByZWdzLT53aGljaF9pbzsKLQotCS8qCi0JICogIElmIFNCSSdzIHBhcmVudCBpcyBub3QgaW8tdW5pdCBvciB0aGUgaW8tdW5pdCBsYWNrcwotCSAqIGEgImJvYXJkIyIgcHJvcGVydHksIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nLgotCSAqLwotCWlmICghc2JpLT5wYXJlbnQgfHwgc3RyY21wKHNiaS0+cGFyZW50LT5uYW1lLCAiaW8tdW5pdCIpKSB7Ci0JCXByaW50aygiJXM6IEVycm9yLCBwYXJlbnQgaXMgbm90IGlvLXVuaXQuXG4iLCBzYmktPmZ1bGxfbmFtZSk7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JaW9fdW5pdCA9IHNiaS0+cGFyZW50OwotCWJvYXJkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGlvX3VuaXQsICJib2FyZCMiLCAtMSk7Ci0JaWYgKGJvYXJkID09IC0xKSB7Ci0JCXByaW50aygiJXM6IEVycm9yLCBsYWNrcyBib2FyZCMgcHJvcGVydHkuXG4iLCBpb191bml0LT5mdWxsX25hbWUpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCi0Jc2J1c2wgPSBwaWxfdG9fc2J1c1tyZWFsX2lycV07Ci0JaWYgKHNidXNsKQotCQlwaWwgPSBzdW40ZF9lbmNvZGVfaXJxKGJvYXJkLCBzYnVzbCwgc2xvdCk7Ci0JZWxzZQotCQlwaWwgPSByZWFsX2lycTsKIAogCWlycSA9IGlycV9hbGxvYyhyZWFsX2lycSwgcGlsKTsKLQlpZiAoaXJxID09IDApCisJaWYgKGlycSA9PSAwKSB7CisJCXByb21fcHJpbnRmKCJJUlE6IGFsbG9jYXRlIGZvciAlZCAlZCAlZCBmYWlsZWRcbiIsCisJCQlyZWFsX2lycSwgcGlsLCBib2FyZCk7CiAJCWdvdG8gZXJyX291dDsKKwl9CiAKIAloYW5kbGVyX2RhdGEgPSBpcnFfZ2V0X2hhbmRsZXJfZGF0YShpcnEpOwogCWlmICh1bmxpa2VseShoYW5kbGVyX2RhdGEpKQpAQCAtMzY4LDkgKzMyNSw4MCBAQAogCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgaGFuZGxlcl9kYXRhKTsKIAogZXJyX291dDoKLQlyZXR1cm4gcmVhbF9pcnE7CisJcmV0dXJuIGlycTsKIH0KIAorCisKK3Vuc2lnbmVkIGludCBzdW40ZF9idWlsZF9kZXZpY2VfaXJxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWxfaXJxKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IGRldmljZV9ub2RlICpib2FyZF9wYXJlbnQsICpidXMgPSBkcC0+cGFyZW50OworCWNoYXIgKmJ1c19jb25uZWN0aW9uOworCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tX3JlZ2lzdGVycyAqcmVnczsKKwl1bnNpZ25lZCBpbnQgcGlsOworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGJvYXJkLCBzbG90OworCWludCBzYnVzbDsKKworCWlycSA9IHJlYWxfaXJxOworCXdoaWxlIChidXMpIHsKKwkJaWYgKCFzdHJjbXAoYnVzLT5uYW1lLCAic2JpIikpIHsKKwkJCWJ1c19jb25uZWN0aW9uID0gImlvLXVuaXQiOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXN0cmNtcChidXMtPm5hbWUsICJib290YnVzIikpIHsKKwkJCWJ1c19jb25uZWN0aW9uID0gImNwdS11bml0IjsKKwkJCWJyZWFrOworCQl9CisKKwkJYnVzID0gYnVzLT5wYXJlbnQ7CisJfQorCWlmICghYnVzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlyZWdzID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAicmVnIiwgTlVMTCk7CisJaWYgKCFyZWdzKQorCQlnb3RvIGVycl9vdXQ7CisKKwlzbG90ID0gcmVncy0+d2hpY2hfaW87CisKKwkvKgorCSAqIElmIEJ1cyBub2RlcyBwYXJlbnQgaXMgbm90IGlvLXVuaXQvY3B1LXVuaXQgb3IgdGhlIGlvLXVuaXQvY3B1LXVuaXQKKwkgKiBsYWNrcyBhICJib2FyZCMiIHByb3BlcnR5LCBzb21ldGhpbmcgaXMgdmVyeSB3cm9uZy4KKwkgKi8KKwlpZiAoIWJ1cy0+cGFyZW50IHx8IHN0cmNtcChidXMtPnBhcmVudC0+bmFtZSwgYnVzX2Nvbm5lY3Rpb24pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBwYXJlbnQgaXMgbm90ICVzLlxuIiwKKwkJCWJ1cy0+ZnVsbF9uYW1lLCBidXNfY29ubmVjdGlvbik7CisJCWdvdG8gZXJyX291dDsKKwl9CisJYm9hcmRfcGFyZW50ID0gYnVzLT5wYXJlbnQ7CisJYm9hcmQgPSBvZl9nZXRpbnRwcm9wX2RlZmF1bHQoYm9hcmRfcGFyZW50LCAiYm9hcmQjIiwgLTEpOworCWlmIChib2FyZCA9PSAtMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciwgbGFja3MgYm9hcmQjIHByb3BlcnR5LlxuIiwKKwkJCWJvYXJkX3BhcmVudC0+ZnVsbF9uYW1lKTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXNidXNsID0gcGlsX3RvX3NidXNbcmVhbF9pcnFdOworCWlmIChzYnVzbCkKKwkJcGlsID0gc3VuNGRfZW5jb2RlX2lycShib2FyZCwgc2J1c2wsIHNsb3QpOworCWVsc2UKKwkJcGlsID0gcmVhbF9pcnE7CisKKwlpcnEgPSBfc3VuNGRfYnVpbGRfZGV2aWNlX2lycShyZWFsX2lycSwgcGlsLCBib2FyZCk7CitlcnJfb3V0OgorCXJldHVybiBpcnE7Cit9CisKK3Vuc2lnbmVkIGludCBzdW40ZF9idWlsZF90aW1lcl9pcnEodW5zaWduZWQgaW50IGJvYXJkLCB1bnNpZ25lZCBpbnQgcmVhbF9pcnEpCit7CisJcmV0dXJuIF9zdW40ZF9idWlsZF9kZXZpY2VfaXJxKHJlYWxfaXJxLCByZWFsX2lycSwgYm9hcmQpOworfQorCisKIHN0YXRpYyB2b2lkIF9faW5pdCBzdW40ZF9maXh1cF90cmFwX3RhYmxlKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNDAyLDYgKzQzMCw3IEBACiAJdW5zaWduZWQgaW50IGlycTsKIAljb25zdCB1MzIgKnJlZzsKIAlpbnQgZXJyOworCWludCBib2FyZDsKIAogCWRwID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImNwdS11bml0Iik7CiAJaWYgKCFkcCkgewpAQCAtNDE0LDEyICs0NDMsMTkgQEAKIAkgKiBib290YnVzLgogCSAqLwogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShkcCwgInJlZyIsIE5VTEwpOwotCW9mX25vZGVfcHV0KGRwKTsKIAlpZiAoIXJlZykgewogCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IE5vIHJlZyBwcm9wZXJ0eVxuIik7CiAJCXByb21faGFsdCgpOwogCX0KIAorCWJvYXJkID0gb2ZfZ2V0aW50cHJvcF9kZWZhdWx0KGRwLCAiYm9hcmQjIiwgLTEpOworCWlmIChib2FyZCA9PSAtMSkgeworCQlwcm9tX3ByaW50Zigic3VuNGRfaW5pdF90aW1lcnM6IE5vIGJvYXJkIyBwcm9wZXJ0eSBvbiBjcHUtdW5pdFxuIik7CisJCXByb21faGFsdCgpOworCX0KKworCW9mX25vZGVfcHV0KGRwKTsKKwogCXJlcy5zdGFydCA9IHJlZ1sxXTsKIAlyZXMuZW5kID0gcmVnWzJdIC0gMTsKIAlyZXMuZmxhZ3MgPSByZWdbMF0gJiAweGZmOwpAQCAtNDM0LDcgKzQ3MCw3IEBACiAKIAltYXN0ZXJfbDEwX2NvdW50ZXIgPSAmc3VuNGRfdGltZXJzLT5sMTBfY3VyX2NvdW50OwogCi0JaXJxID0gc3VuNGRfYnVpbGRfZGV2aWNlX2lycShOVUxMLCBTVU40RF9USU1FUl9JUlEpOworCWlycSA9IHN1bjRkX2J1aWxkX3RpbWVyX2lycShib2FyZCwgU1VONERfVElNRVJfSVJRKTsKIAllcnIgPSByZXF1ZXN0X2lycShpcnEsIGNvdW50ZXJfZm4sIElSUUZfVElNRVIsICJ0aW1lciIsIE5VTEwpOwogCWlmIChlcnIpIHsKIAkJcHJvbV9wcmludGYoInN1bjRkX2luaXRfdGltZXJzOiByZXF1ZXN0X2lycSgpIGZhaWxlZCB3aXRoICVkXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKaW5kZXggNmRiMThjNi4uMTcwY2Q4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PU1lTOwotCX07CisJfQogCiAJcmV0dXJuIC1FTk9TWVM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCmluZGV4IDk2MDgyZDMuLjkwOGI0N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY182NC5jCkBAIC00NjAsNyArNDYwLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0KIAlpZiAoY2FsbCA8PSBNU0dDVEwpIHsKIAkJc3dpdGNoIChjYWxsKSB7CkBAIC00ODEsNyArNDgxLDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0KIAlpZiAoY2FsbCA8PSBTSE1DVEwpIHsKIAkJc3dpdGNoIChjYWxsKSB7CkBAIC01MDcsNyArNTA3LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKLQkJfTsKKwkJfQogCX0gZWxzZSB7CiAJCWVyciA9IC1FTk9TWVM7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCmluZGV4IDJiOGQ1NGIuLjFkYjZiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKLQl9OworCX0KIH0KIAogc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2Ugc3BhcmM2NF9jbG9ja2V2ZW50ID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggMWVkNTQ3Yi4uMGNiZGFhNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCkBAIC0xODA0LDcgKzE4MDQsNyBAQAogCQlyZXR1cm4gIndhcm5pbmcgcmVzdW1hYmxlIjsKIAlkZWZhdWx0OgogCQlyZXR1cm4gInVua25vd24iOwotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBzdW40dl9sb2dfZXJyb3Ioc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBzdW40dl9lcnJvcl9lbnRyeSAqZW50LCBpbnQgY3B1LCBjb25zdCBjaGFyICpwZngsIGF0b21pY190ICpvY250KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hbGlnbmVkXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwppbmRleCBjNzUyYzRjLi5iMmIwMTllIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKIAkJCWJyZWFrOwotCQl9OworCQl9CiAJfQogCXJldHVybiBfX2RvX2ludF9zdG9yZShkc3RfYWRkciwgc2l6ZSwgc3JjX3ZhbCwgYXNpKTsKIH0KQEAgLTMyOCw3ICszMjgsNyBAQAogCQljYXNlIEFTSV9TTkZMOgogCQkJYXNpICY9IH4weDA4OwogCQkJYnJlYWs7Ci0JCX07CisJCX0KIAkJc3dpdGNoIChkaXIpIHsKIAkJY2FzZSBsb2FkOgogCQkJcmVnX2FkZHIgPSBmZXRjaF9yZWdfYWRkcigoKGluc24+PjI1KSYweDFmKSwgcmVncyk7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAkJCQlkZWZhdWx0OgogCQkJCQlCVUcoKTsKIAkJCQkJYnJlYWs7Ci0JCQkJfTsKKwkJCQl9CiAJCQkJKnJlZ19hZGRyID0gdmFsX2luOwogCQkJfQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91czJlX2NwdWZyZXEuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCmluZGV4IDUzMWQ1NGYuLjQ4OWZjMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VzMmVfY3B1ZnJlcS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCWRlZmF1bHQ6CiAJCUJVRygpOwotCX07CisJfQogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmRleF90b19kaXZpc29yKHVuc2lnbmVkIGludCBpbmRleCkKQEAgLTE5OSw3ICsxOTksNyBAQAogCiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVzdGFyX3RvX2Rpdmlzb3IodW5zaWduZWQgbG9uZyBlc3RhcikKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdXMzX2NwdWZyZXEuYwppbmRleCA5YThjZWI3Li5lYjE2MjRiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC91czNfY3B1ZnJlcS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VzM19jcHVmcmVxLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQlVHKCk7Ci0JfTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI1LDcgKzEyNSw3IEBACiAKIAlkZWZhdWx0OgogCQlCVUcoKTsKLQl9OworCX0KIAogCXJlZyA9IHJlYWRfc2FmYXJpX2NmZygpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlvaHMuYwppbmRleCBhYTZhYzcwLi4yOTM0OGVhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aW9ocy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpb2hzLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIGhhbmRzaGFrZV9mYWlsdXJlKHZpbyk7Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgcHJvY2Vzc19hdHRyKHN0cnVjdCB2aW9fZHJpdmVyX3N0YXRlICp2aW8sIHZvaWQgKnBrdCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Zpc2VtdWwuYwppbmRleCA5ZGZkMmViLi4zNjM1NzcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC92aXNlbXVsLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdmlzZW11bC5jCkBAIC0zMzQsNyArMzM0LDcgQEAKIAkJbGVmdCA9IGVkZ2UzMl90YWJfbFsocnMxID4+IDIpICYgMHgxXS5sZWZ0OwogCQlyaWdodCA9IGVkZ2UzMl90YWJfbFsocnMyID4+IDIpICYgMHgxXS5yaWdodDsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlpZiAoKHJzMSAmIH4weDdVTCkgPT0gKHJzMiAmIH4weDdVTCkpCiAJCXJkX3ZhbCA9IHJpZ2h0ICYgbGVmdDsKQEAgLTM2MCw3ICszNjAsNyBAQAogCQl0c3RhdGUgPSByZWdzLT50c3RhdGUgJiB+KFRTVEFURV9YQ0MgfCBUU1RBVEVfSUNDKTsKIAkJcmVncy0+dHN0YXRlID0gdHN0YXRlIHwgKGNjciA8PCAzMlVMKTsKIAl9Ci0JfTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGFycmF5KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTM5Miw3ICszOTIsNyBAQAogCiAJY2FzZSBBUlJBWTMyX09QRjoKIAkJcmRfdmFsIDw8PSAyOwotCX07CisJfQogCiAJc3RvcmVfcmVnKHJlZ3MsIHJkX3ZhbCwgUkQoaW5zbikpOwogfQpAQCAtNTc3LDcgKzU3Nyw3IEBACiAJCSpmcGRfcmVnYWRkcihmLCBSRChpbnNuKSkgPSByZF92YWw7CiAJCWJyZWFrOwogCX0KLQl9OworCX0KIH0KIAogc3RhdGljIHZvaWQgcG11bChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IGluc24sIHVuc2lnbmVkIGludCBvcGYpCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJKmZwZF9yZWdhZGRyKGYsIFJEKGluc24pKSA9IHJkX3ZhbDsKIAkJYnJlYWs7CiAJfQotCX07CisJfQogfQogCiBzdGF0aWMgdm9pZCBwY21wKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBpbnQgaW5zbiwgdW5zaWduZWQgaW50IG9wZikKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQkJCXJkX3ZhbCB8PSAxIDw8IGk7CiAJCX0KIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAltYXliZV9mbHVzaF93aW5kb3dzKDAsIDAsIFJEKGluc24pLCAwKTsKIAlzdG9yZV9yZWcocmVncywgcmRfdmFsLCBSRChpbnNuKSk7CkBAIC04ODUsNyArODg1LDcgQEAKIAljYXNlIEJTSFVGRkxFX09QRjoKIAkJYnNodWZmbGUocmVncywgaW5zbik7CiAJCWJyZWFrOwotCX07CisJfQogCiAJcmVncy0+dHBjID0gcmVncy0+dG5wYzsKIAlyZWdzLT50bnBjICs9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKaW5kZXggYjEwYWM0ZC4uNzU0M2RkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAKIAlkZWZhdWx0OgogCQlicmVhazsKLQl9OworCX0KIAogCW1lbXNldCgmcmVncywgMCwgc2l6ZW9mIChyZWdzKSk7CiAJcmVncy5wYyA9IHBjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwppbmRleCBjYTIxNzMyLi43YjAwZGU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfMzIuYwpAQCAtMzQwLDcgKzM0MCw3IEBACiAJCXByb21fcHJpbnRmKCJwYWdpbmdfaW5pdDogc3BhcmNfY3B1X21vZGVsID0gJWRcbiIsIHNwYXJjX2NwdV9tb2RlbCk7CiAJCXByb21fcHJpbnRmKCJwYWdpbmdfaW5pdDogSGFsdGluZy4uLlxuIik7CiAJCXByb21faGFsdCgpOwotCX07CisJfQogCiAJLyogSW5pdGlhbGl6ZSB0aGUgcHJvdGVjdGlvbiBtYXAgd2l0aCBub24tY29uc3RhbnQsIE1NVSBkZXBlbmRlbnQgdmFsdWVzLiAqLwogCXByb3RlY3Rpb25fbWFwWzBdID0gUEFHRV9OT05FOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9pbml0XzY0LmMgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwppbmRleCBlMTBjZDAzLi4zZmQ4ZTE4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3NwYXJjL21tL2luaXRfNjQuYwpAQCAtMTYyNSw3ICsxNjI1LDcgQEAKIAkJa3RzYl9kZXNjclswXS5wZ3N6X2lkeCA9IEhWX1BHU1pfSURYXzRNQjsKIAkJa3RzYl9kZXNjclswXS5wZ3N6X21hc2sgPSBIVl9QR1NaX01BU0tfNE1COwogCQlicmVhazsKLQl9OworCX0KIAogCWt0c2JfZGVzY3JbMF0uYXNzb2MgPSAxOwogCWt0c2JfZGVzY3JbMF0ubnVtX3R0ZXMgPSBLRVJORUxfVFNCX05FTlRSSUVTOwpAQCAtMjI2Niw3ICsyMjY2LDcgQEAKIAkJCXJldHVybiBfUEFHRV9TWjUxMktfNFY7CiAJCWNhc2UgNCAqIDEwMjQgKiAxMDI0OgogCQkJcmV0dXJuIF9QQUdFX1NaNE1CXzRWOwotCQl9OworCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChzeikgewogCQljYXNlIDggKiAxMDI0OgpAQCAtMjI3OCw3ICsyMjc4LDcgQEAKIAkJCXJldHVybiBfUEFHRV9TWjUxMktfNFU7CiAJCWNhc2UgNCAqIDEwMjQgKiAxMDI0OgogCQkJcmV0dXJuIF9QQUdFX1NaNE1CXzRVOwotCQl9OworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL21tL3NybW11LmMgYi9hcmNoL3NwYXJjL21tL3NybW11LmMKaW5kZXggZmUwOWZkOC4uY2JlZjc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9tbS9zcm1tdS5jCisrKyBiL2FyY2gvc3BhcmMvbW0vc3JtbXUuYwpAQCAtMTY2NSw3ICsxNjY1LDcgQEAKIAlkZWZhdWx0OgogCQlzcm1tdV9tb2R0eXBlID0gU3dpZnRfb2s7CiAJCWJyZWFrOwotCX07CisJfQogCiAJQlRGSVhVUFNFVF9DQUxMKGZsdXNoX2NhY2hlX2FsbCwgc3dpZnRfZmx1c2hfY2FjaGVfYWxsLCBCVEZJWFVQQ0FMTF9OT1JNKTsKIAlCVEZJWFVQU0VUX0NBTEwoZmx1c2hfY2FjaGVfbW0sIHN3aWZ0X2ZsdXNoX2NhY2hlX21tLCBCVEZJWFVQQ0FMTF9OT1JNKTsKQEAgLTIwNjksNyArMjA2OSw3IEBACiAJCQkvKiBTb21lIG90aGVyIEN5cHJlc3MgcmV2aXNpb24sIGFzc3VtZSBhIDYwNS4gKi8KIAkJCWluaXRfY3lwcmVzc182MDUobW9kX3Jldik7CiAJCQlicmVhazsKLQkJfTsKKwkJfQogCQlyZXR1cm47CiAJfQogCQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9zdW40Yy5jIGIvYXJjaC9zcGFyYy9tbS9zdW40Yy5jCmluZGV4IGEyMzUwYjUuLjFjZjRmMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vc3VuNGMuYworKysgYi9hcmNoL3NwYXJjL21tL3N1bjRjLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQlwcm9tX3ByaW50ZigicHJvYmVfdmFjOiBEaWRuJ3QgZXhwZWN0IHZhYy1saW5lc2l6ZSBvZiAlZCwgaGFsdGluZ1xuIiwKIAkJCSAgICBzdW40Y192YWNpbmZvLmxpbmVzaXplKTsKIAkJcHJvbV9oYWx0KCk7Ci0JfTsKKwl9CiAKIAlzdW40Y19mbHVzaF9hbGwoKTsKIAlzdW40Y19lbmFibGVfdmFjKCk7CkBAIC0zNjQsNyArMzY0LDcgQEAKIAkJCXByb21fcHJpbnRmKCJVbmhhbmRsZWQgbnVtYmVyIG9mIHNlZ21hcHM6ICVkXG4iLAogCQkJCSAgICBudW1fc2VnbWFwcyk7CiAJCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAlzd2l0Y2ggKG51bV9jb250ZXh0cykgewogCQljYXNlIDg6CiAJCQkvKiBEZWZhdWx0LCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJCQlwcm9tX3ByaW50ZigiVW5oYW5kbGVkIG51bWJlciBvZiBjb250ZXh0czogJWRcbiIsCiAJCQkJICAgIG51bV9jb250ZXh0cyk7CiAJCQlwcm9tX2hhbHQoKTsKLQl9OworCX0KIAogCWlmIChzdW40Y192YWNpbmZvLmRvX2h3Zmx1c2hlcyAhPSAwKSB7CiAJCVBBVENIX0lOU04odmFjX2h3Zmx1c2hfcGF0Y2gxX29uLCB2YWNfaHdmbHVzaF9wYXRjaDEpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJCQlwcm9tX3ByaW50ZigiSW1wb3NzaWJsZSBWQUMgbGluZXNpemUgJWQsIGhhbHRpbmcuLi5cbiIsCiAJCQkJICAgIHN1bjRjX3ZhY2luZm8ubGluZXNpemUpOwogCQkJcHJvbV9oYWx0KCk7Ci0JCX07CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vdHNiLmMgYi9hcmNoL3NwYXJjL21tL3RzYi5jCmluZGV4IDk0ODQ2MTUuLmE1ZjUxYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vdHNiLmMKKysrIGIvYXJjaC9zcGFyYy9tbS90c2IuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiVFNCWyVzOiVkXTogSW1wb3NzaWJsZSBUU0Igc2l6ZSAlbHUsIGtpbGxpbmcgcHJvY2Vzcy5cbiIsCiAJCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHRzYl9ieXRlcyk7CiAJCWRvX2V4aXQoU0lHU0VHVik7Ci0JfTsKKwl9CiAJdHRlIHw9IHB0ZV9zel9iaXRzKHBhZ2Vfc3opOwogCiAJaWYgKHRsYl90eXBlID09IGNoZWV0YWhfcGx1cyB8fCB0bGJfdHlwZSA9PSBoeXBlcnZpc29yKSB7CkBAIC0yMTUsNyArMjE1LDcgQEAKICNlbmRpZgogCQlkZWZhdWx0OgogCQkJQlVHKCk7Ci0JCX07CisJCX0KIAkJaHAtPmFzc29jID0gMTsKIAkJaHAtPm51bV90dGVzID0gdHNiX2J5dGVzIC8gMTY7CiAJCWhwLT5jdHhfaWR4ID0gMDsKQEAgLTIzMCw3ICsyMzAsNyBAQAogI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlCVUcoKTsKLQkJfTsKKwkJfQogCQlocC0+dHNiX2Jhc2UgPSB0c2JfcGFkZHI7CiAJCWhwLT5yZXN2ID0gMDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwppbmRleCBiMDVlM2RiLi5hMDBmNDdiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7Ci0JfTsKKwl9CiAJcmVzdG9yZV9jdXJyZW50KCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGk7IC8qIFVnaCwgd2UgY291bGQgc3BpbiBmb3JldmVyIG9uIHVuc3VwcG9ydGVkIHByb21zIDsoICovCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwppbmRleCAwYTYwMWIzLi4yNmM2NGNlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkJCSAgICByb212ZWMtPnB2X3JvbXZlcnMpOwogCQlwcm9tX2hhbHQoKTsKIAkJYnJlYWs7Ci0JfTsKKwl9CiAKIAlwcm9tX3JldiA9IHJvbXZlYy0+cHZfcGx1Z2luX3JldmlzaW9uOwogCXByb21fcHJldiA9IHJvbXZlYy0+cHZfcHJpbnRyZXY7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vbXAuYyBiL2FyY2gvc3BhcmMvcHJvbS9tcC5jCmluZGV4IDk3YzQ0YzkuLjBkYTgyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9tcC5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9tcC5jCkBAIC0zNSw3ICszNSw3IEBACiAJY2FzZSBQUk9NX1YzOgogCQlyZXQgPSAoKihyb212ZWMtPnYzX2NwdXN0YXJ0KSkoY3B1bm9kZSwgKGludCkgY3RhYmxlX3JlZywgY3R4LCBwYyk7CiAJCWJyZWFrOwotCX07CisJfQogCXJlc3RvcmVfY3VycmVudCgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9LY29uZmlnIGIvYXJjaC91bmljb3JlMzIvS2NvbmZpZwppbmRleCBkM2EzMDMyLi5lNTdkY2NlIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9LY29uZmlnCisrKyBiL2FyY2gvdW5pY29yZTMyL0tjb25maWcKQEAgLTIzMSwxMCArMjMxLDYgQEAKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgTkIwOTE2IFBXTSBjb250cm9sbGVycwogCi1jb25maWcgUFVWM19SVEMKLQl0cmlzdGF0ZSAiUEtVbml0eSB2MyBSVEMgU3VwcG9ydCIKLQlkZXBlbmRzIG9uICFBUkNIX0ZQR0EKLQogaWYgUFVWM19OQjA5MTYKIAogbWVudSAiUEtVbml0eSBOZXRCb29rLTA5MTYgRmVhdHVyZXMiCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9NYWtlZmlsZSBiL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCmluZGV4IDc2YThiZWUuLjZhZjRiYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCisrKyBiL2FyY2gvdW5pY29yZTMyL01ha2VmaWxlCkBAIC00MCw0MiArNDAsMTAgQEAKIAogbGlicy15CQkJKz0gYXJjaC91bmljb3JlMzIvbGliLwogCi1BU01fR0VORVJBVEVEX0RJUgk6PSAkKHNyY3RyZWUpL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvZ2VuZXJhdGVkCi1MSU5VWElOQ0xVREUJCSs9IC1JJChBU01fR0VORVJBVEVEX0RJUikKLQotQVNNX0dFTkVSSUNfSEVBREVSUwk6PSBhdG9taWMuaCBhdXh2ZWMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBiaXRzcGVybG9uZy5oIGJ1Zy5oIGJ1Z3MuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBjcHV0aW1lLmggY3VycmVudC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGRldmljZS5oIGRpdjY0LmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gZW1lcmdlbmN5LXJlc3RhcnQuaCBlcnJuby5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGZiLmggZmNudGwuaCBmdHJhY2UuaCBmdXRleC5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGhhcmRpcnEuaCBod19pcnEuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBpb2N0bC5oIGlvY3Rscy5oIGlwY2J1Zi5oIGlycV9yZWdzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0ga2RlYnVnLmgga21hcF90eXBlcy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IGxvY2FsLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gbW1hbi5oIG1vZHVsZS5oIG1zZ2J1Zi5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHBhcmFtLmggcGFycG9ydC5oIHBlcmNwdS5oIHBvbGwuaCBwb3NpeF90eXBlcy5oCi1BU01fR0VORVJJQ19IRUFERVJTCSs9IHJlc291cmNlLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc2NhdHRlcmxpc3QuaCBzZWN0aW9ucy5oIHNlZ21lbnQuaCBzZW1idWYuaCBzZXJpYWwuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSBzZXR1cC5oIHNobWJ1Zi5oIHNobXBhcmFtLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc2lnaW5mby5oIHNpZ25hbC5oIHNpemVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gc29ja2V0Lmggc29ja2lvcy5oIHN0YXQuaCBzdGF0ZnMuaCBzd2FiLmggc3lzY2FsbHMuaAotQVNNX0dFTkVSSUNfSEVBREVSUwkrPSB0ZXJtYml0cy5oIHRlcm1pb3MuaCB0b3BvbG9neS5oIHR5cGVzLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gdWNvbnRleHQuaCB1bmFsaWduZWQuaCB1c2VyLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0gdmdhLmgKLUFTTV9HRU5FUklDX0hFQURFUlMJKz0geG9yLmgKLQotYXJjaHByZXBhcmU6Ci1pZm5lcSAoJChBU01fR0VORVJBVEVEX0RJUiksICQod2lsZGNhcmQgJChBU01fR0VORVJBVEVEX0RJUikpKQotCSQoUSlta2RpciAtcCAkKEFTTV9HRU5FUkFURURfRElSKS9hc20KLQkkKFEpJChmb3JlYWNoIGEsICQoQVNNX0dFTkVSSUNfSEVBREVSUyksCVwKLQkJZWNobyAnI2luY2x1ZGUgPGFzbS1nZW5lcmljLyRhPicJXAotCQkJPiAkKEFTTV9HRU5FUkFURURfRElSKS9hc20vJGE7ICkKLWVuZGlmCi0KIGJvb3QJCQk6PSBhcmNoL3VuaWNvcmUzMi9ib290CiAKLSMgRGVmYXVsdCB0YXJnZXQgd2hlbiBleGVjdXRpbmcgcGxhaW4gbWFrZQorIyBEZWZhdWx0IGRlZmNvbmZpZyBhbmQgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIHBsYWluIG1ha2UKK0tCVUlMRF9ERUZDT05GSUcJOj0gJChBUkNIKV9kZWZjb25maWcKIEtCVUlMRF9JTUFHRQkJOj0gekltYWdlCiAKIGFsbDoJJChLQlVJTERfSU1BR0UpCkBAIC04Myw4ICs1MSw2IEBACiB6SW1hZ2UgSW1hZ2UgdUltYWdlOiB2bWxpbnV4CiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkKGJvb3QpLyRACiAKLU1SUFJPUEVSX0RJUlMJCSs9ICQoQVNNX0dFTkVSQVRFRF9ESVIpCi0KIGFyY2hjbGVhbjoKIAkkKFEpJChNQUtFKSAkKGNsZWFuKT0kKGJvb3QpCiAKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gvdW5pY29yZTMyL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA5NTM3MzQyLi5iMDk1NGEyIDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC91bmljb3JlMzIvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC01OSw3ICs1OSw3IEBACiAjIFdlIG5vdyBoYXZlIGEgUElDIGRlY29tcHJlc3NvciBpbXBsZW1lbnRhdGlvbi4gIERlY29tcHJlc3NvcnMgcnVubmluZwogIyBmcm9tIFJBTSBzaG91bGQgbm90IGRlZmluZSBaVEVYVEFERFIuICBEZWNvbXByZXNzb3JzIHJ1bm5pbmcgZGlyZWN0bHkKICMgZnJvbSBST00gb3IgRmxhc2ggbXVzdCBkZWZpbmUgWlRFWFRBRERSIChwcmVmZXJhYmx5IHZpYSB0aGUgY29uZmlnKQotWlRFWFRBRERSCTo9IDAKK1pURVhUQUREUgk6PSAweDAzMDAwMDAwCiBaQlNTQUREUgk6PSBBTElHTig0KQogCiBTRURGTEFHU19sZHMJPSBzL1RFWFRfU1RBUlQvJChaVEVYVEFERFIpLztzL0JTU19TVEFSVC8kKFpCU1NBRERSKS8KZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnIGIvYXJjaC91bmljb3JlMzIvY29uZmlncy91bmljb3JlMzJfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvdW5pY29yZTMyL2NvbmZpZ3MvZGVidWdfZGVmY29uZmlnCnJlbmFtZSB0byBhcmNoL3VuaWNvcmUzMi9jb25maWdzL3VuaWNvcmUzMl9kZWZjb25maWcKaW5kZXggYjVmYmRlOS4uYzlkZDMxOSAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvY29uZmlncy9kZWJ1Z19kZWZjb25maWcKKysrIGIvYXJjaC91bmljb3JlMzIvY29uZmlncy91bmljb3JlMzJfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogIyMjIEdlbmVyYWwgc2V0dXAKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWRlYnVnIgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXVuaWNvcmUzMiIKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNjQsNyArNjQsNiBAQAogQ09ORklHX0kyQ19FRVBST01fQVQyND1uCiBDT05GSUdfTENEX0JBQ0tMSUdIVD1uCiAKLUNPTkZJR19QVVYzX1JUQz15CiBDT05GSUdfUFVWM19VTUFMPXkKIENPTkZJR19QVVYzX01VU0I9bgogQ09ORklHX1BVVjNfQUM5Nz1uCkBAIC0xNjcsOCArMTY2LDkgQEAKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKIAogIwlSZWFsIFRpbWUgQ2xvY2sKLUNPTkZJR19SVENfTElCPW0KLUNPTkZJR19SVENfQ0xBU1M9bQorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0RSVl9QVVYzPXkKIAogIyMjIEZpbGUgc3lzdGVtcwogQ09ORklHX0VYVDJfRlM9bQpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vS2J1aWxkCmluZGV4IGIyMDBmZGEuLmNhMTEzZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL0tidWlsZAorKysgYi9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTEsMiArMSw2MSBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAorZ2VuZXJpYy15ICs9IGF0b21pYy5oCitnZW5lcmljLXkgKz0gYXV4dmVjLmgKK2dlbmVyaWMteSArPSBiaXRzcGVybG9uZy5oCitnZW5lcmljLXkgKz0gYnVnLmgKK2dlbmVyaWMteSArPSBidWdzLmgKK2dlbmVyaWMteSArPSBjcHV0aW1lLmgKK2dlbmVyaWMteSArPSBjdXJyZW50LmgKK2dlbmVyaWMteSArPSBkZXZpY2UuaAorZ2VuZXJpYy15ICs9IGRpdjY0LmgKK2dlbmVyaWMteSArPSBlbWVyZ2VuY3ktcmVzdGFydC5oCitnZW5lcmljLXkgKz0gZXJybm8uaAorZ2VuZXJpYy15ICs9IGZiLmgKK2dlbmVyaWMteSArPSBmY250bC5oCitnZW5lcmljLXkgKz0gZnRyYWNlLmgKK2dlbmVyaWMteSArPSBmdXRleC5oCitnZW5lcmljLXkgKz0gaGFyZGlycS5oCitnZW5lcmljLXkgKz0gaHdfaXJxLmgKK2dlbmVyaWMteSArPSBpb2N0bC5oCitnZW5lcmljLXkgKz0gaW9jdGxzLmgKK2dlbmVyaWMteSArPSBpcGNidWYuaAorZ2VuZXJpYy15ICs9IGlycV9yZWdzLmgKK2dlbmVyaWMteSArPSBrZGVidWcuaAorZ2VuZXJpYy15ICs9IGttYXBfdHlwZXMuaAorZ2VuZXJpYy15ICs9IGxvY2FsLmgKK2dlbmVyaWMteSArPSBtbWFuLmgKK2dlbmVyaWMteSArPSBtb2R1bGUuaAorZ2VuZXJpYy15ICs9IG1zZ2J1Zi5oCitnZW5lcmljLXkgKz0gcGFyYW0uaAorZ2VuZXJpYy15ICs9IHBhcnBvcnQuaAorZ2VuZXJpYy15ICs9IHBlcmNwdS5oCitnZW5lcmljLXkgKz0gcG9sbC5oCitnZW5lcmljLXkgKz0gcG9zaXhfdHlwZXMuaAorZ2VuZXJpYy15ICs9IHJlc291cmNlLmgKK2dlbmVyaWMteSArPSBzY2F0dGVybGlzdC5oCitnZW5lcmljLXkgKz0gc2VjdGlvbnMuaAorZ2VuZXJpYy15ICs9IHNlZ21lbnQuaAorZ2VuZXJpYy15ICs9IHNlbWJ1Zi5oCitnZW5lcmljLXkgKz0gc2VyaWFsLmgKK2dlbmVyaWMteSArPSBzZXR1cC5oCitnZW5lcmljLXkgKz0gc2htYnVmLmgKK2dlbmVyaWMteSArPSBzaG1wYXJhbS5oCitnZW5lcmljLXkgKz0gc2lnaW5mby5oCitnZW5lcmljLXkgKz0gc2lnbmFsLmgKK2dlbmVyaWMteSArPSBzaXplcy5oCitnZW5lcmljLXkgKz0gc29ja2V0LmgKK2dlbmVyaWMteSArPSBzb2NraW9zLmgKK2dlbmVyaWMteSArPSBzdGF0LmgKK2dlbmVyaWMteSArPSBzdGF0ZnMuaAorZ2VuZXJpYy15ICs9IHN3YWIuaAorZ2VuZXJpYy15ICs9IHN5c2NhbGxzLmgKK2dlbmVyaWMteSArPSB0ZXJtYml0cy5oCitnZW5lcmljLXkgKz0gdGVybWlvcy5oCitnZW5lcmljLXkgKz0gdG9wb2xvZ3kuaAorZ2VuZXJpYy15ICs9IHR5cGVzLmgKK2dlbmVyaWMteSArPSB1Y29udGV4dC5oCitnZW5lcmljLXkgKz0gdW5hbGlnbmVkLmgKK2dlbmVyaWMteSArPSB1c2VyLmgKK2dlbmVyaWMteSArPSB2Z2EuaAorZ2VuZXJpYy15ICs9IHhvci5oCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZWMyM2EyZi4uYWViMGYxOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNiBAQAogb2JqLSQoQ09ORklHX0FSQ0hfUFVWMykJCSs9IGNsb2NrLm8gaXJxLm8gdGltZS5vCiAKIG9iai0kKENPTkZJR19QVVYzX0dQSU8pCQkrPSBncGlvLm8KLW9iai0kKENPTkZJR19QVVYzX1JUQykJCSs9IHJ0Yy5vCiBvYmotJChDT05GSUdfUFVWM19QV00pCQkrPSBwd20ubwogb2JqLSQoQ09ORklHX1BVVjNfUE0pCQkrPSBwbS5vIHNsZWVwLm8KIG9iai0kKENPTkZJR19ISUJFUk5BVElPTikJKz0gaGliZXJuYXRlLm8gaGliZXJuYXRlX2FzbS5vCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDliZjdmN2EuLjc3ZTQwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zMCw3ICszMCw3IEBACiAJSEVBRF9URVhUX1NFQ1RJT04KIAlJTklUX1RFWFRfU0VDVElPTihQQUdFX1NJWkUpCiAJSU5JVF9EQVRBX1NFQ1RJT04oMTYpCi0JUEVSQ1BVKEwxX0NBQ0hFX0JZVEVTLCBQQUdFX1NJWkUpCisJUEVSQ1BVX1NFQ1RJT04oTDFfQ0FDSEVfQllURVMpCiAJX19pbml0X2VuZCA9IC47CiAKIAlfc3RleHQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCmluZGV4IGNkOGNiZWIuLjdjM2E5NWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vYW1kX2lvbW11X3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2FtZF9pb21tdV90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXUuaD4KQEAgLTE1NCw2ICsxNTUsMTAgQEAKIAlwZGV2ID0gcGNpX2dldF9idXNfYW5kX3Nsb3QoUENJX0JVUyhhbGlhcyksIGFsaWFzICYgMHhmZik7CiAJaWYgKHBkZXYpCiAJCWRldl9kYXRhLT5hbGlhcyA9ICZwZGV2LT5kZXY7CisJZWxzZSB7CisJCWtmcmVlKGRldl9kYXRhKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CiAKIAlhdG9taWNfc2V0KCZkZXZfZGF0YS0+YmluZCwgMCk7CiAKQEAgLTE2Myw2ICsxNjgsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgaW9tbXVfaWdub3JlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJdTE2IGRldmlkLCBhbGlhczsKKworCWRldmlkID0gZ2V0X2RldmljZV9pZChkZXYpOworCWFsaWFzID0gYW1kX2lvbW11X2FsaWFzX3RhYmxlW2RldmlkXTsKKworCW1lbXNldCgmYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0sIDAsIHNpemVvZihzdHJ1Y3QgZGV2X3RhYmxlX2VudHJ5KSk7CisJbWVtc2V0KCZhbWRfaW9tbXVfZGV2X3RhYmxlW2FsaWFzXSwgMCwgc2l6ZW9mKHN0cnVjdCBkZXZfdGFibGVfZW50cnkpKTsKKworCWFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXSA9IE5VTEw7CisJYW1kX2lvbW11X3Jsb29rdXBfdGFibGVbYWxpYXNdID0gTlVMTDsKK30KKwogc3RhdGljIHZvaWQgaW9tbXVfdW5pbml0X2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJa2ZyZWUoZGV2LT5hcmNoZGF0YS5pb21tdSk7CkBAIC0xOTIsNyArMjExLDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXJldCA9IGlvbW11X2luaXRfZGV2aWNlKCZwZGV2LT5kZXYpOwotCQlpZiAocmV0KQorCQlpZiAocmV0ID09IC1FTk9UU1VQUCkKKwkJCWlvbW11X2lnbm9yZV9kZXZpY2UoJnBkZXYtPmRldik7CisJCWVsc2UgaWYgKHJldCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCkBAIC0yMzgzLDYgKzI0MDQsMjMgQEAKIAkuZG1hX3N1cHBvcnRlZCA9IGFtZF9pb21tdV9kbWFfc3VwcG9ydGVkLAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGRldmljZV9kbWFfb3BzX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJdW5zaWduZWQgdW5oYW5kbGVkID0gMDsKKworCWZvcl9lYWNoX3BjaV9kZXYocGRldikgeworCQlpZiAoIWNoZWNrX2RldmljZSgmcGRldi0+ZGV2KSkgeworCQkJdW5oYW5kbGVkICs9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBkZXYtPmRldi5hcmNoZGF0YS5kbWFfb3BzID0gJmFtZF9pb21tdV9kbWFfb3BzOworCX0KKworCXJldHVybiB1bmhhbmRsZWQ7Cit9CisKIC8qCiAgKiBUaGUgZnVuY3Rpb24gd2hpY2ggY2x1ZXMgdGhlIEFNRCBJT01NVSBkcml2ZXIgaW50byBkbWFfb3BzLgogICovCkBAIC0yMzk1LDcgKzI0MzMsNyBAQAogaW50IF9faW5pdCBhbWRfaW9tbXVfaW5pdF9kbWFfb3BzKHZvaWQpCiB7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB1bmhhbmRsZWQ7CiAKIAkvKgogCSAqIGZpcnN0IGFsbG9jYXRlIGEgZGVmYXVsdCBwcm90ZWN0aW9uIGRvbWFpbiBmb3IgZXZlcnkgSU9NTVUgd2UKQEAgLTI0MjEsNyArMjQ1OSwxMSBAQAogCXN3aW90bGIgPSAwOwogCiAJLyogTWFrZSB0aGUgZHJpdmVyIGZpbmFsbHkgdmlzaWJsZSB0byB0aGUgZHJpdmVycyAqLwotCWRtYV9vcHMgPSAmYW1kX2lvbW11X2RtYV9vcHM7CisJdW5oYW5kbGVkID0gZGV2aWNlX2RtYV9vcHNfaW5pdCgpOworCWlmICh1bmhhbmRsZWQgJiYgbWF4X3BmbiA+IE1BWF9ETUEzMl9QRk4pIHsKKwkJLyogVGhlcmUgYXJlIHVuaGFuZGxlZCBkZXZpY2VzIC0gaW5pdGlhbGl6ZSBzd2lvdGxiIGZvciB0aGVtICovCisJCXN3aW90bGIgPSAxOworCX0KIAogCWFtZF9pb21tdV9zdGF0c19pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKaW5kZXggOTE3OWMyMS4uYmZjODQ1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdV9pbml0LmMKQEAgLTczMSw4ICs3MzEsOCBAQAogewogCXU4ICpwID0gKHU4ICopaDsKIAl1OCAqZW5kID0gcCwgZmxhZ3MgPSAwOwotCXUxNiBkZXZfaSwgZGV2aWQgPSAwLCBkZXZpZF9zdGFydCA9IDAsIGRldmlkX3RvID0gMDsKLQl1MzIgZXh0X2ZsYWdzID0gMDsKKwl1MTYgZGV2aWQgPSAwLCBkZXZpZF9zdGFydCA9IDAsIGRldmlkX3RvID0gMDsKKwl1MzIgZGV2X2ksIGV4dF9mbGFncyA9IDA7CiAJYm9vbCBhbGlhcyA9IGZhbHNlOwogCXN0cnVjdCBpdmhkX2VudHJ5ICplOwogCkBAIC04ODcsNyArODg3LDcgQEAKIC8qIEluaXRpYWxpemVzIHRoZSBkZXZpY2UtPmlvbW11IG1hcHBpbmcgZm9yIHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgX19pbml0IGluaXRfaW9tbXVfZGV2aWNlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKLQl1MTYgaTsKKwl1MzIgaTsKIAogCWZvciAoaSA9IGlvbW11LT5maXJzdF9kZXZpY2U7IGkgPD0gaW9tbXUtPmxhc3RfZGV2aWNlOyArK2kpCiAJCXNldF9pb21tdV9mb3JfZGV2aWNlKGlvbW11LCBpKTsKQEAgLTExNzcsNyArMTE3Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGluaXRfZGV2aWNlX3RhYmxlKHZvaWQpCiB7Ci0JdTE2IGRldmlkOworCXUzMiBkZXZpZDsKIAogCWZvciAoZGV2aWQgPSAwOyBkZXZpZCA8PSBhbWRfaW9tbXVfbGFzdF9iZGY7ICsrZGV2aWQpIHsKIAkJc2V0X2Rldl9lbnRyeV9iaXQoZGV2aWQsIERFVl9FTlRSWV9WQUxJRCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggYjk2MWFmOC4uYjkzMzhiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMzkwLDcgKzM5MCw4IEBACiAKIC8qCiAgKiBJZiBtYXNrPTEsIHRoZSBMVlQgZW50cnkgZG9lcyBub3QgZ2VuZXJhdGUgaW50ZXJydXB0cyB3aGlsZSBtYXNrPTAKLSAqIGVuYWJsZXMgdGhlIHZlY3Rvci4gU2VlIGFsc28gdGhlIEJLREdzLgorICogZW5hYmxlcyB0aGUgdmVjdG9yLiBTZWUgYWxzbyB0aGUgQktER3MuIE11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIHByZWVtcHRpb24gZGlzYWJsZWQuCiAgKi8KIAogaW50IHNldHVwX0FQSUNfZWlsdnQodTggb2Zmc2V0LCB1OCB2ZWN0b3IsIHU4IG1zZ190eXBlLCB1OCBtYXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYyBiL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKaW5kZXggNjkwYmM4NC4uOWFlYjc4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXRyZC5oPgogCiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KICNpbmNsdWRlIDxhc20vaXJxX2NvbnRyb2xsZXIuaD4KQEAgLTk4LDYgKzk5LDE2IEBACiAJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKIH0KIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9kdF9zZXR1cF9pbml0cmRfYXJjaCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCk7CisJaW5pdHJkX2VuZCA9ICh1bnNpZ25lZCBsb25nKV9fdmEoZW5kKTsKKwlpbml0cmRfYmVsb3dfc3RhcnRfb2sgPSAxOworfQorI2VuZGlmCisKIHZvaWQgX19pbml0IGFkZF9kdGIodTY0IGRhdGEpCiB7CiAJaW5pdGlhbF9kdGIgPSBkYXRhICsgb2Zmc2V0b2Yoc3RydWN0IHNldHVwX2RhdGEsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggOGQxMjg3OC4uYTNkMGRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yNDUsNyArMjQ1LDYgQEAKIHsKIAlzZXRfdXNlcl9ncyhyZWdzLCAwKTsKIAlyZWdzLT5mcwkJPSAwOwotCXNldF9mcyhVU0VSX0RTKTsKIAlyZWdzLT5kcwkJPSBfX1VTRVJfRFM7CiAJcmVncy0+ZXMJCT0gX19VU0VSX0RTOwogCXJlZ3MtPnNzCQk9IF9fVVNFUl9EUzsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IDZjOWRkOTIuLmNhNmY3YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfNjQuYwpAQCAtMzM4LDcgKzMzOCw2IEBACiAJcmVncy0+Y3MJCT0gX2NzOwogCXJlZ3MtPnNzCQk9IF9zczsKIAlyZWdzLT5mbGFncwkJPSBYODZfRUZMQUdTX0lGOwotCXNldF9mcyhVU0VSX0RTKTsKIAkvKgogCSAqIEZyZWUgdGhlIG9sZCBGUCBhbmQgb3RoZXIgZXh0ZW5kZWQgc3RhdGUKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDMzYTBjMTEuLjlmZDMxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtMjg1LDYgKzI4NSwxOSBAQAogCXBlcl9jcHUoY3B1X3N0YXRlLCBzbXBfcHJvY2Vzc29yX2lkKCkpID0gQ1BVX09OTElORTsKIAl4ODZfcGxhdGZvcm0ubm1pX2luaXQoKTsKIAorCS8qCisJICogV2FpdCB1bnRpbCB0aGUgY3B1IHdoaWNoIGJyb3VnaHQgdGhpcyBvbmUgdXAgbWFya2VkIGl0CisJICogb25saW5lIGJlZm9yZSBlbmFibGluZyBpbnRlcnJ1cHRzLiBJZiB3ZSBkb24ndCBkbyB0aGF0IHRoZW4KKwkgKiB3ZSBjYW4gZW5kIHVwIHdha2luZyB1cCB0aGUgc29mdGlycSB0aHJlYWQgYmVmb3JlIHRoaXMgY3B1CisJICogcmVhY2hlZCB0aGUgYWN0aXZlIHN0YXRlLCB3aGljaCBtYWtlcyB0aGUgc2NoZWR1bGVyIHVuaGFwcHkKKwkgKiBhbmQgc2NoZWR1bGUgdGhlIHNvZnRpcnEgdGhyZWFkIG9uIHRoZSB3cm9uZyBjcHUuIFRoaXMgaXMKKwkgKiBvbmx5IG9ic2VydmFibGUgd2l0aCBmb3JjZWQgdGhyZWFkZWQgaW50ZXJydXB0cywgYnV0IGluCisJICogdGhlb3J5IGl0IGNvdWxkIGFsc28gaGFwcGVuIHcvbyB0aGVtLiBJdCdzIGp1c3Qgd2F5IGhhcmRlcgorCSAqIHRvIGFjaGlldmUuCisJICovCisJd2hpbGUgKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X2FjdGl2ZV9tYXNrKSkKKwkJY3B1X3JlbGF4KCk7CisKIAkvKiBlbmFibGUgbG9jYWwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYyBiL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKaW5kZXggZDZlMjQ3Ny4uNmRmODhjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCkBAIC00NywzOCArNDcsNDAgQEAKICNkZWZpbmUgRHN0REkgICAgICAgKDU8PDEpCS8qIERlc3RpbmF0aW9uIGlzIGluIEVTOihFKURJICovCiAjZGVmaW5lIERzdE1lbTY0ICAgICg2PDwxKQkvKiA2NGJpdCBtZW1vcnkgb3BlcmFuZCAqLwogI2RlZmluZSBEc3RJbW1VQnl0ZSAoNzw8MSkJLyogOC1iaXQgdW5zaWduZWQgaW1tZWRpYXRlIG9wZXJhbmQgKi8KLSNkZWZpbmUgRHN0TWFzayAgICAgKDc8PDEpCisjZGVmaW5lIERzdERYICAgICAgICg4PDwxKQkvKiBEZXN0aW5hdGlvbiBpcyBpbiBEWCByZWdpc3RlciAqLworI2RlZmluZSBEc3RNYXNrICAgICAoMHhmPDwxKQogLyogU291cmNlIG9wZXJhbmQgdHlwZS4gKi8KLSNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDQpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NCkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDQpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NCkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCi0jZGVmaW5lIFNyY01lbTMyICAgICg0PDw0KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KLSNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDQpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NCkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KLSNkZWZpbmUgU3JjT25lICAgICAgKDc8PDQpCS8qIEltcGxpZWQgJzEnICovCi0jZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw0KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLwotI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NCkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KLSNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NCkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KLSNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NCkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLwotI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw0KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCi0jZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDQpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLwotI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw0KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KLSNkZWZpbmUgU3JjTWFzayAgICAgKDB4Zjw8NCkKKyNkZWZpbmUgU3JjTm9uZSAgICAgKDA8PDUpCS8qIE5vIHNvdXJjZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNSZWcgICAgICAoMTw8NSkJLyogUmVnaXN0ZXIgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjTWVtICAgICAgKDI8PDUpCS8qIE1lbW9yeSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNNZW0xNiAgICAoMzw8NSkJLyogTWVtb3J5IG9wZXJhbmQgKDE2LWJpdCkuICovCisjZGVmaW5lIFNyY01lbTMyICAgICg0PDw1KQkvKiBNZW1vcnkgb3BlcmFuZCAoMzItYml0KS4gKi8KKyNkZWZpbmUgU3JjSW1tICAgICAgKDU8PDUpCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1CeXRlICAoNjw8NSkJLyogOC1iaXQgc2lnbi1leHRlbmRlZCBpbW1lZGlhdGUgb3BlcmFuZC4gKi8KKyNkZWZpbmUgU3JjT25lICAgICAgKDc8PDUpCS8qIEltcGxpZWQgJzEnICovCisjZGVmaW5lIFNyY0ltbVVCeXRlICg4PDw1KSAgICAgIC8qIDgtYml0IHVuc2lnbmVkIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworI2RlZmluZSBTcmNJbW1VICAgICAoOTw8NSkgICAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQgKi8KKyNkZWZpbmUgU3JjU0kgICAgICAgKDB4YTw8NSkJLyogU291cmNlIGlzIGluIHRoZSBEUzpSU0kgKi8KKyNkZWZpbmUgU3JjSW1tRkFkZHIgKDB4Yjw8NSkJLyogU291cmNlIGlzIGltbWVkaWF0ZSBmYXIgYWRkcmVzcyAqLworI2RlZmluZSBTcmNNZW1GQWRkciAoMHhjPDw1KQkvKiBTb3VyY2UgaXMgZmFyIGFkZHJlc3MgaW4gbWVtb3J5ICovCisjZGVmaW5lIFNyY0FjYyAgICAgICgweGQ8PDUpCS8qIFNvdXJjZSBBY2N1bXVsYXRvciAqLworI2RlZmluZSBTcmNJbW1VMTYgICAoMHhlPDw1KSAgICAvKiBJbW1lZGlhdGUgb3BlcmFuZCwgdW5zaWduZWQsIDE2IGJpdHMgKi8KKyNkZWZpbmUgU3JjRFggICAgICAgKDB4Zjw8NSkJLyogU291cmNlIGlzIGluIERYIHJlZ2lzdGVyICovCisjZGVmaW5lIFNyY01hc2sgICAgICgweGY8PDUpCiAvKiBHZW5lcmljIE1vZFJNIGRlY29kZS4gKi8KLSNkZWZpbmUgTW9kUk0gICAgICAgKDE8PDgpCisjZGVmaW5lIE1vZFJNICAgICAgICgxPDw5KQogLyogRGVzdGluYXRpb24gaXMgb25seSB3cml0dGVuOyBuZXZlciByZWFkLiAqLwotI2RlZmluZSBNb3YgICAgICAgICAoMTw8OSkKLSNkZWZpbmUgQml0T3AgICAgICAgKDE8PDEwKQotI2RlZmluZSBNZW1BYnMgICAgICAoMTw8MTEpICAgICAgLyogTWVtb3J5IG9wZXJhbmQgaXMgYWJzb2x1dGUgZGlzcGxhY2VtZW50ICovCi0jZGVmaW5lIFN0cmluZyAgICAgICgxPDwxMikgICAgIC8qIFN0cmluZyBpbnN0cnVjdGlvbiAocmVwIGNhcGFibGUpICovCi0jZGVmaW5lIFN0YWNrICAgICAgICgxPDwxMykgICAgIC8qIFN0YWNrIGluc3RydWN0aW9uIChwdXNoL3BvcCkgKi8KLSNkZWZpbmUgR3JvdXBNYXNrICAgKDc8PDE0KSAgICAgLyogT3Bjb2RlIHVzZXMgb25lIG9mIHRoZSBncm91cCBtZWNoYW5pc21zICovCi0jZGVmaW5lIEdyb3VwICAgICAgICgxPDwxNCkgICAgIC8qIEJpdHMgMzo1IG9mIG1vZHJtIGJ5dGUgZXh0ZW5kIG9wY29kZSAqLwotI2RlZmluZSBHcm91cER1YWwgICAoMjw8MTQpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KLSNkZWZpbmUgUHJlZml4ICAgICAgKDM8PDE0KSAgICAgLyogSW5zdHJ1Y3Rpb24gdmFyaWVzIHdpdGggNjYvZjIvZjMgcHJlZml4ICovCi0jZGVmaW5lIFJNRXh0ICAgICAgICg0PDwxNCkgICAgIC8qIE9wY29kZSBleHRlbnNpb24gaW4gTW9kUk0gci9tIGlmIG1vZCA9PSAzICovCi0jZGVmaW5lIFNzZSAgICAgICAgICgxPDwxNykgICAgIC8qIFNTRSBWZWN0b3IgaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgTW92ICAgICAgICAgKDE8PDEwKQorI2RlZmluZSBCaXRPcCAgICAgICAoMTw8MTEpCisjZGVmaW5lIE1lbUFicyAgICAgICgxPDwxMikgICAgICAvKiBNZW1vcnkgb3BlcmFuZCBpcyBhYnNvbHV0ZSBkaXNwbGFjZW1lbnQgKi8KKyNkZWZpbmUgU3RyaW5nICAgICAgKDE8PDEzKSAgICAgLyogU3RyaW5nIGluc3RydWN0aW9uIChyZXAgY2FwYWJsZSkgKi8KKyNkZWZpbmUgU3RhY2sgICAgICAgKDE8PDE0KSAgICAgLyogU3RhY2sgaW5zdHJ1Y3Rpb24gKHB1c2gvcG9wKSAqLworI2RlZmluZSBHcm91cE1hc2sgICAoNzw8MTUpICAgICAvKiBPcGNvZGUgdXNlcyBvbmUgb2YgdGhlIGdyb3VwIG1lY2hhbmlzbXMgKi8KKyNkZWZpbmUgR3JvdXAgICAgICAgKDE8PDE1KSAgICAgLyogQml0cyAzOjUgb2YgbW9kcm0gYnl0ZSBleHRlbmQgb3Bjb2RlICovCisjZGVmaW5lIEdyb3VwRHVhbCAgICgyPDwxNSkgICAgIC8qIEFsdGVybmF0ZSBkZWNvZGluZyBvZiBtb2QgPT0gMyAqLworI2RlZmluZSBQcmVmaXggICAgICAoMzw8MTUpICAgICAvKiBJbnN0cnVjdGlvbiB2YXJpZXMgd2l0aCA2Ni9mMi9mMyBwcmVmaXggKi8KKyNkZWZpbmUgUk1FeHQgICAgICAgKDQ8PDE1KSAgICAgLyogT3Bjb2RlIGV4dGVuc2lvbiBpbiBNb2RSTSByL20gaWYgbW9kID09IDMgKi8KKyNkZWZpbmUgU3NlICAgICAgICAgKDE8PDE4KSAgICAgLyogU1NFIFZlY3RvciBpbnN0cnVjdGlvbiAqLwogLyogTWlzYyBmbGFncyAqLwogI2RlZmluZSBQcm90ICAgICAgICAoMTw8MjEpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjVUQgaWYgbm90IGluIHByb3QtbW9kZSAqLwogI2RlZmluZSBWZW5kb3JTcGVjaWZpYyAoMTw8MjIpIC8qIFZlbmRvciBzcGVjaWZpYyBpbnN0cnVjdGlvbiAqLwpAQCAtMzE1NCw4ICszMTU2LDggQEAKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbSwgZW1faW11bF8zb3ApLAogCUkoU3JjSW1tQnl0ZSB8IE1vdiB8IFN0YWNrLCBlbV9wdXNoKSwKIAlJKERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgU3JjMkltbUJ5dGUsIGVtX2ltdWxfM29wKSwKLQlEMmJ2SVAoRHN0REkgfCBNb3YgfCBTdHJpbmcsIGlucywgY2hlY2tfcGVybV9pbiksIC8qIGluc2IsIGluc3cvaW5zZCAqLwotCUQyYnZJUChTcmNTSSB8IEltcGxpY2l0T3BzIHwgU3RyaW5nLCBvdXRzLCBjaGVja19wZXJtX291dCksIC8qIG91dHNiLCBvdXRzdy9vdXRzZCAqLworCUQyYnZJUChEc3RESSB8IFNyY0RYIHwgTW92IHwgU3RyaW5nLCBpbnMsIGNoZWNrX3Blcm1faW4pLCAvKiBpbnNiLCBpbnN3L2luc2QgKi8KKwlEMmJ2SVAoU3JjU0kgfCBEc3REWCB8IFN0cmluZywgb3V0cywgY2hlY2tfcGVybV9vdXQpLCAvKiBvdXRzYiwgb3V0c3cvb3V0c2QgKi8KIAkvKiAweDcwIC0gMHg3RiAqLwogCVgxNihEKFNyY0ltbUJ5dGUpKSwKIAkvKiAweDgwIC0gMHg4NyAqLwpAQCAtMzIxMiw4ICszMjE0LDggQEAKIAkvKiAweEU4IC0gMHhFRiAqLwogCUQoU3JjSW1tIHwgU3RhY2spLCBEKFNyY0ltbSB8IEltcGxpY2l0T3BzKSwKIAlEKFNyY0ltbUZBZGRyIHwgTm82NCksIEQoU3JjSW1tQnl0ZSB8IEltcGxpY2l0T3BzKSwKLQlEMmJ2SVAoU3JjTm9uZSB8IERzdEFjYywgICAgIGluLCAgY2hlY2tfcGVybV9pbiksCi0JRDJidklQKFNyY0FjYyB8IEltcGxpY2l0T3BzLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKKwlEMmJ2SVAoU3JjRFggfCBEc3RBY2MsIGluLCAgY2hlY2tfcGVybV9pbiksCisJRDJidklQKFNyY0FjYyB8IERzdERYLCBvdXQsIGNoZWNrX3Blcm1fb3V0KSwKIAkvKiAweEYwIC0gMHhGNyAqLwogCU4sIERJKEltcGxpY2l0T3BzLCBpY2VicCksIE4sIE4sCiAJREkoSW1wbGljaXRPcHMgfCBQcml2LCBobHQpLCBEKEltcGxpY2l0T3BzKSwKQEAgLTM2MTMsNiArMzYxNSwxMiBAQAogCQltZW1vcC5ieXRlcyA9IGMtPm9wX2J5dGVzICsgMjsKIAkJZ290byBzcmNtZW1fY29tbW9uOwogCQlicmVhazsKKwljYXNlIFNyY0RYOgorCQljLT5zcmMudHlwZSA9IE9QX1JFRzsKKwkJYy0+c3JjLmJ5dGVzID0gMjsKKwkJYy0+c3JjLmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPnNyYyk7CisJCWJyZWFrOwogCX0KIAogCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQpAQCAtMzY4Miw2ICszNjkwLDEyIEBACiAJCWMtPmRzdC5hZGRyLm1lbS5zZWcgPSBWQ1BVX1NSRUdfRVM7CiAJCWMtPmRzdC52YWwgPSAwOwogCQlicmVhazsKKwljYXNlIERzdERYOgorCQljLT5kc3QudHlwZSA9IE9QX1JFRzsKKwkJYy0+ZHN0LmJ5dGVzID0gMjsKKwkJYy0+ZHN0LmFkZHIucmVnID0gJmMtPnJlZ3NbVkNQVV9SRUdTX1JEWF07CisJCWZldGNoX3JlZ2lzdGVyX29wZXJhbmQoJmMtPmRzdCk7CisJCWJyZWFrOwogCWNhc2UgSW1wbGljaXRPcHM6CiAJCS8qIFNwZWNpYWwgaW5zdHJ1Y3Rpb25zIGRvIHRoZWlyIG93biBvcGVyYW5kIGRlY29kaW5nLiAqLwogCWRlZmF1bHQ6CkBAIC00MDI3LDcgKzQwNDEsNiBAQAogCQlicmVhazsKIAljYXNlIDB4ZWM6IC8qIGluIGFsLGR4ICovCiAJY2FzZSAweGVkOiAvKiBpbiAoZS9yKWF4LGR4ICovCi0JCWMtPnNyYy52YWwgPSBjLT5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWRvX2lvX2luOgogCQlpZiAoIXBpb19pbl9lbXVsYXRlZChjdHh0LCBvcHMsIGMtPmRzdC5ieXRlcywgYy0+c3JjLnZhbCwKIAkJCQkgICAgICZjLT5kc3QudmFsKSkKQEAgLTQwMzUsNyArNDA0OCw2IEBACiAJCWJyZWFrOwogCWNhc2UgMHhlZTogLyogb3V0IGR4LGFsICovCiAJY2FzZSAweGVmOiAvKiBvdXQgZHgsKGUvcilheCAqLwotCQljLT5kc3QudmFsID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAlkb19pb19vdXQ6CiAJCW9wcy0+cGlvX291dF9lbXVsYXRlZChjdHh0LCBjLT5zcmMuYnl0ZXMsIGMtPmRzdC52YWwsCiAJCQkJICAgICAgJmMtPnNyYy52YWwsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfYW1kLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYwppbmRleCA5ZmQ4YTU2Li45Y2JiNzEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9tb2RlbF9hbWQuYwpAQCAtNjA5LDE2ICs2MDksMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoaXMgcnVucyBvbmx5IG9uIHRoZSBjdXJyZW50IGNwdS4gV2UgdHJ5IHRvIGZpbmQgYW4gTFZUIG9mZnNldCBhbmQKKyAqIHNldHVwIHRoZSBsb2NhbCBBUElDLiBGb3IgdGhpcyB3ZSBtdXN0IGRpc2FibGUgcHJlZW1wdGlvbi4gT24KKyAqIHN1Y2Nlc3Mgd2UgaW5pdGlhbGl6ZSBhbGwgbm9kZXMgd2l0aCB0aGlzIG9mZnNldC4gVGhpcyB1cGRhdGVzIHRoZW4KKyAqIHRoZSBvZmZzZXQgaW4gdGhlIElCU19DVEwgcGVyLW5vZGUgbXNyLiBUaGUgcGVyLWNvcmUgQVBJQyBzZXR1cCBvZgorICogdGhlIElCUyBpbnRlcnJ1cHQgdmVjdG9yIGlzIGNhbGxlZCBmcm9tIG9wX2FtZF9zZXR1cF9jdHJzKCkvb3BfLQorICogYW1kX2NwdV9zaHV0ZG93bigpIHVzaW5nIHRoZSBuZXcgb2Zmc2V0LgorICovCiBzdGF0aWMgaW50IGZvcmNlX2lic19laWx2dF9zZXR1cCh2b2lkKQogewogCWludCBvZmZzZXQ7CiAJaW50IHJldDsKIAotCS8qCi0JICogZmluZCB0aGUgbmV4dCBmcmVlIGF2YWlsYWJsZSBFSUxWVCBlbnRyeSwgc2tpcCBvZmZzZXQgMCwKLQkgKiBwaW4gc2VhcmNoIHRvIHRoaXMgY3B1Ci0JICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7CisJLyogZmluZCB0aGUgbmV4dCBmcmVlIGF2YWlsYWJsZSBFSUxWVCBlbnRyeSwgc2tpcCBvZmZzZXQgMCAqLwogCWZvciAob2Zmc2V0ID0gMTsgb2Zmc2V0IDwgQVBJQ19FSUxWVF9OUl9NQVg7IG9mZnNldCsrKSB7CiAJCWlmIChnZXRfZWlsdnQob2Zmc2V0KSkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYyBiL2FyY2gveDg2L3hlbi9tdWx0aWNhbGxzLmMKaW5kZXggOGJmZjdlNy4uMWIyYjczZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL211bHRpY2FsbHMuYworKysgYi9hcmNoL3g4Ni94ZW4vbXVsdGljYWxscy5jCkBAIC0xODksMTAgKzE4OSwxMCBAQAogCXVuc2lnbmVkIGFyZ2lkeCA9IHJvdW5kdXAoYi0+YXJnaWR4LCBzaXplb2YodTY0KSk7CiAKIAlCVUdfT04ocHJlZW1wdGlibGUoKSk7Ci0JQlVHX09OKGItPmFyZ2lkeCA+IE1DX0FSR1MpOworCUJVR19PTihiLT5hcmdpZHggPj0gTUNfQVJHUyk7CiAKIAlpZiAoYi0+bWNpZHggPT0gTUNfQkFUQ0ggfHwKLQkgICAgKGFyZ2lkeCArIGFyZ3MpID4gTUNfQVJHUykgeworCSAgICAoYXJnaWR4ICsgYXJncykgPj0gTUNfQVJHUykgewogCQltY19zdGF0c19mbHVzaChiLT5tY2lkeCA9PSBNQ19CQVRDSCA/IEZMX1NMT1RTIDogRkxfQVJHUyk7CiAJCXhlbl9tY19mbHVzaCgpOwogCQlhcmdpZHggPSByb3VuZHVwKGItPmFyZ2lkeCwgc2l6ZW9mKHU2NCkpOwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJcmV0LmFyZ3MgPSAmYi0+YXJnc1thcmdpZHhdOwogCWItPmFyZ2lkeCA9IGFyZ2lkeCArIGFyZ3M7CiAKLQlCVUdfT04oYi0+YXJnaWR4ID4gTUNfQVJHUyk7CisJQlVHX09OKGItPmFyZ2lkeCA+PSBNQ19BUkdTKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIHJldCA9IHsgTlVMTCwgTlVMTCB9OwogCiAJQlVHX09OKHByZWVtcHRpYmxlKCkpOwotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCiAJaWYgKGItPm1jaWR4ID09IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMjQsMTQgKzIyNCwxNCBAQAogCWlmIChiLT5lbnRyaWVzW2ItPm1jaWR4IC0gMV0ub3AgIT0gb3ApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKGItPmFyZ2lkeCArIHNpemUpID4gTUNfQVJHUykKKwlpZiAoKGItPmFyZ2lkeCArIHNpemUpID49IE1DX0FSR1MpCiAJCXJldHVybiByZXQ7CiAKIAlyZXQubWMgPSAmYi0+ZW50cmllc1tiLT5tY2lkeCAtIDFdOwogCXJldC5hcmdzID0gJmItPmFyZ3NbYi0+YXJnaWR4XTsKIAliLT5hcmdpZHggKz0gc2l6ZTsKIAotCUJVR19PTihiLT5hcmdpZHggPiBNQ19BUkdTKTsKKwlCVUdfT04oYi0+YXJnaWR4ID49IE1DX0FSR1MpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggZGZiNmU5ZC4uN2YwOTlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTI4MDIsMTAgKzI4MDIsMTEgQEAKIAl9CiAKIAkvKgotCSAqIFNvbWUgY29udHJvbGxlcnMgY2FuJ3QgYmUgZnJvemVuIHZlcnkgd2VsbCBhbmQgbWF5IHNldAotCSAqIHNwdXJ1aW91cyBlcnJvciBjb25kaXRpb25zIGR1cmluZyByZXNldC4gIENsZWFyIGFjY3VtdWxhdGVkCi0JICogZXJyb3IgaW5mb3JtYXRpb24uICBBcyByZXNldCBpcyB0aGUgZmluYWwgcmVjb3ZlcnkgYWN0aW9uLAotCSAqIG5vdGhpbmcgaXMgbG9zdCBieSBkb2luZyB0aGlzLgorCSAqIFNvbWUgY29udHJvbGxlcnMgY2FuJ3QgYmUgZnJvemVuIHZlcnkgd2VsbCBhbmQgbWF5IHNldCBzcHVyaW91cworCSAqIGVycm9yIGNvbmRpdGlvbnMgZHVyaW5nIHJlc2V0LiAgQ2xlYXIgYWNjdW11bGF0ZWQgZXJyb3IKKwkgKiBpbmZvcm1hdGlvbiBhbmQgcmUtdGhhdyB0aGUgcG9ydCBpZiBmcm96ZW4uICBBcyByZXNldCBpcyB0aGUKKwkgKiBmaW5hbCByZWNvdmVyeSBhY3Rpb24gYW5kIHdlIGNyb3NzIGNoZWNrIGxpbmsgb25saW5lbmVzcyBhZ2FpbnN0CisJICogZGV2aWNlIGNsYXNzaWZpY2F0aW9uIGxhdGVyLCBubyBob3RwbHVnIGV2ZW50IGlzIGxvc3QgYnkgdGhpcy4KIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmbGluay0+ZWhfaW5mbywgMCwgc2l6ZW9mKGxpbmstPmVoX2luZm8pKTsKQEAgLTI4MTQsNiArMjgxNSw5IEBACiAJYXAtPnBmbGFncyAmPSB+QVRBX1BGTEFHX0VIX1BFTkRJTkc7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsaW5rLT5hcC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKQorCQlhdGFfZWhfdGhhd19wb3J0KGFwKTsKKwogCS8qCiAJICogTWFrZSBzdXJlIG9ubGluZW5lc3MgYW5kIGNsYXNzaWZpY2F0aW9uIHJlc3VsdCBjb3JyZXNwb25kLgogCSAqIEhvdHBsdWcgY291bGQgaGF2ZSBoYXBwZW5lZCBkdXJpbmcgcmVzZXQgYW5kIHNvbWUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwppbmRleCBjMGRkMDlkLi5lYWE4YTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2Nsb2NrX29wcy5jCkBAIC0yOTEsNyArMjkxLDcgQEAKIHsKIAlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOwotCWNoYXIgKmNvbl9pZDsKKwljaGFyICoqY29uX2lkOwogCWludCBlcnJvcjsKIAogCWRldl9kYmcoZGV2LCAiJXMoKSAlbGRcbiIsIF9fZnVuY19fLCBhY3Rpb24pOwpAQCAtMzA5LDggKzMwOSw4IEBACiAKIAkJZGV2LT5wd3JfZG9tYWluID0gY2xrbmItPnB3cl9kb21haW47CiAJCWlmIChjbGtuYi0+Y29uX2lkc1swXSkgewotCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkc1swXTsgKmNvbl9pZDsgY29uX2lkKyspCi0JCQkJcG1fcnVudGltZV9jbGtfYWRkKGRldiwgY29uX2lkKTsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHM7ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsICpjb25faWQpOwogCQl9IGVsc2UgewogCQkJcG1fcnVudGltZV9jbGtfYWRkKGRldiwgTlVMTCk7CiAJCX0KQEAgLTM4MCw3ICszODAsNyBAQAogewogCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Ci0JY2hhciAqY29uX2lkOworCWNoYXIgKipjb25faWQ7CiAKIAlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKIApAQCAtMzg5LDE2ICszODksMTYgQEAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQlVTX05PVElGWV9BRERfREVWSUNFOgogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCWVuYWJsZV9jbG9jayhkZXYsIGNvbl9pZCk7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQllbmFibGVfY2xvY2soZGV2LCAqY29uX2lkKTsKIAkJfSBlbHNlIHsKIAkJCWVuYWJsZV9jbG9jayhkZXYsIE5VTEwpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOgogCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKLQkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQotCQkJCWRpc2FibGVfY2xvY2soZGV2LCBjb25faWQpOworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkczsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJZGlzYWJsZV9jbG9jayhkZXYsICpjb25faWQpOwogCQl9IGVsc2UgewogCQkJZGlzYWJsZV9jbG9jayhkZXYsIE5VTEwpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwppbmRleCBmMDMyZTQ0Li5iZmU3MjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKQEAgLTEwOCw3ICsxMDgsOSBAQAogICovCiB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2liZnRfcmVnaW9uKHVuc2lnbmVkIGxvbmcgKnNpemVwKQogeworI2lmZGVmIENPTkZJR19BQ1BJCiAJaW50IGk7CisjZW5kaWYKIAlpYmZ0X2FkZHIgPSBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0FDUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggNGE3ZjYzMS4uMjk2NzAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTg3LDMyICs4NywyMCBAQAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBmdW5jdGlvbmFsaXR5IG9mIElUODc2MUUgc3VwZXIgSS9PIGNoaXAuCiAKIGNvbmZpZyBHUElPX0VYWU5PUzQKLQlib29sICJTYW1zdW5nIEV4eW5vczQgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9FWFlOT1M0MjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIEV4eW5vczQgc2VyaWVzIFNvQ3MgR1BJTyBsaWJyYXJ5CisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQ1BVX0VYWU5PUzQyMTAKIAogY29uZmlnIEdQSU9fUExBVF9TQU1TVU5HCi0JYm9vbCAiU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeSBzdXBwb3J0IgotCWRlZmF1bHQgeSBpZiBTQU1TVU5HX0dQSU9MSUJfNEJJVAotCWRlcGVuZHMgb24gQVJNCi0JaGVscAotCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgU2Ftc3VuZyBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNBTVNVTkdfR1BJT0xJQl80QklUCiAKIGNvbmZpZyBHUElPX1M1UEMxMDAKLQlib29sICJTYW1zdW5nIFM1UEMxMDAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBDMTAwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UEMxMDAgU29DcyBHUElPIGxpYnJhcnkKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBDUFVfUzVQQzEwMAogCiBjb25maWcgR1BJT19TNVBWMjEwCi0JYm9vbCAiU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgR1BJTyBsaWJyYXJ5IHN1cHBvcnQiCi0JZGVmYXVsdCB5IGlmIENQVV9TNVBWMjEwCi0JZGVwZW5kcyBvbiBBUk0KLQloZWxwCi0JICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBTYW1zdW5nIFM1UFYyMTAvUzVQQzExMCBTb0NzIEdQSU8gbGlicmFyeQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIENQVV9TNVBWMjEwCiAKIGNvbmZpZyBHUElPX1BMMDYxCiAJYm9vbCAiUHJpbWVDZWxsIFBMMDYxIEdQSU8gc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWV4eW5vczQuYwppbmRleCBkNTRjYTZhLi45MDI5ODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1leHlub3M0LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZXh5bm9zNC5jCkBAIC0yMSwxNiArMjEsMzcgQEAKICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CiAKK2ludCBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJaWYgKHB1bGwgPT0gUzNDX0dQSU9fUFVMTF9VUCkKKwkJcHVsbCA9IDM7CisKKwlyZXR1cm4gczNjX2dwaW9fc2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmLCBwdWxsKTsKK30KKworczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCXVuc2lnbmVkIGludCBvZmYpCit7CisJczNjX2dwaW9fcHVsbF90IHB1bGw7CisKKwlwdWxsID0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24oY2hpcCwgb2ZmKTsKKwlpZiAocHVsbCA9PSAzKQorCQlwdWxsID0gUzNDX0dQSU9fUFVMTF9VUDsKKworCXJldHVybiBwdWxsOworfQorCiBzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvX2NmZyA9IHsKIAkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF9leHlub3M0LAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfZXh5bm9zNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fY2ZnX25vaW50ID0gewogCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKLQkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKLQkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX2V4eW5vczQsCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF9leHlub3M0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW5vbWFkaWsuYwppbmRleCA0OTYxZWY5Li4yYzIxMmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1ub21hZGlrLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbm9tYWRpay5jCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LDIwMDkgU1RNaWNyb2VsZWN0cm9uaWNzCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxlc3NhbmRybyBSdWJpbmkgPHJ1YmluaUB1bmlwdi5pdD4KICAqICAgUmV3cml0dGVuIGJhc2VkIG9uIHdvcmsgYnkgUHJhZnVsbGEgV0FEQVNLQVIgPHByYWZ1bGxhLndhZGFza2FyQHN0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW51cyBXYWxsZWlqIDxsaW51cy53YWxsZWlqQGxpbmFyby5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC00OSw2ICs1MCw3IEBACiAJdTMyICgqZ2V0X3NlY29uZGFyeV9zdGF0dXMpKHVuc2lnbmVkIGludCBiYW5rKTsKIAl2b2lkICgqc2V0X2lvZm9yY2UpKGJvb2wgZW5hYmxlKTsKIAlzcGlubG9ja190IGxvY2s7CisJYm9vbCBzbGVlcG1vZGU7CiAJLyogS2VlcCB0cmFjayBvZiBjb25maWd1cmVkIGVkZ2VzICovCiAJdTMyIGVkZ2VfcmlzaW5nOwogCXUzMiBlZGdlX2ZhbGxpbmc7CkBAIC0zOTMsMTQgKzM5NSwyNSBAQAogICogQGdwaW86IHBpbiBudW1iZXIKICAqIEBtb2RlOiBOTUtfR1BJT19TTFBNX0lOUFVUIG9yIE5NS19HUElPX1NMUE1fTk9DSEFOR0UsCiAgKgotICogU2V0cyB0aGUgc2xlZXAgbW9kZSBvZiBhIHBpbi4gIElmIEBtb2RlIGlzIE5NS19HUElPX1NMUE1fSU5QVVQsIHRoZSBwaW4gaXMKLSAqIGNoYW5nZWQgdG8gYW4gaW5wdXQgKHdpdGggcHVsbHVwL2Rvd24gZW5hYmxlZCkgaW4gc2xlZXAgYW5kIGRlZXAgc2xlZXAuICBJZgotICogQG1vZGUgaXMgTk1LX0dQSU9fU0xQTV9OT0NIQU5HRSwgdGhlIHBpbiByZW1haW5zIGluIHRoZSBzdGF0ZSBpdCB3YXMKLSAqIGNvbmZpZ3VyZWQgZXZlbiB3aGVuIGluIHNsZWVwIGFuZCBkZWVwIHNsZWVwLgorICogVGhpcyByZWdpc3RlciBpcyBhY3R1YWxseSBpbiB0aGUgcGlubXV4IGxheWVyLCBub3QgdGhlIEdQSU8gYmxvY2sgaXRzZWxmLgorICogVGhlIEdQSU8xQl9TTFBNIHJlZ2lzdGVyIGRlZmluZXMgdGhlIEdQSU8gbW9kZSB3aGVuIFNMRUVQL0RFRVAtU0xFRVAKKyAqIG1vZGUgaXMgZW50ZXJlZCAoaS5lLiB3aGVuIHNpZ25hbCBJT0ZPUkNFIGlzIEhJR0ggYnkgdGhlIHBsYXRmb3JtIGNvZGUpLgorICogRWFjaCBHUElPIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIGZvcmNlZCBpbnRvIEdQSU8gbW9kZSB3aGVuIElPRk9SQ0UgaXMKKyAqIEhJR0gsIG92ZXJyaWRpbmcgdGhlIG5vcm1hbCBzZXR0aW5nIGRlZmluZWQgYnkgR1BJT19BRlNFTHggcmVnaXN0ZXJzLgorICogV2hlbiBJT0ZPUkNFIHJldHVybnMgTE9XIChieSBzb2Z0d2FyZSwgYWZ0ZXIgU0xFRVAvREVFUC1TTEVFUCBleGl0KSwKKyAqIHRoZSBHUElPcyByZXR1cm4gdG8gdGhlIG5vcm1hbCBzZXR0aW5nIGRlZmluZWQgYnkgR1BJT19BRlNFTHggcmVnaXN0ZXJzLgogICoKLSAqIE9uIERCODUwMHYyIG9ud2FyZHMsIHRoaXMgc2V0dGluZyBsb3NlcyB0aGUgcHJldmlvdXMgbWVhbmluZyBhbmQgaW5zdGVhZAotICogaW5kaWNhdGVzIGlmIHdha2V1cCBkZXRlY3Rpb24gaXMgZW5hYmxlZCBvbiB0aGUgcGluLiAgTm90ZSB0aGF0Ci0gKiBlbmFibGVfaXJxX3dha2UoKSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5hYmxlIHdha2V1cCBkZXRlY3Rpb24uCisgKiBJZiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX0lOUFVULCB0aGUgY29ycmVzcG9uZGluZyBHUElPIGlzIHN3aXRjaGVkIHRvIEdQSU8KKyAqIG1vZGUgd2hlbiBzaWduYWwgSU9GT1JDRSBpcyBISUdIIChpLmUuIHdoZW4gU0xFRVAvREVFUC1TTEVFUCBtb2RlIGlzCisgKiBlbnRlcmVkKSByZWdhcmRsZXNzIG9mIHRoZSBhbHRmdW5jdGlvbiBzZWxlY3RlZC4gQWxzbyB3YWtlLXVwIGRldGVjdGlvbiBpcworICogRU5BQkxFRC4KKyAqCisgKiBJZiBAbW9kZSBpcyBOTUtfR1BJT19TTFBNX05PQ0hBTkdFLCB0aGUgY29ycmVzcG9uZGluZyBHUElPIHJlbWFpbnMKKyAqIGNvbnRyb2xsZWQgYnkgTk1LX0dQSU9fREFUQywgTk1LX0dQSU9fREFUUywgTk1LX0dQSU9fRElSLCBOTUtfR1BJT19QRElTCisgKiAoZm9yIGFsdGZ1bmN0aW9uIEdQSU8pIG9yIHJlc3BlY3RpdmUgb24tY2hpcCBwZXJpcGhlcmFscyAoZm9yIG90aGVyCisgKiBhbHRmdW5jcykgd2hlbiBJT0ZPUkNFIGlzIEhJR0guIEFsc28gd2FrZS11cCBkZXRlY3Rpb24gRElTQUJMRUQuCisgKgorICogTm90ZSB0aGF0IGVuYWJsZV9pcnFfd2FrZSgpIHdpbGwgYXV0b21hdGljYWxseSBlbmFibGUgd2FrZXVwIGRldGVjdGlvbi4KICAqLwogaW50IG5ta19ncGlvX3NldF9zbHBtKGludCBncGlvLCBlbnVtIG5ta19ncGlvX3NscG0gbW9kZSkKIHsKQEAgLTU1MSw2ICs1NjQsMTIgQEAKIHN0YXRpYyB2b2lkIF9fbm1rX2dwaW9fc2V0X3dha2Uoc3RydWN0IG5ta19ncGlvX2NoaXAgKm5ta19jaGlwLAogCQkJCWludCBncGlvLCBib29sIG9uKQogeworCWlmIChubWtfY2hpcC0+c2xlZXBtb2RlKSB7CisJCV9fbm1rX2dwaW9fc2V0X3NscG0obm1rX2NoaXAsIGdwaW8gLSBubWtfY2hpcC0+Y2hpcC5iYXNlLAorCQkJCSAgICBvbiA/IE5NS19HUElPX1NMUE1fV0FLRVVQX0VOQUJMRQorCQkJCSAgICA6IE5NS19HUElPX1NMUE1fV0FLRVVQX0RJU0FCTEUpOworCX0KKwogCV9fbm1rX2dwaW9faXJxX21vZGlmeShubWtfY2hpcCwgZ3BpbywgV0FLRSwgb24pOwogfQogCkBAIC05MDEsNyArOTIwLDcgQEAKIAkJd3JpdGVsKGNoaXAtPmZ3aW1zYyAmIGNoaXAtPnJlYWxfd2FrZSwKIAkJICAgICAgIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19GV0lNU0MpOwogCi0JCWlmIChjcHVfaXNfdTg1MDB2MigpKSB7CisJCWlmIChjaGlwLT5zbGVlcG1vZGUpIHsKIAkJCWNoaXAtPnNscG0gPSByZWFkbChjaGlwLT5hZGRyICsgTk1LX0dQSU9fU0xQQyk7CiAKIAkJCS8qIDAgLT4gd2FrZXVwIGVuYWJsZSAqLwpAQCAtOTIzLDcgKzk0Miw3IEBACiAJCXdyaXRlbChjaGlwLT5yd2ltc2MsIGNoaXAtPmFkZHIgKyBOTUtfR1BJT19SV0lNU0MpOwogCQl3cml0ZWwoY2hpcC0+ZndpbXNjLCBjaGlwLT5hZGRyICsgTk1LX0dQSU9fRldJTVNDKTsKIAotCQlpZiAoY3B1X2lzX3U4NTAwdjIoKSkKKwkJaWYgKGNoaXAtPnNsZWVwbW9kZSkKIAkJCXdyaXRlbChjaGlwLT5zbHBtLCBjaGlwLT5hZGRyICsgTk1LX0dQSU9fU0xQQyk7CiAJfQogfQpAQCAtMTAxMCw2ICsxMDI5LDcgQEAKIAlubWtfY2hpcC0+c2Vjb25kYXJ5X3BhcmVudF9pcnEgPSBzZWNvbmRhcnlfaXJxOwogCW5ta19jaGlwLT5nZXRfc2Vjb25kYXJ5X3N0YXR1cyA9IHBkYXRhLT5nZXRfc2Vjb25kYXJ5X3N0YXR1czsKIAlubWtfY2hpcC0+c2V0X2lvZm9yY2UgPSBwZGF0YS0+c2V0X2lvZm9yY2U7CisJbm1rX2NoaXAtPnNsZWVwbW9kZSA9IHBkYXRhLT5zdXBwb3J0c19zbGVlcG1vZGU7CiAJc3Bpbl9sb2NrX2luaXQoJm5ta19jaGlwLT5sb2NrKTsKIAogCWNoaXAgPSAmbm1rX2NoaXAtPmNoaXA7CkBAIC0xMDY1LDUgKzEwODUsMyBAQAogTU9EVUxFX0FVVEhPUigiUHJhZnVsbGEgV0FEQVNLQVIgYW5kIEFsZXNzYW5kcm8gUnViaW5pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk5vbWFkaWsgR1BJTyBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKaW5kZXggNmM1MTE5MS4uMDFmNzRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwpAQCAtNDMyLDcgKzQzMiw2IEBACiB7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gYmFuay0+YmFzZTsKIAl1MzIgZ3Bpb19iaXQgPSAxIDw8IGdwaW87Ci0JdTMyIHZhbDsKIAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0xFVkVMREVURUNUMCwgZ3Bpb19iaXQsCkBAIC00NTUsMTUgKzQ1NCw4IEBACiAJfQogCWlmIChsaWtlbHkoIShiYW5rLT5ub25fd2FrZXVwX2dwaW9zICYgZ3Bpb19iaXQpKSkgewogCQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJCWlmICh0cmlnZ2VyICE9IDApCi0JCQkJX19yYXdfd3JpdGVsKDEgPDwgZ3BpbywgYmFuay0+YmFzZSsKLQkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCWVsc2UgewotCQkJCXZhbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwotCQkJCQkJCU9NQVA0X0dQSU9fSVJRV0FLRU4wKTsKLQkJCQlfX3Jhd193cml0ZWwodmFsICYgKH4oMSA8PCBncGlvKSksIGJhbmstPmJhc2UgKwotCQkJCQkJCSBPTUFQNF9HUElPX0lSUVdBS0VOMCk7Ci0JCQl9CisJCQlNT0RfUkVHX0JJVChPTUFQNF9HUElPX0lSUVdBS0VOMCwgZ3Bpb19iaXQsCisJCQkJdHJpZ2dlciAhPSAwKTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBHUElPIHdha2V1cCByZXF1ZXN0IGNhbiBvbmx5IGJlIGdlbmVyYXRlZCBvbiBlZGdlCkBAIC0xMTM0LDggKzExMjYsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQgZ3BpbyA9IGQtPmlycSAtIElIX0dQSU9fQkFTRTsKIAlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJX3Jlc2V0X2dwaW8oYmFuaywgZ3Bpbyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQpAQCAtMTE1MCw5ICsxMTQ1LDEyIEBACiB7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBkLT5pcnEgLSBJSF9HUElPX0JBU0U7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFuay0+bG9jaywgZmxhZ3MpOwogCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMCk7CiAJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIElSUV9UWVBFX05PTkUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZ3Bpb191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKQEAgLTExNjEsNyArMTE1OSw5IEBACiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXVuc2lnbmVkIGludCBpcnFfbWFzayA9IDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3Bpbyk7CiAJdTMyIHRyaWdnZXIgPSBpcnFkX2dldF90cmlnZ2VyX3R5cGUoZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJaWYgKHRyaWdnZXIpCiAJCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCB0cmlnZ2VyKTsKIApAQCAtMTE3Myw2ICsxMTczLDcgQEAKIAl9CiAKIAlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDEpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewpAQCAtMTUyNCw3ICsxNTI1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dwaW9fY2hpcF9pbml0KHN0cnVjdCBncGlvX2JhbmsgKmJhbmspCitzdGF0aWMgdm9pZCBfX2RldmluaXQgb21hcF9ncGlvX2NoaXBfaW5pdChzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rKQogewogCWludCBqOwogCXN0YXRpYyBpbnQgZ3BpbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggNTFjMjI1Ny4uNGQ0NjQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCXNlcV9wcmludGYobSwgIiAgSU5TVFBNOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0cG0pOwogCXNlcV9wcmludGYobSwgIiAgc2Vxbm86IDB4JTA4eFxuIiwgZXJyb3ItPnNlcW5vKTsKIAotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3M7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICBmZW5jZVslZF0gPSAlMDhsbHhcbiIsIGksIGVycm9yLT5mZW5jZVtpXSk7CiAKIAlpZiAoZXJyb3ItPmFjdGl2ZV9ibykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGVlNjYwMzUuLmY2M2VlMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtNzE2LDYgKzcxNiw3IEBACiAJc3RydWN0IGludGVsX2ZiZGV2ICpmYmRldjsKIAogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmJyb2FkY2FzdF9yZ2JfcHJvcGVydHk7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7CiAKIAlhdG9taWNfdCBmb3JjZXdha2VfY291bnQ7CiB9IGRybV9pOTE1X3ByaXZhdGVfdDsKQEAgLTkwOSwxMyArOTEwLDYgQEAKIAl9IG1tOwogfTsKIAotZW51bSBpbnRlbF9jaGlwX2ZhbWlseSB7Ci0JQ0hJUF9JOFhYID0gMHgwMSwKLQlDSElQX0k5WFggPSAweDAyLAotCUNISVBfSTkxNSA9IDB4MDQsCi0JQ0hJUF9JOTY1ID0gMHgwOCwKLX07Ci0KICNkZWZpbmUgSU5URUxfSU5GTyhkZXYpCSgoKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICopIChkZXYpLT5kZXZfcHJpdmF0ZSktPmluZm8pCiAKICNkZWZpbmUgSVNfSTgzMChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTc3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggMGIyZTE2Ny4uMTJkMzI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCiAJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OwpAQCAtNDUzLDkgKzQ1Myw5IEBACiAJCSAqIGRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aCBkYXRhX3BhZ2VfaW5kZXggcGFnZS4KIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCi0JCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShvZmZzZXQpOwogCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKLQkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKKwkJZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKGRhdGFfcHRyKTsKIAogCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKIAkJaWYgKChzaG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKQEAgLTYzOCw4ICs2MzgsOCBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9iYXNlID0gKG9mZnNldCAmIH4oUEFHRV9TSVpFLTEpKTsKLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2Uob2Zmc2V0KTsKIAkJcGFnZV9sZW5ndGggPSByZW1haW47CiAJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQogCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKQEAgLTY1MCw3ICs2NTAsNiBAQAogCQkgKi8KIAkJaWYgKGZhc3RfdXNlcl93cml0ZShkZXZfcHJpdi0+bW0uZ3R0X21hcHBpbmcsIHBhZ2VfYmFzZSwKIAkJCQkgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpKQotCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CkBAIC03MzAsOSArNzI5LDkgQEAKIAkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKIAkJICovCiAJCWd0dF9wYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7Ci0JCWd0dF9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCWd0dF9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKGd0dF9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKQEAgLTc5MSw3ICs3OTAsNyBAQAogCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHBhZ2Vfb2Zmc2V0ICsgcmVtYWluKSA+IFBBR0VfU0laRSkKIAkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gcGFnZV9vZmZzZXQ7CkBAIC04OTYsOSArODk1LDkgQEAKIAkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgogCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQogCQkgKi8KLQkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlzaG1lbV9wYWdlX29mZnNldCA9IG9mZnNldF9pbl9wYWdlKG9mZnNldCk7CiAJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOwotCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZGF0YV9wdHIpOwogCiAJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOwogCQlpZiAoKHNobWVtX3BhZ2Vfb2Zmc2V0ICsgcGFnZV9sZW5ndGgpID4gUEFHRV9TSVpFKQpAQCAtMTQ1MCw4ICsxNDQ5LDkgQEAKIAkgKiBlZGdlIG9mIGFuIGV2ZW4gdGlsZSByb3cgKHdoZXJlIHRpbGUgcm93cyBhcmUgY291bnRlZCBhcyBpZiB0aGUgYm8gaXMKIAkgKiBwbGFjZWQgaW4gYSBmZW5jZWQgZ3R0IHJlZ2lvbikuCiAJICovCi0JaWYgKElTX0dFTjIoZGV2KSB8fAotCSAgICAob2JqLT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZICYmIEhBU18xMjhfQllURV9ZX1RJTElORyhkZXYpKSkKKwlpZiAoSVNfR0VOMihkZXYpKQorCQl0aWxlX2hlaWdodCA9IDE2OworCWVsc2UgaWYgKG9iai0+dGlsaW5nX21vZGUgPT0gSTkxNV9USUxJTkdfWSAmJiBIQVNfMTI4X0JZVEVfWV9USUxJTkcoZGV2KSkKIAkJdGlsZV9oZWlnaHQgPSAzMjsKIAllbHNlCiAJCXRpbGVfaGVpZ2h0ID0gODsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCmluZGV4IGI3OTYxOWEuLmI5ZmFmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwpAQCAtNTE3LDcgKzUxNyw3IEBACiAJaWYgKGRlX2lpciAmIERFX1BJUEVBX1ZCTEFOS19JVkIpCiAJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAKLQlpZiAoZGVfaWlyICYgREVfUElQRUJfVkJMQU5LX0lWQik7CisJaWYgKGRlX2lpciAmIERFX1BJUEVCX1ZCTEFOS19JVkIpCiAJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSk7CiAKIAkvKiBjaGVjayBldmVudCBmcm9tIFBDSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwppbmRleCBlOTNmOTNjLi4wOTc5ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYwpAQCAtMjg4LDYgKzI4OCw4IEBACiAJCSAqIFRoaXMgbWF5IGJlIGEgRFZJLUkgY29ubmVjdG9yIHdpdGggYSBzaGFyZWQgRERDCiAJCSAqIGxpbmsgYmV0d2VlbiBhbmFsb2cgYW5kIGRpZ2l0YWwgb3V0cHV0cywgc28gd2UKIAkJICogaGF2ZSB0byBjaGVjayB0aGUgRURJRCBpbnB1dCBzcGVjIG9mIHRoZSBhdHRhY2hlZCBkZXZpY2UuCisJCSAqCisJCSAqIE9uIHRoZSBvdGhlciBoYW5kLCB3aGF0IHNob3VsZCB3ZSBkbyBpZiBpdCBpcyBhIGJyb2tlbiBFRElEPwogCQkgKi8KIAkJaWYgKGVkaWQgIT0gTlVMTCkgewogCQkJaXNfZGlnaXRhbCA9IGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTDsKQEAgLTI5OCw2ICszMDAsOCBAQAogCQlpZiAoIWlzX2RpZ2l0YWwpIHsKIAkJCURSTV9ERUJVR19LTVMoIkNSVCBkZXRlY3RlZCB2aWEgRERDOjB4NTAgW0VESURdXG4iKTsKIAkJCXJldHVybiB0cnVlOworCQl9IGVsc2UgeworCQkJRFJNX0RFQlVHX0tNUygiQ1JUIG5vdCBkZXRlY3RlZCB2aWEgRERDOjB4NTAgW0VESUQgcmVwb3J0cyBhIGRpZ2l0YWwgcGFuZWxdXG4iKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGY1NTNkZGZkLi44MWE5MDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0zOTgzLDU0ICszOTgzLDYgQEAKICNkZWZpbmUgSUxLX0xQMF9QTEFORV9MQVRFTkNZCQk3MDAKICNkZWZpbmUgSUxLX0xQMF9DVVJTT1JfTEFURU5DWQkJMTMwMAogCi1zdGF0aWMgYm9vbCBpcm9ubGFrZV9jb21wdXRlX3dtMChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCSBpbnQgcGlwZSwKLQkJCQkgY29uc3Qgc3RydWN0IGludGVsX3dhdGVybWFya19wYXJhbXMgKmRpc3BsYXksCi0JCQkJIGludCBkaXNwbGF5X2xhdGVuY3lfbnMsCi0JCQkJIGNvbnN0IHN0cnVjdCBpbnRlbF93YXRlcm1hcmtfcGFyYW1zICpjdXJzb3IsCi0JCQkJIGludCBjdXJzb3JfbGF0ZW5jeV9ucywKLQkJCQkgaW50ICpwbGFuZV93bSwKLQkJCQkgaW50ICpjdXJzb3Jfd20pCi17Ci0Jc3RydWN0IGRybV9jcnRjICpjcnRjOwotCWludCBodG90YWwsIGhkaXNwbGF5LCBjbG9jaywgcGl4ZWxfc2l6ZTsKLQlpbnQgbGluZV90aW1lX3VzLCBsaW5lX2NvdW50OwotCWludCBlbnRyaWVzLCB0bGJfbWlzczsKLQotCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXYsIHBpcGUpOwotCWlmIChjcnRjLT5mYiA9PSBOVUxMIHx8ICFjcnRjLT5lbmFibGVkKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlodG90YWwgPSBjcnRjLT5tb2RlLmh0b3RhbDsKLQloZGlzcGxheSA9IGNydGMtPm1vZGUuaGRpc3BsYXk7Ci0JY2xvY2sgPSBjcnRjLT5tb2RlLmNsb2NrOwotCXBpeGVsX3NpemUgPSBjcnRjLT5mYi0+Yml0c19wZXJfcGl4ZWwgLyA4OwotCi0JLyogVXNlIHRoZSBzbWFsbCBidWZmZXIgbWV0aG9kIHRvIGNhbGN1bGF0ZSBwbGFuZSB3YXRlcm1hcmsgKi8KLQllbnRyaWVzID0gKChjbG9jayAqIHBpeGVsX3NpemUgLyAxMDAwKSAqIGRpc3BsYXlfbGF0ZW5jeV9ucykgLyAxMDAwOwotCXRsYl9taXNzID0gZGlzcGxheS0+Zmlmb19zaXplKmRpc3BsYXktPmNhY2hlbGluZV9zaXplIC0gaGRpc3BsYXkgKiA4OwotCWlmICh0bGJfbWlzcyA+IDApCi0JCWVudHJpZXMgKz0gdGxiX21pc3M7Ci0JZW50cmllcyA9IERJVl9ST1VORF9VUChlbnRyaWVzLCBkaXNwbGF5LT5jYWNoZWxpbmVfc2l6ZSk7Ci0JKnBsYW5lX3dtID0gZW50cmllcyArIGRpc3BsYXktPmd1YXJkX3NpemU7Ci0JaWYgKCpwbGFuZV93bSA+IChpbnQpZGlzcGxheS0+bWF4X3dtKQotCQkqcGxhbmVfd20gPSBkaXNwbGF5LT5tYXhfd207Ci0KLQkvKiBVc2UgdGhlIGxhcmdlIGJ1ZmZlciBtZXRob2QgdG8gY2FsY3VsYXRlIGN1cnNvciB3YXRlcm1hcmsgKi8KLQlsaW5lX3RpbWVfdXMgPSAoKGh0b3RhbCAqIDEwMDApIC8gY2xvY2spOwotCWxpbmVfY291bnQgPSAoY3Vyc29yX2xhdGVuY3lfbnMgLyBsaW5lX3RpbWVfdXMgKyAxMDAwKSAvIDEwMDA7Ci0JZW50cmllcyA9IGxpbmVfY291bnQgKiA2NCAqIHBpeGVsX3NpemU7Ci0JdGxiX21pc3MgPSBjdXJzb3ItPmZpZm9fc2l6ZSpjdXJzb3ItPmNhY2hlbGluZV9zaXplIC0gaGRpc3BsYXkgKiA4OwotCWlmICh0bGJfbWlzcyA+IDApCi0JCWVudHJpZXMgKz0gdGxiX21pc3M7Ci0JZW50cmllcyA9IERJVl9ST1VORF9VUChlbnRyaWVzLCBjdXJzb3ItPmNhY2hlbGluZV9zaXplKTsKLQkqY3Vyc29yX3dtID0gZW50cmllcyArIGN1cnNvci0+Z3VhcmRfc2l6ZTsKLQlpZiAoKmN1cnNvcl93bSA+IChpbnQpY3Vyc29yLT5tYXhfd20pCi0JCSpjdXJzb3Jfd20gPSAoaW50KWN1cnNvci0+bWF4X3dtOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qCiAgKiBDaGVjayB0aGUgd20gcmVzdWx0LgogICoKQEAgLTQxMzksMTIgKzQwOTEsMTIgQEAKIAl1bnNpZ25lZCBpbnQgZW5hYmxlZDsKIAogCWVuYWJsZWQgPSAwOwotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDAsCi0JCQkJICZpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8sCi0JCQkJIElMS19MUDBfUExBTkVfTEFURU5DWSwKLQkJCQkgJmlyb25sYWtlX2N1cnNvcl93bV9pbmZvLAotCQkJCSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZLAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDAsCisJCQkgICAgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKKwkJCSAgICBJTEtfTFAwX1BMQU5FX0xBVEVOQ1ksCisJCQkgICAgJmlyb25sYWtlX2N1cnNvcl93bV9pbmZvLAorCQkJICAgIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQV9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEEgLSIKQEAgLTQxNTMsMTIgKzQxMDUsMTIgQEAKIAkJZW5hYmxlZCB8PSAxOwogCX0KIAotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDEsCi0JCQkJICZpcm9ubGFrZV9kaXNwbGF5X3dtX2luZm8sCi0JCQkJIElMS19MUDBfUExBTkVfTEFURU5DWSwKLQkJCQkgJmlyb25sYWtlX2N1cnNvcl93bV9pbmZvLAotCQkJCSBJTEtfTFAwX0NVUlNPUl9MQVRFTkNZLAotCQkJCSAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CisJaWYgKGc0eF9jb21wdXRlX3dtMChkZXYsIDEsCisJCQkgICAgJmlyb25sYWtlX2Rpc3BsYXlfd21faW5mbywKKwkJCSAgICBJTEtfTFAwX1BMQU5FX0xBVEVOQ1ksCisJCQkgICAgJmlyb25sYWtlX2N1cnNvcl93bV9pbmZvLAorCQkJICAgIElMS19MUDBfQ1VSU09SX0xBVEVOQ1ksCisJCQkgICAgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgewogCQlJOTE1X1dSSVRFKFdNMF9QSVBFQl9JTEssCiAJCQkgICAocGxhbmVfd20gPDwgV00wX1BJUEVfUExBTkVfU0hJRlQpIHwgY3Vyc29yX3dtKTsKIAkJRFJNX0RFQlVHX0tNUygiRklGTyB3YXRlcm1hcmtzIEZvciBwaXBlIEIgLSIKQEAgLTQyMjMsMTAgKzQxNzUsMTAgQEAKIAl1bnNpZ25lZCBpbnQgZW5hYmxlZDsKIAogCWVuYWJsZWQgPSAwOwotCWlmIChpcm9ubGFrZV9jb21wdXRlX3dtMChkZXYsIDAsCi0JCQkJICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKLQkJCQkgJnBsYW5lX3dtLCAmY3Vyc29yX3dtKSkgeworCWlmIChnNHhfY29tcHV0ZV93bTAoZGV2LCAwLAorCQkJICAgICZzYW5keWJyaWRnZV9kaXNwbGF5X3dtX2luZm8sIGxhdGVuY3ksCisJCQkgICAgJnNhbmR5YnJpZGdlX2N1cnNvcl93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKIAkJSTkxNV9XUklURShXTTBfUElQRUFfSUxLLAogCQkJICAgKHBsYW5lX3dtIDw8IFdNMF9QSVBFX1BMQU5FX1NISUZUKSB8IGN1cnNvcl93bSk7CiAJCURSTV9ERUJVR19LTVMoIkZJRk8gd2F0ZXJtYXJrcyBGb3IgcGlwZSBBIC0iCkBAIC00MjM1LDEwICs0MTg3LDEwIEBACiAJCWVuYWJsZWQgfD0gMTsKIAl9CiAKLQlpZiAoaXJvbmxha2VfY29tcHV0ZV93bTAoZGV2LCAxLAotCQkJCSAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAotCQkJCSAmc2FuZHlicmlkZ2VfY3Vyc29yX3dtX2luZm8sIGxhdGVuY3ksCi0JCQkJICZwbGFuZV93bSwgJmN1cnNvcl93bSkpIHsKKwlpZiAoZzR4X2NvbXB1dGVfd20wKGRldiwgMSwKKwkJCSAgICAmc2FuZHlicmlkZ2VfZGlzcGxheV93bV9pbmZvLCBsYXRlbmN5LAorCQkJICAgICZzYW5keWJyaWRnZV9jdXJzb3Jfd21faW5mbywgbGF0ZW5jeSwKKwkJCSAgICAmcGxhbmVfd20sICZjdXJzb3Jfd20pKSB7CiAJCUk5MTVfV1JJVEUoV00wX1BJUEVCX0lMSywKIAkJCSAgIChwbGFuZV93bSA8PCBXTTBfUElQRV9QTEFORV9TSElGVCkgfCBjdXJzb3Jfd20pOwogCQlEUk1fREVCVUdfS01TKCJGSUZPIHdhdGVybWFya3MgRm9yIHBpcGUgQiAtIgpAQCAtNzY3NSw2ICs3NjI3LDcgQEAKIAkJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CiAJCX0gZWxzZQogCQkJZGV2X3ByaXYtPmRpc3BsYXkudXBkYXRlX3dtID0gcGluZXZpZXdfdXBkYXRlX3dtOworCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGdlbjNfaW5pdF9jbG9ja19nYXRpbmc7CiAJfSBlbHNlIGlmIChJU19HNFgoZGV2KSkgewogCQlkZXZfcHJpdi0+ZGlzcGxheS51cGRhdGVfd20gPSBnNHhfdXBkYXRlX3dtOwogCQlkZXZfcHJpdi0+ZGlzcGxheS5pbml0X2Nsb2NrX2dhdGluZyA9IGc0eF9pbml0X2Nsb2NrX2dhdGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCmluZGV4IGE0ZDgwMzEuLjM5MWI1NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwpAQCAtNTksOCArNTksNiBAQAogCWJvb2wgaXNfcGNoX2VkcDsKIAl1aW50OF90CXRyYWluX3NldFs0XTsKIAl1aW50OF90IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwotCi0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7CiB9OwogCiAvKioKQEAgLTE3MDIsNyArMTcwMCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKKwlpZiAocHJvcGVydHkgPT0gZGV2X3ByaXYtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CiAJCWludCBpID0gdmFsOwogCQlib29sIGhhc19hdWRpbzsKIApAQCAtMTg0MSwxNiArMTgzOSw3IEBACiBzdGF0aWMgdm9pZAogaW50ZWxfZHBfYWRkX3Byb3BlcnRpZXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0KLQlpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHkgPQotCQlkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9SQU5HRSwgImZvcmNlX2F1ZGlvIiwgMik7Ci0JaWYgKGludGVsX2RwLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1swXSA9IC0xOwotCQlpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1sxXSA9IDE7Ci0JCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgaW50ZWxfZHAtPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LCAwKTsKLQl9Ci0KKwlpbnRlbF9hdHRhY2hfZm9yY2VfYXVkaW9fcHJvcGVydHkoY29ubmVjdG9yKTsKIAlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eShjb25uZWN0b3IpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCmluZGV4IDgzMWQ3YTQuLjlmZmE2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCkBAIC0yMzYsNiArMjM2LDcgQEAKIGludCBpbnRlbF9kZGNfZ2V0X21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGJvb2wgaW50ZWxfZGRjX3Byb2JlKHN0cnVjdCBpbnRlbF9lbmNvZGVyICppbnRlbF9lbmNvZGVyLCBpbnQgZGRjX2J1cyk7CiAKK2V4dGVybiB2b2lkIGludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKIGV4dGVybiB2b2lkIGludGVsX2F0dGFjaF9icm9hZGNhc3RfcmdiX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwogCiBleHRlcm4gdm9pZCBpbnRlbF9jcnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCBmMjg5Yjg2Li5hYTBhOGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC00NSw3ICs0NSw2IEBACiAJYm9vbCBoYXNfaGRtaV9zaW5rOwogCWJvb2wgaGFzX2F1ZGlvOwogCWludCBmb3JjZV9hdWRpbzsKLQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpmb3JjZV9hdWRpb19wcm9wZXJ0eTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfaGRtaSAqZW5jX3RvX2ludGVsX2hkbWkoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMTk0LDcgKzE5Myw3IEBACiAJaWYgKG1vZGUtPmNsb2NrID4gMTY1MDAwKQogCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCWlmIChtb2RlLT5jbG9jayA8IDIwMDAwKQotCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOworCQlyZXR1cm4gTU9ERV9DTE9DS19MT1c7CiAKIAlpZiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pCiAJCXJldHVybiBNT0RFX05PX0RCTEVTQ0FOOwpAQCAtMjg3LDcgKzI4Niw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgeworCWlmIChwcm9wZXJ0eSA9PSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKIAkJaW50IGkgPSB2YWw7CiAJCWJvb2wgaGFzX2F1ZGlvOwogCkBAIC0zNjUsMTYgKzM2NCw3IEBACiBzdGF0aWMgdm9pZAogaW50ZWxfaGRtaV9hZGRfcHJvcGVydGllcyhzdHJ1Y3QgaW50ZWxfaGRtaSAqaW50ZWxfaGRtaSwgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Ci0KLQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9Ci0JCWRybV9wcm9wZXJ0eV9jcmVhdGUoZGV2LCBEUk1fTU9ERV9QUk9QX1JBTkdFLCAiZm9yY2VfYXVkaW8iLCAyKTsKLQlpZiAoaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1swXSA9IC0xOwotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eS0+dmFsdWVzWzFdID0gMTsKLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSwgMCk7Ci0JfQotCisJaW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KGNvbm5lY3Rvcik7CiAJaW50ZWxfYXR0YWNoX2Jyb2FkY2FzdF9yZ2JfcHJvcGVydHkoY29ubmVjdG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDY3Y2IwNzYuLmIyOGY3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTcyNyw2ICs3MjcsMTQgQEAKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiVTgwMCIpLAogCQl9LAogCX0sCisJeworCQkuY2FsbGJhY2sgPSBpbnRlbF9ub19sdmRzX2RtaV9jYWxsYmFjaywKKwkJLmlkZW50ID0gIkFzdXMgRWVlQm94IFBDIEVCMTAwNyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiQVNVU1RlSyBDb21wdXRlciBJTkMuIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkVCMTAwNyIpLAorCQl9LAorCX0sCiAKIAl7IH0JLyogdGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYwppbmRleCA5MDM0ZGQ4Zi4uM2IyNmEzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9kZXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9tb2Rlcy5jCkBAIC04MSw2ICs4MSwzNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JjZV9hdWRpb19uYW1lc1tdID0geworCSJvZmYiLAorCSJhdXRvIiwKKwkib24iLAorfTsKKwordm9pZAoraW50ZWxfYXR0YWNoX2ZvcmNlX2F1ZGlvX3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKKwlpbnQgaTsKKworCXByb3AgPSBkZXZfcHJpdi0+Zm9yY2VfYXVkaW9fcHJvcGVydHk7CisJaWYgKHByb3AgPT0gTlVMTCkgeworCQlwcm9wID0gZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfRU5VTSwKKwkJCQkJICAgImF1ZGlvIiwKKwkJCQkJICAgQVJSQVlfU0laRShmb3JjZV9hdWRpb19uYW1lcykpOworCQlpZiAocHJvcCA9PSBOVUxMKQorCQkJcmV0dXJuOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcmNlX2F1ZGlvX25hbWVzKTsgaSsrKQorCQkJZHJtX3Byb3BlcnR5X2FkZF9lbnVtKHByb3AsIGksIGktMSwgZm9yY2VfYXVkaW9fbmFtZXNbaV0pOworCisJCWRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSA9IHByb3A7CisJfQorCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgcHJvcCwgMCk7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpicm9hZGNhc3RfcmdiX25hbWVzW10gPSB7CiAJIkZ1bGwiLAogCSJMaW1pdGVkIDE2OjIzNSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggNzU0MDg2Zi4uMzBmZTU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtMTQ4LDggKzE0OCw2IEBACiAJaW50ICAgZm9ybWF0X3N1cHBvcnRlZF9udW07CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfZm9ybWF0OwogCi0Jc3RydWN0IGRybV9wcm9wZXJ0eSAqZm9yY2VfYXVkaW9fcHJvcGVydHk7Ci0KIAkvKiBhZGQgdGhlIHByb3BlcnR5IGZvciB0aGUgU0RWTy1UViAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmxlZnQ7CiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqcmlnaHQ7CkBAIC0xNzEyLDcgKzE3MTAsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAocHJvcGVydHkgPT0gaW50ZWxfc2R2b19jb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7CisJaWYgKHByb3BlcnR5ID09IGRldl9wcml2LT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewogCQlpbnQgaSA9IHZhbDsKIAkJYm9vbCBoYXNfYXVkaW87CiAKQEAgLTIwMzcsMTUgKzIwMzUsNyBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmJhc2UuYmFzZS5kZXY7CiAKLQljb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5ID0KLQkJZHJtX3Byb3BlcnR5X2NyZWF0ZShkZXYsIERSTV9NT0RFX1BST1BfUkFOR0UsICJmb3JjZV9hdWRpbyIsIDIpOwotCWlmIChjb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5KSB7Ci0JCWNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHktPnZhbHVlc1swXSA9IC0xOwotCQljb25uZWN0b3ItPmZvcmNlX2F1ZGlvX3Byb3BlcnR5LT52YWx1ZXNbMV0gPSAxOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UsCi0JCQkJCSAgICAgIGNvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHksIDApOwotCX0KLQorCWludGVsX2F0dGFjaF9mb3JjZV9hdWRpb19wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UpOwogCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA0ICYmIElTX01PQklMRShkZXYpKQogCQlpbnRlbF9hdHRhY2hfYnJvYWRjYXN0X3JnYl9wcm9wZXJ0eSgmY29ubmVjdG9yLT5iYXNlLmJhc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCmluZGV4IDA1M2VkZjkuLmJhODk2ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKQEAgLTkwMCw2ICs5MDAsNyBAQAogCX0KIAkvKiBOVjExIGFuZCBOVjIwIGRvbid0IGhhdmUgdGhpcywgdGhleSBzdG9wIGF0IDB4NTIuICovCiAJaWYgKG52X2dmNF9kaXNwX2FyY2goZGV2KSkgeworCQlyZF9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzQyKTsKIAkJcmRfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81Myk7CiAJCXJkX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNTQpOwogCkBAIC0xMDAzLDYgKzEwMDQsNyBAQAogCQkJbm91dmVhdV93YWl0X2VxKGRldiwgNjUwMDAwMDAwLCBOVl9QUk1DSU9fSU5QMF9fQ09MT1IsIDB4OCwgMHgwKTsKIAkJfQogCisJCXdyX2Npb19zdGF0ZShkZXYsIGhlYWQsIHJlZ3AsIE5WX0NJT19DUkVfNDIpOwogCQl3cl9jaW9fc3RhdGUoZGV2LCBoZWFkLCByZWdwLCBOVl9DSU9fQ1JFXzUzKTsKIAkJd3JfY2lvX3N0YXRlKGRldiwgaGVhZCwgcmVncCwgTlZfQ0lPX0NSRV81NCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDI5NjBmNTguLjVlZTE0ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCWlmIChwY2lfZG1hX3N1cHBvcnRlZChkZXYtPnBkZXYsIERNQV9CSVRfTUFTSyg0MCkpKQogCQkJZG1hX2JpdHMgPSA0MDsKIAl9IGVsc2UKLQlpZiAoZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCisJaWYgKDAgJiYgZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCiAJICAgIGRldl9wcml2LT5jaGlwc2V0ICA+IDB4NDAgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAocGNpX2RtYV9zdXBwb3J0ZWQoZGV2LT5wZGV2LCBETUFfQklUX01BU0soMzkpKSkKQEAgLTg2OCw3ICs4NjgsOSBAQAogCQlub3V2ZWF1X3ZtX3VubWFwKCZub2RlLT50bXBfdm1hKTsKIAkJbm91dmVhdV92bV9wdXQoJm5vZGUtPnRtcF92bWEpOwogCX0KKwogCW1lbS0+bW1fbm9kZSA9IE5VTEw7CisJa2ZyZWUobm9kZSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwppbmRleCBjNzcxMTFlLi44MmZhZDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby50eXBlID0gTk9VVkVBVV9HQVJUX0hXOwogCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY1MF9zZ2RtYV9iYWNrZW5kOwogCX0gZWxzZQotCWlmIChkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKKwlpZiAoMCAmJiBkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgPiAweDQwICYmIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDUpIHsKIAkJaWYgKG52NDRfZ3JhcGhfY2xhc3MoZGV2KSkgewogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5mdW5jID0gJm52NDRfc2dkbWFfYmFja2VuZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYwppbmRleCAzOGVhNjYyLi44MDIxODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJZW5naW5lLT52cmFtLmZsYWdzX3ZhbGlkCT0gbnY1MF92cmFtX2ZsYWdzX3ZhbGlkOwogCQlicmVhazsKIAljYXNlIDB4QzA6CisJY2FzZSAweEQwOgogCQllbmdpbmUtPmluc3RtZW0uaW5pdAkJPSBudmMwX2luc3RtZW1faW5pdDsKIAkJZW5naW5lLT5pbnN0bWVtLnRha2Vkb3duCT0gbnZjMF9pbnN0bWVtX3Rha2Vkb3duOwogCQllbmdpbmUtPmluc3RtZW0uc3VzcGVuZAkJPSBudmMwX2luc3RtZW1fc3VzcGVuZDsKQEAgLTU2Myw2OCArNTY0LDY4IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdGltZXI7CiAKLQlzd2l0Y2ggKGRldl9wcml2LT5jYXJkX3R5cGUpIHsKLQljYXNlIE5WXzA0OgotCQludjA0X2dyYXBoX2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQljYXNlIE5WXzEwOgotCQludjEwX2dyYXBoX2NyZWF0ZShkZXYpOwotCQlicmVhazsKLQljYXNlIE5WXzIwOgotCWNhc2UgTlZfMzA6Ci0JCW52MjBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfNDA6Ci0JCW52NDBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfNTA6Ci0JCW52NTBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWNhc2UgTlZfQzA6Ci0JCW52YzBfZ3JhcGhfY3JlYXRlKGRldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKLQljYXNlIDB4ODQ6Ci0JY2FzZSAweDg2OgotCWNhc2UgMHg5MjoKLQljYXNlIDB4OTQ6Ci0JY2FzZSAweDk2OgotCWNhc2UgMHhhMDoKLQkJbnY4NF9jcnlwdF9jcmVhdGUoZGV2KTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7Ci0JY2FzZSBOVl81MDoKLQkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCQljYXNlIDB4YTM6Ci0JCWNhc2UgMHhhNToKLQkJY2FzZSAweGE4OgotCQljYXNlIDB4YWY6Ci0JCQludmEzX2NvcHlfY3JlYXRlKGRldik7CisJaWYgKCFub3V2ZWF1X25vYWNjZWwpIHsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2FyZF90eXBlKSB7CisJCWNhc2UgTlZfMDQ6CisJCQludjA0X2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTlZfMTA6CisJCQludjEwX2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTlZfMjA6CisJCWNhc2UgTlZfMzA6CisJCQludjIwX2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTlZfNDA6CisJCQludjQwX2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTlZfNTA6CisJCQludjUwX2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWNhc2UgTlZfQzA6CisJCQludmMwX2dyYXBoX2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlicmVhazsKLQljYXNlIE5WX0MwOgotCQludmMwX2NvcHlfY3JlYXRlKGRldiwgMCk7Ci0JCW52YzBfY29weV9jcmVhdGUoZGV2LCAxKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQogCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNDApCi0JCW52NDBfbXBlZ19jcmVhdGUoZGV2KTsKLQllbHNlCi0JaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPT0gTlZfNTAgJiYKLQkgICAgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg5OCB8fCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKSkKLQkJbnY1MF9tcGVnX2NyZWF0ZShkZXYpOworCQlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJCWNhc2UgMHg4NDoKKwkJY2FzZSAweDg2OgorCQljYXNlIDB4OTI6CisJCWNhc2UgMHg5NDoKKwkJY2FzZSAweDk2OgorCQljYXNlIDB4YTA6CisJCQludjg0X2NyeXB0X2NyZWF0ZShkZXYpOworCQkJYnJlYWs7CisJCX0KIAotCWlmICghbm91dmVhdV9ub2FjY2VsKSB7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNhcmRfdHlwZSkgeworCQljYXNlIE5WXzUwOgorCQkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQkJY2FzZSAweGEzOgorCQkJY2FzZSAweGE1OgorCQkJY2FzZSAweGE4OgorCQkJY2FzZSAweGFmOgorCQkJCW52YTNfY29weV9jcmVhdGUoZGV2KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIE5WX0MwOgorCQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDApOworCQkJbnZjMF9jb3B5X2NyZWF0ZShkZXYsIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzQwKQorCQkJbnY0MF9tcGVnX2NyZWF0ZShkZXYpOworCQllbHNlCisJCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzUwICYmCisJCSAgICAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApKQorCQkJbnY1MF9tcGVnX2NyZWF0ZShkZXYpOworCiAJCWZvciAoZSA9IDA7IGUgPCBOVk9CSl9FTkdJTkVfTlI7IGUrKykgewogCQkJaWYgKGRldl9wcml2LT5lbmdbZV0pIHsKIAkJCQlyZXQgPSBkZXZfcHJpdi0+ZW5nW2VdLT5pbml0KGRldiwgZSk7CkBAIC05MjIsNiArOTIzLDcgQEAKIAkJZGV2X3ByaXYtPmNhcmRfdHlwZSA9IE5WXzUwOwogCQlicmVhazsKIAljYXNlIDB4YzA6CisJY2FzZSAweGQwOgogCQlkZXZfcHJpdi0+Y2FyZF90eXBlID0gTlZfQzA7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3ZtLmMKaW5kZXggMDA1OWU2Zi4uNTE5YTZiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdm0uYwpAQCAtNTgsNiArNTgsNyBAQAogCQkJbnVtIC09IGxlbjsKIAkJCXB0ZSArPSBsZW47CiAJCQlpZiAodW5saWtlbHkoZW5kID49IG1heCkpIHsKKwkJCQlwaHlzICs9IGxlbiA8PCAoYml0cyArIDEyKTsKIAkJCQlwZGUrKzsKIAkJCQlwdGUgPSAwOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwppbmRleCAzYzc4YmM4Li5mMWEzYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwpAQCAtMzc2LDcgKzM3NiwxMCBAQAogCSAqLwogCiAJLyogZnJhbWVidWZmZXIgY2FuIGJlIGxhcmdlciB0aGFuIGNydGMgc2Nhbm91dCBhcmVhLiAqLwotCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMwX0lOREVYXSA9IFhMQVRFKGZiLT5waXRjaCAvIDgsIDgsIE5WX0NJT19DUkVfUlBDMF9PRkZTRVRfMTBfOCk7CisJcmVncC0+Q1JUQ1tOVl9DSU9fQ1JFX1JQQzBfSU5ERVhdID0KKwkJWExBVEUoZmItPnBpdGNoIC8gOCwgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfNDJdID0KKwkJWExBVEUoZmItPnBpdGNoIC8gOCwgMTEsIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExKTsKIAlyZWdwLT5DUlRDW05WX0NJT19DUkVfUlBDMV9JTkRFWF0gPSBtb2RlLT5jcnRjX2hkaXNwbGF5IDwgMTI4MCA/CiAJCQkJCSAgICBNQVNLKE5WX0NJT19DUkVfUlBDMV9MQVJHRSkgOiAweDAwOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9MU1JfSU5ERVhdID0gWExBVEUoaG9yaXpCbGFua0VuZCwgNiwgTlZfQ0lPX0NSRV9MU1JfSEJFXzYpIHwKQEAgLTgyNCw4ICs4MjcsMTEgQEAKIAlyZWdwLT5DUlRDW05WX0NJT19DUl9PRkZTRVRfSU5ERVhdID0gZHJtX2ZiLT5waXRjaCA+PiAzOwogCXJlZ3AtPkNSVENbTlZfQ0lPX0NSRV9SUEMwX0lOREVYXSA9CiAJCVhMQVRFKGRybV9mYi0+cGl0Y2ggPj4gMywgOCwgTlZfQ0lPX0NSRV9SUEMwX09GRlNFVF8xMF84KTsKKwlyZWdwLT5DUlRDW05WX0NJT19DUkVfNDJdID0KKwkJWExBVEUoZHJtX2ZiLT5waXRjaCAvIDgsIDExLCBOVl9DSU9fQ1JFXzQyX09GRlNFVF8xMSk7CiAJY3J0Y193cl9jaW9fc3RhdGUoY3J0YywgcmVncCwgTlZfQ0lPX0NSRV9SUEMwX0lOREVYKTsKIAljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JfT0ZGU0VUX0lOREVYKTsKKwljcnRjX3dyX2Npb19zdGF0ZShjcnRjLCByZWdwLCBOVl9DSU9fQ1JFXzQyKTsKIAogCS8qIFVwZGF0ZSB0aGUgZnJhbWVidWZmZXIgbG9jYXRpb24uICovCiAJcmVncC0+ZmJfc3RhcnQgPSBudl9jcnRjLT5mYi5vZmZzZXQgJiB+MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udnJlZy5oCmluZGV4IGZlMGYyNTMuLmJiZmIxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252cmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZyZWcuaApAQCAtMjc3LDYgKzI3Nyw4IEBACiAjCQlkZWZpbmUgTlZfQ0lPX0NSRV9FQlJfVkRFXzExCQkyOjIKICMJCWRlZmluZSBOVl9DSU9fQ1JFX0VCUl9WUlNfMTEJCTQ6NAogIwkJZGVmaW5lIE5WX0NJT19DUkVfRUJSX1ZCU18xMQkJNjo2CisjCWRlZmluZSBOVl9DSU9fQ1JFXzQyCQkJMHg0MgorIwkJZGVmaW5lIE5WX0NJT19DUkVfNDJfT0ZGU0VUXzExCQk2OjYKICMJZGVmaW5lIE5WX0NJT19DUkVfNDMJCQkweDQzCiAjCWRlZmluZSBOVl9DSU9fQ1JFXzQ0CQkJMHg0NAkvKiBoZWFkIGNvbnRyb2wgKi8KICMJZGVmaW5lIE5WX0NJT19DUkVfQ1NCCQkJMHg0NQkvKiBjb2xvdXIgc2F0dXJhdGlvbiBib29zdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9LY29uZmlnCmluZGV4IDk3NDZmZWUuLmVhOTJiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL0tjb25maWcKQEAgLTI4LDExICsyOCw0IEBACiAJICBUaGUga2VybmVsIHdpbGwgYWxzbyBwZXJmb3JtIHNlY3VyaXR5IGNoZWNrIG9uIGNvbW1hbmQgc3RyZWFtCiAJICBwcm92aWRlZCBieSB0aGUgdXNlciwgd2Ugd2FudCB0byBjYXRjaCBhbmQgZm9yYmlkIGFueSBpbGxlZ2FsIHVzZQogCSAgb2YgdGhlIEdQVSBzdWNoIGFzIERNQSBpbnRvIHJhbmRvbSBzeXN0ZW0gbWVtb3J5IG9yIGludG8gbWVtb3J5Ci0JICBub3Qgb3duZWQgYnkgdGhlIHByb2Nlc3Mgc3VwcGx5aW5nIHRoZSBjb21tYW5kIHN0cmVhbS4gVGhpcyBwYXJ0Ci0JICBvZiB0aGUgY29kZSBpcyBzdGlsbCBpbmNvbXBsZXRlIGFuZCB0aGlzIHdoeSB3ZSBwcm9wb3NlIHRoYXQgcGF0Y2gKLQkgIGFzIGEgc3RhZ2luZyBkcml2ZXIgYWRkaXRpb24sIGZ1dHVyZSBzZWN1cml0eSBtaWdodCBmb3JiaWQgY3VycmVudAotCSAgZXhwZXJpbWVudGFsIHVzZXJzcGFjZSB0byBydW4uCi0KLQkgIFRoaXMgY29kZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUgOiBSMVhYLFIyWFgsUjNYWCxSNFhYLFI1WFgKLQkgIChyYWRlb24gdXAgdG8gWDE5NTApLiBXb3JrcyBpcyB1bmRlcndheSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIFI2WFgsCi0JICBSN1hYIGFuZCBuZXdlciBoYXJkd2FyZSAocmFkZW9uIGZyb20gSEQyWFhYIHRvIEhENFhYWCkuCisJICBub3Qgb3duZWQgYnkgdGhlIHByb2Nlc3Mgc3VwcGx5aW5nIHRoZSBjb21tYW5kIHN0cmVhbS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggZWM4NDg3OC4uODRhNjllNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKIAl1MzIgZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FKTsKLQl1MzIgdG1wOworCXUzMiB0bXAsIHZpZXdwb3J0X3csIHZpZXdwb3J0X2g7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTE3MSw4ICsxMTcxLDEwIEBACiAJeSAmPSB+MTsKIAlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NUQVJUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAoeCA8PCAxNikgfCB5KTsKKwl2aWV3cG9ydF93ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwl2aWV3cG9ydF9oID0gKGNydGMtPm1vZGUudmRpc3BsYXkgKyAxKSAmIH4xOwogCVdSRUczMihFVkVSR1JFRU5fVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CisJICAgICAgICh2aWV3cG9ydF93IDw8IDE2KSB8IHZpZXdwb3J0X2gpOwogCiAJLyogcGFnZWZsaXAgc2V0dXAgKi8KIAkvKiBtYWtlIHN1cmUgZmxpcCBpcyBhdCB2YiByYXRoZXIgdGhhbiBoYiAqLwpAQCAtMTIxMyw3ICsxMjE1LDcgQEAKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOwogCXUzMiBmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fTk9ORTsKLQl1MzIgdG1wOworCXUzMiB0bXAsIHZpZXdwb3J0X3csIHZpZXdwb3J0X2g7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTMzOCw4ICsxMzQwLDEwIEBACiAJeSAmPSB+MTsKIAlXUkVHMzIoQVZJVk9fRDFNT0RFX1ZJRVdQT1JUX1NUQVJUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAoeCA8PCAxNikgfCB5KTsKKwl2aWV3cG9ydF93ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKKwl2aWV3cG9ydF9oID0gKGNydGMtPm1vZGUudmRpc3BsYXkgKyAxKSAmIH4xOwogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CisJICAgICAgICh2aWV3cG9ydF93IDw8IDE2KSB8IHZpZXdwb3J0X2gpOwogCiAJLyogcGFnZWZsaXAgc2V0dXAgKi8KIAkvKiBtYWtlIHN1cmUgZmxpcCBpcyBhdCB2YiByYXRoZXIgdGhhbiBoYiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jYXltYW5fYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYwppbmRleCBlMTQ4YWIwLi43YjRlZWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuYwpAQCAtMzksMTcgKzM5LDMzNSBAQAogCiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc3RhdGVbXSA9CiB7Ci0JLyogWFhYIGZpbGwgaW4gYWRkaXRpb25hbCBibGl0IHN0YXRlICovCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwNjAsIC8qIERCX1JFTkRFUl9DT05UUk9MICovCisJMHgwMDAwMDAwMCwgLyogREJfQ09VTlRfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIERCX0RFUFRIX1ZJRVcgKi8KKwkweDAwMDAwMDJhLCAvKiBEQl9SRU5ERVJfT1ZFUlJJREUgKi8KKwkweDAwMDAwMDAwLCAvKiBEQl9SRU5ERVJfT1ZFUlJJREUyICovCisJMHgwMDAwMDAwMCwgLyogREJfSFRJTEVfREFUQV9CQVNFICovCiAKIAkweGMwMDI2OTAwLAotCTB4MDAwMDAzMTYsCi0JMHgwMDAwMDAwZSwgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCi0JMHgwMDAwMDAxMCwgLyogICovCisJMHgwMDAwMDAwYSwKKwkweDAwMDAwMDAwLCAvKiBEQl9TVEVOQ0lMX0NMRUFSICovCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfQ0xFQVIgKi8KKworCTB4YzAwMzY5MDAsCisJMHgwMDAwMDAwZiwKKwkweDAwMDAwMDAwLCAvKiBEQl9ERVBUSF9JTkZPICovCisJMHgwMDAwMDAwMCwgLyogREJfWl9JTkZPICovCisJMHgwMDAwMDAwMCwgLyogREJfU1RFTkNJTF9JTkZPICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAwODAsCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfV0lORE9XX09GRlNFVCAqLworCisJMHhjMDBkNjkwMCwKKwkweDAwMDAwMDgzLAorCTB4MDAwMGZmZmYsIC8qIFBBX1NDX0NMSVBSRUNUX1JVTEUgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19DTElQUkVDVF8wX1RMICovCisJMHgyMDAwMjAwMCwgLyogUEFfU0NfQ0xJUFJFQ1RfMF9CUiAqLworCTB4MDAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHgwMDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4YWFhYWFhYWEsIC8qIFBBX1NDX0VER0VSVUxFICovCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfSEFSRFdBUkVfU0NSRUVOX09GRlNFVCAqLworCTB4MDAwMDAwMGYsIC8qIENCX1RBUkdFVF9NQVNLICovCisJMHgwMDAwMDAwZiwgLyogQ0JfU0hBREVSX01BU0sgKi8KKworCTB4YzAyMjY5MDAsCisJMHgwMDAwMDA5NCwKKwkweDgwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9TQ0lTU09SXzBfVEwgKi8KKwkweDIwMDAyMDAwLCAvKiBQQV9TQ19WUE9SVF9TQ0lTU09SXzBfQlIgKi8KKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDgwMDAwMDAwLAorCTB4MjAwMDIwMDAsCisJMHg4MDAwMDAwMCwKKwkweDIwMDAyMDAwLAorCTB4ODAwMDAwMDAsCisJMHgyMDAwMjAwMCwKKwkweDAwMDAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUlOXzAgKi8KKwkweDNmODAwMDAwLCAvKiBQQV9TQ19WUE9SVF9aTUFYXzAgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDBkNCwKKwkweDAwMDAwMDAwLCAvKiBTWF9NSVNDICovCiAKIAkweGMwMDI2OTAwLAogCTB4MDAwMDAwZDksCiAJMHgwMDAwMDAwMCwgLyogQ1BfUklOR0lEICovCiAJMHgwMDAwMDAwMCwgLyogQ1BfVk1JRCAqLworCisJMHhjMDA5NjkwMCwKKwkweDAwMDAwMTAwLAorCTB4MDBmZmZmZmYsIC8qIFZHVF9NQVhfVlRYX0lORFggKi8KKwkweDAwMDAwMDAwLCAvKiBWR1RfTUlOX1ZUWF9JTkRYICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0lORFhfT0ZGU0VUICovCisJMHgwMDAwMDAwMCwgLyogVkdUX01VTFRJX1BSSU1fSUJfUkVTRVRfSU5EWCAqLworCTB4MDAwMDAwMDAsIC8qIFNYX0FMUEhBX1RFU1RfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX1JFRCAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX0dSRUVOICovCisJMHgwMDAwMDAwMCwgLyogQ0JfQkxFTkRfQkxVRSAqLworCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EX0FMUEhBICovCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAxODcsCisJMHgwMDAwMDEwMCwgLyogU1BJX1ZTX09VVF9JRF8wICovCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAxOTEsCisJMHgwMDAwMDEwMCwgLyogU1BJX1BTX0lOUFVUX0NOVExfMCAqLworCTB4MDAwMDAxMDEsIC8qIFNQSV9QU19JTlBVVF9DTlRMXzEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDFiMSwKKwkweDAwMDAwMDAwLCAvKiBTUElfVlNfT1VUX0NPTkZJRyAqLworCisJMHhjMDEwNjkwMCwKKwkweDAwMDAwMWIzLAorCTB4MjAwMDAwMDEsIC8qIFNQSV9QU19JTl9DT05UUk9MXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfUFNfSU5fQ09OVFJPTF8xICovCisJMHgwMDAwMDAwMCwgLyogU1BJX0lOVEVSUF9DT05UUk9MXzAgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfSU5QVVRfWiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9GT0dfQ05UTCAqLworCTB4MDAxMDAwMDAsIC8qIFNQSV9CQVJZQ19DTlRMICovCisJMHgwMDAwMDAwMCwgLyogU1BJX1BTX0lOX0NPTlRST0xfMiAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9DT01QVVRFX0lOUFVUX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1ggKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1kgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfQ09NUFVURV9OVU1fVEhSRUFEX1ogKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfR1BSX01HTVQgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfTERTX01HTVQgKi8KKwkweDAwMDAwMDAwLCAvKiBTUElfU1RBQ0tfTUdNVCAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9XQVZFX01HTVRfMSAqLworCTB4MDAwMDAwMDAsIC8qIFNQSV9XQVZFX01HTVRfMiAqLworCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMWUwLAorCTB4MDAwMDAwMDAsIC8qIENCX0JMRU5EMF9DT05UUk9MICovCisKKwkweGMwMGU2OTAwLAorCTB4MDAwMDAyMDAsCisJMHgwMDAwMDAwMCwgLyogREJfREVQVEhfQ09OVFJPTCAqLworCTB4MDAwMDAwMDAsIC8qIERCX0VRQUEgKi8KKwkweDAwY2MwMDEwLCAvKiBDQl9DT0xPUl9DT05UUk9MICovCisJMHgwMDAwMDIxMCwgLyogREJfU0hBREVSX0NPTlRST0wgKi8KKwkweDAwMDEwMDAwLCAvKiBQQV9DTF9DTElQX0NOVEwgKi8KKwkweDAwMDAwMDA0LCAvKiBQQV9TVV9TQ19NT0RFX0NOVEwgKi8KKwkweDAwMDAwMTAwLCAvKiBQQV9DTF9WVEVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX0NMX1ZTX09VVF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogUEFfQ0xfTkFOSU5GX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiBQQV9TVV9MSU5FX1NUSVBQTEVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX0xJTkVfU1RJUFBMRV9TQ0FMRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BSSU1fRklMVEVSX0NOVEwgKi8KKwkweDAwMDAwMDAwLCAvKiAgKi8KKwkweDAwMDAwMDAwLCAvKiAgKi8KKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDIyOSwKKwkweDAwMDAwMDAwLCAvKiBTUV9QR01fU1RBUlRfRlMgKi8KKwkweDAwMDAwMDAwLAorCisJMHhjMDAxNjkwMCwKKwkweDAwMDAwMjNiLAorCTB4MDAwMDAwMDAsIC8qIFNRX0xEU19BTExPQ19QUyAqLworCisJMHhjMDA2NjkwMCwKKwkweDAwMDAwMjQwLAorCTB4MDAwMDAwMDAsIC8qIFNRX0VTR1NfUklOR19JVEVNU0laRSAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKworCTB4YzAwNDY5MDAsCisJMHgwMDAwMDI0NywKKwkweDAwMDAwMDAwLCAvKiBTUV9HU19WRVJUX0lURU1TSVpFICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisKKwkweGMwMTE2OTAwLAorCTB4MDAwMDAyODAsCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9JTlRfU0laRSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NVX1BPSU5UX01JTk1BWCAqLworCTB4MDAwMDAwMDgsIC8qIFBBX1NVX0xJTkVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0xJTkVfU1RJUFBMRSAqLworCTB4MDAwMDAwMDAsIC8qIFZHVF9PVVRQVVRfUEFUSF9DTlRMICovCisJMHgwMDAwMDAwMCwgLyogVkdUX0hPU19DTlRMICovCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLCAvKiBWR1RfR1NfTU9ERSAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMjkyLAorCTB4MDAwMDAwMDAsIC8qIFBBX1NDX01PREVfQ05UTF8wICovCisJMHgwMDAwMDAwMCwgLyogUEFfU0NfTU9ERV9DTlRMXzEgKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhMSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfUFJJTUlUSVZFSURfRU4gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJhNSwKKwkweDAwMDAwMDAwLCAvKiBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9FTiAqLworCisJMHhjMDAyNjkwMCwKKwkweDAwMDAwMmE4LAorCTB4MDAwMDAwMDAsIC8qIFZHVF9JTlNUQU5DRV9TVEVQX1JBVEVfMCAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyYWQsCisJMHgwMDAwMDAwMCwgLyogVkdUX1JFVVNFX09GRiAqLworCTB4MDAwMDAwMDAsCisKKwkweGMwMDE2OTAwLAorCTB4MDAwMDAyZDUsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NIQURFUl9TVEFHRVNfRU4gKi8KKworCTB4YzAwMTY5MDAsCisJMHgwMDAwMDJkYywKKwkweDAwMDBhYTAwLCAvKiBEQl9BTFBIQV9UT19NQVNLICovCisKKwkweGMwMDY2OTAwLAorCTB4MDAwMDAyZGUsCisJMHgwMDAwMDAwMCwgLyogUEFfU1VfUE9MWV9PRkZTRVRfREJfRk1UX0NOVEwgKi8KKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisKKwkweGMwMDI2OTAwLAorCTB4MDAwMDAyZTUsCisJMHgwMDAwMDAwMCwgLyogVkdUX1NUUk1PVVRfQ09ORklHICovCisJMHgwMDAwMDAwMCwKKworCTB4YzAxYjY5MDAsCisJMHgwMDAwMDJmNSwKKwkweDc2NTQzMjEwLCAvKiBQQV9TQ19DRU5UUk9JRF9QUklPUklUWV8wICovCisJMHhmZWRjYmE5OCwgLyogUEFfU0NfQ0VOVFJPSURfUFJJT1JJVFlfMSAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0xJTkVfQ05UTCAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0FBX0NPTkZJRyAqLworCTB4MDAwMDAwMDUsIC8qIFBBX1NVX1ZUWF9DTlRMICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfVkVSVF9DTElQX0FESiAqLworCTB4M2Y4MDAwMDAsIC8qIFBBX0NMX0dCX1ZFUlRfRElTQ19BREogKi8KKwkweDNmODAwMDAwLCAvKiBQQV9DTF9HQl9IT1JaX0NMSVBfQURKICovCisJMHgzZjgwMDAwMCwgLyogUEFfQ0xfR0JfSE9SWl9ESVNDX0FESiAqLworCTB4MDAwMDAwMDAsIC8qIFBBX1NDX0FBX1NBTVBMRV9MT0NTX1BJWEVMX1gwWTBfMCAqLworCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIC8qIFBBX1NDX0FBX01BU0tfWDBZMF9YMVkwICovCisJMHhmZmZmZmZmZiwKKworCTB4YzAwMjY5MDAsCisJMHgwMDAwMDMxNiwKKwkweDAwMDAwMDBlLCAvKiBWR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgKi8KKwkweDAwMDAwMDEwLCAvKiAgKi8KIH07CiAKK2NvbnN0IHUzMiBjYXltYW5fdnNbXSA9Cit7CisJMHgwMDAwMDAwNCwKKwkweDgwNDAwNDAwLAorCTB4MDAwMGEwM2MsCisJMHg5NTAwMDY4OCwKKwkweDAwMDA0MDAwLAorCTB4MTUwMDA2ODgsCisJMHgwMDAwMDAwMCwKKwkweDg4MDAwMDAwLAorCTB4MDQwMDAwMDAsCisJMHg2Nzk2MTAwMSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMDIwMDAwLAorI2Vsc2UKKwkweDAwMDAwMDAwLAorI2VuZGlmCisJMHgwMDAwMDAwMCwKKwkweDA0MDAwMDAwLAorCTB4Njc5NjEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDAyMDAwOCwKKyNlbHNlCisJMHgwMDAwMDAwOCwKKyNlbmRpZgorCTB4MDAwMDAwMDAsCit9OworCitjb25zdCB1MzIgY2F5bWFuX3BzW10gPQoreworCTB4MDAwMDAwMDQsCisJMHhhMDBjMDAwMCwKKwkweDAwMDAwMDA4LAorCTB4ODA0MDAwMDAsCisJMHgwMDAwMDAwMCwKKwkweDk1MDAwNjg4LAorCTB4MDAwMDAwMDAsCisJMHg4ODAwMDAwMCwKKwkweDAwMzgwNDAwLAorCTB4MDAxNDZiMTAsCisJMHgwMDM4MDAwMCwKKwkweDIwMTQ2YjEwLAorCTB4MDAzODA0MDAsCisJMHg0MDE0NmIwMCwKKwkweDgwMzgwMDAwLAorCTB4NjAxNDZiMDAsCisJMHgwMDAwMDAxMCwKKwkweDAwMGQxMDAwLAorCTB4YjA4MDAwMDAsCisJMHgwMDAwMDAwMCwKK307CisKK2NvbnN0IHUzMiBjYXltYW5fcHNfc2l6ZSA9IEFSUkFZX1NJWkUoY2F5bWFuX3BzKTsKK2NvbnN0IHUzMiBjYXltYW5fdnNfc2l6ZSA9IEFSUkFZX1NJWkUoY2F5bWFuX3ZzKTsKIGNvbnN0IHUzMiBjYXltYW5fZGVmYXVsdF9zaXplID0gQVJSQVlfU0laRShjYXltYW5fZGVmYXVsdF9zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2F5bWFuX2JsaXRfc2hhZGVycy5oCmluZGV4IDMzYjc1ZTVkLi5mNWQwZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2NheW1hbl9ibGl0X3NoYWRlcnMuaApAQCAtMjUsOCArMjUsMTEgQEAKICNpZm5kZWYgQ0FZTUFOX0JMSVRfU0hBREVSU19ICiAjZGVmaW5lIENBWU1BTl9CTElUX1NIQURFUlNfSAogCitleHRlcm4gY29uc3QgdTMyIGNheW1hbl9wc1tdOworZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fdnNbXTsKIGV4dGVybiBjb25zdCB1MzIgY2F5bWFuX2RlZmF1bHRfc3RhdGVbXTsKIAorZXh0ZXJuIGNvbnN0IHUzMiBjYXltYW5fcHNfc2l6ZSwgY2F5bWFuX3ZzX3NpemU7CiBleHRlcm4gY29uc3QgdTMyIGNheW1hbl9kZWZhdWx0X3NpemU7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggN2MzNzYzOC4uOThlYTU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC04OCwyMSArODgsMzkgQEAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KIGludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+Ci0JCUFTSUNfVF9TSElGVDsKLQl1MzIgYWN0dWFsX3RlbXAgPSAwOworCXUzMiB0ZW1wLCB0b2Zmc2V0LCBhY3R1YWxfdGVtcCA9IDA7CiAKLQlpZiAodGVtcCAmIDB4NDAwKQotCQlhY3R1YWxfdGVtcCA9IC0yNTY7Ci0JZWxzZSBpZiAodGVtcCAmIDB4MjAwKQotCQlhY3R1YWxfdGVtcCA9IDI1NTsKLQllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKLQkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7Ci0JCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKLQl9IGVsc2UKLQkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfSlVOSVBFUikgeworCQl0b2Zmc2V0ID0gKFJSRUczMihDR19USEVSTUFMX0NUUkwpICYgVE9GRlNFVF9NQVNLKSA+PgorCQkJVE9GRlNFVF9TSElGVDsKKwkJdGVtcCA9IChSUkVHMzIoQ0dfVFMwX1NUQVRVUykgJiBUUzBfQURDX0RPVVRfTUFTSykgPj4KKwkJCVRTMF9BRENfRE9VVF9TSElGVDsKIAotCXJldHVybiAoYWN0dWFsX3RlbXAgKiAxMDAwKSAvIDI7CisJCWlmICh0b2Zmc2V0ICYgMHgxMDApCisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgLyAyIC0gKDB4MjAwIC0gdG9mZnNldCk7CisJCWVsc2UKKwkJCWFjdHVhbF90ZW1wID0gdGVtcCAvIDIgKyB0b2Zmc2V0OworCisJCWFjdHVhbF90ZW1wID0gYWN0dWFsX3RlbXAgKiAxMDAwOworCisJfSBlbHNlIHsKKwkJdGVtcCA9IChSUkVHMzIoQ0dfTVVMVF9USEVSTUFMX1NUQVRVUykgJiBBU0lDX1RfTUFTSykgPj4KKwkJCUFTSUNfVF9TSElGVDsKKworCQlpZiAodGVtcCAmIDB4NDAwKQorCQkJYWN0dWFsX3RlbXAgPSAtMjU2OworCQllbHNlIGlmICh0ZW1wICYgMHgyMDApCisJCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwkJZWxzZSBpZiAodGVtcCAmIDB4MTAwKSB7CisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweDFmZjsKKwkJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwkJfSBlbHNlCisJCQlhY3R1YWxfdGVtcCA9IHRlbXAgJiAweGZmOworCisJCWFjdHVhbF90ZW1wID0gKGFjdHVhbF90ZW1wICogMTAwMCkgLyAyOworCX0KKworCXJldHVybiBhY3R1YWxfdGVtcDsKIH0KIAogaW50IHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0xNDE1LDYgKzE0MzMsOCBAQAogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUkVEV09PRDoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX1RVUktTOgogCWNhc2UgQ0hJUF9DQUlDT1M6CiAJCWZvcmNlX25vX3N3aXp6bGUgPSBmYWxzZTsKQEAgLTE1NDQsNiArMTU2NCw4IEBACiAJY2FzZSBDSElQX1JFRFdPT0Q6CiAJY2FzZSBDSElQX0NFREFSOgogCWNhc2UgQ0hJUF9QQUxNOgorCWNhc2UgQ0hJUF9TVU1POgorCWNhc2UgQ0hJUF9TVU1PMjoKIAljYXNlIENISVBfVFVSS1M6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAlkZWZhdWx0OgpAQCAtMTY4OSw2ICsxNzExLDU0IEBACiAJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKIAkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU86CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlcyA9IDE7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3BpcGVzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGlsZV9waXBlcyA9IDI7CisJCWlmIChyZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NjQ4KQorCQkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfc2ltZHMgPSAzOworCQllbHNlIGlmICgocmRldi0+cGRldi0+ZGV2aWNlID09IDB4OTY0NykgfHwKKwkJCSAocmRldi0+cGRldi0+ZGV2aWNlID09IDB4OTY0YSkpCisJCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDQ7CisJCWVsc2UKKwkJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3NpbWRzID0gNTsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfYmFja2VuZHMgPSAyICogcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9ncHJzID0gMjU2OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aHJlYWRzID0gMjQ4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9nc190aHJlYWRzID0gMzI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gNjQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDE5MjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfaHdfY29udGV4dHMgPSA4OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19wcmltX2ZpZm9fc2l6ZSA9IDB4NDA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfaGl6X3RpbGVfZmlmb19zaXplID0gMHgzMDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1NVTU8yOgorCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm51bV9zZXMgPSAxOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9waXBlcyA9IDQ7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXMgPSA0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zaW1kcyA9IDI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2JhY2tlbmRzID0gMSAqIHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubnVtX3NlczsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3BycyA9IDI1NjsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfdGhyZWFkcyA9IDI0ODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfZ3NfdGhyZWFkcyA9IDMyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X251bV9vZl9zZXRzID0gNDsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zeF9tYXhfZXhwb3J0X3NpemUgPSAyNTY7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDY0OworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgPSAxOTI7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X2h3X2NvbnRleHRzID0gODsKKwkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfcHJpbV9maWZvX3NpemUgPSAweDQwOworCQlyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCXJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc2NfZWFybHl6X3RpbGVfZmlmb19zaXplID0gMHgxMzA7CisJCWJyZWFrOwogCWNhc2UgQ0hJUF9CQVJUUzoKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5udW1fc2VzID0gMjsKIAkJcmRldi0+Y29uZmlnLmV2ZXJncmVlbi5tYXhfcGlwZXMgPSA0OwpAQCAtMjAzOSw2ICsyMTA5LDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJLyogbm8gdmVydGV4IGNhY2hlICovCiAJCXNxX2NvbmZpZyAmPSB+VkNfRU5BQkxFOwpAQCAtMjA2MCw2ICsyMTMyLDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJCXBzX3RocmVhZF9jb3VudCA9IDk2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjA5OSw2ICsyMTczLDggQEAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKIAljYXNlIENISVBfUEFMTToKKwljYXNlIENISVBfU1VNTzoKKwljYXNlIENISVBfU1VNTzI6CiAJY2FzZSBDSElQX0NBSUNPUzoKIAkJdmd0X2NhY2hlX2ludmFsaWRhdGlvbiA9IENBQ0hFX0lOVkFMSURBVElPTihUQ19PTkxZKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYwppbmRleCBiYTA2YTY5Li41N2YzYmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgImV2ZXJncmVlbmQuaCIKICNpbmNsdWRlICJldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmgiCisjaW5jbHVkZSAiY2F5bWFuX2JsaXRfc2hhZGVycy5oIgogCiAjZGVmaW5lIERJX1BUX1JFQ1RMSVNUICAgICAgICAweDExCiAjZGVmaW5lIERJX0lOREVYX1NJWkVfMTZfQklUICAweDAKQEAgLTE1Miw2ICsxNTMsOCBAQAogCiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKIAkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8CisJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9TVU1PKSB8fAorCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CiAJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQogCQljcF9zZXRfc3VyZmFjZV9zeW5jKHJkZXYsCiAJCQkJICAgIFBBQ0tFVDNfVENfQUNUSU9OX0VOQSwgNDgsIGdwdV9hZGRyKTsKQEAgLTE5OSw2ICsyMDIsMTYgQEAKIHNldF9zY2lzc29ycyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IHgxLCBpbnQgeTEsCiAJICAgICBpbnQgeDIsIGludCB5MikKIHsKKwkvKiB3b3JrYXJvdW5kIHNvbWUgaHcgYnVncyAqLworCWlmICh4MiA9PSAwKQorCQl4MSA9IDE7CisJaWYgKHkyID09IDApCisJCXkxID0gMTsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FZTUFOKSB7CisJCWlmICgoeDIgPT0gMSkgJiYgKHkyID09IDEpKQorCQkJeDIgPSAyOworCX0KKwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09OVEVYVF9SRUcsIDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwgLSBQQUNLRVQzX1NFVF9DT05URVhUX1JFR19TVEFSVCkgPj4gMik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKHgxIDw8IDApIHwgKHkxIDw8IDE2KSk7CkBAIC0yNTUsMjM4ICsyNjgsMjg0IEBACiAJdTY0IGdwdV9hZGRyOwogCWludCBkd29yZHM7CiAKLQlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewotCWNhc2UgQ0hJUF9DRURBUjoKLQlkZWZhdWx0OgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSA5NjsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2dzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2VzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKLQkJbnVtX2xzX3RocmVhZHMgPSAxNjsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1JFRFdPT0Q6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0pVTklQRVI6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX0NZUFJFU1M6Ci0JY2FzZSBDSElQX0hFTUxPQ0s6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1BBTE06Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDk2OwotCQludW1fdnNfdGhyZWFkcyA9IDE2OwotCQludW1fZ3NfdGhyZWFkcyA9IDE2OwotCQludW1fZXNfdGhyZWFkcyA9IDE2OwotCQludW1faHNfdGhyZWFkcyA9IDE2OwotCQludW1fbHNfdGhyZWFkcyA9IDE2OwotCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOwotCQlicmVhazsKLQljYXNlIENISVBfQkFSVFM6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAyMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKLQkJYnJlYWs7Ci0JY2FzZSBDSElQX1RVUktTOgotCQludW1fcHNfZ3BycyA9IDkzOwotCQludW1fdnNfZ3BycyA9IDQ2OwotCQludW1fdGVtcF9ncHJzID0gNDsKLQkJbnVtX2dzX2dwcnMgPSAzMTsKLQkJbnVtX2VzX2dwcnMgPSAzMTsKLQkJbnVtX2hzX2dwcnMgPSAyMzsKLQkJbnVtX2xzX2dwcnMgPSAyMzsKLQkJbnVtX3BzX3RocmVhZHMgPSAxMjg7Ci0JCW51bV92c190aHJlYWRzID0gMjA7Ci0JCW51bV9nc190aHJlYWRzID0gMjA7Ci0JCW51bV9lc190aHJlYWRzID0gMjA7Ci0JCW51bV9oc190aHJlYWRzID0gMjA7Ci0JCW51bV9sc190aHJlYWRzID0gMjA7Ci0JCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7Ci0JCWJyZWFrOwotCWNhc2UgQ0hJUF9DQUlDT1M6Ci0JCW51bV9wc19ncHJzID0gOTM7Ci0JCW51bV92c19ncHJzID0gNDY7Ci0JCW51bV90ZW1wX2dwcnMgPSA0OwotCQludW1fZ3NfZ3BycyA9IDMxOwotCQludW1fZXNfZ3BycyA9IDMxOwotCQludW1faHNfZ3BycyA9IDIzOwotCQludW1fbHNfZ3BycyA9IDIzOwotCQludW1fcHNfdGhyZWFkcyA9IDEyODsKLQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2dzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2VzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKLQkJbnVtX2xzX3RocmVhZHMgPSAxMDsKLQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKLQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHx8Ci0JICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQUlDT1MpKQotCQlzcV9jb25maWcgPSAwOwotCWVsc2UKLQkJc3FfY29uZmlnID0gVkNfRU5BQkxFOwotCi0Jc3FfY29uZmlnIHw9IChFWFBPUlRfU1JDX0MgfAotCQkgICAgICBDU19QUklPKDApIHwKLQkJICAgICAgTFNfUFJJTygwKSB8Ci0JCSAgICAgIEhTX1BSSU8oMCkgfAotCQkgICAgICBQU19QUklPKDApIHwKLQkJICAgICAgVlNfUFJJTygxKSB8Ci0JCSAgICAgIEdTX1BSSU8oMikgfAotCQkgICAgICBFU19QUklPKDMpKTsKLQotCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX0dQUlMobnVtX3BzX2dwcnMpIHwKLQkJCQkgIE5VTV9WU19HUFJTKG51bV92c19ncHJzKSB8Ci0JCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7Ci0Jc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChOVU1fR1NfR1BSUyhudW1fZ3NfZ3BycykgfAotCQkJCSAgTlVNX0VTX0dQUlMobnVtX2VzX2dwcnMpKTsKLQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8Ci0JCQkJICBOVU1fTFNfR1BSUyhudW1fbHNfZ3BycykpOwotCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKE5VTV9QU19USFJFQURTKG51bV9wc190aHJlYWRzKSB8Ci0JCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKLQkJCQkgICBOVU1fR1NfVEhSRUFEUyhudW1fZ3NfdGhyZWFkcykgfAotCQkJCSAgIE5VTV9FU19USFJFQURTKG51bV9lc190aHJlYWRzKSk7Ci0Jc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAotCQkJCSAgICAgTlVNX0xTX1RIUkVBRFMobnVtX2xzX3RocmVhZHMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoTlVNX1BTX1NUQUNLX0VOVFJJRVMobnVtX3BzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX1NUQUNLX0VOVFJJRVMobnVtX2dzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKLQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKLQkJCQkgICAgTlVNX0xTX1NUQUNLX0VOVFJJRVMobnVtX2xzX3N0YWNrX2VudHJpZXMpKTsKLQogCS8qIHNldCBjbGVhciBjb250ZXh0IHN0YXRlICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0NMRUFSX1NUQVRFLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAKLQkvKiBkaXNhYmxlIGR5biBncHJzICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pIHsKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX0NFREFSOgorCQlkZWZhdWx0OgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1JFRFdPT0Q6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0pVTklQRVI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX0NZUFJFU1M6CisJCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9QQUxNOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDk2OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9nc190aHJlYWRzID0gMTY7CisJCQludW1fZXNfdGhyZWFkcyA9IDE2OworCQkJbnVtX2hzX3RocmVhZHMgPSAxNjsKKwkJCW51bV9sc190aHJlYWRzID0gMTY7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1NVTU86CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCWJyZWFrOworCQljYXNlIENISVBfU1VNTzI6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gOTY7CisJCQludW1fdnNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2dzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9lc190aHJlYWRzID0gMjU7CisJCQludW1faHNfdGhyZWFkcyA9IDI1OworCQkJbnVtX2xzX3RocmVhZHMgPSAyNTsKKwkJCW51bV9wc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fdnNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2dzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9lc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1faHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2xzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCWJyZWFrOworCQljYXNlIENISVBfQkFSVFM6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9nc190aHJlYWRzID0gMjA7CisJCQludW1fZXNfdGhyZWFkcyA9IDIwOworCQkJbnVtX2hzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9sc190aHJlYWRzID0gMjA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gODU7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDg1OworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA4NTsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gODU7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1RVUktTOgorCQkJbnVtX3BzX2dwcnMgPSA5MzsKKwkJCW51bV92c19ncHJzID0gNDY7CisJCQludW1fdGVtcF9ncHJzID0gNDsKKwkJCW51bV9nc19ncHJzID0gMzE7CisJCQludW1fZXNfZ3BycyA9IDMxOworCQkJbnVtX2hzX2dwcnMgPSAyMzsKKwkJCW51bV9sc19ncHJzID0gMjM7CisJCQludW1fcHNfdGhyZWFkcyA9IDEyODsKKwkJCW51bV92c190aHJlYWRzID0gMjA7CisJCQludW1fZ3NfdGhyZWFkcyA9IDIwOworCQkJbnVtX2VzX3RocmVhZHMgPSAyMDsKKwkJCW51bV9oc190aHJlYWRzID0gMjA7CisJCQludW1fbHNfdGhyZWFkcyA9IDIwOworCQkJbnVtX3BzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV92c19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZ3Nfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2VzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9oc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fbHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9DQUlDT1M6CisJCQludW1fcHNfZ3BycyA9IDkzOworCQkJbnVtX3ZzX2dwcnMgPSA0NjsKKwkJCW51bV90ZW1wX2dwcnMgPSA0OworCQkJbnVtX2dzX2dwcnMgPSAzMTsKKwkJCW51bV9lc19ncHJzID0gMzE7CisJCQludW1faHNfZ3BycyA9IDIzOworCQkJbnVtX2xzX2dwcnMgPSAyMzsKKwkJCW51bV9wc190aHJlYWRzID0gMTI4OworCQkJbnVtX3ZzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9nc190aHJlYWRzID0gMTA7CisJCQludW1fZXNfdGhyZWFkcyA9IDEwOworCQkJbnVtX2hzX3RocmVhZHMgPSAxMDsKKwkJCW51bV9sc190aHJlYWRzID0gMTA7CisJCQludW1fcHNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX3ZzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9nc19zdGFja19lbnRyaWVzID0gNDI7CisJCQludW1fZXNfc3RhY2tfZW50cmllcyA9IDQyOworCQkJbnVtX2hzX3N0YWNrX2VudHJpZXMgPSA0MjsKKwkJCW51bV9sc19zdGFja19lbnRyaWVzID0gNDI7CisJCQlicmVhazsKKwkJfQogCi0JLyogU1EgY29uZmlnICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9DT05GSUdfUkVHLCAxMSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChTUV9DT05GSUcgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDApOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdF8yKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8zKTsKKwkJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DRURBUikgfHwKKwkJICAgIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9QQUxNKSB8fAorCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1NVTU8pIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfU1VNTzIpIHx8CisJCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfQ0FJQ09TKSkKKwkJCXNxX2NvbmZpZyA9IDA7CisJCWVsc2UKKwkJCXNxX2NvbmZpZyA9IFZDX0VOQUJMRTsKKworCQlzcV9jb25maWcgfD0gKEVYUE9SVF9TUkNfQyB8CisJCQkgICAgICBDU19QUklPKDApIHwKKwkJCSAgICAgIExTX1BSSU8oMCkgfAorCQkJICAgICAgSFNfUFJJTygwKSB8CisJCQkgICAgICBQU19QUklPKDApIHwKKwkJCSAgICAgIFZTX1BSSU8oMSkgfAorCQkJICAgICAgR1NfUFJJTygyKSB8CisJCQkgICAgICBFU19QUklPKDMpKTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKE5VTV9QU19HUFJTKG51bV9wc19ncHJzKSB8CisJCQkJCSAgTlVNX1ZTX0dQUlMobnVtX3ZzX2dwcnMpIHwKKwkJCQkJICBOVU1fQ0xBVVNFX1RFTVBfR1BSUyhudW1fdGVtcF9ncHJzKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoTlVNX0dTX0dQUlMobnVtX2dzX2dwcnMpIHwKKwkJCQkJICBOVU1fRVNfR1BSUyhudW1fZXNfZ3BycykpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8zID0gKE5VTV9IU19HUFJTKG51bV9oc19ncHJzKSB8CisJCQkJCSAgTlVNX0xTX0dQUlMobnVtX2xzX2dwcnMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoTlVNX1BTX1RIUkVBRFMobnVtX3BzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX1ZTX1RIUkVBRFMobnVtX3ZzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0dTX1RIUkVBRFMobnVtX2dzX3RocmVhZHMpIHwKKwkJCQkJICAgTlVNX0VTX1RIUkVBRFMobnVtX2VzX3RocmVhZHMpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMiA9IChOVU1fSFNfVEhSRUFEUyhudW1faHNfdGhyZWFkcykgfAorCQkJCQkgICAgIE5VTV9MU19USFJFQURTKG51bV9sc190aHJlYWRzKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChOVU1fUFNfU1RBQ0tfRU5UUklFUyhudW1fcHNfc3RhY2tfZW50cmllcykgfAorCQkJCQkgICAgTlVNX1ZTX1NUQUNLX0VOVFJJRVMobnVtX3ZzX3N0YWNrX2VudHJpZXMpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKE5VTV9HU19TVEFDS19FTlRSSUVTKG51bV9nc19zdGFja19lbnRyaWVzKSB8CisJCQkJCSAgICBOVU1fRVNfU1RBQ0tfRU5UUklFUyhudW1fZXNfc3RhY2tfZW50cmllcykpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzMgPSAoTlVNX0hTX1NUQUNLX0VOVFJJRVMobnVtX2hzX3N0YWNrX2VudHJpZXMpIHwKKwkJCQkJICAgIE5VTV9MU19TVEFDS19FTlRSSUVTKG51bV9sc19zdGFja19lbnRyaWVzKSk7CisKKwkJLyogZGlzYWJsZSBkeW4gZ3BycyAqLworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEgLSBQQUNLRVQzX1NFVF9DT05GSUdfUkVHX1NUQVJUKSA+PiAyKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisKKwkJLyogU1EgY29uZmlnICovCisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMTEpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKFNRX0NPTkZJRyAtIFBBQ0tFVDNfU0VUX0NPTkZJR19SRUdfU1RBUlQpID4+IDIpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9jb25maWcpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfZ3ByX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX2dwcl9yZXNvdXJjZV9tZ210XzMpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210KTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMik7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHNxX3N0YWNrX3Jlc291cmNlX21nbXRfMyk7CisJfQogCiAJLyogQ09OVEVYVF9DT05UUk9MICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhjMDAxMjgwMCk7CkBAIC01NjAsNyArNjE5LDEwIEBACiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKIAotCXJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gPSBldmVyZ3JlZW5fZGVmYXVsdF9zaXplOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikKKwkJcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiA9IGV2ZXJncmVlbl9kZWZhdWx0X3NpemU7CisJZWxzZQorCQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gY2F5bWFuX2RlZmF1bHRfc2l6ZTsKIAogCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CiAJd2hpbGUgKGR3b3JkcyAmIDB4ZikgewpAQCAtNTcyLDExICs2MzQsMTcgQEAKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl92c19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl92c19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCA9IG9ial9zaXplOwotCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pCisJCW9ial9zaXplICs9IGV2ZXJncmVlbl9wc19zaXplICogNDsKKwllbHNlCisJCW9ial9zaXplICs9IGNheW1hbl9wc19zaXplICogNDsKIAlvYmpfc2l6ZSA9IEFMSUdOKG9ial9zaXplLCAyNTYpOwogCiAJciA9IHJhZGVvbl9ib19jcmVhdGUocmRldiwgb2JqX3NpemUsIFBBR0VfU0laRSwgdHJ1ZSwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKQEAgLTU5OSwxNiArNjY3LDI5IEBACiAJCXJldHVybiByOwogCX0KIAotCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQsCi0JCSAgICBldmVyZ3JlZW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0LAorCQkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CiAKLQlpZiAobnVtX3BhY2tldDJzKQotCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKLQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7Ci0JZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCi0JCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQotCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKKwkJaWYgKG51bV9wYWNrZXQycykKKwkJCW1lbWNweV90b2lvKHB0ciArIHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9vZmZzZXQgKyAocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpLAorCQkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fdnNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl92c1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkJKih1MzIgKikoKHVuc2lnbmVkIGxvbmcpcHRyICsgcmRldi0+cjYwMF9ibGl0LnBzX29mZnNldCArIGkgKiA0KSA9IGNwdV90b19sZTMyKGV2ZXJncmVlbl9wc1tpXSk7CisJfSBlbHNlIHsKKwkJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJCSAgICBjYXltYW5fZGVmYXVsdF9zdGF0ZSwgcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiAqIDQpOworCisJCWlmIChudW1fcGFja2V0MnMpCisJCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCQkgICAgcGFja2V0MnMsIG51bV9wYWNrZXQycyAqIDQpOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3ZzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fdnNbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgY2F5bWFuX3BzX3NpemU7IGkrKykKKwkJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihjYXltYW5fcHNbaV0pOworCX0KIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAppbmRleCBmMzdlOTFlLi4xNjM2ZTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaApAQCAtMTY4LDEwICsxNjgsMTYgQEAKICNkZWZpbmUJCVNFX0RCX0JVU1kJCQkJCSgxIDw8IDMwKQogI2RlZmluZQkJU0VfQ0JfQlVTWQkJCQkJKDEgPDwgMzEpCiAvKiBldmVyZ3JlZW4gKi8KKyNkZWZpbmUJQ0dfVEhFUk1BTF9DVFJMCQkJCQkweDcyYworI2RlZmluZQkJVE9GRlNFVF9NQVNLCQkJICAgICAgICAweDAwMDAzRkUwCisjZGVmaW5lCQlUT0ZGU0VUX1NISUZUCQkJICAgICAgICA1CiAjZGVmaW5lCUNHX01VTFRfVEhFUk1BTF9TVEFUVVMJCQkJMHg3NDAKICNkZWZpbmUJCUFTSUNfVCh4KQkJCSAgICAgICAgKCh4KSA8PCAxNikKLSNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDdGRjAwMDAKKyNkZWZpbmUJCUFTSUNfVF9NQVNLCQkJICAgICAgICAweDA3RkYwMDAwCiAjZGVmaW5lCQlBU0lDX1RfU0hJRlQJCQkgICAgICAgIDE2CisjZGVmaW5lCUNHX1RTMF9TVEFUVVMJCQkJCTB4NzYwCisjZGVmaW5lCQlUUzBfQURDX0RPVVRfTUFTSwkJCTB4MDAwMDAzRkYKKyNkZWZpbmUJCVRTMF9BRENfRE9VVF9TSElGVAkJCTAKIC8qIEFQVSAqLwogI2RlZmluZQlDR19USEVSTUFMX1NUQVRVUwkJCSAgICAgICAgMHg2NzgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCmluZGV4IGIyMDViYTEuLjE2Y2FhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKQEAgLTEzODcsMTQgKzEzODcsMTIgQEAKIAkJcmV0dXJuIHI7CiAJY2F5bWFuX2dwdV9pbml0KHJkZXYpOwogCi0jaWYgMAotCXIgPSBjYXltYW5fYmxpdF9pbml0KHJkZXYpOworCXIgPSBldmVyZ3JlZW5fYmxpdF9pbml0KHJkZXYpOwogCWlmIChyKSB7Ci0JCWNheW1hbl9ibGl0X2ZpbmkocmRldik7CisJCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJCXJkZXYtPmFzaWMtPmNvcHkgPSBOVUxMOwogCQlkZXZfd2FybihyZGV2LT5kZXYsICJmYWlsZWQgYmxpdHRlciAoJWQpIGZhbGxpbmcgYmFjayB0byBtZW1jcHlcbiIsIHIpOwogCX0KLSNlbmRpZgogCiAJLyogYWxsb2NhdGUgd2IgYnVmZmVyICovCiAJciA9IHJhZGVvbl93Yl9pbml0KHJkZXYpOwpAQCAtMTQ1Miw3ICsxNDUwLDcgQEAKIAogaW50IGNheW1hbl9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCS8qIGludCByOyAqLworCWludCByOwogCiAJLyogRklYTUU6IHdlIHNob3VsZCB3YWl0IGZvciByaW5nIHRvIGJlIGVtcHR5ICovCiAJY2F5bWFuX2NwX2VuYWJsZShyZGV2LCBmYWxzZSk7CkBAIC0xNDYxLDE0ICsxNDU5LDEzIEBACiAJcmFkZW9uX3diX2Rpc2FibGUocmRldik7CiAJY2F5bWFuX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOwogCi0jaWYgMAogCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KIAlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKIAlpZiAobGlrZWx5KHIgPT0gMCkpIHsKIAkJcmFkZW9uX2JvX3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CiAJfQotI2VuZGlmCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MCw3ICsxNTc3LDcgQEAKIAogdm9pZCBjYXltYW5fZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQkvKiBjYXltYW5fYmxpdF9maW5pKHJkZXYpOyAqLworCWV2ZXJncmVlbl9ibGl0X2ZpbmkocmRldik7CiAJY2F5bWFuX2NwX2ZpbmkocmRldik7CiAJcjYwMF9pcnFfZmluaShyZGV2KTsKIAlyYWRlb25fd2JfZmluaShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggNmYyNzU5My4uZDc0ZDRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTg3LDYgKzg3LDEwIEBACiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9QQUxNX3BmcC5iaW4iKTsKIE1PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1BBTE1fbWUuYmluIik7CiBNT0RVTEVfRklSTVdBUkUoInJhZGVvbi9TVU1PX3JsYy5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU9fcGZwLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJyYWRlb24vU1VNT19tZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX3BmcC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgicmFkZW9uL1NVTU8yX21lLmJpbiIpOwogCiBpbnQgcjYwMF9kZWJ1Z2ZzX21jX2luZm9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKQEAgLTIwMjQsNiArMjAyOCwxNCBAQAogCQljaGlwX25hbWUgPSAiUEFMTSI7CiAJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CiAJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1POgorCQljaGlwX25hbWUgPSAiU1VNTyI7CisJCXJsY19jaGlwX25hbWUgPSAiU1VNTyI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9TVU1PMjoKKwkJY2hpcF9uYW1lID0gIlNVTU8yIjsKKwkJcmxjX2NoaXBfbmFtZSA9ICJTVU1PIjsKKwkJYnJlYWs7CiAJZGVmYXVsdDogQlVHKCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCmluZGV4IGZkMThiZTkuLjkwOWJkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcy5jCkBAIC03MSwyMCArNzEsMjEgQEAKIAl1NjQJCQlkYl9ib19tYzsKIH07CiAKLSNkZWZpbmUgRk1UXzhfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCAxLCB2YyB9Ci0jZGVmaW5lIEZNVF8xNl9CSVQoZm10LCB2YykgW2ZtdF0gPSB7IDEsIDEsIDIsIHZjIH0KLSNkZWZpbmUgRk1UXzI0X0JJVChmbXQpIFtmbXRdID0geyAxLCAxLCAzLCAwIH0KLSNkZWZpbmUgRk1UXzMyX0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgNCwgdmMgfQotI2RlZmluZSBGTVRfNDhfQklUKGZtdCkgW2ZtdF0gPSB7IDEsIDEsIDYsIDAgfQotI2RlZmluZSBGTVRfNjRfQklUKGZtdCwgdmMpIFtmbXRdID0geyAxLCAxLCA4LCB2YyB9Ci0jZGVmaW5lIEZNVF85Nl9CSVQoZm10KSBbZm10XSA9IHsgMSwgMSwgMTIsIDAgfQotI2RlZmluZSBGTVRfMTI4X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMTYsIHZjIH0KKyNkZWZpbmUgRk1UXzhfQklUKGZtdCwgdmMpICAgW2ZtdF0gPSB7IDEsIDEsIDEsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMTZfQklUKGZtdCwgdmMpICBbZm10XSA9IHsgMSwgMSwgMiwgdmMsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF8yNF9CSVQoZm10KSAgICAgIFtmbXRdID0geyAxLCAxLCAzLCAgMCwgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzMyX0JJVChmbXQsIHZjKSAgW2ZtdF0gPSB7IDEsIDEsIDQsIHZjLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfNDhfQklUKGZtdCkgICAgICBbZm10XSA9IHsgMSwgMSwgNiwgIDAsIENISVBfUjYwMCB9CisjZGVmaW5lIEZNVF82NF9CSVQoZm10LCB2YykgIFtmbXRdID0geyAxLCAxLCA4LCB2YywgQ0hJUF9SNjAwIH0KKyNkZWZpbmUgRk1UXzk2X0JJVChmbXQpICAgICAgW2ZtdF0gPSB7IDEsIDEsIDEyLCAwLCBDSElQX1I2MDAgfQorI2RlZmluZSBGTVRfMTI4X0JJVChmbXQsIHZjKSBbZm10XSA9IHsgMSwgMSwgMTYsdmMsIENISVBfUjYwMCB9CiAKIHN0cnVjdCBncHVfZm9ybWF0cyB7CiAJdW5zaWduZWQgYmxvY2t3aWR0aDsKIAl1bnNpZ25lZCBibG9ja2hlaWdodDsKIAl1bnNpZ25lZCBibG9ja3NpemU7CiAJdW5zaWduZWQgdmFsaWRfY29sb3I7CisJZW51bSByYWRlb25fZmFtaWx5IG1pbl9mYW1pbHk7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdwdV9mb3JtYXRzIGNvbG9yX2Zvcm1hdHNfdGFibGVbXSA9IHsKQEAgLTE1NCw3ICsxNTUsMTEgQEAKIAlbVl8wMzgwMDRfRk1UX0JDM10gPSB7IDQsIDQsIDE2LCAwIH0sCiAJW1ZfMDM4MDA0X0ZNVF9CQzRdID0geyA0LCA0LCA4LCAwIH0sCiAJW1ZfMDM4MDA0X0ZNVF9CQzVdID0geyA0LCA0LCAxNiwgMH0sCisJW1ZfMDM4MDA0X0ZNVF9CQzZdID0geyA0LCA0LCAxNiwgMCwgQ0hJUF9DRURBUn0sIC8qIEV2ZXJncmVlbi1vbmx5ICovCisJW1ZfMDM4MDA0X0ZNVF9CQzddID0geyA0LCA0LCAxNiwgMCwgQ0hJUF9DRURBUn0sIC8qIEV2ZXJncmVlbi1vbmx5ICovCiAKKwkvKiBUaGUgb3RoZXIgRXZlcmdyZWVuIGZvcm1hdHMgKi8KKwlbVl8wMzgwMDRfRk1UXzMyX0FTXzMyXzMyXzMyXzMyXSA9IHsgMSwgMSwgNCwgMCwgQ0hJUF9DRURBUn0sCiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX2NvbG9yKHUzMiBmb3JtYXQpCkBAIC0xNjgsMTEgKzE3MywxNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZtdF9pc192YWxpZF90ZXh0dXJlKHUzMiBmb3JtYXQpCitzdGF0aWMgaW5saW5lIGJvb2wgZm10X2lzX3ZhbGlkX3RleHR1cmUodTMyIGZvcm1hdCwgZW51bSByYWRlb25fZmFtaWx5IGZhbWlseSkKIHsKIAlpZiAoZm9ybWF0ID49IEFSUkFZX1NJWkUoY29sb3JfZm9ybWF0c190YWJsZSkpCiAJCXJldHVybiBmYWxzZTsKIAkKKwlpZiAoZmFtaWx5IDwgY29sb3JfZm9ybWF0c190YWJsZVtmb3JtYXRdLm1pbl9mYW1pbHkpCisJCXJldHVybiBmYWxzZTsKKwogCWlmIChjb2xvcl9mb3JtYXRzX3RhYmxlW2Zvcm1hdF0uYmxvY2t3aWR0aCA+IDApCiAJCXJldHVybiB0cnVlOwogCkBAIC0xMzI1LDcgKzEzMzMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZm9ybWF0ID0gR18wMzgwMDRfREFUQV9GT1JNQVQod29yZDEpOwotCWlmICghZm10X2lzX3ZhbGlkX3RleHR1cmUoZm9ybWF0KSkgeworCWlmICghZm10X2lzX3ZhbGlkX3RleHR1cmUoZm9ybWF0LCBwLT5mYW1pbHkpKSB7CiAJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleHR1cmUgaW52YWxpZCBmb3JtYXQgJWRcbiIsCiAJCQkgX19mdW5jX18sIF9fTElORV9fLCBmb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCBiMmI5NDRiYy4uZjE0MGEwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaApAQCAtMTMwOSw2ICsxMzA5LDkgQEAKICNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMzCiAjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM0ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNAogI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0JDNSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CQzYgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDM2CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfQkM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAzNworI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyX0FTXzMyXzMyXzMyXzMyICAgICAgICAgICAgIDB4MDAwMDAwMzgKICNkZWZpbmUgUl8wMzgwMTBfU1FfVEVYX1JFU09VUkNFX1dPUkQ0XzAgICAgICAgICAgICAgMHgwMzgwMTAKICNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKICNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCBkOTQ4MjY1Li45YmQxNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC05MDYsOSArOTA2LDkgQEAKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyNjAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmZXZlcmdyZWVuX2NzX3BhcnNlLAotCS5jb3B5X2JsaXQgPSBOVUxMLAotCS5jb3B5X2RtYSA9IE5VTEwsCi0JLmNvcHkgPSBOVUxMLAorCS5jb3B5X2JsaXQgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmZXZlcmdyZWVuX2NvcHlfYmxpdCwKKwkuY29weSA9ICZldmVyZ3JlZW5fY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLApAQCAtMTAyMCw2ICsxMDIwLDggQEAKIAkJcmRldi0+YXNpYyA9ICZldmVyZ3JlZW5fYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX1BBTE06CisJY2FzZSBDSElQX1NVTU86CisJY2FzZSBDSElQX1NVTU8yOgogCQlyZGV2LT5hc2ljID0gJnN1bW9fYXNpYzsKIAkJYnJlYWs7CiAJY2FzZSBDSElQX0JBUlRTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggOGMxOTE2OS4uZmFlMDBjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC0yMjgsNiArMjI4LDcgQEAKIAlwYXJzZXIuZmlscCA9IGZpbHA7CiAJcGFyc2VyLnJkZXYgPSByZGV2OwogCXBhcnNlci5kZXYgPSByZGV2LT5kZXY7CisJcGFyc2VyLmZhbWlseSA9IHJkZXYtPmZhbWlseTsKIAlyID0gcmFkZW9uX2NzX3BhcnNlcl9pbml0KCZwYXJzZXIsIGRhdGEpOwogCWlmIChyKSB7CiAJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxpemUgcGFyc2VyICFcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCA1YjYxMzY0Li5lNjgwNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtODIsNiArODIsOCBAQAogCSJDWVBSRVNTIiwKIAkiSEVNTE9DSyIsCiAJIlBBTE0iLAorCSJTVU1PIiwKKwkiU1VNTzIiLAogCSJCQVJUUyIsCiAJIlRVUktTIiwKIAkiQ0FJQ09TIiwKQEAgLTc1Miw2ICs3NTQsNyBAQAogCWRtYV9iaXRzID0gcmRldi0+bmVlZF9kbWEzMiA/IDMyIDogNDA7CiAJciA9IHBjaV9zZXRfZG1hX21hc2socmRldi0+cGRldiwgRE1BX0JJVF9NQVNLKGRtYV9iaXRzKSk7CiAJaWYgKHIpIHsKKwkJcmRldi0+bmVlZF9kbWEzMiA9IHRydWU7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInJhZGVvbjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCmluZGV4IGFlMjQ3ZWVjLi4yOTJmNzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC0yNjQsNiArMjY0LDggQEAKIAkJcmFkZW9uX2JvX3VucmVzZXJ2ZSh3b3JrLT5vbGRfcmJvKTsKIAl9IGVsc2UKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gcmVzZXJ2ZSBidWZmZXIgYWZ0ZXIgZmxpcFxuIik7CisKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmd29yay0+b2xkX3Jiby0+Z2VtX2Jhc2UpOwogCWtmcmVlKHdvcmspOwogfQogCkBAIC0zNzEsNiArMzczLDggQEAKIAluZXdfcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkvKiBzY2hlZHVsZSB1bnBpbiBvZiB0aGUgb2xkIGJ1ZmZlciAqLwogCW9iaiA9IG9sZF9yYWRlb25fZmItPm9iajsKKwkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHRoZSBvbGQgb2JqZWN0ICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CiAJcmJvID0gZ2VtX3RvX3JhZGVvbl9ibyhvYmopOwogCXdvcmstPm9sZF9yYm8gPSByYm87CiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCByYWRlb25fdW5waW5fd29ya19mdW5jKTsKQEAgLTM3OCwxMiArMzgyLDkgQEAKIAkvKiBXZSBib3Jyb3cgdGhlIGV2ZW50IHNwaW4gbG9jayBmb3IgcHJvdGVjdGluZyB1bnBpbl93b3JrICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCWlmIChyYWRlb25fY3J0Yy0+dW5waW5fd29yaykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKLQkJa2ZyZWUod29yayk7Ci0JCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwotCiAJCURSTV9ERUJVR19EUklWRVIoImZsaXAgcXVldWU6IGNydGMgYWxyZWFkeSBidXN5XG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJciA9IC1FQlVTWTsKKwkJZ290byB1bmxvY2tfZnJlZTsKIAl9CiAJcmFkZW9uX2NydGMtPnVucGluX3dvcmsgPSB3b3JrOwogCXJhZGVvbl9jcnRjLT5kZWZlcnJlZF9mbGlwX2NvbXBsZXRpb24gPSAwOwpAQCAtNDk3LDYgKzQ5OCw4IEBACiBwZmxpcF9jbGVhbnVwOgogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmV2ZW50X2xvY2ssIGZsYWdzKTsKIAlyYWRlb25fY3J0Yy0+dW5waW5fd29yayA9IE5VTEw7Cit1bmxvY2tfZnJlZToKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvbGRfcmFkZW9uX2ZiLT5vYmopOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCXJhZGVvbl9mZW5jZV91bnJlZigmZmVuY2UpOwogCWtmcmVlKHdvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCAxZDMzMDYwLi43M2RmYmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtMTEzLDcgKzExMyw3IEBACiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7Ci1pbnQgcmFkZW9uX2F1ZGlvID0gMTsKK2ludCByYWRlb25fYXVkaW8gPSAwOwogaW50IHJhZGVvbl9kaXNwX3ByaW9yaXR5ID0gMDsKIGludCByYWRlb25faHdfaTJjID0gMDsKIGludCByYWRlb25fcGNpZV9nZW4yID0gMDsKQEAgLTE1MSw3ICsxNTEsNyBAQAogTU9EVUxFX1BBUk1fREVTQyh0diwgIlRWIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQodHYsIHJhZGVvbl90diwgaW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CitNT0RVTEVfUEFSTV9ERVNDKGF1ZGlvLCAiQXVkaW8gZW5hYmxlICgxID0gZW5hYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGF1ZGlvLCByYWRlb25fYXVkaW8sIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZGlzcF9wcmlvcml0eSwgIkRpc3BsYXkgUHJpb3JpdHkgKDAgPSBhdXRvLCAxID0gbm9ybWFsLCAyID0gaGlnaCkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDFiNTU3NTUuLjAzZjEyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtOTU0LDEwICs5NTQsMTUgQEAKIAlpbnQgZHBfbGFuZV9jb3VudCA9IDA7CiAJaW50IGNvbm5lY3Rvcl9vYmplY3RfaWQgPSAwOwogCWludCBpZ3BfbGFuZV9pbmZvID0gMDsKKwlpbnQgZGlnX2VuY29kZXIgPSBkaWctPmRpZ19lbmNvZGVyOwogCi0JaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKQorCWlmIChhY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCkgewogCQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2Rlcl9pbml0KGVuY29kZXIpOwotCWVsc2UKKwkJLyoganVzdCBuZWVkZWQgdG8gYXZvaWQgYmFpbGluZyBpbiB0aGUgZW5jb2RlciBjaGVjay4gIHRoZSBlbmNvZGVyCisJCSAqIGlzbid0IHVzZWQgZm9yIGluaXQKKwkJICovCisJCWRpZ19lbmNvZGVyID0gMDsKKwl9IGVsc2UKIAkJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CiAKIAlpZiAoY29ubmVjdG9yKSB7CkBAIC05NzMsNyArOTc4LDcgQEAKIAl9CiAKIAkvKiBubyBkaWcgZW5jb2RlciBhc3NpZ25lZCAqLwotCWlmIChkaWctPmRpZ19lbmNvZGVyID09IC0xKQorCWlmIChkaWdfZW5jb2RlciA9PSAtMSkKIAkJcmV0dXJuOwogCiAJaWYgKGF0b21iaW9zX2dldF9lbmNvZGVyX21vZGUoZW5jb2RlcikgPT0gQVRPTV9FTkNPREVSX01PREVfRFApCkBAIC0xMDIzLDcgKzEwMjgsNyBAQAogCiAJCWlmIChkaWctPmxpbmtiKQogCQkJYXJncy52My5hY0NvbmZpZy51Y0xpbmtTZWwgPSAxOwotCQlpZiAoZGlnLT5kaWdfZW5jb2RlciAmIDEpCisJCWlmIChkaWdfZW5jb2RlciAmIDEpCiAJCQlhcmdzLnYzLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAKIAkJLyogU2VsZWN0IHRoZSBQTEwgZm9yIHRoZSBQSFkKQEAgLTEwNzMsNyArMTA3OCw3IEBACiAJCQkJYXJncy52My5hY0NvbmZpZy5mRHVhbExpbmtDb25uZWN0b3IgPSAxOwogCQl9CiAJfSBlbHNlIGlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCWFyZ3MudjIuYWNDb25maWcudWNFbmNvZGVyU2VsID0gZGlnLT5kaWdfZW5jb2RlcjsKKwkJYXJncy52Mi5hY0NvbmZpZy51Y0VuY29kZXJTZWwgPSBkaWdfZW5jb2RlcjsKIAkJaWYgKGRpZy0+bGlua2IpCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjTGlua1NlbCA9IDE7CiAKQEAgLTExMDAsNyArMTEwNSw3IEBACiAJfSBlbHNlIHsKIAkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMOwogCi0JCWlmIChkaWctPmRpZ19lbmNvZGVyKQorCQlpZiAoZGlnX2VuY29kZXIpCiAJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0RJRzJfRU5DT0RFUjsKIAkJZWxzZQogCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCmluZGV4IDZmMWQ5ZTUuLmVjMmYxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZhbWlseS5oCkBAIC04MSw2ICs4MSw4IEBACiAJQ0hJUF9DWVBSRVNTLAogCUNISVBfSEVNTE9DSywKIAlDSElQX1BBTE0sCisJQ0hJUF9TVU1PLAorCUNISVBfU1VNTzIsCiAJQ0hJUF9CQVJUUywKIAlDSElQX1RVUktTLAogCUNISVBfQ0FJQ09TLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggODZlZGExZS4uYWFhMTlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00ODcsNiArNDg3LDcgQEAKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjc3MDoKIAljYXNlIFRIRVJNQUxfVFlQRV9FVkVSR1JFRU46CisJY2FzZSBUSEVSTUFMX1RZUEVfTkk6CiAJY2FzZSBUSEVSTUFMX1RZUEVfU1VNTzoKIAkJcmRldi0+cG0uaW50X2h3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihyZGV2LT5kZXYpOwogCQlpZiAoSVNfRVJSKHJkZXYtPnBtLmludF9od21vbl9kZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKaW5kZXggOTJmMTkwMC4uZWE0OTc1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtNzU4LDYgKzc1OCw1IEBACiAweDAwMDA5NzE0IFZDX0VOSEFOQ0UKIDB4MDAwMDk4MzAgREJfREVCVUcKIDB4MDAwMDk4MzggREJfV0FURVJNQVJLUwotMHgwMDAyOEQyOCBEQl9TUkVTVUxUU19DT01QQVJFX1NUQVRFMAogMHgwMDAyOEQ0NCBEQl9BTFBIQV9UT19NQVNLCiAweDAwMDA5NzAwIFZDX0NOVEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwppbmRleCBkZTNkMjQ2Li44NWU5Mzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKKysrIGIvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJICogSWYgdGhlIFRqTWF4IGlzIG5vdCBwbGF1c2libGUsIGFuIGFzc3VtcHRpb24KIAkJICogd2lsbCBiZSB1c2VkCiAJCSAqLwotCQlpZiAodmFsID4gODAgJiYgdmFsIDwgMTIwKSB7CisJCWlmICh2YWwpIHsKIAkJCWRldl9pbmZvKGRldiwgIlRqTWF4IGlzICVkIEMuXG4iLCB2YWwpOwogCQkJcmV0dXJuIHZhbCAqIDEwMDA7CiAJCX0KQEAgLTMwNCwyNCArMzA0LDkgQEAKIAogCS8qCiAJICogQW4gYXNzdW1wdGlvbiBpcyBtYWRlIGZvciBlYXJseSBDUFVzIGFuZCB1bnJlYWRhYmxlIE1TUi4KLQkgKiBOT1RFOiB0aGUgZ2l2ZW4gdmFsdWUgbWF5IG5vdCBiZSBjb3JyZWN0LgorCSAqIE5PVEU6IHRoZSBjYWxjdWxhdGVkIHZhbHVlIG1heSBub3QgYmUgY29ycmVjdC4KIAkgKi8KLQotCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7Ci0JY2FzZSAweGU6Ci0JY2FzZSAweGY6Ci0JY2FzZSAweDE2OgotCWNhc2UgMHgxYToKLQkJZGV2X3dhcm4oZGV2LCAiVGpNYXggaXMgYXNzdW1lZCBhcyAxMDAgQyFcbiIpOwotCQlyZXR1cm4gMTAwMDAwOwotCWNhc2UgMHgxNzoKLQljYXNlIDB4MWM6CQkvKiBBdG9tIENQVXMgKi8KLQkJcmV0dXJuIGFkanVzdF90am1heChjLCBpZCwgZGV2KTsKLQlkZWZhdWx0OgotCQlkZXZfd2FybihkZXYsICJDUFUgKG1vZGVsPTB4JXgpIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LCIKLQkJCSIgdXNpbmcgZGVmYXVsdCBUak1heCBvZiAxMDBDLlxuIiwgYy0+eDg2X21vZGVsKTsKLQkJcmV0dXJuIDEwMDAwMDsKLQl9CisJcmV0dXJuIGFkanVzdF90am1heChjLCBpZCwgZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGdldF91Y29kZV9yZXZfb25fY3B1KHZvaWQgKmVkeCkKQEAgLTM0MSw3ICszMjYsNyBAQAogCWVyciA9IHJkbXNyX3NhZmVfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEVNUEVSQVRVUkVfVEFSR0VULCAmZWF4LCAmZWR4KTsKIAlpZiAoIWVycikgewogCQl2YWwgPSAoZWF4ID4+IDE2KSAmIDB4ZmY7Ci0JCWlmICh2YWwgPiA4MCAmJiB2YWwgPCAxMjApCisJCWlmICh2YWwpCiAJCQlyZXR1cm4gdmFsICogMTAwMDsKIAl9CiAJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlYWQgUGtnLVRqTWF4IGZyb20gQ1BVOiV1XG4iLCBjcHUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9tYXg2NjQyLmMgYi9kcml2ZXJzL2h3bW9uL21heDY2NDIuYwppbmRleCAwZjlmYzQwLi5lODU1ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL21heDY2NDIuYworKysgYi9kcml2ZXJzL2h3bW9uL21heDY2NDIuYwpAQCAtMTM2LDE1ICsxMzYsMjkgQEAKIAlpZiAobWFuX2lkICE9IDB4NEQpCiAJCXJldHVybiAtRU5PREVWOwogCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDQpICE9IDB4NEQKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHgwNikgIT0gMHg0RAorCSAgICB8fCBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweGZmKSAhPSAweDREKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCS8qCiAJICogV2UgcmVhZCB0aGUgY29uZmlnIGFuZCBzdGF0dXMgcmVnaXN0ZXIsIHRoZSA0IGxvd2VyIGJpdHMgaW4gdGhlCiAJICogY29uZmlnIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJvIGFuZCBiaXQgNSwgMywgMSBhbmQgMCBzaG91bGQgYmUKIAkgKiB6ZXJvIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIuCiAJICovCiAJcmVnX2NvbmZpZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE1BWDY2NDJfUkVHX1JfQ09ORklHKTsKKwlpZiAoKHJlZ19jb25maWcgJiAweDBmKSAhPSAweDAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGluIGJldHdlZW4sIGFub3RoZXIgcm91bmQgb2Ygc2FuaXR5IGNoZWNrcyAqLworCWlmIChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDA0KSAhPSByZWdfY29uZmlnCisJICAgIHx8IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDYpICE9IHJlZ19jb25maWcKKwkgICAgfHwgaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgMHhmZikgIT0gcmVnX2NvbmZpZykKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZWdfc3RhdHVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTUFYNjY0Ml9SRUdfUl9TVEFUVVMpOwotCWlmICgoKHJlZ19jb25maWcgJiAweDBmKSAhPSAweDAwKSB8fAotCSAgICAoKHJlZ19zdGF0dXMgJiAweDJiKSAhPSAweDAwKSkKKwlpZiAoKHJlZ19zdGF0dXMgJiAweDJiKSAhPSAweDAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXN0cmxjcHkoaW5mby0+dHlwZSwgIm1heDY2NDIiLCBJMkNfTkFNRV9TSVpFKTsKQEAgLTI0Niw3ICsyNjAsNyBAQAogCQkJICAgIHNldF90ZW1wX21heCwgMCwgTUFYNjY0Ml9SRUdfV19MT0NBTF9ISUdIKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LAogCQkJICAgIHNldF90ZW1wX21heCwgMSwgTUFYNjY0Ml9SRUdfV19SRU1PVEVfSElHSCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXBfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CiAKQEAgLTI1Niw3ICsyNzAsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKIAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfZmF1bHQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCiAJTlVMTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCAxNDRkMjcyLi4wNGIwOTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtNzc4LDcgKzc3OCw4IEBACiAJCQkJCXNlY3Rvcl90IGJsb2NrKQogewogCXN0cnVjdCBpZGVfY21kIGNtZDsKLQlpbnQgdXB0b2RhdGUgPSAwLCBuc2VjdG9yczsKKwlpbnQgdXB0b2RhdGUgPSAwOworCXVuc2lnbmVkIGludCBuc2VjdG9yczsKIAogCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgImNtZDogMHgleCwgYmxvY2s6ICVsbHUiLAogCQkJCSAgcnEtPmNtZFswXSwgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCAzY2NiZmYxLi43MWE4ZWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTI4Myw2ICsyODMsNyBAQAogCV9xdWV1ZV9kYXRhKCZkY2gtPmRldi5ELCBNUEhfSU5GT1JNQVRJT05fSU5ELCBNSVNETl9JRF9BTlksCiAJCXNpemVvZihzdHJ1Y3QgcGhfaW5mb19kY2gpICsgZGNoLT5kZXYubnJiY2hhbiAqCiAJCXNpemVvZihzdHJ1Y3QgcGhfaW5mb19jaCksIHBoaSwgR0ZQX0FUT01JQyk7CisJa2ZyZWUocGhpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FueXNlZS5jCmluZGV4IDRkYzFjYTMuLjdjMzI3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYW55c2VlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hbnlzZWUuYwpAQCAtNjAsOCArNjAsNiBAQAogCWludCBhY3RfbGVuLCByZXQ7CiAJdTggYnVmWzY0XTsKIAotCWlmIChzbGVuID4gc2l6ZW9mKGJ1ZikpCi0JCXNsZW4gPSBzaXplb2YoYnVmKTsKIAltZW1jcHkoJmJ1ZlswXSwgc2J1Ziwgc2xlbik7CiAJYnVmWzYwXSA9IHN0YXRlLT5zZXErKzsKIApAQCAtMTgwLDMwICsxNzgsMzcgQEAKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOwogCWludCByZXQgPSAwLCBpbmMsIGkgPSAwOworCXU4IGJ1Zls1Ml07IC8qIDQgKyA0OCAoSTJDIFdSIFVTQiBjb21tYW5kIGhlYWRlciArIEkyQyBXUiBtYXgpICovCiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAl3aGlsZSAoaSA8IG51bSkgewogCQlpZiAobnVtID4gaSArIDEgJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7Ci0JCQl1OCBidWZbNl07CisJCQlpZiAobXNnW2ldLmxlbiA+IDIgfHwgbXNnW2krMV0ubGVuID4gNjApIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfUkVBRDsKIAkJCWJ1ZlsxXSA9IChtc2dbaV0uYWRkciA8PCAxKSB8IDB4MDE7CiAJCQlidWZbMl0gPSBtc2dbaV0uYnVmWzBdOwogCQkJYnVmWzNdID0gbXNnW2ldLmJ1ZlsxXTsKIAkJCWJ1Zls0XSA9IG1zZ1tpXS5sZW4tMTsKIAkJCWJ1Zls1XSA9IG1zZ1tpKzFdLmxlbjsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBtc2dbaSsxXS5idWYsCisJCQlyZXQgPSBhbnlzZWVfY3RybF9tc2coZCwgYnVmLCA2LCBtc2dbaSsxXS5idWYsCiAJCQkJbXNnW2krMV0ubGVuKTsKIAkJCWluYyA9IDI7CiAJCX0gZWxzZSB7Ci0JCQl1OCBidWZbNCttc2dbaV0ubGVuXTsKKwkJCWlmIChtc2dbaV0ubGVuID4gNDgpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlicmVhazsKKwkJCX0KIAkJCWJ1ZlswXSA9IENNRF9JMkNfV1JJVEU7CiAJCQlidWZbMV0gPSAobXNnW2ldLmFkZHIgPDwgMSk7CiAJCQlidWZbMl0gPSBtc2dbaV0ubGVuOwogCQkJYnVmWzNdID0gMHgwMTsKIAkJCW1lbWNweSgmYnVmWzRdLCBtc2dbaV0uYnVmLCBtc2dbaV0ubGVuKTsKLQkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIHNpemVvZihidWYpLCBOVUxMLCAwKTsKKwkJCXJldCA9IGFueXNlZV9jdHJsX21zZyhkLCBidWYsIDQgKyBtc2dbaV0ubGVuLCBOVUxMLCAwKTsKIAkJCWluYyA9IDE7CiAJCX0KIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvbWVkaWEtZGV2bm9kZS5jIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKaW5kZXggYWY1MjYzYy4uN2I0MmFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9tZWRpYS1kZXZub2RlLmMKQEAgLTIxMywxNCArMjEzLDE0IEBACiAKIAkvKiBQYXJ0IDE6IEZpbmQgYSBmcmVlIG1pbm9yIG51bWJlciAqLwogCW11dGV4X2xvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7Ci0JbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCAwLCBNRURJQV9OVU1fREVWSUNFUyk7CisJbWlub3IgPSBmaW5kX25leHRfemVyb19iaXQobWVkaWFfZGV2bm9kZV9udW1zLCBNRURJQV9OVU1fREVWSUNFUywgMCk7CiAJaWYgKG1pbm9yID09IE1FRElBX05VTV9ERVZJQ0VTKSB7CiAJCW11dGV4X3VubG9jaygmbWVkaWFfZGV2bm9kZV9sb2NrKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJjb3VsZCBub3QgZ2V0IGEgZnJlZSBtaW5vclxuIik7CiAJCXJldHVybiAtRU5GSUxFOwogCX0KIAotCXNldF9iaXQobWRldi0+bWlub3IsIG1lZGlhX2Rldm5vZGVfbnVtcyk7CisJc2V0X2JpdChtaW5vciwgbWVkaWFfZGV2bm9kZV9udW1zKTsKIAltdXRleF91bmxvY2soJm1lZGlhX2Rldm5vZGVfbG9jayk7CiAKIAltZGV2LT5taW5vciA9IG1pbm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKaW5kZXggMjM1NDMzNi4uOTM0MTg1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxzdGFnaW5nL2FsdGVyYS5oPgogCisjaW5jbHVkZSAiLi4vLi4vLi4vc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmgiCiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgInR1bmVyLXhjMjAyOC5oIgogI2luY2x1ZGUgIm5ldHVwLWluaXQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29hcnNlX2V4cG9fYXV0b2dhaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNiOWQ5NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvYXJzZV9leHBvX2F1dG9nYWluLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIEF1dG8gZ2FpbiBhbGdvcml0aG0gZm9yIGNhbWVyYSdzIHdpdGggYSBjb2Fyc2UgZXhwb3N1cmUgY29udHJvbAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0vKiBBdXRvZ2FpbiArIGV4cG9zdXJlIGFsZ29yaXRobSBmb3IgY2FtZXJhcyB3aXRoIGEgY29hcnNlIGV4cG9zdXJlIGNvbnRyb2wKLSAgICh1c3VhbGx5IHRoaXMgbWVhbnMgd2UgY2FuIG9ubHkgY29udHJvbCB0aGUgY2xvY2tkaXYgdG8gY2hhbmdlIGV4cG9zdXJlKQotICAgQXMgY2hhbmdpbmcgdGhlIGNsb2NrZGl2IHNvIHRoYXQgdGhlIGZwcyBkcm9wcyBmcm9tIDMwIHRvIDE1IGZwcyBmb3IKLSAgIGV4YW1wbGUsIHdpbGwgbGVhZCB0byBhIGh1Z2UgZXhwb3N1cmUgY2hhbmdlIChpdCBlZmZlY3RpdmVseSBkb3VibGVzKSwKLSAgIHRoaXMgYWxnb3JpdGhtIG5vcm1hbGx5IHRyaWVzIHRvIG9ubHkgYWRqdXN0IHRoZSBnYWluIChiZXR3ZWVuIDQwIGFuZAotICAgODAgJSkgYW5kIGlmIHRoYXQgZG9lcyBub3QgaGVscCwgb25seSB0aGVuIGNoYW5nZXMgZXhwb3N1cmUuIFRoaXMgbGVhZHMKLSAgIHRvIGEgbXVjaCBtb3JlIHN0YWJsZSBpbWFnZSB0aGVuIHVzaW5nIHRoZSBrbmVlIGFsZ29yaXRobSB3aGljaCBhdAotICAgY2VydGFpbiBwb2ludHMgb2YgdGhlIGtuZWUgZ3JhcGggd2lsbCBvbmx5IHRyeSB0byBhZGp1c3QgZXhwb3N1cmUsCi0gICB3aGljaCBsZWFkcyB0byBvc2NpbGF0aW5nIGFzIG9uZSBleHBvc3VyZSBzdGVwIGlzIGh1Z2UuCi0KLSAgIE5vdGUgdGhpcyBhc3N1bWVzIHRoYXQgdGhlIHNkIHN0cnVjdCBmb3IgdGhlIGNhbSBpbiBxdWVzdGlvbiBoYXMKLSAgIGV4cF90b29faGlnaF9jbnQgYW5kIGV4cF90b29faGlnaF9jbnQgaW50IG1lbWJlcnMgZm9yIHVzZSBieSB0aGlzIGZ1bmN0aW9uLgotCi0gICBSZXR1cm5zIDAgaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUsIDEgaWYgdGhlIGdhaW4gYW5kIG9yIGV4cG9zdXJlIHNldHRpbmdzCi0gICB3aGVyZSBjaGFuZ2VkLiAqLwotc3RhdGljIGludCBnc3BjYV9jb2Fyc2VfZ3JhaW5lZF9leHBvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQlpbnQgYXZnX2x1bSwgaW50IGRlc2lyZWRfYXZnX2x1bSwgaW50IGRlYWR6b25lKQotewotCWludCBpLCBzdGVwcywgZ2Fpbiwgb3JpZ19nYWluLCBleHBvc3VyZSwgb3JpZ19leHBvc3VyZTsKLQlpbnQgZ2Fpbl9sb3csIGdhaW5faGlnaDsKLQljb25zdCBzdHJ1Y3QgY3RybCAqZ2Fpbl9jdHJsID0gTlVMTDsKLQljb25zdCBzdHJ1Y3QgY3RybCAqZXhwb3N1cmVfY3RybCA9IE5VTEw7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXR2YWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGdzcGNhX2Rldi0+c2RfZGVzYy0+bmN0cmxzOyBpKyspIHsKLQkJaWYgKGdzcGNhX2Rldi0+Y3RybF9kaXMgJiAoMSA8PCBpKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5jdHJsc1tpXS5xY3RybC5pZCA9PSBWNEwyX0NJRF9HQUlOKQotCQkJZ2Fpbl9jdHJsID0gJmdzcGNhX2Rldi0+c2RfZGVzYy0+Y3RybHNbaV07Ci0JCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldLnFjdHJsLmlkID09IFY0TDJfQ0lEX0VYUE9TVVJFKQotCQkJZXhwb3N1cmVfY3RybCA9ICZnc3BjYV9kZXYtPnNkX2Rlc2MtPmN0cmxzW2ldOwotCX0KLQlpZiAoIWdhaW5fY3RybCB8fCAhZXhwb3N1cmVfY3RybCkgewotCQlQREVCVUcoRF9FUlIsICJFcnJvcjogZ3NwY2FfY29hcnNlX2dyYWluZWRfZXhwb19hdXRvZ2FpbiAiCi0JCQkiY2FsbGVkIG9uIGNhbSB3aXRob3V0IGdhaW4gb3IgZXhwb3N1cmUiKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKGdhaW5fY3RybC0+Z2V0KGdzcGNhX2RldiwgJmdhaW4pIHx8Ci0JICAgIGV4cG9zdXJlX2N0cmwtPmdldChnc3BjYV9kZXYsICZleHBvc3VyZSkpCi0JCXJldHVybiAwOwotCi0Jb3JpZ19nYWluID0gZ2FpbjsKLQlvcmlnX2V4cG9zdXJlID0gZXhwb3N1cmU7Ci0JZ2Fpbl9sb3cgPQotCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiAyOwotCWdhaW5fbG93ICs9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKLQlnYWluX2hpZ2ggPQotCQkoZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtIC0gZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKSAvIDUgKiA0OwotCWdhaW5faGlnaCArPSBnYWluX2N0cmwtPnFjdHJsLm1pbmltdW07Ci0KLQkvKiBJZiB3ZSBhcmUgb2YgYSBtdWx0aXBsZSBvZiBkZWFkem9uZSwgZG8gbXVsdGlwbGUgc3RlcHMgdG8gcmVhY2ggdGhlCi0JICAgZGVzaXJlZCBsdW1pbmF0aW9uIGZhc3QgKHdpdGggdGhlIHJpc2Mgb2YgYSBzbGlnaHQgb3ZlcnNob290KSAqLwotCXN0ZXBzID0gKGRlc2lyZWRfYXZnX2x1bSAtIGF2Z19sdW0pIC8gZGVhZHpvbmU7Ci0KLQlQREVCVUcoRF9GUkFNLCAiYXV0b2dhaW46IGx1bTogJWQsIGRlc2lyZWQ6ICVkLCBzdGVwczogJWQiLAotCQlhdmdfbHVtLCBkZXNpcmVkX2F2Z19sdW0sIHN0ZXBzKTsKLQotCWlmICgoZ2FpbiArIHN0ZXBzKSA+IGdhaW5faGlnaCAmJgotCSAgICBzZC0+ZXhwb3N1cmUgPCBleHBvc3VyZV9jdHJsLT5xY3RybC5tYXhpbXVtKSB7Ci0JCWdhaW4gPSBnYWluX2hpZ2g7Ci0JCXNkLT5leHBfdG9vX2xvd19jbnQrKzsKLQl9IGVsc2UgaWYgKChnYWluICsgc3RlcHMpIDwgZ2Fpbl9sb3cgJiYKLQkJICAgc2QtPmV4cG9zdXJlID4gZXhwb3N1cmVfY3RybC0+cWN0cmwubWluaW11bSkgewotCQlnYWluID0gZ2Fpbl9sb3c7Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250Kys7Ci0JfSBlbHNlIHsKLQkJZ2FpbiArPSBzdGVwczsKLQkJaWYgKGdhaW4gPiBnYWluX2N0cmwtPnFjdHJsLm1heGltdW0pCi0JCQlnYWluID0gZ2Fpbl9jdHJsLT5xY3RybC5tYXhpbXVtOwotCQllbHNlIGlmIChnYWluIDwgZ2Fpbl9jdHJsLT5xY3RybC5taW5pbXVtKQotCQkJZ2FpbiA9IGdhaW5fY3RybC0+cWN0cmwubWluaW11bTsKLQkJc2QtPmV4cF90b29faGlnaF9jbnQgPSAwOwotCQlzZC0+ZXhwX3Rvb19sb3dfY250ID0gMDsKLQl9Ci0KLQlpZiAoc2QtPmV4cF90b29faGlnaF9jbnQgPiAzKSB7Ci0JCWV4cG9zdXJlLS07Ci0JCXNkLT5leHBfdG9vX2hpZ2hfY250ID0gMDsKLQl9IGVsc2UgaWYgKHNkLT5leHBfdG9vX2xvd19jbnQgPiAzKSB7Ci0JCWV4cG9zdXJlKys7Ci0JCXNkLT5leHBfdG9vX2xvd19jbnQgPSAwOwotCX0KLQotCWlmIChnYWluICE9IG9yaWdfZ2FpbikgewotCQlnYWluX2N0cmwtPnNldChnc3BjYV9kZXYsIGdhaW4pOwotCQlyZXR2YWwgPSAxOwotCX0KLQlpZiAoZXhwb3N1cmUgIT0gb3JpZ19leHBvc3VyZSkgewotCQlleHBvc3VyZV9jdHJsLT5zZXQoZ3NwY2FfZGV2LCBleHBvc3VyZSk7Ci0JCXJldHZhbCA9IDE7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwppbmRleCAzNmE0NmZjLi4wNTdlMjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCkBAIC02MDksNyArNjA5LDcgQEAKICAqIGJ1ZmZlcnMsIHRoZXJlIGFyZSBzb21lIHByZXR0eSBzdHJpY3QgcmVhbCB0aW1lIGNvbnN0cmFpbnRzIGZvcgogICogaXNvY2hyb25vdXMgdHJhbnNmZXIgZm9yIGxhcmdlciBmcmFtZSBzaXplcykuCiAgKi8KLS8qamZtOiB0aGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIDE2MDB4MTIwMCwgYnV0IG5vdCA4MDB4NjAwIC0gc2VlIGlzb2NfaW5pdCAqLworLypqZm06IHRoaXMgdmFsdWUgZG9lcyBub3Qgd29yayBmb3IgODAweDYwMCAtIHNlZSBpc29jX2luaXQgKi8KICNkZWZpbmUgT1ZGWDJfQlVMS19TSVpFICgxMyAqIDQwOTYpCiAKIC8qIEkyQyByZWdpc3RlcnMgKi8KQEAgLTMzMDcsNiArMzMwNyw3IEBACiAKIAlnc3BjYV9kZXYtPmNhbS5jdHJscyA9IHNkLT5jdHJsczsKIAlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOworCXNkLT5mcmFtZV9yYXRlID0gMTU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NjksNyArMzQ3MCw2IEBACiAJCQkJQVJSQVlfU0laRShpbml0XzUxOV9vdjc2NjApKTsKIAkJd3JpdGVfaTJjX3JlZ3ZhbHMoc2QsIG5vcm1fNzY2MCwgQVJSQVlfU0laRShub3JtXzc2NjApKTsKIAkJc2QtPmdzcGNhX2Rldi5jdXJyX21vZGUgPSAxOwkvKiA2NDB4NDgwICovCi0JCXNkLT5mcmFtZV9yYXRlID0gMTU7CiAJCW92NTE5X3NldF9tb2RlKHNkKTsKIAkJb3Y1MTlfc2V0X2ZyKHNkKTsKIAkJc2QtPmN0cmxzW0NPTE9SU10ubWF4ID0gNDsJLyogMC4uNCAqLwpAQCAtMzUxMSw3ICszNTExLDcgQEAKIAogCXN3aXRjaCAoc2QtPmJyaWRnZSkgewogCWNhc2UgQlJJREdFX09WRlgyOgotCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCA9PSAxNjAwKQorCQlpZiAoZ3NwY2FfZGV2LT53aWR0aCAhPSA4MDApCiAJCQlnc3BjYV9kZXYtPmNhbS5idWxrX3NpemUgPSBPVkZYMl9CVUxLX1NJWkU7CiAJCWVsc2UKIAkJCWdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSA9IDcgKiA0MDk2OwpAQCAtNDQ3OCw3ICs0NDc4LDcgQEAKIAlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGRhdGEsIGxlbik7CiAKIAkvKiBBIHNob3J0IHJlYWQgc2lnbmFscyBFT0YgKi8KLQlpZiAobGVuIDwgT1ZGWDJfQlVMS19TSVpFKSB7CisJaWYgKGxlbiA8IGdzcGNhX2Rldi0+Y2FtLmJ1bGtfc2l6ZSkgewogCQkvKiBJZiB0aGUgZnJhbWUgaXMgc2hvcnQsIGFuZCBpdCBpcyBvbmUgb2YgdGhlIGZpcnN0IG9uZXMKIAkJICAgdGhlIHNlbnNvciBhbmQgYnJpZGdlIGFyZSBzdGlsbCBzeW5jaW5nLCBzbyBkcm9wIGl0LiAqLwogCQlpZiAoc2QtPmZpcnN0X2ZyYW1lKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYwppbmRleCA2NDE1YWZmLi44MWI4YTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogCXUzMiBwa3RzejsJCQkvKiAodXNlZCBieSBwa3Rfc2NhbikgKi8KIAl1MTYgbnBrdDsKLQl1OCBuY2hnOworCXM4IG5jaGc7CiAJczggc2hvcnRfbWFyazsKIAogCXU4IHF1YWxpdHk7CQkJLyogaW1hZ2UgcXVhbGl0eSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCmluZGV4IGI1MzhkY2UuLmExNGE4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogI2RlZmluZSBIRENTX1NMRUVQX01PREUJCSgxIDw8IDEpCiAKICNkZWZpbmUgSERDU19ERUZBVUxUX0VYUE9TVVJFCTQ4Ci0jZGVmaW5lIEhEQ1NfREVGQVVMVF9HQUlOCTEyOAorI2RlZmluZSBIRENTX0RFRkFVTFRfR0FJTgk1MAogCiBzdGF0aWMgaW50IGhkY3NfcHJvYmVfMXgwMChzdHJ1Y3Qgc2QgKnNkKTsKIHN0YXRpYyBpbnQgaGRjc19wcm9iZV8xMDIwKHN0cnVjdCBzZCAqc2QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCBhNGU0ZGZkLi4wZmI3NTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMTMyOCw2ICsxMzI4LDggQEAKIAlpZiAoIWl0di0+aGFzX2N4MjM0MTUpCiAJCXdyaXRlX3JlZ19zeW5jKDB4MDMsIElWVFZfUkVHX0RNQUNPTlRST0wpOwogCisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCAmaXR2LT50dW5lcl9zdGQpOworCiAJLyogRGVmYXVsdCBpbnRlcnJ1cHRzIGVuYWJsZWQuIEZvciB0aGUgUFZSMzUwIHRoaXMgaW5jbHVkZXMgdGhlCiAJICAgZGVjb2RlciBWU1lOQyBpbnRlcnJ1cHQsIHdoaWNoIGlzIGFsd2F5cyBvbi4gSXQgaXMgbm90IG9ubHkgdXNlZAogCSAgIGR1cmluZyBkZWNvZGluZyBidXQgYWxzbyBieSB0aGUgT1NELgpAQCAtMTMzNiwxMiArMTMzOCwxMCBAQAogCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7CiAJCWl2dHZfY2xlYXJfaXJxX21hc2soaXR2LCBJVlRWX0lSUV9NQVNLX0lOSVQgfCBJVlRWX0lSUV9ERUNfVlNZTkMpOwogCQlpdnR2X3NldF9vc2RfYWxwaGEoaXR2KTsKLQl9Ci0JZWxzZQorCQlpdnR2X3Nfc3RkX2RlYyhpdHYsICZpdHYtPnR1bmVyX3N0ZCk7CisJfSBlbHNlIHsKIAkJaXZ0dl9jbGVhcl9pcnFfbWFzayhpdHYsIElWVFZfSVJRX01BU0tfSU5JVCk7Ci0KLQkvKiBGb3IgY2FyZHMgd2l0aCB2aWRlbyBvdXQsIHRoaXMgY2FsbCBuZWVkcyBpbnRlcnJ1cHRzIGVuYWJsZWQgKi8KLQlpdnR2X3Nfc3RkKE5VTEwsICZmaCwgJml0di0+dHVuZXJfc3RkKTsKKwl9CiAKIAkvKiBTZXR1cCBpbml0aWFsIGNvbnRyb2xzICovCiAJY3gyMzQxeF9oYW5kbGVyX3NldHVwKCZpdHYtPmN4aGRsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCmluZGV4IDE0YTFjZWEuLjAyYzVhZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYwpAQCAtMjgwLDggKzI4MCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAl2NGwyX3N0ZF9pZCBzdGQ7Ci0Jc3RydWN0IGl2dHZfb3Blbl9pZCBmaDsKLQlmaC5pdHYgPSBpdHY7CiAKIAlpZiAoaXR2LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCkKIAkJLyogRGlzcGxheSB0ZXN0IGltYWdlIGR1cmluZyByZXN0YXJ0ICovCkBAIC0zMDEsMTQgKzI5OSwxOSBAQAogCS8qIEFsbG93IHNldHRpbmdzIHRvIHJlbG9hZCAqLwogCWl2dHZfbWFpbGJveF9jYWNoZV9pbnZhbGlkYXRlKGl0dik7CiAKLQkvKiBSZXN0b3JlIHZpZGVvIHN0YW5kYXJkICovCisJLyogUmVzdG9yZSBlbmNvZGVyIHZpZGVvIHN0YW5kYXJkICovCiAJc3RkID0gaXR2LT5zdGQ7CiAJaXR2LT5zdGQgPSAwOwotCWl2dHZfc19zdGQoTlVMTCwgJmZoLCAmc3RkKTsKKwlpdnR2X3Nfc3RkX2VuYyhpdHYsICZzdGQpOwogCiAJaWYgKGl0di0+djRsMl9jYXAgJiBWNEwyX0NBUF9WSURFT19PVVRQVVQpIHsKIAkJaXZ0dl9pbml0X21wZWdfZGVjb2RlcihpdHYpOwogCisJCS8qIFJlc3RvcmUgZGVjb2RlciB2aWRlbyBzdGFuZGFyZCAqLworCQlzdGQgPSBpdHYtPnN0ZF9vdXQ7CisJCWl0di0+c3RkX291dCA9IDA7CisJCWl2dHZfc19zdGRfZGVjKGl0diwgJnN0ZCk7CisKIAkJLyogUmVzdG9yZSBmcmFtZWJ1ZmZlciBpZiBhY3RpdmUgKi8KIAkJaWYgKGl0di0+aXZ0dmZiX3Jlc3RvcmUpCiAJCQlpdHYtPml2dHZmYl9yZXN0b3JlKGl0dik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCAxNjg5NzgzLi5mOWUzNDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTEwNzEsMjggKzEwNzEsOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpCit2b2lkIGl2dHZfc19zdGRfZW5jKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpCiB7Ci0JREVGSU5FX1dBSVQod2FpdCk7Ci0Jc3RydWN0IGl2dHYgKml0diA9IGZoMmlkKGZoKS0+aXR2OwotCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKLQlpbnQgZjsKLQotCWlmICgoKnN0ZCAmIFY0TDJfU1REX0FMTCkgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKnN0ZCA9PSBpdHYtPnN0ZCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAodGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgfHwKLQkgICAgYXRvbWljX3JlYWQoJml0di0+Y2FwdHVyaW5nKSA+IDAgfHwKLQkgICAgYXRvbWljX3JlYWQoJml0di0+ZGVjb2RpbmcpID4gMCkgewotCQkvKiBTd2l0Y2hpbmcgc3RhbmRhcmQgd291bGQgdHVybiBvZmYgdGhlIHJhZGlvIG9yIG1lc3MKLQkJICAgd2l0aCBhbHJlYWR5IHJ1bm5pbmcgc3RyZWFtcywgcHJldmVudCB0aGF0IGJ5Ci0JCSAgIHJldHVybmluZyBFQlVTWS4gKi8KLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KIAlpdHYtPnN0ZCA9ICpzdGQ7CiAJaXR2LT5pc182MGh6ID0gKCpzdGQgJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDA7CiAJaXR2LT5pc181MGh6ID0gIWl0di0+aXNfNjBoejsKQEAgLTExMDYsNDggKzEwODYsNzkgQEAKIAlpZiAoaXR2LT5od19mbGFncyAmIElWVFZfSFdfQ1gyNTg0MCkKIAkJaXR2LT52Ymkuc2xpY2VkX2RlY29kZXJfbGluZV9zaXplID0gaXR2LT5pc182MGh6ID8gMjcyIDogMjg0OwogCi0JSVZUVl9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaXR2LT5zdGQpOwotCiAJLyogVHVuZXIgKi8KIAlpdnR2X2NhbGxfYWxsKGl0diwgY29yZSwgc19zdGQsIGl0di0+c3RkKTsKK30KIAotCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSB7Ci0JCS8qIHNldCBkaXNwbGF5IHN0YW5kYXJkICovCi0JCWl0di0+c3RkX291dCA9ICpzdGQ7Ci0JCWl0di0+aXNfb3V0XzYwaHogPSBpdHYtPmlzXzYwaHo7Ci0JCWl0di0+aXNfb3V0XzUwaHogPSBpdHYtPmlzXzUwaHo7Ci0JCWl2dHZfY2FsbF9hbGwoaXR2LCB2aWRlbywgc19zdGRfb3V0cHV0LCBpdHYtPnN0ZF9vdXQpOwordm9pZCBpdnR2X3Nfc3RkX2RlYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCB5dXZfcGxheWJhY2tfaW5mbyAqeWkgPSAmaXR2LT55dXZfaW5mbzsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgZjsKIAotCQkvKgotCQkgKiBUaGUgbmV4dCBmaXJtd2FyZSBjYWxsIGlzIHRpbWUgc2Vuc2l0aXZlLiBUaW1lIGl0IHRvCi0JCSAqIGF2b2lkIHJpc2sgb2YgYSBoYXJkIGxvY2ssIGJ5IHRyeWluZyB0byBlbnN1cmUgdGhlIGNhbGwKLQkJICogaGFwcGVucyB3aXRoaW4gdGhlIGZpcnN0IDEwMCBsaW5lcyBvZiB0aGUgdG9wIGZpZWxkLgotCQkgKiBNYWtlIDQgYXR0ZW1wdHMgdG8gc3luYyB0byB0aGUgZGVjb2RlciBiZWZvcmUgZ2l2aW5nIHVwLgotCQkgKi8KLQkJZm9yIChmID0gMDsgZiA8IDQ7IGYrKykgewotCQkJcHJlcGFyZV90b193YWl0KCZpdHYtPnZzeW5jX3dhaXRxLCAmd2FpdCwKLQkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJaWYgKChyZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTYpIDwgMTAwKQotCQkJCWJyZWFrOwotCQkJc2NoZWR1bGVfdGltZW91dChtc2Vjc190b19qaWZmaWVzKDI1KSk7Ci0JCX0KLQkJZmluaXNoX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0KTsKKwkvKiBzZXQgZGlzcGxheSBzdGFuZGFyZCAqLworCWl0di0+c3RkX291dCA9ICpzdGQ7CisJaXR2LT5pc19vdXRfNjBoeiA9ICgqc3RkICYgVjRMMl9TVERfNTI1XzYwKSA/IDEgOiAwOworCWl0di0+aXNfb3V0XzUwaHogPSAhaXR2LT5pc19vdXRfNjBoejsKKwlpdnR2X2NhbGxfYWxsKGl0diwgdmlkZW8sIHNfc3RkX291dHB1dCwgaXR2LT5zdGRfb3V0KTsKIAotCQlpZiAoZiA9PSA0KQotCQkJSVZUVl9XQVJOKCJNb2RlIGNoYW5nZSBmYWlsZWQgdG8gc3luYyB0byBkZWNvZGVyXG4iKTsKLQotCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX0RFQ19TRVRfU1RBTkRBUkQsIDEsIGl0di0+aXNfb3V0XzUwaHopOwotCQlpdHYtPm1haW5fcmVjdC5sZWZ0ID0gaXR2LT5tYWluX3JlY3QudG9wID0gMDsKLQkJaXR2LT5tYWluX3JlY3Qud2lkdGggPSA3MjA7Ci0JCWl0di0+bWFpbl9yZWN0LmhlaWdodCA9IGl0di0+Y3hoZGwuaGVpZ2h0OwotCQlpdnR2X3ZhcGkoaXR2LCBDWDIzNDFYX09TRF9TRVRfRlJBTUVCVUZGRVJfV0lORE9XLCA0LAotCQkJNzIwLCBpdHYtPm1haW5fcmVjdC5oZWlnaHQsIDAsIDApOwotCQl5aS0+bWFpbl9yZWN0ID0gaXR2LT5tYWluX3JlY3Q7Ci0JCWlmICghaXR2LT5vc2RfaW5mbykgewotCQkJeWktPm9zZF9mdWxsX3cgPSA3MjA7Ci0JCQl5aS0+b3NkX2Z1bGxfaCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7Ci0JCX0KKwkvKgorCSAqIFRoZSBuZXh0IGZpcm13YXJlIGNhbGwgaXMgdGltZSBzZW5zaXRpdmUuIFRpbWUgaXQgdG8KKwkgKiBhdm9pZCByaXNrIG9mIGEgaGFyZCBsb2NrLCBieSB0cnlpbmcgdG8gZW5zdXJlIHRoZSBjYWxsCisJICogaGFwcGVucyB3aXRoaW4gdGhlIGZpcnN0IDEwMCBsaW5lcyBvZiB0aGUgdG9wIGZpZWxkLgorCSAqIE1ha2UgNCBhdHRlbXB0cyB0byBzeW5jIHRvIHRoZSBkZWNvZGVyIGJlZm9yZSBnaXZpbmcgdXAuCisJICovCisJZm9yIChmID0gMDsgZiA8IDQ7IGYrKykgeworCQlwcmVwYXJlX3RvX3dhaXQoJml0di0+dnN5bmNfd2FpdHEsICZ3YWl0LAorCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJaWYgKChyZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTYpIDwgMTAwKQorCQkJYnJlYWs7CisJCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNSkpOwogCX0KKwlmaW5pc2hfd2FpdCgmaXR2LT52c3luY193YWl0cSwgJndhaXQpOworCisJaWYgKGYgPT0gNCkKKwkJSVZUVl9XQVJOKCJNb2RlIGNoYW5nZSBmYWlsZWQgdG8gc3luYyB0byBkZWNvZGVyXG4iKTsKKworCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfREVDX1NFVF9TVEFOREFSRCwgMSwgaXR2LT5pc19vdXRfNTBoeik7CisJaXR2LT5tYWluX3JlY3QubGVmdCA9IDA7CisJaXR2LT5tYWluX3JlY3QudG9wID0gMDsKKwlpdHYtPm1haW5fcmVjdC53aWR0aCA9IDcyMDsKKwlpdHYtPm1haW5fcmVjdC5oZWlnaHQgPSBpdHYtPmlzX291dF81MGh6ID8gNTc2IDogNDgwOworCWl2dHZfdmFwaShpdHYsIENYMjM0MVhfT1NEX1NFVF9GUkFNRUJVRkZFUl9XSU5ET1csIDQsCisJCTcyMCwgaXR2LT5tYWluX3JlY3QuaGVpZ2h0LCAwLCAwKTsKKwl5aS0+bWFpbl9yZWN0ID0gaXR2LT5tYWluX3JlY3Q7CisJaWYgKCFpdHYtPm9zZF9pbmZvKSB7CisJCXlpLT5vc2RfZnVsbF93ID0gNzIwOworCQl5aS0+b3NkX2Z1bGxfaCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CisJfQorfQorCitpbnQgaXZ0dl9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IGl2dHYgKml0diA9IGZoMmlkKGZoKS0+aXR2OworCisJaWYgKCgqc3RkICYgVjRMMl9TVERfQUxMKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgqc3RkID09IGl0di0+c3RkKQorCQlyZXR1cm4gMDsKKworCWlmICh0ZXN0X2JpdChJVlRWX0ZfSV9SQURJT19VU0VSLCAmaXR2LT5pX2ZsYWdzKSB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5jYXB0dXJpbmcpID4gMCB8fAorCSAgICBhdG9taWNfcmVhZCgmaXR2LT5kZWNvZGluZykgPiAwKSB7CisJCS8qIFN3aXRjaGluZyBzdGFuZGFyZCB3b3VsZCBtZXNzIHdpdGggYWxyZWFkeSBydW5uaW5nCisJCSAgIHN0cmVhbXMsIHByZXZlbnQgdGhhdCBieSByZXR1cm5pbmcgRUJVU1kuICovCisJCXJldHVybiAtRUJVU1k7CisJfQorCisJSVZUVl9ERUJVR19JTkZPKCJTd2l0Y2hpbmcgc3RhbmRhcmQgdG8gJWxseC5cbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaXR2LT5zdGQpOworCisJaXZ0dl9zX3N0ZF9lbmMoaXR2LCBzdGQpOworCWlmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKQorCQlpdnR2X3Nfc3RkX2RlYyhpdHYsIHN0ZCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmgKaW5kZXggNThmMDAzNC4uODkxODVjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5oCkBAIC0yNyw3ICsyNyw4IEBACiB2b2lkIGl2dHZfc2V0X29zZF9hbHBoYShzdHJ1Y3QgaXZ0diAqaXR2KTsKIGludCBpdnR2X3NldF9zcGVlZChzdHJ1Y3QgaXZ0diAqaXR2LCBpbnQgc3BlZWQpOwogdm9pZCBpdnR2X3NldF9mdW5jcyhzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2KTsKLWludCBpdnR2X3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCk7Cit2b2lkIGl2dHZfc19zdGRfZW5jKHN0cnVjdCBpdnR2ICppdHYsIHY0bDJfc3RkX2lkICpzdGQpOwordm9pZCBpdnR2X3Nfc3RkX2RlYyhzdHJ1Y3QgaXZ0diAqaXR2LCB2NGwyX3N0ZF9pZCAqc3RkKTsKIGludCBpdnR2X3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICp2Zik7CiBpbnQgaXZ0dl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCk7CiBsb25nIGl2dHZfdjRsMl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCmluZGV4IDk0MjY4MzMuLmU3Nzk0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKQEAgLTU4OSw3ICs1ODksNyBAQAogCQl2NGwyX3N1YmRldl9jYWxsKGl0di0+c2RfYXVkaW8sIGF1ZGlvLCBzX3N0cmVhbSwgMSk7CiAJCS8qIEF2b2lkIHVucHJlZGljdGFibGUgUENJIGJ1cyBoYW5nIC0gZGlzYWJsZSB2aWRlbyBjbG9ja3MgKi8KIAkJdjRsMl9zdWJkZXZfY2FsbChpdHYtPnNkX3ZpZGVvLCB2aWRlbywgc19zdHJlYW0sIDApOwotCQlpdnR2X21zbGVlcF90aW1lb3V0KDMwMCwgMSk7CisJCWl2dHZfbXNsZWVwX3RpbWVvdXQoMzAwLCAwKTsKIAkJaXZ0dl92YXBpKGl0diwgQ1gyMzQxWF9FTkNfSU5JVElBTElaRV9JTlBVVCwgMCk7CiAJCXY0bDJfc3ViZGV2X2NhbGwoaXR2LT5zZF92aWRlbywgdmlkZW8sIHNfc3RyZWFtLCAxKTsKIAl9CkBAIC04MzQsNyArODM0LDcgQEAKIAkJfQogCiAJCS8qIEhhbmRsZSBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JCWl2dHZfbXNsZWVwX3RpbWVvdXQoMTAwLCAxKTsKKwkJaXZ0dl9tc2xlZXBfdGltZW91dCgxMDAsIDApOwogCX0KIAogCWF0b21pY19kZWMoJml0di0+Y2FwdHVyaW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKaW5kZXggYjZlYjUxYy4uMjkzZGI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAkgICBUdXJuaW5nIHRoaXMgc2lnbmFsIG9uIGFuZCBvZmYgY2FuIGNvbmZ1c2UgY2VydGFpbgogCSAgIFRWcy4gQXMgZmFyIGFzIEkgY2FuIHRlbGwgdGhlcmUgaXMgbm8gcmVhc29uIG5vdCB0bwogCSAgIHRyYW5zbWl0IHRoaXMgc2lnbmFsLiAqLwotCWlmICgoaXR2LT5zdGQgJiBWNEwyX1NURF82MjVfNTApICYmICFlbmFibGVkKSB7CisJaWYgKChpdHYtPnN0ZF9vdXQgJiBWNEwyX1NURF82MjVfNTApICYmICFlbmFibGVkKSB7CiAJCWVuYWJsZWQgPSAxOwogCQltb2RlID0gMHgwODsgIC8qIDR4MyBmdWxsIGZvcm1hdCAqLwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCAxNzI0NzQ1Li42YjdjOWM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogc3RhdGljIGludCBpdnR2ZmJfc2V0X2Rpc3BsYXlfd2luZG93KHN0cnVjdCBpdnR2ICppdHYsIHN0cnVjdCB2NGwyX3JlY3QgKml2dHZfd2luZG93KQogewotCWludCBvc2RfaGVpZ2h0X2xpbWl0ID0gaXR2LT5pc181MGh6ID8gNTc2IDogNDgwOworCWludCBvc2RfaGVpZ2h0X2xpbWl0ID0gaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MDsKIAogCS8qIE9ubHkgZmFpbCBpZiByZXNvbHV0aW9uIHRvbyBoaWdoLCBvdGhlcndpc2UgZnVkZ2UgdGhlIHN0YXJ0IGNvb3Jkcy4gKi8KIAlpZiAoKGl2dHZfd2luZG93LT5oZWlnaHQgPiBvc2RfaGVpZ2h0X2xpbWl0KSB8fCAoaXZ0dl93aW5kb3ctPndpZHRoID4gSVZUVl9PU0RfTUFYX1dJRFRIKSkKQEAgLTQ3MSw5ICs0NzEsOSBAQAogCQkJdmJsYW5rLmZsYWdzID0gRkJfVkJMQU5LX0hBVkVfQ09VTlQgfEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCB8CiAJCQkJCUZCX1ZCTEFOS19IQVZFX1ZTWU5DOwogCQkJdHJhY2UgPSByZWFkX3JlZyhJVlRWX1JFR19ERUNfTElORV9GSUVMRCkgPj4gMTY7Ci0JCQlpZiAoaXR2LT5pc181MGh6ICYmIHRyYWNlID4gMzEyKQorCQkJaWYgKGl0di0+aXNfb3V0XzUwaHogJiYgdHJhY2UgPiAzMTIpCiAJCQkJdHJhY2UgLT0gMzEyOwotCQkJZWxzZSBpZiAoaXR2LT5pc182MGh6ICYmIHRyYWNlID4gMjYyKQorCQkJZWxzZSBpZiAoaXR2LT5pc19vdXRfNjBoeiAmJiB0cmFjZSA+IDI2MikKIAkJCQl0cmFjZSAtPSAyNjI7CiAJCQlpZiAodHJhY2UgPT0gMSkKIAkJCQl2YmxhbmsuZmxhZ3MgfD0gRkJfVkJMQU5LX1ZTWU5DSU5HOwpAQCAtNjU2LDcgKzY1Niw3IEBACiAJSVZUVkZCX0RFQlVHX0lORk8oIml2dHZmYl9jaGVja192YXJcbiIpOwogCiAJLyogU2V0IGJhc2UgcmVmZXJlbmNlcyBmb3IgbW9kZSBjYWxjcy4gKi8KLQlpZiAoaXR2LT5pc181MGh6KSB7CisJaWYgKGl0di0+aXNfb3V0XzUwaHopIHsKIAkJcGl4Y2xvY2sgPSA4NDMxNjsKIAkJaGxpbWl0ID0gNzc2OwogCQl2bGltaXQgPSA1OTE7CkBAIC03ODQsMTIgKzc4NCwxMiBAQAogCSAgIElmIHRoZSBtYXJnaW5zIGFyZSB0b28gbGFyZ2UsIGp1c3QgY2VudGVyIHRoZSBzY3JlZW4KIAkgICAoZW5mb3JjaW5nIG1hcmdpbnMgY2F1c2VzIHRvbyBtYW55IHByb2JsZW1zKSAqLwogCi0JaWYgKHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnhyZXMgPiBJVlRWX09TRF9NQVhfV0lEVEggKyAxKSB7CisJaWYgKHZhci0+bGVmdF9tYXJnaW4gKyB2YXItPnhyZXMgPiBJVlRWX09TRF9NQVhfV0lEVEggKyAxKQogCQl2YXItPmxlZnRfbWFyZ2luID0gMSArICgoSVZUVl9PU0RfTUFYX1dJRFRIIC0gdmFyLT54cmVzKSAvIDIpOwotCX0KLQlpZiAodmFyLT51cHBlcl9tYXJnaW4gKyB2YXItPnlyZXMgPiAoaXR2LT5pc181MGh6ID8gNTc3IDogNDgxKSkgewotCQl2YXItPnVwcGVyX21hcmdpbiA9IDEgKyAoKChpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODApIC0gdmFyLT55cmVzKSAvIDIpOwotCX0KKworCWlmICh2YXItPnVwcGVyX21hcmdpbiArIHZhci0+eXJlcyA+IChpdHYtPmlzX291dF81MGh6ID8gNTc3IDogNDgxKSkKKwkJdmFyLT51cHBlcl9tYXJnaW4gPSAxICsgKCgoaXR2LT5pc19vdXRfNTBoeiA/IDU3NiA6IDQ4MCkgLQorCQkJdmFyLT55cmVzKSAvIDIpOwogCiAJLyogTWFpbnRhaW4gb3ZlcmFsbCAnc2l6ZScgZm9yIGEgY29uc3RhbnQgcmVmcmVzaCByYXRlICovCiAJdmFyLT5yaWdodF9tYXJnaW4gPSBobGltaXQgLSB2YXItPmxlZnRfbWFyZ2luIC0gdmFyLT54cmVzOwpAQCAtODM2LDcgKzgzNiwxMiBAQAogCXUzMiBvc2RfcGFuX2luZGV4OwogCXN0cnVjdCBpdnR2ICppdHYgPSAoc3RydWN0IGl2dHYgKikgaW5mby0+cGFyOwogCi0Jb3NkX3Bhbl9pbmRleCA9ICh2YXItPnhvZmZzZXQgKyAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwpKSp2YXItPmJpdHNfcGVyX3BpeGVsLzg7CisJaWYgKHZhci0+eW9mZnNldCArIGluZm8tPnZhci55cmVzID4gaW5mby0+dmFyLnlyZXNfdmlydHVhbCB8fAorCSAgICB2YXItPnhvZmZzZXQgKyBpbmZvLT52YXIueHJlcyA+IGluZm8tPnZhci54cmVzX3ZpcnR1YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJb3NkX3Bhbl9pbmRleCA9IHZhci0+eW9mZnNldCAqIGluZm8tPmZpeC5saW5lX2xlbmd0aAorCQkgICAgICArIHZhci0+eG9mZnNldCAqIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCAvIDg7CiAJd3JpdGVfcmVnKG9zZF9wYW5faW5kZXgsIDB4MDJBMEMpOwogCiAJLyogUGFzcyB0aGlzIGluZm8gYmFjayB0aGUgeXV2IGhhbmRsZXIgKi8KQEAgLTEwMDMsMTkgKzEwMDgsMjEgQEAKIAkvKiBIYXJkd2FyZSBjb29yZHMgc3RhcnQgYXQgMCwgdXNlciBjb29yZHMgc3RhcnQgYXQgMS4gKi8KIAlvc2RfbGVmdC0tOwogCi0Jc3RhcnRfd2luZG93LmxlZnQgPSBvc2RfbGVmdCA+PSAwID8gb3NkX2xlZnQgOiAoKElWVFZfT1NEX01BWF9XSURUSCAtIHN0YXJ0X3dpbmRvdy53aWR0aCkgLyAyKTsKKwlzdGFydF93aW5kb3cubGVmdCA9IG9zZF9sZWZ0ID49IDAgPworCQkgb3NkX2xlZnQgOiAoKElWVFZfT1NEX01BWF9XSURUSCAtIHN0YXJ0X3dpbmRvdy53aWR0aCkgLyAyKTsKIAogCW9pLT5kaXNwbGF5X2J5dGVfc3RyaWRlID0KIAkJCXN0YXJ0X3dpbmRvdy53aWR0aCAqIG9pLT5ieXRlc19wZXJfcGl4ZWw7CiAKIAkvKiBWZXJ0aWNhbCBzaXplICYgcG9zaXRpb24gKi8KIAotCW1heF9oZWlnaHQgPSBpdHYtPmlzXzUwaHogPyA1NzYgOiA0ODA7CisJbWF4X2hlaWdodCA9IGl0di0+aXNfb3V0XzUwaHogPyA1NzYgOiA0ODA7CiAKIAlpZiAob3NkX3lyZXMgPiBtYXhfaGVpZ2h0KQogCQlvc2RfeXJlcyA9IG1heF9oZWlnaHQ7CiAKLQlzdGFydF93aW5kb3cuaGVpZ2h0ID0gb3NkX3lyZXMgPyBvc2RfeXJlcyA6IGl0di0+aXNfNTBoeiA/IDQ4MCA6IDQwMDsKKwlzdGFydF93aW5kb3cuaGVpZ2h0ID0gb3NkX3lyZXMgPworCQlvc2RfeXJlcyA6IGl0di0+aXNfb3V0XzUwaHogPyA0ODAgOiA0MDA7CiAKIAkvKiBDaGVjayB2ZXJ0aWNhbCBzdGFydCAob3NkX3VwcGVyKS4gKi8KIAlpZiAob3NkX3VwcGVyICsgc3RhcnRfd2luZG93LmhlaWdodCA+IG1heF9oZWlnaHQgKyAxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwppbmRleCA0NzJhNjkzLi5jOWZkMDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKQEAgLTM5MSw3ICszOTEsNyBAQAogCX07CiAJaW50IGk7CiAKLQlkZXZfZGJnKGlzcC0+ZGV2LCAiIik7CisJZGV2X2RiZyhpc3AtPmRldiwgIklTUCBJUlE6ICIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobmFtZSk7IGkrKykgewogCQlpZiAoKDEgPDwgaSkgJiBpcnFzdGF0dXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDM5ODg2NDMuLjRlNGQ0MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xNTEyLDcgKzE1MTIsNyBAQAogICovCiBzdGF0aWMgaW50IHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7Ci0Jc3RydWN0IGRldmljZV90eXBlICp0eXBlID0gaWNkLT52ZGV2LT5kZXYudHlwZTsKKwljb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgKnR5cGUgPSBpY2QtPnZkZXYtPmRldi50eXBlOwogCWludCByZXQ7CiAKIAlpZiAoIWljZC0+ZGV2LnBhcmVudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19lbnRpdHkuYwppbmRleCBlZGU3ODUyLi5jM2FiMGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZW50aXR5LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2VudGl0eS5jCkBAIC0zMCw3ICszMCw3IEBACiAJc3RydWN0IHV2Y19lbnRpdHkgKnJlbW90ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCByZW1vdGVfcGFkOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZW50aXR5LT5udW1fcGFkczsgKytpKSB7CiAJCXN0cnVjdCBtZWRpYV9lbnRpdHkgKnNvdXJjZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggMjU5ZWNlMC4uNWIyZTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTQzNSw2ICs0MzUsOSBAQAogCQlyZWcgPSByZWd1bGF0b3JfZ2V0KGhvc3QtPmRldiwgInZtbWNfYXV4Iik7CiAJCWhvc3QtPnZjY19hdXggPSBJU19FUlIocmVnKSA/IE5VTEwgOiByZWc7CiAKKwkJLyogRm9yIGVNTUMgZG8gbm90IHBvd2VyIG9mZiB3aGVuIG5vdCBpbiBzbGVlcCBzdGF0ZSAqLworCQlpZiAobW1jX3Nsb3QoaG9zdCkubm9fcmVndWxhdG9yX29mZl9pbml0KQorCQkJcmV0dXJuIDA7CiAJCS8qCiAJCSogVUdMWSBIQUNLOiAgd29ya2Fyb3VuZCByZWd1bGF0b3IgZnJhbWV3b3JrIGJ1Z3MuCiAJCSogV2hlbiB0aGUgYm9vdGxvYWRlciBsZWF2ZXMgYSBzdXBwbHkgYWN0aXZlLCBpdCdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggMGM5MjE3Zi4uN2IzZTIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtNTAsNyArNTAsNyBAQAogI2lmZGVmIF9fYXJtX18KIHN0YXRpYyB2b2lkIHdyaXRlX3JyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCToKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQgcmVhZF9ycmVnKHVfbG9uZyBiYXNlX2FkZHIsIHVfaW50IHJlZykKIHsKIAl1bnNpZ25lZCBzaG9ydCB2OwotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkibGRyJT9oCSUwLCBbJTIsICMtNF0JQCBORVRfUkRQIgogCTogIj1yIiAodikKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2lyZWcodV9sb25nIGJhc2UsIHVfaW50IHJlZywgdV9pbnQgdmFsKQogewotCV9fYXNtX18oCisJYXNtIHZvbGF0aWxlKAogCSJzdHIlP2gJJTEsIFslMl0JQCBORVRfUkFQXG5cdCIKIAkic3RyJT9oCSUwLCBbJTIsICM4XQlAIE5FVF9JRFAiCiAJOgpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCByZWFkX2lyZWcodV9sb25nIGJhc2VfYWRkciwgdV9pbnQgcmVnKQogewogCXVfc2hvcnQgdjsKLQlfX2FzbV9fKAorCWFzbSB2b2xhdGlsZSgKIAkic3RyJT9oCSUxLCBbJTJdCUAgTkFUX1JBUFxuXHQiCiAJImxkciU/aAklMCwgWyUyLCAjOF0JQCBORVRfSURQXG5cdCIKIAk6ICI9ciIgKHYpCkBAIC05MSw0NyArOTEsNDggQEAKICNkZWZpbmUgYW1fd3JpdGV3b3JkKGRldixvZmYsdmFsKSBfX3Jhd193cml0ZXcodmFsLCBJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKICNkZWZpbmUgYW1fcmVhZHdvcmQoZGV2LG9mZikgICAgICBfX3Jhd19yZWFkdyhJU0FNRU1fQkFTRSArICgob2ZmKSA8PCAxKSkKIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogYW1fd3JpdGVidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ciU/aAklMiwgWyUwXSwgIzQiCisJCWFzbSB2b2xhdGlsZSgic3RyJT9oCSUyLCBbJTBdLCAjNCIKIAkJIDogIj0mciIgKG9mZnNldCkgOiAiMCIgKG9mZnNldCksICJyIiAoYnVmWzBdIHwgKGJ1ZlsxXSA8PCA4KSkpOwogCQlidWYgKz0gMjsKIAkJbGVuZ3RoIC09IDI7CiAJfQogCXdoaWxlIChsZW5ndGggPiA4KSB7Ci0JCXVuc2lnbmVkIGludCB0bXAsIHRtcDI7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkJImxkbSU/aWEJJTEhLCB7JTIsICUzfVxuXHQiCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJImxkbSU/aWEJJTAhLCB7JTEsICUyfSIKKwkJCTogIityIiAoYnVmKSwgIj0mciIgKHRtcCksICI9JnIiICh0bXAyKSk7CisJCWxlbmd0aCAtPSA4OworCQlhc20gdm9sYXRpbGUoCisJCQkic3RyJT9oCSUxLCBbJTBdLCAjNFxuXHQiCisJCQkibW92JT8JJTEsICUxLCBsc3IgIzE2XG5cdCIKKwkJCSJzdHIlP2gJJTEsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjMTZcblx0IgotCQkJInN0ciU/aAklMiwgWyUwXSwgIzRcblx0IgotCQkJInN0ciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm1vdiU/CSUzLCAlMywgbHNyICMxNlxuXHQiCi0JCQkic3RyJT9oCSUzLCBbJTBdLCAjNCIKLQkJOiAiPSZyIiAob2Zmc2V0KSwgIj0mciIgKGJ1ZiksICI9ciIgKHRtcCksICI9ciIgKHRtcDIpCi0JCTogIjAiIChvZmZzZXQpLCAiMSIgKGJ1ZikpOwotCQlsZW5ndGggLT0gODsKKwkJCSJzdHIlP2gJJTIsIFslMF0sICM0IgorCQk6ICIrciIgKG9mZnNldCksICI9JnIiICh0bXApLCAiPSZyIiAodG1wMikpOwogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RyJT9oCSUyLCBbJTBdLCAjNCIKKwkJYXNtIHZvbGF0aWxlKCJzdHIlP2gJJTIsIFslMF0sICM0IgogCQkgOiAiPSZyIiAob2Zmc2V0KSA6ICIwIiAob2Zmc2V0KSwgInIiIChidWZbMF0gfCAoYnVmWzFdIDw8IDgpKSk7CiAJCWJ1ZiArPSAyOwogCQlsZW5ndGggLT0gMjsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIHZvaWQKIGFtX3JlYWRidWZmZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9pbnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJb2Zmc2V0ID0gSVNBTUVNX0JBU0UgKyAob2Zmc2V0IDw8IDEpOwogCWxlbmd0aCA9IChsZW5ndGggKyAxKSAmIH4xOwogCWlmICgoaW50KWJ1ZiAmIDIpIHsKIAkJdW5zaWduZWQgaW50IHRtcDsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCWFzbSB2b2xhdGlsZSgKIAkJCSJsZHIlP2gJJTIsIFslMF0sICM0XG5cdCIKIAkJCSJzdHIlP2IJJTIsIFslMV0sICMxXG5cdCIKIAkJCSJtb3YlPwklMiwgJTIsIGxzciAjOFxuXHQiCkBAIC0xNDAsMTIgKzE0MSwxMiBAQAogCQlsZW5ndGggLT0gMjsKIAl9CiAJd2hpbGUgKGxlbmd0aCA+IDgpIHsKLQkJdW5zaWduZWQgaW50IHRtcCwgdG1wMiwgdG1wMzsKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCXJlZ2lzdGVyIHVuc2lnbmVkIGludCB0bXAgYXNtKCJyMiIpLCB0bXAyIGFzbSgicjMiKSwgdG1wMzsKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgorCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgotCQkJIm9yciU/CSUyLCAlMiwgJTMsIGxzbCAjMTZcblx0IgotCQkJImxkciU/aAklMywgWyUwXSwgIzRcblx0IgorCQkJIm9yciU/CSUyLCAlMiwgJTQsIGxzbCAjMTZcblx0IgogCQkJImxkciU/aAklNCwgWyUwXSwgIzRcblx0IgogCQkJIm9yciU/CSUzLCAlMywgJTQsIGxzbCAjMTZcblx0IgogCQkJInN0bSU/aWEJJTEhLCB7JTIsICUzfSIKQEAgLTE1NSw3ICsxNTYsNyBAQAogCX0KIAl3aGlsZSAobGVuZ3RoID4gMCkgewogCQl1bnNpZ25lZCBpbnQgdG1wOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJYXNtIHZvbGF0aWxlKAogCQkJImxkciU/aAklMiwgWyUwXSwgIzRcblx0IgogCQkJInN0ciU/YgklMiwgWyUxXSwgIzFcblx0IgogCQkJIm1vdiU/CSUyLCAlMiwgbHNyICM4XG5cdCIKQEAgLTE5Niw2ICsxOTcsNDIgQEAKIAlyZXR1cm4gZXJyb3Jjb3VudDsKIH0KIAorc3RhdGljIHZvaWQgYW03OWM5NjFfbWNfaGFzaChjaGFyICphZGRyLCB1MTYgKmhhc2gpCit7CisJaWYgKGFkZHJbMF0gJiAweDAxKSB7CisJCWludCBpZHgsIGJpdDsKKwkJdTMyIGNyYzsKKworCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHIpOworCisJCWlkeCA9IGNyYyA+PiAzMDsKKwkJYml0ID0gKGNyYyA+PiAyNikgJiAxNTsKKworCQloYXNoW2lkeF0gfD0gMSA8PCBiaXQ7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFtNzljOTYxX2dldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiAqaGFzaCkKK3sKKwl1bnNpZ25lZCBpbnQgbW9kZSA9IE1PREVfUE9SVF8xMEJUOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltb2RlIHw9IE1PREVfUFJPTUlTQzsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJbWVtc2V0KGhhc2gsIDB4ZmYsIDQgKiBzaXplb2YoKmhhc2gpKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCW1lbXNldChoYXNoLCAwLCA0ICogc2l6ZW9mKCpoYXNoKSk7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKKwkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIGhhc2gpOworCX0KKworCXJldHVybiBtb2RlOworfQorCiBzdGF0aWMgdm9pZAogYW03OWM5NjFfaW5pdF9mb3Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjAzLDYgKzI0MCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyICpwOwogCXVfaW50IGhkcl9hZGRyLCBmaXJzdF9mcmVlX2FkZHI7CisJdTE2IG11bHRpX2hhc2hbNF0sIG1vZGUgPSBhbTc5Yzk2MV9nZXRfcnhfbW9kZShkZXYsIG11bHRpX2hhc2gpOwogCWludCBpOwogCiAJLyoKQEAgLTIxOCwxNiArMjU2LDEyIEBACiAJd3JpdGVfaXJlZyAoZGV2LT5iYXNlX2FkZHIsIDIsIDB4MDAwMCk7IC8qIE1PREUgcmVnaXN0ZXIgc2VsZWN0cyBtZWRpYSAqLwogCiAJZm9yIChpID0gTEFEUkw7IGkgPD0gTEFEUkg7IGkrKykKLQkJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIGksIDApOworCQl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgaSwgbXVsdGlfaGFzaFtpIC0gTEFEUkxdKTsKIAogCWZvciAoaSA9IFBBRFJMLCBwID0gZGV2LT5kZXZfYWRkcjsgaSA8PSBQQURSSDsgaSsrLCBwICs9IDIpCiAJCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBpLCBwWzBdIHwgKHBbMV0gPDwgOCkpOwogCi0JaSA9IE1PREVfUE9SVF8xMEJUOwotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCWkgfD0gTU9ERV9QUk9NSVNDOwotCi0Jd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIE1PREUsIGkpOworCXdyaXRlX3JyZWcgKGRldi0+YmFzZV9hZGRyLCBNT0RFLCBtb2RlKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgUE9MTElOVCwgMCk7CiAJd3JpdGVfcnJlZyAoZGV2LT5iYXNlX2FkZHIsIFNJWkVSWFIsIC1SWF9CVUZGRVJTKTsKIAl3cml0ZV9ycmVnIChkZXYtPmJhc2VfYWRkciwgU0laRVRYUiwgLVRYX0JVRkZFUlMpOwpAQCAtMzQwLDIxICszNzQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKGNoYXIgKmFkZHIsIHVuc2lnbmVkIHNob3J0ICpoYXNoKQotewotCWlmIChhZGRyWzBdICYgMHgwMSkgewotCQlpbnQgaWR4LCBiaXQ7Ci0JCXUzMiBjcmM7Ci0KLQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBhZGRyKTsKLQotCQlpZHggPSBjcmMgPj4gMzA7Ci0JCWJpdCA9IChjcmMgPj4gMjYpICYgMTU7Ci0KLQkJaGFzaFtpZHhdIHw9IDEgPDwgYml0OwotCX0KLX0KLQogLyoKICAqIFNldCBvciBjbGVhciBwcm9taXNjdW91cy9tdWx0aWNhc3QgbW9kZSBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRlci4KICAqLwpAQCAtMzYyLDI0ICszODEsOSBAQAogewogCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBtdWx0aV9oYXNoWzRdLCBtb2RlOworCXUxNiBtdWx0aV9oYXNoWzRdLCBtb2RlID0gYW03OWM5NjFfZ2V0X3J4X21vZGUoZGV2LCBtdWx0aV9oYXNoKTsKIAlpbnQgaSwgc3RvcHBlZDsKIAotCW1vZGUgPSBNT0RFX1BPUlRfMTBCVDsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJbW9kZSB8PSBNT0RFX1BST01JU0M7Ci0JfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCW1lbXNldChtdWx0aV9oYXNoLCAweGZmLCBzaXplb2YobXVsdGlfaGFzaCkpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0KLQkJbWVtc2V0KG11bHRpX2hhc2gsIDB4MDAsIHNpemVvZihtdWx0aV9oYXNoKSk7Ci0KLQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIGRldikKLQkJCWFtNzljOTYxX21jX2hhc2goaGEtPmFkZHIsIG11bHRpX2hhc2gpOwotCX0KLQogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5jaGlwX2xvY2ssIGZsYWdzKTsKIAogCXN0b3BwZWQgPSByZWFkX3JyZWcoZGV2LT5iYXNlX2FkZHIsIENTUjApICYgQ1NSMF9TVE9QOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKaW5kZXggNWE3NzAwMS4uMGI0NmI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCkBAIC0yODMsMTAgKzI4MywxNCBAQAogCiAJCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoICsgMik7CiAJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CisJCQlzdHJ1Y3QgZXA5M3h4X3JkZXNjICpyeGQgPSAmZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV07CiAJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT5yZGVzY1tlbnRyeV0uYnVmX2FkZHIsCisJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYtPmRldi5wYXJlbnQsIHJ4ZC0+YnVmX2FkZHIsCiAJCQkJCQlsZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CiAJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIGVwLT5yeF9idWZbZW50cnldLCBsZW5ndGgpOworCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LT5kZXYucGFyZW50LAorCQkJCQkJICAgcnhkLT5idWZfYWRkciwgbGVuZ3RoLAorCQkJCQkJICAgRE1BX0ZST01fREVWSUNFKTsKIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIApAQCAtMzQ4LDYgKzM1Miw3IEBACiBzdGF0aWMgaW50IGVwOTN4eF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVwOTN4eF90ZGVzYyAqdHhkOwogCWludCBlbnRyeTsKIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA+IE1BWF9QS1RfU0laRSkpIHsKQEAgLTM1OSwxMSArMzY0LDE0IEBACiAJZW50cnkgPSBlcC0+dHhfcG9pbnRlcjsKIAllcC0+dHhfcG9pbnRlciA9IChlcC0+dHhfcG9pbnRlciArIDEpICYgKFRYX1FVRVVFX0VOVFJJRVMgLSAxKTsKIAotCWVwLT5kZXNjcy0+dGRlc2NbZW50cnldLnRkZXNjMSA9Ci0JCVRERVNDMV9FT0YgfCAoZW50cnkgPDwgMTYpIHwgKHNrYi0+bGVuICYgMHhmZmYpOworCXR4ZCA9ICZlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XTsKKworCXR4ZC0+dGRlc2MxID0gVERFU0MxX0VPRiB8IChlbnRyeSA8PCAxNikgfCAoc2tiLT5sZW4gJiAweGZmZik7CisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LT5kZXYucGFyZW50LCB0eGQtPmJ1Zl9hZGRyLCBza2ItPmxlbiwKKwkJCQlETUFfVE9fREVWSUNFKTsKIAlza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCBlcC0+dHhfYnVmW2VudHJ5XSk7Ci0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoTlVMTCwgZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0uYnVmX2FkZHIsCi0JCQkJc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldi0+ZGV2LnBhcmVudCwgdHhkLT5idWZfYWRkciwgc2tiLT5sZW4sCisJCQkJICAgRE1BX1RPX0RFVklDRSk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl9sb2NrX2lycSgmZXAtPnR4X3BlbmRpbmdfbG9jayk7CkBAIC00NTcsODkgKzQ2NSw4MCBAQAogCiBzdGF0aWMgdm9pZCBlcDkzeHhfZnJlZV9idWZmZXJzKHN0cnVjdCBlcDkzeHhfcHJpdiAqZXApCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZXAtPmRldi0+ZGV2LnBhcmVudDsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT5yZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkLCBQS1RfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJaWYgKGVwLT5yeF9idWZbaV0gIT0gTlVMTCkKLQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyllcC0+cnhfYnVmW2ldKTsKKwkJCWtmcmVlKGVwLT5yeF9idWZbaV0pOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CiAJCWRtYV9hZGRyX3QgZDsKIAogCQlkID0gZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkcjsKIAkJaWYgKGQpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGQsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZCwgUEtUX0JVRl9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAogCQlpZiAoZXAtPnR4X2J1ZltpXSAhPSBOVUxMKQotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWVwLT50eF9idWZbaV0pOworCQkJa2ZyZWUoZXAtPnR4X2J1ZltpXSk7CiAJfQogCi0JZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLCBlcC0+ZGVzY3MsCisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksIGVwLT5kZXNjcywKIAkJCQkJCQllcC0+ZGVzY3NfZG1hX2FkZHIpOwogfQogCi0vKgotICogVGhlIGhhcmR3YXJlIGVuZm9yY2VzIGEgc3ViLTJLIG1heGltdW0gcGFja2V0IHNpemUsIHNvIHdlIHB1dAotICogdHdvIGJ1ZmZlcnMgb24gZXZlcnkgaGFyZHdhcmUgcGFnZS4KLSAqLwogc3RhdGljIGludCBlcDkzeHhfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGVwLT5kZXYtPmRldi5wYXJlbnQ7CiAJaW50IGk7CiAKLQllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLAotCQkJCSZlcC0+ZGVzY3NfZG1hX2FkZHIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwllcC0+ZGVzY3MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksCisJCQkJJmVwLT5kZXNjc19kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVwLT5kZXNjcyA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAotCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKE5VTEwsIGQpKSB7Ci0JCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJCWQgPSBkbWFfbWFwX3NpbmdsZShkZXYsIGJ1ZiwgUEtUX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkKSkgeworCQkJa2ZyZWUoYnVmKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQkJZXAtPnJ4X2J1ZltpXSA9IHBhZ2U7CisJCWVwLT5yeF9idWZbaV0gPSBidWY7CiAJCWVwLT5kZXNjcy0+cmRlc2NbaV0uYnVmX2FkZHIgPSBkOwogCQllcC0+ZGVzY3MtPnJkZXNjW2ldLnJkZXNjMSA9IChpIDw8IDE2KSB8IFBLVF9CVUZfU0laRTsKLQotCQllcC0+cnhfYnVmW2kgKyAxXSA9IHBhZ2UgKyBQS1RfQlVGX1NJWkU7Ci0JCWVwLT5kZXNjcy0+cmRlc2NbaSArIDFdLmJ1Zl9hZGRyID0gZCArIFBLVF9CVUZfU0laRTsKLQkJZXAtPmRlc2NzLT5yZGVzY1tpICsgMV0ucmRlc2MxID0gKChpICsgMSkgPDwgMTYpIHwgUEtUX0JVRl9TSVpFOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKLQkJdm9pZCAqcGFnZTsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CisJCXZvaWQgKmJ1ZjsKIAkJZG1hX2FkZHJfdCBkOwogCi0JCXBhZ2UgPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Ci0JCWlmIChwYWdlID09IE5VTEwpCisJCWJ1ZiA9IGttYWxsb2MoUEtUX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQogCQkJZ290byBlcnI7CiAKLQkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7Ci0JCWlmIChkbWFfbWFwcGluZ19lcnJvcihOVUxMLCBkKSkgewotCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCQlkID0gZG1hX21hcF9zaW5nbGUoZGV2LCBidWYsIFBLVF9CVUZfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkZXYsIGQpKSB7CisJCQlrZnJlZShidWYpOwogCQkJZ290byBlcnI7CiAJCX0KIAotCQllcC0+dHhfYnVmW2ldID0gcGFnZTsKKwkJZXAtPnR4X2J1ZltpXSA9IGJ1ZjsKIAkJZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkciA9IGQ7Ci0KLQkJZXAtPnR4X2J1ZltpICsgMV0gPSBwYWdlICsgUEtUX0JVRl9TSVpFOwotCQllcC0+ZGVzY3MtPnRkZXNjW2kgKyAxXS5idWZfYWRkciA9IGQgKyBQS1RfQlVGX1NJWkU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC04MjksNiArODI4LDcgQEAKIAl9CiAJZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWVwLT5kZXYgPSBkZXY7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAluZXRpZl9uYXBpX2FkZChkZXYsICZlcC0+bmFwaSwgZXA5M3h4X3BvbGwsIDY0KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCAxN2I0ZGQ5Li42NTJiMzBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM4OCw2ICszODgsOCBAQAogCXJldHVybiBuZXh0OwogfQogCisjZGVmaW5lIGJvbmRfcXVldWVfbWFwcGluZyhza2IpICgqKHUxNiAqKSgoc2tiKS0+Y2IpKQorCiAvKioKICAqIGJvbmRfZGV2X3F1ZXVlX3htaXQgLSBQcmVwYXJlIHNrYiBmb3IgeG1pdC4KICAqCkBAIC00MDAsNiArNDAyLDkgQEAKIHsKIAlza2ItPmRldiA9IHNsYXZlX2RldjsKIAlza2ItPnByaW9yaXR5ID0gMTsKKworCXNrYi0+cXVldWVfbWFwcGluZyA9IGJvbmRfcXVldWVfbWFwcGluZyhza2IpOworCiAJaWYgKHVubGlrZWx5KG5ldHBvbGxfdHhfcnVubmluZyhzbGF2ZV9kZXYpKSkKIAkJYm9uZF9uZXRwb2xsX3NlbmRfc2tiKGJvbmRfZ2V0X3NsYXZlX2J5X2Rldihib25kLCBzbGF2ZV9kZXYpLCBza2IpOwogCWVsc2UKQEAgLTQyMDYsNiArNDIxMSw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAorCiBzdGF0aWMgdTE2IGJvbmRfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJLyoKQEAgLTQyMTYsNiArNDIyMiwxMSBAQAogCSAqLwogCXUxNiB0eHEgPSBza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSA/IHNrYl9nZXRfcnhfcXVldWUoc2tiKSA6IDA7CiAKKwkvKgorCSAqIFNhdmUgdGhlIG9yaWdpbmFsIHR4cSB0byByZXN0b3JlIGJlZm9yZSBwYXNzaW5nIHRvIHRoZSBkcml2ZXIKKwkgKi8KKwlib25kX3F1ZXVlX21hcHBpbmcoc2tiKSA9IHNrYi0+cXVldWVfbWFwcGluZzsKKwogCWlmICh1bmxpa2VseSh0eHEgPj0gZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpKSB7CiAJCWRvIHsKIAkJCXR4cSAtPSBkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RsMmsuYyBiL2RyaXZlcnMvbmV0L2RsMmsuYwppbmRleCBjNDQ1NDU3Li4yMzE3OWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbDJrLmMKKysrIGIvZHJpdmVycy9uZXQvZGwyay5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlpZiAobnAtPnBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0RMSU5LKSB7CS8qIEQtTGluayBPbmx5ICovCiAJCS8qIENoZWNrIENSQyAqLwogCQljcmMgPSB+ZXRoZXJfY3JjX2xlICgyNTYgLSA0LCBzcm9tZGF0YSk7Ci0JCWlmIChwc3JvbS0+Y3JjICE9IGNyYykgeworCQlpZiAocHNyb20tPmNyYyAhPSBjcHVfdG9fbGUzMihjcmMpKSB7CiAJCQlwcmludGsgKEtFUk5fRVJSICIlczogRUVQUk9NIGRhdGEgQ1JDIGVycm9yLlxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBmZjYwYjIzLi4yZGZjYzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiBNb2RpZmllcjogU2FuZGVlcCBHb3BhbHBldCA8c2FuZGVlcC5rdW1hckBmcmVlc2NhbGUuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAyMDAyLTIwMDksIDIwMTEgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqIENvcHlyaWdodCAyMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTQ3Niw5ICs0NzYsNiBAQAogI2VuZGlmCiB9OwogCi11bnNpZ25lZCBpbnQgZnRwX3JxZnByW01BWF9GSUxFUl9JRFggKyAxXTsKLXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwotCiB2b2lkIGxvY2tfcnhfcXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdikKIHsKIAlpbnQgaSA9IDB4MDsKQEAgLTg2OCwyOCArODY1LDI4IEBACiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9DTVBfRVhBQ1Q7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwotCWZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CisJcHJpdi0+ZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX1BBUlNFIHwgUlFGQ1JfQ0xFIHwgUlFGQ1JfQU5EOwogCXJxZnByID0gY2xhc3M7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhci0tOwogCXJxZmNyID0gUlFGQ1JfQ01QX0VYQUNUIHwgUlFGQ1JfUElEX01BU0sgfCBSUUZDUl9BTkQ7CiAJcnFmcHIgPSBjbGFzczsKLQlmdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7Ci0JZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOworCXByaXYtPmZ0cF9ycWZjcltycWZhcl0gPSBycWZjcjsKKwlwcml2LT5mdHBfcnFmcHJbcnFmYXJdID0gcnFmcHI7CiAJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBycWZhciwgcnFmY3IsIHJxZnByKTsKIAogCXJldHVybiBycWZhcjsKQEAgLTkwNCw4ICs5MDEsOCBAQAogCiAJLyogRGVmYXVsdCBydWxlICovCiAJcnFmY3IgPSBSUUZDUl9DTVBfTUFUQ0g7Ci0JZnRwX3JxZmNyW3JxZmFyXSA9IHJxZmNyOwotCWZ0cF9ycWZwcltycWZhcl0gPSBycWZwcjsKKwlwcml2LT5mdHBfcnFmY3JbcnFmYXJdID0gcnFmY3I7CisJcHJpdi0+ZnRwX3JxZnByW3JxZmFyXSA9IHJxZnByOwogCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcnFmYXIsIHJxZmNyLCBycWZwcik7CiAKIAlycWZhciA9IGNsdXN0ZXJfZW50cnlfcGVyX2NsYXNzKHByaXYsIHJxZmFyLCBSUUZQUl9JUFY2KTsKQEAgLTkyMSw4ICs5MTgsOCBAQAogCS8qIFJlc3QgYXJlIG1hc2tlZCBydWxlcyAqLwogCXJxZmNyID0gUlFGQ1JfQ01QX05PTUFUQ0g7CiAJZm9yIChpID0gMDsgaSA8IHJxZmFyOyBpKyspIHsKLQkJZnRwX3JxZmNyW2ldID0gcnFmY3I7Ci0JCWZ0cF9ycWZwcltpXSA9IHJxZnByOworCQlwcml2LT5mdHBfcnFmY3JbaV0gPSBycWZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW2ldID0gcnFmcHI7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgaSwgcnFmY3IsIHJxZnByKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmggYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKaW5kZXggZmM4NmY1MS4uYmEzNmRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaApAQCAtOSw3ICs5LDcgQEAKICAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEKICAqIE1vZGlmaWVyOiBTYW5kZWVwIEdvcGFscGV0IDxzYW5kZWVwLmt1bWFyQGZyZWVzY2FsZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDItMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICogQ29weXJpZ2h0IDIwMDItMjAwOSwgMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xMTA3LDEwICsxMTA3LDEyIEBACiAJLyogSFcgdGltZSBzdGFtcGluZyBlbmFibGVkIGZsYWcgKi8KIAlpbnQgaHd0c19yeF9lbjsKIAlpbnQgaHd0c190eF9lbjsKKworCS8qRmlsZXIgdGFibGUqLworCXVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOworCXVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmcHJbTUFYX0ZJTEVSX0lEWCArIDFdOwotZXh0ZXJuIHVuc2lnbmVkIGludCBmdHBfcnFmY3JbTUFYX0ZJTEVSX0lEWCArIDFdOwogCiBzdGF0aWMgaW5saW5lIGludCBnZmFyX2hhc19lcnJhdGEoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgIGVudW0gZ2Zhcl9lcnJhdGEgZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCA0OTNkNzQzLi4yMzllMzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtOSw3ICs5LDcgQEAKICAqICBNYWludGFpbmVyOiBLdW1hciBHYWxhCiAgKiAgTW9kaWZpZXI6IFNhbmRlZXAgR29wYWxwZXQgPHNhbmRlZXAua3VtYXJAZnJlZXNjYWxlLmNvbT4KICAqCi0gKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiAgQ29weXJpZ2h0IDIwMDMtMjAwNiwgMjAwOC0yMDA5LCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCiAgKgogICogIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0bwogICogIHRoZSB0ZXJtcyBvZiB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIsIGluY29ycG9yYXRlZCBoZXJlaW4KQEAgLTYwOSwxNSArNjA5LDE1IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkgewogCQlmY3IgPSBSUUZDUl9QSURfREFIIHxSUUZDUl9DTVBfTk9NQVRDSCB8CiAJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAKIAkJZmNyID0gUlFGQ1JfUElEX0RBTCB8IFJRRkNSX0FORCB8IFJRRkNSX0NNUF9OT01BVENIIHwKIAkJCQlSUUZDUl9IQVNIIHwgUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjI2LDE2ICs2MjYsMTYgQEAKIAkJZmNyID0gUlFGQ1JfUElEX1ZJRCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQogCiAJaWYgKGV0aGZsb3cgJiBSWEhfSVBfU1JDKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TSUEgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjQzLDggKzY0Myw4IEBACiAJaWYgKGV0aGZsb3cgJiAoUlhIX0lQX0RTVCkpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RJQSB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC02NTIsOCArNjUyLDggQEAKIAlpZiAoZXRoZmxvdyAmIFJYSF9MM19QUk9UTykgewogCQlmY3IgPSBSUUZDUl9QSURfTDRQIHwgUlFGQ1JfQ01QX05PTUFUQ0ggfCBSUUZDUl9IQVNIIHwKIAkJCVJRRkNSX0FORCB8IFJRRkNSX0hBU0hUQkxfMDsKLQkJZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CisJCXByaXYtPmZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKKwkJcHJpdi0+ZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsIGZjciwgZnByKTsKIAkJcHJpdi0+Y3VyX2ZpbGVyX2lkeCA9IHByaXYtPmN1cl9maWxlcl9pZHggLSAxOwogCX0KQEAgLTY2MSw4ICs2NjEsOCBAQAogCWlmIChldGhmbG93ICYgUlhIX0w0X0JfMF8xKSB7CiAJCWZjciA9IFJRRkNSX1BJRF9TUFQgfCBSUUZDUl9DTVBfTk9NQVRDSCB8IFJRRkNSX0hBU0ggfAogCQkJUlFGQ1JfQU5EIHwgUlFGQ1JfSEFTSFRCTF8wOwotCQlmdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7Ci0JCWZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZnByOworCQlwcml2LT5mdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmY3I7CiAJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgcHJpdi0+Y3VyX2ZpbGVyX2lkeCwgZmNyLCBmcHIpOwogCQlwcml2LT5jdXJfZmlsZXJfaWR4ID0gcHJpdi0+Y3VyX2ZpbGVyX2lkeCAtIDE7CiAJfQpAQCAtNjcwLDggKzY3MCw4IEBACiAJaWYgKGV0aGZsb3cgJiBSWEhfTDRfQl8yXzMpIHsKIAkJZmNyID0gUlFGQ1JfUElEX0RQVCB8IFJRRkNSX0NNUF9OT01BVENIIHwgUlFGQ1JfSEFTSCB8CiAJCQlSUUZDUl9BTkQgfCBSUUZDUl9IQVNIVEJMXzA7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZwcjsKLQkJZnRwX3JxZmNyW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gZmNyOworCQlwcml2LT5mdHBfcnFmcHJbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBmcHI7CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGZjcjsKIAkJZ2Zhcl93cml0ZV9maWxlcihwcml2LCBwcml2LT5jdXJfZmlsZXJfaWR4LCBmY3IsIGZwcik7CiAJCXByaXYtPmN1cl9maWxlcl9pZHggPSBwcml2LT5jdXJfZmlsZXJfaWR4IC0gMTsKIAl9CkBAIC03MDUsMTIgKzcwNSwxMiBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRklMRVJfSURYICsgMTsgaSsrKSB7Ci0JCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2ldOwotCQlsb2NhbF9ycWZjcltqXSA9IGZ0cF9ycWZjcltpXTsKKwkJbG9jYWxfcnFmcHJbal0gPSBwcml2LT5mdHBfcnFmcHJbaV07CisJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2ldOwogCQlqLS07Ci0JCWlmICgoZnRwX3JxZmNyW2ldID09IChSUUZDUl9QSURfUEFSU0UgfAorCQlpZiAoKHByaXYtPmZ0cF9ycWZjcltpXSA9PSAoUlFGQ1JfUElEX1BBUlNFIHwKIAkJCVJRRkNSX0NMRSB8UlFGQ1JfQU5EKSkgJiYKLQkJCShmdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKKwkJCShwcml2LT5mdHBfcnFmcHJbaV0gPT0gY21wX3JxZnByKSkKIAkJCWJyZWFrOwogCX0KIApAQCAtNzI0LDIwICs3MjQsMjIgQEAKIAkgKiBpZiBpdCB3YXMgYWxyZWFkeSBwcm9ncmFtbWVkLCB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGVzZSBydWxlcwogCSAqLwogCWZvciAobCA9IGkrMTsgbCA8IE1BWF9GSUxFUl9JRFg7IGwrKykgewotCQlpZiAoKGZ0cF9ycWZjcltsXSAmIFJRRkNSX0NMRSkgJiYKLQkJCSEoZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkgewotCQkJZnRwX3JxZmNyW2xdID0gUlFGQ1JfQ0xFIHwgUlFGQ1JfQ01QX0VYQUNUIHwKKwkJaWYgKChwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkhKHByaXYtPmZ0cF9ycWZjcltsXSAmIFJRRkNSX0FORCkpIHsKKwkJCXByaXYtPmZ0cF9ycWZjcltsXSA9IFJRRkNSX0NMRSB8IFJRRkNSX0NNUF9FWEFDVCB8CiAJCQkJUlFGQ1JfSEFTSFRCTF8wIHwgUlFGQ1JfUElEX01BU0s7Ci0JCQlmdHBfcnFmcHJbbF0gPSBGUFJfRklMRVJfTUFTSzsKLQkJCWdmYXJfd3JpdGVfZmlsZXIocHJpdiwgbCwgZnRwX3JxZmNyW2xdLCBmdHBfcnFmcHJbbF0pOworCQkJcHJpdi0+ZnRwX3JxZnByW2xdID0gRlBSX0ZJTEVSX01BU0s7CisJCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIGwsIHByaXYtPmZ0cF9ycWZjcltsXSwKKwkJCQlwcml2LT5mdHBfcnFmcHJbbF0pOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIShmdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmIChmdHBfcnFmY3JbbF0gJiBSUUZDUl9BTkQpKQorCQlpZiAoIShwcml2LT5mdHBfcnFmY3JbbF0gJiBSUUZDUl9DTEUpICYmCisJCQkocHJpdi0+ZnRwX3JxZmNyW2xdICYgUlFGQ1JfQU5EKSkKIAkJCWNvbnRpbnVlOwogCQllbHNlIHsKLQkJCWxvY2FsX3JxZnByW2pdID0gZnRwX3JxZnByW2xdOwotCQkJbG9jYWxfcnFmY3Jbal0gPSBmdHBfcnFmY3JbbF07CisJCQlsb2NhbF9ycWZwcltqXSA9IHByaXYtPmZ0cF9ycWZwcltsXTsKKwkJCWxvY2FsX3JxZmNyW2pdID0gcHJpdi0+ZnRwX3JxZmNyW2xdOwogCQkJai0tOwogCQl9CiAJfQpAQCAtNzUwLDggKzc1Miw4IEBACiAKIAkvKiBXcml0ZSBiYWNrIHRoZSBwb3BwZWQgb3V0IHJ1bGVzIGFnYWluICovCiAJZm9yIChrID0gaisxOyBrIDwgTUFYX0ZJTEVSX0lEWDsgaysrKSB7Ci0JCWZ0cF9ycWZwcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZnByW2tdOwotCQlmdHBfcnFmY3JbcHJpdi0+Y3VyX2ZpbGVyX2lkeF0gPSBsb2NhbF9ycWZjcltrXTsKKwkJcHJpdi0+ZnRwX3JxZnByW3ByaXYtPmN1cl9maWxlcl9pZHhdID0gbG9jYWxfcnFmcHJba107CisJCXByaXYtPmZ0cF9ycWZjcltwcml2LT5jdXJfZmlsZXJfaWR4XSA9IGxvY2FsX3JxZmNyW2tdOwogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIHByaXYtPmN1cl9maWxlcl9pZHgsCiAJCQkJbG9jYWxfcnFmY3Jba10sIGxvY2FsX3JxZnByW2tdKTsKIAkJaWYgKCFwcml2LT5jdXJfZmlsZXJfaWR4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwppbmRleCAxOGZjY2Y5Li4yYzI4NjIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwpAQCAtMjM3Myw2ICsyMzczLDkgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIAlhZGFwdGVyLT5yc3NfcXVldWVzID0gbWluX3QodTMyLCBJR0JfTUFYX1JYX1FVRVVFUywgbnVtX29ubGluZV9jcHVzKCkpOworCS8qIGkzNTAgY2Fubm90IGRvIFJTUyBhbmQgU1ItSU9WIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwX2kzNTAgJiYgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJYWRhcHRlci0+cnNzX3F1ZXVlcyA9IDE7CiAKIAkvKgogCSAqIGlmIHJzc19xdWV1ZXMgPiA0IG9yIHZmcyBhcmUgZ29pbmcgdG8gYmUgYWxsb2NhdGVkIHdpdGggcnNzX3F1ZXVlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCmluZGV4IGU5NjU2NjEuLmE1ZDlmYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2h3LmMKQEAgLTE0MDYsNiArMTQwNiw3IEBACiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgcXVlLT5ub19vcHM7IGxvb3ArKykgewogCQlRTENOSUNfV1JfRFVNUF9SRUcocXVlLT5zZWxfYWRkciwgYmFzZSwgcXVlX2lkKTsKKwkJYWRkciA9IHF1ZS0+cmVhZF9hZGRyOwogCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspIHsKIAkJCVFMQ05JQ19SRF9EVU1QX1JFRyhhZGRyLCBiYXNlLCAmZGF0YSk7CiAJCQkqYnVmZmVyKysgPSBjcHVfdG9fbGUzMihkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKaW5kZXggM2FiN2QyYy4uMGY2YWY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTIxNTksNiArMjE1OSw3IEBACiAKIAluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOwogCXBjaV91bm1hcF9zaW5nbGUocGRldiwgbmYtPmRtYSwgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisJcGJ1Zi0+c2tiID0gTlVMTDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IGRjNDgwNWYuLmY2Mjg1NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0yNDAwLDggKzI0MDAsMTAgQEAKIAl7IC5jb21wYXRpYmxlID0gInNtc2MsbGFuOTFjOTQiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic21zYyxsYW45MWMxMTEiLCB9LAogCXt9LAotfQorfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHNtYzkxeF9tYXRjaCk7CisjZWxzZQorI2RlZmluZSBzbWM5MXhfbWF0Y2ggTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBzbWNfZHJ2X3BtX29wcyA9IHsKQEAgLTI0MTYsOSArMjQxOCw3IEBACiAJCS5uYW1lCT0gQ0FSRE5BTUUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkucG0JPSAmc21jX2Rydl9wbV9vcHMsCi0jaWZkZWYgQ09ORklHX09GCiAJCS5vZl9tYXRjaF90YWJsZSA9IHNtYzkxeF9tYXRjaCwKLSNlbmRpZgogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCAyMjA0NzYyLi5iNmM1ZDM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTcyLDYgKzcyLDExIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYWxsX2NoYW5uZWxzLCBtb2RwYXJhbV9hbGxfY2hhbm5lbHMsIGJvb2wsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhhbGxfY2hhbm5lbHMsICJFeHBvc2UgYWxsIGNoYW5uZWxzIHRoZSBkZXZpY2UgY2FuIHVzZS4iKTsKIAorc3RhdGljIGludCBtb2RwYXJhbV9mYXN0Y2hhbnN3aXRjaDsKK21vZHVsZV9wYXJhbV9uYW1lZChmYXN0Y2hhbnN3aXRjaCwgbW9kcGFyYW1fZmFzdGNoYW5zd2l0Y2gsIGJvb2wsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhmYXN0Y2hhbnN3aXRjaCwgIkVuYWJsZSBmYXN0IGNoYW5uZWwgc3dpdGNoaW5nIGZvciBBUjI0MTMvQVI1NDEzIHJhZGlvcy4iKTsKKworCiAvKiBNb2R1bGUgaW5mbyAqLwogTU9EVUxFX0FVVEhPUigiSmlyaSBTbGFieSIpOwogTU9EVUxFX0FVVEhPUigiTmljayBLb3NzaWZpZGlzIik7CkBAIC0yNjg2LDYgKzI2OTEsNyBAQAogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDVrX2h3X2NvbW1vbihhaCk7CiAJaW50IHJldCwgYW5pX21vZGU7CisJYm9vbCBmYXN0OwogCiAJQVRINUtfREJHKHNjLCBBVEg1S19ERUJVR19SRVNFVCwgInJlc2V0dGluZ1xuIik7CiAKQEAgLTI3MDUsNyArMjcxMSwxMCBAQAogCWF0aDVrX2RyYWluX3R4X2J1ZmZzKHNjKTsKIAlpZiAoY2hhbikKIAkJc2MtPmN1cmNoYW4gPSBjaGFuOwotCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgY2hhbiAhPSBOVUxMLAorCisJZmFzdCA9ICgoY2hhbiAhPSBOVUxMKSAmJiBtb2RwYXJhbV9mYXN0Y2hhbnN3aXRjaCkgPyAxIDogMDsKKworCXJldCA9IGF0aDVrX2h3X3Jlc2V0KGFoLCBzYy0+b3Btb2RlLCBzYy0+Y3VyY2hhbiwgZmFzdCwKIAkJCQkJCQkJc2tpcF9wY3UpOwogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAiY2FuJ3QgcmVzZXQgaGFyZHdhcmUgKCVkKVxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9yZXNldC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKaW5kZXggMzUxMGRlMi4uMTI2YTRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMKQEAgLTExMjQsOCArMTEyNCwxMSBAQAogCQkJLyogTm9uIGZhdGFsLCBjYW4gaGFwcGVuIGVnLgogCQkJICogb24gbW9kZSBjaGFuZ2UgKi8KIAkJCXJldCA9IDA7Ci0JCX0gZWxzZQorCQl9IGVsc2UgeworCQkJQVRINUtfREJHKGFoLT5haF9zYywgQVRINUtfREVCVUdfUkVTRVQsCisJCQkJImZhc3QgY2hhbiBjaGFuZ2Ugc3VjY2Vzc2Z1bFxuIik7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUuYwppbmRleCBmOWRiMjViLi5mYWNjOTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LmMKQEAgLTEyMTgsMTAgKzEyMTgsMTAgQEAKIAkgKiByZWNlaXZlIGNvbW1pdF9yeG9uIHJlcXVlc3QKIAkgKiBhYm9ydCBhbnkgcHJldmlvdXMgY2hhbm5lbCBzd2l0Y2ggaWYgc3RpbGwgaW4gcHJvY2VzcwogCSAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgJiYKLQkgICAgKHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CisJaWYgKHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSAmJgorCSAgICAocHJpdi0+c3dpdGNoX2NoYW5uZWwgIT0gY3R4LT5zdGFnaW5nLmNoYW5uZWwpKSB7CiAJCUlXTF9ERUJVR18xMUgocHJpdiwgImFib3J0IGNoYW5uZWwgc3dpdGNoIG9uICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsKSk7CisJCSAgICAgIGxlMTZfdG9fY3B1KHByaXYtPnN3aXRjaF9jaGFubmVsKSk7CiAJCWl3bF9sZWdhY3lfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogCkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwogCQlpd2xfbGVnYWN5X3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdiwgY3R4KTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gc2V0X3R4X3Bvd2VyOwogCX0KIAogCS8qIElmIHdlIGFyZSBjdXJyZW50bHkgYXNzb2NpYXRlZCBhbmQgdGhlIG5ldyBjb25maWcgcmVxdWlyZXMKQEAgLTEzMTcsNiArMTMxNyw3IEBACiAKIAlpd2w0OTY1X2luaXRfc2Vuc2l0aXZpdHkocHJpdik7CiAKK3NldF90eF9wb3dlcjoKIAkvKiBJZiB3ZSBpc3N1ZSBhIG5ldyBSWE9OIGNvbW1hbmQgd2hpY2ggcmVxdWlyZWQgYSB0dW5lIHRoZW4gd2UgbXVzdAogCSAqIHNlbmQgYSBuZXcgVFhQT1dFUiBjb21tYW5kIG9yIHdlIHdvbid0IGJlIGFibGUgdG8gVHggYW55IGZyYW1lcyAqLwogCXJldCA9IGl3bF9sZWdhY3lfc2V0X3R4X3Bvd2VyKHByaXYsIHByaXYtPnR4X3Bvd2VyX25leHQsIHRydWUpOwpAQCAtMTQwMyw5ICsxNDA0LDYgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwgPSBjbWQuY2hhbm5lbDsKLQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotCiAJcmV0dXJuIGl3bF9sZWdhY3lfc2VuZF9jbWRfcGR1KHByaXYsCiAJCQkgUkVQTFlfQ0hBTk5FTF9TV0lUQ0gsIHNpemVvZihjbWQpLCAmY21kKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCmluZGV4IDQyZGY4MzIuLjNiZTc2YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwpAQCAtODU5LDEyICs4NTksOCBAQAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCi0JaWYgKHByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykgeworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShjdHgtPnZpZiwgaXNfc3VjY2Vzcyk7Ci0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gZmFsc2U7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCX0KIH0KIEVYUE9SVF9TWU1CT0woaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKTsKIApAQCAtODc2LDE5ICs4NzIsMTkgQEAKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOwogCXN0cnVjdCBpd2xfbGVnYWN5X3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmY3R4LT5hY3RpdmU7CiAKLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7Ci0JCWlmICghbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpICYmCi0JCSAgICAoY3NhLT5jaGFubmVsID09IHByaXYtPnN3aXRjaF9yeG9uLmNoYW5uZWwpKSB7Ci0JCQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOwotCQkJY3R4LT5zdGFnaW5nLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JCQlJV0xfREVCVUdfMTFIKHByaXYsICJDU0Egbm90aWY6IGNoYW5uZWwgJWRcbiIsCisJaWYgKCF0ZXN0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCWlmICghbGUzMl90b19jcHUoY3NhLT5zdGF0dXMpICYmIGNzYS0+Y2hhbm5lbCA9PSBwcml2LT5zd2l0Y2hfY2hhbm5lbCkgeworCQlyeG9uLT5jaGFubmVsID0gY3NhLT5jaGFubmVsOworCQljdHgtPnN0YWdpbmcuY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwkJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkXG4iLAogCQkJICAgICAgbGUxNl90b19jcHUoY3NhLT5jaGFubmVsKSk7Ci0JCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgdHJ1ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKLQkJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOwotCQkJaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKLQkJfQorCQlpd2xfbGVnYWN5X2Noc3dpdGNoX2RvbmUocHJpdiwgdHJ1ZSk7CisJfSBlbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQ1NBIG5vdGlmIChmYWlsKSA6IGNoYW5uZWwgJWRcbiIsCisJCQlsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKKwkJaXdsX2xlZ2FjeV9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9sZWdhY3lfcnhfY3NhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5oCmluZGV4IGJjNjZjNjAuLmM1ZmJkYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuaApAQCAtNTYwLDcgKzU2MCw3IEBACiAjZGVmaW5lIFNUQVRVU19TQ0FOX0hXCQkxNQogI2RlZmluZSBTVEFUVVNfUE9XRVJfUE1JCTE2CiAjZGVmaW5lIFNUQVRVU19GV19FUlJPUgkJMTcKLQorI2RlZmluZSBTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORyAxOAogCiBzdGF0aWMgaW5saW5lIGludCBpd2xfbGVnYWN5X2lzX3JlYWR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAppbmRleCBiZTAxMDZjLi5lYTMwMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCkBAIC04NTUsMTcgKzg1NSw2IEBACiB9OwogCiAvKgotICogaXdsX3N3aXRjaF9yeG9uOiAiY2hhbm5lbCBzd2l0Y2giIHN0cnVjdHVyZQotICoKLSAqIEAgc3dpdGNoX2luX3Byb2dyZXNzOiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcwotICogQCBjaGFubmVsOiBuZXcgY2hhbm5lbAotICovCi1zdHJ1Y3QgaXdsX3N3aXRjaF9yeG9uIHsKLQlib29sIHN3aXRjaF9pbl9wcm9ncmVzczsKLQlfX2xlMTYgY2hhbm5lbDsKLX07Ci0KLS8qCiAgKiBzY2hlZHVsZSB0aGUgdGltZXIgdG8gd2FrZSB1cCBldmVyeSBVQ09ERV9UUkFDRV9QRVJJT0QgbWlsbGlzZWNvbmRzCiAgKiB0byBwZXJmb3JtIGNvbnRpbnVvdXMgdUNvZGUgZXZlbnQgbG9nZ2luZyBvcGVyYXRpb24gaWYgZW5hYmxlZAogICovCkBAIC0xMTE1LDcgKzExMDQsNyBAQAogCiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgY29udGV4dHNbTlVNX0lXTF9SWE9OX0NUWF07CiAKLQlzdHJ1Y3QgaXdsX3N3aXRjaF9yeG9uIHN3aXRjaF9yeG9uOworCV9fbGUxNiBzd2l0Y2hfY2hhbm5lbDsKIAogCS8qIDFzdCByZXNwb25zZXMgZnJvbSBpbml0aWFsaXplIGFuZCBydW50aW1lIHVDb2RlIGltYWdlcy4KIAkgKiBfNDk2NSdzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsNDk2NS1iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYwppbmRleCBhZjJhZTIyLi43MTU3YmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYwpAQCAtMjg2MSwxNiArMjg2MSwxMyBAQAogCQlnb3RvIG91dDsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQorCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpIHx8CisJICAgIHRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWl3bF9sZWdhY3lfaXNfYXNzb2NpYXRlZF9jdHgoY3R4KSkKIAkJZ290byBvdXQ7CiAKLQkvKiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcyAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPT0gdHJ1ZSkKLQkJZ290byBvdXQ7Ci0KIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKSB7CiAKIAkJY2ggPSBjaGFubmVsLT5od192YWx1ZTsKQEAgLTI5MTksMTUgKzI5MTYsMTggQEAKIAkJCSAqIGF0IHRoaXMgcG9pbnQsIHN0YWdpbmdfcnhvbiBoYXMgdGhlCiAJCQkgKiBjb25maWd1cmF0aW9uIGZvciBjaGFubmVsIHN3aXRjaAogCQkJICovCi0JCQlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKHByaXYsCi0JCQkJCQkJCSAgICBjaF9zd2l0Y2gpKQotCQkJCXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcyA9IGZhbHNlOworCQkJc2V0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cyk7CisJCQlwcml2LT5zd2l0Y2hfY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoKTsKKwkJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5zZXRfY2hhbm5lbF9zd2l0Y2gocHJpdiwgY2hfc3dpdGNoKSkgeworCQkJCWNsZWFyX2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywKKwkJCQkJICAmcHJpdi0+c3RhdHVzKTsKKwkJCQlwcml2LT5zd2l0Y2hfY2hhbm5lbCA9IDA7CisJCQkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGZhbHNlKTsKKwkJCX0KIAkJfQogCX0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpZiAoIXByaXYtPnN3aXRjaF9yeG9uLnN3aXRjaF9pbl9wcm9ncmVzcykKLQkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUoY3R4LT52aWYsIGZhbHNlKTsKIAlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMjAwMC5jCmluZGV4IDg2ZmVlYzguLjIyODIyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTIwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0yMDAwLmMKQEAgLTE3Nyw3OSArMTc3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wyMDMwX2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggKmNoX3N3aXRjaCkKLXsKLQkvKgotCSAqIE1VTFRJLUZJWE1FCi0JICogU2VlIGl3bF9tYWNfY2hhbm5lbF9zd2l0Y2guCi0JICovCi0Jc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgKmN0eCA9ICZwcml2LT5jb250ZXh0c1tJV0xfUlhPTl9DVFhfQlNTXTsKLQlzdHJ1Y3QgaXdsNjAwMF9jaGFubmVsX3N3aXRjaF9jbWQgY21kOwotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCXUzMiBzd2l0Y2hfdGltZV9pbl91c2VjLCB1Y29kZV9zd2l0Y2hfdGltZTsKLQl1MTYgY2g7Ci0JdTMyIHRzZl9sb3c7Ci0JdTggc3dpdGNoX2NvdW50OwotCXUxNiBiZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShjdHgtPnRpbWluZy5iZWFjb25faW50ZXJ2YWwpOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBjdHgtPnZpZjsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGhjbWQgPSB7Ci0JCS5pZCA9IFJFUExZX0NIQU5ORUxfU1dJVENILAotCQkubGVuID0geyBzaXplb2YoY21kKSwgfSwKLQkJLmZsYWdzID0gQ01EX1NZTkMsCi0JCS5kYXRhID0geyAmY21kLCB9LAotCX07Ci0KLQljbWQuYmFuZCA9IHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQljaCA9IGNoX3N3aXRjaC0+Y2hhbm5lbC0+aHdfdmFsdWU7Ci0JSVdMX0RFQlVHXzExSChwcml2LCAiY2hhbm5lbCBzd2l0Y2ggZnJvbSAldSB0byAldVxuIiwKLQkJY3R4LT5hY3RpdmUuY2hhbm5lbCwgY2gpOwotCWNtZC5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2gpOwotCWNtZC5yeG9uX2ZsYWdzID0gY3R4LT5zdGFnaW5nLmZsYWdzOwotCWNtZC5yeG9uX2ZpbHRlcl9mbGFncyA9IGN0eC0+c3RhZ2luZy5maWx0ZXJfZmxhZ3M7Ci0Jc3dpdGNoX2NvdW50ID0gY2hfc3dpdGNoLT5jb3VudDsKLQl0c2ZfbG93ID0gY2hfc3dpdGNoLT50aW1lc3RhbXAgJiAweDBmZmZmZmZmZjsKLQkvKgotCSAqIGNhbGN1bGF0ZSB0aGUgdWNvZGUgY2hhbm5lbCBzd2l0Y2ggdGltZQotCSAqIGFkZGluZyBUU0YgYXMgb25lIG9mIHRoZSBmYWN0b3IgZm9yIHdoZW4gdG8gc3dpdGNoCi0JICovCi0JaWYgKChwcml2LT51Y29kZV9iZWFjb25fdGltZSA+IHRzZl9sb3cpICYmIGJlYWNvbl9pbnRlcnZhbCkgewotCQlpZiAoc3dpdGNoX2NvdW50ID4gKChwcml2LT51Y29kZV9iZWFjb25fdGltZSAtIHRzZl9sb3cpIC8KLQkJICAgIGJlYWNvbl9pbnRlcnZhbCkpIHsKLQkJCXN3aXRjaF9jb3VudCAtPSAocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUgLQotCQkJCXRzZl9sb3cpIC8gYmVhY29uX2ludGVydmFsOwotCQl9IGVsc2UKLQkJCXN3aXRjaF9jb3VudCA9IDA7Ci0JfQotCWlmIChzd2l0Y2hfY291bnQgPD0gMSkKLQkJY21kLnN3aXRjaF90aW1lID0gY3B1X3RvX2xlMzIocHJpdi0+dWNvZGVfYmVhY29uX3RpbWUpOwotCWVsc2UgewotCQlzd2l0Y2hfdGltZV9pbl91c2VjID0KLQkJCXZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCAqIHN3aXRjaF9jb3VudCAqIFRJTUVfVU5JVDsKLQkJdWNvZGVfc3dpdGNoX3RpbWUgPSBpd2xfdXNlY3NfdG9fYmVhY29ucyhwcml2LAotCQkJCQkJc3dpdGNoX3RpbWVfaW5fdXNlYywKLQkJCQkJCWJlYWNvbl9pbnRlcnZhbCk7Ci0JCWNtZC5zd2l0Y2hfdGltZSA9IGl3bF9hZGRfYmVhY29uX3RpbWUocHJpdiwKLQkJCQkJCXByaXYtPnVjb2RlX2JlYWNvbl90aW1lLAotCQkJCQkJdWNvZGVfc3dpdGNoX3RpbWUsCi0JCQkJCQliZWFjb25faW50ZXJ2YWwpOwotCX0KLQlJV0xfREVCVUdfMTFIKHByaXYsICJ1Q29kZSB0aW1lIGZvciB0aGUgc3dpdGNoIGlzIDB4JXhcbiIsCi0JCSAgICAgIGNtZC5zd2l0Y2hfdGltZSk7Ci0JY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIHByaXYtPmJhbmQsIGNoKTsKLQlpZiAoY2hfaW5mbykKLQkJY21kLmV4cGVjdF9iZWFjb24gPSBpc19jaGFubmVsX3JhZGFyKGNoX2luZm8pOwotCWVsc2UgewotCQlJV0xfRVJSKHByaXYsICJpbnZhbGlkIGNoYW5uZWwgc3dpdGNoIGZyb20gJXUgdG8gJXVcbiIsCi0JCQljdHgtPmFjdGl2ZS5jaGFubmVsLCBjaCk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY21kLmNoYW5uZWw7Ci0JcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gdHJ1ZTsKLQotCXJldHVybiBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmaGNtZCk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgaXdsX2xpYl9vcHMgaXdsMjAwMF9saWIgPSB7CiAJLnNldF9od19wYXJhbXMgPSBpd2wyMDAwX2h3X3NldF9od19wYXJhbXMsCiAJLnJ4X2hhbmRsZXJfc2V0dXAgPSBpd2xhZ25fcnhfaGFuZGxlcl9zZXR1cCwKQEAgLTI1OCw3ICsxODUsNiBAQAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsYWduX2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2xhZ25fc2VuZF90eF9wb3dlciwKIAkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKLQkuc2V0X2NoYW5uZWxfc3dpdGNoID0gaXdsMjAzMF9od19jaGFubmVsX3N3aXRjaCwKIAkuYXBtX29wcyA9IHsKIAkJLmluaXQgPSBpd2xfYXBtX2luaXQsCiAJCS5jb25maWcgPSBpd2wyMDAwX25pY19jb25maWcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKaW5kZXggYTcwYjhjZi4uZjk5ZjljMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwpAQCAtMzMxLDggKzMzMSw2IEBACiAJCQljdHgtPmFjdGl2ZS5jaGFubmVsLCBjaCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY21kLmNoYW5uZWw7Ci0JcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAogCXJldHVybiBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmaGNtZCk7CiB9CkBAIC00MjUsNyArNDIzLDYgQEAKIH07CiBzdGF0aWMgc3RydWN0IGl3bF9odF9wYXJhbXMgaXdsNTAwMF9odF9wYXJhbXMgPSB7CiAJLmh0X2dyZWVuZmllbGRfc3VwcG9ydCA9IHRydWUsCi0JLnVzZV9ydHNfZm9yX2FnZ3JlZ2F0aW9uID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogfTsKIAogI2RlZmluZSBJV0xfREVWSUNFXzUwMDAJCQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKaW5kZXggZmRhNmZlMC4uZmJlNTY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwpAQCAtMjcwLDggKzI3MCw2IEBACiAJCQljdHgtPmFjdGl2ZS5jaGFubmVsLCBjaCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KLQlwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsID0gY21kLmNoYW5uZWw7Ci0JcHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzID0gdHJ1ZTsKIAogCXJldHVybiBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmaGNtZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWhjbWQuYwppbmRleCBiMTJjNzJkLi4yM2ZhOTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLmMKQEAgLTE2MywxNyArMTYzLDkgQEAKIAkJCQkgICAgIF9fbGUxNiBmYywgX19sZTMyICp0eF9mbGFncykKIHsKIAlpZiAoaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUyB8fAotCSAgICBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgeworCSAgICBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCB8fAorCSAgICBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCiAJCSp0eF9mbGFncyB8PSBUWF9DTURfRkxHX1BST1RfUkVRVUlSRV9NU0s7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocHJpdi0+Y2ZnLT5odF9wYXJhbXMgJiYKLQkgICAgcHJpdi0+Y2ZnLT5odF9wYXJhbXMtPnVzZV9ydHNfZm9yX2FnZ3JlZ2F0aW9uICYmCi0JICAgIGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewotCQkqdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19QUk9UX1JFUVVJUkVfTVNLOwotCQlyZXR1cm47Ci0JfQogfQogCiAvKiBDYWxjIG1heCBzaWduYWwgbGV2ZWwgKGRCbSkgYW1vbmcgMyBwb3NzaWJsZSByZWNlaXZlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCmluZGV4IGE5NWFkODQuLjA5ZjY3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwpAQCAtMzI1LDYgKzMyNSwxNCBAQAogCQkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBmb3JjZSBDVFMtdG8tc2VsZiBmcmFtZXMgcHJvdGVjdGlvbiBpZiBSVFMtQ1RTIGlzIG5vdCBwcmVmZXJyZWQKKwkgKiBvbmUgYWdncmVnYXRpb24gcHJvdGVjdGlvbiBtZXRob2QKKwkgKi8KKwlpZiAoIShwcml2LT5jZmctPmh0X3BhcmFtcyAmJgorCSAgICAgIHByaXYtPmNmZy0+aHRfcGFyYW1zLT51c2VfcnRzX2Zvcl9hZ2dyZWdhdGlvbikpCisJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19TRUxGX0NUU19FTjsKKwogCWlmICgoY3R4LT52aWYgJiYgY3R4LT52aWYtPmJzc19jb25mLnVzZV9zaG9ydF9zbG90KSB8fAogCSAgICAhKGN0eC0+c3RhZ2luZy5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykpCiAJCWN0eC0+c3RhZ2luZy5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKQEAgLTM0MiwxMCArMzUwLDEwIEBACiAJICogcmVjZWl2ZSBjb21taXRfcnhvbiByZXF1ZXN0CiAJICogYWJvcnQgYW55IHByZXZpb3VzIGNoYW5uZWwgc3dpdGNoIGlmIHN0aWxsIGluIHByb2Nlc3MKIAkgKi8KLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzICYmCi0JICAgIChwcml2LT5zd2l0Y2hfcnhvbi5jaGFubmVsICE9IGN0eC0+c3RhZ2luZy5jaGFubmVsKSkgeworCWlmICh0ZXN0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykgJiYKKwkgICAgKHByaXYtPnN3aXRjaF9jaGFubmVsICE9IGN0eC0+c3RhZ2luZy5jaGFubmVsKSkgewogCQlJV0xfREVCVUdfMTFIKHByaXYsICJhYm9ydCBjaGFubmVsIHN3aXRjaCBvbiAlZFxuIiwKLQkJICAgICAgbGUxNl90b19jcHUocHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpOworCQkJICAgICAgbGUxNl90b19jcHUocHJpdi0+c3dpdGNoX2NoYW5uZWwpKTsKIAkJaXdsX2Noc3dpdGNoX2RvbmUocHJpdiwgZmFsc2UpOwogCX0KIApAQCAtMzYyLDYgKzM3MCwxMSBAQAogCQl9CiAKIAkJbWVtY3B5KGFjdGl2ZSwgJmN0eC0+c3RhZ2luZywgc2l6ZW9mKCphY3RpdmUpKTsKKwkJLyoKKwkJICogV2UgZG8gbm90IGNvbW1pdCB0eCBwb3dlciBzZXR0aW5ncyB3aGlsZSBjaGFubmVsIGNoYW5naW5nLAorCQkgKiBkbyBpdCBub3cgaWYgYWZ0ZXIgc2V0dGluZ3MgY2hhbmdlZC4KKwkJICovCisJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgcHJpdi0+dHhfcG93ZXJfbmV4dCwgZmFsc2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggYTY2MmFkYy4uOGUxOTQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTI4NDMsMTYgKzI4NDMsMTMgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAorCSAgICB0ZXN0X2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFpd2xfaXNfYXNzb2NpYXRlZF9jdHgoY3R4KSkKIAkJZ290byBvdXQ7CiAKLQkvKiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcyAqLwotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPT0gdHJ1ZSkKLQkJZ290byBvdXQ7Ci0KIAlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2V0X2NoYW5uZWxfc3dpdGNoKSB7CiAKIAkJY2ggPSBjaGFubmVsLT5od192YWx1ZTsKQEAgLTI5MDEsMTUgKzI4OTgsMTkgQEAKIAkJCSAqIGF0IHRoaXMgcG9pbnQsIHN0YWdpbmdfcnhvbiBoYXMgdGhlCiAJCQkgKiBjb25maWd1cmF0aW9uIGZvciBjaGFubmVsIHN3aXRjaAogCQkJICovCisJCQlzZXRfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKKwkJCXByaXYtPnN3aXRjaF9jaGFubmVsID0gY3B1X3RvX2xlMTYoY2gpOwogCQkJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnNldF9jaGFubmVsX3N3aXRjaChwcml2LAotCQkJCQkJCQkgICAgY2hfc3dpdGNoKSkKLQkJCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKKwkJCQkJCQkJICAgIGNoX3N3aXRjaCkpIHsKKwkJCQljbGVhcl9iaXQoU1RBVFVTX0NIQU5ORUxfU1dJVENIX1BFTkRJTkcsCisJCQkJCSAgJnByaXYtPnN0YXR1cyk7CisJCQkJcHJpdi0+c3dpdGNoX2NoYW5uZWwgPSAwOworCQkJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBmYWxzZSk7CisJCQl9CiAJCX0KIAl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKCFwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpCi0JCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBmYWxzZSk7CiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA0NjUzZGVhLi4yMTNjODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC04NDMsMTIgKzg0Myw4IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlpZiAocHJpdi0+c3dpdGNoX3J4b24uc3dpdGNoX2luX3Byb2dyZXNzKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCWllZWU4MDIxMV9jaHN3aXRjaF9kb25lKGN0eC0+dmlmLCBpc19zdWNjZXNzKTsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCQlwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JfQogfQogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAppbmRleCAzYmI3NmY2Li5hNTRkNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCkBAIC01NjAsNiArNTYwLDcgQEAKICNkZWZpbmUgU1RBVFVTX1BPV0VSX1BNSQkxNgogI2RlZmluZSBTVEFUVVNfRldfRVJST1IJCTE3CiAjZGVmaW5lIFNUQVRVU19ERVZJQ0VfRU5BQkxFRAkxOAorI2RlZmluZSBTVEFUVVNfQ0hBTk5FTF9TV0lUQ0hfUEVORElORyAxOQogCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9pc19yZWFkeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCmluZGV4IDIyYTZlM2UuLmM4ZGUyMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldi5oCkBAIC05ODIsMTcgKzk4Miw2IEBACiB9OwogCiAvKgotICogaXdsX3N3aXRjaF9yeG9uOiAiY2hhbm5lbCBzd2l0Y2giIHN0cnVjdHVyZQotICoKLSAqIEAgc3dpdGNoX2luX3Byb2dyZXNzOiBjaGFubmVsIHN3aXRjaCBpbiBwcm9ncmVzcwotICogQCBjaGFubmVsOiBuZXcgY2hhbm5lbAotICovCi1zdHJ1Y3QgaXdsX3N3aXRjaF9yeG9uIHsKLQlib29sIHN3aXRjaF9pbl9wcm9ncmVzczsKLQlfX2xlMTYgY2hhbm5lbDsKLX07Ci0KLS8qCiAgKiBzY2hlZHVsZSB0aGUgdGltZXIgdG8gd2FrZSB1cCBldmVyeSBVQ09ERV9UUkFDRV9QRVJJT0QgbWlsbGlzZWNvbmRzCiAgKiB0byBwZXJmb3JtIGNvbnRpbnVvdXMgdUNvZGUgZXZlbnQgbG9nZ2luZyBvcGVyYXRpb24gaWYgZW5hYmxlZAogICovCkBAIC0xMjg3LDcgKzEyNzYsNyBAQAogCiAJc3RydWN0IGl3bF9yeG9uX2NvbnRleHQgY29udGV4dHNbTlVNX0lXTF9SWE9OX0NUWF07CiAKLQlzdHJ1Y3QgaXdsX3N3aXRjaF9yeG9uIHN3aXRjaF9yeG9uOworCV9fbGUxNiBzd2l0Y2hfY2hhbm5lbDsKIAogCXN0cnVjdCB7CiAJCXUzMiBlcnJvcl9ldmVudF90YWJsZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCmluZGV4IDAwNTNlOWUuLmI3NzQ1MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwpAQCAtMjUwLDE5ICsyNTAsMTkgQEAKIAlzdHJ1Y3QgaXdsX3J4b25fY29udGV4dCAqY3R4ID0gJnByaXYtPmNvbnRleHRzW0lXTF9SWE9OX0NUWF9CU1NdOwogCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZjdHgtPmFjdGl2ZTsKIAotCWlmIChwcml2LT5zd2l0Y2hfcnhvbi5zd2l0Y2hfaW5fcHJvZ3Jlc3MpIHsKLQkJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYKLQkJICAgIChjc2EtPmNoYW5uZWwgPT0gcHJpdi0+c3dpdGNoX3J4b24uY2hhbm5lbCkpIHsKLQkJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JCQljdHgtPnN0YWdpbmcuY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQkJCUlXTF9ERUJVR18xMUgocHJpdiwgIkNTQSBub3RpZjogY2hhbm5lbCAlZFxuIiwKKwlpZiAoIXRlc3RfYml0KFNUQVRVU19DSEFOTkVMX1NXSVRDSF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJcmV0dXJuOworCisJaWYgKCFsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykgJiYgY3NhLT5jaGFubmVsID09IHByaXYtPnN3aXRjaF9jaGFubmVsKSB7CisJCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7CisJCWN0eC0+c3RhZ2luZy5jaGFubmVsID0gY3NhLT5jaGFubmVsOworCQlJV0xfREVCVUdfMTFIKHByaXYsICJDU0Egbm90aWY6IGNoYW5uZWwgJWRcbiIsCiAJCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKLQkJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIHRydWUpOwotCQl9IGVsc2UgewotCQkJSVdMX0VSUihwcml2LCAiQ1NBIG5vdGlmIChmYWlsKSA6IGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpKTsKLQkJCWl3bF9jaHN3aXRjaF9kb25lKHByaXYsIGZhbHNlKTsKLQkJfQorCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCB0cnVlKTsKKwl9IGVsc2UgeworCQlJV0xfRVJSKHByaXYsICJDU0Egbm90aWYgKGZhaWwpIDogY2hhbm5lbCAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCkpOworCQlpd2xfY2hzd2l0Y2hfZG9uZShwcml2LCBmYWxzZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKaW5kZXggYTdiNWNiMC4uMjI0ZTk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYwpAQCAtOTA3LDcgKzkwNyw3IEBACiAJY2FyZCA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAKIAljYXVzZSA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSUZfU0RJT19IX0lOVF9TVEFUVVMsICZyZXQpOwotCWlmIChyZXQpCisJaWYgKHJldCB8fCAhY2F1c2UpCiAJCWdvdG8gb3V0OwogCiAJbGJzX2RlYl9zZGlvKCJpbnRlcnJ1cHQ6IDB4JVhcbiIsICh1bnNpZ25lZCljYXVzZSk7CkBAIC0xMDA4LDEwICsxMDA4LDYgQEAKIAlpZiAocmV0KQogCQlnb3RvIHJlbGVhc2U7CiAKLQlyZXQgPSBzZGlvX2NsYWltX2lycShmdW5jLCBpZl9zZGlvX2ludGVycnVwdCk7Ci0JaWYgKHJldCkKLQkJZ290byBkaXNhYmxlOwotCiAJLyogRm9yIDEtYml0IHRyYW5zZmVycyB0byB0aGUgODY4NiBtb2RlbCwgd2UgbmVlZCB0byBlbmFibGUgdGhlCiAJICogaW50ZXJydXB0IGZsYWcgaW4gdGhlIENDQ1IgcmVnaXN0ZXIuIFNldCB0aGUgTU1DX1FVSVJLX0xFTklFTlRfRk4wCiAJICogYml0IHRvIGFsbG93IGFjY2VzcyB0byBub24tdmVuZG9yIHJlZ2lzdGVycy4gKi8KQEAgLTEwODMsNiArMTA3OSwyMSBAQAogCQljYXJkLT5yeF91bml0ID0gMDsKIAogCS8qCisJICogU2V0IHVwIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBsYXRlLgorCSAqCisJICogSWYgd2Ugc2V0IGl0IHVwIGVhcmxpZXIsIHRoZSAoYnVnZ3kpIGhhcmR3YXJlIGdlbmVyYXRlcyBhIHNwdXJpb3VzCisJICogaW50ZXJydXB0LCBldmVuIGJlZm9yZSB0aGUgaW50ZXJydXB0IGhhcyBiZWVuIGVuYWJsZWQsIHdpdGgKKwkgKiBDQ0NSX0lOVHggPSAwLgorCSAqCisJICogV2UgcmVnaXN0ZXIgdGhlIGludGVycnVwdCBoYW5kbGVyIGxhdGUgc28gdGhhdCB3ZSBjYW4gaGFuZGxlIGFueQorCSAqIHNwdXJpb3VzIGludGVycnVwdHMsIGFuZCBhbHNvIHRvIGF2b2lkIGdlbmVyYXRpb24gb2YgdGhhdCBrbm93bgorCSAqIHNwdXJpb3VzIGludGVycnVwdCBpbiB0aGUgZmlyc3QgcGxhY2UuCisJICovCisJcmV0ID0gc2Rpb19jbGFpbV9pcnEoZnVuYywgaWZfc2Rpb19pbnRlcnJ1cHQpOworCWlmIChyZXQpCisJCWdvdG8gZGlzYWJsZTsKKworCS8qCiAJICogRW5hYmxlIGludGVycnVwdHMgbm93IHRoYXQgZXZlcnl0aGluZyBpcyBzZXQgdXAKIAkgKi8KIAlzZGlvX3dyaXRlYihmdW5jLCAweDBmLCBJRl9TRElPX0hfSU5UX01BU0ssICZyZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCmluZGV4IDU1NTE4MGQuLmI3MDRlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKQEAgLTI1MCw3ICsyNTAsOCBAQAogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkKIAkJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAotCWlmICh0ZXN0X2JpdChSRVFVSVJFX1BTX0FVVE9XQUtFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgJiYKKwkgICAgdGVzdF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSAmJgogCSAgICAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSAmJgogCSAgICAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpIHsKIAkJYmVhY29uX2RpZmYgPSAobG9uZylqaWZmaWVzIC0gKGxvbmcpcnQyeDAwZGV2LT5sYXN0X2JlYWNvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCBjMDE4ZDY3YS4uOTM5ODIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMTQ2LDYgKzE0Niw5IEBACiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9CiAJICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgYXV0b3dha2V1cF93b3JrLndvcmspOwogCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfUFJFU0VOVCwgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKIAlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX0FXQUtFKSkKIAkJRVJST1IocnQyeDAwZGV2LCAiRGV2aWNlIGZhaWxlZCB0byB3YWtldXAuXG4iKTsKIAljbGVhcl9iaXQoQ09ORklHX1BPV0VSU0FWSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CkBAIC0xMTYwLDYgKzExNjMsNyBAQAogCSAqIFN0b3AgYWxsIHdvcmsuCiAJICovCiAJY2FuY2VsX3dvcmtfc3luYygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5hdXRvd2FrZXVwX3dvcmspOwogCWlmIChydDJ4MDBfaXNfdXNiKHJ0MngwMGRldikpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJnJ0MngwMGRldi0+dHhzdGF0dXNfdGltZXIpOwogCQljYW5jZWxfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJ4ZG9uZV93b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCmluZGV4IDg5MTAwZTcuLjlmOGNjYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYwpAQCAtNjY5LDYgKzY2OSwxOSBAQAogCQkJCQkJCSAmcnhfc3RhdHVzLAogCQkJCQkJCSAodTggKikgcGRlc2MsIHNrYik7CiAKKwkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKKwkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKKwkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKKwkJCQkJIERCR19ETUVTRywKKwkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKworCQkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCisJCQkJCSAqKChkbWFfYWRkcl90ICopIHNrYi0+Y2IpLAorCQkJCQkgcnRscGNpLT5yeGJ1ZmZlcnNpemUsCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCiAJCQlza2JfcHV0KHNrYiwgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9kZXNjKCh1OCAqKSBwZGVzYywKIAkJCQkJCQkgZmFsc2UsCiAJCQkJCQkJIEhXX0RFU0NfUlhQS1RfTEVOKSk7CkBAIC02ODUsMjIgKzY5OCw3IEBACiAJCQloZHIgPSBydGxfZ2V0X2hkcihza2IpOwogCQkJZmMgPSBydGxfZ2V0X2ZjKHNrYik7CiAKLQkJCS8qIHRyeSBmb3IgbmV3IGJ1ZmZlciAtIGlmIGFsbG9jYXRpb24gZmFpbHMsIGRyb3AKLQkJCSAqIGZyYW1lIGFuZCByZXVzZSBvbGQgYnVmZmVyCi0JCQkgKi8KLQkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKHJ0bHBjaS0+cnhidWZmZXJzaXplKTsKLQkJCWlmICh1bmxpa2VseSghbmV3X3NrYikpIHsKLQkJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKLQkJCQkJIERCR19ETUVTRywKLQkJCQkJICgiY2FuJ3QgYWxsb2Mgc2tiIGZvciByeFxuIikpOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCXBjaV91bm1hcF9zaW5nbGUocnRscGNpLT5wZGV2LAotCQkJCQkgKigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSwKLQkJCQkJIHJ0bHBjaS0+cnhidWZmZXJzaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQotCQkJaWYgKCFzdGF0cy5jcmMgfHwgIXN0YXRzLmh3ZXJyb3IpIHsKKwkJCWlmICghc3RhdHMuY3JjICYmICFzdGF0cy5od2Vycm9yKSB7CiAJCQkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihza2IpLCAmcnhfc3RhdHVzLAogCQkJCSAgICAgICBzaXplb2Yocnhfc3RhdHVzKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvYnVmZmVyX3N5bmMuYwppbmRleCBhMzk4NGY0Li5mMzRiNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL29wcm9maWxlL2J1ZmZlcl9zeW5jLmMKKysrIGIvZHJpdmVycy9vcHJvZmlsZS9idWZmZXJfc3luYy5jCkBAIC0xNDEsNiArMTQxLDEzIEBACiAJLm5vdGlmaWVyX2NhbGwgPSBtb2R1bGVfbG9hZF9ub3RpZnksCiB9OwogCitzdGF0aWMgdm9pZCBmcmVlX2FsbF90YXNrcyh2b2lkKQoreworCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWFrIHRhc2sgc3RydWN0cyAqLworCXByb2Nlc3NfdGFza19tb3J0dWFyeSgpOworCXByb2Nlc3NfdGFza19tb3J0dWFyeSgpOworfQorCiBpbnQgc3luY19zdGFydCh2b2lkKQogewogCWludCBlcnI7CkBAIC0xNDgsOCArMTU1LDYgQEAKIAlpZiAoIXphbGxvY19jcHVtYXNrX3ZhcigmbWFya2VkX2NwdXMsIEdGUF9LRVJORUwpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW11dGV4X2xvY2soJmJ1ZmZlcl9tdXRleCk7Ci0KIAllcnIgPSB0YXNrX2hhbmRvZmZfcmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7CiAJaWYgKGVycikKIAkJZ290byBvdXQxOwpAQCAtMTY2LDcgKzE3MSw2IEBACiAJc3RhcnRfY3B1X3dvcmsoKTsKIAogb3V0OgotCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKIAlyZXR1cm4gZXJyOwogb3V0NDoKIAlwcm9maWxlX2V2ZW50X3VucmVnaXN0ZXIoUFJPRklMRV9NVU5NQVAsICZtdW5tYXBfbmIpOwpAQCAtMTc0LDYgKzE3OCw3IEBACiAJcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKFBST0ZJTEVfVEFTS19FWElULCAmdGFza19leGl0X25iKTsKIG91dDI6CiAJdGFza19oYW5kb2ZmX3VucmVnaXN0ZXIoJnRhc2tfZnJlZV9uYik7CisJZnJlZV9hbGxfdGFza3MoKTsKIG91dDE6CiAJZnJlZV9jcHVtYXNrX3ZhcihtYXJrZWRfY3B1cyk7CiAJZ290byBvdXQ7CkBAIC0xODIsMjAgKzE4NywxNiBAQAogCiB2b2lkIHN5bmNfc3RvcCh2b2lkKQogewotCS8qIGZsdXNoIGJ1ZmZlcnMgKi8KLQltdXRleF9sb2NrKCZidWZmZXJfbXV0ZXgpOwogCWVuZF9jcHVfd29yaygpOwogCXVucmVnaXN0ZXJfbW9kdWxlX25vdGlmaWVyKCZtb2R1bGVfbG9hZF9uYik7CiAJcHJvZmlsZV9ldmVudF91bnJlZ2lzdGVyKFBST0ZJTEVfTVVOTUFQLCAmbXVubWFwX25iKTsKIAlwcm9maWxlX2V2ZW50X3VucmVnaXN0ZXIoUFJPRklMRV9UQVNLX0VYSVQsICZ0YXNrX2V4aXRfbmIpOwogCXRhc2tfaGFuZG9mZl91bnJlZ2lzdGVyKCZ0YXNrX2ZyZWVfbmIpOwotCW11dGV4X3VubG9jaygmYnVmZmVyX211dGV4KTsKKwliYXJyaWVyKCk7CQkJLyogZG8gYWxsIG9mIHRoZSBhYm92ZSBmaXJzdCAqLworCiAJZmx1c2hfY3B1X3dvcmsoKTsKIAotCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWFrIHRhc2sgc3RydWN0cyAqLwotCXByb2Nlc3NfdGFza19tb3J0dWFyeSgpOwotCXByb2Nlc3NfdGFza19tb3J0dWFyeSgpOwotCisJZnJlZV9hbGxfdGFza3MoKTsKIAlmcmVlX2NwdW1hc2tfdmFyKG1hcmtlZF9jcHVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCBjODVmNzQ0Li4wOTQzMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtNTEsNiArNTEsNyBAQAogb2JqLSQoQ09ORklHX01OMTAzMDApICs9IHNldHVwLWJ1cy5vCiBvYmotJChDT05GSUdfTUlDUk9CTEFaRSkgKz0gc2V0dXAtYnVzLm8KIG9iai0kKENPTkZJR19USUxFKSArPSBzZXR1cC1idXMubyBzZXR1cC1pcnEubworb2JqLSQoQ09ORklHX1NQQVJDX0xFT04pICs9IHNldHVwLWJ1cy5vIHNldHVwLWlycS5vCiAKICMKICMgQUNQSSBSZWxhdGVkIFBDSSBGVyBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDU5ZjE3YWMuLmYwMmMzNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMzM4OCw3ICszMzg4LDcgQEAKIH0KIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGluaXRfaW9tbXVfcG1fb3BzKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfaW9tbXVfcG1fb3BzKHZvaWQpIHt9CiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3B0cC9wdHBfY2hhcmRldi5jIGIvZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuYwppbmRleCBhOGQwM2FlLi5lN2YzMDFkYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHRwL3B0cF9jaGFyZGV2LmMKKysrIGIvZHJpdmVycy9wdHAvcHRwX2NoYXJkZXYuYwpAQCAtNDYsNyArNDYsOCBAQAogCQljYXBzLm5fZXh0X3RzID0gcHRwLT5pbmZvLT5uX2V4dF90czsKIAkJY2Fwcy5uX3Blcl9vdXQgPSBwdHAtPmluZm8tPm5fcGVyX291dDsKIAkJY2Fwcy5wcHMgPSBwdHAtPmluZm8tPnBwczsKLQkJZXJyID0gY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmNhcHMsIHNpemVvZihjYXBzKSk7CisJCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmY2Fwcywgc2l6ZW9mKGNhcHMpKSkKKwkJCWVyciA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCiAJY2FzZSBQVFBfRVhUVFNfUkVRVUVTVDoKQEAgLTEyOSw4ICsxMzAsMTAgQEAKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAl9CiAKLQlpZiAocHRwLT5kZWZ1bmN0KQorCWlmIChwdHAtPmRlZnVuY3QpIHsKKwkJbXV0ZXhfdW5sb2NrKCZwdHAtPnRzZXZxX211eCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZxdWV1ZS0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNTAsMTAgKzE1Myw4IEBACiAKIAltdXRleF91bmxvY2soJnB0cC0+dHNldnFfbXV4KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBldmVudCwgY250KSkgewotCQltdXRleF91bmxvY2soJnB0cC0+dHNldnFfbXV4KTsKKwlpZiAoY29weV90b191c2VyKGJ1ZiwgZXZlbnQsIGNudCkpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KIAogCXJldHVybiBjbnQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCBmODIyZTEzLi5jZTJhYWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTEwNTEsNCArMTA1MSwxMyBAQAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBkcml2ZXIgc2lkZSBvZiB0aGUgVGlsZXJhCiAJICBoeXBlcnZpc29yJ3MgcmVhbC10aW1lIGNsb2NrIGludGVyZmFjZS4KIAorY29uZmlnIFJUQ19EUlZfUFVWMworCXRyaXN0YXRlICJQS1VuaXR5IHYzIFJUQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9QVVYzCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBSVEMgaW4gdGhlIFBLVW5pdHktdjMgU29Dcy4KKworCSAgVGhpcyBkcml2ZSBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1wdXYzLgorCiBlbmRpZiAjIFJUQ19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCAyMTNkNzI1Li4wZmZlZmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNzgsNiArNzgsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfUEwwMzApCSs9IHJ0Yy1wbDAzMC5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QTDAzMSkJKz0gcnRjLXBsMDMxLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1BTMykJKz0gcnRjLXBzMy5vCitvYmotJChDT05GSUdfUlRDX0RSVl9QVVYzKQkrPSBydGMtcHV2My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9QWEEpCSs9IHJ0Yy1weGEubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfUjk3MDEpCSs9IHJ0Yy1yOTcwMS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9SUDVDMDEpCSs9IHJ0Yy1ycDVjMDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCBlZjYzMTZhLi5kZjY4NjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfcmVhZF9hbGFybSk7CiAKLWludCBfX3J0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQorc3RhdGljIGludCBfX3J0Y19zZXRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlsb25nIG5vdywgc2NoZWR1bGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IGQwZTA2ZWQuLmNhY2U2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTQyMSw3ICs0MjEsOCBAQAogCQkJZXJyID0gb3BzLT5pb2N0bChydGMtPmRldi5wYXJlbnQsIGNtZCwgYXJnKTsKIAkJCWlmIChlcnIgPT0gLUVOT0lPQ1RMQ01EKQogCQkJCWVyciA9IC1FTk9UVFk7Ci0JCX0KKwkJfSBlbHNlCisJCQllcnIgPSAtRU5PVFRZOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0OTMuYwppbmRleCAxYTg0YjNlLi43MzE3ZDNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDkzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ5My5jCkBAIC0xODksNyArMTg5LDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgbTQxdDkzX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShzcGkpOworCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsKIAogCWlmIChydGMpCiAJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jIGIvZHJpdmVycy9ydGMvcnRjLXB1djMuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3VuaWNvcmUzMi9rZXJuZWwvcnRjLmMKcmVuYW1lIHRvIGRyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKaW5kZXggOGNhZDcwYi4uNDZmMTRiOCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wdXYzLmMKQEAgLTEsNyArMSw1IEBACiAvKgotICogbGludXgvYXJjaC91bmljb3JlMzIva2VybmVsL3J0Yy5jCi0gKgotICogQ29kZSBzcGVjaWZpYyB0byBQS1VuaXR5IFNvQyBhbmQgVW5pQ29yZSBJU0EKKyAqIFJUQyBkcml2ZXIgY29kZSBzcGVjaWZpYyB0byBQS1VuaXR5IFNvQyBhbmQgVW5pQ29yZSBJU0EKICAqCiAgKglNYWludGFpbmVkIGJ5IEdVQU4gWHVlLXRhbyA8Z3h0QG1wcmMucGt1LmVkdS5jbj4KICAqCUNvcHlyaWdodCAoQykgMjAwMS0yMDEwIEd1YW4gWHVldGFvCkBAIC0zNiw3ICszNCw2IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB1djNfcnRjX3BpZV9sb2NrKTsKIAogLyogSVJRIEhhbmRsZXJzICovCi0KIHN0YXRpYyBpcnFyZXR1cm5fdCBwdXYzX3J0Y19hbGFybWlycShpbnQgaXJxLCB2b2lkICppZCkKIHsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcmRldiA9IGlkOwpAQCAtODksNyArODYsNiBAQAogfQogCiAvKiBUaW1lIHJlYWQvd3JpdGUgKi8KLQogc3RhdGljIGludCBwdXYzX3J0Y19nZXR0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0ocmVhZGwoUlRDX1JDTlIpLCBydGNfdG0pOwpAQCAtMTk2LDcgKzE5Miw2IEBACiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCS8qIGRvIG5vdCBjbGVhciBBSUUgaGVyZSwgaXQgbWF5IGJlIG5lZWRlZCBmb3Igd2FrZSAqLwotCiAJcHV2M19ydGNfc2V0cGllKGRldiwgMCk7CiAJZnJlZV9pcnEocHV2M19ydGNfYWxhcm1ubywgcnRjX2Rldik7CiAJZnJlZV9pcnEocHV2M19ydGNfdGlja25vLCBydGNfZGV2KTsKQEAgLTIxOCw3ICsyMTMsNiBAQAogCQl3cml0ZWwocmVhZGwoUlRDX1JUU1IpICYgflJUQ19SVFNSX0haRSwgUlRDX1JUU1IpOwogCX0gZWxzZSB7CiAJCS8qIHJlLWVuYWJsZSB0aGUgZGV2aWNlLCBhbmQgY2hlY2sgaXQgaXMgb2sgKi8KLQogCQlpZiAoKHJlYWRsKFJUQ19SVFNSKSAmIFJUQ19SVFNSX0haRSkgPT0gMCkgewogCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwogCQkJd3JpdGVsKHJlYWRsKFJUQ19SVFNSKSB8IFJUQ19SVFNSX0haRSwgUlRDX1JUU1IpOwpAQCAtMjUxLDcgKzI0NSw2IEBACiAJcHJfZGVidWcoIiVzOiBwcm9iZT0lcFxuIiwgX19mdW5jX18sIHBkZXYpOwogCiAJLyogZmluZCB0aGUgSVJRcyAqLwotCiAJcHV2M19ydGNfdGlja25vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKIAlpZiAocHV2M19ydGNfdGlja25vIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIHJ0YyB0aWNrXG4iKTsKQEAgLTI2OCw3ICsyNjEsNiBAQAogCQkgcHV2M19ydGNfdGlja25vLCBwdXYzX3J0Y19hbGFybW5vKTsKIAogCS8qIGdldCB0aGUgbWVtb3J5IHJlZ2lvbiAqLwotCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKQEAgLTI4OCw3ICsyODAsNiBAQAogCXB1djNfcnRjX2VuYWJsZShwZGV2LCAxKTsKIAogCS8qIHJlZ2lzdGVyIFJUQyBhbmQgZXhpdCAqLwotCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcigicGt1bml0eSIsICZwZGV2LT5kZXYsICZwdXYzX3J0Y29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIApAQCAtMzE1LDggKzMwNiw2IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotLyogUlRDIFBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCAqLwotCiBzdGF0aWMgaW50IHRpY250X3NhdmU7CiAKIHN0YXRpYyBpbnQgcHV2M19ydGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCkBAIC0zNjgsNCArMzU3LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUlRDIERyaXZlciBmb3IgdGhlIFBLVW5pdHkgdjMgY2hpcCIpOwogTU9EVUxFX0FVVEhPUigiSHUgRG9uZ2xpYW5nIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCmluZGV4IDU1ZThmNzIuLjU3MGQ0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAKIAkvKiBzcGVjaWFsIGhhbmRsaW5nIGZvciBubyB0YXJnZXQgYnVmZmVyIGVtcHR5ICovCiAJaWYgKCghcS0+aXNfaW5wdXRfcSAmJgotCSAgICAocS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZikgPT0gMHgxMCkpIHsKKwkgICAgKHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE1XS5zZmxhZ3MpID09IDB4MTApKSB7CiAJCXFwZXJmX2luYyhxLCB0YXJnZXRfZnVsbCk7CiAJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJPVVRGVUxMIEZUQzolMDJ4IiwKIAkJCSAgICAgIHEtPmZpcnN0X3RvX2NoZWNrKTsKQEAgLTQyNyw4ICs0MjcsOCBAQAogCURCRl9FUlJPUigocS0+aXNfaW5wdXRfcSkgPyAiSU46JTJkIiA6ICJPVVQ6JTJkIiwgcS0+bnIpOwogCURCRl9FUlJPUigiRlRDOiUzZCBDOiUzZCIsIHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJREJGX0VSUk9SKCJGMTQ6JTJ4IEYxNTolMngiLAotCQkgIHEtPnNiYWxbcS0+Zmlyc3RfdG9fY2hlY2tdLT5lbGVtZW50WzE0XS5mbGFncyAmIDB4ZmYsCi0JCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7CisJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTRdLnNmbGFncywKKwkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uc2ZsYWdzKTsKIAogCS8qCiAJICogSW50ZXJydXB0cyBtYXkgYmUgYXZvaWRlZCBhcyBsb25nIGFzIHRoZSBlcnJvciBpcyBwcmVzZW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCA1NWM2YWExLi5kM2NlZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTM2MSw3ICszNjEsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBxZXRoX2lzX2xhc3Rfc2JhbGUoc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlKQogewotCXJldHVybiAoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKTsKKwlyZXR1cm4gKHNiYWxlLT5lZmxhZ3MgJiBTQkFMX0VGTEFHU19MQVNUX0VOVFJZKTsKIH0KIAogZW51bSBxZXRoX3FkaW9fYnVmZmVyX3N0YXRlcyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggNTAzNjc4YS4uZGQwOGY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtODkwLDcgKzg5MCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCS8qIGlzIFBDSSBmbGFnIHNldCBvbiBidWZmZXI/ICovCi0JaWYgKGJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzICYgMHg0MCkKKwlpZiAoYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzICYgU0JBTF9TRkxBR1MwX1BDSV9SRVEpCiAJCWF0b21pY19kZWMoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KTsKIAogCXNrYiA9IHNrYl9kZXF1ZXVlKCZidWYtPnNrYl9saXN0KTsKQEAgLTkwNiw5ICs5MDYsMTEgQEAKIAkJYnVmLT5pc19oZWFkZXJbaV0gPSAwOwogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5sZW5ndGggPSAwOwogCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5hZGRyID0gTlVMTDsKLQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5lZmxhZ3MgPSAwOworCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtpXS5zZmxhZ3MgPSAwOwogCX0KLQlidWYtPmJ1ZmZlci0+ZWxlbWVudFsxNV0uZmxhZ3MgPSAwOworCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzE1XS5lZmxhZ3MgPSAwOworCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzE1XS5zZmxhZ3MgPSAwOwogCWJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPSAwOwogCWF0b21pY19zZXQoJmJ1Zi0+c3RhdGUsIFFFVEhfUURJT19CVUZfRU1QVFkpOwogfQpAQCAtMjM2OCw5ICsyMzcwLDEwIEBACiAJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmxlbmd0aCA9IFBBR0VfU0laRTsKIAkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uYWRkciA9ICBwb29sX2VudHJ5LT5lbGVtZW50c1tpXTsKIAkJaWYgKGkgPT0gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpIC0gMSkKLQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2ldLmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAkJZWxzZQotCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZmxhZ3MgPSAwOworCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uZWZsYWdzID0gMDsKKwkJYnVmLT5idWZmZXItPmVsZW1lbnRbaV0uc2ZsYWdzID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzE4LDExICsyNzIxLDExIEBACiAJaWYgKHFkaW9fZXJyb3IpIHsKIAkJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgZGJmdGV4dCk7CiAJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiIEYxNT0lMDJYIiwKLQkJCSAgICAgICBidWYtPmVsZW1lbnRbMTVdLmZsYWdzICYgMHhmZik7CisJCQkgICAgICAgYnVmLT5lbGVtZW50WzE1XS5zZmxhZ3MpOwogCQlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgMiwgIiBGMTQ9JTAyWCIsCi0JCQkgICAgICAgYnVmLT5lbGVtZW50WzE0XS5mbGFncyAmIDB4ZmYpOworCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uc2ZsYWdzKTsKIAkJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDIsICIgcWVycj0lWCIsIHFkaW9fZXJyb3IpOwotCQlpZiAoKGJ1Zi0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKSA9PSAweDEyKSB7CisJCWlmICgoYnVmLT5lbGVtZW50WzE1XS5zZmxhZ3MpID09IDB4MTIpIHsKIAkJCWNhcmQtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UKQEAgLTI3OTgsNyArMjgwMSw3IEBACiBzdGF0aWMgaW50IHFldGhfaGFuZGxlX3NlbmRfZXJyb3Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKIAkJc3RydWN0IHFldGhfcWRpb19vdXRfYnVmZmVyICpidWZmZXIsIHVuc2lnbmVkIGludCBxZGlvX2VycikKIHsKLQlpbnQgc2JhbGYxNSA9IGJ1ZmZlci0+YnVmZmVyLT5lbGVtZW50WzE1XS5mbGFncyAmIDB4ZmY7CisJaW50IHNiYWxmMTUgPSBidWZmZXItPmJ1ZmZlci0+ZWxlbWVudFsxNV0uc2ZsYWdzOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNiwgImhkc25kZXJyIik7CiAJaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9JUUQpIHsKQEAgLTI5MDcsOCArMjkxMCw4IEBACiAKIAlmb3IgKGkgPSBpbmRleDsgaSA8IGluZGV4ICsgY291bnQ7ICsraSkgewogCQlidWYgPSAmcXVldWUtPmJ1ZnNbaSAlIFFESU9fTUFYX0JVRkZFUlNfUEVSX1FdOwotCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFtidWYtPm5leHRfZWxlbWVudF90b19maWxsIC0gMV0uZmxhZ3MgfD0KLQkJCQlTQkFMX0ZMQUdTX0xBU1RfRU5UUlk7CisJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50W2J1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgLSAxXS5lZmxhZ3MgfD0KKwkJCQlTQkFMX0VGTEFHU19MQVNUX0VOVFJZOwogCiAJCWlmIChxdWV1ZS0+Y2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkKIAkJCWNvbnRpbnVlOwpAQCAtMjkyMSw3ICsyOTI0LDcgQEAKIAkJCQkvKiBpdCdzIGxpa2VseSB0aGF0IHdlJ2xsIGdvIHRvIHBhY2tpbmcKIAkJCQkgKiBtb2RlIHNvb24gKi8KIAkJCQlhdG9taWNfaW5jKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCk7Ci0JCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uZmxhZ3MgfD0gMHg0MDsKKwkJCQlidWYtPmJ1ZmZlci0+ZWxlbWVudFswXS5zZmxhZ3MgfD0gU0JBTF9TRkxBR1MwX1BDSV9SRVE7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpIHsKQEAgLTI5MzQsNyArMjkzNyw3IEBACiAJCQkJICogZnVydGhlciBzZW5kIHdhcyByZXF1ZXN0ZWQgYnkgdGhlIHN0YWNrCiAJCQkJICovCiAJCQkJYXRvbWljX2luYygmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpOwotCQkJCWJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdLmZsYWdzIHw9IDB4NDA7CisJCQkJYnVmLT5idWZmZXItPmVsZW1lbnRbMF0uc2ZsYWdzIHw9IFNCQUxfU0ZMQUdTMF9QQ0lfUkVROwogCQkJfQogCQl9CiAJfQpAQCAtMzE4MCwyMCArMzE4MywyMCBAQAogCQlpZiAoIWxlbmd0aCkgewogCQkJaWYgKGZpcnN0X2xhcCkKIAkJCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykKLQkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkJCVNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9CisJCQkJCQlTQkFMX0VGTEFHU19GSVJTVF9GUkFHOwogCQkJCWVsc2UKLQkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gMDsKKwkJCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IDA7CiAJCQllbHNlCi0JCQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0KLQkJCQkgICAgU0JBTF9GTEFHU19NSURETEVfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZmlyc3RfbGFwKQotCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9Ci0JCQkJICAgIFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0KKwkJCQkgICAgU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJCWVsc2UKLQkJCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPQotCQkJCSAgICBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOworCQkJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5lZmxhZ3MgPQorCQkJCSAgICBTQkFMX0VGTEFHU19NSURETEVfRlJBRzsKIAkJfQogCQlkYXRhICs9IGxlbmd0aF9oZXJlOwogCQllbGVtZW50Kys7CkBAIC0zMjA1LDEyICszMjA4LDEyIEBACiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gKGNoYXIgKilwYWdlX3RvX3BoeXMoZnJhZy0+cGFnZSkKIAkJCSsgZnJhZy0+cGFnZV9vZmZzZXQ7CiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5sZW5ndGggPSBmcmFnLT5zaXplOwotCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZmxhZ3MgPSBTQkFMX0ZMQUdTX01JRERMRV9GUkFHOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gU0JBTF9FRkxBR1NfTUlERExFX0ZSQUc7CiAJCWVsZW1lbnQrKzsKIAl9CiAKLQlpZiAoYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncykKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5mbGFncyA9IFNCQUxfRkxBR1NfTEFTVF9GUkFHOworCWlmIChidWZmZXItPmVsZW1lbnRbZWxlbWVudCAtIDFdLmVmbGFncykKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnQgLSAxXS5lZmxhZ3MgPSBTQkFMX0VGTEFHU19MQVNUX0ZSQUc7CiAJKm5leHRfZWxlbWVudF90b19maWxsID0gZWxlbWVudDsKIH0KIApAQCAtMzIzNCw3ICszMjM3LDcgQEAKIAkJLypmaWxsIGZpcnN0IGJ1ZmZlciBlbnRyeSBvbmx5IHdpdGggaGVhZGVyIGluZm9ybWF0aW9uICovCiAJCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5hZGRyID0gc2tiLT5kYXRhOwogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0ubGVuZ3RoID0gaGRyX2xlbjsKLQkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmZsYWdzID0gU0JBTF9GTEFHU19GSVJTVF9GUkFHOworCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uZWZsYWdzID0gU0JBTF9FRkxBR1NfRklSU1RfRlJBRzsKIAkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwogCQlza2ItPmRhdGEgKz0gaGRyX2xlbjsKIAkJc2tiLT5sZW4gIC09IGhkcl9sZW47CkBAIC0zMjQ2LDcgKzMyNDksNyBAQAogCQlidWZmZXItPmVsZW1lbnRbZWxlbWVudF0uYWRkciA9IGhkcjsKIAkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpICsKIAkJCQkJCQloZF9sZW47Ci0JCWJ1ZmZlci0+ZWxlbWVudFtlbGVtZW50XS5mbGFncyA9IFNCQUxfRkxBR1NfRklSU1RfRlJBRzsKKwkJYnVmZmVyLT5lbGVtZW50W2VsZW1lbnRdLmVmbGFncyA9IFNCQUxfRUZMQUdTX0ZJUlNUX0ZSQUc7CiAJCWJ1Zi0+aXNfaGVhZGVyW2VsZW1lbnRdID0gMTsKIAkJYnVmLT5uZXh0X2VsZW1lbnRfdG9fZmlsbCsrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCmluZGV4IDg1MTJiNWMuLjAyMmZiNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwpAQCAtNjQwLDcgKzY0MCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgemZjcF9mc2ZfcmVxICp6ZmNwX2ZzZl9yZXFfY3JlYXRlKHN0cnVjdCB6ZmNwX3FkaW8gKnFkaW8sCi0JCQkJCQl1MzIgZnNmX2NtZCwgdTMyIHNidHlwZSwKKwkJCQkJCXUzMiBmc2ZfY21kLCB1OCBzYnR5cGUsCiAJCQkJCQltZW1wb29sX3QgKnBvb2wpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHFkaW8tPmFkYXB0ZXI7CkBAIC04NDEsNyArODQxLDcgQEAKIAlpZiAoemZjcF9xZGlvX3NiYWxfZ2V0KHFkaW8pKQogCQlnb3RvIG91dDsKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0FCT1JUX0ZDUF9DTU5ELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuc2NzaV9hYm9ydCk7CiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJlcSA9IE5VTEw7CkBAIC0xMDEyLDcgKzEwMTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfU0VORF9HRU5FUklDLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9XUklURV9SRUFELCBwb29sKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFX1JFQUQsIHBvb2wpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldCA9IFBUUl9FUlIocmVxKTsKQEAgLTExMTAsNyArMTExMCw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9TRU5EX0VMUywKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfV1JJVEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9XUklURV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXQgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMTU2LDcgKzExNTYsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfQ09ORklHX0RBVEEsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9FWENIQU5HRV9DT05GSUdfREFUQSwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwgTlVMTCk7CisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKIAogCWlmIChJU19FUlIocmVxKSkgewogCQlyZXR2YWwgPSBQVFJfRVJSKHJlcSk7CkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELAorCQkJCSAgU0JBTF9TRkxBR1MwX1RZUEVfUkVBRCwKIAkJCQkgIHFkaW8tPmFkYXB0ZXItPnBvb2wuZXJwX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTEyOTYsNyArMTI5Niw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRVhDSEFOR0VfUE9SVF9EQVRBLAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9SRUFELCBOVUxMKTsKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsIE5VTEwpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CiAJCXJldHZhbCA9IFBUUl9FUlIocmVxKTsKQEAgLTE0MTIsNyArMTQxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmVxID0gemZjcF9mc2ZfcmVxX2NyZWF0ZShxZGlvLCBGU0ZfUVRDQl9PUEVOX1BPUlRfV0lUSF9ESUQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTQ3OCw3ICsxNDc4LDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX1BPUlQsCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTU1Myw3ICsxNTUzLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX09QRU5fUE9SVF9XSVRIX0RJRCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNjA2LDcgKzE2MDYsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUE9SVCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xNjk4LDcgKzE2OTgsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfQ0xPU0VfUEhZU0lDQUxfUE9SVCwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0xODEyLDcgKzE4MTIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfT1BFTl9MVU4sCi0JCQkJICBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQsCisJCQkJICBTQkFMX1NGTEFHUzBfVFlQRV9SRUFELAogCQkJCSAgYWRhcHRlci0+cG9vbC5lcnBfcmVxKTsKIAogCWlmIChJU19FUlIocmVxKSkgewpAQCAtMTkwMSw3ICsxOTAxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0NMT1NFX0xVTiwKLQkJCQkgIFNCQUxfRkxBR1MwX1RZUEVfUkVBRCwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1JFQUQsCiAJCQkJICBxZGlvLT5hZGFwdGVyLT5wb29sLmVycF9yZXEpOwogCiAJaWYgKElTX0VSUihyZXEpKSB7CkBAIC0yMTYxLDcgKzIxNjEsNyBAQAogewogCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcTsKIAlzdHJ1Y3QgZmNwX2NtbmQgKmZjcF9jbW5kOwotCXVuc2lnbmVkIGludCBzYnR5cGUgPSBTQkFMX0ZMQUdTMF9UWVBFX1JFQUQ7CisJdTggc2J0eXBlID0gU0JBTF9TRkxBR1MwX1RZUEVfUkVBRDsKIAlpbnQgcmVhbF9ieXRlcywgcmV0dmFsID0gLUVJTywgZGl4X2J5dGVzID0gMDsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBzY3NpX2NtbmQtPmRldmljZTsKIAlzdHJ1Y3QgemZjcF9zY3NpX2RldiAqemZjcF9zZGV2ID0gc2Rldl90b196ZmNwKHNkZXYpOwpAQCAtMjE4MSw3ICsyMTgxLDcgQEAKIAl9CiAKIAlpZiAoc2NzaV9jbW5kLT5zY19kYXRhX2RpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQotCQlzYnR5cGUgPSBTQkFMX0ZMQUdTMF9UWVBFX1dSSVRFOworCQlzYnR5cGUgPSBTQkFMX1NGTEFHUzBfVFlQRV9XUklURTsKIAogCXJlcSA9IHpmY3BfZnNmX3JlcV9jcmVhdGUocWRpbywgRlNGX1FUQ0JfRkNQX0NNTkQsCiAJCQkJICBzYnR5cGUsIGFkYXB0ZXItPnBvb2wuc2NzaV9yZXEpOwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXEgPSB6ZmNwX2ZzZl9yZXFfY3JlYXRlKHFkaW8sIEZTRl9RVENCX0ZDUF9DTU5ELAotCQkJCSAgU0JBTF9GTEFHUzBfVFlQRV9XUklURSwKKwkJCQkgIFNCQUxfU0ZMQUdTMF9UWVBFX1dSSVRFLAogCQkJCSAgcWRpby0+YWRhcHRlci0+cG9vbC5zY3NpX3JlcSk7CiAKIAlpZiAoSVNfRVJSKHJlcSkpIHsKQEAgLTIzMjgsMTcgKzIzMjgsMTggQEAKIAlzdHJ1Y3QgemZjcF9xZGlvICpxZGlvID0gYWRhcHRlci0+cWRpbzsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXEgPSBOVUxMOwogCXN0cnVjdCBmc2ZfcXRjYl9ib3R0b21fc3VwcG9ydCAqYm90dG9tOwotCWludCBkaXJlY3Rpb24sIHJldHZhbCA9IC1FSU8sIGJ5dGVzOworCWludCByZXR2YWwgPSAtRUlPLCBieXRlczsKKwl1OCBkaXJlY3Rpb247CiAKIAlpZiAoIShhZGFwdGVyLT5hZGFwdGVyX2ZlYXR1cmVzICYgRlNGX0ZFQVRVUkVfQ0ZEQykpCiAJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKIAogCXN3aXRjaCAoZnNmX2NmZGMtPmNvbW1hbmQpIHsKIAljYXNlIEZTRl9RVENCX0RPV05MT0FEX0NPTlRST0xfRklMRToKLQkJZGlyZWN0aW9uID0gU0JBTF9GTEFHUzBfVFlQRV9XUklURTsKKwkJZGlyZWN0aW9uID0gU0JBTF9TRkxBR1MwX1RZUEVfV1JJVEU7CiAJCWJyZWFrOwogCWNhc2UgRlNGX1FUQ0JfVVBMT0FEX0NPTlRST0xfRklMRToKLQkJZGlyZWN0aW9uID0gU0JBTF9GTEFHUzBfVFlQRV9SRUFEOworCQlkaXJlY3Rpb24gPSBTQkFMX1NGTEFHUzBfVFlQRV9SRUFEOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTI0MTMsNyArMjQxNCw3IEBACiAJCWZzZl9yZXEtPnFkaW9fcmVxLnNiYWxfcmVzcG9uc2UgPSBzYmFsX2lkeDsKIAkJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwogCi0JCWlmIChsaWtlbHkoc2JhbGUtPmZsYWdzICYgU0JBTF9GTEFHU19MQVNUX0VOVFJZKSkKKwkJaWYgKGxpa2VseShzYmFsZS0+ZWZsYWdzICYgU0JBTF9FRkxBR1NfTEFTVF9FTlRSWSkpCiAJCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDk4ZTk3ZDkuLmQ5YzQwZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAogCS8qIHNldCBsYXN0IGVudHJ5IGZsYWcgaW4gY3VycmVudCBTQkFMRSBvZiBjdXJyZW50IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCXNiYWxlLT5lZmxhZ3MgfD0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIAogCS8qIGRvbid0IGV4Y2VlZCBsYXN0IGFsbG93ZWQgU0JBTCAqLwogCWlmIChxX3JlcS0+c2JhbF9sYXN0ID09IHFfcmVxLT5zYmFsX2xpbWl0KQpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIAkvKiBzZXQgY2hhaW5pbmcgZmxhZyBpbiBmaXJzdCBTQkFMRSBvZiBjdXJyZW50IFNCQUwgKi8KIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9yZXEocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBTQkFMX0ZMQUdTMF9NT1JFX1NCQUxTOworCXNiYWxlLT5zZmxhZ3MgfD0gU0JBTF9TRkxBR1MwX01PUkVfU0JBTFM7CiAKIAkvKiBjYWxjdWxhdGUgaW5kZXggb2YgbmV4dCBTQkFMICovCiAJcV9yZXEtPnNiYWxfbGFzdCsrOwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAKIAkvKiBzZXQgc3RvcmFnZS1ibG9jayB0eXBlIGZvciBuZXcgU0JBTCAqLwogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX2N1cnIocWRpbywgcV9yZXEpOwotCXNiYWxlLT5mbGFncyB8PSBxX3JlcS0+c2J0eXBlOworCXNiYWxlLT5zZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKIAogCXJldHVybiBzYmFsZTsKIH0KQEAgLTE3Nyw3ICsxNzcsNyBAQAogCiAJLyogc2V0IHN0b3JhZ2UtYmxvY2sgdHlwZSBmb3IgdGhpcyByZXF1ZXN0ICovCiAJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfcmVxKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gcV9yZXEtPnNidHlwZTsKKwlzYmFsZS0+c2ZsYWdzIHw9IHFfcmVxLT5zYnR5cGU7CiAKIAlmb3IgKDsgc2c7IHNnID0gc2dfbmV4dChzZykpIHsKIAkJc2JhbGUgPSB6ZmNwX3FkaW9fc2JhbGVfbmV4dChxZGlvLCBxX3JlcSk7CkBAIC0zODQsNyArMzg0LDggQEAKIAlmb3IgKGNjID0gMDsgY2MgPCBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyBjYysrKSB7CiAJCXNiYWxlID0gJihxZGlvLT5yZXNfcVtjY10tPmVsZW1lbnRbMF0pOwogCQlzYmFsZS0+bGVuZ3RoID0gMDsKLQkJc2JhbGUtPmZsYWdzID0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCQlzYmFsZS0+ZWZsYWdzID0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKKwkJc2JhbGUtPnNmbGFncyA9IDA7CiAJCXNiYWxlLT5hZGRyID0gTlVMTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5oIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKaW5kZXggMjI5N2Q4ZC4uNTRlMjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmgKQEAgLTY3LDcgKzY3LDcgQEAKICAqIEBxZGlvX291dGJfdXNhZ2U6IHVzYWdlIG9mIG91dGJvdW5kIHF1ZXVlCiAgKi8KIHN0cnVjdCB6ZmNwX3FkaW9fcmVxIHsKLQl1MzIJc2J0eXBlOworCXU4CXNidHlwZTsKIAl1OAlzYmFsX251bWJlcjsKIAl1OAlzYmFsX2ZpcnN0OwogCXU4CXNiYWxfbGFzdDsKQEAgLTExNiw3ICsxMTYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lCiB2b2lkIHpmY3BfcWRpb19yZXFfaW5pdChzdHJ1Y3QgemZjcF9xZGlvICpxZGlvLCBzdHJ1Y3QgemZjcF9xZGlvX3JlcSAqcV9yZXEsCi0JCQl1bnNpZ25lZCBsb25nIHJlcV9pZCwgdTMyIHNidHlwZSwgdm9pZCAqZGF0YSwgdTMyIGxlbikKKwkJCXVuc2lnbmVkIGxvbmcgcmVxX2lkLCB1OCBzYnR5cGUsIHZvaWQgKmRhdGEsIHUzMiBsZW4pCiB7CiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnNiYWxlOwogCWludCBjb3VudCA9IG1pbihhdG9taWNfcmVhZCgmcWRpby0+cmVxX3FfZnJlZSksCkBAIC0xMzEsNyArMTMxLDggQEAKIAogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShxZGlvLCBxX3JlcSk7CiAJc2JhbGUtPmFkZHIgPSAodm9pZCAqKSByZXFfaWQ7Ci0Jc2JhbGUtPmZsYWdzID0gU0JBTF9GTEFHUzBfQ09NTUFORCB8IHNidHlwZTsKKwlzYmFsZS0+ZWZsYWdzID0gMDsKKwlzYmFsZS0+c2ZsYWdzID0gU0JBTF9TRkxBR1MwX0NPTU1BTkQgfCBzYnR5cGU7CiAKIAlpZiAodW5saWtlbHkoIWRhdGEpKQogCQlyZXR1cm47CkBAIC0xNzMsNyArMTc0LDcgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqc2JhbGU7CiAKIAlzYmFsZSA9IHpmY3BfcWRpb19zYmFsZV9jdXJyKHFkaW8sIHFfcmVxKTsKLQlzYmFsZS0+ZmxhZ3MgfD0gU0JBTF9GTEFHU19MQVNUX0VOVFJZOworCXNiYWxlLT5lZmxhZ3MgfD0gU0JBTF9FRkxBR1NfTEFTVF9FTlRSWTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMgYi9kcml2ZXJzL3NwaS9hbWJhLXBsMDIyLmMKaW5kZXggNmE5ZTU4ZC4uZDE4Y2U5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYW1iYS1wbDAyMi5jCisrKyBiL2RyaXZlcnMvc3BpL2FtYmEtcGwwMjIuYwpAQCAtMTg2MSw2ICsxODYxLDcgQEAKIAl9CiAJaWYgKChjbGtfZnJlcS5jcHNkdnNyIDwgQ1BTRFZSX01JTikKIAkgICAgfHwgKGNsa19mcmVxLmNwc2R2c3IgPiBDUFNEVlJfTUFYKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlkZXZfZXJyKCZzcGktPmRldiwKIAkJCSJjcHNkdnNyIGlzIGNvbmZpZ3VyZWQgaW5jb3JyZWN0bHlcbiIpOwogCQlnb3RvIGVycl9jb25maWdfcGFyYW1zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNmY4NmJhMC4uOTY5Y2RkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0yOTgsNyArMjk4LDcgQEAKIAl1bnNpZ25lZCBpbnQJCWNvdW50LCBjOwogCXVuc2lnbmVkIGxvbmcJCWJhc2UsIHR4X3JlZywgcnhfcmVnOwogCWludAkJCXdvcmRfbGVuLCBkYXRhX3R5cGUsIGVsZW1lbnRfY291bnQ7Ci0JaW50CQkJZWxlbWVudHM7CisJaW50CQkJZWxlbWVudHMgPSAwOwogCXUzMgkJCWw7CiAJdTgJCQkqIHJ4OwogCWNvbnN0IHU4CQkqIHR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9wY2ljb3JlLmMKaW5kZXggODJmZWIzNC4uMmEyMGRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX3BjaWNvcmUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfcGNpY29yZS5jCkBAIC01MzksMTAgKzUzOSwxMiBAQAogCWlmICghcGMtPmhvc3Rtb2RlKQogCQlzc2JfcGNpY29yZV9pbml0X2NsaWVudG1vZGUocGMpOwogCi0JLyogQWRkaXRpb25hbCBhbHdheXMgb25jZS1leGVjdXRlZCB3b3JrYXJvdW5kcyAqLwotCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKLQkvKiBUT0RPOiBBU1BNICovCi0JLyogVE9ETzogQ2xvY2sgUmVxdWVzdCBVcGRhdGUgKi8KKwkvKiBBZGRpdGlvbmFsIFBDSWUgYWx3YXlzIG9uY2UtZXhlY3V0ZWQgd29ya2Fyb3VuZHMgKi8KKwlpZiAoZGV2LT5pZC5jb3JlaWQgPT0gU1NCX0RFVl9QQ0lFKSB7CisJCXNzYl9wY2ljb3JlX3NlcmRlc193b3JrYXJvdW5kKHBjKTsKKwkJLyogVE9ETzogQVNQTSAqLworCQkvKiBUT0RPOiBDbG9jayBSZXF1ZXN0IFVwZGF0ZSAqLworCX0KIH0KIAogc3RhdGljIHUzMiBzc2JfcGNpZV9yZWFkKHN0cnVjdCBzc2JfcGNpY29yZSAqcGMsIHUzMiBhZGRyZXNzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBkZmMxNmY5Li4xOTYyODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtMjQsMjMgKzI0LDYgQEAKIAogaWYgU1RBR0lORwogCi1jb25maWcgU1RBR0lOR19FWENMVURFX0JVSUxECi0JYm9vbCAiRXhjbHVkZSBTdGFnaW5nIGRyaXZlcnMgZnJvbSBiZWluZyBidWlsdCIgaWYgU1RBR0lORwotCWRlZmF1bHQgeQotCS0tLWhlbHAtLS0KLQkgIEFyZSB5b3Ugc3VyZSB5b3UgcmVhbGx5IHdhbnQgdG8gYnVpbGQgdGhlIHN0YWdpbmcgZHJpdmVycz8KLQkgIFRoZXkgdGFpbnQgeW91ciBrZXJuZWwsIGRvbid0IGxpdmUgdXAgdG8gdGhlIG5vcm1hbCBMaW51eAotCSAga2VybmVsIHF1YWxpdHkgc3RhbmRhcmRzLCBhcmUgYSBiaXQgY3J1ZnR5IGFyb3VuZCB0aGUgZWRnZXMsCi0JICBhbmQgbWlnaHQgZ28gb2ZmIGFuZCBraWNrIHlvdXIgZG9nIHdoZW4geW91IGFyZW4ndCBwYXlpbmcKLQkgIGF0dGVudGlvbi4KLQotCSAgU2F5IE4gaGVyZSB0byBiZSBhYmxlIHRvIHNlbGVjdCBhbmQgYnVpbGQgdGhlIFN0YWdpbmcgZHJpdmVycy4KLQkgIFRoaXMgb3B0aW9uIGlzIHByaW1hcmlseSBoZXJlIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nIGJ1aWx0Ci0JICB3aGVuIHNlbGVjdGluZyAnbWFrZSBhbGx5ZXNjb25mZycgYW5kICdtYWtlIGFsbG1vZGNvbmZpZycgc28KLQkgIGRvbid0IGJlIGFsbCB0aGF0IHB1dCBvZmYsIHlvdXIgZG9nIHdpbGwgYmUganVzdCBmaW5lLgotCi1pZiAhU1RBR0lOR19FWENMVURFX0JVSUxECi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3R0eS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9nZW5lcmljX3NlcmlhbC9LY29uZmlnIgpAQCAtMTc3LDUgKzE2MCw0IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL252ZWMvS2NvbmZpZyIKIAotZW5kaWYgIyAhU1RBR0lOR19FWENMVURFX0JVSUxECiBlbmRpZiAjIFNUQUdJTkcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLWp0YWcuYwppbmRleCA4NzYzMDg4Li44YjE2MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS1qdGFnLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEtanRhZy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzdGFnaW5nL2FsdGVyYS5oPgorI2luY2x1ZGUgImFsdGVyYS5oIgogI2luY2x1ZGUgImFsdGVyYS1leHBydC5oIgogI2luY2x1ZGUgImFsdGVyYS1qdGFnLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMgYi9kcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5jCmluZGV4IDA1YWFkMzUuLjljZDVlNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRlcmEtc3RhcGwvYWx0ZXJhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPHN0YWdpbmcvYWx0ZXJhLmg+CisjaW5jbHVkZSAiYWx0ZXJhLmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWV4cHJ0LmgiCiAjaW5jbHVkZSAiYWx0ZXJhLWp0YWcuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oIGIvZHJpdmVycy9zdGFnaW5nL2FsdGVyYS1zdGFwbC9hbHRlcmEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9zdGFnaW5nL2FsdGVyYS5oCnJlbmFtZSB0byBkcml2ZXJzL3N0YWdpbmcvYWx0ZXJhLXN0YXBsL2FsdGVyYS5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL0tjb25maWcKaW5kZXggMWYxNWUxZi4uYWZkNmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvS2NvbmZpZwpAQCAtMSw2ICsxLDcgQEAKIGNvbmZpZyBBVEg2S19MRUdBQ1kKIAl0cmlzdGF0ZSAiQXRoZXJvcyBBUjYwMDMgc3VwcG9ydCAobm9uIG1hYzgwMjExKSIKICAgICAgICAgZGVwZW5kcyBvbiBNTUMgJiYgV0xBTgorCWRlcGVuZHMgb24gQ0ZHODAyMTEKICAgICAgICAgc2VsZWN0IFdJUkVMRVNTX0VYVAogICAgICAgICBzZWxlY3QgV0VYVF9QUklWCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9vcy9saW51eC9jZmc4MDIxMS5jCmluZGV4IDc3ZGZiNDAuLmQzYTc3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvb3MvbGludXgvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL29zL2xpbnV4L2NmZzgwMjExLmMKQEAgLTg3MCw3ICs4NzAsOCBAQAogICAgIGlmKGFyLT5zY2FuX3JlcXVlc3QpCiAgICAgewogICAgICAgICAvKiBUcmFuc2xhdGUgZGF0YSB0byBjZmc4MDIxMSBtZ210IGZvcm1hdCAqLwotICAgICAgICB3bWlfaXRlcmF0ZV9ub2Rlcyhhci0+YXJXbWksIGFyNmtfY2ZnODAyMTFfc2Nhbl9ub2RlLCBhci0+d2Rldi0+d2lwaHkpOworCWlmIChhci0+YXJXbWkpCisJCXdtaV9pdGVyYXRlX25vZGVzKGFyLT5hcldtaSwgYXI2a19jZmc4MDIxMV9zY2FuX25vZGUsIGFyLT53ZGV2LT53aXBoeSk7CiAKICAgICAgICAgY2ZnODAyMTFfc2Nhbl9kb25lKGFyLT5zY2FuX3JlcXVlc3QsCiAgICAgICAgICAgICAoKHN0YXR1cyAmIEFfRUNBTkNFTEVEKSB8fCAoc3RhdHVzICYgQV9FQlVTWSkpID8gdHJ1ZSA6IGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvYnJjbWZtYWMvd2xfaXcuYwppbmRleCA5MjljZWFmLi4xNWUxYjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL2JyY21mbWFjL3dsX2l3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9icmNtZm1hYy93bF9pdy5jCkBAIC02NCw4ICs2NCw2IEBACiBleHRlcm4gYm9vbCB3bF9pd19jb25uX3N0YXR1c19zdHIodTMyIGV2ZW50X3R5cGUsIHUzMiBzdGF0dXMsCiAJCQkJICB1MzIgcmVhc29uLCBjaGFyICpzdHJpbmdCdWYsIHVpbnQgYnVmbGVuKTsKIAotdWludCB3bF9tc2dfbGV2ZWwgPSBXTF9FUlJPUl9WQUw7Ci0KICNkZWZpbmUgTUFYX1dMSVdfSU9DVExfTEVOIDEwMjQKIAogI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKaW5kZXggMWM0NWMxMS4uYWE4N2IxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZHJ2LmMKQEAgLTU0Miw2ICs1NDIsOCBAQAogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAJaW50IHJldCA9IC1FTk9NRU07CiAJdWludDMyX3QgdHRfcGFnZXM7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgcHNiX2ludGVsX291dHB1dCAqcHNiX2ludGVsX291dHB1dDsKIAogCWRldl9wcml2ID0ga3phbGxvYyhzaXplb2YoKmRldl9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldl9wcml2ID09IE5VTEwpCkBAIC02NjMsNyArNjY1LDE4IEBACiAJCWRybV9rbXNfaGVscGVyX3BvbGxfaW5pdChkZXYpOwogCX0KIAotCXJldCA9IHBzYl9iYWNrbGlnaHRfaW5pdChkZXYpOworCS8qIE9ubHkgYWRkIGJhY2tsaWdodCBzdXBwb3J0IGlmIHdlIGhhdmUgTFZEUyBvdXRwdXQgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsCisJCQkgICAgaGVhZCkgeworCQlwc2JfaW50ZWxfb3V0cHV0ID0gdG9fcHNiX2ludGVsX291dHB1dChjb25uZWN0b3IpOworCisJCXN3aXRjaCAocHNiX2ludGVsX291dHB1dC0+dHlwZSkgeworCQljYXNlIElOVEVMX09VVFBVVF9MVkRTOgorCQkJcmV0ID0gcHNiX2JhY2tsaWdodF9pbml0KGRldik7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAjaWYgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ZiLmMKaW5kZXggOTljMDNhMi4uMDg0YzM2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9mYi5jCkBAIC00NDEsNiArNDQxLDE2IEBACiAJaW5mby0+c2NyZWVuX3NpemUgPSBzaXplOwogCW1lbXNldChpbmZvLT5zY3JlZW5fYmFzZSwgMCwgc2l6ZSk7CiAKKwlpZiAoZGV2X3ByaXYtPnBnLT5zdG9sZW5fc2l6ZSkgeworCQlpbmZvLT5hcGVydHVyZXMgPSBhbGxvY19hcGVydHVyZXMoMSk7CisJCWlmICghaW5mby0+YXBlcnR1cmVzKSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyMDsKKwkJfQorCQlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlID0gZGV2LT5tb2RlX2NvbmZpZy5mYl9iYXNlOworCQlpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5zaXplID0gZGV2X3ByaXYtPnBnLT5zdG9sZW5fc2l6ZTsKKwl9CisKIAlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGluZm8sIGZiLT5waXRjaCwgZmItPmRlcHRoKTsKIAlkcm1fZmJfaGVscGVyX2ZpbGxfdmFyKGluZm8sICZmYmRldi0+cHNiX2ZiX2hlbHBlciwKIAkJCQlzaXplcy0+ZmJfd2lkdGgsIHNpemVzLT5mYl9oZWlnaHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jIGIvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9wc2JfaW50ZWxfYmlvcy5jCmluZGV4IDQ4YWM4YmEuLjQxNzk2NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvcHNiX2ludGVsX2Jpb3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL3BzYl9pbnRlbF9iaW9zLmMKQEAgLTE1NCwxMCArMTU0LDE1IEBACiAKIAlmaWxsX2RldGFpbF90aW1pbmdfZGF0YShwYW5lbF9maXhlZF9tb2RlLCBkdm9fdGltaW5nKTsKIAotCWRldl9wcml2LT5sZnBfbHZkc192YnRfbW9kZSA9IHBhbmVsX2ZpeGVkX21vZGU7Ci0KLQlEUk1fREVCVUcoIkZvdW5kIHBhbmVsIG1vZGUgaW4gQklPUyBWQlQgdGFibGVzOlxuIik7Ci0JZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShwYW5lbF9maXhlZF9tb2RlKTsKKwlpZiAocGFuZWxfZml4ZWRfbW9kZS0+aHRvdGFsID4gMCAmJiBwYW5lbF9maXhlZF9tb2RlLT52dG90YWwgPiAwKSB7CisJCWRldl9wcml2LT5sZnBfbHZkc192YnRfbW9kZSA9IHBhbmVsX2ZpeGVkX21vZGU7CisJCURSTV9ERUJVRygiRm91bmQgcGFuZWwgbW9kZSBpbiBCSU9TIFZCVCB0YWJsZXM6XG4iKTsKKwkJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShwYW5lbF9maXhlZF9tb2RlKTsKKwl9IGVsc2UgeworCQlEUk1fREVCVUcoIklnbm9yaW5nIGJvZ3VzIExWRFMgVkJUIG1vZGUuXG4iKTsKKwkJZGV2X3ByaXYtPmx2ZHNfdmJ0ID0gMDsKKwkJa2ZyZWUocGFuZWxfZml4ZWRfbW9kZSk7CisJfQogCiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvbWF4NTE3LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwppbmRleCA4ODE3NjhkLi4yZmUzNGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9tYXg1MTcuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlpb19pbmZvIG1heDUxOF9pbmZvID0gewotCS5hdHRycyA9ICZtYXg1MTdfYXR0cmlidXRlX2dyb3VwLAorCS5hdHRycyA9ICZtYXg1MThfYXR0cmlidXRlX2dyb3VwLAogCS5kcml2ZXJfbW9kdWxlID0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbXUvYWRpczE2NDAwX3JpbmcuYwppbmRleCAyNTg5YTdlLi4zNjEyMzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2ltdS9hZGlzMTY0MDBfcmluZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW11L2FkaXMxNjQwMF9yaW5nLmMKQEAgLTEzNywxMyArMTM3LDEzIEBACiAJCWlmIChzdC0+dmFyaWFudC0+ZmxhZ3MgJiBBRElTMTY0MDBfTk9fQlVSU1QpIHsKIAkJCXJldCA9IGFkaXMxNjM1MF9zcGlfcmVhZF9hbGwoJmluZGlvX2Rldi0+ZGV2LCBzdC0+cngpOwogCQkJaWYgKHJldCA8IDApCi0JCQkJcmV0dXJuIHJldDsKKwkJCQlnb3RvIGVycjsKIAkJCWZvciAoOyBpIDwgcmluZy0+c2Nhbl9jb3VudDsgaSsrKQogCQkJCWRhdGFbaV0JPSAqKHMxNiAqKShzdC0+cnggKyBpKjIpOwogCQl9IGVsc2UgewogCQkJcmV0ID0gYWRpczE2NDAwX3NwaV9yZWFkX2J1cnN0KCZpbmRpb19kZXYtPmRldiwgc3QtPnJ4KTsKIAkJCWlmIChyZXQgPCAwKQotCQkJCXJldHVybiByZXQ7CisJCQkJZ290byBlcnI7CiAJCQlmb3IgKDsgaSA8IGluZGlvX2Rldi0+cmluZy0+c2Nhbl9jb3VudDsgaSsrKSB7CiAJCQkJaiA9IF9fZmZzKG1hc2spOwogCQkJCW1hc2sgJj0gfigxIDw8IGopOwpAQCAtMTU4LDkgKzE1OCwxMyBAQAogCXJpbmctPmFjY2Vzcy0+c3RvcmVfdG8oaW5kaW9fZGV2LT5yaW5nLCAodTggKikgZGF0YSwgcGYtPnRpbWVzdGFtcCk7CiAKIAlpaW9fdHJpZ2dlcl9ub3RpZnlfZG9uZShpbmRpb19kZXYtPnRyaWcpOwotCWtmcmVlKGRhdGEpOwogCisJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOworCitlcnI6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKIH0KIAogdm9pZCBhZGlzMTY0MDBfdW5jb25maWd1cmVfcmluZyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jIGIvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tdHJpZ2dlci5jCmluZGV4IDYxNTkwMjMuLmQ1MDRhYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLXRyaWdnZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby10cmlnZ2VyLmMKQEAgLTI5NCw2ICsyOTQsNyBAQAogCXBmLT5oID0gaDsKIAlwZi0+dGhyZWFkID0gdGhyZWFkOwogCXBmLT50eXBlID0gdHlwZTsKKwlwZi0+cHJpdmF0ZV9kYXRhID0gcHJpdmF0ZTsKIAogCXJldHVybiBwZjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWkvaW5pdC5jIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKaW5kZXggMjgxODg1MS4uZDFmZmEzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21laS9pbml0LmMKQEAgLTIwNSwxMCArMjA1LDEwIEBACiAJCQkiaG9zdF9od19zdGF0ZSA9IDB4JTA4eCwgbWVfaHdfc3RhdGUgPSAweCUwOHguXG4iLAogCQkJZGV2LT5ob3N0X2h3X3N0YXRlLCBkZXYtPm1lX2h3X3N0YXRlKTsKIAotCQlpZiAoIShkZXYtPmhvc3RfaHdfc3RhdGUgJiBIX1JEWSkgIT0gSF9SRFkpCisJCWlmICghKGRldi0+aG9zdF9od19zdGF0ZSAmIEhfUkRZKSkKIAkJCWRldl9kYmcoJmRldi0+cGRldi0+ZGV2LCAiaG9zdCB0dXJuIG9mZiBIX1JEWS5cbiIpOwogCi0JCWlmICghKGRldi0+bWVfaHdfc3RhdGUgJiBNRV9SRFlfSFJBKSAhPSBNRV9SRFlfSFJBKQorCQlpZiAoIShkZXYtPm1lX2h3X3N0YXRlICYgTUVfUkRZX0hSQSkpCiAJCQlkZXZfZGJnKCZkZXYtPnBkZXYtPmRldiwgIk1FIHR1cm4gb2ZmIE1FX1JEWS5cbiIpOwogCiAJCXByaW50ayhLRVJOX0VSUiAibWVpOiBsaW5rIGxheWVyIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9LY29uZmlnCmluZGV4IGIwNTMwNjcuLmZlNDBlMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIk9uZSBMYXB0b3AgUGVyIENoaWxkIERpc3BsYXkgQ09OdHJvbGxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0xQQyAmJiBGQgogCXNlbGVjdCBJMkMKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCS0tLWhlbHAtLS0KIAkgIEFkZCBzdXBwb3J0IGZvciB0aGUgT0xQQyBYTyBEQ09OIGNvbnRyb2xsZXIuICBUaGlzIGNvbnRyb2xsZXIgaXMKIAkgIG9ubHkgYXZhaWxhYmxlIG9uIE9MUEMgcGxhdGZvcm1zLiAgIFVubGVzcyB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYwppbmRleCBiZGRiMDMxLi5jZGFlNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCkBAIC0yMzI4LDcgKzIzMjgsNyBAQAogCiAJCQlyZXR2YWwgPSBzZF9zZW5kX2NtZF9nZXRfcnNwKGNoaXAsIElPX1NFTkRfT1BfQ09ORCwgMCwgU0RfUlNQX1RZUEVfUjQsIHJzcCwgNSk7CiAJCQlpZiAocmV0dmFsID09IFNUQVRVU19TVUNDRVNTKSB7Ci0JCQkJaW50IGZ1bmNfbnVtID0gKHJzcFsxXSA+PiA0KSAmJiAweDA3OworCQkJCWludCBmdW5jX251bSA9IChyc3BbMV0gPj4gNCkgJiAweDA3OwogCQkJCWlmIChmdW5jX251bSkgewogCQkJCQlSVFNYX0RFQlVHUCgiU0RfSU8gY2FyZCAoRnVuY3Rpb24gbnVtYmVyOiAlZCkhXG4iLCBmdW5jX251bSk7CiAJCQkJCWNoaXAtPnNkX2lvID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKaW5kZXggNmU5OWVjOC4uOGNiZWE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfZGV2LmMKQEAgLTI2LDYgKzI2LDggQEAKIHN0YXRpYyBpbnQgc3R1Yl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgc3R1Yl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworc3RhdGljIGludCBzdHViX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKK3N0YXRpYyBpbnQgc3R1Yl9wb3N0X3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOwogCiAvKgogICogRGVmaW5lIGRldmljZSBJRHMgaGVyZSBpZiB5b3Ugd2FudCB0byBleHBsaWNpdGx5IGxpbWl0IGV4cG9ydGFibGUgZGV2aWNlcy4KQEAgLTU5LDYgKzYxLDggQEAKIAkucHJvYmUJCT0gc3R1Yl9wcm9iZSwKIAkuZGlzY29ubmVjdAk9IHN0dWJfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUJPSBzdHViX3RhYmxlLAorCS5wcmVfcmVzZXQJPSBzdHViX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldAk9IHN0dWJfcG9zdF9yZXNldCwKIH07CiAKIC8qCkBAIC01NDEsMyArNTQ1LDIwIEBACiAJCWRlbF9tYXRjaF9idXNpZCgoY2hhciAqKXVkZXZfYnVzaWQpOwogCX0KIH0KKworLyogCisgKiBQcmVzZW5jZSBvZiBwcmVfcmVzZXQgYW5kIHBvc3RfcmVzZXQgcHJldmVudHMgdGhlIGRyaXZlciBmcm9tIGJlaW5nIHVuYm91bmQKKyAqIHdoZW4gdGhlIGRldmljZSBpcyBiZWluZyByZXNldAorICovCisgCitpbnQgc3R1Yl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgInByZV9yZXNldFxuIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzdHViX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlkZXZfZGJnKCZpbnRlcmZhY2UtPmRldiwgInBvc3RfcmVzZXRcbiIpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggYTVjMWZhMS4uYmM1Nzg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0xNzUsMTYgKzE3NSwxOCBAQAogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAidXNiX3F1ZXVlX3Jlc2V0X2RldmljZVxuIik7CiAKIAkvKgotCSAqIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQgY2F1c2VkIGEgZGVhZGxvY2s6IGl0IGNhdXNlcyB0aGUgZHJpdmVyCi0JICogdG8gdW5iaW5kLiBJbiB0aGUgc2h1dGRvd24gdGhlIHJ4IHRocmVhZCBpcyBzaWduYWxsZWQgdG8gc2h1dCBkb3duCi0JICogYnV0IHRoaXMgdGhyZWFkIGlzIHBlbmRpbmcgaW4gdGhlIHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQuCi0JICoKLQkgKiBJbnN0ZWFkIHF1ZXVlIHRoZSByZXNldC4KLQkgKgotCSAqIFVuZm9ydHVuYXRseSBhbiBleGlzdGluZyB1c2JpcCBjb25uZWN0aW9uIHdpbGwgYmUgZHJvcHBlZCBkdWUgdG8KLQkgKiBkcml2ZXIgdW5iaW5kaW5nLgorCSAqIFdpdGggdGhlIGltcGxlbWVudGF0aW9uIG9mIHByZV9yZXNldCBhbmQgcG9zdF9yZXNldCB0aGUgZHJpdmVyIG5vIAorCSAqIGxvbmdlciB1bmJpbmRzLiBUaGlzIGFsbG93cyB0aGUgdXNlIG9mIHN5bmNocm9ub3VzIHJlc2V0LgogCSAqLwotCXVzYl9xdWV1ZV9yZXNldF9kZXZpY2Uoc2Rldi0+aW50ZXJmYWNlKTsKKworCWlmICh1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHNkZXYtPnVkZXYsIHNkZXYtPmludGVyZmFjZSk8MCkKKwl7CisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICJjb3VsZCBub3Qgb2J0YWluIGxvY2sgdG8gcmVzZXQgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXVzYl9yZXNldF9kZXZpY2Uoc2Rldi0+dWRldik7CisJdXNiX3VubG9ja19kZXZpY2Uoc2Rldi0+dWRldik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy90dHkvdHR5X2J1ZmZlci5jCmluZGV4IGYxYTc5MTguLjZjOWI3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3R0eV9idWZmZXIuYworKysgYi9kcml2ZXJzL3R0eS90dHlfYnVmZmVyLmMKQEAgLTQxMyw4ICs0MTMsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0dHktPmJ1Zi5sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVFRZX0ZMVVNISU5HLCAmdHR5LT5mbGFncykpIHsKLQkJc3RydWN0IHR0eV9idWZmZXIgKmhlYWQsICp0YWlsID0gdHR5LT5idWYudGFpbDsKLQkJaW50IHNlZW5fdGFpbCA9IDA7CisJCXN0cnVjdCB0dHlfYnVmZmVyICpoZWFkOwogCQl3aGlsZSAoKGhlYWQgPSB0dHktPmJ1Zi5oZWFkKSAhPSBOVUxMKSB7CiAJCQlpbnQgY291bnQ7CiAJCQljaGFyICpjaGFyX2J1ZjsKQEAgLTQyNCwxNSArNDIzLDYgQEAKIAkJCWlmICghY291bnQpIHsKIAkJCQlpZiAoaGVhZC0+bmV4dCA9PSBOVUxMKQogCQkJCQlicmVhazsKLQkJCQkvKgotCQkJCSAgVGhlcmUncyBhIHBvc3NpYmlsaXR5IHR0eSBtaWdodCBnZXQgbmV3IGJ1ZmZlcgotCQkJCSAgYWRkZWQgZHVyaW5nIHRoZSB1bmxvY2sgd2luZG93IGJlbG93LiBXZSBjb3VsZAotCQkJCSAgZW5kIHVwIHNwaW5uaW5nIGluIGhlcmUgZm9yZXZlciBob2dnaW5nIHRoZSBDUFUKLQkJCQkgIGNvbXBsZXRlbHkuIFRvIGF2b2lkIHRoaXMgbGV0J3MgaGF2ZSBhIHJlc3QgZWFjaAotCQkJCSAgdGltZSB3ZSBwcm9jZXNzZWQgdGhlIHRhaWwgYnVmZmVyLgotCQkJCSovCi0JCQkJaWYgKHRhaWwgPT0gaGVhZCkKLQkJCQkJc2Vlbl90YWlsID0gMTsKIAkJCQl0dHktPmJ1Zi5oZWFkID0gaGVhZC0+bmV4dDsKIAkJCQl0dHlfYnVmZmVyX2ZyZWUodHR5LCBoZWFkKTsKIAkJCQljb250aW51ZTsKQEAgLTQ0Miw3ICs0MzIsNyBAQAogCQkJICAgbGluZSBkaXNjaXBsaW5lIGFzIHdlIHdhbnQgdG8gZW1wdHkgdGhlIHF1ZXVlICovCiAJCQlpZiAodGVzdF9iaXQoVFRZX0ZMVVNIUEVORElORywgJnR0eS0+ZmxhZ3MpKQogCQkJCWJyZWFrOwotCQkJaWYgKCF0dHktPnJlY2VpdmVfcm9vbSB8fCBzZWVuX3RhaWwpCisJCQlpZiAoIXR0eS0+cmVjZWl2ZV9yb29tKQogCQkJCWJyZWFrOwogCQkJaWYgKGNvdW50ID4gdHR5LT5yZWNlaXZlX3Jvb20pCiAJCQkJY291bnQgPSB0dHktPnJlY2VpdmVfcm9vbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCAzOTVhMzQ3Li5kYWM3Njc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNTMwLDYgKzE1MzAsOCBAQAogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDA0Y2UpLCB9LCAvKiBOb2tpYSBFOTAgKi8KIAl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMWQ0KSwgfSwgLyogTm9raWEgRTU1ICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMwMiksIH0sIC8qIE5va2lhIE44ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDMzNSksIH0sIC8qIE5va2lhIEU3ICovCisJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDNjZCksIH0sIC8qIE5va2lhIEM3ICovCiAJeyBTQU1TVU5HX1BDU1VJVEVfQUNNX0lORk8oMHg2NjUxKSwgfSwgLyogU2Ftc3VuZyBHVGk4NTEwIChJTk5PVjgpICovCiAKIAkvKiBOT1RFOiBub24tTm9raWEgQ09NTS9BQ00vMHhmZiBpcyBsaWtlbHkgTVNGVCBSTkRJUy4uLiBOT1QgYSBtb2RlbSEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDc5YTU4YzMuLjkwYWUxNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMzM5LDcgKzMzOSw4IEBACiB7CiAJaW50IGksIHN0YXR1cyA9IC1FVElNRURPVVQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmIHN0YXR1cyA9PSAtRVRJTUVET1VUOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX1NUU19SRVRSSUVTICYmCisJCQkoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FUElQRSk7IGkrKykgewogCQlzdGF0dXMgPSB1c2JfY29udHJvbF9tc2coaGRldiwgdXNiX3JjdmN0cmxwaXBlKGhkZXYsIDApLAogCQkJVVNCX1JFUV9HRVRfU1RBVFVTLCBVU0JfRElSX0lOIHwgVVNCX1JUX0hVQiwgMCwgMCwKIAkJCWRhdGEsIHNpemVvZigqZGF0YSksIFVTQl9TVFNfVElNRU9VVCk7CkBAIC0zNTUsNyArMzU2LDggQEAKIHsKIAlpbnQgaSwgc3RhdHVzID0gLUVUSU1FRE9VVDsKIAotCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYgc3RhdHVzID09IC1FVElNRURPVVQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBVU0JfU1RTX1JFVFJJRVMgJiYKKwkJCShzdGF0dXMgPT0gLUVUSU1FRE9VVCB8fCBzdGF0dXMgPT0gLUVQSVBFKTsgaSsrKSB7CiAJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhoZGV2LCB1c2JfcmN2Y3RybHBpcGUoaGRldiwgMCksCiAJCQlVU0JfUkVRX0dFVF9TVEFUVVMsIFVTQl9ESVJfSU4gfCBVU0JfUlRfUE9SVCwgMCwgcG9ydDEsCiAJCQlkYXRhLCBzaXplb2YoKmRhdGEpLCBVU0JfU1RTX1RJTUVPVVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDFiMTI1YzIuLjIyNzhkYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTM4OSw3ICszODksNiBAQAogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCiAJCWRfZGVsZXRlKGRlbnRyeSk7Ci0JZHB1dChkZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCA1ODQ1NmQxLi4wMjllMjg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtNjMyLDEzICs2MzIsMTAgQEAKIAogZW5kY2hvaWNlCiAKKyMgU2VsZWN0ZWQgYnkgVURDIGRyaXZlcnMgdGhhdCBzdXBwb3J0IGhpZ2gtc3BlZWQgb3BlcmF0aW9uLgogY29uZmlnIFVTQl9HQURHRVRfRFVBTFNQRUVECiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX0dBREdFVAotCWRlZmF1bHQgbgotCWhlbHAKLQkgIE1lYW5zIHRoYXQgZ2FkZ2V0IGRyaXZlcnMgc2hvdWxkIGluY2x1ZGUgZXh0cmEgZGVzY3JpcHRvcnMKLQkgIGFuZCBjb2RlIHRvIGhhbmRsZSBkdWFsLXNwZWVkIGNvbnRyb2xsZXJzLgogCiAjCiAjIFVTQiBHYWRnZXQgRHJpdmVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggNmU0MmFhYi4uOTVlODEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggNDFkYzA5My4uZjQ2OTBmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDYxZmY5MjcuLmQzZGNhYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE5MDYsNiArMTkwNiw3IEBACiAJaWYgKCFoY2QpCiAJCXJldHVybiAtRU5PTUVNOwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX2R1bW15IChoY2QpOworCWhjZC0+aGFzX3R0ID0gMTsKIAogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgMCwgMCk7CiAJaWYgKHJldHZhbCAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCmluZGV4IGEwMTM4M2YuLmE1Njg3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jCkBAIC00MzEsOCArNDMxLDEwIEBACiAKIAkvKiBoYWx0IGFueSBlbmRwb2ludCBieSBkb2luZyBhICJ3cm9uZyBkaXJlY3Rpb24iIGkvbyBjYWxsICovCiAJaWYgKCF1c2JfZW5kcG9pbnRfZGlyX2luKCZkYXRhLT5kZXNjKSkgewotCQlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYygmZGF0YS0+ZGVzYykpCisJCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKCZkYXRhLT5kZXNjKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCURCRyAoZGF0YS0+ZGV2LCAiJXMgaGFsdFxuIiwgZGF0YS0+bmFtZSk7CiAJCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwogCQlpZiAobGlrZWx5IChkYXRhLT5lcCAhPSBOVUxMKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9tdl91ZGNfY29yZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKaW5kZXggYjYyYjI2NC4uYjFhODE0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L212X3VkY19jb3JlLmMKQEAgLTIwODMsNyArMjA4Myw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbXZfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBtdl91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCkBAIC0yMDkyLDcgKzIwOTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12X3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbXZfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQogewogCXN0cnVjdCBtdl91ZGMgKnVkYyA9IHRoZV9jb250cm9sbGVyOwogCWludCByZXR2YWw7CkBAIC0yMTAwLDcgKzIxMDAsNyBAQAogCXJldHZhbCA9IG12X3VkY19waHlfaW5pdCh1ZGMtPnBoeV9yZWdzKTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoX2RldiwgInBoeSBpbml0aWFsaXphdGlvbiBlcnJvciAlZFxuIiwgcmV0dmFsKTsKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIHJldHZhbDsKIAl9CiAJdWRjX3Jlc2V0KHVkYyk7CiAJZXAwX3Jlc2V0KHVkYyk7CkBAIC0yMTIyLDcgKzIxMjIsNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicHhhLXUybyIsCiAjaWZkZWYgQ09ORklHX1BNCi0JCS5wbQk9IG12X3VkY19wbV9vcHMsCisJCS5wbQk9ICZtdl91ZGNfcG1fb3BzLAogI2VuZGlmCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAyNDY5NmY3Li40NzZkODhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwppbmRleCAzNjVjMDJmLi43NzQ1NDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKQEAgLTIyMTYsNyArMjIxNiw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9ESVNDX0lSUSwgcmV0dmFsKTsKLWx1YmJvY2tfZmFpbDA6CiAJCQlnb3RvIGVycl9pcnFfbHViOwogCQl9CiAJCXJldHZhbCA9IHJlcXVlc3RfaXJxKExVQkJPQ0tfVVNCX0lSUSwKQEAgLTIyMjYsNyArMjIyNSw2IEBACiAJCWlmIChyZXR2YWwgIT0gMCkgewogCQkJcHJfZXJyKCIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAogCQkJCWRyaXZlcl9uYW1lLCBMVUJCT0NLX1VTQl9JUlEsIHJldHZhbCk7Ci0JCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKIAkJCWdvdG8gbHViYm9ja19mYWlsMDsKIAkJfQogCX0gZWxzZQpAQCAtMjIzNiwxMCArMjIzNCwxMSBAQAogCXJldHVybiAwOwogCiAjaWZkZWYJQ09ORklHX0FSQ0hfTFVCQk9DSworbHViYm9ja19mYWlsMDoKIAlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKICBlcnJfaXJxX2x1YjoKLSNlbmRpZgogCWZyZWVfaXJxKGlycSwgZGV2KTsKKyNlbmRpZgogIGVycl9pcnExOgogCWlmIChncGlvX2lzX3ZhbGlkKGRldi0+bWFjaC0+Z3Bpb19wdWxsdXApKQogCQlncGlvX2ZyZWUoZGV2LT5tYWNoLT5ncGlvX3B1bGx1cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKaW5kZXggYWNiOWNjNC4uMGRmZWUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwpAQCAtMjY4MCw5ICsyNjgwLDkgQEAKIAogCXdyaXRlbCgwLCBoc290Zy0+cmVncyArIFMzQ19EQUlOVE1TSyk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RPRVBDVEwwKSk7CisJZGV2X2RiZyhoc290Zy0+ZGV2LCAiRVAwOiBESUVQQ1RMMD0weCUwOHgsIERPRVBDVEwwPTB4JTA4eFxuIiwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRElFUENUTDApLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOwogCiAJLyogZW5hYmxlIGluIGFuZCBvdXQgZW5kcG9pbnQgaW50ZXJydXB0cyAqLwogCXMzY19oc290Z19lbl9nc2ludChoc290ZywgUzNDX0dJTlRTVFNfT0VQSW50IHwgUzNDX0dJTlRTVFNfSUVQSW50KTsKQEAgLTI3MDEsNyArMjcwMSw3IEBACiAJdWRlbGF5KDEwKTsgIC8qIHNlZSBvcGVuaWJvb3QgKi8KIAlfX2JpYzMyKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwsIFMzQ19EQ1RMX1BXUk9uUHJnRG9uZSk7CiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiRENUTD0weCUwOHhcbiIsIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RDVEwpKTsKKwlkZXZfZGJnKGhzb3RnLT5kZXYsICJEQ1RMPTB4JTA4eFxuIiwgcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRENUTCkpOwogCiAJLyogUzNDX0R4RVBDVExfVVNCQWN0RXAgc2F5cyBSTyBpbiBtYW51YWwsIGJ1dCBzZWVtcyB0byBiZSBzZXQgYnkKIAkgICB3cml0aW5nIHRvIHRoZSBFUENUTCByZWdpc3Rlci4uICovCkBAIC0yNzIxLDkgKzI3MjEsOSBAQAogCiAJczNjX2hzb3RnX2VucXVldWVfc2V0dXAoaHNvdGcpOwogCi0JZGV2X2luZm8oaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ESUVQQ1RMMCksCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19ET0VQQ1RMMCkpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkVQMDogRElFUENUTDA9MHglMDh4LCBET0VQQ1RMMD0weCUwOHhcbiIsCisJCXJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0RJRVBDVEwwKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfRE9FUENUTDApKTsKIAogCS8qIGNsZWFyIGdsb2JhbCBOQUtzICovCiAJd3JpdGVsKFMzQ19EQ1RMX0NHT1VUTmFrIHwgUzNDX0RDVExfQ0dOUEluTkFLLApAQCAtMjkyMSw5ICsyOTIxLDkgQEAKIAogCS8qIHNldHVwIGZpZm9zICovCiAKLQlkZXZfaW5mbyhoc290Zy0+ZGV2LCAiR1JYRlNJWj0weCUwOHgsIEdOUFRYRlNJWj0weCUwOHhcbiIsCi0JCSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKLQkJIHJlYWRsKGhzb3RnLT5yZWdzICsgUzNDX0dOUFRYRlNJWikpOworCWRldl9kYmcoaHNvdGctPmRldiwgIkdSWEZTSVo9MHglMDh4LCBHTlBUWEZTSVo9MHglMDh4XG4iLAorCQlyZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhGU0laKSwKKwkJcmVhZGwoaHNvdGctPnJlZ3MgKyBTM0NfR05QVFhGU0laKSk7CiAKIAlzM2NfaHNvdGdfaW5pdF9maWZvKGhzb3RnKTsKIApAQCAtMjk0NSw2ICsyOTQ1LDcgQEAKIAogc3RhdGljIHZvaWQgczNjX2hzb3RnX2R1bXAoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7CisjaWZkZWYgREVCVUcKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoc290Zy0+ZGV2OwogCXZvaWQgX19pb21lbSAqcmVncyA9IGhzb3RnLT5yZWdzOwogCXUzMiB2YWw7CkBAIC0yOTg3LDYgKzI5ODgsNyBAQAogCiAJZGV2X2luZm8oZGV2LCAiRFZCVVNESVM9MHglMDh4LCBEVkJVU1BVTFNFPSUwOHhcbiIsCiAJCSByZWFkbChyZWdzICsgUzNDX0RWQlVTRElTKSwgcmVhZGwocmVncyArIFMzQ19EVkJVU1BVTFNFKSk7CisjZW5kaWYKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzdWRjLmMKaW5kZXggY2ZlM2NmNS4uZDVlM2UxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHN1ZGMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPG1hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC91ZGMuaD4KQEAgLTEzMDEsNyArMTMwMiw4IEBACiAJaHN1ZGMtPnVjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2ItZGV2aWNlIik7CiAJaWYgKElTX0VSUihoc3VkYy0+dWNsaykpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCB1c2ItZGV2aWNlIGNsb2NrIHNvdXJjZVxuIik7Ci0JCXJldHVybiBQVFJfRVJSKGhzdWRjLT51Y2xrKTsKKwkJcmV0ID0gUFRSX0VSUihoc3VkYy0+dWNsayk7CisJCWdvdG8gZXJyX2NsazsKIAl9CiAJY2xrX2VuYWJsZShoc3VkYy0+dWNsayk7CiAKQEAgLTEzMTAsNyArMTMxMiw4IEBACiAJZGlzYWJsZV9pcnEoaHN1ZGMtPmlycSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCXJldHVybiAwOwotCitlcnJfY2xrOgorCWZyZWVfaXJxKGhzdWRjLT5pcnEsIGhzdWRjKTsKIGVycl9pcnE6CiAJaW91bm1hcChoc3VkYy0+cmVncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MyNDEwX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKaW5kZXggNmQ4YjA0MC4uMTAwZjI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IGFmZWY3YjAuLjgwYmU1NDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCkBAIC0zMTIsOCArMzEyLDEwIEBACiAJCXJldHVybiBQVFJfRVJSKHVzYl9jbGspOwogCiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKGRyaXZlciwgJnBkZXYtPmRldiwgInB4YTI3eCIpOwotCWlmICghaGNkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIWhjZCkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQogCiAJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyKSB7CkBAIC0zNjgsNiArMzcwLDcgQEAKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKICBlcnIxOgogCXVzYl9wdXRfaGNkKGhjZCk7CisgZXJyMDoKIAljbGtfcHV0KHVzYl9jbGspOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggMmUwNDg2MS4uMWY1MGI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtNDM4LDEzICs0MzgsMTMgQEAKIAlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCBjdHgpOwogCiAJc3dpdGNoIChHRVRfU0xPVF9TVEFURShsZTMyX3RvX2NwdShzbG90X2N0eC0+ZGV2X3N0YXRlKSkpIHsKLQljYXNlIDA6CisJY2FzZSBTTE9UX1NUQVRFX0VOQUJMRUQ6CiAJCXJldHVybiAiZW5hYmxlZC9kaXNhYmxlZCI7Ci0JY2FzZSAxOgorCWNhc2UgU0xPVF9TVEFURV9ERUZBVUxUOgogCQlyZXR1cm4gImRlZmF1bHQiOwotCWNhc2UgMjoKKwljYXNlIFNMT1RfU1RBVEVfQUREUkVTU0VEOgogCQlyZXR1cm4gImFkZHJlc3NlZCI7Ci0JY2FzZSAzOgorCWNhc2UgU0xPVF9TVEFURV9DT05GSUdVUkVEOgogCQlyZXR1cm4gImNvbmZpZ3VyZWQiOwogCWRlZmF1bHQ6CiAJCXJldHVybiAicmVzZXJ2ZWQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCmluZGV4IDI2Y2FiYTQuLjBmOGUxZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKQEAgLTk4NSw5ICs5ODUsMTkgQEAKIAlpbnRlcnZhbCA9IGNsYW1wX3ZhbChlcC0+ZGVzYy5iSW50ZXJ2YWwsIDEsIDE2KSAtIDE7CiAJaWYgKGludGVydmFsICE9IGVwLT5kZXNjLmJJbnRlcnZhbCAtIDEpCiAJCWRldl93YXJuKCZ1ZGV2LT5kZXYsCi0JCQkgImVwICUjeCAtIHJvdW5kaW5nIGludGVydmFsIHRvICVkIG1pY3JvZnJhbWVzXG4iLAorCQkJICJlcCAlI3ggLSByb3VuZGluZyBpbnRlcnZhbCB0byAlZCAlc2ZyYW1lc1xuIiwKIAkJCSBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAotCQkJIDEgPDwgaW50ZXJ2YWwpOworCQkJIDEgPDwgaW50ZXJ2YWwsCisJCQkgdWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0ZVTEwgPyAiIiA6ICJtaWNybyIpOworCisJaWYgKHVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9GVUxMKSB7CisJCS8qCisJCSAqIEZ1bGwgc3BlZWQgaXNvYyBlbmRwb2ludHMgc3BlY2lmeSBpbnRlcnZhbCBpbiBmcmFtZXMsCisJCSAqIG5vdCBtaWNyb2ZyYW1lcy4gV2UgYXJlIHVzaW5nIG1pY3JvZnJhbWVzIGV2ZXJ5d2hlcmUsCisJCSAqIHNvIGFkanVzdCBhY2NvcmRpbmdseS4KKwkJICovCisJCWludGVydmFsICs9IDM7CS8qIDEgZnJhbWUgPSAyXjMgdWZyYW1lcyAqLworCX0KIAogCXJldHVybiBpbnRlcnZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCBjNDA4ZTlmLi4xNzU0MWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMDYsMTIgKzEwNiwyMiBAQAogCiAJLyogTG9vayBmb3IgdmVuZG9yLXNwZWNpZmljIHF1aXJrcyAqLwogCWlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9GUkVTQ09fTE9HSUMgJiYKLQkJCXBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0ZSRVNDT19MT0dJQ19QREsgJiYKLQkJCXBkZXYtPnJldmlzaW9uID09IDB4MCkgeworCQkJcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfRlJFU0NPX0xPR0lDX1BESykgeworCQlpZiAocGRldi0+cmV2aXNpb24gPT0gMHgwKSB7CiAJCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9SRVNFVF9FUF9RVUlSSzsKIAkJCXhoY2lfZGJnKHhoY2ksICJRVUlSSzogRnJlc2NvIExvZ2ljIHhIQyBuZWVkcyBjb25maWd1cmUiCiAJCQkJCSIgZW5kcG9pbnQgY21kIGFmdGVyIHJlc2V0IGVuZHBvaW50XG4iKTsKKwkJfQorCQkvKiBGcmVzY28gTG9naWMgY29uZmlybXM6IGFsbCByZXZpc2lvbnMgb2YgdGhpcyBjaGlwIGRvIG5vdAorCQkgKiBzdXBwb3J0IE1TSSwgZXZlbiB0aG91Z2ggc29tZSBvZiB0aGVtIGNsYWltIHRvIGluIHRoZWlyIFBDSQorCQkgKiBjYXBhYmlsaXRpZXMuCisJCSAqLworCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9CUk9LRU5fTVNJOworCQl4aGNpX2RiZyh4aGNpLCAiUVVJUks6IEZyZXNjbyBMb2dpYyByZXZpc2lvbiAldSAiCisJCQkJImhhcyBicm9rZW4gTVNJIGltcGxlbWVudGF0aW9uXG4iLAorCQkJCXBkZXYtPnJldmlzaW9uKTsKIAl9CisKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTkVDKQogCQl4aGNpLT5xdWlya3MgfD0gWEhDSV9ORUNfSE9TVDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggY2MxNDg1Yi4uODAwZjQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0xNzgyLDcgKzE3ODIsNyBAQAogCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcmFtZTsKIAlpbnQgaWR4OwogCi0JZXBfcmluZyA9IHhoY2lfZG1hX3RvX3RyYW5zZmVyX3JpbmcoZXAsIGV2ZW50LT5idWZmZXIpOworCWVwX3JpbmcgPSB4aGNpX2RtYV90b190cmFuc2Zlcl9yaW5nKGVwLCBsZTY0X3RvX2NwdShldmVudC0+YnVmZmVyKSk7CiAJdXJiX3ByaXYgPSB0ZC0+dXJiLT5oY3ByaXY7CiAJaWR4ID0gdXJiX3ByaXYtPnRkX2NudDsKIAlmcmFtZSA9ICZ0ZC0+dXJiLT5pc29fZnJhbWVfZGVzY1tpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCBkOTY2MGViLi4wNmU3MDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtNDMwLDEyICs0MzAsMTkgQEAKIAkJZnJlZV9pcnEoaGNkLT5pcnEsIGhjZCk7CiAJaGNkLT5pcnEgPSAtMTsKIAorCS8qIFNvbWUgRnJlc2NvIExvZ2ljIGhvc3QgY29udHJvbGxlcnMgYWR2ZXJ0aXNlIE1TSSwgYnV0IGZhaWwgdG8KKwkgKiBnZW5lcmF0ZSBpbnRlcnJ1cHRzLiAgRG9uJ3QgZXZlbiB0cnkgdG8gZW5hYmxlIE1TSS4KKwkgKi8KKwlpZiAoeGhjaS0+cXVpcmtzICYgWEhDSV9CUk9LRU5fTVNJKQorCQlnb3RvIGxlZ2FjeV9pcnE7CisKIAlyZXQgPSB4aGNpX3NldHVwX21zaXgoeGhjaSk7CiAJaWYgKHJldCkKIAkJLyogZmFsbCBiYWNrIHRvIG1zaSovCiAJCXJldCA9IHhoY2lfc2V0dXBfbXNpKHhoY2kpOwogCiAJaWYgKHJldCkgeworbGVnYWN5X2lycToKIAkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwogCQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCiAJCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwpAQCAtMTg0OSw4ICsxODU2LDggQEAKIAogCS8qIEZyZWUgYW55IHJpbmdzIHRoYXQgd2VyZSBkcm9wcGVkLCBidXQgbm90IGNoYW5nZWQuICovCiAJZm9yIChpID0gMTsgaSA8IDMxOyArK2kpIHsKLQkJaWYgKChjdHJsX2N0eC0+ZHJvcF9mbGFncyAmICgxIDw8IChpICsgMSkpKSAmJgotCQkJCSEoY3RybF9jdHgtPmFkZF9mbGFncyAmICgxIDw8IChpICsgMSkpKSkKKwkJaWYgKChsZTMyX3RvX2NwdShjdHJsX2N0eC0+ZHJvcF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkgJiYKKwkJICAgICEobGUzMl90b19jcHUoY3RybF9jdHgtPmFkZF9mbGFncykgJiAoMSA8PCAoaSArIDEpKSkpCiAJCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CiAJfQogCXhoY2lfemVyb19pbl9jdHgoeGhjaSwgdmlydF9kZXYpOwpAQCAtMjQ2Nyw2ICsyNDc0LDcgQEAKIAlzdHJ1Y3QgeGhjaV9jb21tYW5kICpyZXNldF9kZXZpY2VfY21kOwogCWludCB0aW1lbGVmdDsKIAlpbnQgbGFzdF9mcmVlZF9lbmRwb2ludDsKKwlzdHJ1Y3QgeGhjaV9zbG90X2N0eCAqc2xvdF9jdHg7CiAKIAlyZXQgPSB4aGNpX2NoZWNrX2FyZ3MoaGNkLCB1ZGV2LCBOVUxMLCAwLCBmYWxzZSwgX19mdW5jX18pOwogCWlmIChyZXQgPD0gMCkKQEAgLTI0OTksNiArMjUwNywxMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogSWYgZGV2aWNlIGlzIG5vdCBzZXR1cCwgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmVzZXR0aW5nIGl0ICovCisJc2xvdF9jdHggPSB4aGNpX2dldF9zbG90X2N0eCh4aGNpLCB2aXJ0X2Rldi0+b3V0X2N0eCk7CisJaWYgKEdFVF9TTE9UX1NUQVRFKGxlMzJfdG9fY3B1KHNsb3RfY3R4LT5kZXZfc3RhdGUpKSA9PQorCQkJCQkJU0xPVF9TVEFURV9ESVNBQkxFRCkKKwkJcmV0dXJuIDA7CisKIAl4aGNpX2RiZyh4aGNpLCAiUmVzZXR0aW5nIGRldmljZSB3aXRoIHNsb3QgSUQgJXVcbiIsIHNsb3RfaWQpOwogCS8qIEFsbG9jYXRlIHRoZSBjb21tYW5kIHN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBzdHJ1Y3QgY29tcGxldGlvbi4KIAkgKiBBc3N1bWUgd2UncmUgaW4gcHJvY2VzcyBjb250ZXh0LCBzaW5jZSB0aGUgbm9ybWFsIGRldmljZSByZXNldApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCBhYzAxOTZlLi43ZDFlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtNTYwLDYgKzU2MCwxMSBAQAogI2RlZmluZSBTTE9UX1NUQVRFCSgweDFmIDw8IDI3KQogI2RlZmluZSBHRVRfU0xPVF9TVEFURShwKQkoKChwKSAmICgweDFmIDw8IDI3KSkgPj4gMjcpCiAKKyNkZWZpbmUgU0xPVF9TVEFURV9ESVNBQkxFRAkwCisjZGVmaW5lIFNMT1RfU1RBVEVfRU5BQkxFRAlTTE9UX1NUQVRFX0RJU0FCTEVECisjZGVmaW5lIFNMT1RfU1RBVEVfREVGQVVMVAkxCisjZGVmaW5lIFNMT1RfU1RBVEVfQUREUkVTU0VECTIKKyNkZWZpbmUgU0xPVF9TVEFURV9DT05GSUdVUkVECTMKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9lcF9jdHgKQEAgLTEzMDIsNiArMTMwNyw3IEBACiAgKiBjb21tYW5kcy4KICAqLwogI2RlZmluZSBYSENJX0VQX0xJTUlUX1FVSVJLCSgxIDw8IDUpCisjZGVmaW5lIFhIQ0lfQlJPS0VOX01TSQkJKDEgPDwgNikKIAl1bnNpZ25lZCBpbnQJCW51bV9hY3RpdmVfZXBzOwogCXVuc2lnbmVkIGludAkJbGltaXRfYWN0aXZlX2VwczsKIAkvKiBUaGVyZSBhcmUgdHdvIHJvb3RodWJzIHRvIGtlZXAgdHJhY2sgb2YgYnVzIHN1c3BlbmQgaW5mbyBmb3IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IGFiOGUxMDAuLmM3MWIwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtOTYsNiArOTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvcmVuZXNhc191c2Jocy9tb2RfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwppbmRleCAyMDZjZmFiLi41NDc0ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL21vZF9nYWRnZXQuYwpAQCAtMTM4MCw1ICsxMzgwLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiaHNnX2dwcml2ICpncHJpdiA9IHVzYmhzZ19wcml2X3RvX2dwcml2KHByaXYpOwogCisJa2ZyZWUoZ3ByaXYtPnVlcCk7CiAJa2ZyZWUoZ3ByaXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBlOGRiZGU1Li4xNjI3Mjg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtNjQ3LDYgKzY0Nyw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBFVkVSX0VDT19QUk9fQ0RTKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJXzROX0dBTEFYWV9ERV8yX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfNE5fR0FMQVhZX0RFXzNfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzFfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgWFNFTlNfQ09OVkVSVEVSXzJfUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCmluZGV4IDFkOTQ2Y2QuLmFiMWZjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKQEAgLTM1MSw2ICszNTEsNyBAQAogICovCiAjZGVmaW5lIEZURElfNE5fR0FMQVhZX0RFXzFfUElECTB4RjNDMAogI2RlZmluZSBGVERJXzROX0dBTEFYWV9ERV8yX1BJRAkweEYzQzEKKyNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfM19QSUQJMHhGM0MyCiAKIC8qCiAgKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCmluZGV4IDMxOGRkMDAuLjYwYjI1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTMxMSwxMCArMzExLDYgQEAKICNkZWZpbmUgWlRFX1BST0RVQ1RfQUMyNzI2CQkJMHhmZmY1CiAjZGVmaW5lIFpURV9QUk9EVUNUX0FDODcxMFQJCQkweGZmZmYKIAotLyogWlRFIFBST0RVQ1RTIC0tIGFsdGVybmF0ZSB2ZW5kb3IgSUQgKi8KLSNkZWZpbmUgWlRFX1ZFTkRPUl9JRDIJCQkJMHgxZDZiCi0jZGVmaW5lIFpURV9QUk9EVUNUX01GXzMzMAkJCTB4MDAwMgotCiAjZGVmaW5lIEJFTlFfVkVORE9SX0lECQkJCTB4MDRhNQogI2RlZmluZSBCRU5RX1BST0RVQ1RfSDEwCQkJMHg0MDY4CiAKQEAgLTM0MCwxMSArMzM2LDEyIEBACiAjZGVmaW5lIFRPU0hJQkFfUFJPRFVDVF9HNDUwCQkJMHgwZDQ1CiAKICNkZWZpbmUgQUxJTktfVkVORE9SX0lECQkJCTB4MWUwZQorI2RlZmluZSBBTElOS19QUk9EVUNUX1BIMzAwCQkJMHg5MTAwCiAjZGVmaW5lIEFMSU5LX1BST0RVQ1RfM0dVCQkJMHg5MjAwCiAKIC8qIEFMQ0FURUwgUFJPRFVDVFMgKi8KICNkZWZpbmUgQUxDQVRFTF9WRU5ET1JfSUQJCQkweDFiYmIKLSNkZWZpbmUgQUxDQVRFTF9QUk9EVUNUX1gwNjBTCQkJMHgwMDAwCisjZGVmaW5lIEFMQ0FURUxfUFJPRFVDVF9YMDYwU19YMjAwCQkweDAwMDAKIAogI2RlZmluZSBQSVJFTExJX1ZFTkRPUl9JRAkJCTB4MTI2NgogI2RlZmluZSBQSVJFTExJX1BST0RVQ1RfQzEwMF8xCQkJMHgxMDAyCkBAIC0zNzksNiArMzc2LDkgQEAKICAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAorLyogWm9vbSAqLworI2RlZmluZSBaT09NX1BST0RVQ1RfNDU5NwkJCTB4OTYwNworCiAvKiBIYWllciBwcm9kdWN0cyAqLwogI2RlZmluZSBIQUlFUl9WRU5ET1JfSUQJCQkJMHgyMDFlCiAjZGVmaW5lIEhBSUVSX1BST0RVQ1RfQ0UxMDAJCQkweDIwMDkKQEAgLTQzMiw2ICs0MzIsMjAgQEAKIAkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKIH07CiAKK3N0YXRpYyBjb25zdCB1OCBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwW10gPSB7IDAsIDEgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIGFsY2F0ZWxfeDIwMF9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKGFsY2F0ZWxfeDIwMF9ub19zZW5kc2V0dXApLAorCS5pZmFjZWluZm8gPSBhbGNhdGVsX3gyMDBfbm9fc2VuZHNldHVwLAorCS5yZWFzb24gPSBPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUAorfTsKKworc3RhdGljIGNvbnN0IHU4IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cFtdID0geyAwLCAxLCAyIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyB6dGVfazM3NjVfel9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCksCisJLmlmYWNlaW5mbyA9IHp0ZV9rMzc2NV96X25vX3NlbmRzZXR1cCwKKwkucmVhc29uID0gT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVAKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX0NPTFQpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQSkgfSwKQEAgLTkxNiwxMyArOTMwLDEzIEBACiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAwNzMsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxMzAsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDAxNDEsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhaVEVfVkVORE9SX0lELCAweDIwMDIsIDB4ZmYsCisJICAweGZmLCAweGZmKSwgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZ6dGVfazM3NjVfel9ibGFja2xpc3QgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIDB4MjAwMywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0NETUFfVEVDSCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMCwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDMjcyNiwgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFpURV9WRU5ET1JfSUQsIFpURV9QUk9EVUNUX0FDODcxMFQsIDB4ZmYsIDB4ZmYsIDB4ZmYpIH0sCi0JeyBVU0JfREVWSUNFKFpURV9WRU5ET1JfSUQyLCBaVEVfUFJPRFVDVF9NRl8zMzApIH0sCiAJeyBVU0JfREVWSUNFKEJFTlFfVkVORE9SX0lELCBCRU5RX1BST0RVQ1RfSDEwKSB9LAogCXsgVVNCX0RFVklDRShETElOS19WRU5ET1JfSUQsIERMSU5LX1BST0RVQ1RfRFdNXzY1MikgfSwKIAl7IFVTQl9ERVZJQ0UoQUxJTktfVkVORE9SX0lELCBETElOS19QUk9EVUNUX0RXTV82NTJfVTUpIH0sIC8qIFllcywgQUxJTktfVkVORE9SX0lEICovCkBAIC05MzUsMTMgKzk0OSwxNyBAQAogCXsgVVNCX0RFVklDRShUT1NISUJBX1ZFTkRPUl9JRCwgVE9TSElCQV9QUk9EVUNUX0c0NTApIH0sCiAJeyBVU0JfREVWSUNFKFRPU0hJQkFfVkVORE9SX0lELCBUT1NISUJBX1BST0RVQ1RfSFNEUEFfTUlOSUNBUkQgKSB9LCAvKiBUb3NoaWJhIDNHIEhTRFBBID09IE5vdmF0ZWwgRXhwZWRpdGUgRVU4NzBEIE1pbmlDYXJkICovCiAJeyBVU0JfREVWSUNFKEFMSU5LX1ZFTkRPUl9JRCwgMHg5MDAwKSB9LAorCXsgVVNCX0RFVklDRShBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfUEgzMDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhBTElOS19WRU5ET1JfSUQsIEFMSU5LX1BST0RVQ1RfM0dVLCAweGZmLCAweGZmLCAweGZmKSB9LAotCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAorCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTX1gyMDApLAorCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZhbGNhdGVsX3gyMDBfYmxhY2tsaXN0CisJfSwKIAl7IFVTQl9ERVZJQ0UoQUlSUExVU19WRU5ET1JfSUQsIEFJUlBMVVNfUFJPRFVDVF9NQ0Q2NTApIH0sCiAJeyBVU0JfREVWSUNFKFRMQVlURUNIX1ZFTkRPUl9JRCwgVExBWVRFQ0hfUFJPRFVDVF9URVU4MDApIH0sCiAJeyBVU0JfREVWSUNFKExPTkdDSEVFUl9WRU5ET1JfSUQsIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0KSwKICAgCSAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmb3VyX2dfdzE0X2JsYWNrbGlzdAogICAJfSwKKwl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgWk9PTV9QUk9EVUNUXzQ1OTcpIH0sCiAJeyBVU0JfREVWSUNFKEhBSUVSX1ZFTkRPUl9JRCwgSEFJRVJfUFJPRFVDVF9DRTEwMCkgfSwKIAkvKiBQaXJlbGxpICAqLwogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUX0MxMDBfMSl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggMDA0MTg5OS4uZThhZTIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC04MTksNiArODE5LDM1IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNvbWUgZGV2aWNlcyBkb24ndCB3b3JrIG9yIHJldHVybiBpbmNvcnJlY3QgZGF0YSB0aGUgZmlyc3QKKwkgKiB0aW1lIHRoZXkgZ2V0IGEgUkVBRCgxMCkgY29tbWFuZCwgb3IgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGFmdGVyIGEgbWVkaWEgY2hhbmdlLiAgSWYgdGhlIElOSVRJQUxfUkVBRDEwIGZsYWcgaXMgc2V0LAorCSAqIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBSRUFEKDEwKSBjb21tYW5kcyBzdWNjZWVkLiAgSWYgdGhlCisJICogcHJldmlvdXMgb25lIHN1Y2NlZWRlZCBhbmQgdGhpcyBvbmUgZmFpbGVkLCBzZXQgdGhlIFJFRE9fUkVBRDEwCisJICogZmxhZyB0byBmb3JjZSBhIHJldHJ5LgorCSAqLworCWlmICh1bmxpa2VseSgodXMtPmZmbGFncyAmIFVTX0ZMX0lOSVRJQUxfUkVBRDEwKSAmJgorCQkJc3JiLT5jbW5kWzBdID09IFJFQURfMTApKSB7CisJCWlmIChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EKSB7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQsICZ1cy0+ZGZsYWdzKTsKKwkJfSBlbHNlIGlmICh0ZXN0X2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRUFEMTBfV09SS0VELCAmdXMtPmRmbGFncyk7CisJCQlzZXRfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncyk7CisJCX0KKworCQkvKgorCQkgKiBOZXh0LCBpZiB0aGUgUkVET19SRUFEMTAgZmxhZyBpcyBzZXQsIHJldHVybiBhIHJlc3VsdAorCQkgKiBjb2RlIHRoYXQgd2lsbCBjYXVzZSB0aGUgU0NTSSBjb3JlIHRvIHJldHJ5IHRoZSBSRUFEKDEwKQorCQkgKiBjb21tYW5kIGltbWVkaWF0ZWx5LgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KFVTX0ZMSURYX1JFRE9fUkVBRDEwLCAmdXMtPmRmbGFncykpIHsKKwkJCWNsZWFyX2JpdChVU19GTElEWF9SRURPX1JFQUQxMCwgJnVzLT5kZmxhZ3MpOworCQkJc3JiLT5yZXN1bHQgPSBESURfSU1NX1JFVFJZIDw8IDE2OworCQkJc3JiLT5zZW5zZV9idWZmZXJbMF0gPSAwOworCQl9CisJfQorCiAJLyogRGlkIHdlIHRyYW5zZmVyIGxlc3MgdGhhbiB0aGUgbWluaW11bSBhbW91bnQgcmVxdWlyZWQ/ICovCiAJaWYgKChzcmItPnJlc3VsdCA9PSBTQU1fU1RBVF9HT09EIHx8IHNyYi0+c2Vuc2VfYnVmZmVyWzJdID09IDApICYmCiAJCQlzY3NpX2J1ZmZsZW4oc3JiKSAtIHNjc2lfZ2V0X3Jlc2lkKHNyYikgPCBzcmItPnVuZGVyZmxvdykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGMxNjAyYjguLmNjZmYzNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTExNCw2ICsxMTE0LDE2IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBQYXVsIEhhcnRtYW4gPHBhdWwuaGFydG1hbitsaW51eEBnbWFpbC5jb20+CisgKiBUaGlzIGNhcmQgcmVhZGVyIHJldHVybnMgIklsbGVnYWwgUmVxdWVzdCwgTG9naWNhbCBCbG9jayBBZGRyZXNzCisgKiBPdXQgb2YgUmFuZ2UiIGZvciB0aGUgZmlyc3QgUkVBRCgxMCkgYWZ0ZXIgYSBuZXcgY2FyZCBpcyBpbnNlcnRlZC4KKyAqLworVU5VU1VBTF9ERVYoICAweDA5MGMsIDB4NjAwMCwgMHgwMTAwLCAweDAxMDAsCisJCSJGZWl5YSIsCisJCSJTRC9TREhDIENhcmQgUmVhZGVyIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSU5JVElBTF9SRUFEMTAgKSwKKwogLyogVGhpcyBQZW50YXggc3RpbGwgY2FtZXJhIGlzIG5vdCBjb25mb3JtYW50CiAgKiB0byB0aGUgVVNCIHN0b3JhZ2Ugc3BlY2lmaWNhdGlvbjogLQogICogLSBJdCBkb2VzIG5vdCBsaWtlIHRoZSBJTlFVSVJZIGNvbW1hbmQuIFNvIHdlIG11c3QgaGFuZGxlIHRoaXMgY29tbWFuZApAQCAtMTg4OCw2ICsxODk4LDE1IEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPICksCiAKKy8qIFJlcG9ydGVkIGJ5IFN2ZW4gR2VnZ3VzIDxzdmVuLXVzYnN0QGdlZ2d1cy5uZXQ+CisgKiBUaGlzIGVuY3J5cHRlZCBwZW4gZHJpdmUgcmV0dXJucyBib2d1cyBkYXRhIGZvciB0aGUgaW5pdGlhbCBSRUFEKDEwKS4KKyAqLworVU5VU1VBTF9ERVYoICAweDFiMWMsIDB4MWFiNSwgMHgwMjAwLCAweDAyMDAsCisJCSJDb3JzYWlyIiwKKwkJIlBhZGxvY2sgdjIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JTklUSUFMX1JFQUQxMCApLAorCiAvKiBQYXRjaCBieSBSaWNoYXJkIFNjaPx0eiA8ci5zY2h0ekB0LW9ubGluZS5kZT4KICAqIFRoaXMgZXh0ZXJuYWwgaGFyZCBkcml2ZSBlbmNsb3N1cmUgdXNlcyBhIEpNaWNyb24gY2hpcCB3aGljaAogICogbmVlZHMgdGhlIFVTX0ZMX0lHTk9SRV9SRVNJRFVFIGZsYWcgdG8gd29yayBwcm9wZXJseS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDVlZTdhYzQuLjBjYTA5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNDQwLDcgKzQ0MCw4IEBACiAJCQlVU19GTF9OT1RfTE9DS0FCTEUgfCBVU19GTF9NQVhfU0VDVE9SU182NCB8CiAJCQlVU19GTF9DQVBBQ0lUWV9PSyB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwKIAkJCVVTX0ZMX1NJTkdMRV9MVU4gfCBVU19GTF9OT19XUF9ERVRFQ1QgfAotCQkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gfCBVU19GTF9OT19SRUFEX0NBUEFDSVRZXzE2KTsKKwkJCVVTX0ZMX05PX1JFQURfRElTQ19JTkZPIHwgVVNfRkxfTk9fUkVBRF9DQVBBQ0lUWV8xNiB8CisJCQlVU19GTF9JTklUSUFMX1JFQUQxMCk7CiAKIAlwID0gcXVpcmtzOwogCXdoaWxlICgqcCkgewpAQCAtNDkwLDYgKzQ5MSw5IEBACiAJCWNhc2UgJ20nOgogCQkJZiB8PSBVU19GTF9NQVhfU0VDVE9SU182NDsKIAkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWYgfD0gVVNfRkxfSU5JVElBTF9SRUFEMTA7CisJCQlicmVhazsKIAkJY2FzZSAnbyc6CiAJCQlmIHw9IFVTX0ZMX0NBUEFDSVRZX09LOwogCQkJYnJlYWs7CkBAIC05NTMsNiArOTU3LDEzIEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKKwkvKgorCSAqIElmIHRoZSBkZXZpY2UgcmV0dXJucyBpbnZhbGlkIGRhdGEgZm9yIHRoZSBmaXJzdCBSRUFEKDEwKQorCSAqIGNvbW1hbmQsIGluZGljYXRlIHRoZSBjb21tYW5kIHNob3VsZCBiZSByZXRyaWVkLgorCSAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfSU5JVElBTF9SRUFEMTApCisJCXNldF9iaXQoVVNfRkxJRFhfUkVET19SRUFEMTAsICZ1cy0+ZGZsYWdzKTsKKwogCS8qIEFjcXVpcmUgYWxsIHRoZSBvdGhlciByZXNvdXJjZXMgYW5kIGFkZCB0aGUgaG9zdCAqLwogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKaW5kZXggODlkM2JmZi4uN2IwZjIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCkBAIC03Myw2ICs3Myw4IEBACiAjZGVmaW5lIFVTX0ZMSURYX1JFU0VUVElORwk0CS8qIGRldmljZSByZXNldCBpbiBwcm9ncmVzcyAqLwogI2RlZmluZSBVU19GTElEWF9USU1FRF9PVVQJNQkvKiBTQ1NJIG1pZGxheWVyIHRpbWVkIG91dCAgKi8KICNkZWZpbmUgVVNfRkxJRFhfRE9OVF9TQ0FOCTYJLyogZG9uJ3Qgc2NhbiAoZGlzY29ubmVjdCkgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFRE9fUkVBRDEwCTcJLyogcmVkbyBSRUFEKDEwKSBjb21tYW5kICAgICovCisjZGVmaW5lIFVTX0ZMSURYX1JFQUQxMF9XT1JLRUQJOAkvKiBwcmV2aW91cyBSRUFEKDEwKSBzdWNjZWVkZWQgKi8KIAogI2RlZmluZSBVU0JfU1RPUl9TVFJJTkdfTEVOIDMyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCAzZWM0OTIzLi5jMjJlOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC01MTUsMTEgKzUxNSwxMCBAQAogCiAJLyogV2UgbmVlZCBhIGZsYXQgYmFja2luZyBzdG9yZSBmb3IgdGhlIEFyYydzCiAJICAgbGVzcy1mbGF0IGFjdHVhbCBwYWdlZCBmcmFtZWJ1ZmZlciAqLwotCWlmICghKHZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpKSkKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbWVtc2V0KHZpZGVvbWVtb3J5LCAwLCB2aWRlb21lbW9yeXNpemUpOwotCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgYXJjZmJfcGFyKSwgJmRldi0+ZGV2KTsKIAlpZiAoIWluZm8pCiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jIGIvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCmluZGV4IDQ3YzIxZmIuLmJlYTUzYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKQEAgLTc4OSw2ICs3ODksNyBAQAogCWkyY19hZGRfZHJpdmVyKCZhZDUyODBfZHJpdmVyKTsKIAogCW1lbXNldCgmcHJvcHMsIDAsIHNpemVvZihwcm9wcykpOworCXByb3BzLnR5cGUgPSBCQUNLTElHSFRfUkFXOwogCXByb3BzLm1heF9icmlnaHRuZXNzID0gTUFYX0JSSUdIRU5FU1M7CiAJYmxfZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiYmY1MzctYmwiLCBOVUxMLCBOVUxMLAogCQkJCQkgICAmYmZpbl9scTAzNWZiX2JsX29wcywgJnByb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCmluZGV4IGViZGE2ODcuLjM3N2RkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYwpAQCAtMTEwMSwxMiArMTEwMSwxMCBAQAogCiAJdmlkZW9tZW1vcnlzaXplID0gcm91bmR1cCgoZHB5dypkcHloKSwgUEFHRV9TSVpFKTsKIAotCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCXZpZGVvbWVtb3J5ID0gdnphbGxvYyh2aWRlb21lbW9yeXNpemUpOwogCWlmICghdmlkZW9tZW1vcnkpCiAJCWdvdG8gZXJyX2ZiX3JlbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8tPnNjcmVlbl9iYXNlID0gKGNoYXIgKil2aWRlb21lbW9yeTsKIAlpbmZvLT5mYm9wcyA9ICZicm9hZHNoZWV0ZmJfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKaW5kZXggZmIyMDU4NC4uNjljNDlkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9lZmlmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZWZpZmIuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCitzdGF0aWMgYm9vbCByZXF1ZXN0X21lbV9zdWNjZWVkZWQgPSBmYWxzZTsKKwogc3RhdGljIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyBlZmlmYl9kZWZpbmVkIF9fZGV2aW5pdGRhdGEgPSB7CiAJLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVywKIAkuaGVpZ2h0CQkJPSAtMSwKQEAgLTI4MSw3ICsyODMsOSBAQAogewogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSkKIAkJaW91bm1hcChpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLmJhc2UsIGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUpOworCWlmIChyZXF1ZXN0X21lbV9zdWNjZWVkZWQpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5hcGVydHVyZXMtPnJhbmdlc1swXS5iYXNlLAorCQkJCSAgIGluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKQEAgLTMyNiwxNCArMzMwLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGVmaWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwogCXVuc2lnbmVkIGludCBzaXplX3JlbWFwOwogCXVuc2lnbmVkIGludCBzaXplX3RvdGFsOwotCWludCByZXF1ZXN0X3N1Y2NlZWRlZCA9IDA7CiAKIAlpZiAoIXNjcmVlbl9pbmZvLmxmYl9kZXB0aCkKIAkJc2NyZWVuX2luZm8ubGZiX2RlcHRoID0gMzI7CkBAIC0zODcsNyArMzkwLDcgQEAKIAllZmlmYl9maXguc21lbV9sZW4gPSBzaXplX3JlbWFwOwogCiAJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihlZmlmYl9maXguc21lbV9zdGFydCwgc2l6ZV9yZW1hcCwgImVmaWZiIikpIHsKLQkJcmVxdWVzdF9zdWNjZWVkZWQgPSAxOworCQlyZXF1ZXN0X21lbV9zdWNjZWVkZWQgPSB0cnVlOwogCX0gZWxzZSB7CiAJCS8qIFdlIGNhbm5vdCBtYWtlIHRoaXMgZmF0YWwuIFNvbWV0aW1lcyB0aGlzIGNvbWVzIGZyb20gbWFnaWMKIAkJICAgc3BhY2VzIG91ciByZXNvdXJjZSBoYW5kbGVycyBzaW1wbHkgZG9uJ3Qga25vdyBhYm91dCAqLwpAQCAtNDEzLDcgKzQxNiw3IEBACiAJaW5mby0+YXBlcnR1cmVzLT5yYW5nZXNbMF0uYmFzZSA9IGVmaWZiX2ZpeC5zbWVtX3N0YXJ0OwogCWluZm8tPmFwZXJ0dXJlcy0+cmFuZ2VzWzBdLnNpemUgPSBzaXplX3JlbWFwOwogCi0JaW5mby0+c2NyZWVuX2Jhc2UgPSBpb3JlbWFwKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBlZmlmYl9maXguc21lbV9sZW4pOworCWluZm8tPnNjcmVlbl9iYXNlID0gaW9yZW1hcF93YyhlZmlmYl9maXguc21lbV9zdGFydCwgZWZpZmJfZml4LnNtZW1fbGVuKTsKIAlpZiAoIWluZm8tPnNjcmVlbl9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZWZpZmI6IGFib3J0LCBjYW5ub3QgaW9yZW1hcCB2aWRlbyBtZW1vcnkgIgogCQkJCSIweCV4IEAgMHglbHhcbiIsCkBAIC00OTEsMTMgKzQ5NCwxMiBAQAogZXJyX3JlbGVhc2VfZmI6CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIGVycl9yZWxlYXNlX21lbToKLQlpZiAocmVxdWVzdF9zdWNjZWVkZWQpCisJaWYgKHJlcXVlc3RfbWVtX3N1Y2NlZWRlZCkKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGVmaWZiX2ZpeC5zbWVtX3N0YXJ0LCBzaXplX3RvdGFsKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlZmlmYl9kcml2ZXIgPSB7Ci0JLnByb2JlCT0gZWZpZmJfcHJvYmUsCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSAiZWZpZmIiLAogCX0sCkBAIC01MjgsMTMgKzUzMCwyMSBAQAogCWlmICghc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGgpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlZmlmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWZpZmJfZGV2aWNlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCi0JaWYgKCFyZXQpIHsKLQkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZmlmYl9kZXZpY2UpOwotCQlpZiAocmV0KQotCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJLyoKKwkgKiBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbi4gIFdlIHdpbGwgaW50ZXJmZXJlCisJICogd2l0aCBhIHJlYWwgZHJpdmVyIGlmIHdlIGdldCByZXByb2JlZCwgc28gZG9uJ3QgYWxsb3cKKwkgKiBpdC4KKwkgKi8KKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmVmaWZiX2RyaXZlciwgZWZpZmJfcHJvYmUpOworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmVmaWZiX2RyaXZlcik7CisJCXJldHVybiByZXQ7CiAJfQorCiAJcmV0dXJuIHJldDsKIH0KIG1vZHVsZV9pbml0KGVmaWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jIGIvZHJpdmVycy92aWRlby9oZWN1YmFmYi5jCmluZGV4IDFiOTQ2NDMuLmZiZWYxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGVjdWJhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2hlY3ViYWZiLmMKQEAgLTIzMSwxMSArMjMxLDEwIEBACiAKIAl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpLzg7CiAKLQlpZiAoISh2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKSkpCisJdmlkZW9tZW1vcnkgPSB2emFsbG9jKHZpZGVvbWVtb3J5c2l6ZSk7CisJaWYgKCF2aWRlb21lbW9yeSkKIAkJcmV0dXJuIHJldHZhbDsKIAotCW1lbXNldCh2aWRlb21lbW9yeSwgMCwgdmlkZW9tZW1vcnlzaXplKTsKLQogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IGhlY3ViYWZiX3BhciksICZkZXYtPmRldik7CiAJaWYgKCFpbmZvKQogCQlnb3RvIGVycl9mYmFsbG9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGQyY2NmZDYuLmYxMzVkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTg1NiwxMCArODU2LDEwIEBACiAJCWRtYV9mcmVlX3dyaXRlY29tYmluZSgmcGRldi0+ZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAogCQkJZmJpLT5tYXBfZG1hKTsKIGZhaWxlZF9tYXA6Ci0JY2xrX3B1dChmYmktPmNsayk7Ci1mYWlsZWRfZ2V0Y2xvY2s6CiAJaW91bm1hcChmYmktPnJlZ3MpOwogZmFpbGVkX2lvcmVtYXA6CisJY2xrX3B1dChmYmktPmNsayk7CitmYWlsZWRfZ2V0Y2xvY2s6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiBmYWlsZWRfcmVxOgogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYyBiL2RyaXZlcnMvdmlkZW8vbWV0cm9ub21lZmIuYwppbmRleCBlZDY0ZWRmLi45N2Q0NWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21ldHJvbm9tZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tZXRyb25vbWVmYi5jCkBAIC02MjgsMTIgKzYyOCwxMCBAQAogCS8qIHdlIG5lZWQgdG8gYWRkIGEgc3BhcmUgcGFnZSBiZWNhdXNlIG91ciBjc3VtIGNhY2hpbmcgc2NoZW1lIHdhbGtzCiAJICogdG8gdGhlIGVuZCBvZiB0aGUgcGFnZSAqLwogCXZpZGVvbWVtb3J5c2l6ZSA9IFBBR0VfU0laRSArIChmdyAqIGZoKTsKLQl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwl2aWRlb21lbW9yeSA9IHZ6YWxsb2ModmlkZW9tZW1vcnlzaXplKTsKIAlpZiAoIXZpZGVvbWVtb3J5KQogCQlnb3RvIGVycl9mYl9yZWw7CiAKLQltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7Ci0KIAlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyIF9fZm9yY2UgX19pb21lbSAqKXZpZGVvbWVtb3J5OwogCWluZm8tPmZib3BzID0gJm1ldHJvbm9tZWZiX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKaW5kZXggNDhjM2VhOC4uY2IxNzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tb2RlZGIuYworKysgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCkBAIC0xMTI4LDMgKzExMjgsNCBAQAogRVhQT1JUX1NZTUJPTChmYl9maW5kX25lYXJlc3RfbW9kZSk7CiBFWFBPUlRfU1lNQk9MKGZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdCk7CiBFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbW9kZSk7CitFWFBPUlRfU1lNQk9MKGZiX2ZpbmRfbW9kZV9jdnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jIGIvZHJpdmVycy92aWRlby9weGExNjhmYi5jCmluZGV4IDM1ZjYxZGQuLmJiOTVlYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKQEAgLTYyMywxOSArNjIzLDIxIEBACiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gSU8gbWVtb3J5IGRlZmluZWRcbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZmFpbGVkX3B1dF9jbGs7CiAJfQogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcHhhMTY4ZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCWlmIChpbmZvID09IE5VTEwpIHsKLQkJY2xrX3B1dChjbGspOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfcHV0X2NsazsKIAl9CiAKIAkvKiBJbml0aWFsaXplIHByaXZhdGUgZGF0YSAqLwpAQCAtNjcxLDcgKzY3Myw3IEBACiAJZmJpLT5yZWdfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogCWlmIChmYmktPnJlZ19iYXNlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfaW5mbzsKIAl9CiAKIAkvKgpAQCAtNjgzLDcgKzY4NSw3IEBACiAJCQkJCQkmZmJpLT5mYl9zdGFydF9kbWEsIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5zY3JlZW5fYmFzZSA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbGVkOworCQlnb3RvIGZhaWxlZF9mcmVlX2luZm87CiAJfQogCiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZylmYmktPmZiX3N0YXJ0X2RtYTsKQEAgLTc3Miw4ICs3NzQsOSBAQAogZmFpbGVkX2ZyZWVfZmJtZW06CiAJZG1hX2ZyZWVfY29oZXJlbnQoZmJpLT5kZXYsIGluZm8tPmZpeC5zbWVtX2xlbiwKIAkJCWluZm8tPnNjcmVlbl9iYXNlLCBmYmktPmZiX3N0YXJ0X2RtYSk7Ci1mYWlsZWQ6CitmYWlsZWRfZnJlZV9pbmZvOgogCWtmcmVlKGluZm8pOworZmFpbGVkX3B1dF9jbGs6CiAJY2xrX3B1dChjbGspOwogCiAJZGV2X2VycigmcGRldi0+ZGV2LCAiZnJhbWUgYnVmZmVyIGRldmljZSBpbml0IGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYXZhZ2Uvc2F2YWdlZmJfZHJpdmVyLmMgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwppbmRleCAzYjdmMmY1Li40ZGU1NDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYwpAQCAtMjIzNyw2ICsyMjM3LDIyIEBACiAJCQkJICZpbmZvLT5tb2RlbGlzdCk7CiAjZW5kaWYKIAlpbmZvLT52YXIgPSBzYXZhZ2VmYl92YXI4MDB4NjAweDg7CisJLyogaWYgYSBwYW5lbCB3YXMgZGV0ZWN0ZWQsIGRlZmF1bHQgdG8gYSBDVlQgbW9kZSBpbnN0ZWFkICovCisJaWYgKHBhci0+U2F2YWdlUGFuZWxXaWR0aCkgeworCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGN2dF9tb2RlOworCisJCW1lbXNldCgmY3Z0X21vZGUsIDAsIHNpemVvZihjdnRfbW9kZSkpOworCQljdnRfbW9kZS54cmVzID0gcGFyLT5TYXZhZ2VQYW5lbFdpZHRoOworCQljdnRfbW9kZS55cmVzID0gcGFyLT5TYXZhZ2VQYW5lbEhlaWdodDsKKwkJY3Z0X21vZGUucmVmcmVzaCA9IDYwOworCQkvKiBGSVhNRTogaWYgd2Uga25vdyB0aGVyZSBpcyBvbmx5IHRoZSBwYW5lbAorCQkgKiB3ZSBjYW4gZW5hYmxlIHJlZHVjZWQgYmxhbmtpbmcgYXMgd2VsbCAqLworCQlpZiAoZmJfZmluZF9tb2RlX2N2dCgmY3Z0X21vZGUsIDAsIDApKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gQ1ZUIG1vZGUgZm91bmQgZm9yIHBhbmVsXG4iKTsKKwkJZWxzZSBpZiAoZmJfZmluZF9tb2RlKCZpbmZvLT52YXIsIGluZm8sIE5VTEwsIE5VTEwsIDAsCisJCQkJICAgICAgJmN2dF9tb2RlLCAwKSAhPSAzKQorCQkJaW5mby0+dmFyID0gc2F2YWdlZmJfdmFyODAweDYwMHg4OworCX0KIAogCWlmIChtb2RlX29wdGlvbikgewogCQlmYl9maW5kX21vZGUoJmluZm8tPnZhciwgaW5mbywgbW9kZV9vcHRpb24sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDQwNGMwM2IuLjAxOWRiZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC00NzAsNyArNDcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgYnBwID0gMDsKIAl1bnNpZ25lZCBsb25nIGxkZGRzcjsKLQlpbnQgaywgbTsKKwlpbnQgaywgbSwgcmV0OwogCiAJLyogZW5hYmxlIGNsb2NrcyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSAqLwogCWZvciAoayA9IDA7IGsgPCBBUlJBWV9TSVpFKHByaXYtPmNoKTsgaysrKSB7CkBAIC01NDAsNyArNTQwLDcgQEAKIAogCQlib2FyZF9jZmcgPSAmY2gtPmNmZy5ib2FyZF9jZmc7CiAJCWlmIChib2FyZF9jZmctPnNldHVwX3N5cykgewotCQkJaW50IHJldCA9IGJvYXJkX2NmZy0+c2V0dXBfc3lzKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwKKwkJCXJldCA9IGJvYXJkX2NmZy0+c2V0dXBfc3lzKGJvYXJkX2NmZy0+Ym9hcmRfZGF0YSwKIAkJCQkJCWNoLCAmc2hfbW9iaWxlX2xjZGNfc3lzX2J1c19vcHMpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwppbmRleCA1M2IyYzVhLi4zMDVjOTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwpAQCAtMTI2NSw5ICsxMjY1LDExIEBACiAKIHN0YXRpYyB2b2lkIHZnYTE2ZmJfZGVzdHJveShzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoaW5mby0+ZGV2aWNlLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwogCWlvdW5tYXAoaW5mby0+c2NyZWVuX2Jhc2UpOwogCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CiAJLyogWFhYIHVuc2hhcmUgVkdBIHJlZ2lvbnMgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwppbmRleCBhMjAyMThjLi5iZWFjNTJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCisrKyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwpAQCAtMzk1LDEwICszOTUsOSBAQAogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5kaXJ0eV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaW5mby0+cmVzaXplX2xvY2spOwogCi0JaW5mby0+ZmIgPSB2bWFsbG9jKGZiX3NpemUpOworCWluZm8tPmZiID0gdnphbGxvYyhmYl9zaXplKTsKIAlpZiAoaW5mby0+ZmIgPT0gTlVMTCkKIAkJZ290byBlcnJvcl9ub21lbTsKLQltZW1zZXQoaW5mby0+ZmIsIDAsIGZiX3NpemUpOwogCiAJaW5mby0+bnJfcGFnZXMgPSAoZmJfc2l6ZSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2V2ZW50cy5jIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKaW5kZXggM2ZmODIyYi4uNTUzZGE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZXZlbnRzLmMKKysrIGIvZHJpdmVycy94ZW4vZXZlbnRzLmMKQEAgLTYyNiw2ICs2MjYsOSBAQAogICoKICAqIE5vdGU6IFdlIGRvbid0IGFzc2lnbiBhbiBldmVudCBjaGFubmVsIHVudGlsIHRoZSBpcnEgYWN0dWFsbHkgc3RhcnRlZAogICogdXAuICBSZXR1cm4gYW4gZXhpc3RpbmcgaXJxIGlmIHdlJ3ZlIGFscmVhZHkgZ290IG9uZSBmb3IgdGhlIGdzaS4KKyAqCisgKiBTaGFyZWFibGUgaW1wbGllcyBsZXZlbCB0cmlnZ2VyZWQsIG5vdCBzaGFyZWFibGUgaW1wbGllcyBlZGdlCisgKiB0cmlnZ2VyZWQgaGVyZS4KICAqLwogaW50IHhlbl9iaW5kX3BpcnFfZ3NpX3RvX2lycSh1bnNpZ25lZCBnc2ksCiAJCQkgICAgIHVuc2lnbmVkIHBpcnEsIGludCBzaGFyZWFibGUsIGNoYXIgKm5hbWUpCkBAIC02NjQsMTYgKzY2NywxMyBAQAogCiAJcGlycV9xdWVyeV91bm1hc2soaXJxKTsKIAkvKiBXZSB0cnkgdG8gdXNlIHRoZSBoYW5kbGVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNlbWFudGljIGZvciB0aGUKLQkgKiB0eXBlIG9mIGludGVycnVwdDogaWYgdGhlIGludGVycnVwdCBkb2Vzbid0IG5lZWQgYW4gZW9pCi0JICogKHBpcnFfbmVlZHNfZW9pIHJldHVybnMgZmFsc2UpLCB3ZSB0cmVhdCBpdCBsaWtlIGFuIGVkZ2UKLQkgKiB0cmlnZ2VyZWQgaW50ZXJydXB0IHNvIHdlIHVzZSBoYW5kbGVfZWRnZV9pcnEuCi0JICogQXMgYSBtYXR0ZXIgb2YgZmFjdCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nCi0JICogcGh5c2ljYWwgaW50ZXJydXB0IGlzIGVkZ2UgdHJpZ2dlcmVkIG9yIGFuIG1zaS4KKwkgKiB0eXBlIG9mIGludGVycnVwdDogaWYgdGhlIGludGVycnVwdCBpcyBhbiBlZGdlIHRyaWdnZXJlZAorCSAqIGludGVycnVwdCB3ZSB1c2UgaGFuZGxlX2VkZ2VfaXJxLgogCSAqCi0JICogT24gdGhlIG90aGVyIGhhbmQgaWYgdGhlIGludGVycnVwdCBuZWVkcyBhbiBlb2kgKHBpcnFfbmVlZHNfZW9pCi0JICogcmV0dXJucyB0cnVlKSB3ZSB0cmVhdCBpdCBsaWtlIGEgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdCBzbyB3ZQotCSAqIHVzZSBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCisJICogT24gdGhlIG90aGVyIGhhbmQgaWYgdGhlIGludGVycnVwdCBpcyBsZXZlbCB0cmlnZ2VyZWQgd2UgdXNlCisJICogaGFuZGxlX2Zhc3Rlb2lfaXJxIGxpa2UgdGhlIG5hdGl2ZSBjb2RlIGRvZXMgZm9yIHRoaXMga2luZCBvZgogCSAqIGludGVycnVwdHMuCisJICoKIAkgKiBEZXBlbmRpbmcgb24gdGhlIFhlbiB2ZXJzaW9uLCBwaXJxX25lZWRzX2VvaSBtaWdodCByZXR1cm4gdHJ1ZQogCSAqIG5vdCBvbmx5IGZvciBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBidXQgZm9yIGVkZ2UgdHJpZ2dlcmVkCiAJICogaW50ZXJydXB0cyB0b28uIEluIGFueSBjYXNlIFhlbiBhbHdheXMgaG9ub3JzIHRoZSBlb2kgbWVjaGFuaXNtLApAQCAtNjgxLDcgKzY4MSw3IEBACiAJICogaGFzbid0IHJlY2VpdmVkIGFuIGVvaSB5ZXQuIFRoZXJlZm9yZSB1c2luZyB0aGUgZmFzdGVvaSBoYW5kbGVyCiAJICogaXMgdGhlIHJpZ2h0IGNob2ljZSBlaXRoZXIgd2F5LgogCSAqLwotCWlmIChwaXJxX25lZWRzX2VvaShpcnEpKQorCWlmIChzaGFyZWFibGUpCiAJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnhlbl9waXJxX2NoaXAsCiAJCQkJaGFuZGxlX2Zhc3Rlb2lfaXJxLCBuYW1lKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jIGIvZHJpdmVycy94ZW4vc3dpb3RsYi14ZW4uYwppbmRleCA2NWVhMjFhLi42ZThjMTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9zd2lvdGxiLXhlbi5jCisrKyBiL2RyaXZlcnMveGVuL3N3aW90bGIteGVuLmMKQEAgLTE0Nyw5ICsxNDcsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGJ5dGVzOwogCWludCByYzsKKwl1bnNpZ25lZCBsb25nIG5yX3RibDsKIAotCXhlbl9pb190bGJfbnNsYWJzID0gKDY0ICogMTAyNCAqIDEwMjQgPj4gSU9fVExCX1NISUZUKTsKLQl4ZW5faW9fdGxiX25zbGFicyA9IEFMSUdOKHhlbl9pb190bGJfbnNsYWJzLCBJT19UTEJfU0VHU0laRSk7CisJbnJfdGJsID0gc3dpb2x0Yl9ucl90YmwoKTsKKwlpZiAobnJfdGJsKQorCQl4ZW5faW9fdGxiX25zbGFicyA9IG5yX3RibDsKKwllbHNlIHsKKwkJeGVuX2lvX3RsYl9uc2xhYnMgPSAoNjQgKiAxMDI0ICogMTAyNCA+PiBJT19UTEJfU0hJRlQpOworCQl4ZW5faW9fdGxiX25zbGFicyA9IEFMSUdOKHhlbl9pb190bGJfbnNsYWJzLCBJT19UTEJfU0VHU0laRSk7CisJfQogCiAJYnl0ZXMgPSB4ZW5faW9fdGxiX25zbGFicyA8PCBJT19UTEJfU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmMgYi9mcy9idHJmcy9jdHJlZS5jCmluZGV4IGQ4NDA4OTMuLjJlNjY3ODYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmMKKysrIGIvZnMvYnRyZnMvY3RyZWUuYwpAQCAtMTIyOCw2ICsxMjI4LDcgQEAKIAl1MzIgbnI7CiAJdTMyIGJsb2Nrc2l6ZTsKIAl1MzIgbnNjYW4gPSAwOworCWJvb2wgbWFwID0gdHJ1ZTsKIAogCWlmIChsZXZlbCAhPSAxKQogCQlyZXR1cm47CkBAIC0xMjQ5LDggKzEyNTAsMTEgQEAKIAogCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhub2RlKTsKIAluciA9IHNsb3Q7CisJaWYgKG5vZGUtPm1hcF90b2tlbiB8fCBwYXRoLT5za2lwX2xvY2tpbmcpCisJCW1hcCA9IGZhbHNlOworCiAJd2hpbGUgKDEpIHsKLQkJaWYgKCFub2RlLT5tYXBfdG9rZW4pIHsKKwkJaWYgKG1hcCAmJiAhbm9kZS0+bWFwX3Rva2VuKSB7CiAJCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGJ0cmZzX25vZGVfa2V5X3B0cl9vZmZzZXQobnIpOwogCQkJbWFwX3ByaXZhdGVfZXh0ZW50X2J1ZmZlcihub2RlLCBvZmZzZXQsCiAJCQkJCQkgIHNpemVvZihzdHJ1Y3QgYnRyZnNfa2V5X3B0ciksCkBAIC0xMjc3LDcgKzEyODEsNyBAQAogCQlpZiAoKHNlYXJjaCA8PSB0YXJnZXQgJiYgdGFyZ2V0IC0gc2VhcmNoIDw9IDY1NTM2KSB8fAogCQkgICAgKHNlYXJjaCA+IHRhcmdldCAmJiBzZWFyY2ggLSB0YXJnZXQgPD0gNjU1MzYpKSB7CiAJCQlnZW4gPSBidHJmc19ub2RlX3B0cl9nZW5lcmF0aW9uKG5vZGUsIG5yKTsKLQkJCWlmIChub2RlLT5tYXBfdG9rZW4pIHsKKwkJCWlmIChtYXAgJiYgbm9kZS0+bWFwX3Rva2VuKSB7CiAJCQkJdW5tYXBfZXh0ZW50X2J1ZmZlcihub2RlLCBub2RlLT5tYXBfdG9rZW4sCiAJCQkJCQkgICAgS01fVVNFUjEpOwogCQkJCW5vZGUtPm1hcF90b2tlbiA9IE5VTEw7CkBAIC0xMjg5LDcgKzEyOTMsNyBAQAogCQlpZiAoKG5yZWFkID4gNjU1MzYgfHwgbnNjYW4gPiAzMikpCiAJCQlicmVhazsKIAl9Ci0JaWYgKG5vZGUtPm1hcF90b2tlbikgeworCWlmIChtYXAgJiYgbm9kZS0+bWFwX3Rva2VuKSB7CiAJCXVubWFwX2V4dGVudF9idWZmZXIobm9kZSwgbm9kZS0+bWFwX3Rva2VuLCBLTV9VU0VSMSk7CiAJCW5vZGUtPm1hcF90b2tlbiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IGEyMDNkMzYuLjlmNjhjNjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTE2NjgsOCArMTY2OCw2IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZnNfaW5mby0+c2NydWJfcGF1c2Vfd2FpdCk7CiAJaW5pdF9yd3NlbSgmZnNfaW5mby0+c2NydWJfc3VwZXJfbG9jayk7CiAJZnNfaW5mby0+c2NydWJfd29ya2Vyc19yZWZjbnQgPSAwOwotCWJ0cmZzX2luaXRfd29ya2VycygmZnNfaW5mby0+c2NydWJfd29ya2VycywgInNjcnViIiwKLQkJCSAgIGZzX2luZm8tPnRocmVhZF9wb29sX3NpemUsICZmc19pbmZvLT5nZW5lcmljX3dvcmtlcik7CiAKIAlzYi0+c19ibG9ja3NpemUgPSA0MDk2OwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gYmxrc2l6ZV9iaXRzKDQwOTYpOwpAQCAtMjkxMSw5ICsyOTA5LDggQEAKIAogCUlOSVRfTElTVF9IRUFEKCZzcGxpY2UpOwogCi0JbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKLQogCXNwaW5fbG9jaygmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfaW5vZGVzLCAmc3BsaWNlKTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmc3BsaWNlKSkgewogCQlidHJmc19pbm9kZSA9IGxpc3RfZW50cnkoc3BsaWNlLm5leHQsIHN0cnVjdCBidHJmc19pbm9kZSwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCmluZGV4IDViOWI2YjYuLmI0MmVmYzIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwpAQCAtMzA4OSw2ICszMDg5LDEzIEBACiAJCQl9CiAJCQlnb3RvIGFnYWluOwogCQl9CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBsZXNzIHBpbm5lZCBieXRlcyB0aGFuIHdlIHdhbnQgdG8gYWxsb2NhdGUgdGhlbgorCQkgKiBkb24ndCBib3RoZXIgY29tbWl0dGluZyB0aGUgdHJhbnNhY3Rpb24sIGl0IHdvbid0IGhlbHAgdXMuCisJCSAqLworCQlpZiAoZGF0YV9zaW5mby0+Ynl0ZXNfcGlubmVkIDwgYnl0ZXMpCisJCQljb21taXR0ZWQgPSAxOwogCQlzcGluX3VubG9jaygmZGF0YV9zaW5mby0+bG9jayk7CiAKIAkJLyogY29tbWl0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGFuZCB0cnkgYWdhaW4gKi8KQEAgLTUyMTEsOSArNTIxOCw3IEBACiAJICogTE9PUF9OT19FTVBUWV9TSVpFLCBzZXQgZW1wdHlfc2l6ZSBhbmQgZW1wdHlfY2x1c3RlciB0byAwIGFuZCB0cnkKIAkgKgkJCWFnYWluCiAJICovCi0JaWYgKCFpbnMtPm9iamVjdGlkICYmIGxvb3AgPCBMT09QX05PX0VNUFRZX1NJWkUgJiYKLQkgICAgKGZvdW5kX3VuY2FjaGVkX2JnIHx8IGVtcHR5X3NpemUgfHwgZW1wdHlfY2x1c3RlciB8fAotCSAgICAgYWxsb3dlZF9jaHVua19hbGxvYykpIHsKKwlpZiAoIWlucy0+b2JqZWN0aWQgJiYgbG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewogCQlpbmRleCA9IDA7CiAJCWlmIChsb29wID09IExPT1BfRklORF9JREVBTCAmJiBmb3VuZF91bmNhY2hlZF9iZykgewogCQkJZm91bmRfdW5jYWNoZWRfYmcgPSBmYWxzZTsKQEAgLTUyNTMsMzIgKzUyNTgsMzYgQEAKIAkJCWdvdG8gc2VhcmNoOwogCQl9CiAKLQkJaWYgKGxvb3AgPCBMT09QX0NBQ0hJTkdfV0FJVCkgewotCQkJbG9vcCsrOwotCQkJZ290byBzZWFyY2g7Ci0JCX0KKwkJbG9vcCsrOwogCiAJCWlmIChsb29wID09IExPT1BfQUxMT0NfQ0hVTkspIHsKKwkJICAgICAgIGlmIChhbGxvd2VkX2NodW5rX2FsbG9jKSB7CisJCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCisJCQkJCQkgICAgIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKKwkJCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7CisJCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7CisJCQkJaWYgKHJldCA9PSAxKQorCQkJCQlkb25lX2NodW5rX2FsbG9jID0gMTsKKwkJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKKwkJCQkgICBzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9PQorCQkJCSAgIENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7CisJCQkJc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19MSU1JVEVEOworCQkJfQorCisJCSAgICAgICAvKgorCQkJKiBXZSBkaWRuJ3QgYWxsb2NhdGUgYSBjaHVuaywgZ28gYWhlYWQgYW5kIGRyb3AgdGhlCisJCQkqIGVtcHR5IHNpemUgYW5kIGxvb3AgYWdhaW4uCisJCQkqLworCQkgICAgICAgaWYgKCFkb25lX2NodW5rX2FsbG9jKQorCQkJICAgICAgIGxvb3AgPSBMT09QX05PX0VNUFRZX1NJWkU7CisJCX0KKworCQlpZiAobG9vcCA9PSBMT09QX05PX0VNUFRZX1NJWkUpIHsKIAkJCWVtcHR5X3NpemUgPSAwOwogCQkJZW1wdHlfY2x1c3RlciA9IDA7CiAJCX0KIAotCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgewotCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLAotCQkJCQkgICAgIENIVU5LX0FMTE9DX0xJTUlURUQpOwotCQkJYWxsb3dlZF9jaHVua19hbGxvYyA9IDA7Ci0JCQlkb25lX2NodW5rX2FsbG9jID0gMTsKLQkJfSBlbHNlIGlmICghZG9uZV9jaHVua19hbGxvYyAmJgotCQkJICAgc3BhY2VfaW5mby0+Zm9yY2VfYWxsb2MgPT0gQ0hVTktfQUxMT0NfTk9fRk9SQ0UpIHsKLQkJCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTElNSVRFRDsKLQkJfQotCi0JCWlmIChsb29wIDwgTE9PUF9OT19FTVBUWV9TSVpFKSB7Ci0JCQlsb29wKys7Ci0JCQlnb3RvIHNlYXJjaDsKLQkJfQotCQlyZXQgPSAtRU5PU1BDOworCQlnb3RvIHNlYXJjaDsKIAl9IGVsc2UgaWYgKCFpbnMtPm9iamVjdGlkKSB7CiAJCXJldCA9IC1FTk9TUEM7CiAJfSBlbHNlIGlmIChpbnMtPm9iamVjdGlkKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uaCBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCmluZGV4IDRlODQ0NWEuLmExMWE5MmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5oCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5oCkBAIC0xMjYsOSArMTI2LDkgQEAKIAl1bnNpZ25lZCBsb25nIG1hcF9sZW47CiAJc3RydWN0IHBhZ2UgKmZpcnN0X3BhZ2U7CiAJdW5zaWduZWQgbG9uZyBiZmxhZ3M7Ci0JYXRvbWljX3QgcmVmczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxlYWtfbGlzdDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisJYXRvbWljX3QgcmVmczsKIAogCS8qIHRoZSBzcGlubG9jayBpcyB1c2VkIHRvIHByb3RlY3QgbW9zdCBvcGVyYXRpb25zICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCmluZGV4IGFkMTQ0NzMuLjlmOTg1YTQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYworKysgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXBnb2ZmX3QgaW5kZXggPSAwOwogCXVuc2lnbmVkIGxvbmcgZmlyc3RfcGFnZV9vZmZzZXQ7CiAJaW50IG51bV9jaGVja3N1bXM7Ci0JaW50IHJldCA9IDAsIHJldDI7CisJaW50IHJldCA9IDA7CiAKIAlJTklUX0xJU1RfSEVBRCgmYml0bWFwcyk7CiAKQEAgLTQyMSwxMSArNDIxLDEwIEBACiAJCQkJCWdvdG8gZnJlZV9jYWNoZTsKIAkJCQl9CiAJCQkJc3Bpbl9sb2NrKCZjdGwtPnRyZWVfbG9jayk7Ci0JCQkJcmV0MiA9IGxpbmtfZnJlZV9zcGFjZShjdGwsIGUpOworCQkJCXJldCA9IGxpbmtfZnJlZV9zcGFjZShjdGwsIGUpOwogCQkJCWN0bC0+dG90YWxfYml0bWFwcysrOwogCQkJCWN0bC0+b3AtPnJlY2FsY190aHJlc2hvbGRzKGN0bCk7CiAJCQkJc3Bpbl91bmxvY2soJmN0bC0+dHJlZV9sb2NrKTsKLQkJCQlsaXN0X2FkZF90YWlsKCZlLT5saXN0LCAmYml0bWFwcyk7CiAJCQkJaWYgKHJldCkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgIkR1cGxpY2F0ZSBlbnRyaWVzIGluICIKIAkJCQkJICAgICAgICJmcmVlIHNwYWNlIGNhY2hlLCBkdW1waW5nXG4iKTsKQEAgLTQzNCw2ICs0MzMsNyBAQAogCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCQkJCWdvdG8gZnJlZV9jYWNoZTsKIAkJCQl9CisJCQkJbGlzdF9hZGRfdGFpbCgmZS0+bGlzdCwgJmJpdG1hcHMpOwogCQkJfQogCiAJCQludW1fZW50cmllcy0tOwpAQCAtMTQxNyw2ICsxNDE3LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgYWRkX2J5dGVzX3RvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKKwkJCSAgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbywgdTY0IG9mZnNldCwKKwkJCSAgICAgICB1NjQgYnl0ZXMpCit7CisJdTY0IGJ5dGVzX3RvX3NldCA9IDA7CisJdTY0IGVuZDsKKworCWVuZCA9IGluZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7CisKKwlieXRlc190b19zZXQgPSBtaW4oZW5kIC0gb2Zmc2V0LCBieXRlcyk7CisKKwliaXRtYXBfc2V0X2JpdHMoY3RsLCBpbmZvLCBvZmZzZXQsIGJ5dGVzX3RvX3NldCk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fc2V0OworCit9CisKIHN0YXRpYyBib29sIHVzZV9iaXRtYXAoc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwsCiAJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewpAQCAtMTQ1MywxMiArMTQ3MCwxOCBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKKwkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAorCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCit9OworCiBzdGF0aWMgaW50IGluc2VydF9pbnRvX2JpdG1hcChzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCwKIAkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwID0gTlVMTDsKIAlpbnQgYWRkZWQgPSAwOwotCXU2NCBieXRlcywgb2Zmc2V0LCBlbmQ7CisJdTY0IGJ5dGVzLCBvZmZzZXQsIGJ5dGVzX2FkZGVkOwogCWludCByZXQ7CiAKIAlieXRlcyA9IGluZm8tPmJ5dGVzOwpAQCAtMTQ2Nyw3ICsxNDkwLDQ5IEBACiAJaWYgKCFjdGwtPm9wLT51c2VfYml0bWFwKGN0bCwgaW5mbykpCiAJCXJldHVybiAwOwogCisJaWYgKGN0bC0+b3AgPT0gJmZyZWVfc3BhY2Vfb3ApCisJCWJsb2NrX2dyb3VwID0gY3RsLT5wcml2YXRlOwogYWdhaW46CisJLyoKKwkgKiBTaW5jZSB3ZSBsaW5rIGJpdG1hcHMgcmlnaHQgaW50byB0aGUgY2x1c3RlciB3ZSBuZWVkIHRvIHNlZSBpZiB3ZQorCSAqIGhhdmUgYSBjbHVzdGVyIGhlcmUsIGFuZCBpZiBzbyBhbmQgaXQgaGFzIG91ciBiaXRtYXAgd2UgbmVlZCB0byBhZGQKKwkgKiB0aGUgZnJlZSBzcGFjZSB0byB0aGF0IGJpdG1hcC4KKwkgKi8KKwlpZiAoYmxvY2tfZ3JvdXAgJiYgIWxpc3RfZW1wdHkoJmJsb2NrX2dyb3VwLT5jbHVzdGVyX2xpc3QpKSB7CisJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXI7CisJCXN0cnVjdCByYl9ub2RlICpub2RlOworCQlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnk7CisKKwkJY2x1c3RlciA9IGxpc3RfZW50cnkoYmxvY2tfZ3JvdXAtPmNsdXN0ZXJfbGlzdC5uZXh0LAorCQkJCSAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciwKKwkJCQkgICAgIGJsb2NrX2dyb3VwX2xpc3QpOworCQlzcGluX2xvY2soJmNsdXN0ZXItPmxvY2spOworCQlub2RlID0gcmJfZmlyc3QoJmNsdXN0ZXItPnJvb3QpOworCQlpZiAoIW5vZGUpIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlpZiAoIWVudHJ5LT5iaXRtYXApIHsKKwkJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJCWdvdG8gbm9fY2x1c3Rlcl9iaXRtYXA7CisJCX0KKworCQlpZiAoZW50cnktPm9mZnNldCA9PSBvZmZzZXRfdG9fYml0bWFwKGN0bCwgb2Zmc2V0KSkgeworCQkJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgZW50cnksCisJCQkJCQkJICBvZmZzZXQsIGJ5dGVzKTsKKwkJCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCQkJb2Zmc2V0ICs9IGJ5dGVzX2FkZGVkOworCQl9CisJCXNwaW5fdW5sb2NrKCZjbHVzdGVyLT5sb2NrKTsKKwkJaWYgKCFieXRlcykgeworCQkJcmV0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCitub19jbHVzdGVyX2JpdG1hcDoKIAliaXRtYXBfaW5mbyA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLAogCQkJCQkgMSwgMCk7CiAJaWYgKCFiaXRtYXBfaW5mbykgewpAQCAtMTQ3NSwxOSArMTU0MCwxMCBAQAogCQlnb3RvIG5ld19iaXRtYXA7CiAJfQogCi0JZW5kID0gYml0bWFwX2luZm8tPm9mZnNldCArICh1NjQpKEJJVFNfUEVSX0JJVE1BUCAqIGN0bC0+dW5pdCk7Ci0KLQlpZiAob2Zmc2V0ID49IGJpdG1hcF9pbmZvLT5vZmZzZXQgJiYgb2Zmc2V0ICsgYnl0ZXMgPiBlbmQpIHsKLQkJYml0bWFwX3NldF9iaXRzKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgZW5kIC0gb2Zmc2V0KTsKLQkJYnl0ZXMgLT0gZW5kIC0gb2Zmc2V0OwotCQlvZmZzZXQgPSBlbmQ7Ci0JCWFkZGVkID0gMDsKLQl9IGVsc2UgaWYgKG9mZnNldCA+PSBiaXRtYXBfaW5mby0+b2Zmc2V0ICYmIG9mZnNldCArIGJ5dGVzIDw9IGVuZCkgewotCQliaXRtYXBfc2V0X2JpdHMoY3RsLCBiaXRtYXBfaW5mbywgb2Zmc2V0LCBieXRlcyk7Ci0JCWJ5dGVzID0gMDsKLQl9IGVsc2UgewotCQlCVUcoKTsKLQl9CisJYnl0ZXNfYWRkZWQgPSBhZGRfYnl0ZXNfdG9fYml0bWFwKGN0bCwgYml0bWFwX2luZm8sIG9mZnNldCwgYnl0ZXMpOworCWJ5dGVzIC09IGJ5dGVzX2FkZGVkOworCW9mZnNldCArPSBieXRlc19hZGRlZDsKKwlhZGRlZCA9IDA7CiAKIAlpZiAoIWJ5dGVzKSB7CiAJCXJldCA9IDE7CkBAIC0xNzY2LDExICsxODIyLDYgQEAKIAkgICAgICAgIlxuIiwgY291bnQpOwogfQogCi1zdGF0aWMgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2Vfb3AgZnJlZV9zcGFjZV9vcCA9IHsKLQkucmVjYWxjX3RocmVzaG9sZHMJPSByZWNhbGN1bGF0ZV90aHJlc2hvbGRzLAotCS51c2VfYml0bWFwCQk9IHVzZV9iaXRtYXAsCi19OwotCiB2b2lkIGJ0cmZzX2luaXRfZnJlZV9zcGFjZV9jdGwoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCkKIHsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZV9jdGwgKmN0bCA9IGJsb2NrX2dyb3VwLT5mcmVlX3NwYWNlX2N0bDsKQEAgLTIxNDIsOSArMjE5MywxMSBAQAogLyoKICAqIFRoaXMgc2VhcmNoZXMgdGhlIGJsb2NrIGdyb3VwIGZvciBqdXN0IGV4dGVudHMgdG8gZmlsbCB0aGUgY2x1c3RlciB3aXRoLgogICovCi1zdGF0aWMgaW50IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCi0JCQkJICAgc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKLQkJCQkgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBtaW5fYnl0ZXMpCitzdGF0aWMgbm9pbmxpbmUgaW50CitzZXR1cF9jbHVzdGVyX25vX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAorCQkJc3RydWN0IGJ0cmZzX2ZyZWVfY2x1c3RlciAqY2x1c3RlciwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJCXU2NCBtaW5fYnl0ZXMpCiB7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2VfY3RsICpjdGwgPSBibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9jdGw7CiAJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmZpcnN0ID0gTlVMTDsKQEAgLTIxNjYsNiArMjIxOSw4IEBACiAJICogZXh0ZW50IGVudHJ5LgogCSAqLwogCXdoaWxlIChlbnRyeS0+Yml0bWFwKSB7CisJCWlmIChsaXN0X2VtcHR5KCZlbnRyeS0+bGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCW5vZGUgPSByYl9uZXh0KCZlbnRyeS0+b2Zmc2V0X2luZGV4KTsKIAkJaWYgKCFub2RlKQogCQkJcmV0dXJuIC1FTk9TUEM7CkBAIC0yMTg1LDggKzIyNDAsMTIgQEAKIAkJCXJldHVybiAtRU5PU1BDOwogCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOwogCi0JCWlmIChlbnRyeS0+Yml0bWFwKQorCQlpZiAoZW50cnktPmJpdG1hcCkgeworCQkJaWYgKGxpc3RfZW1wdHkoJmVudHJ5LT5saXN0KSkKKwkJCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgYml0bWFwcyk7CiAJCQljb250aW51ZTsKKwkJfQorCiAJCS8qCiAJCSAqIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBlbXB0eSBzaXplIGFuZCB0aGUgd2luZG93IGlzCiAJCSAqIHZlcnkgbGFyZ2UuICByZXNldCBhbmQgdHJ5IGFnYWluCkBAIC0yMjM4LDkgKzIyOTcsMTEgQEAKICAqIFRoaXMgc3BlY2lmaWNhbGx5IGxvb2tzIGZvciBiaXRtYXBzIHRoYXQgbWF5IHdvcmsgaW4gdGhlIGNsdXN0ZXIsIHdlIGFzc3VtZQogICogdGhhdCB3ZSBoYXZlIGFscmVhZHkgZmFpbGVkIHRvIGZpbmQgZXh0ZW50cyB0aGF0IHdpbGwgd29yay4KICAqLwotc3RhdGljIGludCBzZXR1cF9jbHVzdGVyX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJCXN0cnVjdCBidHJmc19mcmVlX2NsdXN0ZXIgKmNsdXN0ZXIsCi0JCQkJdTY0IG9mZnNldCwgdTY0IGJ5dGVzLCB1NjQgbWluX2J5dGVzKQorc3RhdGljIG5vaW5saW5lIGludAorc2V0dXBfY2x1c3Rlcl9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyLAorCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJpdG1hcHMsIHU2NCBvZmZzZXQsIHU2NCBieXRlcywKKwkJICAgICB1NjQgbWluX2J5dGVzKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOwogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeTsKQEAgLTIyNTAsMTAgKzIzMTEsMzkgQEAKIAlpZiAoY3RsLT50b3RhbF9iaXRtYXBzID09IDApCiAJCXJldHVybiAtRU5PU1BDOwogCisJLyoKKwkgKiBGaXJzdCBjaGVjayBvdXIgY2FjaGVkIGxpc3Qgb2YgYml0bWFwcyBhbmQgc2VlIGlmIHRoZXJlIGlzIGFuIGVudHJ5CisJICogaGVyZSB0aGF0IHdpbGwgd29yay4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBiaXRtYXBzLCBsaXN0KSB7CisJCWlmIChlbnRyeS0+Ynl0ZXMgPCBtaW5fYnl0ZXMpCisJCQljb250aW51ZTsKKwkJcmV0ID0gYnRyZnNfYml0bWFwX2NsdXN0ZXIoYmxvY2tfZ3JvdXAsIGVudHJ5LCBjbHVzdGVyLCBvZmZzZXQsCisJCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlpZiAoIXJldCkKKwkJCXJldHVybiAwOworCX0KKworCS8qCisJICogSWYgd2UgZG8gaGF2ZSBlbnRyaWVzIG9uIG91ciBsaXN0IGFuZCB3ZSBhcmUgaGVyZSB0aGVuIHdlIGRpZG4ndCBmaW5kCisJICogYW55dGhpbmcsIHNvIGdvIGFoZWFkIGFuZCBnZXQgdGhlIG5leHQgZW50cnkgYWZ0ZXIgdGhlIGxhc3QgZW50cnkgaW4KKwkgKiB0aGlzIGxpc3QgYW5kIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbSB0aGVyZS4KKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoYml0bWFwcykpIHsKKwkJZW50cnkgPSBsaXN0X2VudHJ5KGJpdG1hcHMtPnByZXYsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLAorCQkJCSAgIGxpc3QpOworCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CisJCWlmICghbm9kZSkKKwkJCXJldHVybiAtRU5PU1BDOworCQllbnRyeSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlLCBvZmZzZXRfaW5kZXgpOworCQlnb3RvIHNlYXJjaDsKKwl9CisKIAllbnRyeSA9IHRyZWVfc2VhcmNoX29mZnNldChjdGwsIG9mZnNldF90b19iaXRtYXAoY3RsLCBvZmZzZXQpLCAwLCAxKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT1NQQzsKIAorc2VhcmNoOgogCW5vZGUgPSAmZW50cnktPm9mZnNldF9pbmRleDsKIAlkbyB7CiAJCWVudHJ5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7CkBAIC0yMjg0LDYgKzIzNzQsOCBAQAogCQkJICAgICB1NjQgb2Zmc2V0LCB1NjQgYnl0ZXMsIHU2NCBlbXB0eV9zaXplKQogewogCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlX2N0bCAqY3RsID0gYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2VfY3RsOworCXN0cnVjdCBsaXN0X2hlYWQgYml0bWFwczsKKwlzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqZW50cnksICp0bXA7CiAJdTY0IG1pbl9ieXRlczsKIAlpbnQgcmV0OwogCkBAIC0yMzIyLDExICsyNDE0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsIGJ5dGVzLAotCQkJCSAgICAgIG1pbl9ieXRlcyk7CisJSU5JVF9MSVNUX0hFQUQoJmJpdG1hcHMpOworCXJldCA9IHNldHVwX2NsdXN0ZXJfbm9fYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCAmYml0bWFwcywgb2Zmc2V0LAorCQkJCSAgICAgIGJ5dGVzLCBtaW5fYnl0ZXMpOwogCWlmIChyZXQpCi0JCXJldCA9IHNldHVwX2NsdXN0ZXJfYml0bWFwKGJsb2NrX2dyb3VwLCBjbHVzdGVyLCBvZmZzZXQsCi0JCQkJCSAgIGJ5dGVzLCBtaW5fYnl0ZXMpOworCQlyZXQgPSBzZXR1cF9jbHVzdGVyX2JpdG1hcChibG9ja19ncm91cCwgY2x1c3RlciwgJmJpdG1hcHMsCisJCQkJCSAgIG9mZnNldCwgYnl0ZXMsIG1pbl9ieXRlcyk7CisKKwkvKiBDbGVhciBvdXIgdGVtcG9yYXJ5IGxpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmJpdG1hcHMsIGxpc3QpCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5saXN0KTsKIAogCWlmICghcmV0KSB7CiAJCWF0b21pY19pbmMoJmJsb2NrX2dyb3VwLT5jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pbm9kZS5jIGIvZnMvYnRyZnMvaW5vZGUuYwppbmRleCBlYmY5NWY3Li43NTFkZGY4IDEwMDY0NAotLS0gYS9mcy9idHJmcy9pbm9kZS5jCisrKyBiL2ZzL2J0cmZzL2lub2RlLmMKQEAgLTE5ODYsNyArMTk4Niw3IEBACiAJfQogCiAJaWYgKEJUUkZTX0koaW5vZGUpLT5mbGFncyAmIEJUUkZTX0lOT0RFX05PREFUQVNVTSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gZ29vZDsKIAogCWlmIChyb290LT5yb290X2tleS5vYmplY3RpZCA9PSBCVFJGU19EQVRBX1JFTE9DX1RSRUVfT0JKRUNUSUQgJiYKIAkgICAgdGVzdF9yYW5nZV9iaXQoaW9fdHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX05PREFUQVNVTSwgMSwgTlVMTCkpIHsKQEAgLTM2NDYsNyArMzY0Niw3IEBACiAJYnRyZnNfaV9zaXplX3dyaXRlKGlub2RlLCAwKTsKIAogCXdoaWxlICgxKSB7Ci0JCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290KTsKIAkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQl0cmFucy0+YmxvY2tfcnN2ID0gcm9vdC0+b3JwaGFuX2Jsb2NrX3JzdjsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW9jdGwuYyBiL2ZzL2J0cmZzL2lvY3RsLmMKaW5kZXggYWMzNzA0MC4uYjc5M2QxMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW9jdGwuYworKysgYi9mcy9idHJmcy9pb2N0bC5jCkBAIC0yMDU0LDI5ICsyMDU0LDM0IEBACiAKIHN0YXRpYyBsb25nIGJ0cmZzX2lvY3RsX2ZzX2luZm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHZvaWQgX191c2VyICphcmcpCiB7Ci0Jc3RydWN0IGJ0cmZzX2lvY3RsX2ZzX2luZm9fYXJncyBmaV9hcmdzOworCXN0cnVjdCBidHJmc19pb2N0bF9mc19pbmZvX2FyZ3MgKmZpX2FyZ3M7CiAJc3RydWN0IGJ0cmZzX2RldmljZSAqZGV2aWNlOwogCXN0cnVjdCBidHJmc19kZXZpY2UgKm5leHQ7CiAJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKmZzX2RldmljZXMgPSByb290LT5mc19pbmZvLT5mc19kZXZpY2VzOworCWludCByZXQgPSAwOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JZmlfYXJncy5udW1fZGV2aWNlcyA9IGZzX2RldmljZXMtPm51bV9kZXZpY2VzOwotCWZpX2FyZ3MubWF4X2lkID0gMDsKLQltZW1jcHkoJmZpX2FyZ3MuZnNpZCwgcm9vdC0+ZnNfaW5mby0+ZnNpZCwgc2l6ZW9mKGZpX2FyZ3MuZnNpZCkpOworCWZpX2FyZ3MgPSBremFsbG9jKHNpemVvZigqZmlfYXJncyksIEdGUF9LRVJORUwpOworCWlmICghZmlfYXJncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmaV9hcmdzLT5udW1fZGV2aWNlcyA9IGZzX2RldmljZXMtPm51bV9kZXZpY2VzOworCW1lbWNweSgmZmlfYXJncy0+ZnNpZCwgcm9vdC0+ZnNfaW5mby0+ZnNpZCwgc2l6ZW9mKGZpX2FyZ3MtPmZzaWQpKTsKIAogCW11dGV4X2xvY2soJmZzX2RldmljZXMtPmRldmljZV9saXN0X211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2aWNlLCBuZXh0LCAmZnNfZGV2aWNlcy0+ZGV2aWNlcywgZGV2X2xpc3QpIHsKLQkJaWYgKGRldmljZS0+ZGV2aWQgPiBmaV9hcmdzLm1heF9pZCkKLQkJCWZpX2FyZ3MubWF4X2lkID0gZGV2aWNlLT5kZXZpZDsKKwkJaWYgKGRldmljZS0+ZGV2aWQgPiBmaV9hcmdzLT5tYXhfaWQpCisJCQlmaV9hcmdzLT5tYXhfaWQgPSBkZXZpY2UtPmRldmlkOwogCX0KIAltdXRleF91bmxvY2soJmZzX2RldmljZXMtPmRldmljZV9saXN0X211dGV4KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmZmlfYXJncywgc2l6ZW9mKGZpX2FyZ3MpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihhcmcsIGZpX2FyZ3MsIHNpemVvZigqZmlfYXJncykpKQorCQlyZXQgPSAtRUZBVUxUOwogCi0JcmV0dXJuIDA7CisJa2ZyZWUoZmlfYXJncyk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGxvbmcgYnRyZnNfaW9jdGxfZGV2X2luZm8oc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHZvaWQgX191c2VyICphcmcpCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zY3J1Yi5jIGIvZnMvYnRyZnMvc2NydWIuYwppbmRleCBkZjUwZmQxLi5hOGQwM2Q1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zY3J1Yi5jCisrKyBiL2ZzL2J0cmZzL3NjcnViLmMKQEAgLTE2LDEzICsxNiw3IEBACiAgKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlICJjdHJlZS5oIgogI2luY2x1ZGUgInZvbHVtZXMuaCIKICNpbmNsdWRlICJkaXNrLWlvLmgiCkBAIC04MDQsMTggKzc5OCwxMiBAQAogCiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfbm9wbHVnOwogCi0JCWwgPSBwYXRoLT5ub2Rlc1swXTsKLQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlidHJmc19pdGVtX2tleV90b19jcHUobCwgJmtleSwgc2xvdCk7Ci0JCWlmIChrZXkub2JqZWN0aWQgIT0gbG9naWNhbCkgewotCQkJcmV0ID0gYnRyZnNfcHJldmlvdXNfaXRlbShyb290LCBwYXRoLCAwLAotCQkJCQkJICBCVFJGU19FWFRFTlRfSVRFTV9LRVkpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQorCQkvKgorCQkgKiB3ZSBtaWdodCBtaXNzIGhhbGYgYW4gZXh0ZW50IGhlcmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWF0dGVyLAorCQkgKiBhcyBpdCdzIG9ubHkgdGhlIHByZWZldGNoCisJCSAqLwogCQl3aGlsZSAoMSkgewogCQkJbCA9IHBhdGgtPm5vZGVzWzBdOwogCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwpAQCAtODI0LDcgKzgxMiw3IEBACiAJCQkJaWYgKHJldCA9PSAwKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBvdXQ7CisJCQkJCWdvdG8gb3V0X25vcGx1ZzsKIAogCQkJCWJyZWFrOwogCQkJfQpAQCAtOTA2LDE1ICs4OTQsMjAgQEAKIAkJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgcm9vdCwgJmtleSwgcGF0aCwgMCwgMCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7Ci0KLQkJbCA9IHBhdGgtPm5vZGVzWzBdOwotCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JCWJ0cmZzX2l0ZW1fa2V5X3RvX2NwdShsLCAma2V5LCBzbG90KTsKLQkJaWYgKGtleS5vYmplY3RpZCAhPSBsb2dpY2FsKSB7CisJCWlmIChyZXQgPiAwKSB7CiAJCQlyZXQgPSBidHJmc19wcmV2aW91c19pdGVtKHJvb3QsIHBhdGgsIDAsCiAJCQkJCQkgIEJUUkZTX0VYVEVOVF9JVEVNX0tFWSk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlnb3RvIG91dDsKKwkJCWlmIChyZXQgPiAwKSB7CisJCQkJLyogdGhlcmUncyBubyBzbWFsbGVyIGl0ZW0sIHNvIHN0aWNrIHdpdGggdGhlCisJCQkJICogbGFyZ2VyIG9uZSAqLworCQkJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKKwkJCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LAorCQkJCQkJCXBhdGgsIDAsIDApOworCQkJCWlmIChyZXQgPCAwKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KIAkJfQogCiAJCXdoaWxlICgxKSB7CkBAIC05ODksNiArOTgyLDcgQEAKIAogb3V0OgogCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CitvdXRfbm9wbHVnOgogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiB9CkBAIC0xMDY0LDggKzEwNTgsMTUgQEAKIAl3aGlsZSAoMSkgewogCQlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQlpZiAocmV0ID4gMCkgeworCQkJaWYgKHBhdGgtPnNsb3RzWzBdID49CisJCQkgICAgYnRyZnNfaGVhZGVyX25yaXRlbXMocGF0aC0+bm9kZXNbMF0pKSB7CisJCQkJcmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOworCQkJCWlmIChyZXQpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CiAKIAkJbCA9IHBhdGgtPm5vZGVzWzBdOwogCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07CkBAIC0xMDc1LDcgKzEwNzYsNyBAQAogCQlpZiAoZm91bmRfa2V5Lm9iamVjdGlkICE9IHNkZXYtPmRldi0+ZGV2aWQpCiAJCQlicmVhazsKIAotCQlpZiAoYnRyZnNfa2V5X3R5cGUoJmtleSkgIT0gQlRSRlNfREVWX0VYVEVOVF9LRVkpCisJCWlmIChidHJmc19rZXlfdHlwZSgmZm91bmRfa2V5KSAhPSBCVFJGU19ERVZfRVhURU5UX0tFWSkKIAkJCWJyZWFrOwogCiAJCWlmIChmb3VuZF9rZXkub2Zmc2V0ID49IGVuZCkKQEAgLTExMDQsNyArMTEwNSw3IEBACiAJCWNhY2hlID0gYnRyZnNfbG9va3VwX2Jsb2NrX2dyb3VwKGZzX2luZm8sIGNodW5rX29mZnNldCk7CiAJCWlmICghY2FjaGUpIHsKIAkJCXJldCA9IC1FTk9FTlQ7Ci0JCQlnb3RvIG91dDsKKwkJCWJyZWFrOwogCQl9CiAJCXJldCA9IHNjcnViX2NodW5rKHNkZXYsIGNodW5rX3RyZWUsIGNodW5rX29iamVjdGlkLAogCQkJCSAgY2h1bmtfb2Zmc2V0LCBsZW5ndGgpOwpAQCAtMTExNiw5ICsxMTE3LDEzIEBACiAJCWJ0cmZzX3JlbGVhc2VfcGF0aChwYXRoKTsKIAl9CiAKLW91dDoKIAlidHJmc19mcmVlX3BhdGgocGF0aCk7Ci0JcmV0dXJuIHJldDsKKworCS8qCisJICogcmV0IGNhbiBzdGlsbCBiZSAxIGZyb20gc2VhcmNoX3Nsb3Qgb3IgbmV4dF9sZWFmLAorCSAqIHRoYXQncyBub3QgYW4gZXJyb3IKKwkgKi8KKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CiB9CiAKIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgaW50IHNjcnViX3N1cGVycyhzdHJ1Y3Qgc2NydWJfZGV2ICpzZGV2KQpAQCAtMTE1NSw4ICsxMTYwLDEyIEBACiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmZzX2luZm8gPSByb290LT5mc19pbmZvOwogCiAJbXV0ZXhfbG9jaygmZnNfaW5mby0+c2NydWJfbG9jayk7Ci0JaWYgKGZzX2luZm8tPnNjcnViX3dvcmtlcnNfcmVmY250ID09IDApCisJaWYgKGZzX2luZm8tPnNjcnViX3dvcmtlcnNfcmVmY250ID09IDApIHsKKwkJYnRyZnNfaW5pdF93b3JrZXJzKCZmc19pbmZvLT5zY3J1Yl93b3JrZXJzLCAic2NydWIiLAorCQkJICAgZnNfaW5mby0+dGhyZWFkX3Bvb2xfc2l6ZSwgJmZzX2luZm8tPmdlbmVyaWNfd29ya2VyKTsKKwkJZnNfaW5mby0+c2NydWJfd29ya2Vycy5pZGxlX3RocmVzaCA9IDQ7CiAJCWJ0cmZzX3N0YXJ0X3dvcmtlcnMoJmZzX2luZm8tPnNjcnViX3dvcmtlcnMsIDEpOworCX0KIAkrK2ZzX2luZm8tPnNjcnViX3dvcmtlcnNfcmVmY250OwogCW11dGV4X3VubG9jaygmZnNfaW5mby0+c2NydWJfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDExN2U3NGUuLjBiYjRlYmIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtODI1LDcgKzgyNSw3IEBACiAJfSBlbHNlIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JCXMtPnNfZmxhZ3MgPSBmbGFnczsKKwkJcy0+c19mbGFncyA9IGZsYWdzIHwgTVNfTk9TRUM7CiAJCXN0cmxjcHkocy0+c19pZCwgYmRldm5hbWUoYmRldiwgYiksIHNpemVvZihzLT5zX2lkKSk7CiAJCWVycm9yID0gYnRyZnNfZmlsbF9zdXBlcihzLCBmc19kZXZpY2VzLCBkYXRhLAogCQkJCQkgZmxhZ3MgJiBNU19TSUxFTlQgPyAxIDogMCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBkZDcxOTY2Li4yYjM1OTBiIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTM0OSw3ICszNDksNyBAQAogCQkJCQkgICAgbGlzdCkgewogCQkJaWYgKHQtPmluX2NvbW1pdCkgewogCQkJCWlmICh0LT5jb21taXRfZG9uZSkKLQkJCQkJZ290byBvdXQ7CisJCQkJCWJyZWFrOwogCQkJCWN1cl90cmFucyA9IHQ7CiAJCQkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQkJCWJyZWFrOwpAQCAtMTExOCw4ICsxMTE4LDExIEBACiAJCXdhaXRfY3VycmVudF90cmFuc19jb21taXRfc3RhcnRfYW5kX3VuYmxvY2socm9vdCwgY3VyX3RyYW5zKTsKIAllbHNlCiAJCXdhaXRfY3VycmVudF90cmFuc19jb21taXRfc3RhcnQocm9vdCwgY3VyX3RyYW5zKTsKLQlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAorCWlmIChjdXJyZW50LT5qb3VybmFsX2luZm8gPT0gdHJhbnMpCisJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CisKKwlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGRhNTQxZGYuLjFlZmE1NmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTY4OSwxMiArNjg5LDggQEAKIAl0cmFuc2lkID0gYnRyZnNfc3VwZXJfZ2VuZXJhdGlvbihkaXNrX3N1cGVyKTsKIAlpZiAoZGlza19zdXBlci0+bGFiZWxbMF0pCiAJCXByaW50ayhLRVJOX0lORk8gImRldmljZSBsYWJlbCAlcyAiLCBkaXNrX3N1cGVyLT5sYWJlbCk7Ci0JZWxzZSB7Ci0JCS8qIEZJWE1FLCBtYWtlIGEgcmVhZGwgdXVpZCBwYXJzZXIgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiZGV2aWNlIGZzaWQgJWxseC0lbGx4ICIsCi0JCSAgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRpc2tfc3VwZXItPmZzaWQsCi0JCSAgICAgICAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKShkaXNrX3N1cGVyLT5mc2lkICsgOCkpOwotCX0KKwllbHNlCisJCXByaW50ayhLRVJOX0lORk8gImRldmljZSBmc2lkICVwVSAiLCBkaXNrX3N1cGVyLT5mc2lkKTsKIAlwcmludGsoS0VSTl9DT05UICJkZXZpZCAlbGx1IHRyYW5zaWQgJWxsdSAlc1xuIiwKIAkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXZpZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyl0cmFuc2lkLCBwYXRoKTsKIAlyZXQgPSBkZXZpY2VfbGlzdF9hZGQocGF0aCwgZGlza19zdXBlciwgZGV2aWQsIGZzX2RldmljZXNfcmV0KTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvYWRkci5jIGIvZnMvY2VwaC9hZGRyLmMKaW5kZXggMzNkYTQ5ZC4uNWEzOTUzZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hZGRyLmMKKysrIGIvZnMvY2VwaC9hZGRyLmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJQlVHX09OKCFpbm9kZSk7Ci0JaWdyYWIoaW5vZGUpOworCWlob2xkKGlub2RlKTsKIAllcnIgPSB3cml0ZXBhZ2Vfbm91bmxvY2socGFnZSwgd2JjKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlpcHV0KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvY2Fwcy5jIGIvZnMvY2VwaC9jYXBzLmMKaW5kZXggMWY3MmIwMC4uZjYwNTc1MyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9jYXBzLmMKKysrIGIvZnMvY2VwaC9jYXBzLmMKQEAgLTI5NDAsMTQgKzI5NDAsMTIgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJm1kc2MtPmNhcF9kaXJ0eSkpIHsKIAkJY2kgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtZHNjLT5jYXBfZGlydHksIHN0cnVjdCBjZXBoX2lub2RlX2luZm8sCiAJCQkJICAgICAgaV9kaXJ0eV9pdGVtKTsKLQkJaW5vZGUgPSBpZ3JhYigmY2ktPnZmc19pbm9kZSk7CisJCWlub2RlID0gJmNpLT52ZnNfaW5vZGU7CisJCWlob2xkKGlub2RlKTsKIAkJZG91dCgiZmx1c2hfZGlydHlfY2FwcyAlcFxuIiwgaW5vZGUpOwogCQlzcGluX3VubG9jaygmbWRzYy0+Y2FwX2RpcnR5X2xvY2spOwotCQlpZiAoaW5vZGUpIHsKLQkJCWNlcGhfY2hlY2tfY2FwcyhjaSwgQ0hFQ0tfQ0FQU19OT0RFTEFZfENIRUNLX0NBUFNfRkxVU0gsCi0JCQkJCU5VTEwpOwotCQkJaXB1dChpbm9kZSk7Ci0JCX0KKwkJY2VwaF9jaGVja19jYXBzKGNpLCBDSEVDS19DQVBTX05PREVMQVl8Q0hFQ0tfQ0FQU19GTFVTSCwgTlVMTCk7CisJCWlwdXQoaW5vZGUpOwogCQlzcGluX2xvY2soJm1kc2MtPmNhcF9kaXJ0eV9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJm1kc2MtPmNhcF9kaXJ0eV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvZGlyLmMgYi9mcy9jZXBoL2Rpci5jCmluZGV4IDMzNzI5ZTguLmVmOGYwOGMgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZGlyLmMKKysrIGIvZnMvY2VwaC9kaXIuYwpAQCAtMzA4LDcgKzMwOCw4IEBACiAJCXJlcSA9IGNlcGhfbWRzY19jcmVhdGVfcmVxdWVzdChtZHNjLCBvcCwgVVNFX0FVVEhfTURTKTsKIAkJaWYgKElTX0VSUihyZXEpKQogCQkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQkJcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCQlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwkJaWhvbGQoaW5vZGUpOwogCQlyZXEtPnJfZGVudHJ5ID0gZGdldChmaWxwLT5mX2RlbnRyeSk7CiAJCS8qIGhpbnRzIHRvIHJlcXVlc3QgLT4gbWRzIHNlbGVjdGlvbiBjb2RlICovCiAJCXJlcS0+cl9kaXJlY3RfbW9kZSA9IFVTRV9BVVRIX01EUzsKQEAgLTc4NywxMCArNzg4LDEyIEBACiAJcmVxLT5yX2RlbnRyeV9kcm9wID0gQ0VQSF9DQVBfRklMRV9TSEFSRUQ7CiAJcmVxLT5yX2RlbnRyeV91bmxlc3MgPSBDRVBIX0NBUF9GSUxFX0VYQ0w7CiAJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgZGlyLCByZXEpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlkX2Ryb3AoZGVudHJ5KTsKLQllbHNlIGlmICghcmVxLT5yX3JlcGx5X2luZm8uaGVhZC0+aXNfZGVudHJ5KQotCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaWdyYWIob2xkX2RlbnRyeS0+ZF9pbm9kZSkpOworCX0gZWxzZSBpZiAoIXJlcS0+cl9yZXBseV9pbmZvLmhlYWQtPmlzX2RlbnRyeSkgeworCQlpaG9sZChvbGRfZGVudHJ5LT5kX2lub2RlKTsKKwkJZF9pbnN0YW50aWF0ZShkZW50cnksIG9sZF9kZW50cnktPmRfaW5vZGUpOworCX0KIAljZXBoX21kc2NfcHV0X3JlcXVlc3QocmVxKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9leHBvcnQuYyBiL2ZzL2NlcGgvZXhwb3J0LmMKaW5kZXggYTYxMGQzZC4uZjY3YjY4NyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9leHBvcnQuYworKysgYi9mcy9jZXBoL2V4cG9ydC5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgTlVMTCwgcmVxKTsKIAkJaW5vZGUgPSByZXEtPnJfdGFyZ2V0X2lub2RlOwogCQlpZiAoaW5vZGUpCi0JCQlpZ3JhYihpbm9kZSk7CisJCQlpaG9sZChpbm9kZSk7CiAJCWNlcGhfbWRzY19wdXRfcmVxdWVzdChyZXEpOwogCQlpZiAoIWlub2RlKQogCQkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgTlVMTCwgcmVxKTsKIAkJaW5vZGUgPSByZXEtPnJfdGFyZ2V0X2lub2RlOwogCQlpZiAoaW5vZGUpCi0JCQlpZ3JhYihpbm9kZSk7CisJCQlpaG9sZChpbm9kZSk7CiAJCWNlcGhfbWRzY19wdXRfcmVxdWVzdChyZXEpOwogCQlpZiAoIWlub2RlKQogCQkJcmV0dXJuIEVSUl9QVFIoZXJyID8gZXJyIDogLUVTVEFMRSk7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDIwMzI1MmQuLjk1NDJmMDcgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZmlsZS5jCisrKyBiL2ZzL2NlcGgvZmlsZS5jCkBAIC0xOTEsNyArMTkxLDggQEAKIAkJZXJyID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfbnVtX2NhcHMgPSAxOwogCWVyciA9IGNlcGhfbWRzY19kb19yZXF1ZXN0KG1kc2MsIHBhcmVudF9pbm9kZSwgcmVxKTsKIAlpZiAoIWVycikKQEAgLTI4Miw3ICsyODMsNyBAQAogc3RhdGljIGludCBzdHJpcGVkX3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCXU2NCBvZmYsIHU2NCBsZW4sCiAJCQlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtX3BhZ2VzLAotCQkJaW50ICpjaGVja2VvZiwgYm9vbCBhbGlnbl90b19wYWdlcywKKwkJCWludCAqY2hlY2tlb2YsIGJvb2wgb19kaXJlY3QsCiAJCQl1bnNpZ25lZCBsb25nIGJ1Zl9hbGlnbikKIHsKIAlzdHJ1Y3QgY2VwaF9mc19jbGllbnQgKmZzYyA9IGNlcGhfaW5vZGVfdG9fY2xpZW50KGlub2RlKTsKQEAgLTMwNyw3ICszMDgsNyBAQAogCWlvX2FsaWduID0gb2ZmICYgflBBR0VfTUFTSzsKIAogbW9yZToKLQlpZiAoYWxpZ25fdG9fcGFnZXMpCisJaWYgKG9fZGlyZWN0KQogCQlwYWdlX2FsaWduID0gKHBvcyAtIGlvX2FsaWduICsgYnVmX2FsaWduKSAmIH5QQUdFX01BU0s7CiAJZWxzZQogCQlwYWdlX2FsaWduID0gcG9zICYgflBBR0VfTUFTSzsKQEAgLTMxNywxMCArMzE4LDEwIEBACiAJCQkJICBjaS0+aV90cnVuY2F0ZV9zZXEsCiAJCQkJICBjaS0+aV90cnVuY2F0ZV9zaXplLAogCQkJCSAgcGFnZV9wb3MsIHBhZ2VzX2xlZnQsIHBhZ2VfYWxpZ24pOwotCWhpdF9zdHJpcGUgPSB0aGlzX2xlbiA8IGxlZnQ7Ci0Jd2FzX3Nob3J0ID0gcmV0ID49IDAgJiYgcmV0IDwgdGhpc19sZW47CiAJaWYgKHJldCA9PSAtRU5PRU5UKQogCQlyZXQgPSAwOworCWhpdF9zdHJpcGUgPSB0aGlzX2xlbiA8IGxlZnQ7CisJd2FzX3Nob3J0ID0gcmV0ID49IDAgJiYgcmV0IDwgdGhpc19sZW47CiAJZG91dCgic3RyaXBlZF9yZWFkICVsbHV+JXUgKHJlYWQgJXUpIGdvdCAlZCVzJXNcbiIsIHBvcywgbGVmdCwgcmVhZCwKIAkgICAgIHJldCwgaGl0X3N0cmlwZSA/ICIgSElUU1RSSVBFIiA6ICIiLCB3YXNfc2hvcnQgPyAiIFNIT1JUIiA6ICIiKTsKIApAQCAtMzQ1LDIwICszNDYsMjIgQEAKIAl9CiAKIAlpZiAod2FzX3Nob3J0KSB7Ci0JCS8qIHdhcyBvcmlnaW5hbCBleHRlbnQgZnVsbHkgaW5zaWRlIGlfc2l6ZT8gKi8KLQkJaWYgKHBvcyArIGxlZnQgPD0gaW5vZGUtPmlfc2l6ZSkgewotCQkJZG91dCgiemVybyB0YWlsXG4iKTsKLQkJCWNlcGhfemVyb19wYWdlX3ZlY3Rvcl9yYW5nZShwYWdlX29mZiArIHJlYWQsIGxlbiAtIHJlYWQsCi0JCQkJCQkgICAgcGFnZXMpOwotCQkJcmVhZCA9IGxlbjsKLQkJCWdvdG8gb3V0OwotCQl9CisJCS8qIGRpZCB3ZSBib3VuY2Ugb2ZmIGVvZj8gKi8KKwkJaWYgKHBvcyArIGxlZnQgPiBpbm9kZS0+aV9zaXplKQorCQkJKmNoZWNrZW9mID0gMTsKIAotCQkvKiBjaGVjayBpX3NpemUgKi8KLQkJKmNoZWNrZW9mID0gMTsKKwkJLyogemVybyB0cmFpbGluZyBieXRlcyAoaW5zaWRlIGlfc2l6ZSkgKi8KKwkJaWYgKGxlZnQgPiAwICYmIHBvcyA8IGlub2RlLT5pX3NpemUpIHsKKwkJCWlmIChwb3MgKyBsZWZ0ID4gaW5vZGUtPmlfc2l6ZSkKKwkJCQlsZWZ0ID0gaW5vZGUtPmlfc2l6ZSAtIHBvczsKKworCQkJZG91dCgiemVybyB0YWlsICVkXG4iLCBsZWZ0KTsKKwkJCWNlcGhfemVyb19wYWdlX3ZlY3Rvcl9yYW5nZShwYWdlX29mZiArIHJlYWQsIGxlZnQsCisJCQkJCQkgICAgcGFnZXMpOworCQkJcmVhZCArPSBsZWZ0OworCQl9CiAJfQogCi1vdXQ6CiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSByZWFkOwogCWRvdXQoInN0cmlwZWRfcmVhZCByZXR1cm5zICVkXG4iLCByZXQpOwpAQCAtNjU4LDcgKzY2MSw3IEBACiAKIAkJLyogaGl0IEVPRiBvciBob2xlPyAqLwogCQlpZiAoc3RhdHJldCA9PSAwICYmICpwcG9zIDwgaW5vZGUtPmlfc2l6ZSkgewotCQkJZG91dCgiYWlvX3JlYWQgc3luY19yZWFkIGhpdCBob2xlLCByZWFkaW5nIG1vcmVcbiIpOworCQkJZG91dCgiYWlvX3JlYWQgc3luY19yZWFkIGhpdCBob2xlLCBwcG9zICVsbGQgPCBzaXplICVsbGQsIHJlYWRpbmcgbW9yZVxuIiwgKnBwb3MsIGlub2RlLT5pX3NpemUpOwogCQkJcmVhZCArPSByZXQ7CiAJCQliYXNlICs9IHJldDsKIAkJCWxlbiAtPSByZXQ7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2lub2RlLmMgYi9mcy9jZXBoL2lub2RlLmMKaW5kZXggNzBiNmE0OC4uZDg4NThlOSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pbm9kZS5jCisrKyBiL2ZzL2NlcGgvaW5vZGUuYwpAQCAtMTEwMSwxMCArMTEwMSwxMCBAQAogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAkJCXJlcS0+cl9kZW50cnkgPSBkbjsgIC8qIG1heSBoYXZlIHNwbGljZWQgKi8KLQkJCWlncmFiKGluKTsKKwkJCWlob2xkKGluKTsKIAkJfSBlbHNlIGlmIChjZXBoX2lubyhpbikgPT0gdmluby5pbm8gJiYKIAkJCSAgIGNlcGhfc25hcChpbikgPT0gdmluby5zbmFwKSB7Ci0JCQlpZ3JhYihpbik7CisJCQlpaG9sZChpbik7CiAJCX0gZWxzZSB7CiAJCQlkb3V0KCIgJXAgbGlua3MgdG8gJXAgJWxseC4lbGx4LCBub3QgJWxseC4lbGx4XG4iLAogCQkJICAgICBkbiwgaW4sIGNlcGhfaW5vKGluKSwgY2VwaF9zbmFwKGluKSwKQEAgLTExNDQsNyArMTE0NCw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCX0KIAkJcmVxLT5yX2RlbnRyeSA9IGRuOyAgLyogbWF5IGhhdmUgc3BsaWNlZCAqLwotCQlpZ3JhYihpbik7CisJCWlob2xkKGluKTsKIAkJcmluZm8tPmhlYWQtPmlzX2RlbnRyeSA9IDE7ICAvKiBmb29sIG5vdHJhY2UgaGFuZGxlcnMgKi8KIAl9CiAKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAJaWYgKHF1ZXVlX3dvcmsoY2VwaF9pbm9kZV90b19jbGllbnQoaW5vZGUpLT53Yl93cSwKIAkJICAgICAgICZjZXBoX2lub2RlKGlub2RlKS0+aV93Yl93b3JrKSkgewogCQlkb3V0KCJjZXBoX3F1ZXVlX3dyaXRlYmFjayAlcFxuIiwgaW5vZGUpOwotCQlpZ3JhYihpbm9kZSk7CisJCWlob2xkKGlub2RlKTsKIAl9IGVsc2UgewogCQlkb3V0KCJjZXBoX3F1ZXVlX3dyaXRlYmFjayAlcCBmYWlsZWRcbiIsIGlub2RlKTsKIAl9CkBAIC0xMzUzLDcgKzEzNTMsNyBAQAogCWlmIChxdWV1ZV93b3JrKGNlcGhfaW5vZGVfdG9fY2xpZW50KGlub2RlKS0+cGdfaW52X3dxLAogCQkgICAgICAgJmNlcGhfaW5vZGUoaW5vZGUpLT5pX3BnX2ludl93b3JrKSkgewogCQlkb3V0KCJjZXBoX3F1ZXVlX2ludmFsaWRhdGUgJXBcbiIsIGlub2RlKTsKLQkJaWdyYWIoaW5vZGUpOworCQlpaG9sZChpbm9kZSk7CiAJfSBlbHNlIHsKIAkJZG91dCgiY2VwaF9xdWV1ZV9pbnZhbGlkYXRlICVwIGZhaWxlZFxuIiwgaW5vZGUpOwogCX0KQEAgLTE0NzcsNyArMTQ3Nyw3IEBACiAJaWYgKHF1ZXVlX3dvcmsoY2VwaF9zYl90b19jbGllbnQoaW5vZGUtPmlfc2IpLT50cnVuY193cSwKIAkJICAgICAgICZjaS0+aV92bXRydW5jYXRlX3dvcmspKSB7CiAJCWRvdXQoImNlcGhfcXVldWVfdm10cnVuY2F0ZSAlcFxuIiwgaW5vZGUpOwotCQlpZ3JhYihpbm9kZSk7CisJCWlob2xkKGlub2RlKTsKIAl9IGVsc2UgewogCQlkb3V0KCJjZXBoX3F1ZXVlX3ZtdHJ1bmNhdGUgJXAgZmFpbGVkLCBwZW5kaW5nPSVkXG4iLAogCQkgICAgIGlub2RlLCBjaS0+aV90cnVuY2F0ZV9wZW5kaW5nKTsKQEAgLTE3MzgsNyArMTczOCw4IEBACiAJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgaW5vZGVfZGlydHlfZmxhZ3MpOwogCiAJaWYgKG1hc2spIHsKLQkJcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCQlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwkJaWhvbGQoaW5vZGUpOwogCQlyZXEtPnJfaW5vZGVfZHJvcCA9IHJlbGVhc2U7CiAJCXJlcS0+cl9hcmdzLnNldGF0dHIubWFzayA9IGNwdV90b19sZTMyKG1hc2spOwogCQlyZXEtPnJfbnVtX2NhcHMgPSAxOwpAQCAtMTc3OSw3ICsxNzgwLDggQEAKIAlyZXEgPSBjZXBoX21kc2NfY3JlYXRlX3JlcXVlc3QobWRzYywgQ0VQSF9NRFNfT1BfR0VUQVRUUiwgVVNFX0FOWV9NRFMpOwogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCXJlcS0+cl9udW1fY2FwcyA9IDE7CiAJcmVxLT5yX2FyZ3MuZ2V0YXR0ci5tYXNrID0gY3B1X3RvX2xlMzIobWFzayk7CiAJZXJyID0gY2VwaF9tZHNjX2RvX3JlcXVlc3QobWRzYywgTlVMTCwgcmVxKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW9jdGwuYyBiL2ZzL2NlcGgvaW9jdGwuYwppbmRleCA4ODg4YzliYS4uZWYwYjVmNCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pb2N0bC5jCisrKyBiL2ZzL2NlcGgvaW9jdGwuYwpAQCAtNzMsNyArNzMsOCBAQAogCQkJCSAgICAgICBVU0VfQVVUSF9NRFMpOwogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKLQlyZXEtPnJfaW5vZGUgPSBpZ3JhYihpbm9kZSk7CisJcmVxLT5yX2lub2RlID0gaW5vZGU7CisJaWhvbGQoaW5vZGUpOwogCXJlcS0+cl9pbm9kZV9kcm9wID0gQ0VQSF9DQVBfRklMRV9TSEFSRUQgfCBDRVBIX0NBUF9GSUxFX0VYQ0w7CiAKIAlyZXEtPnJfYXJncy5zZXRsYXlvdXQubGF5b3V0LmZsX3N0cmlwZV91bml0ID0KQEAgLTEzNSw3ICsxMzYsOCBAQAogCiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAKIAlyZXEtPnJfYXJncy5zZXRsYXlvdXQubGF5b3V0LmZsX3N0cmlwZV91bml0ID0KIAkJCWNwdV90b19sZTMyKGwuc3RyaXBlX3VuaXQpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9sb2Nrcy5jIGIvZnMvY2VwaC9sb2Nrcy5jCmluZGV4IDQ3NmIzMjkuLjgwNTc2ZDA1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2xvY2tzLmMKKysrIGIvZnMvY2VwaC9sb2Nrcy5jCkBAIC0yMyw3ICsyMyw4IEBACiAJcmVxID0gY2VwaF9tZHNjX2NyZWF0ZV9yZXF1ZXN0KG1kc2MsIG9wZXJhdGlvbiwgVVNFX0FVVEhfTURTKTsKIAlpZiAoSVNfRVJSKHJlcSkpCiAJCXJldHVybiBQVFJfRVJSKHJlcSk7Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAogCS8qIG1kcyByZXF1aXJlcyBzdGFydCBhbmQgbGVuZ3RoIHJhdGhlciB0aGFuIHN0YXJ0IGFuZCBlbmQgKi8KIAlpZiAoTExPTkdfTUFYID09IGZsLT5mbF9lbmQpCkBAIC0zMiwxMSArMzMsMTAgQEAKIAkJbGVuZ3RoID0gZmwtPmZsX2VuZCAtIGZsLT5mbF9zdGFydCArIDE7CiAKIAlkb3V0KCJjZXBoX2xvY2tfbWVzc2FnZTogcnVsZTogJWQsIG9wOiAlZCwgcGlkOiAlbGx1LCBzdGFydDogJWxsdSwgIgotCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGVgOiAlZCIsIChpbnQpbG9ja190eXBlLAorCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGU6ICVkIiwgKGludClsb2NrX3R5cGUsCiAJICAgICAoaW50KW9wZXJhdGlvbiwgKHU2NClmbC0+ZmxfcGlkLCBmbC0+Zmxfc3RhcnQsCiAJICAgICBsZW5ndGgsIHdhaXQsIGZsLT5mbF90eXBlKTsKIAotCiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnJ1bGUgPSBsb2NrX3R5cGU7CiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnR5cGUgPSBjbWQ7CiAJcmVxLT5yX2FyZ3MuZmlsZWxvY2tfY2hhbmdlLnBpZCA9IGNwdV90b19sZTY0KCh1NjQpZmwtPmZsX3BpZCk7CkBAIC03MCw3ICs3MCw3IEBACiAJfQogCWNlcGhfbWRzY19wdXRfcmVxdWVzdChyZXEpOwogCWRvdXQoImNlcGhfbG9ja19tZXNzYWdlOiBydWxlOiAlZCwgb3A6ICVkLCBwaWQ6ICVsbHUsIHN0YXJ0OiAlbGx1LCAiCi0JICAgICAibGVuZ3RoOiAlbGx1LCB3YWl0OiAlZCwgdHlwZWA6ICVkLCBlcnIgY29kZSAlZCIsIChpbnQpbG9ja190eXBlLAorCSAgICAgImxlbmd0aDogJWxsdSwgd2FpdDogJWQsIHR5cGU6ICVkLCBlcnIgY29kZSAlZCIsIChpbnQpbG9ja190eXBlLAogCSAgICAgKGludClvcGVyYXRpb24sICh1NjQpZmwtPmZsX3BpZCwgZmwtPmZsX3N0YXJ0LAogCSAgICAgbGVuZ3RoLCB3YWl0LCBmbC0+ZmxfdHlwZSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTA5LDE2ICsxMDksMjAgQEAKIAkJCWRvdXQoIm1kcyBsb2NrZWQsIGxvY2tpbmcgbG9jYWxseSIpOwogCQkJZXJyID0gcG9zaXhfbG9ja19maWxlKGZpbGUsIGZsLCBOVUxMKTsKIAkJCWlmIChlcnIgJiYgKENFUEhfTURTX09QX1NFVEZJTEVMT0NLID09IG9wKSkgewotCQkJCS8qIHVuZG8hIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBrZXJuZWwgZGV0ZWN0cwotCQkJCSAqIGxvY2FsIGRlYWRsb2NrLiAqLworCQkJCS8qIHVuZG8hIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGlmCisJCQkJICogdGhlIGtlcm5lbCBkZXRlY3RzIGxvY2FsCisJCQkJICogZGVhZGxvY2suICovCiAJCQkJY2VwaF9sb2NrX21lc3NhZ2UoQ0VQSF9MT0NLX0ZDTlRMLCBvcCwgZmlsZSwKIAkJCQkJCSAgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwotCQkJCWRvdXQoImdvdCAlZCBvbiBwb3NpeF9sb2NrX2ZpbGUsIHVuZGlkIGxvY2siLCBlcnIpOworCQkJCWRvdXQoImdvdCAlZCBvbiBwb3NpeF9sb2NrX2ZpbGUsIHVuZGlkIGxvY2siLAorCQkJCSAgICAgZXJyKTsKIAkJCX0KIAkJfQogCi0JfSBlbHNlIHsKLQkJZG91dCgibWRzIHJldHVybmVkIGVycm9yIGNvZGUgJWQiLCBlcnIpOworCX0gZWxzZSBpZiAoZXJyID09IC1FUkVTVEFSVFNZUykgeworCQlkb3V0KCJ1bmRvaW5nIGxvY2tcbiIpOworCQljZXBoX2xvY2tfbWVzc2FnZShDRVBIX0xPQ0tfRkNOVEwsIG9wLCBmaWxlLAorCQkJCSAgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpAQCAtMTU1LDggKzE1OSwxMSBAQAogCQkJCQkgIGZpbGUsIENFUEhfTE9DS19VTkxPQ0ssIDAsIGZsKTsKIAkJCWRvdXQoImdvdCAlZCBvbiBmbG9ja19sb2NrX2ZpbGVfd2FpdCwgdW5kaWQgbG9jayIsIGVycik7CiAJCX0KLQl9IGVsc2UgewotCQlkb3V0KCJtZHMgZXJyb3IgY29kZSAlZCIsIGVycik7CisJfSBlbHNlIGlmIChlcnIgPT0gLUVSRVNUQVJUU1lTKSB7CisJCWRvdXQoInVuZG9pbmcgbG9ja1xuIik7CisJCWNlcGhfbG9ja19tZXNzYWdlKENFUEhfTE9DS19GTE9DSywKKwkJCQkgIENFUEhfTURTX09QX1NFVEZJTEVMT0NLLAorCQkJCSAgZmlsZSwgQ0VQSF9MT0NLX1VOTE9DSywgMCwgZmwpOwogCX0KIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCAyNDA2N2Q2Li41NGIxNGRlIDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtNzIyLDcgKzcyMiw3IEBACiAJCWNpID0gbGlzdF9maXJzdF9lbnRyeSgmbWRzYy0+c25hcF9mbHVzaF9saXN0LAogCQkJCXN0cnVjdCBjZXBoX2lub2RlX2luZm8sIGlfc25hcF9mbHVzaF9pdGVtKTsKIAkJaW5vZGUgPSAmY2ktPnZmc19pbm9kZTsKLQkJaWdyYWIoaW5vZGUpOworCQlpaG9sZChpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZtZHNjLT5zbmFwX2ZsdXNoX2xvY2spOwogCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlfX2NlcGhfZmx1c2hfc25hcHMoY2ksICZzZXNzaW9uLCAwKTsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgveGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCBmMmI2Mjg2Li5mNDJkNzMwIDEwMDY0NAotLS0gYS9mcy9jZXBoL3hhdHRyLmMKKysrIGIvZnMvY2VwaC94YXR0ci5jCkBAIC02NjUsNyArNjY1LDggQEAKIAkJZXJyID0gUFRSX0VSUihyZXEpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmVxLT5yX2lub2RlID0gaWdyYWIoaW5vZGUpOworCXJlcS0+cl9pbm9kZSA9IGlub2RlOworCWlob2xkKGlub2RlKTsKIAlyZXEtPnJfaW5vZGVfZHJvcCA9IENFUEhfQ0FQX1hBVFRSX1NIQVJFRDsKIAlyZXEtPnJfbnVtX2NhcHMgPSAxOwogCXJlcS0+cl9hcmdzLnNldHhhdHRyLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwpAQCAtNzk1LDcgKzc5Niw4IEBACiAJCQkJICAgICAgIFVTRV9BVVRIX01EUyk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKKwlyZXEtPnJfaW5vZGUgPSBpbm9kZTsKKwlpaG9sZChpbm9kZSk7CiAJcmVxLT5yX2lub2RlX2Ryb3AgPSBDRVBIX0NBUF9YQVRUUl9TSEFSRUQ7CiAJcmVxLT5yX251bV9jYXBzID0gMTsKIAlyZXEtPnJfcGF0aDIgPSBrc3RyZHVwKG5hbWUsIEdGUF9OT0ZTKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAxY2Q0YzNhLi41M2VkMWFkIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC03LDYgKzcsNyBAQAogCXNlbGVjdCBDUllQVE9fTUQ1CiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19BUkM0CisJc2VsZWN0IENSWVBUT19FQ0IKIAlzZWxlY3QgQ1JZUFRPX0RFUwogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGNsaWVudCBWRlMgbW9kdWxlIGZvciB0aGUgQ29tbW9uIEludGVybmV0IEZpbGUgU3lzdGVtCkBAIC0xNDgsNyArMTQ5LDcgQEAKIAogY29uZmlnIENJRlNfQUNMCiAJICBib29sICJQcm92aWRlIENJRlMgQUNMIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDSUZTX1hBVFRSCisJICBkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBDSUZTX1hBVFRSICYmIEtFWVMKIAkgIGhlbHAKIAkgICAgQWxsb3dzIHRvIGZldGNoIENJRlMvTlRGUyBBQ0wgZnJvbSB0aGUgc2VydmVyLiAgVGhlIERBQ0wgYmxvYgogCSAgICBpcyBoYW5kZWQgb3ZlciB0byB0aGUgYXBwbGljYXRpb24vY2FsbGVyLgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCmluZGV4IGRmYmQ5ZjEuLjVhMGVlN2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYworKysgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCWlmIChjaWZzX3BkdSA9PSBOVUxMIHx8IHNlcnZlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjaWZzX3BkdS0+Q29tbWFuZCA9PSBTTUJfQ09NX05FR09USUFURSkKKwlpZiAoIXNlcnZlci0+c2Vzc2lvbl9lc3RhYikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY2lmc19wZHUtPkNvbW1hbmQgPT0gU01CX0NPTV9MT0NLSU5HX0FORFgpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNmQ4OGI4Mi4uYmI2NTllYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTc4NCw3ICs3ODQsNyBAQAogCQkJIHN0cnVjdCBzbWJfdm9sICp2b2wpCiB7CiAJY2hhciAqdmFsdWUsICpkYXRhLCAqZW5kOwotCWNoYXIgKm1vdW50ZGF0YV9jb3B5LCAqb3B0aW9uczsKKwljaGFyICptb3VudGRhdGFfY29weSA9IE5VTEwsICpvcHRpb25zOwogCXVuc2lnbmVkIGludCAgdGVtcF9sZW4sIGksIGo7CiAJY2hhciBzZXBhcmF0b3JbMl07CiAJc2hvcnQgaW50IG92ZXJyaWRlX3VpZCA9IC0xOwpAQCAtMTM5MSw3ICsxMzkxLDcgQEAKIAkJCQkiL3Byb2MvZnMvY2lmcy9Mb29rdXBDYWNoZUVuYWJsZWQgdG8gMFxuIik7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImZzYyIsIDMpID09IDApIHsKICNpZm5kZWYgQ09ORklHX0NJRlNfRlNDQUNIRQotCQkJY0VSUk9SKDEsICJGUy1DYWNoZSBzdXBwb3J0IG5lZWRzIENPTkZJR19DSUZTX0ZTQ0FDSEUiCisJCQljRVJST1IoMSwgIkZTLUNhY2hlIHN1cHBvcnQgbmVlZHMgQ09ORklHX0NJRlNfRlNDQUNIRSAiCiAJCQkJICAia2VybmVsIGNvbmZpZyBvcHRpb24gc2V0Iik7CiAJCQlnb3RvIGNpZnNfcGFyc2VfbW91bnRfZXJyOwogI2VuZGlmCkBAIC0xOTc2LDcgKzE5NzYsNyBAQAogCQl3YXJuZWRfb25fbnRsbSA9IHRydWU7CiAJCWNFUlJPUigxLCAiZGVmYXVsdCBzZWN1cml0eSBtZWNoYW5pc20gcmVxdWVzdGVkLiAgVGhlIGRlZmF1bHQgIgogCQkJInNlY3VyaXR5IG1lY2hhbmlzbSB3aWxsIGJlIHVwZ3JhZGVkIGZyb20gbnRsbSB0byAiCi0JCQkibnRsbXYyIGluIGtlcm5lbCByZWxlYXNlIDIuNi40MSIpOworCQkJIm50bG12MiBpbiBrZXJuZWwgcmVsZWFzZSAzLjEiKTsKIAl9CiAJc2VzLT5vdmVycmlkZVNlY0ZsZyA9IHZvbHVtZV9pbmZvLT5zZWNGbGc7CiAKZGlmZiAtLWdpdCBhL2ZzL2Rjb29raWVzLmMgYi9mcy9kY29va2llcy5jCmluZGV4IGEyMWNhYmQuLmRkYTBkYzcgMTAwNjQ0Ci0tLSBhL2ZzL2Rjb29raWVzLmMKKysrIGIvZnMvZGNvb2tpZXMuYwpAQCAtMTc4LDYgKzE3OCw4IEBACiAJLyogRklYTUU6IChkZWxldGVkKSA/ICovCiAJcGF0aCA9IGRfcGF0aCgmZGNzLT5wYXRoLCBrYnVmLCBQQUdFX1NJWkUpOwogCisJbXV0ZXhfdW5sb2NrKCZkY29va2llX211dGV4KTsKKwogCWlmIChJU19FUlIocGF0aCkpIHsKIAkJZXJyID0gUFRSX0VSUihwYXRoKTsKIAkJZ290byBvdXRfZnJlZTsKQEAgLTE5NCw2ICsxOTYsNyBAQAogCiBvdXRfZnJlZToKIAlrZnJlZShrYnVmKTsKKwlyZXR1cm4gZXJyOwogb3V0OgogCW11dGV4X3VubG9jaygmZGNvb2tpZV9tdXRleCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBlYTVmNzQ4Li45N2UwZDUyIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMDkzLDYgKzEwOTMsNyBAQAogCiAJYnBybS0+bW0gPSBOVUxMOwkJLyogV2UncmUgdXNpbmcgaXQgbm93ICovCiAKKwlzZXRfZnMoVVNFUl9EUyk7CiAJY3VycmVudC0+ZmxhZ3MgJj0gfihQRl9SQU5ET01JWkUgfCBQRl9LVEhSRUFEKTsKIAlmbHVzaF90aHJlYWQoKTsKIAljdXJyZW50LT5wZXJzb25hbGl0eSAmPSB+YnBybS0+cGVyX2NsZWFyOwpAQCAtMTM1NywxMCArMTM1OCw2IEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCi0JLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KLQlzZXRfZnMoVVNFUl9EUyk7Ci0KIAlyZXR2YWwgPSBhdWRpdF9icHJtKGJwcm0pOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CmRpZmYgLS1naXQgYS9mcy9mYXQvZmlsZS5jIGIvZnMvZmF0L2ZpbGUuYwppbmRleCA3MjU3NzUyLi43MDE4ZTFkIDEwMDY0NAotLS0gYS9mcy9mYXQvZmlsZS5jCisrKyBiL2ZzL2ZhdC9maWxlLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlpZiAoYXR0ciAmIEFUVFJfU1lTKQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJCWVsc2UKLQkJCWlub2RlLT5pX2ZsYWdzICY9IFNfSU1NVVRBQkxFOworCQkJaW5vZGUtPmlfZmxhZ3MgJj0gflNfSU1NVVRBQkxFOwogCX0KIAogCWZhdF9zYXZlX2F0dHJzKGlub2RlLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBjYzZlYzRiLi4zOGY4NGNkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC05MjEsNiArOTIxLDggQEAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19NQU5ETE9DSykKIAkJZ290byBlcnI7CiAKKwlzYi0+c19mbGFncyAmPSB+TVNfTk9TRUM7CisKIAlpZiAoIXBhcnNlX2Z1c2Vfb3B0KChjaGFyICopIGRhdGEsICZkLCBpc19iZGV2KSkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCAyNzkyYTc5Li4xYzEzMzZlIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC02NjMsMTQgKzY2MywxOSBAQAogCQlkcm9wX3JlZiA9IDE7CiAJfQogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgorCWlmICh0ZXN0X2JpdChHTEZfUEVORElOR19ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpICYmCiAJICAgIGdsLT5nbF9zdGF0ZSAhPSBMTV9TVF9VTkxPQ0tFRCAmJgogCSAgICBnbC0+Z2xfZGVtb3RlX3N0YXRlICE9IExNX1NUX0VYQ0xVU0lWRSkgewogCQl1bnNpZ25lZCBsb25nIGhvbGR0aW1lLCBub3cgPSBqaWZmaWVzOworCiAJCWhvbGR0aW1lID0gZ2wtPmdsX3RjaGFuZ2UgKyBnbC0+Z2xfb3BzLT5nb19taW5faG9sZF90aW1lOwogCQlpZiAodGltZV9iZWZvcmUobm93LCBob2xkdGltZSkpCiAJCQlkZWxheSA9IGhvbGR0aW1lIC0gbm93OwotCQlzZXRfYml0KGRlbGF5ID8gR0xGX1BFTkRJTkdfREVNT1RFIDogR0xGX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisKKwkJaWYgKCFkZWxheSkgeworCQkJY2xlYXJfYml0KEdMRl9QRU5ESU5HX0RFTU9URSwgJmdsLT5nbF9mbGFncyk7CisJCQlzZXRfYml0KEdMRl9ERU1PVEUsICZnbC0+Z2xfZmxhZ3MpOworCQl9CiAJfQogCXJ1bl9xdWV1ZShnbCwgMCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9zcGluKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMgYi9mcy9qZnMvamZzX2xvZ21nci5jCmluZGV4IDI3OGUzZmIuLjU4MzYzNmYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbG9nbWdyLmMKKysrIGIvZnMvamZzL2pmc19sb2dtZ3IuYwpAQCAtMTEyMyw3ICsxMTIzLDcgQEAKIAliZGV2ID0gYmxrZGV2X2dldF9ieV9kZXYoc2JpLT5sb2dkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEV8Rk1PREVfRVhDTCwKIAkJCQkgbG9nKTsKIAlpZiAoSVNfRVJSKGJkZXYpKSB7Ci0JCXJjID0gLVBUUl9FUlIoYmRldik7CisJCXJjID0gUFRSX0VSUihiZGV2KTsKIAkJZ290byBmcmVlOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZTJlNGU4ZC4uOTgwMjM0NSAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0yNjI0LDYgKzI2MjQsMTAgQEAKIAllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKIAlpZiAoSVNfRVJSKGRlbnRyeSkpCiAJCWdvdG8gZXhpdDI7CisJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIGV4aXQzOworCX0KIAllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDM7CkBAIC0yNzA5LDExICsyNzEzLDEwIEBACiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSkgewogCQkvKiBXaHkgbm90IGJlZm9yZT8gQmVjYXVzZSB3ZSB3YW50IGNvcnJlY3QgZXJyb3IgdmFsdWUgKi8KLQkJaWYgKG5kLmxhc3QubmFtZVtuZC5sYXN0Lmxlbl0pCi0JCQlnb3RvIHNsYXNoZXM7CiAJCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCQlpZiAoaW5vZGUpCi0JCQlpaG9sZChpbm9kZSk7CisJCWlmIChuZC5sYXN0Lm5hbWVbbmQubGFzdC5sZW5dIHx8ICFpbm9kZSkKKwkJCWdvdG8gc2xhc2hlczsKKwkJaWhvbGQoaW5vZGUpOwogCQllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLnBhdGgubW50KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBleGl0MjsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idHJlZS5jIGIvZnMvbmlsZnMyL2J0cmVlLmMKaW5kZXggN2VhZmU0Ni4uYjJlM2ZmMyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2J0cmVlLmMKKysrIGIvZnMvbmlsZnMyL2J0cmVlLmMKQEAgLTEzNDYsNiArMTM0NiwxMSBAQAogCXBhdGhbbGV2ZWxdLmJwX2JoID0gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbmlsZnNfYnRyZWVfbm9wKHN0cnVjdCBuaWxmc19ibWFwICpidHJlZSwKKwkJCSAgICBzdHJ1Y3QgbmlsZnNfYnRyZWVfcGF0aCAqcGF0aCwKKwkJCSAgICBpbnQgbGV2ZWwsIF9fdTY0ICprZXlwLCBfX3U2NCAqcHRycCkKK3sKK30KIAogc3RhdGljIGludCBuaWxmc19idHJlZV9wcmVwYXJlX2RlbGV0ZShzdHJ1Y3QgbmlsZnNfYm1hcCAqYnRyZWUsCiAJCQkJICAgICAgc3RydWN0IG5pbGZzX2J0cmVlX3BhdGggKnBhdGgsCkBAIC0xMzU2LDIwICsxMzYxLDE5IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgbmlsZnNfYnRyZWVfbm9kZSAqbm9kZSwgKnBhcmVudCwgKnNpYjsKIAlfX3U2NCBzaWJwdHI7Ci0JaW50IHBpbmRleCwgbGV2ZWwsIG5jbWluLCBuY21heCwgbmNibGssIHJldDsKKwlpbnQgcGluZGV4LCBkaW5kZXgsIGxldmVsLCBuY21pbiwgbmNtYXgsIG5jYmxrLCByZXQ7CiAKIAlyZXQgPSAwOwogCXN0YXRzLT5ic19uYmxvY2tzID0gMDsKIAluY21pbiA9IE5JTEZTX0JUUkVFX05PREVfTkNISUxEUkVOX01JTihuaWxmc19idHJlZV9ub2RlX3NpemUoYnRyZWUpKTsKIAluY2JsayA9IG5pbGZzX2J0cmVlX25jaGlsZHJlbl9wZXJfYmxvY2soYnRyZWUpOwogCi0JZm9yIChsZXZlbCA9IE5JTEZTX0JUUkVFX0xFVkVMX05PREVfTUlOOworCWZvciAobGV2ZWwgPSBOSUxGU19CVFJFRV9MRVZFTF9OT0RFX01JTiwgZGluZGV4ID0gcGF0aFtsZXZlbF0uYnBfaW5kZXg7CiAJICAgICBsZXZlbCA8IG5pbGZzX2J0cmVlX2hlaWdodChidHJlZSkgLSAxOwogCSAgICAgbGV2ZWwrKykgewogCQlub2RlID0gbmlsZnNfYnRyZWVfZ2V0X25vbnJvb3Rfbm9kZShwYXRoLCBsZXZlbCk7CiAJCXBhdGhbbGV2ZWxdLmJwX29sZHJlcS5icHJfcHRyID0KLQkJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBwYXRoW2xldmVsXS5icF9pbmRleCwKLQkJCQkJCSBuY2Jsayk7CisJCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIobm9kZSwgZGluZGV4LCBuY2Jsayk7CiAJCXJldCA9IG5pbGZzX2JtYXBfcHJlcGFyZV9lbmRfcHRyKGJ0cmVlLAogCQkJCQkJICZwYXRoW2xldmVsXS5icF9vbGRyZXEsIGRhdCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMTM4Myw2ICsxMzg3LDcgQEAKIAogCQlwYXJlbnQgPSBuaWxmc19idHJlZV9nZXRfbm9kZShidHJlZSwgcGF0aCwgbGV2ZWwgKyAxLCAmbmNtYXgpOwogCQlwaW5kZXggPSBwYXRoW2xldmVsICsgMV0uYnBfaW5kZXg7CisJCWRpbmRleCA9IHBpbmRleDsKIAogCQlpZiAocGluZGV4ID4gMCkgewogCQkJLyogbGVmdCBzaWJsaW5nICovCkBAIC0xNDIxLDYgKzE0MjYsMTQgQEAKIAkJCQlwYXRoW2xldmVsXS5icF9zaWJfYmggPSBiaDsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX2NvbmNhdF9yaWdodDsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcysrOworCQkJCS8qCisJCQkJICogV2hlbiBtZXJnaW5nIHJpZ2h0IHNpYmxpbmcgbm9kZQorCQkJCSAqIGludG8gdGhlIGN1cnJlbnQgbm9kZSwgcG9pbnRlciB0bworCQkJCSAqIHRoZSByaWdodCBzaWJsaW5nIG5vZGUgbXVzdCBiZQorCQkJCSAqIHRlcm1pbmF0ZWQgaW5zdGVhZC4gIFRoZSBhZGp1c3RtZW50CisJCQkJICogYmVsb3cgaXMgcmVxdWlyZWQgZm9yIHRoYXQuCisJCQkJICovCisJCQkJZGluZGV4ID0gcGluZGV4ICsgMTsKIAkJCQkvKiBjb250aW51ZTsgKi8KIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTE0MzEsMjkgKzE0NDQsMzEgQEAKIAkJCSAgICBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgpIHsKIAkJCQlwYXRoW2xldmVsXS5icF9vcCA9IG5pbGZzX2J0cmVlX3NocmluazsKIAkJCQlzdGF0cy0+YnNfbmJsb2NrcyArPSAyOworCQkJCWxldmVsKys7CisJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9ub3A7CisJCQkJZ290byBzaHJpbmtfcm9vdF9jaGlsZDsKIAkJCX0gZWxzZSB7CiAJCQkJcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19kZWxldGU7CiAJCQkJc3RhdHMtPmJzX25ibG9ja3MrKzsKKwkJCQlnb3RvIG91dDsKIAkJCX0KLQotCQkJZ290byBvdXQ7Ci0KIAkJfQogCX0KIAorCS8qIGNoaWxkIG9mIHRoZSByb290IG5vZGUgaXMgZGVsZXRlZCAqLworCXBhdGhbbGV2ZWxdLmJwX29wID0gbmlsZnNfYnRyZWVfZG9fZGVsZXRlOworCXN0YXRzLT5ic19uYmxvY2tzKys7CisKK3Nocmlua19yb290X2NoaWxkOgogCW5vZGUgPSBuaWxmc19idHJlZV9nZXRfcm9vdChidHJlZSk7CiAJcGF0aFtsZXZlbF0uYnBfb2xkcmVxLmJwcl9wdHIgPQotCQluaWxmc19idHJlZV9ub2RlX2dldF9wdHIobm9kZSwgcGF0aFtsZXZlbF0uYnBfaW5kZXgsCisJCW5pbGZzX2J0cmVlX25vZGVfZ2V0X3B0cihub2RlLCBkaW5kZXgsCiAJCQkJCSBOSUxGU19CVFJFRV9ST09UX05DSElMRFJFTl9NQVgpOwogCiAJcmV0ID0gbmlsZnNfYm1hcF9wcmVwYXJlX2VuZF9wdHIoYnRyZWUsICZwYXRoW2xldmVsXS5icF9vbGRyZXEsIGRhdCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX291dF9jaGlsZF9ub2RlOwogCi0JLyogY2hpbGQgb2YgdGhlIHJvb3Qgbm9kZSBpcyBkZWxldGVkICovCi0JcGF0aFtsZXZlbF0uYnBfb3AgPSBuaWxmc19idHJlZV9kb19kZWxldGU7Ci0Jc3RhdHMtPmJzX25ibG9ja3MrKzsKLQogCS8qIHN1Y2Nlc3MgKi8KICBvdXQ6CiAJKmxldmVscCA9IGxldmVsOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggMTQxNjQ2ZS4uYmIyNGFiNiAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC0yNTczLDcgKzI1NzMsNyBAQAogCXNjaS0+c2Nfd2F0ZXJtYXJrID0gTklMRlNfU0NfREVGQVVMVF9XQVRFUk1BUks7CiAKIAlpZiAobmlsZnMtPm5zX2ludGVydmFsKQotCQlzY2ktPnNjX2ludGVydmFsID0gbmlsZnMtPm5zX2ludGVydmFsOworCQlzY2ktPnNjX2ludGVydmFsID0gSFogKiBuaWxmcy0+bnNfaW50ZXJ2YWw7CiAJaWYgKG5pbGZzLT5uc193YXRlcm1hcmspCiAJCXNjaS0+c2Nfd2F0ZXJtYXJrID0gbmlsZnMtPm5zX3dhdGVybWFyazsKIAlyZXR1cm4gc2NpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3VwZXIuYyBiL2ZzL29jZnMyL3N1cGVyLmMKaW5kZXggY2RiYWY1ZS4uNTZmNjEwMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3VwZXIuYworKysgYi9mcy9vY2ZzMi9zdXBlci5jCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCiAJc2ItPnNfbWFnaWMgPSBPQ0ZTMl9TVVBFUl9NQUdJQzsKIAotCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKSB8CisJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+KE1TX1BPU0lYQUNMIHwgTVNfTk9TRUMpKSB8CiAJCSgob3NiLT5zX21vdW50X29wdCAmIE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOwogCiAJLyogSGFyZCByZWFkb25seSBtb2RlIG9ubHkgaWY6IGJkZXZfcmVhZF9vbmx5LCBNU19SRE9OTFksCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCBjNzU1OTM5Li5hYjNkNjcyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTgyMiw3ICs4MjIsNyBAQAogCX0gZWxzZSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlzLT5zX2ZsYWdzID0gZmxhZ3M7CisJCXMtPnNfZmxhZ3MgPSBmbGFncyB8IE1TX05PU0VDOwogCQlzLT5zX21vZGUgPSBtb2RlOwogCQlzdHJsY3B5KHMtPnNfaWQsIGJkZXZuYW1lKGJkZXYsIGIpLCBzaXplb2Yocy0+c19pZCkpOwogCQlzYl9zZXRfYmxvY2tzaXplKHMsIGJsb2NrX3NpemUoYmRldikpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGYwNGIyYTMuLmUwOGYzNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTQ2Nyw2ICs0NjcsMTcgQEAKIAl7MHgxMDAyLCAweDk2MTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDk2MTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlM3ODB8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTY0MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PMnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDk2NDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNTzJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjQ3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAorCXsweDEwMDIsIDB4OTY0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9TVU1PfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg5NjRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1NVTU98UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfFJBREVPTl9JU19JR1B9LFwKKwl7MHgxMDAyLCAweDk2NGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfU1VNT3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sXAogCXsweDEwMDIsIDB4OTcxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXsweDEwMDIsIDB4OTcxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzg4MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUH0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmggYi9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCmluZGV4IDFhZTEyNzEuLjk4OTk5Y2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jhc2ljX21taW9fZ3Bpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmFzaWNfbW1pb19ncGlvLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CiAKIHN0cnVjdCBiZ3Bpb19wZGF0YSB7CiAJaW50IGJhc2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCmluZGV4IGM2YTg1MGEuLjQzOWIxNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRodG9vbC5oCkBAIC0yNjgsNyArMjY4LDcgQEAKIAlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCiAKIAkvKiBJZiB0aGUgbGluayBpcyBiZWluZyBhdXRvLW5lZ290aWF0ZWQgKHZpYSBldGh0b29sX2NtZC5hdXRvbmVnCi0JICogYmVpbmcgdHJ1ZSkgdGhlIHVzZXIgbWF5IHNldCAnYXV0b25ldCcgaGVyZSBub24temVybyB0byBoYXZlIHRoZQorCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZWcnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKIAkgKiBwYXVzZSBwYXJhbWV0ZXJzIGJlIGF1dG8tbmVnb3RpYXRlZCB0b28uICBJbiBzdWNoIGEgY2FzZSwgdGhlCiAJICoge3J4LHR4fV9wYXVzZSB2YWx1ZXMgYmVsb3cgZGV0ZXJtaW5lIHdoYXQgY2FwYWJpbGl0aWVzIGFyZQogCSAqIGFkdmVydGlzZWQuCkBAIC04MTEsNyArODExLDcgQEAKICAqIEBnZXRfdHhfY3N1bTogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuIFJlcG9ydCB3aGV0aGVyIHRyYW5zbWl0IGNoZWNrc3VtcwogICoJYXJlIHR1cm5lZCBvbiBvciBvZmYuCiAgKiBAc2V0X3R4X2NzdW06IERlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGdlbmVyaWMgbmV0ZGV2IGZlYXR1cmVzLiAgVHVybgotICoJdHJhbnNtaXQgY2hlY2tzdW1zIG9uIG9yIG9mZi4gIFJldHVybnMgYSBlZ2F0aXZlIGVycm9yIGNvZGUgb3IgemVyby4KKyAqCXRyYW5zbWl0IGNoZWNrc3VtcyBvbiBvciBvZmYuICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvciB6ZXJvLgogICogQGdldF9zZzogRGVwcmVjYXRlZCBhcyByZWR1bmRhbnQuICBSZXBvcnQgd2hldGhlciBzY2F0dGVyLWdhdGhlciBpcwogICoJZW5hYmxlZC4gIAogICogQHNldF9zZzogRGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgZ2VuZXJpYyBuZXRkZXYgZmVhdHVyZXMuICBUdXJuCkBAIC0xMDg3LDcgKzEwODcsNyBAQAogLyogVGhlIGZvbGxvd2luZyBhcmUgYWxsIGludm9sdmVkIGluIGZvcmNpbmcgYSBwYXJ0aWN1bGFyIGxpbmsKICAqIG1vZGUgZm9yIHRoZSBkZXZpY2UgZm9yIHNldHRpbmcgdGhpbmdzLiAgV2hlbiBnZXR0aW5nIHRoZQogICogZGV2aWNlcyBzZXR0aW5ncywgdGhlc2UgaW5kaWNhdGUgdGhlIGN1cnJlbnQgbW9kZSBhbmQgd2hldGhlcgotICogaXQgd2FzIGZvY2VkIHVwIGludG8gdGhpcyBtb2RlIG9yIGF1dG9uZWdvdGlhdGVkLgorICogaXQgd2FzIGZvcmNlZCB1cCBpbnRvIHRoaXMgbW9kZSBvciBhdXRvbmVnb3RpYXRlZC4KICAqLwogCiAvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCwgMi41R2IsIDEwR2JFLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGM1NWQ2YjcuLjFjNzc3ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTIwOCw2ICsyMDgsNyBAQAogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KICNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCisjZGVmaW5lIE1TX05PU0VDCSgxPDwyOCkKICNkZWZpbmUgTVNfQk9STgkJKDE8PDI5KQogI2RlZmluZSBNU19BQ1RJVkUJKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIJKDE8PDMxKQpAQCAtNzQzLDkgKzc0NCwxMyBAQAogCiAJc3BpbmxvY2tfdAkJaV9sb2NrOwkvKiBpX2Jsb2NrcywgaV9ieXRlcywgbWF5YmUgaV9zaXplICovCiAJdW5zaWduZWQgaW50CQlpX2ZsYWdzOworCXVuc2lnbmVkIGludAkJaV9zdGF0ZTsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKKwl2b2lkCQkJKmlfc2VjdXJpdHk7CisjZW5kaWYKIAlzdHJ1Y3QgbXV0ZXgJCWlfbXV0ZXg7CiAKLQl1bnNpZ25lZCBsb25nCQlpX3N0YXRlOworCiAJdW5zaWduZWQgbG9uZwkJZGlydGllZF93aGVuOwkvKiBqaWZmaWVzIG9mIGZpcnN0IGRpcnR5aW5nICovCiAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZQlpX2hhc2g7CkBAIC03OTcsOSArODAyLDYgQEAKIAlhdG9taWNfdAkJaV9yZWFkY291bnQ7IC8qIHN0cnVjdCBmaWxlcyBvcGVuIFJPICovCiAjZW5kaWYKIAlhdG9taWNfdAkJaV93cml0ZWNvdW50OwotI2lmZGVmIENPTkZJR19TRUNVUklUWQotCXZvaWQJCQkqaV9zZWN1cml0eTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19GU19QT1NJWF9BQ0wKIAlzdHJ1Y3QgcG9zaXhfYWNsCSppX2FjbDsKIAlzdHJ1Y3QgcG9zaXhfYWNsCSppX2RlZmF1bHRfYWNsOwpAQCAtMjU5MSw3ICsyNTkzLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGlub2RlX2hhc19ub194YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWlmICghaXNfc3hpZChpbm9kZS0+aV9tb2RlKSkKKwlpZiAoIWlzX3N4aWQoaW5vZGUtPmlfbW9kZSkgJiYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfTk9TRUMpKQogCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PU0VDOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oIGIvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAppbmRleCA2ZDY2Y2UxLi43YjMxODYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKQEAgLTYyLDYgKzYyLDcgQEAKIAlfX3UxNgkJdHBfbWFjOwogCV9fdTE2CQl0cF9uZXQ7CiAJX191MTYJCXRwX3ZsYW5fdGNpOworCV9fdTE2CQl0cF9wYWRkaW5nOwogfTsKIAogLyogUnggcmluZyAtIGhlYWRlciBzdGF0dXMgKi8KQEAgLTEwMSw2ICsxMDIsNyBAQAogCV9fdTMyCQl0cF9zZWM7CiAJX191MzIJCXRwX25zZWM7CiAJX191MTYJCXRwX3ZsYW5fdGNpOworCV9fdTE2CQl0cF9wYWRkaW5nOwogfTsKIAogI2RlZmluZSBUUEFDS0VUMl9IRFJMRU4JCShUUEFDS0VUX0FMSUdOKHNpemVvZihzdHJ1Y3QgdHBhY2tldDJfaGRyKSkgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2xsKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKaW5kZXggZGMwMTY4MS4uYWZmYTI3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKQEAgLTIyNSw3ICsyMjUsNyBAQAogfQogCiAvKioKLSAqIF9fdmxhbl9wdXRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmcKKyAqIHZsYW5faW5zZXJ0X3RhZyAtIHJlZ3VsYXIgVkxBTiB0YWcgaW5zZXJ0aW5nCiAgKiBAc2tiOiBza2J1ZmYgdG8gdGFnCiAgKiBAdmxhbl90Y2k6IFZMQU4gVENJIHRvIGluc2VydAogICoKQEAgLTIzNCw4ICsyMzQsMTAgQEAKICAqCiAgKiBGb2xsb3dpbmcgdGhlIHNrYl91bnNoYXJlKCkgZXhhbXBsZSwgaW4gY2FzZSBvZiBlcnJvciwgdGhlIGNhbGxpbmcgZnVuY3Rpb24KICAqIGRvZXNuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmcmVlaW5nIHRoZSBvcmlnaW5hbCBza2IuCisgKgorICogRG9lcyBub3QgY2hhbmdlIHNrYi0+cHJvdG9jb2wgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBkdXJpbmcgcmVjZWl2ZS4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9pbnNlcnRfdGFnKHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2bGFuX3RjaSkKIHsKIAlzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZldGg7CiAKQEAgLTI1NSw4ICsyNTcsMjUgQEAKIAkvKiBub3csIHRoZSBUQ0kgKi8KIAl2ZXRoLT5oX3ZsYW5fVENJID0gaHRvbnModmxhbl90Y2kpOwogCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMjFRKTsKKwlyZXR1cm4gc2tiOworfQogCisvKioKKyAqIF9fdmxhbl9wdXRfdGFnIC0gcmVndWxhciBWTEFOIHRhZyBpbnNlcnRpbmcKKyAqIEBza2I6IHNrYnVmZiB0byB0YWcKKyAqIEB2bGFuX3RjaTogVkxBTiBUQ0kgdG8gaW5zZXJ0CisgKgorICogSW5zZXJ0cyB0aGUgVkxBTiB0YWcgaW50byBAc2tiIGFzIHBhcnQgb2YgdGhlIHBheWxvYWQKKyAqIFJldHVybnMgYSBWTEFOIHRhZ2dlZCBza2IuIElmIGEgbmV3IHNrYiBpcyBjcmVhdGVkLCBAc2tiIGlzIGZyZWVkLgorICoKKyAqIEZvbGxvd2luZyB0aGUgc2tiX3Vuc2hhcmUoKSBleGFtcGxlLCBpbiBjYXNlIG9mIGVycm9yLCB0aGUgY2FsbGluZyBmdW5jdGlvbgorICogZG9lc24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlIG9yaWdpbmFsIHNrYi4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqX192bGFuX3B1dF90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHZsYW5fdGNpKQoreworCXNrYiA9IHZsYW5faW5zZXJ0X3RhZyhza2IsIHZsYW5fdGNpKTsKKwlpZiAoc2tiKQorCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyMVEpOwogCXJldHVybiBza2I7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmggYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCmluZGV4IDgxOWFjYWEuLjcxNGJhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaApAQCAtOCw5ICs4LDkgQEAKICAqIEBJUlFfV0FLRV9USFJFQUQJaGFuZGxlciByZXF1ZXN0cyB0byB3YWtlIHRoZSBoYW5kbGVyIHRocmVhZAogICovCiBlbnVtIGlycXJldHVybiB7Ci0JSVJRX05PTkUsCi0JSVJRX0hBTkRMRUQsCi0JSVJRX1dBS0VfVEhSRUFELAorCUlSUV9OT05FCQk9ICgwIDw8IDApLAorCUlSUV9IQU5ETEVECQk9ICgxIDw8IDApLAorCUlSUV9XQUtFX1RIUkVBRAkJPSAoMSA8PCAxKSwKIH07CiAKIHR5cGVkZWYgZW51bSBpcnFyZXR1cm4gaXJxcmV0dXJuX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBjYTMzM2U3Li41NGI4YjRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTI1NTUsNyArMjU1NSw3IEBACiAKIGV4dGVybiBzdHJ1Y3Qga29ial9uc190eXBlX29wZXJhdGlvbnMgbmV0X25zX3R5cGVfb3BlcmF0aW9uczsKIAotZXh0ZXJuIGNoYXIgKm5ldGRldl9kcml2ZXJuYW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbik7CitleHRlcm4gY29uc3QgY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGV4dGVybiB2b2lkIGxpbmt3YXRjaF9ydW5fcXVldWUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaAppbmRleCA1MGNkYzI1Li4wZDNkZDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC0xOCw2ICsxOCw5IEBACiAJLyogPj0gdGhpcyBpbmRpY2F0ZXMgcmVwbHkgZGlyZWN0aW9uICovCiAJSVBfQ1RfSVNfUkVQTFksCiAKKwlJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSA9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFksCisJSVBfQ1RfUkVMQVRFRF9SRVBMWSA9IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSwKKwlJUF9DVF9ORVdfUkVQTFkgPSBJUF9DVF9ORVcgKyBJUF9DVF9JU19SRVBMWSwJCiAJLyogTnVtYmVyIG9mIGRpc3RpbmN0IElQX0NUIHR5cGVzIChubyBORVcgaW4gcmVwbHkgZGlybikuICovCiAJSVBfQ1RfTlVNQkVSID0gSVBfQ1RfSVNfUkVQTFkgKiAyIC0gMQogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDhiOTczMDguLjljYTAwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaApAQCAtMjU5LDYgKzI1OSw5IEBACiAgKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBjbXB4Y2hnX2RvdWJsZS4gIGNtcHhjaGdfZG91YmxlIGlzIHBhc3NlZCB0d28KICAqIHBlcmNwdSB2YXJpYWJsZXMuICBUaGUgZmlyc3QgaGFzIHRvIGJlIGFsaWduZWQgdG8gYSBkb3VibGUgd29yZAogICogYm91bmRhcnkgYW5kIHRoZSBzZWNvbmQgaGFzIHRvIGZvbGxvdyBkaXJlY3RseSB0aGVyZWFmdGVyLgorICogV2UgZW5mb3JjZSB0aGlzIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGV2ZW4gaWYgdGhleSBkb24ndCBzdXBwb3J0CisgKiBhIGRvdWJsZSBjbXB4Y2hnIGluc3RydWN0aW9uLCBzaW5jZSBpdCdzIGEgY2hlYXAgcmVxdWlyZW1lbnQsIGFuZCBpdAorICogYXZvaWRzIGJyZWFraW5nIHRoZSByZXF1aXJlbWVudCBmb3IgYXJjaGl0ZWN0dXJlcyB3aXRoIHRoZSBpbnN0cnVjdGlvbi4KICAqLwogI2RlZmluZSBfX3BjcHVfZG91YmxlX2NhbGxfcmV0dXJuX2Jvb2woc3RlbSwgcGNwMSwgcGNwMiwgLi4uKQkJXAogKHsJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaCBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCmluZGV4IDM0MTI2ODQuLmUwNzg2ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCkBAIC0xMzcsMTQgKzEzNywxNCBAQAogICoKICAqIHN0cnVjdCByZWFkX2Zvcm1hdCB7CiAgKgl7IHU2NAkJdmFsdWU7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcKICAqCSAgeyB1NjQJCWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAogICoJfSAmJiAhUEVSRl9GT1JNQVRfR1JPVVAKICAqCiAgKgl7IHU2NAkJbnI7Ci0gKgkgIHsgdTY0CQl0aW1lX2VuYWJsZWQ7IH0gJiYgUEVSRl9GT1JNQVRfRU5BQkxFRAotICoJICB7IHU2NAkJdGltZV9ydW5uaW5nOyB9ICYmIFBFUkZfRk9STUFUX1JVTk5JTkcKKyAqCSAgeyB1NjQJCXRpbWVfZW5hYmxlZDsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQKKyAqCSAgeyB1NjQJCXRpbWVfcnVubmluZzsgfSAmJiBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcKICAqCSAgeyB1NjQJCXZhbHVlOwogICoJICAgIHsgdTY0CWlkOyAgICAgICAgICAgfSAmJiBQRVJGX0ZPUk1BVF9JRAogICoJICB9CQljbnRyW25yXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAyYTg2MjFjLi5hODM3YjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xMDYzLDYgKzEwNjMsNyBAQAogICovCiAjZGVmaW5lIFdGX1NZTkMJCTB4MDEJCS8qIHdha2VyIGdvZXMgdG8gc2xlZXAgYWZ0ZXIgd2FrdXAgKi8KICNkZWZpbmUgV0ZfRk9SSwkJMHgwMgkJLyogY2hpbGQgd2FrZXVwIGFmdGVyIGZvcmsgKi8KKyNkZWZpbmUgV0ZfTUlHUkFURUQJMHgwNAkJLyogaW50ZXJuYWwgdXNlLCB0YXNrIGdvdCBtaWdyYXRlZCAqLwogCiAjZGVmaW5lIEVOUVVFVUVfV0FLRVVQCQkxCiAjZGVmaW5lIEVOUVVFVUVfSEVBRAkJMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAppbmRleCBlOTgxMTg5Li5jNmRiOWZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgc2VxdWVuY2U7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCBlOGI3OGNlLi5jMGE0ZjNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTEyNTYsNiArMTI1NiwxMSBAQAogCXNrYi0+dGFpbCArPSBsZW47CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfcmVzZXRfbWFjX2xlbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYi0+bWFjX2xlbiA9IHNrYi0+bmV0d29ya19oZWFkZXIgLSBza2ItPm1hY19oZWFkZXI7Cit9CisKICNpZmRlZiBORVRfU0tCVUZGX0RBVEFfVVNFU19PRkZTRVQKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKaW5kZXggOGMwZTM0OS4uNDQ1NzAyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2lvdGxiLmgKQEAgLTI0LDYgKzI0LDcgQEAKIAogZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KGludCB2ZXJib3NlKTsKIGV4dGVybiB2b2lkIHN3aW90bGJfaW5pdF93aXRoX3RibChjaGFyICp0bGIsIHVuc2lnbmVkIGxvbmcgbnNsYWJzLCBpbnQgdmVyYm9zZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzd2lvbHRiX25yX3RibCh2b2lkKTsKIAogLyoKICAqIEVudW1lcmF0aW9uIGZvciBzeW5jIHRhcmdldHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IDcxNjkzZDQuLjE3ZGYzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtNjIsNyArNjIsOSBAQAogCVVTX0ZMQUcoTk9fUkVBRF9ESVNDX0lORk8sCTB4MDAwNDAwMDApCQlcCiAJCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9ESVNDX0lORk8gKi8JCVwKIAlVU19GTEFHKE5PX1JFQURfQ0FQQUNJVFlfMTYsCTB4MDAwODAwMDApCQlcCi0JCS8qIGNhbm5vdCBoYW5kbGUgUkVBRF9DQVBBQ0lUWV8xNiAqLworCQkvKiBjYW5ub3QgaGFuZGxlIFJFQURfQ0FQQUNJVFlfMTYgKi8JCVwKKwlVU19GTEFHKElOSVRJQUxfUkVBRDEwLAkweDAwMTAwMDAwKQkJCVwKKwkJLyogSW5pdGlhbCBSRUFEKDEwKSAoYW5kIG90aGVycykgbXVzdCBiZSByZXRyaWVkICovCiAKICNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAogZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IDkzZTk2ZmIuLmM3YzQwZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTEyOCw4ICsxMjgsOCBAQAogCXN0cnVjdCBtdXRleCAqbG9jazsKIH07CiAKLSNkZWZpbmUgbWVkaWFfZW50aXR5X3RvX3ZpZGVvX2RldmljZShlbnRpdHkpIFwKLQljb250YWluZXJfb2YoZW50aXR5LCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBlbnRpdHkpCisjZGVmaW5lIG1lZGlhX2VudGl0eV90b192aWRlb19kZXZpY2UoX19lKSBcCisJY29udGFpbmVyX29mKF9fZSwgc3RydWN0IHZpZGVvX2RldmljZSwgZW50aXR5KQogLyogZGV2IHRvIHZpZGVvLWRldmljZSAqLwogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgZGV2KQogCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IGQ4NjNiM2MuLjllZmU3MTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC03NDAyLDI2ICs3NDAyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfY2dyb3VwX21vdmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIHZvaWQKK3BlcmZfY2dyb3VwX2F0dGFjaF90YXNrKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAl0YXNrX2Z1bmN0aW9uX2NhbGwodGFzaywgX19wZXJmX2Nncm91cF9tb3ZlLCB0YXNrKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKLQkJc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKLQkJYm9vbCB0aHJlYWRncm91cCkKLXsKLQlwZXJmX2Nncm91cF9tb3ZlKHRhc2spOwotCWlmICh0aHJlYWRncm91cCkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmM7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYywgJnRhc2stPnRocmVhZF9ncm91cCwgdGhyZWFkX2dyb3VwKSB7Ci0JCQlwZXJmX2Nncm91cF9tb3ZlKGMpOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgcGVyZl9jZ3JvdXBfZXhpdChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJCXN0cnVjdCBjZ3JvdXAgKm9sZF9jZ3JwLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CkBAIC03NDMzLDcgKzc0MTksNyBAQAogCWlmICghKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykpCiAJCXJldHVybjsKIAotCXBlcmZfY2dyb3VwX21vdmUodGFzayk7CisJcGVyZl9jZ3JvdXBfYXR0YWNoX3Rhc2soY2dycCwgdGFzayk7CiB9CiAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIHBlcmZfc3Vic3lzID0gewpAQCAtNzQ0Miw2ICs3NDI4LDYgQEAKIAkuY3JlYXRlCQk9IHBlcmZfY2dyb3VwX2NyZWF0ZSwKIAkuZGVzdHJveQk9IHBlcmZfY2dyb3VwX2Rlc3Ryb3ksCiAJLmV4aXQJCT0gcGVyZl9jZ3JvdXBfZXhpdCwKLQkuYXR0YWNoCQk9IHBlcmZfY2dyb3VwX2F0dGFjaCwKKwkuYXR0YWNoX3Rhc2sJPSBwZXJmX2Nncm91cF9hdHRhY2hfdGFzaywKIH07CiAjZW5kaWYgLyogQ09ORklHX0NHUk9VUF9QRVJGICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCA5MGNiNTVmLi40NzBkMDhjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTEzMywxMiArMTMzLDYgQEAKIAkJc3dpdGNoIChyZXMpIHsKIAkJY2FzZSBJUlFfV0FLRV9USFJFQUQ6CiAJCQkvKgotCQkJICogU2V0IHJlc3VsdCB0byBoYW5kbGVkIHNvIHRoZSBzcHVyaW91cyBjaGVjawotCQkJICogZG9lcyBub3QgdHJpZ2dlci4KLQkJCSAqLwotCQkJcmVzID0gSVJRX0hBTkRMRUQ7Ci0KLQkJCS8qCiAJCQkgKiBDYXRjaCBkcml2ZXJzIHdoaWNoIHJldHVybiBXQUtFX1RIUkVBRCBidXQKIAkJCSAqIGRpZCBub3Qgc2V0IHVwIGEgdGhyZWFkIGZ1bmN0aW9uCiAJCQkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jIGIva2VybmVsL2lycS9pcnFkZXNjLmMKaW5kZXggODg2ZTgwMy4uNGM2MGE1MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pcnFkZXNjLmMKKysrIGIva2VybmVsL2lycS9pcnFkZXNjLmMKQEAgLTI1NywxMyArMjU3LDExIEBACiAJY291bnQgPSBBUlJBWV9TSVpFKGlycV9kZXNjKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRlc2NbaV0uaXJxX2RhdGEuaXJxID0gaTsKLQkJZGVzY1tpXS5pcnFfZGF0YS5jaGlwID0gJm5vX2lycV9jaGlwOwogCQlkZXNjW2ldLmtzdGF0X2lycXMgPSBhbGxvY19wZXJjcHUodW5zaWduZWQgaW50KTsKLQkJaXJxX3NldHRpbmdzX2Nscl9hbmRfc2V0KGRlc2MsIH4wLCBfSVJRX0RFRkFVTFRfSU5JVF9GTEFHUyk7Ci0JCWFsbG9jX21hc2tzKGRlc2MgKyBpLCBHRlBfS0VSTkVMLCBub2RlKTsKLQkJZGVzY19zbXBfaW5pdChkZXNjICsgaSwgbm9kZSk7CisJCWFsbG9jX21hc2tzKCZkZXNjW2ldLCBHRlBfS0VSTkVMLCBub2RlKTsKKwkJcmF3X3NwaW5fbG9ja19pbml0KCZkZXNjW2ldLmxvY2spOwogCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzY1tpXS5sb2NrLCAmaXJxX2Rlc2NfbG9ja19jbGFzcyk7CisJCWRlc2Nfc2V0X2RlZmF1bHRzKGksICZkZXNjW2ldLCBub2RlKTsKIAl9CiAJcmV0dXJuIGFyY2hfZWFybHlfaXJxX2luaXQoKTsKIH0KQEAgLTM0Niw2ICszNDQsMTIgQEAKIAlpZiAoIWNudCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoaXJxID49IDApIHsKKwkJaWYgKGZyb20gPiBpcnEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJZnJvbSA9IGlycTsKKwl9CisKIAltdXRleF9sb2NrKCZzcGFyc2VfaXJxX2xvY2spOwogCiAJc3RhcnQgPSBiaXRtYXBfZmluZF9uZXh0X3plcm9fYXJlYShhbGxvY2F0ZWRfaXJxcywgSVJRX0JJVE1BUF9CSVRTLApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggZjdjZTAwMi4uMGE3ODQwYWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtNDkxLDYgKzQ5MSw5IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2dldF9kZXNjX2J1c2xvY2soaXJxLCAmZmxhZ3MpOwogCWludCByZXQgPSAwOwogCisJaWYgKCFkZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIHdha2V1cC1jYXBhYmxlIGlycXMgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGRyaXZlcnMgdGhhdAogCSAqIGRvbid0IG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBzbGVlcCBtb2RlIGJlaGF2aW9ycy4KIAkgKi8KQEAgLTcyMywxMyArNzI2LDE2IEBACiAgKiBjb250ZXh0LiBTbyB3ZSBuZWVkIHRvIGRpc2FibGUgYmggaGVyZSB0byBhdm9pZCBkZWFkbG9ja3MgYW5kIG90aGVyCiAgKiBzaWRlIGVmZmVjdHMuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaXJxcmV0dXJuX3QKIGlycV9mb3JjZWRfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogeworCWlycXJldHVybl90IHJldDsKKwogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlhY3Rpb24tPnRocmVhZF9mbihhY3Rpb24tPmlycSwgYWN0aW9uLT5kZXZfaWQpOworCXJldCA9IGFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CiAJaXJxX2ZpbmFsaXplX29uZXNob3QoZGVzYywgYWN0aW9uLCBmYWxzZSk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTczNywxMCArNzQzLDE0IEBACiAgKiBwcmVlbXRpYmxlIC0gbWFueSBvZiB0aGVtIG5lZWQgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHNsb3cgYnVzc2VzIHRvCiAgKiBjb21wbGV0ZS4KICAqLwotc3RhdGljIHZvaWQgaXJxX3RocmVhZF9mbihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbikKK3N0YXRpYyBpcnFyZXR1cm5fdCBpcnFfdGhyZWFkX2ZuKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKQogewotCWFjdGlvbi0+dGhyZWFkX2ZuKGFjdGlvbi0+aXJxLCBhY3Rpb24tPmRldl9pZCk7CisJaXJxcmV0dXJuX3QgcmV0OworCisJcmV0ID0gYWN0aW9uLT50aHJlYWRfZm4oYWN0aW9uLT5pcnEsIGFjdGlvbi0+ZGV2X2lkKTsKIAlpcnFfZmluYWxpemVfb25lc2hvdChkZXNjLCBhY3Rpb24sIGZhbHNlKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtNzUzLDcgKzc2Myw4IEBACiAJfTsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24gPSBkYXRhOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGFjdGlvbi0+aXJxKTsKLQl2b2lkICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24pOworCWlycXJldHVybl90ICgqaGFuZGxlcl9mbikoc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKIAlpbnQgd2FrZTsKIAogCWlmIChmb3JjZV9pcnF0aHJlYWRzICYgdGVzdF9iaXQoSVJRVEZfRk9SQ0VEX1RIUkVBRCwKQEAgLTc4Myw4ICs3OTQsMTIgQEAKIAkJCWRlc2MtPmlzdGF0ZSB8PSBJUlFTX1BFTkRJTkc7CiAJCQlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkZXNjLT5sb2NrKTsKIAkJfSBlbHNlIHsKKwkJCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CisKIAkJCXJhd19zcGluX3VubG9ja19pcnEoJmRlc2MtPmxvY2spOwotCQkJaGFuZGxlcl9mbihkZXNjLCBhY3Rpb24pOworCQkJYWN0aW9uX3JldCA9IGhhbmRsZXJfZm4oZGVzYywgYWN0aW9uKTsKKwkJCWlmICghbm9pcnFkZWJ1ZykKKwkJCQlub3RlX2ludGVycnVwdChhY3Rpb24tPmlycSwgZGVzYywgYWN0aW9uX3JldCk7CiAJCX0KIAogCQl3YWtlID0gYXRvbWljX2RlY19hbmRfdGVzdCgmZGVzYy0+dGhyZWFkc19hY3RpdmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zcHVyaW91cy5jIGIva2VybmVsL2lycS9zcHVyaW91cy5jCmluZGV4IGRmYmQ1NTAuLmFhNTdkNWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc3B1cmlvdXMuYworKysgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKQEAgLTE2Nyw2ICsxNjcsMTMgQEAKIAkJICBqaWZmaWVzICsgUE9MTF9TUFVSSU9VU19JUlFfSU5URVJWQUwpOwogfQogCitzdGF0aWMgaW5saW5lIGludCBiYWRfYWN0aW9uX3JldChpcnFyZXR1cm5fdCBhY3Rpb25fcmV0KQoreworCWlmIChsaWtlbHkoYWN0aW9uX3JldCA8PSAoSVJRX0hBTkRMRUQgfCBJUlFfV0FLRV9USFJFQUQpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKQEAgLTE4Miw3ICsxODksNyBAQAogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGFjdGlvbl9yZXQgIT0gSVJRX0hBTkRMRUQgJiYgYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkgeworCWlmIChiYWRfYWN0aW9uX3JldChhY3Rpb25fcmV0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImlycSBldmVudCAlZDogYm9ndXMgcmV0dXJuIHZhbHVlICV4XG4iLAogCQkJCWlycSwgYWN0aW9uX3JldCk7CiAJfSBlbHNlIHsKQEAgLTIwMSwxMCArMjA4LDExIEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJYWN0aW9uID0gZGVzYy0+YWN0aW9uOwogCXdoaWxlIChhY3Rpb24pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0iLCBhY3Rpb24tPmhhbmRsZXIpOwotCQlwcmludF9zeW1ib2woIiAoJXMpIiwKLQkJCSh1bnNpZ25lZCBsb25nKWFjdGlvbi0+aGFuZGxlcik7Ci0JCXByaW50aygiXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJbPCVwPl0gJXBmIiwgYWN0aW9uLT5oYW5kbGVyLCBhY3Rpb24tPmhhbmRsZXIpOworCQlpZiAoYWN0aW9uLT50aHJlYWRfZm4pCisJCQlwcmludGsoS0VSTl9DT05UICIgdGhyZWFkZWQgWzwlcD5dICVwZiIsCisJCQkJCWFjdGlvbi0+dGhyZWFkX2ZuLCBhY3Rpb24tPnRocmVhZF9mbik7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJCWFjdGlvbiA9IGFjdGlvbi0+bmV4dDsKIAl9CiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKQEAgLTI2Miw3ICsyNzAsMTYgQEAKIAlpZiAoZGVzYy0+aXN0YXRlICYgSVJRU19QT0xMX0lOUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCWlmICh1bmxpa2VseShhY3Rpb25fcmV0ICE9IElSUV9IQU5ETEVEKSkgeworCS8qIHdlIGdldCBoZXJlIGFnYWluIHZpYSB0aGUgdGhyZWFkZWQgaGFuZGxlciAqLworCWlmIChhY3Rpb25fcmV0ID09IElSUV9XQUtFX1RIUkVBRCkKKwkJcmV0dXJuOworCisJaWYgKGJhZF9hY3Rpb25fcmV0KGFjdGlvbl9yZXQpKSB7CisJCXJlcG9ydF9iYWRfaXJxKGlycSwgZGVzYywgYWN0aW9uX3JldCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAodW5saWtlbHkoYWN0aW9uX3JldCA9PSBJUlFfTk9ORSkpIHsKIAkJLyoKIAkJICogSWYgd2UgYXJlIHNlZWluZyBvbmx5IHRoZSBvZGQgc3B1cmlvdXMgSVJRIGNhdXNlZCBieQogCQkgKiBidXMgYXN5bmNocm9uaWNpdHkgdGhlbiBkb24ndCBldmVudHVhbGx5IHRyaWdnZXIgYW4gZXJyb3IsCkBAIC0yNzQsOCArMjkxLDYgQEAKIAkJZWxzZQogCQkJZGVzYy0+aXJxc191bmhhbmRsZWQrKzsKIAkJZGVzYy0+bGFzdF91bmhhbmRsZWQgPSBqaWZmaWVzOwotCQlpZiAodW5saWtlbHkoYWN0aW9uX3JldCAhPSBJUlFfTk9ORSkpCi0JCQlyZXBvcnRfYmFkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpOwogCX0KIAogCWlmICh1bmxpa2VseSh0cnlfbWlzcm91dGVkX2lycShpcnEsIGRlc2MsIGFjdGlvbl9yZXQpKSkgewpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggNjM0MzdkMC4uMjk4YzkyNyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC0zNDI2LDcgKzM0MjYsNyBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmxvY2tkZXBfcmVjdXJzaW9uKSkKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIDE7IC8qIGF2b2lkIGZhbHNlIG5lZ2F0aXZlIGxvY2tkZXBfYXNzZXJ0X2hlbGQoKSAqLwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAljaGVja19mbGFncyhmbGFncyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQuYyBiL2tlcm5lbC9zY2hlZC5jCmluZGV4IGNiYjNhMGUuLjNmMmU1MDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC5jCisrKyBiL2tlcm5lbC9zY2hlZC5jCkBAIC02MDUsMTAgKzYwNSwxMCBAQAogLyoKICAqIFJldHVybiB0aGUgZ3JvdXAgdG8gd2hpY2ggdGhpcyB0YXNrcyBiZWxvbmdzLgogICoKLSAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24KLSAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKLSAqIGhvbGRzIHRoYXQgbG9jayBmb3IgZWFjaCB0YXNrIGl0IG1vdmVzIGludG8gdGhlIGNncm91cC4gVGhlcmVmb3JlCi0gKiBieSBob2xkaW5nIHRoYXQgbG9jaywgd2UgcGluIHRoZSB0YXNrIHRvIHRoZSBjdXJyZW50IGNncm91cC4KKyAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24gd2l0aAorICogcGktPmxvY2sgYW5kIHJxLT5sb2NrIGJlY2F1c2UgY3B1X2Nncm91cF9hdHRhY2goKSBob2xkcyB0aG9zZSBsb2NrcyBmb3IgZWFjaAorICogdGFzayBpdCBtb3ZlcyBpbnRvIHRoZSBjZ3JvdXAuIFRoZXJlZm9yZSBieSBob2xkaW5nIGVpdGhlciBvZiB0aG9zZSBsb2NrcywKKyAqIHdlIHBpbiB0aGUgdGFzayB0byB0aGUgY3VycmVudCBjZ3JvdXAuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfZ3JvdXAgKnRhc2tfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtNjE2LDcgKzYxNiw4IEBACiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAotCQkJbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSk7CisJCQlsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spIHx8CisJCQlsb2NrZGVwX2lzX2hlbGQoJnRhc2tfcnEocCktPmxvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogCiAJcmV0dXJuIGF1dG9ncm91cF90YXNrX2dyb3VwKHAsIHRnKTsKQEAgLTIyMDAsNiArMjIwMSwxNiBAQAogCQkJISh0YXNrX3RocmVhZF9pbmZvKHApLT5wcmVlbXB0X2NvdW50ICYgUFJFRU1QVF9BQ1RJVkUpKTsKIAogI2lmZGVmIENPTkZJR19MT0NLREVQCisJLyoKKwkgKiBUaGUgY2FsbGVyIHNob3VsZCBob2xkIGVpdGhlciBwLT5waV9sb2NrIG9yIHJxLT5sb2NrLCB3aGVuIGNoYW5naW5nCisJICogYSB0YXNrJ3MgQ1BVLiAtPnBpX2xvY2sgZm9yIHdha2luZyB0YXNrcywgcnEtPmxvY2sgZm9yIHJ1bm5hYmxlIHRhc2tzLgorCSAqCisJICogc2NoZWRfbW92ZV90YXNrKCkgaG9sZHMgYm90aCBhbmQgdGh1cyBob2xkaW5nIGVpdGhlciBwaW5zIHRoZSBjZ3JvdXAsCisJICogc2VlIHNldF90YXNrX3JxKCkuCisJICoKKwkgKiBGdXJ0aGVybW9yZSwgYWxsIHRhc2tfcnEgdXNlcnMgc2hvdWxkIGFjcXVpcmUgYm90aCBsb2Nrcywgc2VlCisJICogdGFza19ycV9sb2NrKCkuCisJICovCiAJV0FSTl9PTl9PTkNFKGRlYnVnX2xvY2tzICYmICEobG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSB8fAogCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmdGFza19ycShwKS0+bG9jaykpKTsKICNlbmRpZgpAQCAtMjQ0Nyw2ICsyNDU4LDEwIEBACiAJCX0KIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJaWYgKHdha2VfZmxhZ3MgJiBXRl9NSUdSQVRFRCkKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7CisKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKQEAgLTI0NTUsOSArMjQ3MCw2IEBACiAJaWYgKHdha2VfZmxhZ3MgJiBXRl9TWU5DKQogCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKIAotCWlmIChjcHUgIT0gdGFza19jcHUocCkpCi0JCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX21pZ3JhdGUpOwotCiAjZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KIH0KIApAQCAtMjYwMCw2ICsyNjEyLDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKIAlpZiAoc2NoZWRfZmVhdChUVFdVX1FVRVVFKSAmJiBjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKSB7CisJCXNjaGVkX2Nsb2NrX2NwdShjcHUpOyAvKiBzeW5jIGNsb2NrcyB4LWNwdSAqLwogCQl0dHd1X3F1ZXVlX3JlbW90ZShwLCBjcHUpOwogCQlyZXR1cm47CiAJfQpAQCAtMjY3NCw4ICsyNjg3LDEwIEBACiAJCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhwKTsKIAogCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7Ci0JaWYgKHRhc2tfY3B1KHApICE9IGNwdSkKKwlpZiAodGFza19jcHUocCkgIT0gY3B1KSB7CisJCXdha2VfZmxhZ3MgfD0gV0ZfTUlHUkFURUQ7CiAJCXNldF90YXNrX2NwdShwLCBjcHUpOworCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIAl0dHd1X3F1ZXVlKHAsIGNwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggNGZjOTI0NC4uZjE3NWQ5OCAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtOTM4LDYgKzkzOCwxMiBAQAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFMKKwkvKgorCSAqIFVzZXItc3BhY2Ugc2NyaXB0cyByZWx5IG9uIHRoZSBleGlzdGVuY2Ugb2YgdGhpcyBmaWxlCisJICogYXMgYSBmZWF0dXJlIGNoZWNrIGZvciBwZXJmX2V2ZW50cyBiZWluZyBlbmFibGVkLgorCSAqCisJICogU28gaXQncyBhbiBBQkksIGRvIG5vdCByZW1vdmUhCisJICovCiAJewogCQkucHJvY25hbWUJPSAicGVyZl9ldmVudF9wYXJhbm9pZCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfcGVyZl9ldmVudF9wYXJhbm9pZCwKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGMwMjdkNGYuLmU0YzY5OWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtMTgyLDcgKzE4MiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7Ci0JQlVHX09OKCFkZXYtPmNwdW1hc2spOworCWlmICghZGV2LT5jcHVtYXNrKSB7CisJCVdBUk5fT04obnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpOworCQlkZXYtPmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2V2ZW50c19sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggZmQ2MTk4Ni4uOGNmZjM2MSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTc0OSwxNiArNzQ5LDE1IEBACiAJdW5zaWduZWQgbG9uZyBleHBpcmVzX2xpbWl0LCBtYXNrOwogCWludCBiaXQ7CiAKLQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlczsKLQogCWlmICh0aW1lci0+c2xhY2sgPj0gMCkgewogCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIHRpbWVyLT5zbGFjazsKIAl9IGVsc2UgewotCQl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CisJCWxvbmcgZGVsdGEgPSBleHBpcmVzIC0gamlmZmllczsKIAotCQkvKiBObyBzbGFjaywgaWYgYWxyZWFkeSBleHBpcmVkIGVsc2UgYXV0byBzbGFjayAwLjQlICovCi0JCWlmICh0aW1lX2FmdGVyKGV4cGlyZXMsIG5vdykpCi0JCQlleHBpcmVzX2xpbWl0ID0gZXhwaXJlcyArIChleHBpcmVzIC0gbm93KS8yNTY7CisJCWlmIChkZWx0YSA8IDI1NikKKwkJCXJldHVybiBleHBpcmVzOworCisJCWV4cGlyZXNfbGltaXQgPSBleHBpcmVzICsgZGVsdGEgLyAyNTY7CiAJfQogCW1hc2sgPSBleHBpcmVzIF4gZXhwaXJlc19saW1pdDsKIAlpZiAobWFzayA9PSAwKQpAQCAtNzk1LDYgKzc5NCw4IEBACiAgKi8KIGludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCiB7CisJZXhwaXJlcyA9IGFwcGx5X3NsYWNrKHRpbWVyLCBleHBpcmVzKTsKKwogCS8qCiAJICogVGhpcyBpcyBhIGNvbW1vbiBvcHRpbWl6YXRpb24gdHJpZ2dlcmVkIGJ5IHRoZQogCSAqIG5ldHdvcmtpbmcgY29kZSAtIGlmIHRoZSB0aW1lciBpcyByZS1tb2RpZmllZApAQCAtODAzLDggKzgwNCw2IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpICYmIHRpbWVyLT5leHBpcmVzID09IGV4cGlyZXMpCiAJCXJldHVybiAxOwogCi0JZXhwaXJlcyA9IGFwcGx5X3NsYWNrKHRpbWVyLCBleHBpcmVzKTsKLQogCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcywgZmFsc2UsIFRJTUVSX05PVF9QSU5ORUQpOwogfQogRVhQT1JUX1NZTUJPTChtb2RfdGltZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jIGIva2VybmVsL3RyYWNlL2Z0cmFjZS5jCmluZGV4IDFlZTQxN2YuLjkwODAzOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9mdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKQEAgLTI3NDAsNyArMjc0MCw3IEBACiB7CiAJY2hhciAqZnVuYywgKmNvbW1hbmQsICpuZXh0ID0gYnVmZjsKIAlzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqcDsKLQlpbnQgcmV0OworCWludCByZXQgPSAtRUlOVkFMOwogCiAJZnVuYyA9IHN0cnNlcCgmbmV4dCwgIjoiKTsKIApAQCAtMzMzMCw2ICszMzMwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpwOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCXAgPSBzdGFydDsKQEAgLTMzNDYsNyArMzM0NywxMyBAQAogCQlmdHJhY2VfcmVjb3JkX2lwKGFkZHIpOwogCX0KIAorCS8qCisJICogRGlzYWJsZSBpbnRlcnJ1cHRzIHRvIHByZXZlbnQgaW50ZXJydXB0cyBmcm9tIGV4ZWN1dGluZworCSAqIGNvZGUgdGhhdCBpcyBiZWluZyBtb2RpZmllZC4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZnRyYWNlX3VwZGF0ZV9jb2RlKG1vZCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggZjkyNWM0NS4uMjdkMTNiMyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtMTg3MCw4ICsxODcwLDEyIEBACiAKICNpZmRlZiBDT05GSUdfRlRSQUNFX1NUQVJUVVBfVEVTVAogCi1zdGF0aWMgaW50IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQoaW50IGExLCBpbnQgYTIsIGludCBhMywKLQkJCQkJaW50IGE0LCBpbnQgYTUsIGludCBhNikKKy8qCisgKiBUaGUgIl9fdXNlZCIga2VlcHMgZ2NjIGZyb20gcmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHN5bWJvbAorICogZnJvbSB0aGUga2FsbHN5bXMgdGFibGUuCisgKi8KK3N0YXRpYyBfX3VzZWQgaW50IGtwcm9iZV90cmFjZV9zZWxmdGVzdF90YXJnZXQoaW50IGExLCBpbnQgYTIsIGludCBhMywKKwkJCQkJICAgICAgIGludCBhNCwgaW50IGE1LCBpbnQgYTYpCiB7CiAJcmV0dXJuIGExICsgYTIgKyBhMyArIGE0ICsgYTUgKyBhNjsKIH0KZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IDkzY2EwOGIuLjk5MDkzYjMgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtMTEwLDYgKzExMCwxMSBAQAogX19zZXR1cCgic3dpb3RsYj0iLCBzZXR1cF9pb190bGJfbnBhZ2VzKTsKIC8qIG1ha2UgaW9fdGxiX292ZXJmbG93IHR1bmFibGUgdG9vPyAqLwogCit1bnNpZ25lZCBsb25nIHN3aW9sdGJfbnJfdGJsKHZvaWQpCit7CisJcmV0dXJuIGlvX3RsYl9uc2xhYnM7Cit9CisKIC8qIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yayB3aXRoIGhpZ2htZW0gcGFnZSAqLwogc3RhdGljIGRtYV9hZGRyX3Qgc3dpb3RsYl92aXJ0X3RvX2J1cyhzdHJ1Y3QgZGV2aWNlICpod2RldiwKIAkJCQkgICAgICB2b2xhdGlsZSB2b2lkICphZGRyZXNzKQpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBjMTEyMDU2Li40MzY1ZGYzIDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtNjY2LDYgKzY2Niw4IEBACiAJCQljb2xvbnBvcyA9IGk7CiAJCX0KIAl9CisJaWYgKGxvbmdlc3QgPT0gMSkJCS8qIGRvbid0IGNvbXByZXNzIGEgc2luZ2xlIDAgKi8KKwkJY29sb25wb3MgPSAtMTsKIAogCS8qIGVtaXQgYWRkcmVzcyAqLwogCWZvciAoaSA9IDA7IGkgPCByYW5nZTsgaSsrKSB7CkBAIC04MjYsNyArODI4LDcgQEAKICAqICAgICAgIElQdjQgdXNlcyBkb3Qtc2VwYXJhdGVkIGRlY2ltYWwgd2l0aCBsZWFkaW5nIDAncyAoMDEwLjEyMy4wNDUuMDA2KQogICogLSAnW0lpXTRbaG5ibF0nIElQdjQgYWRkcmVzc2VzIGluIGhvc3QsIG5ldHdvcmssIGJpZyBvciBsaXR0bGUgZW5kaWFuIG9yZGVyCiAgKiAtICdJNmMnIGZvciBJUHY2IGFkZHJlc3NlcyBwcmludGVkIGFzIHNwZWNpZmllZCBieQotICogICAgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi02bWFuLXRleHQtYWRkci1yZXByZXNlbnRhdGlvbi0wMAorICogICAgICAgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTk1MgogICogLSAnVScgRm9yIGEgMTYgYnl0ZSBVVUlEL0dVSUQsIGl0IHByaW50cyB0aGUgVVVJRC9HVUlEIGluIHRoZSBmb3JtCiAgKiAgICAgICAieHh4eHh4eHgteHh4eC14eHh4LXh4eHgteHh4eHh4eHh4eHh4IgogICogICAgICAgT3B0aW9ucyBmb3IgJXBVIGFyZToKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBkN2IxMDU3Li5hODI1MWE4IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0yMDAwLDcgKzIwMDAsNyBAQAogCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX2tpbGxwcml2KGRlbnRyeSk7CiAJaWYgKCFlcnJvciAmJiBraWxsc3VpZCkKIAkJZXJyb3IgPSBfX3JlbW92ZV9zdWlkKGRlbnRyeSwga2lsbHN1aWQpOwotCWlmICghZXJyb3IpCisJaWYgKCFlcnJvciAmJiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19OT1NFQykpCiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9TRUM7CiAKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggZjMzYmIzMS4uNjQwMjQ1OCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCisrKyBiL21tL2h1Z2V0bGIuYwpAQCAtMTAzMywxMCArMTAzMywxMCBAQAogCSAqLwogCWNoZyA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpOwogCWlmIChjaGcgPCAwKQotCQlyZXR1cm4gRVJSX1BUUihjaGcpOworCQlyZXR1cm4gRVJSX1BUUigtVk1fRkFVTFRfT09NKTsKIAlpZiAoY2hnKQogCQlpZiAoaHVnZXRsYl9nZXRfcXVvdGEoaW5vZGUtPmlfbWFwcGluZywgY2hnKSkKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCQkJcmV0dXJuIEVSUl9QVFIoLVZNX0ZBVUxUX1NJR0JVUyk7CiAKIAlzcGluX2xvY2soJmh1Z2V0bGJfbG9jayk7CiAJcGFnZSA9IGRlcXVldWVfaHVnZV9wYWdlX3ZtYShoLCB2bWEsIGFkZHIsIGF2b2lkX3Jlc2VydmUpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IGJjZmE0OTguLmQ5NmUyMjMgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTM2MDQsMTMgKzM2MDQsMTQgQEAKICAqIFJlbGVhc2UgYW4gb2JqIGJhY2sgdG8gaXRzIGNhY2hlLiBJZiB0aGUgb2JqIGhhcyBhIGNvbnN0cnVjdGVkIHN0YXRlLCBpdCBtdXN0CiAgKiBiZSBpbiB0aGlzIHN0YXRlIF9iZWZvcmVfIGl0IGlzIHJlbGVhc2VkLiAgQ2FsbGVkIHdpdGggZGlzYWJsZWQgaW50cy4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwKQorc3RhdGljIGlubGluZSB2b2lkIF9fY2FjaGVfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCB2b2lkICpvYmpwLAorICAgIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjID0gY3B1X2NhY2hlX2dldChjYWNoZXApOwogCiAJY2hlY2tfaXJxX29mZigpOwogCWttZW1sZWFrX2ZyZWVfcmVjdXJzaXZlKG9ianAsIGNhY2hlcC0+ZmxhZ3MpOwotCW9ianAgPSBjYWNoZV9mcmVlX2RlYnVnY2hlY2soY2FjaGVwLCBvYmpwLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworCW9ianAgPSBjYWNoZV9mcmVlX2RlYnVnY2hlY2soY2FjaGVwLCBvYmpwLCBjYWxsZXIpOwogCiAJa21lbWNoZWNrX3NsYWJfZnJlZShjYWNoZXAsIG9ianAsIG9ial9zaXplKGNhY2hlcCkpOwogCkBAIC0zODAxLDcgKzM4MDIsNyBAQAogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9ianAsIG9ial9zaXplKGNhY2hlcCkpOwogCWlmICghKGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX0RFQlVHX09CSkVDVFMpKQogCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqcCwgb2JqX3NpemUoY2FjaGVwKSk7Ci0JX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCk7CisJX19jYWNoZV9mcmVlKGNhY2hlcCwgb2JqcCwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAl0cmFjZV9rbWVtX2NhY2hlX2ZyZWUoX1JFVF9JUF8sIG9ianApOwpAQCAtMzgzMSw3ICszODMyLDcgQEAKIAljID0gdmlydF90b19jYWNoZShvYmpwKTsKIAlkZWJ1Z19jaGVja19ub19sb2Nrc19mcmVlZChvYmpwLCBvYmpfc2l6ZShjKSk7CiAJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9ianAsIG9ial9zaXplKGMpKTsKLQlfX2NhY2hlX2ZyZWUoYywgKHZvaWQgKilvYmpwKTsKKwlfX2NhY2hlX2ZyZWUoYywgKHZvaWQgKilvYmpwLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woa2ZyZWUpOwpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDdiZTAyMjMuLjM1ZjM1MWYgMTAwNjQ0Ci0tLSBhL21tL3NsdWIuYworKysgYi9tbS9zbHViLmMKQEAgLTIzMjAsMTYgKzIzMjAsMTIgQEAKIAlCVUlMRF9CVUdfT04oUEVSQ1BVX0RZTkFNSUNfRUFSTFlfU0laRSA8CiAJCQlTTFVCX1BBR0VfU0hJRlQgKiBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSk7CiAKLSNpZmRlZiBDT05GSUdfQ01QWENIR19MT0NBTAogCS8qCi0JICogTXVzdCBhbGlnbiB0byBkb3VibGUgd29yZCBib3VuZGFyeSBmb3IgdGhlIGRvdWJsZSBjbXB4Y2hnIGluc3RydWN0aW9ucwotCSAqIHRvIHdvcmsuCisJICogTXVzdCBhbGlnbiB0byBkb3VibGUgd29yZCBib3VuZGFyeSBmb3IgdGhlIGRvdWJsZSBjbXB4Y2hnCisJICogaW5zdHJ1Y3Rpb25zIHRvIHdvcms7IHNlZSBfX3BjcHVfZG91YmxlX2NhbGxfcmV0dXJuX2Jvb2woKS4KIAkgKi8KLQlzLT5jcHVfc2xhYiA9IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZV9jcHUpLCAyICogc2l6ZW9mKHZvaWQgKikpOwotI2Vsc2UKLQkvKiBSZWd1bGFyIGFsaWdubWVudCBpcyBzdWZmaWNpZW50ICovCi0Jcy0+Y3B1X3NsYWIgPSBhbGxvY19wZXJjcHUoc3RydWN0IGttZW1fY2FjaGVfY3B1KTsKLSNlbmRpZgorCXMtPmNwdV9zbGFiID0gX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlX2NwdSksCisJCQkJICAgICAyICogc2l6ZW9mKHZvaWQgKikpOwogCiAJaWYgKCFzLT5jcHVfc2xhYikKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggNDE0OTVkYzIuLmZjYzY4NDYgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTIzLDYgKzIzLDMxIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXNrYi0+ZGV2ID0gdmxhbl9kZXY7CisJaWYgKHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX09USEVSSE9TVCkgeworCQkvKiBPdXIgbG93ZXIgbGF5ZXIgdGhpbmtzIHRoaXMgaXMgbm90IGxvY2FsLCBsZXQncyBtYWtlIHN1cmUuCisJCSAqIFRoaXMgYWxsb3dzIHRoZSBWTEFOIHRvIGhhdmUgYSBkaWZmZXJlbnQgTUFDIHRoYW4gdGhlCisJCSAqIHVuZGVybHlpbmcgZGV2aWNlLCBhbmQgc3RpbGwgcm91dGUgY29ycmVjdGx5LiAqLworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGhfaGRyKHNrYiktPmhfZGVzdCwKKwkJCQkJdmxhbl9kZXYtPmRldl9hZGRyKSkKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwl9CisKKwlpZiAoISh2bGFuX2Rldl9pbmZvKHZsYW5fZGV2KS0+ZmxhZ3MgJiBWTEFOX0ZMQUdfUkVPUkRFUl9IRFIpKSB7CisJCXVuc2lnbmVkIGludCBvZmZzZXQgPSBza2ItPmRhdGEgLSBza2JfbWFjX2hlYWRlcihza2IpOworCisJCS8qCisJCSAqIHZsYW5faW5zZXJ0X3RhZyBleHBlY3Qgc2tiLT5kYXRhIHBvaW50aW5nIHRvIG1hYyBoZWFkZXIuCisJCSAqIFNvIGNoYW5nZSBza2ItPmRhdGEgYmVmb3JlIGNhbGxpbmcgaXQgYW5kIGNoYW5nZSBiYWNrIHRvCisJCSAqIG9yaWdpbmFsIHBvc2l0aW9uIGxhdGVyCisJCSAqLworCQlza2JfcHVzaChza2IsIG9mZnNldCk7CisJCXNrYiA9ICpza2JwID0gdmxhbl9pbnNlcnRfdGFnKHNrYiwgc2tiLT52bGFuX3RjaSk7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIGZhbHNlOworCQlza2JfcHVsbChza2IsIG9mZnNldCArIFZMQU5fSExFTik7CisJCXNrYl9yZXNldF9tYWNfbGVuKHNrYik7CisJfQorCiAJc2tiLT5wcmlvcml0eSA9IHZsYW5fZ2V0X2luZ3Jlc3NfcHJpb3JpdHkodmxhbl9kZXYsIHNrYi0+dmxhbl90Y2kpOwogCXNrYi0+dmxhbl90Y2kgPSAwOwogCkBAIC0zMSwyMiArNTYsOCBAQAogCXU2NF9zdGF0c191cGRhdGVfYmVnaW4oJnJ4X3N0YXRzLT5zeW5jcCk7CiAJcnhfc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQlzd2l0Y2ggKHNrYi0+cGt0X3R5cGUpIHsKLQljYXNlIFBBQ0tFVF9CUk9BRENBU1Q6Ci0JCWJyZWFrOwotCWNhc2UgUEFDS0VUX01VTFRJQ0FTVDoKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfTVVMVElDQVNUKQogCQlyeF9zdGF0cy0+cnhfbXVsdGljYXN0Kys7Ci0JCWJyZWFrOwotCWNhc2UgUEFDS0VUX09USEVSSE9TVDoKLQkJLyogT3VyIGxvd2VyIGxheWVyIHRoaW5rcyB0aGlzIGlzIG5vdCBsb2NhbCwgbGV0J3MgbWFrZSBzdXJlLgotCQkgKiBUaGlzIGFsbG93cyB0aGUgVkxBTiB0byBoYXZlIGEgZGlmZmVyZW50IE1BQyB0aGFuIHRoZQotCQkgKiB1bmRlcmx5aW5nIGRldmljZSwgYW5kIHN0aWxsIHJvdXRlIGNvcnJlY3RseS4gKi8KLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoX2hkcihza2IpLT5oX2Rlc3QsCi0JCQkJCXZsYW5fZGV2LT5kZXZfYWRkcikpCi0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0JCWJyZWFrOwotCX0KIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmcnhfc3RhdHMtPnN5bmNwKTsKIAogCXJldHVybiB0cnVlOwpAQCAtODksMTggKzEwMCwxMyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19mcmFncyk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmxhbl9jaGVja19yZW9yZGVyX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHN0cnVjdCBza19idWZmICp2bGFuX3Jlb3JkZXJfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHZsYW5fZGV2X2luZm8oc2tiLT5kZXYpLT5mbGFncyAmIFZMQU5fRkxBR19SRU9SREVSX0hEUikgewotCQlpZiAoc2tiX2Nvdyhza2IsIHNrYl9oZWFkcm9vbShza2IpKSA8IDApCi0JCQlza2IgPSBOVUxMOwotCQlpZiAoc2tiKSB7Ci0JCQkvKiBMaWZ0ZWQgZnJvbSBHbGViJ3MgVkxBTiBjb2RlLi4uICovCi0JCQltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAotCQkJCXNrYi0+ZGF0YSAtIFZMQU5fRVRIX0hMRU4sIDEyKTsKLQkJCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47Ci0JCX0KLQl9CisJaWYgKHNrYl9jb3coc2tiLCBza2JfaGVhZHJvb20oc2tiKSkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwltZW1tb3ZlKHNrYi0+ZGF0YSAtIEVUSF9ITEVOLCBza2ItPmRhdGEgLSBWTEFOX0VUSF9ITEVOLCAyICogRVRIX0FMRU4pOworCXNrYi0+bWFjX2hlYWRlciArPSBWTEFOX0hMRU47CisJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAlyZXR1cm4gc2tiOwogfQogCkBAIC0xNjEsNyArMTY3LDcgQEAKIAlza2JfcHVsbF9yY3N1bShza2IsIFZMQU5fSExFTik7CiAJdmxhbl9zZXRfZW5jYXBfcHJvdG8oc2tiLCB2aGRyKTsKIAotCXNrYiA9IHZsYW5fY2hlY2tfcmVvcmRlcl9oZWFkZXIoc2tiKTsKKwlza2IgPSB2bGFuX3Jlb3JkZXJfaGVhZGVyKHNrYik7CiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlnb3RvIGVycl9mcmVlOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCAzZmExMjMxLi41NjE0OWVjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTEwNCwxMCArMTA0LDE2IEBACiB7CiB9CiAKK3N0YXRpYyB1MzIgKmZha2VfY293X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1bnNpZ25lZCBsb25nIG9sZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGZha2VfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQsCiAJLnByb3RvY29sID0JCWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkudXBkYXRlX3BtdHUgPQkJZmFrZV91cGRhdGVfcG10dSwKKwkuY293X21ldHJpY3MgPQkJZmFrZV9jb3dfbWV0cmljcywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMgYi9uZXQvY2VwaC9vc2RfY2xpZW50LmMKaW5kZXggNmVhMmI4OS4uOWNiNjI3YSAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvb3NkX2NsaWVudC5jCisrKyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwpAQCAtMTE0NCw2ICsxMTQ0LDEzIEBACiAJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGRlbGF5KSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSkKK3sKKwlpZiAocmVxLT5yX3NhZmVfY2FsbGJhY2spCisJCXJlcS0+cl9zYWZlX2NhbGxiYWNrKHJlcSwgTlVMTCk7CisJY29tcGxldGVfYWxsKCZyZXEtPnJfc2FmZV9jb21wbGV0aW9uKTsgIC8qIGZzeW5jIHdhaXRlciAqLworfQorCiAvKgogICogaGFuZGxlIG9zZCBvcCByZXBseS4gIGVpdGhlciBjYWxsIHRoZSBjYWxsYmFjayBpZiBpdCBpcyBzcGVjaWZpZWQsCiAgKiBvciBkbyB0aGUgY29tcGxldGlvbiB0byB3YWtlIHVwIHRoZSB3YWl0aW5nIHRocmVhZC4KQEAgLTEyMjYsMTEgKzEyMzMsOCBAQAogCWVsc2UKIAkJY29tcGxldGVfYWxsKCZyZXEtPnJfY29tcGxldGlvbik7CiAKLQlpZiAoZmxhZ3MgJiBDRVBIX09TRF9GTEFHX09ORElTSykgewotCQlpZiAocmVxLT5yX3NhZmVfY2FsbGJhY2spCi0JCQlyZXEtPnJfc2FmZV9jYWxsYmFjayhyZXEsIG1zZyk7Ci0JCWNvbXBsZXRlX2FsbCgmcmVxLT5yX3NhZmVfY29tcGxldGlvbik7ICAvKiBmc3luYyB3YWl0ZXIgKi8KLQl9CisJaWYgKGZsYWdzICYgQ0VQSF9PU0RfRkxBR19PTkRJU0spCisJCWNvbXBsZXRlX3JlcXVlc3QocmVxKTsKIAogZG9uZToKIAlkb3V0KCJyZXE9JXAgcmVxLT5yX2xpbmdlcj0lZFxuIiwgcmVxLCByZXEtPnJfbGluZ2VyKTsKQEAgLTE3MzIsNiArMTczNiw3IEBACiAJCV9fY2FuY2VsX3JlcXVlc3QocmVxKTsKIAkJX191bnJlZ2lzdGVyX3JlcXVlc3Qob3NkYywgcmVxKTsKIAkJbXV0ZXhfdW5sb2NrKCZvc2RjLT5yZXF1ZXN0X211dGV4KTsKKwkJY29tcGxldGVfcmVxdWVzdChyZXEpOwogCQlkb3V0KCJ3YWl0X3JlcXVlc3QgdGlkICVsbHUgY2FuY2VsZWQvdGltZWQgb3V0XG4iLCByZXEtPnJfdGlkKTsKIAkJcmV0dXJuIHJjOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggOTM5MzA3OC4uOWM1OGMxZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTMxMTQsNyArMzExNCw3IEBACiAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKIAlza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwotCXNrYi0+bWFjX2xlbiA9IHNrYi0+bmV0d29ya19oZWFkZXIgLSBza2ItPm1hY19oZWFkZXI7CisJc2tiX3Jlc2V0X21hY19sZW4oc2tiKTsKIAogCXB0X3ByZXYgPSBOVUxMOwogCkBAIC02MTc4LDYgKzYxNzgsMTEgQEAKIAkJb2xkc2QtPm91dHB1dF9xdWV1ZSA9IE5VTEw7CiAJCW9sZHNkLT5vdXRwdXRfcXVldWVfdGFpbHAgPSAmb2xkc2QtPm91dHB1dF9xdWV1ZTsKIAl9CisJLyogQXBwZW5kIE5BUEkgcG9sbCBsaXN0IGZyb20gb2ZmbGluZSBDUFUuICovCisJaWYgKCFsaXN0X2VtcHR5KCZvbGRzZC0+cG9sbF9saXN0KSkgeworCQlsaXN0X3NwbGljZV9pbml0KCZvbGRzZC0+cG9sbF9saXN0LCAmc2QtPnBvbGxfbGlzdCk7CisJCXJhaXNlX3NvZnRpcnFfaXJxb2ZmKE5FVF9SWF9TT0ZUSVJRKTsKKwl9CiAKIAlyYWlzZV9zb2Z0aXJxX2lycW9mZihORVRfVFhfU09GVElSUSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpAQCAtNjI2NCwyOSArNjI2OSwyMyBAQAogLyoqCiAgKgluZXRkZXZfZHJpdmVybmFtZSAtIG5ldHdvcmsgZHJpdmVyIGZvciB0aGUgZGV2aWNlCiAgKglAZGV2OiBuZXR3b3JrIGRldmljZQotICoJQGJ1ZmZlcjogYnVmZmVyIGZvciByZXN1bHRpbmcgbmFtZQotICoJQGxlbjogc2l6ZSBvZiBidWZmZXIKICAqCiAgKglEZXRlcm1pbmUgbmV0d29yayBkcml2ZXIgZm9yIGRldmljZS4KICAqLwotY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciAqYnVmZmVyLCBpbnQgbGVuKQorY29uc3QgY2hhciAqbmV0ZGV2X2RyaXZlcm5hbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyOwogCWNvbnN0IHN0cnVjdCBkZXZpY2UgKnBhcmVudDsKLQotCWlmIChsZW4gPD0gMCB8fCAhYnVmZmVyKQotCQlyZXR1cm4gYnVmZmVyOwotCWJ1ZmZlclswXSA9IDA7CisJY29uc3QgY2hhciAqZW1wdHkgPSAiIjsKIAogCXBhcmVudCA9IGRldi0+ZGV2LnBhcmVudDsKLQogCWlmICghcGFyZW50KQotCQlyZXR1cm4gYnVmZmVyOworCQlyZXR1cm4gZW1wdHk7CiAKIAlkcml2ZXIgPSBwYXJlbnQtPmRyaXZlcjsKIAlpZiAoZHJpdmVyICYmIGRyaXZlci0+bmFtZSkKLQkJc3RybGNweShidWZmZXIsIGRyaXZlci0+bmFtZSwgbGVuKTsKLQlyZXR1cm4gYnVmZmVyOworCQlyZXR1cm4gZHJpdmVyLT5uYW1lOworCXJldHVybiBlbXB0eTsKIH0KIAogc3RhdGljIGludCBfX25ldGRldl9wcmludGsoY29uc3QgY2hhciAqbGV2ZWwsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKaW5kZXggNmM2Yjg2ZC4uZTQxZTUxMTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYworKysgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKQEAgLTMxMCwxOSArMzEwLDE3IEBACiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJc3RydWN0IG5ldCAqbmV0OwogCi0JbmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKIAlmaWxlID0gcHJvY19uc19mZ2V0KGZkKTsKLQlpZiAoIWZpbGUpCi0JCWdvdG8gb3V0OworCWlmIChJU19FUlIoZmlsZSkpCisJCXJldHVybiBFUlJfQ0FTVChmaWxlKTsKIAogCWVpID0gUFJPQ19JKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAoZWktPm5zX29wcyAhPSAmbmV0bnNfb3BlcmF0aW9ucykKLQkJZ290byBvdXQ7CisJaWYgKGVpLT5uc19vcHMgPT0gJm5ldG5zX29wZXJhdGlvbnMpCisJCW5ldCA9IGdldF9uZXQoZWktPm5zKTsKKwllbHNlCisJCW5ldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAKLQluZXQgPSBnZXRfbmV0KGVpLT5ucyk7Ci1vdXQ6Ci0JaWYgKGZpbGUpCi0JCWZwdXQoZmlsZSk7CisJZnB1dChmaWxlKTsKIAlyZXR1cm4gbmV0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggMmQ3ZDZkNC4uMThkOWNiZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtNzkyLDYgKzc5MiwxMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAobmRldi0+bWFzdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIGlzIGEgc2xhdmUgZGV2aWNlLCBhYm9ydGluZy5cbiIsCisJCSAgICAgICBucC0+bmFtZSwgbnAtPmRldl9uYW1lKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIHB1dDsKKwl9CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJdW5zaWduZWQgbG9uZyBhdG1vc3QsIGF0bGVhc3Q7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggOThhZjM2OS4uYTgwMjRlYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTc5OSw3ICs3OTksOSBAQAogCWludCBjc3VtbW9kZSA9IENIRUNLU1VNX05PTkU7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSAqKWNvcmstPmRzdDsKIAotCWV4dGhkcmxlbiA9IHRyYW5zaGRybGVuID8gcnQtPmRzdC5oZWFkZXJfbGVuIDogMDsKKwlza2IgPSBza2JfcGVla190YWlsKHF1ZXVlKTsKKworCWV4dGhkcmxlbiA9ICFza2IgPyBydC0+ZHN0LmhlYWRlcl9sZW4gOiAwOwogCWxlbmd0aCArPSBleHRoZHJsZW47CiAJdHJhbnNoZHJsZW4gKz0gZXh0aGRybGVuOwogCW10dSA9IGNvcmstPmZyYWdzaXplOwpAQCAtODI1LDggKzgyNyw2IEBACiAJICAgICFleHRoZHJsZW4pCiAJCWNzdW1tb2RlID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAotCXNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpOwotCiAJY29yay0+bGVuZ3RoICs9IGxlbmd0aDsKIAlpZiAoKChsZW5ndGggPiBtdHUpIHx8IChza2IgJiYgc2tiX2lzX2dzbyhza2IpKSkgJiYKIAkgICAgKHNrLT5za19wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9xdWV1ZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKaW5kZXggZDJjMTMxMS4uZjdmOWJkNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMKQEAgLTQwMiw3ICs0MDIsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBfX2lwcV9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHN0YXR1cywgdHlwZSwgcGlkLCBmbGFncywgbmxtc2dsZW4sIHNrYmxlbjsKKwlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzOworCXVuc2lnbmVkIGludCBubG1zZ2xlbiwgc2tibGVuOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCiAJc2tibGVuID0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYwppbmRleCBkNjA5YWMzLi41YzllOTdjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKQEAgLTMwNyw3ICszMDcsNyBAQAogCSAqIGVycm9yIG1lc3NhZ2VzIChSRUxBVEVEKSBhbmQgaW5mb3JtYXRpb24gcmVxdWVzdHMgKHNlZSBiZWxvdykgKi8KIAlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fSUNNUCAmJgogCSAgICAoY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkgICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpKQorCSAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKQogCQlyZXR1cm4gWFRfQ09OVElOVUU7CiAKIAkvKiBpcF9jb25udHJhY2tfaWNtcCBndWFyYW50ZWVzIHVzIHRoYXQgd2Ugb25seSBoYXZlIElDTVBfRUNITywKQEAgLTMyMSwxMiArMzIxLDEyIEBACiAJCQljdC0+bWFyayA9IGhhc2g7CiAJCQlicmVhazsKIAkJY2FzZSBJUF9DVF9SRUxBVEVEOgotCQljYXNlIElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFk6CisJCWNhc2UgSVBfQ1RfUkVMQVRFRF9SRVBMWToKIAkJCS8qIEZJWE1FOiB3ZSBkb24ndCBoYW5kbGUgZXhwZWN0YXRpb25zIGF0IHRoZQogCQkJICogbW9tZW50LiAgdGhleSBjYW4gYXJyaXZlIG9uIGEgZGlmZmVyZW50IG5vZGUgdGhhbgogCQkJICogdGhlIG1hc3RlciBjb25uZWN0aW9uIChlLmcuIEZUUCBwYXNzaXZlIG1vZGUpICovCiAJCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRUQ6Ci0JCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRUQrSVBfQ1RfSVNfUkVQTFk6CisJCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFk6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwppbmRleCBkMmVkOWRjLi45OTMxMTUyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X01BU1FVRVJBREUuYwpAQCAtNjAsNyArNjAsNyBAQAogCW5hdCA9IG5mY3RfbmF0KGN0KTsKIAogCU5GX0NUX0FTU0VSVChjdCAmJiAoY3RpbmZvID09IElQX0NUX05FVyB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCB8fAotCQkJICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpKTsKKwkJCSAgICBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkpOwogCiAJLyogU291cmNlIGFkZHJlc3MgaXMgMC4wLjAuMCAtIGxvY2FsbHkgZ2VuZXJhdGVkIHBhY2tldCB0aGF0IGlzCiAJICogcHJvYmFibHkgbm90IHN1cHBvc2VkIHRvIGJlIG1hc3F1ZXJhZGVkLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKaW5kZXggNWEwM2MwMi4uZGIxMDA3NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCkBAIC0xMDEsNyArMTAxLDcgQEAKIAogCS8qIFRoaXMgaXMgd2hlcmUgd2UgY2FsbCB0aGUgaGVscGVyOiBhcyB0aGUgcGFja2V0IGdvZXMgb3V0LiAqLwogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0JaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRCArIElQX0NUX0lTX1JFUExZKQorCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpCiAJCWdvdG8gb3V0OwogCiAJaGVscCA9IG5mY3RfaGVscChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDc0MDRiZGUuLmFiNWIyN2EgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAkvKiBVcGRhdGUgc2tiIHRvIHJlZmVyIHRvIHRoaXMgY29ubmVjdGlvbiAqLwogCXNrYi0+bmZjdCA9ICZuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpLT5jdF9nZW5lcmFsOwogCXNrYi0+bmZjdGluZm8gPSAqY3RpbmZvOwotCXJldHVybiAtTkZfQUNDRVBUOworCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKIC8qIFNtYWxsIGFuZCBtb2RpZmllZCB2ZXJzaW9uIG9mIGljbXBfcmN2ICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCmluZGV4IDljNzFiMjcuLjMzNDZkZTUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jCkBAIC00MzMsNyArNDMzLDcgQEAKIAogCS8qIE11c3QgYmUgUkVMQVRFRCAqLwogCU5GX0NUX0FTU0VSVChza2ItPm5mY3RpbmZvID09IElQX0NUX1JFTEFURUQgfHwKLQkJICAgICBza2ItPm5mY3RpbmZvID09IElQX0NUX1JFTEFURUQrSVBfQ1RfSVNfUkVQTFkpOworCQkgICAgIHNrYi0+bmZjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSk7CiAKIAkvKiBSZWRpcmVjdHMgb24gbm9uLW51bGwgbmF0cyBtdXN0IGJlIGRyb3BwZWQsIGVsc2UgdGhleSdsbAogCSAgIHN0YXJ0IHRhbGtpbmcgdG8gZWFjaCBvdGhlciB3aXRob3V0IG91ciB0cmFuc2xhdGlvbiwgYW5kIGJlCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwppbmRleCA5OWNmYTI4Li5lYmM1Zjg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJaWYgKCEocnQtPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgJiYKLQkJICAgIHNrYi0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkgeworCQkgICAgKCFza2ItPmRldiB8fCBza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1Y0X0NTVU0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CiAJCQlza2ItPmNzdW1fc3RhcnQgPSBza2JfaGVhZHJvb20oc2tiKSArCiAJCQkJCSAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCAyMWMzMDQyLi43MzNjOWFiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtNTMsNyArNTMsNyBAQAogCiAJLyogQ29ubmVjdGlvbiBtdXN0IGJlIHZhbGlkIGFuZCBuZXcuICovCiAJTkZfQ1RfQVNTRVJUKGN0ICYmIChjdGluZm8gPT0gSVBfQ1RfTkVXIHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEIHx8Ci0JCQkgICAgY3RpbmZvID09IElQX0NUX1JFTEFURUQgKyBJUF9DVF9JU19SRVBMWSkpOworCQkJICAgIGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEX1JFUExZKSk7CiAJTkZfQ1RfQVNTRVJUKHBhci0+b3V0ICE9IE5VTEwpOwogCiAJcmV0dXJuIG5mX25hdF9zZXR1cF9pbmZvKGN0LCAmbXItPnJhbmdlWzBdLCBJUF9OQVRfTUFOSVBfU1JDKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc3RhbmRhbG9uZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKaW5kZXggNzMxN2JkZi4uNDgzYjc2ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zdGFuZGFsb25lLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCiAJc3dpdGNoIChjdGluZm8pIHsKIAljYXNlIElQX0NUX1JFTEFURUQ6Ci0JY2FzZSBJUF9DVF9SRUxBVEVEK0lQX0NUX0lTX1JFUExZOgorCWNhc2UgSVBfQ1RfUkVMQVRFRF9SRVBMWToKIAkJaWYgKGlwX2hkcihza2IpLT5wcm90b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKIAkJCWlmICghbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNsYXRpb24oY3QsIGN0aW5mbywKIAkJCQkJCQkgICBob29rbnVtLCBza2IpKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJZGVmYXVsdDoKIAkJLyogRVNUQUJMSVNIRUQgKi8KIAkJTkZfQ1RfQVNTRVJUKGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRCB8fAotCQkJICAgICBjdGluZm8gPT0gKElQX0NUX0VTVEFCTElTSEVEK0lQX0NUX0lTX1JFUExZKSk7CisJCQkgICAgIGN0aW5mbyA9PSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSk7CiAJfQogCiAJcmV0dXJuIG5mX25hdF9wYWNrZXQoY3QsIGN0aW5mbywgaG9va251bSwgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDUyYjBiOTUuLjA0NWYwZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTMxNiw2ICsxMzE2LDIzIEBACiAJOwogfQogCitzdGF0aWMgYm9vbCBwZWVyX3BtdHVfZXhwaXJlZChzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQoreworCXVuc2lnbmVkIGxvbmcgb3JpZyA9IEFDQ0VTU19PTkNFKHBlZXItPnBtdHVfZXhwaXJlcyk7CisKKwlyZXR1cm4gb3JpZyAmJgorCSAgICAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIG9yaWcpICYmCisJICAgICAgIGNtcHhjaGcoJnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZzsKK30KKworc3RhdGljIGJvb2wgcGVlcl9wbXR1X2NsZWFuZWQoc3RydWN0IGluZXRfcGVlciAqcGVlcikKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWcgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOworCisJcmV0dXJuIG9yaWcgJiYKKwkgICAgICAgY21weGNoZygmcGVlci0+cG10dV9leHBpcmVzLCBvcmlnLCAwKSA9PSBvcmlnOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9lbnRyeSAqaXB2NF9uZWdhdGl2ZV9hZHZpY2Uoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilkc3Q7CkBAIC0xMzMxLDE0ICsxMzQ4LDggQEAKIAkJCQkJCXJ0X2dlbmlkKGRldl9uZXQoZHN0LT5kZXYpKSk7CiAJCQlydF9kZWwoaGFzaCwgcnQpOwogCQkJcmV0ID0gTlVMTDsKLQkJfSBlbHNlIGlmIChydC0+cGVlciAmJgotCQkJICAgcnQtPnBlZXItPnBtdHVfZXhwaXJlcyAmJgotCQkJICAgdGltZV9hZnRlcl9lcShqaWZmaWVzLCBydC0+cGVlci0+cG10dV9leHBpcmVzKSkgewotCQkJdW5zaWduZWQgbG9uZyBvcmlnID0gcnQtPnBlZXItPnBtdHVfZXhwaXJlczsKLQotCQkJaWYgKGNtcHhjaGcoJnJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMsIG9yaWcsIDApID09IG9yaWcpCi0JCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwKLQkJCQkJICAgICAgIHJ0LT5wZWVyLT5wbXR1X29yaWcpOworCQl9IGVsc2UgaWYgKHJ0LT5wZWVyICYmIHBlZXJfcG10dV9leHBpcmVkKHJ0LT5wZWVyKSkgeworCQkJZHN0X21ldHJpY19zZXQoZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE1MzEsOCArMTU0MiwxMCBAQAogCiBzdGF0aWMgdm9pZCBjaGVja19wZWVyX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyKQogewotCXVuc2lnbmVkIGxvbmcgZXhwaXJlcyA9IHBlZXItPnBtdHVfZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOwogCisJaWYgKCFleHBpcmVzKQorCQlyZXR1cm47CiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGV4cGlyZXMpKSB7CiAJCXUzMiBvcmlnX2RzdF9tdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWlmIChwZWVyLT5wbXR1X2xlYXJuZWQgPCBvcmlnX2RzdF9tdHUpIHsKQEAgLTE1NTUsMTAgKzE1NjgsMTEgQEAKIAkJcnRfYmluZF9wZWVyKHJ0LCBydC0+cnRfZHN0LCAxKTsKIAlwZWVyID0gcnQtPnBlZXI7CiAJaWYgKHBlZXIpIHsKKwkJdW5zaWduZWQgbG9uZyBwbXR1X2V4cGlyZXMgPSBBQ0NFU1NfT05DRShwZWVyLT5wbXR1X2V4cGlyZXMpOworCiAJCWlmIChtdHUgPCBpcF9ydF9taW5fcG10dSkKIAkJCW10dSA9IGlwX3J0X21pbl9wbXR1OwotCQlpZiAoIXBlZXItPnBtdHVfZXhwaXJlcyB8fCBtdHUgPCBwZWVyLT5wbXR1X2xlYXJuZWQpIHsKLQkJCXVuc2lnbmVkIGxvbmcgcG10dV9leHBpcmVzOworCQlpZiAoIXBtdHVfZXhwaXJlcyB8fCBtdHUgPCBwZWVyLT5wbXR1X2xlYXJuZWQpIHsKIAogCQkJcG10dV9leHBpcmVzID0gamlmZmllcyArIGlwX3J0X210dV9leHBpcmVzOwogCQkJaWYgKCFwbXR1X2V4cGlyZXMpCkBAIC0xNjEyLDEzICsxNjI2LDE0IEBACiAJCQlydF9iaW5kX3BlZXIocnQsIHJ0LT5ydF9kc3QsIDApOwogCiAJCXBlZXIgPSBydC0+cGVlcjsKLQkJaWYgKHBlZXIgJiYgcGVlci0+cG10dV9leHBpcmVzKQorCQlpZiAocGVlcikgewogCQkJY2hlY2tfcGVlcl9wbXR1KGRzdCwgcGVlcik7CiAKLQkJaWYgKHBlZXIgJiYgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAmJgotCQkgICAgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAhPSBydC0+cnRfZ2F0ZXdheSkgewotCQkJaWYgKGNoZWNrX3BlZXJfcmVkaXIoZHN0LCBwZWVyKSkKLQkJCQlyZXR1cm4gTlVMTDsKKwkJCWlmIChwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCisJCQkgICAgcGVlci0+cmVkaXJlY3RfbGVhcm5lZC5hNCAhPSBydC0+cnRfZ2F0ZXdheSkgeworCQkJCWlmIChjaGVja19wZWVyX3JlZGlyKGRzdCwgcGVlcikpCisJCQkJCXJldHVybiBOVUxMOworCQkJfQogCQl9CiAKIAkJcnQtPnJ0X3BlZXJfZ2VuaWQgPSBydF9wZWVyX2dlbmlkKCk7CkBAIC0xNjQ5LDE0ICsxNjY0LDggQEAKIAlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9IT1NUX1VOUkVBQ0gsIDApOwogCiAJcnQgPSBza2JfcnRhYmxlKHNrYik7Ci0JaWYgKHJ0ICYmCi0JICAgIHJ0LT5wZWVyICYmCi0JICAgIHJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMpIHsKLQkJdW5zaWduZWQgbG9uZyBvcmlnID0gcnQtPnBlZXItPnBtdHVfZXhwaXJlczsKLQotCQlpZiAoY21weGNoZygmcnQtPnBlZXItPnBtdHVfZXhwaXJlcywgb3JpZywgMCkgPT0gb3JpZykKLQkJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7Ci0JfQorCWlmIChydCAmJiBydC0+cGVlciAmJiBwZWVyX3BtdHVfY2xlYW5lZChydC0+cGVlcikpCisJCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX01UVSwgcnQtPnBlZXItPnBtdHVfb3JpZyk7CiB9CiAKIHN0YXRpYyBpbnQgaXBfcnRfYnVnKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNzcwLDggKzE3NzksNyBAQAogCQkJICAgICAgIHNpemVvZih1MzIpICogUlRBWF9NQVgpOwogCQlkc3RfaW5pdF9tZXRyaWNzKCZydC0+ZHN0LCBwZWVyLT5tZXRyaWNzLCBmYWxzZSk7CiAKLQkJaWYgKHBlZXItPnBtdHVfZXhwaXJlcykKLQkJCWNoZWNrX3BlZXJfcG10dSgmcnQtPmRzdCwgcGVlcik7CisJCWNoZWNrX3BlZXJfcG10dSgmcnQtPmRzdCwgcGVlcik7CiAJCWlmIChwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICYmCiAJCSAgICBwZWVyLT5yZWRpcmVjdF9sZWFybmVkLmE0ICE9IHJ0LT5ydF9nYXRld2F5KSB7CiAJCQlydC0+cnRfZ2F0ZXdheSA9IHBlZXItPnJlZGlyZWN0X2xlYXJuZWQuYTQ7CkBAIC0yNzc1LDcgKzI3ODMsOCBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiX3J0YWJsZShza2IpOwogCXN0cnVjdCBydG1zZyAqcjsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKLQlsb25nIGV4cGlyZXM7CisJbG9uZyBleHBpcmVzID0gMDsKKwljb25zdCBzdHJ1Y3QgaW5ldF9wZWVyICpwZWVyID0gcnQtPnBlZXI7CiAJdTMyIGlkID0gMCwgdHMgPSAwLCB0c2FnZSA9IDAsIGVycm9yOwogCiAJbmxoID0gbmxtc2dfcHV0KHNrYiwgcGlkLCBzZXEsIGV2ZW50LCBzaXplb2YoKnIpLCBmbGFncyk7CkBAIC0yODIzLDE1ICsyODMyLDE2IEBACiAJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9NQVJLLCBydC0+cnRfbWFyayk7CiAKIAllcnJvciA9IHJ0LT5kc3QuZXJyb3I7Ci0JZXhwaXJlcyA9IChydC0+cGVlciAmJiBydC0+cGVlci0+cG10dV9leHBpcmVzKSA/Ci0JCXJ0LT5wZWVyLT5wbXR1X2V4cGlyZXMgLSBqaWZmaWVzIDogMDsKLQlpZiAocnQtPnBlZXIpIHsKKwlpZiAocGVlcikgewogCQlpbmV0X3BlZXJfcmVmY2hlY2socnQtPnBlZXIpOwotCQlpZCA9IGF0b21pY19yZWFkKCZydC0+cGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOwotCQlpZiAocnQtPnBlZXItPnRjcF90c19zdGFtcCkgewotCQkJdHMgPSBydC0+cGVlci0+dGNwX3RzOwotCQkJdHNhZ2UgPSBnZXRfc2Vjb25kcygpIC0gcnQtPnBlZXItPnRjcF90c19zdGFtcDsKKwkJaWQgPSBhdG9taWNfcmVhZCgmcGVlci0+aXBfaWRfY291bnQpICYgMHhmZmZmOworCQlpZiAocGVlci0+dGNwX3RzX3N0YW1wKSB7CisJCQl0cyA9IHBlZXItPnRjcF90czsKKwkJCXRzYWdlID0gZ2V0X3NlY29uZHMoKSAtIHBlZXItPnRjcF90c19zdGFtcDsKIAkJfQorCQlleHBpcmVzID0gQUNDRVNTX09OQ0UocGVlci0+cG10dV9leHBpcmVzKTsKKwkJaWYgKGV4cGlyZXMpCisJCQlleHBpcmVzIC09IGppZmZpZXM7CiAJfQogCiAJaWYgKHJ0X2lzX2lucHV0X3JvdXRlKHJ0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggYjc5MTlmOS4uZDQ1MGEyZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNzIsNiArMjcyLDEwIEBACiAKIAlpZiAoYWRkcl9sZW4gPCBTSU42X0xFTl9SRkMyMTMzKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhZGRyLT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlhZGRyX3R5cGUgPSBpcHY2X2FkZHJfdHlwZSgmYWRkci0+c2luNl9hZGRyKTsKIAlpZiAoKGFkZHJfdHlwZSAmIElQVjZfQUREUl9NVUxUSUNBU1QpICYmIHNvY2stPnR5cGUgPT0gU09DS19TVFJFQU0pCiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCmluZGV4IDQxM2FiMDcuLjA2NWZlNDAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKQEAgLTQwMyw3ICs0MDMsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBfX2lwcV9yY3Zfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHN0YXR1cywgdHlwZSwgcGlkLCBmbGFncywgbmxtc2dsZW4sIHNrYmxlbjsKKwlpbnQgc3RhdHVzLCB0eXBlLCBwaWQsIGZsYWdzOworCXVuc2lnbmVkIGludCBubG1zZ2xlbiwgc2tibGVuOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwogCiAJc2tibGVuID0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwppbmRleCBjOGFmNThiLi40MTExMDUwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCiAJLyogVGhpcyBpcyB3aGVyZSB3ZSBjYWxsIHRoZSBoZWxwZXI6IGFzIHRoZSBwYWNrZXQgZ29lcyBvdXQuICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQlpZiAoIWN0IHx8IGN0aW5mbyA9PSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKCFjdCB8fCBjdGluZm8gPT0gSVBfQ1RfUkVMQVRFRF9SRVBMWSkKIAkJZ290byBvdXQ7CiAKIAloZWxwID0gbmZjdF9oZWxwKGN0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCmluZGV4IDFkZjNjOGIuLjdjMDVlN2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJLyogVXBkYXRlIHNrYiB0byByZWZlciB0byB0aGlzIGNvbm5lY3Rpb24gKi8KIAlza2ItPm5mY3QgPSAmbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKS0+Y3RfZ2VuZXJhbDsKIAlza2ItPm5mY3RpbmZvID0gKmN0aW5mbzsKLQlyZXR1cm4gLU5GX0FDQ0VQVDsKKwlyZXR1cm4gTkZfQUNDRVBUOwogfQogCiBzdGF0aWMgaW50CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcC5jIGIvbmV0L2lyZGEvaXJpYXAuYwppbmRleCAzNjQ3NzUzLi5mODc2ZWVkIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcC5jCisrKyBiL25ldC9pcmRhL2lyaWFwLmMKQEAgLTg3LDYgKzg3LDggQEAKIAkJCSBpcmlhcF93YXRjaGRvZ190aW1lcl9leHBpcmVkKTsKIH0KIAorc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcmlhc19vYmplY3RzX2tleTsKKwogLyoKICAqIEZ1bmN0aW9uIGlyaWFwX2luaXQgKHZvaWQpCiAgKgpAQCAtMTE0LDYgKzExNiw5IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCWxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKCZpcmlhc19vYmplY3RzLT5oYl9zcGlubG9jaywgJmlyaWFzX29iamVjdHNfa2V5LAorCQkJCSAgICJpcmlhc19vYmplY3RzIik7CisKIAkvKgogCSAqICBSZWdpc3RlciBzb21lIGRlZmF1bHQgc2VydmljZXMgZm9yIElyTE1QCiAJICovCmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYyBiL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCmluZGV4IGI4ZGJhZTguLjc2MTMwMTMgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCisrKyBiL25ldC9sMnRwL2wydHBfZGVidWdmcy5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAkgKi8KIAlwZC0+bmV0ID0gZ2V0X25ldF9uc19ieV9waWQoY3VycmVudC0+cGlkKTsKIAlpZiAoSVNfRVJSKHBkLT5uZXQpKSB7Ci0JCXJjID0gLVBUUl9FUlIocGQtPm5ldCk7CisJCXJjID0gUFRSX0VSUihwZC0+bmV0KTsKIAkJZ290byBlcnJfZnJlZV9wZDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDQyMWVhYTYuLjU2YzI0Y2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtOTY1LDYgKzk2NSwxMCBAQAogCiAJbXV0ZXhfbG9jaygmc2RhdGEtPnUuaWJzcy5tdHgpOwogCisJc2RhdGEtPnUuaWJzcy5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCW1lbXNldChzZGF0YS0+dS5pYnNzLmJzc2lkLCAwLCBFVEhfQUxFTik7CisJc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiA9IDA7CisKIAlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwogCiAJaWYgKCFhY3RpdmVfaWJzcyAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGlmaWJzcy0+YnNzaWQpKSB7CkBAIC05OTksOCArMTAwMyw2IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAKIAlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT5za2JfcXVldWUpOwotCW1lbXNldChzZGF0YS0+dS5pYnNzLmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0Jc2RhdGEtPnUuaWJzcy5zc2lkX2xlbiA9IDA7CiAKIAlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUuaWJzcy50aW1lcik7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggMjAyNWFmNS4uMDkwYjBlYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTc3NSw5ICs3NzUsNiBAQAogCiAJaW50IHR4X2hlYWRyb29tOyAvKiByZXF1aXJlZCBoZWFkcm9vbSBmb3IgaGFyZHdhcmUvcmFkaW90YXAgKi8KIAotCS8qIGNvdW50IGZvciBrZXlzIG5lZWRpbmcgdGFpbHJvb20gc3BhY2UgYWxsb2NhdGlvbiAqLwotCWludCBjcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudDsKLQogCS8qIFRhc2tsZXQgYW5kIHNrYiBxdWV1ZSB0byBwcm9jZXNzIGNhbGxzIGZyb20gSVJRIG1vZGUuIEFsbCBmcmFtZXMKIAkgKiBhZGRlZCB0byBza2JfcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQsIGJ1dCBmcmFtZXMgaW4KIAkgKiBza2JfcXVldWVfdW5yZWxpYWJsZSBtYXkgYmUgZHJvcHBlZCBpZiB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZXNlCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQ5ZDRmODYuLmRlZTMwYWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC0xMTQ1LDYgKzExNDUsMTAgQEAKIAkJCQkrIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NOwogCW5kZXYtPm5lZWRlZF90YWlscm9vbSA9IElFRUU4MDIxMV9FTkNSWVBUX1RBSUxST09NOwogCisJcmV0ID0gZGV2X2FsbG9jX25hbWUobmRldiwgbmRldi0+bmFtZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKwogCWllZWU4MDIxMV9hc3NpZ25fcGVybV9hZGRyKGxvY2FsLCBuZGV2LCB0eXBlKTsKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIG5kZXYtPnBlcm1fYWRkciwgRVRIX0FMRU4pOwogCVNFVF9ORVRERVZfREVWKG5kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuYyBiL25ldC9tYWM4MDIxMS9rZXkuYwppbmRleCAzMWFmZDcxMi4uZjgyNWUyZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5jCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuYwpAQCAtMTAxLDExICsxMDEsNiBAQAogCiAJaWYgKCFyZXQpIHsKIAkJa2V5LT5mbGFncyB8PSBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKLQotCQlpZiAoISgoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUMpIHx8Ci0JCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpKSkKLQkJCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250LS07Ci0KIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjEsMTAgKzE1Niw2IEBACiAJCQkgIGtleS0+Y29uZi5rZXlpZHgsIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIsIHJldCk7CiAKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKLQotCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKLQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkpCi0JCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CiB9CiAKIHZvaWQgaWVlZTgwMjExX2tleV9yZW1vdmVkKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleV9jb25mKQpAQCAtNDAzLDEwICszOTQsOCBAQAogCQlpZWVlODAyMTFfYWVzX2tleV9mcmVlKGtleS0+dS5jY21wLnRmbSk7CiAJaWYgKGtleS0+Y29uZi5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpCiAJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShrZXktPnUuYWVzX2NtYWMudGZtKTsKLQlpZiAoa2V5LT5sb2NhbCkgeworCWlmIChrZXktPmxvY2FsKQogCQlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlKGtleSk7Ci0JCWtleS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250LS07Ci0JfQogCiAJa2ZyZWUoa2V5KTsKIH0KQEAgLTQ2OCw4ICs0NTcsNiBAQAogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZChrZXkpOwogCi0Ja2V5LT5sb2NhbC0+Y3J5cHRvX3R4X3RhaWxyb29tX25lZWRlZF9jbnQrKzsKLQogCXJldCA9IGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7CiAKIAltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+a2V5X210eCk7CkBAIC01MTEsMTIgKzQ5OCw4IEBACiAKIAltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogCi0Jc2RhdGEtPmxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtleSwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkgewotCQlzZGF0YS0+bG9jYWwtPmNyeXB0b190eF90YWlscm9vbV9uZWVkZWRfY250Kys7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShrZXksICZzZGF0YS0+a2V5X2xpc3QsIGxpc3QpCiAJCWllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKGtleSk7Ci0JfQogCiAJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmtleV9tdHgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21sbWUuYyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKaW5kZXggNDU2Y2NjZi4uZDU5NTI2NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21sbWUuYworKysgYi9uZXQvbWFjODAyMTEvbWxtZS5jCkBAIC0yMzIsOSArMjMyLDYgQEAKIAkJV0FSTl9PTighaWVlZTgwMjExX3NldF9jaGFubmVsX3R5cGUobG9jYWwsIHNkYXRhLCBjaGFubmVsX3R5cGUpKTsKIAl9CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAotCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKLQogCS8qIGNoYW5uZWxfdHlwZSBjaGFuZ2UgYXV0b21hdGljYWxseSBkZXRlY3RlZCAqLwogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOwogCkBAIC0yNDgsOSArMjQ1LDYgQEAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCi0JaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbigmc2RhdGEtPmxvY2FsLT5odywKLQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7Ci0KIAlodF9vcG1vZGUgPSBsZTE2X3RvX2NwdShodGktPm9wZXJhdGlvbl9tb2RlKTsKIAogCS8qIGlmIGJzcyBjb25maWd1cmF0aW9uIGNoYW5nZWQgc3RvcmUgdGhlIG5ldyBvbmUgKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90eC5jIGIvbmV0L21hYzgwMjExL3R4LmMKaW5kZXggNjRlMGY3NS4uMzEwNGM4NCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3R4LmMKKysrIGIvbmV0L21hYzgwMjExL3R4LmMKQEAgLTE0ODAsNyArMTQ4MCwxMiBAQAogewogCWludCB0YWlsX25lZWQgPSAwOwogCi0JaWYgKG1heV9lbmNyeXB0ICYmIGxvY2FsLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudCkgeworCS8qCisJICogVGhpcyBjb3VsZCBiZSBvcHRpbWlzZWQsIGRldmljZXMgdGhhdCBkbyBmdWxsIGhhcmR3YXJlCisJICogY3J5cHRvIChpbmNsdWRpbmcgVEtJUCBNTUlDKSBuZWVkIG5vIHRhaWxyb29tLi4uIEJ1dCB3ZQorCSAqIGhhdmUgbm8gZHJpdmVycyBmb3Igc3VjaCBkZXZpY2VzIGN1cnJlbnRseS4KKwkgKi8KKwlpZiAobWF5X2VuY3J5cHQpIHsKIAkJdGFpbF9uZWVkID0gSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT007CiAJCXRhaWxfbmVlZCAtPSBza2JfdGFpbHJvb20oc2tiKTsKIAkJdGFpbF9uZWVkID0gbWF4X3QoaW50LCB0YWlsX25lZWQsIDApOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCmluZGV4IDgwNDFiZWYuLjQyYWE2NGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCWlmICghYXR0cltJUFNFVF9BVFRSX1NFVE5BTUVdKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBpcF9zZXRfbWF4OyBpKyspIHsKIAkJCWlmIChpcF9zZXRfbGlzdFtpXSAhPSBOVUxMICYmIGlwX3NldF9saXN0W2ldLT5yZWYpIHsKLQkJCQlyZXQgPSBJUFNFVF9FUlJfQlVTWTsKKwkJCQlyZXQgPSAtSVBTRVRfRVJSX0JVU1k7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX2lwcG9ydG5ldC5jCmluZGV4IDQ3NDNlNTQuLjU2NWE3YzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfaXBwb3J0bmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9pcHBvcnRuZXQuYwpAQCAtMTQ2LDggKzE0Niw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ0X2VsZW0gZGF0YSA9Ci0JCXsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfaXBwb3J0bmV0NF9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTQsOCArMzk1LDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwotCXN0cnVjdCBoYXNoX2lwcG9ydG5ldDZfZWxlbSBkYXRhID0KLQkJeyAuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwlzdHJ1Y3QgaGFzaF9pcHBvcnRuZXQ2X2VsZW0gZGF0YSA9IHsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9oYXNoX25ldC5jCmluZGV4IGM0ZGIyMDIuLjJhZWVhYmMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXQuYwpAQCAtMTMxLDcgKzEzMSw5IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwX3NldF9oYXNoICpoID0gc2V0LT5kYXRhOwogCWlwc2V0X2FkdGZuIGFkdGZuID0gc2V0LT52YXJpYW50LT5hZHRbYWR0XTsKLQlzdHJ1Y3QgaGFzaF9uZXQ0X2VsZW0gZGF0YSA9IHsgLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgfHwgSE9TVF9NQVNLIH07CisJc3RydWN0IGhhc2hfbmV0NF9lbGVtIGRhdGEgPSB7CisJCS5jaWRyID0gaC0+bmV0c1swXS5jaWRyID8gaC0+bmV0c1swXS5jaWRyIDogSE9TVF9NQVNLCisJfTsKIAogCWlmIChkYXRhLmNpZHIgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTYsNyArMjk4LDkgQEAKIHsKIAljb25zdCBzdHJ1Y3QgaXBfc2V0X2hhc2ggKmggPSBzZXQtPmRhdGE7CiAJaXBzZXRfYWR0Zm4gYWR0Zm4gPSBzZXQtPnZhcmlhbnQtPmFkdFthZHRdOwotCXN0cnVjdCBoYXNoX25ldDZfZWxlbSBkYXRhID0geyAuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwlzdHJ1Y3QgaGFzaF9uZXQ2X2VsZW0gZGF0YSA9IHsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2hhc2hfbmV0cG9ydC5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKaW5kZXggZDJhNDAzNi4uZTUwZDliYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfaGFzaF9uZXRwb3J0LmMKQEAgLTE0NCw3ICsxNDQsOCBAQAogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDRfZWxlbSBkYXRhID0gewotCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM1Nyw3ICszNTgsOCBAQAogCWNvbnN0IHN0cnVjdCBpcF9zZXRfaGFzaCAqaCA9IHNldC0+ZGF0YTsKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGhhc2hfbmV0cG9ydDZfZWxlbSBkYXRhID0gewotCQkuY2lkciA9IGgtPm5ldHNbMF0uY2lkciB8fCBIT1NUX01BU0sgfTsKKwkJLmNpZHIgPSBoLT5uZXRzWzBdLmNpZHIgPyBoLT5uZXRzWzBdLmNpZHIgOiBIT1NUX01BU0sKKwl9OwogCiAJaWYgKGRhdGEuY2lkciA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCmluZGV4IGJmYTgwOGYuLjU1YWYyMjQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMTc3Miw3ICsxNzcyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX05BVF9TUkMgLSAyLAogCX0sCiAJLyogQWZ0ZXIgcGFja2V0IGZpbHRlcmluZywgZm9yd2FyZCBwYWNrZXQgdGhyb3VnaCBWUy9EUiwgVlMvVFVOLAogCSAqIG9yIFZTL05BVChjaGFuZ2UgZGVzdGluYXRpb24pLCBzbyB0aGF0IGZpbHRlcmluZyBydWxlcyBjYW4gYmUKQEAgLTE3ODIsNyArMTc4Miw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQsCiAJCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gMTAxLAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDEsCiAJfSwKIAkvKiBBZnRlciBtYW5nbGUsIHNjaGVkdWxlIGFuZCBmb3J3YXJkIGxvY2FsIHJlcXVlc3RzICovCiAJewpAQCAtMTc5OCw3ICsxNzk4LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk4LAorCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCkBAIC0xODI0LDcgKzE4MjQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSA5OSwKKwkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9OQVRfU1JDIC0gMiwKIAl9LAogCS8qIEFmdGVyIHBhY2tldCBmaWx0ZXJpbmcsIGZvcndhcmQgcGFja2V0IHRocm91Z2ggVlMvRFIsIFZTL1RVTiwKIAkgKiBvciBWUy9OQVQoY2hhbmdlIGRlc3RpbmF0aW9uKSwgc28gdGhhdCBmaWx0ZXJpbmcgcnVsZXMgY2FuIGJlCkBAIC0xODM0LDcgKzE4MzQsNyBAQAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJCS5wZgkJPSBQRl9JTkVUNiwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSAxMDEsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX1NSQyAtIDEsCiAJfSwKIAkvKiBCZWZvcmUgaXBfdnNfaW4sIGNoYW5nZSBzb3VyY2Ugb25seSBmb3IgVlMvTkFUICovCiAJewpAQCAtMTg0Miw3ICsxODQyLDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCQkucGYJCT0gUEZfSU5FVCwKIAkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gLTk5LAorCQkucHJpb3JpdHkJPSBORl9JUDZfUFJJX05BVF9EU1QgKyAxLAogCX0sCiAJLyogQWZ0ZXIgbWFuZ2xlLCBzY2hlZHVsZSBhbmQgZm9yd2FyZCBsb2NhbCByZXF1ZXN0cyAqLwogCXsKQEAgLTE4NTAsNyArMTg1MCw3IEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLnBmCQk9IFBGX0lORVQ2LAogCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSAtOTgsCisJCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTkFUX0RTVCArIDIsCiAJfSwKIAkvKiBBZnRlciBwYWNrZXQgZmlsdGVyaW5nIChidXQgYmVmb3JlIGlwX3ZzX291dF9pY21wKSwgY2F0Y2ggaWNtcAogCSAqIGRlc3RpbmVkIGZvciAwLjAuMC4wLzAsIHdoaWNoIGlzIGZvciBpbmNvbWluZyBJUFZTIGNvbm5lY3Rpb25zICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggMmUxYzExZi4uZjdhZjhiOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtODUwLDcgKzg1MCw3IEBACiAKIAkvKiBJdCBleGlzdHM7IHdlIGhhdmUgKG5vbi1leGNsdXNpdmUpIHJlZmVyZW5jZS4gKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpID09IElQX0NUX0RJUl9SRVBMWSkgewotCQkqY3RpbmZvID0gSVBfQ1RfRVNUQUJMSVNIRUQgKyBJUF9DVF9JU19SRVBMWTsKKwkJKmN0aW5mbyA9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZOwogCQkvKiBQbGVhc2Ugc2V0IHJlcGx5IGJpdCBpZiB0aGlzIHBhY2tldCBPSyAqLwogCQkqc2V0X3JlcGx5ID0gMTsKIAl9IGVsc2UgewpAQCAtOTIyLDYgKzkyMiw5IEBACiAJCQlyZXQgPSAtcmV0OwogCQkJZ290byBvdXQ7CiAJCX0KKwkJLyogSUNNUFt2Nl0gcHJvdG9jb2wgdHJhY2tlcnMgbWF5IGFzc2lnbiBvbmUgY29ubnRyYWNrLiAqLworCQlpZiAoc2tiLT5uZmN0KQorCQkJZ290byBvdXQ7CiAJfQogCiAJY3QgPSByZXNvbHZlX25vcm1hbF9jdChuZXQsIHRtcGwsIHNrYiwgZGF0YW9mZiwgcGYsIHByb3RvbnVtLApAQCAtMTE0Myw3ICsxMTQ2LDcgQEAKIAkvKiBUaGlzIElDTVAgaXMgaW4gcmV2ZXJzZSBkaXJlY3Rpb24gdG8gdGhlIHBhY2tldCB3aGljaCBjYXVzZWQgaXQgKi8KIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCWlmIChDVElORk8yRElSKGN0aW5mbykgPT0gSVBfQ1RfRElSX09SSUdJTkFMKQotCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEICsgSVBfQ1RfSVNfUkVQTFk7CisJCWN0aW5mbyA9IElQX0NUX1JFTEFURURfUkVQTFk7CiAJZWxzZQogCQljdGluZm8gPSBJUF9DVF9SRUxBVEVEOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCmluZGV4IGUxN2NiN2MuLjZmNTgwMWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwogCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKSB7CiAJCXByX2RlYnVnKCJmdHA6IENvbm50cmFja2luZm8gPSAldVxuIiwgY3RpbmZvKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDE4YjJjZTUuLmYwM2MyZDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC01NzEsMTAgKzU3MSw5IEBACiAJaW50IHJldDsKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpIHsKKwlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKLQl9CisKIAlwcl9kZWJ1ZygibmZfY3RfaDI0NTogc2tibGVuID0gJXVcbiIsIHNrYi0+bGVuKTsKIAogCXNwaW5fbG9ja19iaCgmbmZfaDMyM19sb2NrKTsKQEAgLTExMjUsMTAgKzExMjQsOSBAQAogCWludCByZXQ7CiAKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KLQlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKSB7CisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0JfQorCiAJcHJfZGVidWcoIm5mX2N0X3E5MzE6IHNrYmxlbiA9ICV1XG4iLCBza2ItPmxlbik7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2gzMjNfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19pcmMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCmluZGV4IGIzOTRhYTMuLjRmOTM5MGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2lyYy5jCkBAIC0xMjUsOCArMTI1LDcgQEAKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIFVudGlsIHRoZXJlJ3MgYmVlbiB0cmFmZmljIGJvdGggd2F5cywgZG9uJ3QgbG9vayBpbiBwYWNrZXRzLiAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAkvKiBOb3QgYSBmdWxsIHRjcCBoZWFkZXI/ICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggMDg4OTQ0OC4uMmZkNDU2NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNTE5LDggKzUxOSw3IEBACiAJdV9pbnQxNl90IG1zZzsKIAogCS8qIGRvbid0IGRvIGFueSB0cmFja2luZyBiZWZvcmUgdGNwIGhhbmRzaGFrZSBjb21wbGV0ZSAqLwotCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJaWYgKGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCAmJiBjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRURfUkVQTFkpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAluZXh0aGRyX29mZiA9IHByb3RvZmY7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zYW5lLmMKaW5kZXggZDllMjc3My4uODUwMTgyMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2FuZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NhbmUuYwpAQCAtNzgsNyArNzgsNyBAQAogCWN0X3NhbmVfaW5mbyA9ICZuZmN0X2hlbHAoY3QpLT5oZWxwLmN0X3NhbmVfaW5mbzsKIAkvKiBVbnRpbCB0aGVyZSdzIGJlZW4gdHJhZmZpYyBib3RoIHdheXMsIGRvbid0IGxvb2sgaW4gcGFja2V0cy4gKi8KIAlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCi0JICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCtJUF9DVF9JU19SRVBMWSkKKwkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCiAJLyogTm90IGEgZnVsbCB0Y3AgaGVhZGVyPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwppbmRleCBjYjVhMjg1Li45M2ZhZjZhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYwpAQCAtMTQyMyw3ICsxNDIzLDcgQEAKIAl0eXBlb2YobmZfbmF0X3NpcF9zZXFfYWRqdXN0X2hvb2spIG5mX25hdF9zaXBfc2VxX2FkanVzdDsKIAogCWlmIChjdGluZm8gIT0gSVBfQ1RfRVNUQUJMSVNIRUQgJiYKLQkgICAgY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICsgSVBfQ1RfSVNfUkVQTFkpCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCS8qIE5vIERhdGEgPyAqLwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKaW5kZXggOWNjNDYzNS4uZmUzOWY3ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NvY2tldC5jCkBAIC0xNDMsOSArMTQzLDkgQEAKIAljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCWlmIChjdCAmJiAhbmZfY3RfaXNfdW50cmFja2VkKGN0KSAmJgogCSAgICAoKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QICYmCi0JICAgICAgY3RpbmZvID09IElQX0NUX0lTX1JFUExZICsgSVBfQ1RfRVNUQUJMSVNIRUQpIHx8CisJICAgICAgY3RpbmZvID09IElQX0NUX0VTVEFCTElTSEVEX1JFUExZKSB8fAogCSAgICAgKGlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19JQ01QICYmCi0JICAgICAgY3RpbmZvID09IElQX0NUX0lTX1JFUExZICsgSVBfQ1RfUkVMQVRFRCkpICYmCisJICAgICAgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkpKSAmJgogCSAgICAoY3QtPnN0YXR1cyAmIElQU19TUkNfTkFUX0RPTkUpKSB7CiAKIAkJZGFkZHIgPSBjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUuc3JjLnUzLmlwOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggYmEyNDhkOS4uYzBjM2NkYSAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC04MDQsNiArODA0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWguaDItPnRwX3ZsYW5fdGNpID0gMDsKIAkJfQorCQloLmgyLT50cF9wYWRkaW5nID0gMDsKIAkJaGRybGVuID0gc2l6ZW9mKCpoLmgyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE3MzYsNiArMTczNyw3IEBACiAJCX0gZWxzZSB7CiAJCQlhdXgudHBfdmxhbl90Y2kgPSAwOwogCQl9CisJCWF1eC50cF9wYWRkaW5nID0gMDsKIAkJcHV0X2Ntc2cobXNnLCBTT0xfUEFDS0VULCBQQUNLRVRfQVVYREFUQSwgc2l6ZW9mKGF1eCksICZhdXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCBiMTcyMWQ3Li5iNGM2ODA5IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMjUxLDkgKzI1MSw4IEBACiAJCQl9CiAKIAkJCWlmIChzb21lX3F1ZXVlX3RpbWVkb3V0KSB7Ci0JCQkJY2hhciBkcml2ZXJuYW1lWzY0XTsKIAkJCQlXQVJOX09OQ0UoMSwgS0VSTl9JTkZPICJORVRERVYgV0FUQ0hET0c6ICVzICglcyk6IHRyYW5zbWl0IHF1ZXVlICV1IHRpbWVkIG91dFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBuZXRkZXZfZHJpdmVybmFtZShkZXYsIGRyaXZlcm5hbWUsIDY0KSwgaSk7CisJCQkJICAgICAgIGRldi0+bmFtZSwgbmV0ZGV2X2RyaXZlcm5hbWUoZGV2KSwgaSk7CiAJCQkJZGV2LT5uZXRkZXZfb3BzLT5uZG9fdHhfdGltZW91dChkZXYpOwogCQkJfQogCQkJaWYgKCFtb2RfdGltZXIoJmRldi0+d2F0Y2hkb2dfdGltZXIsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA4OGE1NjVmLi45OGZhOGViIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTM0MDYsMTEgKzM0MDYsMTEgQEAKIAlpID0gMDsKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApIHsKLQkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKLQkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCWlmIChubGFfbGVuKGF0dHIpID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewogCQkJCWVyciA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KKwkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKIAkJCW1lbWNweShyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLCBubGFfZGF0YShhdHRyKSwgbmxhX2xlbihhdHRyKSk7CiAJCQlpKys7CiAJCX0KQEAgLTM1NzIsMTIgKzM1NzIsMTEgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLAogCQkJCSAgICB0bXApIHsKLQkJCXJlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuID0gbmxhX2xlbihhdHRyKTsKLQkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+Ci0JCQkgICAgSUVFRTgwMjExX01BWF9TU0lEX0xFTikgeworCQkJaWYgKG5sYV9sZW4oYXR0cikgPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dF9mcmVlOwogCQkJfQorCQkJcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPSBubGFfbGVuKGF0dHIpOwogCQkJbWVtY3B5KHJlcXVlc3QtPnNzaWRzW2ldLnNzaWQsIG5sYV9kYXRhKGF0dHIpLAogCQkJICAgICAgIG5sYV9sZW4oYXR0cikpOwogCQkJaSsrOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9yZXBsYXkuYyBiL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKaW5kZXggNDdmMWI4Ni4uYjExZWE2OSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9yZXBsYXkuYworKysgYi9uZXQveGZybS94ZnJtX3JlcGxheS5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJCWJpdG5yID0gYml0bnIgJiAweDFGOwogCQkJcmVwbGF5X2Vzbi0+Ym1wW25yXSB8PSAoMVUgPDwgYml0bnIpOwogCQl9IGVsc2UgewotCQkJbnIgPSByZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4+IDU7CisJCQluciA9IChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93IC0gMSkgPj4gNTsKIAkJCWZvciAoaSA9IDA7IGkgPD0gbnI7IGkrKykKIAkJCQlyZXBsYXlfZXNuLT5ibXBbaV0gPSAwOwogCkBAIC00NzEsNyArNDcxLDcgQEAKIAkJCWJpdG5yID0gYml0bnIgJiAweDFGOwogCQkJcmVwbGF5X2Vzbi0+Ym1wW25yXSB8PSAoMVUgPDwgYml0bnIpOwogCQl9IGVsc2UgewotCQkJbnIgPSByZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4+IDU7CisJCQluciA9IChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93IC0gMSkgPj4gNTsKIAkJCWZvciAoaSA9IDA7IGkgPD0gbnI7IGkrKykKIAkJCQlyZXBsYXlfZXNuLT5ibXBbaV0gPSAwOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmFzbS1nZW5lcmljIGIvc2NyaXB0cy9NYWtlZmlsZS5hc20tZ2VuZXJpYwppbmRleCA0OTAxMjJjLi40MGNhZjNjIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmFzbS1nZW5lcmljCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYXNtLWdlbmVyaWMKQEAgLTE3LDYgKzE3LDcgQEAKIGNtZF93cmFwID0gZWNobyAiXCNpbmNsdWRlIDxhc20tZ2VuZXJpYy8kKi5oPiIgPiRACiAKIGFsbDogJChwYXRzdWJzdCAlLCAkKG9iaikvJSwgJChnZW5lcmljLXkpKQorCUA6CiAKICQob2JqKS8lLmg6CiAJJChjYWxsIGNtZCx3cmFwKQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9kZXBtb2Quc2ggYi9zY3JpcHRzL2RlcG1vZC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjAyOWNiCi0tLSAvZGV2L251bGwKKysrIGIvc2NyaXB0cy9kZXBtb2Quc2gKQEAgLTAsMCArMSw0OCBAQAorIyEvYmluL3NoCisjCisjIEEgZGVwbW9kIHdyYXBwZXIgdXNlZCBieSB0aGUgdG9wbGV2ZWwgTWFrZWZpbGUKKworaWYgdGVzdCAkIyAtbmUgMjsgdGhlbgorCWVjaG8gIlVzYWdlOiAkMCAvc2Jpbi9kZXBtb2QgPGtlcm5lbHJlbGVhc2U+IiA+JjIKKwlleGl0IDEKK2ZpCitERVBNT0Q9JDEKK0tFUk5FTFJFTEVBU0U9JDIKKworaWYgISAiJERFUE1PRCIgLVYgMj4vZGV2L251bGwgfCBncmVwIC1xIG1vZHVsZS1pbml0LXRvb2xzOyB0aGVuCisJZWNobyAiV2FybmluZzogeW91IG1heSBuZWVkIHRvIGluc3RhbGwgbW9kdWxlLWluaXQtdG9vbHMiID4mMgorCWVjaG8gIlNlZSBodHRwOi8vd3d3LmNvZGVtb25rZXkub3JnLnVrL2RvY3MvcG9zdC1oYWxsb3dlZW4tMi42LnR4dCIgPiYyCisJc2xlZXAgMQorZmkKKworaWYgISB0ZXN0IC1yIFN5c3RlbS5tYXAgLWEgLXggIiRERVBNT0QiOyB0aGVuCisJZXhpdCAwCitmaQorIyBvbGRlciB2ZXJzaW9ucyBvZiBkZXBtb2QgcmVxdWlyZSB0aGUgdmVyc2lvbiBzdHJpbmcgdG8gc3RhcnQgd2l0aCB0aHJlZQorIyBudW1iZXJzLCBzbyB3ZSBjaGVhdCB3aXRoIGEgc3ltbGluayBoZXJlCitkZXBtb2RfaGFja19uZWVkZWQ9dHJ1ZQorbWtkaXIgLXAgLnRtcF9kZXBtb2QvbGliL21vZHVsZXMvJEtFUk5FTFJFTEVBU0UKK2lmICIkREVQTU9EIiAtYiAudG1wX2RlcG1vZCAkS0VSTkVMUkVMRUFTRSAyPi9kZXYvbnVsbDsgdGhlbgorCWlmIHRlc3QgLWUgLnRtcF9kZXBtb2QvbGliL21vZHVsZXMvJEtFUk5FTFJFTEVBU0UvbW9kdWxlcy5kZXAgLW8gXAorCQktZSAudG1wX2RlcG1vZC9saWIvbW9kdWxlcy8kS0VSTkVMUkVMRUFTRS9tb2R1bGVzLmRlcC5iaW47IHRoZW4KKwkJZGVwbW9kX2hhY2tfbmVlZGVkPWZhbHNlCisJZmkKK2ZpCitpZiAkZGVwbW9kX2hhY2tfbmVlZGVkOyB0aGVuCisJc3ltbGluaz0iJElOU1RBTExfTU9EX1BBVEgvbGliL21vZHVsZXMvOTkuOTguJEtFUk5FTFJFTEVBU0UiCisJbG4gLXMgIiRLRVJORUxSRUxFQVNFIiAiJHN5bWxpbmsiCisJS0VSTkVMUkVMRUFTRT05OS45OC4kS0VSTkVMUkVMRUFTRQorZmkKKworc2V0IC0tIC1hZSAtRiBTeXN0ZW0ubWFwCitpZiB0ZXN0IC1uICIkSU5TVEFMTF9NT0RfUEFUSCI7IHRoZW4KKwlzZXQgLS0gIiRAIiAtYiAiJElOU1RBTExfTU9EX1BBVEgiCitmaQorIiRERVBNT0QiICIkQCIgIiRLRVJORUxSRUxFQVNFIgorcmV0PSQ/CisKK2lmICRkZXBtb2RfaGFja19uZWVkZWQ7IHRoZW4KKwlybSAtZiAiJHN5bWxpbmsiCitmaQorCitleGl0ICRyZXQKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2FwcGFybW9yL2xzbS5jIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKaW5kZXggZWMxYmNlYy4uM2QyZmQxNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKKysrIGIvc2VjdXJpdHkvYXBwYXJtb3IvbHNtLmMKQEAgLTYxMiw3ICs2MTIsNyBAQAogc3RhdGljIGludCBhcHBhcm1vcl90YXNrX3NldHJsaW1pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCXVuc2lnbmVkIGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqbmV3X3JsaW0pCiB7Ci0Jc3RydWN0IGFhX3Byb2ZpbGUgKnByb2ZpbGUgPSBhYV9jdXJyZW50X3Byb2ZpbGUoKTsKKwlzdHJ1Y3QgYWFfcHJvZmlsZSAqcHJvZmlsZSA9IF9fYWFfY3VycmVudF9wcm9maWxlKCk7CiAJaW50IGVycm9yID0gMDsKIAogCWlmICghdW5jb25maW5lZChwcm9maWxlKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBhMGQzODQ1Li4yMDIxOWVmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0xNDc2LDcgKzE0NzYsNiBAQAogCQkJICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgaW5vZGVfc2VjdXJpdHlfc3RydWN0ICppc2VjOwotCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKIAl1MzIgc2lkOwogCiAJdmFsaWRhdGVfY3JlZHMoY3JlZCk7CkBAIC0xNDg3LDE1ICsxNDg2LDIxIEBACiAJc2lkID0gY3JlZF9zaWQoY3JlZCk7CiAJaXNlYyA9IGlub2RlLT5pX3NlY3VyaXR5OwogCi0JaWYgKCFhZHApIHsKLQkJYWRwID0gJmFkOwotCQlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgSU5PREUpOwotCQlhZC51Lmlub2RlID0gaW5vZGU7Ci0JfQotCiAJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgYWRwLCBmbGFncyk7CiB9CiAKK3N0YXRpYyBpbnQgaW5vZGVfaGFzX3Blcm1fbm9hZHAoY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQl1MzIgcGVybXMsCisJCQkJdW5zaWduZWQgZmxhZ3MpCit7CisJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOworCisJQ09NTU9OX0FVRElUX0RBVEFfSU5JVCgmYWQsIElOT0RFKTsKKwlhZC51Lmlub2RlID0gaW5vZGU7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBwZXJtcywgJmFkLCBmbGFncyk7Cit9CisKIC8qIFNhbWUgYXMgaW5vZGVfaGFzX3Blcm0sIGJ1dCBwYXNzIGV4cGxpY2l0IGF1ZGl0IGRhdGEgY29udGFpbmluZwogICAgdGhlIGRlbnRyeSB0byBoZWxwIHRoZSBhdWRpdGluZyBjb2RlIHRvIG1vcmUgZWFzaWx5IGdlbmVyYXRlIHRoZQogICAgcGF0aG5hbWUgaWYgbmVlZGVkLiAqLwpAQCAtMjEyMiw4ICsyMTI3LDggQEAKIAkJCQkJCXN0cnVjdCB0dHlfZmlsZV9wcml2YXRlLCBsaXN0KTsKIAkJCWZpbGUgPSBmaWxlX3ByaXYtPmZpbGU7CiAJCQlpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JCQlpZiAoaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsCi0JCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgTlVMTCwgMCkpIHsKKwkJCWlmIChpbm9kZV9oYXNfcGVybV9ub2FkcChjcmVkLCBpbm9kZSwKKwkJCQkJICAgRklMRV9fUkVBRCB8IEZJTEVfX1dSSVRFLCAwKSkgewogCQkJCWRyb3BfdHR5ID0gMTsKIAkJCX0KIAkJfQpAQCAtMzIyOCw3ICszMjMzLDcgQEAKIAkgKiBuZXcgaW5vZGUgbGFiZWwgb3IgbmV3IHBvbGljeS4KIAkgKiBUaGlzIGNoZWNrIGlzIG5vdCByZWR1bmRhbnQgLSBkbyBub3QgcmVtb3ZlLgogCSAqLwotCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgb3Blbl9maWxlX3RvX2F2KGZpbGUpLCBOVUxMLCAwKTsKKwlyZXR1cm4gaW5vZGVfaGFzX3Blcm1fbm9hZHAoY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgMCk7CiB9CiAKIC8qIHRhc2sgc2VjdXJpdHkgb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9taXNjLmMgYi9zb3VuZC9jb3JlL21pc2MuYwppbmRleCAyYzQxODI1Li5lYjlmZTJlIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL21pc2MuYworKysgYi9zb3VuZC9jb3JlL21pc2MuYwpAQCAtNTgsMjYgKzU4LDYgQEAKIAllbHNlCiAJCXJldHVybiBwYXRoOwogfQotCi0vKiBwcmludCBmaWxlIGFuZCBsaW5lIHdpdGggYSBjZXJ0YWluIHByaW50ayBwcmVmaXggKi8KLXN0YXRpYyBpbnQgcHJpbnRfc25kX3BmeCh1bnNpZ25lZCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKnBhdGgsIGludCBsaW5lLAotCQkJIGNvbnN0IGNoYXIgKmZvcm1hdCkKLXsKLQljb25zdCBjaGFyICpmaWxlID0gc2FuaXR5X2ZpbGVfbmFtZShwYXRoKTsKLQljaGFyIHRtcFtdID0gIjwwPiI7Ci0JY29uc3QgY2hhciAqcGZ4ID0gbGV2ZWwgPyBLRVJOX0RFQlVHIDogS0VSTl9ERUZBVUxUOwotCWludCByZXQgPSAwOwotCi0JaWYgKGZvcm1hdFswXSA9PSAnPCcgJiYgZm9ybWF0WzJdID09ICc+JykgewotCQl0bXBbMV0gPSBmb3JtYXRbMV07Ci0JCXBmeCA9IHRtcDsKLQkJcmV0ID0gMTsKLQl9Ci0JcHJpbnRrKCIlc0FMU0EgJXM6JWQ6ICIsIHBmeCwgZmlsZSwgbGluZSk7Ci0JcmV0dXJuIHJldDsKLX0KLSNlbHNlCi0jZGVmaW5lIHByaW50X3NuZF9wZngobGV2ZWwsIHBhdGgsIGxpbmUsIGZvcm1hdCkJMAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfREVCVUcpIHx8IGRlZmluZWQoQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USykKQEAgLTg1LDE1ICs2NSwyOSBAQAogCQkgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKLQkKKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisJc3RydWN0IHZhX2Zvcm1hdCB2YWY7CisJY2hhciB2ZXJib3NlX2ZtdFtdID0gS0VSTl9ERUZBVUxUICJBTFNBICVzOiVkICVwViI7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19TTkRfREVCVUcJCiAJaWYgKGRlYnVnIDwgbGV2ZWwpCiAJCXJldHVybjsKICNlbmRpZgorCiAJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLQlpZiAocHJpbnRfc25kX3BmeChsZXZlbCwgcGF0aCwgbGluZSwgZm9ybWF0KSkKLQkJZm9ybWF0ICs9IDM7IC8qIHNraXAgdGhlIHByaW50ayBsZXZlbC1wcmVmaXggKi8KKyNpZmRlZiBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLCisJdmFmLmZtdCA9IGZvcm1hdDsKKwl2YWYudmEgPSAmYXJnczsKKwlpZiAoZm9ybWF0WzBdID09ICc8JyAmJiBmb3JtYXRbMl0gPT0gJz4nKSB7CisJCW1lbWNweSh2ZXJib3NlX2ZtdCwgZm9ybWF0LCAzKTsKKwkJdmFmLmZtdCA9IGZvcm1hdCArIDM7CisJfSBlbHNlIGlmIChsZXZlbCkKKwkJbWVtY3B5KHZlcmJvc2VfZm10LCBLRVJOX0RFQlVHLCAzKTsKKwlwcmludGsodmVyYm9zZV9mbXQsIHNhbml0eV9maWxlX25hbWUocGF0aCksIGxpbmUsICZ2YWYpOworI2Vsc2UKIAl2cHJpbnRrKGZvcm1hdCwgYXJncyk7CisjZW5kaWYKIAl2YV9lbmQoYXJncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3NuZF9wcmludGspOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jIGIvc291bmQvcGNpL2FzaWhwaS9ocGlkc3BjZC5jCmluZGV4IGZiMzExZDguLjVjNmVhMTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvaHBpZHNwY2QuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaWRzcGNkLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAkgICAgSFBJX1ZFUl9NSU5PUihIUElfVkVSKSAqIDEwMCArIEhQSV9WRVJfUkVMRUFTRShIUElfVkVSKSkpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJsaW51eC9wY2kuaCIKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzaG9ydCBocGlfZHNwX2NvZGVfb3Blbih1MzIgYWRhcHRlciwgc3RydWN0IGRzcF9jb2RlICpwc19kc3BfY29kZSwKIAl1MzIgKnBvc19lcnJvcl9jb2RlKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCBlYWNkNDkwLi5hN2VjNzAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTIzNCw5ICsxMjM0LDEyIEBACiAJc3ByaW50ZihjaGlwLT50ZWEuYnVzX2luZm8sICJQQ0k6JXMiLCBwY2lfbmFtZShwY2kpKTsKIAlpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID4gMCAmJgogCSAgICAodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgPCA0KSB7Ci0JCWlmIChzbmRfdGVhNTc1eF9pbml0KCZjaGlwLT50ZWEpKQorCQlpZiAoc25kX3RlYTU3NXhfaW5pdCgmY2hpcC0+dGVhKSkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVEVBNTc1eCByYWRpbyBub3QgZm91bmRcbiIpOwotCX0gZWxzZSBpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9UWVBFX01BU0spID09IDApCisJCQlzbmRfZm04MDFfZnJlZShjaGlwKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfSBlbHNlIGlmICgodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgPT0gMCkgewogCQkvKiBhdXRvZGV0ZWN0IHR1bmVyIGNvbm5lY3Rpb24gKi8KIAkJZm9yICh0ZWE1NzV4X3R1bmVyID0gMTsgdGVhNTc1eF90dW5lciA8PSAzOyB0ZWE1NzV4X3R1bmVyKyspIHsKIAkJCWNoaXAtPnRlYTU3NXhfdHVuZXIgPSB0ZWE1NzV4X3R1bmVyOwpAQCAtMTI0Niw2ICsxMjQ5LDEyIEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJaWYgKHRlYTU3NXhfdHVuZXIgPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiVEVBNTc1eCByYWRpbyBub3QgZm91bmRcbiIpOworCQkJc25kX2ZtODAxX2ZyZWUoY2hpcCk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KIAlzdHJsY3B5KGNoaXAtPnRlYS5jYXJkLCBzbmRfZm04MDFfdGVhNTc1eF9ncGlvc1sodGVhNTc1eF90dW5lciAmIFRVTkVSX1RZUEVfTUFTSykgLSAxXS5uYW1lLCBzaXplb2YoY2hpcC0+dGVhLmNhcmQpKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCA2OTZhYzI1Li5kNjk0ZTlkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTUwNiw5ICs1MDYsMTEgQEAKIAkJCQloZGFfbmlkX3QgaHApCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgZnJvbnQsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAorCWlmIChzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBmcm9udCkgJiBBQ19QSU5DQVBfRUFQRCkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgZnJvbnQsIDAsIEFDX1ZFUkJfU0VUX0VBUERfQlRMRU5BQkxFLAogCQkJICAgICFzcGVjLT5pbnZfZWFwZCA/IDB4MDAgOiAweDAyKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBocCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCisJaWYgKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMoY29kZWMsIGhwKSAmIEFDX1BJTkNBUF9FQVBEKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBocCwgMCwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsCiAJCQkgICAgIXNwZWMtPmludl9lYXBkID8gMHgwMCA6IDB4MDIpOwogfQogCkBAIC01MjQsNiArNTI2LDEwIEBACiAJY2FzZSAweDExZDQxODRhOgogCWNhc2UgMHgxMWQ0MTk0YToKIAljYXNlIDB4MTFkNDE5NGI6CisJY2FzZSAweDExZDQxOTg4OgorCWNhc2UgMHgxMWQ0MTk4YjoKKwljYXNlIDB4MTFkNDk4OWE6CisJY2FzZSAweDExZDQ5ODliOgogCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgxMiwgMHgxMSk7CiAJCWJyZWFrOwogCWNhc2UgMHgxMWQ0MTk4MToKQEAgLTUzMywxMiArNTM5LDYgQEAKIAljYXNlIDB4MTFkNDE5ODY6CiAJCWFkMTk4eF9wb3dlcl9lYXBkX3dyaXRlKGNvZGVjLCAweDFiLCAweDFhKTsKIAkJYnJlYWs7Ci0JY2FzZSAweDExZDQxOTg4OgotCWNhc2UgMHgxMWQ0MTk4YjoKLQljYXNlIDB4MTFkNDk4OWE6Ci0JY2FzZSAweDExZDQ5ODliOgotCQlhZDE5OHhfcG93ZXJfZWFwZF93cml0ZShjb2RlYywgMHgyOSwgMHgyMik7Ci0JCWJyZWFrOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDNlNmI5YTguLjY5NGI5ZGFmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC0zMTAyLDYgKzMxMDIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gRzU2MCIsIENYVDUwNjZfQVNVUyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzkzOCwgIkxlbm92byBHNTY1IiwgQ1hUNTA2Nl9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBDWFQ1MDY2X0lERUFQQUQpLCAvKiBGYWxsYmFjayBmb3IgTGVub3ZvcyB3aXRob3V0IGRvY2sgbWljICovCisJU05EX1BDSV9RVUlSSygweDFiMGEsIDB4MjA5MiwgIkN5YmVycG93ZXJQQyBHYW1lciBYcGxvcmVyIE41NzAwMSIsIENYVDUwNjZfQVVUTyksCiAJe30KIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggN2E0ZTEwMC4uNDNmY2ZiZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTExNDEsNiArMTE0MSwxMyBAQAogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBvbjsKIAorCS8qIENvbnRyb2wgSFAgcGlucy9hbXBzIGRlcGVuZGluZyBvbiBtYXN0ZXJfbXV0ZSBzdGF0ZTsKKwkgKiBpbiBnZW5lcmFsLCBIUCBwaW5zL2FtcHMgY29udHJvbCBzaG91bGQgYmUgZW5hYmxlZCBpbiBhbGwgY2FzZXMsCisJICogYnV0IGN1cnJlbnRseSBzZXQgb25seSBmb3IgbWFzdGVyX211dGUsIGp1c3QgdG8gYmUgc2FmZQorCSAqLworCWRvX2F1dG9tdXRlKGNvZGVjLCBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaHBfcGlucyksCisJCSAgICBzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPm1hc3Rlcl9tdXRlLCB0cnVlKTsKKwogCWlmICghc3BlYy0+YXV0b211dGUpCiAJCW9uID0gMDsKIAllbHNlCkBAIC02MjAxLDExICs2MjA4LDYgQEAKIC8qIHVwZGF0ZSBIUCwgbGluZSBhbmQgbW9ubyBvdXQgcGlucyBhY2NvcmRpbmcgdG8gdGhlIG1hc3RlciBzd2l0Y2ggKi8KIHN0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JLyogY2hhbmdlIEhQIHBpbnMgKi8KLQlkb19hdXRvbXV0ZShjb2RlYywgQVJSQVlfU0laRShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpLAotCQkgICAgc3BlYy0+YXV0b2NmZy5ocF9waW5zLCBzcGVjLT5tYXN0ZXJfbXV0ZSwgdHJ1ZSk7CiAJdXBkYXRlX3NwZWFrZXJzKGNvZGVjKTsKIH0KIApAQCAtMTE5MjQsNyArMTE5MjYsNyBAQAogICogIDB4MWIgPSBwb3J0IHJlcGxpY2F0b3IgaGVhZHBob25lIG91dAogICovCiAKLSNkZWZpbmUgQUxDX0hQX0VWRU5UCTB4MzcKKyNkZWZpbmUgQUxDX0hQX0VWRU5UCUFMQzg4MF9IUF9FVkVOVAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhkYV92ZXJiIGFsYzI2Ml9mdWppdHN1X3Vuc29sX3ZlcmJzW10gPSB7CiAJezB4MTQsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBBTENfSFBfRVZFTlR9LApAQCAtMTM4NjAsNiArMTM4NjIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNWIsICJBY2VyIEFzcGlyZSBPbmUiLAogCQkJCQkJQUxDMjY4X0FDRVJfQVNQSVJFX09ORSksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDI1MywgIkRlbGwgT0VNIiwgQUxDMjY4X0RFTEwpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyYjAsICJEZWxsIEluc3Bpcm9uIDkxMCIsIEFMQzI2OF9BVVRPKSwKIAlTTkRfUENJX1FVSVJLX01BU0soMHgxMDI4LCAweGZmZjAsIDB4MDJiMCwKIAkJCSJEZWxsIEluc3Bpcm9uIE1pbmk5L1Zvc3RybyBBOTAiLCBBTEMyNjhfREVMTCksCiAJLyogYWxtb3N0IGNvbXBhdGlibGUgd2l0aCB0b3NoaWJhIGJ1dCB3aXRoIG9wdGlvbmFsIGRpZ2l0YWwgb3V0czsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCmluZGV4IDdmYmZhMDUuLmVkYTk1NWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdG1lbC9hdG1lbF9zc2NfZGFpLmMKKysrIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwpAQCAtODQ4LDkgKzg0OCwxMCBAQAogCWlmIChJU19FUlIoc3NjKSkKIAkJcHJfd2FybigiVW5hYmxlIHRvIHBhcmVudCBBU29DIFNTQyBEQUkgb24gU1NDOiAlbGRcbiIsCiAJCQlQVFJfRVJSKHNzYykpOwotCWVsc2UKKwllbHNlIHsKIAkJc3NjX3BkZXYtPmRldi5wYXJlbnQgPSAmKHNzYy0+cGRldi0+ZGV2KTsKLQlzc2NfZnJlZShzc2MpOworCQlzc2NfZnJlZShzc2MpOworCX0KIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoc3NjX3BkZXYpOwogCWlmIChyZXQgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LWFkMTgzNi5jCmluZGV4IGVhNDk1MWMuLmY3OWQxNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtYWQxODM2LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJLmNwdV9kYWlfbmFtZSA9ICJiZmluLXRkbS4wIiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gImFkMTgzNi1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAiYmZpbi10ZG0tcGNtLWF1ZGlvIiwKLQkJLmNvZGVjX25hbWUgPSAiYWQxODM2LjAiLAorCQkuY29kZWNfbmFtZSA9ICJzcGkwLjQiLAogCQkub3BzID0gJmJmNXh4X2FkMTgzNl9vcHMsCiAJfSwKIAl7CkBAIC04NCw3ICs4NCw3IEBACiAJCS5jcHVfZGFpX25hbWUgPSAiYmZpbi10ZG0uMSIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJhZDE4MzYtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gImJmaW4tdGRtLXBjbS1hdWRpbyIsCi0JCS5jb2RlY19uYW1lID0gImFkMTgzNi4wIiwKKwkJLmNvZGVjX25hbWUgPSAic3BpMC40IiwKIAkJLm9wcyA9ICZiZjV4eF9hZDE4MzZfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmMKaW5kZXggYWI2M2Q1Mi4uNzU0YzQ5NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5jCkBAIC0xNDUsMjIgKzE0NSwyMiBAQAogCS8qIGJpdCBzaXplICovCiAJc3dpdGNoIChwYXJhbXNfZm9ybWF0KHBhcmFtcykpIHsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzE2X0xFOgotCQl3b3JkX2xlbiA9IDM7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzE2OwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNMRToKLQkJd29yZF9sZW4gPSAxOworCQl3b3JkX2xlbiA9IEFEMTgzNl9XT1JEX0xFTl8yMDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MyNF9MRToKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgotCQl3b3JkX2xlbiA9IDA7CisJCXdvcmRfbGVuID0gQUQxODM2X1dPUkRfTEVOXzI0OwogCQlicmVhazsKIAl9CiAKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLAotCQlBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssIHdvcmRfbGVuKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBBRDE4MzZfREFDX0NUUkwxLCBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0ssCisJCXdvcmRfbGVuIDw8IEFEMTgzNl9EQUNfV09SRF9MRU5fT0ZGU0VUKTsKIAotCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsCi0JCUFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywgd29yZF9sZW4pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIEFEMTgzNl9BRENfQ1RSTDIsIEFEMTgzNl9BRENfV09SRF9MRU5fTUFTSywKKwkJd29yZF9sZW4gPDwgQUQxODM2X0FEQ19XT1JEX09GRlNFVCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmggYi9zb3VuZC9zb2MvY29kZWNzL2FkMTgzNi5oCmluZGV4IDg0NTU5NjcuLjlkNmEzZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWQxODM2LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9hZDE4MzYuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0syNTYgICAgICAgKDB4NCA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1NFUkZNVF9QQ0sxMjggICAgICAgKDB4NSA8PCA1KQogI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX01BU0sgICAgICAgMHgxOAorI2RlZmluZSBBRDE4MzZfREFDX1dPUkRfTEVOX09GRlNFVCAgICAgMwogCiAjZGVmaW5lIEFEMTgzNl9EQUNfQ1RSTDIgICAgICAgICAgICAgICAxCiAjZGVmaW5lIEFEMTgzNl9EQUNMMV9NVVRFICAgICAgICAgICAgICAwCkBAIC01MSw2ICs1Miw3IEBACiAjZGVmaW5lIEFEMTgzNl9BRENMMl9NVVRFIAkJMgogI2RlZmluZSBBRDE4MzZfQURDUjJfTVVURSAJCTMKICNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX0xFTl9NQVNLICAgICAgIDB4MzAKKyNkZWZpbmUgQUQxODM2X0FEQ19XT1JEX09GRlNFVCAgICAgICAgIDUKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfTUFTSwkgICAgICAgKDcgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMjU2ICAgICAgICgweDQgPDwgNikKICNkZWZpbmUgQUQxODM2X0FEQ19TRVJGTVRfUENLMTI4ICAgICAgICgweDUgPDwgNikKQEAgLTYwLDQgKzYyLDggQEAKIAogI2RlZmluZSBBRDE4MzZfTlVNX1JFR1MgICAgICAgICAgICAgICAgMTYKIAorI2RlZmluZSBBRDE4MzZfV09SRF9MRU5fMjQgMHgwCisjZGVmaW5lIEFEMTgzNl9XT1JEX0xFTl8yMCAweDEKKyNkZWZpbmUgQUQxODM2X1dPUkRfTEVOXzE2IDB4MgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCmluZGV4IDY3ODU2ODguLjlhNWU2N2MgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwpAQCAtNjgwLDIwICs2ODAsMjUgQEAKICNkZWZpbmUgV004ODA0X0ZPUk1BVFMgKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZNVEJJVF9TMjBfM0xFIHwgXAogCQkJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpCiAKKyNkZWZpbmUgV004ODA0X1JBVEVTIChTTkRSVl9QQ01fUkFURV8zMjAwMCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzY0MDAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV84ODIwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwIHwgXAorCQkgICAgICBTTkRSVl9QQ01fUkFURV8xNzY0MDAgfCBTTkRSVl9QQ01fUkFURV8xOTIwMDApCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHdtODgwNF9kYWkgPSB7CiAJLm5hbWUgPSAid204ODA0LXNwZGlmIiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5yYXRlcyA9IFdNODgwNF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg4MDRfRk9STUFUUywKIAl9LAogCS5jYXB0dXJlID0gewogCQkuc3RyZWFtX25hbWUgPSAiQ2FwdHVyZSIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5yYXRlcyA9IFdNODgwNF9SQVRFUywKIAkJLmZvcm1hdHMgPSBXTTg4MDRfRk9STUFUUywKIAl9LAogCS5vcHMgPSAmd204ODA0X2RhaV9vcHMsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MTUuYwppbmRleCBhMGIxYTcyLi5lMmFiNGZhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkxNS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTE1LmMKQEAgLTE4MzksNyArMTgzOSw3IEBACiAJaW50IG9sZDsKIAogCS8qIERpc2FibGUgU1lTQ0xLIHdoaWxlIHdlIHJlY29uZmlndXJlICovCi0Jb2xkID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MTVfQUlGX0NMT0NLSU5HXzEpOworCW9sZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTE1X0FJRl9DTE9DS0lOR18xKSAmIFdNODkxNV9TWVNDTEtfRU5BOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODkxNV9BSUZfQ0xPQ0tJTkdfMSwKIAkJCSAgICBXTTg5MTVfU1lTQ0xLX0VOQSwgMCk7CiAKQEAgLTIwMzgsNiArMjAzOCw3IEBACiAJCWJyZWFrOwogCWNhc2UgV004OTE1X0ZMTF9NQ0xLMjoKIAkJcmVnID0gMTsKKwkJYnJlYWs7CiAJY2FzZSBXTTg5MTVfRkxMX0RBQ0xSQ0xLMToKIAkJcmVnID0gMjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwppbmRleCBmOTBhZTQyLi41ZTA1ZWVkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKQEAgLTE5OTksMTIgKzE5OTksMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBJZiB0aGUgbGVmdCBQR0EgaXMgZW5hYmxlZCBoaXQgdGhhdCBWVSBiaXQuLi4gKi8KLQlpZiAocmVnX2NhY2hlW1dNODk2Ml9QV1JfTUdNVF8yXSAmIFdNODk2Ml9IUE9VVExfUEdBX0VOQSkKKwlpZiAoc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjJfUFdSX01HTVRfMikgJiBXTTg5NjJfSFBPVVRMX1BHQV9FTkEpCiAJCXJldHVybiBzbmRfc29jX3dyaXRlKGNvZGVjLCBXTTg5NjJfSFBPVVRMX1ZPTFVNRSwKIAkJCQkgICAgIHJlZ19jYWNoZVtXTTg5NjJfSFBPVVRMX1ZPTFVNRV0pOwogCiAJLyogLi4ub3RoZXJ3aXNlIHRoZSByaWdodC4gIFRoZSBWVSBpcyBzdGVyZW8uICovCi0JaWYgKHJlZ19jYWNoZVtXTTg5NjJfUFdSX01HTVRfMl0gJiBXTTg5NjJfSFBPVVRSX1BHQV9FTkEpCisJaWYgKHNuZF9zb2NfcmVhZChjb2RlYywgV004OTYyX1BXUl9NR01UXzIpICYgV004OTYyX0hQT1VUUl9QR0FfRU5BKQogCQlyZXR1cm4gc25kX3NvY193cml0ZShjb2RlYywgV004OTYyX0hQT1VUUl9WT0xVTUUsCiAJCQkJICAgICByZWdfY2FjaGVbV004OTYyX0hQT1VUUl9WT0xVTUVdKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwppbmRleCBlNTViMjk4Li45ZTM3MGQxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtX2h1YnMuYwpAQCAtMjE1LDIzICsyMTUsMjMgQEAKIFNPQ19TSU5HTEVfVExWKCJJTjFMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjFMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjFSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4xUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMVIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfMV8yX1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjFSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUsIDYsIDEsIDApLAogCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJMIFZvbHVtZSIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgMCwgMzEsIDAsCiAJICAgICAgIGlucGdhX3RsdiksCiBTT0NfU0lOR0xFKCJJTjJMIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMSksCi1TT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJMIFpDIFN3aXRjaCIsIFdNODk5M19MRUZUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNiwgMSwgMCksCiAKIFNPQ19TSU5HTEVfVExWKCJJTjJSIFZvbHVtZSIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDAsIDMxLCAwLAogCSAgICAgICBpbnBnYV90bHYpLAogU09DX1NJTkdMRSgiSU4yUiBTd2l0Y2giLCBXTTg5OTNfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FLCA3LCAxLCAxKSwKLVNPQ19TSU5HTEUoIklOMlIgWkMgU3dpdGNoIiwgV004OTkzX1JJR0hUX0xJTkVfSU5QVVRfM180X1ZPTFVNRSwgNywgMSwgMCksCitTT0NfU0lOR0xFKCJJTjJSIFpDIFN3aXRjaCIsIFdNODk5M19SSUdIVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUsIDYsIDEsIDApLAogCiBTT0NfU0lOR0xFX1RMVigiTUlYSU5MIElOMkwgVm9sdW1lIiwgV004OTkzX0lOUFVUX01JWEVSMywgNywgMSwgMCwKIAkgICAgICAgaW5taXhfc3dfdGx2KSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2RtYS5jIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKaW5kZXggMTVkYWMwZi4uNjY4MGMwYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZG1hLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCSAqIHNob3VsZCBhbGxvY2F0ZSBhIERNQSBidWZmZXIgb25seSBmb3IgdGhlIHN0cmVhbXMgdGhhdCBhcmUgdmFsaWQuCiAJICovCiAKLQlpZiAoZGFpLT5kcml2ZXItPnBsYXliYWNrLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMF0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CkBAIC0zMjAsMTMgKzMyMCwxMyBAQAogCQl9CiAJfQogCi0JaWYgKGRhaS0+ZHJpdmVyLT5jYXB0dXJlLmNoYW5uZWxzX21pbikgeworCWlmIChwY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtKSB7CiAJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBjYXJkLT5kZXYsCiAJCQlmc2xfZG1hX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXgsCiAJCQkmcGNtLT5zdHJlYW1zWzFdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCWlmIChyZXQpIHsKLQkJCXNuZF9kbWFfZnJlZV9wYWdlcygmcGNtLT5zdHJlYW1zWzBdLnN1YnN0cmVhbS0+ZG1hX2J1ZmZlcik7CiAJCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbid0IGFsbG9jIGNhcHR1cmUgZG1hIGJ1ZmZlclxuIik7CisJCQlzbmRfZG1hX2ZyZWVfcGFnZXMoJnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW0tPmRtYV9idWZmZXIpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTQ0OSw3ICs0NDksOCBAQAogCWRtYV9wcml2YXRlLT5sZF9idWZfcGh5cyA9IGxkX2J1Zl9waHlzOwogCWRtYV9wcml2YXRlLT5kbWFfYnVmX3BoeXMgPSBzdWJzdHJlYW0tPmRtYV9idWZmZXIuYWRkcjsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiRE1BIiwgZG1hX3ByaXZhdGUpOworCXJldCA9IHJlcXVlc3RfaXJxKGRtYV9wcml2YXRlLT5pcnEsIGZzbF9kbWFfaXNyLCAwLCAiZnNsZG1hLWF1ZGlvIiwKKwkJCSAgZG1hX3ByaXZhdGUpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9yIElSUSAldSAocmV0PSVpKVxuIiwKIAkJCWRtYV9wcml2YXRlLT5pcnEsIHJldCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCmluZGV4IGZmYTA5YjMuLjk5MmE3MzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlpZiAoIWkycykKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKTsKKwlhY3RpdmUgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNDT04pOwogCiAJaWYgKGlzX3NlY29uZGFyeShpMnMpKQogCQlhY3RpdmUgJj0gQ09OX1RYU0RNQV9BQ1RJVkU7CkBAIC0yMjMsNyArMjIzLDcgQEAKIAlpZiAoIWkycykKIAkJcmV0dXJuIGZhbHNlOwogCi0JYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKSAmIENPTl9SWERNQV9BQ1RJVkU7CisJYWN0aXZlID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTQ09OKSAmIENPTl9SWERNQV9BQ1RJVkU7CiAKIAlyZXR1cm4gYWN0aXZlID8gdHJ1ZSA6IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jYWNoZS5jIGIvc291bmQvc29jL3NvYy1jYWNoZS5jCmluZGV4IDA2YjdiODEuLmMwMDVjZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY2FjaGUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNhY2hlLmMKQEAgLTQ2Niw2ICs0NjYsOSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBzbmRfc29jX2dldF9jYWNoZV92YWwoY29uc3Qgdm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IGlkeCwKIAkJdW5zaWduZWQgaW50IHdvcmRfc2l6ZSkKIHsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtMTsKKwogCXN3aXRjaCAod29yZF9zaXplKSB7CiAJY2FzZSAxOiB7CiAJCWNvbnN0IHU4ICpjYWNoZSA9IGJhc2U7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDk5OWJiMDguLjMyYWI3ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC0zMjUsNiArMzI1LDcgQEAKIH0KIAogc3RhdGljIGludCBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCisJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKmtjb250cm9sdywKIAljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa2NvbnRyb2xfbmV3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKiprY29udHJvbCkKIHsKQEAgLTMzNCw2ICszMzUsOCBAQAogCSprY29udHJvbCA9IE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZkYXBtLT5jYXJkLT53aWRnZXRzLCBsaXN0KSB7CisJCWlmICh3ID09IGtjb250cm9sdyB8fCB3LT5kYXBtICE9IGtjb250cm9sdy0+ZGFwbSkKKwkJCWNvbnRpbnVlOwogCQlmb3IgKGkgPSAwOyBpIDwgdy0+bnVtX2tjb250cm9sczsgaSsrKSB7CiAJCQlpZiAoJnctPmtjb250cm9sX25ld3NbaV0gPT0ga2NvbnRyb2xfbmV3KSB7CiAJCQkJaWYgKHctPmtjb250cm9scykKQEAgLTM0Nyw5ICszNTAsOSBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gbWl4ZXIgY29udHJvbCAqLwotc3RhdGljIGludCBkYXBtX25ld19taXhlcihzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCi0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCitzdGF0aWMgaW50IGRhcG1fbmV3X21peGVyKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CiAJaW50IGksIHJldCA9IDA7CiAJc2l6ZV90IG5hbWVfbGVuLCBwcmVmaXhfbGVuOwogCXN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcGF0aDsKQEAgLTQ0Nyw5ICs0NTAsOSBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gbXV4IGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgZGFwbV9uZXdfbXV4KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfbXV4KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogeworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9IHctPmRhcG07CiAJc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoID0gTlVMTDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbDsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkYXBtLT5jYXJkLT5zbmRfY2FyZDsKQEAgLTQ2OCw3ICs0NzEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzaGFyZWQgPSBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChkYXBtLCAmdy0+a2NvbnRyb2xfbmV3c1swXSwKKwlzaGFyZWQgPSBkYXBtX2lzX3NoYXJlZF9rY29udHJvbChkYXBtLCB3LCAmdy0+a2NvbnRyb2xfbmV3c1swXSwKIAkJCQkJICZrY29udHJvbCk7CiAJaWYgKGtjb250cm9sKSB7CiAJCXdsaXN0ID0ga2NvbnRyb2wtPnByaXZhdGVfZGF0YTsKQEAgLTUzMiw4ICs1MzUsNyBAQAogfQogCiAvKiBjcmVhdGUgbmV3IGRhcG0gdm9sdW1lIGNvbnRyb2wgKi8KLXN0YXRpYyBpbnQgZGFwbV9uZXdfcGdhKHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKK3N0YXRpYyBpbnQgZGFwbV9uZXdfcGdhKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQogewogCWlmICh3LT5udW1fa2NvbnRyb2xzKQogCQlkZXZfZXJyKHctPmRhcG0tPmRldiwKQEAgLTE4MjMsMTMgKzE4MjUsMTMgQEAKIAkJY2FzZSBzbmRfc29jX2RhcG1fbWl4ZXI6CiAJCWNhc2Ugc25kX3NvY19kYXBtX21peGVyX25hbWVkX2N0bDoKIAkJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwotCQkJZGFwbV9uZXdfbWl4ZXIoZGFwbSwgdyk7CisJCQlkYXBtX25ld19taXhlcih3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9tdXg6CiAJCWNhc2Ugc25kX3NvY19kYXBtX3ZpcnRfbXV4OgogCQljYXNlIHNuZF9zb2NfZGFwbV92YWx1ZV9tdXg6CiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcjsKLQkJCWRhcG1fbmV3X211eChkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X211eCh3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9hZGM6CiAJCWNhc2Ugc25kX3NvY19kYXBtX2FpZl9vdXQ6CkBAIC0xODQyLDcgKzE4NDQsNyBAQAogCQljYXNlIHNuZF9zb2NfZGFwbV9wZ2E6CiAJCWNhc2Ugc25kX3NvY19kYXBtX291dF9kcnY6CiAJCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcjsKLQkJCWRhcG1fbmV3X3BnYShkYXBtLCB3KTsKKwkJCWRhcG1fbmV3X3BnYSh3KTsKIAkJCWJyZWFrOwogCQljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKIAkJY2FzZSBzbmRfc29jX2RhcG1fb3V0cHV0OgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiLzZmaXJlL2Zpcm13YXJlLmMgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwppbmRleCBkNDdiZWZmLi5hOTE3MTlkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYworKysgYi9zb3VuZC91c2IvNmZpcmUvZmlybXdhcmUuYwpAQCAtMjI3LDYgKzIyNyw3IEBACiAJcmV0ID0gdXNiNmZpcmVfZndfaWhleF9pbml0KGZ3LCByZWMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKHJlYyk7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJyb3IgdmFsaWRhdGluZyBlenVzYiAiCiAJCQkJImZpcm13YXJlICVzLlxuIiwgZnduYW1lKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MuYyBiL3NvdW5kL3VzYi9xdWlya3MuYwppbmRleCAyZTk2OWNiLi4wOTBlMTkzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLmMKKysrIGIvc291bmQvdXNiL3F1aXJrcy5jCkBAIC00MDMsNyArNDAzLDcgQEAKIHN0YXRpYyBpbnQgc25kX3VzYl9jbTYyMDZfYm9vdF9xdWlyayhzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewogCWludCBlcnIsIHJlZzsKLQlpbnQgdmFsW10gPSB7MHgyMDBjLCAweDMwMDAsIDB4ZjgwMCwgMHgxNDNmLCAweDAwMDAsIDB4MzAwMH07CisJaW50IHZhbFtdID0gezB4MjAwNCwgMHgzMDAwLCAweGY4MDAsIDB4MTQzZiwgMHgwMDAwLCAweDMwMDB9OwogCiAJZm9yIChyZWcgPSAwOyByZWcgPCBBUlJBWV9TSVpFKHZhbCk7IHJlZysrKSB7CiAJCWVyciA9IHNuZF91c2JfY20xMDZfd3JpdGVfaW50X3JlZyhkZXYsIHJlZywgdmFsW3JlZ10pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggYjY3MTg2Mi4uMmRhOTE2MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnJfZXZlbnRzW25zeXNjYWxsc10sCiAJCSAgICAgZXhwZWN0ZWRfbnJfZXZlbnRzW25zeXNjYWxsc10sIGksIGo7CiAJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2Vsc1tuc3lzY2FsbHNdLCAqZXZzZWw7Ci0JaW50IHNhbXBsZV9zaXplID0gcGVyZl9zYW1wbGVfc2l6ZShhdHRyLnNhbXBsZV90eXBlKTsKKwlpbnQgc2FtcGxlX3NpemUgPSBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGF0dHIuc2FtcGxlX3R5cGUpOwogCiAJZm9yIChpID0gMDsgaSA8IG5zeXNjYWxsczsgKytpKSB7CiAJCWNoYXIgbmFtZVs2NF07CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCmluZGV4IDI2ZDRkM2YuLjljNWZiNGQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9QRVJGLVZFUlNJT04tR0VOCkBAIC0yMywxMiArMjMsNyBAQAogdGhlbgogCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOwogZWxzZQotCWV2YWwgJChncmVwICdeVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQlldmFsICQoZ3JlcCAnXlBBVENITEVWRUxbWzpzcGFjZTpdXSo9JyAuLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCi0JZXZhbCAkKGdyZXAgJ15TVUJMRVZFTFtbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQlldmFsICQoZ3JlcCAnXkVYVFJBVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKLQotCVZOPSIke1ZFUlNJT059LiR7UEFUQ0hMRVZFTH0uJHtTVUJMRVZFTH0ke0VYVFJBVkVSU0lPTn0iCisJVk49JChtYWtlIC1zQyAuLi8uLiBrZXJuZWx2ZXJzaW9uKQogZmkKIAogVk49JChleHByICIkVk4iIDogdionXCguKlwpJykKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKaW5kZXggMGZlOWFkZi4uM2MxYjhhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMKQEAgLTM1LDIyICszNSw2IEBACiAJcmV0dXJuIHBlcmZfZXZlbnRfX25hbWVzW2lkXTsKIH0KIAotaW50IHBlcmZfc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKQotewotCXU2NCBtYXNrID0gc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9NQVNLOwotCWludCBzaXplID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWlmIChtYXNrICYgKDFVTEwgPDwgaSkpCi0JCQlzaXplKys7Ci0JfQotCi0Jc2l6ZSAqPSBzaXplb2YodTY0KTsKLQotCXJldHVybiBzaXplOwotfQotCiBzdGF0aWMgc3RydWN0IHBlcmZfc2FtcGxlIHN5bnRoX3NhbXBsZSA9IHsKIAkucGlkCSAgID0gLTEsCiAJLnRpZAkgICA9IC0xLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCBjMDgzMzI4Li4xZDdmNjY0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtODIsOCArODIsNiBAQAogCXN0cnVjdCBpcF9jYWxsY2hhaW4gKmNhbGxjaGFpbjsKIH07CiAKLWludCBwZXJmX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSk7Ci0KICNkZWZpbmUgQlVJTERfSURfU0laRSAyMAogCiBzdHJ1Y3QgYnVpbGRfaWRfZXZlbnQgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IDUwYWEzNDguLmIwMjFlYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTEyLDcgKzEyLDYgQEAKICNpbmNsdWRlICJldmxpc3QuaCIKICNpbmNsdWRlICJldnNlbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KIApAQCAtMjU3LDE5ICsyNTYsMTUgQEAKIAlyZXR1cm4gZXZsaXN0LT5tbWFwICE9IE5VTEwgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBfX3BlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCitzdGF0aWMgaW50IF9fcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsCiAJCQkgICAgICAgaW50IGlkeCwgaW50IHByb3QsIGludCBtYXNrLCBpbnQgZmQpCiB7CiAJZXZsaXN0LT5tbWFwW2lkeF0ucHJldiA9IDA7CiAJZXZsaXN0LT5tbWFwW2lkeF0ubWFzayA9IG1hc2s7CiAJZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9IG1tYXAoTlVMTCwgZXZsaXN0LT5tbWFwX2xlbiwgcHJvdCwKIAkJCQkgICAgICBNQVBfU0hBUkVELCBmZCwgMCk7Ci0JaWYgKGV2bGlzdC0+bW1hcFtpZHhdLmJhc2UgPT0gTUFQX0ZBSUxFRCkgewotCQlpZiAoZXZsaXN0LT5jcHVzLT5tYXBbaWR4XSA9PSAtMSAmJiBldnNlbC0+YXR0ci5pbmhlcml0KQotCQkJdWlfX3dhcm5pbmcoIkluaGVyaXQgaXMgbm90IGFsbG93ZWQgb24gcGVyLXRhc2sgIgotCQkJCSAgICAiZXZlbnRzIHVzaW5nIG1tYXAuXG4iKTsKKwlpZiAoZXZsaXN0LT5tbWFwW2lkeF0uYmFzZSA9PSBNQVBfRkFJTEVEKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJcGVyZl9ldmxpc3RfX2FkZF9wb2xsZmQoZXZsaXN0LCBmZCk7CiAJcmV0dXJuIDA7CkBAIC0yODksNyArMjg0LDcgQEAKIAogCQkJCWlmIChvdXRwdXQgPT0gLTEpIHsKIAkJCQkJb3V0cHV0ID0gZmQ7Ci0JCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIGNwdSwKKwkJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBjcHUsCiAJCQkJCQkJCXByb3QsIG1hc2ssIG91dHB1dCkgPCAwKQogCQkJCQkJZ290byBvdXRfdW5tYXA7CiAJCQkJfSBlbHNlIHsKQEAgLTMyOSw3ICszMjQsNyBAQAogCiAJCQlpZiAob3V0cHV0ID09IC0xKSB7CiAJCQkJb3V0cHV0ID0gZmQ7Ci0JCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgdGhyZWFkLAorCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgdGhyZWFkLAogCQkJCQkJCXByb3QsIG1hc2ssIG91dHB1dCkgPCAwKQogCQkJCQlnb3RvIG91dF91bm1hcDsKIAkJCX0gZWxzZSB7CkBAIC00NjAsMzMgKzQ1NSw0NiBAQAogCXJldHVybiAwOwogfQogCi11NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQorYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX3R5cGUoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCiB7Ci0Jc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKLQl1NjQgdHlwZSA9IDA7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvcywgKmZpcnN0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKLQkJaWYgKCF0eXBlKQotCQkJdHlwZSA9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZTsKLQkJZWxzZSBpZiAodHlwZSAhPSBwb3MtPmF0dHIuc2FtcGxlX3R5cGUpCi0JCQlkaWUoIm5vbiBtYXRjaGluZyBzYW1wbGVfdHlwZSIpOworCXBvcyA9IGZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwkJaWYgKGZpcnN0LT5hdHRyLnNhbXBsZV90eXBlICE9IHBvcy0+YXR0ci5zYW1wbGVfdHlwZSkKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHlwZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordTY0IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZmlyc3Q7CisKKwlmaXJzdCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKKwlyZXR1cm4gZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGU7Cit9CisKK2Jvb2wgcGVyZl9ldmxpc3RfX3ZhbGlkX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvcywgKmZpcnN0OworCisJcG9zID0gZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHBvcywgJmV2bGlzdC0+ZW50cmllcywgbm9kZSkgeworCQlpZiAoZmlyc3QtPmF0dHIuc2FtcGxlX2lkX2FsbCAhPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKIHsKLQlib29sIHZhbHVlID0gZmFsc2UsIGZpcnN0ID0gdHJ1ZTsKLQlzdHJ1Y3QgcGVyZl9ldnNlbCAqcG9zOworCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7Ci0JCWlmIChmaXJzdCkgewotCQkJdmFsdWUgPSBwb3MtPmF0dHIuc2FtcGxlX2lkX2FsbDsKLQkJCWZpcnN0ID0gZmFsc2U7Ci0JCX0gZWxzZSBpZiAodmFsdWUgIT0gcG9zLT5hdHRyLnNhbXBsZV9pZF9hbGwpCi0JCQlkaWUoIm5vbiBtYXRjaGluZyBzYW1wbGVfaWRfYWxsIik7Ci0JfQotCi0JcmV0dXJuIHZhbHVlOworCWZpcnN0ID0gbGlzdF9lbnRyeShldmxpc3QtPmVudHJpZXMubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOworCXJldHVybiBmaXJzdC0+YXR0ci5zYW1wbGVfaWRfYWxsOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCmluZGV4IDBhMWVmMWYuLmIyYjg2MjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKQEAgLTY2LDcgKzY2LDkgQEAKIHZvaWQgcGVyZl9ldmxpc3RfX2RlbGV0ZV9tYXBzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKIGludCBwZXJmX2V2bGlzdF9fc2V0X2ZpbHRlcnMoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwogCi11NjQgcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKLWJvb2wgcGVyZl9ldmxpc3RfX3NhbXBsZV9pZF9hbGwoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOwordTY0IHBlcmZfZXZsaXN0X19zYW1wbGVfdHlwZShjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7Citib29sIHBlcmZfZXZsaXN0X19zYW1wbGVfaWRfYWxsKGNvbnN0IGNvbnN0IHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KTsKIAorYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX3R5cGUoY29uc3Qgc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpOworYm9vbCBwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX2lkX2FsbChjb25zdCBzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiAjZW5kaWYgLyogX19QRVJGX0VWTElTVF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCmluZGV4IGNjYTI5ZWQuLjAyMzllYjggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jCkBAIC0xNSw2ICsxNSwyMiBAQAogCiAjZGVmaW5lIEZEKGUsIHgsIHkpICgqKGludCAqKXh5YXJyYXlfX2VudHJ5KGUtPmZkLCB4LCB5KSkKIAoraW50IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUodTY0IHNhbXBsZV90eXBlKQoreworCXU2NCBtYXNrID0gc2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9NQVNLOworCWludCBzaXplID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisJCWlmIChtYXNrICYgKDFVTEwgPDwgaSkpCisJCQlzaXplKys7CisJfQorCisJc2l6ZSAqPSBzaXplb2YodTY0KTsKKworCXJldHVybiBzaXplOworfQorCiB2b2lkIHBlcmZfZXZzZWxfX2luaXQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAogCQkgICAgICBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLCBpbnQgaWR4KQogewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmggYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaAppbmRleCBmNzliYjJjLi43ZTkzNjZlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaApAQCAtMTQ5LDQgKzE0OSwxMSBAQAogCXJldHVybiBfX3BlcmZfZXZzZWxfX3JlYWQoZXZzZWwsIG5jcHVzLCBudGhyZWFkcywgdHJ1ZSk7CiB9CiAKK2ludCBfX3BlcmZfZXZzZWxfX3NhbXBsZV9zaXplKHU2NCBzYW1wbGVfdHlwZSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IHBlcmZfZXZzZWxfX3NhbXBsZV9zaXplKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCkKK3sKKwlyZXR1cm4gX19wZXJmX2V2c2VsX19zYW1wbGVfc2l6ZShldnNlbC0+YXR0ci5zYW1wbGVfdHlwZSk7Cit9CisKICNlbmRpZiAvKiBfX1BFUkZfRVZTRUxfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCmluZGV4IDY5NDM2YjMuLmE5YWMwNTAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTY3NCw3ICs2NzQsNyBAQAogCXN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0ID0gJnBldmxpc3QtPmV2bGlzdDsKIAl1bmlvbiBwZXJmX2V2ZW50ICpldmVudDsKIAlpbnQgc2FtcGxlX2lkX2FsbCA9IDEsIGNwdTsKLQlzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InNhbXBsZV9pZF9hbGwiLCBOVUxMLCBOVUxMfTsKKwlzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImNwdSIsICJzYW1wbGVfaWRfYWxsIiwgTlVMTCwgTlVMTH07CiAJaW50IGVycjsKIAogCWlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIml8aSIsIGt3bGlzdCwKQEAgLTY5MiwxNiArNjkyLDE0IEBACiAKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2bGlzdC0+ZW50cmllcy5uZXh0LCBzdHJ1Y3QgcGVyZl9ldnNlbCwgbm9kZSk7CiAJCWVyciA9IHBlcmZfZXZlbnRfX3BhcnNlX3NhbXBsZShldmVudCwgZmlyc3QtPmF0dHIuc2FtcGxlX3R5cGUsCi0JCQkJCSAgICAgICBwZXJmX3NhbXBsZV9zaXplKGZpcnN0LT5hdHRyLnNhbXBsZV90eXBlKSwKKwkJCQkJICAgICAgIHBlcmZfZXZzZWxfX3NhbXBsZV9zaXplKGZpcnN0KSwKIAkJCQkJICAgICAgIHNhbXBsZV9pZF9hbGwsICZwZXZlbnQtPnNhbXBsZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByX2VycigiQ2FuJ3QgcGFyc2Ugc2FtcGxlLCBlcnIgPSAlZFxuIiwgZXJyKTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0KKwkJaWYgKGVycikKKwkJCXJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwKKwkJCQkJICAgICJwZXJmOiBjYW4ndCBwYXJzZSBzYW1wbGUsIGVycj0lZCIsIGVycik7CiAJCXJldHVybiBweWV2ZW50OwogCX0KLWVuZDoKKwogCVB5X0lOQ1JFRihQeV9Ob25lKTsKIAlyZXR1cm4gUHlfTm9uZTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IDY0NTAwZmMuLmY1YThmYmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtNTgsNiArNTgsMTYgQEAKIAkJZ290byBvdXRfY2xvc2U7CiAJfQogCisJaWYgKCFwZXJmX2V2bGlzdF9fdmFsaWRfc2FtcGxlX3R5cGUoc2VsZi0+ZXZsaXN0KSkgeworCQlwcl9lcnIoIm5vbiBtYXRjaGluZyBzYW1wbGVfdHlwZSIpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKKwlpZiAoIXBlcmZfZXZsaXN0X192YWxpZF9zYW1wbGVfaWRfYWxsKHNlbGYtPmV2bGlzdCkpIHsKKwkJcHJfZXJyKCJub24gbWF0Y2hpbmcgc2FtcGxlX2lkX2FsbCIpOworCQlnb3RvIG91dF9jbG9zZTsKKwl9CisKIAlzZWxmLT5zaXplID0gaW5wdXRfc3RhdC5zdF9zaXplOwogCXJldHVybiAwOwogCkBAIC05Nyw3ICsxMDcsNyBAQAogdm9pZCBwZXJmX3Nlc3Npb25fX3VwZGF0ZV9zYW1wbGVfdHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmKQogewogCXNlbGYtPnNhbXBsZV90eXBlID0gcGVyZl9ldmxpc3RfX3NhbXBsZV90eXBlKHNlbGYtPmV2bGlzdCk7Ci0Jc2VsZi0+c2FtcGxlX3NpemUgPSBwZXJmX3NhbXBsZV9zaXplKHNlbGYtPnNhbXBsZV90eXBlKTsKKwlzZWxmLT5zYW1wbGVfc2l6ZSA9IF9fcGVyZl9ldnNlbF9fc2FtcGxlX3NpemUoc2VsZi0+c2FtcGxlX3R5cGUpOwogCXNlbGYtPnNhbXBsZV9pZF9hbGwgPSBwZXJmX2V2bGlzdF9fc2FtcGxlX2lkX2FsbChzZWxmLT5ldmxpc3QpOwogCXBlcmZfc2Vzc2lvbl9faWRfaGVhZGVyX3NpemUoc2VsZik7CiB9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAyMmNkYjk2Li45NmViYzA2IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ2NywxMiArNDY3LDggQEAKIAkJaWYgKCFrdm0tPmJ1c2VzW2ldKQogCQkJZ290byBvdXRfZXJyOwogCX0KKwogCXNwaW5fbG9ja19pbml0KCZrdm0tPm1tdV9sb2NrKTsKLQotCXIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTsKLQlpZiAocikKLQkJZ290byBvdXRfZXJyOwotCiAJa3ZtLT5tbSA9IGN1cnJlbnQtPm1tOwogCWF0b21pY19pbmMoJmt2bS0+bW0tPm1tX2NvdW50KTsKIAlrdm1fZXZlbnRmZF9pbml0KGt2bSk7CkBAIC00ODAsNiArNDc2LDExIEBACiAJbXV0ZXhfaW5pdCgma3ZtLT5pcnFfbG9jayk7CiAJbXV0ZXhfaW5pdCgma3ZtLT5zbG90c19sb2NrKTsKIAlhdG9taWNfc2V0KCZrdm0tPnVzZXJzX2NvdW50LCAxKTsKKworCXIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTsKKwlpZiAocikKKwkJZ290byBvdXRfZXJyOworCiAJcmF3X3NwaW5fbG9jaygma3ZtX2xvY2spOwogCWxpc3RfYWRkKCZrdm0tPnZtX2xpc3QsICZ2bV9saXN0KTsKIAlyYXdfc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKQEAgLTY1MSw3ICs2NTIsOSBAQAogCS8qIFdlIGNhbiByZWFkIHRoZSBndWVzdCBtZW1vcnkgd2l0aCBfX3h4eF91c2VyKCkgbGF0ZXIgb24uICovCiAJaWYgKHVzZXJfYWxsb2MgJiYKIAkgICAgKChtZW0tPnVzZXJzcGFjZV9hZGRyICYgKFBBR0VfU0laRSAtIDEpKSB8fAotCSAgICAgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG1lbS0+dXNlcnNwYWNlX2FkZHIsIG1lbS0+bWVtb3J5X3NpemUpKSkKKwkgICAgICFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLAorCQkJKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpbWVtLT51c2Vyc3BhY2VfYWRkciwKKwkJCW1lbS0+bWVtb3J5X3NpemUpKSkKIAkJZ290byBvdXQ7CiAJaWYgKG1lbS0+c2xvdCA+PSBLVk1fTUVNT1JZX1NMT1RTICsgS1ZNX1BSSVZBVEVfTUVNX1NMT1RTKQogCQlnb3RvIG91dDsK