ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVkYWFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0wLDAgKzEsNTYgQEAKK0RDQ1AgcHJvdG9jb2wKKz09PT09PT09PT09PQorCitMYXN0IHVwZGF0ZWQ6IDEwIE5vdmVtYmVyIDIwMDUKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW50cm9kdWN0aW9uCistIE1pc3NpbmcgZmVhdHVyZXMKKy0gU29ja2V0IG9wdGlvbnMKKy0gTm90ZXMKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworRGF0YWdyYW0gQ29uZ2VzdGlvbiBDb250cm9sIFByb3RvY29sIChEQ0NQKSBpcyBhbiB1bnJlbGlhYmxlLCBjb25uZWN0aW9uCitiYXNlZCBwcm90b2NvbCBkZXNpZ25lZCB0byBzb2x2ZSBpc3N1ZXMgcHJlc2VudCBpbiBVRFAgYW5kIFRDUCBwYXJ0aWN1bGFybHkKK2ZvciByZWFsIHRpbWUgYW5kIG11bHRpbWVkaWEgdHJhZmZpYy4KKworSXQgaGFzIGEgYmFzZSBwcm90b2NvbCBhbmQgcGx1Z2dhYmxlIGNvbmdlc3Rpb24gY29udHJvbCBJRHMgKENDSURzKS4KKworSXQgaXMgYXQgZHJhZnQgUkZDIHN0YXR1cyBhbmQgdGhlIGhvbWVwYWdlIGZvciBEQ0NQIGFzIGEgcHJvdG9jb2wgaXMgYXQ6CisJaHR0cDovL3d3dy5pY2lyLm9yZy9rb2hsZXIvZGNwLworCitNaXNzaW5nIGZlYXR1cmVzCis9PT09PT09PT09PT09PT09CisKK1RoZSBEQ0NQIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGN1cnJlbnRseSBoYXZlIGFsbCB0aGUgZmVhdHVyZXMgdGhhdCBhcmUgaW4KK3RoZSBkcmFmdCBSRkMuCisKK0luIHBhcnRpY3VsYXIgdGhlIGZvbGxvd2luZyBhcmUgbWlzc2luZzoKKy0gQ0NJRDIgc3VwcG9ydAorLSBmZWF0dXJlIG5lZ290aWF0aW9uCisKK1doZW4gdGVzdGluZyBhZ2FpbnN0IG90aGVyIGltcGxlbWVudGF0aW9ucyBpdCBhcHBlYXJzIHRoYXQgZWxhcHNlZCB0aW1lCitvcHRpb25zIGFyZSBub3QgY29kZWQgY29tcGxpYW50IHRvIHRoZSBzcGVjaWZpY2F0aW9uLgorCitTb2NrZXQgb3B0aW9ucworPT09PT09PT09PT09PT0KKworRENDUF9TT0NLT1BUX1BBQ0tFVF9TSVpFIGlzIHVzZWQgZm9yIENDSUQzIHRvIHNldCBkZWZhdWx0IHBhY2tldCBzaXplIGZvcgorY2FsY3VsYXRpb25zLgorCitEQ0NQX1NPQ0tPUFRfU0VSVklDRSBzZXRzIHRoZSBzZXJ2aWNlLiBUaGlzIGlzIGNvbXB1bHNvcnkgYXMgcGVyIHRoZQorc3BlY2lmaWNhdGlvbi4gSWYgeW91IGRvbid0IHNldCBpdCB5b3Ugd2lsbCBnZXQgRVBST1RPLgorCitOb3RlcworPT09PT0KKworU0VMaW51eCBkb2VzIG5vdCB5ZXQgaGF2ZSBzdXBwb3J0IGZvciBEQ0NQLiBZb3Ugd2lsbCBuZWVkIHRvIHR1cm4gaXQgb2ZmIG9yCitlbHNlIHlvdSB3aWxsIGdldCBFQUNDRVMuCisKK0RDQ1AgZG9lcyBub3QgdHJhdmVsIHRocm91Z2ggTkFUIHN1Y2Nlc3NmdWxseSBhdCBwcmVzZW50LiBUaGlzIGlzIGJlY2F1c2UKK3RoZSBjaGVja3N1bSBjb3ZlcnMgdGhlIHBzdWVkby1oZWFkZXIgYXMgcGVyIFRDUCBhbmQgVURQLiBJdCBzaG91bGQgYmUKK3JlbGF0aXZlbHkgdHJpdmlhbCB0byBhZGQgTGludXggTkFUIHN1cHBvcnQgZm9yIERDQ1AuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDY1ODk1YmIuLmViYzA5YTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC03OCw2ICs3OCwxMSBAQAogCiBUQ1AgdmFyaWFibGVzOiAKIAordGNwX2FiYyAtIElOVEVHRVIKKwlDb250cm9scyBBcHByb3ByaWF0ZSBCeXRlIENvdW50IGRlZmluZWQgaW4gUkZDMzQ2NS4gSWYgc2V0IHRvCisJMCB0aGVuIGRvZXMgY29uZ2VzdGlvbiBhdm9pZCBvbmNlIHBlciBhY2suIDEgaXMgY29uc2VydmF0aXZlCisJdmFsdWUsIGFuZCAyIGlzIG1vcmUgYWdyZXNzaXZlLgorCiB0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKIAl3aWxsIGJlIHJldHJhbnNtaXR0ZWQuIFNob3VsZCBub3QgYmUgaGlnaGVyIHRoYW4gMjU1LiBEZWZhdWx0IHZhbHVlCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDU1NDFmOTkuLjBiMDNhODggMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC03MDcsNyArNzA3LDcgQEAKIFA6CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbwogTToJYWNtZUBtYW5kcml2YS5jb20KIEw6CWRjY3BAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LndsdWcub3JnLm56L0RDQ1AKK1c6CWh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL0RDQ1AKIFM6CU1haW50YWluZWQKIAogREVDbmV0IE5FVFdPUksgTEFZRVIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggZWE5NmRhMS4uNmQxZjcyNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTM0Nyw3ICszNDcsNyBAQAogIyBOZWVkZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBPPSBvcHRpb24KIExJTlVYSU5DTFVERSAgICA6PSAtSWluY2x1ZGUgXAogICAgICAgICAgICAgICAgICAgICQoaWYgJChLQlVJTERfU1JDKSwtSWluY2x1ZGUyIC1JJChzcmN0cmVlKS9pbmNsdWRlKSBcCi0JCSAgIC1pbWFjcm9zIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaAorCQkgICAtaW5jbHVkZSBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmgKIAogQ1BQRkxBR1MgICAgICAgIDo9IC1EX19LRVJORUxfXyAkKExJTlVYSU5DTFVERSkKIApAQCAtNDA3LDcgKzQwNyw3IEBACiAjIG9mIG1ha2Ugc28gLmNvbmZpZyBpcyBub3QgaW5jbHVkZWQgaW4gdGhpcyBjYXNlIGVpdGhlciAoZm9yICpjb25maWcpLgogCiBuby1kb3QtY29uZmlnLXRhcmdldHMgOj0gY2xlYW4gbXJwcm9wZXIgZGlzdGNsZWFuIFwKLQkJCSBjc2NvcGUgVEFHUyB0YWdzIGhlbHAgJWRvY3MgY2hlY2slCisJCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBrZXJuZWxyZWxlYXNlCiAKIGNvbmZpZy10YXJnZXRzIDo9IDAKIG1peGVkLXRhcmdldHMgIDo9IDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IGVjNzc3MjEuLjNkZjdjYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtMjM5LDYgKzIzOSw4IEBACiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyIKKwogc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggMTE0Y2RhN2YuLjgxYmQyMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC05Myw2ICs5Myw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDRYWCkJICAgOj0gaXhwNHh4CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIwMDApICAgIDo9IGl4cDIwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfT01BUDEpCSAgIDo9IG9tYXAxCisgbWFjaGluZS0kKENPTkZJR19BUkNIX09NQVAyKQkgICA6PSBvbWFwMgogICBpbmNkaXItJChDT05GSUdfQVJDSF9PTUFQKQkgICA6PSBvbWFwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0MTApCSAgIDo9IHMzYzI0MTAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTEg3QTQwWCkJICAgOj0gbGg3YTQweApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IGFkNTU2ODAuLjU1N2U1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTU1MCw5ICs1NTAsOSBAQAogCXUxNglMQ01fU1BJTUQ7CiB9OwogCi1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSAqc2F2ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC01NjAsNyArNTYwLDcgQEAKIAlpZiAoIXNhdmUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9ICh2b2lkICopIHNhdmU7CisJZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSAodm9pZCAqKSBzYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTU5NCwxNCArNTk0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbG9jb21vX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxvY29tb19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQotCXNhdmUgPSAoc3RydWN0IGxvY29tb19zYXZlX2RhdGEgKikgZGV2LT5wb3dlci5zYXZlZF9zdGF0ZTsKKwlzYXZlID0gKHN0cnVjdCBsb2NvbW9fc2F2ZV9kYXRhICopIGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlOwogCWlmICghc2F2ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTc2MCwyNyArNzYwLDI2IEBACiAJa2ZyZWUobGNoaXApOwogfQogCi1zdGF0aWMgaW50IGxvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxvY29tb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtOwogCWludCBpcnE7CiAKLQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIW1lbSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CiAKLQlyZXR1cm4gX19sb2NvbW9fcHJvYmUoZGV2LCBtZW0sIGlycSk7CisJcmV0dXJuIF9fbG9jb21vX3Byb2JlKCZkZXYtPmRldiwgbWVtLCBpcnEpOwogfQogCi1zdGF0aWMgaW50IGxvY29tb19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBsb2NvbW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gcGxhdGZvcm1fX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobGNoaXApIHsKIAkJX19sb2NvbW9fcmVtb3ZlKGxjaGlwKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03OTIsMTUgKzc5MSwxNiBAQAogICoJdGhlIHBlci1tYWNoaW5lIGxldmVsLCBhbmQgdGhlbiBoYXZlIHRoaXMgZHJpdmVyIHBpY2sKICAqCXVwIHRoZSByZWdpc3RlcmVkIGRldmljZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBsb2NvbW9fZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibG9jb21vIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGxvY29tb19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBsb2NvbW9fcHJvYmUsCiAJLnJlbW92ZQkJPSBsb2NvbW9fcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gbG9jb21vX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBsb2NvbW9fcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImxvY29tbyIsCisJfSwKIH07CiAKIC8qCkBAIC0xMTI2LDEzICsxMTI2LDEzIEBACiB7CiAJaW50IHJldCA9IGJ1c19yZWdpc3RlcigmbG9jb21vX2J1c190eXBlKTsKIAlpZiAocmV0ID09IDApCi0JCWRyaXZlcl9yZWdpc3RlcigmbG9jb21vX2RldmljZV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmxvY29tb19kZXZpY2VfZHJpdmVyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbG9jb21vX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbG9jb21vX2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsb2NvbW9fZGV2aWNlX2RyaXZlcik7CiAJYnVzX3VucmVnaXN0ZXIoJmxvY29tb19idXNfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwppbmRleCAxNzRhYTg2Li43YjA3YWNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCkBAIC04MDEsOSArODAxLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHNhMTExMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMTFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICpzYXZlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTgxMiw3ICs4MTIsNyBAQAogCXNhdmUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghc2F2ZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IHNhdmU7CisJZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSBzYXZlOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnNhY2hpcC0+bG9jaywgZmxhZ3MpOwogCkBAIC04NTksMTQgKzg1OSwxNCBAQAogICoJcmVzdG9yZWQgYnkgdGhlaXIgcmVzcGVjdGl2ZSBkcml2ZXJzLCBhbmQgbXVzdCBiZSBjYWxsZWQKICAqCXZpYSBMRE0gYWZ0ZXIgdGhpcyBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBzYTExMTFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTExX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSAqc2F2ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBpZDsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAKLQlzYXZlID0gKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICopZGV2LT5wb3dlci5zYXZlZF9zdGF0ZTsKKwlzYXZlID0gKHN0cnVjdCBzYTExMTFfc2F2ZV9kYXRhICopZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGU7CiAJaWYgKCFzYXZlKQogCQlyZXR1cm4gMDsKIApAQCAtODc5LDcgKzg3OSw3IEBACiAJaWQgPSBzYTExMTFfcmVhZGwoc2FjaGlwLT5iYXNlICsgU0ExMTExX1NLSUQpOwogCWlmICgoaWQgJiBTS0lEX0lEX01BU0spICE9IFNLSURfU0ExMTExX0lEKSB7CiAJCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJa2ZyZWUoc2F2ZSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTkxMSw3ICs5MTEsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FjaGlwLT5sb2NrLCBmbGFncyk7CiAKLQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gTlVMTDsKKwlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAJa2ZyZWUoc2F2ZSk7CiAKIAlyZXR1cm4gMDsKQEAgLTkyMiw5ICs5MjIsOCBAQAogI2RlZmluZSBzYTExMTFfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBzYTExMTFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMTFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICptZW07CiAJaW50IGlycTsKIApAQCAtOTMzLDIwICs5MzIsMjAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAotCXJldHVybiBfX3NhMTExMV9wcm9iZShkZXYsIG1lbSwgaXJxKTsKKwlyZXR1cm4gX19zYTExMTFfcHJvYmUoJnBkZXYtPmRldiwgbWVtLCBpcnEpOwogfQogCi1zdGF0aWMgaW50IHNhMTExMV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzYTExMTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoc2FjaGlwKSB7CiAJCV9fc2ExMTExX3JlbW92ZShzYWNoaXApOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfUE0KLQkJa2ZyZWUoZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSk7Ci0JCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOworCQlrZnJlZShwZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpOworCQlwZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOwogI2VuZGlmCiAJfQogCkBAIC05NjIsMTMgKzk2MSwxNCBAQAogICoJV2UgYWxzbyBuZWVkIHRvIGhhbmRsZSB0aGUgU0RSQU0gY29uZmlndXJhdGlvbiBmb3IKICAqCVBYQTI1MC9TQTExMTAgbWFjaGluZSBjbGFzc2VzLgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTExX2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTExMSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMTFfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTExX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTExX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNhMTExMV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTExX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMTExIiwKKwl9LAogfTsKIAogLyoKQEAgLTEyNTYsMTMgKzEyNTYsMTMgQEAKIHsKIAlpbnQgcmV0ID0gYnVzX3JlZ2lzdGVyKCZzYTExMTFfYnVzX3R5cGUpOwogCWlmIChyZXQgPT0gMCkKLQkJZHJpdmVyX3JlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTExX2RldmljZV9kcml2ZXIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExMTFfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExMTFfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTExMV9kZXZpY2VfZHJpdmVyKTsKIAlidXNfdW5yZWdpc3Rlcigmc2ExMTExX2J1c190eXBlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwppbmRleCBjN2ZkZjM5Li4zMjkyNGM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYworKysgYi9hcmNoL2FybS9jb21tb24vc2Nvb3AuYwpAQCAtOTgsOSArOTgsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNjb29wX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJY2hlY2tfc2Nvb3BfcmVnKHNkZXYpOwogCXNkZXYtPnNjb29wX2dwd3IgPSBTQ09PUF9SRUcoc2Rldi0+YmFzZSwgU0NPT1BfR1BXUik7CkBAIC0xMDksOSArMTA5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzY29vcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNoZWNrX3Njb29wX3JlZyhzZGV2KTsKIAlTQ09PUF9SRUcoc2Rldi0+YmFzZSxTQ09PUF9HUFdSKSA9IHNkZXYtPnNjb29wX2dwd3I7CkBAIC0xMjMsMTEgKzEyMywxMCBAQAogI2RlZmluZSBzY29vcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLWludCBfX2luaXQgc2Nvb3BfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzY29vcF9kZXYgKmRldnB0cjsKIAlzdHJ1Y3Qgc2Nvb3BfY29uZmlnICppbmY7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAogCWlmICghbWVtKQpAQCAtMTQxLDcgKzE0MCw3IEBACiAJbWVtc2V0KGRldnB0ciwgMCwgc2l6ZW9mKHN0cnVjdCBzY29vcF9kZXYpKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2cHRyLT5zY29vcF9sb2NrKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlkZXZwdHItPmJhc2UgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOwogCiAJaWYgKCFkZXZwdHItPmJhc2UpIHsKQEAgLTE0OSw3ICsxNDgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkZXZwdHIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldnB0cik7CiAKIAlwcmludGsoIlNoYXJwIFNjb29wIERldmljZSBmb3VuZCBhdCAweCUwOHggLT4gMHglMDh4XG4iLCh1bnNpZ25lZCBpbnQpbWVtLT5zdGFydCwodW5zaWduZWQgaW50KWRldnB0ci0+YmFzZSk7CiAKQEAgLTE2NCwyOSArMTYzLDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2Nvb3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpZiAoc2RldikgewogCQlpb3VubWFwKHNkZXYtPmJhc2UpOwogCQlrZnJlZShzZGV2KTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNjb29wX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2hhcnAtc2Nvb3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2Nvb3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzY29vcF9wcm9iZSwKIAkucmVtb3ZlIAk9IHNjb29wX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNjb29wX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzY29vcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoYXJwLXNjb29wIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBzY29vcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2Nvb3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzY29vcF9kcml2ZXIpOwogfQogCiBzdWJzeXNfaW5pdGNhbGwoc2Nvb3BfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfaDJfMTYxMF9kZWZjb25maWcKaW5kZXggNDE5ODY3Ny4uNTI5ZjBmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX2gyXzE2MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF9oMl8xNjEwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMwotIyBNb24gU2VwICA1IDE4OjA3OjEyIDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNAorIyBXZWQgTm92ICA5IDE4OjUzOjQwIDIwMDUKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15CkBAIC0yMiw2ICsyMiw3IEBACiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldApAQCAtMzEsNiArMzIsNyBAQAogIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiBDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTYwLDYgKzYyLDIzIEBACiAjIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKKworIwogIyBTeXN0ZW0gVHlwZQogIwogIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CkBAIC04MSw2ICsxMDAsNyBAQAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVA9eQogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldApAQCAtMTEyLDcgKzEzMiw3IEBACiAjIE9NQVAgQ29yZSBUeXBlCiAjCiAjIENPTkZJR19BUkNIX09NQVA3MzAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQMTUxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAxNVhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX09NQVAxNlhYPXkKIAogIwpAQCAtMTc3LDYgKzE5Nyw4IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKQEAgLTI1OCwxNCArMjgwLDE5IEBACiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCiAjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQogIwogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CkBAIC0yODEsNiArMzA4LDEwIEBACiAjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKICMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKIApAQCAtMjkxLDYgKzMyMiw3IEBACiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CiAKICMKICMgRGV2aWNlIERyaXZlcnMKQEAgLTMyOCwyMSArMzYwLDEzIEBACiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogQ09ORklHX0FUQV9PVkVSX0VUSD1tCiAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzY5LDEwICszOTMsMTIgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtNDA0LDYgKzQzMCwxMSBAQAogIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKQEAgLTQzOSw2ICs0NzAsNyBAQAogIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9ERUZMQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUF9CU0RDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKIENPTkZJR19TTElQPXkKIENPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQpAQCAtNTQxLDE4ICs1NzMsMTggQEAKICMKICMgVFBNIGRldmljZXMKICMKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydAogIwogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotQ09ORklHX0lTUDEzMDFfT01BUD15CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCkBAIC01NjAsNiArNTkyLDEwIEBACiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTc2LDcgKzYxMiw2IEBACiAjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU09GVF9DVVJTT1IgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiAjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldApAQCAtNTg5LDYgKzYyNCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19GT05UUz15CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15CkBAIC02MDAsNiArNjM2LDcgQEAKICMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9STCBpcyBub3Qgc2V0CiAKICMKICMgTG9nbyBjb25maWd1cmF0aW9uCkBAIC02MjQsMTAgKzY2MSwxMCBAQAogIyBPcGVuIFNvdW5kIFN5c3RlbQogIwogQ09ORklHX1NPVU5EX1BSSU1FPXkKKyMgQ09ORklHX09CU09MRVRFX09TU19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9PU1MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKIAogIwogIyBVU0Igc3VwcG9ydApAQCAtNjM3LDIyICs2NzQsMjEgQEAKICMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CiAKICMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCiAjIFVTQiBHYWRnZXQgU3VwcG9ydAogIwotQ09ORklHX1VTQl9HQURHRVQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX09NQVA9eQotQ09ORklHX1VTQl9PTUFQPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0VUSD15Ci1DT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CkBAIC02NzMsMTAgKzcwOSw2IEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CkBAIC02ODUsNiArNzE3LDcgQEAKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAogCiAjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKQEAgLTcwNiwxMCArNzM5LDEwIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtNzUwLDYgKzc4Myw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtODU5LDYgKzg5Myw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbGliL2NzdW1wYXJ0aWFsLlMgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwppbmRleCBjYjVlMzcwLi5mZTc5N2NmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUworKysgYi9hcmNoL2FybS9saWIvY3N1bXBhcnRpYWwuUwpAQCAtMzksNiArMzksNyBAQAogCiAJCS8qIHdlIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYnl0ZS4gKi8KIAkJdHN0CWJ1ZiwgIzEJCQlAIG9kZCBhZGRyZXNzPworCQltb3ZuZQlzdW0sIHN1bSwgcm9yICM4CiAJCWxkcm5lYgl0ZDAsIFtidWZdLCAjMQogCQlzdWJuZQlsZW4sIGxlbiwgIzEKIAkJYWRjbmVzCXN1bSwgc3VtLCB0ZDAsIHB1dF9ieXRlXzEKQEAgLTEwMyw2ICsxMDQsOSBAQAogCQljbXAJbGVuLCAjOAkJCUAgRW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdAogCQlibG8JLmxlc3M4CQkJQCA4IGJ5dGVzIHRvIGNvcHkuCiAKKwkJdHN0CWJ1ZiwgIzEKKwkJbW92bmUJc3VtLCBzdW0sIHJvciAjOAorCiAJCWFkZHMJc3VtLCBzdW0sICMwCQlAIEMgPSAwCiAJCXRzdAlidWYsICMzCQkJQCBUZXN0IGRlc3RpbmF0aW9uIGFsaWdubWVudAogCQlibG5lCS5ub3RfYWxpZ25lZAkJQCBhbGlnaCBkZXN0aW5hdGlvbiwgcmV0dXJuIGhlcmUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnCmluZGV4IDg5NzYyYTIuLjM4NTI4NTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvS2NvbmZpZwpAQCAtOCw2ICs4LDE2IEBACiAKIGNvbW1lbnQgIklYUDR4eCBQbGF0Zm9ybXMiCiAKKyMgVGhpcyBlbnRyeSBpcyBwbGFjZWQgb24gdG9wIGJlY2F1c2Ugb3RoZXJ3aXNlIGl0IHdvdWxkIGhhdmUKKyMgYmVlbiBzaG93biBhcyBhIHN1Ym1lbnUuCitjb25maWcgTUFDSF9OU0xVMgorCWJvb2wKKwlwcm9tcHQgIk5TTFUyIiBpZiAhKE1BQ0hfSVhEUDQ2NSB8fCBNQUNIX0lYRFBHNDI1IHx8IEFSQ0hfSVhEUDQyNSB8fCBBUkNIX0FESV9DT1lPVEUgfHwgQVJDSF9BVklMQSB8fCBBUkNIX0lYQ0RQMTEwMCB8fCBBUkNIX1BSUE1DMTEwMCB8fCBNQUNIX0dUV1g1NzE1KQorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IExpbmtzeXMncworCSAgTlNMVTIgTkFTIGRldmljZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBwbGF0Zm9ybSwKKwkgIHNlZSBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZworCiBjb25maWcgQVJDSF9BVklMQQogCWJvb2wgIkF2aWxhIgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKaW5kZXggZGRlY2JkYS4uN2ExNTYyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvTWFrZWZpbGUKQEAgLTgsNCArOCw1IEBACiBvYmotJChDT05GSUdfTUFDSF9JWERQRzQyNSkJKz0gaXhkcGc0MjUtcGNpLm8gY295b3RlLXNldHVwLm8KIG9iai0kKENPTkZJR19BUkNIX0FESV9DT1lPVEUpCSs9IGNveW90ZS1wY2kubyBjb3lvdGUtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfR1RXWDU3MTUpCSs9IGd0d3g1NzE1LXBjaS5vIGd0d3g1NzE1LXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX05TTFUyKQkrPSBuc2x1Mi1wY2kubyBuc2x1Mi1zZXR1cC5vIG5zbHUyLXBvd2VyLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc1ZjJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBjaS5jCisgKgorICogTlNMVTIgYm9hcmQtbGV2ZWwgUENJIGluaXRpYWxpemF0aW9uCisgKgorICogYmFzZWQgb24gaXhkcDQyNS1wY2kuYzoKKyAqCUNvcHlyaWdodCAoQykgMjAwMiBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCUNvcHlyaWdodCAoQykgMjAwMy0yMDA0IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBNYWludGFpbmVyOiBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZy8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKwordm9pZCBfX2luaXQgbnNsdTJfcGNpX3ByZWluaXQodm9pZCkKK3sKKwlzZXRfaXJxX3R5cGUoSVJRX05TTFUyX1BDSV9JTlRBLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKElSUV9OU0xVMl9QQ0lfSU5UQiwgSVJRVF9MT1cpOworCXNldF9pcnFfdHlwZShJUlFfTlNMVTJfUENJX0lOVEMsIElSUVRfTE9XKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUENJX0lOVEFfUElOKTsKKwlncGlvX2xpbmVfaXNyX2NsZWFyKE5TTFUyX1BDSV9JTlRCX1BJTik7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQ0lfSU5UQ19QSU4pOworCisJLyogSU5URCBpcyBub3QgY29uZmlndXJlZCBhcyBHUElPIGlzIHVzZWQKKwkgKiBmb3IgdGhlIHBvd2VyIGlucHV0IGJ1dHRvbi4KKwkgKi8KKworCWl4cDR4eF9wY2lfcHJlaW5pdCgpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbTlNMVTJfUENJX0lSUV9MSU5FU10gPSB7CisJCUlSUV9OU0xVMl9QQ0lfSU5UQSwKKwkJSVJRX05TTFUyX1BDSV9JTlRCLAorCQlJUlFfTlNMVTJfUENJX0lOVEMsCisJfTsKKworCWludCBpcnEgPSAtMTsKKworCWlmIChzbG90ID49IDEgJiYgc2xvdCA8PSBOU0xVMl9QQ0lfTUFYX0RFViAmJgorCQlwaW4gPj0gMSAmJiBwaW4gPD0gTlNMVTJfUENJX0lSUV9MSU5FUykgeworCQkJaXJxID0gcGNpX2lycV90YWJsZVsoc2xvdCArIHBpbiAtIDIpICUgTlNMVTJfUENJX0lSUV9MSU5FU107CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RydWN0IGh3X3BjaSBfX2luaXRkYXRhIG5zbHUyX3BjaSA9IHsKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5wcmVpbml0CT0gbnNsdTJfcGNpX3ByZWluaXQsCisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLnNldHVwCQk9IGl4cDR4eF9zZXR1cCwKKwkuc2NhbgkJPSBpeHA0eHhfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBuc2x1Ml9tYXBfaXJxLAorfTsKKworaW50IF9faW5pdCBuc2x1Ml9wY2lfaW5pdCh2b2lkKSAvKiBtb25rZXkgc2VlLCBtb25rZXkgZG8gKi8KK3sKKwlpZiAobWFjaGluZV9pc19uc2x1MigpKQorCQlwY2lfY29tbW9uX2luaXQoJm5zbHUyX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKG5zbHUyX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZmJjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCisgKgorICogTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRvd2VyIFRlY2hub2xvZ2llcworICoKKyAqIGJhc2VkIG9uIG5zbHUyLWlvLmMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgS2FyZW4gU3BlYXJlbAorICoKKyAqIEF1dGhvcjogQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworZXh0ZXJuIHZvaWQgY3RybF9hbHRfZGVsKHZvaWQpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgbnNsdTJfcG93ZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCS8qIFNpZ25hbCBpbml0IHRvIGRvIHRoZSBjdHJsYWx0ZGVsIGFjdGlvbiwgdGhpcyB3aWxsIGJ5cGFzcyBpbml0IGlmCisJICogaXQgaGFzbid0IHN0YXJ0ZWQgYW5kIGRvIGEga2VybmVsX3Jlc3RhcnQuCisJICovCisJY3RybF9hbHRfZGVsKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBuc2x1Ml9yZXNldF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJLyogVGhpcyBpcyB0aGUgcGFwZXItY2xpcCByZXNldCwgaXQgc2h1dHMgdGhlIG1hY2hpbmUgZG93biBkaXJlY3RseS4KKwkgKi8KKwltYWNoaW5lX3Bvd2VyX29mZigpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBuc2x1Ml9wb3dlcl9pbml0KHZvaWQpCit7CisJaWYgKCEobWFjaGluZV9pc19uc2x1MigpKSkKKwkJcmV0dXJuIDA7CisKKwkqSVhQNFhYX0dQSU9fR1BJU1IgPSAweDIwNDAwMDAwOwkvKiByZWFkIHRoZSAyIGlycXMgdG8gY2xyICovCisKKwlzZXRfaXJxX3R5cGUoTlNMVTJfUkJfSVJRLCBJUlFUX0xPVyk7CisJc2V0X2lycV90eXBlKE5TTFUyX1BCX0lSUSwgSVJRVF9ISUdIKTsKKworCWdwaW9fbGluZV9pc3JfY2xlYXIoTlNMVTJfUkJfR1BJTyk7CisJZ3Bpb19saW5lX2lzcl9jbGVhcihOU0xVMl9QQl9HUElPKTsKKworCWlmIChyZXF1ZXN0X2lycShOU0xVMl9SQl9JUlEsICZuc2x1Ml9yZXNldF9oYW5kbGVyLAorCQlTQV9JTlRFUlJVUFQsICJOU0xVMiByZXNldCBidXR0b24iLCBOVUxMKSA8IDApIHsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzZXQgQnV0dG9uIElSUSAlZCBub3QgYXZhaWxhYmxlXG4iLAorCQkJTlNMVTJfUkJfSVJRKTsKKworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoTlNMVTJfUEJfSVJRLCAmbnNsdTJfcG93ZXJfaGFuZGxlciwKKwkJU0FfSU5URVJSVVBULCAiTlNMVTIgcG93ZXIgYnV0dG9uIiwgTlVMTCkgPCAwKSB7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlBvd2VyIEJ1dHRvbiBJUlEgJWQgbm90IGF2YWlsYWJsZVxuIiwKKwkJCU5TTFUyX1BCX0lSUSk7CisKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuc2x1Ml9wb3dlcl9leGl0KHZvaWQpCit7CisJZnJlZV9pcnEoTlNMVTJfUkJfSVJRLCBOVUxMKTsKKwlmcmVlX2lycShOU0xVMl9QQl9JUlEsIE5VTEwpOworfQorCittb2R1bGVfaW5pdChuc2x1Ml9wb3dlcl9pbml0KTsKK21vZHVsZV9leGl0KG5zbHUyX3Bvd2VyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTlNMVTIgUG93ZXIvUmVzZXQgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODllOTRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKyAqCisgKiBOU0xVMiBib2FyZC1zZXR1cAorICoKKyAqIGJhc2VkIGl4ZHA0MjUtc2V0dXAuYzoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIEF1dGhvcjogTWFyayBSYWtlcyA8bXJha2VzIGF0IG1hYy5jb20+CisgKiBNYWludGFpbmVyczogaHR0cDovL3d3dy5uc2x1Mi1saW51eC5vcmcvCisgKgorICogRml4ZWQgbWlzc2luZyBpbml0X3RpbWUgaW4gTUFDSElORV9TVEFSVCBrYXMxMSAxMC8yMi8wNAorICogQ2hhbmdlZCB0byBjb25mb3JtIHRvIG5ldyBzdHlsZSBfX2luaXQgaXhkcDQyNSBrYXMxMSAxMC8yMi8wNAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIG5zbHUyX2ZsYXNoX2RhdGEgPSB7CisJLm1hcF9uYW1lCQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQkJPSBOU0xVMl9GTEFTSF9CQVNFLAorCS5lbmQJCQk9IE5TTFUyX0ZMQVNIX0JBU0UgKyBOU0xVMl9GTEFTSF9TSVpFLAorCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBuc2x1Ml9mbGFzaCA9IHsKKwkubmFtZQkJCT0gIklYUDRYWC1GbGFzaCIsCisJLmlkCQkJPSAwLAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZuc2x1Ml9mbGFzaF9kYXRhLAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZuc2x1Ml9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXhwNHh4X2kyY19waW5zIG5zbHUyX2kyY19ncGlvX3BpbnMgPSB7CisJLnNkYV9waW4JCT0gTlNMVTJfU0RBX1BJTiwKKwkuc2NsX3BpbgkJPSBOU0xVMl9TQ0xfUElOLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnNsdTJfaTJjX2NvbnRyb2xsZXIgPSB7CisJLm5hbWUJCQk9ICJJWFA0WFgtSTJDIiwKKwkuaWQJCQk9IDAsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJm5zbHUyX2kyY19ncGlvX3BpbnMsCisJLm51bV9yZXNvdXJjZXMJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbnNsdTJfdWFydF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJWFA0WFhfVUFSVDFfQkFTRV9QSFlTLAorCQkuZW5kCQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMgKyAweDBmZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElYUDRYWF9VQVJUMl9CQVNFX1BIWVMsCisJCS5lbmQJCT0gSVhQNFhYX1VBUlQyX0JBU0VfUEhZUyArIDB4MGZmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbnNsdTJfdWFydF9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IElYUDRYWF9VQVJUMV9CQVNFX1BIWVMsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJWFA0WFhfVUFSVDFfQkFTRV9WSVJUICsgUkVHX09GRlNFVCwKKwkJLmlycQkJPSBJUlFfSVhQNFhYX1VBUlQxLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gSVhQNFhYX1VBUlRfWFRBTCwKKwl9LAorCXsKKwkJLm1hcGJhc2UJPSBJWFA0WFhfVUFSVDJfQkFTRV9QSFlTLAorCQkubWVtYmFzZQk9IChjaGFyICopSVhQNFhYX1VBUlQyX0JBU0VfVklSVCArIFJFR19PRkZTRVQsCisJCS5pcnEJCT0gSVJRX0lYUDRYWF9VQVJUMiwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IElYUDRYWF9VQVJUX1hUQUwsCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5zbHUyX3VhcnQgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSBuc2x1Ml91YXJ0X2RhdGEsCisJLm51bV9yZXNvdXJjZXMJCT0gMiwKKwkucmVzb3VyY2UJCT0gbnNsdTJfdWFydF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnNsdTJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm5zbHUyX2kyY19jb250cm9sbGVyLAorCSZuc2x1Ml9mbGFzaCwKKwkmbnNsdTJfdWFydCwKK307CisKK3N0YXRpYyB2b2lkIG5zbHUyX3Bvd2VyX29mZih2b2lkKQoreworCS8qIFRoaXMgY2F1c2VzIHRoZSBib3ggdG8gZHJvcCB0aGUgcG93ZXIgYW5kIGdvIGRlYWQuICovCisKKwkvKiBlbmFibGUgdGhlIHB3ciBjbnRsIGdwaW8gKi8KKwlncGlvX2xpbmVfY29uZmlnKE5TTFUyX1BPX0dQSU8sIElYUDRYWF9HUElPX09VVCk7CisKKwkvKiBkbyB0aGUgZGVlZCAqLworCWdwaW9fbGluZV9zZXQoTlNMVTJfUE9fR1BJTywgSVhQNFhYX0dQSU9fSElHSCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuc2x1Ml9pbml0KHZvaWQpCit7CisJaXhwNHh4X3N5c19pbml0KCk7CisKKwlwbV9wb3dlcl9vZmYgPSBuc2x1Ml9wb3dlcl9vZmY7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuc2x1Ml9kZXZpY2VzLCBBUlJBWV9TSVpFKG5zbHUyX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChOU0xVMiwgIkxpbmtzeXMgTlNMVTIiKQorCS8qIE1haW50YWluZXI6IHd3dy5uc2x1Mi1saW51eC5vcmcgKi8KKwkucGh5c19yYW0JPSBQSFlTX09GRlNFVCwKKwkucGh5c19pbwk9IElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoKElYUDRYWF9QRVJJUEhFUkFMX0JBU0VfVklSVCkgPj4gMTgpICYgMHhGRkZDLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBpeHA0eHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGl4cDR4eF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmaXhwNHh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuc2x1Ml9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwppbmRleCAyN2ZjMmU4Li44NmEwZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCkBAIC02LDEwICs2LDEwIEBACiAJYm9vbCAiT01BUDczMCBCYXNlZCBTeXN0ZW0iCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAotY29uZmlnIEFSQ0hfT01BUDE1MTAKK2NvbmZpZyBBUkNIX09NQVAxNVhYCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxCiAJZGVmYXVsdCB5Ci0JYm9vbCAiT01BUDE1MTAgQmFzZWQgU3lzdGVtIgorCWJvb2wgIk9NQVAxNXh4IEJhc2VkIFN5c3RlbSIKIAogY29uZmlnIEFSQ0hfT01BUDE2WFgKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKQEAgLTIxLDcgKzIxLDcgQEAKIAogY29uZmlnIE1BQ0hfT01BUF9JTk5PVkFUT1IKIAlib29sICJUSSBJbm5vdmF0b3IiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFgpCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFgpCiAJaGVscAogICAgICAgICAgIFRJIE9NQVAgMTUxMCBvciAxNjEwIElubm92YXRvciBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdQogICAgICAgICAgIGhhdmUgc3VjaCBhIGJvYXJkLgpAQCAtNjQsMjAgKzY0LDMwIEBACiAKIGNvbmZpZyBNQUNIX1ZPSUNFQkxVRQogCWJvb2wgIlZvaWNlYmx1ZSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTUxMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiBBUkNIX09NQVAxNVhYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVm9pY2VibHVlIEdTTS9Wb0lQIGdhdGV3YXkuIFNheSBZIGhlcmUgaWYgeW91IGhhdmUKIAkgIHN1Y2ggYSBib2FyZC4KIAogY29uZmlnIE1BQ0hfTkVUU1RBUgogCWJvb2wgIk5ldFN0YXIiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIE5ldFN0YXIgUEJYLiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2ggYSBib2FyZC4KIAorY29uZmlnIE1BQ0hfT01BUF9QQUxNVEUKKwlib29sICJQYWxtIFR1bmdzdGVuIEUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1WFgKKwloZWxwCisgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFBhbG0gVHVuZ3N0ZW4gRSBQREEuIEN1cnJlbnRseSBvbmx5IHRoZSBMQ0QgcGFuZWwKKyAgICAgICAgICBpcyBzdXBwb3J0ZWQuIFRvIGJvb3QgdGhlIGtlcm5lbCwgeW91J2xsIG5lZWQgYSBQYWxtT1MgY29tcGF0aWJsZQorICAgICAgICAgIGJvb3Rsb2FkZXI7IGNoZWNrIG91dCBodHRwOi8vcGFsbXRlbGludXguc291cmNlZm9yZ2UubmV0IGZvciBtb3JlCisgICAgICAgICAgaW5mb3JtYXRpb25zLgorICAgICAgICAgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgc3VjaCBhIFBEQSwgc2F5IE5PIG90aGVyd2lzZS4KKwogY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYKQogCWhlbHAKICAgICAgICAgICBTdXBwb3J0IGZvciBnZW5lcmljIE9NQVAtMTUxMCwgMTYxMCBvciAxNzEwIGJvYXJkIHdpdGgKICAgICAgICAgICBubyBGUEdBLiBDYW4gYmUgdXNlZCBhcyB0ZW1wbGF0ZSBmb3IgcG9ydGluZyBMaW51eCB0bwpAQCAtMTIxLDMyICsxMzEsMzIgQEAKIAogY29uZmlnIE9NQVBfQVJNXzE2OE1IWgogCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTUxMCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAxNjhNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTUwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTUwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE1MTAKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQMTVYWAogCWhlbHAKIAkgIEVuYWJsZSAxNTBNSHogY2xvY2sgZm9yIE9NQVAgQ1BVLiBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgT01BUF9BUk1fMTIwTUhaCiAJYm9vbCAiT01BUCBBUk0gMTIwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDEyME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBPTUFQX0FSTV82ME1IWgogCWJvb2wgIk9NQVAgQVJNIDYwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX0FSTV8zME1IWgogCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNTEwIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDMwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggMTgxYTkzZC4uYjBiMDAxNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpby5vIGlkLm8gaXJxLm8gdGltZS5vIHNlcmlhbC5vIGRldmljZXMubworb2JqLXkgOj0gaW8ubyBpZC5vIGNsb2NrLm8gaXJxLm8gdGltZS5vIG11eC5vIHNlcmlhbC5vIGRldmljZXMubwogbGVkLXkgOj0gbGVkcy5vCiAKICMgU3BlY2lmaWMgYm9hcmQgc3VwcG9ydApAQCAtMTUsOCArMTUsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9IMykJCSs9IGJvYXJkLWgzLm8KIG9iai0kKENPTkZJR19NQUNIX1ZPSUNFQkxVRSkJCSs9IGJvYXJkLXZvaWNlYmx1ZS5vCiBvYmotJChDT05GSUdfTUFDSF9ORVRTVEFSKQkJKz0gYm9hcmQtbmV0c3Rhci5vCitvYmotJChDT05GSUdfTUFDSF9PTUFQX1BBTE1URSkJCSs9IGJvYXJkLXBhbG10ZS5vCiAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfT01BUDE1MTApLHkpCitpZmVxICgkKENPTkZJR19BUkNIX09NQVAxNVhYKSx5KQogIyBJbm5vdmF0b3ItMTUxMCBGUEdBCiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikJKz0gZnBnYS5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwppbmRleCBjMjA5YzcxLi40YjI5MmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTI4LDggKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgZ2VuZXJpY19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9pbml0X2lycSgpOwpAQCAtMzcsNyArMzUsNyBAQAogCiAvKiBhc3N1bWUgbm8gTWluaS1BQiBwb3J0ICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBnZW5lcmljMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLnJlZ2lzdGVyX2hvc3QJPSAxLAogCS5yZWdpc3Rlcl9kZXYJPSAxLApAQCAtNzYsMjEgKzc0LDE5IEBACiAKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgZ2VuZXJpY191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgICAgTlVMTCB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmdlbmVyaWNfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2NvbmY7Ci0KLQkvKgotCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgotCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgotCSAqIGlmIG5vdCBuZWVkZWQuCi0JICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlnZW5lcmljX2NvbmZpZ1swXS5kYXRhID0gJmdlbmVyaWMxNTEwX3VzYl9jb25maWc7CiAJfQpAQCAtMTAxLDIwICs5Nyw5IEBACiAJfQogI2VuZGlmCiAKLQl1YXJ0X2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOwotCWlmICh1YXJ0X2NvbmYgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgZW5hYmxlZF9wb3J0cywgaTsKLQotCQllbmFibGVkX3BvcnRzID0gdWFydF9jb25mLT5lbmFibGVkX3VhcnRzOwotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlpZiAoIShlbmFibGVkX3BvcnRzICYgKDEgPDwgaSkpKQotCQkJCWdlbmVyaWNfc2VyaWFsX3BvcnRzW2ldID0gMDsKLQkJfQotCX0KLQogCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOwotCW9tYXBfc2VyaWFsX2luaXQoZ2VuZXJpY19zZXJpYWxfcG9ydHMpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYwppbmRleCA0ZWU2YmQ4Li5hMDdlMmM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCkBAIC00MCw4ICs0MCw2IEBACiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBoMl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDJfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0xNjAsOSArMTU4LDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBoMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBoMl9sY2RfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLnBhbmVsX25hbWUJPSAiaDIiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaDJfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmaDJfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTU1DLCAgICAgICAgICAgJmgyX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMl9pbml0KHZvaWQpCkBAIC0xODAsMTIgKzE4OSwxMiBAQAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGgyX2RldmljZXMsIEFSUkFZX1NJWkUoaDJfZGV2aWNlcykpOwogCW9tYXBfYm9hcmRfY29uZmlnID0gaDJfY29uZmlnOwogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGgyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaDJfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDIsICJUSS1IMiIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggZmM4MjQzNi4uNjY4ZTI3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtNDEsOCArNDEsNiBAQAogCiBleHRlcm4gaW50IG9tYXBfZ3Bpb19pbml0KHZvaWQpOwogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgaDNfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKLQogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGgzX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTY4LDkgKzE2NiwyMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgaDNfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDNfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gImgzIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgzX2NvbmZpZ1tdID0gewotCXsgT01BUF9UQUdfVVNCLAkgJmgzX3VzYl9jb25maWcgfSwKLQl7IE9NQVBfVEFHX01NQywgICZoM19tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19VU0IsCQkmaDNfdXNiX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmgzX21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCSZoM191YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmgzX2xjZF9jb25maWcgfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0KHZvaWQpCkBAIC0xODAsNiArMTg5LDcgQEAKIAkodm9pZCkgcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoM19jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDNfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoM19pbml0X3NtYzkxeCh2b2lkKQpAQCAtMjAxLDcgKzIxMSw2IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaDNfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7Ci0Jb21hcF9zZXJpYWxfaW5pdChoM19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDMsICJUSSBPTUFQMTcxMCBIMyBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCBhMmVhYzg1Li45NWYxZmYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIGlubm92YXRvcl9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaW5ub3ZhdG9yX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtOTksNyArOTcsNyBAQAogCS5yZXNvdXJjZQk9ICZpbm5vdmF0b3JfZmxhc2hfcmVzb3VyY2UsCiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAvKiBPbmx5IEZQR0EgbmVlZHMgdG8gYmUgbWFwcGVkIGhlcmUuIEFsbCBvdGhlcnMgYXJlIGRvbmUgd2l0aCBpb3JlbWFwICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlubm92YXRvcjE1MTBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTM0LDcgQEAKIAkmaW5ub3ZhdG9yMTUxMF9zbWM5MXhfZGV2aWNlLAogfTsKIAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAKQEAgLTE4NSw3ICsxODMsNyBAQAogewogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJb21hcDE1MTBfZnBnYV9pbml0X2lycSgpOwogCX0KQEAgLTE5Myw3ICsxOTEsNyBAQAogCWlubm92YXRvcl9pbml0X3NtYzkxeCgpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgaW5ub3ZhdG9yMTUxMF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CiAJLyogZm9yIGJ1bmRsZWQgbm9uLXN0YW5kYXJkIGhvc3QgYW5kIHBlcmlwaGVyYWwgY2FibGVzICovCiAJLmhtY19tb2RlCT0gNCwKQEAgLTIwNSw2ICsyMDMsMTEgQEAKIAkucmVnaXN0ZXJfZGV2CT0gMSwKIAkucGluc1swXQk9IDIsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNTEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNTEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC0yMjIsNiArMjI1LDExIEBACiAKIAkucGluc1sxXQk9IDMsCiB9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBpbm5vdmF0b3IxNjEwX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJpbm4xNjEwIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaW5ub3ZhdG9yX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKQEAgLTIzNCwxNCArMjQyLDIwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBpbm5vdmF0b3JfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKwogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgaW5ub3ZhdG9yX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVVNCLCAgICAgICAgIE5VTEwgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCU5VTEwgfSwKIAl7IE9NQVBfVEFHX01NQywJCSZpbm5vdmF0b3JfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJmlubm92YXRvcl91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IGlubm92YXRvcl9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpbm5vdmF0b3IxNTEwX2RldmljZXMsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9kZXZpY2VzKSk7CiAJfQpAQCAtMjUyLDIzICsyNjYsMjggQEAKIAl9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWc7CisJCWlubm92YXRvcl9jb25maWdbMV0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX2xjZF9jb25maWc7CisJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKLQlpZiAoY3B1X2lzX29tYXAxNjEwKCkpCisJaWYgKGNwdV9pc19vbWFwMTYxMCgpKSB7CiAJCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZoMl91c2JfY29uZmlnOworCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnOworCX0KICNlbmRpZgogCW9tYXBfYm9hcmRfY29uZmlnID0gaW5ub3ZhdG9yX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShpbm5vdmF0b3JfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbm5vdmF0b3JfbWFwX2lvKHZvaWQpCiB7CiAJb21hcF9tYXBfY29tbW9uX2lvKCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlvdGFibGVfaW5pdChpbm5vdmF0b3IxNTEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW5ub3ZhdG9yMTUxMF9pb19kZXNjKSk7CiAJCXVkZWxheSgxMCk7CS8qIERlbGF5IG5lZWRlZCBmb3IgRlBHQSAqLwpAQCAtMjgwLDcgKzI5OSw2IEBACiAJCSAgICAgICBmcGdhX3JlYWQoT01BUDE1MTBfRlBHQV9CT0FSRF9SRVYpKTsKIAl9CiAjZW5kaWYKLQlvbWFwX3NlcmlhbF9pbml0KGlubm92YXRvcl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSU5OT1ZBVE9SLCAiVEktSW5ub3ZhdG9yIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbmV0c3Rhci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKaW5kZXggYzg1MWMyZS4uMDQ0OGZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1uZXRzdGFyLmMKQEAgLTU1LDYgKzU1LDE0IEBACiAJJm5ldHN0YXJfc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBuZXRzdGFyX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIG5ldHN0YXJfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmbmV0c3Rhcl91YXJ0X2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG5ldHN0YXJfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwX2luaXRfaXJxKCk7CkBAIC05MiwxNCArMTAwLDE1IEBACiAJLyogU3dpdGNoIG9mZiByZWQgTEVEICovCiAJb21hcF93cml0ZWIoMHgwMCwgT01BUF9MUEcxX1BNUik7CS8qIERpc2FibGUgY2xvY2sgKi8KIAlvbWFwX3dyaXRlYigweDgwLCBPTUFQX0xQRzFfTENSKTsKLX0KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9tYXBfc2VyaWFsX3BvcnRzW09NQVBfTUFYX05SX1BPUlRTXSA9IHsxLCAxLCAxfTsKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IG5ldHN0YXJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG5ldHN0YXJfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuZXRzdGFyX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKaW5kZXggYTg4NTI0ZS4uZTk5MGUxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KIAotc3RhdGljIGludCBfX2luaXRkYXRhIG9za19zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDAsIDB9OwotCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3NrX3BhcnRpdGlvbnNbXSA9IHsKIAkvKiBib290bG9hZGVyIChVLUJvb3QsIGV0YykgaW4gZmlyc3Qgc2VjdG9yICovCiAJewpAQCAtMTU1LDcgKzE1Myw3IEBACiAJfQogCiAJLyogQ2hlY2sgRU1JRlMgd2FpdCBzdGF0ZXMgdG8gZml4IGVycm9ycyB3aXRoIFNNQ19HRVRfUEtUX0hEUiAqLwotCUVNSUZTX0NDUygxKSB8PSAweDI7CisJRU1JRlNfQ0NTKDEpIHw9IDB4MzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19pbml0X2NmKHZvaWQpCkBAIC0xOTMsOCArMTkxLDE5IEBACiAJLnBpbnNbMF0JPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIG9za191YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKDEgPDwgMCksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyBvc2tfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gIm9zayIsCisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvc2tfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19VU0IsICAgICAgICAgICAmb3NrX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX1VBUlQsCQkmb3NrX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkJJm9za19sY2RfY29uZmlnIH0sCiB9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfT1NLX01JU1RSQUwKQEAgLTI1NCwxMyArMjYzLDEzIEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUob3NrX2NvbmZpZyk7CiAJVVNCX1RSQU5TQ0VJVkVSX0NUUkxfUkVHIHw9ICgzIDw8IDEpOwogCisJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9za19taXN0cmFsX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9za19tYXBfaW8odm9pZCkKIHsKIAlvbWFwX21hcF9jb21tb25faW8oKTsKLQlvbWFwX3NlcmlhbF9pbml0KG9za19zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfT1NLLCAiVEktT1NLIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MGIyMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisgKgorICogTW9kaWZpZWQgZnJvbSBib2FyZC1nZW5lcmljLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgUGFsbSBUdW5nc3RlbiBFIFBEQS4KKyAqCisgKiBPcmlnaW5hbCB2ZXJzaW9uIDogTGF1cmVudCBHb256YWxlegorICoKKyAqIE1haW50YWludGVycyA6IGh0dHA6Ly9wYWxtdGVsaW51eC5zZi5uZXQKKyAqICAgICAgICAgICAgICAgIHBhbG10ZWxpbnV4LWRldmVsb3BwZXJzQGxpc3RzLnNmLm5ldAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGFsbXRlX3VzYl9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucmVnaXN0ZXJfZGV2CT0gMSwKKwkuaG1jX21vZGUJPSAwLAorCS5waW5zWzBdCT0gMywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIHBhbG10ZV9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm1tYyBbMF0gPSB7CisJCS5lbmFibGVkIAk9IDEsCisJCS53aXJlNAkJPSAxLAorCQkud3BfcGluCQk9IE9NQVBfTVBVSU8oMyksCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGFsbXRlX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJwYWxtdGUiLAorCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXRlX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVVNCLCAmcGFsbXRlX3VzYl9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJJnBhbG10ZV9tbWNfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCSZwYWxtdGVfbGNkX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0KHZvaWQpCit7CisJb21hcF9ib2FyZF9jb25maWcgPSBwYWxtdGVfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBhbG10ZV9jb25maWcpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfUEFMTVRFLCAiT01BUDMxMCBiYXNlZCBQYWxtIFR1bmdzdGVuIEUiKQorCS5waHlzX3JhbQk9IDB4MTAwMDAwMDAsCisJLnBoeXNfaW8JPSAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZWYwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MTAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwppbmRleCAzNTRiMTU3Li5iZDkwMGI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKQEAgLTQzLDggKzQ0LDYgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBfX2luaXRkYXRhIHAyX3NlcmlhbF9wb3J0c1tPTUFQX01BWF9OUl9QT1JUU10gPSB7MSwgMSwgMH07Ci0KIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwMl9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTExMSw5ICsxMTAsMjcgQEAKIAkmc21jOTF4X2RldmljZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBwZXJzZXVzMl91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcGVyc2V1czJfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gInAyIiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHBlcnNldXMyX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJnBlcnNldXMyX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmcGVyc2V1czJfbGNkX2NvbmZpZyB9LAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfcGVyc2V1czJfaW5pdCh2b2lkKQogewogCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCW9tYXBfYm9hcmRfY29uZmlnID0gcGVyc2V1czJfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKHBlcnNldXMyX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGVyc2V1czJfaW5pdF9zbWM5MXgodm9pZCkKQEAgLTEzMSw3ICsxNDgsNiBAQAogCW9tYXBfZ3Bpb19pbml0KCk7CiAJcGVyc2V1czJfaW5pdF9zbWM5MXgoKTsKIH0KLQogLyogT25seSBGUEdBIG5lZWRzIHRvIGJlIG1hcHBlZCBoZXJlLiBBbGwgb3RoZXJzIGFyZSBkb25lIHdpdGggaW9yZW1hcCAqLwogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX3BlcnNldXMyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTE3OSw3ICsxOTUsNiBAQAogCSAqIEl0IGlzIHVzZWQgYXMgdGhlIEV0aGVybmV0IGNvbnRyb2xsZXIgaW50ZXJydXB0CiAJICovCiAJb21hcF93cml0ZWwob21hcF9yZWFkbChPTUFQNzMwX0lPX0NPTkZfOSkgJiAweDFGRkZGRkZGLCBPTUFQNzMwX0lPX0NPTkZfOSk7Ci0Jb21hcF9zZXJpYWxfaW5pdChwMl9zZXJpYWxfcG9ydHMpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfUEVSU0VVUzIsICJPTUFQNzMwIFBlcnNldXMyIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IDNmMDE4YjIuLjZmOWE2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTUwLDkgKzE1MCwxNCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgdm9pY2VibHVlX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHZvaWNlYmx1ZV9jb25maWdbXSA9IHsKIAl7IE9NQVBfVEFHX1VTQiwgJnZvaWNlYmx1ZV91c2JfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19NTUMsICZ2b2ljZWJsdWVfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfVUFSVCwJJnZvaWNlYmx1ZV91YXJ0X2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHZvaWNlYmx1ZV9pbml0X2lycSh2b2lkKQpAQCAtMTkxLDYgKzE5Niw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXModm9pY2VibHVlX2RldmljZXMsIEFSUkFZX1NJWkUodm9pY2VibHVlX2RldmljZXMpKTsKIAlvbWFwX2JvYXJkX2NvbmZpZyA9IHZvaWNlYmx1ZV9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUodm9pY2VibHVlX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOwogCiAJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIHBvd2VyIExFRAogCSAqIChpdCBpcyBjb25uZWN0ZWQgdGhyb3VnaCBpbnZlcnRvcikgKi8KQEAgLTE5OCwxMiArMjA0LDkgQEAKIAlvbWFwX3dyaXRlYigweDAwLCBPTUFQX0xQRzFfUE1SKTsJLyogRGlzYWJsZSBjbG9jayAqLwogfQogCi1zdGF0aWMgaW50IF9faW5pdGRhdGEgb21hcF9zZXJpYWxfcG9ydHNbT01BUF9NQVhfTlJfUE9SVFNdID0gezEsIDEsIDF9OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgdm9pY2VibHVlX21hcF9pbyh2b2lkKQogewogCW9tYXBfbWFwX2NvbW1vbl9pbygpOwotCW9tYXBfc2VyaWFsX2luaXQob21hcF9zZXJpYWxfcG9ydHMpOwogfQogCiAjZGVmaW5lIE1BQ0hJTkVfUEFOSUNFRAkJMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNzdlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTAsMCArMSw3OTIgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqICBNb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CisgKiAgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworX191MzIgYXJtX2lkbGVjdDFfbWFzazsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMSBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gMTQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlpZiAodmFsICYgY2xrLT5lbmFibGVfYml0KQorCQljbGstPnJhdGUgPSA0ODAwMDAwMDsKKwllbHNlCisJCWNsay0+cmF0ZSA9IDEyMDAwMDAwOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IG9tYXAxX2Nsa191c2UoJmFwaV9jay5jbGspOworCWlmICghcmV0dmFsKSB7CisJCXJldHZhbCA9IG9tYXAxX2Nsa19lbmFibGUoY2xrKTsKKwkJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAob21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsaykgPT0gMCkgeworCQlvbWFwMV9jbGtfZGlzYWJsZShjbGspOworCQlvbWFwMV9jbGtfdW51c2UoJmFwaV9jay5jbGspOworCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdWFydF9jbGsgKnVjbGs7CisKKwlyZXQgPSBvbWFwMV9jbGtfZW5hYmxlKGNsayk7CisJaWYgKHJldCA9PSAwKSB7CisJCS8qIFNldCBzbWFydCBpZGxlIGFja25vd2xlZGdlbWVudCBtb2RlICovCisJCXVjbGsgPSAoc3RydWN0IHVhcnRfY2xrICopY2xrOworCQlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTApIHwgOCwKKwkJCSAgICB1Y2xrLT5zeXNjX2FkZHIpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IHVhcnRfY2xrICp1Y2xrOworCisJLyogU2V0IGZvcmNlIGlkbGUgYWNrbm93bGVkZ2VtZW50IG1vZGUgKi8KKwl1Y2xrID0gKHN0cnVjdCB1YXJ0X2NsayAqKWNsazsKKwlvbWFwX3dyaXRlYigob21hcF9yZWFkYih1Y2xrLT5zeXNjX2FkZHIpICYgfjB4MTgpLCB1Y2xrLT5zeXNjX2FkZHIpOworCisJb21hcDFfY2xrX2Rpc2FibGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiBpY2xrID0gKHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiljbGs7CisKKwlpZiAoIShjbGstPmZsYWdzICYgQ0xPQ0tfSURMRV9DT05UUk9MKSkKKwkJcmV0dXJuOworCisJaWYgKGljbGstPm5vX2lkbGVfY291bnQgPiAwICYmICEoLS1pY2xrLT5ub19pZGxlX2NvdW50KSkKKwkJYXJtX2lkbGVjdDFfbWFzayB8PSAxIDw8IGljbGstPmlkbGVjdF9zaGlmdDsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGFybV9pZGxlY3QxX2NsayAqIGljbGsgPSAoc3RydWN0IGFybV9pZGxlY3QxX2NsayAqKWNsazsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBDTE9DS19JRExFX0NPTlRST0wpKQorCQlyZXR1cm47CisKKwlpZiAoaWNsay0+bm9faWRsZV9jb3VudCsrID09IDApCisJCWFybV9pZGxlY3QxX21hc2sgJj0gfigxIDw8IGljbGstPmlkbGVjdF9zaGlmdCk7Cit9CisKK3N0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQoreworCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKgorCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6CisJICogTENEX0NLIDw9IFRDX0NLCisJICogQVJNUEVSX0NLIDw9IFRDX0NLCisJICoKKwkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCisJICovCisJX191OCBwZXJfZXhwOworCV9fdTggbGNkX2V4cDsKKwlfX3U4IGFybV9leHA7CisJX191OCBkc3BfZXhwOworCV9fdTggdGNfZXhwOworCV9fdTggZHNwbW11X2V4cDsKKworCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKKwlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7CisJYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOworCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKKwl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOworCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKKworCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKKwkJZHNwbW11X2V4cCA9IGRzcF9leHA7CisJaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCisJCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7CisJaWYgKHRjX2V4cCA8IGFybV9leHApCisJCXRjX2V4cCA9IGFybV9leHA7CisJaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCisJCXRjX2V4cCA9IGRzcG1tdV9leHA7CisJaWYgKHRjX2V4cCA+IGxjZF9leHApCisJCWxjZF9leHAgPSB0Y19leHA7CisJaWYgKHRjX2V4cCA+IHBlcl9leHApCisJCXBlcl9leHAgPSB0Y19leHA7CisKKwluZXd2YWwgJj0gMHhmMDAwOworCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKKwluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOworCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7CisJbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKKworCXJldHVybiBuZXd2YWw7Cit9CisKK3N0YXRpYyBpbnQgY2FsY19kc29yX2V4cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBOb3RlOiBJZiB0YXJnZXQgZnJlcXVlbmN5IGlzIHRvbyBsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gNCwKKwkgKiB3aGljaCBpcyBpbnZhbGlkIHZhbHVlLiBDYWxsZXIgbXVzdCBjaGVjayBmb3IgdGhpcyB2YWx1ZSBhbmQgYWN0CisJICogYWNjb3JkaW5nbHkuCisJICoKKwkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0CisJICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgorCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKKwkgKiBBUk1fQ0sgPj0gVENfQ0sKKwkgKiBEU1BfQ0sgPj0gVENfQ0sKKwkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKKwkgKi8KKwl1bnNpZ25lZCBsb25nIHJlYWxyYXRlOworCXN0cnVjdCBjbGsgKiBwYXJlbnQ7CisJdW5zaWduZWQgIGRzb3JfZXhwOworCisJaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwYXJlbnQgPSBjbGstPnBhcmVudDsKKwlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQorCQlyZXR1cm4gLUVJTzsKKworCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOworCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgeworCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKKwkJCWJyZWFrOworCisJCXJlYWxyYXRlIC89IDI7CisJfQorCisJcmV0dXJuIGRzb3JfZXhwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KKwlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOworCisJaWYgKHVubGlrZWx5KGNsay0+cmF0ZSA9PSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3IpKQorCQlyZXR1cm47IC8qIE5vIGNoYW5nZSwgcXVpY2sgZXhpdCAqLworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcjsKKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaykKK3sKKwlpbnQgZHNvcjsKKworCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQKKwkgKgorCSAqIFRoZSBjbG9jayBjb250cm9sIGJpdHMgYXJlIGluIERTUCBkb21haW4sCisJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgorCSAqIE5vdGUgdGhhdCBEU1BfQ0tDVEwgdmlydCBhZGRyID0gcGh5cyBhZGRyLCBzbworCSAqIHdlIG11c3QgdXNlIF9fcmF3X3JlYWR3KCkgaW5zdGVhZCBvZiBvbWFwX3JlYWR3KCkuCisJICovCisJb21hcDFfY2xrX3VzZSgmYXBpX2NrLmNsayk7CisJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CisJb21hcDFfY2xrX3VudXNlKCZhcGlfY2suY2xrKTsKKworCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKKwkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qIE1QVSB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgYW5kIHN3aXRjaCB0byBpdCAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKworCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCisJCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFwdHItPnJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KKwkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KKwkgKi8KKwlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKKworCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOworCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50ICByZXQgPSAtRUlOVkFMOworCWludCAgZHNvcl9leHA7CisJX191MTYgIHJlZ3ZhbDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpOworCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOworCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKKwkJX19yYXdfd3JpdGV3KHJlZ3ZhbCwgRFNQX0NLQ1RMKTsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7CisJCXJldCA9IDA7CisJfQorCisJaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSAqLworCXN0cnVjdCBtcHVfcmF0ZSAqIHB0cjsKKwlsb25nICBoaWdoZXN0X3JhdGU7CisKKwlpZiAoY2xrICE9ICZ2aXJ0dWFsX2NrX21wdSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7CisJCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCisJCQljb250aW51ZTsKKworCQloaWdoZXN0X3JhdGUgPSBwdHItPnJhdGU7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGRzb3I7CisKKwkvKiBNQ0xLIGFuZCBCQ0xLIGRpdmlzb3Igc2VsZWN0aW9uIGlzIG5vdCBsaW5lYXI6CisJICogZnJlcSA9IDk2TUh6IC8gZHNvcgorCSAqCisJICogUkFUSU9fU0VMIHJhbmdlOiBkc29yIDwtPiBSQVRJT19TRUwKKwkgKiAwLi42OiAoUkFUSU9fU0VMKzIpIDwtPiAoZHNvci0yKQorCSAqIDYuLjQ4OiAgKDgrKFJBVElPX1NFTC02KSoyKSA8LT4gKChkc29yLTgpLzIrNikKKwkgKiBNaW5pbXVtIGRzb3IgaXMgMiBhbmQgbWF4aW11bSBpcyA5Ni4gT2RkIGRpdmlzb3JzIHN0YXJ0aW5nIGZyb20gOQorCSAqIGNhbiBub3QgYmUgdXNlZC4KKwkgKi8KKwlmb3IgKGRzb3IgPSAyOyBkc29yIDwgOTY7ICsrZHNvcikgeworCQlpZiAoKGRzb3IgJiAxKSAmJiBkc29yID4gOCkKKwkJICAJY29udGludWU7CisJCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gZHNvcjsKK30KKworLyogT25seSBuZWVkZWQgb24gMTUxMCAqLworc3RhdGljIGludCBvbWFwMV9zZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCWlmIChyYXRlID09IDEyMDAwMDAwKQorCQl2YWwgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZSBpZiAocmF0ZSA9PSA0ODAwMDAwMCkKKwkJdmFsIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvbWFwX3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7CisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKiBFeHRlcm5hbCBjbG9jayAoTUNMSyAmIEJDTEspIGZ1bmN0aW9ucyAqLworc3RhdGljIGludCBvbWFwMV9zZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwlkc29yID0gY2FsY19leHRfZHNvcihyYXRlKTsKKwljbGstPnJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7CisJaWYgKGRzb3IgPiA4KQorCQlyYXRpb19iaXRzID0gKChkc29yIC0gOCkgLyAyICsgNikgPDwgMjsKKwllbHNlCisJCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7CisKKwlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOworCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlyZXR1cm4gOTYwMDAwMDAgLyBjYWxjX2V4dF9kc29yKHJhdGUpOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1bnNpZ25lZCBkc29yOworCV9fdTE2IHJhdGlvX2JpdHM7CisKKwkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLworCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKKwlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKKwlpZiAocmF0aW9fYml0cyA+IDYpCisJCWRzb3IgPSAocmF0aW9fYml0cyAtIDYpICogMiArIDg7CisJZWxzZQorCQlkc29yID0gcmF0aW9fYml0cyArIDI7CisKKwljbGstPiByYXRlID0gOTYwMDAwMDAgLyBkc29yOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkgeworCQkJcmV0ID0gb21hcDFfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJCQljbGstPnVzZWNvdW50LS07CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKworCQkJaWYgKGNsay0+ZmxhZ3MgJiBDTE9DS19OT19JRExFX1BBUkVOVCkKKwkJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQkJCQlvbWFwMV9jbGtfZGVueV9pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCisJCXJldCA9IGNsay0+ZW5hYmxlKGNsayk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgeworCQkJb21hcDFfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwkJCWNsay0+dXNlY291bnQtLTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgeworCQljbGstPmRpc2FibGUoY2xrKTsKKwkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpIHsKKwkJCW9tYXAxX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJCQlpZiAoY2xrLT5mbGFncyAmIENMT0NLX05PX0lETEVfUEFSRU5UKQorCQkJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCQkJCW9tYXAxX2Nsa19hbGxvd19pZGxlKGNsay0+cGFyZW50KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlfX3UxNiByZWd2YWwxNjsKKwlfX3UzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCisJCXJldHVybiAwOworCisJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKKwkJICAgICAgIGNsay0+bmFtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfSBlbHNlIHsKKwkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKKwkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX191MTYgcmVndmFsMTY7CisJX191MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCisJCXJldHVybjsKKworCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgeworCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKKwkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBsb25nIG9tYXAxX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkc29yX2V4cDsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gMzsKKwkJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOworCX0KKworCWlmKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCitzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpbnQgIHJldCA9IC1FSU5WQUw7CisJaW50ICBkc29yX2V4cDsKKwlfX3UxNiAgcmVndmFsOworCisJaWYgKGNsay0+c2V0X3JhdGUpCisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKwllbHNlIGlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwkJaWYgKGRzb3JfZXhwID4gMykKKwkJCWRzb3JfZXhwID0gLUVJTlZBTDsKKwkJaWYgKGRzb3JfZXhwIDwgMCkKKwkJCXJldHVybiBkc29yX2V4cDsKKworCQlyZWd2YWwgPSBvbWFwX3JlYWR3KEFSTV9DS0NUTCk7CisJCXJlZ3ZhbCAmPSB+KDMgPDwgY2xrLT5yYXRlX29mZnNldCk7CisJCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OworCQlyZWd2YWwgPSB2ZXJpZnlfY2tjdGxfdmFsdWUocmVndmFsKTsKKwkJb21hcF93cml0ZXcocmVndmFsLCBBUk1fQ0tDVEwpOworCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKKwkJcmV0ID0gMDsKKwl9CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDEgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCisvKgorICogUmVzZXRzIHNvbWUgY2xvY2tzIHRoYXQgbWF5IGJlIGxlZnQgb24gZnJvbSBib290bG9hZGVyLAorICogYnV0IGxlYXZlcyBzZXJpYWwgY2xvY2tzIG9uLiBTZWUgYWxzbyBvbWFwX2xhdGVfY2xrX3Jlc2V0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMV9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvL29tYXBfd3JpdGVsKDB4MyA8PCAyOSwgTU9EX0NPTkZfQ1RSTF8wKTsKK30KKworc3RhdGljIGludCBfX2luaXQgb21hcDFfbGF0ZV9jbGtfcmVzZXQodm9pZCkKK3sKKwkvKiBUdXJuIG9mZiBhbGwgdW51c2VkIGNsb2NrcyAqLworCXN0cnVjdCBjbGsgKnA7CisJX191MzIgcmVndmFsMzI7CisKKwkvKiBVU0JfUkVRX0VOIHdpbGwgYmUgZGlzYWJsZWQgbGF0ZXIgaWYgbmVjZXNzYXJ5ICh1c2JfZGNfY2spICovCisJcmVndmFsMzIgPSBvbWFwX3JlYWR3KFNPRlRfUkVRX1JFRykgJiAoMSA8PCA0KTsKKwlvbWFwX3dyaXRldyhyZWd2YWwzMiwgU09GVF9SRVFfUkVHKTsKKwlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAocC0+dXNlY291bnQgPiAwIHx8IChwLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAorCQkJcC0+ZW5hYmxlX3JlZyA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCisJCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLworCQlpZiAoKHUzMilwLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyByZXNldCBjaGVjayBmb3IgRFNQIGRvbWFpbiAiCisJCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgcC0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLworCQlpZiAocC0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwocC0+ZW5hYmxlX3JlZyk7CisJCX0gZWxzZSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhwLT5lbmFibGVfcmVnKTsKKwkJCWVsc2UKKwkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcocC0+ZW5hYmxlX3JlZyk7CisJCX0KKworCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgcC0+ZW5hYmxlX2JpdCkpID09IDApCisJCQljb250aW51ZTsKKworCQkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQorCQkgKiBoYXMgYXNrZWQgZm9yIGl0cyBhY3RpdmF0aW9uLiAqLworCQlpZiAocCA9PSAmdGMyX2NrICAgICAgICAgLy8gRklYOiBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEKKwkJICAgIHx8IHAgPT0gJmNrX2RwbGwxb3V0LmNsayAvLyBGSVg6IFNvU1NJLCBTU1IKKwkJICAgIHx8IHAgPT0gJmFybV9ncGlvX2NrIC8vIEZJWDogR1BJTyBjb2RlIGZvciAxNTEwCisJCSAgICApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZJWE1FOiBDbG9jayBcIiVzXCIgc2VlbXMgdW51c2VkXG4iLAorCQkJICAgICAgIHAtPm5hbWUpOworCQkJY29udGludWU7CisJCX0KKworCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBwLT5uYW1lKTsKKwkJcC0+ZGlzYWJsZShwKTsKKwkJcHJpbnRrKCIgZG9uZVxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CitsYXRlX2luaXRjYWxsKG9tYXAxX2xhdGVfY2xrX3Jlc2V0KTsKKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZWFybHlfY2xrX3Jlc2V0KCkJe30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDFfY2xrX2Z1bmN0aW9ucyA9IHsKKwkuY2xrX3VzZQkJPSBvbWFwMV9jbGtfdXNlLAorCS5jbGtfdW51c2UJCT0gb21hcDFfY2xrX3VudXNlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAxX2Nsa19zZXRfcmF0ZSwKK307CisKK2ludCBfX2luaXQgb21hcDFfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICoqIGNsa3A7CisJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOworCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLworCisJb21hcDFfZWFybHlfY2xrX3Jlc2V0KCk7CisJY2xrX2luaXQoJm9tYXAxX2Nsa19mdW5jdGlvbnMpOworCisJLyogQnkgZGVmYXVsdCBhbGwgaWRsZWN0MSBjbG9ja3MgYXJlIGFsbG93ZWQgdG8gaWRsZSAqLworCWFybV9pZGxlY3QxX21hc2sgPSB+MDsKKworCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgeworCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQMTUxMCkgJiYgY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNlhYKSAmJiBjcHVfaXNfb21hcDE2eHgoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDczMCkgJiYgY3B1X2lzX29tYXA3MzAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19DTE9DSywgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnKTsKKwlpZiAoaW5mbyAhPSBOVUxMKSB7CisJCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJCQljcnlzdGFsX3R5cGUgPSBpbmZvLT5zeXN0ZW1fY2xvY2tfdHlwZTsKKwl9CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJY2tfcmVmLnJhdGUgPSAxMzAwMDAwMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJaWYgKGNyeXN0YWxfdHlwZSA9PSAyKQorCQlja19yZWYucmF0ZSA9IDE5MjAwMDAwOworI2VuZGlmCisKKwlwcmludGsoIkNsb2NrczogQVJNX1NZU1NUOiAweCUwNHggRFBMTF9DVEw6IDB4JTA0eCBBUk1fQ0tDVEw6IDB4JTA0eFxuIiwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fU1lTU1QpLCBvbWFwX3JlYWR3KERQTExfQ1RMKSwKKwkgICAgICAgb21hcF9yZWFkdyhBUk1fQ0tDVEwpKTsKKworCS8qIFdlIHdhbnQgdG8gYmUgaW4gc3luY3Jvbm91cyBzY2FsYWJsZSBtb2RlICovCisJb21hcF93cml0ZXcoMHgxMDAwLCBBUk1fU1lTU1QpOworCisjaWZkZWYgQ09ORklHX09NQVBfQ0xPQ0tTX1NFVF9CWV9CT09UTE9BREVSCisJLyogVXNlIHZhbHVlcyBzZXQgYnkgYm9vdGxvYWRlci4gRGV0ZXJtaW5lIFBMTCByYXRlIGFuZCByZWNhbGN1bGF0ZQorCSAqIGRlcGVuZGVudCBjbG9ja3MgYXMgaWYga2VybmVsIGhhZCBjaGFuZ2VkIFBMTCBvciBkaXZpc29ycy4KKwkgKi8KKwl7CisJCXVuc2lnbmVkIHBsbF9jdGxfdmFsID0gb21hcF9yZWFkdyhEUExMX0NUTCk7CisKKwkJY2tfZHBsbDEucmF0ZSA9IGNrX3JlZi5yYXRlOyAvKiBCYXNlIHh0YWwgcmF0ZSAqLworCQlpZiAocGxsX2N0bF92YWwgJiAweDEwKSB7CisJCQkvKiBQTEwgZW5hYmxlZCwgYXBwbHkgbXVsdGlwbGllciBhbmQgZGl2aXNvciAqLworCQkJaWYgKHBsbF9jdGxfdmFsICYgMHhmODApCisJCQkJY2tfZHBsbDEucmF0ZSAqPSAocGxsX2N0bF92YWwgJiAweGY4MCkgPj4gNzsKKwkJCWNrX2RwbGwxLnJhdGUgLz0gKChwbGxfY3RsX3ZhbCAmIDB4NjApID4+IDUpICsgMTsKKwkJfSBlbHNlIHsKKwkJCS8qIFBMTCBkaXNhYmxlZCwgYXBwbHkgYnlwYXNzIGRpdmlzb3IgKi8KKwkJCXN3aXRjaCAocGxsX2N0bF92YWwgJiAweGMpIHsKKwkJCWNhc2UgMDoKKwkJCQlicmVhazsKKwkJCWNhc2UgMHg0OgorCQkJCWNrX2RwbGwxLnJhdGUgLz0gMjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY2tfZHBsbDEucmF0ZSAvPSA0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CisjZWxzZQorCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSBhbmQgZW5hYmxlIGl0ICovCisJaWYgKG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0dWFsX2NrX21wdSwgfjApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3lzdGVtIGZyZXF1ZW5jaWVzIG5vdCBzZXQuIENoZWNrIHlvdXIgY29uZmlnLlxuIik7CisJCS8qIEd1ZXNzIHNhbmUgdmFsdWVzICg2ME1IeikgKi8KKwkJb21hcF93cml0ZXcoMHgyMjkwLCBEUExMX0NUTCk7CisJCW9tYXBfd3JpdGV3KDB4MTAwNSwgQVJNX0NLQ1RMKTsKKwkJY2tfZHBsbDEucmF0ZSA9IDYwMDAwMDAwOworCQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOworCX0KKyNlbmRpZgorCS8qIENhY2hlIHJhdGVzIGZvciBjbG9ja3MgY29ubmVjdGVkIHRvIGNrX3JlZiAobm90IGRwbGwxKSAqLworCXByb3BhZ2F0ZV9yYXRlKCZja19yZWYpOworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKHh0YWwvRFBMTDEvTVBVKTogIgorCQkiJWxkLiUwMWxkLyVsZC4lMDFsZC8lbGQuJTAxbGQgTUh6XG4iLAorCSAgICAgICBja19yZWYucmF0ZSAvIDEwMDAwMDAsIChja19yZWYucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgY2tfZHBsbDEucmF0ZSAvIDEwMDAwMDAsIChja19kcGxsMS5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICBhcm1fY2sucmF0ZSAvIDEwMDAwMDAsIChhcm1fY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCk7CisKKyNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX1BFUlNFVVMyCisJLyogU2VsZWN0IHNsaWNlciBvdXRwdXQgYXMgT01BUCBpbnB1dCBjbG9jayAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDczMF9QQ0NfVVBMRF9DVFJMKSAmIH4weDEsIE9NQVA3MzBfUENDX1VQTERfQ1RSTCk7CisjZW5kaWYKKworCS8qIFR1cm4gb2ZmIERTUCBhbmQgQVJNX1RJTVhPLiBNYWtlIHN1cmUgQVJNX0lOVEhDSyBpcyBub3QgZGl2aWRlZCAqLworCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSAmIDB4MGZmZiwgQVJNX0NLQ1RMKTsKKworCS8qIFB1dCBEU1AvTVBVSSBpbnRvIHJlc2V0IHVudGlsIG5lZWRlZCAqLworCW9tYXBfd3JpdGV3KDAsIEFSTV9SU1RDVDEpOworCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDIpOworCW9tYXBfd3JpdGV3KDB4NDAwLCBBUk1fSURMRUNUMSk7CisKKwkvKgorCSAqIEFjY29yZGluZyB0byBPTUFQNTkxMCBFcnJhdHVtIFNZU19ETUFfMSwgYml0IERNQUNLX1JFUSAoYml0IDgpCisJICogb2YgdGhlIEFSTV9JRExFQ1QyIHJlZ2lzdGVyIG11c3QgYmUgc2V0IHRvIHplcm8uIFRoZSBwb3dlci1vbgorCSAqIGRlZmF1bHQgdmFsdWUgb2YgdGhpcyBiaXQgaXMgb25lLgorCSAqLworCW9tYXBfd3JpdGV3KDB4MDAwMCwgQVJNX0lETEVDVDIpOwkvKiBUdXJuIExDRCBjbG9jayBvZmYgYWxzbyAqLworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa191c2UoJmFybXBlcl9jay5jbGspOworCWNsa191c2UoJmFybXhvcl9jay5jbGspOworCWNsa191c2UoJmFybXRpbV9jay5jbGspOyAvKiBUaGlzIHNob3VsZCBiZSBkb25lIGJ5IHRpbWVyIGNvZGUgKi8KKworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JkZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0wLDAgKzEsNzY4IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMV9DTE9DS19ICisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyB2b2lkIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbChzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgaW50IG9tYXAxX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspOworCitzdHJ1Y3QgbXB1X3JhdGUgeworCXVuc2lnbmVkIGxvbmcJCXJhdGU7CisJdW5zaWduZWQgbG9uZwkJeHRhbDsKKwl1bnNpZ25lZCBsb25nCQlwbGxfcmF0ZTsKKwlfX3UxNgkJCWNrY3RsX3ZhbDsKKwlfX3UxNgkJCWRwbGxjdGxfdmFsOworfTsKKworc3RydWN0IHVhcnRfY2xrIHsKKwlzdHJ1Y3QgY2xrCWNsazsKKwl1bnNpZ25lZCBsb25nCXN5c2NfYWRkcjsKK307CisKKy8qIFByb3ZpZGUgYSBtZXRob2QgZm9yIHByZXZlbnRpbmcgaWRsaW5nIHNvbWUgQVJNIElETEVDVCBjbG9ja3MgKi8KK3N0cnVjdCBhcm1faWRsZWN0MV9jbGsgeworCXN0cnVjdCBjbGsJY2xrOworCXVuc2lnbmVkIGxvbmcJbm9faWRsZV9jb3VudDsKKwlfX3U4CQlpZGxlY3Rfc2hpZnQ7Cit9OworCisvKiBBUk1fQ0tDVEwgYml0IHNoaWZ0cyAqLworI2RlZmluZSBDS0NUTF9QRVJESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0tDVExfTENERElWX09GRlNFVAkyCisjZGVmaW5lIENLQ1RMX0FSTURJVl9PRkZTRVQJNAorI2RlZmluZSBDS0NUTF9EU1BESVZfT0ZGU0VUCTYKKyNkZWZpbmUgQ0tDVExfVENESVZfT0ZGU0VUCTgKKyNkZWZpbmUgQ0tDVExfRFNQTU1VRElWX09GRlNFVAkxMAorLyojZGVmaW5lIEFSTV9USU1YTwkJMTIqLworI2RlZmluZSBFTl9EU1BDSwkJMTMKKy8qI2RlZmluZSBBUk1fSU5USENLX1NFTAkxNCovIC8qIERpdmlkZS1ieS0yIGZvciBtcHUgaW50aF9jayAqLworLyogRFNQX0NLQ1RMIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgQ0tDVExfRFNQUEVSRElWX09GRlNFVAkwCisKKy8qIEFSTV9JRExFQ1QyIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fV0RUQ0sJMAorI2RlZmluZSBFTl9YT1JQQ0sJMQorI2RlZmluZSBFTl9QRVJDSwkyCisjZGVmaW5lIEVOX0xDRENLCTMKKyNkZWZpbmUgRU5fTEJDSwkJNCAvKiBOb3Qgb24gMTYxMC8xNzEwICovCisvKiNkZWZpbmUgRU5fSFNBQkNLCTUqLworI2RlZmluZSBFTl9BUElDSwk2CisjZGVmaW5lIEVOX1RJTUNLCTcKKyNkZWZpbmUgRE1BQ0tfUkVRCTgKKyNkZWZpbmUgRU5fR1BJT0NLCTkgLyogTm90IG9uIDE2MTAvMTcxMCAqLworLyojZGVmaW5lIEVOX0xCRlJFRUNLCTEwKi8KKyNkZWZpbmUgRU5fQ0tPVVRfQVJNCTExCisKKy8qIEFSTV9JRExFQ1QzIGJpdCBzaGlmdHMgKi8KKyNkZWZpbmUgRU5fT0NQSV9DSwkwCisjZGVmaW5lIEVOX1RDMV9DSwkyCisjZGVmaW5lIEVOX1RDMl9DSwk0CisKKy8qIERTUF9JRExFQ1QyIGJpdCBzaGlmdHMgKDAsMSwyIGFyZSBzYW1lIGFzIGZvciBBUk1fSURMRUNUMikgKi8KKyNkZWZpbmUgRU5fRFNQVElNQ0sJNQorCisvKiBWYXJpb3VzIHJlZ2lzdGVyIGRlZmluZXMgZm9yIGNsb2NrIGNvbnRyb2xzIHNjYXR0ZXJlZCBhcm91bmQgT01BUCBjaGlwICovCisjZGVmaW5lIFVTQl9NQ0xLX0VOX0JJVAkJNAkvKiBJbiBVTFBEX0NMS0NfQ1RSTCAqLworI2RlZmluZSBVU0JfSE9TVF9ISENfVUhPU1RfRU4JOQkvKiBJbiBNT0RfQ09ORl9DVFJMXzAgKi8KKyNkZWZpbmUgU1dEX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBTV0RfQ0xLX0RJVl9DVFJMX1NFTCAqLworI2RlZmluZSBDT01fVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIENPTV9DTEtfRElWX0NUUkxfU0VMICovCisjZGVmaW5lIFNXRF9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzQKKyNkZWZpbmUgQ09NX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3OAorI2RlZmluZSBTT0ZUX1JFUV9SRUcJCTB4ZmZmZTA4MzQKKyNkZWZpbmUgU09GVF9SRVFfUkVHMgkJMHhmZmZlMDg4MAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIE1QVSByYXRlIHRhYmxlCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHN0cnVjdCBtcHVfcmF0ZSByYXRlX3RhYmxlW10gPSB7CisJLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCisJICogTk9URTogQ29tbWVudCBvcmRlciBoZXJlIGlzIGRpZmZlcmVudCBmcm9tIGJpdHMgaW4gQ0tDVEwgdmFsdWU6CisJICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2CisJICovCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQorCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQorCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQorCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLworCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLworCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzQvNC84LzgvOCAqLworCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQorCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQorCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQorCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQorCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCisJeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKKwl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQorCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLworI2VuZGlmCisJeyAwLCAwLCAwLCAwLCAwIH0sCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAxIGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0geworCS5uYW1lCQk9ICJja19yZWYiLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX2RwbGwxID0geworCS5uYW1lCQk9ICJja19kcGxsMSIsCisJLnBhcmVudAkJPSAmY2tfcmVmLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGNrX2RwbGwxb3V0ID0geworCS5jbGsgPSB7CisJICAgICAgIAkubmFtZQkJPSAiY2tfZHBsbDFvdXQiLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDEyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0geworCS5uYW1lCQk9ICJhcm1fY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm1wZXJfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXBlcl9jayIsCisJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkJICBSQVRFX0NLQ1RMIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKKwkJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7CisJLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9HUElPQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJteG9yX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm14b3JfY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAorCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtdGltX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcm10aW1fY2siLAorCQkucGFyZW50CQk9ICZja19yZWYsCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fVElNQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDksCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBhcm13ZHRfY2sgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gImFybXdkdF9jayIsCisJCS5wYXJlbnQJCT0gJmNrX3JlZiwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKKwkJLnJlY2FsYwkJPSAmb21hcDFfd2F0Y2hkb2dfcmVjYWxjLAorCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKKwl9LAorCS5pZGxlY3Rfc2hpZnQJPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7CisJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5wYXJlbnQJCT0gJmFybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCisJICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCisJICoKKwkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgorCSAqLworCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7CisJLm5hbWUJCT0gImRzcF9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9DS0NUTCwKKwkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAorCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCisJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7CisJLm5hbWUJCT0gImRzcG1tdV9jayIsCisJLnBhcmVudAkJPSAmY2tfZHBsbDEsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHBlcl9jayA9IHsKKwkubmFtZQkJPSAiZHNwcGVyX2NrIiwKKwkucGFyZW50CQk9ICZja19kcGxsMSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9QRVJDSywKKwkucmF0ZV9vZmZzZXQJPSBDS0NUTF9QRVJESVZfT0ZGU0VULAorCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluLAorCS5zZXRfcmF0ZQk9ICZvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbiwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHhvcl9jayA9IHsKKwkubmFtZQkJPSAiZHNweG9yX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcHRpbV9jayA9IHsKKwkubmFtZQkJPSAiZHNwdGltX2NrIiwKKwkucGFyZW50CQk9ICZja19yZWYsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0lPX0FERFJFU1MsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopRFNQX0lETEVDVDIsCisJLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAorfTsKKworLyogVGllIEFSTV9JRExFQ1QxOklETElGX0FSTSB0byB0aGlzIGxvZ2ljYWwgY2xvY2sgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayB0Y19jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAidGNfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJCSAgQ0xPQ0tfSU5fT01BUDczMCB8IFJBVEVfQ0tDVEwgfAorCQkJCSAgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJCSAgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCisJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0geworCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSworCSAqCisJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCisJICovCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRpcGJfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAidGlicF9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7CisJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KKwkubmFtZQkJPSAibDNfb2NwaV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0geworCS5uYW1lCQk9ICJ0YzFfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzFfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NrID0geworCS5uYW1lCQk9ICJ0YzJfY2siLAorCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0geworCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCisJLm5hbWUJCT0gImRtYV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7CisJLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKKwkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXBpX2NrID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJhcGlfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fQVBJQ0ssCisJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDgsCit9OworCitzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBsYl9jayA9IHsKKwkuY2xrID0geworCQkubmFtZQkJPSAibGJfY2siLAorCQkucGFyZW50CQk9ICZ0Y19jay5jbGssCisJCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5lbmFibGVfYml0CT0gRU5fTEJDSywKKwkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCisJfSwKKwkuaWRsZWN0X3NoaWZ0CT0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0geworCS5uYW1lCQk9ICJyaGVhMV9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0geworCS5uYW1lCQk9ICJyaGVhMl9jayIsCisJLnBhcmVudAkJPSAmdGNfY2suY2xrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9ja18xNnh4ID0geworCS5uYW1lCQk9ICJsY2RfY2siLAorCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCisJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKKwkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxjZF9ja18xNTEwID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJsY2RfY2siLAorCQkucGFyZW50CQk9ICZja19kcGxsMSwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9DS0NUTCB8CisJCQkJICBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAorCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAorCQkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCisJCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorCX0sCisJLmlkbGVjdF9zaGlmdAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDFfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDFfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAyOSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmIwMDU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2NrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQgfAorCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNTEwID0geworCS5uYW1lCQk9ICJ1YXJ0M19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KKwkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfAorCQkJICBBTFdBWVNfRU5BQkxFRCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF91YXJ0X3JhdGUsCisJLnJlY2FsYwkJPSAmb21hcDFfdWFydF9yZWNhbGMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9jbGsgdWFydDNfMTZ4eCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidWFydDNfY2siLAorCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLworCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAorCQkucmF0ZQkJPSA0ODAwMDAwMCwKKwkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8CisJCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmVuYWJsZV9iaXQJPSAzMSwKKwkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKKwl9LAorCS5zeXNjX2FkZHIJPSAweGZmZmI5ODU0LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLworCS5uYW1lCQk9ICJ1c2JfY2xrbyIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVVMUERfQ0xPQ0tfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE1MTAgPSB7CisJLm5hbWUJCT0gInVzYl9oaGNfY2siLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTZ4eCA9IHsKKwkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCisJLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2sgPSB7CisJLm5hbWUJCT0gInVzYl9kY19jayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2xrXzE1MTAgPSB7CisJLm5hbWUJCT0gIm1jbGsiLAorCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLworCS5yYXRlCQk9IDEyMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IFJBVEVfRklYRUQsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKKwkubmFtZQkJPSAibWNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUNPTV9DTEtfRElWX0NUUkxfU0VMLAorCS5lbmFibGVfYml0CT0gQ09NX1VMUERfUExMX0NMS19SRVEsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAorCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKKwkubmFtZQkJPSAiYmNsayIsCisJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0geworCS5uYW1lCQk9ICJiY2xrIiwKKwkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopU1dEX0NMS19ESVZfQ1RSTF9TRUwsCisJLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKKwkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X2V4dF9jbGtfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUsCisJLmluaXQJCT0gJm9tYXAxX2luaXRfZXh0X2NsaywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKKwkubmFtZQkJPSAibW1jMV9jayIsCisJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCisJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5lbmFibGVfYml0CT0gMjMsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CisJLm5hbWUJCT0gIm1tYzJfY2siLAorCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLworCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKKwkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CisJLm5hbWUJCT0gIm1wdSIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAorCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCisJLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLworCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAxX3NlbGVjdF90YWJsZV9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAxX3JvdW5kX3RvX3RhYmxlX3JhdGUsCisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKKwkvKiBub24tVUxQRCBjbG9ja3MgKi8KKwkmY2tfcmVmLAorCSZja19kcGxsMSwKKwkvKiBDS19HRU4xIGNsb2NrcyAqLworCSZja19kcGxsMW91dC5jbGssCisJJmFybV9jaywKKwkmYXJtcGVyX2NrLmNsaywKKwkmYXJtX2dwaW9fY2ssCisJJmFybXhvcl9jay5jbGssCisJJmFybXRpbV9jay5jbGssCisJJmFybXdkdF9jay5jbGssCisJJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAorCS8qIENLX0dFTjIgY2xvY2tzICovCisJJmRzcF9jaywKKwkmZHNwbW11X2NrLAorCSZkc3BwZXJfY2ssCisJJmRzcHhvcl9jaywKKwkmZHNwdGltX2NrLAorCS8qIENLX0dFTjMgY2xvY2tzICovCisJJnRjX2NrLmNsaywKKwkmdGlwYl9jaywKKwkmbDNfb2NwaV9jaywKKwkmdGMxX2NrLAorCSZ0YzJfY2ssCisJJmRtYV9jaywKKwkmZG1hX2xjZGZyZWVfY2ssCisJJmFwaV9jay5jbGssCisJJmxiX2NrLmNsaywKKwkmcmhlYTFfY2ssCisJJnJoZWEyX2NrLAorCSZsY2RfY2tfMTZ4eCwKKwkmbGNkX2NrXzE1MTAuY2xrLAorCS8qIFVMUEQgY2xvY2tzICovCisJJnVhcnQxXzE1MTAsCisJJnVhcnQxXzE2eHguY2xrLAorCSZ1YXJ0Ml9jaywKKwkmdWFydDNfMTUxMCwKKwkmdWFydDNfMTZ4eC5jbGssCisJJnVzYl9jbGtvLAorCSZ1c2JfaGhjX2NrMTUxMCwgJnVzYl9oaGNfY2sxNnh4LAorCSZ1c2JfZGNfY2ssCisJJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCisJJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCisJJm1tYzFfY2ssCisJJm1tYzJfY2ssCisJLyogVmlydHVhbCBjbG9ja3MgKi8KKwkmdmlydHVhbF9ja19tcHUsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggM2M1ZDkwMS4uZWNiYzQ3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTI1LDU2ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCi0KLXN0YXRpYyB2b2lkIG9tYXBfbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotICAgICAgICAvKiBOb3RoaW5nICovCi19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLSNpZglkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gT01BUF9JMkNfQkFTRSwKLQkJLmVuZAkJPSBPTUFQX0kyQ19CQVNFICsgMHgzZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UX0kyQywKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi0vKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZSA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKLSAgICAgICAgLmlkICAgICAgICAgICAgID0gLTEsCi0gICAgICAgIC5kZXYgPSB7Ci0gICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKLSAgICAgICAgfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gaTJjX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKLXsKLQkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0Ci0JICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgotCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCi0JICovCi0Jb21hcF9jZmdfcmVnKEkyQ19TQ0wpOwotCW9tYXBfY2ZnX3JlZyhJMkNfU0RBKTsKLQotCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KLSNlbmRpZgorZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTAsMTM3ICs2MSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQotCi0jZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCi0jZGVmaW5lCU9NQVBfTU1DMl9CQVNFCQkweGZmZmI3YzAwCS8qIG9tYXAxNnh4IG9ubHkgKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25mIG1tYzFfY29uZjsKLQotc3RhdGljIHU2NCBtbWMxX2RtYW1hc2sgPSAweGZmZmZmZmZmOwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzFfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSksCi0JCS5lbmQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzFfQkFTRSkgKyAweDdmLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQl7Ci0JCS5zdGFydAkJPSBJTlRfTU1DLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tY19vbWFwX2RldmljZTEgPSB7Ci0JLm5hbWUJCT0gIm1tY2ktb21hcCIsCi0JLmlkCQk9IDEsCi0JLmRldiA9IHsKLQkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAotCQkuZG1hX21hc2sJPSAmbW1jMV9kbWFtYXNrLAotCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMxX2NvbmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMV9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG1tYzFfcmVzb3VyY2VzLAotfTsKLQotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAxNlhYCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMyX2NvbmY7Ci0KLXN0YXRpYyB1NjQgbW1jMl9kbWFtYXNrID0gMHhmZmZmZmZmZjsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpLAotCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMyX0JBU0UpICsgMHg3ZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJCT0gSU5UXzE2MTBfTU1DMiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UyID0gewotCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAotCS5pZAkJPSAyLAotCS5kZXYgPSB7Ci0JCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKLQkJLmRtYV9tYXNrCT0gJm1tYzJfZG1hbWFzaywKLQkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMl9jb25mLAotCX0sCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBtbWMyX3Jlc291cmNlcywKLX07Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaW5pdF9tbWModm9pZCkKLXsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnCSptbWNfY29uZjsKLQljb25zdCBzdHJ1Y3Qgb21hcF9tbWNfY29uZgkqbW1jOwotCi0JLyogTk9URTogIGFzc3VtZXMgTU1DIHdhcyBuZXZlciAod3JvbmdseSkgZW5hYmxlZCAqLwotCW1tY19jb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX01NQywgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyk7Ci0JaWYgKCFtbWNfY29uZikKLQkJcmV0dXJuOwotCi0JLyogYmxvY2sgMSBpcyBhbHdheXMgYXZhaWxhYmxlIGFuZCBoYXMganVzdCBvbmUgcGlub3V0IG9wdGlvbiAqLwotCW1tYyA9ICZtbWNfY29uZi0+bW1jWzBdOwotCWlmIChtbWMtPmVuYWJsZWQpIHsKLQkJb21hcF9jZmdfcmVnKE1NQ19DTUQpOwotCQlvbWFwX2NmZ19yZWcoTU1DX0NMSyk7Ci0JCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7Ci0JCWlmIChjcHVfaXNfb21hcDE3MTAoKSkgewotCSAgICAgICAgICAgICAgb21hcF9jZmdfcmVnKE0xNV8xNzEwX01NQ19DTEtJKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKLQkgICAgICAgICAgICAgIG9tYXBfY2ZnX3JlZyhQMjBfMTcxMF9NTUNfREFURElSMCk7Ci0JICAgICAgICB9Ci0JCWlmIChtbWMtPndpcmU0KSB7Ci0JCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDEpOwotCQkJLyogTk9URTogIERBVDIgY2FuIGJlIG9uIFcxMCAoaGVyZSkgb3IgTTE1ICovCi0JCQlpZiAoIW1tYy0+bm9tdXgpCi0JCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQyKTsKLQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMyk7Ci0JCX0KLQkJbW1jMV9jb25mID0gKm1tYzsKLQkJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbW1jX29tYXBfZGV2aWNlMSk7Ci0JfQotCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE2WFgKLQkvKiBibG9jayAyIGlzIG9uIG5ld2VyIGNoaXBzLCBhbmQgaGFzIG1hbnkgcGlub3V0IG9wdGlvbnMgKi8KLQltbWMgPSAmbW1jX2NvbmYtPm1tY1sxXTsKLQlpZiAobW1jLT5lbmFibGVkKSB7Ci0JCWlmICghbW1jLT5ub211eCkgewotCQkJb21hcF9jZmdfcmVnKFk4XzE2MTBfTU1DMl9DTUQpOwotCQkJb21hcF9jZmdfcmVnKFkxMF8xNjEwX01NQzJfQ0xLKTsKLQkJCW9tYXBfY2ZnX3JlZyhSMThfMTYxMF9NTUMyX0NMS0lOKTsKLQkJCW9tYXBfY2ZnX3JlZyhXOF8xNjEwX01NQzJfREFUMCk7Ci0JCQlpZiAobW1jLT53aXJlNCkgewotCQkJCW9tYXBfY2ZnX3JlZyhWOF8xNjEwX01NQzJfREFUMSk7Ci0JCQkJb21hcF9jZmdfcmVnKFcxNV8xNjEwX01NQzJfREFUMik7Ci0JCQkJb21hcF9jZmdfcmVnKFIxMF8xNjEwX01NQzJfREFUMyk7Ci0JCQl9Ci0KLQkJCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBsZXZlbCBzaGlmdGVyICovCi0JCQlvbWFwX2NmZ19yZWcoVjlfMTYxMF9NTUMyX0NNRERJUik7Ci0JCQlvbWFwX2NmZ19yZWcoVjVfMTYxMF9NTUMyX0RBVERJUjApOwotCQkJb21hcF9jZmdfcmVnKFcxOV8xNjEwX01NQzJfREFURElSMSk7Ci0JCX0KLQotCQkvKiBGZWVkYmFjayBjbG9jayBtdXN0IGJlIHNldCBvbiBPTUFQLTE3MTAgTU1DMiAqLwotCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpCi0JCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSkgfCAoMSA8PCAyNCksCi0JCQkJICAgICBNT0RfQ09ORl9DVFJMXzEpOwotCQltbWMyX2NvbmYgPSAqbW1jOwotCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UyKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KLSNlbmRpZgotCiAjaWYJZGVmaW5lZChDT05GSUdfT01BUF9SVEMpIHx8IGRlZmluZWQoQ09ORklHX09NQVBfUlRDKQogCiAjZGVmaW5lCU9NQVBfUlRDX0JBU0UJCTB4ZmZmYjQ4MDAKQEAgLTI3OSwzOCArOTksNiBAQAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ydGModm9pZCkge30KICNlbmRpZgogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYJZGVmaW5lZChDT05GSUdfT01BUDE2WFhfV0FUQ0hET0cpIHx8IGRlZmluZWQoQ09ORklHX09NQVAxNlhYX1dBVENIRE9HX01PRFVMRSkKLQotI2RlZmluZQlPTUFQX1dEVF9CQVNFCQkweGZmZmViMDAwCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugd2R0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IE9NQVBfV0RUX0JBU0UsCi0JCS5lbmQJCT0gT01BUF9XRFRfQkFTRSArIDB4NGYsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF93ZHRfZGV2aWNlID0gewotCS5uYW1lCSAgID0gIm9tYXAxNjEwX3dkdCIsCi0JLmlkCSAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKLXsKLQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9Ci0jZW5kaWYKLQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0zMzQsMTggKzEyMiwxNSBAQAogICogbWF5IGJlIGhhbmRsZWQgYnkgdGhlIGJvb3QgbG9hZGVyLCBhbmQgZHJpdmVycyBzaG91bGQgZXhwZWN0IGl0IHdpbGwKICAqIG5vcm1hbGx5IGhhdmUgYmVlbiBkb25lIGJ5IHRoZSB0aW1lIHRoZXkncmUgcHJvYmVkLgogICovCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZGV2aWNlcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDFfaW5pdF9kZXZpY2VzKHZvaWQpCiB7CiAJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KLQlvbWFwX2luaXRfaTJjKCk7CiAJb21hcF9pbml0X2lyZGEoKTsKLQlvbWFwX2luaXRfbW1jKCk7CiAJb21hcF9pbml0X3J0YygpOwotCW9tYXBfaW5pdF93ZHQoKTsKIAogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CithcmNoX2luaXRjYWxsKG9tYXAxX2luaXRfZGV2aWNlcyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwppbmRleCA5ODZjM2I3Li41YzYzN2MwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCkBAIC0xOCw2ICsxOCwxMyBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKyNkZWZpbmUgT01BUF9ESUVfSURfMAkJMHhmZmZlMTgwMAorI2RlZmluZSBPTUFQX0RJRV9JRF8xCQkweGZmZmUxODA0CisjZGVmaW5lIE9NQVBfUFJPRFVDVElPTl9JRF8wCTB4ZmZmZTIwMDAKKyNkZWZpbmUgT01BUF9QUk9EVUNUSU9OX0lEXzEJMHhmZmZlMjAwNAorI2RlZmluZSBPTUFQMzJfSURfMAkJMHhmZmZlZDQwMAorI2RlZmluZSBPTUFQMzJfSURfMQkJMHhmZmZlZDQwNAorCiBzdHJ1Y3Qgb21hcF9pZCB7CiAJdTE2CWp0YWdfaWQ7CS8qIFVzZWQgdG8gZGV0ZXJtaW5lIE9NQVAgdHlwZSAqLwogCXU4CWRpZV9yZXY7CS8qIFByb2Nlc3NvciByZXZpc2lvbiAqLwpAQCAtMjcsNiArMzQsNyBAQAogCiAvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuanRhZ19pZCA9IDB4YjU3NCwgLmRpZV9yZXYgPSAweDIsIC5vbWFwX2lkID0gMHgwMzMxMDMxNSwgLnR5cGUgPSAweDAzMTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHgzNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAxMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjAwMDAsIC50eXBlID0gMHgwNzMwMDMwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKQEAgLTE2NCw2ICsxNzIsNyBAQAogCWNhc2UgMHgwNzoKIAkJc3lzdGVtX3JldiB8PSAweDA3OwogCQlicmVhazsKKwljYXNlIDB4MDM6CiAJY2FzZSAweDE1OgogCQlzeXN0ZW1fcmV2IHw9IDB4MTU7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCmluZGV4IDc5ZmI4NjUuLmE3YTE5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKQEAgLTE1LDkgKzE1LDEwIEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi1leHRlcm4gaW50IGNsa19pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMV9jbGtfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXBfY2hlY2tfcmV2aXNpb24odm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKIApAQCAtNTAsNyArNTEsNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwMTUxMF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCS52aXJ0dWFsCT0gT01BUDE1MTBfRFNQX0JBU0UsCkBAIC05OCw3ICs5OSw3IEBACiAJCWlvdGFibGVfaW5pdChvbWFwNzMwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDczMF9pb19kZXNjKSk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlpb3RhYmxlX2luaXQob21hcDE1MTBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMTUxMF9pb19kZXNjKSk7CiAJfQpAQCAtMTE5LDcgKzEyMCw3IEBACiAKIAkvKiBNdXN0IGluaXQgY2xvY2tzIGVhcmx5IHRvIGFzc3VyZSB0aGF0IHRpbWVyIGludGVycnVwdCB3b3JrcwogCSAqLwotCWNsa19pbml0KCk7CisJb21hcDFfY2xrX2luaXQoKTsKIH0KIAogLyoKQEAgLTEyNyw3ICsxMjgsOSBAQAogICovCiB2b2lkIF9faW5pdCBvbWFwX21hcF9jb21tb25faW8odm9pZCkKIHsKLQlpZiAoIWluaXRpYWxpemVkKQorCWlmICghaW5pdGlhbGl6ZWQpIHsKIAkJX29tYXBfbWFwX2lvKCk7CisJCW9tYXAxX211eF9pbml0KCk7CisJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCAxOTJjZTYwLi5lZDY1YTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKQEAgLTE0NywxMSArMTQ4LDE1IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDE1MTBfaXJxX2JhbmtzW10gPSB7CiAJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMV9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKIAl7IC5iYXNlX3JlZyA9IE9NQVBfSUgyX0JBU0UsIAkJLnRyaWdnZXJfbWFwID0gMHhmZmJmZmZlZCB9LAogfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayBvbWFwMzEwX2lycV9iYW5rc1tdID0geworCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwgCQkudHJpZ2dlcl9tYXAgPSAweGIzZmFlZmMzIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLCAJCS50cmlnZ2VyX21hcCA9IDB4NjViM2MwNjEgfSwKK307CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCkBAIC0xODEsMTEgKzE4NiwxNSBAQAogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDczMF9pcnFfYmFua3MpOwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaXJxX2JhbmtzID0gb21hcDE1MTBfaXJxX2JhbmtzOwogCQlpcnFfYmFua19jb3VudCA9IEFSUkFZX1NJWkUob21hcDE1MTBfaXJxX2JhbmtzKTsKIAl9CisJaWYgKGNwdV9pc19vbWFwMzEwKCkpIHsKKwkJaXJxX2JhbmtzID0gb21hcDMxMF9pcnFfYmFua3M7CisJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMzEwX2lycV9iYW5rcyk7CisJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIAlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKQEAgLTIyNiw5ICsyMzUsMTEgQEAKIAl9CiAKIAkvKiBVbm1hc2sgbGV2ZWwgMiBoYW5kbGVyICovCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKworCWlmIChjcHVfaXNfb21hcDczMCgpKQogCQlvbWFwX3VubWFza19pcnEoSU5UXzczMF9JSDJfSVJRKTsKLQl9IGVsc2UgewotCQlvbWFwX3VubWFza19pcnEoSU5UX0lIMl9JUlEpOwotCX0KKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJb21hcF91bm1hc2tfaXJxKElOVF8xNTEwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX3VubWFza19pcnEoSU5UXzE2MTBfSUgyX0lSUSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sZWRzLWgycDItZGVidWcuYwppbmRleCAzOTkwMTBjLi42NTA2NTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMtaDJwMi1kZWJ1Zy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy1oMnAyLWRlYnVnLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvZnBnYS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KQEAgLTYzLDE0ICs2NCwxOSBAQAogCWNhc2UgbGVkX3N0b3A6CiAJY2FzZSBsZWRfaGFsdGVkOgogCQkvKiBhbGwgbGVkcyBvZmYgZHVyaW5nIHN1c3BlbmQgb3Igc2h1dGRvd24gKi8KLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fVElNRVIsIDApOwotCQlvbWFwX3NldF9ncGlvX2RhdGFvdXQoR1BJT19JRExFLCAwKTsKKworCQlpZiAoISBtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkgeworCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fVElNRVIsIDApOworCQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7CisJCX0KKwogCQlfX3Jhd193cml0ZXcofjAsICZmcGdhLT5sZWRzKTsKIAkJbGVkX3N0YXRlICY9IH5MRURfU1RBVEVfRU5BQkxFRDsKIAkJaWYgKGV2dCA9PSBsZWRfaGFsdGVkKSB7CiAJCQlpb3VubWFwKGZwZ2EpOwogCQkJZnBnYSA9IE5VTEw7CiAJCX0KKwogCQlnb3RvIGRvbmU7CiAKIAljYXNlIGxlZF9jbGFpbToKQEAgLTg1LDE4ICs5MSwzNyBAQAogI2lmZGVmIENPTkZJR19MRURTX1RJTUVSCiAJY2FzZSBsZWRfdGltZXI6CiAJCWxlZF9zdGF0ZSBePSBMRURfVElNRVJfT047Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCBsZWRfc3RhdGUgJiBMRURfVElNRVJfT04pOwotCQlnb3RvIGRvbmU7CisKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQorCQkJaHdfbGVkX3N0YXRlIF49IEgyUDJfREJHX0ZQR0FfUDJfTEVEX1RJTUVSOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX1RJTUVSLCBsZWRfc3RhdGUgJiBMRURfVElNRVJfT04pOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19MRURTX0NQVQogCWNhc2UgbGVkX2lkbGVfc3RhcnQ6Ci0JCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOwotCQlnb3RvIGRvbmU7CisJCWlmIChtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKSkKKwkJCWh3X2xlZF9zdGF0ZSB8PSBIMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDEpOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAKIAljYXNlIGxlZF9pZGxlX2VuZDoKLQkJb21hcF9zZXRfZ3Bpb19kYXRhb3V0KEdQSU9fSURMRSwgMCk7Ci0JCWdvdG8gZG9uZTsKKwkJaWYgKG1hY2hpbmVfaXNfb21hcF9wZXJzZXVzMigpKQorCQkJaHdfbGVkX3N0YXRlICY9IH5IMlAyX0RCR19GUEdBX1AyX0xFRF9JRExFOworCQllbHNlIHsKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChHUElPX0lETEUsIDApOworCQkJZ290byBkb25lOworCQl9CisKKwkJYnJlYWs7CiAjZW5kaWYKIAogCWNhc2UgbGVkX2dyZWVuX29uOgpAQCAtMTM1LDcgKzE2MCw3IEBACiAJLyoKIAkgKiAgQWN0dWFsbHkgYnVybiB0aGUgTEVEcwogCSAqLwotCWlmIChsZWRfc3RhdGUgJiBMRURfU1RBVEVfQ0xBSU1FRCkKKwlpZiAobGVkX3N0YXRlICYgTEVEX1NUQVRFX0VOQUJMRUQpCiAJCV9fcmF3X3dyaXRldyh+aHdfbGVkX3N0YXRlLCAmZnBnYS0+bGVkcyk7CiAKIGRvbmU6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCmluZGV4IDVjNmIxYmIuLjNmOWRjYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbGVkcy5jCkBAIC0zMyw3ICszMyw2IEBACiAKIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkKIAkJCXx8IG1hY2hpbmVfaXNfb21hcF9oMygpCi0JCQl8fCBtYWNoaW5lX2lzX29tYXBfcGVyc2V1czIoKQogI2lmZGVmCUNPTkZJR19PTUFQX09TS19NSVNUUkFMCiAJCQl8fCBtYWNoaW5lX2lzX29tYXBfb3NrKCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRiOGQ2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCisgKgorICogT01BUDEgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDczMF9waW5zW10gPSB7CitNVVhfQ0ZHXzczMCgiRTJfNzMwX0tCUjAiLAkxMiwgICAyMSwgICAgMCwJICAwLCAgIDIwLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJKN183MzBfS0JSMSIsCTEyLCAgIDI1LCAgICAwLAkgIDAsICAgMjQsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUxXzczMF9LQlIyIiwJMTIsICAgMjksICAgIDAsCSAgMCwgICAyOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRjNfNzMwX0tCUjMiLAkxMywgICAgMSwgICAgMCwJICAwLCAgIDAsICAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJEMl83MzBfS0JSNCIsCTEzLCAgICA1LCAgICAwLAkgIDAsICAgNCwgICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkMyXzczMF9LQkMwIiwJMTMsICAgIDksICAgIDAsCSAgMCwJOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRDNfNzMwX0tCQzEiLAkxMywgICAxMywgICAgMCwJICAwLCAgIDEyLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJFNF83MzBfS0JDMiIsCTEzLCAgIDE3LCAgICAwLAkgIDAsICAgMTYsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkY0XzczMF9LQkMzIiwJMTMsICAgMjEsICAgIDAsCSAgMCwgICAyMCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRTNfNzMwX0tCQzQiLAkxMywgICAyNSwgICAgMCwJICAwLCAgIDI0LCAgIDEsCSAgTkEsCSAwLCAgMCkKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwMXh4eF9waW5zW10gPSB7CisvKgorICoJIGRlc2NyaXB0aW9uCQltdXggIG1vZGUgICBtdXgJIHB1bGwgcHVsbCAgcHVsbCAgcHVfcGQJIHB1ICBkYmcKKyAqCQkJCXJlZyAgb2Zmc2V0IG1vZGUgcmVnICBiaXQgICBlbmEJICByZWcKKyAqLworTVVYX0NGRygiVUFSVDFfVFgiLAkJIDksICAgMjEsICAgIDEsCSAgMiwgICAzLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDFfUlRTIiwJCSA5LCAgIDEyLCAgICAxLAkgIDIsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogVUFSVDIgKENPTV9VQVJUX0dBVElORyksIGNvbmZsaWN0cyB3aXRoIFVTQjIgKi8KK01VWF9DRkcoIlVBUlQyX1RYIiwJCSBDLCAgIDI3LCAgICAxLAkgIDMsICAgMywgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX1JYIiwJCSBDLCAgIDE4LCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX0NUUyIsCQkgQywgICAyMSwgICAgMCwJICAzLCAgIDEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMl9SVFMiLAkJIEMsICAgMjQsICAgIDEsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBVQVJUMyAoR0lHQV9VQVJUX0dBVElORykgKi8KK01VWF9DRkcoIlVBUlQzX1RYIiwJCSA2LCAgICAwLCAgICAxLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX1JYIiwJCSA2LCAgICAzLCAgICAwLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0NUUyIsCQkgNSwgICAxMiwgICAgMiwJICAwLCAgMjQsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19SVFMiLAkJIDUsICAgMTUsICAgIDIsCSAgMCwgIDI1LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfQ0xLUkVRIiwJCSA5LCAgIDI3LCAgICAwLAkgIDIsICAgNSwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0JDTEsiLAkJIEEsICAgIDAsICAgIDAsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCitNVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCisKKy8qIFVTQiBpbnRlcm5hbCBtYXN0ZXIgZ2VuZXJpYyAqLworTVVYX0NGRygiUjE4X1VTQl9WQlVTIiwJCSA3LCAgICA5LCAgICAyLAkgIDEsICAxMSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlIxOF8xNTEwX1VTQl9HUElPMCIsCSA3LCAgICA5LCAgICAwLAkgIDEsICAxMSwgICAxLAkgTkEsCSAwLCAgMSkKKy8qIHdvcmtzIGFyb3VuZCBlcnJhdHVtOiAgVzRfVVNCX1BVRU4gYW5kIFc0X1VTQl9QVURJUyBhcmUgc3dpdGNoZWQhICovCitNVVhfQ0ZHKCJXNF9VU0JfUFVFTiIsCQkgRCwgICAgMywgICAgMywJICAzLCAgIDUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfQ0xLTyIsCQkgRCwgICAgMywgICAgMSwJICAzLCAgIDUsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfSElHSFoiLAkJIEQsICAgIDMsICAgIDQsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzRfR1BJTzU4IiwJCSBELCAgICAzLCAgICA3LAkgIDMsICAgNSwgICAwLAkgIDMsCSAwLCAgMSkKKworLyogVVNCMSBtYXN0ZXIgKi8KK01VWF9DRkcoIlVTQjFfU1VTUCIsCQkgOCwgICAyNywgICAgMiwJICAxLCAgMjcsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1NFMCIsCQkgOSwgICAgMCwgICAgMiwJICAxLCAgMjgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTNfMTYxMF9VU0IxX1NFMCIsCSA5LCAgICAwLCAgICA0LAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVFhFTiIsCQkgOSwgICAgMywgICAgMiwJICAxLCAgMjksICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1RYRCIsCQkgOSwgICAyNCwgICAgMSwJICAyLCAgIDQsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1ZQIiwJCSBBLCAgICAzLCAgICAxLAkgIDIsICAgNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVk0iLAkJIEEsICAgIDYsICAgIDEsCSAgMiwgICA4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9SQ1YiLAkJIEEsICAgIDksICAgIDEsCSAgMiwgICA5LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9TUEVFRCIsCQkgQSwgICAxMiwgICAgMiwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJSMTNfMTYxMF9VU0IxX1NQRUVEIiwJIEEsICAgMTIsICAgIDUsCSAgMiwgIDEwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjEzXzE3MTBfVVNCMV9TRU8iLAkgQSwgICAxMiwgICAgNSwgICAyLCAgMTAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBVU0IyIG1hc3RlciAqLworTVVYX0NGRygiVVNCMl9TVVNQIiwJCSBCLCAgICAzLCAgICAxLAkgIDIsICAxNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVlAiLAkJIEIsICAgIDYsICAgIDEsCSAgMiwgIDE4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEVOIiwJCSBCLCAgICA5LCAgICAxLAkgIDIsICAxOSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVk0iLAkJIEMsICAgMTgsICAgIDEsCSAgMywgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9SQ1YiLAkJIEMsICAgMjEsICAgIDEsCSAgMywgICAxLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9TRTAiLAkJIEMsICAgMjQsICAgIDIsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEQiLAkJIEMsICAgMjcsICAgIDIsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE1MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE1MTBfR1BJTzAiLAkgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiUjE5XzE1MTBfR1BJTzEiLAkgNywgICAgNiwgICAgMCwgICAxLCAgMTAsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiTTE0XzE1MTBfR1BJTzIiLAkgNywgICAgMywgICAgMCwgICAxLCAgIDksICAgMSwgICAgMCwgICAgIDAsICAxKQorCisvKiBPTUFQMTYxMCBHUElPICovCitNVVhfQ0ZHKCJQMThfMTYxMF9HUElPMyIsCSA3LCAgICAwLCAgICAwLCAgIDEsICAgOCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJZMTVfMTYxMF9HUElPMTciLAkgQSwgICAgMCwgICAgNywgICAyLCAgIDYsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE3MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE3MTBfR1BJTzAiLCAgICAgICAgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVjJfMTcxMF9HUElPMTAiLCAgICAgICAgRiwgICAyNywgICAgMSwgICA0LCAgIDMsICAgMSwgICAgNCwgICAgIDEsICAxKQorTVVYX0NGRygiTjIxXzE3MTBfR1BJTzE0IiwgICAgICAgNiwgICAgOSwgICAgMCwgICAxLCAgIDEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVzE1XzE3MTBfR1BJTzQwIiwgICAgICAgOSwgICAyNywgICAgNywgICAyLCAgIDUsICAgMSwgICAgMiwgICAgIDEsICAxKQorCisvKiBNUFVJTyAqLworTVVYX0NGRygiTVBVSU8yIiwJCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk4xNV8xNjEwX01QVUlPMiIsCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIk1QVUlPNCIsCQkgNywgICAxNSwgICAgMCwJICAxLCAgMTMsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNUFVJTzUiLAkJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDEsCSBOQSwJIDAsICAxKQorCitNVVhfQ0ZHKCJUMjBfMTYxMF9NUFVJTzUiLAkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzYiLAkxMCwgICAxNSwgICAgMiwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzciLAkgQSwgICAyNCwgICAgMiwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzkiLAkxMCwgICAxNSwgICAgMSwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzEwIiwJIEEsICAgMjQsICAgIDEsCSAgMiwgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiVzEwXzE2MTBfTVBVSU8xMSIsCSBBLCAgIDE4LCAgICAyLAkgIDIsICAxMSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkUyMF8xNjEwX01QVUlPMTMiLAkgMywgICAyMSwgICAgMSwJICAwLCAgIDcsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJVMjBfMTYxMF9NUFVJTzE0IiwJIDksICAgIDYsICAgIDYsCSAgMCwgIDMwLCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiRTE5XzE2MTBfTVBVSU8xNSIsCSAzLCAgIDE4LCAgICAxLAkgIDAsICAgNiwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogTUNCU1AyICovCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLUiIsCQkgQywgICAgNiwgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLWCIsCQkgQywgICAgOSwgICAgMCwJICAyLCAgMjksICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRFIiLAkJIEMsICAgIDAsICAgIDAsCSAgMiwgIDI2LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0RYIiwJCSBDLCAgIDE1LCAgICAwLAkgIDIsICAzMSwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9GU1IiLAkJIEMsICAgMTIsICAgIDAsCSAgMiwgIDMwLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0ZTWCIsCQkgQywgICAgMywgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCisKKy8qIE1DQlNQMyBOT1RFOiBNb2RlIG11c3QgMSBmb3IgY2xvY2sgKi8KK01VWF9DRkcoIk1DQlNQM19DTEtYIiwJCSA5LCAgICAzLCAgICAxLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKKworLyogTWlzYyBiYWxsb3V0cyAqLworTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKKworLyogT01BUC0xNjEwIE1NQzIgKi8KK01VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjhfMTYxMF9NTUMyX0RBVDEiLAkgQiwgICAyNywgICAgNiwJICAyLCAgMjUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTVfMTYxMF9NTUMyX0RBVDIiLAkgOSwgICAxMiwgICAgNiwJICAyLCAgIDUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTBfMTYxMF9NTUMyX0RBVDMiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgMjIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJZMTBfMTYxMF9NTUMyX0NMSyIsCSBCLCAgICAzLCAgICA2LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk4XzE2MTBfTU1DMl9DTUQiLAkgQiwgICAyNCwgICAgNiwJICAyLCAgMjQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX01NQzJfQ01ERElSIiwJIEIsICAgMTIsICAgIDYsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjVfMTYxMF9NTUMyX0RBVERJUjAiLAkgQiwgICAxNSwgICAgNiwJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9NTUMyX0RBVERJUjEiLCA4LCAgIDE1LCAgICA2LAkgIDEsICAyMywgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlIxOF8xNjEwX01NQzJfQ0xLSU4iLAkgNywgICAgOSwgICAgNiwJICAxLCAgMTEsICAgMCwJICAxLAkxMSwgIDEpCisKKy8qIE9NQVAtMTYxMCBFeHRlcm5hbCBUcmFjZSBJbnRlcmZhY2UgKi8KK01VWF9DRkcoIk0xOV8xNjEwX0VUTV9QU1RBVDAiLAkgNSwgICAyNywgICAgMSwJICAwLCAgMjksICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJMMTVfMTYxMF9FVE1fUFNUQVQxIiwJIDUsICAgMjQsICAgIDEsCSAgMCwgIDI4LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiTDE4XzE2MTBfRVRNX1BTVEFUMiIsCSA1LCAgIDIxLCAgICAxLAkgIDAsICAyNywgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkwxOV8xNjEwX0VUTV9EMCIsCSA1LCAgIDE4LCAgICAxLAkgIDAsICAyNiwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOV8xNjEwX0VUTV9ENiIsCSA1LCAgICAwLCAgICAxLAkgIDAsICAyMCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOF8xNjEwX0VUTV9ENyIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAxOSwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogT01BUDE2WFggR1BJTyAqLworTVVYX0NGRygiUDIwXzE2MTBfR1BJTzQiLAkgNiwgICAyNywgICAgMCwJICAxLCAgIDcsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX0dQSU83IiwJIEIsICAgMTIsICAgIDEsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzhfMTYxMF9HUElPOSIsCSBCLCAgIDIxLCAgICAwLAkgIDIsICAyMywgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIk4yMF8xNjEwX0dQSU8xMSIsICAgICAgIDYsICAgMTgsICAgIDAsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICAxLCAgMSkKK01VWF9DRkcoIk4xOV8xNjEwX0dQSU8xMyIsCSA2LCAgIDEyLCAgICAwLAkgIDEsICAgMiwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlAxMF8xNjEwX0dQSU8yMiIsCSBDLCAgICAwLCAgICA3LAkgIDIsICAyNiwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlY1XzE2MTBfR1BJTzI0IiwJIEIsICAgMTUsICAgIDcsCSAgMiwgIDIxLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiQUEyMF8xNjEwX0dQSU9fNDEiLAkgOSwgICAgOSwgICAgNywJICAxLCAgMzEsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9HUElPNDgiLAkgOCwgICAxNSwgICAgNywgICAxLCAgMjMsICAgMSwgICAgMSwgICAgIDAsICAxKQorTVVYX0NGRygiTTdfMTYxMF9HUElPNjIiLAkxMCwgICAgMCwgICAgMCwgICA0LCAgMjQsICAgMCwgICAgNCwgICAgIDAsICAxKQorTVVYX0NGRygiVjE0XzE2WFhfR1BJTzM3IiwJIDksICAgMTgsICAgIDcsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAwKQorTVVYX0NGRygiUjlfMTZYWF9HUElPMTgiLAkgQywgICAxOCwgICAgNywgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAwKQorTVVYX0NGRygiTDE0XzE2WFhfR1BJTzQ5IiwJIDYsICAgIDMsICAgIDcsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMCkKKworLyogT01BUC0xNjEwIHVXaXJlICovCitNVVhfQ0ZHKCJWMTlfMTYxMF9VV0lSRV9TQ0xLIiwJIDgsICAgIDYsICAgIDAsCSAgMSwgIDIwLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVTE4XzE2MTBfVVdJUkVfU0RJIiwJIDgsICAgIDAsICAgIDAsCSAgMSwgIDE4LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzIxXzE2MTBfVVdJUkVfU0RPIiwJIDgsICAgIDMsICAgIDAsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE0XzE2MTBfVVdJUkVfQ1MwIiwJIDgsICAgIDksICAgIDEsCSAgMSwgIDIxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE2MTAgRmxhc2ggKi8KK01VWF9DRkcoIkwzXzE2MTBfRkxBU0hfQ1MyQl9PRSIsMTAsICAgIDYsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTThfMTYxMF9GTEFTSF9DUzJCX1dFIiwxMCwgICAgMywgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIEZpcnN0IE1NQyBpbnRlcmZhY2UsIHNhbWUgb24gMTUxMCwgMTYxMCBhbmQgMTcxMCAqLworTVVYX0NGRygiTU1DX0NNRCIsCQkgQSwgICAyNywgICAgMCwJICAyLCAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMSIsCQkgQSwgICAyNCwgICAgMCwJICAyLCAgMTQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMiIsCQkgQSwgICAxOCwgICAgMCwJICAyLCAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMCIsCQkgQiwgICAgMCwgICAgMCwJICAyLCAgMTYsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfQ0xLIiwJCSBBLCAgIDIxLCAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1NQ19EQVQzIiwJCTEwLCAgIDE1LCAgICAwLAkgIDMsICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKK01VWF9DRkcoIk0xNV8xNzEwX01NQ19DTEtJIiwJIDYsICAgMjEsICAgIDIsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlAxOV8xNzEwX01NQ19DTURESVIiLAkgNiwgICAyNCwgICAgNiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorTVVYX0NGRygiUDIwXzE3MTBfTU1DX0RBVERJUjAiLAkgNiwgICAyNywgICAgNSwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE2MTAgVVNCMCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiAqLworTVVYX0NGRygiVzlfVVNCMF9UWEVOIiwJCSBCLCAgIDksICAgICA1LAkgIDIsICAxOSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkFBOV9VU0IwX1ZQIiwJCSBCLCAgIDYsICAgICA1LAkgIDIsICAxOCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk1X1VTQjBfUkNWIiwJCSBDLCAgMjEsICAgICA1LAkgIDMsICAgMSwgICAwLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIlI5X1VTQjBfVk0iLAkJIEMsICAxOCwgICAgIDUsCSAgMywgICAwLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjZfVVNCMF9UWEQiLAkJIEMsICAyNywgICAgIDUsCSAgMywgICAzLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzVfVVNCMF9TRTAiLAkJIEMsICAyNCwgICAgIDUsCSAgMywgICAyLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjlfVVNCMF9TUEVFRCIsCSBCLCAgMTIsICAgICA1LAkgIDIsICAyMCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlkxMF9VU0IwX1NVU1AiLAkgQiwgICAzLCAgICAgNSwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCisKKy8qIFVTQjIgaW50ZXJmYWNlICovCitNVVhfQ0ZHKCJXOV9VU0IyX1RYRU4iLAkJIEIsICAgOSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiQUE5X1VTQjJfVlAiLAkJIEIsICAgNiwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiWTVfVVNCMl9SQ1YiLAkJIEMsICAyMSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjlfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIDE2WFggVUFSVCAqLworTVVYX0NGRygiUjEzXzE2MTBfVUFSVDFfVFgiLAkgQSwgIDEyLCAgICAgNiwJICAyLCAgMTAsICAgMCwJICAyLAkxMCwgIDEpCitNVVhfQ0ZHKCJWMTRfMTZYWF9VQVJUMV9SWCIsCSA5LCAgMTgsICAgICAwLAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMSkKK01VWF9DRkcoIlIxNF8xNjEwX1VBUlQxX0NUUyIsCSA5LCAgMTUsICAgICAwLAkgIDIsICAgMSwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIkFBMTVfMTYxMF9VQVJUMV9SVFMiLAkgOSwgIDEyLCAgICAgMSwJICAyLCAgIDAsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJSOV8xNlhYX1VBUlQyX1JYIiwJIEMsICAxOCwgICAgIDAsICAgMywgICAwLCAgIDAsICAgIDMsICAgICAwLCAgMSkKK01VWF9DRkcoIkwxNF8xNlhYX1VBUlQzX1JYIiwJIDYsICAgMywgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMSkKKworLyogSTJDIGludGVyZmFjZSAqLworTVVYX0NGRygiSTJDX1NDTCIsCQkgNywgIDI0LCAgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJJMkNfU0RBIiwJCSA3LCAgMjcsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogS2V5cGFkICovCitNVVhfQ0ZHKCJGMThfMTYxMF9LQkMwIiwJIDMsICAxNSwgICAgIDAsCSAgMCwgICA1LCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRDIwXzE2MTBfS0JDMSIsCSAzLCAgMTIsICAgICAwLAkgIDAsICAgNCwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkQxOV8xNjEwX0tCQzIiLAkgMywgICA5LCAgICAgMCwJICAwLCAgIDMsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJFMThfMTYxMF9LQkMzIiwJIDMsICAgNiwgICAgIDAsCSAgMCwgICAyLCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiQzIxXzE2MTBfS0JDNCIsCSAzLCAgIDMsICAgICAwLAkgIDAsICAgMSwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkcxOF8xNjEwX0tCUjAiLAkgNCwgICAwLCAgICAgMCwJICAwLCAgIDEwLCAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJGMTlfMTYxMF9LQlIxIiwJIDMsICAgMjcsICAgIDAsCSAgMCwgICA5LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiSDE0XzE2MTBfS0JSMiIsCSAzLCAgIDI0LCAgICAwLAkgIDAsICAgOCwgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkUyMF8xNjEwX0tCUjMiLAkgMywgICAyMSwgICAgMCwJICAwLCAgIDcsICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJFMTlfMTYxMF9LQlI0IiwJIDMsICAgMTgsICAgIDAsCSAgMCwgICA2LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiTjE5XzE2MTBfS0JSNSIsCSA2LCAgMTIsICAgICAxLAkgIDEsICAgMiwgICAxLAkgIDEsCSAxLCAgMCkKKworLyogUG93ZXIgbWFuYWdlbWVudCAqLworTVVYX0NGRygiVDIwXzE2MTBfTE9XX1BXUiIsCSA3LCAgIDEyLCAgICAxLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQorCisvKiBNQ0xLIFNldHRpbmdzICovCitNVVhfQ0ZHKCJWNV8xNzEwX01DTEtfT04iLAkgQiwgICAxNSwgICAgMCwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlY1XzE3MTBfTUNMS19PRkYiLAkgQiwgICAxNSwgICAgNiwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT04iLAkgQiwgICAxOCwgICAgMCwJICBOQSwgIDIyLCAgIDAsCSAgTkEsCSAxLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT0ZGIiwJIEIsICAgMTgsICAgIDYsCSAgMiwgICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKKworLyogQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIsIGNvbmZsaWN0cyB3aXRoIE1NQzEgKi8KK01VWF9DRkcoIlAxMV8xNjEwX0NGX0NEMiIsCSBBLCAgIDI3LCAgICAzLAkgIDIsICAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTFfMTYxMF9DRl9JT0lTMTYiLAkgQiwgICAgMCwgICAgMywJICAyLCAgIDE2LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjEwXzE2MTBfQ0ZfSVJFUSIsCSBBLCAgIDI0LCAgICAzLAkgIDIsICAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTBfMTYxMF9DRl9SRVNFVCIsCSBBLCAgIDE4LCAgICAzLAkgIDIsICAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9DRl9DRDEiLAkxMCwgICAxNSwgICAgMywJICAzLCAgICA4LCAgIDEsCSAgMywJIDEsICAxKQorfTsKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCB8fCBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLworCitpbnQgX19pbml0IG9tYXAxX211eF9pbml0KHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJb21hcF9tdXhfcmVnaXN0ZXIob21hcDczMF9waW5zLCBBUlJBWV9TSVpFKG9tYXA3MzBfcGlucykpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXAxeHh4X3BpbnMsIEFSUkFZX1NJWkUob21hcDF4eHhfcGlucykpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCA0MGM0ZjdjNC4uNjgxMGNmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC0xMDksOSArMTA5LDEwIEBACiAgKiBCeSBkZWZhdWx0IFVBUlQyIGRvZXMgbm90IHdvcmsgb24gSW5ub3ZhdG9yLTE1MTAgaWYgeW91IGhhdmUKICAqIFVTQiBPSENJIGVuYWJsZWQuIFRvIHVzZSBVQVJUMiwgeW91IG11c3QgZGlzYWJsZSBVU0IyIGZpcnN0LgogICovCi12b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KGludCBwb3J0c1tPTUFQX01BWF9OUl9QT1JUU10pCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KHZvaWQpCiB7CiAJaW50IGk7CisJY29uc3Qgc3RydWN0IG9tYXBfdWFydF9jb25maWcgKmluZm87CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5yZWdzaGlmdCA9IDA7CkBAIC0xMjYsMTAgKzEyNywxNCBAQAogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsyXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CiAJfQogCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyk7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IE9NQVBfTUFYX05SX1BPUlRTOyBpKyspIHsKIAkJdW5zaWduZWQgY2hhciByZWc7CiAKLQkJaWYgKHBvcnRzW2ldID09IDApIHsKKwkJaWYgKCEoKDEgPDwgaSkgJiBpbmZvLT5lbmFibGVkX3VhcnRzKSkgewogCQkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbaV0ubWVtYmFzZSA9IE5VTEw7CiAJCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tYXBiYXNlID0gMDsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwppbmRleCAxOTFhOWIxLi5jZGJmNGQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYwpAQCAtMjI2LDggKzIyNiw4IEBACiAKICNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCi0jZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNTEwIQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisjZXJyb3IgT01BUCAzMktIeiB0aW1lciBkb2VzIG5vdCBjdXJyZW50bHkgd29yayBvbiAxNVhYIQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4ODgwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMCwwICsxLDIyIEBACitjb21tZW50ICJPTUFQIENvcmUgVHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKworY29uZmlnIEFSQ0hfT01BUDI0WFgKKwlib29sICJPTUFQMjR4eCBCYXNlZCBTeXN0ZW0iCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisKK2NvbmZpZyBBUkNIX09NQVAyNDIwCisJYm9vbCAiT01BUDI0MjAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0WFgKKworY29tbWVudCAiT01BUCBCb2FyZCBUeXBlIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCitjb25maWcgTUFDSF9PTUFQX0dFTkVSSUMKKwlib29sICJHZW5lcmljIE9NQVAgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKworY29uZmlnIE1BQ0hfT01BUF9INAorCWJvb2wgIk9NQVAgMjQyMCBINCBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA0MTE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgorIworCisjIENvbW1vbiBzdXBwb3J0CitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc3JhbS1mbi5vIGNsb2NrLm8gbXV4Lm8gZGV2aWNlcy5vIHNlcmlhbC5vCisKK29iai0kKENPTkZJR19PTUFQX01QVV9USU1FUikJCSs9IHRpbWVyLWdwLm8KKworIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KK29iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjVhZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICB6cmVsYWRkci15CQk6PSAweDgwMDA4MDAwCitwYXJhbXNfcGh5cy15CQk6PSAweDgwMDAwMTAwCitpbml0cmRfcGh5cy15CQk6PSAweDgwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDJlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcC9vbWFwMS9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBDb2RlIGZvciBnZW5lcmljIE9NQVAyIGJvYXJkLiBTaG91bGQgd29yayBvbiBtYW55IE9NQVAyIHN5c3RlbXMgd2hlcmUKKyAqIHRoZSBib290bG9hZGVyIHBhc3NlcyB0aGUgYm9hcmQtc3BlY2lmaWMgZGF0YSB0byB0aGUga2VybmVsLgorICogRG8gbm90IHB1dCBhbnkgYm9hcmQgc3BlY2lmaWMgY29kZSB0byB0aGlzIGZpbGU7IGNyZWF0ZSBhIG5ldyBtYWNoaW5lCisgKiB0eXBlIGlmIHlvdSBuZWVkIGN1c3RvbSBsb3ctbGV2ZWwgaW5pdGlhbGl6YXRpb25zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBnZW5lcmljX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMgPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnIGdlbmVyaWNfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5tbWMgWzBdID0geworCQkuZW5hYmxlZCAJPSAwLAorCQkud2lyZTQJCT0gMCwKKwkJLndwX3BpbgkJPSAtMSwKKwkJLnBvd2VyX3Bpbgk9IC0xLAorCQkuc3dpdGNoX3Bpbgk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJmdlbmVyaWNfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX01NQywJCSZnZW5lcmljX21tY19jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2dlbmVyaWNfaW5pdCh2b2lkKQoreworCW9tYXBfYm9hcmRfY29uZmlnID0gZ2VuZXJpY19jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoZ2VuZXJpY19jb25maWcpOworCW9tYXBfc2VyaWFsX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0dFTkVSSUMsICJHZW5lcmljIE9NQVAyNHh4IikKKwkvKiBNYWludGFpbmVyOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4gKi8KKwkucGh5c19yYW0JPSAweDgwMDAwMDAwLAorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gb21hcF9nZW5lcmljX21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2dlbmVyaWNfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfZ2VuZXJpY19pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1NTQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9ib2FyZC1oNC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwL29tYXAxL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaDRfcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImJvb3Rsb2FkZXIiLAorCSAgICAgIC5vZmZzZXQJCT0gMCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwkvKiBib290bG9hZGVyIHBhcmFtcyBpbiB0aGUgbmV4dCBzZWN0b3IgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gInBhcmFtcyIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMTI4SywKKwkgICAgICAubWFza19mbGFncwk9IDAsCisJfSwKKwkvKiBrZXJuZWwgKi8KKwl7CisJICAgICAgLm5hbWUJCT0gImtlcm5lbCIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gU1pfMk0sCisJICAgICAgLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkgICAgICAubmFtZQkJPSAiZmlsZXN5c3RlbSIsCisJICAgICAgLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJICAgICAgLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgaDRfZmxhc2hfZGF0YSA9IHsKKwkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gaDRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGg0X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gSDRfQ1MwX0JBU0UsCisJLmVuZAkJPSBINF9DUzBfQkFTRSArIFNaXzY0TSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaDRfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZoNF9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZoNF9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaDRfc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IE9NQVAyNFhYX0VUSFJfU1RBUlQsICAgICAgICAgIC8qIFBoeXNpY2FsICovCisJCS5lbmQgICAgPSBPTUFQMjRYWF9FVEhSX1NUQVJUICsgMHhmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCAgPSBPTUFQX0dQSU9fSVJRKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpLAorCQkuZW5kICAgID0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNF9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaDRfc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gaDRfc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoNF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmaDRfc21jOTF4X2RldmljZSwKKwkmaDRfZmxhc2hfZGV2aWNlLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBoNF9pbml0X3NtYzkxeCh2b2lkKQoreworCS8qIE1ha2Ugc3VyZSBDUzEgdGltaW5ncyBhcmUgY29ycmVjdCAqLworCUdQTUNfQ09ORklHMV8xID0gMHgwMDAxMTIwMDsKKwlHUE1DX0NPTkZJRzJfMSA9IDB4MDAxZjFmMDE7CisJR1BNQ19DT05GSUczXzEgPSAweDAwMDgwODAzOworCUdQTUNfQ09ORklHNF8xID0gMHgxYzA5MWMwOTsKKwlHUE1DX0NPTkZJRzVfMSA9IDB4MDQxZjFmMWY7CisJR1BNQ19DT05GSUc2XzEgPSAweDAwMDAwNGM0OworCUdQTUNfQ09ORklHN18xID0gMHgwMDAwMGY0MCB8ICgweDA4MDAwMDAwID4+IDI0KTsKKwl1ZGVsYXkoMTAwKTsKKworCW9tYXBfY2ZnX3JlZyhNMTVfMjRYWF9HUElPOTIpOworCWlmIChvbWFwX3JlcXVlc3RfZ3BpbyhPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVxdWVzdCBHUElPJWQgZm9yIHNtYzkxeCBJUlFcbiIsCisJCQlPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCX0KKwlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihPTUFQMjRYWF9FVEhSX0dQSU9fSVJRLCAxKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaDRfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwloNF9pbml0X3NtYzkxeCgpOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgaDRfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgaDRfbW1jX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5tbWMgWzBdID0geworCQkuZW5hYmxlZAk9IDEsCisJCS53aXJlNAkJPSAxLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIGg0X2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkucGFuZWxfbmFtZQk9ICJoNCIsCisJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoNF9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZoNF91YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmg0X21tY19jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZoNF9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBwb3J0cyBhcmUgbXV4ZWQgb24gYXQgdGhpcyBwb2ludC4KKwkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KKwkgKiBpZiBub3QgbmVlZGVkLgorCSAqLworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGg0X2RldmljZXMsIEFSUkFZX1NJWkUoaDRfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gaDRfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGg0X2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9tYXBfaW8odm9pZCkKK3sKKwlvbWFwX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChPTUFQX0g0LCAiT01BUDI0MjAgSDQgYm9hcmQiKQorCS8qIE1haW50YWluZXI6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPiAqLworCS5waHlzX3JhbQk9IDB4ODAwMDAwMDAsCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2g0X21hcF9pbywKKwkuaW5pdF9pcnEJPSBvbWFwX2g0X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBvbWFwX2g0X2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTgxOGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCkBAIC0wLDAgKzEsMTEyOSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ3JlYXRlZCBmb3IgT01BUDIuCisgKgorICogIENsZWFuZWQgdXAgYW5kIG1vZGlmaWVkIHRvIHVzZSBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkKKyAqICBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqICBCYXNlZCBvbiBvbWFwMSBjbG9jay5jLCBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKworLy8jZGVmaW5lIERPV05fVkFSSUFCTEVfRFBMTCAxCQkJLyogRXhwZXJpbWVudGFsICovCisKK3N0YXRpYyBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7CitzdGF0aWMgc3RydWN0IG1lbW9yeV90aW1pbmdzIG1lbV90aW1pbmdzOworc3RhdGljIHUzMiBjdXJyX3BlcmZfbGV2ZWwgPSBQUkNNX0ZVTExfU1BFRUQ7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT21hcDIgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBSZWNhbGN1bGF0ZSBTWVNUX0NMSyAqLworc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1MzIgZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKKwlkaXYgJj0gKDEgPDwgNykgfCAoMSA8PCA2KTsJLyogVGVzdCBpZiBleHQgY2xrIGRpdmlkZWQgYnkgMSBvciAyICovCisJZGl2ID4+PSBjbGstPnJhdGVfb2Zmc2V0OworCWNsay0+cmF0ZSA9IChjbGstPnBhcmVudC0+cmF0ZSAvIGRpdik7CisJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK30KKworc3RhdGljIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKiB0Y2xrKQoreworCWludCBkcGxsX2NsaywgZHBsbF9tdWx0LCBkcGxsX2RpdiwgYW11bHQ7CisKKwlkcGxsX211bHQgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gMTIpICYgMHgwM2ZmOwkvKiAxMCBiaXRzICovCisJZHBsbF9kaXYgPSAoQ01fQ0xLU0VMMV9QTEwgPj4gOCkgJiAweDBmOwkvKiA0IGJpdHMgKi8KKwlkcGxsX2NsayA9ICh0Y2xrLT5wYXJlbnQtPnJhdGUgKiBkcGxsX211bHQpIC8gKGRwbGxfZGl2ICsgMSk7CisJYW11bHQgPSBDTV9DTEtTRUwyX1BMTCAmIDB4MzsKKwlkcGxsX2NsayAqPSBhbXVsdDsKKworCXJldHVybiBkcGxsX2NsazsKK30KKworc3RhdGljIHZvaWQgb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJZm9sbG93cGFyZW50X3JlY2FsYyhjbGspOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9wcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrKQoreworCWlmICghKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKSkKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CisKKwlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisvKiBFbmFibGUgYW4gQVBMTCBpZiBvZmYgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBjdmFsLCBpPTA7CisKKwlpZiAoY2xrLT5lbmFibGVfYml0ID09IDB4ZmYpCQkJLyogUGFyZW50IHdpbGwgZG8gaXQgKi8KKwkJcmV0dXJuOworCisJY3ZhbCA9IENNX0NMS0VOX1BMTDsKKworCWlmICgoY3ZhbCAmICgweDMgPDwgY2xrLT5lbmFibGVfYml0KSkgPT0gKDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpKQorCQlyZXR1cm47CisKKwljdmFsICY9IH4oMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJY3ZhbCB8PSAoMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJQ01fQ0xLRU5fUExMID0gY3ZhbDsKKworCWlmIChjbGsgPT0gJmFwbGw5Nl9jaykKKwkJY3ZhbCA9ICgxIDw8IDgpOworCWVsc2UgaWYgKGNsayA9PSAmYXBsbDU0X2NrKQorCQljdmFsID0gKDEgPDwgNik7CisKKwl3aGlsZSAoIUNNX0lETEVTVF9DS0dFTiAmIGN2YWwpIHsJCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwkJKytpOworCQl1ZGVsYXkoMSk7CisJCWlmIChpID09IDEwMDAwMCkKKwkJCWJyZWFrOworCX0KK30KKworLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50CisgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KKyAqLworc3RhdGljIGludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdTMyIHJlZ3ZhbDMyOworCisJaWYgKGNsay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkKKwkJcmV0dXJuIDA7CisKKwlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IDApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLAorCQkgICAgICAgY2xrLT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCkgeworCQlvbWFwMl9jbGtfZml4ZWRfZW5hYmxlKGNsayk7CisJCXJldHVybiAwOworCX0KKworCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKKworCXJldHVybiAwOworfQorCisvKiBTdG9wIEFQTEwgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgY3ZhbDsKKworCWlmKGNsay0+ZW5hYmxlX2JpdCA9PSAweGZmKQkJLyogbGV0IHBhcmVudCBvZmYgZG8gaXQgKi8KKwkJcmV0dXJuOworCisJY3ZhbCA9IENNX0NMS0VOX1BMTDsKKwljdmFsICY9IH4oMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJQ01fQ0xLRU5fUExMID0gY3ZhbDsKK30KKworLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWd2YWwzMjsKKworCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKKwkJcmV0dXJuOworCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCkgeworCQlvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZShjbGspOworCQlyZXR1cm47CisJfQorCisJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBvbWFwMl9jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChjbGstPnVzZWNvdW50KysgPT0gMCkgeworCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQorCQkJcmV0ID0gb21hcDJfY2xrX3VzZShjbGstPnBhcmVudCk7CisKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJY2xrLT51c2Vjb3VudC0tOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IG9tYXAyX2Nsa19lbmFibGUoY2xrKTsKKworCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7CisJCQlvbWFwMl9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCQkJY2xrLT51c2Vjb3VudC0tOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb21hcDJfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7CisJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisJCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCQlvbWFwMl9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCX0KK30KKworLyoKKyAqIFVzZXMgdGhlIGN1cnJlbnQgcHJjbSBzZXQgdG8gdGVsbCBpZiBhIHJhdGUgaXMgdmFsaWQuCisgKiBZb3UgY2FuIGdvIHNsb3dlciwgYnV0IG5vdCBmYXN0ZXIgd2l0aGluIGEgZ2l2ZW4gcmF0ZSBzZXQuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCit7CisJdTMyIGhpZ2gsIGxvdzsKKworCWlmICgoQ01fQ0xLU0VMMl9QTEwgJiAweDMpID09IDEpIHsJLyogRFBMTCBjbG9ja291dCAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCX0KKworI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAorCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIHRhcmdldF9yYXRlOworI2Vsc2UKKwlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCisJCXJldHVybiBoaWdoOworCWVsc2UKKwkJcmV0dXJuIGxvdzsKKyNlbmRpZgorCit9CisKKy8qCisgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhcmUgcGFydCBvZiBDTEtTRUxfeHl6IGdvdmVybmVkIGNsb2Nrcy4KKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0byB1c2UgY2xrLT5lbmFibGUoKSBmdW5jdGlvbnMgbGlrZSBvbiBvbWFwMT8KKyAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCXUzMiBmaXhlZCA9IDAsIGRpdiA9IDA7CisKKwlpZiAoY2xrID09ICZkcGxsX2NrKSB7CisJCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKwkJZml4ZWQgPSAxOworCQlkaXYgPSAwOworCX0KKworCWlmIChjbGsgPT0gJml2YTFfbXB1X2ludF9pZmNrKSB7CisJCWRpdiA9IDI7CisJCWZpeGVkID0gMTsKKwl9CisKKwlpZiAoKGNsayA9PSAmZHNzMV9mY2spICYmICgoQ01fQ0xLU0VMMV9DT1JFICYgKDB4MWYgPDwgOCkpID09IDApKSB7CisJCWNsay0+cmF0ZSA9IHN5c19jay5yYXRlOworCQlyZXR1cm47CisJfQorCisJaWYgKCFmaXhlZCkgeworCQlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKKwkJaWYgKGRpdiA9PSAwKQorCQkJcmV0dXJuOworCX0KKworCWlmIChkaXYgIT0gMCkgeworCQlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2KSkKKwkJCXJldHVybjsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CisJfQorCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCisvKgorICogRmluZHMgYmVzdCBkaXZpZGVyIHZhbHVlIGluIGFuIGFycmF5IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kIHRhcmdldAorICogcmF0ZXMuIFRoZSBkaXZpZGVyIGFycmF5IG11c3QgYmUgc29ydGVkIHdpdGggc21hbGxlc3QgZGl2aWRlciBmaXJzdC4KKyAqLworc3RhdGljIGlubGluZSB1MzIgb21hcDJfZGl2aWRlcl9mcm9tX3RhYmxlKHUzMiBzaXplLCB1MzIgKmRpdl9hcnJheSwKKwkJCQkJICAgdTMyIHNyY19yYXRlLCB1MzIgdGd0X3JhdGUpCit7CisJaW50IGksIHRlc3RfcmF0ZTsKKworCWlmIChkaXZfYXJyYXkgPT0gTlVMTCkKKwkJcmV0dXJuIH4xOworCisJZm9yIChpPTA7IGkgPCBzaXplOyBpKyspIHsKKwkJdGVzdF9yYXRlID0gc3JjX3JhdGUgLyAqZGl2X2FycmF5OworCQlpZiAodGVzdF9yYXRlIDw9IHRndF9yYXRlKQorCQkJcmV0dXJuICpkaXZfYXJyYXk7CisJCSsrZGl2X2FycmF5OworCX0KKworCXJldHVybiB+MDsJLyogTm8gYWNjZXB0YWJsZSBkaXZpZGVyICovCit9CisKKy8qCisgKiBGaW5kIGRpdmlzb3IgZm9yIHRoZSBnaXZlbiBjbG9jayBhbmQgdGFyZ2V0IHJhdGUuCisgKgorICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKKyAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgorICovCitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKnRjbGssIHUzMiB0YXJnZXRfcmF0ZSwKKwl1MzIgKm5ld19kaXYpCit7CisJdTMyIGdmeF9kaXZbXSA9IHsyLCAzLCA0fTsKKwl1MzIgc3lzY2xrb3V0X2RpdltdID0gezEsIDIsIDQsIDgsIDE2fTsKKwl1MzIgZHNzMV9kaXZbXSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA4LCA5LCAxMiwgMTZ9OworCXUzMiB2eWxucV9kaXZbXSA9IHsxLCAyLCAzLCA0LCA2LCA4LCA5LCAxMiwgMTYsIDE4fTsKKwl1MzIgYmVzdF9kaXYgPSB+MCwgYXNpemUgPSAwOworCXUzMiAqZGl2X2FycmF5ID0gTlVMTDsKKworCXN3aXRjaCAodGNsay0+ZmxhZ3MgJiBTUkNfUkFURV9TRUxfTUFTSykgeworCWNhc2UgQ01fR0ZYX1NFTDE6CisJCWFzaXplID0gMzsKKwkJZGl2X2FycmF5ID0gZ2Z4X2RpdjsKKwkJYnJlYWs7CisJY2FzZSBDTV9QTExfU0VMMToKKwkJcmV0dXJuIG9tYXAyX2RwbGxfcm91bmRfcmF0ZSh0YXJnZXRfcmF0ZSk7CisJY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKKwkJYXNpemUgPSA1OworCQlkaXZfYXJyYXkgPSBzeXNjbGtvdXRfZGl2OworCQlicmVhazsKKwljYXNlIENNX0NPUkVfU0VMMToKKwkJaWYodGNsayA9PSAmZHNzMV9mY2speworCQkJaWYodGNsay0+cGFyZW50ID09ICZjb3JlX2NrKXsKKwkJCQlhc2l6ZSA9IDEwOworCQkJCWRpdl9hcnJheSA9IGRzczFfZGl2OworCQkJfSBlbHNlIHsKKwkJCQkqbmV3X2RpdiA9IDA7IC8qIGZpeGVkIGNsayAqLworCQkJCXJldHVybih0Y2xrLT5wYXJlbnQtPnJhdGUpOworCQkJfQorCQl9IGVsc2UgaWYoKHRjbGsgPT0gJnZseW5xX2ZjaykgJiYgY3B1X2lzX29tYXAyNDIwKCkpeworCQkJaWYodGNsay0+cGFyZW50ID09ICZjb3JlX2NrKXsKKwkJCQlhc2l6ZSA9IDEwOworCQkJCWRpdl9hcnJheSA9IHZ5bG5xX2RpdjsKKwkJCX0gZWxzZSB7CisJCQkJKm5ld19kaXYgPSAwOyAvKiBmaXhlZCBjbGsgKi8KKwkJCQlyZXR1cm4odGNsay0+cGFyZW50LT5yYXRlKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisKKwliZXN0X2RpdiA9IG9tYXAyX2RpdmlkZXJfZnJvbV90YWJsZShhc2l6ZSwgZGl2X2FycmF5LAorCSB0Y2xrLT5wYXJlbnQtPnJhdGUsIHRhcmdldF9yYXRlKTsKKwlpZiAoYmVzdF9kaXYgPT0gfjApeworCQkqbmV3X2RpdiA9IDE7CisJCXJldHVybiBiZXN0X2RpdjsgLyogc2lnbmFsIGVycm9yICovCisJfQorCisJKm5ld19kaXYgPSBiZXN0X2RpdjsKKwlyZXR1cm4gKHRjbGstPnBhcmVudC0+cmF0ZSAvIGJlc3RfZGl2KTsKK30KKworLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KK3N0YXRpYyBsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBuZXdfZGl2ID0gMDsKKwlpbnQgdmFsaWRfcmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKKwkJcmV0dXJuIGNsay0+cmF0ZTsKKworCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJCXJldHVybiB2YWxpZF9yYXRlOworCX0KKworCWlmIChjbGstPnJvdW5kX3JhdGUgIT0gMCkKKwkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJcmV0dXJuIGNsay0+cmF0ZTsKK30KKworLyoKKyAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnN0ZSBmb3IgdGhlIHNoaWZ0ZWQgRExMIHZhbHVlIGluIHVubG9jayBtb2RlLgorICovCitzdGF0aWMgdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKK3sKKwl1MzIgZGxsX3N0YXRlID0gU0RSQ19ETExBX0NUUkw7CQkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLworCisJaWYgKChkbGxfc3RhdGUgJiAoMSA8PCAyKSkgPT0gKDEgPDwgMikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7CisJdTMyIGZhc3RfZGxsID0gMDsKKworCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKFNEUkNfTVJfMCAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLworCisJLyogMjQyMiBlczIuMDUgYW5kIGJleW9uZCBoYXMgYSBzaW5nbGUgU0lQIEREUiBpbnN0ZWFkIG9mIDIgbGlrZSBvdGhlcnMuCisJICogSW4gdGhlIGNhc2Ugb2YgMjQyMiwgaXRzIG9rIHRvIHVzZSBDUzEgaW5zdGVhZCBvZiBDUzAuCisJICovCisKKyNpZiAwCS8qIEZJWE1FOiBFbmFibGUgYWZ0ZXIgMjR4eCBjcHUgZGV0ZWN0aW9uIHdvcmtzICovCisJY3R5cGUgPSBnZXRfY3B1X3R5cGUoKTsKKwlpZiAoY3B1X2lzX29tYXAyNDIyKCkpCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAxOworCWVsc2UKKyNlbmRpZgorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMDsKKworCWlmIChtZW1fdGltaW5ncy5tX3R5cGUgIT0gTV9ERFIpCisJCXJldHVybjsKKworCS8qIFdpdGggRERSIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBsb3cgZnJlcXVlbmN5IERMTCB2YWx1ZSAqLworCWlmICgoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAoMSA8PCAyKSkgPT0gTV9MT0NLX0NUUkwpKQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fVU5MT0NLOworCWVsc2UKKwkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX0xPQ0s7CisKKwlpZiAobWVtX3RpbWluZ3MuYmFzZV9jcyA9PSAwKSB7CisJCWZhc3RfZGxsID0gU0RSQ19ETExBX0NUUkw7CisJCWRsbF9jbnQgPSBTRFJDX0RMTEFfU1RBVFVTICYgMHhmZjAwOworCX0gZWxzZSB7CisJCWZhc3RfZGxsID0gU0RSQ19ETExCX0NUUkw7CisJCWRsbF9jbnQgPSBTRFJDX0RMTEJfU1RBVFVTICYgMHhmZjAwOworCX0KKwlpZiAoZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkgeworCQlmYXN0X2RsbCAmPSB+MHhmZjAwOworCQlmYXN0X2RsbCB8PSBkbGxfY250OwkJLyogQ3VycmVudCBsb2NrIG1vZGUgKi8KKwl9CisJbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCA9IGZhc3RfZGxsOworCisJLyogTm8gZGlzcnVwdGlvbnMsIEREUiB3aWxsIGJlIG9mZmxpbmUgJiBDLUFCSSBub3QgZm9sbG93ZWQgKi8KKwlvbWFwMl9zcmFtX2Rkcl9pbml0KCZtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAorCQkJICAgIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuYmFzZV9jcywKKwkJCSAgICBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsICY9IDB4ZmYwMDsJLyogS2VlcCBsb2NrIHZhbHVlICovCisKKwkvKiBUdXJuIHN0YXR1cyBpbnRvIHVubG9jayBjdHJsICovCisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PQorCQkoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAweEYpIHwgKDEgPDwgMikpOworCisJLyogOTAgZGVncmVlIHBoYXNlIGZvciBhbnl0aGluZyBiZWxvdyAxMzNNaHogKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9ICgxIDw8IDEpOworfQorCitzdGF0aWMgdTMyIG9tYXAyX3JlcHJvZ3JhbV9zZHJjKHUzMiBsZXZlbCwgdTMyIGZvcmNlKQoreworCXUzMiBwcmV2ID0gY3Vycl9wZXJmX2xldmVsLCBmbGFnczsKKworCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCisJCXJldHVybiBwcmV2OworCisJaWYgKGxldmVsID09IFBSQ01fSEFMRl9TUEVFRCkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCVBSQ01fVk9MVFNFVFVQID0gMHhmZmZmOworCQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwKKwkJCQkJICBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAorCQkJCQkgIG1lbV90aW1pbmdzLm1fdHlwZSk7CisJCWN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fSEFMRl9TUEVFRDsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKwlpZiAobGV2ZWwgPT0gUFJDTV9GVUxMX1NQRUVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJUFJDTV9WT0xUU0VUVVAgPSAweGZmZmY7CisJCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELAorCQkJCQkgIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwsCisJCQkJCSAgbWVtX3RpbWluZ3MubV90eXBlKTsKKwkJY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCisJcmV0dXJuIHByZXY7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGwoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBmbGFncywgY3VyX3JhdGUsIGxvdywgbXVsdCwgZGl2LCB2YWxpZF9yYXRlLCBkb25lX3JhdGU7CisJdTMyIGJ5cGFzcyA9IDA7CisJc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoJmRwbGxfY2spOworCW11bHQgPSBDTV9DTEtTRUwyX1BMTCAmIDB4MzsKKworCWlmICgocmF0ZSA9PSAoY3VyX3JhdGUgLyAyKSkgJiYgKG11bHQgPT0gMikpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9IQUxGX1NQRUVELCAxKTsKKwl9IGVsc2UgaWYgKChyYXRlID09IChjdXJfcmF0ZSAqIDIpKSAmJiAobXVsdCA9PSAxKSkgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgeworCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbF9yb3VuZF9yYXRlKHJhdGUpOworCQlpZiAodmFsaWRfcmF0ZSAhPSByYXRlKQorCQkJZ290byBkcGxsX2V4aXQ7CisKKwkJaWYgKChDTV9DTEtTRUwyX1BMTCAmIDB4MykgPT0gMSkKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CisJCWVsc2UKKwkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOworCisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCA9IENNX0NMS1NFTDFfUExMOworCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfigweDNGRkYgPDwgOCk7CisJCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEwMDAwMDApIC0gMSk7CisJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IENNX0NMS1NFTDJfUExMOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgJj0gfjB4MzsKKwkJaWYgKHJhdGUgPiBsb3cpIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSAweDI7CisJCQltdWx0ID0gKChyYXRlIC8gMikgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fRlVMTF9TUEVFRDsKKwkJfSBlbHNlIHsKKwkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSAweDE7CisJCQltdWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fSEFMRl9TUEVFRDsKKwkJfQorCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKChkaXYgPDwgOCkgfCAobXVsdCA8PCAxMikpOworCisJCS8qIFdvcnN0IGNhc2UgKi8KKwkJdG1wc2V0LmJhc2Vfc2RyY19yZnIgPSBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUzsKKworCQlpZiAocmF0ZSA9PSBjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkKQkvKiBJZiBhc2tpbmcgZm9yIDEtMSAqLworCQkJYnlwYXNzID0gMTsKKworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOyAvKiBGb3IgaW5pdF9tZW0gKi8KKworCQkvKiBGb3JjZSBkbGwgbG9jayBtb2RlICovCisJCW9tYXAyX3NldF9wcmNtKHRtcHNldC5jbV9jbGtzZWwxX3BsbCwgdG1wc2V0LmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQkvKiBFcnJhdGE6IHJldCBkbGwgZW50cnkgc3RhdGUgKi8KKwkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisJfQorCW9tYXAyX2Nsa3NlbF9yZWNhbGMoJmRwbGxfY2spOworCXJldCA9IDA7CisKK2RwbGxfZXhpdDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuKHJldCk7Cit9CisKKy8qIEp1c3QgcmV0dXJuIHRoZSBNUFUgc3BlZWQgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX21wdV9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3sKKwljbGstPnJhdGUgPSBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Cit9CisKKy8qCisgKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgorICoKKyAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCisgKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKKyAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgorICovCitzdGF0aWMgbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKiBwdHI7CisJbG9uZyBoaWdoZXN0X3JhdGU7CisKKwlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7CisKKwlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+bXB1X3NwZWVkOyBwdHIrKykgeworCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworLyoKKyAqIG9tYXAyX2NvbnZlcnRfZmllbGRfdG9fZGl2KCkgLSB0dXJuIGZpZWxkIHZhbHVlIGludG8gaW50ZWdlciBkaXZpZGVyCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IodTMyIGRpdl9zZWwsIHUzMiBmaWVsZF92YWwpCit7CisJdTMyIGk7CisJdTMyIGNsa291dF9hcnJheVtdID0gezEsIDIsIDQsIDgsIDE2fTsKKworCWlmICgoZGl2X3NlbCAmIFNSQ19SQVRFX1NFTF9NQVNLKSA9PSBDTV9TWVNDTEtPVVRfU0VMMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQlpZiAoZmllbGRfdmFsID09IGkpCisJCQkJcmV0dXJuIGNsa291dF9hcnJheVtpXTsKKwkJfQorCQlyZXR1cm4gfjA7CisJfSBlbHNlCisJCXJldHVybiBmaWVsZF92YWw7Cit9CisKKy8qCisgKiBSZXR1cm5zIHRoZSBDTEtTRUwgZGl2aWRlciByZWdpc3RlciB2YWx1ZQorICogUkVWSVNJVDogVGhpcyBzaG91bGQgYmUgY2xlYW5lZCB1cCB0byB3b3JrIG5pY2VseSB3aXRoIHZvaWQgX19pb21lbSAqCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZ2V0X2Nsa3NlbCh1MzIgKmRpdl9zZWwsIHUzMiAqZmllbGRfbWFzaywKKwkJCSAgICBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IH4wOworCXUzMiByZWdfdmFsLCBkaXZfb2ZmOworCXUzMiBkaXZfYWRkciA9IDA7CisJdTMyIG1hc2sgPSB+MDsKKworCWRpdl9vZmYgPSBjbGstPnJhdGVfb2Zmc2V0OworCisJc3dpdGNoICgoKmRpdl9zZWwgJiBTUkNfUkFURV9TRUxfTUFTSykpIHsKKwljYXNlIENNX01QVV9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9NUFU7CisJCW1hc2sgPSAweDFmOworCQlicmVhazsKKwljYXNlIENNX0RTUF9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9EU1A7CisJCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQkJaWYgKChkaXZfb2ZmID09IDApIHx8IChkaXZfb2ZmID09IDgpKQorCQkJCW1hc2sgPSAweDFmOworCQkJZWxzZSBpZiAoZGl2X29mZiA9PSA1KQorCQkJCW1hc2sgPSAweDM7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJCWlmIChkaXZfb2ZmID09IDApCisJCQkJbWFzayA9IDB4MWY7CisJCQllbHNlIGlmIChkaXZfb2ZmID09IDUpCisJCQkJbWFzayA9IDB4MzsKKwkJfQorCQlicmVhazsKKwljYXNlIENNX0dGWF9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTF9HRlg7CisJCWlmIChkaXZfb2ZmID09IDApCisJCQltYXNrID0gMHg3OworCQlicmVhazsKKwljYXNlIENNX01PREVNX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX01ETTsKKwkJaWYgKGRpdl9vZmYgPT0gMCkKKwkJCW1hc2sgPSAweGY7CisJCWJyZWFrOworCWNhc2UgQ01fU1lTQ0xLT1VUX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmUFJDTV9DTEtPVVRfQ1RSTDsKKwkJaWYgKChkaXZfb2ZmID09IDMpIHx8IChkaXZfb2ZmID0gMTEpKQorCQkJbWFzaz0gMHgzOworCQlicmVhazsKKwljYXNlIENNX0NPUkVfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7CisJCXN3aXRjaCAoZGl2X29mZikgeworCQljYXNlIDA6CQkJCQkvKiBsMyAqLworCQljYXNlIDg6CQkJCQkvKiBkc3MxICovCisJCWNhc2UgMTU6CQkJCS8qIHZ5bG5jLTI0MjAgKi8KKwkJY2FzZSAyMDoJCQkJLyogc3NpICovCisJCQltYXNrID0gMHgxZjsgYnJlYWs7CisJCWNhc2UgNToJCQkJCS8qIGw0ICovCisJCQltYXNrID0gMHgzOyBicmVhazsKKwkJY2FzZSAxMzoJCQkJLyogZHNzMiAqLworCQkJbWFzayA9IDB4MTsgYnJlYWs7CisJCWNhc2UgMjU6CQkJCS8qIHVzYiAqLworCQkJbWFzayA9IDB4ZjsgYnJlYWs7CisJCX0KKwl9CisKKwkqZmllbGRfbWFzayA9IG1hc2s7CisKKwlpZiAodW5saWtlbHkobWFzayA9PSB+MCkpCisJCWRpdl9hZGRyID0gMDsKKworCSpkaXZfc2VsID0gZGl2X2FkZHI7CisKKwlpZiAodW5saWtlbHkoZGl2X2FkZHIgPT0gMCkpCisJCXJldHVybiByZXQ7CisKKwkvKiBJc29sYXRlIGZpZWxkICovCisJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilkaXZfYWRkcikgJiAobWFzayA8PCBkaXZfb2ZmKTsKKworCS8qIE5vcm1hbGl6ZSBiYWNrIHRvIGRpdmlkZXIgdmFsdWUgKi8KKwlyZWdfdmFsID4+PSBkaXZfb2ZmOworCisJcmV0dXJuIHJlZ192YWw7Cit9CisKKy8qCisgKiBSZXR1cm4gZGl2aWRlciB0byBiZSBhcHBsaWVkIHRvIHBhcmVudCBjbG9jay4KKyAqIFJldHVybiAwIG9uIGVycm9yLgorICovCitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisJdTMyIGRpdiwgZGl2X3NlbCwgZGl2X29mZiwgZmllbGRfbWFzaywgZmllbGRfdmFsOworCisJLyogaXNvbGF0ZSBjb250cm9sIHJlZ2lzdGVyICovCisJZGl2X3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCisJZGl2X29mZiA9IGNsay0+cmF0ZV9vZmZzZXQ7CisJZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7CisJaWYgKGRpdl9zZWwgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCWRpdl9zZWwgPSAoU1JDX1JBVEVfU0VMX01BU0sgJiBjbGstPmZsYWdzKTsKKwlkaXYgPSBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihkaXZfc2VsLCBmaWVsZF92YWwpOworCisJcmV0dXJuIGRpdjsKK30KKworLyogU2V0IHRoZSBjbG9jayByYXRlIGZvciBhIGNsb2NrIHNvdXJjZSAqLworc3RhdGljIGludCBvbWFwMl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCisKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwl2b2lkIF9faW9tZW0gKiByZWc7CisJdTMyIGRpdl9zZWwsIGRpdl9vZmYsIGZpZWxkX21hc2ssIGZpZWxkX3ZhbCwgcmVnX3ZhbCwgdmFsaWRyYXRlOworCXUzMiBuZXdfZGl2ID0gMDsKKworCWlmICghKGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpICYmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkpIHsKKwkJaWYgKGNsayA9PSAmZHBsbF9jaykKKwkJCXJldHVybiBvbWFwMl9yZXByb2dyYW1fZHBsbChjbGssIHJhdGUpOworCisJCS8qIElzb2xhdGUgY29udHJvbCByZWdpc3RlciAqLworCQlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisJCWRpdl9vZmYgPSBjbGstPnNyY19vZmZzZXQ7CisKKwkJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJCWlmKHZhbGlkcmF0ZSAhPSByYXRlKQorCQkJcmV0dXJuKHJldCk7CisKKwkJZmllbGRfdmFsID0gb21hcDJfZ2V0X2Nsa3NlbCgmZGl2X3NlbCwgJmZpZWxkX21hc2ssIGNsayk7CisJCWlmIChkaXZfc2VsID09IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmKGNsay0+ZmxhZ3MgJiBDTV9TWVNDTEtPVVRfU0VMMSl7CisJCQlzd2l0Y2gobmV3X2Rpdil7CisJCQljYXNlIDE2OiBmaWVsZF92YWwgPSA0OyBicmVhazsKKwkJCWNhc2UgODogIGZpZWxkX3ZhbCA9IDM7IGJyZWFrOworCQkJY2FzZSA0OiAgZmllbGRfdmFsID0gMjsgYnJlYWs7CisJCQljYXNlIDI6ICBmaWVsZF92YWwgPSAxOyBicmVhazsKKwkJCWNhc2UgMTogIGZpZWxkX3ZhbCA9IDA7IGJyZWFrOworCQkJfQorCQl9CisJCWVsc2UKKwkJCWZpZWxkX3ZhbCA9IG5ld19kaXY7CisKKwkJcmVnID0gKHZvaWQgX19pb21lbSAqKWRpdl9zZWw7CisKKwkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCXJlZ192YWwgJj0gfihmaWVsZF9tYXNrIDw8IGRpdl9vZmYpOworCQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgZGl2X29mZik7CisKKwkJX19yYXdfd3JpdGVsKHJlZ192YWwsIHJlZyk7CisJCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZmllbGRfdmFsOworCisJCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFApCisJCQlfX3Jhd193cml0ZWwoMHgxLCAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLQ0ZHX0NUUkwpOworCQlyZXQgPSAwOworCX0gZWxzZSBpZiAoY2xrLT5zZXRfcmF0ZSAhPSAwKQorCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisKKwlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIENvbnZlcnRzIGVuY29kZWQgY29udHJvbCByZWdpc3RlciBhZGRyZXNzIGludG8gYSBmdWxsIGFkZHJlc3MgKi8KK3N0YXRpYyB1MzIgb21hcDJfZ2V0X3NyY19maWVsZCh1MzIgKnR5cGVfdG9fYWRkciwgdTMyIHJlZ19vZmZzZXQsCisJCQkgICAgICAgc3RydWN0IGNsayAqc3JjX2NsaywgdTMyICpmaWVsZF9tYXNrKQoreworCXUzMiB2YWwgPSB+MCwgc3JjX3JlZ19hZGRyID0gMCwgbWFzayA9IDA7CisKKwkvKiBGaW5kIHRhcmdldCBjb250cm9sIHJlZ2lzdGVyLiovCisJc3dpdGNoICgoKnR5cGVfdG9fYWRkciAmIFNSQ19SQVRFX1NFTF9NQVNLKSkgeworCWNhc2UgQ01fQ09SRV9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX0NPUkU7CisJCWlmIChyZWdfb2Zmc2V0ID09IDEzKSB7CQkJLyogRFNTMl9mY2xrICovCisJCQltYXNrID0gMHgxOworCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCQl2YWwgPSAwOworCQkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfNDhtX2NrKQorCQkJCXZhbCA9IDE7CisJCX0gZWxzZSBpZiAocmVnX29mZnNldCA9PSA4KSB7CQkvKiBEU1MxX2ZjbGsgKi8KKwkJCW1hc2sgPSAweDFmOworCQkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykJLyogZGl2aWRlZCBjbG9jayAqLworCQkJCXZhbCA9IDB4MTA7CQkvKiByYXRlIG5lZWRzIGZpeGluZyAqLworCQl9IGVsc2UgaWYgKChyZWdfb2Zmc2V0ID09IDE1KSAmJiBjcHVfaXNfb21hcDI0MjAoKSl7IC8qdmxueXEqLworCQkJbWFzayA9IDB4MUY7CisJCQlpZihzcmNfY2xrID09ICZmdW5jXzk2bV9jaykKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAoc3JjX2NsayA9PSAmY29yZV9jaykKKwkJCQl2YWwgPSAweDEwOworCQl9CisJCWJyZWFrOworCWNhc2UgQ01fQ09SRV9TRUwyOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX0NPUkU7CisJCW1hc2sgPSAweDM7CisJCWlmIChzcmNfY2xrID09ICZmdW5jXzMya19jaykKKwkJCXZhbCA9IDB4MDsKKwkJaWYgKHNyY19jbGsgPT0gJnN5c19jaykKKwkJCXZhbCA9IDB4MTsKKwkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKKwkJCXZhbCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBDTV9XS1VQX1NFTDE6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDJfQ09SRTsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfMzJrX2NrKQorCQkJdmFsID0gMHgwOworCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJdmFsID0gMHgxOworCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJdmFsID0gMHgyOworCQlicmVhazsKKwljYXNlIENNX1BMTF9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwxX1BMTDsKKwkJbWFzayA9IDB4MTsKKwkJaWYgKHJlZ19vZmZzZXQgPT0gMHgzKSB7CisJCQlpZiAoc3JjX2NsayA9PSAmYXBsbDk2X2NrKQorCQkJCXZhbCA9IDA7CisJCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJCXZhbCA9IDE7CisJCX0KKwkJZWxzZSBpZiAocmVnX29mZnNldCA9PSAweDUpIHsKKwkJCWlmIChzcmNfY2xrID09ICZhcGxsNTRfY2spCisJCQkJdmFsID0gMDsKKwkJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCisJCQkJdmFsID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIENNX1BMTF9TRUwyOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZDTV9DTEtTRUwyX1BMTDsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfMzJrX2NrKQorCQkJdmFsID0gMHgwOworCQlpZiAoc3JjX2NsayA9PSAmZHBsbF9jaykKKwkJCXZhbCA9IDB4MjsKKwkJYnJlYWs7CisJY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmUFJDTV9DTEtPVVRfQ1RSTDsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmRwbGxfY2spCisJCQl2YWwgPSAwOworCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJdmFsID0gMTsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfNTRtX2NrKQorCQkJdmFsID0gMjsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfOTZtX2NrKQorCQkJdmFsID0gMzsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbCA9PSB+MCkJCQkvKiBDYXRjaCBlcnJvcnMgaW4gb2Zmc2V0ICovCisJCSp0eXBlX3RvX2FkZHIgPSAwOworCWVsc2UKKwkJKnR5cGVfdG9fYWRkciA9IHNyY19yZWdfYWRkcjsKKwkqZmllbGRfbWFzayA9IG1hc2s7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqbmV3X3BhcmVudCkKK3sKKwl2b2lkIF9faW9tZW0gKiByZWc7CisJdTMyIHNyY19zZWwsIHNyY19vZmYsIGZpZWxkX3ZhbCwgZmllbGRfbWFzaywgcmVnX3ZhbCwgcmF0ZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKSkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjbGstPmZsYWdzICYgU1JDX1NFTF9NQVNLKSB7CS8qIE9uLWNoaXAgU0VMIGNvbGxlY3Rpb24gKi8KKwkJc3JjX3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCQlzcmNfb2ZmID0gY2xrLT5zcmNfb2Zmc2V0OworCisJCWlmIChzcmNfc2VsID09IDApCisJCQlnb3RvIHNldF9wYXJlbnRfZXJyb3I7CisKKwkJZmllbGRfdmFsID0gb21hcDJfZ2V0X3NyY19maWVsZCgmc3JjX3NlbCwgc3JjX29mZiwgbmV3X3BhcmVudCwKKwkJCQkJCSZmaWVsZF9tYXNrKTsKKworCQlyZWcgPSAodm9pZCBfX2lvbWVtICopc3JjX3NlbDsKKworCQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCisJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGspOworCisJCS8qIFNldCBuZXcgc291cmNlIHZhbHVlIChwcmV2aW91cyBkaXZpZGVycyBpZiBhbnkgaW4gZWZmZWN0KSAqLworCQlyZWdfdmFsID0gX19yYXdfcmVhZGwocmVnKSAmIH4oZmllbGRfbWFzayA8PCBzcmNfb2ZmKTsKKwkJcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IHNyY19vZmYpOworCQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgcmVnKTsKKworCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKQorCQkJX19yYXdfd3JpdGVsKDB4MSwgKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS0NGR19DVFJMKTsKKworCQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCisJCQlvbWFwMl9jbGtfZW5hYmxlKGNsayk7CisKKwkJY2xrLT5wYXJlbnQgPSBuZXdfcGFyZW50OworCisJCS8qIFNSQ19SQVRFX1NFTF9NQVNLIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cyByYXRlcy4qLworCQlpZiAoKG5ld19wYXJlbnQgPT0gJmNvcmVfY2spICYmIChjbGsgPT0gJmRzczFfZmNrKSkKKwkJCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGUgLyAweDEwOworCQllbHNlCisJCQljbGstPnJhdGUgPSBuZXdfcGFyZW50LT5yYXRlOworCisJCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKKwkJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJY2xrLT5wYXJlbnQgPSBuZXdfcGFyZW50OworCQlyYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKKwkJb21hcDJfY2xrX3NldF9yYXRlKGNsaywgcmF0ZSk7CisJCXJldCA9IDA7CisJfQorCisgc2V0X3BhcmVudF9lcnJvcjoKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXRzIGJhc2ljIGNsb2NrcyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHJhdGUgKi8KK3N0YXRpYyBpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBmbGFncywgY3VyX3JhdGUsIGRvbmVfcmF0ZSwgYnlwYXNzID0gMDsKKwl1OCBjcHVfbWFzayA9IDA7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOworCisJaWYgKGNsayAhPSAmdmlydF9wcmNtX3NldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBGSVhNRTogQ2hhbmdlIGNwdV9pc19vbWFwMjQyMCgpIHRvIGNwdV9pc19vbWFwMjQyeCgpICovCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzI0M1g7CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPm1wdV9zcGVlZCA8PSByYXRlKSB7CisJCQlmb3VuZF9zcGVlZCA9IHByY20tPm1wdV9zcGVlZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZF9zcGVlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3Qgc2V0IE1QVSByYXRlIHRvICVsdU1IelxuIiwKKwkgcmF0ZSAvIDEwMDAwMDApOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljdXJyX3ByY21fc2V0ID0gcHJjbTsKKwljdXJfcmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoJmRwbGxfY2spOworCisJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgLyAyKSB7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fSEFMRl9TUEVFRCwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKKwkJCWJ5cGFzcyA9IDE7CisKKwkJaWYgKChwcmNtLT5jbV9jbGtzZWwyX3BsbCAmIDB4MykgPT0gMikKKwkJCWRvbmVfcmF0ZSA9IFBSQ01fRlVMTF9TUEVFRDsKKwkJZWxzZQorCQkJZG9uZV9yYXRlID0gUFJDTV9IQUxGX1NQRUVEOworCisJCS8qIE1QVSBkaXZpZGVyICovCisJCUNNX0NMS1NFTF9NUFUgPSBwcmNtLT5jbV9jbGtzZWxfbXB1OworCisJCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KKwkJQ01fQ0xLU0VMX0RTUCA9IHByY20tPmNtX2Nsa3NlbF9kc3A7CisKKwkJQ01fQ0xLU0VMX0dGWCA9IHByY20tPmNtX2Nsa3NlbF9nZng7CisKKwkJLyogTWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCisJCUNNX0NMS1NFTDFfQ09SRSA9IHByY20tPmNtX2Nsa3NlbDFfY29yZTsKKwkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQkJQ01fQ0xLU0VMX01ETSA9IHByY20tPmNtX2Nsa3NlbF9tZG07CisKKwkJLyogeDIgdG8gZW50ZXIgaW5pdF9tZW0gKi8KKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9GVUxMX1NQRUVELCAxKTsKKworCQlvbWFwMl9zZXRfcHJjbShwcmNtLT5jbV9jbGtzZWwxX3BsbCwgcHJjbS0+YmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCW9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyhvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKCkpOworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhkb25lX3JhdGUsIDApOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisJb21hcDJfY2xrc2VsX3JlY2FsYygmZHBsbF9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMiBjbG9jayByZXNldCBhbmQgaW5pdCBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0geworCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCisJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAorCS5jbGtfdXNlCQk9IG9tYXAyX2Nsa191c2UsCisJLmNsa191bnVzZQkJPSBvbWFwMl9jbGtfdW51c2UsCisJLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAorCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAorCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9nZXRfY3J5c3RhbF9yYXRlKHN0cnVjdCBjbGsgKm9zYywgc3RydWN0IGNsayAqc3lzKQoreworCXUzMiBkaXYsIGFwbGxzLCBzY2xrID0gMTMwMDAwMDA7CisKKwlhcGxscyA9IENNX0NMS1NFTDFfUExMOworCWFwbGxzICY9ICgoMSA8PCAyMykgfCAoMSA8PCAyNCkgfCAoMSA8PCAyNSkpOworCWFwbGxzID4+PSAyMzsJCQkvKiBJc29sYXRlIGZpZWxkLCAwLDIsMyAqLworCisJaWYgKGFwbGxzID09IDApCisJCXNjbGsgPSAxOTIwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSAyKQorCQlzY2xrID0gMTMwMDAwMDA7CisJZWxzZSBpZiAoYXBsbHMgPT0gMykKKwkJc2NsayA9IDEyMDAwMDAwOworCisJZGl2ID0gUFJDTV9DTEtTUkNfQ1RSTDsKKwlkaXYgJj0gKCgxIDw8IDcpIHwgKDEgPDwgNikpOworCWRpdiA+Pj0gc3lzLT5yYXRlX29mZnNldDsKKworCW9zYy0+cmF0ZSA9IHNjbGsgKiBkaXY7CisJc3lzLT5yYXRlID0gc2NsazsKK30KKworI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2Rpc2FibGVfdW51c2VkX2Nsb2Nrcyh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrOworCXUzMiByZWd2YWwzMjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ssICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGNrLT51c2Vjb3VudCA+IDAgfHwgKGNrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAorCQkJY2stPmVuYWJsZV9yZWcgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2stPmVuYWJsZV9yZWcpOworCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgY2stPmVuYWJsZV9iaXQpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCJcbiIsIGNrLT5uYW1lKTsKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2spOworCX0KK30KK2xhdGVfaW5pdGNhbGwob21hcDJfZGlzYWJsZV91bnVzZWRfY2xvY2tzKTsKKyNlbmRpZgorCisvKgorICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KKyAqIFdlIGNhbm5vdCBkbyB0aGlzIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaWYgKCFtcHVyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSgmdmlydF9wcmNtX3NldCwgbXB1cmF0ZSkpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgbWF0Y2hpbmcgTVBVIHJhdGVcbiIpOworCisJcHJvcGFnYXRlX3JhdGUoJm9zY19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IGZhc3QgKi8KKwlwcm9wYWdhdGVfcmF0ZSgmZnVuY18zMmtfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBzbG93ICovCisKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2Nsa19hcmNoX2luaXQpOworCitpbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCit7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCXN0cnVjdCBjbGsgKiogY2xrcDsKKwl1MzIgY2xrcmF0ZTsKKworCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKKwlvbWFwMl9nZXRfY3J5c3RhbF9yYXRlKCZvc2NfY2ssICZzeXNfY2spOworCisJZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwX2Nsa3MpOworCSAgICAgY2xrcCsrKSB7CisKKwkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0MlggJiYgY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICgoKmNsa3ApLT5mbGFncyAmIENMT0NLX0lOX09NQVAyNDNYICYmIGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwljbGtyYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZSgmZHBsbF9jayk7CisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKKwkJCSBicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3QgZmFzdCAqLworCXByb3BhZ2F0ZV9yYXRlKCZmdW5jXzMya19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IHNsb3cgKi8KKworCXByaW50ayhLRVJOX0lORk8gIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCisJICAgICAgICIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJICAgICAgIChzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJICAgICAgIChkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfdXNlKCZzeW5jXzMya19pY2spOworCWNsa191c2UoJm9tYXBjdHJsX2ljayk7CisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljbGtfdXNlKCZzZHJjX2ljayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWVhYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC0wLDAgKzEsMjEwMyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyNHh4L2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgQ3JlYXRlZCBmb3IgT01BUDIuCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfSAorCitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDJfcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIGludCBvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIHZvaWQgb21hcDJfY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IodTMyIGRpdl9zZWwsIHUzMiBmaWVsZF92YWwpOworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKTsKKworCisjZGVmaW5lIFJBVEVfSU5fMjQyWAkoMSA8PCAwKQorI2RlZmluZSBSQVRFX0lOXzI0M1gJKDEgPDwgMSkKKworLyogTWVtb3J5IHRpbWluZ3MgKi8KKyNkZWZpbmUgTV9ERFIJCTEKKyNkZWZpbmUgTV9MT0NLX0NUUkwJKDEgPDwgMikKKyNkZWZpbmUgTV9VTkxPQ0sJMAorI2RlZmluZSBNX0xPQ0sJCTEKKworc3RydWN0IG1lbW9yeV90aW1pbmdzIHsKKwl1MzIgbV90eXBlOwkJLyogZGRyID0gMSwgc2RyID0gMCAqLworCXUzMiBkbGxfbW9kZTsJCS8qIHVzZSBsb2NrIG1vZGUgPSAxLCB1bmxvY2sgbW9kZSA9IDAgKi8KKwl1MzIgc2xvd19kbGxfY3RybDsJLyogdW5sb2NrIG1vZGUsIGRsbCB2YWx1ZSBmb3Igc2xvdyBzcGVlZCAqLworCXUzMiBmYXN0X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBmYXN0IHNwZWVkICovCisJdTMyIGJhc2VfY3M7CQkvKiBiYXNlIGNoaXAgc2VsZWN0IHRvIHVzZSBmb3IgY2FsY3VsYXRpb25zICovCit9OworCisvKiBLZXkgZGl2aWRlcnMgd2hpY2ggbWFrZSB1cCBhIFBSQ00gc2V0LiBSYXRpbydzIGZvciBhIFBSQ00gYXJlIG1hbmRhdGVkLgorICogeHRhbF9zcGVlZCwgZHBsbF9zcGVlZCwgbXB1X3NwZWVkLCBDTV9DTEtTRUxfTVBVLENNX0NMS1NFTF9EU1AKKyAqIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwgQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqLworc3RydWN0IHByY21fY29uZmlnIHsKKwl1bnNpZ25lZCBsb25nIHh0YWxfc3BlZWQ7CS8qIGNyeXN0YWwgcmF0ZSAqLworCXVuc2lnbmVkIGxvbmcgZHBsbF9zcGVlZDsJLyogZHBsbDogb3V0Knh0YWwqTS8oTi0xKXRhYmxlX3JlY2FsYyAqLworCXVuc2lnbmVkIGxvbmcgbXB1X3NwZWVkOwkvKiBzcGVlZCBvZiBNUFUgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tcHU7CS8qIG1wdSBkaXZpZGVyICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZHNwOwkvKiBkc3AraXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX2dmeDsJLyogZ2Z4IGRpdmlkZXJzICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX2NvcmU7CS8qIG1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMV9wbGw7CS8qIG0sbiAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsMl9wbGw7CS8qIGRwbGx4MSBvciB4MiBvdXQgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9tZG07CS8qIG1vZGVtIGRpdmlkZXJzIDI0MzAgb25seSAqLworCXVuc2lnbmVkIGxvbmcgYmFzZV9zZHJjX3JmcjsJLyogYmFzZSByZWZyZXNoIHRpbWluZyBmb3IgYSBzZXQgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOworfTsKKworLyogTWFzayBmb3IgY2xrc2VsIHdoaWNoIHN1cHBvcnQgcGFyZW50IHNldHRpZ24gaW4gc2V0X3JhdGUgKi8KKyNkZWZpbmUgU1JDX1NFTF9NQVNLIChDTV9DT1JFX1NFTDEgfCBDTV9DT1JFX1NFTDIgfCBDTV9XS1VQX1NFTDEgfCBcCisJCQlDTV9QTExfU0VMMSB8IENNX1BMTF9TRUwyIHwgQ01fU1lTQ0xLT1VUX1NFTDEpCisKKy8qIE1hc2sgZm9yIGNsa3NlbCByZWdzIHdoaWNoIHN1cHBvcnQgcmF0ZSBvcGVyYXRpb25zICovCisjZGVmaW5lIFNSQ19SQVRFX1NFTF9NQVNLIChDTV9NUFVfU0VMMSB8IENNX0RTUF9TRUwxIHwgQ01fR0ZYX1NFTDEgfCBcCisJCQlDTV9NT0RFTV9TRUwxIHwgQ01fQ09SRV9TRUwxIHwgQ01fQ09SRV9TRUwyIHwgXAorCQkJQ01fV0tVUF9TRUwxIHwgQ01fUExMX1NFTDEgfCBDTV9QTExfU0VMMiB8IFwKKwkJCUNNX1NZU0NMS09VVF9TRUwxKQorCisvKgorICogVGhlIE9NQVAyIHByb2Nlc3NvciBjYW4gYmUgcnVuIGF0IHNldmVyYWwgZGlzY3JldGUgJ1BSQ00gY29uZmlndXJhdGlvbnMnLgorICogVGhlc2UgY29uZmlndXJhdGlvbnMgYXJlIGNoYXJhY3Rlcml6ZWQgYnkgdm9sdGFnZSBhbmQgc3BlZWQgZm9yIGNsb2Nrcy4KKyAqIFRoZSBkZXZpY2UgaXMgb25seSB2YWxpZGF0ZWQgZm9yIGNlcnRhaW4gY29tYmluYXRpb25zLiBPbmUgd2F5IHRvIGV4cHJlc3MKKyAqIHRoZXNlIGNvbWJpbmF0aW9ucyBpcyB2aWEgdGhlICdyYXRpbydzJyB3aGljaCB0aGUgY2xvY2tzIG9wZXJhdGUgd2l0aAorICogcmVzcGVjdCB0byBlYWNoIG90aGVyLiBUaGVzZSByYXRpbyBzZXRzIGFyZSBmb3IgYSBnaXZlbiB2b2x0YWdlL0RQTEwKKyAqIHNldHRpbmcuIEFsbCBjb25maWd1cmF0aW9ucyBjYW4gYmUgZGVzY3JpYmVkIGJ5IGEgRFBMTCBzZXR0aW5nIGFuZCBhIHJhdGlvCisgKiBUaGVyZSBhcmUgMyByYXRpbyBzZXRzIGZvciB0aGUgMjQzMCBhbmQgWCByYXRpbyBzZXRzIGZvciAyNDIwLgorICoKKyAqIDI0MzAgZGlmZmVycyBmcm9tIDI0MjAgaW4gdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSBwaGFzZSBzeW5jaHJvbml6ZXJzIHVzZWQuCisgKiBUaGV5IGJvdGggaGF2ZSBhIHNsaWdodGx5IGRpZmZlcmVudCBjbG9jayBkb21haW4gc2V0dXAuIDI0MjAoaXZhMSxkc3ApIHZzCisgKiAyNDMwIChpdmEyLjEsIE5PZHNwLCBtZG0pCisgKi8KKworLyogQ29yZSBmaWVsZHMgZm9yIGNtX2Nsa3NlbCwgbm90IHJhdGlvIGdvdmVybmVkICovCisjZGVmaW5lIFJYX0NMS1NFTF9EU1MxCQkJKDB4MTAgPDwgOCkKKyNkZWZpbmUgUlhfQ0xLU0VMX0RTUzIJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBSWF9DTEtTRUxfU1NJCQkJKDB4NSA8PCAyMCkKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBWb2x0YWdlL0RQTEwgcmF0aW9zCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiAyNDMwIFJhdGlvJ3MsIDI0MzAtUmF0aW8gQ29uZmlnIDEgKi8KKyNkZWZpbmUgUjFfQ0xLU0VMX0wzCQkJKDQgPDwgMCkKKyNkZWZpbmUgUjFfQ0xLU0VMX0w0CQkJKDIgPDwgNSkKKyNkZWZpbmUgUjFfQ0xLU0VMX1VTQgkJCSg0IDw8IDI1KQorI2RlZmluZSBSMV9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSMV9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUjFfQ0xLU0VMX0w0IHwgUjFfQ0xLU0VMX0wzCisjZGVmaW5lIFIxX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfTVBVX1ZBTAkJUjFfQ0xLU0VMX01QVQorI2RlZmluZSBSMV9DTEtTRUxfRFNQCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjFfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX0RTUF9WQUwJCVIxX0NMS1NFTF9EU1AgfCBSMV9DTEtTRUxfRFNQX0lGCisjZGVmaW5lIFIxX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUjFfQ0xLU0VMX0dGWAorI2RlZmluZSBSMV9DTEtTRUxfTURNCQkJKDQgPDwgMCkKKyNkZWZpbmUgUjFfQ01fQ0xLU0VMX01ETV9WQUwJCVIxX0NMS1NFTF9NRE0KKworLyogMjQzMC1SYXRpbyBDb25maWcgMiAqLworI2RlZmluZSBSMl9DTEtTRUxfTDMJCQkoNiA8PCAwKQorI2RlZmluZSBSMl9DTEtTRUxfTDQJCQkoMiA8PCA1KQorI2RlZmluZSBSMl9DTEtTRUxfVVNCCQkJKDIgPDwgMjUpCisjZGVmaW5lIFIyX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVIyX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSMl9DTEtTRUxfTDQgfCBSMl9DTEtTRUxfTDMKKyNkZWZpbmUgUjJfQ0xLU0VMX01QVQkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9NUFVfVkFMCQlSMl9DTEtTRUxfTVBVCisjZGVmaW5lIFIyX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQorI2RlZmluZSBSMl9DTEtTRUxfRFNQX0lGCQkoMyA8PCA1KQorI2RlZmluZSBSMl9DTV9DTEtTRUxfRFNQX1ZBTAkJUjJfQ0xLU0VMX0RTUCB8IFIyX0NMS1NFTF9EU1BfSUYKKyNkZWZpbmUgUjJfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9HRlhfVkFMCQlSMl9DTEtTRUxfR0ZYCisjZGVmaW5lIFIyX0NMS1NFTF9NRE0JCQkoNiA8PCAwKQorI2RlZmluZSBSMl9DTV9DTEtTRUxfTURNX1ZBTAkJUjJfQ0xLU0VMX01ETQorCisvKiAyNDMwLVJhdGlvIEJvb3RtIChCWVBBU1MpICovCisjZGVmaW5lIFJCX0NMS1NFTF9MMwkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NMS1NFTF9MNAkJCSgxIDw8IDUpCisjZGVmaW5lIFJCX0NMS1NFTF9VU0IJCQkoMSA8PCAyNSkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUkJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVJCX0NMS1NFTF9MNCB8IFJCX0NMS1NFTF9MMworI2RlZmluZSBSQl9DTEtTRUxfTVBVCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX01QVV9WQUwJCVJCX0NMS1NFTF9NUFUKKyNkZWZpbmUgUkJfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NMS1NFTF9EU1BfSUYJCSgxIDw8IDUpCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9EU1BfVkFMCQlSQl9DTEtTRUxfRFNQIHwgUkJfQ0xLU0VMX0RTUF9JRgorI2RlZmluZSBSQl9DTEtTRUxfR0ZYCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX0dGWF9WQUwJCVJCX0NMS1NFTF9HRlgKKyNkZWZpbmUgUkJfQ0xLU0VMX01ETQkJCSgxIDw8IDApCisjZGVmaW5lIFJCX0NNX0NMS1NFTF9NRE1fVkFMCQlSQl9DTEtTRUxfTURNCisKKy8qIDI0MjAgUmF0aW8gRXF1aXZhbGVudHMgKi8KKyNkZWZpbmUgUlhYX0NMS1NFTF9WTFlOUQkJKDB4MTIgPDwgMTUpCisjZGVmaW5lIFJYWF9DTEtTRUxfU1NJCQkJKDB4OCA8PCAyMCkKKworLyogMjQyMC1QUkNNIElJSSA1MzJNSHogY29yZSAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9MMwkJCSg0IDw8IDApCS8qIDEzM01IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9MNAkJCSgyIDw8IDUpCS8qIDY2LjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCS8qIDMzLjI1TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAlSSUlJX0NMS1NFTF9VU0IgfCBSWFhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhYX0NMS1NFTF9WTFlOUSB8IFJYX0NMS1NFTF9EU1MyIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMSB8IFJJSUlfQ0xLU0VMX0w0IHwgXAorCQkJCQlSSUlJX0NMS1NFTF9MMworI2RlZmluZSBSSUlJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAyNjZNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUklJSV9DTEtTRUxfTVBVCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDE3Ny4zTUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkJLyogYzV4IC0gODguNjdNSHogKi8KKyNkZWZpbmUgUklJSV9TWU5DX0RTUAkJCSgxIDw8IDcpCS8qIEVuYWJsZSBzeW5jICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0lWQQkJCSg2IDw8IDgpCS8qIGl2YTEgLSA4OC42N01IeiAqLworI2RlZmluZSBSSUlJX1NZTkNfSVZBCQkJKDEgPDwgMTMpCS8qIEVuYWJsZSBzeW5jICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwJCVJJSUlfU1lOQ19JVkEgfCBSSUlJX0NMS1NFTF9JVkEgfCBcCisJCQkJCVJJSUlfU1lOQ19EU1AgfCBSSUlJX0NMS1NFTF9EU1BfSUYgfCBcCisJCQkJCVJJSUlfQ0xLU0VMX0RTUAorI2RlZmluZSBSSUlJX0NMS1NFTF9HRlgJCQkoMiA8PCAwKQkvKiA2Ni41TUh6ICovCisjZGVmaW5lIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJJSUlfQ0xLU0VMX0dGWAorCisvKiAyNDIwLVBSQ00gSUkgNjAwTUh6IGNvcmUgKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9MMwkJCSg2IDw8IDApCS8qIDEwME1IeiAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVJJSV9DTEtTRUxfVVNCIHwgXAorCQkJCQlSWFhfQ0xLU0VMX1NTSSB8IFJYWF9DTEtTRUxfVkxZTlEgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVJJSV9DTEtTRUxfTDQgfCBSSUlfQ0xLU0VMX0wzCisjZGVmaW5lIFJJSV9DTEtTRUxfTVBVCQkJKDIgPDwgMCkJLyogMzAwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUklJX0NMS1NFTF9NUFUKKyNkZWZpbmUgUklJX0NMS1NFTF9EU1AJCQkoMyA8PCAwKQkvKiBjNXggLSAyMDBNSHogKi8KKyNkZWZpbmUgUklJX0NMS1NFTF9EU1BfSUYJCSgyIDw8IDUpCS8qIGM1eCAtIDEwME1IeiAqLworI2RlZmluZSBSSUlfU1lOQ19EU1AJCQkoMCA8PCA3KQkvKiBCeXBhc3Mgc3luYyAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0lWQQkJCSg2IDw8IDgpCS8qIGl2YTEgLSAyMDBNSHogKi8KKyNkZWZpbmUgUklJX1NZTkNfSVZBCQkJKDAgPDwgMTMpCS8qIEJ5cGFzcyBzeW5jICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUklJX1NZTkNfSVZBIHwgUklJX0NMS1NFTF9JVkEgfCBcCisJCQkJCVJJSV9TWU5DX0RTUCB8IFJJSV9DTEtTRUxfRFNQX0lGIHwgXAorCQkJCQlSSUlfQ0xLU0VMX0RTUAorI2RlZmluZSBSSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDUwTUh6ICovCisjZGVmaW5lIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJX0NMS1NFTF9HRlgKKworLyogMjQyMC1QUkNNIFZJSSAoYm9vdCkgKi8KKyNkZWZpbmUgUlZJSV9DTEtTRUxfTDMJCQkoMSA8PCAwKQorI2RlZmluZSBSVklJX0NMS1NFTF9MNAkJCSgxIDw8IDUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzEJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUzIJCSgwIDw8IDEzKQorI2RlZmluZSBSVklJX0NMS1NFTF9WTFlOUQkJKDEgPDwgMTUpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1NTSQkJCSgxIDw8IDIwKQorI2RlZmluZSBSVklJX0NMS1NFTF9VU0IJCQkoMSA8PCAyNSkKKworI2RlZmluZSBSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwJUlZJSV9DTEtTRUxfVVNCIHwgUlZJSV9DTEtTRUxfU1NJIHwgXAorCQkJCQlSVklJX0NMS1NFTF9WTFlOUSB8IFJWSUlfQ0xLU0VMX0RTUzIgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUzEgfCBSVklJX0NMS1NFTF9MNCB8IFJWSUlfQ0xLU0VMX0wzCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfTVBVCQkJKDEgPDwgMCkgLyogYWxsIGRpdmlkZSBieSAxICovCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwJCVJWSUlfQ0xLU0VMX01QVQorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0lWQQkJCSgxIDw8IDgpCisjZGVmaW5lIFJWSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUlZJSV9TWU5DX0lWQSB8IFJWSUlfQ0xLU0VMX0lWQSB8IFJWSUlfU1lOQ19EU1AgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX0RTUF9JRiB8IFJWSUlfQ0xLU0VMX0RTUAorCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0dGWAkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwJCVJWSUlfQ0xLU0VMX0dGWAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDI0MzAgVGFyZ2V0IG1vZGVzOiBBbG9uZyB3aXRoIGVhY2ggY29uZmlndXJhdGlvbiB0aGUgQ1BVIGhhcyBzZXZlcmFsCisgKiBtb2RlcyB3aGljaCBnb2VzIGFsb25nIHdpdGggdGhlbS4gTW9kZXMgbWFpbmx5IGFyZSB0aGUgYWRkaXRpb24gb2YKKyAqIGRlc2NyaWJlIERQTEwgY29tYmluYXRpb25zIHRvIGdvIGFsb25nIHdpdGggYSByYXRpby4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEhhcmR3YXJlIGdvdmVybmVkICovCisjZGVmaW5lIE1YXzQ4TV9TUkMJCQkoMCA8PCAzKQorI2RlZmluZSBNWF81NE1fU1JDCQkJKDAgPDwgNSkKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEyCQkoMyA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzEzCQkoMiA8PCAyMykKKyNkZWZpbmUgTVhfQVBMTFNfQ0xJS0lOXzE5XzIJCSgwIDw8IDIzKQorCisvKgorICogMjQzMCAtIHN0YW5kYWxvbmUsIDIqcmVmKk0vKG4rMSksIE0vTiBpcyBmb3IgZXhhY3RuZXNzIG5vdCByZWxvY2sgc3BlZWQKKyAqICMyCShyYXRpbzEpIGJhc2Vwb3J0LXRhcmdldAorICogIzVhCShyYXRpbzEpIGJhc2Vwb3J0LXRhcmdldCwgdGFyZ2V0IERQTEwgPSAyNjYqMiA9IDUzMk1IegorICovCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xMgkJCSg1IDw8IDgpCisjZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01QV9EUExMX0RJVl8xMiB8IE01QV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNNUFfRFBMTF9NVUxUXzEzCQkoMjY2IDw8IDEyKQorI2RlZmluZSBNNUFfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVBX0RQTExfRElWXzEzIHwgTTVBX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTkJCSgxODAgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xOQkJCSgxMiA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTkgfCBNNUFfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyogIzViCShyYXRpbzEpIHRhcmdldCBEUExMID0gMjAwKjIgPSA0MDBNSHogKi8KKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTIJCQkoMiA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTIgfCBNNUJfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xMwkJKDIwMCA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisKKyNkZWZpbmUgTTVCX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVCX0RQTExfRElWXzEzIHwgTTVCX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE01Ql9EUExMX01VTFRfMTkJCSgxMjUgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xOQkJCSgzMSA8PCA4KQorI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTkgfCBNNUJfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyoKKyAqICM0CShyYXRpbzIpCisgKiAjMwkocmF0aW8yKSBiYXNlcG9ydC10YXJnZXQsIHRhcmdldCBEUExMID0gMzMwKjIgPSA2NjBNSHoKKyAqLworI2RlZmluZSBNM19EUExMX01VTFRfMTIJCQkoNTUgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzEyCQkJKDEgPDwgOCkKKyNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNM19EUExMX0RJVl8xMiB8IE0zX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE0zX0RQTExfTVVMVF8xMwkJCSgzMzAgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTNfRFBMTF9ESVZfMTMgfCBNM19EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworI2RlZmluZSBNM19EUExMX01VTFRfMTkJCQkoMjc1IDw8IDEyKQorI2RlZmluZSBNM19EUExMX0RJVl8xOQkJCSgxNSA8PCA4KQorI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU0zX0RQTExfRElWXzE5IHwgTTNfRFBMTF9NVUxUXzE5IHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTlfMgorLyogYm9vdCAoYm9vdCkgKi8KKyNkZWZpbmUgTUJfRFBMTF9NVUxUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1CX0RQTExfRElWCQkJKDAgPDwgOCkKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzEyCisKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzEzCisKKyNkZWZpbmUgTUJfQ01fQ0xLU0VMMV9QTExfMTlfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgTUJfRFBMTF9ESVYgfFwKKwkJCQkJTUJfRFBMTF9NVUxUIHwgTVhfQVBMTFNfQ0xJS0lOXzE5CisKKy8qCisgKiAyNDMwIC0gY2hhc3NpcyAoc2VkbmEpCisgKiAxNjUgKHJhdGlvMSkgc2FtZSBhcyBhYm92ZSAjMgorICogMTUwIChyYXRpbzEpCisgKiAxMzMgKHJhdGlvMikgc2FtZSBhcyBhYm92ZSAjNAorICogMTEwIChyYXRpbzIpIHNhbWUgYXMgYWJvdmUgIzMKKyAqIDEwNCAocmF0aW8yKQorICogYm9vdCAoYm9vdCkKKyAqLworCisvKgorICogMjQyMCBFcXVpdmFsZW50IC0gbW9kZSByZWdpc3RlcnMKKyAqIFBSQ00gSUkgLCB0YXJnZXQgRFBMTCA9IDIqMzAwTUh6ID0gNjAwTUh6CisgKi8KKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMgkJKDUwIDw8IDEyKQorI2RlZmluZSBNSUlfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQorI2RlZmluZSBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlfRFBMTF9ESVZfMTIgfCBNSUlfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTUlJX0RQTExfTVVMVF8xMwkJKDMwMCA8PCAxMikKKyNkZWZpbmUgTUlJX0RQTExfRElWXzEzCQkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSV9EUExMX0RJVl8xMyB8IE1JSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIElJSSB0YXJnZXQgRFBMTCA9IDIqMjY2ID0gNTMyTUh6Ki8KKyNkZWZpbmUgTUlJSV9EUExMX01VTFRfMTIJCSgxMzMgPDwgMTIpCisjZGVmaW5lIE1JSUlfRFBMTF9ESVZfMTIJCSg1IDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEyIHwgTUlJSV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNSUlJX0RQTExfTVVMVF8xMwkJKDI2NiA8PCAxMikKKyNkZWZpbmUgTUlJSV9EUExMX0RJVl8xMwkJKDEyIDw8IDgpCisjZGVmaW5lIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNSUlJX0RQTExfRElWXzEzIHwgTUlJSV9EUExMX01VTFRfMTMgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMworCisvKiBQUkNNIFZJSSAoYm9vdCBieXBhc3MpICovCisjZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAorI2RlZmluZSBNVklJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwKKworLyogSGlnaCBhbmQgbG93IG9wZXJhdGlvbiB2YWx1ZSAqLworI2RlZmluZSBNWF9DTEtTRUwyX1BMTF8yeF9WQUwJCSgyIDw8IDApCisjZGVmaW5lIE1YX0NMS1NFTDJfUExMXzF4X1ZBTAkJKDEgPDwgMCkKKworLyoKKyAqIFRoZXNlIHJlcHJlc2VudCBvcHRpbWFsIHZhbHVlcyBmb3IgY29tbW9uIHBhcnRzLCBpdCB3b24ndCB3b3JrIGZvciBhbGwuCisgKiBBcyBsb25nIGFzIHlvdSBzY2FsZSBkb3duLCBtb3N0IHBhcmFtZXRlcnMgYXJlIHN0aWxsIHdvcmssIHRoZXkganVzdAorICogYmVjb21lIHN1Yi1vcHRpbWFsLiBUaGUgUkZSIHZhbHVlIGdvZXMgaW4gdGhlIG9wcGlzaXRlIGRpcmVjdGlvbi4gSWYgeW91CisgKiBkb24ndCBhZGp1c3QgaXQgZG93biBhcyB5b3VyIGNsb2NrIHBlcmlvZCBpbmNyZWFzZXMgdGhlIHJlZnJlc2ggaW50ZXJ2YWwKKyAqIHdpbGwgbm90IGJlIG1ldC4gU2V0dGluZyBhbGwgcGFyYW1ldGVycyBmb3IgY29tcGxldGUgd29yc3QgY2FzZSBtYXkgd29yaywKKyAqIGJ1dCBtYXkgY3V0IG1lbW9yeSBwZXJmb3JtYW5jZSBieSAyeC4gRHVlIHRvIGVycmF0YSB0aGUgRExMcyBuZWVkIHRvIGJlCisgKiB1bmxvY2tlZCBhbmQgdGhlaXIgdmFsdWUgbmVlZHMgcnVuIHRpbWUgY2FsaWJyYXRpb24uCUEgZHluYW1pYyBjYWxsIGlzCisgKiBuZWVkIGZvciB0aGF0IGFzIG5vIHNpbmdsZSByaWdodCB2YWx1ZSBleGlzdHMgYWNvcnNzIHByb2R1Y3Rpb24gc2FtcGxlcy4KKyAqCisgKiBPbmx5IHRoZSBGVUxMIHNwZWVkIHZhbHVlcyBhcmUgZ2l2ZW4uIEN1cnJlbnQgY29kZSBpcyBzdWNoIHRoYXQgcmF0ZQorICogY2hhbmdlcyBtdXN0IGJlIG1hZGUgYXQgRFBMTG91dHgyLiBUaGUgYWN0dWFsIHZhbHVlIGFkanVzdG1lbnQgZm9yIGxvdworICogZnJlcXVlbmN5IG9wZXJhdGlvbiB3aWxsIGJlIGhhbmRsZWQgYnkgb21hcF9zZXRfcGVyZm9ybWFuY2UoKQorICoKKyAqIEJ5IGhhdmluZyB0aGUgYm9vdCBsb2FkZXIgYm9vdCB1cCBpbiB0aGUgZmFzdGVzdCBMNCBzcGVlZCBhdmFpbGFibGUgbGlrZWx5CisgKiB3aWxsIHJlc3VsdCBpbiBzb21ldGhpbmcgd2hpY2ggeW91IGNhbiBzd2l0Y2ggYmV0d2Vlbi4KKyAqLworI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IegkoMHgwMDAzZGUwMCB8IDEpCisjZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6CSgweDAwMDJkYTAxIHwgMSkKKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMTBNSHoJKDB4MDAwMmRhMDEgfCAxKSAvKiBOZWVkIHRvIGNhbGMgKi8KKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MJKDB4MDAwMDUwMDAgfCAxKSAvKiBOZWVkIHRvIGNhbGMgKi8KKworLyogTVBVIHNwZWVkIGRlZmluZXMgKi8KKyNkZWZpbmUgUzEyTQkxMjAwMDAwMAorI2RlZmluZSBTMTNNCTEzMDAwMDAwCisjZGVmaW5lIFMxOU0JMTkyMDAwMDAKKyNkZWZpbmUgUzI2TQkyNjAwMDAwMAorI2RlZmluZSBTMTAwTQkxMDAwMDAwMDAKKyNkZWZpbmUgUzEzM00JMTMzMDAwMDAwCisjZGVmaW5lIFMxNTBNCTE1MDAwMDAwMAorI2RlZmluZSBTMTY1TQkxNjUwMDAwMDAKKyNkZWZpbmUgUzIwME0JMjAwMDAwMDAwCisjZGVmaW5lIFMyNjZNCTI2NjAwMDAwMAorI2RlZmluZSBTMzAwTQkzMDAwMDAwMDAKKyNkZWZpbmUgUzMzME0JMzMwMDAwMDAwCisjZGVmaW5lIFM0MDBNCTQwMDAwMDAwMAorI2RlZmluZSBTNTMyTQk1MzIwMDAwMDAKKyNkZWZpbmUgUzYwME0JNjAwMDAwMDAwCisjZGVmaW5lIFM2NjBNCTY2MDAwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCisgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsCisgKiBDTV9DTEtTRUxfRFNQLCBDTV9DTEtTRUxfR0ZYLCBDTV9DTEtTRUwxX0NPUkUsIENNX0NMS1NFTDFfUExMLAorICogQ01fQ0xLU0VMMl9QTEwsIENNX0NMS1NFTF9NRE0KKyAqCisgKiBGaWxsaW5nIGluIHRhYmxlIGJhc2VkIG9uIEg0IGJvYXJkcyBhbmQgMjQzMC1TRFBzIHZhcmlhbnRzIGF2YWlsYWJsZS4KKyAqIFRoZXJlIGFyZSBxdWl0ZSBhIGZldyBtb3JlIHJhdGVzIGNvbWJpbmF0aW9ucyB3aGljaCBjb3VsZCBiZSBkZWZpbmVkLgorICoKKyAqIFdoZW4gbXVsdGlwbGUgdmFsdWVzIGFyZSBkZWZpZW5kIHRoZSBzdGFydCB1cCB3aWxsIHRyeSBhbmQgY2hvb3NlIHRoZQorICogZmFzdGVzdCBvbmUuIElmIGEgJ2Zhc3QnIHZhbHVlIGlzIGRlZmluZWQsIHRoZW4gYXV0b21hdGljYWxseSwgdGhlIC8yCisgKiBvbmUgc2hvdWxkIGJlIGluY2x1ZGVkIGFzIGl0IGNhbiBiZSB1c2VkLglHZW5lcmFsbHkgaGF2aW5nIG1vcmUgdGhhdAorICogb25lIGZhc3Qgc2V0IGRvZXMgbm90IG1ha2Ugc2Vuc2UsIGFzIHN0YXRpYyB0aW1pbmdzIG5lZWQgdG8gYmUgY2hhbmdlZAorICogdG8gY2hhbmdlIHRoZSBzZXQuCSBUaGUgZXhjZXB0aW9uIGlzIHRoZSBieXBhc3Mgc2V0dGluZyB3aGljaCBpcworICogYXZhaWxibGUgZm9yIGxvdyBwb3dlciBieXBhc3MuCisgKgorICogTm90ZTogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBzb3J0ZWQsIGZhc3Rlc3QgdG8gc2xvd2VzdC4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IHByY21fY29uZmlnIHJhdGVfdGFibGVbXSA9IHsKKwkvKiBQUkNNIElJIC0gRkFTVCAqLworCXtTMTJNLCBTNjAwTSwgUzMwME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMwME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNIElJSSAtIEZBU1QgKi8KKwl7UzEyTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUkgLSBTTE9XICovCisJe1MxMk0sIFMzMDBNLCBTMTUwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTUwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUlJIC0gU0xPVyAqLworCXtTMTJNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzI2Nk0sIFMxMzNNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLworCXtTMTJNLCBTMTJNLCBTMTJNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNSHogQVJNKi8KKwkJUlZJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUlZJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNVklJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00tVklJIChib290LWJ5cGFzcykgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTUh6IEFSTSAqLworCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSAjMyAtIHJhdGlvMiAoRVMyKSAtIEZBU1QgKi8KKwl7UzEzTSwgUzY2ME0sIFMzMzBNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDMzME1IeiBBUk0gKi8KKwkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNM19DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTEwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWEgLSByYXRpbzEgLSBGQVNUICovCisJe1MxM00sIFM1MzJNLCBTMjY2TSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIEZBU1QgKi8KKwl7UzEzTSwgUzQwME0sIFMyMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDIwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzMgLSByYXRpbzIgKEVTMikgLSBTTE9XICovCisJe1MxM00sIFMzMzBNLCBTMTY1TSwgUjJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNjVNSHogQVJNICovCisJCVIyX0NNX0NMS1NFTF9EU1BfVkFMLCBSMl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIyX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzExME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzVhIC0gcmF0aW8xIC0gU0xPVyAqLworCXtTMTNNLCBTMjY2TSwgUzEzM00sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTMzTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01QV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWIgLSByYXRpbzEgLSBTTE9XKi8KKwl7UzEzTSwgUzIwME0sIFMxMDBNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEwME1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8xeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KKwl7UzEzTSwgUzEzTSwgUzEzTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxM01oeiAqLworCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNLWJvb3QvYnlwYXNzICovCisJe1MxMk0sIFMxMk0sIFMxMk0sIFJCX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTJNaHogKi8KKwkJUkJfQ01fQ0xLU0VMX0RTUF9WQUwsIFJCX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSQl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUkJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0M1h9LAorCisJeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMjR4eCBjbG9jayB0cmVlLgorICoKKyAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55CisgKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KKyAqCXN3aXRjaCBzb3VyY2VzLgorICoKKyAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKKyAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KKyAqCisgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKKyAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCisgKgorICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKKyAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCisgKgljbG9ja3MuCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkucmF0ZQkJPSAzMjAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVELAorfTsKKworLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAib3NjX2NrIiwKKwkucmF0ZQkJPSAyNjAwMDAwMCwJCS8qIGZpeGVkIHVwIGluIGNsb2NrIGluaXQgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorfTsKKworLyogV2l0aCBvdXQgbW9kZW0gbGlrZWx5IDEyTUh6LCB3aXRoIG1vZGVtIGxpa2VseSAxM01IeiAqLworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAic3lzX2NrIiwJCS8qIH4gcmVmX2NsayBhbHNvICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yYXRlCQk9IDEzMDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gNiwgLyogc3lzY2xrZGl2IDEgb3IgMiwgYWxyZWFkeSBoYW5kbGVkIG9yIG5vIGJvb3QgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9zeXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLworCS5uYW1lCQk9ICJhbHRfY2siLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogQW5hbG9nIGRvbWFpbiByb290IHNvdXJjZSBjbG9ja3MKKyAqLworCisvKiBkcGxsX2NrLCBpcyBicm9rZW4gb3V0IGluIHRvIHNwZWNpYWwgY2FzZXMgdGhyb3VnaCBjbGtzZWwgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFJBVEVfQ0tDVEwgfCBDTV9QTExfU0VMMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweDIsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7CisJLm5hbWUJCT0gImFwbGw1NF9jayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweDYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogUFJDTSBkaWdpdGFsIGJhc2Ugc291cmNlcworICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLworCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQ01fUExMX1NFTDEgfCBSQVRFX1BST1BBR0FURVMsCisJLnNyY19vZmZzZXQJPSA1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweGZmLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNsZWVwX2NrID0gewkJLyogc3lzX2NsayBvciAzMmsgKi8KKwkubmFtZQkJPSAic2xlZXBfY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5yYXRlCQk9IDMyMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKKwkucGFyZW50CQk9ICZhcGxsOTZfY2ssCisJLnJhdGUJCT0gOTYwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkucmF0ZQkJPSA0ODAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IENNX1BMTF9TRUwxIHwgUkFURV9QUk9QQUdBVEVTLAorCS5zcmNfb2Zmc2V0CT0gMywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHhmZiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMTJtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzEybV9jayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLnJhdGUJCT0gMTIwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX1NZU0NMS09VVF9TRUwxIHwgUkFURV9DS0NUTCwKKwkuc3JjX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLT1VUX0NUUkwsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yYXRlX29mZnNldAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fU1lTQ0xLT1VUX1NFTDEgfCBSQVRFX0NLQ1RMLAorCS5zcmNfb2Zmc2V0CT0gOCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IDE1LAorCS5yYXRlX29mZnNldAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTVBVIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICoJCU1QVV9GQ0xLLCBNUFVfSUNMSworICoJCUlOVF9NX0ZDTEssIElOVF9NX0lfQ0xLCisgKgorICogLSBJbmRpdmlkdWFsIGNsb2NrcyBhcmUgaGFyZHdhcmUgbWFuYWdlZC4KKyAqIC0gQmFzZSBkaXZpZGVyIGNvbWVzIGZyb206IENNX0NMS1NFTF9NUFUKKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KKwkubmFtZQkJPSAibXB1X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8CisJCQkJQUxXQVlTX0VOQUJMRUQgfCBDTV9NUFVfU0VMMSB8IERFTEFZRURfQVBQIHwKKwkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwJLyogYml0cyAwLTQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIERTUCAoMjQzMC1JVkEyLjEpICgyNDIwLVVNQStJVkExKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MzA6IElWQTIuMV9GQ0xLLCBJVkEyLjFfSUNMSworICoJMjQyMDogVU1BX0ZDTEssIFVNQV9JQ0xLLCBJVkFfTVBVLCBJVkFfQ09QCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfMV9mY2sgPSB7CisJLm5hbWUJCT0gIml2YTJfMV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUyB8CisJCQkJQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyXzFfaWNrID0geworCS5uYW1lCQk9ICJpdmEyXzFfaWNrIiwKKwkucGFyZW50CQk9ICZpdmEyXzFfZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLnJhdGVfb2Zmc2V0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKKyAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCisgKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKKyAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNwX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAorCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pY2siLAkgLyogYXBwYXJlbnRseSBpcGkgYW5kIGlzcCAqLworCS5wYXJlbnQJCT0gJmRzcF9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkucmF0ZV9vZmZzZXQgPSA1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gMSwJCS8qIGZvciBpcGkgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0geworCS5uYW1lCQk9ICJpdmExX2lmY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ01fRFNQX1NFTDEgfCBSQVRFX0NLQ1RMIHwKKwkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUyB8IERFTEFZRURfQVBQLAorCS5yYXRlX29mZnNldD0gOCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBJVkExIG1wdS9pbnQvaS9mIGNsb2NrcyBhcmUgLzIgb2YgcGFyZW50ICovCitzdGF0aWMgc3RydWN0IGNsayBpdmExX21wdV9pbnRfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9tcHVfaW50X2lmY2siLAorCS5wYXJlbnQJCT0gJml2YTFfaWZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTDMgY2xvY2sgZG9tYWluCisgKiBMMyBjbG9ja3MgYXJlIHVzZWQgZm9yIGJvdGggaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsIGNsb2NrcyB0bworICogbXVsdGlwbGUgZW50aXRpZXMuIFNvbWUgb2YgdGhlc2UgY2xvY2tzIGFyZSBjb21wbGV0ZWx5IG1hbmFnZWQKKyAqIGJ5IGhhcmR3YXJlLCBhbmQgc29tZSBvdGhlcnMgYWxsb3cgc29mdHdhcmUgY29udHJvbC4gSGFyZHdhcmUKKyAqIG1hbmFnZWQgb25lcyBnZW5lcmFsIGFyZSBiYXNlZCBvbiBkaXJlY3RseSBDTEtfUkVRIHNpZ25hbHMgYW5kCisgKiB2YXJpb3VzIGF1dG8gaWRsZSBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uYWwgc3BlYyBzZXRzIG1hbnkgb2YgdGhlc2UKKyAqIGFzICd0aWUtaGlnaCcgZm9yIHRoZWlyIGVuYWJsZXMuCisgKgorICogSS1DTE9DS1M6CisgKglMMy1JbnRlcmNvbm5lY3QsIFNNUywgR1BNQywgU0RSQywgT0NNX1JBTSwgT0NNX1JPTSwgU0RNQQorICoJQ0FNLCBIUy1VU0IuCisgKiBGLUNMT0NLCisgKglTU0kuCisgKgorICogR1BNQyBtZW1vcmllcyBhbmQgU0RSQyBoYXZlIHRpbWluZyBhbmQgY2xvY2sgc2Vuc2l0aXZlIHJlZ2lzdGVycyB3aGljaAorICogbWF5IHZlcnkgd2VsbCBuZWVkIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjbG9jayBjaGFuZ2VzLiBDdXJyZW50bHkgZm9yIGxvdworICogb3BlcmF0aW5nIHBvaW50cywgdGhlc2UgYXJlIHRha2VuIGNhcmUgb2YgaW4gc2xlZXAuUy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19jayA9IHsJLyogVXNlZCBmb3IgaWNrIGFuZCBmY2ssIGludGVyY29ubmVjdCAqLworCS5uYW1lCQk9ICJjb3JlX2wzX2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQgfCBDTV9DT1JFX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5UIHwKKwkJCQlSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLworCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmF0ZV9vZmZzZXQgPSAyNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCisgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCisgKiBkb21haW4uCisgKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0NMSUsKKyAqCisgKiBzc3IgPSBjb3JlLzEvMi8zLzQvNSwgc3N0ID0gMS8yIHNzci4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0geworCS5uYW1lCQk9ICJzc2lfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwJLyogYml0IDEgKi8KKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJhdGVfb2Zmc2V0ID0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBHRlggY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKiBHRlhfRkNMSywgR0ZYX0lDTEsKKyAqIEdGWF9DRzEoMmQpLCBHRlhfQ0cyKDNkKQorICoKKyAqIEdGWF9GQ0xLIHJ1bnMgZnJvbSBMMywgYW5kIGlzIGRpdmlkZWQgYnkgKDEsMiwzLDQpCisgKiBUaGUgMmQgYW5kIDNkIGNsb2NrcyBydW4gYXQgYSBoYXJkd2FyZSBkZXRlcm1pbmVkCisgKiBkaXZpZGVkIHZhbHVlIG9mIGZjbGsuCisgKgorICovCitzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0geworCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fR0ZYX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9HRlgsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yYXRlX29mZnNldD0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzJkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzJkX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCB8IENNX0dGWF9TRUwxLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fR0ZYLAorCS5lbmFibGVfYml0CT0gMSwKKwkucmF0ZV9vZmZzZXQ9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CisJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9HRlgsCS8qIGJpdCAwICovCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogTW9kZW0gY2xvY2sgZG9tYWluICgyNDMwKQorICoJQ0xPQ0tTOgorICoJCU1ETV9PU0NfQ0xLCisgKgkJTURNX0lDTEsKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ljayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gIm1kbV9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8IENNX01PREVNX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldAk9IDAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9NRE0sCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1fb3NjX2NrID0geworCS5uYW1lCQk9ICJtZG1fb3NjX2NrIiwKKwkucmF0ZQkJPSAyNjAwMDAwMCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX01ETSwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gImw0X2NrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQgfCBDTV9DT1JFX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yYXRlX29mZnNldAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAkvKiBiaXQgMSAqLworCS5lbmFibGVfYml0CT0gMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIERTUyBjbG9jayBkb21haW4KKyAqIENMT0NLczoKKyAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKKyAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSworICoKKyAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLworCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzMV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgREVMQVlFRF9BUFAsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJhdGVfb2Zmc2V0CT0gOCwKKwkuc3JjX29mZnNldAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfZmNrID0gewkJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzMl9mY2siLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fQ09SRV9TRUwxIHwgUkFURV9GSVhFRCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMSwKKwkuc3JjX29mZnNldAk9IDEzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfNTRtX2ZjayA9IHsJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KKwkubmFtZQkJPSAiZHNzXzU0bV9mY2siLAkvKiA1NG0gdHYgY2xrICovCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCisvKgorICogQ09SRSBwb3dlciBkb21haW4gSUNMSyAmIEZDTEsgZGVmaW5lcy4KKyAqIE1hbnkgb2YgdGhlIHRoZXNlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgcGFyZW50LiBFbnRyaWVzCisgKiBoZXJlIHdpbGwgbGlrZWx5IGhhdmUgYW4gTDQgaW50ZXJmYWNlIHBhcmVudCwgYW5kIG1heSBoYXZlIG11bHRpcGxlCisgKiBmdW5jdGlvbmFsIGNsb2NrIHBhcmVudHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0geworCS5uYW1lCQk9ICJncHQxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAkvKiBCaXQ0ICovCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9XS1VQX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMCwKKwkuc3JjX29mZnNldAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJLyogYml0NCAqLworCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5zcmNfb2Zmc2V0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBCaXQ1ICovCisJLmVuYWJsZV9iaXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnNyY19vZmZzZXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCS8qIEJpdDYgKi8KKwkuZW5hYmxlX2JpdAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNiwKKwkuc3JjX29mZnNldAk9IDYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIEJpdDcgKi8KKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0geworCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNywKKwkuc3JjX29mZnNldAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0geworCS5uYW1lCQk9ICJncHQ2X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQ4ICovCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gOCwKKwkuc3JjX29mZnNldAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQ5ICovCisJLmVuYWJsZV9iaXQJPSA5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0N19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDksCisJLnNyY19vZmZzZXQJPSAxMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTAgKi8KKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5zcmNfb2Zmc2V0CT0gMTQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0geworCS5uYW1lCQk9ICJncHQ5X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMSwKKwkuc3JjX29mZnNldAk9IDE2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEyLAorCS5zcmNfb2Zmc2V0CT0gMTgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTMsCisJLnNyY19vZmZzZXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0geworCS5uYW1lCQk9ICJncHQxMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQxNCAqLworCS5lbmFibGVfYml0CT0gMTQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTQsCisJLnNyY19vZmZzZXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogYml0MTYgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDE2LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gMTYsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ljayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5bmNfMzJrX2ljayA9IHsKKwkubmFtZQkJPSAic3luY18zMmtfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0geworCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMzEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CisJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0geworCS5uYW1lCQk9ICJtc3Byb19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ljayA9IHsKKwkubmFtZQkJPSAibW1jX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKKwkubmFtZQkJPSAiZmFjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfZmNrID0geworCS5uYW1lCQk9ICJmYWNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19pY2sgPSB7CisJLm5hbWUJCT0gImVhY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19mY2sgPSB7CisJLm5hbWUJCT0gImVhY19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CisJLm5hbWUJCT0gImhkcV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKKwkubmFtZQkJPSAiaGRxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY2hzMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyY2hzMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMjAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmMxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHMxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0geworCS5uYW1lCQk9ICJ2bHlucV9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9mY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYICB8IFJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkuc3JjX29mZnNldAk9IDE1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKKwkubmFtZQkJPSAic2RyY19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOM19DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CisJLm5hbWUJCT0gInNoYV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0geworCS5uYW1lCQk9ICJ1c2Joc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHMyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZmNrID0geworCS5uYW1lCQk9ICJncGlvNV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pbnRjX2ljayA9IHsKKwkubmFtZQkJPSAibWRtX2ludGNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDExLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGIxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc2RiMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBUaGlzIGNsb2NrIGlzIGEgY29tcG9zaXRlIGNsb2NrIHdoaWNoIGRvZXMgZW50aXJlIHNldCBjaGFuZ2VzIHRoZW4KKyAqIGZvcmNlcyBhIHJlYmFsYW5jZS4gSXQga2V5cyBvbiB0aGUgTVBVIHNwZWVkLCBidXQgaXQgcmVhbGx5IGNvdWxkCisgKiBiZSBhbnkga2V5IHNwZWVkIHBhcnQgb2YgYSBzZXQgaW4gdGhlIHJhdGUgdGFibGUuCisgKgorICogdG8gcmVhbGx5IGNoYW5nZSBhIHNldCwgeW91IG5lZWQgbWVtb3J5IHRhYmxlIHNldHMgd2hpY2ggZ2V0IGNoYW5nZWQKKyAqIGluIHNyYW0sIHByZS1ub3RpZmllcnMgJiBwb3N0IG5vdGlmaWVycywgY2hhbmdpbmcgdGhlIHRvcCBzZXQsIHdpdGhvdXQKKyAqIGhhdmluZyBsb3cgbGV2ZWwgZGlzcGxheSByZWNhbGMncyB3b24ndCB3b3JrLi4uIHRoaXMgaXMgd2h5IGRwbSBub3RpZmllcnMKKyAqIHdvcmssIGlzcidzIG9mZiwgd2FsayBhIGxpc3Qgb2YgY2xvY2tzIGFscmVhZHkgX29mZl8gYW5kIG5vdCBtZXNzaW5nIHdpdGgKKyAqIHRoZSBidXMuCisgKgorICogVGhpcyBjbG9jayBzaG91bGQgaGF2ZSBubyBwYXJlbnQuIEl0IGVtYm9kaWVzIHRoZSBlbnRpcmUgdXBwZXIgbGV2ZWwKKyAqIGFjdGl2ZSBzZXQuIEEgcGFyZW50IHdpbGwgbWVzcyB1cCBzb21lIG9mIHRoZSBpbml0IGFsc28uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfcHJjbV9zZXQgPSB7CisJLm5hbWUJCT0gInZpcnRfcHJjbV9zZXQiLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCwKKwkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbGtzW10gPSB7CisJLyogZXh0ZXJuYWwgcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfMzJrX2NrLAorCSZvc2NfY2ssCisJJnN5c19jaywKKwkmYWx0X2NrLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJJmRwbGxfY2ssCisJJmFwbGw5Nl9jaywKKwkmYXBsbDU0X2NrLAorCS8qIGludGVybmFsIHByY20gcm9vdCBzb3VyY2VzICovCisJJmZ1bmNfNTRtX2NrLAorCSZjb3JlX2NrLAorCSZzbGVlcF9jaywKKwkmZnVuY185Nm1fY2ssCisJJmZ1bmNfNDhtX2NrLAorCSZmdW5jXzEybV9jaywKKwkmd2R0MV9vc2NfY2ssCisJJnN5c19jbGtvdXQsCisJJnN5c19jbGtvdXQyLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJJm1wdV9jaywKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCSZpdmEyXzFfZmNrLAkJLyogMjQzMCAqLworCSZpdmEyXzFfaWNrLAorCSZkc3BfaWNrLAkJLyogMjQyMCAqLworCSZkc3BfZmNrLAorCSZpdmExX2lmY2ssCisJJml2YTFfbXB1X2ludF9pZmNrLAorCS8qIEdGWCBkb21haW4gY2xvY2tzICovCisJJmdmeF8zZF9mY2ssCisJJmdmeF8yZF9mY2ssCisJJmdmeF9pY2ssCisJLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLworCSZtZG1faWNrLAorCSZtZG1fb3NjX2NrLAorCS8qIERTUyBkb21haW4gY2xvY2tzICovCisJJmRzc19pY2ssCisJJmRzczFfZmNrLAorCSZkc3MyX2ZjaywKKwkmZHNzXzU0bV9mY2ssCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCSZjb3JlX2wzX2NrLAorCSZzc2lfc3NyX3NzdF9mY2ssCisJJnVzYl9sNF9pY2ssCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCSZsNF9jaywJCQkvKiB1c2VkIGFzIGJvdGggY29yZV9sNCBhbmQgd3VfbDQgKi8KKwkmc3NpX2w0X2ljaywKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwkmdmlydF9wcmNtX3NldCwKKwkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCisJJmdwdDFfaWNrLAorCSZncHQxX2ZjaywKKwkmZ3B0Ml9pY2ssCisJJmdwdDJfZmNrLAorCSZncHQzX2ljaywKKwkmZ3B0M19mY2ssCisJJmdwdDRfaWNrLAorCSZncHQ0X2ZjaywKKwkmZ3B0NV9pY2ssCisJJmdwdDVfZmNrLAorCSZncHQ2X2ljaywKKwkmZ3B0Nl9mY2ssCisJJmdwdDdfaWNrLAorCSZncHQ3X2ZjaywKKwkmZ3B0OF9pY2ssCisJJmdwdDhfZmNrLAorCSZncHQ5X2ljaywKKwkmZ3B0OV9mY2ssCisJJmdwdDEwX2ljaywKKwkmZ3B0MTBfZmNrLAorCSZncHQxMV9pY2ssCisJJmdwdDExX2ZjaywKKwkmZ3B0MTJfaWNrLAorCSZncHQxMl9mY2ssCisJJm1jYnNwMV9pY2ssCisJJm1jYnNwMV9mY2ssCisJJm1jYnNwMl9pY2ssCisJJm1jYnNwMl9mY2ssCisJJm1jYnNwM19pY2ssCisJJm1jYnNwM19mY2ssCisJJm1jYnNwNF9pY2ssCisJJm1jYnNwNF9mY2ssCisJJm1jYnNwNV9pY2ssCisJJm1jYnNwNV9mY2ssCisJJm1jc3BpMV9pY2ssCisJJm1jc3BpMV9mY2ssCisJJm1jc3BpMl9pY2ssCisJJm1jc3BpMl9mY2ssCisJJm1jc3BpM19pY2ssCisJJm1jc3BpM19mY2ssCisJJnVhcnQxX2ljaywKKwkmdWFydDFfZmNrLAorCSZ1YXJ0Ml9pY2ssCisJJnVhcnQyX2ZjaywKKwkmdWFydDNfaWNrLAorCSZ1YXJ0M19mY2ssCisJJmdwaW9zX2ljaywKKwkmZ3Bpb3NfZmNrLAorCSZtcHVfd2R0X2ljaywKKwkmbXB1X3dkdF9mY2ssCisJJnN5bmNfMzJrX2ljaywKKwkmd2R0MV9pY2ssCisJJm9tYXBjdHJsX2ljaywKKwkmaWNyX2ljaywKKwkmY2FtX2ZjaywKKwkmY2FtX2ljaywKKwkmbWFpbGJveGVzX2ljaywKKwkmd2R0NF9pY2ssCisJJndkdDRfZmNrLAorCSZ3ZHQzX2ljaywKKwkmd2R0M19mY2ssCisJJm1zcHJvX2ljaywKKwkmbXNwcm9fZmNrLAorCSZtbWNfaWNrLAorCSZtbWNfZmNrLAorCSZmYWNfaWNrLAorCSZmYWNfZmNrLAorCSZlYWNfaWNrLAorCSZlYWNfZmNrLAorCSZoZHFfaWNrLAorCSZoZHFfZmNrLAorCSZpMmMxX2ljaywKKwkmaTJjMV9mY2ssCisJJmkyY2hzMV9mY2ssCisJJmkyYzJfaWNrLAorCSZpMmMyX2ZjaywKKwkmaTJjaHMyX2ZjaywKKwkmdmx5bnFfaWNrLAorCSZ2bHlucV9mY2ssCisJJnNkcmNfaWNrLAorCSZkZXNfaWNrLAorCSZzaGFfaWNrLAorCSZybmdfaWNrLAorCSZhZXNfaWNrLAorCSZwa2FfaWNrLAorCSZ1c2JfZmNrLAorCSZ1c2Joc19pY2ssCisJJm1tY2hzMV9pY2ssCisJJm1tY2hzMV9mY2ssCisJJm1tY2hzMl9pY2ssCisJJm1tY2hzMl9mY2ssCisJJmdwaW81X2ljaywKKwkmZ3BpbzVfZmNrLAorCSZtZG1faW50Y19pY2ssCisJJm1tY2hzZGIxX2ZjaywKKwkmbW1jaHNkYjJfZmNrLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxODFlZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKKyAqCisgKiBPTUFQMiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAvaW5pdGlhbGl6YXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworZXh0ZXJuIHZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UyCQkweDQ4MDcyMDAwCisjZGVmaW5lIE9NQVAyX0kyQ19JTlQyCQk1NworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGkyY19yZXNvdXJjZXMyW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDJfSTJDX0JBU0UyLAorCQkuZW5kCQk9IE9NQVAyX0kyQ19CQVNFMiArIDB4M2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAyX0kyQ19JTlQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTIgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDIsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczIpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMyLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBmb3IgZmlyc3QgSTJDIG9uIDI0eHggKi8KK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKK3sKKwkvKiBSRVZJU0lUOiBTZWNvbmQgSTJDIG5vdCBpbiB1c2Ugb24gSDQ/ICovCisJaWYgKG1hY2hpbmVfaXNfb21hcF9oNCgpKQorCQlyZXR1cm47CisKKwlvbWFwX2NmZ19yZWcoSjE1XzI0WFhfSTJDMl9TQ0wpOworCW9tYXBfY2ZnX3JlZyhIMTlfMjRYWF9JMkMyX1NEQSk7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KKworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2luaXRfZGV2aWNlcyh2b2lkKQoreworCS8qIHBsZWFzZSBrZWVwIHRoZXNlIGNhbGxzLCBhbmQgdGhlaXIgaW1wbGVtZW50YXRpb25zIGFib3ZlLAorCSAqIGluIGFscGhhYmV0aWNhbCBvcmRlciBzbyB0aGV5J3JlIGVhc2llciB0byBzb3J0IHRocm91Z2guCisJICovCisJb21hcF9pbml0X2kyYygpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG9tYXAyX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE4NzMwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisgKgorICogT01BUDIgQ1BVIGlkZW50aWZpY2F0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBPTUFQMjRYWF9UQVBfQkFTRQlpb19wMnYoMHg0ODAxNDAwMCkKKworI2RlZmluZSBPTUFQX1RBUF9JRENPREUJCTB4MDIwNAorI2RlZmluZSBPTUFQX1RBUF9QUk9EX0lECTB4MDIwOAorCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8wCTB4MDIxOAorI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMQkweDAyMUMKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzIJMHgwMjIwCisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8zCTB4MDIyNAorCisvKiBzeXN0ZW1fcmV2IGZpZWxkcyBmb3IgT01BUDIgcHJvY2Vzc29yczoKKyAqICAgQ1BVIGlkIGJpdHMgICAgIFszMToxNl0sCisgKiAgIENQVSBkZXZpY2UgdHlwZSBbMTU6MTJdLCAodW5wcmcsbm9ybWFsLFBPUCkKKyAqICAgQ1BVIHJldmlzaW9uICAgIFsxMTowOF0KKyAqICAgQ1BVIGNsYXNzIGJpdHMgIFswNzowMF0KKyAqLworCitzdHJ1Y3Qgb21hcF9pZCB7CisJdTE2CWhhd2tleWU7CS8qIFNpbGljb24gdHlwZSAoSGF3a2V5ZSBpZCkgKi8KKwl1OAlkZXY7CQkvKiBEZXZpY2UgdHlwZSBmcm9tIHByb2R1Y3Rpb25faWQgcmVnICovCisJdTMyCXR5cGU7CQkvKiBjb21iaW5lZCB0eXBlIGlkIGNvcGllZCB0byBzeXN0ZW1fcmV2ICovCit9OworCisvKiBSZWdpc3RlciB2YWx1ZXMgdG8gZGV0ZWN0IHRoZSBPTUFQIHZlcnNpb24gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9pZCBvbWFwX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MjAwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MSwgLnR5cGUgPSAweDI0MjAxMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4MiwgLnR5cGUgPSAweDI0MjAyMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4NCwgLnR5cGUgPSAweDI0MjIwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjVkOSwgLmRldiA9IDB4OCwgLnR5cGUgPSAweDI0MjMwMDAwIH0sCisJeyAuaGF3a2V5ZSA9IDB4YjY4YSwgLmRldiA9IDB4MCwgLnR5cGUgPSAweDI0MzAwMDAwIH0sCit9OworCitzdGF0aWMgdTMyIF9faW5pdCByZWFkX3RhcF9yZWcoaW50IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoT01BUDI0WFhfVEFQX0JBU0UgKyByZWcpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKQoreworCWludCBpLCBqOworCXUzMiBpZGNvZGU7CisJdTMyIHByb2RfaWQ7CisJdTE2IGhhd2tleWU7CisJdTggIGRldl90eXBlOworCXU4ICByZXY7CisKKwlpZGNvZGUgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfSURDT0RFKTsKKwlwcm9kX2lkID0gcmVhZF90YXBfcmVnKE9NQVBfVEFQX1BST0RfSUQpOworCWhhd2tleWUgPSAoaWRjb2RlID4+IDEyKSAmIDB4ZmZmZjsKKwlyZXYgPSAoaWRjb2RlID4+IDI4KSAmIDB4MGY7CisJZGV2X3R5cGUgPSAocHJvZF9pZCA+PiAxNikgJiAweDBmOworCisjaWZkZWYgREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfSURDT0RFIDB4JTA4eCBSRVYgJWkgSEFXS0VZRSAweCUwNHggTUFORiAlMDN4XG4iLAorCQlpZGNvZGUsIHJldiwgaGF3a2V5ZSwgKGlkY29kZSA+PiAxKSAmIDB4N2ZmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzA6IDB4JTA4eFxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8wKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8xOiAweCUwOHggREVWX1JFVjogJWlcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMSksCisJICAgICAgIChyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzEpID4+IDI4KSAmIDB4Zik7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8yOiAweCUwOHhcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMikpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMzogMHglMDh4XG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzMpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfUFJPRF9JRF8wOiAweCUwOHggREVWX1RZUEU6ICVpXG4iLAorCQlwcm9kX2lkLCBkZXZfdHlwZSk7CisjZW5kaWYKKworCS8qIENoZWNrIGhhd2tleWUgaWRzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob21hcF9pZHMpOyBpKyspIHsKKwkJaWYgKGhhd2tleWUgPT0gb21hcF9pZHNbaV0uaGF3a2V5ZSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID09IEFSUkFZX1NJWkUob21hcF9pZHMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBPTUFQIENQVSBpZFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGogPSBpOyBqIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGorKykgeworCQlpZiAoZGV2X3R5cGUgPT0gb21hcF9pZHNbal0uZGV2KQorCQkJYnJlYWs7CisJfQorCisJaWYgKGogPT0gQVJSQVlfU0laRShvbWFwX2lkcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIE9NQVAgZGV2aWNlIHR5cGUuICIKKwkJCQkiSGFuZGxpbmcgaXQgYXMgT01BUCUwNHhcbiIsCisJCQkJb21hcF9pZHNbaV0udHlwZSA+PiAxNik7CisJCWogPSBpOworCX0KKwlzeXN0ZW1fcmV2ID0gb21hcF9pZHNbal0udHlwZTsKKworCXN5c3RlbV9yZXYgfD0gcmV2IDw8IDg7CisKKwkvKiBBZGQgdGhlIGNwdSBjbGFzcyBpbmZvICgyNHh4KSAqLworCXN5c3RlbV9yZXYgfD0gMHgyNDsKKworCXByX2luZm8oIk9NQVAlMDR4Iiwgc3lzdGVtX3JldiA+PiAxNik7CisJaWYgKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKKwkJcHJpbnRrKCIleCIsIChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZik7CisJcHJpbnRrKCJcbiIpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVhNjdiZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCisgKgorICogT01BUDIgSS9PIG1hcHBpbmcgY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorCitleHRlcm4gdm9pZCBvbWFwX3NyYW1faW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwMl9jaGVja19yZXZpc2lvbih2b2lkKTsKKworLyoKKyAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKKyAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMM18yNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEwzXzI0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTDRfMjRYWF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oTDRfMjRYWF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBMNF8yNFhYX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKK3ZvaWQgX19pbml0IG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChvbWFwMl9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyX2lvX2Rlc2MpKTsKKwlvbWFwMl9jaGVja19yZXZpc2lvbigpOworCW9tYXBfc3JhbV9pbml0KCk7CisJb21hcDJfbXV4X2luaXQoKTsKKwlvbWFwMl9jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdiYWZmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvaXJxLmMKKyAqCisgKiBJbnRlcnJ1cHQgaGFuZGxlciBmb3IgT01BUDIgYm9hcmRzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBJTlRDX1JFVklTSU9OCTB4MDAwMAorI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkweDAwMTAKKyNkZWZpbmUgSU5UQ19TWVNTVEFUVVMJMHgwMDE0CisjZGVmaW5lIElOVENfQ09OVFJPTAkweDAwNDgKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCTB4MDA4OAorI2RlZmluZSBJTlRDX01JUl9TRVQwCTB4MDA4YworCisvKgorICogT01BUDIgaGFzIGEgbnVtYmVyIG9mIGRpZmZlcmVudCBpbnRlcnJ1cHQgY29udHJvbGxlcnMsIGVhY2ggaW50ZXJydXB0CisgKiBjb250cm9sbGVyIGlzIGlkZW50aWZpZWQgYXMgaXRzIG93biAiYmFuayIuIFJlZ2lzdGVyIGRlZmluaXRpb25zIGFyZQorICogZmFpcmx5IGNvbnNpc3RlbnQgZm9yIGVhY2ggYmFuaywgYnV0IG5vdCBhbGwgcmVnaXN0ZXJzIGFyZSBpbXBsZW1lbnRlZAorICogZm9yIGVhY2ggYmFuay4uIHdoZW4gaW4gZG91YnQsIGNvbnN1bHQgdGhlIFRSTS4KKyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcmVnOworCXVuc2lnbmVkIGludCBucl9pcnFzOworfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCg0KSkpIGlycV9iYW5rc1tdID0geworCXsKKwkJLyogTVBVIElOVEMgKi8KKwkJLmJhc2VfcmVnCT0gT01BUDI0WFhfSUNfQkFTRSwKKwkJLm5yX2lycXMJPSA5NiwKKwl9LCB7CisJCS8qIFhYWDogRFNQIElOVEMgKi8KKworI2lmIDAKKwkvKgorCSAqIENvbW1lbnRlZCBvdXQgZm9yIG5vdyB1bnRpbCB3ZSBmaXggdGhlIElWQSBjbG9ja2luZworCSAqLworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisJfSwgeworCQkvKiBJVkEgSU5UQyAoMjQyMCBvbmx5KSAqLworCQkuYmFzZV9yZWcJPSBPTUFQMjRYWF9JVkFfSU5UQ19CQVNFLAorCQkubnJfaXJxcwk9IDE2LAkvKiBBY3R1YWxseSAzMiwgYnV0IG9ubHkgMTYgYXJlIHVzZWQgKi8KKyNlbmRpZgorI2VuZGlmCisJfQorfTsKKworLyogWFhYOiBGSVEgYW5kIGFkZGl0aW9uYWwgSU5UQyBzdXBwb3J0IChvbmx5IE1QVSBhdCB0aGUgbW9tZW50KSAqLworc3RhdGljIHZvaWQgb21hcF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF93cml0ZWwoMHgxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IG9mZnNldCA9IChpcnEgPj4gNSkgPDwgNTsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJaXJxICU9IDY0OworCX0gZWxzZSBpZiAoaXJxID49IDMyKSB7CisJCWlycSAlPSAzMjsKKwl9CisKKwlvbWFwX3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfU0VUMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBvZmZzZXQgPSAoaXJxID4+IDUpIDw8IDU7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWlycSAlPSA2NDsKKwl9IGVsc2UgaWYgKGlycSA+PSAzMikgeworCQlpcnEgJT0gMzI7CisJfQorCisJb21hcF93cml0ZWwoMSA8PCBpcnEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfTUlSX0NMRUFSMCArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJb21hcF9tYXNrX2lycShpcnEpOworCW9tYXBfYWNrX2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9pcnFfY2hpcCA9IHsKKwkuYWNrCT0gb21hcF9tYXNrX2Fja19pcnEsCisJLm1hc2sJPSBvbWFwX21hc2tfaXJxLAorCS51bm1hc2sJPSBvbWFwX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pcnFfYmFua19pbml0X29uZShzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuaykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1JFVklTSU9OKSAmIDB4ZmY7CisJcHJpbnRrKEtFUk5fSU5GTyAiSVJROiBGb3VuZCBhbiBJTlRDIGF0IDB4JTA4bHggIgorCQkJICIocmV2aXNpb24gJWxkLiVsZCkgd2l0aCAlZCBpbnRlcnJ1cHRzXG4iLAorCQkJIGJhbmstPmJhc2VfcmVnLCB0bXAgPj4gNCwgdG1wICYgMHhmLCBiYW5rLT5ucl9pcnFzKTsKKworCXRtcCA9IG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisJdG1wIHw9IDEgPDwgMTsJLyogc29mdCByZXNldCAqLworCW9tYXBfd3JpdGVsKHRtcCwgYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU0NPTkZJRyk7CisKKwl3aGlsZSAoIShvbWFwX3JlYWRsKGJhbmstPmJhc2VfcmVnICsgSU5UQ19TWVNTVEFUVVMpICYgMHgxKSkKKwkJLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUgKi87Cit9CisKK3ZvaWQgX19pbml0IG9tYXBfaW5pdF9pcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5yX2lycXMgPSAwOworCXVuc2lnbmVkIGludCBucl9iYW5rcyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpcnFfYmFua3MpOyBpKyspIHsKKwkJc3RydWN0IG9tYXBfaXJxX2JhbmsgKmJhbmsgPSBpcnFfYmFua3MgKyBpOworCisJCS8qIFhYWCAqLworCQlpZiAoIWJhbmstPmJhc2VfcmVnKQorCQkJY29udGludWU7CisKKwkJb21hcF9pcnFfYmFua19pbml0X29uZShiYW5rKTsKKworCQlucl9pcnFzICs9IGJhbmstPm5yX2lycXM7CisJCW5yX2JhbmtzKys7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIGludGVycnVwdHMgb24gJWQgYWN0aXZlIGNvbnRyb2xsZXIlc1xuIiwKKwkgICAgICAgbnJfaXJxcywgbnJfYmFua3MsIG5yX2JhbmtzID4gMSA/ICJzIiA6ICIiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9pcnFzOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZvbWFwX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ2NTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtMCwwICsxLDY1IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworICoKKyAqIE9NQVAxIHBpbiBtdWx0aXBsZXhpbmcgY29uZmlndXJhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKKyNpZmRlZiBDT05GSUdfT01BUF9NVVgKKworLyogTk9URTogU2VlIG11eC5oIGZvciB0aGUgZW51bWVyYXRpb24gKi8KKworc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDI0eHhfcGluc1tdID0geworLyoKKyAqCWRlc2NyaXB0aW9uCQkJbXV4CW11eAlwdWxsCXB1bGwJZGVidWcKKyAqCQkJCQlvZmZzZXQJbW9kZQllbmEJdHlwZQorICovCisKKy8qIDI0eHggSTJDICovCitNVVhfQ0ZHXzI0WFgoIk0xOV8yNFhYX0kyQzFfU0NMIiwJMHgxMTEsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkwxNV8yNFhYX0kyQzFfU0RBIiwJMHgxMTIsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkoxNV8yNFhYX0kyQzJfU0NMIiwJMHgxMTMsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkgxOV8yNFhYX0kyQzJfU0RBIiwJMHgxMTQsCTAsCTAsCTAsCTEpCisKKy8qIE1lbmVsYXVzIGludGVycnVwdCAqLworTVVYX0NGR18yNFhYKCJXMTlfMjRYWF9TWVNfTklSUSIsCTB4MTJjLAkwLAkxLAkxLAkxKQorCisvKiAyNHh4IEdQSU8gKi8KK01VWF9DRkdfMjRYWCgiWTIwXzI0WFhfR1BJTzYwIiwJCTB4MTJjLAkzLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJNMTVfMjRYWF9HUElPOTIiLAkJMHgxMGEsCTMsCTAsCTAsCTEpCisKK307CisKK2ludCBfX2luaXQgb21hcDJfbXV4X2luaXQodm9pZCkKK3sKKwlvbWFwX211eF9yZWdpc3RlcihvbWFwMjR4eF9waW5zLCBBUlJBWV9TSVpFKG9tYXAyNHh4X3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYjg5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uaApAQCAtMCwwICsxLDQxOSBAQAorLyoKKyAqIHByY20uaCAtIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisKKy8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCisjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCisjZGVmaW5lIFBSQ01fRlVMTF9TUEVFRCAyCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIFBSQ01fUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX1BSQ01fQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFBSQ01fUkVWSVNJT04JCVBSQ01fUkVHMzIoMHgwMDApCisjZGVmaW5lIFBSQ01fU1lTQ09ORklHCQlQUkNNX1JFRzMyKDB4MDEwKQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19NUFUJUFJDTV9SRUczMigweDAxOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfTVBVCVBSQ01fUkVHMzIoMHgwMUMpCisjZGVmaW5lIFBSQ01fVk9MVENUUkwJCVBSQ01fUkVHMzIoMHgwNTApCisjZGVmaW5lIFBSQ01fVk9MVFNUCQlQUkNNX1JFRzMyKDB4MDU0KQorI2RlZmluZSBQUkNNX0NMS1NSQ19DVFJMCVBSQ01fUkVHMzIoMHgwNjApCisjZGVmaW5lIFBSQ01fQ0xLT1VUX0NUUkwJUFJDTV9SRUczMigweDA3MCkKKyNkZWZpbmUgUFJDTV9DTEtFTVVMX0NUUkwJUFJDTV9SRUczMigweDA3OCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTAlQUkNNX1JFRzMyKDB4MDgwKQorI2RlZmluZSBQUkNNX0NMS0NGR19TVEFUVVMJUFJDTV9SRUczMigweDA4NCkKKyNkZWZpbmUgUFJDTV9WT0xUU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTApCisjZGVmaW5lIFBSQ01fQ0xLU1NFVFVQCQlQUkNNX1JFRzMyKDB4MDk0KQorI2RlZmluZSBQUkNNX1BPTENUUkwJCVBSQ01fUkVHMzIoMHgwOTgpCisKKy8qIEdFTkVSQUwgUFVSUE9TRSAqLworI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxCVBSQ01fUkVHMzIoMHgwQjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIJUFJDTV9SRUczMigweDBCNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMwlQUkNNX1JFRzMyKDB4MEI4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U0CVBSQ01fUkVHMzIoMHgwQkMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTUJUFJDTV9SRUczMigweDBDMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNglQUkNNX1JFRzMyKDB4MEM0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U3CVBSQ01fUkVHMzIoMHgwQzgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTgJUFJDTV9SRUczMigweDBDQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOQlQUkNNX1JFRzMyKDB4MEQwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMAlQUkNNX1JFRzMyKDB4MEQ0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMQlQUkNNX1JFRzMyKDB4MEQ4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMglQUkNNX1JFRzMyKDB4MERDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMwlQUkNNX1JFRzMyKDB4MEUwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNAlQUkNNX1JFRzMyKDB4MEU0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNQlQUkNNX1JFRzMyKDB4MEU4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNglQUkNNX1JFRzMyKDB4MEVDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNwlQUkNNX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOAlQUkNNX1JFRzMyKDB4MEY0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOQlQUkNNX1JFRzMyKDB4MEY4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyMAlQUkNNX1JFRzMyKDB4MEZDKQorCisvKiBNUFUgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX01QVQkJUFJDTV9SRUczMigweDE0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX01QVQlQUkNNX1JFRzMyKDB4MTQ4KQorI2RlZmluZSBSTV9SU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxNTgpCisjZGVmaW5lIFBNX1dLREVQX01QVQkJUFJDTV9SRUczMigweDFDOCkKKyNkZWZpbmUgUE1fRVZHRU5DVFJMX01QVQlQUkNNX1JFRzMyKDB4MUQ0KQorI2RlZmluZSBQTV9FVkVHRU5PTlRJTV9NUFUJUFJDTV9SRUczMigweDFEOCkKKyNkZWZpbmUgUE1fRVZFR0VOT0ZGVElNX01QVQlQUkNNX1JFRzMyKDB4MURDKQorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFUJCVBSQ01fUkVHMzIoMHgxRTApCisjZGVmaW5lIFBNX1BXU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxRTQpCisKKy8qIENPUkUgKi8KKyNkZWZpbmUgQ01fRkNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjAwKQorI2RlZmluZSBDTV9GQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDQpCisjZGVmaW5lIENNX0ZDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIwOCkKKyNkZWZpbmUgQ01fSUNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjEwKQorI2RlZmluZSBDTV9JQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTQpCisjZGVmaW5lIENNX0lDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIxOCkKKyNkZWZpbmUgQ01fSUNMS0VONF9DT1JFCQlQUkNNX1JFRzMyKDB4MjFDKQorI2RlZmluZSBDTV9JRExFU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjApCisjZGVmaW5lIENNX0lETEVTVDJfQ09SRQkJUFJDTV9SRUczMigweDIyNCkKKyNkZWZpbmUgQ01fSURMRVNUM19DT1JFCQlQUkNNX1JFRzMyKDB4MjI4KQorI2RlZmluZSBDTV9JRExFU1Q0X0NPUkUJCVBSQ01fUkVHMzIoMHgyMkMpCisjZGVmaW5lIENNX0FVVE9JRExFMV9DT1JFCVBSQ01fUkVHMzIoMHgyMzApCisjZGVmaW5lIENNX0FVVE9JRExFMl9DT1JFCVBSQ01fUkVHMzIoMHgyMzQpCisjZGVmaW5lIENNX0FVVE9JRExFM19DT1JFCVBSQ01fUkVHMzIoMHgyMzgpCisjZGVmaW5lIENNX0FVVE9JRExFNF9DT1JFCVBSQ01fUkVHMzIoMHgyM0MpCisjZGVmaW5lIENNX0NMS1NFTDFfQ09SRQkJUFJDTV9SRUczMigweDI0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjQ0KQorI2RlZmluZSBDTV9DTEtTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MjQ4KQorI2RlZmluZSBQTV9XS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkEwKQorI2RlZmluZSBQTV9XS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkE0KQorI2RlZmluZSBQTV9XS1NUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkIwKQorI2RlZmluZSBQTV9XS1NUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkI0KQorI2RlZmluZSBQTV9XS0RFUF9DT1JFCQlQUkNNX1JFRzMyKDB4MkM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyRTApCisjZGVmaW5lIFBNX1BXU1RTVF9DT1JFCQlQUkNNX1JFRzMyKDB4MkU0KQorCisvKiBHRlggKi8KKyNkZWZpbmUgQ01fRkNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX0dGWAkJUFJDTV9SRUczMigweDMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0dGWAkJUFJDTV9SRUczMigweDM0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0dGWAlQUkNNX1JFRzMyKDB4MzQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDM1MCkKKyNkZWZpbmUgUk1fUlNUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzU4KQorI2RlZmluZSBQTV9XS0RFUF9HRlgJCVBSQ01fUkVHMzIoMHgzQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDNFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0dGWAkJUFJDTV9SRUczMigweDNFNCkKKworLyogV0FLRS1VUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MTApCisjZGVmaW5lIENNX0lETEVTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9XS1VQCVBSQ01fUkVHMzIoMHg0MzApCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDQwKQorI2RlZmluZSBSTV9SU1RDVFJMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTApCisjZGVmaW5lIFJNX1JTVFRJTUVfV0tVUAkJUFJDTV9SRUczMigweDQ1NCkKKyNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJUFJDTV9SRUczMigweDQ1OCkKKyNkZWZpbmUgUE1fV0tFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NEEwKQorI2RlZmluZSBQTV9XS1NUX1dLVVAJCVBSQ01fUkVHMzIoMHg0QjApCisKKy8qIENMT0NLUyAqLworI2RlZmluZSBDTV9DTEtFTl9QTEwJCVBSQ01fUkVHMzIoMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTgkJUFJDTV9SRUczMigweDUyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfUExMCQlQUkNNX1JFRzMyKDB4NTMwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJUFJDTV9SRUczMigweDU0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9QTEwJCVBSQ01fUkVHMzIoMHg1NDQpCisKKy8qIERTUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODAwKQorI2RlZmluZSBDTV9JQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODEwKQorI2RlZmluZSBDTV9JRExFU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9EU1AJCVBSQ01fUkVHMzIoMHg4MzApCisjZGVmaW5lIENNX0NMS1NFTF9EU1AJCVBSQ01fUkVHMzIoMHg4NDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9EU1AJUFJDTV9SRUczMigweDg0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4NTApCisjZGVmaW5lIFJNX1JTVFNUX0RTUAkJUFJDTV9SRUczMigweDg1OCkKKyNkZWZpbmUgUE1fV0tFTl9EU1AJCVBSQ01fUkVHMzIoMHg4QTApCisjZGVmaW5lIFBNX1dLREVQX0RTUAkJUFJDTV9SRUczMigweDhDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4OEUwKQorI2RlZmluZSBQTV9QV1NUU1RfRFNQCQlQUkNNX1JFRzMyKDB4OEU0KQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19EU1AJUFJDTV9SRUczMigweDhGMCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfRFNQCVBSQ01fUkVHMzIoMHg4RjQpCisKKy8qIElWQSAqLworI2RlZmluZSBQUkNNX0lSUVNUQVRVU19JVkEJUFJDTV9SRUczMigweDhGOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfSVZBCVBSQ01fUkVHMzIoMHg4RkMpCisKKy8qIE1vZGVtIG9uIDI0MzAgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX01ETQkJUFJDTV9SRUczMigweEMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX01ETQkJUFJDTV9SRUczMigweEMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX01ETQkJUFJDTV9SRUczMigweEMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX01ETQkJUFJDTV9SRUczMigweEM0MCkKKworLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCisjZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBEU1MgKi8KKyNkZWZpbmUgRFNTX0NPTlRST0wJCURJU1BfUkVHMzIoMHgwNDApCisjZGVmaW5lIERJU1BDX0NPTlRST0wJCURJU1BfUkVHMzIoMHg0NDApCisjZGVmaW5lIERJU1BDX1NZU1NUQVRVUwkJRElTUF9SRUczMigweDQxNCkKKyNkZWZpbmUgRElTUENfSVJRU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE4KQorI2RlZmluZSBESVNQQ19JUlFFTkFCTEUJCURJU1BfUkVHMzIoMHg0MUMpCisjZGVmaW5lIERJU1BDX0NPTkZJRwkJRElTUF9SRUczMigweDQ0NCkKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjAJRElTUF9SRUczMigweDQ0QykKKyNkZWZpbmUgRElTUENfREVGQVVMVF9DT0xPUjEJRElTUF9SRUczMigweDQ1MCkKKyNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IwCURJU1BfUkVHMzIoMHg0NTQpCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMQlESVNQX1JFRzMyKDB4NDU4KQorI2RlZmluZSBESVNQQ19MSU5FX05VTUJFUglESVNQX1JFRzMyKDB4NDYwKQorI2RlZmluZSBESVNQQ19USU1JTkdfSAkJRElTUF9SRUczMigweDQ2NCkKKyNkZWZpbmUgRElTUENfVElNSU5HX1YJCURJU1BfUkVHMzIoMHg0NjgpCisjZGVmaW5lIERJU1BDX1BPTF9GUkVRCQlESVNQX1JFRzMyKDB4NDZDKQorI2RlZmluZSBESVNQQ19ESVZJU09SCQlESVNQX1JFRzMyKDB4NDcwKQorI2RlZmluZSBESVNQQ19TSVpFX0RJRwkJRElTUF9SRUczMigweDQ3OCkKKyNkZWZpbmUgRElTUENfU0laRV9MQ0QJCURJU1BfUkVHMzIoMHg0N0MpCisjZGVmaW5lIERJU1BDX0dGWF9CQTAJCURJU1BfUkVHMzIoMHg0ODApCisjZGVmaW5lIERJU1BDX0dGWF9CQTEJCURJU1BfUkVHMzIoMHg0ODQpCisjZGVmaW5lIERJU1BDX0dGWF9QT1NJVElPTglESVNQX1JFRzMyKDB4NDg4KQorI2RlZmluZSBESVNQQ19HRlhfU0laRQkJRElTUF9SRUczMigweDQ4QykKKyNkZWZpbmUgRElTUENfR0ZYX0FUVFJJQlVURVMJRElTUF9SRUczMigweDRBMCkKKyNkZWZpbmUgRElTUENfR0ZYX0ZJRk9fVEhSRVNIT0xECURJU1BfUkVHMzIoMHg0QTQpCisjZGVmaW5lIERJU1BDX0dGWF9ST1dfSU5DCURJU1BfUkVHMzIoMHg0QUMpCisjZGVmaW5lIERJU1BDX0dGWF9QSVhFTF9JTkMJRElTUF9SRUczMigweDRCMCkKKyNkZWZpbmUgRElTUENfR0ZYX1dJTkRPV19TS0lQCURJU1BfUkVHMzIoMHg0QjQpCisjZGVmaW5lIERJU1BDX0dGWF9UQUJMRV9CQQlESVNQX1JFRzMyKDB4NEI4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMQlESVNQX1JFRzMyKDB4NUQ0KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMglESVNQX1JFRzMyKDB4NUQ4KQorI2RlZmluZSBESVNQQ19EQVRBX0NZQ0xFMwlESVNQX1JFRzMyKDB4NURDKQorCisvKiBXYWtlIHVwIGRlZmluZSBmb3IgYm9hcmQgKi8KKyNkZWZpbmUgR1BJTzk3CQkJKDEgPDwgMSkKKyNkZWZpbmUgR1BJTzg4CQkJKDEgPDwgMjQpCisKKyNlbmRpZiAvKiBfX0FTU0VNQkxFUl9fICovCisKKyNlbmRpZgorCisKKworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZGYwNGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL3NlcmlhbC5jCisgKgorICogT01BUDIgc2VyaWFsIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIEJhc2VkIG9mZiBvZiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDEvc2VyaWFsLmMKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgorCitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQxX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQyX2ZjayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqIHVhcnQzX2ZjayA9IE5VTEw7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMV9CQVNFLAorCQkuaXJxCQk9IDcyLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwgeworCQkubWVtYmFzZQk9IChjaGFyICopSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDJfQkFTRSwKKwkJLmlycQkJPSA3MywKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUM19CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQzX0JBU0UsCisJCS5pcnEJCT0gNzQsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKKwl9LCB7CisJCS5mbGFncwkJPSAwCisJfQorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2VyaWFsX3JlYWRfcmVnKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqdXAsCisJCQkJCSAgIGludCBvZmZzZXQpCit7CisJb2Zmc2V0IDw8PSB1cC0+cmVnc2hpZnQ7CisJcmV0dXJuICh1bnNpZ25lZCBpbnQpX19yYXdfcmVhZGIodXAtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VyaWFsX3dyaXRlX3JlZyhzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAsIGludCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHAtPnJlZ3NoaWZ0OworCV9fcmF3X3dyaXRlYih2YWx1ZSwgKHVuc2lnbmVkIGxvbmcpKHAtPm1lbWJhc2UgKyBvZmZzZXQpKTsKK30KKworLyoKKyAqIEludGVybmFsIFVBUlRzIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIHRoZSA4MjUwIGF1dG9jb25maWcgdG8gd29yaworICogcHJvcGVybHkuIE5vdGUgdGhhdCB0aGUgVFggd2F0ZXJtYXJrIGluaXRpYWxpemF0aW9uIG1heSBub3QgYmUgbmVlZGVkCisgKiBvbmNlIHRoZSA4MjUwLmMgd2F0ZXJtYXJrIGhhbmRsaW5nIGNvZGUgaXMgbWVyZ2VkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXBfc2VyaWFsX3Jlc2V0KHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCkKK3sKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9NRFIxLCAweDA3KTsKKwlzZXJpYWxfd3JpdGVfcmVnKHAsIFVBUlRfT01BUF9TQ1IsIDB4MDgpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDApOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX1NZU0MsIDB4MDEpOworfQorCit2b2lkIF9faW5pdCBvbWFwX3NlcmlhbF9pbml0KCkKK3sKKwlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqaW5mbzsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBzZXJpYWwgcG9ydHMgYXJlIG11eGVkIG9uIGF0IHRoaXMgcG9pbnQuCisJICogWW91IGhhdmUgdG8gbXV4IHRoZW0gb2ZmIGluIGRldmljZSBkcml2ZXJzIGxhdGVyIG9uCisJICogaWYgbm90IG5lZWRlZC4KKwkgKi8KKworCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwKKwkJCSAgICAgICBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyk7CisKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgeworCQlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSArIGk7CisKKwkJaWYgKCEoaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKSkgeworCQkJcC0+bWVtYmFzZSA9IDA7CisJCQlwLT5tYXBiYXNlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDoKKwkJCXVhcnQxX2ljayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2ljayIpOworCQkJaWYgKElTX0VSUih1YXJ0MV9pY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0MV9pY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0MV9pY2spOworCQkJfQorCisJCQl1YXJ0MV9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0MV9mY2siKTsKKwkJCWlmIChJU19FUlIodWFydDFfZmNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDFfZmNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDFfZmNrKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQl1YXJ0Ml9pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9pY2siKTsKKwkJCWlmIChJU19FUlIodWFydDJfaWNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfaWNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDJfaWNrKTsKKwkJCX0KKworCQkJdWFydDJfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDJfZmNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQyX2ZjaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQyX2Zja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQyX2Zjayk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdWFydDNfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDNfaWNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQzX2ljaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2lja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQzX2ljayk7CisJCQl9CisKKwkJCXVhcnQzX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQzX2ZjayIpOworCQkJaWYgKElTX0VSUih1YXJ0M19mY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0M19mY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0M19mY2spOworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCQlvbWFwX3NlcmlhbF9yZXNldChwKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE4NjllMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbS1mbi5TCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLlMKKyAqCisgKiBPbWFwMiBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBpbnRlcm5hbCBTUkFNCisgKgorICogKEMpIENvcHlyaWdodCAyMDA0CisgKiBUZXhhcyBJbnN0cnVtZW50cywgPHd3dy50aS5jb20+CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIC9QVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNkZWZpbmUgVElNRVJfMzJLU1lOQ1RfQ1JfVglJT19BRERSRVNTKE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UgKyAweDAxMCkKKworI2RlZmluZSBDTV9DTEtTRUwyX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDQpCisjZGVmaW5lIFBSQ01fVk9MVENUUkxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDA1MCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHgwODApCisjZGVmaW5lIENNX0NMS0VOX1BMTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTAwKQorI2RlZmluZSBDTV9JRExFU1RfQ0tHRU5fVglJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4NTIwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1NDApCisKKyNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglJT19BRERSRVNTKE9NQVAyNFhYX1NEUkNfQkFTRSArIDB4MDYwKQorI2RlZmluZSBTRFJDX1JGUl9DVFJMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwYTQpCisKKwkudGV4dAorCitFTlRSWShzcmFtX2Rkcl9pbml0KQorCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJbW92CXIxMiwgcjIJCQlAIGNhcHR1cmUgQ1MxIHZzIENTMAorCW1vdglyOCwgcjMJCQlAIGNhcHR1cmUgZm9yY2UgcGFyYW1ldGVyCisKKwkvKiBmcmVxdWVuY3kgc2hpZnQgZG93biAqLworCWxkcglyMiwgY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBkcGxsb3V0IHJlZworCW1vdglyMywgIzB4MQkJQCB2YWx1ZSBmb3IgMXggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwxLWZyZXEgb3BlcmF0aW9uCisKKwkvKiB2b2x0YWdlIHNoaWZ0IGRvd24gKi8KKwltb3YgcjksICMweDEJCQlAIHNldCB1cCBmb3IgTDEgdm9sdGFnZSBjYWxsCisJYmwgdm9sdGFnZV9zaGlmdAkJQCBnbyBkcm9wIHZvbHRhZ2UKKworCS8qIGRsbCBsb2NrIG1vZGUgKi8KKwlsZHIJcjExLCBzZHJjX2RsbGFfY3RybAlAIGFkZHIgb2YgZGxsYSBjdHJsCisJbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQgdmFsCisJY21wCXIxMiwgIzB4MQkJQCBjczEgYmFzZSAoMjQyMiBlczIuMDUvMSkKKwlhZGRlcQlyMTEsIHIxMSwgIzB4OAkJQCBpZiBjczEgYmFzZSwgbW92ZSB0byBETExCCisJbXZuCXI5LCAjMHg0CQlAIG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKKwlhbmQJcjEwLCByMTAsIHI5CQlAIGNsZWFyIGJpdDIgZm9yIGxvY2sgbW9kZS4KKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJb3JyCXIxMCwgcjEwLCAjMHgyCQlAIDkwIGRlZ3JlZSBwaGFzZSBmb3IgYWxsIGJlbG93IDEzM01oegorCXN0cglyMTAsIFtyMTFdCQlAIGNvbW1pdCB0byBETExBX0NUUkwKKwlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIGRsbCB0byBsb2NrCisKKwkvKiBnZXQgZGxsIHZhbHVlICovCisJYWRkCXIxMSwgcjExLCAjMHg0CQlAIGdldCBhZGRyIG9mIHN0YXR1cyByZWcKKwlsZHIJcjEwLCBbcjExXQkJQCBnZXQgbG9ja2VkIHZhbHVlCisKKwkvKiB2b2x0YWdlIHNoaWZ0IHVwICovCisJbW92IHI5LCAjMHgwCQkJQCBzaGlmdCBiYWNrIHRvIEwwLXZvbHRhZ2UKKwlibCB2b2x0YWdlX3NoaWZ0CQlAIGdvIHJhaXNlIHZvbHRhZ2UKKworCS8qIGZyZXF1ZW5jeSBzaGlmdCB1cCAqLworCW1vdglyMywgIzB4MgkJQCB2YWx1ZSBmb3IgMnggb3BlcmF0aW9uCisJc3RyCXIzLCBbcjJdCQlAIGdvIHRvIEwwLWZyZXEgb3BlcmF0aW9uCisKKwkvKiByZXNldCBlbnRyeSBtb2RlIGZvciBkbGxjdHJsICovCisJc3ViCXIxMSwgcjExLCAjMHg0CQlAIG1vdmUgZnJvbSBzdGF0dXMgdG8gY3RybAorCWNtcAlyMTIsICMweDEJCUAgbm9ybWFsaXplIGlmIGNzMSBiYXNlZAorCXN1YmVxCXIxMSwgcjExLCAjMHg4CQlAIHBvc3NpYmx5IGJhY2sgdG8gRExMQQorCWNtcAlyOCwgIzB4MQkJQCBpZiBmb3JjZWQgdW5sb2NrIGV4aXQKKwlvcnJlcQlyMSwgcjEsICMweDQJCUAgbWFrZSBzdXJlIGV4aXQgd2l0aCB1bmxvY2tlZCB2YWx1ZQorCXN0cglyMSwgW3IxMV0JCUAgcmVzdG9yZSBETExBX0NUUkwgaGlnaCB2YWx1ZQorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIERMTEJfQ1RSTCBhZGRyCisJc3RyCXIxLCBbcjExXQkJQCBzZXQgdmFsdWUgRExMQl9DVFJMCisJYmwJaV9kbGxfd2FpdAkJQCB3YWl0IGZvciBwb3NzaWJsZSBsb2NrCisKKwkvKiBzZXQgdXAgZm9yIHJldHVybiwgRERSIHNob3VsZCBiZSBnb29kICovCisJc3RyIHIxMCwgW3IwXQkJCUAgd3JpdGUgZGxsX3N0YXR1cyBhbmQgcmV0dXJuIGNvdW50ZXIKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworCS8qIGVuc3VyZSB0aGUgRExMIGhhcyByZWxvY2tlZCAqLworaV9kbGxfd2FpdDoKKwltb3YJcjQsICMweDgwMAkJQCBkZWxheSBETEwgcmVsb2NrLCBtaW4gMHg0MDAgTDMgY2xvY2tzCitpX2RsbF9kZWxheToKKwlzdWJzCXI0LCByNCwgIzB4MQorCWJuZQlpX2RsbF9kZWxheQorCW1vdglwYywgbHIKKworCS8qCisJICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKwkgKiB3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorCSAqLwordm9sdGFnZV9zaGlmdDoKKwlsZHIJcjQsIHByY21fdm9sdGN0cmwJQCBnZXQgYWRkciBvZiB2b2x0IGN0cmwuCisJbGRyCXI1LCBbcjRdCQlAIGdldCB2YWx1ZS4KKwlsZHIJcjYsIHByY21fbWFza192YWwJQCBnZXQgdmFsdWUgb2YgbWFzaworCWFuZAlyNSwgcjUsIHI2CQlAIGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0cworCW9ycglyNSwgcjUsIHI5CQlAIGJ1bGxkIHZhbHVlIGZvciBMMC9MMS12b2x0IG9wZXJhdGlvbi4KKwlzdHIJcjUsIFtyNF0JCUAgc2V0IHVwIGZvciBjaGFuZ2UuCisJbW92CXIzLCAjMHg0MDAwCQlAIGdldCB2YWwgZm9yIGZvcmNlCisJb3JyCXI1LCByNSwgcjMJCUAgYnVpbGQgdmFsdWUgZm9yIGZvcmNlCisJc3RyCXI1LCBbcjRdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMywgdGltZXJfMzJrc3luY3RfY3IJQCBnZXQgYWRkciBvZiBjb3VudGVyCisJbGRyCXI1LCBbcjNdCQlAIGdldCB2YWx1ZQorCWFkZAlyNSwgcjUsICMweDMJCUAgZ2l2ZSBpdCBhdCBtb3N0IDkzdVMKK3ZvbHRfZGVsYXk6CisJbGRyCXI3LCBbcjNdCQlAIGdldCB0aW1lciB2YWx1ZQorCWNtcAlyNSwgcjcJCQlAIHRpbWUgdXA/CisJYmhpCXZvbHRfZGVsYXkJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIuCisKKy8qIHJlbGF0aXZlIGxvYWQgY29uc3RhbnRzICovCitjbV9jbGtzZWwyX3BsbDoKKwkud29yZCBDTV9DTEtTRUwyX1BMTF9WCitzZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitwcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorcHJjbV9tYXNrX3ZhbDoKKwkud29yZCAweEZGRkYzRkZDCit0aW1lcl8zMmtzeW5jdF9jcjoKKwkud29yZCBUSU1FUl8zMktTWU5DVF9DUl9WCitFTlRSWShzcmFtX2Rkcl9pbml0X3N6KQorCS53b3JkCS4gLSBzcmFtX2Rkcl9pbml0CisKKy8qCisgKiBSZXByb2dyYW1zIG1lbW9yeSB0aW1pbmdzLgorICogcjAgPSBbUFJDTV9GVUxMIHwgUFJDTV9IQUxGXSByMSA9IFNEUkNfRExMQV9DVFJMIHZhbHVlIHIyID0gW0REUiB8IFNEUl0KKyAqIFBSQ01fRlVMTCA9IDIsIFBSQ01fSEFMRiA9IDEsIEREUiA9IDEsIFNEUiA9IDAKKyAqLworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyYykKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMCwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9yIG1yYyBjYWxsCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJQCBtZW1vcnkgYmFycmllciwgZmluaXNoIEFSTSBTRFIvRERSCisJbm9wCisJbm9wCisJbGRyCXI2LCBkZHJfc2RyY19yZnJfY3RybAlAIGdldCBhZGRyIG9mIHJlZnJlc2ggcmVnCisJbGRyCXI1LCBbcjZdCQlAIGdldCB2YWx1ZQorCW1vdglyNSwgcjUsIGxzciAjOAkJQCBpc29sYXRlIHJmciBmaWVsZCBhbmQgZHJvcCBidXJzdAorCisJY21wCXIwLCAjMHgxCQlAIGdvaW5nIHRvIGhhbGYgc3BlZWQ/CisJbW92bmUJcjksICMweDAJCUAgaWYgdXAgc2V0IGZsYWcgdXAgZm9yIHByZSB1cCwgaGkgdm9sdAorCisJYmxuZQl2b2x0YWdlX3NoaWZ0X2MJCUAgYWRqdXN0IHZvbHRhZ2UKKworCWNtcAlyMCwgIzB4MQkJQCBnb2luZyB0byBoYWxmIHNwZWVkIChwb3N0IGJyYW5jaCBsaW5rKQorCW1vdmVxCXI1LCByNSwgbHNyICMxCQlAIGRpdmlkZSBieSAyIGlmIHRvIGhhbGYKKwltb3ZuZQlyNSwgcjUsIGxzbCAjMQkJQCBtdWx0IGJ5IDIgaWYgdG8gZnVsbAorCW1vdglyNSwgcjUsIGxzbCAjOAkJQCBwdXQgcmZyIGZpZWxkIGJhY2sgaW50byBwbGFjZQorCWFkZAlyNSwgcjUsICMweDEJCUAgdHVybiBvbiBidXJzdCBvZiAxCisJbGRyCXI0LCBkZHJfY21fY2xrc2VsMl9wbGwJQCBnZXQgYWRkcmVzcyBvZiBvdXQgcmVnCisJbGRyCXIzLCBbcjRdCQlAIGdldCBjdXJyIHZhbHVlCisJb3JyCXIzLCByMywgIzB4MworCWJpYwlyMywgcjMsICMweDMJCUAgY2xlYXIgbG93ZXIgYml0cworCW9ycglyMywgcjMsIHIwCQlAIG5ldyBzdGF0ZSB2YWx1ZQorCXN0cglyMywgW3I0XQkJQCBzZXQgbmV3IHN0YXRlIChwbGwveCwgeD0xIG9yIDIpCisJbm9wCisJbm9wCisKKwltb3ZlcQlyOSwgIzB4MQkJQCBpZiBzcGVlZCBkb3duLCBwb3N0IGRvd24sIGRyb3Agdm9sdAorCWJsZXEJdm9sdGFnZV9zaGlmdF9jCisKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAlAIG1lbW9yeSBiYXJyaWVyCisJc3RyCXI1LCBbcjZdCQlAIHNldCBuZXcgUkZSXzEgdmFsdWUKKwlhZGQJcjYsIHI2LCAjMHgzMAkJQCBnZXQgUkZSXzIgYWRkcgorCXN0cglyNSwgW3I2XQkJQCBzZXQgUkZSXzIKKwlub3AKKwljbXAJcjIsICMweDEJCUAgKFNEUiBvciBERFIpIGRvIHdlIG5lZWQgdG8gYWRqdXN0IERMTAorCWJuZQlmcmVxX291dAkJQCBsZWF2ZSBpZiBTRFIsIG5vIERMTCBmdW5jdGlvbgorCisJLyogV2l0aCBERFIsIHdlIG5lZWQgdG8gdGFrZSBjYXJlIG9mIHRoZSBETEwgZm9yIHRoZSBmcmVxdWVuY3kgY2hhbmdlICovCisJbGRyCXIyLCBkZHJfc2RyY19kbGxhX2N0cmwJQCBhZGRyIG9mIGRsbGEgY3RybAorCXN0cglyMSwgW3IyXQkJQCB3cml0ZSBvdXQgbmV3IFNEUkNfRExMQV9DVFJMCisJYWRkCXIyLCByMiwgIzB4OAkJQCBhZGRyIHRvIFNEUkNfRExMQl9DVFJMCisJc3RyCXIxLCBbcjJdCQlAIGNvbW1pdCB0byBTRFJDX0RMTEJfQ1RSTAorCW1vdglyMSwgIzB4MjAwMAkJQCB3YWl0IERMTCByZWxvY2ssIG1pbiAweDQwMCBMMyBjbG9ja3MKK2RsbF93YWl0OgorCXN1YnMJcjEsIHIxLCAjMHgxCisJYm5lCWRsbF93YWl0CitmcmVxX291dDoKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMCwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworICAgIC8qCisgICAgICogc2hpZnQgdXAgb3IgZG93biB2b2x0YWdlLCB1c2UgUjkgYXMgaW5wdXQgdG8gdGVsbCBsZXZlbC4KKyAgICAgKgl3YWl0IGZvciBpdCB0byBmaW5pc2gsIHVzZSAzMmsgc3luYyBjb3VudGVyLCAxdGljaz0zMXVTLgorICAgICAqLwordm9sdGFnZV9zaGlmdF9jOgorCWxkcglyMTAsIGRkcl9wcmNtX3ZvbHRjdHJsCUAgZ2V0IGFkZHIgb2Ygdm9sdCBjdHJsCisJbGRyCXI4LCBbcjEwXQkJQCBnZXQgdmFsdWUKKwlsZHIJcjcsIGRkcl9wcmNtX21hc2tfdmFsCUAgZ2V0IHZhbHVlIG9mIG1hc2sKKwlhbmQJcjgsIHI4LCByNwkJQCBhcHBseSBtYXNrIHRvIGNsZWFyIGJpdHMKKwlvcnIJcjgsIHI4LCByOQkJQCBidWxsZCB2YWx1ZSBmb3IgTDAvTDEtdm9sdCBvcGVyYXRpb24uCisJc3RyCXI4LCBbcjEwXQkJQCBzZXQgdXAgZm9yIGNoYW5nZS4KKwltb3YJcjcsICMweDQwMDAJCUAgZ2V0IHZhbCBmb3IgZm9yY2UKKwlvcnIJcjgsIHI4LCByNwkJQCBidWlsZCB2YWx1ZSBmb3IgZm9yY2UKKwlzdHIJcjgsIFtyMTBdCQlAIEZvcmNlIHRyYW5zaXRpb24gdG8gTDEKKworCWxkcglyMTAsIGRkcl90aW1lcl8zMmtzeW5jdAlAIGdldCBhZGRyIG9mIGNvdW50ZXIKKwlsZHIJcjgsIFtyMTBdCQlAIGdldCB2YWx1ZQorCWFkZAlyOCwgcjgsICMweDIJCUAgZ2l2ZSBpdCBhdCBtb3N0IDYydVMgKG1pbiAzMSspCit2b2x0X2RlbGF5X2M6CisJbGRyCXI3LCBbcjEwXQkJQCBnZXQgdGltZXIgdmFsdWUKKwljbXAJcjgsIHI3CQkJQCB0aW1lIHVwPworCWJoaQl2b2x0X2RlbGF5X2MJCUAgbm90IHlldC0+YnJhbmNoCisJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIKKworZGRyX2NtX2Nsa3NlbDJfcGxsOgorCS53b3JkIENNX0NMS1NFTDJfUExMX1YKK2Rkcl9zZHJjX2RsbGFfY3RybDoKKwkud29yZCBTRFJDX0RMTEFfQ1RSTF9WCitkZHJfc2RyY19yZnJfY3RybDoKKwkud29yZCBTRFJDX1JGUl9DVFJMX1YKK2Rkcl9wcmNtX3ZvbHRjdHJsOgorCS53b3JkIFBSQ01fVk9MVENUUkxfVgorZGRyX3ByY21fbWFza192YWw6CisJLndvcmQgMHhGRkZGM0ZGQworZGRyX3RpbWVyXzMya3N5bmN0OgorCS53b3JkIFRJTUVSXzMyS1NZTkNUX0NSX1YKKworRU5UUlkoc3JhbV9yZXByb2dyYW1fc2RyY19zeikKKwkud29yZAkuIC0gc3JhbV9yZXByb2dyYW1fc2RyYworCisvKgorICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxhdGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgorICovCitFTlRSWShzcmFtX3NldF9wcmNtKQorCXN0bWZkCXNwISwge3IwLXIxMiwgbHJ9CUAgcmVncyB0byBzdGFjaworCWFkcglyNCwgcGJlZ2luCQlAIGFkZHIgb2YgcHJlbG9hZCBzdGFydAorCWFkcglyOCwgcGVuZAkJQCBhZGRyIG9mIHByZWxvYWQgZW5kCisJbWNycglwMTUsIDEsIHI4LCByNCwgYzEyCUAgcHJlbG9hZCBpbnRvIGljYWNoZQorcGJlZ2luOgorCS8qIG1vdmUgaW50byBmYXN0IHJlbG9jayBieXBhc3MgKi8KKwlsZHIJcjgsIHBsbF9jdGwJCUAgZ2V0IGFkZHIKKwlsZHIJcjUsIFtyOF0JCUAgZ2V0IHZhbAorCW12bglyNiwgIzB4MwkJQCBjbGVhciBtYXNrCisJYW5kCXI1LCByNSwgcjYJCUAgY2xlYXIgZmllbGQKKwlvcnIJcjcsIHI1LCAjMHgyCQlAIGZhc3QgcmVsb2NrIHZhbAorCXN0cglyNywgW3I4XQkJQCBnbyB0byBmYXN0IHJlbG9jaworCWxkcglyNCwgcGxsX3N0YXQJCUAgYWRkciBvZiBzdGF0CitibG9jazoKKwkvKiB3YWl0IGZvciBieXBhc3MgKi8KKwlsZHIJcjgsIFtyNF0JCUAgc3RhdCB2YWx1ZQorCWFuZAlyOCwgcjgsICMweDMJCUAgbWFzayBmb3Igc3RhdAorCWNtcAlyOCwgIzB4MQkJQCB0aGVyZSB5ZXQKKwlibmUJYmxvY2sJCQlAIGxvb3AgaWYgbm90CisKKwkvKiBzZXQgbmV3IGRwbGwgZGl2aWRlcnMgX2FmdGVyXyBpbiBieXBhc3MgKi8KKwlsZHIJcjQsIHBsbF9kaXYJCUAgZ2V0IGFkZHIKKwlzdHIJcjAsIFtyNF0JCUAgc2V0IGRwbGwgY3RybCB2YWwKKworCWxkcglyNCwgc2V0X2NvbmZpZwkJQCBnZXQgYWRkcgorCW1vdglyOCwgIzEJCQlAIHZhbGlkIGNmZyBtc2sKKwlzdHIJcjgsIFtyNF0JCUAgbWFrZSBkaXZpZGVycyB0YWtlCisKKwltb3YJcjQsICMxMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X2FfYml0OgorCXN1YnMJcjQsIHI0LCAjMQkJQCBkZWMgbG9vcAorCWJuZQl3YWl0X2FfYml0CQlAIGRlbGF5IGRvbmU/CisKKwkvKiBjaGVjayBpZiBzdGF5aW5nIGluIGJ5cGFzcyAqLworCWNtcAlyMiwgIzB4MQkJQCBzdGF5IGluIGJ5cGFzcz8KKwliZXEJcGVuZAkJCUAganVtcCBvdmVyIGRwbGwgcmVsb2NrCisKKwkvKiByZWxvY2sgRFBMTCB3aXRoIG5ldyB2YWxzICovCisJbGRyCXI1LCBwbGxfc3RhdAkJQCBnZXQgYWRkcgorCWxkcglyNCwgcGxsX2N0bAkJQCBnZXQgYWRkcgorCW9ycglyOCwgcjcsICMweDMJCUAgdmFsIGZvciBsb2NrIGRwbGwKKwlzdHIJcjgsIFtyNF0JCUAgc2V0IHZhbAorCW1vdglyMCwgIzEwMDAJCUAgZGVhZCBzcGluIGEgYml0Cit3YWl0X21vcmU6CisJc3VicwlyMCwgcjAsICMxCQlAIGRlYyBsb29wCisJYm5lCXdhaXRfbW9yZQkJQCBkZWxheSBkb25lPword2FpdF9sb2NrOgorCWxkcglyOCwgW3I1XQkJQCBnZXQgbG9jayB2YWwKKwlhbmQJcjgsIHI4LCAjMwkJQCBpc29sYXRlIGZpZWxkCisJY21wCXI4LCAjMgkJCUAgbG9ja2VkPworCWJuZQl3YWl0X2xvY2sJCUAgd2FpdCBpZiBub3QKK3BlbmQ6CisJLyogdXBkYXRlIG1lbW9yeSB0aW1pbmdzICYgYnJpZWZseSBsb2NrIGRsbCAqLworCWxkcglyNCwgc2RyY19yZnIJCUAgZ2V0IGFkZHIKKwlzdHIJcjEsIFtyNF0JCUAgdXBkYXRlIHJlZnJlc2ggdGltaW5nCisJbGRyCXIxMSwgZGxsYV9jdHJsCQlAIGdldCBhZGRyIG9mIERMTEEgY3RybAorCWxkcglyMTAsIFtyMTFdCQlAIGdldCBjdXJyZW50IHZhbAorCW12bglyOSwgIzB4NAkJQCBtYXNrIHRvIGdldCBjbGVhciBiaXQyCisJYW5kCXIxMCwgcjEwLCByOQkJQCBjbGVhciBiaXQyIGZvciBsb2NrIG1vZGUKKwlvcnIJcjEwLCByMTAsICMweDgJCUAgbWFrZSBzdXJlIERMTCBvbiAoZXMyIGJpdCBwb3MpCisJc3RyCXIxMCwgW3IxMV0JCUAgY29tbWl0IHRvIERMTEFfQ1RSTAorCWFkZAlyMTEsIHIxMSwgIzB4OAkJQCBtb3ZlIHRvIGRsbGIKKwlzdHIJcjEwLCBbcjExXQkJQCBoaXQgRExMQiBhbHNvCisKKwltb3YJcjQsICMweDgwMAkJQCByZWxvY2sgdGltZSAobWluIDB4NDAwIEwzIGNsb2NrcykKK3dhaXRfZGxsX2xvY2s6CisJc3VicwlyNCwgcjQsICMweDEKKwlibmUJd2FpdF9kbGxfbG9jaworCW5vcAorCWxkbWZkCXNwISwge3IwLXIxMiwgcGN9CUAgcmVzdG9yZSByZWdzIGFuZCByZXR1cm4KKworc2V0X2NvbmZpZzoKKwkud29yZCBQUkNNX0NMS0NGR19DVFJMX1YKK3BsbF9jdGw6CisJLndvcmQgQ01fQ0xLRU5fUExMX1YKK3BsbF9zdGF0OgorCS53b3JkIENNX0lETEVTVF9DS0dFTl9WCitwbGxfZGl2OgorCS53b3JkIENNX0NMS1NFTDFfUExMX1YKK3NkcmNfcmZyOgorCS53b3JkIFNEUkNfUkZSX0NUUkxfVgorZGxsYV9jdHJsOgorCS53b3JkIFNEUkNfRExMQV9DVFJMX1YKKworRU5UUlkoc3JhbV9zZXRfcHJjbV9zeikKKwkud29yZAkuIC0gc3JhbV9zZXRfcHJjbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzExNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKyAqCisgKiBPTUFQMiBHUCB0aW1lciBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KKyAqICAgICAgICAgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqCisgKiBTb21lIHBhcnRzIGJhc2VkIG9mZiBvZiBUSSdzIDI0eHggY29kZToKKyAqCisgKiAgIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIFJvdWdobHkgbW9kZWxsZWQgYWZ0ZXIgdGhlIE9NQVAxIE1QVSB0aW1lciBjb2RlLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2RlZmluZSBPTUFQMl9HUF9USU1FUjFfQkFTRQkweDQ4MDI4MDAwCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSMl9CQVNFCTB4NDgwMmEwMDAKKyNkZWZpbmUgT01BUDJfR1BfVElNRVIzX0JBU0UJMHg0ODA3ODAwMAorI2RlZmluZSBPTUFQMl9HUF9USU1FUjRfQkFTRQkweDQ4MDdhMDAwCisKKyNkZWZpbmUgR1BfVElNRVJfVElEUgkJMHgwMAorI2RlZmluZSBHUF9USU1FUl9USVNSCQkweDE4CisjZGVmaW5lIEdQX1RJTUVSX1RJRVIJCTB4MWMKKyNkZWZpbmUgR1BfVElNRVJfVENMUgkJMHgyNAorI2RlZmluZSBHUF9USU1FUl9UQ1JSCQkweDI4CisjZGVmaW5lIEdQX1RJTUVSX1RMRFIJCTB4MmMKKyNkZWZpbmUgR1BfVElNRVJfVFNJQ1IJCTB4NDAKKworI2RlZmluZSBPU19USU1FUl9OUgkJMSAgLyogR1AgdGltZXIgMiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9iYXNlW10gPSB7CisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjFfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjJfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjNfQkFTRSksCisJSU9fQUREUkVTUyhPTUFQMl9HUF9USU1FUjRfQkFTRSksCit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0aW1lcl9yZWFkX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2VbbnJdICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVyX3dyaXRlX3JlZyhpbnQgbnIsIHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGludCB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgdGltZXJfYmFzZVtucl0gKyByZWcpOworfQorCisvKiBOb3RlIHRoYXQgd2UgYWx3YXlzIGVuYWJsZSB0aGUgY2xvY2sgcHJlc2NhbGUgZGl2aWRlciBiaXQgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9ncF90aW1lcl9zdGFydChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCit7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXRtcCA9IDB4ZmZmZmZmZmYgLSBsb2FkX3ZhbDsKKworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVExEUiwgdG1wKTsKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RDUlIsIHRtcCk7CisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9USUVSLCAxIDw8IDEpOworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVENMUiwgKDEgPDwgNSkgfCAoMSA8PCAxKSB8IDEpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCisJdGltZXJfd3JpdGVfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9USVNSLCAxIDw8IDEpOworCXRpbWVyX3RpY2socmVncyk7CisKKwl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwMl9ncF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gImdwIHRpbWVyIiwKKwkuZmxhZ3MJCT0gU0FfSU5URVJSVVBULAorCS5oYW5kbGVyCT0gb21hcDJfZ3BfdGltZXJfaW50ZXJydXB0LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICogc3lzX2NrOworCXUzMiB0aWNrX3BlcmlvZCA9IDEyMDAwMDsKKwl1MzIgbDsKKworCS8qIFJlc2V0IGNsb2NrIGFuZCBwcmVzY2FsZSB2YWx1ZSAqLworCXRpbWVyX3dyaXRlX3JlZyhPU19USU1FUl9OUiwgR1BfVElNRVJfVENMUiwgMCk7CisKKwlzeXNfY2sgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlpZiAoSVNfRVJSKHN5c19jaykpCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBzeXNfY2tcbiIpOworCWVsc2UgeworCQljbGtfdXNlKHN5c19jayk7CisJCXRpY2tfcGVyaW9kID0gY2xrX2dldF9yYXRlKHN5c19jaykgLyAxMDA7CisJCWNsa19wdXQoc3lzX2NrKTsKKwl9CisKKwl0aWNrX3BlcmlvZCAvPSAyOwkvKiBNaW5pbXVtIHByZXNjYWxlIGRpdmlkZXIgaXMgMiAqLworCXRpY2tfcGVyaW9kIC09IDE7CisKKwlsID0gdGltZXJfcmVhZF9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJRFIpOworCXByaW50ayhLRVJOX0lORk8gIk9NQVAyIEdQIHRpbWVyIChIVyB2ZXJzaW9uICVkLiVkKVxuIiwKKwkgICAgICAgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CisKKwlzZXR1cF9pcnEoMzgsICZvbWFwMl9ncF90aW1lcl9pcnEpOworCisJb21hcDJfZ3BfdGltZXJfc3RhcnQoT1NfVElNRVJfTlIsIHRpY2tfcGVyaW9kKTsKK30KKworc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0geworCS5pbml0CT0gb21hcDJfZ3BfdGltZXJfaW5pdCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGIzODBhNDM4Li5lMjAxYWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKQEAgLTYwLDYgKzYwLDcgQEAKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzcwMCAoQ29yZ2kpIFN1cHBvcnQiCiAJZGVwZW5kcyBQWEFfU0hBUlBTTF8yNXgKIAlzZWxlY3QgUFhBX1NIQVJQX0M3eHgKKwlzZWxlY3QgUFhBX1NTUAogCiBjb25maWcgTUFDSF9TSEVQSEVSRAogCWJvb2wgIkVuYWJsZSBTaGFycCBTTC1DNzUwIChTaGVwaGVyZCkgU3VwcG9ydCIKQEAgLTEwMiwxMiArMTAzLDE4IEBACiAKIGNvbmZpZyBQWEFfU0hBUlBfQzd4eAogCWJvb2wKKwlzZWxlY3QgUFhBX1NTUAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBhbGwgU2hhcnAgQzd4eCBtb2RlbHMKIAogY29uZmlnIFBYQV9TSEFSUF9DeHgwMAogCWJvb2wKKwlzZWxlY3QgUFhBX1NTUAogCWhlbHAKIAkgIEVuYWJsZSBjb21tb24gc3VwcG9ydCBmb3IgU2hhcnAgQ3h4MDAgbW9kZWxzCiAKK2NvbmZpZyBQWEFfU1NQCisJdHJpc3RhdGUKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUFhBMnh4IFNTUCBwb3J0cwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggOGJjNzJkMC4uZDIxMGJkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTExLDggKzExLDggQEAKIG9iai0kKENPTkZJR19BUkNIX0xVQkJPQ0spICs9IGx1YmJvY2subwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKSArPSBtYWluc3RvbmUubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0lEUCkgKz0gaWRwLm8KLW9iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzc3Aubwotb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBjb3JnaV9zc3AubyBjb3JnaV9sY2QubyBzc3Aubworb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DN3h4KQkrPSBjb3JnaS5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vCitvYmotJChDT05GSUdfUFhBX1NIQVJQX0N4eDAwKQkrPSBzcGl0ei5vIGNvcmdpX3NzcC5vIGNvcmdpX2xjZC5vCiBvYmotJChDT05GSUdfTUFDSF9QT09ETEUpCSs9IHBvb2RsZS5vCiBvYmotJChDT05GSUdfTUFDSF9UT1NBKSAgICAgICAgICs9IHRvc2EubwogCkBAIC0yNiw2ICsyNiw3IEBACiAKICMgTWlzYyBmZWF0dXJlcwogb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KK29iai0kKENPTkZJR19QWEFfU1NQKSArPSBzc3AubwogCiBpZmVxICgkKENPTkZJR19QWEEyN3gpLHkpCiBvYmotJChDT05GSUdfUE0pICs9IHN0YW5kYnkubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCA1OTFlNWYzLi5iMzcxZDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJc3NwX21hY2hpbmZvID0gbWFjaGluZm87CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpX3NzcF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTIwMyw3ICsyMDMsNyBAQAogCUdQRFIoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSB8PSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOyAgLyogb3V0cHV0ICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgICAvKiBIaWdoIC0gRGlzYWJsZSBBRFM3ODQ2Ki8KIAotCXJldCA9IHNzcF9pbml0KCZjb3JnaV9zc3BfZGV2LHNzcF9tYWNoaW5mby0+cG9ydCk7CisJcmV0ID0gc3NwX2luaXQoJmNvcmdpX3NzcF9kZXYsIHNzcF9tYWNoaW5mby0+cG9ydCwgMCk7CiAKIAlpZiAocmV0KQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTU1AgaGFuZGxlciFcbiIpOwpAQCAtMjE2LDEzICsyMTYsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNvcmdpX3NzcF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaV9zc3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzc3BfZXhpdCgmY29yZ2lfc3NwX2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfc3NwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpX3NzcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXNzcF9mbHVzaCgmY29yZ2lfc3NwX2Rldik7CiAJc3NwX3NhdmVfc3RhdGUoJmNvcmdpX3NzcF9kZXYsJmNvcmdpX3NzcF9zdGF0ZSk7CkBAIC0yMzAsNyArMjMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaV9zc3BfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lfc3NwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7ICAvKiBIaWdoIC0gRGlzYWJsZSBMQ0QgQ29udHJvbC9UaW1pbmcgR2VuICovCiAJR1BTUihzc3BfbWFjaGluZm8tPmNzX21heDExMTEpID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKTsgLyogSGlnaCAtIERpc2FibGUgTUFYMTExMSovCkBAIC0yNDEsMTggKzI0MSwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1zc3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2lzc3BfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaV9zc3BfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaV9zc3BfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2lfc3NwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaV9zc3BfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS1zc3AiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IGNvcmdpX3NzcF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2lzc3BfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXNzcF9kcml2ZXIpOwogfQogCiBhcmNoX2luaXRjYWxsKGNvcmdpX3NzcF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaCBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaAppbmRleCAzOTc3YTc3Li40ODc5YzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCkBAIC0zMiwzICszMiw5MCBAQAogdm9pZCBzcGl0el9wdXRfaHN5bmModm9pZCk7CiB2b2lkIGNvcmdpX3dhaXRfaHN5bmModm9pZCk7CiB2b2lkIHNwaXR6X3dhaXRfaHN5bmModm9pZCk7CisKKy8qCisgKiBTaGFycFNMIEJhdHRlcnkvUE0gRHJpdmVyCisgKi8KKworc3RydWN0IHNoYXJwc2xfY2hhcmdlcl9tYWNoaW5mbyB7CisJdm9pZCAoKmluaXQpKHZvaWQpOworCWludCBncGlvX2FjaW47CisJaW50IGdwaW9fYmF0ZnVsbDsKKwlpbnQgZ3Bpb19iYXRsb2NrOworCWludCBncGlvX2ZhdGFsOworCWludCAoKnN0YXR1c19hY2luKSh2b2lkKTsKKwl2b2lkICgqZGlzY2hhcmdlKShpbnQpOworCXZvaWQgKCpkaXNjaGFyZ2UxKShpbnQpOworCXZvaWQgKCpjaGFyZ2UpKGludCk7CisJdm9pZCAoKmNoYXJnZWxlZCkoaW50KTsKKwl2b2lkICgqbWVhc3VyZV90ZW1wKShpbnQpOworCXZvaWQgKCpwcmVzdXNwZW5kKSh2b2lkKTsKKwl2b2lkICgqcG9zdHN1c3BlbmQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpjaGFyZ2VyX3dha2V1cCkodm9pZCk7CisJaW50ICgqc2hvdWxkX3dha2V1cCkodW5zaWduZWQgaW50IHJlc3VtZV9vbl9hbGFybSk7CisJaW50IGJhdF9sZXZlbHM7CisJc3RydWN0IGJhdHRlcnlfdGhyZXNoICpiYXRfbGV2ZWxzX25vYWM7CisJc3RydWN0IGJhdHRlcnlfdGhyZXNoICpiYXRfbGV2ZWxzX2FjaW47CisJaW50IHN0YXR1c19oaWdoX2FjaW47CisJaW50IHN0YXR1c19sb3dfYWNpbjsKKwlpbnQgc3RhdHVzX2hpZ2hfbm9hYzsKKwlpbnQgc3RhdHVzX2xvd19ub2FjOworfTsKKworc3RydWN0IGJhdHRlcnlfdGhyZXNoIHsKKwlpbnQgdm9sdGFnZTsKKwlpbnQgcGVyY2VudGFnZTsKK307CisKK3N0cnVjdCBiYXR0ZXJ5X3N0YXQgeworCWludCBhY19zdGF0dXM7ICAgICAgICAgLyogQVBNIEFDIFByZXNlbnQvTm90IFByZXNlbnQgKi8KKwlpbnQgbWFpbmJhdF9zdGF0dXM7ICAgIC8qIEFQTSBNYWluIEJhdHRlcnkgU3RhdHVzICovCisJaW50IG1haW5iYXRfcGVyY2VudDsgICAvKiBNYWluIEJhdHRlcnkgUGVyY2VudGFnZSBDaGFyZ2UgKi8KKwlpbnQgbWFpbmJhdF92b2x0YWdlOyAgIC8qIE1haW4gQmF0dGVyeSBWb2x0YWdlICovCit9OworCitzdHJ1Y3Qgc2hhcnBzbF9wbV9zdGF0dXMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBhY190aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjaHJnX2Z1bGxfdGltZXI7CisKKwlpbnQgY2hhcmdlX21vZGU7CisjZGVmaW5lIENIUkdfRVJST1IgICAgKC0xKQorI2RlZmluZSBDSFJHX09GRiAgICAgICgwKQorI2RlZmluZSBDSFJHX09OICAgICAgICgxKQorI2RlZmluZSBDSFJHX0RPTkUgICAgICgyKQorCisJdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBTSEFSUFNMX1NVU1BFTkRFRCAgICAgICAoMSA8PCAwKSAgLyogRGV2aWNlIGlzIFN1c3BlbmRlZCAqLworI2RlZmluZSBTSEFSUFNMX0FMQVJNX0FDVElWRSAgICAoMSA8PCAxKSAgLyogQWxhcm0gaXMgZm9yIGNoYXJnaW5nIGV2ZW50IChub3QgdXNlcikgKi8KKyNkZWZpbmUgU0hBUlBTTF9CTF9MSU1JVCAgICAgICAgKDEgPDwgMikgIC8qIEJhY2tsaWdodCBJbnRlbnNpdHkgTGltaXRlZCAqLworI2RlZmluZSBTSEFSUFNMX0FQTV9RVUVVRUQgICAgICAoMSA8PCAzKSAgLyogQVBNIEV2ZW50IFF1ZXVlZCAqLworI2RlZmluZSBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRyAoMSA8PCA0KSAgLyogVHJpZ2dlciB0aGUgb2ZmbGluZSBjaGFyZ2VyICovCisKKwlpbnQgZnVsbF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGNoYXJnZV9zdGFydF90aW1lOworCXN0cnVjdCBzaGFycHNsX2NoYXJnZXJfbWFjaGluZm8gKm1hY2hpbmZvOworCXN0cnVjdCBiYXR0ZXJ5X3N0YXQgYmF0dHN0YXQ7Cit9OworCitleHRlcm4gc3RydWN0IHNoYXJwc2xfcG1fc3RhdHVzIHNoYXJwc2xfcG07CitleHRlcm4gc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX2FjaW5bXTsKK2V4dGVybiBzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggc3BpdHpfYmF0dGVyeV9sZXZlbHNfbm9hY1tdOworCisjZGVmaW5lIFJFQURfR1BJT19CSVQoeCkgICAgKEdQTFIoeCkgJiBHUElPX2JpdCh4KSkKKworI2RlZmluZSBTSEFSUFNMX0xFRF9FUlJPUiAgMgorI2RlZmluZSBTSEFSUFNMX0xFRF9PTiAgICAgMQorI2RlZmluZSBTSEFSUFNMX0xFRF9PRkYgICAgMAorCisjZGVmaW5lIENIQVJHRV9PTigpICAgICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlKDEpCisjZGVmaW5lIENIQVJHRV9PRkYoKSAgICAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlKDApCisjZGVmaW5lIENIQVJHRV9MRURfT04oKSAgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlbGVkKFNIQVJQU0xfTEVEX09OKQorI2RlZmluZSBDSEFSR0VfTEVEX09GRigpICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZWxlZChTSEFSUFNMX0xFRF9PRkYpCisjZGVmaW5lIENIQVJHRV9MRURfRVJSKCkgICAgc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlbGVkKFNIQVJQU0xfTEVEX0VSUk9SKQorI2RlZmluZSBESVNDSEFSR0VfT04oKSAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZSgxKQorI2RlZmluZSBESVNDSEFSR0VfT0ZGKCkgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZSgwKQorI2RlZmluZSBTVEFUVVNfQUNfSU4gICAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19hY2luKCkKKyNkZWZpbmUgU1RBVFVTX0JBVFRfTE9DS0VEICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jaykKKyNkZWZpbmUgU1RBVFVTX0NIUkdfRlVMTCAgICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCkKKyNkZWZpbmUgU1RBVFVTX0ZBVEFMICAgICAgICBSRUFEX0dQSU9fQklUKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5ZTg3MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtMCwwICsxLDk5MiBAQAorLyoKKyAqIEJhdHRlcnkgYW5kIFBvd2VyIE1hbmFnZW1lbnQgY29kZSBmb3IgdGhlIFNoYXJwIFNMLUM3eHggYW5kIFNMLUN4eDAwCisgKiBzZXJpZXMgb2YgUERBcworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IFJpY2hhcmQgUHVyZGllCisgKgorICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IFNoYXJwIGZvciAyLjQga2VybmVscworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FwbS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NoYXJwc2wuaD4KKyNpbmNsdWRlICJzaGFycHNsLmgiCisKKy8qCisgKiBDb25zdGFudHMKKyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9USU1FX0lOVEVSVkFMICAgICAgICAobXNlY3NfdG9famlmZmllcygxKjYwKjEwMDApKSAgLyogMSBtaW4gKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfRklOSVNIX1RJTUUgICAgICAgICAgICAgKG1zZWNzX3RvX2ppZmZpZXMoMTAqNjAqMTAwMCkpIC8qIDEwIG1pbiAqLworI2RlZmluZSBTSEFSUFNMX0JBVENIS19USU1FICAgICAgICAgICAgICAgICAgICAobXNlY3NfdG9famlmZmllcygxNSoxMDAwKSkgICAgLyogMTUgc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQkFUQ0hLX1RJTUVfU1VTUEVORCAgICAgICAgICAgICg2MCoxMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBtaW4gKi8KKyNkZWZpbmUgU0hBUlBTTF9XQUlUX0NPX1RJTUUgICAgICAgICAgICAgICAgICAgMTUgIC8qIDE1IHNlYyAqLworI2RlZmluZSBTSEFSUFNMX1dBSVRfRElTQ0hBUkdFX09OICAgICAgICAgICAgICAxMDAgLyogMTAwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9URU1QICAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9WT0xUICAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9KS1ZBRCAgMTAgIC8qIDEwIG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FICAgICAgICAgICAgICAgMTUgIC8qIDE1IG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSAgICAgICAgICAgNSAgIC8qIDUgbXNlYyAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9SRVRSWV9DTlQgICAgICAgICAgICAgICAxICAgLyogZXF2LiAxMCBtaW4gKi8KKworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9WT0xUICAgICAgICAgMHg5OSAgLyogMi45ViAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9URU1QICAgICAgICAgMHhlMCAgLyogMi45ViAqLworI2RlZmluZSBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9ISUdIICAgMHg5YiAgLyogNlYgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fSktWQURfTE9XICAgIDB4MzQgIC8qIDJWICovCisjZGVmaW5lIFNIQVJQU0xfRkFUQUxfQUNJTl9WT0xUICAgICAgICAxODIgICAvKiAzLjQ1ViAqLworI2RlZmluZSBTSEFSUFNMX0ZBVEFMX05PQUNJTl9WT0xUICAgICAgMTcwICAgLyogMy40MFYgKi8KKworc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX2FjaW5bXSA9IHsKKwl7IDIxMywgMTAwfSwKKwl7IDIxMiwgIDk4fSwKKwl7IDIxMSwgIDk1fSwKKwl7IDIxMCwgIDkzfSwKKwl7IDIwOSwgIDkwfSwKKwl7IDIwOCwgIDg4fSwKKwl7IDIwNywgIDg1fSwKKwl7IDIwNiwgIDgzfSwKKwl7IDIwNSwgIDgwfSwKKwl7IDIwNCwgIDc4fSwKKwl7IDIwMywgIDc1fSwKKwl7IDIwMiwgIDczfSwKKwl7IDIwMSwgIDcwfSwKKwl7IDIwMCwgIDY4fSwKKwl7IDE5OSwgIDY1fSwKKwl7IDE5OCwgIDYzfSwKKwl7IDE5NywgIDYwfSwKKwl7IDE5NiwgIDU4fSwKKwl7IDE5NSwgIDU1fSwKKwl7IDE5NCwgIDUzfSwKKwl7IDE5MywgIDUwfSwKKwl7IDE5MiwgIDQ4fSwKKwl7IDE5MiwgIDQ1fSwKKwl7IDE5MSwgIDQzfSwKKwl7IDE5MSwgIDQwfSwKKwl7IDE5MCwgIDM4fSwKKwl7IDE5MCwgIDM1fSwKKwl7IDE4OSwgIDMzfSwKKwl7IDE4OCwgIDMwfSwKKwl7IDE4NywgIDI4fSwKKwl7IDE4NiwgIDI1fSwKKwl7IDE4NSwgIDIzfSwKKwl7IDE4NCwgIDIwfSwKKwl7IDE4MywgIDE4fSwKKwl7IDE4MiwgIDE1fSwKKwl7IDE4MSwgIDEzfSwKKwl7IDE4MCwgIDEwfSwKKwl7IDE3OSwgICA4fSwKKwl7IDE3OCwgICA1fSwKKwl7ICAgMCwgICAwfSwKK307CisKK3N0cnVjdCBiYXR0ZXJ5X3RocmVzaCAgc3BpdHpfYmF0dGVyeV9sZXZlbHNfbm9hY1tdID0geworCXsgMjEzLCAxMDB9LAorCXsgMjEyLCAgOTh9LAorCXsgMjExLCAgOTV9LAorCXsgMjEwLCAgOTN9LAorCXsgMjA5LCAgOTB9LAorCXsgMjA4LCAgODh9LAorCXsgMjA3LCAgODV9LAorCXsgMjA2LCAgODN9LAorCXsgMjA1LCAgODB9LAorCXsgMjA0LCAgNzh9LAorCXsgMjAzLCAgNzV9LAorCXsgMjAyLCAgNzN9LAorCXsgMjAxLCAgNzB9LAorCXsgMjAwLCAgNjh9LAorCXsgMTk5LCAgNjV9LAorCXsgMTk4LCAgNjN9LAorCXsgMTk3LCAgNjB9LAorCXsgMTk2LCAgNTh9LAorCXsgMTk1LCAgNTV9LAorCXsgMTk0LCAgNTN9LAorCXsgMTkzLCAgNTB9LAorCXsgMTkyLCAgNDh9LAorCXsgMTkxLCAgNDV9LAorCXsgMTkwLCAgNDN9LAorCXsgMTg5LCAgNDB9LAorCXsgMTg4LCAgMzh9LAorCXsgMTg3LCAgMzV9LAorCXsgMTg2LCAgMzN9LAorCXsgMTg1LCAgMzB9LAorCXsgMTg0LCAgMjh9LAorCXsgMTgzLCAgMjV9LAorCXsgMTgyLCAgMjN9LAorCXsgMTgxLCAgMjB9LAorCXsgMTgwLCAgMTh9LAorCXsgMTc5LCAgMTV9LAorCXsgMTc4LCAgMTN9LAorCXsgMTc3LCAgMTB9LAorCXsgMTc2LCAgIDh9LAorCXsgMTc1LCAgIDV9LAorCXsgICAwLCAgIDB9LAorfTsKKworLyogTUFYMTExMSBDb21tYW5kcyAqLworI2RlZmluZSBNQVhDVFJMX1BEMCAgICAgIDF1IDw8IDAKKyNkZWZpbmUgTUFYQ1RSTF9QRDEgICAgICAxdSA8PCAxCisjZGVmaW5lIE1BWENUUkxfU0dMICAgICAgMXUgPDwgMgorI2RlZmluZSBNQVhDVFJMX1VOSSAgICAgIDF1IDw8IDMKKyNkZWZpbmUgTUFYQ1RSTF9TRUxfU0ggICA0CisjZGVmaW5lIE1BWENUUkxfU1RSICAgICAgMXUgPDwgNworCisvKiBNQVgxMTExIENoYW5uZWwgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQkFUVF9BRCAgICA0dQorI2RlZmluZSBCQVRUX1RITSAgIDJ1CisjZGVmaW5lIEpLX1ZBRCAgICAgNnUKKworCisvKgorICogUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSh2b2lkKTsKK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfY2hlY2tfYmF0dGVyeShpbnQgbW9kZSk7CitzdGF0aWMgaW50IHNoYXJwc2xfYWNfY2hlY2sodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfZmF0YWxfY2hlY2sodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfYXZlcmFnZV92YWx1ZShpbnQgYWQpOworc3RhdGljIHZvaWQgc2hhcnBzbF9hdmVyYWdlX2NsZWFyKHZvaWQpOworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlKHZvaWQgKnByaXZhdGVfKTsKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYmF0dGVyeV90aHJlYWQodm9pZCAqcHJpdmF0ZV8pOworCisKKy8qCisgKiBWYXJpYWJsZXMKKyAqLworc3RydWN0IHNoYXJwc2xfcG1fc3RhdHVzIHNoYXJwc2xfcG07CitERUNMQVJFX1dPUksodG9nZ2xlX2NoYXJnZXIsIHNoYXJwc2xfY2hhcmdlX3RvZ2dsZSwgTlVMTCk7CitERUNMQVJFX1dPUksoc2hhcnBzbF9iYXQsIHNoYXJwc2xfYmF0dGVyeV90aHJlYWQsIE5VTEwpOworCisKK3N0YXRpYyBpbnQgZ2V0X3BlcmNlbnRhZ2UoaW50IHZvbHRhZ2UpCit7CisJaW50IGkgPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzIC0gMTsKKwlzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggKnRocmVzaDsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCXRocmVzaD1zaGFycHNsX3BtLm1hY2hpbmZvLT5iYXRfbGV2ZWxzX2FjaW47CisJZWxzZQorCQl0aHJlc2g9c2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVsc19ub2FjOworCisJd2hpbGUgKGkgPiAwICYmICh2b2x0YWdlID4gdGhyZXNoW2ldLnZvbHRhZ2UpKQorCQlpLS07CisKKwlyZXR1cm4gdGhyZXNoW2ldLnBlcmNlbnRhZ2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2FwbV9zdGF0dXMoaW50IHZvbHRhZ2UpCit7CisJaW50IGxvd190aHJlc2gsIGhpZ2hfdGhyZXNoOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikgeworCQloaWdoX3RocmVzaCA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19oaWdoX2FjaW47CisJCWxvd190aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfbG93X2FjaW47CisJfSBlbHNlIHsKKwkJaGlnaF90aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfaGlnaF9ub2FjOworCQlsb3dfdGhyZXNoID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2xvd19ub2FjOworCX0KKworCWlmICh2b2x0YWdlID49IGhpZ2hfdGhyZXNoKQorCQlyZXR1cm4gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0g7CisJaWYgKHZvbHRhZ2UgPj0gbG93X3RocmVzaCkKKwkJcmV0dXJuIEFQTV9CQVRURVJZX1NUQVRVU19MT1c7CisJcmV0dXJuIEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTDsKK30KKwordm9pZCBzaGFycHNsX2JhdHRlcnlfa2ljayh2b2lkKQoreworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIG1zZWNzX3RvX2ppZmZpZXMoMTI1KSk7Cit9CitFWFBPUlRfU1lNQk9MKHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKworCitzdGF0aWMgdm9pZCBzaGFycHNsX2JhdHRlcnlfdGhyZWFkKHZvaWQgKnByaXZhdGVfKQoreworCWludCB2b2x0YWdlLCBwZXJjZW50LCBhcG1fc3RhdHVzLCBpID0gMDsKKworCWlmICghc2hhcnBzbF9wbS5tYWNoaW5mbykKKwkJcmV0dXJuOworCisJc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgPSAoIShTVEFUVVNfQUNfSU4pID8gQVBNX0FDX09GRkxJTkUgOiBBUE1fQUNfT05MSU5FKTsKKworCS8qIENvcmdpIGNhbm5vdCBjb25maXJtIHdoZW4gYmF0dGVyeSBmdWxseSBjaGFyZ2VkIHNvIHBlcmlvZGljYWxseSBraWNrISAqLworCWlmIChtYWNoaW5lX2lzX2NvcmdpKCkgJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJCSYmIHRpbWVfYWZ0ZXIoamlmZmllcywgc2hhcnBzbF9wbS5jaGFyZ2Vfc3RhcnRfdGltZSArICBTSEFSUFNMX0NIQVJHRV9PTl9USU1FX0lOVEVSVkFMKSkKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCisJd2hpbGUoMSkgeworCQl2b2x0YWdlID0gc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCk7CisJCWlmICh2b2x0YWdlID4gMCkgYnJlYWs7CisJCWlmIChpKysgPiA1KSB7CisJCQl2b2x0YWdlID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVsc19ub2FjWzBdLnZvbHRhZ2U7CisJCQlkZXZfd2FybihzaGFycHNsX3BtLmRldiwgIldhcm5pbmc6IENhbm5vdCByZWFkIG1haW4gYmF0dGVyeSFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwl2b2x0YWdlID0gc2hhcnBzbF9hdmVyYWdlX3ZhbHVlKHZvbHRhZ2UpOworCWFwbV9zdGF0dXMgPSBnZXRfYXBtX3N0YXR1cyh2b2x0YWdlKTsKKwlwZXJjZW50ID0gZ2V0X3BlcmNlbnRhZ2Uodm9sdGFnZSk7CisKKwkvKiBBdCBsb3cgYmF0dGVyeSB2b2x0YWdlcywgdGhlIHZvbHRhZ2UgaGFzIGEgdGVuZGVuY3kgdG8gc3RhcnQKKyAgICAgICAgICAgY3JlZXBpbmcgYmFjayB1cCBzbyB3ZSB0cnkgdG8gYXZvaWQgdGhpcyBoZXJlICovCisJaWYgKChzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyA9PSBBUE1fQUNfT05MSU5FKSB8fCAoYXBtX3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfSElHSCkgfHwgIHBlcmNlbnQgPD0gc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQpIHsKKwkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3ZvbHRhZ2UgPSB2b2x0YWdlOworCQlzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID0gYXBtX3N0YXR1czsKKwkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQgPSBwZXJjZW50OworCX0KKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJCYXR0ZXJ5OiB2b2x0YWdlOiAlZCwgc3RhdHVzOiAlZCwgcGVyY2VudGFnZTogJWQsIHRpbWU6ICVkXG4iLCB2b2x0YWdlLAorCQkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cywgc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQsIGppZmZpZXMpOworCisJLyogSWYgYmF0dGVyeSBpcyBsb3cuIGxpbWl0IGJhY2tsaWdodCBpbnRlbnNpdHkgdG8gc2F2ZSBwb3dlci4gKi8KKwlpZiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzICE9IEFQTV9BQ19PTkxJTkUpCisJCQkmJiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0xPVykgfHwKKwkJCShzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTCkpKSB7CisJCWlmICghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0JMX0xJTUlUKSkgeworCQkJY29yZ2libF9saW1pdF9pbnRlbnNpdHkoMSk7CisJCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfQkxfTElNSVQ7CisJCX0KKwl9IGVsc2UgaWYgKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0JMX0xJTUlUKSB7CisJCWNvcmdpYmxfbGltaXRfaW50ZW5zaXR5KDApOworCQlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0JMX0xJTUlUOworCX0KKworCS8qIFN1c3BlbmQgaWYgY3JpdGljYWwgYmF0dGVyeSBsZXZlbCAqLworCWlmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgIT0gQVBNX0FDX09OTElORSkKKwkJCSYmIChzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19DUklUSUNBTCkKKwkJCSYmICEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQVBNX1FVRVVFRCkpIHsKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0FQTV9RVUVVRUQ7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJGYXRhbCBPZmZcbiIpOworCQlhcG1fcXVldWVfZXZlbnQoQVBNX0NSSVRJQ0FMX1NVU1BFTkQpOworCX0KKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIFNIQVJQU0xfQkFUQ0hLX1RJTUUpOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV9vbih2b2lkKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUdXJuaW5nIENoYXJnZXIgT25cbiIpOworCisJc2hhcnBzbF9wbS5mdWxsX2NvdW50ID0gMDsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PTjsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRvZ2dsZV9jaGFyZ2VyLCBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2hhcnBzbF9iYXQsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX29mZih2b2lkKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUdXJuaW5nIENoYXJnZXIgT2ZmXG4iKTsKKworCUNIQVJHRV9PRkYoKTsKKwlDSEFSR0VfTEVEX09GRigpOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09GRjsKKworCXNjaGVkdWxlX3dvcmsoJnNoYXJwc2xfYmF0KTsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfZXJyb3Iodm9pZCkKK3sKKwlDSEFSR0VfTEVEX0VSUigpOworCUNIQVJHRV9PRkYoKTsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19FUlJPUjsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2VfdG9nZ2xlKHZvaWQgKnByaXZhdGVfKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJUb29nbGluZyBDaGFyZ2VyIGF0IHRpbWU6ICVseFxuIiwgamlmZmllcyk7CisKKwlpZiAoU1RBVFVTX0FDX0lOID09IDApIHsKKwkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisJCXJldHVybjsKKwl9IGVsc2UgaWYgKChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMSkgPCAwKSB8fCAoc2hhcnBzbF9hY19jaGVjaygpIDwgMCkpIHsKKwkJc2hhcnBzbF9jaGFyZ2VfZXJyb3IoKTsKKwkJcmV0dXJuOworCX0KKworCUNIQVJHRV9MRURfT04oKTsKKwlDSEFSR0VfT0ZGKCk7CisJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJQ0hBUkdFX09OKCk7CisKKwlzaGFycHNsX3BtLmNoYXJnZV9zdGFydF90aW1lID0gamlmZmllczsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9hY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJaW50IGFjaW4gPSBTVEFUVVNfQUNfSU47CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQUMgU3RhdHVzOiAlZFxuIixhY2luKTsKKworCXNoYXJwc2xfYXZlcmFnZV9jbGVhcigpOworCWlmIChhY2luICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlICE9IENIUkdfT04pKQorCQlzaGFycHNsX2NoYXJnZV9vbigpOworCWVsc2UgaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisKKwlzY2hlZHVsZV93b3JrKCZzaGFycHNsX2JhdCk7Cit9CisKKworc3RhdGljIGlycXJldHVybl90IHNoYXJwc2xfYWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCS8qIERlbGF5IHRoZSBldmVudCBzbGlnaHRseSB0byBkZWJvdW5jZSAqLworCS8qIE11c3QgYmUgYSBzbWFsbGVyIGRlbGF5IHRoYW4gdGhlIGNocmdfZnVsbF9pc3IgYmVsb3cgKi8KKwltb2RfdGltZXIoJnNoYXJwc2xfcG0uYWNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NocmdfZnVsbF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsIGF0IHRpbWU6ICVseFxuIiwgamlmZmllcyk7CisKKwlzaGFycHNsX3BtLmZ1bGxfY291bnQrKzsKKworCWlmIChTVEFUVVNfQUNfSU4gPT0gMCkgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IEFDIHJlbW92ZWQgLSBzdG9wIGNoYXJnaW5nIVxuIik7CisJCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCQlzaGFycHNsX2NoYXJnZV9vZmYoKTsKKwl9IGVsc2UgaWYgKHNoYXJwc2xfcG0uZnVsbF9jb3VudCA8IDIpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsOiBDb3VudCB0b28gbG93XG4iKTsKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCX0gZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzaGFycHNsX3BtLmNoYXJnZV9zdGFydF90aW1lICsgU0hBUlBTTF9DSEFSR0VfRklOSVNIX1RJTUUpKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbDogSW50ZXJydXB0IGdlbmVyYXRlZCB0b28gc2xvd2x5IC0gcmV0cnkuXG4iKTsKKwkJc2NoZWR1bGVfd29yaygmdG9nZ2xlX2NoYXJnZXIpOworCX0gZWxzZSB7CisJCXNoYXJwc2xfY2hhcmdlX29mZigpOworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19ET05FOworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IENoYXJnaW5nIEZpbmlzaGVkXG4iKTsKKwl9Cit9CisKKy8qIENoYXJnaW5nIEZpbmlzaGVkIEludGVycnVwdCAoTm90IHByZXNlbnQgb24gQ29yZ2kpICovCisvKiBDYW4gdHJpZ2dlciBhdCB0aGUgc2FtZSB0aW1lIGFzIGFuIEFDIHN0YXVzIGNoYW5nZSBzbworICAgZGVsYXkgdW50aWwgYWZ0ZXIgdGhhdCBoYXMgYmVlbiBwcm9jZXNzZWQgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBzaGFycHNsX2NocmdfZnVsbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaWYgKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX1NVU1BFTkRFRCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJLyogZGVsYXkgdW50aWwgYWZ0ZXIgYW55IGFjIGludGVycnVwdCAqLworCW1vZF90aW1lcigmc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hhcnBzbF9mYXRhbF9pc3IoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqZnApCit7CisJaW50IGlzX2ZhdGFsID0gMDsKKworCWlmIChTVEFUVVNfQkFUVF9MT0NLRUQgPT0gMCkgeworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeSBub3cgVW5sb2NrZWQhIFN1c3BlbmRpbmcuXG4iKTsKKwkJaXNfZmF0YWwgPSAxOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsICYmIChTVEFUVVNfRkFUQUwgPT0gMCkpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIEJhdHQgRXJyb3IhIFN1c3BlbmRpbmcuXG4iKTsKKwkJaXNfZmF0YWwgPSAxOworCX0KKworCWlmICghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0FQTV9RVUVVRUQpICYmIGlzX2ZhdGFsKSB7CisJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9BUE1fUVVFVUVEOworCQlhcG1fcXVldWVfZXZlbnQoQVBNX0NSSVRJQ0FMX1NVU1BFTkQpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoKKyAqIE1haW50YWluIGFuIGF2ZXJhZ2Ugb2YgdGhlIGxhc3QgMTAgcmVhZGluZ3MKKyAqLworI2RlZmluZSBTSEFSUFNMX0NOVl9WQUxVRV9OVU0gICAgMTAKK3N0YXRpYyBpbnQgc2hhcnBzbF9hZF9pbmRleDsKKworc3RhdGljIHZvaWQgc2hhcnBzbF9hdmVyYWdlX2NsZWFyKHZvaWQpCit7CisJc2hhcnBzbF9hZF9pbmRleCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9hdmVyYWdlX3ZhbHVlKGludCBhZCkKK3sKKwlpbnQgaSwgYWRfdmFsID0gMDsKKwlzdGF0aWMgaW50IHNoYXJwc2xfYWRbU0hBUlBTTF9DTlZfVkFMVUVfTlVNKzFdOworCisJaWYgKHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMgIT0gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0gpIHsKKwkJc2hhcnBzbF9hZF9pbmRleCA9IDA7CisJCXJldHVybiBhZDsKKwl9CisKKwlzaGFycHNsX2FkW3NoYXJwc2xfYWRfaW5kZXhdID0gYWQ7CisJc2hhcnBzbF9hZF9pbmRleCsrOworCWlmIChzaGFycHNsX2FkX2luZGV4ID49IFNIQVJQU0xfQ05WX1ZBTFVFX05VTSkgeworCQlmb3IgKGk9MDsgaSA8IChTSEFSUFNMX0NOVl9WQUxVRV9OVU0tMSk7IGkrKykKKwkJCXNoYXJwc2xfYWRbaV0gPSBzaGFycHNsX2FkW2krMV07CisJCXNoYXJwc2xfYWRfaW5kZXggPSBTSEFSUFNMX0NOVl9WQUxVRV9OVU0gLSAxOworCX0KKwlmb3IgKGk9MDsgaSA8IHNoYXJwc2xfYWRfaW5kZXg7IGkrKykKKwkJYWRfdmFsICs9IHNoYXJwc2xfYWRbaV07CisKKwlyZXR1cm4gKGFkX3ZhbCAvIHNoYXJwc2xfYWRfaW5kZXgpOworfQorCisKKy8qCisgKiBSZWFkIE1BWDExMTEgQURDCisgKi8KK3N0YXRpYyBpbnQgcmVhZF9tYXgxMTExKGludCBjaGFubmVsKQoreworCXJldHVybiBjb3JnaV9zc3BfbWF4MTExMV9nZXQoKGNoYW5uZWwgPDwgTUFYQ1RSTF9TRUxfU0gpIHwgTUFYQ1RSTF9QRDAgfCBNQVhDVFJMX1BEMQorCQkJfCBNQVhDVFJMX1NHTCB8IE1BWENUUkxfVU5JIHwgTUFYQ1RSTF9TVFIpOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSh2b2lkKQoreworCXJldHVybiByZWFkX21heDExMTEoQkFUVF9BRCk7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX1RlbXAodm9pZCkKK3sKKwlpbnQgdGVtcDsKKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPm1lYXN1cmVfdGVtcCgxKTsKKworCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1RFTVApOworCXRlbXAgPSByZWFkX21heDExMTEoQkFUVF9USE0pOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+bWVhc3VyZV90ZW1wKDApOworCisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9yZWFkX2prdmFkKHZvaWQpCit7CisJcmV0dXJuIHJlYWRfbWF4MTExMShKS19WQUQpOworfQorCisvKgorICogVGFrZSBhbiBhcnJheSBvZiA1IGludGVnZXJzLCByZW1vdmUgdGhlIG1heGltdW0gYW5kIG1pbmltdW0gdmFsdWVzCisgKiBhbmQgcmV0dXJuIHRoZSBhdmVyYWdlLgorICovCitzdGF0aWMgaW50IGdldF9zZWxlY3RfdmFsKGludCAqdmFsKQoreworCWludCBpLCBqLCBrLCB0ZW1wLCBzdW0gPSAwOworCisJLyogRmluZCBNQVggdmFsICovCisJdGVtcCA9IHZhbFswXTsKKwlqPTA7CisJZm9yIChpPTE7IGk8NTsgaSsrKSB7CisJCWlmICh0ZW1wIDwgdmFsW2ldKSB7CisJCQl0ZW1wID0gdmFsW2ldOworCQkJaiA9IGk7CisJCX0KKwl9CisKKwkvKiBGaW5kIE1JTiB2YWwgKi8KKwl0ZW1wID0gdmFsWzRdOworCWs9NDsKKwlmb3IgKGk9MzsgaT49MDsgaS0tKSB7CisJCWlmICh0ZW1wID4gdmFsW2ldKSB7CisJCQl0ZW1wID0gdmFsW2ldOworCQkJayA9IGk7CisJCX0KKwl9CisKKwlmb3IgKGk9MDsgaTw1OyBpKyspCisJCWlmIChpICE9IGogJiYgaSAhPSBrICkKKwkJCXN1bSArPSB2YWxbaV07CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQXZlcmFnZTogJWQgZnJvbSB2YWx1ZXM6ICVkLCAlZCwgJWQsICVkLCAlZFxuIiwgc3VtLzMsIHZhbFswXSwgdmFsWzFdLCB2YWxbMl0sIHZhbFszXSwgdmFsWzRdKTsKKworCXJldHVybiAoc3VtLzMpOworfQorCisvKiAgbW9kZSAwIC0gQ2hlY2sgdGVtcGVyYXR1cmUgYW5kIHZvbHRhZ2UKKyAqICAgICAgIDEgLSBDaGVjayB0ZW1wZXJhdHVyZSBvbmx5ICovCitzdGF0aWMgaW50IHNoYXJwc2xfY2hlY2tfYmF0dGVyeShpbnQgbW9kZSkKK3sKKwlpbnQgdmFsLCBpLCBidWZmWzVdOworCisJLyogQ2hlY2sgYmF0dGVyeSB0ZW1wZXJhdHVyZSAqLworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9URU1QKTsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9UZW1wKCk7CisJfQorCisJdmFsID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVGVtcGVyYXR1cmU6ICVkXG4iLCB2YWwpOworCWlmICh2YWwgPiBTSEFSUFNMX0NIQVJHRV9PTl9URU1QKQorCQlyZXR1cm4gLTE7CisJaWYgKG1vZGUgPT0gMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBkaXNhYmxlIGNoYXJnZSwgZW5hYmxlIGRpc2NoYXJnZSAqLworCUNIQVJHRV9PRkYoKTsKKwlESVNDSEFSR0VfT04oKTsKKwltZGVsYXkoU0hBUlBTTF9XQUlUX0RJU0NIQVJHRV9PTik7CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgxKTsKKworCS8qIENoZWNrIGJhdHRlcnkgdm9sdGFnZSAqLworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQlidWZmW2ldID0gc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCk7CisJCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1ZPTFQpOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDApOworCisJRElTQ0hBUkdFX09GRigpOworCisJdmFsID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkJhdHRlcnkgVm9sdGFnZTogJWRcbiIsIHZhbCk7CisKKwlpZiAodmFsIDwgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9hY19jaGVjayh2b2lkKQoreworCWludCB0ZW1wLCBpLCBidWZmWzVdOworCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCWJ1ZmZbaV0gPSBzaGFycHNsX3JlYWRfamt2YWQoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfSktWQUQpOworCX0KKworCXRlbXAgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQUMgVm9sdGFnZTogJWRcbiIsdGVtcCk7CisKKwlpZiAoKHRlbXAgPiBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9ISUdIKSB8fCAodGVtcCA8IFNIQVJQU0xfQ0hBUkdFX09OX0pLVkFEX0xPVykpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkVycm9yOiBBQyBjaGVjayBmYWlsZWQuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNoYXJwc2xfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfU1VTUEVOREVEOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHOworCWVsc2UKKwkJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycHNsX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJLyogQ2xlYXIgdGhlIHJlc2V0IHNvdXJjZSBpbmRpY2F0b3JzIGFzIHRoZXkgYnJlYWsgdGhlIGJvb3Rsb2FkZXIgdXBvbiByZWJvb3QgKi8KKwlSQ1NSID0gMHgwZjsKKwlzaGFycHNsX2F2ZXJhZ2VfY2xlYXIoKTsKKwlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0FQTV9RVUVVRUQ7CisJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9TVVNQRU5ERUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29yZ2lfZ290b19zbGVlcCh1bnNpZ25lZCBsb25nIGFsYXJtX3RpbWUsIHVuc2lnbmVkIGludCBhbGFybV9lbmFibGUsIHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVGltZSBpczogJTA4eFxuIixSQ05SKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZSBBY3RpdmF0ZSA9ICVkXG4iLHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRyk7CisJLyogbm90IGNoYXJnaW5nIGFuZCBBQy1JTiEgKi8KKworCWlmICgoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfRE9fT0ZGTElORV9DSFJHKSAmJiAoU1RBVFVTX0FDX0lOICE9IDApKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJBY3RpdmF0aW5nIE9mZmxpbmUgQ2hhcmdlci4uLlxuIik7CisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09GRjsKKwkJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9ET19PRkZMSU5FX0NIUkc7CisJCXNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KCk7CisJfQorCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+cHJlc3VzcGVuZCgpOworCisJUEVEUiA9IDB4ZmZmZmZmZmY7IC8qIGNsZWFyIGl0ICovCisKKwlzaGFycHNsX3BtLmZsYWdzICY9IH5TSEFSUFNMX0FMQVJNX0FDVElWRTsKKwlpZiAoKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikgJiYgKChhbGFybV9lbmFibGUgJiYgKChhbGFybV90aW1lIC0gUkNOUikgPiAoU0hBUlBTTF9CQVRDSEtfVElNRV9TVVNQRU5EICsgMzApKSkgfHwgIWFsYXJtX2VuYWJsZSkpIHsKKwkJUlRTUiAmPSBSVFNSX0FMRTsKKwkJUlRBUiA9IFJDTlIgKyBTSEFSUFNMX0JBVENIS19USU1FX1NVU1BFTkQ7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2luZyBhbGFybSBhdDogJTA4eFxuIixSVEFSKTsKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0FMQVJNX0FDVElWRTsKKwl9IGVsc2UgaWYgKGFsYXJtX2VuYWJsZSkgeworCQlSVFNSICY9IFJUU1JfQUxFOworCQlSVEFSID0gYWxhcm1fdGltZTsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlVzZXIgYWxhcm0gYXQ6ICUwOHhcbiIsUlRBUik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk5vIGFsYXJtcyBzZXQuXG4iKTsKKwl9CisKKwlweGFfcG1fZW50ZXIoc3RhdGUpOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+cG9zdHN1c3BlbmQoKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDb3JnaSB3b2tlbiB1cCBmcm9tIHN1c3BlbmQ6ICUwOHhcbiIsUEVEUik7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lfZW50ZXJfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGFsYXJtX3RpbWUsIHVuc2lnbmVkIGludCBhbGFybV9lbmFibGUsIHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlpZiAoIXNoYXJwc2xfcG0ubWFjaGluZm8tPnNob3VsZF93YWtldXAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9BTEFSTV9BQ1RJVkUpICYmIGFsYXJtX2VuYWJsZSkgKQorCXsKKwkJaWYgKCEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQUxBUk1fQUNUSVZFKSkgeworCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk5vIHVzZXIgdHJpZ2dlcmVkIHdha2V1cCBldmVudHMgYW5kIG5vdCBjaGFyZ2luZy4gU3RyYW5nZS4gU3VzcGVuZC5cbiIpOworCQkJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9lbmFibGUsIHN0YXRlKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmKHNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KCkpIHsKKwkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2luZy4gU3VzcGVuZC4uLlxuIik7CisJCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlVzZXIgdHJpZ2dlcmVkIHdha2V1cCBpbiBvZmZsaW5lIGNoYXJnZXIuXG4iKTsKKwl9CisKKwlpZiAoKFNUQVRVU19CQVRUX0xPQ0tFRCA9PSAwKSB8fCAoc2hhcnBzbF9mYXRhbF9jaGVjaygpIDwgMCkgKQorCXsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkZhdGFsIGNvbmRpdGlvbi4gU3VzcGVuZC5cbiIpOworCQljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX2VuYWJsZSwgc3RhdGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb3JnaV9weGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYWxhcm1fdGltZSA9IFJUQVI7CisJdW5zaWduZWQgaW50IGFsYXJtX3N0YXR1cyA9ICgoUlRTUiAmIFJUU1JfQUxFKSAhPSAwKTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJTaGFycFNMIHN1c3BlbmRpbmcgZm9yIGZpcnN0IHRpbWUuXG4iKTsKKworCWNvcmdpX2dvdG9fc2xlZXAoYWxhcm1fdGltZSwgYWxhcm1fc3RhdHVzLCBzdGF0ZSk7CisKKwl3aGlsZSAoY29yZ2lfZW50ZXJfc3VzcGVuZChhbGFybV90aW1lLGFsYXJtX3N0YXR1cyxzdGF0ZSkpCisJCXt9CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiU2hhcnBTTCByZXN1bWluZy4uLlxuIik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qCisgKiBDaGVjayBmb3IgZmF0YWwgYmF0dGVyeSBlcnJvcnMKKyAqIEZhdGFsIHJldHVybnMgLTEKKyAqLworc3RhdGljIGludCBzaGFycHNsX2ZhdGFsX2NoZWNrKHZvaWQpCit7CisJaW50IGJ1ZmZbNV0sIHRlbXAsIGksIGFjaW47CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAic2hhcnBzbF9mYXRhbF9jaGVjayBlbnRlcmVkXG4iKTsKKworCS8qIENoZWNrIEFDLUFkYXB0ZXIgKi8KKwlhY2luID0gU1RBVFVTX0FDX0lOOworCisJaWYgKGFjaW4gJiYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikpIHsKKwkJQ0hBUkdFX09GRigpOworCQl1ZGVsYXkoMTAwKTsKKwkJRElTQ0hBUkdFX09OKCk7CS8qIGVuYWJsZSBkaXNjaGFyZ2UgKi8KKwkJbWRlbGF5KFNIQVJQU0xfV0FJVF9ESVNDSEFSR0VfT04pOworCX0KKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UxKDEpOworCisJLyogQ2hlY2sgYmF0dGVyeSA6IGNoZWNrIGluc2VydGluZyBiYXR0ZXJ5ID8gKi8KKwlmb3IgKGk9MDsgaTw1OyBpKyspIHsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSgpOworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9WT0xUKTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgwKTsKKworCWlmIChhY2luICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pKSB7CisJCXVkZWxheSgxMDApOworCQlDSEFSR0VfT04oKTsKKwkJRElTQ0hBUkdFX09GRigpOworCX0KKworCXRlbXAgPSBnZXRfc2VsZWN0X3ZhbChidWZmKTsKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAic2hhcnBzbF9mYXRhbF9jaGVjazogYWNpbjogJWQsIGRpc2NoYXJnZSB2b2x0YWdlOiAlZCwgbm8gZGlzY2hhcmdlOiAlZFxuIiwgYWNpbiwgdGVtcCwgc2hhcnBzbF9yZWFkX01haW5CYXR0ZXJ5KCkpOworCisJaWYgKChhY2luICYmICh0ZW1wIDwgU0hBUlBTTF9GQVRBTF9BQ0lOX1ZPTFQpKSB8fAorCQkJKCFhY2luICYmICh0ZW1wIDwgU0hBUlBTTF9GQVRBTF9OT0FDSU5fVk9MVCkpKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2Vycm9yKHZvaWQpCit7CisJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogRXJyb3Igb2NjdXJlZC5cbiIpOworCUNIQVJHRV9PRkYoKTsKKwlDSEFSR0VfTEVEX0VSUigpOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX0VSUk9SOworCXJldHVybiAxOworfQorCisvKgorICogQ2hhcmdpbmcgQ29udHJvbCB3aGlsZSBzdXNwZW5kZWQKKyAqIFJldHVybiAxIC0gZ28gc3RyYWlnaHQgdG8gc2xlZXAKKyAqIFJldHVybiAwIC0gc2xlZXAgb3Igd2FrZXVwIGRlcGVuZGluZyBvbiBvdGhlciBmYWN0b3JzCisgKi8KK3N0YXRpYyBpbnQgc2hhcnBzbF9vZmZfY2hhcmdlX2JhdHRlcnkodm9pZCkKK3sKKwlpbnQgdGltZTsKKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgTW9kZTogJWRcbiIsIHNoYXJwc2xfcG0uY2hhcmdlX21vZGUpOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PRkYpIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogU3RlcCAxXG4iKTsKKworCQkvKiBBQyBDaGVjayAqLworCQlpZiAoKHNoYXJwc2xfYWNfY2hlY2soKSA8IDApIHx8IChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMSkgPCAwKSkKKwkJCXJldHVybiBzaGFycHNsX29mZl9jaGFyZ2VfZXJyb3IoKTsKKworCQkvKiBTdGFydCBDaGFyZ2luZyAqLworCQlDSEFSR0VfTEVEX09OKCk7CisJCUNIQVJHRV9PRkYoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJCUNIQVJHRV9PTigpOworCisJCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09OOworCQlzaGFycHNsX3BtLmZ1bGxfY291bnQgPSAwOworCisJCXJldHVybiAxOworCX0gZWxzZSBpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSAhPSBDSFJHX09OKSB7CisJCXJldHVybiAxOworCX0KKworCWlmIChzaGFycHNsX3BtLmZ1bGxfY291bnQgPT0gMCkgeworCQlpbnQgdGltZTsKKworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBTdGVwIDJcbiIpOworCisJCWlmIChzaGFycHNsX2NoZWNrX2JhdHRlcnkoMCkgPCAwKQorCQkJcmV0dXJuIHNoYXJwc2xfb2ZmX2NoYXJnZV9lcnJvcigpOworCisJCUNIQVJHRV9PRkYoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJCUNIQVJHRV9PTigpOworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PTjsKKworCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSk7CisKKwkJdGltZSA9IFJDTlI7CisJCXdoaWxlKDEpIHsKKwkJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VyZWQgKi8KKwkJCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VyX3dha2V1cCgpICE9IDApCisJCQkJcmV0dXJuIDA7CisJCQkvKiBDaGVjayBmb3IgdGltZW91dCAqLworCQkJaWYgKChSQ05SIC0gdGltZSkgPiBTSEFSUFNMX1dBSVRfQ09fVElNRSkKKwkJCQlyZXR1cm4gMTsKKwkJCWlmIChTVEFUVVNfQ0hSR19GVUxMKSB7CisJCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogQ2hhcmdlIGZ1bGwgb2NjdXJlZC4gUmV0cnlpbmcgdG8gY2hlY2tcbiIpOworCSAgIAkJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCsrOworCQkJCUNIQVJHRV9PRkYoKTsKKwkJCQltZGVsYXkoU0hBUlBTTF9DSEFSR0VfV0FJVF9USU1FKTsKKwkJCQlDSEFSR0VfT04oKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IFN0ZXAgM1xuIik7CisKKwltZGVsYXkoU0hBUlBTTF9DSEFSR0VfQ09fQ0hFQ0tfVElNRSk7CisKKwl0aW1lID0gUkNOUjsKKwl3aGlsZSgxKSB7CisJCS8qIENoZWNrIGlmIGFueSB3YWtldXAgZXZlbnQgaGFkIG9jY3VyZWQgKi8KKwkJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZXJfd2FrZXVwKCkgIT0gMCkKKwkJCXJldHVybiAwOworCQkvKiBDaGVjayBmb3IgdGltZW91dCAqLworCQlpZiAoKFJDTlItdGltZSkgPiBTSEFSUFNMX1dBSVRfQ09fVElNRSkgeworCQkJaWYgKHNoYXJwc2xfcG0uZnVsbF9jb3VudCA+IFNIQVJQU0xfQ0hBUkdFX1JFVFJZX0NOVCkgeworCQkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IE5vdCBjaGFyZ2VkIHN1ZmZpY2llbnRseS4gUmV0cnlpbmcuXG4iKTsKKwkJCQlzaGFycHNsX3BtLmZ1bGxfY291bnQgPSAwOworCQkJfQorCQkJc2hhcnBzbF9wbS5mdWxsX2NvdW50Kys7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoU1RBVFVTX0NIUkdfRlVMTCkgeworCQkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogQ2hhcmdpbmcgY29tcGxldGUuXG4iKTsKKwkJCUNIQVJHRV9MRURfT0ZGKCk7CisJCQlDSEFSR0VfT0ZGKCk7CisJCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19ET05FOworCQkJcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHNzaXplX3QgYmF0dGVyeV9wZXJjZW50YWdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50KTsKK30KKworc3RhdGljIHNzaXplX3QgYmF0dGVyeV92b2x0YWdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF92b2x0YWdlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKGJhdHRlcnlfcGVyY2VudGFnZSwgMDQ0NCwgYmF0dGVyeV9wZXJjZW50YWdlX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGJhdHRlcnlfdm9sdGFnZSwgMDQ0NCwgYmF0dGVyeV92b2x0YWdlX3Nob3csIE5VTEwpOworCitleHRlcm4gdm9pZCAoKmFwbV9nZXRfcG93ZXJfc3RhdHVzKShzdHJ1Y3QgYXBtX3Bvd2VyX2luZm8gKik7CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYXBtX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGFwbV9wb3dlcl9pbmZvICppbmZvKQoreworCWluZm8tPmFjX2xpbmVfc3RhdHVzID0gc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXM7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19DSEFSR0lORzsKKwllbHNlCisJCWluZm8tPmJhdHRlcnlfc3RhdHVzID0gc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1czsKKworCWluZm8tPmJhdHRlcnlfZmxhZyA9ICgxIDw8IGluZm8tPmJhdHRlcnlfc3RhdHVzKTsKKwlpbmZvLT5iYXR0ZXJ5X2xpZmUgPSBzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudDsKK30KKworc3RhdGljIHN0cnVjdCBwbV9vcHMgc2hhcnBzbF9wbV9vcHMgPSB7CisJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfRklSTVdBUkUsCisJLnByZXBhcmUJPSBweGFfcG1fcHJlcGFyZSwKKwkuZW50ZXIJCT0gY29yZ2lfcHhhX3BtX2VudGVyLAorCS5maW5pc2gJCT0gcHhhX3BtX2ZpbmlzaCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoYXJwc2xfcG1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWlmICghZGV2LT5wbGF0Zm9ybV9kYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNoYXJwc2xfcG0uZGV2ID0gZGV2OworCXNoYXJwc2xfcG0ubWFjaGluZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT0ZGOworCXNoYXJwc2xfcG0uZmxhZ3MgPSAwOworCisJc2hhcnBzbF9wbS5tYWNoaW5mby0+aW5pdCgpOworCisJaW5pdF90aW1lcigmc2hhcnBzbF9wbS5hY190aW1lcik7CisJc2hhcnBzbF9wbS5hY190aW1lci5mdW5jdGlvbiA9IHNoYXJwc2xfYWNfdGltZXI7CisKKwlpbml0X3RpbWVyKCZzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lcik7CisJc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIuZnVuY3Rpb24gPSBzaGFycHNsX2NocmdfZnVsbF90aW1lcjsKKworCXB4YV9ncGlvX21vZGUoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwgfCBHUElPX0lOKTsKKwlweGFfZ3Bpb19tb2RlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayB8IEdQSU9fSU4pOworCisJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzICovCisJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksIHNoYXJwc2xfYWNfaXNyLCBTQV9JTlRFUlJVUFQsICJBQyBJbnB1dCBEZXRlY3QiLCBzaGFycHNsX2FjX2lzcikpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19hY2luKSk7CisJfQorCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksSVJRVF9CT1RIRURHRSk7CisKKwlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSwgc2hhcnBzbF9mYXRhbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkJhdHRlcnkgQ292ZXIiLCBzaGFycHNsX2ZhdGFsX2lzcikpIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSk7CisJfQorCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksSVJRVF9GQUxMSU5HKTsKKworCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSB7CisJCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSwgc2hhcnBzbF9mYXRhbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkZhdGFsIEJhdHRlcnkiLCBzaGFycHNsX2ZhdGFsX2lzcikpIHsKKwkJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpKTsKKwkJfQorCQllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSxJUlFUX0ZBTExJTkcpOworCX0KKworCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQorCXsKKwkJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIuICovCisJCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLCBzaGFycHNsX2NocmdfZnVsbF9pc3IsIFNBX0lOVEVSUlVQVCwgIkNPIiwgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyKSkgeworCQkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkNvdWxkIG5vdCBnZXQgaXJxICVkLlxuIiwgSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSk7CisJCX0KKwkJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSxJUlFUX1JJU0lORyk7CisJfQorCisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfdm9sdGFnZSk7CisKKwlhcG1fZ2V0X3Bvd2VyX3N0YXR1cyA9IHNoYXJwc2xfYXBtX2dldF9wb3dlcl9zdGF0dXM7CisKKwlwbV9zZXRfb3BzKCZzaGFycHNsX3BtX29wcyk7CisKKwltb2RfdGltZXIoJnNoYXJwc2xfcG0uYWNfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDI1MCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXBtX3NldF9vcHMoTlVMTCk7CisKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV9wZXJjZW50YWdlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYmF0dGVyeV92b2x0YWdlKTsKKworCWZyZWVfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiksIHNoYXJwc2xfYWNfaXNyKTsKKwlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spLCBzaGFycHNsX2ZhdGFsX2lzcik7CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkKKwkJZnJlZV9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCksIHNoYXJwc2xfZmF0YWxfaXNyKTsKKworCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQorCQlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpLCBzaGFycHNsX2NocmdfZnVsbF9pc3IpOworCisJZGVsX3RpbWVyX3N5bmMoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyKTsKKwlkZWxfdGltZXJfc3luYygmc2hhcnBzbF9wbS5hY190aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNoYXJwc2xfcG1fZHJpdmVyID0geworCS5uYW1lCQk9ICJzaGFycHNsLXBtIiwKKwkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUJCT0gc2hhcnBzbF9wbV9wcm9iZSwKKwkucmVtb3ZlCQk9IHNoYXJwc2xfcG1fcmVtb3ZlLAorCS5zdXNwZW5kCT0gc2hhcnBzbF9wbV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2hhcnBzbF9wbV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaGFycHNsX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzaGFycHNsX3BtX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfcG1fZXhpdCh2b2lkKQoreworIAlkcml2ZXJfdW5yZWdpc3Rlcigmc2hhcnBzbF9wbV9kcml2ZXIpOworfQorCitsYXRlX2luaXRjYWxsKHNoYXJwc2xfcG1faW5pdCk7Cittb2R1bGVfZXhpdChzaGFycHNsX3BtX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCA0ZDgyNmMwLi5hNjhiMzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMTksNiArMTksOCBAQAogICogICAyMm5kIEF1ZyAyMDAzIEluaXRpYWwgdmVyc2lvbi4KICAqICAgMjB0aCBEZWMgMjAwNCBBZGRlZCBzc3BfY29uZmlnIGZvciBjaGFuZ2luZyBwb3J0IGNvbmZpZyB3aXRob3V0CiAgKiAgICAgICAgICAgICAgICAgY2xvc2luZyB0aGUgcG9ydC4KKyAqICAgIDR0aCBBdWcgMjAwNSBBZGRlZCBvcHRpb24gdG8gZGlzYWJsZSBpcnEgaGFuZGxlciByZWdpc3RyYXRpb24gYW5kCisgKiAgICAgICAgICAgICAgICAgY2xlYW5lZCB1cCBpcnEgYW5kIGNsb2NrIGRldGVjdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zNyw2ICszOSwyNiBAQAogCiAjZGVmaW5lIFBYQV9TU1BfUE9SVFMgCTMKIAorc3RydWN0IHNzcF9pbmZvXyB7CisJaW50IGlycTsKKwl1MzIgY2xvY2s7Cit9OworCisvKgorICogU1NQIHBvcnQgY2xvY2sgYW5kIElSUSBzZXR0aW5ncworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNzcF9pbmZvXyBzc3BfaW5mb1tQWEFfU1NQX1BPUlRTXSA9IHsKKyNpZiBkZWZpbmVkIChDT05GSUdfUFhBMjd4KQorCXtJUlFfU1NQLAlDS0VOMjNfU1NQMX0sCisJe0lSUV9TU1AyLAlDS0VOM19TU1AyfSwKKwl7SVJRX1NTUDMsCUNLRU40X1NTUDN9LAorI2Vsc2UKKwl7SVJRX1NTUCwJQ0tFTjNfU1NQfSwKKwl7SVJRX05TU1AsCUNLRU45X05TU1B9LAorCXtJUlFfQVNTUCwJQ0tFTjEwX0FTU1B9LAorI2VuZGlmCit9OworCiBzdGF0aWMgREVDTEFSRV9NVVRFWChzZW0pOwogc3RhdGljIGludCB1c2VfY291bnRbUFhBX1NTUF9QT1JUU10gPSB7MCwgMCwgMH07CiAKQEAgLTIxMCw5ICsyMzIsOSBAQAogICogICAlLUVCVVNZCWlmIHRoZSByZXNvdXJjZXMgYXJlIGFscmVhZHkgaW4gdXNlCiAgKiAgICUwCQlvbiBzdWNjZXNzCiAgKi8KLWludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCkKK2ludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCwgdTMyIGluaXRfZmxhZ3MpCiB7Ci0JaW50IHJldCwgaXJxOworCWludCByZXQ7CiAKIAlpZiAocG9ydCA+IFBYQV9TU1BfUE9SVFMgfHwgcG9ydCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTIyOSw2MSArMjUxLDIwIEBACiAJCXVwKCZzZW0pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQotCXN3aXRjaCAocG9ydCkgewotCQljYXNlIDE6Ci0JCQlpcnEgPSBJUlFfU1NQOwotCQkJYnJlYWs7Ci0jaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX1NTUDI7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX1NTUDM7Ci0JCQlicmVhazsKLSNlbHNlCi0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9OU1NQOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9BU1NQOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PREVWOwotCX0KLQogCWRldi0+cG9ydCA9IHBvcnQ7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHNzcF9pbnRlcnJ1cHQsIDAsICJTU1AiLCBkZXYpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlZ2lvbjsKKwkvKiBkbyB3ZSBuZWVkIHRvIGdldCBpcnEgKi8KKwlpZiAoIShpbml0X2ZsYWdzICYgU1NQX05PX0lSUSkpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEoc3NwX2luZm9bcG9ydC0xXS5pcnEsIHNzcF9pbnRlcnJ1cHQsCisJCQkJMCwgIlNTUCIsIGRldik7CisJICAgIAlpZiAocmV0KQorCQkJZ290byBvdXRfcmVnaW9uOworCSAgICAJZGV2LT5pcnEgPSBzc3BfaW5mb1twb3J0LTFdLmlycTsKKwl9IGVsc2UKKwkJZGV2LT5pcnEgPSAwOwogCiAJLyogdHVybiBvbiBTU1AgcG9ydCBjbG9jayAqLwotCXN3aXRjaCAoZGV2LT5wb3J0KSB7Ci0jaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKLQkJY2FzZSAxOgotCQkJcHhhX3NldF9ja2VuKENLRU4yM19TU1AxLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQMiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcHhhX3NldF9ja2VuKENLRU40X1NTUDMsIDEpOwotCQkJYnJlYWs7Ci0jZWxzZQotCQljYXNlIDE6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjNfU1NQLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjlfTlNTUCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJcHhhX3NldF9ja2VuKENLRU4xMF9BU1NQLCAxKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JfQotCisJcHhhX3NldF9ja2VuKHNzcF9pbmZvW3BvcnQtMV0uY2xvY2ssIDEpOwogCXVwKCZzZW0pOwogCXJldHVybiAwOwogCkBAIC0zMDEsNDYgKzI4MiwxNyBAQAogICovCiB2b2lkIHNzcF9leGl0KHN0cnVjdCBzc3BfZGV2ICpkZXYpCiB7Ci0JaW50IGlycTsKLQogCWRvd24oJnNlbSk7CiAJU1NDUjBfUChkZXYtPnBvcnQpICY9IH5TU0NSMF9TU0U7CiAKLQkvKiBmaW5kIGlycSwgc2F2ZSBwb3dlciBhbmQgdHVybiBvZmYgU1NQIHBvcnQgY2xvY2sgKi8KLQlzd2l0Y2ggKGRldi0+cG9ydCkgewotI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCi0JCWNhc2UgMToKLQkJCWlycSA9IElSUV9TU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjIzX1NTUDEsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9TU1AyOwotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUDIsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9TU1AzOwotCQkJcHhhX3NldF9ja2VuKENLRU40X1NTUDMsIDApOwotCQkJYnJlYWs7Ci0jZWxzZQotCQljYXNlIDE6Ci0JCQlpcnEgPSBJUlFfU1NQOwotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaXJxID0gSVJRX05TU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjlfTlNTUCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJaXJxID0gSVJRX0FTU1A7Ci0JCQlweGFfc2V0X2NrZW4oQ0tFTjEwX0FTU1AsIDApOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUDogdHJpZWQgdG8gY2xvc2UgaW52YWxpZCBwb3J0XG4iKTsKLQkJCXJldHVybjsKKyAgICAJaWYgKGRldi0+cG9ydCA+IFBYQV9TU1BfUE9SVFMgfHwgZGV2LT5wb3J0ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU1NQOiB0cmllZCB0byBjbG9zZSBpbnZhbGlkIHBvcnRcbiIpOworCQlyZXR1cm47CiAJfQogCi0JZnJlZV9pcnEoaXJxLCBkZXYpOworCXB4YV9zZXRfY2tlbihzc3BfaW5mb1tkZXYtPnBvcnQtMV0uY2xvY2ssIDApOworCWlmIChkZXYtPmlycSkKKwkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKF9fUFJFRyhTU0NSMF9QKGRldi0+cG9ydCkpLCAweDJjKTsKIAl1c2VfY291bnRbZGV2LT5wb3J0IC0gMV0tLTsKIAl1cCgmc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDY5ZjE5NzAuLjllMDJiYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLmdldF9tY3RybAk9IG5lcG9uc2V0X2dldF9tY3RybCwKIH07CiAKLXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc2ExMTAwX3JlZ2lzdGVyX3VhcnRfZm5zKCZuZXBvbnNldF9wb3J0X2Zucyk7CiAKQEAgLTE3OCwyNyArMTc4LDI3IEBACiAvKgogICogTERNIHBvd2VyIG1hbmFnZW1lbnQuCiAgKi8KLXN0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbmVwb25zZXRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKgogCSAqIFNhdmUgc3RhdGUuCiAJICovCi0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQotCQlkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKQorCWlmICghZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpCisJCWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0ga21hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkqKHVuc2lnbmVkIGludCAqKWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOQ1JfMDsKKwkqKHVuc2lnbmVkIGludCAqKWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlID0gTkNSXzA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBuZXBvbnNldF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKSB7Ci0JCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlOwotCQlrZnJlZShkZXYtPnBvd2VyLnNhdmVkX3N0YXRlKTsKLQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CisJaWYgKGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlKSB7CisJCU5DUl8wID0gKih1bnNpZ25lZCBpbnQgKilkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZTsKKwkJa2ZyZWUoZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpOworCQlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMDksMTIgKzIwOSwxMyBAQAogI2RlZmluZSBuZXBvbnNldF9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibmVwb25zZXQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmVwb25zZXRfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbmVwb25zZXRfcHJvYmUsCiAJLnN1c3BlbmQJPSBuZXBvbnNldF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbmVwb25zZXRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZXBvbnNldCIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmVwb25zZXRfcmVzb3VyY2VzW10gPSB7CkBAIC0yOTMsNyArMjk0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbmVwb25zZXRfaW5pdCh2b2lkKQogewotCWRyaXZlcl9yZWdpc3RlcigmbmVwb25zZXRfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZXBvbnNldF9kZXZpY2VfZHJpdmVyKTsKIAogCS8qCiAJICogVGhlIE5lcG9uc2V0IGlzIG9ubHkgcHJlc2VudCBvbiB0aGUgQXNzYWJldCBtYWNoaW5lIHR5cGUuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCBlM2MxNGQ2Li5lODRmZGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEwMiw4ICsxMDIsOCBAQAogIyBBUk05MjVUCiBjb25maWcgQ1BVX0FSTTkyNVQKICAJYm9vbCAiU3VwcG9ydCBBUk05MjVUIHByb2Nlc3NvciIgaWYgQVJDSF9PTUFQMQotIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDE1MTAKLSAJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDE1MTAKKyAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNVhYCisgCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNVhYCiAJc2VsZWN0IENQVV8zMnY0CiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKQEAgLTI0Miw3ICsyNDIsNyBAQAogIyBBUk12NgogY29uZmlnIENQVV9WNgogCWJvb2wgIlN1cHBvcnQgQVJNIFY2IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBNQUNIX1JFQUxWSUVXX0VCCisJZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQiB8fCBBUkNIX09NQVAyCiAJc2VsZWN0IENQVV8zMnY2CiAJc2VsZWN0IENQVV9BQlJUX0VWNgogCXNlbGVjdCBDUFVfQ0FDSEVfVjYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQppbmRleCA3ZTE0NGY5Li45Y2NmMTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KK29iai15IDo9IGNvbW1vbi5vIHNyYW0ubyBzcmFtLWZuLm8gY2xvY2subyBkZXZpY2VzLm8gZG1hLm8gbXV4Lm8gZ3Bpby5vIG1jYnNwLm8gdXNiLm8KIG9iai1tIDo9CiBvYmotbiA6PQogb2JqLSAgOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggYTAyMGZlMS4uN2NlMzliOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTEsMTUgKzEsMjAgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgogICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CiAgKgorICogIE1vZGlmaWVkIGZvciBvbWFwIHNoYXJlZCBjbG9jayBmcmFtZXdvcmsgYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KQEAgLTE4LDU2MiArMjMsMjAgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KLSNpbmNsdWRlIDxhc20vYXJjaC91c2IuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK0xJU1RfSEVBRChjbG9ja3MpOwogc3RhdGljIERFQ0xBUkVfTVVURVgoY2xvY2tzX3NlbSk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2NrZndfbG9jayk7Ci1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsayk7Ci0vKiBVQVJUIGNsb2NrIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLS8qIEV4dGVybmFsIGNsb2NrIChNQ0xLICYgQkNMSykgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgbG9uZyByb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgdm9pZCBpbml0X2V4dF9jbGsoc3RydWN0IGNsayAqICBjbGspOwotLyogTVBVIHZpcnR1YWwgY2xvY2sgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50IHNlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXZvaWQgY2xrX3NldGRwbGwoX191MTYsIF9fdTE2KTsKK0RFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1wdV9yYXRlIHJhdGVfdGFibGVbXSA9IHsKLQkvKiBNUFUgTUh6LCB4dGFsIE1IeiwgZHBsbDEgTUh6LCBDS0NUTCwgRFBMTF9DVEwKLQkgKiBhcm1kaXYsIGRzcGRpdiwgZHNwbW11LCB0Y2RpdiwgcGVyZGl2LCBsY2RkaXYKLQkgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8yMTZNSFopCi0JeyAyMTYwMDAwMDAsIDEyMDAwMDAwLCAyMTYwMDAwMDAsIDB4MDUwZCwgMHgyOTEwIH0sIC8qIDEvMS8yLzIvMi84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTVNSFopCi0JeyAxOTUwMDAwMDAsIDEzMDAwMDAwLCAxOTUwMDAwMDAsIDB4MDUwZSwgMHgyNzkwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xOTJNSFopCi0JeyAxOTIwMDAwMDAsIDE5MjAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyNTEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAxOTIwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDUwZiwgMHgyODEwIH0sIC8qIDEvMS8yLzIvOC84ICovCi0JeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MDU1ZiwgMHgyODEwIH0sIC8qIDIvMi8yLzIvOC84ICovCi0JeyAgNDgwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGJhZiwgMHgyODEwIH0sIC8qIDQvOC80LzQvOC84ICovCi0JeyAgMjQwMDAwMDAsIDEyMDAwMDAwLCAxOTIwMDAwMDAsIDB4MGZmZiwgMHgyODEwIH0sIC8qIDgvOC84LzgvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xODJNSFopCi0JeyAxODIwMDAwMDAsIDEzMDAwMDAwLCAxODIwMDAwMDAsIDB4MDUwZSwgMHgyNzEwIH0sIC8qIDEvMS8yLzIvNC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNjhNSFopCi0JeyAxNjgwMDAwMDAsIDEyMDAwMDAwLCAxNjgwMDAwMDAsIDB4MDEwZiwgMHgyNzEwIH0sIC8qIDEvMS8xLzIvOC84ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xNTBNSFopCi0JeyAxNTAwMDAwMDAsIDEyMDAwMDAwLCAxNTAwMDAwMDAsIDB4MDEwYSwgMHgyY2IwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV8xMjBNSFopCi0JeyAxMjAwMDAwMDAsIDEyMDAwMDAwLCAxMjAwMDAwMDAsIDB4MDEwYSwgMHgyNTEwIH0sIC8qIDEvMS8xLzIvNC80ICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV85Nk1IWikKLQl7ICA5NjAwMDAwMCwgMTIwMDAwMDAsICA5NjAwMDAwMCwgMHgwMDA1LCAweDI0MTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzYwTUhaKQotCXsgIDYwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDAwMDUsIDB4MjI5MCB9LCAvKiAxLzEvMS8xLzIvMiAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMzBNSFopCi0JeyAgMzAwMDAwMDAsIDEyMDAwMDAwLCAgNjAwMDAwMDAsIDB4MDU1NSwgMHgyMjkwIH0sIC8qIDIvMi8yLzIvMi8yICovCi0jZW5kaWYKLQl7IDAsIDAsIDAsIDAsIDAgfSwKLX07CitzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgKmFyY2hfY2xvY2s7CiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsayk7Ci1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgX19jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKTsKLWludCBfX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKTsKLQotCi1zdGF0aWMgdm9pZCBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOwotfQotCi0KLXN0YXRpYyB2b2lkIHdhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIDE0OwotfQotCi1zdGF0aWMgdm9pZCB1YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQotewotCXVuc2lnbmVkIGludCB2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHZhbCAmIGNsay0+ZW5hYmxlX2JpdCkKLQkJY2xrLT5yYXRlID0gNDgwMDAwMDA7Ci0JZWxzZQotCQljbGstPnJhdGUgPSAxMjAwMDAwMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewotCS5uYW1lCQk9ICJja19yZWYiLAotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBja19kcGxsMSA9IHsKLQkubmFtZQkJPSAiY2tfZHBsbDEiLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDFvdXQgPSB7Ci0JLm5hbWUJCT0gImNrX2RwbGwxb3V0IiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0NLT1VUX0FSTSwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0gewotCS5uYW1lCQk9ICJhcm1fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0FSTURJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtcGVyX2NrID0gewotCS5uYW1lCQk9ICJhcm1wZXJfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1fZ3Bpb19jayA9IHsKLQkubmFtZQkJPSAiYXJtX2dwaW9fY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fR1BJT0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm14b3JfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXhvcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybXRpbV9jayA9IHsKLQkubmFtZQkJPSAiYXJtdGltX2NrIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1RJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm13ZHRfY2sgPSB7Ci0JLm5hbWUJCT0gImFybXdkdF9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKLQkucmVjYWxjCQk9ICZ3YXRjaGRvZ19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm1pbnRoX2NrMTZ4eCA9IHsKLQkubmFtZQkJPSAiYXJtaW50aF9jayIsCi0JLnBhcmVudAkJPSAmYXJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTZ4eCB0aGUgZnJlcXVlbmN5IGNhbiBiZSBkaXZpZGVkIGJ5IDIgYnkgcHJvZ3JhbW1pbmcKLQkgKiBBUk1fQ0tDVEw6QVJNX0lOVEhDS19TRUwoMTQpIHRvIDEKLQkgKgotCSAqIDE1MTAgdmVyc2lvbiBpcyBpbiBUQyBjbG9ja3MuCi0JICovCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gQVJNX0NLQ1RMLAotCS5lbmFibGVfYml0CT0gRU5fRFNQQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcG1tdV9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfRFNQTU1VRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZja2N0bF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3BwZXJfY2sgPSB7Ci0JLm5hbWUJCT0gImRzcHBlcl9jayIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMIHwgRFNQX0RPTUFJTl9DTE9DSyB8IFZJUlRVQUxfSU9fQUREUkVTUywKLQkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfUEVSRElWX09GRlNFVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS8vLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0gewotCS5uYW1lCQk9ICJkc3B4b3JfY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1hPUlBDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwdGltX2NrID0gewotCS5uYW1lCQk9ICJkc3B0aW1fY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUFRJTUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0Y19jayA9IHsKLQkubmFtZQkJPSAidGNfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE1MTAgPSB7Ci0JLm5hbWUJCT0gImFybWludGhfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLyogTm90ZTogT24gMTUxMCB0aGUgZnJlcXVlbmN5IGZvbGxvd3MgVENfQ0sKLQkgKgotCSAqIDE2eHggdmVyc2lvbiBpcyBpbiBNUFUgY2xvY2tzLgotCSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGlwYl9jayA9IHsKLQkubmFtZQkJPSAidGlicF9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX29jcGlfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fT0NQSV9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0gewotCS5uYW1lCQk9ICJ0YzFfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fVEMxX0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0YzJfY2sgPSB7Ci0JLm5hbWUJCT0gInRjMl9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDMsCi0JLmVuYWJsZV9iaXQJPSBFTl9UQzJfQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfbGNkZnJlZV9jayA9IHsKLQkubmFtZQkJPSAiZG1hX2xjZGZyZWVfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGlfY2sgPSB7Ci0JLm5hbWUJCT0gImFwaV9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0FQSUNLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsYl9jayA9IHsKLQkubmFtZQkJPSAibGJfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fTEJDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTFfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWExX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcmhlYTJfY2sgPSB7Ci0JLm5hbWUJCT0gInJoZWEyX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbGNkX2NrID0gewotCS5uYW1lCQk9ICJsY2RfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgQ0xPQ0tfSU5fT01BUDczMCB8Ci0JCQkgIFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0xDRENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDI5LAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV8xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyOSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2NrID0gewotCS5uYW1lCQk9ICJ1YXJ0Ml9jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfCBFTkFCTEVfUkVHXzMyQklUIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZzZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJnVhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKLQkubmFtZQkJPSAidWFydDNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBBTFdBWVNfRU5BQkxFRCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDMxLAkvKiBDaG9vc2VzIGJldHdlZW4gMTJNSHogYW5kIDQ4TUh6ICovCi0JLnNldF9yYXRlCT0gJnNldF91YXJ0X3JhdGUsCi0JLnJlY2FsYwkJPSAmdWFydF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0M18xNnh4ID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtvID0gewkvKiA2IE1IeiBvdXRwdXQgb24gVzRfVVNCX0NMS08gKi8KLQkubmFtZQkJPSAidXNiX2Nsa28iLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDYwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IFVMUERfQ0xPQ0tfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IFVTQl9NQ0xLX0VOX0JJVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNTEwID0gewotCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwgLyogQWN0dWFsbHkgMiBjbG9ja3MsIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE2eHggPSB7Ci0JLm5hbWUJCT0gInVzYl9oaGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS8qIE9UR19TWVNDT05fMi5PVEdfUEFERU4gPT0gMCAobm90IDE1MTAtY29tcGF0aWJsZSkgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCi0JLmVuYWJsZV9iaXQJPSA4IC8qIFVIT1NUX0VOICovLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2RjX2NrID0gewotCS5uYW1lCQk9ICJ1c2JfZGNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZV9yZWcJPSBTT0ZUX1JFUV9SRUcsCi0JLmVuYWJsZV9iaXQJPSA0LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNTEwID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJtY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBDT01fQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IENPTV9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNTEwID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYmNsa18xNnh4ID0gewotCS5uYW1lCQk9ICJiY2xrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBTV0RfQ0xLX0RJVl9DVFJMX1NFTCwKLQkuZW5hYmxlX2JpdAk9IFNXRF9VTFBEX1BMTF9DTEtfUkVRLAotCS5zZXRfcmF0ZQk9ICZzZXRfZXh0X2Nsa19yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX2V4dF9jbGtfcmF0ZSwKLQkuaW5pdAkJPSAmaW5pdF9leHRfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9jayA9IHsKLQkubmFtZQkJPSAibW1jMV9jayIsCi0JLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCi0JLnBhcmVudAkJPSAmYXJtcGVyX2NrLAotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyMywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzJfY2siLAotCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jaywKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IDIwLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7Ci0JLm5hbWUJCT0gIm1wdSIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnBhcmVudAkJPSAmYXJtX2NrLCAvKiBJcyBzbWFydGVyIGFsaWFzIGZvciAqLwotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJnNlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJnJvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICogIG9uY2hpcF9jbGtzW10gPSB7Ci0JLyogbm9uLVVMUEQgY2xvY2tzICovCi0JJmNrX3JlZiwKLQkmY2tfZHBsbDEsCi0JLyogQ0tfR0VOMSBjbG9ja3MgKi8KLQkmY2tfZHBsbDFvdXQsCi0JJmFybV9jaywKLQkmYXJtcGVyX2NrLAotCSZhcm1fZ3Bpb19jaywKLQkmYXJteG9yX2NrLAotCSZhcm10aW1fY2ssCi0JJmFybXdkdF9jaywKLQkmYXJtaW50aF9jazE1MTAsICAmYXJtaW50aF9jazE2eHgsCi0JLyogQ0tfR0VOMiBjbG9ja3MgKi8KLQkmZHNwX2NrLAotCSZkc3BtbXVfY2ssCi0JJmRzcHBlcl9jaywKLQkmZHNweG9yX2NrLAotCSZkc3B0aW1fY2ssCi0JLyogQ0tfR0VOMyBjbG9ja3MgKi8KLQkmdGNfY2ssCi0JJnRpcGJfY2ssCi0JJmwzX29jcGlfY2ssCi0JJnRjMV9jaywKLQkmdGMyX2NrLAotCSZkbWFfY2ssCi0JJmRtYV9sY2RmcmVlX2NrLAotCSZhcGlfY2ssCi0JJmxiX2NrLAotCSZyaGVhMV9jaywKLQkmcmhlYTJfY2ssCi0JJmxjZF9jaywKLQkvKiBVTFBEIGNsb2NrcyAqLwotCSZ1YXJ0MV8xNTEwLAotCSZ1YXJ0MV8xNnh4LAotCSZ1YXJ0Ml9jaywKLQkmdWFydDNfMTUxMCwKLQkmdWFydDNfMTZ4eCwKLQkmdXNiX2Nsa28sCi0JJnVzYl9oaGNfY2sxNTEwLCAmdXNiX2hoY19jazE2eHgsCi0JJnVzYl9kY19jaywKLQkmbWNsa18xNTEwLCAgJm1jbGtfMTZ4eCwKLQkmYmNsa18xNTEwLCAgJmJjbGtfMTZ4eCwKLQkmbW1jMV9jaywKLQkmbW1jMl9jaywKLQkvKiBWaXJ0dWFsIGNsb2NrcyAqLwotCSZ2aXJ0dWFsX2NrX21wdSwKLX07Ci0KLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3N0cnVjdCBjbGsgKiBjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7CiAJc3RydWN0IGNsayAqcCwgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CiAKQEAgLTU5MCw2ICs1Myw4OSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAoraW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGNsay0+ZW5hYmxlKQorCQlyZXQgPSBjbGstPmVuYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19lbmFibGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19lbmFibGUoY2xrKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGVuYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmRpc2FibGUpCisJCWNsay0+ZGlzYWJsZShjbGspOworCWVsc2UgaWYgKGFyY2hfY2xvY2stPmNsa19kaXNhYmxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZShjbGspOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZGlzYWJsZSBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCitpbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3VzZSkKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3VzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKK3ZvaWQgY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfdW51c2UpCisJCWFyY2hfY2xvY2stPmNsa191bnVzZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCitpbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnVzZWNvdW50OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF91c2Vjb3VudCk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbGstPnJhdGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCiB2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNTk4LDUyNiArMTQ0LDEwOSBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKIAotCi1pbnQgX19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfX3UxNiByZWd2YWwxNjsKLQlfX3UzMiByZWd2YWwzMjsKLQotCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCi0JCXJldHVybiAwOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKLQkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXZvaWQgX19jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX191MTYgcmVndmFsMTY7Ci0JX191MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5lbmFibGVfcmVnID09IDApCi0JCXJldHVybjsKLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JfQotCi0JaWYgKGNsay0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDE2ID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKLQl9Ci19Ci0KLQotdm9pZCBfX2Nsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0JCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQotCQkJX19jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCX0KLX0KLQotCi1pbnQgX19jbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gMDsKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLQkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpCi0JCQlyZXQgPSBfX2Nsa191c2UoY2xrLT5wYXJlbnQpOwotCi0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCWNsay0+dXNlY291bnQtLTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQlyZXQgPSBfX2Nsa19lbmFibGUoY2xrKTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApICYmIGNsay0+cGFyZW50KSB7Ci0JCQlfX2Nsa191bnVzZShjbGstPnBhcmVudCk7Ci0JCQljbGstPnVzZWNvdW50LS07Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLWludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gX19jbGtfZW5hYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2VuYWJsZSk7Ci0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa19kaXNhYmxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKLQotCi1pbnQgY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2Nsa191c2UoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChjbGtfdXNlKTsKLQotCi12b2lkIGNsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQlfX2Nsa191bnVzZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOwotCi0KLWludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsaykKLXsKLSAgICAgICAgcmV0dXJuIGNsay0+dXNlY291bnQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfdXNlY291bnQpOwotCi0KLXVuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5yYXRlOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotCi0KLXN0YXRpYyBfX3UxNiB2ZXJpZnlfY2tjdGxfdmFsdWUoX191MTYgbmV3dmFsKQotewotCS8qIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0Ci0JICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgotCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKLQkgKiBBUk1fQ0sgPj0gVENfQ0sKLQkgKiBEU1BfQ0sgPj0gVENfQ0sKLQkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKLQkgKgotCSAqIEluIGFkZGl0aW9uIGZvbGxvd2luZyBydWxlcyBhcmUgZW5mb3JjZWQ6Ci0JICogTENEX0NLIDw9IFRDX0NLCi0JICogQVJNUEVSX0NLIDw9IFRDX0NLCi0JICoKLQkgKiBIb3dldmVyLCBtYXhpbXVtIGZyZXF1ZW5jaWVzIGFyZSBub3QgY2hlY2tlZCBmb3IhCi0JICovCi0JX191OCBwZXJfZXhwOwotCV9fdTggbGNkX2V4cDsKLQlfX3U4IGFybV9leHA7Ci0JX191OCBkc3BfZXhwOwotCV9fdTggdGNfZXhwOwotCV9fdTggZHNwbW11X2V4cDsKLQotCXBlcl9leHAgPSAobmV3dmFsID4+IENLQ1RMX1BFUkRJVl9PRkZTRVQpICYgMzsKLQlsY2RfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9MQ0RESVZfT0ZGU0VUKSAmIDM7Ci0JYXJtX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfQVJNRElWX09GRlNFVCkgJiAzOwotCWRzcF9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUERJVl9PRkZTRVQpICYgMzsKLQl0Y19leHAgPSAobmV3dmFsID4+IENLQ1RMX1RDRElWX09GRlNFVCkgJiAzOwotCWRzcG1tdV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQpICYgMzsKLQotCWlmIChkc3BtbXVfZXhwIDwgZHNwX2V4cCkKLQkJZHNwbW11X2V4cCA9IGRzcF9leHA7Ci0JaWYgKGRzcG1tdV9leHAgPiBkc3BfZXhwKzEpCi0JCWRzcG1tdV9leHAgPSBkc3BfZXhwKzE7Ci0JaWYgKHRjX2V4cCA8IGFybV9leHApCi0JCXRjX2V4cCA9IGFybV9leHA7Ci0JaWYgKHRjX2V4cCA8IGRzcG1tdV9leHApCi0JCXRjX2V4cCA9IGRzcG1tdV9leHA7Ci0JaWYgKHRjX2V4cCA+IGxjZF9leHApCi0JCWxjZF9leHAgPSB0Y19leHA7Ci0JaWYgKHRjX2V4cCA+IHBlcl9leHApCi0JCXBlcl9leHAgPSB0Y19leHA7Ci0KLQluZXd2YWwgJj0gMHhmMDAwOwotCW5ld3ZhbCB8PSBwZXJfZXhwIDw8IENLQ1RMX1BFUkRJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGxjZF9leHAgPDwgQ0tDVExfTENERElWX09GRlNFVDsKLQluZXd2YWwgfD0gYXJtX2V4cCA8PCBDS0NUTF9BUk1ESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSBkc3BfZXhwIDw8IENLQ1RMX0RTUERJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IHRjX2V4cCA8PCBDS0NUTF9UQ0RJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGRzcG1tdV9leHAgPDwgQ0tDVExfRFNQTU1VRElWX09GRlNFVDsKLQotCXJldHVybiBuZXd2YWw7Ci19Ci0KLQotc3RhdGljIGludCBjYWxjX2Rzb3JfZXhwKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIE5vdGU6IElmIHRhcmdldCBmcmVxdWVuY3kgaXMgdG9vIGxvdywgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiA0LAotCSAqIHdoaWNoIGlzIGludmFsaWQgdmFsdWUuIENhbGxlciBtdXN0IGNoZWNrIGZvciB0aGlzIHZhbHVlIGFuZCBhY3QKLQkgKiBhY2NvcmRpbmdseS4KLQkgKgotCSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgZm9yIGZvbGxvd2luZyBsaW1pdGF0aW9ucyBzZXQKLQkgKiBieSB0aGUgaGFyZHdhcmUgKGFsbCBjb25kaXRpb25zIG11c3QgYmUgdHJ1ZSk6Ci0JICogRFNQTU1VX0NLID09IERTUF9DSyAgb3IgIERTUE1NVV9DSyA9PSBEU1BfQ0svMgotCSAqIEFSTV9DSyA+PSBUQ19DSwotCSAqIERTUF9DSyA+PSBUQ19DSwotCSAqIERTUE1NVV9DSyA+PSBUQ19DSwotCSAqLwotCXVuc2lnbmVkIGxvbmcgcmVhbHJhdGU7Ci0Jc3RydWN0IGNsayAqICBwYXJlbnQ7Ci0JdW5zaWduZWQgIGRzb3JfZXhwOwotCi0JaWYgKHVubGlrZWx5KCEoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwYXJlbnQgPSBjbGstPnBhcmVudDsKLQlpZiAodW5saWtlbHkocGFyZW50ID09IDApKQotCQlyZXR1cm4gLUVJTzsKLQotCXJlYWxyYXRlID0gcGFyZW50LT5yYXRlOwotCWZvciAoZHNvcl9leHA9MDsgZHNvcl9leHA8NDsgZHNvcl9leHArKykgewotCQlpZiAocmVhbHJhdGUgPD0gcmF0ZSkKLQkJCWJyZWFrOwotCi0JCXJlYWxyYXRlIC89IDI7Ci0JfQotCi0JcmV0dXJuIGRzb3JfZXhwOwotfQotCi0KLXN0YXRpYyB2b2lkIGNrY3RsX3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQlpbnQgZHNvcjsKLQotCS8qIENhbGN1bGF0ZSBkaXZpc29yIGVuY29kZWQgYXMgMi1iaXQgZXhwb25lbnQgKi8KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJLyogVGhlIGNsb2NrIGNvbnRyb2wgYml0cyBhcmUgaW4gRFNQIGRvbWFpbiwKLQkJICogc28gYXBpX2NrIGlzIG5lZWRlZCBmb3IgYWNjZXNzLgotCQkgKiBOb3RlIHRoYXQgRFNQX0NLQ1RMIHZpcnQgYWRkciA9IHBoeXMgYWRkciwgc28KLQkJICogd2UgbXVzdCB1c2UgX19yYXdfcmVhZHcoKSBpbnN0ZWFkIG9mIG9tYXBfcmVhZHcoKS4KLQkJICovCi0JCV9fY2xrX3VzZSgmYXBpX2NrKTsKLQkJZHNvciA9IDEgPDwgKDMgJiAoX19yYXdfcmVhZHcoRFNQX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JCV9fY2xrX3VudXNlKCZhcGlfY2spOwotCX0gZWxzZSB7Ci0JCWRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7Ci0JfQotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yKSkKLQkJcmV0dXJuOyAvKiBObyBjaGFuZ2UsIHF1aWNrIGV4aXQgKi8KLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7Ci0KLQlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT3B0aW9uYWwgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gYXNtL2hhcmR3YXJlL2Nsb2NrLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIGxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50IGRzb3JfZXhwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbG9uZyByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQotCQlyZXR1cm4gY2xrLT5yYXRlOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3JvdW5kX3JhdGUpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IDM7Ci0JCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQl9Ci0KLQlpZihjbGstPnJvdW5kX3JhdGUgIT0gMCkKLQkJcmV0dXJuIGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOwotCi0JcmV0dXJuIGNsay0+cmF0ZTsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CiAKLQotc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspCi17Ci0Jc3RydWN0IGNsayAqKiAgY2xrcDsKLQotCWZvciAoY2xrcCA9IG9uY2hpcF9jbGtzOyBjbGtwIDwgb25jaGlwX2Nsa3MrQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7IGNsa3ArKykgewotCQlpZiAobGlrZWx5KCgqY2xrcCktPnBhcmVudCAhPSBjbGspKSBjb250aW51ZTsKLQkJaWYgKGxpa2VseSgoKmNsa3ApLT5yZWNhbGMpKQotCQkJKCpjbGtwKS0+cmVjYWxjKCpjbGtwKTsKLQl9Ci19Ci0KLQotc3RhdGljIGludCBzZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSA8PSByYXRlIGFuZCBzd2l0Y2ggdG8gaXQgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCi0JaWYgKGNsayAhPSAmdmlydHVhbF9ja19tcHUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7Ci0JCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBEUExMMSBjYW5ub3QgYmUgcmVwcm9ncmFtbWVkIHdpdGhvdXQgcmlza2luZyBzeXN0ZW0gY3Jhc2ggKi8KLQkJaWYgKGxpa2VseShja19kcGxsMS5yYXRlIT0wKSAmJiBwdHItPnBsbF9yYXRlICE9IGNrX2RwbGwxLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoIXB0ci0+cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIEluIG1vc3QgY2FzZXMgd2Ugc2hvdWxkIG5vdCBuZWVkIHRvIHJlcHJvZ3JhbSBEUExMLgotCSAqIFJlcHJvZ3JhbW1pbmcgdGhlIERQTEwgaXMgdHJpY2t5LCBpdCBtdXN0IGJlIGRvbmUgZnJvbSBTUkFNLgotCSAqLwotCW9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2socHRyLT5kcGxsY3RsX3ZhbCwgcHRyLT5ja2N0bF92YWwpOwotCi0JY2tfZHBsbDEucmF0ZSA9IHB0ci0+cGxsX3JhdGU7Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgbG9uZyByb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IDw9IHJhdGUgKi8KLQlzdHJ1Y3QgbXB1X3JhdGUgKiAgcHRyOwotCWxvbmcgIGhpZ2hlc3RfcmF0ZTsKLQotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhpZ2hlc3RfcmF0ZSA9IC1FSU5WQUw7Ci0KLQlmb3IgKHB0ciA9IHJhdGVfdGFibGU7IHB0ci0+cmF0ZTsgcHRyKyspIHsKLQkJaWYgKHB0ci0+eHRhbCAhPSBja19yZWYucmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+cmF0ZTsKLQotCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLwotCQlpZiAocHRyLT5yYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaGlnaGVzdF9yYXRlOwotfQotCi0KIGludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaW50ICByZXQgPSAtRUlOVkFMOwotCWludCAgZHNvcl9leHA7Ci0JX191MTYgIHJlZ3ZhbDsKLQl1bnNpZ25lZCBsb25nICBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAtRUlOVkFMOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJcmVndmFsID0gb21hcF9yZWFkdyhBUk1fQ0tDVEwpOwotCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOwotCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKLQkJcmVndmFsID0gdmVyaWZ5X2NrY3RsX3ZhbHVlKHJlZ3ZhbCk7Ci0JCW9tYXBfd3JpdGV3KHJlZ3ZhbCwgQVJNX0NLQ1RMKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSAwOwotCX0gZWxzZSBpZihjbGstPnNldF9yYXRlICE9IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCX0KLQotCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGNhbGNfZXh0X2Rzb3IodW5zaWduZWQgbG9uZyByYXRlKQoraW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQogewotCXVuc2lnbmVkIGRzb3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCS8qIE1DTEsgYW5kIEJDTEsgZGl2aXNvciBzZWxlY3Rpb24gaXMgbm90IGxpbmVhcjoKLQkgKiBmcmVxID0gOTZNSHogLyBkc29yCi0JICoKLQkgKiBSQVRJT19TRUwgcmFuZ2U6IGRzb3IgPC0+IFJBVElPX1NFTAotCSAqIDAuLjY6IChSQVRJT19TRUwrMikgPC0+IChkc29yLTIpCi0JICogNi4uNDg6ICAoOCsoUkFUSU9fU0VMLTYpKjIpIDwtPiAoKGRzb3ItOCkvMis2KQotCSAqIE1pbmltdW0gZHNvciBpcyAyIGFuZCBtYXhpbXVtIGlzIDk2LiBPZGQgZGl2aXNvcnMgc3RhcnRpbmcgZnJvbSA5Ci0JICogY2FuIG5vdCBiZSB1c2VkLgotCSAqLwotCWZvciAoZHNvciA9IDI7IGRzb3IgPCA5NjsgKytkc29yKSB7Ci0JCWlmICgoZHNvciAmIDEpICYmIGRzb3IgPiA4KQotCQkgIAljb250aW51ZTsKLQkJaWYgKHJhdGUgPj0gOTYwMDAwMDAgLyBkc29yKQotCQkJYnJlYWs7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKKwkJcmV0ID0gIGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcGFyZW50KTsKKworc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGNsayAqIHJldCA9IE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVAgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zIHNoYXJlZCBiZXR3ZWVuIG9tYXAxIGFuZCBvbWFwMgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwordW5zaWduZWQgaW50IF9faW5pdGRhdGEgbXB1cmF0ZTsKKworLyoKKyAqIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSByYXRlIHNldCBieSB0aGUgYm9vdGxvYWRlci4KKyAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB3aXRoIG1wdXJhdGU9IGNtZGxpbmUgb3B0aW9uLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2Nsa19zZXR1cChjaGFyICpzdHIpCit7CisJZ2V0X29wdGlvbigmc3RyLCAmbXB1cmF0ZSk7CisKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAxOworCisJaWYgKG1wdXJhdGUgPCAxMDAwKQorCQltcHVyYXRlICo9IDEwMDAwMDA7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoIm1wdXJhdGU9Iiwgb21hcF9jbGtfc2V0dXApOworCisvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KK3ZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7Cit9CisKKy8qIFByb3BhZ2F0ZSByYXRlIHRvIGNoaWxkcmVuICovCit2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiB0Y2xrKQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKKwkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCisJCQljb250aW51ZTsKKwkJaWYgKGxpa2VseSgodTMyKWNsa3AtPnJlY2FsYykpCisJCQljbGtwLT5yZWNhbGMoY2xrcCk7CiAJfQotCXJldHVybiBkc29yOwogfQogCi0vKiBPbmx5IG5lZWRlZCBvbiAxNTEwICovCi1zdGF0aWMgaW50IHNldF91YXJ0X3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQl2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JaWYgKHJhdGUgPT0gMTIwMDAwMDApCi0JCXZhbCAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlIGlmIChyYXRlID09IDQ4MDAwMDAwKQotCQl2YWwgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCW9tYXBfd3JpdGVsKHZhbCwgY2xrLT5lbmFibGVfcmVnKTsKLQljbGstPnJhdGUgPSByYXRlOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCWRzb3IgPSBjYWxjX2V4dF9kc29yKHJhdGUpOwotCWNsay0+cmF0ZSA9IDk2MDAwMDAwIC8gZHNvcjsKLQlpZiAoZHNvciA+IDgpCi0JCXJhdGlvX2JpdHMgPSAoKGRzb3IgLSA4KSAvIDIgKyA2KSA8PCAyOwotCWVsc2UKLQkJcmF0aW9fYml0cyA9IChkc29yIC0gMikgPDwgMjsKLQotCXJhdGlvX2JpdHMgfD0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpICYgfjB4ZmQ7Ci0Jb21hcF93cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBsb25nIHJvdW5kX2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiA5NjAwMDAwMCAvIGNhbGNfZXh0X2Rzb3IocmF0ZSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgaW5pdF9leHRfY2xrKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCXVuc2lnbmVkIGRzb3I7Ci0JX191MTYgcmF0aW9fYml0czsKLQotCS8qIERldGVybWluZSBjdXJyZW50IHJhdGUgYW5kIGVuc3VyZSBjbG9jayBpcyBiYXNlZCBvbiA5Nk1IeiBBUExMICovCi0JcmF0aW9fYml0cyA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4xOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7Ci0KLQlyYXRpb19iaXRzID0gKHJhdGlvX2JpdHMgJiAweGZjKSA+PiAyOwotCWlmIChyYXRpb19iaXRzID4gNikKLQkJZHNvciA9IChyYXRpb19iaXRzIC0gNikgKiAyICsgODsKLQllbHNlCi0JCWRzb3IgPSByYXRpb19iaXRzICsgMjsKLQotCWNsay0+IHJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7Ci19Ci0KLQogaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJZG93bigmY2xvY2tzX3NlbSk7CkBAIC0xMTI1LDYgKzI1NCw3IEBACiAJaWYgKGNsay0+aW5pdCkKIAkJY2xrLT5pbml0KGNsayk7CiAJdXAoJmNsb2Nrc19zZW0pOworCiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19yZWdpc3Rlcik7CkBAIC0xMTM3LDIwMyArMjY3LDM4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa191bnJlZ2lzdGVyKTsKIAotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotLyoKLSAqIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKLSAqIGJ1dCBsZWF2ZXMgc2VyaWFsIGNsb2NrcyBvbi4gU2VlIGFsc28gb21hcF9sYXRlX2Nsa19yZXNldCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lYXJseV9jbGtfcmVzZXQodm9pZCkKK3ZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JLy9vbWFwX3dyaXRlbCgweDMgPDwgMjksIE1PRF9DT05GX0NUUkxfMCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2RlbnlfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogfQotI2Vsc2UKLSNkZWZpbmUgb21hcF9lYXJseV9jbGtfcmVzZXQoKQl7fQotI2VuZGlmCitFWFBPUlRfU1lNQk9MKGNsa19kZW55X2lkbGUpOwogCi1pbnQgX19pbml0IGNsa19pbml0KHZvaWQpCit2b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlzdHJ1Y3QgY2xrICoqICBjbGtwOwotCWNvbnN0IHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyAqaW5mbzsKLQlpbnQgY3J5c3RhbF90eXBlID0gMDsgLyogRGVmYXVsdCAxMiBNSHogKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jb21hcF9lYXJseV9jbGtfcmVzZXQoKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKQorCQlhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfYWxsb3dfaWRsZSk7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE1MTApICYmIGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE2WFgpICYmIGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoKCgqY2xrcCktPmZsYWdzICZDTE9DS19JTl9PTUFQNzMwKSAmJiBjcHVfaXNfb21hcDczMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KK2ludCBfX2luaXQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKQoreworCWlmICghY3VzdG9tX2Nsb2NrcykgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIGN1c3RvbSBjbG9jayBmdW5jdGlvbnMgcmVnaXN0ZXJlZFxuIik7CisJCUJVRygpOwogCX0KIAotCWluZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfQ0xPQ0ssIHN0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCkgewotCQlpZiAoIWNwdV9pc19vbWFwMTUxMCgpKQotCQkJY3J5c3RhbF90eXBlID0gaW5mby0+c3lzdGVtX2Nsb2NrX3R5cGU7Ci0JfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQotCWNrX3JlZi5yYXRlID0gMTMwMDAwMDA7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQotCWlmIChjcnlzdGFsX3R5cGUgPT0gMikKLQkJY2tfcmVmLnJhdGUgPSAxOTIwMDAwMDsKLSNlbmRpZgotCi0JcHJpbnRrKCJDbG9ja3M6IEFSTV9TWVNTVDogMHglMDR4IERQTExfQ1RMOiAweCUwNHggQVJNX0NLQ1RMOiAweCUwNHhcbiIsCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX1NZU1NUKSwgb21hcF9yZWFkdyhEUExMX0NUTCksCi0JICAgICAgIG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSk7Ci0KLQkvKiBXZSB3YW50IHRvIGJlIGluIHN5bmNyb25vdXMgc2NhbGFibGUgbW9kZSAqLwotCW9tYXBfd3JpdGV3KDB4MTAwMCwgQVJNX1NZU1NUKTsKLQotI2lmZGVmIENPTkZJR19PTUFQX0NMT0NLU19TRVRfQllfQk9PVExPQURFUgotCS8qIFVzZSB2YWx1ZXMgc2V0IGJ5IGJvb3Rsb2FkZXIuIERldGVybWluZSBQTEwgcmF0ZSBhbmQgcmVjYWxjdWxhdGUKLQkgKiBkZXBlbmRlbnQgY2xvY2tzIGFzIGlmIGtlcm5lbCBoYWQgY2hhbmdlZCBQTEwgb3IgZGl2aXNvcnMuCi0JICovCi0JewotCQl1bnNpZ25lZCBwbGxfY3RsX3ZhbCA9IG9tYXBfcmVhZHcoRFBMTF9DVEwpOwotCi0JCWNrX2RwbGwxLnJhdGUgPSBja19yZWYucmF0ZTsgLyogQmFzZSB4dGFsIHJhdGUgKi8KLQkJaWYgKHBsbF9jdGxfdmFsICYgMHgxMCkgewotCQkJLyogUExMIGVuYWJsZWQsIGFwcGx5IG11bHRpcGxpZXIgYW5kIGRpdmlzb3IgKi8KLQkJCWlmIChwbGxfY3RsX3ZhbCAmIDB4ZjgwKQotCQkJCWNrX2RwbGwxLnJhdGUgKj0gKHBsbF9jdGxfdmFsICYgMHhmODApID4+IDc7Ci0JCQlja19kcGxsMS5yYXRlIC89ICgocGxsX2N0bF92YWwgJiAweDYwKSA+PiA1KSArIDE7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBQTEwgZGlzYWJsZWQsIGFwcGx5IGJ5cGFzcyBkaXZpc29yICovCi0JCQlzd2l0Y2ggKHBsbF9jdGxfdmFsICYgMHhjKSB7Ci0JCQljYXNlIDA6Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDoKLQkJCQlja19kcGxsMS5yYXRlIC89IDI7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWNrX2RwbGwxLnJhdGUgLz0gNDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwotI2Vsc2UKLQkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLwotCWlmIChzZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlN5c3RlbSBmcmVxdWVuY2llcyBub3Qgc2V0LiBDaGVjayB5b3VyIGNvbmZpZy5cbiIpOwotCQkvKiBHdWVzcyBzYW5lIHZhbHVlcyAoNjBNSHopICovCi0JCW9tYXBfd3JpdGV3KDB4MjI5MCwgRFBMTF9DVEwpOwotCQlvbWFwX3dyaXRldygweDEwMDUsIEFSTV9DS0NUTCk7Ci0JCWNrX2RwbGwxLnJhdGUgPSA2MDAwMDAwMDsKLQkJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLQl9Ci0jZW5kaWYKLQkvKiBDYWNoZSByYXRlcyBmb3IgY2xvY2tzIGNvbm5lY3RlZCB0byBja19yZWYgKG5vdCBkcGxsMSkgKi8KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfcmVmKTsKLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlICh4dGFsL0RQTEwxL01QVSk6ICIKLQkJIiVsZC4lMDFsZC8lbGQuJTAxbGQvJWxkLiUwMWxkIE1IelxuIiwKLQkgICAgICAgY2tfcmVmLnJhdGUgLyAxMDAwMDAwLCAoY2tfcmVmLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIGNrX2RwbGwxLnJhdGUgLyAxMDAwMDAwLCAoY2tfZHBsbDEucmF0ZSAvIDEwMDAwMCkgJSAxMCwKLQkgICAgICAgYXJtX2NrLnJhdGUgLyAxMDAwMDAwLCAoYXJtX2NrLnJhdGUgLyAxMDAwMDApICUgMTApOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgotCS8qIFNlbGVjdCBzbGljZXIgb3V0cHV0IGFzIE9NQVAgaW5wdXQgY2xvY2sgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVA3MzBfUENDX1VQTERfQ1RSTCkgJiB+MHgxLCBPTUFQNzMwX1BDQ19VUExEX0NUUkwpOwotI2VuZGlmCi0KLQkvKiBUdXJuIG9mZiBEU1AgYW5kIEFSTV9USU1YTy4gTWFrZSBzdXJlIEFSTV9JTlRIQ0sgaXMgbm90IGRpdmlkZWQgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KEFSTV9DS0NUTCkgJiAweDBmZmYsIEFSTV9DS0NUTCk7Ci0KLQkvKiBQdXQgRFNQL01QVUkgaW50byByZXNldCB1bnRpbCBuZWVkZWQgKi8KLQlvbWFwX3dyaXRldygwLCBBUk1fUlNUQ1QxKTsKLQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QyKTsKLQlvbWFwX3dyaXRldygweDQwMCwgQVJNX0lETEVDVDEpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gT01BUDU5MTAgRXJyYXR1bSBTWVNfRE1BXzEsIGJpdCBETUFDS19SRVEgKGJpdCA4KQotCSAqIG9mIHRoZSBBUk1fSURMRUNUMiByZWdpc3RlciBtdXN0IGJlIHNldCB0byB6ZXJvLiBUaGUgcG93ZXItb24KLQkgKiBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYml0IGlzIG9uZS4KLQkgKi8KLQlvbWFwX3dyaXRldygweDAwMDAsIEFSTV9JRExFQ1QyKTsJLyogVHVybiBMQ0QgY2xvY2sgb2ZmIGFsc28gKi8KLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfdXNlKCZhcm1wZXJfY2spOwotCWNsa191c2UoJmFybXhvcl9jayk7Ci0JY2xrX3VzZSgmYXJtdGltX2NrKTsKLQotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJY2xrX2VuYWJsZSgmYXJtX2dwaW9fY2spOworCWFyY2hfY2xvY2sgPSBjdXN0b21fY2xvY2tzOwogCiAJcmV0dXJuIDA7CiB9Ci0KLQotI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2xhdGVfY2xrX3Jlc2V0KHZvaWQpCi17Ci0JLyogVHVybiBvZmYgYWxsIHVudXNlZCBjbG9ja3MgKi8KLQlzdHJ1Y3QgY2xrICpwOwotCV9fdTMyIHJlZ3ZhbDMyOwotCi0JLyogVVNCX1JFUV9FTiB3aWxsIGJlIGRpc2FibGVkIGxhdGVyIGlmIG5lY2Vzc2FyeSAodXNiX2RjX2NrKSAqLwotCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhTT0ZUX1JFUV9SRUcpICYgKDEgPDwgNCk7Ci0Jb21hcF93cml0ZXcocmVndmFsMzIsIFNPRlRfUkVRX1JFRyk7Ci0Jb21hcF93cml0ZXcoMCwgU09GVF9SRVFfUkVHMik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHAtPnVzZWNvdW50ID4gMCB8fCAocC0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKLQkJCXAtPmVuYWJsZV9yZWcgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEFzc3VtZSBubyBEU1AgY2xvY2tzIGhhdmUgYmVlbiBhY3RpdmF0ZWQgYnkgYm9vdGxvYWRlciAqLwotCQlpZiAocC0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKQotCQkJY29udGludWU7Ci0KLQkJLyogSXMgdGhlIGNsb2NrIGFscmVhZHkgZGlzYWJsZWQ/ICovCi0JCWlmIChwLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChwLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChwLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KHAtPmVuYWJsZV9yZWcpOwotCQkJZWxzZQotCQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhwLT5lbmFibGVfcmVnKTsKLQkJfQotCi0JCWlmICgocmVndmFsMzIgJiAoMSA8PCBwLT5lbmFibGVfYml0KSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIEZJWE1FOiBUaGlzIGNsb2NrIHNlZW1zIHRvIGJlIG5lY2Vzc2FyeSBidXQgbm8tb25lCi0JCSAqIGhhcyBhc2tlZCBmb3IgaXRzIGFjdGl2YXRpb24uICovCi0JCWlmIChwID09ICZ0YzJfY2sgICAgICAgICAvLyBGSVg6IHBtLmMgKFNSQU0pLCBDQ1AsIENhbWVyYQotCQkgICAgfHwgcCA9PSAmY2tfZHBsbDFvdXQgLy8gRklYOiBTb1NTSSwgU1NSCi0JCSAgICB8fCBwID09ICZhcm1fZ3Bpb19jayAvLyBGSVg6IEdQSU8gY29kZSBmb3IgMTUxMAotCQkgICAgKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJGSVhNRTogQ2xvY2sgXCIlc1wiIHNlZW1zIHVudXNlZFxuIiwKLQkJCSAgICAgICBwLT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgcC0+bmFtZSk7Ci0JCV9fY2xrX2Rpc2FibGUocCk7Ci0JCXByaW50aygiIGRvbmVcbiIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1sYXRlX2luaXRjYWxsKG9tYXBfbGF0ZV9jbGtfcmVzZXQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4OWUxZTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjAgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgY29ycG9yYXRpb24KLSAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgotICogIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX0NMT0NLX0gKLQotc3RydWN0IG1vZHVsZTsKLQotc3RydWN0IGNsayB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlub2RlOwotCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3QgY2xrCQkqcGFyZW50OwotCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0JX19zOAkJCXVzZWNvdW50OwotCV9fdTE2CQkJZmxhZ3M7Ci0JX191MzIJCQllbmFibGVfcmVnOwotCV9fdTgJCQllbmFibGVfYml0OwotCV9fdTgJCQlyYXRlX29mZnNldDsKLQl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7Ci0JaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKLQlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwotCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7Ci19OwotCi0KLXN0cnVjdCBtcHVfcmF0ZSB7Ci0JdW5zaWduZWQgbG9uZwkJcmF0ZTsKLQl1bnNpZ25lZCBsb25nCQl4dGFsOwotCXVuc2lnbmVkIGxvbmcJCXBsbF9yYXRlOwotCV9fdTE2CQkJY2tjdGxfdmFsOwotCV9fdTE2CQkJZHBsbGN0bF92YWw7Ci19OwotCi0KLS8qIENsb2NrIGZsYWdzICovCi0jZGVmaW5lIFJBVEVfQ0tDVEwJCTEKLSNkZWZpbmUgUkFURV9GSVhFRAkJMgotI2RlZmluZSBSQVRFX1BST1BBR0FURVMJCTQKLSNkZWZpbmUgVklSVFVBTF9DTE9DSwkJOAotI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJMTYKLSNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkzMgotI2RlZmluZSBDTE9DS19JTl9PTUFQMTZYWAk2NAotI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkxMjgKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkyNTYKLSNkZWZpbmUgRFNQX0RPTUFJTl9DTE9DSwk1MTIKLSNkZWZpbmUgVklSVFVBTF9JT19BRERSRVNTCTEwMjQKLQotLyogQVJNX0NLQ1RMIGJpdCBzaGlmdHMgKi8KLSNkZWZpbmUgQ0tDVExfUEVSRElWX09GRlNFVAkwCi0jZGVmaW5lIENLQ1RMX0xDRERJVl9PRkZTRVQJMgotI2RlZmluZSBDS0NUTF9BUk1ESVZfT0ZGU0VUCTQKLSNkZWZpbmUgQ0tDVExfRFNQRElWX09GRlNFVAk2Ci0jZGVmaW5lIENLQ1RMX1RDRElWX09GRlNFVAk4Ci0jZGVmaW5lIENLQ1RMX0RTUE1NVURJVl9PRkZTRVQJMTAKLS8qI2RlZmluZSBBUk1fVElNWE8JCTEyKi8KLSNkZWZpbmUgRU5fRFNQQ0sJCTEzCi0vKiNkZWZpbmUgQVJNX0lOVEhDS19TRUwJMTQqLyAvKiBEaXZpZGUtYnktMiBmb3IgbXB1IGludGhfY2sgKi8KLS8qIERTUF9DS0NUTCBiaXQgc2hpZnRzICovCi0jZGVmaW5lIENLQ1RMX0RTUFBFUkRJVl9PRkZTRVQJMAotCi0vKiBBUk1fSURMRUNUMSBiaXQgc2hpZnRzICovCi0vKiNkZWZpbmUgSURMV0RUX0FSTQkwKi8KLS8qI2RlZmluZSBJRExYT1JQX0FSTQkxKi8KLS8qI2RlZmluZSBJRExQRVJfQVJNCTIqLwotLyojZGVmaW5lIElETExDRF9BUk0JMyovCi0vKiNkZWZpbmUgSURMTEJfQVJNCTQqLwotLyojZGVmaW5lIElETEhTQUJfQVJNCTUqLwotLyojZGVmaW5lIElETElGX0FSTQk2Ki8KLS8qI2RlZmluZSBJRExEUExMX0FSTQk3Ki8KLS8qI2RlZmluZSBJRExBUElfQVJNCTgqLwotLyojZGVmaW5lIElETFRJTV9BUk0JOSovCi0vKiNkZWZpbmUgU0VUQVJNX0lETEUJMTEqLwotCi0vKiBBUk1fSURMRUNUMiBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX1dEVENLCTAKLSNkZWZpbmUgRU5fWE9SUENLCTEKLSNkZWZpbmUgRU5fUEVSQ0sJMgotI2RlZmluZSBFTl9MQ0RDSwkzCi0jZGVmaW5lIEVOX0xCQ0sJCTQgLyogTm90IG9uIDE2MTAvMTcxMCAqLwotLyojZGVmaW5lIEVOX0hTQUJDSwk1Ki8KLSNkZWZpbmUgRU5fQVBJQ0sJNgotI2RlZmluZSBFTl9USU1DSwk3Ci0jZGVmaW5lIERNQUNLX1JFUQk4Ci0jZGVmaW5lIEVOX0dQSU9DSwk5IC8qIE5vdCBvbiAxNjEwLzE3MTAgKi8KLS8qI2RlZmluZSBFTl9MQkZSRUVDSwkxMCovCi0jZGVmaW5lIEVOX0NLT1VUX0FSTQkxMQotCi0vKiBBUk1fSURMRUNUMyBiaXQgc2hpZnRzICovCi0jZGVmaW5lIEVOX09DUElfQ0sJMAotI2RlZmluZSBFTl9UQzFfQ0sJMgotI2RlZmluZSBFTl9UQzJfQ0sJNAotCi0vKiBEU1BfSURMRUNUMiBiaXQgc2hpZnRzICgwLDEsMiBhcmUgc2FtZSBhcyBmb3IgQVJNX0lETEVDVDIpICovCi0jZGVmaW5lIEVOX0RTUFRJTUNLCTUKLQotLyogVmFyaW91cyByZWdpc3RlciBkZWZpbmVzIGZvciBjbG9jayBjb250cm9scyBzY2F0dGVyZWQgYXJvdW5kIE9NQVAgY2hpcCAqLwotI2RlZmluZSBVU0JfTUNMS19FTl9CSVQJCTQJLyogSW4gVUxQRF9DTEtDX0NUUkwgKi8KLSNkZWZpbmUgVVNCX0hPU1RfSEhDX1VIT1NUX0VOCTkJLyogSW4gTU9EX0NPTkZfQ1RSTF8wICovCi0jZGVmaW5lIFNXRF9VTFBEX1BMTF9DTEtfUkVRCTEJLyogSW4gU1dEX0NMS19ESVZfQ1RSTF9TRUwgKi8KLSNkZWZpbmUgQ09NX1VMUERfUExMX0NMS19SRVEJMQkvKiBJbiBDT01fQ0xLX0RJVl9DVFJMX1NFTCAqLwotI2RlZmluZSBTV0RfQ0xLX0RJVl9DVFJMX1NFTAkweGZmZmUwODc0Ci0jZGVmaW5lIENPTV9DTEtfRElWX0NUUkxfU0VMCTB4ZmZmZTA4NzgKLSNkZWZpbmUgU09GVF9SRVFfUkVHCQkweGZmZmUwODM0Ci0jZGVmaW5lIFNPRlRfUkVRX1JFRzIJCTB4ZmZmZTA4ODAKLQotaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOwotaW50IGNsa19pbml0KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwppbmRleCAwMmJjYzZjLi5jY2RiNDUyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2suaD4KIAogI2RlZmluZSBOT19MRU5HVEhfQ0hFQ0sgMHhmZmZmZmZmZgogCkBAIC0xMTcsMTkgKzExNyw0MyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2FkZF9zZXJpYWxfY29uc29sZSh2b2lkKQogewotCWNvbnN0IHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyAqaW5mbzsKKwljb25zdCBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgKmNvbl9pbmZvOworCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICp1YXJ0X2luZm87CisJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwlpbnQgbGluZSwgaSwgdWFydF9pZHg7CiAKLQlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAotCQkJICAgICAgIHN0cnVjdCBvbWFwX3NlcmlhbF9jb25zb2xlX2NvbmZpZyk7Ci0JaWYgKGluZm8gIT0gTlVMTCAmJiBpbmZvLT5jb25zb2xlX3VhcnQpIHsKLQkJc3RhdGljIGNoYXIgc3BlZWRbMTFdLCAqb3B0ID0gTlVMTDsKKwl1YXJ0X2luZm8gPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfVUFSVCwgc3RydWN0IG9tYXBfdWFydF9jb25maWcpOworCWNvbl9pbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1NFUklBTF9DT05TT0xFLAorCQkJCQlzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcpOworCWlmICh1YXJ0X2luZm8gPT0gTlVMTCB8fCBjb25faW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAotCQlpZiAoaW5mby0+Y29uc29sZV9zcGVlZCkgewotCQkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGluZm8tPmNvbnNvbGVfc3BlZWQpOwotCQkJb3B0ID0gc3BlZWQ7Ci0JCX0KLQkJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIGluZm8tPmNvbnNvbGVfdWFydCAtIDEsIG9wdCk7CisJaWYgKGNvbl9pbmZvLT5jb25zb2xlX3VhcnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY29uX2luZm8tPmNvbnNvbGVfc3BlZWQpIHsKKwkJc25wcmludGYoc3BlZWQsIHNpemVvZihzcGVlZCksICIldSIsIGNvbl9pbmZvLT5jb25zb2xlX3NwZWVkKTsKKwkJb3B0ID0gc3BlZWQ7CiAJfQotCXJldHVybiAwOworCisJdWFydF9pZHggPSBjb25faW5mby0+Y29uc29sZV91YXJ0IC0gMTsKKwlpZiAodWFydF9pZHggPj0gT01BUF9NQVhfTlJfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ29uc29sZTogZXh0ZXJuYWwgVUFSVCMlZC4gIgorCQkJIk5vdCBhZGRpbmcgaXQgYXMgY29uc29sZSB0aGlzIHRpbWUuXG4iLAorCQkJdWFydF9pZHggKyAxKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IHVhcnRfaWR4KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb25zb2xlOiBTZWxlY3RlZCBVQVJUIyVkIGlzICIKKwkJCSJub3QgZW5hYmxlZCBmb3IgdGhpcyBwbGF0Zm9ybVxuIiwKKwkJCXVhcnRfaWR4ICsgMSk7CisJCXJldHVybiAtMTsKKwl9CisJbGluZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IHVhcnRfaWR4OyBpKyspIHsKKwkJaWYgKHVhcnRfaW5mby0+ZW5hYmxlZF91YXJ0cyAmICgxIDw8IGkpKQorCQkJbGluZSsrOworCX0KKwlyZXR1cm4gYWRkX3ByZWZlcnJlZF9jb25zb2xlKCJ0dHlTIiwgbGluZSwgb3B0KTsKIH0KIGNvbnNvbGVfaW5pdGNhbGwob21hcF9hZGRfc2VyaWFsX2NvbnNvbGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRjY2U5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisgKgorICogQ29tbW9uIHBsYXRmb3JtIGRldmljZSBzZXR1cC9pbml0aWFsaXphdGlvbiBmb3IgT01BUDEgYW5kIE9NQVAyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisKKwordm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKyAgICAgICAgLyogTm90aGluZyAqLworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgCWRlZmluZWQoQ09ORklHX0kyQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfT01BUF9NT0RVTEUpCisKKyNkZWZpbmUJT01BUDFfSTJDX0JBU0UJCTB4ZmZmYjM4MDAKKyNkZWZpbmUgT01BUDJfSTJDX0JBU0UxCQkweDQ4MDcwMDAwCisjZGVmaW5lIE9NQVBfSTJDX1NJWkUJCTB4M2YKKyNkZWZpbmUgT01BUDFfSTJDX0lOVAkJSU5UX0kyQworI2RlZmluZSBPTUFQMl9JMkNfSU5UMQkJNTYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpMmNfcmVzb3VyY2VzMVtdID0geworCXsKKwkJLnN0YXJ0CQk9IDAsCisJCS5lbmQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gMCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisvKiBETUEgbm90IHVzZWQ7IHdvcmtzIGFyb3VuZCBlcnJhdHVtIHdyaXRpbmcgdG8gbm9uLWVtcHR5IGkyYyBmaWZvICovCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZTEgPSB7CisgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpMmNfb21hcCIsCisgICAgICAgIC5pZCAgICAgICAgICAgICA9IDEsCisgICAgICAgIC5kZXYgPSB7CisgICAgICAgICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gb21hcF9ub3BfcmVsZWFzZSwKKyAgICAgICAgfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaTJjX3Jlc291cmNlczEpLAorCS5yZXNvdXJjZQk9IGkyY19yZXNvdXJjZXMxLAorfTsKKworLyogU2VlIGFsc28gYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMgZm9yIHNlY29uZCBJMkMgb24gMjR4eCAqLworc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAyX0kyQ19CQVNFMTsKKwkJaTJjX3Jlc291cmNlczFbMF0uZW5kID0gT01BUDJfSTJDX0JBU0UxICsgT01BUF9JMkNfU0laRTsKKwkJaTJjX3Jlc291cmNlczFbMV0uc3RhcnQgPSBPTUFQMl9JMkNfSU5UMTsKKwl9IGVsc2UgeworCQlpMmNfcmVzb3VyY2VzMVswXS5zdGFydCA9IE9NQVAxX0kyQ19CQVNFOworCQlpMmNfcmVzb3VyY2VzMVswXS5lbmQgPSBPTUFQMV9JMkNfQkFTRSArIE9NQVBfSTJDX1NJWkU7CisJCWkyY19yZXNvdXJjZXMxWzFdLnN0YXJ0ID0gT01BUDFfSTJDX0lOVDsKKwl9CisKKwkvKiBGSVhNRSBkZWZpbmUgYW5kIHVzZSBhIGJvb3QgdGFnLCBpbiBjYXNlIG9mIGJvYXJkcyB0aGF0CisJICogZWl0aGVyIGRvbid0IHdpcmUgdXAgSTJDLCBvciBjaGlwcyB0aGF0IG11eCBpdCBkaWZmZXJlbnRseS4uLgorCSAqIGl0IGNhbiBpbmNsdWRlIGNsb2NraW5nIGFuZCBhZGRyZXNzIGluZm8sIG1heWJlIG1vcmUuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfY2ZnX3JlZyhNMTlfMjRYWF9JMkMxX1NDTCk7CisJCW9tYXBfY2ZnX3JlZyhMMTVfMjRYWF9JMkMxX1NEQSk7CisJfSBlbHNlIHsKKwkJb21hcF9jZmdfcmVnKEkyQ19TQ0wpOworCQlvbWFwX2NmZ19yZWcoSTJDX1NEQSk7CisJfQorCisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9pMmNfZGV2aWNlMSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKSB7fQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNkZWZpbmUJT01BUF9NTUMxX0JBU0UJCTB4NDgwOWMwMDAKKyNkZWZpbmUgT01BUF9NTUMxX0lOVAkJODMKKyNlbHNlCisjZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweGZmZmI3ODAwCisjZGVmaW5lIE9NQVBfTU1DMV9JTlQJCUlOVF9NTUMKKyNlbmRpZgorI2RlZmluZQlPTUFQX01NQzJfQkFTRQkJMHhmZmZiN2MwMAkvKiBvbWFwMTZ4eCBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfY29uZiBtbWMxX2NvbmY7CisKK3N0YXRpYyB1NjQgbW1jMV9kbWFtYXNrID0gMHhmZmZmZmZmZjsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtbWMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpLAorCQkuZW5kCQk9IElPX0FERFJFU1MoT01BUF9NTUMxX0JBU0UpICsgMHg3ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUF9NTUMxX0lOVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtbWNfb21hcF9kZXZpY2UxID0geworCS5uYW1lCQk9ICJtbWNpLW9tYXAiLAorCS5pZAkJPSAxLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCT0gJm1tYzFfZG1hbWFzaywKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbW1jMV9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtbWMxX3Jlc291cmNlcywKK307CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jMl9jb25mOworCitzdGF0aWMgdTY0IG1tYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSwKKwkJLmVuZAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMl9CQVNFKSArIDB4N2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8xNjEwX01NQzIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jX29tYXBfZGV2aWNlMiA9IHsKKwkubmFtZQkJPSAibW1jaS1vbWFwIiwKKwkuaWQJCT0gMiwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJCS5kbWFfbWFzawk9ICZtbWMyX2RtYW1hc2ssCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzJfY29uZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMyX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbW1jMl9yZXNvdXJjZXMsCit9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfbW1jKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmZpZwkqbW1jX2NvbmY7CisJY29uc3Qgc3RydWN0IG9tYXBfbW1jX2NvbmYJKm1tYzsKKworCS8qIE5PVEU6ICBhc3N1bWVzIE1NQyB3YXMgbmV2ZXIgKHdyb25nbHkpIGVuYWJsZWQgKi8KKwltbWNfY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19NTUMsIHN0cnVjdCBvbWFwX21tY19jb25maWcpOworCWlmICghbW1jX2NvbmYpCisJCXJldHVybjsKKworCS8qIGJsb2NrIDEgaXMgYWx3YXlzIGF2YWlsYWJsZSBhbmQgaGFzIGp1c3Qgb25lIHBpbm91dCBvcHRpb24gKi8KKwltbWMgPSAmbW1jX2NvbmYtPm1tY1swXTsKKwlpZiAobW1jLT5lbmFibGVkKSB7CisJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ01EKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKKwkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7CisJCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpIHsKKwkJCQlvbWFwX2NmZ19yZWcoTTE1XzE3MTBfTU1DX0NMS0kpOworCQkJCW9tYXBfY2ZnX3JlZyhQMTlfMTcxMF9NTUNfQ01ERElSKTsKKwkJCQlvbWFwX2NmZ19yZWcoUDIwXzE3MTBfTU1DX0RBVERJUjApOworCQkJfQorCQl9CisJCWlmIChtbWMtPndpcmU0KSB7CisJCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQxKTsKKwkJCQkvKiBOT1RFOiAgREFUMiBjYW4gYmUgb24gVzEwIChoZXJlKSBvciBNMTUgKi8KKwkJCQlpZiAoIW1tYy0+bm9tdXgpCisJCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMik7CisJCQkJb21hcF9jZmdfcmVnKE1NQ19EQVQzKTsKKwkJCX0KKwkJfQorCQltbWMxX2NvbmYgPSAqbW1jOworCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UxKTsKKwl9CisKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTZYWAorCS8qIGJsb2NrIDIgaXMgb24gbmV3ZXIgY2hpcHMsIGFuZCBoYXMgbWFueSBwaW5vdXQgb3B0aW9ucyAqLworCW1tYyA9ICZtbWNfY29uZi0+bW1jWzFdOworCWlmIChtbWMtPmVuYWJsZWQpIHsKKwkJaWYgKCFtbWMtPm5vbXV4KSB7CisJCQlvbWFwX2NmZ19yZWcoWThfMTYxMF9NTUMyX0NNRCk7CisJCQlvbWFwX2NmZ19yZWcoWTEwXzE2MTBfTU1DMl9DTEspOworCQkJb21hcF9jZmdfcmVnKFIxOF8xNjEwX01NQzJfQ0xLSU4pOworCQkJb21hcF9jZmdfcmVnKFc4XzE2MTBfTU1DMl9EQVQwKTsKKwkJCWlmIChtbWMtPndpcmU0KSB7CisJCQkJb21hcF9jZmdfcmVnKFY4XzE2MTBfTU1DMl9EQVQxKTsKKwkJCQlvbWFwX2NmZ19yZWcoVzE1XzE2MTBfTU1DMl9EQVQyKTsKKwkJCQlvbWFwX2NmZ19yZWcoUjEwXzE2MTBfTU1DMl9EQVQzKTsKKwkJCX0KKworCQkJLyogVGhlc2UgYXJlIG5lZWRlZCBmb3IgdGhlIGxldmVsIHNoaWZ0ZXIgKi8KKwkJCW9tYXBfY2ZnX3JlZyhWOV8xNjEwX01NQzJfQ01ERElSKTsKKwkJCW9tYXBfY2ZnX3JlZyhWNV8xNjEwX01NQzJfREFURElSMCk7CisJCQlvbWFwX2NmZ19yZWcoVzE5XzE2MTBfTU1DMl9EQVRESVIxKTsKKwkJfQorCisJCS8qIEZlZWRiYWNrIGNsb2NrIG11c3QgYmUgc2V0IG9uIE9NQVAtMTcxMCBNTUMyICovCisJCWlmIChjcHVfaXNfb21hcDE3MTAoKSkKKwkJCW9tYXBfd3JpdGVsKG9tYXBfcmVhZGwoTU9EX0NPTkZfQ1RSTF8xKSB8ICgxIDw8IDI0KSwKKwkJCQkgICAgIE1PRF9DT05GX0NUUkxfMSk7CisJCW1tYzJfY29uZiA9ICptbWM7CisJCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1tY19vbWFwX2RldmljZTIpOworCX0KKyNlbmRpZgorCXJldHVybjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21tYyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZglkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1dBVENIRE9HX01PRFVMRSkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4NDgwMjIwMDAKKyNlbHNlCisjZGVmaW5lCU9NQVBfV0RUX0JBU0UJCTB4ZmZmZWIwMDAKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHdkdF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQX1dEVF9CQVNFLAorCQkuZW5kCQk9IE9NQVBfV0RUX0JBU0UgKyAweDRmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfd2R0X2RldmljZSA9IHsKKwkubmFtZQkgICA9ICJvbWFwX3dkdCIsCisJLmlkCSAgICAgPSAtMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUod2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gd2R0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF93ZHQodm9pZCkKK3sKKwkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX3dkdF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpIHt9CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmCWRlZmluZWQoQ09ORklHX09NQVBfUk5HKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX1JOR19NT0RVTEUpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweDQ4MEEwMDAwCisjZWxzZQorI2RlZmluZQlPTUFQX1JOR19CQVNFCQkweGZmZmU1MDAwCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBybmdfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9STkdfQkFTRSwKKwkJLmVuZAkJPSBPTUFQX1JOR19CQVNFICsgMHg0ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3JuZ19kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF9ybmciLAorCS5pZAkgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJuZ19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJuZ19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfcm5nKHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9ybmdfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKSB7fQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19GQl9PTUFQX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcF9mYl9jb25mOworCitzdGF0aWMgdTY0IG9tYXBfZmJfZG1hX21hc2sgPSB+KHUzMikwOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2ZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGZiIiwKKwkuaWQJCT0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJCT0gb21hcF9ub3BfcmVsZWFzZSwKKwkJLmRtYV9tYXNrCQk9ICZvbWFwX2ZiX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSB+KHUzMikwLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmb21hcF9mYl9jb25mLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAwLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9mYih2b2lkKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX2xjZF9jb25maWcgKmNvbmY7CisKKwljb25mID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0xDRCwgc3RydWN0IG9tYXBfbGNkX2NvbmZpZyk7CisJaWYgKGNvbmYgIT0gTlVMTCkKKwkJb21hcF9mYl9jb25mID0gKmNvbmY7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2ZiX2RldmljZSk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkge30KKworI2VuZGlmCisKKy8qCisgKiBUaGlzIGdldHMgY2FsbGVkIGFmdGVyIGJvYXJkLXNwZWNpZmljIElOSVRfTUFDSElORSwgYW5kIGluaXRpYWxpemVzIG1vc3QKKyAqIG9uLWNoaXAgcGVyaXBoZXJhbHMgYWNjZXNzaWJsZSBvbiB0aGlzIGJvYXJkIChleGNlcHQgZm9yIGZldyBsaWtlIFVTQik6CisgKgorICogIChhKSBEb2VzIGFueSAic3RhbmRhcmQgY29uZmlnIiBwaW4gbXV4aW5nIG5lZWRlZC4gIEJvYXJkLXNwZWNpZmljCisgKgljb2RlIHdpbGwgaGF2ZSBtdXhlZCBHUElPIHBpbnMgYW5kIGRvbmUgIm5vbnN0YW5kYXJkIiBzZXR1cDsKKyAqCXRoYXQgY29kZSBjb3VsZCBsaXZlIGluIHRoZSBib290IGxvYWRlci4KKyAqICAoYikgUG9wdWxhdGluZyBib2FyZC1zcGVjaWZpYyBwbGF0Zm9ybV9kYXRhIHdpdGggdGhlIGRhdGEgZHJpdmVycworICoJcmVseSBvbiB0byBoYW5kbGUgd2lyaW5nIHZhcmlhdGlvbnMuCisgKiAgKGMpIENyZWF0aW5nIHBsYXRmb3JtIGRldmljZXMgYXMgbWVhbmluZ2Z1bCBvbiB0aGlzIGJvYXJkIGFuZAorICoJd2l0aCB0aGlzIGtlcm5lbCBjb25maWd1cmF0aW9uLgorICoKKyAqIENsYWltaW5nIEdQSU9zLCBhbmQgc2V0dGluZyB0aGVpciBkaXJlY3Rpb24gYW5kIGluaXRpYWwgdmFsdWVzLCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBkZXZpY2UgZHJpdmVycy4gIFNvIGlzIHJlc3BvbmRpbmcgdG8gcHJvYmUoKS4KKyAqCisgKiBCb2FyZC1zcGVjaWZpYyBrbm93bGVnZSBsaWtlIGNyZWF0aW5nIGRldmljZXMgb3IgcGluIHNldHVwIGlzIHRvIGJlCisgKiBrZXB0IG91dCBvZiBkcml2ZXJzIGFzIG11Y2ggYXMgcG9zc2libGUuICBJbiBwYXJ0aWN1bGFyLCBwaW4gc2V0dXAKKyAqIG1heSBiZSBoYW5kbGVkIGJ5IHRoZSBib290IGxvYWRlciwgYW5kIGRyaXZlcnMgc2hvdWxkIGV4cGVjdCBpdCB3aWxsCisgKiBub3JtYWxseSBoYXZlIGJlZW4gZG9uZSBieSB0aGUgdGltZSB0aGV5J3JlIHByb2JlZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2RldmljZXModm9pZCkKK3sKKwkvKiBwbGVhc2Uga2VlcCB0aGVzZSBjYWxscywgYW5kIHRoZWlyIGltcGxlbWVudGF0aW9ucyBhYm92ZSwKKwkgKiBpbiBhbHBoYWJldGljYWwgb3JkZXIgc28gdGhleSdyZSBlYXNpZXIgdG8gc29ydCB0aHJvdWdoLgorCSAqLworCW9tYXBfaW5pdF9mYigpOworCW9tYXBfaW5pdF9pMmMoKTsKKwlvbWFwX2luaXRfbW1jKCk7CisJb21hcF9pbml0X3dkdCgpOworCW9tYXBfaW5pdF9ybmcoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZGV2aWNlcyk7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCBkYTdiNjUxLi5mNWNjMjFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC02LDYgKzYsOCBAQAogICogRE1BIGNoYW5uZWwgbGlua2luZyBmb3IgMTYxMCBieSBTYW11ZWwgT3J0aXogPHNhbXVlbC5vcnRpekBub2tpYS5jb20+CiAgKiBHcmFwaGljcyBETUEgYW5kIExDRCBETUEgZ3JhcGhpY3MgdHJhbmZvcm1hdGlvbnMKICAqIGJ5IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqIE9NQVAyIHN1cHBvcnQgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIE1lcmdlZCB0byBzdXBwb3J0IGJvdGggT01BUDEgYW5kIE9NQVAyIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CiAgKiBTb21lIGZ1bmN0aW9ucyBiYXNlZCBvbiBlYXJsaWVyIGRtYS1vbWFwLmMgQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCiAgKgogICogU3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoZSBPTUFQIGludGVybmFsIERNQSBjaGFubmVscy4KQEAgLTMxLDggKzMzLDE1IEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgogCi0jZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQorI2RlZmluZSBERUJVR19QUklOVFMKKyN1bmRlZiBERUJVR19QUklOVFMKKyNpZmRlZiBERUJVR19QUklOVFMKKyNkZWZpbmUgZGVidWdfcHJpbnRrKHgpIHByaW50ayB4CisjZWxzZQorI2RlZmluZQlkZWJ1Z19wcmludGsoeCkKKyNlbmRpZgogCisjZGVmaW5lIE9NQVBfRE1BX0FDVElWRQkJMHgwMQogI2RlZmluZSBPTUFQX0RNQV9DQ1JfRU4JCSgxIDw8IDcpCiAKICNkZWZpbmUgT01BUF9GVU5DX01VWF9BUk1fQkFTRQkoMHhmZmZlMTAwMCArIDB4ZWMpCkBAIC01NSw3ICs2NCw3IEBACiBzdGF0aWMgc3BpbmxvY2tfdCBkbWFfY2hhbl9sb2NrOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtYV9sY2ggZG1hX2NoYW5bT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CiAKLWNvbnN0IHN0YXRpYyB1OCBkbWFfaXJxW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdID0geworY29uc3Qgc3RhdGljIHU4IG9tYXAxX2RtYV9pcnFbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF0gPSB7CiAJSU5UX0RNQV9DSDBfNiwgSU5UX0RNQV9DSDFfNywgSU5UX0RNQV9DSDJfOCwgSU5UX0RNQV9DSDMsCiAJSU5UX0RNQV9DSDQsIElOVF9ETUFfQ0g1LCBJTlRfMTYxMF9ETUFfQ0g2LCBJTlRfMTYxMF9ETUFfQ0g3LAogCUlOVF8xNjEwX0RNQV9DSDgsIElOVF8xNjEwX0RNQV9DSDksIElOVF8xNjEwX0RNQV9DSDEwLApAQCAtNjMsNiArNzIsMjAgQEAKIAlJTlRfMTYxMF9ETUFfQ0gxNCwgSU5UXzE2MTBfRE1BX0NIMTUsIElOVF9ETUFfTENECiB9OwogCisjZGVmaW5lIFJFVklTSVRfMjRYWCgpCQlwcmludGsoS0VSTl9FUlIgIkZJWE1FOiBubyAlcyBvbiAyNHh4XG4iLCBcCisJCQkJCQlfX0ZVTkNUSU9OX18pOworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKy8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCitpbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpCit7CisJcmV0dXJuIGVuYWJsZV8xNTEwX21vZGU7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwX2RtYV9pbl8xNTEwX21vZGUoKQkJMAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogc3RhdGljIGlubGluZSBpbnQgZ2V0X2dkbWFfZGV2KGludCByZXEpCiB7CiAJdTMyIHJlZyA9IE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UgKyAoKHJlcSAtIDEpIC8gNSkgKiA0OwpAQCAtODIsNiArMTA1LDkgQEAKIAlsIHw9IChkZXYgLSAxKSA8PCBzaGlmdDsKIAlvbWFwX3dyaXRlbChsLCByZWcpOwogfQorI2Vsc2UKKyNkZWZpbmUgc2V0X2dkbWFfZGV2KHJlcSwgZGV2KQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBjbGVhcl9sY2hfcmVncyhpbnQgbGNoKQogewpAQCAtMTIxLDM4ICsxNDcsNjIgQEAKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKGludCBsY2gsIGludCBkYXRhX3R5cGUsIGludCBlbGVtX2NvdW50LAotCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlKQorCQkJCSAgaW50IGZyYW1lX2NvdW50LCBpbnQgc3luY19tb2RlLAorCQkJCSAgaW50IGRtYV90cmlnZ2VyLCBpbnQgc3JjX29yX2RzdF9zeW5jaCkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4weDAzOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gZGF0YV90eXBlOwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKTsKLQl3ICY9IH4weDAzOwotCXcgfD0gZGF0YV90eXBlOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDEgPDwgNSk7CisJCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19GUkFNRSkKKwkJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSAxIDw8IDU7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JdyAmPSB+KDEgPDwgNSk7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0ZSQU1FKQotCQl3IHw9IDEgPDwgNTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7CisJCU9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpICY9IH4oMSA8PCAyKTsKKwkJaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQorCQkJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgfD0gMSA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSk7Ci0JdyAmPSB+KDEgPDwgMik7Ci0JaWYgKHN5bmNfbW9kZSA9PSBPTUFQX0RNQV9TWU5DX0JMT0NLKQotCQl3IHw9IDEgPDwgMjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IyKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSAmJiBkbWFfdHJpZ2dlcikgeworCQl1MzIgdmFsID0gT01BUF9ETUFfQ0NSX1JFRyhsY2gpOwogCi0Jb21hcF93cml0ZXcoZWxlbV9jb3VudCwgT01BUF9ETUFfQ0VOKGxjaCkpOwotCW9tYXBfd3JpdGV3KGZyYW1lX2NvdW50LCBPTUFQX0RNQV9DRk4obGNoKSk7CisJCWlmIChkbWFfdHJpZ2dlciA+IDYzKQorCQkJdmFsIHw9IDEgPDwgMjA7CisJCWlmIChkbWFfdHJpZ2dlciA+IDMxKQorCQkJdmFsIHw9IDEgPDwgMTk7CiAKKwkJdmFsIHw9IChkbWFfdHJpZ2dlciAmIDB4MWYpOworCisJCWlmIChzeW5jX21vZGUgJiBPTUFQX0RNQV9TWU5DX0ZSQU1FKQorCQkJdmFsIHw9IDEgPDwgNTsKKworCQlpZiAoc3luY19tb2RlICYgT01BUF9ETUFfU1lOQ19CTE9DSykKKwkJCXZhbCB8PSAxIDw8IDE4OworCisJCWlmIChzcmNfb3JfZHN0X3N5bmNoKQorCQkJdmFsIHw9IDEgPDwgMjQ7CQkvKiBzb3VyY2Ugc3luY2ggKi8KKwkJZWxzZQorCQkJdmFsICY9IH4oMSA8PCAyNCk7CS8qIGRlc3Qgc3luY2ggKi8KKworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgPSB2YWw7CisJfQorCisJT01BUF9ETUFfQ0VOX1JFRyhsY2gpID0gZWxlbV9jb3VudDsKKwlPTUFQX0RNQV9DRk5fUkVHKGxjaCkgPSBmcmFtZV9jb3VudDsKIH0KKwogdm9pZCBvbWFwX3NldF9kbWFfY29sb3JfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgbW9kZSwgdTMyIGNvbG9yKQogewogCXUxNiB3OwogCiAJQlVHX09OKG9tYXBfZG1hX2luXzE1MTBfbW9kZSgpKTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUjIobGNoKSkgJiB+MHgwMzsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisKKwl3ID0gT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgJiB+MHgwMzsKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0NPTlNUQU5UX0ZJTEw6CiAJCXcgfD0gMHgwMTsKQEAgLTE2NSw2MyArMjE1LDg0IEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUjIobGNoKSk7CisJT01BUDFfRE1BX0NDUjJfUkVHKGxjaCkgPSB3OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfTENIX0NUUkwobGNoKSkgJiB+MHgwZjsKKwl3ID0gT01BUDFfRE1BX0xDSF9DVFJMX1JFRyhsY2gpICYgfjB4MGY7CiAJLyogRGVmYXVsdCBpcyBjaGFubmVsIHR5cGUgMkQgKi8KIAlpZiAobW9kZSkgewotCQlvbWFwX3dyaXRldygodTE2KWNvbG9yLCBPTUFQX0RNQV9DT0xPUl9MKGxjaCkpOwotCQlvbWFwX3dyaXRldygodTE2KShjb2xvciA+PiAxNiksIE9NQVBfRE1BX0NPTE9SX1UobGNoKSk7CisJCU9NQVAxX0RNQV9DT0xPUl9MX1JFRyhsY2gpID0gKHUxNiljb2xvcjsKKwkJT01BUDFfRE1BX0NPTE9SX1VfUkVHKGxjaCkgPSAodTE2KShjb2xvciA+PiAxNik7CiAJCXcgfD0gMTsJCS8qIENoYW5uZWwgdHlwZSBHICovCiAJfQotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0xDSF9DVFJMKGxjaCkpOworCU9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobGNoKSA9IHc7CiB9CiAKLQorLyogTm90ZSB0aGF0IHNyY19wb3J0IGlzIG9ubHkgZm9yIG9tYXAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGludCBsY2gsIGludCBzcmNfcG9ydCwgaW50IHNyY19hbW9kZSwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0LAorCQkJICAgICBpbnQgc3JjX2VpLCBpbnQgc3JjX2ZpKQogewotCXUxNiB3OworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgxZiA8PCAyKTsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSBzcmNfcG9ydCA8PCAyOworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgMik7Ci0JdyB8PSBzcmNfcG9ydCA8PCAyOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxMik7CisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IHNyY19hbW9kZSA8PCAxMjsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3ICY9IH4oMHgwMyA8PCAxMik7Ci0JdyB8PSBzcmNfYW1vZGUgPDwgMTI7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpID0gc3JjX3N0YXJ0ID4+IDE2OworCQlPTUFQMV9ETUFfQ1NTQV9MX1JFRyhsY2gpID0gc3JjX3N0YXJ0OworCX0KIAotCW9tYXBfd3JpdGV3KHNyY19zdGFydCA+PiAxNiwgT01BUF9ETUFfQ1NTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KHNyY19zdGFydCwgT01BUF9ETUFfQ1NTQV9MKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUDJfRE1BX0NTU0FfUkVHKGxjaCkgPSBzcmNfc3RhcnQ7CisKKwlPTUFQX0RNQV9DU0VJX1JFRyhsY2gpID0gc3JjX2VpOworCU9NQVBfRE1BX0NTRklfUkVHKGxjaCkgPSBzcmNfZmk7Cit9CisKK3ZvaWQgb21hcF9zZXRfZG1hX3BhcmFtcyhpbnQgbGNoLCBzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgKiBwYXJhbXMpCit7CisJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhsY2gsIHBhcmFtcy0+ZGF0YV90eXBlLAorCQkJCSAgICAgcGFyYW1zLT5lbGVtX2NvdW50LCBwYXJhbXMtPmZyYW1lX2NvdW50LAorCQkJCSAgICAgcGFyYW1zLT5zeW5jX21vZGUsIHBhcmFtcy0+dHJpZ2dlciwKKwkJCQkgICAgIHBhcmFtcy0+c3JjX29yX2RzdF9zeW5jaCk7CisJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobGNoLCBwYXJhbXMtPnNyY19wb3J0LAorCQkJCXBhcmFtcy0+c3JjX2Ftb2RlLCBwYXJhbXMtPnNyY19zdGFydCwKKwkJCQlwYXJhbXMtPnNyY19laSwgcGFyYW1zLT5zcmNfZmkpOworCisJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKGxjaCwgcGFyYW1zLT5kc3RfcG9ydCwKKwkJCQkgcGFyYW1zLT5kc3RfYW1vZGUsIHBhcmFtcy0+ZHN0X3N0YXJ0LAorCQkJCSBwYXJhbXMtPmRzdF9laSwgcGFyYW1zLT5kc3RfZmkpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KQogewotCW9tYXBfd3JpdGV3KGVpZHgsIE9NQVBfRE1BX0NTRUkobGNoKSk7Ci0Jb21hcF93cml0ZXcoZmlkeCwgT01BUF9ETUFfQ1NGSShsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisJT01BUF9ETUFfQ1NFSV9SRUcobGNoKSA9IGVpZHg7CisJT01BUF9ETUFfQ1NGSV9SRUcobGNoKSA9IGZpZHg7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgNik7Ci0JdyB8PSBlbmFibGUgPyAoMSA8PCA2KSA6IDA7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMSA8PCA2KTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgxIDw8IDYpOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCA3KTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDB4MDMgPDwgNyk7CiAJc3dpdGNoIChidXJzdF9tb2RlKSB7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUzoKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzQ6Ci0JCXcgfD0gKDB4MDEgPDwgNyk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgNyk7CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF84OgogCQkvKiBub3Qgc3VwcG9ydGVkIGJ5IGN1cnJlbnQgaGFyZHdhcmUKQEAgLTIzMSwxNzUgKzMwMiw4NyBAQAogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCisvKiBOb3RlIHRoYXQgZGVzdF9wb3J0IGlzIG9ubHkgZm9yIE9NQVAxICovCiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhpbnQgbGNoLCBpbnQgZGVzdF9wb3J0LCBpbnQgZGVzdF9hbW9kZSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCkKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCwKKwkJCSAgICAgIGludCBkc3RfZWksIGludCBkc3RfZmkpCiB7Ci0JdTE2IHc7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigweDFmIDw8IDkpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IGRlc3RfcG9ydCA8PCA5OworCX0KIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+KDB4MWYgPDwgOSk7Ci0JdyB8PSBkZXN0X3BvcnQgPDwgOTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDB4MDMgPDwgMTQpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSBkZXN0X2Ftb2RlIDw8IDE0OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfigweDAzIDw8IDE0KTsKLQl3IHw9IGRlc3RfYW1vZGUgPDwgMTQ7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQMV9ETUFfQ0RTQV9VX1JFRyhsY2gpID0gZGVzdF9zdGFydCA+PiAxNjsKKwkJT01BUDFfRE1BX0NEU0FfTF9SRUcobGNoKSA9IGRlc3Rfc3RhcnQ7CisJfQogCi0Jb21hcF93cml0ZXcoZGVzdF9zdGFydCA+PiAxNiwgT01BUF9ETUFfQ0RTQV9VKGxjaCkpOwotCW9tYXBfd3JpdGV3KGRlc3Rfc3RhcnQsIE9NQVBfRE1BX0NEU0FfTChsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCU9NQVAyX0RNQV9DRFNBX1JFRyhsY2gpID0gZGVzdF9zdGFydDsKKworCU9NQVBfRE1BX0NERUlfUkVHKGxjaCkgPSBkc3RfZWk7CisJT01BUF9ETUFfQ0RGSV9SRUcobGNoKSA9IGRzdF9maTsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpCiB7Ci0Jb21hcF93cml0ZXcoZWlkeCwgT01BUF9ETUFfQ0RFSShsY2gpKTsKLQlvbWFwX3dyaXRldyhmaWR4LCBPTUFQX0RNQV9DREZJKGxjaCkpOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlSRVZJU0lUXzI0WFgoKTsKKwkJcmV0dXJuOworCX0KKwlPTUFQX0RNQV9DREVJX1JFRyhsY2gpID0gZWlkeDsKKwlPTUFQX0RNQV9DREZJX1JFRyhsY2gpID0gZmlkeDsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSkKIHsKLQl1MTYgdzsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSkgJiB+KDEgPDwgMTMpOwotCXcgfD0gZW5hYmxlID8gKDEgPDwgMTMpIDogMDsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgJj0gfigxIDw8IDEzKTsKKwlpZiAoZW5hYmxlKQorCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IDEgPDwgMTM7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSkKIHsKLQl1MTYgdzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgwMyA8PCAxNCk7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigweDAzIDw8IDE0KTsKIAlzd2l0Y2ggKGJ1cnN0X21vZGUpIHsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTOgogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfNDoKLQkJdyB8PSAoMHgwMSA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDIgPDwgMTQpOwogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfODoKLQkJdyB8PSAoMHgwMyA8PCAxNCk7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gKDB4MDMgPDwgMTQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgRE1BIGJ1cnN0IG1vZGVcbiIpOwogCQlCVUcoKTsKIAkJcmV0dXJuOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9pbnRyKGludCBsY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoaW50IGxjaCkKIHsKLQl1MTYgdzsKKwl1MzIgc3RhdHVzOwogCiAJLyogUmVhZCBDU1IgdG8gbWFrZSBzdXJlIGl0J3MgY2xlYXJlZC4gKi8KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU1IobGNoKSk7CisJc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCiAJLyogRW5hYmxlIHNvbWUgbmljZSBpbnRlcnJ1cHRzLiAqLwotCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzLCBPTUFQX0RNQV9DSUNSKGxjaCkpOworCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSBkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxczsKKwogCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQorc3RhdGljIHZvaWQgb21hcF9kaXNhYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpCiB7Ci0JdTE2IHc7Ci0KLQkvKiBDbGVhciB0aGUgU1RPUF9MTksgYml0cyAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3ICY9IH4oMSA8PCAxNCk7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JLyogQW5kIHNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCi0JaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCi0JCW9tYXBfd3JpdGV3KGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggfCAoMSA8PCAxNSksCi0JCQkgICAgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKLXsKLQl1MTYgdzsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NJQ1IobGNoKSk7Ci0KLQkvKiBTZXQgdGhlIFNUT1BfTE5LIGJpdCAqLwotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQl3IHw9ICgxIDw8IDE0KTsKLQl3ID0gb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0xOS19DVFJMKGxjaCkpOwotCi0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotfQotCi12b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOwotCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KLQkJZW5hYmxlX2xuayhsY2gpOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOwotCQlkbyB7Ci0JCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLwotCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQotCQkJCWJyZWFrOwotCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCi0JCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7Ci0KLQkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7Ci0JCQlpbml0X2ludHIoY3VyX2xjaCk7Ci0KLQkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKLQkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOwotCX0KLQotCWluaXRfaW50cihsY2gpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgfD0gT01BUF9ETUFfQ0NSX0VOOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKLQlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKLX0KLQotdm9pZCBvbWFwX3N0b3BfZG1hKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKLQkJaW50IG5leHRfbGNoLCBjdXJfbGNoID0gbGNoOwotCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwotCi0JCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7Ci0JCWRvIHsKLQkJCS8qIFRoZSBsb29wIGNhc2U6IHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCi0JCQlpZiAoZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0pCi0JCQkJYnJlYWs7Ci0JCQkvKiBNYXJrIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KLQkJCWRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdID0gMTsKLQotCQkJZGlzYWJsZV9sbmsoY3VyX2xjaCk7Ci0KLQkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7Ci0JCQljdXJfbGNoID0gbmV4dF9sY2g7Ci0JCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQotCQlyZXR1cm47Ci0JfQotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgb24gdGhlIGNoYW5uZWwgKi8KLQlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DSUNSKGxjaCkpOwotCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfk9NQVBfRE1BX0NDUl9FTjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JZG1hX2NoYW5bbGNoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CiB9CiAKIHZvaWQgb21hcF9lbmFibGVfZG1hX2lycShpbnQgbGNoLCB1MTYgYml0cykKQEAgLTQxMiw1NSArMzk1LDQ1IEBACiAJZG1hX2NoYW5bbGNoXS5lbmFibGVkX2lycXMgJj0gfmJpdHM7CiB9CiAKLXN0YXRpYyBpbnQgZG1hX2hhbmRsZV9jaChpbnQgY2gpCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX2xuayhpbnQgbGNoKQogewotCXUxNiBjc3I7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgJj0gfigxIDw8IDE0KTsKIAotCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoID49IDYpIHsKLQkJY3NyID0gZG1hX2NoYW5bY2hdLnNhdmVkX2NzcjsKLQkJZG1hX2NoYW5bY2hdLnNhdmVkX2NzciA9IDA7Ci0JfSBlbHNlCi0JCWNzciA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NSKGNoKSk7Ci0JaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKLQkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKLQkJY3NyICY9IDB4N2Y7Ci0JfQotCWlmICgoY3NyICYgMHgzZikgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICVkIChDU1IgJTA0eClcbiIsCi0JCSAgICAgICBjaCwgY3NyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLCBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfRFJPUF9JUlEpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgc3luY2hyb25pemF0aW9uIGV2ZW50IGRyb3Agb2NjdXJyZWQgd2l0aCBkZXZpY2UgJWRcbiIsCi0JCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKLQlpZiAobGlrZWx5KGNzciAmIE9NQVBfRE1BX0JMT0NLX0lSUSkpCi0JCWRtYV9jaGFuW2NoXS5mbGFncyAmPSB+T01BUF9ETUFfQUNUSVZFOwotCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQotCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIGNzciwgZG1hX2NoYW5bY2hdLmRhdGEpOwotCXJldHVybiAxOworCS8qIFNldCB0aGUgRU5BQkxFX0xOSyBiaXRzICovCisJaWYgKGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9CisJCQlkbWFfY2hhbltsY2hdLm5leHRfbGNoIHwgKDEgPDwgMTUpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9sbmsoaW50IGxjaCkKIHsKLQlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7Ci0JaW50IGhhbmRsZWQgPSAwOwotCi0JZm9yICg7OykgewotCQlpbnQgaGFuZGxlZF9ub3cgPSAwOwotCi0JCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2gpOwotCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKLQkJCWhhbmRsZWRfbm93ICs9IGRtYV9oYW5kbGVfY2goY2ggKyA2KTsKLQkJaWYgKCFoYW5kbGVkX25vdykKLQkJCWJyZWFrOwotCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKwkJLyogU2V0IHRoZSBTVE9QX0xOSyBiaXQgKi8KKwkJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2gpIHw9IDEgPDwgMTQ7CiAJfQogCi0JcmV0dXJuIGhhbmRsZWQgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2Rpc2FibGVfY2hhbm5lbF9pcnEobGNoKTsKKwkJLyogQ2xlYXIgdGhlIEVOQUJMRV9MTksgYml0ICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSAmPSB+KDEgPDwgMTUpOworCX0KKworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2VuYWJsZV9pcnFfbGNoKGludCBsY2gpCit7CisJdTMyIHZhbDsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisJdmFsIHw9IDEgPDwgbGNoOworCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CiB9CiAKIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLApAQCAtNDg1LDE0ICs0NTgsMjMgQEAKIAl9CiAJY2hhbiA9IGRtYV9jaGFuICsgZnJlZV9jaDsKIAljaGFuLT5kZXZfaWQgPSBkZXZfaWQ7Ci0JY2xlYXJfbGNoX3JlZ3MoZnJlZV9jaCk7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCWNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX2NsZWFyX2RtYShmcmVlX2NoKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAotCWNoYW4tPmRldl9pZCA9IGRldl9pZDsKIAljaGFuLT5kZXZfbmFtZSA9IGRldl9uYW1lOwogCWNoYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAJY2hhbi0+ZGF0YSA9IGRhdGE7Ci0JY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8IE9NQVBfRE1BX0JMT0NLX0lSUTsKKwljaGFuLT5lbmFibGVkX2lycXMgPSBPTUFQX0RNQV9UT1VUX0lSUSB8IE9NQVBfRE1BX0RST1BfSVJRIHwKKwkJCQlPTUFQX0RNQV9CTE9DS19JUlE7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCWNoYW4tPmVuYWJsZWRfaXJxcyB8PSBPTUFQMl9ETUFfVFJBTlNfRVJSX0lSUTsKIAogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQkvKiBJZiB0aGUgc3luYyBkZXZpY2UgaXMgc2V0LCBjb25maWd1cmUgaXQgZHluYW1pY2FsbHkuICovCkBAIC01MDIsMzcgKzQ4NCwyNDIgQEAKIAkJfQogCQkvKiBEaXNhYmxlIHRoZSAxNTEwIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgc2V0IHRoZSBzeW5jIGRldmljZQogCQkgKiBpZC4gKi8KLQkJb21hcF93cml0ZXcoZGV2X2lkIHwgKDEgPDwgMTApLCBPTUFQX0RNQV9DQ1IoZnJlZV9jaCkpOwotCX0gZWxzZSB7Ci0JCW9tYXBfd3JpdGV3KGRldl9pZCwgT01BUF9ETUFfQ0NSKGZyZWVfY2gpKTsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZCB8ICgxIDw8IDEwKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhmcmVlX2NoKSA9IGRldl9pZDsKIAl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcDJfZW5hYmxlX2lycV9sY2goZnJlZV9jaCk7CisKKwkJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoZnJlZV9jaCk7CisJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJT01BUF9ETUFfQ1NSX1JFRyhmcmVlX2NoKSA9IDB4MDsKKwkJb21hcF93cml0ZWwofjB4MCwgT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJfQorCiAJKmRtYV9jaF9vdXQgPSBmcmVlX2NoOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgb21hcF9mcmVlX2RtYShpbnQgY2gpCit2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGxjaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKLQlpZiAoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkgewotCQlwcmludGsoIm9tYXBfZG1hOiB0cnlpbmcgdG8gZnJlZSBub25hbGxvY2F0ZWQgRE1BIGNoYW5uZWwgJWRcbiIsIGNoKTsKKwlpZiAoZG1hX2NoYW5bbGNoXS5kZXZfaWQgPT0gLTEpIHsKKwkJcHJpbnRrKCJvbWFwX2RtYTogdHJ5aW5nIHRvIGZyZWUgbm9uYWxsb2NhdGVkIERNQSBjaGFubmVsICVkXG4iLAorCQkgICAgICAgbGNoKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQotCWRtYV9jaGFuW2NoXS5kZXZfaWQgPSAtMTsKKwlkbWFfY2hhbltsY2hdLmRldl9pZCA9IC0xOworCWRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggPSAtMTsKKwlkbWFfY2hhbltsY2hdLmNhbGxiYWNrID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAKLQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0lDUihjaCkpOwotCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0NSKGNoKSk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisJCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSA9IDA7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXUzMiB2YWw7CisJCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCQl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOworCQl2YWwgJj0gfigxIDw8IGxjaCk7CisJCW9tYXBfd3JpdGVsKHZhbCwgT01BUF9ETUE0X0lSUUVOQUJMRV9MMCk7CisKKwkJLyogQ2xlYXIgdGhlIENTUiByZWdpc3RlciBhbmQgSVJRIHN0YXR1cyByZWdpc3RlciAqLworCQlPTUFQX0RNQV9DU1JfUkVHKGxjaCkgPSAweDA7CisKKwkJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKwkJdmFsIHw9IDEgPDwgbGNoOworCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJCS8qIERpc2FibGUgYWxsIERNQSBpbnRlcnJ1cHRzIGZvciB0aGUgY2hhbm5lbC4gKi8KKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisKKwkJLyogTWFrZSBzdXJlIHRoZSBETUEgdHJhbnNmZXIgaXMgc3RvcHBlZC4gKi8KKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpID0gMDsKKwkJb21hcF9jbGVhcl9kbWEobGNoKTsKKwl9CiB9CiAKLWludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCkKKy8qCisgKiBDbGVhcnMgYW55IERNQSBzdGF0ZSBzbyB0aGUgRE1BIGVuZ2luZSBpcyByZWFkeSB0byByZXN0YXJ0IHdpdGggbmV3IGJ1ZmZlcnMKKyAqIHRocm91Z2ggb21hcF9zdGFydF9kbWEoKS4gQW55IGJ1ZmZlcnMgaW4gZmxpZ2h0IGFyZSBkaXNjYXJkZWQuCisgKi8KK3ZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCkKIHsKLQlyZXR1cm4gZW5hYmxlXzE1MTBfbW9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCWludCBzdGF0dXM7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCisJCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQlzdGF0dXMgPSBPTUFQX0RNQV9DU1JfUkVHKGxjaCk7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWludCBpOworCQl1MzIgbGNoX2Jhc2UgPSBPTUFQMjRYWF9ETUFfQkFTRSArIGxjaCAqIDB4NjAgKyAweDgwOworCQlmb3IgKGkgPSAwOyBpIDwgMHg0NDsgaSArPSA0KQorCQkJb21hcF93cml0ZWwoMCwgbGNoX2Jhc2UgKyBpKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCkKK3sKKwlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKKwkJaW50IG5leHRfbGNoLCBjdXJfbGNoOworCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOworCisJCWRtYV9jaGFuX2xpbmtfbWFwW2xjaF0gPSAxOworCQkvKiBTZXQgdGhlIGxpbmsgcmVnaXN0ZXIgb2YgdGhlIGZpcnN0IGNoYW5uZWwgKi8KKwkJZW5hYmxlX2xuayhsY2gpOworCisJCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7CisJCWN1cl9sY2ggPSBkbWFfY2hhbltsY2hdLm5leHRfbGNoOworCQlkbyB7CisJCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOworCisJCQkvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLworCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQorCQkJCWJyZWFrOworCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCisJCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7CisKKwkJCWVuYWJsZV9sbmsoY3VyX2xjaCk7CisJCQlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShjdXJfbGNoKTsKKworCQkJY3VyX2xjaCA9IG5leHRfbGNoOworCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkvKiBFcnJhdGE6IE5lZWQgdG8gd3JpdGUgbGNoIGV2ZW4gaWYgbm90IHVzaW5nIGNoYWluaW5nICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSA9IGxjaDsKKwl9CisKKwlvbWFwX2VuYWJsZV9jaGFubmVsX2lycShsY2gpOworCisJLyogRXJyYXRhOiBPbiBFUzIuMCBCVUZGRVJJTkcgZGlzYWJsZSBtdXN0IGJlIHNldC4KKwkgKiBUaGlzIHdpbGwgYWx3YXlzIGZhaWwgb24gRVMxLjAgKi8KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IE9NQVBfRE1BX0NDUl9FTjsKKwl9CisKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgfD0gT01BUF9ETUFfQ0NSX0VOOworCisJZG1hX2NoYW5bbGNoXS5mbGFncyB8PSBPTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3ZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKQoreworCWlmICghb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkgJiYgZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCAhPSAtMSkgeworCQlpbnQgbmV4dF9sY2gsIGN1cl9sY2ggPSBsY2g7CisJCWNoYXIgZG1hX2NoYW5fbGlua19tYXBbT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVF07CisKKwkJbWVtc2V0KGRtYV9jaGFuX2xpbmtfbWFwLCAwLCBzaXplb2YoZG1hX2NoYW5fbGlua19tYXApKTsKKwkJZG8geworCQkJLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KKwkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKKwkJCQlicmVhazsKKwkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOworCisJCQlkaXNhYmxlX2xuayhjdXJfbGNoKTsKKworCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKKwkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKKwkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOworCisJCXJldHVybjsKKwl9CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gMDsKKworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+T01BUF9ETUFfQ0NSX0VOOworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KKyAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKKyAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCisgKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgorICovCitkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCit7CisJZG1hX2FkZHJfdCBvZmZzZXQ7CisKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCW9mZnNldCA9IChkbWFfYWRkcl90KSAoT01BUDFfRE1BX0NTU0FfTF9SRUcobGNoKSB8CisJCQkJICAgICAgIChPTUFQMV9ETUFfQ1NTQV9VX1JFRyhsY2gpIDw8IDE2KSk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCW9mZnNldCA9IE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgorICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KKyAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCisgKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCisgKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZworICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KKyAqLworZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQoreworCWRtYV9hZGRyX3Qgb2Zmc2V0OworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvZmZzZXQgPSAoZG1hX2FkZHJfdCkgKE9NQVAxX0RNQV9DRFNBX0xfUkVHKGxjaCkgfAorCQkJCSAgICAgICAoT01BUDFfRE1BX0NEU0FfVV9SRUcobGNoKSA8PCAxNikpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvZmZzZXQgPSBPTUFQMl9ETUFfQ0RTQV9SRUcobGNoKTsKKworCXJldHVybiBvZmZzZXQ7Cit9CisKKy8qCisgKiBSZXR1cm5zIGN1cnJlbnQgc291cmNlIHRyYW5zZmVyIGNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCisgKiBDYW4gYmUgdXNlZCB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBhIHRyYW5zZmVyIGluc2lkZSBhIGJsb2NrLgorICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgorICovCitpbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpIE9NQVBfRE1BX0NTQUNfUkVHKGxjaCk7Cit9CisKK2ludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpCit7CisJaW50IGxjaDsKKworCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQorCQkJcmV0dXJuIDE7CisKKwlmb3IgKGxjaCA9IDA7IGxjaCA8IGRtYV9jaGFuX2NvdW50OyBsY2grKykKKwkJaWYgKE9NQVBfRE1BX0NDUl9SRUcobGNoKSAmIE9NQVBfRE1BX0NDUl9FTikKKwkJCXJldHVybiAxOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC01NTAsNyArNzM3LDggQEAKIAogCWlmICgoZG1hX2NoYW5bbGNoX2hlYWRdLmRldl9pZCA9PSAtMSkgfHwKIAkgICAgKGRtYV9jaGFuW2xjaF9xdWV1ZV0uZGV2X2lkID09IC0xKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gbGluayBub24gcmVxdWVzdGVkIGNoYW5uZWxzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIGxpbmsgIgorCQkgICAgICAgIm5vbiByZXF1ZXN0ZWQgY2hhbm5lbHNcbiIpOwogCQlkdW1wX3N0YWNrKCk7CiAJfQogCkBAIC01NzAsMjAgKzc1OCwxNDkgQEAKIAogCWlmIChkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggIT0gbGNoX3F1ZXVlIHx8CiAJICAgIGRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rIG5vbiBsaW5rZWQgY2hhbm5lbHNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiB0cnlpbmcgdG8gdW5saW5rICIKKwkJICAgICAgICJub24gbGlua2VkIGNoYW5uZWxzXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCiAJaWYgKChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpIHx8CiAJICAgIChkbWFfY2hhbltsY2hfaGVhZF0uZmxhZ3MgJiBPTUFQX0RNQV9BQ1RJVkUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IFlvdSBuZWVkIHRvIHN0b3AgdGhlIERNQSBjaGFubmVscyBiZWZvcmUgdW5saW5raW5nXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogWW91IG5lZWQgdG8gc3RvcCB0aGUgRE1BIGNoYW5uZWxzICIKKwkJICAgICAgICJiZWZvcmUgdW5saW5raW5nXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIAogCWRtYV9jaGFuW2xjaF9oZWFkXS5uZXh0X2xjaCA9IC0xOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIGludCBvbWFwMV9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MTYgY3NyOworCisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPj0gNikgeworCQljc3IgPSBkbWFfY2hhbltjaF0uc2F2ZWRfY3NyOworCQlkbWFfY2hhbltjaF0uc2F2ZWRfY3NyID0gMDsKKwl9IGVsc2UKKwkJY3NyID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgY2ggPD0gMiAmJiAoY3NyID4+IDcpICE9IDApIHsKKwkJZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IgPSBjc3IgPj4gNzsKKwkJY3NyICY9IDB4N2Y7CisJfQorCWlmICgoY3NyICYgMHgzZikgPT0gMCkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNwdXJpb3VzIGludGVycnVwdCBmcm9tIERNQSBjaGFubmVsICIKKwkJICAgICAgICIlZCAoQ1NSICUwNHgpXG4iLCBjaCwgY3NyKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLAorCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKHVubGlrZWx5KGNzciAmIE9NQVBfRE1BX0RST1BfSVJRKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkICIKKwkJICAgICAgICJ3aXRoIGRldmljZSAlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKGxpa2VseShjc3IgJiBPTUFQX0RNQV9CTE9DS19JUlEpKQorCQlkbWFfY2hhbltjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKKwlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKKwkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBjc3IsIGRtYV9jaGFuW2NoXS5kYXRhKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXAxX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpbnQgY2ggPSAoKGludCkgZGV2X2lkKSAtIDE7CisJaW50IGhhbmRsZWQgPSAwOworCisJZm9yICg7OykgeworCQlpbnQgaGFuZGxlZF9ub3cgPSAwOworCisJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2gpOworCQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBkbWFfY2hhbltjaCArIDZdLnNhdmVkX2NzcikKKwkJCWhhbmRsZWRfbm93ICs9IG9tYXAxX2RtYV9oYW5kbGVfY2goY2ggKyA2KTsKKwkJaWYgKCFoYW5kbGVkX25vdykKKwkJCWJyZWFrOworCQloYW5kbGVkICs9IGhhbmRsZWRfbm93OworCX0KKworCXJldHVybiBoYW5kbGVkID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKK30KKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfZG1hX2lycV9oYW5kbGVyCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIGludCBvbWFwMl9kbWFfaGFuZGxlX2NoKGludCBjaCkKK3sKKwl1MzIgc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhjaCk7CisJdTMyIHZhbDsKKworCWlmICghc3RhdHVzKQorCQlyZXR1cm4gMDsKKwlpZiAodW5saWtlbHkoZG1hX2NoYW5bY2hdLmRldl9pZCA9PSAtMSkpCisJCXJldHVybiAwOworCS8qIFJFVklTSVQ6IEFjY29yZGluZyB0byAyNHh4IFRSTSwgdGhlcmUncyBubyBUT1VUX0lFICovCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVBfRE1BX1RPVVRfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHRpbWVvdXQgd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUF9ETUFfRFJPUF9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICIKKwkJICAgICAgICIlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisKKwlpZiAodW5saWtlbHkoc3RhdHVzICYgT01BUDJfRE1BX1RSQU5TX0VSUl9JUlEpKQorCQlwcmludGsoS0VSTl9JTkZPICJETUEgdHJhbnNhY3Rpb24gZXJyb3Igd2l0aCBkZXZpY2UgJWRcbiIsCisJCSAgICAgICBkbWFfY2hhbltjaF0uZGV2X2lkKTsKKworCU9NQVBfRE1BX0NTUl9SRUcoY2gpID0gMHgyMDsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJLyogY2ggaW4gdGhpcyBmdW5jdGlvbiBpcyBmcm9tIDAtMzEgd2hpbGUgaW4gcmVnaXN0ZXIgaXQgaXMgMS0zMiAqLworCXZhbCA9IDEgPDwgKGNoKTsKKwlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCisJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCisJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgc3RhdHVzLCBkbWFfY2hhbltjaF0uZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogU1RBVFVTIHJlZ2lzdGVyIGNvdW50IGlzIGZyb20gMS0zMiB3aGlsZSBvdXIgaXMgMC0zMSAqLworc3RhdGljIGlycXJldHVybl90IG9tYXAyX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1MzIgdmFsOworCWludCBpOworCisJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKworCWZvciAoaSA9IDE7IGkgPD0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsgaSsrKSB7CisJCWludCBhY3RpdmUgPSB2YWwgJiAoMSA8PCAoaSAtIDEpKTsKKwkJaWYgKGFjdGl2ZSkKKwkJCW9tYXAyX2RtYV9oYW5kbGVfY2goaSAtIDEpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcDI0eHhfZG1hX2lycSA9IHsKKwkubmFtZSA9ICJETUEiLAorCS5oYW5kbGVyID0gb21hcDJfZG1hX2lycV9oYW5kbGVyLAorCS5mbGFncyA9IFNBX0lOVEVSUlVQVAorfTsKKworI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyNHh4X2RtYV9pcnE7CisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHN0cnVjdCBsY2RfZG1hX2luZm8gewogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTc5NSw3ICsxMTEyLDcgQEAKIAkvKiBBbHdheXMgc2V0IHRoZSBzb3VyY2UgcG9ydCBhcyBTRFJBTSBmb3Igbm93Ki8KIAl3ICY9IH4oMHgwMyA8PCA2KTsKIAlpZiAobGNkX2RtYS5jYWxsYmFjayAhPSBOVUxMKQotCQl3IHw9IDEgPDwgMTsgICAgICAgICAgICAvKiBCbG9jayBpbnRlcnJ1cHQgZW5hYmxlICovCisJCXcgfD0gMSA8PCAxOwkJLyogQmxvY2sgaW50ZXJydXB0IGVuYWJsZSAqLwogCWVsc2UKIAkJdyAmPSB+KDEgPDwgMSk7CiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTgxNCw3ICsxMTMxLDggQEAKIAlvbWFwX3dyaXRldyhmaSwgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfTCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBsY2RfZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3QgbGNkX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXUxNiB3OwogCkBAIC04NzAsNyArMTE4OCw4IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFlbmFibGVfMTUxMF9tb2RlKQotCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIH4xLCBPTUFQMTYxMF9ETUFfTENEX0NDUik7CisJCW9tYXBfd3JpdGV3KG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgfjEsCisJCQkgICAgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOwogCWxjZF9kbWEucmVzZXJ2ZWQgPSAwOwogCXNwaW5fdW5sb2NrKCZsY2RfZG1hLmxvY2spOwogfQpAQCAtOTM5LDkzICsxMjU4LDI0IEBACiAJb21hcF93cml0ZXcodywgT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKIH0KIAotLyoKLSAqIENsZWFycyBhbnkgRE1BIHN0YXRlIHNvIHRoZSBETUEgZW5naW5lIGlzIHJlYWR5IHRvIHJlc3RhcnQgd2l0aCBuZXcgYnVmZmVycwotICogdGhyb3VnaCBvbWFwX3N0YXJ0X2RtYSgpLiBBbnkgYnVmZmVycyBpbiBmbGlnaHQgYXJlIGRpc2NhcmRlZC4KLSAqLwotdm9pZCBvbWFwX2NsZWFyX2RtYShpbnQgbGNoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHN0YXR1czsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKSAmIH5PTUFQX0RNQV9DQ1JfRU4sCi0JCSAgICBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0Jc3RhdHVzID0gT01BUF9ETUFfQ1NSKGxjaCk7CS8qIGNsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBzb3VyY2UgYWRkcmVzcyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgotICogSWYgdGhlIGNoYW5uZWwgaXMgcnVubmluZyB0aGUgY2FsbGVyIG11c3QgZGlzYWJsZSBpbnRlcnJ1cHRzIHByaW9yIGNhbGxpbmcKLSAqIHRoaXMgZnVuY3Rpb24gYW5kIHByb2Nlc3MgdGhlIHJldHVybmVkIHZhbHVlIGJlZm9yZSByZS1lbmFibGluZyBpbnRlcnJ1cHQgdG8KLSAqIHByZXZlbnQgcmFjZXMgd2l0aCB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIE5vdGUgdGhhdCBpbiBjb250aW51b3VzIG1vZGUgdGhlcmUKLSAqIGlzIGEgY2hhbmNlIGZvciBDU1NBX0wgcmVnaXN0ZXIgb3ZlcmZsb3cgaW5iZXR3ZWVuIHRoZSB0d28gcmVhZHMgcmVzdWx0aW5nCi0gKiBpbiBpbmNvcnJlY3QgcmV0dXJuIHZhbHVlLgotICovCi1kbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpCi17Ci0JcmV0dXJuIChkbWFfYWRkcl90KSAob21hcF9yZWFkdyhPTUFQX0RNQV9DU1NBX0wobGNoKSkgfAotCShvbWFwX3JlYWR3KE9NQVBfRE1BX0NTU0FfVShsY2gpKSA8PCAxNikpOwotfQotCi0vKgotICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCi0gKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCi0gKiBpcyBhIGNoYW5jZSBmb3IgQ0RTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZwotICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KLSAqLwotZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKQotewotCXJldHVybiAoZG1hX2FkZHJfdCkgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ0RTQV9MKGxjaCkpIHwKLQkob21hcF9yZWFkdyhPTUFQX0RNQV9DRFNBX1UobGNoKSkgPDwgMTYpKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBzb3VyY2UgdHJhbnNmZXIgY291bnRpbmcgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIENhbiBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIGEgdHJhbnNmZXIgaW5zaWRlIGEgIGJsb2NrLgotICogSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBkaXNhYmxlZCBpbnRlcnJ1cHRzLgotICovCi1pbnQgb21hcF9nZXRfZG1hX3NyY19hZGRyX2NvdW50ZXIoaW50IGxjaCkKLXsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NBQyhsY2gpKTsKLX0KLQotaW50IG9tYXBfZG1hX3J1bm5pbmcodm9pZCkKLXsKLQlpbnQgbGNoOwotCi0JLyogQ2hlY2sgaWYgTENEIERNQSBpcyBydW5uaW5nICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlpZiAob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQotCWZvciAobGNoID0gMDsgbGNoIDwgZG1hX2NoYW5fY291bnQ7IGxjaCsrKSB7Ci0JCXUxNiB3OwotCi0JCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQkJaWYgKHcgJiBPTUFQX0RNQV9DQ1JfRU4pCi0JCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX2luaXRfZG1hKHZvaWQpCiB7CiAJaW50IGNoLCByOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTUxMCBpbml0aWFsaXplZFxuIik7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkRNQSBzdXBwb3J0IGZvciBPTUFQMTV4eCBpbml0aWFsaXplZFxuIik7CiAJCWRtYV9jaGFuX2NvdW50ID0gOTsKIAkJZW5hYmxlXzE1MTBfbW9kZSA9IDE7CiAJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDczMCgpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0hXX0lEKSk7CiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9MKSwKLQkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9VKSA8PCAxNikgfCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9MKSwKKwkJICAgICAgIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMF9VKSA8PCAxNikgfAorCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfTCksCisJCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzFfVSkgPDwgMTYpIHwKKwkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18xX0wpLAogCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzIpLCBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMyksCiAJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfNCkpOwogCQlpZiAoIWVuYWJsZV8xNTEwX21vZGUpIHsKQEAgLTEwMzgsNiArMTI4OCwxMSBAQAogCQkJZG1hX2NoYW5fY291bnQgPSAxNjsKIAkJfSBlbHNlCiAJCQlkbWFfY2hhbl9jb3VudCA9IDk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1OCByZXZpc2lvbiA9IG9tYXBfcmVhZGIoT01BUF9ETUE0X1JFVklTSU9OKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgcmV2aXNpb24gJWQuJWRcbiIsCisJCSAgICAgICByZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7CisJCWRtYV9jaGFuX2NvdW50ID0gT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVDsKIAl9IGVsc2UgewogCQlkbWFfY2hhbl9jb3VudCA9IDA7CiAJCXJldHVybiAwOwpAQCAtMTA0OSw0MSArMTMwNCw1NiBAQAogCW1lbXNldCgmZG1hX2NoYW4sIDAsIHNpemVvZihkbWFfY2hhbikpOwogCiAJZm9yIChjaCA9IDA7IGNoIDwgZG1hX2NoYW5fY291bnQ7IGNoKyspIHsKKwkJb21hcF9jbGVhcl9kbWEoY2gpOwogCQlkbWFfY2hhbltjaF0uZGV2X2lkID0gLTE7CiAJCWRtYV9jaGFuW2NoXS5uZXh0X2xjaCA9IC0xOwogCiAJCWlmIChjaCA+PSA2ICYmIGVuYWJsZV8xNTEwX21vZGUpCiAJCQljb250aW51ZTsKIAotCQkvKiByZXF1ZXN0X2lycSgpIGRvZXNuJ3QgbGlrZSBkZXZfaWQgKGllLiBjaCkgYmVpbmcgemVybywKLQkJICogc28gd2UgaGF2ZSB0byBrbHVkZ2UgYXJvdW5kIHRoaXMuICovCi0JCXIgPSByZXF1ZXN0X2lycShkbWFfaXJxW2NoXSwgZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKLQkJCQkodm9pZCAqKSAoY2ggKyAxKSk7CisJCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQkJLyogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nCisJCQkgKiB6ZXJvLCBzbyB3ZSBoYXZlIHRvIGtsdWRnZSBhcm91bmQgdGhpcy4gKi8KKwkJCXIgPSByZXF1ZXN0X2lycShvbWFwMV9kbWFfaXJxW2NoXSwKKwkJCQkJb21hcDFfZG1hX2lycV9oYW5kbGVyLCAwLCAiRE1BIiwKKwkJCQkJKHZvaWQgKikgKGNoICsgMSkpOworCQkJaWYgKHIgIT0gMCkgeworCQkJCWludCBpOworCisJCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgIgorCQkJCSAgICAgICAiZm9yIERNQSAoZXJyb3IgJWQpXG4iLAorCQkJCSAgICAgICBvbWFwMV9kbWFfaXJxW2NoXSwgcik7CisJCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCisJCQkJCWZyZWVfaXJxKG9tYXAxX2RtYV9pcnFbaV0sCisJCQkJCQkgKHZvaWQgKikgKGkgKyAxKSk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCXNldHVwX2lycShJTlRfMjRYWF9TRE1BX0lSUTAsICZvbWFwMjR4eF9kbWFfaXJxKTsKKworCS8qIEZJWE1FOiBVcGRhdGUgTENEIERNQSB0byB3b3JrIG9uIDI0eHggKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJciA9IHJlcXVlc3RfaXJxKElOVF9ETUFfTENELCBsY2RfZG1hX2lycV9oYW5kbGVyLCAwLAorCQkJCSJMQ0QgRE1BIiwgTlVMTCk7CiAJCWlmIChyICE9IDApIHsKIAkJCWludCBpOwogCi0JCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZCBmb3IgRE1BIChlcnJvciAlZClcbiIsCi0JCQkgICAgICAgZG1hX2lycVtjaF0sIHIpOwotCQkJZm9yIChpID0gMDsgaSA8IGNoOyBpKyspCi0JCQkJZnJlZV9pcnEoZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CisJCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAiCisJCQkgICAgICAgIihlcnJvciAlZClcbiIsIHIpOworCQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCisJCQkJZnJlZV9pcnEob21hcDFfZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0KLQlyID0gcmVxdWVzdF9pcnEoSU5UX0RNQV9MQ0QsIGxjZF9kbWFfaXJxX2hhbmRsZXIsIDAsICJMQ0QgRE1BIiwgTlVMTCk7Ci0JaWYgKHIgIT0gMCkgewotCQlpbnQgaTsKIAotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgTENEIERNQSAoZXJyb3IgJWQpXG4iLCByKTsKLQkJZm9yIChpID0gMDsgaSA8IGRtYV9jaGFuX2NvdW50OyBpKyspCi0JCQlmcmVlX2lycShkbWFfaXJxW2ldLCAodm9pZCAqKSAoaSArIDEpKTsKLQkJcmV0dXJuIHI7Ci0JfQogCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kbWEpOwogCi0KIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX3NyY19wb3MpOwogRVhQT1JUX1NZTUJPTChvbWFwX2dldF9kbWFfZHN0X3Bvcyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKTsKQEAgLTExMDksNiArMTM3OSw4IEBACiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUpOwogCitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9wYXJhbXMpOworCiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX2xpbmtfbGNoKTsKIEVYUE9SVF9TWU1CT0wob21hcF9kbWFfdW5saW5rX2xjaCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCmluZGV4IDU1MDU5YTIuLjc2ZjcyMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTUxMFsyXSA9IHsKIAl7IE9NQVBfTVBVSU9fQkFTRSwgICAgSU5UX01QVUlPLCAgICAgIElIX01QVUlPX0JBU0UsIE1FVEhPRF9NUFVJTyB9LAogCXsgT01BUDE1MTBfR1BJT19CQVNFLCBJTlRfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLCAgTUVUSE9EX0dQSU9fMTUxMCB9CkBAIC0xNzMsNyArMTczLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZ3Bpb19iYW5rICpnZXRfZ3Bpb19iYW5rKGludCBncGlvKQogewotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkKIAkJCXJldHVybiAmZ3Bpb19iYW5rWzBdOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCQlyZXR1cm4gLTE7CiAJCXJldHVybiAwOwogCX0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpICYmIGdwaW8gPCAxNikKIAkJcmV0dXJuIDA7CiAjZW5kaWYKQEAgLTY1NCw3ICs2NTQsNyBAQAogCS8qIFNldCB0cmlnZ2VyIHRvIG5vbmUuIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgdHJpZ2dlciBhZnRlciByZXF1ZXN0X2lycSAqLwogCV9zZXRfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdldF9ncGlvX2luZGV4KGdwaW8pLCBJUlFUX05PRURHRSk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCXZvaWQgX19pb21lbSAqcmVnOwogCkBAIC03MzksNyArNzM5LDcgQEAKIAliYW5rID0gKHN0cnVjdCBncGlvX2JhbmsgKikgZGVzYy0+ZGF0YTsKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQX01QVUlPX0dQSU9fSU5UOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzE1MTApCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJCWQgPSBpcnFfZGVzYyArIGdwaW9faXJxOwogCQkJZGVzY19oYW5kbGVfaXJxKGdwaW9faXJxLCBkLCByZWdzKTsKIAkJfQotICAgICAgICB9CisJfQogfQogCiBzdGF0aWMgdm9pZCBncGlvX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTgzNyw4ICs4MzcsOSBAQAogCS51bm1hc2sgPSBtcHVpb191bm1hc2tfaXJxCiB9OwogCi1zdGF0aWMgaW50IGluaXRpYWxpemVkID0gMDsKLXN0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19jayA9IE5VTEw7CitzdGF0aWMgaW50IGluaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBjbGsgKiBncGlvX2ljazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19mY2s7CiAKIHN0YXRpYyBpbnQgX19pbml0IF9vbWFwX2dwaW9faW5pdCh2b2lkKQogewpAQCAtODQ4LDE0ICs4NDksMjYgQEAKIAlpbml0aWFsaXplZCA9IDE7CiAKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJZ3Bpb19jayA9IGNsa19nZXQoTlVMTCwgImFybV9ncGlvX2NrIik7Ci0JCWlmIChJU19FUlIoZ3Bpb19jaykpCisJCWdwaW9faWNrID0gY2xrX2dldChOVUxMLCAiYXJtX2dwaW9fY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCiAJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgYXJtX2dwaW9fY2tcbiIpOwogCQllbHNlCi0JCQljbGtfdXNlKGdwaW9fY2spOworCQkJY2xrX3VzZShncGlvX2ljayk7CisJfQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlncGlvX2ljayA9IGNsa19nZXQoTlVMTCwgImdwaW9zX2ljayIpOworCQlpZiAoSVNfRVJSKGdwaW9faWNrKSkKKwkJCXByaW50aygiQ291bGQgbm90IGdldCBncGlvc19pY2tcbiIpOworCQllbHNlCisJCQljbGtfdXNlKGdwaW9faWNrKTsKKwkJZ3Bpb19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncGlvc19mY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCisJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgZ3Bpb3NfZmNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX3VzZShncGlvX2Zjayk7CiAJfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQMTUxMCBHUElPIGhhcmR3YXJlXG4iKTsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gMjsKQEAgLTkwMSw3ICs5MTQsNyBAQAogCQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9NUFVJTykgewogCQkJb21hcF93cml0ZXcoMHhGRkZGLCBPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0dQSU9fTUFTS0lUKTsKIAkJfQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKSB7CiAJCQlfX3Jhd193cml0ZXcoMHhmZmZmLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfTUFTSyk7CiAJCQlfX3Jhd193cml0ZXcoMHgwMDAwLCBiYW5rLT5iYXNlICsgT01BUDE1MTBfR1BJT19JTlRfU1RBVFVTKTsKQEAgLTEwMzgsNiArMTA1MSw3IEBACiAKIC8qCiAgKiBUaGlzIG1heSBnZXQgY2FsbGVkIGVhcmx5IGZyb20gYm9hcmQgc3BlY2lmaWMgaW5pdAorICogZm9yIGJvYXJkcyB0aGF0IGhhdmUgaW50ZXJydXB0cyByb3V0ZWQgdmlhIEZQR0EuCiAgKi8KIGludCBvbWFwX2dwaW9faW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCA5YzliN2RmLi5lYTk0NzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNDkxLDE3ICs0OTEsMjAgQEAKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAotCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5UKTsKKwkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCwKKwkJCQkgICAgIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCSBPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOworCQkJCSBtY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEsCisJCQkJIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV90eF9sY2gsCiAJCQkJT01BUF9ETUFfUE9SVF9FTUlGRiwKIAkJCQlPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCQlidWZmZXIpOworCQkJCWJ1ZmZlciwKKwkJCQkwLCAwKTsKIAogCW9tYXBfc3RhcnRfZG1hKG1jYnNwW2lkXS5kbWFfdHhfbGNoKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnR4X2RtYV9jb21wbGV0aW9uKSk7CkBAIC01MzEsMTcgKzUzNCwyMCBAQAogCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJICAgICBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2LAogCQkJCSAgICAgbGVuZ3RoID4+IDEsIDEsCi0JCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQpOworCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5ULAorCQkJCSAgICAgMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3J4X2xjaCwKIAkJCQlPTUFQX0RNQV9QT1JUX1RJUEIsCiAJCQkJT01BUF9ETUFfQU1PREVfQ09OU1RBTlQsCi0JCQkJbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxKTsKKwkJCQltY2JzcFtpZF0uaW9fYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RSUjEsCisJCQkJMCwgMCk7CiAKIAlvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJIE9NQVBfRE1BX1BPUlRfRU1JRkYsCiAJCQkJIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DLAotCQkJCSBidWZmZXIpOworCQkJCSBidWZmZXIsCisJCQkJIDAsIDApOwogCiAJb21hcF9zdGFydF9kbWEobWNic3BbaWRdLmRtYV9yeF9sY2gpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJihtY2JzcFtpZF0ucnhfZG1hX2NvbXBsZXRpb24pKTsKQEAgLTY0Myw3ICs2NDksNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX21jYnNwX2luZm8gbWNic3BfMTUxMFtdID0gewogCVswXSA9IHsgLnZpcnRfYmFzZSA9IE9NQVAxNTEwX01DQlNQMV9CQVNFLAogCQkuZG1hX3J4X3N5bmMgPSBPTUFQX0RNQV9NQ0JTUDFfUlgsCkBAIC03MTIsNyArNzE4LDcgQEAKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzczMCk7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQltY2JzcF9pbmZvID0gbWNic3BfMTUxMDsKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzE1MTApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCmluZGV4IDY0NDgyMDQuLjhjMWMwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogVXRpbGl0eSB0byBzZXQgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgZnJvbSBhIHRhYmxlIGluIG11eC5oCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255LmxpbmRncmVuQG5va2lhLmNvbT4KICAqCkBAIC0yNSwzOCArMjUsNzQgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KLSNkZWZpbmUgX19NVVhfQ19fCiAjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CiAKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIAorI2RlZmluZSBPTUFQMjRYWF9MNF9CQVNFCTB4NDgwMDAwMDAKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9FTkEJKDEgPDwgMykKKyNkZWZpbmUgT01BUDI0WFhfUFVMTF9VUAkoMSA8PCA0KQorCitzdGF0aWMgc3RydWN0IHBpbl9jb25maWcgKiBwaW5fdGFibGU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaW5fdGFibGVfc3o7CisKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXA3MzBfcGluczsKK2V4dGVybiBzdHJ1Y3QgcGluX2NvbmZpZyAqIG9tYXAxeHh4X3BpbnM7CitleHRlcm4gc3RydWN0IHBpbl9jb25maWcgKiBvbWFwMjR4eF9waW5zOworCitpbnQgX19pbml0IG9tYXBfbXV4X3JlZ2lzdGVyKHN0cnVjdCBwaW5fY29uZmlnICogcGlucywgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXBpbl90YWJsZSA9IHBpbnM7CisJcGluX3RhYmxlX3N6ID0gc2l6ZTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0cyB0aGUgT21hcCBNVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVycyBiYXNlZCBvbiB0aGUgdGFibGUKICAqLwotaW50IF9faW5pdF9vcl9tb2R1bGUKLW9tYXBfY2ZnX3JlZyhjb25zdCByZWdfY2ZnX3QgcmVnX2NmZykKK2ludCBfX2luaXRfb3JfbW9kdWxlIG9tYXBfY2ZnX3JlZyhjb25zdCB1bnNpZ25lZCBsb25nIGluZGV4KQogewogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobXV4X3NwaW5fbG9jayk7CiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXJlZ19jZmdfc2V0ICpjZmc7CisJc3RydWN0IHBpbl9jb25maWcgKmNmZzsKIAl1bnNpZ25lZCBpbnQgcmVnX29yaWcgPSAwLCByZWcgPSAwLCBwdV9wZF9vcmlnID0gMCwgcHVfcGQgPSAwLAogCQlwdWxsX29yaWcgPSAwLCBwdWxsID0gMDsKIAl1bnNpZ25lZCBpbnQgbWFzaywgd2FybiA9IDA7CiAKLQlpZiAoY3B1X2lzX29tYXA3eHgoKSkKLQkJcmV0dXJuIDA7CisJaWYgKCFwaW5fdGFibGUpCisJCUJVRygpOwogCi0JaWYgKHJlZ19jZmcgPiBBUlJBWV9TSVpFKHJlZ19jZmdfdGFibGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTVVYOiByZWdfY2ZnICVkXG4iLCByZWdfY2ZnKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGluZGV4ID49IHBpbl90YWJsZV9zeikgeworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgcGluIG11eCBpbmRleDogJWx1ICglbHUpXG4iLAorCQkgICAgICAgaW5kZXgsIHBpbl90YWJsZV9zeik7CisJCWR1bXBfc3RhY2soKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY2ZnID0gKHJlZ19jZmdfc2V0ICopJnJlZ19jZmdfdGFibGVbcmVnX2NmZ107CisJY2ZnID0gKHN0cnVjdCBwaW5fY29uZmlnICopJnBpbl90YWJsZVtpbmRleF07CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCXU4IHJlZyA9IDA7CisKKwkJcmVnIHw9IGNmZy0+bWFzayAmIDB4NzsKKwkJaWYgKGNmZy0+cHVsbF92YWwpCisJCQlyZWcgfD0gT01BUDI0WFhfUFVMTF9FTkE7CisJCWlmKGNmZy0+cHVfcGRfdmFsKQorCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfVVA7CisjaWZkZWYgQ09ORklHX09NQVBfTVVYX0RFQlVHCisJCXByaW50aygiTXV4aW5nICVzICgweCUwOHgpOiAweCUwMnggLT4gMHglMDJ4XG4iLAorCQkgICAgICAgY2ZnLT5uYW1lLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnLAorCQkgICAgICAgb21hcF9yZWFkYihPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKSwgcmVnKTsKKyNlbmRpZgorCQlvbWFwX3dyaXRlYihyZWcsIE9NQVAyNFhYX0w0X0JBU0UgKyBjZmctPm11eF9yZWcpOworCisJCXJldHVybiAwOworCX0KIAogCS8qIENoZWNrIHRoZSBtdXggcmVnaXN0ZXIgaW4gcXVlc3Rpb24gKi8KIAlpZiAoY2ZnLT5tdXhfcmVnKSB7CkBAIC0xNTcsNyArMTkzLDggQEAKIAlyZXR1cm4gMDsKICNlbmRpZgogfQotCiBFWFBPUlRfU1lNQk9MKG9tYXBfY2ZnX3JlZyk7Ci0KKyNlbHNlCisjZGVmaW5lIG9tYXBfbXV4X2luaXQoKSBkbyB7fSB3aGlsZSgwKQorI2RlZmluZSBvbWFwX2NmZ19yZWcoeCkJZG8ge30gd2hpbGUoMCkKICNlbmRpZgkvKiBDT05GSUdfT01BUF9NVVggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKaW5kZXggZTE1YzZjMS4uOTY2Y2NhMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCkBAIC01NCwxMSArNTQsMTIgQEAKICNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KIAotI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAic3JhbS5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfU0laRV07CitzdGF0aWMgdW5zaWduZWQgaW50IG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfU0laRV07CiBzdGF0aWMgdW5zaWduZWQgaW50IG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFX1NJWkVdOwogCkBAIC0xMjAsOCArMTIxLDggQEAKICAqLwogc3RhdGljIHZvaWQgb21hcF9wbV93YWtldXBfc2V0dXAodm9pZCkKIHsKLQl1MzIgbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0lIMl9JUlEpOwotCXUzMiBsZXZlbDJfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfVUFSVDIpIHwgT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJdTMyIGxldmVsMV93YWtlID0gMDsKKwl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKIAogCS8qCiAJICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKQEAgLTEyOSwxOSArMTMwLDI5IEBACiAJICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCiAJICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCBjcHVfaXNfb21hcDE2eHgoKSkKLQkJbGV2ZWwxX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9HUElPX0JBTksxKTsKLQllbHNlIGlmIChjcHVfaXNfb21hcDczMCgpKQotCQlsZXZlbDFfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKTsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UXzczMF9HUElPX0JBTksxKSB8CisJCQlPTUFQX0lSUV9CSVQoSU5UXzczMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTUxMF9JSDJfSVJRKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJbGV2ZWwxX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX0dQSU9fQkFOSzEpIHwKKwkJCU9NQVBfSVJRX0JJVChJTlRfMTYxMF9JSDJfSVJRKTsKIAogCW9tYXBfd3JpdGVsKH5sZXZlbDFfd2FrZSwgT01BUF9JSDFfTUlSKTsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCAgT01BUF9JSDJfTUlSKTsKLQotCS8qIElOVF8xNjEwX1dBS0VfVVBfUkVRIGlzIG5lZWRlZCBmb3IgR1BJTyB3YWtldXAuLi4gKi8KLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewogCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsIE9NQVBfSUgyXzBfTUlSKTsKKwkJb21hcF93cml0ZWwofihPTUFQX0lSUV9CSVQoSU5UXzczMF9XQUtFX1VQX1JFUSkgfCBPTUFQX0lSUV9CSVQoSU5UXzczMF9NUFVJT19LRVlQQUQpKSwgT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJbGV2ZWwyX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgIE9NQVBfSUgyX01JUik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlsZXZlbDJfd2FrZSB8PSBPTUFQX0lSUV9CSVQoSU5UX0tFWUJPQVJEKTsKKwkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisKKwkJLyogSU5UXzE2MTBfV0FLRV9VUF9SRVEgaXMgbmVlZGVkIGZvciBHUElPIHdha2V1cC4uLiAqLwogCQlvbWFwX3dyaXRlbCh+T01BUF9JUlFfQklUKElOVF8xNjEwX1dBS0VfVVBfUkVRKSwgT01BUF9JSDJfMV9NSVIpOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8yX01JUik7CiAJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfSUgyXzNfTUlSKTsKQEAgLTE4NSw3ICsxOTYsMTcgQEAKICAJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KIAkgKi8KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKIAkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CkBAIC0yODAsNyArMzAxLDEzIEBACiAJVUxQRF9SRVNUT1JFKFVMUERfQ0xPQ0tfQ1RSTCk7CiAJVUxQRF9SRVNUT1JFKFVMUERfU1RBVFVTX1JFUSk7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlNUFVJNzMwX1JFU1RPUkUoRU1JRlNfQ09ORklHKTsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZGX1NEUkFNX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShPTUFQX0lIMV9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMF9NSVIpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDJfMV9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0NUUkwpOwogCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9BUElfQ09ORklHKTsKQEAgLTM1NSw3ICszODIsMTQgQEAKIAlVTFBEX1NBVkUoVUxQRF9EUExMX0NUUkwpOwogCVVMUERfU0FWRShVTFBEX1BPV0VSX0NUUkwpOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CisJCU1QVUk3MzBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1NBVkUoTVBVSV9DVFJMKTsKIAkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOwogCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKQEAgLTQwNCw3ICs0MzgsMjEgQEAKIAkJICAgVUxQRF9TSE9XKFVMUERfU1RBVFVTX1JFUSksCiAJCSAgIFVMUERfU0hPVyhVTFBEX1BPV0VSX0NUUkwpKTsKIAotCQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwkJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKKwkJCSAgICJNUFVJNzMwX0NUUkxfUkVHCSAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgorCQkJICAgIk1QVUk3MzBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgorCSAiTVBVSTczMF9EU1BfQVBJX0NPTkZJR19SRUc6ICAweCUtOHggXG4iCisJICJNUFVJNzMwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKKwkgIk1QVUk3MzBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKKwkgTVBVSTczMF9TSE9XKE1QVUlfQ1RSTCksCisJIE1QVUk3MzBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfQVBJX0NPTkZJRyksCisJIE1QVUk3MzBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coRU1JRlNfQ09ORklHKSk7CisJCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJCW15X2J1ZmZlcl9vZmZzZXQgKz0gc3ByaW50ZihteV9iYXNlICsgbXlfYnVmZmVyX29mZnNldCwKIAkJCSAgICJNUFVJMTUxMF9DVFJMX1JFRyAgICAgICAgICAgICAweCUtOHggXG4iCiAJCQkgICAiTVBVSTE1MTBfRFNQX1NUQVRVU19SRUc6ICAgICAgMHglLTh4IFxuIgpAQCAtNTUzLDcgKzYwMSwxMiBAQAogCSAqIFRoZXNlIHJvdXRpbmVzIG5lZWQgdG8gYmUgaW4gU1JBTSBhcyB0aGF0J3MgdGhlIG9ubHkKIAkgKiBtZW1vcnkgdGhlIE1QVSBjYW4gc2VlIHdoZW4gaXQgd2FrZXMgdXAuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJb21hcF9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kLAorCQkJCQkJb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7CisJCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9jcHVfc3VzcGVuZCwKKwkgb21hcDczMF9jcHVfc3VzcGVuZF9zeik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kLAogCQkJCQkJb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOwogCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNTEwX2NwdV9zdXNwZW5kLApAQCAtNTcyLDcgKzYyNSwxMSBAQAogCiAJcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKIAotCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCXNldHVwX2lycShJTlRfNzMwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwkJc2V0dXBfaXJxKElOVF8xNjEwX1dBS0VfVVBfUkVRLCAmb21hcF93YWtldXBfaXJxKTsKKwogI2lmIDAKIAkvKiAtLS0gQkVHSU4gQk9BUkQtREVQRU5ERU5UIENPREUgLS0tICovCiAJLyogU2xlZXB4IG1hc2sgZGlyZWN0aW9uICovCkBAIC01OTEsNyArNjQ4LDkgQEAKIAlvbWFwX3dyaXRldyhVTFBEX1BPV0VSX0NUUkxfUkVHX1ZBTCwgVUxQRF9QT1dFUl9DVFJMKTsKIAogCS8qIENvbmZpZ3VyZSBJRExFQ1QzICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CiAKIAlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CkBAIC02MDAsOCArNjU5LDEwIEBACiAJb21hcF9wbV9pbml0X3Byb2MoKTsKICNlbmRpZgogCi0JLyogY29uZmlndXJlIExPV19QV1IgcGluICovCi0Jb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KKwkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwppbmRleCA5Zjc0NTgzLi40Y2Q3ZDI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsaW51eC9hcmNoL2FybS9wbGF0LW9tYXAvc2xlZXAuUwogICoKLSAqIExvdy1sZXZlbCBPTUFQMTUxMC8xNjEwIHNsZWVwL3dha2VVcCBzdXBwb3J0CisgKiBMb3ctbGV2ZWwgT01BUDczMC8xNTEwLzE2MTAgc2xlZXAvd2FrZVVwIHN1cHBvcnQKICAqCiAgKiBJbml0aWFsIFNBMTExMCBjb2RlOgogICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgpAQCAtNTIsNyArNTIsNTcgQEAKICAqICAgICAgIHByb2Nlc3NvciBzcGVjaWZpYyBmdW5jdGlvbnMgaGVyZS4KICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKQorCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIKKwltb3YJcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBnZXQgQVJNX0lETEVDVDIgaW50byByMgorCWxkcmgJcjIsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCUAgZ2V0IEFSTV9JRExFQ1QxIGludG8gcjEKKwlsZHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjMsIHIxLCAjT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVCAmIDB4ZmZmZgorCXN0cmgJcjMsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbW92CXI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYKKwlvcnIJcjUsIHI1LCAjSURMRV9XQUlUX0NZQ0xFUyAmIDB4ZmYwMAorbF83MzA6CXN1YnMJcjUsIHI1LCAjMQorCWJuZQlsXzczMAorLyoKKyAqIExldCdzIHdhaXQgZm9yIHRoZSBuZXh0IGNsb2NrIHRpY2sgdG8gd2FrZSB1cyB1cC4KKyAqLworCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorICovCisKKwlAIHJlc3RvcmUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyIGFuZCByZXR1cm4KKwlAIHIxIGhhcyBBUk1fSURMRUNUMSBhbmQgcjIgc3RpbGwgaGFzIEFSTV9JRExFQ1QyCisJc3RyaAlyMiwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyaAlyMSwgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlsZG1mZAlzcCEsIHtyMCAtIHIxMiwgcGN9CQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisKK0VOVFJZKG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opCisJLndvcmQJLiAtIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQNzMwICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQpCiAKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCkBAIC0xMDAsNyArMTUwLDcgQEAKIAogRU5UUlkob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opCiAJLndvcmQJLiAtIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1MTAgKi8KKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIEVOVFJZKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKQpAQCAtMTY5LDcgKzIxOSw4NiBAQAogICoKICAqLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kKQorCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0KKworCUAgRHJhaW4gd3JpdGUgY2FjaGUKKwltb3YJcjQsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQKKwlub3AKKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgVHJhZmZpYyBDb250cm9sbGVyCisJbW92CXI2LCAjVENNSUZfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI2LCByNiwgI1RDTUlGX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgcHJlcGFyZSB0byBwdXQgU0RSQU0gaW50byBzZWxmLXJlZnJlc2ggbWFudWFsbHkKKwlsZHIJcjcsIFtyNiwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjksIHI3LCAjU0VMRl9SRUZSRVNIX01PREUgJiAweGZmMDAwMDAwCisJb3JyCXI5LCByOSwgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHgwMDAwMDBmZgorCXN0cglyOSwgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBwcmVwYXJlIHRvIHB1dCBFTUlGUyB0byBTbGVlcAorCWxkcglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCW9ycglyOSwgcjgsICNJRExFX0VNSUZTX1JFUVVFU1QgJiAweGZmCisJc3RyCXI5LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMgorCW1vdglyNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweGZmMDAwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwZmYwMDAwCisJb3JyCXI0LCByNCwgI0NMS0dFTl9SRUdfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHR1cm4gb2ZmIGNsb2NrIGRvbWFpbnMKKwlAIGRvIG5vdCBkaXNhYmxlIFBFUkNLICgweDA0KQorCW1vdglyNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXI1LCByNSwgI09NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXI1LCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcmVxdWVzdCBBUk0gaWRsZQorCW1vdglyMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmCisJb3JyCXIzLCByMywgI09NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwgJiAweGZmMDAKKwlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgZGlzYWJsZSBpbnN0cnVjdGlvbiBjYWNoZQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAKKwliaWMJcjIsIHI5LCAjMHgxMDAwCisJbWNyCXAxNSwgMCwgcjIsIGMxLCBjMCwgMAorCW5vcAorCisvKgorICogTGV0J3Mgd2FpdCBmb3IgdGhlIG5leHQgd2FrZSB1cCBldmVudCB0byB3YWtlIHVzIHVwLiByMCBjYW4ndCBiZQorICogdXNlZCBoZXJlIGJlY2F1c2UgcjAgaG9sZHMgQVJNX0lETEVDVDEKKyAqLworCW1vdglyMiwgIzAKKwltY3IJcDE1LCAwLCByMiwgYzcsIGMwLCA0CQlAIHdhaXQgZm9yIGludGVycnVwdAorLyoKKyAqIG9tYXA3MzBfY3B1X3N1c3BlbmQoKSdzIHJlc3VtZSBwb2ludC4KKyAqCisgKiBJdCB3aWxsIGp1c3Qgc3RhcnQgZXhlY3V0aW5nIGhlcmUsIHNvIHdlJ2xsIHJlc3RvcmUgc3R1ZmYgZnJvbSB0aGUKKyAqIHN0YWNrLgorICovCisJQCByZS1lbmFibGUgSWNhY2hlCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMAorCisJQCByZXNldCB0aGUgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyLgorCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjAsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBSZXN0b3JlIEVNSUZGIGNvbnRyb2xzCisJc3RyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJc3RyCXI4LCBbcjYsICNFTUlGU19DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQorCitFTlRSWShvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwNzMwX2NwdV9zdXNwZW5kCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDczMCAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMjQxLDcgKzM3MCw3IEBACiAKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMTUxMF9jcHVfc3VzcGVuZAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiBFTlRSWShvbWFwMTYxMF9jcHVfc3VzcGVuZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IDdhZDY5ZjEuLjc5MmY2NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjAsMTAgKzIwLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2luY2x1ZGUgInNyYW0uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9zcmFtLmg+CiAKLSNkZWZpbmUgT01BUDFfU1JBTV9CQVNFCQkweGQwMDAwMDAwCi0jZGVmaW5lIE9NQVAxX1NSQU1fU1RBUlQJMHgyMDAwMDAwMAorI2RlZmluZSBPTUFQMV9TUkFNX1BBCQkweDIwMDAwMDAwCisjZGVmaW5lIE9NQVAxX1NSQU1fVkEJCTB4ZDAwMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9QQQkJMHg0MDIwMDAwMAorI2RlZmluZSBPTUFQMl9TUkFNX1ZBCQkweGQwMDAwMDAwCisKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4ODAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcF9zcmFtX2Jhc2U7CkBAIC0zMSwzNyArMzQsNDAgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9jZWlsOwogCiAvKgotICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZToKLSAqIDczMCA9IDIwMEssIDE1MTAgPSA1MTJLLCA1OTEyID0gMjU2SywgMTYxMCA9IDE2SywgMTcxMCA9IDE2SworICogVGhlIGFtb3VudCBvZiBTUkFNIGRlcGVuZHMgb24gdGhlIGNvcmUgdHlwZS4KICAqIE5vdGUgdGhhdCB3ZSBjYW5ub3QgdHJ5IHRvIHRlc3QgZm9yIFNSQU0gaGVyZSBiZWNhdXNlIHdyaXRlcwogICogdG8gc2VjdXJlIFNSQU0gd2lsbCBoYW5nIHRoZSBzeXN0ZW0uIEFsc28gdGhlIFNSQU0gaXMgbm90CiAgKiB5ZXQgbWFwcGVkIGF0IHRoaXMgcG9pbnQuCiAgKi8KIHZvaWQgX19pbml0IG9tYXBfZGV0ZWN0X3NyYW0odm9pZCkKIHsKLQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fQkFTRTsKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7CisJZWxzZQorCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAyX1NSQU1fVkE7CiAKIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQlvbWFwX3NyYW1fc2l6ZSA9IDB4ODAwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsJLyogMjAwSyAqLworCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQorCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzAwMDA7CS8qIDE5MksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTAoKSB8fCBjcHVfaXNfb21hcDE2MjEoKSB8fCBjcHVfaXNfb21hcDE3MTAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CisJCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOwkvKiAxNksgKi8KIAllbHNlIGlmIChjcHVfaXNfb21hcDE2MTEoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDNlODAwOworCQlvbWFwX3NyYW1fc2l6ZSA9IDB4M2U4MDA7CS8qIDI1MEsgKi8KKwllbHNlIGlmIChjcHVfaXNfb21hcDI0MjAoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweGEwMDE0OwkvKiA2NDBLICovCiAJZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRldGVjdCBTUkFNIHNpemVcbiIpOwogCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTUkFNIHNpemU6IDB4JWx4XG4iLCBvbWFwX3NyYW1fc2l6ZSk7CiAJb21hcF9zcmFtX2NlaWwgPSBvbWFwX3NyYW1fYmFzZSArIG9tYXBfc3JhbV9zaXplOwogfQogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXBfc3JhbV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7CS8qIC5sZW5ndGggZ2V0cyBmaWxsZWQgaW4gYXQgcnVudGltZSAqLwotCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fQkFTRSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9NQVAxX1NSQU1fU1RBUlQpLAorCQkudmlydHVhbAk9IE9NQVAxX1NSQU1fVkEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMV9TUkFNX1BBKSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfQogfTsKQEAgLTc2LDEwICs4MiwxOSBAQAogCWlmIChvbWFwX3NyYW1fc2l6ZSA9PSAwKQogCQlyZXR1cm47CiAKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCA9IE9NQVAyX1NSQU1fVkE7CisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiA9IF9fcGh5c190b19wZm4oT01BUDJfU1JBTV9QQSk7CisJfQorCiAJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoID0gKG9tYXBfc3JhbV9zaXplICsgUEFHRV9TSVpFLTEpL1BBR0VfU0laRTsKIAlvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGggKj0gUEFHRV9TSVpFOwogCWlvdGFibGVfaW5pdChvbWFwX3NyYW1faW9fZGVzYywgQVJSQVlfU0laRShvbWFwX3NyYW1faW9fZGVzYykpOwogCisJcHJpbnRrKEtFUk5fSU5GTyAiU1JBTTogTWFwcGVkIHBhIDB4JTA4bHggdG8gdmEgMHglMDhseCBzaXplOiAweCVseFxuIiwKKwkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuLCBvbWFwX3NyYW1faW9fZGVzY1swXS52aXJ0dWFsLAorCSAgICAgICBvbWFwX3NyYW1faW9fZGVzY1swXS5sZW5ndGgpOworCiAJLyoKIAkgKiBMb29rcyBsaWtlIHdlIG5lZWQgdG8gcHJlc2VydmUgc29tZSBib290bG9hZGVyIGNvZGUgYXQgdGhlCiAJICogYmVnaW5uaW5nIG9mIFNSQU0gZm9yIGp1bXBpbmcgdG8gZmxhc2ggZm9yIHJlYm9vdCB0byB3b3JrLi4uCkBAIC04OCwxNiArMTAzLDYgQEAKIAkgICAgICAgb21hcF9zcmFtX3NpemUgLSBTUkFNX0JPT1RMT0FERVJfU1opOwogfQogCi1zdGF0aWMgdm9pZCAoKl9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKSh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKSA9IE5VTEw7Ci0KLXZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQotewotCWlmIChfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9PSBOVUxMKQotCQlwYW5pYygiQ2Fubm90IHVzZSBTUkFNIik7Ci0KLQlyZXR1cm4gX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2soZHBsbGN0bCwgY2tjdGwpOwotfQotCiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKHNpemUgPiAob21hcF9zcmFtX2NlaWwgLSAob21hcF9zcmFtX2Jhc2UgKyBTUkFNX0JPT1RMT0FERVJfU1opKSkgewpAQCAtMTExLDEwICsxMTYsOTQgQEAKIAlyZXR1cm4gKHZvaWQgKilvbWFwX3NyYW1fY2VpbDsKIH0KIAotdm9pZCBfX2luaXQgb21hcF9zcmFtX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIG9tYXBfc3JhbV9lcnJvcih2b2lkKQoreworCXBhbmljKCJVbmluaXRpYWxpemVkIFNSQU0gZnVuY3Rpb25cbiIpOworfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKKworc3RhdGljIHZvaWQgKCpfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jaykodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CisKK3ZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKQoreworCWlmICghX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2spCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKGRwbGxjdGwsIGNrY3RsKTsKK30KKworaW50IF9faW5pdCBvbWFwMV9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBvbWFwMV9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKKworc3RhdGljIHZvaWQgKCpfb21hcDJfc3JhbV9kZHJfaW5pdCkodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKKwkJCSAgICAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKKwordm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCSAgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKQoreworCWlmICghX29tYXAyX3NyYW1fZGRyX2luaXQpCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwMl9zcmFtX2Rkcl9pbml0KHNsb3dfZGxsX2N0cmwsIGZhc3RfZGxsX2N0cmwsCisJCQkJICAgIGJhc2VfY3MsIGZvcmNlX3VubG9jayk7Cit9CisKK3N0YXRpYyB2b2lkICgqX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMpKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwKKwkJCQkJICB1MzIgbWVtX3R5cGUpOworCit2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLCB1MzIgbWVtX3R5cGUpCit7CisJaWYgKCFfb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYykKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMocGVyZl9sZXZlbCwgZGxsX3ZhbCwgbWVtX3R5cGUpOworfQorCitzdGF0aWMgdTMyICgqX29tYXAyX3NldF9wcmNtKSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CisKK3UzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcykKK3sKKwlpZiAoIV9vbWFwMl9zZXRfcHJjbSkKKwkJb21hcF9zcmFtX2Vycm9yKCk7CisKKwlyZXR1cm4gX29tYXAyX3NldF9wcmNtKGRwbGxfY3RybF92YWwsIHNkcmNfcmZyX3ZhbCwgYnlwYXNzKTsKK30KKworaW50IF9faW5pdCBvbWFwMl9zcmFtX2luaXQodm9pZCkKK3sKKwlfb21hcDJfc3JhbV9kZHJfaW5pdCA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fZGRyX2luaXQsIHNyYW1fZGRyX2luaXRfc3opOworCisJX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMgPSBvbWFwX3NyYW1fcHVzaChzcmFtX3JlcHJvZ3JhbV9zZHJjLAorCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3opOworCV9vbWFwMl9zZXRfcHJjbSA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fc2V0X3ByY20sIHNyYW1fc2V0X3ByY21fc3opOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBvbWFwMl9zcmFtX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCitpbnQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCiB7CiAJb21hcF9kZXRlY3Rfc3JhbSgpOwogCW9tYXBfbWFwX3NyYW0oKTsKLQlfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayA9IG9tYXBfc3JhbV9wdXNoKHNyYW1fcmVwcm9ncmFtX2Nsb2NrLAotCQkJCQkJICAgIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6KTsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCW9tYXAxX3NyYW1faW5pdCgpOworCWVsc2UKKwkJb21hcDJfc3JhbV9pbml0KCk7CisKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTk4NGVmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uaAotICoKLSAqIEludGVyZmFjZSBmb3IgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBydW4gaW4gaW50ZXJuYWwgU1JBTQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKLQotZXh0ZXJuIHZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1leHRlcm4gdm9pZCBvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpOwotCi0vKiBEbyBub3QgdXNlIHRoZXNlICovCi1leHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwppbmRleCAyMDVlMmQwLi4wMGFmYzdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCkBAIC05MSw2ICs5MSw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVBfT1RHKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQorCiBzdGF0aWMgdTMyIF9faW5pdCBvbWFwX3VzYjBfaW5pdCh1bnNpZ25lZCBud2lyZXMsIHVuc2lnbmVkIGlzX2RldmljZSkKIHsKIAl1MzIJc3lzY29uMSA9IDA7CkBAIC0yNzEsNiArMjczLDggQEAKIAlyZXR1cm4gc3lzY29uMSA8PCAyNDsKIH0KIAorI2VuZGlmCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZglkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX09NQVApIHx8IFwKQEAgLTQ5NCw3ICs0OTgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZglDT05GSUdfQVJDSF9PTUFQMTVYWAogCiAjZGVmaW5lIFVMUERfRFBMTF9DVFJMX1JFRwlfX1JFRzE2KFVMUERfRFBMTF9DVFJMKQogI2RlZmluZSBEUExMX0lPQgkJKDEgPDwgMTMpCkBAIC01MDcsNyArNTExLDYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMTUxMF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcpCiB7Ci0JaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJb21hcF91c2IwX2luaXQoY29uZmlnLT5waW5zWzBdLCBpc191c2IwX2RldmljZShjb25maWcpKTsKQEAgLTUzOSw2ICs1NDIsOCBAQAogCiAjaWZkZWYJQ09ORklHX1VTQl9HQURHRVRfT01BUAogCWlmIChjb25maWctPnJlZ2lzdGVyX2RldikgeworCQlpbnQgc3RhdHVzOworCiAJCXVkY19kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdWRjX2RldmljZSk7CiAJCWlmIChzdGF0dXMpCkBAIC01NDksNiArNTU0LDggQEAKIAogI2lmCWRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIAlpZiAoY29uZmlnLT5yZWdpc3Rlcl9ob3N0KSB7CisJCWludCBzdGF0dXM7CisKIAkJb2hjaV9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBjb25maWc7CiAJCXN0YXR1cyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb2hjaV9kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jIGIvYXJjaC9pMzg2L3BjaS9maXh1cC5jCmluZGV4IDM5ODQyMjYuLmVlYjFiMWYyZCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwpAQCAtNDMzLDkgKzQzMyw4IEBACiAJCXJldHVybjsgLyogb25seSBhcHBsaWVzIHRvIGNlcnRhaW4gVG9zaGliYXMgKHNvIGZhcikgKi8KIAogCS8qIFJlc3RvcmUgY29uZmlnIHNwYWNlIG9uIFRvc2hpYmEgbGFwdG9wcyAqLwotCW1kZWxheSgxMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdG9zaGliYV9saW5lX3NpemUpOwotCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgZGV2LT5pcnEpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCAodTggKikmZGV2LT5pcnEpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsCiAJCQkgICAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzEsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwppbmRleCBmNzJlYTZhLi5hM2FhNDVjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKQEAgLTk4Nyw3ICs5ODcsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKChyZXMgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgeworCQlpZiAoKHJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbG9jYXRlIHJlc291cmNlIGZvciBpb21lbVxuIik7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggOTY3MzZhMS4uODAxZWVhZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQkoKHN0cnVjdCBmbnB0ciAqKWtyZXRwcm9iZV90cmFtcG9saW5lKS0+aXA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgma3JldHByb2JlX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CisJaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CiAKIAkvKgogCSAqIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuCkBAIC0zNjMsOSArMzYzLDkgQEAKIAkgKiAgICAgICBrcmV0cHJvYmVfdHJhbXBvbGluZQogCSAqLwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKLSAgICAgICAgICAgICAgICBpZiAocmktPnRhc2sgIT0gY3VycmVudCkKKwkJaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCiAJCQkvKiBhbm90aGVyIHRhc2sgaXMgc2hhcmluZyBvdXIgaGFzaCBidWNrZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQkJY29udGludWU7CiAKIAkJaWYgKHJpLT5ycCAmJiByaS0+cnAtPmhhbmRsZXIpCiAJCQlyaS0+cnAtPmhhbmRsZXIocmksIHJlZ3MpOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAJICoga3Byb2JlX2hhbmRsZXIoKSB0aGF0IHdlIGRvbid0IHdhbnQgdGhlIHBvc3RfaGFuZGxlcgogCSAqIHRvIHJ1biAoYW5kIGhhdmUgcmUtZW5hYmxlZCBwcmVlbXB0aW9uKQogCSAqLwotICAgICAgICByZXR1cm4gMTsKKwlyZXR1cm4gMTsKIH0KIAogLyogQ2FsbGVkIHdpdGgga3JldHByb2JlX2xvY2sgaGVsZCAqLwpAQCAtNzM5LDEyICs3MzksMTYgQEAKIAogCXN3aXRjaCh2YWwpIHsKIAljYXNlIERJRV9CUkVBSzoKLQkJaWYgKHByZV9rcHJvYmVzX2hhbmRsZXIoYXJncykpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJLyogZXJyIGlzIGJyZWFrIG51bWJlciBmcm9tIGlhNjRfYmFkX2JyZWFrKCkgKi8KKwkJaWYgKGFyZ3MtPmVyciA9PSAweDgwMjAwIHx8IGFyZ3MtPmVyciA9PSAweDgwMzAwKQorCQkJaWYgKHByZV9rcHJvYmVzX2hhbmRsZXIoYXJncykpCisJCQkJcmV0ID0gTk9USUZZX1NUT1A7CiAJCWJyZWFrOwotCWNhc2UgRElFX1NTOgotCQlpZiAocG9zdF9rcHJvYmVzX2hhbmRsZXIoYXJncy0+cmVncykpCi0JCQlyZXQgPSBOT1RJRllfU1RPUDsKKwljYXNlIERJRV9GQVVMVDoKKwkJLyogZXJyIGlzIHZlY3RvciBudW1iZXIgZnJvbSBpYTY0X2ZhdWx0KCkgKi8KKwkJaWYgKGFyZ3MtPmVyciA9PSAzNikKKwkJCWlmIChwb3N0X2twcm9iZXNfaGFuZGxlcihhcmdzLT5yZWdzKSkKKwkJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7CiAJY2FzZSBESUVfUEFHRV9GQVVMVDoKIAkJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCmluZGV4IDUyYzQ3ZGEuLjM1NWFmMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYwpAQCAtNTEsNiArNTEsOSBAQAogICoKICAqIDIwMDUtMDgtMTIgS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4KICAqCSAgICAgIENvbnZlcnQgTUNBL0lOSVQgaGFuZGxlcnMgdG8gdXNlIHBlciBldmVudCBzdGFja3MgYW5kIFNBTC9PUyBzdGF0ZS4KKyAqCisgKiAyMDA1LTEwLTA3IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CisgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTU4LDcgKzYxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtNjksNiArNzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL21lbWluaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpAQCAtMTMyLDYgKzEzNSwxNCBAQAogCiBzdGF0aWMgaW50IG1jYV9pbml0OwogCisKK3N0YXRpYyB2b2lkIGlubGluZQoraWE2NF9tY2Ffc3Bpbihjb25zdCBjaGFyICpmdW5jKQoreworCXByaW50ayhLRVJOX0VNRVJHICIlczogc3Bpbm5pbmcgaGVyZSwgbm90IHJldHVybmluZyB0byBTQUxcbiIsIGZ1bmMpOworCXdoaWxlICgxKQorCQljcHVfcmVsYXgoKTsKK30KIC8qCiAgKiBJQTY0X01DQSBsb2cgc3VwcG9ydAogICovCkBAIC01MjYsMTMgKzUzNywxNiBAQAogICogIE91dHB1dHMgOiAgIE5vbmUKICAqLwogc3RhdGljIGlycXJldHVybl90Ci1pYTY0X21jYV9yZW5kZXpfaW50X2hhbmRsZXIoaW50IHJlbmRlel9pcnEsIHZvaWQgKmFyZywgc3RydWN0IHB0X3JlZ3MgKnB0cmVncykKK2lhNjRfbWNhX3JlbmRlel9pbnRfaGFuZGxlcihpbnQgcmVuZGV6X2lycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkvKiBNYXNrIGFsbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9ET05FOwogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIFNBTCBtb25hcmNoIHRoYXQgdGhlIHNsYXZlIGhhcwpAQCAtNTQwLDEwICs1NTQsMTggQEAKIAkgKi8KIAlpYTY0X3NhbF9tY19yZW5kZXooKTsKIAorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX1BST0NFU1MsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwogCS8qIFdhaXQgZm9yIHRoZSBtb25hcmNoIGNwdSB0byBleGl0LiAqLwogCXdoaWxlIChtb25hcmNoX2NwdSAhPSAtMSkKIAkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KIAorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisKIAkvKiBFbmFibGUgYWxsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtOTMzLDYgKzk1NSw5IEBACiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwogCXByZXZpb3VzX2N1cnJlbnQgPSBpYTY0X21jYV9tb2RpZnlfb3JpZ2luYWxfc3RhY2socmVncywgc3csIHNvcywgIk1DQSIpOwogCW1vbmFyY2hfY3B1ID0gY3B1OworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9FTlRFUiwgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7CiAKIAkvKiBXYWtldXAgYWxsIHRoZSBwcm9jZXNzb3JzIHdoaWNoIGFyZSBzcGlubmluZyBpbiB0aGUgcmVuZGV6dm91cyBsb29wLgpAQCAtOTQyLDYgKzk2Nyw5IEBACiAJICogc3Bpbm5pbmcgaW4gU0FMIGRvZXMgbm90IHdvcmsuCiAJICovCiAJaWE2NF9tY2Ffd2FrZXVwX2FsbCgpOworCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9QUk9DRVNTLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBHZXQgdGhlIE1DQSBlcnJvciByZWNvcmQgYW5kIGxvZyBpdCAqLwogCWlhNjRfbWNhX2xvZ19zYWxfZXJyb3JfcmVjb3JkKFNBTF9JTkZPX1RZUEVfTUNBKTsKQEAgLTk2MCw2ICs5ODgsOSBAQAogCQlpYTY0X3NhbF9jbGVhcl9zdGF0ZV9pbmZvKFNBTF9JTkZPX1RZUEVfTUNBKTsKIAkJc29zLT5vc19zdGF0dXMgPSBJQTY0X01DQV9DT1JSRUNURUQ7CiAJfQorCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIDAsIDAsIHJlY292ZXIpCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJc2V0X2N1cnJfdGFzayhjcHUsIHByZXZpb3VzX2N1cnJlbnQpOwogCW1vbmFyY2hfY3B1ID0gLTE7CkBAIC0xMTg4LDYgKzEyMTksMzcgQEAKIAogI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCiAKK3N0YXRpYyBpbnQKK2RlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3Moc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgYzsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OworCWlmICh2YWwgIT0gRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisJcHJpbnRrKEtFUk5fRVJSICJQcm9jZXNzZXMgaW50ZXJydXB0ZWQgYnkgSU5JVCAtIik7CisJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CisJCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqczsKKwkJdCA9IF9fdmEoX19wZXJfY3B1X21jYVtjXSArIElBNjRfTUNBX0NQVV9JTklUX1NUQUNLX09GRlNFVCk7CisJCXMgPSAoc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICopKChjaGFyICopdCArIE1DQV9TT1NfT0ZGU0VUKTsKKwkJZyA9IHMtPnByZXZfdGFzazsKKwkJaWYgKGcpIHsKKwkJCWlmIChnLT5waWQpCisJCQkJcHJpbnRrKCIgJWQiLCBnLT5waWQpOworCQkJZWxzZQorCQkJCXByaW50aygiICVkIChjcHUgJWQgdGFzayAweCVwKSIsIGctPnBpZCwgdGFza19jcHUoZyksIGcpOworCQl9CisJfQorCXByaW50aygiXG5cbiIpOworCWlmIChyZWFkX3RyeWxvY2soJnRhc2tsaXN0X2xvY2spKSB7CisJCWRvX2VhY2hfdGhyZWFkIChnLCB0KSB7CisJCQlwcmludGsoIlxuQmFja3RyYWNlIG9mIHBpZCAlZCAoJXMpXG4iLCB0LT5waWQsIHQtPmNvbW0pOworCQkJc2hvd19zdGFjayh0LCBOVUxMKTsKKwkJfSB3aGlsZV9lYWNoX3RocmVhZCAoZywgdCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwl9CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCiAvKgogICogQyBwb3J0aW9uIG9mIHRoZSBPUyBJTklUIGhhbmRsZXIKICAqCkBAIC0xMjEyLDggKzEyNzQsNyBAQAogCXN0YXRpYyBhdG9taWNfdCBzbGF2ZXM7CiAJc3RhdGljIGF0b21pY190IG1vbmFyY2hzOwogCXRhc2tfdCAqcHJldmlvdXNfY3VycmVudDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpLCBjOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KIAljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwpAQCAtMTI1Myw4ICsxMzE0LDE3IEBACiAJCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0lOSVQ7CiAJCXdoaWxlIChtb25hcmNoX2NwdSA9PSAtMSkKIAkJICAgICAgIGNwdV9yZWxheCgpOwkvKiBzcGluIHVudGlsIG1vbmFyY2ggZW50ZXJzICovCisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQkJPT0gTk9USUZZX1NUT1ApCisJCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJd2hpbGUgKG1vbmFyY2hfY3B1ICE9IC0xKQogCQkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBsZWF2ZXMgKi8KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKIAkJc2V0X2N1cnJfdGFzayhjcHUsIHByZXZpb3VzX2N1cnJlbnQpOwogCQlpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NwdV0gPSBJQTY0X01DQV9SRU5ERVpfQ0hFQ0tJTl9OT1RET05FOwpAQCAtMTI2Myw2ICsxMzMzLDkgQEAKIAl9CiAKIAltb25hcmNoX2NwdSA9IGNwdTsKKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0VOVEVSLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCiAJLyoKIAkgKiBXYWl0IGZvciBhIGJpdC4gIE9uIHNvbWUgbWFjaGluZXMgKGUuZy4sIEhQJ3MgengyMDAwIGFuZCB6eDYwMDAsIElOSVQgY2FuIGJlCkBAIC0xMjczLDI3ICsxMzQ2LDE2IEBACiAJcHJpbnRrKCJEZWxheWluZyBmb3IgNSBzZWNvbmRzLi4uXG4iKTsKIAl1ZGVsYXkoNSoxMDAwMDAwKTsKIAlpYTY0X3dhaXRfZm9yX3NsYXZlcyhjcHUpOwotCXByaW50ayhLRVJOX0VSUiAiUHJvY2Vzc2VzIGludGVycnVwdGVkIGJ5IElOSVQgLSIpOwotCWZvcl9lYWNoX29ubGluZV9jcHUoYykgewotCQlzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKnM7Ci0JCXQgPSBfX3ZhKF9fcGVyX2NwdV9tY2FbY10gKyBJQTY0X01DQV9DUFVfSU5JVF9TVEFDS19PRkZTRVQpOwotCQlzID0gKHN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqKSgoY2hhciAqKXQgKyBNQ0FfU09TX09GRlNFVCk7Ci0JCWcgPSBzLT5wcmV2X3Rhc2s7Ci0JCWlmIChnKSB7Ci0JCQlpZiAoZy0+cGlkKQotCQkJCXByaW50aygiICVkIiwgZy0+cGlkKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIiAlZCAoY3B1ICVkIHRhc2sgMHglcCkiLCBnLT5waWQsIHRhc2tfY3B1KGcpLCBnKTsKLQkJfQotCX0KLQlwcmludGsoIlxuXG4iKTsKLQlpZiAocmVhZF90cnlsb2NrKCZ0YXNrbGlzdF9sb2NrKSkgewotCQlkb19lYWNoX3RocmVhZCAoZywgdCkgewotCQkJcHJpbnRrKCJcbkJhY2t0cmFjZSBvZiBwaWQgJWQgKCVzKVxuIiwgdC0+cGlkLCB0LT5jb21tKTsKLQkJCXNob3dfc3RhY2sodCwgTlVMTCk7Ci0JCX0gd2hpbGVfZWFjaF90aHJlYWQgKGcsIHQpOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JfQorCS8qIElmIG5vYm9keSBpbnRlcmNlcHRzIERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUyB0aGVuIHdlIGRyb3AgdGhyb3VnaAorCSAqIHRvIGRlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3MoKSBhYm92ZSBhbmQganVzdCBwcmludCBhbGwgdGhlCisJICogdGFza3MuCisJICovCisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLCAiSU5JVCIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfTEVBVkUsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJcHJpbnRrKCJcbklOSVQgZHVtcCBjb21wbGV0ZS4gIE1vbmFyY2ggb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CiAJYXRvbWljX2RlYygmbW9uYXJjaHMpOwogCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKQEAgLTE0NjIsNiArMTUyNCwxMCBAQAogCXM2NCByYzsKIAlzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsIGlzcnY7CiAJdTY0IHRpbWVvdXQgPSBJQTY0X01DQV9SRU5ERVpfVElNRU9VVDsJLyogcGxhdGZvcm0gc3BlY2lmaWMgKi8KKwlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGRlZmF1bHRfaW5pdF9tb25hcmNoX25iID0geworCQkubm90aWZpZXJfY2FsbCA9IGRlZmF1bHRfbW9uYXJjaF9pbml0X3Byb2Nlc3MsCisJCS5wcmlvcml0eSA9IDAvKiB3ZSBuZWVkIHRvIG5vdGlmaWVkIGxhc3QgKi8KKwl9OwogCiAJSUE2NF9NQ0FfREVCVUcoIiVzOiBiZWdpblxuIiwgX19GVU5DVElPTl9fKTsKIApAQCAtMTU1NSw2ICsxNjIxLDEwIEBACiAJCSAgICAgICAiKHN0YXR1cyAlbGQpXG4iLCByYyk7CiAJCXJldHVybjsKIAl9CisJaWYgKHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmZGVmYXVsdF9pbml0X21vbmFyY2hfbmIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIGRlZmF1bHQgbW9uYXJjaCBJTklUIHByb2Nlc3NcbiIpOworCQlyZXR1cm47CisJfQogCiAJSUE2NF9NQ0FfREVCVUcoIiVzOiByZWdpc3RlcmVkIE9TIElOSVQgaGFuZGxlciB3aXRoIFNBTFxuIiwgX19GVU5DVElPTl9fKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmMgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwppbmRleCBlYjM5YmM5Li4zNDkyZTMyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYwpAQCAtNTQ3LDkgKzU0NywyMCBAQAogCQkocGFsX3Byb2Nlc3Nvcl9zdGF0ZV9pbmZvX3QqKXBlaWR4X3BzcChwZWlkeCk7CiAKIAkvKgotCSAqIFdlIGNhbm5vdCByZWNvdmVyIGVycm9ycyB3aXRoIG90aGVyIHRoYW4gYnVzX2NoZWNrLgorCSAqIFByb2Nlc3NvciByZWNvdmVyeSBzdGF0dXMgbXVzdCBrZXkgb2ZmIG9mIHRoZSBQQUwgcmVjb3ZlcnkKKwkgKiBzdGF0dXMgaW4gdGhlIFByb2Nlc3NvciBTdGF0ZSBQYXJhbWV0ZXIuCiAJICovCi0JaWYgKHBzcC0+Y2MgfHwgcHNwLT5yYyB8fCBwc3AtPnVjKQorCisJLyoKKwkgKiBUaGUgbWFjaGluZSBjaGVjayBpcyBjb3JyZWN0ZWQuCisJICovCisJaWYgKHBzcC0+Y20gPT0gMSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIFRoZSBlcnJvciB3YXMgbm90IGNvbnRhaW5lZC4gIFNvZnR3YXJlIG11c3QgYmUgcmVzZXQuCisJICovCisJaWYgKHBzcC0+dXMgfHwgcHNwLT5jaSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC01NzAsOCArNTgxLDYgQEAKIAkJcmV0dXJuIDA7CiAJaWYgKHBiY2ktPmViICYmIHBiY2ktPmJzaSA+IDApCiAJCXJldHVybiAwOwotCWlmIChwc3AtPmNpID09IDApCi0JCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGlzIGlzIGEgbG9jYWwgTUNBIGFuZCBlc3RpbWF0ZWQgYXMgcmVjb3ZlcmJsZSBleHRlcm5hbCBidXMgZXJyb3IuCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDY0MGQ2OTAuLmU5MmVhNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC00LDYgKzQsOSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKiAwNC8xMS8xNyBBc2hvayBSYWoJPGFzaG9rLnJhakBpbnRlbC5jb20+IEFkZGVkIENQVSBIb3RwbHVnIFN1cHBvcnQKKyAqCisgKiAyMDA1LTEwLTA3IEtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+CisgKgkgICAgICBBZGQgbm90aWZ5X2RpZSgpIGhvb2tzLgogICovCiAjZGVmaW5lIF9fS0VSTkVMX1NZU0NBTExTX18JLyogc2VlIDxhc20vdW5pc3RkLmg+ICovCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0zNCw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9pYTMyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CkBAIC04MDgsMTIgKzgxMiwxNCBAQAogdm9pZAogbWFjaGluZV9yZXN0YXJ0IChjaGFyICpyZXN0YXJ0X2NtZCkKIHsKKwkodm9pZCkgbm90aWZ5X2RpZShESUVfTUFDSElORV9SRVNUQVJULCByZXN0YXJ0X2NtZCwgTlVMTCwgMCwgMCwgMCk7CiAJKCplZmkucmVzZXRfc3lzdGVtKShFRklfUkVTRVRfV0FSTSwgMCwgMCwgTlVMTCk7CiB9CiAKIHZvaWQKIG1hY2hpbmVfaGFsdCAodm9pZCkKIHsKKwkodm9pZCkgbm90aWZ5X2RpZShESUVfTUFDSElORV9IQUxULCAiIiwgTlVMTCwgMCwgMCwgMCk7CiAJY3B1X2hhbHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDNhZjZkZTMuLjVhZGQwYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKQEAgLTQ2MSw2ICs0NjEsNyBAQAogI2VuZGlmCiAKIAljcHVfaW5pdCgpOwkvKiBpbml0aWFsaXplIHRoZSBib290c3RyYXAgQ1BVICovCisJbW11X2NvbnRleHRfaW5pdCgpOwkvKiBpbml0aWFsaXplIGNvbnRleHRfaWQgYml0bWFwICovCiAKICNpZmRlZiBDT05GSUdfQUNQSQogCWFjcGlfYm9vdF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwppbmRleCA3NzRmMzRiLi41OGNlMDdlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM4NywxNSArMzg3LDE0IEBACiAJICAgICBzdHJ1Y3Qgc2lnc2NyYXRjaCAqc2NyKQogewogCWV4dGVybiBjaGFyIF9fa2VybmVsX3NpZ3RyYW1wW107Ci0JdW5zaWduZWQgbG9uZyB0cmFtcF9hZGRyLCBuZXdfcmJzID0gMDsKKwl1bnNpZ25lZCBsb25nIHRyYW1wX2FkZHIsIG5ld19yYnMgPSAwLCBuZXdfc3A7CiAJc3RydWN0IHNpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJbG9uZyBlcnI7CiAKLQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSBzY3ItPnB0LnIxMjsKKwluZXdfc3AgPSBzY3ItPnB0LnIxMjsKIAl0cmFtcF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIF9fa2VybmVsX3NpZ3RyYW1wOwotCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYgc2FzX3NzX2ZsYWdzKCh1bnNpZ25lZCBsb25nKSBmcmFtZSkgPT0gMCkgewotCQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSAoKGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplKQotCQkJCQkgJiB+KFNUQUNLX0FMSUdOIC0gMSkpOworCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYgc2FzX3NzX2ZsYWdzKG5ld19zcCkgPT0gMCkgeworCQluZXdfc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKIAkJLyoKIAkJICogV2UgbmVlZCB0byBjaGVjayBmb3IgdGhlIHJlZ2lzdGVyIHN0YWNrIGJlaW5nIG9uIHRoZSBzaWduYWwgc3RhY2sKIAkJICogc2VwYXJhdGVseSwgYmVjYXVzZSBpdCdzIHN3aXRjaGVkIHNlcGFyYXRlbHkgKG1lbW9yeSBzdGFjayBpcyBzd2l0Y2hlZApAQCAtNDA0LDcgKzQwMyw3IEBACiAJCWlmICghcmJzX29uX3NpZ19zdGFjayhzY3ItPnB0LmFyX2JzcHN0b3JlKSkKIAkJCW5ld19yYnMgPSAoY3VycmVudC0+c2FzX3NzX3NwICsgc2l6ZW9mKGxvbmcpIC0gMSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwogCX0KLQlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSBmcmFtZSAtICgoc2l6ZW9mKCpmcmFtZSkgKyBTVEFDS19BTElHTiAtIDEpICYgfihTVEFDS19BTElHTiAtIDEpKTsKKwlmcmFtZSA9ICh2b2lkIF9fdXNlciAqKSAoKG5ld19zcCAtIHNpemVvZigqZnJhbWUpKSAmIC1TVEFDS19BTElHTik7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGZyYW1lLCBzaXplb2YoKmZyYW1lKSkpCiAJCXJldHVybiBmb3JjZV9zaWdzZWd2X2luZm8oc2lnLCBmcmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMgYi9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKaW5kZXggZjk3MDM1OS4uZmJhNWZkZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwpAQCAtMzAsMTcgKzMwLDIwIEBACiBFWFBPUlRfU1lNQk9MKGZwc3dhX2ludGVyZmFjZSk7CiAKIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaWE2NGRpZV9jaGFpbjsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGllX25vdGlmaWVyX2xvY2spOwogCi1pbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCitpbnQKK3JlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCWludCBlcnIgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7Ci0JZXJyID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWVfbm90aWZpZXJfbG9jaywgZmxhZ3MpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZpYTY0ZGllX2NoYWluLCBuYik7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCitpbnQKK3VucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKIAogdm9pZCBfX2luaXQKIHRyYXBfaW5pdCAodm9pZCkKQEAgLTEwNSw2ICsxMDgsNyBAQAogCWlmICgrK2RpZS5sb2NrX293bmVyX2RlcHRoIDwgMykgewogCQlwcmludGsoIiVzWyVkXTogJXMgJWxkIFslZF1cbiIsCiAJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0ciwgZXJyLCArK2RpZV9jb3VudGVyKTsKKwkJKHZvaWQpIG5vdGlmeV9kaWUoRElFX09PUFMsIChjaGFyICopc3RyLCByZWdzLCBlcnIsIDI1NSwgU0lHU0VHVik7CiAJCXNob3dfcmVncyhyZWdzKTsKICAgCX0gZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIlJlY3Vyc2l2ZSBkaWUoKSBmYWlsdXJlLCBvdXRwdXQgc3VwcHJlc3NlZFxuIik7CkBAIC0xNTUsOSArMTU5LDggQEAKIAlzd2l0Y2ggKGJyZWFrX251bSkgewogCSAgICAgIGNhc2UgMDogLyogdW5rbm93biBlcnJvciAodXNlZCBieSBHQ0MgZm9yIF9fYnVpbHRpbl9hYm9ydCgpKSAqLwogCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUssICJicmVhayAwIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQotCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkgeworCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkKIAkJCXJldHVybjsKLQkJfQogCQlkaWVfaWZfa2VybmVsKCJidWdjaGVjayEiLCByZWdzLCBicmVha19udW0pOwogCQlzaWcgPSBTSUdJTEw7IGNvZGUgPSBJTExfSUxMT1BDOwogCQlicmVhazsKQEAgLTIxMCwxNSArMjEzLDYgQEAKIAkJc2lnID0gU0lHSUxMOyBjb2RlID0gX19JTExfQk5ETU9EOwogCQlicmVhazsKIAotCSAgICAgIGNhc2UgMHg4MDIwMDoKLQkgICAgICBjYXNlIDB4ODAzMDA6Ci0JCWlmIChub3RpZnlfZGllKERJRV9CUkVBSywgImtwcm9iZSIsIHJlZ3MsIGJyZWFrX251bSwgVFJBUF9CUktQVCwgU0lHVFJBUCkKLQkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApIHsKLQkJCXJldHVybjsKLQkJfQotCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKLQkJYnJlYWs7Ci0KIAkgICAgICBkZWZhdWx0OgogCQlpZiAoYnJlYWtfbnVtIDwgMHg0MDAwMCB8fCBicmVha19udW0gPiAweDEwMDAwMCkKIAkJCWRpZV9pZl9rZXJuZWwoIkJhZCBicmVhayIsIHJlZ3MsIGJyZWFrX251bSk7CkBAIC0yMjYsNiArMjIwLDkgQEAKIAkJaWYgKGJyZWFrX251bSA8IDB4ODAwMDApIHsKIAkJCXNpZyA9IFNJR0lMTDsgY29kZSA9IF9fSUxMX0JSRUFLOwogCQl9IGVsc2UgeworCQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLLCAiYmFkIGJyZWFrIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQorCQkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCQlyZXR1cm47CiAJCQlzaWcgPSBTSUdUUkFQOyBjb2RlID0gVFJBUF9CUktQVDsKIAkJfQogCX0KQEAgLTU3OCwxMiArNTc1LDExIEBACiAjZW5kaWYKIAkJCWJyZWFrOwogCQkgICAgICBjYXNlIDM1OiBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX0JSQU5DSDsgaWZhID0gMDsgYnJlYWs7Ci0JCSAgICAgIGNhc2UgMzY6Ci0JCQkgICAgICBpZiAobm90aWZ5X2RpZShESUVfU1MsICJzcyIsICZyZWdzLCB2ZWN0b3IsCi0JCQkJCSAgICAgdmVjdG9yLCBTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKLQkJCQkgICAgICByZXR1cm47Ci0JCQkgICAgICBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOyBpZmEgPSAwOyBicmVhazsKKwkJICAgICAgY2FzZSAzNjogc2lnaW5mby5zaV9jb2RlID0gVFJBUF9UUkFDRTsgaWZhID0gMDsgYnJlYWs7CiAJCX0KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0ZBVUxULCAiaWE2NF9mYXVsdCIsICZyZWdzLCB2ZWN0b3IsIHNpZ2luZm8uc2lfY29kZSwgU0lHVFJBUCkKKwkJCSAgICAgICAJPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CiAJCXNpZ2luZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwogCQlzaWdpbmZvLnNpX2Vycm5vID0gMDsKIAkJc2lnaW5mby5zaV9hZGRyICA9ICh2b2lkIF9fdXNlciAqKSBpZmE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggYTg4Y2RiNy4uMGY3NzZiMCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtMzUwLDE0ICszNTAsMTIgQEAKICAqCWZvciBiZXN0LgogICogQG5pZDogbm9kZSBpZAogICogQHBlcm5vZGVzaXplOiBzaXplIG9mIHRoaXMgbm9kZSdzIHBlcm5vZGUgZGF0YQotICogQGFsaWduOiBhbGlnbm1lbnQgdG8gdXNlIGZvciB0aGlzIG5vZGUncyBwZXJub2RlIGRhdGEKICAqLwotc3RhdGljIHZvaWQgX19pbml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9kZXNpemUsCi0JdW5zaWduZWQgbG9uZyBhbGlnbikKK3N0YXRpYyB2b2lkIF9faW5pdCAqbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBlcm5vZGVzaXplKQogewogCXZvaWQgKnB0ciA9IE5VTEw7CiAJdTggYmVzdCA9IDB4ZmY7Ci0JaW50IGJlc3Rub2RlID0gLTEsIG5vZGU7CisJaW50IGJlc3Rub2RlID0gLTEsIG5vZGUsIGFueW5vZGUgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlpZiAobm9kZV9pc3NldChub2RlLCBtZW1vcnlfbGVzc19tYXNrKSkKQEAgLTM2NiwxMyArMzY0LDE1IEBACiAJCQliZXN0ID0gbm9kZV9kaXN0YW5jZShuaWQsIG5vZGUpOwogCQkJYmVzdG5vZGUgPSBub2RlOwogCQl9CisJCWFueW5vZGUgPSBub2RlOwogCX0KIAotCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwKLQkJcGVybm9kZXNpemUsIGFsaWduLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpOworCWlmIChiZXN0bm9kZSA9PSAtMSkKKwkJYmVzdG5vZGUgPSBhbnlub2RlOwogCi0JaWYgKCFwdHIpCi0JCXBhbmljKCJOTyBtZW1vcnkgZm9yIG1lbW9yeSBsZXNzIG5vZGVcbiIpOworCXB0ciA9IF9fYWxsb2NfYm9vdG1lbV9ub2RlKG1lbV9kYXRhW2Jlc3Rub2RlXS5wZ2RhdCwgcGVybm9kZXNpemUsCisJCVBFUkNQVV9QQUdFX1NJWkUsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisKIAlyZXR1cm4gcHRyOwogfQogCkBAIC00MTMsOCArNDEzLDcgQEAKIAogCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtZW1vcnlfbGVzc19tYXNrKSB7CiAJCXBlcm5vZGVzaXplID0gY29tcHV0ZV9wZXJub2Rlc2l6ZShub2RlKTsKLQkJcGVybm9kZSA9IG1lbW9yeV9sZXNzX25vZGVfYWxsb2Mobm9kZSwgcGVybm9kZXNpemUsCi0JCQkobm9kZSkgPyAobm9kZSAqIFBFUkNQVV9QQUdFX1NJWkUpIDogKDEwMjQqMTAyNCkpOworCQlwZXJub2RlID0gbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhub2RlLCBwZXJub2Rlc2l6ZSk7CiAJCWZpbGxfcGVybm9kZShub2RlLCBfX3BhKHBlcm5vZGUpLCBwZXJub2Rlc2l6ZSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vdGxiLmMgYi9hcmNoL2lhNjQvbW0vdGxiLmMKaW5kZXggYzc5YTliOS4uNDExMDVkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL3RsYi5jCisrKyBiL2FyY2gvaWE2NC9tbS90bGIuYwpAQCAtOCw2ICs4LDggQEAKICAqCQlNb2RpZmllZCBSSUQgYWxsb2NhdGlvbiBmb3IgU01QCiAgKiAgICAgICAgICBHb3V0aGFtIFJhbyA8Z291dGhhbS5yYW9AaW50ZWwuY29tPgogICogICAgICAgICAgICAgIElQSSBiYXNlZCBwdGMgaW1wbGVtZW50YXRpb24gYW5kIEEtc3RlcCBJUEkgaW1wbGVtZW50YXRpb24uCisgKiBSb2hpdCBTZXRoIDxyb2hpdC5zZXRoQGludGVsLmNvbT4KKyAqIEtlbiBDaGVuIDxrZW5uZXRoLncuY2hlbkBpbnRlbC5jb20+CiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2LDc4ICsxOCw3NSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYWwuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgbWFzazsJLyogbWFzayBvZiBzdXBwb3J0ZWQgcHVyZ2UgcGFnZS1zaXplcyAqLwotCXVuc2lnbmVkIGxvbmcgbWF4X2JpdHM7CS8qIGxvZzIoKSBvZiBsYXJnZXN0IHN1cHBvcnRlZCBwdXJnZSBwYWdlLXNpemUgKi8KKwl1bnNpZ25lZCBsb25nIG1heF9iaXRzOwkvKiBsb2cyIG9mIGxhcmdlc3Qgc3VwcG9ydGVkIHB1cmdlIHBhZ2Utc2l6ZSAqLwogfSBwdXJnZTsKIAogc3RydWN0IGlhNjRfY3R4IGlhNjRfY3R4ID0gewogCS5sb2NrID0JCVNQSU5fTE9DS19VTkxPQ0tFRCwKIAkubmV4dCA9CQkxLAotCS5saW1pdCA9CSgxIDw8IDE1KSAtIDEsCQkvKiBzdGFydCBvdXQgd2l0aCB0aGUgc2FmZSAoYXJjaGl0ZWN0ZWQpIGxpbWl0ICovCiAJLm1heF9jdHggPQl+MFUKIH07CiAKIERFRklORV9QRVJfQ1BVKHU4LCBpYTY0X25lZWRfdGxiX2ZsdXNoKTsKIAogLyoKKyAqIEluaXRpYWxpemVzIHRoZSBpYTY0X2N0eC5iaXRtYXAgYXJyYXkgYmFzZWQgb24gbWF4X2N0eCsxLgorICogQ2FsbGVkIGFmdGVyIGNwdV9pbml0KCkgaGFzIHNldHVwIGlhNjRfY3R4Lm1heF9jdHggYmFzZWQgb24KKyAqIG1heGltdW0gUklEIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IGJvb3QgQ1BVLgorICovCit2b2lkIF9faW5pdAorbW11X2NvbnRleHRfaW5pdCAodm9pZCkKK3sKKwlpYTY0X2N0eC5iaXRtYXAgPSBhbGxvY19ib290bWVtKChpYTY0X2N0eC5tYXhfY3R4KzEpPj4zKTsKKwlpYTY0X2N0eC5mbHVzaG1hcCA9IGFsbG9jX2Jvb3RtZW0oKGlhNjRfY3R4Lm1heF9jdHgrMSk+PjMpOworfQorCisvKgogICogQWNxdWlyZSB0aGUgaWE2NF9jdHgubG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIQogICovCiB2b2lkCiB3cmFwX21tdV9jb250ZXh0IChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIHRza19jb250ZXh0LCBtYXhfY3R4ID0gaWE2NF9jdHgubWF4X2N0eDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1OworCXVuc2lnbmVkIGxvbmcgZmx1c2hfYml0OwogCi0JaWYgKGlhNjRfY3R4Lm5leHQgPiBtYXhfY3R4KQotCQlpYTY0X2N0eC5uZXh0ID0gMzAwOwkvKiBza2lwIGRhZW1vbnMgKi8KLQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOworCWZvciAoaT0wOyBpIDw9IGlhNjRfY3R4Lm1heF9jdHggLyBCSVRTX1BFUl9MT05HOyBpKyspIHsKKwkJZmx1c2hfYml0ID0geGNoZygmaWE2NF9jdHguZmx1c2htYXBbaV0sIDApOworCQlpYTY0X2N0eC5iaXRtYXBbaV0gXj0gZmx1c2hfYml0OworCX0KKyAKKwkvKiB1c2Ugb2Zmc2V0IGF0IDMwMCB0byBza2lwIGRhZW1vbnMgKi8KKwlpYTY0X2N0eC5uZXh0ID0gZmluZF9uZXh0X3plcm9fYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQlpYTY0X2N0eC5tYXhfY3R4LCAzMDApOworCWlhNjRfY3R4LmxpbWl0ID0gZmluZF9uZXh0X2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CiAKIAkvKgotCSAqIFNjYW4gYWxsIHRoZSB0YXNrJ3MgbW0tPmNvbnRleHQgYW5kIHNldCBwcm9wZXIgc2FmZSByYW5nZQorCSAqIGNhbid0IGNhbGwgZmx1c2hfdGxiX2FsbCgpIGhlcmUgYmVjYXVzZSBvZiByYWNlIGNvbmRpdGlvbgorCSAqIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXQogCSAqLwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLSAgcmVwZWF0OgotCWZvcl9lYWNoX3Byb2Nlc3ModHNrKSB7Ci0JCWlmICghdHNrLT5tbSkKLQkJCWNvbnRpbnVlOwotCQl0c2tfY29udGV4dCA9IHRzay0+bW0tPmNvbnRleHQ7Ci0JCWlmICh0c2tfY29udGV4dCA9PSBpYTY0X2N0eC5uZXh0KSB7Ci0JCQlpZiAoKytpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KSB7Ci0JCQkJLyogZW1wdHkgcmFuZ2U6IHJlc2V0IHRoZSByYW5nZSBsaW1pdCBhbmQgc3RhcnQgb3ZlciAqLwotCQkJCWlmIChpYTY0X2N0eC5uZXh0ID4gbWF4X2N0eCkKLQkJCQkJaWE2NF9jdHgubmV4dCA9IDMwMDsKLQkJCQlpYTY0X2N0eC5saW1pdCA9IG1heF9jdHggKyAxOwotCQkJCWdvdG8gcmVwZWF0OwotCQkJfQotCQl9Ci0JCWlmICgodHNrX2NvbnRleHQgPiBpYTY0X2N0eC5uZXh0KSAmJiAodHNrX2NvbnRleHQgPCBpYTY0X2N0eC5saW1pdCkpCi0JCQlpYTY0X2N0eC5saW1pdCA9IHRza19jb250ZXh0OwotCX0KLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0JLyogY2FuJ3QgY2FsbCBmbHVzaF90bGJfYWxsKCkgaGVyZSBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9uIHdpdGggTygxKSBzY2hlZHVsZXIgW0VGXSAqLwotCXsKLQkJaW50IGNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmIChpICE9IGNwdSkKLQkJCQlwZXJfY3B1KGlhNjRfbmVlZF90bGJfZmx1c2gsIGkpID0gMTsKLQkJfQotCQlwdXRfY3B1KCk7Ci0JfQorCWNwdSA9IGdldF9jcHUoKTsgLyogcHJldmVudCBwcmVlbXB0aW9uL21pZ3JhdGlvbiAqLworCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJaWYgKGkgIT0gY3B1KQorCQkJcGVyX2NwdShpYTY0X25lZWRfdGxiX2ZsdXNoLCBpKSA9IDE7CisJcHV0X2NwdSgpOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAogdm9pZAotaWE2NF9nbG9iYWxfdGxiX3B1cmdlIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCitpYTY0X2dsb2JhbF90bGJfcHVyZ2UgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgbmJpdHMpCiB7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhwdGNnX2xvY2spOwogCkBAIC0xMzUsNyArMTM0LDggQEAKIH0KIAogdm9pZAotZmx1c2hfdGxiX3JhbmdlIChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitmbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgdW5zaWduZWQgbG9uZyBlbmQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IGVuZCAtIHN0YXJ0OwpAQCAtMTQ5LDcgKzE0OSw4IEBACiAjZW5kaWYKIAogCW5iaXRzID0gaWE2NF9mbHMoc2l6ZSArIDB4ZmZmKTsKLQl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmIChuYml0cyA8IHB1cmdlLm1heF9iaXRzKSkKKwl3aGlsZSAodW5saWtlbHkgKCgoMVVMIDw8IG5iaXRzKSAmIHB1cmdlLm1hc2spID09IDApICYmCisJCQkobmJpdHMgPCBwdXJnZS5tYXhfYml0cykpCiAJCSsrbmJpdHM7CiAJaWYgKG5iaXRzID4gcHVyZ2UubWF4X2JpdHMpCiAJCW5iaXRzID0gcHVyZ2UubWF4X2JpdHM7CkBAIC0xOTEsNSArMTkyLDUgQEAKIAlsb2NhbF9jcHVfZGF0YS0+cHRjZV9zdHJpZGVbMF0gPSBwdGNlX2luZm8uc3RyaWRlWzBdOwogCWxvY2FsX2NwdV9kYXRhLT5wdGNlX3N0cmlkZVsxXSA9IHB0Y2VfaW5mby5zdHJpZGVbMV07CiAKLQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CQkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwkvKiBudWtlIGxlZnQgb3ZlcnMgZnJvbSBib290c3RyYXBwaW5nLi4uICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCAwMTdjZmMzLi4yMGQ3NmZhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTk1LDcgKzk1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfcmF3X29wcyBwY2lfc2FsX29wcyA9IHsKLQkucmVhZCA9IAlwY2lfc2FsX3JlYWQsCisJLnJlYWQgPQkJcGNpX3NhbF9yZWFkLAogCS53cml0ZSA9CXBjaV9zYWxfd3JpdGUKIH07CiAKQEAgLTEzNywzNSArMTM3LDk4IEBACiAJcmV0dXJuIGNvbnRyb2xsZXI7CiB9CiAKLXN0YXRpYyB1NjQgX19kZXZpbml0Ci1hZGRfaW9fc3BhY2UgKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCAqYWRkcikKK3N0cnVjdCBwY2lfcm9vdF9pbmZvIHsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7CisJY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK25ld19zcGFjZSAodTY0IHBoeXNfYmFzZSwgaW50IHNwYXJzZSkKIHsKLQl1NjQgb2Zmc2V0OwotCWludCBzcGFyc2UgPSAwOworCXU2NCBtbWlvX2Jhc2U7CiAJaW50IGk7CiAKLQlpZiAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQgPT0gMCkKLQkJcmV0dXJuIElPX1NQQUNFX0JBU0UoMCk7CS8qIHBhcnQgb2YgbGVnYWN5IElPIHNwYWNlICovCisJaWYgKHBoeXNfYmFzZSA9PSAwKQorCQlyZXR1cm4gMDsJLyogbGVnYWN5IEkvTyBwb3J0IHNwYWNlICovCiAKLQlpZiAoYWRkci0+YXR0cmlidXRlLmlvLnRyYW5zbGF0aW9uX2F0dHJpYnV0ZSA9PSBBQ1BJX1NQQVJTRV9UUkFOU0xBVElPTikKLQkJc3BhcnNlID0gMTsKLQotCW9mZnNldCA9ICh1NjQpIGlvcmVtYXAoYWRkci0+YWRkcmVzc190cmFuc2xhdGlvbl9vZmZzZXQsIDApOworCW1taW9fYmFzZSA9ICh1NjQpIGlvcmVtYXAocGh5c19iYXNlLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2lvX3NwYWNlczsgaSsrKQotCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG9mZnNldCAmJgorCQlpZiAoaW9fc3BhY2VbaV0ubW1pb19iYXNlID09IG1taW9fYmFzZSAmJgogCQkgICAgaW9fc3BhY2VbaV0uc3BhcnNlID09IHNwYXJzZSkKLQkJCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCQkJcmV0dXJuIGk7CiAKIAlpZiAobnVtX2lvX3NwYWNlcyA9PSBNQVhfSU9fU1BBQ0VTKSB7Ci0JCXByaW50aygiVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogVG9vIG1hbnkgSU8gcG9ydCBzcGFjZXMgIgorCQkJIihNQVhfSU9fU1BBQ0VTPSVsdSlcbiIsIE1BWF9JT19TUEFDRVMpOwogCQlyZXR1cm4gfjA7CiAJfQogCiAJaSA9IG51bV9pb19zcGFjZXMrKzsKLQlpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPSBvZmZzZXQ7CisJaW9fc3BhY2VbaV0ubW1pb19iYXNlID0gbW1pb19iYXNlOwogCWlvX3NwYWNlW2ldLnNwYXJzZSA9IHNwYXJzZTsKIAotCXJldHVybiBJT19TUEFDRV9CQVNFKGkpOworCXJldHVybiBpOworfQorCitzdGF0aWMgdTY0IF9fZGV2aW5pdAorYWRkX2lvX3NwYWNlIChzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CisJY2hhciAqbmFtZTsKKwl1NjQgYmFzZSwgbWluLCBtYXgsIGJhc2VfcG9ydDsKKwl1bnNpZ25lZCBpbnQgc3BhcnNlID0gMCwgc3BhY2VfbnIsIGxlbjsKKworCXJlc291cmNlID0ga3phbGxvYyhzaXplb2YoKnJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXNvdXJjZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZVxuIiwKKwkJCWluZm8tPm5hbWUpOworCQlnb3RvIG91dDsKKwl9CisKKwlsZW4gPSBzdHJsZW4oaW5mby0+bmFtZSkgKyAzMjsKKwluYW1lID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghbmFtZSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSTogTm8gbWVtb3J5IGZvciAlcyBJL08gcG9ydCBzcGFjZSBuYW1lXG4iLAorCQkJaW5mby0+bmFtZSk7CisJCWdvdG8gZnJlZV9yZXNvdXJjZTsKKwl9CisKKwltaW4gPSBhZGRyLT5taW5fYWRkcmVzc19yYW5nZTsKKwltYXggPSBtaW4gKyBhZGRyLT5hZGRyZXNzX2xlbmd0aCAtIDE7CisJaWYgKGFkZHItPmF0dHJpYnV0ZS5pby50cmFuc2xhdGlvbl9hdHRyaWJ1dGUgPT0gQUNQSV9TUEFSU0VfVFJBTlNMQVRJT04pCisJCXNwYXJzZSA9IDE7CisKKwlzcGFjZV9uciA9IG5ld19zcGFjZShhZGRyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCwgc3BhcnNlKTsKKwlpZiAoc3BhY2VfbnIgPT0gfjApCisJCWdvdG8gZnJlZV9uYW1lOworCisJYmFzZSA9IF9fcGEoaW9fc3BhY2Vbc3BhY2VfbnJdLm1taW9fYmFzZSk7CisJYmFzZV9wb3J0ID0gSU9fU1BBQ0VfQkFTRShzcGFjZV9ucik7CisJc25wcmludGYobmFtZSwgbGVuLCAiJXMgSS9PIFBvcnRzICUwOGx4LSUwOGx4IiwgaW5mby0+bmFtZSwKKwkJYmFzZV9wb3J0ICsgbWluLCBiYXNlX3BvcnQgKyBtYXgpOworCisJLyoKKwkgKiBUaGUgU0RNIGd1YXJhbnRlZXMgdGhlIGxlZ2FjeSAwLTY0SyBzcGFjZSBpcyBzcGFyc2UsIGJ1dCBpZiB0aGUKKwkgKiBtYXBwaW5nIGlzIGRvbmUgYnkgdGhlIHByb2Nlc3NvciAobm90IHRoZSBicmlkZ2UpLCBBQ1BJIG1heSBub3QKKwkgKiBtYXJrIGl0IGFzIHNwYXJzZS4KKwkgKi8KKwlpZiAoc3BhY2VfbnIgPT0gMCkKKwkJc3BhcnNlID0gMTsKKworCXJlc291cmNlLT5uYW1lICA9IG5hbWU7CisJcmVzb3VyY2UtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVzb3VyY2UtPnN0YXJ0ID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWluKSA6IG1pbik7CisJcmVzb3VyY2UtPmVuZCAgID0gYmFzZSArIChzcGFyc2UgPyBJT19TUEFDRV9TUEFSU0VfRU5DT0RJTkcobWF4KSA6IG1heCk7CisJaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzb3VyY2UpOworCisJcmV0dXJuIGJhc2VfcG9ydDsKKworZnJlZV9uYW1lOgorCWtmcmVlKG5hbWUpOworZnJlZV9yZXNvdXJjZToKKwlrZnJlZShyZXNvdXJjZSk7CitvdXQ6CisJcmV0dXJuIH4wOwogfQogCiBzdGF0aWMgYWNwaV9zdGF0dXMgX19kZXZpbml0IHJlc291cmNlX3RvX3dpbmRvdyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzb3VyY2UsCkBAIC0yMDUsMTEgKzI2OCw2IEBACiAJcmV0dXJuIEFFX09LOwogfQogCi1zdHJ1Y3QgcGNpX3Jvb3RfaW5mbyB7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpjb250cm9sbGVyOwotCWNoYXIgKm5hbWU7Ci19OwotCiBzdGF0aWMgX19kZXZpbml0IGFjcGlfc3RhdHVzIGFkZF93aW5kb3coc3RydWN0IGFjcGlfcmVzb3VyY2UgKnJlcywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbyA9IGRhdGE7CkBAIC0yMzEsNyArMjg5LDcgQEAKIAl9IGVsc2UgaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7CiAJCWZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7Ci0JCW9mZnNldCA9IGFkZF9pb19zcGFjZSgmYWRkcik7CisJCW9mZnNldCA9IGFkZF9pb19zcGFjZShpbmZvLCAmYWRkcik7CiAJCWlmIChvZmZzZXQgPT0gfjApCiAJCQlyZXR1cm4gQUVfT0s7CiAJfSBlbHNlCkBAIC0yNDEsNyArMjk5LDcgQEAKIAl3aW5kb3ctPnJlc291cmNlLm5hbWUgPSBpbmZvLT5uYW1lOwogCXdpbmRvdy0+cmVzb3VyY2UuZmxhZ3MgPSBmbGFnczsKIAl3aW5kb3ctPnJlc291cmNlLnN0YXJ0ID0gYWRkci5taW5fYWRkcmVzc19yYW5nZSArIG9mZnNldDsKLQl3aW5kb3ctPnJlc291cmNlLmVuZCA9IGFkZHIubWF4X2FkZHJlc3NfcmFuZ2UgKyBvZmZzZXQ7CisJd2luZG93LT5yZXNvdXJjZS5lbmQgPSB3aW5kb3ctPnJlc291cmNlLnN0YXJ0ICsgYWRkci5hZGRyZXNzX2xlbmd0aCAtIDE7CiAJd2luZG93LT5yZXNvdXJjZS5jaGlsZCA9IE5VTEw7CiAJd2luZG93LT5vZmZzZXQgPSBvZmZzZXQ7CiAKQEAgLTczOSw3ICs3OTcsNyBAQAogewogCWludCBjb3VudCA9IG5yX3JlbGVhc2VkOwogCi0gCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOworCWNvdW50ICs9IChJQTY0X0xBU1RfREVWSUNFX1ZFQ1RPUiAtIGxhc3QpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9pb19pbml0LmMgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwppbmRleCBiNGY1MDUzLi4wNWU0ZWE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAJCXJldHVybjsJCS8qYnVzICMgZG9lcyBub3QgZXhpc3QgKi8KIAlwcm9tX2J1c3NvZnRfcHRyID0gX192YShwcm9tX2J1c3NvZnRfcHRyKTsKIAotIAljb250cm9sbGVyID0ga2NhbGxvYygxLHNpemVvZihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIpLCBHRlBfS0VSTkVMKTsKKyAJY29udHJvbGxlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlciksIEdGUF9LRVJORUwpOwogCWNvbnRyb2xsZXItPnNlZ21lbnQgPSBzZWdtZW50OwogIAlpZiAoIWNvbnRyb2xsZXIpCiAgCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmggYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCmluZGV4IGZiY2VkYzcuLjU0ODNhOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmgKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAJdTggdmVyc2lvbjsKIAl1NjQgaGVhcnRiZWF0OwogCXU2NCBoZWFydGJlYXRpbmdfdG9fbWFzazsKLQl1NjQga2RiX3N0YXR1czsJCS8qIDAgPSBtYWNoaW5lIHJ1bm5pbmcgKi8KKwl1NjQgaGVhcnRiZWF0X29mZmxpbmU7CS8qIGlmIDAsIGhlYXJ0YmVhdCBzaG91bGQgYmUgY2hhbmdpbmcgKi8KIAlpbnQgYWN0X25hc2lkOwogCWludCBhY3RfcGh5c19jcHVpZDsKIAl1NjQgdmFyc19wYXJ0X3BhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCmluZGV4IGNlY2UzYzcuLmI2MTcyMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxhc20vc24vaW50ci5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbl9zYWwuaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJ4cGMuaCIKIApAQCAtMTg4LDYgKzE4OSwxMSBAQAogCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9yZWJvb3QsCiB9OwogCitzdGF0aWMgaW50IHhwY19zeXN0ZW1fZGllKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB4cGNfZGllX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0geHBjX3N5c3RlbV9kaWUsCit9OworCiAKIC8qCiAgKiBUaW1lciBmdW5jdGlvbiB0byBlbmZvcmNlIHRoZSB0aW1lbGltaXQgb24gdGhlIHBhcnRpdGlvbiBkaXNlbmdhZ2UgcmVxdWVzdC4KQEAgLTk5Nyw2ICsxMDAzLDkgQEAKIAkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJKHZvaWQpIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKIAorCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgZGllX25vdGlmaWVyIGxpc3QgKi8KKwkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJLyogY2xvc2UgZG93biBwcm90ZWN0aW9ucyBmb3IgSVBJIG9wZXJhdGlvbnMgKi8KIAl4cGNfcmVzdHJpY3RfSVBJX29wcygpOwogCkBAIC0xMDExLDYgKzEwMjAsNjMgQEAKIAogCiAvKgorICogQ2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyBhYm91dCB0byBiZSBlaXRoZXIgcmVzdGFydGVkIG9yIGhhbHRlZC4KKyAqLworc3RhdGljIHZvaWQKK3hwY19kaWVfZGlzZW5nYWdlKHZvaWQpCit7CisJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CisJcGFydGlkX3QgcGFydGlkOworCXVuc2lnbmVkIGxvbmcgZW5nYWdlZDsKKwlsb25nIHRpbWUsIHByaW50X3RpbWUsIGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQ7CisKKworCS8qIGtlZXAgeHBjX2hiX2NoZWNrZXIgdGhyZWFkIGZyb20gZG9pbmcgYW55dGhpbmcgKGp1c3QgaW4gY2FzZSkgKi8KKwl4cGNfZXhpdGluZyA9IDE7CisKKwl4cGNfdmFycy0+aGVhcnRiZWF0aW5nX3RvX21hc2sgPSAwOyAgLyogaW5kaWNhdGUgd2UncmUgZGVhY3RpdmF0ZWQgKi8KKworCWZvciAocGFydGlkID0gMTsgcGFydGlkIDwgWFBfTUFYX1BBUlRJVElPTlM7IHBhcnRpZCsrKSB7CisJCXBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKKworCQlpZiAoIVhQQ19TVVBQT1JUU19ESVNFTkdBR0VfUkVRVUVTVChwYXJ0LT4KKwkJCQkJCQlyZW1vdGVfdmFyc192ZXJzaW9uKSkgeworCisJCQkvKiBqdXN0IGluIGNhc2UgaXQgd2FzIGxlZnQgc2V0IGJ5IGFuIGVhcmxpZXIgWFBDICovCisJCQl4cGNfY2xlYXJfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh4cGNfcGFydGl0aW9uX2VuZ2FnZWQoMVVMIDw8IHBhcnRpZCkgfHwKKwkJCQkJcGFydC0+YWN0X3N0YXRlICE9IFhQQ19QX0lOQUNUSVZFKSB7CisJCQl4cGNfcmVxdWVzdF9wYXJ0aXRpb25fZGlzZW5nYWdlKHBhcnQpOworCQkJeHBjX21hcmtfcGFydGl0aW9uX2Rpc2VuZ2FnZWQocGFydCk7CisJCQl4cGNfSVBJX3NlbmRfZGlzZW5nYWdlKHBhcnQpOworCQl9CisJfQorCisJcHJpbnRfdGltZSA9IHJ0Y190aW1lKCk7CisJZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCA9IHByaW50X3RpbWUgKworCQkoeHBjX2Rpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVsaW1pdCAqIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwkvKiB3YWl0IGZvciBhbGwgb3RoZXIgcGFydGl0aW9ucyB0byBkaXNlbmdhZ2UgZnJvbSB1cyAqLworCisJd2hpbGUgKChlbmdhZ2VkID0geHBjX3BhcnRpdGlvbl9lbmdhZ2VkKC0xVUwpKSAmJgorCQkJKHRpbWUgPSBydGNfdGltZSgpKSA8IGRpc2VuZ2FnZV9yZXF1ZXN0X3RpbWVvdXQpIHsKKworCQlpZiAodGltZSA+PSBwcmludF90aW1lKSB7CisJCQlkZXZfaW5mbyh4cGNfcGFydCwgIndhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKKwkJCXByaW50X3RpbWUgPSB0aW1lICsgKFhQQ19ESVNFTkdBR0VfUFJJTlRNU0dfSU5URVJWQUwgKgorCQkJCQkJc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKKwkJfQorCX0KKwlkZXZfaW5mbyh4cGNfcGFydCwgImZpbmlzaGVkIHdhaXRpbmcgZm9yIHJlbW90ZSBwYXJ0aXRpb25zIHRvICIKKwkJCQkiZGlzZW5nYWdlLCBlbmdhZ2VkPTB4JWx4XG4iLCBlbmdhZ2VkKTsKK30KKworCisvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgogICovCiBzdGF0aWMgaW50CkBAIC0xMDM4LDYgKzExMDQsMzMgQEAKIH0KIAogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGJlaW5nIHJlYm9vdGVkLgorICovCitzdGF0aWMgaW50Cit4cGNfc3lzdGVtX2RpZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICp1bnVzZWQpCit7CisJc3dpdGNoIChldmVudCkgeworCWNhc2UgRElFX01BQ0hJTkVfUkVTVEFSVDoKKwljYXNlIERJRV9NQUNISU5FX0hBTFQ6CisJCXhwY19kaWVfZGlzZW5nYWdlKCk7CisJCWJyZWFrOworCWNhc2UgRElFX01DQV9NT05BUkNIX0VOVEVSOgorCWNhc2UgRElFX0lOSVRfTU9OQVJDSF9FTlRFUjoKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdCsrOworCQl4cGNfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPSAxOworCQlicmVhazsKKwljYXNlIERJRV9NQ0FfTU9OQVJDSF9MRUFWRToKKwljYXNlIERJRV9JTklUX01PTkFSQ0hfTEVBVkU6CisJCXhwY192YXJzLT5oZWFydGJlYXQrKzsKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdF9vZmZsaW5lID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCisKIGludCBfX2luaXQKIHhwY19pbml0KHZvaWQpCiB7CkBAIC0xMTU0LDYgKzEyNDcsMTIgQEAKIAkJZGV2X3dhcm4oeHBjX3BhcnQsICJjYW4ndCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXJcbiIpOwogCX0KIAorCS8qIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGRpZV9ub3RpZmllciBsaXN0IChpLmUuLCBpYTY0ZGllX2NoYWluKSAqLworCXJldCA9IHJlZ2lzdGVyX2RpZV9ub3RpZmllcigmeHBjX2RpZV9ub3RpZmllcik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl93YXJuKHhwY19wYXJ0LCAiY2FuJ3QgcmVnaXN0ZXIgZGllIG5vdGlmaWVyXG4iKTsKKwl9CisKIAogCS8qCiAJICogU2V0IHRoZSBiZWF0aW5nIHRvIG90aGVyIHBhcnRpdGlvbnMgaW50byBtb3Rpb24uICBUaGlzIGlzCkBAIC0xMTc5LDYgKzEyNzgsOSBAQAogCQkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIHJlYm9vdF9ub3RpZmllcl9saXN0ICovCiAJCSh2b2lkKSB1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmeHBjX3JlYm9vdF9ub3RpZmllcik7CiAKKwkJLyogdGFrZSBvdXJzZWx2ZXMgb2ZmIG9mIHRoZSBkaWVfbm90aWZpZXIgbGlzdCAqLworCQkodm9pZCkgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJnhwY19kaWVfbm90aWZpZXIpOworCiAJCWRlbF90aW1lcl9zeW5jKCZ4cGNfaGJfdGltZXIpOwogCQlmcmVlX2lycShTR0lfWFBDX0FDVElWQVRFLCBOVUxMKTsKIAkJeHBjX3Jlc3RyaWN0X0lQSV9vcHMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX3BhcnRpdGlvbi5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKaW5kZXggNTgxZTExMy4uY2RkNjQzMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMKQEAgLTQzNiwxMyArNDM2LDEzIEBACiAJCX0KIAogCQlkZXZfZGJnKHhwY19wYXJ0LCAicGFydGlkID0gJWQsIGhlYXJ0YmVhdCA9ICVsZCwgbGFzdF9oZWFydGJlYXQiCi0JCQkiID0gJWxkLCBrZGJfc3RhdHVzID0gJWxkLCBIQl9tYXNrID0gMHglbHhcbiIsIHBhcnRpZCwKLQkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXQsIHBhcnQtPmxhc3RfaGVhcnRiZWF0LAotCQkJcmVtb3RlX3ZhcnMtPmtkYl9zdGF0dXMsCisJCQkiID0gJWxkLCBoZWFydGJlYXRfb2ZmbGluZSA9ICVsZCwgSEJfbWFzayA9IDB4JWx4XG4iLAorCQkJcGFydGlkLCByZW1vdGVfdmFycy0+aGVhcnRiZWF0LCBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCwKKwkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRfb2ZmbGluZSwKIAkJCXJlbW90ZV92YXJzLT5oZWFydGJlYXRpbmdfdG9fbWFzayk7CiAKIAkJaWYgKCgocmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdCA9PSBwYXJ0LT5sYXN0X2hlYXJ0YmVhdCkgJiYKLQkJCShyZW1vdGVfdmFycy0+a2RiX3N0YXR1cyA9PSAwKSkgfHwKKwkJCShyZW1vdGVfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPT0gMCkpIHx8CiAJCQkgICAgICF4cGNfaGJfYWxsb3dlZChzbl9wYXJ0aXRpb25faWQsIHJlbW90ZV92YXJzKSkgewogCiAJCQlYUENfREVBQ1RJVkFURV9QQVJUSVRJT04ocGFydCwgeHBjTm9IZWFydGJlYXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jIGIvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCmluZGV4IDlmMDNkNGUuLmRkYTE5NmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYworKysgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWlmIChpID4gbGFzdCkKIAkJcmV0dXJuIDA7CiAKLQltYXAgPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2VfZG1hbWFwKSwgR0ZQX0FUT01JQyk7CisJbWFwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpb2NlX2RtYW1hcCksIEdGUF9BVE9NSUMpOwogCWlmICghbWFwKQogCQlyZXR1cm4gMDsKIApAQCAtNTU1LDcgKzU1NSw3IEBACiAJc3RydWN0IHRpb2NlICp0aW9jZV9tbXI7CiAJc3RydWN0IHRpb2NlX2tlcm5lbCAqdGlvY2Vfa2VybjsKIAotCXRpb2NlX2tlcm4gPSBrY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdGlvY2Vfa2VybmVsKSwgR0ZQX0tFUk5FTCk7CisJdGlvY2Vfa2VybiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW9jZV9rZXJuZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRpb2NlX2tlcm4pIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNzI3LDcgKzcyNyw3IEBACiAJICogQWxsb2NhdGUga2VybmVsIGJ1cyBzb2Z0IGFuZCBjb3B5IGZyb20gcHJvbS4KIAkgKi8KIAotCXRpb2NlX2NvbW1vbiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aW9jZV9jb21tb24pLCBHRlBfS0VSTkVMKTsKKwl0aW9jZV9jb21tb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlvY2VfY29tbW9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0aW9jZV9jb21tb24pCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDE0OTNjNzguLmM1MjMwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC01ODEsMTcgKzU4MSwxMiBAQAogICAgICAgIGRlZl9ib29sIHkKICAgICAgICBkZXBlbmRzIG9uIFBQQzY0ICYmICFOVU1BCiAKLWNvbmZpZyBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTTVAgJiYgUFBDX1BTRVJJRVMKLQotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0RFRkFVTFQKLQlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBBUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUKLQogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQorCitjb25maWcgQVJDSF9TUEFSU0VNRU1fREVGQVVMVAorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKQEAgLTU5OSw2ICs1OTQsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KICMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKICMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IGIzYWUyOTkuLjlhNzRiN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogaWZlcSAoJChDT05GSUdfUFBDNjQpLHkpCiBFWFRSQV9DRkxBR1MJKz0gLW1uby1taW5pbWFsLXRvYworQ0ZMQUdTX2lvY3RsMzIubyArPSAtSWZzLwogZW5kaWYKIGlmZXEgKCQoQ09ORklHX1BQQzMyKSx5KQogQ0ZMQUdTX3Byb21faW5pdC5vICAgICAgKz0gLWZQSUMKQEAgLTExLDE3ICsxMiwyOSBAQAogZW5kaWYKIAogb2JqLXkJCQkJOj0gc2VtYXBob3JlLm8gY3B1dGFibGUubyBwdHJhY2UubyBzeXNjYWxscy5vIFwKLQkJCQkgICBzaWduYWxfMzIubyBwbWMubworCQkJCSAgIGlycS5vIHNpZ25hbF8zMi5vIHBtYy5vIHZkc28ubworb2JqLXkJCQkJKz0gdmRzbzMyLwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gc2V0dXBfNjQubyBiaW5mbXRfZWxmMzIubyBzeXNfcHBjMzIubyBcCi0JCQkJICAgc2lnbmFsXzY0Lm8gcHRyYWNlMzIubyBzeXN0YmwubworCQkJCSAgIHNpZ25hbF82NC5vIHB0cmFjZTMyLm8gc3lzdGJsLm8gXAorCQkJCSAgIHBhY2EubyBpb2N0bDMyLm8gY3B1X3NldHVwX3Bvd2VyNC5vIFwKKwkJCQkgICBmaXJtd2FyZS5vIHN5c2ZzLm8gdWRiZy5vCitvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCiBvYmotJChDT05GSUdfUE9XRVI0KQkJKz0gaWRsZV9wb3dlcjQubwogb2JqLSQoQ09ORklHX1BQQ19PRikJCSs9IG9mX2RldmljZS5vCi1vYmotJChDT05GSUdfUFBDX1JUQVMpCQkrPSBydGFzLm8KK3Byb2Nmcy0kKENPTkZJR19QUEM2NCkJCTo9IHByb2NfcHBjNjQubworb2JqLSQoQ09ORklHX1BST0NfRlMpCQkrPSAkKHByb2Nmcy15KQorcnRhc3BjaS0kKENPTkZJR19QUEM2NCkJCTo9IHJ0YXNfcGNpLm8KK29iai0kKENPTkZJR19QUENfUlRBUykJCSs9IHJ0YXMubyAkKHJ0YXNwY2kteSkKIG9iai0kKENPTkZJR19SVEFTX0ZMQVNIKQkrPSBydGFzX2ZsYXNoLm8KIG9iai0kKENPTkZJR19SVEFTX1BST0MpCQkrPSBydGFzLXByb2Mubworb2JqLSQoQ09ORklHX0xQQVJDRkcpCQkrPSBscGFyY2ZnLm8KIG9iai0kKENPTkZJR19JQk1WSU8pCQkrPSB2aW8ubwogb2JqLSQoQ09ORklHX0dFTkVSSUNfVEJTWU5DKQkrPSBzbXAtdGJzeW5jLm8KK29iai0kKENPTkZJR19QUENfUFNFUklFUykJKz0gdWRiZ18xNjU1MC5vCitvYmotJChDT05GSUdfUFBDX01BUExFKQkJKz0gdWRiZ18xNjU1MC5vCit1ZGJnc2NjLSQoQ09ORklHX1BQQzY0KQkJOj0gdWRiZ19zY2Mubworb2JqLSQoQ09ORklHX1BQQ19QTUFDKQkJKz0gJCh1ZGJnc2NjLXkpCiAKIGlmZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGI3NTc1NzIuLjQ1NTBlYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTM3LDEyICszNywxMiBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAjZW5kaWYKIApAQCAtMTA2LDcgKzEwNiw2IEBACiAJREVGSU5FKElDQUNIRUwxTElORVNJWkUsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGlsaW5lX3NpemUpKTsKIAlERUZJTkUoSUNBQ0hFTDFMT0dMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgbG9nX2lsaW5lX3NpemUpKTsKIAlERUZJTkUoSUNBQ0hFTDFMSU5FU1BFUlBBR0UsIG9mZnNldG9mKHN0cnVjdCBwcGM2NF9jYWNoZXMsIGlsaW5lc19wZXJfcGFnZSkpOwotCURFRklORShQTEFURk9STSwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgcGxhdGZvcm0pKTsKIAlERUZJTkUoUExBVEZPUk1fTFBBUiwgUExBVEZPUk1fTFBBUik7CiAKIAkvKiBwYWNhICovCkBAIC0yNTIsMjUgKzI1MSw0MiBAQAogCiAJREVGSU5FKFRBU0tfU0laRSwgVEFTS19TSVpFKTsKIAlERUZJTkUoTlVNX1VTRVJfU0VHTUVOVFMsIFRBU0tfU0laRT4+MjgpOwotI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCi0JLyogc3lzdGVtY2ZnIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCi0JREVGSU5FKENGR19UQl9PUklHX1NUQU1QLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl9vcmlnX3N0YW1wKSk7Ci0JREVGSU5FKENGR19UQl9USUNLU19QRVJfU0VDLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl90aWNrc19wZXJfc2VjKSk7Ci0JREVGSU5FKENGR19UQl9UT19YUywgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfdG9feHMpKTsKLQlERUZJTkUoQ0ZHX1NUQU1QX1hTRUMsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHN0YW1wX3hzZWMpKTsKLQlERUZJTkUoQ0ZHX1RCX1VQREFURV9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdGJfdXBkYXRlX2NvdW50KSk7Ci0JREVGSU5FKENGR19UWl9NSU5VVEVXRVNULCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0el9taW51dGVzd2VzdCkpOwotCURFRklORShDRkdfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgdHpfZHN0dGltZSkpOwotCURFRklORShDRkdfU1lTQ0FMTF9NQVAzMiwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgc3lzY2FsbF9tYXBfMzIpKTsKLQlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQNjQsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHN5c2NhbGxfbWFwXzY0KSk7CisjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAotCS8qIHRpbWV2YWwvdGltZXpvbmUgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwkvKiBkYXRhcGFnZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCURFRklORShDRkdfVEJfT1JJR19TVEFNUCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfb3JpZ19zdGFtcCkpOworCURFRklORShDRkdfVEJfVElDS1NfUEVSX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdGlja3NfcGVyX3NlYykpOworCURFRklORShDRkdfVEJfVE9fWFMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RvX3hzKSk7CisJREVGSU5FKENGR19TVEFNUF9YU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzdGFtcF94c2VjKSk7CisJREVGSU5FKENGR19UQl9VUERBVEVfQ09VTlQsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3VwZGF0ZV9jb3VudCkpOworCURFRklORShDRkdfVFpfTUlOVVRFV0VTVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfbWludXRlc3dlc3QpKTsKKwlERUZJTkUoQ0ZHX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X2RzdHRpbWUpKTsKKwlERUZJTkUoQ0ZHX1NZU0NBTExfTUFQMzIsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN5c2NhbGxfbWFwXzMyKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX3NlYykpOworCURFRklORShXVE9NX0NMT0NLX05TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfbnNlYykpOworI2lmZGVmIENPTkZJR19QUEM2NAorCURFRklORShDRkdfU1lTQ0FMTF9NQVA2NCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3lzY2FsbF9tYXBfNjQpKTsKIAlERUZJTkUoVFZBTDY0X1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3NlYykpOwogCURFRklORShUVkFMNjRfVFZfVVNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3VzZWMpKTsKIAlERUZJTkUoVFZBTDMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF90aW1ldmFsLCB0dl9zZWMpKTsKIAlERUZJTkUoVFZBTDMyX1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXZhbCwgdHZfdXNlYykpOworCURFRklORShUU1BDMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjLCB0dl9zZWMpKTsKKwlERUZJTkUoVFNQQzMyX1RWX05TRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXNwZWMsIHR2X25zZWMpKTsKKyNlbHNlCisJREVGSU5FKFRWQUwzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl9zZWMpKTsKKwlERUZJTkUoVFZBTDMyX1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl91c2VjKSk7CisJREVGSU5FKFRTUEVDMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X3NlYykpOworCURFRklORShUU1BFQzMyX1RWX05TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1lc3BlYywgdHZfbnNlYykpOworI2VuZGlmCisJLyogdGltZXZhbC90aW1lem9uZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLwogCURFRklORShUWk9ORV9UWl9NSU5XRVNULCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X21pbnV0ZXN3ZXN0KSk7CiAJREVGSU5FKFRaT05FX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB0aW1lem9uZSwgdHpfZHN0dGltZSkpOwotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisJLyogT3RoZXIgYml0cyB1c2VkIGJ5IHRoZSB2ZHNvICovCisJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CisJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKKwlERUZJTkUoTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOworCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIFRJQ0tfTlNFQyk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKaW5kZXggMWZiNjczYzUuLmNjYTk0MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpAQCAtMTE0LDExICsxMTQsMTEgQEAKIAogCS5kYXRhCiAJLmJhbGlnbglMMV9DQUNIRV9CWVRFUywwCi1jcHVfc3RhdGVfc3RvcmFnZToJCitjcHVfc3RhdGVfc3RvcmFnZToKIAkuc3BhY2UJQ1NfU0laRQogCS5iYWxpZ24JTDFfQ0FDSEVfQllURVMsMAogCS50ZXh0Ci0JCisKIC8qIENhbGxlZCBpbiBub3JtYWwgY29udGV4dCB0byBiYWNrdXAgQ1BVIDAgc3RhdGUuIFRoaXMKICAqIGRvZXMgbm90IGluY2x1ZGUgY2FjaGUgc2V0dGluZ3MuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbwogICogY2FsbGVkIGZvciBtYWNoaW5lIHNsZWVwLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIE1NVQpAQCAtMTUxLDcgKzE1MSw3IEBACiAJc3RkCXIzLENTX0hJRDQocjUpCiAJbWZzcHIJcjMsU1BSTl9ISUQ1CiAJc3RkCXIzLENTX0hJRDUocjUpCi0JCisKIDI6CiAJbXRjcglyNwogCWJscgpAQCAtMjEzLDcgKzIxMyw3IEBACiAJbXRzcHIJU1BSTl9ISUQxLHIzCiAJc3luYwogCWlzeW5jCi0JCisKIAkvKiBSZXN0b3JlIEhJRDQgKi8KIAlsZAlyMyxDU19ISUQ0KHI1KQogCXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBjYzRlOWViLi4xZDg1Y2VkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC01Miw2ICs1Miw5IEBACiAjZGVmaW5lIENPTU1PTl9VU0VSCQkoUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfRlBVIHwgXAogCQkJCSBQUENfRkVBVFVSRV9IQVNfTU1VKQogI2RlZmluZSBDT01NT05fVVNFUl9QUEM2NAkoQ09NTU9OX1VTRVIgfCBQUENfRkVBVFVSRV82NCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI0CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNCkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1CShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNSkKKyNkZWZpbmUgQ09NTU9OX1VTRVJfUE9XRVI1X1BMVVMJKENPTU1PTl9VU0VSX1BQQzY0IHwgUFBDX0ZFQVRVUkVfUE9XRVI1X1BMVVMpCiAKIAogLyogV2Ugb25seSBzZXQgdGhlIHNwZSBmZWF0dXJlcyBpZiB0aGUga2VybmVsIHdhcyBjb21waWxlZCB3aXRoCkBAIC0xNjAsNyArMTYzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwMzUwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNCAoZ3ApIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjQsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCkBAIC0xNzUsNyArMTc4LDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwMzgwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNCsgKGdxKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LApAQCAtMTkwLDcgKzE5Myw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM5MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQUEM5NzAiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQgfAogCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LApAQCAtMjEyLDcgKzIxNSw3IEBACiAjZWxzZQogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BQQzk3MCwKICNlbmRpZgotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8CisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCkBAIC0yMzAsNyArMjMzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwNDQwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBQQzk3ME1QIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKQEAgLTI0NSw3ICsyNDgsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzYTAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1IChncikiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTI2MCw3ICsyNjMsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzYjAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUE9XRVI1IChncykiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNSwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA2LApAQCAtMjc2LDcgKzI3OSw3IEBACiAJCS5jcHVfbmFtZQkJPSAiQ2VsbCBCcm9hZGJhbmQgRW5naW5lIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19DRUxMLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8Ci0JCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAorCQkJUFBDX0ZFQVRVUkVfQ0VMTCB8IFBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9iZSwKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Zpcm13YXJlLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvZmlybXdhcmUuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCmluZGV4IGQ4NDMyYzAuLjY1ZWFlNzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICBhcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jCi0gKgogICogIEV4dHJhY3RlZCBmcm9tIGNwdXRhYmxlLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIEJlbi4gSGVycmVuc2NobWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKaW5kZXggNGQ2MDAxZi4uYjc4MGI0MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCkBAIC00MSwyMCArNDEsMjAgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCUxPQURCQVNFKHIzLCBsYXN0X3Rhc2tfdXNlZF9tYXRoKQogCXRvcmVhbChyMykKLQlMREwJcjQsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHIzKQotCUNNUEkJMCxyNCwwCisJUFBDX0xMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKKwlQUENfTENNUEkJMCxyNCwwCiAJYmVxCTFmCiAJdG9yZWFsKHI0KQogCWFkZGkJcjQscjQsVEhSRUFECQkvKiB3YW50IGxhc3RfdGFza191c2VkX21hdGgtPnRocmVhZCAqLwogCVNBVkVfMzJGUFJTKDAsIHI0KQogCW1mZnMJZnIwCiAJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSKHI0KQotCUxETAlyNSxQVF9SRUdTKHI0KQorCVBQQ19MTAlyNSxQVF9SRUdTKHI0KQogCXRvcmVhbChyNSkKLQlMREwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKwlQUENfTEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIAlsaQlyMTAsTVNSX0ZQfE1TUl9GRTB8TVNSX0ZFMQogCWFuZGMJcjQscjQscjEwCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0JU1RMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX1NUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogMToKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJLyogZW5hYmxlIHVzZSBvZiBGUCBhZnRlciByZXR1cm4gKi8KQEAgLTc3LDcgKzc3LDcgQEAKICNpZm5kZWYgQ09ORklHX1NNUAogCXN1YmkJcjQscjUsVEhSRUFECiAJZnJvbXJlYWwocjQpCi0JU1RMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKKwlQUENfU1RMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiAqLwogCS8qIHdlIGhhdmVuJ3QgdXNlZCBjdHIgb3IgeGVyIG9yIGxyICovCkBAIC05NywyNCArOTcsMjQgQEAKIAlNVE1TUkQocjUpCQkJLyogZW5hYmxlIHVzZSBvZiBmcHUgbm93ICovCiAJU1lOQ182MDEKIAlpc3luYwotCUNNUEkJMCxyMywwCisJUFBDX0xDTVBJCTAscjMsMAogCWJlcWxyLQkJCQkvKiBpZiBubyBwcmV2aW91cyBvd25lciwgZG9uZSAqLwogCWFkZGkJcjMscjMsVEhSRUFECSAgICAgICAgLyogd2FudCBUSFJFQUQgb2YgdGFzayAqLwotCUxETAlyNSxQVF9SRUdTKHIzKQotCUNNUEkJMCxyNSwwCisJUFBDX0xMCXI1LFBUX1JFR1MocjMpCisJUFBDX0xDTVBJCTAscjUsMAogCVNBVkVfMzJGUFJTKDAsIHIzKQogCW1mZnMJZnIwCiAJc3RmZAlmcjAsVEhSRUFEX0ZQU0NSKHIzKQogCWJlcQkxZgotCUxETAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19MTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogCWxpCXIzLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKIAlhbmRjCXI0LHI0LHIzCQkvKiBkaXNhYmxlIEZQIGZvciBwcmV2aW91cyB0YXNrICovCi0JU1RMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX1NUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQogMToKICNpZm5kZWYgQ09ORklHX1NNUAogCWxpCXI1LDAKIAlMT0FEQkFTRShyNCxsYXN0X3Rhc2tfdXNlZF9tYXRoKQotCVNUTAlyNSxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjQpCisJUFBDX1NUTAlyNSxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjQpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCWJscgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGIxMDJlM2EuLmNjZGY5NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF8zMi5TCkBAIC0xMTAwLDYgKzExMDAsNyBAQAogCW1yCXIzLHIzMQogCW1yCXI0LHIzMAogCWJsCW1hY2hpbmVfaW5pdAorCWJsCV9fc2F2ZV9jcHVfc2V0dXAKIAlibAlNTVVfaW5pdAogCiAjaWZkZWYgQ09ORklHX0FQVVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggMTZhYjQwZC4uOGE4YmY3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlIDxhc20vcmVnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgpAQCAtMTY5NywyNSArMTY5NiwxNCBAQAogICogICBTUFJHMyA9IHBhY2EgdmlydHVhbCBhZGRyZXNzCiAgKi8KIF9HTE9CQUwoX19zZWNvbmRhcnlfc3RhcnQpCisJLyogU2V0IHRocmVhZCBwcmlvcml0eSB0byBNRURJVU0gKi8KKwlITVRfTUVESVVNCiAKLQlITVRfTUVESVVNCQkJLyogU2V0IHRocmVhZCBwcmlvcml0eSB0byBNRURJVU0gKi8KLQorCS8qIExvYWQgVE9DICovCiAJbGQJcjIsUEFDQVRPQyhyMTMpCi0JbGkJcjYsMAotCXN0YglyNixQQUNBUFJPQ0VOQUJMRUQocjEzKQogCi0jaWZuZGVmIENPTkZJR19QUENfSVNFUklFUwotCS8qIEluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciByZWdpc3Rlci4gKi8KLQlMT0FEQUREUihyNixfU0RSMSkKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMQkgKi8KLQltdHNwcglTUFJOX1NEUjEscjYJCQkvKiBzZXQgdGhlIGh0YWIgbG9jYXRpb24JICovCi0jZW5kaWYKLQkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBzZWdtZW50IHRhYmxlIChvciBTTEIpIGVudHJ5CQkgKi8KLQlsZAlyMyxQQUNBU1RBQlZJUlQocjEzKQkvKiBnZXQgYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQlibAkuc3RhYl9pbml0aWFsaXplCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCi0JYmwJLnNsYl9pbml0aWFsaXplCisJLyogRG8gZWFybHkgc2V0dXAgZm9yIHRoYXQgQ1BVIChzdGFiLCBzbGIsIGhhc2ggdGFibGUgcG9pbnRlcikgKi8KKwlibAkuZWFybHlfc2V0dXBfc2Vjb25kYXJ5CiAKIAkvKiBJbml0aWFsaXplIHRoZSBrZXJuZWwgc3RhY2suICBKdXN0IGEgcmVwZWF0IGZvciBpU2VyaWVzLgkgKi8KIAlMT0FEQUREUihyMyxjdXJyZW50X3NldCkKQEAgLTE3MjQsMzcgKzE3MTIsNyBAQAogCWFkZGkJcjEscjEsVEhSRUFEX1NJWkUtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAlzdGQJcjEsUEFDQUtTQVZFKHIxMykKIAotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCS8qIGdldCByYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotCW9yaQlyNCxyMywxCQkJLyogdHVybiBvbiB2YWxpZCBiaXQJCSAqLwotCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JbGkJcjAsLTEJCQkvKiBoeXBlcnZpc29yIGNhbGwgKi8KLQlsaQlyMywxCi0Jc2xkaQlyMyxyMyw2MwkJLyogMHg4MDAwMDAwMDAwMDAwMDAwICovCi0Jb3JpCXIzLHIzLDQJCQkvKiAweDgwMDAwMDAwMDAwMDAwMDQgKi8KLQlzYwkJCQkvKiBIdkNhbGxfc2V0QVNSICovCi0jZWxzZQotCS8qIHNldCB0aGUgQVNSICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnCSAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncwkJICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJU3RhciAgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNAkJCS8qIFB1bHNhciAqLwotCWJuZQk5OGYKLTk3OglsaQlyMyxIX1NFVF9BU1IJCS8qIGhjYWxsID0gSF9TRVRfQVNSICovCi0JSFZTQwkJCQkvKiBJbnZva2luZyBoY2FsbCAqLwotCWIJOTlmCi05ODoJCQkJCS8qICEocnBhIGh5cGVydmlzb3IpIHx8ICEoc3RhcikgICovCi0JbXRhc3IJcjQJCQkvKiBzZXQgdGhlIHN0YWIgbG9jYXRpb24JICovCi05OToKLSNlbmRpZgorCS8qIENsZWFyIGJhY2tjaGFpbiBzbyB3ZSBnZXQgbmljZSBiYWNrdHJhY2VzICovCiAJbGkJcjcsMAogCW10bHIJcjcKIApAQCAtMTc3Nyw2ICsxNzM1LDcgQEAKIAlsaQlyMywwCiAJc3RkCXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCiAJYmwJLnN0YXJ0X3NlY29uZGFyeQorCWIJLgogI2VuZGlmCiAKIC8qCkBAIC0xODk2LDQwICsxODU1LDYgQEAKIAltcglyMyxyMzEKICAJYmwJLmVhcmx5X3NldHVwCiAKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCi0Jb3JpCXI0LHIzLDEJCQkvKiB0dXJuIG9uIHZhbGlkIGJpdAkJICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnICovCi0JbGQJcjMsMChyMykKLQlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNgkJCS8qIElTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM0CQkJLyogUHVsc2FyICovCi0JYm5lCTk4ZgotOTc6CWxpCXIzLEhfU0VUX0FTUgkJLyogaGNhbGwgPSBIX1NFVF9BU1IgKi8KLQlIVlNDCQkJCS8qIEludm9raW5nIGhjYWxsICovCi0JYgk5OWYKLTk4OgkJCQkJLyogIShycGEgaHlwZXJ2aXNvcikgfHwgIShzdGFyKSAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSovCi05OToKLQkvKiBTZXQgU0RSMSAoaGFzaCB0YWJsZSBwb2ludGVyKSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCi0JYm5lCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgITAgICovCi0JTE9BREFERFIocjYsX1NEUjEpCQkvKiBPbmx5IGlmIE5PVCBMUEFSICovCi0JYWRkCXI2LHI2LHIyNgotCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uICAqLwotOTg6IAogCUxPQURBRERSKHIzLC5zdGFydF9oZXJlX2NvbW1vbikKIAlTRVRfUkVHX1RPX0NPTlNUKHI0LCBNU1JfS0VSTkVMKQogCW10c3ByCVNQUk5fU1JSMCxyMwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2lvY3RsMzIuYwppbmRleCBiYTRhODk5Li4zZmE2YTkzIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pb2N0bDMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKQEAgLTEsNiArMSw2IEBACi0vKiAKKy8qCiAgKiBpb2N0bDMyLmM6IENvbnZlcnNpb24gYmV0d2VlbiAzMmJpdCBhbmQgNjRiaXQgbmF0aXZlIGlvY3Rscy4KLSAqIAorICoKICAqIEJhc2VkIG9uIHNwYXJjNjQgaW9jdGwzMi5jIGJ5OgogICoKICAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAwICBKYWt1YiBKZWxpbmVrICAoamFrdWJAcmVkaGF0LmNvbSkKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9pcnEuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCA4NzQ3NDU4Li40Yjc5NDA2IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC01LDEyICs1LDEyIEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKICAqICBBZGFwdGVkIGZyb20gYXJjaC9pMzg2IGJ5IEdhcnkgVGhvbWFzCiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKLSAqICBVcGRhdGVkIGFuZCBtb2RpZmllZCBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQotICogICAgQ29weXJpZ2h0IChDKSAxOTk2IENvcnQgRG91Z2FuCisgKiAgVXBkYXRlZCBhbmQgbW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gPGNvcnRAZnNtbGFicy5jb20+CisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSBDb3J0IERvdWdhbgogICogIEFkYXB0ZWQgZm9yIFBvd2VyIE1hY2ludG9zaCBieSBQYXVsIE1hY2tlcnJhcwogICogICAgQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzIChwYXVsdXNAY3MuYW51LmVkdS5hdSkKICAqICBBbWlnYS9BUFVTIGNoYW5nZXMgYnkgSmVzcGVyIFNrb3YgKGpza292QGN5Z251cy5jby51aykuCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCkBAIC0yMSw2ICsyMSwxNCBAQAogICogaW5zdGVhZCBvZiBqdXN0IGdyYWJiaW5nIHRoZW0uIFRodXMgc2V0dXBzIHdpdGggZGlmZmVyZW50IElSUSBudW1iZXJzCiAgKiBzaG91bGRuJ3QgcmVzdWx0IGluIGFueSB3ZWlyZCBzdXJwcmlzZXMsIGFuZCBpbnN0YWxsaW5nIG5ldyBoYW5kbGVycwogICogc2hvdWxkIGJlIGVhc2llci4KKyAqCisgKiBUaGUgTVBDOHh4IGhhcyBhbiBpbnRlcnJ1cHQgbWFzayBpbiB0aGUgU0lVLiAgSWYgYSBiaXQgaXMgc2V0LCB0aGUKKyAqIGludGVycnVwdCBpcyBfZW5hYmxlZF8uICBBcyBleHBlY3RlZCwgSVJRMCBpcyBiaXQgMCBpbiB0aGUgMzItYml0CisgKiBtYXNrIHJlZ2lzdGVyIChvZiB3aGljaCBvbmx5IDE2IGFyZSBkZWZpbmVkKSwgaGVuY2UgdGhlIHdlaXJkIHNoaWZ0aW5nCisgKiBhbmQgY29tcGxlbWVudCBvZiB0aGUgY2FjaGVkX2lycV9tYXNrLiAgSSB3YW50IHRvIGJlIGFibGUgdG8gc3R1ZmYKKyAqIHRoaXMgcmlnaHQgaW50byB0aGUgU0lVIFNNQVNLIHJlZ2lzdGVyLgorICogTWFueSBvZiB0aGUgcHJlcC9jaHJwIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWwgY29tcGlsZWQgb24gQ09ORklHXzh4eAorICogdG8gcmVkdWNlIGNvZGUgc3BhY2UgYW5kIHVuZGVmaW5lZCBmdW5jdGlvbiByZWZlcmVuY2VzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjksNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgpAQCAtNDAsOSArNDksMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNlbmRpZgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC01MiwzNSArNjUsNTQgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9xdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaWZkZWYgQ09ORklHX1BQQzY0CisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgotCi0jaWZkZWYgQ09ORklHX1NNUAotZXh0ZXJuIHZvaWQgaVNlcmllc19zbXBfbWVzc2FnZV9yZWN2KCBzdHJ1Y3QgcHRfcmVncyAqICk7CiAjZW5kaWYKIAotZXh0ZXJuIGlycV9kZXNjX3QgaXJxX2Rlc2NbTlJfSVJRU107CitzdGF0aWMgaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOworCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX0lTRVJJRVMpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKK2V4dGVybiB2b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdihzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BQQzMyCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCisKK3Vuc2lnbmVkIGxvbmcgcHBjX2NhY2hlZF9pcnFfbWFza1tOUl9NQVNLX1dPUkRTXTsKK2F0b21pY190IHBwY19uX2xvc3RfaW50ZXJydXB0czsKKworI2lmZGVmIENPTkZJR19UQVVfSU5UCitleHRlcm4gaW50IHRhdV9pbml0aWFsaXplZDsKK2V4dGVybiBpbnQgdGF1X2ludGVycnVwdHMoaW50KTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorZXh0ZXJuIGF0b21pY190IGlwaV9yZWN2OworZXh0ZXJuIGF0b21pY190IGlwaV9zZW50OworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKIEVYUE9SVF9TWU1CT0woaXJxX2Rlc2MpOwogCiBpbnQgZGlzdHJpYnV0ZV9pcnFzID0gMTsKIGludCBfX2lycV9vZmZzZXRfdmFsdWU7Ci1pbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHM7CiB1NjQgcHBjNjRfaW50ZXJydXB0X2NvbnRyb2xsZXI7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKLQlzdHJ1Y3QgaXJxYWN0aW9uICogYWN0aW9uOworCWludCBpID0gKihsb2ZmX3QgKil2LCBqOworCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKIAlpcnFfZGVzY190ICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoaSA9PSAwKSB7Ci0JCXNlcV9wcmludGYocCwgIiAgICAgICAgICAgIik7Ci0JCWZvciAoaj0wOyBqPE5SX0NQVVM7IGorKykgewotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIixqKTsKLQkJfQorCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAiKTsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIiwgaik7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogCX0KIApAQCAtOTIsMjYgKzEyNCw0MSBAQAogCQkJZ290byBza2lwOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogI2lmZGVmIENPTkZJR19TTVAKLQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykgewotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0JCX0KKwkJZm9yX2VhY2hfb25saW5lX2NwdShqKQorCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CiAjZWxzZQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAkJaWYgKGRlc2MtPmhhbmRsZXIpCi0JCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+aGFuZGxlci0+dHlwZW5hbWUgKTsKKwkJCXNlcV9wcmludGYocCwgIiAlcyAiLCBkZXNjLT5oYW5kbGVyLT50eXBlbmFtZSk7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYocCwgIiAgTm9uZSAgICAgICIpOworCQkJc2VxX3B1dHMocCwgIiAgTm9uZSAgICAgICIpOwogCQlzZXFfcHJpbnRmKHAsICIlcyIsIChkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUwpID8gIkxldmVsICIgOiAiRWRnZSAgIik7Ci0JCXNlcV9wcmludGYocCwgIiAgICAlcyIsYWN0aW9uLT5uYW1lKTsKLQkJZm9yIChhY3Rpb249YWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKKwkJc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKKwkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQogCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCXNlcV9wdXRjKHAsICdcbicpOwogc2tpcDoKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKQorCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7CisjaWZkZWYgQ09ORklHX1BQQzMyCisjaWZkZWYgQ09ORklHX1RBVV9JTlQKKwkJaWYgKHRhdV9pbml0aWFsaXplZCl7CisJCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCisJCQkJaWYgKGNwdV9vbmxpbmUoaikpCisJCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOworCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCQkvKiBzaG91bGQgdGhpcyBiZSBwZXIgcHJvY2Vzc29yIHNlbmQvcmVjZWl2ZT8gKi8KKwkJc2VxX3ByaW50ZihwLCAiSVBJIChyZWN2L3NlbnQpOiAlMTB1LyV1XG4iLAorCQkJCWF0b21pY19yZWFkKCZpcGlfcmVjdiksIGF0b21pY19yZWFkKCZpcGlfc2VudCkpOworI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCiAJCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ0LDEyNiArMTkxLDYgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gaW50IG5vaXJxZGVidWc7Ci0KLS8qCi0gKiBFdmVudHVhbGx5LCB0aGlzIHNob3VsZCB0YWtlIGFuIGFycmF5IG9mIGludGVycnVwdHMgYW5kIGFuIGFycmF5IHNpemUKLSAqIHNvIGl0IGNhbiBkaXNwYXRjaCBtdWx0aXBsZSBpbnRlcnJ1cHRzLgotICovCi12b2lkIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlycSkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlycV9kZXNjX3QgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKLQlpcnFyZXR1cm5fdCBhY3Rpb25fcmV0OwotI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKLQlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7Ci0jZW5kaWYKLQotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwotCi0JaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9QRVJfQ1BVKSB7Ci0JCS8qIG5vIGxvY2tpbmcgcmVxdWlyZWQgZm9yIENQVS1sb2NhbCBpbnRlcnJ1cHRzOiAqLwotCQlhY2tfaXJxKGlycSk7Ci0JCWFjdGlvbl9yZXQgPSBoYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgZGVzYy0+YWN0aW9uKTsKLQkJZGVzYy0+aGFuZGxlci0+ZW5kKGlycSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2soJmRlc2MtPmxvY2spOwotCWFja19pcnEoaXJxKTsJCi0JLyoKLQkgICBSRVBMQVkgaXMgd2hlbiBMaW51eCByZXNlbmRzIGFuIElSUSB0aGF0IHdhcyBkcm9wcGVkIGVhcmxpZXIKLQkgICBXQUlUSU5HIGlzIHVzZWQgYnkgcHJvYmUgdG8gbWFyayBpcnFzIHRoYXQgYXJlIGJlaW5nIHRlc3RlZAotCSAgICovCi0Jc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwotCXN0YXR1cyB8PSBJUlFfUEVORElORzsgLyogd2UgX3dhbnRfIHRvIGhhbmRsZSBpdCAqLwotCi0JLyoKLQkgKiBJZiB0aGUgSVJRIGlzIGRpc2FibGVkIGZvciB3aGF0ZXZlciByZWFzb24sIHdlIGNhbm5vdAotCSAqIHVzZSB0aGUgYWN0aW9uIHdlIGhhdmUuCi0JICovCi0JYWN0aW9uID0gTlVMTDsKLQlpZiAobGlrZWx5KCEoc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpKSB7Ci0JCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKLQkJaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlcikgewotCQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJVbmhhbmRsZWQgaW50ZXJydXB0ICV4LCBkaXNhYmxlZFxuIiwgaXJxKTsKLQkJCS8qIFdlIGNhbid0IGNhbGwgZGlzYWJsZV9pcnEgaGVyZSwgaXQgd291bGQgZGVhZGxvY2sgKi8KLQkJCWlmICghZGVzYy0+ZGVwdGgpCi0JCQkJZGVzYy0+ZGVwdGggPSAxOwotCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCS8qIFRoaXMgaXMgbm90IGEgcmVhbCBzcHVycmlvdXMgaW50ZXJydXB0LCB3ZQotCQkJICogaGF2ZSB0byBlb2kgaXQsIHNvIHdlIGp1bXAgdG8gb3V0Ci0JCQkgKi8KLQkJCW1hc2tfaXJxKGlycSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlzdGF0dXMgJj0gfklSUV9QRU5ESU5HOyAvKiB3ZSBjb21taXQgdG8gaGFuZGxpbmcgKi8KLQkJc3RhdHVzIHw9IElSUV9JTlBST0dSRVNTOyAvKiB3ZSBhcmUgaGFuZGxpbmcgaXQgKi8KLQl9Ci0JZGVzYy0+c3RhdHVzID0gc3RhdHVzOwotCi0JLyoKLQkgKiBJZiB0aGVyZSBpcyBubyBJUlEgaGFuZGxlciBvciBpdCB3YXMgZGlzYWJsZWQsIGV4aXQgZWFybHkuCi0JICAgU2luY2Ugd2Ugc2V0IFBFTkRJTkcsIGlmIGFub3RoZXIgcHJvY2Vzc29yIGlzIGhhbmRsaW5nCi0JICAgYSBkaWZmZXJlbnQgaW5zdGFuY2Ugb2YgdGhpcyBzYW1lIGlycSwgdGhlIG90aGVyIHByb2Nlc3NvcgotCSAgIHdpbGwgdGFrZSBjYXJlIG9mIGl0LgotCSAqLwotCWlmICh1bmxpa2VseSghYWN0aW9uKSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIEVkZ2UgdHJpZ2dlcmVkIGludGVycnVwdHMgbmVlZCB0byByZW1lbWJlcgotCSAqIHBlbmRpbmcgZXZlbnRzLgotCSAqIFRoaXMgYXBwbGllcyB0byBhbnkgaHcgaW50ZXJydXB0cyB0aGF0IGFsbG93IGEgc2Vjb25kCi0JICogaW5zdGFuY2Ugb2YgdGhlIHNhbWUgaXJxIHRvIGFycml2ZSB3aGlsZSB3ZSBhcmUgaW4gZG9fSVJRCi0JICogb3IgaW4gdGhlIGhhbmRsZXIuIEJ1dCB0aGUgY29kZSBoZXJlIG9ubHkgaGFuZGxlcyB0aGUgX3NlY29uZF8KLQkgKiBpbnN0YW5jZSBvZiB0aGUgaXJxLCBub3QgdGhlIHRoaXJkIG9yIGZvdXJ0aC4gU28gaXQgaXMgbW9zdGx5Ci0JICogdXNlZnVsIGZvciBpcnEgaGFyZHdhcmUgdGhhdCBkb2VzIG5vdCBtYXNrIGNsZWFubHkgaW4gYW4KLQkgKiBTTVAgZW52aXJvbm1lbnQuCi0JICovCi0JZm9yICg7OykgewotCQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci0KLSNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCi0JCS8qIFN3aXRjaCB0byB0aGUgaXJxIHN0YWNrIHRvIGhhbmRsZSB0aGlzICovCi0JCWN1cnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOwotCQlpcnF0cCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JCWlmIChjdXJ0cCAhPSBpcnF0cCkgewotCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKLQkJCWlycXRwLT5mbGFncyA9IDA7Ci0JCQlhY3Rpb25fcmV0ID0gY2FsbF9oYW5kbGVfSVJRX2V2ZW50KGlycSwgcmVncywgYWN0aW9uLCBpcnF0cCk7Ci0JCQlpcnF0cC0+dGFzayA9IE5VTEw7Ci0JCQlpZiAoaXJxdHAtPmZsYWdzKQotCQkJCXNldF9iaXRzKGlycXRwLT5mbGFncywgJmN1cnRwLT5mbGFncyk7Ci0JCX0gZWxzZQotI2VuZGlmCi0JCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGFjdGlvbik7Ci0KLQkJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQkJaWYgKCFub2lycWRlYnVnKQotCQkJbm90ZV9pbnRlcnJ1cHQoaXJxLCBkZXNjLCBhY3Rpb25fcmV0LCByZWdzKTsKLQkJaWYgKGxpa2VseSghKGRlc2MtPnN0YXR1cyAmIElSUV9QRU5ESU5HKSkpCi0JCQlicmVhazsKLQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfUEVORElORzsKLQl9Ci1vdXQ6Ci0JZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKLQkvKgotCSAqIFRoZSAtPmVuZCgpIGhhbmRsZXIgaGFzIHRvIGRlYWwgd2l0aCBpbnRlcnJ1cHRzIHdoaWNoIGdvdAotCSAqIGRpc2FibGVkIHdoaWxlIHRoZSBoYW5kbGVyIHdhcyBydW5uaW5nLgotCSAqLwotCWlmIChkZXNjLT5oYW5kbGVyKSB7Ci0JCWlmIChkZXNjLT5oYW5kbGVyLT5lbmQpCi0JCQlkZXNjLT5oYW5kbGVyLT5lbmQoaXJxKTsKLQkJZWxzZSBpZiAoZGVzYy0+aGFuZGxlci0+ZW5hYmxlKQotCQkJZGVzYy0+aGFuZGxlci0+ZW5hYmxlKGlycSk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKLX0KLQogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0zMTAsOCArMjM3LDExIEBACiB2b2lkIGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnQgaXJxOworI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CisjZW5kaWYKIAotCWlycV9lbnRlcigpOworICAgICAgICBpcnFfZW50ZXIoKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCiAJLyogRGVidWdnaW5nIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdzogaXMgdGhlcmUgbGVzcyB0aGFuIDJLQiBmcmVlPyAqLwpAQCAtMzI4LDIwICsyNTgsNDQgQEAKIAl9CiAjZW5kaWYKIAorCS8qCisJICogRXZlcnkgcGxhdGZvcm0gaXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHBwY19tZC5nZXRfaXJxLgorCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlaXRoZXIgcmV0dXJuIGFuIGlycSBudW1iZXIgb3IgLTEgdG8KKwkgKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nLgorCSAqIFRoZSB2YWx1ZSAtMiBpcyBmb3IgYnVnZ3kgaGFyZHdhcmUgYW5kIG1lYW5zIHRoYXQgdGhpcyBJUlEKKwkgKiBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQuIC0tIFRvbQorCSAqLwogCWlycSA9IHBwY19tZC5nZXRfaXJxKHJlZ3MpOwogCi0JaWYgKGlycSA+PSAwKQotCQlwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIocmVncywgaXJxKTsKLQllbHNlCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOwotCi0JaXJxX2V4aXQoKTsKKwlpZiAoaXJxID49IDApIHsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJCS8qIFN3aXRjaCB0byB0aGUgaXJxIHN0YWNrIHRvIGhhbmRsZSB0aGlzICovCisJCWN1cnRwID0gY3VycmVudF90aHJlYWRfaW5mbygpOworCQlpcnF0cCA9IGhhcmRpcnFfY3R4W3NtcF9wcm9jZXNzb3JfaWQoKV07CisJCWlmIChjdXJ0cCAhPSBpcnF0cCkgeworCQkJaXJxdHAtPnRhc2sgPSBjdXJ0cC0+dGFzazsKKwkJCWlycXRwLT5mbGFncyA9IDA7CisJCQljYWxsX19fZG9fSVJRKGlycSwgcmVncywgaXJxdHApOworCQkJaXJxdHAtPnRhc2sgPSBOVUxMOworCQkJaWYgKGlycXRwLT5mbGFncykKKwkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOworCQl9IGVsc2UKKyNlbmRpZgorCQkJX19kb19JUlEoaXJxLCByZWdzKTsKKwl9IGVsc2UKKyNpZmRlZiBDT05GSUdfUFBDMzIKKwkJaWYgKGlycSAhPSAtMikKKyNlbmRpZgorCQkJLyogVGhhdCdzIG5vdCBTTVAgc2FmZSAuLi4gYnV0IHdobyBjYXJlcyA/ICovCisJCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOworICAgICAgICBpcnFfZXhpdCgpOwogfQorCiAjZW5kaWYJLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKIHZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJc3RhdGljIGludCBvbmNlID0gMDsKIAogCWlmIChvbmNlKQpAQCAtMzQ5LDEwICszMDMsMTQgQEAKIAogCW9uY2UrKzsKIAorI2VuZGlmCiAJcHBjX21kLmluaXRfSVJRKCk7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJaXJxX2N0eF9pbml0KCk7CisjZW5kaWYKIH0KIAorI2lmZGVmIENPTkZJR19QUEM2NAogI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIC8qCiAgKiBWaXJ0dWFsIElSUSBtYXBwaW5nIGNvZGUsIHVzZWQgb24gc3lzdGVtcyB3aXRoIFhJQ1MgaW50ZXJydXB0IGNvbnRyb2xsZXJzLgpAQCAtNTE3LDMgKzQ3NSw0IEBACiB9CiAKIF9fc2V0dXAoIm5vaXJxZGlzdHJpYiIsIHNldHVwX25vaXJxZGlzdHJpYik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IDNlN2IyZjIuLjFiM2JhOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2xwYXJjZmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAogI2RlZmluZSBNT0RVTEVfVkVSUyAiMS42IgogI2RlZmluZSBNT0RVTEVfTkFNRSAibHBhcmNmZyIKQEAgLTQyLDcgKzQzLDcgQEAKIC8qICNkZWZpbmUgTFBBUkNGR19ERUJVRyAqLwogCiAvKiBmaW5kIGEgYmV0dGVyIHBsYWNlIGZvciB0aGlzIGZ1bmN0aW9uLi4uICovCi12b2lkIGxvZ19wbHBhcl9oY2FsbF9yZXR1cm4odW5zaWduZWQgbG9uZyByYywgY2hhciAqdGFnKQorc3RhdGljIHZvaWQgbG9nX3BscGFyX2hjYWxsX3JldHVybih1bnNpZ25lZCBsb25nIHJjLCBjaGFyICp0YWcpCiB7CiAJaWYgKHJjID09IDApCQkvKiBzdWNjZXNzLCByZXR1cm4gKi8KIAkJcmV0dXJuOwpAQCAtOTYsNyArOTcsNyBAQAogCiAjZGVmaW5lIGxwYXJjZmdfd3JpdGUgTlVMTAogCi0vKiAKKy8qCiAgKiBNZXRob2RzIHVzZWQgdG8gZmV0Y2ggTFBBUiBkYXRhIHdoZW4gcnVubmluZyBvbiBhbiBpU2VyaWVzIHBsYXRmb3JtLgogICovCiBzdGF0aWMgaW50IGxwYXJjZmdfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCkBAIC0xNjgsNyArMTY5LDcgQEAKICNlbmRpZgkJCQkvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KIAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwotLyogCisvKgogICogTWV0aG9kcyB1c2VkIHRvIGZldGNoIExQQVIgZGF0YSB3aGVuIHJ1bm5pbmcgb24gYSBwU2VyaWVzIHBsYXRmb3JtLgogICovCiAKQEAgLTE3Nyw3ICsxNzgsNyBAQAogICogIGVudGl0bGVkX2NhcGFjaXR5LHVuYWxsb2NhdGVkX2NhcGFjaXR5LAogICogIGFnZ3JlZ2F0aW9uLCByZXNvdXJjZV9jYXBhYmlsaXR5KS4KICAqCi0gKiAgUjQgPSBFbnRpdGxlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4gCisgKiAgUjQgPSBFbnRpdGxlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4KICAqICBSNSA9IFVuYWxsb2NhdGVkIFByb2Nlc3NvciBDYXBhY2l0eSBQZXJjZW50YWdlLgogICogIFI2IChBQUJCQ0NEREVFRkZHR0hIKS4KICAqICAgICAgWFhYWCAtIHJlc2VydmVkICgwKQpAQCAtMTkwLDcgKzE5MSw3IEBACiAgKiAgICAgICAgICBYWCAtIHZhcmlhYmxlIHByb2Nlc3NvciBDYXBhY2l0eSBXZWlnaHQKICAqICAgICAgICAgICAgWFggLSBVbmFsbG9jYXRlZCBWYXJpYWJsZSBQcm9jZXNzb3IgQ2FwYWNpdHkgV2VpZ2h0LgogICogICAgICAgICAgICAgIFhYWFggLSBBY3RpdmUgcHJvY2Vzc29ycyBpbiBQaHlzaWNhbCBQcm9jZXNzb3IgUG9vbC4KLSAqICAgICAgICAgICAgICAgICAgWFhYWCAgLSBQcm9jZXNzb3JzIGFjdGl2ZSBvbiBwbGF0Zm9ybS4gCisgKiAgICAgICAgICAgICAgICAgIFhYWFggIC0gUHJvY2Vzc29ycyBhY3RpdmUgb24gcGxhdGZvcm0uCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaF9nZXRfcHBwKHVuc2lnbmVkIGxvbmcgKmVudGl0bGVkLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyAqdW5hbGxvY2F0ZWQsCkBAIC0yMTIsMTEgKzIxMywxMCBAQAogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJcmMgPSBwbHBhcl9oY2FsbChIX1BJQywgMCwgMCwgMCwgMCwgcG9vbF9pZGxlX3RpbWUsIG51bV9wcm9jcywgJmR1bW15KTsKIAotCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOworCWlmIChyYyAhPSBIX0F1dGhvcml0eSkKKwkJbG9nX3BscGFyX2hjYWxsX3JldHVybihyYywgIkhfUElDIik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9wdXJyKHZvaWQpOwotCiAvKiBUcmFjayBzdW0gb2YgYWxsIHB1cnJzIGFjcm9zcyBhbGwgcHJvY2Vzc29ycy4gVGhpcyBpcyB1c2VkIHRvIGZ1cnRoZXIgKi8KIC8qIGNhbGN1bGF0ZSB1c2FnZSB2YWx1ZXMgYnkgZGlmZmVyZW50IGFwcGxpY2F0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMjczLDcgKzI3Myw3IEBACiAJCWlmICghd29ya2J1ZmZlcikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlcyAlcyBrbWFsbG9jIGZhaWx1cmUgYXQgbGluZSAlZCBcbiIsCiAJCQkgICAgICAgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOwotCQkJa2ZyZWUobG9jYWxfYnVmZmVyKTsJCQkKKwkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CiAJCQlyZXR1cm47CiAJCX0KICNpZmRlZiBMUEFSQ0ZHX0RFQlVHCkBAIC0zMTgsOCArMzE4LDYgQEAKIAlrZnJlZShsb2NhbF9idWZmZXIpOwogfQogCi1zdGF0aWMgaW50IGxwYXJjZmdfY291bnRfYWN0aXZlX3Byb2Nlc3NvcnModm9pZCk7Ci0KIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMgaW4gdGhlIHN5c3RlbS4KICAqIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUgYW5kIGNvdW50cwogICogdGhlIHZpcnR1YWwgcHJvY2Vzc29ycywgdGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRocmVhZHMuCkBAIC0zNzEsNyArMzY5LDcgQEAKIAlscmRycCA9IChpbnQgKilnZXRfcHJvcGVydHkocnRhc19ub2RlLCAiaWJtLGxyZHItY2FwYWNpdHkiLCBOVUxMKTsKIAogCWlmIChscmRycCA9PSBOVUxMKSB7Ci0JCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9IHN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQ7CisJCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9IHZkc29fZGF0YS0+cHJvY2Vzc29yQ291bnQ7CiAJfSBlbHNlIHsKIAkJcGFydGl0aW9uX3BvdGVudGlhbF9wcm9jZXNzb3JzID0gKihscmRycCArIDQpOwogCX0KQEAgLTU0Nyw3ICs1NDUsNyBAQAogCQlyZXR2YWwgPSAtRUlPOwogCX0KIAotICAgICAgb3V0Ogorb3V0OgogCWtmcmVlKGtidWYpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC01NjAsMTAgKzU1OCwxMCBAQAogfQogCiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxwYXJjZmdfZm9wcyA9IHsKLSAgICAgIC5vd25lcgk9IFRISVNfTU9EVUxFLAotICAgICAgLnJlYWQJPSBzZXFfcmVhZCwKLSAgICAgIC5vcGVuCT0gbHBhcmNmZ19vcGVuLAotICAgICAgLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLm9wZW4JCT0gbHBhcmNmZ19vcGVuLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBpbnQgX19pbml0IGxwYXJjZmdfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwppbmRleCAzYmVkYjUzLi5mNmQ4NGE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfMzIuUwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgKgogICogZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKICAqLwotX0dMT0JBTChmbHVzaF9pY2FjaGVfcmFuZ2UpCitfR0xPQkFMKF9fZmx1c2hfaWNhY2hlX3JhbmdlKQogQkVHSU5fRlRSX1NFQ1RJT04KIAlibHIJCQkJLyogZm9yIDYwMSwgZG8gbm90aGluZyAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUpCkBAIC02MDcsMjcgKzYwNyw2IEBACiAJc3luYwkJCQkvKiB3YWl0IGZvciBkY2JpJ3MgdG8gZ2V0IHRvIHJhbSAqLwogCWJscgogCi0jaWZkZWYgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRQotLyoKLSAqIDQweCBjb3JlcyBoYXZlIDhLIG9yIDE2SyBkY2FjaGUgYW5kIDMyIGJ5dGUgbGluZSBzaXplLgotICogNDR4IGhhcyBhIDMySyBkY2FjaGUgYW5kIDMyIGJ5dGUgbGluZSBzaXplLgotICogOHh4IGhhcyAxLCAyLCA0LCA4SyB2YXJpYW50cy4KLSAqIEZvciBub3csIGNvdmVyIHRoZSB3b3JzdCBjYXNlIG9mIHRoZSA0NHguCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGV4dGVybmFsIGludGVycnVwdHMgZGlzYWJsZWQuCi0gKi8KLSNkZWZpbmUgQ0FDSEVfTldBWVMJNjQKLSNkZWZpbmUgQ0FDSEVfTkxJTkVTCTE2Ci0KLV9HTE9CQUwoZmx1c2hfZGNhY2hlX2FsbCkKLQlsaQlyNCwgKDIgKiBDQUNIRV9OV0FZUyAqIENBQ0hFX05MSU5FUykKLQltdGN0cglyNAotCWxpcyAgICAgcjUsIEtFUk5FTEJBU0VAaAotMToJbHd6CXIzLCAwKHI1KQkJLyogTG9hZCBvbmUgd29yZCBmcm9tIGV2ZXJ5IGxpbmUgKi8KLQlhZGRpCXI1LCByNSwgTDFfQ0FDSEVfQllURVMKLQliZG56ICAgIDFiCi0JYmxyCi0jZW5kaWYgLyogQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRSAqLwotCiAvKgogICogRmx1c2ggYSBwYXJ0aWN1bGFyIHBhZ2UgZnJvbSB0aGUgZGF0YSBjYWNoZSB0byBSQU0uCiAgKiBOb3RlOiB0aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBkb2VzICpub3QqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCmluZGV4IGFlMTQzM2QuLmFlNDhhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC04OSwxMiArODksMTIgQEAKIAltdGxyCXIwCiAJYmxyCiAKLV9HTE9CQUwoY2FsbF9oYW5kbGVfSVJRX2V2ZW50KQorX0dMT0JBTChjYWxsX19fZG9fSVJRKQogCW1mbHIJcjAKIAlzdGQJcjAsMTYocjEpCi0Jc3RkdQlyMSxUSFJFQURfU0laRS0xMTIocjYpCi0JbXIJcjEscjYKLQlibAkuaGFuZGxlX0lSUV9ldmVudAorCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI1KQorCW1yCXIxLHI1CisJYmwJLl9fZG9fSVJRCiAJbGQJcjEsMChyMSkKIAlsZAlyMCwxNihyMSkKIAltdGxyCXIwCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wYWNhRGF0YS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggMzEzM2M3Mi4uYTdiNjhmOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtMTUsMjQgKzE1LDE2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotCiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KIAotc3RhdGljIHVuaW9uIHsKLQlzdHJ1Y3Qgc3lzdGVtY2ZnCWRhdGE7Ci0JdTgJCQlwYWdlW1BBR0VfU0laRV07Ci19IHN5c3RlbWNmZ19zdG9yZSBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEucGFnZS5hbGlnbmVkIikpKTsKLXN0cnVjdCBzeXN0ZW1jZmcgKnN5c3RlbWNmZyA9ICZzeXN0ZW1jZmdfc3RvcmUuZGF0YTsKLUVYUE9SVF9TWU1CT0woc3lzdGVtY2ZnKTsKLQogCiAvKiBUaGlzIHN5bWJvbCBpcyBwcm92aWRlZCBieSB0aGUgbGlua2VyIC0gbGV0IGl0IGZpbGwgaW4gdGhlIHBhY2EKICAqIGZpZWxkIGNvcnJlY3RseSAqLwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX190b2Nfc3RhcnQ7CiAKLS8qIFRoZSBQYWNhIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IHBlciBwcm9jZXNzb3IuICBFYWNoIGNvbnRhaW5zIGFuIAorLyogVGhlIFBhY2EgaXMgYW4gYXJyYXkgd2l0aCBvbmUgZW50cnkgcGVyIHByb2Nlc3Nvci4gIEVhY2ggY29udGFpbnMgYW4KICAqIGxwcGFjYSwgd2hpY2ggY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuIHRoZQogICogaHlwZXJ2aXNvciBhbmQgTGludXguICBFYWNoIGFsc28gY29udGFpbnMgYW4gSXRMcFJlZ1NhdmUgYXJlYSB3aGljaAogICogaXMgdXNlZCBieSB0aGUgaHlwZXJ2aXNvciB0byBzYXZlIHJlZ2lzdGVycy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IDQ3ZDZmN2UuLjVkY2Y0YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2lmZGVmICBDT05GSUdfOHh4CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CkBAIC01Niw3ICs1Nyw2IEBACiBleHRlcm4gdm9pZCBhbGlnbm1lbnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNpbmdsZV9zdGVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBpbnQgcG1hY19uZXd3b3JsZDsKIGV4dGVybiBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKQEAgLTE4OCw5ICsxODgsNiBAQAogRVhQT1JUX1NZTUJPTChjdWRhX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChjdWRhX3BvbGwpOwogI2VuZGlmIC8qIENPTkZJR19BREJfQ1VEQSAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLUVYUE9SVF9TWU1CT0woX21hY2hpbmUpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiBFWFBPUlRfU1lNQk9MKHN5c19jdHJsZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY19wcGM2NC5jCmluZGV4IDI0ZTk1NWVlLi43YmE0MmE0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3BwYzY0LmMKQEAgLTEsMTggKzEsMTYgQEAKIC8qCi0gKiBhcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWlrZSBDb3JyaWdhbiAmIERhdmUgRW5nZWJyZXRzZW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yNSw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC01Myw3ICs1MSw3IEBACiAJaWYgKCFyb290KQogCQlyZXR1cm4gMTsKIAotCWlmICghKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiAoUExBVEZPUk1fUFNFUklFUyB8IFBMQVRGT1JNX0NFTEwpKSkKKwlpZiAoIShwbGF0Zm9ybV9pc19wc2VyaWVzKCkgfHwgX21hY2hpbmUgPT0gUExBVEZPUk1fQ0VMTCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCFwcm9jX21rZGlyKCJydGFzIiwgcm9vdCkpCkBAIC03NCw3ICs3Miw3IEBACiAJaWYgKCFwZGUpCiAJCXJldHVybiAxOwogCXBkZS0+bmxpbmsgPSAxOwotCXBkZS0+ZGF0YSA9IHN5c3RlbWNmZzsKKwlwZGUtPmRhdGEgPSB2ZHNvX2RhdGE7CiAJcGRlLT5zaXplID0gUEFHRV9TSVpFOwogCXBkZS0+cHJvY19mb3BzID0gJnBhZ2VfbWFwX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggZjY0NWFkYi4uNmE1YjQ2OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTQ4LDkgKzQ4LDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9wU2VyaWVzX3JlY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+Ci0jZW5kaWYKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhLRVJOX0VSUiBmbXQpCkBAIC03NCwxMCArNzEsNiBAQAogdHlwZWRlZiBpbnQgaW50ZXJwcmV0X2Z1bmMoc3RydWN0IGRldmljZV9ub2RlICosIHVuc2lnbmVkIGxvbmcgKiwKIAkJCSAgIGludCwgaW50LCBpbnQpOwogCi1leHRlcm4gc3RydWN0IHJ0YXNfdCBydGFzOwotZXh0ZXJuIHN0cnVjdCBsbWIgbG1iOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2xpbWl0OwotCiBzdGF0aWMgaW50IF9faW5pdGRhdGEgZHRfcm9vdF9hZGRyX2NlbGxzOwogc3RhdGljIGludCBfX2luaXRkYXRhIGR0X3Jvb3Rfc2l6ZV9jZWxsczsKIApAQCAtMzkxLDcgKzM4NCw3IEBACiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAkJLyogV2Ugb2Zmc2V0IGlycSBudW1iZXJzIGZvciB0aGUgdTMgTVBJQyBieSAxMjggaW4gUG93ZXJNYWMgKi8KLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgeworCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgewogCQkJY2hhciAqbmFtZSA9IGdldF9wcm9wZXJ0eShpYy0+cGFyZW50LCAibmFtZSIsIE5VTEwpOwogCQkJaWYgKG5hbWUgJiYgIXN0cmNtcChuYW1lLCAidTMiKSkKIAkJCQlucC0+aW50cnNbaW50cmNvdW50XS5saW5lICs9IDEyODsKQEAgLTEwODcsOSArMTA4MCw5IEBACiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3NjYW5fY3B1cyh1bnNpZ25lZCBsb25nIG5vZGUsCiAJCQkJCSAgY29uc3QgY2hhciAqdW5hbWUsIGludCBkZXB0aCwgdm9pZCAqZGF0YSkKIHsKLQljaGFyICp0eXBlID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZGV2aWNlX3R5cGUiLCBOVUxMKTsKIAl1MzIgKnByb3A7Ci0JdW5zaWduZWQgbG9uZyBzaXplID0gMDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJY2hhciAqdHlwZSA9IG9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImRldmljZV90eXBlIiwgJnNpemUpOwogCiAJLyogV2UgYXJlIHNjYW5uaW5nICJjcHUiIG5vZGVzIG9ubHkgKi8KIAlpZiAodHlwZSA9PSBOVUxMIHx8IHN0cmNtcCh0eXBlLCAiY3B1IikgIT0gMCkKQEAgLTExMTUsNyArMTEwOCw3IEBACiAKICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCS8qIENoZWNrIGlmIHdlIGhhdmUgYSBWTVggYW5kIGV2ZW50dWFsbHkgdXBkYXRlIENQVSBmZWF0dXJlcyAqLwotCXByb3AgPSAodTMyICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiaWJtLHZteCIsICZzaXplKTsKKwlwcm9wID0gKHUzMiAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImlibSx2bXgiLCBOVUxMKTsKIAlpZiAocHJvcCAmJiAoKnByb3ApID4gMCkgewogCQljdXJfY3B1X3NwZWMtPmNwdV9mZWF0dXJlcyB8PSBDUFVfRlRSX0FMVElWRUM7CiAJCWN1cl9jcHVfc3BlYy0+Y3B1X3VzZXJfZmVhdHVyZXMgfD0gUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUM7CkBAIC0xMTYxLDEzICsxMTU0LDkgQEAKIAlwcm9wID0gKHUzMiAqKW9mX2dldF9mbGF0X2R0X3Byb3Aobm9kZSwgImxpbnV4LHBsYXRmb3JtIiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0Jc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9ICpwcm9wOwotI2Vsc2UKICNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KIAlfbWFjaGluZSA9ICpwcm9wOwogI2VuZGlmCi0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIGNoZWNrIGlmIGlvbW11IGlzIGZvcmNlZCBvbiBvciBvZmYgKi8KQEAgLTEyNjQsNyArMTI1MywxNCBAQAogCXVuc2lnbmVkIGxvbmcgbDsKIAogCS8qIFdlIGFyZSBzY2FubmluZyAibWVtb3J5IiBub2RlcyBvbmx5ICovCi0JaWYgKHR5cGUgPT0gTlVMTCB8fCBzdHJjbXAodHlwZSwgIm1lbW9yeSIpICE9IDApCisJaWYgKHR5cGUgPT0gTlVMTCkgeworCQkvKgorCQkgKiBUaGUgbG9uZ3RyYWlsIGRvZXNuJ3QgaGF2ZSBhIGRldmljZV90eXBlIG9uIHRoZQorCQkgKiAvbWVtb3J5IG5vZGUsIHNvIGxvb2sgZm9yIHRoZSBub2RlIGNhbGxlZCAvbWVtb3J5QDAuCisJCSAqLworCQlpZiAoZGVwdGggIT0gMSB8fCBzdHJjbXAodW5hbWUsICJtZW1vcnlAMCIpICE9IDApCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAibWVtb3J5IikgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZWcgPSAoY2VsbF90ICopb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAicmVnIiwgJmwpOwpAQCAtMTMzOSw5ICsxMzM1LDYgQEAKIAlvZl9zY2FuX2ZsYXRfZHQoZWFybHlfaW5pdF9kdF9zY2FuX21lbW9yeSwgTlVMTCk7CiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbW9yeV9saW1pdCk7CiAJbG1iX2FuYWx5emUoKTsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7Ci0jZW5kaWYKIAlsbWJfcmVzZXJ2ZSgwLCBfX3BhKGtsaW1pdCkpOwogCiAJREJHKCJQaHlzLiBtZW06ICVseFxuIiwgbG1iX3BoeXNfbWVtX3NpemUoKSk7CkBAIC0xOTA4LDcgKzE5MDEsNyBAQAogCS8qIFdlIGRvbid0IHN1cHBvcnQgdGhhdCBmdW5jdGlvbiBvbiBQb3dlck1hYywgYXQgbGVhc3QKIAkgKiBub3QgeWV0CiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KQEAgLTE5OTIsOSArMTk4NSwxMSBAQAogCSpuZXh0ID0gcHJvcDsKIAl3cml0ZV91bmxvY2soJmRldnRyZWVfbG9jayk7CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFCiAJLyogdHJ5IHRvIGFkZCB0byBwcm9jIGFzIHdlbGwgaWYgaXQgd2FzIGluaXRpYWxpemVkICovCiAJaWYgKG5wLT5wZGUpCiAJCXByb2NfZGV2aWNlX3RyZWVfYWRkX3Byb3AobnAtPnBkZSwgcHJvcCk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfREVWSUNFVFJFRSAqLwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYwppbmRleCA2ZGMzM2QxLi40Y2UwMTA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTk0LDExICs5NCwxNyBAQAogI2lmZGVmIENPTkZJR19QUEM2NAogI2RlZmluZSBSRUxPQyh4KSAgICAgICAgKCpQVFJSRUxPQygmKHgpKSkKICNkZWZpbmUgQUREUih4KQkJKHUzMikgYWRkX3JlbG9jX29mZnNldCgodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIE9GX1dPUktBUk9VTkRTCTAKICNlbHNlCiAjZGVmaW5lIFJFTE9DKHgpCSh4KQogI2RlZmluZSBBRERSKHgpCQkodTMyKSAoeCkKKyNkZWZpbmUgT0ZfV09SS0FST1VORFMJb2Zfd29ya2Fyb3VuZHMKK2ludCBvZl93b3JrYXJvdW5kczsKICNlbmRpZgogCisjZGVmaW5lIE9GX1dBX0NMQUlNCTEJLyogZG8gcGh5cy92aXJ0IGNsYWltIHNlcGFyYXRlbHksIHRoZW4gbWFwICovCisjZGVmaW5lIE9GX1dBX0xPTkdUUkFJTAkyCS8qIHdvcmsgYXJvdW5kIGxvbmd0cmFpbCBidWdzICovCisKICNkZWZpbmUgUFJPTV9CVUcoKSBkbyB7CQkJCQkJXAogICAgICAgICBwcm9tX3ByaW50Zigia2VybmVsIEJVRyBhdCAlcyBsaW5lIDB4JXghXG4iLAkJXAogCQkgICAgUkVMT0MoX19GSUxFX18pLCBfX0xJTkVfXyk7CQkJXApAQCAtMTExLDExICsxMTcsNiBAQAogI2RlZmluZSBwcm9tX2RlYnVnKHguLi4pCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUEMzMgotI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQwlfTUFDSF9QbWFjCi0jZGVmaW5lIFBMQVRGT1JNX0NIUlAJCV9NQUNIX2NocnAKLSNlbmRpZgotCiAKIHR5cGVkZWYgdTMyIHByb21fYXJnX3Q7CiAKQEAgLTEyOCwxMCArMTI5LDExIEBACiAKIHN0cnVjdCBwcm9tX3QgewogCWloYW5kbGUgcm9vdDsKLQlpaGFuZGxlIGNob3NlbjsKKwlwaGFuZGxlIGNob3NlbjsKIAlpbnQgY3B1OwogCWloYW5kbGUgc3Rkb3V0OwogCWloYW5kbGUgbW11bWFwOworCWloYW5kbGUgbWVtb3J5OwogfTsKIAogc3RydWN0IG1lbV9tYXBfZW50cnkgewpAQCAtMzYwLDE2ICszNjIsMzYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IHByb21fY2xhaW0odW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJdW5zaWduZWQgbG9uZyBhbGlnbikKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBwcm9tX3QgKl9wcm9tID0gJlJFTE9DKHByb20pOwogCi0JcmV0ID0gY2FsbF9wcm9tKCJjbGFpbSIsIDMsIDEsIChwcm9tX2FyZ190KXZpcnQsIChwcm9tX2FyZ190KXNpemUsCi0JCQkocHJvbV9hcmdfdClhbGlnbik7Ci0JaWYgKHJldCAhPSAtMSAmJiBfcHJvbS0+bW11bWFwICE9IDApCi0JCS8qIG9sZCBwbWFjcyBuZWVkIHVzIHRvIG1hcCBhcyB3ZWxsICovCisJaWYgKGFsaWduID09IDAgJiYgKE9GX1dPUktBUk9VTkRTICYgT0ZfV0FfQ0xBSU0pKSB7CisJCS8qCisJCSAqIE9sZCBPRiByZXF1aXJlcyB3ZSBjbGFpbSBwaHlzaWNhbCBhbmQgdmlydHVhbCBzZXBhcmF0ZWx5CisJCSAqIGFuZCB0aGVuIG1hcCBleHBsaWNpdGx5IChhc3N1bWluZyB2aXJ0dWFsIG1vZGUpCisJCSAqLworCQlpbnQgcmV0OworCQlwcm9tX2FyZ190IHJlc3VsdDsKKworCQlyZXQgPSBjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDUsIDIsICZyZXN1bHQsCisJCQkJICAgIEFERFIoImNsYWltIiksIF9wcm9tLT5tZW1vcnksCisJCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwkJaWYgKHJldCAhPSAwIHx8IHJlc3VsdCA9PSAtMSkKKwkJCXJldHVybiAtMTsKKwkJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LAorCQkJCSAgICBBRERSKCJjbGFpbSIpLCBfcHJvbS0+bW11bWFwLAorCQkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJY2FsbF9wcm9tKCJjYWxsLW1ldGhvZCIsIDQsIDEsIEFERFIoInJlbGVhc2UiKSwKKwkJCQkgIF9wcm9tLT5tZW1vcnksIHNpemUsIHZpcnQpOworCQkJcmV0dXJuIC0xOworCQl9CisJCS8qIHRoZSAweDEyIGlzIE0gKGNvaGVyZW5jZSkgKyBQUCA9PSByZWFkL3dyaXRlICovCiAJCWNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCA2LCAxLAotCQkJICBBRERSKCJtYXAiKSwgX3Byb20tPm1tdW1hcCwgMCwgc2l6ZSwgdmlydCwgdmlydCk7Ci0JcmV0dXJuIHJldDsKKwkJCSAgQUREUigibWFwIiksIF9wcm9tLT5tbXVtYXAsIDB4MTIsIHNpemUsIHZpcnQsIHZpcnQpOworCQlyZXR1cm4gdmlydDsKKwl9CisJcmV0dXJuIGNhbGxfcHJvbSgiY2xhaW0iLCAzLCAxLCAocHJvbV9hcmdfdCl2aXJ0LCAocHJvbV9hcmdfdClzaXplLAorCQkJIChwcm9tX2FyZ190KWFsaWduKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgcHJvbV9wYW5pYyhjb25zdCBjaGFyICpyZWFzb24pCkBAIC00MTUsMTEgKzQzNyw1MiBAQAogCXJldHVybiBjYWxsX3Byb20oImdldHByb3BsZW4iLCAyLCAxLCBub2RlLCBBRERSKHBuYW1lKSk7CiB9CiAKLXN0YXRpYyBpbnQgaW5saW5lIHByb21fc2V0cHJvcChwaGFuZGxlIG5vZGUsIGNvbnN0IGNoYXIgKnBuYW1lLAotCQkJICAgICAgIHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVsZW4pCitzdGF0aWMgdm9pZCBhZGRfc3RyaW5nKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKnEpCiB7Ci0JcmV0dXJuIGNhbGxfcHJvbSgic2V0cHJvcCIsIDQsIDEsIG5vZGUsIEFERFIocG5hbWUpLAotCQkJICh1MzIpKHVuc2lnbmVkIGxvbmcpIHZhbHVlLCAodTMyKSB2YWx1ZWxlbik7CisJY2hhciAqcCA9ICpzdHI7CisKKwl3aGlsZSAoKnEpCisJCSpwKysgPSAqcSsrOworCSpwKysgPSAnICc7CisJKnN0ciA9IHA7Cit9CisKK3N0YXRpYyBjaGFyICp0b2hleCh1bnNpZ25lZCBpbnQgeCkKK3sKKwlzdGF0aWMgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwlzdGF0aWMgY2hhciByZXN1bHRbOV07CisJaW50IGk7CisKKwlyZXN1bHRbOF0gPSAwOworCWkgPSA4OworCWRvIHsKKwkJLS1pOworCQlyZXN1bHRbaV0gPSBkaWdpdHNbeCAmIDB4Zl07CisJCXggPj49IDQ7CisJfSB3aGlsZSAoeCAhPSAwICYmIGkgPiAwKTsKKwlyZXR1cm4gJnJlc3VsdFtpXTsKK30KKworc3RhdGljIGludCBfX2luaXQgcHJvbV9zZXRwcm9wKHBoYW5kbGUgbm9kZSwgY29uc3QgY2hhciAqbm9kZW5hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqcG5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVsZW4pCit7CisJY2hhciBjbWRbMjU2XSwgKnA7CisKKwlpZiAoIShPRl9XT1JLQVJPVU5EUyAmIE9GX1dBX0xPTkdUUkFJTCkpCisJCXJldHVybiBjYWxsX3Byb20oInNldHByb3AiLCA0LCAxLCBub2RlLCBBRERSKHBuYW1lKSwKKwkJCQkgKHUzMikodW5zaWduZWQgbG9uZykgdmFsdWUsICh1MzIpIHZhbHVlbGVuKTsKKworCS8qIGdhaC4uLiBzZXRwcm9wIGRvZXNuJ3Qgd29yayBvbiBsb25ndHJhaWwsIGhhdmUgdG8gdXNlIGludGVycHJldCAqLworCXAgPSBjbWQ7CisJYWRkX3N0cmluZygmcCwgImRldiIpOworCWFkZF9zdHJpbmcoJnAsIG5vZGVuYW1lKTsKKwlhZGRfc3RyaW5nKCZwLCB0b2hleCgodTMyKSh1bnNpZ25lZCBsb25nKSB2YWx1ZSkpOworCWFkZF9zdHJpbmcoJnAsIHRvaGV4KHZhbHVlbGVuKSk7CisJYWRkX3N0cmluZygmcCwgdG9oZXgoQUREUihwbmFtZSkpKTsKKwlhZGRfc3RyaW5nKCZwLCB0b2hleChzdHJsZW4oUkVMT0MocG5hbWUpKSkpOworCWFkZF9zdHJpbmcoJnAsICJwcm9wZXJ0eSIpOworCSpwID0gMDsKKwlyZXR1cm4gY2FsbF9wcm9tKCJpbnRlcnByZXQiLCAxLCAxLCAodTMyKSh1bnNpZ25lZCBsb25nKSBjbWQpOwogfQogCiAvKiBXZSBjYW4ndCB1c2UgdGhlIHN0YW5kYXJkIHZlcnNpb25zIGJlY2F1c2Ugb2YgUkVMT0MgaGVhZGFjaGVzLiAqLwpAQCAtOTgwLDcgKzEwNDMsNyBAQAogCiAJcnRhc19pbnN0ID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiL3J0YXMiKSk7CiAJaWYgKCFJSEFORExFX1ZBTElEKHJ0YXNfaW5zdCkpIHsKLQkJcHJvbV9wcmludGYoIm9wZW5pbmcgcnRhcyBwYWNrYWdlIGZhaWxlZCIpOworCQlwcm9tX3ByaW50Zigib3BlbmluZyBydGFzIHBhY2thZ2UgZmFpbGVkICgleClcbiIsIHJ0YXNfaW5zdCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk4OCw3ICsxMDUxLDcgQEAKIAogCWlmIChjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDMsIDIsICZlbnRyeSwKIAkJCSAgQUREUigiaW5zdGFudGlhdGUtcnRhcyIpLAotCQkJICBydGFzX2luc3QsIGJhc2UpID09IFBST01fRVJST1IKKwkJCSAgcnRhc19pbnN0LCBiYXNlKSAhPSAwCiAJICAgIHx8IGVudHJ5ID09IDApIHsKIAkJcHJvbV9wcmludGYoIiBmYWlsZWRcbiIpOwogCQlyZXR1cm47CkBAIC05OTcsOCArMTA2MCwxMCBAQAogCiAJcmVzZXJ2ZV9tZW0oYmFzZSwgc2l6ZSk7CiAKLQlwcm9tX3NldHByb3AocnRhc19ub2RlLCAibGludXgscnRhcy1iYXNlIiwgJmJhc2UsIHNpemVvZihiYXNlKSk7Ci0JcHJvbV9zZXRwcm9wKHJ0YXNfbm9kZSwgImxpbnV4LHJ0YXMtZW50cnkiLCAmZW50cnksIHNpemVvZihlbnRyeSkpOworCXByb21fc2V0cHJvcChydGFzX25vZGUsICIvcnRhcyIsICJsaW51eCxydGFzLWJhc2UiLAorCQkgICAgICZiYXNlLCBzaXplb2YoYmFzZSkpOworCXByb21fc2V0cHJvcChydGFzX25vZGUsICIvcnRhcyIsICJsaW51eCxydGFzLWVudHJ5IiwKKwkJICAgICAmZW50cnksIHNpemVvZihlbnRyeSkpOwogCiAJcHJvbV9kZWJ1ZygicnRhcyBiYXNlICAgICA9IDB4JXhcbiIsIGJhc2UpOwogCXByb21fZGVidWcoInJ0YXMgZW50cnkgICAgPSAweCV4XG4iLCBlbnRyeSk7CkBAIC0xMDg5LDEwICsxMTU0LDYgQEAKIAkJaWYgKGJhc2UgPCBsb2NhbF9hbGxvY19ib3R0b20pCiAJCQlsb2NhbF9hbGxvY19ib3R0b20gPSBiYXNlOwogCi0JCS8qIFNhdmUgYXdheSB0aGUgVENFIHRhYmxlIGF0dHJpYnV0ZXMgZm9yIGxhdGVyIHVzZS4gKi8KLQkJcHJvbV9zZXRwcm9wKG5vZGUsICJsaW51eCx0Y2UtYmFzZSIsICZiYXNlLCBzaXplb2YoYmFzZSkpOwotCQlwcm9tX3NldHByb3Aobm9kZSwgImxpbnV4LHRjZS1zaXplIiwgJm1pbnNpemUsIHNpemVvZihtaW5zaXplKSk7Ci0KIAkJLyogSXQgc2VlbXMgT0YgZG9lc24ndCBudWxsLXRlcm1pbmF0ZSB0aGUgcGF0aCA6LSggKi8KIAkJbWVtc2V0KHBhdGgsIDAsIHNpemVvZihwYXRoKSk7CiAJCS8qIENhbGwgT0YgdG8gc2V0dXAgdGhlIFRDRSBoYXJkd2FyZSAqLwpAQCAtMTEwMSw2ICsxMTYyLDEwIEBACiAJCQlwcm9tX3ByaW50ZigicGFja2FnZS10by1wYXRoIGZhaWxlZFxuIik7CiAJCX0KIAorCQkvKiBTYXZlIGF3YXkgdGhlIFRDRSB0YWJsZSBhdHRyaWJ1dGVzIGZvciBsYXRlciB1c2UuICovCisJCXByb21fc2V0cHJvcChub2RlLCBwYXRoLCAibGludXgsdGNlLWJhc2UiLCAmYmFzZSwgc2l6ZW9mKGJhc2UpKTsKKwkJcHJvbV9zZXRwcm9wKG5vZGUsIHBhdGgsICJsaW51eCx0Y2Utc2l6ZSIsICZtaW5zaXplLCBzaXplb2YobWluc2l6ZSkpOworCiAJCXByb21fZGVidWcoIlRDRSB0YWJsZTogJXNcbiIsIHBhdGgpOwogCQlwcm9tX2RlYnVnKCJcdG5vZGUgPSAweCV4XG4iLCBub2RlKTsKIAkJcHJvbV9kZWJ1ZygiXHRiYXNlID0gMHgleFxuIiwgYmFzZSk7CkBAIC0xMzQyLDYgKzE0MDcsNyBAQAogLyoKICAqIEZvciByZWFsbHkgb2xkIHBvd2VybWFjcywgd2UgbmVlZCB0byBtYXAgdGhpbmdzIHdlIGNsYWltLgogICogRm9yIHRoYXQsIHdlIG5lZWQgdGhlIGloYW5kbGUgb2YgdGhlIG1tdS4KKyAqIEFsc28sIG9uIHRoZSBsb25ndHJhaWwsIHdlIG5lZWQgdG8gd29yayBhcm91bmQgb3RoZXIgYnVncy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHByb21fZmluZF9tbXUodm9pZCkKIHsKQEAgLTEzNTUsMTIgKzE0MjEsMTkgQEAKIAlpZiAocHJvbV9nZXRwcm9wKG9wcm9tLCAibW9kZWwiLCB2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikpIDw9IDApCiAJCXJldHVybjsKIAl2ZXJzaW9uW3NpemVvZih2ZXJzaW9uKSAtIDFdID0gMDsKLQlwcm9tX3ByaW50ZigiT0YgdmVyc2lvbiBpcyAnJXMnXG4iLCB2ZXJzaW9uKTsKIAkvKiBYWFggbWlnaHQgbmVlZCB0byBhZGQgb3RoZXIgdmVyc2lvbnMgaGVyZSAqLwotCWlmIChzdHJjbXAodmVyc2lvbiwgIk9wZW4gRmlybXdhcmUsIDEuMC41IikgIT0gMCkKKwlpZiAoc3RyY21wKHZlcnNpb24sICJPcGVuIEZpcm13YXJlLCAxLjAuNSIpID09IDApCisJCW9mX3dvcmthcm91bmRzID0gT0ZfV0FfQ0xBSU07CisJZWxzZSBpZiAoc3RybmNtcCh2ZXJzaW9uLCAiRmlybVdvcmtzLDMuIiwgMTIpID09IDApIHsKKwkJb2Zfd29ya2Fyb3VuZHMgPSBPRl9XQV9DTEFJTSB8IE9GX1dBX0xPTkdUUkFJTDsKKwkJY2FsbF9wcm9tKCJpbnRlcnByZXQiLCAxLCAxLCAiZGV2IC9tZW1vcnkgMCB0byBhbGxvdy1yZWNsYWltIik7CisJfSBlbHNlCiAJCXJldHVybjsKKwlfcHJvbS0+bWVtb3J5ID0gY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgQUREUigiL21lbW9yeSIpKTsKIAlwcm9tX2dldHByb3AoX3Byb20tPmNob3NlbiwgIm1tdSIsICZfcHJvbS0+bW11bWFwLAogCQkgICAgIHNpemVvZihfcHJvbS0+bW11bWFwKSk7CisJaWYgKCFJSEFORExFX1ZBTElEKF9wcm9tLT5tZW1vcnkpIHx8ICFJSEFORExFX1ZBTElEKF9wcm9tLT5tbXVtYXApKQorCQlvZl93b3JrYXJvdW5kcyAmPSB+T0ZfV0FfQ0xBSU07CQkvKiBobW1tICovCiB9CiAjZWxzZQogI2RlZmluZSBwcm9tX2ZpbmRfbW11KCkKQEAgLTEzODIsMTYgKzE0NTUsMTcgQEAKIAltZW1zZXQocGF0aCwgMCwgMjU2KTsKIAljYWxsX3Byb20oImluc3RhbmNlLXRvLXBhdGgiLCAzLCAxLCBfcHJvbS0+c3Rkb3V0LCBwYXRoLCAyNTUpOwogCXZhbCA9IGNhbGxfcHJvbSgiaW5zdGFuY2UtdG8tcGFja2FnZSIsIDEsIDEsIF9wcm9tLT5zdGRvdXQpOwotCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsc3Rkb3V0LXBhY2thZ2UiLCAmdmFsLCBzaXplb2YodmFsKSk7CisJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LHN0ZG91dC1wYWNrYWdlIiwKKwkJICAgICAmdmFsLCBzaXplb2YodmFsKSk7CiAJcHJvbV9wcmludGYoIk9GIHN0ZG91dCBkZXZpY2UgaXM6ICVzXG4iLCBSRUxPQyhvZl9zdGRvdXRfZGV2aWNlKSk7Ci0JcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxzdGRvdXQtcGF0aCIsCi0JCSAgICAgUkVMT0Mob2Zfc3Rkb3V0X2RldmljZSksIHN0cmxlbihSRUxPQyhvZl9zdGRvdXRfZGV2aWNlKSkrMSk7CisJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LHN0ZG91dC1wYXRoIiwKKwkJICAgICBwYXRoLCBzdHJsZW4ocGF0aCkgKyAxKTsKIAogCS8qIElmIGl0J3MgYSBkaXNwbGF5LCBub3RlIGl0ICovCiAJbWVtc2V0KHR5cGUsIDAsIHNpemVvZih0eXBlKSk7CiAJcHJvbV9nZXRwcm9wKHZhbCwgImRldmljZV90eXBlIiwgdHlwZSwgc2l6ZW9mKHR5cGUpKTsKIAlpZiAoc3RyY21wKHR5cGUsIFJFTE9DKCJkaXNwbGF5IikpID09IDApCi0JCXByb21fc2V0cHJvcCh2YWwsICJsaW51eCxib290LWRpc3BsYXkiLCBOVUxMLCAwKTsKKwkJcHJvbV9zZXRwcm9wKHZhbCwgcGF0aCwgImxpbnV4LGJvb3QtZGlzcGxheSIsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9jbG9zZV9zdGRpbih2b2lkKQpAQCAtMTUxNCw3ICsxNTg4LDcgQEAKIAogCQkvKiBTdWNjZXNzICovCiAJCXByb21fcHJpbnRmKCJkb25lXG4iKTsKLQkJcHJvbV9zZXRwcm9wKG5vZGUsICJsaW51eCxvcGVuZWQiLCBOVUxMLCAwKTsKKwkJcHJvbV9zZXRwcm9wKG5vZGUsIHBhdGgsICJsaW51eCxvcGVuZWQiLCBOVUxMLCAwKTsKIAogCQkvKiBTZXR1cCBhIHVzYWJsZSBjb2xvciB0YWJsZSB3aGVuIHRoZSBhcHByb3ByaWF0ZQogCQkgKiBtZXRob2QgaXMgYXZhaWxhYmxlLiBTaG91bGQgdXBkYXRlIHRoaXMgdG8gc2V0LWNvbG9ycyAqLwpAQCAtMTg4NCw5ICsxOTU4LDExIEBACiAJLyogaW50ZXJydXB0IG9uIHRoaXMgcmV2aXNpb24gb2YgdTMgaXMgbnVtYmVyIDAgYW5kIGxldmVsICovCiAJaW50ZXJydXB0c1swXSA9IDA7CiAJaW50ZXJydXB0c1sxXSA9IDE7Ci0JcHJvbV9zZXRwcm9wKGkyYywgImludGVycnVwdHMiLCAmaW50ZXJydXB0cywgc2l6ZW9mKGludGVycnVwdHMpKTsKKwlwcm9tX3NldHByb3AoaTJjLCAiL3UzQDAsZjgwMDAwMDAvaTJjQGY4MDAxMDAwIiwgImludGVycnVwdHMiLAorCQkgICAgICZpbnRlcnJ1cHRzLCBzaXplb2YoaW50ZXJydXB0cykpOwogCXBhcmVudCA9ICh1MzIpbXBpYzsKLQlwcm9tX3NldHByb3AoaTJjLCAiaW50ZXJydXB0LXBhcmVudCIsICZwYXJlbnQsIHNpemVvZihwYXJlbnQpKTsKKwlwcm9tX3NldHByb3AoaTJjLCAiL3UzQDAsZjgwMDAwMDAvaTJjQGY4MDAxMDAwIiwgImludGVycnVwdC1wYXJlbnQiLAorCQkgICAgICZwYXJlbnQsIHNpemVvZihwYXJlbnQpKTsKICNlbmRpZgogfQogCkBAIC0xOTIyLDExICsxOTk4LDExIEBACiAJCVJFTE9DKHByb21faW5pdHJkX2VuZCkgPSBSRUxPQyhwcm9tX2luaXRyZF9zdGFydCkgKyByNDsKIAogCQl2YWwgPSBSRUxPQyhwcm9tX2luaXRyZF9zdGFydCk7Ci0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsaW5pdHJkLXN0YXJ0IiwgJnZhbCwKLQkJCSAgICAgc2l6ZW9mKHZhbCkpOworCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsaW5pdHJkLXN0YXJ0IiwKKwkJCSAgICAgJnZhbCwgc2l6ZW9mKHZhbCkpOwogCQl2YWwgPSBSRUxPQyhwcm9tX2luaXRyZF9lbmQpOwotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LGluaXRyZC1lbmQiLCAmdmFsLAotCQkJICAgICBzaXplb2YodmFsKSk7CisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxpbml0cmQtZW5kIiwKKwkJCSAgICAgJnZhbCwgc2l6ZW9mKHZhbCkpOwogCiAJCXJlc2VydmVfbWVtKFJFTE9DKHByb21faW5pdHJkX3N0YXJ0KSwKIAkJCSAgICBSRUxPQyhwcm9tX2luaXRyZF9lbmQpIC0gUkVMT0MocHJvbV9pbml0cmRfc3RhcnQpKTsKQEAgLTE5NjksMTYgKzIwNDUsMTcgQEAKIAlwcm9tX2luaXRfY2xpZW50X3NlcnZpY2VzKHBwKTsKIAogCS8qCisJICogU2VlIGlmIHRoaXMgT0YgaXMgb2xkIGVub3VnaCB0aGF0IHdlIG5lZWQgdG8gZG8gZXhwbGljaXQgbWFwcworCSAqIGFuZCBvdGhlciB3b3JrYXJvdW5kcworCSAqLworCXByb21fZmluZF9tbXUoKTsKKworCS8qCiAJICogSW5pdCBwcm9tIHN0ZG91dCBkZXZpY2UKIAkgKi8KIAlwcm9tX2luaXRfc3Rkb3V0KCk7CiAKIAkvKgotCSAqIFNlZSBpZiB0aGlzIE9GIGlzIG9sZCBlbm91Z2ggdGhhdCB3ZSBuZWVkIHRvIGRvIGV4cGxpY2l0IG1hcHMKLQkgKi8KLQlwcm9tX2ZpbmRfbW11KCk7Ci0KLQkvKgogCSAqIENoZWNrIGZvciBhbiBpbml0cmQKIAkgKi8KIAlwcm9tX2NoZWNrX2luaXRyZChyMywgcjQpOwpAQCAtMTk4OSwxNCArMjA2NiwxNSBAQAogCSAqLwogCVJFTE9DKG9mX3BsYXRmb3JtKSA9IHByb21fZmluZF9tYWNoaW5lX3R5cGUoKTsKIAlnZXRwcm9wX3J2YWwgPSBSRUxPQyhvZl9wbGF0Zm9ybSk7Ci0JcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxwbGF0Zm9ybSIsCisJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LHBsYXRmb3JtIiwKIAkJICAgICAmZ2V0cHJvcF9ydmFsLCBzaXplb2YoZ2V0cHJvcF9ydmFsKSk7CiAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKIAkvKgogCSAqIE9uIHBTZXJpZXMsIGluZm9ybSB0aGUgZmlybXdhcmUgYWJvdXQgb3VyIGNhcGFiaWxpdGllcwogCSAqLwotCWlmIChSRUxPQyhvZl9wbGF0Zm9ybSkgJiBQTEFURk9STV9QU0VSSUVTKQorCWlmIChSRUxPQyhvZl9wbGF0Zm9ybSkgPT0gUExBVEZPUk1fUFNFUklFUyB8fAorCSAgICBSRUxPQyhvZl9wbGF0Zm9ybSkgPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKQogCQlwcm9tX3NlbmRfY2FwYWJpbGl0aWVzKCk7CiAjZW5kaWYKIApAQCAtMjA1MCwyMSArMjEyOCwyMyBAQAogCSAqIEZpbGwgaW4gc29tZSBpbmZvcyBmb3IgdXNlIGJ5IHRoZSBrZXJuZWwgbGF0ZXIgb24KIAkgKi8KIAlpZiAoUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpKQotCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgImxpbnV4LG1lbW9yeS1saW1pdCIsCisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCxtZW1vcnktbGltaXQiLAogCQkJICAgICAmUkVMT0MocHJvbV9tZW1vcnlfbGltaXQpLAogCQkJICAgICBzaXplb2YocHJvbV9tZW1vcnlfbGltaXQpKTsKICNpZmRlZiBDT05GSUdfUFBDNjQKIAlpZiAoUkVMT0MocHBjNjRfaW9tbXVfb2ZmKSkKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxpb21tdS1vZmYiLCBOVUxMLCAwKTsKKwkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICIvY2hvc2VuIiwgImxpbnV4LGlvbW11LW9mZiIsCisJCQkgICAgIE5VTEwsIDApOwogCiAJaWYgKFJFTE9DKGlvbW11X2ZvcmNlX29uKSkKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCxpb21tdS1mb3JjZS1vbiIsIE5VTEwsIDApOworCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsaW9tbXUtZm9yY2Utb24iLAorCQkJICAgICBOVUxMLCAwKTsKIAogCWlmIChSRUxPQyhwcm9tX3RjZV9hbGxvY19zdGFydCkpIHsKLQkJcHJvbV9zZXRwcm9wKF9wcm9tLT5jaG9zZW4sICJsaW51eCx0Y2UtYWxsb2Mtc3RhcnQiLAorCQlwcm9tX3NldHByb3AoX3Byb20tPmNob3NlbiwgIi9jaG9zZW4iLCAibGludXgsdGNlLWFsbG9jLXN0YXJ0IiwKIAkJCSAgICAgJlJFTE9DKHByb21fdGNlX2FsbG9jX3N0YXJ0KSwKIAkJCSAgICAgc2l6ZW9mKHByb21fdGNlX2FsbG9jX3N0YXJ0KSk7Ci0JCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAibGludXgsdGNlLWFsbG9jLWVuZCIsCisJCXByb21fc2V0cHJvcChfcHJvbS0+Y2hvc2VuLCAiL2Nob3NlbiIsICJsaW51eCx0Y2UtYWxsb2MtZW5kIiwKIAkJCSAgICAgJlJFTE9DKHByb21fdGNlX2FsbG9jX2VuZCksCiAJCQkgICAgIHNpemVvZihwcm9tX3RjZV9hbGxvY19lbmQpKTsKIAl9CkBAIC0yMDgxLDggKzIxNjEsMTMgQEAKIAlwcm9tX3ByaW50ZigiY29weWluZyBPRiBkZXZpY2UgdHJlZSAuLi5cbiIpOwogCWZsYXR0ZW5fZGV2aWNlX3RyZWUoKTsKIAotCS8qIGluIGNhc2Ugc3RkaW4gaXMgVVNCIGFuZCBzdGlsbCBhY3RpdmUgb24gSUJNIG1hY2hpbmVzLi4uICovCi0JcHJvbV9jbG9zZV9zdGRpbigpOworCS8qCisJICogaW4gY2FzZSBzdGRpbiBpcyBVU0IgYW5kIHN0aWxsIGFjdGl2ZSBvbiBJQk0gbWFjaGluZXMuLi4KKwkgKiBVbmZvcnR1bmF0ZWx5IHF1aWVzY2UgY3Jhc2hlcyBvbiBzb21lIHBvd2VybWFjcyBpZiB3ZSBoYXZlCisJICogY2xvc2VkIHN0ZGluIGFscmVhZHkgKGluIHBhcnRpY3VsYXIgdGhlIHBvd2VyYm9vayAxMDEpLgorCSAqLworCWlmIChSRUxPQyhvZl9wbGF0Zm9ybSkgIT0gUExBVEZPUk1fUE9XRVJNQUMpCisJCXByb21fY2xvc2Vfc3RkaW4oKTsKIAogCS8qCiAJICogQ2FsbCBPRiAicXVpZXNjZSIgbWV0aG9kIHRvIHNodXQgZG93biBwZW5kaW5nIERNQSdzIGZyb20KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCmluZGV4IDViZGQ1YjAuLjdhOTViOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4gLyogZm9yIHBwY19tZCAqLwogI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogCiAvKiBUb2tlbiBmb3IgU2Vuc29ycyAqLwogI2RlZmluZSBLRVlfU1dJVENICQkweDAwMDEKQEAgLTI1OSw3ICsyNTgsNyBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAKLQlpZiAoIShzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fUFNFUklFUykpCisJaWYgKF9tYWNoaW5lICE9IFBMQVRGT1JNX1BTRVJJRVMgJiYgX21hY2hpbmUgIT0gUExBVEZPUk1fUFNFUklFU19MUEFSKQogCQlyZXR1cm4gMTsKIAogCXJ0YXNfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJydGFzIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDlkNGUwN2YuLjQyODNmYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC0yOSw5ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgotI2VuZGlmCiAKIHN0cnVjdCBydGFzX3QgcnRhcyA9IHsKIAkubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRApAQCAtNjcxLDcgKzY2OCw3IEBACiAJICogdGhlIHN0b3Atc2VsZiB0b2tlbiBpZiBhbnkKIAkgKi8KICNpZmRlZiBDT05GSUdfUFBDNjQKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKIAkJcnRhc19yZWdpb24gPSBtaW4obG1iLnJtb19zaXplLCBSVEFTX0lOU1RBTlRJQVRFX01BWCk7CiAjZW5kaWYKIAlydGFzX3Jtb19idWYgPSBsbWJfYWxsb2NfYmFzZShSVEFTX1JNT0JVRl9NQVgsIFBBR0VfU0laRSwgcnRhc19yZWdpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcnRhc19wY2kuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9ydGFzX3BjaS5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKaW5kZXggM2MzZjE5MS4uMGU1YThlMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcnRhc19wY2kuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKQEAgLTUsMTkgKzUsMTkgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMyBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQGF1LmlibS5jb20+LCBJQk0KICAqCiAgKiBSVEFTIHNwZWNpZmljIHJvdXRpbmVzIGZvciBQQ0kuCi0gKiAKKyAqCiAgKiBCYXNlZCBvbiBjb2RlIGZyb20gcGNpLmMsIGNocnBfcGNpLmMgYW5kIHBTZXJpZXNfcGNpLmMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogICAgCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC00Nyw3ICs0Nyw3IEBACiBzdGF0aWMgaW50IGlibV9yZWFkX3BjaV9jb25maWc7CiBzdGF0aWMgaW50IGlibV93cml0ZV9wY2lfY29uZmlnOwogCi1zdGF0aWMgaW50IGNvbmZpZ19hY2Nlc3NfdmFsaWQoc3RydWN0IHBjaV9kbiAqZG4sIGludCB3aGVyZSkKK3N0YXRpYyBpbmxpbmUgaW50IGNvbmZpZ19hY2Nlc3NfdmFsaWQoc3RydWN0IHBjaV9kbiAqZG4sIGludCB3aGVyZSkKIHsKIAlpZiAod2hlcmUgPCAyNTYpCiAJCXJldHVybiAxOwpAQCAtNzIsMTYgKzcyLDE0IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0YXNfcmVhZF9jb25maWcoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCitzdGF0aWMgaW50IHJ0YXNfcmVhZF9jb25maWcoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKIHsKIAlpbnQgcmV0dXJudmFsID0gLTE7CiAJdW5zaWduZWQgbG9uZyBidWlkLCBhZGRyOwogCWludCByZXQ7Ci0Jc3RydWN0IHBjaV9kbiAqcGRuOwogCi0JaWYgKCFkbiB8fCAhZG4tPmRhdGEpCisJaWYgKCFwZG4pCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JcGRuID0gZG4tPmRhdGE7CiAJaWYgKCFjb25maWdfYWNjZXNzX3ZhbGlkKHBkbiwgd2hlcmUpKQogCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwogCkBAIC05MCw3ICs4OCw3IEBACiAJYnVpZCA9IHBkbi0+cGhiLT5idWlkOwogCWlmIChidWlkKSB7CiAJCXJldCA9IHJ0YXNfY2FsbChpYm1fcmVhZF9wY2lfY29uZmlnLCA0LCAyLCAmcmV0dXJudmFsLAotCQkJCWFkZHIsIGJ1aWQgPj4gMzIsIGJ1aWQgJiAweGZmZmZmZmZmLCBzaXplKTsKKwkJCQlhZGRyLCBCVUlEX0hJKGJ1aWQpLCBCVUlEX0xPKGJ1aWQpLCBzaXplKTsKIAl9IGVsc2UgewogCQlyZXQgPSBydGFzX2NhbGwocmVhZF9wY2lfY29uZmlnLCAyLCAyLCAmcmV0dXJudmFsLCBhZGRyLCBzaXplKTsKIAl9CkBAIC0xMDAsNyArOTgsNyBAQAogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCiAJaWYgKHJldHVybnZhbCA9PSBFRUhfSU9fRVJST1JfVkFMVUUoc2l6ZSkgJiYKLQkgICAgZWVoX2RuX2NoZWNrX2ZhaWx1cmUgKGRuLCBOVUxMKSkKKwkgICAgZWVoX2RuX2NoZWNrX2ZhaWx1cmUgKHBkbi0+bm9kZSwgTlVMTCkpCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwpAQCAtMTE4LDIzICsxMTYsMjMgQEAKIAkJYnVzZG4gPSBidXMtPnN5c2RhdGE7CS8qIG11c3QgYmUgYSBwaGIgKi8KIAogCS8qIFNlYXJjaCBvbmx5IGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgYnVzICovCi0JZm9yIChkbiA9IGJ1c2RuLT5jaGlsZDsgZG47IGRuID0gZG4tPnNpYmxpbmcpCi0JCWlmIChkbi0+ZGF0YSAmJiBQQ0lfRE4oZG4pLT5kZXZmbiA9PSBkZXZmbgorCWZvciAoZG4gPSBidXNkbi0+Y2hpbGQ7IGRuOyBkbiA9IGRuLT5zaWJsaW5nKSB7CisJCXN0cnVjdCBwY2lfZG4gKnBkbiA9IFBDSV9ETihkbik7CisJCWlmIChwZG4gJiYgcGRuLT5kZXZmbiA9PSBkZXZmbgogCQkgICAgJiYgb2ZfZGV2aWNlX2F2YWlsYWJsZShkbikpCi0JCQlyZXR1cm4gcnRhc19yZWFkX2NvbmZpZyhkbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJCQlyZXR1cm4gcnRhc19yZWFkX2NvbmZpZyhwZG4sIHdoZXJlLCBzaXplLCB2YWwpOworCX0KIAogCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiB9CiAKLWludCBydGFzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoraW50IHJ0YXNfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGJ1aWQsIGFkZHI7CiAJaW50IHJldDsKLQlzdHJ1Y3QgcGNpX2RuICpwZG47CiAKLQlpZiAoIWRuIHx8ICFkbi0+ZGF0YSkKKwlpZiAoIXBkbikKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQlwZG4gPSBkbi0+ZGF0YTsKIAlpZiAoIWNvbmZpZ19hY2Nlc3NfdmFsaWQocGRuLCB3aGVyZSkpCiAJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CiAKQEAgLTE0Miw3ICsxNDAsOCBAQAogCQkocGRuLT5kZXZmbiA8PCA4KSB8ICh3aGVyZSAmIDB4ZmYpOwogCWJ1aWQgPSBwZG4tPnBoYi0+YnVpZDsKIAlpZiAoYnVpZCkgewotCQlyZXQgPSBydGFzX2NhbGwoaWJtX3dyaXRlX3BjaV9jb25maWcsIDUsIDEsIE5VTEwsIGFkZHIsIGJ1aWQgPj4gMzIsIGJ1aWQgJiAweGZmZmZmZmZmLCBzaXplLCAodWxvbmcpIHZhbCk7CisJCXJldCA9IHJ0YXNfY2FsbChpYm1fd3JpdGVfcGNpX2NvbmZpZywgNSwgMSwgTlVMTCwgYWRkciwKKwkJCUJVSURfSEkoYnVpZCksIEJVSURfTE8oYnVpZCksIHNpemUsICh1bG9uZykgdmFsKTsKIAl9IGVsc2UgewogCQlyZXQgPSBydGFzX2NhbGwod3JpdGVfcGNpX2NvbmZpZywgMywgMSwgTlVMTCwgYWRkciwgc2l6ZSwgKHVsb25nKXZhbCk7CiAJfQpAQCAtMTY1LDEwICsxNjQsMTIgQEAKIAkJYnVzZG4gPSBidXMtPnN5c2RhdGE7CS8qIG11c3QgYmUgYSBwaGIgKi8KIAogCS8qIFNlYXJjaCBvbmx5IGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgYnVzICovCi0JZm9yIChkbiA9IGJ1c2RuLT5jaGlsZDsgZG47IGRuID0gZG4tPnNpYmxpbmcpCi0JCWlmIChkbi0+ZGF0YSAmJiBQQ0lfRE4oZG4pLT5kZXZmbiA9PSBkZXZmbgorCWZvciAoZG4gPSBidXNkbi0+Y2hpbGQ7IGRuOyBkbiA9IGRuLT5zaWJsaW5nKSB7CisJCXN0cnVjdCBwY2lfZG4gKnBkbiA9IFBDSV9ETihkbik7CisJCWlmIChwZG4gJiYgcGRuLT5kZXZmbiA9PSBkZXZmbgogCQkgICAgJiYgb2ZfZGV2aWNlX2F2YWlsYWJsZShkbikpCi0JCQlyZXR1cm4gcnRhc193cml0ZV9jb25maWcoZG4sIHdoZXJlLCBzaXplLCB2YWwpOworCQkJcmV0dXJuIHJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgd2hlcmUsIHNpemUsIHZhbCk7CisJfQogCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiB9CiAKQEAgLTIyMSw3ICsyMjIsNyBAQAogCS8qIFB5dGhvbidzIHJlZ2lzdGVyIGZpbGUgaXMgMSBNQiBpbiBzaXplLiAqLwogCWNoaXBfcmVncyA9IGlvcmVtYXAocmVnX3N0cnVjdC5hZGRyZXNzICYgfigweGZmZmZmVUwpLCAweDEwMDAwMCk7CiAKLQkvKiAKKwkvKgogCSAqIEZpcm13YXJlIGRvZXNuJ3QgYWx3YXlzIGNsZWFyIHRoaXMgYml0IHdoaWNoIGlzIGNyaXRpY2FsCiAJICogZm9yIGdvb2QgcGVyZm9ybWFuY2UgLSBBbnRvbgogCSAqLwpAQCAtMjkyLDcgKzI5Myw3IEBACiAJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkgewogCQlyZXR1cm4gMTsKICAJfQotIAorCiAJcGhiLT5maXJzdF9idXNubyA9ICBidXNfcmFuZ2VbMF07CiAJcGhiLT5sYXN0X2J1c25vICA9ICBidXNfcmFuZ2VbMV07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IGUyMjg1NmUuLjMzZTdmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgpAQCAtNTEsNiArNTIsOSBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20veG1vbi5oPgorCisjaW5jbHVkZSAic2V0dXAuaCIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTYwLDYgKzY0LDEzIEBACiAjZGVmaW5lIERCRyhmbXQuLi4pCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQoraW50IF9tYWNoaW5lID0gMDsKK0VYUE9SVF9TWU1CT0woX21hY2hpbmUpOworI2VuZGlmCisKK3Vuc2lnbmVkIGxvbmcga2xpbWl0ID0gKHVuc2lnbmVkIGxvbmcpIF9lbmQ7CisKIC8qCiAgKiBUaGlzIHN0aWxsIHNlZW1zIHRvIGJlIG5lZWRlZC4uLiAtLSBwYXVsdXMKICAqLyAKQEAgLTQzMywxMCArNDQ0LDggQEAKIAlpZiAoaW5pdHJkX3N0YXJ0ID49IEtFUk5FTEJBU0UgJiYgaW5pdHJkX2VuZCA+PSBLRVJORUxCQVNFICYmCiAJICAgIGluaXRyZF9lbmQgPiBpbml0cmRfc3RhcnQpCiAJCVJPT1RfREVWID0gUm9vdF9SQU0wOwotCWVsc2UgewotCQlwcmludGsoIkJvZ3VzIGluaXRyZCAlMDhseCAlMDhseFxuIiwgaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kKTsKKwllbHNlCiAJCWluaXRyZF9zdGFydCA9IGluaXRyZF9lbmQgPSAwOwotCX0KIAogCWlmIChpbml0cmRfc3RhcnQpCiAJCXByaW50aygiRm91bmQgaW5pdHJkIGF0IDB4JWx4OjB4JWx4XG4iLCBpbml0cmRfc3RhcnQsIGluaXRyZF9lbmQpOwpAQCAtNTEwLDggKzUxOSw4IEBACiAJICogT24gcFNlcmllcyBMUEFSLCB3ZSBuZWVkIHRvIGtub3cgaG93IG1hbnkgY3B1cwogCSAqIGNvdWxkIHBvc3NpYmx5IGJlIGFkZGVkIHRvIHRoaXMgcGFydGl0aW9uLgogCSAqLwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUiAmJgotCQkJCShkbiA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpKSkgeworCWlmIChfbWFjaGluZSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIgJiYKKwkgICAgKGRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIikpKSB7CiAJCWludCBudW1fYWRkcl9jZWxsLCBudW1fc2l6ZV9jZWxsLCBtYXhjcHVzOwogCQl1bnNpZ25lZCBpbnQgKmlyZWc7CiAKQEAgLTU1NSw3ICs1NjQsMjcgQEAKIAkJCWNwdV9zZXQoY3B1IF4gMHgxLCBjcHVfc2libGluZ19tYXBbY3B1XSk7CiAJfQogCi0Jc3lzdGVtY2ZnLT5wcm9jZXNzb3JDb3VudCA9IG51bV9wcmVzZW50X2NwdXMoKTsKKwl2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50ID0gbnVtX3ByZXNlbnRfY3B1cygpOwogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2lmZGVmIENPTkZJR19YTU9OCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV94bW9uKGNoYXIgKnApCit7CisJLyogZW5zdXJlIHhtb24gaXMgZW5hYmxlZCAqLworCWlmIChwKSB7CisJCWlmIChzdHJuY21wKHAsICJvbiIsIDIpID09IDApCisJCQl4bW9uX2luaXQoMSk7CisJCWlmIChzdHJuY21wKHAsICJvZmYiLCAzKSA9PSAwKQorCQkJeG1vbl9pbml0KDApOworCQlpZiAoc3RybmNtcChwLCAiZWFybHkiLCA1KSAhPSAwKQorCQkJcmV0dXJuIDA7CisJfQorCXhtb25faW5pdCgxKTsKKwlkZWJ1Z2dlcihOVUxMKTsKKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInhtb24iLCBlYXJseV94bW9uKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC5oIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYmJhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9QT1dFUlBDX0tFUk5FTF9TRVRVUF9ICisjZGVmaW5lIF9QT1dFUlBDX0tFUk5FTF9TRVRVUF9ICisKK3ZvaWQgY2hlY2tfZm9yX2luaXRyZCh2b2lkKTsKKworI2VuZGlmIC8qIF9QT1dFUlBDX0tFUk5FTF9TRVRVUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggM2FmMjYzMS4uYzk4Y2ZjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAorI2luY2x1ZGUgInNldHVwLmgiCisKICNkZWZpbmUgREJHKGZtdC4uLikKIAogI2lmIGRlZmluZWQgQ09ORklHX0tHREIKQEAgLTcwLDggKzcyLDYgQEAKIGludCBoYXZlX29mID0gMTsKIAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQotaW50IF9tYWNoaW5lID0gMDsKLQogZXh0ZXJuIHZvaWQgcHJlcF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgcG1hY19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2hycF9pbml0KHZvaWQpOwpAQCAtMjc5LDcgKzI3OSw2IEBACiAvKiBXYXJuaW5nLCBJTyBiYXNlIGlzIG5vdCB5ZXQgaW5pdGVkICovCiB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JZXh0ZXJuIGNoYXIgKmtsaW1pdDsKIAlleHRlcm4gdm9pZCBkb19pbml0X2Jvb3RtZW0odm9pZCk7CiAKIAkvKiBzbyB1ZGVsYXkgZG9lcyBzb21ldGhpbmcgc2Vuc2libGUsIGFzc3VtZSA8PSAxMDAwIGJvZ29taXBzICovCkBAIC0zMDMsMTQgKzMwMiw5IEBACiAJCXBtYWNfZmVhdHVyZV9pbml0KCk7CS8qIE5ldyBjb29sIHdheSAqLwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWE1PTgotCXhtb25fbWFwX3NjYygpOwotCWlmIChzdHJzdHIoY21kX2xpbmUsICJ4bW9uIikpIHsKLQkJeG1vbl9pbml0KDEpOwotCQlkZWJ1Z2dlcihOVUxMKTsKLQl9Ci0jZW5kaWYgLyogQ09ORklHX1hNT04gKi8KLQlpZiAoIHBwY19tZC5wcm9ncmVzcyApIHBwY19tZC5wcm9ncmVzcygic2V0dXBfYXJjaDogZW50ZXIiLCAweDNlYWIpOworI2lmZGVmIENPTkZJR19YTU9OX0RFRkFVTFQKKwl4bW9uX2luaXQoMSk7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCiAJaWYgKHBwY19tZC5rZ2RiX21hcF9zY2MpCkBAIC0zNDMsNyArMzM3LDcgQEAKIAlpbml0X21tLnN0YXJ0X2NvZGUgPSBQQUdFX09GRlNFVDsKIAlpbml0X21tLmVuZF9jb2RlID0gKHVuc2lnbmVkIGxvbmcpIF9ldGV4dDsKIAlpbml0X21tLmVuZF9kYXRhID0gKHVuc2lnbmVkIGxvbmcpIF9lZGF0YTsKLQlpbml0X21tLmJyayA9ICh1bnNpZ25lZCBsb25nKSBrbGltaXQ7CisJaW5pdF9tbS5icmsgPSBrbGltaXQ7CiAKIAkvKiBTYXZlIHVucGFyc2VkIGNvbW1hbmQgbGluZSBjb3B5IGZvciAvcHJvYy9jbWRsaW5lICovCiAJc3RybGNweShzYXZlZF9jb21tYW5kX2xpbmUsIGNtZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggMDQ3MWU4NC4uZmRiZDlmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtNTcsMTAgKzU3LDExIEBACiAjaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX25hY2EuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgogCisjaW5jbHVkZSAic2V0dXAuaCIKKwogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKICNlbHNlCkBAIC05NCwxNSArOTUsNiBAQAogCWRvIHsgdWRiZ19wdXRjID0gY2FsbF9ydGFzX2Rpc3BsYXlfc3RhdHVzX2RlbGF5OyB9IHdoaWxlKDApCiAjZW5kaWYKIAotLyogZXh0ZXJuIHZvaWQgKnN0YWI7ICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7Ci0KLWV4dGVybiB2b2lkIG1tX2luaXRfcHBjNjQodm9pZCk7Ci1leHRlcm4gdm9pZCBzdGFiX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBzdGFiKTsKLWV4dGVybiB2b2lkIGh0YWJfaW5pdGlhbGl6ZSh2b2lkKTsKLWV4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICpmbGF0X2R0KTsKLWV4dGVybiB2b2lkIHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKTsKLQogaW50IGhhdmVfb2YgPSAxOwogaW50IGJvb3RfY3B1aWQgPSAwOwogaW50IGJvb3RfY3B1aWRfcGh5cyA9IDA7CkBAIC0yNTQsMTEgKzI0NiwxMCBAQAogCSAqIEl0ZXJhdGUgYWxsIHBwY19tZCBzdHJ1Y3R1cmVzIHVudGlsIHdlIGZpbmQgdGhlIHByb3BlcgogCSAqIG9uZSBmb3IgdGhlIGN1cnJlbnQgbWFjaGluZSB0eXBlCiAJICovCi0JREJHKCJQcm9iaW5nIG1hY2hpbmUgdHlwZSBmb3IgcGxhdGZvcm0gJXguLi5cbiIsCi0JICAgIHN5c3RlbWNmZy0+cGxhdGZvcm0pOworCURCRygiUHJvYmluZyBtYWNoaW5lIHR5cGUgZm9yIHBsYXRmb3JtICV4Li4uXG4iLCBfbWFjaGluZSk7CiAKIAlmb3IgKG1hY2ggPSBtYWNoaW5lczsgKm1hY2g7IG1hY2grKykgewotCQlpZiAoKCptYWNoKS0+cHJvYmUoc3lzdGVtY2ZnLT5wbGF0Zm9ybSkpCisJCWlmICgoKm1hY2gpLT5wcm9iZShfbWFjaGluZSkpCiAJCQlicmVhazsKIAl9CiAJLyogV2hhdCBjYW4gd2UgZG8gaWYgd2UgZGlkbid0IGZpbmQgPyAqLwpAQCAtMjkwLDYgKzI4MSwyOCBAQAogCURCRygiIDwtIGVhcmx5X3NldHVwKClcbiIpOwogfQogCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBlYXJseV9zZXR1cF9zZWNvbmRhcnkodm9pZCkKK3sKKwlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKmxwYWNhID0gZ2V0X3BhY2EoKTsKKworCS8qIE1hcmsgZW5hYmxlZCBpbiBQQUNBICovCisJbHBhY2EtPnByb2NfZW5hYmxlZCA9IDA7CisKKwkvKiBJbml0aWFsaXplIGhhc2ggdGFibGUgZm9yIHRoYXQgQ1BVICovCisJaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSgpOworCisJLyogSW5pdGlhbGl6ZSBTVEFCL1NMQi4gV2UgdXNlIGEgdmlydHVhbCBhZGRyZXNzIGFzIGl0IHdvcmtzCisJICogaW4gcmVhbCBtb2RlIG9uIHBTZXJpZXMgYW5kIHdlIHdhbnQgYSB2aXJ1dGFsIGFkZHJlc3Mgb24KKwkgKiBpU2VyaWVzIGFueXdheQorCSAqLworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTEIpKQorCQlzbGJfaW5pdGlhbGl6ZSgpOworCWVsc2UKKwkJc3RhYl9pbml0aWFsaXplKGxwYWNhLT5zdGFiX2FkZHIpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIHZvaWQgc21wX3JlbGVhc2VfY3B1cyh2b2lkKQpAQCAtMzE1LDcgKzMyOCw4IEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCB8fCBDT05GSUdfS0VYRUMgKi8KIAogLyoKLSAqIEluaXRpYWxpemUgc29tZSByZW1haW5pbmcgbWVtYmVycyBvZiB0aGUgcHBjNjRfY2FjaGVzIGFuZCBzeXN0ZW1jZmcgc3RydWN0dXJlcworICogSW5pdGlhbGl6ZSBzb21lIHJlbWFpbmluZyBtZW1iZXJzIG9mIHRoZSBwcGM2NF9jYWNoZXMgYW5kIHN5c3RlbWNmZworICogc3RydWN0dXJlcwogICogKGF0IGxlYXN0IHVudGlsIHdlIGdldCByaWQgb2YgdGhlbSBjb21wbGV0ZWx5KS4gVGhpcyBpcyBtb3N0bHkgc29tZQogICogY2FjaGUgaW5mb3JtYXRpb25zIGFib3V0IHRoZSBDUFUgdGhhdCB3aWxsIGJlIHVzZWQgYnkgY2FjaGUgZmx1c2gKICAqIHJvdXRpbmVzIGFuZC9vciBwcm92aWRlZCB0byB1c2VybGFuZApAQCAtMzQwLDcgKzM1NCw3IEBACiAJCQljb25zdCBjaGFyICpkYywgKmljOwogCiAJCQkvKiBUaGVuIHJlYWQgY2FjaGUgaW5mb3JtYXRpb25zICovCi0JCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QT1dFUk1BQykgeworCQkJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKSB7CiAJCQkJZGMgPSAiZC1jYWNoZS1ibG9jay1zaXplIjsKIAkJCQlpYyA9ICJpLWNhY2hlLWJsb2NrLXNpemUiOwogCQkJfSBlbHNlIHsKQEAgLTM2MCw5ICszNzQsOCBAQAogCQkJCURCRygiQXJnaCwgY2FuJ3QgZmluZCBkY2FjaGUgcHJvcGVydGllcyAhICIKIAkJCQkgICAgInNpemVwOiAlcCwgbHNpemVwOiAlcFxuIiwgc2l6ZXAsIGxzaXplcCk7CiAKLQkJCXN5c3RlbWNmZy0+ZGNhY2hlX3NpemUgPSBwcGM2NF9jYWNoZXMuZHNpemUgPSBzaXplOwotCQkJc3lzdGVtY2ZnLT5kY2FjaGVfbGluZV9zaXplID0KLQkJCQlwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSA9IGxzaXplOworCQkJcHBjNjRfY2FjaGVzLmRzaXplID0gc2l6ZTsKKwkJCXBwYzY0X2NhY2hlcy5kbGluZV9zaXplID0gbHNpemU7CiAJCQlwcGM2NF9jYWNoZXMubG9nX2RsaW5lX3NpemUgPSBfX2lsb2cyKGxzaXplKTsKIAkJCXBwYzY0X2NhY2hlcy5kbGluZXNfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgLyBsc2l6ZTsKIApAQCAtMzc4LDIwICszOTEsMTMgQEAKIAkJCQlEQkcoIkFyZ2gsIGNhbid0IGZpbmQgaWNhY2hlIHByb3BlcnRpZXMgISAiCiAJCQkJICAgICJzaXplcDogJXAsIGxzaXplcDogJXBcbiIsIHNpemVwLCBsc2l6ZXApOwogCi0JCQlzeXN0ZW1jZmctPmljYWNoZV9zaXplID0gcHBjNjRfY2FjaGVzLmlzaXplID0gc2l6ZTsKLQkJCXN5c3RlbWNmZy0+aWNhY2hlX2xpbmVfc2l6ZSA9Ci0JCQkJcHBjNjRfY2FjaGVzLmlsaW5lX3NpemUgPSBsc2l6ZTsKKwkJCXBwYzY0X2NhY2hlcy5pc2l6ZSA9IHNpemU7CisJCQlwcGM2NF9jYWNoZXMuaWxpbmVfc2l6ZSA9IGxzaXplOwogCQkJcHBjNjRfY2FjaGVzLmxvZ19pbGluZV9zaXplID0gX19pbG9nMihsc2l6ZSk7CiAJCQlwcGM2NF9jYWNoZXMuaWxpbmVzX3Blcl9wYWdlID0gUEFHRV9TSVpFIC8gbHNpemU7CiAJCX0KIAl9CiAKLQkvKiBBZGQgYW4gZXllIGNhdGNoZXIgYW5kIHRoZSBzeXN0ZW1jZmcgbGF5b3V0IHZlcnNpb24gbnVtYmVyICovCi0Jc3RyY3B5KHN5c3RlbWNmZy0+ZXllX2NhdGNoZXIsICJTWVNURU1DRkc6UFBDNjQiKTsKLQlzeXN0ZW1jZmctPnZlcnNpb24ubWFqb3IgPSBTWVNURU1DRkdfTUFKT1I7Ci0Jc3lzdGVtY2ZnLT52ZXJzaW9uLm1pbm9yID0gU1lTVEVNQ0ZHX01JTk9SOwotCXN5c3RlbWNmZy0+cHJvY2Vzc29yID0gbWZzcHIoU1BSTl9QVlIpOwotCiAJREJHKCIgPC0gaW5pdGlhbGl6ZV9jYWNoZV9pbmZvKClcbiIpOwogfQogCkBAIC00NzgsMTUgKzQ4NCwxNCBAQAogCiAJcHJpbnRrKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRrKCJwcGM2NF9wZnRfc2l6ZSAgICAgICAgICAgICAgICA9IDB4JWx4XG4iLCBwcGM2NF9wZnRfc2l6ZSk7Ci0JcHJpbnRrKCJwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciAgICA9IDB4JWxkXG4iLCBwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlcik7Ci0JcHJpbnRrKCJzeXN0ZW1jZmcgICAgICAgICAgICAgICAgICAgICA9IDB4JXBcbiIsIHN5c3RlbWNmZyk7Ci0JcHJpbnRrKCJzeXN0ZW1jZmctPnBsYXRmb3JtICAgICAgICAgICA9IDB4JXhcbiIsIHN5c3RlbWNmZy0+cGxhdGZvcm0pOwotCXByaW50aygic3lzdGVtY2ZnLT5wcm9jZXNzb3JDb3VudCAgICAgPSAweCVseFxuIiwgc3lzdGVtY2ZnLT5wcm9jZXNzb3JDb3VudCk7Ci0JcHJpbnRrKCJzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IDB4JWx4XG4iLCBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSk7CisJcHJpbnRrKCJwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlciAgICA9IDB4JWxkXG4iLAorCSAgICAgICBwcGM2NF9pbnRlcnJ1cHRfY29udHJvbGxlcik7CisJcHJpbnRrKCJwbGF0Zm9ybSAgICAgICAgICAgICAgICAgICAgICA9IDB4JXhcbiIsIF9tYWNoaW5lKTsKKwlwcmludGsoInBoeXNpY2FsTWVtb3J5U2l6ZSAgICAgICAgICAgID0gMHglbHhcbiIsIGxtYl9waHlzX21lbV9zaXplKCkpOwogCXByaW50aygicHBjNjRfY2FjaGVzLmRjYWNoZV9saW5lX3NpemUgPSAweCV4XG4iLAotCQkJcHBjNjRfY2FjaGVzLmRsaW5lX3NpemUpOworCSAgICAgICBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZSk7CiAJcHJpbnRrKCJwcGM2NF9jYWNoZXMuaWNhY2hlX2xpbmVfc2l6ZSA9IDB4JXhcbiIsCi0JCQlwcGM2NF9jYWNoZXMuaWxpbmVfc2l6ZSk7CisJICAgICAgIHBwYzY0X2NhY2hlcy5pbGluZV9zaXplKTsKIAlwcmludGsoImh0YWJfYWRkcmVzcyAgICAgICAgICAgICAgICAgID0gMHglcFxuIiwgaHRhYl9hZGRyZXNzKTsKIAlwcmludGsoImh0YWJfaGFzaF9tYXNrICAgICAgICAgICAgICAgID0gMHglbHhcbiIsIGh0YWJfaGFzaF9tYXNrKTsKIAlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKQEAgLTU1MSwzMyArNTU2LDYgQEAKIH0KIAogLyoKLSAqIENhbGxlZCBmcm9tIHNldHVwX2FyY2ggdG8gaW5pdGlhbGl6ZSB0aGUgYml0bWFwIG9mIGF2YWlsYWJsZQotICogc3lzY2FsbHMgaW4gdGhlIHN5c3RlbWNmZyBwYWdlCi0gKi8KLXZvaWQgX19pbml0IHNldHVwX3N5c2NhbGxfbWFwKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGksIGNvdW50NjQgPSAwLCBjb3VudDMyID0gMDsKLQlleHRlcm4gdW5zaWduZWQgbG9uZyAqc3lzX2NhbGxfdGFibGU7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzX25pX3N5c2NhbGw7Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBfX05SX3N5c2NhbGxzOyBpKyspIHsKLQkJaWYgKHN5c19jYWxsX3RhYmxlW2kqMl0gIT0gc3lzX25pX3N5c2NhbGwpIHsKLQkJCWNvdW50NjQrKzsKLQkJCXN5c3RlbWNmZy0+c3lzY2FsbF9tYXBfNjRbaSA+PiA1XSB8PQotCQkJCTB4ODAwMDAwMDBVTCA+PiAoaSAmIDB4MWYpOwotCQl9Ci0JCWlmIChzeXNfY2FsbF90YWJsZVtpKjIrMV0gIT0gc3lzX25pX3N5c2NhbGwpIHsKLQkJCWNvdW50MzIrKzsKLQkJCXN5c3RlbWNmZy0+c3lzY2FsbF9tYXBfMzJbaSA+PiA1XSB8PQotCQkJCTB4ODAwMDAwMDBVTCA+PiAoaSAmIDB4MWYpOwotCQl9Ci0JfQotCXByaW50ayhLRVJOX0lORk8gIlN5c2NhbGwgbWFwIHNldHVwLCAlZCAzMi1iaXQgYW5kICVkIDY0LWJpdCBzeXNjYWxsc1xuIiwKLQkgICAgICAgY291bnQzMiwgY291bnQ2NCk7Ci19Ci0KLS8qCiAgKiBDYWxsZWQgaW50byBmcm9tIHN0YXJ0X2tlcm5lbCwgYWZ0ZXIgbG9ja19rZXJuZWwgaGFzIGJlZW4gY2FsbGVkLgogICogSW5pdGlhbGl6ZXMgYm9vdG1lbSwgd2hpY2ggaXMgdW5zZWQgdG8gbWFuYWdlIHBhZ2UgYWxsb2NhdGlvbiB1bnRpbAogICogbWVtX2luaXQgaXMgY2FsbGVkLgpAQCAtNjE4LDkgKzU5Niw2IEBACiAJZG9faW5pdF9ib290bWVtKCk7CiAJc3BhcnNlX2luaXQoKTsKIAotCS8qIGluaXRpYWxpemUgdGhlIHN5c2NhbGwgbWFwIGluIHN5c3RlbWNmZyAqLwotCXNldHVwX3N5c2NhbGxfbWFwKCk7Ci0KICNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCkBAIC04NTgsMjYgKzgzMyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGNoZWNrX2xlZ2FjeV9pb3BvcnQpOwogCi0jaWZkZWYgQ09ORklHX1hNT04KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3htb24oY2hhciAqcCkKLXsKLQkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCi0JaWYgKHApIHsKLQkJaWYgKHN0cm5jbXAocCwgIm9uIiwgMikgPT0gMCkKLQkJCXhtb25faW5pdCgxKTsKLQkJaWYgKHN0cm5jbXAocCwgIm9mZiIsIDMpID09IDApCi0JCQl4bW9uX2luaXQoMCk7Ci0JCWlmIChzdHJuY21wKHAsICJlYXJseSIsIDUpICE9IDApCi0JCQlyZXR1cm4gMDsKLQl9Ci0JeG1vbl9pbml0KDEpOwotCWRlYnVnZ2VyKE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgieG1vbiIsIGVhcmx5X3htb24pOwotI2VuZGlmCi0KIHZvaWQgY3B1X2RpZSh2b2lkKQogewogCWlmIChwcGNfbWQuY3B1X2RpZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDA4MWQ5MzEuLjhiZGY5NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYwpAQCAtNDIsMTAgKzQyLDExIEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgInBwYzMyLmgiCiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAjZWxzZQogI2luY2x1ZGUgPGFzbS91Y29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC04MDgsMTQgKzgwOSwxMSBAQAogCiAJLyogU2F2ZSB1c2VyIHJlZ2lzdGVycyBvbiB0aGUgc3RhY2sgKi8KIAlmcmFtZSA9ICZydF9zZi0+dWMudWNfbWNvbnRleHQ7Ci0jaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKHZkc28zMl9ydF9zaWd0cmFtcCAmJiBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlKSB7CiAJCWlmIChzYXZlX3VzZXJfcmVncyhyZWdzLCBmcmFtZSwgMCkpCiAJCQlnb3RvIGJhZGZyYW1lOwogCQlyZWdzLT5saW5rID0gY3VycmVudC0+dGhyZWFkLnZkc29fYmFzZSArIHZkc28zMl9ydF9zaWd0cmFtcDsKLQl9IGVsc2UKLSNlbmRpZgotCXsKKwl9IGVsc2UgewogCQlpZiAoc2F2ZV91c2VyX3JlZ3MocmVncywgZnJhbWUsIF9fTlJfcnRfc2lncmV0dXJuKSkKIAkJCWdvdG8gYmFkZnJhbWU7CiAJCXJlZ3MtPmxpbmsgPSAodW5zaWduZWQgbG9uZykgZnJhbWUtPnRyYW1wOwpAQCAtMTA4OSwxNCArMTA4NywxMSBAQAogCSAgICB8fCBfX3B1dF91c2VyKHNpZywgJnNjLT5zaWduYWwpKQogCQlnb3RvIGJhZGZyYW1lOwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CiAJaWYgKHZkc28zMl9zaWd0cmFtcCAmJiBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlKSB7CiAJCWlmIChzYXZlX3VzZXJfcmVncyhyZWdzLCAmZnJhbWUtPm1jdHgsIDApKQogCQkJZ290byBiYWRmcmFtZTsKIAkJcmVncy0+bGluayA9IGN1cnJlbnQtPnRocmVhZC52ZHNvX2Jhc2UgKyB2ZHNvMzJfc2lndHJhbXA7Ci0JfSBlbHNlCi0jZW5kaWYKLQl7CisJfSBlbHNlIHsKIAkJaWYgKHNhdmVfdXNlcl9yZWdzKHJlZ3MsICZmcmFtZS0+bWN0eCwgX19OUl9zaWdyZXR1cm4pKQogCQkJZ290byBiYWRmcmFtZTsKIAkJcmVncy0+bGluayA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZS0+bWN0eC50cmFtcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IDM2ZDY3YTguLjYyZGZjNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNlbmRpZgpAQCAtMzY4LDkgKzM2OSwxMSBAQAogCWlmIChjcHUgPT0gYm9vdF9jcHVpZCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQtLTsKIAljcHVfY2xlYXIoY3B1LCBjcHVfb25saW5lX21hcCk7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdmRzb19kYXRhLT5wcm9jZXNzb3JDb3VudC0tOwogCWZpeHVwX2lycXMoY3B1X29ubGluZV9tYXApOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4OCw5ICszOTEsMTEgQEAKIAl3aGlsZSAoIWNwdV9vbmxpbmUoY3B1KSkKIAkJY3B1X3JlbGF4KCk7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlmaXh1cF9pcnFzKGNwdV9vbmxpbmVfbWFwKTsKIAkvKiBjb3VudGVyIHRoZSBpcnEgZGlzYWJsZSBpbiBmaXh1cF9pcnFzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOworI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxOSw3ICs0MjQsOSBAQAogCXdoaWxlIChfX2dldF9jcHVfdmFyKGNwdV9zdGF0ZSkgIT0gQ1BVX1VQX1BSRVBBUkUpCiAJCWNwdV9yZWxheCgpOwogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJZmx1c2hfdGxiX3BlbmRpbmcoKTsKKyNlbmRpZgogCWNwdV9zZXQoY3B1LCBjcHVfb25saW5lX21hcCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKaW5kZXggYTgyMTBlZC4uOWM5MjFkMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCkBAIC01Miw3ICs1Miw2IEBACiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CiAKIC8qIHJlYWRkaXIgJiBnZXRkZW50cyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvc3lzZnMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9zeXNmcy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKaW5kZXggZTk5ZWM2Mi4uMGYwYzNhOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KQEAgLTIzMiw3ICsyMzEsNyBAQAogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcG1jNyk7CiAJaWYgKGN1cl9jcHVfc3BlYy0+bnVtX3BtY3MgPj0gOCkKIAkJc3lzZGV2X2NyZWF0ZV9maWxlKHMsICZhdHRyX3BtYzgpOwotICAKKwogCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcHVycik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IGE2MjgyYjYuLjA3MGI0YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCkBAIC02Miw4ICs2Miw4IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2lmZGVmIENPTkZJR19QUEM2NAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwpAQCAtMjYxLDcgKzI2MSw2IEBACiAJZG9fZ3RvZC52YXJwID0gdGVtcF92YXJwOwogCWRvX2d0b2QudmFyX2lkeCA9IHRlbXBfaWR4OwogCi0jaWZkZWYgQ09ORklHX1BQQzY0CiAJLyoKIAkgKiB0Yl91cGRhdGVfY291bnQgaXMgdXNlZCB0byBhbGxvdyB0aGUgdXNlcnNwYWNlIGdldHRpbWVvZmRheSBjb2RlCiAJICogdG8gYXNzdXJlIGl0c2VsZiB0aGF0IGl0IHNlZXMgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHRiX3RvX3hzIGFuZApAQCAtMjcxLDE0ICsyNzAsMTUgQEAKIAkgKiB0Yl90b194cyBhbmQgc3RhbXBfeHNlYyB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQuICBJZiBub3QsIHRoZW4gaXQKIAkgKiBsb29wcyBiYWNrIGFuZCByZWFkcyB0aGVtIGFnYWluIHVudGlsIHRoaXMgY3JpdGVyaWEgaXMgbWV0LgogCSAqLwotCSsrKHN5c3RlbWNmZy0+dGJfdXBkYXRlX2NvdW50KTsKKwkrKyh2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCk7CiAJc21wX3dtYigpOwotCXN5c3RlbWNmZy0+dGJfb3JpZ19zdGFtcCA9IG5ld190Yl9zdGFtcDsKLQlzeXN0ZW1jZmctPnN0YW1wX3hzZWMgPSBuZXdfc3RhbXBfeHNlYzsKLQlzeXN0ZW1jZmctPnRiX3RvX3hzID0gbmV3X3RiX3RvX3hzOworCXZkc29fZGF0YS0+dGJfb3JpZ19zdGFtcCA9IG5ld190Yl9zdGFtcDsKKwl2ZHNvX2RhdGEtPnN0YW1wX3hzZWMgPSBuZXdfc3RhbXBfeHNlYzsKKwl2ZHNvX2RhdGEtPnRiX3RvX3hzID0gbmV3X3RiX3RvX3hzOworCXZkc29fZGF0YS0+d3RvbV9jbG9ja19zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWM7CisJdmRzb19kYXRhLT53dG9tX2Nsb2NrX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjOwogCXNtcF93bWIoKTsKLQkrKyhzeXN0ZW1jZmctPnRiX3VwZGF0ZV9jb3VudCk7Ci0jZW5kaWYKKwkrKyh2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCk7CiB9CiAKIC8qCkBAIC0zNTcsOCArMzU3LDggQEAKIAkJCQlkb19ndG9kLnRiX3RpY2tzX3Blcl9zZWMgPSB0Yl90aWNrc19wZXJfc2VjOwogCQkJCXRiX3RvX3hzID0gZGl2cmVzLnJlc3VsdF9sb3c7CiAJCQkJZG9fZ3RvZC52YXJwLT50Yl90b194cyA9IHRiX3RvX3hzOwotCQkJCXN5c3RlbWNmZy0+dGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7Ci0JCQkJc3lzdGVtY2ZnLT50Yl90b194cyA9IHRiX3RvX3hzOworCQkJCXZkc29fZGF0YS0+dGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7CisJCQkJdmRzb19kYXRhLT50Yl90b194cyA9IHRiX3RvX3hzOwogCQkJfQogCQkJZWxzZSB7CiAJCQkJcHJpbnRrKCAiVGl0YW4gcmVjYWxpYnJhdGU6IEZBSUxFRCAoZGlmZmVyZW5jZSA+IDQgcGVyY2VudClcbiIKQEAgLTQ4Myw2ICs0ODMsOCBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdGJfdGlja3NfcGVyX2ppZmZ5IC8gbWF4X2NwdXM7CiAJdW5zaWduZWQgbG9uZyBwcmV2aW91c190YiA9IHBlcl9jcHUobGFzdF9qaWZmeSwgYm9vdF9jcHVpZCk7CiAKKwkvKiBtYWtlIHN1cmUgdGIgPiBwZXJfY3B1KGxhc3RfamlmZnksIGNwdSkgZm9yIGFsbCBjcHVzIGFsd2F5cyAqLworCXByZXZpb3VzX3RiIC09IHRiX3RpY2tzX3Blcl9qaWZmeTsKIAlmb3JfZWFjaF9jcHUoaSkgewogCQlpZiAoaSAhPSBib290X2NwdWlkKSB7CiAJCQlwcmV2aW91c190YiArPSBvZmZzZXQ7CkBAIC01NTgsMTAgKzU2MCw4IEBACiAJbmV3X3hzZWMgKz0gKHU2NCluZXdfc2VjICogWFNFQ19QRVJfU0VDIC0gdGJfZGVsdGFfeHM7CiAJdXBkYXRlX2d0b2QodGJfbGFzdF9qaWZmeSwgbmV3X3hzZWMsIGRvX2d0b2QudmFycC0+dGJfdG9feHMpOwogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0Jc3lzdGVtY2ZnLT50el9taW51dGVzd2VzdCA9IHN5c190ei50el9taW51dGVzd2VzdDsKLQlzeXN0ZW1jZmctPnR6X2RzdHRpbWUgPSBzeXNfdHoudHpfZHN0dGltZTsKLSNlbmRpZgorCXZkc29fZGF0YS0+dHpfbWludXRlc3dlc3QgPSBzeXNfdHoudHpfbWludXRlc3dlc3Q7CisJdmRzb19kYXRhLT50el9kc3R0aW1lID0gc3lzX3R6LnR6X2RzdHRpbWU7CiAKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCWNsb2NrX3dhc19zZXQoKTsKQEAgLTcxMCwxMyArNzEwLDEyIEBACiAJZG9fZ3RvZC50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKIAlkb19ndG9kLnZhcnAtPnRiX3RvX3hzID0gdGJfdG9feHM7CiAJZG9fZ3RvZC50Yl90b191cyA9IHRiX3RvX3VzOwotI2lmZGVmIENPTkZJR19QUEM2NAotCXN5c3RlbWNmZy0+dGJfb3JpZ19zdGFtcCA9IHRiX2xhc3RfamlmZnk7Ci0Jc3lzdGVtY2ZnLT50Yl91cGRhdGVfY291bnQgPSAwOwotCXN5c3RlbWNmZy0+dGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7Ci0Jc3lzdGVtY2ZnLT5zdGFtcF94c2VjID0geHRpbWUudHZfc2VjICogWFNFQ19QRVJfU0VDOwotCXN5c3RlbWNmZy0+dGJfdG9feHMgPSB0Yl90b194czsKLSNlbmRpZgorCisJdmRzb19kYXRhLT50Yl9vcmlnX3N0YW1wID0gdGJfbGFzdF9qaWZmeTsKKwl2ZHNvX2RhdGEtPnRiX3VwZGF0ZV9jb3VudCA9IDA7CisJdmRzb19kYXRhLT50Yl90aWNrc19wZXJfc2VjID0gdGJfdGlja3NfcGVyX3NlYzsKKwl2ZHNvX2RhdGEtPnN0YW1wX3hzZWMgPSB4dGltZS50dl9zZWMgKiBYU0VDX1BFUl9TRUM7CisJdmRzb19kYXRhLT50Yl90b194cyA9IHRiX3RvX3hzOwogCiAJdGltZV9mcmVxID0gMDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDA1NzhmODMuLjE1MTE0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFBDNjQJLyogWFhYICovCkBAIC0xMjksNyArMTI4LDcgQEAKIAlubCA9IDE7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFBDNjQKLQlzd2l0Y2ggKHN5c3RlbWNmZy0+cGxhdGZvcm0pIHsKKwlzd2l0Y2ggKF9tYWNoaW5lKSB7CiAJY2FzZSBQTEFURk9STV9QU0VSSUVTOgogCQlwcmludGsoIlBTRVJJRVMgIik7CiAJCW5sID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3VkYmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC91ZGJnLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZy5jCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC91ZGJnXzE2NTUwLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ18xNjU1MC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ19zY2MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ19zY2MuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdWRiZ19zY2MuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnX3NjYy5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGQ4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28uYwpAQCAtMCwwICsxLDc0NiBAQAorLyoKKyAqICBsaW51eC9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobWlkdCwgSUJNIENvcnAuCisgKgkJCSA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC91c2VyLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorI2luY2x1ZGUgPGFzbS9sbWIuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgorCisvKiBNYXggc3VwcG9ydGVkIHNpemUgZm9yIHN5bWJvbCBuYW1lcyAqLworI2RlZmluZSBNQVhfU1lNTkFNRQk2NAorCitleHRlcm4gY2hhciB2ZHNvMzJfc3RhcnQsIHZkc28zMl9lbmQ7CitzdGF0aWMgdm9pZCAqdmRzbzMyX2tiYXNlID0gJnZkc28zMl9zdGFydDsKK3Vuc2lnbmVkIGludCB2ZHNvMzJfcGFnZXM7Cit1bnNpZ25lZCBsb25nIHZkc28zMl9zaWd0cmFtcDsKK3Vuc2lnbmVkIGxvbmcgdmRzbzMyX3J0X3NpZ3RyYW1wOworCisjaWZkZWYgQ09ORklHX1BQQzY0CitleHRlcm4gY2hhciB2ZHNvNjRfc3RhcnQsIHZkc282NF9lbmQ7CitzdGF0aWMgdm9pZCAqdmRzbzY0X2tiYXNlID0gJnZkc282NF9zdGFydDsKK3Vuc2lnbmVkIGludCB2ZHNvNjRfcGFnZXM7Cit1bnNpZ25lZCBsb25nIHZkc282NF9ydF9zaWd0cmFtcDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworLyoKKyAqIFRoZSB2ZHNvIGRhdGEgcGFnZSAoYWthLiBzeXN0ZW1jZmcgZm9yIG9sZCBwcGM2NCBmYW5zKSBpcyBoZXJlLgorICogT25jZSB0aGUgZWFybHkgYm9vdCBrZXJuZWwgY29kZSBubyBsb25nZXIgbmVlZHMgdG8gbXVjayBhcm91bmQKKyAqIHdpdGggaXQsIGl0IHdpbGwgYmVjb21lIGR5bmFtaWNhbGx5IGFsbG9jYXRlZAorICovCitzdGF0aWMgdW5pb24geworCXN0cnVjdCB2ZHNvX2RhdGEJZGF0YTsKKwl1OAkJCXBhZ2VbUEFHRV9TSVpFXTsKK30gdmRzb19kYXRhX3N0b3JlIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5wYWdlX2FsaWduZWQiKSkpOworc3RydWN0IHZkc29fZGF0YSAqdmRzb19kYXRhID0gJnZkc29fZGF0YV9zdG9yZS5kYXRhOworCisvKiBGb3JtYXQgb2YgdGhlIHBhdGNoIHRhYmxlICovCitzdHJ1Y3QgdmRzb19wYXRjaF9kZWYKK3sKKwl1bnNpZ25lZCBsb25nCWZ0cl9tYXNrLCBmdHJfdmFsdWU7CisJY29uc3QgY2hhcgkqZ2VuX25hbWU7CisJY29uc3QgY2hhcgkqZml4X25hbWU7Cit9OworCisvKiBUYWJsZSBvZiBmdW5jdGlvbnMgdG8gcGF0Y2ggYmFzZWQgb24gdGhlIENQVSB0eXBlL3JldmlzaW9uCisgKgorICogQ3VycmVudGx5LCB3ZSBvbmx5IGNoYW5nZSBzeW5jX2RpY2FjaGUgdG8gZG8gbm90aGluZyBvbiBwcm9jZXNzb3JzCisgKiB3aXRoIGEgY29oZXJlbnQgaWNhY2hlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdmRzb19wYXRjaF9kZWYgdmRzb19wYXRjaGVzW10gPSB7CisJeworCQlDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSwgQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUsCisJCSJfX2tlcm5lbF9zeW5jX2RpY2FjaGUiLCAiX19rZXJuZWxfc3luY19kaWNhY2hlX3A1IgorCX0sCisJeworCQlDUFVfRlRSX1VTRV9UQiwgMCwKKwkJIl9fa2VybmVsX2dldHRpbWVvZmRheSIsIE5VTEwKKwl9LAorfTsKKworLyoKKyAqIFNvbWUgaW5mb3MgY2FycmllZCBhcm91bmQgZm9yIGVhY2ggb2YgdGhlbSBkdXJpbmcgcGFyc2luZyBhdAorICogYm9vdCB0aW1lLgorICovCitzdHJ1Y3QgbGliMzJfZWxmaW5mbworeworCUVsZjMyX0VoZHIJKmhkcjsJCS8qIHB0ciB0byBFTEYgKi8KKwlFbGYzMl9TeW0JKmR5bnN5bTsJLyogcHRyIHRvIC5keW5zeW0gc2VjdGlvbiAqLworCXVuc2lnbmVkIGxvbmcJZHluc3ltc2l6ZTsJLyogc2l6ZSBvZiAuZHluc3ltIHNlY3Rpb24gKi8KKwljaGFyCQkqZHluc3RyOwkvKiBwdHIgdG8gLmR5bnN0ciBzZWN0aW9uICovCisJdW5zaWduZWQgbG9uZwl0ZXh0OwkJLyogb2Zmc2V0IG9mIC50ZXh0IHNlY3Rpb24gaW4gLnNvICovCit9OworCitzdHJ1Y3QgbGliNjRfZWxmaW5mbworeworCUVsZjY0X0VoZHIJKmhkcjsKKwlFbGY2NF9TeW0JKmR5bnN5bTsKKwl1bnNpZ25lZCBsb25nCWR5bnN5bXNpemU7CisJY2hhcgkJKmR5bnN0cjsKKwl1bnNpZ25lZCBsb25nCXRleHQ7Cit9OworCisKKyNpZmRlZiBfX0RFQlVHCitzdGF0aWMgdm9pZCBkdW1wX29uZV92ZHNvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBnLCBzdHJ1Y3QgcGFnZSAqdXBnKQoreworCXByaW50aygia3BnOiAlcCAoYzolZCxmOiUwOGx4KSIsIF9fdmEocGFnZV90b19wZm4ocGcpIDw8IFBBR0VfU0hJRlQpLAorCSAgICAgICBwYWdlX2NvdW50KHBnKSwKKwkgICAgICAgcGctPmZsYWdzKTsKKwlpZiAodXBnLyogJiYgcGcgIT0gdXBnKi8pIHsKKwkJcHJpbnRrKCIgdXBnOiAlcCAoYzolZCxmOiUwOGx4KSIsIF9fdmEocGFnZV90b19wZm4odXBnKQorCQkJCQkJICAgICAgIDw8IFBBR0VfU0hJRlQpLAorCQkgICAgICAgcGFnZV9jb3VudCh1cGcpLAorCQkgICAgICAgdXBnLT5mbGFncyk7CisJfQorCXByaW50aygiXG4iKTsKK30KKworc3RhdGljIHZvaWQgZHVtcF92ZHNvX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKK3sKKwlpbnQgaTsKKworCWlmICghdm1hIHx8IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlwcmludGsoInZEU08zMiBAICUwMTZseDpcbiIsICh1bnNpZ25lZCBsb25nKXZkc28zMl9rYmFzZSk7CisJCWZvciAoaT0wOyBpPHZkc28zMl9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzMyX2tiYXNlICsKKwkJCQkJCSAgICAgICBpKlBBR0VfU0laRSk7CisJCQlzdHJ1Y3QgcGFnZSAqdXBnID0gKHZtYSAmJiB2bWEtPnZtX21tKSA/CisJCQkJZm9sbG93X3BhZ2Uodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCArCisJCQkJCSAgICBpKlBBR0VfU0laRSwgMCkKKwkJCQk6IE5VTEw7CisJCQlkdW1wX29uZV92ZHNvX3BhZ2UocGcsIHVwZyk7CisJCX0KKwl9CisJaWYgKCF2bWEgfHwgIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkgeworCQlwcmludGsoInZEU082NCBAICUwMTZseDpcbiIsICh1bnNpZ25lZCBsb25nKXZkc282NF9rYmFzZSk7CisJCWZvciAoaT0wOyBpPHZkc282NF9wYWdlczsgaSsrKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzY0X2tiYXNlICsKKwkJCQkJCSAgICAgICBpKlBBR0VfU0laRSk7CisJCQlzdHJ1Y3QgcGFnZSAqdXBnID0gKHZtYSAmJiB2bWEtPnZtX21tKSA/CisJCQkJZm9sbG93X3BhZ2Uodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCArCisJCQkJCSAgICBpKlBBR0VfU0laRSwgMCkKKwkJCQk6IE5VTEw7CisJCQlkdW1wX29uZV92ZHNvX3BhZ2UocGcsIHVwZyk7CisJCX0KKwl9Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyoKKyAqIEtlZXAgYSBkdW1teSB2bWFfY2xvc2UgZm9yIG5vdywgaXQgd2lsbCBwcmV2ZW50IFZNQSBtZXJnaW5nLgorICovCitzdGF0aWMgdm9pZCB2ZHNvX3ZtYV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCit7Cit9CisKKy8qCisgKiBPdXIgbm9wYWdlKCkgZnVuY3Rpb24sIG1hcHMgaW4gdGhlIGFjdHVhbCB2RFNPIGtlcm5lbCBwYWdlcywgdGhleSB3aWxsCisgKiBiZSBtYXBwZWQgcmVhZC1vbmx5IGJ5IGRvX25vX3BhZ2UoKSwgYW5kIGV2ZW50dWFsbHkgQ09XJ2VkLCBlaXRoZXIKKyAqIHJpZ2h0IGF3YXkgZm9yIGFuIGluaXRpYWwgd3JpdGUgYWNjZXNzLCBvciBieSBkb193cF9wYWdlKCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqIHZkc29fdm1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OworCXN0cnVjdCBwYWdlICpwZzsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl2b2lkICp2YmFzZSA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSA/CisJCXZkc28zMl9rYmFzZSA6IHZkc282NF9rYmFzZTsKKyNlbHNlCisJdm9pZCAqdmJhc2UgPSB2ZHNvMzJfa2Jhc2U7CisjZW5kaWYKKworCURCRygidmRzb192bWFfbm9wYWdlKGN1cnJlbnQ6ICVzLCBhZGRyZXNzOiAlMDE2bHgsIG9mZjogJWx4KVxuIiwKKwkgICAgY3VycmVudC0+Y29tbSwgYWRkcmVzcywgb2Zmc2V0KTsKKworCWlmIChhZGRyZXNzIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyZXNzID4gdm1hLT52bV9lbmQpCisJCXJldHVybiBOT1BBR0VfU0lHQlVTOworCisJLyoKKwkgKiBMYXN0IHBhZ2UgaXMgc3lzdGVtY2ZnLgorCSAqLworCWlmICgodm1hLT52bV9lbmQgLSBhZGRyZXNzKSA8PSBQQUdFX1NJWkUpCisJCXBnID0gdmlydF90b19wYWdlKHZkc29fZGF0YSk7CisJZWxzZQorCQlwZyA9IHZpcnRfdG9fcGFnZSh2YmFzZSArIG9mZnNldCk7CisKKwlnZXRfcGFnZShwZyk7CisJREJHKCIgLT5wYWdlIGNvdW50OiAlZFxuIiwgcGFnZV9jb3VudChwZykpOworCisJcmV0dXJuIHBnOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZkc29fdm1vcHMgPSB7CisJLmNsb3NlCT0gdmRzb192bWFfY2xvc2UsCisJLm5vcGFnZQk9IHZkc29fdm1hX25vcGFnZSwKK307CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGJpbmZtdF9lbGYsIHdlIGNyZWF0ZSB0aGUgc3BlY2lhbCB2bWEgZm9yIHRoZQorICogdkRTTyBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIG1tIHN0cnVjdCB0cmVlCisgKi8KK2ludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCQlpbnQgZXhlY3V0YWJsZV9zdGFjaykKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgdmRzb19wYWdlczsKKwl1bnNpZ25lZCBsb25nIHZkc29fYmFzZTsKKworI2lmZGVmIENPTkZJR19QUEM2NAorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKKwkJdmRzb19wYWdlcyA9IHZkc28zMl9wYWdlczsKKwkJdmRzb19iYXNlID0gVkRTTzMyX01CQVNFOworCX0gZWxzZSB7CisJCXZkc29fcGFnZXMgPSB2ZHNvNjRfcGFnZXM7CisJCXZkc29fYmFzZSA9IFZEU082NF9NQkFTRTsKKwl9CisjZWxzZQorCXZkc29fcGFnZXMgPSB2ZHNvMzJfcGFnZXM7CisJdmRzb19iYXNlID0gVkRTTzMyX01CQVNFOworI2VuZGlmCisKKwljdXJyZW50LT50aHJlYWQudmRzb19iYXNlID0gMDsKKworCS8qIHZEU08gaGFzIGEgcHJvYmxlbSBhbmQgd2FzIGRpc2FibGVkLCBqdXN0IGRvbid0ICJlbmFibGUiIGl0IGZvciB0aGUKKwkgKiBwcm9jZXNzCisJICovCisJaWYgKHZkc29fcGFnZXMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2bWEgPSBrbWVtX2NhY2hlX2FsbG9jKHZtX2FyZWFfY2FjaGVwLCBTTEFCX0tFUk5FTCk7CisJaWYgKHZtYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldCh2bWEsIDAsIHNpemVvZigqdm1hKSk7CisKKwkvKiBBZGQgYSBwYWdlIHRvIHRoZSB2ZHNvIHNpemUgZm9yIHRoZSBkYXRhIHBhZ2UgKi8KKwl2ZHNvX3BhZ2VzICsrOworCisJLyoKKwkgKiBwaWNrIGEgYmFzZSBhZGRyZXNzIGZvciB0aGUgdkRTTyBpbiBwcm9jZXNzIHNwYWNlLiBXZSB0cnkgdG8gcHV0IGl0CisJICogYXQgdmRzb19iYXNlIHdoaWNoIGlzIHRoZSAibmF0dXJhbCIgYmFzZSBmb3IgaXQsIGJ1dCB3ZSBtaWdodCBmYWlsCisJICogYW5kIGVuZCB1cCBwdXR0aW5nIGl0IGVsc2V3aGVyZS4KKwkgKi8KKwl2ZHNvX2Jhc2UgPSBnZXRfdW5tYXBwZWRfYXJlYShOVUxMLCB2ZHNvX2Jhc2UsCisJCQkJICAgICAgdmRzb19wYWdlcyA8PCBQQUdFX1NISUZULCAwLCAwKTsKKwlpZiAodmRzb19iYXNlICYgflBBR0VfTUFTSykgeworCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CisJCXJldHVybiAoaW50KXZkc29fYmFzZTsKKwl9CisKKwljdXJyZW50LT50aHJlYWQudmRzb19iYXNlID0gdmRzb19iYXNlOworCisJdm1hLT52bV9tbSA9IG1tOworCXZtYS0+dm1fc3RhcnQgPSBjdXJyZW50LT50aHJlYWQudmRzb19iYXNlOworCXZtYS0+dm1fZW5kID0gdm1hLT52bV9zdGFydCArICh2ZHNvX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOworCisJLyoKKwkgKiBvdXIgdm1hIGZsYWdzIGRvbid0IGhhdmUgVk1fV1JJVEUgc28gYnkgZGVmYXVsdCwgdGhlIHByb2Nlc3MgaXNuJ3QKKwkgKiBhbGxvd2VkIHRvIHdyaXRlIHRob3NlIHBhZ2VzLgorCSAqIGdkYiBjYW4gYnJlYWsgdGhhdCB3aXRoIHB0cmFjZSBpbnRlcmZhY2UsIGFuZCB0aHVzIHRyaWdnZXIgQ09XIG9uCisJICogdGhvc2UgcGFnZXMgYnV0IGl0J3MgdGhlbiB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIG5ldmVyIGRvIHRoYXQgb24KKwkgKiB0aGUgImRhdGEiIHBhZ2Ugb2YgdGhlIHZEU08gb3IgeW91J2xsIHN0b3AgZ2V0dGluZyBrZXJuZWwgdXBkYXRlcworCSAqIGFuZCB5b3VyIG5pY2UgdXNlcmxhbmQgZ2V0dGltZW9mZGF5IHdpbGwgYmUgdG90YWxseSBkZWFkLgorCSAqIEl0J3MgZmluZSB0byB1c2UgdGhhdCBmb3Igc2V0dGluZyBicmVha3BvaW50cyBpbiB0aGUgdkRTTyBjb2RlCisJICogcGFnZXMgdGhvdWdoCisJICovCisJdm1hLT52bV9mbGFncyA9IFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwKKwkJVk1fTUFZRVhFQyB8IFZNX1JFU0VSVkVEOworCXZtYS0+dm1fZmxhZ3MgfD0gbW0tPmRlZl9mbGFnczsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW3ZtYS0+dm1fZmxhZ3MgJiAweDddOworCXZtYS0+dm1fb3BzID0gJnZkc29fdm1vcHM7CisKKwlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCWlmIChpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpKSB7CisJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltbS0+dG90YWxfdm0gKz0gKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPj4gUEFHRV9TSElGVDsKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqIF9faW5pdCBmaW5kX3NlY3Rpb24zMihFbGYzMl9FaGRyICplaGRyLCBjb25zdCBjaGFyICpzZWNuYW1lLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqc2l6ZSkKK3sKKwlFbGYzMl9TaGRyICpzZWNoZHJzOworCXVuc2lnbmVkIGludCBpOworCWNoYXIgKnNlY25hbWVzOworCisJLyogR3JhYiBzZWN0aW9uIGhlYWRlcnMgYW5kIHN0cmluZ3Mgc28gd2UgY2FuIHRlbGwgd2hvIGlzIHdobyAqLworCXNlY2hkcnMgPSAodm9pZCAqKWVoZHIgKyBlaGRyLT5lX3Nob2ZmOworCXNlY25hbWVzID0gKHZvaWQgKillaGRyICsgc2VjaGRyc1tlaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwkvKiBGaW5kIHRoZSBzZWN0aW9uIHRoZXkgd2FudCAqLworCWZvciAoaSA9IDE7IGkgPCBlaGRyLT5lX3NobnVtOyBpKyspIHsKKwkJaWYgKHN0cmNtcChzZWNuYW1lcytzZWNoZHJzW2ldLnNoX25hbWUsIHNlY25hbWUpID09IDApIHsKKwkJCWlmIChzaXplKQorCQkJCSpzaXplID0gc2VjaGRyc1tpXS5zaF9zaXplOworCQkJcmV0dXJuICh2b2lkICopZWhkciArIHNlY2hkcnNbaV0uc2hfb2Zmc2V0OworCQl9CisJfQorCSpzaXplID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVsZjMyX1N5bSAqIF9faW5pdCBmaW5kX3N5bWJvbDMyKHN0cnVjdCBsaWIzMl9lbGZpbmZvICpsaWIsCisJCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciBuYW1lW01BWF9TWU1OQU1FXSwgKmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxpYi0+ZHluc3ltc2l6ZSAvIHNpemVvZihFbGYzMl9TeW0pKTsgaSsrKSB7CisJCWlmIChsaWItPmR5bnN5bVtpXS5zdF9uYW1lID09IDApCisJCQljb250aW51ZTsKKwkJc3RybGNweShuYW1lLCBsaWItPmR5bnN0ciArIGxpYi0+ZHluc3ltW2ldLnN0X25hbWUsCisJCQlNQVhfU1lNTkFNRSk7CisJCWMgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwkJaWYgKGMpCisJCQkqYyA9IDA7CisJCWlmIChzdHJjbXAoc3ltbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmbGliLT5keW5zeW1baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBzZWN0aW9uIGlzIC50ZXh0IGFuZCB0aGUgc3ltYm9sIGlzIHJlbGF0aXZlIHRvCisgKiB0aGUgbGlicmFyeSBiYXNlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2Z1bmN0aW9uMzIoc3RydWN0IGxpYjMyX2VsZmluZm8gKmxpYiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJRWxmMzJfU3ltICpzeW0gPSBmaW5kX3N5bWJvbDMyKGxpYiwgc3ltbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidkRTTzMyOiBmdW5jdGlvbiAlcyBub3QgZm91bmQgIVxuIiwKKwkJICAgICAgIHN5bW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHN5bS0+c3RfdmFsdWUgLSBWRFNPMzJfTEJBU0U7Cit9CisKK3N0YXRpYyBpbnQgdmRzb19kb19mdW5jX3BhdGNoMzIoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0LAorCQkJCWNvbnN0IGNoYXIgKm9yaWcsIGNvbnN0IGNoYXIgKmZpeCkKK3sKKwlFbGYzMl9TeW0gKnN5bTMyX2dlbiwgKnN5bTMyX2ZpeDsKKworCXN5bTMyX2dlbiA9IGZpbmRfc3ltYm9sMzIodjMyLCBvcmlnKTsKKwlpZiAoc3ltMzJfZ2VuID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPMzI6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIG9yaWcpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaXggPT0gTlVMTCkgeworCQlzeW0zMl9nZW4tPnN0X25hbWUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJc3ltMzJfZml4ID0gZmluZF9zeW1ib2wzMih2MzIsIGZpeCk7CisJaWYgKHN5bTMyX2ZpeCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzMyOiBDYW4ndCBmaW5kIHN5bWJvbCAlcyAhXG4iLCBmaXgpOworCQlyZXR1cm4gLTE7CisJfQorCXN5bTMyX2dlbi0+c3RfdmFsdWUgPSBzeW0zMl9maXgtPnN0X3ZhbHVlOworCXN5bTMyX2dlbi0+c3Rfc2l6ZSA9IHN5bTMyX2ZpeC0+c3Rfc2l6ZTsKKwlzeW0zMl9nZW4tPnN0X2luZm8gPSBzeW0zMl9maXgtPnN0X2luZm87CisJc3ltMzJfZ2VuLT5zdF9vdGhlciA9IHN5bTMyX2ZpeC0+c3Rfb3RoZXI7CisJc3ltMzJfZ2VuLT5zdF9zaG5keCA9IHN5bTMyX2ZpeC0+c3Rfc2huZHg7CisKKwlyZXR1cm4gMDsKK30KKworCisjaWZkZWYgQ09ORklHX1BQQzY0CisKK3N0YXRpYyB2b2lkICogX19pbml0IGZpbmRfc2VjdGlvbjY0KEVsZjY0X0VoZHIgKmVoZHIsIGNvbnN0IGNoYXIgKnNlY25hbWUsCisJCQkJICB1bnNpZ25lZCBsb25nICpzaXplKQoreworCUVsZjY0X1NoZHIgKnNlY2hkcnM7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciAqc2VjbmFtZXM7CisKKwkvKiBHcmFiIHNlY3Rpb24gaGVhZGVycyBhbmQgc3RyaW5ncyBzbyB3ZSBjYW4gdGVsbCB3aG8gaXMgd2hvICovCisJc2VjaGRycyA9ICh2b2lkICopZWhkciArIGVoZHItPmVfc2hvZmY7CisJc2VjbmFtZXMgPSAodm9pZCAqKWVoZHIgKyBzZWNoZHJzW2VoZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKKworCS8qIEZpbmQgdGhlIHNlY3Rpb24gdGhleSB3YW50ICovCisJZm9yIChpID0gMTsgaSA8IGVoZHItPmVfc2hudW07IGkrKykgeworCQlpZiAoc3RyY21wKHNlY25hbWVzK3NlY2hkcnNbaV0uc2hfbmFtZSwgc2VjbmFtZSkgPT0gMCkgeworCQkJaWYgKHNpemUpCisJCQkJKnNpemUgPSBzZWNoZHJzW2ldLnNoX3NpemU7CisJCQlyZXR1cm4gKHZvaWQgKillaGRyICsgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CisJCX0KKwl9CisJaWYgKHNpemUpCisJCSpzaXplID0gMDsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIEVsZjY0X1N5bSAqIF9faW5pdCBmaW5kX3N5bWJvbDY0KHN0cnVjdCBsaWI2NF9lbGZpbmZvICpsaWIsCisJCQkJCWNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJdW5zaWduZWQgaW50IGk7CisJY2hhciBuYW1lW01BWF9TWU1OQU1FXSwgKmM7CisKKwlmb3IgKGkgPSAwOyBpIDwgKGxpYi0+ZHluc3ltc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pKTsgaSsrKSB7CisJCWlmIChsaWItPmR5bnN5bVtpXS5zdF9uYW1lID09IDApCisJCQljb250aW51ZTsKKwkJc3RybGNweShuYW1lLCBsaWItPmR5bnN0ciArIGxpYi0+ZHluc3ltW2ldLnN0X25hbWUsCisJCQlNQVhfU1lNTkFNRSk7CisJCWMgPSBzdHJjaHIobmFtZSwgJ0AnKTsKKwkJaWYgKGMpCisJCQkqYyA9IDA7CisJCWlmIChzdHJjbXAoc3ltbmFtZSwgbmFtZSkgPT0gMCkKKwkJCXJldHVybiAmbGliLT5keW5zeW1baV07CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBzZWN0aW9uIGlzIC50ZXh0IGFuZCB0aGUgc3ltYm9sIGlzIHJlbGF0aXZlIHRvCisgKiB0aGUgbGlicmFyeSBiYXNlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmaW5kX2Z1bmN0aW9uNjQoc3RydWN0IGxpYjY0X2VsZmluZm8gKmxpYiwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUpCit7CisJRWxmNjRfU3ltICpzeW0gPSBmaW5kX3N5bWJvbDY0KGxpYiwgc3ltbmFtZSk7CisKKwlpZiAoc3ltID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAidkRTTzY0OiBmdW5jdGlvbiAlcyBub3QgZm91bmQgIVxuIiwKKwkJICAgICAgIHN5bW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisjaWZkZWYgVkRTNjRfSEFTX0RFU0NSSVBUT1JTCisJcmV0dXJuICooKHU2NCAqKSh2ZHNvNjRfa2Jhc2UgKyBzeW0tPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFKSkgLQorCQlWRFNPNjRfTEJBU0U7CisjZWxzZQorCXJldHVybiBzeW0tPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQgdmRzb19kb19mdW5jX3BhdGNoNjQoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0LAorCQkJCWNvbnN0IGNoYXIgKm9yaWcsIGNvbnN0IGNoYXIgKmZpeCkKK3sKKwlFbGY2NF9TeW0gKnN5bTY0X2dlbiwgKnN5bTY0X2ZpeDsKKworCXN5bTY0X2dlbiA9IGZpbmRfc3ltYm9sNjQodjY0LCBvcmlnKTsKKwlpZiAoc3ltNjRfZ2VuID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IENhbid0IGZpbmQgc3ltYm9sICVzICFcbiIsIG9yaWcpOworCQlyZXR1cm4gLTE7CisJfQorCWlmIChmaXggPT0gTlVMTCkgeworCQlzeW02NF9nZW4tPnN0X25hbWUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJc3ltNjRfZml4ID0gZmluZF9zeW1ib2w2NCh2NjQsIGZpeCk7CisJaWYgKHN5bTY0X2ZpeCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzY0OiBDYW4ndCBmaW5kIHN5bWJvbCAlcyAhXG4iLCBmaXgpOworCQlyZXR1cm4gLTE7CisJfQorCXN5bTY0X2dlbi0+c3RfdmFsdWUgPSBzeW02NF9maXgtPnN0X3ZhbHVlOworCXN5bTY0X2dlbi0+c3Rfc2l6ZSA9IHN5bTY0X2ZpeC0+c3Rfc2l6ZTsKKwlzeW02NF9nZW4tPnN0X2luZm8gPSBzeW02NF9maXgtPnN0X2luZm87CisJc3ltNjRfZ2VuLT5zdF9vdGhlciA9IHN5bTY0X2ZpeC0+c3Rfb3RoZXI7CisJc3ltNjRfZ2VuLT5zdF9zaG5keCA9IHN5bTY0X2ZpeC0+c3Rfc2huZHg7CisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisKK3N0YXRpYyBfX2luaXQgaW50IHZkc29fZG9fZmluZF9zZWN0aW9ucyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCQlzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCXZvaWQgKnNlY3Q7CisKKwkvKgorCSAqIExvY2F0ZSBzeW1ib2wgdGFibGVzICYgdGV4dCBzZWN0aW9uCisJICovCisKKwl2MzItPmR5bnN5bSA9IGZpbmRfc2VjdGlvbjMyKHYzMi0+aGRyLCAiLmR5bnN5bSIsICZ2MzItPmR5bnN5bXNpemUpOworCXYzMi0+ZHluc3RyID0gZmluZF9zZWN0aW9uMzIodjMyLT5oZHIsICIuZHluc3RyIiwgTlVMTCk7CisJaWYgKHYzMi0+ZHluc3ltID09IE5VTEwgfHwgdjMyLT5keW5zdHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogcmVxdWlyZWQgc3ltYm9sIHNlY3Rpb24gbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZWN0ID0gZmluZF9zZWN0aW9uMzIodjMyLT5oZHIsICIudGV4dCIsIE5VTEwpOworCWlmIChzZWN0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPMzI6IHRoZSAudGV4dCBzZWN0aW9uIHdhcyBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXYzMi0+dGV4dCA9IHNlY3QgLSB2ZHNvMzJfa2Jhc2U7CisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwl2NjQtPmR5bnN5bSA9IGZpbmRfc2VjdGlvbjY0KHY2NC0+aGRyLCAiLmR5bnN5bSIsICZ2NjQtPmR5bnN5bXNpemUpOworCXY2NC0+ZHluc3RyID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICIuZHluc3RyIiwgTlVMTCk7CisJaWYgKHY2NC0+ZHluc3ltID09IE5VTEwgfHwgdjY0LT5keW5zdHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU082NDogcmVxdWlyZWQgc3ltYm9sIHNlY3Rpb24gbm90IGZvdW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlzZWN0ID0gZmluZF9zZWN0aW9uNjQodjY0LT5oZHIsICIudGV4dCIsIE5VTEwpOworCWlmIChzZWN0ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPNjQ6IHRoZSAudGV4dCBzZWN0aW9uIHdhcyBub3QgZm91bmRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXY2NC0+dGV4dCA9IHNlY3QgLSB2ZHNvNjRfa2Jhc2U7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5pdCB2b2lkIHZkc29fc2V0dXBfdHJhbXBvbGluZXMoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQkJICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCS8qCisJICogRmluZCBzaWduYWwgdHJhbXBvbGluZXMKKwkgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorCXZkc282NF9ydF9zaWd0cmFtcCA9IGZpbmRfZnVuY3Rpb242NCh2NjQsICJfX2tlcm5lbF9zaWd0cmFtcF9ydDY0Iik7CisjZW5kaWYKKwl2ZHNvMzJfc2lndHJhbXAJICAgPSBmaW5kX2Z1bmN0aW9uMzIodjMyLCAiX19rZXJuZWxfc2lndHJhbXAzMiIpOworCXZkc28zMl9ydF9zaWd0cmFtcCA9IGZpbmRfZnVuY3Rpb24zMih2MzIsICJfX2tlcm5lbF9zaWd0cmFtcF9ydDMyIik7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHZkc29fZml4dXBfZGF0YXBhZ2Uoc3RydWN0IGxpYjMyX2VsZmluZm8gKnYzMiwKKwkJCQkgICAgICAgc3RydWN0IGxpYjY0X2VsZmluZm8gKnY2NCkKK3sKKwlFbGYzMl9TeW0gKnN5bTMyOworI2lmZGVmIENPTkZJR19QUEM2NAorCUVsZjY0X1N5bSAqc3ltNjQ7CisKKyAgICAgICAJc3ltNjQgPSBmaW5kX3N5bWJvbDY0KHY2NCwgIl9fa2VybmVsX2RhdGFwYWdlX29mZnNldCIpOworCWlmIChzeW02NCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidkRTTzY0OiBDYW4ndCBmaW5kIHN5bWJvbCAiCisJCSAgICAgICAiX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0ICFcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCSooKGludCAqKSh2ZHNvNjRfa2Jhc2UgKyBzeW02NC0+c3RfdmFsdWUgLSBWRFNPNjRfTEJBU0UpKSA9CisJCSh2ZHNvNjRfcGFnZXMgPDwgUEFHRV9TSElGVCkgLQorCQkoc3ltNjQtPnN0X3ZhbHVlIC0gVkRTTzY0X0xCQVNFKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworCXN5bTMyID0gZmluZF9zeW1ib2wzMih2MzIsICJfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQiKTsKKwlpZiAoc3ltMzIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgInZEU08zMjogQ2FuJ3QgZmluZCBzeW1ib2wgIgorCQkgICAgICAgIl9fa2VybmVsX2RhdGFwYWdlX29mZnNldCAhXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwkqKChpbnQgKikodmRzbzMyX2tiYXNlICsgKHN5bTMyLT5zdF92YWx1ZSAtIFZEU08zMl9MQkFTRSkpKSA9CisJCSh2ZHNvMzJfcGFnZXMgPDwgUEFHRV9TSElGVCkgLQorCQkoc3ltMzItPnN0X3ZhbHVlIC0gVkRTTzMyX0xCQVNFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0IGludCB2ZHNvX2ZpeHVwX2FsdF9mdW5jcyhzdHJ1Y3QgbGliMzJfZWxmaW5mbyAqdjMyLAorCQkJCSAgICAgICBzdHJ1Y3QgbGliNjRfZWxmaW5mbyAqdjY0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmRzb19wYXRjaGVzKTsgaSsrKSB7CisJCXN0cnVjdCB2ZHNvX3BhdGNoX2RlZiAqcGF0Y2ggPSAmdmRzb19wYXRjaGVzW2ldOworCQlpbnQgbWF0Y2ggPSAoY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJiBwYXRjaC0+ZnRyX21hc2spCisJCQk9PSBwYXRjaC0+ZnRyX3ZhbHVlOworCQlpZiAoIW1hdGNoKQorCQkJY29udGludWU7CisKKwkJREJHKCJyZXBsYWNpbmcgJXMgd2l0aCAlcy4uLlxuIiwgcGF0Y2gtPmdlbl9uYW1lLAorCQkgICAgcGF0Y2gtPmZpeF9uYW1lID8gIk5PTkUiIDogcGF0Y2gtPmZpeF9uYW1lKTsKKworCQkvKgorCQkgKiBQYXRjaCB0aGUgMzIgYml0cyBhbmQgNjQgYml0cyBzeW1ib2xzLiBOb3RlIHRoYXQgd2UgZG8gbm90CisJCSAqIHBhdGNoIHRoZSAiLiIgc3ltYm9sIG9uIDY0IGJpdHMuCisJCSAqIEl0IHdvdWxkIGJlIGVhc3kgdG8gZG8sIGJ1dCBkb2Vzbid0IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LAorCQkgKiBwYXRjaGluZyB0aGUgT1BEIHN5bWJvbCBpcyBlbm91Z2guCisJCSAqLworCQl2ZHNvX2RvX2Z1bmNfcGF0Y2gzMih2MzIsIHY2NCwgcGF0Y2gtPmdlbl9uYW1lLAorCQkJCSAgICAgcGF0Y2gtPmZpeF9uYW1lKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwkJdmRzb19kb19mdW5jX3BhdGNoNjQodjMyLCB2NjQsIHBhdGNoLT5nZW5fbmFtZSwKKwkJCQkgICAgIHBhdGNoLT5maXhfbmFtZSk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJfQorCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIF9faW5pdCBpbnQgdmRzb19zZXR1cCh2b2lkKQoreworCXN0cnVjdCBsaWIzMl9lbGZpbmZvCXYzMjsKKwlzdHJ1Y3QgbGliNjRfZWxmaW5mbwl2NjQ7CisKKwl2MzIuaGRyID0gdmRzbzMyX2tiYXNlOworI2lmZGVmIENPTkZJR19QUEM2NAorCXY2NC5oZHIgPSB2ZHNvNjRfa2Jhc2U7CisjZW5kaWYKKwlpZiAodmRzb19kb19maW5kX3NlY3Rpb25zKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodmRzb19maXh1cF9kYXRhcGFnZSgmdjMyLCAmdjY0KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKHZkc29fZml4dXBfYWx0X2Z1bmNzKCZ2MzIsICZ2NjQpKQorCQlyZXR1cm4gLTE7CisKKwl2ZHNvX3NldHVwX3RyYW1wb2xpbmVzKCZ2MzIsICZ2NjQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSBzZXR1cF9hcmNoIHRvIGluaXRpYWxpemUgdGhlIGJpdG1hcCBvZiBhdmFpbGFibGUKKyAqIHN5c2NhbGxzIGluIHRoZSBzeXN0ZW1jZmcgcGFnZQorICovCitzdGF0aWMgdm9pZCBfX2luaXQgdmRzb19zZXR1cF9zeXNjYWxsX21hcCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWV4dGVybiB1bnNpZ25lZCBsb25nICpzeXNfY2FsbF90YWJsZTsKKwlleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNfbmlfc3lzY2FsbDsKKworCisJZm9yIChpID0gMDsgaSA8IF9fTlJfc3lzY2FsbHM7IGkrKykgeworI2lmZGVmIENPTkZJR19QUEM2NAorCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyXSAhPSBzeXNfbmlfc3lzY2FsbCkKKwkJCXZkc29fZGF0YS0+c3lzY2FsbF9tYXBfNjRbaSA+PiA1XSB8PQorCQkJCTB4ODAwMDAwMDBVTCA+PiAoaSAmIDB4MWYpOworCQlpZiAoc3lzX2NhbGxfdGFibGVbaSoyKzFdICE9IHN5c19uaV9zeXNjYWxsKQorCQkJdmRzb19kYXRhLT5zeXNjYWxsX21hcF8zMltpID4+IDVdIHw9CisJCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7CisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKwkJaWYgKHN5c19jYWxsX3RhYmxlW2ldICE9IHN5c19uaV9zeXNjYWxsKQorCQkJdmRzb19kYXRhLT5zeXNjYWxsX21hcF8zMltpID4+IDVdIHw9CisJCQkJMHg4MDAwMDAwMFVMID4+IChpICYgMHgxZik7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisJfQorfQorCisKK3ZvaWQgX19pbml0IHZkc29faW5pdCh2b2lkKQoreworCWludCBpOworCisjaWZkZWYgQ09ORklHX1BQQzY0CisJLyoKKwkgKiBGaWxsIHVwIHRoZSAic3lzdGVtY2ZnIiBzdHVmZiBmb3IgYmFja3dhcmQgY29tcGF0aWJsaXR5CisJICovCisJc3RyY3B5KHZkc29fZGF0YS0+ZXllX2NhdGNoZXIsICJTWVNURU1DRkc6UFBDNjQiKTsKKwl2ZHNvX2RhdGEtPnZlcnNpb24ubWFqb3IgPSBTWVNURU1DRkdfTUFKT1I7CisJdmRzb19kYXRhLT52ZXJzaW9uLm1pbm9yID0gU1lTVEVNQ0ZHX01JTk9SOworCXZkc29fZGF0YS0+cHJvY2Vzc29yID0gbWZzcHIoU1BSTl9QVlIpOworCXZkc29fZGF0YS0+cGxhdGZvcm0gPSBfbWFjaGluZTsKKwl2ZHNvX2RhdGEtPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJdmRzb19kYXRhLT5kY2FjaGVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5kc2l6ZTsKKwl2ZHNvX2RhdGEtPmRjYWNoZV9saW5lX3NpemUgPSBwcGM2NF9jYWNoZXMuZGxpbmVfc2l6ZTsKKwl2ZHNvX2RhdGEtPmljYWNoZV9zaXplID0gcHBjNjRfY2FjaGVzLmlzaXplOworCXZkc29fZGF0YS0+aWNhY2hlX2xpbmVfc2l6ZSA9IHBwYzY0X2NhY2hlcy5pbGluZV9zaXplOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIDY0IGJpdHMgdkRTTworCSAqLworCXZkc282NF9wYWdlcyA9ICgmdmRzbzY0X2VuZCAtICZ2ZHNvNjRfc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJREJHKCJ2ZHNvNjRfa2Jhc2U6ICVwLCAweCV4IHBhZ2VzXG4iLCB2ZHNvNjRfa2Jhc2UsIHZkc282NF9wYWdlcyk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSAzMiBiaXRzIHZEU08KKwkgKi8KKwl2ZHNvMzJfcGFnZXMgPSAoJnZkc28zMl9lbmQgLSAmdmRzbzMyX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCURCRygidmRzbzMyX2tiYXNlOiAlcCwgMHgleCBwYWdlc1xuIiwgdmRzbzMyX2tiYXNlLCB2ZHNvMzJfcGFnZXMpOworCisKKwkvKgorCSAqIFNldHVwIHRoZSBzeXNjYWxsIG1hcCBpbiB0aGUgdkRPUworCSAqLworCXZkc29fc2V0dXBfc3lzY2FsbF9tYXAoKTsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHZEU08gaW1hZ2VzIGluIG1lbW9yeSwgdGhhdCBpcyBkbyBuZWNlc3NhcnkKKwkgKiBmaXh1cHMgb2YgdkRTTyBzeW1ib2xzLCBsb2NhdGUgdHJhbXBvbGluZXMsIGV0Yy4uLgorCSAqLworCWlmICh2ZHNvX3NldHVwKCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2RFNPIHNldHVwIGZhaWx1cmUsIG5vdCBlbmFibGVkICFcbiIpOworCQl2ZHNvMzJfcGFnZXMgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAorCQl2ZHNvNjRfcGFnZXMgPSAwOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwkvKiBNYWtlIHN1cmUgcGFnZXMgYXJlIGluIHRoZSBjb3JyZWN0IHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IHZkc28zMl9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwZyA9IHZpcnRfdG9fcGFnZSh2ZHNvMzJfa2Jhc2UgKyBpKlBBR0VfU0laRSk7CisJCUNsZWFyUGFnZVJlc2VydmVkKHBnKTsKKwkJZ2V0X3BhZ2UocGcpOworCisJfQorI2lmZGVmIENPTkZJR19QUEM2NAorCWZvciAoaSA9IDA7IGkgPCB2ZHNvNjRfcGFnZXM7IGkrKykgeworCQlzdHJ1Y3QgcGFnZSAqcGcgPSB2aXJ0X3RvX3BhZ2UodmRzbzY0X2tiYXNlICsgaSpQQUdFX1NJWkUpOworCQlDbGVhclBhZ2VSZXNlcnZlZChwZyk7CisJCWdldF9wYWdlKHBnKTsKKwl9CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UodmRzb19kYXRhKSk7Cit9CisKK2ludCBpbl9nYXRlX2FyZWFfbm9fdGFzayh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpbl9nYXRlX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X2dhdGVfdm1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiBOVUxMOworfQorCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCmluZGV4IDBiMWIwZGYuLjhhM2JlZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9NYWtlZmlsZQpAQCAtNSw2ICs1LDEwIEBACiAKICMgQnVpbGQgcnVsZXMKIAoraWZlcSAoJChDT05GSUdfUFBDMzIpLHkpCitDUk9TUzMyQ0MgOj0gJChDQykKK2VuZGlmCisKIHRhcmdldHMgOj0gJChvYmotdmRzbzMyKSB2ZHNvMzIuc28KIG9iai12ZHNvMzIgOj0gJChhZGRwcmVmaXggJChvYmopLywgJChvYmotdmRzbzMyKSkKIApAQCAtMTUsNyArMTksNyBAQAogCiBvYmoteSArPSB2ZHNvMzJfd3JhcHBlci5vCiBleHRyYS15ICs9IHZkc28zMi5sZHMKLUNQUEZMQUdTX3Zkc28zMi5sZHMgKz0gLVAgLUMgLVUkKEFSQ0gpCitDUFBGTEFHU192ZHNvMzIubGRzICs9IC1QIC1DIC1VcG93ZXJwYwogCiAjIEZvcmNlIGRlcGVuZGVuY3kgKGluY2JpbiBpcyBiYWQpCiAkKG9iaikvdmRzbzMyX3dyYXBwZXIubyA6ICQob2JqKS92ZHNvMzIuc28KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9jYWNoZWZsdXNoLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2NhY2hlZmx1c2guUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCmluZGV4IDRmNGViMGIuLmEwOGMyNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9kYXRhcGFnZS5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2RhdGFwYWdlLlMKQEAgLTY2LDMgKzY2LDE5IEBACiAJYmxyCiAgIC5jZmlfZW5kcHJvYwogVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0X3N5c2NhbGxfbWFwKQorCisvKgorICogdm9pZCB1bnNpZ25lZCBsb25nIGxvbmcgIF9fa2VybmVsX2dldF90YmZyZXEodm9pZCk7CisgKgorICogcmV0dXJucyB0aGUgdGltZWJhc2UgZnJlcXVlbmN5IGluIEhaCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0X3RiZnJlcSkKKyAgLmNmaV9zdGFydHByb2MKKwltZmxyCXIxMgorICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgorCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCisJbHd6CXIzLENGR19UQl9USUNLU19QRVJfU0VDKHIzKQorCWx3eglyNCwoQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMgKyA0KShyMykKKwltdGxyCXIxMgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldF90YmZyZXEpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYjVmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIFVzZXJsYW5kIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbWVvZmRheSgpIGZvciAzMiBiaXRzIHByb2Nlc3NlcyBpbiBhCisgKiBwcGM2NCBrZXJuZWwgZm9yIHVzZSBpbiB0aGUgdkRTTworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htdWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnLAorICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGdldHRpbWVvZmRheQorICoKKyAqIGludCBfX2tlcm5lbF9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKKyAqCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0dGltZW9mZGF5KQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgdHYgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHogKi8KKwlibAlfX2dldF9kYXRhcGFnZUBsb2NhbAkvKiBnZXQgZGF0YSBwYWdlICovCisJbXIJcjksIHIzCQkJLyogZGF0YXBhZ2UgcHRyIGluIHI5ICovCisJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQkyZgkJCS8qIG91dCBvZiBsaW5lIC0+IGRvIHN5c2NhbGwgKi8KKworCS8qIHNlY29uZHMgYXJlIHhzZWMgPj4gMjAgKi8KKwlybHdpbm0JcjUscjQsMTIsMjAsMzEKKwlybHdpbWkJcjUscjMsMTIsMCwxOQorCXN0dwlyNSxUVkFMMzJfVFZfU0VDKHIxMCkKKworCS8qIGdldCByZW1haW5pbmcgeHNlYyBhbmQgY29udmVydCB0byB1c2VjLiB3ZSBzY2FsZQorCSAqIHVwIHJlbWFpbmluZyB4c2VjIGJ5IDEyIGJpdHMgYW5kIGdldCB0aGUgdG9wIDMyIGJpdHMKKwkgKiBvZiB0aGUgbXVsdGlwbGljYXRpb24KKwkgKi8KKwlybHdpbm0JcjUscjQsMTIsMCwxOQorCWxpcwlyNiwxMDAwMDAwQGgKKwlvcmkJcjYscjYsMTAwMDAwMEBsCisJbXVsaHd1CXI1LHI1LHI2CisJc3R3CXI1LFRWQUwzMl9UVl9VU0VDKHIxMCkKKworCWNtcGxpCWNyMCxyMTEsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLworCWJlcQkxZgorCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyOSkvKiBmaWxsIHR6ICovCisJbHd6CXI1LENGR19UWl9EU1RUSU1FKHI5KQorCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMSkKKwlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTEpCisKKzE6CW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisyOgorCW10bHIJcjEyCisJbXIJcjMscjEwCisJbXIJcjQscjExCisJbGkJcjAsX19OUl9nZXR0aW1lb2ZkYXkKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXR0aW1lKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorICAuY2ZpX3N0YXJ0cHJvYworCS8qIENoZWNrIGZvciBzdXBwb3J0ZWQgY2xvY2sgSURzICovCisJY21wbGkJY3IwLHIzLENMT0NLX1JFQUxUSU1FCisJY21wbGkJY3IxLHIzLENMT0NLX01PTk9UT05JQworCWNyb3IJY3IwLGNyMCxjcjEKKwlibmUJY3IwLDk5ZgorCisJbWZscglyMTIJCQkvKiByMTIgc2F2ZXMgbHIgKi8KKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgaWQgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KKwlibAlfX2dldF9kYXRhcGFnZUBsb2NhbAkvKiBnZXQgZGF0YSBwYWdlICovCisJbXIJcjksIHIzCQkJLyogZGF0YXBhZ2UgcHRyIGluIHI5ICovCisJYmVxCWNyMSw1MGYJCQkvKiBpZiBtb25vdG9uaWMgLT4ganVtcCB0aGVyZSAqLworCisJLyoKKwkgKiBDTE9DS19SRUFMVElNRQorCSAqLworCisJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQk5OGYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCisKKwkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCisJcmx3aW5tCXI1LHI0LDEyLDIwLDMxCisJcmx3aW1pCXI1LHIzLDEyLDAsMTkKKwlzdHcJcjUsVFNQQzMyX1RWX1NFQyhyMTEpCisKKwkvKiBnZXQgcmVtYWluaW5nIHhzZWMgYW5kIGNvbnZlcnQgdG8gbnNlYy4gd2Ugc2NhbGUKKwkgKiB1cCByZW1haW5pbmcgeHNlYyBieSAxMiBiaXRzIGFuZCBnZXQgdGhlIHRvcCAzMiBiaXRzCisJICogb2YgdGhlIG11bHRpcGxpY2F0aW9uLCB0aGVuIHdlIG11bHRpcGx5IGJ5IDEwMDAKKwkgKi8KKwlybHdpbm0JcjUscjQsMTIsMCwxOQorCWxpcwlyNiwxMDAwMDAwQGgKKwlvcmkJcjYscjYsMTAwMDAwMEBsCisJbXVsaHd1CXI1LHI1LHI2CisJbXVsbGkJcjUscjUsMTAwMAorCXN0dwlyNSxUU1BDMzJfVFZfTlNFQyhyMTEpCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIENMT0NLX01PTk9UT05JQworCSAqLworCis1MDoJYmwJX19kb19nZXRfeHNlY0Bsb2NhbAkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJYm5lLQk5OGYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCisKKwkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCisJcmx3aW5tCXI2LHI0LDEyLDIwLDMxCisJcmx3aW1pCXI2LHIzLDEyLDAsMTkKKworCS8qIGdldCByZW1haW5pbmcgeHNlYyBhbmQgY29udmVydCB0byBuc2VjLiB3ZSBzY2FsZQorCSAqIHVwIHJlbWFpbmluZyB4c2VjIGJ5IDEyIGJpdHMgYW5kIGdldCB0aGUgdG9wIDMyIGJpdHMKKwkgKiBvZiB0aGUgbXVsdGlwbGljYXRpb24sIHRoZW4gd2UgbXVsdGlwbHkgYnkgMTAwMAorCSAqLworCXJsd2lubQlyNyxyNCwxMiwwLDE5CisJbGlzCXI1LDEwMDAwMDBAaAorCW9yaQlyNSxyNSwxMDAwMDAwQGwKKwltdWxod3UJcjcscjcscjUKKwltdWxsaQlyNyxyNywxMDAwCisKKwkvKiBub3cgd2UgbXVzdCBmaXh1cCB1c2luZyB3YWxsIHRvIG1vbm90b25pYy4gV2UgbmVlZCB0byBzbmFwc2hvdAorCSAqIHRoYXQgdmFsdWUgYW5kIGRvIHRoZSBjb3VudGVyIHRyaWNrIGFnYWluLiBGb3J0dW5hdGVseSwgd2Ugc3RpbGwKKwkgKiBoYXZlIHRoZSBjb3VudGVyIHZhbHVlIGluIHI4IHRoYXQgd2FzIHJldHVybmVkIGJ5IF9fZG9fZ2V0X3hzZWMuCisJICogQXQgdGhpcyBwb2ludCwgcjYscjcgY29udGFpbiBvdXIgc2VjL25zZWMgdmFsdWVzLCByMyxyNCBhbmQgcjUKKwkgKiBjYW4gYmUgdXNlZAorCSAqLworCisJbHd6CXIzLFdUT01fQ0xPQ0tfU0VDKHI5KQorCWx3eglyNCxXVE9NX0NMT0NLX05TRUMocjkpCisKKwkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKKwkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKKwkgKi8KKwlvcglyNSxyNCxyMworCXhvcglyMCxyNSxyNQorCWFkZAlyOSxyOSxyMAorI2lmZGVmIENPTkZJR19QUEM2NAorCWx3eglyMCwoQ0ZHX1RCX1VQREFURV9DT1VOVCs0KShyOSkKKyNlbHNlCisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKShyOSkKKyNlbmRpZgorICAgICAgICBjbXBsICAgIGNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JNTBiCisKKwkvKiBDYWxjdWxhdGUgYW5kIHN0b3JlIHJlc3VsdC4gTm90ZSB0aGF0IHRoaXMgbWltbWljcyB0aGUgQyBjb2RlLAorCSAqIHdoaWNoIG1heSBjYXVzZSBmdW5ueSByZXN1bHRzIGlmIG5zZWMgZ29lcyBuZWdhdGl2ZS4uLiBpcyB0aGF0CisJICogcG9zc2libGUgYXQgYWxsID8KKwkgKi8KKwlhZGQJcjMscjMscjYKKwlhZGQJcjQscjQscjcKKwlsaXMJcjUsTlNFQ19QRVJfU0VDQGgKKwlvcmkJcjUscjUsTlNFQ19QRVJfU0VDQGwKKwljbXBsaQljcjAscjQscjUKKwlibHQJMWYKKwlzdWJmCXI0LHI1LHI0CisJYWRkaQlyMyxyMywxCisxOglzdHcJcjMsVFNQQzMyX1RWX1NFQyhyMTEpCisJc3R3CXI0LFRTUEMzMl9UVl9OU0VDKHIxMSkKKworCW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5ODoKKwltdGxyCXIxMgorCW1yCXIzLHIxMAorCW1yCXI0LHIxMQorOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXR0aW1lCisJc2MKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorCisKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgY2xvY2tfZ2V0cmVzKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXRyZXMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwlsaQlyMywwCisJY21wbGkJY3IwLHI0LDAKKwliZXFscgorCWxpcwlyNSxDTE9DS19SRUFMVElNRV9SRVNAaAorCW9yaQlyNSxyNSxDTE9DS19SRUFMVElNRV9SRVNAbAorCXN0dwlyMyxUU1BDMzJfVFZfU0VDKHI0KQorCXN0dwlyNSxUU1BDMzJfVFZfTlNFQyhyNCkKKwlibHIKKworCS8qCisJICogc3lzY2FsbCBmYWxsYmFjaworCSAqLworOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXRyZXMKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKworCisvKgorICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSAmIGZyaWVuZHMsIGl0IHJldHVybnMgdGhlIHhzZWMKKyAqIHZhbHVlIGluIHIzICYgcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKKyAqIGluIHI5LiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOC4KKyAqIFdoZW4gcmV0dXJuaW5nLCByOCBjb250YWlucyB0aGUgY291bnRlciB2YWx1ZSB0aGF0IGNhbiBiZSByZXVzZWQKKyAqIGJ5IHRoZSBtb25vdG9uaWMgY2xvY2sgaW1wbGVtZW50YXRpb24KKyAqLworX19kb19nZXRfeHNlYzoKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBDaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMuIFdlIHVzZSB0aGUgbG93CisJICogb3JkZXIgMzIgYml0cyBvZiB0aGUgdXBkYXRlIGNvdW50CisJICovCisjaWZkZWYgQ09ORklHX1BQQzY0CisxOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCisjZWxzZQorMToJbHd6CXI4LChDRkdfVEJfVVBEQVRFX0NPVU5UKShyOSkKKyNlbmRpZgorCWFuZGkuCXIwLHI4LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KKwlibmUtCTFiCisJeG9yCXIwLHI4LHI4CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLworCWFkZAlyOSxyOSxyMAorCisJLyogTG9hZCBvcmlnIHN0YW1wIChvZmZzZXQgdG8gVEIpICovCisJbHd6CXI1LENGR19UQl9PUklHX1NUQU1QKHI5KQorCWx3eglyNiwoQ0ZHX1RCX09SSUdfU1RBTVArNCkocjkpCisKKwkvKiBHZXQgYSBzdGFibGUgVEIgdmFsdWUgKi8KKzI6CW1mdGJ1CXIzCisJbWZ0YmwJcjQKKwltZnRidQlyMAorCWNtcGwJY3IwLHIzLHIwCisJYm5lLQkyYgorCisJLyogU3Vic3RyYWN0IHRiIG9yaWcgc3RhbXAuIElmIHRoZSBoaWdoIHBhcnQgaXMgbm9uLXplcm8sIHdlIGp1bXAgdG8KKwkgKiB0aGUgc2xvdyBwYXRoIHdoaWNoIGNhbGwgdGhlIHN5c2NhbGwuCisJICogSWYgaXQncyBvaywgdGhlbiB3ZSBoYXZlIG91ciAzMiBiaXRzIHRiX3RpY2tzIHZhbHVlIGluIHI3CisJICovCisJc3ViZmMJcjcscjYscjQKKwlzdWJmZS4JcjAscjUscjMKKwlibmUtCTNmCisKKwkvKiBMb2FkIHNjYWxlIGZhY3RvciAmIGRvIG11bHRpcGxpY2F0aW9uICovCisJbHd6CXI1LENGR19UQl9UT19YUyhyOSkJLyogbG9hZCB2YWx1ZXMgKi8KKwlsd3oJcjYsKENGR19UQl9UT19YUys0KShyOSkKKwltdWxod3UJcjQscjcscjUKKwltdWxod3UJcjYscjcscjYKKwltdWxsdwlyMCxyNyxyNQorCWFkZGMJcjYscjYscjAKKworCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgdGhlIHNjYWxlZCB4c2VjIHZhbHVlIGluIHI0ICsgWEVSOkNBCisJICogd2UgbG9hZCAmIGFkZCB0aGUgc3RhbXAgc2luY2UgZXBvY2gKKwkgKi8KKwlsd3oJcjUsQ0ZHX1NUQU1QX1hTRUMocjkpCisJbHd6CXI2LChDRkdfU1RBTVBfWFNFQys0KShyOSkKKwlhZGRlCXI0LHI0LHI2CisJYWRkemUJcjMscjUKKworCS8qIFdlIG5vdyBoYXZlIG91ciByZXN1bHQgaW4gcjMscjQuIFdlIGNyZWF0ZSBhIGZha2UgZGVwZW5kZW5jeQorCSAqIG9uIHRoYXQgcmVzdWx0IGFuZCByZS1jaGVjayB0aGUgY291bnRlcgorCSAqLworCW9yCXI2LHI0LHIzCisJeG9yCXIwLHI2LHI2CisJYWRkCXI5LHI5LHIwCisjaWZkZWYgQ09ORklHX1BQQzY0CisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQorI2Vsc2UKKwlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQpKHI5KQorI2VuZGlmCisgICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQkxYgorCisJLyogV2FybmluZyAhIFRoZSBjYWxsZXIgZXhwZWN0cyBDUjpFUSB0byBiZSBzZXQgdG8gaW5kaWNhdGUgYQorCSAqIHN1Y2Nlc3NmdWwgY2FsY3VsYXRpb24gKHNvIGl0IHdvbid0IGZhbGxiYWNrIHRvIHRoZSBzeXNjYWxsCisJICogbWV0aG9kKS4gV2UgaGF2ZSBvdmVycmlkZW4gdGhhdCBDUiBiaXQgaW4gdGhlIGNvdW50ZXIgY2hlY2ssCisJICogYnV0IGZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBfaXNfIENSOkVRIHNldCwgc28KKwkgKiB3ZSBjYW4gZXhpdCBzYWZlbHkgaGVyZS4gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGJlIGNhcmVmdWwKKwkgKiBvZiB0aGF0IHNpZGUgZWZmZWN0LgorCSAqLworMzoJYmxyCisgIC5jZmlfZW5kcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL25vdGUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvbm90ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA2Zjg3YTkxLi5mNGJhZDcyIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogewogICBWRFNPX1ZFUlNJT05fU1RSSU5HIHsKICAgICBnbG9iYWw6Ci0JX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCBpdCAqLworCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgKi8KIAlfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXA7CiAJX19rZXJuZWxfZ2V0dGltZW9mZGF5OworCV9fa2VybmVsX2Nsb2NrX2dldHRpbWU7CisJX19rZXJuZWxfY2xvY2tfZ2V0cmVzOworCV9fa2VybmVsX2dldF90YmZyZXE7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlOwogCV9fa2VybmVsX3N5bmNfZGljYWNoZV9wNTsKIAlfX2tlcm5lbF9zaWd0cmFtcDMyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCmluZGV4IDc2Y2EyOGUuLjU1NmYwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKQEAgLTYsNyArNiw3IEBACiAJLmdsb2JsIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZAogCS5iYWxpZ24gUEFHRV9TSVpFCiB2ZHNvMzJfc3RhcnQ6Ci0JLmluY2JpbiAiYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5zbyIKKwkuaW5jYmluICJhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIuc28iCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc28zMl9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwppbmRleCBlZDZlNTk5Li5lNjdlZGEwZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2RhdGFwYWdlLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpAQCAtNjYsMyArNjYsMTkgQEAKIAlibHIKICAgLmNmaV9lbmRwcm9jCiBWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXApCisKKworLyoKKyAqIHZvaWQgdW5zaWduZWQgbG9uZyAgX19rZXJuZWxfZ2V0X3RiZnJlcSh2b2lkKTsKKyAqCisgKiByZXR1cm5zIHRoZSB0aW1lYmFzZSBmcmVxdWVuY3kgaW4gSFoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXRfdGJmcmVxKQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisJYmwJVl9MT0NBTF9GVU5DKF9fZ2V0X2RhdGFwYWdlKQorCWxkCXIzLENGR19UQl9USUNLU19QRVJfU0VDKHIzKQorCW10bHIJcjEyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0X3RiZnJlcSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM3MWMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDY0IGJpdHMgcHJvY2Vzc2VzIGluIGEKKyAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLAorICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KKyNpbmNsdWRlIDxhc20vdmRzby5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGdldHRpbWVvZmRheQorICoKKyAqIGludCBfX2tlcm5lbF9nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKKyAqCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19rZXJuZWxfZ2V0dGltZW9mZGF5KQorICAuY2ZpX3N0YXJ0cHJvYworCW1mbHIJcjEyCisgIC5jZmlfcmVnaXN0ZXIgbHIscjEyCisKKwltcglyMTEscjMJCQkvKiByMTEgaG9sZHMgdHYgKi8KKwltcglyMTAscjQJCQkvKiByMTAgaG9sZHMgdHogKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCWxpcyAgICAgcjcsMTUJCQkvKiByNyA9IDEwMDAwMDAgPSBVU0VDX1BFUl9TRUMgKi8KKwlvcmkgICAgIHI3LHI3LDE2OTYwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdGQJcjUsVFZBTDY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLworCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCisJbXVsbGQgICByMCxyMCxyNwkJLyogdXNlYyA9ICh4c2VjICogVVNFQ19QRVJfU0VDKSAvCisJCQkJCSAqIFhTRUNfUEVSX1NFQworCQkJCQkgKi8KKwlybGRpY2wgIHIwLHIwLDQ0LDIwCisJY21wbGRpCWNyMCxyMTAsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLworCXN0ZAlyMCxUVkFMNjRfVFZfVVNFQyhyMTEpCS8qIHN0b3JlIHVzZWMgaW4gdHYgKi8KKwliZXEJMWYKKwlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjMpLyogZmlsbCB0eiAqLworCWx3eglyNSxDRkdfVFpfRFNUVElNRShyMykKKwlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTApCisJc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjEwKQorMToJbXRscglyMTIKKwlsaQlyMywwCQkJLyogYWx3YXlzIHN1Y2Nlc3MgKi8KKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCisKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXR0aW1lKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorICAuY2ZpX3N0YXJ0cHJvYworCS8qIENoZWNrIGZvciBzdXBwb3J0ZWQgY2xvY2sgSURzICovCisJY21wd2kJY3IwLHIzLENMT0NLX1JFQUxUSU1FCisJY21wd2kJY3IxLHIzLENMT0NLX01PTk9UT05JQworCWNyb3IJY3IwLGNyMCxjcjEKKwlibmUJY3IwLDk5ZgorCisJbWZscglyMTIJCQkvKiByMTIgc2F2ZXMgbHIgKi8KKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwltcglyMTAscjMJCQkvKiByMTAgc2F2ZXMgaWQgKi8KKwltcglyMTEscjQJCQkvKiByMTEgc2F2ZXMgdHAgKi8KKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCS8qIGdldCBkYXRhIHBhZ2UgKi8KKwliZXEJY3IxLDUwZgkJCS8qIGlmIG1vbm90b25pYyAtPiBqdW1wIHRoZXJlICovCisKKwkvKgorCSAqIENMT0NLX1JFQUxUSU1FCisJICovCisKKwlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCisJbGlzICAgICByNywweDNiOWEJCS8qIHI3ID0gMTAwMDAwMDAwMCA9IE5TRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMHhjYTAwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdGQJcjUsVFNQQzY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLworCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCisJbXVsbGQgICByMCxyMCxyNwkJLyogbnNlYyA9ICh4c2VjICogTlNFQ19QRVJfU0VDKSAvCisJCQkJCSAqIFhTRUNfUEVSX1NFQworCQkJCQkgKi8KKwlybGRpY2wgIHIwLHIwLDQ0LDIwCisJc3RkCXIwLFRTUEM2NF9UVl9OU0VDKHIxMSkJLyogc3RvcmUgbnNlYyBpbiB0cCAqLworCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIENMT0NLX01PTk9UT05JQworCSAqLworCis1MDoJYmwJVl9MT0NBTF9GVU5DKF9fZG9fZ2V0X3hzZWMpCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KKworCWxpcyAgICAgcjcsMHgzYjlhCQkvKiByNyA9IDEwMDAwMDAwMDAgPSBOU0VDX1BFUl9TRUMgKi8KKwlvcmkgICAgIHI3LHI3LDB4Y2EwMAorCXJsZGljbCAgcjUscjQsNDQsMjAJCS8qIHI1ID0gc2VjID0geHNlYyAvIFhTRUNfUEVSX1NFQyAqLworCXJsZGljciAgcjYscjUsMjAsNDMJCS8qIHI2ID0gc2VjICogWFNFQ19QRVJfU0VDICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiBuc2VjID0gKHhzZWMgKiBOU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjYscjAsNDQsMjAKKworCS8qIG5vdyB3ZSBtdXN0IGZpeHVwIHVzaW5nIHdhbGwgdG8gbW9ub3RvbmljLiBXZSBuZWVkIHRvIHNuYXBzaG90CisJICogdGhhdCB2YWx1ZSBhbmQgZG8gdGhlIGNvdW50ZXIgdHJpY2sgYWdhaW4uIEZvcnR1bmF0ZWx5LCB3ZSBzdGlsbAorCSAqIGhhdmUgdGhlIGNvdW50ZXIgdmFsdWUgaW4gcjggdGhhdCB3YXMgcmV0dXJuZWQgYnkgX19kb19nZXRfeHNlYy4KKwkgKiBBdCB0aGlzIHBvaW50LCByNSxyNiBjb250YWluIG91ciBzZWMvbnNlYyB2YWx1ZXMuCisJICogY2FuIGJlIHVzZWQKKwkgKi8KKworCWx3eglyNCxXVE9NX0NMT0NLX1NFQyhyOSkKKwlsd3oJcjcsV1RPTV9DTE9DS19OU0VDKHI5KQorCisJLyogV2Ugbm93IGhhdmUgb3VyIHJlc3VsdCBpbiByNCxyNy4gV2UgY3JlYXRlIGEgZmFrZSBkZXBlbmRlbmN5CisJICogb24gdGhhdCByZXN1bHQgYW5kIHJlLWNoZWNrIHRoZSBjb3VudGVyCisJICovCisJb3IJcjkscjQscjcKKwl4b3IJcjAscjkscjkKKwlhZGQJcjMscjMscjAKKwlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorICAgICAgICBjbXBsZCAgIGNyMCxyMCxyOAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JNTBiCisKKwkvKiBDYWxjdWxhdGUgYW5kIHN0b3JlIHJlc3VsdC4gTm90ZSB0aGF0IHRoaXMgbWltbWljcyB0aGUgQyBjb2RlLAorCSAqIHdoaWNoIG1heSBjYXVzZSBmdW5ueSByZXN1bHRzIGlmIG5zZWMgZ29lcyBuZWdhdGl2ZS4uLiBpcyB0aGF0CisJICogcG9zc2libGUgYXQgYWxsID8KKwkgKi8KKwlhZGQJcjQscjQscjUKKwlhZGQJcjcscjcscjYKKwlsaXMJcjksTlNFQ19QRVJfU0VDQGgKKwlvcmkJcjkscjksTlNFQ19QRVJfU0VDQGwKKwljbXBsaQljcjAscjcscjkKKwlibHQJMWYKKwlzdWJmCXI3LHI5LHI3CisJYWRkaQlyNCxyNCwxCisxOglzdGQJcjQsVFNQQzY0X1RWX1NFQyhyMTEpCisJc3RkCXI3LFRTUEM2NF9UVl9OU0VDKHIxMSkKKworCW10bHIJcjEyCisJbGkJcjMsMAorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5ODoKKwltdGxyCXIxMgorCW1yCXIzLHIxMAorCW1yCXI0LHIxMQorOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXR0aW1lCisJc2MKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9jbG9ja19nZXR0aW1lKQorCisKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgY2xvY2tfZ2V0cmVzKCkKKyAqCisgKiBpbnQgX19rZXJuZWxfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9jbG9ja19nZXRyZXMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwlsaQlyMywwCisJY21wbGkJY3IwLHI0LDAKKwliZXFscgorCWxpcwlyNSxDTE9DS19SRUFMVElNRV9SRVNAaAorCW9yaQlyNSxyNSxDTE9DS19SRUFMVElNRV9SRVNAbAorCXN0ZAlyMyxUU1BDNjRfVFZfU0VDKHI0KQorCXN0ZAlyNSxUU1BDNjRfVFZfTlNFQyhyNCkKKwlibHIKKworCS8qCisJICogc3lzY2FsbCBmYWxsYmFjaworCSAqLworOTk6CisJbGkJcjAsX19OUl9jbG9ja19nZXRyZXMKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKworCisvKgorICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYworICogdmFsdWUgaW4gcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKKyAqIGluIHIzLiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOAorICogV2hlbiByZXR1cm5pbmcsIHI4IGNvbnRhaW5zIHRoZSBjb3VudGVyIHZhbHVlIHRoYXQgY2FuIGJlIHJldXNlZAorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fZG9fZ2V0X3hzZWMpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogY2hlY2sgZm9yIHVwZGF0ZSBjb3VudCAmIGxvYWQgdmFsdWVzICovCisxOglsZAlyOCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorCWFuZGkuCXIwLHI0LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KKwlibmUtCTFiCisJeG9yCXIwLHI0LHI0CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLworCWFkZAlyMyxyMyxyMAorCisJLyogR2V0IFRCICYgb2Zmc2V0IGl0ICovCisJbWZ0YglyNworCWxkCXI5LENGR19UQl9PUklHX1NUQU1QKHIzKQorCXN1YmYJcjcscjkscjcKKworCS8qIFNjYWxlIHJlc3VsdCAqLworCWxkCXI1LENGR19UQl9UT19YUyhyMykKKwltdWxoZHUJcjcscjcscjUKKworCS8qIEFkZCBzdGFtcCBzaW5jZSBlcG9jaCAqLworCWxkCXI2LENGR19TVEFNUF9YU0VDKHIzKQorCWFkZAlyNCxyNixyNworCisJeG9yCXIwLHI0LHI0CisJYWRkCXIzLHIzLHIwCisJbGQJcjAsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKKyAgICAgICAgY21wbGQgICBjcjAscjAscjgJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KKwlibmUtCTFiCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19kb19nZXRfeHNlYykKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9ub3RlLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9ub3RlLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L25vdGUuUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKaW5kZXggOWNiMjgxOC4uNGJkZjIyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKQEAgLTEwMiw5ICsxMDIsMTIgQEAKIHsKICAgVkRTT19WRVJTSU9OX1NUUklORyB7CiAgICAgZ2xvYmFsOgotCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgaXQgKi8KKwlfX2tlcm5lbF9kYXRhcGFnZV9vZmZzZXQ7IC8qIEhhcyB0byBiZSB0aGVyZSBmb3IgdGhlIGtlcm5lbCB0byBmaW5kICovCiAJX19rZXJuZWxfZ2V0X3N5c2NhbGxfbWFwOwogICAgIAlfX2tlcm5lbF9nZXR0aW1lb2ZkYXk7CisJX19rZXJuZWxfY2xvY2tfZ2V0dGltZTsKKwlfX2tlcm5lbF9jbG9ja19nZXRyZXM7CisJX19rZXJuZWxfZ2V0X3RiZnJlcTsKIAlfX2tlcm5lbF9zeW5jX2RpY2FjaGU7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlX3A1OwogCV9fa2VybmVsX3NpZ3RyYW1wX3J0NjQ7CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKaW5kZXggNzcxYzI3NC4uMDUyOWNiOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L3Zkc282NF93cmFwcGVyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpAQCAtNiw3ICs2LDcgQEAKIAkuZ2xvYmwgdmRzbzY0X3N0YXJ0LCB2ZHNvNjRfZW5kCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc282NF9zdGFydDoKLQkuaW5jYmluICJhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0LnNvIgorCS5pbmNiaW4gImFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5zbyIKIAkuYmFsaWduIFBBR0VfU0laRQogdmRzbzY0X2VuZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9iaXRvcHMuYyBiL2FyY2gvcG93ZXJwYy9saWIvYml0b3BzLmMKaW5kZXggYjY3Y2UzMC4uZjY4YWQ3MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9iaXRvcHMuYworKysgYi9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jCkBAIC00MSw3ICs0MSw3IEBACiAJdG1wID0gKnA7CiAKIGZvdW5kX2ZpcnN0OgotCXRtcCAmPSAofjBVTCA+PiAoNjQgLSBzaXplKSk7CisJdG1wICY9ICh+MFVMID4+IChCSVRTX1BFUl9MT05HIC0gc2l6ZSkpOwogCWlmICh0bXAgPT0gMFVMKQkJLyogQXJlIGFueSBiaXRzIHNldD8gKi8KIAkJcmV0dXJuIHJlc3VsdCArIHNpemU7CS8qIE5vcGUuICovCiBmb3VuZF9taWRkbGU6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwppbmRleCAyMmU0NzQ4Li43MDZlOGE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKQEAgLTg0LDEwICs4NCwxMSBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGFydF90YWJsZWJhc2U7CiAjZW5kaWYgLyogQ09ORklHX1UzX0RBUlQgKi8KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX1NEUjE7CitzdHJ1Y3QgbW11X3BzaXplX2RlZiBtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV9DT1VOVF07CisKIGhwdGVfdCAqaHRhYl9hZGRyZXNzOwogdW5zaWduZWQgbG9uZyBodGFiX2hhc2hfbWFzazsKLXVuc2lnbmVkIGxvbmcgX1NEUjE7Ci1zdHJ1Y3QgbW11X3BzaXplX2RlZiBtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV9DT1VOVF07CiBpbnQgbW11X2xpbmVhcl9wc2l6ZSA9IE1NVV9QQUdFXzRLOwogaW50IG1tdV92aXJ0dWFsX3BzaXplID0gTU1VX1BBR0VfNEs7CiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQpAQCAtMTY1LDcgKzE2Niw3IEBACiAJCSAqIG5vcm1hbCBpbnNlcnQgY2FsbGJhY2sgaGVyZS4KIAkJICovCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX0lTRVJJRVNfTFBBUikKKwkJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX0lTRVJJRVNfTFBBUikKIAkJCXJldCA9IGlTZXJpZXNfaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLAogCQkJCQkJICB2aXJ0X3RvX2FicyhwYWRkciksCiAJCQkJCQkgIHRtcF9tb2RlLApAQCAtMTc0LDcgKzE3NSw3IEBACiAJCWVsc2UKICNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpCisJCWlmIChfbWFjaGluZSAmIFBMQVRGT1JNX0xQQVIpCiAJCQlyZXQgPSBwU2VyaWVzX2xwYXJfaHB0ZV9pbnNlcnQoaHB0ZWcsIHZhLAogCQkJCQkJICAgICAgIHZpcnRfdG9fYWJzKHBhZGRyKSwKIAkJCQkJCSAgICAgICB0bXBfbW9kZSwKQEAgLTI5Myw3ICsyOTQsNyBAQAogCSAqIE5vdCBpbiB0aGUgZGV2aWNlLXRyZWUsIGxldCdzIGZhbGxiYWNrIG9uIGtub3duIHNpemUKIAkgKiBsaXN0IGZvciAxNk0gY2FwYWJsZSBHUCAmIEdSCiAJICovCi0JaWYgKChzeXN0ZW1jZmctPnBsYXRmb3JtICE9IFBMQVRGT1JNX0lTRVJJRVNfTFBBUikgJiYKKwlpZiAoKF9tYWNoaW5lICE9IFBMQVRGT1JNX0lTRVJJRVNfTFBBUikgJiYKIAkgICAgY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfMTZNX1BBR0UpKQogCQltZW1jcHkobW11X3BzaXplX2RlZnMsIG1tdV9wc2l6ZV9kZWZhdWx0c19ncCwKIAkJICAgICAgIHNpemVvZihtbXVfcHNpemVfZGVmYXVsdHNfZ3ApKTsKQEAgLTM2NCw3ICszNjUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHRhYl9nZXRfdGFibGVfc2l6ZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50OworCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUsIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudDsKIAogCS8qIElmIGhhc2ggc2l6ZSBpc24ndCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSwgd2UgdHJ5IHRvCiAJICogcmV0cmVpdmUgaXQgZnJvbSB0aGUgZGV2aWNlLXRyZWUuIElmIGl0J3Mgbm90IHRoZXJlIG5laXRoZXIsIHdlCkBAIC0zNzYsOCArMzc3LDkgQEAKIAkJcmV0dXJuIDFVTCA8PCBwcGM2NF9wZnRfc2l6ZTsKIAogCS8qIHJvdW5kIG1lbV9zaXplIHVwIHRvIG5leHQgcG93ZXIgb2YgMiAqLwotCXJuZF9tZW1fc2l6ZSA9IDFVTCA8PCBfX2lsb2cyKHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplKTsKLQlpZiAocm5kX21lbV9zaXplIDwgc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUpCisJbWVtX3NpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOworCXJuZF9tZW1fc2l6ZSA9IDFVTCA8PCBfX2lsb2cyKG1lbV9zaXplKTsKKwlpZiAocm5kX21lbV9zaXplIDwgbWVtX3NpemUpCiAJCXJuZF9tZW1fc2l6ZSA8PD0gMTsKIAogCS8qICMgcGFnZXMgLyAyICovCkBAIC0zODYsNiArMzg4LDE1IEBACiAJcmV0dXJuIHB0ZWdfY291bnQgPDwgNzsKIH0KIAorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRwordm9pZCBjcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCQlCVUdfT04oaHRhYl9ib2x0X21hcHBpbmcoc3RhcnQsIGVuZCwgc3RhcnQsCisJCQlfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQ09IRVJFTlQgfCBQUF9SV1hYLAorCQkJbW11X2xpbmVhcl9wc2l6ZSkpOworfQorI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLworCiB2b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhYmxlLCBodGFiX3NpemVfYnl0ZXM7CkBAIC00MTAsNyArNDIxLDcgQEAKIAogCWh0YWJfaGFzaF9tYXNrID0gcHRlZ19jb3VudCAtIDE7CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpIHsKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKSB7CiAJCS8qIFVzaW5nIGEgaHlwZXJ2aXNvciB3aGljaCBvd25zIHRoZSBodGFiICovCiAJCWh0YWJfYWRkcmVzcyA9IE5VTEw7CiAJCV9TRFIxID0gMDsgCkBAIC00MzEsNiArNDQyLDkgQEAKIAogCQkvKiBJbml0aWFsaXplIHRoZSBIUFQgd2l0aCBubyBlbnRyaWVzICovCiAJCW1lbXNldCgodm9pZCAqKXRhYmxlLCAwLCBodGFiX3NpemVfYnl0ZXMpOworCisJCS8qIFNldCBTRFIxICovCisJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOwogCX0KIAogCW1vZGVfcncgPSBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQ09IRVJFTlQgfCBQUF9SV1hYOwpAQCAtNTAwLDYgKzUxNCwxMiBAQAogI3VuZGVmIEtCCiAjdW5kZWYgTUIKIAordm9pZCBfX2luaXQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKQoreworCWlmICghcGxhdGZvcm1faXNfbHBhcigpKQorCQltdHNwcihTUFJOX1NEUjEsIF9TRFIxKTsKK30KKwogLyoKICAqIENhbGxlZCBieSBhc20gaGFzaHRhYmxlLlMgZm9yIGRvaW5nIGxhenkgaWNhY2hlIGZsdXNoCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDQ2MTJhNzkuLjdkNGI4YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtODQsOSArODQsNiBAQAogLyogWFhYIHNob3VsZCBiZSBpbiBjdXJyZW50LmggIC0tIHBhdWx1cyAqLwogZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKLWNoYXIgKmtsaW1pdCA9IF9lbmQ7Ci1zdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeV9ub2RlOwotCiBleHRlcm4gaW50IGluaXRfYm9vdG1lbV9kb25lOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKaW5kZXggY2U5NzRjOC4uMTEzNGY3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCkBAIC0yMCw2ICsyMCw4IEBACiAgKgogICovCiAKKyN1bmRlZiBERUJVRworCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTY0LDYgKzY2LDEyIEBACiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KICNpbmNsdWRlIDxhc20vaW1hbGxvYy5oPgogCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKGZtdCkKKyNlbHNlCisjZGVmaW5lIERCRyhmbXQuLi4pCisjZW5kaWYKKwogI2lmIFBHVEFCTEVfUkFOR0UgPiBVU0VSX1ZTSURfUkFOR0UKICN3YXJuaW5nIExpbWl0ZWQgdXNlciBWU0lEIHJhbmdlIG1lYW5zIHBhZ2V0YWJsZSBzcGFjZSBpcyB3YXN0ZWQKICNlbmRpZgpAQCAtNzIsOCArODAsNiBAQAogI3dhcm5pbmcgVEFTS19TSVpFIGlzIHNtYWxsZXIgdGhhbiBpdCBuZWVkcyB0byBiZS4KICNlbmRpZgogCi11bnNpZ25lZCBsb25nIGtsaW1pdCA9ICh1bnNpZ25lZCBsb25nKV9lbmQ7Ci0KIC8qIG1heCBhbW91bnQgb2YgUkFNIHRvIHVzZSAqLwogdW5zaWduZWQgbG9uZyBfX21heF9tZW1vcnk7CiAKQEAgLTE4OCwxNCArMTk0LDE0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFBDXzY0S19QQUdFUwotc3RhdGljIGNvbnN0IGludCBwZ3RhYmxlX2NhY2hlX3NpemVbMl0gPSB7Ci0JUFRFX1RBQkxFX1NJWkUsIFBHRF9UQUJMRV9TSVpFCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVszXSA9IHsKKwlQVEVfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUsIFBHRF9UQUJMRV9TSVpFCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBndGFibGVfY2FjaGVfbmFtZVtBUlJBWV9TSVpFKHBndGFibGVfY2FjaGVfc2l6ZSldID0gewotCSJwdGVfcG1kX2NhY2hlIiwgInBnZF9jYWNoZSIsCisJInB0ZV9wbWRfY2FjaGUiLCAicG1kX2NhY2hlIiwgInBnZF9jYWNoZSIsCiB9OwogI2Vsc2UKLXN0YXRpYyBjb25zdCBpbnQgcGd0YWJsZV9jYWNoZV9zaXplWzJdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwZ3RhYmxlX2NhY2hlX3NpemVbMl0gPSB7CiAJUFRFX1RBQkxFX1NJWkUsIFBNRF9UQUJMRV9TSVpFCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBndGFibGVfY2FjaGVfbmFtZVtBUlJBWV9TSVpFKHBndGFibGVfY2FjaGVfc2l6ZSldID0gewpAQCAtMjEzLDYgKzIxOSw4IEBACiAJCWludCBzaXplID0gcGd0YWJsZV9jYWNoZV9zaXplW2ldOwogCQljb25zdCBjaGFyICpuYW1lID0gcGd0YWJsZV9jYWNoZV9uYW1lW2ldOwogCisJCURCRygiQWxsb2NhdGluZyBwYWdlIHRhYmxlIGNhY2hlICVzICgjJWQpICIKKwkJICAgICJmb3Igc2l6ZTogJTA4eC4uLlxuIiwgbmFtZSwgaSwgc2l6ZSk7CiAJCXBndGFibGVfY2FjaGVbaV0gPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lLAogCQkJCQkJICAgICBzaXplLCBzaXplLAogCQkJCQkJICAgICBTTEFCX0hXQ0FDSEVfQUxJR04gfApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IDZmNTVlZmQuLmUyYzk1ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQ2LDkgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vdmRzby5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJtbXVfZGVjbC5oIgogCkBAIC0xMTAsNiArMTA4LDcgQEAKIHZvaWQgb25saW5lX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7CisJc2V0X3BhZ2VfY291bnQocGFnZSwgMCk7CiAJZnJlZV9jb2xkX3BhZ2UocGFnZSk7CiAJdG90YWxyYW1fcGFnZXMrKzsKIAludW1fcGh5c3BhZ2VzKys7CkBAIC0xMjcsNiArMTI2LDkgQEAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IHNpemUgPj4gUEFHRV9TSElGVDsKIAorCXN0YXJ0ICs9IEtFUk5FTEJBU0U7CisJY3JlYXRlX3NlY3Rpb25fbWFwcGluZyhzdGFydCwgc3RhcnQgKyBzaXplKTsKKwogCS8qIHRoaXMgc2hvdWxkIHdvcmsgZm9yIG1vc3Qgbm9uLWhpZ2htZW0gcGxhdGZvcm1zICovCiAJem9uZSA9IHBnZGF0YS0+bm9kZV96b25lczsKIApAQCAtMzkzLDEwICszOTUsOCBAQAogCiAJbWVtX2luaXRfZG9uZSA9IDE7CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKIAkvKiBJbml0aWFsaXplIHRoZSB2RFNPICovCiAJdmRzb19pbml0KCk7Ci0jZW5kaWYKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGRhMDliYTAuLmJkMmNmMTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTcsOSArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxhc20vc3BhcnNlbWVtLmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIApAQCAtMjgsNDUgKzI3LDExMyBAQAogc3RhdGljIGludCBudW1hX2RlYnVnOwogI2RlZmluZSBkYmcoYXJncy4uLikgaWYgKG51bWFfZGVidWcpIHsgcHJpbnRrKEtFUk5fSU5GTyBhcmdzKTsgfQogCi0jaWZkZWYgREVCVUdfTlVNQQotI2RlZmluZSBBUlJBWV9JTklUSUFMSVNFUiAtMQotI2Vsc2UKLSNkZWZpbmUgQVJSQVlfSU5JVElBTElTRVIgMAotI2VuZGlmCi0KLWludCBudW1hX2NwdV9sb29rdXBfdGFibGVbTlJfQ1BVU10gPSB7IFsgMCAuLi4gKE5SX0NQVVMgLSAxKV0gPQotCUFSUkFZX0lOSVRJQUxJU0VSfTsKLWNoYXIgKm51bWFfbWVtb3J5X2xvb2t1cF90YWJsZTsKK2ludCBudW1hX2NwdV9sb29rdXBfdGFibGVbTlJfQ1BVU107CiBjcHVtYXNrX3QgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtNQVhfTlVNTk9ERVNdOwotaW50IG5yX2NwdXNfaW5fbm9kZVtNQVhfTlVNTk9ERVNdID0geyBbMCAuLi4gKE1BWF9OVU1OT0RFUyAtMSldID0gMH07Ci0KIHN0cnVjdCBwZ2xpc3RfZGF0YSAqbm9kZV9kYXRhW01BWF9OVU1OT0RFU107Ci1ib290bWVtX2RhdGFfdCBfX2luaXRkYXRhIHBsYXRfbm9kZV9iZGF0YVtNQVhfTlVNTk9ERVNdOworCitFWFBPUlRfU1lNQk9MKG51bWFfY3B1X2xvb2t1cF90YWJsZSk7CitFWFBPUlRfU1lNQk9MKG51bWFfY3B1bWFza19sb29rdXBfdGFibGUpOworRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOworCitzdGF0aWMgYm9vdG1lbV9kYXRhX3QgX19pbml0ZGF0YSBwbGF0X25vZGVfYmRhdGFbTUFYX05VTU5PREVTXTsKIHN0YXRpYyBpbnQgbWluX2NvbW1vbl9kZXB0aDsKIAogLyoKLSAqIFdlIG5lZWQgc29tZXdoZXJlIHRvIHN0b3JlIHN0YXJ0L3NwYW4gZm9yIGVhY2ggbm9kZSB1bnRpbCB3ZSBoYXZlCisgKiBXZSBuZWVkIHNvbWV3aGVyZSB0byBzdG9yZSBzdGFydC9lbmQvbm9kZSBmb3IgZWFjaCByZWdpb24gdW50aWwgd2UgaGF2ZQogICogYWxsb2NhdGVkIHRoZSByZWFsIG5vZGVfZGF0YSBzdHJ1Y3R1cmVzLgogICovCisjZGVmaW5lIE1BWF9SRUdJT05TCShNQVhfTE1CX1JFR0lPTlMqMikKIHN0YXRpYyBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm47Ci0JdW5zaWduZWQgbG9uZyBub2RlX2VuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyBub2RlX3ByZXNlbnRfcGFnZXM7Ci19IGluaXRfbm9kZV9kYXRhW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsKKwl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJaW50IG5pZDsKK30gaW5pdF9ub2RlX2RhdGFbTUFYX1JFR0lPTlNdIF9faW5pdGRhdGE7CiAKLUVYUE9SVF9TWU1CT0wobm9kZV9kYXRhKTsKLUVYUE9SVF9TWU1CT0wobnVtYV9jcHVfbG9va3VwX3RhYmxlKTsKLUVYUE9SVF9TWU1CT0wobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlKTsKLUVYUE9SVF9TWU1CT0wobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZSk7Ci1FWFBPUlRfU1lNQk9MKG5yX2NwdXNfaW5fbm9kZSk7CitpbnQgX19pbml0IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47CisJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47CisKKwkJaWYgKChzdGFydF9wZm4gPD0gcGZuKSAmJiAocGZuIDwgZW5kX3BmbikpCisJCQlyZXR1cm4gaW5pdF9ub2RlX2RhdGFbaV0ubmlkOworCX0KKworCXJldHVybiAtMTsKK30KKwordm9pZCBfX2luaXQgYWRkX3JlZ2lvbih1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlkYmcoImFkZF9yZWdpb24gbmlkICVkIHN0YXJ0X3BmbiAweCVseCBwYWdlcyAweCVseFxuIiwKKwkJbmlkLCBzdGFydF9wZm4sIHBhZ2VzKTsKKworCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiA9PSBzdGFydF9wZm4pIHsKKwkJCWluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gKz0gcGFnZXM7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiA9PSAoc3RhcnRfcGZuICsgcGFnZXMpKSB7CisJCQlpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gLT0gcGFnZXM7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKgorCSAqIExlYXZlIGxhc3QgZW50cnkgTlVMTCBzbyB3ZSBkb250IGl0ZXJhdGUgb2ZmIHRoZSBlbmQgKHdlIHVzZQorCSAqIGVudHJ5LmVuZF9wZm4gdG8gdGVybWluYXRlIHRoZSB3YWxrKS4KKwkgKi8KKwlpZiAoaSA+PSAoTUFYX1JFR0lPTlMgLSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IHRvbyBtYW55IG1lbW9yeSByZWdpb25zIGluICIKKwkJCQkibnVtYSBjb2RlLCB0cnVuY2F0aW5nXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKKwlpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuID0gc3RhcnRfcGZuICsgcGFnZXM7CisJaW5pdF9ub2RlX2RhdGFbaV0ubmlkID0gbmlkOworfQorCisvKiBXZSBhc3N1bWUgaW5pdF9ub2RlX2RhdGEgaGFzIG5vIG92ZXJsYXBwaW5nIHJlZ2lvbnMgKi8KK3ZvaWQgX19pbml0IGdldF9yZWdpb24odW5zaWduZWQgaW50IG5pZCwgdW5zaWduZWQgbG9uZyAqc3RhcnRfcGZuLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyAqZW5kX3BmbiwgdW5zaWduZWQgbG9uZyAqcGFnZXNfcHJlc2VudCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCSpzdGFydF9wZm4gPSAtMVVMOworCSplbmRfcGZuID0gKnBhZ2VzX3ByZXNlbnQgPSAwOworCisJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQorCQkJY29udGludWU7CisKKwkJKnBhZ2VzX3ByZXNlbnQgKz0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiAtCisJCQlpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47CisKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiA8ICpzdGFydF9wZm4pCisJCQkqc3RhcnRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuOworCisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuID4gKmVuZF9wZm4pCisJCQkqZW5kX3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47CisJfQorCisJLyogV2UgZGlkbnQgZmluZCBhIG1hdGNoaW5nIHJlZ2lvbiwgcmV0dXJuIHN0YXJ0L2VuZCBhcyAwICovCisJaWYgKCpzdGFydF9wZm4gPT0gLTFVTCkKKwkJc3RhcnRfcGZuID0gMDsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKIHsKIAludW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XSA9IG5vZGU7Ci0JaWYgKCEoY3B1X2lzc2V0KGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkpKSB7CisKKwlpZiAoIShjcHVfaXNzZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKSkpCiAJCWNwdV9zZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKTsKLQkJbnJfY3B1c19pbl9ub2RlW25vZGVdKys7Ci0JfQogfQogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCkBAIC03OCw3ICsxNDUsNiBAQAogCiAJaWYgKGNwdV9pc3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pKSB7CiAJCWNwdV9jbGVhcihjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pOwotCQlucl9jcHVzX2luX25vZGVbbm9kZV0tLTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkc6IGNwdSAlbHUgbm90IGZvdW5kIGluIG5vZGUgJWRcbiIsCiAJCSAgICAgICBjcHUsIG5vZGUpOwpAQCAtODYsNyArMTUyLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9fZGV2aW5pdCBmaW5kX2NwdV9ub2RlKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX2NwdV9ub2RlKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJdW5zaWduZWQgaW50IGh3X2NwdWlkID0gZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChjcHUpOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X25vZGUgPSBOVUxMOwpAQCAtMjEzLDcgKzI3OSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX25fY2VsbHMoaW50IG4sIHVuc2lnbmVkIGludCAqKmJ1ZikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCByZWFkX25fY2VsbHMoaW50IG4sIHVuc2lnbmVkIGludCAqKmJ1ZikKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7CiAKQEAgLTI5NSw3ICszNjEsOCBAQAogICogb3IgemVyby4gSWYgdGhlIHJldHVybmVkIHZhbHVlIG9mIHNpemUgaXMgMCB0aGUgcmVnaW9uIHNob3VsZCBiZQogICogZGlzY2FyZGVkIGFzIGl0IGxpZXMgd2hvbHkgYWJvdmUgdGhlIG1lbW9yeSBsaW1pdC4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAkvKgogCSAqIFdlIHVzZSBsbWJfZW5kX29mX0RSQU0oKSBpbiBoZXJlIGluc3RlYWQgb2YgbWVtb3J5X2xpbWl0IGJlY2F1c2UKQEAgLTMyMCw4ICszODcsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1ID0gTlVMTDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSA9IE5VTEw7CiAJaW50IGFkZHJfY2VsbHMsIHNpemVfY2VsbHM7Ci0JaW50IG1heF9kb21haW4gPSAwOwotCWxvbmcgZW50cmllcyA9IGxtYl9lbmRfb2ZfRFJBTSgpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlQ7CisJaW50IG1heF9kb21haW47CiAJdW5zaWduZWQgbG9uZyBpOwogCiAJaWYgKG51bWFfZW5hYmxlZCA9PSAwKSB7CkBAIC0zMjksMTMgKzM5NSw2IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQludW1hX21lbW9yeV9sb29rdXBfdGFibGUgPQotCQkoY2hhciAqKWFic190b192aXJ0KGxtYl9hbGxvYyhlbnRyaWVzICogc2l6ZW9mKGNoYXIpLCAxKSk7Ci0JbWVtc2V0KG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSwgMCwgZW50cmllcyAqIHNpemVvZihjaGFyKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZW50cmllcyA7IGkrKykKLQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2ldID0gQVJSQVlfSU5JVElBTElTRVI7Ci0KIAltaW5fY29tbW9uX2RlcHRoID0gZmluZF9taW5fY29tbW9uX2RlcHRoKCk7CiAKIAlkYmcoIk5VTUEgYXNzb2NpYXRpdml0eSBkZXB0aCBmb3IgQ1BVL01lbW9yeTogJWRcbiIsIG1pbl9jb21tb25fZGVwdGgpOwpAQCAtMzg3LDkgKzQ0Niw2IEBACiAJCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKGFkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7CiAJCXNpemUgPSByZWFkX25fY2VsbHMoc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAotCQlzdGFydCA9IF9BTElHTl9ET1dOKHN0YXJ0LCBNRU1PUllfSU5DUkVNRU5UKTsKLQkJc2l6ZSA9IF9BTElHTl9VUChzaXplLCBNRU1PUllfSU5DUkVNRU5UKTsKLQogCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4obWVtb3J5KTsKIAogCQlpZiAobnVtYV9kb21haW4gPj0gTUFYX05VTU5PREVTKSB7CkBAIC00MDMsNDQgKzQ1OSwxNSBAQAogCQlpZiAobWF4X2RvbWFpbiA8IG51bWFfZG9tYWluKQogCQkJbWF4X2RvbWFpbiA9IG51bWFfZG9tYWluOwogCi0JCWlmICghIChzaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChzdGFydCwgc2l6ZSkpKSB7CisJCWlmICghKHNpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHN0YXJ0LCBzaXplKSkpIHsKIAkJCWlmICgtLXJhbmdlcykKIAkJCQlnb3RvIG5ld19yYW5nZTsKIAkJCWVsc2UKIAkJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIEluaXRpYWxpemUgbmV3IG5vZGUgc3RydWN0LCBvciBhZGQgdG8gYW4gZXhpc3Rpbmcgb25lLgotCQkgKi8KLQkJaWYgKGluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4pIHsKLQkJCWlmICgoc3RhcnQgLyBQQUdFX1NJWkUpIDwKLQkJCSAgICBpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9zdGFydF9wZm4pCi0JCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfc3RhcnRfcGZuID0KLQkJCQkJc3RhcnQgLyBQQUdFX1NJWkU7Ci0JCQlpZiAoKChzdGFydCAvIFBBR0VfU0laRSkgKyAoc2l6ZSAvIFBBR0VfU0laRSkpID4KLQkJCSAgICBpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9lbmRfcGZuKQotCQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4gPQotCQkJCQkoc3RhcnQgLyBQQUdFX1NJWkUpICsKLQkJCQkJKHNpemUgLyBQQUdFX1NJWkUpOwotCi0JCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9wcmVzZW50X3BhZ2VzICs9Ci0JCQkJc2l6ZSAvIFBBR0VfU0laRTsKLQkJfSBlbHNlIHsKLQkJCW5vZGVfc2V0X29ubGluZShudW1hX2RvbWFpbik7Ci0KLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbiA9Ci0JCQkJc3RhcnQgLyBQQUdFX1NJWkU7Ci0JCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9lbmRfcGZuID0KLQkJCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9zdGFydF9wZm4gKwotCQkJCXNpemUgLyBQQUdFX1NJWkU7Ci0JCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9wcmVzZW50X3BhZ2VzID0KLQkJCQlzaXplIC8gUEFHRV9TSVpFOwotCQl9Ci0KLQkJZm9yIChpID0gc3RhcnQgOyBpIDwgKHN0YXJ0K3NpemUpOyBpICs9IE1FTU9SWV9JTkNSRU1FTlQpCi0JCQludW1hX21lbW9yeV9sb29rdXBfdGFibGVbaSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUXSA9Ci0JCQkJbnVtYV9kb21haW47CisJCWFkZF9yZWdpb24obnVtYV9kb21haW4sIHN0YXJ0ID4+IFBBR0VfU0hJRlQsCisJCQkgICBzaXplID4+IFBBR0VfU0hJRlQpOwogCiAJCWlmICgtLXJhbmdlcykKIAkJCWdvdG8gbmV3X3JhbmdlOwpAQCAtNDU2LDMyICs0ODMsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHRvcF9vZl9yYW0gPSBsbWJfZW5kX29mX0RSQU0oKTsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX3JhbSA9IGxtYl9waHlzX21lbV9zaXplKCk7Ci0JdW5zaWduZWQgbG9uZyBpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiVG9wIG9mIFJBTTogMHglbHgsIFRvdGFsIFJBTTogMHglbHhcbiIsCiAJICAgICAgIHRvcF9vZl9yYW0sIHRvdGFsX3JhbSk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5IGhvbGUgc2l6ZTogJWxkTUJcbiIsCiAJICAgICAgICh0b3Bfb2ZfcmFtIC0gdG90YWxfcmFtKSA+PiAyMCk7CiAKLQlpZiAoIW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSkgewotCQlsb25nIGVudHJpZXMgPSB0b3Bfb2ZfcmFtID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlQ7Ci0JCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSA9Ci0JCQkoY2hhciAqKWFic190b192aXJ0KGxtYl9hbGxvYyhlbnRyaWVzICogc2l6ZW9mKGNoYXIpLCAxKSk7Ci0JCW1lbXNldChudW1hX21lbW9yeV9sb29rdXBfdGFibGUsIDAsIGVudHJpZXMgKiBzaXplb2YoY2hhcikpOwotCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllcyA7IGkrKykKLQkJCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpXSA9IEFSUkFZX0lOSVRJQUxJU0VSOwotCX0KLQogCW1hcF9jcHVfdG9fbm9kZShib290X2NwdWlkLCAwKTsKLQorCWFkZF9yZWdpb24oMCwgMCwgbG1iX2VuZF9vZl9EUkFNKCkgPj4gUEFHRV9TSElGVCk7CiAJbm9kZV9zZXRfb25saW5lKDApOwotCi0JaW5pdF9ub2RlX2RhdGFbMF0ubm9kZV9zdGFydF9wZm4gPSAwOwotCWluaXRfbm9kZV9kYXRhWzBdLm5vZGVfZW5kX3BmbiA9IGxtYl9lbmRfb2ZfRFJBTSgpIC8gUEFHRV9TSVpFOwotCWluaXRfbm9kZV9kYXRhWzBdLm5vZGVfcHJlc2VudF9wYWdlcyA9IHRvdGFsX3JhbSAvIFBBR0VfU0laRTsKLQotCWZvciAoaSA9IDAgOyBpIDwgdG9wX29mX3JhbTsgaSArPSBNRU1PUllfSU5DUkVNRU5UKQotCQludW1hX21lbW9yeV9sb29rdXBfdGFibGVbaSA+PiBNRU1PUllfSU5DUkVNRU5UX1NISUZUXSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkdW1wX251bWFfdG9wb2xvZ3kodm9pZCkKQEAgLTQ5OSw4ICs1MDksOSBAQAogCiAJCWNvdW50ID0gMDsKIAotCQlmb3IgKGkgPSAwOyBpIDwgbG1iX2VuZF9vZl9EUkFNKCk7IGkgKz0gTUVNT1JZX0lOQ1JFTUVOVCkgewotCQkJaWYgKG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdID09IG5vZGUpIHsKKwkJZm9yIChpID0gMDsgaSA8IGxtYl9lbmRfb2ZfRFJBTSgpOworCQkgICAgIGkgKz0gKDEgPDwgU0VDVElPTl9TSVpFX0JJVFMpKSB7CisJCQlpZiAoZWFybHlfcGZuX3RvX25pZChpID4+IFBBR0VfU0hJRlQpID09IG5vZGUpIHsKIAkJCQlpZiAoY291bnQgPT0gMCkKIAkJCQkJcHJpbnRrKCIgMHglbHgiLCBpKTsKIAkJCQkrK2NvdW50OwpAQCAtNTI1LDEwICs1MzYsMTIgQEAKICAqCiAgKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtZW1vcnkuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNhcmVmdWxfYWxsb2NhdGlvbihpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24sIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIHZvaWQgX19pbml0ICpjYXJlZnVsX2FsbG9jYXRpb24oaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFsaWduLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7Ci0JdW5zaWduZWQgbG9uZyByZXQgPSBsbWJfYWxsb2NfYmFzZShzaXplLCBhbGlnbiwgZW5kKTsKKwlpbnQgbmV3X25pZDsKKwl1bnNpZ25lZCBsb25nIHJldCA9IGxtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOwogCiAJLyogcmV0cnkgb3ZlciBhbGwgbWVtb3J5ICovCiAJaWYgKCFyZXQpCkBAIC01NDIsMjggKzU1NSwyNyBAQAogCSAqIElmIHRoZSBtZW1vcnkgY2FtZSBmcm9tIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQgbm9kZSwgd2UgbXVzdAogCSAqIHJldHJ5IHdpdGggdGhlIGJvb3RtZW0gYWxsb2NhdG9yLgogCSAqLwotCWlmIChwYV90b19uaWQocmV0KSA8IG5pZCkgewotCQluaWQgPSBwYV90b19uaWQocmV0KTsKLQkJcmV0ID0gKHVuc2lnbmVkIGxvbmcpX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksCisJbmV3X25pZCA9IGVhcmx5X3Bmbl90b19uaWQocmV0ID4+IFBBR0VfU0hJRlQpOworCWlmIChuZXdfbmlkIDwgbmlkKSB7CisJCXJldCA9ICh1bnNpZ25lZCBsb25nKV9fYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuZXdfbmlkKSwKIAkJCQlzaXplLCBhbGlnbiwgMCk7CiAKIAkJaWYgKCFyZXQpCiAJCQlwYW5pYygibnVtYS5jOiBjYW5ub3QgYWxsb2NhdGUgJWx1IGJ5dGVzIG9uIG5vZGUgJWQiLAotCQkJICAgICAgc2l6ZSwgbmlkKTsKKwkJCSAgICAgIHNpemUsIG5ld19uaWQpOwogCi0JCXJldCA9IHZpcnRfdG9fYWJzKHJldCk7CisJCXJldCA9IF9fcGEocmV0KTsKIAogCQlkYmcoImFsbG9jX2Jvb3RtZW0gJWx4ICVseFxuIiwgcmV0LCBzaXplKTsKIAl9CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAodm9pZCAqKXJldDsKIH0KIAogdm9pZCBfX2luaXQgZG9faW5pdF9ib290bWVtKHZvaWQpCiB7CiAJaW50IG5pZDsKLQlpbnQgYWRkcl9jZWxscywgc2l6ZV9jZWxsczsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CiAJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBwcGM2NF9udW1hX25iID0gewogCQkubm90aWZpZXJfY2FsbCA9IGNwdV9udW1hX2NhbGxiYWNrLAogCQkucHJpb3JpdHkgPSAxIC8qIE11c3QgcnVuIGJlZm9yZSBzY2hlZCBkb21haW5zIG5vdGlmaWVyLiAqLwpAQCAtNTgxLDk5ICs1OTMsNjYgQEAKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnBwYzY0X251bWFfbmIpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGFkZHIsIGVuZF9wYWRkcjsKLQkJaW50IGk7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBwYWdlc19wcmVzZW50OwogCQl1bnNpZ25lZCBsb25nIGJvb3RtZW1fcGFkZHI7CiAJCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9wYWdlczsKIAotCQlzdGFydF9wYWRkciA9IGluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9zdGFydF9wZm4gKiBQQUdFX1NJWkU7Ci0JCWVuZF9wYWRkciA9IGluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9lbmRfcGZuICogUEFHRV9TSVpFOworCQlnZXRfcmVnaW9uKG5pZCwgJnN0YXJ0X3BmbiwgJmVuZF9wZm4sICZwYWdlc19wcmVzZW50KTsKIAogCQkvKiBBbGxvY2F0ZSB0aGUgbm9kZSBzdHJ1Y3R1cmUgbm9kZSBsb2NhbCBpZiBwb3NzaWJsZSAqLwotCQlOT0RFX0RBVEEobmlkKSA9IChzdHJ1Y3QgcGdsaXN0X2RhdGEgKiljYXJlZnVsX2FsbG9jYXRpb24obmlkLAorCQlOT0RFX0RBVEEobmlkKSA9IGNhcmVmdWxfYWxsb2NhdGlvbihuaWQsCiAJCQkJCXNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpLAotCQkJCQlTTVBfQ0FDSEVfQllURVMsIGVuZF9wYWRkcik7Ci0JCU5PREVfREFUQShuaWQpID0gYWJzX3RvX3ZpcnQoTk9ERV9EQVRBKG5pZCkpOworCQkJCQlTTVBfQ0FDSEVfQllURVMsIGVuZF9wZm4pOworCQlOT0RFX0RBVEEobmlkKSA9IF9fdmEoTk9ERV9EQVRBKG5pZCkpOwogCQltZW1zZXQoTk9ERV9EQVRBKG5pZCksIDAsIHNpemVvZihzdHJ1Y3QgcGdsaXN0X2RhdGEpKTsKIAogICAJCWRiZygibm9kZSAlZFxuIiwgbmlkKTsKIAkJZGJnKCJOT0RFX0RBVEEoKSA9ICVwXG4iLCBOT0RFX0RBVEEobmlkKSk7CiAKIAkJTk9ERV9EQVRBKG5pZCktPmJkYXRhID0gJnBsYXRfbm9kZV9iZGF0YVtuaWRdOwotCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4gPQotCQkJaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX3N0YXJ0X3BmbjsKLQkJTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9Ci0JCQllbmRfcGFkZHIgLSBzdGFydF9wYWRkcjsKKwkJTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOworCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKIAogCQlpZiAoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bhbm5lZF9wYWdlcyA9PSAwKQogICAJCQljb250aW51ZTsKIAotICAJCWRiZygic3RhcnRfcGFkZHIgPSAlbHhcbiIsIHN0YXJ0X3BhZGRyKTsKLSAgCQlkYmcoImVuZF9wYWRkciA9ICVseFxuIiwgZW5kX3BhZGRyKTsKKyAgCQlkYmcoInN0YXJ0X3BhZGRyID0gJWx4XG4iLCBzdGFydF9wZm4gPDwgUEFHRV9TSElGVCk7CisgIAkJZGJnKCJlbmRfcGFkZHIgPSAlbHhcbiIsIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CiAKLQkJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcygoZW5kX3BhZGRyIC0gc3RhcnRfcGFkZHIpID4+IFBBR0VfU0hJRlQpOworCQlib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKGVuZF9wZm4gLSBzdGFydF9wZm4pOworCQlib290bWVtX3BhZGRyID0gKHVuc2lnbmVkIGxvbmcpY2FyZWZ1bF9hbGxvY2F0aW9uKG5pZCwKKwkJCQkJYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZULAorCQkJCQlQQUdFX1NJWkUsIGVuZF9wZm4pOworCQltZW1zZXQoX192YShib290bWVtX3BhZGRyKSwgMCwgYm9vdG1hcF9wYWdlcyA8PCBQQUdFX1NISUZUKTsKIAotCQlib290bWVtX3BhZGRyID0gY2FyZWZ1bF9hbGxvY2F0aW9uKG5pZCwKLQkJCQlib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCi0JCQkJUEFHRV9TSVpFLCBlbmRfcGFkZHIpOwotCQltZW1zZXQoYWJzX3RvX3ZpcnQoYm9vdG1lbV9wYWRkciksIDAsCi0JCSAgICAgICBib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCQlkYmcoImJvb3RtYXBfcGFkZHIgPSAlbHhcbiIsIGJvb3RtZW1fcGFkZHIpOwogCiAJCWluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBib290bWVtX3BhZGRyID4+IFBBR0VfU0hJRlQsCi0JCQkJICBzdGFydF9wYWRkciA+PiBQQUdFX1NISUZULAotCQkJCSAgZW5kX3BhZGRyID4+IFBBR0VfU0hJRlQpOworCQkJCSAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAotCQkvKgotCQkgKiBXZSBuZWVkIHRvIGRvIGFub3RoZXIgc2NhbiBvZiBhbGwgbWVtb3J5IHNlY3Rpb25zIHRvCi0JCSAqIGFzc29jaWF0ZSBtZW1vcnkgd2l0aCB0aGUgY29ycmVjdCBub2RlLgotCQkgKi8KLQkJYWRkcl9jZWxscyA9IGdldF9tZW1fYWRkcl9jZWxscygpOwotCQlzaXplX2NlbGxzID0gZ2V0X21lbV9zaXplX2NlbGxzKCk7Ci0JCW1lbW9yeSA9IE5VTEw7Ci0JCXdoaWxlICgobWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobWVtb3J5LCAibWVtb3J5IikpICE9IE5VTEwpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0LCBtZW1fc2l6ZTsKLQkJCWludCBudW1hX2RvbWFpbiwgcmFuZ2VzOwotCQkJdW5zaWduZWQgaW50ICptZW1jZWxsX2J1ZjsKLQkJCXVuc2lnbmVkIGludCBsZW47CisJCS8qIEFkZCBmcmVlIHJlZ2lvbnMgb24gdGhpcyBub2RlICovCisJCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCi0JCQltZW1jZWxsX2J1ZiA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkobWVtb3J5LCAicmVnIiwgJmxlbik7Ci0JCQlpZiAoIW1lbWNlbGxfYnVmIHx8IGxlbiA8PSAwKQorCQkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCiAJCQkJY29udGludWU7CiAKLQkJCXJhbmdlcyA9IG1lbW9yeS0+bl9hZGRyczsJLyogcmFuZ2VzIGluIGNlbGwgKi8KLW5ld19yYW5nZToKLQkJCW1lbV9zdGFydCA9IHJlYWRfbl9jZWxscyhhZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJbWVtX3NpemUgPSByZWFkX25fY2VsbHMoc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJCWlmIChudW1hX2VuYWJsZWQpIHsKLQkJCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4obWVtb3J5KTsKLQkJCQlpZiAobnVtYV9kb21haW4gID49IE1BWF9OVU1OT0RFUykKLQkJCQkJbnVtYV9kb21haW4gPSAwOwotCQkJfSBlbHNlCi0JCQkJbnVtYV9kb21haW4gPSAgMDsKKwkJCXN0YXJ0ID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCQllbmQgPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAKLQkJCWlmIChudW1hX2RvbWFpbiAhPSBuaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCW1lbV9zaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChtZW1fc3RhcnQsIG1lbV9zaXplKTsKLSAgCQkJaWYgKG1lbV9zaXplKSB7Ci0gIAkJCQlkYmcoImZyZWVfYm9vdG1lbSAlbHggJWx4XG4iLCBtZW1fc3RhcnQsIG1lbV9zaXplKTsKLSAgCQkJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBtZW1fc3RhcnQsIG1lbV9zaXplKTsKLQkJCX0KLQotCQkJaWYgKC0tcmFuZ2VzKQkJLyogcHJvY2VzcyBhbGwgcmFuZ2VzIGluIGNlbGwgKi8KLQkJCQlnb3RvIG5ld19yYW5nZTsKKwkJCWRiZygiZnJlZV9ib290bWVtICVseCAlbHhcbiIsIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgIAkJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBzdGFydCwgZW5kIC0gc3RhcnQpOwogCQl9CiAKLQkJLyoKLQkJICogTWFyayByZXNlcnZlZCByZWdpb25zIG9uIHRoaXMgbm9kZQotCQkgKi8KKwkJLyogTWFyayByZXNlcnZlZCByZWdpb25zIG9uIHRoaXMgbm9kZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHBoeXNiYXNlID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5iYXNlOwogCQkJdW5zaWduZWQgbG9uZyBzaXplID0gbG1iLnJlc2VydmVkLnJlZ2lvbltpXS5zaXplOworCQkJdW5zaWduZWQgbG9uZyBzdGFydF9wYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCQkJdW5zaWduZWQgbG9uZyBlbmRfcGFkZHIgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CiAKLQkJCWlmIChwYV90b19uaWQocGh5c2Jhc2UpICE9IG5pZCAmJgotCQkJICAgIHBhX3RvX25pZChwaHlzYmFzZStzaXplLTEpICE9IG5pZCkKKwkJCWlmIChlYXJseV9wZm5fdG9fbmlkKHBoeXNiYXNlID4+IFBBR0VfU0hJRlQpICE9IG5pZCAmJgorCQkJICAgIGVhcmx5X3Bmbl90b19uaWQoKHBoeXNiYXNlK3NpemUtMSkgPj4gUEFHRV9TSElGVCkgIT0gbmlkKQogCQkJCWNvbnRpbnVlOwogCiAJCQlpZiAocGh5c2Jhc2UgPCBlbmRfcGFkZHIgJiYKQEAgLTY5Myw0NiArNjcyLDE5IEBACiAJCQkJCQkgICAgIHNpemUpOwogCQkJfQogCQl9Ci0JCS8qCi0JCSAqIFRoaXMgbG9vcCBtYXkgbG9vayBmYW1hbGlhciwgYnV0IHdlIGhhdmUgdG8gZG8gaXQgYWdhaW4KLQkJICogYWZ0ZXIgbWFya2luZyBvdXIgcmVzZXJ2ZWQgbWVtb3J5IHRvIG1hcmsgbWVtb3J5IHByZXNlbnQKLQkJICogZm9yIHNwYXJzZW1lbS4KLQkJICovCi0JCWFkZHJfY2VsbHMgPSBnZXRfbWVtX2FkZHJfY2VsbHMoKTsKLQkJc2l6ZV9jZWxscyA9IGdldF9tZW1fc2l6ZV9jZWxscygpOwotCQltZW1vcnkgPSBOVUxMOwotCQl3aGlsZSAoKG1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG1lbW9yeSwgIm1lbW9yeSIpKSAhPSBOVUxMKSB7Ci0JCQl1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwgbWVtX3NpemU7Ci0JCQlpbnQgbnVtYV9kb21haW4sIHJhbmdlczsKLQkJCXVuc2lnbmVkIGludCAqbWVtY2VsbF9idWY7Ci0JCQl1bnNpZ25lZCBpbnQgbGVuOwogCi0JCQltZW1jZWxsX2J1ZiA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkobWVtb3J5LCAicmVnIiwgJmxlbik7Ci0JCQlpZiAoIW1lbWNlbGxfYnVmIHx8IGxlbiA8PSAwKQorCQkvKiBBZGQgcmVnaW9ucyBpbnRvIHNwYXJzZW1lbSAqLworCQlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKworCQkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCiAJCQkJY29udGludWU7CiAKLQkJCXJhbmdlcyA9IG1lbW9yeS0+bl9hZGRyczsJLyogcmFuZ2VzIGluIGNlbGwgKi8KLW5ld19yYW5nZTI6Ci0JCQltZW1fc3RhcnQgPSByZWFkX25fY2VsbHMoYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJCW1lbV9zaXplID0gcmVhZF9uX2NlbGxzKHNpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCQlpZiAobnVtYV9lbmFibGVkKSB7Ci0JCQkJbnVtYV9kb21haW4gPSBvZl9ub2RlX251bWFfZG9tYWluKG1lbW9yeSk7Ci0JCQkJaWYgKG51bWFfZG9tYWluICA+PSBNQVhfTlVNTk9ERVMpCi0JCQkJCW51bWFfZG9tYWluID0gMDsKLQkJCX0gZWxzZQotCQkJCW51bWFfZG9tYWluID0gIDA7CisJCQlzdGFydCA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKwkJCWVuZCA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47CiAKLQkJCWlmIChudW1hX2RvbWFpbiAhPSBuaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCW1lbV9zaXplID0gbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdChtZW1fc3RhcnQsIG1lbV9zaXplKTsKLQkJCW1lbW9yeV9wcmVzZW50KG51bWFfZG9tYWluLCBtZW1fc3RhcnQgPj4gUEFHRV9TSElGVCwKLQkJCQkgICAgICAgKG1lbV9zdGFydCArIG1lbV9zaXplKSA+PiBQQUdFX1NISUZUKTsKLQotCQkJaWYgKC0tcmFuZ2VzKQkJLyogcHJvY2VzcyBhbGwgcmFuZ2VzIGluIGNlbGwgKi8KLQkJCQlnb3RvIG5ld19yYW5nZTI7CisJCQltZW1vcnlfcHJlc2VudChuaWQsIHN0YXJ0LCBlbmQpOwogCQl9Ci0KIAl9CiB9CiAKQEAgLTc0NiwyMSArNjk4LDE4IEBACiAJbWVtc2V0KHpob2xlc19zaXplLCAwLCBzaXplb2YoemhvbGVzX3NpemUpKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsKLQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGFnZXNfcHJlc2VudDsKIAotCQlzdGFydF9wZm4gPSBpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfc3RhcnRfcGZuOwotCQllbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX2VuZF9wZm47CisJCWdldF9yZWdpb24obmlkLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJnBhZ2VzX3ByZXNlbnQpOwogCiAJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKLQkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gem9uZXNfc2l6ZVtaT05FX0RNQV0gLQotCQkJaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX3ByZXNlbnRfcGFnZXM7CisJCXpob2xlc19zaXplW1pPTkVfRE1BXSA9IHpvbmVzX3NpemVbWk9ORV9ETUFdIC0gcGFnZXNfcHJlc2VudDsKIAogCQlkYmcoImZyZWVfYXJlYV9pbml0IG5vZGUgJWQgJWx4ICVseCAoaG9sZTogJWx4KVxuIiwgbmlkLAogCQkgICAgem9uZXNfc2l6ZVtaT05FX0RNQV0sIHN0YXJ0X3BmbiwgemhvbGVzX3NpemVbWk9ORV9ETUFdKTsKIAotCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5pZCwgTk9ERV9EQVRBKG5pZCksIHpvbmVzX3NpemUsCi0JCQkJCQkJc3RhcnRfcGZuLCB6aG9sZXNfc2l6ZSk7CisJCWZyZWVfYXJlYV9pbml0X25vZGUobmlkLCBOT0RFX0RBVEEobmlkKSwgem9uZXNfc2l6ZSwgc3RhcnRfcGZuLAorCQkJCSAgICB6aG9sZXNfc2l6ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwppbmRleCA5MDA4NDI0Li5jN2Y3YmI2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKQEAgLTEyMiw4ICsxMjIsMTEgQEAKIAkJICoKIAkJICovCiAJCWlmIChodGFiX2JvbHRfbWFwcGluZyhlYSwgZWEgKyBQQUdFX1NJWkUsIHBhLCBmbGFncywKLQkJCQkgICAgICBtbXVfdmlydHVhbF9wc2l6ZSkpCi0JCQlwYW5pYygiQ2FuJ3QgbWFwIGJvbHRlZCBJTyBtYXBwaW5nIik7CisJCQkJICAgICAgbW11X3ZpcnR1YWxfcHNpemUpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBkbyBib2x0ZWQgbWFwcGluZyBJTyAiCisJCQkgICAgICAgIm1lbW9yeSBhdCAlMDE2bHggIVxuIiwgcGEpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwppbmRleCBmYTMyNWRiLi5jZmJiNGUxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAKIHN0cnVjdCBzdGFiX2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGVzaWRfZGF0YTsKQEAgLTI1Niw3ICsyNTcsNyBAQAogCiAJCXBhY2FbY3B1XS5zdGFiX2FkZHIgPSBuZXdzdGFiOwogCQlwYWNhW2NwdV0uc3RhYl9yZWFsID0gdmlydF90b19hYnMobmV3c3RhYik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJTZWdtZW50IHRhYmxlIGZvciBDUFUgJWQgYXQgMHglbHggIgorCQlwcmludGsoS0VSTl9JTkZPICJTZWdtZW50IHRhYmxlIGZvciBDUFUgJWQgYXQgMHglbHggIgogCQkgICAgICAgInZpcnR1YWwsIDB4JWx4IGFic29sdXRlXG4iLAogCQkgICAgICAgY3B1LCBwYWNhW2NwdV0uc3RhYl9hZGRyLCBwYWNhW2NwdV0uc3RhYl9yZWFsKTsKIAl9CkBAIC0yNzAsMTAgKzI3MSwyOCBAQAogdm9pZCBzdGFiX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBzdGFiKQogewogCXVuc2lnbmVkIGxvbmcgdnNpZCA9IGdldF9rZXJuZWxfdnNpZChLRVJORUxCQVNFKTsKKwl1bnNpZ25lZCBsb25nIHN0YWJyZWFsOwogCiAJYXNtIHZvbGF0aWxlKCJpc3luYzsgc2xiaWE7IGlzeW5jIjo6OiJtZW1vcnkiKTsKIAltYWtlX3N0ZShzdGFiLCBHRVRfRVNJRChLRVJORUxCQVNFKSwgdnNpZCk7CiAKIAkvKiBPcmRlciB1cGRhdGUgKi8KIAlhc20gdm9sYXRpbGUoInN5bmMiOjo6Im1lbW9yeSIpOworCisJLyogU2V0IEFTUiAqLworCXN0YWJyZWFsID0gZ2V0X3BhY2EoKS0+c3RhYl9yZWFsIHwgMHgxdWw7CisKKyNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgeworCQlIdkNhbGwxKEh2Q2FsbEJhc2VTZXRBU1IsIHN0YWJyZWFsKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZiAvKiBDT05GSUdfUFBDX0lTRVJJRVMgKi8KKyNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKSB7CisJCXBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9BU1IsIHN0YWJyZWFsKTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCW10c3ByKFNQUk5fQVNSLCBzdGFicmVhbCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKaW5kZXggYzRlZTU0Ny4uYTM0MDFiNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCisrKyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwpAQCAtMTQsNyArMTQsNiBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL29wcm9maWxlX2ltcGwuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CkBAIC0yMzMsOCArMjMyLDcgQEAKIAltbWNyYSA9IG1mc3ByKFNQUk5fTU1DUkEpOwogCiAJLyogV2VyZSB3ZSBpbiB0aGUgaHlwZXJ2aXNvcj8gKi8KLQlpZiAoKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKSAmJgotCSAgICAobW1jcmEgJiBNTUNSQV9TSUhWKSkKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpICYmIChtbWNyYSAmIE1NQ1JBX1NJSFYpKQogCQkvKiBmdW5jdGlvbiBkZXNjcmlwdG9yIG1hZG5lc3MgKi8KIAkJcmV0dXJuICooKHVuc2lnbmVkIGxvbmcgKiloeXBlcnZpc29yX2J1Y2tldCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKaW5kZXggZWNkMzJkNS4uNDA5OWRkYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMKQEAgLTM2MSw3ICszNjEsOSBAQAogCXByaW50ayhLRVJOX0lORk8gIk9wZW5QSUMgYXQgJWx4XG4iLCBvcGFkZHIpOwogCiAJaXJxX2NvdW50ID0gTlJfSVJRUyAtIE5VTV9JU0FfSU5URVJSVVBUUyAtIDQ7IC8qIGxlYXZlIHJvb20gZm9yIElQSXMgKi8KLQlwcm9tX2dldF9pcnFfc2Vuc2VzKGluaXRfc2Vuc2VzLCBOVU1fODI1OV9JTlRFUlJVUFRTLCBOUl9JUlFTIC0gNCk7CisJcHJvbV9nZXRfaXJxX3NlbnNlcyhpbml0X3NlbnNlcywgTlVNX0lTQV9JTlRFUlJVUFRTLCBOUl9JUlFTIC0gNCk7CisJLyogaTgyNTkgY2FzY2FkZSBpcyBhbHdheXMgcG9zaXRpdmUgbGV2ZWwgKi8KKwlpbml0X3NlbnNlc1swXSA9IElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRTsKIAogCWlyYW5nZXMgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShucCwgImludGVycnVwdC1yYW5nZXMiLCAmbGVuKTsKIAlpZiAoaXJhbmdlcyA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCmluZGV4IGEwNjYwM2QuLjAxMDkwZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKQEAgLTEwMyw2ICsxMDMsOSBAQAogCQlzdHJ1Y3QgcHRfcmVncyAqcmVnc1Bhcm0pCiB7CiAJaW50IGlycTsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOworI2VuZGlmCiAKIAkrK1BjaV9JbnRlcnJ1cHRfQ291bnQ7CiAKQEAgLTExMCw3ICsxMTMsMjAgQEAKIAljYXNlIFhtUGNpTHBFdmVudF9TbG90SW50ZXJydXB0OgogCQlpcnEgPSBldmVudFBhcm0tPmh2THBFdmVudC54Q29ycmVsYXRpb25Ub2tlbjsKIAkJLyogRGlzcGF0Y2ggdGhlIGludGVycnVwdCBoYW5kbGVycyBmb3IgdGhpcyBpcnEgKi8KLQkJcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHJlZ3NQYXJtLCBpcnEpOworI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKKwkJLyogU3dpdGNoIHRvIHRoZSBpcnEgc3RhY2sgdG8gaGFuZGxlIHRoaXMgKi8KKwkJY3VydHAgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJCWlycXRwID0gaGFyZGlycV9jdHhbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwkJaWYgKGN1cnRwICE9IGlycXRwKSB7CisJCQlpcnF0cC0+dGFzayA9IGN1cnRwLT50YXNrOworCQkJaXJxdHAtPmZsYWdzID0gMDsKKwkJCWNhbGxfX19kb19JUlEoaXJxLCByZWdzUGFybSwgaXJxdHApOworCQkJaXJxdHAtPnRhc2sgPSBOVUxMOworCQkJaWYgKGlycXRwLT5mbGFncykKKwkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOworCQl9IGVsc2UKKyNlbmRpZgorCQkJX19kb19JUlEoaXJxLCByZWdzUGFybSk7CiAJCUh2Q2FsbFBjaV9lb2koZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5idXNOdW1iZXIsCiAJCQlldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LnN1YkJ1c051bWJlciwKIAkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuZGV2aWNlSWQpOwpAQCAtMzEwLDEwICszMjYsOCBAQAogfQogCiAvKgotICogTmVlZCB0byBkZWZpbmUgdGhpcyBzbyBwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIgd2lsbCBOT1QgY2FsbAotICogZW5hYmxlX0lSUSBhdCB0aGUgZW5kIG9mIGludGVycnVwdCBoYW5kbGluZy4gIEhvd2V2ZXIsIHRoaXMgZG9lcwotICogbm90aGluZyBiZWNhdXNlIHRoZXJlIGlzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24gcHJvdmlkZWQgdG8gZG8KLSAqIHRoZSBFT0kgSHZDYWxsLiAgVGhpcyBpcyBkb25lIGJ5IFhtUGNpTHBFdmVudC5jCisgKiBUaGlzIGRvZXMgbm90aGluZyBiZWNhdXNlIHRoZXJlIGlzIG5vdCBlbm91Z2ggaW5mb3JtYXRpb24KKyAqIHByb3ZpZGVkIHRvIGRvIHRoZSBFT0kgSHZDYWxsLiAgVGhpcyBpcyBkb25lIGJ5IFhtUGNpTHBFdmVudC5jCiAgKi8KIHN0YXRpYyB2b2lkIGlTZXJpZXNfZW5kX0lSUSh1bnNpZ25lZCBpbnQgaXJxKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21pc2MuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9taXNjLlMKaW5kZXggMDlmMTQ1Mi4uZGZlN2FhMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21pc2MuUworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KIAogCS50ZXh0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKaW5kZXggN2Y4ZjBjZC4uNmEyOWYzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTM5LDcgKzM5LDggQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KLQorI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgpAQCAtNzEsNyArNzIsNyBAQAogI2VuZGlmCiAKIC8qIEZ1bmN0aW9uIFByb3RvdHlwZXMgKi8KLXN0YXRpYyB2b2lkIGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKTsKIHN0YXRpYyB2b2lkIGlzZXJpZXNfc2hhcmVkX2lkbGUodm9pZCk7CiBzdGF0aWMgdm9pZCBpc2VyaWVzX2RlZGljYXRlZF9pZGxlKHZvaWQpOwogI2lmZGVmIENPTkZJR19QQ0kKQEAgLTg0LDcgKzg1LDYgQEAKIGludCBwaXJhbmhhX3NpbXVsYXRvcjsKIAogZXh0ZXJuIGludCByZF9zaXplOwkJLyogRGVmaW5lZCBpbiBkcml2ZXJzL2Jsb2NrL3JkLmMgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGVtYmVkZGVkX3N5c21hcF9zdGFydDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGVtYmVkZGVkX3N5c21hcF9lbmQ7CiAKQEAgLTQwMyw5ICs0MDMsMTEgQEAKICAqIGEgdGFibGUgdXNlZCB0byB0cmFuc2xhdGUgTGludXgncyBwaHlzaWNhbCBhZGRyZXNzZXMgdG8gdGhlc2UKICAqIGFic29sdXRlIGFkZHJlc3Nlcy4gIEFic29sdXRlIGFkZHJlc3NlcyBhcmUgbmVlZGVkIHdoZW4KICAqIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgaHlwZXJ2aXNvciAoZS5nLiB0byBidWlsZCBIUFQgZW50cmllcykKKyAqCisgKiBSZXR1cm5zIHRoZSBwaHlzaWNhbCBtZW1vcnkgc2l6ZQogICovCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAodm9pZCkKIHsKIAl1MzIgbG9hZEFyZWFGaXJzdENodW5rLCBsb2FkQXJlYUxhc3RDaHVuaywgbG9hZEFyZWFTaXplOwogCXUzMiBuZXh0UGh5c0NodW5rOwpAQCAtNTM4LDcgKzU0MCw3IEBACiAJICogd2hpY2ggc2hvdWxkIGJlIGVxdWFsIHRvCiAJICogICBuZXh0UGh5c0NodW5rCiAJICovCi0Jc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUgPSBjaHVua190b19hZGRyKG5leHRQaHlzQ2h1bmspOworCXJldHVybiBjaHVua190b19hZGRyKG5leHRQaHlzQ2h1bmspOwogfQogCiAvKgpAQCAtNTY0LDggKzU2Niw4IEBACiAJcHJpbnRrKCJNYXggcGh5c2ljYWwgcHJvY2Vzc29ycyA9ICVkXG4iLAogCQkJaXRWcGRBcmVhcy54U2xpY01heFBoeXNpY2FsUHJvY3MpOwogCi0Jc3lzdGVtY2ZnLT5wcm9jZXNzb3IgPSB4SW9IcmlQcm9jZXNzb3JWcGRbcHJvY0l4XS54UFZSOwotCXByaW50aygiUHJvY2Vzc29yIHZlcnNpb24gPSAleFxuIiwgc3lzdGVtY2ZnLT5wcm9jZXNzb3IpOworCV9zeXN0ZW1jZmctPnByb2Nlc3NvciA9IHhJb0hyaVByb2Nlc3NvclZwZFtwcm9jSXhdLnhQVlI7CisJcHJpbnRrKCJQcm9jZXNzb3IgdmVyc2lvbiA9ICV4XG4iLCBfc3lzdGVtY2ZnLT5wcm9jZXNzb3IpOwogfQogCiBzdGF0aWMgdm9pZCBpU2VyaWVzX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC03MDIsNyArNzA0LDYgQEAKIAogc3RhdGljIHZvaWQgaXNlcmllc19kZWRpY2F0ZWRfaWRsZSh2b2lkKQogewotCWxvbmcgb2xkdmFsOwogCXNldF90aHJlYWRfZmxhZyhUSUZfUE9MTElOR19OUkZMQUcpOwogCiAJd2hpbGUgKDEpIHsKQEAgLTkyOSw3ICs5MzAsNyBAQAogCWR0X2VuZF9ub2RlKGR0KTsKIH0KIAotdm9pZCBidWlsZF9mbGF0X2R0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0KQordm9pZCBidWlsZF9mbGF0X2R0KHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0LCB1bnNpZ25lZCBsb25nIHBoeXNfbWVtX3NpemUpCiB7CiAJdTY0IHRtcFsyXTsKIApAQCAtOTQ1LDcgKzk0Niw3IEBACiAJZHRfcHJvcF9zdHIoZHQsICJuYW1lIiwgIm1lbW9yeSIpOwogCWR0X3Byb3Bfc3RyKGR0LCAiZGV2aWNlX3R5cGUiLCAibWVtb3J5Iik7CiAJdG1wWzBdID0gMDsKLQl0bXBbMV0gPSBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZTsKKwl0bXBbMV0gPSBwaHlzX21lbV9zaXplOwogCWR0X3Byb3BfdTY0X2xpc3QoZHQsICJyZWciLCB0bXAsIDIpOwogCWR0X2VuZF9ub2RlKGR0KTsKIApAQCAtOTY1LDEzICs5NjYsMTUgQEAKIAogdm9pZCAqIF9faW5pdCBpU2VyaWVzX2Vhcmx5X3NldHVwKHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBwaHlzX21lbV9zaXplOworCiAJaVNlcmllc19maXh1cF9rbGltaXQoKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgd2hpY2ggdHJhbnNsYXRlIExpbnV4IHBoeXNpY2FsIGFkZHJlc3NlcyB0bwogCSAqIEFTLzQwMCBhYnNvbHV0ZSBhZGRyZXNzZXMKIAkgKi8KLQlidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAoKTsKKwlwaHlzX21lbV9zaXplID0gYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKCk7CiAKIAlpU2VyaWVzX2dldF9jbWRsaW5lKCk7CiAKQEAgLTk4MSw3ICs5ODQsNyBAQAogCS8qIFBhcnNlIGVhcmx5IHBhcmFtZXRlcnMsIGluIHBhcnRpY3VsYXIgbWVtPXggKi8KIAlwYXJzZV9lYXJseV9wYXJhbSgpOwogCi0JYnVpbGRfZmxhdF9kdCgmaXNlcmllc19kdCk7CisJYnVpbGRfZmxhdF9kdCgmaXNlcmllc19kdCwgcGh5c19tZW1fc2l6ZSk7CiAKIAlyZXR1cm4gKHZvaWQgKikgX19wYSgmaXNlcmllc19kdCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwppbmRleCAzNDBjMjFjLi44OTVhZWIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKQEAgLTM4MCw5ICszODAsNiBAQAogCWZvcl9lYWNoX3BjaV9kZXYoZGV2KQogCQlwY2lfcmVhZF9pcnFfbGluZShkZXYpOwogCi0JLyogRG8gdGhlIG1hcHBpbmcgb2YgdGhlIElPIHNwYWNlICovCi0JcGhic19yZW1hcF9pbygpOwotCiAJREJHKCIgPC0gbWFwbGVfcGNpYmlvc19maXh1cFxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDhmODE4ZDAuLmRmZDQxYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtOTE4LDkgKzkxOCw2IEBACiAJCQlQQ0lfRE4obnApLT5idXNubyA9IDB4ZjA7CiAJfQogCi0JLyogbWFwIGluIFBDSSBJL08gc3BhY2UgKi8KLQlwaGJzX3JlbWFwX2lvKCk7Ci0KIAkvKiBwbWFjX2NoZWNrX2h0X2xpbmsoKTsgKi8KIAogCS8qIFRlbGwgcGNpLmMgdG8gbm90IHVzZSB0aGUgY29tbW9uIHJlc291cmNlIGFsbG9jYXRpb24gbWVjaGFuaXNtICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwppbmRleCA4M2E0OWU4Li45MDA0MGM0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKQEAgLTc0LDYgKzc0LDkgQEAKICNkZWZpbmUgR0FUV0lDS19JUlFfUE9PTF9TSVpFICAgICAgICAxMAogc3RhdGljIHN0cnVjdCBpbnRlcnJ1cHRfaW5mbyBnYXR3aWNrX2ludF9wb29sW0dBVFdJQ0tfSVJRX1BPT0xfU0laRV07CiAKKyNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CisKIC8qCiAgKiBNYXJrIGFuIGlycSBhcyAibG9zdCIuICBUaGlzIGlzIG9ubHkgdXNlZCBvbiB0aGUgcG1hYwogICogc2luY2UgaXQgY2FuIGxvc2UgaW50ZXJydXB0cyAoc2VlIHBtYWNfc2V0X2lycV9tYXNrKS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGUxZjk0NDMuLjk1N2IwOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtMzA1LDkgKzMwNSwxOSBAQAogCXBzdXJnZV9zdGFydCA9IGlvcmVtYXAoUFNVUkdFX1NUQVJULCA0KTsKIAlwc3VyZ2VfcHJpX2ludHIgPSBpb3JlbWFwKFBTVVJHRV9QUklfSU5UUiwgNCk7CiAKLQkvKiB0aGlzIGlzIG5vdCBhY3R1YWxseSBzdHJpY3RseSBuZWNlc3NhcnkgLS0gcGF1bHVzLiAqLwotCWZvciAoaSA9IDE7IGkgPCBuY3B1czsgKytpKQotCQlzbXBfaHdfaW5kZXhbaV0gPSBpOworCS8qCisJICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBPRiBkb2Vzbid0IGtub3cgYWJvdXQgdGhlCisJICogc2Vjb25kYXJ5IGNwdShzKSwgYW5kIHRodXMgdGhlcmUgYXJlbid0IG5vZGVzIGluIHRoZQorCSAqIGRldmljZSB0cmVlIGZvciB0aGVtLCBhbmQgc21wX3NldHVwX2NwdV9tYXBzIGhhc24ndAorCSAqIHNldCB0aGVpciBiaXRzIGluIGNwdV9wb3NzaWJsZV9tYXAgYW5kIGNwdV9wcmVzZW50X21hcC4KKwkgKi8KKwlpZiAobmNwdXMgPiBOUl9DUFVTKQorCQluY3B1cyA9IE5SX0NQVVM7CisJZm9yIChpID0gMTsgaSA8IG5jcHVzIDsgKytpKSB7CisJCWNwdV9zZXQoaSwgY3B1X3ByZXNlbnRfbWFwKTsKKwkJY3B1X3NldChpLCBjcHVfcG9zc2libGVfbWFwKTsKKwkJc2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChpLCBpKTsKKwl9CiAKIAlpZiAocHBjX21kLnByb2dyZXNzKSBwcGNfbWQucHJvZ3Jlc3MoInNtcF9wc3VyZ2VfcHJvYmUgLSBkb25lIiwgMHgzNTIpOwogCkBAIC0zNDgsNiArMzU4LDcgQEAKIAlpbnQgdDsKIAogCXNldF9kZWModGJfdGlja3NfcGVyX2ppZmZ5KTsKKwkvKiBYWFggZml4bWUgKi8KIAlzZXRfdGIoMCwgMCk7CiAJbGFzdF9qaWZmeV9zdGFtcChjcHVfbnIpID0gMDsKIApAQCAtMzYzLDggKzM3NCw2IEBACiAKIAkvKiBub3cgaW50ZXJydXB0IHRoZSBzZWNvbmRhcnksIHN0YXJ0aW5nIGJvdGggVEJzICovCiAJcHN1cmdlX3NldF9pcGkoMSk7Ci0KLQlzbXBfdGJfc3luY2hyb25pemVkID0gMTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcHN1cmdlX2lycWFjdGlvbiA9IHsKQEAgLTYyNSw5ICs2MzQsOCBAQAogCWZvciAodCA9IDEwMDAwMDsgdCA+IDAgJiYgc2VjX3RiX3Jlc2V0OyAtLXQpCiAJCXVkZWxheSgxMCk7CiAJaWYgKHNlY190Yl9yZXNldCkKKwkJLyogWFhYIEJVR19PTiBoZXJlPyAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJUaW1lb3V0IHdhaXRpbmcgc3luYygyKSBvbiBzZWNvbmQgQ1BVXG4iKTsKLQllbHNlCi0JCXNtcF90Yl9zeW5jaHJvbml6ZWQgPSAxOwogCiAJLyogTm93LCByZXN0YXJ0IHRoZSB0aW1lYmFzZSBieSBsZWF2aW5nIHRoZSBHUElPIHRvIGFuIG9wZW4gY29sbGVjdG9yICovCiAgICAgICAgCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1dSSVRFX0dQSU8sIE5VTEwsIGNvcmU5OV90Yl9ncGlvLCAwKTsKQEAgLTgxMCwxOSArODE4LDkgQEAKIH0KIAogCi0vKiBDb3JlOTkgTWFjcyAoZHVhbCBHNHMgYW5kIEc1cykgKi8KLXN0cnVjdCBzbXBfb3BzX3QgY29yZTk5X3NtcF9vcHMgPSB7Ci0JLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKLQkucHJvYmUJCT0gc21wX2NvcmU5OV9wcm9iZSwKLQkua2lja19jcHUJPSBzbXBfY29yZTk5X2tpY2tfY3B1LAotCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKLQkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKLQkudGFrZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfdGFrZV90aW1lYmFzZSwKLX07Ci0KICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAKLWludCBfX2NwdV9kaXNhYmxlKHZvaWQpCitpbnQgc21wX2NvcmU5OV9jcHVfZGlzYWJsZSh2b2lkKQogewogCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIApAQCAtODQ2LDcgKzg0NCw3IEBACiAJbG93X2NwdV9kaWUoKTsKIH0KIAotdm9pZCBfX2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQgc21wX2NvcmU5OV9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJaW50IHRpbWVvdXQ7CiAKQEAgLTg1OCw4ICs4NTYsMjEgQEAKIAkJfQogCQltc2xlZXAoMSk7CiAJfQotCWNwdV9jYWxsaW5fbWFwW2NwdV0gPSAwOwogCWNwdV9kZWFkW2NwdV0gPSAwOwogfQogCiAjZW5kaWYKKworLyogQ29yZTk5IE1hY3MgKGR1YWwgRzRzIGFuZCBHNXMpICovCitzdHJ1Y3Qgc21wX29wc190IGNvcmU5OV9zbXBfb3BzID0geworCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCisJLnByb2JlCQk9IHNtcF9jb3JlOTlfcHJvYmUsCisJLmtpY2tfY3B1CT0gc21wX2NvcmU5OV9raWNrX2NwdSwKKwkuc2V0dXBfY3B1CT0gc21wX2NvcmU5OV9zZXR1cF9jcHUsCisJLmdpdmVfdGltZWJhc2UJPSBzbXBfY29yZTk5X2dpdmVfdGltZWJhc2UsCisJLnRha2VfdGltZWJhc2UJPSBzbXBfY29yZTk5X3Rha2VfdGltZWJhc2UsCisjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQorCS5jcHVfZGlzYWJsZQk9IHNtcF9jb3JlOTlfY3B1X2Rpc2FibGUsCisJLmNwdV9kaWUJPSBzbXBfY29yZTk5X2NwdV9kaWUsCisjZW5kaWYKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggYjk5MzhmZS4uZTdjYTViMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMywzICszLDUgQEAKIG9iai0kKENPTkZJR19TTVApCSs9IHNtcC5vCiBvYmotJChDT05GSUdfSUJNVklPKQkrPSB2aW8ubwogb2JqLSQoQ09ORklHX1hJQ1MpCSs9IHhpY3Mubworb2JqLSQoQ09ORklHX1NDQU5MT0cpCSs9IHNjYW5sb2cubworb2JqLSQoQ09ORklHX0VFSCkgICAgKz0gZWVoLm8gZWVoX2V2ZW50Lm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCnNpbWlsYXJpdHkgaW5kZXggNjMlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2VlaC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKaW5kZXggMDM1ZDFiMS4uNzlkZTIzMSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCkBAIC0xLDM5ICsxLDM3IEBACiAvKgogICogZWVoLmMKICAqIENvcHlyaWdodCAoQykgMjAwMSBEYXZlIEVuZ2VicmV0c2VuICYgVG9kZCBJbmdsZXR0IElCTSBDb3Jwb3JhdGlvbgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZWVoLmg+CisjaW5jbHVkZSA8YXNtL2VlaF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3J0YXMuaD4KLSNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CisjaW5jbHVkZSA8YXNtL3J0YXMuaD4KIAogI3VuZGVmIERFQlVHCiAKQEAgLTQ5LDggKzQ3LDggQEAKICAqICB3ZXJlICJlbXB0eSI6IGFsbCByZWFkcyByZXR1cm4gMHhmZidzIGFuZCBhbGwgd3JpdGVzIGFyZSBzaWxlbnRseQogICogIGlnbm9yZWQuICBFRUggc2xvdCBpc29sYXRpb24gZXZlbnRzIGNhbiBiZSB0cmlnZ2VyZWQgYnkgcGFyaXR5CiAgKiAgZXJyb3JzIG9uIHRoZSBhZGRyZXNzIG9yIGRhdGEgYnVzc2VzIChlLmcuIGR1cmluZyBwb3N0ZWQgd3JpdGVzKSwKLSAqICB3aGljaCBpbiB0dXJuIG1pZ2h0IGJlIGNhdXNlZCBieSBkdXN0LCB2aWJyYXRpb24sIGh1bWlkaXR5LAotICogIHJhZGlvYWN0aXZpdHkgb3IgcGxhaW4tb2xkIGZhaWxlZCBoYXJkd2FyZS4KKyAqICB3aGljaCBpbiB0dXJuIG1pZ2h0IGJlIGNhdXNlZCBieSBsb3cgdm9sdGFnZSBvbiB0aGUgYnVzLCBkdXN0LAorICogIHZpYnJhdGlvbiwgaHVtaWRpdHksIHJhZGlvYWN0aXZpdHkgb3IgcGxhaW4tb2xkIGZhaWxlZCBoYXJkd2FyZS4KICAqCiAgKiAgTm90ZSwgaG93ZXZlciwgdGhhdCBvbmUgb2YgdGhlIGxlYWRpbmcgY2F1c2VzIG9mIEVFSCBzbG90CiAgKiAgZnJlZXplIGV2ZW50cyBhcmUgYnVnZ3kgZGV2aWNlIGRyaXZlcnMsIGJ1Z2d5IGRldmljZSBtaWNyb2NvZGUsCkBAIC03MSwyNiArNjksMTUgQEAKICAqICBhbmQgc2VudCBvdXQgZm9yIHByb2Nlc3NpbmcuCiAgKi8KIAotLyoqIEJ1cyBVbml0IElEIG1hY3JvczsgZ2V0IGxvdyBhbmQgaGkgMzItYml0cyBvZiB0aGUgNjQtYml0IEJVSUQgKi8KLSNkZWZpbmUgQlVJRF9ISShidWlkKSAoKGJ1aWQpID4+IDMyKQotI2RlZmluZSBCVUlEX0xPKGJ1aWQpICgoYnVpZCkgJiAweGZmZmZmZmZmKQotCi0vKiBFRUggZXZlbnQgd29ya3F1ZXVlIHNldHVwLiAqLwotc3RhdGljIERFRklORV9TUElOTE9DSyhlZWhfZXZlbnRsaXN0X2xvY2spOwotTElTVF9IRUFEKGVlaF9ldmVudGxpc3QpOwotc3RhdGljIHZvaWQgZWVoX2V2ZW50X2hhbmRsZXIodm9pZCAqKTsKLURFQ0xBUkVfV09SSyhlZWhfZXZlbnRfd3EsIGVlaF9ldmVudF9oYW5kbGVyLCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayAqZWVoX25vdGlmaWVyX2NoYWluOwotCi0vKgotICogSWYgYSBkZXZpY2UgZHJpdmVyIGtlZXBzIHJlYWRpbmcgYW4gTU1JTyByZWdpc3RlciBpbiBhbiBpbnRlcnJ1cHQKKy8qIElmIGEgZGV2aWNlIGRyaXZlciBrZWVwcyByZWFkaW5nIGFuIE1NSU8gcmVnaXN0ZXIgaW4gYW4gaW50ZXJydXB0CiAgKiBoYW5kbGVyIGFmdGVyIGEgc2xvdCBpc29sYXRpb24gZXZlbnQgaGFzIG9jY3VycmVkLCB3ZSBhc3N1bWUgaXQKICAqIGlzIGJyb2tlbiBhbmQgcGFuaWMuICBUaGlzIHNldHMgdGhlIHRocmVzaG9sZCBmb3IgaG93IG1hbnkgcmVhZAogICogYXR0ZW1wdHMgd2UgYWxsb3cgYmVmb3JlIHBhbmlja2luZy4KICAqLwotI2RlZmluZSBFRUhfTUFYX0ZBSUxTCTEwMDAKLXN0YXRpYyBhdG9taWNfdCBlZWhfZmFpbF9jb3VudDsKKyNkZWZpbmUgRUVIX01BWF9GQUlMUwkxMDAwMDAKKworLyogTWlzYyBmb3J3YXJkIGRlY2xhcmFpb25zICovCitzdGF0aWMgdm9pZCBlZWhfc2F2ZV9iYXJzKHN0cnVjdCBwY2lfZGV2ICogcGRldiwgc3RydWN0IHBjaV9kbiAqcGRuKTsKIAogLyogUlRBUyB0b2tlbnMgKi8KIHN0YXRpYyBpbnQgaWJtX3NldF9lZWhfb3B0aW9uOwpAQCAtMTAxLDEyICs4OCwxOSBAQAogCiBzdGF0aWMgaW50IGVlaF9zdWJzeXN0ZW1fZW5hYmxlZDsKIAorLyogTG9jayB0byBhdm9pZCByYWNlcyBkdWUgdG8gbXVsdGlwbGUgcmVwb3J0cyBvZiBhbiBlcnJvciAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhjb25maXJtX2Vycm9yX2xvY2spOworCiAvKiBCdWZmZXIgZm9yIHJlcG9ydGluZyBzbG90LWVycm9yLWRldGFpbCBydGFzIGNhbGxzICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBzbG90X2VycmJ1ZltSVEFTX0VSUk9SX0xPR19NQVhdOwogc3RhdGljIERFRklORV9TUElOTE9DSyhzbG90X2VycmJ1Zl9sb2NrKTsKIHN0YXRpYyBpbnQgZWVoX2Vycm9yX2J1Zl9zaXplOwogCiAvKiBTeXN0ZW0gbW9uaXRvcmluZyBzdGF0aXN0aWNzICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbm9fZGV2aWNlKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBub19kbik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbm9fY2ZnX2FkZHIpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGlnbm9yZWRfY2hlY2spOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHRvdGFsX21taW9fZmZzKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBmYWxzZV9wb3NpdGl2ZXMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGlnbm9yZWRfZmFpbHVyZXMpOwpAQCAtMjI0LDkgKzIxOCw5IEBACiAJd2hpbGUgKCpwKSB7CiAJCXBhcmVudCA9ICpwOwogCQlwaWFyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcGNpX2lvX2FkZHJfcmFuZ2UsIHJiX25vZGUpOwotCQlpZiAoYWxvIDwgcGlhci0+YWRkcl9sbykgeworCQlpZiAoYWhpIDwgcGlhci0+YWRkcl9sbykgewogCQkJcCA9ICZwYXJlbnQtPnJiX2xlZnQ7Ci0JCX0gZWxzZSBpZiAoYWhpID4gcGlhci0+YWRkcl9oaSkgeworCQl9IGVsc2UgaWYgKGFsbyA+IHBpYXItPmFkZHJfaGkpIHsKIAkJCXAgPSAmcGFyZW50LT5yYl9yaWdodDsKIAkJfSBlbHNlIHsKIAkJCWlmIChkZXYgIT0gcGlhci0+cGNpZGV2IHx8CkBAIC0yNDUsNiArMjM5LDExIEBACiAJcGlhci0+cGNpZGV2ID0gZGV2OwogCXBpYXItPmZsYWdzID0gZmxhZ3M7CiAKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJQSUFSOiBpbnNlcnQgcmFuZ2U9WyVseDolbHhdIGRldj0lc1xuIiwKKwkgICAgICAgICAgICAgICAgICBhbG8sIGFoaSwgcGNpX25hbWUgKGRldikpOworI2VuZGlmCisKIAlyYl9saW5rX25vZGUoJnBpYXItPnJiX25vZGUsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKCZwaWFyLT5yYl9ub2RlLCAmcGNpX2lvX2FkZHJfY2FjaGVfcm9vdC5yYl9yb290KTsKIApAQCAtMjYwLDE4ICsyNTksMTcgQEAKIAogCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAJaWYgKCFkbikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IG5vIHBjaSBkbiBmb3VuZCBmb3IgZGV2PSVzXG4iLAotCQkJcGNpX25hbWUoZGV2KSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogbm8gcGNpIGRuIGZvdW5kIGZvciBkZXY9JXNcbiIsIHBjaV9uYW1lKGRldikpOwogCQlyZXR1cm47CiAJfQogCiAJLyogU2tpcCBhbnkgZGV2aWNlcyBmb3Igd2hpY2ggRUVIIGlzIG5vdCBlbmFibGVkLiAqLwotCXBkbiA9IGRuLT5kYXRhOworCXBkbiA9IFBDSV9ETihkbik7CiAJaWYgKCEocGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkgfHwKIAkgICAgcGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX05PQ0hFQ0spIHsKICNpZmRlZiBERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IHNraXAgYnVpbGRpbmcgYWRkcmVzcyBjYWNoZSBmb3I9JXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYpKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBza2lwIGJ1aWxkaW5nIGFkZHJlc3MgY2FjaGUgZm9yPSVzIC0gJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShkZXYpLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CiAjZW5kaWYKIAkJcmV0dXJuOwogCX0KQEAgLTMwNyw3ICszMDUsNyBAQAogICogd2UgbWFpbnRhaW4gYSBjYWNoZSBvZiBkZXZpY2VzIHRoYXQgY2FuIGJlIHF1aWNrbHkgc2VhcmNoZWQuCiAgKiBUaGlzIHJvdXRpbmUgYWRkcyBhIGRldmljZSB0byB0aGF0IGNhY2hlLgogICovCi12b2lkIHBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNTAsNyArMzQ4LDcgQEAKICAqIHRoZSB0cmVlIG11bHRpcGxlIHRpbWVzIChvbmNlIHBlciByZXNvdXJjZSkuCiAgKiBCdXQgc28gd2hhdDsgZGV2aWNlIHJlbW92YWwgZG9lc24ndCBuZWVkIHRvIGJlIHRoYXQgZmFzdC4KICAqLwotdm9pZCBwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMzcwLDggKzM2OCwxMiBAQAogICovCiB2b2lkIF9faW5pdCBwY2lfYWRkcl9jYWNoZV9idWlsZCh2b2lkKQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAKKwlpZiAoIWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCkKKwkJcmV0dXJuOworCiAJc3Bpbl9sb2NrX2luaXQoJnBjaV9pb19hZGRyX2NhY2hlX3Jvb3QucGlhcl9sb2NrKTsKIAogCXdoaWxlICgoZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZGV2KSkgIT0gTlVMTCkgewpAQCAtMzgwLDYgKzM4MiwxMCBAQAogCQkJY29udGludWU7CiAJCX0KIAkJcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShkZXYpOworCisJCS8qIFNhdmUgdGhlIEJBUidzOyBmaXJtd2FyZSBkb2Vzbid0IHJlc3RvcmUgdGhlc2UgYWZ0ZXIgRUVIIHJlc2V0ICovCisJCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJCWVlaF9zYXZlX2JhcnMoZGV2LCBQQ0lfRE4oZG4pKTsKIAl9CiAKICNpZmRlZiBERUJVRwpAQCAtMzkxLDIyICszOTcsMjYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogQWJvdmUgbGllcyB0aGUgUENJIEFkZHJlc3MgQ2FjaGUuIEJlbG93IGxpZXMgdGhlIEVFSCBldmVudCBpbmZyYXN0cnVjdHVyZSAqLwogCi0vKioKLSAqIGVlaF9yZWdpc3Rlcl9ub3RpZmllciAtIFJlZ2lzdGVyIHRvIGZpbmQgb3V0IGFib3V0IEVFSCBldmVudHMuCi0gKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIGNhbGxiYWNrIG9uIGV2ZW50cwotICovCi1pbnQgZWVoX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit2b2lkIGVlaF9zbG90X2Vycm9yX2RldGFpbCAoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgc2V2ZXJpdHkpCiB7Ci0JcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZlZWhfbm90aWZpZXJfY2hhaW4sIG5iKTsKLX0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKIAotLyoqCi0gKiBlZWhfdW5yZWdpc3Rlcl9ub3RpZmllciAtIFVucmVnaXN0ZXIgdG8gYW4gRUVIIGV2ZW50IG5vdGlmaWVyLgotICogQG5iOiBub3RpZmllciBibG9jayB0byBjYWxsYmFjayBvbiBldmVudHMKLSAqLwotaW50IGVlaF91bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCi17Ci0JcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmVlaF9ub3RpZmllcl9jaGFpbiwgbmIpOworCS8qIExvZyB0aGUgZXJyb3Igd2l0aCB0aGUgcnRhcyBsb2dnZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvdF9lcnJidWZfbG9jaywgZmxhZ3MpOworCW1lbXNldChzbG90X2VycmJ1ZiwgMCwgZWVoX2Vycm9yX2J1Zl9zaXplKTsKKworCXJjID0gcnRhc19jYWxsKGlibV9zbG90X2Vycm9yX2RldGFpbCwKKwkgICAgICAgICAgICAgICA4LCAxLCBOVUxMLCBwZG4tPmVlaF9jb25maWdfYWRkciwKKwkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKKwkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICB2aXJ0X3RvX3BoeXMoc2xvdF9lcnJidWYpLAorCSAgICAgICAgICAgICAgIGVlaF9lcnJvcl9idWZfc2l6ZSwKKwkgICAgICAgICAgICAgICBzZXZlcml0eSk7CisKKwlpZiAocmMgPT0gMCkKKwkJbG9nX2Vycm9yKHNsb3RfZXJyYnVmLCBFUlJfVFlQRV9SVEFTX0xPRywgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvdF9lcnJidWZfbG9jaywgZmxhZ3MpOwogfQogCiAvKioKQEAgLTQxNCwxNiArNDI0LDE2IEBACiAgKiBAZG46IGRldmljZSBub2RlIHRvIHJlYWQKICAqIEByZXRzOiBhcnJheSB0byByZXR1cm4gcmVzdWx0cyBpbgogICovCi1zdGF0aWMgaW50IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgcmV0c1tdKQorc3RhdGljIGludCByZWFkX3Nsb3RfcmVzZXRfc3RhdGUoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgcmV0c1tdKQogewogCWludCB0b2tlbiwgb3V0cHV0czsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBkbi0+ZGF0YTsKIAogCWlmIChpYm1fcmVhZF9zbG90X3Jlc2V0X3N0YXRlMiAhPSBSVEFTX1VOS05PV05fU0VSVklDRSkgewogCQl0b2tlbiA9IGlibV9yZWFkX3Nsb3RfcmVzZXRfc3RhdGUyOwogCQlvdXRwdXRzID0gNDsKIAl9IGVsc2UgewogCQl0b2tlbiA9IGlibV9yZWFkX3Nsb3RfcmVzZXRfc3RhdGU7CisJCXJldHNbMl0gPSAwOyAvKiBmYWtlIFBFIFVuYXZhaWxhYmxlIGluZm8gKi8KIAkJb3V0cHV0cyA9IDM7CiAJfQogCkBAIC00MzIsNzUgKzQ0Miw4IEBACiB9CiAKIC8qKgotICogZWVoX3BhbmljIC0gY2FsbCBwYW5pYygpIGZvciBhbiBlZWggZXZlbnQgdGhhdCBjYW5ub3QgYmUgaGFuZGxlZC4KLSAqIFRoZSBwaGlsb3NvcGh5IG9mIHRoaXMgcm91dGluZSBpcyB0aGF0IGl0IGlzIGJldHRlciB0byBwYW5pYyBhbmQKLSAqIGhhbHQgdGhlIE9TIHRoYW4gaXQgaXMgdG8gcmlzayBwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gYnkKLSAqIG9ibGl2aW91cyBkZXZpY2UgZHJpdmVycyB0aGF0IGRvbid0IGtub3cgYmV0dGVyLgotICoKLSAqIEBkZXYgcGNpIGRldmljZSB0aGF0IGhhZCBhbiBlZWggZXZlbnQKLSAqIEByZXNldF9zdGF0ZSBjdXJyZW50IHJlc2V0IHN0YXRlIG9mIHRoZSBkZXZpY2Ugc2xvdAotICovCi1zdGF0aWMgdm9pZCBlZWhfcGFuaWMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlc2V0X3N0YXRlKQotewotCS8qCi0JICogWFhYIFdlIHNob3VsZCBjcmVhdGUgYSBzZXBhcmF0ZSBzeXNjdGwgZm9yIHRoaXMuCi0JICoKLQkgKiBTaW5jZSB0aGUgcGFuaWNfb25fb29wcyBzeXNjdGwgaXMgdXNlZCB0byBoYWx0IHRoZSBzeXN0ZW0KLQkgKiBpbiBsaWdodCBvZiBwb3RlbnRpYWwgY29ycnVwdGlvbiwgd2UgY2FuIHVzZSBpdCBoZXJlLgotCSAqLwotCWlmIChwYW5pY19vbl9vb3BzKQotCQlwYW5pYygiRUVIOiBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6JXNcbiIsIHJlc2V0X3N0YXRlLAotCQkgICAgICBwY2lfbmFtZShkZXYpKTsKLQllbHNlIHsKLQkJX19nZXRfY3B1X3ZhcihpZ25vcmVkX2ZhaWx1cmVzKSsrOwotCQlwcmludGsoS0VSTl9JTkZPICJFRUg6IElnbm9yZWQgTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLAotCQkgICAgICAgcmVzZXRfc3RhdGUsIHBjaV9uYW1lKGRldikpOwotCX0KLX0KLQotLyoqCi0gKiBlZWhfZXZlbnRfaGFuZGxlciAtIGRpc3BhdGNoIEVFSCBldmVudHMuICBUaGUgZGV0ZWN0aW9uIG9mIGEgZnJvemVuCi0gKiBzbG90IGNhbiBvY2N1ciBpbnNpZGUgYW4gaW50ZXJydXB0LCB3aGVyZSBpdCBjYW4gYmUgaGFyZCB0byBkbwotICogYW55dGhpbmcgYWJvdXQgaXQuICBUaGUgZ29hbCBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gcHVsbCB0aGVzZQotICogZGV0ZWN0aW9uIGV2ZW50cyBvdXQgb2YgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQKLSAqIHJlLWRpc3BhdGNoIHRoZW0gZm9yIHByb2Nlc3NpbmcgYXQgYSBsYXRlciB0aW1lIGluIGEgbm9ybWFsIGNvbnRleHQuCi0gKgotICogQGR1bW15IC0gdW51c2VkCi0gKi8KLXN0YXRpYyB2b2lkIGVlaF9ldmVudF9oYW5kbGVyKHZvaWQgKmR1bW15KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGVlaF9ldmVudAkqZXZlbnQ7Ci0KLQl3aGlsZSAoMSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JCWV2ZW50ID0gTlVMTDsKLQkJaWYgKCFsaXN0X2VtcHR5KCZlZWhfZXZlbnRsaXN0KSkgewotCQkJZXZlbnQgPSBsaXN0X2VudHJ5KGVlaF9ldmVudGxpc3QubmV4dCwgc3RydWN0IGVlaF9ldmVudCwgbGlzdCk7Ci0JCQlsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOwotCQlpZiAoZXZlbnQgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCXByaW50ayhLRVJOX0lORk8gIkVFSDogTU1JTyBmYWlsdXJlICglZCksIG5vdGlmaXlpbmcgZGV2aWNlICIKLQkJICAgICAgICIlc1xuIiwgZXZlbnQtPnJlc2V0X3N0YXRlLAotCQkgICAgICAgcGNpX25hbWUoZXZlbnQtPmRldikpOwotCi0JCWF0b21pY19zZXQoJmVlaF9mYWlsX2NvdW50LCAwKTsKLQkJbm90aWZpZXJfY2FsbF9jaGFpbiAoJmVlaF9ub3RpZmllcl9jaGFpbiwKLQkJCQkgICAgIEVFSF9OT1RJRllfRlJFRVpFLCBldmVudCk7Ci0KLQkJX19nZXRfY3B1X3ZhcihzbG90X3Jlc2V0cykrKzsKLQotCQlwY2lfZGV2X3B1dChldmVudC0+ZGV2KTsKLQkJa2ZyZWUoZXZlbnQpOwotCX0KLX0KLQotLyoqCiAgKiBlZWhfdG9rZW5fdG9fcGh5cyAtIGNvbnZlcnQgRUVIIGFkZHJlc3MgdG9rZW4gdG8gcGh5cyBhZGRyZXNzCi0gKiBAdG9rZW4gaS9vIHRva2VuLCBzaG91bGQgYmUgYWRkcmVzcyBpbiB0aGUgZm9ybSAweEUuLi4uCisgKiBAdG9rZW4gaS9vIHRva2VuLCBzaG91bGQgYmUgYWRkcmVzcyBpbiB0aGUgZm9ybSAweEEuLi4uCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlZWhfdG9rZW5fdG9fcGh5cyh1bnNpZ25lZCBsb25nIHRva2VuKQogewpAQCAtNTE1LDYgKzQ1OCw3MCBAQAogCXJldHVybiBwYSB8ICh0b2tlbiAmIChQQUdFX1NJWkUtMSkpOwogfQogCisvKiogCisgKiBSZXR1cm4gdGhlICJwYXJ0aXRpb25hYmxlIGVuZHBvaW50IiAocGUpIHVuZGVyIHdoaWNoIHRoaXMgZGV2aWNlIGxpZXMKKyAqLworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIGZpbmRfZGV2aWNlX3BlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJd2hpbGUgKChkbi0+cGFyZW50KSAmJiBQQ0lfRE4oZG4tPnBhcmVudCkgJiYKKwkgICAgICAoUENJX0ROKGRuLT5wYXJlbnQpLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkpIHsKKwkJZG4gPSBkbi0+cGFyZW50OworCX0KKwlyZXR1cm4gZG47Cit9CisKKy8qKiBNYXJrIGFsbCBkZXZpY2VzIHRoYXQgYXJlIHBlZXJzIG9mIHRoaXMgZGV2aWNlIGFzIGZhaWxlZC4KKyAqICBNYXJrIHRoZSBkZXZpY2UgZHJpdmVyIHRvbywgc28gdGhhdCBpdCBjYW4gc2VlIHRoZSBmYWlsdXJlCisgKiAgaW1tZWRpYXRlbHk7IHRoaXMgaXMgY3JpdGljYWwsIHNpbmNlIHNvbWUgZHJpdmVycyBwb2xsCisgKiAgc3RhdHVzIHJlZ2lzdGVycyBpbiBpbnRlcnJ1cHRzIC4uLiBJZiBhIGRyaXZlciBpcyBwb2xsaW5nLAorICogIGFuZCB0aGUgc2xvdCBpcyBmcm96ZW4sIHRoZW4gdGhlIGRyaXZlciBjYW4gZGVhZGxvY2sgaW4KKyAqICBhbiBpbnRlcnJ1cHQgY29udGV4dCwgd2hpY2ggaXMgYmFkLgorICovCisKK3N0YXRpYyB2b2lkIF9fZWVoX21hcmtfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKK3sKKwl3aGlsZSAoZG4pIHsKKwkJaWYgKFBDSV9ETihkbikpIHsKKwkJCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IG1vZGVfZmxhZzsKKworCQkJaWYgKGRuLT5jaGlsZCkKKwkJCQlfX2VlaF9tYXJrX3Nsb3QgKGRuLT5jaGlsZCwgbW9kZV9mbGFnKTsKKwkJfQorCQlkbiA9IGRuLT5zaWJsaW5nOworCX0KK30KKwordm9pZCBlZWhfbWFya19zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQoreworCWRuID0gZmluZF9kZXZpY2VfcGUgKGRuKTsKKwlQQ0lfRE4oZG4pLT5lZWhfbW9kZSB8PSBtb2RlX2ZsYWc7CisJX19lZWhfbWFya19zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZWVoX2NsZWFyX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJd2hpbGUgKGRuKSB7CisJCWlmIChQQ0lfRE4oZG4pKSB7CisJCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+bW9kZV9mbGFnOworCQkJUENJX0ROKGRuKS0+ZWVoX2NoZWNrX2NvdW50ID0gMDsKKwkJCWlmIChkbi0+Y2hpbGQpCisJCQkJX19lZWhfY2xlYXJfc2xvdCAoZG4tPmNoaWxkLCBtb2RlX2ZsYWcpOworCQl9CisJCWRuID0gZG4tPnNpYmxpbmc7CisJfQorfQorCit2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCWRuID0gZmluZF9kZXZpY2VfcGUgKGRuKTsKKwlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+bW9kZV9mbGFnOworCVBDSV9ETihkbiktPmVlaF9jaGVja19jb3VudCA9IDA7CisJX19lZWhfY2xlYXJfc2xvdCAoZG4tPmNoaWxkLCBtb2RlX2ZsYWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworfQorCiAvKioKICAqIGVlaF9kbl9jaGVja19mYWlsdXJlIC0gY2hlY2sgaWYgYWxsIDEncyBkYXRhIGlzIGR1ZSB0byBFRUggc2xvdCBmcmVlemUKICAqIEBkbiBkZXZpY2Ugbm9kZQpAQCAtNTI2LDcgKzUzMyw3IEBACiAgKiB3aWxsIHF1ZXJ5IGZpcm13YXJlIGZvciB0aGUgRUVIIHN0YXR1cy4KICAqCiAgKiBSZXR1cm5zIDAgaWYgdGhlcmUgaGFzIG5vdCBiZWVuIGFuIEVFSCBlcnJvcjsgb3RoZXJ3aXNlIHJldHVybnMKLSAqIGEgbm9uLXplcm8gdmFsdWUgYW5kIHF1ZXVlcyB1cCBhIHNvbHQgaXNvbGF0aW9uIGV2ZW50IG5vdGlmaWNhdGlvbi4KKyAqIGEgbm9uLXplcm8gdmFsdWUgYW5kIHF1ZXVlcyB1cCBhIHNsb3QgaXNvbGF0aW9uIGV2ZW50IG5vdGlmaWNhdGlvbi4KICAqCiAgKiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyByb3V0aW5lIGluIGFuIGludGVycnVwdCBjb250ZXh0LgogICovCkBAIC01MzUsNDIgKzU0Miw1OSBAQAogCWludCByZXQ7CiAJaW50IHJldHNbM107CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmMsIHJlc2V0X3N0YXRlOwotCXN0cnVjdCBlZWhfZXZlbnQgICpldmVudDsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CisJaW50IHJjID0gMDsKIAogCV9fZ2V0X2NwdV92YXIodG90YWxfbW1pb19mZnMpKys7CiAKIAlpZiAoIWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWRuKQorCWlmICghZG4pIHsKKwkJX19nZXRfY3B1X3Zhcihub19kbikrKzsKIAkJcmV0dXJuIDA7Ci0JcGRuID0gZG4tPmRhdGE7CisJfQorCXBkbiA9IFBDSV9ETihkbik7CiAKIAkvKiBBY2Nlc3MgdG8gSU8gQkFScyBtaWdodCBnZXQgdGhpcyBmYXIgYW5kIHN0aWxsIG5vdCB3YW50IGNoZWNraW5nLiAqLwotCWlmICghcGRuLT5lZWhfY2FwYWJsZSB8fCAhKHBkbi0+ZWVoX21vZGUgJiBFRUhfTU9ERV9TVVBQT1JURUQpIHx8CisJaWYgKCEocGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkgfHwKIAkgICAgcGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX05PQ0hFQ0spIHsKKwkJX19nZXRfY3B1X3ZhcihpZ25vcmVkX2NoZWNrKSsrOworI2lmZGVmIERFQlVHCisJCXByaW50ayAoIkVFSDppZ25vcmVkIGNoZWNrICgleCkgZm9yICVzICVzXG4iLCAKKwkJICAgICAgICBwZG4tPmVlaF9tb2RlLCBwY2lfbmFtZSAoZGV2KSwgZG4tPmZ1bGxfbmFtZSk7CisjZW5kaWYKIAkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKCFwZG4tPmVlaF9jb25maWdfYWRkcikgeworCQlfX2dldF9jcHVfdmFyKG5vX2NmZ19hZGRyKSsrOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKgotCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBhIHBlbmRpbmcgaXNvbGF0aW9uIGV2ZW50IGZvciB0aGlzCi0JICogc2xvdCwgd2Uga25vdyBpdCdzIGJhZCBhbHJlYWR5LCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrLi4uCisJLyogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcGVuZGluZyBpc29sYXRpb24gZXZlbnQgZm9yIHRoaXMKKwkgKiBzbG90LCB3ZSBrbm93IGl0J3MgYmFkIGFscmVhZHksIHdlIGRvbid0IG5lZWQgdG8gY2hlY2suCisJICogRG8gdGhpcyBjaGVja2luZyB1bmRlciBhIGxvY2s7IGFzIG11bHRpcGxlIFBDSSBkZXZpY2VzCisJICogaW4gb25lIHNsb3QgbWlnaHQgcmVwb3J0IGVycm9ycyBzaW11bHRhbmVvdXNseSwgYW5kIHdlCisJICogb25seSB3YW50IG9uZSBlcnJvciByZWNvdmVyeSByb3V0aW5lIHJ1bm5pbmcuCiAJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJjID0gMTsKIAlpZiAocGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX0lTT0xBVEVEKSB7Ci0JCWF0b21pY19pbmMoJmVlaF9mYWlsX2NvdW50KTsKLQkJaWYgKGF0b21pY19yZWFkKCZlZWhfZmFpbF9jb3VudCkgPj0gRUVIX01BWF9GQUlMUykgeworCQlwZG4tPmVlaF9jaGVja19jb3VudCArKzsKKwkJaWYgKHBkbi0+ZWVoX2NoZWNrX2NvdW50ID49IEVFSF9NQVhfRkFJTFMpIHsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogRGV2aWNlIGRyaXZlciBpZ25vcmVkICVkIGJhZCByZWFkcywgcGFuaWNpbmdcbiIsCisJCQkgICAgICAgIHBkbi0+ZWVoX2NoZWNrX2NvdW50KTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJCQogCQkJLyogcmUtcmVhZCB0aGUgc2xvdCByZXNldCBzdGF0ZSAqLwotCQkJaWYgKHJlYWRfc2xvdF9yZXNldF9zdGF0ZShkbiwgcmV0cykgIT0gMCkKKwkJCWlmIChyZWFkX3Nsb3RfcmVzZXRfc3RhdGUocGRuLCByZXRzKSAhPSAwKQogCQkJCXJldHNbMF0gPSAtMTsJLyogcmVzZXQgc3RhdGUgdW5rbm93biAqLwotCQkJZWVoX3BhbmljKGRldiwgcmV0c1swXSk7CisKKwkJCS8qIElmIHdlIGFyZSBoZXJlLCB0aGVuIHdlIGhpdCBhbiBpbmZpbml0ZSBsb29wLiBTdG9wLiAqLworCQkJcGFuaWMoIkVFSDogTU1JTyBoYWx0ICglZCkgb24gZGV2aWNlOiVzXG4iLCByZXRzWzBdLCBwY2lfbmFtZShkZXYpKTsKIAkJfQotCQlyZXR1cm4gMDsKKwkJZ290byBkbl91bmxvY2s7CiAJfQogCiAJLyoKQEAgLTU4MCw2NiArNjA0LDY5IEBACiAJICogZnVuY3Rpb24gemVybyBvZiBhIG11bHRpLWZ1bmN0aW9uIGRldmljZS4KIAkgKiBJbiBhbnkgY2FzZSB0aGV5IG11c3Qgc2hhcmUgYSBjb21tb24gUEhCLgogCSAqLwotCXJldCA9IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShkbiwgcmV0cyk7Ci0JaWYgKCEocmV0ID09IDAgJiYgcmV0c1sxXSA9PSAxICYmIChyZXRzWzBdID09IDIgfHwgcmV0c1swXSA9PSA0KSkpIHsKKwlyZXQgPSByZWFkX3Nsb3RfcmVzZXRfc3RhdGUocGRuLCByZXRzKTsKKworCS8qIElmIHRoZSBjYWxsIHRvIGZpcm13YXJlIGZhaWxlZCwgcHVudCAqLworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IHJlYWRfc2xvdF9yZXNldF9zdGF0ZSgpIGZhaWxlZDsgcmM9JWQgZG49JXNcbiIsCisJCSAgICAgICByZXQsIGRuLT5mdWxsX25hbWUpOwogCQlfX2dldF9jcHVfdmFyKGZhbHNlX3Bvc2l0aXZlcykrKzsKLQkJcmV0dXJuIDA7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CiAJfQogCi0JLyogcHJldmVudCByZXBlYXRlZCByZXBvcnRzIG9mIHRoaXMgZmFpbHVyZSAqLwotCXBkbi0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVNPTEFURUQ7CisJLyogSWYgRUVIIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UsIHB1bnQuICovCisJaWYgKHJldHNbMV0gIT0gMSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFRUg6IGV2ZW50IG9uIHVuc3VwcG9ydGVkIGRldmljZSwgcmM9JWQgZG49JXNcbiIsCisJCSAgICAgICByZXQsIGRuLT5mdWxsX25hbWUpOworCQlfX2dldF9jcHVfdmFyKGZhbHNlX3Bvc2l0aXZlcykrKzsKKwkJcmMgPSAwOworCQlnb3RvIGRuX3VubG9jazsKKwl9CiAKLQlyZXNldF9zdGF0ZSA9IHJldHNbMF07CisJLyogSWYgbm90IHRoZSBraW5kIG9mIGVycm9yIHdlIGtub3cgYWJvdXQsIHB1bnQuICovCisJaWYgKHJldHNbMF0gIT0gMiAmJiByZXRzWzBdICE9IDQgJiYgcmV0c1swXSAhPSA1KSB7CisJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOworCQlyYyA9IDA7CisJCWdvdG8gZG5fdW5sb2NrOworCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KHNsb3RfZXJyYnVmLCAwLCBlZWhfZXJyb3JfYnVmX3NpemUpOworCS8qIE5vdGUgdGhhdCBjb25maWctaW8gdG8gZW1wdHkgc2xvdHMgbWF5IGZhaWw7CisJICogd2UgcmVjb2duaXplIGVtcHR5IGJlY2F1c2UgdGhleSBkb24ndCBoYXZlIGNoaWxkcmVuLiAqLworCWlmICgocmV0c1swXSA9PSA1KSAmJiAoZG4tPmNoaWxkID09IE5VTEwpKSB7CisJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOworCQlyYyA9IDA7CisJCWdvdG8gZG5fdW5sb2NrOworCX0KIAotCXJjID0gcnRhc19jYWxsKGlibV9zbG90X2Vycm9yX2RldGFpbCwKLQkgICAgICAgICAgICAgICA4LCAxLCBOVUxMLCBwZG4tPmVlaF9jb25maWdfYWRkciwKLQkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKLQkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwgTlVMTCwgMCwKLQkgICAgICAgICAgICAgICB2aXJ0X3RvX3BoeXMoc2xvdF9lcnJidWYpLAotCSAgICAgICAgICAgICAgIGVlaF9lcnJvcl9idWZfc2l6ZSwKLQkgICAgICAgICAgICAgICAxIC8qIFRlbXBvcmFyeSBFcnJvciAqLyk7CisJX19nZXRfY3B1X3ZhcihzbG90X3Jlc2V0cykrKzsKKyAKKwkvKiBBdm9pZCByZXBlYXRlZCByZXBvcnRzIG9mIHRoaXMgZmFpbHVyZSwgaW5jbHVkaW5nIHByb2JsZW1zCisJICogd2l0aCBvdGhlciBmdW5jdGlvbnMgb24gdGhpcyBkZXZpY2UsIGFuZCBmdW5jdGlvbnMgdW5kZXIKKwkgKiBicmlkZ2VzLiAqLworCWVlaF9tYXJrX3Nsb3QgKGRuLCBFRUhfTU9ERV9JU09MQVRFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CiAKLQlpZiAocmMgPT0gMCkKLQkJbG9nX2Vycm9yKHNsb3RfZXJyYnVmLCBFUlJfVFlQRV9SVEFTX0xPRywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvdF9lcnJidWZfbG9jaywgZmxhZ3MpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6ICVzICVzXG4iLAotCSAgICAgICByZXRzWzBdLCBkbi0+bmFtZSwgZG4tPmZ1bGxfbmFtZSk7Ci0JZXZlbnQgPSBrbWFsbG9jKHNpemVvZigqZXZlbnQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoZXZlbnQgPT0gTlVMTCkgewotCQllZWhfcGFuaWMoZGV2LCByZXNldF9zdGF0ZSk7Ci0JCXJldHVybiAxOwotIAl9Ci0KLQlldmVudC0+ZGV2ID0gZGV2OwotCWV2ZW50LT5kbiA9IGRuOwotCWV2ZW50LT5yZXNldF9zdGF0ZSA9IHJlc2V0X3N0YXRlOwotCi0JLyogV2UgbWF5IG9yIG1heSBub3QgYmUgY2FsbGVkIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkKCZldmVudC0+bGlzdCwgJmVlaF9ldmVudGxpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOwotCisJZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAoZG4sIGRldiwgcmV0c1swXSwgcmV0c1syXSk7CisJCiAJLyogTW9zdCBFRUggZXZlbnRzIGFyZSBkdWUgdG8gZGV2aWNlIGRyaXZlciBidWdzLiAgSGF2aW5nCiAJICogYSBzdGFjayB0cmFjZSB3aWxsIGhlbHAgdGhlIGRldmljZS1kcml2ZXIgYXV0aG9ycyBmaWd1cmUKIAkgKiBvdXQgd2hhdCBoYXBwZW5lZC4gIFNvIHByaW50IHRoYXQgb3V0LiAqLwotCWR1bXBfc3RhY2soKTsKLQlzY2hlZHVsZV93b3JrKCZlZWhfZXZlbnRfd3EpOworCWlmIChyZXRzWzBdICE9IDUpIGR1bXBfc3RhY2soKTsKKwlyZXR1cm4gMTsKIAotCXJldHVybiAwOworZG5fdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOworCXJldHVybiByYzsKIH0KIAotRVhQT1JUX1NZTUJPTChlZWhfZG5fY2hlY2tfZmFpbHVyZSk7CitFWFBPUlRfU1lNQk9MX0dQTChlZWhfZG5fY2hlY2tfZmFpbHVyZSk7CiAKIC8qKgogICogZWVoX2NoZWNrX2ZhaWx1cmUgLSBjaGVjayBpZiBhbGwgMSdzIGRhdGEgaXMgZHVlIHRvIEVFSCBzbG90IGZyZWV6ZQogICogQHRva2VuIGkvbyB0b2tlbiwgc2hvdWxkIGJlIGFkZHJlc3MgaW4gdGhlIGZvcm0gMHhBLi4uLgogICogQHZhbCB2YWx1ZSwgc2hvdWxkIGJlIGFsbCAxJ3MgKFhYWCB3aHkgZG8gd2UgbmVlZCB0aGlzIGFyZz8/KQogICoKLSAqIENoZWNrIGZvciBhbiBlZWggZmFpbHVyZSBhdCB0aGUgZ2l2ZW4gdG9rZW4gYWRkcmVzcy4KICAqIENoZWNrIGZvciBhbiBFRUggZmFpbHVyZSBhdCB0aGUgZ2l2ZW4gdG9rZW4gYWRkcmVzcy4gIENhbGwgdGhpcwogICogcm91dGluZSBpZiB0aGUgcmVzdWx0IG9mIGEgcmVhZCB3YXMgYWxsIDB4ZmYncyBhbmQgeW91IHdhbnQgdG8KICAqIGZpbmQgb3V0IGlmIHRoaXMgaXMgZHVlIHRvIGFuIEVFSCBzbG90IGZyZWV6ZSBldmVudC4gIFRoaXMgcm91dGluZQpAQCAtNjU2LDggKzY4MywxMCBAQAogCS8qIEZpbmRpbmcgdGhlIHBoeXMgYWRkciArIHBjaSBkZXZpY2U7IHRoaXMgaXMgcHJldHR5IHF1aWNrLiAqLwogCWFkZHIgPSBlZWhfdG9rZW5fdG9fcGh5cygodW5zaWduZWQgbG9uZyBfX2ZvcmNlKSB0b2tlbik7CiAJZGV2ID0gcGNpX2dldF9kZXZpY2VfYnlfYWRkcihhZGRyKTsKLQlpZiAoIWRldikKKwlpZiAoIWRldikgeworCQlfX2dldF9jcHVfdmFyKG5vX2RldmljZSkrKzsKIAkJcmV0dXJuIHZhbDsKKwl9CiAKIAlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCWVlaF9kbl9jaGVja19mYWlsdXJlIChkbiwgZGV2KTsKQEAgLTY2OCw2ICs2OTcsMjE3IEBACiAKIEVYUE9SVF9TWU1CT0woZWVoX2NoZWNrX2ZhaWx1cmUpOwogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBUaGUgY29kZSBiZWxvdyBkZWFscyB3aXRoIGVycm9yIHJlY292ZXJ5ICovCisKKy8qKiBSZXR1cm4gbmVnYXRpdmUgdmFsdWUgaWYgYSBwZXJtYW5lbnQgZXJyb3IsIGVsc2UgcmV0dXJuCisgKiBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGUgUENJIHNsb3QgaXMKKyAqIHJlYWR5IHRvIGJlIHVzZWQuCisgKi8KK3N0YXRpYyBpbnQKK2VlaF9zbG90X2F2YWlsYWJpbGl0eShzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IHJjOworCWludCByZXRzWzNdOworCisJcmMgPSByZWFkX3Nsb3RfcmVzZXRfc3RhdGUocGRuLCByZXRzKTsKKworCWlmIChyYykgcmV0dXJuIHJjOworCisJaWYgKHJldHNbMV0gPT0gMCkgcmV0dXJuIC0xOyAgLyogRUVIIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwlpZiAocmV0c1swXSA9PSAwKSAgcmV0dXJuIDA7ICAvKiBPbGwgS29ycmVjdCAqLworCWlmIChyZXRzWzBdID09IDUpIHsKKwkJaWYgKHJldHNbMl0gPT0gMCkgcmV0dXJuIC0xOyAvKiBwZXJtYW5lbnRseSB1bmF2YWlsYWJsZSAqLworCQlyZXR1cm4gcmV0c1syXTsgLyogbnVtYmVyIG9mIG1pbGxpc2VjcyB0byB3YWl0ICovCisJfQorCXJldHVybiAtMTsKK30KKworLyoqIHJ0YXNfcGNpX3Nsb3RfcmVzZXQgcmFpc2VzL2xvd2VycyB0aGUgcGNpICNSU1QgbGluZQorICogIHN0YXRlOiAxLzAgdG8gcmFpc2UvbG93ZXIgdGhlICNSU1QKKyAqCisgKiBDbGVhciB0aGUgRUVILWZyb3plbiBjb25kaXRpb24gb24gYSBzbG90LiAgVGhpcyByb3V0aW5lCisgKiBhc3NlcnRzIHRoZSBQQ0kgI1JTVCBsaW5lIGlmIHRoZSAnc3RhdGUnIGFyZ3VtZW50IGlzICcxJywKKyAqIGFuZCBkcm9wcyB0aGUgI1JTVCBsaW5lIGlmICdzdGF0ZSBpcyAnMCcuICBUaGlzIHJvdXRpbmUgaXMKKyAqIHNhZmUgdG8gY2FsbCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqCisgKi8KKworc3RhdGljIHZvaWQKK3J0YXNfcGNpX3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgc3RhdGUpCit7CisJaW50IHJjOworCisJQlVHX09OIChwZG49PU5VTEwpOyAKKworCWlmICghcGRuLT5waGIpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkVFSDogaW4gc2xvdCByZXNldCwgZGV2aWNlIG5vZGUgJXMgaGFzIG5vIHBoYlxuIiwKKwkJICAgICAgICBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlyYyA9IHJ0YXNfY2FsbChpYm1fc2V0X3Nsb3RfcmVzZXQsNCwxLCBOVUxMLAorCSAgICAgICAgICAgICAgIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAorCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAorCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpLAorCSAgICAgICAgICAgICAgIHN0YXRlKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkVFSDogVW5hYmxlIHRvIHJlc2V0IHRoZSBmYWlsZWQgc2xvdCwgKCVkKSAjUlNUPSVkIGRuPSVzXG4iLCAKKwkJICAgICAgICByYywgc3RhdGUsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuOworCX0KK30KKworLyoqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gYXNzZXJ0IHRoZSBwY2kgI1JTVCBsaW5lIGZvciAxLzQgc2Vjb25kCisgKiAgZG4gLS0gZGV2aWNlIG5vZGUgdG8gYmUgcmVzZXQuCisgKi8KKwordm9pZAorcnRhc19zZXRfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IGksIHJjOworCisJcnRhc19wY2lfc2xvdF9yZXNldCAocGRuLCAxKTsKKworCS8qIFRoZSBQQ0kgYnVzIHJlcXVpcmVzIHRoYXQgdGhlIHJlc2V0IGJlIGhlbGQgaGlnaCBmb3IgYXQgbGVhc3QKKwkgKiBhIDEwMCBtaWxsaXNlY29uZHMuIFdlIHdhaXQgYSBiaXQgbG9uZ2VyICdqdXN0IGluIGNhc2UnLiAgKi8KKworI2RlZmluZSBQQ0lfQlVTX1JTVF9IT0xEX1RJTUVfTVNFQyAyNTAKKwltc2xlZXAgKFBDSV9CVVNfUlNUX0hPTERfVElNRV9NU0VDKTsKKwkKKwkvKiBXZSBtaWdodCBnZXQgaGl0IHdpdGggYW5vdGhlciBFRUggZnJlZXplIGFzIHNvb24gYXMgdGhlIAorCSAqIHBjaSBzbG90IHJlc2V0IGxpbmUgaXMgZHJvcHBlZC4gTWFrZSBzdXJlIHdlIGRvbid0IG1pc3MKKwkgKiB0aGVzZSwgYW5kIGNsZWFyIHRoZSBmbGFnIG5vdy4gKi8KKwllZWhfY2xlYXJfc2xvdCAocGRuLT5ub2RlLCBFRUhfTU9ERV9JU09MQVRFRCk7CisKKwlydGFzX3BjaV9zbG90X3Jlc2V0IChwZG4sIDApOworCisJLyogQWZ0ZXIgYSBQQ0kgc2xvdCBoYXMgYmVlbiByZXNldCwgdGhlIFBDSSBFeHByZXNzIHNwZWMgcmVxdWlyZXMKKwkgKiBhIDEuNSBzZWNvbmQgaWRsZSB0aW1lIGZvciB0aGUgYnVzIHRvIHN0YWJpbGl6ZSwgYmVmb3JlIHN0YXJ0aW5nCisJICogdXAgdHJhZmZpYy4gKi8KKyNkZWZpbmUgUENJX0JVU19TRVRUTEVfVElNRV9NU0VDIDE4MDAKKwltc2xlZXAgKFBDSV9CVVNfU0VUVExFX1RJTUVfTVNFQyk7CisKKwkvKiBOb3cgZG91YmxlIGNoZWNrIHdpdGggdGhlIGZpcm13YXJlIHRvIG1ha2Ugc3VyZSB0aGUgZGV2aWNlIGlzCisJICogcmVhZHkgdG8gYmUgdXNlZDsgaWYgbm90LCB3YWl0IGZvciByZWNvdmVyeS4gKi8KKwlmb3IgKGk9MDsgaTwxMDsgaSsrKSB7CisJCXJjID0gZWVoX3Nsb3RfYXZhaWxhYmlsaXR5IChwZG4pOworCQlpZiAocmMgPD0gMCkgYnJlYWs7CisKKwkJbXNsZWVwIChyYysxMDApOworCX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyoqIFNhdmUgYW5kIHJlc3RvcmUgb2YgUENJIEJBUnMKKyAqCisgKiBBbHRob3VnaCBmaXJtd2FyZSB3aWxsIHNldCB1cCBCQVJzIGR1cmluZyBib290LCBpdCBkb2Vzbid0CisgKiBzZXQgdXAgZGV2aWNlIEJBUidzIGFmdGVyIGEgZGV2aWNlIHJlc2V0LCBhbHRob3VnaCBpdCB3aWxsLAorICogaWYgcmVxdWVzdGVkLCBzZXQgdXAgYnJpZGdlIGNvbmZpZ3VyYXRpb24uIFRodXMsIHdlIG5lZWQgdG8KKyAqIGNvbmZpZ3VyZSB0aGUgUENJIGRldmljZXMgb3Vyc2VsdmVzLiAgCisgKi8KKworLyoqCisgKiBfX3Jlc3RvcmVfYmFycyAtIFJlc3RvcmUgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMKKyAqIExvYWRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzLAorICogdGhlIGV4cGFuc2lvbiBST00gYmFzZSBhZGRyZXNzLCB0aGUgbGF0ZW5jeSB0aW1lciwgYW5kIGV0Yy4KKyAqIGZyb20gdGhlIHNhdmVkIHZhbHVlcyBpbiB0aGUgZGV2aWNlIG5vZGUuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jlc3RvcmVfYmFycyAoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCBpOworCisJaWYgKE5VTEw9PXBkbi0+cGhiKSByZXR1cm47CisJZm9yIChpPTQ7IGk8MTA7IGkrKykgeworCQlydGFzX3dyaXRlX2NvbmZpZyhwZG4sIGkqNCwgNCwgcGRuLT5jb25maWdfc3BhY2VbaV0pOworCX0KKworCS8qIDEyID09IEV4cGFuc2lvbiBST00gQWRkcmVzcyAqLworCXJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgMTIqNCwgNCwgcGRuLT5jb25maWdfc3BhY2VbMTJdKTsKKworI2RlZmluZSBCWVRFX1NXQVAoT0ZGKSAoOCooKE9GRikvNCkrMy0oT0ZGKSkKKyNkZWZpbmUgU0FWRURfQllURShPRkYpICgoKHU4ICopKHBkbi0+Y29uZmlnX3NwYWNlKSlbQllURV9TV0FQKE9GRildKQorCisJcnRhc193cml0ZV9jb25maWcgKHBkbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgMSwKKwkgICAgICAgICAgICBTQVZFRF9CWVRFKFBDSV9DQUNIRV9MSU5FX1NJWkUpKTsKKworCXJ0YXNfd3JpdGVfY29uZmlnIChwZG4sIFBDSV9MQVRFTkNZX1RJTUVSLCAxLAorCSAgICAgICAgICAgIFNBVkVEX0JZVEUoUENJX0xBVEVOQ1lfVElNRVIpKTsKKworCS8qIG1heCBsYXRlbmN5LCBtaW4gZ3JhbnQsIGludGVycnVwdCBwaW4gYW5kIGxpbmUgKi8KKwlydGFzX3dyaXRlX2NvbmZpZyhwZG4sIDE1KjQsIDQsIHBkbi0+Y29uZmlnX3NwYWNlWzE1XSk7Cit9CisKKy8qKgorICogZWVoX3Jlc3RvcmVfYmFycyAtIHJlc3RvcmUgdGhlIFBDSSBjb25maWcgc3BhY2UgaW5mbworICoKKyAqIFRoaXMgcm91dGluZSBwZXJmb3JtcyBhIHJlY3Vyc2l2ZSB3YWxrIHRvIHRoZSBjaGlsZHJlbgorICogb2YgdGhpcyBkZXZpY2UgYXMgd2VsbC4KKyAqLwordm9pZCBlZWhfcmVzdG9yZV9iYXJzKHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWlmICghcGRuKSAKKwkJcmV0dXJuOworCQorCWlmICghIHBkbi0+ZWVoX2lzX2JyaWRnZSkKKwkJX19yZXN0b3JlX2JhcnMgKHBkbik7CisKKwlkbiA9IHBkbi0+bm9kZS0+Y2hpbGQ7CisJd2hpbGUgKGRuKSB7CisJCWVlaF9yZXN0b3JlX2JhcnMgKFBDSV9ETihkbikpOworCQlkbiA9IGRuLT5zaWJsaW5nOworCX0KK30KKworLyoqCisgKiBlZWhfc2F2ZV9iYXJzIC0gc2F2ZSBkZXZpY2UgYmFycworICoKKyAqIFNhdmUgdGhlIHZhbHVlcyBvZiB0aGUgZGV2aWNlIGJhcnMuIFVubGlrZSB0aGUgcmVzdG9yZQorICogcm91dGluZSwgdGhpcyByb3V0aW5lIGlzICpub3QqIHJlY3Vyc2l2ZS4gVGhpcyBpcyBiZWNhdXNlCisgKiBQQ0kgZGV2aWNlcyBhcmUgYWRkZWQgaW5kaXZpZHVhbGxseTsgYnV0LCBmb3IgdGhlIHJlc3RvcmUsCisgKiBhbiBlbnRpcmUgc2xvdCBpcyByZXNldCBhdCBhIHRpbWUuCisgKi8KK3N0YXRpYyB2b2lkIGVlaF9zYXZlX2JhcnMoc3RydWN0IHBjaV9kZXYgKiBwZGV2LCBzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IGk7CisKKwlpZiAoIXBkZXYgfHwgIXBkbiApCisJCXJldHVybjsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGkgKiA0LCAmcGRuLT5jb25maWdfc3BhY2VbaV0pOworCisJaWYgKHBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCisJCXBkbi0+ZWVoX2lzX2JyaWRnZSA9IDE7Cit9CisKK3ZvaWQKK3J0YXNfY29uZmlndXJlX2JyaWRnZShzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IHRva2VuID0gcnRhc190b2tlbiAoImlibSxjb25maWd1cmUtYnJpZGdlIik7CisJaW50IHJjOworCisJaWYgKHRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCQlyZXR1cm47CisJcmMgPSBydGFzX2NhbGwodG9rZW4sMywxLCBOVUxMLAorCSAgICAgICAgICAgICAgIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAorCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAorCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkVFSDogVW5hYmxlIHRvIGNvbmZpZ3VyZSBkZXZpY2UgYnJpZGdlICglZCkgZm9yICVzXG4iLAorCQkgICAgICAgIHJjLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiBUaGUgY29kZSBiZWxvdyBkZWFscyB3aXRoIGVuYWJsaW5nIEVFSCBmb3IgZGV2aWNlcyBkdXJpbmcgIHRoZQorICogZWFybHkgYm9vdCBzZXF1ZW5jZS4gIEVFSCBtdXN0IGJlIGVuYWJsZWQgYmVmb3JlIGFueSBQQ0kgcHJvYmluZworICogY2FuIGJlIGRvbmUuCisgKi8KKworI2RlZmluZSBFRUhfRU5BQkxFIDEKKwogc3RydWN0IGVlaF9lYXJseV9lbmFibGVfaW5mbyB7CiAJdW5zaWduZWQgaW50IGJ1aWRfaGk7CiAJdW5zaWduZWQgaW50IGJ1aWRfbG87CkBAIC02ODQsOSArOTI0LDExIEBACiAJdTMyICpkZXZpY2VfaWQgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRuLCAiZGV2aWNlLWlkIiwgTlVMTCk7CiAJdTMyICpyZWdzOwogCWludCBlbmFibGU7Ci0Jc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7CisJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKGRuKTsKIAogCXBkbi0+ZWVoX21vZGUgPSAwOworCXBkbi0+ZWVoX2NoZWNrX2NvdW50ID0gMDsKKwlwZG4tPmVlaF9mcmVlemVfY291bnQgPSAwOwogCiAJaWYgKHN0YXR1cyAmJiBzdHJjbXAoc3RhdHVzLCAib2siKSAhPSAwKQogCQlyZXR1cm4gTlVMTDsJLyogaWdub3JlIGRldmljZXMgd2l0aCBiYWQgc3RhdHVzICovCkBAIC03MjMsOCArOTY1LDkgQEAKIAkJLyogRmlyc3QgcmVnaXN0ZXIgZW50cnkgaXMgYWRkciAoMDBCQlNTMDApICAqLwogCQkvKiBUcnkgdG8gZW5hYmxlIGVlaCAqLwogCQlyZXQgPSBydGFzX2NhbGwoaWJtX3NldF9lZWhfb3B0aW9uLCA0LCAxLCBOVUxMLAotCQkJCXJlZ3NbMF0sIGluZm8tPmJ1aWRfaGksIGluZm8tPmJ1aWRfbG8sCi0JCQkJRUVIX0VOQUJMRSk7CisJCSAgICAgICAgICAgICAgICByZWdzWzBdLCBpbmZvLT5idWlkX2hpLCBpbmZvLT5idWlkX2xvLAorCQkgICAgICAgICAgICAgICAgRUVIX0VOQUJMRSk7CisKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQllZWhfc3Vic3lzdGVtX2VuYWJsZWQgPSAxOwogCQkJcGRuLT5lZWhfbW9kZSB8PSBFRUhfTU9ERV9TVVBQT1JURUQ7CkBAIC03MzYsNyArOTc5LDcgQEAKIAogCQkJLyogVGhpcyBkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEVFSCwgYnV0IGl0IG1heSBoYXZlIGFuCiAJCQkgKiBFRUggcGFyZW50LCBpbiB3aGljaCBjYXNlIHdlIG1hcmsgaXQgYXMgc3VwcG9ydGVkLiAqLwotCQkJaWYgKGRuLT5wYXJlbnQgJiYgZG4tPnBhcmVudC0+ZGF0YQorCQkJaWYgKGRuLT5wYXJlbnQgJiYgUENJX0ROKGRuLT5wYXJlbnQpCiAJCQkgICAgJiYgKFBDSV9ETihkbi0+cGFyZW50KS0+ZWVoX21vZGUgJiBFRUhfTU9ERV9TVVBQT1JURUQpKSB7CiAJCQkJLyogUGFyZW50IHN1cHBvcnRzIEVFSC4gKi8KIAkJCQlwZG4tPmVlaF9tb2RlIHw9IEVFSF9NT0RFX1NVUFBPUlRFRDsKQEAgLTc0OSw3ICs5OTIsNyBAQAogCQkgICAgICAgZG4tPmZ1bGxfbmFtZSk7CiAJfQogCi0JcmV0dXJuIE5VTEw7IAorCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtNzcwLDYgKzEwMTMsOSBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGhiLCAqbnA7CiAJc3RydWN0IGVlaF9lYXJseV9lbmFibGVfaW5mbyBpbmZvOwogCisJc3Bpbl9sb2NrX2luaXQoJmNvbmZpcm1fZXJyb3JfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnNsb3RfZXJyYnVmX2xvY2spOworCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL3J0YXMiKTsKIAlpZiAobnAgPT0gTlVMTCkKIAkJcmV0dXJuOwpAQCAtNzk3LDEzICsxMDQzLDExIEBACiAJZm9yIChwaGIgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicGNpIik7IHBoYjsKIAkgICAgIHBoYiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHBoYiwgInBjaSIpKSB7CiAJCXVuc2lnbmVkIGxvbmcgYnVpZDsKLQkJc3RydWN0IHBjaV9kbiAqcGNpOwogCiAJCWJ1aWQgPSBnZXRfcGhiX2J1aWQocGhiKTsKLQkJaWYgKGJ1aWQgPT0gMCB8fCBwaGItPmRhdGEgPT0gTlVMTCkKKwkJaWYgKGJ1aWQgPT0gMCB8fCBQQ0lfRE4ocGhiKSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJcGNpID0gcGhiLT5kYXRhOwogCQlpbmZvLmJ1aWRfbG8gPSBCVUlEX0xPKGJ1aWQpOwogCQlpbmZvLmJ1aWRfaGkgPSBCVUlEX0hJKGJ1aWQpOwogCQl0cmF2ZXJzZV9wY2lfZGV2aWNlcyhwaGIsIGVhcmx5X2VuYWJsZV9lZWgsICZpbmZvKTsKQEAgLTgzMiwxMSArMTA3NiwxMyBAQAogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gaW5mbzsKIAotCWlmICghZG4gfHwgIWRuLT5kYXRhKQorCWlmICghZG4gfHwgIVBDSV9ETihkbikpCiAJCXJldHVybjsKIAlwaGIgPSBQQ0lfRE4oZG4pLT5waGI7CiAJaWYgKE5VTEwgPT0gcGhiIHx8IDAgPT0gcGhiLT5idWlkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogRXhwZWN0ZWQgYnVpZCBidXQgZm91bmQgbm9uZVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogRXhwZWN0ZWQgYnVpZCBidXQgZm91bmQgbm9uZSBmb3IgJXNcbiIsCisJCSAgICAgICBkbi0+ZnVsbF9uYW1lKTsKKwkJZHVtcF9zdGFjaygpOwogCQlyZXR1cm47CiAJfQogCkBAIC04NDQsNyArMTA5MCw3IEBACiAJaW5mby5idWlkX2xvID0gQlVJRF9MTyhwaGItPmJ1aWQpOwogCWVhcmx5X2VuYWJsZV9lZWgoZG4sICZpbmZvKTsKIH0KLUVYUE9SVF9TWU1CT0woZWVoX2FkZF9kZXZpY2VfZWFybHkpOworRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfZWFybHkpOwogCiAvKioKICAqIGVlaF9hZGRfZGV2aWNlX2xhdGUgLSBwZXJmb3JtIEVFSCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCkBAIC04NTUsNiArMTEwMSw5IEBACiAgKi8KIHZvaWQgZWVoX2FkZF9kZXZpY2VfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJc3RydWN0IHBjaV9kbiAqcGRuOworCiAJaWYgKCFkZXYgfHwgIWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCkKIAkJcmV0dXJuOwogCkBAIC04NjIsOSArMTExMSwxNSBAQAogCXByaW50ayhLRVJOX0RFQlVHICJFRUg6IGFkZGluZyBkZXZpY2UgJXNcbiIsIHBjaV9uYW1lKGRldikpOwogI2VuZGlmCiAKKwlwY2lfZGV2X2dldCAoZGV2KTsKKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCXBkbiA9IFBDSV9ETihkbik7CisJcGRuLT5wY2lkZXYgPSBkZXY7CisKIAlwY2lfYWRkcl9jYWNoZV9pbnNlcnRfZGV2aWNlIChkZXYpOworCWVlaF9zYXZlX2JhcnMoZGV2LCBwZG4pOwogfQotRVhQT1JUX1NZTUJPTChlZWhfYWRkX2RldmljZV9sYXRlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9hZGRfZGV2aWNlX2xhdGUpOwogCiAvKioKICAqIGVlaF9yZW1vdmVfZGV2aWNlIC0gdW5kbyBFRUggc2V0dXAgZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQpAQCAtODc1LDYgKzExMzAsNyBAQAogICovCiB2b2lkIGVlaF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlpZiAoIWRldiB8fCAhZWVoX3N1YnN5c3RlbV9lbmFibGVkKQogCQlyZXR1cm47CiAKQEAgLTg4MywyMCArMTEzOSwyOSBAQAogCXByaW50ayhLRVJOX0RFQlVHICJFRUg6IHJlbW92ZSBkZXZpY2UgJXNcbiIsIHBjaV9uYW1lKGRldikpOwogI2VuZGlmCiAJcGNpX2FkZHJfY2FjaGVfcmVtb3ZlX2RldmljZShkZXYpOworCisJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwlQQ0lfRE4oZG4pLT5wY2lkZXYgPSBOVUxMOworCXBjaV9kZXZfcHV0IChkZXYpOwogfQotRVhQT1JUX1NZTUJPTChlZWhfcmVtb3ZlX2RldmljZSk7CitFWFBPUlRfU1lNQk9MX0dQTChlZWhfcmVtb3ZlX2RldmljZSk7CiAKIHN0YXRpYyBpbnQgcHJvY19lZWhfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGZmcyA9IDAsIHBvc2l0aXZlcyA9IDAsIGZhaWx1cmVzID0gMDsKIAl1bnNpZ25lZCBsb25nIHJlc2V0cyA9IDA7CisJdW5zaWduZWQgbG9uZyBub19kZXYgPSAwLCBub19kbiA9IDAsIG5vX2NmZyA9IDAsIG5vX2NoZWNrID0gMDsKIAogCWZvcl9lYWNoX2NwdShjcHUpIHsKIAkJZmZzICs9IHBlcl9jcHUodG90YWxfbW1pb19mZnMsIGNwdSk7CiAJCXBvc2l0aXZlcyArPSBwZXJfY3B1KGZhbHNlX3Bvc2l0aXZlcywgY3B1KTsKIAkJZmFpbHVyZXMgKz0gcGVyX2NwdShpZ25vcmVkX2ZhaWx1cmVzLCBjcHUpOwogCQlyZXNldHMgKz0gcGVyX2NwdShzbG90X3Jlc2V0cywgY3B1KTsKKwkJbm9fZGV2ICs9IHBlcl9jcHUobm9fZGV2aWNlLCBjcHUpOworCQlub19kbiArPSBwZXJfY3B1KG5vX2RuLCBjcHUpOworCQlub19jZmcgKz0gcGVyX2NwdShub19jZmdfYWRkciwgY3B1KTsKKwkJbm9fY2hlY2sgKz0gcGVyX2NwdShpZ25vcmVkX2NoZWNrLCBjcHUpOwogCX0KIAogCWlmICgwID09IGVlaF9zdWJzeXN0ZW1fZW5hYmxlZCkgewpAQCAtOTA0LDEzICsxMTY5LDE3IEBACiAJCXNlcV9wcmludGYobSwgImVlaF90b3RhbF9tbWlvX2Zmcz0lbGRcbiIsIGZmcyk7CiAJfSBlbHNlIHsKIAkJc2VxX3ByaW50ZihtLCAiRUVIIFN1YnN5c3RlbSBpcyBlbmFibGVkXG4iKTsKLQkJc2VxX3ByaW50ZihtLCAiZWVoX3RvdGFsX21taW9fZmZzPSVsZFxuIgotCQkJICAgImVlaF9mYWxzZV9wb3NpdGl2ZXM9JWxkXG4iCi0JCQkgICAiZWVoX2lnbm9yZWRfZmFpbHVyZXM9JWxkXG4iCi0JCQkgICAiZWVoX3Nsb3RfcmVzZXRzPSVsZFxuIgotCQkJCSJlZWhfZmFpbF9jb3VudD0lZFxuIiwKLQkJCSAgIGZmcywgcG9zaXRpdmVzLCBmYWlsdXJlcywgcmVzZXRzLAotCQkJCWVlaF9mYWlsX2NvdW50LmNvdW50ZXIpOworCQlzZXFfcHJpbnRmKG0sCisJCQkJIm5vIGRldmljZT0lbGRcbiIKKwkJCQkibm8gZGV2aWNlIG5vZGU9JWxkXG4iCisJCQkJIm5vIGNvbmZpZyBhZGRyZXNzPSVsZFxuIgorCQkJCSJjaGVjayBub3Qgd2FudGVkPSVsZFxuIgorCQkJCSJlZWhfdG90YWxfbW1pb19mZnM9JWxkXG4iCisJCQkJImVlaF9mYWxzZV9wb3NpdGl2ZXM9JWxkXG4iCisJCQkJImVlaF9pZ25vcmVkX2ZhaWx1cmVzPSVsZFxuIgorCQkJCSJlZWhfc2xvdF9yZXNldHM9JWxkXG4iLAorCQkJCW5vX2Rldiwgbm9fZG4sIG5vX2NmZywgbm9fY2hlY2ssCisJCQkJZmZzLCBwb3NpdGl2ZXMsIGZhaWx1cmVzLCByZXNldHMpOwogCX0KIAogCXJldHVybiAwOwpAQCAtOTMyLDcgKzEyMDEsNyBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZTsKIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fUFNFUklFUykgeworCWlmIChwbGF0Zm9ybV9pc19wc2VyaWVzKCkpIHsKIAkJZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcGM2NC9lZWgiLCAwLCBOVUxMKTsKIAkJaWYgKGUpCiAJCQllLT5wcm9jX2ZvcHMgPSAmcHJvY19lZWhfb3BlcmF0aW9uczsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjQ5NzMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogZWVoX2V2ZW50LmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTGluYXMgVmVwc3RhcyA8bGluYXNAbGluYXMub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2VlaF9ldmVudC5oPgorCisvKiogT3ZlcnZpZXc6CisgKiAgRUVIIGVycm9yIHN0YXRlcyBtYXkgYmUgZGV0ZWN0ZWQgd2l0aGluIGV4Y2VwdGlvbiBoYW5kbGVyczsKKyAqICBob3dldmVyLCB0aGUgcmVjb3ZlcnkgcHJvY2Vzc2luZyBuZWVkcyB0byBvY2N1ciBhc3luY2hyb25vdXNseQorICogIGluIGEgbm9ybWFsIGtlcm5lbCBjb250ZXh0IGFuZCBub3QgYW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiAgVGhpcyBwYWlyIG9mIHJvdXRpbmVzIGNyZWF0ZXMgYW4gZXZlbnQgYW5kIHF1ZXVlcyBpdCBvbnRvIGEKKyAqICB3b3JrLXF1ZXVlLCB3aGVyZSBhIHdvcmtlciB0aHJlYWQgY2FuIGRyaXZlIHJlY292ZXJ5LgorICovCisKKy8qIEVFSCBldmVudCB3b3JrcXVldWUgc2V0dXAuICovCitzdGF0aWMgc3BpbmxvY2tfdCBlZWhfZXZlbnRsaXN0X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CitMSVNUX0hFQUQoZWVoX2V2ZW50bGlzdCk7CitzdGF0aWMgdm9pZCBlZWhfdGhyZWFkX2xhdW5jaGVyKHZvaWQgKik7CitERUNMQVJFX1dPUksoZWVoX2V2ZW50X3dxLCBlZWhfdGhyZWFkX2xhdW5jaGVyLCBOVUxMKTsKKworLyoqCisgKiBlZWhfcGFuaWMgLSBjYWxsIHBhbmljKCkgZm9yIGFuIGVlaCBldmVudCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkLgorICogVGhlIHBoaWxvc29waHkgb2YgdGhpcyByb3V0aW5lIGlzIHRoYXQgaXQgaXMgYmV0dGVyIHRvIHBhbmljIGFuZAorICogaGFsdCB0aGUgT1MgdGhhbiBpdCBpcyB0byByaXNrIHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBieQorICogb2JsaXZpb3VzIGRldmljZSBkcml2ZXJzIHRoYXQgZG9uJ3Qga25vdyBiZXR0ZXIuCisgKgorICogQGRldiBwY2kgZGV2aWNlIHRoYXQgaGFkIGFuIGVlaCBldmVudAorICogQHJlc2V0X3N0YXRlIGN1cnJlbnQgcmVzZXQgc3RhdGUgb2YgdGhlIGRldmljZSBzbG90CisgKi8KK3N0YXRpYyB2b2lkIGVlaF9wYW5pYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzZXRfc3RhdGUpCit7CisJLyoKKwkgKiBTaW5jZSB0aGUgcGFuaWNfb25fb29wcyBzeXNjdGwgaXMgdXNlZCB0byBoYWx0IHRoZSBzeXN0ZW0KKwkgKiBpbiBsaWdodCBvZiBwb3RlbnRpYWwgY29ycnVwdGlvbiwgd2UgY2FuIHVzZSBpdCBoZXJlLgorCSAqLworCWlmIChwYW5pY19vbl9vb3BzKSB7CisJCXBhbmljKCJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTolc1xuIiwgcmVzZXRfc3RhdGUsCisJCSAgICAgIHBjaV9uYW1lKGRldikpOworCX0KKwllbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBJZ25vcmVkIE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTolc1xuIiwKKwkJICAgICAgIHJlc2V0X3N0YXRlLCBwY2lfbmFtZShkZXYpKTsKKwl9Cit9CisKKy8qKgorICogZWVoX2V2ZW50X2hhbmRsZXIgLSBkaXNwYXRjaCBFRUggZXZlbnRzLiAgVGhlIGRldGVjdGlvbiBvZiBhIGZyb3plbgorICogc2xvdCBjYW4gb2NjdXIgaW5zaWRlIGFuIGludGVycnVwdCwgd2hlcmUgaXQgY2FuIGJlIGhhcmQgdG8gZG8KKyAqIGFueXRoaW5nIGFib3V0IGl0LiAgVGhlIGdvYWwgb2YgdGhpcyByb3V0aW5lIGlzIHRvIHB1bGwgdGhlc2UKKyAqIGRldGVjdGlvbiBldmVudHMgb3V0IG9mIHRoZSBjb250ZXh0IG9mIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciwgYW5kCisgKiByZS1kaXNwYXRjaCB0aGVtIGZvciBwcm9jZXNzaW5nIGF0IGEgbGF0ZXIgdGltZSBpbiBhIG5vcm1hbCBjb250ZXh0LgorICoKKyAqIEBkdW1teSAtIHVudXNlZAorICovCitzdGF0aWMgaW50IGVlaF9ldmVudF9oYW5kbGVyKHZvaWQgKiBkdW1teSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBlZWhfZXZlbnQJKmV2ZW50OworCisJZGFlbW9uaXplICgiZWVoZCIpOworCisJd2hpbGUgKDEpIHsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJCWV2ZW50ID0gTlVMTDsKKwkJaWYgKCFsaXN0X2VtcHR5KCZlZWhfZXZlbnRsaXN0KSkgeworCQkJZXZlbnQgPSBsaXN0X2VudHJ5KGVlaF9ldmVudGxpc3QubmV4dCwgc3RydWN0IGVlaF9ldmVudCwgbGlzdCk7CisJCQlsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCQlpZiAoZXZlbnQgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXByaW50ayhLRVJOX0lORk8gIkVFSDogRGV0ZWN0ZWQgUENJIGJ1cyBlcnJvciBvbiBkZXZpY2UgJXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7CisKKwkJZWVoX3BhbmljIChldmVudC0+ZGV2LCBldmVudC0+c3RhdGUpOworCisJCWtmcmVlKGV2ZW50KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBlZWhfdGhyZWFkX2xhdW5jaGVyCisgKgorICogQGR1bW15IC0gdW51c2VkCisgKi8KK3N0YXRpYyB2b2lkIGVlaF90aHJlYWRfbGF1bmNoZXIodm9pZCAqZHVtbXkpCit7CisJaWYgKGtlcm5lbF90aHJlYWQoZWVoX2V2ZW50X2hhbmRsZXIsIE5VTEwsIENMT05FX0tFUk5FTCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBzdGFydCBFRUggZGFlbW9uXG4iKTsKK30KKworLyoqCisgKiBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IC0gZ2VuZXJhdGUgYSBQQ0kgZXJyb3IgZXZlbnQKKyAqIEBkZXYgcGNpIGRldmljZQorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gYmUgY2FsbGVkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dDsKKyAqIHRoZSBhY3R1YWwgZXZlbnQgd2lsbCBiZSBkZWxpdmVyZWQgaW4gYSBub3JtYWwgY29udGV4dAorICogKGZyb20gYSB3b3JrcXVldWUpLgorICovCitpbnQgZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZV91bmF2YWlsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVlaF9ldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IGttYWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9BVE9NSUMpOworCWlmIChldmVudCA9PSBOVUxMKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogb3V0IG9mIG1lbW9yeSwgZXZlbnQgbm90IGhhbmRsZWRcbiIpOworCQlyZXR1cm4gMTsKKyAJfQorCisJaWYgKGRldikKKwkJcGNpX2Rldl9nZXQoZGV2KTsKKworCWV2ZW50LT5kbiA9IGRuOworCWV2ZW50LT5kZXYgPSBkZXY7CisJZXZlbnQtPnN0YXRlID0gc3RhdGU7CisJZXZlbnQtPnRpbWVfdW5hdmFpbCA9IHRpbWVfdW5hdmFpbDsKKworCS8qIFdlIG1heSBvciBtYXkgbm90IGJlIGNhbGxlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZXZlbnQtPmxpc3QsICZlZWhfZXZlbnRsaXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJmVlaF9ldmVudF93cSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKiogRU5EIE9GIEZJTEUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwppbmRleCBmY2M1MGJmLi45N2JhNTIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYwpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL3RjZS5oPgogI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CkBAIC01ODIsNyArNTgxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikgeworCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKIAkJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTVVMVElUQ0UpKSB7CiAJCQlwcGNfbWQudGNlX2J1aWxkID0gdGNlX2J1aWxkbXVsdGlfcFNlcmllc0xQOwogCQkJcHBjX21kLnRjZV9mcmVlCSA9IHRjZV9mcmVlbXVsdGlfcFNlcmllc0xQOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCmluZGV4IGMxOTg2NTYuLjk5OWE5NjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKQEAgLTEwNyw3ICsxMDcsNiBAQAogCiB2b2lkIF9faW5pdCBwU2VyaWVzX2ZpbmFsX2ZpeHVwKHZvaWQpCiB7Ci0JcGhic19yZW1hcF9pbygpOwogCXBTZXJpZXNfcmVxdWVzdF9yZWdpb25zKCk7CiAKIAlwY2lfYWRkcl9jYWNoZV9idWlsZCgpOwpAQCAtMTIzLDcgKzEyMiw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCWlmICghKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSkKKwlpZiAoIXBsYXRmb3JtX2lzX3BzZXJpZXMoKSkKIAkJcmV0dXJuOwogCiAJcHJpbnRrKCJVc2luZyBJTlRDIGZvciBXODJjMTA1IElERSBjb250cm9sbGVyLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmVjb25maWcuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCmluZGV4IGQ3ZDQwMDMuLmQ4ODY0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jCkBAIC00MDgsNyArNDA4LDcgQEAKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKIAotCWlmICghKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSkKKwlpZiAoIXBsYXRmb3JtX2lzX3BzZXJpZXMoKSkKIAkJcmV0dXJuIDA7CiAKIAllbnQgPSBjcmVhdGVfcHJvY19lbnRyeSgicHBjNjQvb2ZkdCIsIFNfSVdVU1IsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwppbmRleCBlMjZiMDQyLi5hNmY2MjhkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL252cmFtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KIAogI2lmIDAKICNkZWZpbmUgREVCVUcoQS4uLikJcHJpbnRrKEtFUk5fRVJSIEEpCkBAIC00ODIsMTAgKzQ4MSwxMiBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7CiAKLQkvKiBObyBSVEFTLCBvbmx5IHdhcm4gaWYgd2UgYXJlIG9uIGEgcFNlcmllcyBib3ggICovCisJaWYgKCFwbGF0Zm9ybV9pc19wc2VyaWVzKCkpCisJCXJldHVybiAwOworCisJLyogTm8gUlRBUyAqLwogCWlmIChydGFzX3Rva2VuKCJldmVudC1zY2FuIikgPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpIHsKLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKQotCQkJcHJpbnRrKEtFUk5fSU5GTyAicnRhc2Q6IG5vIGV2ZW50LXNjYW4gb24gc3lzdGVtXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicnRhc2Q6IG5vIGV2ZW50LXNjYW4gb24gc3lzdGVtXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9zY2FubG9nLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2NhbmxvZy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC9zY2FubG9nLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggYTA5M2EwZC4uMzE5OTA4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTI0OSw3ICsyNDksNyBAQAogCQlwcGNfbWQuaWRsZV9sb29wID0gZGVmYXVsdF9pZGxlOwogCX0KIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlwcGNfbWQuZW5hYmxlX3BtY3MgPSBwc2VyaWVzX2xwYXJfZW5hYmxlX3BtY3M7CiAJZWxzZQogCQlwcGNfbWQuZW5hYmxlX3BtY3MgPSBwb3dlcjRfZW5hYmxlX3BtY3M7CkBAIC0zMDYsOSArMzA2LDcgQEAKIAl9CiAKIAlvZl9ub2RlX3B1dChkbik7Ci0gbm9fcnRhczoKLQlwcmludGsoS0VSTl9JTkZPICJmaXJtd2FyZV9mZWF0dXJlcyA9IDB4JWx4XG4iLCAKLQkgICAgICAgcHBjNjRfZmlybXdhcmVfZmVhdHVyZXMpOworbm9fcnRhczoKIAogCURCRygiIDwtIGZ3X2ZlYXR1cmVfaW5pdCgpXG4iKTsKIH0KQEAgLTM3OCw3ICszNzYsNyBAQAogCiAJZndfZmVhdHVyZV9pbml0KCk7CiAJCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCWhwdGVfaW5pdF9scGFyKCk7CiAJZWxzZSB7CiAJCWhwdGVfaW5pdF9uYXRpdmUoKTsKQEAgLTM4OCw3ICszODYsNyBAQAogCiAJZ2VuZXJpY19maW5kX2xlZ2FjeV9zZXJpYWxfcG9ydHMoJnBoeXNwb3J0LCAmZGVmYXVsdF9zcGVlZCk7CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJZmluZF91ZGJnX3Z0ZXJtKCk7CiAJZWxzZSBpZiAocGh5c3BvcnQpIHsKIAkJLyogTWFwIHRoZSB1YXJ0IGZvciB1ZGJnLiAqLwpAQCAtNTkyLDcgKzU5MCw3IEBACiAKIHN0YXRpYyBpbnQgcFNlcmllc19wY2lfcHJvYmVfbW9kZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlyZXR1cm4gUENJX1BST0JFX0RFVlRSRUU7CiAJcmV0dXJuIFBDSV9QUk9CRV9OT1JNQUw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKaW5kZXggN2EyNDNlOC4uNTgwMGNkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9ydGFzLmg+CiAjaW5jbHVkZSA8YXNtL3BTZXJpZXNfcmVjb25maWcuaD4KICNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCkBAIC05Niw3ICs5Nyw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWNwdV9jbGVhcihjcHUsIGNwdV9vbmxpbmVfbWFwKTsKLQlzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50LS07CisJdmRzb19kYXRhLT5wcm9jZXNzb3JDb3VudC0tOwogCiAJLypmaXggYm9vdF9jcHVpZCBoZXJlKi8KIAlpZiAoY3B1ID09IGJvb3RfY3B1aWQpCkBAIC00NDEsNyArNDQyLDcgQEAKIAlzbXBfb3BzLT5jcHVfZGllID0gcFNlcmllc19jcHVfZGllOwogCiAJLyogUHJvY2Vzc29ycyBjYW4gYmUgYWRkZWQvcmVtb3ZlZCBvbmx5IG9uIExQQVIgKi8KLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJcFNlcmllc19yZWNvbmZpZ19ub3RpZmllcl9yZWdpc3RlcigmcFNlcmllc19zbXBfbmIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCmluZGV4IGM3MmM4NmYuLjcyYWMxODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwpAQCAtNTQ1LDcgKzU0NSw5IEBACiAJCW9mX25vZGVfcHV0KG5wKTsKIAl9CiAKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTKSB7CisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKKwkJb3BzID0gJnBTZXJpZXNMUF9vcHM7CisJZWxzZSB7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlmb3JfZWFjaF9jcHUoaSkgewogCQkJaW50IGhhcmRfaWQ7CkBAIC01NjEsMTIgKzU2MywxMSBAQAogI2Vsc2UKIAkJeGljc19wZXJfY3B1WzBdID0gaW9yZW1hcChpbnRyX2Jhc2UsIGludHJfc2l6ZSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCX0gZWxzZSBpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpIHsKLQkJb3BzID0gJnBTZXJpZXNMUF9vcHM7CiAJfQogCiAJeGljc184MjU5X3BpYy5lbmFibGUgPSBpODI1OV9waWMuZW5hYmxlOwogCXhpY3NfODI1OV9waWMuZGlzYWJsZSA9IGk4MjU5X3BpYy5kaXNhYmxlOworCXhpY3NfODI1OV9waWMuZW5kID0gaTgyNTlfcGljLmVuZDsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkKIAkJZ2V0X2lycV9kZXNjKGkpLT5oYW5kbGVyID0gJnhpY3NfODI1OV9waWM7CiAJZm9yICg7IGkgPCBOUl9JUlFTOyArK2kpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMKaW5kZXggNTQzZDY1OS4uZjMyYmFmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi91M19pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJaW9tbXVfdGFibGVfdTMuaXRfYnVzbm8gPSAwOwogCWlvbW11X3RhYmxlX3UzLml0X29mZnNldCA9IDA7CiAJLyogaXRfc2l6ZSBpcyBpbiBudW1iZXIgb2YgZW50cmllcyAqLwotCWlvbW11X3RhYmxlX3UzLml0X3NpemUgPSBkYXJ0X3RhYmxlc2l6ZSAvIHNpemVvZih1MzIpOworCWlvbW11X3RhYmxlX3UzLml0X3NpemUgPSAoZGFydF90YWJsZXNpemUgLyBzaXplb2YodTMyKSkgPj4gREFSVF9QQUdFX0ZBQ1RPUjsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNvbW1vbiBJT01NVSBjb2RlICovCiAJaW9tbXVfdGFibGVfdTMuaXRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKWRhcnRfdmJhc2U7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCmluZGV4IDc5YTc4NGYuLmIyMDMxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlCkBAIC04LDQgKzgsNCBAQAogb2JqLSQoQ09ORklHXzZ4eCkJKz0gc3RhcnRfMzIubwogb2JqLSQoQ09ORklHXzR4eCkJKz0gc3RhcnRfMzIubwogb2JqLSQoQ09ORklHX1BQQzY0KQkrPSBzdGFydF82NC5vCi1vYmoteQkJCSs9IHhtb24ubyBwcGMtZGlzLm8gcHBjLW9wYy5vIHN1YnJfcHJmLm8gc2V0am1wLm8KK29iai15CQkJKz0geG1vbi5vIHBwYy1kaXMubyBwcGMtb3BjLm8gc2V0am1wLm8gbm9uc3RkaW8ubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYyBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3NjU4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KKyAqCisgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCisKK2ludCB4bW9uX3B1dGNoYXIoaW50IGMpCit7CisJY2hhciBjaCA9IGM7CisKKwlpZiAoYyA9PSAnXG4nKQorCQl4bW9uX3B1dGNoYXIoJ1xyJyk7CisJcmV0dXJuIHhtb25fd3JpdGUoJmNoLCAxKSA9PSAxPyBjOiAtMTsKK30KKworc3RhdGljIGNoYXIgbGluZVsyNTZdOworc3RhdGljIGNoYXIgKmxpbmVwdHI7CitzdGF0aWMgaW50IGxpbmVsZWZ0OworCitpbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCit7CisJaW50IGM7CisJdW5zaWduZWQgbG9uZyB0MDsKKworCS8qIGFzc3VtZSAyNU1IeiBkZWZhdWx0IHRpbWViYXNlIGlmIHRiX3RpY2tzX3Blcl9zZWMgbm90IHNldCB5ZXQgKi8KKwl0aW1lb3V0ICo9IHRiX3RpY2tzX3Blcl9zZWM/IHRiX3RpY2tzX3Blcl9zZWM6IDI1MDAwMDAwOworCXQwID0gZ2V0X3RibCgpOworCWRvIHsKKwkJbGluZXB0ciA9IGxpbmU7CisJCWZvciAoOzspIHsKKwkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOworCQkJaWYgKGMgPT0gLTEpIHsKKwkJCQlpZiAoZ2V0X3RibCgpIC0gdDAgPiB0aW1lb3V0KQorCQkJCQlyZXR1cm4gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjID09ICdcbicpCisJCQkJYnJlYWs7CisJCQlpZiAoYyAhPSAnXHInICYmIGxpbmVwdHIgPCAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKKwkJCQkqbGluZXB0cisrID0gYzsKKwkJfQorCQkqbGluZXB0ciA9IDA7CisJfSB3aGlsZSAoc3Ryc3RyKGxpbmUsIHN0cikgPT0gTlVMTCk7CisJcmV0dXJuIDE7Cit9CisKK2ludCB4bW9uX2dldGNoYXIodm9pZCkKK3sKKwlpbnQgYzsKKworCWlmIChsaW5lbGVmdCA9PSAwKSB7CisJCWxpbmVwdHIgPSBsaW5lOworCQlmb3IgKDs7KSB7CisJCQljID0geG1vbl9yZWFkY2hhcigpOworCQkJaWYgKGMgPT0gLTEgfHwgYyA9PSA0KQorCQkJCWJyZWFrOworCQkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKKwkJCQkqbGluZXB0cisrID0gJ1xuJzsKKwkJCQl4bW9uX3B1dGNoYXIoJ1xuJyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgMDE3NzoKKwkJCWNhc2UgJ1xiJzoKKwkJCQlpZiAobGluZXB0ciA+IGxpbmUpIHsKKwkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOworCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKKwkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOworCQkJCQktLWxpbmVwdHI7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSAnVScgJiAweDFGOgorCQkJCXdoaWxlIChsaW5lcHRyID4gbGluZSkgeworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCXhtb25fcHV0Y2hhcignICcpOworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCS0tbGluZXB0cjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChsaW5lcHRyID49ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQorCQkJCQl4bW9uX3B1dGNoYXIoJ1xhJyk7CisJCQkJZWxzZSB7CisJCQkJCXhtb25fcHV0Y2hhcihjKTsKKwkJCQkJKmxpbmVwdHIrKyA9IGM7CisJCQkJfQorCQkJfQorCQl9CisJCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7CisJCWxpbmVwdHIgPSBsaW5lOworCX0KKwlpZiAobGluZWxlZnQgPT0gMCkKKwkJcmV0dXJuIC0xOworCS0tbGluZWxlZnQ7CisJcmV0dXJuICpsaW5lcHRyKys7Cit9CisKK2NoYXIgKnhtb25fZ2V0cyhjaGFyICpzdHIsIGludCBuYikKK3sKKwljaGFyICpwOworCWludCBjOworCisJZm9yIChwID0gc3RyOyBwIDwgc3RyICsgbmIgLSAxOyApIHsKKwkJYyA9IHhtb25fZ2V0Y2hhcigpOworCQlpZiAoYyA9PSAtMSkgeworCQkJaWYgKHAgPT0gc3RyKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJKnArKyA9IGM7CisJCWlmIChjID09ICdcbicpCisJCQlicmVhazsKKwl9CisJKnAgPSAwOworCXJldHVybiBzdHI7Cit9CisKK3ZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWludCBuOworCXN0YXRpYyBjaGFyIHhtb25fb3V0YnVmWzEwMjRdOworCisJdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKwluID0gdnNucHJpbnRmKHhtb25fb3V0YnVmLCBzaXplb2YoeG1vbl9vdXRidWYpLCBmb3JtYXQsIGFyZ3MpOworCXZhX2VuZChhcmdzKTsKKwl4bW9uX3dyaXRlKHhtb25fb3V0YnVmLCBuKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmggYi9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5oCmluZGV4IDg0MjExYTIuLjQ3Y2ViYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmgKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaApAQCAtMSwyMiArMSwxNCBAQAotdHlwZWRlZiBpbnQJRklMRTsKLWV4dGVybiBGSUxFICp4bW9uX3N0ZGluLCAqeG1vbl9zdGRvdXQ7CiAjZGVmaW5lIEVPRgkoLTEpCi0jZGVmaW5lIHN0ZGluCXhtb25fc3RkaW4KLSNkZWZpbmUgc3Rkb3V0CXhtb25fc3Rkb3V0Ci0jZGVmaW5lIHByaW50Zgl4bW9uX3ByaW50ZgotI2RlZmluZSBmcHJpbnRmCXhtb25fZnByaW50ZgotI2RlZmluZSBmcHV0cwl4bW9uX2ZwdXRzCi0jZGVmaW5lIGZnZXRzCXhtb25fZmdldHMKLSNkZWZpbmUgcHV0Y2hhcgl4bW9uX3B1dGNoYXIKLSNkZWZpbmUgZ2V0Y2hhcgl4bW9uX2dldGNoYXIKLSNkZWZpbmUgcHV0Ywl4bW9uX3B1dGMKLSNkZWZpbmUgZ2V0Ywl4bW9uX2dldGMKLSNkZWZpbmUgZm9wZW4obiwgbSkJTlVMTAotI2RlZmluZSBmZmx1c2goZikJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIGZjbG9zZShmKQlkbyB7fSB3aGlsZSAoMCkKLWV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGludCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIHhtb25fcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiB2b2lkIHhtb25fZnByaW50Zih2b2lkICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiB2b2lkIHhtb25fc3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIAotI2RlZmluZSBwZXJyb3IocykJcHJpbnRmKCIlczogbm8gZmlsZXMhXG4iLCAocykpCisjZGVmaW5lIHByaW50Zgl4bW9uX3ByaW50ZgorI2RlZmluZSBwdXRjaGFyCXhtb25fcHV0Y2hhcgorCitleHRlcm4gaW50IHhtb25fcHV0Y2hhcihpbnQgYyk7CitleHRlcm4gaW50IHhtb25fZ2V0Y2hhcih2b2lkKTsKK2V4dGVybiBjaGFyICp4bW9uX2dldHMoY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIHZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpOworZXh0ZXJuIGludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CitleHRlcm4gaW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpOworZXh0ZXJuIGludCB4bW9uX3JlYWRjaGFyKHZvaWQpOworZXh0ZXJuIGludCB4bW9uX3JlYWRfcG9sbCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3NldGptcC5TIGIvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKaW5kZXggZjhlNDBkZi4uOTZhOTFmMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMKQEAgLTE0LDYxICsxNCw2MSBAQAogCiBfR0xPQkFMKHhtb25fc2V0am1wKQogCW1mbHIJcjAKLQlTVEwJcjAsMChyMykKLQlTVEwJcjEsU1pMKHIzKQotCVNUTAlyMiwyKlNaTChyMykKKwlQUENfU1RMCXIwLDAocjMpCisJUFBDX1NUTAlyMSxTWkwocjMpCisJUFBDX1NUTAlyMiwyKlNaTChyMykKIAltZmNyCXIwCi0JU1RMCXIwLDMqU1pMKHIzKQotCVNUTAlyMTMsNCpTWkwocjMpCi0JU1RMCXIxNCw1KlNaTChyMykKLQlTVEwJcjE1LDYqU1pMKHIzKQotCVNUTAlyMTYsNypTWkwocjMpCi0JU1RMCXIxNyw4KlNaTChyMykKLQlTVEwJcjE4LDkqU1pMKHIzKQotCVNUTAlyMTksMTAqU1pMKHIzKQotCVNUTAlyMjAsMTEqU1pMKHIzKQotCVNUTAlyMjEsMTIqU1pMKHIzKQotCVNUTAlyMjIsMTMqU1pMKHIzKQotCVNUTAlyMjMsMTQqU1pMKHIzKQotCVNUTAlyMjQsMTUqU1pMKHIzKQotCVNUTAlyMjUsMTYqU1pMKHIzKQotCVNUTAlyMjYsMTcqU1pMKHIzKQotCVNUTAlyMjcsMTgqU1pMKHIzKQotCVNUTAlyMjgsMTkqU1pMKHIzKQotCVNUTAlyMjksMjAqU1pMKHIzKQotCVNUTAlyMzAsMjEqU1pMKHIzKQotCVNUTAlyMzEsMjIqU1pMKHIzKQorCVBQQ19TVEwJcjAsMypTWkwocjMpCisJUFBDX1NUTAlyMTMsNCpTWkwocjMpCisJUFBDX1NUTAlyMTQsNSpTWkwocjMpCisJUFBDX1NUTAlyMTUsNipTWkwocjMpCisJUFBDX1NUTAlyMTYsNypTWkwocjMpCisJUFBDX1NUTAlyMTcsOCpTWkwocjMpCisJUFBDX1NUTAlyMTgsOSpTWkwocjMpCisJUFBDX1NUTAlyMTksMTAqU1pMKHIzKQorCVBQQ19TVEwJcjIwLDExKlNaTChyMykKKwlQUENfU1RMCXIyMSwxMipTWkwocjMpCisJUFBDX1NUTAlyMjIsMTMqU1pMKHIzKQorCVBQQ19TVEwJcjIzLDE0KlNaTChyMykKKwlQUENfU1RMCXIyNCwxNSpTWkwocjMpCisJUFBDX1NUTAlyMjUsMTYqU1pMKHIzKQorCVBQQ19TVEwJcjI2LDE3KlNaTChyMykKKwlQUENfU1RMCXIyNywxOCpTWkwocjMpCisJUFBDX1NUTAlyMjgsMTkqU1pMKHIzKQorCVBQQ19TVEwJcjI5LDIwKlNaTChyMykKKwlQUENfU1RMCXIzMCwyMSpTWkwocjMpCisJUFBDX1NUTAlyMzEsMjIqU1pMKHIzKQogCWxpCXIzLDAKIAlibHIKIAogX0dMT0JBTCh4bW9uX2xvbmdqbXApCi0JQ01QSQlyNCwwCisJUFBDX0xDTVBJIHI0LDAKIAlibmUJMWYKIAlsaQlyNCwxCi0xOglMREwJcjEzLDQqU1pMKHIzKQotCUxETAlyMTQsNSpTWkwocjMpCi0JTERMCXIxNSw2KlNaTChyMykKLQlMREwJcjE2LDcqU1pMKHIzKQotCUxETAlyMTcsOCpTWkwocjMpCi0JTERMCXIxOCw5KlNaTChyMykKLQlMREwJcjE5LDEwKlNaTChyMykKLQlMREwJcjIwLDExKlNaTChyMykKLQlMREwJcjIxLDEyKlNaTChyMykKLQlMREwJcjIyLDEzKlNaTChyMykKLQlMREwJcjIzLDE0KlNaTChyMykKLQlMREwJcjI0LDE1KlNaTChyMykKLQlMREwJcjI1LDE2KlNaTChyMykKLQlMREwJcjI2LDE3KlNaTChyMykKLQlMREwJcjI3LDE4KlNaTChyMykKLQlMREwJcjI4LDE5KlNaTChyMykKLQlMREwJcjI5LDIwKlNaTChyMykKLQlMREwJcjMwLDIxKlNaTChyMykKLQlMREwJcjMxLDIyKlNaTChyMykKLQlMREwJcjAsMypTWkwocjMpCisxOglQUENfTEwJcjEzLDQqU1pMKHIzKQorCVBQQ19MTAlyMTQsNSpTWkwocjMpCisJUFBDX0xMCXIxNSw2KlNaTChyMykKKwlQUENfTEwJcjE2LDcqU1pMKHIzKQorCVBQQ19MTAlyMTcsOCpTWkwocjMpCisJUFBDX0xMCXIxOCw5KlNaTChyMykKKwlQUENfTEwJcjE5LDEwKlNaTChyMykKKwlQUENfTEwJcjIwLDExKlNaTChyMykKKwlQUENfTEwJcjIxLDEyKlNaTChyMykKKwlQUENfTEwJcjIyLDEzKlNaTChyMykKKwlQUENfTEwJcjIzLDE0KlNaTChyMykKKwlQUENfTEwJcjI0LDE1KlNaTChyMykKKwlQUENfTEwJcjI1LDE2KlNaTChyMykKKwlQUENfTEwJcjI2LDE3KlNaTChyMykKKwlQUENfTEwJcjI3LDE4KlNaTChyMykKKwlQUENfTEwJcjI4LDE5KlNaTChyMykKKwlQUENfTEwJcjI5LDIwKlNaTChyMykKKwlQUENfTEwJcjMwLDIxKlNaTChyMykKKwlQUENfTEwJcjMxLDIyKlNaTChyMykKKwlQUENfTEwJcjAsMypTWkwocjMpCiAJbXRjcmYJMHgzOCxyMAotCUxETAlyMCwwKHIzKQotCUxETAlyMSxTWkwocjMpCi0JTERMCXIyLDIqU1pMKHIzKQorCVBQQ19MTAlyMCwwKHIzKQorCVBQQ19MTAlyMSxTWkwocjMpCisJUFBDX0xMCXIyLDIqU1pMKHIzKQogCW10bHIJcjAKIAltcglyMyxyNAogCWJscgpAQCAtODQsNTIgKzg0LDUyIEBACiAgKiBkaWZmZXJlbnQgQUJJcywgdGhvdWdoKS4KICAqLwogX0dMT0JBTCh4bW9uX3NhdmVfcmVncykKLQlTVEwJcjAsMCpTWkwocjMpCi0JU1RMCXIyLDIqU1pMKHIzKQotCVNUTAlyMywzKlNaTChyMykKLQlTVEwJcjQsNCpTWkwocjMpCi0JU1RMCXI1LDUqU1pMKHIzKQotCVNUTAlyNiw2KlNaTChyMykKLQlTVEwJcjcsNypTWkwocjMpCi0JU1RMCXI4LDgqU1pMKHIzKQotCVNUTAlyOSw5KlNaTChyMykKLQlTVEwJcjEwLDEwKlNaTChyMykKLQlTVEwJcjExLDExKlNaTChyMykKLQlTVEwJcjEyLDEyKlNaTChyMykKLQlTVEwJcjEzLDEzKlNaTChyMykKLQlTVEwJcjE0LDE0KlNaTChyMykKLQlTVEwJcjE1LDE1KlNaTChyMykKLQlTVEwJcjE2LDE2KlNaTChyMykKLQlTVEwJcjE3LDE3KlNaTChyMykKLQlTVEwJcjE4LDE4KlNaTChyMykKLQlTVEwJcjE5LDE5KlNaTChyMykKLQlTVEwJcjIwLDIwKlNaTChyMykKLQlTVEwJcjIxLDIxKlNaTChyMykKLQlTVEwJcjIyLDIyKlNaTChyMykKLQlTVEwJcjIzLDIzKlNaTChyMykKLQlTVEwJcjI0LDI0KlNaTChyMykKLQlTVEwJcjI1LDI1KlNaTChyMykKLQlTVEwJcjI2LDI2KlNaTChyMykKLQlTVEwJcjI3LDI3KlNaTChyMykKLQlTVEwJcjI4LDI4KlNaTChyMykKLQlTVEwJcjI5LDI5KlNaTChyMykKLQlTVEwJcjMwLDMwKlNaTChyMykKLQlTVEwJcjMxLDMxKlNaTChyMykKKwlQUENfU1RMCXIwLDAqU1pMKHIzKQorCVBQQ19TVEwJcjIsMipTWkwocjMpCisJUFBDX1NUTAlyMywzKlNaTChyMykKKwlQUENfU1RMCXI0LDQqU1pMKHIzKQorCVBQQ19TVEwJcjUsNSpTWkwocjMpCisJUFBDX1NUTAlyNiw2KlNaTChyMykKKwlQUENfU1RMCXI3LDcqU1pMKHIzKQorCVBQQ19TVEwJcjgsOCpTWkwocjMpCisJUFBDX1NUTAlyOSw5KlNaTChyMykKKwlQUENfU1RMCXIxMCwxMCpTWkwocjMpCisJUFBDX1NUTAlyMTEsMTEqU1pMKHIzKQorCVBQQ19TVEwJcjEyLDEyKlNaTChyMykKKwlQUENfU1RMCXIxMywxMypTWkwocjMpCisJUFBDX1NUTAlyMTQsMTQqU1pMKHIzKQorCVBQQ19TVEwJcjE1LDE1KlNaTChyMykKKwlQUENfU1RMCXIxNiwxNipTWkwocjMpCisJUFBDX1NUTAlyMTcsMTcqU1pMKHIzKQorCVBQQ19TVEwJcjE4LDE4KlNaTChyMykKKwlQUENfU1RMCXIxOSwxOSpTWkwocjMpCisJUFBDX1NUTAlyMjAsMjAqU1pMKHIzKQorCVBQQ19TVEwJcjIxLDIxKlNaTChyMykKKwlQUENfU1RMCXIyMiwyMipTWkwocjMpCisJUFBDX1NUTAlyMjMsMjMqU1pMKHIzKQorCVBQQ19TVEwJcjI0LDI0KlNaTChyMykKKwlQUENfU1RMCXIyNSwyNSpTWkwocjMpCisJUFBDX1NUTAlyMjYsMjYqU1pMKHIzKQorCVBQQ19TVEwJcjI3LDI3KlNaTChyMykKKwlQUENfU1RMCXIyOCwyOCpTWkwocjMpCisJUFBDX1NUTAlyMjksMjkqU1pMKHIzKQorCVBQQ19TVEwJcjMwLDMwKlNaTChyMykKKwlQUENfU1RMCXIzMSwzMSpTWkwocjMpCiAJLyogZ28gdXAgb25lIHN0YWNrIGZyYW1lIGZvciBTUCAqLwotCUxETAlyNCwwKHIxKQotCVNUTAlyNCwxKlNaTChyMykKKwlQUENfTEwJcjQsMChyMSkKKwlQUENfU1RMCXI0LDEqU1pMKHIzKQogCS8qIGdldCBjYWxsZXIncyBMUiAqLwotCUxETAlyMCxMUlNBVkUocjQpCi0JU1RMCXIwLF9OSVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCi0JU1RMCXIwLF9MSU5LLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19MTAlyMCxMUlNBVkUocjQpCisJUFBDX1NUTAlyMCxfTklQLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0xJTkstU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZtc3IJcjAKLQlTVEwJcjAsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZjdHIJcjAKLQlTVEwJcjAsX0NUUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9DVFItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZ4ZXIJcjAKLQlTVEwJcjAsX1hFUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKKwlQUENfU1RMCXIwLF9YRVItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJbWZjcglyMAotCVNUTAlyMCxfQ0NSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0NDUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAlsaQlyMCwwCi0JU1RMCXIwLF9UUkFQLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX1RSQVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCiAJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfMzIuYwppbmRleCA2OWI2NThjLi5jMjQ2NGRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMKQEAgLTExLDcgKzExLDYgQEAKICNpbmNsdWRlIDxsaW51eC9jdWRhLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTIyLDEwICsyMSwxMSBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYnRleHQuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCiAKIHN0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnNjY2MsICpzY2NkOwogdW5zaWduZWQgaW50IFRYUkRZLCBSWFJEWSwgRExBQjsKLXN0YXRpYyBpbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CiAKIHN0YXRpYyBpbnQgdXNlX3NlcmlhbDsKIHN0YXRpYyBpbnQgdXNlX3NjcmVlbjsKQEAgLTMzLDE2ICszMyw2IEBACiBzdGF0aWMgaW50IHhtb25fdXNlX3NjY2I7CiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpjaGFubmVsX25vZGU7CiAKLSNkZWZpbmUgVEJfU1BFRUQJMjUwMDAwMDAKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZHRiKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCWFzbSB2b2xhdGlsZSgibWZ0YiAlMCIgOiAiPXIiIChyZXQpIDopOwotCXJldHVybiByZXQ7Ci19Ci0KIHZvaWQgYnVmX2FjY2Vzcyh2b2lkKQogewogCWlmIChETEFCKQpAQCAtOTEsMjMgKzgxLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX0NIUlAgKi8KIAotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotc3RhdGljIHZvaWQgc3lzcnFfaGFuZGxlX3htb24oaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQkgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQotewotCXhtb24ocmVncyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3htb25fb3AgPQotewotCS5oYW5kbGVyID0Jc3lzcnFfaGFuZGxlX3htb24sCi0JLmhlbHBfbXNnID0JIlhtb24iLAotCS5hY3Rpb25fbXNnID0JIkVudGVyaW5nIHhtb24iLAotfTsKLSNlbmRpZgotCi12b2lkCi14bW9uX21hcF9zY2Modm9pZCkKK3ZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICpiYXNlOwpAQCAtMjE3LDggKzE5MSw2IEBACiAJUlhSRFkgPSAxOwogCURMQUIgPSAweDgwOwogI2VuZGlmIC8qIHBsYXRmb3JtICovCi0KLQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7CiB9CiAKIHN0YXRpYyBpbnQgc2NjX2luaXRpYWxpemVkID0gMDsKQEAgLTIzOCw4ICsyMTAsNyBAQAogI2VuZGlmIC8qIENPTkZJR19BREJfQ1VEQSAqLwogfQogCi1pbnQKLXhtb25fd3JpdGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3dyaXRlKHZvaWQgKnB0ciwgaW50IG5iKQogewogCWNoYXIgKnAgPSBwdHI7CiAJaW50IGksIGMsIGN0OwpAQCAtMzExLDggKzI4Miw3IEBACiAJIlwwLlwwKlwwK1wwXDBcMFwwXDAvXHJcMC1cMCIJCQkvKiAweDQwIC0gMHg0ZiAqLwogCSJcMFwwMDAwMTIzNDU2Nzg5XDBcMFwwIjsJCQkvKiAweDUwIC0gMHg1ZiAqLwogCi1zdGF0aWMgaW50Ci14bW9uX2dldF9hZGJfa2V5KHZvaWQpCitzdGF0aWMgaW50IHhtb25fZ2V0X2FkYl9rZXkodm9pZCkKIHsKIAlpbnQgaywgdCwgb247CiAKQEAgLTM1MCwzMiArMzIwLDIxIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0JPT1RYX1RFWFQgKi8KIAotaW50Ci14bW9uX3JlYWQodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3JlYWRjaGFyKHZvaWQpCiB7Ci0gICAgY2hhciAqcCA9IHB0cjsKLSAgICBpbnQgaTsKLQogI2lmZGVmIENPTkZJR19CT09UWF9URVhUCi0gICAgaWYgKHVzZV9zY3JlZW4pIHsKLQlmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkKLQkgICAgKnArKyA9IHhtb25fZ2V0X2FkYl9rZXkoKTsKLQlyZXR1cm4gaTsKLSAgICB9CisJaWYgKHVzZV9zY3JlZW4pCisJCXJldHVybiB4bW9uX2dldF9hZGJfa2V5KCk7CiAjZW5kaWYKLSAgICBpZiAoIXNjY19pbml0aWFsaXplZCkKLQl4bW9uX2luaXRfc2NjKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsKKwlpZiAoIXNjY19pbml0aWFsaXplZCkKKwkJeG1vbl9pbml0X3NjYygpOwogCXdoaWxlICgoKnNjY2MgJiBSWFJEWSkgPT0gMCkKLQkgICAgZG9fcG9sbF9hZGIoKTsKKwkJZG9fcG9sbF9hZGIoKTsKIAlidWZfYWNjZXNzKCk7Ci0JKnArKyA9ICpzY2NkOwotICAgIH0KLSAgICByZXR1cm4gaTsKKwlyZXR1cm4gKnNjY2Q7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCWlmICgoKnNjY2MgJiBSWFJEWSkgPT0gMCkgewogCQlkb19wb2xsX2FkYigpOwpAQCAtMzk1LDggKzM1NCw3IEBACiAgICAgMywgIDB4YzEsCQkvKiByeCBlbmFibGUsIDggYml0cyAqLwogfTsKIAotdm9pZAoteG1vbl9pbml0X3NjYyh2b2lkKQordm9pZCB4bW9uX2luaXRfc2NjKHZvaWQpCiB7CiAJaWYgKCBfbWFjaGluZSA9PSBfTUFDSF9jaHJwICkKIAl7CkBAIC00MTAsNiArMzY4LDcgQEAKIAllbHNlIGlmICggX21hY2hpbmUgPT0gX01BQ0hfUG1hYyApCiAJewogCQlpbnQgaSwgeDsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJCWlmIChjaGFubmVsX25vZGUgIT0gMCkKIAkJCXBtYWNfY2FsbF9mZWF0dXJlKApAQCAtNDI0LDggKzM4MywxMiBAQAogCQkJCVBNQUNfRlRSX01PREVNX0VOQUJMRSwKIAkJCQljaGFubmVsX25vZGUsIDAsIDEpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiTW9kZW0gcG93ZXJlZCB1cCBieSBkZWJ1Z2dlciAhXG4iKTsKLQkJCXQwID0gcmVhZHRiKCk7Ci0JCQl3aGlsZSAocmVhZHRiKCkgLSB0MCA8IDMqVEJfU1BFRUQpCisJCQl0MCA9IGdldF90YmwoKTsKKwkJCXRpbWVvdXQgPSAzICogdGJfdGlja3NfcGVyX3NlYzsKKwkJCWlmICh0aW1lb3V0ID09IDApCisJCQkJLyogYXNzdW1lIDI1TUh6IGlmIHRiX3RpY2tzX3Blcl9zZWMgbm90IHNldCAqLworCQkJCXRpbWVvdXQgPSA3NTAwMDAwMDsKKwkJCXdoaWxlIChnZXRfdGJsKCkgLSB0MCA8IHRpbWVvdXQpCiAJCQkJZWllaW8oKTsKIAkJfQogCQkvKiB1c2UgdGhlIEIgY2hhbm5lbCBpZiByZXF1ZXN0ZWQgKi8KQEAgLTQ0NywxNjQgKzQxMCwxOSBAQAogCXNjY19pbml0aWFsaXplZCA9IDE7CiAJaWYgKHZpYV9tb2RlbSkgewogCQlmb3IgKDs7KSB7Ci0JCQl4bW9uX3dyaXRlKE5VTEwsICJBVEUxVjFcciIsIDcpOworCQkJeG1vbl93cml0ZSgiQVRFMVYxXHIiLCA3KTsKIAkJCWlmICh4bW9uX2V4cGVjdCgiT0siLCA1KSkgewotCQkJCXhtb25fd3JpdGUoTlVMTCwgIkFUQVxyIiwgNCk7CisJCQkJeG1vbl93cml0ZSgiQVRBXHIiLCA0KTsKIAkJCQlpZiAoeG1vbl9leHBlY3QoIkNPTk5FQ1QiLCA0MCkpCiAJCQkJCWJyZWFrOwogCQkJfQotCQkJeG1vbl93cml0ZShOVUxMLCAiKysrIiwgMyk7CisJCQl4bW9uX3dyaXRlKCIrKysiLCAzKTsKIAkJCXhtb25fZXhwZWN0KCJPSyIsIDMpOwogCQl9CiAJfQogfQogCi12b2lkICp4bW9uX3N0ZGluOwotdm9pZCAqeG1vbl9zdGRvdXQ7Ci12b2lkICp4bW9uX3N0ZGVycjsKLQotaW50IHhtb25fcHV0YyhpbnQgYywgdm9pZCAqZikKLXsKLSAgICBjaGFyIGNoID0gYzsKLQotICAgIGlmIChjID09ICdcbicpCi0JeG1vbl9wdXRjKCdccicsIGYpOwotICAgIHJldHVybiB4bW9uX3dyaXRlKGYsICZjaCwgMSkgPT0gMT8gYzogLTE7Ci19Ci0KLWludCB4bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0JcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludCB4bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLQlpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0JcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0JY2hhciBjaDsKLQotCWZvciAoOzspIHsKLQkJc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gY2g7Ci0JCWNhc2UgLTE6Ci0JCQl4bW9uX3ByaW50ZigicmVhZChzdGRpbikgcmV0dXJuZWQgLTFcclxuIiwgMCwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHRpbWVvdXQpCi17Ci0JaW50IGM7Ci0JdW5zaWduZWQgaW50IHQwOwotCi0JdGltZW91dCAqPSBUQl9TUEVFRDsKLQl0MCA9IHJlYWR0YigpOwotCWRvIHsKLQkJbGluZXB0ciA9IGxpbmU7Ci0JCWZvciAoOzspIHsKLQkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOwotCQkJaWYgKGMgPT0gLTEpIHsKLQkJCQlpZiAocmVhZHRiKCkgLSB0MCA+IHRpbWVvdXQpCi0JCQkJCXJldHVybiAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsKLQkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCSpsaW5lcHRyKysgPSBjOwotCQl9Ci0JCSpsaW5lcHRyID0gMDsKLQl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKLQlyZXR1cm4gMTsKLX0KLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLSAgICBpbnQgYzsKLQotICAgIGlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JbGluZXB0ciA9IGxpbmU7Ci0JZm9yICg7OykgewotCSAgICBjID0geG1vbl9yZWFkY2hhcigpOwotCSAgICBpZiAoYyA9PSAtMSB8fCBjID09IDQpCi0JCWJyZWFrOwotCSAgICBpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgewotCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQlicmVhazsKLQkgICAgfQotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgY2FzZSAwMTc3OgotCSAgICBjYXNlICdcYic6Ci0JCWlmIChsaW5lcHRyID4gbGluZSkgewotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICAtLWxpbmVwdHI7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgJ1UnICYgMHgxRjoKLQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCSAgICB4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCWVsc2UgewotCQkgICAgeG1vbl9wdXRjaGFyKGMpOwotCQkgICAgKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkgICAgfQotCX0KLQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCWxpbmVwdHIgPSBsaW5lOwotICAgIH0KLSAgICBpZiAobGluZWxlZnQgPT0gMCkKLQlyZXR1cm4gLTE7Ci0gICAgLS1saW5lbGVmdDsKLSAgICByZXR1cm4gKmxpbmVwdHIrKzsKLX0KLQotY2hhciAqCi14bW9uX2ZnZXRzKGNoYXIgKnN0ciwgaW50IG5iLCB2b2lkICpmKQotewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGM7Ci0KLSAgICBmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgewotCWMgPSB4bW9uX2dldGNoYXIoKTsKLQlpZiAoYyA9PSAtMSkgewotCSAgICBpZiAocCA9PSBzdHIpCi0JCXJldHVybiBOVUxMOwotCSAgICBicmVhazsKLQl9Ci0JKnArKyA9IGM7Ci0JaWYgKGMgPT0gJ1xuJykKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgICpwID0gMDsKLSAgICByZXR1cm4gc3RyOwotfQotCi12b2lkCi14bW9uX2VudGVyKHZvaWQpCit2b2lkIHhtb25fZW50ZXIodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQURCX1BNVQogCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CkBAIC02MTMsOCArNDMxLDcgQEAKICNlbmRpZgogfQogCi12b2lkCi14bW9uX2xlYXZlKHZvaWQpCit2b2lkIHhtb25fbGVhdmUodm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQURCX1BNVQogCWlmIChfbWFjaGluZSA9PSBfTUFDSF9QbWFjKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfNjQuYwppbmRleCBlNTBjMTU4Li43MTI1NTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMKQEAgLTYsMTgyICs2LDI5IEBACiAgKiAgICAgIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogICAgICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAotI2lmZGVmIENPTkZJR19NQUdJQ19TWVNSUQotCi1zdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAordm9pZCB4bW9uX21hcF9zY2Modm9pZCkKIHsKLQkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCi0JeG1vbl9pbml0KDEpOwotCWRlYnVnZ2VyKHB0X3JlZ3MpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c3JxX2tleV9vcCBzeXNycV94bW9uX29wID0gCi17Ci0JLmhhbmRsZXIgPQlzeXNycV9oYW5kbGVfeG1vbiwKLQkuaGVscF9tc2cgPQkiWG1vbiIsCi0JLmFjdGlvbl9tc2cgPQkiRW50ZXJpbmcgeG1vbiIsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF94bW9uX3N5c3JxKHZvaWQpCi17Ci0JcmVnaXN0ZXJfc3lzcnFfa2V5KCd4JywgJnN5c3JxX3htb25fb3ApOwotCXJldHVybiAwOwotfQotX19pbml0Y2FsbChzZXR1cF94bW9uX3N5c3JxKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFHSUNfU1lTUlEgKi8KLQotaW50Ci14bW9uX3dyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYikKIHsKIAlyZXR1cm4gdWRiZ193cml0ZShwdHIsIG5iKTsKIH0KIAotaW50Ci14bW9uX3JlYWQodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3JlYWRjaGFyKHZvaWQpCiB7Ci0JcmV0dXJuIHVkYmdfcmVhZChwdHIsIG5iKTsKKwlpZiAodWRiZ19nZXRjKQorCQlyZXR1cm4gdWRiZ19nZXRjKCk7CisJcmV0dXJuIC0xOwogfQogCi1pbnQKLXhtb25fcmVhZF9wb2xsKHZvaWQpCitpbnQgeG1vbl9yZWFkX3BvbGwodm9pZCkKIHsKIAlpZiAodWRiZ19nZXRjX3BvbGwpCiAJCXJldHVybiB1ZGJnX2dldGNfcG9sbCgpOwogCXJldHVybiAtMTsKIH0KLSAKLUZJTEUgKnhtb25fc3RkaW47Ci1GSUxFICp4bW9uX3N0ZG91dDsKLQotaW50Ci14bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpCi17Ci0JY2hhciBjaCA9IGM7Ci0KLQlpZiAoYyA9PSAnXG4nKQotCQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0JcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50Ci14bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0JcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludAoteG1vbl9mcHV0cyhjaGFyICpzdHIsIHZvaWQgKmYpCi17Ci0JaW50IG4gPSBzdHJsZW4oc3RyKTsKLQotCXJldHVybiB4bW9uX3dyaXRlKGYsIHN0ciwgbikgPT0gbj8gMDogLTE7Ci19Ci0KLWludAoteG1vbl9yZWFkY2hhcih2b2lkKQotewotCWNoYXIgY2g7Ci0KLQlmb3IgKDs7KSB7Ci0JCXN3aXRjaCAoeG1vbl9yZWFkKHhtb25fc3RkaW4sICZjaCwgMSkpIHsKLQkJY2FzZSAxOgotCQkJcmV0dXJuIGNoOwotCQljYXNlIC0xOgotCQkJeG1vbl9wcmludGYoInJlYWQoc3RkaW4pIHJldHVybmVkIC0xXHJcbiIsIDAsIDApOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgY2hhciBsaW5lWzI1Nl07Ci1zdGF0aWMgY2hhciAqbGluZXB0cjsKLXN0YXRpYyBpbnQgbGluZWxlZnQ7Ci0KLWludAoteG1vbl9nZXRjaGFyKHZvaWQpCi17Ci0JaW50IGM7Ci0KLQlpZiAobGluZWxlZnQgPT0gMCkgewotCQlsaW5lcHRyID0gbGluZTsKLQkJZm9yICg7OykgewotCQkJYyA9IHhtb25fcmVhZGNoYXIoKTsKLQkJCWlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJCQlicmVhazsKLQkJCWlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCQkJKmxpbmVwdHIrKyA9ICdcbic7Ci0JCQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc3dpdGNoIChjKSB7Ci0JCQljYXNlIDAxNzc6Ci0JCQljYXNlICdcYic6Ci0JCQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCQkJCXhtb25fcHV0Y2hhcignXGInKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCQkJCXhtb25fcHV0Y2hhcignXGInKTsKLQkJCQkJLS1saW5lcHRyOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWNhc2UgJ1UnICYgMHgxRjoKLQkJCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQktLWxpbmVwdHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYScpOwotCQkJCWVsc2UgewotCQkJCQl4bW9uX3B1dGNoYXIoYyk7Ci0JCQkJCSpsaW5lcHRyKysgPSBjOwotCQkJCX0KLQkJCX0KLQkJfQotCQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCQlsaW5lcHRyID0gbGluZTsKLQl9Ci0JaWYgKGxpbmVsZWZ0ID09IDApCi0JCXJldHVybiAtMTsKLQktLWxpbmVsZWZ0OwotCXJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0JY2hhciAqcDsKLQlpbnQgYzsKLQotCWZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JCWMgPSB4bW9uX2dldGNoYXIoKTsKLQkJaWYgKGMgPT0gLTEpIHsKLQkJCWlmIChwID09IHN0cikKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCSpwKysgPSBjOwotCQlpZiAoYyA9PSAnXG4nKQotCQkJYnJlYWs7Ci0JfQotCSpwID0gMDsKLQlyZXR1cm4gc3RyOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfOHh4LmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYwppbmRleCBhNDhiZDU5Li40YzE3YjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYwpAQCAtMTUsMjczICsxNSwzMCBAQAogI2luY2x1ZGUgPGFzbS84eHhfaW1tYXAuaD4KICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAotZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIGludCB4bW9uXzh4eF93cml0ZShjaGFyICpzdHIsIGludCBuYik7CiBleHRlcm4gaW50IHhtb25fOHh4X3JlYWRfcG9sbCh2b2lkKTsKIGV4dGVybiBpbnQgeG1vbl84eHhfcmVhZF9jaGFyKHZvaWQpOwotdm9pZCBwcm9tX2RyYXdoZXgodWludCk7Ci12b2lkIHByb21fZHJhd3N0cmluZyhjb25zdCBjaGFyICpzdHIpOwogCi1zdGF0aWMgaW50IHVzZV9zY3JlZW4gPSAxOyAvKiBkZWZhdWx0ICovCi0KLSNkZWZpbmUgVEJfU1BFRUQJMjUwMDAwMDAKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVhZHRiKHZvaWQpCit2b2lkIHhtb25fbWFwX3NjYyh2b2lkKQogewotCXVuc2lnbmVkIGludCByZXQ7Ci0KLQlhc20gdm9sYXRpbGUoIm1mdGIgJTAiIDogIj1yIiAocmV0KSA6KTsKLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGJ1Zl9hY2Nlc3Modm9pZCkKLXsKLX0KLQotdm9pZAoteG1vbl9tYXBfc2NjKHZvaWQpCi17Ci0KIAljcG1wID0gKGNwbTh4eF90ICopJigoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jcG0pOwotCXVzZV9zY3JlZW4gPSAwOwotCQotCXByb21fZHJhd3N0cmluZygieG1vbiB1c2VzIHNlcmlhbCBwb3J0XG4iKTsKIH0KIAotc3RhdGljIGludCBzY2NfaW5pdGlhbGl6ZWQgPSAwOwotCiB2b2lkIHhtb25faW5pdF9zY2Modm9pZCk7CiAKLWludAoteG1vbl93cml0ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpCiB7Ci0JY2hhciAqcCA9IHB0cjsKLQlpbnQgaSwgYywgY3Q7Ci0KLQlpZiAoIXNjY19pbml0aWFsaXplZCkKLQkJeG1vbl9pbml0X3NjYygpOwotCiAJcmV0dXJuKHhtb25fOHh4X3dyaXRlKHB0ciwgbmIpKTsKIH0KIAotaW50IHhtb25fd2FudHNfa2V5OwotCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLQljaGFyICpwID0gcHRyOwotCWludCBpOwotCi0JaWYgKCFzY2NfaW5pdGlhbGl6ZWQpCi0JCXhtb25faW5pdF9zY2MoKTsKLQotCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7Ci0JCSpwKysgPSB4bW9uXzh4eF9yZWFkX2NoYXIoKTsKLQl9Ci0JcmV0dXJuIGk7CisJcmV0dXJuIHhtb25fOHh4X3JlYWRfY2hhcigpOwogfQogCi1pbnQKLXhtb25fcmVhZF9wb2xsKHZvaWQpCitpbnQgeG1vbl9yZWFkX3BvbGwodm9pZCkKIHsKIAlyZXR1cm4oeG1vbl84eHhfcmVhZF9wb2xsKCkpOwogfQotCi12b2lkCi14bW9uX2luaXRfc2NjKCkKLXsKLQlzY2NfaW5pdGlhbGl6ZWQgPSAxOwotfQotCi0jaWYgMAotZXh0ZXJuIGludCAoKnByb21fZW50cnkpKHZvaWQgKik7Ci0KLWludAoteG1vbl9leGl0KHZvaWQpCi17Ci0gICAgc3RydWN0IHByb21fYXJncyB7Ci0JY2hhciAqc2VydmljZTsKLSAgICB9IGFyZ3M7Ci0KLSAgICBmb3IgKDs7KSB7Ci0JYXJncy5zZXJ2aWNlID0gImV4aXQiOwotCSgqcHJvbV9lbnRyeSkoJmFyZ3MpOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lkICp4bW9uX3N0ZGluOwotdm9pZCAqeG1vbl9zdGRvdXQ7Ci12b2lkICp4bW9uX3N0ZGVycjsKLQotdm9pZAoteG1vbl9pbml0KHZvaWQpCi17Ci19Ci0KLWludAoteG1vbl9wdXRjKGludCBjLCB2b2lkICpmKQotewotICAgIGNoYXIgY2ggPSBjOwotCi0gICAgaWYgKGMgPT0gJ1xuJykKLQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50Ci14bW9uX3B1dGNoYXIoaW50IGMpCi17Ci0gICAgcmV0dXJuIHhtb25fcHV0YyhjLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLWludAoteG1vbl9mcHV0cyhjaGFyICpzdHIsIHZvaWQgKmYpCi17Ci0gICAgaW50IG4gPSBzdHJsZW4oc3RyKTsKLQotICAgIHJldHVybiB4bW9uX3dyaXRlKGYsIHN0ciwgbikgPT0gbj8gMDogLTE7Ci19Ci0KLWludAoteG1vbl9yZWFkY2hhcih2b2lkKQotewotICAgIGNoYXIgY2g7Ci0KLSAgICBmb3IgKDs7KSB7Ci0Jc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCWNhc2UgMToKLQkgICAgcmV0dXJuIGNoOwotCWNhc2UgLTE6Ci0JICAgIHhtb25fcHJpbnRmKCJyZWFkKHN0ZGluKSByZXR1cm5lZCAtMVxyXG4iLCAwLCAwKTsKLQkgICAgcmV0dXJuIC0xOwotCX0KLSAgICB9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotI2lmIDAKLWludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCB0aW1lb3V0KQotewotCWludCBjOwotCXVuc2lnbmVkIGludCB0MDsKLQotCXRpbWVvdXQgKj0gVEJfU1BFRUQ7Ci0JdDAgPSByZWFkdGIoKTsKLQlkbyB7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCQlmb3IgKDs7KSB7Ci0JCQljID0geG1vbl9yZWFkX3BvbGwoKTsKLQkJCWlmIChjID09IC0xKSB7Ci0JCQkJaWYgKHJlYWR0YigpIC0gdDAgPiB0aW1lb3V0KQotCQkJCQlyZXR1cm4gMDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChjID09ICdcbicpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoYyAhPSAnXHInICYmIGxpbmVwdHIgPCAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJCQkqbGluZXB0cisrID0gYzsKLQkJfQotCQkqbGluZXB0ciA9IDA7Ci0JfSB3aGlsZSAoc3Ryc3RyKGxpbmUsIHN0cikgPT0gTlVMTCk7Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLSAgICBpbnQgYzsKLQotICAgIGlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JbGluZXB0ciA9IGxpbmU7Ci0JZm9yICg7OykgewotCSAgICBjID0geG1vbl9yZWFkY2hhcigpOwotCSAgICBpZiAoYyA9PSAtMSB8fCBjID09IDQpCi0JCWJyZWFrOwotCSAgICBpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgewotCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJeG1vbl9wdXRjaGFyKCdcbicpOwotCQlicmVhazsKLQkgICAgfQotCSAgICBzd2l0Y2ggKGMpIHsKLQkgICAgY2FzZSAwMTc3OgotCSAgICBjYXNlICdcYic6Ci0JCWlmIChsaW5lcHRyID4gbGluZSkgewotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgeG1vbl9wdXRjaGFyKCcgJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICAtLWxpbmVwdHI7Ci0JCX0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgJ1UnICYgMHgxRjoKLQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgZGVmYXVsdDoKLQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCSAgICB4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCWVsc2UgewotCQkgICAgeG1vbl9wdXRjaGFyKGMpOwotCQkgICAgKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkgICAgfQotCX0KLQlsaW5lbGVmdCA9IGxpbmVwdHIgLSBsaW5lOwotCWxpbmVwdHIgPSBsaW5lOwotICAgIH0KLSAgICBpZiAobGluZWxlZnQgPT0gMCkKLQlyZXR1cm4gLTE7Ci0gICAgLS1saW5lbGVmdDsKLSAgICByZXR1cm4gKmxpbmVwdHIrKzsKLX0KLQotY2hhciAqCi14bW9uX2ZnZXRzKGNoYXIgKnN0ciwgaW50IG5iLCB2b2lkICpmKQotewotICAgIGNoYXIgKnA7Ci0gICAgaW50IGM7Ci0KLSAgICBmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgewotCWMgPSB4bW9uX2dldGNoYXIoKTsKLQlpZiAoYyA9PSAtMSkgewotCSAgICBpZiAocCA9PSBzdHIpCi0JCXJldHVybiAwOwotCSAgICBicmVhazsKLQl9Ci0JKnArKyA9IGM7Ci0JaWYgKGMgPT0gJ1xuJykKLQkgICAgYnJlYWs7Ci0gICAgfQotICAgICpwID0gMDsKLSAgICByZXR1cm4gc3RyOwotfQotCi12b2lkCi1wcm9tX2RyYXdoZXgodWludCB2YWwpCi17Ci0JdW5zaWduZWQgY2hhciBidWZbMTBdOwotCi0JaW50IGk7Ci0JZm9yIChpID0gNzsgIGkgPj0gMDsgIGktLSkKLQl7Ci0JCWJ1ZltpXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIlt2YWwgJiAweDBmXTsKLQkJdmFsID4+PSA0OwotCX0KLQlidWZbOF0gPSAnXDAnOwotCXhtb25fZnB1dHMoYnVmLCB4bW9uX3N0ZG91dCk7Ci19Ci0KLXZvaWQKLXByb21fZHJhd3N0cmluZyhjb25zdCBjaGFyICpzdHIpCi17Ci0JeG1vbl9mcHV0cyhzdHIsIHhtb25fc3Rkb3V0KTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdWJyX3ByZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDg3MzhjLi4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBDb3J0IERvdWdhbiB0byByZXBsYWNlIHRoZSB2ZXJzaW9uIG9yaWdpbmFsbHkgdXNlZAotICogYnkgUGF1bCBNYWNrZXJyYXMsIHdoaWNoIGNhbWUgZnJvbSBOZXRCU0QgYW5kIHRodXMgaGFkIGNvcHlyaWdodAotICogY29uZmxpY3RzIHdpdGggTGludXguCi0gKgotICogVGhpcyBmaWxlIG1ha2VzIGxpYmVyYWwgdXNlIG9mIHRoZSBzdGFuZGFyZCBsaW51eCB1dGlsaXR5Ci0gKiByb3V0aW5lcyB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeS4gIFdlIGFzc3VtZSB3ZSBjYW4KLSAqIHRydXN0IHNvbWUgcGFydHMgb2YgTGludXggaW5zaWRlIHRoZSBkZWJ1Z2dlci4KLSAqICAgLS0gQ29ydCAoY29ydEBjcy5ubXQuZWR1KQotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBDb3J0IERvdWdhbi4KLSAqCi0gKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgIm5vbnN0ZGlvLmgiCi0KLWV4dGVybiBpbnQgeG1vbl93cml0ZSh2b2lkICosIHZvaWQgKiwgaW50KTsKLQotdm9pZCB4bW9uX3ZmcHJpbnRmKHZvaWQgKmYsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKLXsKLQlzdGF0aWMgY2hhciB4bW9uX2J1ZlsyMDQ4XTsKLQlpbnQgbjsKLQotCW4gPSB2c3ByaW50Zih4bW9uX2J1ZiwgZm10LCBhcCk7Ci0JeG1vbl93cml0ZShmLCB4bW9uX2J1Ziwgbik7Ci19Ci0KLXZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXhtb25fdmZwcmludGYoc3Rkb3V0LCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotRVhQT1JUX1NZTUJPTCh4bW9uX3ByaW50Zik7Ci0KLXZvaWQgeG1vbl9mcHJpbnRmKHZvaWQgKmYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl4bW9uX3ZmcHJpbnRmKGYsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCAxMTI0ZjExLi5lZjQzNTZiMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSb3V0aW5lcyBwcm92aWRpbmcgYSBzaW1wbGUgbW9uaXRvciBmb3IgdXNlIG9uIHRoZSBQb3dlck1hYy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwNSBQYXVsIE1hY2tlcnJhcy4KICAqCiAgKiAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KQEAgLTE0NCwxNSArMTQ1LDEwIEBACiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0dmVjbmFtZSh1bnNpZ25lZCBsb25nIHZlYyk7CiAKIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9wb3dlcnBjKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7Ci1leHRlcm4gdm9pZCBwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl92ZnByaW50Zih2b2lkICpmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApOwotZXh0ZXJuIGludCB4bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpOwotZXh0ZXJuIGludCBwdXRjaGFyKGludCBjaCk7CiAKIGV4dGVybiB2b2lkIHhtb25fZW50ZXIodm9pZCk7CiBleHRlcm4gdm9pZCB4bW9uX2xlYXZlKHZvaWQpOwogCi1leHRlcm4gaW50IHhtb25fcmVhZF9wb2xsKHZvaWQpOwogZXh0ZXJuIGxvbmcgc2V0am1wKGxvbmcgKik7CiBleHRlcm4gdm9pZCBsb25nam1wKGxvbmcgKiwgbG9uZyk7CiBleHRlcm4gdm9pZCB4bW9uX3NhdmVfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKQEAgLTc0OCw3ICs3NDQsNiBAQAogCQlwcmludGYoIiV4OiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCQlwcmludGYoIm1vbj4gIik7Ci0JCWZmbHVzaChzdGRvdXQpOwogCQlmbHVzaF9pbnB1dCgpOwogCQl0ZXJtY2ggPSAwOwogCQljbWQgPSBza2lwYmwoKTsKQEAgLTE0NzIsMTcgKzE0NjcsMjMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5zdHJzWzJdOwogCXVuc2lnbmVkIGxvbmcgKCpjb2RlKSh2b2lkKTsKLQl1bnNpZ25lZCBsb25nIG9wZFszXTsKIAl1bnNpZ25lZCBsb25nIHJldCA9IC0xVUw7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJdW5zaWduZWQgbG9uZyBvcGRbM107CiAKLQlpbnN0cnNbMF0gPSAweDdjNjAwMmE2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOwotCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJb3BkWzBdID0gKHVuc2lnbmVkIGxvbmcpaW5zdHJzOwogCW9wZFsxXSA9IDA7CiAJb3BkWzJdID0gMDsKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHZvaWQpKSBvcGQ7CisjZWxzZQorCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodm9pZCkpIGluc3RyczsKKyNlbmRpZgorCisJLyogbWZzcHIgcjMsbjsgYmxyICovCisJaW5zdHJzWzBdID0gMHg3YzYwMDJhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKKwlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCXN0b3JlX2luc3QoaW5zdHJzKTsKIAlzdG9yZV9pbnN0KGluc3RycysxKTsKLQljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHZvaWQpKSBvcGQ7CiAKIAlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKIAkJY2F0Y2hfbWVtb3J5X2Vycm9ycyA9IDE7CkBAIC0xNTA0LDE2ICsxNTA1LDIxIEBACiB7CiAJdW5zaWduZWQgaW50IGluc3Ryc1syXTsKIAl1bnNpZ25lZCBsb25nICgqY29kZSkodW5zaWduZWQgbG9uZyk7CisjaWZkZWYgQ09ORklHX1BQQzY0CiAJdW5zaWduZWQgbG9uZyBvcGRbM107CiAKLQlpbnN0cnNbMF0gPSAweDdjNjAwM2E2ICsgKChuICYgMHgxRikgPDwgMTYpICsgKChuICYgMHgzZTApIDw8IDYpOwotCWluc3Ryc1sxXSA9IDB4NGU4MDAwMjA7CiAJb3BkWzBdID0gKHVuc2lnbmVkIGxvbmcpaW5zdHJzOwogCW9wZFsxXSA9IDA7CiAJb3BkWzJdID0gMDsKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHVuc2lnbmVkIGxvbmcpKSBvcGQ7CisjZWxzZQorCWNvZGUgPSAodW5zaWduZWQgbG9uZyAoKikodW5zaWduZWQgbG9uZykpIGluc3RyczsKKyNlbmRpZgorCisJaW5zdHJzWzBdID0gMHg3YzYwMDNhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKKwlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCXN0b3JlX2luc3QoaW5zdHJzKTsKIAlzdG9yZV9pbnN0KGluc3RycysxKTsKLQljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHVuc2lnbmVkIGxvbmcpKSBvcGQ7CiAKIAlpZiAoc2V0am1wKGJ1c19lcnJvcl9qbXApID09IDApIHsKIAkJY2F0Y2hfbWVtb3J5X2Vycm9ycyA9IDE7CkBAIC0xNzk3LDcgKzE4MDMsNyBAQAogCWZvcig7Oyl7CiAJCWlmICghbW5vcmVhZCkKIAkJCW4gPSBtcmVhZChhZHJzLCB2YWwsIHNpemUpOwotCQlwcmludGYoIiUuMTZ4JWMiLCBhZHJzLCBicmV2PyAncic6ICcgJyk7CisJCXByaW50ZihSRUciJWMiLCBhZHJzLCBicmV2PyAncic6ICcgJyk7CiAJCWlmICghbW5vcmVhZCkgewogCQkJaWYgKGJyZXYpCiAJCQkJYnl0ZXJldih2YWwsIHNpemUpOwpAQCAtMTk3NiwxNyArMTk4MiwxOCBAQAogCQluciA9IG1yZWFkKGFkcnMsIHRlbXAsIHIpOwogCQlhZHJzICs9IG5yOwogCQlmb3IgKG0gPSAwOyBtIDwgcjsgKyttKSB7Ci0JCSAgICAgICAgaWYgKChtICYgNykgPT0gMCAmJiBtID4gMCkKLQkJCSAgICBwdXRjaGFyKCcgJyk7CisJCSAgICAgICAgaWYgKChtICYgKHNpemVvZihsb25nKSAtIDEpKSA9PSAwICYmIG0gPiAwKQorCQkJCXB1dGNoYXIoJyAnKTsKIAkJCWlmIChtIDwgbnIpCiAJCQkJcHJpbnRmKCIlLjJ4IiwgdGVtcFttXSk7CiAJCQllbHNlCiAJCQkJcHJpbnRmKCIlcyIsIGZhdWx0X2NoYXJzW2ZhdWx0X3R5cGVdKTsKIAkJfQotCQlpZiAobSA8PSA4KQotCQkJcHJpbnRmKCIgIik7Ci0JCWZvciAoOyBtIDwgMTY7ICsrbSkKKwkJZm9yICg7IG0gPCAxNjsgKyttKSB7CisJCSAgICAgICAgaWYgKChtICYgKHNpemVvZihsb25nKSAtIDEpKSA9PSAwKQorCQkJCXB1dGNoYXIoJyAnKTsKIAkJCXByaW50ZigiICAiKTsKKwkJfQogCQlwcmludGYoIiAgfCIpOwogCQlmb3IgKG0gPSAwOyBtIDwgcjsgKyttKSB7CiAJCQlpZiAobSA8IG5yKSB7CkBAIC0yMTUxLDcgKzIxNTgsNiBAQAogCQlvayA9IG1yZWFkKGEsICZ2LCAxKTsKIAkJaWYgKG9rICYmICFvb2spIHsKIAkJCXByaW50ZigiJS44eCAuLiAiLCBhKTsKLQkJCWZmbHVzaChzdGRvdXQpOwogCQl9IGVsc2UgaWYgKCFvayAmJiBvb2spCiAJCQlwcmludGYoIiUuOHhcbiIsIGEgLSBtc2tpcCk7CiAJCW9vayA9IG9rOwpAQCAtMjM3Miw3ICsyMzc4LDcgQEAKIGluY2hhcih2b2lkKQogewogCWlmIChsaW5lcHRyID09IE5VTEwgfHwgKmxpbmVwdHIgPT0gMCkgewotCQlpZiAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbikgPT0gTlVMTCkgeworCQlpZiAoeG1vbl9nZXRzKGxpbmUsIHNpemVvZihsaW5lKSkgPT0gTlVMTCkgewogCQkJbGluZXB0ciA9IE5VTEw7CiAJCQlyZXR1cm4gRU9GOwogCQl9CkBAIC0yNTI2LDQgKzI1MzIsMjkgQEAKIAkJX19kZWJ1Z2dlcl9kYWJyX21hdGNoID0gTlVMTDsKIAkJX19kZWJ1Z2dlcl9mYXVsdF9oYW5kbGVyID0gTlVMTDsKIAl9CisJeG1vbl9tYXBfc2NjKCk7CiB9CisKKyNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKK3N0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV94bW9uKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAorCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit7CisJLyogZW5zdXJlIHhtb24gaXMgZW5hYmxlZCAqLworCXhtb25faW5pdCgxKTsKKwlkZWJ1Z2dlcihwdF9yZWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfeG1vbl9vcCA9IAoreworCS5oYW5kbGVyID0Jc3lzcnFfaGFuZGxlX3htb24sCisJLmhlbHBfbXNnID0JIlhtb24iLAorCS5hY3Rpb25fbXNnID0JIkVudGVyaW5nIHhtb24iLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2V0dXBfeG1vbl9zeXNycSh2b2lkKQoreworCXJlZ2lzdGVyX3N5c3JxX2tleSgneCcsICZzeXNycV94bW9uX29wKTsKKwlyZXR1cm4gMDsKK30KK19faW5pdGNhbGwoc2V0dXBfeG1vbl9zeXNycSk7CisjZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmggYi9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmgKaW5kZXggNjkxNzNkZi4uNGVkODhhYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL29mMTI3NS5oCisrKyBiL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9vZjEyNzUuaApAQCAtMTksNiArMTksOSBAQAogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgKi8KIAoraW50CWNhbGxfcHJvbShjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LCAuLi4pOworaW50CWNhbGxfcHJvbV9yZXQoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKKwkJICAgICAgdW5zaWduZWQgaW50ICpyZXRzLCAuLi4pOwogdm9pZCAqCWNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKTsKIGludAltYXAodW5zaWduZWQgaW50IHBoeXMsIHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiB2b2lkCWVudGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQppbmRleCAwMmU2ZjIzLi4wYjk3OWMwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9NYWtlZmlsZQpAQCAtMyw0ICszLDQgQEAKICMKIAogbGliLXkgOj0gY2xhaW0ubyBlbnRlci5vIGV4aXQubyBmaW5kZGV2aWNlLm8gZ2V0cHJvcC5vIG9maW5pdC5vCVwKLQkgb2ZzdGRpby5vIHJlYWQubyByZWxlYXNlLm8gd3JpdGUubyBtYXAubworCSBvZnN0ZGlvLm8gcmVhZC5vIHJlbGVhc2UubyB3cml0ZS5vIG1hcC5vIGNhbGxfcHJvbS5vCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29mMTI3NS9jYWxsX3Byb20uYyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NhbGxfcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzlhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jYWxsX3Byb20uYwpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAib2YxMjc1LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludCBjYWxsX3Byb20oY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwgLi4uKQoreworCWludCBpOworCXN0cnVjdCBwcm9tX2FyZ3MgeworCQljb25zdCBjaGFyICpzZXJ2aWNlOworCQlpbnQgbmFyZ3M7CisJCWludCBucmV0OworCQl1bnNpZ25lZCBpbnQgYXJnc1sxMl07CisJfSBhcmdzOworCXZhX2xpc3QgbGlzdDsKKworCWFyZ3Muc2VydmljZSA9IHNlcnZpY2U7CisJYXJncy5uYXJncyA9IG5hcmdzOworCWFyZ3MubnJldCA9IG5yZXQ7CisKKwl2YV9zdGFydChsaXN0LCBucmV0KTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJYXJncy5hcmdzW2ldID0gdmFfYXJnKGxpc3QsIHVuc2lnbmVkIGludCk7CisJdmFfZW5kKGxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG5yZXQ7IGkrKykKKwkJYXJncy5hcmdzW25hcmdzK2ldID0gMDsKKworCWlmIChvZl9wcm9tX2VudHJ5KCZhcmdzKSA8IDApCisJCXJldHVybiAtMTsKKworCXJldHVybiAobnJldCA+IDApPyBhcmdzLmFyZ3NbbmFyZ3NdOiAwOworfQorCitpbnQgY2FsbF9wcm9tX3JldChjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LAorCQkgIHVuc2lnbmVkIGludCAqcmV0cywgLi4uKQoreworCWludCBpOworCXN0cnVjdCBwcm9tX2FyZ3MgeworCQljb25zdCBjaGFyICpzZXJ2aWNlOworCQlpbnQgbmFyZ3M7CisJCWludCBucmV0OworCQl1bnNpZ25lZCBpbnQgYXJnc1sxMl07CisJfSBhcmdzOworCXZhX2xpc3QgbGlzdDsKKworCWFyZ3Muc2VydmljZSA9IHNlcnZpY2U7CisJYXJncy5uYXJncyA9IG5hcmdzOworCWFyZ3MubnJldCA9IG5yZXQ7CisKKwl2YV9zdGFydChsaXN0LCByZXRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmFyZ3M7IGkrKykKKwkJYXJncy5hcmdzW2ldID0gdmFfYXJnKGxpc3QsIHVuc2lnbmVkIGludCk7CisJdmFfZW5kKGxpc3QpOworCisJZm9yIChpID0gMDsgaSA8IG5yZXQ7IGkrKykKKwkJYXJncy5hcmdzW25hcmdzK2ldID0gMDsKKworCWlmIChvZl9wcm9tX2VudHJ5KCZhcmdzKSA8IDApCisJCXJldHVybiAtMTsKKworCWlmIChyZXRzICE9ICh2b2lkICopIDApCisJCWZvciAoaSA9IDE7IGkgPCBucmV0OyArK2kpCisJCQlyZXRzW2ktMV0gPSBhcmdzLmFyZ3NbbmFyZ3MraV07CisKKwlyZXR1cm4gKG5yZXQgPiAwKT8gYXJncy5hcmdzW25hcmdzXTogMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jbGFpbS5jCmluZGV4IDEzMTY5YTUuLjFlZDNhZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2xhaW0uYwpAQCAtOSwyNyArOSw4NCBAQAogICovCiAKICNpbmNsdWRlICJvZjEyNzUuaCIKKyNpbmNsdWRlICJub25zdGRpby5oIgogCi12b2lkICoKLWNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQorLyoKKyAqIE9sZGVyIE9GJ3MgcmVxdWlyZSB0aGF0IHdoZW4gY2xhaW1pbmcgYSBzcGVjaWZpYyByYW5nZSBvZiBhZGRyZXNzZXMsCisgKiB3ZSBjbGFpbSB0aGUgcGh5c2ljYWwgc3BhY2UgaW4gdGhlIC9tZW1vcnkgbm9kZSBhbmQgdGhlIHZpcnR1YWwKKyAqIHNwYWNlIGluIHRoZSBjaG9zZW4gbW11IG5vZGUsIGFuZCB0aGVuIGRvIGEgbWFwIG9wZXJhdGlvbiB0bworICogbWFwIHZpcnR1YWwgdG8gcGh5c2ljYWwuCisgKi8KK3N0YXRpYyBpbnQgbmVlZF9tYXAgPSAtMTsKK3N0YXRpYyBpaGFuZGxlIGNob3Nlbl9tbXU7CitzdGF0aWMgcGhhbmRsZSBtZW1vcnk7CisKKy8qIHJldHVybnMgdHJ1ZSBpZiBzMiBpcyBhIHByZWZpeCBvZiBzMSAqLworc3RhdGljIGludCBzdHJpbmdfbWF0Y2goY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQogewotICAgIHN0cnVjdCBwcm9tX2FyZ3MgewotCWNoYXIgKnNlcnZpY2U7Ci0JaW50IG5hcmdzOwotCWludCBucmV0OwotCXVuc2lnbmVkIGludCB2aXJ0OwotCXVuc2lnbmVkIGludCBzaXplOwotCXVuc2lnbmVkIGludCBhbGlnbjsKLQl2b2lkICpyZXQ7Ci0gICAgfSBhcmdzOworCWZvciAoOyAqczI7ICsrczIpCisJCWlmICgqczErKyAhPSAqczIpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KIAotICAgIGFyZ3Muc2VydmljZSA9ICJjbGFpbSI7Ci0gICAgYXJncy5uYXJncyA9IDM7Ci0gICAgYXJncy5ucmV0ID0gMTsKLSAgICBhcmdzLnZpcnQgPSB2aXJ0OwotICAgIGFyZ3Muc2l6ZSA9IHNpemU7Ci0gICAgYXJncy5hbGlnbiA9IGFsaWduOwotICAgIGFyZ3MucmV0ID0gKHZvaWQgKikgMDsKLSAgICAoKm9mX3Byb21fZW50cnkpKCZhcmdzKTsKLSAgICByZXR1cm4gYXJncy5yZXQ7CitzdGF0aWMgaW50IGNoZWNrX29mX3ZlcnNpb24odm9pZCkKK3sKKwlwaGFuZGxlIG9wcm9tLCBjaG9zZW47CisJY2hhciB2ZXJzaW9uWzY0XTsKKworCW9wcm9tID0gZmluZGRldmljZSgiL29wZW5wcm9tIik7CisJaWYgKG9wcm9tID09IE9GX0lOVkFMSURfSEFORExFKQorCQlyZXR1cm4gMDsKKwlpZiAoZ2V0cHJvcChvcHJvbSwgIm1vZGVsIiwgdmVyc2lvbiwgc2l6ZW9mKHZlcnNpb24pKSA8PSAwKQorCQlyZXR1cm4gMDsKKwl2ZXJzaW9uW3NpemVvZih2ZXJzaW9uKS0xXSA9IDA7CisJcHJpbnRmKCJPRiB2ZXJzaW9uID0gJyVzJ1xuIiwgdmVyc2lvbik7CisJaWYgKCFzdHJpbmdfbWF0Y2godmVyc2lvbiwgIk9wZW4gRmlybXdhcmUsIDEuIikKKwkgICAgJiYgIXN0cmluZ19tYXRjaCh2ZXJzaW9uLCAiRmlybVdvcmtzLDMuIikpCisJCXJldHVybiAwOworCWNob3NlbiA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKTsKKwlpZiAoY2hvc2VuID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCWNob3NlbiA9IGZpbmRkZXZpY2UoIi9jaG9zZW5AMCIpOworCQlpZiAoY2hvc2VuID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCQlwcmludGYoIm5vIGNob3NlblxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAoZ2V0cHJvcChjaG9zZW4sICJtbXUiLCAmY2hvc2VuX21tdSwgc2l6ZW9mKGNob3Nlbl9tbXUpKSA8PSAwKSB7CisJCXByaW50Zigibm8gbW11XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lbW9yeSA9IChpaGFuZGxlKSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCAiL21lbW9yeSIpOworCWlmIChtZW1vcnkgPT0gT0ZfSU5WQUxJRF9IQU5ETEUpIHsKKwkJbWVtb3J5ID0gKGloYW5kbGUpIGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsICIvbWVtb3J5QDAiKTsKKwkJaWYgKG1lbW9yeSA9PSBPRl9JTlZBTElEX0hBTkRMRSkgeworCQkJcHJpbnRmKCJubyBtZW1vcnkgbm9kZVxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlwcmludGYoIm9sZCBPRiBkZXRlY3RlZFxuIik7CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgKmNsYWltKHVuc2lnbmVkIGludCB2aXJ0LCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IGFsaWduKQoreworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJlc3VsdDsKKworCWlmIChuZWVkX21hcCA8IDApCisJCW5lZWRfbWFwID0gY2hlY2tfb2ZfdmVyc2lvbigpOworCWlmIChhbGlnbiB8fCAhbmVlZF9tYXApCisJCXJldHVybiAodm9pZCAqKSBjYWxsX3Byb20oImNsYWltIiwgMywgMSwgdmlydCwgc2l6ZSwgYWxpZ24pOworCQorCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwgImNsYWltIiwgbWVtb3J5LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwlpZiAocmV0ICE9IDAgfHwgcmVzdWx0ID09IC0xKQorCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LCAiY2xhaW0iLCBjaG9zZW5fbW11LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwkvKiAweDEyID09IGNvaGVyZW50ICsgcmVhZC93cml0ZSAqLworCXJldCA9IGNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCA2LCAxLCAibWFwIiwgY2hvc2VuX21tdSwKKwkJCTB4MTIsIHNpemUsIHZpcnQsIHZpcnQpOworCXJldHVybiB2aXJ0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jCmluZGV4IDJjMGY3Y2IuLjBkY2IxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2ZpbmRkZXZpY2UuYworKysgYi9hcmNoL3BwYy9ib290L29mMTI3NS9maW5kZGV2aWNlLmMKQEAgLTEwLDIyICsxMCw3IEBACiAKICNpbmNsdWRlICJvZjEyNzUuaCIKIAotcGhhbmRsZQotZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKQorcGhhbmRsZSBmaW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgc3RydWN0IHByb21fYXJncyB7Ci0JY2hhciAqc2VydmljZTsKLQlpbnQgbmFyZ3M7Ci0JaW50IG5yZXQ7Ci0JY29uc3QgY2hhciAqZGV2c3BlYzsKLQlwaGFuZGxlIGRldmljZTsKLSAgICB9IGFyZ3M7Ci0KLSAgICBhcmdzLnNlcnZpY2UgPSAiZmluZGRldmljZSI7Ci0gICAgYXJncy5uYXJncyA9IDE7Ci0gICAgYXJncy5ucmV0ID0gMTsKLSAgICBhcmdzLmRldnNwZWMgPSBuYW1lOwotICAgIGFyZ3MuZGV2aWNlID0gT0ZfSU5WQUxJRF9IQU5ETEU7Ci0gICAgKCpvZl9wcm9tX2VudHJ5KSgmYXJncyk7Ci0gICAgcmV0dXJuIGFyZ3MuZGV2aWNlOworCXJldHVybiAocGhhbmRsZSkgY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZSBiL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCmluZGV4IDAzNDE1MjMuLjgzYTY0MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb3BlbmZpcm13YXJlL01ha2VmaWxlCkBAIC04MCw4ICs4MCw3IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsbWtub3RlKQogCiAKLSQob2JqKS9jb2ZmY3J0MC5vOiBFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsIC1EWENPRkYKLSQob2JqKS9jcnQwLm86ICAgICBFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCiskKG9iaikvY29mZmNydDAubzogRVhUUkFfQUZMQUdTIDo9IC1EWENPRkYKIHRhcmdldHMgKz0gY29mZmNydDAubyBjcnQwLm8KICQob2JqKS9jb2ZmY3J0MC5vICQob2JqKS9jcnQwLm86ICQoY29tbW9uKS9jcnQwLlMgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsYXNfb19TKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCmluZGV4IDc2YTU1YTQuLjE3YTRkYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDcgQEAKIGV4dHJhLSQoQ09ORklHX1BPV0VSNCkJCSs9IGlkbGVfcG93ZXI0Lm8KIGV4dHJhLXkJCQkJKz0gdm1saW51eC5sZHMKIAotb2JqLXkJCQkJOj0gZW50cnkubyB0cmFwcy5vIGlycS5vIGlkbGUubyB0aW1lLm8gbWlzYy5vIFwKK29iai15CQkJCTo9IGVudHJ5Lm8gdHJhcHMubyBpZGxlLm8gdGltZS5vIG1pc2MubyBcCiAJCQkJCXByb2Nlc3MubyBhbGlnbi5vIFwKIAkJCQkJc2V0dXAubyBcCiAJCQkJCXBwY19odGFiLm8KQEAgLTM4LDggKzM4LDcgQEAKICMgVGhlc2UgYXJlIGhlcmUgd2hpbGUgd2UgZG8gdGhlIGFyY2hpdGVjdHVyZSBtZXJnZQogCiBlbHNlCi1vYmoteQkJCQk6PSBpcnEubyBpZGxlLm8gXAotCQkJCQlhbGlnbi5vCitvYmoteQkJCQk6PSBpZGxlLm8gYWxpZ24ubwogb2JqLSQoQ09ORklHXzZ4eCkJCSs9IGwyY3IubyBjcHVfc2V0dXBfNnh4Lm8KIG9iai0kKENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EKQkrPSBzd3N1c3Aubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA5NjgyNjFkLi5mZTBlNzY3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogCiAjZGVmaW5lIERFRklORShzeW0sIHZhbCkgXAogCWFzbSB2b2xhdGlsZSgiXG4tPiIgI3N5bSAiICUwICIgI3ZhbCA6IDogImkiICh2YWwpKQpAQCAtMTQzLDUgKzE0NCwzMiBAQAogCiAJREVGSU5FKFRBU0tfU0laRSwgVEFTS19TSVpFKTsKIAlERUZJTkUoTlVNX1VTRVJfU0VHTUVOVFMsIFRBU0tfU0laRT4+MjgpOworCisJLyogZGF0YXBhZ2Ugb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KKwlERUZJTkUoQ0ZHX1RCX09SSUdfU1RBTVAsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX29yaWdfc3RhbXApKTsKKwlERUZJTkUoQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHRiX3RpY2tzX3Blcl9zZWMpKTsKKwlERUZJTkUoQ0ZHX1RCX1RPX1hTLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl90b194cykpOworCURFRklORShDRkdfU1RBTVBfWFNFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3RhbXBfeHNlYykpOworCURFRklORShDRkdfVEJfVVBEQVRFX0NPVU5ULCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl91cGRhdGVfY291bnQpKTsKKwlERUZJTkUoQ0ZHX1RaX01JTlVURVdFU1QsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHR6X21pbnV0ZXN3ZXN0KSk7CisJREVGSU5FKENGR19UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9kc3R0aW1lKSk7CisJREVGSU5FKENGR19TWVNDQUxMX01BUDMyLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzeXNjYWxsX21hcF8zMikpOworCURFRklORShXVE9NX0NMT0NLX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19zZWMpKTsKKwlERUZJTkUoV1RPTV9DTE9DS19OU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB3dG9tX2Nsb2NrX25zZWMpKTsKKwlERUZJTkUoVFZBTDMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3NlYykpOworCURFRklORShUVkFMMzJfVFZfVVNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3VzZWMpKTsKKwlERUZJTkUoVFNQRUMzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1lc3BlYywgdHZfc2VjKSk7CisJREVGSU5FKFRTUEVDMzJfVFZfTlNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWVzcGVjLCB0dl9uc2VjKSk7CisKKwkvKiB0aW1ldmFsL3RpbWV6b25lIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCisJREVGSU5FKFRaT05FX1RaX01JTldFU1QsIG9mZnNldG9mKHN0cnVjdCB0aW1lem9uZSwgdHpfbWludXRlc3dlc3QpKTsKKwlERUZJTkUoVFpPTkVfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHRpbWV6b25lLCB0el9kc3R0aW1lKSk7CisKKwkvKiBPdGhlciBiaXRzIHVzZWQgYnkgdGhlIHZkc28gKi8KKwlERUZJTkUoQ0xPQ0tfUkVBTFRJTUUsIENMT0NLX1JFQUxUSU1FKTsKKwlERUZJTkUoQ0xPQ0tfTU9OT1RPTklDLCBDTE9DS19NT05PVE9OSUMpOworCURFRklORShOU0VDX1BFUl9TRUMsIE5TRUNfUEVSX1NFQyk7CisJREVGSU5FKENMT0NLX1JFQUxUSU1FX1JFUywgVElDS19OU0VDKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKaW5kZXggYWViMzQ5Yi4uZjNkMjc0YyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaAorKysgYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC0zNTgsNiArMzU4LDYgQEAKIAlOT1JNQUxfRVhDRVBUSU9OX1BST0xPRzsJCQkJCSAgICAgIFwKIAlibmUJbG9hZF91cF9mcHU7CQkvKiBpZiBmcm9tIHVzZXIsIGp1c3QgbG9hZCBpdCB1cCAqLyAgIFwKIAlhZGRpCXIzLHIxLFNUQUNLX0ZSQU1FX09WRVJIRUFEOwkJCQkgICAgICBcCi0JRVhDX1hGRVJfRUVfTElURSgweDgwMCwgS2VybmVsRlApCisJRVhDX1hGRVJfRUVfTElURSgweDgwMCwga2VybmVsX2ZwX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbikKIAogI2VuZGlmIC8qIF9fSEVBRF9CT09LRV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcHBjL2tlcm5lbC9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJiMmI5Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAsMCBAQAotLyoKLSAqICBhcmNoL3BwYy9rZXJuZWwvaXJxLmMKLSAqCi0gKiAgRGVyaXZlZCBmcm9tIGFyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKLSAqICAgIENvcHlyaWdodCAoQykgMTk5MiBMaW51cyBUb3J2YWxkcwotICogIEFkYXB0ZWQgZnJvbSBhcmNoL2kzODYgYnkgR2FyeSBUaG9tYXMKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NS0xOTk2IEdhcnkgVGhvbWFzIChnZHRAbGludXhwcGMub3JnKQotICogIFVwZGF0ZWQgYW5kIG1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgotICogICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgQ29ydCBEb3VnYW4KLSAqICBBZGFwdGVkIGZvciBQb3dlciBNYWNpbnRvc2ggYnkgUGF1bCBNYWNrZXJyYXMKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCi0gKiAgQW1pZ2EvQVBVUyBjaGFuZ2VzIGJ5IEplc3BlciBTa292IChqc2tvdkBjeWdudXMuY28udWspLgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB1c2VkIGJ5IHZhcmlvdXMgSVJRIGhhbmRsaW5nIHJvdXRpbmVzOgotICogYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRJ3Mgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGVzZSByb3V0aW5lcwotICogaW5zdGVhZCBvZiBqdXN0IGdyYWJiaW5nIHRoZW0uIFRodXMgc2V0dXBzIHdpdGggZGlmZmVyZW50IElSUSBudW1iZXJzCi0gKiBzaG91bGRuJ3QgcmVzdWx0IGluIGFueSB3ZWlyZCBzdXJwcmlzZXMsIGFuZCBpbnN0YWxsaW5nIG5ldyBoYW5kbGVycwotICogc2hvdWxkIGJlIGVhc2llci4KLSAqCi0gKiBUaGUgTVBDOHh4IGhhcyBhbiBpbnRlcnJ1cHQgbWFzayBpbiB0aGUgU0lVLiAgSWYgYSBiaXQgaXMgc2V0LCB0aGUKLSAqIGludGVycnVwdCBpcyBfZW5hYmxlZF8uICBBcyBleHBlY3RlZCwgSVJRMCBpcyBiaXQgMCBpbiB0aGUgMzItYml0Ci0gKiBtYXNrIHJlZ2lzdGVyIChvZiB3aGljaCBvbmx5IDE2IGFyZSBkZWZpbmVkKSwgaGVuY2UgdGhlIHdlaXJkIHNoaWZ0aW5nCi0gKiBhbmQgY29tcGxlbWVudCBvZiB0aGUgY2FjaGVkX2lycV9tYXNrLiAgSSB3YW50IHRvIGJlIGFibGUgdG8gc3R1ZmYKLSAqIHRoaXMgcmlnaHQgaW50byB0aGUgU0lVIFNNQVNLIHJlZ2lzdGVyLgotICogTWFueSBvZiB0aGUgcHJlcC9jaHJwIGZ1bmN0aW9ucyBhcmUgY29uZGl0aW9uYWwgY29tcGlsZWQgb24gQ09ORklHXzh4eAotICogdG8gcmVkdWNlIGNvZGUgc3BhY2UgYW5kIHVuZGVmaW5lZCBmdW5jdGlvbiByZWZlcmVuY2VzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0KLSNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKLQotZXh0ZXJuIGF0b21pY190IGlwaV9yZWN2OwotZXh0ZXJuIGF0b21pY190IGlwaV9zZW50OwotCi0jZGVmaW5lIE1BWENPVU5UIDEwMDAwMDAwCi0KLWludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0cyA9IDA7Ci1zdHJ1Y3QgaXJxYWN0aW9uICpwcGNfaXJxX2FjdGlvbltOUl9JUlFTXTsKLXVuc2lnbmVkIGxvbmcgcHBjX2NhY2hlZF9pcnFfbWFza1tOUl9NQVNLX1dPUkRTXTsKLXVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKLWF0b21pY190IHBwY19uX2xvc3RfaW50ZXJydXB0czsKLQotI2lmZGVmIENPTkZJR19UQVVfSU5UCi1leHRlcm4gaW50IHRhdV9pbml0aWFsaXplZDsKLWV4dGVybiBpbnQgdGF1X2ludGVycnVwdHMoaW50KTsKLSNlbmRpZgotCi1pbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKLXsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGkgPT0gMCkgewotCQlzZXFfcHV0cyhwLCAiICAgICAgICAgICAiKTsKLQkJZm9yIChqPTA7IGo8TlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiQ1BVJWQgICAgICAgIiwgaik7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotCX0KLQotCWlmIChpIDwgTlJfSVJRUykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCQlhY3Rpb24gPSBpcnFfZGVzY1tpXS5hY3Rpb247Ci0JCWlmICggIWFjdGlvbiB8fCAhYWN0aW9uLT5oYW5kbGVyICkKLQkJCWdvdG8gc2tpcDsKLQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKLSNpZmRlZiBDT05GSUdfU01QCi0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsCi0JCQkJCSAgIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKLSNlbHNlCi0JCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCQlpZiAoaXJxX2Rlc2NbaV0uaGFuZGxlcikKLQkJCXNlcV9wcmludGYocCwgIiAlcyAiLCBpcnFfZGVzY1tpXS5oYW5kbGVyLT50eXBlbmFtZSk7Ci0JCWVsc2UKLQkJCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKLQkJc2VxX3ByaW50ZihwLCAiJXMiLCAoaXJxX2Rlc2NbaV0uc3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwotCQlzZXFfcHJpbnRmKHAsICIgICAgJXMiLCBhY3Rpb24tPm5hbWUpOwotCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCi0JCQlzZXFfcHJpbnRmKHAsICIsICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJc2VxX3B1dGMocCwgJ1xuJyk7Ci1za2lwOgotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfZGVzY1tpXS5sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIGlmIChpID09IE5SX0lSUVMpIHsKLSNpZmRlZiBDT05GSUdfVEFVX0lOVAotCQlpZiAodGF1X2luaXRpYWxpemVkKXsKLQkJCXNlcV9wdXRzKHAsICJUQVU6ICIpOwotCQkJZm9yIChqID0gMDsgaiA8IE5SX0NQVVM7IGorKykKLQkJCQlpZiAoY3B1X29ubGluZShqKSkKLQkJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCB0YXVfaW50ZXJydXB0cyhqKSk7Ci0JCQlzZXFfcHV0cyhwLCAiICBQb3dlclBDICAgICAgICAgICAgIFRoZXJtYWwgQXNzaXN0IChjcHUgdGVtcClcbiIpOwotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0JCS8qIHNob3VsZCB0aGlzIGJlIHBlciBwcm9jZXNzb3Igc2VuZC9yZWNlaXZlPyAqLwotCQlzZXFfcHJpbnRmKHAsICJJUEkgKHJlY3Yvc2VudCk6ICUxMHUvJXVcbiIsCi0JCQkJYXRvbWljX3JlYWQoJmlwaV9yZWN2KSwgYXRvbWljX3JlYWQoJmlwaV9zZW50KSk7Ci0jZW5kaWYKLQkJc2VxX3ByaW50ZihwLCAiQkFEOiAlMTB1XG4iLCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0cyk7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGRvX0lSUShzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnQgaXJxLCBmaXJzdCA9IDE7Ci0gICAgICAgIGlycV9lbnRlcigpOwotCi0JLyoKLQkgKiBFdmVyeSBwbGF0Zm9ybSBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgcHBjX21kLmdldF9pcnEuCi0JICogVGhpcyBmdW5jdGlvbiB3aWxsIGVpdGhlciByZXR1cm4gYW4gaXJxIG51bWJlciBvciAtMSB0bwotCSAqIGluZGljYXRlIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcuICBCdXQgdGhlIGZpcnN0IHRpbWUKLQkgKiB0aHJvdWdoIHRoZSBsb29wIHRoaXMgbWVhbnMgdGhlcmUgd2Fzbid0IGFuZCBJUlEgcGVuZGluZy4KLQkgKiBUaGUgdmFsdWUgLTIgaXMgZm9yIGJ1Z2d5IGhhcmR3YXJlIGFuZCBtZWFucyB0aGF0IHRoaXMgSVJRCi0JICogaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLiAtLSBUb20KLQkgKi8KLQl3aGlsZSAoKGlycSA9IHBwY19tZC5nZXRfaXJxKHJlZ3MpKSA+PSAwKSB7Ci0JCV9fZG9fSVJRKGlycSwgcmVncyk7Ci0JCWZpcnN0ID0gMDsKLQl9Ci0JaWYgKGlycSAhPSAtMiAmJiBmaXJzdCkKLQkJLyogVGhhdCdzIG5vdCBTTVAgc2FmZSAuLi4gYnV0IHdobyBjYXJlcyA/ICovCi0JCXBwY19zcHVyaW91c19pbnRlcnJ1cHRzKys7Ci0gICAgICAgIGlycV9leGl0KCk7Ci19Ci0KLXZvaWQgX19pbml0IGluaXRfSVJRKHZvaWQpCi17Ci0JcHBjX21kLmluaXRfSVJRKCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TIGIvYXJjaC9wcGMva2VybmVsL21pc2MuUwppbmRleCBhZTZhZjI5Li41ZTYxMTI0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKQEAgLTQ5Nyw5ICs0OTcsOSBAQAogICogYW5kIGludmFsaWRhdGUgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gY2FjaGUgYmxvY2tzLgogICogVGhpcyBpcyBhIG5vLW9wIG9uIHRoZSA2MDEuCiAgKgotICogZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKKyAqIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCkKICAqLwotX0dMT0JBTChmbHVzaF9pY2FjaGVfcmFuZ2UpCitfR0xPQkFMKF9fZmx1c2hfaWNhY2hlX3JhbmdlKQogQkVHSU5fRlRSX1NFQ1RJT04KIAlibHIJCQkJLyogZm9yIDYwMSwgZG8gbm90aGluZyAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcGNpLmMgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKaW5kZXggZThmNGU1Ny4uNDhlZDU4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wY2kuYwpAQCAtNjIsMjAgKzYyLDYgQEAKIHN0YXRpYyBpbnQgcGNpX2J1c19jb3VudDsKIAogc3RhdGljIHZvaWQKLWZpeHVwX3JldjFfNTNjODEwKHN0cnVjdCBwY2lfZGV2KiBkZXYpCi17Ci0JLyogcmV2IDEgbmNyNTNjODEwIGNoaXBzIGRvbid0IHNldCB0aGUgY2xhc3MgYXQgYWxsIHdoaWNoIG1lYW5zCi0JICogdGhleSBkb24ndCBnZXQgdGhlaXIgcmVzb3VyY2VzIHJlbWFwcGVkLiBGaXggdGhhdCBoZXJlLgotCSAqLwotCi0JaWYgKChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCkpIHsKLQkJcHJpbnRrKCJOQ1IgNTNjODEwIHJldiAxIGRldGVjdGVkLCBzZXR0aW5nIFBDSSBjbGFzcy5cbiIpOwotCQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0NTSTsKLQl9Ci19Ci1ERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsCVBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwJZml4dXBfcmV2MV81M2M4MTApOwotCi1zdGF0aWMgdm9pZAogZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggZTBjYTYxYi4uNjYwNzNmNyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CisjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogCiAjaWZkZWYgIENPTkZJR184eHgKICNpbmNsdWRlIDxhc20vY29tbXByb2MuaD4KQEAgLTU3LDcgKzU4LDYgQEAKIGV4dGVybiB2b2lkIGFsaWdubWVudF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgcHJvZ3JhbV9jaGVja19leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgc2luZ2xlX3N0ZXBfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiBpbnQgZG9fc2lnbmFsKHNpZ3NldF90ICosIHN0cnVjdCBwdF9yZWdzICopOwogZXh0ZXJuIGludCBwbWFjX25ld3dvcmxkOwogZXh0ZXJuIGludCBzeXNfc2lncmV0dXJuKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIApAQCAtNzgsNyArNzgsNiBAQAogRVhQT1JUX1NZTUJPTChzaW5nbGVfc3RlcF9leGNlcHRpb24pOwogRVhQT1JUX1NZTUJPTChzeXNfc2lncmV0dXJuKTsKIEVYUE9SVF9TWU1CT0wocHBjX25fbG9zdF9pbnRlcnJ1cHRzKTsKLUVYUE9SVF9TWU1CT0wocHBjX2xvc3RfaW50ZXJydXB0cyk7CiAKIEVYUE9SVF9TWU1CT0woSVNBX0RNQV9USFJFU0hPTEQpOwogRVhQT1JUX1NZTUJPTChETUFfTU9ERV9SRUFEKTsKQEAgLTE3Niw2ICsxNzUsNyBAQAogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9hbGwodm9pZCk7CiBFWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9hbGwpOwogI2VuZGlmCiAKQEAgLTIxNyw5ICsyMTcsNiBAQAogRVhQT1JUX1NZTUJPTChjdWRhX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTChjdWRhX3BvbGwpOwogI2VuZGlmIC8qIENPTkZJR19BREJfQ1VEQSAqLwotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQotRVhQT1JUX1NZTUJPTChfbWFjaGluZSk7Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIEVYUE9SVF9TWU1CT0woc3lzX2N0cmxlcik7CiBFWFBPUlRfU1lNQk9MKHBtYWNfbmV3d29ybGQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMgYi9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYwppbmRleCA2YmNiODVkLi5kYzU1ZTFhIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYwpAQCAtNzYsNiArNzYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiBpbnQgX21hY2hpbmUgPSAwOworRVhQT1JUX1NZTUJPTChfbWFjaGluZSk7CiAKIGV4dGVybiB2b2lkIHByZXBfaW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LAogCQl1bnNpZ25lZCBsb25nIHI1LCB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfcGljLmMKaW5kZXggOWYyZDk1ZS4uNDc0MmJmNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfcGljLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3BtYWNfcGljLmMKQEAgLTc1LDYgKzc1LDkgQEAKICNkZWZpbmUgR0FUV0lDS19JUlFfUE9PTF9TSVpFICAgICAgICAxMAogc3RhdGljIHN0cnVjdCBpbnRlcnJ1cHRfaW5mbyBnYXR3aWNrX2ludF9wb29sW0dBVFdJQ0tfSVJRX1BPT0xfU0laRV07CiAKKyNkZWZpbmUgTlJfTUFTS19XT1JEUwkoKE5SX0lSUVMgKyAzMSkgLyAzMikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107CisKIC8qCiAgKiBNYXJrIGFuIGlycSBhcyAibG9zdCIuICBUaGlzIGlzIG9ubHkgdXNlZCBvbiB0aGUgcG1hYwogICogc2luY2UgaXQgY2FuIGxvc2UgaW50ZXJydXB0cyAoc2VlIHBtYWNfc2V0X2lycV9tYXNrKS4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCmluZGV4IDA2N2Q3ZDUuLjQ0MTU3NDggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYwpAQCAtNjEsNiArNjEsMTUgQEAKICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS90b2RjLmg+CiAKKy8qIHByZXAgcmVnaXN0ZXJzIGZvciBMMiAqLworI2RlZmluZSBDQUNIRUNSQkEgICAgICAgMHg4MDAwMDgyMyAgICAgIC8qIENhY2hlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYWRkcmVzcyAqLworI2RlZmluZSBMMkNBQ0hFX01BU0sJMHgwMwkvKiBNYXNrIGZvciAyIEwyIENhY2hlIGJpdHMgKi8KKyNkZWZpbmUgTDJDQUNIRV81MTJLQgkweDAwCS8qIDUxMktCICovCisjZGVmaW5lIEwyQ0FDSEVfMjU2S0IJMHgwMQkvKiAyNTZLQiAqLworI2RlZmluZSBMMkNBQ0hFXzFNQgkweDAyCS8qIDFNQiAqLworI2RlZmluZSBMMkNBQ0hFX05PTkUJMHgwMwkvKiBOT05FICovCisjZGVmaW5lIEwyQ0FDSEVfUEFSSVRZICAweDA4ICAgIC8qIE1hc2sgZm9yIEwyIENhY2hlIFBhcml0eSBQcm90ZWN0ZWQgYml0ICovCisKIFRPRENfQUxMT0MoKTsKIAogdW5zaWduZWQgY2hhciB1Y1N5c3RlbVR5cGU7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYyBiL2FyY2gvcHBjL3N5c2xpYi9jcG0yX3BpYy5jCmluZGV4IGM4NjdiZTYuLjI5ZDk1ZDQxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljCXVfY2hhcglpcnFfdG9fc2l1Yml0W10gPSB7CiAJIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsICA5LAogCSA4LCAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwKLQkgMiwgIDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsCisJIDIsICAxLCAgMCwgMTQsIDEzLCAxMiwgMTEsIDEwLAogCSA5LCAgOCwgIDcsICA2LCAgNSwgIDQsICAzLCAgMCwKIAkzMSwgMzAsIDI5LCAyOCwgMjcsIDI2LCAyNSwgMjQsCiAJMjMsIDIyLCAyMSwgMjAsIDE5LCAxOCwgMTcsIDE2LApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnIGIvYXJjaC9wcGM2NC9LY29uZmlnCmluZGV4IDI5NTUyMzQuLjlkMTBjMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcKQEAgLTI3OSwxNyArMjc5LDEyIEBACiAgICAgICAgZGVmX2Jvb2wgeQogICAgICAgIGRlcGVuZHMgb24gIU5VTUEKIAotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwotCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gTlVNQQogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKQEAgLTI5Nyw2ICsyOTIsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KICMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKICMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkUmFtRGlzay5jCmluZGV4IDdmMmMwOTQuLmMwMmE5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMKKysrIGIvYXJjaC9wcGM2NC9ib290L2FkZFJhbURpc2suYwpAQCAtNSwxMSArNSw1OSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZWxmLmg+CiAKICNkZWZpbmUgRWxmSGVhZGVyU2l6ZSAgKDY0ICogMTAyNCkKICNkZWZpbmUgRWxmUGFnZXMgIChFbGZIZWFkZXJTaXplIC8gNDA5NikKICNkZWZpbmUgS0VSTkVMQkFTRSAoMHhjMDAwMDAwMDAwMDAwMDAwKQorI2RlZmluZSBfQUxJR05fVVAoYWRkcixzaXplKQkoKChhZGRyKSsoKHNpemUpLTEpKSYofigoc2l6ZSktMSkpKQogCitzdHJ1Y3QgYWRkcl9yYW5nZSB7CisJdW5zaWduZWQgbG9uZyBsb25nIGFkZHI7CisJdW5zaWduZWQgbG9uZyBtZW1zaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworc3RhdGljIGludCBjaGVja19lbGY2NCh2b2lkICpwLCBpbnQgc2l6ZSwgc3RydWN0IGFkZHJfcmFuZ2UgKnIpCit7CisJRWxmNjRfRWhkciAqZWxmNjQgPSBwOworCUVsZjY0X1BoZHIgKmVsZjY0cGg7CisKKwlpZiAoZWxmNjQtPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9NQUcxXSAhPSBFTEZNQUcxIHx8CisJICAgIGVsZjY0LT5lX2lkZW50W0VJX01BRzJdICE9IEVMRk1BRzIgfHwKKwkgICAgZWxmNjQtPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMyB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1M2NCB8fAorCSAgICBlbGY2NC0+ZV9pZGVudFtFSV9EQVRBXSAhPSBFTEZEQVRBMk1TQiB8fAorCSAgICBlbGY2NC0+ZV90eXBlICE9IEVUX0VYRUMgfHwgZWxmNjQtPmVfbWFjaGluZSAhPSBFTV9QUEM2NCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKGVsZjY0LT5lX3Bob2ZmICsgc2l6ZW9mKEVsZjY0X1BoZHIpKSA+IHNpemUpCisJCXJldHVybiAwOworCisJZWxmNjRwaCA9IChFbGY2NF9QaGRyICopICgodW5zaWduZWQgbG9uZyllbGY2NCArCisJCQkJICAodW5zaWduZWQgbG9uZyllbGY2NC0+ZV9waG9mZik7CisKKwlyLT5tZW1zaXplID0gKHVuc2lnbmVkIGxvbmcpZWxmNjRwaC0+cF9tZW1zejsKKwlyLT5vZmZzZXQgPSAodW5zaWduZWQgbG9uZyllbGY2NHBoLT5wX29mZnNldDsKKwlyLT5hZGRyID0gKHVuc2lnbmVkIGxvbmcgbG9uZyllbGY2NHBoLT5wX3ZhZGRyOworCisjaWZkZWYgREVCVUcKKwlwcmludGYoIlBQQzY0IEVMRiBmaWxlLCBwaDpcbiIpOworCXByaW50ZigicF90eXBlICAgMHglMDh4XG4iLCBlbGY2NHBoLT5wX3R5cGUpOworCXByaW50ZigicF9mbGFncyAgMHglMDh4XG4iLCBlbGY2NHBoLT5wX2ZsYWdzKTsKKwlwcmludGYoInBfb2Zmc2V0IDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9vZmZzZXQpOworCXByaW50ZigicF92YWRkciAgMHglMDE2bGx4XG4iLCBlbGY2NHBoLT5wX3ZhZGRyKTsKKwlwcmludGYoInBfcGFkZHIgIDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9wYWRkcik7CisJcHJpbnRmKCJwX2ZpbGVzeiAweCUwMTZsbHhcbiIsIGVsZjY0cGgtPnBfZmlsZXN6KTsKKwlwcmludGYoInBfbWVtc3ogIDB4JTAxNmxseFxuIiwgZWxmNjRwaC0+cF9tZW1zeik7CisJcHJpbnRmKCJwX2FsaWduICAweCUwMTZsbHhcbiIsIGVsZjY0cGgtPnBfYWxpZ24pOworCXByaW50ZigiLi4uIHNraXBwaW5nIDB4JTA4bHggYnl0ZXMgb2YgRUxGIGhlYWRlclxuIiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpZWxmNjRwaC0+cF9vZmZzZXQpOworI2VuZGlmCisKKwlyZXR1cm4gNjQ7Cit9CiB2b2lkIGdldDRrKEZJTEUgKmZpbGUsIGNoYXIgKmJ1ZiApCiB7CiAJdW5zaWduZWQgajsKQEAgLTM0LDk3ICs4Miw5MiBAQAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewogCWNoYXIgaW5idWZbNDA5Nl07Ci0JRklMRSAqcmFtRGlzayA9IE5VTEw7Ci0JRklMRSAqc3lzbWFwID0gTlVMTDsKLQlGSUxFICppbnB1dFZtbGludXggPSBOVUxMOwotCUZJTEUgKm91dHB1dFZtbGludXggPSBOVUxMOwotICAKLQl1bnNpZ25lZCBpID0gMDsKLQl1bnNpZ25lZCBsb25nIHJhbUZpbGVMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgcmFtTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHJvdW5kUiA9IDA7Ci0gIAotCXVuc2lnbmVkIGxvbmcgc3lzbWFwRmlsZUxlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzeXNtYXBMZW4gPSAwOwotCXVuc2lnbmVkIGxvbmcgc3lzbWFwUGFnZXMgPSAwOwotCWNoYXIqIHB0cl9lbmQgPSBOVUxMOyAKLQl1bnNpZ25lZCBsb25nIG9mZnNldF9lbmQgPSAwOworCXN0cnVjdCBhZGRyX3JhbmdlIHZtbGludXg7CisJRklMRSAqcmFtRGlzazsKKwlGSUxFICppbnB1dFZtbGludXg7CisJRklMRSAqb3V0cHV0Vm1saW51eDsKIAotCXVuc2lnbmVkIGxvbmcga2VybmVsTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIGFjdHVhbEtlcm5lbExlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsTGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIHJhbVN0YXJ0T2ZmcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyByYW1QYWdlcyA9IDA7Ci0JdW5zaWduZWQgbG9uZyByb3VuZGVkS2VybmVsUGFnZXMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaHZSZWxlYXNlRGF0YSA9IDA7CisJY2hhciAqcmRfbmFtZSwgKmx4X25hbWUsICpvdXRfbmFtZTsKKworCXNpemVfdCBpOworCXVuc2lnbmVkIGxvbmcgcmFtRmlsZUxlbjsKKwl1bnNpZ25lZCBsb25nIHJhbUxlbjsKKwl1bnNpZ25lZCBsb25nIHJvdW5kUjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldF9lbmQ7CisKKwl1bnNpZ25lZCBsb25nIGtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIGFjdHVhbEtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIHJvdW5kOworCXVuc2lnbmVkIGxvbmcgcm91bmRlZEtlcm5lbExlbjsKKwl1bnNpZ25lZCBsb25nIHJhbVN0YXJ0T2ZmczsKKwl1bnNpZ25lZCBsb25nIHJhbVBhZ2VzOworCXVuc2lnbmVkIGxvbmcgcm91bmRlZEtlcm5lbFBhZ2VzOworCXVuc2lnbmVkIGxvbmcgaHZSZWxlYXNlRGF0YTsKIAl1X2ludDMyX3QgZXllQ2F0Y2hlciA9IDB4YzhhNWQ5YzQ7Ci0JdW5zaWduZWQgbG9uZyBuYWNhID0gMDsKLQl1bnNpZ25lZCBsb25nIHhSYW1EaXNrID0gMDsKLQl1bnNpZ25lZCBsb25nIHhSYW1EaXNrU2l6ZSA9IDA7Ci0JbG9uZyBwYWRQYWdlcyA9IDA7CisJdW5zaWduZWQgbG9uZyBuYWNhOworCXVuc2lnbmVkIGxvbmcgeFJhbURpc2s7CisJdW5zaWduZWQgbG9uZyB4UmFtRGlza1NpemU7CisJbG9uZyBwYWRQYWdlczsKICAgCiAgIAogCWlmIChhcmdjIDwgMikgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5hbWUgb2YgUkFNIGRpc2sgZmlsZSBtaXNzaW5nLlxuIik7CiAJCWV4aXQoMSk7CiAJfQorCXJkX25hbWUgPSBhcmd2WzFdOwogCiAJaWYgKGFyZ2MgPCAzKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiBTeXN0ZW0gTWFwIGlucHV0IGZpbGUgaXMgbWlzc2luZy5cbiIpOwotCQlleGl0KDEpOwotCX0KLSAgCi0JaWYgKGFyZ2MgPCA0KSB7CiAJCWZwcmludGYoc3RkZXJyLCAiTmFtZSBvZiB2bWxpbnV4IGZpbGUgbWlzc2luZy5cbiIpOwogCQlleGl0KDEpOwogCX0KKwlseF9uYW1lID0gYXJndlsyXTsKIAotCWlmIChhcmdjIDwgNSkgeworCWlmIChhcmdjIDwgNCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5hbWUgb2Ygdm1saW51eCBvdXRwdXQgZmlsZSBtaXNzaW5nLlxuIik7CiAJCWV4aXQoMSk7CiAJfQorCW91dF9uYW1lID0gYXJndlszXTsKIAogCi0JcmFtRGlzayA9IGZvcGVuKGFyZ3ZbMV0sICJyIik7CisJcmFtRGlzayA9IGZvcGVuKHJkX25hbWUsICJyIik7CiAJaWYgKCAhIHJhbURpc2sgKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiUkFNIGRpc2sgZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzFdKTsKKwkJZnByaW50ZihzdGRlcnIsICJSQU0gZGlzayBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIHJkX25hbWUpOwogCQlleGl0KDEpOwogCX0KIAotCXN5c21hcCA9IGZvcGVuKGFyZ3ZbMl0sICJyIik7Ci0JaWYgKCAhIHN5c21hcCApIHsKLQkJZnByaW50ZihzdGRlcnIsICJTeXN0ZW0gTWFwIGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgYXJndlsyXSk7Ci0JCWV4aXQoMSk7Ci0JfQotICAKLQlpbnB1dFZtbGludXggPSBmb3Blbihhcmd2WzNdLCAiciIpOworCWlucHV0Vm1saW51eCA9IGZvcGVuKGx4X25hbWUsICJyIik7CiAJaWYgKCAhIGlucHV0Vm1saW51eCApIHsKLQkJZnByaW50ZihzdGRlcnIsICJ2bWxpbnV4IGZpbGUgXCIlc1wiIGZhaWxlZCB0byBvcGVuLlxuIiwgYXJndlszXSk7CisJCWZwcmludGYoc3RkZXJyLCAidm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIGx4X25hbWUpOwogCQlleGl0KDEpOwogCX0KICAgCi0Jb3V0cHV0Vm1saW51eCA9IGZvcGVuKGFyZ3ZbNF0sICJ3KyIpOworCW91dHB1dFZtbGludXggPSBmb3BlbihvdXRfbmFtZSwgIncrIik7CiAJaWYgKCAhIG91dHB1dFZtbGludXggKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAib3V0cHV0IHZtbGludXggZmlsZSBcIiVzXCIgZmFpbGVkIHRvIG9wZW4uXG4iLCBhcmd2WzRdKTsKKwkJZnByaW50ZihzdGRlcnIsICJvdXRwdXQgdm1saW51eCBmaWxlIFwiJXNcIiBmYWlsZWQgdG8gb3Blbi5cbiIsIG91dF9uYW1lKTsKIAkJZXhpdCgxKTsKIAl9Ci0gIAotICAKLSAgCisKKwlpID0gZnJlYWQoaW5idWYsIDEsIHNpemVvZihpbmJ1ZiksIGlucHV0Vm1saW51eCk7CisJaWYgKGkgIT0gc2l6ZW9mKGluYnVmKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNhbiBub3QgcmVhZCB2bWxpbnV4IGZpbGUgJXM6ICV1XG4iLCBseF9uYW1lLCBpKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlpID0gY2hlY2tfZWxmNjQoaW5idWYsIHNpemVvZihpbmJ1ZiksICZ2bWxpbnV4KTsKKwlpZiAoaSA9PSAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiWW91IG11c3QgaGF2ZSBhIGxpbnV4IGtlcm5lbCBzcGVjaWZpZWQgYXMgYXJndlsyXVxuIik7CisJCWV4aXQoMSk7CisJfQorCiAJLyogSW5wdXQgVm1saW51eCBmaWxlICovCiAJZnNlZWsoaW5wdXRWbWxpbnV4LCAwLCBTRUVLX0VORCk7CiAJa2VybmVsTGVuID0gZnRlbGwoaW5wdXRWbWxpbnV4KTsKIAlmc2VlayhpbnB1dFZtbGludXgsIDAsIFNFRUtfU0VUKTsKLQlwcmludGYoImtlcm5lbCBmaWxlIHNpemUgPSAlZFxuIiwga2VybmVsTGVuKTsKLQlpZiAoIGtlcm5lbExlbiA9PSAwICkgewotCQlmcHJpbnRmKHN0ZGVyciwgIllvdSBtdXN0IGhhdmUgYSBsaW51eCBrZXJuZWwgc3BlY2lmaWVkIGFzIGFyZ3ZbM11cbiIpOwotCQlleGl0KDEpOwotCX0KKwlwcmludGYoImtlcm5lbCBmaWxlIHNpemUgPSAlbHVcbiIsIGtlcm5lbExlbik7CiAKIAlhY3R1YWxLZXJuZWxMZW4gPSBrZXJuZWxMZW4gLSBFbGZIZWFkZXJTaXplOwogCi0JcHJpbnRmKCJhY3R1YWwga2VybmVsIGxlbmd0aCAobWludXMgRUxGIGhlYWRlcikgPSAlZFxuIiwgYWN0dWFsS2VybmVsTGVuKTsKKwlwcmludGYoImFjdHVhbCBrZXJuZWwgbGVuZ3RoIChtaW51cyBFTEYgaGVhZGVyKSA9ICVsdVxuIiwgYWN0dWFsS2VybmVsTGVuKTsKIAogCXJvdW5kID0gYWN0dWFsS2VybmVsTGVuICUgNDA5NjsKIAlyb3VuZGVkS2VybmVsTGVuID0gYWN0dWFsS2VybmVsTGVuOwpAQCAtMTM0LDM5ICsxNzcsNyBAQAogCXJvdW5kZWRLZXJuZWxQYWdlcyA9IHJvdW5kZWRLZXJuZWxMZW4gLyA0MDk2OwogCXByaW50ZigiVm1saW51eCBwYWdlcyB0byBjb3B5ID0gJWxkLzB4JWx4IFxuIiwgcm91bmRlZEtlcm5lbFBhZ2VzLCByb3VuZGVkS2VybmVsUGFnZXMpOwogCi0KLQotCS8qIElucHV0IFN5c3RlbSBNYXAgZmlsZSAqLwotCS8qIChuZWVkcyB0byBiZSBwcm9jZXNzZWQgc2ltcGx5IHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGFkZCBwYWQgcGFnZXMgZHVlIHRvIHRoZSBzdGF0aWMgdmFyaWFibGVzIG5vdCBiZWluZyBpbmNsdWRlZCBpbiB0aGUgdm1saW51eCkgKi8KLQlmc2VlayhzeXNtYXAsIDAsIFNFRUtfRU5EKTsKLQlzeXNtYXBGaWxlTGVuID0gZnRlbGwoc3lzbWFwKTsKLQlmc2VlayhzeXNtYXAsIDAsIFNFRUtfU0VUKTsKLQlwcmludGYoIiVzIGZpbGUgc2l6ZSA9ICVsZC8weCVseCBcbiIsIGFyZ3ZbMl0sIHN5c21hcEZpbGVMZW4sIHN5c21hcEZpbGVMZW4pOwotCi0Jc3lzbWFwTGVuID0gc3lzbWFwRmlsZUxlbjsKLQotCXJvdW5kUiA9IDQwOTYgLSAoc3lzbWFwTGVuICUgNDA5Nik7Ci0JaWYgKHJvdW5kUikgewotCQlwcmludGYoIlJvdW5kaW5nIFN5c3RlbSBNYXAgZmlsZSB1cCB0byBhIG11bHRpcGxlIG9mIDQwOTYsIGFkZGluZyAlbGQvMHglbHggXG4iLCByb3VuZFIsIHJvdW5kUik7Ci0JCXN5c21hcExlbiArPSByb3VuZFI7Ci0JfQotCXByaW50ZigiUm91bmRlZCBTeXN0ZW0gTWFwIHNpemUgaXMgJWxkLzB4JWx4IFxuIiwgc3lzbWFwTGVuLCBzeXNtYXBMZW4pOwotICAKLQkvKiBQcm9jZXNzIHRoZSBTeXNtYXAgZmlsZSB0byBkZXRlcm1pbmUgd2hlcmUgX2VuZCBpcyAqLwotCXN5c21hcFBhZ2VzID0gc3lzbWFwTGVuIC8gNDA5NjsKLQkvKiByZWFkIHRoZSB3aG9sZSBmaWxlIGxpbmUgYnkgbGluZSwgZXhwZWN0IHRoYXQgaXQgZG9lc24ndCBmYWlsICovCi0Jd2hpbGUgKCBmZ2V0cyhpbmJ1ZiwgNDA5Niwgc3lzbWFwKSApICA7Ci0JLyogc2VhcmNoIGZvciBfZW5kIGluIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHN5c3RlbSBtYXAgKi8KLQlwdHJfZW5kID0gc3Ryc3RyKGluYnVmLCAiIF9lbmQiKTsKLQlpZiAoIXB0cl9lbmQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZmluZCBfZW5kIGluIHRoZSBzeXNtYXAgZmlsZSBcbiIpOwotCQlmcHJpbnRmKHN0ZGVyciwgImluYnVmOiBcbiIpOwotCQlmcHJpbnRmKHN0ZGVyciwgIiVzIFxuIiwgaW5idWYpOwotCQlleGl0KDEpOwotCX0KLQlwcmludGYoIkZvdW5kIF9lbmQgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgc3lzbWFwIC0gYmFja2luZyB1cCAxMCBjaGFyYWN0ZXJzIGl0IGxvb2tzIGxpa2UgJXMiLCBwdHJfZW5kLTEwKTsKLQkvKiBjb252ZXJ0IGFkZHJlc3Mgb2YgX2VuZCBpbiBzeXN0ZW0gbWFwIHRvIGhleCBvZmZzZXQuICovCi0Jb2Zmc2V0X2VuZCA9ICh1bnNpZ25lZCBpbnQpc3RydG9sKHB0cl9lbmQtMTAsIE5VTEwsIDE2KTsKKwlvZmZzZXRfZW5kID0gX0FMSUdOX1VQKHZtbGludXgubWVtc2l6ZSwgNDA5Nik7CiAJLyogY2FsYyBob3cgbWFueSBwYWdlcyB3ZSBuZWVkIHRvIGluc2VydCBiZXR3ZWVuIHRoZSB2bWxpbnV4IGFuZCB0aGUgc3RhcnQgb2YgdGhlIHJhbSBkaXNrICovCiAJcGFkUGFnZXMgPSBvZmZzZXRfZW5kLzQwOTYgLSByb3VuZGVkS2VybmVsUGFnZXM7CiAKQEAgLTE5NCw3ICsyMDUsNyBAQAogCWZzZWVrKHJhbURpc2ssIDAsIFNFRUtfRU5EKTsKIAlyYW1GaWxlTGVuID0gZnRlbGwocmFtRGlzayk7CiAJZnNlZWsocmFtRGlzaywgMCwgU0VFS19TRVQpOwotCXByaW50ZigiJXMgZmlsZSBzaXplID0gJWxkLzB4JWx4IFxuIiwgYXJndlsxXSwgcmFtRmlsZUxlbiwgcmFtRmlsZUxlbik7CisJcHJpbnRmKCIlcyBmaWxlIHNpemUgPSAlbGQvMHglbHggXG4iLCByZF9uYW1lLCByYW1GaWxlTGVuLCByYW1GaWxlTGVuKTsKIAogCXJhbUxlbiA9IHJhbUZpbGVMZW47CiAKQEAgLTI0OCwxOSArMjU5LDE5IEBACiAJLyogZnNlZWsgdG8gdGhlIGh2UmVsZWFzZURhdGEgcG9pbnRlciAqLwogCWZzZWVrKG91dHB1dFZtbGludXgsIEVsZkhlYWRlclNpemUgKyAweDI0LCBTRUVLX1NFVCk7CiAJaWYgKGZyZWFkKCZodlJlbGVhc2VEYXRhLCA0LCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBodlJlbGVhc2VEYXRhIHBvaW50ZXJcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgaHZSZWxlYXNlRGF0YSBwb2ludGVyXG4iLCBvdXRwdXRWbWxpbnV4LCBvdXRfbmFtZSk7CiAJfQogCWh2UmVsZWFzZURhdGEgPSBudG9obChodlJlbGVhc2VEYXRhKTsgLyogQ29udmVydCB0byBuYXRpdmUgaW50ICovCi0JcHJpbnRmKCJodlJlbGVhc2VEYXRhIGlzIGF0ICUwOHhcbiIsIGh2UmVsZWFzZURhdGEpOworCXByaW50ZigiaHZSZWxlYXNlRGF0YSBpcyBhdCAlMDhseFxuIiwgaHZSZWxlYXNlRGF0YSk7CiAKIAkvKiBmc2VlayB0byB0aGUgaHZSZWxlYXNlRGF0YSAqLwogCWZzZWVrKG91dHB1dFZtbGludXgsIEVsZkhlYWRlclNpemUgKyBodlJlbGVhc2VEYXRhLCBTRUVLX1NFVCk7CiAJaWYgKGZyZWFkKGluYnVmLCAweDQwLCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3QgcmVhZCBodlJlbGVhc2VEYXRhXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIGh2UmVsZWFzZURhdGFcbiIsIG91dHB1dFZtbGludXgsIG91dF9uYW1lKTsKIAl9CiAJLyogQ2hlY2sgaHZSZWxlYXNlRGF0YSBzYW5pdHkgKi8KIAlpZiAobWVtY21wKGluYnVmLCAmZXllQ2F0Y2hlciwgNCkgIT0gMCkgewotCQlkZWF0aCgiaHZSZWxlYXNlRGF0YSBpcyBpbnZhbGlkXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoImh2UmVsZWFzZURhdGEgaXMgaW52YWxpZFxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAkvKiBHZXQgdGhlIG5hY2EgcG9pbnRlciAqLwogCW5hY2EgPSBudG9obCgqKCh1X2ludDMyX3QqKSAmaW5idWZbMHgwQ10pKSAtIEtFUk5FTEJBU0U7CkBAIC0yNjksMTMgKzI4MCwxMyBAQAogCS8qIGZzZWVrIHRvIHRoZSBuYWNhICovCiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIG5hY2EsIFNFRUtfU0VUKTsKIAlpZiAoZnJlYWQoaW5idWYsIDB4MTgsIDEsIG91dHB1dFZtbGludXgpICE9IDEpIHsKLQkJZGVhdGgoIkNvdWxkIG5vdCByZWFkIG5hY2FcbiIsIG91dHB1dFZtbGludXgsIGFyZ3ZbNF0pOworCQlkZWF0aCgiQ291bGQgbm90IHJlYWQgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KIAl4UmFtRGlzayA9IG50b2hsKCooKHVfaW50MzJfdCAqKSAmaW5idWZbMHgwY10pKTsKIAl4UmFtRGlza1NpemUgPSBudG9obCgqKCh1X2ludDMyX3QgKikgJmluYnVmWzB4MTRdKSk7CiAJLyogTWFrZSBzdXJlIGEgUkFNIGRpc2sgaXNuJ3QgYWxyZWFkeSBwcmVzZW50ICovCiAJaWYgKCh4UmFtRGlzayAhPSAwKSB8fCAoeFJhbURpc2tTaXplICE9IDApKSB7Ci0JCWRlYXRoKCJSQU0gZGlzayBpcyBhbHJlYWR5IGF0dGFjaGVkIHRvIHRoaXMga2VybmVsXG4iLCBvdXRwdXRWbWxpbnV4LCBhcmd2WzRdKTsKKwkJZGVhdGgoIlJBTSBkaXNrIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhpcyBrZXJuZWxcbiIsIG91dHB1dFZtbGludXgsIG91dF9uYW1lKTsKIAl9CiAJLyogRmlsbCBpbiB0aGUgdmFsdWVzICovCiAJKigodV9pbnQzMl90ICopICZpbmJ1ZlsweDBjXSkgPSBodG9ubChyYW1TdGFydE9mZnMpOwpAQCAtMjg1LDE1ICsyOTYsMTUgQEAKIAlmZmx1c2gob3V0cHV0Vm1saW51eCk7CiAJZnNlZWsob3V0cHV0Vm1saW51eCwgRWxmSGVhZGVyU2l6ZSArIG5hY2EsIFNFRUtfU0VUKTsKIAlpZiAoZndyaXRlKGluYnVmLCAweDE4LCAxLCBvdXRwdXRWbWxpbnV4KSAhPSAxKSB7Ci0JCWRlYXRoKCJDb3VsZCBub3Qgd3JpdGUgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgYXJndls0XSk7CisJCWRlYXRoKCJDb3VsZCBub3Qgd3JpdGUgbmFjYVxuIiwgb3V0cHV0Vm1saW51eCwgb3V0X25hbWUpOwogCX0KLQlwcmludGYoIlJhbSBEaXNrIG9mIDB4JWx4IHBhZ2VzIGlzIGF0dGFjaGVkIHRvIHRoZSBrZXJuZWwgYXQgb2Zmc2V0IDB4JTA4eFxuIiwKKwlwcmludGYoIlJhbSBEaXNrIG9mIDB4JWx4IHBhZ2VzIGlzIGF0dGFjaGVkIHRvIHRoZSBrZXJuZWwgYXQgb2Zmc2V0IDB4JTA4bHhcbiIsCiAJICAgICAgIHJhbVBhZ2VzLCByYW1TdGFydE9mZnMpOwogCiAJLyogRG9uZSAqLwogCWZjbG9zZShvdXRwdXRWbWxpbnV4KTsKIAkvKiBTZXQgcGVybWlzc2lvbiB0byBleGVjdXRhYmxlICovCi0JY2htb2QoYXJndls0XSwgU19JUlVTUnxTX0lXVVNSfFNfSVhVU1J8U19JUkdSUHxTX0lYR1JQfFNfSVJPVEh8U19JWE9USCk7CisJY2htb2Qob3V0X25hbWUsIFNfSVJVU1J8U19JV1VTUnxTX0lYVVNSfFNfSVJHUlB8U19JWEdSUHxTX0lST1RIfFNfSVhPVEgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCmluZGV4IGM0NDFhZWIuLmRhYzRjYzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL01ha2VmaWxlCkBAIC0xMSwxMyArMTEsMTAgQEAKIAogZW5kaWYKIAotb2JqLXkgICAgICAgICAgICAgICArPQlpcnEubyBpZGxlLm8gZG1hLm8gXAotCQkJYWxpZ24ubyBwYWNhRGF0YS5vIFwKLQkJCXVkYmcubyBpb2N0bDMyLm8gXAorb2JqLXkgICAgICAgICAgICAgICArPQlpZGxlLm8gZG1hLm8gXAorCQkJYWxpZ24ubyBcCiAJCQlydGMubyBcCi0JCQljcHVfc2V0dXBfcG93ZXI0Lm8gXAotCQkJaW9tbXUubyBzeXNmcy5vIHZkc28ubyBmaXJtd2FyZS5vCi1vYmoteSArPSB2ZHNvMzIvIHZkc282NC8KKwkJCWlvbW11Lm8KIAogcGNpLW9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcGNpX2RuLm8gcGNpX2RpcmVjdF9pb21tdS5vCiAKQEAgLTI4LDMyICsyNSwxOSBAQAogb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKSArPSBwcm9tX2luaXQubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX1BQQ19QU0VSSUVTKSArPSB1ZGJnXzE2NTUwLm8KLQogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vCi1vYmotJChDT05GSUdfRUVIKQkJKz0gZWVoLm8KLW9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvY19wcGM2NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vCiBpZm5lcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBwcGNfa3N5bXMubwogZW5kaWYKLW9iai0kKENPTkZJR19QUENfUlRBUykJCSs9IHJ0YXNfcGNpLm8KLW9iai0kKENPTkZJR19TQ0FOTE9HKQkJKz0gc2NhbmxvZy5vCi1vYmotJChDT05GSUdfTFBBUkNGRykJCSs9IGxwYXJjZmcubwogb2JqLSQoQ09ORklHX0hWQ19DT05TT0xFKQkrPSBodmNvbnNvbGUubwogaWZuZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKIG9iai0kKENPTkZJR19CT09UWF9URVhUKQkrPSBidGV4dC5vCiBlbmRpZgogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzZXJ2ZXIubwogCi1vYmotJChDT05GSUdfUFBDX1BNQUMpCQkrPSB1ZGJnX3NjYy5vCi0KLW9iai0kKENPTkZJR19QUENfTUFQTEUpCQkrPSB1ZGJnXzE2NTUwLm8KLQogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIAotQ0ZMQUdTX2lvY3RsMzIubyArPSAtSWZzLwotCiBpZm5lcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogaWZlcSAoJChDT05GSUdfUFBDX0lTRVJJRVMpLHkpCiBhcmNoL3BwYzY0L2tlcm5lbC9oZWFkLm86IGFyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcm1hcC5zCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCBiY2U5MDY1Li44NGFiNWMxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTc0LDcgKzc0LDYgQEAKIAlERUZJTkUoSUNBQ0hFTDFMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxPR0xJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBsb2dfaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxJTkVTUEVSUEFHRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVzX3Blcl9wYWdlKSk7Ci0JREVGSU5FKFBMQVRGT1JNLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBwbGF0Zm9ybSkpOwogCURFRklORShQTEFURk9STV9MUEFSLCBQTEFURk9STV9MUEFSKTsKIAogCS8qIHBhY2EgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUyBiL2FyY2gvcHBjNjQva2VybmVsL2hlYWQuUwppbmRleCA5ZTgwNTBlLi4xYzg2OWVhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvaGVhZC5TCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KQEAgLTE3MDEsMjEgKzE3MDAsOSBAQAogCUhNVF9NRURJVU0JCQkvKiBTZXQgdGhyZWFkIHByaW9yaXR5IHRvIE1FRElVTSAqLwogCiAJbGQJcjIsUEFDQVRPQyhyMTMpCi0JbGkJcjYsMAotCXN0YglyNixQQUNBUFJPQ0VOQUJMRUQocjEzKQogCi0jaWZuZGVmIENPTkZJR19QUENfSVNFUklFUwotCS8qIEluaXRpYWxpemUgdGhlIHBhZ2UgdGFibGUgcG9pbnRlciByZWdpc3Rlci4gKi8KLQlMT0FEQUREUihyNixfU0RSMSkKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMQkgKi8KLQltdHNwcglTUFJOX1NEUjEscjYJCQkvKiBzZXQgdGhlIGh0YWIgbG9jYXRpb24JICovCi0jZW5kaWYKLQkvKiBJbml0aWFsaXplIHRoZSBmaXJzdCBzZWdtZW50IHRhYmxlIChvciBTTEIpIGVudHJ5CQkgKi8KLQlsZAlyMyxQQUNBU1RBQlZJUlQocjEzKQkvKiBnZXQgYWRkciBvZiBzZWdtZW50IHRhYmxlCSAqLwotQkVHSU5fRlRSX1NFQ1RJT04KLQlibAkuc3RhYl9pbml0aWFsaXplCi1FTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9TTEIpCi0JYmwJLnNsYl9pbml0aWFsaXplCisJLyogRG8gZWFybHkgc2V0dXAgZm9yIHRoYXQgQ1BVICovCisJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCiAJLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsIHN0YWNrLiAgSnVzdCBhIHJlcGVhdCBmb3IgaVNlcmllcy4JICovCiAJTE9BREFERFIocjMsY3VycmVudF9zZXQpCkBAIC0xNzI0LDM3ICsxNzExLDYgQEAKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFLVNUQUNLX0ZSQU1FX09WRVJIRUFECiAJc3RkCXIxLFBBQ0FLU0FWRShyMTMpCiAKLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQkvKiBnZXQgcmFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLQlvcmkJcjQscjMsMQkJCS8qIHR1cm4gb24gdmFsaWQgYml0CQkgKi8KLQotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCWxpCXIwLC0xCQkJLyogaHlwZXJ2aXNvciBjYWxsICovCi0JbGkJcjMsMQotCXNsZGkJcjMscjMsNjMJCS8qIDB4ODAwMDAwMDAwMDAwMDAwMCAqLwotCW9yaQlyMyxyMyw0CQkJLyogMHg4MDAwMDAwMDAwMDAwMDA0ICovCi0Jc2MJCQkJLyogSHZDYWxsX3NldEFTUiAqLwotI2Vsc2UKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZwkgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MJCSAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM2CQkJLyogSVN0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgKi8KLQlibmUJOThmCi05NzoJbGkJcjMsSF9TRVRfQVNSCQkvKiBoY2FsbCA9IEhfU0VUX0FTUiAqLwotCUhWU0MJCQkJLyogSW52b2tpbmcgaGNhbGwgKi8KLQliCTk5ZgotOTg6CQkJCQkvKiAhKHJwYSBoeXBlcnZpc29yKSB8fCAhKHN0YXIpICAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSAqLwotOTk6Ci0jZW5kaWYKIAlsaQlyNywwCiAJbXRscglyNwogCkBAIC0xODk2LDQwICsxODUyLDYgQEAKIAltcglyMyxyMzEKICAJYmwJLmVhcmx5X3NldHVwCiAKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLFBBQ0FTVEFCUkVBTChyMTMpCi0Jb3JpCXI0LHIzLDEJCQkvKiB0dXJuIG9uIHZhbGlkIGJpdAkJICovCi0JbGQJcjMsc3lzdGVtY2ZnQGdvdChyMikJLyogcjMgPSBwdHIgdG8gc3lzdGVtY2ZnICovCi0JbGQJcjMsMChyMykKLQlsd3oJcjMsUExBVEZPUk0ocjMpCQkvKiByMyA9IHBsYXRmb3JtIGZsYWdzICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYmVxCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgMCAgKi8KLQltZnNwcglyMyxTUFJOX1BWUgotCXNyd2kJcjMscjMsMTYKLQljbXB3aQlyMywweDM3CQkJLyogU1N0YXIgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNgkJCS8qIElTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM0CQkJLyogUHVsc2FyICovCi0JYm5lCTk4ZgotOTc6CWxpCXIzLEhfU0VUX0FTUgkJLyogaGNhbGwgPSBIX1NFVF9BU1IgKi8KLQlIVlNDCQkJCS8qIEludm9raW5nIGhjYWxsICovCi0JYgk5OWYKLTk4OgkJCQkJLyogIShycGEgaHlwZXJ2aXNvcikgfHwgIShzdGFyKSAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSovCi05OToKLQkvKiBTZXQgU0RSMSAoaGFzaCB0YWJsZSBwb2ludGVyKSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCS8qIFRlc3QgaWYgYml0IDAgaXMgc2V0IChMUEFSIGJpdCkgKi8KLQlhbmRpLglyMyxyMyxQTEFURk9STV9MUEFSCi0JYm5lCTk4ZgkJCS8qIGJyYW5jaCBpZiByZXN1bHQgaXMgITAgICovCi0JTE9BREFERFIocjYsX1NEUjEpCQkvKiBPbmx5IGlmIE5PVCBMUEFSICovCi0Jc3ViCXI2LHI2LHIyNgotCWxkCXI2LDAocjYpCQkvKiBnZXQgdGhlIHZhbHVlIG9mIF9TRFIxICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uICAqLwotOTg6IAogCUxPQURBRERSKHIzLC5zdGFydF9oZXJlX2NvbW1vbikKIAlTRVRfUkVHX1RPX0NPTlNUKHI0LCBNU1JfS0VSTkVMKQogCW10c3ByCVNQUk5fU1JSMCxyMwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvaWRsZS5jCmluZGV4IDcxNWJjMGUuLmI4NzlkMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL2lkbGUuYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9pZGxlLmMKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjNjQva2VybmVsL21pc2MuUwppbmRleCA5MTQ2MzJlLi41ZTA4OWRlIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvbWlzYy5TCkBAIC03OCwxMiArNzgsMTIgQEAKIAltdGxyCXIwCiAJYmxyCiAKLV9HTE9CQUwoY2FsbF9oYW5kbGVfSVJRX2V2ZW50KQorX0dMT0JBTChjYWxsX19fZG9fSVJRKQogCW1mbHIJcjAKIAlzdGQJcjAsMTYocjEpCi0Jc3RkdQlyMSxUSFJFQURfU0laRS0xMTIocjYpCi0JbXIJcjEscjYKLQlibAkuaGFuZGxlX0lSUV9ldmVudAorCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI1KQorCW1yCXIxLHI1CisJYmwJLl9fZG9fSVJRCiAJbGQJcjEsMChyMSkKIAlsZAlyMCwxNihyMSkKIAltdGxyCXIwCkBAIC0xODYsNyArMTg2LDggQEAKIAliZG56CTJiCiAJaXN5bmMKIAlibHIKLQkucHJldmlvdXMgLnRleHQKKworCS50ZXh0CiAvKgogICogTGlrZSBhYm92ZSwgYnV0IG9ubHkgZG8gdGhlIEQtY2FjaGUuCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYyBiL2FyY2gvcHBjNjQva2VybmVsL252cmFtLmMKaW5kZXggNGZiMWE5Zi4uYzBmY2QyOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvbnZyYW0uYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9udnJhbS5jCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogCiAjdW5kZWYgREVCVUdfTlZSQU0KIApAQCAtMTY3LDcgKzE2Niw3IEBACiAJY2FzZSBJT0NfTlZSQU1fR0VUX09GRlNFVDogewogCQlpbnQgcGFydCwgb2Zmc2V0OwogCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICE9IFBMQVRGT1JNX1BPV0VSTUFDKQorCQlpZiAoX21hY2hpbmUgIT0gUExBVEZPUk1fUE9XRVJNQUMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZwYXJ0LCAodm9pZCBfX3VzZXIqKWFyZywgc2l6ZW9mKHBhcnQpKSAhPSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NTAsNyArNDQ5LDcgQEAKIAkgKiBpbiBvdXIgbnZyYW0sIGFzIEFwcGxlIGRlZmluZWQgcGFydGl0aW9ucyB1c2UgcHJldHR5IG11Y2gKIAkgKiBhbGwgb2YgdGhlIHNwYWNlCiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT1NQQzsKIAogCS8qIHNlZSBpZiB3ZSBoYXZlIGFuIE9TIHBhcnRpdGlvbiB0aGF0IG1lZXRzIG91ciBuZWVkcy4KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3BjaS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKaW5kZXggMzAyNDdmZi4uM2NlZjFiOCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcGNpLmMKQEAgLTU0OCw2ICs1NDgsMTEgQEAKIAlpZiAocHBjNjRfaXNhYnJpZGdlX2RldiAhPSBOVUxMKQogCQlwcmludGsoIklTQSBicmlkZ2UgYXQgJXNcbiIsIHBjaV9uYW1lKHBwYzY0X2lzYWJyaWRnZV9kZXYpKTsKIAorI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorCS8qIG1hcCBpbiBQQ0kgSS9PIHNwYWNlICovCisJcGhic19yZW1hcF9pbygpOworI2VuZGlmCisKIAlwcmludGsoIlBDSTogUHJvYmluZyBQQ0kgaGFyZHdhcmUgZG9uZVxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNzcsMTIgKzEyODIsOSBAQAogCSAqIEc1IG1hY2hpbmVzLi4uIFNvIHdoZW4gc29tZXRoaW5nIGFza3MgZm9yIGJ1cyAwIGlvIGJhc2UKIAkgKiAoYnVzIDAgaXMgSFQgcm9vdCksIHdlIHJldHVybiB0aGUgQUdQIG9uZSBpbnN0ZWFkLgogCSAqLwotI2lmZGVmIENPTkZJR19QUENfUE1BQwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BPV0VSTUFDICYmCi0JICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiTWFjUklTQzQiKSkKKwlpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJNYWNSSVNDNCIpKQogCQlpZiAoaW5fYnVzID09IDApCiAJCQlpbl9idXMgPSAweGYwOwotI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCiAJLyogVGhhdCBzeXNjYWxsIGlzbid0IHF1aXRlIGNvbXBhdGlibGUgd2l0aCBQQ0kgZG9tYWlucywgYnV0IGl0J3MKIAkgKiB1c2VkIG9uIHByZS1kb21haW5zIHNldHVwLiBXZSByZXR1cm4gdGhlIGZpcnN0IG1hdGNoCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9wY2lfZG4uYyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCmluZGV4IDFhNDQzYTcuLjEyYzRjOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3BjaV9kbi5jCkBAIC00Myw3ICs0Myw3IEBACiAJdTMyICpyZWdzOwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAotCWlmIChwaGItPmlzX2R5bmFtaWMpCisJaWYgKG1lbV9pbml0X2RvbmUpCiAJCXBkbiA9IGttYWxsb2Moc2l6ZW9mKCpwZG4pLCBHRlBfS0VSTkVMKTsKIAllbHNlCiAJCXBkbiA9IGFsbG9jX2Jvb3RtZW0oc2l6ZW9mKCpwZG4pKTsKQEAgLTEyMCw2ICsxMjAsMTQgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoqIAorICogcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyAtIHNldHVwIHBjaSBkZXZpY2VzIHVuZGVyIHRoaXMgUEhCCisgKiBwaGI6IHBjaS10by1ob3N0IGJyaWRnZSAodG9wLWxldmVsIGJyaWRnZSBjb25uZWN0aW5nIHRvIGNwdSkKKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJvdGggZHVyaW5nIGJvb3QsIChiZWZvcmUgdGhlIG1lbW9yeQorICogc3Vic3lzdGVtIGlzIHNldCB1cCwgYmVmb3JlIGttYWxsb2MgaXMgdmFsaWQpIGFuZCBkdXJpbmcgdGhlIAorICogZHluYW1pYyBscGFyIG9wZXJhdGlvbiBvZiBhZGRpbmcgYSBQSEIgdG8gYSBydW5uaW5nIHN5c3RlbS4KKyAqLwogdm9pZCBfX2RldmluaXQgcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKiBkbiA9IChzdHJ1Y3QgZGV2aWNlX25vZGUgKikgcGhiLT5hcmNoX2RhdGE7CkBAIC0yMDEsOSArMjA5LDE0IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBwY2lfZG5fcmVjb25maWdfbm90aWZpZXIsCiB9OwogCi0vKgotICogQWN0dWFsbHkgaW5pdGlhbGl6ZSB0aGUgcGhicy4KLSAqIFRoZSBidXN3YWxrIG9uIHRoaXMgcGhiIGhhcyBub3QgaGFwcGVuZWQgeWV0LgorLyoqIAorICogcGNpX2RldnNfcGhiX2luaXQgLSBJbml0aWFsaXplIHBoYnMgYW5kIHBjaSBkZXZzIHVuZGVyIHRoZW0uCisgKiAKKyAqIFRoaXMgcm91dGluZSB3YWxrcyBvdmVyIGFsbCBwaGIncyAocGNpLWhvc3QgYnJpZGdlcykgb24gdGhlCisgKiBzeXN0ZW0sIGFuZCBzZXRzIHVwIGFzc29ydGVkIHBjaS1yZWxhdGVkIHN0cnVjdHVyZXMgCisgKiAoaW5jbHVkaW5nIHBjaSBpbmZvIGluIHRoZSBkZXZpY2Ugbm9kZSBzdHJ1Y3RzKSBmb3IgZWFjaAorICogcGNpIGRldmljZSBmb3VuZCB1bmRlcm5lYXRoLiAgVGhpcyByb3V0aW5lIHJ1bnMgb25jZSwKKyAqIGVhcmx5IGluIHRoZSBib290IHNlcXVlbmNlLgogICovCiB2b2lkIF9faW5pdCBwY2lfZGV2c19waGJfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbS5jCmluZGV4IDM0MDJmYmUuLmZiYWQyYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb20uYworKysgYi9hcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMKQEAgLTMxOCw3ICszMTgsNyBAQAogCQl9CiAKIAkJLyogV2Ugb2Zmc2V0IGlycSBudW1iZXJzIGZvciB0aGUgdTMgTVBJQyBieSAxMjggaW4gUG93ZXJNYWMgKi8KLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgeworCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fUE9XRVJNQUMgJiYgaWMgJiYgaWMtPnBhcmVudCkgewogCQkJY2hhciAqbmFtZSA9IGdldF9wcm9wZXJ0eShpYy0+cGFyZW50LCAibmFtZSIsIE5VTEwpOwogCQkJaWYgKG5hbWUgJiYgIXN0cmNtcChuYW1lLCAidTMiKSkKIAkJCQlucC0+aW50cnNbaW50cmNvdW50XS5saW5lICs9IDEyODsKQEAgLTEwNjUsNyArMTA2NSw3IEBACiAJcHJvcCA9ICh1MzIgKilvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxwbGF0Zm9ybSIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAwOwotCXN5c3RlbWNmZy0+cGxhdGZvcm0gPSAqcHJvcDsKKwlfbWFjaGluZSA9ICpwcm9wOwogCiAJLyogY2hlY2sgaWYgaW9tbXUgaXMgZm9yY2VkIG9uIG9yIG9mZiAqLwogCWlmIChvZl9nZXRfZmxhdF9kdF9wcm9wKG5vZGUsICJsaW51eCxpb21tdS1vZmYiLCBOVUxMKSAhPSBOVUxMKQpAQCAtMTIzMCwxMSArMTIzMCw4IEBACiAJb2Zfc2Nhbl9mbGF0X2R0KGVhcmx5X2luaXRfZHRfc2Nhbl9tZW1vcnksIE5VTEwpOwogCWxtYl9lbmZvcmNlX21lbW9yeV9saW1pdChtZW1vcnlfbGltaXQpOwogCWxtYl9hbmFseXplKCk7Ci0Jc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUgPSBsbWJfcGh5c19tZW1fc2l6ZSgpOwogCWxtYl9yZXNlcnZlKDAsIF9fcGEoa2xpbWl0KSk7CiAKLQlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSk7Ci0KIAkvKiBSZXNlcnZlIExNQiByZWdpb25zIHVzZWQgYnkga2VybmVsLCBpbml0cmQsIGR0LCBldGMuLi4gKi8KIAllYXJseV9yZXNlcnZlX21lbSgpOwogCkBAIC0xNzUzLDcgKzE3NTAsNyBAQAogCS8qIFdlIGRvbid0IHN1cHBvcnQgdGhhdCBmdW5jdGlvbiBvbiBQb3dlck1hYywgYXQgbGVhc3QKIAkgKiBub3QgeWV0CiAJICovCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZTRjODgwZGEuLjYzNzVmNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jCkBAIC0xOTM0LDcgKzE5MzQsOCBAQAogCS8qCiAJICogT24gcFNlcmllcywgaW5mb3JtIHRoZSBmaXJtd2FyZSBhYm91dCBvdXIgY2FwYWJpbGl0aWVzCiAJICovCi0JaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSAmIFBMQVRGT1JNX1BTRVJJRVMpCisJaWYgKFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTIHx8CisJICAgIFJFTE9DKG9mX3BsYXRmb3JtKSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCiAJCXByb21fc2VuZF9jYXBhYmlsaXRpZXMoKTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMgYi9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKaW5kZXggNGFhY2Y1Mi4uMWJiYWNhYyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCisrKyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS92ZHNvLmg+CiAKICN1bmRlZiBERUJVRwpAQCAtMTc5LDcgKzE4MCw3IEBACiAJICogTGFzdCBwYWdlIGlzIHN5c3RlbWNmZy4KIAkgKi8KIAlpZiAoKHZtYS0+dm1fZW5kIC0gYWRkcmVzcykgPD0gUEFHRV9TSVpFKQotCQlwZyA9IHZpcnRfdG9fcGFnZShzeXN0ZW1jZmcpOworCQlwZyA9IHZpcnRfdG9fcGFnZShfc3lzdGVtY2ZnKTsKIAllbHNlCiAJCXBnID0gdmlydF90b19wYWdlKHZiYXNlICsgb2Zmc2V0KTsKIApAQCAtNjA0LDcgKzYwNSw3IEBACiAJCWdldF9wYWdlKHBnKTsKIAl9CiAKLQlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3lzdGVtY2ZnKSk7CisJZ2V0X3BhZ2UodmlydF90b19wYWdlKF9zeXN0ZW1jZmcpKTsKIH0KIAogaW50IGluX2dhdGVfYXJlYV9ub190YXNrKHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI0M2MxZC4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvZ2V0dGltZW9mZGF5LlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAotLyoKLSAqIFVzZXJsYW5kIGltcGxlbWVudGF0aW9uIG9mIGdldHRpbWVvZmRheSgpIGZvciAzMiBiaXRzIHByb2Nlc3NlcyBpbiBhCi0gKiBwcGM2NCBrZXJuZWwgZm9yIHVzZSBpbiB0aGUgdkRTTwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBCZW5qYW1pbiBIZXJyZW5zY2htdWlkdCAoYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnKSwgSUJNIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgotI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotCi0JLnRleHQKLS8qCi0gKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5Ci0gKgotICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotICoKLSAqLwotVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0gIC5jZmlfc3RhcnRwcm9jCi0JbWZscglyMTIKLSAgLmNmaV9yZWdpc3RlciBscixyMTIKLQotCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyB0diAqLwotCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0eiAqLwotCWJsCV9fZ2V0X2RhdGFwYWdlQGxvY2FsCS8qIGdldCBkYXRhIHBhZ2UgKi8KLQltcglyOSwgcjMJCQkvKiBkYXRhcGFnZSBwdHIgaW4gcjkgKi8KLQlibAlfX2RvX2dldF94c2VjQGxvY2FsCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KLQlibmUtCTJmCQkJLyogb3V0IG9mIGxpbmUgLT4gZG8gc3lzY2FsbCAqLwotCi0JLyogc2Vjb25kcyBhcmUgeHNlYyA+PiAyMCAqLwotCXJsd2lubQlyNSxyNCwxMiwyMCwzMQotCXJsd2ltaQlyNSxyMywxMiwwLDE5Ci0Jc3R3CXI1LFRWQUwzMl9UVl9TRUMocjEwKQotCi0JLyogZ2V0IHJlbWFpbmluZyB4c2VjIGFuZCBjb252ZXJ0IHRvIHVzZWMuIHdlIHNjYWxlCi0JICogdXAgcmVtYWluaW5nIHhzZWMgYnkgMTIgYml0cyBhbmQgZ2V0IHRoZSB0b3AgMzIgYml0cwotCSAqIG9mIHRoZSBtdWx0aXBsaWNhdGlvbgotCSAqLwotCXJsd2lubQlyNSxyNCwxMiwwLDE5Ci0JbGlzCXI2LDEwMDAwMDBAaAotCW9yaQlyNixyNiwxMDAwMDAwQGwKLQltdWxod3UJcjUscjUscjYKLQlzdHcJcjUsVFZBTDMyX1RWX1VTRUMocjEwKQotCi0JY21wbGkJY3IwLHIxMSwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCi0JYmVxCTFmCi0JbHd6CXI0LENGR19UWl9NSU5VVEVXRVNUKHI5KS8qIGZpbGwgdHogKi8KLQlsd3oJcjUsQ0ZHX1RaX0RTVFRJTUUocjkpCi0Jc3R3CXI0LFRaT05FX1RaX01JTldFU1QocjExKQotCXN0dwlyNSxUWk9ORV9UWl9EU1RUSU1FKHIxMSkKLQotMToJbXRscglyMTIKLQlsaQlyMywwCi0JYmxyCi0KLTI6CW1yCXIzLHIxMAotCW1yCXI0LHIxMQotCWxpCXIwLF9fTlJfZ2V0dGltZW9mZGF5Ci0Jc2MKLQliCTFiCi0gIC5jZmlfZW5kcHJvYwotVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfZ2V0dGltZW9mZGF5KQotCi0vKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYwotICogdmFsdWUgaW4gcjMgJiByNCBhbmQgZXhwZWN0cyB0aGUgZGF0YXBhZ2UgcHRyIChub24gY2xvYmJlcmVkKQotICogaW4gcjkuIGNsb2JiZXJzIHIwLHI0LHI1LHI2LHI3LHI4Ci0qLwotX19kb19nZXRfeHNlYzoKLSAgLmNmaV9zdGFydHByb2MKLQkvKiBDaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMuIFdlIHVzZSB0aGUgbG93Ci0JICogb3JkZXIgMzIgYml0cyBvZiB0aGUgdXBkYXRlIGNvdW50Ci0JICovCi0xOglsd3oJcjgsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCi0JYW5kaS4JcjAscjgsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwotCWJuZS0JMWIKLQl4b3IJcjAscjgscjgJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCi0JYWRkCXI5LHI5LHIwCi0KLQkvKiBMb2FkIG9yaWcgc3RhbXAgKG9mZnNldCB0byBUQikgKi8KLQlsd3oJcjUsQ0ZHX1RCX09SSUdfU1RBTVAocjkpCi0JbHd6CXI2LChDRkdfVEJfT1JJR19TVEFNUCs0KShyOSkKLQotCS8qIEdldCBhIHN0YWJsZSBUQiB2YWx1ZSAqLwotMjoJbWZ0YnUJcjMKLQltZnRibAlyNAotCW1mdGJ1CXIwCi0JY21wbAljcjAscjMscjAKLQlibmUtCTJiCi0KLQkvKiBTdWJzdHJhY3QgdGIgb3JpZyBzdGFtcC4gSWYgdGhlIGhpZ2ggcGFydCBpcyBub24temVybywgd2UganVtcCB0byB0aGUKLQkgKiBzbG93IHBhdGggd2hpY2ggY2FsbCB0aGUgc3lzY2FsbC4gSWYgaXQncyBvaywgdGhlbiB3ZSBoYXZlIG91ciAzMiBiaXRzCi0JICogdGJfdGlja3MgdmFsdWUgaW4gcjcKLQkgKi8KLQlzdWJmYwlyNyxyNixyNAotCXN1YmZlLglyMCxyNSxyMwotCWJuZS0JM2YKLQotCS8qIExvYWQgc2NhbGUgZmFjdG9yICYgZG8gbXVsdGlwbGljYXRpb24gKi8KLQlsd3oJcjUsQ0ZHX1RCX1RPX1hTKHI5KQkvKiBsb2FkIHZhbHVlcyAqLwotCWx3eglyNiwoQ0ZHX1RCX1RPX1hTKzQpKHI5KQotCW11bGh3dQlyNCxyNyxyNQotCW11bGh3dQlyNixyNyxyNgotCW11bGx3CXIwLHI3LHI1Ci0JYWRkYwlyNixyNixyMAotCi0JLyogQXQgdGhpcyBwb2ludCwgd2UgaGF2ZSB0aGUgc2NhbGVkIHhzZWMgdmFsdWUgaW4gcjQgKyBYRVI6Q0EKLQkgKiB3ZSBsb2FkICYgYWRkIHRoZSBzdGFtcCBzaW5jZSBlcG9jaAotCSAqLwotCWx3eglyNSxDRkdfU1RBTVBfWFNFQyhyOSkKLQlsd3oJcjYsKENGR19TVEFNUF9YU0VDKzQpKHI5KQotCWFkZGUJcjQscjQscjYKLQlhZGR6ZQlyMyxyNQotCi0JLyogV2Ugbm93IGhhdmUgb3VyIHJlc3VsdCBpbiByMyxyNC4gV2UgY3JlYXRlIGEgZmFrZSBkZXBlbmRlbmN5Ci0JICogb24gdGhhdCByZXN1bHQgYW5kIHJlLWNoZWNrIHRoZSBjb3VudGVyCi0JICovCi0JeG9yCXIwLHI0LHI0Ci0JYWRkCXI5LHI5LHIwCi0JbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQotICAgICAgICBjbXBsICAgIGNyMCxyOCxyMAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwotCWJuZS0JMWIKLQotCS8qIFdhcm5pbmcgISBUaGUgY2FsbGVyIGV4cGVjdHMgQ1I6RVEgdG8gYmUgc2V0IHRvIGluZGljYXRlIGEKLQkgKiBzdWNjZXNzZnVsIGNhbGN1bGF0aW9uIChzbyBpdCB3b24ndCBmYWxsYmFjayB0byB0aGUgc3lzY2FsbAotCSAqIG1ldGhvZCkuIFdlIGhhdmUgb3ZlcnJpZGVuIHRoYXQgQ1IgYml0IGluIHRoZSBjb3VudGVyIGNoZWNrLAotCSAqIGJ1dCBmb3J0dW5hdGVseSwgdGhlIGxvb3AgZXhpdCBjb25kaXRpb24gX2lzXyBDUjpFUSBzZXQsIHNvCi0JICogd2UgY2FuIGV4aXQgc2FmZWx5IGhlcmUuIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBiZSBjYXJlZnVsCi0JICogb2YgdGhhdCBzaWRlIGVmZmVjdC4KLQkgKi8KLTM6CWJscgotICAuY2ZpX2VuZHByb2MKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkZjgwMi4uMDAwMDAwMAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKgotICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDY0IGJpdHMgcHJvY2Vzc2VzIGluIGEKLSAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLAotICogICAgICAgICAgICAgICAgICAgIElCTSBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KLSNpbmNsdWRlIDxhc20vdmRzby5oPgotI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgotCi0JLnRleHQKLS8qCi0gKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5Ci0gKgotICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOwotICoKLSAqLwotVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0gIC5jZmlfc3RhcnRwcm9jCi0JbWZscglyMTIKLSAgLmNmaV9yZWdpc3RlciBscixyMTIKLQotCW1yCXIxMSxyMwkJCS8qIHIxMSBob2xkcyB0diAqLwotCW1yCXIxMCxyNAkJCS8qIHIxMCBob2xkcyB0eiAqLwotCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJCS8qIGdldCBkYXRhIHBhZ2UgKi8KLQlibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJCS8qIGdldCB4c2VjIGZyb20gdGIgJiBrZXJuZWwgKi8KLQlsaXMgICAgIHI3LDE1CQkJLyogcjcgPSAxMDAwMDAwID0gVVNFQ19QRVJfU0VDICovCi0Jb3JpICAgICByNyxyNywxNjk2MAotCXJsZGljbCAgcjUscjQsNDQsMjAJCS8qIHI1ID0gc2VjID0geHNlYyAvIFhTRUNfUEVSX1NFQyAqLwotCXJsZGljciAgcjYscjUsMjAsNDMJCS8qIHI2ID0gc2VjICogWFNFQ19QRVJfU0VDICovCi0Jc3RkCXI1LFRWQUw2NF9UVl9TRUMocjExKQkvKiBzdG9yZSBzZWMgaW4gdHYgKi8KLQlzdWJmCXIwLHI2LHI0CQkvKiByMCA9IHhzZWMgPSAoeHNlYyAtIHI2KSAqLwotCW11bGxkICAgcjAscjAscjcJCS8qIHVzZWMgPSAoeHNlYyAqIFVTRUNfUEVSX1NFQykgLyBYU0VDX1BFUl9TRUMgKi8KLQlybGRpY2wgIHIwLHIwLDQ0LDIwCi0JY21wbGRpCWNyMCxyMTAsMAkJLyogY2hlY2sgaWYgdHogaXMgTlVMTCAqLwotCXN0ZAlyMCxUVkFMNjRfVFZfVVNFQyhyMTEpCS8qIHN0b3JlIHVzZWMgaW4gdHYgKi8KLQliZXEJMWYKLQlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjMpLyogZmlsbCB0eiAqLwotCWx3eglyNSxDRkdfVFpfRFNUVElNRShyMykKLQlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTApCi0Jc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjEwKQotMToJbXRscglyMTIKLQlsaQlyMywwCQkJLyogYWx3YXlzIHN1Y2Nlc3MgKi8KLQlibHIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIGNvcmUgb2YgZ2V0dGltZW9mZGF5KCksIGl0IHJldHVybnMgdGhlIHhzZWMKLSAqIHZhbHVlIGluIHI0IGFuZCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgKG5vbiBjbG9iYmVyZWQpCi0gKiBpbiByMy4gY2xvYmJlcnMgcjAscjQscjUscjYscjcscjgKLSovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fZG9fZ2V0X3hzZWMpCi0gIC5jZmlfc3RhcnRwcm9jCi0JLyogY2hlY2sgZm9yIHVwZGF0ZSBjb3VudCAmIGxvYWQgdmFsdWVzICovCi0xOglsZAlyNyxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQotCWFuZGkuCXIwLHI0LDEJCQkvKiBwZW5kaW5nIHVwZGF0ZSA/IGxvb3AgKi8KLQlibmUtCTFiCi0JeG9yCXIwLHI0LHI0CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLwotCWFkZAlyMyxyMyxyMAotCi0JLyogR2V0IFRCICYgb2Zmc2V0IGl0ICovCi0JbWZ0YglyOAotCWxkCXI5LENGR19UQl9PUklHX1NUQU1QKHIzKQotCXN1YmYJcjgscjkscjgKLQotCS8qIFNjYWxlIHJlc3VsdCAqLwotCWxkCXI1LENGR19UQl9UT19YUyhyMykKLQltdWxoZHUJcjgscjgscjUKLQotCS8qIEFkZCBzdGFtcCBzaW5jZSBlcG9jaCAqLwotCWxkCXI2LENGR19TVEFNUF9YU0VDKHIzKQotCWFkZAlyNCxyNixyOAotCi0JeG9yCXIwLHI0LHI0Ci0JYWRkCXIzLHIzLHIwCi0JbGQJcjAsQ0ZHX1RCX1VQREFURV9DT1VOVChyMykKLSAgICAgICAgY21wbGQgICBjcjAscjAscjcJCS8qIGNoZWNrIGlmIHVwZGF0ZWQgKi8KLQlibmUtCTFiCi0JYmxyCi0gIC5jZmlfZW5kcHJvYwotVl9GVU5DVElPTl9FTkQoX19kb19nZXRfeHNlYykKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYwppbmRleCBiZjE4NDlkLi40ODE4MDUzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCkBAIC01ODcsNiArNTg3LDggQEAKIHVuc2lnbmVkIGludCBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKIHVuc2lnbmVkIGludCBpY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZDsKIAorc3RhdGljIGludCBuY3B1c19wcm9iZWQ7CisKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqX191bnVzZWQpCiB7CiAJc2VxX3ByaW50ZihtLCAKQEAgLTU5NSw4ICs1OTcsOCBAQAogCQkgICAicHJvbWxpYlx0XHQ6IFZlcnNpb24gMyBSZXZpc2lvbiAlZFxuIgogCQkgICAicHJvbVx0XHQ6ICVkLiVkLiVkXG4iCiAJCSAgICJ0eXBlXHRcdDogc3VuNHVcbiIKLQkJICAgIm5jcHVzIHByb2JlZFx0OiAlbGRcbiIKLQkJICAgIm5jcHVzIGFjdGl2ZVx0OiAlbGRcbiIKKwkJICAgIm5jcHVzIHByb2JlZFx0OiAlZFxuIgorCQkgICAibmNwdXMgYWN0aXZlXHQ6ICVkXG4iCiAJCSAgICJEJCBwYXJpdHkgdGwxXHQ6ICV1XG4iCiAJCSAgICJJJCBwYXJpdHkgdGwxXHQ6ICV1XG4iCiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTYxMCw4ICs2MTIsOCBAQAogCQkgICBwcm9tX3ByZXYgPj4gMTYsCiAJCSAgIChwcm9tX3ByZXYgPj4gOCkgJiAweGZmLAogCQkgICBwcm9tX3ByZXYgJiAweGZmLAotCQkgICAobG9uZyludW1fcG9zc2libGVfY3B1cygpLAotCQkgICAobG9uZyludW1fb25saW5lX2NwdXMoKSwKKwkJICAgbmNwdXNfcHJvYmVkLAorCQkgICBudW1fb25saW5lX2NwdXMoKSwKIAkJICAgZGNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQsCiAJCSAgIGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkCiAjaWZuZGVmIENPTkZJR19TTVAKQEAgLTY3Nyw2ICs2NzksMTUgQEAKIAlpbnQgaSwgZXJyOwogCiAJZXJyID0gLUVOT01FTTsKKworCS8qIENvdW50IHRoZSBudW1iZXIgb2YgcGh5c2ljYWxseSBwcmVzZW50IHByb2Nlc3NvcnMgaW4KKwkgKiB0aGUgbWFjaGluZSwgZXZlbiBvbiB1bmlwcm9jZXNzb3IsIHNvIHRoYXQgL3Byb2MvY3B1aW5mbworCSAqIG91dHB1dCBpcyBjb25zaXN0ZW50IHdpdGggMi40LngKKwkgKi8KKwluY3B1c19wcm9iZWQgPSAwOworCXdoaWxlICghY3B1X2ZpbmRfYnlfaW5zdGFuY2UobmNwdXNfcHJvYmVkLCBOVUxMLCBOVUxMKSkKKwkJbmNwdXNfcHJvYmVkKys7CisKIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CiAJCWlmIChjcHVfcG9zc2libGUoaSkpIHsKIAkJCXN0cnVjdCBjcHUgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKaW5kZXggNzk3YTY1NC4uNmVmYzAzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgogI2luY2x1ZGUgPGFzbS90bGIuaD4KIAotZXh0ZXJuIGludCBsaW51eF9udW1fY3B1czsKIGV4dGVybiB2b2lkIGNhbGlicmF0ZV9kZWxheSh2b2lkKTsKIAogLyogUGxlYXNlIGRvbid0IG1ha2UgdGhpcyBzdHVmZiBpbml0ZGF0YSEhISAgLS1EYXZlTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCA0Y2YzMWEyLi44NGM3M2EzIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtMjY4LDkgKzI2OCwxMCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VzX2xvY2spOwogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlcyA9IExJU1RfSEVBRF9JTklUKGRldmljZXMpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7Ci0JLm5hbWUgID0gRFJJVkVSX05BTUUsCi0JLmJ1cyAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdW1sX25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiBzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwogCkBAIC0zMTcsNyArMzE4LDcgQEAKIAogCS8qIHN5c2ZzIHJlZ2lzdGVyICovCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlkcml2ZXJfcmVnaXN0ZXIoJnVtbF9uZXRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1bWxfbmV0X2RyaXZlcik7CiAJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKIAl9CiAJZGV2aWNlLT5wZGV2LmlkID0gbjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKaW5kZXggYjJjODYyNS4uOTM4OTg5MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3ViZF9rZXJuLmMKQEAgLTgyMyw5ICs4MjMsMTAgQEAKIAogX19pbml0Y2FsbCh1YmRfbWNfaW5pdCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1YmRfZHJpdmVyID0gewotCS5uYW1lICA9IERSSVZFUl9OQU1FLAotCS5idXMgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHViZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIGludCB1YmRfaW5pdCh2b2lkKQpAQCAtODUwLDcgKzg1MSw3IEBACiAJCWlmIChyZWdpc3Rlcl9ibGtkZXYoZmFrZV9tYWpvciwgInViZCIpKQogCQkJcmV0dXJuIC0xOwogCX0KLQlkcml2ZXJfcmVnaXN0ZXIoJnViZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWJkX2RyaXZlcik7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9ERVY7IGkrKykgCiAJCXViZF9hZGQoaSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwppbmRleCA5NmI5YmI0Li4wZGM1NWNjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKQEAgLTYxNiw5ICs2MTYsMTAgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXNzX25ldF9kcml2ZXIgPSB7Ci0JLm5hbWUgID0gRFJJVkVSX05BTUUsCi0JLmJ1cyAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNzX25ldF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgID0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgZHJpdmVyX3JlZ2lzdGVyZWQ7CkBAIC02NjksNyArNjcwLDcgQEAKIAkvKiBzeXNmcyByZWdpc3RlciAqLwogCiAJaWYgKCFkcml2ZXJfcmVnaXN0ZXJlZCkgewotCQlkcml2ZXJfcmVnaXN0ZXIoJmlzc19uZXRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpc3NfbmV0X2RyaXZlcik7CiAJCWRyaXZlcl9yZWdpc3RlcmVkID0gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9nbHVlLmMgYi9kcml2ZXJzL2FjcGkvZ2x1ZS5jCmluZGV4IDM5MzdhZGYuLmFhOTkzNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9nbHVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2dsdWUuYwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJYWNwaV9nZXRfZGV2aWNlcyhQQ0lfUk9PVF9ISURfU1RSSU5HLCBmaW5kX3BjaV9yb290YnJpZGdlLCAmZmluZCwgTlVMTCk7CiAJcmV0dXJuIGZpbmQuaGFuZGxlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKTsKIAogLyogR2V0IGRldmljZSdzIGhhbmRsZXIgcGVyIGl0cyBhZGRyZXNzIHVuZGVyIGl0cyBwYXJlbnQgKi8KIHN0cnVjdCBhY3BpX2ZpbmRfY2hpbGQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDBjZGVkMDQuLjgyMWM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTE1MTEsOCArMTUxMSw4IEBACiAgICAgLy8gYS5rLmEuIHByZXBhcmUgdGhlIGNoYW5uZWwgYW5kIHJlbWVtYmVyIHRoYXQgd2UgaGF2ZSBkb25lIHNvLgogICAgIAogICAgIHR4X2NoX2Rlc2MgKiB0eF9kZXNjID0gJm1lbW1hcC0+dHhfZGVzY3NbdHhfY2hhbm5lbF07Ci0gICAgdTE2IHJkX3B0cjsKLSAgICB1MTYgd3JfcHRyOworICAgIHUzMiByZF9wdHI7CisgICAgdTMyIHdyX3B0cjsKICAgICB1MTYgY2hhbm5lbCA9IHZjYy0+Y2hhbm5lbDsKICAgICAKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwppbmRleCA2ZDQ3MzZlLi44ODI3ZGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYwpAQCAtMjAsNiArMjAsOCBAQAogCiAjaW5jbHVkZSAiYmFzZS5oIgogCisjZGVmaW5lIHRvX3BsYXRmb3JtX2RyaXZlcihkcnYpCShjb250YWluZXJfb2YoKGRydiksIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIsIGRyaXZlcikpCisKIHN0cnVjdCBkZXZpY2UgcGxhdGZvcm1fYnVzID0gewogCS5idXNfaWQJCT0gInBsYXRmb3JtIiwKIH07CkBAIC0zNTQsNiArMzU2LDc3IEBACiAJcmV0dXJuIEVSUl9QVFIocmV0dmFsKTsKIH0KIAorc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5wcm9iZShkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZW1vdmUoZGV2KTsKK30KKworc3RhdGljIHZvaWQgcGxhdGZvcm1fZHJ2X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJZHJ2LT5zaHV0ZG93bihkZXYpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5zdXNwZW5kKGRldiwgc3RhdGUpOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoX2Rldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CisKKwlyZXR1cm4gZHJ2LT5yZXN1bWUoZGV2KTsKK30KKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIKKyAqCUBkcnY6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLworaW50IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYpCit7CisJZHJ2LT5kcml2ZXIuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOworCWlmIChkcnYtPnByb2JlKQorCQlkcnYtPmRyaXZlci5wcm9iZSA9IHBsYXRmb3JtX2Rydl9wcm9iZTsKKwlpZiAoZHJ2LT5yZW1vdmUpCisJCWRydi0+ZHJpdmVyLnJlbW92ZSA9IHBsYXRmb3JtX2Rydl9yZW1vdmU7CisJaWYgKGRydi0+c2h1dGRvd24pCisJCWRydi0+ZHJpdmVyLnNodXRkb3duID0gcGxhdGZvcm1fZHJ2X3NodXRkb3duOworCWlmIChkcnYtPnN1c3BlbmQpCisJCWRydi0+ZHJpdmVyLnN1c3BlbmQgPSBwbGF0Zm9ybV9kcnZfc3VzcGVuZDsKKwlpZiAoZHJ2LT5yZXN1bWUpCisJCWRydi0+ZHJpdmVyLnJlc3VtZSA9IHBsYXRmb3JtX2Rydl9yZXN1bWU7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKTsKKworLyoqCisgKglwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcgorICoJQGRydjogcGxhdGZvcm0gZHJpdmVyIHN0cnVjdHVyZQorICovCit2b2lkIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIpOworCiAKIC8qKgogICoJcGxhdGZvcm1fbWF0Y2ggLSBiaW5kIHBsYXRmb3JtIGRldmljZSB0byBwbGF0Zm9ybSBkcml2ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCmluZGV4IGJhNTRiNTguLmIwMmZjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYWxpLWFncC5jCkBAIC0zODksNyArMzg5LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfYWxpX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYWxpX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFsaSIsCiAJLmlkX3RhYmxlCT0gYWdwX2FsaV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbGlfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jCmluZGV4IDQwZmNkODhiMi4uMWY3NzY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTUxNSw3ICs1MTUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hbWRrN19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2FtZGs3X3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFtZGs3IiwKIAkuaWRfdGFibGUJPSBhZ3BfYW1kazdfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfYW1kazdfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCA4Zjc0OGZkLi43OGNlOThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTcwMyw3ICs3MDMsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hbWQ2NF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2FtZDY0X3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWFtZDY0IiwKIAkuaWRfdGFibGUJPSBhZ3BfYW1kNjRfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfYW1kNjRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2F0aS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCmluZGV4IGZiZDQxNTUuLjUzMzcyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jCkBAIC01MjEsNyArNTIxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfYXRpX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYXRpX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWF0aSIsCiAJLmlkX3RhYmxlCT0gYWdwX2F0aV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hdGlfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwppbmRleCBkNDFlMGE2Li5lN2FlYTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKQEAgLTQyOSw3ICs0MjksNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9lZmZpY2Vvbl9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2VmZmljZW9uX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWVmZmljZW9uIiwKIAkuaWRfdGFibGUJPSBhZ3BfZWZmaWNlb25fcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfZWZmaWNlb25fcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKaW5kZXggMzRhNDQ0Ni4uOGVlMTlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYwpAQCAtNjIyLDcgKzYyMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2ludGVsX2k0NjBfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9pbnRlbF9pNDYwX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LWludGVsLWk0NjAiLAogCS5pZF90YWJsZQk9IGFncF9pbnRlbF9pNDYwX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2ludGVsX2k0NjBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCAwMjcxNjFhLi5lN2JlZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTE4MjcsNyArMTgyNyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2ludGVsX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfaW50ZWxfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtaW50ZWwiLAogCS5pZF90YWJsZQk9IGFncF9pbnRlbF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9pbnRlbF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvbnZpZGlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKaW5kZXggM2FlZDBjNS4uODBkYWZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMKQEAgLTM5OCw3ICszOTgsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9udmlkaWFfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9udmlkaWFfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtbnZpZGlhIiwKIAkuaWRfdGFibGUJPSBhZ3BfbnZpZGlhX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX252aWRpYV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc2lzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKaW5kZXggYTcwMTM2MS4uZWJjMDU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMKQEAgLTMzMiw3ICszMzIsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9zaXNfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9zaXNfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtc2lzIiwKIAkuaWRfdGFibGUJPSBhZ3Bfc2lzX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX3Npc19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3Avc3dvcmtzLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKaW5kZXggNWE1MzkyZC4uM2Y4ZjdmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMKQEAgLTU0NSw3ICs1NDUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9zZXJ2ZXJ3b3Jrc19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3NlcnZlcndvcmtzX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXNlcnZlcndvcmtzIiwKIAkuaWRfdGFibGUJPSBhZ3Bfc2VydmVyd29ya3NfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3Bfc2VydmVyd29ya3NfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwppbmRleCAxODNjNTBhLi5jODI1NTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTY1OCw3ICs2NTgsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF91bmlub3J0aF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3VuaW5vcnRoX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXVuaW5vcnRoIiwKIAkuaWRfdGFibGUJPSBhZ3BfdW5pbm9ydGhfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfdW5pbm9ydGhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL3ZpYS1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCmluZGV4IDVkOWExMzcuLmM4NDdkZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jCkBAIC01MTgsNyArNTE4LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3ZpYV9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC12aWEiLAogCS5pZF90YWJsZQk9IGFncF92aWFfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfdmlhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2VwY2EuYyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKaW5kZXggYjdhMGU0ZC4uNDA3NzA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2VwY2EuYworKysgYi9kcml2ZXJzL2NoYXIvZXBjYS5jCkBAIC0zMTEzLDcgKzMxMTMsNiBAQAogaW50IF9faW5pdCBpbml0X1BDSSAodm9pZCkKIHsJLyogQmVnaW4gaW5pdF9QQ0kgKi8KIAltZW1zZXQgKCZlcGNhX2RyaXZlciwgMCwgc2l6ZW9mIChlcGNhX2RyaXZlcikpOwotCWVwY2FfZHJpdmVyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJZXBjYV9kcml2ZXIubmFtZSA9ICJlcGNhIjsKIAllcGNhX2RyaXZlci5pZF90YWJsZSA9IGVwY2FfcGNpX3RibDsKIAllcGNhX2RyaXZlci5wcm9iZSA9IGVwY2FfaW5pdF9vbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IGMxZDA2YmEuLmQxNmJkNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0yNjQ4LDcgKzI2NDgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwogCWlmICghbGlzdF9lbXB0eSgmaW50Zi0+d2FpdGluZ19tc2dzKSkgewogCQlsaXN0X2FkZF90YWlsKCZtc2ctPmxpbmssICZpbnRmLT53YWl0aW5nX21zZ3MpOwotCQlzcGluX3VubG9jaygmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKQEAgLTI2NTcsOSArMjY1Nyw5IEBACiAJaWYgKHJ2ID4gMCkgewogCQkvKiBDb3VsZCBub3QgaGFuZGxlIHRoZSBtZXNzYWdlIG5vdywganVzdCBhZGQgaXQgdG8gYQogICAgICAgICAgICAgICAgICAgIGxpc3QgdG8gaGFuZGxlIGxhdGVyLiAqLwotCQlzcGluX2xvY2soJmludGYtPndhaXRpbmdfbXNnc19sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJmludGYtPndhaXRpbmdfbXNncyk7Ci0JCXNwaW5fdW5sb2NrKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJfSBlbHNlIGlmIChydiA9PSAwKSB7CiAJCWlwbWlfZnJlZV9zbWlfbXNnKG1zZyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3MzYzI0MTAtcnRjLmMgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwppbmRleCBkNzI0YzBkLi4zZGY3YTU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJLnByb2MJICAgICAgICA9IHMzYzI0MTBfcnRjX3Byb2MsCiB9OwogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3J0Y19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZW4pCitzdGF0aWMgdm9pZCBzM2MyNDEwX3J0Y19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGVuKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTM5OSwyMSArMzk5LDIxIEBACiAJCS8qIHJlLWVuYWJsZSB0aGUgZGV2aWNlLCBhbmQgY2hlY2sgaXQgaXMgb2sgKi8KIAogCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX1JUQ0VOKSA9PSAwKXsKLQkJCWRldl9pbmZvKGRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwogCiAJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CiAJCQl3cml0ZWIodG1wIHwgUzNDMjQxMF9SVENDT05fUlRDRU4gLCBTM0MyNDEwX1JUQ0NPTik7CiAJCX0KIAogCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCkpewotCQkJZGV2X2luZm8oZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ05UU0VMXG4iKTsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZW1vdmluZyBTM0MyNDEwX1JUQ0NPTl9DTlRTRUxcbiIpOwogCiAJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CiAJCQl3cml0ZWIodG1wJiB+UzNDMjQxMF9SVENDT05fQ05UU0VMICwgUzNDMjQxMF9SVENDT04pOwogCQl9CiAKIAkJaWYgKChyZWFkYihTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9DTEtSU1QpKXsKLQkJCWRldl9pbmZvKGRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NMS1JTVFxuIik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ0xLUlNUXG4iKTsKIAogCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOwogCQkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1JUQ0NPTl9DTEtSU1QsIFMzQzI0MTBfUlRDQ09OKTsKQEAgLTQyMSw3ICs0MjEsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVucmVnaXN0ZXJfcnRjKCZzM2MyNDEwX3J0Y29wcyk7CiAKQEAgLTQzOCwyNSArNDM4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCi0JcHJfZGVidWcoIiVzOiBwcm9iZT0lcCwgZGV2aWNlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYsIGRldik7CisJcHJfZGVidWcoIiVzOiBwcm9iZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCS8qIGZpbmQgdGhlIElSUXMgKi8KIAogCXMzYzI0MTBfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CiAJaWYgKHMzYzI0MTBfcnRjX3RpY2tubyA8PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgcnRjIHRpY2tcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlzM2MyNDEwX3J0Y19hbGFybW5vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoczNjMjQxMF9ydGNfYWxhcm1ubyA8PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gaXJxIGZvciBhbGFybVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgYWxhcm1cbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTQ2Nyw3ICs0NjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb24gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTQ3NSwxNCArNDc0LDE0IEBACiAJCQkJICAgICBwZGV2LT5uYW1lKTsKIAogCWlmIChzM2MyNDEwX3J0Y19tZW0gPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2VycjsKIAl9CiAKIAlzM2MyNDEwX3J0Y19iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoczNjMjQxMF9ydGNfYmFzZSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIGlvcmVtYXAoKVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCBpb3JlbWFwKClcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXRfZXJyOwogCX0KQEAgLTQ5NCw3ICs0OTMsNyBAQAogCiAJLyogY2hlY2sgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgY29ycmVjdGx5ICovCiAKLQlzM2MyNDEwX3J0Y19lbmFibGUoZGV2LCAxKTsKKwlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7CiAKICAJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBSVENDT049JTAyeFxuIiwgcmVhZGIoUzNDMjQxMF9SVENDT04pKTsKIApAQCAtNTA2LDcgKzUwNSw3IEBACiAJcmV0dXJuIDA7CiAKICBleGl0X2VycjoKLQlkZXZfZXJyKGRldiwgImVycm9yICVkIGR1cmluZyBpbml0aWFsaXNhdGlvblxuIiwgcmV0KTsKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciAlZCBkdXJpbmcgaW5pdGlhbGlzYXRpb25cbiIsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNTE5LDcgKzUxOCw3IEBACiAKIHN0YXRpYyBpbnQgdGljbnRfc2F2ZTsKIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2MyNDEwX3J0Y19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJc3RydWN0IHRpbWVzcGVjIHRpbWU7CkBAIC01MzUsMTkgKzUzNCwxOSBAQAogCXMzYzI0MTBfcnRjX2dldHRpbWUoJnRtKTsKIAlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lLnR2X3NlYyk7CiAJc2F2ZV90aW1lX2RlbHRhKCZzM2MyNDEwX3J0Y19kZWx0YSwgJnRpbWUpOwotCXMzYzI0MTBfcnRjX2VuYWJsZShkZXYsIDApOworCXMzYzI0MTBfcnRjX2VuYWJsZShwZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKIAogCXRpbWUudHZfbnNlYyA9IDA7CiAKLQlzM2MyNDEwX3J0Y19lbmFibGUoZGV2LCAxKTsKKwlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7CiAJczNjMjQxMF9ydGNfZ2V0dGltZSgmdG0pOwogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzYzI0MTBfcnRjX2RlbHRhLCAmdGltZSk7CkBAIC01NjAsMTQgKzU1OSwxNSBAQAogI2RlZmluZSBzM2MyNDEwX3J0Y19yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMF9ydGNkcnYgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtcnRjIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX3J0Y2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9ydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwX3J0Y19yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNDEwX3J0Y19zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMF9ydGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGJhbm5lcltdID0gIlMzQzI0MTAgUlRDLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiI7CkBAIC01NzUsMTIgKzU3NSwxMiBAQAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9ydGNfaW5pdCh2b2lkKQogewogCXByaW50ayhiYW5uZXIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwX3J0Y19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOwogfQogCiBtb2R1bGVfaW5pdChzM2MyNDEwX3J0Y19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zb255cGkuYyBiL2RyaXZlcnMvY2hhci9zb255cGkuYwppbmRleCBkMDUwNjdkLi41MWEwNzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc29ueXBpLmMKKysrIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCkBAIC0xMTY4LDcgKzExNjgsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvbGRfY2FtZXJhX3Bvd2VyOwogCi1zdGF0aWMgaW50IHNvbnlwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzb255cGlfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlvbGRfY2FtZXJhX3Bvd2VyID0gc29ueXBpX2RldmljZS5jYW1lcmFfcG93ZXI7CiAJc29ueXBpX2Rpc2FibGUoKTsKQEAgLTExNzYsMjYgKzExNzYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzb255cGlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc29ueXBpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc29ueXBpX2VuYWJsZShvbGRfY2FtZXJhX3Bvd2VyKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBzb255cGlfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc29ueXBpX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzb255cGlfZGlzYWJsZSgpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc29ueXBpX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic29ueXBpIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNvbnlwaV9kcml2ZXIgPSB7CiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzb255cGlfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNvbnlwaV9yZXN1bWUsCiAjZW5kaWYKIAkuc2h1dGRvd24JPSBzb255cGlfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNvbnlwaSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNvbnlwaV9jcmVhdGVfaW5wdXRfZGV2aWNlcyh2b2lkKQpAQCAtMTQ1NSwyMCArMTQ1NiwyMCBAQAogCWlmICghZG1pX2NoZWNrX3N5c3RlbShzb255cGlfZG1pX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHNvbnlwaV9wcm9iZSgpOwogCWlmIChyZXQpCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNvbnlwaV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKIAlzb255cGlfcmVtb3ZlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggNWQxZmZhMy4uODJjNmFiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTkxMiw3ICs5MTIsNiBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3luY2xpbmtfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInN5bmNsaW5rIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua19wY2lfdGJsLAogCS5wcm9iZQkJPSBzeW5jbGlua19pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCmluZGV4IDdjMDYzYzUuLmVlNWE0MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYwpAQCAtNTAwLDcgKzUwMCw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeW5jbGlua21wX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzeW5jbGlua21wIiwKIAkuaWRfdGFibGUJPSBzeW5jbGlua21wX3BjaV90YmwsCiAJLnByb2JlCQk9IHN5bmNsaW5rbXBfaW5pdF9vbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMgYi9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKaW5kZXggMjQzNTViMi4uYjNkNDExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RiMDIxOS5jCisrKyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwpAQCAtMjgzLDcgKzI4Myw3IEBACiAJdnI0MXh4X3NldF9pcnFfbGV2ZWwoVEIwMjE5X1BDSV9TTE9UM19QSU4sIElSUV9MRVZFTF9MT1cpOwogfQogCi1zdGF0aWMgaW50IHRiMDIxOV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRiMDIxOV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtMzE5LDcgKzMxOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGIwMjE5X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHRiMDIxOV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCV9tYWNoaW5lX3Jlc3RhcnQgPSBvbGRfbWFjaGluZV9yZXN0YXJ0OwogCkBAIC0zMzMsMTEgKzMzMywxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdGIwMjE5X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRiMDIxOV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJUQjAyMTkiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGIwMjE5X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHRiMDIxOV9wcm9iZSwKIAkucmVtb3ZlCQk9IHRiMDIxOV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIlRCMDIxOSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRhbmJhY190YjAyMTlfaW5pdCh2b2lkKQpAQCAtMzQ4LDcgKzM0OSw3IEBACiAJaWYgKElTX0VSUih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTM1Nyw3ICszNTgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdGFuYmFjX3RiMDIxOV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRiMDIxOV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodGIwMjE5X3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwppbmRleCA5NDY0MTA4Li45YWM2ZDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKQEAgLTYxMyw3ICs2MTMsNyBAQAogCS5yZWxlYXNlCT0gZ3Bpb19yZWxlYXNlLAogfTsKIAotc3RhdGljIGludCBnaXVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBnaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemUsIGZsYWdzID0gMDsKIAl1bnNpZ25lZCBpbnQgbnJfcGlucyA9IDA7CkBAIC02OTcsNyArNjk3LDcgQEAKIAlyZXR1cm4gY2FzY2FkZV9pcnEoR0lVSU5UX0lSUSwgZ2l1X2dldF9pcnEpOwogfQogCi1zdGF0aWMgaW50IGdpdV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBnaXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpb3VubWFwKGdpdV9iYXNlKTsKIApAQCAtNzEwLDExICs3MTAsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdpdV9wbGF0Zm9ybV9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnaXVfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiR0lVIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdpdV9kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBnaXVfcHJvYmUsCiAJLnJlbW92ZQkJPSBnaXVfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJHSVUiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfZ2l1X2luaXQodm9pZCkKQEAgLTcyNSw3ICs3MjYsNyBAQAogCWlmIChJU19FUlIoZ2l1X3BsYXRmb3JtX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCkBAIC03MzQsNyArNzM1LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9naXVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZnaXVfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdpdV9wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKaW5kZXggNWUzMjkyZC4uNDM1YjMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCkBAIC01NjAsMTMgKzU2MCwxMSBAQAogCS5mb3BzCT0gJnJ0Y19mb3BzLAogfTsKIAotc3RhdGljIGludCBydGNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXVuc2lnbmVkIGludCBpcnE7CiAJaW50IHJldHZhbDsKIAotCXBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC02MzUsNyArNjMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtNjU1LDExICs2NTMsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ0Y19wbGF0Zm9ybV9kZXZpY2U7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBydGNfZGV2aWNlX2RyaXZlciA9IHsKLQkubmFtZQkJPSBydGNfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0Y19kZXZpY2VfZHJpdmVyID0gewogCS5wcm9iZQkJPSBydGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBydGNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IHJ0Y19uYW1lLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB2cjQxeHhfcnRjX2luaXQodm9pZCkKQEAgLTY5MSw3ICs2OTAsNyBAQAogCWlmIChJU19FUlIocnRjX3BsYXRmb3JtX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogCkBAIC03MDAsNyArNjk5LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9ydGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZydGNfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHJ0Y19wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggZGE2MzFjMS4uOWRlZmNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC0xMzksNyArMTM5LDcgQEAKICAqLwogc3RhdGljIGludCBtcGNvcmVfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IGRldl9nZXRfZHJ2ZGF0YSgmbXBjb3JlX3dkdF9kZXYtPmRldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG1wY29yZV93ZHRfZGV2KTsKIAogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZ3ZHQtPnRpbWVyX2FsaXZlKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI5MSw5ICsyOTEsOSBAQAogICoJU3lzdGVtIHNodXRkb3duIGhhbmRsZXIuICBUdXJuIG9mZiB0aGUgd2F0Y2hkb2cgaWYgd2UncmUKICAqCXJlc3RhcnRpbmcgb3IgaGFsdGluZyB0aGUgc3lzdGVtLgogICovCi1zdGF0aWMgdm9pZCBtcGNvcmVfd2R0X3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgdm9pZCBtcGNvcmVfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUkVTVEFSVCB8fCBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0hBTFQpCiAJCW1wY29yZV93ZHRfc3RvcCh3ZHQpOwpAQCAtMzE3LDkgKzMxNyw4IEBACiAJLmZvcHMJCT0gJm1wY29yZV93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wY29yZV93ZHRfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wY29yZV93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQ7CkBAIC0zNjQsNyArMzYzLDcgQEAKIAl9CiAKIAltcGNvcmVfd2R0X3N0b3Aod2R0KTsKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCB3ZHQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKCZkZXYtPmRldiwgd2R0KTsKIAltcGNvcmVfd2R0X2RldiA9IGRldjsKIAogCXJldHVybiAwOwpAQCAtMzc5LDExICszNzgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGNvcmVfd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtcGNvcmVfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCW1pc2NfZGVyZWdpc3RlcigmbXBjb3JlX3dkdF9taXNjZGV2KTsKIApAQCAtMzk1LDEzICszOTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1wY29yZV93ZHRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAibXBjb3JlX3dkdCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGNvcmVfd2R0X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gbXBjb3JlX3dkdF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1wY29yZV93ZHRfcmVtb3ZlKSwKIAkuc2h1dGRvd24JPSBtcGNvcmVfd2R0X3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAibXBjb3JlX3dkdCIsCisJfSwKIH07CiAKIHN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIk1QY29yZSBXYXRjaGRvZyBUaW1lcjogMC4xLiBtcGNvcmVfbm9ib290PSVkIG1wY29yZV9tYXJnaW49JWQgc2VjIChub3dheW91dD0gJWQpXG4iOwpAQCAtNDIwLDEyICs0MjAsMTIgQEAKIAogCXByaW50ayhiYW5uZXIsIG1wY29yZV9ub2Jvb3QsIG1wY29yZV9tYXJnaW4sIG5vd2F5b3V0KTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtcGNvcmVfd2R0X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXBjb3JlX3dkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1wY29yZV93ZHRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmluZGV4IDExOWIzYzUuLjAwZDllZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0xODIsMTAgKzE4Miw5IEBACiAJLmZvcHMgPSAmbXY2NHg2MF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG12NjR4NjBfd2R0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG12NjR4NjBfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBtdjY0eDYwX3dkdF9wZGF0YSAqcGRhdGEgPSBwZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12NjR4NjBfd2R0X3BkYXRhICpwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGJ1c19jbGsgPSAxMzM7CiAKIAltdjY0eDYwX3dkdF90aW1lb3V0ID0gMTA7CkBAIC0yMDIsNyArMjAxLDcgQEAKIAlyZXR1cm4gbWlzY19yZWdpc3RlcigmbXY2NHg2MF93ZHRfbWlzY2Rldik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG12NjR4NjBfd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtdjY0eDYwX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCW1pc2NfZGVyZWdpc3RlcigmbXY2NHg2MF93ZHRfbWlzY2Rldik7CiAKQEAgLTIxMiwxMiArMjExLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0eDYwX3dkdF9kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSBNVjY0eDYwX1dEVF9OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdjY0eDYwX3dkdF9kcml2ZXIgPSB7CiAJLnByb2JlID0gbXY2NHg2MF93ZHRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG12NjR4NjBfd2R0X3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5uYW1lID0gTVY2NHg2MF9XRFRfTkFNRSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12NjR4NjBfd2R0X2RldjsKQEAgLTIzNSwxNCArMjM1LDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjR4NjBfd2R0X2RyaXZlcik7CiAgICAgICBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG12NjR4NjBfd2R0X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtdjY0eDYwX3dkdF9kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF9wY2kuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IGQ5ZWY1NWIuLjI0NTFlZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC03NTUsNyArNzU1LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lwY3dkX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpcGN3ZF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9IFdBVENIRE9HX05BTUUsCiAJLmlkX3RhYmxlCT0gcGNpcGN3ZF9wY2lfdGJsLAogCS5wcm9iZQkJPSBwY2lwY3dkX2NhcmRfaW5pdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zM2MyNDEwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKaW5kZXggNzUxY2I3Ny4uZWI2NjdkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKQEAgLTM0NywxNSArMzQ3LDE0IEBACiB9CiAvKiBkZXZpY2UgaW50ZXJmYWNlICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMHdkdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHN0YXJ0ZWQgPSAwOwogCWludCByZXQ7CiAJaW50IHNpemU7CiAKLQlEQkcoIiVzOiBwcm9iZT0lcCwgZGV2aWNlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYsIGRldik7CisJREJHKCIlczogcHJvYmU9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAkvKiBnZXQgdGhlIG1lbW9yeSByZWdpb24gZm9yIHRoZSB3YXRjaGRvZyB0aW1lciAqLwogCkBAIC0zODYsMTMgKzM4NSwxMyBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNDEwd2R0X2lycSwgMCwgcGRldi0+bmFtZSwgZGV2KTsKKwlyZXQgPSByZXF1ZXN0X2lycShyZXMtPnN0YXJ0LCBzM2MyNDEwd2R0X2lycSwgMCwgcGRldi0+bmFtZSwgcGRldik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWlsZWQgdG8gaW5zdGFsbCBpcnEgKCVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3ZHRfY2xvY2sgPSBjbGtfZ2V0KGRldiwgIndhdGNoZG9nIik7CisJd2R0X2Nsb2NrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAid2F0Y2hkb2ciKTsKIAlpZiAod2R0X2Nsb2NrID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhaWxlZCB0byBmaW5kIHdhdGNoZG9nIGNsb2NrIHNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtNDMwLDcgKzQyOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMHdkdF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKHdkdF9tZW0gIT0gTlVMTCkgewogCQlyZWxlYXNlX3Jlc291cmNlKHdkdF9tZW0pOwpAQCAtNDU0LDcgKzQ1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTB3ZHRfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczNjMjQxMHdkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJczNjMjQxMHdkdF9zdG9wKCk7CQogfQpAQCAtNDY0LDcgKzQ2Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3dGNvbl9zYXZlOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd3RkYXRfc2F2ZTsKIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAkvKiBTYXZlIHdhdGNoZG9nIHN0YXRlLCBhbmQgdHVybiBpdCBvZmYuICovCiAJd3Rjb25fc2F2ZSA9IHJlYWRsKHdkdF9iYXNlICsgUzNDMjQxMF9XVENPTik7CkBAIC00NzYsNyArNDc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvKiBSZXN0b3JlIHdhdGNoZG9nIHN0YXRlLiAqLwogCkBAIC00OTYsMTUgKzQ5NSwxNiBAQAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwd2R0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gInMzYzI0MTAtd2R0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTB3ZHRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDEwd2R0X3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMHdkdF9yZW1vdmUsCiAJLnNodXRkb3duCT0gczNjMjQxMHdkdF9zaHV0ZG93biwKIAkuc3VzcGVuZAk9IHMzYzI0MTB3ZHRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0MTB3ZHRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC13ZHQiLAorCX0sCiB9OwogCiAKQEAgLTUxMywxMiArNTEzLDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCiB7CiAJcHJpbnRrKGJhbm5lcik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTB3ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHdhdGNoZG9nX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMKaW5kZXggZGM5MzcwZi4uNGIzMzExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jCkBAIC03MTEsNyArNzExLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2R0cGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIndkdF9wY2kiLAogCS5pZF90YWJsZQk9IHdkdHBjaV9wY2lfdGJsLAogCS5wcm9iZQkJPSB3ZHRwY2lfaW5pdF9vbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggMWU1ZGZjNy4uYzgxYmQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNjAsOSArNjAsMTEgQEAKIAogI2RlZmluZSBIREFQU19QT0xMX1BFUklPRAkoSFovMjApCS8qIHBvbGwgZm9yIGlucHV0IGV2ZXJ5IDEvMjBzICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZVWloJNAkvKiBpbnB1dCBldmVudCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgSERBUFNfSU5QVVRfRkxBVAk0CiAKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZGFwc190aW1lcjsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Oworc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmhkYXBzX2lkZXY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGhkYXBzX2ludmVydDsKIHN0YXRpYyB1OCBrbV9hY3Rpdml0eTsKIHN0YXRpYyBpbnQgcmVzdF94OwpAQCAtMjg0LDcgKzI4Niw3IEBACiAKIC8qIERldmljZSBtb2RlbCBzdHVmZiAqLwogCi1zdGF0aWMgaW50IGhkYXBzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKQEAgLTI5NiwyOSArMjk4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaGRhcHNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gaGRhcHNfZGV2aWNlX2luaXQoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKLQkubmFtZSA9ICJoZGFwcyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkYXBzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZGFwc19wcm9iZSwKLQkucmVzdW1lID0gaGRhcHNfcmVzdW1lCi19OwotCi0vKiBJbnB1dCBjbGFzcyBzdHVmZiAqLwotCi1zdGF0aWMgc3RydWN0IGlucHV0X2RldiBoZGFwc19pZGV2ID0gewotCS5uYW1lID0gImhkYXBzIiwKLQkuZXZiaXQgPSB7IEJJVChFVl9BQlMpIH0sCi0JLmFic2JpdCA9IHsgQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfSwKLQkuYWJzbWluICA9IHsgW0FCU19YXSA9IC0yNTYsIFtBQlNfWV0gPSAtMjU2IH0sCi0JLmFic21heCAgPSB7IFtBQlNfWF0gPSAyNTYsIFtBQlNfWV0gPSAyNTYgfSwKLQkuYWJzZnV6eiA9IHsgW0FCU19YXSA9IEhEQVBTX0lOUFVUX0ZVWlosIFtBQlNfWV0gPSBIREFQU19JTlBVVF9GVVpaIH0sCi0JLmFic2ZsYXQgPSB7IFtBQlNfWF0gPSBIREFQU19JTlBVVF9GVVpaLCBbQUJTX1ldID0gSERBUFNfSU5QVVRfRlVaWiB9LAorCS5yZXN1bWUgPSBoZGFwc19yZXN1bWUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiaGRhcHMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyoKQEAgLTM0Miw5ICszMzMsOSBAQAogCWlmIChfX2hkYXBzX3JlYWRfcGFpcihIREFQU19QT1JUX1hQT1MsIEhEQVBTX1BPUlRfWVBPUywgJngsICZ5KSkKIAkJZ290byBvdXQ7CiAKLQlpbnB1dF9yZXBvcnRfYWJzKCZoZGFwc19pZGV2LCBBQlNfWCwgeCAtIHJlc3RfeCk7Ci0JaW5wdXRfcmVwb3J0X2FicygmaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOwotCWlucHV0X3N5bmMoJmhkYXBzX2lkZXYpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1gsIHggLSByZXN0X3gpOworCWlucHV0X3JlcG9ydF9hYnMoaGRhcHNfaWRldiwgQUJTX1ksIHkgLSByZXN0X3kpOworCWlucHV0X3N5bmMoaGRhcHNfaWRldik7CiAKIAltb2RfdGltZXIoJmhkYXBzX3RpbWVyLCBqaWZmaWVzICsgSERBUFNfUE9MTF9QRVJJT0QpOwogCkBAIC01NTAsNyArNTQxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWdpb247CiAKQEAgLTU2NCwxMiArNTU1LDI1IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZGV2aWNlOwogCisJaGRhcHNfaWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaGRhcHNfaWRldikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ncm91cDsKKwl9CisKIAkvKiBpbml0aWFsIGNhbGlicmF0ZSBmb3IgdGhlIGlucHV0IGRldmljZSAqLwogCWhkYXBzX2NhbGlicmF0ZSgpOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgaW5wdXQgY2xhc3MgKi8KLQloZGFwc19pZGV2LmRldiA9ICZwZGV2LT5kZXY7Ci0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwloZGFwc19pZGV2LT5uYW1lID0gImhkYXBzIjsKKwloZGFwc19pZGV2LT5jZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJaGRhcHNfaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoZGFwc19pZGV2LCBBQlNfWCwKKwkJCS0yNTYsIDI1NiwgSERBUFNfSU5QVVRfRlVaWiwgSERBUFNfSU5QVVRfRkxBVCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaGRhcHNfaWRldiwgQUJTX1gsCisJCQktMjU2LCAyNTYsIEhEQVBTX0lOUFVUX0ZVWlosIEhEQVBTX0lOUFVUX0ZMQVQpOworCisJaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhkYXBzX2lkZXYpOwogCiAJLyogc3RhcnQgdXAgb3VyIHRpbWVyIGZvciB0aGUgaW5wdXQgZGV2aWNlICovCiAJaW5pdF90aW1lcigmaGRhcHNfdGltZXIpOwpAQCAtNTgwLDEwICs1ODQsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogZHJpdmVyIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXG4iKTsKIAlyZXR1cm4gMDsKIAorb3V0X2dyb3VwOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZoZGFwc19hdHRyaWJ1dGVfZ3JvdXApOwogb3V0X2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIG91dF9kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CiBvdXRfcmVnaW9uOgogCXJlbGVhc2VfcmVnaW9uKEhEQVBTX0xPV19QT1JULCBIREFQU19OUl9QT1JUUyk7CiBvdXQ6CkBAIC01OTQsMTAgKzYwMCwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGhkYXBzX2V4aXQodm9pZCkKIHsKIAlkZWxfdGltZXJfc3luYygmaGRhcHNfdGltZXIpOwotCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKCZoZGFwc19pZGV2KTsKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShoZGFwc19pZGV2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaGRhcHNfYXR0cmlidXRlX2dyb3VwKTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIAlyZWxlYXNlX3JlZ2lvbihIREFQU19MT1dfUE9SVCwgSERBUFNfTlJfUE9SVFMpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGRyaXZlciB1bmxvYWRlZC5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwppbmRleCBiYTkwZjUxLi4zZWI0Nzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYwpAQCAtNTEzLDcgKzUxMyw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNTM1X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1MzVfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1MzVfaWRzLAogCS5wcm9iZQkJPSBhbGkxNTM1X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwppbmRleCBmMWE2MmQ4Li5lNmY2MzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYwpAQCAtNDA4LDcgKzQwOCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIGFsaTE1NjNfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWxpMTU2M19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKICAJLm5hbWUJCT0gImFsaTE1NjNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1NjNfaWRfdGFibGUsCiAgCS5wcm9iZQkJPSBhbGkxNTYzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwppbmRleCA0MDBiMDhlLi43YTVjMDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwpAQCAtNTA0LDcgKzUwNCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNXgzX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFsaTE1eDNfc21idXMiLAogCS5pZF90YWJsZQk9IGFsaTE1eDNfaWRzLAogCS5wcm9iZQkJPSBhbGkxNXgzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggZGUwMzVkMS4uMTc1MGRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC00MDEsNyArNDAxLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFtZDc1Nl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ3NTZfc21idXMiLAogCS5pZF90YWJsZQk9IGFtZDc1Nl9pZHMsCiAJLnByb2JlCQk9IGFtZDc1Nl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKaW5kZXggZjNiNzlhNi4uZTVlZjU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMKQEAgLTM4NCw3ICszODQsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYW1kODExMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhbWQ4MTExX3NtYnVzMiIsCiAJLmlkX3RhYmxlCT0gYW1kODExMV9pZHMsCiAJLnByb2JlCQk9IGFtZDgxMTFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggMWI1MzU0ZS4uZTBjYjNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGh5ZHJhX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImh5ZHJhX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBoeWRyYV9pZHMsCiAJLnByb2JlCQk9IGh5ZHJhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYwppbmRleCA0ZjYzMTk1MC4uYWMzZWFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTU2MCw3ICs1NjAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgwMV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODAxX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODAxX2lkcywKIAkucHJvYmUJCT0gaTgwMV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKaW5kZXggNTJiYzMwNS4uNzQ4YmUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODEwLmMKQEAgLTIzMyw3ICsyMzMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaTgxMF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJpODEwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBpODEwX2lkcywKIAkucHJvYmUJCT0gaTgxMF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCmluZGV4IGNmYWU0YWQuLjE0MTQ4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwpAQCAtNDA1LDEwICs0MDUsOSBAQAogfTsKIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK2lvcDN4eF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqcGFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IGkyY19hZGFwdGVyICpwYWRhcHRlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpMmNfYWxnb19pb3AzeHhfZGF0YSAqYWRhcHRlcl9kYXRhID0gCiAJCShzdHJ1Y3QgaTJjX2FsZ29faW9wM3h4X2RhdGEgKilwYWRhcHRlci0+YWxnb19kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTQyNiwxNSArNDI1LDE0IEBACiAJa2ZyZWUoYWRhcHRlcl9kYXRhKTsKIAlrZnJlZShwYWRhcHRlcik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCAKLWlvcDN4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW9wM3h4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCXN0cnVjdCBpMmNfYWRhcHRlciAqbmV3X2FkYXB0ZXI7CkBAIC00OTksNyArNDk3LDcgQEAKIAlpb3AzeHhfaTJjX3NldF9zbGF2ZV9hZGRyKGFkYXB0ZXJfZGF0YSk7CiAJaW9wM3h4X2kyY19lbmFibGUoYWRhcHRlcl9kYXRhKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBuZXdfYWRhcHRlcik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmV3X2FkYXB0ZXIpOwogCW5ld19hZGFwdGVyLT5hbGdvX2RhdGEgPSBhZGFwdGVyX2RhdGE7CiAKIAlpMmNfYWRkX2FkYXB0ZXIobmV3X2FkYXB0ZXIpOwpAQCAtNTIzLDI0ICs1MjEsMjUgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW9wM3h4X2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJJT1AzeHgtSTJDIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlvcDN4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpb3AzeHhfaTJjX3Byb2JlLAotCS5yZW1vdmUJCT0gaW9wM3h4X2kyY19yZW1vdmUKKwkucmVtb3ZlCQk9IGlvcDN4eF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiSU9QM3h4LUkyQyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IAogaTJjX2lvcDN4eF9pbml0ICh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlvcDN4eF9pMmNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCAKIGkyY19pb3AzeHhfZXhpdCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW9wM3h4X2kyY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCmluZGV4IDY0NTUyYTMuLmNlZjAyNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jCkBAIC04NiwxMiArODYsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogfTsKIAotc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpeHAyMDAwX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBsYXRfZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIE5VTEwpOwogCiAJaTJjX2JpdF9kZWxfYnVzKCZkcnZfZGF0YS0+YWRhcHRlcik7CiAKQEAgLTEwMCwxMCArOTksOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4cDIwMDBfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHAyMDAwX2kyY19waW5zICpncGlvID0gcGxhdF9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpeHAyMDAwX2kyY19kYXRhICpkcnZfZGF0YSA9IAogCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTM5LDI3ICsxMzcsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9IAogCi0JZGV2X3NldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2LCBkcnZfZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIGRydl9kYXRhKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiSVhQMjAwMC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHAyMDAwX2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IGl4cDIwMDBfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQMjAwMC1JMkMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXhwMjAwMF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl4cDIwMDBfaTJjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXhwMjAwMF9pMmNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYwppbmRleCBjYzY1MmMzLi5hYTM2ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKQEAgLTg3LDEyICs4NywxMSBAQAogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvX2RhdGE7CiB9OwogCi1zdGF0aWMgaW50IGl4cDR4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgaXhwNHh4X2kyY19kYXRhICpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldik7CisJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0X2Rldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAogCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCkBAIC0xMDEsMTAgKzEwMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGl4cDR4eF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0X2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpeHA0eHhfaTJjX3BpbnMgKmdwaW8gPSBwbGF0X2Rldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGl4cDR4eF9pMmNfZGF0YSksIEdGUF9LRVJORUwpOwpAQCAtMTQ4LDI3ICsxNDYsMjggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwbGF0X2RldiwgZHJ2X2RhdGEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpeHA0eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIklYUDRYWC1JMkMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwNHh4X2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGl4cDR4eF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQNFhYLUkyQyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfaTJjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHA0eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNjViOTM5YS4uNWNjZDMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0yODgsMTEgKzI4OCwxMCBAQAogCS5yZXRyaWVzID0gMQogfTsKIAotc3RhdGljIGludCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXN1bHQgPSAwOwogCXN0cnVjdCBtcGNfaTJjICppMmM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKQEAgLTMyMyw3ICszMjIsNyBAQAogCQl9CiAKIAltcGNfaTJjX3NldGNsb2NrKGkyYyk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpMmMpOwogCiAJaTJjLT5hZGFwID0gbXBjX29wczsKIAlpMmNfc2V0X2FkYXBkYXRhKCZpMmMtPmFkYXAsIGkyYyk7CkBAIC0zNDUsMTIgKzM0NCwxMiBAQAogCXJldHVybiByZXN1bHQ7CiB9OwogCi1zdGF0aWMgaW50IGZzbF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZnNsX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbXBjX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IG1wY19pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGkyYy0+aXJxICE9IDApCiAJCWZyZWVfaXJxKGkyYy0+aXJxLCBpMmMpOwpAQCAtMzYxLDIyICszNjAsMjMgQEAKIH07CiAKIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNsX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSAiZnNsLWkyYyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGZzbF9pMmNfZHJpdmVyID0gewogCS5wcm9iZSA9IGZzbF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9IGZzbF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJmc2wtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZnNsX2kyY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZnNsX2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGZzbF9pMmNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZmc2xfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZnNsX2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKaW5kZXggNmI0ODAyNy4uYWZkNzYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMKQEAgLTQ5MiwxMSArNDkyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1tdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdjY0eHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXY2NHh4eF9pMmNfZGF0YQkJKmRydl9kYXRhOwotCXN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YQkqcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG12NjR4eHhfaTJjX3BkYXRhCSpwZGF0YSA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQJcmM7CiAKIAlpZiAoKHBkLT5pZCAhPSAwKSB8fCAhcGRhdGEpCkBAIC01MjYsNyArNTI1LDcgQEAKIAlkcnZfZGF0YS0+YWRhcHRlci5jbGFzcyA9IEkyQ19DTEFTU19IV01PTjsKIAlkcnZfZGF0YS0+YWRhcHRlci50aW1lb3V0ID0gcGRhdGEtPnRpbWVvdXQ7CiAJZHJ2X2RhdGEtPmFkYXB0ZXIucmV0cmllcyA9IHBkYXRhLT5yZXRyaWVzOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGRydl9kYXRhKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZCwgZHJ2X2RhdGEpOwogCWkyY19zZXRfYWRhcGRhdGEoJmRydl9kYXRhLT5hZGFwdGVyLCBkcnZfZGF0YSk7CiAKIAlpZiAocmVxdWVzdF9pcnEoZHJ2X2RhdGEtPmlycSwgbXY2NHh4eF9pMmNfaW50ciwgMCwKQEAgLTU1NSw5ICs1NTQsOSBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAotbXY2NHh4eF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212NjR4eHhfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG12NjR4eHhfaTJjX2RhdGEJCSpkcnZfZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtdjY0eHh4X2kyY19kYXRhCQkqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludAlyYzsKIAogCXJjID0gaTJjX2RlbF9hZGFwdGVyKCZkcnZfZGF0YS0+YWRhcHRlcik7CkBAIC01NjgsMjQgKzU2NywyNSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjR4eHhfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJPSBUSElTX01PRFVMRSwKLQkubmFtZQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NHh4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQk9IG12NjR4eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJPSBtdjY0eHh4X2kyY19yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdAogbXY2NHh4eF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHh4eF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CiBtdjY0eHh4X2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12NjR4eHhfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYwppbmRleCBmZDI2MDM2Li40ZDE4ZTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmZvcmNlMl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJuRm9yY2UyX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBuZm9yY2UyX2lkcywKIAkucHJvYmUJCT0gbmZvcmNlMl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA3ZDYzZWVjLi42OTJmNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NjIsNyArNDYyLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBpaXg0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInBpaXg0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBwaWl4NF9pZHMsCiAJLnByb2JlCQk9IHBpaXg0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKaW5kZXggNDJjYjFkOC4uOTQ3OTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCkBAIC0zMDEsNyArMzAxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcHJvc2F2YWdlX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHJvc2F2YWdlX2RyaXZlciA9IHsKLQkub3duZXIJCT0JVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0JInByb3NhdmFnZV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0JcHJvc2F2YWdlX3BjaV90YmwsCiAJLnByb2JlCQk9CXByb3NhdmFnZV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDY3Y2NiZWEuLjcwZjdhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTM2LDEwICs5MzYsMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9ICZpMmNfcHhhOwotCXN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTk2OCw3ICs5NjgsNyBAQAogCWkyY19weGFfcmVzZXQoaTJjKTsKIAogCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7Ci0JaTJjLT5hZGFwLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CiAKICNpZmRlZiBDT05GSUdfSTJDX1BYQV9TTEFWRQogCXByaW50ayhLRVJOX0lORk8gIkkyQzogJXM6IFBYQSBJMkMgYWRhcHRlciwgc2xhdmUgYWRkcmVzcyAlZFxuIiwKQEAgLTk5MywxMSArOTkzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpMmNfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGkyY19weGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWZyZWVfaXJxKElSUV9JMkMsIGkyYyk7CkBAIC0xMDA2LDIxICsxMDA2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaTJjX3B4YV9wcm9iZSwKIAkucmVtb3ZlCQk9IGkyY19weGFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfcHhhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcHhhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfYWRhcF9weGFfZXhpdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpMmNfYWRhcF9weGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCmluZGV4IDFiNTgyMjYuLjU4Y2ZkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC03NjAsMjQgKzc2MCwyMyBAQAogICogY2FsbGVkIGJ5IHRoZSBidXMgZHJpdmVyIHdoZW4gYSBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9ICZzM2MyNHh4X2kyYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCiAJLyogZmluZCB0aGUgY2xvY2sgYW5kIGVuYWJsZSBpdCAqLwogCi0JaTJjLT5kZXYgPSBkZXY7Ci0JaTJjLT5jbGsgPSBjbGtfZ2V0KGRldiwgImkyYyIpOworCWkyYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpMmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyYyIpOwogCWlmIChJU19FUlIoaTJjLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2tcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoJnBkZXYtPmRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOwogCiAJY2xrX3VzZShpMmMtPmNsayk7CiAJY2xrX2VuYWJsZShpMmMtPmNsayk7CkBAIC03ODYsNyArNzg1LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJTyByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc5NSw3ICs3OTQsNyBAQAogCQkJCQkgcGRldi0+bmFtZSk7CiAKIAlpZiAoaTJjLT5pb2FyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXF1ZXN0IElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSU9cbiIpOwogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTgwMywxNyArODAyLDE3IEBACiAJaTJjLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQtcmVzLT5zdGFydCkrMSk7CiAKIAlpZiAoaTJjLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgbWFwIElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG1hcCBJT1xuIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJyZWdpc3RlcnMgJXAgKCVwLCAlcClcbiIsIGkyYy0+cmVncywgaTJjLT5pb2FyZWEsIHJlcyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVnaXN0ZXJzICVwICglcCwgJXApXG4iLCBpMmMtPnJlZ3MsIGkyYy0+aW9hcmVhLCByZXMpOwogCiAJLyogc2V0dXAgaW5mbyBibG9jayBmb3IgdGhlIGkyYyBjb3JlICovCiAKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOwotCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gZGV2OworCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGkyYyBjb250cm9sbGVyICovCiAKQEAgLTgyNyw3ICs4MjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC04MzYsMjMgKzgzNSwyMyBAQAogCQkJICBwZGV2LT5uYW1lLCBpMmMpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIElSUVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpMmMtPmlycSA9IHJlczsKIAkJCi0JZGV2X2RiZyhkZXYsICJpcnEgcmVzb3VyY2UgJXAgKCVsZClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlICVwICglbGQpXG4iLCByZXMsIHJlcy0+c3RhcnQpOwogCiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKIAotCWRldl9pbmZvKGRldiwgIiVzOiBTM0MgSTJDIGFkYXB0ZXJcbiIsIGkyYy0+YWRhcC5kZXYuYnVzX2lkKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFMzQyBJMkMgYWRhcHRlclxuIiwgaTJjLT5hZGFwLmRldi5idXNfaWQpOwogCiAgb3V0OgogCWlmIChyZXQgPCAwKQpAQCAtODY2LDIyICs4NjUsMjIgQEAKICAqIGNhbGxlZCB3aGVuIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGJ1cwogKi8KIAotc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJCiAJaWYgKGkyYyAhPSBOVUxMKSB7CiAJCXMzYzI0eHhfaTJjX2ZyZWUoaTJjKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaTJjICE9IE5VTEwpCiAJCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKQEAgLTg5NSwzMyArODk0LDM1IEBACiAKIC8qIGRldmljZSBkcml2ZXIgZm9yIHBsYXRmb3JtIGJ1cyBiaXRzICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJzM2MyNDEwLWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9pMmNfcmVtb3ZlLAogCS5yZXN1bWUJCT0gczNjMjR4eF9pMmNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC1pMmMiLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQ0MC1pMmMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfaTJjX3JlbW92ZSwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaTJjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0NDAtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfczNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX2kyY19kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MjksOCArOTMwLDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19hZGFwX3MzY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGkyY19hZGFwX3MzY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKaW5kZXggYWViZTg3Yi4uMGM4NTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKQEAgLTE3OSw3ICsxNzksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2F2YWdlNF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzYXZhZ2U0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzYXZhZ2U0X2lkcywKIAkucHJvYmUJCT0gc2F2YWdlNF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKaW5kZXggM2FkMjdjMy4uYjU3YWI3NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jCkBAIC0zOTgsNyArMzk4LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpczU1OTVfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNTU5NV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzNTU5NV9pZHMsCiAJLnByb2JlCQk9IHNpczU1OTVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwppbmRleCA3ZjQ5ZTVmLi5hY2I3NWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKQEAgLTQ5Niw3ICs0OTYsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaXM2MzBfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzNjMwX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzaXM2MzBfaWRzLAogCS5wcm9iZQkJPSBzaXM2MzBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwppbmRleCA2YTEzNGMwLi4zMDI0OTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTMyOSw3ICszMjksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lzOTZ4X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInNpczk2eF9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gc2lzOTZ4X2lkcywKIAkucHJvYmUJCT0gc2lzOTZ4X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggNTQ0YTM4ZS4uNDg0YmJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC0xNTksNyArMTU5LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1ODZiX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInZ0NTg2Yl9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdnQ1ODZiX2lkcywKIAkucHJvYmUJCT0gdnQ1ODZiX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggYTIyMzdkNC4uNDdlNTJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC00NDAsNyArNDQwLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCB2dDU5Nl9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdnQ1OTZfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidnQ1OTZfc21idXMiLAogCS5pZF90YWJsZQk9IHZ0NTk2X2lkcywKIAkucHJvYmUJCT0gdnQ1OTZfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZvb2RvbzMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCmluZGV4IDY1MGMzZWIuLmI2NzU3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jCkBAIC0yMjUsNyArMjI1LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZvb2RvbzNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidm9vZG9vM19zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdm9vZG9vM19pZHMsCiAJLnByb2JlCQk9IHZvb2RvbzNfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCmluZGV4IDlkYmI3MmYuLmQyYTEwMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCkBAIC04NzMsMjYgKzg3MywyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG90Z19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG90Z19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLy8gc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCi0Jb3RnX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCW90Z19kZXYgPSBkZXY7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3RnX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG90Z19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCW90Z19kZXYgPSAwOwogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZGV2aWNlX2RyaXZlciBvbWFwX290Z19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJvbWFwX290ZyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfb3RnX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb3RnX3Byb2JlLAotCS5yZW1vdmUJCT0gb3RnX3JlbW92ZSwJCisJLnJlbW92ZQkJPSBvdGdfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib21hcF9vdGciLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IG90Z19iaW5kKHN0cnVjdCBpc3AxMzAxICppc3ApCkBAIC05MDIsNyArOTAzLDcgQEAKIAlpZiAob3RnX2RldikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXN0YXR1cyA9IGRyaXZlcl9yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKKwlzdGF0dXMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBfb3RnX2RyaXZlcik7CiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CiAKQEAgLTkxMyw3ICs5MTQsNyBAQAogCQlzdGF0dXMgPSAtRU5PREVWOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JCWRyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCmluZGV4IDE4ZWQ3NzYuLmQ0ZjIxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCisrKyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCkBAIC03ODcsOCArNzg3LDkgQEAKIHN0YXRpYyBMSVNUX0hFQUQoaWRlX3BjaV9kcml2ZXJzKTsKIAogLyoKLSAqCWlkZV9yZWdpc3Rlcl9wY2lfZHJpdmVyCQktCWF0dGFjaCBJREUgZHJpdmVyCisgKglfX2lkZV9yZWdpc3Rlcl9wY2lfZHJpdmVyCS0JYXR0YWNoIElERSBkcml2ZXIKICAqCUBkcml2ZXI6IHBjaSBkcml2ZXIKKyAqCUBtb2R1bGU6IG93bmVyIG1vZHVsZSBvZiB0aGUgZHJpdmVyCiAgKgogICoJUmVnaXN0ZXJzIGEgZHJpdmVyIHdpdGggdGhlIElERSBsYXllci4gVGhlIElERSBsYXllciBhcnJhbmdlcyB0aGF0CiAgKglib290IHRpbWUgc2V0dXAgaXMgZG9uZSBpbiB0aGUgZXhwZWN0ZWQgZGV2aWNlIG9yZGVyIGFuZCB0aGVuIApAQCAtODAxLDE1ICs4MDIsMTYgQEAKICAqCVJldHVybnMgYXJlIHRoZSBzYW1lIGFzIGZvciBwY2lfcmVnaXN0ZXJfZHJpdmVyCiAgKi8KIAotaW50IGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIpCitpbnQgX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCiB7CiAJaWYoIXByZV9pbml0KQotCQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KGRyaXZlcik7CisJCXJldHVybiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBtb2R1bGUpOworCWRyaXZlci0+ZHJpdmVyLm93bmVyID0gbW9kdWxlOwogCWxpc3RfYWRkX3RhaWwoJmRyaXZlci0+bm9kZSwgJmlkZV9wY2lfZHJpdmVycyk7CiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIpOwogCiAvKioKICAqCWlkZV91bnJlZ2lzdGVyX3BjaV9kcml2ZXIJLQl1bnJlZ2lzdGVyIGFuIElERSBkcml2ZXIKQEAgLTg5Nyw2ICs4OTksNiBAQAogCXsKIAkJbGlzdF9kZWwobCk7CiAJCWQgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBwY2lfZHJpdmVyLCBub2RlKTsKLQkJcGNpX3JlZ2lzdGVyX2RyaXZlcihkKTsKKwkJX19wY2lfcmVnaXN0ZXJfZHJpdmVyKGQsIGQtPmRyaXZlci5vd25lcik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggYWVkNWNhMi4uNWVhNzQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0zMSw3ICszMSw3IEBACiAgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCiAgKiBTT0ZUV0FSRS4KICAqCi0gKiAkSWQ6IHVzZXJfbWFkLmMgMjgxNCAyMDA1LTA3LTA2IDE5OjE0OjA5WiBoYWxyICQKKyAqICRJZDogdXNlcl9tYWQuYyA0MDEwIDIwMDUtMTEtMDkgMjM6MTE6NTZaIHJvbGFuZCAkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTEwLDEzICsxMTAsMTMgQEAKIH07CiAKIHN0cnVjdCBpYl91bWFkX2ZpbGUgewotCXN0cnVjdCBpYl91bWFkX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgcmVjdl9saXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgICAgIHBvcnRfbGlzdDsKLQlzcGlubG9ja190ICAgICAgICAgICByZWN2X2xvY2s7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgcmVjdl93YWl0OwotCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50W0lCX1VNQURfTUFYX0FHRU5UU107Ci0Jc3RydWN0IGliX21yICAgICAgICAqbXJbSUJfVU1BRF9NQVhfQUdFTlRTXTsKKwlzdHJ1Y3QgaWJfdW1hZF9wb3J0ICAgICpwb3J0OworCXN0cnVjdCBsaXN0X2hlYWQJcmVjdl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJcG9ydF9saXN0OworCXNwaW5sb2NrX3QJCXJlY3ZfbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWN2X3dhaXQ7CisJc3RydWN0IGliX21hZF9hZ2VudCAgICAqYWdlbnRbSUJfVU1BRF9NQVhfQUdFTlRTXTsKKwlpbnQJCQlhZ2VudHNfZGVhZDsKIH07CiAKIHN0cnVjdCBpYl91bWFkX3BhY2tldCB7CkBAIC0xNDUsNiArMTQ1LDEyIEBACiAJa2ZyZWUoZGV2KTsKIH0KIAorLyogY2FsbGVyIG11c3QgaG9sZCBwb3J0LT5tdXRleCBhdCBsZWFzdCBmb3IgcmVhZGluZyAqLworc3RhdGljIHN0cnVjdCBpYl9tYWRfYWdlbnQgKl9fZ2V0X2FnZW50KHN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUsIGludCBpZCkKK3sKKwlyZXR1cm4gZmlsZS0+YWdlbnRzX2RlYWQgPyBOVUxMIDogZmlsZS0+YWdlbnRbaWRdOworfQorCiBzdGF0aWMgaW50IHF1ZXVlX3BhY2tldChzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlLAogCQkJc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnQsCiAJCQlzdHJ1Y3QgaWJfdW1hZF9wYWNrZXQgKnBhY2tldCkKQEAgLTE1MiwxMCArMTU4LDExIEBACiAJaW50IHJldCA9IDE7CiAKIAlkb3duX3JlYWQoJmZpbGUtPnBvcnQtPm11dGV4KTsKKwogCWZvciAocGFja2V0LT5tYWQuaGRyLmlkID0gMDsKIAkgICAgIHBhY2tldC0+bWFkLmhkci5pZCA8IElCX1VNQURfTUFYX0FHRU5UUzsKIAkgICAgIHBhY2tldC0+bWFkLmhkci5pZCsrKQotCQlpZiAoYWdlbnQgPT0gZmlsZS0+YWdlbnRbcGFja2V0LT5tYWQuaGRyLmlkXSkgeworCQlpZiAoYWdlbnQgPT0gX19nZXRfYWdlbnQoZmlsZSwgcGFja2V0LT5tYWQuaGRyLmlkKSkgewogCQkJc3Bpbl9sb2NrX2lycSgmZmlsZS0+cmVjdl9sb2NrKTsKIAkJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmZpbGUtPnJlY3ZfbGlzdCk7CiAJCQlzcGluX3VubG9ja19pcnEoJmZpbGUtPnJlY3ZfbG9jayk7CkBAIC0zMjcsNyArMzM0LDcgQEAKIAogCWRvd25fcmVhZCgmZmlsZS0+cG9ydC0+bXV0ZXgpOwogCi0JYWdlbnQgPSBmaWxlLT5hZ2VudFtwYWNrZXQtPm1hZC5oZHIuaWRdOworCWFnZW50ID0gX19nZXRfYWdlbnQoZmlsZSwgcGFja2V0LT5tYWQuaGRyLmlkKTsKIAlpZiAoIWFnZW50KSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3VwOwpAQCAtNDgxLDcgKzQ4OCw3IEBACiAJfQogCiAJZm9yIChhZ2VudF9pZCA9IDA7IGFnZW50X2lkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2FnZW50X2lkKQotCQlpZiAoIWZpbGUtPmFnZW50W2FnZW50X2lkXSkKKwkJaWYgKCFfX2dldF9hZ2VudChmaWxlLCBhZ2VudF9pZCkpCiAJCQlnb3RvIGZvdW5kOwogCiAJcmV0ID0gLUVOT01FTTsKQEAgLTUwNSwyOSArNTEyLDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZpbGUtPmFnZW50W2FnZW50X2lkXSA9IGFnZW50OwotCi0JZmlsZS0+bXJbYWdlbnRfaWRdID0gaWJfZ2V0X2RtYV9tcihhZ2VudC0+cXAtPnBkLCBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOwotCWlmIChJU19FUlIoZmlsZS0+bXJbYWdlbnRfaWRdKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKLQl9Ci0KIAlpZiAocHV0X3VzZXIoYWdlbnRfaWQsCiAJCSAgICAgKHUzMiBfX3VzZXIgKikgKGFyZyArIG9mZnNldG9mKHN0cnVjdCBpYl91c2VyX21hZF9yZWdfcmVxLCBpZCkpKSkgewogCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9tcjsKKwkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoYWdlbnQpOworCQlnb3RvIG91dDsKIAl9CiAKKwlmaWxlLT5hZ2VudFthZ2VudF9pZF0gPSBhZ2VudDsKIAlyZXQgPSAwOwotCWdvdG8gb3V0OwotCi1lcnJfbXI6Ci0JaWJfZGVyZWdfbXIoZmlsZS0+bXJbYWdlbnRfaWRdKTsKLQotZXJyOgotCWZpbGUtPmFnZW50W2FnZW50X2lkXSA9IE5VTEw7Ci0JaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoYWdlbnQpOwogCiBvdXQ6CiAJdXBfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKQEAgLTUzNiwyNyArNTI5LDI5IEBACiAKIHN0YXRpYyBpbnQgaWJfdW1hZF91bnJlZ19hZ2VudChzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCA9IE5VTEw7CiAJdTMyIGlkOwogCWludCByZXQgPSAwOwogCisJaWYgKGdldF91c2VyKGlkLCAodTMyIF9fdXNlciAqKSBhcmcpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwogCWRvd25fd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKIAotCWlmIChnZXRfdXNlcihpZCwgKHUzMiBfX3VzZXIgKikgYXJnKSkgewotCQlyZXQgPSAtRUZBVUxUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaWQgPCAwIHx8IGlkID49IElCX1VNQURfTUFYX0FHRU5UUyB8fCAhZmlsZS0+YWdlbnRbaWRdKSB7CisJaWYgKGlkIDwgMCB8fCBpZCA+PSBJQl9VTUFEX01BWF9BR0VOVFMgfHwgIV9fZ2V0X2FnZW50KGZpbGUsIGlkKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpYl9kZXJlZ19tcihmaWxlLT5tcltpZF0pOwotCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2lkXSk7CisJYWdlbnQgPSBmaWxlLT5hZ2VudFtpZF07CiAJZmlsZS0+YWdlbnRbaWRdID0gTlVMTDsKIAogb3V0OgogCXVwX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CisKKwlpZiAoYWdlbnQpCisJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGFnZW50KTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYyMSwyMyArNjE2LDI5IEBACiAJc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaWJfdW1hZF9kZXZpY2UgKmRldiA9IGZpbGUtPnBvcnQtPnVtYWRfZGV2OwogCXN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0LCAqdG1wOworCWludCBhbHJlYWR5X2RlYWQ7CiAJaW50IGk7CiAKIAlkb3duX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7Ci0JZm9yIChpID0gMDsgaSA8IElCX1VNQURfTUFYX0FHRU5UUzsgKytpKQotCQlpZiAoZmlsZS0+YWdlbnRbaV0pIHsKLQkJCWliX2RlcmVnX21yKGZpbGUtPm1yW2ldKTsKLQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2ldKTsKLQkJfQorCisJYWxyZWFkeV9kZWFkID0gZmlsZS0+YWdlbnRzX2RlYWQ7CisJZmlsZS0+YWdlbnRzX2RlYWQgPSAxOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhY2tldCwgdG1wLCAmZmlsZS0+cmVjdl9saXN0LCBsaXN0KQogCQlrZnJlZShwYWNrZXQpOwogCiAJbGlzdF9kZWwoJmZpbGUtPnBvcnRfbGlzdCk7Ci0JdXBfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKKworCWRvd25ncmFkZV93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOworCisJaWYgKCFhbHJlYWR5X2RlYWQpCisJCWZvciAoaSA9IDA7IGkgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraSkKKwkJCWlmIChmaWxlLT5hZ2VudFtpXSkKKwkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpXSk7CisKKwl1cF9yZWFkKCZmaWxlLT5wb3J0LT5tdXRleCk7CiAKIAlrZnJlZShmaWxlKTsKLQogCWtyZWZfcHV0KCZkZXYtPnJlZiwgaWJfdW1hZF9yZWxlYXNlX2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgwMSw3ICs4MDIsNyBAQAogCQlnb3RvIGVycl9jbGFzczsKIAlwb3J0LT5zbV9kZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcG9ydC0+c21fZGV2LT5vcHMgICA9ICZ1bWFkX3NtX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmcG9ydC0+ZGV2LT5rb2JqLCAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CisJa29iamVjdF9zZXRfbmFtZSgmcG9ydC0+c21fZGV2LT5rb2JqLCAiaXNzbSVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKGNkZXZfYWRkKHBvcnQtPnNtX2RldiwgYmFzZV9kZXYgKyBwb3J0LT5kZXZfbnVtICsgSUJfVU1BRF9NQVhfUE9SVFMsIDEpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCkBAIC04NjMsMTQgKzg2NCwzNiBAQAogCiAJcG9ydC0+aWJfZGV2ID0gTlVMTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZmlsZSwgJnBvcnQtPmZpbGVfbGlzdCwgcG9ydF9saXN0KQotCQlmb3IgKGlkID0gMDsgaWQgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraWQpIHsKLQkJCWlmICghZmlsZS0+YWdlbnRbaWRdKQotCQkJCWNvbnRpbnVlOwotCQkJaWJfZGVyZWdfbXIoZmlsZS0+bXJbaWRdKTsKLQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2lkXSk7Ci0JCQlmaWxlLT5hZ2VudFtpZF0gPSBOVUxMOwotCQl9CisJLyoKKwkgKiBOb3cgZ28gdGhyb3VnaCB0aGUgbGlzdCBvZiBmaWxlcyBhdHRhY2hlZCB0byB0aGlzIHBvcnQgYW5kCisJICogdW5yZWdpc3RlciBhbGwgb2YgdGhlaXIgTUFEIGFnZW50cy4gIFdlIG5lZWQgdG8gaG9sZAorCSAqIHBvcnQtPm11dGV4IHdoaWxlIGRvaW5nIHRoaXMgdG8gYXZvaWQgcmFjaW5nIHdpdGgKKwkgKiBpYl91bWFkX2Nsb3NlKCksIGJ1dCB3ZSBjYW4ndCBob2xkIHRoZSBtdXRleCBmb3Igd3JpdGluZworCSAqIHdoaWxlIGNhbGxpbmcgaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoKSwgc2luY2UgdGhhdCBtaWdodAorCSAqIGRlYWRsb2NrIGJ5IGNhbGxpbmcgYmFjayBpbnRvIHF1ZXVlX3BhY2tldCgpLiAgU28gd2UKKwkgKiBkb3duZ3JhZGUgb3VyIGxvY2sgdG8gYSByZWFkIGxvY2ssIGFuZCB0aGVuIGRyb3AgYW5kCisJICogcmVhY3F1aXJlIHRoZSB3cml0ZSBsb2NrIGZvciB0aGUgbmV4dCBpdGVyYXRpb24uCisJICoKKwkgKiBXZSBkbyBsaXN0X2RlbF9pbml0KCkgb24gdGhlIGZpbGUncyBsaXN0X2hlYWQgc28gdGhhdCB0aGUKKwkgKiBsaXN0X2RlbCBpbiBpYl91bWFkX2Nsb3NlKCkgaXMgc3RpbGwgT0ssIGV2ZW4gYWZ0ZXIgdGhlCisJICogZmlsZSBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwb3J0LT5maWxlX2xpc3QpKSB7CisJCWZpbGUgPSBsaXN0X2VudHJ5KHBvcnQtPmZpbGVfbGlzdC5uZXh0LCBzdHJ1Y3QgaWJfdW1hZF9maWxlLAorCQkJCSAgcG9ydF9saXN0KTsKKworCQlmaWxlLT5hZ2VudHNfZGVhZCA9IDE7CisJCWxpc3RfZGVsX2luaXQoJmZpbGUtPnBvcnRfbGlzdCk7CisKKwkJZG93bmdyYWRlX3dyaXRlKCZwb3J0LT5tdXRleCk7CisKKwkJZm9yIChpZCA9IDA7IGlkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2lkKQorCQkJaWYgKGZpbGUtPmFnZW50W2lkXSkKKwkJCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChmaWxlLT5hZ2VudFtpZF0pOworCisJCXVwX3JlYWQoJnBvcnQtPm11dGV4KTsKKwkJZG93bl93cml0ZSgmcG9ydC0+bXV0ZXgpOworCX0KIAogCXVwX3dyaXRlKCZwb3J0LT5tdXRleCk7CiAKQEAgLTkxMyw3ICs5MzYsNyBAQAogCiBlcnI6CiAJd2hpbGUgKC0taSA+PSBzKQotCQlpYl91bWFkX2tpbGxfcG9ydCgmdW1hZF9kZXYtPnBvcnRbaV0pOworCQlpYl91bWFkX2tpbGxfcG9ydCgmdW1hZF9kZXYtPnBvcnRbaSAtIHNdKTsKIAogCWtyZWZfcHV0KCZ1bWFkX2Rldi0+cmVmLCBpYl91bWFkX3JlbGVhc2VfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA2M2E3NDE1Li5lZDQ1ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCkBAIC03MDgsNyArNzA4LDcgQEAKIAkJcmVzcC0+d2NbaV0ub3Bjb2RlIAkgICA9IHdjW2ldLm9wY29kZTsKIAkJcmVzcC0+d2NbaV0udmVuZG9yX2VyciAJICAgPSB3Y1tpXS52ZW5kb3JfZXJyOwogCQlyZXNwLT53Y1tpXS5ieXRlX2xlbiAJICAgPSB3Y1tpXS5ieXRlX2xlbjsKLQkJcmVzcC0+d2NbaV0uaW1tX2RhdGEgCSAgID0gd2NbaV0uaW1tX2RhdGE7CisJCXJlc3AtPndjW2ldLmltbV9kYXRhIAkgICA9IChfX3UzMiBfX2ZvcmNlKSB3Y1tpXS5pbW1fZGF0YTsKIAkJcmVzcC0+d2NbaV0ucXBfbnVtIAkgICA9IHdjW2ldLnFwX251bTsKIAkJcmVzcC0+d2NbaV0uc3JjX3FwIAkgICA9IHdjW2ldLnNyY19xcDsKIAkJcmVzcC0+d2NbaV0ud2NfZmxhZ3MgCSAgID0gd2NbaV0ud2NfZmxhZ3M7CkBAIC05MDgsNyArOTA4LDEyIEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfZGVzdHJveTsKIAotCXJlc3AucXBfaGFuZGxlID0gdW9iai0+dW9iamVjdC5pZDsKKwlyZXNwLnFwX2hhbmRsZSAgICAgICA9IHVvYmotPnVvYmplY3QuaWQ7CisJcmVzcC5tYXhfcmVjdl9zZ2UgICAgPSBhdHRyLmNhcC5tYXhfcmVjdl9zZ2U7CisJcmVzcC5tYXhfc2VuZF9zZ2UgICAgPSBhdHRyLmNhcC5tYXhfc2VuZF9zZ2U7CisJcmVzcC5tYXhfcmVjdl93ciAgICAgPSBhdHRyLmNhcC5tYXhfcmVjdl93cjsKKwlyZXNwLm1heF9zZW5kX3dyICAgICA9IGF0dHIuY2FwLm1heF9zZW5kX3dyOworCXJlc3AubWF4X2lubGluZV9kYXRhID0gYXR0ci5jYXAubWF4X2lubGluZV9kYXRhOwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CkBAIC0xMTM1LDcgKzExNDAsNyBAQAogCQluZXh0LT5udW1fc2dlICAgID0gdXNlcl93ci0+bnVtX3NnZTsKIAkJbmV4dC0+b3Bjb2RlICAgICA9IHVzZXJfd3ItPm9wY29kZTsKIAkJbmV4dC0+c2VuZF9mbGFncyA9IHVzZXJfd3ItPnNlbmRfZmxhZ3M7Ci0JCW5leHQtPmltbV9kYXRhICAgPSB1c2VyX3dyLT5pbW1fZGF0YTsKKwkJbmV4dC0+aW1tX2RhdGEgICA9IChfX2JlMzIgX19mb3JjZSkgdXNlcl93ci0+aW1tX2RhdGE7CiAKIAkJaWYgKHFwLT5xcF90eXBlID09IElCX1FQVF9VRCkgewogCQkJbmV4dC0+d3IudWQuYWggPSBpZHJfZmluZCgmaWJfdXZlcmJzX2FoX2lkciwKQEAgLTE3MDEsNyArMTcwNiw2IEBACiAJfQogCiAJYXR0ci5tYXhfd3IgICAgPSBjbWQubWF4X3dyOwotCWF0dHIubWF4X3NnZSAgID0gY21kLm1heF9zZ2U7CiAJYXR0ci5zcnFfbGltaXQgPSBjbWQuc3JxX2xpbWl0OwogCiAJcmV0ID0gaWJfbW9kaWZ5X3NycShzcnEsICZhdHRyLCBjbWQuYXR0cl9tYXNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCmluZGV4IDQxODZjYzguLjRjMTVlMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYwpAQCAtMzI1LDE2ICszMjUsOCBAQAogaW50IGliX3Jlc2l6ZV9jcShzdHJ1Y3QgaWJfY3EgKmNxLAogICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIGNxZSkKIHsKLQlpbnQgcmV0OwotCi0JaWYgKCFjcS0+ZGV2aWNlLT5yZXNpemVfY3EpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JcmV0ID0gY3EtPmRldmljZS0+cmVzaXplX2NxKGNxLCAmY3FlKTsKLQlpZiAoIXJldCkKLQkJY3EtPmNxZSA9IGNxZTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGNxLT5kZXZpY2UtPnJlc2l6ZV9jcSA/CisJCWNxLT5kZXZpY2UtPnJlc2l6ZV9jcShjcSwgY3FlKSA6IC1FTk9TWVM7CiB9CiBFWFBPUlRfU1lNQk9MKGliX3Jlc2l6ZV9jcSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKaW5kZXggMjVlYmFiNi4uYzNiZWM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhdGFzX2xvY2ssIGZsYWdzKTsKLQlpZiAoZGV2LT5jYXRhc19lcnIuc3RvcCkKKwlpZiAoIWRldi0+Y2F0YXNfZXJyLnN0b3ApCiAJCW1vZF90aW1lcigmZGV2LT5jYXRhc19lcnIudGltZXIsCiAJCQkgIGppZmZpZXMgKyBNVEhDQV9DQVRBU19QT0xMX0lOVEVSVkFMKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXRhc19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKaW5kZXggNDlmMjExZC4uOWVkMzQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwpAQCAtMTA2MCw2ICsxMDYwLDggQEAKIAkJZGV2X2xpbS0+aGNhLmFyYmVsLnJlc2l6ZV9zcnEgPSBmaWVsZCAmIDE7CiAJCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9TR19SUV9PRkZTRVQpOwogCQlkZXZfbGltLT5tYXhfc2cgPSBtaW5fdChpbnQsIGZpZWxkLCBkZXZfbGltLT5tYXhfc2cpOworCQlNVEhDQV9HRVQoc2l6ZSwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX01BWF9ERVNDX1NaX1JRX09GRlNFVCk7CisJCWRldl9saW0tPm1heF9kZXNjX3N6ID0gbWluX3QoaW50LCBzaXplLCBkZXZfbGltLT5tYXhfZGVzY19zeik7CiAJCU1USENBX0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fTVBUX0VOVFJZX1NaX09GRlNFVCk7CiAJCWRldl9saW0tPm1wdF9lbnRyeV9zeiA9IHNpemU7CiAJCU1USENBX0dFVChmaWVsZCwgb3V0Ym94LCBRVUVSWV9ERVZfTElNX1BCTF9TWl9PRkZTRVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwppbmRleCBmOThlMjM1Li40YThhZGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiB7CiAJc3RydWN0IG10aGNhX2NxICpjcTsKIAlzdHJ1Y3QgbXRoY2FfY3FlICpjcWU7Ci0JaW50IHByb2RfaW5kZXg7CisJdTMyIHByb2RfaW5kZXg7CiAJaW50IG5mcmVlZCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZkZXYtPmNxX3RhYmxlLmxvY2spOwpAQCAtMjkzLDE5ICsyOTMsMTUgQEAKIAkgKiBOb3cgc3dlZXAgYmFja3dhcmRzIHRocm91Z2ggdGhlIENRLCByZW1vdmluZyBDUSBlbnRyaWVzCiAJICogdGhhdCBtYXRjaCBvdXIgUVAgYnkgY29weWluZyBvbGRlciBlbnRyaWVzIG9uIHRvcCBvZiB0aGVtLgogCSAqLwotCXdoaWxlIChwcm9kX2luZGV4ID4gY3EtPmNvbnNfaW5kZXgpIHsKLQkJY3FlID0gZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggLSAxKSAmIGNxLT5pYmNxLmNxZSk7CisJd2hpbGUgKChpbnQpIC0tcHJvZF9pbmRleCAtIChpbnQpIGNxLT5jb25zX2luZGV4ID49IDApIHsKKwkJY3FlID0gZ2V0X2NxZShjcSwgcHJvZF9pbmRleCAmIGNxLT5pYmNxLmNxZSk7CiAJCWlmIChjcWUtPm15X3FwbiA9PSBjcHVfdG9fYmUzMihxcG4pKSB7CiAJCQlpZiAoc3JxKQogCQkJCW10aGNhX2ZyZWVfc3JxX3dxZShzcnEsIGJlMzJfdG9fY3B1KGNxZS0+d3FlKSk7CiAJCQkrK25mcmVlZDsKLQkJfQotCQllbHNlIGlmIChuZnJlZWQpCi0JCQltZW1jcHkoZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggLSAxICsgbmZyZWVkKSAmCi0JCQkJICAgICAgIGNxLT5pYmNxLmNxZSksCi0JCQkgICAgICAgY3FlLAotCQkJICAgICAgIE1USENBX0NRX0VOVFJZX1NJWkUpOwotCQktLXByb2RfaW5kZXg7CisJCX0gZWxzZSBpZiAobmZyZWVkKQorCQkJbWVtY3B5KGdldF9jcWUoY3EsIChwcm9kX2luZGV4ICsgbmZyZWVkKSAmIGNxLT5pYmNxLmNxZSksCisJCQkgICAgICAgY3FlLCBNVEhDQV9DUV9FTlRSWV9TSVpFKTsKIAl9CiAKIAlpZiAobmZyZWVkKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggZTdlNWQzYi4uNDk3ZmY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAJaW50ICAgICAgbWF4X3NnOwogCWludCAgICAgIG51bV9xcHM7CiAJaW50ICAgICAgbWF4X3dxZXM7CisJaW50CSBtYXhfZGVzY19zejsKIAlpbnQJIG1heF9xcF9pbml0X3JkbWE7CiAJaW50ICAgICAgcmVzZXJ2ZWRfcXBzOwogCWludCAgICAgIG51bV9zcnFzOwpAQCAtMTU0LDYgKzE1NSw3IEBACiAJaW50ICAgICAgcmVzZXJ2ZWRfbWNnczsKIAlpbnQgICAgICBudW1fcGRzOwogCWludCAgICAgIHJlc2VydmVkX3BkczsKKwl1MzIgICAgICBwYWdlX3NpemVfY2FwOwogCXUzMiAgICAgIGZsYWdzOwogCXU4ICAgICAgIHBvcnRfd2lkdGhfY2FwOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDQ1YzYzMjguLjZmOTRiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtMTY4LDYgKzE2OCw3IEBACiAJbWRldi0+bGltaXRzLm1heF9zcnFfd3FlcyAgICAgICA9IGRldl9saW0tPm1heF9zcnFfc3o7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX3NycXMgICAgICA9IGRldl9saW0tPnJlc2VydmVkX3NycXM7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX2VlY3MgICAgICA9IGRldl9saW0tPnJlc2VydmVkX2VlY3M7CisJbWRldi0+bGltaXRzLm1heF9kZXNjX3N6ICAgICAgICA9IGRldl9saW0tPm1heF9kZXNjX3N6OwogCS8qCiAJICogU3VidHJhY3QgMSBmcm9tIHRoZSBsaW1pdCBiZWNhdXNlIHdlIG5lZWQgdG8gYWxsb2NhdGUgYQogCSAqIHNwYXJlIENRRSBzbyB0aGUgSENBIEhXIGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYW4KQEAgLTE4MSw2ICsxODIsNyBAQAogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF91YXJzICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF91YXJzOwogCW1kZXYtPmxpbWl0cy5yZXNlcnZlZF9wZHMgICAgICAgPSBkZXZfbGltLT5yZXNlcnZlZF9wZHM7CiAJbWRldi0+bGltaXRzLnBvcnRfd2lkdGhfY2FwICAgICA9IGRldl9saW0tPm1heF9wb3J0X3dpZHRoOworCW1kZXYtPmxpbWl0cy5wYWdlX3NpemVfY2FwICAgICAgPSB+KHUzMikgKGRldl9saW0tPm1pbl9wYWdlX3N6IC0gMSk7CiAJbWRldi0+bGltaXRzLmZsYWdzICAgICAgICAgICAgICA9IGRldl9saW0tPmZsYWdzOwogCiAJLyogSUJfREVWSUNFX1JFU0laRV9NQVhfV1Igbm90IHN1cHBvcnRlZCBieSBkcml2ZXIuCkBAIC0xMTk2LDcgKzExOTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbXRoY2FfZHJpdmVyID0gewogCS5uYW1lCQk9IERSVl9OQU1FLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUJPSBtdGhjYV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IG10aGNhX2luaXRfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXRoY2FfcmVtb3ZlX29uZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKaW5kZXggNmIwMTY2Ni4uNGNjN2UyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMKQEAgLTkwLDYgKzkwLDcgQEAKIAltZW1jcHkoJnByb3BzLT5ub2RlX2d1aWQsICAgICAgb3V0X21hZC0+ZGF0YSArIDEyLCA4KTsKIAogCXByb3BzLT5tYXhfbXJfc2l6ZSAgICAgICAgID0gfjB1bGw7CisJcHJvcHMtPnBhZ2Vfc2l6ZV9jYXAgICAgICAgPSBtZGV2LT5saW1pdHMucGFnZV9zaXplX2NhcDsKIAlwcm9wcy0+bWF4X3FwICAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5udW1fcXBzIC0gbWRldi0+bGltaXRzLnJlc2VydmVkX3FwczsKIAlwcm9wcy0+bWF4X3FwX3dyICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfd3FlczsKIAlwcm9wcy0+bWF4X3NnZSAgICAgICAgICAgICA9IG1kZXYtPmxpbWl0cy5tYXhfc2c7CkBAIC02MTUsMTEgKzYxNiwxMSBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCX0KIAotCWluaXRfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IDA7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgICAgID0gcXAtPnNxLm1heDsKIAlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciAgICAgPSBxcC0+cnEubWF4OwogCWluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSAgICA9IHFwLT5zcS5tYXhfZ3M7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlICAgID0gcXAtPnJxLm1heF9nczsKKwlpbml0X2F0dHItPmNhcC5tYXhfaW5saW5lX2RhdGEgPSBxcC0+bWF4X2lubGluZV9kYXRhOwogCiAJcmV0dXJuICZxcC0+aWJxcDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKaW5kZXggYmNkNGIwMS4uMWU3Mzk0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmgKQEAgLTI1MSw2ICsyNTEsNyBAQAogCXN0cnVjdCBtdGhjYV93cSAgICAgICAgc3E7CiAJZW51bSBpYl9zaWdfdHlwZSAgICAgICBzcV9wb2xpY3k7CiAJaW50ICAgICAgICAgICAgICAgICAgICBzZW5kX3dxZV9vZmZzZXQ7CisJaW50ICAgICAgICAgICAgICAgICAgICBtYXhfaW5saW5lX2RhdGE7CiAKIAl1NjQgICAgICAgICAgICAgICAgICAgKndyaWQ7CiAJdW5pb24gbXRoY2FfYnVmCSAgICAgICBxdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggODg1MmVhNC4uNzYwYzQxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC04ODUsNiArODg1LDQ4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgbXRoY2FfYWRqdXN0X3FwX2NhcHMoc3RydWN0IG10aGNhX2RldiAqZGV2LAorCQkJCSBzdHJ1Y3QgbXRoY2FfcGQgKnBkLAorCQkJCSBzdHJ1Y3QgbXRoY2FfcXAgKnFwKQoreworCWludCBtYXhfZGF0YV9zaXplOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gc2l6ZSBvZiBXUUUgcy9nIHNlZ21lbnRzLCBleGNsdWRpbmcKKwkgKiB0aGUgbmV4dCBzZWdtZW50IGFuZCBvdGhlciBub24tZGF0YSBzZWdtZW50cy4KKwkgKi8KKwltYXhfZGF0YV9zaXplID0gbWluKGRldi0+bGltaXRzLm1heF9kZXNjX3N6LCAxIDw8IHFwLT5zcS53cWVfc2hpZnQpIC0KKwkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpOworCisJc3dpdGNoIChxcC0+dHJhbnNwb3J0KSB7CisJY2FzZSBNTFg6CisJCW1heF9kYXRhX3NpemUgLT0gMiAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKKwkJYnJlYWs7CisKKwljYXNlIFVEOgorCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQorCQkJbWF4X2RhdGFfc2l6ZSAtPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hcmJlbF91ZF9zZWcpOworCQllbHNlCisJCQltYXhfZGF0YV9zaXplIC09IHNpemVvZiAoc3RydWN0IG10aGNhX3Rhdm9yX3VkX3NlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbWF4X2RhdGFfc2l6ZSAtPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpOworCQlicmVhazsKKwl9CisKKwkvKiBXZSBkb24ndCBzdXBwb3J0IGlubGluZSBkYXRhIGZvciBrZXJuZWwgUVBzICh5ZXQpLiAqLworCWlmICghcGQtPmlicGQudW9iamVjdCkKKwkJcXAtPm1heF9pbmxpbmVfZGF0YSA9IDA7CisgICAgICAgIGVsc2UKKwkJcXAtPm1heF9pbmxpbmVfZGF0YSA9IG1heF9kYXRhX3NpemUgLSBNVEhDQV9JTkxJTkVfSEVBREVSX1NJWkU7CisKKwlxcC0+c3EubWF4X2dzID0gbWF4X2RhdGFfc2l6ZSAvIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKKwlxcC0+cnEubWF4X2dzID0gKG1pbihkZXYtPmxpbWl0cy5tYXhfZGVzY19zeiwgMSA8PCBxcC0+cnEud3FlX3NoaWZ0KSAtCisJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZykpIC8KKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKK30KKwogLyoKICAqIEFsbG9jYXRlIGFuZCByZWdpc3RlciBidWZmZXIgZm9yIFdRRXMuICBxcC0+cnEubWF4LCBzcS5tYXgsCiAgKiBycS5tYXhfZ3MgYW5kIHNxLm1heF9ncyBtdXN0IGFsbCBiZSBhc3NpZ25lZC4KQEAgLTkwMiwyNyArOTQ0LDUzIEBACiAJc2l6ZSA9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSArCiAJCXFwLT5ycS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CiAKKwlpZiAoc2l6ZSA+IGRldi0+bGltaXRzLm1heF9kZXNjX3N6KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWZvciAocXAtPnJxLndxZV9zaGlmdCA9IDY7IDEgPDwgcXAtPnJxLndxZV9zaGlmdCA8IHNpemU7CiAJICAgICBxcC0+cnEud3FlX3NoaWZ0KyspCiAJCTsgLyogbm90aGluZyAqLwogCi0Jc2l6ZSA9IHNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSArCi0JCXFwLT5zcS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CisJc2l6ZSA9IHFwLT5zcS5tYXhfZ3MgKiBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZyk7CiAJc3dpdGNoIChxcC0+dHJhbnNwb3J0KSB7CiAJY2FzZSBNTFg6CiAJCXNpemUgKz0gMiAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKIAkJYnJlYWs7CisKIAljYXNlIFVEOgotCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQotCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hcmJlbF91ZF9zZWcpOwotCQllbHNlCi0JCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3Rhdm9yX3VkX3NlZyk7CisJCXNpemUgKz0gbXRoY2FfaXNfbWVtZnJlZShkZXYpID8KKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX2FyYmVsX3VkX3NlZykgOgorCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfdGF2b3JfdWRfc2VnKTsKIAkJYnJlYWs7CisKKwljYXNlIFVDOgorCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZyk7CisJCWJyZWFrOworCisJY2FzZSBSQzoKKwkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpOworCQkvKgorCQkgKiBBbiBhdG9taWMgb3Agd2lsbCByZXF1aXJlIGFuIGF0b21pYyBzZWdtZW50LCBhCisJCSAqIHJlbW90ZSBhZGRyZXNzIHNlZ21lbnQgYW5kIG9uZSBzY2F0dGVyIGVudHJ5LgorCQkgKi8KKwkJc2l6ZSA9IG1heF90KGludCwgc2l6ZSwKKwkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZykgKworCQkJICAgICBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpICsKKwkJCSAgICAgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgotCQkvKiBiaW5kIHNlZyBpcyBhcyBiaWcgYXMgYXRvbWljICsgcmFkZHIgc2VncyAqLwotCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2JpbmRfc2VnKTsKKwkJYnJlYWs7CiAJfQogCisJLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggc3BhY2UgZm9yIGEgYmluZCByZXF1ZXN0ICovCisJc2l6ZSA9IG1heF90KGludCwgc2l6ZSwgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYmluZF9zZWcpKTsKKworCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpOworCisJaWYgKHNpemUgPiBkZXYtPmxpbWl0cy5tYXhfZGVzY19zeikKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKHFwLT5zcS53cWVfc2hpZnQgPSA2OyAxIDw8IHFwLT5zcS53cWVfc2hpZnQgPCBzaXplOwogCSAgICAgcXAtPnNxLndxZV9zaGlmdCsrKQogCQk7IC8qIG5vdGhpbmcgKi8KQEAgLTEwNjYsNiArMTEzNCw4IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJbXRoY2FfYWRqdXN0X3FwX2NhcHMoZGV2LCBwZCwgcXApOworCiAJLyoKIAkgKiBJZiB0aGlzIGlzIGEgdXNlcnNwYWNlIFFQLCB3ZSdyZSBkb25lIG5vdy4gIFRoZSBkb29yYmVsbHMKIAkgKiB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgYnVmZmVycyB3aWxsIGJlIGluaXRpYWxpemVkIGluCkBAIC0xNDg2LDggKzE1NTYsOCBAQAogCQkJCX0KIAogCQkJCXdxZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKTsKLQkJCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgLyAxNiArCi0JCQkJCXNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOworCQkJCXNpemUgKz0gKHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgKworCQkJCQkgc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZykpIC8gMTY7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKQEAgLTE2MzcsNiArMTcwNyw3IEBACiB7CiAJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnFwLT5kZXZpY2UpOwogCXN0cnVjdCBtdGhjYV9xcCAqcXAgPSB0b19tcXAoaWJxcCk7CisJX19iZTMyIGRvb3JiZWxsWzJdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAJaW50IG5yZXE7CkBAIC0xNjU0LDYgKzE3MjUsMjIgQEAKIAlpbmQgPSBxcC0+cnEubmV4dF9pbmQ7CiAKIAlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CisJCWlmICh1bmxpa2VseShucmVxID09IE1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCKSkgeworCQkJbnJlcSA9IDA7CisKKwkJCWRvb3JiZWxsWzBdID0gY3B1X3RvX2JlMzIoKHFwLT5ycS5uZXh0X2luZCA8PCBxcC0+cnEud3FlX3NoaWZ0KSB8IHNpemUwKTsKKwkJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIocXAtPnFwbiA8PCA4KTsKKworCQkJd21iKCk7CisKKwkJCW10aGNhX3dyaXRlNjQoZG9vcmJlbGwsCisJCQkJICAgICAgZGV2LT5rYXIgKyBNVEhDQV9SRUNFSVZFX0RPT1JCRUxMLAorCQkJCSAgICAgIE1USENBX0dFVF9ET09SQkVMTF9MT0NLKCZkZXYtPmRvb3JiZWxsX2xvY2spKTsKKworCQkJcXAtPnJxLmhlYWQgKz0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREI7CisJCQlzaXplMCA9IDA7CisJCX0KKwogCQlpZiAobXRoY2Ffd3Ffb3ZlcmZsb3coJnFwLT5ycSwgbnJlcSwgcXAtPmlicXAucmVjdl9jcSkpIHsKIAkJCW10aGNhX2VycihkZXYsICJSUSAlMDZ4IGZ1bGwgKCV1IGhlYWQsICV1IHRhaWwsIgogCQkJCQkiICVkIG1heCwgJWQgbnJlcSlcbiIsIHFwLT5xcG4sCkBAIC0xNzExLDggKzE3OTgsNiBAQAogCiBvdXQ6CiAJaWYgKGxpa2VseShucmVxKSkgewotCQlfX2JlMzIgZG9vcmJlbGxbMl07Ci0KIAkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMigocXAtPnJxLm5leHRfaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgc2l6ZTApOwogCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKChxcC0+cXBuIDw8IDgpIHwgbnJlcSk7CiAKQEAgLTE4MDYsOCArMTg5MSw4IEBACiAJCQkJfQogCiAJCQkJd3FlICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOwotCQkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSAvIDE2ICsKLQkJCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZyk7CisJCQkJc2l6ZSArPSAoc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSArCisJCQkJCSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKSkgLyAxNjsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKaW5kZXggMjZkNTE2MS4uZjdkMjM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwpAQCAtNDE3LDYgKzQxNyw3IEBACiB7CiAJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnNycS0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEgPSB0b19tc3JxKGlic3JxKTsKKwlfX2JlMzIgZG9vcmJlbGxbMl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAlpbnQgZmlyc3RfaW5kOwpAQCAtNDMyLDYgKzQzMywyNSBAQAogCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAogCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKKwkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7CisJCQlucmVxID0gMDsKKworCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOworCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihzcnEtPnNycW4gPDwgOCk7CisKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgdGhhdCBkZXNjcmlwdG9ycyBhcmUgd3JpdHRlbgorCQkJICogYmVmb3JlIGRvb3JiZWxsIGlzIHJ1bmcuCisJCQkgKi8KKwkJCXdtYigpOworCisJCQltdGhjYV93cml0ZTY0KGRvb3JiZWxsLAorCQkJCSAgICAgIGRldi0+a2FyICsgTVRIQ0FfUkVDRUlWRV9ET09SQkVMTCwKKwkJCQkgICAgICBNVEhDQV9HRVRfRE9PUkJFTExfTE9DSygmZGV2LT5kb29yYmVsbF9sb2NrKSk7CisKKwkJCWZpcnN0X2luZCA9IHNycS0+Zmlyc3RfZnJlZTsKKwkJfQorCiAJCWluZCA9IHNycS0+Zmlyc3RfZnJlZTsKIAogCQlpZiAoaW5kIDwgMCkgewpAQCAtNDk0LDggKzUxNCw2IEBACiAJfQogCiAJaWYgKGxpa2VseShucmVxKSkgewotCQlfX2JlMzIgZG9vcmJlbGxbMl07Ci0KIAkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMihmaXJzdF9pbmQgPDwgc3JxLT53cWVfc2hpZnQpOwogCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKChzcnEtPnNycW4gPDwgOCkgfCBucmVxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oCmluZGV4IDFmNGMwZmYuLjczZjFjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmgKQEAgLTQ5LDcgKzQ5LDggQEAKIH07CiAKIGVudW0gewotCU1USENBX0lOVkFMX0xLRVkgPSAweDEwMAorCU1USENBX0lOVkFMX0xLRVkJCQk9IDB4MTAwLAorCU1USENBX1RBVk9SX01BWF9XUUVTX1BFUl9SRUNWX0RCCT0gMjU2CiB9OwogCiBzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDAwOTVhY2MuLjk5MjNhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTE3OSw2ICsxNzksNyBAQAogI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHCiAJc3RydWN0IGxpc3RfaGVhZCBmc19saXN0OwogCXN0cnVjdCBkZW50cnkgKm1jZ19kZW50cnk7CisJc3RydWN0IGRlbnRyeSAqcGF0aF9kZW50cnk7CiAjZW5kaWYKIH07CiAKQEAgLTI3MCw3ICsyNzEsNiBAQAogCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKIHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppcG9pYl9tY2FzdF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGlwb2liX21jYXN0X2l0ZXJfZnJlZShzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcik7CiBpbnQgaXBvaWJfbWNhc3RfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKTsKIHZvaWQgaXBvaWJfbWNhc3RfaXRlcl9yZWFkKHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyLAogCQkJCSAgdW5pb24gaWJfZ2lkICpnaWQsCkBAIC0yNzgsNiArMjc4LDExIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgKnF1ZXVlbGVuLAogCQkJCSAgdW5zaWduZWQgaW50ICpjb21wbGV0ZSwKIAkJCQkgIHVuc2lnbmVkIGludCAqc2VuZF9vbmx5KTsKKworc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXBvaWJfcGF0aF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgaXBvaWJfcGF0aF9pdGVyX25leHQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlcik7Cit2b2lkIGlwb2liX3BhdGhfaXRlcl9yZWFkKHN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIsCisJCQkgIHN0cnVjdCBpcG9pYl9wYXRoICpwYXRoKTsKICNlbmRpZgogCiBpbnQgaXBvaWJfbWNhc3RfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtbGlkLApAQCAtMjk5LDEzICszMDQsMTMgQEAKIGludCBpcG9pYl9wa2V5X2Rldl9kZWxheV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKLWludCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGlwb2liX3JlZ2lzdGVyX2RlYnVnZnModm9pZCk7CiB2b2lkIGlwb2liX3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlwb2liX3JlZ2lzdGVyX2RlYnVnZnModm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGlwb2liX3VucmVnaXN0ZXJfZGVidWdmcyh2b2lkKSB7IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCmluZGV4IDM4YjE1MGYuLjY4NTI1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKQEAgLTQzLDYgKzQzLDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICppcG9pYl9yb290OwogCitzdGF0aWMgdm9pZCBmb3JtYXRfZ2lkKHVuaW9uIGliX2dpZCAqZ2lkLCBjaGFyICpidWYpCit7CisJaW50IGksIG47CisKKwlmb3IgKG4gPSAwLCBpID0gMDsgaSA8IDg7ICsraSkgeworCQluICs9IHNwcmludGYoYnVmICsgbiwgIiV4IiwKKwkJCSAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgZ2lkLT5yYXcpW2ldKSk7CisJCWlmIChpIDwgNykKKwkJCWJ1ZltuKytdID0gJzonOworCX0KK30KKwogc3RhdGljIHZvaWQgKmlwb2liX21jZ19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmaWxlLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlcjsKQEAgLTU0LDcgKzY2LDcgQEAKIAogCXdoaWxlIChuLS0pIHsKIAkJaWYgKGlwb2liX21jYXN0X2l0ZXJfbmV4dChpdGVyKSkgewotCQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQkJa2ZyZWUoaXRlcik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KQEAgLTcwLDcgKzgyLDcgQEAKIAkoKnBvcykrKzsKIAogCWlmIChpcG9pYl9tY2FzdF9pdGVyX25leHQoaXRlcikpIHsKLQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQlrZnJlZShpdGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC04NywzMiArOTksMzIgQEAKIAlzdHJ1Y3QgaXBvaWJfbWNhc3RfaXRlciAqaXRlciA9IGl0ZXJfcHRyOwogCWNoYXIgZ2lkX2J1ZltzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiJdOwogCXVuaW9uIGliX2dpZCBtZ2lkOwotCWludCBpLCBuOwogCXVuc2lnbmVkIGxvbmcgY3JlYXRlZDsKIAl1bnNpZ25lZCBpbnQgcXVldWVsZW4sIGNvbXBsZXRlLCBzZW5kX29ubHk7CiAKLQlpZiAoaXRlcikgewotCQlpcG9pYl9tY2FzdF9pdGVyX3JlYWQoaXRlciwgJm1naWQsICZjcmVhdGVkLCAmcXVldWVsZW4sCi0JCQkJICAgICAgJmNvbXBsZXRlLCAmc2VuZF9vbmx5KTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiAwOwogCi0JCWZvciAobiA9IDAsIGkgPSAwOyBpIDwgc2l6ZW9mIG1naWQgLyAyOyArK2kpIHsKLQkJCW4gKz0gc3ByaW50ZihnaWRfYnVmICsgbiwgIiV4IiwKLQkJCQkgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopIG1naWQucmF3KVtpXSkpOwotCQkJaWYgKGkgPCBzaXplb2YgbWdpZCAvIDIgLSAxKQotCQkJCWdpZF9idWZbbisrXSA9ICc6JzsKLQkJfQotCX0KKwlpcG9pYl9tY2FzdF9pdGVyX3JlYWQoaXRlciwgJm1naWQsICZjcmVhdGVkLCAmcXVldWVsZW4sCisJCQkgICAgICAmY29tcGxldGUsICZzZW5kX29ubHkpOwogCi0Jc2VxX3ByaW50ZihmaWxlLCAiR0lEOiAlKnMiLCAtKDEgKyAoaW50KSBzaXplb2YgZ2lkX2J1ZiksIGdpZF9idWYpOworCWZvcm1hdF9naWQoJm1naWQsIGdpZF9idWYpOwogCiAJc2VxX3ByaW50ZihmaWxlLAotCQkgICAiIGNyZWF0ZWQ6ICUxMGxkIHF1ZXVlbGVuOiAlNGQgY29tcGxldGU6ICVkIHNlbmRfb25seTogJWRcbiIsCi0JCSAgIGNyZWF0ZWQsIHF1ZXVlbGVuLCBjb21wbGV0ZSwgc2VuZF9vbmx5KTsKKwkJICAgIkdJRDogJXNcbiIKKwkJICAgIiAgY3JlYXRlZDogJTEwbGRcbiIKKwkJICAgIiAgcXVldWVsZW46ICU5ZFxuIgorCQkgICAiICBjb21wbGV0ZTogJTlzXG4iCisJCSAgICIgIHNlbmRfb25seTogJThzXG4iCisJCSAgICJcbiIsCisJCSAgIGdpZF9idWYsIGNyZWF0ZWQsIHF1ZXVlbGVuLAorCQkgICBjb21wbGV0ZSA/ICJ5ZXMiIDogIm5vIiwKKwkJICAgc2VuZF9vbmx5ID8gInllcyIgOiAibm8iKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX3NlcV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX21jZ19zZXFfb3BzID0gewogCS5zdGFydCA9IGlwb2liX21jZ19zZXFfc3RhcnQsCiAJLm5leHQgID0gaXBvaWJfbWNnX3NlcV9uZXh0LAogCS5zdG9wICA9IGlwb2liX21jZ19zZXFfc3RvcCwKQEAgLTEyNCw3ICsxMzYsNyBAQAogCXN0cnVjdCBzZXFfZmlsZSAqc2VxOwogCWludCByZXQ7CiAKLQlyZXQgPSBzZXFfb3BlbihmaWxlLCAmaXBvaWJfc2VxX29wcyk7CisJcmV0ID0gc2VxX29wZW4oZmlsZSwgJmlwb2liX21jZ19zZXFfb3BzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMzQsNyArMTQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBvaWJfZm9wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwb2liX21jZ19mb3BzID0gewogCS5vd25lciAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgPSBpcG9pYl9tY2dfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLApAQCAtMTQyLDI1ICsxNTQsMTM4IEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZQogfTsKIAotaW50IGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCAqaXBvaWJfcGF0aF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpmaWxlLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNoYXIgbmFtZVtJRk5BTVNJWiArIHNpemVvZiAiX21jZyJdOworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXI7CisJbG9mZl90IG4gPSAqcG9zOwogCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mIG5hbWUsICIlc19tY2ciLCBkZXYtPm5hbWUpOworCWl0ZXIgPSBpcG9pYl9wYXRoX2l0ZXJfaW5pdChmaWxlLT5wcml2YXRlKTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiBOVUxMOwogCi0JcHJpdi0+bWNnX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCi0JCQkJCSAgICAgICBpcG9pYl9yb290LCBkZXYsICZpcG9pYl9mb3BzKTsKKwl3aGlsZSAobi0tKSB7CisJCWlmIChpcG9pYl9wYXRoX2l0ZXJfbmV4dChpdGVyKSkgeworCQkJa2ZyZWUoaXRlcik7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KIAotCXJldHVybiBwcml2LT5tY2dfZGVudHJ5ID8gMCA6IC1FTk9NRU07CisJcmV0dXJuIGl0ZXI7CiB9CiAKLXZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkICppcG9pYl9wYXRoX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcl9wdHIsCisJCQkJICAgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciA9IGl0ZXJfcHRyOworCisJKCpwb3MpKys7CisKKwlpZiAoaXBvaWJfcGF0aF9pdGVyX25leHQoaXRlcikpIHsKKwkJa2ZyZWUoaXRlcik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBpdGVyOworfQorCitzdGF0aWMgdm9pZCBpcG9pYl9wYXRoX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcl9wdHIpCit7CisJLyogbm90aGluZyBmb3Igbm93ICovCit9CisKK3N0YXRpYyBpbnQgaXBvaWJfcGF0aF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIHZvaWQgKml0ZXJfcHRyKQoreworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIgPSBpdGVyX3B0cjsKKwljaGFyIGdpZF9idWZbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYiXTsKKwlzdHJ1Y3QgaXBvaWJfcGF0aCBwYXRoOworCWludCByYXRlOworCisJaWYgKCFpdGVyKQorCQlyZXR1cm4gMDsKKworCWlwb2liX3BhdGhfaXRlcl9yZWFkKGl0ZXIsICZwYXRoKTsKKworCWZvcm1hdF9naWQoJnBhdGgucGF0aHJlYy5kZ2lkLCBnaWRfYnVmKTsKKworCXNlcV9wcmludGYoZmlsZSwKKwkJICAgIkdJRDogJXNcbiIKKwkJICAgIiAgY29tcGxldGU6ICU2c1xuIiwKKwkJICAgZ2lkX2J1ZiwgcGF0aC5wYXRocmVjLmRsaWQgPyAieWVzIiA6ICJubyIpOworCisJaWYgKHBhdGgucGF0aHJlYy5kbGlkKSB7CisJCXJhdGUgPSBpYl9zYV9yYXRlX2VudW1fdG9faW50KHBhdGgucGF0aHJlYy5yYXRlKSAqIDI1OworCisJCXNlcV9wcmludGYoZmlsZSwKKwkJCSAgICIgIERMSUQ6ICAgICAweCUwNHhcbiIKKwkJCSAgICIgIFNMOiAlMTJkXG4iCisJCQkgICAiICByYXRlOiAlKmQlcyBHYi9zZWNcbiIsCisJCQkgICBiZTE2X3RvX2NwdShwYXRoLnBhdGhyZWMuZGxpZCksCisJCQkgICBwYXRoLnBhdGhyZWMuc2wsCisJCQkgICAxMCAtICgocmF0ZSAlIDEwKSA/IDIgOiAwKSwKKwkJCSAgIHJhdGUgLyAxMCwgcmF0ZSAlIDEwID8gIi41IiA6ICIiKTsKKwl9CisKKwlzZXFfcHV0YyhmaWxlLCAnXG4nKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGlwb2liX3BhdGhfc2VxX29wcyA9IHsKKwkuc3RhcnQgPSBpcG9pYl9wYXRoX3NlcV9zdGFydCwKKwkubmV4dCAgPSBpcG9pYl9wYXRoX3NlcV9uZXh0LAorCS5zdG9wICA9IGlwb2liX3BhdGhfc2VxX3N0b3AsCisJLnNob3cgID0gaXBvaWJfcGF0aF9zZXFfc2hvdywKK307CisKK3N0YXRpYyBpbnQgaXBvaWJfcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCWludCByZXQ7CisKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmaXBvaWJfcGF0aF9zZXFfb3BzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBvaWJfcGF0aF9mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBpcG9pYl9wYXRoX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCit9OworCit2b2lkIGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJY2hhciBuYW1lW0lGTkFNU0laICsgc2l6ZW9mICJfcGF0aCJdOworCisJc25wcmludGYobmFtZSwgc2l6ZW9mIG5hbWUsICIlc19tY2ciLCBkZXYtPm5hbWUpOworCXByaXYtPm1jZ19kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCQkgICAgICAgaXBvaWJfcm9vdCwgZGV2LCAmaXBvaWJfbWNnX2ZvcHMpOworCWlmICghcHJpdi0+bWNnX2RlbnRyeSkKKwkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtY2cgZGVidWcgZmlsZVxuIik7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YgbmFtZSwgIiVzX3BhdGgiLCBkZXYtPm5hbWUpOworCXByaXYtPnBhdGhfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKKwkJCQkJCWlwb2liX3Jvb3QsIGRldiwgJmlwb2liX3BhdGhfZm9wcyk7CisJaWYgKCFwcml2LT5wYXRoX2RlbnRyeSkKKwkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBwYXRoIGRlYnVnIGZpbGVcbiIpOworfQorCit2b2lkIGlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAocHJpdi0+bWNnX2RlbnRyeSkKIAkJZGVidWdmc19yZW1vdmUocHJpdi0+bWNnX2RlbnRyeSk7CisJaWYgKHByaXYtPnBhdGhfZGVudHJ5KQorCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5wYXRoX2RlbnRyeSk7CiB9CiAKIGludCBpcG9pYl9yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IGNlMDI5NjIuLjJmYTMwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC01OCw2ICs1OCwxMSBAQAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19sZXZlbCwgIkVuYWJsZSBkZWJ1ZyB0cmFjaW5nIGlmID4gMCIpOwogI2VuZGlmCiAKK3N0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGlwb2liX3BhdGggIHBhdGg7Cit9OworCiBzdGF0aWMgY29uc3QgdTggaXB2NF9iY2FzdF9hZGRyW10gPSB7CiAJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwKIAkweGZmLCAweDEyLCAweDQwLCAweDFiLAkweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtMjUwLDYgKzI1NSw2NCBAQAogCWtmcmVlKHBhdGgpOwogfQogCisjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKKworc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXBvaWJfcGF0aF9pdGVyX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyOworCisJaXRlciA9IGttYWxsb2Moc2l6ZW9mICppdGVyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWl0ZXIpCisJCXJldHVybiBOVUxMOworCisJaXRlci0+ZGV2ID0gZGV2OworCW1lbXNldChpdGVyLT5wYXRoLnBhdGhyZWMuZGdpZC5yYXcsIDAsIDE2KTsKKworCWlmIChpcG9pYl9wYXRoX2l0ZXJfbmV4dChpdGVyKSkgeworCQlrZnJlZShpdGVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGl0ZXI7Cit9CisKK2ludCBpcG9pYl9wYXRoX2l0ZXJfbmV4dChzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGl0ZXItPmRldik7CisJc3RydWN0IHJiX25vZGUgKm47CisJc3RydWN0IGlwb2liX3BhdGggKnBhdGg7CisJaW50IHJldCA9IDE7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCW4gPSByYl9maXJzdCgmcHJpdi0+cGF0aF90cmVlKTsKKworCXdoaWxlIChuKSB7CisJCXBhdGggPSByYl9lbnRyeShuLCBzdHJ1Y3QgaXBvaWJfcGF0aCwgcmJfbm9kZSk7CisKKwkJaWYgKG1lbWNtcChpdGVyLT5wYXRoLnBhdGhyZWMuZGdpZC5yYXcsIHBhdGgtPnBhdGhyZWMuZGdpZC5yYXcsCisJCQkgICBzaXplb2YgKHVuaW9uIGliX2dpZCkpIDwgMCkgeworCQkJaXRlci0+cGF0aCA9ICpwYXRoOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJbiA9IHJiX25leHQobik7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgaXBvaWJfcGF0aF9pdGVyX3JlYWQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciwKKwkJCSAgc3RydWN0IGlwb2liX3BhdGggKnBhdGgpCit7CisJKnBhdGggPSBpdGVyLT5wYXRoOworfQorCisjZW5kaWYgLyogQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcgKi8KKwogdm9pZCBpcG9pYl9mbHVzaF9wYXRocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC03NjMsNyArODI2LDcgQEAKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpLCAqY3ByaXYsICp0Y3ByaXY7CiAKLQlpcG9pYl9kZWxldGVfZGVidWdfZmlsZShkZXYpOworCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhkZXYpOwogCiAJLyogRGVsZXRlIGFueSBjaGlsZCBpbnRlcmZhY2VzIGZpcnN0ICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwcml2LCB0Y3ByaXYsICZwcml2LT5jaGlsZF9pbnRmcywgbGlzdCkgewpAQCAtOTcyLDggKzEwMzUsNyBAQAogCQlnb3RvIHJlZ2lzdGVyX2ZhaWxlZDsKIAl9CiAKLQlpZiAoaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KSkKLQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAKIAlpZiAoaXBvaWJfYWRkX3BrZXlfYXR0cihwcml2LT5kZXYpKQogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKQEAgLTk4Nyw5ICsxMDQ5LDcgQEAKIAlyZXR1cm4gcHJpdi0+ZGV2OwogCiBzeXNmc19mYWlsZWQ6Ci0JaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KTsKLQotZGVidWdfZmFpbGVkOgorCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAKIHJlZ2lzdGVyX2ZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IDNlY2Y3OGEuLmMzM2VkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMTIwLDEyICsxMjAsOCBAQAogCWlmIChtY2FzdC0+YWgpCiAJCWlwb2liX3B1dF9haChtY2FzdC0+YWgpOwogCi0Jd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJm1jYXN0LT5wa3RfcXVldWUpKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSk7Ci0KLQkJc2tiLT5kZXYgPSBkZXY7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JfQorCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX2RlcXVldWUoJm1jYXN0LT5wa3RfcXVldWUpKTsKIAogCWtmcmVlKG1jYXN0KTsKIH0KQEAgLTMxNywxMyArMzEzLDggQEAKIAkJCQkJSVBPSUJfR0lEX0FSRyhtY2FzdC0+bWNtZW1iZXIubWdpZCksIHN0YXR1cyk7CiAKIAkJLyogRmx1c2ggb3V0IGFueSBxdWV1ZWQgcGFja2V0cyAqLwotCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbWNhc3QtPnBrdF9xdWV1ZSkpIHsKLQkJCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSk7Ci0KLQkJCXNrYi0+ZGV2ID0gZGV2OwotCi0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQl9CisJCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKSk7CiAKIAkJLyogQ2xlYXIgdGhlIGJ1c3kgZmxhZyBzbyB3ZSB0cnkgYWdhaW4gKi8KIAkJY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7CkBAIC05MjgsMjEgKzkxOSwxNiBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWl0ZXItPmRldiA9IGRldjsKLQltZW1zZXQoaXRlci0+bWdpZC5yYXcsIDAsIHNpemVvZiBpdGVyLT5tZ2lkKTsKKwltZW1zZXQoaXRlci0+bWdpZC5yYXcsIDAsIDE2KTsKIAogCWlmIChpcG9pYl9tY2FzdF9pdGVyX25leHQoaXRlcikpIHsKLQkJaXBvaWJfbWNhc3RfaXRlcl9mcmVlKGl0ZXIpOworCQlrZnJlZShpdGVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJcmV0dXJuIGl0ZXI7CiB9CiAKLXZvaWQgaXBvaWJfbWNhc3RfaXRlcl9mcmVlKHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKQotewotCWtmcmVlKGl0ZXIpOwotfQotCiBpbnQgaXBvaWJfbWNhc3RfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGl0ZXItPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZsYW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCmluZGV4IDMzMmQ3MzAuLmQyODBiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jCkBAIC0xMTMsOCArMTEzLDcgQEAKIAogCXByaXYtPnBhcmVudCA9IHBwcml2LT5kZXY7CiAKLQlpZiAoaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KSkKLQkJZ290byBkZWJ1Z19mYWlsZWQ7CisJaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAKIAlpZiAoaXBvaWJfYWRkX3BrZXlfYXR0cihwcml2LT5kZXYpKQogCQlnb3RvIHN5c2ZzX2ZhaWxlZDsKQEAgLTEzMCw5ICsxMjksNyBAQAogCXJldHVybiAwOwogCiBzeXNmc19mYWlsZWQ6Ci0JaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGUocHJpdi0+ZGV2KTsKLQotZGVidWdfZmFpbGVkOgorCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlcyhwcml2LT5kZXYpOwogCXVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtPmRldik7CiAKIHJlZ2lzdGVyX2ZhaWxlZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwppbmRleCBkMDBkMTRiLi42NDY3MmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCkBAIC0yNTksMTcgKzI1OSwxNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpa2JkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGNvcmdpa2JkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWNvcmdpa2JkLT5zdXNwZW5kZWQgPSAxOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lrYmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lrYmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAkvKiBVcG9uIHJlc3VtZSwgaWdub3JlIHRoZSBzdXNwZW5kIGtleSBmb3IgYSBzaG9ydCB3aGlsZSAqLwogCWNvcmdpa2JkLT5zdXNwZW5kX2ppZmZpZXM9amlmZmllczsKQEAgLTI4Miw3ICsyODIsNyBAQAogI2RlZmluZSBjb3JnaWtiZF9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaWtiZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaWtiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNvcmdpa2JkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjb3JnaWtiZCk7CiAKIAljb3JnaWtiZC0+aW5wdXQgPSBpbnB1dF9kZXY7CiAJc3Bpbl9sb2NrX2luaXQoJmNvcmdpa2JkLT5sb2NrKTsKQEAgLTMyMSw3ICszMjEsNyBAQAogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9IGRldjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBjb3JnaWtiZDsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApIHwgQklUKEVWX1BXUikgfCBCSVQoRVZfU1cpOwpAQCAtMzU2LDEwICszNTYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWtiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaWtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IENPUkdJX0tFWV9TRU5TRV9OVU07IGkrKykKIAkJZnJlZV9pcnEoQ09SR0lfSVJRX0dQSU9fS0VZX1NFTlNFKGkpLCBjb3JnaWtiZCk7CkBAIC0zNzQsMjMgKzM3NCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2lrYmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1rZXlib2FyZCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaWtiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGNvcmdpa2JkX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2lrYmRfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2lrYmRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGNvcmdpa2JkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2kta2V5Ym9hcmQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JnaWtiZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2lrYmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29yZ2lrYmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjb3JnaWtiZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwppbmRleCAwZmEzOGE1Li42YTE1ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCkBAIC0zMDksMTAgKzMwOSwxMCBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNwaXR6a2JkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNwaXR6a2JkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXNwaXR6a2JkLT5zdXNwZW5kZWQgPSAxOwogCiAJLyogU2V0IFN0cm9iZSBsaW5lcyBhcyBpbnB1dHMgLSAqZXhjZXB0KiBzdHJvYmUgbGluZSAwIGxlYXZlIHRoaXMKQEAgLTMyMywxMCArMzIzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BpdHprYmRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc3BpdHprYmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1BJVFpfS0VZX1NUUk9CRV9OVU07IGkrKykKIAkJcHhhX2dwaW9fbW9kZShzcGl0el9zdHJvYmVzW2ldIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSCk7CkBAIC0zNDIsNyArMzQyLDcgQEAKICNkZWZpbmUgc3BpdHprYmRfcmVzdW1lCQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgc3BpdHprYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQ7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNwaXR6a2JkKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNwaXR6a2JkKTsKIAlzdHJjcHkoc3BpdHprYmQtPnBoeXMsICJzcGl0emtiZC9pbnB1dDAiKTsKIAogCXNwaW5fbG9ja19pbml0KCZzcGl0emtiZC0+bG9jayk7CkBAIC0zODAsNyArMzgwLDcgQEAKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBzcGl0emtiZDsKIAlpbnB1dF9kZXYtPm5hbWUgPSAiU3BpdHogS2V5Ym9hcmQiOwogCWlucHV0X2Rldi0+cGh5cyA9IHNwaXR6a2JkLT5waHlzOwotCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSBkZXY7CisJaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZkZXYtPmRldjsKIAogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwpAQCAtNDM3LDEwICs0MzcsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcGl0emtiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzcGl0emtiZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwotCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBTUElUWl9LRVlfU0VOU0VfTlVNOyBpKyspCiAJCWZyZWVfaXJxKElSUV9HUElPKHNwaXR6X3NlbnNlc1tpXSksIHNwaXR6a2JkKTsKQEAgLTQ2MCwyMyArNDYwLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzcGl0emtiZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNwaXR6LWtleWJvYXJkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaXR6a2JkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc3BpdHprYmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzcGl0emtiZF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzcGl0emtiZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc3BpdHprYmRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzcGl0ei1rZXlib2FyZCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNwaXR6a2JkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzcGl0emtiZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzcGl0emtiZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNwaXR6a2JkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCmluZGV4IDAxZTE4NjQuLmFjODZjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKQEAgLTkxMiw3ICs5MTIsNyBAQAogICogSGVyZSB3ZSB0cnkgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgQklPUyBzZXR0aW5ncwogICovCiAKLXN0YXRpYyBpbnQgaTgwNDJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaTgwNDJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlkZWxfdGltZXJfc3luYygmaTgwNDJfdGltZXIpOwogCWk4MDQyX2NvbnRyb2xsZXJfcmVzZXQoKTsKQEAgLTkyNSw3ICs5MjUsNyBAQAogICogSGVyZSB3ZSB0cnkgdG8gcmVzZXQgZXZlcnl0aGluZyBiYWNrIHRvIGEgc3RhdGUgaW4gd2hpY2ggc3VzcGVuZGVkCiAgKi8KIAotc3RhdGljIGludCBpODA0Ml9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpODA0Ml9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCkBAIC05NjQsMTcgKzk2NCwxOCBAQAogICogYmVjYXVzZSBvdGhlcndpc2UgQklPU2VzIHdpbGwgYmUgY29uZnVzZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgaTgwNDJfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIHZvaWQgaTgwNDJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWk4MDQyX2NvbnRyb2xsZXJfY2xlYW51cCgpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaTgwNDJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJpODA0MiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpODA0Ml9kcml2ZXIgPSB7CiAJLnN1c3BlbmQJPSBpODA0Ml9zdXNwZW5kLAogCS5yZXN1bWUJCT0gaTgwNDJfcmVzdW1lLAogCS5zaHV0ZG93bgk9IGk4MDQyX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpODA0MiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGk4MDQyX2NyZWF0ZV9rYmRfcG9ydCh2b2lkKQpAQCAtMTA3OCw3ICsxMDc5LDcgQEAKIAkJZ290byBlcnJfcGxhdGZvcm1fZXhpdDsKIAl9CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpODA0Ml9kcml2ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NvbnRyb2xsZXJfY2xlYW51cDsKIApAQCAtMTEyNiw3ICsxMTI3LDcgQEAKICBlcnJfdW5yZWdpc3Rlcl9kZXZpY2U6CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaTgwNDJfcGxhdGZvcm1fZGV2aWNlKTsKICBlcnJfdW5yZWdpc3Rlcl9kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAgZXJyX2NvbnRyb2xsZXJfY2xlYW51cDoKIAlpODA0Ml9jb250cm9sbGVyX2NsZWFudXAoKTsKICBlcnJfcGxhdGZvcm1fZXhpdDoKQEAgLTExNDgsNyArMTE0OSw3IEBACiAJZGVsX3RpbWVyX3N5bmMoJmk4MDQyX3RpbWVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGk4MDQyX3BsYXRmb3JtX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAKIAlpODA0Ml9wbGF0Zm9ybV9leGl0KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCmluZGV4IDUyYzQ5MjUuLmEzYmQxMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzZXJpbyBzdHJ1Y3R1cmUgZm9yIHN1YnNlcXVlbnQgcmVnaXN0cmF0aW9uCiAgKiB3aXRoIHNlcmlvIGNvcmUuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJwY2tiZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBycGNrYmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzZXJpbyAqc2VyaW87CiAKQEAgLTEyMCwzNyArMTIwLDM4IEBACiAJc2VyaW8tPndyaXRlCQk9IHJwY2tiZF93cml0ZTsKIAlzZXJpby0+b3BlbgkJPSBycGNrYmRfb3BlbjsKIAlzZXJpby0+Y2xvc2UJCT0gcnBja2JkX2Nsb3NlOwotCXNlcmlvLT5kZXYucGFyZW50CT0gZGV2OworCXNlcmlvLT5kZXYucGFyZW50CT0gJmRldi0+ZGV2OwogCXN0cmxjcHkoc2VyaW8tPm5hbWUsICJSaXNjUEMgUFMvMiBrYmQgcG9ydCIsIHNpemVvZihzZXJpby0+bmFtZSkpOwogCXN0cmxjcHkoc2VyaW8tPnBoeXMsICJycGNrYmQvc2VyaW8wIiwgc2l6ZW9mKHNlcmlvLT5waHlzKSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBzZXJpbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzZXJpbyk7CiAJc2VyaW9fcmVnaXN0ZXJfcG9ydChzZXJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHJwY2tiZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgcnBja2JkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNlcmlvICpzZXJpbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZXJpbyAqc2VyaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXNlcmlvX3VucmVnaXN0ZXJfcG9ydChzZXJpbyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBycGNrYmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJrYXJ0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJwY2tiZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHJwY2tiZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJwY2tiZF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJrYXJ0IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnBja2JkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJwY2tiZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnJwY2tiZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZycGNrYmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocnBja2JkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDE1ZTg4ZWUuLjEwNDI5ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTIzMSw5ICsyMzEsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpdHNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29yZ2l0c19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjb3JnaV90cy0+cGVuZG93bikgewogCQlkZWxfdGltZXJfc3luYygmY29yZ2lfdHMtPnRpbWVyKTsKQEAgLTI0OCw5ICsyNDgsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpdHNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2l0c19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCgoNHUgPDwgQURTQ1RSTF9BRFJfU0gpIHwgQURTQ1RSTF9TVFMpOwogCS8qIEVuYWJsZSBGYWxsaW5nIEVkZ2UgKi8KQEAgLTI2NCwxMCArMjY0LDkgQEAKICNkZWZpbmUgY29yZ2l0c19yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaXRzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGNvcmdpdHNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKQEAgLTI3Niw5ICsyNzUsOSBAQAogCWlmICghY29yZ2lfdHMgfHwgIWlucHV0X2RldikKIAkJZ290byBmYWlsOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgY29yZ2lfdHMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvcmdpX3RzKTsKIAotCWNvcmdpX3RzLT5tYWNoaW5mbyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwljb3JnaV90cy0+bWFjaGluZm8gPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAljb3JnaV90cy0+aXJxX2dwaW8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCiAJaWYgKGNvcmdpX3RzLT5pcnFfZ3BpbyA8IDApIHsKQEAgLTI5OCw3ICsyOTcsNyBAQAogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMjsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9IGRldjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBjb3JnaV90czsKIAogCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwpAQCAtMzM5LDkgKzMzOCw5IEBACiAKIH0KIAotc3RhdGljIGludCBjb3JnaXRzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpdHNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWZyZWVfaXJxKGNvcmdpX3RzLT5pcnFfZ3BpbywgTlVMTCk7CiAJZGVsX3RpbWVyX3N5bmMoJmNvcmdpX3RzLT50aW1lcik7CkBAIC0zNTEsMjMgKzM1MCwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2l0c19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLXRzIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpdHNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaXRzX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2l0c19yZW1vdmUsCiAJLnN1c3BlbmQJPSBjb3JnaXRzX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaXRzX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2ktdHMiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JnaXRzX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29yZ2l0c19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpdHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjb3JnaXRzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jIGIvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jCmluZGV4IDdkYWEwZWQuLjFlYWI3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYworKysgYi9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMKQEAgLTEzOCw5ICsxMzgsOCBAQAogCS5kaXNhYmxlCQk9IG1jcF9zYTExeDBfZGlzYWJsZSwKIH07CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1jcF9wbGF0X2RhdGEgKmRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbWNwICptY3A7CiAJaW50IHJldDsKQEAgLTE2NSw3ICsxNjQsNyBAQAogCW1jcC0+ZG1hX3RlbGNvX3JkCT0gRE1BX1NlcjRNQ1AxUmQ7CiAJbWNwLT5kbWFfdGVsY29fd3IJPSBETUFfU2VyNE1DUDFXcjsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1jcCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNwKTsKIAogCWlmIChtYWNoaW5lX2lzX2Fzc2FiZXQoKSkgewogCQlBU1NBQkVUX0JDUl9zZXQoQVNTQUJFVF9CQ1JfQ09ERUNfUlNUKTsKQEAgLTIwMiwyNiArMjAxLDI2IEBACiAKICByZWxlYXNlOgogCXJlbGVhc2VfbWVtX3JlZ2lvbigweDgwMDYwMDAwLCAweDYwKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1jcF9zYTExeDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtY3AgKm1jcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtY3AgKm1jcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCW1jcF9ob3N0X3VucmVnaXN0ZXIobWNwKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oMHg4MDA2MDAwMCwgMHg2MCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtY3Bfc2ExMXgwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbWNwICptY3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWNwICptY3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcHJpdihtY3ApLT5tY2NyMCA9IFNlcjRNQ0NSMDsKIAlwcml2KG1jcCktPm1jY3IxID0gU2VyNE1DQ1IxOwpAQCAtMjMwLDkgKzIyOSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBtY3Bfc2ExMXgwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1jcCAqbWNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1jcCAqbWNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCVNlcjRNQ0NSMSA9IHByaXYobWNwKS0+bWNjcjE7CiAJU2VyNE1DQ1IwID0gcHJpdihtY3ApLT5tY2NyMDsKQEAgLTI0MywxMyArMjQyLDE0IEBACiAvKgogICogVGhlIGRyaXZlciBmb3IgdGhlIFNBMTF4MCBNQ1AgcG9ydC4KICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtbWNwIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1jcF9zYTExeDBfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtY3Bfc2ExMXgwX3Byb2JlLAogCS5yZW1vdmUJCT0gbWNwX3NhMTF4MF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBtY3Bfc2ExMXgwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtY3Bfc2ExMXgwX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLW1jcCIsCisJfSwKIH07CiAKIC8qCkBAIC0yNTcsMTIgKzI1NywxMiBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBtY3Bfc2ExMXgwX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZtY3Bfc2ExMXgwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbWNwX3NhMTF4MF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1jcF9zYTExeDBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtY3Bfc2ExMXgwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKaW5kZXggYmMyYjcyYi4uMTFhODAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNkZWZpbmUgU0tZX0NQVVNUQVRFX1ZFUlNJT04JCSIxLjEiCiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KTsKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldik7CitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdHJ1Y3QgY3B1c3RhdGVfdCBjcHVzdGF0ZTsKIApAQCAtMTU4LDExICsxNTgsMTIgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaGRwdV9jcHVzdGF0ZV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBIRFBVX0NQVVNUQVRFX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkcHVfY3B1c3RhdGVfZHJpdmVyID0gewogCS5wcm9iZSA9IGhkcHVfY3B1c3RhdGVfcHJvYmUsCiAJLnJlbW92ZSA9IGhkcHVfY3B1c3RhdGVfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gSERQVV9DUFVTVEFURV9OQU1FLAorCX0sCiB9OwogCiAvKgpAQCAtMTg3LDkgKzE4OCw4IEBACiAJJmNwdXN0YXRlX2ZvcHMKIH07CiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZGU7CiAJaW50IHJldDsKQEAgLTIxNyw3ICsyMTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAKIAljcHVzdGF0ZS5zZXRfYWRkciA9IE5VTEw7CkBAIC0yMzIsMTMgKzIzMiwxMyBAQAogc3RhdGljIGludCBfX2luaXQgY3B1c3RhdGVfaW5pdCh2b2lkKQogewogCWludCByYzsKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmaGRwdV9jcHVzdGF0ZV9kcml2ZXIpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3B1c3RhdGVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY3B1c3RhdGVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jIGIvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYwppbmRleCA0YmI0NjE3Li5lYTlkNWYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfbmV4dXMuYworKysgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCkBAIC0yMiwxOSArMjIsMjAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldik7Ci1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9zbG90X2lkOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGRwdV9jaGFzc2lzX2lkOwogc3RhdGljIGludCBzbG90X2lkID0gLTE7CiBzdGF0aWMgaW50IGNoYXNzaXNfaWQgPSAtMTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGhkcHVfbmV4dXNfZHJpdmVyID0gewotCS5uYW1lID0gSERQVV9ORVhVU19OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoZHB1X25leHVzX2RyaXZlciA9IHsKIAkucHJvYmUgPSBoZHB1X25leHVzX3Byb2JlLAogCS5yZW1vdmUgPSBoZHB1X25leHVzX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEhEUFVfTkVYVVNfTkFNRSwKKwl9LAogfTsKIAogaW50IGhkcHVfc2xvdF9pZF9yZWFkKGNoYXIgKmJ1ZmZlciwgY2hhciAqKmJ1ZmZlcl9sb2NhdGlvbiwgb2ZmX3Qgb2Zmc2V0LApAQCAtNTUsOSArNTYsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZmZlciwgIiVkXG4iLCBjaGFzc2lzX2lkKTsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTgwLDcgKzgwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBoZHB1X25leHVzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXNsb3RfaWQgPSAtMTsKIAljaGFzc2lzX2lkID0gLTE7CkBAIC05NCwxMyArOTQsMTMgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5leHVzX2luaXQodm9pZCkKIHsKIAlpbnQgcmM7Ci0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJmhkcHVfbmV4dXNfZHJpdmVyKTsKKwlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG5leHVzX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X25leHVzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG5leHVzX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvcHhhbWNpLmMgYi9kcml2ZXJzL21tYy9weGFtY2kuYwppbmRleCBmMzFlMjQ3Li5lZThmOGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9weGFtY2kuYwpAQCAtNDI4LDkgKzQyOCw4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YW1jaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKIAlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKQEAgLTQ0NSw3ICs0NDQsNyBAQAogCWlmICghcikKIAkJcmV0dXJuIC1FQlVTWTsKIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCBkZXYpOworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgcHhhbWNpX2hvc3QpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIW1tYykgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTQ3NCw3ICs0NzMsNyBAQAogCQkJIGhvc3QtPnBkYXRhLT5vY3JfbWFzayA6CiAJCQkgTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OwogCi0JaG9zdC0+c2dfY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKKwlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCAmaG9zdC0+c2dfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhvc3QtPnNnX2NwdSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTUxMSwxMCArNTEwLDEwIEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtbWMpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1tYyk7CiAKIAlpZiAoaG9zdC0+cGRhdGEgJiYgaG9zdC0+cGRhdGEtPmluaXQpCi0JCWhvc3QtPnBkYXRhLT5pbml0KGRldiwgcHhhbWNpX2RldGVjdF9pcnEsIG1tYyk7CisJCWhvc3QtPnBkYXRhLT5pbml0KCZwZGV2LT5kZXYsIHB4YW1jaV9kZXRlY3RfaXJxLCBtbWMpOwogCiAJbW1jX2FkZF9ob3N0KG1tYyk7CiAKQEAgLTUyNyw3ICs1MjYsNyBAQAogCQlpZiAoaG9zdC0+YmFzZSkKIAkJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CiAJCWlmIChob3N0LT5zZ19jcHUpCi0JCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0laRSwgaG9zdC0+c2dfY3B1LCBob3N0LT5zZ19kbWEpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAJfQogCWlmIChtbWMpCiAJCW1tY19mcmVlX2hvc3QobW1jKTsKQEAgLTUzNSwxNyArNTM0LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKG1tYykgewogCQlzdHJ1Y3QgcHhhbWNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCiAJCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+ZXhpdCkKLQkJCWhvc3QtPnBkYXRhLT5leGl0KGRldiwgbW1jKTsKKwkJCWhvc3QtPnBkYXRhLT5leGl0KCZwZGV2LT5kZXYsIG1tYyk7CiAKIAkJbW1jX3JlbW92ZV9ob3N0KG1tYyk7CiAKQEAgLTU2MCw3ICs1NTksNyBAQAogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogCQlweGFfZnJlZV9kbWEoaG9zdC0+ZG1hKTsKIAkJaW91bm1hcChob3N0LT5iYXNlKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CiAKIAkJcmVsZWFzZV9yZXNvdXJjZShob3N0LT5yZXMpOwogCkBAIC01NzAsOSArNTY5LDkgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhbWNpX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTgxLDkgKzU4MCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAobW1jKQpAQCAtNTk2LDIzICs1OTUsMjQgQEAKICNkZWZpbmUgcHhhbWNpX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YW1jaV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBweGFtY2lfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFtY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGFtY2lfcmVtb3ZlLAogCS5zdXNwZW5kCT0gcHhhbWNpX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFtY2lfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBweGFtY2lfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcHhhbWNpX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YW1jaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChweGFtY2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggZTk1NGI4My4uYzdlYjdjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIndic2QuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAid2JzZCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNCIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNSIKIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKICNkZWZpbmUgREJHKHguLi4pIFwKQEAgLTE5MzIsMTQgKzE5MzIsMTQgQEAKICAqIE5vbi1QblAKICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCB3YnNkX3Byb2JlKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogZGV2KQogewotCXJldHVybiB3YnNkX2luaXQoZGV2LCBpbywgaXJxLCBkbWEsIDApOworCXJldHVybiB3YnNkX2luaXQoJmRldi0+ZGV2LCBpbywgaXJxLCBkbWEsIDApOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB3YnNkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCiB7Ci0Jd2JzZF9zaHV0ZG93bihkZXYsIDApOworCXdic2Rfc2h1dGRvd24oJmRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTk4Myw5ICsxOTgzLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHdic2Rfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgd2JzZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAJaW50IHJldDsKIApAQCAtMjAwNSw5ICsyMDA1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3YnNkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHdic2RfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0OwogCiAJaWYgKCFtbWMpCkBAIC0yMDM4LDE0ICsyMDM4LDE1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3YnNkX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdic2RfZHJpdmVyID0gewotCS5uYW1lCQk9IERSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd2JzZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHdic2RfcHJvYmUsCi0JLnJlbW92ZQkJPSB3YnNkX3JlbW92ZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdic2RfcmVtb3ZlKSwKIAogCS5zdXNwZW5kCT0gd2JzZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gd2JzZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfUE5QCkBAIC0yMDU0LDcgKzIwNTUsNyBAQAogCS5uYW1lCQk9IERSSVZFUl9OQU1FLAogCS5pZF90YWJsZQk9IHBucF9kZXZfdGFibGUsCiAJLnByb2JlCQk9IHdic2RfcG5wX3Byb2JlLAotCS5yZW1vdmUJCT0gd2JzZF9wbnBfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2JzZF9wbnBfcmVtb3ZlKSwKIH07CiAKICNlbmRpZiAvKiBDT05GSUdfUE5QICovCkBAIC0yMDg1LDcgKzIwODYsNyBAQAogCiAJaWYgKG5vcG5wKQogCXsKLQkJcmVzdWx0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CisJCXJlc3VsdCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2JzZF9kcml2ZXIpOwogCQlpZiAocmVzdWx0IDwgMCkKIAkJCXJldHVybiByZXN1bHQ7CiAKQEAgLTIxMTEsNyArMjExMiw3IEBACiAJewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3YnNkX2RldmljZSk7CiAKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKIAl9CiAKIAlEQkcoInVubG9hZGVkXG4iKTsKQEAgLTIxMjcsNiArMjEyOCw3IEBACiBtb2R1bGVfcGFyYW0oZG1hLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJQaWVycmUgT3NzbWFuIDxkcnpldXNAZHJ6ZXVzLmN4PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIFc4M0w1MXhEIFNEL01NQyBjYXJkIGludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9iYXN0LWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYwppbmRleCBiNzg1OGViLi41MWY5NjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYwpAQCAtNjMsMTEgKzYzLDYgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKIAotc3RhdGljIHN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKnRvX2Jhc3RfaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICopZGV2X2dldF9kcnZkYXRhKGRldik7Ci19Ci0KIHN0YXRpYyB2b2lkIGJhc3RfZmxhc2hfc2V0cncoaW50IHRvKQogewogCXVuc2lnbmVkIGludCB2YWw7CkBAIC04NywxMSArODIsMTEgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgYmFzdF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBiYXN0X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKmluZm8gPSB0b19iYXN0X2luZm8oZGV2KTsKKwlzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtMTE2LDkgKzExMSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYmFzdF9mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJhc3RfZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKQEAgLTEzMSwxMyArMTI1LDEzIEBACiAJfQogCiAJbWVtemVybyhpbmZvLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJlcyA9IHBkZXYtPnJlc291cmNlOyAgLyogYXNzdW1lIHRoYXQgdGhlIGZsYXNoIGhhcyBvbmUgcmVzb3VyY2UgKi8KIAogCWluZm8tPm1hcC5waHlzID0gcmVzLT5zdGFydDsKIAlpbmZvLT5tYXAuc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7Ci0JaW5mby0+bWFwLm5hbWUgPSBkZXYtPmJ1c19pZDsKKwlpbmZvLT5tYXAubmFtZSA9IHBkZXYtPmRldi5idXNfaWQ7CQogCWluZm8tPm1hcC5iYW5rd2lkdGggPSAyOwogCiAJaWYgKGluZm8tPm1hcC5zaXplID4gQVJFQV9NQVhTSVpFKQpAQCAtMTk5LDI3ICsxOTMsMjggQEAKIAkvKiBmYWxsIHRocm91Z2ggdG8gZXhpdCBlcnJvciAqLwogCiAgZXhpdF9lcnJvcjoKLQliYXN0X2ZsYXNoX3JlbW92ZShkZXYpOworCWJhc3RfZmxhc2hfcmVtb3ZlKHBkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBiYXN0X2ZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYmFzdC1ub3IiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGJhc3RfZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBiYXN0X2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gYmFzdF9mbGFzaF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImJhc3Qtbm9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJhc3RfZmxhc2hfaW5pdCh2b2lkKQogewogCXByaW50aygiQkFTVCBOT1ItRmxhc2ggRHJpdmVyLCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiYXN0X2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYmFzdF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJhc3RfZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCmluZGV4IGZlNzM4ZmQ4Li5hM2JhNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwpAQCAtNjcsOSArNjcsOCBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgImFmcyIsIE5VTEwgfTsKIAotc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBhcm1mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgaW50IHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTM4LDcgKzEzNyw3IEBACiAJfQogCiAJaWYgKGVyciA9PSAwKQotCQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogSWYgd2UgZ290IGFuIGVycm9yLCBmcmVlIGFsbCByZXNvdXJjZXMuCkBAIC0xNjMsMTIgKzE2MiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYXJtZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGFybWZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwotCXN0cnVjdCBhcm1mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGFybWZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvKSB7CiAJCWlmIChpbmZvLT5tdGQpIHsKQEAgLTE5MCwyMSArMTg4LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhcm1mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImFybWZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybWZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gYXJtZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBhcm1mbGFzaF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImFybWZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXJtZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmFybWZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFybWZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYXJtZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDIwMDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCmluZGV4IDY0MWViMmIuLmZjN2E3OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jCkBAIC0xMTEsMTMgKzExMSwxMiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmKCFpbmZvKQogCQlyZXR1cm4gMDsKQEAgLTE0MywxMCArMTQyLDkgQEAKIH0KIAogCi1zdGF0aWMgaW50IGl4cDIwMDBfZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGl4cDIwMDBfZmxhc2hfZGF0YSAqaXhwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0OwogCXN0cnVjdCBpeHAyMDAwX2ZsYXNoX2luZm8gKmluZm87CkBAIC0xNzcsNyArMTc1LDcgQEAKIAl9CiAJbWVtemVybyhpbmZvLCBzaXplb2Yoc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjQ4LDI1ICsyNDYsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwMjAwMF9mbGFzaF9yZW1vdmUoX2Rldik7CisJaXhwMjAwMF9mbGFzaF9yZW1vdmUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDIwMDAtRmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwMjAwMF9mbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9ICZpeHAyMDAwX2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gJml4cDIwMDBfZmxhc2hfcmVtb3ZlCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIklYUDIwMDAtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHAyMDAwX2ZsYXNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHAyMDAwX2ZsYXNoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwMjAwMF9mbGFzaF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDIwMDBfZmxhc2hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpeHAyMDAwX2ZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKaW5kZXggNTZiM2EzNTUuLmE1OWY4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwpAQCAtOTksMTMgKzk5LDEyIEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHA0eHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCXN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYoIWluZm8pCiAJCXJldHVybiAwOwpAQCAtMTMwLDkgKzEyOSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGl4cDR4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8gKmluZm87CiAJaW50IGVyciA9IC0xOwpAQCAtMTUzLDcgKzE1MSw3IEBACiAJfQogCW1lbXplcm8oaW5mbywgc2l6ZW9mKHN0cnVjdCBpeHA0eHhfZmxhc2hfaW5mbykpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qCiAJICogVGVsbCB0aGUgTVREIGxheWVyIHdlJ3JlIG5vdCAxOjEgbWFwcGVkIHNvIHRoYXQgaXQgZG9lcwpAQCAtMjE0LDI1ICsyMTIsMjYgQEAKIAlyZXR1cm4gMDsKIAogRXJyb3I6Ci0JaXhwNHh4X2ZsYXNoX3JlbW92ZShfZGV2KTsKKwlpeHA0eHhfZmxhc2hfcmVtb3ZlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGl4cDR4eF9mbGFzaF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIklYUDRYWC1GbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpeHA0eHhfZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHA0eHhfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHA0eHhfZmxhc2hfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJJWFA0WFgtRmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpeHA0eHhfZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXhwNHh4X2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwNHh4X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCBmZDNiNGE1Li40MThhZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC03MCwxMSArNzAsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBmbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBvbWFwZmxhc2hfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwpAQCAtMTE5LDcgKzExOCw3IEBACiAjZW5kaWYKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiAwOwogCkBAIC0xMzMsMTIgKzEzMiwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcGZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJc3RydWN0IG9tYXBmbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAoaW5mbykgewogCQlpZiAoaW5mby0+cGFydHMpIHsKQEAgLTE1NSwyMSArMTUzLDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvbWFwZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCT0gIm9tYXBmbGFzaCIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBmbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gb21hcGZsYXNoX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChvbWFwZmxhc2hfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJvbWFwZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb21hcGZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb21hcGZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvbWFwZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKaW5kZXggYTAyZWVkOS4uNWQzYzc1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYwpAQCAtNTYsOSArNTYsOSBAQAogICogZGV2aWNlIHByaXZhdGUgZGF0YSB0byBzdHJ1Y3QgcGxhdHJhbV9pbmZvIGNvbnZlcnNpb24KICovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBsYXRyYW1faW5mbyAqdG9fcGxhdHJhbV9pbmZvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gKHN0cnVjdCBwbGF0cmFtX2luZm8gKilwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogfQogCiAvKiBwbGF0cmFtX3NldHJ3CkBAIC04MywxMyArODMsMTMgQEAKICAqIGNhbGxlZCB0byByZW1vdmUgdGhlIGRldmljZSBmcm9tIHRoZSBkcml2ZXIncyBjb250cm9sCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcGxhdHJhbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdHJhbV9pbmZvICppbmZvID0gdG9fcGxhdHJhbV9pbmZvKGRldik7CisJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbyA9IHRvX3BsYXRyYW1faW5mbyhwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCi0JZGV2X2RiZyhkZXYsICJyZW1vdmluZyBkZXZpY2VcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInJlbW92aW5nIGRldmljZVxuIik7CiAKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKQEAgLTEzMCw2MSArMTMwLDYwIEBACiAgKiBkcml2ZXIgaXMgZm91bmQuCiAqLwogCi1zdGF0aWMgaW50IHBsYXRyYW1fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBwbGF0cmFtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbQkqcGRhdGE7CiAJc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgZXJyID0gMDsKIAotCWRldl9kYmcoZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicHJvYmUgZW50ZXJlZFxuIik7CiAKLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKKwlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkXG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAogCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAotCWluZm8tPmRldiA9IGRldjsKKwlpbmZvLT5kZXYgPSAmcGRldi0+ZGV2OwogCWluZm8tPnBkYXRhID0gcGRhdGE7CiAKIAkvKiBnZXQgdGhlIHJlc291cmNlIGZvciB0aGUgbWVtb3J5IG1hcHBpbmcgKi8KIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZCwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJubyBtZW1vcnkgcmVzb3VyY2Ugc3BlY2lmaWVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIHNwZWNpZmllZFxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KIAotCWRldl9kYmcoZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZ290IHBsYXRmb3JtIHJlc291cmNlICVwICgweCVseClcbiIsIHJlcywgcmVzLT5zdGFydCk7CiAKIAkvKiBzZXR1cCBtYXAgcGFyYW1ldGVycyAqLwogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkgKyAxOwotCWluZm8tPm1hcC5uYW1lID0gcGRhdGEtPm1hcG5hbWUgIT0gTlVMTCA/IHBkYXRhLT5tYXBuYW1lIDogKGNoYXIgKilwZC0+bmFtZTsKKwlpbmZvLT5tYXAubmFtZSA9IHBkYXRhLT5tYXBuYW1lICE9IE5VTEwgPyBwZGF0YS0+bWFwbmFtZSA6IChjaGFyICopcGRldi0+bmFtZTsKIAlpbmZvLT5tYXAuYmFua3dpZHRoID0gcGRhdGEtPmJhbmt3aWR0aDsKIAogCS8qIHJlZ2lzdGVyIG91ciB1c2FnZSBvZiB0aGUgbWVtb3J5IGFyZWEgKi8KIAotCWluZm8tPmFyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgaW5mby0+bWFwLnNpemUsIHBkLT5uYW1lKTsKKwlpbmZvLT5hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplLCBwZGV2LT5uYW1lKTsKIAlpZiAoaW5mby0+YXJlYSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CkBAIC0xOTIsMjMgKzE5MSwyMyBAQAogCS8qIHJlbWFwIHRoZSBtZW1vcnkgYXJlYSAqLwogCiAJaW5mby0+bWFwLnZpcnQgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplKTsKLQlkZXZfZGJnKGRldiwgInZpcnQgJXAsICVsdSBieXRlc1xuIiwgaW5mby0+bWFwLnZpcnQsIGluZm8tPm1hcC5zaXplKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ2aXJ0ICVwLCAlbHUgYnl0ZXNcbiIsIGluZm8tPm1hcC52aXJ0LCBpbmZvLT5tYXAuc2l6ZSk7CiAKIAlpZiAoaW5mby0+bWFwLnZpcnQgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlvcmVtYXAoKSByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKIAlzaW1wbGVfbWFwX2luaXQoJmluZm8tPm1hcCk7CiAKLQlkZXZfZGJnKGRldiwgImluaXRpYWxpc2VkIG1hcCwgcHJvYmluZyBmb3IgbXRkXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0aWFsaXNlZCBtYXAsIHByb2JpbmcgZm9yIG10ZFxuIik7CiAKIAkvKiBwcm9iZSBmb3IgdGhlIHJpZ2h0IG10ZCBtYXAgZHJpdmVyICovCiAKIAlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUoIm1hcF9yYW0iICwgJmluZm8tPm1hcCk7CiAJaWYgKGluZm8tPm10ZCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIGZvciBtYXBfcmFtXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQpAQCAtMjM3LDI3ICsyMzYsMjggQEAKICNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KIAogCWlmIChhZGRfbXRkX2RldmljZShpbmZvLT5tdGQpKSB7Ci0JCWRldl9lcnIoZGV2LCAiYWRkX210ZF9kZXZpY2UoKSBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhZGRfbXRkX2RldmljZSgpIGZhaWxlZFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJfQogCi0JZGV2X2luZm8oZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmVnaXN0ZXJlZCBtdGQgZGV2aWNlXG4iKTsKIAlyZXR1cm4gZXJyOwogCiAgZXhpdF9mcmVlOgotCXBsYXRyYW1fcmVtb3ZlKGRldik7CisJcGxhdHJhbV9yZW1vdmUocGRldik7CiAgZXhpdF9lcnJvcjoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBkZXZpY2UgZHJpdmVyIGluZm8gKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBsYXRyYW1fZHJpdmVyID0gewotCS5uYW1lCQk9ICJtdGQtcmFtIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbGF0cmFtX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcGxhdHJhbV9wcm9iZSwKIAkucmVtb3ZlCQk9IHBsYXRyYW1fcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtdGQtcmFtIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qIG1vZHVsZSBpbml0L2V4aXQgKi8KQEAgLTI2NSwxMiArMjY1LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBwbGF0cmFtX2luaXQodm9pZCkKIHsKIAlwcmludGsoIkdlbmVyaWMgcGxhdGZvcm0gUkFNIE1URCwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZwbGF0cmFtX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcGxhdHJhbV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRyYW1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwbGF0cmFtX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggOWU4YmIxNy4uNWNlZmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0zNTYsOSArMzU2LDggQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9tdGRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHM7CiAJY29uc3QgY2hhciAqcGFydF90eXBlID0gTlVMTDsKQEAgLTQwMiwyOCArNDAxLDI4IEBACiAKIAlpbmZvLT5ucl9wYXJ0cyA9IG5yX3BhcnRzOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAJZXJyID0gMDsKIAogIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBzYTExMDBfbXRkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJc2ExMTAwX2Rlc3Ryb3koaW5mbywgcGxhdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzYTExMDBfbXRkX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9tdGRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChpbmZvKQpAQCAtNDMyLDE3ICs0MzEsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9tdGRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTAwX210ZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzYTExMDBfbXRkX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNhMTEwMF9tdGRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYV9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CiB9CkBAIC00NTIsMjQgKzQ1MSwyNSBAQAogI2RlZmluZSBzYTExMDBfbXRkX3NodXRkb3duIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTAwX210ZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImZsYXNoIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMF9tdGRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfbXRkX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aoc2ExMTAwX210ZF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2ExMTAwX210ZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwX210ZF9yZXN1bWUsCiAJLnNodXRkb3duCT0gc2ExMTAwX210ZF9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBfbXRkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMTAwX210ZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMF9tdGRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzYTExMDBfbXRkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwppbmRleCA5N2U5Yjc4Li5kMjA5MjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwpAQCAtMTI1LDE0ICsxMjUsMTQgQEAKIAlyZXR1cm4gczNjMjQxMF9uYW5kX210ZF90b291cnMobXRkKS0+aW5mbzsKIH0KIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqdG9fbmFuZF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKnRvX25hbmRfaW5mbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqdG9fbmFuZF9wbGF0KHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICp0b19uYW5kX3BsYXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPnBsYXRmb3JtX2RhdGE7CisJcmV0dXJuIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiB9CiAKIC8qIHRpbWluZyBjYWxjdWxhdGlvbnMgKi8KQEAgLTE2NSw5ICsxNjUsOSBAQAogLyogY29udHJvbGxlciBzZXR1cCAqLwogCiBzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9pbml0aHcoc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldikKKwkJCSAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQoZGV2KTsKKwlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgY2xrcmF0ZSA9IGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOwogCWludCB0YWNscywgdHdycGgwLCB0d3JwaDE7CiAJdW5zaWduZWQgbG9uZyBjZmc7CkBAIC00MzAsMTEgKzQzMCwxMSBAQAogCiAvKiBkZXZpY2UgbWFuYWdlbWVudCBmdW5jdGlvbnMgKi8KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHRvX25hbmRfaW5mbyhkZXYpOworCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHRvX25hbmRfaW5mbyhwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC01NjIsMTAgKzU2Miw5IEBACiAgKiBuYW5kIGxheWVyIHRvIGxvb2sgZm9yIGRldmljZXMKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGlzX3MzYzI0NDApCitzdGF0aWMgaW50IHMzYzI0eHhfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgaXNfczNjMjQ0MCkKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChkZXYpOworCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQocGRldik7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvOwogCXN0cnVjdCBzM2MyNDEwX25hbmRfbXRkICpubXRkOwogCXN0cnVjdCBzM2MyNDEwX25hbmRfc2V0ICpzZXRzOwpAQCAtNTc1LDI2ICs1NzQsMjYgQEAKIAlpbnQgbnJfc2V0czsKIAlpbnQgc2V0bm87CiAKLQlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX3Byb2JlKCVwKVxuIiwgZGV2KTsKKwlwcl9kZWJ1ZygiczNjMjQxMF9uYW5kX3Byb2JlKCVwKVxuIiwgcGRldik7CiAKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IGZvciBmbGFzaCBpbmZvXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAogCW1lbXplcm8oaW5mbywgc2l6ZW9mKCppbmZvKSk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaW5mby0+Y29udHJvbGxlci5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5jb250cm9sbGVyLndxKTsKIAogCS8qIGdldCB0aGUgY2xvY2sgc291cmNlIGFuZCBlbmFibGUgaXQgKi8KIAotCWluZm8tPmNsayA9IGNsa19nZXQoZGV2LCAibmFuZCIpOworCWluZm8tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5hbmQiKTsKIAlpZiAoSVNfRVJSKGluZm8tPmNsaykpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2siKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KQEAgLTYxMSwyNyArNjEwLDI3IEBACiAJaW5mby0+YXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKIAogCWlmIChpbmZvLT5hcmVhID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOwogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQogCi0JaW5mby0+ZGV2aWNlICAgICA9IGRldjsKKwlpbmZvLT5kZXZpY2UgICAgID0gJnBkZXYtPmRldjsKIAlpbmZvLT5wbGF0Zm9ybSAgID0gcGxhdDsKIAlpbmZvLT5yZWdzICAgICAgID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKIAlpbmZvLT5pc19zM2MyNDQwID0gaXNfczNjMjQ0MDsKIAogCWlmIChpbmZvLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVzZXJ2ZSByZWdpc3RlciByZWdpb25cbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJtYXBwZWQgcmVnaXN0ZXJzIGF0ICVwXG4iLCBpbmZvLT5yZWdzKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJtYXBwZWQgcmVnaXN0ZXJzIGF0ICVwXG4iLCBpbmZvLT5yZWdzKTsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGhhcmR3YXJlICovCiAKLQllcnIgPSBzM2MyNDEwX25hbmRfaW5pdGh3KGluZm8sIGRldik7CisJZXJyID0gczNjMjQxMF9uYW5kX2luaXRodyhpbmZvLCBwZGV2KTsKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gZXhpdF9lcnJvcjsKIApAQCAtNjQ1LDcgKzY0NCw3IEBACiAJc2l6ZSA9IG5yX3NldHMgKiBzaXplb2YoKmluZm8tPm10ZHMpOwogCWluZm8tPm10ZHMgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChpbmZvLT5tdGRzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXRkIHN0b3JhZ2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgbXRkIHN0b3JhZ2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZXJyb3I7CiAJfQpAQCAtNjc3LDcgKzY3Niw3IEBACiAJcmV0dXJuIDA7CiAKICBleGl0X2Vycm9yOgotCXMzYzI0MTBfbmFuZF9yZW1vdmUoZGV2KTsKKwlzM2MyNDEwX25hbmRfcmVtb3ZlKHBkZXYpOwogCiAJaWYgKGVyciA9PSAwKQogCQllcnIgPSAtRUlOVkFMOwpAQCAtNjg2LDQ0ICs2ODUsNDYgQEAKIAogLyogZHJpdmVyIGRldmljZSByZWdpc3RyYXRpb24gKi8KIAotc3RhdGljIGludCBzM2MyNDEwX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X25hbmRfcHJvYmUoZGV2LCAwKTsKIH0KIAotc3RhdGljIGludCBzM2MyNDQwX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDQwX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBzM2MyNHh4X25hbmRfcHJvYmUoZGV2LCAxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTBfbmFuZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtbmFuZCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC1uYW5kIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDQwX25hbmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDQwLW5hbmQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0NDBfbmFuZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0NDAtbmFuZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX25hbmRfaW5pdCh2b2lkKQogewogCXByaW50aygiUzNDMjRYWCBOQU5EIERyaXZlciwgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKIAotCWRyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX25hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHMzYzI0MTBfbmFuZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfbmFuZF9kcml2ZXIpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzM2MyNDEwX25hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA1YzY5ZDU3Li5lYmQ3MzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTgxMiw3ICs4MTIsNyBAQAogCXRyaXN0YXRlICJTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKLQlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiAoQVJNIHx8IFJFRFdPT0RfNSB8fCBSRURXT09EXzYgfHwgTTMyUiB8fCBTVVBFUkgpCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgKEFSTSB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82IHx8IE0zMlIgfHwgU1VQRVJIIHx8IFNPQ19BVTFYMDApCiAJaGVscAogCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgU01DJ3MgOTF4IHNlcmllcyBvZiBFdGhlcm5ldCBjaGlwc2V0cywKIAkgIGluY2x1ZGluZyB0aGUgU01DOTFDOTQgYW5kIHRoZSBTTUM5MUMxMTEuIFNheSBZIGlmIHlvdSB3YW50IGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggOGY0NjQyNy4uNDlmYTFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMjcwNyw3ICsyNzA3LDcgQEAKIAogCWlmIChqID09IGVudHJ5X2NvdW50KSB7CiAJCWJwLT5mbGFzaF9pbmZvID0gTlVMTDsKLQkJcHJpbnRrKEtFUk5fQUxFUlQgIlVua25vd24gZmxhc2gvRUVQUk9NIHR5cGUuXG4iKTsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJVbmtub3duIGZsYXNoL0VFUFJPTSB0eXBlLlxuIik7CiAJCXJjID0gLUVOT0RFVjsKIAl9CiAKQEAgLTM5MDMsNiArMzkwMyw4IEBACiAKIAlwa3Rfc2l6ZSA9IDE1MTQ7CiAJc2tiID0gZGV2X2FsbG9jX3NrYihwa3Rfc2l6ZSk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOwogCXBhY2tldCA9IHNrYl9wdXQoc2tiLCBwa3Rfc2l6ZSk7CiAJbWVtY3B5KHBhY2tldCwgYnAtPm1hY19hZGRyLCA2KTsKIAltZW1zZXQocGFja2V0ICsgNiwgMHgwLCA4KTsKQEAgLTQ3OTgsMTEgKzQ4MDAsNyBAQAogICAJc3RydWN0IGJueDIgKmJwID0gZGV2LT5wcml2OwogCWludCByYzsKIAotCWlmIChlZXByb20tPm9mZnNldCA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJZWVwcm9tLT5sZW4gPSBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSAtIGVlcHJvbS0+b2Zmc2V0OworCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9nZXRfZWVwcm9tICovCiAKIAlyYyA9IGJueDJfbnZyYW1fcmVhZChicCwgZWVwcm9tLT5vZmZzZXQsIGVlYnVmLCBlZXByb20tPmxlbik7CiAKQEAgLTQ4MTYsMTEgKzQ4MTQsNyBAQAogICAJc3RydWN0IGJueDIgKmJwID0gZGV2LT5wcml2OwogCWludCByYzsKIAotCWlmIChlZXByb20tPm9mZnNldCA+IGJwLT5mbGFzaF9pbmZvLT50b3RhbF9zaXplKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICgoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbikgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJZWVwcm9tLT5sZW4gPSBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSAtIGVlcHJvbS0+b2Zmc2V0OworCS8qIHBhcmFtZXRlcnMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gZXRodG9vbF9zZXRfZWVwcm9tICovCiAKIAlyYyA9IGJueDJfbnZyYW1fd3JpdGUoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAwZDMzYTkzLi4wMzgwNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTM5OCwxMyArMzk4LDE5IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZGVwY2FfaXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkZXBjYV9pc2FfZHJpdmVyID0gewotCS5uYW1lICAgPSBkZXBjYV9zdHJpbmcsCi0JLmJ1cyAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBpbnQgX19kZXZleGl0IGRlcGNhX2lzYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gZGVwY2FfZGV2aWNlX3JlbW92ZSgmcGRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGVwY2FfaXNhX2RyaXZlciA9IHsKIAkucHJvYmUgID0gZGVwY2FfaXNhX3Byb2JlLAotCS5yZW1vdmUgPSBfX2RldmV4aXRfcChkZXBjYV9kZXZpY2VfcmVtb3ZlKSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AoZGVwY2FfaXNhX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgICA9IGRlcGNhX3N0cmluZywKKwl9LAogfTsKIAkKIC8qCkBAIC0xNTI1LDcgKzE1MzEsNyBAQAogCXJldHVybiBhZGFwdGVyOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGRlcGNhX2lzYV9wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwpAQCAtMTUzMyw3ICsxNTM5LDcgQEAKIAllbnVtIGRlcGNhX3R5cGUgYWRhcHRlciA9IHVua25vd247CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpb2FkZHIgPSAodV9sb25nKSBkZXZpY2UtPnBsYXRmb3JtX2RhdGE7CisJaW9hZGRyID0gKHVfbG9uZykgZGV2aWNlLT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmICgoc3RhdHVzID0gZGVwY2FfY29tbW9uX2luaXQgKGlvYWRkciwgJmRldikpKQogCQlnb3RvIG91dDsKQEAgLTE1NTMsNyArMTU1OSw3IEBACiAJbHAtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWxwLT5tZW1fc3RhcnQgPSBtZW1fc3RhcnQ7CiAJCi0JaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgZGV2aWNlKSkpCisJaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgJmRldmljZS0+ZGV2KSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAJCiAJcmV0dXJuIDA7CkBAIC0yMDgyLDcgKzIwODgsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVyciB8PSBlaXNhX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2Vpc2FfZHJpdmVyKTsKICNlbmRpZgotCWVyciB8PSBkcml2ZXJfcmVnaXN0ZXIgKCZkZXBjYV9pc2FfZHJpdmVyKTsKKwllcnIgfD0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAJZGVwY2FfcGxhdGZvcm1fcHJvYmUgKCk7CiAJCiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0yMDk3LDcgKzIxMDMsNyBAQAogI2lmZGVmIENPTkZJR19FSVNBCiAgICAgICAgIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIgKCZkZXBjYV9laXNhX2RyaXZlcik7CiAjZW5kaWYKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CiAKIAlmb3IgKGkgPSAwOyBkZXBjYV9pb19wb3J0c1tpXS5pb2Jhc2U7IGkrKykgewogCQlpZiAoZGVwY2FfaW9fcG9ydHNbaV0uZGV2aWNlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IGY4YzliY2QuLjI0OTk2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIH0gYm9hcmRfaW5mb190OwogCiAvKiBmdW5jdGlvbiBkZWNsYXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgaW50IGRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOworc3RhdGljIGludCBkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgZG05MDAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGRtOTAwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkbTkwMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKQEAgLTM3OCw5ICszNzgsOCBAQAogICogU2VhcmNoIERNOTAwMCBib2FyZCwgYWxsb2NhdGUgc3BhY2UgYW5kIHJlZ2lzdGVyIGl0CiAgKi8KIHN0YXRpYyBpbnQKLWRtOTAwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGJvYXJkX2luZm8gKmRiOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtMzk4LDcgKzM5Nyw3IEBACiAJfQogCiAJU0VUX01PRFVMRV9PV05FUihuZGV2KTsKLQlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOwogCiAJUFJJTlRLMigiZG05MDAwX3Byb2JlKCkiKTsKIApAQCAtNTY5LDcgKzU2OCw3IEBACiAJCXByaW50aygiJXM6IEludmFsaWQgZXRoZXJuZXQgTUFDIGFkZHJlc3MuICBQbGVhc2UgIgogCQkgICAgICAgInNldCB1c2luZyBpZmNvbmZpZ1xuIiwgbmRldi0+bmFtZSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKIAlpZiAocmV0ID09IDApIHsKQEAgLTExNDAsOSArMTEzOSw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2RtOTAwMF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChuZGV2KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CkBAIC0xMTU0LDkgKzExNTMsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJYm9hcmRfaW5mb190ICpkYiA9IChib2FyZF9pbmZvX3QgKikgbmRldi0+cHJpdjsKIAogCWlmIChuZGV2KSB7CkBAIC0xMTcyLDEyICsxMTcxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWRtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2RtOTAwMF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJZG05MDAwX3JlbGVhc2VfYm9hcmQocGRldiwgKGJvYXJkX2luZm9fdCAqKSBuZGV2LT5wcml2KTsKQEAgLTExODgsMTMgKzExODYsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7Ci0JLm5hbWUgICAgPSAiZG05MDAwIiwKLQkuYnVzICAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRtOTAwMF9kcml2ZXIgPSB7CiAJLnByb2JlICAgPSBkbTkwMDBfcHJvYmUsCiAJLnJlbW92ZSAgPSBkbTkwMDBfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZCA9IGRtOTAwMF9kcnZfc3VzcGVuZCwKIAkucmVzdW1lICA9IGRtOTAwMF9kcnZfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRtOTAwMCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xMjAyLDEzICsxMjAxLDEzIEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgRXRoZXJuZXQgRHJpdmVyXG4iLCBDQVJETkFNRSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsJLyogc2VhcmNoIGJvYXJkIGFuZCByZWdpc3RlciAqLworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwkvKiBzZWFyY2ggYm9hcmQgYW5kIHJlZ2lzdGVyICovCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogZG05MDAwX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZG05MDAwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChkbTkwMDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDIyYWVjNmUuLjUyNTYyNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC04MCw3ICs4MCw3IEBACiAgKgkJCSAgIGludG8gbnZfY2xvc2UsIG90aGVyd2lzZSByZWVuYWJsaW5nIGZvciB3b2wgY2FuCiAgKgkJCSAgIGNhdXNlIERNQSB0byBrZnJlZSdkIG1lbW9yeS4KICAqCTAuMzE6IDE0IE5vdiAyMDA0OiBldGh0b29sIHN1cHBvcnQgZm9yIGdldHRpbmcvc2V0dGluZyBsaW5rCi0gKgkgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0aWVzLgorICoJCQkgICBjYXBhYmlsaXRpZXMuCiAgKgkwLjMyOiAxNiBBcHIgMjAwNTogUlhfRVJST1I0IGhhbmRsaW5nIGFkZGVkLgogICoJMC4zMzogMTYgTWF5IDIwMDU6IFN1cHBvcnQgZm9yIE1DUDUxIGFkZGVkLgogICoJMC4zNDogMTggSnVuIDIwMDU6IEFkZCBERVZfTkVFRF9MSU5LVElNRVIgdG8gYWxsIG5Gb3JjZSBuaWNzLgpAQCAtODksMTQgKzg5LDE3IEBACiAgKgkwLjM3OiAxMCBKdWwgMjAwNTogQWRkaXRpb25hbCBldGh0b29sIHN1cHBvcnQsIGNsZWFudXAgb2YgcGNpIGlkIGxpc3QKICAqCTAuMzg6IDE2IEp1bCAyMDA1OiB0eCBpcnEgcmV3cml0ZTogVXNlIGdsb2JhbCBmbGFncyBpbnN0ZWFkIG9mCiAgKgkJCSAgIHBlci1wYWNrZXQgZmxhZ3MuCi0gKiAgICAgIDAuMzk6IDE4IEp1bCAyMDA1OiBBZGQgNjRiaXQgZGVzY3JpcHRvciBzdXBwb3J0LgotICogICAgICAwLjQwOiAxOSBKdWwgMjAwNTogQWRkIHN1cHBvcnQgZm9yIG1hYyBhZGRyZXNzIGNoYW5nZS4KLSAqICAgICAgMC40MTogMzAgSnVsIDIwMDU6IFdyaXRlIGJhY2sgb3JpZ2luYWwgTUFDIGluIG52X2Nsb3NlIGluc3RlYWQKKyAqCTAuMzk6IDE4IEp1bCAyMDA1OiBBZGQgNjRiaXQgZGVzY3JpcHRvciBzdXBwb3J0LgorICoJMC40MDogMTkgSnVsIDIwMDU6IEFkZCBzdXBwb3J0IGZvciBtYWMgYWRkcmVzcyBjaGFuZ2UuCisgKgkwLjQxOiAzMCBKdWwgMjAwNTogV3JpdGUgYmFjayBvcmlnaW5hbCBNQUMgaW4gbnZfY2xvc2UgaW5zdGVhZAogICoJCQkgICBvZiBudl9yZW1vdmUKLSAqICAgICAgMC40MjogMDYgQXVnIDIwMDU6IEZpeCBsYWNrIG9mIGxpbmsgc3BlZWQgaW5pdGlhbGl6YXRpb24KKyAqCTAuNDI6IDA2IEF1ZyAyMDA1OiBGaXggbGFjayBvZiBsaW5rIHNwZWVkIGluaXRpYWxpemF0aW9uCiAgKgkJCSAgIGluIHRoZSBzZWNvbmQgKGFuZCBsYXRlcikgbnZfb3BlbiBjYWxsCi0gKiAgICAgIDAuNDM6IDEwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgdHggY2hlY2tzdW0uCi0gKiAgICAgIDAuNDQ6IDIwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3Igc2NhdHRlciBnYXRoZXIgYW5kIHNlZ21lbnRhdGlvbi4KKyAqCTAuNDM6IDEwIEF1ZyAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgdHggY2hlY2tzdW0uCisgKgkwLjQ0OiAyMCBBdWcgMjAwNTogQWRkIHN1cHBvcnQgZm9yIHNjYXR0ZXIgZ2F0aGVyIGFuZCBzZWdtZW50YXRpb24uCisgKgkwLjQ1OiAxOCBTZXAgMjAwNTogUmVtb3ZlIG52X3N0b3Avc3RhcnRfcnggZnJvbSBldmVyeSBsaW5rIGNoZWNrCisgKgkwLjQ2OiAyMCBPY3QgMjAwNTogQWRkIGlycSBvcHRpbWl6YXRpb24gbW9kZXMuCisgKgkwLjQ3OiAyNiBPY3QgMjAwNTogQWRkIHBoeWFkZHIgMCBpbiBwaHkgc2Nhbi4KICAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9uIHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCkBAIC0xMDgsNyArMTExLDcgQEAKICAqIERFVl9ORUVEX1RJTUVSSVJRIHdpbGwgbm90IGhhcm0geW91IG9uIHNhbmUgaGFyZHdhcmUsIG9ubHkgZ2VuZXJhdGluZyBhIGZldwogICogc3VwZXJmbHVvdXMgdGltZXIgaW50ZXJydXB0cyBmcm9tIHRoZSBuaWMuCiAgKi8KLSNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjQ0IgorI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNDciCiAjZGVmaW5lIERSVl9OQU1FCQkJImZvcmNlZGV0aCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTYzLDcgKzE2Niw4IEBACiAjZGVmaW5lIE5WUkVHX0lSUV9MSU5LCQkJMHgwMDQwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWF9FUlJPUgkJMHgwMDgwCiAjZGVmaW5lIE5WUkVHX0lSUV9UWDEJCQkweDAxMDAKLSNkZWZpbmUgTlZSRUdfSVJRTUFTS19XQU5URUQJCTB4MDBkZgorI2RlZmluZSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQJMHgwMGRmCisjZGVmaW5lIE5WUkVHX0lSUU1BU0tfQ1BVCQkweDAwNDAKIAogI2RlZmluZSBOVlJFR19JUlFfVU5LTk9XTgkofihOVlJFR19JUlFfUlhfRVJST1J8TlZSRUdfSVJRX1JYfE5WUkVHX0lSUV9SWF9OT0JVRnxOVlJFR19JUlFfVFhfRVJSfCBcCiAJCQkJCU5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1RYX0VSUk9SfCBcCkBAIC0xNzcsNyArMTgxLDggQEAKICAqIE5WUkVHX1BPTExfREVGQVVMVD05NyB3b3VsZCByZXN1bHQgaW4gYW4gaW50ZXJ2YWwgbGVuZ3RoIG9mIDEgbXMKICAqLwogCU52UmVnUG9sbGluZ0ludGVydmFsID0gMHgwMGMsCi0jZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVAk5NzAKKyNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQJOTcwCisjZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9DUFUJMTMKIAlOdlJlZ01pc2MxID0gMHgwODAsCiAjZGVmaW5lIE5WUkVHX01JU0MxX0hECQkweDAyCiAjZGVmaW5lIE5WUkVHX01JU0MxX0ZPUkNFCTB4M2IwZjNjCkBAIC01MzgsNiArNTQzLDI1IEBACiAgKi8KIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNTsKIAorLyoKKyAqIE9wdGltaXphdGlvbiBjYW4gYmUgZWl0aGVyIHRocm91cHV0IG1vZGUgb3IgY3B1IG1vZGUKKyAqIAorICogVGhyb3VnaHB1dCBNb2RlOiBFdmVyeSB0eCBhbmQgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LgorICogQ1BVIE1vZGU6IEludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4KKyAqLworI2RlZmluZSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUIDAKKyNkZWZpbmUgTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVICAgICAgICAxCitzdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVDsKKworLyoKKyAqIFBvbGwgaW50ZXJ2YWwgZm9yIHRpbWVyIGlycQorICoKKyAqIFRoaXMgaW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZC4KKyAqIFRoZSBpcyB2YWx1ZSBpcyBkZXRlcm1pbmVkIGJ5IFsodGltZV9pbl9taWNyb19zZWNzICogMTAwKSAvICgyXjEwKV0KKyAqIE1pbiA9IDAsIGFuZCBNYXggPSA2NTUzNQorICovCitzdGF0aWMgaW50IHBvbGxfaW50ZXJ2YWwgPSAtMTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmVfcHJpdiAqZ2V0X252cHJpdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMyOCw2NyArMTM1Miw3MSBAQAogCQkJaWYgKCEoRmxhZ3MgJiBOVl9SWF9ERVNDUklQVE9SVkFMSUQpKQogCQkJCWdvdG8gbmV4dF9wa3Q7CiAKLQkJCWlmIChGbGFncyAmIE5WX1JYX01JU1NFREZSQU1FKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIChOVl9SWF9FUlJPUjF8TlZfUlhfRVJST1IyfE5WX1JYX0VSUk9SMykpIHsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikgewotCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9PVkVSRkxPVykgewotCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1I0KSB7Ci0JCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKLQkJCQlpZiAobGVuIDwgMCkgeworCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1IpIHsKKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9NSVNTRURGUkFNRSkgeworCQkJCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJfQotCQkJfQotCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzLiAqLwotCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgewotCQkJCWlmIChGbGFncyAmIE5WX1JYX1NVQlNUUkFDVDEpIHsKLQkJCQkJbGVuLS07CisJCQkJaWYgKEZsYWdzICYgKE5WX1JYX0VSUk9SMXxOVl9SWF9FUlJPUjJ8TlZfUlhfRVJST1IzKSkgeworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX0NSQ0VSUikgeworCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX09WRVJGTE9XKSB7CisJCQkJCW5wLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SNCkgeworCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOworCQkJCQlpZiAobGVuIDwgMCkgeworCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMuICovCisJCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgeworCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7CisJCQkJCQlsZW4tLTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICghKEZsYWdzICYgTlZfUlgyX0RFU0NSSVBUT1JWQUxJRCkpCiAJCQkJZ290byBuZXh0X3BrdDsKIAotCQkJaWYgKEZsYWdzICYgKE5WX1JYMl9FUlJPUjF8TlZfUlgyX0VSUk9SMnxOVl9SWDJfRVJST1IzKSkgewotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlgyX0NSQ0VSUikgewotCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfT1ZFUkZMT1cpIHsKLQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUjQpIHsKLQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOwotCQkJCWlmIChsZW4gPCAwKSB7CisJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKKwkJCQlpZiAoRmxhZ3MgJiAoTlZfUlgyX0VSUk9SMXxOVl9SWDJfRVJST1IyfE5WX1JYMl9FUlJPUjMpKSB7CiAJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQl9Ci0JCQl9Ci0JCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlgyX1NVQlNUUkFDVDEpIHsKLQkJCQkJbGVuLS07CisJCQkJaWYgKEZsYWdzICYgTlZfUlgyX0NSQ0VSUikgeworCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJfQorCQkJCWlmIChGbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgeworCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1I0KSB7CisJCQkJCWxlbiA9IG52X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7CisJCQkJCWlmIChsZW4gPCAwKSB7CisJCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCQl9CisJCQkJfQorCQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycyAqLworCQkJCWlmIChGbGFncyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7CisJCQkJCWlmIChGbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7CisJCQkJCQlsZW4tLTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIAkJCUZsYWdzICY9IE5WX1JYMl9DSEVDS1NVTU1BU0s7CkBAIC0xNjEyLDYgKzE2NDAsMTcgQEAKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIH0KIAorLyoqCisgKiBudl91cGRhdGVfbGlua3NwZWVkOiBTZXR1cCB0aGUgTUFDIGFjY29yZGluZyB0byB0aGUgbGluayBwYXJ0bmVyCisgKiBAZGV2OiBOZXR3b3JrIGRldmljZSB0byBiZSBjb25maWd1cmVkCisgKgorICogVGhlIGZ1bmN0aW9uIHF1ZXJpZXMgdGhlIFBIWSBhbmQgY2hlY2tzIGlmIHRoZXJlIGlzIGEgbGluayBwYXJ0bmVyLgorICogSWYgeWVzLCB0aGVuIGl0IHNldHMgdXAgdGhlIE1BQyBhY2NvcmRpbmdseS4gT3RoZXJ3aXNlLCB0aGUgTUFDIGlzCisgKiBzZXQgdG8gMTAgTUJpdCBIRC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZXJlIGlzIG5vIGxpbmsgcGFydG5lciBhbmQgMSBpZiB0aGVyZSBpcworICogYSBnb29kIGxpbmsgcGFydG5lci4KKyAqLwogc3RhdGljIGludCBudl91cGRhdGVfbGlua3NwZWVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE3NTEsMTMgKzE3OTAsMTEgQEAKIHN0YXRpYyB2b2lkIG52X2xpbmtjaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAobnZfdXBkYXRlX2xpbmtzcGVlZChkZXYpKSB7Ci0JCWlmIChuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKLQkJCW52X3N0b3BfcngoZGV2KTsKLQkJfSBlbHNlIHsKKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwLlxuIiwgZGV2LT5uYW1lKTsKKwkJCW52X3N0YXJ0X3J4KGRldik7CiAJCX0KLQkJbnZfc3RhcnRfcngoZGV2KTsKIAl9IGVsc2UgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwpAQCAtMTc5OSwyMiArMTgzNiwxOCBAQAogCQlpZiAoIShldmVudHMgJiBucC0+aXJxbWFzaykpCiAJCQlicmVhazsKIAotCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9UWDF8TlZSRUdfSVJRX1RYX09LfE5WUkVHX0lSUV9UWF9FUlJPUnxOVlJFR19JUlFfVFhfRVJSKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfdHhfZG9uZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQkKKwkJbnZfcnhfcHJvY2VzcyhkZXYpOworCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl90eF9kb25lKGRldik7CisJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKKwkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJfQotCi0JCWlmIChldmVudHMgJiAoTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUYpKSB7Ci0JCQludl9yeF9wcm9jZXNzKGRldik7Ci0JCQlpZiAobnZfYWxsb2NfcngoZGV2KSkgewotCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJCWlmICghbnAtPmluX3NodXRkb3duKQotCQkJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOwotCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQl9Ci0JCX0KLQorCQkKIAkJaWYgKGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCW52X2xpbmtfaXJxKGRldik7CkBAIC0yMjE2LDcgKzIyNDksMTQgQEAKIAl3cml0ZWwoTlZSRUdfUk5EU0VFRF9GT1JDRSB8IChpJk5WUkVHX1JORFNFRURfTUFTSyksIGJhc2UgKyBOdlJlZ1JhbmRvbVNlZWQpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDFfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWcxKTsKIAl3cml0ZWwoTlZSRUdfVU5LU0VUVVAyX1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnMik7Ci0Jd3JpdGVsKE5WUkVHX1BPTExfREVGQVVMVCwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwlpZiAocG9sbF9pbnRlcnZhbCA9PSAtMSkgeworCQlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCkKKwkJCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFRfVEhST1VHSFBVVCwgYmFzZSArIE52UmVnUG9sbGluZ0ludGVydmFsKTsKKwkJZWxzZQorCQkJd3JpdGVsKE5WUkVHX1BPTExfREVGQVVMVF9DUFUsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJfQorCWVsc2UKKwkJd3JpdGVsKHBvbGxfaW50ZXJ2YWwgJiAweEZGRkYsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CiAJd3JpdGVsKE5WUkVHX1VOS1NFVFVQNl9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzYpOwogCXdyaXRlbCgobnAtPnBoeWFkZHIgPDwgTlZSRUdfQURBUFRDVExfUEhZU0hJRlQpfE5WUkVHX0FEQVBUQ1RMX1BIWVZBTElEfE5WUkVHX0FEQVBUQ1RMX1JVTk5JTkcsCiAJCQliYXNlICsgTnZSZWdBZGFwdGVyQ29udHJvbCk7CkBAIC0yNTAxLDcgKzI1NDEsMTEgQEAKIAl9IGVsc2UgewogCQlucC0+dHhfZmxhZ3MgPSBOVl9UWDJfVkFMSUQ7CiAJfQotCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19XQU5URUQ7CisJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpCisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCWVsc2UKKwkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKKwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9USU1FUklSUSkKIAkJbnAtPmlycW1hc2sgfD0gTlZSRUdfSVJRX1RJTUVSOwogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9MSU5LVElNRVIpIHsKQEAgLTI1MTQsMTYgKzI1NTgsMTcgQEAKIAl9CiAKIAkvKiBmaW5kIGEgc3VpdGFibGUgcGh5ICovCi0JZm9yIChpID0gMTsgaSA8IDMyOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDw9IDMyOyBpKyspIHsKIAkJaW50IGlkMSwgaWQyOworCQlpbnQgcGh5YWRkciA9IGkgJiAweDFGOwogCiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJaWQxID0gbWlpX3J3KGRldiwgaSwgTUlJX1BIWVNJRDEsIE1JSV9SRUFEKTsKKwkJaWQxID0gbWlpX3J3KGRldiwgcGh5YWRkciwgTUlJX1BIWVNJRDEsIE1JSV9SRUFEKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCWlmIChpZDEgPCAwIHx8IGlkMSA9PSAweGZmZmYpCiAJCQljb250aW51ZTsKIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwotCQlpZDIgPSBtaWlfcncoZGV2LCBpLCBNSUlfUEhZU0lEMiwgTUlJX1JFQUQpOworCQlpZDIgPSBtaWlfcncoZGV2LCBwaHlhZGRyLCBNSUlfUEhZU0lEMiwgTUlJX1JFQUQpOwogCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJaWYgKGlkMiA8IDAgfHwgaWQyID09IDB4ZmZmZikKIAkJCWNvbnRpbnVlOwpAQCAtMjUzMSwyMyArMjU3NiwxOSBAQAogCQlpZDEgPSAoaWQxICYgUEhZSUQxX09VSV9NQVNLKSA8PCBQSFlJRDFfT1VJX1NIRlQ7CiAJCWlkMiA9IChpZDIgJiBQSFlJRDJfT1VJX01BU0spID4+IFBIWUlEMl9PVUlfU0hGVDsKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogb3BlbjogRm91bmQgUEhZICUwNHg6JTA0eCBhdCBhZGRyZXNzICVkLlxuIiwKLQkJCQlwY2lfbmFtZShwY2lfZGV2KSwgaWQxLCBpZDIsIGkpOwotCQlucC0+cGh5YWRkciA9IGk7CisJCQlwY2lfbmFtZShwY2lfZGV2KSwgaWQxLCBpZDIsIHBoeWFkZHIpOworCQlucC0+cGh5YWRkciA9IHBoeWFkZHI7CiAJCW5wLT5waHlfb3VpID0gaWQxIHwgaWQyOwogCQlicmVhazsKIAl9Ci0JaWYgKGkgPT0gMzIpIHsKLQkJLyogUEhZIGluIGlzb2xhdGUgbW9kZT8gTm8gcGh5IGF0dGFjaGVkIGFuZCB1c2VyIHdhbnRzIHRvCi0JCSAqIHRlc3QgbG9vcGJhY2s/IFZlcnkgb2RkLCBidXQgY2FuIGJlIGNvcnJlY3QuCi0JCSAqLworCWlmIChpID09IDMzKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBvcGVuOiBDb3VsZCBub3QgZmluZCBhIHZhbGlkIFBIWS5cbiIsCi0JCQkJcGNpX25hbWUocGNpX2RldikpOworCQkgICAgICAgcGNpX25hbWUocGNpX2RldikpOworCQlnb3RvIG91dF9mcmVlcmluZzsKIAl9Ci0KLQlpZiAoaSAhPSAzMikgewotCQkvKiByZXNldCBpdCAqLwotCQlwaHlfaW5pdChkZXYpOwotCX0KKwkKKwkvKiByZXNldCBpdCAqLworCXBoeV9pbml0KGRldik7CiAKIAkvKiBzZXQgZGVmYXVsdCBsaW5rIHNwZWVkIHNldHRpbmdzICovCiAJbnAtPmxpbmtzcGVlZCA9IE5WUkVHX0xJTktTUEVFRF9GT1JDRXxOVlJFR19MSU5LU1BFRURfMTA7CkBAIC0yNjg5LDYgKzI3MzAsMTAgQEAKIAogbW9kdWxlX3BhcmFtKG1heF9pbnRlcnJ1cHRfd29yaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAiZm9yY2VkZXRoIG1heGltdW0gZXZlbnRzIGhhbmRsZWQgcGVyIGludGVycnVwdCIpOworbW9kdWxlX3BhcmFtKG9wdGltaXphdGlvbl9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4iKTsKK21vZHVsZV9wYXJhbShwb2xsX2ludGVydmFsLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhwb2xsX2ludGVydmFsLCAiSW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgdGltZXIgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldLiBNaW4gaXMgMCBhbmQgTWF4IGlzIDY1NTM1LiIpOwogCiBNT0RVTEVfQVVUSE9SKCJNYW5mcmVkIFNwcmF1bCA8bWFuZnJlZEBjb2xvcmZ1bGxpZmUuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJSZXZlcnNlIEVuZ2luZWVyZWQgbkZvcmNlIGV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggOTM0MmQ1Yi4uZjVkNDlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKaW5kZXggYTk0MGI5Ni4uZTY3YjFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pbW1hcF9jcG0yLmg+CiAjaW5jbHVkZSA8YXNtL21wYzgyNjAuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKaW5kZXggNWVmNGU4NC4uMmU4ZjQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwppbmRleCBkOGM2ZTljLi5hMzg5N2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggNTRkMjk0YS4uZTNhMzI5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtMTI2LDggKzEyNiw4IEBACiBzdGF0aWMgdm9pZCBhZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOworc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyB2b2lkIGZyZWVfc2tiX3Jlc291cmNlcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9zZXRfaGFzaF9mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYWRkcik7CkBAIC0xNTYsMTIgKzE1NiwxMSBAQAogCiAvKiBTZXQgdXAgdGhlIGV0aGVybmV0IGRldmljZSBzdHJ1Y3R1cmUsIHByaXZhdGUgZGF0YSwKICAqIGFuZCBhbnl0aGluZyBlbHNlIHdlIG5lZWQgYmVmb3JlIHdlIHN0YXJ0ICovCi1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJdTMyIHRlbXB2YWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IE5VTEw7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBnaWFuZmFyX3BsYXRmb3JtX2RhdGEgKmVpbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlpbnQgaWR4OwpAQCAtMjA4LDcgKzIwNyw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAkvKiBTdG9wIHRoZSBETUEgZW5naW5lIG5vdywgaW4gY2FzZSBpdCB3YXMgcnVubmluZyBiZWZvcmUgKi8KIAkvKiAoVGhlIGZpcm13YXJlIGNvdWxkIGhhdmUgdXNlZCBpdCwgYW5kIGxlZnQgaXQgcnVubmluZykuICovCkBAIC0yNDUsNyArMjQ0LDcgQEAKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAocHJpdi0+cmVncyk7CiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCiAJZGV2LT5vcGVuID0gZ2Zhcl9lbmV0X29wZW47CkBAIC0zNzcsMTIgKzM3NiwxMiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBnZmFyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlvdW5tYXAoKHZvaWQgKikgcHJpdi0+cmVncyk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKQEAgLTE4NjEsMTEgKzE4NjAsMTIgQEAKIH0KIAogLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnZmFyX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdmYXJfZHJpdmVyID0gewogCS5wcm9iZSA9IGdmYXJfcHJvYmUsCiAJLnJlbW92ZSA9IGdmYXJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImZzbC1naWFuZmFyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZ2Zhcl9pbml0KHZvaWQpCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKIAogCWlmIChlcnIpCiAJCWdmYXJfbWRpb19leGl0KCk7CkBAIC0xODg1LDcgKzE4ODUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2Zhcl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2Zhcl9kcml2ZXIpOwogCWdmYXJfbWRpb19leGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCmluZGV4IDcyNjMzOTUuLjk1NDQyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5ld19idXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOworCW5ld19idXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOwogCiAJaWYgKE5VTEwgPT0gbmV3X2J1cykKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKaW5kZXggNjY2Y2ZiYi4uNTk1OGE2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYwpAQCAtNzIsOCArNzIsNiBAQAogc3RhdGljIHZvaWQgZHVtcF9yeF9kZXNjKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaSk7CiBzdGF0aWMgdm9pZCBkdW1wX3NrYihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyB2b2lkIGR1bXBfaHdfYWRkcihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSBjb25zdCBjaGFyKiBwZngsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCk7CiBzdGF0aWMgdm9pZCBhYm9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgYWJvcnRfYml0cyk7CiBzdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC0zMzQsMTMgKzMzMiwxMyBAQAogCiBzdGF0aWMgdm9pZAogZHVtcF9od19hZGRyKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyKiBwZngsCi0JICAgICB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cikKKwkgICAgIGNvbnN0IGNoYXIqIGZ1bmMsIHVuc2lnbmVkIGNoYXIqIGFkZHJfc3RyKQogewogCWludCBpOwogCWNoYXIgYnVmWzEwMF0sIG9jdGV0WzVdOwogICAgIAogCWlmIChkYmdfbHZsIDw9IEdUOTYxMDBfREVCVUcpIHsKLQkJc3RyY3B5KGJ1ZiwgcGZ4KTsKKwkJc3ByaW50ZihidWYsIHBmeCwgZnVuYyk7CiAJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJCXNwcmludGYob2N0ZXQsICIlMi4yeCVzIiwKIAkJCQlhZGRyX3N0cltpXSwgaTw1ID8gIjoiIDogIlxuIik7CkBAIC03MDgsNyArNzA2LDcgQEAKIAogCWluZm8oIiVzIGZvdW5kIGF0IDB4JXgsIGlycSAlZFxuIiwKIAkgICAgIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBndGlmLT5pb2Jhc2UsIGd0aWYtPmlycSk7Ci0JZHVtcF9od19hZGRyKDAsIGRldiwgIkhXIEFkZHJlc3MgIiwgZGV2LT5kZXZfYWRkcik7CisJZHVtcF9od19hZGRyKDAsIGRldiwgIiVzOiBIVyBBZGRyZXNzICIsIF9fRlVOQ1RJT05fXywgZGV2LT5kZXZfYWRkcik7CiAJaW5mbygiJXMgY2hpcCByZXZpc2lvbj0lZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5jaGlwX3Jldik7CiAJaW5mbygiJXMgZXRoZXJuZXQgcG9ydCAlZFxuIiwgY2hpcF9uYW1lKGdwLT5jaGlwX3JldiksIGdwLT5wb3J0X251bSk7CiAJaW5mbygiZXh0ZXJuYWwgUEhZIElEMT0weCUwNHgsIElEMj0weCUwNHhcbiIsIHBoeV9pZDEsIHBoeV9pZDIpOwpAQCAtMTQ4OCw3ICsxNDg2LDcgQEAKIAkJZ3Q5NjEwMF9hZGRfaGFzaF9lbnRyeShkZXYsIGRldi0+ZGV2X2FkZHIpOwogCiAJCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3Q7IG1jcHRyOyBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCQlkdW1wX2h3X2FkZHIoMiwgZGV2LCBfX0ZVTkNUSU9OX18gIjogYWRkcj0iLAorCQkJZHVtcF9od19hZGRyKDIsIGRldiwgIiVzOiBhZGRyPSIsIF9fRlVOQ1RJT05fXywKIAkJCQkgICAgIG1jcHRyLT5kbWlfYWRkcik7CiAJCQlndDk2MTAwX2FkZF9oYXNoX2VudHJ5KGRldiwgbWNwdHItPmRtaV9hZGRyKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IGJlMTkxZDguLmNlYjk4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogI2luY2x1ZGUgImlibXZldGguaCIKIAotI2RlZmluZSBERUJVRyAxCisjdW5kZWYgREVCVUcKIAogI2RlZmluZSBpYm12ZXRoX3ByaW50ayhmbXQsIGFyZ3MuLi4pIFwKICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCBfX0ZJTEVfXywgIyMgYXJncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCmluZGV4IDc2ZTBiOWYuLjYzZDM4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwpAQCAtMjkxLDkgKzI5MSw5IEBACiAvKgogICogU3VzcGVuZCB0aGUgSXJEQSBpbnRlcmZhY2UuCiAgKi8KLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAKIAlpZiAoIWRldikKQEAgLTMxNiw5ICszMTYsOSBAQAogLyoKICAqIFJlc3VtZSB0aGUgSXJEQSBpbnRlcmZhY2UuCiAgKi8KLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAKIAlpZiAoIWRldikKQEAgLTg4Niw5ICs4ODYsOCBAQAogCXJldHVybiBpby0+aGVhZCA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzYTExMDBfaXJkYSAqc2k7CiAJdW5zaWduZWQgaW50IGJhdWRyYXRlX21hc2s7CkBAIC05NjcsNyArOTY2LDcgQEAKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIgPT0gMCkKLQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRldik7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlpZiAoZXJyKSB7CiAgZXJyX21lbV81OgpAQCAtOTg1LDkgKzk4NCw5IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzYTExMDBfaXJkYV9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBzYTExMDBfaXJkYSAqc2kgPSBkZXYtPnByaXY7CkBAIC0xMDA0LDEzICsxMDAzLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExMDBpcl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC1pciIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBpcl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMF9pcmRhX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTAwX2lyZGFfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc2ExMTAwX2lyZGFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMF9pcmRhX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLWlyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTAwX2lyZGFfaW5pdCh2b2lkKQpAQCAtMTAyMywxMiArMTAyMywxMiBAQAogCWlmIChwb3dlcl9sZXZlbCA+IDMpCiAJCXBvd2VyX2xldmVsID0gMzsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGlyX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTEwMF9pcmRhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMTAwaXJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2ExMTAwX2lyZGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGExZDIwN2YuLmVjOTRlY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC0yMTQsMTQgKzIxNCwxNSBAQAogCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgc21zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc21zY19pcmNjX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTTVNDX0lSQ0MyX0RSSVZFUl9OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc21zY19pcmNjX2RyaXZlciA9IHsKIAkuc3VzcGVuZAk9IHNtc2NfaXJjY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc21zY19pcmNjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTTVNDX0lSQ0MyX0RSSVZFUl9OQU1FLAorCX0sCiB9OwogCiAvKiBUcmFuc2NlaXZlcnMgZm9yIFNNU0MtaXJjYyAqLwpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAKIAlJUkRBX0RFQlVHKDEsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCUlSREFfRVJST1IoIiVzLCBDYW4ndCByZWdpc3RlciBkcml2ZXIhXG4iLCBkcml2ZXJfbmFtZSk7CiAJCXJldHVybiByZXQ7CkBAIC0zNzgsNyArMzc5LDcgQEAKIAl9CiAKIAlpZiAocmV0KQotCQlkcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTEsNyArNDkyLDcgQEAKIAkJZXJyID0gUFRSX0VSUihzZWxmLT5wbGRldik7CiAJCWdvdG8gZXJyX291dDU7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YSgmc2VsZi0+cGxkZXYtPmRldiwgc2VsZik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoc2VsZi0+cGxkZXYsIHNlbGYpOwogCiAJSVJEQV9NRVNTQUdFKCJJckRBOiBSZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKIAlkZXZfY291bnQrKzsKQEAgLTE2ODUsOSArMTY4Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21zY19pcmNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghc2VsZi0+aW8uc3VzcGVuZGVkKSB7CiAJCUlSREFfREVCVUcoMSwgIiVzLCBTdXNwZW5kaW5nXG4iLCBkcml2ZXJfbmFtZSk7CkBAIC0xNzA2LDkgKzE3MDcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2NfaXJjY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc2VsZi0+aW8uc3VzcGVuZGVkKSB7CiAJCUlSREFfREVCVUcoMSwgIiVzLCBXYWtpbmcgdXBcbiIsIGRyaXZlcl9uYW1lKTsKQEAgLTE3ODgsNyArMTc4OSw3IEBACiAJCQlzbXNjX2lyY2NfY2xvc2UoZGV2X3NlbGZbaV0pOwogCX0KIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbXNjX2lyY2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCmluZGV4IDJmYjMxMDEuLmIwMzliZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2phenpzb25pYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKICAqIFByb2JlIGZvciBhIFNPTklDIGV0aGVybmV0IGNvbnRyb2xsZXIgb24gYSBNaXBzIEphenogYm9hcmQuCiAgKiBBY3R1YWxseSBwcm9iaW5nIGlzIHN1cGVyZmx1b3VzIGJ1dCB3ZSdyZSBwYXJhbm9pZC4KICAqLwotc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBqYXp6X3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwOwpAQCAtMjEyLDggKzIxMiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWxwLT5kZXZpY2UgPSBkZXZpY2U7Ci0JU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCWxwLT5kZXZpY2UgPSAmcGRldi0+ZGV2OworCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAgCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCW5ldGRldl9ib290X3NldHVwX2NoZWNrKGRldik7CkBAIC0yNjQsOSArMjY0LDkgQEAKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmV4aXQgamF6el9zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwqIGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwpAQCAtMjc4LDE4ICsyNzgsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewotCS5uYW1lCT0gamF6el9zb25pY19zdHJpbmcsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGphenpfc29uaWNfZHJpdmVyID0gewogCS5wcm9iZQk9IGphenpfc29uaWNfcHJvYmUsCiAJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSBqYXp6X3NvbmljX3N0cmluZywKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGRyaXZlcl9yZWdpc3RlcigmamF6el9zb25pY19kcml2ZXIpKSkgeworCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcikpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRHJpdmVyIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMxMyw3ICszMTQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgamF6el9zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmphenpfc29uaWNfZHJpdmVyKTsKIAogCWlmIChqYXp6X3NvbmljX2RldmljZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihqYXp6X3NvbmljX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwppbmRleCA5ZWY0NTkyLi4wMmQ1YzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKQEAgLTUyNSw3ICs1MjUsNyBAQAogCXJldHVybiBtYWNzb25pY19pbml0KGRldik7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBtYWNfc29uaWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNvbmljX2xvY2FsICpscDsKQEAgLTUzNyw4ICs1MzcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlscC0+ZGV2aWNlID0gZGV2aWNlOwotCVNFVF9ORVRERVZfREVWKGRldiwgZGV2aWNlKTsKKwlscC0+ZGV2aWNlID0gJmRldmljZS0+ZGV2OworCVNFVF9ORVRERVZfREVWKGRldiwgJmRldmljZS0+ZGV2KTsKICAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCiAJLyogVGhpcyB3aWxsIGNhdGNoIGZhdGFsIHN0dWZmIGxpa2UgLUVOT01FTSBhcyB3ZWxsIGFzIHN1Y2Nlc3MgKi8KQEAgLTU3OSw5ICs1NzksOSBAQAogCiAjaW5jbHVkZSAic29uaWMuYyIKIAotc3RhdGljIGludCBfX2RldmV4aXQgbWFjX3NvbmljX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1hY19zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldmljZS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSk7CiAJc3RydWN0IHNvbmljX2xvY2FsKiBscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKQEAgLTU5MiwxOCArNTkyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtYWNfc29uaWNfZHJpdmVyID0gewotCS5uYW1lICAgPSBtYWNfc29uaWNfc3RyaW5nLAotCS5idXMgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNfc29uaWNfZHJpdmVyID0gewogCS5wcm9iZSAgPSBtYWNfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1hY19zb25pY19kZXZpY2VfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IG1hY19zb25pY19zdHJpbmcsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1hY19zb25pY19pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CiAKLQlpZiAoKGVyciA9IGRyaXZlcl9yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcikpKSB7CisJaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC02MjgsNyArNjI5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1hY19zb25pY19jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7CiAKIAlpZiAobWFjX3NvbmljX2RldmljZSkgewogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtYWNfc29uaWNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCmluZGV4IDcxZjJjNjcuLjNjYjliM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwpAQCAtMTM4Nyw5ICsxMzg3LDggQEAKICAqIElucHV0IDoJc3RydWN0IGRldmljZSAqCiAgKiBPdXRwdXQgOgktRU5PTUVNIGlmIGZhaWxlZCAsIDAgaWYgc3VjY2VzcwogICovCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZGV2KTsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqcGQ7CiAJaW50IHBvcnRfbnVtID0gcGRldi0+aWQ7CiAJc3RydWN0IG12NjQzeHhfcHJpdmF0ZSAqbXA7CkBAIC0xNDAyLDcgKzE0MDEsNyBAQAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZGV2LCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAltcCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTE1NDYsMjEgKzE1NDUsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAogCWZyZWVfbmV0ZGV2KGRldik7Ci0JZGV2X3NldF9kcnZkYXRhKGRkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJNVi02NDN4eCAxMC8xMDAvMTAwMCBFdGhlcm5ldCBEcml2ZXJcbiIpOwpAQCAtMTU3OCw3ICsxNTc2LDcgQEAKIAogfQogCi1zdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWlvdW5tYXAobXY2NDN4eF9ldGhfc2hhcmVkX2Jhc2UpOwogCW12NjQzeHhfZXRoX3NoYXJlZF9iYXNlID0gTlVMTDsKQEAgLTE1ODYsMTggKzE1ODQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjQzeHhfZXRoX2RyaXZlciA9IHsKLQkubmFtZSA9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjQzeHhfZXRoX2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0M3h4X2V0aF9wcm9iZSwKIAkucmVtb3ZlID0gbXY2NDN4eF9ldGhfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gTVY2NDNYWF9FVEhfTkFNRSwKKwl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUsCiAJLnJlbW92ZSA9IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBNVjY0M1hYX0VUSF9TSEFSRURfTkFNRSwKKwl9LAogfTsKIAogLyoKQEAgLTE2MTMsMTEgKzE2MTMsMTEgQEAKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOwogCWlmICghcmMpIHsKLQkJcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7CisJCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOwogCQlpZiAocmMpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiAJfQogCXJldHVybiByYzsKIH0KQEAgLTE2MzMsOCArMTYzMyw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBtdjY0M3h4X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXY2NDN4eF9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYWE5NzMwLmMgYi9kcml2ZXJzL25ldC9zYWE5NzMwLmMKaW5kZXggMTEwZTc3Ny4uYjJhY2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2FhOTczMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NhYTk3MzAuYwpAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwNSAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CisgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKQEAgLTE3LDE1ICsxNywxMyBAQAogICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCiAgKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgogICoKLSAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICoKICAqIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyLgogICoKICAqIENoYW5nZXM6Ci0gKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6IENvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJIChwY2lfZHJpdmVyKS4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycm9yIGhhbmRsaW5nIGZpeGVzLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiBBbmdlbG8gRGVsbCdBZXJhIDxidWZmZXJAYW50aWZvcmsub3JnPiA6CUNvbnZlcnNpb24gdG8gdGhlIG5ldyBQQ0kgQVBJCisgKgkJCQkJCShwY2lfZHJpdmVyKS4KKyAqCQkJCQkJQ29udmVyc2lvbiB0byBzcGlubG9ja3MuCisgKgkJCQkJCUVycm9yIGhhbmRsaW5nIGZpeGVzLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0zNiw4ICszNCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKwogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CiAKICNpbmNsdWRlICJzYWE5NzMwLmgiCkBAIC01MSw4ICs1Miw4IEBACiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRSAic2FhOTczMCIKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNhYTk3MzBfcGNpX3RibFtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9QSElMSVBTLCBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBOTM3MCwKLSAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwl7IFBDSV9WRU5ET1JfSURfUEhJTElQUywgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTk3MzAsCisJICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTYxLDUwICs2Miw0OCBAQAogLyogTm9uLXplcm8gb25seSBpZiB0aGUgY3VycmVudCBjYXJkIGlzIGEgUENJIHdpdGggQklPUy1zZXQgSVJRLiAqLwogc3RhdGljIHVuc2lnbmVkIGludCBwY2lfaXJxX2xpbmU7CiAKLSNkZWZpbmUgSU5MKGEpICAgICBpbmwoKHVuc2lnbmVkIGxvbmcpYSkKLSNkZWZpbmUgT1VUTCh4LGEpICBvdXRsKHgsKHVuc2lnbmVkIGxvbmcpYSkKLQogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfZW5hYmxlX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSB8IEVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpIHwgRVZNX0xBTl9JTlQgfAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSB8IEVWTV9MQU5fSU5UIHwKIAkgICAgIEVWTV9NQVNURVJfRU4sICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSk7CiB9CisKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2Rpc2FibGVfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpOwotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKTsKIH0KIAogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfY2xlYXJfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChFVk1fTEFOX0lOVCwgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKKwlvdXRsKEVWTV9MQU5fSU5ULCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpOwogfQogCiBzdGF0aWMgdm9pZCBldm1fc2FhOTczMF9ibG9ja19sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgJiB+RVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX3VuYmxvY2tfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCisJb3V0bChyZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgfCBFVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKIH0KIAotc3RhdGljIHZvaWQgc2hvd19zYWE5NzMwX3JlZ3Moc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfdXNlZF9fIHNob3dfc2FhOTczMF9yZWdzKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAlpbnQgaSwgajsKLQlwcmludGsoIlR4bUJ1ZmZlckEgPSAleFxuIiwgbHAtPlR4bUJ1ZmZlclswXVswXSk7Ci0JcHJpbnRrKCJUeG1CdWZmZXJCID0gJXhcbiIsIGxwLT5UeG1CdWZmZXJbMV1bMF0pOwotCXByaW50aygiUmN2QnVmZmVyQSA9ICV4XG4iLCBscC0+UmN2QnVmZmVyWzBdWzBdKTsKLQlwcmludGsoIlJjdkJ1ZmZlckIgPSAleFxuIiwgbHAtPlJjdkJ1ZmZlclsxXVswXSk7CisJcHJpbnRrKCJUeG1CdWZmZXJBID0gJXBcbiIsIGxwLT5UeG1CdWZmZXJbMF1bMF0pOworCXByaW50aygiVHhtQnVmZmVyQiA9ICVwXG4iLCBscC0+VHhtQnVmZmVyWzFdWzBdKTsKKwlwcmludGsoIlJjdkJ1ZmZlckEgPSAlcFxuIiwgbHAtPlJjdkJ1ZmZlclswXVswXSk7CisJcHJpbnRrKCJSY3ZCdWZmZXJCID0gJXBcbiIsIGxwLT5SY3ZCdWZmZXJbMV1bMF0pOwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7IGorKykgewogCQkJcHJpbnRrKCJUeG1CdWZmZXJbJWRdWyVkXSA9ICV4XG4iLCBpLCBqLApAQCAtMTIwLDEzICsxMTksMTMgQEAKIAkJfQogCX0KIAlwcmludGsoImxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSk7CiAJcHJpbnRrKCJscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKSk7CisJICAgICAgIHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkpOwogCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkpOworCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKSk7CiAJcHJpbnRrKCJscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gJXhcbiIsIGxwLT5OZXh0VHhtQnVmZmVySW5kZXgpOwogCXByaW50aygibHAtPk5leHRUeG1QYWNrZXRJbmRleCA9ICV4XG4iLCBscC0+TmV4dFR4bVBhY2tldEluZGV4KTsKIAlwcmludGsoImxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAleFxuIiwKQEAgLTEzNCwyMyArMTMzLDIzIEBACiAJcHJpbnRrKCJscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gJXhcbiIsCiAJICAgICAgIGxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXgpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4U3RhdHVzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhTdGF0dXMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7Ci0JCU9VVEwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOwogCQlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhID0gJXhcbiIsCi0JCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKSk7CisJCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpKTsKIAl9CiAJcHJpbnRrKCJscC0+c3RhdHMudHhfcGFja2V0cyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X3BhY2tldHMpOwogCXByaW50aygibHAtPnN0YXRzLnR4X2Vycm9ycyA9ICVseFxuIiwgbHAtPnN0YXRzLnR4X2Vycm9ycyk7CkBAIC0xNzgsMTcgKzE3NywxNyBAQAogCSAgICAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyk7CiAKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z1BDSU1hc3RlckFkZHIgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4U3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSkpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeFN0YXRlTWFjaGluZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhGaWZvUG9pbnRlcnMpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4Rmlmb1BvaW50ZXJzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5DdGxTdGF0ZU1hY2hpbmUpKTsKIH0KIAogc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfYnVmZmVyX2luaXQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMjE0LDk4ICsyMTMsMTA4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQorc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCXVuc2lnbmVkIGludCBtZW1fc2l6ZTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIGxwLT5idWZmZXJfc2l6ZSwgbHAtPmJ1ZmZlcl9zdGFydCwKKwkJCSAgICBscC0+ZG1hX2FkZHIpOworfQorCitzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKK3sKIAl2b2lkICpQYTsKLQl1bnNpZ25lZCBpbnQgaSwgaiwgUmN2QnVmZmVyU2l6ZSwgVHhtQnVmZmVyU2l6ZTsKLQl1bnNpZ25lZCBpbnQgYnVmZmVyX3N0YXJ0OwotCi0JLyogCi0JICogQWxsb2NhdGUgYWxsIFJYIGFuZCBUWCBwYWNrZXRzIGluIG9uZSBjaHVuay4gCi0JICogVGhlIFJ4IGFuZCBUeCBwYWNrZXRzIG11c3QgYmUgUEFDS0VUX1NJWkUgYWxpZ25lZC4KLQkgKi8KLQltZW1fc2l6ZSA9ICgoTEFOX1NBQTk3MzBfUkNWX1FfU0laRSArIExBTl9TQUE5NzMwX1RYTV9RX1NJWkUpICoKLQkJICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfQlVGRkVSUykgKwotCSAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKLQlidWZmZXJfc3RhcnQgPQotCSAgICAodW5zaWduZWQgaW50KSBrbWFsbG9jKG1lbV9zaXplLCBHRlBfRE1BIHwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWJ1ZmZlcl9zdGFydCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiAKLQkgKiBTZXQgRE1BIGJ1ZmZlciB0byBrc2VnMSAodW5jYWNoZWQpLgotCSAqIE1ha2Ugc3VyZSB0byBmbHVzaCBiZWZvcmUgdXNpbmcgaXQgdW5jYWNoZWQuCi0JICovCi0JUGEgPSAodm9pZCAqKSBLU0VHMUFERFIoKGJ1ZmZlcl9zdGFydCArIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFKSAmCi0JCQkJfihMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAtIDEpKTsKLQlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKSBQYSwgbWVtX3NpemUpOworCXVuc2lnbmVkIGludCBpLCBqLCByeG9mZnNldCwgdHhvZmZzZXQ7CisJaW50IHJldDsKIAogCS8qIEluaXRpYWxpemUgYnVmZmVyIHNwYWNlICovCi0JUmN2QnVmZmVyU2l6ZSA9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwotCVR4bUJ1ZmZlclNpemUgPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAlscC0+RG1hUmN2UGFja2V0cyA9IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7CiAJbHAtPkRtYVR4bVBhY2tldHMgPSBMQU5fU0FBOTczMF9UWE1fUV9TSVpFOwogCisJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KKwlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKKworCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxhYmxlIHBhY2tldCBpbmRleCAqLworCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOworCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOworCisJLyoKKwkgKiBBbGxvY2F0ZSBhbGwgUlggYW5kIFRYIHBhY2tldHMgaW4gb25lIGNodW5rLgorCSAqIFRoZSBSeCBhbmQgVHggcGFja2V0cyBtdXN0IGJlIFBBQ0tFVF9TSVpFIGFsaWduZWQuCisJICovCisJbHAtPmJ1ZmZlcl9zaXplID0gKChMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFICsgTEFOX1NBQTk3MzBfVFhNX1FfU0laRSkgKgorCQkJICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9CVUZGRVJTKSArCisJCQkgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOworCWxwLT5idWZmZXJfc3RhcnQgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBscC0+YnVmZmVyX3NpemUsCisJCQkJCQkmbHAtPmRtYV9hZGRyKTsKKwlpZiAoIWxwLT5idWZmZXJfc3RhcnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJUGEgPSAodm9pZCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKWxwLT5idWZmZXJfc3RhcnQsCisJCQkgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSk7CisKKwlyeG9mZnNldCA9IFBhIC0gbHAtPmJ1ZmZlcl9zdGFydDsKKwogCS8qIEluaXQgUlggYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1JDVl9RX1NJWkU7IGorKykgewogCQkJKih1bnNpZ25lZCBpbnQgKikgUGEgPQogCQkJICAgIGNwdV90b19sZTMyKFJYU0ZfUkVBRFkgPDwKIAkJCQkJUlhfU1RBVF9DVExfT1dORVJfU0hGKTsKLQkJCWxwLT5SY3ZCdWZmZXJbaV1bal0gPSAodW5zaWduZWQgaW50KSBQYTsKLQkJCVBhICs9IFJjdkJ1ZmZlclNpemU7CisJCQlscC0+UmN2QnVmZmVyW2ldW2pdID0gUGE7CisJCQlQYSArPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAkJfQogCX0KIAorCXR4b2Zmc2V0ID0gUGEgLSBscC0+YnVmZmVyX3N0YXJ0OworCiAJLyogSW5pdCBUWCBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0JVRkZFUlM7IGkrKykgewogCQlmb3IgKGogPSAwOyBqIDwgTEFOX1NBQTk3MzBfVFhNX1FfU0laRTsgaisrKSB7CiAJCQkqKHVuc2lnbmVkIGludCAqKSBQYSA9CiAJCQkgICAgY3B1X3RvX2xlMzIoVFhTRl9FTVBUWSA8PAogCQkJCQlUWF9TVEFUX0NUTF9PV05FUl9TSEYpOwotCQkJbHAtPlR4bUJ1ZmZlcltpXVtqXSA9ICh1bnNpZ25lZCBpbnQpIFBhOwotCQkJUGEgKz0gVHhtQnVmZmVyU2l6ZTsKKwkJCWxwLT5UeG1CdWZmZXJbaV1bal0gPSBQYTsKKwkJCVBhICs9IExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFOwogCQl9CiAJfQogCi0JLyogCi0JICogU2V0IHJ4IGJ1ZmZlciBBIGFuZCByeCBidWZmZXIgQiB0byBwb2ludCB0byB0aGUgZmlyc3QgdHdvIGJ1ZmZlciAKKwkvKgorCSAqIFNldCByeCBidWZmZXIgQSBhbmQgcnggYnVmZmVyIEIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKIAkgKiBzcGFjZXMuCiAJICovCi0JT1VUTChQSFlTQUREUihscC0+UmN2QnVmZmVyWzBdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHJ4b2Zmc2V0LAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZBKTsKLQlPVVRMKFBIWVNBRERSKGxwLT5SY3ZCdWZmZXJbMV1bMF0pLAorCW91dGwobHAtPmRtYV9hZGRyICsgcnhvZmZzZXQgKworCSAgICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgKiBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEJ1ZmZCKTsKIAotCS8qIEluaXRpYWxpemUgQnVmZmVyIEluZGV4ICovCi0JbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDE7Ci0KLQkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYmxlIHBhY2tldCBpbmRleCAqLwotCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOwotCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOwotCi0JLyogCisJLyoKIAkgKiBTZXQgdHhtX2J1Zl9hIGFuZCB0eG1fYnVmX2IgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIKLQkgKiBzcGFjZSAKKwkgKiBzcGFjZQogCSAqLwotCU9VVEwoUEhZU0FERFIobHAtPlR4bUJ1ZmZlclswXVswXSksCisJb3V0bChscC0+ZG1hX2FkZHIgKyB0eG9mZnNldCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQSk7Ci0JT1VUTChQSFlTQUREUihscC0+VHhtQnVmZmVyWzFdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHR4b2Zmc2V0ICsKKwkgICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfVFhNX1FfU0laRSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhCdWZmQik7CiAKIAkvKiBTZXQgcGFja2V0IG51bWJlciAqLwotCU9VVEwoKGxwLT5EbWFSY3ZQYWNrZXRzIDw8IFBLX0NPVU5UX1JYX0FfU0hGKSB8CisJb3V0bCgobHAtPkRtYVJjdlBhY2tldHMgPDwgUEtfQ09VTlRfUlhfQV9TSEYpIHwKIAkgICAgIChscC0+RG1hUmN2UGFja2V0cyA8PCBQS19DT1VOVF9SWF9CX1NIRikgfAogCSAgICAgKGxwLT5EbWFUeG1QYWNrZXRzIDw8IFBLX0NPVU5UX1RYX0FfU0hGKSB8CiAJICAgICAobHAtPkRtYVR4bVBhY2tldHMgPDwgUEtfQ09VTlRfVFhfQl9TSEYpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5QYWNrZXRDb3VudCk7CiAKIAlyZXR1cm4gMDsKKworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2xvYWQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQpAQCAtMzE3LDggKzMyNiw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQ0FNX0RXT1JEUzsgaSsrKSB7CiAJCS8qIEZpcnN0IHNldCBhZGRyZXNzIHRvIHdoZXJlIGRhdGEgaXMgd3JpdHRlbiAqLwotCQlPVVRMKGksICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQWRkcmVzcyk7Ci0JCU9VVEwoKE5ldHdvcmtBZGRyZXNzWzBdIDw8IDI0KSB8IChOZXR3b3JrQWRkcmVzc1sxXSA8PCAxNikKKwkJb3V0bChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOworCQlvdXRsKChOZXR3b3JrQWRkcmVzc1swXSA8PCAyNCkgfCAoTmV0d29ya0FkZHJlc3NbMV0gPDwgMTYpCiAJCSAgICAgfCAoTmV0d29ya0FkZHJlc3NbMl0gPDwgOCkgfCBOZXR3b3JrQWRkcmVzc1szXSwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbURhdGEpOwogCQlOZXR3b3JrQWRkcmVzcyArPSA0OwpAQCAtMzI4LDggKzMzNyw3IEBACiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY2FtX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IGk7CiAKIAkvKiBDb3B5IE1BQy1hZGRyZXNzIGludG8gYWxsIGVudHJpZXMuICovCkBAIC0zNDcsNyArMzU1LDcgQEAKIAogCS8qIENoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5LiAqLwogCWkgPSAwOwotCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CisJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7CkBAIC0zNTcsMTIgKzM2NSwxMiBAQAogCX0KIAogCS8qIE5vdyBzZXQgdGhlIGNvbnRyb2wgYW5kIGFkZHJlc3MgcmVnaXN0ZXIuICovCi0JT1VUTChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCisJb3V0bChNRF9DQV9CVVNZIHwgUEhZX1NUQVRVUyB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCS8qIGNoZWNrIGxpbmsgc3RhdHVzLCBzcGluIGhlcmUgdGlsbCBzdGF0aW9uIGlzIG5vdCBidXN5ICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmIE1EX0NBX0JVU1kpIHsKKwl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CiAJCWkrKzsKIAkJaWYgKGkgPiAxMDApIHsKIAkJCXByaW50aygiRXJyb3I6IGxhbl9zYWE5NzMwX21paV9pbml0OiB0aW1lb3V0XG4iKTsKQEAgLTM3NSw3ICszODMsNyBAQAogCW1kZWxheSgxKTsKIAogCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cy4gKi8KLQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCiAJICAgIFBIWV9TVEFUVVNfTElOS19VUCkgewogCQkvKiBMaW5rIGlzIHVwLiAqLwogCQlyZXR1cm4gMDsKQEAgLTM4MywxNCArMzkxLDE0IEBACiAJCS8qIExpbmsgaXMgZG93biwgcmVzZXQgdGhlIFBIWSBmaXJzdC4gKi8KIAogCQkvKiBzZXQgUEhZIGFkZHJlc3MgPSAnQ09OVFJPTCcgKi8KLQkJT1VUTChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKKwkJb3V0bChQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfCBQSFlfQ09OVFJPTCwKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCQkvKiBXYWl0IGZvciAxIG1zLiAqLwogCQltZGVsYXkoMSk7CiAKIAkJLyogc2V0ICdDT05UUk9MJyA9IGZvcmNlIHJlc2V0IGFuZCByZW5lZ290aWF0ZSAqLwotCQlPVVRMKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAorCQlvdXRsKFBIWV9DT05UUk9MX1JFU0VUIHwgUEhZX0NPTlRST0xfQVVUT19ORUcgfAogCQkgICAgIFBIWV9DT05UUk9MX1JFU1RBUlRfQVVUT19ORUcsCiAJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpOwogCkBAIC0zOTgsMTIgKzQwNiwxMiBAQAogCQltZGVsYXkoNTApOwogCiAJCS8qIHNldCAnQlVTWScgdG8gc3RhcnQgb3BlcmF0aW9uICovCi0JCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CisJCW91dGwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfCBNRF9DQV9XUiB8CiAJCSAgICAgUEhZX0NPTlRST0wsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCS8qIGF3YWl0IGNvbXBsZXRpb24gKi8KIAkJaSA9IDA7Ci0JCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgogCQkgICAgICAgTURfQ0FfQlVTWSkgewogCQkJaSsrOwogCQkJaWYgKGkgPiAxMDApIHsKQEAgLTQxOSwxMyArNDI3LDEzIEBACiAKIAkJZm9yIChsID0gMDsgbCA8IDI7IGwrKykgewogCQkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ1NUQVRVUycgKi8KLQkJCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfAorCQkJb3V0bChNRF9DQV9CVVNZIHwgUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8CiAJCQkgICAgIFBIWV9TVEFUVVMsCiAJCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpOwogCiAJCQkvKiBhd2FpdCBjb21wbGV0aW9uICovCiAJCQlpID0gMDsKLQkJCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJgorCQkJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKIAkJCSAgICAgICBNRF9DQV9CVVNZKSB7CiAJCQkJaSsrOwogCQkJCWlmIChpID4gMTAwKSB7CkBAIC00NDAsNyArNDQ4LDcgQEAKIAkJCW1kZWxheSgzMDAwKTsKIAogCQkJLyogY2hlY2sgdGhlIGxpbmsgc3RhdHVzICovCi0JCQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCisJCQlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdERhdGEpICYKIAkJCSAgICBQSFlfU1RBVFVTX0xJTktfVVApIHsKIAkJCQkvKiBsaW5rIGlzIHVwICovCiAJCQkJYnJlYWs7CkBAIC00NTQsNyArNDYyLDcgQEAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKIAkvKiBJbml0aWFsaXplIERNQSBjb250cm9sIHJlZ2lzdGVyLiAqLwotCU9VVEwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAorCW91dGwoKExBTk1CX0FOWSA8PCBETUFfQ1RMX01BWF9YRkVSX1NIRikgfAogCSAgICAgKExBTkVORF9MSVRUTEUgPDwgRE1BX0NUTF9FTkRJQU5fU0hGKSB8CiAJICAgICAoTEFOX1NBQTk3MzBfUkNWX1FfSU5UX1RIUkVTSE9MRCA8PCBETUFfQ1RMX1JYX0lOVF9DT1VOVF9TSEYpCiAJICAgICB8IERNQV9DVExfUlhfSU5UX1RPX0VOIHwgRE1BX0NUTF9SWF9JTlRfRU4gfApAQCAtNDYyLDI3ICs0NzAsMjcgQEAKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKIAogCS8qIEluaXRpYWwgTUFDIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTCgoTUFDQ01fTUlJIDw8IE1BQ19DT05UUk9MX0NPTk5fU0hGKSB8IE1BQ19DT05UUk9MX0ZVTExfRFVQLAorCW91dGwoKE1BQ0NNX01JSSA8PCBNQUNfQ09OVFJPTF9DT05OX1NIRikgfCBNQUNfQ09OVFJPTF9GVUxMX0RVUCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKTsKIAogCS8qIEluaXRpYWxpemUgQ0FNIGNvbnRyb2wgcmVnaXN0ZXIuICovCi0JT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAorCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAotCS8qIAorCS8qCiAJICogSW5pdGlhbGl6ZSBDQU0gZW5hYmxlIHJlZ2lzdGVyLCBvbmx5IHR1cm4gb24gZmlyc3QgZW50cnksIHNob3VsZAotCSAqIGNvbnRhaW4gb3duIGFkZHIuIAorCSAqIGNvbnRhaW4gb3duIGFkZHIuCiAJICovCi0JT1VUTCgweDAwMDEsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRW5hYmxlKTsKKwlvdXRsKDB4MDAwMSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1FbmFibGUpOwogCiAJLyogSW5pdGlhbGl6ZSBUeCBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CisJb3V0bChUWF9DVExfRU5fQ09NUCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CiAKIAkvKiBJbml0aWFsaXplIFJjdiBjb250cm9sIHJlZ2lzdGVyICovCi0JT1VUTChSWF9DVExfU1RSSVBfQ1JDLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKTsKKwlvdXRsKFJYX0NUTF9TVFJJUF9DUkMsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpOwogCiAJLyogUmVzZXQgRE1BIGVuZ2luZSAqLwotCU9VVEwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7CisJb3V0bChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNDkyLDIxICs1MDAsMjEgQEAKIAlpbnQgaTsKIAogCS8qIFN0b3AgRE1BIGZpcnN0ICovCi0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpICYKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSAmCiAJICAgICB+KERNQV9DVExfRU5fVFhfRE1BIHwgRE1BX0NUTF9FTl9SWF9ETUEpLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogU2V0IHRoZSBTVyBSZXNldCBiaXRzIGluIERNQSBhbmQgTUFDIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JT1VUTChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgfCBNQUNfQ09OVFJPTF9SRVNFVCwKKwlvdXRsKERNQV9URVNUX1NXX1JFU0VULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVRlc3QpOworCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpIHwgTUFDX0NPTlRST0xfUkVTRVQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCk7CiAKLQkvKiAKKwkvKgogCSAqIFdhaXQgZm9yIE1BQyByZXNldCB0byBoYXZlIGZpbmlzaGVkLiBUaGUgcmVzZXQgYml0IGlzIGF1dG8gY2xlYXJlZAogCSAqIHdoZW4gdGhlIHJlc2V0IGlzIGRvbmUuCiAJICovCiAJaSA9IDA7Ci0Jd2hpbGUgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgeworCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCkgJiBNQUNfQ09OVFJPTF9SRVNFVCkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsKQEAgLTUyNCw3ICs1MzIsNyBAQAogCS8qIFN0b3AgbGFuIGNvbnRyb2xsZXIuICovCiAJbGFuX3NhYTk3MzBfc3RvcChscCk7CiAKLQlPVVRMKExBTl9TQUE5NzMwX0RFRkFVTFRfVElNRV9PVVRfQ05ULAorCW91dGwoTEFOX1NBQTk3MzBfREVGQVVMVF9USU1FX09VVF9DTlQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlRpbWVvdXQpOwogCiAJcmV0dXJuIDA7CkBAIC01MzYsMjggKzU0NCwyNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBSeCBCdWZmZXIgSW5kZXggKi8KIAlscC0+TmV4dFJjdlBhY2tldEluZGV4ID0gMDsKLQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKKwlscC0+TmV4dFJjdkJ1ZmZlckluZGV4ID0gMDsKIAotCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxibGUgcGFja2V0IGluZGV4ICovCisJLyogU2V0IGN1cnJlbnQgYnVmZmVyIGluZGV4ICYgbmV4dCBhdmFpbGFibGUgcGFja2V0IGluZGV4ICovCiAJbHAtPk5leHRUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPk5leHRUeG1CdWZmZXJJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA9IDA7CiAJbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleCA9IDA7CiAKLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CisJb3V0bChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgfCBETUFfQ1RMX0VOX1RYX0RNQSB8CiAJICAgICBETUFfQ1RMX0VOX1JYX0RNQSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpOwogCiAJLyogRm9yIFR4LCB0dXJuIG9uIE1BQyB0aGVuIERNQSAqLwotCU9VVEwoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpIHwgVFhfQ1RMX1RYX0VOLAorCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCkgfCBUWF9DVExfVFhfRU4sCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKTsKIAogCS8qIEZvciBSeCwgdHVybiBvbiBETUEgdGhlbiBNQUMgKi8KLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSB8IFJYX0NUTF9SWF9FTiwKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpIHwgUlhfQ1RMX1JYX0VOLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCk7CiAKLQkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd25zIHRoZSBidWZmZXJzICovCi0JT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CIHwgT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwKLQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKKwkvKiBTZXQgT2syVXNlIHRvIGxldCBoYXJkd2FyZSBvd24gdGhlIGJ1ZmZlcnMuCSovCisJb3V0bChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3Miw4ICs1NzksNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCAqcFBhY2tldDsKIAl1bnNpZ25lZCBpbnQgdHhfc3RhdHVzOwogCkBAIC01ODEsMTMgKzU4NywxMSBAQAogCQlwcmludGsoImxhbl9zYWE5NzMwX3R4IGludGVycnVwdFxuIik7CiAKIAkvKiBDbGVhciBpbnRlcnJ1cHQuICovCi0JT1VUTChETUFfU1RBVFVTX01BQ19UWF9JTlQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKTsKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1RYX0lOVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpOwogCiAJd2hpbGUgKDEpIHsKLQkJcFBhY2tldCA9Ci0JCSAgICAodW5zaWduZWQgaW50ICopIGxwLT5UeG1CdWZmZXJbbHAtPgotCQkJCQkJICAgUGVuZGluZ1R4bUJ1ZmZlckluZGV4XQotCQkgICAgW2xwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXhdOworCQlwUGFja2V0ID0gbHAtPlR4bUJ1ZmZlcltscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4XQorCQkJCSAgICAgICBbbHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleF07CiAKIAkJLyogR2V0IHN0YXR1cyBvZiBmaXJzdCBwYWNrZXQgdHJhbnNtaXR0ZWQuICovCiAJCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKQEAgLTYwNSwyMyArNjA5LDIyIEBACiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX0VYX0NPTEwgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCi0JCQkgICAgKFRYX1NUQVRVU19MQVRFX0NPTEwgPDwKLQkJCSAgICAgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpIGxwLT5zdGF0cy4KLQkgICAgIHR4X3dpbmRvd19lcnJvcnMrKzsKKwkJCSAgICAoVFhfU1RBVFVTX0xBVEVfQ09MTCA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKKwkJCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19MX0NBUlIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19VTkRFUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYKIAkJCSAgICAoVFhfU1RBVFVTX1NRX0VSUiA8PCBUWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogCiAJCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPQotCQkJICAgIHR4X3N0YXR1cyAmIFRYX1NUQVRVU19UWF9DT0xMX01TSzsKKwkJCQl0eF9zdGF0dXMgJiBUWF9TVEFUVVNfVFhfQ09MTF9NU0s7CiAJCX0KIAogCQkvKiBGcmVlIGJ1ZmZlci4gKi8KQEAgLTYzNiwyMSArNjM5LDE1IEBACiAJCX0KIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkvKiBUaGUgdHggYnVmZmVyIGlzIG5vIGxvbmdlciBmdWxsLiAqLwotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JfQorCS8qIFRoZSB0eCBidWZmZXIgaXMgbm8gbG9uZ2VyIGZ1bGwuICovCisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGxlbiA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IDA7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXR1czsKQEAgLTY2MywxNiArNjYwLDEzIEBACiAJCXByaW50aygibGFuX3NhYTk3MzBfcnggaW50ZXJydXB0XG4iKTsKIAogCS8qIENsZWFyIHJlY2VpdmUgaW50ZXJydXB0cy4gKi8KLQlPVVRMKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKKwlvdXRsKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5ULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cyk7CiAKIAkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JaWYgKGxwLT5OZXh0UmN2VG9Vc2VJc0EpCi0JCUJ1ZmZlckluZGV4ID0gMDsKLQllbHNlCi0JCUJ1ZmZlckluZGV4ID0gMTsKKwlCdWZmZXJJbmRleCA9IGxwLT5OZXh0UmN2QnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCXBQYWNrZXQgPSAodW5zaWduZWQgaW50ICopIGxwLT5SY3ZCdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwUGFja2V0ID0gbHAtPlJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwogCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAogCS8qIFByb2Nlc3MgZWFjaCBwYWNrZXQuICovCkBAIC03MTUsNTEgKzcwOSwzOSBAQAogCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19DUkNfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKLQkJCSAgICAoUlhfU1RBVFVTX0FMSUdOX0VSUiA8PAotCQkJICAgICBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkgbHAtPnN0YXRzLgotCSAgICAgcnhfZnJhbWVfZXJyb3JzKys7CisJCQkgICAgKFJYX1NUQVRVU19BTElHTl9FUlIgPDwgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpCisJCQkJbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19PVkVSRkxPVyA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlpZiAocnhfc3RhdHVzICYKIAkJCSAgICAoUlhfU1RBVFVTX0xPTkdfRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KIAogCQkvKiBJbmRpY2F0ZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVyLiAqLwotCQkqcFBhY2tldCA9Ci0JCSAgICBjcHVfdG9fbGUzMihSWFNGX1JFQURZIDw8IFJYX1NUQVRfQ1RMX09XTkVSX1NIRik7CisJCSpwUGFja2V0ID0gY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PCBSWF9TVEFUX0NUTF9PV05FUl9TSEYpOworCisJCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCQlvdXRsKEJ1ZmZlckluZGV4ID8gT0syVVNFX1JYX0IgOiBPSzJVU0VfUlhfQSwKKwkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAkJLyogR28gdG8gbmV4dCBwYWNrZXQgaW4gc2VxdWVuY2UuICovCiAJCWxwLT5OZXh0UmN2UGFja2V0SW5kZXgrKzsKIAkJaWYgKGxwLT5OZXh0UmN2UGFja2V0SW5kZXggPj0gTEFOX1NBQTk3MzBfUkNWX1FfU0laRSkgewogCQkJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JCQlpZiAoQnVmZmVySW5kZXgpIHsKLQkJCQlscC0+TmV4dFJjdlRvVXNlSXNBID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDA7Ci0JCQl9CisJCQlscC0+TmV4dFJjdkJ1ZmZlckluZGV4IF49IDE7CiAJCX0KLQkJT1VUTChPSzJVU0VfUlhfQSB8IE9LMlVTRV9SWF9CLAotCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKIAogCQkvKiBBZGRyZXNzIG5leHQgcGFja2V0ICovCi0JCWlmIChscC0+TmV4dFJjdlRvVXNlSXNBKQotCQkJQnVmZmVySW5kZXggPSAwOwotCQllbHNlCi0JCQlCdWZmZXJJbmRleCA9IDE7CisJCUJ1ZmZlckluZGV4ID0gbHAtPk5leHRSY3ZCdWZmZXJJbmRleDsKIAkJUGFja2V0SW5kZXggPSBscC0+TmV4dFJjdlBhY2tldEluZGV4OwotCQlwUGFja2V0ID0KLQkJICAgICh1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkgICAgUmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CisJCXBQYWNrZXQgPSBscC0+UmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCpwUGFja2V0KTsKIAl9CiAKLQkvKiBNYWtlIHN1cmUgQSBhbmQgQiBhcmUgYXZhaWxhYmxlIHRvIGhhcmR3YXJlLiAqLwotCU9VVEwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2Nyw4ICs3NDksNyBAQAogCQkJCSAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9pbnRlcnJ1cHRcbiIpOwpAQCAtNzgwLDExICs3NjEsMTEgQEAKIAlldm1fc2FhOTczMF9jbGVhcl9sYW5faW50KGxwKTsKIAogCS8qIFNlcnZpY2UgcGVuZGluZyB0cmFuc21pdCBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYgRE1BX1NUQVRVU19NQUNfVFhfSU5UKQorCWlmIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cykgJiBETUFfU1RBVFVTX01BQ19UWF9JTlQpCiAJCWxhbl9zYWE5NzMwX3R4KGRldik7CiAKIAkvKiBTZXJ2aWNlIHBlbmRpbmcgcmVjZWl2ZSBpbnRlcnJ1cHRzLiAqLwotCWlmIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKKwlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYKIAkgICAgKERNQV9TVEFUVVNfTUFDX1JYX0lOVCB8IERNQV9TVEFUVVNfUlhfSU5UIHwKIAkgICAgIERNQV9TVEFUVVNfUlhfVE9fSU5UKSkgbGFuX3NhYTk3MzBfcngoZGV2KTsKIApAQCAtNzk0LDE1ICs3NzUsOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuX2ZhaWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQogc3RhdGljIGludCBsYW5fc2FhOTczMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogQXNzb2NpYXRlIElSUSB3aXRoIGxhbl9zYWE5NzMwX2ludGVycnVwdCAqLwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJmxhbl9zYWE5NzMwX2ludGVycnVwdCwgMCwgIlNBQTk3MzAgRXRoIiwKQEAgLTgzNCwxNSArODA5LDEzIEBACiAJaW50IFBhY2tldEluZGV4OwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCJsYW5fc2FhOTczMF93cml0ZTogc2tiPSUwOHhcbiIsCi0JCSAgICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoImxhbl9zYWE5NzMwX3dyaXRlOiBza2I9JXBcbiIsIHNrYik7CiAKIAlCdWZmZXJJbmRleCA9IGxwLT5OZXh0VHhtQnVmZmVySW5kZXg7CiAJUGFja2V0SW5kZXggPSBscC0+TmV4dFR4bVBhY2tldEluZGV4OwogCi0JdHhfc3RhdHVzID0KLQkgICAgbGUzMl90b19jcHUoKih1bnNpZ25lZCBpbnQgKikgbHAtPgotCQkJVHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0pOworCXR4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF0KKwkJCQkJCQkgICAgICBbUGFja2V0SW5kZXhdKTsKIAlpZiAoKHR4X3N0YXR1cyAmIFRYX1NUQVRfQ1RMX09XTkVSX01TSykgIT0KIAkgICAgKFRYU0ZfRU1QVFkgPDwgVFhfU1RBVF9DVExfT1dORVJfU0hGKSkgewogCQlpZiAobGFuX3NhYTk3MzBfZGVidWcgPiA0KQpAQCAtODU4LDI5ICs4MzEsMjkgQEAKIAkJbHAtPk5leHRUeG1CdWZmZXJJbmRleCBePSAxOwogCX0KIAotCXBiUGFja2V0RGF0YSA9Ci0JICAgICh1bnNpZ25lZCBjaGFyICopIGxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKKwlwYlBhY2tldERhdGEgPSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CiAJcGJQYWNrZXREYXRhICs9IDQ7CiAKIAkvKiBjb3B5IHRoZSBiaXRzICovCiAJbWVtY3B5KHBiUGFja2V0RGF0YSwgcGJEYXRhLCBsZW4pOwogCiAJLyogU2V0IHRyYW5zbWl0IHN0YXR1cyBmb3IgaGFyZHdhcmUgKi8KLQkqKHVuc2lnbmVkIGludCAqKSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0gPQotCSAgICBjcHVfdG9fbGUzMigoVFhTRl9SRUFEWSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpIHwKLQkJCShUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwgVFhfU1RBVF9DVExfRlJBTUVfU0hGKQotCQkJfCAobGVuIDw8IFRYX1NUQVRfQ1RMX0xFTkdUSF9TSEYpKTsKKwkqKHVuc2lnbmVkIGludCAqKWxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XSA9CisJCWNwdV90b19sZTMyKChUWFNGX1JFQURZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikgfAorCQkJICAgIChUWF9TVEFUX0NUTF9JTlRfQUZURVJfVFggPDwKKwkJCSAgICAgVFhfU1RBVF9DVExfRlJBTUVfU0hGKSB8CisJCQkgICAgKGxlbiA8PCBUWF9TVEFUX0NUTF9MRU5HVEhfU0hGKSk7CiAKLQkvKiBTZXQgaGFyZHdhcmUgdHggYnVmZmVyLiAqLwotCU9VVEwoT0syVVNFX1RYX0EgfCBPSzJVU0VfVFhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOworCS8qIE1ha2Ugc3VyZSBBIG9yIEIgaXMgYXZhaWxhYmxlIHRvIGhhcmR3YXJlIGFzIGFwcHJvcHJpYXRlLiAqLworCW91dGwoQnVmZmVySW5kZXggPyBPSzJVU0VfVFhfQiA6IE9LMlVTRV9UWF9BLAorCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAkvKiBUcmFuc21pdHRlciB0aW1lb3V0LCBzZXJpb3VzIHByb2JsZW1zICovCiAJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtODg5LDIwICs4NjIsMTkgQEAKIAlsYW5fc2FhOTczMF9yZXN0YXJ0KGxwKTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNrYmxlbjsKIAlpbnQgbGVuOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCJTZW5kIHBhY2tldDogc2tiPSUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHNrYik7CisJCXByaW50aygiU2VuZCBwYWNrZXQ6IHNrYj0lcFxuIiwgc2tiKTsKIAogCXNrYmxlbiA9IHNrYi0+bGVuOwogCkBAIC05MTIsOCArODg0LDcgQEAKIAogCWlmIChsYW5fc2FhOTczMF93cml0ZShscCwgc2tiLCBza2JsZW4pKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCXByaW50aygiRXJyb3Igd2hlbiB3cml0aW5nIHBhY2tldCB0byBjb250cm9sbGVyOiBza2I9JTA4eFxuIiwKLQkJICAgICAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoIkVycm9yIHdoZW4gd3JpdGluZyBwYWNrZXQgdG8gY29udHJvbGxlcjogc2tiPSVwXG4iLCBza2IpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05MjIsNyArODkzLDcgQEAKIAlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTkzMiw4ICs5MDMsNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF9jbG9zZTpcbiIpOwpAQCAtOTU1LDMzICs5MjUsMzEgQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGFuX3NhYTk3MzBfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlCiAJCQkJCQkgICAgICAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXJldHVybiAmbHAtPnN0YXRzOwogfQogCiBzdGF0aWMgdm9pZCBsYW5fc2FhOTczMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogU3RvcCB0aGUgY29udHJvbGxlciAqLwogCWxhbl9zYWE5NzMwX3N0b3AobHApOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBhY2NlcHQgYWxsIHBhY2tldHMgKi8KLQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfU1RBVElPTl9BQ0MgfAorCQlvdXRsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9TVEFUSU9OX0FDQyB8CiAJCSAgICAgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwgQ0FNX0NPTlRST0xfQlJPQURfQUNDLAogCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAl9IGVsc2UgewogCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQkJLyogYWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwotCQkJT1VUTChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfR1JPVVBfQUNDIHwKKwkJCW91dGwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0dST1VQX0FDQyB8CiAJCQkgICAgIENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpOwogCQl9IGVsc2UgewotCQkJLyogCisJCQkvKgogCQkJICogV2lsbCBoYW5kbGUgdGhlIG11bHRpY2FzdCBzdHVmZiBsYXRlci4gLWNhcnN0ZW5sCiAJCQkgKi8KIAkJfQpAQCAtOTkzLDkxICs5NjEsODYgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHNhYTk3MzBfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgaWYgKGRldikgewotICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JCWtmcmVlKGRldi0+cHJpdik7Ci0gICAgICAgICAgICAgICAgZnJlZV9uZXRkZXYoZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwotICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci0gICAgICAgIH0KKwlpZiAoZGV2KSB7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCWxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhwZGV2LCBscCk7CisJCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworCQlpb3VubWFwKGxwLT5ldm1fc2FhOTczMF9yZWdzKTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQogfQogCiAKLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyLCBpbnQgaXJxKQorc3RhdGljIGludCBsYW5fc2FhOTczMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCXVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgaXJxKQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscDsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgZXRoZXJuZXRfYWRkcls2XTsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3Blbl9mYWlsOworCWlmIChnZXRfZXRoZXJuZXRfYWRkcihldGhlcm5ldF9hZGRyKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CiAKLQlpZiAoZ2V0X2V0aGVybmV0X2FkZHIoZXRoZXJuZXRfYWRkcikpCi0JCXJldHVybiAtRU5PREVWOwotCQogCW1lbWNweShkZXYtPmRldl9hZGRyLCBldGhlcm5ldF9hZGRyLCA2KTsKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKIAlkZXYtPmlycSA9IGlycTsKLQkKLQkvKiAKLQkgKiBNYWtlIGNlcnRhaW4gdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IHRoZSBjb250cm9sbGVyIGFyZSBhbGlnbmVkIAotCSAqIGFuZCBETUFibGUuIAotCSAqLwotCS8qCi0JICogIFhYWDogdGhhdCBpcyBvYnZpb3VzbHkgYnJva2VuIC0ga2ZyZWUoKSB3b24ndCBiZSBoYXBweSB3aXRoIHVzLgotCSAqLwotCWxwID0gKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopICgoKHVuc2lnbmVkIGxvbmcpCi0JCQkJCSAgICAgIGttYWxsb2Moc2l6ZW9mKCpscCkgKyA3LAotCQkJCQkJICAgICAgR0ZQX0RNQSB8IEdGUF9LRVJORUwpCi0JCQkJCSAgICAgICsgNykgJiB+Nyk7CiAKLQlpZiAoIWxwKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldi0+cHJpdiA9IGxwOwotCW1lbXNldChscCwgMCwgc2l6ZW9mKCpscCkpOworCWxwLT5wY2lfZGV2ID0gcGRldjsKIAogCS8qIFNldCBTQUE5NzMwIExBTiBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSAodF9sYW5fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfTEFOX1JFR1NfQUREUik7CisJbHAtPmxhbl9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfTEFOX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9MQU5fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5sYW5fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCS8qIFNldCBTQUE5NzMwIEVWTSBiYXNlIGFkZHJlc3MuICovCi0JbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSAodF9ldm1fc2FhOTczMF9yZWdtYXAgKikgKGlvYWRkciArCi0JCQkJCQkJIFNBQTk3MzBfRVZNX1JFR1NfQUREUik7CisJbHAtPmV2bV9zYWE5NzMwX3JlZ3MgPSBpb3JlbWFwKGlvYWRkciArIFNBQTk3MzBfRVZNX1JFR1NfQUREUiwKKwkJCQkgICAgICAgU0FBOTczMF9FVk1fUkVHU19TSVpFKTsKKwlpZiAoIWxwLT5ldm1fc2FhOTczMF9yZWdzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2lvdW5tYXBfbGFuOworCX0KIAogCS8qIEFsbG9jYXRlIExBTiBSWC9UWCBmcmFtZSBidWZmZXIgc3BhY2UuICovCi0JLyogRklYTUU6IGEgbGVhayAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfYWxsb2NhdGVfYnVmZmVycyhscCkpKQotCQlnb3RvIG91dDsKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMocGRldiwgbHApKSkKKwkJZ290byBvdXRfaW91bm1hcDsKIAogCS8qIFN0b3AgTEFOIGNvbnRyb2xsZXIuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9zdG9wKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX3N0b3AobHApKSkKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJLyogSW5pdGlhbGl6ZSBDQU0gcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY2FtX2luaXQoZGV2KSkpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CiAKIAkvKiBJbml0aWFsaXplIE1JSSByZWdpc3RlcnMuICovCiAJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9taWlfaW5pdChscCkpKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwogCiAJLyogSW5pdGlhbGl6ZSBjb250cm9sIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChscCkpKSAKLQkJZ290byBvdXQ7Ci0gICAgICAgIAorCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfY29udHJvbF9pbml0KGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIExvYWQgQ0FNIHJlZ2lzdGVycy4gKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpIAotCQlnb3RvIG91dDsKLQkKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9sb2FkKGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIEluaXRpYWxpemUgRE1BIGNvbnRleHQgcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfZG1hX2luaXQobHApKSkKLQkJZ290byBvdXQ7Ci0JCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7Ci0JCQorCiAJZGV2LT5vcGVuID0gbGFuX3NhYTk3MzBfb3BlbjsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhbl9zYWE5NzMwX3N0YXJ0X3htaXQ7CiAJZGV2LT5zdG9wID0gbGFuX3NhYTk3MzBfY2xvc2U7CkBAIC0xMDg2LDQ0ICsxMDQ5LDQzIEBACiAJZGV2LT50eF90aW1lb3V0ID0gbGFuX3NhYTk3MzBfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKEhaID4+IDEpOwogCWRldi0+ZG1hID0gMDsKLQkKLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldiAoZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OworCiAJcmV0dXJuIDA7CiAKLSBvdXQ6Ci0Ja2ZyZWUoZGV2LT5wcml2KTsKK291dF9mcmVlX2NvbnNpc3RlbnQ6CisJbGFuX3NhYTk3MzBfZnJlZV9idWZmZXJzKHBkZXYsIGxwKTsKK291dF9pb3VubWFwOgorCWlvdW5tYXAobHAtPmV2bV9zYWE5NzMwX3JlZ3MpOworb3V0X2lvdW5tYXBfbGFuOgorCWlvdW5tYXAobHAtPmxhbl9zYWE5NzMwX3JlZ3MpOworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2FhOTczMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCBwY2lfaW9hZGRyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgcGNpX2lvYWRkcjsKIAlpbnQgZXJyOwogCiAJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gMSkKIAkJcHJpbnRrKCJzYWE5NzMwLmM6IFBDSSBiaW9zIGlzIHByZXNlbnQsIGNoZWNraW5nIGZvciBkZXZpY2VzLi4uXG4iKTsKIAotCWVyciA9IC1FTk9NRU07Ci0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoMCk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0OwotCi0JU0VUX01PRFVMRV9PV05FUihkZXYpOwotCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0gICAgICAgIGlmIChlcnIpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDE7Ci0gICAgICAgIH0KKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9NT0RVTEVfTkFNRSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKLQkJZ290byBvdXQyOworCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJcGNpX2lycV9saW5lID0gcGRldi0+aXJxOwpAQCAtMTEzMiw0OSArMTA5NCw1NCBAQAogCXBjaV9pb2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKLQlwcmludGsoIkZvdW5kIFNBQTk3MzAgKFBDSSkgYXQgJSN4LCBpcnEgJWQuXG4iLAorCXByaW50aygiRm91bmQgU0FBOTczMCAoUENJKSBhdCAlbHgsIGlycSAlZC5cbiIsCiAJICAgICAgIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAKLQllcnIgPSBsYW5fc2FhOTczMF9pbml0KGRldiwgcGNpX2lvYWRkciwgcGNpX2lycV9saW5lKTsKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUpKTsKKwlpZiAoIWRldikKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OworCisJZXJyID0gbGFuX3NhYTk3MzBfaW5pdChkZXYsIHBkZXYsIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CiAJaWYgKGVycikgewotCQlwcmludGsoIkxhbiBpbml0IGZhaWxlZCIpOwotCQlnb3RvIG91dDI7CisJCXByaW50aygiTEFOIGluaXQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVfbmV0ZGV2OwogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAJcmV0dXJuIDA7Ci0JCi1vdXQyOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLW91dDE6CisKK291dF9mcmVlX25ldGRldjoKIAlmcmVlX25ldGRldihkZXYpOworb3V0X2Rpc2FibGVfcGRldjoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiBvdXQ6CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJldHVybiBlcnI7CiB9CiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNhYTk3MzBfZHJpdmVyID0gewotCS5uYW1lICAgICAgICAgICA9IERSVl9NT0RVTEVfTkFNRSwKLQkuaWRfdGFibGUgICAgICAgPSBzYWE5NzMwX3BjaV90YmwsCi0JLnByb2JlICAgICAgICAgID0gc2FhOTczMF9pbml0X29uZSwKLQkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAorCS5uYW1lCQk9IERSVl9NT0RVTEVfTkFNRSwKKwkuaWRfdGFibGUJPSBzYWE5NzMwX3BjaV90YmwsCisJLnByb2JlCQk9IHNhYTk3MzBfaW5pdF9vbmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzYWE5NzMwX3JlbW92ZV9vbmUpLAogfTsKIAogCiBzdGF0aWMgaW50IF9faW5pdCBzYWE5NzMwX2luaXQodm9pZCkKIHsKLSAgICAgICAgcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmc2FhOTczMF9kcml2ZXIpOworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhYTk3MzBfY2xlYW51cCh2b2lkKQogewotICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhYTk3MzBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2FhOTczMF9pbml0KTsKIG1vZHVsZV9leGl0KHNhYTk3MzBfY2xlYW51cCk7CiAKLQotCitNT0RVTEVfQVVUSE9SKCJSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBOTczMCBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggNzRkNWYxYS4uYzkxZTJlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTIxODMsOSArMjE4Myw4IEBACiAgKgkwIC0tPiB0aGVyZSBpcyBhIGRldmljZQogICoJYW55dGhpbmcgZWxzZSwgZXJyb3IKICAqLwotc3RhdGljIGludCBzbWNfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl1bnNpZ25lZCBpbnQgX19pb21lbSAqYWRkcjsKQEAgLTIyMTIsNyArMjIxMSw3IEBACiAJCWdvdG8gb3V0X3JlbGVhc2VfaW87CiAJfQogCVNFVF9NT0RVTEVfT1dORVIobmRldik7Ci0JU0VUX05FVERFVl9ERVYobmRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAogCW5kZXYtPmRtYSA9ICh1bnNpZ25lZCBjaGFyKS0xOwogCW5kZXYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0yMjMzLDcgKzIyMzIsNyBAQAogCQlnb3RvIG91dF9yZWxlYXNlX2F0dHJpYjsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAlyZXQgPSBzbWNfcHJvYmUobmRldiwgYWRkcik7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIG91dF9pb3VubWFwOwpAQCAtMjI0OSw3ICsyMjQ4LDcgQEAKIAlyZXR1cm4gMDsKIAogIG91dF9pb3VubWFwOgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWlvdW5tYXAoYWRkcik7CiAgb3V0X3JlbGVhc2VfYXR0cmliOgogCXNtY19yZWxlYXNlX2F0dHJpYihwZGV2KTsKQEAgLTIyNjMsMTQgKzIyNjIsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNtY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21jX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzbWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCkBAIC0yMjk1LDkgKzIyOTMsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtY19kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc21jX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG5kZXYpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKQEAgLTIzMDksMTQgKzIzMDcsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbWNfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNtY19kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobmRldikgewogCQlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwotCQlzbWNfZW5hYmxlX2RldmljZShwZGV2KTsKKwkJc21jX2VuYWJsZV9kZXZpY2UoZGV2KTsKIAkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKIAkJCXNtY19yZXNldChuZGV2KTsKIAkJCXNtY19lbmFibGUobmRldik7CkBAIC0yMzI4LDEzICsyMzI1LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbWNfZHJpdmVyID0gewotCS5uYW1lCQk9IENBUkROQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc21jX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc21jX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IHNtY19kcnZfcmVtb3ZlLAogCS5zdXNwZW5kCT0gc21jX2Rydl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc21jX2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNtY19pbml0KHZvaWQpCkBAIC0yMzQ4LDEyICsyMzQ2LDEyIEBACiAjZW5kaWYKICNlbmRpZgogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc21jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc21jX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbWNfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21jX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNtY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggODE3ZjIwMC4uYTEwY2QxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTI4OSw2ICsyODksMzggQEAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKIAorI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMVgwMCkKKworI2luY2x1ZGUgPGF1MXh4eC5oPgorCisvKiBXZSBjYW4gb25seSBkbyAxNi1iaXQgcmVhZHMgYW5kIHdyaXRlcyBpbiB0aGUgc3RhdGljIG1lbW9yeSBzcGFjZS4gKi8KKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkwCisjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKKyNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAorI2RlZmluZSBTTUNfSU9fU0hJRlQJCTAKKyNkZWZpbmUgU01DX05PV0FJVAkJMQorCisjZGVmaW5lIFNNQ19pbncoYSwgcikJCWF1X3JlYWR3KCh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQorI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlcCisJZG8gewlcCisJCXVuc2lnbmVkIGxvbmcgX2EgPSAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKTsgXAorCQlpbnQgX2wgPSAobCk7IFwKKwkJdTE2ICpfcCA9ICh1MTYgKikocCk7IFwKKwkJd2hpbGUgKF9sLS0gPiAwKSBcCisJCQkqX3ArKyA9IGF1X3JlYWR3KF9hKTsgXAorCX0gd2hpbGUoMCkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJYXVfd3JpdGV3KHYsICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpKQorI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJXAorCWRvIHsJXAorCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKKwkJaW50IF9sID0gKGwpOyBcCisJCWNvbnN0IHUxNiAqX3AgPSAoY29uc3QgdTE2ICopKHApOyBcCisJCXdoaWxlIChfbC0tID4gMCkgXAorCQkJYXVfd3JpdGV3KCpfcCsrICwgX2EpOyBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIHNldF9pcnFfdHlwZShpcnEsIHR5cGUpIGRvIHt9IHdoaWxlICgwKQorCiAjZWxzZQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IGM3OTZmNDEuLjBkNzY1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTIyOTAsNyArMjI5MCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzcGlkZXJfbmV0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gc3BpZGVyX25ldF9kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUJPSBzcGlkZXJfbmV0X3BjaV90YmwsCiAJLnByb2JlCQk9IHNwaWRlcl9uZXRfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwppbmRleCBkMDRjOTE4Li40Zjc1Njk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKQEAgLTM0NCw5ICszNDQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnByb3Rlb25fZGV2W0lTQVRSX01BWF9BREFQVEVSU107CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHJvdGVvbiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwcm90ZW9uX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHJvdGVvbiIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHByb3Rlb25faW5pdCh2b2lkKQpAQCAtMzU1LDcgKzM1Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTM3Miw3ICszNzMsNyBAQAogCQllcnIgPSBzZXR1cF9jYXJkKGRldiwgJnBkZXYtPmRldik7CiAJCWlmICghZXJyKSB7CiAJCQlwcm90ZW9uX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtMzk5LDE3ICs0MDAsMTcgQEAKIAkJCiAJCWlmICghcGRldikKIAkJCWNvbnRpbnVlOwotCQlkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisJCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgUFJPVEVPTl9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChwcm90ZW9uX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwppbmRleCA3MmNmNzA4Li5kNmJhNDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYwpAQCAtMzU0LDkgKzM1NCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2tfaXNhX2RldltJU0FUUl9NQVhfQURBUFRFUlNdOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2tpc2EiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2tfaXNhX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2tpc2EiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBza19pc2FfaW5pdCh2b2lkKQpAQCAtMzY1LDcgKzM2Niw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlpbnQgaSwgbnVtID0gMCwgZXJyID0gMDsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zODIsNyArMzgzLDcgQEAKIAkJZXJyID0gc2V0dXBfY2FyZChkZXYsICZwZGV2LT5kZXYpOwogCQlpZiAoIWVycikgewogCQkJc2tfaXNhX2RldltpXSA9IHBkZXY7Ci0JCQlkZXZfc2V0X2RydmRhdGEoJnNrX2lzYV9kZXZbaV0tPmRldiwgZGV2KTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNrX2lzYV9kZXZbaV0sIGRldik7CiAJCQkrK251bTsKIAkJfSBlbHNlIHsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwpAQCAtNDA5LDE3ICs0MTAsMTcgQEAKIAogCQlpZiAoIXBkZXYpCiAJCQljb250aW51ZTsKLQkJZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCQlkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFNLX0lTQV9JT19FWFRFTlQpOwogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAkJZnJlZV9kbWEoZGV2LT5kbWEpOwogCQl0bXNkZXZfdGVybShkZXYpOwogCQlmcmVlX25ldGRldihkZXYpOwotCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKIAl9Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2tfaXNhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggNzE4Nzk1OC4uMDBlNTUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0zMzAsNyArMzMwLDcgQEAKIAogY29uZmlnIEFUTUVMCiAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MHggY2hpcHNldCAgODAyLjExYiBzdXBwb3J0IgotICAgICAgZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgRVhQRVJJTUVOVEFMCisgICAgICBkZXBlbmRzIG9uIE5FVF9SQURJTwogICAgICAgc2VsZWN0IEZXX0xPQURFUgogICAgICAgc2VsZWN0IENSQzMyCiAgICAgICAgLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKaW5kZXggYTNlMjM1Mi4uNWU1M2M1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAiYXRtZWwuaCIKIAogI2RlZmluZSBEUklWRVJfTUFKT1IgMAotI2RlZmluZSBEUklWRVJfTUlOT1IgOTYKKyNkZWZpbmUgRFJJVkVSX01JTk9SIDk4CiAKIE1PRFVMRV9BVVRIT1IoIlNpbW9uIEtlbGxleSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTdXBwb3J0IGZvciBBdG1lbCBhdDc2YzUweCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgY2FyZHMuIik7CkBAIC0xNTA0LDcgKzE1MDQsNyBAQAogICAgICAgICByZXR1cm4gbGVuOwogfQogCi1zdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIGludCBwb3J0LCBjb25zdCBBdG1lbEZXVHlwZSBmd190eXBlLCAgCitzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKCB1bnNpZ25lZCBzaG9ydCBpcnEsIHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwgIAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpzeXNfZGV2LCBpbnQgKCpjYXJkX3ByZXNlbnQpKHZvaWQgKiksIHZvaWQgKmNhcmQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE2MDUsOCArMTYwNSw4IEBACiAJCWdvdG8gZXJyX291dF9mcmVlOwogCX0KIAotCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0kgJiYKLQkgICAgIXJlcXVlc3RfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQsIGRldi0+bmFtZSApKSB7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIsIAorCQkJICAgIHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDQ0FSRCA/ICAiYXRtZWxfY3MiIDogImF0bWVsX3BjaSIpKSB7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCQpAQCAtMTYyMiwxNSArMTYyMiwxNiBAQAogCQogCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkgKCJkcml2ZXIvYXRtZWwiLCAwLCBOVUxMLCBhdG1lbF9yZWFkX3Byb2MsIHByaXYpOwkKIAkKLQlwcmludGsoS0VSTl9JTkZPICIlczogQXRtZWwgYXQ3NmM1MHggd2lyZWxlc3MuIFZlcnNpb24gJWQuJWQgc2ltb25AdGhla2VsbGV5cy5vcmcudWtcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgRFJJVkVSX01BSk9SLCBEUklWRVJfTUlOT1IpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdG1lbCBhdDc2YzUweC4gVmVyc2lvbiAlZC4lZC4gTUFDICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLAorCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdICk7CiAJCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCXJldHVybiBkZXY7CiAJCiAgZXJyX291dF9yZXM6Ci0JaWYgKHByaXYtPmJ1c190eXBlID09IEJVU19UWVBFX1BDSSkKLQkgICAgICAgIHJlbGVhc2VfcmVnaW9uKCBkZXYtPmJhc2VfYWRkciwgNjQgKTsKKwlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKICBlcnJfb3V0X2lycToKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKICBlcnJfb3V0X2ZyZWU6CkBAIC0xNjQwLDcgKzE2NDEsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGluaXRfYXRtZWxfY2FyZCk7CiAKLXZvaWQgc3RvcF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmcmVlcmVzKQordm9pZCBzdG9wX2F0bWVsX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJCQpAQCAtMTY1NCwxMCArMTY1NSw3IEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9hdG1lbCIsIE5VTEwpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCWtmcmVlKHByaXYtPmZpcm13YXJlKTsKLQlpZiAoZnJlZXJlcykgewotCQkvKiBQQ01DSUEgZnJlZXMgdGhpcyBzdHVmZiwgc28gb25seSBmb3IgUENJICovCi0JICAgICAgICByZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgNjQpOwotICAgICAgICB9CisJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDMyKTsKIAlmcmVlX25ldGRldihkZXYpOwogfQogCkBAIC0xODEwLDkgKzE4MDgsOSBAQAogCX0KIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKQogCQlwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkID0gMTsKLQlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKQorICAgICAgIAlpZihkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSAKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7Ci0JCisgICAgICAgCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIH0KIApAQCAtMTgyNywxMSArMTgyNSwxMiBAQAogCQogCWlmICghcHJpdi0+d2VwX2lzX29uKQogCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQllbHNlIGlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQotCQlkd3JxLT5mbGFncyA9IElXX0VOQ09ERV9SRVNUUklDVEVEOwotCWVsc2UKLQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKLQkJCisJZWxzZSB7CisJCWlmIChwcml2LT5leGNsdWRlX3VuZW5jcnlwdGVkKQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKKwkJZWxzZQorCQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfT1BFTjsKKwl9CiAJCS8qIFdoaWNoIGtleSBkbyB3ZSB3YW50ID8gLTEgLT4gdHggaW5kZXggKi8KIAlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IDQpCiAJCWluZGV4ID0gcHJpdi0+ZGVmYXVsdF9rZXk7CkBAIC0yNjQ1LDggKzI2NDQsOCBAQAogCX0gCiB9CiAKLSAKLXN0YXRpYyB2b2lkIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTggKmNoYWxsZW5nZSwgaW50IGNoYWxsZW5nZV9sZW4pCisKK3N0YXRpYyB2b2lkIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiwgdTE2IHN5c3RlbSwgdTggKmNoYWxsZW5nZSwgaW50IGNoYWxsZW5nZV9sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGVhZGVyOwogCXN0cnVjdCBhdXRoX2JvZHkgYXV0aDsKQEAgLTI2NTgsMTQgKzI2NTcsMTEgQEAKIAltZW1jcHkoaGVhZGVyLmFkZHIyLCBwcml2LT5kZXYtPmRldl9hZGRyLCA2KTsKIAltZW1jcHkoaGVhZGVyLmFkZHIzLCBwcml2LT5DdXJyZW50QlNTSUQsIDYpOwogCQotCWlmIChwcml2LT53ZXBfaXNfb24pIHsKLQkJYXV0aC5hbGcgPSBjcHVfdG9fbGUxNihDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZKTsgCisJaWYgKHByaXYtPndlcF9pc19vbiAmJiBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtICE9IDEpIAogCQkvKiBubyBXRVAgZm9yIGF1dGhlbnRpY2F0aW9uIGZyYW1lcyB3aXRoIFRyU2VxTm8gMSAqLwotCQlpZiAocHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSAhPSAxKQotCQkJaGVhZGVyLmZyYW1lX2N0bCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQl9IGVsc2UgewotCQlhdXRoLmFsZyA9IGNwdV90b19sZTE2KEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNKTsKLQl9CisgICAgICAgICAgICAgICAgaGVhZGVyLmZyYW1lX2N0bCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkKKwlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7IAogCiAJYXV0aC5zdGF0dXMgPSAwOwogCWF1dGgudHJhbnNfc2VxID0gY3B1X3RvX2xlMTYocHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSk7CkBAIC0yODM0LDYgKzI4MzAsNyBAQAogCXN0cnVjdCBhdXRoX2JvZHkgKmF1dGggPSAoc3RydWN0IGF1dGhfYm9keSAqKXByaXYtPnJ4X2J1ZjsKIAl1MTYgc3RhdHVzID0gbGUxNl90b19jcHUoYXV0aC0+c3RhdHVzKTsKIAl1MTYgdHJhbnNfc2VxX25vID0gbGUxNl90b19jcHUoYXV0aC0+dHJhbnNfc2VxKTsKKwl1MTYgc3lzdGVtID0gbGUxNl90b19jcHUoYXV0aC0+YWxnKTsKIAkKIAlpZiAoc3RhdHVzID09IEM4MDIxMV9NR01UX1NDX1N1Y2Nlc3MgJiYgIXByaXYtPndlcF9pc19vbikgeyAKIAkJLyogbm8gV0VQICovCkBAIC0yODU1LDcgKzI4NTIsNyBAQAogCQkJCQogCQlpZiAodHJhbnNfc2VxX25vID09IDB4MDAwMiAmJgogCQkgICAgYXV0aC0+ZWxfaWQgPT0gQzgwMjExX01HTVRfRWxlbWVudElEX0NoYWxsZW5nZVRleHQpIHsKLQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBhdXRoLT5jaGFsbF90ZXh0LCBhdXRoLT5jaGFsbF90ZXh0X2xlbik7CisJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgc3lzdGVtLCBhdXRoLT5jaGFsbF90ZXh0LCBhdXRoLT5jaGFsbF90ZXh0X2xlbik7CiAJCQlyZXR1cm47CiAJCX0KIAkJCkBAIC0yODcyLDE0ICsyODY5LDIwIEBACiAJCX0KIAl9CQkJCiAJCi0JaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19BdXRoQWxnTm90U3VwcG9ydGVkICYmIHByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgewotCQlpbnQgYnNzX2luZGV4OwotCQkKLQkJcHJpdi0+QlNTaW5mb1soaW50KShwcml2LT5jdXJyZW50X0JTUyldLmNoYW5uZWwgfD0gMHg4MDsKLQkJCi0JCWlmICgoYnNzX2luZGV4ICA9IHJldHJpZXZlX2Jzcyhwcml2KSkgIT0gLTEpIHsKLQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7Ci0JCQlyZXR1cm47CisJaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19BdXRoQWxnTm90U3VwcG9ydGVkKSB7CisJCS8qIERvIG9wZW5zeXN0ZW0gZmlyc3QsIHRoZW4gdHJ5IHNoYXJlZGtleSAqLworCQlpZiAoc3lzdGVtID09ICBDODAyMTFfTUdNVF9BQU5fT1BFTlNZU1RFTSkgeworCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOworCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVksIE5VTEwsIDApOworCQl9IGVsc2UgaWYgKHByaXYtPmNvbm5lY3RfdG9fYW55X0JTUykgeworCQkJaW50IGJzc19pbmRleDsKKwkJCQorCQkJcHJpdi0+QlNTaW5mb1soaW50KShwcml2LT5jdXJyZW50X0JTUyldLmNoYW5uZWwgfD0gMHg4MDsKKwkJCQorCQkJaWYgKChic3NfaW5kZXggID0gcmV0cmlldmVfYnNzKHByaXYpKSAhPSAtMSkgeworCQkJCWF0bWVsX2pvaW5fYnNzKHByaXYsIGJzc19pbmRleCk7CisJCQkJcmV0dXJuOworCQkJfQogCQl9CiAJfQogCQpAQCAtMzIwNSw3ICszMjA4LDcgQEAKIAkJICBwcml2LT5BdXRoZW50aWNhdGlvblJlcXVlc3RSZXRyeUNudCsrOwogCQkgIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7CiAJCSAgbW9kX3RpbWVyKCZwcml2LT5tYW5hZ2VtZW50X3RpbWVyLCBqaWZmaWVzICsgTUdNVF9KSUZGSUVTKTsKLQkJICBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgTlVMTCwgMCk7CisJCSAgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9PUEVOU1lTVEVNLCBOVUxMLCAwKTsKIAkgIH0KIAkgIAogCSAgYnJlYWs7CkBAIC0zMzEyLDcgKzMzMTUsNyBAQAogCQkJCQogCQkJCW1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7CiAJCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAwMTsKLQkJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgTlVMTCwgMCk7CisJCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIEM4MDIxMV9NR01UX0FBTl9TSEFSRURLRVksIE5VTEwsIDApOwogCQkJfQogCQkJcmV0dXJuOwogCQl9CkBAIC0zNDgyLDExICszNDg1LDYgQEAKIAkJCXByaW50ayhLRVJOX0FMRVJUICIlczogKioqIEludmFsaWQgTUFDIGFkZHJlc3MuIFVQR1JBREUgRmlybXdhcmUgKioqKlxuIiwgZGV2LT5uYW1lKTsKIAkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZWZhdWx0X21hYywgNik7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBhZGRyZXNzICUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0gKTsKLQkJCiAJfQogCQogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5oCmluZGV4IDgyNTAwMGUuLmI5YjNlNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuaApAQCAtMzUsOSArMzUsOSBAQAogCUFUTUVMX0ZXX1RZUEVfNTA2CiB9IEF0bWVsRldUeXBlOwogCi1zdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0LCBpbnQsIGNvbnN0IEF0bWVsRldUeXBlLCBzdHJ1Y3QgZGV2aWNlICosIAorc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZywgY29uc3QgQXRtZWxGV1R5cGUsIHN0cnVjdCBkZXZpY2UgKiwgCiAJCQkJICAgIGludCAoKnByZXNlbnRfZnVuYykodm9pZCAqKSwgdm9pZCAqICk7Ci12b2lkIHN0b3BfYXRtZWxfY2FyZCggc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50ICk7Cit2b2lkIHN0b3BfYXRtZWxfY2FyZCggc3RydWN0IG5ldF9kZXZpY2UgKik7CiBpbnQgYXRtZWxfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCmluZGV4IDFiZDEzMTQuLjE3ZDFmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwpAQCAtNjMsNiArNjMsNyBAQAogICAgYmUgcHJlc2VudCBidXQgZGlzYWJsZWQgLS0gYnV0IGl0IGNhbiB0aGVuIGJlIGVuYWJsZWQgZm9yIHNwZWNpZmljCiAgICBtb2R1bGVzIGF0IGxvYWQgdGltZSB3aXRoIGEgJ3BjX2RlYnVnPSMnIG9wdGlvbiB0byBpbnNtb2QuCiAqLworCiAjaWZkZWYgUENNQ0lBX0RFQlVHCiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwpAQCAtMjg1LDQxICsyODYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBsaXN0IG9mIGNhcmRzIHdlIGtub3cgYWJvdXQgYW5kIHRoZWlyIGZpcm13YXJlIHJlcXVpcmVtZW50cy4KLSAgIEdvIGVpdGhlciBieSBNYW5maWQgb3IgdmVyc2lvbiBzdHJpbmdzLgotICAgQ2FyZHMgbm90IGluIHRoaXMgbGlzdCB3aWxsIG5lZWQgYSBmaXJtd2FyZSBwYXJhbWV0ZXIgdG8gdGhlIG1vZHVsZQotICAgaW4gYWxsIHByb2JhYmlsaXR5LiBOb3RlIHRoYXQgdGhlIFNNQyAyNjMyIFYyIGFuZCBWMyBoYXZlIHRoZSBzYW1lCi0gICBtYW5maWRzLCBzbyB3ZSBpZ25vcmUgdGhvc2UgYW5kIHVzZSB0aGUgdmVyc2lvbjEgc3RyaW5ncy4gKi8KLQotc3RhdGljIHN0cnVjdCB7IAotCWludCBtYW5mLCBjYXJkOwotCWNoYXIgKnZlcjE7Ci0JQXRtZWxGV1R5cGUgZmlybXdhcmU7Ci0JY2hhciAqbmFtZTsKLX0gY2FyZF90YWJsZVtdID0gewotCXsgMCwgMCwgIldMQU4vODAyLjExYiBQQyBDQVJEIiwgQVRNRUxfRldfVFlQRV81MDJELCAiQWN0aW9udGVjIDgwMkNBVDEiIH0sICAKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwMkFSIiwgQVRNRUxfRldfVFlQRV81MDIsICJOb05hbWUtUkZNRCIgfSwgCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDJBUl9EIiwgQVRNRUxfRldfVFlQRV81MDJELCAiTm9OYW1lLXJldkQiIH0sIAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTAyQVJfRSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIk5vTmFtZS1yZXZFIiB9LAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTA0IiwgQVRNRUxfRldfVFlQRV81MDQsICJOb05hbWUtNTA0IiB9LAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTA0QSIsIEFUTUVMX0ZXX1RZUEVfNTA0QV8yOTU4LCAiTm9OYW1lLTUwNGEtMjk1OCIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNF9SIiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwgIk5vTmFtZS01MDQtMjk1OCIgfSwKLQl7IE1BTkZJRF8zQ09NLCAweDA2MjAsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICIzY29tIDNDUldFNjIwOTJCIiB9LCAKLQl7IE1BTkZJRF8zQ09NLCAweDA2OTYsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyXzNDT00sICIzY29tIDNDUlNIUFcxOTYiIH0sIAotCXsgMCwgMCwgIlNNQy8yNjMyVy1WMiIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiU01DIDI2MzJXLVYyIiB9LAotCXsgMCwgMCwgIlNNQy8yNjMyVyIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIlNNQyAyNjMyVy1WMyIgfSwKLQl7IDB4ZDYwMSwgMHgwMDA3LCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNpdGVjb20gV0xBTi0wMTEiIH0sIAotCXsgMHgwMWJmLCAweDMzMDIsIE5VTEwsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkJlbGtpbiBGNUQ2MDIwLVYyIiB9LCAKLQl7IDAsIDAsICJCVC9Wb3lhZ2VyIDEwMjAgTGFwdG9wIEFkYXB0ZXIiLCBBVE1FTF9GV19UWVBFXzUwMiwgIkJUIFZveWFnZXIgMTAyMCIgfSwKLQl7IDAsIDAsICJJRUVFIDgwMi4xMWIvV2lyZWxlc3MgTEFOIFBDIENhcmQiLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNpZW1lbnMgR2lnYXNldCBQQyBDYXJkIElJIiB9LAotCXsgMCwgMCwgIklFRUUgODAyLjExYi9XaXJlbGVzcyBMQU4gQ2FyZCBTIiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCwgIlNpZW1lbnMgR2lnYXNldCBQQyBDYXJkIElJIiB9LAotCXsgMCwgMCwgIkNOZXQvQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgQVRNRUxfRldfVFlQRV81MDJFLCAiQ05ldCBDTldMQy04MTFBUkwiIH0sCi0JeyAwLCAwLCAiV2lyZWxlc3MvUENfQ0FSRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIlBsYW5ldCBXTC0zNTUyIiB9LAotCXsgMCwgMCwgIk9FTS8xMU1icHMgV2lyZWxlc3MgTEFOIFBDIENhcmQgVi0zIiwgQVRNRUxfRldfVFlQRV81MDIsICJPRU0gMTFNYnBzIFdMQU4gUENNQ0lBIENhcmQiIH0sCi0JeyAwLCAwLCAiMTFXQVZFLzExV1A2MTFBTC1FIiwgQVRNRUxfRldfVFlQRV81MDJFLCAiMTFXQVZFIFdhdmVCdWRkeSIgfSwKLQl7IDAsIDAsICJMRy9MVzIxMDBOIiwgQVRNRUxfRldfVFlQRV81MDJFLCAiTEcgTFcyMTAwTiAxMU1icHMgV0xBTiBQQ01DSUEgQ2FyZCIgfSwKLX07Ci0KIHN0YXRpYyB2b2lkIGF0bWVsX2NvbmZpZyhkZXZfbGlua190ICpsaW5rKQogewogCWNsaWVudF9oYW5kbGVfdCBoYW5kbGU7CkBAIC0zMjgsMTAgKzI5NCwxMSBAQAogCWxvY2FsX2luZm9fdCAqZGV2OwogCWludCBsYXN0X2ZuLCBsYXN0X3JldDsKIAl1X2NoYXIgYnVmWzY0XTsKLQlpbnQgY2FyZF9pbmRleCA9IC0xLCBkb25lID0gMDsKLQkKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCAqZGlkOworCiAJaGFuZGxlID0gbGluay0+aGFuZGxlOwogCWRldiA9IGxpbmstPnByaXY7CisJZGlkID0gaGFuZGxlX3RvX2RldihoYW5kbGUpLmRyaXZlcl9kYXRhOwogCiAJREVCVUcoMCwgImF0bWVsX2NvbmZpZygweCVwKVxuIiwgbGluayk7CiAJCkBAIC0zNDAsNTkgKzMwNyw2IEBACiAJdHVwbGUuVHVwbGVEYXRhTWF4ID0gc2l6ZW9mKGJ1Zik7CiAJdHVwbGUuVHVwbGVPZmZzZXQgPSAwOwogCQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9NQU5GSUQ7Ci0JaWYgKHBjbWNpYV9nZXRfZmlyc3RfdHVwbGUoaGFuZGxlLCAmdHVwbGUpID09IDApIHsKLQkJaW50IGk7Ci0JCWNpc3RwbF9tYW5maWRfdCAqbWFuZmlkOwotCQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOwotCQltYW5maWQgPSAmKHBhcnNlLm1hbmZpZCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY2FyZF90YWJsZSkvc2l6ZW9mKGNhcmRfdGFibGVbMF0pOyBpKyspIHsKLQkJCWlmICghY2FyZF90YWJsZVtpXS52ZXIxICYmCi0JCQkgICAgbWFuZmlkLT5tYW5mID09IGNhcmRfdGFibGVbaV0ubWFuZiAmJgotCQkJICAgIG1hbmZpZC0+Y2FyZCA9PSBjYXJkX3RhYmxlW2ldLmNhcmQpIHsKLQkJCQljYXJkX2luZGV4ID0gaTsKLQkJCQlkb25lID0gMTsKLQkJCX0KLQkJfQotCX0KLQotCXR1cGxlLkRlc2lyZWRUdXBsZSA9IENJU1RQTF9WRVJTXzE7Ci0JaWYgKCFkb25lICYmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSAwKSkgewotCQlpbnQgaSwgaiwgazsKLQkJY2lzdHBsX3ZlcnNfMV90ICp2ZXIxOwotCQlDU19DSEVDSyhHZXRUdXBsZURhdGEsIHBjbWNpYV9nZXRfdHVwbGVfZGF0YShoYW5kbGUsICZ0dXBsZSkpOwotCQlDU19DSEVDSyhQYXJzZVR1cGxlLCBwY21jaWFfcGFyc2VfdHVwbGUoaGFuZGxlLCAmdHVwbGUsICZwYXJzZSkpOwotCQl2ZXIxID0gJihwYXJzZS52ZXJzaW9uXzEpOwotCQkKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihjYXJkX3RhYmxlKS9zaXplb2YoY2FyZF90YWJsZVswXSk7IGkrKykgewotCQkJZm9yIChqID0gMDsgaiA8IHZlcjEtPm5zOyBqKyspIHsKLQkJCQljaGFyICpwID0gY2FyZF90YWJsZVtpXS52ZXIxOwotCQkJCWNoYXIgKnEgPSAmdmVyMS0+c3RyW3ZlcjEtPm9mc1tqXV07Ci0JCQkJaWYgKCFwKQotCQkJCQlnb3RvIG1pc21hdGNoOwotCQkJCWZvciAoayA9IDA7IGsgPCBqOyBrKyspIHsKLQkJCQkJd2hpbGUgKCgqcCAhPSAnXDAnKSAmJiAoKnAgIT0gJy8nKSkgcCsrOwotCQkJCQlpZiAoKnAgPT0gJ1wwJykgewotCQkJCQkJaWYgKCpxICE9ICdcMCcpCi0JCQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXArKzsKLQkJCQkJfQotCQkJCX0KLQkJCQl3aGlsZSgoKnEgIT0gJ1wwJykgJiYgKCpwICE9ICdcMCcpICYmIAotCQkJCSAgICAgICgqcCAhPSAnLycpICYmICgqcCA9PSAqcSkpIHArKywgcSsrOwotCQkJCWlmICgoKCpwICE9ICdcMCcpICYmICpwICE9ICcvJykgfHwgKnEgIT0gJ1wwJykKLQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCX0KLQkJCWNhcmRfaW5kZXggPSBpOwotCQkJYnJlYWs7CS8qIGRvbmUgKi8KLQkJCQotCQltaXNtYXRjaDoKLQkJCWogPSAwOyAvKiBkdW1teSBzdG10IHRvIHNodXQgdXAgY29tcGlsZXIgKi8KLQkJfQotCX0JCQotCiAJLyoKIAkgIFRoaXMgcmVhZHMgdGhlIGNhcmQncyBDT05GSUcgdHVwbGUgdG8gZmluZCBpdHMgY29uZmlndXJhdGlvbgogCSAgcmVnaXN0ZXJzLgpAQCAtNTA5LDEyICs0MjMsMTMgQEAKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSAKIAkJaW5pdF9hdG1lbF9jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKIAkJCQlsaW5rLT5pby5CYXNlUG9ydDEsCi0JCQkJY2FyZF9pbmRleCA9PSAtMSA/IEFUTUVMX0ZXX1RZUEVfTk9ORSA6ICBjYXJkX3RhYmxlW2NhcmRfaW5kZXhdLmZpcm13YXJlLAorCQkJCWRpZCA/IGRpZC0+ZHJpdmVyX2luZm8gOiBBVE1FTF9GV19UWVBFX05PTkUsCiAJCQkJJmhhbmRsZV90b19kZXYoaGFuZGxlKSwKIAkJCQljYXJkX3ByZXNlbnQsIAogCQkJCWxpbmspOwogCWlmICghKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2KSAKLQkJZ290byBjc19mYWlsZWQ7CisJCQlnb3RvIGNzX2ZhaWxlZDsKKwkKIAkKIAkvKgogCSAgQXQgdGhpcyBwb2ludCwgdGhlIGRldl9ub2RlX3Qgc3RydWN0dXJlKHMpIG5lZWQgdG8gYmUKQEAgLTUyMywyNiArNDM4LDcgQEAKIAlzdHJjcHkoZGV2LT5ub2RlLmRldl9uYW1lLCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUgKTsKIAlkZXYtPm5vZGUubWFqb3IgPSBkZXYtPm5vZGUubWlub3IgPSAwOwogCWxpbmstPmRldiA9ICZkZXYtPm5vZGU7Ci0JCi0JLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyVzaW5kZXggMHglMDJ4OiBWY2MgJWQuJWQiLAotCSAgICAgICBkZXYtPm5vZGUuZGV2X25hbWUsCi0JICAgICAgIGNhcmRfaW5kZXggPT0gLTEgPyAiIiA6ICBjYXJkX3RhYmxlW2NhcmRfaW5kZXhdLm5hbWUsCi0JICAgICAgIGNhcmRfaW5kZXggPT0gLTEgPyAiIiA6ICIgIiwKLQkgICAgICAgbGluay0+Y29uZi5Db25maWdJbmRleCwKLQkgICAgICAgbGluay0+Y29uZi5WY2MvMTAsIGxpbmstPmNvbmYuVmNjJTEwKTsKLQlpZiAobGluay0+Y29uZi5WcHAxKQotCQlwcmludGsoIiwgVnBwICVkLiVkIiwgbGluay0+Y29uZi5WcHAxLzEwLCBsaW5rLT5jb25mLlZwcDElMTApOwotCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCi0JCXByaW50aygiLCBpcnEgJWQiLCBsaW5rLT5pcnEuQXNzaWduZWRJUlEpOwotCWlmIChsaW5rLT5pby5OdW1Qb3J0czEpCi0JCXByaW50aygiLCBpbyAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQxLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQxK2xpbmstPmlvLk51bVBvcnRzMS0xKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMyKQotCQlwcmludGsoIiAmIDB4JTA0eC0weCUwNHgiLCBsaW5rLT5pby5CYXNlUG9ydDIsCi0JCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDIrbGluay0+aW8uTnVtUG9ydHMyLTEpOwotCXByaW50aygiXG4iKTsKLQkKKwkJCQogCWxpbmstPnN0YXRlICY9IH5ERVZfQ09ORklHX1BFTkRJTkc7CiAJcmV0dXJuOwogCQpAQCAtNTY5LDcgKzQ2NSw3IEBACiAJbGluay0+ZGV2ID0gTlVMTDsKIAkKIAlpZiAoZGV2KSAKLQkJc3RvcF9hdG1lbF9jYXJkKGRldiwgMCk7CisJCXN0b3BfYXRtZWxfY2FyZChkZXYpOwogCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IE5VTEw7IAogCQogCS8qIERvbid0IGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KQEAgLTYzNywyNSArNTMzLDQ3IEBACiB9IC8qIGF0bWVsX2V2ZW50ICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogV2UgdXNlIHRoZSBkcml2ZXJfaW5mbyBmaWVsZCB0byBzdG9yZSB0aGUgY29ycmVjdCBmaXJtd2FyZSB0eXBlIGZvciBhIGNhcmQuICovCisKKyNkZWZpbmUgUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTyhtYW5mLCBjYXJkLCBpbmZvKSB7IFwKKwkubWF0Y2hfZmxhZ3MgPSBQQ01DSUFfREVWX0lEX01BVENIX01BTkZfSUR8IFwKKwkJCVBDTUNJQV9ERVZfSURfTUFUQ0hfQ0FSRF9JRCwgXAorCS5tYW5mX2lkID0gKG1hbmYpLCBcCisJLmNhcmRfaWQgPSAoY2FyZCksIFwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShpbmZvKSwgfQorCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8odjEsIHYyLCB2aDEsIHZoMiwgaW5mbykgeyBcCisJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9QUk9EX0lEMXwgXAorCQkJUENNQ0lBX0RFVl9JRF9NQVRDSF9QUk9EX0lEMiwgXAorCS5wcm9kX2lkID0geyAodjEpLCAodjIpLCBOVUxMLCBOVUxMIH0sIFwKKwkucHJvZF9pZF9oYXNoID0geyAodmgxKSwgKHZoMiksIDAsIDAgfSwgXAorICAgICAgICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpKGluZm8pLCB9CisKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBhdG1lbF9pZHNbXSA9IHsKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMDEsIDB4MDYyMCksCi0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA2OTYpLAotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDFiZiwgMHgzMzAyKSwKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwNyksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIjExV0FWRSIsICIxMVdQNjExQUwtRSIsIDB4OWViMmRhMWYsIDB4YzlhMGQzZjkpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwMkFSIiwgMHhhYmRhNDE2NCwgMHg0MWIzN2UxZiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFUTUVMIiwgIkFUNzZDNTA0IiwgMHhhYmRhNDE2NCwgMHg1MDQwNjcwYSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFUTUVMIiwgIkFUNzZDNTA0QSIsIDB4YWJkYTQxNjQsIDB4ZTE1ZWQ4N2YpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJCVCIsICJWb3lhZ2VyIDEwMjAgTGFwdG9wIEFkYXB0ZXIiLCAweGFlNDliODZhLCAweDFlOTU3Y2Q1KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ05ldCIsICJDTldMQyAxMU1icHMgV2lyZWxlc3MgUEMgQ2FyZCBWLTUiLCAweGJjNDc3ZGRlLCAweDUwMmZhZTZiKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg1Yjg3ODcyNCwgMHgxMjJmMWRmNiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk9FTSIsICIxMU1icHMgV2lyZWxlc3MgTEFOIFBDIENhcmQgVi0zIiwgMHhmZWE1NGM5MCwgMHgxYzViMGY2OCksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlNNQyIsICIyNjMyVyIsIDB4YzRmOGIxOGIsIDB4MzBmMzg3NzQpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiMjYzMlctVjIiLCAweGM0ZjhiMThiLCAweDE3MmQxMzc3KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV2lyZWxlc3MiLCAiUEMiLCAweGE0MDdlY2RkLCAweDU1NmU0ZDdlKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiV0xBTiIsICI4MDIuMTFiIFBDIENBUkQiLCAweDU3NWM1MTZjLCAweGIxZjZkYmM0KSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDEwMSwgMHgwNjIwLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDEwMSwgMHgwNjk2LCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4MDFiZiwgMHgzMzAyLCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX0lORk8oMHhkNjAxLCAweDAwMDcsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCIxMVdBVkUiLCAiMTFXUDYxMUFMLUUiLCAweDllYjJkYTFmLCAweGM5YTBkM2Y5LCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTAyQVIiLCAweGFiZGE0MTY0LCAweDQxYjM3ZTFmLCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDJBUl9EIiwgMHhhYmRhNDE2NCwgMHgzNjc1ZDcwNCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwMkFSX0UiLCAweGFiZGE0MTY0LCAweDQxNzJlNzkyLCBBVE1FTF9GV19UWVBFXzUwMkUpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTA0X1IiLCAweGFiZGE0MTY0LCAweDkxN2YzZDcyLCBBVE1FTF9GV19UWVBFXzUwNF8yOTU4KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNCIsIDB4YWJkYTQxNjQsIDB4NTA0MDY3MGEsIEFUTUVMX0ZXX1RZUEVfNTA0KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNEEiLCAweGFiZGE0MTY0LCAweGUxNWVkODdmLCBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQlQiLCAiVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgMHhhZTQ5Yjg2YSwgMHgxZTk1N2NkNSwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkNOZXQiLCAiQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgMHhiYzQ3N2RkZSwgMHg1MDJmYWU2YiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJJRUVFIDgwMi4xMWIiLCAiV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDViODc4NzI0LCAweDEyMmYxZGY2LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBDYXJkIFMiLCAweDViODc4NzI0LCAweDVmYmE1MzNhLCBBVE1FTF9GV19UWVBFXzUwNF8yOTU4KSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJPRU0iLCAiMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIDB4ZmVhNTRjOTAsIDB4MWM1YjBmNjgsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJTTUMiLCAiMjYzMlciLCAweGM0ZjhiMThiLCAweDMwZjM4Nzc0LCBBVE1FTF9GV19UWVBFXzUwMkQpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIlNNQyIsICIyNjMyVy1WMiIsIDB4YzRmOGIxOGIsIDB4MTcyZDEzNzcsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJXaXJlbGVzcyIsICJQQ19DQVJEIiwgMHhhNDA3ZWNkZCwgMHgxMTlmNjMxNCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJXTEFOIiwgIjgwMi4xMWIgUEMgQ0FSRCIsIDB4NTc1YzUxNmMsIDB4YjFmNmRiYzQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiTEciLCAiTFcyMTAwTiIsIDB4YjQ3NGQ0M2EsIDB4NmIxZmVjOTQsIEFUTUVMX0ZXX1RZUEVfNTAyRSksCiAJUENNQ0lBX0RFVklDRV9OVUxMCiB9OworCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgYXRtZWxfaWRzKTsKIAogc3RhdGljIHN0cnVjdCBwY21jaWFfZHJpdmVyIGF0bWVsX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKaW5kZXggMmViMDBhOS4uYTYxYjNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGF0bWVsX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RvcF9hdG1lbF9jYXJkKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSwgMSk7CisJc3RvcF9hdG1lbF9jYXJkKHBjaV9nZXRfZHJ2ZGF0YShwZGV2KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGF0bWVsX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCmluZGV4IDJhNDJhZGQuLmVhMTY4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCkBAIC0yLDYgKzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogCisjaW5jbHVkZSAicGNpLmgiCisKIC8qCiAgKiBUaGlzIGludGVycnVwdC1zYWZlIHNwaW5sb2NrIHByb3RlY3RzIGFsbCBhY2Nlc3NlcyB0byBQQ0kKICAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAppbmRleCAwNjFlYWQyLi5jNDJiNjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJCiAjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KICNpbmNsdWRlICJwY2lfaG90cGx1Zy5oIgogCkBAIC00Miw2ICs0MCw3IEBACiBleHRlcm4gaW50IHBjaWVocF9wb2xsX21vZGU7CiBleHRlcm4gaW50IHBjaWVocF9wb2xsX3RpbWU7CiBleHRlcm4gaW50IHBjaWVocF9kZWJ1ZzsKK2V4dGVybiBpbnQgcGNpZWhwX2ZvcmNlOwogCiAvKiNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChwY2llaHBfZGVidWcpIHByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKSovCiAjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAocGNpZWhwX2RlYnVnKSBwcmludGsoIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZyk7IH0gd2hpbGUgKDApCkBAIC00OSwzOSArNDgsMjAgQEAKICNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpCiAKLXN0cnVjdCBwY2lfZnVuYyB7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCXU4IGJ1czsKLQl1OCBkZXZpY2U7Ci0JdTggZnVuY3Rpb247Ci0JdTggaXNfYV9ib2FyZDsKLQl1MTYgc3RhdHVzOwotCXU4IGNvbmZpZ3VyZWQ7Ci0JdTggc3dpdGNoX3NhdmU7Ci0JdTggcHJlc2VuY2Vfc2F2ZTsKLQl1MzIgYmFzZV9sZW5ndGhbMHgwNl07Ci0JdTggYmFzZV90eXBlWzB4MDZdOwotCXUxNiByZXNlcnZlZDI7Ci0JdTMyIGNvbmZpZ19zcGFjZVsweDIwXTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7Ci0Jc3RydWN0IHBjaV9kZXYqIHBjaV9kZXY7CitzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgeworCXU4IGNhY2hlX2xpbmVfc2l6ZTsKKwl1OCBsYXRlbmN5X3RpbWVyOworCXU4IGVuYWJsZV9zZXJyOworCXU4IGVuYWJsZV9wZXJyOwogfTsKIAogc3RydWN0IHNsb3QgewogCXN0cnVjdCBzbG90ICpuZXh0OwogCXU4IGJ1czsKIAl1OCBkZXZpY2U7CisJdTE2IHN0YXR1czsKIAl1MzIgbnVtYmVyOwotCXU4IGlzX2FfYm9hcmQ7Ci0JdTggY29uZmlndXJlZDsKIAl1OCBzdGF0ZTsKLQl1OCBzd2l0Y2hfc2F2ZTsKLQl1OCBwcmVzZW5jZV9zYXZlOwotCXUzMiBjYXBhYmlsaXRpZXM7Ci0JdTE2IHJlc2VydmVkMjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0YXNrX2V2ZW50OwogCXU4IGhwX3Nsb3Q7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CkBAIC05MCw0MiArNzAsNDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNsb3RfbGlzdDsKIH07CiAKLXN0cnVjdCBwY2lfcmVzb3VyY2UgewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiBuZXh0OwotCXUzMiBiYXNlOwotCXUzMiBsZW5ndGg7Ci19OwotCiBzdHJ1Y3QgZXZlbnRfaW5mbyB7CiAJdTMyIGV2ZW50X3R5cGU7CiAJdTggaHBfc2xvdDsKIH07CiAKK3R5cGVkZWYgdTgoKnBocF9pbnRyX2NhbGxiYWNrX3QpICh1OCBocF9zbG90LCB2b2lkICppbnN0YW5jZV9pZCk7CisKK3N0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zIHsKKwlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcG5leHQ7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJdW5zaWduZWQgaW50IGlycTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkvKiBzcGlubG9jaydzICovCisJdTMyIHNsb3RfZGV2aWNlX29mZnNldDsKKwl1MzIgbnVtX3Nsb3RzOworICAgIAlzdHJ1Y3QgdGltZXJfbGlzdAlpbnRfcG9sbF90aW1lcjsJCS8qIEFkZGVkIGZvciBwb2xsIGV2ZW50ICovCisJcGhwX2ludHJfY2FsbGJhY2tfdCAJYXR0ZW50aW9uX2J1dHRvbl9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrOworCXBocF9pbnRyX2NhbGxiYWNrX3QgCXByZXNlbmNlX2NoYW5nZV9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlwb3dlcl9mYXVsdF9jYWxsYmFjazsKKwl2b2lkIAkJCSpjYWxsYmFja19pbnN0YW5jZV9pZDsKKwlzdHJ1Y3QgY3RybF9yZWcgCSpjcmVnOwkJCQkvKiBQdHIgdG8gY29udHJvbGxlciByZWdpc3RlciBzcGFjZSAqLworfTsKKworI2RlZmluZSBNQVhfRVZFTlRTCQkxMAogc3RydWN0IGNvbnRyb2xsZXIgewogCXN0cnVjdCBjb250cm9sbGVyICpuZXh0OwogCXN0cnVjdCBzZW1hcGhvcmUgY3JpdF9zZWN0OwkvKiBjcml0aWNhbCBzZWN0aW9uIHNlbWFwaG9yZSAqLwotCXZvaWQgKmhwY19jdGxyX2hhbmRsZTsJCS8qIEhQQyBjb250cm9sbGVyIGhhbmRsZSAqLworCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpocGNfY3Rscl9oYW5kbGU7IC8qIEhQQyBjb250cm9sbGVyIGhhbmRsZSAqLwogCWludCBudW1fc2xvdHM7CQkJLyogTnVtYmVyIG9mIHNsb3RzIG9uIGN0bHIgKi8KIAlpbnQgc2xvdF9udW1faW5jOwkJLyogMSBvciAtMSAqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfaGVhZDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1czsKLQlzdHJ1Y3QgZXZlbnRfaW5mbyBldmVudF9xdWV1ZVsxMF07CisJc3RydWN0IGV2ZW50X2luZm8gZXZlbnRfcXVldWVbTUFYX0VWRU5UU107CiAJc3RydWN0IHNsb3QgKnNsb3Q7CiAJc3RydWN0IGhwY19vcHMgKmhwY19vcHM7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcXVldWU7CS8qIHNsZWVwICYgd2FrZSBwcm9jZXNzICovCiAJdTggbmV4dF9ldmVudDsKLQl1OCBzZWc7CiAJdTggYnVzOwogCXU4IGRldmljZTsKIAl1OCBmdW5jdGlvbjsKLQl1OCByZXY7CiAJdTggc2xvdF9kZXZpY2Vfb2Zmc2V0OwotCXU4IGFkZF9zdXBwb3J0OwotCWVudW0gcGNpX2J1c19zcGVlZCBzcGVlZDsKIAl1MzIgZmlyc3Rfc2xvdDsJCS8qIEZpcnN0IHBoeXNpY2FsIHNsb3QgbnVtYmVyICovICAvKiBQQ0lFIG9ubHkgaGFzIDEgc2xvdCAqLwogCXU4IHNsb3RfYnVzOwkJLyogQnVzIHdoZXJlIHRoZSBzbG90cyBoYW5kbGVkIGJ5IHRoaXMgY29udHJvbGxlciBzaXQgKi8KIAl1OCBjdHJsY2FwOwpAQCAtMTMzLDIwICsxMTgsNiBAQAogCXU4IGNhcF9iYXNlOwogfTsKIAotc3RydWN0IGlycV9tYXBwaW5nIHsKLQl1OCBiYXJiZXJfcG9sZTsKLQl1OCB2YWxpZF9JTlQ7Ci0JdTggaW50ZXJydXB0WzRdOwotfTsKLQotc3RydWN0IHJlc291cmNlX2xpc3RzIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7Ci0Jc3RydWN0IGlycV9tYXBwaW5nICppcnFzOwotfTsKLQogI2RlZmluZSBJTlRfQlVUVE9OX0lHTk9SRQkJMAogI2RlZmluZSBJTlRfUFJFU0VOQ0VfT04JCQkxCiAjZGVmaW5lIElOVF9QUkVTRU5DRV9PRkYJCTIKQEAgLTIwMCwyMSArMTcxLDE0IEBACiAgKiBlcnJvciBNZXNzYWdlcwogICovCiAjZGVmaW5lIG1zZ19pbml0aWFsaXphdGlvbl9lcnIJIkluaXRpYWxpemF0aW9uIGZhaWx1cmUsIGVycm9yPSVkXG4iCi0jZGVmaW5lIG1zZ19IUENfcmV2X2Vycm9yCSJVbnN1cHBvcnRlZCByZXZpc2lvbiBvZiB0aGUgUENJIGhvdCBwbHVnIGNvbnRyb2xsZXIgZm91bmQuXG4iCi0jZGVmaW5lIG1zZ19IUENfbm9uX3BjaWUJIlRoZSBQQ0kgaG90IHBsdWcgY29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLlxuIgotI2RlZmluZSBtc2dfSFBDX25vdF9zdXBwb3J0ZWQJIlRoaXMgc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHBjaWVwaGQgbW9kdWxlLiBVcGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBvZiBwY2llaHBkXG4iCi0jZGVmaW5lIG1zZ191bmFibGVfdG9fc2F2ZQkiVW5hYmxlIHRvIHN0b3JlIFBDSSBob3QgcGx1ZyBhZGQgcmVzb3VyY2UgaW5mb3JtYXRpb24uIFRoaXMgc3lzdGVtIG11c3QgYmUgcmVib290ZWQgYmVmb3JlIGFkZGluZyBhbnkgUENJIGRldmljZXMuXG4iCiAjZGVmaW5lIG1zZ19idXR0b25fb24JCSJQQ0kgc2xvdCAjJWQgLSBwb3dlcmluZyBvbiBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX29mZgkJIlBDSSBzbG90ICMlZCAtIHBvd2VyaW5nIG9mZiBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX2NhbmNlbAkiUENJIHNsb3QgIyVkIC0gYWN0aW9uIGNhbmNlbGVkIGR1ZSB0byBidXR0b24gcHJlc3MuXG4iCiAjZGVmaW5lIG1zZ19idXR0b25faWdub3JlCSJQQ0kgc2xvdCAjJWQgLSBidXR0b24gcHJlc3MgaWdub3JlZC4gIChhY3Rpb24gaW4gcHJvZ3Jlc3MuLi4pXG4iCiAKIC8qIGNvbnRyb2xsZXIgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcwkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogZXh0ZXJuIGludAlwY2llaHBfZXZlbnRfc3RhcnRfdGhyZWFkCSh2b2lkKTsKIGV4dGVybiB2b2lkCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZAkodm9pZCk7Ci1leHRlcm4gc3RydWN0IAlwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfY3JlYXRlCSh1bnNpZ25lZCBjaGFyIGJ1c251bWJlcik7Ci1leHRlcm4gc3RydWN0IAlwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfZmluZAkodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2aWNlLCB1bnNpZ25lZCBjaGFyIGluZGV4KTsKIGV4dGVybiBpbnQJcGNpZWhwX2VuYWJsZV9zbG90CQkoc3RydWN0IHNsb3QgKnNsb3QpOwogZXh0ZXJuIGludAlwY2llaHBfZGlzYWJsZV9zbG90CQkoc3RydWN0IHNsb3QgKnNsb3QpOwogCkBAIC0yMjQsMjUgKzE4OCwxNyBAQAogZXh0ZXJuIHU4CXBjaWVocF9oYW5kbGVfcG93ZXJfZmF1bHQJKHU4IGhwX3Nsb3QsIHZvaWQgKmluc3RfaWQpOwogLyogZXh0ZXJuIHZvaWQJbG9uZ19kZWxheSAoaW50IGRlbGF5KTsgKi8KIAotLyogcmVzb3VyY2UgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lCShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCk7Ci0KIC8qIHBjaSBmdW5jdGlvbnMgKi8KLWV4dGVybiBpbnQJcGNpZWhwX3NldF9pcnEJCQkodTggYnVzX251bSwgdTggZGV2X251bSwgdTggaW50X3BpbiwgdTggaXJxX251bSk7Ci0vKmV4dGVybiBpbnQJcGNpZWhwX2dldF9idXNfZGV2CQkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHU4ICpidXNfbnVtLCB1OCAqZGV2X251bSwgc3RydWN0IHNsb3QgKnNsb3QpOyovCi1leHRlcm4gaW50CXBjaWVocF9zYXZlX2NvbmZpZwkgCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IGJ1c251bWJlciwgaW50IG51bV9jdGxyX3Nsb3RzLCBpbnQgZmlyc3RfZGV2aWNlX251bSk7Ci1leHRlcm4gaW50CXBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogZnVuYywgaW50IGZsYWcpOwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV9zbG90X2NvbmZpZwkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKiBuZXdfc2xvdCk7Ci1leHRlcm4gdm9pZAlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMJKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpOwotZXh0ZXJuIGludAlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcwkoc3RydWN0IHBjaV9mdW5jICogZnVuYywgc3RydWN0IHJlc291cmNlX2xpc3RzICogcmVzb3VyY2VzKTsKLWV4dGVybiB2b2lkCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QJKHN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcyk7Ci1leHRlcm4gaW50CXBjaWVocF9jb25maWd1cmVfZGV2aWNlCQkoc3RydWN0IGNvbnRyb2xsZXIqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyogZnVuYyk7Ci1leHRlcm4gaW50CXBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UJKHN0cnVjdCBwY2lfZnVuYyogZnVuYyk7CitleHRlcm4gaW50CXBjaWVocF9jb25maWd1cmVfZGV2aWNlCQkoc3RydWN0IHNsb3QgKnBfc2xvdCk7CitleHRlcm4gaW50CXBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UJKHN0cnVjdCBzbG90ICpwX3Nsb3QpOworZXh0ZXJuIGludAlwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkCXBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkgICAgICAgCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKTsKKwogCiAKIC8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KIGV4dGVybiBzdHJ1Y3QgY29udHJvbGxlciAqcGNpZWhwX2N0cmxfbGlzdDsKLWV4dGVybiBzdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2xpc3RbMjU2XTsKIAogLyogSW5saW5lIGZ1bmN0aW9ucyAqLwogCkBAIC0yNTIsMTIgKzIwOCw5IEBACiAKIAlwX3Nsb3QgPSBjdHJsLT5zbG90OwogCi0JZGJnKCJwX3Nsb3QgPSAlcFxuIiwgcF9zbG90KTsKLQogCXdoaWxlIChwX3Nsb3QgJiYgKHBfc2xvdC0+ZGV2aWNlICE9IGRldmljZSkpIHsKIAkJdG1wX3Nsb3QgPSBwX3Nsb3Q7CiAJCXBfc2xvdCA9IHBfc2xvdC0+bmV4dDsKLQkJZGJnKCJJbiB3aGlsZSBsb29wLCBwX3Nsb3QgPSAlcFxuIiwgcF9zbG90KTsKIAl9CiAJaWYgKHBfc2xvdCA9PSBOVUxMKSB7CiAJCWVycigiRVJST1I6IHBjaWVocF9maW5kX3Nsb3QgZGV2aWNlPTB4JXhcbiIsIGRldmljZSk7CkBAIC0yNzMsNyArMjI2LDYgQEAKIAogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JZGJnKCIlcyA6IHN0YXJ0XG4iLCBfX0ZVTkNUSU9OX18pOwogCWFkZF93YWl0X3F1ZXVlKCZjdHJsLT5xdWV1ZSwgJndhaXQpOwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkKIAkJLyogU2xlZXAgZm9yIHVwIHRvIDEgc2Vjb25kICovCkBAIC0yODUsMTkgKzIzNyw5IEBACiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR2YWwgPSAgLUVJTlRSOwogCi0JZGJnKCIlcyA6IGVuZFxuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBQdXRzIG5vZGUgYmFjayBpbiB0aGUgcmVzb3VyY2UgbGlzdCBwb2ludGVkIHRvIGJ5IGhlYWQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByZXR1cm5fcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUpCi17Ci0JaWYgKCFub2RlIHx8ICFoZWFkKQotCQlyZXR1cm47Ci0Jbm9kZS0+bmV4dCA9ICpoZWFkOwotCSpoZWFkID0gbm9kZTsKLX0KLQogI2RlZmluZSBTTE9UX05BTUVfU0laRSAxMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFrZV9zbG90X25hbWUoY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUsIHN0cnVjdCBzbG90ICpzbG90KQpAQCAtMzExLDE0ICsyNTMsNyBAQAogCUFDUEkKIH07CiAKLXR5cGVkZWYgdTgoKnBocF9pbnRyX2NhbGxiYWNrX3QpICh1bnNpZ25lZCBpbnQgY2hhbmdlX2lkLCB2b2lkICppbnN0YW5jZV9pZCk7Ci0KLWludCBwY2llX2luaXQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAotCQlwaHBfaW50cl9jYWxsYmFja190IGF0dGVudGlvbl9idXR0b25fY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3Qgc3dpdGNoX2NoYW5nZV9jYWxsYmFjaywKLQkJcGhwX2ludHJfY2FsbGJhY2tfdCBwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3QgcG93ZXJfZmF1bHRfY2FsbGJhY2spOwotCitpbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldik7CiAKIC8qIFRoaXMgaGFzIG5vIG1lYW5pbmcgZm9yIFBDSSBFeHByZXNzLCBhcyB0aGVyZSBpcyBvbmx5IDEgc2xvdCBwZXIgcG9ydCAqLwogaW50IHBjaWVfZ2V0X2N0bHJfc2xvdF9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKaW5kZXggY2FmYzdlYS4uOGRmNzA0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYwpAQCAtMjcsMjcgKzI3LDIwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJwY2llaHAuaCIKLSNpbmNsdWRlICJwY2llaHBybS5oIgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiBpbnQgcGNpZWhwX2RlYnVnOwogaW50IHBjaWVocF9wb2xsX21vZGU7CiBpbnQgcGNpZWhwX3BvbGxfdGltZTsKK2ludCBwY2llaHBfZm9yY2U7CiBzdHJ1Y3QgY29udHJvbGxlciAqcGNpZWhwX2N0cmxfbGlzdDsKLXN0cnVjdCBwY2lfZnVuYyAqcGNpZWhwX3Nsb3RfbGlzdFsyNTZdOwogCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IJIkRhbiBaaW5rIDxkYW4uemlua0Bjb21wYXEuY29tPiwgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4sIERlbHkgU3kgPGRlbHkubC5zeUBpbnRlbC5jb20+IgpAQCAtNjAsOSArNTMsMTEgQEAKIG1vZHVsZV9wYXJhbShwY2llaHBfZGVidWcsIGJvb2wsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHBjaWVocF9wb2xsX21vZGUsIGJvb2wsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHBjaWVocF9wb2xsX3RpbWUsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0ocGNpZWhwX2ZvcmNlLCBib29sLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocGNpZWhwX2RlYnVnLCAiRGVidWdnaW5nIG1vZGUgZW5hYmxlZCBvciBub3QiKTsKIE1PRFVMRV9QQVJNX0RFU0MocGNpZWhwX3BvbGxfbW9kZSwgIlVzaW5nIHBvbGxpbmcgbWVjaGFuaXNtIGZvciBob3QtcGx1ZyBldmVudHMgb3Igbm90Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9wb2xsX3RpbWUsICJQb2xsaW5nIG1lY2hhbmlzbSBmcmVxdWVuY3ksIGluIHNlY29uZHMiKTsKK01PRFVMRV9QQVJNX0RFU0MocGNpZWhwX2ZvcmNlLCAiRm9yY2UgcGNpZWhwLCBldmVuIGlmIF9PU0MgYW5kIE9TSFAgYXJlIG1pc3NpbmciKTsKIAogI2RlZmluZSBQQ0lFX01PRFVMRV9OQU1FICJwY2llaHAiCiAKQEAgLTExNCw4ICsxMDksNiBAQAogCXUzMiBzbG90X251bWJlcjsKIAlpbnQgcmVzdWx0ID0gLUVOT01FTTsKIAotCWRiZygiJXNcbiIsX19GVU5DVElPTl9fKTsKLQogCW51bWJlcl9vZl9zbG90cyA9IGN0cmwtPm51bV9zbG90czsKIAlzbG90X2RldmljZSA9IGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAlzbG90X251bWJlciA9IGN0cmwtPmZpcnN0X3Nsb3Q7CkBAIC0zNzAsNyArMzYzLDYgQEAKIAl1OCB2YWx1ZTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAkKLQlkYmcoIiVzOiBDYWxsZWQgYnkgaHBfZHJ2XG4iLCBfX0ZVTkNUSU9OX18pOwogCWN0cmwgPSBrbWFsbG9jKHNpemVvZigqY3RybCksIEdGUF9LRVJORUwpOwogCWlmICghY3RybCkgewogCQllcnIoIiVzIDogb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTM3OCwyMiArMzcwLDE1IEBACiAJfQogCW1lbXNldChjdHJsLCAwLCBzaXplb2Yoc3RydWN0IGNvbnRyb2xsZXIpKTsKIAotCWRiZygiJXM6IERSVl90aHJlYWQgcGlkID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgY3VycmVudC0+cGlkKTsKLQkKIAlwZGV2ID0gZGV2LT5wb3J0OworCWN0cmwtPnBjaV9kZXYgPSBwZGV2OwogCi0JcmMgPSBwY2llX2luaXQoY3RybCwgZGV2LAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9wcmVzZW5jZV9jaGFuZ2UsCi0JCShwaHBfaW50cl9jYWxsYmFja190KSBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0KTsKKwlyYyA9IHBjaWVfaW5pdChjdHJsLCBkZXYpOwogCWlmIChyYykgewogCQlkYmcoIiVzOiBjb250cm9sbGVyIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgUENJRV9NT0RVTEVfTkFNRSk7CiAJCWdvdG8gZXJyX291dF9mcmVlX2N0cmw7CiAJfQogCi0JY3RybC0+cGNpX2RldiA9IHBkZXY7Ci0KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgY3RybCk7CiAKIAljdHJsLT5wY2lfYnVzID0ga21hbGxvYyhzaXplb2YoKmN0cmwtPnBjaV9idXMpLCBHRlBfS0VSTkVMKTsKQEAgLTQwMiw3ICszODcsNiBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF91bm1hcF9tbWlvX3JlZ2lvbjsKIAl9Ci0JZGJnKCIlczogY3RybC0+cGNpX2J1cyAlcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5wY2lfYnVzKTsKIAltZW1jcHkgKGN0cmwtPnBjaV9idXMsIHBkZXYtPmJ1cywgc2l6ZW9mICgqY3RybC0+cGNpX2J1cykpOwogCWN0cmwtPmJ1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOyAgLyogY3RybCBidXMgKi8KIAljdHJsLT5zbG90X2J1cyA9IHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7ICAvKiBidXMgY29udHJvbGxlZCBieSB0aGlzIEhQQyAqLwpAQCAtNDI0LDI1ICs0MDgsNiBAQAogCWZpcnN0X2RldmljZV9udW0gPSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJbnVtX2N0bHJfc2xvdHMgPSBjdHJsLT5udW1fc2xvdHM7IAogCi0JLyogU3RvcmUgUENJIENvbmZpZyBTcGFjZSBmb3IgYWxsIGRldmljZXMgb24gdGhpcyBidXMgKi8KLQlkYmcoIiVzOiBCZWZvcmUgY2FsbGluZyBwY2llaHBfc2F2ZV9jb25maWcsIGN0cmwtPmJ1cyAleCxjdHJsLT5zbG90X2J1cyAleFxuIiwgCi0JCV9fRlVOQ1RJT05fXyxjdHJsLT5idXMsIGN0cmwtPnNsb3RfYnVzKTsKLQlyYyA9IHBjaWVocF9zYXZlX2NvbmZpZyhjdHJsLCBjdHJsLT5zbG90X2J1cywgbnVtX2N0bHJfc2xvdHMsIGZpcnN0X2RldmljZV9udW0pOwotCWlmIChyYykgewotCQllcnIoIiVzOiB1bmFibGUgdG8gc2F2ZSBQQ0kgY29uZmlndXJhdGlvbiBkYXRhLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2N0cmxfYnVzOwotCX0KLQotCS8qIEdldCBJTywgbWVtb3J5LCBhbmQgSVJRIHJlc291cmNlcyBmb3IgbmV3IGRldmljZXMgKi8KLQlyYyA9IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhjdHJsKTsKLQljdHJsLT5hZGRfc3VwcG9ydCA9ICFyYzsKLQkKLQlpZiAocmMpIHsKLQkJZGJnKCJwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMgPSAlI3hcbiIsIHJjKTsKLQkJZXJyKCJ1bmFibGUgdG8gbG9jYXRlIFBDSSBjb25maWd1cmF0aW9uIHJlc291cmNlcyBmb3IgaG90IHBsdWcgYWRkLlxuIik7Ci0JCWdvdG8gZXJyX291dF9mcmVlX2N0cmxfYnVzOwotCX0KLQogCS8qIFNldHVwIHRoZSBzbG90IGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KIAlyYyA9IGluaXRfc2xvdHMoY3RybCk7CiAJaWYgKHJjKSB7CkBAIC00NTEsNyArNDE2LDYgQEAKIAl9CiAKIAl0X3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGZpcnN0X2RldmljZV9udW0pOwotCWRiZygiJXM6IHRfc2xvdCAlcFxuIiwgX19GVU5DVElPTl9fLCB0X3Nsb3QpOwogCiAJLyoJRmluaXNoIHNldHRpbmcgdXAgdGhlIGhvdCBwbHVnIGN0cmwgZGV2aWNlICovCiAJY3RybC0+bmV4dF9ldmVudCA9IDA7CkBAIC00NjgsNyArNDMyLDYgQEAKIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJdF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXModF9zbG90LCAmdmFsdWUpOyAvKiBDaGVjayBpZiBzbG90IGlzIG9jY3VwaWVkICovCi0JZGJnKCIlczogYWRwYXRlciB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB2YWx1ZSk7CiAJCiAJaWYgKChQT1dFUl9DVFJMKGN0cmwtPmN0cmxjYXApKSAmJiAhdmFsdWUpIHsKIAkJcmMgPSB0X3Nsb3QtPmhwY19vcHMtPnBvd2VyX29mZl9zbG90KHRfc2xvdCk7IC8qIFBvd2VyIG9mZiBzbG90IGlmIG5vdCBvY2N1cGllZCovCkBAIC01MDEsNyArNDY0LDYgQEAKIAogc3RhdGljIGludCBwY2llX3N0YXJ0X3RocmVhZCh2b2lkKQogewotCWludCBsb29wOwogCWludCByZXR2YWwgPSAwOwogCQogCWRiZygiSW5pdGlhbGl6ZSArIFN0YXJ0IHRoZSBub3RpZmljYXRpb24vcG9sbGluZyBtZWNoYW5pc20gXG4iKTsKQEAgLTUxMiwzMiArNDc0LDExIEBACiAJCXJldHVybiByZXR2YWw7CiAJfQogCi0JZGJnKCJJbml0aWFsaXplIHNsb3QgbGlzdHNcbiIpOwotCS8qIE9uZSBzbG90IGxpc3QgZm9yIGVhY2ggYnVzIGluIHRoZSBzeXN0ZW0gKi8KLQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMjU2OyBsb29wKyspIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtsb29wXSA9IE5VTEw7Ci0JfQotCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9fZXhpdAotZnJlZV9wY2llaHBfcmVzKHN0cnVjdCBwY2lfcmVzb3VyY2UgKnJlcykKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0cmVzOwotCi0Jd2hpbGUgKHJlcykgewotCQl0cmVzID0gcmVzOwotCQlyZXMgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHRyZXMpOwotCX0KLX0KLQogc3RhdGljIHZvaWQgX19leGl0IHVubG9hZF9wY2llaHBkKHZvaWQpCiB7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCXN0cnVjdCBwY2lfZnVuYyAqVGVtcFNsb3Q7Ci0JaW50IGxvb3A7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmw7CiAJc3RydWN0IGNvbnRyb2xsZXIgKnRjdHJsOwogCkBAIC01NDYsMTEgKzQ4Nyw2IEBACiAJd2hpbGUgKGN0cmwpIHsKIAkJY2xlYW51cF9zbG90cyhjdHJsKTsKIAotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+aW9faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5tZW1faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5wX21lbV9oZWFkKTsKLQkJZnJlZV9wY2llaHBfcmVzKGN0cmwtPmJ1c19oZWFkKTsKLQogCQlrZnJlZSAoY3RybC0+cGNpX2J1cyk7CiAKIAkJY3RybC0+aHBjX29wcy0+cmVsZWFzZV9jdGxyKGN0cmwpOwpAQCAtNTYxLDIwICs0OTcsNiBAQAogCQlrZnJlZSh0Y3RybCk7CiAJfQogCi0JZm9yIChsb29wID0gMDsgbG9vcCA8IDI1NjsgbG9vcCsrKSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W2xvb3BdOwotCQl3aGlsZSAobmV4dCAhPSBOVUxMKSB7Ci0JCQlmcmVlX3BjaWVocF9yZXMobmV4dC0+aW9faGVhZCk7Ci0JCQlmcmVlX3BjaWVocF9yZXMobmV4dC0+bWVtX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPnBfbWVtX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPmJ1c19oZWFkKTsKLQotCQkJVGVtcFNsb3QgPSBuZXh0OwotCQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JCQlrZnJlZShUZW1wU2xvdCk7Ci0JCX0KLQl9Ci0KIAkvKiBTdG9wIHRoZSBub3RpZmljYXRpb24gbWVjaGFuaXNtICovCiAJcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKCk7CiAKQEAgLTYzOSwyMSArNTYxLDE2IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcl9ocGNfaW5pdDsKIAotCXJldHZhbCA9IHBjaWVocHJtX2luaXQoUENJKTsKLQlpZiAoIXJldHZhbCkgewotIAkJcmV0dmFsID0gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOwotIAkJZGJnKCJwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlciA9ICVkXG4iLCByZXR2YWwpOwotICAJCWluZm8oRFJJVkVSX0RFU0MgIiB2ZXJzaW9uOiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOwotIAkJaWYgKHJldHZhbCkKLSAJCSAgIGRiZygiJXM6IEZhaWx1cmUgdG8gcmVnaXN0ZXIgc2VydmljZVxuIiwgX19GVU5DVElPTl9fKTsKLQl9CisJcmV0dmFsID0gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOworIAlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyID0gJWRcbiIsIHJldHZhbCk7CisgIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKKyAJaWYgKHJldHZhbCkKKwkJZGJnKCIlczogRmFpbHVyZSB0byByZWdpc3RlciBzZXJ2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOwogCiBlcnJvcl9ocGNfaW5pdDoKIAlpZiAocmV0dmFsKSB7Ci0JCXBjaWVocHJtX2NsZWFudXAoKTsKIAkJcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKCk7Ci0JfSBlbHNlCi0JCXBjaWVocHJtX3ByaW50X3BpcnQoKTsKKwl9OwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTY2Myw5ICs1ODAsNiBAQAogCWRiZygidW5sb2FkX3BjaWVocGQoKVxuIik7CiAJdW5sb2FkX3BjaWVocGQoKTsKIAotCXBjaWVocHJtX2NsZWFudXAoKTsKLQotCWRiZygicGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlclxuIik7CiAJcGNpZV9wb3J0X3NlcnZpY2VfdW5yZWdpc3RlcigmaHBkcml2ZXJfcG9ydGRydik7CiAKIAlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiIHVubG9hZGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwppbmRleCA4OThmNmRhLi41ZTU4MmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCkBAIC0yNywyNSArMjcsMTQgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiLi4vcGNpLmgiCiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKIAotc3RhdGljIHUzMiBjb25maWd1cmVfbmV3X2RldmljZShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLCB1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KTsKLXN0YXRpYyBpbnQgY29uZmlndXJlX25ld19mdW5jdGlvbiggc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKnJlc291cmNlcywgdTggYnJpZGdlX2J1cywgdTggYnJpZGdlX2Rldik7CiBzdGF0aWMgdm9pZCBpbnRlcnJ1cHRfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CiAKIHN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGV2ZW50X3NlbWFwaG9yZTsJLyogbXV0ZXggZm9yIHByb2Nlc3MgbG9vcCAodXAgaWYgc29tZXRoaW5nIHRvIHByb2Nlc3MpICovCkBAIC02MCwyMiArNDksMTggQEAKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwogCXU4IHJjID0gMDsKIAl1OCBnZXRzdGF0dXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIEF0dGVudGlvbiBCdXR0b24gQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBBdHRlbnRpb24gYnV0dG9uIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCQotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJLyogVGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQgd2hhdCB0byBkbyAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJCi0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTExNywyNCArMTAyLDIwIEBACiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7CiAJdTggZ2V0c3RhdHVzOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBTd2l0Y2ggQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBTd2l0Y2ggaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKIAlwX3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAKIAlpZiAoZ2V0c3RhdHVzKSB7CkBAIC0xNDIsMTQgKzEyMywxMiBAQAogCQkgKiBTd2l0Y2ggb3BlbmVkCiAJCSAqLwogCQlpbmZvKCJMYXRjaCBvcGVuIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfU1dJVENIX09QRU47CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogIFN3aXRjaCBjbG9zZWQKIAkJICovCiAJCWluZm8oIkxhdGNoIGNsb3NlIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMHgxMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfU1dJVENIX0NMT1NFOwogCX0KIApAQCAtMTYzLDIwICsxNDIsMTcgQEAKIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0JdTggcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKKwl1OCBwcmVzZW5jZV9zYXZlLCByYyA9IDA7CiAJc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOwogCiAJLyogUHJlc2VuY2UgQ2hhbmdlICovCiAJZGJnKCJwY2llaHA6ICBQcmVzZW5jZS9Ob3RpZnkgaW5wdXQgY2hhbmdlLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTE4NSw4ICsxNjEsOCBAQAogCS8qIFN3aXRjaCBpcyBvcGVuLCBhc3N1bWUgYSBwcmVzZW5jZSBjaGFuZ2UKIAkgKiBTYXZlIHRoZSBwcmVzZW5jZSBzdGF0ZQogCSAqLwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7Ci0JaWYgKGZ1bmMtPnByZXNlbmNlX3NhdmUpIHsKKwlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZwcmVzZW5jZV9zYXZlKTsKKwlpZiAocHJlc2VuY2Vfc2F2ZSkgewogCQkvKgogCQkgKiBDYXJkIFByZXNlbnQKIAkJICovCkBAIC0yMTEsMTkgKzE4NywxNiBAQAogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gKHN0cnVjdCBjb250cm9sbGVyICopIGluc3RfaWQ7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIHBvd2VyIGZhdWx0ICovCiAJZGJnKCJwY2llaHA6ICBQb3dlciBmYXVsdCBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKIAotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJLyogdGhpcyBpcyB0aGUgc3RydWN0dXJlIHRoYXQgdGVsbHMgdGhlIHdvcmtlciB0aHJlYWQKIAkgKiB3aGF0IHRvIGRvCiAJICovCiAJdGFza0luZm8gPSAmKGN0cmwtPmV2ZW50X3F1ZXVlW2N0cmwtPm5leHRfZXZlbnRdKTsKLQljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIDEwOworCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgTUFYX0VWRU5UUzsKIAl0YXNrSW5mby0+aHBfc2xvdCA9IGhwX3Nsb3Q7CiAKIAlyYysrOwpAQCAtMjM0LDcgKzIwNyw3IEBACiAJCSAqIHBvd2VyIGZhdWx0IENsZWFyZWQKIAkJICovCiAJCWluZm8oIlBvd2VyIGZhdWx0IGNsZWFyZWQgb24gU2xvdCglZClcbiIsIGN0cmwtPmZpcnN0X3Nsb3QgKyBocF9zbG90KTsKLQkJZnVuYy0+c3RhdHVzID0gMHgwMDsKKwkJcF9zbG90LT5zdGF0dXMgPSAweDAwOwogCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVF9DTEVBUjsKIAl9IGVsc2UgewogCQkvKgpAQCAtMjQzLDcgKzIxNiw3IEBACiAJCWluZm8oIlBvd2VyIGZhdWx0IG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1BPV0VSX0ZBVUxUOwogCQkvKiBzZXQgcG93ZXIgZmF1bHQgc3RhdHVzIGZvciB0aGlzIGJvYXJkICovCi0JCWZ1bmMtPnN0YXR1cyA9IDB4RkY7CisJCXBfc2xvdC0+c3RhdHVzID0gMHhGRjsKIAkJaW5mbygicG93ZXIgZmF1bHQgYml0ICV4IHNldFxuIiwgaHBfc2xvdCk7CiAJfQogCWlmIChyYykKQEAgLTI1Miw4MTAgKzIyNSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0KLS8qKgotICogc29ydF9ieV9zaXplOiBzb3J0IG5vZGVzIGJ5IHRoZWlyIGxlbmd0aCwgc21hbGxlc3QgZmlyc3QuCi0gKgotICogQGhlYWQ6IGxpc3QgdG8gc29ydAotICovCi1zdGF0aWMgaW50IHNvcnRfYnlfc2l6ZShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpjdXJyZW50X3JlczsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpuZXh0X3JlczsKLQlpbnQgb3V0X29mX29yZGVyID0gMTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoISgoKmhlYWQpLT5uZXh0KSkKLQkJcmV0dXJuIDA7Ci0KLQl3aGlsZSAob3V0X29mX29yZGVyKSB7Ci0JCW91dF9vZl9vcmRlciA9IDA7Ci0KLQkJLyogU3BlY2lhbCBjYXNlIGZvciBzd2FwcGluZyBsaXN0IGhlYWQgKi8KLQkJaWYgKCgoKmhlYWQpLT5uZXh0KSAmJgotCQkgICAgKCgqaGVhZCktPmxlbmd0aCA+ICgqaGVhZCktPm5leHQtPmxlbmd0aCkpIHsKLQkJCW91dF9vZl9vcmRlcisrOwotCQkJY3VycmVudF9yZXMgPSAqaGVhZDsKLQkJCSpoZWFkID0gKCpoZWFkKS0+bmV4dDsKLQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gKCpoZWFkKS0+bmV4dDsKLQkJCSgqaGVhZCktPm5leHQgPSBjdXJyZW50X3JlczsKLQkJfQotCi0JCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0KLQkJd2hpbGUgKGN1cnJlbnRfcmVzLT5uZXh0ICYmIGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0KSB7Ci0JCQlpZiAoY3VycmVudF9yZXMtPm5leHQtPmxlbmd0aCA+IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0LT5sZW5ndGgpIHsKLQkJCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCQluZXh0X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gY3VycmVudF9yZXMtPm5leHQtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQluZXh0X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzLT5uZXh0ID0gbmV4dF9yZXM7Ci0JCQl9IGVsc2UKLQkJCQljdXJyZW50X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQl9Ci0JfSAgLyogRW5kIG9mIG91dF9vZl9vcmRlciBsb29wICovCi0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogc29ydF9ieV9tYXhfc2l6ZQotICoKLSAqIFNvcnRzIG5vZGVzIG9uIHRoZSBsaXN0IGJ5IHRoZWlyIGxlbmd0aC4KLSAqIExhcmdlc3QgZmlyc3QuCi0gKgotICovCi1zdGF0aWMgaW50IHNvcnRfYnlfbWF4X3NpemUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqY3VycmVudF9yZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbmV4dF9yZXM7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCEoKCpoZWFkKS0+bmV4dCkpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5sZW5ndGggPCAoKmhlYWQpLT5uZXh0LT5sZW5ndGgpKSB7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0JCQkqaGVhZCA9ICgqaGVhZCktPm5leHQ7Ci0JCQljdXJyZW50X3Jlcy0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gY3VycmVudF9yZXM7Ci0JCX0KLQotCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCi0JCXdoaWxlIChjdXJyZW50X3Jlcy0+bmV4dCAmJiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dCkgewotCQkJaWYgKGN1cnJlbnRfcmVzLT5uZXh0LT5sZW5ndGggPCBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dC0+bGVuZ3RoKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbmV4dF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJbmV4dF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IG5leHRfcmVzOwotCQkJfSBlbHNlCi0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0OiByZXR1cm4gb25lIHVudXNlZCByZXNvdXJjZSBub2RlCi0gKiBAaGVhZDogbGlzdCB0byBzY2FuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqCi1kb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLAotCQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKipvcmlnX2hlYWQsIHUzMiBhbGlnbm1lbnQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0JZGJnKCJkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0XG4iKTsKLQotCWlmICghKCpoZWFkKSB8fCAhKCpvcmlnX2hlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJjID0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCgqaGVhZCktPmJhc2UgIT0gKCpvcmlnX2hlYWQpLT5iYXNlKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICgoKmhlYWQpLT5sZW5ndGggPT0gKCpvcmlnX2hlYWQpLT5sZW5ndGgpCi0JCXJldHVybiBOVUxMOwotCi0KLQkvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlcmUgdGhlIGJyaWRnZSByZXF1aXJlcyBzb21lIG9mIHRoZSByZXNvdXJjZSwgYnV0Ci0JICogIHdlIG1heSBiZSBhYmxlIHRvIHNwbGl0IHNvbWUgb2ZmIG9mIHRoZSBmcm9udAotCSAqLwkKLQlub2RlID0gKmhlYWQ7Ci0KLQlpZiAobm9kZS0+bGVuZ3RoICYgKGFsaWdubWVudCAtMSkpIHsKLQkJLyogdGhpcyBvbmUgaXNuJ3QgYW4gYWxpZ25lZCBsZW5ndGgsIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkKLQkJICogYW5kIHNwbGl0IGl0IHVwLgotCQkgKi8KLQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoIXNwbGl0X25vZGUpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmxlbmd0aCB8IChhbGlnbm1lbnQtMSkpICsgMSAtIGFsaWdubWVudDsKLQotCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGVtcF9kd29yZDsKLQotCQlub2RlLT5sZW5ndGggLT0gdGVtcF9kd29yZDsKLQkJbm9kZS0+YmFzZSArPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCSpoZWFkID0gc3BsaXRfbm9kZTsKLQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGU7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCA8IGFsaWdubWVudCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBOb3cgdW5saW5rIGl0ICovCi0JaWYgKCpoZWFkID09IG5vZGUpIHsKLQkJKmhlYWQgPSBub2RlLT5uZXh0OwotCX0gZWxzZSB7Ci0JCXByZXZub2RlID0gKmhlYWQ7Ci0JCXdoaWxlIChwcmV2bm9kZS0+bmV4dCAhPSBub2RlKQotCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQlwcmV2bm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JfQotCW5vZGUtPm5leHQgPSBOVUxMOwotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLQotLyoqCi0gKiBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQ6IHJldHVybiBvbmUgdW51c2VkIHJlc291cmNlIG5vZGUKLSAqIEBoZWFkOiBsaXN0IHRvIHNjYW4KLSAqCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICoKLWRvX2JyaWRnZV9yZXNvdXJjZV9zcGxpdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwgdTMyIGFsaWdubWVudCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwcmV2bm9kZSA9IE5VTEw7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JcmMgPSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKTsKLQotCWlmIChyYykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlub2RlID0gKmhlYWQ7Ci0KLQl3aGlsZSAobm9kZS0+bmV4dCkgewotCQlwcmV2bm9kZSA9IG5vZGU7Ci0JCW5vZGUgPSBub2RlLT5uZXh0OwotCQlrZnJlZShwcmV2bm9kZSk7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCA8IGFsaWdubWVudCkgewotCQlrZnJlZShub2RlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG5vZGUtPmJhc2UgJiAoYWxpZ25tZW50IC0gMSkpIHsKLQkJLyogU2hvcnQgY2lyY3VpdCBpZiBhZGp1c3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLwotCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoYWxpZ25tZW50LTEpKSArIDE7Ci0JCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBhbGlnbm1lbnQpIHsKLQkJCWtmcmVlKG5vZGUpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQotCQlub2RlLT5sZW5ndGggLT0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKTsKLQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JfQotCi0JaWYgKG5vZGUtPmxlbmd0aCAmIChhbGlnbm1lbnQgLSAxKSkgewotCQkvKiBUaGVyZSdzIHN0dWZmIGluIHVzZSBhZnRlciB0aGlzIG5vZGUgKi8KLQkJa2ZyZWUobm9kZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBub2RlOwotfQotCi0KLS8qCi0gKiBnZXRfaW9fcmVzb3VyY2UKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIHNvcnRzIHRoZSByZXNvdXJjZSBsaXN0IGJ5IHNpemUgYW5kIHRoZW4KLSAqIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgb2YgInNpemUiIGxlbmd0aCB0aGF0IGlzIG5vdCBpbiB0aGUKLSAqIElTQSBhbGlhc2luZyB3aW5kb3cuICBJZiBpdCBmaW5kcyBhIG5vZGUgbGFyZ2VyIHRoYW4gInNpemUiCi0gKiBpdCB3aWxsIHNwbGl0IGl0IHVwLgotICoKLSAqIHNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKmdldF9pb19yZXNvdXJjZShzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwgdTMyIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpzcGxpdF9ub2RlID0gTlVMTDsKLQl1MzIgdGVtcF9kd29yZDsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHNvcnRfYnlfc2l6ZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChub2RlID0gKmhlYWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0JCWlmIChub2RlLT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGUtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKi8gU2hvcnQgY2lyY3VpdCBpZiBhZGp1c3RlZCBzaXplIGlzIHRvbyBzbWFsbCAqLwotCQkJaWYgKChub2RlLT5sZW5ndGggLSAodGVtcF9kd29yZCAtIG5vZGUtPmJhc2UpKSA8IHNpemUpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBub2RlLT5iYXNlOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGVtcF9kd29yZCAtIG5vZGUtPmJhc2U7Ci0JCQlub2RlLT5iYXNlID0gdGVtcF9kd29yZDsKLQkJCW5vZGUtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAvKiBFbmQgb2Ygbm9uLWFsaWduZWQgYmFzZSAqLwotCi0JCS8qIERvbid0IG5lZWQgdG8gY2hlY2sgaWYgdG9vIHNtYWxsIHNpbmNlIHdlIGFscmVhZHkgZGlkICovCi0JCWlmIChub2RlLT5sZW5ndGggPiBzaXplKSB7Ci0JCQkvKiB0aGlzIG9uZSBpcyBsb25nZXIgdGhhbiB3ZSBuZWVkCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2UgKyBzaXplOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbm9kZS0+bGVuZ3RoIC0gc2l6ZTsKLQkJCW5vZGUtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAgLyogRW5kIG9mIHRvbyBiaWcgb24gdG9wIGVuZCAqLwotCi0JCS8qIEZvciBJTyBtYWtlIHN1cmUgaXQncyBub3QgaW4gdGhlIElTQSBhbGlhc2luZyBzcGFjZSAqLwotCQlpZiAobm9kZS0+YmFzZSAmIDB4MzAwTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElmIHdlIGdvdCBoZXJlLCB0aGVuIGl0IGlzIHRoZSByaWdodCBzaXplIAotCQkgICBOb3cgdGFrZSBpdCBvdXQgb2YgdGhlIGxpc3QgKi8KLQkJaWYgKCpoZWFkID09IG5vZGUpIHsKLQkJCSpoZWFkID0gbm9kZS0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXByZXZub2RlID0gKmhlYWQ7Ci0JCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gbm9kZSkKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCX0KLQkJbm9kZS0+bmV4dCA9IE5VTEw7Ci0JCS8qIFN0b3AgbG9vcGluZyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogZ2V0X21heF9yZXNvdXJjZQotICoKLSAqIEdldHMgdGhlIGxhcmdlc3Qgbm9kZSB0aGF0IGlzIGF0IGxlYXN0ICJzaXplIiBiaWcgZnJvbSB0aGUKLSAqIGxpc3QgcG9pbnRlZCB0byBieSBoZWFkLiAgSXQgYWxpZ25zIHRoZSBub2RlIG9uIHRvcCBhbmQgYm90dG9tCi0gKiB0byAic2l6ZSIgYWxpZ25tZW50IGJlZm9yZSByZXR1cm5pbmcgaXQuCi0gKiBKLkkuIG1vZGlmaWVkIHRvIHB1dCBtYXggc2l6ZSBsaW1pdHMgb2Y7IDY0TS0+MzJNLT4xNk0tPjhNLT40TS0+MU0KLSAqICBUaGlzIGlzIG5lZWRlZCB0byBhdm9pZCBhbGxvY2F0aW5nIGVudGlyZSBBQ1BJIF9DUlMgcmVzIHRvIG9uZSBjaGlsZCBicmlkZ2Uvc2xvdC4KLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKmdldF9tYXhfcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1heDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0ZW1wOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0JdTMyIG1heF9zaXplW10gPSB7IDB4NDAwMDAwMCwgMHgyMDAwMDAwLCAweDEwMDAwMDAsIDB4MDgwMDAwMCwgMHgwNDAwMDAwLCAweDAyMDAwMDAsIDB4MDEwMDAwMCwgMHgwMCB9OwotCWludCBpOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoc29ydF9ieV9tYXhfc2l6ZShoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmb3IgKG1heCA9ICpoZWFkO21heDsgbWF4ID0gbWF4LT5uZXh0KSB7Ci0KLQkJLyogSWYgbm90IGJpZyBlbm91Z2ggd2UgY291bGQgcHJvYmFibHkganVzdCBiYWlsLCAKLQkJICAgaW5zdGVhZCB3ZSdsbCBjb250aW51ZSB0byB0aGUgbmV4dC4gKi8KLQkJaWYgKG1heC0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChtYXgtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG1heC0+YmFzZSB8IChzaXplLTEpKSArIDE7Ci0KLQkJCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobWF4LT5sZW5ndGggLSAodGVtcF9kd29yZCAtIG1heC0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG1heC0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBtYXgtPmJhc2U7Ci0JCQltYXgtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJbWF4LT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgbmV4dCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCW1heC0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAoKG1heC0+YmFzZSArIG1heC0+bGVuZ3RoKSAmIChzaXplIC0gMSkpIHsKLQkJCS8qIHRoaXMgb25lIGlzbid0IGVuZCBhbGlnbmVkIHByb3Blcmx5IGF0IHRoZSB0b3AKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCQkJdGVtcF9kd29yZCA9ICgobWF4LT5iYXNlICsgbWF4LT5sZW5ndGgpICYgfihzaXplIC0gMSkpOwotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSBtYXgtPmxlbmd0aCArIG1heC0+YmFzZQotCQkJCQkgICAgIC0gc3BsaXRfbm9kZS0+YmFzZTsKLQkJCW1heC0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbWF4LT5uZXh0OwotCQkJbWF4LT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfQotCi0JCS8qIE1ha2Ugc3VyZSBpdCBkaWRuJ3Qgc2hyaW5rIHRvbyBtdWNoIHdoZW4gd2UgYWxpZ25lZCBpdCAqLwotCQlpZiAobWF4LT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJZm9yICggaSA9IDA7IG1heF9zaXplW2ldID4gc2l6ZTsgaSsrKSB7Ci0JCQlpZiAobWF4LT5sZW5ndGggPiBtYXhfc2l6ZVtpXSkgewotCQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJCWJyZWFrOwkvKiByZXR1cm4gTlVMTDsgKi8KLQkJCQlzcGxpdF9ub2RlLT5iYXNlID0gbWF4LT5iYXNlICsgbWF4X3NpemVbaV07Ci0JCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbWF4LT5sZW5ndGggLSBtYXhfc2l6ZVtpXTsKLQkJCQltYXgtPmxlbmd0aCA9IG1heF9zaXplW2ldOwotCQkJCS8qIFB1dCBpdCBuZXh0IGluIHRoZSBsaXN0ICovCi0JCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCQltYXgtPm5leHQgPSBzcGxpdF9ub2RlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJLyogTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCXRlbXAgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopICpoZWFkOwotCQlpZiAodGVtcCA9PSBtYXgpIHsKLQkJCSpoZWFkID0gbWF4LT5uZXh0OwotCQl9IGVsc2UgewotCQkJd2hpbGUgKHRlbXAgJiYgdGVtcC0+bmV4dCAhPSBtYXgpIHsKLQkJCQl0ZW1wID0gdGVtcC0+bmV4dDsKLQkJCX0KLQotCQkJdGVtcC0+bmV4dCA9IG1heC0+bmV4dDsKLQkJfQotCi0JCW1heC0+bmV4dCA9IE5VTEw7Ci0JCXJldHVybiBtYXg7Ci0JfQotCi0JLyogSWYgd2UgZ2V0IGhlcmUsIHdlIGNvdWxkbid0IGZpbmQgb25lICovCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotLyoKLSAqIGdldF9yZXNvdXJjZQotICoKLSAqIHRoaXMgZnVuY3Rpb24gc29ydHMgdGhlIHJlc291cmNlIGxpc3QgYnkgc2l6ZSBhbmQgdGhlbgotICogcmV0dXJucyB0aGUgZmlyc3Qgbm9kZSBvZiAic2l6ZSIgbGVuZ3RoLiAgSWYgaXQgZmluZHMgYSBub2RlCi0gKiBsYXJnZXIgdGhhbiAic2l6ZSIgaXQgd2lsbCBzcGxpdCBpdCB1cC4KLSAqCi0gKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1MzIgdGVtcF9kd29yZDsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpICkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIHNvcnRfYnlfc2l6ZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChub2RlID0gKmhlYWQ7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0KSB7Ci0JCWRiZygiJXM6IHJlcV9zaXplID0weCV4IG5vZGU9JXAsIGJhc2U9MHgleCwgbGVuZ3RoPTB4JXhcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHNpemUsIG5vZGUsIG5vZGUtPmJhc2UsIG5vZGUtPmxlbmd0aCk7Ci0JCWlmIChub2RlLT5sZW5ndGggPCBzaXplKQotCQkJY29udGludWU7Ci0KLQkJaWYgKG5vZGUtPmJhc2UgJiAoc2l6ZSAtIDEpKSB7Ci0JCQlkYmcoIiVzOiBub3QgYWxpZ25lZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCS8qIHRoaXMgb25lIGlzbid0IGJhc2UgYWxpZ25lZCBwcm9wZXJseQotCQkJICAgc28gd2UnbGwgbWFrZSBhIG5ldyBlbnRyeSBhbmQgc3BsaXQgaXQgdXAgKi8KLQkJCXRlbXBfZHdvcmQgPSAobm9kZS0+YmFzZSB8IChzaXplLTEpKSArIDE7Ci0KLQkJCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlOwotCQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlub2RlLT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gLyogRW5kIG9mIG5vbi1hbGlnbmVkIGJhc2UgKi8KLQotCQkvKiBEb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRvbyBzbWFsbCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCAqLwotCQlpZiAobm9kZS0+bGVuZ3RoID4gc2l6ZSkgewotCQkJZGJnKCIlczogdG9vIGJpZ1xuIiwgX19GVU5DVElPTl9fKTsKLQkJCS8qIHRoaXMgb25lIGlzIGxvbmdlciB0aGFuIHdlIG5lZWQKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSBub2RlLT5sZW5ndGggLSBzaXplOwotCQkJbm9kZS0+bGVuZ3RoID0gc2l6ZTsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJCW5vZGUtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9ICAvKiBFbmQgb2YgdG9vIGJpZyBvbiB0b3AgZW5kICovCi0KLQkJZGJnKCIlczogZ290IG9uZSEhIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJLyogSWYgd2UgZ290IGhlcmUsIHRoZW4gaXQgaXMgdGhlIHJpZ2h0IHNpemUKLQkJICAgTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCQkqaGVhZCA9IG5vZGUtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICpoZWFkOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IG5vZGUpCi0JCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQl9Ci0JCW5vZGUtPm5leHQgPSBOVUxMOwotCQkvKiBTdG9wIGxvb3BpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiBub2RlOwotfQotCi0KLS8qCi0gKiBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZQotICoKLSAqIFNvcnRzIGFsbCBvZiB0aGUgbm9kZXMgaW4gdGhlIGxpc3QgaW4gYXNjZW5kaW5nIG9yZGVyIGJ5Ci0gKiB0aGVpciBiYXNlIGFkZHJlc3Nlcy4gIEFsc28gZG9lcyBnYXJiYWdlIGNvbGxlY3Rpb24gYnkKLSAqIGNvbWJpbmluZyBhZGphY2VudCBub2Rlcy4KLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTE7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTI7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlkYmcoIiVzOiBoZWFkID0gJXAsICpoZWFkID0gJXBcbiIsIF9fRlVOQ1RJT05fXywgaGVhZCwgKmhlYWQpOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gMTsKLQotCWRiZygiKmhlYWQtPm5leHQgPSAlcFxuIiwoKmhlYWQpLT5uZXh0KTsKLQotCWlmICghKCpoZWFkKS0+bmV4dCkKLQkJcmV0dXJuIDA7CS8qIG9ubHkgb25lIGl0ZW0gb24gdGhlIGxpc3QsIGFscmVhZHkgc29ydGVkISAqLwotCi0JZGJnKCIqaGVhZC0+YmFzZSA9IDB4JXhcbiIsKCpoZWFkKS0+YmFzZSk7Ci0JZGJnKCIqaGVhZC0+bmV4dC0+YmFzZSA9IDB4JXhcbiIsKCpoZWFkKS0+bmV4dC0+YmFzZSk7Ci0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5iYXNlID4gKCpoZWFkKS0+bmV4dC0+YmFzZSkpIHsKLQkJCW5vZGUxID0gKmhlYWQ7Ci0JCQkoKmhlYWQpID0gKCpoZWFkKS0+bmV4dDsKLQkJCW5vZGUxLT5uZXh0ID0gKCpoZWFkKS0+bmV4dDsKLQkJCSgqaGVhZCktPm5leHQgPSBub2RlMTsKLQkJCW91dF9vZl9vcmRlcisrOwotCQl9Ci0KLQkJbm9kZTEgPSAoKmhlYWQpOwotCi0JCXdoaWxlIChub2RlMS0+bmV4dCAmJiBub2RlMS0+bmV4dC0+bmV4dCkgewotCQkJaWYgKG5vZGUxLT5uZXh0LT5iYXNlID4gbm9kZTEtPm5leHQtPm5leHQtPmJhc2UpIHsKLQkJCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCQlub2RlMiA9IG5vZGUxLT5uZXh0OwotCQkJCW5vZGUxLT5uZXh0ID0gbm9kZTEtPm5leHQtPm5leHQ7Ci0JCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMi0+bmV4dCA9IG5vZGUxLT5uZXh0OwotCQkJCW5vZGUxLT5uZXh0ID0gbm9kZTI7Ci0JCQl9IGVsc2UKLQkJCQlub2RlMSA9IG5vZGUxLT5uZXh0OwotCQl9Ci0JfSAgLyogRW5kIG9mIG91dF9vZl9vcmRlciBsb29wICovCi0KLQlub2RlMSA9ICpoZWFkOwotCi0Jd2hpbGUgKG5vZGUxICYmIG5vZGUxLT5uZXh0KSB7Ci0JCWlmICgobm9kZTEtPmJhc2UgKyBub2RlMS0+bGVuZ3RoKSA9PSBub2RlMS0+bmV4dC0+YmFzZSkgewotCQkJLyogQ29tYmluZSAqLwotCQkJZGJnKCI4Li5cbiIpOwotCQkJbm9kZTEtPmxlbmd0aCArPSBub2RlMS0+bmV4dC0+bGVuZ3RoOwotCQkJbm9kZTIgPSBub2RlMS0+bmV4dDsKLQkJCW5vZGUxLT5uZXh0ID0gbm9kZTEtPm5leHQtPm5leHQ7Ci0JCQlrZnJlZShub2RlMik7Ci0JCX0gZWxzZQotCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIHBjaWVocF9zbG90X2NyZWF0ZSAtIENyZWF0ZXMgYSBub2RlIGFuZCBhZGRzIGl0IHRvIHRoZSBwcm9wZXIgYnVzLgotICogQGJ1c251bWJlciAtIGJ1cyB3aGVyZSBuZXcgbm9kZSBpcyB0byBiZSBsb2NhdGVkCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBuZXcgbm9kZSBvciBOVUxMIGlmIHVuc3VjY2Vzc2Z1bAotICovCi1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2NyZWF0ZSh1OCBidXNudW1iZXIpCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0JZGJnKCIlczogYnVzbnVtYmVyICV4XG4iLCBfX0ZVTkNUSU9OX18sIGJ1c251bWJlcik7Ci0JbmV3X3Nsb3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChuZXdfc2xvdCA9PSBOVUxMKQotCQlyZXR1cm4gbmV3X3Nsb3Q7Ci0KLQltZW1zZXQobmV3X3Nsb3QsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCW5ld19zbG90LT5uZXh0ID0gTlVMTDsKLQluZXdfc2xvdC0+Y29uZmlndXJlZCA9IDE7Ci0KLQlpZiAocGNpZWhwX3Nsb3RfbGlzdFtidXNudW1iZXJdID09IE5VTEwpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtidXNudW1iZXJdID0gbmV3X3Nsb3Q7Ci0JfSBlbHNlIHsKLQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXTsKLQkJd2hpbGUgKG5leHQtPm5leHQgIT0gTlVMTCkKLQkJCW5leHQgPSBuZXh0LT5uZXh0OwotCQluZXh0LT5uZXh0ID0gbmV3X3Nsb3Q7Ci0JfQotCXJldHVybiBuZXdfc2xvdDsKLX0KLQotCi0vKioKLSAqIHNsb3RfcmVtb3ZlIC0gUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2Ygc2xvdHMuCi0gKiBAb2xkX3Nsb3Q6IHNsb3QgdG8gcmVtb3ZlCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsICEwIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBzbG90X3JlbW92ZShzdHJ1Y3QgcGNpX2Z1bmMgKiBvbGRfc2xvdCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0KLQlpZiAob2xkX3Nsb3QgPT0gTlVMTCkKLQkJcmV0dXJuIDE7Ci0KLQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFtvbGRfc2xvdC0+YnVzXTsKLQotCWlmIChuZXh0ID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JaWYgKG5leHQgPT0gb2xkX3Nsb3QpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFtvbGRfc2xvdC0+YnVzXSA9IG9sZF9zbG90LT5uZXh0OwotCQlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMob2xkX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlICgobmV4dC0+bmV4dCAhPSBvbGRfc2xvdCkgJiYgKG5leHQtPm5leHQgIT0gTlVMTCkpIHsKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JfQotCi0JaWYgKG5leHQtPm5leHQgPT0gb2xkX3Nsb3QpIHsKLQkJbmV4dC0+bmV4dCA9IG9sZF9zbG90LT5uZXh0OwotCQlwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMob2xkX3Nsb3QpOwotCQlrZnJlZShvbGRfc2xvdCk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gMjsKLX0KLQotCi0vKioKLSAqIGJyaWRnZV9zbG90X3JlbW92ZSAtIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mIHNsb3RzLgotICogQGJyaWRnZTogYnJpZGdlIHRvIHJlbW92ZQotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAhMCBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQgYnJpZGdlX3Nsb3RfcmVtb3ZlKHN0cnVjdCBwY2lfZnVuYyAqYnJpZGdlKQotewotCXU4IHN1Ym9yZGluYXRlQnVzLCBzZWNvbmRhcnlCdXM7Ci0JdTggdGVtcEJ1czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5leHQ7Ci0KLQlpZiAoYnJpZGdlID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0Jc2Vjb25kYXJ5QnVzID0gKGJyaWRnZS0+Y29uZmlnX3NwYWNlWzB4MDZdID4+IDgpICYgMHhGRjsKLQlzdWJvcmRpbmF0ZUJ1cyA9IChicmlkZ2UtPmNvbmZpZ19zcGFjZVsweDA2XSA+PiAxNikgJiAweEZGOwotCi0JZm9yICh0ZW1wQnVzID0gc2Vjb25kYXJ5QnVzOyB0ZW1wQnVzIDw9IHN1Ym9yZGluYXRlQnVzOyB0ZW1wQnVzKyspIHsKLQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbdGVtcEJ1c107Ci0KLQkJd2hpbGUgKCFzbG90X3JlbW92ZShuZXh0KSkgewotCQkJbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbdGVtcEJ1c107Ci0JCX0KLQl9Ci0KLQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFticmlkZ2UtPmJ1c107Ci0KLQlpZiAobmV4dCA9PSBOVUxMKSB7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChuZXh0ID09IGJyaWRnZSkgewotCQlwY2llaHBfc2xvdF9saXN0W2JyaWRnZS0+YnVzXSA9IGJyaWRnZS0+bmV4dDsKLQkJa2ZyZWUoYnJpZGdlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jd2hpbGUgKChuZXh0LT5uZXh0ICE9IGJyaWRnZSkgJiYgKG5leHQtPm5leHQgIT0gTlVMTCkpIHsKLQkJbmV4dCA9IG5leHQtPm5leHQ7Ci0JfQotCi0JaWYgKG5leHQtPm5leHQgPT0gYnJpZGdlKSB7Ci0JCW5leHQtPm5leHQgPSBicmlkZ2UtPm5leHQ7Ci0JCWtmcmVlKGJyaWRnZSk7Ci0JCXJldHVybiAwOwotCX0gZWxzZQotCQlyZXR1cm4gMjsKLX0KLQotCi0vKioKLSAqIHBjaWVocF9zbG90X2ZpbmQgLSBMb29rcyBmb3IgYSBub2RlIGJ5IGJ1cywgYW5kIGRldmljZSwgbXVsdGlwbGUgZnVuY3Rpb25zIGFjY2Vzc2VkCi0gKiBAYnVzOiBidXMgdG8gZmluZAotICogQGRldmljZTogZGV2aWNlIHRvIGZpbmQKLSAqIEBpbmRleDogaXMgMCBmb3IgZmlyc3QgZnVuY3Rpb24gZm91bmQsIDEgZm9yIHRoZSBzZWNvbmQuLi4KLSAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG5vZGUgaWYgc3VjY2Vzc2Z1bCwgJU5VTEwgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2ZpbmQodTggYnVzLCB1OCBkZXZpY2UsIHU4IGluZGV4KQotewotCWludCBmb3VuZCA9IC0xOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKLQotCWZ1bmMgPSBwY2llaHBfc2xvdF9saXN0W2J1c107Ci0JZGJnKCIlczogYnVzICV4IGRldmljZSAleCBpbmRleCAleFxuIiwKLQkJX19GVU5DVElPTl9fLCBidXMsIGRldmljZSwgaW5kZXgpOwotCWlmIChmdW5jICE9IE5VTEwpIHsKLQkJZGJnKCIlczogZnVuYy0+IGJ1cyAleCBkZXZpY2UgJXggZnVuY3Rpb24gJXggcGNpX2RldiAlcFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uLAotCQkJZnVuYy0+cGNpX2Rldik7Ci0JfSBlbHNlCi0JCWRiZygiJXM6IGZ1bmMgPT0gTlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICgoZnVuYyA9PSBOVUxMKSB8fCAoKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpICYmIChpbmRleCA9PSAwKSkpCi0JCXJldHVybiBmdW5jOwotCi0JaWYgKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpCi0JCWZvdW5kKys7Ci0KLQl3aGlsZSAoZnVuYy0+bmV4dCAhPSBOVUxMKSB7Ci0JCWZ1bmMgPSBmdW5jLT5uZXh0OwotCi0JCWRiZygiJXM6IEluIHdoaWxlIGxvb3AsIGZ1bmMtPiBidXMgJXggZGV2aWNlICV4IGZ1bmN0aW9uICV4IHBjaV9kZXYgJXBcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwKLQkJCWZ1bmMtPnBjaV9kZXYpOwotCQlpZiAoZnVuYy0+ZGV2aWNlID09IGRldmljZSkKLQkJCWZvdW5kKys7Ci0JCWRiZygiJXM6IHdoaWxlIGxvb3AsIGZvdW5kICVkLCBpbmRleCAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJZm91bmQsIGluZGV4KTsKLQotCQlpZiAoKGZvdW5kID09IGluZGV4KSB8fCAoZnVuYy0+ZnVuY3Rpb24gPT0gaW5kZXgpKSB7Ci0JCQlkYmcoIiVzOiBGb3VuZCBidXMgJXggZGV2ICV4IGZ1bmMgJXhcbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCXJldHVybiBmdW5jOwotCQl9Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgaXNfYnJpZGdlKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpCi17Ci0JLyogQ2hlY2sgdGhlIGhlYWRlciB0eXBlICovCi0JaWYgKCgoZnVuYy0+Y29uZmlnX3NwYWNlWzB4MDNdID4+IDE2KSAmIDB4RkYpID09IDB4MDEpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLQogLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBjb25zdGl0dXRlIHRoZSBidWxrIG9mIHRoZSAKICAgIGhvdHBsdWcgY29udHJvbGxlciBsb2dpYwogICovCkBAIC0xMTAwLDIwICsyNjksMTcgQEAKICAqIENvbmZpZ3VyZXMgYm9hcmQKICAqCiAgKi8KLXN0YXRpYyB1MzIgYm9hcmRfYWRkZWQoc3RydWN0IHBjaV9mdW5jICogZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKiBjdHJsKQorc3RhdGljIGludCBib2FyZF9hZGRlZChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCXU4IGhwX3Nsb3Q7Ci0JaW50IGluZGV4OwotCXUzMiB0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQl1MzIgcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X2Z1bmMgPSBOVUxMOwotCXN0cnVjdCBzbG90ICpwX3Nsb3Q7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gcF9zbG90LT5jdHJsOwogCi0JcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBmdW5jLT5kZXZpY2UpOwotCWhwX3Nsb3QgPSBmdW5jLT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CisJaHBfc2xvdCA9IHBfc2xvdC0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCi0JZGJnKCIlczogZnVuYy0+ZGV2aWNlLCBzbG90X29mZnNldCwgaHBfc2xvdCA9ICVkLCAlZCAsJWRcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+ZGV2aWNlLCBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQsIGhwX3Nsb3QpOworCWRiZygiJXM6IHNsb3QgZGV2aWNlLCBzbG90IG9mZnNldCwgaHAgc2xvdCA9ICVkLCAlZCAsJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+ZGV2aWNlLAorCQkJY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBocF9zbG90KTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwpAQCAtMTE0MSw5ICszMDcsNyBAQAogCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCiAJLyogV2FpdCBmb3IgfjEgc2Vjb25kICovCi0JZGJnKCIlczogYmVmb3JlIGxvbmdfZGVsYXlcbiIsIF9fRlVOQ1RJT05fXyk7CiAJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwotCWRiZygiJXM6IGFmdGVybG9uZ19kZWxheVxuIiwgX19GVU5DVElPTl9fKTsKIAogCS8qICBDaGVjayBsaW5rIHRyYWluaW5nIHN0YXR1cyAqLwogCXJjID0gcF9zbG90LT5ocGNfb3BzLT5jaGVja19sbmtfc3RhdHVzKGN0cmwpOyAgCkBAIC0xMTUzLDk4ICszMTcsNDcgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCWRiZygiJXM6IGZ1bmMgc3RhdHVzID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+c3RhdHVzKTsKKwlkYmcoIiVzOiBzbG90IHN0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+c3RhdHVzKTsKIAogCS8qIENoZWNrIGZvciBhIHBvd2VyIGZhdWx0ICovCi0JaWYgKGZ1bmMtPnN0YXR1cyA9PSAweEZGKSB7CisJaWYgKHBfc2xvdC0+c3RhdHVzID09IDB4RkYpIHsKIAkJLyogcG93ZXIgZmF1bHQgb2NjdXJyZWQsIGJ1dCBpdCB3YXMgYmVuaWduICovCi0JCXRlbXBfcmVnaXN0ZXIgPSAweEZGRkZGRkZGOwotCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKIAkJcmMgPSBQT1dFUl9GQUlMVVJFOwotCQlmdW5jLT5zdGF0dXMgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIEdldCB2ZW5kb3IvZGV2aWNlIElEIHUzMiAqLwotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQgKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiksIAotCQkJUENJX1ZFTkRPUl9JRCwgJnRlbXBfcmVnaXN0ZXIpOwotCQlkYmcoIiVzOiBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIHJldHVybnMgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlkYmcoIiVzOiB0ZW1wX3JlZ2lzdGVyIGlzICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfcmVnaXN0ZXIpOwotCi0JCWlmIChyYyAhPSAwKSB7Ci0JCQkvKiBTb21ldGhpbmcncyB3cm9uZyBoZXJlICovCi0JCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJCWRiZygiJXM6IHRlbXAgcmVnaXN0ZXIgc2V0IHRvICV4IGJ5IGVycm9yXG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfcmVnaXN0ZXIpOwotCQl9Ci0JCS8qIFByZXNldCByZXR1cm4gY29kZS4gIEl0IHdpbGwgYmUgY2hhbmdlZCBsYXRlciBpZiB0aGluZ3MgZ28gb2theS4gKi8KLQkJcmMgPSBOT19BREFQVEVSX1BSRVNFTlQ7CisJCXBfc2xvdC0+c3RhdHVzID0gMDsKKwkJZ290byBlcnJfZXhpdDsKIAl9CiAKLQkvKiBBbGwgRidzIGlzIGFuIGVtcHR5IHNsb3Qgb3IgYW4gaW52YWxpZCBib2FyZCAqLwotCWlmICh0ZW1wX3JlZ2lzdGVyICE9IDB4RkZGRkZGRkYpIHsJICAvKiBDaGVjayBmb3IgYSBib2FyZCBpbiB0aGUgc2xvdCAqLwotCQlyZXNfbGlzdHMuaW9faGVhZCA9IGN0cmwtPmlvX2hlYWQ7Ci0JCXJlc19saXN0cy5tZW1faGVhZCA9IGN0cmwtPm1lbV9oZWFkOwotCQlyZXNfbGlzdHMucF9tZW1faGVhZCA9IGN0cmwtPnBfbWVtX2hlYWQ7Ci0JCXJlc19saXN0cy5idXNfaGVhZCA9IGN0cmwtPmJ1c19oZWFkOwotCQlyZXNfbGlzdHMuaXJxcyA9IE5VTEw7CisJcmMgPSBwY2llaHBfY29uZmlndXJlX2RldmljZShwX3Nsb3QpOworCWlmIChyYykgeworCQllcnIoIkNhbm5vdCBhZGQgZGV2aWNlIDB4JXg6JXhcbiIsIHBfc2xvdC0+YnVzLAorCQkJCXBfc2xvdC0+ZGV2aWNlKTsKKwkJZ290byBlcnJfZXhpdDsKKwl9CiAKLQkJcmMgPSBjb25maWd1cmVfbmV3X2RldmljZShjdHJsLCBmdW5jLCAwLCAmcmVzX2xpc3RzLCAwLCAwKTsKLQkJZGJnKCIlczogYmFjayBmcm9tIGNvbmZpZ3VyZV9uZXdfZGV2aWNlXG4iLCBfX0ZVTkNUSU9OX18pOworCXBfc2xvdC0+c3RhdHVzID0gMDsKIAotCQljdHJsLT5pb19oZWFkID0gcmVzX2xpc3RzLmlvX2hlYWQ7Ci0JCWN0cmwtPm1lbV9oZWFkID0gcmVzX2xpc3RzLm1lbV9oZWFkOwotCQljdHJsLT5wX21lbV9oZWFkID0gcmVzX2xpc3RzLnBfbWVtX2hlYWQ7Ci0JCWN0cmwtPmJ1c19oZWFkID0gcmVzX2xpc3RzLmJ1c19oZWFkOworCS8qCisJICogU29tZSBQQ0kgRXhwcmVzcyByb290IHBvcnRzIHJlcXVpcmUgZml4dXAgYWZ0ZXIgaG90LXBsdWcgb3BlcmF0aW9uLgorCSAqLworCWlmIChwY2llX21jaF9xdWlyaykKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIGN0cmwtPnBjaV9kZXYpOworCWlmIChQV1JfTEVEKGN0cmwtPmN0cmxjYXApKSB7CisJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KKyAgCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwogCi0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+bWVtX2hlYWQpKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5wX21lbV9oZWFkKSk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+aW9faGVhZCkpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmJ1c19oZWFkKSk7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKLQkJCXJldHVybiByYzsKLQkJfQotCQlwY2llaHBfc2F2ZV9zbG90X2NvbmZpZyhjdHJsLCBmdW5jKTsKLQotCQlmdW5jLT5zdGF0dXMgPSAwOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDB4MTA7Ci0JCWZ1bmMtPmlzX2FfYm9hcmQgPSAweDAxOwotCi0JCS8qIG5leHQsIHdlIHdpbGwgaW5zdGFudGlhdGUgdGhlIGxpbnV4IHBjaV9kZXYgc3RydWN0dXJlcyAKLQkJICogKHdpdGggYXBwcm9wcmlhdGUgZHJpdmVyIG5vdGlmaWNhdGlvbiwgaWYgYWxyZWFkeSBwcmVzZW50KSAKLQkJICovCi0JCWluZGV4ID0gMDsKLQkJZG8gewotCQkJbmV3X2Z1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCBmdW5jLT5kZXZpY2UsIGluZGV4KyspOwotCQkJaWYgKG5ld19mdW5jICYmICFuZXdfZnVuYy0+cGNpX2RldikgewotCQkJCWRiZygiJXM6Y2FsbCBwY2lfaHBfY29uZmlndXJlX2RldiwgZnVuYyAleFxuIiwgCi0JCQkJCV9fRlVOQ1RJT05fXywgaW5kZXgpOwotCQkJCXBjaWVocF9jb25maWd1cmVfZGV2aWNlKGN0cmwsIG5ld19mdW5jKTsKLQkJCX0KLQkJfSB3aGlsZSAobmV3X2Z1bmMpOwotCi0gCQkvKiAKLSAJCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KLSAJCSAqLwotIAkJaWYgKHBjaWVfbWNoX3F1aXJrKQotIAkJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBjdHJsLT5wY2lfZGV2KTsKLSAKLSAgCQlpZiAoUFdSX0xFRChjdHJsLT5jdHJsY2FwKSkgewotICAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCi0gIAkJCWRvd24oJmN0cmwtPmNyaXRfc2VjdCk7Ci0gICAKLSAgCQkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKKyAgCQlwX3Nsb3QtPmhwY19vcHMtPmdyZWVuX2xlZF9vbihwX3Nsb3QpOwogICAKLSAgCQkJLyogV2FpdCBmb3IgdGhlIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KLSAgCQkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOworICAJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCisgIAkJd2FpdF9mb3JfY3RybF9pcnEgKGN0cmwpOwogICAJCi0gIAkJCS8qIERvbmUgd2l0aCBleGNsdXNpdmUgaGFyZHdhcmUgYWNjZXNzICovCi0gIAkJCXVwKCZjdHJsLT5jcml0X3NlY3QpOwotICAJCX0KLQl9IGVsc2UgewotCQlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKLQkJcmV0dXJuIC0xOwotCX0KKyAgCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLworICAJCXVwKCZjdHJsLT5jcml0X3NlY3QpOworICAJfQogCXJldHVybiAwOworCitlcnJfZXhpdDoKKwlzZXRfc2xvdF9vZmYoY3RybCwgcF9zbG90KTsKKwlyZXR1cm4gLTE7CiB9CiAKIApAQCAtMTI1Miw1NSArMzY1LDI1IEBACiAgKiByZW1vdmVfYm9hcmQgLSBUdXJucyBvZmYgc2xvdCBhbmQgTEVEJ3MKICAqCiAgKi8KLXN0YXRpYyB1MzIgcmVtb3ZlX2JvYXJkKHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCitzdGF0aWMgaW50IHJlbW92ZV9ib2FyZChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewotCWludCBpbmRleDsKLQl1OCBza2lwID0gMDsKIAl1OCBkZXZpY2U7CiAJdTggaHBfc2xvdDsKLQl1MzIgcmM7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHJlc19saXN0czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKnRlbXBfZnVuYzsKLQlzdHJ1Y3Qgc2xvdCAqcF9zbG90OworCWludCByYzsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAotCWlmIChmdW5jID09IE5VTEwpCisJaWYgKHBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UocF9zbG90KSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAocGNpZWhwX3VuY29uZmlndXJlX2RldmljZShmdW5jKSkKLQkJcmV0dXJuIDE7CisJZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7CiAKLQlkZXZpY2UgPSBmdW5jLT5kZXZpY2U7Ci0KLQlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OworCWhwX3Nsb3QgPSBwX3Nsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAlwX3Nsb3QgPSBwY2llaHBfZmluZF9zbG90KGN0cmwsIGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpOwogCiAJZGJnKCJJbiAlcywgaHBfc2xvdCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGhwX3Nsb3QpOwogCi0JaWYgKChjdHJsLT5hZGRfc3VwcG9ydCkgJiYKLQkJIShmdW5jLT5idXNfaGVhZCB8fCBmdW5jLT5tZW1faGVhZCB8fCBmdW5jLT5wX21lbV9oZWFkIHx8IGZ1bmMtPmlvX2hlYWQpKSB7Ci0JCS8qIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIHNhdmVkIGFueSBvZiB0aGUgYm9hcmQncwotCQkgKiByZXNvdXJjZXMgYWxyZWFkeS4gIElmIHNvLCB3ZSdsbCBza2lwIHRoZSBhdHRlbXB0IHRvCi0JCSAqIGRldGVybWluZSB3aGF0J3MgYmVpbmcgdXNlZC4KLQkJICovCi0JCWluZGV4ID0gMDsKLQotCQl0ZW1wX2Z1bmMgPSBmdW5jOwotCi0JCXdoaWxlICgodGVtcF9mdW5jID0gcGNpZWhwX3Nsb3RfZmluZCh0ZW1wX2Z1bmMtPmJ1cywgdGVtcF9mdW5jLT5kZXZpY2UsIGluZGV4KyspKSkgewotCQkJaWYgKHRlbXBfZnVuYy0+YnVzX2hlYWQgfHwgdGVtcF9mdW5jLT5tZW1faGVhZAotCQkJICAgIHx8IHRlbXBfZnVuYy0+cF9tZW1faGVhZCB8fCB0ZW1wX2Z1bmMtPmlvX2hlYWQpIHsKLQkJCQlza2lwID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmICghc2tpcCkKLQkJCXJjID0gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMoY3RybCwgZnVuYywgRElTQUJMRV9DQVJEKTsKLQl9CiAJLyogQ2hhbmdlIHN0YXR1cyB0byBzaHV0ZG93biAqLwotCWlmIChmdW5jLT5pc19hX2JvYXJkKQotCQlmdW5jLT5zdGF0dXMgPSAweDAxOwotCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOworCXBfc2xvdC0+c3RhdHVzID0gMHgwMTsKIAogCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KIAlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwpAQCAtMTMyOCw1NiArNDExLDYgQEAKIAkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwogCXVwKCZjdHJsLT5jcml0X3NlY3QpOwogCi0JaWYgKGN0cmwtPmFkZF9zdXBwb3J0KSB7Ci0JCXdoaWxlIChmdW5jKSB7Ci0JCQlyZXNfbGlzdHMuaW9faGVhZCA9IGN0cmwtPmlvX2hlYWQ7Ci0JCQlyZXNfbGlzdHMubWVtX2hlYWQgPSBjdHJsLT5tZW1faGVhZDsKLQkJCXJlc19saXN0cy5wX21lbV9oZWFkID0gY3RybC0+cF9tZW1faGVhZDsKLQkJCXJlc19saXN0cy5idXNfaGVhZCA9IGN0cmwtPmJ1c19oZWFkOwotCi0JCQlkYmcoIlJldHVybmluZyByZXNvdXJjZXMgdG8gY3RsciBsaXN0cyBmb3IgKEIvRC9GKSA9ICglI3gvJSN4LyUjeClcbiIsIAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJCXBjaWVocF9yZXR1cm5fYm9hcmRfcmVzb3VyY2VzKGZ1bmMsICZyZXNfbGlzdHMpOwotCi0JCQljdHJsLT5pb19oZWFkID0gcmVzX2xpc3RzLmlvX2hlYWQ7Ci0JCQljdHJsLT5tZW1faGVhZCA9IHJlc19saXN0cy5tZW1faGVhZDsKLQkJCWN0cmwtPnBfbWVtX2hlYWQgPSByZXNfbGlzdHMucF9tZW1faGVhZDsKLQkJCWN0cmwtPmJ1c19oZWFkID0gcmVzX2xpc3RzLmJ1c19oZWFkOwotCi0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPm1lbV9oZWFkKSk7Ci0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPnBfbWVtX2hlYWQpKTsKLQkJCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+aW9faGVhZCkpOwotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5idXNfaGVhZCkpOwotCi0JCQlpZiAoaXNfYnJpZGdlKGZ1bmMpKSB7Ci0JCQkJZGJnKCJQQ0kgQnJpZGdlIEhvdC1SZW1vdmUgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgCi0JCQkJCWN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCQlicmlkZ2Vfc2xvdF9yZW1vdmUoZnVuYyk7Ci0JCQl9IGVsc2UgewotCQkJCWRiZygiUENJIEZ1bmN0aW9uIEhvdC1SZW1vdmUgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgCi0JCQkJCWN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJCQlzbG90X3JlbW92ZShmdW5jKTsKLQkJCX0KLQotCQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIGRldmljZSwgMCk7Ci0JCX0KLQotCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUoY3RybC0+c2xvdF9idXMpOwotCi0JCWlmIChmdW5jID09IE5VTEwpIHsKLQkJCXJldHVybiAxOwotCQl9Ci0KLQkJZnVuYy0+YnVzID0gY3RybC0+c2xvdF9idXM7Ci0JCWZ1bmMtPmRldmljZSA9IGRldmljZTsKLQkJZnVuYy0+ZnVuY3Rpb24gPSAwOwotCQlmdW5jLT5jb25maWd1cmVkID0gMDsKLQkJZnVuYy0+c3dpdGNoX3NhdmUgPSAweDEwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxMSwxMyArNDQ0LDE1IEBACiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfcG93ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKGdldHN0YXR1cykgewogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPRkZfU1RBVEU7Ci0JCWRiZygiSW4gcG93ZXJfZG93bl9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogZGlzYWJsaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlwY2llaHBfZGlzYWJsZV9zbG90KHBfc2xvdCk7CiAJCXBfc2xvdC0+c3RhdGUgPSBTVEFUSUNfU1RBVEU7CiAJfSBlbHNlIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST05fU1RBVEU7Ci0JCWRiZygiSW4gYWRkX2JvYXJkLCBiOmQoJXg6JXgpXG4iLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlkYmcoIiVzOiBhZGRpbmcgYnVzOmRldmljZSgleDoleClcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQlwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCiAJCWlmIChwY2llaHBfZW5hYmxlX3Nsb3QocF9zbG90KSAmJiBQV1JfTEVEKHBfc2xvdC0+Y3RybC0+Y3RybGNhcCkpIHsKIAkJCS8qIFdhaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaGFyZHdhcmUgKi8KQEAgLTE0NTksMTMgKzQ5NCwxNSBAQAogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7CiAJaWYgKCFnZXRzdGF0dXMpIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST0ZGX1NUQVRFOwotCQlkYmcoIkluIHJlbW92aW5nIGJvYXJkLCBiOmQoJXg6JXgpXG4iLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlkYmcoIiVzOiByZW1vdmluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJcGNpZWhwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCX0gZWxzZSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwotCQlkYmcoIkluIGFkZF9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogYWRkaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlpZiAocGNpZWhwX2VuYWJsZV9zbG90KHBfc2xvdCkgJiYgUFdSX0xFRChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCkBAIC0xNTMxLDcgKzU2OCw2IEBACiAJCWVyciAoIkNhbid0IHN0YXJ0IHVwIG91ciBldmVudCB0aHJlYWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCWRiZygiT3VyIGV2ZW50IHRocmVhZCBwaWQgPSAlZFxuIiwgcGlkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUzOSw5ICs1NzUsNyBAQAogdm9pZCBwY2llaHBfZXZlbnRfc3RvcF90aHJlYWQodm9pZCkKIHsKIAlldmVudF9maW5pc2hlZCA9IDE7Ci0JZGJnKCJldmVudF90aHJlYWQgZmluaXNoIGNvbW1hbmQgZ2l2ZW5cbiIpOwogCXVwKCZldmVudF9zZW1hcGhvcmUpOwotCWRiZygid2FpdCBmb3IgZXZlbnRfdGhyZWFkIHRvIGV4aXRcbiIpOwogCWRvd24oJmV2ZW50X2V4aXQpOwogfQogCkBAIC0xNTczLDcgKzYwNyw2IEBACiB7CiAJaW50IGxvb3AgPSAwOwogCWludCBjaGFuZ2UgPSAxOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAl1OCBocF9zbG90OwogCXU4IGdldHN0YXR1czsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwpAQCAtMTU4MSwxNiArNjE0LDEyIEBACiAJd2hpbGUgKGNoYW5nZSkgewogCQljaGFuZ2UgPSAwOwogCi0JCWZvciAobG9vcCA9IDA7IGxvb3AgPCAxMDsgbG9vcCsrKSB7CisJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBNQVhfRVZFTlRTOyBsb29wKyspIHsKIAkJCWlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlICE9IDApIHsKIAkJCQlocF9zbG90ID0gY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uaHBfc2xvdDsKIAotCQkJCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCAoaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCksIDApOwotCiAJCQkJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAotCQkJCWRiZygiaHBfc2xvdCAlZCwgZnVuYyAlcCwgcF9zbG90ICVwXG4iLCBocF9zbG90LCBmdW5jLCBwX3Nsb3QpOwotCiAJCQkJaWYgKGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmV2ZW50X3R5cGUgPT0gSU5UX0JVVFRPTl9DQU5DRUwpIHsKIAkJCQkJZGJnKCJidXR0b24gY2FuY2VsXG4iKTsKIAkJCQkJZGVsX3RpbWVyKCZwX3Nsb3QtPnRhc2tfZXZlbnQpOwpAQCAtMTY4Miw3ICs3MTEsNiBAQAogCQkJCQkJcF9zbG90LT50YXNrX2V2ZW50LmZ1bmN0aW9uID0gKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKSBwdXNoYnV0dG9uX2hlbHBlcl90aHJlYWQ7CiAJCQkJCQlwX3Nsb3QtPnRhc2tfZXZlbnQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBwX3Nsb3Q7CiAKLQkJCQkJCWRiZygiYWRkX3RpbWVyIHBfc2xvdCA9ICVwXG4iLCAodm9pZCAqKSBwX3Nsb3QpOwogCQkJCQkJYWRkX3RpbWVyKCZwX3Nsb3QtPnRhc2tfZXZlbnQpOwogCQkJCQl9CiAJCQkJfQpAQCAtMTczNywxMyArNzY1LDYgQEAKIHsKIAl1OCBnZXRzdGF0dXMgPSAwOwogCWludCByYzsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIDApOwotCWlmICghZnVuYykgewotCQlkYmcoIiVzOiBFcnJvciEgc2xvdCBOVUxMXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gMTsKLQl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgKGxhdGNoIGNsb3NlZCwgY2FyZCBwcmVzZW50LCBwb3dlciBvZmYpICovCiAJZG93bigmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwpAQCAtMTc3Myw0NSArNzk0LDExIEBACiAJfQogCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKLQlzbG90X3JlbW92ZShmdW5jKTsKLQotCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUocF9zbG90LT5idXMpOwotCWlmIChmdW5jID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JZnVuYy0+YnVzID0gcF9zbG90LT5idXM7Ci0JZnVuYy0+ZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7Ci0JZnVuYy0+ZnVuY3Rpb24gPSAwOwotCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOwotCWZ1bmMtPmlzX2FfYm9hcmQgPSAxOwotCi0JLyogV2UgaGF2ZSB0byBzYXZlIHRoZSBwcmVzZW5jZSBpbmZvIGZvciB0aGVzZSBzbG90cyAqLwotCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JZnVuYy0+c3dpdGNoX3NhdmUgPSAhZ2V0c3RhdHVzPyAweDEwOjA7CiAKLQlyYyA9IGJvYXJkX2FkZGVkKGZ1bmMsIHBfc2xvdC0+Y3RybCk7CisJcmMgPSBib2FyZF9hZGRlZChwX3Nsb3QpOwogCWlmIChyYykgewotCQlpZiAoaXNfYnJpZGdlKGZ1bmMpKQotCQkJYnJpZGdlX3Nsb3RfcmVtb3ZlKGZ1bmMpOwotCQllbHNlCi0JCQlzbG90X3JlbW92ZShmdW5jKTsKLQotCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9jcmVhdGUocF9zbG90LT5idXMpOwotCQlpZiAoZnVuYyA9PSBOVUxMKQotCQkJcmV0dXJuIDE7CS8qIE91dCBvZiBtZW1vcnkgKi8KLQotCQlmdW5jLT5idXMgPSBwX3Nsb3QtPmJ1czsKLQkJZnVuYy0+ZGV2aWNlID0gcF9zbG90LT5kZXZpY2U7Ci0JCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQkJZnVuYy0+Y29uZmlndXJlZCA9IDA7Ci0JCWZ1bmMtPmlzX2FfYm9hcmQgPSAxOwotCi0JCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KLQkJcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmKGZ1bmMtPnByZXNlbmNlX3NhdmUpKTsKIAkJcF9zbG90LT5ocGNfb3BzLT5nZXRfbGF0Y2hfc3RhdHVzKHBfc2xvdCwgJmdldHN0YXR1cyk7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gIWdldHN0YXR1cz8gMHgxMDowOwogCX0KIAogCWlmIChwX3Nsb3QpCkBAIC0xODIzLDE0ICs4MTAsOCBAQAogCiBpbnQgcGNpZWhwX2Rpc2FibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewotCXU4IGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlLCBCQ1I7Ci0JdTggaW5kZXggPSAwOwogCXU4IGdldHN0YXR1cyA9IDA7Ci0JdTMyIHJjID0gMDsKIAlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9idXMgKnBjaV9idXMgPSBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAogCWlmICghcF9zbG90LT5jdHJsKQogCQlyZXR1cm4gMTsKQEAgLTE4NjcsODM4ICs4NDgsOCBAQAogCiAJdXAoJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKIAotCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgaW5kZXgrKyk7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHZpZGVvIGNvbnRyb2xsZXJzIGhlcmUKLQkgKiBmb3IgYWxsIGZ1bmMgb2YgcF9zbG90Ci0JICovCi0Jd2hpbGUgKGZ1bmMgJiYgIXJjKSB7Ci0JCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQkJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJLyogQ2hlY2sgdGhlIENsYXNzIENvZGUgKi8KLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCAweDBCLCAmY2xhc3NfY29kZSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQotCQlpZiAoY2xhc3NfY29kZSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7Ci0JCQkvKiBEaXNwbGF5L1ZpZGVvIGFkYXB0ZXIgKG5vdCBzdXBwb3J0ZWQpICovCi0JCQlyYyA9IFJFTU9WRV9OT1RfU1VQUE9SVEVEOwotCQl9IGVsc2UgewotCQkJLyogU2VlIGlmIGl0J3MgYSBicmlkZ2UgKi8KLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJLyogSWYgaXQncyBhIGJyaWRnZSwgY2hlY2sgdGhlIFZHQSBFbmFibGUgYml0ICovCi0JCQlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCAmQkNSKTsKLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiByYzsKLQotCQkJCS8qIElmIHRoZSBWR0EgRW5hYmxlIGJpdCBpcyBzZXQsIHJlbW92ZSBpc24ndCBzdXBwb3J0ZWQgKi8KLQkJCQlpZiAoQkNSICYgUENJX0JSSURHRV9DVExfVkdBKSB7Ci0JCQkJCXJjID0gUkVNT1ZFX05PVF9TVVBQT1JURUQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCBpbmRleCsrKTsKLQl9Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIDApOwotCWlmICgoZnVuYyAhPSBOVUxMKSAmJiAhcmMpIHsKLQkJcmMgPSByZW1vdmVfYm9hcmQoZnVuYywgcF9zbG90LT5jdHJsKTsKLQl9IGVsc2UgaWYgKCFyYykKLQkJcmMgPSAxOwotCi0JaWYgKHBfc2xvdCkKLQkJdXBkYXRlX3Nsb3RfaW5mbyhwX3Nsb3QpOwotCi0JcmV0dXJuIHJjOworCXJldCA9IHJlbW92ZV9ib2FyZChwX3Nsb3QpOworCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKKwlyZXR1cm4gcmV0OwogfQogCi0KLS8qKgotICogY29uZmlndXJlX25ld19kZXZpY2UgLSBDb25maWd1cmVzIHRoZSBQQ0kgaGVhZGVyIGluZm9ybWF0aW9uIG9mIG9uZSBib2FyZC4KLSAqCi0gKiBAY3RybDogcG9pbnRlciB0byBjb250cm9sbGVyIHN0cnVjdHVyZQotICogQGZ1bmM6IHBvaW50ZXIgdG8gZnVuY3Rpb24gc3RydWN0dXJlCi0gKiBAYmVoaW5kX2JyaWRnZTogMSBpZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIDAgaWYgbm90Ci0gKiBAcmVzb3VyY2VzOiBwb2ludGVyIHRvIHNldCBvZiByZXNvdXJjZSBsaXN0cwotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzCi0gKgotICovCi1zdGF0aWMgdTMyIGNvbmZpZ3VyZV9uZXdfZGV2aWNlKHN0cnVjdCBjb250cm9sbGVyICogY3RybCwgc3RydWN0IHBjaV9mdW5jICogZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMsIHU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpCi17Ci0JdTggdGVtcF9ieXRlLCBmdW5jdGlvbiwgbWF4X2Z1bmN0aW9ucywgc3RvcF9pdDsKLQlpbnQgcmM7Ci0JdTMyIElEOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCWludCBpbmRleDsKLQotCW5ld19zbG90ID0gZnVuYzsKLQotCWRiZygiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCi0JLyogQ2hlY2sgZm9yIE11bHRpLWZ1bmN0aW9uIGRldmljZSAqLwotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKSwgMHgwRSwgJnRlbXBfYnl0ZSk7Ci0JaWYgKHJjKSB7Ci0JCWRiZygiJXM6IHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JaWYgKHRlbXBfYnl0ZSAmIDB4ODApCS8qIE11bHRpLWZ1bmN0aW9uIGRldmljZSAqLwotCQltYXhfZnVuY3Rpb25zID0gODsKLQllbHNlCi0JCW1heF9mdW5jdGlvbnMgPSAxOwotCi0JZnVuY3Rpb24gPSAwOwotCi0JZG8gewotCQlyYyA9IGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oY3RybCwgbmV3X3Nsb3QsIGJlaGluZF9icmlkZ2UsCi0JCQkJCXJlc291cmNlcywgYnJpZGdlX2J1cywgYnJpZGdlX2Rldik7Ci0KLQkJaWYgKHJjKSB7Ci0JCQlkYmcoImNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24gZmFpbGVkOiAlZFxuIiwgcmMpOwotCQkJaW5kZXggPSAwOwotCi0JCQl3aGlsZSAobmV3X3Nsb3QpIHsKLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQobmV3X3Nsb3QtPmJ1cywKLQkJCQkJCW5ld19zbG90LT5kZXZpY2UsIGluZGV4KyspOwotCi0JCQkJaWYgKG5ld19zbG90KQotCQkJCQlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcyhuZXdfc2xvdCwKLQkJCQkJCXJlc291cmNlcyk7Ci0JCQl9Ci0KLQkJCXJldHVybiByYzsKLQkJfQotCi0JCWZ1bmN0aW9uKys7Ci0KLQkJc3RvcF9pdCA9IDA7Ci0KLQkJLyogIFRoZSBmb2xsb3dpbmcgbG9vcCBza2lwcyB0byB0aGUgbmV4dCBwcmVzZW50IGZ1bmN0aW9uCi0JCSAqICBhbmQgY3JlYXRlcyBhIGJvYXJkIHN0cnVjdHVyZQotCQkgKi8KLQotCQl3aGlsZSAoKGZ1bmN0aW9uIDwgbWF4X2Z1bmN0aW9ucykgJiYgKCFzdG9wX2l0KSkgewotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jdGlvbiksIDB4MDAsICZJRCk7Ci0KLQkJCWlmIChJRCA9PSAweEZGRkZGRkZGKSB7CSAgLyogVGhlcmUncyBub3RoaW5nIHRoZXJlLiAqLwotCQkJCWZ1bmN0aW9uKys7Ci0JCQl9IGVsc2UgeyAgLyogVGhlcmUncyBzb21ldGhpbmcgdGhlcmUgKi8KLQkJCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZS4gKi8KLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2NyZWF0ZShmdW5jLT5idXMpOwotCi0JCQkJaWYgKG5ld19zbG90ID09IE5VTEwpIHsKLQkJCQkJLyogT3V0IG9mIG1lbW9yeSAqLwotCQkJCQlyZXR1cm4gMTsKLQkJCQl9Ci0KLQkJCQluZXdfc2xvdC0+YnVzID0gZnVuYy0+YnVzOwotCQkJCW5ld19zbG90LT5kZXZpY2UgPSBmdW5jLT5kZXZpY2U7Ci0JCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0JCQkJbmV3X3Nsb3QtPmlzX2FfYm9hcmQgPSAxOwotCQkJCW5ld19zbG90LT5zdGF0dXMgPSAwOwotCi0JCQkJc3RvcF9pdCsrOwotCQkJfQotCQl9Ci0KLQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCWRiZygicmV0dXJuaW5nIGZyb20gJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENvbmZpZ3VyYXRpb24gbG9naWMgdGhhdCBpbnZvbHZlcyB0aGUgaG90cGx1ZyBkYXRhIHN0cnVjdHVyZXMgYW5kIAotICogdGhlaXIgYm9va2tlZXBpbmcKLSAqLwotCi0vKioKLSAqIGNvbmZpZ3VyZV9icmlkZ2U6IGZpbGwgYnJpZGdlJ3MgcmVnaXN0ZXJzLCBlaXRoZXIgY29uZmlndXJlIG9yIGRpc2FibGUgaXQuCi0gKi8KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9icmlkZ2Uoc3RydWN0IHBjaV9idXMgKnBjaV9idXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlLAotCQkJc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhvbGRfbWVtX25vZGUsCi0JCQlpbnQgYmFzZV9hZGRyLCBpbnQgbGltaXRfYWRkcikKLXsKLQl1MTYgdGVtcF93b3JkOwotCXUzMiByYzsKLQotCWlmIChtZW1fbm9kZSkgewotCQltZW1jcHkoKmhvbGRfbWVtX25vZGUsIG1lbV9ub2RlLCBzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSkpOwotCQltZW1fbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkJLyogc2V0IE1lbSBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCXRlbXBfd29yZCA9ICh1MTYpKG1lbV9ub2RlLT5iYXNlID4+IDE2KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBiYXNlX2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlICsgbWVtX25vZGUtPmxlbmd0aCAtIDEsIDE2KTsKLQkJdGVtcF93b3JkID0gKHUxNikoKG1lbV9ub2RlLT5iYXNlICsgbWVtX25vZGUtPmxlbmd0aCAtIDEpID4+IDE2KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBsaW1pdF9hZGRyLCB0ZW1wX3dvcmQpOwotCX0gZWxzZSB7Ci0JCXRlbXBfd29yZCA9IDB4RkZGRjsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBiYXNlX2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJdGVtcF93b3JkID0gMHgwMDAwOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIGxpbWl0X2FkZHIsIHRlbXBfd29yZCk7Ci0KLQkJa2ZyZWUoKmhvbGRfbWVtX25vZGUpOwotCQkqaG9sZF9tZW1fbm9kZSA9IE5VTEw7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotY29uZmlndXJlX25ld19icmlkZ2Uoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQkJdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsCi0JCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzKQotewotCWludCBjbG9vcDsKLQl1OCB0ZW1wX2J5dGU7Ci0JdTggZGV2aWNlOwotCXUxNiB0ZW1wX3dvcmQ7Ci0JdTMyIHJjOwotCXUzMiBJRDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaG9sZF9wX21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfSU9fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX2J1c19ub2RlOwotCXN0cnVjdCBpcnFfbWFwcGluZyBpcnFzOwotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RzIHRlbXBfcmVzb3VyY2VzOwotCi0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkvKiBzZXQgUHJpbWFyeSBidXMgKi8KLQlkYmcoInNldCBQcmltYXJ5IGJ1cyA9IDB4JXhcbiIsIGZ1bmMtPmJ1cyk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJJTUFSWV9CVVMsIGZ1bmMtPmJ1cyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBmaW5kIHJhbmdlIG9mIGJ1c3NlcyB0byB1c2UgKi8KLQlidXNfbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJnJlc291cmNlcy0+YnVzX2hlYWQsIDFMKTsKLQotCS8qIElmIHdlIGRvbid0IGhhdmUgYW55IGJ1c3NlcyB0byBhbGxvY2F0ZSwgd2UgY2FuJ3QgY29udGludWUgKi8KLQlpZiAoIWJ1c19ub2RlKSB7Ci0JCWVycigiR290IE5PIGJ1cyByZXNvdXJjZSB0byB1c2VcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGJnKCJHb3QgcmFuZ2VzIG9mIGJ1c2VzIHRvIHVzZTogYmFzZTpsZW49MHgleDoleFxuIiwgYnVzX25vZGUtPmJhc2UsIGJ1c19ub2RlLT5sZW5ndGgpOwotCi0JLyogc2V0IFNlY29uZGFyeSBidXMgKi8KLQl0ZW1wX2J5dGUgPSAodTgpYnVzX25vZGUtPmJhc2U7Ci0JZGJnKCJzZXQgU2Vjb25kYXJ5IGJ1cyA9IDB4JXhcbiIsIHRlbXBfYnl0ZSk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDT05EQVJZX0JVUywgdGVtcF9ieXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIHNldCBzdWJvcmRpbmF0ZSBidXMgKi8KLQl0ZW1wX2J5dGUgPSAodTgpKGJ1c19ub2RlLT5iYXNlICsgYnVzX25vZGUtPmxlbmd0aCAtIDEpOwotCWRiZygic2V0IHN1Ym9yZGluYXRlIGJ1cyA9IDB4JXhcbiIsIHRlbXBfYnl0ZSk7Ci0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX1NVQk9SRElOQVRFX0JVUywgdGVtcF9ieXRlKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIFNldCBIUCBwYXJhbWV0ZXJzIChDYWNoZSBMaW5lIFNpemUsIExhdGVuY3kgVGltZXIpICovCi0JcmMgPSBwY2llaHBybV9zZXRfaHBwKGN0cmwsIGZ1bmMsIFBDSV9IRUFERVJfVFlQRV9CUklER0UpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogU2V0dXAgdGhlIElPLCBtZW1vcnksIGFuZCBwcmVmZXRjaGFibGUgd2luZG93cyAqLwotCi0JaW9fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPmlvX2hlYWQpLCAweDEwMDBMKTsKLQlpZiAoaW9fbm9kZSkgewotCQlkYmcoImlvX25vZGUoYmFzZSwgbGVuLCBuZXh0KSAoJXgsICV4LCAlcClcbiIsIGlvX25vZGUtPmJhc2UsCi0JCQkJaW9fbm9kZS0+bGVuZ3RoLCBpb19ub2RlLT5uZXh0KTsKLQl9Ci0KLQltZW1fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQlpZiAobWVtX25vZGUpIHsKLQkJZGJnKCJtZW1fbm9kZShiYXNlLCBsZW4sIG5leHQpICgleCwgJXgsICVwKVxuIiwgbWVtX25vZGUtPmJhc2UsCi0JCQkJbWVtX25vZGUtPmxlbmd0aCwgbWVtX25vZGUtPm5leHQpOwotCX0KLQotCWlmIChyZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCXBfbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQllbHNlIHsKLQkJLyoKLQkJICogSW4gc29tZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbiwgTUVNIGFuZCBQTUVNIGFyZSBub3QKLQkJICogIGRpc3Rpbmd1aXNoZWQsIGFuZCBoZW5jZSBBQ1BJIF9DUlMgaGFzIG9ubHkgTUVNIGVudHJpZXMKLQkJICogIGZvciBib3RoIE1FTSBhbmQgUE1FTS4KLQkJICovCi0JCWRiZygidXNpbmcgTUVNIGZvciBQTUVNXG4iKTsKLQkJcF9tZW1fbm9kZSA9IGdldF9tYXhfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQl9Ci0JaWYgKHBfbWVtX25vZGUpIHsKLQkJZGJnKCJwX21lbV9ub2RlKGJhc2UsIGxlbiwgbmV4dCkgKCV4LCAleCwgJXApXG4iLCBwX21lbV9ub2RlLT5iYXNlLAotCQkJCXBfbWVtX25vZGUtPmxlbmd0aCwgcF9tZW1fbm9kZS0+bmV4dCk7Ci0JfQotCi0JLyogc2V0IHVwIHRoZSBJUlEgaW5mbyAqLwotCWlmICghcmVzb3VyY2VzLT5pcnFzKSB7Ci0JCWlycXMuYmFyYmVyX3BvbGUgPSAwOwotCQlpcnFzLmludGVycnVwdFswXSA9IDA7Ci0JCWlycXMuaW50ZXJydXB0WzFdID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbMl0gPSAwOwotCQlpcnFzLmludGVycnVwdFszXSA9IDA7Ci0JCWlycXMudmFsaWRfSU5UID0gMDsKLQl9IGVsc2UgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gcmVzb3VyY2VzLT5pcnFzLT5iYXJiZXJfcG9sZTsKLQkJaXJxcy5pbnRlcnJ1cHRbMF0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFswXTsKLQkJaXJxcy5pbnRlcnJ1cHRbMV0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsxXTsKLQkJaXJxcy5pbnRlcnJ1cHRbMl0gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsyXTsKLQkJaXJxcy5pbnRlcnJ1cHRbM10gPSByZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFszXTsKLQkJaXJxcy52YWxpZF9JTlQgPSByZXNvdXJjZXMtPmlycXMtPnZhbGlkX0lOVDsKLQl9Ci0KLQkvKiBzZXQgdXAgcmVzb3VyY2UgbGlzdHMgdGhhdCBhcmUgbm93IGFsaWduZWQgb24gdG9wIGFuZCBib3R0b20KLQkgKiBmb3IgYW55dGhpbmcgYmVoaW5kIHRoZSBicmlkZ2UuCi0JICovCi0JdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQgPSBidXNfbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5pb19oZWFkID0gaW9fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5tZW1faGVhZCA9IG1lbV9ub2RlOwotCXRlbXBfcmVzb3VyY2VzLnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCXRlbXBfcmVzb3VyY2VzLmlycXMgPSAmaXJxczsKLQotCS8qIE1ha2UgY29waWVzIG9mIHRoZSBub2RlcyB3ZSBhcmUgZ29pbmcgdG8gcGFzcyBkb3duIHNvIHRoYXQKLQkgKiBpZiB0aGVyZSBpcyBhIHByb2JsZW0sd2UgY2FuIGp1c3QgdXNlIHRoZXNlIHRvIGZyZWUgcmVzb3VyY2VzCi0JICovCi0JaG9sZF9idXNfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQlob2xkX0lPX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9tZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQlob2xkX3BfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoIWhvbGRfYnVzX25vZGUgfHwgIWhvbGRfSU9fbm9kZSB8fCAhaG9sZF9tZW1fbm9kZSB8fCAhaG9sZF9wX21lbV9ub2RlKSB7Ci0JCWtmcmVlKGhvbGRfYnVzX25vZGUpOwotCQlrZnJlZShob2xkX0lPX25vZGUpOwotCQlrZnJlZShob2xkX21lbV9ub2RlKTsKLQkJa2ZyZWUoaG9sZF9wX21lbV9ub2RlKTsKLQotCQlyZXR1cm4gMTsKLQl9Ci0KLQltZW1jcHkoaG9sZF9idXNfbm9kZSwgYnVzX25vZGUsIHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSk7Ci0KLQlidXNfbm9kZS0+YmFzZSArPSAxOwotCWJ1c19ub2RlLT5sZW5ndGggLT0gMTsKLQlidXNfbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkvKiBJZiB3ZSBoYXZlIElPIHJlc291cmNlcyBjb3B5IHRoZW0gYW5kIGZpbGwgaW4gdGhlIGJyaWRnZSdzCi0JICogSU8gcmFuZ2UgcmVnaXN0ZXJzCi0JICovCi0JaWYgKGlvX25vZGUpIHsKLQkJbWVtY3B5KGhvbGRfSU9fbm9kZSwgaW9fbm9kZSwgc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQkJaW9fbm9kZS0+bmV4dCA9IE5VTEw7Ci0KLQkJLyogc2V0IElPIGJhc2UgYW5kIExpbWl0IHJlZ2lzdGVycyAqLwotCQlSRVNfQ0hFQ0soaW9fbm9kZS0+YmFzZSwgOCk7Ci0JCXRlbXBfYnl0ZSA9ICh1OCkoaW9fbm9kZS0+YmFzZSA+PiA4KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0JBU0UsIHRlbXBfYnl0ZSk7Ci0KLQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGggLSAxLCA4KTsKLQkJdGVtcF9ieXRlID0gKHU4KSgoaW9fbm9kZS0+YmFzZSArIGlvX25vZGUtPmxlbmd0aCAtIDEpID4+IDgpOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCBQQ0lfSU9fTElNSVQsIHRlbXBfYnl0ZSk7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJaG9sZF9JT19ub2RlID0gTlVMTDsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIG1lbW9yeSByZXNvdXJjZXMgY29weSB0aGVtIGFuZCBmaWxsIGluIHRoZSBicmlkZ2UncwotCSAqIG1lbW9yeSByYW5nZSByZWdpc3RlcnMuICBPdGhlcndpc2UsIGZpbGwgaW4gdGhlIHJhbmdlCi0JICogcmVnaXN0ZXJzIHdpdGggdmFsdWVzIHRoYXQgZGlzYWJsZSB0aGVtLgotCSAqLwotCXJjID0gY29uZmlndXJlX2JyaWRnZShwY2lfYnVzLCBkZXZmbiwgbWVtX25vZGUsICZob2xkX21lbV9ub2RlLAotCQkJCVBDSV9NRU1PUllfQkFTRSwgUENJX01FTU9SWV9MSU1JVCk7Ci0KLQkvKiBJZiB3ZSBoYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgcmVzb3VyY2VzIGNvcHkgdGhlbSBhbmQgCi0JICogZmlsbCBpbiB0aGUgYnJpZGdlJ3MgbWVtb3J5IHJhbmdlIHJlZ2lzdGVycy4gIE90aGVyd2lzZSwKLQkgKiBmaWxsIGluIHRoZSByYW5nZSByZWdpc3RlcnMgd2l0aCB2YWx1ZXMgdGhhdCBkaXNhYmxlIHRoZW0uCi0JICovCi0JcmMgPSBjb25maWd1cmVfYnJpZGdlKHBjaV9idXMsIGRldmZuLCBwX21lbV9ub2RlLCAmaG9sZF9wX21lbV9ub2RlLAotCQkJCVBDSV9QUkVGX01FTU9SWV9CQVNFLCBQQ0lfUFJFRl9NRU1PUllfTElNSVQpOwotCi0JLyogQWRqdXN0IHRoaXMgdG8gY29tcGVuc2F0ZSBmb3IgZXh0cmEgYWRqdXN0bWVudCBpbiBmaXJzdCBsb29wICovCi0JaXJxcy5iYXJiZXJfcG9sZS0tOwotCi0JcmMgPSAwOwotCi0JLyogSGVyZSB3ZSBhY3R1YWxseSBmaW5kIHRoZSBkZXZpY2VzIGFuZCBjb25maWd1cmUgdGhlbSAqLwotCWZvciAoZGV2aWNlID0gMDsgKGRldmljZSA8PSAweDFGKSAmJiAhcmM7IGRldmljZSsrKSB7Ci0JCWlycXMuYmFyYmVyX3BvbGUgPSAoaXJxcy5iYXJiZXJfcG9sZSArIDEpICYgMHgwMzsKLQotCQlJRCA9IDB4RkZGRkZGRkY7Ci0JCXBjaV9idXMtPm51bWJlciA9IGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQgKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLCBQQ0lfVkVORE9SX0lELCAmSUQpOwotCQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0KLQkJaWYgKElEICE9IDB4RkZGRkZGRkYpIHsJICAvKiAgZGV2aWNlIFByZXNlbnQgKi8KLQkJCS8qIFNldHVwIHNsb3Qgc3RydWN0dXJlLiAqLwotCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9jcmVhdGUoaG9sZF9idXNfbm9kZS0+YmFzZSk7Ci0KLQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKSB7Ci0JCQkJLyogT3V0IG9mIG1lbW9yeSAqLwotCQkJCXJjID0gLUVOT01FTTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJbmV3X3Nsb3QtPmJ1cyA9IGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0JCQluZXdfc2xvdC0+ZGV2aWNlID0gZGV2aWNlOwotCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gMDsKLQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMTsKLQkJCW5ld19zbG90LT5zdGF0dXMgPSAwOwotCi0JCQlyYyA9IGNvbmZpZ3VyZV9uZXdfZGV2aWNlKGN0cmwsIG5ld19zbG90LCAxLAotCQkJCQkmdGVtcF9yZXNvdXJjZXMsIGZ1bmMtPmJ1cywKLQkJCQkJZnVuYy0+ZGV2aWNlKTsKLQkJCWRiZygiY29uZmlndXJlX25ld19kZXZpY2UgcmM9MHgleFxuIixyYyk7Ci0JCX0JLyogRW5kIG9mIElGIChkZXZpY2UgaW4gc2xvdD8pICovCi0JfQkJLyogRW5kIG9mIEZPUiBsb29wICovCi0KLQlpZiAocmMpIHsKLQkJcGNpZWhwX2Rlc3Ryb3lfcmVzb3VyY2VfbGlzdCgmdGVtcF9yZXNvdXJjZXMpOwotCi0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+YnVzX2hlYWQpLCBob2xkX2J1c19ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaG9sZF9JT19ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIGhvbGRfbWVtX25vZGUpOwotCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBob2xkX3BfbWVtX25vZGUpOwotCQlyZXR1cm4ocmMpOwotCX0KLQotCS8qIHNhdmUgdGhlIGludGVycnVwdCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JaWYgKHJlc291cmNlcy0+aXJxcykgewotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFswXSA9IGlycXMuaW50ZXJydXB0WzBdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsxXSA9IGlycXMuaW50ZXJydXB0WzFdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFsyXSA9IGlycXMuaW50ZXJydXB0WzJdOwotCQlyZXNvdXJjZXMtPmlycXMtPmludGVycnVwdFszXSA9IGlycXMuaW50ZXJydXB0WzNdOwotCQlyZXNvdXJjZXMtPmlycXMtPnZhbGlkX0lOVCA9IGlycXMudmFsaWRfSU5UOwotCX0gZWxzZSBpZiAoIWJlaGluZF9icmlkZ2UpIHsKLQkJLyogV2UgbmVlZCB0byBob29rIHVwIHRoZSBpbnRlcnJ1cHRzIGhlcmUgKi8KLQkJZm9yIChjbG9vcCA9IDA7IGNsb29wIDwgNDsgY2xvb3ArKykgewotCQkJaWYgKGlycXMudmFsaWRfSU5UICYgKDB4MDEgPDwgY2xvb3ApKSB7Ci0JCQkJcmMgPSBwY2llaHBfc2V0X2lycShmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwKLQkJCQkJCQkweDBBICsgY2xvb3AsIGlycXMuaW50ZXJydXB0W2Nsb29wXSk7Ci0JCQkJaWYgKHJjKSB7Ci0JCQkJCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QgKCZ0ZW1wX3Jlc291cmNlcyk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+YnVzX2hlYWQpLCBob2xkX2J1c19ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaG9sZF9JT19ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIGhvbGRfbWVtX25vZGUpOwotCQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBob2xkX3BfbWVtX25vZGUpOwotCQkJCQlyZXR1cm4gcmM7Ci0JCQkJfQotCQkJfQotCQl9CS8qIGVuZCBvZiBmb3IgbG9vcCAqLwotCX0KLQotCS8qIFJldHVybiB1bnVzZWQgYnVzIHJlc291cmNlcwotCSAqIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZAotCSAqLwotCWlmIChob2xkX2J1c19ub2RlICYmIGJ1c19ub2RlICYmIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKSB7Ci0JCWhvbGRfYnVzX25vZGUtPmxlbmd0aCA9IGJ1c19ub2RlLT5iYXNlIC0gaG9sZF9idXNfbm9kZS0+YmFzZTsKLQotCQlob2xkX2J1c19ub2RlLT5uZXh0ID0gZnVuYy0+YnVzX2hlYWQ7Ci0JCWZ1bmMtPmJ1c19oZWFkID0gaG9sZF9idXNfbm9kZTsKLQotCQl0ZW1wX2J5dGUgPSAodTgpKHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkLT5iYXNlIC0gMSk7Ci0KLQkJLyogc2V0IHN1Ym9yZGluYXRlIGJ1cyAqLwotCQlkYmcoInJlLXNldCBzdWJvcmRpbmF0ZSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUgKHBjaV9idXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCB0ZW1wX2J5dGUpOwotCi0JCWlmICh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+bGVuZ3RoID09IDApIHsKLQkJCWtmcmVlKHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKTsKLQkJCXRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWRiZygicmV0dXJuIGJ1cyByZXMgb2YgYjpkKDB4JXg6JXgpIGJhc2U6bGVuKDB4JXg6JXgpXG4iLAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCB0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+YmFzZSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmxlbmd0aCk7Ci0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQpOwotCQl9Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBJTyBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgbGVmdCwKLQkgKiByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfSU9fbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5pb19oZWFkKSB7Ci0JCWlvX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMuaW9faGVhZCksCi0JCQkJCQkJJmhvbGRfSU9fbm9kZSwgMHgxMDAwKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAoaW9fbm9kZSkgewotCQkJaG9sZF9JT19ub2RlLT5iYXNlID0gaW9fbm9kZS0+YmFzZSArIGlvX25vZGUtPmxlbmd0aDsKLQotCQkJUkVTX0NIRUNLKGhvbGRfSU9fbm9kZS0+YmFzZSwgOCk7Ci0JCQl0ZW1wX2J5dGUgPSAodTgpKChob2xkX0lPX25vZGUtPmJhc2UpID4+IDgpOwotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0JBU0UsIHRlbXBfYnl0ZSk7Ci0KLQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQl9Ci0KLQkJaW9fbm9kZSA9IGRvX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLmlvX2hlYWQpLCAweDEwMDApOwotCi0JCS8qICBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAoaW9fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX0lPX25vZGUtPmxlbmd0aCA9IGlvX25vZGUtPmJhc2UgLSBob2xkX0lPX25vZGUtPmJhc2U7Ci0KLQkJCS8qIElmIHdlIHVzZWQgYW55LCBhZGQgaXQgdG8gdGhlIGJvYXJkJ3MgbGlzdCAqLwotCQkJaWYgKGhvbGRfSU9fbm9kZS0+bGVuZ3RoKSB7Ci0JCQkJaG9sZF9JT19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQlmdW5jLT5pb19oZWFkID0gaG9sZF9JT19ub2RlOwotCi0JCQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UgLSAxLCA4KTsKLQkJCQl0ZW1wX2J5dGUgPSAodTgpKChpb19ub2RlLT5iYXNlIC0gMSkgPj4gOCk7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaW9fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgSU8gKi8KLQkJCQl0ZW1wX2J5dGUgPSAweDAwOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgaW9fbm9kZSk7Ci0JCQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQlmdW5jLT5pb19oZWFkID0gaG9sZF9JT19ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX0lPX25vZGUpIHsKLQkJLyogaXQgdXNlZCB0aGUgd2hvbGUgcmFuZ2UgKi8KLQkJaG9sZF9JT19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgbGVmdCwKLQkgKiByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfbWVtX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpIHsKLQkJbWVtX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpLCAmaG9sZF9tZW1fbm9kZSwgMHgxMDAwMDBMKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAobWVtX25vZGUpIHsKLQkJCWhvbGRfbWVtX25vZGUtPmJhc2UgPSBtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX21lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCQl0ZW1wX3dvcmQgPSAodTE2KSgoaG9sZF9tZW1fbm9kZS0+YmFzZSkgPj4gMTYpOwotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX01FTU9SWV9CQVNFLCB0ZW1wX3dvcmQpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQl9Ci0KLQkJbWVtX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQkvKiBGaXJzdCB1c2UgdGhlIHRlbXBvcmFyeSBub2RlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9hcmQgKi8KLQkJCWhvbGRfbWVtX25vZGUtPmxlbmd0aCA9IG1lbV9ub2RlLT5iYXNlIC0gaG9sZF9tZW1fbm9kZS0+YmFzZTsKLQotCQkJaWYgKGhvbGRfbWVtX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQlmdW5jLT5tZW1faGVhZCA9IGhvbGRfbWVtX25vZGU7Ci0KLQkJCQkvKiBjb25maWd1cmUgZW5kIGFkZHJlc3MgKi8KLQkJCQlSRVNfQ0hFQ0sobWVtX25vZGUtPmJhc2UgLSAxLCAxNik7Ci0JCQkJdGVtcF93b3JkID0gKHUxNikoKG1lbV9ub2RlLT5iYXNlIC0gMSkgPj4gMTYpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQkvKiBSZXR1cm4gdW51c2VkIHJlc291cmNlcyB0byB0aGUgcG9vbCAqLwotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBtZW1fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgTWVtICovCi0JCQkJdGVtcF93b3JkID0gMHgwMDAwOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQkJCWtmcmVlKGhvbGRfbWVtX25vZGUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogaXQgdXNlZCBtb3N0IG9mIHRoZSByYW5nZSAqLwotCQkJaG9sZF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX21lbV9ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCX0KLQotCS8qIElmIHdlIGhhdmUgcHJlZmV0Y2hhYmxlIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgYW5kIHRoZXJlIGlzIHNvbWUgCi0JICogbGVmdCBhdCB0aGUgZW5kLCByZXR1cm4gdGhlIHVudXNlZCBwb3J0aW9uCi0JICovCi0JaWYgKGhvbGRfcF9tZW1fbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkKSB7Ci0JCXBfbWVtX25vZGUgPSBkb19wcmVfYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCksCi0JCQkJCQkJCSZob2xkX3BfbWVtX25vZGUsIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKHBfbWVtX25vZGUpIHsKLQkJCWhvbGRfcF9tZW1fbm9kZS0+YmFzZSA9IHBfbWVtX25vZGUtPmJhc2UgKyBwX21lbV9ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX3BfbWVtX25vZGUtPmJhc2UsIDE2KTsKLQkJCXRlbXBfd29yZCA9ICh1MTYpKChob2xkX3BfbWVtX25vZGUtPmJhc2UpID4+IDE2KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9CQVNFLCB0ZW1wX3dvcmQpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBwX21lbV9ub2RlKTsKLQkJfQotCi0JCXBfbWVtX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkKSwgMHgxMDAwMDBMKTsKLQotCQkvKiBDaGVjayBpZiB3ZSB3ZXJlIGFibGUgdG8gc3BsaXQgc29tZXRoaW5nIG9mZiAqLwotCQlpZiAocF9tZW1fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX3BfbWVtX25vZGUtPmxlbmd0aCA9IHBfbWVtX25vZGUtPmJhc2UgLSBob2xkX3BfbWVtX25vZGUtPmJhc2U7Ci0KLQkJCS8qIElmIHdlIHVzZWQgYW55LCBhZGQgaXQgdG8gdGhlIGJvYXJkJ3MgbGlzdCAqLwotCQkJaWYgKGhvbGRfcF9tZW1fbm9kZS0+bGVuZ3RoKSB7Ci0JCQkJaG9sZF9wX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQlmdW5jLT5wX21lbV9oZWFkID0gaG9sZF9wX21lbV9ub2RlOwotCi0JCQkJUkVTX0NIRUNLKHBfbWVtX25vZGUtPmJhc2UgLSAxLCAxNik7Ci0JCQkJdGVtcF93b3JkID0gKHUxNikoKHBfbWVtX25vZGUtPmJhc2UgLSAxKSA+PiAxNik7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGl0IGRvZXNuJ3QgbmVlZCBhbnkgUE1lbSAqLwotCQkJCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJFRl9NRU1PUllfTElNSVQsIHRlbXBfd29yZCk7Ci0KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCBwX21lbV9ub2RlKTsKLQkJCQlrZnJlZShob2xkX3BfbWVtX25vZGUpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogaXQgdXNlZCB0aGUgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQlmdW5jLT5wX21lbV9oZWFkID0gaG9sZF9wX21lbV9ub2RlOwotCQl9Ci0JfSBlbHNlIGlmIChob2xkX3BfbWVtX25vZGUpIHsKLQkJLyogaXQgdXNlZCB0aGUgd2hvbGUgcmFuZ2UgKi8KLQkJaG9sZF9wX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQl9Ci0KLQkvKiBXZSBzaG91bGQgYmUgY29uZmlndXJpbmcgYW4gSVJRIGFuZCB0aGUgYnJpZGdlJ3MgYmFzZSBhZGRyZXNzCi0JICogcmVnaXN0ZXJzIGlmIGl0IG5lZWRzIHRoZW0uICBBbHRob3VnaCB3ZSBoYXZlIG5ldmVyIHNlZW4gc3VjaAotCSAqIGEgZGV2aWNlCi0JICovCi0KLQlwY2llaHBybV9lbmFibGVfY2FyZChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKTsKLQotCWRiZygiUENJIEJyaWRnZSBIb3QtQWRkZWQgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgY3RybC0+c2VnLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24gLSBDb25maWd1cmVzIHRoZSBQQ0kgaGVhZGVyIGluZm9ybWF0aW9uIG9mIG9uZSBkZXZpY2UKLSAqCi0gKiBAY3RybDogcG9pbnRlciB0byBjb250cm9sbGVyIHN0cnVjdHVyZQotICogQGZ1bmM6IHBvaW50ZXIgdG8gZnVuY3Rpb24gc3RydWN0dXJlCi0gKiBAYmVoaW5kX2JyaWRnZTogMSBpZiB0aGlzIGlzIGEgcmVjdXJzaXZlIGNhbGwsIDAgaWYgbm90Ci0gKiBAcmVzb3VyY2VzOiBwb2ludGVyIHRvIHNldCBvZiByZXNvdXJjZSBsaXN0cwotICoKLSAqIENhbGxzIGl0c2VsZiByZWN1cnNpdmVseSBmb3IgYnJpZGdlZCBkZXZpY2VzLgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqCi0gKi8KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQkJdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsCi0JCXU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpCi17Ci0JaW50IGNsb29wOwotCXU4IHRlbXBfYnl0ZTsKLQl1OCBjbGFzc19jb2RlOwotCXUzMiByYzsKLQl1MzIgdGVtcF9yZWdpc3RlcjsKLQl1MzIgYmFzZTsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9fbm9kZTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkvKiBDaGVjayBmb3IgQnJpZGdlICovCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJnRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JZGJnKCIlczogYnVzICV4IGRldiAleCBmdW5jICV4IHRlbXBfYnl0ZSA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwgdGVtcF9ieXRlKTsKLQotCWlmICgodGVtcF9ieXRlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeyAvKiBQQ0ktUENJIEJyaWRnZSAqLwotCQlyYyA9IGNvbmZpZ3VyZV9uZXdfYnJpZGdlKGN0cmwsIGZ1bmMsIGJlaGluZF9icmlkZ2UsIHJlc291cmNlcywKLQkJCQkJCXBjaV9idXMpOwotCi0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQl9IGVsc2UgaWYgKCh0ZW1wX2J5dGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKSB7Ci0JCS8qIFN0YW5kYXJkIGRldmljZSAqLwotCQl1NjQJYmFzZTY0OwotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgMHgwQiwgJmNsYXNzX2NvZGUpOwotCi0JCWlmIChjbGFzc19jb2RlID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpCi0JCQlyZXR1cm4gREVWSUNFX1RZUEVfTk9UX1NVUFBPUlRFRDsKLQotCQkvKiBGaWd1cmUgb3V0IElPIGFuZCBtZW1vcnkgbmVlZHMgKi8KLQkJZm9yIChjbG9vcCA9IFBDSV9CQVNFX0FERFJFU1NfMDsgY2xvb3AgPD0gUENJX0JBU0VfQUREUkVTU181OyBjbG9vcCArPSA0KSB7Ci0JCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQotCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAocGNpX2J1cywgZGV2Zm4sIGNsb29wLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsICZ0ZW1wX3JlZ2lzdGVyKTsKLQkJCWRiZygiQmFyWyV4XT0weCV4IG9uIGJ1czpkZXY6ZnVuYygweCV4OiV4OiV4KVxuIiwgY2xvb3AsIHRlbXBfcmVnaXN0ZXIsIAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJCWlmICghdGVtcF9yZWdpc3RlcikKLQkJCQljb250aW51ZTsKLQotCQkJYmFzZTY0ID0gMEw7Ci0JCQlpZiAodGVtcF9yZWdpc3RlciAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pIHsKLQkJCQkvKiBNYXAgSU8gKi8KLQotCQkJCS8qIHNldCBiYXNlID0gYW1vdW50IG9mIElPIHNwYWNlICovCi0JCQkJYmFzZSA9IHRlbXBfcmVnaXN0ZXIgJiAweEZGRkZGRkZDOwotCQkJCWJhc2UgPSB+YmFzZSArIDE7Ci0KLQkJCQlkYmcoIk5FRUQgSU8gbGVuZ3RoKDB4JXgpXG4iLCBiYXNlKTsKLQkJCQlpb19ub2RlID0gZ2V0X2lvX3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwodWxvbmcpYmFzZSk7Ci0KLQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJaWYgKGlvX25vZGUpIHsKLQkJCQkJZGJnKCJHb3QgSU8gYmFzZT0weCV4KGxlbmd0aD0weCV4KVxuIiwgaW9fbm9kZS0+YmFzZSwgaW9fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJYmFzZSA9ICh1MzIpaW9fbm9kZS0+YmFzZTsKLQkJCQkJaW9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWVycigiR290IE5PIElPIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgYmFzZSk7Ci0JCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KLQkJCX0gZWxzZSB7CS8qIG1hcCBNRU0gKi8KLQkJCQlpbnQgcHJlZmV0Y2hhYmxlID0gMTsKLQkJCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcmVzX25vZGUgPSAmZnVuYy0+cF9tZW1faGVhZDsKLQkJCQljaGFyICpyZXNfdHlwZV9zdHIgPSAiUE1FTSI7Ci0JCQkJdTMyCXRlbXBfcmVnaXN0ZXIyOwotCi0JCQkJaWYgKCEodGVtcF9yZWdpc3RlciAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKSkgewotCQkJCQlwcmVmZXRjaGFibGUgPSAwOwotCQkJCQlyZXNfbm9kZSA9ICZmdW5jLT5tZW1faGVhZDsKLQkJCQkJcmVzX3R5cGVfc3RyKys7Ci0JCQkJfQotCi0JCQkJYmFzZSA9IHRlbXBfcmVnaXN0ZXIgJiAweEZGRkZGRkYwOwotCQkJCWJhc2UgPSB+YmFzZSArIDE7Ci0KLQkJCQlzd2l0Y2ggKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0spIHsKLQkJCQljYXNlIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzI6Ci0JCQkJCWRiZygiTkVFRCAzMiAlcyBiYXI9MHgleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlciwgYmFzZSk7Ci0KLQkJCQkJaWYgKHByZWZldGNoYWJsZSAmJiByZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCQkJCQltZW1fbm9kZT1nZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkKLQkJCQkJCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCX0KLQotCQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJCWlmIChtZW1fbm9kZSkgewotCQkJCQkJYmFzZSA9ICh1MzIpbWVtX25vZGUtPmJhc2U7IAotCQkJCQkJbWVtX25vZGUtPm5leHQgPSAqcmVzX25vZGU7Ci0JCQkJCQkqcmVzX25vZGUgPSBtZW1fbm9kZTsKLQkJCQkJCWRiZygiR290IDMyICVzIGJhc2U9MHgleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgbWVtX25vZGUtPmJhc2UsIAotCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZXJyKCJHb3QgTk8gMzIgJXMgcmVzb3VyY2UobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIGJhc2UpOwotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0OgotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wKzQsICZ0ZW1wX3JlZ2lzdGVyMik7Ci0JCQkJCWRiZygiTkVFRCA2NCAlcyBiYXI9MHgleDoleChsZW5ndGg9MHgleClcbiIsIHJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlcjIsIAotCQkJCQkJdGVtcF9yZWdpc3RlciwgYmFzZSk7Ci0KLQkJCQkJaWYgKHByZWZldGNoYWJsZSAmJiByZXNvdXJjZXMtPnBfbWVtX2hlYWQpCi0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksICh1bG9uZyliYXNlKTsKLQkJCQkJZWxzZSB7Ci0JCQkJCQlpZiAocHJlZmV0Y2hhYmxlKQotCQkJCQkJCWRiZygidXNpbmcgTUVNIGZvciBQTUVNXG4iKTsKLQkJCQkJCW1lbV9ub2RlID0gZ2V0X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksICh1bG9uZyliYXNlKTsKLQkJCQkJfQotCi0JCQkJCS8qIGFsbG9jYXRlIHRoZSByZXNvdXJjZSB0byB0aGUgYm9hcmQgKi8KLQkJCQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQkJCQliYXNlNjQgPSBtZW1fbm9kZS0+YmFzZTsgCi0JCQkJCQltZW1fbm9kZS0+bmV4dCA9ICpyZXNfbm9kZTsKLQkJCQkJCSpyZXNfbm9kZSA9IG1lbV9ub2RlOwotCQkJCQkJZGJnKCJHb3QgNjQgJXMgYmFzZT0weCV4OiV4KGxlbmd0aD0leClcbiIsIHJlc190eXBlX3N0ciwgKHUzMikoYmFzZTY0ID4+IDMyKSwgCi0JCQkJCQkJKHUzMiliYXNlNjQsIG1lbV9ub2RlLT5sZW5ndGgpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJZXJyKCJHb3QgTk8gNjQgJXMgcmVzb3VyY2UobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIGJhc2UpOwotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJZGJnKCJyZXNlcnZlZCBCQVIgdHlwZT0weCV4XG4iLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQl9Ci0KLQkJCWlmIChiYXNlNjQpIHsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgKHUzMiliYXNlNjQpOwotCQkJCWNsb29wICs9IDQ7Ci0JCQkJYmFzZTY0ID4+PSAzMjsKLQotCQkJCWlmIChiYXNlNjQpIHsKLQkJCQkJZGJnKCIlczogaGlnaCBkd29yZCBvZiBiYXNlNjQoMHgleCkgc2V0IHRvIDBcbiIsIF9fRlVOQ1RJT05fXywgKHUzMiliYXNlNjQpOwotCQkJCQliYXNlNjQgPSAweDBMOwotCQkJCX0KLQotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAodTMyKWJhc2U2NCk7Ci0JCQl9IGVsc2UgewotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCBiYXNlKTsKLQkJCX0KLQkJfQkJLyogRW5kIG9mIGJhc2UgcmVnaXN0ZXIgbG9vcCAqLwotCi0JCS8qIGRpc2FibGUgUk9NIGJhc2UgQWRkcmVzcyAqLwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1JPTV9BRERSRVNTLCAweDAwKTsKLQotCQkvKiBTZXQgSFAgcGFyYW1ldGVycyAoQ2FjaGUgTGluZSBTaXplLCBMYXRlbmN5IFRpbWVyKSAqLwotCQlyYyA9IHBjaWVocHJtX3NldF9ocHAoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX05PUk1BTCk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQotCQlwY2llaHBybV9lbmFibGVfY2FyZChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKTsKLQotCQlkYmcoIlBDSSBmdW5jdGlvbiBIb3QtQWRkZWQgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgY3RybC0+c2VnLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgCi0JCQlmdW5jLT5mdW5jdGlvbik7Ci0JfSAgLyogRW5kIG9mIE5vdC1BLUJyaWRnZSBlbHNlICovCi0JZWxzZSB7Ci0JCS8qIEl0J3Mgc29tZSBzdHJhbmdlIHR5cGUgb2YgUENJIGFkYXB0ZXIgKENhcmRidXM/KSAqLwotCQlyZXR1cm4gREVWSUNFX1RZUEVfTk9UX1NVUFBPUlRFRDsKLQl9Ci0KLQlmdW5jLT5jb25maWd1cmVkID0gMTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwppbmRleCA3YTBlMjdmLi40YTNjZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtMjcsMTYgKzI3LDEwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSAiLi4vcGNpLmgiCiAjaW5jbHVkZSAicGNpZWhwLmgiCiAKQEAgLTIxNywyMyArMjExLDYgQEAKICNkZWZpbmUgTVJMX1NUQVRFCQkweDAwMjAKICNkZWZpbmUgUFJTTl9TVEFURQkJMHgwMDQwCiAKLXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zIHsKLQlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqcG5leHQ7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJCQkvKiBzcGlubG9jaydzICovCi0JdTMyIHNsb3RfZGV2aWNlX29mZnNldDsKLQl1MzIgbnVtX3Nsb3RzOwotICAgIAlzdHJ1Y3QgdGltZXJfbGlzdAlpbnRfcG9sbF90aW1lcjsJCS8qIEFkZGVkIGZvciBwb2xsIGV2ZW50ICovCi0JcGhwX2ludHJfY2FsbGJhY2tfdCAJYXR0ZW50aW9uX2J1dHRvbl9jYWxsYmFjazsKLQlwaHBfaW50cl9jYWxsYmFja190IAlzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9pbnRyX2NhbGxiYWNrX3QgCXByZXNlbmNlX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfaW50cl9jYWxsYmFja190IAlwb3dlcl9mYXVsdF9jYWxsYmFjazsKLQl2b2lkIAkJCSpjYWxsYmFja19pbnN0YW5jZV9pZDsKLQlzdHJ1Y3QgY3RybF9yZWcgCSpjcmVnOwkJCQkvKiBQdHIgdG8gY29udHJvbGxlciByZWdpc3RlciBzcGFjZSAqLwotfTsKLQotCiBzdGF0aWMgc3BpbmxvY2tfdCBocGNfZXZlbnRfbG9jazsKIAogREVGSU5FX0RCR19CVUZGRVIJCS8qIERlYnVnIHN0cmluZyBidWZmZXIgZm9yIGVudGlyZSBIUEMgZGVmaW5lZCBoZXJlICovCkBAIC0yOTcsNyArMjc0LDYgQEAKIAogCURCR19FTlRFUl9ST1VUSU5FIAogCQotCWRiZygiJXMgOiBFbnRlclxuIiwgX19GVU5DVElPTl9fKTsKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC0xOwpAQCAtMzA4LDcgKzI4NCw2IEBACiAJCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiByZXR2YWw7CiAJCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3Rfc3RhdHVzKTsKIAkKIAlpZiAoKHNsb3Rfc3RhdHVzICYgQ01EX0NPTVBMRVRFRCkgPT0gQ01EX0NPTVBMRVRFRCApIHsgCiAJCS8qIEFmdGVyIDEgc2VjIGFuZCBDTURfQ09NUExFVEVEIHN0aWxsIG5vdCBzZXQsIGp1c3QgcHJvY2VlZCBmb3J3YXJkIHRvIGlzc3VlIApAQCAtMzE2LDE0ICsyOTEsMTEgQEAKIAkJZGJnKCIlcyA6IENNRF9DT01QTEVURUQgbm90IGNsZWFyIGFmdGVyIDEgc2VjLlxuIiwgX19GVU5DVElPTl9fKTsKIAl9CiAKLQlkYmcoIiVzOiBCZWZvcmUgaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgY21kKTsKIAlyZXR2YWwgPSBocF9yZWdpc3Rlcl93cml0ZV93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBjbWQgfCBDTURfQ01QTF9JTlRSX0VOQUJMRSk7CiAJaWYgKHJldHZhbCkgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgY21kIHwgQ01EX0NNUExfSU5UUl9FTkFCTEUpOwotCWRiZygiJXMgOiBFeGl0XG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJREJHX0xFQVZFX1JPVVRJTkUgCiAJcmV0dXJuIHJldHZhbDsKQEAgLTUwOSw3ICs0ODEsNiBAQAogCXUxNiBzbG90X3N0YXR1czsKIAl1OCBwd3JfZmF1bHQ7CiAJaW50IHJldHZhbCA9IDA7Ci0JdTggc3RhdHVzOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCiAKQEAgLTUyMSwxNSArNDkyLDEzIEBACiAJcmV0dmFsID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhzbG90LT5jdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAogCWlmIChyZXR2YWwpIHsKLQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWVycigiJXMgOiBDYW5ub3QgY2hlY2sgZm9yIHBvd2VyIGZhdWx0XG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlwd3JfZmF1bHQgPSAodTgpKChzbG90X3N0YXR1cyAmIFBXUl9GQVVMVF9ERVRFQ1RFRCkgPj4gMSk7Ci0Jc3RhdHVzID0gKHB3cl9mYXVsdCAhPSAxKSA/IDEgOiAwOwogCQogCURCR19MRUFWRV9ST1VUSU5FCi0JLyogTm90ZTogTG9naWMgMCA9PiBmYXVsdCAqLwotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIHB3cl9mYXVsdDsKIH0KIAogc3RhdGljIGludCBocGNfc2V0X2F0dGVudGlvbl9zdGF0dXMoc3RydWN0IHNsb3QgKnNsb3QsIHU4IHZhbHVlKQpAQCAtNTM5LDcgKzUwOCw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOwogCi0JZGJnKCIlczogXG4iLCBfX0ZVTkNUSU9OX18pOworCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC0xOwpAQCAtNTU1LDcgKzUyNSw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJjOwogCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X2N0cmwpOwogCiAJc3dpdGNoICh2YWx1ZSkgewogCQljYXNlIDAgOgkvKiB0dXJuIG9mZiAqLwpAQCAtNTc2LDYgKzU0NSw3IEBACiAJcGNpZV93cml0ZV9jbWQoc2xvdCwgc2xvdF9jbWQpOwogCWRiZygiJXM6IFNMT1RfQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOwogCQorCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuIHJjOwogfQogCkBAIC01ODcsNyArNTU3LDggQEAKIAl1MTYgc2xvdF9jdHJsOwogCWludCByYyA9IDA7CiAgICAgICAgCQotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCisJREJHX0VOVEVSX1JPVVRJTkUKKwogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gOwpAQCAtNjA0LDcgKzU3NSw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X2N0cmwpOwogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMTAwOwogCWlmICghcGNpZWhwX3BvbGxfbW9kZSkKIAkJc2xvdF9jbWQgPSBzbG90X2NtZCB8IEhQX0lOVFJfRU5BQkxFOyAKQEAgLTYxMiw2ICs1ODIsNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAogCWRiZygiJXM6IFNMT1RfQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X2NtZCk7CisJREJHX0xFQVZFX1JPVVRJTkUKIAlyZXR1cm47CiB9CiAKQEAgLTYyMiw3ICs1OTMsOCBAQAogCXUxNiBzbG90X2N0cmw7CiAJaW50IHJjID0gMDsKIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCisJREJHX0VOVEVSX1JPVVRJTkUKKwogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gOwpAQCAtNjM5LDcgKzYxMSw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X2N0cmwpOwogCiAJc2xvdF9jbWQgPSAoc2xvdF9jdHJsICYgflBXUl9MRURfQ1RSTCkgfCAweDAzMDA7CiAKQEAgLTY0OCw2ICs2MTksNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksIHNsb3RfY21kKTsKIAorCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC02NTgsNyArNjMwLDggQEAKIAl1MTYgc2xvdF9jdHJsOwogCWludCByYyA9IDA7IAogCQotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCisJREJHX0VOVEVSX1JPVVRJTkUKKwogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gOwpAQCAtNjc1LDcgKzY0OCw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQlkYmcoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X2N0cmwpOwogCiAJc2xvdF9jbWQgPSAoc2xvdF9jdHJsICYgflBXUl9MRURfQ1RSTCkgfCAweDAyMDA7CiAKQEAgLTY4NCw2ICs2NTYsNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAogCWRiZygiJXM6IFNMT1RfQ1RSTCAleCB3cml0ZSBjbWQgJXhcbiIsX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X2NtZCk7CisJREJHX0xFQVZFX1JPVVRJTkUKIAlyZXR1cm47CiB9CiAKQEAgLTc4MCw3ICs3NTMsNiBAQAogCWludCByZXR2YWwgPSAwOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCi0JZGJnKCIlczogXG4iLCBfX0ZVTkNUSU9OX18pOwkKIAogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNzk5LDggKzc3MSw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlczogU0xPVF9DVFJMICV4LCB2YWx1ZSByZWFkICV4biIsIF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwKLQkJc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfQ1RSTCkgfCBQT1dFUl9PTjsKIApAQCAtODI5LDcgKzc5OSw2IEBACiAJaW50IHJldHZhbCA9IDA7CiAKIAlEQkdfRU5URVJfUk9VVElORSAKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQogCiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC04NDgsOCArODE3LDYgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KLQlkYmcoIiVzOiBTTE9UX0NUUkwgJXgsIHZhbHVlIHJlYWQgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwKLQkJc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfQ1RSTCkgfCBQT1dFUl9PRkY7CiAKQEAgLTkyNCw3ICs4OTEsNiBAQAogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9CiAKLQkJZGJnKCIlczogU2V0IE1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZVxuIiwgX19GVU5DVElPTl9fKTsKIAkJZGJnKCIlczogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCXRlbXBfd29yZCA9ICh0ZW1wX3dvcmQgJiB+SFBfSU5UUl9FTkFCTEUgJiB+Q01EX0NNUExfSU5UUl9FTkFCTEUpIHwgMHgwMDsKIApAQCAtOTMzLDcgKzg5OSw2IEBACiAJCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9Ci0JCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIHdpdGggdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAkJCiAJCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CkBAIC05NDksMTQgKzkxNCwxMiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9Ci0JCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9TVEFUVVMgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOwogCX0KIAkKIAlpZiAoaW50cl9sb2MgJiBDTURfQ09NUExFVEVEKSB7CiAJCS8qIAogCQkgKiBDb21tYW5kIENvbXBsZXRlIEludGVycnVwdCBQZW5kaW5nIAogCQkgKi8KLQkJZGJnKCIlczogSW4gQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQgUGVuZGluZ1xuIiwgX19GVU5DVElPTl9fKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjdHJsLT5xdWV1ZSk7CiAJfQogCkBAIC05ODksNyArOTUyLDYgQEAKIAkJfQogCiAJCWRiZygiJXM6IFVubWFzayBIb3QtcGx1ZyBJbnRlcnJ1cHQgRW5hYmxlXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIHdpdGggdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAkJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSkgfCBIUF9JTlRSX0VOQUJMRTsKIAogCQlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfQ1RSTChjdHJsLT5jYXBfYmFzZSksIHRlbXBfd29yZCk7CkBAIC05OTcsMTQgKzk1OSwxMiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7IAkKIAkKIAkJcmMgPSBocF9yZWdpc3Rlcl9yZWFkX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgc2xvdF9zdGF0dXMpOwogCQlpZiAocmMpIHsKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJcmV0dXJuIElSUV9OT05FOwogCQl9Ci0JCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3Rfc3RhdHVzKTsgCiAJCQogCQkvKiBDbGVhciBjb21tYW5kIGNvbXBsZXRlIGludGVycnVwdCBjYXVzZWQgYnkgdGhpcyB3cml0ZSAqLwogCQl0ZW1wX3dvcmQgPSAweDFGOwpAQCAtMTI0OCwxMiArMTIwOCw3IEBACiAJLmNoZWNrX2xua19zdGF0dXMJCT0gaHBjX2NoZWNrX2xua19zdGF0dXMsCiB9OwogCi1pbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICogY3RybCwKLQlzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwKLQlwaHBfaW50cl9jYWxsYmFja190IGF0dGVudGlvbl9idXR0b25fY2FsbGJhY2ssCi0JcGhwX2ludHJfY2FsbGJhY2tfdCBzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrLAotCXBocF9pbnRyX2NhbGxiYWNrX3QgcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrLAotCXBocF9pbnRyX2NhbGxiYWNrX3QgcG93ZXJfZmF1bHRfY2FsbGJhY2spCitpbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICogY3RybCwgc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBocF9jdGxyLCAqcDsKIAl2b2lkICppbnN0YW5jZV9pZCA9IGN0cmw7CkBAIC0xMjgyLDggKzEyMzcsOCBAQAogCXBkZXYgPSBkZXYtPnBvcnQ7CiAJcGhwX2N0bHItPnBjaV9kZXYgPSBwZGV2OwkvKiBzYXZlIHBjaV9kZXYgaW4gY29udGV4dCAqLwogCi0JZGJnKCIlczogcGRldi0+dmVuZG9yICV4IHBkZXYtPmRldmljZSAleFxuIiwgX19GVU5DVElPTl9fLAotCQlwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CisJZGJnKCIlczogaG90cGx1ZyBjb250cm9sbGVyIHZlbmRvciBpZCAweCV4IGRldmljZSBpZCAweCV4XG4iLAorCQkJX19GVU5DVElPTl9fLCBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSk7CiAKIAlzYXZlZF9jYXBfYmFzZSA9IHBjaWVfY2FwX2Jhc2U7CiAKQEAgLTEzNDAsOCArMTI5NSw2IEBACiAJCWZpcnN0ID0gMDsKIAl9CiAKLQlkYmcoInBkZXYgPSAlcDogYjpkOmY6aXJxPTB4JXg6JXg6JXg6JXhcbiIsIHBkZXYsIHBkZXYtPmJ1cy0+bnVtYmVyLCAKLQkJUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIGRldi0+aXJxKTsKIAlmb3IgKCByYyA9IDA7IHJjIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyByYysrKQogCQlpZiAocGNpX3Jlc291cmNlX2xlbihwZGV2LCByYykgPiAwKQogCQkJZGJnKCJwY2kgcmVzb3VyY2VbJWRdIHN0YXJ0PTB4JWx4KGxlbj0weCVseClcbiIsIHJjLApAQCAtMTM1OSwxMyArMTMxMiwxMiBAQAogCiAJLyogZmluZCB0aGUgSVJRICovCiAJcGhwX2N0bHItPmlycSA9IGRldi0+aXJxOwotCWRiZygiSFBDIGludGVycnVwdCA9ICVkXG4iLCBwaHBfY3Rsci0+aXJxKTsKIAogCS8qIFNhdmUgaW50ZXJydXB0IGNhbGxiYWNrIGluZm8gKi8KLQlwaHBfY3Rsci0+YXR0ZW50aW9uX2J1dHRvbl9jYWxsYmFjayA9IGF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7Ci0JcGhwX2N0bHItPnN3aXRjaF9jaGFuZ2VfY2FsbGJhY2sgPSBzd2l0Y2hfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9jdGxyLT5wcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2sgPSBwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7Ci0JcGhwX2N0bHItPnBvd2VyX2ZhdWx0X2NhbGxiYWNrID0gcG93ZXJfZmF1bHRfY2FsbGJhY2s7CisJcGhwX2N0bHItPmF0dGVudGlvbl9idXR0b25fY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX2F0dGVudGlvbl9idXR0b247CisJcGhwX2N0bHItPnN3aXRjaF9jaGFuZ2VfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3N3aXRjaF9jaGFuZ2U7CisJcGhwX2N0bHItPnByZXNlbmNlX2NoYW5nZV9jYWxsYmFjayA9IHBjaWVocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlOworCXBocF9jdGxyLT5wb3dlcl9mYXVsdF9jYWxsYmFjayA9IHBjaWVocF9oYW5kbGVfcG93ZXJfZmF1bHQ7CiAJcGhwX2N0bHItPmNhbGxiYWNrX2luc3RhbmNlX2lkID0gaW5zdGFuY2VfaWQ7CiAKIAkvKiByZXR1cm4gUENJIENvbnRyb2xsZXIgSW5mbyAqLwpAQCAtMTM4NywxNSArMTMzOSwxMiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKIAl9Ci0JZGJnKCIlcyA6IE1hc2sgSFBJRSBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOwogCiAJcmMgPSBocF9yZWdpc3Rlcl9yZWFkX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgc2xvdF9zdGF0dXMpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IE1hc2sgSFBJRSBTTE9UX1NUQVRVUyBvZmZzZXQgJXggcmVhZHMgc2xvdF9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpCi0JCSwgc2xvdF9zdGF0dXMpOwogCiAJdGVtcF93b3JkID0gMHgxRjsgLyogQ2xlYXIgYWxsIGV2ZW50cyAqLwogCXJjID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtMTQwMyw3ICsxMzUyLDYgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKIAl9Ci0JZGJnKCIlczogU0xPVF9TVEFUVVMgb2Zmc2V0ICV4IHdyaXRlcyBzbG90X3N0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHRlbXBfd29yZCk7CiAKIAlpZiAocGNpZWhwX3BvbGxfbW9kZSkgIHsvKiBJbnN0YWxsIGludGVycnVwdCBwb2xsaW5nIGNvZGUgKi8KIAkJLyogSW5zdGFsbCBhbmQgc3RhcnQgdGhlIGludGVycnVwdCBwb2xsaW5nIHRpbWVyICovCkBAIC0xNDE5LDEzICsxMzY3LDE0IEBACiAJCX0KIAl9CiAKKwlkYmcoInBjaWVocCBjdHJsIGI6ZDpmOmlycT0weCV4OiV4OiV4OiV4XG4iLCBwZGV2LT5idXMtPm51bWJlciwKKwkJUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksIGRldi0+aXJxKTsKKwogCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBkZXYsIFNMT1RfQ1RSTChjdHJsLT5jYXBfYmFzZSksIHRlbXBfd29yZCk7CiAJaWYgKHJjKSB7CiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFNMT1RfQ1RSTCAleCB2YWx1ZSByZWFkICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChjdHJsLT5jYXBfYmFzZSksIHRlbXBfd29yZCk7Ci0JZGJnKCIlczogc2xvdF9jYXAgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jYXApOwogCiAJaW50cl9lbmFibGUgPSBpbnRyX2VuYWJsZSB8IFBSU05fREVURUNUX0VOQUJMRTsKIApAQCAtMTQ0NSw3ICsxMzk0LDYgQEAKIAl9IGVsc2UgewogCQl0ZW1wX3dvcmQgPSAodGVtcF93b3JkICYgfkhQX0lOVFJfRU5BQkxFKSB8IEhQX0lOVFJfRU5BQkxFOwogCX0KLQlkYmcoIiVzOiB0ZW1wX3dvcmQgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAogCS8qIFVubWFzayBIb3QtcGx1ZyBJbnRlcnJ1cHQgRW5hYmxlIGZvciB0aGUgaW50ZXJydXB0IG5vdGlmaWNhdGlvbiBtZWNoYW5pc20gY2FzZSAqLwogCXJjID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtMTQ1MywxNCArMTQwMSwxMSBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKIAl9Ci0JZGJnKCIlcyA6IFVubWFzayBIUElFIGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIHdpdGggJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJaWYgKHJjKSB7CiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlnb3RvIGFib3J0X2ZyZWVfY3RscjsKIAl9Ci0JZGJnKCIlczogVW5tYXNrIEhQSUUgU0xPVF9TVEFUVVMgb2Zmc2V0ICV4IHJlYWRzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIAotCQlTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAkKIAl0ZW1wX3dvcmQgPSAgMHgxRjsgLyogQ2xlYXIgYWxsIGV2ZW50cyAqLwogCXJjID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtMTQ2OCw4ICsxNDEzLDE2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFNMT1RfU1RBVFVTIG9mZnNldCAleCB3cml0ZXMgc2xvdF9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCQorCWlmIChwY2llaHBfZm9yY2UpIHsKKwkJZGJnKCJCeXBhc3NpbmcgQklPUyBjaGVjayBmb3IgcGNpZWhwIHVzZSBvbiAlc1xuIiwKKwkJCQlwY2lfbmFtZShjdHJsLT5wY2lfZGV2KSk7CisJfSBlbHNlIHsKKwkJcmMgPSBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShjdHJsLT5wY2lfZGV2KTsKKwkJaWYgKHJjKQorCQkJZ290byBhYm9ydF9mcmVlX2N0bHI7CisJfQorCiAJLyogIEFkZCB0aGlzIEhQQyBpbnN0YW5jZSBpbnRvIHRoZSBIUEMgbGlzdCAqLwogCXNwaW5fbG9jaygmbGlzdF9sb2NrKTsKIAlpZiAocGhwX2N0bHJfbGlzdF9oZWFkID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKaW5kZXggZmYxN2Q4ZS4uNjQ3NjczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfcGNpLmMKQEAgLTI3LDgwMSArMjcsMTExIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiLi4vcGNpLmgiCiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaWZuZGVmIENPTkZJR19JQTY0Ci0jaW5jbHVkZSAiLi4vLi4vLi4vYXJjaC9pMzg2L3BjaS9wY2kuaCIgICAgLyogaG9ycmlibGUgaGFjayBzaG93aW5nIGhvdyBwcm9jZXNzb3IgZGVwZW5kYW50IHdlIGFyZS4uLiAqLwotI2VuZGlmCiAKIAotaW50IHBjaWVocF9jb25maWd1cmVfZGV2aWNlIChzdHJ1Y3QgY29udHJvbGxlciogY3RybCwgc3RydWN0IHBjaV9mdW5jKiBmdW5jKSAgCitpbnQgcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKLQl1bnNpZ25lZCBjaGFyIGJ1czsKLQlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7Ci0JaW50IG51bTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQgPSBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlOworCWludCBudW0sIGZuOwogCi0JaWYgKGZ1bmMtPnBjaV9kZXYgPT0gTlVMTCkKLQkJZnVuYy0+cGNpX2RldiA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbikpOworCWRldiA9IHBjaV9maW5kX3Nsb3QocF9zbG90LT5idXMsIFBDSV9ERVZGTihwX3Nsb3QtPmRldmljZSwgMCkpOworCWlmIChkZXYpIHsKKwkJZXJyKCJEZXZpY2UgJXMgYWxyZWFkeSBleGlzdHMgYXQgJXg6JXgsIGNhbm5vdCBob3QtYWRkXG4iLAorCQkJCXBjaV9uYW1lKGRldiksIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotCS8qIFN0aWxsIE5VTEwgPyBXZWxsIHRoZW4gc2NhbiBmb3IgaXQgISAqLwotCWlmIChmdW5jLT5wY2lfZGV2ID09IE5VTEwpIHsKLQkJZGJnKCIlczogcGNpX2RldiBzdGlsbCBudWxsLiBkbyBwY2lfc2Nhbl9zbG90XG4iLCBfX0ZVTkNUSU9OX18pOworCW51bSA9IHBjaV9zY2FuX3Nsb3QocGFyZW50LCBQQ0lfREVWRk4ocF9zbG90LT5kZXZpY2UsIDApKTsKKwlpZiAobnVtID09IDApIHsKKwkJZXJyKCJObyBuZXcgZGV2aWNlIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0JCW51bSA9IHBjaV9zY2FuX3Nsb3QoY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKSk7Ci0KLQkJaWYgKG51bSkKLQkJCXBjaV9idXNfYWRkX2RldmljZXMoY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUpOwotCQkKLQkJZnVuYy0+cGNpX2RldiA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbikpOwotCQlpZiAoZnVuYy0+cGNpX2RldiA9PSBOVUxMKSB7Ci0JCQlkYmcoIkVSUk9SOiBwY2lfZGV2IHN0aWxsIG51bGxcbiIpOwotCQkJcmV0dXJuIDA7CisJZm9yIChmbiA9IDA7IGZuIDwgODsgZm4rKykgeworCQlpZiAoIShkZXYgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLAorCQkJCQlQQ0lfREVWRk4ocF9zbG90LT5kZXZpY2UsIGZuKSkpKQorCQkJY29udGludWU7CisJCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJZXJyKCJDYW5ub3QgaG90LWFkZCBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkJcGNpX25hbWUoZGV2KSk7CisJCQljb250aW51ZTsKIAkJfQorCQlpZiAoKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgfHwKKwkJCQkoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykpIHsKKwkJCS8qIEZpbmQgYW4gdW51c2VkIGJ1cyBudW1iZXIgZm9yIHRoZSBuZXcgYnJpZGdlICovCisJCQlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CisJCQl1bnNpZ25lZCBjaGFyIGJ1c25yLCBzdGFydCA9IHBhcmVudC0+c2Vjb25kYXJ5OworCQkJdW5zaWduZWQgY2hhciBlbmQgPSBwYXJlbnQtPnN1Ym9yZGluYXRlOworCQkJZm9yIChidXNuciA9IHN0YXJ0OyBidXNuciA8PSBlbmQ7IGJ1c25yKyspIHsKKwkJCQlpZiAoIXBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKHBhcmVudCksCisJCQkJCQkJYnVzbnIpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChidXNuciA+PSBlbmQpIHsKKwkJCQllcnIoIk5vIGZyZWUgYnVzIGZvciBob3QtYWRkZWQgYnJpZGdlXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKHBhcmVudCwgZGV2LCBidXNucik7CisJCQlpZiAoIWNoaWxkKSB7CisJCQkJZXJyKCJDYW5ub3QgYWRkIG5ldyBidXMgZm9yICVzXG4iLAorCQkJCQkJcGNpX25hbWUoZGV2KSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljaGlsZC0+c3Vib3JkaW5hdGUgPSBwY2lfZG9fc2Nhbl9idXMoY2hpbGQpOworCQkJcGNpX2J1c19zaXplX2JyaWRnZXMoY2hpbGQpOworCQl9CisJCS8qIFRCRDogcHJvZ3JhbSBmaXJtd2FyZSBwcm92aWRlZCBfSFBQIHZhbHVlcyAqLworCQkvKiBwcm9ncmFtX2Z3X3Byb3ZpZGVkX3ZhbHVlcyhkZXYpOyAqLwogCX0KIAotCWlmIChmdW5jLT5wY2lfZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ1bmMtPnBjaV9kZXYsIFBDSV9TRUNPTkRBUllfQlVTLCAmYnVzKTsKLQkJY2hpbGQgPSBwY2lfYWRkX25ld19idXMoZnVuYy0+cGNpX2Rldi0+YnVzLCAoZnVuYy0+cGNpX2RldiksIGJ1cyk7Ci0JCXBjaV9kb19zY2FuX2J1cyhjaGlsZCk7Ci0KLQl9Ci0KKwlwY2lfYnVzX2Fzc2lnbl9yZXNvdXJjZXMocGFyZW50KTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKHBhcmVudCk7CisJcGNpX2VuYWJsZV9icmlkZ2VzKHBhcmVudCk7CiAJcmV0dXJuIDA7CiB9CiAKLQotaW50IHBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2Uoc3RydWN0IHBjaV9mdW5jKiBmdW5jKSAKK2ludCBwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7CiAJaW50IHJjID0gMDsKIAlpbnQgajsKLQlzdHJ1Y3QgcGNpX2J1cyAqcGJ1czsKKwl1OCBiY3RsID0gMDsKIAotCWRiZygiJXM6IGJ1cy9kZXYvZnVuYyA9ICV4LyV4LyV4XG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywKLQkJCQlmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQlwYnVzID0gZnVuYy0+cGNpX2Rldi0+YnVzOworCWRiZygiJXM6IGJ1cy9kZXYgPSAleC8leFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPmJ1cywKKwkJCQlwX3Nsb3QtPmRldmljZSk7CiAKIAlmb3IgKGo9MDsgajw4IDsgaisrKSB7Ci0JCXN0cnVjdCBwY2lfZGV2KiB0ZW1wID0gcGNpX2ZpbmRfc2xvdChmdW5jLT5idXMsCi0JCQkJKGZ1bmMtPmRldmljZSA8PCAzKSB8IGopOwotCQlpZiAodGVtcCkgewotCQkJcGNpX3JlbW92ZV9idXNfZGV2aWNlKHRlbXApOworCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9maW5kX3Nsb3QocF9zbG90LT5idXMsCisJCQkJKHBfc2xvdC0+ZGV2aWNlIDw8IDMpIHwgaik7CisJCWlmICghdGVtcCkKKwkJCWNvbnRpbnVlOworCQlpZiAoKHRlbXAtPmNsYXNzID4+IDE2KSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKSB7CisJCQllcnIoIkNhbm5vdCByZW1vdmUgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJCXBjaV9uYW1lKHRlbXApKTsKKwkJCWNvbnRpbnVlOwogCQl9CisJCWlmICh0ZW1wLT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisJCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh0ZW1wLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY3RsKTsKKwkJCWlmIChiY3RsICYgUENJX0JSSURHRV9DVExfVkdBKSB7CisJCQkJZXJyKCJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQkJcGNpX25hbWUodGVtcCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCXBjaV9yZW1vdmVfYnVzX2RldmljZSh0ZW1wKTsKIAl9CiAJLyogCiAJICogU29tZSBQQ0kgRXhwcmVzcyByb290IHBvcnRzIHJlcXVpcmUgZml4dXAgYWZ0ZXIgaG90LXBsdWcgb3BlcmF0aW9uLgogCSAqLwogCWlmIChwY2llX21jaF9xdWlyaykgCi0JCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBwYnVzLT5zZWxmKTsKKwkJcGNpX2ZpeHVwX2RldmljZShwY2lfZml4dXBfZmluYWwsIHBfc2xvdC0+Y3RybC0+cGNpX2Rldik7CiAJCiAJcmV0dXJuIHJjOwogfQogCi0vKgotICogcGNpZWhwX3NldF9pcnEKLSAqCi0gKiBAYnVzX251bTogYnVzIG51bWJlciBvZiBQQ0kgZGV2aWNlCi0gKiBAZGV2X251bTogZGV2aWNlIG51bWJlciBvZiBQQ0kgZGV2aWNlCi0gKiBAc2xvdDogcG9pbnRlciB0byB1OCB3aGVyZSBzbG90IG51bWJlciB3aWxsIGJlIHJldHVybmVkCi0gKi8KLWludCBwY2llaHBfc2V0X2lycSAodTggYnVzX251bSwgdTggZGV2X251bSwgdTggaW50X3BpbiwgdTggaXJxX251bSkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmICFkZWZpbmVkKENPTkZJR19YODZfSU9fQVBJQykKLQlpbnQgcmM7Ci0JdTE2IHRlbXBfd29yZDsKLQlzdHJ1Y3QgcGNpX2RldiBmYWtlZGV2OwotCXN0cnVjdCBwY2lfYnVzIGZha2VidXM7Ci0KLQlmYWtlZGV2LmRldmZuID0gZGV2X251bSA8PCAzOwotCWZha2VkZXYuYnVzID0gJmZha2VidXM7Ci0JZmFrZWJ1cy5udW1iZXIgPSBidXNfbnVtOwotCWRiZygiJXM6IGRldiAlZCwgYnVzICVkLCBwaW4gJWQsIG51bSAlZFxuIiwKLQkgICAgX19GVU5DVElPTl9fLCBkZXZfbnVtLCBidXNfbnVtLCBpbnRfcGluLCBpcnFfbnVtKTsKLQlyYyA9IHBjaWJpb3Nfc2V0X2lycV9yb3V0aW5nKCZmYWtlZGV2LCBpbnRfcGluIC0gMHgwYSwgaXJxX251bSk7Ci0JZGJnKCIlczogcmMgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCWlmICghcmMpCi0JCXJldHVybiAhcmM7Ci0KLQkvKiBzZXQgdGhlIEVkZ2UgTGV2ZWwgQ29udHJvbCBSZWdpc3RlciAoRUxDUikgKi8KLQl0ZW1wX3dvcmQgPSBpbmIoMHg0ZDApOwotCXRlbXBfd29yZCB8PSBpbmIoMHg0ZDEpIDw8IDg7Ci0KLQl0ZW1wX3dvcmQgfD0gMHgwMSA8PCBpcnFfbnVtOwotCi0JLyogVGhpcyBzaG91bGQgb25seSBiZSBmb3IgeDg2IGFzIGl0IHNldHMgdGhlIEVkZ2UgTGV2ZWwgQ29udHJvbCBSZWdpc3RlciAqLwotCW91dGIoKHU4KSAodGVtcF93b3JkICYgMHhGRiksIDB4NGQwKTsKLQlvdXRiKCh1OCkgKCh0ZW1wX3dvcmQgJiAweEZGMDApID4+IDgpLCAweDRkMSk7Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLX0KLQotLyogTW9yZSBQQ0kgY29uZmlndXJhdGlvbiByb3V0aW5lczsgdGhpcyB0aW1lIGNlbnRlcmVkIGFyb3VuZCBob3RwbHVnIGNvbnRyb2xsZXIgKi8KLQotCi0vKgotICogcGNpZWhwX3NhdmVfY29uZmlnCi0gKgotICogUmVhZHMgY29uZmlndXJhdGlvbiBmb3IgYWxsIHNsb3RzIGluIGEgUENJIGJ1cyBhbmQgc2F2ZXMgaW5mby4KLSAqCi0gKiBOb3RlOiAgRm9yIG5vbi1ob3QgcGx1ZyBidXNzZXMsIHRoZSBzbG90ICMgc2F2ZWQgaXMgdGhlIGRldmljZSAjCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocF9zYXZlX2NvbmZpZyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgaW50IGJ1c251bWJlciwgaW50IG51bV9jdGxyX3Nsb3RzLCBpbnQgZmlyc3RfZGV2aWNlX251bSkKLXsKLQlpbnQgcmM7Ci0JdTggY2xhc3NfY29kZTsKLQl1OCBoZWFkZXJfdHlwZTsKLQl1MzIgSUQ7Ci0JdTggc2Vjb25kYXJ5X2J1czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90OwotCWludCBzdWJfYnVzOwotCWludCBtYXhfZnVuY3Rpb25zOwotCWludCBmdW5jdGlvbjsKLQl1OCBEZXZFcnJvcjsKLQlpbnQgZGV2aWNlID0gMDsKLQlpbnQgY2xvb3AgPSAwOwotCWludCBzdG9wX2l0OwotCWludCBpbmRleDsKLQlpbnQgaXNfaG90X3BsdWcgPSBudW1fY3Rscl9zbG90cyB8fCBmaXJzdF9kZXZpY2VfbnVtOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlpbnQgRmlyc3RTdXBwb3J0ZWQsIExhc3RTdXBwb3J0ZWQ7Ci0KLQlkYmcoIiVzOiBFbnRlclxuIiwgX19GVU5DVElPTl9fKTsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCi0JZGJnKCIlczogbnVtX2N0bHJfc2xvdHMgPSAlZCwgZmlyc3RfZGV2aWNlX251bSA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJbnVtX2N0bHJfc2xvdHMsIGZpcnN0X2RldmljZV9udW0pOwotCi0JLyogICBEZWNpZGUgd2hpY2ggc2xvdHMgYXJlIHN1cHBvcnRlZCAqLwotCWlmIChpc19ob3RfcGx1ZykgewotCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JCSAqICBpc19ob3RfcGx1ZyBpcyB0aGUgc2xvdCBtYXNrCi0JCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JCUZpcnN0U3VwcG9ydGVkID0gZmlyc3RfZGV2aWNlX251bTsKLQkJTGFzdFN1cHBvcnRlZCA9IEZpcnN0U3VwcG9ydGVkICsgbnVtX2N0bHJfc2xvdHMgLSAxOwotCX0gZWxzZSB7Ci0JCUZpcnN0U3VwcG9ydGVkID0gMDsKLQkJTGFzdFN1cHBvcnRlZCA9IDB4MUY7Ci0JfQotCi0JZGJnKCJGaXJzdFN1cHBvcnRlZCA9ICVkLCBMYXN0U3VwcG9ydGVkID0gJWRcbiIsIEZpcnN0U3VwcG9ydGVkLAotCQkJCQlMYXN0U3VwcG9ydGVkKTsKLQotCS8qICAgU2F2ZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBmb3IgYWxsIGRldmljZXMgaW4gc3VwcG9ydGVkIHNsb3RzICovCi0JZGJnKCIlczogcGNpX2J1cy0+bnVtYmVyID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgcGNpX2J1cy0+bnVtYmVyKTsKLQlwY2lfYnVzLT5udW1iZXIgPSBidXNudW1iZXI7Ci0JZGJnKCIlczogYnVzID0gJXgsIGRldiA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGJ1c251bWJlciwgZGV2aWNlKTsKLQlmb3IgKGRldmljZSA9IEZpcnN0U3VwcG9ydGVkOyBkZXZpY2UgPD0gTGFzdFN1cHBvcnRlZDsgZGV2aWNlKyspIHsKLQkJSUQgPSAweEZGRkZGRkZGOwotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgUENJX0RFVkZOKGRldmljZSwgMCksCi0JCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJaWYgKElEICE9IDB4RkZGRkZGRkYpIHsJICAvKiAgZGV2aWNlIGluIHNsb3QgKi8KLQkJCWRiZygiJXM6IElEID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgSUQpOwotCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgUENJX0RFVkZOKGRldmljZSwgMCksCi0JCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQkJCWlmIChyYykKLQkJCQlyZXR1cm4gcmM7Ci0KLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQlkYmcoImNsYXNzX2NvZGUgPSAleCwgaGVhZGVyX3R5cGUgPSAleFxuIiwgY2xhc3NfY29kZSwgaGVhZGVyX3R5cGUpOwotCi0JCQkvKiBJZiBtdWx0aS1mdW5jdGlvbiBkZXZpY2UsIHNldCBtYXhfZnVuY3Rpb25zIHRvIDggKi8KLQkJCWlmIChoZWFkZXJfdHlwZSAmIDB4ODApCi0JCQkJbWF4X2Z1bmN0aW9ucyA9IDg7Ci0JCQllbHNlCi0JCQkJbWF4X2Z1bmN0aW9ucyA9IDE7Ci0KLQkJCWZ1bmN0aW9uID0gMDsKLQotCQkJZG8gewotCQkJCURldkVycm9yID0gMDsKLQkJCQlkYmcoIiVzOiBJbiBkbyBsb29wXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JCQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgICAvKiBQLVAgQnJpZGdlICovCi0JCQkJCS8qIFJlY3Vyc2UgdGhlIHN1Ym9yZGluYXRlIGJ1cwotCQkJCQkgKiBnZXQgdGhlIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXIKLQkJCQkJICovCi0JCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsCi0JCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQkJUENJX1NFQ09OREFSWV9CVVMsICZzZWNvbmRhcnlfYnVzKTsKLQkJCQkJaWYgKHJjKSB7Ci0JCQkJCQlyZXR1cm4gcmM7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzdWJfYnVzID0gKGludCkgc2Vjb25kYXJ5X2J1czsKLQotCQkJCQkJLyogU2F2ZSBzZWNvbmRhcnkgYnVzIGNmZyBzcGMgd2l0aCB0aGlzIHJlY3Vyc2l2ZSBjYWxsLiAqLwotCQkJCQkJcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgc3ViX2J1cywgMCwgMCk7Ci0JCQkJCQlpZiAocmMpCi0JCQkJCQkJcmV0dXJuIHJjOwotCQkJCQl9Ci0JCQkJfQotCi0JCQkJaW5kZXggPSAwOwotCQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfZmluZChidXNudW1iZXIsIGRldmljZSwgaW5kZXgrKyk7Ci0KLQkJCQlkYmcoIiVzOiBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCV9fRlVOQ1RJT05fXywgbmV3X3Nsb3QsIGJ1c251bWJlciwgZGV2aWNlLCBpbmRleC0xKTsKLQotCQkJCXdoaWxlIChuZXdfc2xvdCAmJiAobmV3X3Nsb3QtPmZ1bmN0aW9uICE9ICh1OCkgZnVuY3Rpb24pKSB7Ci0JCQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfZmluZChidXNudW1iZXIsIGRldmljZSwgaW5kZXgrKyk7Ci0JCQkJCWRiZygiJXM6IHdoaWxlIGxvb3AsIG5ld19zbG90ID0gJXAgYnVzICV4IGRldiAleCBmdW4gJXhcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgbmV3X3Nsb3QsIGJ1c251bWJlciwgZGV2aWNlLCBpbmRleC0xKTsKLQkJCQl9Ci0JCQkJaWYgKCFuZXdfc2xvdCkgewotCQkJCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZS4gKi8KLQkJCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9jcmVhdGUoYnVzbnVtYmVyKTsKLQkJCQkJZGJnKCIlczogaWYsIG5ld19zbG90ID0gJXAgYnVzICV4IGRldiAleCBmdW4gJXhcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgbmV3X3Nsb3QsIGJ1c251bWJlciwgZGV2aWNlLCBmdW5jdGlvbik7Ci0KLQkJCQkJaWYgKG5ld19zbG90ID09IE5VTEwpCi0JCQkJCQlyZXR1cm4oMSk7Ci0JCQkJfQotCi0JCQkJbmV3X3Nsb3QtPmJ1cyA9ICh1OCkgYnVzbnVtYmVyOwotCQkJCW5ld19zbG90LT5kZXZpY2UgPSAodTgpIGRldmljZTsKLQkJCQluZXdfc2xvdC0+ZnVuY3Rpb24gPSAodTgpIGZ1bmN0aW9uOwotCQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMTsKLQkJCQluZXdfc2xvdC0+c3dpdGNoX3NhdmUgPSAweDEwOwotCQkJCS8qIEluIGNhc2Ugb2YgdW5zdXBwb3J0ZWQgYm9hcmQgKi8KLQkJCQluZXdfc2xvdC0+c3RhdHVzID0gRGV2RXJyb3I7Ci0JCQkJbmV3X3Nsb3QtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KG5ld19zbG90LT5idXMsCi0JCQkJCShuZXdfc2xvdC0+ZGV2aWNlIDw8IDMpIHwgbmV3X3Nsb3QtPmZ1bmN0aW9uKTsKLQkJCQlkYmcoIm5ld19zbG90LT5wY2lfZGV2ID0gJXBcbiIsIG5ld19zbG90LT5wY2lfZGV2KTsKLQotCQkJCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDB4MjA7IGNsb29wKyspIHsKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQljbG9vcCA8PCAyLCAKLQkJCQkJCSh1MzIgKikgJihuZXdfc2xvdC0+Y29uZmlnX3NwYWNlIFtjbG9vcF0pKTsKLQkJCQkJLyogZGJnKCJuZXdfc2xvdC0+Y29uZmlnX3NwYWNlWyV4XSA9ICV4XG4iLAotCQkJCQkJY2xvb3AsIG5ld19zbG90LT5jb25maWdfc3BhY2VbY2xvb3BdKTsgKi8KLQkJCQkJaWYgKHJjKQotCQkJCQkJcmV0dXJuIHJjOwotCQkJCX0KLQotCQkJCWZ1bmN0aW9uKys7Ci0KLQkJCQlzdG9wX2l0ID0gMDsKLQotCQkJCS8qICB0aGlzIGxvb3Agc2tpcHMgdG8gdGhlIG5leHQgcHJlc2VudCBmdW5jdGlvbgotCQkJCSAqICByZWFkaW5nIGluIENsYXNzIENvZGUgYW5kIEhlYWRlciB0eXBlLgotCQkJCSAqLwotCi0JCQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpJiYoIXN0b3BfaXQpKSB7Ci0JCQkJCWRiZygiJXM6IEluIHdoaWxlIGxvb3AgXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJUENJX1ZFTkRPUl9JRCwgJklEKTsKLQotCQkJCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgeyAgLyogbm90aGluZyB0aGVyZS4gKi8KLQkJCQkJCWZ1bmN0aW9uKys7Ci0JCQkJCQlkYmcoIk5vdGhpbmcgdGhlcmVcbiIpOwotCQkJCQl9IGVsc2UgeyAgLyogU29tZXRoaW5nIHRoZXJlICovCi0JCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJCVBDSV9ERVZGTihkZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCQkweDBCLCAmY2xhc3NfY29kZSk7Ci0JCQkJCQlpZiAocmMpCi0JCQkJCQkJcmV0dXJuIHJjOwotCi0JCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJCVBDSV9ERVZGTihkZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0JCQkJCQlpZiAocmMpCi0JCQkJCQkJcmV0dXJuIHJjOwotCi0JCQkJCQlkYmcoImNsYXNzX2NvZGUgPSAleCwgaGVhZGVyX3R5cGUgPSAleFxuIiwgY2xhc3NfY29kZSwgaGVhZGVyX3R5cGUpOwotCQkJCQkJc3RvcF9pdCsrOwotCQkJCQl9Ci0JCQkJfQotCi0JCQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCQkJLyogRW5kIG9mIElGIChkZXZpY2UgaW4gc2xvdD8pICovCi0JCX0gZWxzZSBpZiAoaXNfaG90X3BsdWcpIHsKLQkJCS8qIFNldHVwIHNsb3Qgc3RydWN0dXJlIHdpdGggZW50cnkgZm9yIGVtcHR5IHNsb3QgKi8KLQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGJ1c251bWJlcik7Ci0KLQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuKDEpOwotCQkJfQotCQkJZGJnKCJuZXdfc2xvdCA9ICVwLCBidXMgPSAleCwgZGV2ID0gJXgsIGZ1biA9ICV4XG4iLCBuZXdfc2xvdCwKLQkJCQluZXdfc2xvdC0+YnVzLCBuZXdfc2xvdC0+ZGV2aWNlLCBuZXdfc2xvdC0+ZnVuY3Rpb24pOwotCi0JCQluZXdfc2xvdC0+YnVzID0gKHU4KSBidXNudW1iZXI7Ci0JCQluZXdfc2xvdC0+ZGV2aWNlID0gKHU4KSBkZXZpY2U7Ci0JCQluZXdfc2xvdC0+ZnVuY3Rpb24gPSAwOwotCQkJbmV3X3Nsb3QtPmlzX2FfYm9hcmQgPSAwOwotCQkJbmV3X3Nsb3QtPnByZXNlbmNlX3NhdmUgPSAwOwotCQkJbmV3X3Nsb3QtPnN3aXRjaF9zYXZlID0gMDsKLQkJfQotCX0gCQkJLyogRW5kIG9mIEZPUiBsb29wICovCi0KLQlkYmcoIiVzOiBFeGl0XG4iLCBfX0ZVTkNUSU9OX18pOwotCXJldHVybigwKTsKLX0KLQotCi0vKgotICogcGNpZWhwX3NhdmVfc2xvdF9jb25maWcKLSAqCi0gKiBTYXZlcyBjb25maWd1cmF0aW9uIGluZm8gZm9yIGFsbCBQQ0kgZGV2aWNlcyBpbiBhIGdpdmVuIHNsb3QKLSAqIGluY2x1ZGluZyBzdWJvcmRpbmF0ZSBidXNzZXMuCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocF9zYXZlX3Nsb3RfY29uZmlnKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKiBuZXdfc2xvdCkKLXsKLQlpbnQgcmM7Ci0JdTggY2xhc3NfY29kZTsKLQl1OCBoZWFkZXJfdHlwZTsKLQl1MzIgSUQ7Ci0JdTggc2Vjb25kYXJ5X2J1czsKLQlpbnQgc3ViX2J1czsKLQlpbnQgbWF4X2Z1bmN0aW9uczsKLQlpbnQgZnVuY3Rpb247Ci0JaW50IGNsb29wID0gMDsKLQlpbnQgc3RvcF9pdDsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gbmV3X3Nsb3QtPmJ1czsKLQotCUlEID0gMHhGRkZGRkZGRjsKLQotCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIDApLAotCQkJCQlQQ0lfVkVORE9SX0lELCAmSUQpOwotCi0JaWYgKElEICE9IDB4RkZGRkZGRkYpIHsJICAvKiAgZGV2aWNlIGluIHNsb3QgKi8KLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCAwKSwKLQkJCQkJMHgwQiwgJmNsYXNzX2NvZGUpOwotCi0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4obmV3X3Nsb3QtPmRldmljZSwgMCksCi0JCQkJCVBDSV9IRUFERVJfVFlQRSwgJmhlYWRlcl90eXBlKTsKLQotCQlpZiAoaGVhZGVyX3R5cGUgJiAweDgwKQkvKiBNdWx0aS1mdW5jdGlvbiBkZXZpY2UgKi8KLQkJCW1heF9mdW5jdGlvbnMgPSA4OwotCQllbHNlCi0JCQltYXhfZnVuY3Rpb25zID0gMTsKLQotCQlmdW5jdGlvbiA9IDA7Ci0KLQkJZG8gewotCQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsJICAvKiBQQ0ktUENJIEJyaWRnZSAqLwotCQkJCS8qICBSZWN1cnNlIHRoZSBzdWJvcmRpbmF0ZSBidXMgKi8KLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwgCi0JCQkJCVBDSV9TRUNPTkRBUllfQlVTLCAmc2Vjb25kYXJ5X2J1cyk7Ci0KLQkJCQlzdWJfYnVzID0gKGludCkgc2Vjb25kYXJ5X2J1czsKLQotCQkJCS8qIFNhdmUgdGhlIGNvbmZpZyBoZWFkZXJzIGZvciB0aGUgc2Vjb25kYXJ5IGJ1cy4gKi8KLQkJCQlyYyA9IHBjaWVocF9zYXZlX2NvbmZpZyhjdHJsLCBzdWJfYnVzLCAwLCAwKTsKLQotCQkJCWlmIChyYykKLQkJCQkJcmV0dXJuIHJjOwotCi0JCQl9CS8qIEVuZCBvZiBJRiAqLwotCi0JCQluZXdfc2xvdC0+c3RhdHVzID0gMDsKLQotCQkJZm9yIChjbG9vcCA9IDA7IGNsb29wIDwgMHgyMDsgY2xvb3ArKykgewotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywKLQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwgCi0JCQkJCWNsb29wIDw8IDIsCi0JCQkJCSh1MzIgKikgJihuZXdfc2xvdC0+Y29uZmlnX3NwYWNlIFtjbG9vcF0pKTsKLQkJCX0KLQotCQkJZnVuY3Rpb24rKzsKLQotCQkJc3RvcF9pdCA9IDA7Ci0KLQkJCS8qICB0aGlzIGxvb3Agc2tpcHMgdG8gdGhlIG5leHQgcHJlc2VudCBmdW5jdGlvbgotCQkJICogIHJlYWRpbmcgaW4gdGhlIENsYXNzIENvZGUgYW5kIHRoZSBIZWFkZXIgdHlwZS4KLQkJCSAqLwotCi0JCQl3aGlsZSAoKGZ1bmN0aW9uIDwgbWF4X2Z1bmN0aW9ucykgJiYgKCFzdG9wX2l0KSkgewotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywKLQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJUENJX1ZFTkRPUl9JRCwgJklEKTsKLQotCQkJCWlmIChJRCA9PSAweEZGRkZGRkZGKSB7CSAvKiBub3RoaW5nIHRoZXJlLiAqLwotCQkJCQlmdW5jdGlvbisrOwotCQkJCX0gZWxzZSB7ICAvKiBTb21ldGhpbmcgdGhlcmUgKi8KLQkJCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsCi0JCQkJCQlQQ0lfREVWRk4obmV3X3Nsb3QtPmRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJMHgwQiwgJmNsYXNzX2NvZGUpOwotCi0JCQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCVBDSV9IRUFERVJfVFlQRSwgJmhlYWRlcl90eXBlKTsKLQotCQkJCQlzdG9wX2l0Kys7Ci0JCQkJfQotCQkJfQotCi0JCX0gd2hpbGUgKGZ1bmN0aW9uIDwgbWF4X2Z1bmN0aW9ucyk7Ci0JfQkJCS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCWVsc2UgewotCQlyZXR1cm4gMjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMKLSAqCi0gKiBTdG9yZXMgdXNlZCByZXNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgZXhpc3RpbmcgYm9hcmRzLiAgdGhpcyBpcwotICogZm9yIGJvYXJkcyB0aGF0IHdlcmUgaW4gdGhlIHN5c3RlbSB3aGVuIHRoaXMgZHJpdmVyIHdhcyBsb2FkZWQuCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGZvciBob3QgcGx1ZyBBREQKLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICogaWYgZGlzYWJsZSAgPT0gMShESVNBQkxFX0NBUkQpLAotICogIGl0IGxvb3BzIGZvciBhbGwgZnVuY3Rpb25zIG9mIHRoZSBzbG90IGFuZCBkaXNhYmxlcyB0aGVtLgotICogZWxzZSwgaXQganVzdCBnZXQgcmVzb3VyY2VzIG9mIHRoZSBmdW5jdGlvbiBhbmQgcmV0dXJuLgotICovCi1pbnQgcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgaW50IGRpc2FibGUpCi17Ci0JdTggY2xvb3A7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTggc2Vjb25kYXJ5X2J1czsKLQl1OCB0ZW1wX2J5dGU7Ci0JdTE2IGNvbW1hbmQ7Ci0JdTE2IHNhdmVfY29tbWFuZDsKLQl1MTYgd19iYXNlLCB3X2xlbmd0aDsKLQl1MzIgdGVtcF9yZWdpc3RlcjsKLQl1MzIgc2F2ZV9iYXNlOwotCXUzMiBiYXNlLCBsZW5ndGg7Ci0JdTY0IGJhc2U2NCA9IDA7Ci0JaW50IGluZGV4ID0gMDsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX25vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX25vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRfbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfbm9kZTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0KLQlpZiAoZGlzYWJsZSkKLQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGluZGV4KyspOwotCi0Jd2hpbGUgKChmdW5jICE9IE5VTEwpICYmIGZ1bmMtPmlzX2FfYm9hcmQpIHsKLQkJcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCQlkZXZmbiA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCQkvKiBTYXZlIHRoZSBjb21tYW5kIHJlZ2lzdGVyICovCi0JCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0NPTU1BTkQsICZzYXZlX2NvbW1hbmQpOwotCi0JCWlmIChkaXNhYmxlKSB7Ci0JCQkvKiBkaXNhYmxlIGNhcmQgKi8KLQkJCWNvbW1hbmQgPSAweDAwOwotCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0NPTU1BTkQsIGNvbW1hbmQpOwotCQl9Ci0KLQkJLyogQ2hlY2sgZm9yIEJyaWRnZSAqLwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJmhlYWRlcl90eXBlKTsKLQotCQlpZiAoKGhlYWRlcl90eXBlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeyAgICAgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJCWRiZygiU2F2ZV91c2VkX3JlcyBvZiBQQ0kgYnJpZGdlIGI6ZD0weCV4OiV4LCBzYz0weCV4XG4iLAotCQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgc2F2ZV9jb21tYW5kKTsKLQkJCWlmIChkaXNhYmxlKSB7Ci0JCQkJLyogQ2xlYXIgQnJpZGdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQkJCQljb21tYW5kID0gMHgwMDsKLQkJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsIGNvbW1hbmQpOwotCQkJfQotCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNPTkRBUllfQlVTLCAmc2Vjb25kYXJ5X2J1cyk7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TVUJPUkRJTkFURV9CVVMsICZ0ZW1wX2J5dGUpOwotCi0JCQlidXNfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWJ1c19ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlidXNfbm9kZS0+YmFzZSA9ICh1bG9uZylzZWNvbmRhcnlfYnVzOwotCQkJYnVzX25vZGUtPmxlbmd0aCA9ICh1bG9uZykodGVtcF9ieXRlIC0gc2Vjb25kYXJ5X2J1cyArIDEpOwotCi0JCQlidXNfbm9kZS0+bmV4dCA9IGZ1bmMtPmJ1c19oZWFkOwotCQkJZnVuYy0+YnVzX2hlYWQgPSBidXNfbm9kZTsKLQotCQkJLyogU2F2ZSBJTyBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0JBU0UsICZ0ZW1wX2J5dGUpOwotCQkJYmFzZSA9IHRlbXBfYnl0ZTsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCAmdGVtcF9ieXRlKTsKLQkJCWxlbmd0aCA9IHRlbXBfYnl0ZTsKLQotCQkJaWYgKChiYXNlIDw9IGxlbmd0aCkgJiYgKCFkaXNhYmxlIHx8IChzYXZlX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9JTykpKSB7Ci0JCQkJaW9fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghaW9fbm9kZSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQlpb19ub2RlLT5iYXNlID0gKHVsb25nKShiYXNlICYgUENJX0lPX1JBTkdFX01BU0spIDw8IDg7Ci0JCQkJaW9fbm9kZS0+bGVuZ3RoID0gKHVsb25nKShsZW5ndGggLSBiYXNlICsgMHgxMCkgPDwgODsKLQotCQkJCWlvX25vZGUtPm5leHQgPSBmdW5jLT5pb19oZWFkOwotCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJfQotCi0JCQkvKiBTYXZlIG1lbW9yeSBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX01FTU9SWV9CQVNFLCAmd19iYXNlKTsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX01FTU9SWV9MSU1JVCwgJndfbGVuZ3RoKTsKLQotCQkJaWYgKCh3X2Jhc2UgPD0gd19sZW5ndGgpICYmICghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkpIHsKLQkJCQltZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFtZW1fbm9kZSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQltZW1fbm9kZS0+YmFzZSA9ICh1bG9uZyl3X2Jhc2UgPDwgMTY7Ci0JCQkJbWVtX25vZGUtPmxlbmd0aCA9ICh1bG9uZykod19sZW5ndGggLSB3X2Jhc2UgKyAweDEwKSA8PCAxNjsKLQotCQkJCW1lbV9ub2RlLT5uZXh0ID0gZnVuYy0+bWVtX2hlYWQ7Ci0JCQkJZnVuYy0+bWVtX2hlYWQgPSBtZW1fbm9kZTsKLQkJCX0KLQkJCS8qIFNhdmUgcHJlZmV0Y2hhYmxlIG1lbW9yeSBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0JBU0UsICZ3X2Jhc2UpOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJFRl9NRU1PUllfTElNSVQsICZ3X2xlbmd0aCk7Ci0KLQkJCWlmICgod19iYXNlIDw9IHdfbGVuZ3RoKSAmJiAoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpKSB7Ci0JCQkJcF9tZW1fbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFwX21lbV9ub2RlKQotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJCXBfbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpd19iYXNlIDw8IDE2OwotCQkJCXBfbWVtX25vZGUtPmxlbmd0aCA9ICh1bG9uZykod19sZW5ndGggLSB3X2Jhc2UgKyAweDEwKSA8PCAxNjsKLQotCQkJCXBfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJCWZ1bmMtPnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCQkJfQotCQl9IGVsc2UgaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpIHsKLQkJCWRiZygiU2F2ZV91c2VkX3JlcyBvZiBQQ0kgYWRhcHRlciBiOmQ9MHgleDoleCwgc2M9MHgleFxuIiwKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIHNhdmVfY29tbWFuZCk7Ci0KLQkJCS8qIEZpZ3VyZSBvdXQgSU8gYW5kIG1lbW9yeSBiYXNlIGxlbmd0aHMgKi8KLQkJCWZvciAoY2xvb3AgPSBQQ0lfQkFTRV9BRERSRVNTXzA7IGNsb29wIDw9IFBDSV9CQVNFX0FERFJFU1NfNTsgY2xvb3AgKz0gNCkgewotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmc2F2ZV9iYXNlKTsKLQotCQkJCXRlbXBfcmVnaXN0ZXIgPSAweEZGRkZGRkZGOwotCQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgdGVtcF9yZWdpc3Rlcik7Ci0JCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsICZ0ZW1wX3JlZ2lzdGVyKTsKLQotCQkJCWlmICghZGlzYWJsZSkKLQkJCQkJcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCBzYXZlX2Jhc2UpOwotCi0JCQkJaWYgKCF0ZW1wX3JlZ2lzdGVyKQotCQkJCQljb250aW51ZTsKLQotCQkJCWJhc2UgPSB0ZW1wX3JlZ2lzdGVyOwotCi0JCQkJaWYgKChiYXNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgJiYKLQkJCQkJCSghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfSU8pKSkgewotCQkJCQkvKiBJTyBiYXNlICovCi0JCQkJCS8qIHNldCB0ZW1wX3JlZ2lzdGVyID0gYW1vdW50IG9mIElPIHNwYWNlIHJlcXVlc3RlZCAqLwotCQkJCQliYXNlID0gYmFzZSAmIDB4RkZGRkZGRkNMOwotCQkJCQliYXNlID0gKH5iYXNlKSArIDE7Ci0KLQkJCQkJaW9fbm9kZSA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJCWlmICghaW9fbm9kZSkKLQkJCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJCWlvX25vZGUtPmJhc2UgPSAodWxvbmcpc2F2ZV9iYXNlICYgUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCQkJCQlpb19ub2RlLT5sZW5ndGggPSAodWxvbmcpYmFzZTsKLQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogSU8gYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLAotCQkJCQkJaW9fbm9kZS0+YmFzZSwgaW9fbm9kZS0+bGVuZ3RoKTsKLQotCQkJCQlpb19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQkJZnVuYy0+aW9faGVhZCA9IGlvX25vZGU7Ci0JCQkJfSBlbHNlIHsgIC8qIG1hcCBNZW1vcnkgKi8KLQkJCQkJaW50IHByZWZldGNoYWJsZSA9IDE7Ci0JCQkJCS8qIHN0cnVjdCBwY2lfcmVzb3VyY2VzICoqcmVzX25vZGU7ICovCi0JCQkJCWNoYXIgKnJlc190eXBlX3N0ciA9ICJQTUVNIjsKLQkJCQkJdTMyIHRlbXBfcmVnaXN0ZXIyOwotCi0JCQkJCXRfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCQlpZiAoIXRfbWVtX25vZGUpCi0JCQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJCQlpZiAoIShiYXNlICYgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0gpICYmCi0JCQkJCQkJKCFkaXNhYmxlIHx8IChzYXZlX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkgewotCQkJCQkJcHJlZmV0Y2hhYmxlID0gMDsKLQkJCQkJCW1lbV9ub2RlID0gdF9tZW1fbm9kZTsKLQkJCQkJCXJlc190eXBlX3N0cisrOwotCQkJCQl9IGVsc2UKLQkJCQkJCXBfbWVtX25vZGUgPSB0X21lbV9ub2RlOwotCi0JCQkJCWJhc2UgPSBiYXNlICYgMHhGRkZGRkZGMEw7Ci0JCQkJCWJhc2UgPSAofmJhc2UpICsgMTsKLQotCQkJCQlzd2l0Y2ggKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFX01BU0spIHsKLQkJCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyOgotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkgewotCQkJCQkJCXBfbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpc2F2ZV9iYXNlICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQkJCQkJCQlwX21lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpYmFzZTsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiAzMiAlcyBiYXI9MHgleChsZW5ndGg9MHgleClcbiIsCi0JCQkJCQkJCXJlc190eXBlX3N0ciwgCi0JCQkJCQkJCXBfbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCXBfbWVtX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJCQlwX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpc2F2ZV9iYXNlICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQkJCQkJCQltZW1fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQltZW1fbm9kZS0+YmFzZSwKLQkJCQkJCQkJbWVtX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJCQltZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJCQkJCWZ1bmMtPm1lbV9oZWFkID0gbWVtX25vZGU7Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0OgotCQkJCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3ArNCwgJnRlbXBfcmVnaXN0ZXIyKTsKLQkJCQkJCWJhc2U2NCA9IHRlbXBfcmVnaXN0ZXIyOwotCQkJCQkJYmFzZTY0ID0gKGJhc2U2NCA8PCAzMikgfCBzYXZlX2Jhc2U7Ci0KLQkJCQkJCWlmICh0ZW1wX3JlZ2lzdGVyMikgewotCQkJCQkJCWRiZygic3VyIGFkYXB0ZXI6IDY0ICVzIGhpZ2ggZHdvcmQgb2YgYmFzZTY0KDB4JXg6JXgpIG1hc2tlZCB0byAwXG4iLCAKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCB0ZW1wX3JlZ2lzdGVyMiwgKHUzMiliYXNlNjQpOwotCQkJCQkJCWJhc2U2NCAmPSAweDAwMDAwMDAwRkZGRkZGRkZMOwotCQkJCQkJfQotCi0JCQkJCQlpZiAocHJlZmV0Y2hhYmxlKSB7Ci0JCQkJCQkJcF9tZW1fbm9kZS0+YmFzZSA9IGJhc2U2NCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoID0gYmFzZTsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiA2NCAlcyBiYXNlPTB4JXgobGVuPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlLAotCQkJCQkJCQlwX21lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJCQkJZnVuYy0+cF9tZW1faGVhZCA9IHBfbWVtX25vZGU7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW1lbV9ub2RlLT5iYXNlID0gYmFzZTY0ICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQkJCQkJCQltZW1fbm9kZS0+bGVuZ3RoID0gYmFzZTsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiA2NCAlcyBiYXNlPTB4JXgobGVuPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQltZW1fbm9kZS0+YmFzZSwKLQkJCQkJCQkJbWVtX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJCQltZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJCQkJCWZ1bmMtPm1lbV9oZWFkID0gbWVtX25vZGU7Ci0JCQkJCQl9Ci0JCQkJCQljbG9vcCArPSA0OwotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlkYmcoImFzdXI6IHJlc2VydmVkIEJBUiB0eXBlPTB4JXhcbiIsCi0JCQkJCQkJdGVtcF9yZWdpc3Rlcik7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0gCi0JCQl9CS8qIEVuZCBvZiBiYXNlIHJlZ2lzdGVyIGxvb3AgKi8KLQkJfSBlbHNlIHsJLyogU29tZSBvdGhlciB1bmtub3duIGhlYWRlciB0eXBlICovCi0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIHVua25vd24gdHlwZSBiOmQ9MHgleDoleC4gc2tpcC5cbiIsCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlKTsKLQkJfQotCi0JCS8qIGZpbmQgdGhlIG5leHQgZGV2aWNlIGluIHRoaXMgc2xvdCAqLwotCQlpZiAoIWRpc2FibGUpCi0JCQlicmVhazsKLQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGluZGV4KyspOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLS8qKgotICoga2ZyZWVfcmVzb3VyY2VfbGlzdDogcmVsZWFzZSBtZW1vcnkgb2YgYWxsIGxpc3QgbWVtYmVycwotICogQHJlczogcmVzb3VyY2UgbGlzdCB0byBmcmVlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotcmV0dXJuX3Jlc291cmNlX2xpc3Qoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmZ1bmMsIHN0cnVjdCBwY2lfcmVzb3VyY2UgKipyZXMpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0X25vZGU7Ci0KLQlub2RlID0gKmZ1bmM7Ci0JKmZ1bmMgPSBOVUxMOwotCXdoaWxlIChub2RlKSB7Ci0JCXRfbm9kZSA9IG5vZGUtPm5leHQ7Ci0JCXJldHVybl9yZXNvdXJjZShyZXMsIG5vZGUpOwotCQlub2RlID0gdF9ub2RlOwotCX0KLX0KLQotLyoKLSAqIHBjaWVocF9yZXR1cm5fYm9hcmRfcmVzb3VyY2VzCi0gKgotICogdGhpcyByb3V0aW5lIHJldHVybnMgYWxsIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYSBib2FyZCB0bwotICogdGhlIGF2YWlsYWJsZSBwb29sLgotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2Z1bmMgKiBmdW5jLAotCQkJCXN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcykKLXsKLQlpbnQgcmM7Ci0KLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JaWYgKCFmdW5jKQotCQlyZXR1cm4gMTsKLQotCXJldHVybl9yZXNvdXJjZV9saXN0KCYoZnVuYy0+aW9faGVhZCksJihyZXNvdXJjZXMtPmlvX2hlYWQpKTsKLQlyZXR1cm5fcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPm1lbV9oZWFkKSwmKHJlc291cmNlcy0+bWVtX2hlYWQpKTsKLQlyZXR1cm5fcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPnBfbWVtX2hlYWQpLCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5idXNfaGVhZCksJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci0KLQlyYyA9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYocmVzb3VyY2VzLT5tZW1faGVhZCkpOwotCXJjIHw9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSk7Ci0JcmMgfD0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihyZXNvdXJjZXMtPmlvX2hlYWQpKTsKLQlyYyB8PSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+YnVzX2hlYWQpKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBrZnJlZV9yZXNvdXJjZV9saXN0OiByZWxlYXNlIG1lbW9yeSBvZiBhbGwgbGlzdCBtZW1iZXJzCi0gKiBAcmVzOiByZXNvdXJjZSBsaXN0IHRvIGZyZWUKLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1rZnJlZV9yZXNvdXJjZV9saXN0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipyKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnJlcywgKnRyZXM7Ci0KLQlyZXMgPSAqcjsKLQkqciA9IE5VTEw7Ci0KLQl3aGlsZSAocmVzKSB7Ci0JCXRyZXMgPSByZXM7Ci0JCXJlcyA9IHJlcy0+bmV4dDsKLQkJa2ZyZWUodHJlcyk7Ci0JfQotfQotCi0vKioKLSAqIHBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3Q6IHB1dCBub2RlIGJhY2sgaW4gdGhlIHJlc291cmNlIGxpc3QKLSAqIEByZXNvdXJjZXM6IGxpc3QgdG8gcHV0IG5vZGVzIGJhY2sKLSAqLwotdm9pZCBwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0KHN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcykKLXsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+bWVtX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+YnVzX2hlYWQpKTsKLX0KLQotLyoqCi0gKiBwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXM6IHB1dCBub2RlIGJhY2sgaW4gdGhlIHJlc291cmNlIGxpc3QKLSAqIEByZXNvdXJjZXM6IGxpc3QgdG8gcHV0IG5vZGVzIGJhY2sKLSAqLwotdm9pZCBwY2llaHBfZGVzdHJveV9ib2FyZF9yZXNvdXJjZXMoc3RydWN0IHBjaV9mdW5jICogZnVuYykKLXsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+aW9faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihmdW5jLT5tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihmdW5jLT5wX21lbV9oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmJ1c19oZWFkKSk7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZjIwZmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIFBDSUVIUFJNIDogUENJRUhQIFJlc291cmNlIE1hbmFnZXIgZm9yIEFDUEkvbm9uLUFDUEkgcGxhdGZvcm0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsMjAwMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAzIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIENvcnAuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKLSAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKLSAqIE5PTiBJTkZSSU5HRU1FTlQuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCi0gKiBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKgotICogU2VuZCBmZWVkYmFjayB0byA8Z3JlZ0Brcm9haC5jb20+LCA8a3Jpc3Rlbi5jLmFjY2FyZGlAaW50ZWwuY29tPgotICoKLSAqLwotCi0jaWZuZGVmIF9QQ0lFSFBSTV9IXwotI2RlZmluZSBfUENJRUhQUk1fSF8KLQotI2lmZGVmCUNPTkZJR19IT1RQTFVHX1BDSV9QQ0lFX1BIUFJNX05PTkFDUEkKLSNpbmNsdWRlICJwY2llaHBybV9ub25hY3BpLmgiCi0jZW5kaWYKLQotaW50IHBjaWVocHJtX2luaXQoZW51bSBwaHBfY3Rscl90eXBlIGN0KTsKLXZvaWQgcGNpZWhwcm1fY2xlYW51cCh2b2lkKTsKLWludCBwY2llaHBybV9wcmludF9waXJ0KHZvaWQpOwotaW50IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7Ci1pbnQgcGNpZWhwcm1fc2V0X2hwcChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICpmdW5jLCB1OCBjYXJkX3R5cGUpOwotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICpmdW5jLCB1OCBjYXJkX3R5cGUpOwotCi0jaWZkZWYJREVCVUcKLSNkZWZpbmUgUkVTX0NIRUNLKHRoaXMsIGJpdHMpCVwKLQl7IGlmICgoKHRoaXMpICYgKGJpdHMgLSAxKSkpIFwKLQkJcHJpbnRrKCIlczolZCBFUlI6IHBvdGVudGlhbCByZXMgbG9zcyFcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOyB9Ci0jZWxzZQotI2RlZmluZSBSRVNfQ0hFQ0sodGhpcywgYml0cykKLSNlbmRpZgotCi0jZW5kaWYJCQkJLyogX1BDSUVIUFJNX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fYWNwaS5jCmluZGV4IDE0MDZkYjMuLmFlMjQ0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fYWNwaS5jCkBAIC0yNCwxMDAgKzI0LDIwIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvZWZpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpZmRlZglDT05GSUdfSUE2NAotI2luY2x1ZGUgPGFzbS9pb3NhcGljLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3R5cGVzLmg+CiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKLQotI2RlZmluZQlQQ0lfTUFYX0JVUwkJMHgxMDAKLSNkZWZpbmUJQUNQSV9TVEFfREVWSUNFX1BSRVNFTlQJMHgwMQogCiAjZGVmaW5lCU1FVEhPRF9OQU1FX19TVU4JIl9TVU4iCiAjZGVmaW5lCU1FVEhPRF9OQU1FX19IUFAJIl9IUFAiCiAjZGVmaW5lCU1FVEhPRF9OQU1FX09TSFAJIk9TSFAiCiAKLS8qIFN0YXR1cyBjb2RlIGZvciBydW5uaW5nIGFjcGkgbWV0aG9kIHRvIGdhaW4gbmF0aXZlIGNvbnRyb2wgKi8KLSNkZWZpbmUgTkNfTk9UX1JVTgkwCi0jZGVmaW5lIE9TQ19OT1RfRVhJU1QJMQotI2RlZmluZSBPU0NfUlVOX0ZBSUxFRAkyCi0jZGVmaW5lIE9TSFBfTk9UX0VYSVNUCTMKLSNkZWZpbmUgT1NIUF9SVU5fRkFJTEVECTQKLSNkZWZpbmUgTkNfUlVOX1NVQ0NFU1MJNQotCi0jZGVmaW5lCVBIUF9SRVNfQlVTCQkweEEwCi0jZGVmaW5lCVBIUF9SRVNfSU8JCTB4QTEKLSNkZWZpbmUJUEhQX1JFU19NRU0JCTB4QTIKLSNkZWZpbmUJUEhQX1JFU19QTUVNCQkweEEzCi0KLSNkZWZpbmUJQlJJREdFX1RZUEVfUDJQCQkweDAwCi0jZGVmaW5lCUJSSURHRV9UWVBFX0hPU1QJMHgwMQotCi0vKiB0aGlzIHNob3VsZCBnbyB0byBkcml2ZXJzL2FjcGkvaW5jbHVkZS8gKi8KLXN0cnVjdCBhY3BpX19ocHAgewotCXU4CWNhY2hlX2xpbmVfc2l6ZTsKLQl1OAlsYXRlbmN5X3RpbWVyOwotCXU4CWVuYWJsZV9zZXJyOwotCXU4CWVuYWJsZV9wZXJyOwotfTsKLQotc3RydWN0IGFjcGlfcGhwX3Nsb3QgewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSpuZXh0OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYnJpZGdlOwotCWFjcGlfaGFuZGxlCWhhbmRsZTsKLQlpbnQJc2VnOwotCWludAlidXM7Ci0JaW50CWRldjsKLQlpbnQJZnVuOwotCXUzMglzdW47Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19oZWFkOwotCXZvaWQJKnNsb3Rfb3BzOwkvKiBfU1RBLCBfRUp4LCBldGMgKi8KLQlzdHJ1Y3Qgc2xvdCAqc2xvdDsKLX07CQkvKiBwZXIgZnVuYyAqLwotCi1zdHJ1Y3QgYWNwaV9icmlkZ2UgewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqcGFyZW50OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbmV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmNoaWxkOwotCWFjcGlfaGFuZGxlCWhhbmRsZTsKLQlpbnQgc2VnOwotCWludCBwYnVzOwkJCS8qIHBkZXYtPmJ1cy0+bnVtYmVyCQkqLwotCWludCBwZGV2aWNlOwkJCS8qIFBDSV9TTE9UKHBkZXYtPmRldmZuKQkqLwotCWludCBwZnVuY3Rpb247CQkJLyogUENJX0RFVkZOKHBkZXYtPmRldmZuKQkqLwotCWludCBidXM7CQkJLyogcGRldi0+c3Vib3JkaW5hdGUtPm51bWJlcgkqLwotCXN0cnVjdCBhY3BpX19ocHAJCSpfaHBwOwotCXN0cnVjdCBhY3BpX3BocF9zbG90CSpzbG90czsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqdG1lbV9oZWFkOwkvKiB0b3RhbCBmcm9tIGNycwkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSp0cF9tZW1faGVhZDsJLyogdG90YWwgZnJvbSBjcnMJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqdGlvX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRidXNfaGVhZDsJLyogdG90YWwgZnJvbSBjcnMJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqbWVtX2hlYWQ7CS8qIGF2YWlsYWJsZQkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSpwX21lbV9oZWFkOwkvKiBhdmFpbGFibGUJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqaW9faGVhZDsJLyogYXZhaWxhYmxlCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKmJ1c19oZWFkOwkvKiBhdmFpbGFibGUJKi8KLQlpbnQgc2Nhbm5lZDsKLQlpbnQgdHlwZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFjcGlfYnJpZGdlc19oZWFkOwotCiBzdGF0aWMgdTggKiBhY3BpX3BhdGhfbmFtZSggYWNwaV9oYW5kbGUJaGFuZGxlKQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CkBAIC0xMzMsODUgKzUzLDQzIEBACiAJCXJldHVybiBwYXRoX25hbWU7CQogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2dldF9faHBwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYik7Ci1zdGF0aWMgaW50IGFjcGlfcnVuX29zaHAgKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKTsKLXN0YXRpYyBpbnQgb3NjX3J1bl9zdGF0dXMgPSBOQ19OT1RfUlVOOwotc3RhdGljIGludCBvc2hwX3J1bl9zdGF0dXMgPSBOQ19OT1RfUlVOOwotCi1zdGF0aWMgaW50IGFjcGlfYWRkX3Nsb3RfdG9fcGhwX3Nsb3RzKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIsCi0JaW50CQkJYnVzX251bSwKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXUzMgkJCWFkciwKLQl1MzIJCQlzdW4KLQkpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJKmFwczsKLQlzdGF0aWMgbG9uZwlzYW1lc3VuID0gLTE7Ci0KLQlhcHMgPSAoc3RydWN0IGFjcGlfcGhwX3Nsb3QgKikga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBhY3BpX3BocF9zbG90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcHMpIHsKLQkJZXJyICgiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFwcyBmYWlsXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQltZW1zZXQoYXBzLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfcGhwX3Nsb3QpKTsKLQotCWFwcy0+aGFuZGxlID0gaGFuZGxlOwotCWFwcy0+YnVzID0gYnVzX251bTsKLQlhcHMtPmRldiA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwotCWFwcy0+ZnVuID0gYWRyICYgMHhmZmZmOwotCWFwcy0+c3VuID0gc3VuOwotCi0JYXBzLT5uZXh0ID0gYWItPnNsb3RzOwkvKiBjbGluZyB0byB0aGUgYnJpZGdlICovCi0JYXBzLT5icmlkZ2UgPSBhYjsKLQlhYi0+c2xvdHMgPSBhcHM7Ci0KLQlhYi0+c2Nhbm5lZCArPSAxOwotCWlmICghYWItPl9ocHApCi0JCWFjcGlfZ2V0X19ocHAoYWIpOwotCQotCWlmIChvc2NfcnVuX3N0YXR1cyA9PSBPU0NfTk9UX0VYSVNUKQotCQlvc2hwX3J1bl9zdGF0dXMgPSBhY3BpX3J1bl9vc2hwKGFiKTsKLQotCWlmIChzdW4gIT0gc2FtZXN1bikgewotCQlpbmZvKCJhY3BpX3BjaWVocHJtOiAgIFNsb3Qgc3VuKCV4KSBhdCBzOmI6ZDpmPTB4JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwgCi0JCQlhcHMtPnN1biwgYWItPnNlZywgYXBzLT5idXMsIGFwcy0+ZGV2LCBhcHMtPmZ1bik7Ci0JCXNhbWVzdW4gPSBzdW47Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX2dldF9faHBwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKK3N0YXRpYyBhY3BpX3N0YXR1cworYWNwaV9ydW5faHBwKGFjcGlfaGFuZGxlIGhhbmRsZSwgc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCiB7CiAJYWNwaV9zdGF0dXMJCXN0YXR1czsKIAl1OAkJCW51aVs0XTsKIAlzdHJ1Y3QgYWNwaV9idWZmZXIJcmV0X2J1ZiA9IHsgMCwgTlVMTH07CiAJdW5pb24gYWNwaV9vYmplY3QJKmV4dF9vYmosICpwYWNrYWdlOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpOworCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7CiAJaW50CQkJaSwgbGVuID0gMDsKIAogCS8qIGdldCBfaHBwICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYWItPmhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwgTlVMTCwgJnJldF9idWYpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwgTlVMTCwgJnJldF9idWYpOwogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSBBRV9CVUZGRVJfT1ZFUkZMT1c6CiAJCXJldF9idWYucG9pbnRlciA9IGttYWxsb2MgKHJldF9idWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyZXRfYnVmLnBvaW50ZXIpIHsKLQkJCWVyciAoImFjcGlfcGNpZWhwcm06JXMgYWxsb2MgZm9yIF9IUFAgZmFpbFxuIiwgcGF0aF9uYW1lKTsKLQkJCXJldHVybjsKKwkJCWVyciAoIiVzOiVzIGFsbG9jIGZvciBfSFBQIGZhaWxcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkJcGF0aF9uYW1lKTsKKwkJCXJldHVybiBBRV9OT19NRU1PUlk7CiAJCX0KLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYWItPmhhbmRsZSwgTUVUSE9EX05BTUVfX0hQUCwgTlVMTCwgJnJldF9idWYpOworCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsCisJCQkJTlVMTCwgJnJldF9idWYpOwogCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCiAJCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWVycigiYWNwaV9wY2llaHBybTolcyBfSFBQIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQkJcmV0dXJuOworCQkJZGJnKCIlczolcyBfSFBQIGZhaWw9MHgleFxuIiwgX19GVU5DVElPTl9fLAorCQkJCQlwYXRoX25hbWUsIHN0YXR1cyk7CisJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQogCiAJZXh0X29iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSByZXRfYnVmLnBvaW50ZXI7CiAJaWYgKGV4dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKLQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfSFBQIG9iaiBub3QgYSBwYWNrYWdlXG4iLCBwYXRoX25hbWUpOworCQllcnIgKCIlczolcyBfSFBQIG9iaiBub3QgYSBwYWNrYWdlXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcGF0aF9uYW1lKTsKKwkJc3RhdHVzID0gQUVfRVJST1I7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIApAQCAtMjI0LDE1MTQgKzEwMiwxNTMgQEAKIAkJCW51aVtpXSA9ICh1OClleHRfb2JqLT5pbnRlZ2VyLnZhbHVlOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQllcnIgKCJhY3BpX3BjaWVocHJtOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLCBwYXRoX25hbWUpOworCQkJZXJyICgiJXM6JXMgX0hQUCBvYmogdHlwZSBpbmNvcnJlY3RcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkJcGF0aF9uYW1lKTsKKwkJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJCX0KIAl9CiAKLQlhYi0+X2hwcCA9IGttYWxsb2MgKHNpemVvZiAoc3RydWN0IGFjcGlfX2hwcCksIEdGUF9LRVJORUwpOwotCWlmICghYWItPl9ocHApIHsKLQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBhbGxvYyBmb3IgX0hQUCBmYWlsZWRcbiIsIHBhdGhfbmFtZSk7Ci0JCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwotCX0KLQltZW1zZXQoYWItPl9ocHAsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9faHBwKSk7CisJaHBwLT5jYWNoZV9saW5lX3NpemUgPSBudWlbMF07CisJaHBwLT5sYXRlbmN5X3RpbWVyID0gbnVpWzFdOworCWhwcC0+ZW5hYmxlX3NlcnIgPSBudWlbMl07CisJaHBwLT5lbmFibGVfcGVyciA9IG51aVszXTsKIAotCWFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUJPSBudWlbMF07Ci0JYWItPl9ocHAtPmxhdGVuY3lfdGltZXIJCT0gbnVpWzFdOwotCWFiLT5faHBwLT5lbmFibGVfc2VycgkJPSBudWlbMl07Ci0JYWItPl9ocHAtPmVuYWJsZV9wZXJyCQk9IG51aVszXTsKLQotCWRiZygiICBfSFBQOiBjYWNoZV9saW5lX3NpemU9MHgleFxuIiwgYWItPl9ocHAtPmNhY2hlX2xpbmVfc2l6ZSk7Ci0JZGJnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBhYi0+X2hwcC0+bGF0ZW5jeV90aW1lcik7Ci0JZGJnKCIgIF9IUFA6IGVuYWJsZSBTRVJSICAgID0weCV4XG4iLCBhYi0+X2hwcC0+ZW5hYmxlX3NlcnIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgUEVSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9wZXJyKTsKKwlkYmcoIiAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGhwcC0+Y2FjaGVfbGluZV9zaXplKTsKKwlkYmcoIiAgX0hQUDogbGF0ZW5jeSB0aW1lciAgPTB4JXhcbiIsIGhwcC0+bGF0ZW5jeV90aW1lcik7CisJZGJnKCIgIF9IUFA6IGVuYWJsZSBTRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9zZXJyKTsKKwlkYmcoIiAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGhwcC0+ZW5hYmxlX3BlcnIpOwogCiBmcmVlX2FuZF9yZXR1cm46CiAJa2ZyZWUocmV0X2J1Zi5wb2ludGVyKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGFjcGlfcnVuX29zaHAgKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQorc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcnVuX29zaHAoYWNwaV9oYW5kbGUgaGFuZGxlKQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSk7CisJdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKIAogCS8qIHJ1biBPU0hQICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYWItPmhhbmRsZSwgTUVUSE9EX05BTUVfT1NIUCwgTlVMTCwgTlVMTCk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9PU0hQLCBOVUxMLCBOVUxMKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIE9TSFAgZmFpbHM9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlvc2hwX3J1bl9zdGF0dXMgPSAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBPU0hQX05PVF9FWElTVCA6IE9TSFBfUlVOX0ZBSUxFRDsKKwkJZGJnKCIlczolcyBPU0hQIGZhaWxzPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywgcGF0aF9uYW1lLAorCQkJCXN0YXR1cyk7CiAJfSBlbHNlIHsKLQkJb3NocF9ydW5fc3RhdHVzID0gTkNfUlVOX1NVQ0NFU1M7Ci0JCWRiZygiYWNwaV9wY2llaHBybTolcyBPU0hQIHBhc3NlcyA9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgb3NocF9ydW5fc3RhdHVzID0weCV4XG4iLCBwYXRoX25hbWUsIG9zaHBfcnVuX3N0YXR1cyk7CisJCWRiZygiJXM6JXMgT1NIUCBwYXNzZXNcbiIsIF9fRlVOQ1RJT05fXywgcGF0aF9uYW1lKTsKIAl9Ci0JcmV0dXJuIG9zaHBfcnVuX3N0YXR1czsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfZXZhbHVhdGVfY3JzKAotCWFjcGlfaGFuZGxlCQloYW5kbGUsCi0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKipyZXRidWYKLQkpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIJY3JzYnVmOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0KLQljcnNidWYubGVuZ3RoICA9IDA7Ci0JY3JzYnVmLnBvaW50ZXIgPSBOVUxMOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMgKGhhbmRsZSwgJmNyc2J1Zik7Ci0KLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgQUVfQlVGRkVSX09WRVJGTE9XOgotCQlicmVhazsJCS8qIGZvdW5kICovCi0JY2FzZSBBRV9OT1RfRk9VTkQ6Ci0JCWRiZygiYWNwaV9wY2llaHBybTolcyBfQ1JTIG5vdCBmb3VuZFxuIiwgcGF0aF9uYW1lKTsKLQkJcmV0dXJuIHN0YXR1czsKLQlkZWZhdWx0OgotCQllcnIgKCJhY3BpX3BjaWVocHJtOiVzIF9DUlMgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JY3JzYnVmLnBvaW50ZXIgPSBrbWFsbG9jIChjcnNidWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNyc2J1Zi5wb2ludGVyKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jICVsZCBieXRlcyBmb3IgJXMgX0NSUyBmYWlsXG4iLCAodWxvbmcpY3JzYnVmLmxlbmd0aCwgcGF0aF9uYW1lKTsKLQkJcmV0dXJuIEFFX05PX01FTU9SWTsKLQl9Ci0KLQlzdGF0dXMgPSBhY3BpX2dldF9jdXJyZW50X3Jlc291cmNlcyAoaGFuZGxlLCAmY3JzYnVmKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiAlcyBfQ1JTIGZhaWw9MHgleC5cbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJa2ZyZWUoY3JzYnVmLnBvaW50ZXIpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCSpyZXRidWYgPSBjcnNidWYucG9pbnRlcjsKLQogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfcGNpX3Jlc291cmNlICggc3RydWN0IHBjaV9yZXNvdXJjZQkqYXByaCkKK3N0YXRpYyBpbnQgaXNfcm9vdF9icmlkZ2UoYWNwaV9oYW5kbGUgaGFuZGxlKQogewotCXN0cnVjdCBwY2lfcmVzb3VyY2UJKnJlcywgKm5leHQ7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2RldmljZV9pbmZvICppbmZvOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCWludCBpOwogCi0JZm9yIChyZXMgPSBhcHJoOyByZXM7IHJlcyA9IG5leHQpIHsKLQkJbmV4dCA9IHJlcy0+bmV4dDsKLQkJa2ZyZWUocmVzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3BjaV9yZXNvdXJjZSAoIHN0cnVjdCBwY2lfcmVzb3VyY2UJKmFwcmgpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZQkqcmVzOwotCi0JZm9yIChyZXMgPSBhcHJoOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJZGJnKCIgICAgICAgIGJhc2U9IDB4JXggbGVuZ3RoPSAweCV4XG4iLCByZXMtPmJhc2UsIHJlcy0+bGVuZ3RoKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfc2xvdF9yZXNvdXJjZXMoIHN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMpCi17Ci0JaWYgKGFwcy0+YnVzX2hlYWQpIHsKLQkJZGJnKCIgICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+YnVzX2hlYWQpOwotCX0KLQotCWlmIChhcHMtPmlvX2hlYWQpIHsKLQkJZGJnKCIgICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYXBzLT5pb19oZWFkKTsKLQl9Ci0KLQlpZiAoYXBzLT5tZW1faGVhZCkgewotCQlkYmcoIiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYXBzLT5tZW1faGVhZCk7Ci0JfQotCi0JaWYgKGFwcy0+cF9tZW1faGVhZCkgewotCQlkYmcoIiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+cF9tZW1faGVhZCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwcmludF9wY2lfcmVzb3VyY2VzKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWlmIChhYi0+dGJ1c19oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dGJ1c19oZWFkKTsKLQl9Ci0JaWYgKGFiLT5idXNfaGVhZCkgewotCQlkYmcoIiAgICBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPmJ1c19oZWFkKTsKLQl9Ci0KLQlpZiAoYWItPnRpb19oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFiLT50aW9faGVhZCk7Ci0JfQotCWlmIChhYi0+aW9faGVhZCkgewotCQlkYmcoIiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+aW9faGVhZCk7Ci0JfQotCi0JaWYgKGFiLT50bWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgVG90YWwgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFiLT50bWVtX2hlYWQpOwotCX0KLQlpZiAoYWItPm1lbV9oZWFkKSB7Ci0JCWRiZygiICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+bWVtX2hlYWQpOwotCX0KLQotCWlmIChhYi0+dHBfbWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgVG90YWwgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dHBfbWVtX2hlYWQpOwotCX0KLQlpZiAoYWItPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+cF9tZW1faGVhZCk7Ci0JfQotCWlmIChhYi0+X2hwcCkgewotCQlkYmcoIiAgICBfSFBQOiBjYWNoZV9saW5lX3NpemU9MHgleFxuIiwgYWItPl9ocHAtPmNhY2hlX2xpbmVfc2l6ZSk7Ci0JCWRiZygiICAgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBhYi0+X2hwcC0+bGF0ZW5jeV90aW1lcik7Ci0JCWRiZygiICAgIF9IUFA6IGVuYWJsZSBTRVJSICAgID0weCV4XG4iLCBhYi0+X2hwcC0+ZW5hYmxlX3NlcnIpOwotCQlkYmcoIiAgICBfSFBQOiBlbmFibGUgUEVSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9wZXJyKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1bG9uZyB0YmFzZTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGFwcmgpOwotCi0JZm9yIChyZXMgPSAqYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpIHsKLQkJaWYgKHJlcy0+YmFzZSA+IGJhc2UpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA8IChiYXNlICsgc2l6ZSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocmVzLT5iYXNlIDwgYmFzZSkgewotCQkJdGJhc2UgPSBiYXNlOwotCi0JCQlpZiAoKHJlcy0+bGVuZ3RoIC0gKHRiYXNlIC0gcmVzLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGJhc2UgLSByZXMtPmJhc2U7Ci0JCQlyZXMtPmJhc2UgPSB0YmFzZTsKLQkJCXJlcy0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAocmVzLT5sZW5ndGggPj0gc2l6ZSkgewotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlICsgc2l6ZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHJlcy0+bGVuZ3RoIC0gc2l6ZTsKLQkJCXJlcy0+bGVuZ3RoID0gc2l6ZTsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAoKmFwcmggPT0gcmVzKSB7Ci0JCQkqYXByaCA9IHJlcy0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXByZXZub2RlID0gKmFwcmg7Ci0JCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gcmVzKQotCQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJCXByZXZub2RlLT5uZXh0ID0gcmVzLT5uZXh0OwotCQl9Ci0JCXJlcy0+bmV4dCA9IE5VTEw7Ci0JCWtmcmVlKHJlcyk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGhpcwotCSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlwY2llaHBybV9kZWxldGVfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9hZGRfcmVzb3VyY2UoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0JdWxvbmcgYmFzZSwKLQl1bG9uZyBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnJlczsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmICgocmVzLT5iYXNlICsgcmVzLT5sZW5ndGgpID09IGJhc2UpIHsKLQkJCXJlcy0+bGVuZ3RoICs9IHNpemU7Ci0JCQlzaXplID0gMEw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocmVzLT5uZXh0ID09ICphcHJoKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHNpemUpIHsKLQkJcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIXJlcykgewotCQkJZXJyICgiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIHJlcyBmYWlsXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCW1lbXNldChyZXMsIDAsIHNpemVvZiAoc3RydWN0IHBjaV9yZXNvdXJjZSkpOwotCi0JCXJlcy0+YmFzZSA9IGJhc2U7Ci0JCXJlcy0+bGVuZ3RoID0gc2l6ZTsKLQkJcmVzLT5uZXh0ID0gKmFwcmg7Ci0JCSphcHJoID0gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2FkZF9yZXNvdXJjZXMoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGhpcwotCSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0JaW50CXJjID0gMDsKLQotCWZvciAocmVzID0gdGhpczsgcmVzICYmICFyYzsgcmVzID0gcmVzLT5uZXh0KQotCQlyYyA9IHBjaWVocHJtX2FkZF9yZXNvdXJjZShhcHJoLCByZXMtPmJhc2UsIHJlcy0+bGVuZ3RoKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9wYXJzZV9pbyAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCQkqYWIsCi0JdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhCSpkYXRhCi0JKQotewotCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvCSpkYXRhaW87Ci0JZGF0YWlvID0gKHN0cnVjdCBhY3BpX3Jlc291cmNlX2lvICopIGRhdGE7Ci0KLQlkYmcoIklvIFJlc291cmNlXG4iKTsKLQlkYmcoIiAgJWQgYml0IGRlY29kZVxuIiwgQUNQSV9ERUNPREVfMTYgPT0gZGF0YWlvLT5pb19kZWNvZGUgPyAxNjoxMCk7Ci0JZGJnKCIgIFJhbmdlIG1pbmltdW0gYmFzZTogJTA4WFxuIiwgZGF0YWlvLT5taW5fYmFzZV9hZGRyZXNzKTsKLQlkYmcoIiAgUmFuZ2UgbWF4aW11bSBiYXNlOiAlMDhYXG4iLCBkYXRhaW8tPm1heF9iYXNlX2FkZHJlc3MpOwotCWRiZygiICBBbGlnbm1lbnQ6ICUwOFhcbiIsIGRhdGFpby0+YWxpZ25tZW50KTsKLQlkYmcoIiAgUmFuZ2UgTGVuZ3RoOiAlMDhYXG4iLCBkYXRhaW8tPnJhbmdlX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfZml4ZWRfaW8gKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIsCi0JdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhCSpkYXRhCi0JKQotewotCXN0cnVjdCBhY3BpX3Jlc291cmNlX2ZpeGVkX2lvICAqZGF0YWZpbzsKLQlkYXRhZmlvID0gKHN0cnVjdCBhY3BpX3Jlc291cmNlX2ZpeGVkX2lvICopIGRhdGE7Ci0KLQlkYmcoIkZpeGVkIElvIFJlc291cmNlXG4iKTsKLQlkYmcoIiAgUmFuZ2UgYmFzZSBhZGRyZXNzOiAlMDhYIiwgZGF0YWZpby0+YmFzZV9hZGRyZXNzKTsKLQlkYmcoIiAgUmFuZ2UgbGVuZ3RoOiAlMDhYIiwgZGF0YWZpby0+cmFuZ2VfbGVuZ3RoKTsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9wYXJzZV9hZGRyZXNzMTZfMzIgKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIsCi0JdW5pb24gYWNwaV9yZXNvdXJjZV9kYXRhCSpkYXRhLAotCWFjcGlfcmVzb3VyY2VfdHlwZQlpZAotCSkKLXsKLQkvKiAKLQkgKiBhY3BpX3Jlc291cmNlX2FkZHJlc3MxNiA9PSBhY3BpX3Jlc291cmNlX2FkZHJlc3MzMgotCSAqIGFjcGlfcmVzb3VyY2VfYWRkcmVzczE2ICpkYXRhMTYgPSAoYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgKikgZGF0YTsKLQkgKi8KLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgKmRhdGEzMiA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgKikgZGF0YTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwgKip0cHJoOwotCi0JaWYgKGlkID09IEFDUElfUlNUWVBFX0FERFJFU1MxNikKLQkJZGJnKCJhY3BpX3BjaWVocHJtOjE2LUJpdCBBZGRyZXNzIFNwYWNlIFJlc291cmNlXG4iKTsKLQllbHNlCi0JCWRiZygiYWNwaV9wY2llaHBybTozMi1CaXQgQWRkcmVzcyBTcGFjZSBSZXNvdXJjZVxuIik7Ci0KLQlzd2l0Y2ggKGRhdGEzMi0+cmVzb3VyY2VfdHlwZSkgewotCWNhc2UgQUNQSV9NRU1PUllfUkFOR0U6IAotCQlkYmcoIiAgUmVzb3VyY2UgVHlwZTogTWVtb3J5IFJhbmdlXG4iKTsKLQkJYXByaCA9ICZhYi0+bWVtX2hlYWQ7Ci0JCXRwcmggPSAmYWItPnRtZW1faGVhZDsKLQotCQlzd2l0Y2ggKGRhdGEzMi0+YXR0cmlidXRlLm1lbW9yeS5jYWNoZV9hdHRyaWJ1dGUpIHsKLQkJY2FzZSBBQ1BJX05PTl9DQUNIRUFCTEVfTUVNT1JZOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IE5vbmNhY2hlYWJsZSBtZW1vcnlcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfQ0FDSEFCTEVfTUVNT1JZOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IENhY2hlYWJsZSBtZW1vcnlcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfV1JJVEVfQ09NQklOSU5HX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBXcml0ZS1jb21iaW5pbmcgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1BSRUZFVENIQUJMRV9NRU1PUlk6Ci0JCQlhcHJoID0gJmFiLT5wX21lbV9oZWFkOwotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IFByZWZldGNoYWJsZSBtZW1vcnlcbiIpOwotCQkJYnJlYWs7IAotCQlkZWZhdWx0OgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IEludmFsaWQgY2FjaGUgYXR0cmlidXRlXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IFJlYWQlc1xuIiwgQUNQSV9SRUFEX1dSSVRFX01FTU9SWSA9PSBkYXRhMzItPmF0dHJpYnV0ZS5tZW1vcnkucmVhZF93cml0ZV9hdHRyaWJ1dGUgPyAiL1dyaXRlIjoiIE9ubHkiKTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfSU9fUkFOR0U6IAotCQlkYmcoIiAgUmVzb3VyY2UgVHlwZTogSS9PIFJhbmdlXG4iKTsKLQkJYXByaCA9ICZhYi0+aW9faGVhZDsKLQkJdHByaCA9ICZhYi0+dGlvX2hlYWQ7Ci0KLQkJc3dpdGNoIChkYXRhMzItPmF0dHJpYnV0ZS5pby5yYW5nZV9hdHRyaWJ1dGUpIHsKLQkJY2FzZSBBQ1BJX05PTl9JU0FfT05MWV9SQU5HRVM6Ci0JCQlkYmcoIiAgVHlwZSBTcGVjaWZpYzogTm9uLUlTQSBJbyBBZGRyZXNzZXNcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfSVNBX09OTFlfUkFOR0VTOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IElTQSBJbyBBZGRyZXNzZXNcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfRU5USVJFX1JBTkdFOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IElTQSBhbmQgbm9uLUlTQSBJbyBBZGRyZXNzZXNcbiIpOwotCQkJYnJlYWs7IAotCQlkZWZhdWx0OgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IEludmFsaWQgcmFuZ2UgYXR0cmlidXRlXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0JVU19OVU1CRVJfUkFOR0U6IAotCQlkYmcoIiAgUmVzb3VyY2UgVHlwZTogQnVzIE51bWJlciBSYW5nZShmaXhlZClcbiIpOwotCQkvKiBmaXh1cCB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHJlc3Qgb2YgcGhwIGRyaXZlciAqLwotCQlkYXRhMzItPm1pbl9hZGRyZXNzX3JhbmdlKys7Ci0JCWRhdGEzMi0+YWRkcmVzc19sZW5ndGgtLTsKLQkJYXByaCA9ICZhYi0+YnVzX2hlYWQ7Ci0JCXRwcmggPSAmYWItPnRidXNfaGVhZDsKLQkJYnJlYWs7IAotCWRlZmF1bHQ6IAotCQlkYmcoIiAgUmVzb3VyY2UgVHlwZTogSW52YWxpZCByZXNvdXJjZSB0eXBlLiBFeGl0aW5nLlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYmcoIiAgUmVzb3VyY2UgJXNcbiIsIEFDUElfQ09OU1VNRVIgPT0gZGF0YTMyLT5wcm9kdWNlcl9jb25zdW1lciA/ICJDb25zdW1lciI6IlByb2R1Y2VyIik7Ci0JZGJnKCIgICVzIGRlY29kZVxuIiwgQUNQSV9TVUJfREVDT0RFID09IGRhdGEzMi0+ZGVjb2RlID8gIlN1YnRyYWN0aXZlIjoiUG9zaXRpdmUiKTsKLQlkYmcoIiAgTWluIGFkZHJlc3MgaXMgJXMgZml4ZWRcbiIsIEFDUElfQUREUkVTU19GSVhFRCA9PSBkYXRhMzItPm1pbl9hZGRyZXNzX2ZpeGVkID8gIiI6Im5vdCIpOwotCWRiZygiICBNYXggYWRkcmVzcyBpcyAlcyBmaXhlZFxuIiwgQUNQSV9BRERSRVNTX0ZJWEVEID09IGRhdGEzMi0+bWF4X2FkZHJlc3NfZml4ZWQgPyAiIjoibm90Iik7Ci0JZGJnKCIgIEdyYW51bGFyaXR5OiAlMDhYXG4iLCBkYXRhMzItPmdyYW51bGFyaXR5KTsKLQlkYmcoIiAgQWRkcmVzcyByYW5nZSBtaW46ICUwOFhcbiIsIGRhdGEzMi0+bWluX2FkZHJlc3NfcmFuZ2UpOwotCWRiZygiICBBZGRyZXNzIHJhbmdlIG1heDogJTA4WFxuIiwgZGF0YTMyLT5tYXhfYWRkcmVzc19yYW5nZSk7Ci0JZGJnKCIgIEFkZHJlc3MgdHJhbnNsYXRpb24gb2Zmc2V0OiAlMDhYXG4iLCBkYXRhMzItPmFkZHJlc3NfdHJhbnNsYXRpb25fb2Zmc2V0KTsKLQlkYmcoIiAgQWRkcmVzcyBMZW5ndGg6ICUwOFhcbiIsIGRhdGEzMi0+YWRkcmVzc19sZW5ndGgpOwotCi0JaWYgKDB4RkYgIT0gZGF0YTMyLT5yZXNvdXJjZV9zb3VyY2UuaW5kZXgpIHsKLQkJZGJnKCIgIFJlc291cmNlIFNvdXJjZSBJbmRleDogJVhcbiIsIGRhdGEzMi0+cmVzb3VyY2Vfc291cmNlLmluZGV4KTsKLQkJLyogZGJnKCIgIFJlc291cmNlIFNvdXJjZTogJXNcbiIsIGRhdGEzMi0+cmVzb3VyY2Vfc291cmNlLnN0cmluZ19wdHIpOyAqLwotCX0KLQotCXBjaWVocHJtX2FkZF9yZXNvdXJjZShhcHJoLCBkYXRhMzItPm1pbl9hZGRyZXNzX3JhbmdlLCBkYXRhMzItPmFkZHJlc3NfbGVuZ3RoKTsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIGFjcGlfcGFyc2VfY3JzKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIsCi0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKmNyc2J1ZgotCSkKLXsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzID0gQUVfT0s7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKnJlc291cmNlID0gY3JzYnVmOwotCXU4CQkJCWNvdW50ID0gMDsKLQl1OAkJCQlkb25lID0gMDsKLQotCXdoaWxlICghZG9uZSkgewotCQlkYmcoImFjcGlfcGNpZWhwcm06IFBDSSBidXMgMHgleCBSZXNvdXJjZSBzdHJ1Y3R1cmUgJXguXG4iLCBhYi0+YnVzLCBjb3VudCsrKTsKLQkJc3dpdGNoIChyZXNvdXJjZS0+aWQpIHsKLQkJY2FzZSBBQ1BJX1JTVFlQRV9JUlE6Ci0JCQlkYmcoIklycSAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfRE1BOgotCQkJZGJnKCJETUEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX1NUQVJUX0RQRjoKLQkJCWRiZygiU3RhcnQgRFBGIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9FTkRfRFBGOgotCQkJZGJnKCJFbmQgRFBGIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9JTzoKLQkJCWFjcGlfcGFyc2VfaW8gKGFiLCAmcmVzb3VyY2UtPmRhdGEpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0ZJWEVEX0lPOgotCQkJYWNwaV9wYXJzZV9maXhlZF9pbyAoYWIsICZyZXNvdXJjZS0+ZGF0YSk7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfVkVORE9SOgotCQkJZGJnKCJWZW5kb3IgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0VORF9UQUc6Ci0JCQlkYmcoIkVuZF90YWcgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJZG9uZSA9IDE7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfTUVNMjQ6Ci0JCQlkYmcoIk1lbTI0IC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9NRU0zMjoKLQkJCWRiZygiTWVtMzIgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0ZJWEVEX01FTTMyOgotCQkJZGJnKCJGaXhlZCBNZW0zMiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfQUREUkVTUzE2OgotCQkJYWNwaV9wYXJzZV9hZGRyZXNzMTZfMzIoYWIsICZyZXNvdXJjZS0+ZGF0YSwgQUNQSV9SU1RZUEVfQUREUkVTUzE2KTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9BRERSRVNTMzI6Ci0JCQlhY3BpX3BhcnNlX2FkZHJlc3MxNl8zMihhYiwgJnJlc291cmNlLT5kYXRhLCBBQ1BJX1JTVFlQRV9BRERSRVNTMzIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0FERFJFU1M2NDoKLQkJCWluZm8oIkFkZHJlc3M2NCAtLS0tLS0tLSBSZXNvdXJjZSB1bnBhcnNlZFxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfRVhUX0lSUToKLQkJCWRiZygiRXh0IElycSAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWRlZmF1bHQ6Ci0JCQlkYmcoIkludmFsaWQgLS0tLS0tLS0gcmVzb3VyY2UgdHlwZSAweCV4XG4iLCByZXNvdXJjZS0+aWQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlyZXNvdXJjZSA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqKSAoKGNoYXIgKilyZXNvdXJjZSArIHJlc291cmNlLT5sZW5ndGgpOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2dldF9jcnMoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZQkqY3JzYnVmOwotCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9jcnMoYWItPmhhbmRsZSwgJmNyc2J1Zik7CisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmYnVmZmVyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJc3RhdHVzID0gYWNwaV9wYXJzZV9jcnMoYWIsIGNyc2J1Zik7Ci0JCWtmcmVlKGNyc2J1Zik7Ci0KLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5idXNfaGVhZCk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+aW9faGVhZCk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+bWVtX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPnBfbWVtX2hlYWQpOwotCi0JCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGJ1c19oZWFkLCBhYi0+YnVzX2hlYWQpOwotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRpb19oZWFkLCBhYi0+aW9faGVhZCk7Ci0JCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dG1lbV9oZWFkLCBhYi0+bWVtX2hlYWQpOwotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRwX21lbV9oZWFkLCBhYi0+cF9tZW1faGVhZCk7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogZmluZCBhY3BpX2JyaWRnZSBkb3dud29yZCBmcm9tIGFiLiAgKi8KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9icmlkZ2UgKgotZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoCi0Jc3RydWN0IGFjcGlfYnJpZGdlICphYiwKLQlpbnQgc2VnLAotCWludCBidXMJCS8qIHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIgKi8KLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpsYWIgPSBOVUxMOwotCi0JaWYgKCFhYikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoKGFiLT5idXMgPT0gYnVzKSAmJiAoYWItPnNlZyA9PSBzZWcpKQotCQlyZXR1cm4gYWI7Ci0KLQlpZiAoYWItPmNoaWxkKQotCQlsYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhhYi0+Y2hpbGQsIHNlZywgYnVzKTsKLQotCWlmICghbGFiKQotCWlmIChhYi0+bmV4dCkKLQkJbGFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWItPm5leHQsIHNlZywgYnVzKTsKLQotCXJldHVybiBsYWI7Ci19Ci0KLS8qCi0gKiBCdWlsZCBhIGRldmljZSB0cmVlIG9mIEFDUEkgUENJIEJyaWRnZXMKLSAqLwotc3RhdGljIHZvaWQgcGNpZWhwcm1fYWNwaV9yZWdpc3Rlcl9hX2JyaWRnZSAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSoqaGVhZCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiwJLyogcGFyZW50IGJyaWRnZSB0byB3aGljaCBjaGlsZCBicmlkZ2UgaXMgYWRkZWQgKi8KLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmNhYgkvKiBjaGlsZCBicmlkZ2UgdG8gYWRkICovCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbHBhYjsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmxjYWI7Ci0KLQlscGFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoKmhlYWQsIHBhYi0+c2VnLCBwYWItPmJ1cyk7Ci0JaWYgKCFscGFiKSB7Ci0JCWlmICghKHBhYi0+dHlwZSAmIEJSSURHRV9UWVBFX0hPU1QpKQotCQkJd2FybigiUENJIHBhcmVudCBicmlkZ2UgczpiKCV4OiV4KSBub3QgaW4gbGlzdC5cbiIsIHBhYi0+c2VnLCBwYWItPmJ1cyk7Ci0JCXBhYi0+bmV4dCA9ICpoZWFkOwotCQkqaGVhZCA9IHBhYjsKLQkJbHBhYiA9IHBhYjsKLQl9Ci0KLQlpZiAoKGNhYi0+dHlwZSAmIEJSSURHRV9UWVBFX0hPU1QpICYmIChwYWIgPT0gY2FiKSkKLQkJcmV0dXJuOwotCi0JbGNhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKCpoZWFkLCBjYWItPnNlZywgY2FiLT5idXMpOwotCWlmIChsY2FiKSB7Ci0JCWlmICgocGFiLT5idXMgIT0gbGNhYi0+cGFyZW50LT5idXMpIHx8IChsY2FiLT5idXMgIT0gY2FiLT5idXMpKQotCQkJZXJyKCJQQ0kgY2hpbGQgYnJpZGdlIHM6YigleDoleCkgaW4gbGlzdCB3aXRoIGRpZmYgcGFyZW50LlxuIiwgY2FiLT5zZWcsIGNhYi0+YnVzKTsKLQkJcmV0dXJuOwotCX0gZWxzZQotCQlsY2FiID0gY2FiOwotCi0JbGNhYi0+cGFyZW50ID0gbHBhYjsKLQlsY2FiLT5uZXh0ID0gbHBhYi0+Y2hpbGQ7Ci0JbHBhYi0+Y2hpbGQgPSBsY2FiOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgcGNpZWhwcm1fYWNwaV9idWlsZF9waHBfc2xvdHNfY2FsbGJhY2soCi0JYWNwaV9oYW5kbGUJCWhhbmRsZSwKLQl1MzIJCQlMZXZlbCwKLQl2b2lkCQkJKmNvbnRleHQsCi0Jdm9pZAkJCSoqcmV0dmFsCi0JKQotewotCXVsb25nCQlidXNfbnVtOwotCXVsb25nCQlzZWdfbnVtOwotCXVsb25nCQlzdW4sIGFkcjsKLQl1bG9uZwkJcGFkciA9IDA7Ci0JYWNwaV9oYW5kbGUJCXBoYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqcGFiID0gKHN0cnVjdCBhY3BpX2JyaWRnZSAqKWNvbnRleHQ7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpsYWI7Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogZ2V0IF9TVU4gKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fU1VOLCBOVUxMLCAmc3VuKTsKLQlzd2l0Y2goc3RhdHVzKSB7Ci0JY2FzZSBBRV9OT1RfRk9VTkQ6Ci0JCXJldHVybiBBRV9PSzsKLQlkZWZhdWx0OgotCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWVycigiYWNwaV9wY2llaHBybTolcyBfU1VOIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKKwkJaW5mbyA9IGJ1ZmZlci5wb2ludGVyOworCQlpZiAoKGluZm8tPnZhbGlkICYgQUNQSV9WQUxJRF9ISUQpICYmCisJCQkhc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCisJCQkJCWluZm8tPmhhcmR3YXJlX2lkLnZhbHVlKSkgeworCQkJYWNwaV9vc19mcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwkJCXJldHVybiAxOworCQl9CisJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfQ0lEKSB7CisJCQlmb3IgKGk9MDsgaSA8IGluZm8tPmNvbXBhdGliaWxpdHlfaWQuY291bnQ7IGkrKykgeworCQkJCWlmICghc3RyY21wKFBDSV9ST09UX0hJRF9TVFJJTkcsCisJCQkJCWluZm8tPmNvbXBhdGliaWxpdHlfaWQuaWRbaV0udmFsdWUpKSB7CisJCQkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJCQkJCXJldHVybiAxOworCQkJCX0KKwkJCX0KIAkJfQogCX0KLQotCS8qIGdldCBfQURSLiBfQURSIG11c3QgZXhpc3QgaWYgX1NVTiBleGlzdHMgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIF9BRFIgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCi0JZGJnKCJhY3BpX3BjaWVocHJtOiVzIHN1bj0weCUwOHggYWRyPTB4JTA4eFxuIiwgcGF0aF9uYW1lLCAodTMyKXN1biwgKHUzMilhZHIpOwotCi0Jc3RhdHVzID0gYWNwaV9nZXRfcGFyZW50KGhhbmRsZSwgJnBoYW5kbGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoImFjcGlfcGNpZWhwcm06JXMgZ2V0X3BhcmVudCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJcmV0dXJuIChzdGF0dXMpOwotCX0KLQotCWJ1c19udW0gPSBwYWItPmJ1czsKLQlzZWdfbnVtID0gcGFiLT5zZWc7Ci0KLQlpZiAocGFiLT5idXMgPT0gYnVzX251bSkgewotCQlsYWIgPSBwYWI7Ci0JfSBlbHNlIHsKLQkJZGJnKCJXQVJOOiBwYWIgaXMgbm90IHBhcmVudFxuIik7Ci0JCWxhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKHBhYiwgc2VnX251bSwgYnVzX251bSk7Ci0JCWlmICghbGFiKSB7Ci0JCQlkYmcoImFjcGlfcGNpZWhwcm06IGFsbG9jIG5ldyBQMlAgYnJpZGdlKCV4KSBmb3Igc3VuKCUwOHgpXG4iLCAodTMyKWJ1c19udW0sICh1MzIpc3VuKTsKLQkJCWxhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghbGFiKSB7Ci0JCQkJZXJyKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBmb3IgYWIgZmFpbFxuIik7Ci0JCQkJcmV0dXJuIEFFX05PX01FTU9SWTsKLQkJCX0KLQkJCW1lbXNldChsYWIsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpKTsKLQotCQkJbGFiLT5oYW5kbGUgPSBwaGFuZGxlOwotCQkJbGFiLT5wYnVzID0gcGFiLT5idXM7Ci0JCQlsYWItPnBkZXZpY2UgPSAoaW50KShwYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQkJCWxhYi0+cGZ1bmN0aW9uID0gKGludCkocGFkciAmIDB4ZmZmZik7Ci0JCQlsYWItPmJ1cyA9IChpbnQpYnVzX251bTsKLQkJCWxhYi0+c2Nhbm5lZCA9IDA7Ci0JCQlsYWItPnR5cGUgPSBCUklER0VfVFlQRV9QMlA7Ci0KLQkJCXBjaWVocHJtX2FjcGlfcmVnaXN0ZXJfYV9icmlkZ2UgKCZhY3BpX2JyaWRnZXNfaGVhZCwgcGFiLCBsYWIpOwotCQl9IGVsc2UKLQkJCWRiZygiYWNwaV9wY2llaHBybTogZm91bmQgUDJQIGJyaWRnZSgleCkgZm9yIHN1biglMDh4KVxuIiwgKHUzMilidXNfbnVtLCAodTMyKXN1bik7Ci0JfQotCi0JYWNwaV9hZGRfc2xvdF90b19waHBfc2xvdHMobGFiLCAoaW50KWJ1c19udW0sIGhhbmRsZSwgKHUzMilhZHIsICh1MzIpc3VuKTsKLQotCXJldHVybiAoc3RhdHVzKTsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9hY3BpX2J1aWxkX3BocF9zbG90cygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXUzMgkJCWRlcHRoCi0JKQotewotCWFjcGlfc3RhdHVzCXN0YXR1czsKLQl1OAkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpOwotCi0JLyogV2FsayBkb3duIHRoaXMgcGNpIGJyaWRnZSB0byBnZXQgX1NVTnMgaWYgYW55IGJlaGluZCBQMlAgKi8KLQlzdGF0dXMgPSBhY3BpX3dhbGtfbmFtZXNwYWNlICggQUNQSV9UWVBFX0RFVklDRSwKLQkJCQlhYi0+aGFuZGxlLAotCQkJCWRlcHRoLAotCQkJCXBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzX2NhbGxiYWNrLAotCQkJCWFiLAotCQkJCU5VTEwgKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIHdhbGsgZm9yIF9TVU4gb24gcGNpIGJyaWRnZSBzZWc6YnVzKCV4OiV4KSBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgYWItPnNlZywgYWItPmJ1cywgc3RhdHVzKTsKLQkJcmV0dXJuIC0xOwotCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBidWlsZF9hX2JyaWRnZSgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiCi0JKQoraW50IHBjaWVocF9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JdTgJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKLQotCXBjaWVocHJtX2FjcGlfcmVnaXN0ZXJfYV9icmlkZ2UgKCZhY3BpX2JyaWRnZXNfaGVhZCwgcGFiLCBhYik7Ci0KLQlzd2l0Y2ggKGFiLT50eXBlKSB7Ci0JY2FzZSBCUklER0VfVFlQRV9IT1NUOgotCQlkYmcoImFjcGlfcGNpZWhwcm06IFJlZ2lzdGVyZWQgUENJIEhPU1QgQnJpZGdlKCUwMngpICAgIG9uIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeCkgWyVzXVxuIiwKLQkJCWFiLT5idXMsIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbiwgcGF0aF9uYW1lKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfVFlQRV9QMlA6Ci0JCWRiZygiYWNwaV9wY2llaHBybTogUmVnaXN0ZXJlZCBQQ0kgIFAyUCBCcmlkZ2UoJTAyeC0lMDJ4KSBvbiBzOmI6ZDpmKCUwMng6JTAyeDolMDJ4OiUwMngpIFslc11cbiIsCi0JCQlhYi0+cGJ1cywgYWItPmJ1cywgYWItPnNlZywgYWItPnBidXMsIGFiLT5wZGV2aWNlLCBhYi0+cGZ1bmN0aW9uLCBwYXRoX25hbWUpOwotCQlicmVhazsKLQl9OwotCi0JLyogYnVpbGQgYW55IGltbWVkaWF0ZSBQSFAgc2xvdHMgdW5kZXIgdGhpcyBwY2kgYnJpZGdlICovCi0JcGNpZWhwcm1fYWNwaV9idWlsZF9waHBfc2xvdHMoYWIsIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICogYWRkX3AycF9icmlkZ2UoCi0JYWNwaV9oYW5kbGUgaGFuZGxlLAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqcGFiLAkvKiBwYXJlbnQgKi8KLQl1bG9uZwlhZHIKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKLQl1bG9uZwkJZGV2bnVtLCBmdW5jbnVtOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0KLQlhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKikga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBhY3BpX2JyaWRnZSksIEdGUF9LRVJORUwpOwotCWlmICghYWIpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBmb3IgYWIgZmFpbFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQltZW1zZXQoYWIsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpKTsKLQotCWRldm51bSA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwotCWZ1bmNudW0gPSBhZHIgJiAweGZmZmY7Ci0KLQlwZGV2ID0gcGNpX2ZpbmRfc2xvdChwYWItPmJ1cywgUENJX0RFVkZOKGRldm51bSwgZnVuY251bSkpOwotCWlmICghcGRldiB8fCAhcGRldi0+c3Vib3JkaW5hdGUpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGlzIG5vdCBhIFAyUCBCcmlkZ2VcbiIsIHBhdGhfbmFtZSk7Ci0JCWtmcmVlKGFiKTsKLQkJcmV0dXJuIE5VTEw7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfaGFuZGxlIGNoYW5kbGUsIGhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgmKGRldi0+ZGV2KSk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXY7CisJdTggKnBhdGhfbmFtZTsKKwkvKgorCSAqIFBlciBQQ0kgZmlybXdhcmUgc3BlY2lmaWNhdGlvbiwgd2Ugc2hvdWxkIHJ1biB0aGUgQUNQSSBfT1NDCisJICogbWV0aG9kIHRvIGdldCBjb250cm9sIG9mIGhvdHBsdWcgaGFyZHdhcmUgYmVmb3JlIHVzaW5nIGl0LgorCSAqIElmIGFuIF9PU0MgaXMgbWlzc2luZywgd2UgbG9vayBmb3IgYW4gT1NIUCB0byBkbyB0aGUgc2FtZSB0aGluZy4KKwkgKiBUbyBoYW5kbGUgZGlmZmVyZW50IEJJT1MgYmVoYXZpb3IsIHdlIGxvb2sgZm9yIF9PU0MgYW5kIE9TSFAKKwkgKiB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBob3RwbHVnIGNvbnRyb2xsZXIgYW5kIGl0cyBwYXJlbnRzLCB1cHRvCisJICogdGhlIGhvc3QgYnJpZGdlIHVuZGVyIHdoaWNoIHRoaXMgY29udHJvbGxlciBleGlzdHMuCisJICovCisJd2hpbGUgKCFoYW5kbGUpIHsKKwkJLyoKKwkJICogVGhpcyBob3RwbHVnIGNvbnRyb2xsZXIgd2FzIG5vdCBsaXN0ZWQgaW4gdGhlIEFDUEkgbmFtZQorCQkgKiBzcGFjZSBhdCBhbGwuIFRyeSB0byBnZXQgYWNwaSBoYW5kbGUgb2YgcGFyZW50IHBjaSBidXMuCisJCSAqLworCQlpZiAoIXBkZXYgfHwgIXBkZXYtPmJ1cy0+cGFyZW50KQorCQkJYnJlYWs7CisJCWRiZygiQ291bGQgbm90IGZpbmQgJXMgaW4gYWNwaSBuYW1lc3BhY2UsIHRyeWluZyBwYXJlbnRcbiIsCisJCQkJcGNpX25hbWUocGRldikpOworCQlpZiAoIXBkZXYtPmJ1cy0+cGFyZW50LT5zZWxmKQorCQkJLyogUGFyZW50IG11c3QgYmUgYSBob3N0IGJyaWRnZSAqLworCQkJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAorCQkJCQlwY2lfZG9tYWluX25yKHBkZXYtPmJ1cy0+cGFyZW50KSwKKwkJCQkJcGRldi0+YnVzLT5wYXJlbnQtPm51bWJlcik7CisJCWVsc2UKKwkJCWhhbmRsZSA9IERFVklDRV9BQ1BJX0hBTkRMRSgKKwkJCQkJJihwZGV2LT5idXMtPnBhcmVudC0+c2VsZi0+ZGV2KSk7CisJCXBkZXYgPSBwZGV2LT5idXMtPnBhcmVudC0+c2VsZjsKIAl9CiAKLQlhYi0+aGFuZGxlID0gaGFuZGxlOwotCWFiLT5zZWcgPSBwYWItPnNlZzsKLQlhYi0+cGJ1cyA9IHBhYi0+YnVzOwkJLyogb3IgcGRldi0+YnVzLT5udW1iZXIgKi8KLQlhYi0+cGRldmljZSA9IGRldm51bTsJCS8qIG9yIFBDSV9TTE9UKHBkZXYtPmRldmZuKSAqLwotCWFiLT5wZnVuY3Rpb24gPSBmdW5jbnVtOwkvKiBvciBQQ0lfRlVOQyhwZGV2LT5kZXZmbikgKi8KLQlhYi0+YnVzID0gcGRldi0+c3Vib3JkaW5hdGUtPm51bWJlcjsKLQlhYi0+c2Nhbm5lZCA9IDA7Ci0JYWItPnR5cGUgPSBCUklER0VfVFlQRV9QMlA7Ci0KLQlkYmcoImFjcGlfcGNpZWhwcm06IFAyUCgleC0leCkgb24gcGNpPWI6ZDpmKCV4OiV4OiV4KSBhY3BpPWI6ZDpmKCV4OiV4OiV4KSBbJXNdXG4iLAotCQlwYWItPmJ1cywgYWItPmJ1cywgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLAotCQlwYWItPmJ1cywgKHUzMilkZXZudW0sICh1MzIpZnVuY251bSwgcGF0aF9uYW1lKTsKLQotCWJ1aWxkX2FfYnJpZGdlKHBhYiwgYWIpOwotCi0JcmV0dXJuIGFiOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgc2Nhbl9wMnBfYnJpZGdlKAotCWFjcGlfaGFuZGxlCQloYW5kbGUsCi0JdTMyCQkJTGV2ZWwsCi0Jdm9pZAkJCSpjb250ZXh0LAotCXZvaWQJCQkqKnJldHZhbAotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQl1bG9uZwkJCWFkciA9IDA7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQl1bG9uZwkJCWRldm51bSwgZnVuY251bTsKLQlzdHJ1Y3QgcGNpX2RldgkJKnBkZXY7Ci0KLQkvKiBnZXQgZGV2aWNlLCBmdW5jdGlvbiAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsIE1FVEhPRF9OQU1FX19BRFIsIE5VTEwsICZhZHIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlpZiAoc3RhdHVzICE9IEFFX05PVF9GT1VORCkKLQkJCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gQUVfT0s7Ci0JfQotCi0JZGV2bnVtID0gKGFkciA+PiAxNikgJiAweGZmZmY7Ci0JZnVuY251bSA9IGFkciAmIDB4ZmZmZjsKLQotCXBkZXYgPSBwY2lfZmluZF9zbG90KHBhYi0+YnVzLCBQQ0lfREVWRk4oZGV2bnVtLCBmdW5jbnVtKSk7Ci0JaWYgKCFwZGV2KQotCQlyZXR1cm4gQUVfT0s7Ci0JaWYgKCFwZGV2LT5zdWJvcmRpbmF0ZSkKLQkJcmV0dXJuIEFFX09LOwotCi0JYWIgPSBhZGRfcDJwX2JyaWRnZShoYW5kbGUsIHBhYiwgYWRyKTsKLQlpZiAoYWIpIHsKLQkJc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZSAoIEFDUElfVFlQRV9ERVZJQ0UsCi0JCQkJCWhhbmRsZSwKLQkJCQkJKHUzMikxLAotCQkJCQlzY2FuX3AycF9icmlkZ2UsCi0JCQkJCWFiLAotCQkJCQlOVUxMKTsKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIGZpbmRfcDJwIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCX0KLQotCXJldHVybiBBRV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX2JyaWRnZSAqIGFkZF9ob3N0X2JyaWRnZSgKLQlhY3BpX2hhbmRsZSBoYW5kbGUsCi0JdWxvbmcJc2VnbnVtLAotCXVsb25nCWJ1c251bQotCSkKLXsKLQl1bG9uZwkJCWFkciA9IDA7Ci0JYWNwaV9zdGF0dXMJCXN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0KLQkvKiBnZXQgZGV2aWNlLCBmdW5jdGlvbjogaG9zdCBiciBhZHIgaXMgYWx3YXlzIDAwMDAgdGhvdWdoLiAgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIF9BRFIgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlkYmcoImFjcGlfcGNpZWhwcm06IFJPT1QgUENJIHNlZygweCV4KWJ1cygweCV4KWRldigweCV4KWZ1bmMoMHgleCkgWyVzXVxuIiwgKHUzMilzZWdudW0sIAotCQkodTMyKWJ1c251bSwgKHUzMikoYWRyID4+IDE2KSAmIDB4ZmZmZiwgKHUzMilhZHIgJiAweGZmZmYsIHBhdGhfbmFtZSk7Ci0KLQlhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKikga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBhY3BpX2JyaWRnZSksIEdGUF9LRVJORUwpOwotCWlmICghYWIpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBmb3IgYWIgZmFpbFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQltZW1zZXQoYWIsIDAsIHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpKTsKLQotCWFiLT5oYW5kbGUgPSBoYW5kbGU7Ci0JYWItPnNlZyA9IChpbnQpc2VnbnVtOwotCWFiLT5idXMgPSBhYi0+cGJ1cyA9IChpbnQpYnVzbnVtOwotCWFiLT5wZGV2aWNlID0gKGludCkoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlhYi0+cGZ1bmN0aW9uID0gKGludCkoYWRyICYgMHhmZmZmKTsKLQlhYi0+c2Nhbm5lZCA9IDA7Ci0JYWItPnR5cGUgPSBCUklER0VfVFlQRV9IT1NUOwotCi0JLyogZ2V0IHJvb3QgcGNpIGJyaWRnZSdzIGN1cnJlbnQgcmVzb3VyY2VzICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfY3JzKGFiKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGV2YWx1YXRlIF9DUlMgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCWtmcmVlKGFiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldCAoT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MKTsgCi0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiJXM6IHN0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOwotCQlvc2NfcnVuX3N0YXR1cyA9IChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKSA/IE9TQ19OT1RfRVhJU1QgOiBPU0NfUlVOX0ZBSUxFRDsKLQl9IGVsc2UgewotCQlvc2NfcnVuX3N0YXR1cyA9IE5DX1JVTl9TVUNDRVNTOwotCX0JCi0JZGJnKCIlczogb3NjX3J1bl9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgb3NjX3J1bl9zdGF0dXMpOwotCQotCWJ1aWxkX2FfYnJpZGdlKGFiLCBhYik7Ci0KLQlyZXR1cm4gYWI7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3NjYW5fZnJvbV9yb290X3BjaV9jYWxsYmFjayAoCi0JYWNwaV9oYW5kbGUJaGFuZGxlLAotCXUzMgkJCUxldmVsLAotCXZvaWQJCSpjb250ZXh0LAotCXZvaWQJCSoqcmV0dmFsCi0JKQotewotCXVsb25nCQlzZWdudW0gPSAwOwotCXVsb25nCQlidXNudW0gPSAwOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogZ2V0IGJ1cyBudW1iZXIgb2YgdGhpcyBwY2kgcm9vdCBicmlkZ2UgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fU0VHLCBOVUxMLCAmc2VnbnVtKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpIHsKLQkJCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfU0VHIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKKwl3aGlsZSAoaGFuZGxlKSB7CisJCXBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7CisJCWRiZygiVHJ5aW5nIHRvIGdldCBob3RwbHVnIGNvbnRyb2wgZm9yICVzIFxuIiwgcGF0aF9uYW1lKTsKKwkJc3RhdHVzID0gcGNpX29zY19jb250cm9sX3NldChoYW5kbGUsCisJCQkJT1NDX1BDSV9FWFBSRVNTX05BVElWRV9IUF9DT05UUk9MKTsKKwkJaWYgKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpCisJCQlzdGF0dXMgPSBhY3BpX3J1bl9vc2hwKGhhbmRsZSk7CisJCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJZGJnKCJHYWluZWQgY29udHJvbCBmb3IgaG90cGx1ZyBIVyBmb3IgcGNpICVzICglcylcbiIsCisJCQkJcGNpX25hbWUoZGV2KSwgcGF0aF9uYW1lKTsKKwkJCXJldHVybiAwOwogCQl9Ci0JCXNlZ251bSA9IDA7Ci0JfQotCi0JLyogZ2V0IGJ1cyBudW1iZXIgb2YgdGhpcyBwY2kgcm9vdCBicmlkZ2UgKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQkJOLCBOVUxMLCAmYnVzbnVtKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGV2YWx1YXRlIF9CQk4gZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlhYiA9IGFkZF9ob3N0X2JyaWRnZShoYW5kbGUsIHNlZ251bSwgYnVzbnVtKTsKLQlpZiAoYWIpIHsKLQkJc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZSAoIEFDUElfVFlQRV9ERVZJQ0UsCi0JCQkJCWhhbmRsZSwKLQkJCQkJMSwKLQkJCQkJc2Nhbl9wMnBfYnJpZGdlLAotCQkJCQlhYiwKLQkJCQkJTlVMTCk7CisJCWlmIChpc19yb290X2JyaWRnZShoYW5kbGUpKQorCQkJYnJlYWs7CisJCWNoYW5kbGUgPSBoYW5kbGU7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChjaGFuZGxlLCAmaGFuZGxlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIGZpbmRfcDJwIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOworCQkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIEFFX09LOworCWVycigiQ2Fubm90IGdldCBjb250cm9sIG9mIGhvdHBsdWcgaGFyZHdhcmUgZm9yIHBjaSAlc1xuIiwKKwkJCXBjaV9uYW1lKGRldikpOworCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBwY2llaHBybV9hY3BpX3NjYW5fcGNpICh2b2lkKQordm9pZCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewotCWFjcGlfc3RhdHVzCXN0YXR1czsKKwlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9OT1RfRk9VTkQ7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXY7CiAKIAkvKgotCSAqIFRCRDogdHJhdmVyc2UgTERNIGRldmljZSB0cmVlIHdpdGggdGhlIGhlbHAgb2YKLQkgKiAgdW5pZmllZCBBQ1BJIGF1Z21lbnRlZCBmb3IgcGhwIGRldmljZSBwb3B1bGF0aW9uLgorCSAqIF9IUFAgc2V0dGluZ3MgYXBwbHkgdG8gYWxsIGNoaWxkIGJ1c2VzLCB1bnRpbCBhbm90aGVyIF9IUFAgaXMKKwkgKiBlbmNvdW50ZXJlZC4gSWYgd2UgZG9uJ3QgZmluZCBhbiBfSFBQIGZvciB0aGUgaW5wdXQgcGNpIGRldiwKKwkgKiBsb29rIGZvciBpdCBpbiB0aGUgcGFyZW50IGRldmljZSBzY29wZSBzaW5jZSB0aGF0IHdvdWxkIGFwcGx5IHRvCisJICogdGhpcyBwY2kgZGV2LiBJZiB3ZSBkb24ndCBmaW5kIGFueSBfSFBQLCB1c2UgaGFyZGNvZGVkIGRlZmF1bHRzCiAJICovCi0Jc3RhdHVzID0gYWNwaV9nZXRfZGV2aWNlcyAoIFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJYWNwaV9zY2FuX2Zyb21fcm9vdF9wY2lfY2FsbGJhY2ssCi0JCQkJTlVMTCwKLQkJCQlOVUxMICk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTpnZXRfZGV2aWNlIFBDSSBST09UIEhJRCBmYWlsPTB4JXhcbiIsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBjaWVocHJtX2luaXQoZW51bSBwaHBfY3Rscl90eXBlIGN0bHJfdHlwZSkKLXsKLQlpbnQJcmM7Ci0KLQlpZiAoY3Rscl90eXBlICE9IFBDSSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYmcoInBjaWVocHJtIEFDUEkgaW5pdCA8ZW50ZXI+XG4iKTsKLQlhY3BpX2JyaWRnZXNfaGVhZCA9IE5VTEw7Ci0KLQkvKiBjb25zdHJ1Y3QgUENJIGJ1czpkZXZpY2UgdHJlZSBvZiBhY3BpX2hhbmRsZXMgKi8KLQlyYyA9IHBjaWVocHJtX2FjcGlfc2Nhbl9wY2koKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWlmICgob3NocF9ydW5fc3RhdHVzICE9IE5DX1JVTl9TVUNDRVNTKSAmJiAob3NjX3J1bl9zdGF0dXMgIT0gTkNfUlVOX1NVQ0NFU1MpKSB7Ci0JCWVycigiRmFpbHMgdG8gZ2FpbiBjb250cm9sIG9mIG5hdGl2ZSBob3QtcGx1Z1xuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQl9Ci0KLQlkYmcoInBjaWVocHJtIEFDUEkgaW5pdCAlc1xuIiwgKHJjKT8iZmFpbCI6InN1Y2Nlc3MiKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyZWVfYV9zbG90KHN0cnVjdCBhY3BpX3BocF9zbG90ICphcHMpCi17Ci0JZGJnKCIgICAgICAgIGZyZWUgYSBwaHAgZnVuYyBvZiBzbG90KDB4JTAyeCkgb24gUENJIGI6ZDpmPTB4JTAyeDolMDJ4OiUwMnhcbiIsIGFwcy0+c3VuLCBhcHMtPmJ1cywgYXBzLT5kZXYsIGFwcy0+ZnVuKTsKLQotCWZyZWVfcGNpX3Jlc291cmNlIChhcHMtPmlvX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhcHMtPmJ1c19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5tZW1faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFwcy0+cF9tZW1faGVhZCk7Ci0KLQlrZnJlZShhcHMpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2FfYnJpZGdlKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMsICpuZXh0OwotCi0Jc3dpdGNoIChhYi0+dHlwZSkgewotCWNhc2UgQlJJREdFX1RZUEVfSE9TVDoKLQkJZGJnKCJGcmVlIEFDUEkgUENJIEhPU1QgQnJpZGdlKCV4KSBbJXNdIG9uIHM6YjpkOmYoJXg6JXg6JXg6JXgpXG4iLAotCQkJYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSksIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbik7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1RZUEVfUDJQOgotCQlkYmcoIkZyZWUgQUNQSSBQQ0kgUDJQIEJyaWRnZSgleC0leCkgWyVzXSBvbiBzOmI6ZDpmKCV4OiV4OiV4OiV4KVxuIiwKLQkJCWFiLT5wYnVzLCBhYi0+YnVzLCBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKSwgYWItPnNlZywgYWItPnBidXMsIGFiLT5wZGV2aWNlLCBhYi0+cGZ1bmN0aW9uKTsKLQkJYnJlYWs7Ci0JfTsKLQotCS8qIGZyZWUgc2xvdHMgZmlyc3QgKi8KLQlmb3IgKGFwcyA9IGFiLT5zbG90czsgYXBzOyBhcHMgPSBuZXh0KSB7Ci0JCW5leHQgPSBhcHMtPm5leHQ7Ci0JCWZyZWVfYV9zbG90KGFwcyk7Ci0JfQotCi0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT5pb19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPnRpb19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPmJ1c19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPnRidXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT5tZW1faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+cF9tZW1faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50cF9tZW1faGVhZCk7Ci0KLQlrZnJlZShhYik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2ZyZWVfYnJpZGdlcyAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCi17Ci0JaWYgKCFhYikKLQkJcmV0dXJuOwotCi0JaWYgKGFiLT5jaGlsZCkKLQkJcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhYi0+Y2hpbGQpOwotCi0JaWYgKGFiLT5uZXh0KQotCQlwY2llaHBybV9mcmVlX2JyaWRnZXMgKGFiLT5uZXh0KTsKLQotCWZyZWVfYV9icmlkZ2UoYWIpOwotfQotCi12b2lkIHBjaWVocHJtX2NsZWFudXAodm9pZCkKLXsKLQlwY2llaHBybV9mcmVlX2JyaWRnZXMgKGFjcGlfYnJpZGdlc19oZWFkKTsKLX0KLQotc3RhdGljIGludCBnZXRfbnVtYmVyX29mX3Nsb3RzICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCWludAkJCQlzZWxmb25seQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzOwotCWludAlwcmV2X3Nsb3QgPSAtMTsKLQlpbnQJc2xvdF9udW0gPSAwOwotCi0JZm9yICggYXBzID0gYWItPnNsb3RzOyBhcHM7IGFwcyA9IGFwcy0+bmV4dCkKLQkJaWYgKGFwcy0+ZGV2ICE9IHByZXZfc2xvdCkgewotCQkJcHJldl9zbG90ID0gYXBzLT5kZXY7Ci0JCQlzbG90X251bSsrOwotCQl9Ci0KLQlpZiAoYWItPmNoaWxkKQotCQlzbG90X251bSArPSBnZXRfbnVtYmVyX29mX3Nsb3RzIChhYi0+Y2hpbGQsIDApOwotCi0JaWYgKHNlbGZvbmx5KQotCQlyZXR1cm4gc2xvdF9udW07Ci0KLQlpZiAoYWItPm5leHQpCi0JCXNsb3RfbnVtICs9IGdldF9udW1iZXJfb2Zfc2xvdHMgKGFiLT5uZXh0LCAwKTsKLQotCXJldHVybiBzbG90X251bTsKLX0KLQotc3RhdGljIGludCBwcmludF9hY3BpX3Jlc291cmNlcyAoc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkJKmFwczsKLQlpbnQJaTsKLQotCXN3aXRjaCAoYWItPnR5cGUpIHsKLQljYXNlIEJSSURHRV9UWVBFX0hPU1Q6Ci0JCWRiZygiUENJIEhPU1QgQnJpZGdlICgleCkgWyVzXVxuIiwgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSkpOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9UWVBFX1AyUDoKLQkJZGJnKCJQQ0kgUDJQIEJyaWRnZSAoJXgtJXgpIFslc11cbiIsIGFiLT5wYnVzLCBhYi0+YnVzLCBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKSk7Ci0JCWJyZWFrOwotCX07Ci0KLQlwcmludF9wY2lfcmVzb3VyY2VzIChhYik7Ci0KLQlmb3IgKCBpID0gLTEsIGFwcyA9IGFiLT5zbG90czsgYXBzOyBhcHMgPSBhcHMtPm5leHQpIHsKLQkJaWYgKGFwcy0+ZGV2ID09IGkpCi0JCQljb250aW51ZTsKLQkJZGJnKCIgIFNsb3Qgc3VuKCV4KSBzOmI6ZDpmKCUwMng6JTAyeDolMDJ4OiUwMngpXG4iLCBhcHMtPnN1biwgYXBzLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCQlwcmludF9zbG90X3Jlc291cmNlcyhhcHMpOwotCQlpID0gYXBzLT5kZXY7Ci0JfQotCi0JaWYgKGFiLT5jaGlsZCkKLQkJcHJpbnRfYWNwaV9yZXNvdXJjZXMgKGFiLT5jaGlsZCk7Ci0KLQlpZiAoYWItPm5leHQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhYi0+bmV4dCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBjaWVocHJtX3ByaW50X3BpcnQodm9pZCkKLXsKLQlkYmcoIlBDSUVIUFJNIEFDUEkgU2xvdHNcbiIpOwotCWlmIChhY3BpX2JyaWRnZXNfaGVhZCkKLQkJcHJpbnRfYWNwaV9yZXNvdXJjZXMgKGFjcGlfYnJpZGdlc19oZWFkKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGFjcGlfcGhwX3Nsb3QgKiBnZXRfYWNwaV9zbG90ICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFiLAotCXUzMiBzdW4KLQkpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJKmFwcyA9IE5VTEw7Ci0KLQlmb3IgKCBhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gYXBzLT5uZXh0KQotCQlpZiAoYXBzLT5zdW4gPT0gc3VuKQotCQkJcmV0dXJuIGFwczsKLQotCWlmICghYXBzICYmIGFiLT5jaGlsZCkgewotCQlhcHMgPSAoc3RydWN0IGFjcGlfcGhwX3Nsb3QgKilnZXRfYWNwaV9zbG90IChhYi0+Y2hpbGQsIHN1bik7Ci0JCWlmIChhcHMpCi0JCQlyZXR1cm4gYXBzOwotCX0KLQotCWlmICghYXBzICYmIGFiLT5uZXh0KSB7Ci0JCWFwcyA9IChzdHJ1Y3QgYWNwaV9waHBfc2xvdCAqKWdldF9hY3BpX3Nsb3QgKGFiLT5uZXh0LCBzdW4pOwotCQlpZiAoYXBzKQotCQkJcmV0dXJuIGFwczsKLQl9Ci0KLQlyZXR1cm4gYXBzOwotCi19Ci0KLSNpZiAwCi12b2lkICogcGNpZWhwcm1fZ2V0X3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiA9IGFjcGlfYnJpZGdlc19oZWFkOwotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMgPSBnZXRfYWNwaV9zbG90IChhYiwgc2xvdC0+bnVtYmVyKTsKLQotCWFwcy0+c2xvdCA9IHNsb3Q7Ci0KLQlkYmcoIkdvdCBhY3BpIHNsb3Qgc3VuKCV4KTogczpiOmQ6ZigleDoleDoleDoleClcbiIsIGFwcy0+c3VuLCBhcHMtPnNlZywgYXBzLT5idXMsIGFwcy0+ZGV2LCBhcHMtPmZ1bik7Ci0KLQlyZXR1cm4gKHZvaWQgKilhcHM7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgcGNpZWhwcm1fZHVtcF9mdW5jX3Jlcyggc3RydWN0IHBjaV9mdW5jICpmdW4pCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jID0gZnVuOwotCi0JaWYgKGZ1bmMtPmJ1c19oZWFkKSB7Ci0JCWRiZygiOiAgICBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+YnVzX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+aW9faGVhZCkgewotCQlkYmcoIjogICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+aW9faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5tZW1faGVhZCkgewotCQlkYmcoIjogICAgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPm1lbV9oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+cF9tZW1faGVhZCk7CisJd2hpbGUgKHBkZXYgJiYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSkgeworCQlhY3BpX2hhbmRsZSBoYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJihwZGV2LT5kZXYpKTsKKwkJaWYgKCFoYW5kbGUpCisJCQlicmVhazsKKwkJc3RhdHVzID0gYWNwaV9ydW5faHBwKGhhbmRsZSwgaHBwKTsKKwkJaWYgKCEocGRldi0+YnVzLT5wYXJlbnQpKQorCQkJYnJlYWs7CisJCS8qIENoZWNrIGlmIGEgcGFyZW50IG9iamVjdCBzdXBwb3J0cyBfSFBQICovCisJCXBkZXYgPSBwZGV2LT5idXMtPnBhcmVudC0+c2VsZjsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBjaWVocHJtX2R1bXBfY3RybF9yZXMoIHN0cnVjdCBjb250cm9sbGVyICpjdGxyKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gY3RscjsKLQotCWlmIChjdHJsLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPmlvX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5tZW1faGVhZCk7Ci0JfQotCWlmIChjdHJsLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIGludCBwY2llaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYwotCSkKLXsKLQlyZXR1cm4gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMsICFESVNBQkxFX0NBUkQpOwotfQotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbigKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JaW50IHJjOwotCi0JLyogc2VlIGhvdyBtdWNoIHJlc291cmNlcyB0aGUgZnVuYyBoYXMgdXNlZC4gKi8KLQlyYyA9IHBjaWVocHJtX2dldF91c2VkX3Jlc291cmNlcyAoY3RybCwgZnVuYyk7Ci0KLQlpZiAoIXJjKSB7Ci0JCS8qIHN1YnRyYWN0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZnVuYyBmcm9tIGN0cmwgcmVzb3VyY2VzICovCi0JCXJjICA9IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5idXNfaGVhZCwgZnVuYy0+YnVzX2hlYWQpOwotCQlyYyB8PSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+aW9faGVhZCwgZnVuYy0+aW9faGVhZCk7Ci0JCXJjIHw9IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5tZW1faGVhZCwgZnVuYy0+bWVtX2hlYWQpOwotCQlyYyB8PSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+cF9tZW1faGVhZCwgZnVuYy0+cF9tZW1faGVhZCk7Ci0JCWlmIChyYykKLQkJCXdhcm4oImFDRUY6IGNhbm5vdCBkZWwgdXNlZCByZXNvdXJjZXNcbiIpOwotCX0gZWxzZQotCQllcnIoImFDRUY6IGNhbm5vdCBnZXQgdXNlZCByZXNvdXJjZXNcbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGJpbmRfcGNpX3Jlc291cmNlc190b19zbG90cyAoIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywgbmV3X2Z1bmM7Ci0JaW50IGJ1c24gPSBjdHJsLT5zbG90X2J1czsKLQlpbnQgZGV2biwgZnVubjsKLQl1MzIJdmlkOwotCi0JZm9yIChkZXZuID0gMDsgZGV2biA8IDMyOyBkZXZuKyspIHsKLQkJZm9yIChmdW5uID0gMDsgZnVubiA8IDg7IGZ1bm4rKykgewotCQkJLyoKLQkJCWlmIChkZXZuID09IGN0cmwtPmRldmljZSAmJiBmdW5uID09IGN0cmwtPmZ1bmN0aW9uKQotCQkJCWNvbnRpbnVlOwotCQkJKi8KLQkJCS8qIGZpbmQgb3V0IGlmIHRoaXMgZW50cnkgaXMgZm9yIGFuIG9jY3VwaWVkIHNsb3QgKi8KLQkJCXZpZCA9IDB4RkZGRkZGRkY7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZGV2biwgZnVubiksIFBDSV9WRU5ET1JfSUQsICZ2aWQpOwotCi0JCQlpZiAodmlkICE9IDB4RkZGRkZGRkYpIHsKLQkJCQlkYmcoIiVzOiB2aWQgPSAleFxuIiwgX19GVU5DVElPTl9fLCB2aWQpOwotCQkJCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGJ1c24sIGRldm4sIGZ1bm4pOwotCQkJCWlmICghZnVuYykgewotCQkJCQltZW1zZXQoJm5ld19mdW5jLCAwLCBzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSk7Ci0JCQkJCW5ld19mdW5jLmJ1cyA9IGJ1c247Ci0JCQkJCW5ld19mdW5jLmRldmljZSA9IGRldm47Ci0JCQkJCW5ld19mdW5jLmZ1bmN0aW9uID0gZnVubjsKLQkJCQkJbmV3X2Z1bmMuaXNfYV9ib2FyZCA9IDE7Ci0JCQkJCWNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbihjdHJsLCAmbmV3X2Z1bmMpOwotCQkJCQlwY2llaHBybV9kdW1wX2Z1bmNfcmVzKCZuZXdfZnVuYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY29uZmlndXJlX2V4aXN0aW5nX2Z1bmN0aW9uKGN0cmwsIGZ1bmMpOwotCQkJCQlwY2llaHBybV9kdW1wX2Z1bmNfcmVzKGZ1bmMpOwotCQkJCX0KLQkJCQlkYmcoImFDQ0Y6ZXhpc3RpbmcgUENJIDB4JXggRnVuYyBSZXNvdXJjZUR1bXBcbiIsIGN0cmwtPmJ1cyk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXMoCi0Jc3RydWN0IGNvbnRyb2xsZXIgCSpjdHJsLAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIKLQkpCi17Ci0JaW50CQlzdGF0dXMgPSAwOwotCi0JaWYgKGFiLT5idXNfaGVhZCkgewotCQlkYmcoImJhcHI6ICBCVVMgUmVzb3VyY2VzIGFkZCBvbiBQQ0kgMHgleFxuIiwgYWItPmJ1cyk7Ci0JCXN0YXR1cyA9IHBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZjdHJsLT5idXNfaGVhZCwgYWItPmJ1c19oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+YnVzX2hlYWQsIGN0cmwtPmJ1c19oZWFkKSkKLQkJCXdhcm4oImJhcHI6ICBjYW5ub3Qgc3ViIEJVUyBSZXNvdXJjZSBvbiBQQ0kgMHgleFxuIiwgYWItPmJ1cyk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWVycigiYmFwcjogIEJVUyBSZXNvdXJjZSBhZGQgb24gUENJIDB4JXg6IGZhaWw9MHgleFxuIiwgYWItPmJ1cywgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9IGVsc2UKLQkJaW5mbygiYmFwcjogIE5vIEJVUyBSZXNvdXJjZSBvbiBQQ0kgMHgleC5cbiIsIGFiLT5idXMpOwotCi0JaWYgKGFiLT5pb19oZWFkKSB7Ci0JCWRiZygiYmFwcjogIElPIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+aW9faGVhZCwgYWItPmlvX2hlYWQpOwotCQlpZiAocGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmFiLT5pb19oZWFkLCBjdHJsLT5pb19oZWFkKSkKLQkJCXdhcm4oImJhcHI6ICBjYW5ub3Qgc3ViIElPIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgSU8gUmVzb3VyY2UgYWRkIG9uIFBDSSAweCV4OiBmYWlsPTB4JXhcbiIsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfSBlbHNlCi0JCWluZm8oImJhcHI6ICBObyAgSU8gUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCWlmIChhYi0+bWVtX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgTUVNIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+bWVtX2hlYWQsIGFiLT5tZW1faGVhZCk7Ci0JCWlmIChwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmYWItPm1lbV9oZWFkLCBjdHJsLT5tZW1faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoImJhcHI6ICBNRU0gUmVzb3VyY2UgYWRkIG9uIFBDSSAweCV4OiBmYWlsPTB4JXhcbiIsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfSBlbHNlCi0JCWluZm8oImJhcHI6ICBObyBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCWlmIChhYi0+cF9tZW1faGVhZCkgewotCQlkYmcoImJhcHI6ICBQTUVNIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+cF9tZW1faGVhZCwgYWItPnBfbWVtX2hlYWQpOwotCQlpZiAocGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmFiLT5wX21lbV9oZWFkLCBjdHJsLT5wX21lbV9oZWFkKSkKLQkJCXdhcm4oImJhcHI6ICBjYW5ub3Qgc3ViIFBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoImJhcHI6ICBQTUVNIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gUE1FTSBSZXNvdXJjZSBvbiBQQ0kgMHgleC5cbiIsIGFiLT5idXMpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBub19wY2lfcmVzb3VyY2VzKCBzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFiKQotewotCXJldHVybiAhKGFiLT5wX21lbV9oZWFkIHx8IGFiLT5tZW1faGVhZCB8fCBhYi0+aW9faGVhZCB8fCBhYi0+YnVzX2hlYWQpOwotfQotCi1zdGF0aWMgaW50IGZpbmRfcGNpX2JyaWRnZV9yZXNvdXJjZXMgKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIKLQkpCi17Ci0JaW50CXJjID0gMDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgZnVuYzsKLQotCW1lbXNldCgmZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCi0JZnVuYy5idXMgPSBhYi0+cGJ1czsKLQlmdW5jLmRldmljZSA9IGFiLT5wZGV2aWNlOwotCWZ1bmMuZnVuY3Rpb24gPSBhYi0+cGZ1bmN0aW9uOwotCWZ1bmMuaXNfYV9ib2FyZCA9IDE7Ci0KLQkvKiBHZXQgdXNlZCByZXNvdXJjZXMgZm9yIHRoaXMgUENJIGJyaWRnZSAqLwotCXJjID0gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgKGN0cmwsICZmdW5jLCAhRElTQUJMRV9DQVJEKTsKLQotCWFiLT5pb19oZWFkID0gZnVuYy5pb19oZWFkOwotCWFiLT5tZW1faGVhZCA9IGZ1bmMubWVtX2hlYWQ7Ci0JYWItPnBfbWVtX2hlYWQgPSBmdW5jLnBfbWVtX2hlYWQ7Ci0JYWItPmJ1c19oZWFkID0gZnVuYy5idXNfaGVhZDsKLQlpZiAoYWItPmJ1c19oZWFkKQotCQlwY2llaHBybV9kZWxldGVfcmVzb3VyY2UoJmFiLT5idXNfaGVhZCwgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlciwgMSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3BjaV9yZXNvdXJjZXNfZnJvbV9icmlkZ2UoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IGFjcGlfYnJpZGdlICphYgotCSkKLXsKLQlpbnQJcmMgPSAwOwotCi0JZGJnKCJncmZiOiAgR2V0IFJlc291cmNlcyBmb3IgUENJIDB4JXggZnJvbSBhY3R1YWwgUENJIGJyaWRnZSAweCV4LlxuIiwgY3RybC0+YnVzLCBhYi0+YnVzKTsKLQotCXJjID0gZmluZF9wY2lfYnJpZGdlX3Jlc291cmNlcyAoY3RybCwgYWIpOwotCi0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5idXNfaGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5pb19oZWFkKTsKLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPm1lbV9oZWFkKTsKLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPnBfbWVtX2hlYWQpOwotCi0JcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50YnVzX2hlYWQsIGFiLT5idXNfaGVhZCk7Ci0JcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50aW9faGVhZCwgYWItPmlvX2hlYWQpOwotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dG1lbV9oZWFkLCBhYi0+bWVtX2hlYWQpOwotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dHBfbWVtX2hlYWQsIGFiLT5wX21lbV9oZWFkKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBnZXRfcGNpX3Jlc291cmNlcygKLQlzdHJ1Y3QgY29udHJvbGxlcgkqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiCi0JKQotewotCWludAlyYyA9IDA7Ci0KLQlpZiAobm9fcGNpX3Jlc291cmNlcyhhYikpIHsKLQkJZGJnKCJzcGJyOlBDSSAweCV4IGhhcyBubyByZXNvdXJjZXMuIEdldCBwYXJlbnQgcmVzb3VyY2VzLlxuIiwgYWItPmJ1cyk7Ci0JCXJjID0gZ2V0X3BjaV9yZXNvdXJjZXNfZnJvbV9icmlkZ2UoY3RybCwgYWIpOwotCX0KLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIEdldCByZXNvdXJjZXMgZm9yIHRoaXMgY3RybC4KLSAqICAxLiBnZXQgdG90YWwgcmVzb3VyY2VzIGZyb20gQUNQSSBfQ1JTIG9yIGJyaWRnZSAodGhpcyBjdHJsKQotICogIDIuIGZpbmQgdXNlZCByZXNvdXJjZXMgb2YgZXhpc3RpbmcgYWRhcHRlcnMKLSAqCTMuIHN1YnRyYWN0IHVzZWQgcmVzb3VyY2VzIGZyb20gdG90YWwgcmVzb3VyY2VzCi0gKi8KLWludCBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQotCWFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWNwaV9icmlkZ2VzX2hlYWQsIGN0cmwtPnNlZywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlcik7Ci0JaWYgKCFhYikgewotCQllcnIoInBmYXI6Y2Fubm90IGxvY2F0ZSBhY3BpIGJyaWRnZSBvZiBQQ0kgMHgleC5cbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWlmIChub19wY2lfcmVzb3VyY2VzKGFiKSkgewotCQlyYyA9IGdldF9wY2lfcmVzb3VyY2VzKGN0cmwsIGFiKTsKLQkJaWYgKHJjKSB7Ci0JCQllcnIoInBmYXI6Y2Fubm90IGdldCBwY2kgcmVzb3VyY2VzIG9mIFBDSSAweCV4LlxuIiwgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlcik7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlyYyA9IGJpbmRfcGNpX3Jlc291cmNlcyhjdHJsLCBhYik7Ci0JZGJnKCJwZmFyOnByZS1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlcik7Ci0JcGNpZWhwcm1fZHVtcF9jdHJsX3JlcyhjdHJsKTsKLQotCWJpbmRfcGNpX3Jlc291cmNlc190b19zbG90cyAoY3RybCk7Ci0KLQlkYmcoInBmYXI6cG9zdC1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUtPm51bWJlcik7Ci0JcGNpZWhwcm1fZHVtcF9jdHJsX3JlcyhjdHJsKTsKLQotCXJldHVybiByYzsKLX0KLQotaW50IHBjaWVocHJtX3NldF9ocHAoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4CWNhcmRfdHlwZQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlpbnQJCQkJcmMgPSAwOwotCXVuc2lnbmVkIGludAlkZXZmbjsKLQl1OAkJCQljbHM9IDB4MDg7CS8qIGRlZmF1bHQgY2FjaGUgbGluZSBzaXplCSovCi0JdTgJCQkJbHQgPSAweDQwOwkvKiBkZWZhdWx0IGxhdGVuY3kgdGltZXIJKi8KLQl1OAkJCQllcCA9IDA7Ci0JdTgJCQkJZXMgPSAwOwotCi0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2J1cywgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPmJ1cyk7Ci0KLQlpZiAoYWIpIHsKLQkJaWYgKGFiLT5faHBwKSB7Ci0JCQlsdCAgPSAodTgpYWItPl9ocHAtPmxhdGVuY3lfdGltZXI7Ci0JCQljbHMgPSAodTgpYWItPl9ocHAtPmNhY2hlX2xpbmVfc2l6ZTsKLQkJCWVwICA9ICh1OClhYi0+X2hwcC0+ZW5hYmxlX3BlcnI7Ci0JCQllcyAgPSAodTgpYWItPl9ocHAtPmVuYWJsZV9zZXJyOwotCQl9IGVsc2UKLQkJCWRiZygiX2hwcDogbm8gX2hwcCBmb3IgQi9EL0Y9JSN4LyUjeC8lI3guIHVzZSBkZWZhdWx0IHZhbHVlXG4iLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCX0gZWxzZQotCQlkYmcoIl9ocHA6IG5vIGFjcGkgYnJpZGdlIGZvciBCL0QvRiA9ICUjeC8lI3gvJSN4LiB1c2UgZGVmYXVsdCB2YWx1ZVxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCi0JaWYgKGNhcmRfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCS8qIHNldCBzdWJvcmRpbmF0ZSBMYXRlbmN5IFRpbWVyICovCi0JCXJjIHw9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNfTEFURU5DWV9USU1FUiwgbHQpOwotCX0KLQotCS8qIHNldCBiYXNlIExhdGVuY3kgVGltZXIgKi8KLQlyYyB8PSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfTEFURU5DWV9USU1FUiwgbHQpOwotCWRiZygiICBzZXQgbGF0ZW5jeSB0aW1lciAgPTB4JTAyeDogJXhcbiIsIGx0LCByYyk7Ci0KLQlyYyB8PSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCBjbHMpOwotCWRiZygiICBzZXQgY2FjaGVfbGluZV9zaXplPTB4JTAyeDogJXhcbiIsIGNscywgcmMpOwotCi0JcmV0dXJuIHJjOwotfQotCi12b2lkIHBjaWVocHJtX2VuYWJsZV9jYXJkKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBjYXJkX3R5cGUpCi17Ci0JdTE2IGNvbW1hbmQsIGNtZCwgYmNvbW1hbmQsIGJjbWQ7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCWludCByYzsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmY21kKTsKLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCAmYmNtZCk7Ci0JfQotCi0JY29tbWFuZCAgPSBjbWQgfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCi0JCXwgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0JYmNvbW1hbmQgID0gYmNtZCB8IFBDSV9CUklER0VfQ1RMX05PX0lTQTsKLQotCWFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWNwaV9icmlkZ2VzX2hlYWQsIGN0cmwtPnNlZywgY3RybC0+YnVzKTsKLQlpZiAoYWIpIHsKLQkJaWYgKGFiLT5faHBwKSB7Ci0JCQlpZiAoYWItPl9ocHAtPmVuYWJsZV9wZXJyKSB7Ci0JCQkJY29tbWFuZCB8PSBQQ0lfQ09NTUFORF9QQVJJVFk7Ci0JCQkJYmNvbW1hbmQgfD0gUENJX0JSSURHRV9DVExfUEFSSVRZOwotCQkJfSBlbHNlIHsKLQkJCQljb21tYW5kICY9IH5QQ0lfQ09NTUFORF9QQVJJVFk7Ci0JCQkJYmNvbW1hbmQgJj0gflBDSV9CUklER0VfQ1RMX1BBUklUWTsKLQkJCX0KLQkJCWlmIChhYi0+X2hwcC0+ZW5hYmxlX3NlcnIpIHsKLQkJCQljb21tYW5kIHw9IFBDSV9DT01NQU5EX1NFUlI7Ci0JCQkJYmNvbW1hbmQgfD0gUENJX0JSSURHRV9DVExfU0VSUjsKLQkJCX0gZWxzZSB7Ci0JCQkJY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfU0VSUjsKLQkJCQliY29tbWFuZCAmPSB+UENJX0JSSURHRV9DVExfU0VSUjsKLQkJCX0KLQkJfSBlbHNlCi0JCQlkYmcoIm5vIF9ocHAgZm9yIEIvRC9GID0gJSN4LyUjeC8lI3guXG4iLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCX0gZWxzZQotCQlkYmcoIm5vIGFjcGkgYnJpZGdlIGZvciBCL0QvRiA9ICUjeC8lI3gvJSN4LlxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCWlmIChjb21tYW5kICE9IGNtZCkgewotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQl9Ci0JaWYgKChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgJiYgKGJjb21tYW5kICE9IGJjbWQpKSB7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCBiY29tbWFuZCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuYwppbmRleCA3NmM3MjdjLi4yOTE4MGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuYwpAQCAtMjcsNDc5ICsyNywyMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2lmZGVmIENPTkZJR19JQTY0Ci0jaW5jbHVkZSA8YXNtL2lvc2FwaWMuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKLSNpbmNsdWRlICJwY2llaHBybV9ub25hY3BpLmgiCiAKLQotdm9pZCBwY2llaHBybV9jbGVhbnVwKHZvaWQpCit2b2lkIHBjaWVocF9nZXRfaHBfcGFyYW1zX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJc3RydWN0IGhvdHBsdWdfcGFyYW1zICpocHApCiB7CiAJcmV0dXJuOwogfQogCi1pbnQgcGNpZWhwcm1fcHJpbnRfcGlydCh2b2lkKQoraW50IHBjaWVocF9nZXRfaHBfaHdfY29udHJvbF9mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJcmV0dXJuIDA7CiB9Ci0KLWludCBwY2llaHBybV9nZXRfcGh5c2ljYWxfc2xvdF9udW1iZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHUzMiAqc3VuLCB1OCBidXNudW0sIHU4IGRldm51bSkKLXsKLQotCSpzdW4gPSAodTgpIChjdHJsLT5maXJzdF9zbG90KTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBwcmludF9wY2lfcmVzb3VyY2UgKCBzdHJ1Y3QgcGNpX3Jlc291cmNlCSphcHJoKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UJKnJlczsKLQotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpCi0JCWRiZygiICAgICAgICBiYXNlPSAweCV4IGxlbmd0aD0gMHgleFxuIiwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgcGhwcm1fZHVtcF9mdW5jX3Jlcyggc3RydWN0IHBjaV9mdW5jICpmdW4pCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jID0gZnVuOwotCi0JaWYgKGZ1bmMtPmJ1c19oZWFkKSB7Ci0JCWRiZygiOiAgICBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+YnVzX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+aW9faGVhZCkgewotCQlkYmcoIjogICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+aW9faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5tZW1faGVhZCkgewotCQlkYmcoIjogICAgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPm1lbV9oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoZnVuYy0+cF9tZW1faGVhZCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHBocHJtX2dldF91c2VkX3Jlc291cmNlcyAoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jCi0JKQotewotCXJldHVybiBwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcyAoY3RybCwgZnVuYywgIURJU0FCTEVfQ0FSRCk7Ci19Ci0KLXN0YXRpYyBpbnQgcGhwcm1fZGVsZXRlX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1bG9uZyB0YmFzZTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGFwcmgpOwotCi0JZm9yIChyZXMgPSAqYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpIHsKLQkJaWYgKHJlcy0+YmFzZSA+IGJhc2UpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA8IChiYXNlICsgc2l6ZSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocmVzLT5iYXNlIDwgYmFzZSkgewotCQkJdGJhc2UgPSBiYXNlOwotCi0JCQlpZiAoKHJlcy0+bGVuZ3RoIC0gKHRiYXNlIC0gcmVzLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGJhc2UgLSByZXMtPmJhc2U7Ci0JCQlyZXMtPmJhc2UgPSB0YmFzZTsKLQkJCXJlcy0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAocmVzLT5sZW5ndGggPj0gc2l6ZSkgewotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlICsgc2l6ZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHJlcy0+bGVuZ3RoIC0gc2l6ZTsKLQkJCXJlcy0+bGVuZ3RoID0gc2l6ZTsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAoKmFwcmggPT0gcmVzKSB7Ci0JCQkqYXByaCA9IHJlcy0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXByZXZub2RlID0gKmFwcmg7Ci0JCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gcmVzKQotCQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJCXByZXZub2RlLT5uZXh0ID0gcmVzLT5uZXh0OwotCQl9Ci0JCXJlcy0+bmV4dCA9IE5VTEw7Ci0JCWtmcmVlKHJlcyk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgcGhwcm1fZGVsZXRlX3Jlc291cmNlcygKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0aGlzCi0JKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnJlczsKLQotCWZvciAocmVzID0gdGhpczsgcmVzOyByZXMgPSByZXMtPm5leHQpCi0JCXBocHJtX2RlbGV0ZV9yZXNvdXJjZShhcHJoLCByZXMtPmJhc2UsIHJlcy0+bGVuZ3RoKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgY29uZmlndXJlX2V4aXN0aW5nX2Z1bmN0aW9uKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYwotCSkKLXsKLQlpbnQgcmM7Ci0KLQkvKiBzZWUgaG93IG11Y2ggcmVzb3VyY2VzIHRoZSBmdW5jIGhhcyB1c2VkLiAqLwotCXJjID0gcGhwcm1fZ2V0X3VzZWRfcmVzb3VyY2VzIChjdHJsLCBmdW5jKTsKLQotCWlmICghcmMpIHsKLQkJLyogc3VidHJhY3QgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZSBmdW5jIGZyb20gY3RybCByZXNvdXJjZXMgKi8KLQkJcmMgID0gcGhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPmJ1c19oZWFkLCBmdW5jLT5idXNfaGVhZCk7Ci0JCXJjIHw9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5pb19oZWFkLCBmdW5jLT5pb19oZWFkKTsKLQkJcmMgfD0gcGhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPm1lbV9oZWFkLCBmdW5jLT5tZW1faGVhZCk7Ci0JCXJjIHw9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5wX21lbV9oZWFkLCBmdW5jLT5wX21lbV9oZWFkKTsKLQkJaWYgKHJjKQotCQkJd2FybigiYUNFRjogY2Fubm90IGRlbCB1c2VkIHJlc291cmNlc1xuIik7Ci0JfSBlbHNlCi0JCWVycigiYUNFRjogY2Fubm90IGdldCB1c2VkIHJlc291cmNlc1xuIik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZTsKLQl1bG9uZyB0YmFzZTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGFwcmgpOwotCi0JZm9yIChyZXMgPSAqYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpIHsKLQkJaWYgKHJlcy0+YmFzZSA+IGJhc2UpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA8IChiYXNlICsgc2l6ZSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAocmVzLT5iYXNlIDwgYmFzZSkgewotCQkJdGJhc2UgPSBiYXNlOwotCi0JCQlpZiAoKHJlcy0+bGVuZ3RoIC0gKHRiYXNlIC0gcmVzLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UgKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gdGJhc2UgLSByZXMtPmJhc2U7Ci0JCQlyZXMtPmJhc2UgPSB0YmFzZTsKLQkJCXJlcy0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAocmVzLT5sZW5ndGggPj0gc2l6ZSkgewotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlKikga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gcmVzLT5iYXNlICsgc2l6ZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHJlcy0+bGVuZ3RoIC0gc2l6ZTsKLQkJCXJlcy0+bGVuZ3RoID0gc2l6ZTsKLQotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJCXJlcy0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQlpZiAoKmFwcmggPT0gcmVzKSB7Ci0JCQkqYXByaCA9IHJlcy0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXByZXZub2RlID0gKmFwcmg7Ci0JCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gcmVzKQotCQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJCXByZXZub2RlLT5uZXh0ID0gcmVzLT5uZXh0OwotCQl9Ci0JCXJlcy0+bmV4dCA9IE5VTEw7Ci0JCWtmcmVlKHJlcyk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJpbmRfcGNpX3Jlc291cmNlc190b19zbG90cyAoIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywgbmV3X2Z1bmM7Ci0JaW50IGJ1c24gPSBjdHJsLT5zbG90X2J1czsKLQlpbnQgZGV2biwgZnVubjsKLQl1MzIJdmlkOwotCi0JZm9yIChkZXZuID0gMDsgZGV2biA8IDMyOyBkZXZuKyspIHsKLQkJZm9yIChmdW5uID0gMDsgZnVubiA8IDg7IGZ1bm4rKykgewotCQkJLyoKLQkJCWlmIChkZXZuID09IGN0cmwtPmRldmljZSAmJiBmdW5uID09IGN0cmwtPmZ1bmN0aW9uKQotCQkJCWNvbnRpbnVlOwotCQkJKi8KLQkJCS8qIGZpbmQgb3V0IGlmIHRoaXMgZW50cnkgaXMgZm9yIGFuIG9jY3VwaWVkIHNsb3QgKi8KLQkJCXZpZCA9IDB4RkZGRkZGRkY7Ci0KLQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIFBDSV9ERVZGTihkZXZuLCBmdW5uKSwgUENJX1ZFTkRPUl9JRCwgJnZpZCk7Ci0KLQkJCWlmICh2aWQgIT0gMHhGRkZGRkZGRikgewotCQkJCWRiZygiJXM6IHZpZCA9ICV4IGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJdmlkLCBidXNuLCBkZXZuLCBmdW5uKTsKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChidXNuLCBkZXZuLCBmdW5uKTsKLQkJCQlkYmcoIiVzOiBmdW5jID0gJXBcbiIsIF9fRlVOQ1RJT05fXyxmdW5jKTsKLQkJCQlpZiAoIWZ1bmMpIHsKLQkJCQkJbWVtc2V0KCZuZXdfZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCQkJCQluZXdfZnVuYy5idXMgPSBidXNuOwotCQkJCQluZXdfZnVuYy5kZXZpY2UgPSBkZXZuOwotCQkJCQluZXdfZnVuYy5mdW5jdGlvbiA9IGZ1bm47Ci0JCQkJCW5ld19mdW5jLmlzX2FfYm9hcmQgPSAxOwotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgJm5ld19mdW5jKTsKLQkJCQkJcGhwcm1fZHVtcF9mdW5jX3JlcygmbmV3X2Z1bmMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbihjdHJsLCBmdW5jKTsKLQkJCQkJcGhwcm1fZHVtcF9mdW5jX3JlcyhmdW5jKTsKLQkJCQl9Ci0JCQkJZGJnKCJhQ0NGOmV4aXN0aW5nIFBDSSAweCV4IEZ1bmMgUmVzb3VyY2VEdW1wXG4iLCBjdHJsLT5idXMpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHBocHJtX2R1bXBfY3RybF9yZXMoIHN0cnVjdCBjb250cm9sbGVyICpjdGxyKQotewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gY3RscjsKLQotCWlmIChjdHJsLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPmlvX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5tZW1faGVhZCk7Ci0JfQotCWlmIChjdHJsLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGN0cmwtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotLyoKLSAqIHBocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcwotICoKLSAqICBGaW5kcyBhdmFpbGFibGUgbWVtb3J5LCBJTywgYW5kIElSUSByZXNvdXJjZXMgZm9yIHByb2dyYW1taW5nCi0gKiAgZGV2aWNlcyB3aGljaCBtYXkgYmUgYWRkZWQgdG8gdGhlIHN5c3RlbQotICogIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGhvdCBwbHVnIEFERCEKLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQotewotCXN0cnVjdCBwY2lfZnVuYyBmdW5jOwotCXUzMiByYzsKLQotCW1lbXNldCgmZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCi0JZnVuYy5idXMgPSBjdHJsLT5idXM7Ci0JZnVuYy5kZXZpY2UgPSBjdHJsLT5kZXZpY2U7Ci0JZnVuYy5mdW5jdGlvbiA9IGN0cmwtPmZ1bmN0aW9uOwotCWZ1bmMuaXNfYV9ib2FyZCA9IDE7Ci0KLQkvKiBHZXQgcmVzb3VyY2VzIGZvciB0aGlzIFBDSSBicmlkZ2UgKi8KLQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCAmZnVuYywgIURJU0FCTEVfQ0FSRCk7Ci0JZGJnKCIlczogcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgcmMgPSAlZFxuIiwgX19GVU5DVElPTl9fLCByYyk7Ci0KLQlpZiAoZnVuYy5tZW1faGVhZCkKLQkJZnVuYy5tZW1faGVhZC0+bmV4dCA9IGN0cmwtPm1lbV9oZWFkOwotCWN0cmwtPm1lbV9oZWFkID0gZnVuYy5tZW1faGVhZDsKLQotCWlmIChmdW5jLnBfbWVtX2hlYWQpCi0JCWZ1bmMucF9tZW1faGVhZC0+bmV4dCA9IGN0cmwtPnBfbWVtX2hlYWQ7Ci0JY3RybC0+cF9tZW1faGVhZCA9IGZ1bmMucF9tZW1faGVhZDsKLQotCWlmIChmdW5jLmlvX2hlYWQpCi0JCWZ1bmMuaW9faGVhZC0+bmV4dCA9IGN0cmwtPmlvX2hlYWQ7Ci0JY3RybC0+aW9faGVhZCA9IGZ1bmMuaW9faGVhZDsKLQotCWlmKGZ1bmMuYnVzX2hlYWQpCi0JCWZ1bmMuYnVzX2hlYWQtPm5leHQgPSBjdHJsLT5idXNfaGVhZDsKLQljdHJsLT5idXNfaGVhZCA9IGZ1bmMuYnVzX2hlYWQ7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpCi0JCXBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgmY3RybC0+YnVzX2hlYWQsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDEpOwotCQotCWRiZygiJXM6cHJlLUJpbmQgUENJIDB4JXggQ3RybCBSZXNvdXJjZSBEdW1wXG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPmJ1cyk7Ci0JcGhwcm1fZHVtcF9jdHJsX3JlcyhjdHJsKTsKLQotCWRiZygiJXM6IGJlZm9yZSBiaW5kX3BjaV9yZXNvdXJjZXNfdG8gc2xvdHNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQliaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKGN0cmwpOwotCi0JZGJnKCIlczpwb3N0LUJpbmQgUENJIDB4JXggQ3RybCBSZXNvdXJjZSBEdW1wXG4iLCBfX0ZVTkNUSU9OX18sIGN0cmwtPmJ1cyk7Ci0JcGhwcm1fZHVtcF9jdHJsX3JlcyhjdHJsKTsKLQotCXJldHVybiAocmMpOwotfQotCi1pbnQgcGNpZWhwcm1fc2V0X2hwcCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTgJY2FyZF90eXBlKQotewotCXUzMiByYzsKLQl1OCB0ZW1wX2J5dGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCXVuc2lnbmVkIGludAlkZXZmbjsKLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfYnVzLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQlkZXZmbiA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXRlbXBfYnl0ZSA9IDB4NDA7CS8qIGhhcmQgY29kZWQgdmFsdWUgZm9yIExUICovCi0JaWYgKGNhcmRfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0JCS8qIHNldCBzdWJvcmRpbmF0ZSBMYXRlbmN5IFRpbWVyICovCi0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX1NFQ19MQVRFTkNZX1RJTUVSLCB0ZW1wX2J5dGUpOwotCi0JCWlmIChyYykgewotCQkJZGJnKCIlczogc2V0IHNlY29uZGFyeSBMVCBlcnJvci4gYjpkOmYoJTAyeDolMDJ4OiUwMngpXG4iLCBfX0ZVTkNUSU9OX18sIAotCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9Ci0KLQkvKiBzZXQgYmFzZSBMYXRlbmN5IFRpbWVyICovCi0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfTEFURU5DWV9USU1FUiwgdGVtcF9ieXRlKTsKLQotCWlmIChyYykgewotCQlkYmcoIiVzOiBzZXQgTFQgZXJyb3IuIGI6ZDpmKCUwMng6JTAyeDolMDJ4KVxuIiwgX19GVU5DVElPTl9fLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JLyogc2V0IENhY2hlIExpbmUgc2l6ZSAqLwotCXRlbXBfYnl0ZSA9IDB4MDg7CS8qIGhhcmQgY29kZWQgdmFsdWUgZm9yIENMUyAqLwotCi0JcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCB0ZW1wX2J5dGUpOwotCi0JaWYgKHJjKSB7Ci0JCWRiZygiJXM6IHNldCBDTFMgZXJyb3IuIGI6ZDpmKCUwMng6JTAyeDolMDJ4KVxuIiwgX19GVU5DVElPTl9fLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCX0KLQotCS8qIHNldCBlbmFibGVfcGVyciAqLwotCS8qIHNldCBlbmFibGVfc2VyciAqLwotCi0JcmV0dXJuIHJjOwotfQotCi12b2lkIHBjaWVocHJtX2VuYWJsZV9jYXJkKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBjYXJkX3R5cGUpCi17Ci0JdTE2IGNvbW1hbmQsIGJjb21tYW5kOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQl1bnNpZ25lZCBpbnQgZGV2Zm47Ci0JaW50IHJjOwotCi0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2J1cywgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKLQotCWNvbW1hbmQgfD0gUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUgotCQl8IFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX0lOVkFMSURBVEUKLQkJfCBQQ0lfQ09NTUFORF9JTyB8IFBDSV9DT01NQU5EX01FTU9SWTsKLQotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0NPTU1BTkQsIGNvbW1hbmQpOwotCi0JaWYgKGNhcmRfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7Ci0KLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjb21tYW5kKTsKLQotCQliY29tbWFuZCB8PSBQQ0lfQlJJREdFX0NUTF9QQVJJVFkgfCBQQ0lfQlJJREdFX0NUTF9TRVJSCi0JCQl8IFBDSV9CUklER0VfQ1RMX05PX0lTQTsKLQotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgYmNvbW1hbmQpOwotCX0KLX0KLQotc3RhdGljIGludCBsZWdhY3lfcGNpZWhwcm1faW5pdF9wY2kodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHBjaWVocHJtX2luaXQoZW51bSBwaHBfY3Rscl90eXBlIGN0cmxfdHlwZSkKLXsKLQlpbnQgcmV0dmFsOwotCi0Jc3dpdGNoIChjdHJsX3R5cGUpIHsKLQljYXNlIFBDSToKLQkJcmV0dmFsID0gbGVnYWN5X3BjaWVocHJtX2luaXRfcGNpKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fbm9uYWNwaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTA2MDNiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fbm9uYWNwaS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIFBDSUVIUFJNIE5PTkFDUEk6IFBIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBOb24tQUNQSS9MZWdhY3kgcGxhdGZvcm0KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsMjAwMSBDb21wYXEgQ29tcHV0ZXIgQ29ycG9yYXRpb24KLSAqIENvcHlyaWdodCAoQykgMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiwgPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2lmbmRlZiBfUENJRUhQUk1fTk9OQUNQSV9IXwotI2RlZmluZSBfUENJRUhQUk1fTk9OQUNQSV9IXwotCi1zdHJ1Y3QgaXJxX2luZm8gewotCXU4IGJ1cywgZGV2Zm47CQkvKiBidXMsIGRldmljZSBhbmQgZnVuY3Rpb24gKi8KLQlzdHJ1Y3QgewotCQl1OCBsaW5rOwkvKiBJUlEgbGluZSBJRCwgY2hpcHNldCBkZXBlbmRlbnQsIDA9bm90IHJvdXRlZCAqLwotCQl1MTYgYml0bWFwOwkvKiBBdmFpbGFibGUgSVJRcyAqLwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGlycVs0XTsKLQl1OCBzbG90OwkJLyogc2xvdCBudW1iZXIsIDA9b25ib2FyZCAqLwotCXU4IHJmdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXJxX3JvdXRpbmdfdGFibGUgewotCXUzMiBzaWduYXR1cmU7CQkvKiBQSVJRX1NJR05BVFVSRSBzaG91bGQgYmUgaGVyZSAqLwotCXUxNiB2ZXJzaW9uOwkJLyogUElSUV9WRVJTSU9OICovCi0JdTE2IHNpemU7CQkJLyogVGFibGUgc2l6ZSBpbiBieXRlcyAqLwotCXU4IHJ0cl9idXMsIHJ0cl9kZXZmbjsJLyogV2hlcmUgdGhlIGludGVycnVwdCByb3V0ZXIgbGllcyAqLwotCXUxNiBleGNsdXNpdmVfaXJxczsJLyogSVJRcyBkZXZvdGVkIGV4Y2x1c2l2ZWx5IHRvIFBDSSB1c2FnZSAqLwotCXUxNiBydHJfdmVuZG9yLCBydHJfZGV2aWNlOwkvKiBWZW5kb3IgYW5kIGRldmljZSBJRCBvZiBpbnRlcnJ1cHQgcm91dGVyICovCi0JdTMyIG1pbmlwb3J0X2RhdGE7CS8qIENyYXAgKi8KLQl1OCByZnVbMTFdOwotCXU4IGNoZWNrc3VtOwkJLyogTW9kdWxvIDI1NiBjaGVja3N1bSBtdXN0IGdpdmUgemVybyAqLwotCXN0cnVjdCBpcnFfaW5mbyBzbG90c1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZW5kaWYJCQkJLyogX1BDSUVIUFJNX05PTkFDUElfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9jb3JlLmMKaW5kZXggZmNiNjZiOS4uY2MwMzYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFkbHBhcl9jb3JlLmMKQEAgLTEzNCw0MyArMTM0LDYgQEAKIAkJcnBhZGxwYXJfY2xhaW1fb25lX2J1cyhjaGlsZF9idXMpOwogfQogCi1zdGF0aWMgaW50IHBjaV9hZGRfc2Vjb25kYXJ5X2J1cyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAotCQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldikKLXsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBkbi0+ZGF0YTsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwZG4tPnBoYjsKLQlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7Ci0JdTggc2VjX2J1c25vOwotCi0JLyogR2V0IGJ1c25vIG9mIGRvd25zdHJlYW0gYnVzICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYnJpZGdlX2RldiwgUENJX1NFQ09OREFSWV9CVVMsICZzZWNfYnVzbm8pOwotCi0JLyogQWxsb2NhdGUgYW5kIGFkZCB0byBjaGlsZHJlbiBvZiBicmlkZ2VfZGV2LT5idXMgKi8KLQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhicmlkZ2VfZGV2LT5idXMsIGJyaWRnZV9kZXYsIHNlY19idXNubyk7Ci0JaWYgKCFjaGlsZCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWRkIHNlY29uZGFyeSBidXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXNwcmludGYoY2hpbGQtPm5hbWUsICJQQ0kgQnVzICMlMDJ4IiwgY2hpbGQtPm51bWJlcik7Ci0KLQkvKiBGaXh1cCBzdWJvcmRpbmF0ZSBicmlkZ2UgYmFzZXMgYW5kIHJlc291cmNlcyAqLwotCXBjaWJpb3NfZml4dXBfYnVzKGNoaWxkKTsKLQotCS8qIENsYWltIG5ldyBidXMgcmVzb3VyY2VzICovCi0JcnBhZGxwYXJfY2xhaW1fb25lX2J1cyhicmlkZ2VfZGV2LT5idXMpOwotCi0JaWYgKGhvc2UtPmxhc3RfYnVzbm8gPCBjaGlsZC0+bnVtYmVyKQotCQlob3NlLT5sYXN0X2J1c25vID0gY2hpbGQtPm51bWJlcjsKLQotCXBkbi0+YnVzc3Vibm8gPSBjaGlsZC0+bnVtYmVyOwotCi0JLyogaW9yZW1hcCgpIGZvciBjaGlsZCBidXMsIHdoaWNoIG1heSBvciBtYXkgbm90IHN1Y2NlZWQgKi8KLQlyZW1hcF9idXNfcmFuZ2UoY2hpbGQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGxwYXJfZmluZF9uZXdfZGV2KHN0cnVjdCBwY2lfYnVzICpwYXJlbnQsCiAJCQkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2X2RuKQogewpAQCAtMTg4LDI5ICsxNTEsNDEgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqZGxwYXJfcGNpX2FkZF9idXMoc3RydWN0IGRldmljZV9ub2RlICpkbikKIHsKIAlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBkbi0+ZGF0YTsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwZG4tPnBoYjsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYiA9IHBkbi0+cGhiOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0JLyogU2NhbiBwaGIgYnVzIGZvciBFQURTIGRldmljZSwgYWRkaW5nIG5ldyBvbmUgdG8gYnVzLT5kZXZpY2VzICovCi0JaWYgKCFwY2lfc2Nhbl9zaW5nbGVfZGV2aWNlKGhvc2UtPmJ1cywgcGRuLT5kZXZmbikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZm91bmQgbm8gZGV2aWNlIG9uIGJ1c1xuIiwgX19GVU5DVElPTl9fKTsKKwlycGFwaHBfZWVoX2luaXRfbm9kZXMoZG4pOworCS8qIEFkZCBFQURTIGRldmljZSB0byBQSEIgYnVzLCBhZGRpbmcgbmV3IGVudHJ5IHRvIGJ1cy0+ZGV2aWNlcyAqLworCWRldiA9IG9mX2NyZWF0ZV9wY2lfZGV2KGRuLCBwaGItPmJ1cywgcGRuLT5kZXZmbik7CisJaWYgKCFkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwY2kgZGV2IGZvciAlc1xuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGRuLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8CisJICAgIGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpCisJCW9mX3NjYW5fcGNpX2JyaWRnZShkbiwgZGV2KTsKKworCXJwYXBocF9pbml0X25ld19kZXZzKGRldi0+c3Vib3JkaW5hdGUpOworCisJLyogQ2xhaW0gbmV3IGJ1cyByZXNvdXJjZXMgKi8KKwlycGFkbHBhcl9jbGFpbV9vbmVfYnVzKGRldi0+YnVzKTsKKworCS8qIGlvcmVtYXAoKSBmb3IgY2hpbGQgYnVzLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkICovCisJKHZvaWQpIHJlbWFwX2J1c19yYW5nZShkZXYtPmJ1cyk7CisKIAkvKiBBZGQgbmV3IGRldmljZXMgdG8gZ2xvYmFsIGxpc3RzLiAgUmVnaXN0ZXIgaW4gcHJvYywgc3lzZnMuICovCi0JcGNpX2J1c19hZGRfZGV2aWNlcyhob3NlLT5idXMpOworCXBjaV9idXNfYWRkX2RldmljZXMocGhiLT5idXMpOwogCiAJLyogQ29uZmlybSBuZXcgYnJpZGdlIGRldiB3YXMgY3JlYXRlZCAqLwotCWRldiA9IGRscGFyX2ZpbmRfbmV3X2Rldihob3NlLT5idXMsIGRuKTsKKwlkZXYgPSBkbHBhcl9maW5kX25ld19kZXYocGhiLT5idXMsIGRuKTsKIAlpZiAoZGV2KSB7CiAJCWlmIChkZXYtPmhkcl90eXBlICE9IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuZXhwZWN0ZWQgaGVhZGVyIHR5cGUgJWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBkZXYtPmhkcl90eXBlKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci0KLQkJaWYgKHBjaV9hZGRfc2Vjb25kYXJ5X2J1cyhkbiwgZGV2KSkKLQkJCXJldHVybiBOVUxMOwogCX0KIAogCXJldHVybiBkZXY7CkBAIC0yMTksNyArMTk0LDYgQEAKIHN0YXRpYyBpbnQgZGxwYXJfYWRkX3BjaV9zbG90KGNoYXIgKmRyY19uYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7Ci0JaW50IHJjOwogCiAJaWYgKHJwYXBocF9maW5kX3BjaV9idXMoZG4pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzMiwxNSArMjA2LDYgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKGRuLT5jaGlsZCkgewotCQlyYyA9IHJwYXBocF9jb25maWdfcGNpX2FkYXB0ZXIoZGV2LT5zdWJvcmRpbmF0ZSk7Ci0JCWlmIChyYyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBlbmFibGUgc2xvdCAlc1xuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGRyY19uYW1lKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCiAJLyogQWRkIGhvdHBsdWcgc2xvdCAqLwogCWlmIChycGFwaHBfYWRkX3Nsb3QoZG4pKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byBhZGQgaG90cGx1ZyBzbG90ICVzXG4iLApAQCAtMzA2LDcgKzI3MSw3IEBACiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CiAKLQlpZiAoUENJX0ROKGRuKS0+cGhiKSB7CisJaWYgKFBDSV9ETihkbikgJiYgUENJX0ROKGRuKS0+cGhiKSB7CiAJCS8qIFBIQiBhbHJlYWR5IGV4aXN0cyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00MzUsNiArNDAwLDggQEAKIAkJCQlfX0ZVTkNUSU9OX18sIGRyY19uYW1lKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJfSBlbHNlIHsKKwkJcnBhcGhwX3VuY29uZmlnX3BjaV9hZGFwdGVyKGJ1cyk7CiAJfQogCiAJaWYgKHVubWFwX2J1c19yYW5nZShidXMpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAppbmRleCA3MWVhNWY5Li41N2VhNzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKQEAgLTkzLDYgKzkzLDggQEAKIGV4dGVybiBpbnQgcnBhcGhwX2VuYWJsZV9wY2lfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IHJlZ2lzdGVyX3BjaV9zbG90KHN0cnVjdCBzbG90ICpzbG90KTsKIGV4dGVybiBpbnQgcnBhcGhwX2dldF9wY2lfYWRhcHRlcl9zdGF0dXMoc3RydWN0IHNsb3QgKnNsb3QsIGludCBpc19pbml0LCB1OCAqIHZhbHVlKTsKK2V4dGVybiB2b2lkIHJwYXBocF9pbml0X25ld19kZXZzKHN0cnVjdCBwY2lfYnVzICpidXMpOworZXh0ZXJuIHZvaWQgcnBhcGhwX2VlaF9pbml0X25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pOwogCiBleHRlcm4gaW50IHJwYXBocF9jb25maWdfcGNpX2FkYXB0ZXIoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiBleHRlcm4gaW50IHJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcihzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKaW5kZXggZjdjMTJkNy4uYTc4NTlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfcGNpLmMKQEAgLTE1NCw4ICsxNTQsNyBAQAogfQogCiAvKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgcGNpX2J1c19hZGRfZGV2aWNlcyAqLwotc3RhdGljIHZvaWQgCi1ycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBmaXhfYnVzKQordm9pZCBycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBmaXhfYnVzKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAKQEAgLTE4NCw2ICsxODMsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWVlaF9hZGRfZGV2aWNlX2xhdGUoZGV2KTsKKwkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJc3RydWN0IHBjaV9idXMgKnN1YmJ1cyA9IGRldi0+c3Vib3JkaW5hdGU7CisJCQlpZiAoc3ViYnVzKQorCQkJCXJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2UgKHN1YmJ1cyk7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBpbnQgcnBhcGhwX3BjaV9jb25maWdfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdTggc2VjX2J1c25vOwpAQCAtMjE3LDYgKzIzMCwxMyBAQAogCXJldHVybiAwOwogfQogCit2b2lkIHJwYXBocF9pbml0X25ld19kZXZzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhidXMsIDApOworCXJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2UoYnVzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJwYXBocF9pbml0X25ld19kZXZzKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgcnBhcGhwX3BjaV9jb25maWdfc2xvdCgpIHdpbGwgIGNvbmZpZ3VyZSBhbGwgZGV2aWNlcyB1bmRlciB0aGUKICBnaXZlbiBzbG90LT5kbiBhbmQgcmV0dXJuIHRoZSB0aGUgZmlyc3QgcGNpX2Rldi4KQEAgLTIzMywzNiArMjUzLDUxIEBACiAJaWYgKCFkbiB8fCAhZG4tPmNoaWxkKQogCQlyZXR1cm4gTlVMTDsKIAotCXNsb3RubyA9IFBDSV9TTE9UKFBDSV9ETihkbi0+Y2hpbGQpLT5kZXZmbik7CisJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fUFNFUklFU19MUEFSKSB7CisJCW9mX3NjYW5fYnVzKGRuLCBidXMpOworCQlpZiAobGlzdF9lbXB0eSgmYnVzLT5kZXZpY2VzKSkgeworCQkJZXJyKCIlczogTm8gbmV3IGRldmljZSBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBOVUxMOworCQl9CiAKLQkvKiBwY2lfc2Nhbl9zbG90IHNob3VsZCBmaW5kIGFsbCBjaGlsZHJlbiAqLwotCW51bSA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oc2xvdG5vLCAwKSk7Ci0JaWYgKG51bSkgewotCQlycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMSk7CisJCXJwYXBocF9pbml0X25ld19kZXZzKGJ1cyk7CiAJCXBjaV9idXNfYWRkX2RldmljZXMoYnVzKTsKLQl9Ci0JaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKLQkJZXJyKCIlczogTm8gbmV3IGRldmljZSBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewotCQlpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKQotCQkJcnBhcGhwX3BjaV9jb25maWdfYnJpZGdlKGRldik7CisJCWRldiA9IGxpc3RfZW50cnkoJmJ1cy0+ZGV2aWNlcywgc3RydWN0IHBjaV9kZXYsIGJ1c19saXN0KTsKKwl9IGVsc2UgeworCQlzbG90bm8gPSBQQ0lfU0xPVChQQ0lfRE4oZG4tPmNoaWxkKS0+ZGV2Zm4pOworCisJCS8qIHBjaV9zY2FuX3Nsb3Qgc2hvdWxkIGZpbmQgYWxsIGNoaWxkcmVuICovCisJCW51bSA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oc2xvdG5vLCAwKSk7CisJCWlmIChudW0pIHsKKwkJCXJwYXBocF9maXh1cF9uZXdfcGNpX2RldmljZXMoYnVzLCAxKTsKKwkJCXBjaV9idXNfYWRkX2RldmljZXMoYnVzKTsKKwkJfQorCQlpZiAobGlzdF9lbXB0eSgmYnVzLT5kZXZpY2VzKSkgeworCQkJZXJyKCIlczogTm8gbmV3IGRldmljZSBmb3VuZFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJCQlycGFwaHBfcGNpX2NvbmZpZ19icmlkZ2UoZGV2KTsKKworCQkJcnBhcGhwX2VlaF9hZGRfYnVzX2RldmljZShidXMpOworCQl9CiAJfQogCiAJcmV0dXJuIGRldjsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX2VlaChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQordm9pZCBycGFwaHBfZWVoX2luaXRfbm9kZXMoc3RydWN0IGRldmljZV9ub2RlICpkbikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNpYjsKIAogCWZvciAoc2liID0gZG4tPmNoaWxkOyBzaWI7IHNpYiA9IHNpYi0+c2libGluZykgCi0JCWVuYWJsZV9lZWgoc2liKTsKKwkJcnBhcGhwX2VlaF9pbml0X25vZGVzKHNpYik7CiAJZWVoX2FkZF9kZXZpY2VfZWFybHkoZG4pOwogCXJldHVybjsKIAkKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJwYXBocF9lZWhfaW5pdF9ub2Rlcyk7CiAKIHN0YXRpYyB2b2lkIHByaW50X3Nsb3RfcGNpX2Z1bmNzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CkBAIC0yODksNyArMzI0LDcgQEAKIAlpZiAoIWRuKQogCQlnb3RvIGV4aXQ7CiAKLQllbmFibGVfZWVoKGRuKTsKKwlycGFwaHBfZWVoX2luaXRfbm9kZXMoZG4pOwogCWRldiA9IHJwYXBocF9wY2lfY29uZmlnX3Nsb3QoYnVzKTsKIAlpZiAoIWRldikgewogCQllcnIoIiVzOiBjYW4ndCBmaW5kIGFueSBkZXZpY2VzLlxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTMzMSw2ICszNjYsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcik7CiAKIHN0YXRpYyBpbnQgc2V0dXBfcGNpX2hvdHBsdWdfc2xvdF9pbmZvKHN0cnVjdCBzbG90ICpzbG90KQogewpAQCAtNDQ0LDggKzQ4MCw4IEBACiAJCXJldHZhbCA9IHJwYXBocF9jb25maWdfcGNpX2FkYXB0ZXIoc2xvdC0+YnVzKTsKIAkJaWYgKCFyZXR2YWwpIHsKIAkJCXNsb3QtPnN0YXRlID0gQ09ORklHVVJFRDsKLQkJCWRiZygiJXM6IFBDSSBkZXZpY2VzIGluIHNsb3RbJXNdIGhhcyBiZWVuIGNvbmZpZ3VyZWRcbiIsIAotCQkJCV9fRlVOQ1RJT05fXywgc2xvdC0+bmFtZSk7CisJCQlpbmZvKCIlczogZGV2aWNlcyBpbiBzbG90WyVzXSBjb25maWd1cmVkXG4iLAorCQkJCQlfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOwogCQl9IGVsc2UgewogCQkJc2xvdC0+c3RhdGUgPSBOT1RfQ09ORklHVVJFRDsKIAkJCWRiZygiJXM6IG5vIHBjaV9kZXYgc3RydWN0IGZvciBhZGFwdGVyIGluIHNsb3RbJXNdXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwppbmRleCBiOGU5NWFjLi4zODAwOWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9wY2kuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInNocGNocC5oIgogCi12b2lkIHByb2dyYW1fZndfcHJvdmlkZWRfdmFsdWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgdm9pZCBwcm9ncmFtX2Z3X3Byb3ZpZGVkX3ZhbHVlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUxNiBwY2lfY21kLCBwY2lfYmN0bDsKIAlzdHJ1Y3QgcGNpX2RldiAqY2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL21zaS5jIGIvZHJpdmVycy9wY2kvbXNpLmMKaW5kZXggYTIwMzM1NS4uMjAyYjc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvbXNpLmMKKysrIGIvZHJpdmVycy9wY2kvbXNpLmMKQEAgLTIzLDYgKzIzLDggQEAKICNpbmNsdWRlICJwY2kuaCIKICNpbmNsdWRlICJtc2kuaCIKIAorI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkJZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKQorCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1zaV9sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgbXNpX2Rlc2MqIG1zaV9kZXNjW05SX0lSUVNdID0geyBbMCAuLi4gTlJfSVJRUy0xXSA9IE5VTEwgfTsKIHN0YXRpYyBrbWVtX2NhY2hlX3QqIG1zaV9jYWNoZXA7CkBAIC05Miw2ICs5NCw3IEBACiAJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKIAlzdHJ1Y3QgbXNnX2FkZHJlc3MgYWRkcmVzczsKIAl1bnNpZ25lZCBpbnQgaXJxID0gdmVjdG9yOworCXVuc2lnbmVkIGludCBkZXN0X2NwdSA9IGZpcnN0X2NwdShjcHVfbWFzayk7CiAKIAllbnRyeSA9IChzdHJ1Y3QgbXNpX2Rlc2MgKiltc2lfZGVzY1t2ZWN0b3JdOwogCWlmICghZW50cnkgfHwgIWVudHJ5LT5kZXYpCkBAIC0xMDgsOSArMTExLDkgQEAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAogCQkJJmFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSk7CiAJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSAmPSBNU0lfQUREUkVTU19ERVNUX0lEX01BU0s7Ci0JCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSB8PSAoY3B1X21hc2tfdG9fYXBpY2lkKGNwdV9tYXNrKSA8PAotCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpOwotCQllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzayk7CisJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSB8PSAoY3B1X3BoeXNpY2FsX2lkKGRlc3RfY3B1KSA8PAorCQkJCQkJCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpOworCQllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9IGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSk7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZW50cnktPmRldiwgbXNpX2xvd2VyX2FkZHJlc3NfcmVnKHBvcyksCiAJCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOwogCQlzZXRfbmF0aXZlX2lycV9pbmZvKGlycSwgY3B1X21hc2spOwpAQCAtMTIzLDkgKzEyNiw5IEBACiAKIAkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlID0gcmVhZGwoZW50cnktPm1hc2tfYmFzZSArIG9mZnNldCk7CiAJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSAmPSBNU0lfQUREUkVTU19ERVNUX0lEX01BU0s7Ci0JCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSB8PSAoY3B1X21hc2tfdG9fYXBpY2lkKGNwdV9tYXNrKSA8PAotCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpOwotCQllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9IGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzayk7CisJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSB8PSAoY3B1X3BoeXNpY2FsX2lkKGRlc3RfY3B1KSA8PAorCQkJCQkJCQkJTVNJX1RBUkdFVF9DUFVfU0hJRlQpOworCQllbnRyeS0+bXNpX2F0dHJpYi5jdXJyZW50X2NwdSA9IGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSk7CiAJCXdyaXRlbChhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUsIGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwogCQlzZXRfbmF0aXZlX2lycV9pbmZvKGlycSwgY3B1X21hc2spOwogCQlicmVhazsKQEAgLTI1OSwxNCArMjYyLDE1IEBACiBzdGF0aWMgdm9pZCBtc2lfYWRkcmVzc19pbml0KHN0cnVjdCBtc2dfYWRkcmVzcyAqbXNpX2FkZHJlc3MpCiB7CiAJdW5zaWduZWQgaW50CWRlc3RfaWQ7CisJdW5zaWduZWQgbG9uZwlkZXN0X3BoeXNfaWQgPSBjcHVfcGh5c2ljYWxfaWQoTVNJX1RBUkdFVF9DUFUpOwogCiAJbWVtc2V0KG1zaV9hZGRyZXNzLCAwLCBzaXplb2Yoc3RydWN0IG1zZ19hZGRyZXNzKSk7CiAJbXNpX2FkZHJlc3MtPmhpX2FkZHJlc3MgPSAodTMyKTA7CiAJZGVzdF9pZCA9IChNU0lfQUREUkVTU19IRUFERVIgPDwgTVNJX0FERFJFU1NfSEVBREVSX1NISUZUKTsKLQltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy51LmRlc3RfbW9kZSA9IE1TSV9ERVNUX01PREU7CisJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5kZXN0X21vZGUgPSBNU0lfUEhZU0lDQUxfTU9ERTsKIAltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy51LnJlZGlyZWN0aW9uX2hpbnQgPSBNU0lfUkVESVJFQ1RJT05fSElOVF9NT0RFOwogCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnUuZGVzdF9pZCA9IGRlc3RfaWQ7Ci0JbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudmFsdWUgfD0gKE1TSV9UQVJHRVRfQ1BVIDw8IE1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy52YWx1ZSB8PSAoZGVzdF9waHlzX2lkIDw8IE1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKIH0KIAogc3RhdGljIGludCBtc2lfZnJlZV92ZWN0b3Ioc3RydWN0IHBjaV9kZXYqIGRldiwgaW50IHZlY3RvciwgaW50IHJlYXNzaWduKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCmluZGV4IGU5ZTM3YWIuLmE5YjAwY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwpAQCAtOTEsOSArOTEsNyBAQAogc3RhdGljIGFjcGlfc3RhdHVzICAKIGFjcGlfcnVuX29zYyAoCiAJYWNwaV9oYW5kbGUJaGFuZGxlLAotCXUzMgkJbGV2ZWwsCi0Jdm9pZAkJKmNvbnRleHQsCi0Jdm9pZAkJKipyZXR2YWwgKQorCXZvaWQJCSpjb250ZXh0KQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QJaW5wdXQ7CkBAIC0xODQsNyArMTgyLDcgQEAKICAqCiAgKiBBdHRlbXB0IHRvIHRha2UgY29udHJvbCBmcm9tIEZpcm13YXJlIG9uIHJlcXVlc3RlZCBjb250cm9sIGJpdHMuCiAgKiovCi1hY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KHUzMiBmbGFncykKK2FjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCiB7CiAJYWNwaV9zdGF0dXMJc3RhdHVzOwogCXUzMgkJY3RybHNldDsKQEAgLTE5OCwxMCArMTk2LDcgQEAKIAkJcmV0dXJuIEFFX1NVUFBPUlQ7CiAJfQogCWN0cmxzZXRfYnVmW09TQ19DT05UUk9MX1RZUEVdIHw9IGN0cmxzZXQ7Ci0Jc3RhdHVzID0gYWNwaV9nZXRfZGV2aWNlcyAoIFBDSV9ST09UX0hJRF9TVFJJTkcsCi0JCQkJYWNwaV9ydW5fb3NjLAotCQkJCWN0cmxzZXRfYnVmLAotCQkJCU5VTEwgKTsKKwlzdGF0dXMgPSBhY3BpX3J1bl9vc2MoaGFuZGxlLCBjdHJsc2V0X2J1Zik7CiAJaWYgKEFDUElfRkFJTFVSRSAoc3RhdHVzKSkgewogCQljdHJsc2V0X2J1ZltPU0NfQ09OVFJPTF9UWVBFXSAmPSB+Y3RybHNldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggOTRlNjhjNS4uYTkwNDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMzcsNyArMzcsNyBAQAogICogQWRkcyBhIG5ldyBkeW5hbWljIHBjaSBkZXZpY2UgSUQgdG8gdGhpcyBkcml2ZXIsCiAgKiBhbmQgY2F1c2VzIHRoZSBkcml2ZXIgdG8gcHJvYmUgZm9yIGFsbCBkZXZpY2VzIGFnYWluLgogICovCi1zdGF0aWMgaW5saW5lIHNzaXplX3QKK3N0YXRpYyBzc2l6ZV90CiBzdG9yZV9uZXdfaWQoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHBjaV9keW5pZCAqZHluaWQ7CkBAIC0zNjQsMTUgKzM2NCwxNiBAQAogfTsKIAogLyoqCi0gKiBwY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgorICogX19wY2lfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBuZXcgcGNpIGRyaXZlcgogICogQGRydjogdGhlIGRyaXZlciBzdHJ1Y3R1cmUgdG8gcmVnaXN0ZXIKKyAqIEBvd25lcjogb3duZXIgbW9kdWxlIG9mIGRydgogICogCiAgKiBBZGRzIHRoZSBkcml2ZXIgc3RydWN0dXJlIHRvIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgZHJpdmVycy4KICAqIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuIAogICogSWYgbm8gZXJyb3Igb2NjdXJyZWQsIHRoZSBkcml2ZXIgcmVtYWlucyByZWdpc3RlcmVkIGV2ZW4gaWYgCiAgKiBubyBkZXZpY2Ugd2FzIGNsYWltZWQgZHVyaW5nIHJlZ2lzdHJhdGlvbi4KICAqLwotaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikKK2ludCBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpCiB7CiAJaW50IGVycm9yOwogCkBAIC0zODksNyArMzkwLDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZzogUENJIGRyaXZlciAlcyBoYXMgYSBzdHJ1Y3QgIgogCQkJImRldmljZV9kcml2ZXIgc2h1dGRvd24gbWV0aG9kLCBwbGVhc2UgdXBkYXRlIVxuIiwKIAkJCWRydi0+bmFtZSk7Ci0JZHJ2LT5kcml2ZXIub3duZXIgPSBkcnYtPm93bmVyOworCWRydi0+ZHJpdmVyLm93bmVyID0gb3duZXI7CiAJZHJ2LT5kcml2ZXIua29iai5rdHlwZSA9ICZwY2lfZHJpdmVyX2tvYmpfdHlwZTsKIAogCXNwaW5fbG9ja19pbml0KCZkcnYtPmR5bmlkcy5sb2NrKTsKQEAgLTUyNiw3ICs1MjcsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHBjaV9tYXRjaF9pZCk7CiBFWFBPUlRfU1lNQk9MKHBjaV9tYXRjaF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChwY2lfcmVnaXN0ZXJfZHJpdmVyKTsKK0VYUE9SVF9TWU1CT0woX19wY2lfcmVnaXN0ZXJfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wocGNpX3VucmVnaXN0ZXJfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wocGNpX2Rldl9kcml2ZXIpOwogRVhQT1JUX1NZTUJPTChwY2lfYnVzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBlNzRkNzU4Li44ZTI4N2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNjMsMTEgKzYzLDM4IEBACiAJcmV0dXJuIG1heDsKIH0KIAorc3RhdGljIGludCBfX3BjaV9maW5kX25leHRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggcG9zLCBpbnQgY2FwKQoreworCXU4IGlkOworCWludCB0dGwgPSA0ODsKKworCXdoaWxlICh0dGwtLSkgeworCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgcG9zLCAmcG9zKTsKKwkJaWYgKHBvcyA8IDB4NDApCisJCQlicmVhazsKKwkJcG9zICY9IH4zOworCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgcG9zICsgUENJX0NBUF9MSVNUX0lELAorCQkJCQkgJmlkKTsKKwkJaWYgKGlkID09IDB4ZmYpCisJCQlicmVhazsKKwkJaWYgKGlkID09IGNhcCkKKwkJCXJldHVybiBwb3M7CisJCXBvcyArPSBQQ0lfQ0FQX0xJU1RfTkVYVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zLCBpbnQgY2FwKQoreworCXJldHVybiBfX3BjaV9maW5kX25leHRfY2FwKGRldi0+YnVzLCBkZXYtPmRldmZuLAorCQkJCSAgIHBvcyArIFBDSV9DQVBfTElTVF9ORVhULCBjYXApOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KTsKKwogc3RhdGljIGludCBfX3BjaV9idXNfZmluZF9jYXAoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCB1OCBoZHJfdHlwZSwgaW50IGNhcCkKIHsKIAl1MTYgc3RhdHVzOwotCXU4IHBvcywgaWQ7Ci0JaW50IHR0bCA9IDQ4OworCXU4IHBvczsKIAogCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBQQ0lfU1RBVFVTLCAmc3RhdHVzKTsKIAlpZiAoIShzdGF0dXMgJiBQQ0lfU1RBVFVTX0NBUF9MSVNUKSkKQEAgLTc2LDI0ICsxMDMsMTUgQEAKIAlzd2l0Y2ggKGhkcl90eXBlKSB7CiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMOgogCWNhc2UgUENJX0hFQURFUl9UWVBFX0JSSURHRToKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIFBDSV9DQVBBQklMSVRZX0xJU1QsICZwb3MpOworCQlwb3MgPSBQQ0lfQ0FQQUJJTElUWV9MSVNUOwogCQlicmVhazsKIAljYXNlIFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTOgotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgUENJX0NCX0NBUEFCSUxJVFlfTElTVCwgJnBvcyk7CisJCXBvcyA9IFBDSV9DQl9DQVBBQklMSVRZX0xJU1Q7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KLQl3aGlsZSAodHRsLS0gJiYgcG9zID49IDB4NDApIHsKLQkJcG9zICY9IH4zOwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUoYnVzLCBkZXZmbiwgcG9zICsgUENJX0NBUF9MSVNUX0lELCAmaWQpOwotCQlpZiAoaWQgPT0gMHhmZikKLQkJCWJyZWFrOwotCQlpZiAoaWQgPT0gY2FwKQotCQkJcmV0dXJuIHBvczsKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9ORVhULCAmcG9zKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIF9fcGNpX2ZpbmRfbmV4dF9jYXAoYnVzLCBkZXZmbiwgcG9zLCBjYXApOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggNTYyN2NlMS4uM2E0ZjQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTQ2MiwxMSArNDYyLDExIEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIDB4NzAsICZobSk7CiAJaG0gJj0gUENJX0JBU0VfQUREUkVTU19JT19NQVNLOwotCXF1aXJrX2lvX3JlZ2lvbihkZXYsIGhtLCAxMjgsIFBDSV9CUklER0VfUkVTT1VSQ0VTICsgMSwgInZ0ODJjODY4IEhXLW1vbiIpOworCXF1aXJrX2lvX3JlZ2lvbihkZXYsIGhtLCAxMjgsIFBDSV9CUklER0VfUkVTT1VSQ0VTICsgMSwgInZ0ODJjNjg2IEhXLW1vbiIpOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg5MCwgJnNtYik7CiAJc21iICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQlxdWlya19pb19yZWdpb24oZGV2LCBzbWIsIDE2LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDIsICJ2dDgyYzg2OCBTTUIiKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBzbWIsIDE2LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDIsICJ2dDgyYzY4NiBTTUIiKTsKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwJUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzQsCXF1aXJrX3Z0ODJjNjg2X2FjcGkgKTsKIApAQCAtMTI0Myw2ICsxMjQzLDIxIEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9BTllfSUQsIHF1aXJrX25ldG1vcyk7CiAKKworc3RhdGljIHZvaWQgX19kZXZpbml0IGZpeHVwX3JldjFfNTNjODEwKHN0cnVjdCBwY2lfZGV2KiBkZXYpCit7CisJLyogcmV2IDEgbmNyNTNjODEwIGNoaXBzIGRvbid0IHNldCB0aGUgY2xhc3MgYXQgYWxsIHdoaWNoIG1lYW5zCisJICogdGhleSBkb24ndCBnZXQgdGhlaXIgcmVzb3VyY2VzIHJlbWFwcGVkLiBGaXggdGhhdCBoZXJlLgorCSAqLworCisJaWYgKGRldi0+Y2xhc3MgPT0gUENJX0NMQVNTX05PVF9ERUZJTkVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5DUiA1M2M4MTAgcmV2IDEgZGV0ZWN0ZWQsIHNldHRpbmcgUENJIGNsYXNzLlxuIik7CisJCWRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQ1NJOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05DUiwgUENJX0RFVklDRV9JRF9OQ1JfNTNDODEwLCBmaXh1cF9yZXYxXzUzYzgxMCk7CisKKwogc3RhdGljIHZvaWQgcGNpX2RvX2ZpeHVwcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2ZpeHVwICpmLCBzdHJ1Y3QgcGNpX2ZpeHVwICplbmQpCiB7CiAJd2hpbGUgKGYgPCBlbmQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCmluZGV4IGNjZjIwMDMuLjMwOWViNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKKysrIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIGNvbmZpZyBQQ01DSUFfTThYWAogICAgICAgICB0cmlzdGF0ZSAiTVBDOHh4IFBDTUNJQSBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIFBDTUNJQSAmJiBQUEMKKyAgICAgICAgZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDICYmIDh4eCAKICAgICAgICAgc2VsZWN0IFBDQ0FSRF9OT05TVEFUSUMKICAgICAgICAgaGVscAogICAgICAgICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUG93ZXJQQyA4eHggc2VyaWVzIFBDTUNJQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQppbmRleCBmZTM3NTQxLi5iY2VjZjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjbWNpYS9NYWtlZmlsZQpAQCAtMjUsNyArMjUsNyBAQAogb2JqLSQoQ09ORklHX0k4MjM2NSkJCQkJKz0gaTgyMzY1Lm8KIG9iai0kKENPTkZJR19JODIwOTIpCQkJCSs9IGk4MjA5Mi5vCiBvYmotJChDT05GSUdfVENJQykJCQkJKz0gdGNpYy5vCi1vYmotJChDT05GSUdfUENNQ0lBX004WFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gbTh4eF9wY21jaWEubworb2JqLSQoQ09ORklHX1BDTUNJQV9NOFhYKQkJCSs9IG04eHhfcGNtY2lhLm8KIG9iai0kKENPTkZJR19IRDY0NDY1X1BDTUNJQSkJCQkrPSBoZDY0NDY1X3NzLm8KIG9iai0kKENPTkZJR19QQ01DSUFfU0ExMTAwKQkJCSs9IHNhMTF4eF9jb3JlLm8gc2ExMTAwX2NzLm8KIG9iai0kKENPTkZJR19QQ01DSUFfU0ExMTExKQkJCSs9IHNhMTF4eF9jb3JlLm8gc2ExMTExX2NzLm8KQEAgLTQ3LDEwICs0NywxMCBAQAogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfUEIxNTAwKQkJCSs9IGF1MTAwMF9wYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMDAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKSAgICAgICAgICAgICAgICAgKz0gYXUxMDAwX2RiMXgwMC5vCithdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjEyMDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCiBhdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjE1MDApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCiBhdTF4MDBfc3MtJChDT05GSUdfTUlQU19EQjE1NTApCQkJKz0gYXUxMDAwX2RiMXgwMC5vCi1hdTF4MDBfc3MtJChDT05GSUdfTUlQU19YWFMxNTAwKSAgICAgICAgICAgICAgICs9IGF1MTAwMF94eHMxNTAwLm8KK2F1MXgwMF9zcy0kKENPTkZJR19NSVBTX1hYUzE1MDApCQkrPSBhdTEwMDBfeHhzMTUwMC5vCiAKIHNhMTExMV9jcy15CQkJCQkrPSBzYTExMTFfZ2VuZXJpYy5vCiBzYTExMTFfY3MtJChDT05GSUdfQVNTQUJFVF9ORVBPTlNFVCkJCSs9IHNhMTEwMF9uZXBvbnNldC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKaW5kZXggMjRjZmVlMS4uYWJjMTNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYwpAQCAtMzAsNiArMzAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmggYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCmluZGV4IGIwZTc5MDguLmYyYzk3MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaApAQCAtMjIsNiArMjIsOCBAQAogI2RlZmluZSBfX0FTTV9BVTEwMDBfUENNQ0lBX0gKIAogLyogaW5jbHVkZSB0aGUgd29ybGQgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKwogI2luY2x1ZGUgPHBjbWNpYS9jc190eXBlcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9jcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9zcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCmluZGV4IDg2YzA4MDguLmZkNTUyMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKQEAgLTIxLDYgKzIxLDcgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKaW5kZXggMDFhODk1Yi4uMDE4NzRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCkBAIC0yNyw3ICsyNyw2IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKaW5kZXggN2NlNDU1ZC4uNGRkZDc2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKKysrIGIvZHJpdmVycy9wY21jaWEvaTgyMzY1LmMKQEAgLTEzNjYsNiArMTM2Niw3IEBACiAgICAgaWYgKHNvY2tldHMgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmk4MjM2NV9kZXZpY2UpOworCXJlbGVhc2VfcmVnaW9uKGkzNjVfYmFzZSwgMik7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCmluZGV4IGY4YmVkODcuLjZkOWY3MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwpAQCAtMzksNyArMzksNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MCw2ICs0OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNpbmNsdWRlIDxhc20vOHh4X2ltbWFwLmg+CkBAIC01NDYsMjkgKzU0NiwxMSBAQAogCWZyZWVfaXJxKHBjbWNpYV9zY2hsdmwsIE5VTEwpOwogfQogCi0vKiBjb3BpZWQgZnJvbSB0Y2ljLmMgKi8KLQotc3RhdGljIGludCBtOHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlLCB1MzIgbGV2ZWwpCi17Ci0gICAgICAgIGludCByZXQgPSAwOwotICAgICAgICBpZiAobGV2ZWwgPT0gU1VTUEVORF9TQVZFX1NUQVRFKQotICAgICAgICAgICAgICAgIHJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoZGV2LCBzdGF0ZSk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbTh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGxldmVsKQotewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgaWYgKGxldmVsID09IFJFU1VNRV9SRVNUT1JFX1NUQVRFKQotICAgICAgICAgICAgICAgIHJldCA9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZShkZXYpOwotICAgICAgICByZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbTh4eF9kcml2ZXIgPSB7CiAgICAgICAgIC5uYW1lID0gIm04eHgtcGNtY2lhIiwKICAgICAgICAgLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLSAgICAgICAgLnN1c3BlbmQgPSBtOHh4X2Rydl9zdXNwZW5kLAotICAgICAgICAucmVzdW1lID0gbTh4eF9kcnZfcmVzdW1lLAorICAgICAgICAuc3VzcGVuZCA9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCisgICAgICAgIC5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtOHh4X2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCmluZGV4IDFjOGFkMmYuLmRhOGM1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwpAQCAtOCw3ICs4LDcgQEAKICAqICAgIEF1dGhvcihzKTogT3JpZ2luYWwgQ29kZSB3cml0dGVuIGJ5CiAgKgkJCSAgREogQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCiAgKgkJIFJld3JpdHRlbiBieQotICoJCQkgIEZyYW5rIFBhdmxpYyAocGF2bGljQGRlLmlibS5jb20pIGFuZAorICoJCQkgIEZyYW5rIFBhdmxpYyAoZnBhdmxpY0BkZS5pYm0uY29tKSBhbmQKICAqCQkgCSAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICoKICAqICAgICRSZXZpc2lvbjogMS45OSAkCSAkRGF0ZTogMjAwNS8wNS8xMSAwODoxMDoxNyAkCkBAIC0yMzQyLDYgKzIzNDIsNiBAQAogbW9kdWxlX2luaXQobGNzX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGxjc19jbGVhbnVwX21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGguaAppbmRleCAzOGEyNDQxLi5kMjM4YzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGguaApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgpAQCAtMjQsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAicWV0aF9tcGMuaCIKIAotI2RlZmluZSBWRVJTSU9OX1FFVEhfSCAJCSIkUmV2aXNpb246IDEuMTQyICQiCisjZGVmaW5lIFZFUlNJT05fUUVUSF9IIAkJIiRSZXZpc2lvbjogMS4xNTIgJCIKIAogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKICNkZWZpbmUgUUVUSF9WRVJTSU9OX0lQVjYgCSI6SVB2NiIKQEAgLTcxOCw4ICs3MTksNiBAQAogCWF0b21pY190IHJlZmNudDsKIH07CiAKLSNkZWZpbmUgUUVUSF9CUk9BRENBU1RfV0lUSF9FQ0hPICAgIDEKLSNkZWZpbmUgUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPIDIKIAogc3RydWN0IHFldGhfY2FyZF9ibGt0IHsKIAlpbnQgdGltZV90b3RhbDsKQEAgLTcyNyw4ICs3MjYsMTAgQEAKIAlpbnQgaW50ZXJfcGFja2V0X2p1bWJvOwogfTsKIAotCi0KKyNkZWZpbmUgUUVUSF9CUk9BRENBU1RfV0lUSF9FQ0hPICAgIDB4MDEKKyNkZWZpbmUgUUVUSF9CUk9BRENBU1RfV0lUSE9VVF9FQ0hPIDB4MDIKKyNkZWZpbmUgUUVUSF9MQVlFUjJfTUFDX1JFQUQJICAgIDB4MDEKKyNkZWZpbmUgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQgIDB4MDIKIHN0cnVjdCBxZXRoX2NhcmRfaW5mbyB7CiAJdW5zaWduZWQgc2hvcnQgdW5pdF9hZGRyMjsKIAl1bnNpZ25lZCBzaG9ydCBjdWxhOwpAQCAtNzM2LDcgKzczNyw3IEBACiAJX191MTYgZnVuY19sZXZlbDsKIAljaGFyIG1jbF9sZXZlbFtRRVRIX01DTF9MRU5HVEggKyAxXTsKIAlpbnQgZ3Vlc3RsYW47Ci0JaW50IGxheWVyMl9tYWNfcmVnaXN0ZXJlZDsKKwlpbnQgbWFjX2JpdHM7CiAJaW50IHBvcnRuYW1lX3JlcXVpcmVkOwogCWludCBwb3J0bm87CiAJY2hhciBwb3J0bmFtZVs5XTsKQEAgLTc0OSw2ICs3NTAsNyBAQAogCWludCB1bmlxdWVfaWQ7CiAJc3RydWN0IHFldGhfY2FyZF9ibGt0IGJsa3Q7CiAJX191MzIgY3N1bV9tYXNrOworCWVudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyBwcm9taXNjX21vZGU7CiB9OwogCiBzdHJ1Y3QgcWV0aF9jYXJkX29wdGlvbnMgewpAQCAtNzc1LDYgKzc3Nyw3IEBACiBlbnVtIHFldGhfdGhyZWFkcyB7CiAJUUVUSF9TRVRfSVBfVEhSRUFEICA9IDEsCiAJUUVUSF9SRUNPVkVSX1RIUkVBRCA9IDIsCisJUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCA9IDQsCiB9OwogCiBzdHJ1Y3QgcWV0aF9vc25faW5mbyB7CkBAIC0xMDc0LDYgKzEwNzcsMjYgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitxZXRoX2lzZGlnaXQoY2hhciAqIGJ1ZikKK3sKKwl3aGlsZSAoKmJ1ZikgeworCQlpZiAoIWlzZGlnaXQoKmJ1ZisrKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3FldGhfaXN4ZGlnaXQoY2hhciAqIGJ1ZikKK3sKKwl3aGlsZSAoKmJ1ZikgeworCQlpZiAoIWlzeGRpZ2l0KCpidWYrKykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWV0aF9pcGFkZHI0X3RvX3N0cmluZyhjb25zdCBfX3U4ICphZGRyLCBjaGFyICpidWYpCiB7CkBAIC0xMDkwLDE4ICsxMTEzLDI3IEBACiAJaW50IGk7CiAKIAlzdGFydCA9IGJ1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlmICghKGVuZCA9IHN0cmNocihzdGFydCwgJy4nKSkpCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoaSA9PSAzKSB7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsMHhhKTsKKwkJCWlmIChlbmQpCisJCQkJbGVuID0gZW5kIC0gc3RhcnQ7CisJCQllbHNlCQkKKwkJCQlsZW4gPSBzdHJsZW4oc3RhcnQpOworCQl9CisJCWVsc2UgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LCAnLicpOworCQkJbGVuID0gZW5kIC0gc3RhcnQ7CisJCX0KKwkJaWYgKChsZW4gPD0gMCkgfHwgKGxlbiA+IDMpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWxlbiA9IGVuZCAtIHN0YXJ0OwogCQltZW1zZXQoYWJ1ZiwgMCwgNCk7CiAJCXN0cm5jcHkoYWJ1Ziwgc3RhcnQsIGxlbik7CisJCWlmICghcWV0aF9pc2RpZ2l0KGFidWYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWFkZHJbaV0gPSBzaW1wbGVfc3RydG91bChhYnVmLCAmdG1wLCAxMCk7CiAJCXN0YXJ0ID0gZW5kICsgMTsKIAl9Ci0JbWVtc2V0KGFidWYsIDAsIDQpOwotCXN0cmNweShhYnVmLCBzdGFydCk7Ci0JYWRkclszXSA9IHNpbXBsZV9zdHJ0b3VsKGFidWYsICZ0bXAsIDEwKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEyOCwxOCArMTE2MCwyNyBAQAogCiAJdG1wX2FkZHIgPSAodTE2ICopYWRkcjsKIAlzdGFydCA9IGJ1ZjsKLQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7Ci0JCWlmICghKGVuZCA9IHN0cmNocihzdGFydCwgJzonKSkpCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoaSA9PSA3KSB7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsMHhhKTsKKwkJCWlmIChlbmQpCisJCQkJbGVuID0gZW5kIC0gc3RhcnQ7CisJCQllbHNlCisJCQkJbGVuID0gc3RybGVuKHN0YXJ0KTsKKwkJfQorCQllbHNlIHsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwgJzonKTsKKwkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQl9CisJCWlmICgobGVuIDw9IDApIHx8IChsZW4gPiA0KSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlsZW4gPSBlbmQgLSBzdGFydDsKIAkJbWVtc2V0KGFidWYsIDAsIDUpOwogCQlzdHJuY3B5KGFidWYsIHN0YXJ0LCBsZW4pOworCQlpZiAoIXFldGhfaXN4ZGlnaXQoYWJ1ZikpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJdG1wX2FkZHJbaV0gPSBzaW1wbGVfc3RydG91bChhYnVmLCAmdG1wLCAxNik7CiAJCXN0YXJ0ID0gZW5kICsgMTsKIAl9Ci0JbWVtc2V0KGFidWYsIDAsIDUpOwotCXN0cmNweShhYnVmLCBzdGFydCk7Ci0JdG1wX2FkZHJbN10gPSBzaW1wbGVfc3RydG91bChhYnVmLCAmdG1wLCAxNik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IDY5MjAwM2MuLjk5Y2NlYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyAoJFJldmlzaW9uOiAxLjIyNCAkKQorICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyAoJFJldmlzaW9uOiAxLjI0MiAkKQogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0CiAgKgpAQCAtOSwxMCArOSwxMCBAQAogICogICAgQXV0aG9yKHMpOiBPcmlnaW5hbCBDb2RlIHdyaXR0ZW4gYnkKICAqCQkJICBVdHogQmFjaGVyICh1dHouYmFjaGVyQGRlLmlibS5jb20pCiAgKgkJIFJld3JpdHRlbiBieQotICoJCQkgIEZyYW5rIFBhdmxpYyAocGF2bGljQGRlLmlibS5jb20pIGFuZAorICoJCQkgIEZyYW5rIFBhdmxpYyAoZnBhdmxpY0BkZS5pYm0uY29tKSBhbmQKICAqCQkgCSAgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgogICoKLSAqICAgICRSZXZpc2lvbjogMS4yMjQgJAkgJERhdGU6IDIwMDUvMDUvMDQgMjA6MTk6MTggJAorICogICAgJFJldmlzaW9uOiAxLjI0MiAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC03Miw3ICs3Miw3IEBACiAjaW5jbHVkZSAicWV0aF9lZGRwLmgiCiAjaW5jbHVkZSAicWV0aF90c28uaCIKIAotI2RlZmluZSBWRVJTSU9OX1FFVEhfQyAiJFJldmlzaW9uOiAxLjIyNCAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfQyAiJFJldmlzaW9uOiAxLjI0MiAkIgogc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSAicWV0aCBTLzM5MCBPU0EtRXhwcmVzcyBkcml2ZXIiOwogCiAvKioKQEAgLTE2MCw2ICsxNjAsOSBAQAogcWV0aF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKIHN0YXRpYyB2b2lkCitxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqKTsKKworc3RhdGljIHZvaWQKIHFldGhfbm90aWZ5X3Byb2Nlc3Nlcyh2b2lkKQogewogCS8qbm90aWZ5IGFsbCAgcmVnaXN0ZXJlZCBwcm9jZXNzZXMgKi8KQEAgLTYwMiwxMSArNjA1LDIwIEBACiAJaW50IGZvdW5kID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRkciwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CisJCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgeworCQkJaWYgKChhZGRyLT50eXBlID09IHRvZG8tPnR5cGUpICYmCisJCQkgICAgKG1lbWNtcCgmYWRkci0+bWFjLCAmdG9kby0+bWFjLCAKKwkJCQkgICAgT1NBX0FERFJfTEVOKSA9PSAwKSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9IAogCQlpZiAoKGFkZHItPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCiAJCSAgICAodG9kby0+cHJvdG8gICAgID09IFFFVEhfUFJPVF9JUFY0KSAgJiYKIAkJICAgIChhZGRyLT50eXBlICAgICAgPT0gdG9kby0+dHlwZSkgICAgICAmJgogCQkgICAgKGFkZHItPnUuYTQuYWRkciA9PSB0b2RvLT51LmE0LmFkZHIpICYmCi0JCSAgICAoYWRkci0+dS5hNC5tYXNrID09IHRvZG8tPnUuYTQubWFzaykgICApeworCQkgICAgKGFkZHItPnUuYTQubWFzayA9PSB0b2RvLT51LmE0Lm1hc2spKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtNjE1LDEyICs2MjcsMTIgQEAKIAkJICAgIChhZGRyLT50eXBlICAgICAgICA9PSB0b2RvLT50eXBlKSAgICAgICAgICYmCiAJCSAgICAoYWRkci0+dS5hNi5wZnhsZW4gPT0gdG9kby0+dS5hNi5wZnhsZW4pICAmJgogCQkgICAgKG1lbWNtcCgmYWRkci0+dS5hNi5hZGRyLCAmdG9kby0+dS5hNi5hZGRyLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSkgICAgIHsKKwkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCWlmIChmb3VuZCl7CisJaWYgKGZvdW5kKSB7CiAJCWFkZHItPnVzZXJzICs9IHRvZG8tPnVzZXJzOwogCQlpZiAoYWRkci0+dXNlcnMgPD0gMCl7CiAJCQkqX19hZGRyID0gYWRkcjsKQEAgLTYzMiw3ICs2NDQsNyBAQAogCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JaWYgKHRvZG8tPnVzZXJzID4gMCl7CisJaWYgKHRvZG8tPnVzZXJzID4gMCkgewogCQkvKiBmb3IgVklQQSBhbmQgUlhJUCBsaW1pdCByZWZjb3VudCB0byAxICovCiAJCWlmICh0b2RvLT50eXBlICE9IFFFVEhfSVBfVFlQRV9OT1JNQUwpCiAJCQl0b2RvLT51c2VycyA9IDE7CkBAIC02ODIsMTIgKzY5NCwyMiBAQAogCQlpZiAoKGFkZHItPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpICYmCiAJCSAgICAodG1wLT50eXBlID09IFFFVEhfSVBfVFlQRV9ERUxfQUxMX01DKSkKIAkJCXJldHVybiAwOworCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKKwkJCWlmICgodG1wLT50eXBlCT09IGFkZHItPnR5cGUpCSYmCisJCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgJiYKKwkJCSAgICAobWVtY21wKCZ0bXAtPm1hYywgJmFkZHItPm1hYywgCisJCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfSAJIAogCQlpZiAoKHRtcC0+cHJvdG8gICAgICAgID09IFFFVEhfUFJPVF9JUFY0KSAgICAgJiYKIAkJICAgIChhZGRyLT5wcm90byAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCiAJCSAgICAodG1wLT50eXBlICAgICAgICAgPT0gYWRkci0+dHlwZSkgICAgICAgICAmJgogCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgJiYKIAkJICAgICh0bXAtPnUuYTQuYWRkciAgICA9PSBhZGRyLT51LmE0LmFkZHIpICAgICYmCi0JCSAgICAodG1wLT51LmE0Lm1hc2sgICAgPT0gYWRkci0+dS5hNC5tYXNrKSAgICAgICl7CisJCSAgICAodG1wLT51LmE0Lm1hc2sgICAgPT0gYWRkci0+dS5hNC5tYXNrKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KQEAgLTY5Nyw3ICs3MTksNyBAQAogCQkgICAgKHRtcC0+aXNfbXVsdGljYXN0ID09IGFkZHItPmlzX211bHRpY2FzdCkgICYmCiAJCSAgICAodG1wLT51LmE2LnBmeGxlbiAgPT0gYWRkci0+dS5hNi5wZnhsZW4pICAgJiYKIAkJICAgIChtZW1jbXAoJnRtcC0+dS5hNi5hZGRyLCAmYWRkci0+dS5hNi5hZGRyLAotCQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSAgICAgICAgKXsKKwkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC03MDcsNyArNzI5LDcgQEAKIAkJCXRtcC0+dXNlcnMgKz0gYWRkci0+dXNlcnM7CiAJCWVsc2UKIAkJCXRtcC0+dXNlcnMgKz0gYWRkPyAxOi0xOwotCQlpZiAodG1wLT51c2VycyA9PSAwKXsKKwkJaWYgKHRtcC0+dXNlcnMgPT0gMCkgewogCQkJbGlzdF9kZWwoJnRtcC0+ZW50cnkpOwogCQkJa2ZyZWUodG1wKTsKIAkJfQpAQCAtNzM4LDEyICs3NjAsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImRlbGlwIik7Ci0JaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwmYWRkci0+dS5hNC5hZGRyLDQpOworCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJkZWxpcCIpOworCisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQorCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT5tYWMsIDYpOworCWVsc2UgaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQorCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOwogCWVsc2UgewotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwmYWRkci0+dS5hNi5hZGRyLDgpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSs4LDgpOworCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT51LmE2LmFkZHIsIDgpOworCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpICsgOCwgOCk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJcmMgPSBfX3FldGhfaW5zZXJ0X2lwX3RvZG8oY2FyZCwgYWRkciwgMCk7CkBAIC03NTcsMTIgKzc4MiwxNCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJjID0gMDsKIAotCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiYWRkaXAiKTsKLQlpZiAoYWRkci0+cHJvdG8gPT0gUUVUSF9QUk9UX0lQVjQpCi0JCVFFVEhfREJGX0hFWCh0cmFjZSw0LCZhZGRyLT51LmE0LmFkZHIsNCk7CisJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImFkZGlwIik7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKQorCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT5tYWMsIDYpOworCWVsc2UgaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQorCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT51LmE0LmFkZHIsIDQpOwogCWVsc2UgewotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwmYWRkci0+dS5hNi5hZGRyLDgpOwotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSs4LDgpOworCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICZhZGRyLT51LmE2LmFkZHIsIDgpOworCQlRRVRIX0RCRl9IRVgodHJhY2UsIDQsICgoY2hhciAqKSZhZGRyLT51LmE2LmFkZHIpICsgOCwgOCk7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJcmMgPSBfX3FldGhfaW5zZXJ0X2lwX3RvZG8oY2FyZCwgYWRkciwgMSk7CkBAIC03NzUsNyArODAyLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHIsICp0bXA7CiAJaW50IHJjOwotCithZ2FpbjoKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWRkciwgdG1wLCAmY2FyZC0+aXBfbGlzdCwgZW50cnkpIHsKIAkJaWYgKGFkZHItPmlzX211bHRpY2FzdCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgKmZsYWdzKTsKQEAgLTc4NCw2ICs4MTEsNyBAQAogCQkJaWYgKCFyYykgewogCQkJCWxpc3RfZGVsKCZhZGRyLT5lbnRyeSk7CiAJCQkJa2ZyZWUoYWRkcik7CisJCQkJZ290byBhZ2FpbjsKIAkJCX0KIAkJfQogCX0KQEAgLTg1MSw2ICs4NzksNyBAQAogCiBzdGF0aWMgdm9pZCBxZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoc3RydWN0IHFldGhfY2FyZCAqKTsKIHN0YXRpYyB2b2lkIHFldGhfYWRkX211bHRpY2FzdF9pcHY0KHN0cnVjdCBxZXRoX2NhcmQgKik7CitzdGF0aWMgdm9pZCBxZXRoX2xheWVyMl9hZGRfbXVsdGljYXN0KHN0cnVjdCBxZXRoX2NhcmQgKik7CiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogc3RhdGljIHZvaWQgcWV0aF9hZGRfbXVsdGljYXN0X2lwdjYoc3RydWN0IHFldGhfY2FyZCAqKTsKICNlbmRpZgpAQCAtOTM5LDYgKzk2OCwyNCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRHJpdmUgdGhlIFNFVF9QUk9NSVNDX01PREUgdGhyZWFkCisgKi8KK3N0YXRpYyBpbnQKK3FldGhfc2V0X3Byb21pc2NfbW9kZSh2b2lkICpwdHIpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIHB0cjsKKworCWRhZW1vbml6ZSgicWV0aF9zZXRwcm0iKTsKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInNldHBybTEiKTsKKwlpZiAoIXFldGhfZG9fcnVuX3RocmVhZChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKSkKKwkJcmV0dXJuIDA7CisJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzZXRwcm0yIik7CisJcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKGNhcmQpOworCXFldGhfY2xlYXJfdGhyZWFkX3J1bm5pbmdfYml0KGNhcmQsIFFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBxZXRoX3JlY292ZXIodm9pZCAqcHRyKQogewpAQCAtMTAwNSw2ICsxMDUyLDggQEAKIAogCWlmIChxZXRoX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBRRVRIX1NFVF9JUF9USFJFQUQpKQogCQlrZXJuZWxfdGhyZWFkKHFldGhfcmVnaXN0ZXJfaXBfYWRkcmVzc2VzLCAodm9pZCAqKWNhcmQsU0lHQ0hMRCk7CisJaWYgKHFldGhfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIFFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQpKQorCQlrZXJuZWxfdGhyZWFkKHFldGhfc2V0X3Byb21pc2NfbW9kZSwgKHZvaWQgKiljYXJkLCBTSUdDSExEKTsKIAlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCkpCiAJCWtlcm5lbF90aHJlYWQocWV0aF9yZWNvdmVyLCAodm9pZCAqKSBjYXJkLCBTSUdDSExEKTsKIH0KQEAgLTM3NDksNyArMzc5OCw3IEBACiAKIAlpZiAoIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfT1NOKSAmJgogCSAgICAgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSAmJgotCSAgICAgKCFjYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCkpIHsKKwkgICAgICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpKSB7CiAJCVFFVEhfREJGX1RFWFQodHJhY2UsNCwibm9tYWNhZHIiKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CkBAIC00MzExLDYgKzQzNjAsOCBAQAogb3V0OgogCWlmIChmbHVzaF9jb3VudCkKIAkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAwLCBzdGFydF9pbmRleCwgZmx1c2hfY291bnQpOworCWVsc2UgaWYgKCFhdG9taWNfcmVhZCgmcXVldWUtPnNldF9wY2lfZmxhZ3NfY291bnQpKQorCQlhdG9taWNfc3dhcCgmcXVldWUtPnN0YXRlLCBRRVRIX09VVF9RX0xPQ0tFRF9GTFVTSCk7CiAJLyoKIAkgKiBxdWV1ZS0+c3RhdGUgd2lsbCBnbyBmcm9tIExPQ0tFRCAtPiBVTkxPQ0tFRCBvciBmcm9tCiAJICogTE9DS0VEX0ZMVVNIIC0+IExPQ0tFRCBpZiBvdXRwdXRfaGFuZGxlciB3YW50ZWQgdG8gJ25vdGlmeScgdXMKQEAgLTQ5NzUsNiArNTAyNiwxMCBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcpOwogCiBzdGF0aWMgaW50CitxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBpbnQKIHFldGhfc2VuZF9zZXRhc3NwYXJtcyhzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKiwKIAkJICAgICAgX191MTYsIGxvbmcsCiAJCSAgICAgIGludCAoKnJlcGx5X2NiKQpAQCAtNTMwMSw4ICs1MzU2LDcgQEAKIAlzdHJ1Y3QgcWV0aF9pcGFkZHIgKmFkZHI7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZnJ2YWRkcjQiKTsKLQlpZiAoIWNhcmQtPnZsYW5ncnApCi0JCXJldHVybjsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAlpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGNhcmQtPnZsYW5ncnAtPnZsYW5fZGV2aWNlc1t2aWRdKTsKIAlpZiAoIWluX2RldikKQEAgLTUzMzAsOCArNTM4NCw3IEBACiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImZydmFkZHI2Iik7Ci0JaWYgKCFjYXJkLT52bGFuZ3JwKQotCQlyZXR1cm47CisKIAlpbjZfZGV2ID0gaW42X2Rldl9nZXQoY2FyZC0+dmxhbmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0pOwogCWlmICghaW42X2RldikKIAkJcmV0dXJuOwpAQCAtNTM1MSwxMCArNTQwNCwzOCBAQAogfQogCiBzdGF0aWMgdm9pZAorcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIgfHwgIWNhcmQtPnZsYW5ncnApCisJCXJldHVybjsKKwlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM0KGNhcmQsIHZpZCk7CisJcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNihjYXJkLCB2aWQpOworfQorCitzdGF0aWMgaW50CitxZXRoX2xheWVyMl9zZW5kX3NldGRlbHZsYW5fY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKQoreworICAgICAgICBzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKyAgICAgICAgUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIkwyc2R2Y2IiKTsKKyAgICAgICAgY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKKyAgICAgICAgaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7CisJCVBSSU5UX0VSUigiRXJyb3IgaW4gcHJvY2Vzc2luZyBWTEFOICVpIG9uICVzOiAweCV4LiAiCisJCQkgICJDb250aW51aW5nXG4iLGNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQsIAorCQkJICBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiTDJWTCU0eCIsIGNtZC0+aGRyLmNvbW1hbmQpOworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7CisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7CisJfQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTE2IGksCiAJCQkgICAgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCkKIHsKLSAJaW50IHJjOwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2I7CiAKQEAgLTUzNjIsMTUgKzU0NDMsOCBAQAogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgaXBhY21kLCBRRVRIX1BST1RfSVBWNCk7CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogICAgICAgICBjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkID0gaTsKLQotCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICAgICAgUFJJTlRfRVJSKCJFcnJvciBpbiBwcm9jZXNzaW5nIFZMQU4gJWkgb24gJXM6IDB4JXguICIKLQkJCSAgIkNvbnRpbnVpbmdcbiIsaSwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgcmMpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyVkwlNHgiLCBpcGFjbWQpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyJXMiLCBDQVJEX0JVU19JRChjYXJkKSk7Ci0JCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAyLCAiZXJyJWQiLCByYyk7Ci0gICAgICAgIH0KKwlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCAKKwkJCQkgcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuX2NiLCBOVUxMKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTU0MjAsOCArNTQ5NCw3IEBACiAJcWV0aF9mcmVlX3ZsYW5fc2ticyhjYXJkLCB2aWQpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwogCS8qIHVucmVnaXN0ZXIgSVAgYWRkcmVzc2VzIG9mIHZsYW4gZGV2aWNlICovCi0JcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNChjYXJkLCB2aWQpOwotCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczYoY2FyZCwgdmlkKTsKKwlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXMoY2FyZCwgdmlkKTsKIAlpZiAoY2FyZC0+dmxhbmdycCkKIAkJY2FyZC0+dmxhbmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0gPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnZsYW5sb2NrLCBmbGFncyk7CkBAIC01NDMwLDYgKzU1MDMsNTkgQEAKIAlxZXRoX3NldF9tdWx0aWNhc3RfbGlzdChjYXJkLT5kZXYpOwogfQogI2VuZGlmCisvKioKKyAqIEV4YW1pbmUgaGFyZHdhcmUgcmVzcG9uc2UgdG8gU0VUX1BST01JU0NfTU9ERQorICovCitzdGF0aWMgaW50CitxZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgCisJCQkgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisJc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zICpzZXRwYXJtczsKKworCVFFVEhfREJGX1RFWFQodHJhY2UsNCwicHJtYWRwY2IiKTsKKworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisJc2V0cGFybXMgPSAmKGNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMpOworCQorICAgICAgICBxZXRoX2RlZmF1bHRfc2V0YWRhcHRlcnBhcm1zX2NiKGNhcmQsIHJlcGx5LCAodW5zaWduZWQgbG9uZyljbWQpOworCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgeyAKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsNCwicHJtcmMlMi4yeCIsY21kLT5oZHIucmV0dXJuX2NvZGUpOwkKKwkJc2V0cGFybXMtPmRhdGEubW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOworCX0KKwljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IHNldHBhcm1zLT5kYXRhLm1vZGU7CisJcmV0dXJuIDA7Cit9CisvKgorICogU2V0IHByb21pc2N1b3VzIG1vZGUgKG9uIG9yIG9mZikgKFNFVF9QUk9NSVNDX01PREUgY29tbWFuZCkKKyAqLworc3RhdGljIHZvaWQKK3FldGhfc2V0YWRwX3Byb21pc2NfbW9kZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCWVudW0gcWV0aF9pcGFfcHJvbWlzY19tb2RlcyBtb2RlOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjYXJkLT5kZXY7CisJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOworCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKKworCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJzZXRwcm9tIik7CisKKwlpZiAoKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCisJICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PTikpIHx8CisJICAgICghKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgJiYKKwkgICAgIChjYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9PSBTRVRfUFJPTUlTQ19NT0RFX09GRikpKQorCQlyZXR1cm47CisJbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT0ZGOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCW1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09OOworCVFFVEhfREJGX1RFWFRfKHRyYWNlLCA0LCAibW9kZToleCIsIG1vZGUpOworCisJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFLAorCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YSArIElQQV9QRFVfSEVBREVSX1NJWkUpOworCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5tb2RlID0gbW9kZTsKKwlxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfc2V0YWRwX3Byb21pc2NfbW9kZV9jYiwgTlVMTCk7Cit9CiAKIC8qKgogICogc2V0IG11bHRpY2FzdCBhZGRyZXNzIG9uIGNhcmQKQEAgLTU0NDQsMTIgKzU1NzAsMjIgQEAKIAkgCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJzZXRtdWx0aSIpOwogCXFldGhfZGVsZXRlX21jX2FkZHJlc3NlcyhjYXJkKTsKKwlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKKwkJcWV0aF9sYXllcjJfYWRkX211bHRpY2FzdChjYXJkKTsKKwkJZ290byBvdXQ7CisJfQogCXFldGhfYWRkX211bHRpY2FzdF9pcHY0KGNhcmQpOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIAlxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NihjYXJkKTsKICNlbmRpZgorb3V0OgogIAlpZiAocWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1NFVF9JUF9USFJFQUQpID09IDApCiAJCXNjaGVkdWxlX3dvcmsoJmNhcmQtPmtlcm5lbF90aHJlYWRfc3RhcnRlcik7CisJaWYgKCFxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFKSkKKwkJcmV0dXJuOworCWlmIChxZXRoX3NldF90aHJlYWRfc3RhcnRfYml0KGNhcmQsIFFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQpPT0wKQorCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCiB9CiAKIHN0YXRpYyBpbnQKQEAgLTU2NTcsNiArNTc5MywyNCBAQAogCWluX2Rldl9wdXQoaW40X2Rldik7CiB9CiAKK3N0YXRpYyB2b2lkCitxZXRoX2xheWVyMl9hZGRfbXVsdGljYXN0KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IHFldGhfaXBhZGRyICppcG07CisJc3RydWN0IGRldl9tY19saXN0ICpkbTsKKworCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiTDJhZGRtYyIpOworCWZvciAoZG0gPSBjYXJkLT5kZXYtPm1jX2xpc3Q7IGRtOyBkbSA9IGRtLT5uZXh0KSB7CisJCWlwbSA9IHFldGhfZ2V0X2FkZHJfYnVmZmVyKFFFVEhfUFJPVF9JUFY0KTsKKwkJaWYgKCFpcG0pCisJCQljb250aW51ZTsKKwkJbWVtY3B5KGlwbS0+bWFjLGRtLT5kbWlfYWRkcixNQVhfQUREUl9MRU4pOworCQlpcG0tPmlzX211bHRpY2FzdCA9IDE7CisJCWlmICghcWV0aF9hZGRfaXAoY2FyZCwgaXBtKSkKKwkJCWtmcmVlKGlwbSk7CisJfQorfQorCiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogc3RhdGljIGlubGluZSB2b2lkCiBxZXRoX2FkZF9tYzYoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IGluZXQ2X2RldiAqaW42X2RldikKQEAgLTU4MjUsMTAgKzU5NzksMTAgQEAKIAkJUFJJTlRfV0FSTigiRXJyb3IgaW4gcmVnaXN0ZXJpbmcgTUFDIGFkZHJlc3Mgb24gIiBcCiAJCQkgICAiZGV2aWNlICVzOiB4JXhcbiIsIENBUkRfQlVTX0lEKGNhcmQpLAogCQkJICAgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCQljYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCA9IDA7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwogCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IC1FSU87CiAJfSBlbHNlIHsKLQkJY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQgPSAxOworCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwogCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkcixjbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYywKIAkJICAgICAgIE9TQV9BRERSX0xFTik7CiAJCVBSSU5UX0lORk8oIk1BQyBhZGRyZXNzICUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4ICIKQEAgLTU4NjYsNyArNjAyMCw3IEBACiAJCWNtZC0+aGRyLnJldHVybl9jb2RlID0gLUVJTzsKIAkJcmV0dXJuIDA7CiAJfQotCWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkID0gMDsKKwljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAogCXJldHVybiAwOwogfQpAQCAtNTg3NCw3ICs2MDI4LDcgQEAKIHFldGhfbGF5ZXIyX3NlbmRfZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYykKIHsKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiTDJEZWxtYWMiKTsKLQlpZiAoIWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkKQorCWlmICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpCiAJCXJldHVybiAwOwogCXJldHVybiBxZXRoX2xheWVyMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMVk1BQywKIAkJCQkJICBxZXRoX2xheWVyMl9zZW5kX2RlbG1hY19jYik7CkBAIC01ODk2LDcgKzYwNTAsNyBAQAogCWNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBkZXYtPnByaXY7CiAKIAlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7Ci0JCVBSSU5UX1dBUk4oIlNldHRpbmcgTUFDIGFkZHJlc3Mgb24gJXMgaXMgbm90IHN1cHBvcnRlZCIKKwkJUFJJTlRfV0FSTigiU2V0dGluZyBNQUMgYWRkcmVzcyBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkICIKIAkJCSAgICJpbiBMYXllciAzIG1vZGUuXG4iLCBkZXYtPm5hbWUpOwogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAzLCAic2V0bWNMWTMiKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNjQ0MSw2ICs2NTk1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAorCisKIHN0YXRpYyBpbnQKIHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTY0ODEsOCArNjYzNywxMyBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsNCwiY2hnbWFjY2IiKTsKIAogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsCi0JICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkcixPU0FfQUREUl9MRU4pOworCWlmICghY2FyZC0+b3B0aW9ucy5sYXllcjIgfHwgY2FyZC0+aW5mby5ndWVzdGxhbiB8fAorCSAgICAhKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVBRCkpIHsJCisJCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLAorCQkgICAgICAgJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5hZGRyLAorCQkgICAgICAgT1NBX0FERFJfTEVOKTsKKwkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVBRDsKKwl9CiAJcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihjYXJkLCByZXBseSwgKHVuc2lnbmVkIGxvbmcpIGNtZCk7CiAJcmV0dXJuIDA7CiB9CkBAIC02NjAyLDYgKzY3NjMsMTIgQEAKICAgICAgICAgUUVUSF9EQkZfVEVYVChzZXR1cCwgMiwgImRvTDJpbml0Iik7CiAgICAgICAgIFFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiZG9MMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwogCisJcmMgPSBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtcyhjYXJkKTsKKwlpZiAocmMpIHsKKwkJUFJJTlRfV0FSTigiY291bGQgbm90IHF1ZXJ5IGFkYXB0ZXIgcGFyYW1ldGVycyBvbiBkZXZpY2UgJXM6ICIKKwkJCSAgICJ4JXhcbiIsIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7CisJfQorCiAJcmMgPSBxZXRoX3NldGFkcHBhcm1zX2NoYW5nZV9tYWNhZGRyKGNhcmQpOwogCWlmIChyYykgewogCQlQUklOVF9XQVJOKCJjb3VsZG4ndCBnZXQgTUFDIGFkZHJlc3Mgb24gIgpAQCAtODU0OCw3ICs4NzE1LDcgQEAKIEVYUE9SVF9TWU1CT0wocWV0aF9vc25fYXNzaXN0KTsKIG1vZHVsZV9pbml0KHFldGhfaW5pdCk7CiBtb2R1bGVfZXhpdChxZXRoX2V4aXQpOwotTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydFxuIiBcCiAJCSAgICAgICAgICAgICAgICAgICAgICAiQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb25cbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKaW5kZXggMzBlMDUzZC4uZjBhMDgwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0CiAgKgogICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KLSAqIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4KKyAqIEF1dGhvcihzKTogRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+CiAgKiAJICAgICAgVGhvbWFzIFNwYXR6aWVyIDx0c3BhdEBkZS5pYm0uY29tPgogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCmluZGV4IDdlZGM1ZjEuLjVmNzE0ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMCwyMDAzIElCTSBDb3Jwb3JhdGlvbgogICogQXV0aG9yKHMpOiBVdHogQmFjaGVyIDx1dHouYmFjaGVyQGRlLmlibS5jb20+CiAgKiAgICAgICAgICAgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KLSAqICAgICAgICAgICAgRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICAgRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+CiAgKgogICovCiAjaWZuZGVmIF9fUUVUSF9NUENfSF9fCkBAIC0xNCw3ICsxNCw3IEBACiAKICNpbmNsdWRlIDxhc20vcWV0aC5oPgogCi0jZGVmaW5lIFZFUlNJT05fUUVUSF9NUENfSCAiJFJldmlzaW9uOiAxLjQzICQiCisjZGVmaW5lIFZFUlNJT05fUUVUSF9NUENfSCAiJFJldmlzaW9uOiAxLjQ0ICQiCiAKIGV4dGVybiBjb25zdCBjaGFyICpWRVJTSU9OX1FFVEhfTVBDX0M7CiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCUlQQV9TRVRBRFBfU0VORF9PU0FfTUVTU0FHRSAJCT0gMHgwMTAwLAogCUlQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTCAJCT0gMHgwMjAwLAogCUlQQV9TRVRBRFBfUkVBRF9TTk1QX1BBUk1TIAkJPSAweDA0MDAsCi0JSVBBX1NFVEFEUF9XUklURV9TTk1QX1BBUk1TIAkJPSAweDA4MDAsCisJSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFCQk9IDB4MDgwMCwKIAlJUEFfU0VUQURQX1FVRVJZX0NBUkRfSU5GTyAJCT0gMHgxMDAwLAogfTsKIGVudW0gcWV0aF9pcGFfbWFjX29wcyB7CkBAIC0yMzIsOSArMjMyLDEyIEBACiAJQ0hBTkdFX0FERFJfQUREX0FERFIgCQk9IDEsCiAJQ0hBTkdFX0FERFJfREVMX0FERFIgCQk9IDIsCiAJQ0hBTkdFX0FERFJfRkxVU0hfQUREUl9UQUJMRSAJPSA0LAotCi0KIH07CitlbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgeworCVNFVF9QUk9NSVNDX01PREVfT0ZGCQk9IDAsCisJU0VUX1BST01JU0NfTU9ERV9PTgkJPSAxLAorfTsKKwogLyogKFNFVClERUxJUChNKSBJUEEgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RydWN0IHFldGhfaXBhY21kX3NldGRlbGlwNCB7CiAJX191OCAgIGlwX2FkZHJbNF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKaW5kZXggZjkxYTAyZC4uZGRkNjAxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogbGludXgvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jICgkUmV2aXNpb246IDEuNTUgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyAoJFJldmlzaW9uOiAxLjU4ICQpCiAgKgogICogTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnQKICAqIFRoaXMgZmlsZSBjb250YWlucyBjb2RlIHJlbGF0ZWQgdG8gc3lzZnMuCkBAIC04LDcgKzgsNyBAQAogICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KICAqCiAgKiBBdXRob3Iocyk6IFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KLSAqIAkgICAgICBGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPgorICogCSAgICAgIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KQEAgLTIwLDcgKzIwLDcgQEAKICNpbmNsdWRlICJxZXRoX21wYy5oIgogI2luY2x1ZGUgInFldGhfZnMuaCIKIAotY29uc3QgY2hhciAqVkVSU0lPTl9RRVRIX1NZU19DID0gIiRSZXZpc2lvbjogMS41NSAkIjsKK2NvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9TWVNfQyA9ICIkUmV2aXNpb246IDEuNTggJCI7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMTcsNyArMTExNyw3IEBACiAJc3RhcnQgPSBidWY7CiAJLyogZ2V0IGFkZHJlc3Mgc3RyaW5nICovCiAJZW5kID0gc3RyY2hyKHN0YXJ0LCAnLycpOwotCWlmICghZW5kKXsKKwlpZiAoIWVuZCB8fCAoZW5kLXN0YXJ0ID49IDQ5KSl7CiAJCVBSSU5UX1dBUk4oIkludmFsaWQgZm9ybWF0IGZvciBpcGF0b19hZGR4L2RlbHguICIKIAkJCSAgICJVc2UgPGlwIGFkZHI+LzxtYXNrIGJpdHM+XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKaW5kZXggYWQzM2U2Zi4uZTI0NWFmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwNCBJQk0gQ29ycG9yYXRpb24KICAqCi0gKiAgICBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiAgICBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICoKICAqICAgICRSZXZpc2lvbjogMS43ICQJICREYXRlOiAyMDA1LzA1LzA0IDIwOjE5OjE4ICQKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jIGIvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYwppbmRleCAyYzg2YTRiLi5jM2E1MWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKQEAgLTExOSw3ICsxMTksNyBAQAogewogCV9fdTggcmVncyA9IHJlYWRiKGQ3c19yZWdzKTsKIAlfX3U4IGlyZWcgPSAwOwotCWludCBlcnJvciA9IDAKKwlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKEQ3U19NSU5PUiAhPSBpbWlub3IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGNpLmMgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCmluZGV4IDEwYzQ3MGUuLjU3ZWY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGNpLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoY2kuYwpAQCAtMjU1LDcgKzI1NSw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhaGNpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhaGNpX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkX2FoY2kgfSwgLyogSUNINiAqLwogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwppbmRleCBhMWJkOGQ5Li44NTU0MjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYwpAQCAtOTUsNyArOTUsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGluX21vZHVsZV9pbml0ID0gMTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXhfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXhfcGNpX3RibFtdID0gewogI2lmZGVmIEFUQV9FTkFCTEVfUEFUQQogCXsgMHg4MDg2LCAweDcxMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHBpaXg0X3BhdGEgfSwKIAl7IDB4ODA4NiwgMHgyNGRiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g1X3BhdGEgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKaW5kZXggYTc0YjQwNy4uZTUxZDlhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmF0YS1jb3JlLmMKQEAgLTQ1NjMsNiArNDU2Myw3IEBACiAKIAlwcm9iZV9lbnQtPmlycSA9IHBkZXYtPmlycTsKIAlwcm9iZV9lbnQtPmlycV9mbGFncyA9IFNBX1NISVJROworCXByb2JlX2VudC0+cHJpdmF0ZV9kYXRhID0gcG9ydFswXS0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKHBvcnRzICYgQVRBX1BPUlRfUFJJTUFSWSkgewogCQlwcm9iZV9lbnQtPnBvcnRbcF0uY21kX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CkBAIC00NTk5LDYgKzQ2MDAsNyBAQAogCXByb2JlX2VudC0+bGVnYWN5X21vZGUgPSAxOwogCXByb2JlX2VudC0+bl9wb3J0cyA9IDE7CiAJcHJvYmVfZW50LT5oYXJkX3BvcnRfbm8gPSBwb3J0X251bTsKKwlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnQtPnByaXZhdGVfZGF0YTsKIAogCXN3aXRjaChwb3J0X251bSkKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCmluZGV4IGJiMzBmY2QuLjdlMzdmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtc2NzaS5jCkBAIC0xMTI5LDYgKzExMjksOCBAQAogCQkgKiBsZW5ndGggMCBtZWFucyB0cmFuc2ZlciAwIGJsb2NrIG9mIGRhdGEuCiAJCSAqIEhvd2V2ZXIsIGZvciBBVEEgUi9XIGNvbW1hbmRzLCBzZWN0b3IgY291bnQgMCBtZWFucwogCQkgKiAyNTYgb3IgNjU1MzYgc2VjdG9ycywgbm90IDAgc2VjdG9ycyBhcyBpbiBTQ1NJLgorCQkgKgorCQkgKiBXQVJOSU5HOiBvbmUgb3IgdHdvIG9sZGVyIEFUQSBkcml2ZXMgdHJlYXQgMCBhcyAwLi4uCiAJCSAqLwogCQlnb3RvIG5vdGhpbmdfdG9fZG87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKaW5kZXggYzkwNzIzOC4uMDc0OTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19pbml0LmMKQEAgLTE3MDQsNyArMTcwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBscGZjX2RyaXZlciA9IHsKIAkubmFtZQkJPSBMUEZDX0RSSVZFUl9OQU1FLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUJPSBscGZjX2lkX3RhYmxlLAogCS5wcm9iZQkJPSBscGZjX3BjaV9wcm9iZV9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChscGZjX3BjaV9yZW1vdmVfb25lKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKaW5kZXggNzhiNGZmMS4uZjU1N2YxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWRtYV9hdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFkbWFfYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUERDLCAweDE4NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8xODQxX2lkeCB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwppbmRleCA5M2Q1NTIzLi4yNTdjMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKQEAgLTM0OSw3ICszNDksNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXZfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG12X3BjaV90YmxbXSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NTA0MCksIDAsIDAsIGNoaXBfNTA0eH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwNDEpLCAwLCAwLCBjaGlwXzUwNHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg1MDgwKSwgMCwgMCwgY2hpcF81MDh4fSwKQEAgLTM1OSw2ICszNTksOCBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDQxKSwgMCwgMCwgY2hpcF82MDR4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA4MCksIDAsIDAsIGNoaXBfNjA4eH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDYwODEpLCAwLCAwLCBjaGlwXzYwOHh9LAorCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgMHgwMjQxKSwgMCwgMCwgY2hpcF82MDR4fSwKIAl7fQkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbnYuYwppbmRleCAzN2E0ZmFlLi40OTU0ODk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCUNLODA0CiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbnZfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TQVRBLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBORk9SQ0UyIH0sCiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwppbmRleCA5ZWRjOWQ5Li4yNDJkOTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkY19hdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkY19hdGFfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDMzNzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8yMDM3eCB9LAogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDM1NzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYwppbmRleCBkMjc0YWIyLi5iMmY2MzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcXNfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBxc19hdGFfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9QREMsIDB4MjA2OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkXzIwNjhfaWR4IH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKaW5kZXggZDBlM2MzYy4uMzYwOTE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsLmMKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIHNpbF9wb3N0X3NldF9tb2RlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaWxfcGNpX3RibFtdID0gewogCXsgMHgxMDk1LCAweDMxMTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyX20xNXcgfSwKIAl7IDB4MTA5NSwgMHgwMjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCiAJeyAweDEwOTUsIDB4MzUxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTIgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCmluZGV4IDQ2ODJhNTAuLmQzMTk4ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiBzdGF0aWMgdm9pZCBzaWwyNF9ob3N0X3N0b3Aoc3RydWN0IGF0YV9ob3N0X3NldCAqaG9zdF9zZXQpOwogc3RhdGljIGludCBzaWwyNF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaWwyNF9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsMjRfcGNpX3RibFtdID0gewogCXsgMHgxMDk1LCAweDMxMjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTI0IH0sCiAJeyAweDEwOTUsIDB4MzEzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMzIgfSwKIAl7IDB4MTA5NSwgMHgzMTMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCSURfU0lMMzEzMSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYwppbmRleCA0MmQ3YzRlLi4zMmUxMjYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaXMuYwpAQCAtNjcsNyArNjcsNyBAQAogc3RhdGljIHUzMiBzaXNfc2NyX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwogc3RhdGljIHZvaWQgc2lzX3Njcl93cml0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXNfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpc19wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NJLCAweDE4MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lzXzE4MCB9LAogCXsgUENJX1ZFTkRPUl9JRF9TSSwgMHgxODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpc18xODAgfSwKIAl7IFBDSV9WRU5ET1JfSURfU0ksIDB4MTgyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaXNfMTgwIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCmluZGV4IDk4OTVkMWMuLjU3ZTVhOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jCkBAIC00NjYsNyArNDY2LDcgQEAKICAqIDB4MjRhIGlzIGRldmljZSBJRCBmb3IgQkNNNTc4NSAoYWthIEhUMTAwMCkgSFQgc291dGhicmlkZ2UgaW50ZWdyYXRlZCBTQVRBCiAgKiBjb250cm9sbGVyCiAgKiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsyX3NhdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsyX3NhdGFfcGNpX3RibFtdID0gewogCXsgMHgxMTY2LCAweDAyNDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDQgfSwKIAl7IDB4MTE2NiwgMHgwMjQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0IH0sCiAJeyAweDExNjYsIDB4MDI0MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgOCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwppbmRleCBkNWEzODc4Li5iNGJiZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zeDQuYwpAQCAtMjI5LDcgKzIyOSw3IEBACiAKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfc2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX3NhdGFfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9QUk9NSVNFLCAweDY2MjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8yMDYyMSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwppbmRleCBjZjBiYWFhLi5iMjQyMmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV91bGkuYwpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIHUzMiB1bGlfc2NyX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwogc3RhdGljIHZvaWQgdWxpX3Njcl93cml0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1bGlfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHVsaV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81Mjg5IH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81Mjg3IH0sCiAJeyBQQ0lfVkVORE9SX0lEX0FMLCAweDUyODEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHVsaV81MjgxIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCmluZGV4IGFiMTlkMmIuLmM3NjIxNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jCkBAIC03NSw3ICs3NSw3IEBACiBzdGF0aWMgdTMyIHN2aWFfc2NyX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpOwogc3RhdGljIHZvaWQgc3ZpYV9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3ZpYV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3ZpYV9wY2lfdGJsW10gPSB7CiAJeyAweDExMDYsIDB4MzE0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgdnQ2NDIwIH0sCiAJeyAweDExMDYsIDB4MzI0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgdnQ2NDIxIH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdnNjLmMKaW5kZXggY2U4YTJmZC4uNzdhNmU0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCkBAIC00MDAsNyArNDAwLDcgQEAKICAqIDB4ODA4Ni8weDMyMDAgaXMgdGhlIEludGVsIDMxMjQ0LCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBpZGVudGljYWwKICAqIGNvbXBhdGliaWxpdHkgaXMgdW50ZXN0ZWQgYXMgb2YgeWV0CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2c2Nfc2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnNjX3NhdGFfcGNpX3RibFtdID0gewogCXsgMHgxNzI1LCAweDcxNzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDB4MTA2MDAsIDB4RkZGRkZGLCAwIH0sCiAJeyAweDgwODYsIDB4MzIwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMHgxMDYwMCwgMHhGRkZGRkYsIDAgfSwKIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCA5ODgyMDYwLi4zNzQyNzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0yMzgxLDkgKzIzODEsOSBAQAogICogbGlzdCBpcyB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIGZsYWdzIGVudHJ5LCB3aGljaCBtZWFucyB3ZSBleHBlY3QKICAqIGFsbCBlbnRyaWVzIHRvIGhhdmUgYXQgbGVhc3QgVVBGX0JPT1RfQVVUT0NPTkYgc2V0LgogICovCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzZXJpYWw4MjUwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNlcmlhbDgyNTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKIAlpbnQgcmV0LCBpOwogCkBAIC0yMzk5LDEyICsyMzk5LDEyIEBACiAJCXBvcnQuZmxhZ3MJPSBwLT5mbGFnczsKIAkJcG9ydC5tYXBiYXNlCT0gcC0+bWFwYmFzZTsKIAkJcG9ydC5odWI2CT0gcC0+aHViNjsKLQkJcG9ydC5kZXYJPSBkZXY7CisJCXBvcnQuZGV2CT0gJmRldi0+ZGV2OwogCQlpZiAoc2hhcmVfaXJxcykKIAkJCXBvcnQuZmxhZ3MgfD0gVVBGX1NIQVJFX0lSUTsKIAkJcmV0ID0gc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHBvcnQgYXQgaW5kZXggJWQgIgorCQkJZGV2X2VycigmZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXIgcG9ydCBhdCBpbmRleCAlZCAiCiAJCQkJIihJTyVseCBNRU0lbHggSVJRJWQpOiAlZFxuIiwgaSwKIAkJCQlwLT5pb2Jhc2UsIHAtPm1hcGJhc2UsIHAtPmlycSwgcmV0KTsKIAkJfQpAQCAtMjQxNSw1NCArMjQxNSw1NSBAQAogLyoKICAqIFJlbW92ZSBzZXJpYWwgcG9ydHMgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgcGxhdGZvcm0gZGV2aWNlLgogICovCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzZXJpYWw4MjUwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzZXJpYWw4MjUwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIAotCQlpZiAodXAtPnBvcnQuZGV2ID09IGRldikKKwkJaWYgKHVwLT5wb3J0LmRldiA9PSAmZGV2LT5kZXYpCiAJCQlzZXJpYWw4MjUwX3VucmVnaXN0ZXJfcG9ydChpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsODI1MF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzZXJpYWw4MjUwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIAotCQlpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04gJiYgdXAtPnBvcnQuZGV2ID09IGRldikKKwkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3N1c3BlbmRfcG9ydCgmc2VyaWFsODI1MF9yZWcsICZ1cC0+cG9ydCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzZXJpYWw4MjUwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgVUFSVF9OUjsgaSsrKSB7CiAJCXN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAgPSAmc2VyaWFsODI1MF9wb3J0c1tpXTsKIAotCQlpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1VOS05PV04gJiYgdXAtPnBvcnQuZGV2ID09IGRldikKKwkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzZXJpYWw4MjUwX3JlZywgJnVwLT5wb3J0KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNlcmlhbDgyNTBfaXNhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2VyaWFsODI1MCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZXJpYWw4MjUwX2lzYV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNlcmlhbDgyNTBfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzZXJpYWw4MjUwX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBzZXJpYWw4MjUwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzZXJpYWw4MjUwX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2VyaWFsODI1MCIsCisJfSwKIH07CiAKIC8qCkBAIC0yNjA4LDcgKzI2MDksNyBAQAogCiAJc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0cygmc2VyaWFsODI1MF9yZWcsICZzZXJpYWw4MjUwX2lzYV9kZXZzLT5kZXYpOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2VyaWFsODI1MF9pc2FfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApCiAJCWdvdG8gb3V0OwogCkBAIC0yNjMwLDcgKzI2MzEsNyBAQAogCSAqLwogCXNlcmlhbDgyNTBfaXNhX2RldnMgPSBOVUxMOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnNlcmlhbDgyNTBfaXNhX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNlcmlhbDgyNTBfaXNhX2RyaXZlcik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaXNhX2Rldik7CiAKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWw4MjUwX3JlZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IDRhNTRmZjUuLjM1NWNkOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC05MjEsOSArOTIxLDkgQEAKIAkuY29ucyAgICAgICAgICAgPSBJTVhfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2VyaWFsX2lteF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2VyaWFsX2lteF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgICBzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworICAgICAgICBzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9zdXNwZW5kX3BvcnQoJmlteF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC05MzEsOSArOTMxLDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX2lteF9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX2lteF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworICAgICAgICBzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9yZXN1bWVfcG9ydCgmaW14X3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTk0MSwyMSArOTQxLDE5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX2lteF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwotCi0JaW14X3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gX2RldjsKKwlpbXhfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CiAJdWFydF9hZGRfb25lX3BvcnQoJmlteF9yZWcsICZpbXhfcG9ydHNbZGV2LT5pZF0ucG9ydCk7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsICZpbXhfcG9ydHNbZGV2LT5pZF0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgJmlteF9wb3J0c1tkZXYtPmlkXSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX2lteF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX2lteF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmlteF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC05NjMsMTQgKzk2MSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2VyaWFsX2lteF9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgICA9ICJpbXgtdWFydCIsCi0gICAgICAgIC5idXMgICAgICAgICAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNlcmlhbF9pbXhfZHJpdmVyID0gewogICAgICAgICAucHJvYmUgICAgICAgICAgPSBzZXJpYWxfaW14X3Byb2JlLAogICAgICAgICAucmVtb3ZlICAgICAgICAgPSBzZXJpYWxfaW14X3JlbW92ZSwKIAogCS5zdXNwZW5kCT0gc2VyaWFsX2lteF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2VyaWFsX2lteF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJICAgICAgICAubmFtZQk9ICJpbXgtdWFydCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlteF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtOTg1LDcgKzk4NCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2VyaWFsX2lteF9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2VyaWFsX2lteF9kcml2ZXIpOwogCWlmIChyZXQgIT0gMCkKIAkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmaW14X3JlZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKaW5kZXggMGRkMDhhMC4uNWQzY2I4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMKQEAgLTcxNywxMCArNzE3LDkgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotbXBjNTJ4eF91YXJ0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wYzUyeHhfdWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlOwogCiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IE5VTEw7CiAJaW50IGksIGlkeCwgcmV0OwpAQCAtNzYxLDE3ICs3NjAsMTcgQEAKIAkvKiBBZGQgdGhlIHBvcnQgdG8gdGhlIHVhcnQgc3ViLXN5c3RlbSAqLwogCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAlpZiAoIXJldCkKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKXBvcnQpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkKilwb3J0KTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBjNTJ4eF91YXJ0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CkBAIC03ODEsOSArNzgwLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCittcGM1Mnh4X3VhcnRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfc3VzcGVuZF9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKQEAgLTc5Miw5ICs3OTEsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK21wYzUyeHhfdWFydF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChwb3J0KQogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZtcGM1Mnh4X3VhcnRfZHJpdmVyLCBwb3J0KTsKQEAgLTgwMywxNSArODAyLDE2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIm1wYzUyeHgtcHNjIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG1wYzUyeHhfdWFydF9wcm9iZSwKIAkucmVtb3ZlCQk9IG1wYzUyeHhfdWFydF9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBtcGM1Mnh4X3VhcnRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG1wYzUyeHhfdWFydF9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXBjNTJ4eC1wc2MiLAorCX0sCiB9OwogCiAKQEAgLTgyOCw3ICs4MjgsNyBAQAogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJm1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIpOwogCQlpZiAocmV0KQogCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7CiAJfQpAQCAtODM5LDcgKzgzOSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQKIG1wYzUyeHhfdWFydF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1wYzUyeHhfdWFydF9wbGF0Zm9ybV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBzYy5jIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCmluZGV4IGJhODgzOGIuLjhmODNlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKQEAgLTE1NTEsMTUgKzE1NTEsMTQgQEAKIH0KIAogc3RhdGljIGludAotbXBzY19zaGFyZWRfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wc2Nfc2hhcmVkX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1wc2Nfc2hhcmVkX3BkYXRhCSpwZGF0YTsKIAlpbnQJCQkJIHJjID0gLUVOT0RFVjsKIAotCWlmIChwZC0+aWQgPT0gMCkgewotCQlpZiAoIShyYyA9IG1wc2Nfc2hhcmVkX21hcF9yZWdzKHBkKSkpICB7Ci0JCQlwZGF0YSA9IChzdHJ1Y3QgbXBzY19zaGFyZWRfcGRhdGEgKilkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKGRldi0+aWQgPT0gMCkgeworCQlpZiAoIShyYyA9IG1wc2Nfc2hhcmVkX21hcF9yZWdzKGRldikpKSAgeworCQkJcGRhdGEgPSAoc3RydWN0IG1wc2Nfc2hhcmVkX3BkYXRhICopZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCQkJbXBzY19zaGFyZWRfcmVncy5NUFNDX01SUl9tID0gcGRhdGEtPm1ycl92YWw7CiAJCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfUkNSUl9tPSBwZGF0YS0+cmNycl92YWw7CkBAIC0xNTc3LDEyICsxNTc2LDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2Nfc2hhcmVkX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBzY19zaGFyZWRfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQJcmMgPSAtRU5PREVWOwogCi0JaWYgKHBkLT5pZCA9PSAwKSB7CisJaWYgKGRldi0+aWQgPT0gMCkgewogCQltcHNjX3NoYXJlZF91bm1hcF9yZWdzKCk7CiAJCW1wc2Nfc2hhcmVkX3JlZ3MuTVBTQ19NUlJfbSA9IDA7CiAJCW1wc2Nfc2hhcmVkX3JlZ3MuTVBTQ19SQ1JSX20gPSAwOwpAQCAtMTU5NSwxMSArMTU5MywxMiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1wc2Nfc2hhcmVkX2RyaXZlciA9IHsKLQkubmFtZQk9IE1QU0NfU0hBUkVEX05BTUUsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wc2Nfc2hhcmVkX2RyaXZlciA9IHsKIAkucHJvYmUJPSBtcHNjX3NoYXJlZF9kcnZfcHJvYmUsCiAJLnJlbW92ZQk9IG1wc2Nfc2hhcmVkX2Rydl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSBNUFNDX1NIQVJFRF9OQU1FLAorCX0sCiB9OwogCiAvKgpAQCAtMTczMiwxOSArMTczMSwxOCBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHNjX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbXBzY19wb3J0X2luZm8JKnBpOwogCWludAkJCXJjID0gLUVOT0RFVjsKIAotCXByX2RlYnVnKCJtcHNjX2Rydl9wcm9iZTogQWRkaW5nIE1QU0MgJWRcbiIsIHBkLT5pZCk7CisJcHJfZGVidWcoIm1wc2NfZHJ2X3Byb2JlOiBBZGRpbmcgTVBTQyAlZFxuIiwgZGV2LT5pZCk7CiAKLQlpZiAocGQtPmlkIDwgTVBTQ19OVU1fQ1RMUlMpIHsKLQkJcGkgPSAmbXBzY19wb3J0c1twZC0+aWRdOworCWlmIChkZXYtPmlkIDwgTVBTQ19OVU1fQ1RMUlMpIHsKKwkJcGkgPSAmbXBzY19wb3J0c1tkZXYtPmlkXTsKIAotCQlpZiAoIShyYyA9IG1wc2NfZHJ2X21hcF9yZWdzKHBpLCBwZCkpKSB7Ci0JCQltcHNjX2Rydl9nZXRfcGxhdGZvcm1fZGF0YShwaSwgcGQsIHBkLT5pZCk7CisJCWlmICghKHJjID0gbXBzY19kcnZfbWFwX3JlZ3MocGksIGRldikpKSB7CisJCQltcHNjX2Rydl9nZXRfcGxhdGZvcm1fZGF0YShwaSwgZGV2LCBkZXYtPmlkKTsKIAogCQkJaWYgKCEocmMgPSBtcHNjX21ha2VfcmVhZHkocGkpKSkKIAkJCQlpZiAoIShyYyA9IHVhcnRfYWRkX29uZV9wb3J0KCZtcHNjX3JlZywKQEAgLTE3NjQsMjcgKzE3NjIsMjYgQEAKIH0KIAogc3RhdGljIGludAotbXBzY19kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wc2NfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGQgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlwcl9kZWJ1ZygibXBzY19kcnZfZXhpdDogUmVtb3ZpbmcgTVBTQyAlZFxuIiwgZGV2LT5pZCk7CiAKLQlwcl9kZWJ1ZygibXBzY19kcnZfZXhpdDogUmVtb3ZpbmcgTVBTQyAlZFxuIiwgcGQtPmlkKTsKLQotCWlmIChwZC0+aWQgPCBNUFNDX05VTV9DVExSUykgewotCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBzY19yZWcsICZtcHNjX3BvcnRzW3BkLT5pZF0ucG9ydCk7Ci0JCW1wc2NfcmVsZWFzZV9wb3J0KChzdHJ1Y3QgdWFydF9wb3J0ICopJm1wc2NfcG9ydHNbcGQtPmlkXS5wb3J0KTsKLQkJbXBzY19kcnZfdW5tYXBfcmVncygmbXBzY19wb3J0c1twZC0+aWRdKTsKKwlpZiAoZGV2LT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7CisJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZtcHNjX3JlZywgJm1wc2NfcG9ydHNbZGV2LT5pZF0ucG9ydCk7CisJCW1wc2NfcmVsZWFzZV9wb3J0KChzdHJ1Y3QgdWFydF9wb3J0ICopJm1wc2NfcG9ydHNbZGV2LT5pZF0ucG9ydCk7CisJCW1wc2NfZHJ2X3VubWFwX3JlZ3MoJm1wc2NfcG9ydHNbZGV2LT5pZF0pOwogCQlyZXR1cm4gMDsKIAl9CiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG1wc2NfZHJpdmVyID0gewotCS5uYW1lCT0gTVBTQ19DVExSX05BTUUsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wc2NfZHJpdmVyID0gewogCS5wcm9iZQk9IG1wc2NfZHJ2X3Byb2JlLAogCS5yZW1vdmUJPSBtcHNjX2Rydl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSBNUFNDX0NUTFJfTkFNRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQKQEAgLTE3OTgsOSArMTc5NSw5IEBACiAJbWVtc2V0KCZtcHNjX3NoYXJlZF9yZWdzLCAwLCBzaXplb2YobXBzY19zaGFyZWRfcmVncykpOwogCiAJaWYgKCEocmMgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmbXBzY19yZWcpKSkgewotCQlpZiAoIShyYyA9IGRyaXZlcl9yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKSkpIHsKLQkJCWlmICgocmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm1wc2NfZHJpdmVyKSkpIHsKLQkJCQlkcml2ZXJfdW5yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKTsKKwkJaWYgKCEocmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcikpKSB7CisJCQlpZiAoKHJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX2RyaXZlcikpKSB7CisJCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CiAJCQkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBzY19yZWcpOwogCQkJfQogCQl9CkBAIC0xODE1LDggKzE4MTIsOCBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcHNjX2Rydl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2NfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBzY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wc2NfcmVnKTsKIAltZW1zZXQobXBzY19wb3J0cywgMCwgc2l6ZW9mKG1wc2NfcG9ydHMpKTsKIAltZW1zZXQoJm1wc2Nfc2hhcmVkX3JlZ3MsIDAsIHNpemVvZihtcHNjX3NoYXJlZF9yZWdzKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IDE2YjJmOTQuLmZmNWU2MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC04MDUsOSArODA1LDkgQEAKIAkuY29ucwkJPSBQWEFfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfc3VzcGVuZF9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTgxNSw5ICs4MTUsOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogICAgICAgICBpZiAoc3BvcnQpCiAgICAgICAgICAgICAgICAgdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04MjUsMjEgKzgyNSwxOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKLQotCXNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSBfZGV2OworCXNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CiAJdWFydF9hZGRfb25lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc2VyaWFsX3B4YV9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgJnNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgJnNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04NDcsMTQgKzg0NSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2VyaWFsX3B4YV9kcml2ZXIgPSB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgICA9ICJweGEyeHgtdWFydCIsCi0gICAgICAgIC5idXMgICAgICAgICAgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNlcmlhbF9weGFfZHJpdmVyID0gewogICAgICAgICAucHJvYmUgICAgICAgICAgPSBzZXJpYWxfcHhhX3Byb2JlLAogICAgICAgICAucmVtb3ZlICAgICAgICAgPSBzZXJpYWxfcHhhX3JlbW92ZSwKIAogCS5zdXNwZW5kCT0gc2VyaWFsX3B4YV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2VyaWFsX3B4YV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJICAgICAgICAubmFtZQk9ICJweGEyeHgtdWFydCIsCisJfSwKIH07CiAKIGludCBfX2luaXQgc2VyaWFsX3B4YV9pbml0KHZvaWQpCkBAIC04NjUsNyArODY0LDcgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9weGFfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9weGFfZHJpdmVyKTsKIAlpZiAocmV0ICE9IDApCiAJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9weGFfcmVnKTsKIApAQCAtODc0LDcgKzg3Myw3IEBACiAKIHZvaWQgX19leGl0IHNlcmlhbF9weGFfZXhpdCh2b2lkKQogewotICAgICAgICBkcml2ZXJfdW5yZWdpc3Rlcigmc2VyaWFsX3B4YV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsX3B4YV9yZWcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggMDM2NzkyMy4uNDc2ODFjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtMTA5MiwxNCArMTA5MiwxMyBAQAogCiBzdGF0aWMgaW50IHByb2JlX2luZGV4ID0gMDsKIAotc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2LAorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICppbmZvKQogewogCXN0cnVjdCBzM2MyNHh4X3VhcnRfcG9ydCAqb3VycG9ydDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJaW50IHJldDsKIAotCWRiZygiczNjMjR4eF9zZXJpYWxfcHJvYmUoJXAsICVwKSAlZFxuIiwgX2RldiwgaW5mbywgcHJvYmVfaW5kZXgpOworCWRiZygiczNjMjR4eF9zZXJpYWxfcHJvYmUoJXAsICVwKSAlZFxuIiwgZGV2LCBpbmZvLCBwcm9iZV9pbmRleCk7CiAKIAlvdXJwb3J0ID0gJnMzYzI0eHhfc2VyaWFsX3BvcnRzW3Byb2JlX2luZGV4XTsKIAlwcm9iZV9pbmRleCsrOwpAQCAtMTExMiw3ICsxMTExLDcgQEAKIAogCWRiZygiJXM6IGFkZGluZyBwb3J0XG4iLCBfX0ZVTkNUSU9OX18pOwogCXVhcnRfYWRkX29uZV9wb3J0KCZzM2MyNHh4X3VhcnRfZHJ2LCAmb3VycG9ydC0+cG9ydCk7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsICZvdXJwb3J0LT5wb3J0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZvdXJwb3J0LT5wb3J0KTsKIAogCXJldHVybiAwOwogCkBAIC0xMTIwLDkgKzExMTksOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoX2Rldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoJmRldi0+ZGV2KTsKIAogCWlmIChwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmczNjMjR4eF91YXJ0X2RydiwgcG9ydCk7CkBAIC0xMTM0LDkgKzExMzMsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydChkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KCZkZXYtPmRldik7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9zdXNwZW5kX3BvcnQoJnMzYzI0eHhfdWFydF9kcnYsIHBvcnQpOwpAQCAtMTE0NCw5ICsxMTQzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoJmRldi0+ZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQgPSB0b19vdXJwb3J0KHBvcnQpOwogCiAJaWYgKHBvcnQpIHsKQEAgLTExNjUsMTEgKzExNjQsMTEgQEAKICNkZWZpbmUgczNjMjR4eF9zZXJpYWxfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9pbml0KHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX2luaXQoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2LAogCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKIHsKIAlkYmcoInMzYzI0eHhfc2VyaWFsX2luaXQoJXAsJXApXG4iLCBkcnYsIGluZm8pOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoZHJ2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKGRydik7CiB9CiAKIApAQCAtMTIyOCwxOSArMTIyNywyMCBAQAogCS5yZXNldF9wb3J0CT0gczNjMjQwMF9zZXJpYWxfcmVzZXRwb3J0LAogfTsKIAotc3RhdGljIGludCBzM2MyNDAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gczNjMjR4eF9zZXJpYWxfcHJvYmUoZGV2LCAmczNjMjQwMF91YXJ0X2luZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDAwX3NlcmlhbF9kcnYgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MDAtdWFydCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQwMF9zZXJpYWxfZHJ2ID0gewogCS5wcm9iZQkJPSBzM2MyNDAwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNHh4X3NlcmlhbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0MDAtdWFydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBzM2MyNDAwX3NlcmlhbF9pbml0KHZvaWQpCkBAIC0xMjUwLDcgKzEyNTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjMjQwMF9zZXJpYWxfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDAwX3NlcmlhbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDAwX3NlcmlhbF9kcnYpOwogfQogCiAjZGVmaW5lIHMzYzI0MDBfdWFydF9pbmZfYXQgJnMzYzI0MDBfdWFydF9pbmYKQEAgLTEzMzIsMTkgKzEzMzIsMjAgQEAKIAogLyogZGV2aWNlIG1hbmFnZW1lbnQgKi8KIAotc3RhdGljIGludCBzM2MyNDEwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gczNjMjR4eF9zZXJpYWxfcHJvYmUoZGV2LCAmczNjMjQxMF91YXJ0X2luZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX3NlcmlhbF9kcnYgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtdWFydCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9zZXJpYWxfZHJ2ID0gewogCS5wcm9iZQkJPSBzM2MyNDEwX3NlcmlhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfc2VyaWFsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNHh4X3NlcmlhbF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0MTAtdWFydCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBzM2MyNDEwX3NlcmlhbF9pbml0KHZvaWQpCkBAIC0xMzU0LDcgKzEzNTUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjMjQxMF9zZXJpYWxfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3NlcmlhbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3NlcmlhbF9kcnYpOwogfQogCiAjZGVmaW5lIHMzYzI0MTBfdWFydF9pbmZfYXQgJnMzYzI0MTBfdWFydF9pbmYKQEAgLTE0OTMsMjAgKzE0OTQsMjEgQEAKIAogLyogZGV2aWNlIG1hbmFnZW1lbnQgKi8KIAotc3RhdGljIGludCBzM2MyNDQwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0NDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlkYmcoInMzYzI0NDBfc2VyaWFsX3Byb2JlOiBkZXY9JXBcbiIsIGRldik7CiAJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0NDBfdWFydF9pbmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9zZXJpYWxfZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDQwLXVhcnQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0NDBfc2VyaWFsX2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQ0MF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjR4eF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDQwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogCkBAIC0xNTE3LDcgKzE1MTksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgczNjMjQ0MF9zZXJpYWxfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDQwX3NlcmlhbF9kcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDQwX3NlcmlhbF9kcnYpOwogfQogCiAjZGVmaW5lIHMzYzI0NDBfdWFydF9pbmZfYXQgJnMzYzI0NDBfdWFydF9pbmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKaW5kZXggZWQ2MThjYy4uZmQ5ZGVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMKQEAgLTgzNCw5ICs4MzQsOSBAQAogCS5jb25zCQkJPSBTQTExMDBfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfc3VzcGVuZF9wb3J0KCZzYTExMDBfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODQ0LDkgKzg0NCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfcmVzdW1lX3BvcnQoJnNhMTEwMF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04NTQsOSArODU0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IGRldi0+cmVzb3VyY2U7CiAJaW50IGk7CiAKQEAgLTg2OSw5ICs4NjgsOSBAQAogCQkJaWYgKHNhMTEwMF9wb3J0c1tpXS5wb3J0Lm1hcGJhc2UgIT0gcmVzLT5zdGFydCkKIAkJCQljb250aW51ZTsKIAotCQkJc2ExMTAwX3BvcnRzW2ldLnBvcnQuZGV2ID0gX2RldjsKKwkJCXNhMTEwMF9wb3J0c1tpXS5wb3J0LmRldiA9ICZkZXYtPmRldjsKIAkJCXVhcnRfYWRkX29uZV9wb3J0KCZzYTExMDBfcmVnLCAmc2ExMTAwX3BvcnRzW2ldLnBvcnQpOwotCQkJZGV2X3NldF9kcnZkYXRhKF9kZXYsICZzYTExMDBfcG9ydHNbaV0pOworCQkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmc2ExMTAwX3BvcnRzW2ldKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtODc5LDExICs4NzgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IHNhMTEwMF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2ExMTAwX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTg5MSwxMyArODkwLDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzYTExeDBfc2VyaWFsX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2ExMXgwLXVhcnQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMXgwX3NlcmlhbF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNhMTEwMF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzYTExMDBfc2VyaWFsX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNhMTEwMF9zZXJpYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzYTExeDAtdWFydCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtOTEwLDcgKzkxMCw3IEBACiAKIAlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc2ExMTAwX3JlZyk7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3NlcmlhbF9kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKIAkJaWYgKHJldCkKIAkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhMTEwMF9yZWcpOwogCX0KQEAgLTkxOSw3ICs5MTksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2ExMTAwX3NlcmlhbF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3NlcmlhbF9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNhMTEwMF9yZWcpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKaW5kZXggMDE2OTZiMy4uODY1ZDRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYwpAQCAtOTI0LDcgKzkyNCw3IEBACiAJLmNvbnMJCT0gU0VSSUFMX1ZSNDFYWF9DT05TT0xFLAogfTsKIAotc3RhdGljIGludCBzaXVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzaXVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IG51bSwgaSwgcmV0dmFsOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CiAJCXBvcnQgPSAmc2l1X3VhcnRfcG9ydHNbaV07CiAJCXBvcnQtPm9wcyA9ICZzaXVfdWFydF9vcHM7Ci0JCXBvcnQtPmRldiA9IGRldjsKKwkJcG9ydC0+ZGV2ID0gJmRldi0+ZGV2OwogCiAJCXJldHZhbCA9IHVhcnRfYWRkX29uZV9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCQlpZiAocmV0dmFsIDwgMCkgewpAQCAtOTU4LDE0ICs5NTgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaXVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2l1X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaXVfdWFydF9kcml2ZXIubnI7IGkrKykgewogCQlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2ldOwotCQlpZiAocG9ydC0+ZGV2ID09IGRldikgeworCQlpZiAocG9ydC0+ZGV2ID09ICZkZXYtPmRldikgewogCQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNpdV91YXJ0X2RyaXZlciwgcG9ydCk7CiAJCQlwb3J0LT5kZXYgPSBOVUxMOwogCQl9CkBAIC05NzYsNyArOTc2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzaXVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2l1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKIAlpbnQgaTsKQEAgLTk4NCw3ICs5ODQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXVfdWFydF9kcml2ZXIubnI7IGkrKykgewogCQlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2ldOwogCQlpZiAoKHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfU0lVIHx8Ci0JCSAgICAgcG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9EU0lVKSAmJiBwb3J0LT5kZXYgPT0gZGV2KQorCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09ICZkZXYtPmRldikKIAkJCXVhcnRfc3VzcGVuZF9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCiAJfQpAQCAtOTkyLDcgKzk5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2l1X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNpdV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXVfdWFydF9kcml2ZXIubnI7IGkrKykgewogCQlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2ldOwogCQlpZiAoKHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfU0lVIHx8Ci0JCSAgICAgcG9ydC0+dHlwZSA9PSBQT1JUX1ZSNDFYWF9EU0lVKSAmJiBwb3J0LT5kZXYgPT0gZGV2KQorCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09ICZkZXYtPmRldikKIAkJCXVhcnRfcmVzdW1lX3BvcnQoJnNpdV91YXJ0X2RyaXZlciwgcG9ydCk7CiAJfQogCkBAIC0xMDA5LDEzICsxMDA5LDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaXVfcGxhdGZvcm1fZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2l1X2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIlNJVSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzaXVfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2l1X3Byb2JlLAogCS5yZW1vdmUJCT0gc2l1X3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNpdV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2l1X3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiU0lVIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnI0MXh4X3NpdV9pbml0KHZvaWQpCkBAIC0xMDI2LDcgKzEwMjcsNyBAQAogCWlmIChJU19FUlIoc2l1X3BsYXRmb3JtX2RldmljZSkpCiAJCXJldHVybiBQVFJfRVJSKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOwogCkBAIC0xMDM1LDcgKzEwMzYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X3NpdV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc2l1X3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggOTA0NTE5MC4uMWU0MDc3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3Byb2JlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGR1bW15CSpkdW0gPSB0aGVfY29udHJvbGxlcjsKIAlpbnQJCXJjOwpAQCAtOTA5LDcgKzkwOSw3IEBACiAJZHVtLT5nYWRnZXQuaXNfb3RnID0gKGR1bW15X3RvX2hjZChkdW0pLT5zZWxmLm90Z19wb3J0ICE9IDApOwogCiAJc3RyY3B5IChkdW0tPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7Ci0JZHVtLT5nYWRnZXQuZGV2LnBhcmVudCA9IGRldjsKKwlkdW0tPmdhZGdldC5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwogCWR1bS0+Z2FkZ2V0LmRldi5yZWxlYXNlID0gZHVtbXlfZ2FkZ2V0X3JlbGVhc2U7CiAJcmMgPSBkZXZpY2VfcmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOwogCWlmIChyYyA8IDApCkBAIC05MTksMjYgKzkxOSwyNiBAQAogCXVzYl9idXNfZ2V0ICgmZHVtbXlfdG9faGNkIChkdW0pLT5zZWxmKTsKICNlbmRpZgogCi0JZGV2X3NldF9kcnZkYXRhIChkZXYsIGR1bSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEgKGRldiwgZHVtKTsKIAlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3VkY19yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkdW1teQkqZHVtID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEgKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEgKGRldiwgTlVMTCk7CiAJZGV2aWNlX3JlbW92ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCWRldmljZV91bnJlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfc3VzcGVuZCAoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGR1bW15X3VkY19zdXNwZW5kIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9kYmcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXNwaW5fbG9ja19pcnEgKCZkdW0tPmxvY2spOwogCWR1bS0+dWRjX3N1c3BlbmRlZCA9IDE7CiAJc2V0X2xpbmtfc3RhdGUgKGR1bSk7CkBAIC05NDksMjkgKzk0OSwzMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X3VkY19yZXN1bWUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfdWRjX3Jlc3VtZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkdW1teQkqZHVtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGR1bW15CSpkdW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X2RiZyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc3Bpbl9sb2NrX2lycSAoJmR1bS0+bG9jayk7CiAJZHVtLT51ZGNfc3VzcGVuZGVkID0gMDsKIAlzZXRfbGlua19zdGF0ZSAoZHVtKTsKIAlzcGluX3VubG9ja19pcnEgKCZkdW0tPmxvY2spOwogCi0JZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXMgKGR1bW15X3RvX2hjZCAoZHVtKSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkdW1teV91ZGNfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIGdhZGdldF9uYW1lLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR1bW15X3VkY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGR1bW15X3VkY19wcm9iZSwKIAkucmVtb3ZlCQk9IGR1bW15X3VkY19yZW1vdmUsCiAJLnN1c3BlbmQJPSBkdW1teV91ZGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGR1bW15X3VkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gKGNoYXIgKikgZ2FkZ2V0X25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTg5OCwxNCArMTg5OSwxNCBAQAogCS5idXNfcmVzdW1lID0JCWR1bW15X2J1c19yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9wcm9iZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV9oY2RfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAlpbnQJCQlyZXR2YWw7CiAKIAlkZXZfaW5mbyAoZGV2LCAiJXMsIGRyaXZlciAiIERSSVZFUl9WRVJTSU9OICJcbiIsIGRyaXZlcl9kZXNjKTsKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkICgmZHVtbXlfaGNkLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCAoJmR1bW15X2hjZCwgJmRldi0+ZGV2LCBkZXYtPmRldi5idXNfaWQpOwogCWlmICghaGNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0aGVfY29udHJvbGxlciA9IGhjZF90b19kdW1teSAoaGNkKTsKQEAgLTE5MTgsNDggKzE5MTksNDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCi0JaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCXVzYl9yZW1vdmVfaGNkIChoY2QpOwogCXVzYl9wdXRfaGNkIChoY2QpOwogCXRoZV9jb250cm9sbGVyID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV9oY2Rfc3VzcGVuZCAoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGR1bW15X2hjZF9zdXNwZW5kIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAotCWRldl9kYmcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAogCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3Jlc3VtZSAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkdW1teV9oY2RfcmVzdW1lIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQloY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CiAJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CiAKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChoY2QpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZHVtbXlfaGNkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkdW1teV9oY2RfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkdW1teV9oY2RfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdW1teV9oY2RfcmVtb3ZlLAogCS5zdXNwZW5kCT0gZHVtbXlfaGNkX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBkdW1teV9oY2RfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE5OTUsMTEgKzE5OTcsMTEgQEAKIAlpZiAodXNiX2Rpc2FibGVkICgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CisJcmV0dmFsID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZXJyX3JlZ2lzdGVyX3VkY19kcml2ZXI7CiAKQEAgLTIwMTUsOSArMjAxNyw5IEBACiBlcnJfcmVnaXN0ZXJfdWRjOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyICgmdGhlX2hjZF9wZGV2KTsKIGVycl9yZWdpc3Rlcl9oY2Q6Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOwogZXJyX3JlZ2lzdGVyX3VkY19kcml2ZXI6Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiBtb2R1bGVfaW5pdCAoaW5pdCk7CkBAIC0yMDI2LDcgKzIwMjgsNyBAQAogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyICgmdGhlX3VkY19wZGV2KTsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV9oY2RfcGRldik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X2hjZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0IChjbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKaW5kZXggNjU0NDY5Ny4uYjBmM2NkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKQEAgLTE5NzAsNyArMTk3MCw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ29rdV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopIGRyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9CXBjaV9pZHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQlnb2t1X3Byb2JlLAogCS5yZW1vdmUgPQlnb2t1X3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggYmM2MjY5Zi4uZTAyZmVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTIwODUsMjEgKzIwODUsMjEgQEAKIC8qCiAgKiAJcHJvYmUgLSBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgbGg3YTQweF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9ICZtZW1vcnk7CiAJaW50IHJldHZhbDsKIAotCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgX2Rldik7CisJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwotCWRldi0+ZGV2ID0gX2RldjsKKwlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CiAKIAlkZXZpY2VfaW5pdGlhbGl6ZSgmZGV2LT5nYWRnZXQuZGV2KTsKLQlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gX2RldjsKKwlkZXYtPmdhZGdldC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAogCXRoZV9jb250cm9sbGVyID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXVkY19yZWluaXQoZGV2KTsKQEAgLTIxMTksMTEgKzIxMTksMTEgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGxoN2E0MHhfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBsaDdhNDB4X3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9IF9kZXYtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBsaDdhNDB4X3VkYyAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7CisJREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKQEAgLTIxMzEsNyArMjEzMSw3IEBACiAKIAlmcmVlX2lycShJUlFfVVNCSU5UUiwgZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAwKTsKIAogCXRoZV9jb250cm9sbGVyID0gMDsKIApAQCAtMjE0MCwyNiArMjE0MCwyNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKLQkubmFtZSA9IChjaGFyICopZHJpdmVyX25hbWUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLnByb2JlID0gbGg3YTQweF91ZGNfcHJvYmUsCiAJLnJlbW92ZSA9IGxoN2E0MHhfdWRjX3JlbW92ZQogCSAgICAvKiBGSVhNRSBwb3dlciBtYW5hZ2VtZW50IHN1cHBvcnQgKi8KIAkgICAgLyogLnN1c3BlbmQgPSAuLi4gZGlzYWJsZSBVREMgKi8KIAkgICAgLyogLnJlc3VtZSA9IC4uLiByZS1lbmFibGUgVURDICovCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKIHsKIAlERUJVRygiJXM6ICVzIHZlcnNpb24gJXNcbiIsIF9fRlVOQ1RJT05fXywgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodWRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKaW5kZXggMGRjNmJiMC4uYzMyZTFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCkBAIC0yOTQ4LDcgKzI5NDgsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG5ldDIyODBfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JbmV0MjI4MF9wcm9iZSwKIAkucmVtb3ZlID0JbmV0MjI4MF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IDM4NzY5MmEuLmE4OTcyZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC0yNzA3LDE4ICsyNzA3LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqb2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludAkJCXN0YXR1cyA9IC1FTk9ERVY7CiAJaW50CQkJaG1jOwogCXN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIJKnhjZWl2ID0gTlVMTDsKIAljb25zdCBjaGFyCQkqdHlwZSA9IE5VTEw7Ci0Jc3RydWN0IG9tYXBfdXNiX2NvbmZpZwkqY29uZmlnID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJLyogTk9URTogICJrbm93cyIgdGhlIG9yZGVyIG9mIHRoZSByZXNvdXJjZXMhICovCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsIAotCQkJb2Rldi0+cmVzb3VyY2VbMF0uZW5kIC0gb2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxLAorCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAKKwkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKIAkJCWRyaXZlcl9uYW1lKSkgewogCQlEQkcoInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjgwMyw3ICsyODAyLDcgQEAKIAlJTkZPKCJobWMgbW9kZSAlZCwgJXMgdHJhbnNjZWl2ZXJcbiIsIGhtYywgdHlwZSk7CiAKIAkvKiBhICJnYWRnZXQiIGFic3RyYWN0cy92aXJ0dWFsaXplcyB0aGUgY29udHJvbGxlciAqLwotCXN0YXR1cyA9IG9tYXBfdWRjX3NldHVwKG9kZXYsIHhjZWl2KTsKKwlzdGF0dXMgPSBvbWFwX3VkY19zZXR1cChwZGV2LCB4Y2Vpdik7CiAJaWYgKHN0YXR1cykgewogCQlnb3RvIGNsZWFudXAwOwogCX0KQEAgLTI4MjEsMjggKzI4MjAsMjggQEAKIAkJdWRjLT5jbHJfaGFsdCA9IFVEQ19SRVNFVF9FUDsKIAogCS8qIFVTQiBnZW5lcmFsIHB1cnBvc2UgSVJROiAgZXAwLCBzdGF0ZSBjaGFuZ2VzLCBkbWEsIGV0YyAqLwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKG9kZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBvbWFwX3VkY19pcnEsCisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIG9tYXBfdWRjX2lycSwKIAkJCVNBX1NBTVBMRV9SQU5ET00sIGRyaXZlcl9uYW1lLCB1ZGMpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlFUlIoICJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAotCQkJb2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHN0YXR1cyk7CisJCQlwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgc3RhdHVzKTsKIAkJZ290byBjbGVhbnVwMTsKIAl9CiAKIAkvKiBVU0IgIm5vbi1pc28iIElSUSAoUElPIGZvciBhbGwgYnV0IGVwMCkgKi8KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgb21hcF91ZGNfcGlvX2lycSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgb21hcF91ZGNfcGlvX2lycSwKIAkJCVNBX1NBTVBMRV9SQU5ET00sICJvbWFwX3VkYyBwaW8iLCB1ZGMpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlFUlIoICJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAotCQkJb2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHN0YXR1cyk7CisJCQlwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgc3RhdHVzKTsKIAkJZ290byBjbGVhbnVwMjsKIAl9CiAjaWZkZWYJVVNFX0lTTwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKG9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBvbWFwX3VkY19pc29faXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBvbWFwX3VkY19pc29faXJxLAogCQkJU0FfSU5URVJSVVBULCAib21hcF91ZGMgaXNvIiwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCJjYW4ndCBnZXQgaXJxICVsZCwgZXJyICVkXG4iLAotCQkJb2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIHN0YXR1cyk7CisJCQlwZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgc3RhdHVzKTsKIAkJZ290byBjbGVhbnVwMzsKIAl9CiAjZW5kaWYKQEAgLTI4NTMsMTEgKzI4NTIsMTEgQEAKIAogI2lmZGVmCVVTRV9JU08KIGNsZWFudXAzOgotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzJdLnN0YXJ0LCB1ZGMpOwogI2VuZGlmCiAKIGNsZWFudXAyOgotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzFdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCB1ZGMpOwogCiBjbGVhbnVwMToKIAlrZnJlZSAodWRjKTsKQEAgLTI4NjYsMTQgKzI4NjUsMTMgQEAKIGNsZWFudXAwOgogCWlmICh4Y2VpdikKIAkJcHV0X2RldmljZSh4Y2Vpdi0+ZGV2KTsKLQlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgb21hcF91ZGNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CiAKIAlpZiAoIXVkYykKQEAgLTI4OTEsMTMgKzI4ODksMTMgQEAKIAlyZW1vdmVfcHJvY19maWxlKCk7CiAKICNpZmRlZglVU0VfSVNPCi0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbM10uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbM10uc3RhcnQsIHVkYyk7CiAjZW5kaWYKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKIAotCXJlbGVhc2VfbWVtX3JlZ2lvbihvZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKLQkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAorCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKIAogCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGMtPmdhZGdldC5kZXYpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOwpAQCAtMjkxNSw3ICsyOTEzLDcgQEAKICAqIG1heSBpbnZvbHZlIHRhbGtpbmcgdG8gYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKGUuZy4gaXNwMTMwMSkuCiAgKi8KIAotc3RhdGljIGludCBvbWFwX3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitzdGF0aWMgaW50IG9tYXBfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAl1MzIJZGV2c3RhdDsKIApAQCAtMjkzNSw3ICsyOTMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvbWFwX3VkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCURCRygicmVzdW1lICsgd2FrZXVwL1NSUFxuIik7CiAJb21hcF9wdWxsdXAoJnVkYy0+Z2FkZ2V0LCAxKTsKQEAgLTI5NDcsMTQgKzI5NDUsMTUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb21hcF91ZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2V4aXRfcChvbWFwX3VkY19yZW1vdmUpLAogCS5zdXNwZW5kCT0gb21hcF91ZGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9tYXBfdWRjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCkBAIC0yOTY1LDEzICsyOTY0LDEzIEBACiAjZW5kaWYKIAkJIiVzXG4iLCBkcml2ZXJfZGVzYywKIAkJdXNlX2RtYSA/ICAiIChkbWEpIiA6ICIiKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHVkY19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHVkY19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKaW5kZXggNTEwZDI4YTkyLi5iYjAyOGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKQEAgLTI0MzIsNyArMjQzMiw3IEBACiAvKgogICogCXByb2JlIC0gYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZQogICovCi1zdGF0aWMgaW50IF9faW5pdCBweGEyeHhfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9ICZtZW1vcnk7CiAJaW50IHJldHZhbCwgb3V0X2RtYSA9IDE7CkBAIC0yNDk1LDE5ICsyNDk1LDE5IEBACiAjZW5kaWYKIAogCS8qIG90aGVyIG5vbi1zdGF0aWMgcGFydHMgb2YgaW5pdCAqLwotCWRldi0+ZGV2ID0gX2RldjsKLQlkZXYtPm1hY2ggPSBfZGV2LT5wbGF0Zm9ybV9kYXRhOworCWRldi0+ZGV2ID0gJnBkZXYtPmRldjsKKwlkZXYtPm1hY2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CiAJZGV2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAogCWRldmljZV9pbml0aWFsaXplKCZkZXYtPmdhZGdldC5kZXYpOwotCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBfZGV2OwotCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IF9kZXYtPmRtYV9tYXNrOworCWRldi0+Z2FkZ2V0LmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCWRldi0+Z2FkZ2V0LmRldi5kbWFfbWFzayA9IHBkZXYtPmRldi5kbWFfbWFzazsKIAogCXRoZV9jb250cm9sbGVyID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXVkY19yZWluaXQoZGV2KTsKQEAgLTI1NTksMTQgKzI1NTksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcHhhMnh4X3VkY19zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIHZvaWQgcHhhMnh4X3VkY19zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpfZGV2KQogewogCXB1bGx1cF9vZmYoKTsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19leGl0IHB4YTJ4eF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CkBAIC0yNTgwLDcgKzI1ODAsNyBAQAogCQlmcmVlX2lycShMVUJCT0NLX1VTQl9ESVNDX0lSUSwgZGV2KTsKIAkJZnJlZV9pcnEoTFVCQk9DS19VU0JfSVJRLCBkZXYpOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJdGhlX2NvbnRyb2xsZXIgPSBOVUxMOwogCXJldHVybiAwOwogfQpAQCAtMjYwMSw5ICsyNjAxLDkgQEAKICAqIFZCVVMgSVJRcyBzaG91bGQgcHJvYmFibHkgYmUgaWdub3JlZCBzbyB0aGF0IHRoZSBQWEEgZGV2aWNlIGp1c3QgYWN0cwogICogImRlYWQiIHRvIFVTQiBob3N0cyB1bnRpbCBzeXN0ZW0gcmVzdW1lLgogICovCi1zdGF0aWMgaW50IHB4YTJ4eF91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmICghdWRjLT5tYWNoLT51ZGNfY29tbWFuZCkKIAkJV0FSTigiVVNCIGhvc3Qgd29uJ3QgZGV0ZWN0IGRpc2Nvbm5lY3QhXG4iKTsKQEAgLTI2MTIsOSArMjYxMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X3VkY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcHVsbHVwKHVkYywgMSk7CiAKQEAgLTI2MjgsMjcgKzI2MjgsMjggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC11ZGMiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YTJ4eF91ZGNfcHJvYmUsCiAJLnNodXRkb3duCT0gcHhhMnh4X3VkY19zaHV0ZG93biwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF91ZGNfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF91ZGNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF91ZGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAicHhhMnh4LXVkYyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHZlcnNpb24gJXNcbiIsIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCAxNDUwMDg4Li5kZmQ5YmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0zODMsNyArMzgzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlaGNpX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKikgaGNkX25hbWUsCiAJLmlkX3RhYmxlID0JcGNpX2lkcywKLQkub3duZXIgPSAJVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCmluZGV4IGY5YzNmNWIuLjgyZjY0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKQEAgLTE2MzMsMTcgKzE2MzMsMTUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0X29yX21vZHVsZSBpc3AxMTZ4X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNng7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWlmICghaGNkKQogCQlyZXR1cm4gMDsKIAlpc3AxMTZ4ID0gaGNkX3RvX2lzcDExNngoaGNkKTsKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKIAlyZW1vdmVfZGVidWdfZmlsZShpc3AxMTZ4KTsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCkBAIC0xNjYwLDE4ICsxNjU4LDE2IEBACiAKICNkZWZpbmUgcmVzb3VyY2VfbGVuKHIpICgoKHIpLT5lbmQgLSAociktPnN0YXJ0KSArIDEpCiAKLXN0YXRpYyBpbnQgX19pbml0IGlzcDExNnhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaXNwMTE2eF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IGlzcDExNnggKmlzcDExNng7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmFkZHIsICpkYXRhOwogCXZvaWQgX19pb21lbSAqYWRkcl9yZWc7CiAJdm9pZCBfX2lvbWVtICpkYXRhX3JlZzsKIAlpbnQgaXJxOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CiAJaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyMTsKQEAgLTE2ODUsNyArMTY4MSw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlpZiAoZGV2LT5kbWFfbWFzaykgeworCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKCJETUEgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyMTsKQEAgLTE3MTEsNyArMTcwNyw3IEBACiAJfQogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgaGNkICovCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmlzcDExNnhfaGNfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTE2eF9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOwogCWlmICghaGNkKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyNTsKQEAgLTE3MjMsNyArMTcxOSw3IEBACiAJaXNwMTE2eC0+YWRkcl9yZWcgPSBhZGRyX3JlZzsKIAlzcGluX2xvY2tfaW5pdCgmaXNwMTE2eC0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmlzcDExNngtPmFzeW5jKTsKLQlpc3AxMTZ4LT5ib2FyZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpc3AxMTZ4LT5ib2FyZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKCFpc3AxMTZ4LT5ib2FyZCkgewogCQlFUlIoIlBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIG5vdCBpbml0aWFsaXplZFxuIik7CkBAIC0xNzY0LDEzICsxNzYwLDEzIEBACiAvKgogICBTdXNwZW5kIG9mIHBsYXRmb3JtIGRldmljZQogKi8KLXN0YXRpYyBpbnQgaXNwMTE2eF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpc3AxMTZ4X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlWREJHKCIlczogc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNzc4LDEzICsxNzc0LDEzIEBACiAvKgogICBSZXN1bWUgcGxhdGZvcm0gZGV2aWNlCiAqLwotc3RhdGljIGludCBpc3AxMTZ4X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlzcDExNnhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0ID0gMDsKIAotCVZEQkcoIiVzOiAgc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBkZXYtPnBvd2VyLnBvd2VyX3N0YXRlKTsKKwlWREJHKCIlczogIHN0YXRlICV4XG4iLCBfX2Z1bmNfXywgZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUpOwogCi0JZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3OTYsMTMgKzE3OTIsMTQgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpc3AxMTZ4X2RyaXZlciA9IHsKLQkubmFtZSA9IChjaGFyICopaGNkX25hbWUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDExNnhfZHJpdmVyID0gewogCS5wcm9iZSA9IGlzcDExNnhfcHJvYmUsCiAJLnJlbW92ZSA9IGlzcDExNnhfcmVtb3ZlLAogCS5zdXNwZW5kID0gaXNwMTE2eF9zdXNwZW5kLAogCS5yZXN1bWUgPSBpc3AxMTZ4X3Jlc3VtZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9IChjaGFyICopaGNkX25hbWUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTgxMywxNCArMTgxMCwxNCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlORk8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXNwMTE2eF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IGlzcDExNnhfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpc3AxMTZ4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2V4aXQoaXNwMTE2eF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwppbmRleCBmMGM3OGNmLi5kOWNmM2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCkBAIC0yMjUsOSArMjI1LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcgKCJJbiBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlIik7CkBAIC0yMzksMzkgKzIzOCwzNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdXNiX2hjZF9hdTF4eHhfcmVtb3ZlKGhjZCwgcGRldik7CiAJcmV0dXJuIDA7CiB9CiAJLypUQkQqLwotLypzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKnN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTF4eHgtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImF1MXh4eC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2F1MXh4eF9pbml0ICh2b2lkKQpAQCAtMjgwLDEyICsyNzcsMTIgQEAKIAlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9hdTF4eHhfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2F1MXh4eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfYXUxeHh4X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKaW5kZXggMzM2Yzc2Ni4uMDgxZWMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCkBAIC0yMDQsOSArMjA0LDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlIik7CkBAIC0yMTgsNDAgKzIxNywzOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXVzYl9oY2RfbGg3YTQwNF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAkvKlRCRCovCi0vKnN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKnN0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiAwOwogfQotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAogCXJldHVybiAwOwogfQogKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJsaDdhNDA0LW9oY2kiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3JlbW92ZSwKIAkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImxoN2E0MDQtb2hjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9saDdhNDA0X2luaXQgKHZvaWQpCkBAIC0yNjAsMTIgKzI1NywxMiBAQAogCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfbGg3YTQwNF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX2xoN2E0MDRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCBlNDZjYzU0Li5jOWUyOWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTQzMywyNCArNDMzLDIyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHVzYl9oY2Rfb21hcF9wcm9iZSgmb2hjaV9vbWFwX2hjX2RyaXZlciwKLQkJCQl0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJcmV0dXJuIHVzYl9oY2Rfb21hcF9wcm9iZSgmb2hjaV9vbWFwX2hjX2RyaXZlciwgZGV2KTsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAKLQl1c2JfaGNkX29tYXBfcmVtb3ZlKGhjZCwgcGRldik7CisJdXNiX2hjZF9vbWFwX3JlbW92ZShoY2QsIGRldik7CiAJaWYgKG9oY2ktPnRyYW5zY2VpdmVyKSB7CiAJCSh2b2lkKSBvdGdfc2V0X2hvc3Qob2hjaS0+dHJhbnNjZWl2ZXIsIDApOwogCQlwdXRfZGV2aWNlKG9oY2ktPnRyYW5zY2VpdmVyLT5kZXYpOwogCX0KLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NTksOSArNDU3LDkgQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCi1zdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCitzdGF0aWMgaW50IG9oY2lfb21hcF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7Ci0Jc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CkBAIC00NzMsOSArNDcxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX29tYXBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koZGV2X2dldF9kcnZkYXRhKGRldikpOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldikpOwogCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQogCQltc2xlZXAoNSk7CkBAIC00OTQsMTYgKzQ5MiwxNyBAQAogLyoKICAqIERyaXZlciBkZWZpbml0aW9uIHRvIHJlZ2lzdGVyIHdpdGggdGhlIE9NQVAgYnVzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKLQkubmFtZQkJPSAib2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2Rfb21hcF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLAogI2lmZGVmCUNPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9vbWFwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX29tYXBfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvaGNpIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2Rfb21hcF9pbml0ICh2b2lkKQpAQCAtNTE1LDEyICs1MTQsMTIgQEAKIAlwcl9kZWJ1ZygiJXM6IGJsb2NrIHNpemVzOiBlZCAlWmQgdGQgJVpkXG4iLCBoY2RfbmFtZSwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX29tYXBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX29tYXBfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9vbWFwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDdjZTFkOWUuLmE1OWU1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTIxOCw3ICsyMTgsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG9oY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IDkyY2Y2ZjQuLjE4NzU1NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtMTcyLDkgKzE3Miw4IEBACiAJLnN0YXJ0X3BvcnRfcmVzZXQgPQlvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCiB9OwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldDsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKQEAgLTE4NCwyNSArMTgzLDI1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJdXNiX2hjZF9wcGNfc29jX3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInBwYy1zb2Mtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlLAogI2lmZGVmCUNPTkZJR19QTQogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHBjLXNvYy1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3BwY19zb2NfaW5pdCh2b2lkKQpAQCAtMjExLDEyICsyMTAsMTIgQEAKIAlwcl9kZWJ1ZygiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLCBzaXplb2Yoc3RydWN0IGVkKSwKIAkJCQkJCQlzaXplb2Yoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfcHBjX3NvY19jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChvaGNpX2hjZF9wcGNfc29jX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCmluZGV4IDU5ZTIwNTYuLjlkNjVlYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKQEAgLTI5MCw5ICsyOTAsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUiKTsKQEAgLTMwNCw0MSArMzAzLDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfaGNkX3B4YTI3eF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLS8vCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLS8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKy8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9weGEyN3hfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLS8vCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLS8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKy8vCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByaW50aygiJXM6IG5vdCBpbXBsZW1lbnRlZCB5ZXRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMjd4LW9oY2kiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlLAogCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLCAKLQkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLCAKKwkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyN3gtb2hjaSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3B4YTI3eF9pbml0ICh2b2lkKQpAQCAtMzQ3LDEyICszNDQsMTIgQEAKIAlwcl9kZWJ1ZyAoImJsb2NrIHNpemVzOiBlZCAlZCB0ZCAlZFxuIiwKIAkJc2l6ZW9mIChzdHJ1Y3QgZWQpLCBzaXplb2YgKHN0cnVjdCB0ZCkpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9weGEyN3hfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3B4YTI3eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfcHhhMjd4X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggZWUxZmM2MC4uMzVjYzk0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC00NTksMzkgKzQ1OSwzOCBAQAogCiAvKiBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfczNjMjQxMF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gdXNiX2hjZF9zM2MyNDEwX3Byb2JlKCZvaGNpX3MzYzI0MTBfaGNfZHJpdmVyLCBwZGV2KTsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVzYl9oY2RfczNjMjQxMF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLW9oY2kiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3JlbW92ZSwKIAkvKi5zdXNwZW5kCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9yZXN1bWUsICovCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJzM2MyNDEwLW9oY2kiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9zM2MyNDEwX2luaXQgKHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3MzYzI0MTBfY2xlYW51cCAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9zM2MyNDEwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggNTYwN2MwYS4uYTc3MjJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0xNjMxLDI0ICsxNjMxLDIxIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdAotc2w4MTFoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzbDgxMWhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJc3RydWN0IHJlc291cmNlCQkqcmVzOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0KIAlyZW1vdmVfZGVidWdfZmlsZShzbDgxMSk7CiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAogCS8qIHNvbWUgcGxhdGZvcm1zIG1heSB1c2UgSU9SRVNPVVJDRV9JTyAqLwotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwogCWlmIChyZXMpCiAJCWlvdW5tYXAoc2w4MTEtPmRhdGFfcmVnKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMpCiAJCWlvdW5tYXAoc2w4MTEtPmFkZHJfcmVnKTsKIApAQCAtMTY1NywxMSArMTY1NCwxMCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotc2w4MTFoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3NsODExaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJc3RydWN0IHNsODExCQkqc2w4MTE7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSphZGRyLCAqZGF0YTsKIAlpbnQJCQlpcnE7CiAJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CkBAIC0xNjc0LDI0ICsxNjcwLDIzIEBACiAJICogc3BlY2lmaWMgcGxhdGZvcm1fZGF0YS4gIHdlIGRvbid0IHByb2JlIGZvciBJUlFzLCBhbmQgZG8gb25seQogCSAqIG1pbmltYWwgc2FuaXR5IGNoZWNraW5nLgogCSAqLwotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwotCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8IGlycSA8IDApCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChkZXYtPm51bV9yZXNvdXJjZXMgPCAzIHx8IGlycSA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogcmVmdXNlIHRvIGNvbmZ1c2UgdXNiY29yZSAqLwotCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJaWYgKGRldi0+ZGV2LmRtYV9tYXNrKSB7CiAJCURCRygibm8gd2Ugd29uJ3QgZG1hXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogdGhlIGNoaXAgbWF5IGJlIHdpcmVkIGZvciBlaXRoZXIga2luZCBvZiBhZGRyZXNzaW5nICovCi0JYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOwogCXJldHZhbCA9IC1FQlVTWTsKIAlpZiAoIWFkZHIgfHwgIWRhdGEpIHsKLQkJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKLQkJZGF0YSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAxKTsKKwkJYWRkciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCQlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JTywgMSk7CiAJCWlmICghYWRkciB8fCAhZGF0YSkKIAkJCXJldHVybiAtRU5PREVWOwogCQlpb2FkZHIgPSAxOwpAQCAtMTcxMyw3ICsxNzA4LDcgQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmc2w4MTFoX2hjX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJnNsODExaF9oY19kcml2ZXIsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIWhjZCkgewogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjU7CkBAIC0xNzIzLDcgKzE3MTgsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnNsODExLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmc2w4MTEtPmFzeW5jKTsKLQlzbDgxMS0+Ym9hcmQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc2w4MTEtPmJvYXJkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbml0X3RpbWVyKCZzbDgxMS0+dGltZXIpOwogCXNsODExLT50aW1lci5mdW5jdGlvbiA9IHNsODExaF90aW1lcjsKIAlzbDgxMS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBzbDgxMTsKQEAgLTE3ODUsOSArMTc4MCw5IEBACiAgKi8KIAogc3RhdGljIGludAotc2w4MTFoX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzbDgxMWhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOwogCWludAkJcmV0dmFsID0gMDsKIApAQCAtMTc5NiwyNyArMTc5MSwyNyBAQAogCWVsc2UgaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpCiAJCXBvcnRfcG93ZXIoc2w4MTEsIDApOwogCWlmIChyZXR2YWwgPT0gMCkKLQkJZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOworCQlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQKLXNsODExaF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc2w4MTFoX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbDgxMQkqc2w4MTEgPSBoY2RfdG9fc2w4MTEoaGNkKTsKIAogCS8qIHdpdGggbm8gImNoZWNrIHRvIHNlZSBpZiBWQlVTIGlzIHN0aWxsIHBvd2VyZWQiIGJvYXJkIGhvb2ssCiAJICogbGV0J3MgYXNzdW1lIGl0J2Qgb25seSBiZSBwb3dlcmVkIHRvIGVuYWJsZSByZW1vdGUgd2FrZXVwLgogCSAqLwotCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQKKwlpZiAoZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORAogCQkJfHwgIWhjZC0+Y2FuX3dha2V1cCkgewogCQlzbDgxMS0+cG9ydDEgPSAwOwogCQlwb3J0X3Bvd2VyKHNsODExLCAxKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JZGV2LT5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCXJldHVybiBzbDgxMWhfYnVzX3Jlc3VtZShoY2QpOwogfQogCkBAIC0xODI5LDE2ICsxODI0LDE2IEBACiAKIAogLyogdGhpcyBkcml2ZXIgaXMgZXhwb3J0ZWQgc28gc2w4MTFfY3MgY2FuIGRlcGVuZCBvbiBpdCAqLwotc3RydWN0IGRldmljZV9kcml2ZXIgc2w4MTFoX2RyaXZlciA9IHsKLQkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKLQkuYnVzID0JCSZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQorc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbDgxMWhfZHJpdmVyID0gewogCS5wcm9iZSA9CXNsODExaF9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3Aoc2w4MTFoX3JlbW92ZSksCiAKIAkuc3VzcGVuZCA9CXNsODExaF9zdXNwZW5kLAogCS5yZXN1bWUgPQlzbDgxMWhfcmVzdW1lLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0JKGNoYXIgKikgaGNkX25hbWUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogRVhQT1JUX1NZTUJPTChzbDgxMWhfZHJpdmVyKTsKIApAQCAtMTg1MCwxMiArMTg0NSwxMiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUlORk8oImRyaXZlciAlcywgJXNcbiIsIGhjZF9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChzbDgxMWhfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzbDgxMWhfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2w4MTFoX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChzbDgxMWhfY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKaW5kZXggMTVlMGE1MS4uZDMzY2UzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwpAQCAtODMxLDcgKzgzMSw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdWhjaV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopaGNkX25hbWUsCiAJLmlkX3RhYmxlID0JdWhjaV9wY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JdXNiX2hjZF9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9CXVzYl9oY2RfcGNpX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKaW5kZXggMTkzYjQ4Mi4uNzUwY2ViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hY29ybmZiLmMKQEAgLTEyNzksNyArMTI3OSw3IEBACiAJcHJpbnRrKCJhY29ybmZiOiBmcmVlZCAlZEsgbWVtb3J5XG4iLCBtYl9mcmVlZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGFjb3JuZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgYWNvcm5mYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXVfaW50IGhfc3luYywgdl9zeW5jOwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAogCWFjb3JuZmJfaW5pdF9mYmluZm8oKTsKIAotCWN1cnJlbnRfcGFyLmRldiA9IGRldjsKKwljdXJyZW50X3Bhci5kZXYgPSAmZGV2LT5kZXY7CiAKIAlpZiAoY3VycmVudF9wYXIubW9udHlwZSA9PSAtMSkKIAkJY3VycmVudF9wYXIubW9udHlwZSA9IGFjb3JuZmJfZGV0ZWN0X21vbml0b3J0eXBlKCk7CkBAIC0xNDUzLDE1ICsxNDUzLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhY29ybmZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhY29ybmZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWNvcm5mYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gYWNvcm5mYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJhY29ybmZiIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWNvcm5mYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYWNvcm5mYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFjb3JuZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYWNvcm5mYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCBhMWZjOGJiLi4wODBkYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC01MTQsOSArNTE0LDggQEAKIAkuZmJfaW9jdGwgCT0gYXJjZmJfaW9jdGwsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhcmNmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBhcmNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAJaW50IHZpZGVvbWVtb3J5c2l6ZTsKQEAgLTU1OSw3ICs1NTgsNyBAQAogCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycjE7Ci0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAlpZiAoaXJxKSB7CiAJCXBhci0+aXJxID0gaXJxOwogCQlpZiAocmVxdWVzdF9pcnEocGFyLT5pcnEsICZhcmNmYl9pbnRlcnJ1cHQsIFNBX1NISVJRLApAQCAtNjAwLDkgKzU5OSw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBhcmNmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBhcmNmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKQEAgLTYxMiwxMSArNjExLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhcmNmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYXJjZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhcmNmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gYXJjZmJfcHJvYmUsCiAJLnJlbW92ZSA9IGFyY2ZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJhcmNmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphcmNmYl9kZXZpY2U7CkBAIC02MjgsNyArNjI4LDcgQEAKIAlpZiAoIWFyY2ZiX2VuYWJsZSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CiAJaWYgKCFyZXQpIHsKIAkJYXJjZmJfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJhcmNmYiIsIDApOwogCQlpZiAoYXJjZmJfZGV2aWNlKSB7CkBAIC02MzgsNyArNjM4LDcgQEAKIAkJfQogCQlpZiAocmV0KSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGFyY2ZiX2RldmljZSk7Ci0JCQlkcml2ZXJfdW5yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOwogCQl9CiAJfQogCXJldHVybiByZXQ7CkBAIC02NDgsNyArNjQ4LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhcmNmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYXJjZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX3BhcmFtKG51bV9jb2xzLCB1bG9uZywgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwppbmRleCA0ODY3NDk4Li42YTIxOWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKQEAgLTQ4LDYgKzQ4LDEyIEBACiAJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkoaW50ZW5zaXR5KTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsX2xvY2ssIGZsYWdzKTsKKworIAljb3JnaV9raWNrX2JhdHQgPSBzeW1ib2xfZ2V0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKyAJaWYgKGNvcmdpX2tpY2tfYmF0dCkgeworIAkJY29yZ2lfa2lja19iYXR0KCk7CisgCQlzeW1ib2xfcHV0KHNoYXJwc2xfYmF0dGVyeV9raWNrKTsKKyAJfQogfQogCiBzdGF0aWMgdm9pZCBjb3JnaWJsX2JsYW5rKGludCBibGFuaykKQEAgLTczLDEzICs3OSwxMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGNvcmdpYmxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29yZ2libF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWNvcmdpYmxfYmxhbmsoRkJfQkxBTktfUE9XRVJET1dOKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWJsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpYmxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAljb3JnaWJsX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkspOwogCXJldHVybiAwOwpAQCAtMTM3LDkgKzE0Myw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqY29yZ2lfYmFja2xpZ2h0X2RldmljZTsKIAotc3RhdGljIGludCBfX2luaXQgY29yZ2libF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBjb3JnaWJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKm1hY2hpbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBjb3JnaWJsX21hY2hpbmZvICptYWNoaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJY29yZ2libF9kYXRhLm1heF9icmlnaHRuZXNzID0gbWFjaGluZm8tPm1heF9pbnRlbnNpdHk7CiAJY29yZ2libF9tYWNoX3NldF9pbnRlbnNpdHkgPSBtYWNoaW5mby0+c2V0X2JsX2ludGVuc2l0eTsKQEAgLTE1Niw3ICsxNjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2libF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihjb3JnaV9iYWNrbGlnaHRfZGV2aWNlKTsKIApAQCAtMTY2LDIzICsxNzIsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpYmxfZHJpdmVyID0gewotCS5uYW1lCQk9ICJjb3JnaS1ibCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBjb3JnaWJsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2libF9wcm9iZSwKIAkucmVtb3ZlCQk9IGNvcmdpYmxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gY29yZ2libF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2libF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImNvcmdpLWJsIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY29yZ2libF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvcmdpYmxfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNvcmdpYmxfZXhpdCh2b2lkKQogewotIAlkcml2ZXJfdW5yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWJsX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNvcmdpYmxfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2RuZmIuYyBiL2RyaXZlcnMvdmlkZW8vZG5mYi5jCmluZGV4IDk1N2EzYWQuLjVhYmQzY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZG5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZG5mYi5jCkBAIC0yMjcsOSArMjI3LDggQEAKICAqIEluaXRpYWxpemF0aW9uCiAgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgZG5mYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkbmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgZXJyID0gMDsKIApAQCAtMjU3LDcgKzI1Niw3IEBACiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJCXJldHVybiBlcnI7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAkvKiBub3cgd2UgaGF2ZSByZWdpc3RlcmVkIHdlIGNhbiBzYWZlbHkgc2V0dXAgdGhlIGhhcmR3YXJlICovCiAJb3V0XzgoQVBfQ09OVFJPTF8zQSwgUkVTRVRfQ1JFRyk7CkBAIC0yNzEsMTAgKzI3MCwxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkbmZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJkbmZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZG5mYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gZG5mYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkbmZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG5mYl9kZXZpY2UgPSB7CkBAIC0yODgsMTIgKzI4OCwxMiBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiZG5mYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmZG5mYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZG5mYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbmZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmZG5mYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmRuZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwppbmRleCA2YTgxYTFkLi4zYjBlNzEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCkBAIC02MDksOSArNjA5LDkgQEAKIHsKIH0KIAotc3RhdGljIGludCBlcHNvbjEzNTVmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBlcHNvbjEzNTVmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBlcHNvbjEzNTVfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAKIAliYWNrbGlnaHRfZW5hYmxlKDApOwpAQCAtNjMyLDkgKzYzMiw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBfX2luaXQgZXBzb24xMzU1ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoraW50IF9faW5pdCBlcHNvbjEzNTVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGVwc29uMTM1NV9wYXIgKmRlZmF1bHRfcGFyOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXU4IHJldmlzaW9uOwpAQCAtNzEzLDcgKzcxMiw3IEBACiAJLyoKIAkgKiBPdXIgZHJpdmVyIGRhdGEuCiAJICovCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCiAJICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CkBAIC03MjEsMTUgKzcyMCwxNiBAQAogCXJldHVybiAwOwogCiAgICAgICBiYWlsOgotCWVwc29uMTM1NWZiX3JlbW92ZShkZXZpY2UpOworCWVwc29uMTM1NWZiX3JlbW92ZShkZXYpOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGVwc29uMTM1NWZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJlcHNvbjEzNTVmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVwc29uMTM1NWZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBlcHNvbjEzNTVmYl9wcm9iZSwKIAkucmVtb3ZlCT0gZXBzb24xMzU1ZmJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImVwc29uMTM1NWZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXBzb24xMzU1ZmJfZGV2aWNlID0gewpAQCAtNzQ3LDExICs3NDcsMTEgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoImVwc29uMTM1NWZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmZXBzb24xMzU1ZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtNzYyLDcgKzc2Miw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZXBzb24xMzU1ZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKaW5kZXggOWQ1ZTRmMy4uZDc0NGM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwpAQCAtMTEwNSwxMiArMTEwNSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBnYmVmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBnYmVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldikKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZ2JlZmJfcGFyICpwYXI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKICNpZm5kZWYgTU9EVUxFCiAJY2hhciAqb3B0aW9ucyA9IE5VTEw7CiAjZW5kaWYKQEAgLTEyMDQsOCArMTIwMyw4IEBACiAJCWdvdG8gb3V0X2diZV91bm1hcDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBfZGV2LT5kZXYsIGluZm8pOwotCWdiZWZiX2NyZWF0ZV9zeXNmcyhkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBfZGV2LCBpbmZvKTsKKwlnYmVmYl9jcmVhdGVfc3lzZnMoJnBfZGV2LT5kZXYpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgcmV2ICVkIEAgMHglMDh4IHVzaW5nICVka0IgbWVtb3J5XG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGdiZV9yZXZpc2lvbiwgKHVuc2lnbmVkKSBHQkVfQkFTRSwKQEAgLTEyMzEsMTAgKzEyMzAsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGdiZWZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlKiBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBnYmVmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogcF9kZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwX2Rldik7CiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWdiZV90dXJuX29mZigpOwpAQCAtMTI1MiwxOCArMTI1MCwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2JlZmJfZHJpdmVyID0gewotCS5uYW1lID0gImdiZWZiIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2JlZmJfZHJpdmVyID0gewogCS5wcm9iZSA9IGdiZWZiX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChnYmVmYl9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gImdiZWZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdiZWZiX2RldmljZTsKIAogaW50IF9faW5pdCBnYmVmYl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IGRyaXZlcl9yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKKwlpbnQgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCWdiZWZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiZ2JlZmIiLCAwKTsKIAkJaWYgKGdiZWZiX2RldmljZSkgewpAQCAtMTI3Myw3ICsxMjcyLDcgQEAKIAkJfQogCQlpZiAocmV0KSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdiZWZiX2RldmljZSk7Ci0JCQlkcml2ZXJfdW5yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOwogCQl9CiAJfQogCXJldHVybiByZXQ7CkBAIC0xMjgyLDcgKzEyODEsNyBAQAogdm9pZCBfX2V4aXQgZ2JlZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdiZWZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGdiZWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGUyMGI5ZjMuLjU5MjRjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTQyMywxOCArNDIzLDE4IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpbXhmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlwcl9kZWJ1ZygiJXNcbiIsX19GVU5DVElPTl9fKTsKIAogCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlteGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlteGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByX2RlYnVnKCIlc1xuIixfX0ZVTkNUSU9OX18pOwogCiAJaW14ZmJfZW5hYmxlX2NvbnRyb2xsZXIoZmJpKTsKQEAgLTUzOCw5ICs1MzgsOCBAQAogCXJldHVybiBmYmktPm1hcF9jcHUgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgaW14ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaW14ZmJfbWFjaF9pbmZvICppbmY7CkBAIC01NTMsMjEgKzU1MiwyMSBAQAogCWlmKCFyZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmKCFpbmYpIHsKIAkJZGV2X2VycihkZXYsIk5vIHBsYXRmb3JtX2RhdGEgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbyksIGRldik7CisJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgaW14ZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCWlmKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWZiaSA9IGluZm8tPnBhcjsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JcmV0ID0gaW14ZmJfaW5pdF9mYmluZm8oZGV2KTsKKwlyZXQgPSBpbXhmYl9pbml0X2ZiaW5mbygmcGRldi0+ZGV2KTsKIAlpZiggcmV0IDwgMCApCiAJCWdvdG8gZmFpbGVkX2luaXQ7CiAKQEAgLTYyMSwyMiArNjIwLDIxIEBACiAJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKIGZhaWxlZF9jbWFwOgogCWlmICghaW5mLT5maXhlZF9zY3JlZW5fY3B1KQotCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAorCQlkbWFfZnJlZV93cml0ZWNvbWJpbmUoJnBkZXYtPmRldixmYmktPm1hcF9zaXplLGZiaS0+bWFwX2NwdSwKIAkJICAgICAgICAgICBmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKIAlrZnJlZShpbmZvLT5wc2V1ZG9fcGFsZXR0ZSk7CiBmYWlsZWRfcmVnczoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKIGZhaWxlZF9pbml0OgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpbXhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKQEAgLTY1MSwzNiArNjQ5LDM3IEBACiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi12b2lkICBpbXhmYl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICogZGV2KQordm9pZCAgaW14ZmJfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCWlteGZiX2Rpc2FibGVfY29udHJvbGxlcihmYmkpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaW14ZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJpbXgtZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14ZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpbXhmYl9wcm9iZSwKIAkuc3VzcGVuZAk9IGlteGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpbXhmYl9yZXN1bWUsCiAJLnJlbW92ZQkJPSBpbXhmYl9yZW1vdmUsCiAJLnNodXRkb3duCT0gaW14ZmJfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImlteC1mYiIsCisJfSwKIH07CiAKIGludCBfX2luaXQgaW14ZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmlteGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGlteGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW14ZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggZjMwNWE1Yi4uN2I0Y2QyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGFmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwpAQCAtOTgwLDE3ICs5ODAsMTcgQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YWZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19ESVNBQkxFX1BNKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGFmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGFmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRU5BQkxFX1BNKTsKIAlyZXR1cm4gMDsKQEAgLTEyNjgsNyArMTI2OCw3IEBACiB9CiAjZW5kaWYKIAotaW50IF9faW5pdCBweGFmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgX19pbml0IHB4YWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpOwogCXN0cnVjdCBweGFmYl9tYWNoX2luZm8gKmluZjsKQEAgLTEyNzYsMTQgKzEyNzYsMTQgQEAKIAogCWRldl9kYmcoZGV2LCAicHhhZmJfcHJvYmVcbiIpOwogCi0JaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZiA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJcmV0ID0gLUVOT01FTTsKIAlmYmkgPSBOVUxMOwogCWlmICghaW5mKQogCQlnb3RvIGZhaWxlZDsKIAogI2lmZGVmIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUwotCXJldCA9IHB4YWZiX3BhcnNlX29wdGlvbnMoZGV2LCBnX29wdGlvbnMpOworCXJldCA9IHB4YWZiX3BhcnNlX29wdGlvbnMoJmRldi0+ZGV2LCBnX29wdGlvbnMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGZhaWxlZDsKICNlbmRpZgpAQCAtMTI5MywzNiArMTI5MywzNiBAQAogCSAqIGEgd2FybmluZyBpcyBnaXZlbi4gKi8KIAogICAgICAgICBpZiAoaW5mLT5sY2NyMCAmIExDQ1IwX0lOVkFMSURfQ09ORklHX01BU0spCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAibWFjaGluZSBMQ0NSMCBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJtYWNoaW5lIExDQ1IwIHNldHRpbmcgY29udGFpbnMgaWxsZWdhbCBiaXRzOiAlMDh4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5mLT5sY2NyMCAmIExDQ1IwX0lOVkFMSURfQ09ORklHX01BU0spOwogICAgICAgICBpZiAoaW5mLT5sY2NyMyAmIExDQ1IzX0lOVkFMSURfQ09ORklHX01BU0spCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAibWFjaGluZSBMQ0NSMyBzZXR0aW5nIGNvbnRhaW5zIGlsbGVnYWwgYml0czogJTA4eFxuIiwKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJtYWNoaW5lIExDQ1IzIHNldHRpbmcgY29udGFpbnMgaWxsZWdhbCBiaXRzOiAlMDh4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaW5mLT5sY2NyMyAmIExDQ1IzX0lOVkFMSURfQ09ORklHX01BU0spOwogICAgICAgICBpZiAoaW5mLT5sY2NyMCAmIExDQ1IwX0RQRCAmJgogCSAgICAoKGluZi0+bGNjcjAgJiBMQ0NSMF9QQVMpICE9IExDQ1IwX1BhcyB8fAogCSAgICAgKGluZi0+bGNjcjAgJiBMQ0NSMF9TRFMpICE9IExDQ1IwX1NuZ2wgfHwKIAkgICAgIChpbmYtPmxjY3IwICYgTENDUjBfQ01TKSAhPSBMQ0NSMF9Nb25vKSkKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJEb3VibGUgUGl4ZWwgRGF0YSAoRFBEKSBtb2RlIGlzIG9ubHkgdmFsaWQgaW4gcGFzc2l2ZSBtb25vIgorICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIkRvdWJsZSBQaXhlbCBEYXRhIChEUEQpIG1vZGUgaXMgb25seSB2YWxpZCBpbiBwYXNzaXZlIG1vbm8iCiAJCQkgIiBzaW5nbGUgcGFuZWwgbW9kZVxuIik7CiAgICAgICAgIGlmICgoaW5mLT5sY2NyMCAmIExDQ1IwX1BBUykgPT0gTENDUjBfQWN0ICYmCiAJICAgIChpbmYtPmxjY3IwICYgTENDUjBfU0RTKSA9PSBMQ0NSMF9EdWFsKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIkR1YWwgcGFuZWwgb25seSB2YWxpZCBpbiBwYXNzaXZlIG1vZGVcbiIpOworICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIkR1YWwgcGFuZWwgb25seSB2YWxpZCBpbiBwYXNzaXZlIG1vZGVcbiIpOwogICAgICAgICBpZiAoKGluZi0+bGNjcjAgJiBMQ0NSMF9QQVMpID09IExDQ1IwX1BhcyAmJgogICAgICAgICAgICAgIChpbmYtPnVwcGVyX21hcmdpbiB8fCBpbmYtPmxvd2VyX21hcmdpbikpCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiVXBwZXIgYW5kIGxvd2VyIG1hcmdpbnMgbXVzdCBiZSAwIGluIHBhc3NpdmUgbW9kZVxuIik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAiVXBwZXIgYW5kIGxvd2VyIG1hcmdpbnMgbXVzdCBiZSAwIGluIHBhc3NpdmUgbW9kZVxuIik7CiAjZW5kaWYKIAotCWRldl9kYmcoZGV2LCAiZ290IGEgJWR4JWR4JWQgTENEXG4iLGluZi0+eHJlcywgaW5mLT55cmVzLCBpbmYtPmJwcCk7CisJZGV2X2RiZygmZGV2LT5kZXYsICJnb3QgYSAlZHglZHglZCBMQ0RcbiIsaW5mLT54cmVzLCBpbmYtPnlyZXMsIGluZi0+YnBwKTsKIAlpZiAoaW5mLT54cmVzID09IDAgfHwgaW5mLT55cmVzID09IDAgfHwgaW5mLT5icHAgPT0gMCkgewotCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcmVzb2x1dGlvbiBvciBiaXQgZGVwdGhcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkludmFsaWQgcmVzb2x1dGlvbiBvciBiaXQgZGVwdGhcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAJcHhhZmJfYmFja2xpZ2h0X3Bvd2VyID0gaW5mLT5weGFmYl9iYWNrbGlnaHRfcG93ZXI7CiAJcHhhZmJfbGNkX3Bvd2VyID0gaW5mLT5weGFmYl9sY2RfcG93ZXI7Ci0JZmJpID0gcHhhZmJfaW5pdF9mYmluZm8oZGV2KTsKKwlmYmkgPSBweGFmYl9pbml0X2ZiaW5mbygmZGV2LT5kZXYpOwogCWlmICghZmJpKSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZnJhbWVidWZmZXIgZGV2aWNlXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlciBkZXZpY2VcbiIpOwogCQlyZXQgPSAtRU5PTUVNOyAvLyBvbmx5IHJlYXNvbiBmb3IgcHhhZmJfaW5pdF9mYmluZm8gdG8gZmFpbCBpcyBrbWFsbG9jCiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTEzMzAsMTQgKzEzMzAsMTQgQEAKIAkvKiBJbml0aWFsaXplIHZpZGVvIG1lbW9yeSAqLwogCXJldCA9IHB4YWZiX21hcF92aWRlb19tZW1vcnkoZmJpKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIFJBTTogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIFJBTTogJWRcbiIsIHJldCk7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbGVkOwogCX0KIAogCXJldCA9IHJlcXVlc3RfaXJxKElSUV9MQ0QsIHB4YWZiX2hhbmRsZV9pcnEsIFNBX0lOVEVSUlVQVCwgIkxDRCIsIGZiaSk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZhaWxlZDsKIAl9CkBAIC0xMzQ5LDExICsxMzQ5LDExIEBACiAJcHhhZmJfY2hlY2tfdmFyKCZmYmktPmZiLnZhciwgJmZiaS0+ZmIpOwogCXB4YWZiX3NldF9wYXIoJmZiaS0+ZmIpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZmJpKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGZiaSk7CiAKIAlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXIgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgZnJhbWVidWZmZXIgZGV2aWNlOiAlZFxuIiwgcmV0KTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCkBAIC0xMzc2LDE5ICsxMzc2LDIwIEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWtmcmVlKGZiaSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YWZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWZiIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YWZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhZmJfcHJvYmUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBweGFmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhZmJfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTJ4eC1mYiIsCisJfSwKIH07CiAKICNpZm5kZWYgTU9EVUxFCkBAIC0xNDE1LDcgKzE0MTYsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlweGFmYl9zZXR1cChvcHRpb24pOwogI2VuZGlmCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmcHhhZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGFmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChweGFmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcTQwZmIuYyBiL2RyaXZlcnMvdmlkZW8vcTQwZmIuYwppbmRleCBiZmM0MWYyLi5mYzkxZGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9xNDBmYi5jCkBAIC04Niw5ICs4Niw4IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBxNDBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBxNDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAKIAlpZiAoIU1BQ0hfSVNfUTQwKQpAQCAtMTI4LDEwICsxMjcsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHE0MGZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJxNDBmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHE0MGZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBxNDBmYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJxNDBmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHE0MGZiX2RldmljZSA9IHsKQEAgLTE0NSwxMiArMTQ1LDEyIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJxNDBmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcTQwZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CiAKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnE0MGZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmcTQwZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZxNDBmYl9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwppbmRleCAzZWRiZDE0Li5lNWQwZjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYwpAQCAtNTAzLDEwICs1MDMsOSBAQAogCiAKIHN0YXRpYyBpbnQKLXMxZDEzeHh4ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3MxZDEzeHh4ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKnBhciA9IE5VTEw7CiAKIAlpZiAoaW5mbykgewpAQCAtNTM0LDkgKzUzMyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1zMWQxM3h4eGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3MxZDEzeHh4ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpkZWZhdWx0X3BhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwpAQCAtNTQ4LDggKzU0Niw4IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiRXBzb24gUzFEMTNYWFggRkIgRHJpdmVyXG4iKTsKIAogCS8qIGVuYWJsZSBwbGF0Zm9ybS1kZXBlbmRlbnQgaGFyZHdhcmUgZ2x1ZSwgaWYgYW55ICovCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSkKLQkJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5wbGF0Zm9ybV9pbml0X3ZpZGVvKQogCQlwZGF0YS0+cGxhdGZvcm1faW5pdF92aWRlbygpOwpAQCAtNTcyLDE0ICs1NzAsMTQgQEAKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAogCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArMSwgInMxZDEzeHh4ZmIgbWVtIikpIHsKLQkJZGV2X2RiZyhkZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBiYWlsOwogCX0KIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LAogCQlwZGV2LT5yZXNvdXJjZVsxXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCArMSwgInMxZDEzeHh4ZmIgcmVncyIpKSB7Ci0JCWRldl9kYmcoZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gYmFpbDsKIAl9CkBAIC02NDAsNyArNjM4LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsCiAJICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CkBAIC02NDgsMTUgKzY0NiwxNSBAQAogCXJldHVybiAwOwogCiBiYWlsOgotCXMxZDEzeHh4ZmJfcmVtb3ZlKGRldik7CisJczFkMTN4eHhmYl9yZW1vdmUocGRldik7CiAJcmV0dXJuIHJldDsKIAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMxZDEzeHh4ZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczFkMTN4eHhmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BhciAqczFkZmIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgKnBkYXRhID0gTlVMTDsKIApAQCAtNjY0LDggKzY2Miw4IEBACiAJbGNkX2VuYWJsZShzMWRmYiwgMCk7CiAJY3J0X2VuYWJsZShzMWRmYiwgMCk7CiAKLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhKQotCQlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpZiAoZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAjaWYgMAogCWlmICghczFkZmItPmRpc3Bfc2F2ZSkKQEAgLTcwMSw5ICs2OTksOSBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzMWQxM3h4eGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMxZDEzeHh4ZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKnMxZGZiID0gaW5mby0+cGFyOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CiAKQEAgLTcxNCw4ICs3MTIsOCBAQAogCXdoaWxlICgoczFkMTN4eHhmYl9yZWFkcmVnKHMxZGZiLCBTMURSRUdfUFNfU1RBVFVTKSAmIDB4MDEpKQogCQl1ZGVsYXkoMTApOwogCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSkKLQkJcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaWYgKGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWlmIChzMWRmYi0+cmVnc19zYXZlKSB7CiAJCS8qIHdpbGwgd3JpdGUgUk8gcmVncywgKnNob3VsZCogZ2V0IGF3YXkgd2l0aCBpdCA6KSAqLwpAQCAtNzQxLDE1ICs3MzksMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMxZDEzeHh4ZmJfZHJpdmVyID0gewotCS5uYW1lCQk9IFMxRF9ERVZJQ0VOQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczFkMTN4eHhmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMxZDEzeHh4ZmJfcHJvYmUsCiAJLnJlbW92ZQkJPSBzMWQxM3h4eGZiX3JlbW92ZSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHMxZDEzeHh4ZmJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMxZDEzeHh4ZmJfcmVzdW1lCisJLnJlc3VtZQkJPSBzMWQxM3h4eGZiX3Jlc3VtZSwKICNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IFMxRF9ERVZJQ0VOQU1FLAorCX0sCiB9OwogCiAKQEAgLTc1OSwxNCArNzU4LDE0IEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJzMWQxM3h4eGZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczFkMTN4eHhmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMxZDEzeHh4ZmJfZHJpdmVyKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBfX2V4aXQKIHMxZDEzeHh4ZmJfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMxZDEzeHh4ZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoczFkMTN4eHhmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IDg1NWE2NzcuLmNlNmU3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtNjM0LDE5ICs2MzQsMTggQEAKIAogc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXT0iczNjMjQxMGZiIjsKIAotaW50IF9faW5pdCBzM2MyNDEwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCBzM2MyNDEwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmluZm87CiAJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbzsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9odyAqbXJlZ3M7CiAJaW50IHJldDsKIAlpbnQgaXJxOwogCWludCBpOwogCi0JbWFjaF9pbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCW1hY2hfaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmIChtYWNoX2luZm8gPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwibm8gcGxhdGZvcm0gZGF0YSBmb3IgbGNkLCBjYW5ub3QgYXR0YWNoXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCJubyBwbGF0Zm9ybSBkYXRhIGZvciBsY2QsIGNhbm5vdCBhdHRhY2hcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTY1NCwxMSArNjUzLDExIEBACiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gaXJxIGZvciBkZXZpY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjQxMGZiX2luZm8pLCBkZXYpOworCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgczNjMjQxMGZiX2luZm8pLCAmcGRldi0+ZGV2KTsKIAlpZiAoIWZiaW5mbykgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC02NjYsNyArNjY1LDcgQEAKIAogCWluZm8gPSBmYmluZm8tPnBhcjsKIAlpbmZvLT5mYiA9IGZiaW5mbzsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBmYmluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaW5mbyk7CiAKIAlzM2MyNDEwZmJfaW5pdF9yZWdpc3RlcnMoaW5mbyk7CiAKQEAgLTY3Niw3ICs2NzUsNyBAQAogCiAJbWVtY3B5KCZpbmZvLT5yZWdzLCAmbWFjaF9pbmZvLT5yZWdzLCBzaXplb2YoaW5mby0+cmVncykpOwogCi0JaW5mby0+bWFjaF9pbmZvCQkgICAgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5mby0+bWFjaF9pbmZvCQkgICAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCWZiaW5mby0+Zml4LnR5cGUJICAgID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOwogCWZiaW5mby0+Zml4LnR5cGVfYXV4CSAgICA9IDA7CkBAIC03MzUsNyArNzM0LDcgQEAKIAogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgczNjMjQxMGZiX2lycSwgU0FfSU5URVJSVVBULCBwZGV2LT5uYW1lLCBpbmZvKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBpcnEgJWQgLSBlcnIgJWRcbiIsIGlycSwgcmV0KTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGdldCBpcnEgJWQgLSBlcnIgJWRcbiIsIGlycSwgcmV0KTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIHJlbGVhc2VfbWVtOwogCX0KQEAgLTc3Myw3ICs3NzIsNyBAQAogCX0KIAogCS8qIGNyZWF0ZSBkZXZpY2UgZmlsZXMgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGVidWcpOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZGVidWcpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKIAkJZmJpbmZvLT5ub2RlLCBmYmluZm8tPmZpeC5pZCk7CkBAIC04MTYsMTAgKzgxNSw5IEBACiAvKgogICogIENsZWFudXAKICAqLwotc3RhdGljIGludCBzM2MyNDEwZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzM2MyNDEwZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOwogCWludCBpcnE7CiAKQEAgLTg0Nyw5ICs4NDUsOSBAQAogCiAvKiBzdXNwZW5kIGFuZCByZXN1bWUgc3VwcG9ydCBmb3IgdGhlIGxjZCBjb250cm9sbGVyICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0MTBmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAogCXMzYzI0MTBmYl9zdG9wX2xjZCgpOwpAQCAtODY0LDkgKzg2Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAogCWNsa19lbmFibGUoaW5mby0+Y2xrKTsKQEAgLTg4MiwyNCArODgwLDI1IEBACiAjZGVmaW5lIHMzYzI0MTBmYl9yZXN1bWUgIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiczNjMjQxMC1sY2QiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTBmYl9wcm9iZSwKKwkucmVtb3ZlCQk9IHMzYzI0MTBmYl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNDEwZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0MTBmYl9yZXN1bWUsCi0JLnJlbW92ZQkJPSBzM2MyNDEwZmJfcmVtb3ZlCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0MTAtbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIGludCBfX2RldmluaXQgczNjMjQxMGZiX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHMzYzI0MTBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwZmJfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggYTUxODQ1Ny4uMmVhMTM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtMTMwOCwxNyArMTMwOCwxNyBAQAogICogUG93ZXIgbWFuYWdlbWVudCBob29rcy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCwKICAqIHVubGlrZSB0aGUgYmxhbmsgZnVuY3Rpb25zIGFib3ZlLCBzbyB3ZSBtYXkgc2xlZXAuCiAgKi8KLXN0YXRpYyBpbnQgc2ExMTAwZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2ExMTAwZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0RJU0FCTEVfUE0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMGZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTEwMGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19FTkFCTEVfUE0pOwogCXJldHVybiAwOwpAQCAtMTQ1Miw3ICsxNDUyLDcgQEAKIAlyZXR1cm4gZmJpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzYTExMDBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBzYTExMDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmk7CiAJaW50IHJldDsKQEAgLTE0NjAsNyArMTQ2MCw3IEBACiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oMHhiMDEwMDAwMCwgMHgxMDAwMCwgIkxDRCIpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZmJpID0gc2ExMTAwZmJfaW5pdF9mYmluZm8oZGV2KTsKKwlmYmkgPSBzYTExMDBmYl9pbml0X2ZiaW5mbygmcGRldi0+ZGV2KTsKIAlyZXQgPSAtRU5PTUVNOwogCWlmICghZmJpKQogCQlnb3RvIGZhaWxlZDsKQEAgLTE0ODgsNyArMTQ4OCw3IEBACiAJICovCiAJc2ExMTAwZmJfY2hlY2tfdmFyKCZmYmktPmZiLnZhciwgJmZiaS0+ZmIpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZmJpKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBmYmkpOwogCiAJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiaS0+ZmIpOwogCWlmIChyZXQgPCAwKQpAQCAtMTUwNSwxOCArMTUwNSwxOSBAQAogCXJldHVybiAwOwogCiBmYWlsZWQ6Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZmJpKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oMHhiMDEwMDAwMCwgMHgxMDAwMCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTEwMGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic2ExMXgwLWZiIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTEwMGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwZmJfcHJvYmUsCiAJLnN1c3BlbmQJPSBzYTExMDBmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwZmJfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzYTExeDAtZmIiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IHNhMTEwMGZiX2luaXQodm9pZCkKQEAgLTE1MjQsNyArMTUyNSw3IEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJzYTExMDBmYiIsIE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMTAwZmJfZHJpdmVyKTsKIH0KIAogaW50IF9faW5pdCBzYTExMDBmYl9zZXR1cChjaGFyICpvcHRpb25zKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwppbmRleCAyZTg3NjlkLi43MDU0NjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYwpAQCAtNzUwLDkgKzc1MCw4IEBACiAvKgogICogIEluaXRpYWxpc2F0aW9uCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHNnaXZ3ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgc2dpdndmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IHNnaXZ3X3BhciAqcGFyOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWNoYXIgKm1vbml0b3I7CkBAIC04MTMsNyArODEyLDcgQEAKIAkJZ290byBmYWlsX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiBTR0kgREJFIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIHVzaW5nICVsZEsgb2YgdmlkZW8gbWVtb3J5IGF0ICUjbHhcbiIsICAgICAgCiAJCWluZm8tPm5vZGUsIHNnaXZ3ZmJfbWVtX3NpemUgPj4gMTAsIHNnaXZ3ZmJfbWVtX3BoeXMpOwpAQCAtODMxLDkgKzgzMCw5IEBACiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotc3RhdGljIGludCBzZ2l2d2ZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHNnaXZ3ZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvKSB7CiAJCXN0cnVjdCBzZ2l2d19wYXIgKnBhciA9IGluZm8tPnBhcjsKQEAgLTg0NywxMSArODQ2LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzZ2l2d2ZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJzZ2l2d2ZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2dpdndmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gc2dpdndmYl9wcm9iZSwKIAkucmVtb3ZlCT0gc2dpdndmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAic2dpdndmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZ2l2d2ZiX2RldmljZTsKQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAlzZ2l2d2ZiX3NldHVwKG9wdGlvbik7CiAjZW5kaWYKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKIAlpZiAoIXJldCkgewogCQlzZ2l2d2ZiX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic2dpdndmYiIsIDApOwogCQlpZiAoc2dpdndmYl9kZXZpY2UpIHsKQEAgLTg3NSw3ICs4NzUsNyBAQAogCQl9IGVsc2UKIAkJCXJldCA9IC1FTk9NRU07CiAJCWlmIChyZXQpIHsKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOwogCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChzZ2l2d2ZiX2RldmljZSk7CiAJCX0KIAl9CkBAIC04OTAsNyArODkwLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzZ2l2d2ZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZ2l2d2ZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfZXhpdChzZ2l2d2ZiX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggZTI1ZWFlMS4uMmMzYWEyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC0yNDUsOSArMjQ1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdmVzYWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHZlc2FmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IGksIGVycjsKIAl1bnNpZ25lZCBpbnQgc2l6ZV92bW9kZTsKQEAgLTQ4MCwxMCArNDc5LDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHZlc2FmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAidmVzYWZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmVzYWZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSB2ZXNhZmJfcHJvYmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAidmVzYWZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmVzYWZiX2RldmljZSA9IHsKQEAgLTQ5OCwxMiArNDk4LDEyIEBACiAJLyogaWdub3JlIGVycm9yIHJldHVybiBvZiBmYl9nZXRfb3B0aW9ucyAqLwogCWZiX2dldF9vcHRpb25zKCJ2ZXNhZmIiLCAmb3B0aW9uKTsKIAl2ZXNhZmJfc2V0dXAob3B0aW9uKTsKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnZlc2FmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CiAKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnZlc2FmYl9kZXZpY2UpOwogCQlpZiAocmV0KQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnZlc2FmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZlc2FmYl9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmZiLmMKaW5kZXggODc5NGRjNS4uZmZhMWFkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCkBAIC00MDMsOSArNDAzLDggQEAKIAkvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgZ29lcyB0byB6ZXJvLgogfQogCi1zdGF0aWMgaW50IF9faW5pdCB2ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgdmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIApAQCAtNDQ3LDcgKzQ0Niw3IEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZXJyMjsKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiZmIlZDogVmlydHVhbCBmcmFtZSBidWZmZXIgZGV2aWNlLCB1c2luZyAlbGRLIG9mIHZpZGVvIG1lbW9yeVxuIiwKQEAgLTQ2Miw5ICs0NjEsOSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgdmZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IHZmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8pIHsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKQEAgLTQ3NCwxMSArNDczLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB2ZmJfZHJpdmVyID0gewotCS5uYW1lCT0gInZmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZmYl9kcml2ZXIgPSB7CiAJLnByb2JlCT0gdmZiX3Byb2JlLAogCS5yZW1vdmUgPSB2ZmJfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInZmYiIsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZmYl9kZXZpY2UgPSB7CkBAIC01MDQsMTIgKzUwNCwxMiBAQAogCWlmICghdmZiX2VuYWJsZSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmdmZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmdmZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC01MjAsNyArNTIwLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB2ZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZ2ZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdmZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfZXhpdCh2ZmJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwppbmRleCA0OGU3MGYxLi5kYWE0NjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKQEAgLTQzNyw5ICs0MzcsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCB3MTAwZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgdzEwMGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHcxMDBmYl9wYXIgKnBhcj1pbmZvLT5wYXI7CiAJc3RydWN0IHcxMDBfdGdfaW5mbyAqdGcgPSBwYXItPm1hY2gtPnRnOwogCkBAIC00NTIsOSArNDUyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3MTAwZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdzEwMGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHcxMDBmYl9wYXIgKnBhcj1pbmZvLT5wYXI7CiAJc3RydWN0IHcxMDBfdGdfaW5mbyAqdGcgPSBwYXItPm1hY2gtPnRnOwogCkBAIC00NzMsMTMgKzQ3MywxMiBAQAogI2VuZGlmCiAKIAotaW50IF9faW5pdCB3MTAwZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IF9faW5pdCB3MTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgZXJyID0gLUVJTzsKIAlzdHJ1Y3QgdzEwMGZiX21hY2hfaW5mbyAqaW5mOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gTlVMTDsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJdW5zaWduZWQgaW50IGNoaXBfaWQ7CiAKQEAgLTUyMiw5ICs1MjEsOSBAQAogCX0KIAogCXBhciA9IGluZm8tPnBhcjsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAotCWluZiA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmYgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlwYXItPmNoaXBfaWQgPSBjaGlwX2lkOwogCXBhci0+bWFjaCA9IGluZjsKIAlwYXItPmZhc3RwbGxfbW9kZSA9IDA7CkBAIC02MDAsMTAgKzU5OSwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmFzdHBsbGNsayk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JlZ19yZWFkKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmxpcCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ19yZWFkKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ193cml0ZSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9mbGlwKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6ICVzIGZyYW1lIGJ1ZmZlciBkZXZpY2VcbiIsIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCk7CiAJcmV0dXJuIDA7CkBAIC02MjIsMTUgKzYyMSwxNSBAQAogfQogCiAKLXN0YXRpYyBpbnQgdzEwMGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHcxMDBmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHcxMDBmYl9wYXIgKnBhcj1pbmZvLT5wYXI7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmFzdHBsbGNsayk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3JlZ19yZWFkKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZmxpcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ19yZWFkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3JlZ193cml0ZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9mbGlwKTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAKQEAgLTE0NDgsMjMgKzE0NDcsMjQgQEAKIAl3cml0ZWwoMHgwMDAwMDAwMiwgcmVtYXBwZWRfcmVncyArIG1tR0VOX0lOVF9TVEFUVVMpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdzEwMGZiX2RyaXZlciA9IHsKLQkubmFtZQkJPSAidzEwMGZiIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHcxMDBmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHcxMDBmYl9wcm9iZSwKIAkucmVtb3ZlCQk9IHcxMDBmYl9yZW1vdmUsCiAJLnN1c3BlbmQJPSB3MTAwZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHcxMDBmYl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIncxMDBmYiIsCisJfSwKIH07CiAKIGludCBfX2RldmluaXQgdzEwMGZiX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ3MTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3MTAwZmJfZHJpdmVyKTsKIH0KIAogdm9pZCBfX2V4aXQgdzEwMGZiX2NsZWFudXAodm9pZCkKIHsKLSAJZHJpdmVyX3VucmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ3MTAwZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQodzEwMGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggN2Q2YWUzNi4uZDUyNTVlNiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xNjAxLDkgKzE2MDEsMTAgQEAKIAkgIFBDIG9wZXJhdGluZyBzeXN0ZW1zLiAgVGhlIENJRlMgcHJvdG9jb2wgaXMgZnVsbHkgc3VwcG9ydGVkIGJ5IAogCSAgZmlsZSBzZXJ2ZXJzIHN1Y2ggYXMgV2luZG93cyAyMDAwIChpbmNsdWRpbmcgV2luZG93cyAyMDAzLCBOVCA0ICAKIAkgIGFuZCBXaW5kb3dzIFhQKSBhcyB3ZWxsIGJ5IFNhbWJhICh3aGljaCBwcm92aWRlcyBleGNlbGxlbnQgQ0lGUwotCSAgc2VydmVyIHN1cHBvcnQgZm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKS4gQ3VycmVudGx5Ci0JICB5b3UgbXVzdCB1c2UgdGhlIHNtYmZzIGNsaWVudCBmaWxlc3lzdGVtIHRvIGFjY2VzcyBvbGRlciBTTUIgc2VydmVycwotCSAgc3VjaCBhcyBXaW5kb3dzIDl4IGFuZCBPUy8yLgorCSAgc2VydmVyIHN1cHBvcnQgZm9yIExpbnV4IGFuZCBtYW55IG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zKS4gTGltaXRlZAorCSAgc3VwcG9ydCBmb3IgV2luZG93cyBNRSBhbmQgc2ltaWxhciBzZXJ2ZXJzIGlzIHByb3ZpZGVkIGFzIHdlbGwuIAorCSAgWW91IG11c3QgdXNlIHRoZSBzbWJmcyBjbGllbnQgZmlsZXN5c3RlbSB0byBhY2Nlc3Mgb2xkZXIgU01CIHNlcnZlcnMKKwkgIHN1Y2ggYXMgT1MvMiBhbmQgRE9TLgogCiAJICBUaGUgaW50ZW50IG9mIHRoZSBjaWZzIG1vZHVsZSBpcyB0byBwcm92aWRlIGFuIGFkdmFuY2VkCiAJICBuZXR3b3JrIGZpbGUgc3lzdGVtIGNsaWVudCBmb3IgbW91bnRpbmcgdG8gQ0lGUyBjb21wbGlhbnQgc2VydmVycywgCkBAIC0xNjE0LDcgKzE2MTUsNyBAQAogCSAgY2lmcyBpZiBydW5uaW5nIG9ubHkgYSAoU2FtYmEpIHNlcnZlci4gSXQgaXMgcG9zc2libGUgdG8gZW5hYmxlIGJvdGgKIAkgIHNtYmZzIGFuZCBjaWZzIChlLmcuIGlmIHlvdSBhcmUgdXNpbmcgQ0lGUyBmb3IgYWNjZXNzaW5nIFdpbmRvd3MgMjAwMwogCSAgYW5kIFNhbWJhIDMgc2VydmVycywgYW5kIHNtYmZzIGZvciBhY2Nlc3Npbmcgb2xkIHNlcnZlcnMpLiBJZiB5b3UgbmVlZCAKLQkgIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgMjAwMyBzZXJ2ZXJzIGZyb20gdGhpcyBtYWNoaW5lLCBzYXkgWS4KKwkgIHRvIG1vdW50IHRvIFNhbWJhIG9yIFdpbmRvd3MgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgogCiBjb25maWcgQ0lGU19TVEFUUwogICAgICAgICBib29sICJDSUZTIHN0YXRpc3RpY3MiCkBAIC0xNjIzLDggKzE2MjQsMjIgQEAKICAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHN0YXRpc3RpY3MgZm9yIGVhY2ggc2VydmVyIHNoYXJlCiAJICBtb3VudGVkIGJ5IHRoZSBjaWZzIGNsaWVudCB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9TdGF0cwogCitjb25maWcgQ0lGU19TVEFUUzIKKwlib29sICJDSUZTIGV4dGVuZGVkIHN0YXRpc3RpY3MiCisJZGVwZW5kcyBvbiBDSUZTX1NUQVRTCisJaGVscAorCSAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBhbGxvdyBtb3JlIGRldGFpbGVkIHN0YXRpc3RpY3Mgb24gU01CCisJICByZXF1ZXN0IHRpbWluZyB0byBiZSBkaXNwbGF5ZWQgaW4gL3Byb2MvZnMvY2lmcy9EZWJ1Z0RhdGEgYW5kIGFsc28KKwkgIGFsbG93IG9wdGlvbmFsIGxvZ2dpbmcgb2Ygc2xvdyByZXNwb25zZXMgdG8gZG1lc2cgKGRlcGVuZGluZyBvbiB0aGUKKwkgIHZhbHVlIG9mIC9wcm9jL2ZzL2NpZnMvY2lmc0ZZSSwgc2VlIGZzL2NpZnMvUkVBRE1FIGZvciBtb3JlIGRldGFpbHMpLgorCSAgVGhlc2UgYWRkaXRpb25hbCBzdGF0aXN0aWNzIG1heSBoYXZlIGEgbWlub3IgZWZmZWN0IG9uIHBlcmZvcm1hbmNlCisJICBhbmQgbWVtb3J5IHV0aWxpemF0aW9uLgorCisJICBVbmxlc3MgeW91IGFyZSBhIGRldmVsb3BlciBvciBhcmUgZG9pbmcgbmV0d29yayBwZXJmb3JtYW5jZSBhbmFseXNpcworCSAgb3IgdHVuaW5nLCBzYXkgTi4KKwogY29uZmlnIENJRlNfWEFUVFIKLSAgICAgICAgYm9vbCAiQ0lGUyBleHRlbmRlZCBhdHRyaWJ1dGVzIChFWFBFUklNRU5UQUwpIgorICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMiCiAgICAgICAgIGRlcGVuZHMgb24gQ0lGUwogICAgICAgICBoZWxwCiAgICAgICAgICAgRXh0ZW5kZWQgYXR0cmlidXRlcyBhcmUgbmFtZTp2YWx1ZSBwYWlycyBhc3NvY2lhdGVkIHdpdGggaW5vZGVzIGJ5CkBAIC0xNjM2LDExICsxNjUxLDExIEBACiAgICAgICAgICAgcHJlZmFjZWQgYnkgdGhlIHVzZXIgbmFtZXNwYWNlIHByZWZpeC4gVGhlIHN5c3RlbSBuYW1lc3BhY2UKICAgICAgICAgICAodXNlZCBieSBzb21lIGZpbGVzeXN0ZW1zIHRvIHN0b3JlIEFDTHMpIGlzIG5vdCBzdXBwb3J0ZWQgYXQKICAgICAgICAgICB0aGlzIHRpbWUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ0lGU19QT1NJWAotICAgICAgICBib29sICJDSUZTIFBPU0lYIEV4dGVuc2lvbnMgKEVYUEVSSU1FTlRBTCkiCisgICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyIKICAgICAgICAgZGVwZW5kcyBvbiBDSUZTX1hBVFRSCiAgICAgICAgIGhlbHAKICAgICAgICAgICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBjaWZzIGNsaWVudCB0byBhdHRlbXB0IHRvCkBAIC0xNjUzLDEwICsxNjY4LDI4IEBACiAKIGNvbmZpZyBDSUZTX0VYUEVSSU1FTlRBTAogCSAgYm9vbCAiQ0lGUyBFeHBlcmltZW50YWwgRmVhdHVyZXMgKEVYUEVSSU1FTlRBTCkiCi0JICBkZXBlbmRzIG9uIENJRlMKKwkgIGRlcGVuZHMgb24gQ0lGUyAmJiBFWFBFUklNRU5UQUwKIAkgIGhlbHAKLQkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzCi0JICAgIGFyZSBoaWdobHkgZXhwZXJpbWVudGFsLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwkgICAgRW5hYmxlcyBjaWZzIGZlYXR1cmVzIHVuZGVyIHRlc3RpbmcuIFRoZXNlIGZlYXR1cmVzIGFyZQorCSAgICBleHBlcmltZW50YWwgYW5kIGN1cnJlbnRseSBpbmNsdWRlIHN1cHBvcnQgZm9yIHdyaXRlcGFnZXMKKwkgICAgKG11bHRpcGFnZSB3cml0ZWJlaGluZCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMpIGFuZCBkaXJlY3RvcnkKKwkgICAgY2hhbmdlIG5vdGlmaWNhdGlvbiBpZSBmY250bChGX0ROT1RJRlkpIGFzIHdlbGwgYXMgc29tZSBzZWN1cml0eQorCSAgICBpbXByb3ZlbWVudHMuICBTb21lIGFsc28gZGVwZW5kIG9uIHNldHRpbmcgYXQgcnVudGltZSB0aGUKKwkgICAgcHNldWRvLWZpbGUgL3Byb2MvZnMvY2lmcy9FeHBlcmltZW50YWwgKHdoaWNoIGlzIGRpc2FibGVkIGJ5CisJICAgIGRlZmF1bHQpLiBTZWUgdGhlIGZpbGUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscy4KKworCSAgICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQ0lGU19VUENBTEwKKwkgIGJvb2wgIkNJRlMgS2VyYmVyb3MvU1BORUdPIGFkdmFuY2VkIHNlc3Npb24gc2V0dXAgKEVYUEVSSU1FTlRBTCkiCisJICBkZXBlbmRzIG9uIENJRlNfRVhQRVJJTUVOVEFMCisJICBzZWxlY3QgQ09OTkVDVE9SCisJICBoZWxwCisJICAgIEVuYWJsZXMgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCB3aWxsIGJlIHVzZWQgdG8gY29udGFjdAorCSAgICB1c2Vyc3BhY2UgaGVscGVyIHV0aWxpdGllcyB0byBwcm92aWRlIFNQTkVHTyBwYWNrYWdlZCBLZXJiZXJvcworCSAgICB0aWNrZXRzIHdoaWNoIGFyZSBuZWVkZWQgdG8gbW91bnQgdG8gY2VydGFpbiBzZWN1cmUgc2VydmVycworCSAgICAoZm9yIHdoaWNoIG1vcmUgc2VjdXJlIEtlcmJlcm9zIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkKS4gSWYKKwkgICAgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE5DUF9GUwogCXRyaXN0YXRlICJOQ1AgZmlsZSBzeXN0ZW0gc3VwcG9ydCAodG8gbW91bnQgTmV0V2FyZSB2b2x1bWVzKSIKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA1YmFiMjRmLi5lYWIzNzUwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0yLDcgKzIsNyBAQAogLS0tLS0tLS0tLS0tCiBEZWZlciBjbG9zZSBvZiBhIGZpbGUgaGFuZGxlIHNsaWdodGx5IGlmIHBlbmRpbmcgd3JpdGVzIGRlcGVuZCBvbiB0aGF0IGZpbGUgaGFuZGxlCiAodGhpcyByZWR1Y2VzIHRoZSBFQkFERiBiYWQgZmlsZSBoYW5kbGUgZXJyb3JzIHRoYXQgY2FuIGJlIGxvZ2dlZCB1bmRlciBoZWF2eQotc3RyZXNzIG9uIHdyaXRlcykuCitzdHJlc3Mgb24gd3JpdGVzKS4gTW9kaWZ5IGNpZnMgS2NvbmZpZyBvcHRpb25zIHRvIGV4cG9zZSBDT05GSUdfQ0lGU19TVEFUUzIgCiAKIFZlcnNpb24gMS4zOAogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwppbmRleCA5OWEwOTZkLi40ZTEyMDUzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKQEAgLTc0LDEwICs3NCwxMSBAQAogCQkJY0VSUk9SKDEsCiAJCQkgICAgICAgKCJjaWZzX3N0cnRvVUNTOiBjaGFyMnVuaSByZXR1cm5lZCAlZCIsCiAJCQkJY2hhcmxlbikpOwotCQkJdG9baV0gPSBjcHVfdG9fbGUxNigweDAwM2YpOwkvKiBhIHF1ZXN0aW9uIG1hcmsgKi8KKwkJCS8qIEEgcXVlc3Rpb24gbWFyayAqLworCQkJdG9baV0gPSAod2NoYXJfdCljcHVfdG9fbGUxNigweDAwM2YpOwogCQkJY2hhcmxlbiA9IDE7CiAJCX0gZWxzZSAKLQkJCXRvW2ldID0gY3B1X3RvX2xlMTYodG9baV0pOworCQkJdG9baV0gPSAod2NoYXJfdCljcHVfdG9fbGUxNih0b1tpXSk7CiAKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDg3NzA5NWEuLjY4MmIwMjMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNDA1LDYgKzQwNSw3IEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKIHN0YXRpYyB2b2lkIGNpZnNfdW1vdW50X2JlZ2luKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNibG9jaykKIHsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwpAQCAtNDIyLDE2ICs0MjMsMTggQEAKIAkJdGNvbi0+dGlkU3RhdHVzID0gQ2lmc0V4aXRpbmc7CiAJdXAoJnRjb24tPnRjb25TZW0pOwogCisJLyogY2FuY2VsX2JybF9yZXF1ZXN0cyh0Y29uKTsgKi8KKwkvKiBjYW5jZWxfbm90aWZ5X3JlcXVlc3RzKHRjb24pOyAqLwogCWlmKHRjb24tPnNlcyAmJiB0Y29uLT5zZXMtPnNlcnZlcikKIAl7Ci0JCWNFUlJPUigxLCgid2FrZSB1cCB0YXNrcyBub3cgLSB1bW91bnQgYmVnaW4gbm90IGNvbXBsZXRlIikpOworCQljRllJKDEsKCJ3YWtlIHVwIHRhc2tzIG5vdyAtIHVtb3VudCBiZWdpbiBub3QgY29tcGxldGUiKSk7CiAJCXdha2VfdXBfYWxsKCZ0Y29uLT5zZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKIAl9CiAvKiBCQiBGSVhNRSAtIGZpbmlzaCBhZGQgY2hlY2tzIGZvciB0aWRTdGF0dXMgQkIgKi8KIAogCXJldHVybjsKIH0KLQkKKyNlbmRpZgkKIAogc3RhdGljIGludCBjaWZzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKQEAgLTQ1MCw3ICs0NTMsOSBAQAogICAgdW5sZXNzIGxhdGVyIHdlIGFkZCBsYXp5IGNsb3NlIG9mIGlub2RlcyBvciB1bmxlc3MgdGhlIGtlcm5lbCBmb3JnZXRzIHRvIGNhbGwKICAgIHVzIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIHJlbGVhc2VzIChjbG9zZXMpIGFzIG9wZW5zICovCiAJLnNob3dfb3B0aW9ucyA9IGNpZnNfc2hvd19vcHRpb25zLAotLyoJLnVtb3VudF9iZWdpbiAgID0gY2lmc191bW91bnRfYmVnaW4sICovIC8qIEJCIGZpbmlzaCBpbiB0aGUgZnV0dXJlICovCisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisJLnVtb3VudF9iZWdpbiAgID0gY2lmc191bW91bnRfYmVnaW4sCisjZW5kaWYKIAkucmVtb3VudF9mcyA9IGNpZnNfcmVtb3VudCwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IGQzMDExNDliMS4uMWI3M2Y0ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC0yNDIsMTEgKzI0MiwxMSBAQAogCQkJY29uc3QgaW50IG5ldGZpZCwgY29uc3QgdW5zaWduZWQgaW50IGNvdW50LAogCQkJY29uc3QgX191NjQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgKm5ieXRlcywgCiAJCQlzdHJ1Y3Qga3ZlYyAqaW92LCBjb25zdCBpbnQgbnZlYywgY29uc3QgaW50IGxvbmdfb3ApOworI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwogZXh0ZXJuIGludCBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIF9fdTY0ICogaW5vZGVfbnVtYmVyLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCAKIAkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIGV4dGVybiBpbnQgY2lmc19jb252ZXJ0VUNTcGF0aChjaGFyICp0YXJnZXQsIGNvbnN0IF9fbGUxNiAqc291cmNlLCBpbnQgbWF4bGVuLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqIGNvZGVwYWdlKTsKIGV4dGVybiBpbnQgY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKiB0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IG1heGxlbiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTMxMmJmYy4uYTUzYzU5NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTI5NTksNyArMjk1OSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiBpbnQKIENJRlNHZXRTcnZJbm9kZU51bWJlcihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCkBAIC0zMDUzLDcgKzMwNTIsNiBAQAogCQlnb3RvIEdldElub2RlTnVtYmVyUmV0cnk7CiAJcmV0dXJuIHJjOwogfQotI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCiAKIGludAogQ0lGU0dldERGU1JlZmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jbl9jaWZzLmggYi9mcy9jaWZzL2NuX2NpZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU5Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2lmcy9jbl9jaWZzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICAgZnMvY2lmcy9jbl9jaWZzLmgKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIKKyAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0NOX0NJRlNfSAorI2RlZmluZSBfQ05fQ0lGU19ICisjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKworc3RydWN0IGNpZnNfdXBjYWxsIHsKKwljaGFyIHNpZ25hdHVyZVs0XTsgLyogQ0lGUyAqLworCWVudW0gY29tbWFuZCB7CisJCUNJRlNfR0VUX0lQID0gMHgwMDAwMDAwMSwgICAvKiBnZXQgaXAgYWRkcmVzcyBmb3IgaG9zdG5hbWUgKi8KKwkJQ0lGU19HRVRfU0VDQkxPQiA9IDB4MDAwMDAwMDIsIC8qIGdldCBTUE5FR08gd3JhcHBlZCBibG9iICovCisJfSBjb21tYW5kOworCS8qIHVuaW9uIGNpZnMgdXBjYWxsIGRhdGEgZm9sbG93cyAqLworfTsKKyNlbmRpZiAvKiBDSUZTX1VQQ0FMTCAqLworI2VuZGlmIC8qIF9DTl9DSUZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDUwYWI3NS4uMmNiNjIwNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJudGxtc3NwLmgiCiAjaW5jbHVkZSAibnRlcnIuaCIKICNpbmNsdWRlICJyZmMxMDAycGR1LmgiCisjaW5jbHVkZSAiY25fY2lmcy5oIgogCiAjZGVmaW5lIENJRlNfUE9SVCA0NDUKICNkZWZpbmUgUkZDMTAwMV9QT1JUIDEzOQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDkxMmQ0MDEuLjkyM2QwNzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTI4Myw3ICsyODMsNiBAQAogCQkJICAgdGhlcmUgV2luZG93cyBzZXJ2ZXIgb3IgbmV0d29yayBhcHBsaWFuY2VzIGZvciB3aGljaAogCQkJICAgSW5kZXhOdW1iZXIgZmllbGQgaXMgbm90IGd1YXJhbnRlZWQgdW5pcXVlPyAqLwogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCQkKIAkJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pewogCQkJCWludCByYzEgPSAwOwogCQkJCV9fdTY0IGlub2RlX251bTsKQEAgLTI5OSw3ICsyOTgsNiBAQAogCQkJCX0gZWxzZSAvKiBkbyB3ZSBuZWVkIGNhc3Qgb3IgaGFzaCB0byBpbm8/ICovCiAJCQkJCSgqcGlub2RlKS0+aV9pbm8gPSBpbm9kZV9udW07CiAJCQl9IC8qIGVsc2UgaW5vIGluY3JlbWVudGVkIHRvIHVuaXF1ZSBudW0gaW4gbmV3X2lub2RlKi8KLSNlbmRpZiAvKiBDSUZTX0VYUEVSSU1FTlRBTCAqLwogCQkJaW5zZXJ0X2lub2RlX2hhc2goKnBpbm9kZSk7CiAJCX0KIAkJaW5vZGUgPSAqcGlub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAppbmRleCA1NWQ4NWVlLi5jZmI0MTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaApAQCAtNDQsNSArNDQsNiBAQAogI2luY2x1ZGUgIml4ZHA0MjUuaCIKICNpbmNsdWRlICJjb3lvdGUuaCIKICNpbmNsdWRlICJwcnBtYzExMDAuaCIKKyNpbmNsdWRlICJuc2x1Mi5oIgogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaAppbmRleCBjYTgwODI4Li4yY2Y0OTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKQEAgLTkzLDQgKzkzLDExIEBACiAjZGVmaW5lCUlSUV9DT1lPVEVfUENJX1NMT1QxCUlSUV9JWFA0WFhfR1BJTzExCiAjZGVmaW5lCUlSUV9DT1lPVEVfSURFCQlJUlFfSVhQNFhYX0dQSU81CiAKKy8qCisgKiBOU0xVMiBib2FyZCBJUlFzCisgKi8KKyNkZWZpbmUgICAgICAgIElSUV9OU0xVMl9QQ0lfSU5UQSAgICAgIElSUV9JWFA0WFhfR1BJTzExCisjZGVmaW5lICAgICAgICBJUlFfTlNMVTJfUENJX0lOVEIgICAgICBJUlFfSVhQNFhYX0dQSU8xMAorI2RlZmluZSAgICAgICAgSVJRX05TTFUyX1BDSV9JTlRDICAgICAgSVJRX0lYUDRYWF9HUElPOQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiMzQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbnNsdTIuaAorICoKKyAqIE5TTFUyIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBNYXJrIFJha2VzIDxtcmFrZXMgQVQgbWFjLmNvbT4KKyAqIE1haW50YWluZXJzOiBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZworICoKKyAqIGJhc2VkIG9uIGl4ZHA0MjUuaDoKKyAqCUNvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IgorI2VuZGlmCisKKyNkZWZpbmUgTlNMVTJfRkxBU0hfQkFTRQlJWFA0WFhfRVhQX0JVU19DUzBfQkFTRV9QSFlTCisjZGVmaW5lIE5TTFUyX0ZMQVNIX1NJWkUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFCisKKyNkZWZpbmUgTlNMVTJfU0RBX1BJTgkJNworI2RlZmluZSBOU0xVMl9TQ0xfUElOCQk2CisKKy8qCisgKiBOU0xVMiBQQ0kgSVJRcworICovCisjZGVmaW5lIE5TTFUyX1BDSV9NQVhfREVWCTMKKyNkZWZpbmUgTlNMVTJfUENJX0lSUV9MSU5FUwkzCisKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIE5TTFUyX1BDSV9JTlRBX1BJTgkxMQorI2RlZmluZSBOU0xVMl9QQ0lfSU5UQl9QSU4JMTAKKyNkZWZpbmUgTlNMVTJfUENJX0lOVENfUElOCTkKKyNkZWZpbmUgTlNMVTJfUENJX0lOVERfUElOCTgKKworCisvKiBOU0xVMiBUaW1lciAqLworI2RlZmluZSBOU0xVMl9GUkVRIDY2MDAwMDAwCisjZGVmaW5lIE5TTFUyX0NMT0NLX1RJQ0tfUkFURSAoKChOU0xVMl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBOU0xVMl9DTE9DS19USUNLU19QRVJfVVNFQyAoKE5TTFUyX0NMT0NLX1RJQ0tfUkFURSArIFVTRUNfUEVSX1NFQy8yKSAvIFVTRUNfUEVSX1NFQykKKworLyogR1BJTyAqLworCisjZGVmaW5lIE5TTFUyX0dQSU8wCQkwCisjZGVmaW5lIE5TTFUyX0dQSU8xCQkxCisjZGVmaW5lIE5TTFUyX0dQSU8yCQkyCisjZGVmaW5lIE5TTFUyX0dQSU8zCQkzCisjZGVmaW5lIE5TTFUyX0dQSU80CQk0CisjZGVmaW5lIE5TTFUyX0dQSU81CQk1CisjZGVmaW5lIE5TTFUyX0dQSU82CQk2CisjZGVmaW5lIE5TTFUyX0dQSU83CQk3CisjZGVmaW5lIE5TTFUyX0dQSU84CQk4CisjZGVmaW5lIE5TTFUyX0dQSU85CQk5CisjZGVmaW5lIE5TTFUyX0dQSU8xMAkJMTAKKyNkZWZpbmUgTlNMVTJfR1BJTzExCQkxMQorI2RlZmluZSBOU0xVMl9HUElPMTIJCTEyCisjZGVmaW5lIE5TTFUyX0dQSU8xMwkJMTMKKyNkZWZpbmUgTlNMVTJfR1BJTzE0CQkxNAorI2RlZmluZSBOU0xVMl9HUElPMTUJCTE1CisKKy8qIEJ1dHRvbnMgKi8KKworI2RlZmluZSBOU0xVMl9QQl9HUElPCQlOU0xVMl9HUElPNQorI2RlZmluZSBOU0xVMl9QT19HUElPCQlOU0xVMl9HUElPOAkvKiBwb3dlciBvZmYgKi8KKyNkZWZpbmUgTlNMVTJfUkJfR1BJTwkJTlNMVTJfR1BJTzEyCisKKyNkZWZpbmUgTlNMVTJfUEJfSVJRCQlJUlFfSVhQNFhYX0dQSU81CisjZGVmaW5lIE5TTFUyX1JCX0lSUQkJSVJRX0lYUDRYWF9HUElPMTIKKworI2RlZmluZSBOU0xVMl9QQl9CTQkJKDFMIDw8IE5TTFUyX1BCX0dQSU8pCisjZGVmaW5lIE5TTFUyX1BPX0JNCQkoMUwgPDwgTlNMVTJfUE9fR1BJTykKKyNkZWZpbmUgTlNMVTJfUkJfQk0JCSgxTCA8PCBOU0xVMl9SQl9HUElPKQorCisvKiBCdXp6ZXIgKi8KKworI2RlZmluZSBOU0xVMl9HUElPX0JVWloJCTQKKyNkZWZpbmUgTlNMVTJfQlpfQk0JCSgxTCA8PCBOU0xVMl9HUElPX0JVWlopCisvKiBMRURzICovCisKKyNkZWZpbmUgTlNMVTJfTEVEX1JFRAkJTlNMVTJfR1BJTzAKKyNkZWZpbmUgTlNMVTJfTEVEX0dSTgkJTlNMVTJfR1BJTzEKKworI2RlZmluZSBOU0xVMl9MRURfUkVEX0JNCSgxTCA8PCBOU0xVMl9MRURfUkVEKQorI2RlZmluZSBOU0xVMl9MRURfR1JOX0JNCSgxTCA8PCBOU0xVMl9MRURfR1JOKQorCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMQkJTlNMVTJfR1BJTzIKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0syCQlOU0xVMl9HUElPMworCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMV9CTQkoMUwgPDwgTlNMVTJfR1BJTzIpCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMl9CTQkoMUwgPDwgTlNMVTJfR1BJTzMpCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCmluZGV4IGQ2NGVlOTIuLjMzZWEyOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKQEAgLTM0LDUgKzM0LDExIEBACiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQgICAgICAgICAgICAgMHgwODAwMDMwMAogI2RlZmluZSBPTUFQMjRYWF9FVEhSX0dQSU9fSVJRCQk5MgogCisjZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKKworI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCisKKyNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9INF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oCmluZGV4IDc5NTc0ZTAuLmIzY2YzMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9ICiAKLSNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTVYWCkKIAogI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQogI2RlZmluZSBPTUFQX1NEUkFNX0RFVklDRQkJCUQyNTZNXzFYMTZfNEIKQEAgLTQ0LDcgKzQ0LDcgQEAKIHVuc2lnbmVkIGNoYXIgZnBnYV9yZWFkKGludCByZWcpOwogI2VuZGlmCiAKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKICNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IGNoYXIJCSpuYW1lOworCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwlfX3UzMgkJCWZsYWdzOworCXZvaWQgX19pb21lbQkJKmVuYWJsZV9yZWc7CisJX191OAkJCWVuYWJsZV9iaXQ7CisJX191OAkJCXJhdGVfb2Zmc2V0OworCV9fdTgJCQlzcmNfb2Zmc2V0OworCV9fczgJCQl1c2Vjb3VudDsKKwl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CisJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKKwlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7CisJaW50CQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKK307CisKK3N0cnVjdCBjbGtfZnVuY3Rpb25zIHsKKwlpbnQJCSgqY2xrX2VuYWJsZSkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19kaXNhYmxlKShzdHJ1Y3QgY2xrICpjbGspOworCWludAkJKCpjbGtfdXNlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX3VudXNlKShzdHJ1Y3QgY2xrICpjbGspOworCWxvbmcJCSgqY2xrX3JvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKwlpbnQJCSgqY2xrX3NldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJaW50CQkoKmNsa19zZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7CisJc3RydWN0IGNsayAqCSgqY2xrX2dldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZAkJKCpjbGtfYWxsb3dfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19kZW55X2lkbGUpKHN0cnVjdCBjbGsgKmNsayk7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50IG1wdXJhdGU7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjbG9ja3M7CitleHRlcm4gc3BpbmxvY2tfdCBjbG9ja2Z3X2xvY2s7CisKK2V4dGVybiBpbnQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKTsKK2V4dGVybiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitleHRlcm4gdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworCisvKiBDbG9jayBmbGFncyAqLworI2RlZmluZSBSQVRFX0NLQ1RMCQkoMSA8PCAwKQkvKiBNYWluIGZpeGVkIHJhdGlvIGNsb2NrcyAqLworI2RlZmluZSBSQVRFX0ZJWEVECQkoMSA8PCAxKQkvKiBGaXhlZCBjbG9jayByYXRlICovCisjZGVmaW5lIFJBVEVfUFJPUEFHQVRFUwkJKDEgPDwgMikJLyogUHJvZ3JhbSBjaGlsZHJlbiB0b28gKi8KKyNkZWZpbmUgVklSVFVBTF9DTE9DSwkJKDEgPDwgMykJLyogQ29tcG9zaXRlIGNsb2NrIGZyb20gdGFibGUgKi8KKyNkZWZpbmUgQUxXQVlTX0VOQUJMRUQJCSgxIDw8IDQpCS8qIENsb2NrIGNhbm5vdCBiZSBkaXNhYmxlZCAqLworI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCSgxIDw8IDUpCS8qIFVzZSAzMi1iaXQgYWNjZXNzICovCisjZGVmaW5lIFZJUlRVQUxfSU9fQUREUkVTUwkoMSA8PCA2KQkvKiBDbG9jayBpbiB2aXJ0dWFsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0xPQ0tfSURMRV9DT05UUk9MCSgxIDw8IDcpCisjZGVmaW5lIENMT0NLX05PX0lETEVfUEFSRU5UCSgxIDw8IDgpCisjZGVmaW5lIERFTEFZRURfQVBQCQkoMSA8PCA5KQkvKiBEZWxheSBhcHBsaWNhdGlvbiBvZiBjbG9jayAqLworI2RlZmluZSBDT05GSUdfUEFSVElDSVBBTlQJKDEgPDwgMTApCS8qIEZ1bmRhbWVudGFsIGNsb2NrICovCisjZGVmaW5lIENNX01QVV9TRUwxCQkoMSA8PCAxMSkJLyogRG9tYWluIGRpdmlkZXIvc291cmNlICovCisjZGVmaW5lIENNX0RTUF9TRUwxCQkoMSA8PCAxMikKKyNkZWZpbmUgQ01fR0ZYX1NFTDEJCSgxIDw8IDEzKQorI2RlZmluZSBDTV9NT0RFTV9TRUwxCQkoMSA8PCAxNCkKKyNkZWZpbmUgQ01fQ09SRV9TRUwxCQkoMSA8PCAxNSkJLyogU2V0cyBkaXZpZGVyIGZvciBtYW55ICovCisjZGVmaW5lIENNX0NPUkVfU0VMMgkJKDEgPDwgMTYpCS8qIHNldHMgcGFyZW50IGZvciBHUFQgKi8KKyNkZWZpbmUgQ01fV0tVUF9TRUwxCQkoMSA8PCAxNykKKyNkZWZpbmUgQ01fUExMX1NFTDEJCSgxIDw8IDE4KQorI2RlZmluZSBDTV9QTExfU0VMMgkJKDEgPDwgMTkpCisjZGVmaW5lIENNX1NZU0NMS09VVF9TRUwxCSgxIDw8IDIwKQorI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCSgxIDw8IDIxKQorI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkoMSA8PCAyMikKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJKDEgPDwgMjMpCisjZGVmaW5lIENMT0NLX0lOX09NQVAyNDJYCSgxIDw8IDI0KQorI2RlZmluZSBDTE9DS19JTl9PTUFQMjQzWAkoMSA8PCAyNSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaAppbmRleCAyYTY3NmI0Li4wOGQ1OGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKQEAgLTMxLDYgKzMxLDYgQEAKIAogZXh0ZXJuIHZvaWQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKLWV4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2luaXQoaW50IHBvcnRzW10pOworZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9PTUFQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaAppbmRleCAxMTE5ZTJiLi5lYzdlYjY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKQEAgLTI4LDEyICsyOCw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKIAotI2RlZmluZSBPTUFQX0RJRV9JRF8wCQkweGZmZmUxODAwCi0jZGVmaW5lIE9NQVBfRElFX0lEXzEJCTB4ZmZmZTE4MDQKLSNkZWZpbmUgT01BUF9QUk9EVUNUSU9OX0lEXzAJMHhmZmZlMjAwMAotI2RlZmluZSBPTUFQX1BST0RVQ1RJT05fSURfMQkweGZmZmUyMDA0Ci0jZGVmaW5lIE9NQVAzMl9JRF8wCQkweGZmZmVkNDAwCi0jZGVmaW5lIE9NQVAzMl9JRF8xCQkweGZmZmVkNDA0CisjZGVmaW5lIG9tYXAyX2NwdV9yZXYoKQkJKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKIAogLyoKICAqIFRlc3QgaWYgbXVsdGljb3JlIE9NQVAgc3VwcG9ydCBpcyBuZWVkZWQKQEAgLTUwLDcgKzQ1LDcgQEAKICMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAogIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogIyBpZmRlZiBPTUFQX05BTUUKICMgIHVuZGVmICBNVUxUSV9PTUFQMQogIyAgZGVmaW5lIE1VTFRJX09NQVAxCkBAIC03OSw5ICs3NCwxMSBAQAogICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgaW50byBjcHUgY2xhc3Nlcy4KICAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgogICogY3B1X2lzX29tYXA3eHgoKToJVHJ1ZSBmb3IgT01BUDczMAotICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIE9NQVAxNTEwIGFuZCBPTUFQNTkxMAorICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIE9NQVAxNTEwLCBPTUFQNTkxMCBhbmQgT01BUDMxMAogICogY3B1X2lzX29tYXAxNnh4KCk6CVRydWUgZm9yIE9NQVAxNjEwLCBPTUFQNTkxMiBhbmQgT01BUDE3MTAKLSAqIGNwdV9pc19vbWFwMjR4eCgpOglUcnVlIGZvciBPTUFQMjQyMAorICogY3B1X2lzX29tYXAyNHh4KCk6CVRydWUgZm9yIE9NQVAyNDIwLCBPTUFQMjQyMiwgT01BUDI0MjMsIE9NQVAyNDMwCisgKiBjcHVfaXNfb21hcDI0MngoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMworICogY3B1X2lzX29tYXAyNDN4KCk6CVRydWUgZm9yIE9NQVAyNDMwCiAgKi8KICNkZWZpbmUgR0VUX09NQVBfQ0xBU1MJKHN5c3RlbV9yZXYgJiAweGZmKQogCkBAIC05MSwyMiArODgsMzUgQEAKIAlyZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7CVwKIH0KIAorI2RlZmluZSBHRVRfT01BUF9TVUJDTEFTUwkoKHN5c3RlbV9yZXYgPj4gMjApICYgMHgwZmZmKQorCisjZGVmaW5lIElTX09NQVBfU1VCQ0xBU1Moc3ViY2xhc3MsIGlkKQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyNzdWJjbGFzcyAodm9pZCkJCVwKK3sJCQkJCQkJXAorCXJldHVybiAoR0VUX09NQVBfU1VCQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsJXAorfQorCiBJU19PTUFQX0NMQVNTKDd4eCwgMHgwNykKIElTX09NQVBfQ0xBU1MoMTV4eCwgMHgxNSkKIElTX09NQVBfQ0xBU1MoMTZ4eCwgMHgxNikKIElTX09NQVBfQ0xBU1MoMjR4eCwgMHgyNCkKIAorSVNfT01BUF9TVUJDTEFTUygyNDJ4LCAweDI0MikKK0lTX09NQVBfU1VCQ0xBU1MoMjQzeCwgMHgyNDMpCisKICNkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDI0eHgoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MngoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJMAogCiAjaWYgZGVmaW5lZChNVUxUSV9PTUFQMSkKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJaXNfb21hcDd4eCgpCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCWlzX29tYXAxNXh4KCkKICMgZW5kaWYKQEAgLTExOSw3ICsxMjksNyBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMTV4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQkxCiAjIGVuZGlmCkBAIC0xMjksMTMgKzEzOSwxOCBAQAogIyBlbmRpZgogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjR4eAorIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyeAorIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQzeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpCQkxCisjICBkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkJCWlzX29tYXAyNDJ4KCkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJaXNfb21hcDI0M3goKQogIyBlbmRpZgogI2VuZGlmCiAKIC8qCiAgKiBNYWNyb3MgdG8gZGV0ZWN0IGluZGl2aWR1YWwgY3B1IHR5cGVzLgogICogVGhlc2UgYXJlIG9ubHkgcmFyZWx5IG5lZWRlZC4KKyAqIGNwdV9pc19vbWFwMzMwKCk6CVRydWUgZm9yIE9NQVAzMzAKICAqIGNwdV9pc19vbWFwNzMwKCk6CVRydWUgZm9yIE9NQVA3MzAKICAqIGNwdV9pc19vbWFwMTUxMCgpOglUcnVlIGZvciBPTUFQMTUxMAogICogY3B1X2lzX29tYXAxNjEwKCk6CVRydWUgZm9yIE9NQVAxNjEwCkBAIC0xNDQsNiArMTU5LDkgQEAKICAqIGNwdV9pc19vbWFwMTYyMSgpOglUcnVlIGZvciBPTUFQMTYyMQogICogY3B1X2lzX29tYXAxNzEwKCk6CVRydWUgZm9yIE9NQVAxNzEwCiAgKiBjcHVfaXNfb21hcDI0MjAoKToJVHJ1ZSBmb3IgT01BUDI0MjAKKyAqIGNwdV9pc19vbWFwMjQyMigpOglUcnVlIGZvciBPTUFQMjQyMgorICogY3B1X2lzX29tYXAyNDIzKCk6CVRydWUgZm9yIE9NQVAyNDIzCisgKiBjcHVfaXNfb21hcDI0MzAoKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqLwogI2RlZmluZSBHRVRfT01BUF9UWVBFCSgoc3lzdGVtX3JldiA+PiAxNikgJiAweGZmZmYpCiAKQEAgLTE1Myw2ICsxNzEsNyBAQAogCXJldHVybiAoR0VUX09NQVBfVFlQRSA9PSAoaWQpKSA/IDEgOiAwOwkJXAogfQogCitJU19PTUFQX1RZUEUoMzEwLCAweDAzMTApCiBJU19PTUFQX1RZUEUoNzMwLCAweDA3MzApCiBJU19PTUFQX1RZUEUoMTUxMCwgMHgxNTEwKQogSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYxMCkKQEAgLTE2MSw3ICsxODAsMTEgQEAKIElTX09NQVBfVFlQRSgxNjIxLCAweDE2MjEpCiBJU19PTUFQX1RZUEUoMTcxMCwgMHgxNzEwKQogSVNfT01BUF9UWVBFKDI0MjAsIDB4MjQyMCkKK0lTX09NQVBfVFlQRSgyNDIyLCAweDI0MjIpCitJU19PTUFQX1RZUEUoMjQyMywgMHgyNDIzKQorSVNfT01BUF9UWVBFKDI0MzAsIDB4MjQzMCkKIAorI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkJCTAKQEAgLTE3MCwzMSArMTkzLDMzIEBACiAjZGVmaW5lIGNwdV9pc19vbWFwMTYyMSgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMygpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQkwCiAKICNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKICMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJaXNfb21hcDE1MTAoKQotIyBlbmRpZgogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwNzMwCiAjICBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQkxCi0jIGVuZGlmCiAjZW5kaWYKIAogLyoKICAqIFdoZXRoZXIgd2UgaGF2ZSBNVUxUSV9PTUFQMSBvciBub3QsIHdlIHN0aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2gKLSAqIGJldHdlZW4gMTYxMUIvNTkxMiBhbmQgMTcxMC4KKyAqIGJldHdlZW4gMzMwIHZzLiAxNTEwIGFuZCAxNjExQi81OTEyIHZzLiAxNzEwLgogICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwMzEwCisjIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKKyMgZGVmaW5lIGNwdV9pc19vbWFwMzEwKCkJCWlzX29tYXAzMTAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCWlzX29tYXAxNTEwKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKICMgdW5kZWYgIGNwdV9pc19vbWFwMTYxMAogIyB1bmRlZiAgY3B1X2lzX29tYXAxNjExCkBAIC0yMDgsOSArMjMzLDIwIEBACiAjIGRlZmluZSBjcHVfaXNfb21hcDE3MTAoKQkJaXNfb21hcDE3MTAoKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpCQkxCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMAorIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIyCisjIHVuZGVmICBjcHVfaXNfb21hcDI0MjMKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQzMAorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCWlzX29tYXAyNDIwKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpCQlpc19vbWFwMjQyMigpCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MjMoKQkJaXNfb21hcDI0MjMoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCWlzX29tYXAyNDMwKCkKICNlbmRpZgogCisvKiBNYWNyb3MgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgT01BUDEgb3IgT01BUDIgKi8KKyNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkJKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgXAorCQkJCWNwdV9pc19vbWFwMTZ4eCgpKQorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDIoKQljcHVfaXNfb21hcDI0eHgoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCmluZGV4IDA0ZWJlZjUuLmNjYmNiNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaApAQCAtMjIsOSArMjIsMTA5IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCQkweGZmZmZmZmZmCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJCTAKKworLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMSAqLworI2RlZmluZSBPTUFQX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCisjZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCisjZGVmaW5lIE9NQVBfRE1BX0dTQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA0KQorI2RlZmluZSBPTUFQX0RNQV9HUlNUCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwOCkKKyNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ0KQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ2KQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQorI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRjKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTApCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDUyKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18yCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18zCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1OCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKKyNkZWZpbmUgT01BUF9ETUFfUENIMl9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ2MCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKKyNkZWZpbmUgT01BUF9ETUFfUENIRF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKKworLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQkFTRQkJKEw0XzI0WFhfQkFTRSArIDB4NTYwMDApCisjZGVmaW5lIE9NQVBfRE1BNF9SRVZJU0lPTgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9ETUE0X0dDUl9SRUcJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MGMpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MWMpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjApCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjQpCisjZGVmaW5lIE9NQVBfRE1BNF9TWVNTVEFUVVMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjgpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjQpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NmMpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzApCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzQJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzQpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCiAjZGVmaW5lIE9NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlQJMTcKIAorLyogQ29tbW9uIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciBvbWFwMSAqLworI2RlZmluZSBPTUFQX0RNQV9DU0RQX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDApCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQorI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDQpCisjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA2KQorI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTIpCisjZGVmaW5lIE9NQVBfRE1BX0NTRklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQorI2RlZmluZSBPTUFQX0RNQV9DU0FDX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTgpCisjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxYSkKKyNkZWZpbmUgT01BUF9ETUFfQ0RFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQorI2RlZmluZSBPTUFQX0RNQV9DREZJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWUpCisjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjgpCisKKyNlbHNlCisKKyNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkzMgkvKiBSRVZJU0lUOiBJcyB0aGlzIDMyICsgMj8gKi8KKworLyogQ29tbW9uIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLworI2RlZmluZSBPTUFQX0RNQV9DQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCisjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg0KQorI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg4KQorI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OGMpCisjZGVmaW5lIE9NQVBfRE1BX0NTRFBfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTApCisjZGVmaW5lIE9NQVBfRE1BX0NFTl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk4KQorI2RlZmluZSBPTUFQX0RNQV9DU0VJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE0KQorI2RlZmluZSBPTUFQX0RNQV9DU0ZJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE4KQorI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGFjKQorI2RlZmluZSBPTUFQX0RNQV9DREZJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGIwKQorI2RlZmluZSBPTUFQX0RNQV9DU0FDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI0KQorI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI4KQorCisjZW5kaWYKKworLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgb25seSBvbiBvbWFwMSAqLworI2RlZmluZSBPTUFQMV9ETUFfQ1NTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDgpCisjZGVmaW5lIE9NQVAxX0RNQV9DU1NBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKKyNkZWZpbmUgT01BUDFfRE1BX0NEU0FfTF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9VX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCisjZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKKyNkZWZpbmUgT01BUDFfRE1BX0NDUjJfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyNCkKKyNkZWZpbmUgT01BUDFfRE1BX0NPTE9SX1VfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIyKQorI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQorCisvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAyICovCisjZGVmaW5lIE9NQVAyX0RNQV9DU1NBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDljKQorI2RlZmluZSBPTUFQMl9ETUFfQ0RTQV9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhMCkKKyNkZWZpbmUgT01BUDJfRE1BX0NDRU5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YmMpCisjZGVmaW5lIE9NQVAyX0RNQV9DQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQorI2RlZmluZSBPTUFQMl9ETUFfQ09MT1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YzQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERNQSBjaGFubmVscyBmb3Igb21hcDEgKi8KICNkZWZpbmUgT01BUF9ETUFfTk9fREVWSUNFCQkwCiAjZGVmaW5lIE9NQVBfRE1BX01DU0kxX1RYCQkxCiAjZGVmaW5lIE9NQVBfRE1BX01DU0kxX1JYCQkyCkBAIC04NSwyOSArMTg1LDcyIEBACiAjZGVmaW5lIE9NQVBfRE1BX01NQzJfUlgJCTU1CiAjZGVmaW5lIE9NQVBfRE1BX0NSWVBUT19ERVNfT1VUCQk1NgogCisvKiBETUEgY2hhbm5lbHMgZm9yIDI0eHggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX05PX0RFVklDRQkJMAorI2RlZmluZSBPTUFQMjRYWF9ETUFfWFRJX0RNQQkJMQkvKiBTX0RNQV8wICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVEwCTIJLyogU19ETUFfMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX05ETUFfUkVRMQkzCS8qIFNfRE1BXzIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0dQTUMJCTQJLyogU19ETUFfMyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfR0ZYCQk1CS8qIFNfRE1BXzQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0RTUwkJNgkvKiBTX0RNQV81ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9WTFlOUV9UWAkJNwkvKiBTX0RNQV82ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9DV1QJCTgJLyogU19ETUFfNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1RYCQk5CS8qIFNfRE1BXzggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19SWAkJMTAJLyogU19ETUFfOSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYCQkxMQkvKiBTX0RNQV8xMCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1JYCQkxMgkvKiBTX0RNQV8xMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU0hBMU1ENV9SWAkJMTMJLyogU19ETUFfMTIgKi8KIAotI2RlZmluZSBPTUFQX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCi0jZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCi0jZGVmaW5lIE9NQVBfRE1BX0dTQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA0KQotI2RlZmluZSBPTUFQX0RNQV9HUlNUCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwOCkKLSNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ0KQotI2RlZmluZSBPTUFQX0RNQV9QQ0gwX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ2KQotI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQotI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRhKQotI2RlZmluZSBPTUFQX0RNQV9QQ0hEX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRjKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTApCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDUyKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18yCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18zCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1OCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKLSNkZWZpbmUgT01BUF9ETUFfUENIMl9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ2MCkKLSNkZWZpbmUgT01BUF9ETUFfUENIMF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MCkKLSNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKLSNkZWZpbmUgT01BUF9ETUFfUENIRF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19SRAkJMTcJLyogU19ETUFfMTYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19XUgkJMTgJLyogU19ETUFfMTcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9SRAkxOQkvKiBTX0RNQV8xOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1dSCTIwCS8qIFNfRE1BXzE5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfUkQJMjEJLyogU19ETUFfMjAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9XUgkyMgkvKiBTX0RNQV8yMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1JECTIzCS8qIFNfRE1BXzIyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfV1IJMjQJLyogU19ETUFfMjMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9SRAkyNQkvKiBTX0RNQV8yNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1dSCTI2CS8qIFNfRE1BXzI1ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1RYCQkyNwkvKiBTX0RNQV8yNiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9SWAkJMjgJLyogU19ETUFfMjcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfVFgJCTI5CS8qIFNfRE1BXzI4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1JYCQkzMAkvKiBTX0RNQV8yOSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYCQkzMQkvKiBTRE1BXzMwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgJCTMyCS8qIFNETUFfMzEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9UWAkJMzMJLyogU0RNQV8zMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYCQkzNAkvKiBTRE1BXzMzICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMAkJMzUJLyogU0RNQV8zNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDAJCTM2CS8qIFNETUFfMzUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgxCQkzNwkvKiBTRE1BXzM2ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMQkJMzgJLyogU0RNQV8zNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDIJCTM5CS8qIFNETUFfMzggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgyCQk0MAkvKiBTRE1BXzM5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMwkJNDEJLyogU0RNQV80MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDMJCTQyCS8qIFNETUFfNDEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgwCQk0MwkvKiBTRE1BXzQyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1JYMAkJNDQJLyogU0RNQV80MyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDEJCTQ1CS8qIFNETUFfNDQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgxCQk0NgkvKiBTRE1BXzQ1ICovCiAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1RYCQk0OQkvKiBTRE1BXzQ4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9SWAkJNTAJLyogU0RNQV80OSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfVFgJCTUxCS8qIFNETUFfNTAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1JYCQk1MgkvKiBTRE1BXzUxICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19UWAkJNTMJLyogU0RNQV81MiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDNfUlgJCTU0CS8qIFNETUFfNTMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMAk1NQkvKiBTRE1BXzU0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDAJNTYJLyogU0RNQV81NSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgxCTU3CS8qIFNETUFfNTYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMQk1OAkvKiBTRE1BXzU3ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDIJNTkJLyogU0RNQV81OCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgyCTYwCS8qIFNETUFfNTkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfVFgJCTYxCS8qIFNETUFfNjAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfUlgJCTYyCS8qIFNETUFfNjEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01TCQkJNjMJLyogU0RNQV82MiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIExDRCBETUEgKi8KICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZGIwMCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9DVFJMCQkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTAkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMikKQEAgLTExNiw3ICsyNTksNyBAQAogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA4KQogCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWUzMDApCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCAgICAgIAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DQ1IJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMyKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM0KQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM4KQpAQCAtMTM0LDM3ICsyNzcsMTggQEAKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlYSkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKIAotCi0vKiBFdmVyeSBMQ2ggaGFzIGl0cyBvd24gc2V0IG9mIHRoZSByZWdpc3RlcnMgYmVsb3cgKi8KLSNkZWZpbmUgT01BUF9ETUFfQ1NEUChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMCkKLSNkZWZpbmUgT01BUF9ETUFfQ0NSKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMikKLSNkZWZpbmUgT01BUF9ETUFfQ0lDUihuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKLSNkZWZpbmUgT01BUF9ETUFfQ1NSKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNikKLSNkZWZpbmUgT01BUF9ETUFfQ1NTQV9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA4KQotI2RlZmluZSBPTUFQX0RNQV9DU1NBX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGEpCi0jZGVmaW5lIE9NQVBfRE1BX0NEU0FfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYykKLSNkZWZpbmUgT01BUF9ETUFfQ0RTQV9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBlKQotI2RlZmluZSBPTUFQX0RNQV9DRU4obikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEwKQotI2RlZmluZSBPTUFQX0RNQV9DRk4obikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEyKQotI2RlZmluZSBPTUFQX0RNQV9DU0ZJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE0KQotI2RlZmluZSBPTUFQX0RNQV9DU0VJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQotI2RlZmluZSBPTUFQX0RNQV9DU0FDKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE4KQotI2RlZmluZSBPTUFQX0RNQV9DREFDKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFhKQotI2RlZmluZSBPTUFQX0RNQV9DREVJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQotI2RlZmluZSBPTUFQX0RNQV9DREZJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFlKQotI2RlZmluZSBPTUFQX0RNQV9DT0xPUl9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIwKQotI2RlZmluZSBPTUFQX0RNQV9DT0xPUl9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIyKQotI2RlZmluZSBPTUFQX0RNQV9DQ1IyKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQotI2RlZmluZSBPTUFQX0RNQV9DTE5LX0NUUkwobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjgpCi0jZGVmaW5lIE9NQVBfRE1BX0xDSF9DVFJMKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQotCi0jZGVmaW5lIE9NQVBfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQX0RNQV9UT1VUX0lSUQkJKDEgPDwgMCkJLyogT25seSBvbiBvbWFwMSAqLwogI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKICNkZWZpbmUgT01BUF9ETUFfSEFMRl9JUlEJCSgxIDw8IDIpCiAjZGVmaW5lIE9NQVBfRE1BX0ZSQU1FX0lSUQkJKDEgPDwgMykKICNkZWZpbmUgT01BUF9ETUFfTEFTVF9JUlEJCSgxIDw8IDQpCiAjZGVmaW5lIE9NQVBfRE1BX0JMT0NLX0lSUQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUF9ETUFfU1lOQ19JUlEJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAxX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDJfRE1BX1BLVF9JUlEJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMl9ETUFfU0VDVVJFX0VSUl9JUlEJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDJfRE1BX1NVUEVSVklTT1JfRVJSX0lSUQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDJfRE1BX01JU0FMSUdORURfRVJSX0lSUQkoMSA8PCAxMSkKIAogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzgJCTB4MDAKICNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1MxNgkJMHgwMQpAQCAtMTk0LDYgKzMxOCw3IEBACiAJT01BUF9MQ0RfRE1BX0IyX0JPVFRPTQogfTsKIAorLyogUkVWSVNJVDogQ2hlY2sgaWYgQlVSU1RfNCBpcyByZWFsbHkgMSAob3IgMikgKi8KIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSB7CiAJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAogCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKQEAgLTIwNiw2ICszMzEsMzEgQEAKIAlPTUFQX0RNQV9UUkFOU1BBUkVOVF9DT1BZCiB9OwogCitzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgeworCWludCBkYXRhX3R5cGU7CQkvKiBkYXRhIHR5cGUgOCwxNiwzMiAqLworCWludCBlbGVtX2NvdW50OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgZnJhbWUgKi8KKwlpbnQgZnJhbWVfY291bnQ7CS8qIG51bWJlciBvZiBmcmFtZXMgaW4gYSBlbGVtZW50ICovCisKKwlpbnQgc3JjX3BvcnQ7CQkvKiBPbmx5IG9uIE9NQVAxIFJFVklTSVQ6IElzIHRoaXMgbmVlZGVkPyAqLworCWludCBzcmNfYW1vZGU7CQkvKiBjb25zdGFudCAsIHBvc3QgaW5jcmVtZW50LCBpbmRleGVkICwgZG91YmxlIGluZGV4ZWQgKi8KKwlpbnQgc3JjX3N0YXJ0OwkJLyogc291cmNlIGFkZHJlc3MgOiBwaHlzaWNhbCAqLworCWludCBzcmNfZWk7CQkvKiBzb3VyY2UgZWxlbWVudCBpbmRleCAqLworCWludCBzcmNfZmk7CQkvKiBzb3VyY2UgZnJhbWUgaW5kZXggKi8KKworCWludCBkc3RfcG9ydDsJCS8qIE9ubHkgb24gT01BUDEgUkVWSVNJVDogSXMgdGhpcyBuZWVkZWQ/ICovCisJaW50IGRzdF9hbW9kZTsJCS8qIGNvbnN0YW50ICwgcG9zdCBpbmNyZW1lbnQsIGluZGV4ZWQgLCBkb3VibGUgaW5kZXhlZCAqLworCWludCBkc3Rfc3RhcnQ7CQkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCisJaW50IGRzdF9laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCisJaW50IGRzdF9maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLworCisJaW50IHRyaWdnZXI7CQkvKiB0cmlnZ2VyIGF0dGFjaGVkIGlmIHRoZSBjaGFubmVsIGlzIHN5bmNocm9uaXplZCAqLworCWludCBzeW5jX21vZGU7CQkvKiBzeWNuIG9uIGVsZW1lbnQsIGZyYW1lICwgYmxvY2sgb3IgcGFja2V0ICovCisJaW50IHNyY19vcl9kc3Rfc3luY2g7CS8qIHNvdXJjZSBzeW5jaCgxKSBvciBkZXN0aW5hdGlvbiBzeW5jaCgwKSAqLworCisJaW50IGllOwkJCS8qIGludGVycnVwdCBlbmFibGVkICovCit9OworCisKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wcmlvcml0eShpbnQgZHN0X3BvcnQsIGludCBwcmlvcml0eSk7CiBleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9kbWEoaW50IGRldl9pZCwgY29uc3QgY2hhciAqZGV2X25hbWUsCiAJCQkgICAgdm9pZCAoKiBjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSksCkBAIC0yMTcsMjQgKzM2NywzMCBAQAogZXh0ZXJuIHZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW50IGxjaCwgaW50IGRhdGFfdHlwZSwKIAkJCQkJIGludCBlbGVtX2NvdW50LCBpbnQgZnJhbWVfY291bnQsCi0JCQkJCSBpbnQgc3luY19tb2RlKTsKKwkJCQkJIGludCBzeW5jX21vZGUsCisJCQkJCSBpbnQgZG1hX3RyaWdnZXIsIGludCBzcmNfb3JfZHN0X3N5bmNoKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLAogCQkJCSAgICB1MzIgY29sb3IpOwogCiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0KTsKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCisJCQkJICAgIGludCBzcmNfZWksIGludCBzcmNfZmkpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW50IGxjaCwKIAkJCQkJZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpOwogCiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaW50IGxjaCwgaW50IGRlc3RfcG9ydCwgaW50IGRlc3RfYW1vZGUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQpOworCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0LAorCQkJCSAgICAgaW50IGRzdF9laSwgaW50IGRzdF9maSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLAogCQkJCQkgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpOwogCitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfcGFyYW1zKGludCBsY2gsCisJCQkJc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zICogcGFyYW1zKTsKKwogZXh0ZXJuIHZvaWQgb21hcF9kbWFfbGlua19sY2ggKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSk7CiBleHRlcm4gdm9pZCBvbWFwX2RtYV91bmxpbmtfbGNoIChpbnQgbGNoX2hlYWQsIGludCBsY2hfcXVldWUpOwogCkBAIC0yNDQsOSArNDAwLDYgQEAKIGV4dGVybiB2b2lkIG9tYXBfY2xlYXJfZG1hKGludCBsY2gpOwogZXh0ZXJuIGludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpOwogCi0vKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLwotZXh0ZXJuIGludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCk7Ci0KIC8qIExDRCBETUEgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCogY2FsbGJhY2spKHUxNiBzdGF0dXMsIHZvaWQgKmRhdGEpLAogCQkJCXZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCmluZGV4IDBkMjliOWMuLmY4ODE0YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKQEAgLTEwLDYgKzEwLDIwIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSAmJiBcCisJKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpKQorI2Vycm9yICJGSVhNRTogT01BUDczMCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUtT01BUCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF83MzBfSUgyX0lSUQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF8xNTEwX0lIMl9JUlEKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjZGVmaW5lIElOVF9JSDJfSVJRCQlJTlRfMTYxMF9JSDJfSVJRCisjZWxzZQorI3dhcm5pbmcgIklIMiBJUlEgZGVmYXVsdGVkIgorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzE1MTBfSUgyX0lSUQorI2VuZGlmCisKICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2ZwZ2EuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCmluZGV4IDY3NjgwN2QuLjZhODgzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9GUEdBX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogZXh0ZXJuIHZvaWQgb21hcDE1MTBfZnBnYV9pbml0X2lycSh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEoKQkoMCkKQEAgLTc3LDYgKzc3LDggQEAKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUJMTEKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX01BU0sJKCgxIDw8IEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFKSAtIDEpCiAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfVElNRVIJCSgxIDw8IDApCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX0lETEUJCSgxIDw8IDEpCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKaW5kZXggNzRjYjJiOS4uMWIzODg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBPTUFQX0dQSU9fSVJRKG5yKQkoT01BUF9HUElPX0lTX01QVUlPKG5yKSA/IFwKIAkJCQkgSUhfTVBVSU9fQkFTRSArICgobnIpICYgMHgwZikgOiBcCi0JCQkJIElIX0dQSU9fQkFTRSArICgobnIpICYgMHgzZikpCisJCQkJIElIX0dQSU9fQkFTRSArIChucikpCiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CS8qIENhbGwgZnJvbSBib2FyZCBpbml0IG9ubHkgKi8KIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IDYwMjAxZTEuLjU0MDZiODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTI2Nyw4ICsyNjcsNiBAQAogI2RlZmluZSBPTUFQX0xQRzJfTENSCQkJKE9NQVBfTFBHMl9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUF9MUEcyX1BNUgkJCShPTUFQX0xQRzJfQkFTRSArIDB4MDQpCiAKLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQcm9jZXNzb3Igc3BlY2lmaWMgZGVmaW5lcwpAQCAtMjc3LDEzICsyNzUsMTEgQEAKIAogI2luY2x1ZGUgIm9tYXA3MzAuaCIKICNpbmNsdWRlICJvbWFwMTUxMC5oIgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKICNpbmNsdWRlICJvbWFwMjR4eC5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJvbWFwMTZ4eC5oIgogCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQm9hcmQgc3BlY2lmaWMgZGVmaW5lcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCmluZGV4IDNkNWJjZDUuLmY1YmNjOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKQEAgLTUyLDIzICs1MiwzMyBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNkZWZpbmUgUENJT19CQVNFCTAKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCisKICNkZWZpbmUgSU9fUEhZUwkJMHhGRkZCMDAwMAotI2RlZmluZSBJT19PRkZTRVQgICAgICAtMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLworI2RlZmluZSBJT19PRkZTRVQJMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLwogI2RlZmluZSBJT19TSVpFCQkweDQwMDAwCisjZGVmaW5lIElPX1ZJUlQJCShJT19QSFlTIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBJT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSArIElPX09GRlNFVCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKLSNkZWZpbmUgSU9fUEhZUwkJMHg0ODAwMDAwMAkvKiBMNCBwZXJpcGhlcmFsczsgb3RoZXIgc3R1ZmYgaGFzIHRvIGJlIG1hcHBlZCAqCi0JCQkJCSAqIG1hbnVhbGx5LiAqLwotI2RlZmluZSBJT19PRkZTRVQJMHg5MDAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhkODAwMDAwMCAqLwotI2RlZmluZSBJT19TSVpFCQkweDA4MDAwMDAwCi0jZW5kaWYKIAotI2RlZmluZSBJT19WSVJUCQkoSU9fUEhZUyArIElPX09GRlNFVCkKLSNkZWZpbmUgSU9fQUREUkVTUyh4KQkoKHgpICsgSU9fT0ZGU0VUKQotI2RlZmluZSBQQ0lPX0JBU0UJMAotI2RlZmluZSBpb19wMnYoeCkJKCh4KSArIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fdjJwKHgpCSgoeCkgLSBJT19PRkZTRVQpCisvKiBXZSBtYXAgYm90aCBMMyBhbmQgTDQgb24gT01BUDIgKi8KKyNkZWZpbmUgTDNfMjRYWF9QSFlTCUwzXzI0WFhfQkFTRQkvKiAweDY4MDAwMDAwICovCisjZGVmaW5lIEwzXzI0WFhfVklSVAkweGY4MDAwMDAwCisjZGVmaW5lIEwzXzI0WFhfU0laRQlTWl8xTQkJLyogNDRrQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisjZGVmaW5lIEw0XzI0WFhfUEhZUwlMNF8yNFhYX0JBU0UJLyogMHg0ODAwMDAwMCAqLworI2RlZmluZSBMNF8yNFhYX1ZJUlQJMHhkODAwMDAwMAorI2RlZmluZSBMNF8yNFhYX1NJWkUJU1pfMU0JCS8qIDFNQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisjZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCisjZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIGlvX3AydihwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSAtIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworCisjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKaW5kZXggNzRlMTA4Yy4uOTc3OTY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKQEAgLTIyLDggKzIyLDggQEAKICAqCSBhcmUgZGlmZmVyZW50LgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKIAogLyoKICAqIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCkBAIC0zMSw3ICszMSw2IEBACiAgKiBOT1RFOiBTZWUgYWxzbyB0aGUgT01BUC0xNTEwIGFuZCAxNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGJlbG93CiAgKgogICovCi0jZGVmaW5lIElOVF9JSDJfSVJRCQkwCiAjZGVmaW5lIElOVF9DQU1FUkEJCTEKICNkZWZpbmUgSU5UX0ZJUQkJCTMKICNkZWZpbmUgSU5UX1JURFgJCTYKQEAgLTYwLDYgKzU5LDcgQEAKIC8qCiAgKiBPTUFQLTE1MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKICAqLworI2RlZmluZSBJTlRfMTUxMF9JSDJfSVJRCTAKICNkZWZpbmUgSU5UXzE1MTBfUkVTMgkJMgogI2RlZmluZSBJTlRfMTUxMF9TUElfVFgJCTQKICNkZWZpbmUgSU5UXzE1MTBfU1BJX1JYCQk1CkBAIC03MSw2ICs3MSw3IEBACiAvKgogICogT01BUC0xNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCiAgKi8KKyNkZWZpbmUgSU5UXzE2MTBfSUgyX0lSUQkwCiAjZGVmaW5lIElOVF8xNjEwX0lIMl9GSVEJMgogI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfVFgJNAogI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfUlgJNQpAQCAtMjMxLDYgKzIzMiwxMiBAQAogI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE1CSg2MiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX05BTkQJCSg2MyArIElIMl9CQVNFKQogCisjZGVmaW5lIElOVF8yNFhYX1NZU19OSVJRCTcKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEwCTEyCisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMQkxMworI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTIJMTQKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEzCTE1CisjZGVmaW5lIElOVF8yNFhYX0RTU19JUlEJMjUKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMQkyOQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyCTMwCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMJMzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCmluZGV4IGJmNTQ1YjYuLmRmNTBkZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaApAQCAtNjEsNyArNjEsNyBAQAogICogTm90ZSB0aGF0IHRoZSBpc19sYnVzX2RldmljZSgpIHRlc3QgaXMgbm90IHZlcnkgZWZmaWNpZW50IG9uIDE1MTAKICAqIGJlY2F1c2Ugb2YgdGhlIHN0cm5jbXAoKS4KICAqLwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAogLyoKICAqIE9NQVAtMTUxMCBMb2NhbCBCdXMgYWRkcmVzcyBvZmZzZXQKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCQkJdmlydF90b19sYnVzKGFkZHIpIDogXAogCQkJCQlfX3ZpcnRfdG9fYnVzKGFkZHIpO30pCiAKLSNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiZThiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCisgKgorICogRnVuY3Rpb25zIHRvIGFjY2VzcyBNZW5lbGF1cyBwb3dlciBtYW5hZ2VtZW50IGNoaXAKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVORUxBVVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTkVMQVVTX0gKKworZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX3JlZ2lzdGVyKHZvaWQgKCpjYWxsYmFjaykodTggY2FyZF9tYXNrKSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSk7CitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVtb3ZlKHZvaWQpOworZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX29wZW5kcmFpbihpbnQgZW5hYmxlKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpICYmIGRlZmluZWQoQ09ORklHX01FTkVMQVVTKQorI2RlZmluZSBvbWFwX2hhc19tZW5lbGF1cygpCTEKKyNlbHNlCisjZGVmaW5lIG9tYXBfaGFzX21lbmVsYXVzKCkJMAorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCAxYjFhZDQxLi4xMzQxNWE5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC00LDcgKzQsNyBAQAogICogVGFibGUgb2YgdGhlIE9tYXAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBGVU5DX01VWCBhbmQKICAqIFBVTExfRFdOIGNvbWJpbmF0aW9ucy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgogICoKQEAgLTU4LDYgKzU4LDE2IEBACiAJCQkJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKIAkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKIAorI2RlZmluZSBNVVhfUkVHXzczMChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZ19uYW1lID0gIk9NQVA3MzBfSU9fQ09ORl8iI3JlZywgXAorCQkJCQkubXV4X3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgXAorCQkJCQkubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUdfNzMwKHJlZywgYml0LCBzdGF0dXMpCS5wdWxsX25hbWUgPSAiT01BUDczMF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5wdWxsX3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKKwkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAorCiAjZWxzZQogCiAjZGVmaW5lIE1VWF9SRUcocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgLm11eF9yZWcgPSBGVU5DX01VWF9DVFJMXyMjcmVnLCBcCkBAIC03MSw2ICs4MSwxNSBAQAogI2RlZmluZSBQVV9QRF9SRUcocmVnLCBzdGF0dXMpCQkucHVfcGRfcmVnID0gUFVfUERfU0VMXyMjcmVnLCBcCiAJCQkJCS5wdV9wZF92YWwgPSBzdGF0dXMsCiAKKyNkZWZpbmUgTVVYX1JFR183MzAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgXAorCQkJCQkubXV4X3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgXAorCQkJCQkubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUdfNzMwKHJlZywgYml0LCBzdGF0dXMpCS5wdWxsX3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKKwkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAorCiAjZW5kaWYgLyogQ09ORklHX09NQVBfTVVYX0RFQlVHICovCiAKICNkZWZpbmUgTVVYX0NGRyhkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXApAQCAtODQsMTMgKzEwMyw0NCBAQAogCVBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykJCVwKIH0sCiAKKworLyoKKyAqIE9NQVA3MzAgaGFzIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNvbmZpZyBmb3IgdGhlIHBpbiBtdXguCisgKiAtIGNvbmZpZyByZWdzIGFyZSB0aGUgT01BUDczMF9JT19DT05GX3ggcmVncyAoc2VlIG9tYXA3MzAuaCkgcmVncyBhbmQKKyAqICAgbm90IHRoZSBGVU5DX01VWF9DVFJMX3ggcmVncyBmcm9tIGhhcmR3YXJlLmgKKyAqIC0gZm9yIHB1bGwtdXAvZG93biwgb25seSBoYXMgb25lIGVuYWJsZSBiaXQgd2hpY2ggaXMgaXMgaW4gdGhlIHNhbWUgcmVnaXN0ZXIKKyAqICAgYXMgbXV4IGNvbmZpZworICovCisjZGVmaW5lIE1VWF9DRkdfNzMwKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCisJCSAgIHB1bGxfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsCVwKKwkJICAgcHVfcGRfcmVnLCBwdV9wZF9zdGF0dXMsIGRlYnVnX3N0YXR1cylcCit7CQkJCQkJCVwKKwkubmFtZSA9CSBkZXNjLAkJCQkJXAorCS5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywJCQkJXAorCU1VWF9SRUdfNzMwKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKQkJXAorCVBVTExfUkVHXzczMChtdXhfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMpCVwKKwlQVV9QRF9SRUcocHVfcGRfcmVnLCBwdV9wZF9zdGF0dXMpCQlcCit9LAorCisjZGVmaW5lIE1VWF9DRkdfMjRYWChkZXNjLCByZWdfb2Zmc2V0LCBtb2RlLAkJCVwKKwkJCQlwdWxsX2VuLCBwdWxsX21vZGUsIGRiZykJXAorewkJCQkJCQkJXAorCS5uYW1lCQk9IGRlc2MsCQkJCQlcCisJLmRlYnVnCQk9IGRiZywJCQkJCVwKKwkubXV4X3JlZwk9IHJlZ19vZmZzZXQsCQkJCVwKKwkubWFzawkJPSBtb2RlLAkJCQkJXAorCS5wdWxsX3ZhbAk9IHB1bGxfZW4sCQkJCVwKKwkucHVfcGRfdmFsCT0gcHVsbF9tb2RlLAkJCQlcCit9LAorCisKICNkZWZpbmUgUFVMTF9ESVNBQkxFRAkwCiAjZGVmaW5lIFBVTExfRU5BQkxFRAkxCiAKICNkZWZpbmUgUFVMTF9ET1dOCTAKICNkZWZpbmUgUFVMTF9VUAkJMQogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgcGluX2NvbmZpZyB7CiAJY2hhciAqbmFtZTsKIAl1bnNpZ25lZCBjaGFyIGJ1c3k7CiAJdW5zaWduZWQgY2hhciBkZWJ1ZzsKQEAgLTEwOCwxMyArMTU4LDIzIEBACiAJY29uc3QgY2hhciAqcHVfcGRfbmFtZTsKIAljb25zdCB1bnNpZ25lZCBpbnQgcHVfcGRfcmVnOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgcHVfcGRfdmFsOwotfSByZWdfY2ZnX3NldDsKK307CiAKLS8qCi0gKiBMb29rdXAgdGFibGUgZm9yIEZVTkNfTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlciBjb21iaW5hdGlvbnMgZm9yIGVhY2gKLSAqIGRldmljZS4gU2VlIGFsc28gcmVnX2NmZ190YWJsZSBiZWxvdyBmb3IgdGhlIHJlZ2lzdGVyIHZhbHVlcy4KLSAqLwotdHlwZWRlZiBlbnVtIHsKK2VudW0gb21hcDczMF9pbmRleCB7CisJLyogT01BUCA3MzAga2V5Ym9hcmQgKi8KKwlFMl83MzBfS0JSMCwKKwlKN183MzBfS0JSMSwKKwlFMV83MzBfS0JSMiwKKwlGM183MzBfS0JSMywKKwlEMl83MzBfS0JSNCwKKwlDMl83MzBfS0JDMCwKKwlEM183MzBfS0JDMSwKKwlFNF83MzBfS0JDMiwKKwlGNF83MzBfS0JDMywKKwlFM183MzBfS0JDNCwKK307CisKK2VudW0gb21hcDF4eHhfaW5kZXggewogCS8qIFVBUlQxIChCVF9VQVJUX0dBVElORykqLwogCVVBUlQxX1RYID0gMCwKIAlVQVJUMV9SVFMsCkBAIC0zMzEsMjQ1ICszOTEsMzQgQEAKIAlWMTBfMTYxMF9DRl9JUkVRLAogCVcxMF8xNjEwX0NGX1JFU0VULAogCVcxMV8xNjEwX0NGX0NEMSwKLX0gcmVnX2NmZ190OwotCi0jaWYgZGVmaW5lZChfX01VWF9DX18pICYmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQotCi0vKgotICogVGFibGUgb2YgdmFyaW91cyBGVU5DX01VWCBhbmQgUFVMTF9EV04gY29tYmluYXRpb25zIGZvciBlYWNoIGRldmljZS4KLSAqIFNlZSBhbHNvIHJlZ19jZmdfdCBhYm92ZSBmb3IgdGhlIGxvb2t1cCB0YWJsZS4KLSAqLwotc3RhdGljIGNvbnN0IHJlZ19jZmdfc2V0IF9faW5pdGRhdGFfb3JfbW9kdWxlCi1yZWdfY2ZnX3RhYmxlW10gPSB7Ci0vKgotICoJIGRlc2NyaXB0aW9uCQltdXggIG1vZGUgICBtdXgJIHB1bGwgcHVsbCAgcHVsbCAgcHVfcGQJIHB1ICBkYmcKLSAqCQkJCXJlZyAgb2Zmc2V0IG1vZGUgcmVnICBiaXQgICBlbmEJICByZWcKLSAqLwotTVVYX0NGRygiVUFSVDFfVFgiLAkJIDksICAgMjEsICAgIDEsCSAgMiwgICAzLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDFfUlRTIiwJCSA5LCAgIDEyLCAgICAxLAkgIDIsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKLQotLyogVUFSVDIgKENPTV9VQVJUX0dBVElORyksIGNvbmZsaWN0cyB3aXRoIFVTQjIgKi8KLU1VWF9DRkcoIlVBUlQyX1RYIiwJCSBDLCAgIDI3LCAgICAxLAkgIDMsICAgMywgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQyX1JYIiwJCSBDLCAgIDE4LCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQyX0NUUyIsCQkgQywgICAyMSwgICAgMCwJICAzLCAgIDEsICAgMSwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUMl9SVFMiLAkJIEMsICAgMjQsICAgIDEsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBVQVJUMyAoR0lHQV9VQVJUX0dBVElORykgKi8KLU1VWF9DRkcoIlVBUlQzX1RYIiwJCSA2LCAgICAwLCAgICAxLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX1JYIiwJCSA2LCAgICAzLCAgICAwLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX0NUUyIsCQkgNSwgICAxMiwgICAgMiwJICAwLCAgMjQsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUM19SVFMiLAkJIDUsICAgMTUsICAgIDIsCSAgMCwgIDI1LCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQ0xLUkVRIiwJCSA5LCAgIDI3LCAgICAwLAkgIDIsICAgNSwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX0JDTEsiLAkJIEEsICAgIDAsICAgIDAsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCi1NVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCi0KLS8qIFVTQiBpbnRlcm5hbCBtYXN0ZXIgZ2VuZXJpYyAqLwotTVVYX0NGRygiUjE4X1VTQl9WQlVTIiwJCSA3LCAgICA5LCAgICAyLAkgIDEsICAxMSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlIxOF8xNTEwX1VTQl9HUElPMCIsCSA3LCAgICA5LCAgICAwLAkgIDEsICAxMSwgICAxLAkgTkEsCSAwLCAgMSkKLS8qIHdvcmtzIGFyb3VuZCBlcnJhdHVtOiAgVzRfVVNCX1BVRU4gYW5kIFc0X1VTQl9QVURJUyBhcmUgc3dpdGNoZWQhICovCi1NVVhfQ0ZHKCJXNF9VU0JfUFVFTiIsCQkgRCwgICAgMywgICAgMywJICAzLCAgIDUsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNF9VU0JfQ0xLTyIsCQkgRCwgICAgMywgICAgMSwJICAzLCAgIDUsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNF9VU0JfSElHSFoiLAkJIEQsICAgIDMsICAgIDQsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQotTVVYX0NGRygiVzRfR1BJTzU4IiwJCSBELCAgICAzLCAgICA3LAkgIDMsICAgNSwgICAwLAkgIDMsCSAwLCAgMSkKLQotLyogVVNCMSBtYXN0ZXIgKi8KLU1VWF9DRkcoIlVTQjFfU1VTUCIsCQkgOCwgICAyNywgICAgMiwJICAxLCAgMjcsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1NFMCIsCQkgOSwgICAgMCwgICAgMiwJICAxLCAgMjgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTNfMTYxMF9VU0IxX1NFMCIsCSA5LCAgICAwLCAgICA0LAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVFhFTiIsCQkgOSwgICAgMywgICAgMiwJICAxLCAgMjksICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1RYRCIsCQkgOSwgICAyNCwgICAgMSwJICAyLCAgIDQsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1ZQIiwJCSBBLCAgICAzLCAgICAxLAkgIDIsICAgNywgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVk0iLAkJIEEsICAgIDYsICAgIDEsCSAgMiwgICA4LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9SQ1YiLAkJIEEsICAgIDksICAgIDEsCSAgMiwgICA5LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9TUEVFRCIsCQkgQSwgICAxMiwgICAgMiwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSMTNfMTYxMF9VU0IxX1NQRUVEIiwJIEEsICAgMTIsICAgIDUsCSAgMiwgIDEwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiUjEzXzE3MTBfVVNCMV9TRU8iLAkgQSwgICAxMiwgICAgNSwgICAyLCAgMTAsICAgMCwgICBOQSwgICAgIDAsICAxKQotCi0vKiBVU0IyIG1hc3RlciAqLwotTVVYX0NGRygiVVNCMl9TVVNQIiwJCSBCLCAgICAzLCAgICAxLAkgIDIsICAxNywgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjJfVlAiLAkJIEIsICAgIDYsICAgIDEsCSAgMiwgIDE4LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9UWEVOIiwJCSBCLCAgICA5LCAgICAxLAkgIDIsICAxOSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjJfVk0iLAkJIEMsICAgMTgsICAgIDEsCSAgMywgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9SQ1YiLAkJIEMsICAgMjEsICAgIDEsCSAgMywgICAxLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9TRTAiLAkJIEMsICAgMjQsICAgIDIsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9UWEQiLAkJIEMsICAgMjcsICAgIDIsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAxKQotCi0vKiBPTUFQLTE1MTAgR1BJTyAqLwotTVVYX0NGRygiUjE4XzE1MTBfR1BJTzAiLAkgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMCwgICAgIDAsICAxKQotTVVYX0NGRygiUjE5XzE1MTBfR1BJTzEiLAkgNywgICAgNiwgICAgMCwgICAxLCAgMTAsICAgMSwgICAgMCwgICAgIDAsICAxKQotTVVYX0NGRygiTTE0XzE1MTBfR1BJTzIiLAkgNywgICAgMywgICAgMCwgICAxLCAgIDksICAgMSwgICAgMCwgICAgIDAsICAxKQotCi0vKiBPTUFQMTYxMCBHUElPICovCi1NVVhfQ0ZHKCJQMThfMTYxMF9HUElPMyIsCSA3LCAgICAwLCAgICAwLCAgIDEsICAgOCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJZMTVfMTYxMF9HUElPMTciLAkgQSwgICAgMCwgICAgNywgICAyLCAgIDYsICAgMCwgICBOQSwgICAgIDAsICAxKQotCi0vKiBPTUFQLTE3MTAgR1BJTyAqLwotTVVYX0NGRygiUjE4XzE3MTBfR1BJTzAiLCAgICAgICAgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMSwgICAgIDEsICAxKQotTVVYX0NGRygiVjJfMTcxMF9HUElPMTAiLCAgICAgICAgRiwgICAyNywgICAgMSwgICA0LCAgIDMsICAgMSwgICAgNCwgICAgIDEsICAxKQotTVVYX0NGRygiTjIxXzE3MTBfR1BJTzE0IiwgICAgICAgNiwgICAgOSwgICAgMCwgICAxLCAgIDEsICAgMSwgICAgMSwgICAgIDEsICAxKQotTVVYX0NGRygiVzE1XzE3MTBfR1BJTzQwIiwgICAgICAgOSwgICAyNywgICAgNywgICAyLCAgIDUsICAgMSwgICAgMiwgICAgIDEsICAxKQotCi0vKiBNUFVJTyAqLwotTVVYX0NGRygiTVBVSU8yIiwJCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk4xNV8xNjEwX01QVUlPMiIsCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgIDEsCSAwLCAgMSkKLU1VWF9DRkcoIk1QVUlPNCIsCQkgNywgICAxNSwgICAgMCwJICAxLCAgMTMsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNUFVJTzUiLAkJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDEsCSBOQSwJIDAsICAxKQotCi1NVVhfQ0ZHKCJUMjBfMTYxMF9NUFVJTzUiLAkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzYiLAkxMCwgICAxNSwgICAgMiwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzciLAkgQSwgICAyNCwgICAgMiwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzkiLAkxMCwgICAxNSwgICAgMSwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzEwIiwJIEEsICAgMjQsICAgIDEsCSAgMiwgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiVzEwXzE2MTBfTVBVSU8xMSIsCSBBLCAgIDE4LCAgICAyLAkgIDIsICAxMSwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIkUyMF8xNjEwX01QVUlPMTMiLAkgMywgICAyMSwgICAgMSwJICAwLCAgIDcsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVMjBfMTYxMF9NUFVJTzE0IiwJIDksICAgIDYsICAgIDYsCSAgMCwgIDMwLCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiRTE5XzE2MTBfTVBVSU8xNSIsCSAzLCAgIDE4LCAgICAxLAkgIDAsICAgNiwgICAwLAkgIDAsCSAwLCAgMSkKLQotLyogTUNCU1AyICovCi1NVVhfQ0ZHKCJNQ0JTUDJfQ0xLUiIsCQkgQywgICAgNiwgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfQ0xLWCIsCQkgQywgICAgOSwgICAgMCwJICAyLCAgMjksICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRFIiLAkJIEMsICAgIDAsICAgIDAsCSAgMiwgIDI2LCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTUNCU1AyX0RYIiwJCSBDLCAgIDE1LCAgICAwLAkgIDIsICAzMSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9GU1IiLAkJIEMsICAgMTIsICAgIDAsCSAgMiwgIDMwLCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTUNCU1AyX0ZTWCIsCQkgQywgICAgMywgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCi0KLS8qIE1DQlNQMyBOT1RFOiBNb2RlIG11c3QgMSBmb3IgY2xvY2sgKi8KLU1VWF9DRkcoIk1DQlNQM19DTEtYIiwJCSA5LCAgICAzLCAgICAxLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogTWlzYyBiYWxsb3V0cyAqLwotTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKLQotLyogT01BUC0xNjEwIE1NQzIgKi8KLU1VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjhfMTYxMF9NTUMyX0RBVDEiLAkgQiwgICAyNywgICAgNiwJICAyLCAgMjUsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMTVfMTYxMF9NTUMyX0RBVDIiLAkgOSwgICAxMiwgICAgNiwJICAyLCAgIDUsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJSMTBfMTYxMF9NTUMyX0RBVDMiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgMjIsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJZMTBfMTYxMF9NTUMyX0NMSyIsCSBCLCAgICAzLCAgICA2LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlk4XzE2MTBfTU1DMl9DTUQiLAkgQiwgICAyNCwgICAgNiwJICAyLCAgMjQsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWOV8xNjEwX01NQzJfQ01ERElSIiwJIEIsICAgMTIsICAgIDYsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjVfMTYxMF9NTUMyX0RBVERJUjAiLAkgQiwgICAxNSwgICAgNiwJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMTlfMTYxMF9NTUMyX0RBVERJUjEiLCA4LCAgIDE1LCAgICA2LAkgIDEsICAyMywgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlIxOF8xNjEwX01NQzJfQ0xLSU4iLAkgNywgICAgOSwgICAgNiwJICAxLCAgMTEsICAgMCwJICAxLAkxMSwgIDEpCi0KLS8qIE9NQVAtMTYxMCBFeHRlcm5hbCBUcmFjZSBJbnRlcmZhY2UgKi8KLU1VWF9DRkcoIk0xOV8xNjEwX0VUTV9QU1RBVDAiLAkgNSwgICAyNywgICAgMSwJICAwLCAgMjksICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJMMTVfMTYxMF9FVE1fUFNUQVQxIiwJIDUsICAgMjQsICAgIDEsCSAgMCwgIDI4LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiTDE4XzE2MTBfRVRNX1BTVEFUMiIsCSA1LCAgIDIxLCAgICAxLAkgIDAsICAyNywgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkwxOV8xNjEwX0VUTV9EMCIsCSA1LCAgIDE4LCAgICAxLAkgIDAsICAyNiwgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkoxOV8xNjEwX0VUTV9ENiIsCSA1LCAgICAwLCAgICAxLAkgIDAsICAyMCwgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkoxOF8xNjEwX0VUTV9ENyIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAxOSwgICAwLAkgIDAsCSAwLCAgMSkKLQotLyogT01BUDE2WFggR1BJTyAqLwotTVVYX0NGRygiUDIwXzE2MTBfR1BJTzQiLAkgNiwgICAyNywgICAgMCwJICAxLCAgIDcsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWOV8xNjEwX0dQSU83IiwJIEIsICAgMTIsICAgIDEsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVzhfMTYxMF9HUElPOSIsCSBCLCAgIDIxLCAgICAwLAkgIDIsICAyMywgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk4yMF8xNjEwX0dQSU8xMSIsICAgICAgIDYsICAgMTgsICAgIDAsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICAxLCAgMSkKLU1VWF9DRkcoIk4xOV8xNjEwX0dQSU8xMyIsCSA2LCAgIDEyLCAgICAwLAkgIDEsICAgMiwgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlAxMF8xNjEwX0dQSU8yMiIsCSBDLCAgICAwLCAgICA3LAkgIDIsICAyNiwgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlY1XzE2MTBfR1BJTzI0IiwJIEIsICAgMTUsICAgIDcsCSAgMiwgIDIxLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiQUEyMF8xNjEwX0dQSU9fNDEiLAkgOSwgICAgOSwgICAgNywJICAxLCAgMzEsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMTlfMTYxMF9HUElPNDgiLAkgOCwgICAxNSwgICAgNywgICAxLCAgMjMsICAgMSwgICAgMSwgICAgIDAsICAxKQotTVVYX0NGRygiTTdfMTYxMF9HUElPNjIiLAkxMCwgICAgMCwgICAgMCwgICA0LCAgMjQsICAgMCwgICAgNCwgICAgIDAsICAxKQotTVVYX0NGRygiVjE0XzE2WFhfR1BJTzM3IiwJIDksICAgMTgsICAgIDcsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAwKQotTVVYX0NGRygiUjlfMTZYWF9HUElPMTgiLAkgQywgICAxOCwgICAgNywgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAwKQotTVVYX0NGRygiTDE0XzE2WFhfR1BJTzQ5IiwJIDYsICAgIDMsICAgIDcsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMCkKLQotLyogT01BUC0xNjEwIHVXaXJlICovCi1NVVhfQ0ZHKCJWMTlfMTYxMF9VV0lSRV9TQ0xLIiwJIDgsICAgIDYsICAgIDAsCSAgMSwgIDIwLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiVTE4XzE2MTBfVVdJUkVfU0RJIiwJIDgsICAgIDAsICAgIDAsCSAgMSwgIDE4LCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiVzIxXzE2MTBfVVdJUkVfU0RPIiwJIDgsICAgIDMsICAgIDAsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiTjE0XzE2MTBfVVdJUkVfQ1MwIiwJIDgsICAgIDksICAgIDEsCSAgMSwgIDIxLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQotCi0vKiBPTUFQLTE2MTAgRmxhc2ggKi8KLU1VWF9DRkcoIkwzXzE2MTBfRkxBU0hfQ1MyQl9PRSIsMTAsICAgIDYsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTThfMTYxMF9GTEFTSF9DUzJCX1dFIiwxMCwgICAgMywgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIEZpcnN0IE1NQyBpbnRlcmZhY2UsIHNhbWUgb24gMTUxMCwgMTYxMCBhbmQgMTcxMCAqLwotTVVYX0NGRygiTU1DX0NNRCIsCQkgQSwgICAyNywgICAgMCwJICAyLCAgMTUsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJNTUNfREFUMSIsCQkgQSwgICAyNCwgICAgMCwJICAyLCAgMTQsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJNTUNfREFUMiIsCQkgQSwgICAxOCwgICAgMCwJICAyLCAgMTIsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJNTUNfREFUMCIsCQkgQiwgICAgMCwgICAgMCwJICAyLCAgMTYsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJNTUNfQ0xLIiwJCSBBLCAgIDIxLCAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQzIiwJCTEwLCAgIDE1LCAgICAwLAkgIDMsICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKLU1VWF9DRkcoIk0xNV8xNzEwX01NQ19DTEtJIiwJIDYsICAgMjEsICAgIDIsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKLU1VWF9DRkcoIlAxOV8xNzEwX01NQ19DTURESVIiLAkgNiwgICAyNCwgICAgNiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQotTVVYX0NGRygiUDIwXzE3MTBfTU1DX0RBVERJUjAiLAkgNiwgICAyNywgICAgNSwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQotCi0vKiBPTUFQLTE2MTAgVVNCMCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiAqLwotTVVYX0NGRygiVzlfVVNCMF9UWEVOIiwJCSBCLCAgIDksICAgICA1LAkgIDIsICAxOSwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIkFBOV9VU0IwX1ZQIiwJCSBCLCAgIDYsICAgICA1LAkgIDIsICAxOCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlk1X1VTQjBfUkNWIiwJCSBDLCAgMjEsICAgICA1LAkgIDMsICAgMSwgICAwLAkgIDEsCSAwLCAgMSkKLU1VWF9DRkcoIlI5X1VTQjBfVk0iLAkJIEMsICAxOCwgICAgIDUsCSAgMywgICAwLCAgIDAsCSAgMywJIDAsICAxKQotTVVYX0NGRygiVjZfVVNCMF9UWEQiLAkJIEMsICAyNywgICAgIDUsCSAgMywgICAzLCAgIDAsCSAgMywJIDAsICAxKQotTVVYX0NGRygiVzVfVVNCMF9TRTAiLAkJIEMsICAyNCwgICAgIDUsCSAgMywgICAyLCAgIDAsCSAgMywJIDAsICAxKQotTVVYX0NGRygiVjlfVVNCMF9TUEVFRCIsCSBCLCAgMTIsICAgICA1LAkgIDIsICAyMCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlkxMF9VU0IwX1NVU1AiLAkgQiwgICAzLCAgICAgNSwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCi0KLS8qIFVTQjIgaW50ZXJmYWNlICovCi1NVVhfQ0ZHKCJXOV9VU0IyX1RYRU4iLAkJIEIsICAgOSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiQUE5X1VTQjJfVlAiLAkJIEIsICAgNiwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiWTVfVVNCMl9SQ1YiLAkJIEMsICAyMSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiUjlfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIDE2WFggVUFSVCAqLwotTVVYX0NGRygiUjEzXzE2MTBfVUFSVDFfVFgiLAkgQSwgIDEyLCAgICAgNiwJICAyLCAgMTAsICAgMCwJICAyLAkxMCwgIDEpCi1NVVhfQ0ZHKCJWMTRfMTZYWF9VQVJUMV9SWCIsCSA5LCAgMTgsICAgICAwLAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMSkKLU1VWF9DRkcoIlIxNF8xNjEwX1VBUlQxX0NUUyIsCSA5LCAgMTUsICAgICAwLAkgIDIsICAgMSwgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIkFBMTVfMTYxMF9VQVJUMV9SVFMiLAkgOSwgIDEyLCAgICAgMSwJICAyLCAgIDAsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSOV8xNlhYX1VBUlQyX1JYIiwJIEMsICAxOCwgICAgIDAsICAgMywgICAwLCAgIDAsICAgIDMsICAgICAwLCAgMSkKLU1VWF9DRkcoIkwxNF8xNlhYX1VBUlQzX1JYIiwJIDYsICAgMywgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMSkKLQotLyogSTJDIGludGVyZmFjZSAqLwotTVVYX0NGRygiSTJDX1NDTCIsCQkgNywgIDI0LCAgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJJMkNfU0RBIiwJCSA3LCAgMjcsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKLQotLyogS2V5cGFkICovCi1NVVhfQ0ZHKCJGMThfMTYxMF9LQkMwIiwJIDMsICAxNSwgICAgIDAsCSAgMCwgICA1LCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRDIwXzE2MTBfS0JDMSIsCSAzLCAgMTIsICAgICAwLAkgIDAsICAgNCwgICAxLAkgIDAsCSAwLCAgMCkKLU1VWF9DRkcoIkQxOV8xNjEwX0tCQzIiLAkgMywgICA5LCAgICAgMCwJICAwLCAgIDMsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJFMThfMTYxMF9LQkMzIiwJIDMsICAgNiwgICAgIDAsCSAgMCwgICAyLCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiQzIxXzE2MTBfS0JDNCIsCSAzLCAgIDMsICAgICAwLAkgIDAsICAgMSwgICAxLAkgIDAsCSAwLCAgMCkKLU1VWF9DRkcoIkcxOF8xNjEwX0tCUjAiLAkgNCwgICAwLCAgICAgMCwJICAwLCAgIDEwLCAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJGMTlfMTYxMF9LQlIxIiwJIDMsICAgMjcsICAgIDAsCSAgMCwgICA5LCAgIDEsCSAgMCwJIDEsICAwKQotTVVYX0NGRygiSDE0XzE2MTBfS0JSMiIsCSAzLCAgIDI0LCAgICAwLAkgIDAsICAgOCwgICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkUyMF8xNjEwX0tCUjMiLAkgMywgICAyMSwgICAgMCwJICAwLCAgIDcsICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJFMTlfMTYxMF9LQlI0IiwJIDMsICAgMTgsICAgIDAsCSAgMCwgICA2LCAgIDEsCSAgMCwJIDEsICAwKQotTVVYX0NGRygiTjE5XzE2MTBfS0JSNSIsCSA2LCAgMTIsICAgICAxLAkgIDEsICAgMiwgICAxLAkgIDEsCSAxLCAgMCkKLQotLyogUG93ZXIgbWFuYWdlbWVudCAqLwotTVVYX0NGRygiVDIwXzE2MTBfTE9XX1BXUiIsCSA3LCAgIDEyLCAgICAxLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotCi0vKiBNQ0xLIFNldHRpbmdzICovCi1NVVhfQ0ZHKCJWNV8xNzEwX01DTEtfT04iLAkgQiwgICAxNSwgICAgMCwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlY1XzE3MTBfTUNMS19PRkYiLAkgQiwgICAxNSwgICAgNiwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlIxMF8xNjEwX01DTEtfT04iLAkgQiwgICAxOCwgICAgMCwJICBOQSwgIDIyLCAgIDAsCSAgTkEsCSAxLCAgMCkKLU1VWF9DRkcoIlIxMF8xNjEwX01DTEtfT0ZGIiwJIEIsICAgMTgsICAgIDYsCSAgMiwgICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKLQotLyogQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIsIGNvbmZsaWN0cyB3aXRoIE1NQzEgKi8KLU1VWF9DRkcoIlAxMV8xNjEwX0NGX0NEMiIsCSBBLCAgIDI3LCAgICAzLAkgIDIsICAgMTUsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJSMTFfMTYxMF9DRl9JT0lTMTYiLAkgQiwgICAgMCwgICAgMywJICAyLCAgIDE2LCAgIDEsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjEwXzE2MTBfQ0ZfSVJFUSIsCSBBLCAgIDI0LCAgICAzLAkgIDIsICAgMTQsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTBfMTYxMF9DRl9SRVNFVCIsCSBBLCAgIDE4LCAgICAzLAkgIDIsICAgMTIsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMTFfMTYxMF9DRl9DRDEiLAkxMCwgICAxNSwgICAgMywJICAzLCAgICA4LCAgIDEsCSAgMywJIDEsICAxKQogfTsKIAotI2VuZGlmCS8qIF9fTVVYX0NfXyAqLworZW51bSBvbWFwMjR4eF9pbmRleCB7CisJLyogMjR4eCBJMkMgKi8KKwlNMTlfMjRYWF9JMkMxX1NDTCwKKwlMMTVfMjRYWF9JMkMxX1NEQSwKKwlKMTVfMjRYWF9JMkMyX1NDTCwKKwlIMTlfMjRYWF9JMkMyX1NEQSwKKworCS8qIDI0eHggTWVuZWxhdXMgaW50ZXJydXB0ICovCisJVzE5XzI0WFhfU1lTX05JUlEsCisKKwkvKiAyNHh4IEdQSU8gKi8KKwlZMjBfMjRYWF9HUElPNjAsCisJTTE1XzI0WFhfR1BJTzkyLAorfTsKIAogI2lmZGVmCUNPTkZJR19PTUFQX01VWAogLyogc2V0dXAgcGluIG11eGluZyBpbiBMaW51eCAqLwotZXh0ZXJuIGludCBvbWFwX2NmZ19yZWcocmVnX2NmZ190IHJlZ19jZmcpOworZXh0ZXJuIGludCBvbWFwMV9tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcDJfbXV4X2luaXQodm9pZCk7CitleHRlcm4gaW50IG9tYXBfbXV4X3JlZ2lzdGVyKHN0cnVjdCBwaW5fY29uZmlnICogcGlucywgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiBpbnQgb21hcF9jZmdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnX2NmZyk7CiAjZWxzZQogLyogYm9vdCBsb2FkZXIgZG9lcyBpdCBhbGwgKG5vIHdhcm5pbmdzIGZyb20gQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTKSAqLwotc3RhdGljIGlubGluZSBpbnQgb21hcF9jZmdfcmVnKHJlZ19jZmdfdCByZWdfY2ZnKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBvbWFwMV9tdXhfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBvbWFwX2NmZ19yZWcodW5zaWduZWQgbG9uZyByZWdfY2ZnKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmgKaW5kZXggZjA4NmEzOS4uYzU3NWQzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaApAQCAtMjUsOCArMjUsOCBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAxNTEwX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTUxMF9ICisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDE1WFhfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNVhYX0gKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ0LDUgKzQ0LDUgQEAKICNkZWZpbmUgT01BUDE1MTBfRFNQUkVHX1NJWkUJU1pfMTI4SwogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU1RBUlQJMHhFMTAwMDAwMAogCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE1MTBfSCAqLworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVAxNVhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCmluZGV4IGE5MTA1NDYuLjZlNTk4MDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKQEAgLTEsMTUgKzEsMjQgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQMjRYWF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAogCi0jZGVmaW5lIE9NQVAyNFhYX0w0X0lPX0JBU0UJMHg0ODAwMDAwMAorLyoKKyAqIFBsZWFzZSBwbGFjZSBvbmx5IGJhc2UgZGVmaW5lcyBoZXJlIGFuZCBwdXQgdGhlIHJlc3QgaW4gZGV2aWNlCisgKiBzcGVjaWZpYyBoZWFkZXJzLiBOb3RlIGFsc28gdGhhdCBzb21lIG9mIHRoZXNlIGRlZmluZXMgYXJlIG5lZWRlZAorICogZm9yIG9tYXAxIHRvIGNvbXBpbGUgd2l0aG91dCBhZGRpbmcgaWZkZWZzLgorICovCisKKyNkZWZpbmUgTDRfMjRYWF9CQVNFCQkweDQ4MDAwMDAwCisjZGVmaW5lIEwzXzI0WFhfQkFTRQkJMHg2ODAwMDAwMAogCiAvKiBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShPTUFQMjRYWF9MNF9JT19CQVNFICsgMHhmZTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfSUNfQkFTRQkoTDRfMjRYWF9CQVNFICsgMHhmZTAwMCkKICNkZWZpbmUgVkFfSUNfQkFTRQkJSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKQotCiAjZGVmaW5lIE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UJMHg0MDAwMDAwMAotCiAjZGVmaW5lIElSUV9TSVJfSVJRCQkweDAwNDAKIAorI2RlZmluZSBPTUFQMjRYWF8zMktTWU5DVF9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDQwMDApCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fQkFTRQkoTDRfMjRYWF9CQVNFICsgMHg4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9TRFJDX0JBU0UJKEwzXzI0WFhfQkFTRSArIDB4OTAwMCkKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDI0WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmEyNjIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIEZpbGU6IGluY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmgKKyAqCisgKiBGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIFRJIE9NQVAgYm9hcmRzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEltcmUgRGVhayA8aW1yZS5kZWFrQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fT01BUEZCX0gKKyNkZWZpbmUgX19PTUFQRkJfSAorCisvKiBJT0NUTCBjb21tYW5kcy4gKi8KKworI2RlZmluZSBPTUFQX0lPVyhudW0sIGR0eXBlKQlfSU9XKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JT1IobnVtLCBkdHlwZSkJX0lPUignTycsIG51bSwgZHR5cGUpCisjZGVmaW5lIE9NQVBfSU9XUihudW0sIGR0eXBlKQlfSU9XUignTycsIG51bSwgZHR5cGUpCisjZGVmaW5lIE9NQVBfSU8obnVtKQkJX0lPKCdPJywgbnVtKQorCisjZGVmaW5lIE9NQVBGQl9NSVJST1IJCU9NQVBfSU9XKDMxLCBpbnQpCisjZGVmaW5lIE9NQVBGQl9TWU5DX0dGWAkJT01BUF9JTygzNykKKyNkZWZpbmUgT01BUEZCX1ZTWU5DCQlPTUFQX0lPKDM4KQorI2RlZmluZSBPTUFQRkJfU0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQwLCBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSkKKyNkZWZpbmUgT01BUEZCX0dFVF9DQVBTCQlPTUFQX0lPUig0MiwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgT01BUEZCX0dFVF9VUERBVEVfTU9ERQlPTUFQX0lPVyg0MywgZW51bSBvbWFwZmJfdXBkYXRlX21vZGUpCisjZGVmaW5lIE9NQVBGQl9MQ0RfVEVTVAkJT01BUF9JT1coNDUsIGludCkKKyNkZWZpbmUgT01BUEZCX0NUUkxfVEVTVAlPTUFQX0lPVyg0NiwgaW50KQorI2RlZmluZSBPTUFQRkJfVVBEQVRFX1dJTkRPVwlPTUFQX0lPVyg0Nywgc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93KQorI2RlZmluZSBPTUFQRkJfU0VUVVBfUExBTkUJT01BUF9JT1coNDgsIHN0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUpCisjZGVmaW5lIE9NQVBGQl9FTkFCTEVfUExBTkUJT01BUF9JT1coNDksIHN0cnVjdCBvbWFwZmJfZW5hYmxlX3BsYW5lKQorI2RlZmluZSBPTUFQRkJfU0VUX0NPTE9SX0tFWQlPTUFQX0lPVyg1MCwgc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkpCisKKyNkZWZpbmUgT01BUEZCX0NBUFNfR0VORVJJQ19NQVNLCTB4MDAwMDBmZmYKKyNkZWZpbmUgT01BUEZCX0NBUFNfTENEQ19NQVNLCQkweDAwZmZmMDAwCisjZGVmaW5lIE9NQVBGQl9DQVBTX1BBTkVMX01BU0sJCTB4ZmYwMDAwMDAKKworI2RlZmluZSBPTUFQRkJfQ0FQU19NQU5VQUxfVVBEQVRFCTB4MDAwMDEwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfU0VUX0JBQ0tMSUdIVAkweDAxMDAwMDAwCisKKy8qIFZhbHVlcyBmcm9tIERTUCBtdXN0IG1hcCB0byBsb3dlciAxNi1iaXRzICovCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfTUFTSyAgICAgICAgIDB4MDBmZgorI2RlZmluZSBPTUFQRkJfRk9STUFUX0ZMQUdfRE9VQkxFICAweDAxMDAKKworZW51bSBvbWFwZmJfY29sb3JfZm9ybWF0IHsKKwlPTUFQRkJfQ09MT1JfUkdCNTY1ID0gMCwKKwlPTUFQRkJfQ09MT1JfWVVWNDIyLAorCU9NQVBGQl9DT0xPUl9ZVVY0MjAsCisJT01BUEZCX0NPTE9SX0NMVVRfOEJQUCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF80QlBQLAorCU9NQVBGQl9DT0xPUl9DTFVUXzJCUFAsCisJT01BUEZCX0NPTE9SX0NMVVRfMUJQUCwKK307CisKK3N0cnVjdCBvbWFwZmJfdXBkYXRlX3dpbmRvdyB7CisJdTMyIHgsIHk7CisJdTMyIHdpZHRoLCBoZWlnaHQ7CisJdTMyIGZvcm1hdDsKK307CisKK2VudW0gb21hcGZiX3BsYW5lIHsKKwlPTUFQRkJfUExBTkVfR0ZYID0gMCwKKwlPTUFQRkJfUExBTkVfVklEMSwKKwlPTUFQRkJfUExBTkVfVklEMiwKK307CisKK2VudW0gb21hcGZiX2NoYW5uZWxfb3V0IHsKKwlPTUFQRkJfQ0hBTk5FTF9PVVRfTENEID0gMCwKKwlPTUFQRkJfQ0hBTk5FTF9PVVRfRElHSVQsCit9OworCitzdHJ1Y3Qgb21hcGZiX3NldHVwX3BsYW5lIHsKKwl1OCAgcGxhbmU7CisJdTggIGNoYW5uZWxfb3V0OworCXUzMiBvZmZzZXQ7CisJdTMyIHBvc194LCBwb3NfeTsKKwl1MzIgd2lkdGgsIGhlaWdodDsKKwl1MzIgY29sb3JfbW9kZTsKK307CisKK3N0cnVjdCBvbWFwZmJfZW5hYmxlX3BsYW5lIHsKKwl1OCAgcGxhbmU7CisJdTggIGVuYWJsZTsKK307CisKK2VudW0gb21hcGZiX2NvbG9yX2tleV90eXBlIHsKKwlPTUFQRkJfQ09MT1JfS0VZX0RJU0FCTEVEID0gMCwKKwlPTUFQRkJfQ09MT1JfS0VZX0dGWF9EU1QsCisJT01BUEZCX0NPTE9SX0tFWV9WSURfU1JDLAorfTsKKworc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkgeworCXU4ICBjaGFubmVsX291dDsKKwl1MzIgYmFja2dyb3VuZDsKKwl1MzIgdHJhbnNfa2V5OworCXU4ICBrZXlfdHlwZTsKK307CisKK2VudW0gb21hcGZiX3VwZGF0ZV9tb2RlIHsKKwlPTUFQRkJfVVBEQVRFX0RJU0FCTEVEID0gMCwKKwlPTUFQRkJfQVVUT19VUERBVEUsCisJT01BUEZCX01BTlVBTF9VUERBVEUKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2RlZmluZSBPTUFQX0xDRENfSU5WX1ZTWU5DICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBPTUFQX0xDRENfSU5WX0hTWU5DICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBPTUFQX0xDRENfSU5WX1BJWF9DTE9DSyAgICAgICAgIDB4MDAwNAorI2RlZmluZSBPTUFQX0xDRENfSU5WX09VVFBVVF9FTiAgICAgICAgIDB4MDAwOAorI2RlZmluZSBPTUFQX0xDRENfSFNWU19SSVNJTkdfRURHRSAgICAgIDB4MDAxMAorI2RlZmluZSBPTUFQX0xDRENfSFNWU19PUFBPU0lURSAgICAgICAgIDB4MDAyMAorCisjZGVmaW5lIE9NQVBfTENEQ19TSUdOQUxfTUFTSwkJMHgwMDNmCisKKyNkZWZpbmUgT01BUF9MQ0RDX1BBTkVMX1RGVAkJMHgwMTAwCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQorI2RlZmluZSBPTUFQRkJfUExBTkVfTlVNCQkxCisjZWxzZQorI2RlZmluZSBPTUFQRkJfUExBTkVfTlVNCQkzCisjZW5kaWYKKworc3RydWN0IG9tYXBmYl9kZXZpY2U7CisKK3N0cnVjdCBsY2RfcGFuZWwgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJaW50CQljb25maWc7CQkvKiBURlQvU1ROLCBzaWduYWwgaW52ZXJzaW9uICovCisJaW50CQlicHA7CQkvKiBQaXhlbCBmb3JtYXQgaW4gZmIgbWVtICovCisJaW50CQlkYXRhX2xpbmVzOwkvKiBMaW5lcyBvbiBMQ0QgSFcgaW50ZXJmYWNlICovCisKKwlpbnQJCXhfcmVzLCB5X3JlczsKKwlpbnQJCXBpeGVsX2Nsb2NrOwkvKiBJbiBrSHogKi8KKwlpbnQJCWhzdzsJCS8qIEhvcml6b250YWwgc3luY2hyb25pemF0aW9uCisJCQkJCSAgIHB1bHNlIHdpZHRoICovCisJaW50CQloZnA7CQkvKiBIb3Jpem9udGFsIGZyb250IHBvcmNoICovCisJaW50CQloYnA7CQkvKiBIb3Jpem9udGFsIGJhY2sgcG9yY2ggKi8KKwlpbnQJCXZzdzsJCS8qIFZlcnRpY2FsIHN5bmNocm9uaXphdGlvbgorCQkJCQkgICBwdWxzZSB3aWR0aCAqLworCWludAkJdmZwOwkJLyogVmVydGljYWwgZnJvbnQgcG9yY2ggKi8KKwlpbnQJCXZicDsJCS8qIFZlcnRpY2FsIGJhY2sgcG9yY2ggKi8KKwlpbnQJCWFjYjsJCS8qIGFjLWJpYXMgcGluIGZyZXF1ZW5jeSAqLworCWludAkJcGNkOwkJLyogcGl4ZWwgY2xvY2sgZGl2aWRlci4KKwkJCQkJICAgT2Jzb2xldGUgdXNlIHBpeGVsX2Nsb2NrIGluc3RlYWQgKi8KKworCWludAkJKCppbml0KQkJKHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldik7CisJdm9pZAkJKCpjbGVhbnVwKQkodm9pZCk7CisJaW50CQkoKmVuYWJsZSkJKHZvaWQpOworCXZvaWQJCSgqZGlzYWJsZSkJKHZvaWQpOworCXVuc2lnbmVkIGxvbmcJKCpnZXRfY2FwcykJKHZvaWQpOworCWludAkJKCpzZXRfYmtsaWdodF9sZXZlbCkodW5zaWduZWQgaW50IGxldmVsKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfYmtsaWdodF9sZXZlbCkodm9pZCk7CisJdW5zaWduZWQgaW50CSgqZ2V0X2JrbGlnaHRfbWF4KSAgKHZvaWQpOworCWludAkJKCpydW5fdGVzdCkJKGludCB0ZXN0X251bSk7Cit9OworCitzdHJ1Y3Qgb21hcGZiX2RldmljZTsKKworc3RydWN0IGV4dGlmX3RpbWluZ3MgeworCWludCBjc19vbl90aW1lOworCWludCBjc19vZmZfdGltZTsKKwlpbnQgd2Vfb25fdGltZTsKKwlpbnQgd2Vfb2ZmX3RpbWU7CisJaW50IHJlX29uX3RpbWU7CisJaW50IHJlX29mZl90aW1lOworCWludCB3ZV9jeWNsZV90aW1lOworCWludCByZV9jeWNsZV90aW1lOworCWludCBjc19wdWxzZV93aWR0aDsKKwlpbnQgYWNjZXNzX3RpbWU7Cit9OworCitzdHJ1Y3QgbGNkX2N0cmxfZXh0aWYgeworCWludCAgKCppbml0KQkJKHZvaWQpOworCXZvaWQgKCpjbGVhbnVwKQkJKHZvaWQpOworCXZvaWQgKCpzZXRfdGltaW5ncykJKGNvbnN0IHN0cnVjdCBleHRpZl90aW1pbmdzICp0aW1pbmdzKTsKKwl2b2lkICgqd3JpdGVfY29tbWFuZCkJKHUzMiBjbWQpOworCXUzMiAgKCpyZWFkX2RhdGEpCSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfZGF0YSkJKHUzMiBkYXRhKTsKKwl2b2lkICgqdHJhbnNmZXJfYXJlYSkJKGludCB3aWR0aCwgaW50IGhlaWdodCwKKwkJCQkgdm9pZCAoY2FsbGJhY2spKHZvaWQgKiBkYXRhKSwgdm9pZCAqZGF0YSk7Cit9OworCitzdHJ1Y3QgbGNkX2N0cmwgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdm9pZAkJKmRhdGE7CisKKwlpbnQJCSgqaW5pdCkJCSAgKHN0cnVjdCBvbWFwZmJfZGV2aWNlICpmYmRldiwKKwkJCQkJICAgaW50IGV4dF9tb2RlLCBpbnQgcmVxX3ZyYW1fc2l6ZSk7CisJdm9pZAkJKCpjbGVhbnVwKQkgICh2b2lkKTsKKwl2b2lkCQkoKmdldF92cmFtX2xheW91dCkodW5zaWduZWQgbG9uZyAqc2l6ZSwKKwkJCQkJICAgdm9pZCAqKnZpcnRfYmFzZSwKKwkJCQkJICAgZG1hX2FkZHJfdCAqcGh5c19iYXNlKTsKKwl1bnNpZ25lZCBsb25nCSgqZ2V0X2NhcHMpCSAgKHZvaWQpOworCWludAkJKCpzZXRfdXBkYXRlX21vZGUpKGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlIG1vZGUpOworCWVudW0gb21hcGZiX3VwZGF0ZV9tb2RlICgqZ2V0X3VwZGF0ZV9tb2RlKSh2b2lkKTsKKwlpbnQJCSgqc2V0dXBfcGxhbmUpCSAgKGludCBwbGFuZSwgaW50IGNoYW5uZWxfb3V0LAorCQkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgaW50IHNjcmVlbl93aWR0aCwKKwkJCQkJICAgaW50IHBvc194LCBpbnQgcG9zX3ksIGludCB3aWR0aCwKKwkJCQkJICAgaW50IGhlaWdodCwgaW50IGNvbG9yX21vZGUpOworCWludAkJKCplbmFibGVfcGxhbmUpCSAgKGludCBwbGFuZSwgaW50IGVuYWJsZSk7CisJaW50CQkoKnVwZGF0ZV93aW5kb3cpICAoc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93ICp3aW4sCisJCQkJCSAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSwKKwkJCQkJICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CisJdm9pZAkJKCpzeW5jKQkJICAodm9pZCk7CisJdm9pZAkJKCpzdXNwZW5kKQkgICh2b2lkKTsKKwl2b2lkCQkoKnJlc3VtZSkJICAodm9pZCk7CisJaW50CQkoKnJ1bl90ZXN0KQkgIChpbnQgdGVzdF9udW0pOworCWludAkJKCpzZXRjb2xyZWcpCSAgKHVfaW50IHJlZ25vLCB1MTYgcmVkLCB1MTYgZ3JlZW4sCisJCQkJCSAgIHUxNiBibHVlLCB1MTYgdHJhbnNwLAorCQkJCQkgICBpbnQgdXBkYXRlX2h3X21lbSk7CisJaW50CQkoKnNldF9jb2xvcl9rZXkpICAoc3RydWN0IG9tYXBmYl9jb2xvcl9rZXkgKmNrKTsKKworfTsKKworZW51bSBvbWFwZmJfc3RhdGUgeworCU9NQVBGQl9ESVNBQkxFRAk9IDAsCisJT01BUEZCX1NVU1BFTkRFRD0gOTksCisJT01BUEZCX0FDVElWRQk9IDEwMAorfTsKKworc3RydWN0IG9tYXBmYl9kZXZpY2UgeworCWludAkJCXN0YXRlOworCWludCAgICAgICAgICAgICAgICAgICAgIGV4dF9sY2RjOyAgICAgICAgICAgICAgIC8qIFVzaW5nIGV4dGVybmFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExDRCBjb250cm9sbGVyICovCisJc3RydWN0IHNlbWFwaG9yZQlycXVldWVfc2VtYTsKKworCXZvaWQJCQkqdnJhbV92aXJ0X2Jhc2U7CisJZG1hX2FkZHJfdAkJdnJhbV9waHlzX2Jhc2U7CisJdW5zaWduZWQgbG9uZwkJdnJhbV9zaXplOworCisJaW50CQkJY29sb3JfbW9kZTsKKwlpbnQJCQlwYWxldHRlX3NpemU7CisJaW50CQkJbWlycm9yOworCXUzMgkJCXBzZXVkb19wYWxldHRlWzE3XTsKKworCXN0cnVjdCBsY2RfcGFuZWwJKnBhbmVsOwkJCS8qIExDRCBwYW5lbCAqLworCXN0cnVjdCBsY2RfY3RybCAgICAgICAgICpjdHJsOwkJCS8qIExDRCBjb250cm9sbGVyICovCisJc3RydWN0IGxjZF9jdHJsCQkqaW50X2N0cmw7CQkvKiBpbnRlcm5hbCBMQ0QgY3RybCAqLworCXN0cnVjdCBsY2RfY3RybF9leHRpZgkqZXh0X2lmOwkJLyogTENEIGN0cmwgZXh0ZXJuYWwKKwkJCQkJCQkgICBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgZmJfaW5mbwkJKmZiX2luZm87CisKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworfTsKKworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaDNfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoMl9wYW5lbDsKK2V4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIHAyX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgb3NrX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTYxMF9wYW5lbDsKK2V4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGlubm92YXRvcjE1MTBfcGFuZWw7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQorZXh0ZXJuIHN0cnVjdCBsY2RfY3RybCBvbWFwMV9sY2RfY3RybDsKKyNlbHNlCitleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAyX2Rpc3BfY3RybDsKKyNlbmRpZgorCitleHRlcm4gdm9pZCBvbWFwZmJfd3JpdGVfZmlyc3RfcGl4ZWwoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LCB1MTYgcGl4dmFsKTsKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworI2VuZGlmIC8qIF9fT01BUEZCX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAppbmRleCBmYmQ3NDJkLi43Yzc5MDQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCkBAIC05OCw3ICs5OCwxNCBAQAogI2RlZmluZSBPTUFQMTYxMF9JRExFQ1QzCQkweGZmZmVjZTI0CiAjZGVmaW5lIE9NQVAxNjEwX0lETEVfTE9PUF9SRVFVRVNUCTB4MDQwMAogCi0jaWYgICAgICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKSAmJiBcCisjZGVmaW5lIE9NQVA3MzBfSURMRUNUMV9TTEVFUF9WQUwJMHgxNmM3CisjZGVmaW5lIE9NQVA3MzBfSURMRUNUMl9TTEVFUF9WQUwJMHgwOWM3CisjZGVmaW5lIE9NQVA3MzBfSURMRUNUM19WQUwJCTB4M2YKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QzCQkweGZmZmVjZTI0CisjZGVmaW5lIE9NQVA3MzBfSURMRV9MT09QX1JFUVVFU1QJMHgwQzAwCisKKyNpZiAgICAgIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkgJiYgXAorCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSAmJiBcCiAJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKICNlcnJvciAiUG93ZXIgbWFuYWdlbWVudCBmb3IgdGhpcyBwcm9jZXNzb3Igbm90IGltcGxlbWVudGVkIHlldCIKQEAgLTEwNyw4ICsxMTQsMTAgQEAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogZXh0ZXJuIHZvaWQgb21hcF9wbV9pZGxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcF9wbV9zdXNwZW5kKHZvaWQpOworZXh0ZXJuIHZvaWQgb21hcDczMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE1MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CitleHRlcm4gdm9pZCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIApAQCAtMTE4LDYgKzEyNyw4IEBACiAjZGVmaW5lIG9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcih4KQl7fQogI2VuZGlmCS8qIENPTkZJR19PTUFQX1NFUklBTF9XQUtFICovCiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB1bnNpZ25lZCBpbnQgb21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZF9zejsKIGV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfY3B1X3N1c3BlbmRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTYxMF9jcHVfc3VzcGVuZF9zejsKQEAgLTEzMSw2ICsxNDIsMTAgQEAKICNkZWZpbmUgVUxQRF9SRVNUT1JFKHgpIG9tYXBfd3JpdGV3KCh1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIFVMUERfU0hPVyh4KSB1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFXyMjeF0KIAorI2RlZmluZSBNUFVJNzMwX1NBVkUoeCkgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdID0gb21hcF9yZWFkbCh4KQorI2RlZmluZSBNUFVJNzMwX1JFU1RPUkUoeCkgb21hcF93cml0ZWwoKG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKKyNkZWZpbmUgTVBVSTczMF9TSE9XKHgpIG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfIyN4XQorCiAjZGVmaW5lIE1QVUkxNTEwX1NBVkUoeCkgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCiAjZGVmaW5lIE1QVUkxNTEwX1JFU1RPUkUoeCkgb21hcF93cml0ZWwoKG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQogI2RlZmluZSBNUFVJMTUxMF9TSE9XKHgpIG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV8jI3hdCkBAIC0xODgsMTMgKzIwMywzNCBAQAogCU1QVUkxNTEwX1NMRUVQX1NBVkVfRU1JRlNfQ09ORklHLAogCU1QVUkxNTEwX1NMRUVQX1NBVkVfT01BUF9JSDFfTUlSLAogCU1QVUkxNTEwX1NMRUVQX1NBVkVfT01BUF9JSDJfTUlSLAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKIAlNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkUKICNlbHNlCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9TSVpFID0gMAogI2VuZGlmCiB9OwogCitlbnVtIG1wdWk3MzBfc2F2ZV9zdGF0ZSB7CisJTVBVSTczMF9TTEVFUF9TQVZFX1NUQVJUID0gMCwKKwkvKgorCSAqIE1QVUkgcmVnaXN0ZXJzIDMyIGJpdHMKKwkgKi8KKwlNUFVJNzMwX1NMRUVQX1NBVkVfTVBVSV9DVFJMLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9CT09UX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfTVBVSV9EU1BfQVBJX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfTVBVSV9EU1BfU1RBVFVTLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9FTUlGRl9TRFJBTV9DT05GSUcsCisJTVBVSTczMF9TTEVFUF9TQVZFX0VNSUZTX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfT01BUF9JSDFfTUlSLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMl8wX01JUiwKKwlNUFVJNzMwX1NMRUVQX1NBVkVfT01BUF9JSDJfMV9NSVIsCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorCU1QVUk3MzBfU0xFRVBfU0FWRV9TSVpFCisjZWxzZQorCU1QVUk3MzBfU0xFRVBfU0FWRV9TSVpFID0gMAorI2VuZGlmCit9OworCiBlbnVtIG1wdWkxNjEwX3NhdmVfc3RhdGUgewogCU1QVUkxNjEwX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAogCS8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ByY20uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDhhNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3ByY20uaApAQCAtMCwwICsxLDQyOSBAQAorLyoKKyAqIHByY20uaCAtIEFjY2VzcyBkZWZpbmF0aW9ucyBmb3IgdXNlIGluIE9NQVAyNFhYIGNsb2NrIGFuZCBwb3dlciBtYW5hZ2VtZW50CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisKKy8qIFNFVF9QRVJGT1JNQU5DRV9MRVZFTCBQQVJBTUVURVJTICovCisjZGVmaW5lIFBSQ01fSEFMRl9TUEVFRCAxCisjZGVmaW5lIFBSQ01fRlVMTF9TUEVFRCAyCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworCisjZGVmaW5lIFBSQ01fUkVHMzIob2Zmc2V0KQlfX1JFRzMyKE9NQVAyNFhYX1BSQ01fQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFBSQ01fUkVWSVNJT04JCVBSQ01fUkVHMzIoMHgwMDApCisjZGVmaW5lIFBSQ01fU1lTQ09ORklHCQlQUkNNX1JFRzMyKDB4MDEwKQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19NUFUJUFJDTV9SRUczMigweDAxOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfTVBVCVBSQ01fUkVHMzIoMHgwMUMpCisjZGVmaW5lIFBSQ01fVk9MVENUUkwJCVBSQ01fUkVHMzIoMHgwNTApCisjZGVmaW5lIFBSQ01fVk9MVFNUCQlQUkNNX1JFRzMyKDB4MDU0KQorI2RlZmluZSBQUkNNX0NMS1NSQ19DVFJMCVBSQ01fUkVHMzIoMHgwNjApCisjZGVmaW5lIFBSQ01fQ0xLT1VUX0NUUkwJUFJDTV9SRUczMigweDA3MCkKKyNkZWZpbmUgUFJDTV9DTEtFTVVMX0NUUkwJUFJDTV9SRUczMigweDA3OCkKKyNkZWZpbmUgUFJDTV9DTEtDRkdfQ1RSTAlQUkNNX1JFRzMyKDB4MDgwKQorI2RlZmluZSBQUkNNX0NMS0NGR19TVEFUVVMJUFJDTV9SRUczMigweDA4NCkKKyNkZWZpbmUgUFJDTV9WT0xUU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTApCisjZGVmaW5lIFBSQ01fQ0xLU1NFVFVQCQlQUkNNX1JFRzMyKDB4MDk0KQorI2RlZmluZSBQUkNNX1BPTENUUkwJCVBSQ01fUkVHMzIoMHgwOTgpCisKKy8qIEdFTkVSQUwgUFVSUE9TRSAqLworI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxCVBSQ01fUkVHMzIoMHgwQjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIJUFJDTV9SRUczMigweDBCNCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMwlQUkNNX1JFRzMyKDB4MEI4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U0CVBSQ01fUkVHMzIoMHgwQkMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTUJUFJDTV9SRUczMigweDBDMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNglQUkNNX1JFRzMyKDB4MEM0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U3CVBSQ01fUkVHMzIoMHgwQzgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTgJUFJDTV9SRUczMigweDBDQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOQlQUkNNX1JFRzMyKDB4MEQwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMAlQUkNNX1JFRzMyKDB4MEQ0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMQlQUkNNX1JFRzMyKDB4MEQ4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMglQUkNNX1JFRzMyKDB4MERDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxMwlQUkNNX1JFRzMyKDB4MEUwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNAlQUkNNX1JFRzMyKDB4MEU0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNQlQUkNNX1JFRzMyKDB4MEU4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNglQUkNNX1JFRzMyKDB4MEVDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxNwlQUkNNX1JFRzMyKDB4MEYwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOAlQUkNNX1JFRzMyKDB4MEY0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UxOQlQUkNNX1JFRzMyKDB4MEY4KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UyMAlQUkNNX1JFRzMyKDB4MEZDKQorCisvKiBNUFUgKi8KKyNkZWZpbmUgQ01fQ0xLU0VMX01QVQkJUFJDTV9SRUczMigweDE0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX01QVQlQUkNNX1JFRzMyKDB4MTQ4KQorI2RlZmluZSBSTV9SU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxNTgpCisjZGVmaW5lIFBNX1dLREVQX01QVQkJUFJDTV9SRUczMigweDFDOCkKKyNkZWZpbmUgUE1fRVZHRU5DVFJMX01QVQlQUkNNX1JFRzMyKDB4MUQ0KQorI2RlZmluZSBQTV9FVkVHRU5PTlRJTV9NUFUJUFJDTV9SRUczMigweDFEOCkKKyNkZWZpbmUgUE1fRVZFR0VOT0ZGVElNX01QVQlQUkNNX1JFRzMyKDB4MURDKQorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFUJCVBSQ01fUkVHMzIoMHgxRTApCisjZGVmaW5lIFBNX1BXU1RTVF9NUFUJCVBSQ01fUkVHMzIoMHgxRTQpCisKKy8qIENPUkUgKi8KKyNkZWZpbmUgQ01fRkNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjAwKQorI2RlZmluZSBDTV9GQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDQpCisjZGVmaW5lIENNX0ZDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIwOCkKKyNkZWZpbmUgQ01fSUNMS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjEwKQorI2RlZmluZSBDTV9JQ0xLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTQpCisjZGVmaW5lIENNX0lDTEtFTjNfQ09SRQkJUFJDTV9SRUczMigweDIxOCkKKyNkZWZpbmUgQ01fSUNMS0VONF9DT1JFCQlQUkNNX1JFRzMyKDB4MjFDKQorI2RlZmluZSBDTV9JRExFU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjApCisjZGVmaW5lIENNX0lETEVTVDJfQ09SRQkJUFJDTV9SRUczMigweDIyNCkKKyNkZWZpbmUgQ01fSURMRVNUM19DT1JFCQlQUkNNX1JFRzMyKDB4MjI4KQorI2RlZmluZSBDTV9JRExFU1Q0X0NPUkUJCVBSQ01fUkVHMzIoMHgyMkMpCisjZGVmaW5lIENNX0FVVE9JRExFMV9DT1JFCVBSQ01fUkVHMzIoMHgyMzApCisjZGVmaW5lIENNX0FVVE9JRExFMl9DT1JFCVBSQ01fUkVHMzIoMHgyMzQpCisjZGVmaW5lIENNX0FVVE9JRExFM19DT1JFCVBSQ01fUkVHMzIoMHgyMzgpCisjZGVmaW5lIENNX0FVVE9JRExFNF9DT1JFCVBSQ01fUkVHMzIoMHgyM0MpCisjZGVmaW5lIENNX0NMS1NFTDFfQ09SRQkJUFJDTV9SRUczMigweDI0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjQ0KQorI2RlZmluZSBDTV9DTEtTVENUUkxfQ09SRQlQUkNNX1JFRzMyKDB4MjQ4KQorI2RlZmluZSBQTV9XS0VOMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkEwKQorI2RlZmluZSBQTV9XS0VOMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkE0KQorI2RlZmluZSBQTV9XS1NUMV9DT1JFCQlQUkNNX1JFRzMyKDB4MkIwKQorI2RlZmluZSBQTV9XS1NUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MkI0KQorI2RlZmluZSBQTV9XS0RFUF9DT1JFCQlQUkNNX1JFRzMyKDB4MkM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyRTApCisjZGVmaW5lIFBNX1BXU1RTVF9DT1JFCQlQUkNNX1JFRzMyKDB4MkU0KQorCisvKiBHRlggKi8KKyNkZWZpbmUgQ01fRkNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX0dGWAkJUFJDTV9SRUczMigweDMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX0dGWAkJUFJDTV9SRUczMigweDMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0dGWAkJUFJDTV9SRUczMigweDM0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0dGWAlQUkNNX1JFRzMyKDB4MzQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDM1MCkKKyNkZWZpbmUgUk1fUlNUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzU4KQorI2RlZmluZSBQTV9XS0RFUF9HRlgJCVBSQ01fUkVHMzIoMHgzQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0dGWAkJUFJDTV9SRUczMigweDNFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0dGWAkJUFJDTV9SRUczMigweDNFNCkKKworLyogV0FLRS1VUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0MTApCisjZGVmaW5lIENNX0lETEVTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9XS1VQCVBSQ01fUkVHMzIoMHg0MzApCisjZGVmaW5lIENNX0NMS1NFTF9XS1VQCQlQUkNNX1JFRzMyKDB4NDQwKQorI2RlZmluZSBSTV9SU1RDVFJMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NTApCisjZGVmaW5lIFJNX1JTVFRJTUVfV0tVUAkJUFJDTV9SRUczMigweDQ1NCkKKyNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJUFJDTV9SRUczMigweDQ1OCkKKyNkZWZpbmUgUE1fV0tFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NEEwKQorI2RlZmluZSBQTV9XS1NUX1dLVVAJCVBSQ01fUkVHMzIoMHg0QjApCisKKy8qIENMT0NLUyAqLworI2RlZmluZSBDTV9DTEtFTl9QTEwJCVBSQ01fUkVHMzIoMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTgkJUFJDTV9SRUczMigweDUyMCkKKyNkZWZpbmUgQ01fQVVUT0lETEVfUExMCQlQUkNNX1JFRzMyKDB4NTMwKQorI2RlZmluZSBDTV9DTEtTRUwxX1BMTAkJUFJDTV9SRUczMigweDU0MCkKKyNkZWZpbmUgQ01fQ0xLU0VMMl9QTEwJCVBSQ01fUkVHMzIoMHg1NDQpCisKKy8qIERTUCAqLworI2RlZmluZSBDTV9GQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODAwKQorI2RlZmluZSBDTV9JQ0xLRU5fRFNQCQlQUkNNX1JFRzMyKDB4ODEwKQorI2RlZmluZSBDTV9JRExFU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9EU1AJCVBSQ01fUkVHMzIoMHg4MzApCisjZGVmaW5lIENNX0NMS1NFTF9EU1AJCVBSQ01fUkVHMzIoMHg4NDApCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9EU1AJUFJDTV9SRUczMigweDg0OCkKKyNkZWZpbmUgUk1fUlNUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4NTApCisjZGVmaW5lIFJNX1JTVFNUX0RTUAkJUFJDTV9SRUczMigweDg1OCkKKyNkZWZpbmUgUE1fV0tFTl9EU1AJCVBSQ01fUkVHMzIoMHg4QTApCisjZGVmaW5lIFBNX1dLREVQX0RTUAkJUFJDTV9SRUczMigweDhDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfRFNQCQlQUkNNX1JFRzMyKDB4OEUwKQorI2RlZmluZSBQTV9QV1NUU1RfRFNQCQlQUkNNX1JFRzMyKDB4OEU0KQorI2RlZmluZSBQUkNNX0lSUVNUQVRVU19EU1AJUFJDTV9SRUczMigweDhGMCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfRFNQCVBSQ01fUkVHMzIoMHg4RjQpCisKKy8qIElWQSAqLworI2RlZmluZSBQUkNNX0lSUVNUQVRVU19JVkEJUFJDTV9SRUczMigweDhGOCkKKyNkZWZpbmUgUFJDTV9JUlFFTkFCTEVfSVZBCVBSQ01fUkVHMzIoMHg4RkMpCisKKy8qIE1vZGVtIG9uIDI0MzAgKi8KKyNkZWZpbmUgQ01fRkNMS0VOX01ETQkJUFJDTV9SRUczMigweEMwMCkKKyNkZWZpbmUgQ01fSUNMS0VOX01ETQkJUFJDTV9SRUczMigweEMxMCkKKyNkZWZpbmUgQ01fSURMRVNUX01ETQkJUFJDTV9SRUczMigweEMyMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX01ETQkJUFJDTV9SRUczMigweEM0MCkKKworLyogRklYTUU6IE1vdmUgdG8gaGVhZGVyIGZvciAyNDMwICovCisjZGVmaW5lIERJU1BfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg1MDAwMCkKKyNkZWZpbmUgRElTUF9SRUczMihvZmZzZXQpCV9fUkVHMzIoRElTUF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgT01BUDI0WFhfR1BNQ19CQVNFCShMM18yNFhYX0JBU0UgKyAweGEwMDApCisjZGVmaW5lIEdQTUNfQkFTRQkJKE9NQVAyNFhYX0dQTUNfQkFTRSkKKyNkZWZpbmUgR1BNQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BNQ19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgR1BUMV9CQVNFCQkoT01BUDI0WFhfR1BUMSkKKyNkZWZpbmUgR1BUMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BUMV9CQVNFICsgKG9mZnNldCkpCisKKy8qIE1pc2Mgc3lzY29uZmlnICovCisjZGVmaW5lIERJU1BDX1NZU0NPTkZJRwkJRElTUF9SRUczMigweDQxMCkKKyNkZWZpbmUgU1BJX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTgwMDApCisjZGVmaW5lIE1DU1BJMV9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSArIDB4MTApCisjZGVmaW5lIE1DU1BJMl9TWVNDT05GSUcJX19SRUczMihTUElfQkFTRSsweDIwMDAgKyAweDEwKQorCisvLyNkZWZpbmUgRFNQX01NVV9TWVNDT05GSUcJMHg1QTAwMDAxMAorI2RlZmluZSBDQU1FUkFfTU1VX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDJDMTApCisvLyNkZWZpbmUgSVZBX01NVV9TWVNDT05GSUcJMHg1RDAwMDAxMAorLy8jZGVmaW5lIERTUF9ETUFfU1lTQ09ORklHCTB4MDBGQ0MwMkMKKyNkZWZpbmUgQ0FNRVJBX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyODJDKQorI2RlZmluZSBTWVNURU1fRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDYwMkMpCisjZGVmaW5lIEdQTUNfU1lTQ09ORklHCQlHUE1DX1JFRzMyKDB4MDEwKQorI2RlZmluZSBNQUlMQk9YRVNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDk0MDEwKQorI2RlZmluZSBVQVJUMV9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZBMDU0KQorI2RlZmluZSBVQVJUMl9TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZDMDU0KQorI2RlZmluZSBVQVJUM19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDZFMDU0KQorLy8jZGVmaW5lIElWQV9TWVNDT05GSUcJCTB4NUMwNjAwMTAKKyNkZWZpbmUgU0RSQ19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MTApCisjZGVmaW5lIFNNU19TWVNDT05GSUcJCV9fUkVHMzIoT01BUDI0WFhfU01TX0JBU0UrMHgxMCkKKyNkZWZpbmUgU1NJX1NZU0NPTkZJRwkJX19SRUczMihESVNQX0JBU0UrMHg4MDEwKQorLy8jZGVmaW5lIFZMWU5RX1NZU0NPTkZJRwkweDY3RkZGRTEwCisKKy8qIHJrdyAtIGdvb2QgY2FubmlkYXRlcyBmb3IgUE1fIHRvIHN0YXJ0IHdoYXQgbm0gd2FzIHRyeWluZyAqLworI2RlZmluZSBPTUFQMjRYWF9HUFQyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDJBMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQzCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDc4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ0CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdBMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ1CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdDMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ2CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDdFMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ3CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgwMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ4CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDgyMDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQ5CQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg0MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4NjAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTEJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEyCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDhBMDAwKQorCisjZGVmaW5lIEdQVElNRVIxX1NZU0NPTkZJRwlHUFQxX1JFRzMyKDB4MDEwKQorI2RlZmluZSBHUFRJTUVSMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQyICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjNfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI0X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDQgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ1ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjZfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNiArIDB4MTApCisjZGVmaW5lIEdQVElNRVI3X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDcgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ4ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjlfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOSArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMCArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMSArIDB4MTApCisjZGVmaW5lIEdQVElNRVIxMl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQxMiArIDB4MTApCisKKyNkZWZpbmUgR1BJT1hfQkFTRShYKQkJKE9NQVAyNFhYX0dQSU9fQkFTRSsoMHgyMDAwKigoWCktMSkpKQorCisjZGVmaW5lIEdQSU8xX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgxKSsweDEwKSkKKyNkZWZpbmUgR1BJTzJfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDIpKzB4MTApKQorI2RlZmluZSBHUElPM19TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMykrMHgxMCkpCisjZGVmaW5lIEdQSU80X1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSg0KSsweDEwKSkKKworLyogR1AgVElNRVIgMSAqLworI2RlZmluZSBHUFRJTUVSMV9USVNUQVQJCUdQVDFfUkVHMzIoMHgwMTQpCisjZGVmaW5lIEdQVElNRVIxX1RJU1IJCUdQVDFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQVElNRVIxX1RJRVIJCUdQVDFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQVElNRVIxX1RXRVIJCUdQVDFfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQVElNRVIxX1RDTFIJCUdQVDFfUkVHMzIoMHgwMjQpCisjZGVmaW5lIEdQVElNRVIxX1RDUlIJCUdQVDFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQVElNRVIxX1RMRFIJCUdQVDFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQVElNRVIxX1RUR1IJCUdQVDFfUkVHMzIoMHgwMzApCisjZGVmaW5lIEdQVElNRVIxX1RXUFMJCUdQVDFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQVElNRVIxX1RNQVIJCUdQVDFfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQVElNRVIxX1RDQVIxCQlHUFQxX1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUFRJTUVSMV9UU0lDUgkJR1BUMV9SRUczMigweDA0MCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjIJCUdQVDFfUkVHMzIoMHgwNDQpCisKKy8qIHJrdyAtLSBiYXNlIGZpeCB1cCBwbGVhc2UuLi4gKi8KKyNkZWZpbmUgR1BUSU1FUjNfVElTUgkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMTgpCisKKy8qIFNEUkMgKi8KKyNkZWZpbmUgU0RSQ19ETExBX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDYwKQorI2RlZmluZSBTRFJDX0RMTEFfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY0KQorI2RlZmluZSBTRFJDX0RMTEJfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjgpCisjZGVmaW5lIFNEUkNfRExMQl9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNkMpCisjZGVmaW5lIFNEUkNfUE9XRVIJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDcwKQorI2RlZmluZSBTRFJDX01SXzAJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDg0KQorCisvKiBHUElPIDEgKi8KKyNkZWZpbmUgR1BJTzFfQkFTRQkJR1BJT1hfQkFTRSgxKQorI2RlZmluZSBHUElPMV9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzFfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPMV9JUlFFTkFCTEUxCUdQSU8xX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPMV9JUlFTVEFUVVMxCUdQSU8xX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPMV9JUlFFTkFCTEUyCUdQSU8xX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPMV9JUlFTVEFUVVMyCUdQSU8xX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPMV9XQUtFVVBFTkFCTEUJR1BJTzFfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8xX1JJU0lOR0RFVEVDVAlHUElPMV9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzFfREFUQUlOCQlHUElPMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzFfT0UJCUdQSU8xX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPMV9EQVRBT1VUCQlHUElPMV9SRUczMigweDAzQykKKworLyogR1BJTzIgKi8KKyNkZWZpbmUgR1BJTzJfQkFTRQkJR1BJT1hfQkFTRSgyKQorI2RlZmluZSBHUElPMl9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzJfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPMl9JUlFFTkFCTEUxCUdQSU8yX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPMl9JUlFTVEFUVVMxCUdQSU8yX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPMl9JUlFFTkFCTEUyCUdQSU8yX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPMl9JUlFTVEFUVVMyCUdQSU8yX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPMl9XQUtFVVBFTkFCTEUJR1BJTzJfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8yX1JJU0lOR0RFVEVDVAlHUElPMl9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzJfREFUQUlOCQlHUElPMl9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzJfT0UJCUdQSU8yX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPMl9EQVRBT1VUCQlHUElPMl9SRUczMigweDAzQykKKworLyogR1BJTyAzICovCisjZGVmaW5lIEdQSU8zX0JBU0UJCUdQSU9YX0JBU0UoMykKKyNkZWZpbmUgR1BJTzNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8zX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMQlHUElPM19SRUczMigweDAxQykKKyNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMQlHUElPM19SRUczMigweDAxOCkKKyNkZWZpbmUgR1BJTzNfSVJRRU5BQkxFMglHUElPM19SRUczMigweDAyQykKKyNkZWZpbmUgR1BJTzNfSVJRU1RBVFVTMglHUElPM19SRUczMigweDAyOCkKKyNkZWZpbmUgR1BJTzNfV0FLRVVQRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUElPM19SSVNJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNDgpCisjZGVmaW5lIEdQSU8zX0ZBTExJTkdERVRFQ1QJR1BJTzNfUkVHMzIoMHgwNEMpCisjZGVmaW5lIEdQSU8zX0RBVEFJTgkJR1BJTzNfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQSU8zX09FCQlHUElPM19SRUczMigweDAzNCkKKyNkZWZpbmUgR1BJTzNfREFUQU9VVAkJR1BJTzNfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQSU8zX0RFQk9VTkNFTkFCTEUJR1BJTzNfUkVHMzIoMHgwNTApCisjZGVmaW5lIEdQSU8zX0RFQk9VTkNJTkdUSU1FCUdQSU8zX1JFRzMyKDB4MDU0KQorCisvKiBHUElPIDQgKi8KKyNkZWZpbmUgR1BJTzRfQkFTRQkJR1BJT1hfQkFTRSg0KQorI2RlZmluZSBHUElPNF9SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzRfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPNF9JUlFFTkFCTEUxCUdQSU80X1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPNF9JUlFTVEFUVVMxCUdQSU80X1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPNF9JUlFFTkFCTEUyCUdQSU80X1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPNF9JUlFTVEFUVVMyCUdQSU80X1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPNF9XQUtFVVBFTkFCTEUJR1BJTzRfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU80X1JJU0lOR0RFVEVDVAlHUElPNF9SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzRfRkFMTElOR0RFVEVDVAlHUElPNF9SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzRfREFUQUlOCQlHUElPNF9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzRfT0UJCUdQSU80X1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPNF9EQVRBT1VUCQlHUElPNF9SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzRfREVCT1VOQ0VOQUJMRQlHUElPNF9SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzRfREVCT1VOQ0lOR1RJTUUJR1BJTzRfUkVHMzIoMHgwNTQpCisKKworLyogSU8gQ09ORklHICovCisjZGVmaW5lIENPTlRST0xfQkFTRQkJKE9NQVAyNFhYX0NUUkxfQkFTRSkKKyNkZWZpbmUgQ09OVFJPTF9SRUczMihvZmZzZXQpCV9fUkVHMzIoQ09OVFJPTF9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NQSTFfTkNTMglDT05UUk9MX1JFRzMyKDB4MTA0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1lTX1hUQUxPVVQJQ09OVFJPTF9SRUczMigweDEzNCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1VBUlQxX1JYCUNPTlRST0xfUkVHMzIoMHgwQzgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9NQ0JTUDFfRFgJQ09OVFJPTF9SRUczMigweDEwQykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0dQTUNfTkNTNAlDT05UUk9MX1JFRzMyKDB4MDkwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q1CQlDT05UUk9MX1JFRzMyKDB4MEI4KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0Q5CQlDT05UUk9MX1JFRzMyKDB4MEJDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX0QxMwkJQ09OVFJPTF9SRUczMigweDBDMCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19WU1lOQwlDT05UUk9MX1JFRzMyKDB4MENDKQorCisvKiBDT05UUk9MICovCisjZGVmaW5lIENPTlRST0xfREVWQ09ORgkJQ09OVFJPTF9SRUczMigweDI3NCkKKworLyogSU5URVJSVVBUIENPTlRST0xMRVIgKi8KKyNkZWZpbmUgSU5UQ19CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweGZlMDAwKQorI2RlZmluZSBJTlRDX1JFRzMyKG9mZnNldCkJX19SRUczMihJTlRDX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBJTlRDMV9VX0JBU0UJCUlOVENfUkVHMzIoMHgwMDApCisjZGVmaW5lIElOVENfTUlSMAkJSU5UQ19SRUczMigweDA4NCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMAkJSU5UQ19SRUczMigweDA4QykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDg4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwOTQpCisjZGVmaW5lIElOVENfTUlSMQkJSU5UQ19SRUczMigweDBBNCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMQkJSU5UQ19SRUczMigweDBBQykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEE4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQjQpCisjZGVmaW5lIElOVENfTUlSMgkJSU5UQ19SRUczMigweDBDNCkKKyNkZWZpbmUgSU5UQ19NSVJfU0VUMgkJSU5UQ19SRUczMigweDBDQykKKyNkZWZpbmUgSU5UQ19NSVJfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEM4KQorI2RlZmluZSBJTlRDX0lTUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwRDQpCisjZGVmaW5lIElOVENfU0lSX0lSUQkJSU5UQ19SRUczMigweDA0MCkKKyNkZWZpbmUgSU5UQ19DT05UUk9MCQlJTlRDX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBJTlRDX0lMUjExCQlJTlRDX1JFRzMyKDB4MTJDKQorI2RlZmluZSBJTlRDX0lMUjMyCQlJTlRDX1JFRzMyKDB4MTgwKQorI2RlZmluZSBJTlRDX0lMUjM3CQlJTlRDX1JFRzMyKDB4MTk0KQorI2RlZmluZSBJTlRDX1NZU0NPTkZJRwkJSU5UQ19SRUczMigweDAxMCkKKworLyogUkFNIEZJUkVXQUxMICovCisjZGVmaW5lIFJBTUZXX0JBU0UJCSgweDY4MDA1MDAwKQorI2RlZmluZSBSQU1GV19SRUczMihvZmZzZXQpCV9fUkVHMzIoUkFNRldfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIFJBTUZXX1JFUUlORk9QRVJNMAlSQU1GV19SRUczMigweDA0OCkKKyNkZWZpbmUgUkFNRldfUkVBRFBFUk0wCQlSQU1GV19SRUczMigweDA1MCkKKyNkZWZpbmUgUkFNRldfV1JJVEVQRVJNMAlSQU1GV19SRUczMigweDA1OCkKKworLyogR1BNQyBDUzEgRlBHQSBPTiBVU0VSIElOVEVSRkFDRSBNT0RVTEUgKi8KKy8vI2RlZmluZSBERUJVR19CT0FSRF9MRURfUkVHSVNURVIgMHgwNDAwMDAxNAorCisvKiBHUE1DIENTMCAqLworI2RlZmluZSBHUE1DX0NPTkZJRzFfMAkJR1BNQ19SRUczMigweDA2MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzAJCUdQTUNfUkVHMzIoMHgwNjQpCisjZGVmaW5lIEdQTUNfQ09ORklHM18wCQlHUE1DX1JFRzMyKDB4MDY4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMAkJR1BNQ19SRUczMigweDA2QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzAJCUdQTUNfUkVHMzIoMHgwNzApCisjZGVmaW5lIEdQTUNfQ09ORklHNl8wCQlHUE1DX1JFRzMyKDB4MDc0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMAkJR1BNQ19SRUczMigweDA3OCkKKworLyogR1BNQyBDUzEgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUcxXzEJCUdQTUNfUkVHMzIoMHgwOTApCisjZGVmaW5lIEdQTUNfQ09ORklHMl8xCQlHUE1DX1JFRzMyKDB4MDk0KQorI2RlZmluZSBHUE1DX0NPTkZJRzNfMQkJR1BNQ19SRUczMigweDA5OCkKKyNkZWZpbmUgR1BNQ19DT05GSUc0XzEJCUdQTUNfUkVHMzIoMHgwOUMpCisjZGVmaW5lIEdQTUNfQ09ORklHNV8xCQlHUE1DX1JFRzMyKDB4MGEwKQorI2RlZmluZSBHUE1DX0NPTkZJRzZfMQkJR1BNQ19SRUczMigweDBhNCkKKyNkZWZpbmUgR1BNQ19DT05GSUc3XzEJCUdQTUNfUkVHMzIoMHgwYTgpCisKKy8qIERTUyAqLworI2RlZmluZSBEU1NfQ09OVFJPTAkJRElTUF9SRUczMigweDA0MCkKKyNkZWZpbmUgRElTUENfQ09OVFJPTAkJRElTUF9SRUczMigweDQ0MCkKKyNkZWZpbmUgRElTUENfU1lTU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE0KQorI2RlZmluZSBESVNQQ19JUlFTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTgpCisjZGVmaW5lIERJU1BDX0lSUUVOQUJMRQkJRElTUF9SRUczMigweDQxQykKKyNkZWZpbmUgRElTUENfQ09ORklHCQlESVNQX1JFRzMyKDB4NDQ0KQorI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMAlESVNQX1JFRzMyKDB4NDRDKQorI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMQlESVNQX1JFRzMyKDB4NDUwKQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjAJRElTUF9SRUczMigweDQ1NCkKKyNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTgpCisjZGVmaW5lIERJU1BDX0xJTkVfTlVNQkVSCURJU1BfUkVHMzIoMHg0NjApCisjZGVmaW5lIERJU1BDX1RJTUlOR19ICQlESVNQX1JFRzMyKDB4NDY0KQorI2RlZmluZSBESVNQQ19USU1JTkdfVgkJRElTUF9SRUczMigweDQ2OCkKKyNkZWZpbmUgRElTUENfUE9MX0ZSRVEJCURJU1BfUkVHMzIoMHg0NkMpCisjZGVmaW5lIERJU1BDX0RJVklTT1IJCURJU1BfUkVHMzIoMHg0NzApCisjZGVmaW5lIERJU1BDX1NJWkVfRElHCQlESVNQX1JFRzMyKDB4NDc4KQorI2RlZmluZSBESVNQQ19TSVpFX0xDRAkJRElTUF9SRUczMigweDQ3QykKKyNkZWZpbmUgRElTUENfR0ZYX0JBMAkJRElTUF9SRUczMigweDQ4MCkKKyNkZWZpbmUgRElTUENfR0ZYX0JBMQkJRElTUF9SRUczMigweDQ4NCkKKyNkZWZpbmUgRElTUENfR0ZYX1BPU0lUSU9OCURJU1BfUkVHMzIoMHg0ODgpCisjZGVmaW5lIERJU1BDX0dGWF9TSVpFCQlESVNQX1JFRzMyKDB4NDhDKQorI2RlZmluZSBESVNQQ19HRlhfQVRUUklCVVRFUwlESVNQX1JFRzMyKDB4NEEwKQorI2RlZmluZSBESVNQQ19HRlhfRklGT19USFJFU0hPTEQJRElTUF9SRUczMigweDRBNCkKKyNkZWZpbmUgRElTUENfR0ZYX1JPV19JTkMJRElTUF9SRUczMigweDRBQykKKyNkZWZpbmUgRElTUENfR0ZYX1BJWEVMX0lOQwlESVNQX1JFRzMyKDB4NEIwKQorI2RlZmluZSBESVNQQ19HRlhfV0lORE9XX1NLSVAJRElTUF9SRUczMigweDRCNCkKKyNkZWZpbmUgRElTUENfR0ZYX1RBQkxFX0JBCURJU1BfUkVHMzIoMHg0QjgpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUxCURJU1BfUkVHMzIoMHg1RDQpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUyCURJU1BfUkVHMzIoMHg1RDgpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUzCURJU1BfUkVHMzIoMHg1REMpCisKKy8qIFdha2UgdXAgZGVmaW5lIGZvciBib2FyZCAqLworI2RlZmluZSBHUElPOTcJCQkoMSA8PCAxKQorI2RlZmluZSBHUElPODgJCQkoMSA8PCAyNCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KKworI2VuZGlmCisKKworCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzJjY2JmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCisgKgorICogSW50ZXJmYWNlIGZvciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIHJ1biBpbiBpbnRlcm5hbCBTUkFNCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAorCitleHRlcm4gdm9pZCAqIG9tYXBfc3JhbV9wdXNoKHZvaWQgKiBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiB2b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CisKK2V4dGVybiB2b2lkIG9tYXAyX3NyYW1fZGRyX2luaXQodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKKwkJCQl1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jayk7CitleHRlcm4gdm9pZCBvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwKKwkJCQkgICAgICB1MzIgbWVtX3R5cGUpOworZXh0ZXJuIHUzMiBvbWFwMl9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CisKKworLyogRG8gbm90IHVzZSB0aGVzZSAqLworZXh0ZXJuIHZvaWQgc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGNrY3RsLCB1MzIgZHBsbGN0bCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3JlcHJvZ3JhbV9jbG9ja19zejsKKworZXh0ZXJuIHZvaWQgc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAorCQkJICB1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jayk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX2Rkcl9pbml0X3N6OworCitleHRlcm4gdTMyIHNyYW1fc2V0X3ByY20odTMyIGRwbGxfY3RybF92YWwsIHUzMiBzZHJjX3Jmcl92YWwsIGludCBieXBhc3MpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3JhbV9zZXRfcHJjbV9zejsKKworZXh0ZXJuIHZvaWQgc3JhbV9yZXByb2dyYW1fc2RyYyh1MzIgcGVyZl9sZXZlbCwgdTMyIGRsbF92YWwsIHUzMiBtZW1fdHlwZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3JlcHJvZ3JhbV9zZHJjX3N6OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCmluZGV4IGZmMzdiYzIuLmI0M2NkZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaApAQCAtNiwxOCArNiwyMSBAQAogI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjaWZuZGVmIENPTkZJR19NQUNIX1ZPSUNFQkxVRQorI2RlZmluZSB2b2ljZWJsdWVfcmVzZXQoKQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKIHsKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiAJLyoKIAkgKiBXb3JrYXJvdW5kIGZvciA1OTEyLzE2MTFiIGJ1ZyBtZW50aW9uZWQgaW4gc3ByejIwOWQucGRmIHAuIDI4CiAJICogIkdsb2JhbCBTb2Z0d2FyZSBSZXNldCBBZmZlY3RzIFRyYWZmaWMgQ29udHJvbGxlciBGcmVxdWVuY3kiLgpAQCAtMjcsMTMgKzMwLDMxIEBACiAJCQkJIERQTExfQ1RMKTsKIAkJb21hcF93cml0ZXcoMHg4LCBBUk1fUlNUQ1QxKTsKIAl9Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUFDSF9WT0lDRUJMVUUKKwogCWlmIChtYWNoaW5lX2lzX3ZvaWNlYmx1ZSgpKQogCQl2b2ljZWJsdWVfcmVzZXQoKTsKIAllbHNlCi0jZW5kaWYKIAkJb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwl1MzIgcmF0ZTsKKwlzdHJ1Y3QgY2xrICp2Y2xrLCAqc2NsazsKKworCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7CisJc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisJY2xrX3NldF9yYXRlKHZjbGssIHJhdGUpOwkvKiBnbyB0byBieXBhc3MgZm9yIE9NQVAgbGltaXRhdGlvbiAqLworCVJNX1JTVENUUkxfV0tVUCB8PSAyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcDFfYXJjaF9yZXNldChtb2RlKTsKKwllbHNlCisJCW9tYXAyX2FyY2hfcmVzZXQobW9kZSk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oCmluZGV4IGI2MWRkYjQuLjIxZjJlMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmgKQEAgLTI4LDYgKzI4LDE0IEBACiAjaWYgIWRlZmluZWQoX19BU01fQVJDSF9PTUFQX1RJTUVYX0gpCiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9USU1FWF9ICiAKKy8qCisgKiBPTUFQIDMyS0h6IHRpbWVyIHVwZGF0ZXMgdGltZSBvbmUgamlmZmllIGF0IGEgdGltZSBmcm9tIGEgc2Vjb25kYXJ5IHRpbWVyLAorICogYW5kIHRoYXQncyB3aHkgdGhlIENMT0NLX1RJQ0tfUkFURSBpcyBub3QgMzI3NjguCisgKi8KKyNpZmRlZiBDT05GSUdfT01BUF8zMktfVElNRVIKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoQ09ORklHX09NQVBfMzJLX1RJTUVSX0haKQorI2Vsc2UKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoSFogKiAxMDAwMDBVTCkKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKaW5kZXggMzU0NWM4Ni4uYzcxODI2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKQEAgLTM2LDEwICszNiwxNCBAQAogCXZvbGF0aWxlIHU4ICogdWFydCA9IDA7CiAJaW50IHNoaWZ0ID0gMjsKIAorI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVRFCisJcmV0dXJuOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQCiAjaWZkZWYJQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKIAl1YXJ0ID0gKHZvbGF0aWxlIHU4ICopKE9NQVBfVUFSVDNfQkFTRSk7Ci0jZWxpZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMgorI2VsaWYgZGVmaW5lZChDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMikKIAl1YXJ0ID0gKHZvbGF0aWxlIHU4ICopKE9NQVBfVUFSVDJfQkFTRSk7CiAjZWxzZQogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMV9CQVNFKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oCmluZGV4IDMxMWYyYmIuLjBiNDM0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaApAQCAtMjEsMTIgKzIxLDE4IEBACiAJdm9pZCAoKndhaXRfaHN5bmMpKHZvaWQpOwogfTsKIAorCiAvKgogICogU2hhcnBTTCBCYWNrbGlnaHQKICAqLwotCiBzdHJ1Y3QgY29yZ2libF9tYWNoaW5mbyB7CiAJaW50IG1heF9pbnRlbnNpdHk7CiAJdm9pZCAoKnNldF9ibF9pbnRlbnNpdHkpKGludCBpbnRlbnNpdHkpOwogfTsKK2V4dGVybiB2b2lkIGNvcmdpYmxfbGltaXRfaW50ZW5zaXR5KGludCBsaW1pdCk7CiAKKworLyoKKyAqIFNoYXJwU0wgQmF0dGVyeS9QTSBEcml2ZXIKKyAqLworZXh0ZXJuIHZvaWQgc2hhcnBzbF9iYXR0ZXJ5X2tpY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmgKaW5kZXggNmVjNjdiMC4uOTQ5ODc4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaApAQCAtMTgsNiArMTgsMTEgQEAKICNpZm5kZWYgU1NQX0gKICNkZWZpbmUgU1NQX0gKIAorLyoKKyAqIFNTUCBpbml0aWFsaXNhdGlvbiBmbGFncworICovCisjZGVmaW5lIFNTUF9OT19JUlEJMHgxCQkvKiBkb24ndCByZWdpc3RlciBhbiBpcnEgaGFuZGxlciBpbiBTU1AgZHJpdmVyICovCisKIHN0cnVjdCBzc3Bfc3RhdGUgewogCXUzMgljcjA7CiAJdTMyIGNyMTsKQEAgLTMxLDYgKzM2LDcgQEAKIAl1MzIgZmxhZ3M7CiAJdTMyIHBzcF9mbGFnczsKIAl1MzIgc3BlZWQ7CisJaW50IGlycTsKIH07CiAKIGludCBzc3Bfd3JpdGVfd29yZChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgZGF0YSk7CkBAIC00MCw3ICs0Niw3IEBACiB2b2lkIHNzcF9kaXNhYmxlKHN0cnVjdCBzc3BfZGV2ICpkZXYpOwogdm9pZCBzc3Bfc2F2ZV9zdGF0ZShzdHJ1Y3Qgc3NwX2RldiAqZGV2LCBzdHJ1Y3Qgc3NwX3N0YXRlICpzc3ApOwogdm9pZCBzc3BfcmVzdG9yZV9zdGF0ZShzdHJ1Y3Qgc3NwX2RldiAqZGV2LCBzdHJ1Y3Qgc3NwX3N0YXRlICpzc3ApOwotaW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0KTsKK2ludCBzc3BfaW5pdChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgcG9ydCwgdTMyIGluaXRfZmxhZ3MpOwogaW50IHNzcF9jb25maWcoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIG1vZGUsIHUzMiBmbGFncywgdTMyIHBzcF9mbGFncywgdTMyIHNwZWVkKTsKIHZvaWQgc3NwX2V4aXQoc3RydWN0IHNzcF9kZXYgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbXNpLmggYi9pbmNsdWRlL2FzbS1pMzg2L21zaS5oCmluZGV4IGI4NTM5MzAuLmYwNDFkNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tc2kuaApAQCAtMTAsMTMgKzEwLDYgQEAKICNpbmNsdWRlIDxtYWNoX2FwaWMuaD4KIAogI2RlZmluZSBMQVNUX0RFVklDRV9WRUNUT1IJCTIzMgotI2RlZmluZSBNU0lfREVTVF9NT0RFCQkJTVNJX0xPR0lDQUxfTU9ERQotI2RlZmluZSBNU0lfVEFSR0VUX0NQVV9TSElGVAkJMTIKLQotI2lmZGVmIENPTkZJR19TTVAKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJCWxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpCi0jZWxzZQotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQljcHVfdG9fbG9naWNhbF9hcGljaWQoZmlyc3RfY3B1KGNwdV9vbmxpbmVfbWFwKSkKLSNlbmRpZgorI2RlZmluZSBNU0lfVEFSR0VUX0NQVV9TSElGVAkxMgogCiAjZW5kaWYgLyogQVNNX01TSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAppbmRleCAxMzI1MDE5Li42MWQzYWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKQEAgLTQ1LDYgKzQ1LDggQEAKICNkZWZpbmUgTUFYX0FQSUNJRCAyNTYKIGV4dGVybiB1OCB4ODZfY3B1X3RvX2FwaWNpZFtdOwogCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCXg4Nl9jcHVfdG9fYXBpY2lkW2NwdV0KKwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogZXh0ZXJuIHZvaWQgY3B1X2V4aXRfY2xlYXIodm9pZCk7CiBleHRlcm4gdm9pZCBjcHVfdW5pbml0KHZvaWQpOwpAQCAtOTIsNiArOTQsMTAgQEAKIGV4dGVybiB2b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisKICNkZWZpbmUgTk9fUFJPQ19JRAkJMHhGRgkJLyogTm8gcHJvY2Vzc29yIG1hZ2ljIG1hcmtlciAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmggYi9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCmluZGV4IDRkMzc2ZTEuLjhiMDFhMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaApAQCAtMjIsNiArMjIsOSBAQAogICogMjAwNS1BcHIgICAgIFJ1c3R5IEx5bmNoIDxydXN0eS5seW5jaEBpbnRlbC5jb20+IGFuZCBBbmlsIFMgS2VzaGF2YW11cnRoeQogICogICAgICAgICAgICAgIDxhbmlsLnMua2VzaGF2YW11cnRoeUBpbnRlbC5jb20+IGFkb3B0ZWQgZnJvbQogICogICAgICAgICAgICAgIGluY2x1ZGUvYXNtLXg4Nl82NC9rZGVidWcuaAorICoKKyAqIDIwMDUtT2N0CUtlaXRoIE93ZW5zIDxrYW9zQHNnaS5jb20+LiAgRXhwYW5kIG5vdGlmeV9kaWUgdG8gY292ZXIgbW9yZQorICoJCWV2ZW50cy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKQEAgLTM1LDEzICszOCwzNiBAQAogCWludCBzaWducjsKIH07CiAKLWludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmlhNjRkaWVfY2hhaW47CiAKIGVudW0gZGllX3ZhbCB7CiAJRElFX0JSRUFLID0gMSwKLQlESUVfU1MsCisJRElFX0ZBVUxULAorCURJRV9PT1BTLAogCURJRV9QQUdFX0ZBVUxULAorCURJRV9NQUNISU5FX0hBTFQsCisJRElFX01BQ0hJTkVfUkVTVEFSVCwKKwlESUVfTUNBX01PTkFSQ0hfRU5URVIsCisJRElFX01DQV9NT05BUkNIX1BST0NFU1MsCisJRElFX01DQV9NT05BUkNIX0xFQVZFLAorCURJRV9NQ0FfU0xBVkVfRU5URVIsCisJRElFX01DQV9TTEFWRV9QUk9DRVNTLAorCURJRV9NQ0FfU0xBVkVfTEVBVkUsCisJRElFX01DQV9SRU5EWlZPVVNfRU5URVIsCisJRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywKKwlESUVfTUNBX1JFTkRaVk9VU19MRUFWRSwKKwlESUVfSU5JVF9NT05BUkNIX0VOVEVSLAorCURJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUywKKwlESUVfSU5JVF9NT05BUkNIX0xFQVZFLAorCURJRV9JTklUX1NMQVZFX0VOVEVSLAorCURJRV9JTklUX1NMQVZFX1BST0NFU1MsCisJRElFX0lOSVRfU0xBVkVfTEVBVkUsCisJRElFX0tERUJVR19FTlRFUiwKKwlESUVfS0RFQlVHX0xFQVZFLAorCURJRV9LRFVNUF9FTlRFUiwKKwlESUVfS0RVTVBfTEVBVkUsCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNoYXIgKnN0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKaW5kZXggOGQ2ZTcyZi4uYjVjNjUwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaApAQCAtNywxMiArNywxMyBAQAogICovCiAKIC8qCi0gKiBSb3V0aW5lcyB0byBtYW5hZ2UgdGhlIGFsbG9jYXRpb24gb2YgdGFzayBjb250ZXh0IG51bWJlcnMuICBUYXNrIGNvbnRleHQgbnVtYmVycyBhcmUKLSAqIHVzZWQgdG8gcmVkdWNlIG9yIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byBwZXJmb3JtIFRMQiBmbHVzaGVzIGR1ZSB0byBjb250ZXh0IHN3aXRjaGVzLgotICogQ29udGV4dCBudW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBpYS02NCByZWdpb24gaWRzLiAgU2luY2UgdGhlIElBLTY0IFRMQiBkb2VzIG5vdAotICogY29uc2lkZXIgdGhlIHJlZ2lvbiBudW1iZXIgd2hlbiBwZXJmb3JtaW5nIGEgVExCIGxvb2t1cCwgd2UgbmVlZCB0byBhc3NpZ24gYSB1bmlxdWUKLSAqIHJlZ2lvbiBpZCB0byBlYWNoIHJlZ2lvbiBpbiBhIHByb2Nlc3MuICBXZSB1c2UgdGhlIGxlYXN0IHNpZ25pZmljYW50IHRocmVlIGJpdHMgaW4gYQotICogcmVnaW9uIGlkIGZvciB0aGlzIHB1cnBvc2UuCisgKiBSb3V0aW5lcyB0byBtYW5hZ2UgdGhlIGFsbG9jYXRpb24gb2YgdGFzayBjb250ZXh0IG51bWJlcnMuICBUYXNrIGNvbnRleHQKKyAqIG51bWJlcnMgYXJlIHVzZWQgdG8gcmVkdWNlIG9yIGVsaW1pbmF0ZSB0aGUgbmVlZCB0byBwZXJmb3JtIFRMQiBmbHVzaGVzCisgKiBkdWUgdG8gY29udGV4dCBzd2l0Y2hlcy4gIENvbnRleHQgbnVtYmVycyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgaWEtNjQKKyAqIHJlZ2lvbiBpZHMuICBTaW5jZSB0aGUgSUEtNjQgVExCIGRvZXMgbm90IGNvbnNpZGVyIHRoZSByZWdpb24gbnVtYmVyIHdoZW4KKyAqIHBlcmZvcm1pbmcgYSBUTEIgbG9va3VwLCB3ZSBuZWVkIHRvIGFzc2lnbiBhIHVuaXF1ZSByZWdpb24gaWQgdG8gZWFjaAorICogcmVnaW9uIGluIGEgcHJvY2Vzcy4gIFdlIHVzZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdGhyZWUgYml0cyBpbiBhcmVnaW9uCisgKiBpZCBmb3IgdGhpcyBwdXJwb3NlLgogICovCiAKICNkZWZpbmUgSUE2NF9SRUdJT05fSURfS0VSTkVMCTAgLyogdGhlIGtlcm5lbCdzIHJlZ2lvbiBpZCAodGxiLmMgZGVwZW5kcyBvbiB0aGlzIGJlaW5nIDApICovCkBAIC0zMiwxMyArMzMsMTcgQEAKIHN0cnVjdCBpYTY0X2N0eCB7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGludCBuZXh0OwkvKiBuZXh0IGNvbnRleHQgbnVtYmVyIHRvIHVzZSAqLwotCXVuc2lnbmVkIGludCBsaW1pdDsJLyogbmV4dCA+PSBsaW1pdCA9PiBtdXN0IGNhbGwgd3JhcF9tbXVfY29udGV4dCgpICovCi0JdW5zaWduZWQgaW50IG1heF9jdHg7CS8qIG1heC4gY29udGV4dCB2YWx1ZSBzdXBwb3J0ZWQgYnkgYWxsIENQVXMgKi8KKwl1bnNpZ25lZCBpbnQgbGltaXQ7ICAgICAvKiBhdmFpbGFibGUgZnJlZSByYW5nZSAqLworCXVuc2lnbmVkIGludCBtYXhfY3R4OyAgIC8qIG1heC4gY29udGV4dCB2YWx1ZSBzdXBwb3J0ZWQgYnkgYWxsIENQVXMgKi8KKwkJCQkvKiBjYWxsIHdyYXBfbW11X2NvbnRleHQgd2hlbiBuZXh0ID49IG1heCAqLworCXVuc2lnbmVkIGxvbmcgKmJpdG1hcDsgIC8qIGJpdG1hcCBzaXplIGlzIG1heF9jdHgrMSAqLworCXVuc2lnbmVkIGxvbmcgKmZsdXNobWFwOy8qIHBlbmRpbmcgcmlkIHRvIGJlIGZsdXNoZWQgKi8KIH07CiAKIGV4dGVybiBzdHJ1Y3QgaWE2NF9jdHggaWE2NF9jdHg7CiBERUNMQVJFX1BFUl9DUFUodTgsIGlhNjRfbmVlZF90bGJfZmx1c2gpOwogCitleHRlcm4gdm9pZCBtbXVfY29udGV4dF9pbml0ICh2b2lkKTsKIGV4dGVybiB2b2lkIHdyYXBfbW11X2NvbnRleHQgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC00NywxMCArNTIsMTAgQEAKIH0KIAogLyoKLSAqIFdoZW4gdGhlIGNvbnRleHQgY291bnRlciB3cmFwcyBhcm91bmQgYWxsIFRMQnMgbmVlZCB0byBiZSBmbHVzaGVkIGJlY2F1c2UgYW4gb2xkCi0gKiBjb250ZXh0IG51bWJlciBtaWdodCBoYXZlIGJlZW4gcmV1c2VkLiBUaGlzIGlzIHNpZ25hbGxlZCBieSB0aGUgaWE2NF9uZWVkX3RsYl9mbHVzaAotICogcGVyLUNQVSB2YXJpYWJsZSwgd2hpY2ggaXMgY2hlY2tlZCBpbiB0aGUgcm91dGluZSBiZWxvdy4gQ2FsbGVkIGJ5IGFjdGl2YXRlX21tKCkuCi0gKiA8ZWZvY2h0QGVzcy5uZWMuZGU+CisgKiBXaGVuIHRoZSBjb250ZXh0IGNvdW50ZXIgd3JhcHMgYXJvdW5kIGFsbCBUTEJzIG5lZWQgdG8gYmUgZmx1c2hlZCBiZWNhdXNlCisgKiBhbiBvbGQgY29udGV4dCBudW1iZXIgbWlnaHQgaGF2ZSBiZWVuIHJldXNlZC4gVGhpcyBpcyBzaWduYWxsZWQgYnkgdGhlCisgKiBpYTY0X25lZWRfdGxiX2ZsdXNoIHBlci1DUFUgdmFyaWFibGUsIHdoaWNoIGlzIGNoZWNrZWQgaW4gdGhlIHJvdXRpbmUKKyAqIGJlbG93LiBDYWxsZWQgYnkgYWN0aXZhdGVfbW0oKS4gPGVmb2NodEBlc3MubmVjLmRlPgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRlbGF5ZWRfdGxiX2ZsdXNoICh2b2lkKQpAQCAtNjAsMTEgKzY1LDkgQEAKIAogCWlmICh1bmxpa2VseShfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkpKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7Ci0JCXsKLQkJCWlmIChfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkpIHsKLQkJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Ci0JCQkJX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpID0gMDsKLQkJCX0KKwkJaWYgKF9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSkgeworCQkJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCQkJX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7CiAJfQpAQCAtNzYsMjAgKzc5LDI3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAludl9tbV9jb250ZXh0X3QgY29udGV4dCA9IG1tLT5jb250ZXh0OwogCi0JaWYgKHVubGlrZWx5KCFjb250ZXh0KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOwotCQl7Ci0JCQkvKiByZS1jaGVjaywgbm93IHRoYXQgd2UndmUgZ290IHRoZSBsb2NrOiAqLwotCQkJY29udGV4dCA9IG1tLT5jb250ZXh0OwotCQkJaWYgKGNvbnRleHQgPT0gMCkgewotCQkJCWNwdXNfY2xlYXIobW0tPmNwdV92bV9tYXNrKTsKLQkJCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5saW1pdCkKLQkJCQkJd3JhcF9tbXVfY29udGV4dChtbSk7Ci0JCQkJbW0tPmNvbnRleHQgPSBjb250ZXh0ID0gaWE2NF9jdHgubmV4dCsrOwotCQkJfQorCWlmIChsaWtlbHkoY29udGV4dCkpCisJCWdvdG8gb3V0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKKwkvKiByZS1jaGVjaywgbm93IHRoYXQgd2UndmUgZ290IHRoZSBsb2NrOiAqLworCWNvbnRleHQgPSBtbS0+Y29udGV4dDsKKwlpZiAoY29udGV4dCA9PSAwKSB7CisJCWNwdXNfY2xlYXIobW0tPmNwdV92bV9tYXNrKTsKKwkJaWYgKGlhNjRfY3R4Lm5leHQgPj0gaWE2NF9jdHgubGltaXQpIHsKKwkJCWlhNjRfY3R4Lm5leHQgPSBmaW5kX25leHRfemVyb19iaXQoaWE2NF9jdHguYml0bWFwLAorCQkJCQlpYTY0X2N0eC5tYXhfY3R4LCBpYTY0X2N0eC5uZXh0KTsKKwkJCWlhNjRfY3R4LmxpbWl0ID0gZmluZF9uZXh0X2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJCWlhNjRfY3R4Lm1heF9jdHgsIGlhNjRfY3R4Lm5leHQpOworCQkJaWYgKGlhNjRfY3R4Lm5leHQgPj0gaWE2NF9jdHgubWF4X2N0eCkKKwkJCQl3cmFwX21tdV9jb250ZXh0KG1tKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7CisJCW1tLT5jb250ZXh0ID0gY29udGV4dCA9IGlhNjRfY3R4Lm5leHQrKzsKKwkJX19zZXRfYml0KGNvbnRleHQsIGlhNjRfY3R4LmJpdG1hcCk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKK291dDoKIAkvKgogCSAqIEVuc3VyZSB3ZSdyZSBub3Qgc3RhcnRpbmcgdG8gdXNlICJjb250ZXh0IiBiZWZvcmUgYW55IG9sZAogCSAqIHVzZXMgb2YgaXQgYXJlIGdvbmUgZnJvbSBvdXIgVExCLgpAQCAtMTAwLDggKzExMCw4IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIGNvbnRleHQgbnVtYmVyIHRvIHNvbWUgc2FuZSB2YWx1ZS4gIE1NIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBicmFuZC1uZXcKLSAqIGFkZHJlc3Mtc3BhY2UsIHNvIG5vIFRMQiBmbHVzaGluZyBpcyBuZWVkZWQsIGV2ZXIuCisgKiBJbml0aWFsaXplIGNvbnRleHQgbnVtYmVyIHRvIHNvbWUgc2FuZSB2YWx1ZS4gIE1NIGlzIGd1YXJhbnRlZWQgdG8gYmUgYQorICogYnJhbmQtbmV3IGFkZHJlc3Mtc3BhY2UsIHNvIG5vIFRMQiBmbHVzaGluZyBpcyBuZWVkZWQsIGV2ZXIuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBpbml0X25ld19jb250ZXh0IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpAQCAtMTYyLDcgKzE3MiwxMCBAQAogCQlpZiAoIWNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzaykpCiAJCQljcHVfc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKTsKIAkJcmVsb2FkX2NvbnRleHQoY29udGV4dCk7Ci0JCS8qIGluIHRoZSB1bmxpa2VseSBldmVudCBvZiBhIFRMQi1mbHVzaCBieSBhbm90aGVyIHRocmVhZCwgcmVkbyB0aGUgbG9hZDogKi8KKwkJLyoKKwkJICogaW4gdGhlIHVubGlrZWx5IGV2ZW50IG9mIGEgVExCLWZsdXNoIGJ5IGFub3RoZXIgdGhyZWFkLAorCQkgKiByZWRvIHRoZSBsb2FkLgorCQkgKi8KIAl9IHdoaWxlICh1bmxpa2VseShjb250ZXh0ICE9IG1tLT5jb250ZXh0KSk7CiB9CiAKQEAgLTE3NSw4ICsxODgsOCBAQAogYWN0aXZhdGVfbW0gKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpCiB7CiAJLyoKLQkgKiBXZSBtYXkgZ2V0IGludGVycnVwdHMgaGVyZSwgYnV0IHRoYXQncyBPSyBiZWNhdXNlIGludGVycnVwdCBoYW5kbGVycyBjYW5ub3QKLQkgKiB0b3VjaCB1c2VyLXNwYWNlLgorCSAqIFdlIG1heSBnZXQgaW50ZXJydXB0cyBoZXJlLCBidXQgdGhhdCdzIE9LIGJlY2F1c2UgaW50ZXJydXB0CisJICogaGFuZGxlcnMgY2Fubm90IHRvdWNoIHVzZXItc3BhY2UuCiAJICovCiAJaWE2NF9zZXRfa3IoSUE2NF9LUl9QVF9CQVNFLCBfX3BhKG5leHQtPnBnZCkpOwogCWFjdGl2YXRlX2NvbnRleHQobmV4dCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21zaS5oIGIvaW5jbHVkZS9hc20taWE2NC9tc2kuaAppbmRleCA2MGYyMTM3Li45Nzg5MGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmgKQEAgLTEyLDkgKzEyLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfaW50cl9nYXRlIChpbnQgbnIsIHZvaWQgKmZ1bmMpIHt9CiAjZGVmaW5lIElPX0FQSUNfVkVDVE9SKGlycSkJKGlycSkKICNkZWZpbmUgYWNrX0FQSUNfaXJxCQlpYTY0X2VvaQotI2RlZmluZSBjcHVfbWFza190b19hcGljaWQobWFzaykgY3B1X3BoeXNpY2FsX2lkKGZpcnN0X2NwdShtYXNrKSkKLSNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJTVNJX1BIWVNJQ0FMX01PREUKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJKChpYTY0X2dldHJlZyhfSUE2NF9SRUdfQ1JfTElEKSA+PiAxNikgJiAweGZmZmYpCiAjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCTQKIAogI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCmluZGV4IGI2NWM2MjcuLmEzNWIzMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKQEAgLTUxLDYgKzUxLDcgQEAKIAlpZiAoIW1tKQogCQlyZXR1cm47CiAKKwlzZXRfYml0KG1tLT5jb250ZXh0LCBpYTY0X2N0eC5mbHVzaG1hcCk7CiAJbW0tPmNvbnRleHQgPSAwOwogCiAJaWYgKGF0b21pY19yZWFkKCZtbS0+bW1fdXNlcnMpID09IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9hYnNfYWRkci5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaAppbmRleCBkYzNmYzNmLi4xODQxNTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9hYnNfYWRkci5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX0FCU19BRERSX0gKLSNkZWZpbmUgX0FCU19BRERSX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0FCU19BRERSX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0FCU19BRERSX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCkBAIC03MCw0ICs3MCw0IEBACiAjZGVmaW5lIGlzZXJpZXNfaHZfYWRkcih2aXJ0YWRkcikJXAogCSgweDgwMDAwMDAwMDAwMDAwMDAgfCB2aXJ0X3RvX2Ficyh2aXJ0YWRkcikpCiAKLSNlbmRpZiAvKiBfQUJTX0FERFJfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19BQlNfQUREUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2FzbS1jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMTMzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2FzbS1jb21wYXQuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19BU01fQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0FTTV9DT01QQVRfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpZmRlZiBfX0FTU0VNQkxZX18KKyMgIGRlZmluZSBzdHJpbmdpZnlfaW5fYyguLi4pCV9fVkFfQVJHU19fCisjICBkZWZpbmUgQVNNX0NPTlNUKHgpCQl4CisjZWxzZQorLyogVGhpcyB2ZXJzaW9uIG9mIHN0cmluZ2lmeSB3aWxsIGRlYWwgd2l0aCBjb21tYXMuLi4gKi8KKyMgIGRlZmluZSBfX3N0cmluZ2lmeV9pbl9jKC4uLikJI19fVkFfQVJHU19fCisjICBkZWZpbmUgc3RyaW5naWZ5X2luX2MoLi4uKQlfX3N0cmluZ2lmeV9pbl9jKF9fVkFfQVJHU19fKSAiICIKKyMgIGRlZmluZSBfX0FTTV9DT05TVCh4KQl4IyNVTAorIyAgZGVmaW5lIEFTTV9DT05TVCh4KQkJX19BU01fQ09OU1QoeCkKKyNlbmRpZgorCisjaWZkZWYgX19wb3dlcnBjNjRfXworCisvKiBvcGVyYXRpb25zIGZvciBsb25ncyBhbmQgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUFBDX0xMCQlzdHJpbmdpZnlfaW5fYyhsZCkKKyNkZWZpbmUgUFBDX1NUTAkJc3RyaW5naWZ5X2luX2Moc3RkKQorI2RlZmluZSBQUENfTENNUEkJc3RyaW5naWZ5X2luX2MoY21wZGkpCisjZGVmaW5lIFBQQ19MT05HCXN0cmluZ2lmeV9pbl9jKC5sbG9uZykKKyNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHRkbmVpKQorI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobGRhcngpCisjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdGRjeC4pCisjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHpkKQorCisjZWxzZSAvKiAzMi1iaXQgKi8KKworLyogb3BlcmF0aW9ucyBmb3IgbG9uZ3MgYW5kIHBvaW50ZXJzICovCisjZGVmaW5lIFBQQ19MTAkJc3RyaW5naWZ5X2luX2MobHd6KQorI2RlZmluZSBQUENfU1RMCQlzdHJpbmdpZnlfaW5fYyhzdHcpCisjZGVmaW5lIFBQQ19MQ01QSQlzdHJpbmdpZnlfaW5fYyhjbXB3aSkKKyNkZWZpbmUgUFBDX0xPTkcJc3RyaW5naWZ5X2luX2MoLmxvbmcpCisjZGVmaW5lIFBQQ19UTE5FSQlzdHJpbmdpZnlfaW5fYyh0d25laSkKKyNkZWZpbmUgUFBDX0xMQVJYCXN0cmluZ2lmeV9pbl9jKGx3YXJ4KQorI2RlZmluZSBQUENfU1RMQ1gJc3RyaW5naWZ5X2luX2Moc3R3Y3guKQorI2RlZmluZSBQUENfQ05UTFpMCXN0cmluZ2lmeV9pbl9jKGNudGx6dykKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSUJNNDA1X0VSUjc3CisvKiBFcnJhdHVtICM3NyBvbiB0aGUgNDA1IG1lYW5zIHdlIG5lZWQgYSBzeW5jIG9yIGRjYnQgYmVmb3JlIGV2ZXJ5CisgKiBzdHdjeC4gIFRoZSBvbGQgQVRPTUlDX1NZTkNfRklYIGNvdmVyZWQgc29tZSBidXQgbm90IGFsbCBvZiB0aGlzLgorICovCisjZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikJc3RyaW5naWZ5X2luX2MoZGNidAlyYSwgcmI7KQorI2RlZmluZQlQUEM0MDVfRVJSNzdfU1lOQwlzdHJpbmdpZnlfaW5fYyhzeW5jOykKKyNlbHNlCisjZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKKyNkZWZpbmUgUFBDNDA1X0VSUjc3X1NZTkMKKyNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FTTV9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKaW5kZXggZWQ0YjM0NS4uOWMwYjM3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCkBAIC05LDIxICs5LDEzIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogI2RlZmluZSBBVE9NSUNfSU5JVChpKQkJeyAoaSkgfQogCiAjZGVmaW5lIGF0b21pY19yZWFkKHYpCQkoKHYpLT5jb3VudGVyKQogI2RlZmluZSBhdG9taWNfc2V0KHYsaSkJCSgoKHYpLT5jb3VudGVyKSA9IChpKSkKIAotLyogRXJyYXR1bSAjNzcgb24gdGhlIDQwNSBtZWFucyB3ZSBuZWVkIGEgc3luYyBvciBkY2J0IGJlZm9yZSBldmVyeSBzdHdjeC4KLSAqIFRoZSBvbGQgQVRPTUlDX1NZTkNfRklYIGNvdmVyZWQgc29tZSBidXQgbm90IGFsbCBvZiB0aGlzLgotICovCi0jaWZkZWYgQ09ORklHX0lCTTQwNV9FUlI3NwotI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCSJkY2J0ICIgI3JhICIsIiAjcmIgIjsiCi0jZWxzZQotI2RlZmluZSBQUEM0MDVfRVJSNzcocmEscmIpCi0jZW5kaWYKLQogc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfYWRkKGludCBhLCBhdG9taWNfdCAqdikKIHsKIAlpbnQgdDsKQEAgLTIwNSw1ICsxOTcsMTgzIEBACiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKSAgICAgc21wX21iKCkKICNkZWZpbmUgc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCkgICAgICBzbXBfbWIoKQogCisjaWZkZWYgX19wb3dlcnBjNjRfXworCit0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGxvbmcgY291bnRlcjsgfSBhdG9taWM2NF90OworCisjZGVmaW5lIEFUT01JQzY0X0lOSVQoaSkJeyAoaSkgfQorCisjZGVmaW5lIGF0b21pYzY0X3JlYWQodikJKCh2KS0+Y291bnRlcikKKyNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkJKCgodiktPmNvdW50ZXIpID0gKGkpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2FkZChsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMwkJIyBhdG9taWM2NF9hZGRcblwKKwlhZGQJJTAsJTIsJTBcblwKKwlzdGRjeC4JJTAsMCwlMyBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X2FkZF9yZXR1cm4obG9uZyBhLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfYWRkX3JldHVyblxuXAorCWFkZAklMCwlMSwlMFxuXAorCXN0ZGN4LgklMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBhdG9taWM2NF9hZGRfbmVnYXRpdmUoYSwgdikJKGF0b21pYzY0X2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9zdWIobG9uZyBhLCBhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTMJCSMgYXRvbWljNjRfc3ViXG5cCisJc3ViZgklMCwlMiwlMFxuXAorCXN0ZGN4LgklMCwwLCUzIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfc3ViX3JldHVybihsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9zdWJfcmV0dXJuXG5cCisJc3ViZgklMCwlMSwlMFxuXAorCXN0ZGN4LgklMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWM2NF9pbmMoYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X2luY1xuXAorCWFkZGljCSUwLCUwLDFcblwKKwlzdGRjeC4JJTAsMCwlMiBcblwKKwlibmUtCTFiIgorCTogIj0mciIgKHQpLCAiPW0iICh2LT5jb3VudGVyKQorCTogInIiICgmdi0+Y291bnRlciksICJtIiAodi0+Y291bnRlcikKKwk6ICJjYyIpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBsb25nIGF0b21pYzY0X2luY19yZXR1cm4oYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2luY19yZXR1cm5cblwKKwlhZGRpYwklMCwlMCwxXG5cCisJc3RkY3guCSUwLDAsJTEgXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisvKgorICogYXRvbWljNjRfaW5jX2FuZF90ZXN0IC0gaW5jcmVtZW50IGFuZCB0ZXN0CisgKiBAdjogcG9pbnRlciBvZiB0eXBlIGF0b21pYzY0X3QKKyAqCisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgQHYgYnkgMQorICogYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgcmVzdWx0IGlzIHplcm8sIG9yIGZhbHNlIGZvciBhbGwKKyAqIG90aGVyIGNhc2VzLgorICovCisjZGVmaW5lIGF0b21pYzY0X2luY19hbmRfdGVzdCh2KSAoYXRvbWljNjRfaW5jX3JldHVybih2KSA9PSAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2RlYyhhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfZGVjXG5cCisJYWRkaWMJJTAsJTAsLTFcblwKKwlzdGRjeC4JJTAsMCwlMlxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfZGVjX3JldHVybihhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfZGVjX3JldHVyblxuXAorCWFkZGljCSUwLCUwLC0xXG5cCisJc3RkY3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgYXRvbWljNjRfc3ViX2FuZF90ZXN0KGEsIHYpCShhdG9taWM2NF9zdWJfcmV0dXJuKChhKSwgKHYpKSA9PSAwKQorI2RlZmluZSBhdG9taWM2NF9kZWNfYW5kX3Rlc3QodikJKGF0b21pYzY0X2RlY19yZXR1cm4oKHYpKSA9PSAwKQorCisvKgorICogQXRvbWljYWxseSB0ZXN0ICp2IGFuZCBkZWNyZW1lbnQgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDAuCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2xkIHZhbHVlIG9mICp2IG1pbnVzIDEuCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfZGVjX2lmX3Bvc2l0aXZlKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmVcblwKKwlhZGRpYy4JJTAsJTAsLTFcblwKKwlibHQtCTJmXG5cCisJc3RkY3guCSUwLDAsJTFcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCSJcblwKKzI6Igk6ICI9JnIiICh0KQorCTogInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19BVE9NSUNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXV4dmVjLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F1eHZlYy5oCmluZGV4IDc5ZDhjNDcuLjE5YTA5OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXV4dmVjLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaApAQCAtMTQsOCArMTQsNiBAQAogLyogVGhlIHZEU08gbG9jYXRpb24uIFdlIGhhdmUgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFzIHg4NiBmb3IgZ2xpYmMncwogICogc2FrZSA6LSkKICAqLwotI2lmZGVmIF9fcG93ZXJwYzY0X18KICNkZWZpbmUgQVRfU1lTSU5GT19FSERSCQkzMwotI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKaW5kZXggZGMyNWM1My4uNTcyNzIyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCkBAIC00MCw2ICs0MCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogCiAvKgpAQCAtNTIsMTYgKzUzLDYgQEAKICNkZWZpbmUgQklUT1BfV09SRChucikJCSgobnIpIC8gQklUU19QRVJfTE9ORykKICNkZWZpbmUgQklUT1BfTEVfU1dJWlpMRQkoKEJJVFNfUEVSX0xPTkctMSkgJiB+MHg3KQogCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIExBUlhMCQkibGRhcngiCi0jZGVmaW5lIFNUQ1hMCQkic3RkY3guIgotI2RlZmluZSBDTlRMWkwJCSJjbnRsemQiCi0jZWxzZQotI2RlZmluZSBMQVJYTAkJImx3YXJ4IgotI2RlZmluZSBTVENYTAkJInN0d2N4LiIKLSNkZWZpbmUgQ05UTFpMCQkiY250bHp3IgotI2VuZGlmCi0KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBvbGQ7CkBAIC02OSwxMCArNjAsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMJIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIHNldF9iaXRcbiIKIAkib3IJJTAsJTAsJTJcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUwLDAsJTNcbiIKKwlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKIAkiYm5lLQkxYiIKIAk6ICI9JnIiKG9sZCksICI9bSIoKnApCiAJOiAiciIobWFzayksICJyIihwKSwgIm0iKCpwKQpAQCAtODYsMTAgKzc3LDEwIEBACiAJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJTEFSWEwgIgklMCwwLCUzCSMgc2V0X2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJIyBjbGVhcl9iaXRcbiIKIAkiYW5kYwklMCwlMCwlMlxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTAsMCwlM1xuIgorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgogCSJibmUtCTFiIgogCTogIj0mciIob2xkKSwgIj1tIigqcCkKIAk6ICJyIihtYXNrKSwgInIiKHApLCAibSIoKnApCkBAIC0xMDMsMTAgKzk0LDEwIEBACiAJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJTEFSWEwgIgklMCwwLCUzCSMgc2V0X2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJIyBjaGFuZ2VfYml0XG4iCiAJInhvcgklMCwlMCwlMlxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTAsMCwlM1xuIgorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgogCSJibmUtCTFiIgogCTogIj0mciIob2xkKSwgIj1tIigqcCkKIAk6ICJyIihtYXNrKSwgInIiKHApLCAibSIoKnApCkBAIC0xMjIsMTAgKzExMywxMCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJRUlFSU9fT05fU01QCi0iMToiCUxBUlhMICIJJTAsMCwlMwkJIyB0ZXN0X2FuZF9zZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkJIyB0ZXN0X2FuZF9zZXRfYml0XG4iCiAJIm9yCSUxLCUwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTEsMCwlMyBcbiIKKwlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCiAJImJuZS0JMWIiCiAJSVNZTkNfT05fU01QCiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCkBAIC0xNDQsMTAgKzEzNSwxMCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJRUlFSU9fT05fU01QCi0iMToiCUxBUlhMICIJJTAsMCwlMwkJIyB0ZXN0X2FuZF9jbGVhcl9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCQkjIHRlc3RfYW5kX2NsZWFyX2JpdFxuIgogCSJhbmRjCSUxLCUwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTEsMCwlMyBcbiIKKwlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCiAJImJuZS0JMWIiCiAJSVNZTkNfT05fU01QCiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCkBAIC0xNjYsMTAgKzE1NywxMCBAQAogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJRUlFSU9fT05fU01QCi0iMToiCUxBUlhMICIJJTAsMCwlMwkJIyB0ZXN0X2FuZF9jaGFuZ2VfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkJIyB0ZXN0X2FuZF9jaGFuZ2VfYml0XG4iCiAJInhvcgklMSwlMCwlMiBcbiIKIAlQUEM0MDVfRVJSNzcoMCwlMykKLQlTVENYTCAiCSUxLDAsJTMgXG4iCisJUFBDX1NUTENYICIlMSwwLCUzIFxuIgogCSJibmUtCTFiIgogCUlTWU5DX09OX1NNUAogCTogIj0mciIgKG9sZCksICI9JnIiICh0KQpAQCAtMTg0LDkgKzE3NSw5IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2xkOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCUxBUlhMICIJJTAsMCwlMyAgICAgICAgICMgc2V0X2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMgICAgICAgICAjIHNldF9iaXRzXG4iCiAJIm9yCSUwLCUwLCUyXG4iCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIiAob2xkKSwgIj1tIiAoKmFkZHIpCiAJOiAiciIgKG1hc2spLCAiciIgKGFkZHIpLCAibSIgKCphZGRyKQpAQCAtMjY4LDcgKzI1OSw3IEBACiB7CiAJaW50IGx6OwogCi0JYXNtIChDTlRMWkwgIiAlMCwlMSIgOiAiPXIiIChseikgOiAiciIgKHgpKTsKKwlhc20gKFBQQ19DTlRMWkwgIiUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoeCkpOwogCXJldHVybiBCSVRTX1BFUl9MT05HIC0gMSAtIGx6OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaAppbmRleCBkNjI1ZWU1Li5iMDAxZWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19CVUdfSAogI2RlZmluZSBfQVNNX1BPV0VSUENfQlVHX0gKIAorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAvKgogICogRGVmaW5lIGFuIGlsbGVnYWwgaW5zdHIgdG8gdHJhcCBvbiB0aGUgYnVnLgogICogV2UgZG9uJ3QgdXNlIDAgYmVjYXVzZSB0aGF0IG1hcmtzIHRoZSBlbmQgb2YgYSBmdW5jdGlvbgpAQCAtMTEsMTQgKzEyLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KLSNkZWZpbmUgQlVHX1RBQkxFX0VOVFJZCQkiLmxsb25nIgotI2RlZmluZSBCVUdfVFJBUF9PUAkJInRkbmVpIgotI2Vsc2UgCi0jZGVmaW5lIEJVR19UQUJMRV9FTlRSWQkJIi5sb25nIgotI2RlZmluZSBCVUdfVFJBUF9PUAkJInR3bmVpIgotI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KLQogc3RydWN0IGJ1Z19lbnRyeSB7CiAJdW5zaWduZWQgbG9uZwlidWdfYWRkcjsKIAlsb25nCQlsaW5lOwpAQCAtNDAsMTYgKzMzLDE2IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJIFwKIAkJIjE6CXR3aSAzMSwwLDBcbiIJCQkJCSBcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCQkgXAotCQkiXHQiQlVHX1RBQkxFX0VOVFJZIgkxYiwlMCwlMSwlMlxuIgkJCSBcCisJCSJcdCJQUENfTE9ORyIJMWIsJTAsJTEsJTJcbiIJCQkgXAogCQkiLnByZXZpb3VzIgkJCQkJCSBcCiAJCTogOiAiaSIgKF9fTElORV9fKSwgImkiIChfX0ZJTEVfXyksICJpIiAoX19GVU5DVElPTl9fKSk7IFwKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgQlVHX09OKHgpIGRvIHsJCQkJCQlcCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JCSIxOgkiQlVHX1RSQVBfT1AiCSUwLDBcbiIJCQlcCisJCSIxOgkiUFBDX1RMTkVJIgklMCwwXG4iCQkJXAogCQkiLnNlY3Rpb24gX19idWdfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSJcdCJCVUdfVEFCTEVfRU5UUlkiCTFiLCUxLCUyLCUzXG4iCQlcCisJCSJcdCJQUENfTE9ORyIJMWIsJTEsJTIsJTNcbiIJCVwKIAkJIi5wcmV2aW91cyIJCQkJCVwKIAkJOiA6ICJyIiAoKGxvbmcpKHgpKSwgImkiIChfX0xJTkVfXyksCQlcCiAJCSAgICAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsJXApAQCAtNTcsOSArNTAsOSBAQAogCiAjZGVmaW5lIFdBUk5fT04oeCkgZG8gewkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkJIjE6CSJCVUdfVFJBUF9PUCIJJTAsMFxuIgkJCVwKKwkJIjE6CSJQUENfVExORUkiCSUwLDBcbiIJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIlx0IkJVR19UQUJMRV9FTlRSWSIJMWIsJTEsJTIsJTNcbiIJCVwKKwkJIlx0IlBQQ19MT05HIgkxYiwlMSwlMiwlM1xuIgkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6IDogInIiICgobG9uZykoeCkpLAkJCQlcCiAJCSAgICAiaSIgKF9fTElORV9fICsgQlVHX1dBUk5JTkdfVFJBUCksCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZjZTUwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaApAQCAtMCwwICsxLDQwIEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19DQUNIRV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19DQUNIRV9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KKyNpZiBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzQwM0dDWCkKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCTQKKyNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJMQorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk1CisjZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTQKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNworI2VuZGlmCisKKyNkZWZpbmUJTDFfQ0FDSEVfQllURVMJCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQorCisjZGVmaW5lCVNNUF9DQUNIRV9CWVRFUwkJTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlRfTUFYCTcgLyogbGFyZ2VzdCBMMSB3aGljaCB0aGlzIGFyY2ggc3VwcG9ydHMgKi8KKworI2lmIGRlZmluZWQoX19wb3dlcnBjNjRfXykgJiYgIWRlZmluZWQoX19BU1NFTUJMWV9fKQorc3RydWN0IHBwYzY0X2NhY2hlcyB7CisJdTMyCWRzaXplOwkJCS8qIEwxIGQtY2FjaGUgc2l6ZSAqLworCXUzMglkbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJKi8KKwl1MzIJbG9nX2RsaW5lX3NpemU7CisJdTMyCWRsaW5lc19wZXJfcGFnZTsKKwl1MzIJaXNpemU7CQkJLyogTDEgaS1jYWNoZSBzaXplICovCisJdTMyCWlsaW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkqLworCXUzMglsb2dfaWxpbmVfc2l6ZTsKKwl1MzIJaWxpbmVzX3Blcl9wYWdlOworfTsKKworZXh0ZXJuIHN0cnVjdCBwcGM2NF9jYWNoZXMgcHBjNjRfY2FjaGVzOworI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gJiYgISBfX0FTU0VNQkxZX18gKi8KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQ0FDSEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTc0MGM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9BU01fUE9XRVJQQ19DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0NBQ0hFRkxVU0hfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKworLyoKKyAqIE5vIGNhY2hlIGZsdXNoaW5nIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzcyBtYXBwaW5ncyBhcmUgY2hhbmdlZCwKKyAqIGJlY2F1c2UgdGhlIGNhY2hlcyBvbiBQb3dlclBDcyBhcmUgcGh5c2ljYWxseSBhZGRyZXNzZWQuCisgKi8KKyNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKKyNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQorCitleHRlcm4gdm9pZCBfX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQoreworCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSkKKwkJX19mbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIHN0b3ApOworfQorCitleHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQkgICAgaW50IGxlbik7CitleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGUodm9pZCAqcGFnZV92YSk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2lmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiAhZGVmaW5lZChDT05GSUdfQk9PS0UpCitleHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNhZGRyKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgJiYgIUNPTkZJR19CT09LRSAqLworCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKKyNpZmRlZiBDT05GSUdfUFBDMzIKK2V4dGVybiB2b2lkIGNsZWFuX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDMzIgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKK2V4dGVybiB2b2lkIGZsdXNoX2ludmFsX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BoeXNfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKKyNlbmRpZgorCisjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwlkbyB7IFwKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCisJCWZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKKwltZW1jcHkoZHN0LCBzcmMsIGxlbikKKworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NvbXBhdC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L2NvbXBhdC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL2NvbXBhdC5oCmluZGV4IDZlYzYyY2QuLjRkYjQzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY29tcGF0LmgKQEAgLTEsNSArMSw1IEBACi0jaWZuZGVmIF9BU01fUFBDNjRfQ09NUEFUX0gKLSNkZWZpbmUgX0FTTV9QUEM2NF9DT01QQVRfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQ09NUEFUX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0NPTVBBVF9ICiAvKgogICogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvbXBhdGliaWxpdHkgdHlwZXMKICAqLwpAQCAtNDksNyArNDksNyBAQAogCWNvbXBhdF9kZXZfdAlzdF9kZXY7CiAJY29tcGF0X2lub190CXN0X2lubzsKIAljb21wYXRfbW9kZV90CXN0X21vZGU7Ci0JY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CQorCWNvbXBhdF9ubGlua190CXN0X25saW5rOwogCV9fY29tcGF0X3VpZDMyX3QJc3RfdWlkOwogCV9fY29tcGF0X2dpZDMyX3QJc3RfZ2lkOwogCWNvbXBhdF9kZXZfdAlzdF9yZGV2OwpAQCAtMjAyLDQgKzIwMiw0IEBACiAJY29tcGF0X3Vsb25nX3QgX191bnVzZWQ2OwogfTsKIAotI2VuZGlmIC8qIF9BU01fUFBDNjRfQ09NUEFUX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQ09NUEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAppbmRleCA3OWEwNTU2Li4wNGUyNzI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9QT1dFUlBDX0NQVVRBQkxFX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+IC8qIGZvciBBU01fQ09OU1QgKi8KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAjZGVmaW5lIFBQQ19GRUFUVVJFXzMyCQkJMHg4MDAwMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV82NAkJCTB4NDAwMDAwMDAKQEAgLTE2LDYgKzE2LDEwIEBACiAjZGVmaW5lIFBQQ19GRUFUVVJFX0hBU19FRlBfU0lOR0xFCTB4MDA0MDAwMDAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX0VGUF9ET1VCTEUJMHgwMDIwMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9OT19UQgkJMHgwMDEwMDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9QT1dFUjQJCTB4MDAwODAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfUE9XRVI1CQkweDAwMDQwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1BPV0VSNV9QTFVTCQkweDAwMDIwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX0NFTEwJCTB4MDAwMTAwMDAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyY2Q0YTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2N1cnJlbnQuaApAQCAtMCwwICsxLDI3IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19DVVJSRU5UX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0NVUlJFTlRfSAorCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaW5jbHVkZSA8YXNtL3BhY2EuaD4KKworI2RlZmluZSBjdXJyZW50CQkoZ2V0X3BhY2EoKS0+X19jdXJyZW50KQorCisjZWxzZQorCisvKgorICogV2Uga2VlcCBgY3VycmVudCcgaW4gcjIgZm9yIHNwZWVkLgorICovCityZWdpc3RlciBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQgYXNtICgicjIiKTsKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQ1VSUkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaF9ldmVudC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWhfZXZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTY4YTMwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWhfZXZlbnQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICoJZWVoX2V2ZW50LmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTGluYXMgVmVwc3RhcyA8bGluYXNAbGluYXMub3JnPgorICovCisKKyNpZm5kZWYgQVNNX1BQQzY0X0VFSF9FVkVOVF9ICisjZGVmaW5lIEFTTV9QUEM2NF9FRUhfRVZFTlRfSAorCisvKiogRUVIIGV2ZW50IC0tIHN0cnVjdHVyZSBob2xkaW5nIHBjaSBjb250cm9sbGVyIGRhdGEgdGhhdCBkZXNjcmliZXMKKyAqICBhIGNoYW5nZSBpbiB0aGUgaXNvbGF0aW9uIHN0YXR1cyBvZiBhIFBDSSBzbG90LiAgQSBwb2ludGVyCisgKiAgdG8gdGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGFzIHRoZSBkYXRhIHBvaW50ZXIgaW4gYSBub3RpZnkgY2FsbGJhY2suCisgKi8KK3N0cnVjdCBlZWhfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgIGxpc3Q7CisJc3RydWN0IGRldmljZV9ub2RlIAkqZG47ICAgLyogc3RydWN0IGRldmljZSBub2RlICovCisJc3RydWN0IHBjaV9kZXYgICAgICAgKmRldjsgIC8qIGFmZmVjdGVkIGRldmljZSAqLworCWludCAgICAgICAgICAgICAgICAgIHN0YXRlOworCWludCB0aW1lX3VuYXZhaWw7ICAgIC8qIG1pbGxpc2Vjb25kcyB1bnRpbCBkZXZpY2UgbWlnaHQgYmUgYXZhaWxhYmxlICovCit9OworCisvKioKKyAqIGVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgLSBnZW5lcmF0ZSBhIFBDSSBlcnJvciBldmVudAorICogQGRldiBwY2kgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGJ1aWxkcyBhIFBDSSBlcnJvciBldmVudCB3aGljaCB3aWxsIGJlIGRlbGl2ZXJlZAorICogdG8gYWxsIGxpc3RlbmVycyBvbiB0aGUgcGVoX25vdGlmaWVyX2NoYWluLgorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gYmUgY2FsbGVkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgY29udGV4dDsKKyAqIHRoZSBhY3R1YWwgZXZlbnQgd2lsbCBiZSBkZWxpdmVyZWQgaW4gYSBub3JtYWwgY29udGV4dAorICogKGZyb20gYSB3b3JrcXVldWUpLgorICovCitpbnQgZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNldF9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZV91bmF2YWlsKTsKKworI2VuZGlmIC8qIEFTTV9QUEM2NF9FRUhfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKaW5kZXggZmVhYzM0NS4uM2RjZDY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCkBAIC0yNjksMTQgKzI2OSwxMiBAQAogZXh0ZXJuIGludCBpY2FjaGVfYnNpemU7CiBleHRlcm4gaW50IHVjYWNoZV9ic2l6ZTsKIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KKy8qIHZEU08gaGFzIGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyAqLworI2RlZmluZSBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTCiBzdHJ1Y3QgbGludXhfYmlucHJtOwotI2RlZmluZSBBUkNIX0hBU19TRVRVUF9BRERJVElPTkFMX1BBR0VTCS8qIHZEU08gaGFzIGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyAqLwotZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgaW50IGV4ZWN1dGFibGVfc3RhY2spOworZXh0ZXJuIGludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCQkgICAgICAgaW50IGV4ZWN1dGFibGVfc3RhY2spOwogI2RlZmluZSBWRFNPX0FVWF9FTlQoYSxiKSBORVdfQVVYX0VOVChhLGIpOwotI2Vsc2UKLSNkZWZpbmUgVkRTT19BVVhfRU5UKGEsYikKLSNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKIC8qCiAgKiBUaGUgcmVxdWlyZW1lbnRzIGhlcmUgYXJlOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCmluZGV4IDgwNmMxNDIuLjEyZmFiYmNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0lTRVJJRVMJKDFVTDw8MjEpCiAKIGVudW0geworI2lmZGVmIENPTkZJR19QUEM2NAogCUZXX0ZFQVRVUkVfUFNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfUEZUIHwgRldfRkVBVFVSRV9UQ0UgfAogCQlGV19GRUFUVVJFX1NQUkcwIHwgRldfRkVBVFVSRV9EQUJSIHwgRldfRkVBVFVSRV9DT1BZIHwKIAkJRldfRkVBVFVSRV9BU1IgfCBGV19GRUFUVVJFX0RFQlVHIHwgRldfRkVBVFVSRV9URVJNIHwKQEAgLTcwLDYgKzcxLDExIEBACiAJCUZXX0ZFQVRVUkVfSVNFUklFU19BTFdBWVMgJgogI2VuZGlmCiAJCUZXX0ZFQVRVUkVfUE9TU0lCTEUsCisKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCUZXX0ZFQVRVUkVfUE9TU0lCTEUgPSAwLAorCUZXX0ZFQVRVUkVfQUxXQVlTID0gMCwKKyNlbmRpZgogfTsKIAogLyogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IGZpcm13YXJlIGZlYXR1cmVzIHdoaWNoIGFyZSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaAppbmRleCAzN2M5NGU1Li5mMDMxOWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oCkBAIC03LDEzICs3LDE0IEBACiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAogICBfX2FzbV9fIF9fdm9sYXRpbGUgKCBcCiAJU1lOQ19PTl9TTVAgXAogIjE6CWx3YXJ4CSUwLDAsJTJcbiIgXAogCWluc24gXAorCVBQQzQwNV9FUlI3NygwLCAlMikgXAogIjI6CXN0d2N4LgklMSwwLCUyXG4iIFwKIAkiYm5lLQkxYlxuIiBcCiAJImxpCSUxLDBcbiIgXApAQCAtMjMsNyArMjQsNyBAQAogCSIucHJldmlvdXNcbiIgXAogCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iIFwKIAkiLmFsaWduIDNcbiIgXAotCURBVEFMICIgMWIsNGIsMmIsNGJcbiIgXAorCVBQQ19MT05HICIxYiw0YiwyYiw0YlxuIiBcCiAJIi5wcmV2aW91cyIgXAogCTogIj0mciIgKG9sZHZhbCksICI9JnIiIChyZXQpIFwKIAk6ICJiIiAodWFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMSIgKG9wYXJnKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9odmNhbGwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKaW5kZXggYWI3YzNjZi4uZDM2ZGE2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX1BQQzY0X0hWQ0FMTF9ICi0jZGVmaW5lIF9QUEM2NF9IVkNBTExfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfSFZDQUxMX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0hWQ0FMTF9ICiAKICNkZWZpbmUgSFZTQwkJCS5sb25nIDB4NDQwMDAwMjIKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKi8KIGxvbmcgcGxwYXJfaGNhbGxfbm9yZXRzKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCAuLi4pOwogCi0vKiAKKy8qCiAgKiBTcGVjaWFsIGhjYWxsIGludGVyZmFjZSBmb3IgaWJtdmV0aCBzdXBwb3J0LgogICogVGFrZXMgOCBpbnB1dCBwYXJtcy4gUmV0dXJucyBhIHJjIGFuZCBzdG9yZXMgdGhlCiAgKiBSNCByZXR1cm4gdmFsdWUgaW4gKm91dDEuCkBAIC0xNTMsMTEgKzE1MywxMSBAQAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc3LAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc4LAogCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MSk7Ci0gCisKIC8qIHBscGFyX2hjYWxsXzRvdXQoKQogICoKLSAqIHNhbWUgYXMgcGxwYXJfaGNhbGwgZXhjZXB0IHdpdGggNCBvdXRwdXQgYXJndW1lbnRzLiAgCi0gKiAKKyAqIHNhbWUgYXMgcGxwYXJfaGNhbGwgZXhjZXB0IHdpdGggNCBvdXRwdXQgYXJndW1lbnRzLgorICoKICAqLwogbG9uZyBwbHBhcl9oY2FsbF80b3V0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsCkBAIC0xNzAsNCArMTcwLDQgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0NCk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBfUFBDNjRfSFZDQUxMX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSFZDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCmluZGV4IGMzN2IzMWIuLjI2Yjg5ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogZXh0ZXJuIHZvaWQgdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotZXh0ZXJuIHZvaWQgcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXJxKTsKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCBiMzkzNWVhLi44ZWI3ZTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTM4OSw2ICszODksNyBAQAogI2RlZmluZQlTSVVfSU5UX1RJTUVSNAkJKCh1aW50KTB4MGYgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9UTUNOVAkJKCh1aW50KTB4MTAgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9QSVQJCSgodWludCkweDExICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUENJCQkoKHVpbnQpMHgxMiArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX0lSUTEJCSgodWludCkweDEzICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfSVJRMgkJKCh1aW50KTB4MTQgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9JUlEzCQkoKHVpbnQpMHgxNSArIENQTV9JUlFfT0ZGU0VUKQpAQCAtNDI5LDcgKzQzMCw2IEBACiAjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCiAvKiBwZWRhbnRpYzogdGhlc2UgYXJlIGxvbmcgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIHdpdGggc2V0X2JpdCAtLVJSICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKIGV4dGVybiBhdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CiAKICNkZWZpbmUgdmlydF9pcnFfY3JlYXRlX21hcHBpbmcoeCkJKHgpCkBAIC00ODgsOCArNDg4LDggQEAKIAogZXh0ZXJuIHZvaWQgaXJxX2N0eF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2FsbF9kb19zb2Z0aXJxKHN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOwotZXh0ZXJuIGludCBjYWxsX2hhbmRsZV9JUlFfZXZlbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOworZXh0ZXJuIGludCBjYWxsX19fZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKIAogI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbHBwYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCmluZGV4IDllMmE2YzAuLmMxYmVkYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbHBwYWNhLmgKQEAgLTE2LDggKzE2LDggQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwotI2lmbmRlZiBfQVNNX0xQUEFDQV9ICi0jZGVmaW5lIF9BU01fTFBQQUNBX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0xQUEFDQV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19MUFBBQ0FfSAogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLwpAQCAtMjgsOCArMjgsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLXN0cnVjdCBscHBhY2EKLXsKK3N0cnVjdCBscHBhY2EgewogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQ0FDSEVfTElORV8xIDB4MDAwMCAtIDB4MDA3RiBDb250YWlucyByZWFkLW9ubHkgZGF0YQogLy8gTk9URTogVGhlIHhEeW5YeXogZmllbGRzIGFyZSBmaWVsZHMgdGhhdCB3aWxsIGJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYnkKQEAgLTEyOSw0ICsxMjgsNCBAQAogCXU4CXBtY19zYXZlX2FyZWFbMjU2XTsJLy8gUE1DIGludGVycnVwdCBBcmVhICAgICAgICAgICB4MDAteEZGCiB9OwogCi0jZW5kaWYgLyogX0FTTV9MUFBBQ0FfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19MUFBBQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCBiY2NhY2Q2Li45MmM3NjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKQEAgLTEsMTEgKzEsOCBAQAotI2lmbmRlZiBfUFBDNjRfUEFDQV9ICi0jZGVmaW5lIF9QUEM2NF9QQUNBX0gKLQogLyoKLSAqIGluY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaAorICogaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKICAqCi0gKiBUaGlzIGNvbnRyb2wgYmxvY2sgZGVmaW5lcyB0aGUgUEFDQSB3aGljaCBkZWZpbmVzIHRoZSBwcm9jZXNzb3IgCi0gKiBzcGVjaWZpYyBkYXRhIGZvciBlYWNoIGxvZ2ljYWwgcHJvY2Vzc29yIG9uIHRoZSBzeXN0ZW0uICAKKyAqIFRoaXMgY29udHJvbCBibG9jayBkZWZpbmVzIHRoZSBQQUNBIHdoaWNoIGRlZmluZXMgdGhlIHByb2Nlc3NvcgorICogc3BlY2lmaWMgZGF0YSBmb3IgZWFjaCBsb2dpY2FsIHByb2Nlc3NvciBvbiB0aGUgc3lzdGVtLgogICogVGhlcmUgYXJlIHNvbWUgcG9pbnRlcnMgZGVmaW5lZCB0aGF0IGFyZSB1dGlsaXplZCBieSBQTElDLgogICoKICAqIEMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKQEAgLTE0LDcgKzExLDkgQEAKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8gICAgCisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BBQ0FfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUEFDQV9ICiAKICNpbmNsdWRlCTxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlCTxhc20vdHlwZXMuaD4KQEAgLTExOCw0ICsxMTcsNCBAQAogCiBleHRlcm4gc3RydWN0IHBhY2Ffc3RydWN0IHBhY2FbXTsKIAotI2VuZGlmIC8qIF9QUEM2NF9QQUNBX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEFDQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCmluZGV4IDEzYWFjZmYuLjk4OTZmYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCkBAIC0yNiw2ICsyNiwxMCBAQAogCiBleHRlcm4gc3RydWN0IHBjaV9kZXYgKnBwYzY0X2lzYWJyaWRnZV9kZXY7CS8qIG1heSBiZSBOVUxMIGlmIG5vIElTQSBidXMgKi8KIAorLyoqIEJ1cyBVbml0IElEIG1hY3JvczsgZ2V0IGxvdyBhbmQgaGkgMzItYml0cyBvZiB0aGUgNjQtYml0IEJVSUQgKi8KKyNkZWZpbmUgQlVJRF9ISShidWlkKSAoKGJ1aWQpID4+IDMyKQorI2RlZmluZSBCVUlEX0xPKGJ1aWQpICgoYnVpZCkgJiAweGZmZmZmZmZmKQorCiAvKiBQQ0kgZGV2aWNlX25vZGUgb3BlcmF0aW9ucyAqLwogc3RydWN0IGRldmljZV9ub2RlOwogdHlwZWRlZiB2b2lkICooKnRyYXZlcnNlX2Z1bmMpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWUsIHZvaWQgKmRhdGEpOwpAQCAtMzYsMTAgKzQwLDYgQEAKIHZvaWQgcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYik7CiB2b2lkIF9fZGV2aW5pdCBzY2FuX3BoYihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOwogCi0vKiBQQ0kgYWRkcmVzcyBjYWNoZSBtYW5hZ2VtZW50IHJvdXRpbmVzICovCi12b2lkIHBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7Ci12b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KIC8qIEZyb20gcnRhc19wY2kuaCAqLwogdm9pZCBpbml0X3BjaV9jb25maWdfdG9rZW5zICh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgZ2V0X3BoYl9idWlkIChzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CkBAIC01Miw0ICs1Miw0OCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2Fzc2lnbl9hbGxfYnVzZXM7CiBleHRlcm4gaW50IHBjaV9yZWFkX2lycV9saW5lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKIAorLyogLS0tLSBFRUggaW50ZXJuYWwtdXNlLW9ubHkgcmVsYXRlZCByb3V0aW5lcyAtLS0tICovCisjaWZkZWYgQ09ORklHX0VFSAorLyoqCisgKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIHVuZnJlZXplIGEgZnJvemVuIHNsb3QKKyAqCisgKiBDbGVhciB0aGUgRUVILWZyb3plbiBjb25kaXRpb24gb24gYSBzbG90LiAgVGhpcyByb3V0aW5lCisgKiBkb2VzIHRoaXMgYnkgYXNzZXJ0aW5nIHRoZSBQQ0kgI1JTVCBsaW5lIGZvciAxLzh0aCBvZgorICogYSBzZWNvbmQ7IHRoaXMgcm91dGluZSB3aWxsIHNsZWVwIHdoaWxlIHRoZSBhZGFwdGVyIGlzCisgKiBiZWluZyByZXNldC4KKyAqLwordm9pZCBydGFzX3NldF9zbG90X3Jlc2V0IChzdHJ1Y3QgcGNpX2RuICopOworCisvKiogCisgKiBlZWhfcmVzdG9yZV9iYXJzIC0gUmVzdG9yZSBkZXZpY2UgY29uZmlndXJhdGlvbiBpbmZvLgorICoKKyAqIEEgcmVzZXQgb2YgYSBQQ0kgZGV2aWNlIHdpbGwgY2xlYXIgb3V0IGl0cyBjb25maWcgc3BhY2UuCisgKiBUaGlzIHJvdXRpbmVzIHdpbGwgcmVzdG9yZSB0aGUgY29uZmlnIHNwYWNlIGZvciB0aGlzCisgKiBkZXZpY2UsIGFuZCBpcyBjaGlsZHJlbiwgdG8gdmFsdWVzIHByZXZpb3VzbHkgb2J0YWluZWQKKyAqIGZyb20gdGhlIGZpcm13YXJlLgorICovCit2b2lkIGVlaF9yZXN0b3JlX2JhcnMoc3RydWN0IHBjaV9kbiAqKTsKKworLyoqCisgKiBydGFzX2NvbmZpZ3VyZV9icmlkZ2UgLS0gZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gb2YgcGNpIGJyaWRnZQorICoKKyAqIEFzayB0aGUgZmlybXdhcmUgdG8gY29uZmlndXJlIGFsbCBQQ0kgYnJpZGdlcyBkZXZpY2VzCisgKiBsb2NhdGVkIGJlaGluZCB0aGUgaW5kaWNhdGVkIG5vZGUuIFJlcXVpcmVkIGFmdGVyIGEKKyAqIHBjaSBkZXZpY2UgcmVzZXQuIERvZXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgaGluZyBhcworICogZWVoX3Jlc3RvcmVfYmFycywgYnV0IGZvciBicmRnZXMsIGFuZCBsZXRzIGZpcm13YXJlIAorICogZG8gdGhlIHdvcmsuCisgKi8KK3ZvaWQgcnRhc19jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfZG4gKik7CisKK2ludCBydGFzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RuICosIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOworCisvKioKKyAqIG1hcmsgYW5kIGNsZWFyIHNsb3RzOiBmaW5kICJwYXJ0aXRpb24gZW5kcG9pbnQiIFBFIGFuZCBzZXQgb3IgCisgKiBjbGVhciB0aGUgZmxhZ3MgZm9yIGVhY2ggc3Vibm9kZSBvZiB0aGUgUEUuCisgKi8KK3ZvaWQgZWVoX21hcmtfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZyk7Cit2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKTsKKworI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFBDX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCmluZGV4IGM1MzRjYTQuLmMyN2JhYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCkBAIC02LDggKzYsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKLSNpZmRlZiBfX0FTU0VNQkxZX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZXJyb3IgX19GSUxFX18gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhc3NlbWJsZXIgZmlsZXMKKyNlbHNlCisKKyNkZWZpbmUgU1pMCQkJKEJJVFNfUEVSX0xPTkcvOCkKIAogLyoKICAqIE1hY3JvcyBmb3Igc3RvcmluZyByZWdpc3RlcnMgaW50byBhbmQgbG9hZGluZyByZWdpc3RlcnMgZnJvbQpAQCAtMTg0LDEyICsxODksNiBAQAogCW9yaXMgICAgcmVnLHJlZywobGFiZWwpQGg7ICAgICAgICAgICAgICAgICAgICAgIFwKIAlvcmkgICAgIHJlZyxyZWcsKGxhYmVsKUBsOwogCi0vKiBvcGVyYXRpb25zIGZvciBsb25ncyBhbmQgcG9pbnRlcnMgKi8KLSNkZWZpbmUgTERMCWxkCi0jZGVmaW5lIFNUTAlzdGQKLSNkZWZpbmUgQ01QSQljbXBkaQotI2RlZmluZSBTWkwJOAotCiAvKiBvZmZzZXRzIGZvciBzdGFjayBmcmFtZSBsYXlvdXQgKi8KICNkZWZpbmUgTFJTQVZFCTE2CiAKQEAgLTIwMywxMiArMjAyLDYgQEAKIAogI2RlZmluZSBPRkYobmFtZSkJbmFtZUBsCiAKLS8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLwotI2RlZmluZSBMREwJbHd6Ci0jZGVmaW5lIFNUTAlzdHcKLSNkZWZpbmUgQ01QSQljbXB3aQotI2RlZmluZSBTWkwJNAotCiAvKiBvZmZzZXRzIGZvciBzdGFjayBmcmFtZSBsYXlvdXQgKi8KICNkZWZpbmUgTFJTQVZFCTQKIApAQCAtMjY2LDE1ICsyNTksNiBAQAogI2VuZGlmCiAKIAotI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQlkY2J0CXJhLCByYjsKLSNkZWZpbmUJUFBDNDA1X0VSUjc3X1NZTkMJc3luYzsKLSNlbHNlCi0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKLSNkZWZpbmUgUFBDNDA1X0VSUjc3X1NZTkMKLSNlbmRpZgotCi0KICNpZmRlZiBDT05GSUdfSUJNNDQwRVBfRVJSNDIKICNkZWZpbmUgUFBDNDQwRVBfRVJSNDIgaXN5bmMKICNlbHNlCkBAIC01MDIsMTcgKzQ4Niw2IEBACiAjZGVmaW5lIE5fU0xJTkUJNjgKICNkZWZpbmUgTl9TTwkxMDAKIAotI2RlZmluZSBBU01fQ09OU1QoeCkgeAotI2Vsc2UKLSAgI2RlZmluZSBfX0FTTV9DT05TVCh4KSB4IyNVTAotICAjZGVmaW5lIEFTTV9DT05TVCh4KSBfX0FTTV9DT05TVCh4KQotCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIERBVEFMCSIubGxvbmciCi0jZWxzZQotI2RlZmluZSBEQVRBTAkiLmxvbmciCi0jZW5kaWYKLQogI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCmluZGV4IDFkYzRiZjcuLmQxMjM4MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaApAQCAtMTcsNjUgKzE3LDcxIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFBDMzIKLS8qIDMyLWJpdCBwbGF0Zm9ybSB0eXBlcyAqLwotLyogV2Ugb25seSBuZWVkIHRvIGRlZmluZSBhIG5ldyBfTUFDSF94eHggZm9yIG1hY2hpbmVzIHdoaWNoIGFyZSBwYXJ0IG9mCi0gKiBhIGNvbmZpZ3VyYXRpb24gd2hpY2ggc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIGRpZmZlcmVudCBtYWNoaW5lLgotICogVGhpcyBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gYW5kIENIUlAvUFJlUC9QTWFjLgotICogLS0gVG9tCisvKiBXZSBkbyBfbm90XyB3YW50IHRvIGRlZmluZSBuZXcgbWFjaGluZSB0eXBlcyBhdCBhbGwsIHRob3NlIG11c3QgZGllCisgKiBpbiBmYXZvciBvZiB1c2luZyB0aGUgZGV2aWNlLXRyZWUKKyAqIC0tIEJlbkguCiAgKi8KLSNkZWZpbmUgX01BQ0hfcHJlcAkweDAwMDAwMDAxCi0jZGVmaW5lIF9NQUNIX1BtYWMJMHgwMDAwMDAwMgkvKiBwbWFjIG9yIHBtYWMgY2xvbmUgKG5vbi1jaHJwKSAqLwotI2RlZmluZSBfTUFDSF9jaHJwCTB4MDAwMDAwMDQJLyogY2hycCBtYWNoaW5lICovCiAKLS8qIHNlZSByZXNpZHVhbC5oIGZvciB0aGVzZSAqLworLyogUGxhdGZvcm1zIGNvZGVzICh0byBiZSBvYnNvbGV0ZWQpICovCisjZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVMJMHgwMTAwCisjZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVNfTFBBUgkweDAxMDEKKyNkZWZpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSCTB4MDIwMQorI2RlZmluZSBQTEFURk9STV9MUEFSCQkweDAwMDEKKyNkZWZpbmUgUExBVEZPUk1fUE9XRVJNQUMJMHgwNDAwCisjZGVmaW5lIFBMQVRGT1JNX01BUExFCQkweDA1MDAKKyNkZWZpbmUgUExBVEZPUk1fUFJFUAkJMHgwNjAwCisjZGVmaW5lIFBMQVRGT1JNX0NIUlAJCTB4MDcwMAorI2RlZmluZSBQTEFURk9STV9DRUxMCQkweDEwMDAKKworLyogQ29tcGF0IHBsYXRmb3JtIGNvZGVzIGZvciAzMiBiaXRzICovCisjZGVmaW5lIF9NQUNIX3ByZXAJUExBVEZPUk1fUFJFUAorI2RlZmluZSBfTUFDSF9QbWFjCVBMQVRGT1JNX1BPV0VSTUFDCisjZGVmaW5lIF9NQUNIX2NocnAJUExBVEZPUk1fQ0hSUAorCisvKiBQUkVQIHN1Yi1wbGF0Zm9ybSB0eXBlcyBzZWUgcmVzaWR1YWwuaCBmb3IgdGhlc2UgKi8KICNkZWZpbmUgX1BSRVBfTW90b3JvbGEJMHgwMQkvKiBtb3Rvcm9sYSBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0Zpcm0JMHgwMgkvKiBmaXJtd29ya3MgcHJlcCAqLwogI2RlZmluZSBfUFJFUF9JQk0JMHgwMAkvKiBpYm0gcHJlcCAqLwogI2RlZmluZSBfUFJFUF9CdWxsCTB4MDMJLyogYnVsbCBwcmVwICovCiAKLS8qIHRoZXNlIGFyZSBhcmJpdHJhcnkgKi8KKy8qIENIUlAgc3ViLXBsYXRmb3JtIHR5cGVzLiBUaGVzZSBhcmUgYXJiaXRyYXJ5ICovCiAjZGVmaW5lIF9DSFJQX01vdG9yb2xhCTB4MDQJLyogbW90b3JvbGEgY2hycCwgdGhlIGNvYnJhICovCiAjZGVmaW5lIF9DSFJQX0lCTQkweDA1CS8qIElCTSBjaHJwLCB0aGUgbG9uZ3RyYWlsIGFuZCBsb25ndHJhaWwgMiAqLwogI2RlZmluZSBfQ0hSUF9QZWdhc29zCTB4MDYJLyogR2VuZXNpL2JwbGFuJ3MgUGVnYXNvcyBhbmQgUGVnYXNvczIgKi8KIAotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorI2RlZmluZSBwbGF0Zm9ybV9pc19wc2VyaWVzKCkJKF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVMgfHwgXAorCQkJCSBfbWFjaGluZSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisjZGVmaW5lIHBsYXRmb3JtX2lzX2xwYXIoKQkoISEoX21hY2hpbmUgJiBQTEFURk9STV9MUEFSKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQogZXh0ZXJuIGludCBfbWFjaGluZTsKIAorI2lmZGVmIENPTkZJR19QUEMzMgorCiAvKiB3aGF0IGtpbmQgb2YgcHJlcCB3b3Jrc3RhdGlvbiB3ZSBhcmUgKi8KIGV4dGVybiBpbnQgX3ByZXBfdHlwZTsKIGV4dGVybiBpbnQgX2NocnBfdHlwZTsKIAogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgYm9hcmQgdHlwZSBmcm9tIGEgZ2l2ZW4gUFJlUCBib2FyZAotICogdmVuZG9yLiBCb2FyZCByZXZpc2lvbiBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlLgorICogdmVuZG9yLiBCb2FyZCByZXZpc2lvbiBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgYmUgbW92ZWQKKyAqIGVsc2V3aGVyZSBzb29uCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjU3lzdGVtVHlwZTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjQm9hcmRSZXY7CiBleHRlcm4gdW5zaWduZWQgY2hhciB1Y0JvYXJkUmV2TWFqLCB1Y0JvYXJkUmV2TWluOworCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKQorLyoKKyAqIGlTZXJpZXMgaXMgc29vbiB0byBiZWNvbWUgTVVMVElQTEFURk9STSBob3BlZnVsbHkgLi4uCisgKi8KKyNkZWZpbmUgX21hY2hpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSCiAjZWxzZQogI2RlZmluZSBfbWFjaGluZSAwCiAjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCi0jZW5kaWYgLyogQ09ORklHX1BQQzMyICovCi0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLS8qIFBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgUFBDNjQgKi8KLSNkZWZpbmUgUExBVEZPUk1fUFNFUklFUyAgICAgIDB4MDEwMAotI2RlZmluZSBQTEFURk9STV9QU0VSSUVTX0xQQVIgMHgwMTAxCi0jZGVmaW5lIFBMQVRGT1JNX0lTRVJJRVNfTFBBUiAweDAyMDEKLSNkZWZpbmUgUExBVEZPUk1fTFBBUiAgICAgICAgIDB4MDAwMQotI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQyAgICAgMHgwNDAwCi0jZGVmaW5lIFBMQVRGT1JNX01BUExFICAgICAgICAweDA1MDAKLSNkZWZpbmUgUExBVEZPUk1fQ0VMTCAgICAgICAgIDB4MTAwMAotCi0vKiBDb21wYXRpYmlsaXR5IHdpdGggZHJpdmVycyBjb21pbmcgZnJvbSBQUEMzMiB3b3JsZCAqLwotI2RlZmluZSBfbWFjaGluZQkoc3lzdGVtY2ZnLT5wbGF0Zm9ybSkKLSNkZWZpbmUgX01BQ0hfUG1hYwlQTEFURk9STV9QT1dFUk1BQwotI2VuZGlmCiAKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CkBAIC0xNzEsOCArMTc3LDggQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAl1bnNpZ25lZCBsb25nCXN0YXJ0X3RiOwkvKiBTdGFydCBwdXJyIHdoZW4gcHJvYyBzd2l0Y2hlZCBpbiAqLwogCXVuc2lnbmVkIGxvbmcJYWNjdW1fdGI7CS8qIFRvdGFsIGFjY3VtaWxhdGVkIHB1cnIgZm9yIHByb2Nlc3MgKi8KLQl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsJLyogYmFzZSBvZiB0aGUgdkRTTyBsaWJyYXJ5ICovCiAjZW5kaWYKKwl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsJLyogYmFzZSBvZiB0aGUgdkRTTyBsaWJyYXJ5ICovCiAJdW5zaWduZWQgbG9uZwlkYWJyOwkJLyogRGF0YSBhZGRyZXNzIGJyZWFrcG9pbnQgcmVnaXN0ZXIgKi8KICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCS8qIENvbXBsZXRlIEFsdGlWZWMgcmVnaXN0ZXIgc2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaAppbmRleCA0ODljZjRjLi5lYjM5MmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKQEAgLTE2LDcgKzE2LDExIEBACiAvKiBQaWNrdXAgQm9vayBFIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQogI2luY2x1ZGUgPGFzbS9yZWdfYm9va2UuaD4KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19CT09LRSB8fCBDT05GSUdfNDB4ICovCisKKyNpZmRlZiBDT05GSUdfOHh4CisjaW5jbHVkZSA8YXNtL3JlZ184eHguaD4KKyNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKICNkZWZpbmUgTVNSX1NGX0xHCTYzICAgICAgICAgICAgICAvKiBFbmFibGUgNjQgYml0IG1vZGUgKi8KICNkZWZpbmUgTVNSX0lTRl9MRwk2MSAgICAgICAgICAgICAgLyogSW50ZXJydXB0IDY0YiBtb2RlIHZhbGlkIG9uIDYzMCAqLwpAQCAtMzU5LDYgKzM2Myw3IEBACiAjZGVmaW5lIFNQUk5fUlBBCTB4M0Q2CS8qIFJlcXVpcmVkIFBoeXNpY2FsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TREEJMHgzQkYJLyogU2FtcGxlZCBEYXRhIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TRFIxCTB4MDE5CS8qIE1NVSBIYXNoIEJhc2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9BU1IJMHgxMTggICAvKiBBZGRyZXNzIFNwYWNlIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fU0lBCTB4M0JCCS8qIFNhbXBsZWQgSW5zdHJ1Y3Rpb24gQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NQUkcwCTB4MTEwCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDAgKi8KICNkZWZpbmUgU1BSTl9TUFJHMQkweDExMQkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZ184eHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWEzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZ184eHguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29udGFpbnMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgY29tbW9uIHRvIFBvd2VyUEMgOHh4IENQVXMuICBOb3RpY2UKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfUkVHXzh4eF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19SRUdfOHh4X0gKKworLyogQ2FjaGUgY29udHJvbCBvbiB0aGUgTVBDOHh4IGlzIHByb3ZpZGVkIHRocm91Z2ggc29tZSBhZGRpdGlvbmFsCisgKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFNQUk5fSUNfQ1NUCTU2MAkvKiBJbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBTUFJOX0lDX0FEUgk1NjEJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KKyNkZWZpbmUgU1BSTl9JQ19EQVQJNTYyCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRENfQ1NUCTU2OAkvKiBEYXRhIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIFNQUk5fRENfQURSCTU2OQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLworI2RlZmluZSBTUFJOX0RDX0RBVAk1NzAJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KKworLyogQ29tbWFuZHMuICBPbmx5IHRoZSBmaXJzdCBmZXcgYXJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCisqLworI2RlZmluZQlJRENfRU5BQkxFCTB4MDIwMDAwMDAJLyogQ2FjaGUgZW5hYmxlICovCisjZGVmaW5lIElEQ19ESVNBQkxFCTB4MDQwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZSAqLworI2RlZmluZSBJRENfTERMQ0sJMHgwNjAwMDAwMAkvKiBMb2FkIGFuZCBsb2NrICovCisjZGVmaW5lIElEQ19VTkxJTkUJMHgwODAwMDAwMAkvKiBVbmxvY2sgbGluZSAqLworI2RlZmluZSBJRENfVU5BTEwJMHgwYTAwMDAwMAkvKiBVbmxvY2sgYWxsICovCisjZGVmaW5lIElEQ19JTlZBTEwJMHgwYzAwMDAwMAkvKiBJbnZhbGlkYXRlIGFsbCAqLworCisjZGVmaW5lIERDX0ZMSU5FCTB4MGUwMDAwMDAJLyogRmx1c2ggZGF0YSBjYWNoZSBsaW5lICovCisjZGVmaW5lIERDX1NGV1QJCTB4MDEwMDAwMDAJLyogU2V0IGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLworI2RlZmluZSBEQ19DRldUCQkweDAzMDAwMDAwCS8qIENsZWFyIGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLworI2RlZmluZSBEQ19TTEVTCQkweDA1MDAwMDAwCS8qIFNldCBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLworI2RlZmluZSBEQ19DTEVTCQkweDA3MDAwMDAwCS8qIENsZWFyIGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCisKKy8qIFN0YXR1cy4KKyovCisjZGVmaW5lIElEQ19FTkFCTEVECTB4ODAwMDAwMDAJLyogQ2FjaGUgaXMgZW5hYmxlZCAqLworI2RlZmluZSBJRENfQ0VSUjEJMHgwMDIwMDAwMAkvKiBDYWNoZSBlcnJvciAxICovCisjZGVmaW5lIElEQ19DRVJSMgkweDAwMTAwMDAwCS8qIENhY2hlIGVycm9yIDIgKi8KKyNkZWZpbmUgSURDX0NFUlIzCTB4MDAwODAwMDAJLyogQ2FjaGUgZXJyb3IgMyAqLworCisjZGVmaW5lIERDX0RGV1QJCTB4NDAwMDAwMDAJLyogRGF0YSBjYWNoZSBpcyBmb3JjZWQgd3JpdGUgdGhyb3VnaCAqLworI2RlZmluZSBEQ19MRVMJCTB4MjAwMDAwMDAJLyogQ2FjaGVzIGFyZSBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19SRUdfOHh4X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oCmluZGV4IGNhZjZlZGUuLjY5NGM4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oCkBAIC0xLDE4ICsxLDExIEBACi0jaWZuZGVmIF9BU01QUENfU0lHTkFMX0gKLSNkZWZpbmUgX0FTTVBQQ19TSUdOQUxfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1NJR05BTF9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLS8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCi1zdHJ1Y3Qgc2lnaW5mbzsKLQotLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKLSAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19CUFcJQklUU19QRVJfTE9ORwogI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCkBAIC03NywxOSArNzAsMTkgQEAKICAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKICAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KICAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCi0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKLSNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDFVCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyVQorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDRVCisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMFUKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwVQorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDBVCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwVQogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDB1IC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAotI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDBVCiAKIC8qCiAgKiBzaWdhbHRzdGFjayBjb250cm9scwpAQCAtMTI3LDEwICsxMjAsMTMgQEAKIH0gc3RhY2tfdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAorI2lmbmRlZiBfX3Bvd2VycGM2NF9fCiAvKgogICogVGhlc2UgYXJlIHBhcmFtZXRlcnMgdG8gZGJnX3NpZ3JldHVybiBzeXNjYWxsLiAgVGhleSBlbmFibGUgb3IKICAqIGRpc2FibGUgY2VydGFpbiBkZWJ1Z2dpbmcgdGhpbmdzIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSBzaWduYWwKQEAgLTE0OSw1ICsxNDUsNiBAQAogCiAvKiBFbmFibGUgb3IgZGlzYWJsZSBicmFuY2ggdHJhY2luZy4gIFRoZSB2YWx1ZSBzZXRzIHRoZSBzdGF0ZS4gKi8KICNkZWZpbmUgU0lHX0RCR19CUkFOQ0hfVFJBQ0lORwkJMgorI2VuZGlmIC8qICEgX19wb3dlcnBjNjRfXyAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwYXJzZW1lbS5oCmluZGV4IDFjOTVhYjkuLmJhMWIzNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaApAQCAtOCw4ICs4LDEyIEBACiAgKiBNQVhfUEhZU01FTV9CSVRTCQkyXk46IGhvdyBtdWNoIG1lbW9yeSB3ZSBjYW4gaGF2ZSBpbiB0aGF0IHNwYWNlCiAgKi8KICNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgICAgICAgMjQKLSNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgMzgKLSNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgMzYKKyNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgNDQKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgNDQKKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworZXh0ZXJuIHZvaWQgY3JlYXRlX3NlY3Rpb25fbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCmluZGV4IDM1MzZhNWMuLjUzNDFiNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaApAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyoKQEAgLTE4MCw2ICsxNzksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBydGFzX2RhdGE7CiBleHRlcm4gaW50IG1lbV9pbml0X2RvbmU7CS8qIHNldCBvbiBib290IG9uY2Uga21hbGxvYyBjYW4gYmUgY2FsbGVkICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfbGltaXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7CiAKIGV4dGVybiBpbnQgcG93ZXJzYXZlX25hcDsJLyogc2V0IGlmIG5hcCBtb2RlIGNhbiBiZSB1c2VkIGluIGlkbGUgbG9vcCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90Y2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvdGNlLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmgKaW5kZXggZDQwYjZiNC4uZDA5OWQ1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvdGNlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaApAQCAtMTgsOCArMTgsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmbmRlZiBfQVNNX1RDRV9ICi0jZGVmaW5lIF9BU01fVENFX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1RDRV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19UQ0VfSAogCiAvKgogICogVGNlcyBjb21lIGluIHR3byBmb3JtYXRzLCBvbmUgZm9yIHRoZSB2aXJ0dWFsIGJ1cyBhbmQgYSBkaWZmZXJlbnQKQEAgLTYxLDQgKzYxLDQgQEAKIH07CiAKIAotI2VuZGlmCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1RDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKaW5kZXggMjUxMmUzOC4uMDE1ZDI4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaApAQCAtOSwxNSArOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV90b19ub2RlKGludCBjcHUpCiB7Ci0JaW50IG5vZGU7Ci0KLQlub2RlID0gbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV07Ci0KLSNpZmRlZiBERUJVR19OVU1BCi0JQlVHX09OKG5vZGUgPT0gLTEpOwotI2VuZGlmCi0KLQlyZXR1cm4gbm9kZTsKKwlyZXR1cm4gbnVtYV9jcHVfbG9va3VwX3RhYmxlW2NwdV07CiB9CiAKICNkZWZpbmUgcGFyZW50X25vZGUobm9kZSkJKG5vZGUpCkBAIC0zNyw4ICsyOSw2IEBACiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKG5vZGUpICAgICgtMSkKICNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKQkoY3B1X29ubGluZV9tYXApCiAKLSNkZWZpbmUgbnJfY3B1c19ub2RlKG5vZGUpCShucl9jcHVzX2luX25vZGVbbm9kZV0pCi0KIC8qIHNjaGVkX2RvbWFpbnMgU0RfTk9ERV9JTklUIGZvciBQUEM2NCBtYWNoaW5lcyAqLwogI2RlZmluZSBTRF9OT0RFX0lOSVQgKHN0cnVjdCBzY2hlZF9kb21haW4pIHsJCVwKIAkuc3BhbgkJCT0gQ1BVX01BU0tfTk9ORSwJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaAppbmRleCAzM2FmNzMwLi4zODcyZTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaApAQCAtMTIwLDE0ICsxMjAsNiBAQAogCiBleHRlcm4gbG9uZyBfX3B1dF91c2VyX2JhZCh2b2lkKTsKIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KLSNkZWZpbmUgX19FWF9UQUJMRV9BTElHTgkiMyIKLSNkZWZpbmUgX19FWF9UQUJMRV9UWVBFCQkibGxvbmciCi0jZWxzZQotI2RlZmluZSBfX0VYX1RBQkxFX0FMSUdOCSIyIgotI2RlZmluZSBfX0VYX1RBQkxFX1RZUEUJCSJsb25nIgotI2VuZGlmCi0KIC8qCiAgKiBXZSBkb24ndCB0ZWxsIGdjYyB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcgbWVtb3J5LCBidXQgdGhpcyBpcyBPSwogICogYmVjYXVzZSB3ZSBkbyBub3Qgd3JpdGUgdG8gYW55IG1lbW9yeSBnY2Mga25vd3MgYWJvdXQsIHNvIHRoZXJlCkBAIC0xNDIsMTEgKzEzNCwxMiBAQAogCQkiCWIgMmJcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKLQkJIgkuYWxpZ24gIiBfX0VYX1RBQkxFX0FMSUdOICJcbiIJCVwKLQkJIgkuIl9fRVhfVEFCTEVfVFlQRSIgMWIsM2JcbiIJCVwKKwkJIgkuYmFsaWduICU1XG4iCQkJCVwKKwkJCVBQQ19MT05HICIxYiwzYlxuIgkJCVwKIAkJIi5wcmV2aW91cyIJCQkJCVwKIAkJOiAiPXIiIChlcnIpCQkJCQlcCi0JCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpKQorCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSxcCisJCSAgImkiKHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIF9fcHV0X3VzZXJfYXNtMih4LCBwdHIsIHJldHZhbCkJCQkJXApAQCAtMTYyLDEyICsxNTUsMTMgQEAKIAkJIgliIDNiXG4iCQkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJCVwKIAkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSIJLmFsaWduICIgX19FWF9UQUJMRV9BTElHTiAiXG4iCQlcCi0JCSIJLiIgX19FWF9UQUJMRV9UWVBFICIgMWIsNGJcbiIJCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAyYiw0YlxuIgkJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQkJXAorCQkJUFBDX0xPTkcgIjFiLDRiXG4iCQkJXAorCQkJUFBDX0xPTkcgIjJiLDRiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6ICI9ciIgKGVycikJCQkJCVwKLQkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLFwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNkZWZpbmUgX19wdXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKQEAgLTIxMywxMSArMjA3LDEyIEBACiAJCSIJYiAyYlxuIgkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAotCQkiCS5hbGlnbiAiX19FWF9UQUJMRV9BTElHTiAiXG4iCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiwzYlxuIglcCisJCSIJLmJhbGlnbiAlNVxuIgkJCVwKKwkJCVBQQ19MT05HICIxYiwzYlxuIgkJXAogCQkiLnByZXZpb3VzIgkJCQlcCiAJCTogIj1yIiAoZXJyKSwgIj1yIiAoeCkJCQlcCi0JCTogImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpKQorCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSwJXAorCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQogCiAjaWZkZWYgX19wb3dlcnBjNjRfXwogI2RlZmluZSBfX2dldF91c2VyX2FzbTIoeCwgYWRkciwgZXJyKQkJCVwKQEAgLTIzNSwxMiArMjMwLDEzIEBACiAJCSIJYiAzYlxuIgkJCQlcCiAJCSIucHJldmlvdXNcbiIJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJXAotCQkiCS5hbGlnbiAiIF9fRVhfVEFCTEVfQUxJR04gIlxuIglcCi0JCSIJLiIgX19FWF9UQUJMRV9UWVBFICIgMWIsNGJcbiIJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDJiLDRiXG4iCVwKKwkJIgkuYmFsaWduICU1XG4iCQkJXAorCQkJUFBDX0xPTkcgIjFiLDRiXG4iCQlcCisJCQlQUENfTE9ORyAiMmIsNGJcbiIJCVwKIAkJIi5wcmV2aW91cyIJCQkJXAogCQk6ICI9ciIgKGVyciksICI9JnIiICh4KQkJCVwKLQkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLAlcCisJCSAgImkiKHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjZGVmaW5lIF9fZ2V0X3VzZXJfc2l6ZSh4LCBwdHIsIHNpemUsIHJldHZhbCkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC91ZGJnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wcGM2NC91ZGJnLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCmluZGV4IGUzYjkyNzkuLmEzODMzODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VkYmcuaApAQCAtMSw5ICsxLDMgQEAKLSNpZm5kZWYgX19VREJHX0hEUgotI2RlZmluZSBfX1VEQkdfSERSCi0KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQogLyoKICAqIGMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKICAqCkBAIC0xMyw2ICs3LDEyIEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1VEQkdfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfVURCR19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogZXh0ZXJuIHZvaWQgKCp1ZGJnX3B1dGMpKHVuc2lnbmVkIGNoYXIgYyk7CiBleHRlcm4gdW5zaWduZWQgY2hhciAoKnVkYmdfZ2V0Yykodm9pZCk7CiBleHRlcm4gaW50ICgqdWRiZ19nZXRjX3BvbGwpKHZvaWQpOwpAQCAtMjgsNCArMjgsNCBAQAogCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiBleHRlcm4gdm9pZCB1ZGJnX2luaXRfc2NjKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwotI2VuZGlmCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1VEQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvdmRzby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L3Zkc28uaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmRzb19kYXRhcGFnZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzMjNiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmRzb19kYXRhcGFnZS5oCkBAIC0wLDAgKzEsMTA4IEBACisjaWZuZGVmIF9WRFNPX0RBVEFQQUdFX0gKKyNkZWZpbmUgX1ZEU09fREFUQVBBR0VfSAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIEJlcmduZXIgPGJlcmduZXJAdm5ldC5pYm0uY29tPiwgSUJNCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQmVuamFtaW4gSGVycmVuc2NobWlkeSA8YmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnPiwKKyAqIAkJICAgICAgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKy8qCisgKiBOb3RlIGFib3V0IHRoaXMgc3RydWN0dXJlOgorICoKKyAqIFRoaXMgc3RydWN0dXJlIHdhcyBoaXN0b3JpY2FsbHkgY2FsbGVkIHN5c3RlbWNmZyBhbmQgZXhwb3NlZCB0bworICogdXNlcmxhbmQgdmlhIC9wcm9jL3BwYzY0L3N5c3RlbWNmZy4gVW5mb3J0dW5hdGVseSwgdGhpcyBiZWNhbWUgYW4KKyAqIEFCSSBpc3N1ZSBhcyBzb21lIHByb3ByaWV0YXJ5IHNvZnR3YXJlIHN0YXJ0ZWQgcmVseWluZyBvbiBiZWluZyBhYmxlCisgKiB0byBtbWFwKCkgaXQsIHRodXMgd2UgaGF2ZSB0byBrZWVwIHRoZSBiYXNlIGxheW91dCBhdCBsZWFzdCBmb3IgYQorICogZmV3IGtlcm5lbCB2ZXJzaW9ucy4KKyAqCisgKiBIb3dldmVyLCBzaW5jZSBwcGMzMiBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgYmFja3dhcmQgaGFuZGljYXAsCisgKiBhIHNpbXBsZXIgdmVyc2lvbiBvZiB0aGUgZGF0YSBzdHJ1Y3R1cmUgaXMgdXNlZCB0aGVyZSB3aXRoIG9ubHkgdGhlCisgKiBmaWVsZHMgYWN0dWFsbHkgdXNlZCBieSB0aGUgdkRTTy4KKyAqCisgKi8KKworLyoKKyAqIElmIHRoZSBtYWpvciB2ZXJzaW9uIGNoYW5nZXMgd2UgYXJlIGluY29tcGF0aWJsZS4KKyAqIE1pbm9yIHZlcnNpb24gY2hhbmdlcyBhcmUgYSBoaW50LgorICovCisjZGVmaW5lIFNZU1RFTUNGR19NQUpPUiAxCisjZGVmaW5lIFNZU1RFTUNGR19NSU5PUiAxCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKworI2RlZmluZSBTWVNDQUxMX01BUF9TSVpFICAgICAgKChfX05SX3N5c2NhbGxzICsgMzEpIC8gMzIpCisKKy8qCisgKiBTbyBoZXJlIGlzIHRoZSBwcGM2NCBiYWNrd2FyZCBjb21wYXRpYmxlIHZlcnNpb24KKyAqLworCisjaWZkZWYgQ09ORklHX1BQQzY0CisKK3N0cnVjdCB2ZHNvX2RhdGEgeworCV9fdTggIGV5ZV9jYXRjaGVyWzE2XTsJCS8qIEV5ZWNhdGNoZXI6IFNZU1RFTUNGRzpQUEM2NAkweDAwICovCisJc3RydWN0IHsJCQkvKiBTeXN0ZW1jZmcgdmVyc2lvbiBudW1iZXJzCSAgICAgKi8KKwkJX191MzIgbWFqb3I7CQkvKiBNYWpvciBudW1iZXIJCQkweDEwICovCisJCV9fdTMyIG1pbm9yOwkJLyogTWlub3IgbnVtYmVyCQkJMHgxNCAqLworCX0gdmVyc2lvbjsKKworCV9fdTMyIHBsYXRmb3JtOwkJCS8qIFBsYXRmb3JtIGZsYWdzCQkweDE4ICovCisJX191MzIgcHJvY2Vzc29yOwkJLyogUHJvY2Vzc29yIHR5cGUJCTB4MUMgKi8KKwlfX3U2NCBwcm9jZXNzb3JDb3VudDsJCS8qICMgb2YgcGh5c2ljYWwgcHJvY2Vzc29ycwkweDIwICovCisJX191NjQgcGh5c2ljYWxNZW1vcnlTaXplOwkvKiBTaXplIG9mIHJlYWwgbWVtb3J5KEIpCTB4MjggKi8KKwlfX3U2NCB0Yl9vcmlnX3N0YW1wOwkJLyogVGltZWJhc2UgYXQgYm9vdAkJMHgzMCAqLworCV9fdTY0IHRiX3RpY2tzX3Blcl9zZWM7CQkvKiBUaW1lYmFzZSB0aWNzIC8gc2VjCQkweDM4ICovCisJX191NjQgdGJfdG9feHM7CQkJLyogSW52ZXJzZSBvZiBUQiB0byAyXjIwCTB4NDAgKi8KKwlfX3U2NCBzdGFtcF94c2VjOwkJLyoJCQkJMHg0OCAqLworCV9fdTY0IHRiX3VwZGF0ZV9jb3VudDsJCS8qIFRpbWViYXNlIGF0b21pY2l0eSBjdHIJMHg1MCAqLworCV9fdTMyIHR6X21pbnV0ZXN3ZXN0OwkJLyogTWludXRlcyB3ZXN0IG9mIEdyZWVud2ljaAkweDU4ICovCisJX191MzIgdHpfZHN0dGltZTsJCS8qIFR5cGUgb2YgZHN0IGNvcnJlY3Rpb24JMHg1QyAqLworCV9fdTMyIGRjYWNoZV9zaXplOwkJLyogTDEgZC1jYWNoZSBzaXplCQkweDYwICovCisJX191MzIgZGNhY2hlX2xpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCQkweDY0ICovCisJX191MzIgaWNhY2hlX3NpemU7CQkvKiBMMSBpLWNhY2hlIHNpemUJCTB4NjggKi8KKwlfX3UzMiBpY2FjaGVfbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJCTB4NkMgKi8KKworCS8qIHRob3NlIGFkZGl0aW9uYWwgb25lcyBkb24ndCBoYXZlIHRvIGJlIGxvY2F0ZWQgYW55d2hlcmUKKwkgKiBzcGVjaWFsIGFzIHRoZXkgd2VyZSBub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwgc3lzdGVtY2ZnCisJICovCisJX19zNjQgd3RvbV9jbG9ja19zZWM7CQkJLyogV2FsbCB0byBtb25vdG9uaWMgY2xvY2sgKi8KKwlfX3MzMiB3dG9tX2Nsb2NrX25zZWM7CisgICAJX191MzIgc3lzY2FsbF9tYXBfNjRbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBzeXNjYWxscyAgKi8KKyAgIAlfX3UzMiBzeXNjYWxsX21hcF8zMltTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICovCit9OworCisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKworLyoKKyAqIEFuZCBoZXJlIGlzIHRoZSBzaW1wbGVyIDMyIGJpdHMgdmVyc2lvbgorICovCitzdHJ1Y3QgdmRzb19kYXRhIHsKKwlfX3U2NCB0Yl9vcmlnX3N0YW1wOwkJLyogVGltZWJhc2UgYXQgYm9vdAkJMHgzMCAqLworCV9fdTY0IHRiX3RpY2tzX3Blcl9zZWM7CQkvKiBUaW1lYmFzZSB0aWNzIC8gc2VjCQkweDM4ICovCisJX191NjQgdGJfdG9feHM7CQkJLyogSW52ZXJzZSBvZiBUQiB0byAyXjIwCTB4NDAgKi8KKwlfX3U2NCBzdGFtcF94c2VjOwkJLyoJCQkJMHg0OCAqLworCV9fdTMyIHRiX3VwZGF0ZV9jb3VudDsJCS8qIFRpbWViYXNlIGF0b21pY2l0eSBjdHIJMHg1MCAqLworCV9fdTMyIHR6X21pbnV0ZXN3ZXN0OwkJLyogTWludXRlcyB3ZXN0IG9mIEdyZWVud2ljaAkweDU4ICovCisJX191MzIgdHpfZHN0dGltZTsJCS8qIFR5cGUgb2YgZHN0IGNvcnJlY3Rpb24JMHg1QyAqLworCV9fczMyIHd0b21fY2xvY2tfc2VjOwkJCS8qIFdhbGwgdG8gbW9ub3RvbmljIGNsb2NrICovCisJX19zMzIgd3RvbV9jbG9ja19uc2VjOworICAgCV9fdTMyIHN5c2NhbGxfbWFwXzMyW1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2Ygc3lzY2FsbHMgKi8KK307CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiBzdHJ1Y3QgdmRzb19kYXRhICp2ZHNvX2RhdGE7CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX1NZU1RFTUNGR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3htb24uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oCmluZGV4IGFjZTIwNzIuLjQzZjcxMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oCkBAIC03LDcgKzcsNiBAQAogZXh0ZXJuIGludCB4bW9uKHN0cnVjdCBwdF9yZWdzICpleGNwKTsKIGV4dGVybiB2b2lkIHhtb25fcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGV4dGVybiB2b2lkIHhtb25faW5pdChpbnQpOwotZXh0ZXJuIHZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpOwogCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ExNTdkMC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1wcGMvY2FjaGUuaAotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfX0FSQ0hfUFBDX0NBQ0hFX0gKLSNkZWZpbmUgX19BUkNIX1BQQ19DQUNIRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KLSNpZiBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzQwM0dDWCkKLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJNAotI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCi0jZWxpZiBkZWZpbmVkKENPTkZJR19QUEM2NEJSSURHRSkKLSNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJNwotI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCi0jZWxzZQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk1Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTQKLSNlbmRpZgotCi0jZGVmaW5lCUwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQotCi0jZGVmaW5lCVNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUwotI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVggNwkvKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cyAqLwotCi0jZGVmaW5lCUwxX0NBQ0hFX0FMSUdOKHgpICAgICAgICgoKHgpKyhMMV9DQUNIRV9CWVRFUy0xKSkmfihMMV9DQUNIRV9CWVRFUy0xKSkKLSNkZWZpbmUJTDFfQ0FDSEVfUEFHRVMJCTgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIGNsZWFuX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX2FsbCh2b2lkKTsKLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotLyogcHJlcCByZWdpc3RlcnMgZm9yIEwyICovCi0jZGVmaW5lIENBQ0hFQ1JCQSAgICAgICAweDgwMDAwODIzICAgICAgLyogQ2FjaGUgY29uZmlndXJhdGlvbiByZWdpc3RlciBhZGRyZXNzICovCi0jZGVmaW5lIEwyQ0FDSEVfTUFTSwkweDAzCS8qIE1hc2sgZm9yIDIgTDIgQ2FjaGUgYml0cyAqLwotI2RlZmluZSBMMkNBQ0hFXzUxMktCCTB4MDAJLyogNTEyS0IgKi8KLSNkZWZpbmUgTDJDQUNIRV8yNTZLQgkweDAxCS8qIDI1NktCICovCi0jZGVmaW5lIEwyQ0FDSEVfMU1CCTB4MDIJLyogMU1CICovCi0jZGVmaW5lIEwyQ0FDSEVfTk9ORQkweDAzCS8qIE5PTkUgKi8KLSNkZWZpbmUgTDJDQUNIRV9QQVJJVFkgIDB4MDggICAgLyogTWFzayBmb3IgTDIgQ2FjaGUgUGFyaXR5IFByb3RlY3RlZCBiaXQgKi8KLQotI2lmZGVmIENPTkZJR184eHgKLS8qIENhY2hlIGNvbnRyb2wgb24gdGhlIE1QQzh4eCBpcyBwcm92aWRlZCB0aHJvdWdoIHNvbWUgYWRkaXRpb25hbAotICogc3BlY2lhbCBwdXJwb3NlIHJlZ2lzdGVycy4KLSAqLwotI2RlZmluZSBTUFJOX0lDX0NTVAk1NjAJLyogSW5zdHJ1Y3Rpb24gY2FjaGUgY29udHJvbC9zdGF0dXMgKi8KLSNkZWZpbmUgU1BSTl9JQ19BRFIJNTYxCS8qIEFkZHJlc3MgbmVlZGVkIGZvciBzb21lIGNvbW1hbmRzICovCi0jZGVmaW5lIFNQUk5fSUNfREFUCTU2MgkvKiBSZWFkLW9ubHkgZGF0YSByZWdpc3RlciAqLwotI2RlZmluZSBTUFJOX0RDX0NTVAk1NjgJLyogRGF0YSBjYWNoZSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBTUFJOX0RDX0FEUgk1NjkJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KLSNkZWZpbmUgU1BSTl9EQ19EQVQJNTcwCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCi0KLS8qIENvbW1hbmRzLiAgT25seSB0aGUgZmlyc3QgZmV3IGFyZSBhdmFpbGFibGUgdG8gdGhlIGluc3RydWN0aW9uIGNhY2hlLgotKi8KLSNkZWZpbmUJSURDX0VOQUJMRQkweDAyMDAwMDAwCS8qIENhY2hlIGVuYWJsZSAqLwotI2RlZmluZSBJRENfRElTQUJMRQkweDA0MDAwMDAwCS8qIENhY2hlIGRpc2FibGUgKi8KLSNkZWZpbmUgSURDX0xETENLCTB4MDYwMDAwMDAJLyogTG9hZCBhbmQgbG9jayAqLwotI2RlZmluZSBJRENfVU5MSU5FCTB4MDgwMDAwMDAJLyogVW5sb2NrIGxpbmUgKi8KLSNkZWZpbmUgSURDX1VOQUxMCTB4MGEwMDAwMDAJLyogVW5sb2NrIGFsbCAqLwotI2RlZmluZSBJRENfSU5WQUxMCTB4MGMwMDAwMDAJLyogSW52YWxpZGF0ZSBhbGwgKi8KLQotI2RlZmluZSBEQ19GTElORQkweDBlMDAwMDAwCS8qIEZsdXNoIGRhdGEgY2FjaGUgbGluZSAqLwotI2RlZmluZSBEQ19TRldUCQkweDAxMDAwMDAwCS8qIFNldCBmb3JjZWQgd3JpdGV0aHJvdWdoIG1vZGUgKi8KLSNkZWZpbmUgRENfQ0ZXVAkJMHgwMzAwMDAwMAkvKiBDbGVhciBmb3JjZWQgd3JpdGV0aHJvdWdoIG1vZGUgKi8KLSNkZWZpbmUgRENfU0xFUwkJMHgwNTAwMDAwMAkvKiBTZXQgbGl0dGxlIGVuZGlhbiBzd2FwIG1vZGUgKi8KLSNkZWZpbmUgRENfQ0xFUwkJMHgwNzAwMDAwMAkvKiBDbGVhciBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLwotCi0vKiBTdGF0dXMuCi0qLwotI2RlZmluZSBJRENfRU5BQkxFRAkweDgwMDAwMDAwCS8qIENhY2hlIGlzIGVuYWJsZWQgKi8KLSNkZWZpbmUgSURDX0NFUlIxCTB4MDAyMDAwMDAJLyogQ2FjaGUgZXJyb3IgMSAqLwotI2RlZmluZSBJRENfQ0VSUjIJMHgwMDEwMDAwMAkvKiBDYWNoZSBlcnJvciAyICovCi0jZGVmaW5lIElEQ19DRVJSMwkweDAwMDgwMDAwCS8qIENhY2hlIGVycm9yIDMgKi8KLQotI2RlZmluZSBEQ19ERldUCQkweDQwMDAwMDAwCS8qIERhdGEgY2FjaGUgaXMgZm9yY2VkIHdyaXRlIHRocm91Z2ggKi8KLSNkZWZpbmUgRENfTEVTCQkweDIwMDAwMDAwCS8qIENhY2hlcyBhcmUgbGl0dGxlIGVuZGlhbiBtb2RlICovCi0jZW5kaWYgLyogQ09ORklHXzh4eCAqLwotCi0jZW5kaWYKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjL2NhY2hlZmx1c2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEyNDNlZi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGVmbHVzaC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX1BQQ19DQUNIRUZMVVNIX0gKLSNkZWZpbmUgX1BQQ19DQUNIRUZMVVNIX0gKLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KLS8qCi0gKiBObyBjYWNoZSBmbHVzaGluZyBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3MgbWFwcGluZ3MgYXJlCi0gKiBjaGFuZ2VkLCBiZWNhdXNlIHRoZSBjYWNoZXMgb24gUG93ZXJQQ3MgYXJlIHBoeXNpY2FsbHkKLSAqIGFkZHJlc3NlZC4gIC0tIHBhdWx1cwotICogQWxzbywgd2hlbiBTTVAgd2UgdXNlIHRoZSBjb2hlcmVuY3kgKE0pIGJpdCBvZiB0aGUKLSAqIEJBVHMgYW5kIFBURXMuICAtLSBDb3J0Ci0gKi8KLSNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgYSwgYikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgcCwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKTsKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi1kbyB7IG1lbWNweShkc3QsIHNyYywgbGVuKTsgXAotICAgICBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEsIHBhZ2UsIHZhZGRyLCBsZW4pOyBcCi19IHdoaWxlICgwKQotI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLQltZW1jcHkoZHN0LCBzcmMsIGxlbikKLQotZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlKHZvaWQgKnBhZ2VfdmEpOwotZXh0ZXJuIHZvaWQgX19mbHVzaF9kY2FjaGVfaWNhY2hlX3BoeXModW5zaWduZWQgbG9uZyBwaHlzYWRkcik7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOwotI2VuZGlmIC8qIF9QUENfQ0FDSEVGTFVTSF9IICovCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2N1cnJlbnQuaCBiL2luY2x1ZGUvYXNtLXBwYy9jdXJyZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDE1MDEuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2N1cnJlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9QUENfQ1VSUkVOVF9ICi0jZGVmaW5lIF9QUENfQ1VSUkVOVF9ICi0KLS8qCi0gKiBXZSBrZWVwIGBjdXJyZW50JyBpbiByMiBmb3Igc3BlZWQuCi0gKi8KLXJlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBhc20gKCJyMiIpOwotCi0jZW5kaWYgLyogIShfUFBDX0NVUlJFTlRfSCkgKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaAppbmRleCBmYzQ0ZjdjLi41MzhlMGM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKQEAgLTEsOSArMSwxMiBAQAogI2lmbmRlZiBfUFBDX1BBR0VfSAogI2RlZmluZSBfUFBDX1BBR0VfSAogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KKwogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgotI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX1NJWkUJKEFTTV9DT05TVCgxKSA8PCBQQUdFX1NISUZUKQogCiAvKgogICogU3VidGxlOiB0aGlzIGlzIGFuIGludCAobm90IGFuIHVuc2lnbmVkIGxvbmcpIGFuZCBzbyBpdApAQCAtMTY5LDUgKzE3Miw4IEBACiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKIAkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKIAorLyogV2UgZG8gZGVmaW5lIEFUX1NZU0lORk9fRUhEUiBidXQgZG9uJ3QgdXNlIHRoZSBnYXRlIG1lY2FuaXNtICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX0dBVEVfQVJFQQkJMQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9QUENfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxNDBhNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpZm5kZWYgX19BUkNIX1BQQzY0X0NBQ0hFX0gKLSNkZWZpbmUgX19BUkNIX1BQQzY0X0NBQ0hFX0gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk3Ci0jZGVmaW5lIEwxX0NBQ0hFX0JZVEVTCSgxIDw8IEwxX0NBQ0hFX1NISUZUKQotCi0jZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUwotI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVggNwkvKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi1zdHJ1Y3QgcHBjNjRfY2FjaGVzIHsKLQl1MzIJZHNpemU7CQkJLyogTDEgZC1jYWNoZSBzaXplICovCi0JdTMyCWRsaW5lX3NpemU7CQkvKiBMMSBkLWNhY2hlIGxpbmUgc2l6ZQkqLwotCXUzMglsb2dfZGxpbmVfc2l6ZTsKLQl1MzIJZGxpbmVzX3Blcl9wYWdlOwotCXUzMglpc2l6ZTsJCQkvKiBMMSBpLWNhY2hlIHNpemUgKi8KLQl1MzIJaWxpbmVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgbGluZSBzaXplCSovCi0JdTMyCWxvZ19pbGluZV9zaXplOwotCXUzMglpbGluZXNfcGVyX3BhZ2U7Ci19OwotCi1leHRlcm4gc3RydWN0IHBwYzY0X2NhY2hlcyBwcGM2NF9jYWNoZXM7Ci0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlZmx1c2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZiYzA4Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZWZsdXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jaWZuZGVmIF9QUEM2NF9DQUNIRUZMVVNIX0gKLSNkZWZpbmUgX1BQQzY0X0NBQ0hFRkxVU0hfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KLQotLyoKLSAqIE5vIGNhY2hlIGZsdXNoaW5nIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzcyBtYXBwaW5ncyBhcmUKLSAqIGNoYW5nZWQsIGJlY2F1c2UgdGhlIGNhY2hlcyBvbiBQb3dlclBDcyBhcmUgcGh5c2ljYWxseQotICogYWRkcmVzc2VkLgotICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgX19mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICAgaW50IGxlbik7Ci0KLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BoeXNfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLWV4dGVybiB2b2lkIGZsdXNoX2ludmFsX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLWRvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCi0gICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGUodm9pZCAqcGFnZV92YSk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKQotewotCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSkKLQkJX19mbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIHN0b3ApOwotfQotCi0jZW5kaWYgLyogX1BQQzY0X0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY3VycmVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmRkYzYwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2N1cnJlbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNpZm5kZWYgX1BQQzY0X0NVUlJFTlRfSAotI2RlZmluZSBfUFBDNjRfQ1VSUkVOVF9ICi0KLSNpbmNsdWRlIDxhc20vcGFjYS5oPgotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jZGVmaW5lIGdldF9jdXJyZW50KCkgICAoZ2V0X3BhY2EoKS0+X19jdXJyZW50KQotI2RlZmluZSBjdXJyZW50ICAgICAgICAgZ2V0X2N1cnJlbnQoKQotCi0jZW5kaWYgLyogIShfUFBDNjRfQ1VSUkVOVF9IKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvZWVoLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaAppbmRleCA0MGM4ZWI1Li44OWYyNmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaApAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIGVlaC5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIERhdmUgRW5nZWJyZXRzZW4gJiBUb2RkIEluZ2xldHQgSUJNIENvcnBvcmF0aW9uLgogICoKQEAgLTYsMTIgKzYsMTIgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIAorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKiAKKyAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQpAQCAtMjcsOCArMjcsNiBAQAogCiBzdHJ1Y3QgcGNpX2RldjsKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKLXN0cnVjdCBkZXZpY2Vfbm9kZTsKLXN0cnVjdCBub3RpZmllcl9ibG9jazsKIAogI2lmZGVmIENPTkZJR19FRUgKIApAQCAtMzcsNiArMzUsMTAgQEAKICNkZWZpbmUgRUVIX01PREVfTk9DSEVDSwkoMTw8MSkKICNkZWZpbmUgRUVIX01PREVfSVNPTEFURUQJKDE8PDIpCiAKKy8qIE1heCBudW1iZXIgb2YgRUVIIGZyZWV6ZXMgYWxsb3dlZCBiZWZvcmUgd2UgY29uc2lkZXIgdGhlIGRldmljZQorICogdG8gYmUgcGVybWFuZW50bHkgZGlzYWJsZWQuICovCisjZGVmaW5lIEVFSF9NQVhfQUxMT1dFRF9GUkVFWkVTIDUKKwogdm9pZCBfX2luaXQgZWVoX2luaXQodm9pZCk7CiB1bnNpZ25lZCBsb25nIGVlaF9jaGVja19mYWlsdXJlKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqdG9rZW4sCiAJCQkJdW5zaWduZWQgbG9uZyB2YWwpOwpAQCAtNTksMzYgKzYxLDE0IEBACiAgKiBlZWhfcmVtb3ZlX2RldmljZSAtIHVuZG8gRUVIIHNldHVwIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKICAqIEBkZXY6IHBjaSBkZXZpY2UgdG8gYmUgcmVtb3ZlZAogICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkIGZyb20gYSBydW5uaW5nCi0gKiBzeXN0ZW0gKGUuZy4gYnkgaG90cGx1ZyBvciBkbHBhcikuCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbQorICogYSBydW5uaW5nIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4gIEl0IHVucmVnaXN0ZXJzCisgKiB0aGUgUENJIGRldmljZSBmcm9tIHRoZSBFRUggc3Vic3lzdGVtLiAgSS9PIGVycm9ycyBhZmZlY3RpbmcKKyAqIHRoaXMgZGV2aWNlIHdpbGwgbm8gbG9uZ2VyIGJlIGRldGVjdGVkIGFmdGVyIHRoaXMgY2FsbDsgdGh1cywKKyAqIGkvbyBlcnJvcnMgYWZmZWN0aW5nIHRoaXMgc2xvdCBtYXkgbGVhdmUgdGhpcyBkZXZpY2UgdW51c2FibGUuCiAgKi8KIHZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CiAKLSNkZWZpbmUgRUVIX0RJU0FCTEUJCTAKLSNkZWZpbmUgRUVIX0VOQUJMRQkJMQotI2RlZmluZSBFRUhfUkVMRUFTRV9MT0FEU1RPUkUJMgotI2RlZmluZSBFRUhfUkVMRUFTRV9ETUEJCTMKLQotLyoqCi0gKiBOb3RpZmllciBldmVudCBmbGFncy4KLSAqLwotI2RlZmluZSBFRUhfTk9USUZZX0ZSRUVaRSAgMQotCi0vKiogRUVIIGV2ZW50IC0tIHN0cnVjdHVyZSBob2xkaW5nIHBjaSBzbG90IGRhdGEgdGhhdCBkZXNjcmliZXMKLSAqICBhIGNoYW5nZSBpbiB0aGUgaXNvbGF0aW9uIHN0YXR1cyBvZiBhIFBDSSBzbG90LiAgQSBwb2ludGVyCi0gKiAgdG8gdGhpcyBzdHJ1Y3QgaXMgcGFzc2VkIGFzIHRoZSBkYXRhIHBvaW50ZXIgaW4gYSBub3RpZnkgY2FsbGJhY2suCi0gKi8KLXN0cnVjdCBlZWhfZXZlbnQgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgIGxpc3Q7Ci0Jc3RydWN0IHBjaV9kZXYgICAgICAgKmRldjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgICAqZG47Ci0JaW50ICAgICAgICAgICAgICAgICAgcmVzZXRfc3RhdGU7Ci19OwotCi0vKiogUmVnaXN0ZXIgdG8gZmluZCBvdXQgYWJvdXQgRUVIIGV2ZW50cy4gKi8KLWludCBlZWhfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Ci1pbnQgZWVoX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Ci0KIC8qKgogICogRUVIX1BPU1NJQkxFX0VSUk9SKCkgLS0gdGVzdCBmb3IgcG9zc2libGUgTU1JTyBmYWlsdXJlLgogICoKQEAgLTEyOSw3ICsxMDksNyBAQAogI2RlZmluZSBFRUhfSU9fRVJST1JfVkFMVUUoc2l6ZSkgKC0xVUwpCiAjZW5kaWYgLyogQ09ORklHX0VFSCAqLwogCi0vKiAKKy8qCiAgKiBNTUlPIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyB3aXRoIEVFSCBzdXBwb3J0LgogICovCiBzdGF0aWMgaW5saW5lIHU4IGVlaF9yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXUuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCmluZGV4IDRjMThhNWMuLjFhN2UwYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oCkBAIC0xNCw3ICsxNCw3IEBACiAjZGVmaW5lIF9QUEM2NF9NTVVfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+IC8qIGZvciBBU01fQ09OU1QgKi8KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qCkBAIC0yMjQsOSArMjI0LDEyIEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgcHN0YXJ0LCB1bnNpZ25lZCBsb25nIG1vZGUsCiAJCQkgICAgIGludCBwc2l6ZSk7CiAKK2V4dGVybiB2b2lkIGh0YWJfaW5pdGlhbGl6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIGh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbmF0aXZlKHZvaWQpOwogZXh0ZXJuIHZvaWQgaHB0ZV9pbml0X2xwYXIodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfaVNlcmllcyh2b2lkKTsKK2V4dGVybiB2b2lkIG1tX2luaXRfcHBjNjQodm9pZCk7CiAKIGV4dGVybiBsb25nIHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhLCB1bnNpZ25lZCBsb25nIHBycG4sCkBAIC0yNDUsNiArMjQ4LDcgQEAKIAogZXh0ZXJuIHZvaWQgc3RhYnNfYWxsb2Modm9pZCk7CiBleHRlcm4gdm9pZCBzbGJfaW5pdGlhbGl6ZSh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YWJfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIHN0YWIpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmgKaW5kZXggODBhNzA4ZS4uNTQ5NThkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmgKQEAgLTgsMTUgKzgsMTQgQEAKICNkZWZpbmUgX0FTTV9NTVpPTkVfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAotLyogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgorLyoKKyAqIGdlbmVyaWMgbm9uLWxpbmVhciBtZW1vcnkgc3VwcG9ydDoKICAqCiAgKiAxKSB3ZSB3aWxsIG5vdCBzcGxpdCBtZW1vcnkgaW50byBtb3JlIGNodW5rcyB0aGFuIHdpbGwgZml0IGludG8gdGhlCiAgKiAgICBmbGFncyBmaWVsZCBvZiB0aGUgc3RydWN0IHBhZ2UKICAqLwogCi0KICNpZmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogCiBleHRlcm4gc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbXTsKQEAgLTMwLDM2ICsyOSwxMSBAQAogICovCiAKIGV4dGVybiBpbnQgbnVtYV9jcHVfbG9va3VwX3RhYmxlW107Ci1leHRlcm4gY2hhciAqbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlOwogZXh0ZXJuIGNwdW1hc2tfdCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW107Ci1leHRlcm4gaW50IG5yX2NwdXNfaW5fbm9kZVtdOwotCi0vKiAxNk1CIHJlZ2lvbnMgKi8KLSNkZWZpbmUgTUVNT1JZX0lOQ1JFTUVOVF9TSElGVCAyNAotI2RlZmluZSBNRU1PUllfSU5DUkVNRU5UICgxVUwgPDwgTUVNT1JZX0lOQ1JFTUVOVF9TSElGVCkKLQotLyogTlVNQSBkZWJ1Z2dpbmcsIHdpbGwgbm90IHdvcmsgb24gYSBETFBBUiBtYWNoaW5lICovCi0jdW5kZWYgREVCVUdfTlVNQQotCi1zdGF0aWMgaW5saW5lIGludCBwYV90b19uaWQodW5zaWduZWQgbG9uZyBwYSkKLXsKLQlpbnQgbmlkOwotCi0JbmlkID0gbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW3BhID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdOwotCi0jaWZkZWYgREVCVUdfTlVNQQotCS8qIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHBhc3NlZCBpbiBpcyBub3QgaW4gdGhlIG1hcCBmb3IgdGhlIHN5c3RlbSAqLwotCWlmIChuaWQgPT0gLTEpIHsKLQkJcHJpbnRrKCJiYWQgYWRkcmVzczogJWx4XG4iLCBwYSk7Ci0JCUJVRygpOwotCX0KKyNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1heF9wZm47CiAjZW5kaWYKIAotCXJldHVybiBuaWQ7Ci19Ci0KLSNkZWZpbmUgbm9kZV9sb2NhbG5yKHBmbiwgbmlkKQkoKHBmbikgLSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCi0KIC8qCiAgKiBGb2xsb3dpbmcgYXJlIG1hY3JvcyB0aGF0IGVhY2ggbnVtYSBpbXBsbWVudGF0aW9uIG11c3QgZGVmaW5lLgogICovCkBAIC02NywzOSArNDEsMTAgQEAKICNkZWZpbmUgbm9kZV9zdGFydF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfc3RhcnRfcGZuKQogI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKQkoTk9ERV9EQVRBKG5pZCktPm5vZGVfZW5kX3BmbikKIAotI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KLQotLyoKLSAqIEdpdmVuIGEga2VybmVsIGFkZHJlc3MsIGZpbmQgdGhlIGhvbWUgbm9kZSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCi0gKi8KLSNkZWZpbmUga3ZhZGRyX3RvX25pZChrYWRkcikJcGFfdG9fbmlkKF9fcGEoa2FkZHIpKQotCi0jZGVmaW5lIHBmbl90b19uaWQocGZuKQkJcGFfdG9fbmlkKCh1bnNpZ25lZCBsb25nKShwZm4pIDw8IFBBR0VfU0hJRlQpCi0KLS8qIFdyaXR0ZW4gdGhpcyB3YXkgdG8gYXZvaWQgZXZhbHVhdGluZyBhcmd1bWVudHMgdHdpY2UgKi8KLSNkZWZpbmUgZGlzY29udGlnbWVtX3Bmbl90b19wYWdlKHBmbikgXAotKHsgXAotCXVuc2lnbmVkIGxvbmcgX190bXAgPSBwZm47IFwKLQkoTk9ERV9EQVRBKHBmbl90b19uaWQoX190bXApKS0+bm9kZV9tZW1fbWFwICsgXAotCSBub2RlX2xvY2FsbnIoX190bXAsIHBmbl90b19uaWQoX190bXApKSk7IFwKLX0pCi0KLSNkZWZpbmUgZGlzY29udGlnbWVtX3BhZ2VfdG9fcGZuKHApIFwKLSh7IFwKLQlzdHJ1Y3QgcGFnZSAqX190bXAgPSBwOyBcCi0JKCgoX190bXApIC0gcGFnZV96b25lKF9fdG1wKS0+em9uZV9tZW1fbWFwKSArIFwKLQkgcGFnZV96b25lKF9fdG1wKS0+em9uZV9zdGFydF9wZm4pOyBcCi19KQotCi0vKiBYWFggZml4IGZvciBkaXNjb250aWd1b3VzIHBoeXNpY2FsIG1lbW9yeSAqLwotI2RlZmluZSBkaXNjb250aWdtZW1fcGZuX3ZhbGlkKHBmbikJCSgocGZuKSA8IG51bV9waHlzcGFnZXMpCi0KLSNlbmRpZiAvKiBDT05GSUdfRElTQ09OVElHTUVNICovCi0KICNlbmRpZiAvKiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUyAqLwogCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECi0jZGVmaW5lIGVhcmx5X3Bmbl90b19uaWQocGZuKSAgcGFfdG9fbmlkKCgodW5zaWduZWQgbG9uZylwZm4pIDw8IFBBR0VfU0hJRlQpCitleHRlcm4gaW50IF9faW5pdCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKTsKICNlbmRpZgogCiAjZW5kaWYgLyogX0FTTV9NTVpPTkVfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaAppbmRleCA4MmNlMTg3Li4zZWZjMzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCkBAIC0xMSw3ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+IC8qIGZvciBBU01fQ09OU1QgKi8KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAvKgogICogV2Ugc3VwcG9ydCBlaXRoZXIgNGsgb3IgNjRrIHNvZnR3YXJlIHBhZ2Ugc2l6ZS4gV2hlbiB1c2luZyA2NGsgcGFnZXMKQEAgLTI3OSwxMSArMjc5LDYgQEAKIAogI2RlZmluZSBfX3ZhKHgpICgodm9pZCAqKSgodW5zaWduZWQgbG9uZykoeCkgKyBLRVJORUxCQVNFKSkKIAotI2lmZGVmIENPTkZJR19ESVNDT05USUdNRU0KLSNkZWZpbmUgcGFnZV90b19wZm4ocGFnZSkJZGlzY29udGlnbWVtX3BhZ2VfdG9fcGZuKHBhZ2UpCi0jZGVmaW5lIHBmbl90b19wYWdlKHBmbikJZGlzY29udGlnbWVtX3Bmbl90b19wYWdlKHBmbikKLSNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCWRpc2NvbnRpZ21lbV9wZm5fdmFsaWQocGZuKQotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KICNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQkobWVtX21hcCArIChwZm4pKQogI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQkoKHVuc2lnbmVkIGxvbmcpKChwYWdlKSAtIG1lbV9tYXApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGNpLWJyaWRnZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGNpLWJyaWRnZS5oCmluZGV4IDYwY2Y4YzguLmVmYmRhZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmgKQEAgLTYzLDcgKzYzLDYgQEAKIAlpbnQJZGV2Zm47CQkJLyogZm9yIHBjaSBkZXZpY2VzICovCiAJaW50CWVlaF9tb2RlOwkJLyogU2VlIGVlaC5oIGZvciBwb3NzaWJsZSBFRUhfTU9ERXMgKi8KIAlpbnQJZWVoX2NvbmZpZ19hZGRyOwotCWludAllZWhfY2FwYWJsZTsJCS8qIGZyb20gZmlybXdhcmUgKi8KIAlpbnQgCWVlaF9jaGVja19jb3VudDsJLyogIyB0aW1lcyBkcml2ZXIgaWdub3JlZCBlcnJvciAqLwogCWludCAJZWVoX2ZyZWV6ZV9jb3VudDsJLyogIyB0aW1lcyB0aGlzIGRldmljZSBmcm96ZSB1cC4gKi8KIAlpbnQJZWVoX2lzX2JyaWRnZTsJCS8qIGRldmljZSBpcyBwY2ktdG8tcGNpIGJyaWRnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCmluZGV4IDk4ZGEwZTQuLmRjZjM2MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKQEAgLTEwLDggKzEwLDggQEAKIAogI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCiAjZGVmaW5lIFBURV9DQUNIRV9OVU0JMAotI2RlZmluZSBQTURfQ0FDSEVfTlVNCTAKLSNkZWZpbmUgUEdEX0NBQ0hFX05VTQkxCisjZGVmaW5lIFBNRF9DQUNIRV9OVU0JMQorI2RlZmluZSBQR0RfQ0FDSEVfTlVNCTIKICNlbHNlCiAjZGVmaW5lIFBURV9DQUNIRV9OVU0JMAogI2RlZmluZSBQTURfQ0FDSEVfTlVNCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3Byb20uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3Byb20uaAppbmRleCA3NmJiMDI2Li5kZGZlMTg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oCkBAIC0yMDQsNiArMjA0LDggQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHByb21faW5pdCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAogCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgZmluaXNoX2RldmljZV90cmVlKHZvaWQpOworZXh0ZXJuIHZvaWQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9kZXZ0cmVlKHZvaWQgKik7CiBleHRlcm4gaW50IGRldmljZV9pc19jb21wYXRpYmxlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCBtYWNoaW5lX2lzX2NvbXBhdGlibGUoY29uc3QgY2hhciAqY29tcGF0KTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICpnZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDMyZGY3ZGQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvc2lnbmFsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotI2lmbmRlZiBfQVNNUFBDNjRfU0lHTkFMX0gKLSNkZWZpbmUgX0FTTVBQQzY0X1NJR05BTF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KLQotLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KLXN0cnVjdCBzaWdpbmZvOwotCi0jZGVmaW5lIF9OU0lHCQk2NAotI2RlZmluZSBfTlNJR19CUFcJNjQKLSNkZWZpbmUgX05TSUdfV09SRFMJKF9OU0lHIC8gX05TSUdfQlBXKQotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwkJLyogYXQgbGVhc3QgMzIgYml0cyAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzaWdbX05TSUdfV09SRFNdOwotfSBzaWdzZXRfdDsKLQotI2RlZmluZSBTSUdIVVAJCSAxCi0jZGVmaW5lIFNJR0lOVAkJIDIKLSNkZWZpbmUgU0lHUVVJVAkJIDMKLSNkZWZpbmUgU0lHSUxMCQkgNAotI2RlZmluZSBTSUdUUkFQCQkgNQotI2RlZmluZSBTSUdBQlJUCQkgNgotI2RlZmluZSBTSUdJT1QJCSA2Ci0jZGVmaW5lIFNJR0JVUwkJIDcKLSNkZWZpbmUgU0lHRlBFCQkgOAotI2RlZmluZSBTSUdLSUxMCQkgOQotI2RlZmluZSBTSUdVU1IxCQkxMAotI2RlZmluZSBTSUdTRUdWCQkxMQotI2RlZmluZSBTSUdVU1IyCQkxMgotI2RlZmluZSBTSUdQSVBFCQkxMwotI2RlZmluZSBTSUdBTFJNCQkxNAotI2RlZmluZSBTSUdURVJNCQkxNQotI2RlZmluZSBTSUdTVEtGTFQJMTYKLSNkZWZpbmUgU0lHQ0hMRAkJMTcKLSNkZWZpbmUgU0lHQ09OVAkJMTgKLSNkZWZpbmUgU0lHU1RPUAkJMTkKLSNkZWZpbmUgU0lHVFNUUAkJMjAKLSNkZWZpbmUgU0lHVFRJTgkJMjEKLSNkZWZpbmUgU0lHVFRPVQkJMjIKLSNkZWZpbmUgU0lHVVJHCQkyMwotI2RlZmluZSBTSUdYQ1BVCQkyNAotI2RlZmluZSBTSUdYRlNaCQkyNQotI2RlZmluZSBTSUdWVEFMUk0JMjYKLSNkZWZpbmUgU0lHUFJPRgkJMjcKLSNkZWZpbmUgU0lHV0lOQ0gJMjgKLSNkZWZpbmUgU0lHSU8JCTI5Ci0jZGVmaW5lIFNJR1BPTEwJCVNJR0lPCi0vKgotI2RlZmluZSBTSUdMT1NUCQkyOQotKi8KLSNkZWZpbmUgU0lHUFdSCQkzMAotI2RlZmluZSBTSUdTWVMJCTMxCi0jZGVmaW5lCVNJR1VOVVNFRAkzMQotCi0vKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLwotI2RlZmluZSBTSUdSVE1JTgkzMgotI2RlZmluZSBTSUdSVE1BWAlfTlNJRwotCi0vKgotICogU0FfRkxBR1MgdmFsdWVzOgotICoKLSAqIFNBX09OU1RBQ0sgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQsIGJ1dCB3aWxsIGFsbG93IHNpZ2FsdHN0YWNrKDIpLgotICogU0FfSU5URVJSVVBUIGlzIGEgbm8tb3AsIGJ1dCBsZWZ0IGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMuIFVzZSB0aGUKLSAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQotICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCi0gKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCi0gKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KLSAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgotICoKLSAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKLSAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KLSAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMXUKLSNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDJ1Ci0jZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNHUKLSNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwdQotI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDB1Ci0jZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMHUKLSNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDB1Ci0KLSNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKLSNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLSNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDB1IC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KLQotI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwdQotCi0vKiAKLSAqIHNpZ2FsdHN0YWNrIGNvbnRyb2xzCi0gKi8KLSNkZWZpbmUgU1NfT05TVEFDSwkxCi0jZGVmaW5lIFNTX0RJU0FCTEUJMgotCi0jZGVmaW5lIE1JTlNJR1NUS1NaCTIwNDgKLSNkZWZpbmUgU0lHU1RLU1oJODE5MgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+Ci0KLXN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCW9sZF9zaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci19OwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0JX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotfTsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgX191c2VyICpzc19zcDsKLQlpbnQgc3NfZmxhZ3M7Ci0Jc2l6ZV90IHNzX3NpemU7Ci19IHN0YWNrX3Q7Ci0KLXN0cnVjdCBwdF9yZWdzOwotc3RydWN0IHRpbWVzcGVjOwotZXh0ZXJuIGludCBkb19zaWduYWwoc2lnc2V0X3QgKm9sZHNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBkb19zaWduYWwzMihzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0jZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9BU01QUEM2NF9TSUdOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW0uaAppbmRleCAwY2RkNjZjLi5iZjlhNmFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW0uaApAQCAtMTQ5LDYgKzE0OSw4IEBACiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICogX3N3aXRjaChzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqcHJldiwKIAkJCQkgICAgc3RydWN0IHRocmVhZF9zdHJ1Y3QgKm5leHQpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7CisKIGV4dGVybiBpbnQgcG93ZXJzYXZlX25hcDsJLyogc2V0IGlmIG5hcCBtb2RlIGNhbiBiZSB1c2VkIGluIGlkbGUgbG9vcCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvc3lzdGVtY2ZnLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW1jZmcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI4NmI1My4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW1jZmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSNpZm5kZWYgX1NZU1RFTUNGR19ICi0jZGVmaW5lIF9TWVNURU1DRkdfSAotCi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMiBQZXRlciBCZXJnbmVyIDxiZXJnbmVyQHZuZXQuaWJtLmNvbT4sIElCTQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotLyogQ2hhbmdlIEFjdGl2aXR5OgotICogMjAwMi8wOS8zMCA6IGJlcmduZXIgIDogQ3JlYXRlZAotICogRW5kIENoYW5nZSBBY3Rpdml0eSAKLSAqLwotCi0vKgotICogSWYgdGhlIG1ham9yIHZlcnNpb24gY2hhbmdlcyB3ZSBhcmUgaW5jb21wYXRpYmxlLgotICogTWlub3IgdmVyc2lvbiBjaGFuZ2VzIGFyZSBhIGhpbnQuCi0gKi8KLSNkZWZpbmUgU1lTVEVNQ0ZHX01BSk9SIDEKLSNkZWZpbmUgU1lTVEVNQ0ZHX01JTk9SIDEKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotCi0jZGVmaW5lIFNZU0NBTExfTUFQX1NJWkUgICAgICAoKF9fTlJfc3lzY2FsbHMgKyAzMSkgLyAzMikKLQotc3RydWN0IHN5c3RlbWNmZyB7Ci0JX191OCAgZXllX2NhdGNoZXJbMTZdOwkJLyogRXllY2F0Y2hlcjogU1lTVEVNQ0ZHOlBQQzY0CTB4MDAgKi8KLQlzdHJ1Y3QgewkJCS8qIFN5c3RlbWNmZyB2ZXJzaW9uIG51bWJlcnMJICAgICAqLwotCQlfX3UzMiBtYWpvcjsJCS8qIE1ham9yIG51bWJlcgkJCTB4MTAgKi8KLQkJX191MzIgbWlub3I7CQkvKiBNaW5vciBudW1iZXIJCQkweDE0ICovCi0JfSB2ZXJzaW9uOwotCi0JX191MzIgcGxhdGZvcm07CQkJLyogUGxhdGZvcm0gZmxhZ3MJCTB4MTggKi8KLQlfX3UzMiBwcm9jZXNzb3I7CQkvKiBQcm9jZXNzb3IgdHlwZQkJMHgxQyAqLwotCV9fdTY0IHByb2Nlc3NvckNvdW50OwkJLyogIyBvZiBwaHlzaWNhbCBwcm9jZXNzb3JzCTB4MjAgKi8KLQlfX3U2NCBwaHlzaWNhbE1lbW9yeVNpemU7CS8qIFNpemUgb2YgcmVhbCBtZW1vcnkoQikJMHgyOCAqLwotCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCi0JX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KLQlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLwotCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCi0JX191NjQgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCi0JX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KLQlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCi0JLyogbmV4dCBmb3VyIGFyZSBubyBsb25nZXIgdXNlZCBleGNlcHQgdG8gYmUgZXhwb3J0ZWQgdG8gL3Byb2MgKi8KLQlfX3UzMiBkY2FjaGVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgc2l6ZQkJMHg2MCAqLwotCV9fdTMyIGRjYWNoZV9saW5lX3NpemU7CQkvKiBMMSBkLWNhY2hlIGxpbmUgc2l6ZQkJMHg2NCAqLwotCV9fdTMyIGljYWNoZV9zaXplOwkJLyogTDEgaS1jYWNoZSBzaXplCQkweDY4ICovCi0JX191MzIgaWNhY2hlX2xpbmVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgbGluZSBzaXplCQkweDZDICovCi0gICAJX191MzIgc3lzY2FsbF9tYXBfNjRbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBhdmFpbGFibGUgc3lzY2FsbHMgMHg3MCAqLwotICAgCV9fdTMyIHN5c2NhbGxfbWFwXzMyW1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2YgYXZhaWxhYmxlIHN5c2NhbGxzICovCi19OwotCi0jaWZkZWYgX19LRVJORUxfXwotZXh0ZXJuIHN0cnVjdCBzeXN0ZW1jZmcgKnN5c3RlbWNmZzsKLSNlbmRpZgotCi0jZW5kaWYgLyogX19BU1NFTUJMWV9fICovCi0KLSNlbmRpZiAvKiBfU1lTVEVNQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaAppbmRleCA4NWM0MjdlLi4zNTZlMGU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oCkBAIC0xMSw4ICsxMSw2IEBACiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjZGVmaW5lIExBU1RfREVWSUNFX1ZFQ1RPUgkJMjMyCi0jZGVmaW5lIE1TSV9ERVNUX01PREUJCQlNU0lfTE9HSUNBTF9NT0RFCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQkxMgotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkJCWxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCTEyCiAKICNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAppbmRleCBjNTdjZTQwLi5iOWZiMjE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCkBAIC0xMzUsNSArMTM1LDExIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCXg4Nl9jcHVfdG9fYXBpY2lkW2NwdV0KKyNlbHNlCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9pZAorI2VuZGlmCisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAppbmRleCBjNTc2OWM2NS4uYWQxYTIyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCkBAIC0zMiw2ICszMiw4IEBACiAgKi8KICNkZWZpbmUgQ05fSURYX1BST0MJCQkweDEKICNkZWZpbmUgQ05fVkFMX1BST0MJCQkweDEKKyNkZWZpbmUgQ05fSURYX0NJRlMJCQkweDIKKyNkZWZpbmUgQ05fVkFMX0NJRlMgICAgICAgICAgICAgICAgICAgICAweDEKIAogI2RlZmluZSBDTl9ORVRMSU5LX1VTRVJTCQkxCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDc3YWU1NWQuLmFjOGIyNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMTMyOSw3ICsxMzI5LDggQEAKIGV4dGVybiBpbnQgaWRlcHJvYmVfaW5pdCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgaWRlX3NjYW5fcGNpYnVzKGludCBzY2FuX2RpcmVjdGlvbikgX19pbml0OwotZXh0ZXJuIGludCBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKK2V4dGVybiBpbnQgX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyLCBzdHJ1Y3QgbW9kdWxlICpvd25lcik7CisjZGVmaW5lIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKGQpIF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCwgVEhJU19NT0RVTEUpCiBleHRlcm4gdm9pZCBpZGVfcGNpX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIpOwogdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zICosIGludCwgYXRhX2luZGV4X3QgKik7CiBleHRlcm4gdm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggZDIxYzMwNS4uZmUyNmQ0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMjEsNiArMjEsOCBAQAogI2lmbmRlZiBfTElOVVhfSUZfRVRIRVJfSAogI2RlZmluZSBfTElOVVhfSUZfRVRIRVJfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqCUlFRUUgODAyLjMgRXRoZXJuZXQgbWFnaWMgY29uc3RhbnRzLiAgVGhlIGZyYW1lIHNpemVzIG9taXQgdGhlIHByZWFtYmxlCiAgKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLiAKQEAgLTEwMCw3ICsxMDIsNyBAQAogc3RydWN0IGV0aGhkciB7CiAJdW5zaWduZWQgY2hhcgloX2Rlc3RbRVRIX0FMRU5dOwkvKiBkZXN0aW5hdGlvbiBldGggYWRkcgkqLwogCXVuc2lnbmVkIGNoYXIJaF9zb3VyY2VbRVRIX0FMRU5dOwkvKiBzb3VyY2UgZXRoZXIgYWRkcgkqLwotCXVuc2lnbmVkIHNob3J0CWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLworCV9fYmUxNgkJaF9wcm90bzsJCS8qIHBhY2tldCB0eXBlIElEIGZpZWxkCSovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saWJhdGEuaCBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKaW5kZXggZThjOTNiMS4uYWQ1OTk2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saWJhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpAQCAtNDA0LDYgKzQwNSw3IEBACiAJdW5zaWduZWQgbG9uZwkJbXdkbWFfbWFzazsKIAl1bnNpZ25lZCBsb25nCQl1ZG1hX21hc2s7CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgKnBvcnRfb3BzOworCXZvaWQgCQkJKnByaXZhdGVfZGF0YTsKIH07CiAKIHN0cnVjdCBhdGFfdGltaW5nIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IGM2ZWZjZTQuLjkzNmY4YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtOTI3LDYgKzkyNywxMyBAQAogZXh0ZXJuIGludAkJd2VpZ2h0X3A7CiBleHRlcm4gaW50CQluZXRkZXZfc2V0X21hc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyKTsKIGV4dGVybiBpbnQgc2tiX2NoZWNrc3VtX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlud2FyZCk7CisjaWZkZWYgQ09ORklHX0JVRworZXh0ZXJuIHZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7Cit9CisjZW5kaWYKIC8qIHJ4IHNrYiB0aW1lc3RhbXBzICovCiBleHRlcm4gdm9pZAkJbmV0X2VuYWJsZV90aW1lc3RhbXAodm9pZCk7CiBleHRlcm4gdm9pZAkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCmluZGV4IDg1NzEyNmEuLjQ4NzdlMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKQEAgLTQ3LDE0ICs0NywxNSBAQAogCQkJCU9TQ19QQ0lfRVhQUkVTU19DQVBfU1RSVUNUVVJFX0NPTlRST0wpCiAKICNpZmRlZiBDT05GSUdfQUNQSQotZXh0ZXJuIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQodTMyIGZsYWdzKTsKK2V4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKTsKIGV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX3N1cHBvcnRfc2V0KHUzMiBmbGFncyk7CiAjZWxzZQogI2lmICFkZWZpbmVkKGFjcGlfc3RhdHVzKQogdHlwZWRlZiB1MzIgCQlhY3BpX3N0YXR1czsKICNkZWZpbmUgQUVfRVJST1IgICAgICAJKGFjcGlfc3RhdHVzKSAoMHgwMDAxKQogI2VuZGlmICAgIAotc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KHUzMiBmbGFncykge3JldHVybiBBRV9FUlJPUjt9CitzdGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIHBjaV9vc2NfY29udHJvbF9zZXQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZmxhZ3MpCit7cmV0dXJuIEFFX0VSUk9SO30KIHN0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19zdXBwb3J0X3NldCh1MzIgZmxhZ3MpIHtyZXR1cm4gQUVfRVJST1I7fSAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzNTk2YWM5Li5kZTY5MGNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTIzNiw3ICsyMzYsNiBAQAogc3RydWN0IHBjaV9kcml2ZXIgewogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAljaGFyICpuYW1lOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZF90YWJsZTsJLyogbXVzdCBiZSBub24tTlVMTCBmb3IgcHJvYmUgdG8gYmUgY2FsbGVkICovCiAJaW50ICAoKnByb2JlKSAgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCk7CS8qIE5ldyBkZXZpY2UgaW5zZXJ0ZWQgKi8KIAl2b2lkICgqcmVtb3ZlKSAoc3RydWN0IHBjaV9kZXYgKmRldik7CS8qIERldmljZSByZW1vdmVkIChOVUxMIGlmIG5vdCBhIGhvdC1wbHVnIGNhcGFibGUgZHJpdmVyKSAqLwpAQCAtMzM4LDYgKzMzNyw3IEBACiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfZGV2aWNlX3JldmVyc2UgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKIHN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zbG90ICh1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pOwogaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOworaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggcG9zLCBpbnQgY2FwKTsKIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCk7CiBzdHJ1Y3QgcGNpX2J1cyAqIHBjaV9maW5kX25leHRfYnVzKGNvbnN0IHN0cnVjdCBwY2lfYnVzICpmcm9tKTsKIApAQCAtNDMyLDggKzQzMiwxMyBAQAogCQkJICAgdm9pZCAqYWxpZ25mX2RhdGEpOwogdm9pZCBwY2lfZW5hYmxlX2JyaWRnZXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7CiAKLS8qIE5ldy1zdHlsZSBwcm9iaW5nIHN1cHBvcnRpbmcgaG90LXBsdWdnYWJsZSBkZXZpY2VzICovCi1pbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqKTsKKy8qIFByb3BlciBwcm9iaW5nIHN1cHBvcnRpbmcgaG90LXBsdWdnYWJsZSBkZXZpY2VzICovCitpbnQgX19wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICosIHN0cnVjdCBtb2R1bGUgKik7CitzdGF0aWMgaW5saW5lIGludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIpCit7CisJcmV0dXJuIF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIsIFRISVNfTU9EVUxFKTsKK30KKwogdm9pZCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7CiB2b2lkIHBjaV9yZW1vdmVfYmVoaW5kX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqKTsKIHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZGV2X2RyaXZlcihjb25zdCBzdHJ1Y3QgcGNpX2RldiAqKTsKQEAgLTU0Nyw5ICs1NTIsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikgeyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKSB7IHJldHVybiAtRUlPOyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfYXNzaWduX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBpKSB7IHJldHVybiAtRUJVU1k7fQorc3RhdGljIGlubGluZSBpbnQgX19wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKSB7IHJldHVybiAwO30KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRydikgeyByZXR1cm4gMDt9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCkge3JldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvc3QsIGludCBjYXApIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKSB7cmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9tYXRjaF9kZXZpY2UoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywgY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikgeyByZXR1cm4gTlVMTDsgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAppbmRleCAxYTE2NWI3Li4xN2UzMzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKQEAgLTQzLDQgKzQzLDE5IEBACiBleHRlcm4gaW50IHBsYXRmb3JtX2RldmljZV9hZGQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBleHRlcm4gdm9pZCBwbGF0Zm9ybV9kZXZpY2VfcHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHsKKwlpbnQgKCpwcm9iZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwlpbnQgKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKwlpbnQgKCpyZXN1bWUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKworZXh0ZXJuIGludCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqKTsKK2V4dGVybiB2b2lkIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CisKKyNkZWZpbmUgcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2RldikJZGV2X2dldF9kcnZkYXRhKCYoX2RldiktPmRldikKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldixkYXRhKQlkZXZfc2V0X2RydmRhdGEoJihfZGV2KS0+ZGV2LCAoZGF0YSkpCisKICNlbmRpZiAvKiBfUExBVEZPUk1fREVWSUNFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA4MzAxMDIzLi4wYThlYThiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTEyMzYsOCArMTIzNiw3IEBACiBleHRlcm4gaW50CSAgICAgICBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSwKIAkJCQkJICAgICAgIGludCBvZmZzZXQsIHN0cnVjdCBpb3ZlYyAqdG8sCiAJCQkJCSAgICAgICBpbnQgc2l6ZSk7Ci1leHRlcm4gaW50CSAgICAgICBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhjb25zdAotCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IsCitleHRlcm4gaW50CSAgICAgICBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkJCWludCBobGVuLAogCQkJCQkJCXN0cnVjdCBpb3ZlYyAqaW92KTsKIGV4dGVybiB2b2lkCSAgICAgICBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTMwNSw2ICsxMzA0LDMwIEBACiAKIGV4dGVybiB2b2lkIF9fbmV0X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorZXh0ZXJuIHVuc2lnbmVkIGludCBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworLyoqCisgKglza2JfY2hlY2tzdW1fY29tcGxldGUgLSBDYWxjdWxhdGUgY2hlY2tzdW0gb2YgYW4gZW50aXJlIHBhY2tldAorICoJQHNrYjogcGFja2V0IHRvIHByb2Nlc3MKKyAqCisgKglUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGNoZWNrc3VtIG92ZXIgdGhlIGVudGlyZSBwYWNrZXQgcGx1cworICoJdGhlIHZhbHVlIG9mIHNrYi0+Y3N1bS4gIFRoZSBsYXR0ZXIgY2FuIGJlIHVzZWQgdG8gc3VwcGx5IHRoZQorICoJY2hlY2tzdW0gb2YgYSBwc2V1ZG8gaGVhZGVyIGFzIHVzZWQgYnkgVENQL1VEUC4gIEl0IHJldHVybnMgdGhlCisgKgljaGVja3N1bS4KKyAqCisgKglGb3IgcHJvdG9jb2xzIHRoYXQgY29udGFpbiBjb21wbGV0ZSBjaGVja3N1bXMgc3VjaCBhcyBJQ01QL1RDUC9VRFAsCisgKgl0aGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGF0IGNoZWNrc3VtIG9uIHJlY2VpdmVkCisgKglwYWNrZXRzLiAgSW4gdGhhdCBjYXNlIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHplcm8gaWYgdGhlCisgKgljaGVja3N1bSBpcyBjb3JyZWN0LiAgSW4gcGFydGljdWxhciwgdGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB6ZXJvCisgKglpZiBza2ItPmlwX3N1bW1lZCBpcyBDSEVDS1NVTV9VTk5FQ0VTU0FSWSB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUKKyAqCWhhcmR3YXJlIGhhcyBhbHJlYWR5IHZlcmlmaWVkIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgY2hlY2tzdW0uCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAmJgorCQlfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOworfQorCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogc3RhdGljIGlubGluZSB2b2lkIG5mX2Nvbm50cmFja19wdXQoc3RydWN0IG5mX2Nvbm50cmFjayAqbmZjdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDIyY2Y1ZTEuLmFiMjc5MWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMzkwLDYgKzM5MCw3IEBACiAJTkVUX1RDUF9CSUNfQkVUQT0xMDgsCiAJTkVUX0lQVjRfSUNNUF9FUlJPUlNfVVNFX0lOQk9VTkRfSUZBRERSPTEwOSwKIAlORVRfVENQX0NPTkdfQ09OVFJPTD0xMTAsCisJTkVUX1RDUF9BQkM9MTExLAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCBhYzRjYTQ0Li4wZTFkYTY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTMwNyw2ICszMDcsMjEgQEAKIAlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgZHVwbGljYXRlX3NhY2tbMV07IC8qIEQtU0FDSyBibG9jayAqLwogCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayBzZWxlY3RpdmVfYWNrc1s0XTsgLyogVGhlIFNBQ0tTIHRoZW1zZWx2ZXMqLwogCisJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHJlY3Zfc2Fja19jYWNoZVs0XTsKKworCS8qIGZyb20gU1RDUCwgcmV0cmFucyBxdWV1ZSBoaW50aW5nICovCisJc3RydWN0IHNrX2J1ZmYqIGxvc3Rfc2tiX2hpbnQ7CisKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2NvcmVib2FyZF9za2JfaGludDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmV0cmFuc21pdF9za2JfaGludDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZm9yd2FyZF9za2JfaGludDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZmFzdHBhdGhfc2tiX2hpbnQ7CisKKwlpbnQgICAgIGZhc3RwYXRoX2NudF9oaW50OworCWludCAgICAgbG9zdF9jbnRfaGludDsKKwlpbnQgICAgIHJldHJhbnNtaXRfY250X2hpbnQ7CisJaW50ICAgICBmb3J3YXJkX2NudF9oaW50OworCiAJX191MTYJYWR2bXNzOwkJLyogQWR2ZXJ0aXNlZCBNU1MJCQkqLwogCV9fdTE2CXByaW9yX3NzdGhyZXNoOyAvKiBzc3RocmVzaCBzYXZlZCBhdCByZWNvdmVyeSBzdGFydAkqLwogCV9fdTMyCWxvc3Rfb3V0OwkvKiBMb3N0IHBhY2tldHMJCQkqLwpAQCAtMzI2LDYgKzM0MSw3IEBACiAJX191MzIJc25kX3VwOwkJLyogVXJnZW50IHBvaW50ZXIJCSovCiAKIAlfX3UzMgl0b3RhbF9yZXRyYW5zOwkvKiBUb3RhbCByZXRyYW5zbWl0cyBmb3IgZW50aXJlIGNvbm5lY3Rpb24gKi8KKwlfX3UzMglieXRlc19hY2tlZDsJLyogQXBwcm9wcmlhdGUgQnl0ZSBDb3VudGluZyAtIFJGQzM0NjUgKi8KIAogCXVuc2lnbmVkIGludAkJa2VlcGFsaXZlX3RpbWU7CSAgLyogdGltZSBiZWZvcmUga2VlcCBhbGl2ZSB0YWtlcyBwbGFjZSAqLwogCXVuc2lnbmVkIGludAkJa2VlcGFsaXZlX2ludHZsOyAgLyogdGltZSBpbnRlcnZhbCBiZXR3ZWVuIGtlZXAgYWxpdmUgcHJvYmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zb2NrLmggYi9pbmNsdWRlL25ldC9zb2NrLmgKaW5kZXggZmYxM2M0Yy4uOTgyYjRlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3NvY2suaApAQCAtMTI0Nyw2ICsxMjQ3LDEyIEBACiAJCSAgICAgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmKHNrKS0+c2tfd3JpdGVfcXVldWUpOwlcCiAJCSAgICAgc2tiID0gc2tiLT5uZXh0KQogCisvKmZyb20gU1RDUCBmb3IgZmFzdCBTQUNLIFByb2Nlc3MqLworI2RlZmluZSBza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKQkJCVwKKwkJZm9yICg7IChza2IgIT0gKHNrKS0+c2tfc2VuZF9oZWFkKSAmJiAgICAgICAgICAgICAgICAgICBcCisJCSAgICAgKHNrYiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmKHNrKS0+c2tfd3JpdGVfcXVldWUpOwlcCisJCSAgICAgc2tiID0gc2tiLT5uZXh0KQorCiAvKgogICoJRGVmYXVsdCB3cml0ZSBwb2xpY3kgYXMgc2hvd24gdG8gdXNlciBzcGFjZSB2aWEgcG9sbC9zZWxlY3QvU0lHSU8KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBjMjQzMzljLi4wZjk4NDgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSA8bmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfdGltZXdhaXRfc29jay5oPgpAQCAtODgsMTAgKzg5LDEwIEBACiAJCQkJICovCiAKICNkZWZpbmUgVENQX1NZTl9SRVRSSUVTCSA1CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhY3RpdmUgb3BlbmluZyBhCi0JCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWludW11bQkqLworCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbmltdW0JKi8KIAogI2RlZmluZSBUQ1BfU1lOQUNLX1JFVFJJRVMgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgcGFzc2l2ZSBvcGVuaW5nIGEKLQkJCQkgKiBjb25uZWN0aW9uOiB+MTgwc2VjIGlzIFJGQyBtaW51bXVtCSovCisJCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWluaW11bQkqLwogCiAKICNkZWZpbmUgVENQX09SUEhBTl9SRVRSSUVTIDcJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IG9uIGFuIG9ycGhhbmVkCkBAIC0xNzksNyArMTgwLDcgQEAKIC8qIEZsYWdzIGluIHRwLT5ub25hZ2xlICovCiAjZGVmaW5lIFRDUF9OQUdMRV9PRkYJCTEJLyogTmFnbGUncyBhbGdvIGlzIGRpc2FibGVkICovCiAjZGVmaW5lIFRDUF9OQUdMRV9DT1JLCQkyCS8qIFNvY2tldCBpcyBjb3JrZWQJICAgICovCi0jZGVmaW5lIFRDUF9OQUdMRV9QVVNICQk0CS8qIENvcmsgaXMgb3ZlcnJpZGVuIGZvciBhbHJlYWR5IHF1ZXVlZCBkYXRhICovCisjZGVmaW5lIFRDUF9OQUdMRV9QVVNICQk0CS8qIENvcmsgaXMgb3ZlcnJpZGRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLwogCiBleHRlcm4gc3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93IHRjcF9kZWF0aF9yb3c7CiAKQEAgLTIxNyw2ICsyMTgsNyBAQAogZXh0ZXJuIGludCBzeXNjdGxfdGNwX25vbWV0cmljc19zYXZlOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX21vZGVyYXRlX3JjdmJ1ZjsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3I7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfYWJjOwogCiBleHRlcm4gYXRvbWljX3QgdGNwX21lbW9yeV9hbGxvY2F0ZWQ7CiBleHRlcm4gYXRvbWljX3QgdGNwX3NvY2tldHNfYWxsb2NhdGVkOwpAQCAtNTUwLDEzICs1NTIsMTMgQEAKIAogLyogVENQIHRpbWVzdGFtcHMgYXJlIG9ubHkgMzItYml0cywgdGhpcyBjYXVzZXMgYSBzbGlnaHQKICAqIGNvbXBsaWNhdGlvbiBvbiA2NC1iaXQgc3lzdGVtcyBzaW5jZSB3ZSBzdG9yZSBhIHNuYXBzaG90Ci0gKiBvZiBqaWZmaWVzIGluIHRoZSBidWZmZXIgY29udHJvbCBibG9ja3MgYmVsb3cuICBXZSBkZWNpZGVseQorICogb2YgamlmZmllcyBpbiB0aGUgYnVmZmVyIGNvbnRyb2wgYmxvY2tzIGJlbG93LiAgV2UgZGVjaWRlZGx5CiAgKiBvbmx5IHVzZSBvZiB0aGUgbG93IDMyLWJpdHMgb2YgamlmZmllcyBhbmQgaGlkZSB0aGUgdWdseQogICogY2FzdHMgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3JvLgogICovCiAjZGVmaW5lIHRjcF90aW1lX3N0YW1wCQkoKF9fdTMyKShqaWZmaWVzKSkKIAotLyogVGhpcyBpcyB3aGF0IHRoZSBzZW5kIHBhY2tldCBxdWV1ZWluZyBlbmdpbmUgdXNlcyB0byBwYXNzCisvKiBUaGlzIGlzIHdoYXQgdGhlIHNlbmQgcGFja2V0IHF1ZXVpbmcgZW5naW5lIHVzZXMgdG8gcGFzcwogICogVENQIHBlci1wYWNrZXQgY29udHJvbCBpbmZvcm1hdGlvbiB0byB0aGUgdHJhbnNtaXNzaW9uCiAgKiBjb2RlLiAgV2UgYWxzbyBzdG9yZSB0aGUgaG9zdC1vcmRlciBzZXF1ZW5jZSBudW1iZXJzIGluCiAgKiBoZXJlIHRvby4gIFRoaXMgaXMgMzYgYnl0ZXMgb24gMzItYml0IGFyY2hpdGVjdHVyZXMsCkBAIC01OTYsNyArNTk4LDcgQEAKICNkZWZpbmUgVENQQ0JfRVZFUl9SRVRSQU5TCTB4ODAJLyogRXZlciByZXRyYW5zbWl0dGVkIGZyYW1lCSovCiAjZGVmaW5lIFRDUENCX1JFVFJBTlMJCShUQ1BDQl9TQUNLRURfUkVUUkFOU3xUQ1BDQl9FVkVSX1JFVFJBTlMpCiAKLSNkZWZpbmUgVENQQ0JfVVJHCQkweDIwCS8qIFVyZ2VudCBwb2ludGVyIGFkdmVuY2VkIGhlcmUJKi8KKyNkZWZpbmUgVENQQ0JfVVJHCQkweDIwCS8qIFVyZ2VudCBwb2ludGVyIGFkdmFuY2VkIGhlcmUJKi8KIAogI2RlZmluZSBUQ1BDQl9BVF9UQUlMCQkoVENQQ0JfVVJHKQogCkBAIC03NjQsNiArNzY2LDMzIEBACiAJCQkgICAgKHRwLT5zbmRfY3duZCA+PiAyKSkpOwogfQogCisvKgorICogTGluZWFyIGluY3JlYXNlIGR1cmluZyBzbG93IHN0YXJ0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQoreworCWlmIChzeXNjdGxfdGNwX2FiYykgeworCQkvKiBSRkMzNDY1OiBTbG93IFN0YXJ0CisJCSAqIFRDUCBzZW5kZXIgU0hPVUxEIGluY3JlYXNlIGN3bmQgYnkgdGhlIG51bWJlciBvZgorCQkgKiBwcmV2aW91c2x5IHVuYWNrbm93bGVkZ2VkIGJ5dGVzIEFDS2VkIGJ5IGVhY2ggaW5jb21pbmcKKwkJICogYWNrbm93bGVkZ21lbnQsIHByb3ZpZGVkIHRoZSBpbmNyZWFzZSBpcyBub3QgbW9yZSB0aGFuIEwKKwkJICovCisJCWlmICh0cC0+Ynl0ZXNfYWNrZWQgPCB0cC0+bXNzX2NhY2hlKQorCQkJcmV0dXJuOworCisJCS8qIFdlIE1BWSBpbmNyZWFzZSBieSAyIGlmIGRpc2NvdmVyZWQgZGVsYXllZCBhY2sgKi8KKwkJaWYgKHN5c2N0bF90Y3BfYWJjID4gMSAmJiB0cC0+Ynl0ZXNfYWNrZWQgPiAyKnRwLT5tc3NfY2FjaGUpIHsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kKys7CisJCX0KKwl9CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKKworCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCXRwLT5zbmRfY3duZCsrOworfQorCisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc3luY19sZWZ0X291dChzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCWlmICh0cC0+cnhfb3B0LnNhY2tfb2sgJiYKQEAgLTc5Myw2ICs4MjIsNyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCiAJdHAtPnByaW9yX3NzdGhyZXNoID0gMDsKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCWlmIChpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgPCBUQ1BfQ0FfQ1dSKSB7CiAJCV9fdGNwX2VudGVyX2N3cihzayk7CiAJCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9DV1IpOwpAQCAtODA5LDYgKzgzOSwyNyBAQAogCXJldHVybiAzOwogfQogCisvKiBSRkMyODYxIENoZWNrIHdoZXRoZXIgd2UgYXJlIGxpbWl0ZWQgYnkgYXBwbGljYXRpb24gb3IgY29uZ2VzdGlvbiB3aW5kb3cKKyAqIFRoaXMgaXMgdGhlIGludmVyc2Ugb2YgY3duZCBjaGVjayBpbiB0Y3BfdHNvX3Nob3VsZF9kZWZlcgorICovCitzdGF0aWMgaW5saW5lIGludCB0Y3BfaXNfY3duZF9saW1pdGVkKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgdTMyIGluX2ZsaWdodCkKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwl1MzIgbGVmdDsKKworCWlmIChpbl9mbGlnaHQgPj0gdHAtPnNuZF9jd25kKQorCQlyZXR1cm4gMTsKKworCWlmICghKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9UU08pKQorCQlyZXR1cm4gMDsKKworCWxlZnQgPSB0cC0+c25kX2N3bmQgLSBpbl9mbGlnaHQ7CisJaWYgKHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yKQorCQlyZXR1cm4gbGVmdCAqIHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yIDwgdHAtPnNuZF9jd25kOworCWVsc2UKKwkJcmV0dXJuIGxlZnQgPD0gdGNwX21heF9idXJzdCh0cCk7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGNwX21pbnNoYWxsX3VwZGF0ZShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgbXNzLCAKIAkJCQkJICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTg1Miw3ICs5MDMsNyBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgX190Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJcmV0dXJuIF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCB0Y3BfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTExNTYsNiArMTIwNywxNSBAQAogCVRDUF9BRERfU1RBVFNfVVNFUihUQ1BfTUlCX01BWENPTk4sIC0xKTsKIH0KIAorLypmcm9tIFNUQ1AgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9hbGxfcmV0cmFuc19oaW50cyhzdHJ1Y3QgdGNwX3NvY2sgKnRwKXsKKwl0cC0+bG9zdF9za2JfaGludCA9IE5VTEw7CisJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKKwl0cC0+Zm9yd2FyZF9za2JfaGludCA9IE5VTEw7CisJdHAtPmZhc3RwYXRoX3NrYl9oaW50ID0gTlVMTDsKK30KKwogLyogL3Byb2MgKi8KIGVudW0gdGNwX3NlcV9zdGF0ZXMgewogCVRDUF9TRVFfU1RBVEVfTElTVEVOSU5HLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKaW5kZXggMDcyZjNhMi4uNWZmMTQ5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC00Myw3ICs0Myw3IEBACiAgKiBJbmNyZW1lbnQgdGhpcyB2YWx1ZSBpZiBhbnkgY2hhbmdlcyB0aGF0IGJyZWFrIHVzZXJzcGFjZSBBQkkKICAqIGNvbXBhdGliaWxpdHkgYXJlIG1hZGUuCiAgKi8KLSNkZWZpbmUgSUJfVVNFUl9WRVJCU19BQklfVkVSU0lPTgkzCisjZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JNAogCiBlbnVtIHsKIAlJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCwKQEAgLTMzMyw2ICszMzMsMTEgQEAKIHN0cnVjdCBpYl91dmVyYnNfY3JlYXRlX3FwX3Jlc3AgewogCV9fdTMyIHFwX2hhbmRsZTsKIAlfX3UzMiBxcG47CisJX191MzIgbWF4X3NlbmRfd3I7CisJX191MzIgbWF4X3JlY3Zfd3I7CisJX191MzIgbWF4X3NlbmRfc2dlOworCV9fdTMyIG1heF9yZWN2X3NnZTsKKwlfX3UzMiBtYXhfaW5saW5lX2RhdGE7CiB9OwogCiAvKgpAQCAtNTUyLDkgKzU1Nyw3IEBACiAJX191MzIgc3JxX2hhbmRsZTsKIAlfX3UzMiBhdHRyX21hc2s7CiAJX191MzIgbWF4X3dyOwotCV9fdTMyIG1heF9zZ2U7CiAJX191MzIgc3JxX2xpbWl0OwotCV9fdTMyIHJlc2VydmVkOwogCV9fdTY0IGRyaXZlcl9kYXRhWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBmNzJkNDZkLi5hN2Y0YzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtODgxLDcgKzg4MSw3IEBACiAJCQkJCQlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCiAJCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKmRlc3Ryb3lfY3EpKHN0cnVjdCBpYl9jcSAqY3EpOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgKmNxZSk7CisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpyZXNpemVfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCBjcWUpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcG9sbF9jcSkoc3RydWN0IGliX2NxICpjcSwgaW50IG51bV9lbnRyaWVzLAogCQkJCQkgICAgICBzdHJ1Y3QgaWJfd2MgKndjKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnBlZWtfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCB3Y19jbnQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDFiZjNjMzkuLjgwNzg5YTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTE0OTksNyArMTQ5OSw3IEBACiAKIAlwc2lnID0gdHNrLT5wYXJlbnQtPnNpZ2hhbmQ7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBzaWctPnNpZ2xvY2ssIGZsYWdzKTsKLQlpZiAoc2lnID09IFNJR0NITEQgJiYKKwlpZiAoIXRzay0+cHRyYWNlICYmIHNpZyA9PSBTSUdDSExEICYmCiAJICAgIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9oYW5kbGVyID09IFNJR19JR04gfHwKIAkgICAgIChwc2lnLT5hY3Rpb25bU0lHQ0hMRC0xXS5zYS5zYV9mbGFncyAmIFNBX05PQ0xEV0FJVCkpKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggYzQzYjNlMi4uYmNlOTMzZSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTQ5Nyw2ICsxNDk3LDggQEAKIAogREVDTEFSRV9SV1NFTSh1dHNfc2VtKTsKIAorRVhQT1JUX1NZTUJPTCh1dHNfc2VtKTsKKwogYXNtbGlua2FnZSBsb25nIHN5c19uZXd1bmFtZShzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICogbmFtZSkKIHsKIAlpbnQgZXJybm8gPSAwOwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IGZmODFiNWMuLjk4NzIyNWIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAJCX0gZWxzZQogCQkJcHJpbnRrKCJcbiIpOwogCi0JCWZvcl9lYWNoX2NwdShjcHUpIHsKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CiAKIAkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGF0YWdyYW0uYyBiL25ldC9jb3JlL2RhdGFncmFtLmMKaW5kZXggZDIxOTQzNS4uMWJjZmVmNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGF0YWdyYW0uYworKysgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCkBAIC0zNTAsNiArMzUwLDIwIEBACiAJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKK3Vuc2lnbmVkIGludCBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXVuc2lnbmVkIGludCBzdW07CisKKwlzdW0gPSAodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJaWYgKGxpa2VseSghc3VtKSkgeworCQlpZiAodW5saWtlbHkoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpKQorCQkJbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc2tiLT5kZXYpOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCX0KKwlyZXR1cm4gc3VtOworfQorRVhQT1JUX1NZTUJPTChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZSk7CisKIC8qKgogICoJc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMgLSBDb3B5IGFuZCBjaGVja3VtIHNrYiB0byB1c2VyIGlvdmVjLgogICoJQHNrYjogc2tidWZmCkBAIC0zNjMsNyArMzc3LDcgQEAKICAqCQkgLUVGQVVMVCAtIGZhdWx0IGR1cmluZyBjb3B5LiBCZXdhcmUsIGluIHRoaXMgY2FzZSBpb3ZlYwogICoJCQkgICBjYW4gYmUgbW9kaWZpZWQhCiAgKi8KLWludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgICBpbnQgaGxlbiwgc3RydWN0IGlvdmVjICppb3YpCiB7CiAJdW5zaWduZWQgaW50IGNzdW07CkBAIC0zNzYsOCArMzkwLDcgQEAKIAkJaW92Kys7CiAKIAlpZiAoaW92LT5pb3ZfbGVuIDwgY2h1bmspIHsKLQkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgY2h1bmsgKyBobGVuLAotCQkJCQkJCSAgIHNrYi0+Y3N1bSkpKQorCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9lcnJvcjsKIAkJaWYgKHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgaGxlbiwgaW92LCBjaHVuaykpCiAJCQlnb3RvIGZhdWx0OwpAQCAtMzg4LDYgKzQwMSw4IEBACiAJCQlnb3RvIGZhdWx0OwogCQlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChjc3VtKSkKIAkJCWdvdG8gY3N1bV9lcnJvcjsKKwkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKIAkJaW92LT5pb3ZfbGVuIC09IGNodW5rOwogCQlpb3YtPmlvdl9iYXNlICs9IGNodW5rOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggOGQxNTQxNS4uMGI0OGUyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMDgsNiArMTEwOCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFRha2UgYWN0aW9uIHdoZW4gaGFyZHdhcmUgcmVjZXB0aW9uIGNoZWNrc3VtIGVycm9ycyBhcmUgZGV0ZWN0ZWQuICovCisjaWZkZWYgQ09ORklHX0JVRwordm9pZCBuZXRkZXZfcnhfY3N1bV9mYXVsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaHcgY3N1bSBmYWlsdXJlLlxuIiwgZGV2LT5uYW1lKTsKKwkJZHVtcF9zdGFjaygpOworCX0KK30KK0VYUE9SVF9TWU1CT0wobmV0ZGV2X3J4X2NzdW1fZmF1bHQpOworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfSElHSE1FTQogLyogQWN0dWFsbHksIHdlIHNob3VsZCBlbGltaW5hdGUgdGhpcyBjaGVjayBhcyBzb29uIGFzIHdlIGtub3csIHRoYXQ6CiAgKiAxLiBJT01NVSBpcyBwcmVzZW50IGFuZCBhbGxvd3MgdG8gbWFwIGFsbCB0aGUgbWVtb3J5LgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmV0cG9sbC5jIGIvbmV0L2NvcmUvbmV0cG9sbC5jCmluZGV4IDgwMmZlMTEuLjQ5NDI0YTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldHBvbGwuYworKysgYi9uZXQvY29yZS9uZXRwb2xsLmMKQEAgLTEwMSwxNiArMTAxLDIwIEBACiBzdGF0aWMgaW50IGNoZWNrc3VtX3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCwKIAkJCSAgICAgdW5zaWduZWQgc2hvcnQgdWxlbiwgdTMyIHNhZGRyLCB1MzIgZGFkZHIpCiB7Ci0JaWYgKHVoLT5jaGVjayA9PSAwKQorCXVuc2lnbmVkIGludCBwc3VtOworCisJaWYgKHVoLT5jaGVjayA9PSAwIHx8IHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKQogCQlyZXR1cm4gMDsKIAotCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykKLQkJcmV0dXJuIGNzdW1fdGNwdWRwX21hZ2ljKAotCQkJc2FkZHIsIGRhZGRyLCB1bGVuLCBJUFBST1RPX1VEUCwgc2tiLT5jc3VtKTsKKwlwc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIDApOwogCi0Jc2tiLT5jc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIDApOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVyAmJgorCSAgICAhKHUxNiljc3VtX2ZvbGQoY3N1bV9hZGQocHN1bSwgc2tiLT5jc3VtKSkpCisJCXJldHVybiAwOwogCi0JcmV0dXJuIGNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSk7CisJc2tiLT5jc3VtID0gcHN1bTsKKworCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQogCiAvKgpAQCAtNDg5LDcgKzQ5Myw3IEBACiAKIAlpZiAodWxlbiAhPSBsZW4pCiAJCWdvdG8gb3V0OwotCWlmIChjaGVja3N1bV91ZHAoc2tiLCB1aCwgdWxlbiwgaXBoLT5zYWRkciwgaXBoLT5kYWRkcikgPCAwKQorCWlmIChjaGVja3N1bV91ZHAoc2tiLCB1aCwgdWxlbiwgaXBoLT5zYWRkciwgaXBoLT5kYWRkcikpCiAJCWdvdG8gb3V0OwogCWlmIChucC0+bG9jYWxfaXAgJiYgbnAtPmxvY2FsX2lwICE9IG50b2hsKGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCmluZGV4IDNmMjVjYWQuLmY4OWU1NWYgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKKysrIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwpAQCAtMTY2NCwxNyArMTY2NCwxNSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSB7CisJCXJ2ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCiAJcnYgPSBkbl9jaGVja19zdGF0ZShzaywgTlVMTCwgMCwgJnRpbWVvLCBmbGFncyk7CiAJaWYgKHJ2KQogCQlnb3RvIG91dDsKIAotCWlmIChzay0+c2tfc2h1dGRvd24gJiBSQ1ZfU0hVVERPV04pIHsKLQkJaWYgKCEoZmxhZ3MgJiBNU0dfTk9TSUdOQUwpKQotCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7Ci0JCXJ2ID0gLUVQSVBFOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoZmxhZ3MgJiB+KE1TR19QRUVLfE1TR19PT0J8TVNHX1dBSVRBTEx8TVNHX0RPTlRXQUlUfE1TR19OT1NJR05BTCkpIHsKIAkJcnYgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CkBAIC0xOTI4LDYgKzE5MjYsOCBAQAogCiAJaWYgKHNrLT5za19zaHV0ZG93biAmIFNFTkRfU0hVVERPV04pIHsKIAkJZXJyID0gLUVQSVBFOworCQlpZiAoIShmbGFncyAmIE1TR19OT1NJR05BTCkpCisJCQlzZW5kX3NpZyhTSUdQSVBFLCBjdXJyZW50LCAwKTsKIAkJZ290byBvdXRfZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWNtcC5jIGIvbmV0L2lwdjQvaWNtcC5jCmluZGV4IDE3NWUwOTMuLmUzZWNlZWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ljbXAuYworKysgYi9uZXQvaXB2NC9pY21wLmMKQEAgLTkzNCwxMSArOTM0LDExIEBACiAJY2FzZSBDSEVDS1NVTV9IVzoKIAkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQogCQkJYnJlYWs7Ci0JCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgImljbXAgdjQgaHcgY3N1bSBmYWlsdXJlXG4iKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBDSEVDS1NVTV9OT05FOgotCQlpZiAoKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkKKwkJc2tiLT5jc3VtID0gMDsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGVycm9yOwotCWRlZmF1bHQ6OwogCX0KIAogCWlmICghcHNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21waGRyKSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYzYyNDdmYy4uYzA0NjA3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWdtcC5jCisrKyBiL25ldC9pcHY0L2lnbXAuYwpAQCAtODcyLDExICs4NzIsMTggQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBpZ21waGRyKSkgfHwgCi0JICAgICh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIGxlbiwgMCkpKSB7Ci0JCWluX2Rldl9wdXQoaW5fZGV2KTsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpKQorCQlnb3RvIGRyb3A7CisKKwlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJY2FzZSBDSEVDS1NVTV9IVzoKKwkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJc2tiLT5jc3VtID0gMDsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCisJCQlnb3RvIGRyb3A7CiAJfQogCiAJaWggPSBza2ItPmguaWdtcGg7CkBAIC05MDYsNiArOTEzLDggQEAKIAlkZWZhdWx0OgogCQlORVRERUJVRyhLRVJOX0RFQlVHICJOZXcgSUdNUCB0eXBlPSVkLCB3aHkgd2UgZG8gbm90IGtub3cgYWJvdXQgaXQ/XG4iLCBpaC0+dHlwZSk7CiAJfQorCitkcm9wOgogCWluX2Rldl9wdXQoaW5fZGV2KTsKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODk2Y2UzZi4uNGU5Yzc0YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTU3NywxNSArNTc3LDE2IEBACiAJCQlnb3RvIGRyb3Bfbm9sb2NrOwogCiAJCWlmIChmbGFncyZHUkVfQ1NVTSkgewotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CisJCQlzd2l0Y2ggKHNrYi0+aXBfc3VtbWVkKSB7CisJCQljYXNlIENIRUNLU1VNX0hXOgogCQkJCWNzdW0gPSAodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pOwotCQkJCWlmIChjc3VtKQotCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCQl9Ci0JCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkgewotCQkJCXNrYi0+Y3N1bSA9IHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKTsKKwkJCQlpZiAoIWNzdW0pCisJCQkJCWJyZWFrOworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBDSEVDS1NVTV9OT05FOgorCQkJCXNrYi0+Y3N1bSA9IDA7CisJCQkJY3N1bSA9IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYik7CiAJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9IVzsKLQkJCQljc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKTsKIAkJCX0KIAkJCW9mZnNldCArPSA0OwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDUxOThmM2EuLmU0ZDZiMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KQEAgLTIzMCwxOSArMjMxLDE1IEBACiAJY2FzZSBDSEVDS1NVTV9IVzoKIAkJaWYgKCEodTE2KWNzdW1fZm9sZChza2ItPmNzdW0pKSAKIAkJCWJyZWFrOwotCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKLQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJCSAgICAgICJpcF9jdF9pY21wOiBiYWQgSFcgSUNNUCBjaGVja3N1bSAiKTsKLQkJcmV0dXJuIC1ORl9BQ0NFUFQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJaWYgKCh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpIHsKKwkJc2tiLT5jc3VtID0gMDsKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKIAkJCWlmIChMT0dfSU5WQUxJRChJUFBST1RPX0lDTVApKQogCQkJCW5mX2xvZ19wYWNrZXQoUEZfSU5FVCwgMCwgc2tiLCBOVUxMLCBOVUxMLCBOVUxMLAogCQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIElDTVAgY2hlY2tzdW0gIik7CiAJCQlyZXR1cm4gLU5GX0FDQ0VQVDsKIAkJfQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwogCX0KIAogY2hlY2tzdW1fc2tpcHBlZDoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggNjUyNjg1Ni4uMDE0NDRhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTY0NSw2ICs2NDUsMTQgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX3RjcF9jb25nZXN0aW9uX2NvbnRyb2wsCiAJCS5zdHJhdGVneQk9ICZzeXNjdGxfdGNwX2Nvbmdlc3Rpb25fY29udHJvbCwKIAl9LAorCXsKKwkJLmN0bF9uYW1lCT0gTkVUX1RDUF9BQkMsCisJCS5wcm9jbmFtZQk9ICJ0Y3BfYWJjIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF90Y3BfYWJjLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKIAogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA3MmI3YzIyLi45YWM3YTRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTY0MCw3ICsxNjQwLDcgQEAKIAl9IGVsc2UgaWYgKHRjcF9uZWVkX3Jlc2V0KG9sZF9zdGF0ZSkgfHwKIAkJICAgKHRwLT5zbmRfbnh0ICE9IHRwLT53cml0ZV9zZXEgJiYKIAkJICAgICgxIDw8IG9sZF9zdGF0ZSkgJiAoVENQRl9DTE9TSU5HIHwgVENQRl9MQVNUX0FDSykpKSB7Ci0JCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmNlIG9mIExpbnV4IHdydC4gUkZDCisJCS8qIFRoZSBsYXN0IGNoZWNrIGFkanVzdHMgZm9yIGRpc2NyZXBhbmN5IG9mIExpbnV4IHdydC4gUkZDCiAJCSAqIHN0YXRlcwogCQkgKi8KIAkJdGNwX3NlbmRfYWN0aXZlX3Jlc2V0KHNrLCBnZnBfYW55KCkpOwpAQCAtMTY2OSw2ICsxNjY5LDcgQEAKIAl0cC0+cGFja2V0c19vdXQgPSAwOwogCXRwLT5zbmRfc3N0aHJlc2ggPSAweDdmZmZmZmZmOwogCXRwLT5zbmRfY3duZF9jbnQgPSAwOworCXRwLT5ieXRlc19hY2tlZCA9IDA7CiAJdGNwX3NldF9jYV9zdGF0ZShzaywgVENQX0NBX09wZW4pOwogCXRjcF9jbGVhcl9yZXRyYW5zKHRwKTsKIAlpbmV0X2Nza19kZWxhY2tfaW5pdChzayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmljLmMgYi9uZXQvaXB2NC90Y3BfYmljLmMKaW5kZXggYWUzNWUwNi4uMWQwY2Q4NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2JpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9iaWMuYwpAQCAtMjE3LDE3ICsyMTcsMTUgQEAKIAogCWJpY3RjcF9sb3dfdXRpbGl6YXRpb24oc2ssIGRhdGFfYWNrZWQpOwogCi0JaWYgKGluX2ZsaWdodCA8IHRwLT5zbmRfY3duZCkKKwlpZiAoIXRjcF9pc19jd25kX2xpbWl0ZWQoc2ssIGluX2ZsaWdodCkpCiAJCXJldHVybjsKIAotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewotCQkvKiBJbiAic2FmZSIgYXJlYSwgaW5jcmVhc2UuICovCi0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCWVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwogCi0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KKwkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KIAkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKIAkJICovCiAJCWlmICh0cC0+c25kX2N3bmRfY250ID49IGNhLT5jbnQpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jb25nLmMgYi9uZXQvaXB2NC90Y3BfY29uZy5jCmluZGV4IGJiZjJkNjYuLmM3Y2M2MmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jb25nLmMKKysrIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwpAQCAtMTg2LDI0ICsxODYsMzIgQEAKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLSAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAotCQkgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOwotCX0KKwkvKiBJbiAic2FmZSIgYXJlYSwgaW5jcmVhc2UuICovCisgICAgICAgIGlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCisgCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuICovCisJZWxzZSBpZiAoc3lzY3RsX3RjcF9hYmMpIHsKKyAJCS8qIFJGQzM0NjU6IEFwcHByaWF0ZSBCeXRlIENvdW50CisgCQkgKiBpbmNyZWFzZSBvbmNlIGZvciBlYWNoIGZ1bGwgY3duZCBhY2tlZAorIAkJICovCisgCQlpZiAodHAtPmJ5dGVzX2Fja2VkID49IHRwLT5zbmRfY3duZCp0cC0+bXNzX2NhY2hlKSB7CisgCQkJdHAtPmJ5dGVzX2Fja2VkIC09IHRwLT5zbmRfY3duZCp0cC0+bXNzX2NhY2hlOworIAkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisgCQkJCXRwLT5zbmRfY3duZCsrOworIAkJfQorIAl9IGVsc2UgeworIAkJLyogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQgKi8KKyAJCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgeworIAkJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisgCQkJCXRwLT5zbmRfY3duZCsrOworIAkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOworIAkJfSBlbHNlCisgCQkJdHAtPnNuZF9jd25kX2NudCsrOworIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19jb25nX2F2b2lkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCmluZGV4IDZhY2MwNGIuLjgyYjNjMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYworKysgYi9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKQEAgLTExMSwxOCArMTExLDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGhzdGNwX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWRrLCB1MzIgcnR0LAotCQkJICAgICB1MzIgaW5fZmxpZ2h0LCBpbnQgZ29vZCkKKwkJCSAgICAgdTMyIGluX2ZsaWdodCwgdTMyIHBrdHNfYWNrZWQpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGhzdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCXRwLT5zbmRfY3duZCsrOwotCX0gZWxzZSB7CisJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQorCQl0Y3Bfc2xvd19zdGFydCh0cCk7CisJZWxzZSB7CiAJCS8qIFVwZGF0ZSBBSU1EIHBhcmFtZXRlcnMgKi8KIAkJaWYgKHRwLT5zbmRfY3duZCA+IGhzdGNwX2FpbWRfdmFsc1tjYS0+YWldLmN3bmQpIHsKIAkJCXdoaWxlICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCBlNDdiMzc5Li4zMjg0Y2ZiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTIwNywxNCArMjA3LDEzIEBACiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IGh0Y3AgKmNhID0gaW5ldF9jc2tfY2Eoc2spOwogCi0JaWYgKGluX2ZsaWdodCA8IHRwLT5zbmRfY3duZCkKKwlpZiAoIXRjcF9pc19jd25kX2xpbWl0ZWQoc2ssIGluX2ZsaWdodCkpCiAJCXJldHVybjsKIAotICAgICAgICBpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLSAgICAgICAgICAgICAgICAvKiBJbiAic2FmZSIgYXJlYSwgaW5jcmVhc2UuICovCi0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworICAgICAgICBpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKKwogCQltZWFzdXJlX3J0dChzayk7CiAKIAkJLyoga2VlcCB0cmFjayBvZiBudW1iZXIgb2Ygcm91bmQtdHJpcCB0aW1lcyBzaW5jZSBsYXN0IGJhY2tvZmYgZXZlbnQgKi8KQEAgLTIyNCw3ICsyMjMsNyBAQAogCQkJaHRjcF9hbHBoYV91cGRhdGUoY2EpOwogCQl9CiAKLSAgICAgICAgICAgICAgICAvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgorCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgogCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gYWxwaGEgLyB0cC0+c25kX2N3bmQKIAkJICovCiAJCWlmICgodHAtPnNuZF9jd25kX2NudCsrICogY2EtPmFscGhhKT4+NyA+PSB0cC0+c25kX2N3bmQpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9oeWJsYS5jIGIvbmV0L2lwdjQvdGNwX2h5YmxhLmMKaW5kZXggNzdhZGQ2MzYuLjQwZGJiMzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oeWJsYS5jCisrKyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCQljYS0+bWlucnR0ID0gdHAtPnNydHQ7CiAJfQogCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQorCQlyZXR1cm47CisKIAlpZiAoIWNhLT5oeWJsYV9lbikKIAkJcmV0dXJuIHRjcF9yZW5vX2NvbmdfYXZvaWQoc2ssIGFjaywgcnR0LCBpbl9mbGlnaHQsIGZsYWcpOwogCi0JaWYgKGluX2ZsaWdodCA8IHRwLT5zbmRfY3duZCkKLQkJcmV0dXJuOwotCiAJaWYgKGNhLT5yaG8gPT0gMCkKIAkJaHlibGFfcmVjYWxjX3BhcmFtKHNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAzZTk4YjU3Li40MGEyNmI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtNDIsNyArNDIsNyBAQAogICoJCUFuZGkgS2xlZW4JOglNb3ZlZCBvcGVuX3JlcXVlc3QgY2hlY2tpbmcgaGVyZQogICoJCQkJCWFuZCBwcm9jZXNzIFJTVHMgZm9yIG9wZW5fcmVxdWVzdHMuCiAgKgkJQW5kaSBLbGVlbgk6CUJldHRlciBwcnVuZV9xdWV1ZSwgYW5kIG90aGVyIGZpeGVzLgotICoJCUFuZHJleSBTYXZvY2hraW46CUZpeCBSVFQgbWVhc3VyZW1lbnRzIGluIHRoZSBwcmVzbmNlIG9mCisgKgkJQW5kcmV5IFNhdm9jaGtpbjoJRml4IFJUVCBtZWFzdXJlbWVudHMgaW4gdGhlIHByZXNlbmNlIG9mCiAgKgkJCQkJdGltZXN0YW1wcy4KICAqCQlBbmRyZXkgU2F2b2Noa2luOglDaGVjayBzZXF1ZW5jZSBudW1iZXJzIGNvcnJlY3RseSB3aGVuCiAgKgkJCQkJcmVtb3ZpbmcgU0FDS3MgZHVlIHRvIGluIHNlcXVlbmNlIGluY29taW5nCkBAIC04OSw2ICs4OSw3IEBACiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKIAogaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmID0gMTsKK2ludCBzeXNjdGxfdGNwX2FiYyA9IDE7CiAKICNkZWZpbmUgRkxBR19EQVRBCQkweDAxIC8qIEluY29taW5nIGZyYW1lIGNvbnRhaW5lZCBkYXRhLgkJKi8KICNkZWZpbmUgRkxBR19XSU5fVVBEQVRFCQkweDAyIC8qIEluY29taW5nIEFDSyB3YXMgYSB3aW5kb3cgdXBkYXRlLgkqLwpAQCAtMjIzLDcgKzIyNCw3IEBACiAgKiAgIG9mIHJlY2VpdmVyIHdpbmRvdy4gQ2hlY2sgIzIuCiAgKgogICogVGhlIHNjaGVtZSBkb2VzIG5vdCB3b3JrIHdoZW4gc2VuZGVyIHNlbmRzIGdvb2Qgc2VnbWVudHMgb3BlbmluZwotICogd2luZG93IGFuZCB0aGVuIHN0YXJ0cyB0byBmZWVkIHVzIHNwYWdldHRpLiBCdXQgaXQgc2hvdWxkIHdvcmsKKyAqIHdpbmRvdyBhbmQgdGhlbiBzdGFydHMgdG8gZmVlZCB1cyBzcGFnaGV0dGkuIEJ1dCBpdCBzaG91bGQgd29yawogICogaW4gY29tbW9uIHNpdHVhdGlvbnMuIE90aGVyd2lzZSwgd2UgaGF2ZSB0byByZWx5IG9uIHF1ZXVlIGNvbGxhcHNpbmcuCiAgKi8KIApAQCAtMjMzLDcgKzIzNCw3IEBACiB7CiAJLyogT3B0aW1pemUgdGhpcyEgKi8KIAlpbnQgdHJ1ZXNpemUgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2tiLT50cnVlc2l6ZSkvMjsKLQlpbnQgd2luZG93ID0gdGNwX2Z1bGxfc3BhY2Uoc2spLzI7CisJaW50IHdpbmRvdyA9IHRjcF93aW5fZnJvbV9zcGFjZShzeXNjdGxfdGNwX3JtZW1bMl0pLzI7CiAKIAl3aGlsZSAodHAtPnJjdl9zc3RocmVzaCA8PSB3aW5kb3cpIHsKIAkJaWYgKHRydWVzaXplIDw9IHNrYi0+bGVuKQpAQCAtMjc3LDcgKzI3OCw3IEBACiAJaW50IHJjdm1lbSA9IHRwLT5hZHZtc3MgKyBNQVhfVENQX0hFQURFUiArIDE2ICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKIAogCS8qIFRyeSB0byBzZWxlY3QgcmN2YnVmIHNvIHRoYXQgNCBtc3Mtc2l6ZWQgc2VnbWVudHMKLQkgKiB3aWxsIGZpdCB0byB3aW5kb3cgYW5kIGNvcnJlc3BvZGluZyBza2JzIHdpbGwgZml0IHRvIG91ciByY3ZidWYuCisJICogd2lsbCBmaXQgdG8gd2luZG93IGFuZCBjb3JyZXNwb25kaW5nIHNrYnMgd2lsbCBmaXQgdG8gb3VyIHJjdmJ1Zi4KIAkgKiAod2FzIDM7IDQgaXMgbWluaW11bSB0byBhbGxvdyBmYXN0IHJldHJhbnNtaXQgdG8gd29yay4pCiAJICovCiAJd2hpbGUgKHRjcF93aW5fZnJvbV9zcGFjZShyY3ZtZW0pIDwgdHAtPmFkdm1zcykKQEAgLTI4Niw3ICsyODcsNyBAQAogCQlzay0+c2tfcmN2YnVmID0gbWluKDQgKiByY3ZtZW0sIHN5c2N0bF90Y3Bfcm1lbVsyXSk7CiB9CiAKLS8qIDQuIFRyeSB0byBmaXh1cCBhbGwuIEl0IGlzIG1hZGUgaWltZWRpYXRlbHkgYWZ0ZXIgY29ubmVjdGlvbiBlbnRlcnMKKy8qIDQuIFRyeSB0byBmaXh1cCBhbGwuIEl0IGlzIG1hZGUgaW1tZWRpYXRlbHkgYWZ0ZXIgY29ubmVjdGlvbiBlbnRlcnMKICAqICAgIGVzdGFibGlzaGVkIHN0YXRlLgogICovCiBzdGF0aWMgdm9pZCB0Y3BfaW5pdF9idWZmZXJfc3BhY2Uoc3RydWN0IHNvY2sgKnNrKQpAQCAtMzI2LDM3ICszMjcsMTggQEAKIHN0YXRpYyB2b2lkIHRjcF9jbGFtcF93aW5kb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwKQogewogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBhcHBfd2luID0gdHAtPnJjdl9ueHQgLSB0cC0+Y29waWVkX3NlcTsKLQlpbnQgb2ZvX3dpbiA9IDA7CiAKIAlpY3NrLT5pY3NrX2Fjay5xdWljayA9IDA7CiAKLQlza2JfcXVldWVfd2FsaygmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSwgc2tiKSB7Ci0JCW9mb193aW4gKz0gc2tiLT5sZW47CisJaWYgKHNrLT5za19yY3ZidWYgPCBzeXNjdGxfdGNwX3JtZW1bMl0gJiYKKwkgICAgIShzay0+c2tfdXNlcmxvY2tzICYgU09DS19SQ1ZCVUZfTE9DSykgJiYKKwkgICAgIXRjcF9tZW1vcnlfcHJlc3N1cmUgJiYKKwkgICAgYXRvbWljX3JlYWQoJnRjcF9tZW1vcnlfYWxsb2NhdGVkKSA8IHN5c2N0bF90Y3BfbWVtWzBdKSB7CisJCXNrLT5za19yY3ZidWYgPSBtaW4oYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSwKKwkJCQkgICAgc3lzY3RsX3RjcF9ybWVtWzJdKTsKIAl9Ci0KLQkvKiBJZiBvdmVyY29tbWl0IGlzIGR1ZSB0byBvdXQgb2Ygb3JkZXIgc2VnbWVudHMsCi0JICogZG8gbm90IGNsYW1wIHdpbmRvdy4gVHJ5IHRvIGV4cGFuZCByY3ZidWYgaW5zdGVhZC4KLQkgKi8KLQlpZiAob2ZvX3dpbikgewotCQlpZiAoc2stPnNrX3JjdmJ1ZiA8IHN5c2N0bF90Y3Bfcm1lbVsyXSAmJgotCQkgICAgIShzay0+c2tfdXNlcmxvY2tzICYgU09DS19SQ1ZCVUZfTE9DSykgJiYKLQkJICAgICF0Y3BfbWVtb3J5X3ByZXNzdXJlICYmCi0JCSAgICBhdG9taWNfcmVhZCgmdGNwX21lbW9yeV9hbGxvY2F0ZWQpIDwgc3lzY3RsX3RjcF9tZW1bMF0pCi0JCQlzay0+c2tfcmN2YnVmID0gbWluKGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYyksCi0JCQkJCSAgICBzeXNjdGxfdGNwX3JtZW1bMl0pOwotCX0KLQlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+IHNrLT5za19yY3ZidWYpIHsKLQkJYXBwX3dpbiArPSBvZm9fd2luOwotCQlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA+PSAyICogc2stPnNrX3JjdmJ1ZikKLQkJCWFwcF93aW4gPj49IDE7Ci0JCWlmIChhcHBfd2luID4gaWNzay0+aWNza19hY2sucmN2X21zcykKLQkJCWFwcF93aW4gLT0gaWNzay0+aWNza19hY2sucmN2X21zczsKLQkJYXBwX3dpbiA9IG1heChhcHBfd2luLCAyVSp0cC0+YWR2bXNzKTsKLQorCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpID4gc2stPnNrX3JjdmJ1ZikKIAkJdHAtPnJjdl9zc3RocmVzaCA9IG1pbih0cC0+d2luZG93X2NsYW1wLCAyVSp0cC0+YWR2bXNzKTsKLQl9CiB9CiAKIC8qIFJlY2VpdmVyICJhdXRvdHVuaW5nIiBjb2RlLgpAQCAtMzg1LDggKzM2Nyw4IEBACiAJCSAqIGFyZSBzdGFsbGVkIG9uIGZpbGVzeXN0ZW0gSS9PLgogCQkgKgogCQkgKiBBbHNvLCBzaW5jZSB3ZSBhcmUgb25seSBnb2luZyBmb3IgYSBtaW5pbXVtIGluIHRoZQotCQkgKiBub24tdGltZXN0YW1wIGNhc2UsIHdlIGRvIG5vdCBzbW9vdGhlIHRoaW5ncyBvdXQKLQkJICogZWxzZSB3aXRoIHRpbWVzdGFtcHMgZGlzYWJsZWQgY29udmVyZ2FuY2UgdGFrZXMgdG9vCisJCSAqIG5vbi10aW1lc3RhbXAgY2FzZSwgd2UgZG8gbm90IHNtb290aGVyIHRoaW5ncyBvdXQKKwkJICogZWxzZSB3aXRoIHRpbWVzdGFtcHMgZGlzYWJsZWQgY29udmVyZ2VuY2UgdGFrZXMgdG9vCiAJCSAqIGxvbmcuCiAJCSAqLwogCQlpZiAoIXdpbl9kZXApIHsKQEAgLTM5NSw3ICszNzcsNyBAQAogCQl9IGVsc2UgaWYgKG0gPCBuZXdfc2FtcGxlKQogCQkJbmV3X3NhbXBsZSA9IG0gPDwgMzsKIAl9IGVsc2UgewotCQkvKiBObyBwcmV2aW91cyBtZXNhdXJlLiAqLworCQkvKiBObyBwcmV2aW91cyBtZWFzdXJlLiAqLwogCQluZXdfc2FtcGxlID0gbSA8PCAzOwogCX0KIApAQCAtNTI0LDcgKzUwNiw3IEBACiAJCQlpZiAoaWNzay0+aWNza19hY2suYXRvID4gaWNzay0+aWNza19ydG8pCiAJCQkJaWNzay0+aWNza19hY2suYXRvID0gaWNzay0+aWNza19ydG87CiAJCX0gZWxzZSBpZiAobSA+IGljc2stPmljc2tfcnRvKSB7Ci0JCQkvKiBUb28gbG9uZyBnYXAuIEFwcGFyZW50bHkgc2VuZGVyIGZhbGxlZCB0bworCQkJLyogVG9vIGxvbmcgZ2FwLiBBcHBhcmVudGx5IHNlbmRlciBmYWlsZWQgdG8KIAkJCSAqIHJlc3RhcnQgd2luZG93LCBzbyB0aGF0IHdlIHNlbmQgQUNLcyBxdWlja2x5LgogCQkJICovCiAJCQl0Y3BfaW5jcl9xdWlja2Fjayhzayk7CkBAIC01NDgsMTAgKzUzMCw5IEBACiAgKiBUbyBzYXZlIGN5Y2xlcyBpbiB0aGUgUkZDIDEzMjMgaW1wbGVtZW50YXRpb24gaXQgd2FzIGJldHRlciB0byBicmVhawogICogaXQgdXAgaW50byB0aHJlZSBwcm9jZWR1cmVzLiAtLSBlcmljcwogICovCi1zdGF0aWMgdm9pZCB0Y3BfcnR0X2VzdGltYXRvcihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IF9fdTMyIG1ydHQsIHUzMiAqdXNydHQpCitzdGF0aWMgdm9pZCB0Y3BfcnR0X2VzdGltYXRvcihzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IF9fdTMyIG1ydHQpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCWxvbmcgbSA9IG1ydHQ7IC8qIFJUVCAqLwogCiAJLyoJVGhlIGZvbGxvd2luZyBhbXVzaW5nIGNvZGUgY29tZXMgZnJvbSBKYWNvYnNvbidzCkBAIC01NjUsNyArNTQ2LDcgQEAKIAkgKgogCSAqIEZ1bm55LiBUaGlzIGFsZ29yaXRobSBzZWVtcyB0byBiZSB2ZXJ5IGJyb2tlbi4KIAkgKiBUaGVzZSBmb3JtdWxhZSBpbmNyZWFzZSBSVE8sIHdoZW4gaXQgc2hvdWxkIGJlIGRlY3JlYXNlZCwgaW5jcmVhc2UKLQkgKiB0b28gc2xvd2x5LCB3aGVuIGl0IHNob3VsZCBiZSBpbmNyZXNlZCBmYXN0bHksIGRlY3JlYXNlIHRvbyBmYXN0bHkKKwkgKiB0b28gc2xvd2x5LCB3aGVuIGl0IHNob3VsZCBiZSBpbmNyZWFzZWQgZmFzdGx5LCBkZWNyZWFzZSB0b28gZmFzdGx5CiAJICogZXRjLiBJIGd1ZXNzIGluIEJTRCBSVE8gdGFrZXMgT05FIHZhbHVlLCBzbyB0aGF0IGl0IGlzIGFic29sdXRlbHkKIAkgKiBkb2VzIG5vdCBtYXR0ZXIgaG93IHRvIF9jYWxjdWxhdGVfIGl0LiBTZWVtcywgaXQgd2FzIHRyYXAKIAkgKiB0aGF0IFZKIGZhaWxlZCB0byBhdm9pZC4gOCkKQEAgLTYxMCw5ICs1OTEsNiBAQAogCQl0cC0+bWRldl9tYXggPSB0cC0+cnR0dmFyID0gbWF4KHRwLT5tZGV2LCBUQ1BfUlRPX01JTik7CiAJCXRwLT5ydHRfc2VxID0gdHAtPnNuZF9ueHQ7CiAJfQotCi0JaWYgKGljc2stPmljc2tfY2Ffb3BzLT5ydHRfc2FtcGxlKQotCQlpY3NrLT5pY3NrX2NhX29wcy0+cnR0X3NhbXBsZShzaywgKnVzcnR0KTsKIH0KIAogLyogQ2FsY3VsYXRlIHJ0byB3aXRob3V0IGJhY2tvZmYuICBUaGlzIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBWYW4gSmFjb2Jzb24ncwpAQCAtNjI5LDE0ICs2MDcsMTQgQEAKIAkgKiAgICBhdCBsZWFzdCBieSBzb2xhcmlzIGFuZCBmcmVlYnNkLiAiRXJyYXRpYyBBQ0tzIiBoYXMgX25vdGhpbmdfCiAJICogICAgdG8gZG8gd2l0aCBkZWxheWVkIGFja3MsIGJlY2F1c2UgYXQgY3duZD4yIHRydWUgZGVsYWNrIHRpbWVvdXQKIAkgKiAgICBpcyBpbnZpc2libGUuIEFjdHVhbGx5LCBMaW51eC0yLjQgYWxzbyBnZW5lcmF0ZXMgZXJyYXRpYwotCSAqICAgIEFDS3MgaW4gc29tZSBjdXJjdW1zdGFuY2VzLgorCSAqICAgIEFDS3MgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgogCSAqLwogCWluZXRfY3NrKHNrKS0+aWNza19ydG8gPSAodHAtPnNydHQgPj4gMykgKyB0cC0+cnR0dmFyOwogCiAJLyogMi4gRml4dXBzIG1hZGUgZWFybGllciBjYW5ub3QgYmUgcmlnaHQuCiAJICogICAgSWYgd2UgZG8gbm90IGVzdGltYXRlIFJUTyBjb3JyZWN0bHkgd2l0aG91dCB0aGVtLAogCSAqICAgIGFsbCB0aGUgYWxnbyBpcyBwdXJlIHNoaXQgYW5kIHNob3VsZCBiZSByZXBsYWNlZAotCSAqICAgIHdpdGggY29ycmVjdCBvbmUuIEl0IGlzIGV4YWNsdHksIHdoaWNoIHdlIHByZXRlbmQgdG8gZG8uCisJICogICAgd2l0aCBjb3JyZWN0IG9uZS4gSXQgaXMgZXhhY3RseSwgd2hpY2ggd2UgcHJldGVuZCB0byBkby4KIAkgKi8KIH0KIApAQCAtNzk0LDcgKzc3Miw3IEBACiAJICogdG8gbWFrZSBpdCBtb3JlIHJlYWxpc3RpYy4KIAkgKgogCSAqIEEgYml0IG9mIHRoZW9yeS4gUlRUIGlzIHRpbWUgcGFzc2VkIGFmdGVyICJub3JtYWwiIHNpemVkIHBhY2tldAotCSAqIGlzIHNlbnQgdW50aWwgaXQgaXMgQUNLZWQuIEluIG5vcm1hbCBjdXJjdW1zdGFuY2VzIHNlbmRpbmcgc21hbGwKKwkgKiBpcyBzZW50IHVudGlsIGl0IGlzIEFDS2VkLiBJbiBub3JtYWwgY2lyY3Vtc3RhbmNlcyBzZW5kaW5nIHNtYWxsCiAJICogcGFja2V0cyBmb3JjZSBwZWVyIHRvIGRlbGF5IEFDS3MgYW5kIGNhbGN1bGF0aW9uIGlzIGNvcnJlY3QgdG9vLgogCSAqIFRoZSBhbGdvcml0aG0gaXMgYWRhcHRpdmUgYW5kLCBwcm92aWRlZCB3ZSBmb2xsb3cgc3BlY3MsIGl0CiAJICogTkVWRVIgdW5kZXJlc3RpbWF0ZSBSVFQuIEJVVCEgSWYgcGVlciB0cmllcyB0byBtYWtlIHNvbWUgY2xldmVyCkBAIC05MTksMTggKzg5NywzMiBAQAogCWludCBwcmlvcl9mYWNrZXRzOwogCXUzMiBsb3N0X3JldHJhbnMgPSAwOwogCWludCBmbGFnID0gMDsKKwlpbnQgZHVwX3NhY2sgPSAwOwogCWludCBpOwogCiAJaWYgKCF0cC0+c2Fja2VkX291dCkKIAkJdHAtPmZhY2tldHNfb3V0ID0gMDsKIAlwcmlvcl9mYWNrZXRzID0gdHAtPmZhY2tldHNfb3V0OwogCi0JZm9yIChpPTA7IGk8bnVtX3NhY2tzOyBpKyssIHNwKyspIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJX191MzIgc3RhcnRfc2VxID0gbnRvaGwoc3AtPnN0YXJ0X3NlcSk7Ci0JCV9fdTMyIGVuZF9zZXEgPSBudG9obChzcC0+ZW5kX3NlcSk7Ci0JCWludCBmYWNrX2NvdW50ID0gMDsKLQkJaW50IGR1cF9zYWNrID0gMDsKKwkvKiBTQUNLIGZhc3RwYXRoOgorCSAqIGlmIHRoZSBvbmx5IFNBQ0sgY2hhbmdlIGlzIHRoZSBpbmNyZWFzZSBvZiB0aGUgZW5kX3NlcSBvZgorCSAqIHRoZSBmaXJzdCBibG9jayB0aGVuIG9ubHkgYXBwbHkgdGhhdCBTQUNLIGJsb2NrCisJICogYW5kIHVzZSByZXRyYW5zIHF1ZXVlIGhpbnRpbmcgb3RoZXJ3aXNlIHNsb3dwYXRoICovCisJZmxhZyA9IDE7CisJZm9yIChpID0gMDsgaTwgbnVtX3NhY2tzOyBpKyspIHsKKwkJX191MzIgc3RhcnRfc2VxID0gbnRvaGwoc3BbaV0uc3RhcnRfc2VxKTsKKwkJX191MzIgZW5kX3NlcSA9CSBudG9obChzcFtpXS5lbmRfc2VxKTsKKworCQlpZiAoaSA9PSAwKXsKKwkJCWlmICh0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLnN0YXJ0X3NlcSAhPSBzdGFydF9zZXEpCisJCQkJZmxhZyA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoKHRwLT5yZWN2X3NhY2tfY2FjaGVbaV0uc3RhcnRfc2VxICE9IHN0YXJ0X3NlcSkgfHwKKwkJCSAgICAodHAtPnJlY3Zfc2Fja19jYWNoZVtpXS5lbmRfc2VxICE9IGVuZF9zZXEpKQorCQkJCWZsYWcgPSAwOworCQl9CisJCXRwLT5yZWN2X3NhY2tfY2FjaGVbaV0uc3RhcnRfc2VxID0gc3RhcnRfc2VxOworCQl0cC0+cmVjdl9zYWNrX2NhY2hlW2ldLmVuZF9zZXEgPSBlbmRfc2VxOwogCiAJCS8qIENoZWNrIGZvciBELVNBQ0suICovCiAJCWlmIChpID09IDApIHsKQEAgLTk2MiwxNSArOTU0LDU4IEBACiAJCQlpZiAoYmVmb3JlKGFjaywgcHJpb3Jfc25kX3VuYSAtIHRwLT5tYXhfd2luZG93KSkKIAkJCQlyZXR1cm4gMDsKIAkJfQorCX0KKworCWlmIChmbGFnKQorCQludW1fc2Fja3MgPSAxOworCWVsc2UgeworCQlpbnQgajsKKwkJdHAtPmZhc3RwYXRoX3NrYl9oaW50ID0gTlVMTDsKKworCQkvKiBvcmRlciBTQUNLIGJsb2NrcyB0byBhbGxvdyBpbiBvcmRlciB3YWxrIG9mIHRoZSByZXRyYW5zIHF1ZXVlICovCisJCWZvciAoaSA9IG51bV9zYWNrcy0xOyBpID4gMDsgaS0tKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKXsKKwkJCQlpZiAoYWZ0ZXIobnRvaGwoc3Bbal0uc3RhcnRfc2VxKSwKKwkJCQkJICBudG9obChzcFtqKzFdLnN0YXJ0X3NlcSkpKXsKKwkJCQkJc3Bbal0uc3RhcnRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqKzFdLnN0YXJ0X3NlcSk7CisJCQkJCXNwW2pdLmVuZF9zZXEgPSBodG9ubCh0cC0+cmVjdl9zYWNrX2NhY2hlW2orMV0uZW5kX3NlcSk7CisJCQkJCXNwW2orMV0uc3RhcnRfc2VxID0gaHRvbmwodHAtPnJlY3Zfc2Fja19jYWNoZVtqXS5zdGFydF9zZXEpOworCQkJCQlzcFtqKzFdLmVuZF9zZXEgPSBodG9ubCh0cC0+cmVjdl9zYWNrX2NhY2hlW2pdLmVuZF9zZXEpOworCQkJCX0KKworCQkJfQorCQl9CisJfQorCisJLyogY2xlYXIgZmxhZyBhcyB1c2VkIGZvciBkaWZmZXJlbnQgcHVycG9zZSBpbiBmb2xsb3dpbmcgY29kZSAqLworCWZsYWcgPSAwOworCisJZm9yIChpPTA7IGk8bnVtX3NhY2tzOyBpKyssIHNwKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJX191MzIgc3RhcnRfc2VxID0gbnRvaGwoc3AtPnN0YXJ0X3NlcSk7CisJCV9fdTMyIGVuZF9zZXEgPSBudG9obChzcC0+ZW5kX3NlcSk7CisJCWludCBmYWNrX2NvdW50OworCisJCS8qIFVzZSBTQUNLIGZhc3RwYXRoIGhpbnQgaWYgdmFsaWQgKi8KKwkJaWYgKHRwLT5mYXN0cGF0aF9za2JfaGludCkgeworCQkJc2tiID0gdHAtPmZhc3RwYXRoX3NrYl9oaW50OworCQkJZmFja19jb3VudCA9IHRwLT5mYXN0cGF0aF9jbnRfaGludDsKKwkJfSBlbHNlIHsKKwkJCXNrYiA9IHNrLT5za193cml0ZV9xdWV1ZS5uZXh0OworCQkJZmFja19jb3VudCA9IDA7CisJCX0KIAogCQkvKiBFdmVudCAiQiIgaW4gdGhlIGNvbW1lbnQgYWJvdmUuICovCiAJCWlmIChhZnRlcihlbmRfc2VxLCB0cC0+aGlnaF9zZXEpKQogCQkJZmxhZyB8PSBGTEFHX0RBVEFfTE9TVDsKIAotCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWUoc2tiLCBzaykgeworCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKSB7CiAJCQlpbnQgaW5fc2FjaywgcGNvdW50OwogCQkJdTggc2Fja2VkOwogCisJCQl0cC0+ZmFzdHBhdGhfc2tiX2hpbnQgPSBza2I7CisJCQl0cC0+ZmFzdHBhdGhfY250X2hpbnQgPSBmYWNrX2NvdW50OworCiAJCQkvKiBUaGUgcmV0cmFuc21pc3Npb24gcXVldWUgaXMgYWx3YXlzIGluIG9yZGVyLCBzbwogCQkJICogd2UgY2FuIHNob3J0LWNpcmN1aXQgdGhlIHdhbGsgZWFybHkuCiAJCQkgKi8KQEAgLTEwNDUsNiArMTA4MCw5IEBACiAJCQkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCAmPSB+KFRDUENCX0xPU1R8VENQQ0JfU0FDS0VEX1JFVFJBTlMpOwogCQkJCQkJdHAtPmxvc3Rfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAJCQkJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKKworCQkJCQkJLyogY2xlYXIgbG9zdCBoaW50ICovCisJCQkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQkvKiBOZXcgc2FjayBmb3Igbm90IHJldHJhbnNtaXR0ZWQgZnJhbWUsCkBAIC0xMDU3LDYgKzEwOTUsOSBAQAogCQkJCQlpZiAoc2Fja2VkICYgVENQQ0JfTE9TVCkgewogCQkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gflRDUENCX0xPU1Q7CiAJCQkJCQl0cC0+bG9zdF9vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKKworCQkJCQkJLyogY2xlYXIgbG9zdCBoaW50ICovCisJCQkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQkJCX0KIAkJCQl9CiAKQEAgLTEwODAsNiArMTEyMSw3IEBACiAJCQkgICAgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJlRDUENCX1NBQ0tFRF9SRVRSQU5TKSkgewogCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9TQUNLRURfUkVUUkFOUzsKIAkJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKKwkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQl9CiAJCX0KIAl9CkBAIC0xMTA3LDYgKzExNDksOSBAQAogCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICY9IH5UQ1BDQl9TQUNLRURfUkVUUkFOUzsKIAkJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAorCQkJCS8qIGNsZWFyIGxvc3QgaGludCAqLworCQkJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKKwogCQkJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJihUQ1BDQl9MT1NUfFRDUENCX1NBQ0tFRF9BQ0tFRCkpKSB7CiAJCQkJCXRwLT5sb3N0X291dCArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCQkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9MT1NUOwpAQCAtMTIxNCw2ICsxMjU5LDggQEAKIAl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfTG9zcyk7CiAJdHAtPmhpZ2hfc2VxID0gdHAtPmZydG9faGlnaG1hcms7CiAJVENQX0VDTl9xdWV1ZV9jd3IodHApOworCisJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOwogfQogCiB2b2lkIHRjcF9jbGVhcl9yZXRyYW5zKHN0cnVjdCB0Y3Bfc29jayAqdHApCkBAIC0xMjUxLDYgKzEyOTgsNyBAQAogCXRwLT5zbmRfY3duZF9jbnQgICA9IDA7CiAJdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7CiAKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCXRjcF9jbGVhcl9yZXRyYW5zKHRwKTsKIAogCS8qIFB1c2ggdW5kbyBtYXJrZXIsIGlmIGl0IHdhcyBwbGFpbiBSVE8gYW5kIG5vdGhpbmcKQEAgLTEyNzksNiArMTMyNyw4IEBACiAJdGNwX3NldF9jYV9zdGF0ZShzaywgVENQX0NBX0xvc3MpOwogCXRwLT5oaWdoX3NlcSA9IHRwLT5zbmRfbnh0OwogCVRDUF9FQ05fcXVldWVfY3dyKHRwKTsKKworCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIH0KIAogc3RhdGljIGludCB0Y3BfY2hlY2tfc2Fja19yZW5lZ2luZyhzdHJ1Y3Qgc29jayAqc2spCkBAIC0xNTAzLDE3ICsxNTUzLDM3IEBACiAJCQkgICAgICAgaW50IHBhY2tldHMsIHUzMiBoaWdoX3NlcSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBjbnQgPSBwYWNrZXRzOworCWludCBjbnQ7CiAKLQlCVUdfVFJBUChjbnQgPD0gdHAtPnBhY2tldHNfb3V0KTsKKwlCVUdfVFJBUChwYWNrZXRzIDw9IHRwLT5wYWNrZXRzX291dCk7CisJaWYgKHRwLT5sb3N0X3NrYl9oaW50KSB7CisJCXNrYiA9IHRwLT5sb3N0X3NrYl9oaW50OworCQljbnQgPSB0cC0+bG9zdF9jbnRfaGludDsKKwl9IGVsc2UgeworCQlza2IgPSBzay0+c2tfd3JpdGVfcXVldWUubmV4dDsKKwkJY250ID0gMDsKKwl9CiAKLQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWUoc2tiLCBzaykgewotCQljbnQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKLQkJaWYgKGNudCA8IDAgfHwgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCBoaWdoX3NlcSkpCisJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQkvKiBUT0RPOiBkbyB0aGlzIGJldHRlciAqLworCQkvKiB0aGlzIGlzIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuLi4gKi8KKwkJdHAtPmxvc3Rfc2tiX2hpbnQgPSBza2I7CisJCXRwLT5sb3N0X2NudF9oaW50ID0gY250OworCQljbnQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKKwkJaWYgKGNudCA+IHBhY2tldHMgfHwgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCBoaWdoX3NlcSkpCiAJCQlicmVhazsKIAkJaWYgKCEoVENQX1NLQl9DQihza2IpLT5zYWNrZWQmVENQQ0JfVEFHQklUUykpIHsKIAkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkIHw9IFRDUENCX0xPU1Q7CiAJCQl0cC0+bG9zdF9vdXQgKz0gdGNwX3NrYl9wY291bnQoc2tiKTsKKworCQkJLyogY2xlYXIgeG1pdF9yZXRyYW5zbWl0X3F1ZXVlIGhpbnRzCisJCQkgKiAgaWYgdGhpcyBpcyBiZXlvbmQgaGludCAqLworCQkJaWYodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQgIT0gTlVMTCAmJgorCQkJICAgYmVmb3JlKFRDUF9TS0JfQ0Ioc2tiKS0+c2VxLAorCQkJCSAgVENQX1NLQl9DQih0cC0+cmV0cmFuc21pdF9za2JfaGludCktPnNlcSkpIHsKKworCQkJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKKwkJCX0KIAkJfQogCX0KIAl0Y3Bfc3luY19sZWZ0X291dCh0cCk7CkBAIC0xNTQwLDEzICsxNjEwLDI4IEBACiAJaWYgKHRjcF9oZWFkX3RpbWVkb3V0KHNrLCB0cCkpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWUoc2tiLCBzaykgewotCQkJaWYgKHRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikgJiYKLQkJCSAgICAhKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkJlRDUENCX1RBR0JJVFMpKSB7CisJCXNrYiA9IHRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID8gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQKKwkJCTogc2stPnNrX3dyaXRlX3F1ZXVlLm5leHQ7CisKKwkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykgeworCQkJaWYgKCF0Y3Bfc2tiX3RpbWVkb3V0KHNrLCBza2IpKQorCQkJCWJyZWFrOworCisJCQlpZiAoIShUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCZUQ1BDQl9UQUdCSVRTKSkgewogCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkIHw9IFRDUENCX0xPU1Q7CiAJCQkJdHAtPmxvc3Rfb3V0ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisKKwkJCQkvKiBjbGVhciB4bWl0X3JldHJhbnMgaGludCAqLworCQkJCWlmICh0cC0+cmV0cmFuc21pdF9za2JfaGludCAmJgorCQkJCSAgICBiZWZvcmUoVENQX1NLQl9DQihza2IpLT5zZXEsCisJCQkJCSAgIFRDUF9TS0JfQ0IodHAtPnJldHJhbnNtaXRfc2tiX2hpbnQpLT5zZXEpKQorCisJCQkJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gTlVMTDsKIAkJCX0KIAkJfQorCisJCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gc2tiOworCiAJCXRjcF9zeW5jX2xlZnRfb3V0KHRwKTsKIAl9CiB9CkBAIC0xNjI2LDYgKzE3MTEsMTAgQEAKIAl9CiAJdGNwX21vZGVyYXRlX2N3bmQodHApOwogCXRwLT5zbmRfY3duZF9zdGFtcCA9IHRjcF90aW1lX3N0YW1wOworCisJLyogVGhlcmUgaXMgc29tZXRoaW5nIHNjcmV3eSBnb2luZyBvbiB3aXRoIHRoZSByZXRyYW5zIGhpbnRzIGFmdGVyCisJICAgYW4gdW5kbyAqLworCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdGNwX21heV91bmRvKHN0cnVjdCB0Y3Bfc29jayAqdHApCkBAIC0xNzA5LDYgKzE3OTgsOSBAQAogCQlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWUoc2tiLCBzaykgewogCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gflRDUENCX0xPU1Q7CiAJCX0KKworCQljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CisKIAkJREJHVU5ETyhzaywgdHAsICJwYXJ0aWFsIGxvc3MiKTsKIAkJdHAtPmxvc3Rfb3V0ID0gMDsKIAkJdHAtPmxlZnRfb3V0ID0gdHAtPnNhY2tlZF9vdXQ7CkBAIC0xOTA4LDYgKzIwMDAsNyBAQAogCQkJVENQX0VDTl9xdWV1ZV9jd3IodHApOwogCQl9CiAKKwkJdHAtPmJ5dGVzX2Fja2VkID0gMDsKIAkJdHAtPnNuZF9jd25kX2NudCA9IDA7CiAJCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9SZWNvdmVyeSk7CiAJfQpAQCAtMTkxOSw5ICsyMDEyLDkgQEAKIH0KIAogLyogUmVhZCBkcmFmdC1pZXRmLXRjcGx3LWhpZ2gtcGVyZm9ybWFuY2UgYmVmb3JlIG11Y2tpbmcKLSAqIHdpdGggdGhpcyBjb2RlLiAoU3VwZXJjZWVkcyBSRkMxMzIzKQorICogd2l0aCB0aGlzIGNvZGUuIChTdXBlcnNlZGVzIFJGQzEzMjMpCiAgKi8KLXN0YXRpYyB2b2lkIHRjcF9hY2tfc2F3X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIHUzMiAqdXNydHQsIGludCBmbGFnKQorc3RhdGljIHZvaWQgdGNwX2Fja19zYXdfdHN0YW1wKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWcpCiB7CiAJLyogUlRUTSBSdWxlOiBBIFRTZWNyIHZhbHVlIHJlY2VpdmVkIGluIGEgc2VnbWVudCBpcyB1c2VkIHRvCiAJICogdXBkYXRlIHRoZSBhdmVyYWdlZCBSVFQgbWVhc3VyZW1lbnQgb25seSBpZiB0aGUgc2VnbWVudApAQCAtMTkzMiw3ICsyMDI1LDcgQEAKIAkgKiAxOTk4LzA0LzEwIEFuZHJleSBWLiBTYXZvY2hraW4gPHNhd0Btc3UucnU+CiAJICoKIAkgKiBDaGFuZ2VkOiByZXNldCBiYWNrb2ZmIGFzIHNvb24gYXMgd2Ugc2VlIHRoZSBmaXJzdCB2YWxpZCBzYW1wbGUuCi0JICogSWYgd2UgZG8gbm90LCB3ZSBnZXQgc3Ryb25nbHkgb3ZlcnN0aW1hdGVkIHJ0by4gV2l0aCB0aW1lc3RhbXBzCisJICogSWYgd2UgZG8gbm90LCB3ZSBnZXQgc3Ryb25nbHkgb3ZlcmVzdGltYXRlZCBydG8uIFdpdGggdGltZXN0YW1wcwogCSAqIHNhbXBsZXMgYXJlIGFjY2VwdGVkIGV2ZW4gZnJvbSB2ZXJ5IG9sZCBzZWdtZW50czogZi5lLiwgd2hlbiBydHQ9MQogCSAqIGluY3JlYXNlcyB0byA4LCB3ZSByZXRyYW5zbWl0IDUgdGltZXMgYW5kIGFmdGVyIDggc2Vjb25kcyBkZWxheWVkCiAJICogYW5zd2VyIGFycml2ZXMgcnRvIGJlY29tZXMgMTIwIHNlY29uZHMhIElmIGF0IGxlYXN0IG9uZSBvZiBzZWdtZW50cwpAQCAtMTk0MCwxMyArMjAzMywxMyBAQAogCSAqLwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWNvbnN0IF9fdTMyIHNlcV9ydHQgPSB0Y3BfdGltZV9zdGFtcCAtIHRwLT5yeF9vcHQucmN2X3RzZWNyOwotCXRjcF9ydHRfZXN0aW1hdG9yKHNrLCBzZXFfcnR0LCB1c3J0dCk7CisJdGNwX3J0dF9lc3RpbWF0b3Ioc2ssIHNlcV9ydHQpOwogCXRjcF9zZXRfcnRvKHNrKTsKIAlpbmV0X2NzayhzayktPmljc2tfYmFja29mZiA9IDA7CiAJdGNwX2JvdW5kX3J0byhzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcF9hY2tfbm9fdHN0YW1wKHN0cnVjdCBzb2NrICpzaywgdTMyIHNlcV9ydHQsIHUzMiAqdXNydHQsIGludCBmbGFnKQorc3RhdGljIHZvaWQgdGNwX2Fja19ub190c3RhbXAoc3RydWN0IHNvY2sgKnNrLCB1MzIgc2VxX3J0dCwgaW50IGZsYWcpCiB7CiAJLyogV2UgZG9uJ3QgaGF2ZSBhIHRpbWVzdGFtcC4gQ2FuIG9ubHkgdXNlCiAJICogcGFja2V0cyB0aGF0IGFyZSBub3QgcmV0cmFuc21pdHRlZCB0byBkZXRlcm1pbmUKQEAgLTE5NjAsMjEgKzIwNTMsMjEgQEAKIAlpZiAoZmxhZyAmIEZMQUdfUkVUUkFOU19EQVRBX0FDS0VEKQogCQlyZXR1cm47CiAKLQl0Y3BfcnR0X2VzdGltYXRvcihzaywgc2VxX3J0dCwgdXNydHQpOworCXRjcF9ydHRfZXN0aW1hdG9yKHNrLCBzZXFfcnR0KTsKIAl0Y3Bfc2V0X3J0byhzayk7CiAJaW5ldF9jc2soc2spLT5pY3NrX2JhY2tvZmYgPSAwOwogCXRjcF9ib3VuZF9ydG8oc2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2Fja191cGRhdGVfcnR0KHN0cnVjdCBzb2NrICpzaywgY29uc3QgaW50IGZsYWcsCi0JCQkJICAgICAgY29uc3QgczMyIHNlcV9ydHQsIHUzMiAqdXNydHQpCisJCQkJICAgICAgY29uc3QgczMyIHNlcV9ydHQpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJLyogTm90ZSB0aGF0IHBlZXIgTUFZIHNlbmQgemVybyBlY2hvLiBJbiB0aGlzIGNhc2UgaXQgaXMgaWdub3JlZC4gKHJmYzEzMjMpICovCiAJaWYgKHRwLT5yeF9vcHQuc2F3X3RzdGFtcCAmJiB0cC0+cnhfb3B0LnJjdl90c2VjcikKLQkJdGNwX2Fja19zYXdfdHN0YW1wKHNrLCB1c3J0dCwgZmxhZyk7CisJCXRjcF9hY2tfc2F3X3RzdGFtcChzaywgZmxhZyk7CiAJZWxzZSBpZiAoc2VxX3J0dCA+PSAwKQotCQl0Y3BfYWNrX25vX3RzdGFtcChzaywgc2VxX3J0dCwgdXNydHQsIGZsYWcpOworCQl0Y3BfYWNrX25vX3RzdGFtcChzaywgc2VxX3J0dCwgZmxhZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfY29uZ19hdm9pZChzdHJ1Y3Qgc29jayAqc2ssIHUzMiBhY2ssIHUzMiBydHQsCkBAIC0yMDU0LDIwICsyMTQ3LDI3IEBACiAJcmV0dXJuIGFja2VkOwogfQogCitzdGF0aWMgaW5saW5lIHUzMiB0Y3BfdXNydHQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0diwgbm93OworCisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCXNrYl9nZXRfdGltZXN0YW1wKHNrYiwgJnR2KTsKKwlyZXR1cm4gKG5vdy50dl9zZWMgLSB0di50dl9zZWMpICogMTAwMDAwMCArIChub3cudHZfdXNlYyAtIHR2LnR2X3VzZWMpOworfQogCiAvKiBSZW1vdmUgYWNrbm93bGVkZ2VkIGZyYW1lcyBmcm9tIHRoZSByZXRyYW5zbWlzc2lvbiBxdWV1ZS4gKi8KLXN0YXRpYyBpbnQgdGNwX2NsZWFuX3J0eF9xdWV1ZShzdHJ1Y3Qgc29jayAqc2ssIF9fczMyICpzZXFfcnR0X3AsIHMzMiAqc2VxX3VzcnR0KQorc3RhdGljIGludCB0Y3BfY2xlYW5fcnR4X3F1ZXVlKHN0cnVjdCBzb2NrICpzaywgX19zMzIgKnNlcV9ydHRfcCkKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX3UzMiBub3cgPSB0Y3BfdGltZV9zdGFtcDsKIAlpbnQgYWNrZWQgPSAwOwogCV9fczMyIHNlcV9ydHQgPSAtMTsKLQlzdHJ1Y3QgdGltZXZhbCB1c25vdzsKIAl1MzIgcGt0c19hY2tlZCA9IDA7Ci0KLQlpZiAoc2VxX3VzcnR0KQotCQlkb19nZXR0aW1lb2ZkYXkoJnVzbm93KTsKKwl2b2lkICgqcnR0X3NhbXBsZSkoc3RydWN0IHNvY2sgKnNrLCB1MzIgdXNydHQpCisJCT0gaWNzay0+aWNza19jYV9vcHMtPnJ0dF9zYW1wbGU7CiAKIAl3aGlsZSAoKHNrYiA9IHNrYl9wZWVrKCZzay0+c2tfd3JpdGVfcXVldWUpKSAmJgogCSAgICAgICBza2IgIT0gc2stPnNrX3NlbmRfaGVhZCkgewpAQCAtMjEwNywxNiArMjIwNywxMSBAQAogCQkJCQl0cC0+cmV0cmFuc19vdXQgLT0gdGNwX3NrYl9wY291bnQoc2tiKTsKIAkJCQlhY2tlZCB8PSBGTEFHX1JFVFJBTlNfREFUQV9BQ0tFRDsKIAkJCQlzZXFfcnR0ID0gLTE7Ci0JCQl9IGVsc2UgaWYgKHNlcV9ydHQgPCAwKQorCQkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkgewogCQkJCXNlcV9ydHQgPSBub3cgLSBzY2ItPndoZW47Ci0JCQlpZiAoc2VxX3VzcnR0KSB7Ci0JCQkJc3RydWN0IHRpbWV2YWwgdHY7Ci0JCQkKLQkJCQlza2JfZ2V0X3RpbWVzdGFtcChza2IsICZ0dik7Ci0JCQkJKnNlcV91c3J0dCA9ICh1c25vdy50dl9zZWMgLSB0di50dl9zZWMpICogMTAwMDAwMAotCQkJCQkrICh1c25vdy50dl91c2VjIC0gdHYudHZfdXNlYyk7CisJCQkJaWYgKHJ0dF9zYW1wbGUpCisJCQkJCSgqcnR0X3NhbXBsZSkoc2ssIHRjcF91c3J0dChza2IpKTsKIAkJCX0KLQogCQkJaWYgKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKIAkJCQl0cC0+c2Fja2VkX291dCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCQkJaWYgKHNhY2tlZCAmIFRDUENCX0xPU1QpCkBAIC0yMTI2LDE3ICsyMjIxLDIwIEBACiAJCQkJICAgICFiZWZvcmUoc2NiLT5lbmRfc2VxLCB0cC0+c25kX3VwKSkKIAkJCQkJdHAtPnVyZ19tb2RlID0gMDsKIAkJCX0KLQkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkKKwkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkgewogCQkJc2VxX3J0dCA9IG5vdyAtIHNjYi0+d2hlbjsKKwkJCWlmIChydHRfc2FtcGxlKQorCQkJCSgqcnR0X3NhbXBsZSkoc2ssIHRjcF91c3J0dChza2IpKTsKKwkJfQogCQl0Y3BfZGVjX3Bjb3VudF9hcHByb3goJnRwLT5mYWNrZXRzX291dCwgc2tiKTsKIAkJdGNwX3BhY2tldHNfb3V0X2RlYyh0cCwgc2tiKTsKIAkJX19za2JfdW5saW5rKHNrYiwgJnNrLT5za193cml0ZV9xdWV1ZSk7CiAJCXNrX3N0cmVhbV9mcmVlX3NrYihzaywgc2tiKTsKKwkJY2xlYXJfYWxsX3JldHJhbnNfaGludHModHApOwogCX0KIAogCWlmIChhY2tlZCZGTEFHX0FDS0VEKSB7Ci0JCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKLQkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBhY2tlZCwgc2VxX3J0dCwgc2VxX3VzcnR0KTsKKwkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBhY2tlZCwgc2VxX3J0dCk7CiAJCXRjcF9hY2tfcGFja2V0c19vdXQoc2ssIHRwKTsKIAogCQlpZiAoaWNzay0+aWNza19jYV9vcHMtPnBrdHNfYWNrZWQpCkBAIC0yMjg0LDcgKzIzODIsNyBAQAogCX0KIAogCS8qIEYtUlRPIGFmZmVjdHMgb24gdHdvIG5ldyBBQ0tzIGZvbGxvd2luZyBSVE8uCi0JICogQXQgbGF0ZXN0IG9uIHRoaXJkIEFDSyB0aGUgVENQIGJlaGF2b3IgaXMgYmFjayB0byBub3JtYWwuCisJICogQXQgbGF0ZXN0IG9uIHRoaXJkIEFDSyB0aGUgVENQIGJlaGF2aW9yIGlzIGJhY2sgdG8gbm9ybWFsLgogCSAqLwogCXRwLT5mcnRvX2NvdW50ZXIgPSAodHAtPmZydG9fY291bnRlciArIDEpICUgMzsKIH0KQEAgLTIyOTksNyArMjM5Nyw2IEBACiAJdTMyIGFjayA9IFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcTsKIAl1MzIgcHJpb3JfaW5fZmxpZ2h0OwogCXMzMiBzZXFfcnR0OwotCXMzMiBzZXFfdXNydHQgPSAwOwogCWludCBwcmlvcl9wYWNrZXRzOwogCiAJLyogSWYgdGhlIGFjayBpcyBuZXdlciB0aGFuIHNlbnQgb3Igb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCkBAIC0yMzExLDYgKzI0MDgsOSBAQAogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZ290byBvbGRfYWNrOwogCisJaWYgKHN5c2N0bF90Y3BfYWJjICYmIGljc2stPmljc2tfY2Ffc3RhdGUgPCBUQ1BfQ0FfQ1dSKQorCQl0cC0+Ynl0ZXNfYWNrZWQgKz0gYWNrIC0gcHJpb3Jfc25kX3VuYTsKKwogCWlmICghKGZsYWcmRkxBR19TTE9XUEFUSCkgJiYgYWZ0ZXIoYWNrLCBwcmlvcl9zbmRfdW5hKSkgewogCQkvKiBXaW5kb3cgaXMgY29uc3RhbnQsIHB1cmUgZm9yd2FyZCBhZHZhbmNlLgogCQkgKiBObyBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQuCkBAIC0yMzUyLDE0ICsyNDUyLDEzIEBACiAJcHJpb3JfaW5fZmxpZ2h0ID0gdGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKTsKIAogCS8qIFNlZSBpZiB3ZSBjYW4gdGFrZSBhbnl0aGluZyBvZmYgb2YgdGhlIHJldHJhbnNtaXQgcXVldWUuICovCi0JZmxhZyB8PSB0Y3BfY2xlYW5fcnR4X3F1ZXVlKHNrLCAmc2VxX3J0dCwKLQkJCQkgICAgaWNzay0+aWNza19jYV9vcHMtPnJ0dF9zYW1wbGUgPyAmc2VxX3VzcnR0IDogTlVMTCk7CisJZmxhZyB8PSB0Y3BfY2xlYW5fcnR4X3F1ZXVlKHNrLCAmc2VxX3J0dCk7CiAKIAlpZiAodHAtPmZydG9fY291bnRlcikKIAkJdGNwX3Byb2Nlc3NfZnJ0byhzaywgcHJpb3Jfc25kX3VuYSk7CiAKIAlpZiAodGNwX2Fja19pc19kdWJpb3VzKHNrLCBmbGFnKSkgewotCQkvKiBBZHZhbnZlIENXTkQsIGlmIHN0YXRlIGFsbG93cyB0aGlzLiAqLworCQkvKiBBZHZhbmNlIENXTkQsIGlmIHN0YXRlIGFsbG93cyB0aGlzLiAqLwogCQlpZiAoKGZsYWcgJiBGTEFHX0RBVEFfQUNLRUQpICYmIHRjcF9tYXlfcmFpc2VfY3duZChzaywgZmxhZykpCiAJCQl0Y3BfY29uZ19hdm9pZChzaywgYWNrLCAgc2VxX3J0dCwgcHJpb3JfaW5fZmxpZ2h0LCAwKTsKIAkJdGNwX2Zhc3RyZXRyYW5zX2FsZXJ0KHNrLCBwcmlvcl9zbmRfdW5hLCBwcmlvcl9wYWNrZXRzLCBmbGFnKTsKQEAgLTMxNDgsNyArMzI0Nyw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCS8qIEZpcnN0LCBjaGVjayB0aGF0IHF1ZXVlIGlzIGNvbGxhcHNhYmxlIGFuZCBmaW5kCisJLyogRmlyc3QsIGNoZWNrIHRoYXQgcXVldWUgaXMgY29sbGFwc2libGUgYW5kIGZpbmQKIAkgKiB0aGUgcG9pbnQgd2hlcmUgY29sbGFwc2luZyBjYW4gYmUgdXNlZnVsLiAqLwogCWZvciAoc2tiID0gaGVhZDsgc2tiICE9IHRhaWw7ICkgewogCQkvKiBObyBuZXcgYml0cz8gSXQgaXMgcG9zc2libGUgb24gb2ZvIHF1ZXVlLiAqLwpAQCAtMzQ1Niw3ICszNTU1LDcgQEAKIAogLyoKICAqCVRoaXMgcm91dGluZSBpcyBvbmx5IGNhbGxlZCB3aGVuIHdlIGhhdmUgdXJnZW50IGRhdGEKLSAqCXNpZ25hbGxlZC4gSXRzIHRoZSAnc2xvdycgcGFydCBvZiB0Y3BfdXJnLiBJdCBjb3VsZCBiZQorICoJc2lnbmFsZWQuIEl0cyB0aGUgJ3Nsb3cnIHBhcnQgb2YgdGNwX3VyZy4gSXQgY291bGQgYmUKICAqCW1vdmVkIGlubGluZSBub3cgYXMgdGNwX3VyZyBpcyBvbmx5IGNhbGxlZCBmcm9tIG9uZQogICoJcGxhY2UuIFdlIGhhbmRsZSBVUkdlbnQgZGF0YSB3cm9uZy4gV2UgaGF2ZSB0byAtIGFzCiAgKglCU0Qgc3RpbGwgZG9lc24ndCB1c2UgdGhlIGNvcnJlY3Rpb24gZnJvbSBSRkM5NjEuCkBAIC0zNTAxLDcgKzM2MDAsNyBAQAogCSAqIHVyZ2VudC4gVG8gZG8gdGhpcyByZXF1aXJlcyBzb21lIGNhcmUuIFdlIGNhbm5vdCBqdXN0IGlnbm9yZQogCSAqIHRwLT5jb3BpZWRfc2VxIHNpbmNlIHdlIHdvdWxkIHJlYWQgdGhlIGxhc3QgdXJnZW50IGJ5dGUgYWdhaW4KIAkgKiBhcyBkYXRhLCBub3IgY2FuIHdlIGFsdGVyIGNvcGllZF9zZXEgdW50aWwgdGhpcyBkYXRhIGFycml2ZXMKLQkgKiBvciB3ZSBicmVhayB0aGUgc2VtYXRpY3Mgb2YgU0lPQ0FUTUFSSyAoYW5kIHRodXMgc29ja2F0bWFyaygpKQorCSAqIG9yIHdlIGJyZWFrIHRoZSBzZW1hbnRpY3Mgb2YgU0lPQ0FUTUFSSyAoYW5kIHRodXMgc29ja2F0bWFyaygpKQogCSAqCiAJICogTk9URS4gRG91YmxlIER1dGNoLiBSZW5kZXJpbmcgdG8gcGxhaW4gRW5nbGlzaDogYXV0aG9yIG9mIGNvbW1lbnQKIAkgKiBhYm92ZSBkaWQgc29tZXRoaW5nIHNvcnQgb2YgCXNlbmQoIkEiLCBNU0dfT09CKTsgc2VuZCgiQiIsIE1TR19PT0IpOwpAQCAtMzY0Niw3ICszNzQ1LDcgQEAKIAl0cC0+cnhfb3B0LnNhd190c3RhbXAgPSAwOwogCiAJLyoJcHJlZF9mbGFncyBpcyAweFM/MTAgPDwgMTYgKyBzbmRfd25kCi0JICoJaWYgaGVhZGVyX3ByZWRpdGlvbiBpcyB0byBiZSBtYWRlCisJICoJaWYgaGVhZGVyX3ByZWRpY3Rpb24gaXMgdG8gYmUgbWFkZQogCSAqCSdTJyB3aWxsIGFsd2F5cyBiZSB0cC0+dGNwX2hlYWRlcl9sZW4gPj4gMgogCSAqCSc/JyB3aWxsIGJlIDAgZm9yIHRoZSBmYXN0IHBhdGgsIG90aGVyd2lzZSBwcmVkX2ZsYWdzIGlzIDAgdG8KIAkgKiAgdHVybiBpdCBvZmYJKHdoZW4gdGhlcmUgYXJlIGhvbGVzIGluIHRoZSByZWNlaXZlIApAQCAtNDI0Miw3ICs0MzQxLDcgQEAKIAkJCQkgKi8KIAkJCQlpZiAodHAtPnJ4X29wdC5zYXdfdHN0YW1wICYmIHRwLT5yeF9vcHQucmN2X3RzZWNyICYmCiAJCQkJICAgICF0cC0+c3J0dCkKLQkJCQkJdGNwX2Fja19zYXdfdHN0YW1wKHNrLCBOVUxMLCAwKTsKKwkJCQkJdGNwX2Fja19zYXdfdHN0YW1wKHNrLCAwKTsKIAogCQkJCWlmICh0cC0+cnhfb3B0LnRzdGFtcF9vaykKIAkJCQkJdHAtPmFkdm1zcyAtPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOwpAQCAtNDM3Miw2ICs0NDcxLDcgQEAKIAogRVhQT1JUX1NZTUJPTChzeXNjdGxfdGNwX2Vjbik7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfcmVvcmRlcmluZyk7CitFWFBPUlRfU1lNQk9MKHN5c2N0bF90Y3BfYWJjKTsKIEVYUE9SVF9TWU1CT0wodGNwX3BhcnNlX29wdGlvbnMpOwogRVhQT1JUX1NZTUJPTCh0Y3BfcmN2X2VzdGFibGlzaGVkKTsKIEVYUE9SVF9TWU1CT0wodGNwX3Jjdl9zdGF0ZV9wcm9jZXNzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IDYzNGRhYmIuLjRkNTAyMWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtMzksNyArMzksNyBAQAogICoJCQkJCXJlcXVlc3Rfc29jayBoYW5kbGluZyBhbmQgbW92ZWQKICAqCQkJCQltb3N0IG9mIGl0IGludG8gdGhlIGFmIGluZGVwZW5kZW50IGNvZGUuCiAgKgkJCQkJQWRkZWQgdGFpbCBkcm9wIGFuZCBzb21lIG90aGVyIGJ1Z2ZpeGVzLgotICoJCQkJCUFkZGVkIG5ldyBsaXN0ZW4gc2VtYXRpY3MuCisgKgkJCQkJQWRkZWQgbmV3IGxpc3RlbiBzZW1hbnRpY3MuCiAgKgkJTWlrZSBNY0xhZ2FuCToJUm91dGluZyBieSBzb3VyY2UKICAqCUp1YW4gSm9zZSBDaWFybGFudGU6CQlpcF9keW5hZGRyIGJpdHMKICAqCQlBbmRpIEtsZWVuOgkJdmFyaW91cyBmaXhlcy4KQEAgLTExMTAsMjQgKzExMTAsMTggQEAKIHN0YXRpYyBpbnQgdGNwX3Y0X2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJaWYgKCF0Y3BfdjRfY2hlY2soc2tiLT5oLnRoLCBza2ItPmxlbiwgc2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJCSAgc2tiLT5uaC5pcGgtPmRhZGRyLCBza2ItPmNzdW0pKQorCQkJCSAgc2tiLT5uaC5pcGgtPmRhZGRyLCBza2ItPmNzdW0pKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJcmV0dXJuIDA7Ci0KLQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiaHcgdGNwIHY0IGNzdW0gZmFpbGVkXG4iKTsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCQl9CiAJfQorCisJc2tiLT5jc3VtID0gY3N1bV90Y3B1ZHBfbm9mb2xkKHNrYi0+bmguaXBoLT5zYWRkciwgc2tiLT5uaC5pcGgtPmRhZGRyLAorCQkJCSAgICAgICBza2ItPmxlbiwgSVBQUk9UT19UQ1AsIDApOworCiAJaWYgKHNrYi0+bGVuIDw9IDc2KSB7Ci0JCWlmICh0Y3BfdjRfY2hlY2soc2tiLT5oLnRoLCBza2ItPmxlbiwgc2tiLT5uaC5pcGgtPnNhZGRyLAotCQkJCSBza2ItPm5oLmlwaC0+ZGFkZHIsCi0JCQkJIHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpCi0JCQlyZXR1cm4gLTE7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JfSBlbHNlIHsKLQkJc2tiLT5jc3VtID0gfnRjcF92NF9jaGVjayhza2ItPmgudGgsIHNrYi0+bGVuLAotCQkJCQkgIHNrYi0+bmguaXBoLT5zYWRkciwKLQkJCQkJICBza2ItPm5oLmlwaC0+ZGFkZHIsIDApOworCQlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjE2LDEwICsxMjEwLDEwIEBACiAKIAkvKiBBbiBleHBsYW5hdGlvbiBpcyByZXF1aXJlZCBoZXJlLCBJIHRoaW5rLgogCSAqIFBhY2tldCBsZW5ndGggYW5kIGRvZmYgYXJlIHZhbGlkYXRlZCBieSBoZWFkZXIgcHJlZGljdGlvbiwKLQkgKiBwcm92aWRlZCBjYXNlIG9mIHRoLT5kb2ZmPT0wIGlzIGVsaW1pbmV0ZWQuCisJICogcHJvdmlkZWQgY2FzZSBvZiB0aC0+ZG9mZj09MCBpcyBlbGltaW5hdGVkLgogCSAqIFNvLCB3ZSBkZWZlciB0aGUgY2hlY2tzLiAqLwogCWlmICgoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkgICAgIHRjcF92NF9jaGVja3N1bV9pbml0KHNrYikgPCAwKSkKKwkgICAgIHRjcF92NF9jaGVja3N1bV9pbml0KHNrYikpKQogCQlnb3RvIGJhZF9wYWNrZXQ7CiAKIAl0aCA9IHNrYi0+aC50aDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCBiMWE2M2IyLi4xYjY2YTJhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJLyogSSBhbSBzaGFtZWQsIGJ1dCBmYWlsZWQgdG8gbWFrZSBpdCBtb3JlIGVsZWdhbnQuCiAJCSAqIFllcywgaXQgaXMgZGlyZWN0IHJlZmVyZW5jZSB0byBJUCwgd2hpY2ggaXMgaW1wb3NzaWJsZQogCQkgKiB0byBnZW5lcmFsaXplIHRvIElQdjYuIFRha2luZyBpbnRvIGFjY291bnQgdGhhdCBJUHY2Ci0JCSAqIGRvIG5vdCB1bmRlcnRzbmFkIHJlY3ljbGluZyBpbiBhbnkgY2FzZSwgaXQgbm90CisJCSAqIGRvIG5vdCB1bmRlcnN0YW5kIHJlY3ljbGluZyBpbiBhbnkgY2FzZSwgaXQgbm90CiAJCSAqIGEgYmlnIHByb2JsZW0gaW4gcHJhY3RpY2UuIC0tQU5LICovCiAJCWlmICh0dy0+dHdfZmFtaWx5ID09IEFGX0lORVQgJiYKIAkJICAgIHRjcF9kZWF0aF9yb3cuc3lzY3RsX3R3X3JlY3ljbGUgJiYgdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCAmJgpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCS8qIEluIHdpbmRvdyBzZWdtZW50LCBpdCBtYXkgYmUgb25seSByZXNldCBvciBiYXJlIGFjay4gKi8KIAogCQlpZiAodGgtPnJzdCkgewotCQkJLyogVGhpcyBpcyBUSU1FX1dBSVQgYXNzYXNpbmF0aW9uLCBpbiB0d28gZmxhdm9ycy4KKwkJCS8qIFRoaXMgaXMgVElNRV9XQUlUIGFzc2Fzc2luYXRpb24sIGluIHR3byBmbGF2b3JzLgogCQkJICogT2ggd2VsbC4uLiBub2JvZHkgaGFzIGEgc3VmZmljaWVudCBzb2x1dGlvbiB0byB0aGlzCiAJCQkgKiBwcm90b2NvbCBidWcgeWV0LgogCQkJICovCkBAIC0zODAsNiArMzgwLDcgQEAKIAkJICovCiAJCW5ld3RwLT5zbmRfY3duZCA9IDI7CiAJCW5ld3RwLT5zbmRfY3duZF9jbnQgPSAwOworCQluZXd0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCiAJCW5ld3RwLT5mcnRvX2NvdW50ZXIgPSAwOwogCQluZXd0cC0+ZnJ0b19oaWdobWFyayA9IDA7CkBAIC01NTAsNyArNTUxLDcgQEAKIAogCS8qIFJGQzc5MyBwYWdlIDM2OiAiSWYgdGhlIGNvbm5lY3Rpb24gaXMgaW4gYW55IG5vbi1zeW5jaHJvbml6ZWQgc3RhdGUgLi4uCiAJICogICAgICAgICAgICAgICAgICBhbmQgdGhlIGluY29taW5nIHNlZ21lbnQgYWNrbm93bGVkZ2VzIHNvbWV0aGluZyBub3QgeWV0Ci0JICogICAgICAgICAgICAgICAgICBzZW50ICh0aGUgc2VnbWVudCBjYXJyaWVzIGFuIHVuYWNjYXB0YWJsZSBBQ0spIC4uLgorCSAqICAgICAgICAgICAgICAgICAgc2VudCAodGhlIHNlZ21lbnQgY2FycmllcyBhbiB1bmFjY2VwdGFibGUgQUNLKSAuLi4KIAkgKiAgICAgICAgICAgICAgICAgIGEgcmVzZXQgaXMgc2VudC4iCiAJICoKIAkgKiBJbnZhbGlkIEFDSzogcmVzZXQgd2lsbCBiZSBzZW50IGJ5IGxpc3RlbmluZyBzb2NrZXQKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCBiOTA3NDU2Li4wMjljNzBkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC00MzYsNiArNDM2LDggQEAKIAl1MTYgZmxhZ3M7CiAKIAlCVUdfT04obGVuID4gc2tiLT5sZW4pOworCisgCWNsZWFyX2FsbF9yZXRyYW5zX2hpbnRzKHRwKTsKIAluc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYikgLSBsZW47CiAJaWYgKG5zaXplIDwgMCkKIAkJbnNpemUgPSAwOwpAQCAtNTk5LDcgKzYwMSw3IEBACiAgICBmb3IgVENQIG9wdGlvbnMsIGJ1dCBpbmNsdWRlcyBvbmx5IGJhcmUgVENQIGhlYWRlci4KIAogICAgdHAtPnJ4X29wdC5tc3NfY2xhbXAgaXMgbXNzIG5lZ290aWF0ZWQgYXQgY29ubmVjdGlvbiBzZXR1cC4KLSAgIEl0IGlzIG1pbnVtdW0gb2YgdXNlcl9tc3MgYW5kIG1zcyByZWNlaXZlZCB3aXRoIFNZTi4KKyAgIEl0IGlzIG1pbmltdW0gb2YgdXNlcl9tc3MgYW5kIG1zcyByZWNlaXZlZCB3aXRoIFNZTi4KICAgIEl0IGFsc28gZG9lcyBub3QgaW5jbHVkZSBUQ1Agb3B0aW9ucy4KIAogICAgdHAtPnBtdHVfY29va2llIGlzIGxhc3QgcG10dSwgc2VlbiBieSB0aGlzIGZ1bmN0aW9uLgpAQCAtMTE3MSw3ICsxMTczLDcgQEAKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JLyogTVNTIGZvciB0aGUgcGVlcidzIGRhdGEuICBQcmV2aW91cyB2ZXJpb25zIHVzZWQgbXNzX2NsYW1wCisJLyogTVNTIGZvciB0aGUgcGVlcidzIGRhdGEuICBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkIG1zc19jbGFtcAogCSAqIGhlcmUuICBJIGRvbid0IGtub3cgaWYgdGhlIHZhbHVlIGJhc2VkIG9uIG91ciBndWVzc2VzCiAJICogb2YgcGVlcidzIE1TUyBpcyBiZXR0ZXIgZm9yIHRoZSBwZXJmb3JtYW5jZS4gIEl0J3MgbW9yZSBjb3JyZWN0CiAJICogYnV0IG1heSBiZSB3b3JzZSBmb3IgdGhlIHBlcmZvcm1hbmNlIGJlY2F1c2Ugb2YgcmN2X21zcwpAQCAtMTI2MCw3ICsxMjYyLDEwIEBACiAJCUJVR19PTih0Y3Bfc2tiX3Bjb3VudChza2IpICE9IDEgfHwKIAkJICAgICAgIHRjcF9za2JfcGNvdW50KG5leHRfc2tiKSAhPSAxKTsKIAotCQkvKiBPay4gIFdlIHdpbGwgYmUgYWJsZSB0byBjb2xsYXBzZSB0aGUgcGFja2V0LiAqLworCQkvKiBjaGFuZ2luZyB0cmFuc21pdCBxdWV1ZSB1bmRlciB1cyBzbyBjbGVhciBoaW50cyAqLworCQljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CisKKwkJLyogT2suCVdlIHdpbGwgYmUgYWJsZSB0byBjb2xsYXBzZSB0aGUgcGFja2V0LiAqLwogCQlfX3NrYl91bmxpbmsobmV4dF9za2IsICZzay0+c2tfd3JpdGVfcXVldWUpOwogCiAJCW1lbWNweShza2JfcHV0KHNrYiwgbmV4dF9za2Jfc2l6ZSksIG5leHRfc2tiLT5kYXRhLCBuZXh0X3NrYl9zaXplKTsKQEAgLTEzMzAsNiArMTMzNSw4IEBACiAJCX0KIAl9CiAKKwljbGVhcl9hbGxfcmV0cmFuc19oaW50cyh0cCk7CisKIAlpZiAoIWxvc3QpCiAJCXJldHVybjsKIApAQCAtMTM2MSw3ICsxMzY4LDcgQEAKIAlpbnQgZXJyOwogCiAJLyogRG8gbm90IHNlbnQgbW9yZSB0aGFuIHdlIHF1ZXVlZC4gMS80IGlzIHJlc2VydmVkIGZvciBwb3NzaWJsZQotCSAqIGNvcHlpbmcgb3ZlcmhlYWQ6IGZyZ2FnbWVudGF0aW9uLCB0dW5uZWxpbmcsIG1hbmdsaW5nIGV0Yy4KKwkgKiBjb3B5aW5nIG92ZXJoZWFkOiBmcmFnbWVudGF0aW9uLCB0dW5uZWxpbmcsIG1hbmdsaW5nIGV0Yy4KIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSA+CiAJICAgIG1pbihzay0+c2tfd21lbV9xdWV1ZWQgKyAoc2stPnNrX3dtZW1fcXVldWVkID4+IDIpLCBzay0+c2tfc25kYnVmKSkKQEAgLTE0NjgsMTMgKzE0NzUsMjUgQEAKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcGFja2V0X2NudCA9IHRwLT5sb3N0X291dDsKKwlpbnQgcGFja2V0X2NudDsKKworCWlmICh0cC0+cmV0cmFuc21pdF9za2JfaGludCkgeworCQlza2IgPSB0cC0+cmV0cmFuc21pdF9za2JfaGludDsKKwkJcGFja2V0X2NudCA9IHRwLT5yZXRyYW5zbWl0X2NudF9oaW50OworCX1lbHNleworCQlza2IgPSBzay0+c2tfd3JpdGVfcXVldWUubmV4dDsKKwkJcGFja2V0X2NudCA9IDA7CisJfQogCiAJLyogRmlyc3QgcGFzczogcmV0cmFuc21pdCBsb3N0IHBhY2tldHMuICovCi0JaWYgKHBhY2tldF9jbnQpIHsKLQkJc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKKwlpZiAodHAtPmxvc3Rfb3V0KSB7CisJCXNrX3N0cmVhbV9mb3JfcmV0cmFuc19xdWV1ZV9mcm9tKHNrYiwgc2spIHsKIAkJCV9fdTggc2Fja2VkID0gVENQX1NLQl9DQihza2IpLT5zYWNrZWQ7CiAKKwkJCS8qIHdlIGNvdWxkIGRvIGJldHRlciB0aGFuIHRvIGFzc2lnbiBlYWNoIHRpbWUgKi8KKwkJCXRwLT5yZXRyYW5zbWl0X3NrYl9oaW50ID0gc2tiOworCQkJdHAtPnJldHJhbnNtaXRfY250X2hpbnQgPSBwYWNrZXRfY250OworCiAJCQkvKiBBc3N1bWUgdGhpcyByZXRyYW5zbWl0IHdpbGwgZ2VuZXJhdGUKIAkJCSAqIG9ubHkgb25lIHBhY2tldCBmb3IgY29uZ2VzdGlvbiB3aW5kb3cKIAkJCSAqIGNhbGN1bGF0aW9uIHB1cnBvc2VzLiAgVGhpcyB3b3JrcyBiZWNhdXNlCkBAIC0xNDg1LDEwICsxNTA0LDEyIEBACiAJCQlpZiAodGNwX3BhY2tldHNfaW5fZmxpZ2h0KHRwKSA+PSB0cC0+c25kX2N3bmQpCiAJCQkJcmV0dXJuOwogCi0JCQlpZiAoc2Fja2VkJlRDUENCX0xPU1QpIHsKKwkJCWlmIChzYWNrZWQgJiBUQ1BDQl9MT1NUKSB7CiAJCQkJaWYgKCEoc2Fja2VkJihUQ1BDQl9TQUNLRURfQUNLRUR8VENQQ0JfU0FDS0VEX1JFVFJBTlMpKSkgewotCQkJCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKQorCQkJCQlpZiAodGNwX3JldHJhbnNtaXRfc2tiKHNrLCBza2IpKSB7CisJCQkJCQl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CiAJCQkJCQlyZXR1cm47CisJCQkJCX0KIAkJCQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX0xvc3MpCiAJCQkJCQlORVRfSU5DX1NUQVRTX0JIKExJTlVYX01JQl9UQ1BGQVNUUkVUUkFOUyk7CiAJCQkJCWVsc2UKQEAgLTE1MDEsOCArMTUyMiw4IEBACiAJCQkJCQkJCQkgIFRDUF9SVE9fTUFYKTsKIAkJCQl9CiAKLQkJCQlwYWNrZXRfY250IC09IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQkJaWYgKHBhY2tldF9jbnQgPD0gMCkKKwkJCQlwYWNrZXRfY250ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CisJCQkJaWYgKHBhY2tldF9jbnQgPj0gdHAtPmxvc3Rfb3V0KQogCQkJCQlicmVhazsKIAkJCX0KIAkJfQpAQCAtMTUyOCw5ICsxNTQ5LDE4IEBACiAJaWYgKHRjcF9tYXlfc2VuZF9ub3coc2ssIHRwKSkKIAkJcmV0dXJuOwogCi0JcGFja2V0X2NudCA9IDA7CisJaWYgKHRwLT5mb3J3YXJkX3NrYl9oaW50KSB7CisJCXNrYiA9IHRwLT5mb3J3YXJkX3NrYl9oaW50OworCQlwYWNrZXRfY250ID0gdHAtPmZvcndhcmRfY250X2hpbnQ7CisJfSBlbHNleworCQlza2IgPSBzay0+c2tfd3JpdGVfcXVldWUubmV4dDsKKwkJcGFja2V0X2NudCA9IDA7CisJfQogCi0Jc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlKHNrYiwgc2spIHsKKwlza19zdHJlYW1fZm9yX3JldHJhbnNfcXVldWVfZnJvbShza2IsIHNrKSB7CisJCXRwLT5mb3J3YXJkX2NudF9oaW50ID0gcGFja2V0X2NudDsKKwkJdHAtPmZvcndhcmRfc2tiX2hpbnQgPSBza2I7CisKIAkJLyogU2ltaWxhciB0byB0aGUgcmV0cmFuc21pdCBsb29wIGFib3ZlIHdlCiAJCSAqIGNhbiBwcmV0ZW5kIHRoYXQgdGhlIHJldHJhbnNtaXR0ZWQgU0tCCiAJCSAqIHdlIHNlbmQgb3V0IGhlcmUgd2lsbCBiZSBjb21wb3NlZCBvZiBvbmUKQEAgLTE1NDcsOCArMTU3NywxMCBAQAogCQkJY29udGludWU7CiAKIAkJLyogT2ssIHJldHJhbnNtaXQgaXQuICovCi0JCWlmICh0Y3BfcmV0cmFuc21pdF9za2Ioc2ssIHNrYikpCisJCWlmICh0Y3BfcmV0cmFuc21pdF9za2Ioc2ssIHNrYikpIHsKKwkJCXRwLT5mb3J3YXJkX3NrYl9oaW50ID0gTlVMTDsKIAkJCWJyZWFrOworCQl9CiAKIAkJaWYgKHNrYiA9PSBza2JfcGVlaygmc2stPnNrX3dyaXRlX3F1ZXVlKSkKIAkJCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLApAQCAtMjA1OCwzICsyMDkwLDQgQEAKIEVYUE9SVF9TWU1CT0wodGNwX21ha2Vfc3luYWNrKTsKIEVYUE9SVF9TWU1CT0wodGNwX3NpbXBsZV9yZXRyYW5zbWl0KTsKIEVYUE9SVF9TWU1CT0wodGNwX3N5bmNfbXNzKTsKK0VYUE9SVF9TWU1CT0woc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3NjYWxhYmxlLmMgYi9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYwppbmRleCAzMjc3NzBiLi4yNmQ3NDg2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYworKysgYi9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYwpAQCAtMjAsMjAgKzIwLDIwIEBACiAJCQkJICAgIHUzMiBpbl9mbGlnaHQsIGludCBmbGFnKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisKKwlpZiAoIXRjcF9pc19jd25kX2xpbWl0ZWQoc2ssIGluX2ZsaWdodCkpCiAJCXJldHVybjsKIAotCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewotCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCWVsc2UgewogCQl0cC0+c25kX2N3bmRfY250Kys7CiAJCWlmICh0cC0+c25kX2N3bmRfY250ID4gbWluKHRwLT5zbmRfY3duZCwgVENQX1NDQUxBQkxFX0FJX0NOVCkpewotCQkJdHAtPnNuZF9jd25kKys7CisJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCXRwLT5zbmRfY3duZCsrOwogCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7CiAJCX0KIAl9Ci0JdHAtPnNuZF9jd25kID0gbWluX3QodTMyLCB0cC0+c25kX2N3bmQsIHRwLT5zbmRfY3duZF9jbGFtcCk7Ci0JdHAtPnNuZF9jd25kX3N0YW1wID0gdGNwX3RpbWVfc3RhbXA7CiB9CiAKIHN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggNDE1ZWU0Ny4uZTE4ODA5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTU4LDcgKzU4LDcgQEAKICAqIHRvIHByZXZlbnQgRG9TIGF0dGFja3MuIEl0IGlzIGNhbGxlZCB3aGVuIGEgcmV0cmFuc21pc3Npb24gdGltZW91dAogICogb3IgemVybyBwcm9iZSB0aW1lb3V0IG9jY3VycyBvbiBvcnBoYW5lZCBzb2NrZXQuCiAgKgotICogQ3JpdGVyaXVtIGlzIHN0aWxsIG5vdCBjb25maXJtZWQgZXhwZXJpbWVudGFsbHkgYW5kIG1heSBjaGFuZ2UuCisgKiBDcml0ZXJpYSBpcyBzdGlsbCBub3QgY29uZmlybWVkIGV4cGVyaW1lbnRhbGx5IGFuZCBtYXkgY2hhbmdlLgogICogV2Uga2lsbCB0aGUgc29ja2V0LCBpZjoKICAqIDEuIElmIG51bWJlciBvZiBvcnBoYW5lZCBzb2NrZXRzIGV4Y2VlZHMgYW4gYWRtaW5pc3RyYXRpdmVseSBjb25maWd1cmVkCiAgKiAgICBsaW1pdC4KQEAgLTEzMiw3ICsxMzIsNyBAQAogCQkJICAgaG9sZSBkZXRlY3Rpb24uIDotKAogCiAJCQkgICBJdCBpcyBwbGFjZSB0byBtYWtlIGl0LiBJdCBpcyBub3QgbWFkZS4gSSBkbyBub3Qgd2FudAotCQkJICAgdG8gbWFrZSBpdC4gSXQgaXMgZGlzZ3Vpc3RpbmcuIEl0IGRvZXMgbm90IHdvcmsgaW4gYW55CisJCQkgICB0byBtYWtlIGl0LiBJdCBpcyBkaXNndXN0aW5nLiBJdCBkb2VzIG5vdCB3b3JrIGluIGFueQogCQkJICAgY2FzZS4gTGV0IG1lIHRvIGNpdGUgdGhlIHNhbWUgZHJhZnQsIHdoaWNoIHJlcXVpcmVzIGZvcgogCQkJICAgdXMgdG8gaW1wbGVtZW50IHRoaXM6CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF92ZWdhcy5jIGIvbmV0L2lwdjQvdGNwX3ZlZ2FzLmMKaW5kZXggOTNjNWY5Mi4uYjdkMjk2YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3ZlZ2FzLmMKKysrIGIvbmV0L2lwdjQvdGNwX3ZlZ2FzLmMKQEAgLTIzNiw4ICsyMzYsNyBAQAogCQkJLyogV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggUlRUIHNhbXBsZXMgdG8gZG8gdGhlIFZlZ2FzCiAJCQkgKiBjYWxjdWxhdGlvbiwgc28gd2UnbGwgYmVoYXZlIGxpa2UgUmVuby4KIAkJCSAqLwotCQkJaWYgKHRwLT5zbmRfY3duZCA+IHRwLT5zbmRfc3N0aHJlc2gpCi0JCQkJdHAtPnNuZF9jd25kKys7CisJCQl0Y3BfcmVub19jb25nX2F2b2lkKHNrLCBhY2ssIHNlcV9ydHQsIGluX2ZsaWdodCwgZmxhZyk7CiAJCX0gZWxzZSB7CiAJCQl1MzIgcnR0LCB0YXJnZXRfY3duZCwgZGlmZjsKIApAQCAtMjc1LDcgKzI3NCw3IEBACiAJCQkgKi8KIAkJCWRpZmYgPSAob2xkX3duZCA8PCBWX1BBUkFNX1NISUZUKSAtIHRhcmdldF9jd25kOwogCi0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9zc3RocmVzaCkgeworCQkJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7CiAJCQkJLyogU2xvdyBzdGFydC4gICovCiAJCQkJaWYgKGRpZmYgPiBnYW1tYSkgewogCQkJCQkvKiBHb2luZyB0b28gZmFzdC4gVGltZSB0byBzbG93IGRvd24KQEAgLTI5NSw2ICsyOTQsNyBAQAogCQkJCQkJCSAgICBWX1BBUkFNX1NISUZUKSsxKTsKIAogCQkJCX0KKwkJCQl0Y3Bfc2xvd19zdGFydCh0cCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIENvbmdlc3Rpb24gYXZvaWRhbmNlLiAqLwogCQkJCXUzMiBuZXh0X3NuZF9jd25kOwpAQCAtMzI3LDM3ICszMjcsMTcgQEAKIAkJCQllbHNlIGlmIChuZXh0X3NuZF9jd25kIDwgdHAtPnNuZF9jd25kKQogCQkJCQl0cC0+c25kX2N3bmQtLTsKIAkJCX0KLQkJfQogCi0JCS8qIFdpcGUgdGhlIHNsYXRlIGNsZWFuIGZvciB0aGUgbmV4dCBSVFQuICovCi0JCXZlZ2FzLT5jbnRSVFQgPSAwOwotCQl2ZWdhcy0+bWluUlRUID0gMHg3ZmZmZmZmZjsKKwkJCWlmICh0cC0+c25kX2N3bmQgPCAyKQorCQkJCXRwLT5zbmRfY3duZCA9IDI7CisJCQllbHNlIGlmICh0cC0+c25kX2N3bmQgPiB0cC0+c25kX2N3bmRfY2xhbXApCisJCQkJdHAtPnNuZF9jd25kID0gdHAtPnNuZF9jd25kX2NsYW1wOworCQl9CiAJfQogCi0JLyogVGhlIGZvbGxvd2luZyBjb2RlIGlzIGV4ZWN1dGVkIGZvciBldmVyeSBhY2sgd2UgcmVjZWl2ZSwKLQkgKiBleGNlcHQgZm9yIGNvbmRpdGlvbnMgY2hlY2tlZCBpbiBzaG91bGRfYWR2YW5jZV9jd25kKCkKLQkgKiBiZWZvcmUgdGhlIGNhbGwgdG8gdGNwX2NvbmdfYXZvaWQoKS4gTWFpbmx5IHRoaXMgbWVhbnMgdGhhdAotCSAqIHdlIG9ubHkgZXhlY3V0ZSB0aGlzIGNvZGUgaWYgdGhlIGFjayBhY3R1YWxseSBhY2tlZCBzb21lCi0JICogZGF0YS4KLQkgKi8KLQotCS8qIElmIHdlIGFyZSBpbiBzbG93IHN0YXJ0LCBpbmNyZWFzZSBvdXIgY3duZCBpbiByZXNwb25zZSB0byB0aGlzIEFDSy4KLQkgKiAoSWYgd2UgYXJlIG5vdCBpbiBzbG93IHN0YXJ0IHRoZW4gd2UgYXJlIGluIGNvbmdlc3Rpb24gYXZvaWRhbmNlLAotCSAqIGFuZCBhZGp1c3Qgb3VyIGNvbmdlc3Rpb24gd2luZG93IG9ubHkgb25jZSBwZXIgUlRULiBTZWUgdGhlIGNvZGUKLQkgKiBhYm92ZS4pCi0JICovCi0JaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQotCQl0cC0+c25kX2N3bmQrKzsKLQotCS8qIHRvIGtlZXAgY3duZCBmcm9tIGdyb3dpbmcgd2l0aG91dCBib3VuZCAqLwotCXRwLT5zbmRfY3duZCA9IG1pbl90KHUzMiwgdHAtPnNuZF9jd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOwotCi0JLyogTWFrZSBzdXJlIHRoYXQgd2UgYXJlIG5ldmVyIHNvIHRpbWlkIGFzIHRvIHJlZHVjZSBvdXIgY3duZCBiZWxvdwotCSAqIDIgTVNTLgotCSAqCi0JICogR29pbmcgYmVsb3cgMiBNU1Mgd291bGQgcmlzayBodWdlIGRlbGF5ZWQgQUNLcyBmcm9tIG91ciByZWNlaXZlci4KLQkgKi8KLQl0cC0+c25kX2N3bmQgPSBtYXgodHAtPnNuZF9jd25kLCAyVSk7CisJLyogV2lwZSB0aGUgc2xhdGUgY2xlYW4gZm9yIHRoZSBuZXh0IFJUVC4gKi8KKwl2ZWdhcy0+Y250UlRUID0gMDsKKwl2ZWdhcy0+bWluUlRUID0gMHg3ZmZmZmZmZjsKIH0KIAogLyogRXh0cmFjdCBpbmZvIGZvciBUY3Agc29ja2V0IGluZm8gcHJvdmlkZWQgdmlhIG5ldGxpbmsuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IGUwYmQxMDEuLjI0MjJhNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC03NjEsNyArNzYxLDcgQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IF9fdWRwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdWRwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMTAwLDExICsxMTAwLDggQEAKIAlpZiAodWgtPmNoZWNrID09IDApIHsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCWlmICghdWRwX2NoZWNrKHVoLCB1bGVuLCBzYWRkciwgZGFkZHIsIHNrYi0+Y3N1bSkpCi0JCQlyZXR1cm4gMDsKLQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAidWRwIHY0IGh3IGNzdW0gZmFpbHVyZS5cbiIpOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCX0KIAlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpCiAJCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCAyM2U1NDAzLi4xYmRmMGZiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC01ODUsMTcgKzU4NSwxNiBAQAogCWRhZGRyID0gJnNrYi0+bmguaXB2NmgtPmRhZGRyOwogCiAJLyogUGVyZm9ybSBjaGVja3N1bS4gKi8KLQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJaWYgKGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLCBJUFBST1RPX0lDTVBWNiwKLQkJCQkgICAgc2tiLT5jc3VtKSkgewotCQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiSUNNUHY2IGh3IGNoZWNrc3VtIGZhaWxlZFxuIik7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCX0KLQl9Ci0JaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKLQkJaWYgKGNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLCBJUFBST1RPX0lDTVBWNiwKLQkJCQkgICAgc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIDApKSkgeworCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0hXOgorCQlpZiAoIWNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHNrYi0+bGVuLCBJUFBST1RPX0lDTVBWNiwKKwkJCQkgICAgIHNrYi0+Y3N1bSkpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBDSEVDS1NVTV9OT05FOgorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgc2tiLT5sZW4sCisJCQkJCSAgICAgSVBQUk9UT19JQ01QVjYsIDApOworCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogCQkJTElNSVRfTkVUREVCVUcoS0VSTl9ERUJVRyAiSUNNUHY2IGNoZWNrc3VtIGZhaWxlZCBbJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4ID4gJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4XVxuIiwKIAkJCQkgICAgICAgTklQNigqc2FkZHIpLCBOSVA2KCpkYWRkcikpOwogCQkJZ290byBkaXNjYXJkX2l0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA2NTFjNzliLi44ZTk2MjhmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMjk4LDEzICsyOTgsMTAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHJhd3Y2X3Jjdl9za2Ioc3RydWN0IHNvY2sgKiBzaywgc3RydWN0IHNrX2J1ZmYgKiBza2IpCiB7CiAJaWYgKChyYXc2X3NrKHNrKS0+Y2hlY2tzdW0gfHwgc2stPnNrX2ZpbHRlcikgJiYgCi0JICAgIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJLyogRklYTUU6IGluY3JlbWVudCBhIHJhdzYgZHJvcHMgY291bnRlciBoZXJlICovCi0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJICAgIHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCS8qIEZJWE1FOiBpbmNyZW1lbnQgYSByYXc2IGRyb3BzIGNvdW50ZXIgaGVyZSAqLworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJLyogQ2hhcmdlIGl0IHRvIHRoZSBzb2NrZXQuICovCkBAIC0zMzcsMzIgKzMzNCwyNSBAQAogCWlmICghcnAtPmNoZWNrc3VtKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCi0JaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5uaC5yYXcsCi0JCQkgICAgICAgICAgICAgICAgICAgc2tiLT5oLnJhdyAtIHNrYi0+bmgucmF3KTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKKwkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5uaC5yYXcsCisJCSAgICAgICAgICAgICAgICAgICBza2ItPmgucmF3IC0gc2tiLT5uaC5yYXcpOworCQlpZiAoIWNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCisJCQkJICAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCisJCQkJICAgICBza2ItPmxlbiwgaW5ldC0+bnVtLCBza2ItPmNzdW0pKQogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQkJCWlmIChjc3VtX2lwdjZfbWFnaWMoJnNrYi0+bmguaXB2NmgtPnNhZGRyLAotCQkJCQkgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJCQkgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgc2tiLT5jc3VtKSkgewotCQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInJhdyB2NiBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpCi0JCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkJCSAgICAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLAotCQkJCQkJICAgICBza2ItPmxlbiwgaW5ldC0+bnVtLCAwKTsKIAl9CisJaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKQorCQlza2ItPmNzdW0gPSB+Y3N1bV9pcHY2X21hZ2ljKCZza2ItPm5oLmlwdjZoLT5zYWRkciwKKwkJCQkJICAgICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsCisJCQkJCSAgICAgc2tiLT5sZW4sIGluZXQtPm51bSwgMCk7CiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkgewotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkJICAgICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKSB7CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkgewogCQkJLyogRklYTUU6IGluY3JlbWVudCBhIHJhdzYgZHJvcHMgY291bnRlciBoZXJlICovCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfQogCiAJcmF3djZfcmN2X3NrYihzaywgc2tiKTsKQEAgLTQwNyw3ICszOTcsNyBAQAogCWlmIChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CiAJfSBlbHNlIGlmIChtc2ctPm1zZ19mbGFncyZNU0dfVFJVTkMpIHsKLQkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKQorCQlpZiAoX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9jb3B5X2VycjsKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCAwLCBtc2ctPm1zZ19pb3YsIGNvcGllZCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGQ3NDZkM2IuLjYyYzBlNWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtMTQwMSwyMCArMTQwMSwxOCBAQAogc3RhdGljIGludCB0Y3BfdjZfY2hlY2tzdW1faW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgewotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmgudGgsc2tiLT5sZW4sJnNrYi0+bmguaXB2NmgtPnNhZGRyLAotCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLHNrYi0+Y3N1bSkpCisJCQkJICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsc2tiLT5jc3VtKSkgeworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCXJldHVybiAwOwotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJodyB0Y3AgdjYgY3N1bSBmYWlsZWRcbiIpOworCQl9CiAJfQorCisJc2tiLT5jc3VtID0gfnRjcF92Nl9jaGVjayhza2ItPmgudGgsc2tiLT5sZW4sJnNrYi0+bmguaXB2NmgtPnNhZGRyLAorCQkJCSAgJnNrYi0+bmguaXB2NmgtPmRhZGRyLCAwKTsKKwogCWlmIChza2ItPmxlbiA8PSA3NikgewotCQlpZiAodGNwX3Y2X2NoZWNrKHNrYi0+aC50aCxza2ItPmxlbiwmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCi0JCQkJICZza2ItPm5oLmlwdjZoLT5kYWRkcixza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKQotCQkJcmV0dXJuIC0xOwotCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCX0gZWxzZSB7Ci0JCXNrYi0+Y3N1bSA9IH50Y3BfdjZfY2hlY2soc2tiLT5oLnRoLHNrYi0+bGVuLCZza2ItPm5oLmlwdjZoLT5zYWRkciwKLQkJCQkJICAmc2tiLT5uaC5pcHY2aC0+ZGFkZHIsMCk7CisJCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE1NzUsNyArMTU3Myw3IEBACiAJCWdvdG8gZGlzY2FyZF9pdDsKIAogCWlmICgoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKLQkgICAgIHRjcF92Nl9jaGVja3N1bV9pbml0KHNrYikgPCAwKSkKKwkgICAgIHRjcF92Nl9jaGVja3N1bV9pbml0KHNrYikpKQogCQlnb3RvIGJhZF9wYWNrZXQ7CiAKIAl0aCA9IHNrYi0+aC50aDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggYmY5NTE5My4uZTY3MTE1MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgbXNnLT5tc2dfaW92LAogCQkJCQkgICAgICBjb3BpZWQpOwogCX0gZWxzZSBpZiAobXNnLT5tc2dfZmxhZ3MmTVNHX1RSVU5DKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fY29weV9lcnI7CiAJCWVyciA9IHNrYl9jb3B5X2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YsCiAJCQkJCSAgICAgIGNvcGllZCk7CkBAIC0zNjMsMTMgKzM2MywxMCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9JTkVSUk9SUyk7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCVVEUDZfSU5DX1NUQVRTX0JIKFVEUF9NSUJfSU5FUlJPUlMpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIDA7CiAJfQogCiAJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzayxza2IpPDApIHsKQEAgLTQ5MSwxMyArNDg4LDEwIEBACiAJCXVoID0gc2tiLT5oLnVoOwogCX0KIAotCWlmIChza2ItPmlwX3N1bW1lZD09Q0hFQ0tTVU1fSFcpIHsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgJiYKKwkgICAgIWNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCBza2ItPmNzdW0pKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlpZiAoY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIHNrYi0+Y3N1bSkpIHsKLQkJCUxJTUlUX05FVERFQlVHKEtFUk5fREVCVUcgInVkcCB2NiBodyBjc3VtIGZhaWx1cmUuXG4iKTsKLQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJfQotCX0KKwogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKIApAQCAtNTIxLDggKzUxNSw3IEBACiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQkJZ290byBkaXNjYXJkOwogCi0JCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAmJgotCQkgICAgKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpCisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAkJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9OT1BPUlRTKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3RyYW5zcG9ydC5jIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCmluZGV4IDEyMmMwODZlLi5kYmU2MTA1IDEwMDY0NAotLS0gYS9uZXQvcnhycGMvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCkBAIC00NzUsMTUgKzQ3NiwxMSBAQAogCiAJCS8qIHdlJ2xsIHByb2JhYmx5IG5lZWQgdG8gY2hlY2tzdW0gaXQgKGRpZG4ndCBjYWxsCiAJCSAqIHNvY2tfcmVjdm1zZykgKi8KLQkJaWYgKHBrdC0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7Ci0JCQlpZiAoKHVuc2lnbmVkIHNob3J0KQotCQkJICAgIGNzdW1fZm9sZChza2JfY2hlY2tzdW0ocGt0LCAwLCBwa3QtPmxlbiwKLQkJCQkJCSAgIHBrdC0+Y3N1bSkpKSB7Ci0JCQkJa2ZyZWVfc2tiKHBrdCk7Ci0JCQkJcnhycGNfa3J4aW9kX3F1ZXVlX3RyYW5zcG9ydCh0cmFucyk7Ci0JCQkJX2xlYXZlKCIgQ1NVTSBmYWlsZWQiKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUocGt0KSkgeworCQkJa2ZyZWVfc2tiKHBrdCk7CisJCQlyeHJwY19rcnhpb2RfcXVldWVfdHJhbnNwb3J0KHRyYW5zKTsKKwkJCV9sZWF2ZSgiIENTVU0gZmFpbGVkIik7CisJCQlyZXR1cm47CiAJCX0KIAogCQlhZGRyID0gcGt0LT5uaC5pcGgtPnNhZGRyOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zb2NrbGliLmMgYi9uZXQvc3VucnBjL3NvY2tsaWIuYwppbmRleCA4Zjk3ZTkwLi5lYjMzMGQ0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NvY2tsaWIuYworKysgYi9uZXQvc3VucnBjL3NvY2tsaWIuYwpAQCAtNiw2ICs2LDkgQEAKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiBPbGFmIEtpcmNoIDxva2lyQG1vbmFkLnN3Yi5kZT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KQEAgLTE2NSw2ICsxNjgsOCBAQAogCQlyZXR1cm4gLTE7CiAJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoZGVzYy5jc3VtKSkKIAkJcmV0dXJuIC0xOworCWlmICh1bmxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykpCisJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKIAlyZXR1cm4gMDsKIG5vX2NoZWNrc3VtOgogCWlmICh4ZHJfcGFydGlhbF9jb3B5X2Zyb21fc2tiKHhkciwgMCwgJmRlc2MsIHNrYl9yZWFkX2JpdHMpIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggZjE2ZTdjZC4uZTUwZTdjZiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTYyMywxMiArNjIzLDkgQEAKIAkJLyogd2UgY2FuIHVzZSBpdCBpbi1wbGFjZSAqLwogCQlycXN0cC0+cnFfYXJnLmhlYWRbMF0uaW92X2Jhc2UgPSBza2ItPmRhdGEgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfbGVuID0gbGVuOwotCQlpZiAoc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCBza2ItPmNzdW0pKSkgewotCQkJCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CisJCQlza2JfZnJlZV9kYXRhZ3JhbShzdnNrLT5za19zaywgc2tiKTsKKwkJCXJldHVybiAwOwogCQl9CiAJCXJxc3RwLT5ycV9za2J1ZmYgPSBza2I7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LmMgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwppbmRleCBkMWY5ZGE0Li5jOTZjOGEyIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYwpAQCAtMjc1LDkgKzI3NSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc25kX2NhcmRfdCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKwlzbmRfY2FyZF90ICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjYXJkKQpAQCAtMjg2LDkgKzI4Niw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXNuZF9jYXJkX3QgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0zMDIsNyArMzAyLDcgQEAKICNkZWZpbmUgcHhhMnh4X2FjOTdfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNuZF9jYXJkX3QgKmNhcmQ7CiAJYWM5N19idXNfdCAqYWM5N19idXM7CkBAIC0zMTUsOCArMzE1LDggQEAKIAlpZiAoIWNhcmQpCiAJCWdvdG8gZXJyOwogCi0JY2FyZC0+ZGV2ID0gZGV2OwotCXN0cm5jcHkoY2FyZC0+ZHJpdmVyLCBkZXYtPmRyaXZlci0+bmFtZSwgc2l6ZW9mKGNhcmQtPmRyaXZlcikpOworCWNhcmQtPmRldiA9ICZkZXYtPmRldjsKKwlzdHJuY3B5KGNhcmQtPmRyaXZlciwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBzaXplb2YoY2FyZC0+ZHJpdmVyKSk7CiAKIAlyZXQgPSBweGEyeHhfcGNtX25ldyhjYXJkLCAmcHhhMnh4X2FjOTdfcGNtX2NsaWVudCwgJnB4YTJ4eF9hYzk3X3BjbSk7CiAJaWYgKHJldCkKQEAgLTM0NywxMyArMzQ3LDEzIEBACiAJc25wcmludGYoY2FyZC0+c2hvcnRuYW1lLCBzaXplb2YoY2FyZC0+c2hvcnRuYW1lKSwKIAkJICIlcyIsIHNuZF9hYzk3X2dldF9zaG9ydF9uYW1lKHB4YTJ4eF9hYzk3X2FjOTcpKTsKIAlzbnByaW50ZihjYXJkLT5sb25nbmFtZSwgc2l6ZW9mKGNhcmQtPmxvbmduYW1lKSwKLQkJICIlcyAoJXMpIiwgZGV2LT5kcml2ZXItPm5hbWUsIGNhcmQtPm1peGVybmFtZSk7CisJCSAiJXMgKCVzKSIsIGRldi0+ZGV2LmRyaXZlci0+bmFtZSwgY2FyZC0+bWl4ZXJuYW1lKTsKIAogCXNuZF9jYXJkX3NldF9wbV9jYWxsYmFjayhjYXJkLCBweGEyeHhfYWM5N19kb19zdXNwZW5kLAogCQkJCSBweGEyeHhfYWM5N19kb19yZXN1bWUsIE5VTEwpOwogCXJldCA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwogCWlmIChyZXQgPT0gMCkgewotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBjYXJkKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNjgsMTMgKzM2OCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc25kX2NhcmRfdCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoY2FyZCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAkJR0NSIHw9IEdDUl9BQ0xJTktfT0ZGOwogCQlmcmVlX2lycShJUlFfQUM5NywgTlVMTCk7CiAJCXB4YV9zZXRfY2tlbihDS0VOMl9BQzk3LCAwKTsKQEAgLTM4MywyMyArMzgzLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfYWM5N19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1hYzk3IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMnh4X2FjOTdfcHJvYmUsCiAJLnJlbW92ZQkJPSBweGEyeHhfYWM5N19yZW1vdmUsCiAJLnN1c3BlbmQJPSBweGEyeHhfYWM5N19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X2FjOTdfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtYWM5NyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9hYzk3X2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfYWM5N19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGEyeHhfYWM5N19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHB4YTJ4eF9hYzk3X2luaXQpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCBkOWVlMjdhLi4zMzgxM2Y5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtNjc0LDIzICs2NzQsMjQgQEAKIAlzbmRfY2FyZF90ICpjYXJkOwogfTsKIAotI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZih0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSwgc3RydWN0IHNuZF9nZW5lcmljX2RldmljZSwgcGRldiktPmNhcmQKKyNkZWZpbmUgZ2V0X3NuZF9nZW5lcmljX2NhcmQoZGV2KQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlLCBwZGV2KS0+Y2FyZAogCiAjZGVmaW5lIFNORF9HRU5FUklDX05BTUUJInNuZF9nZW5lcmljIgogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IHNuZF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogI2VuZGlmCiAKIC8qIGluaXRpYWxpemVkIGluIHNvdW5kLmMgKi8KLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlciA9IHsKLQkubmFtZQkJPSBTTkRfR0VORVJJQ19OQU1FLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXIgPSB7CiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBzbmRfZ2VuZXJpY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gc25kX2dlbmVyaWNfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gU05EX0dFTkVSSUNfTkFNRSwKKwl9LAogfTsKIAogdm9pZCBzbmRfZ2VuZXJpY19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04MjEsNyArODIyLDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKIC8qIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcyBmb3Igc25kX2dlbmVyaWMgcGxhdGZvcm0gZGV2aWNlICovCi1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNuZF9nZW5lcmljX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc25kX2NhcmRfdCAqY2FyZDsKIApAQCAtODM0LDcgKzgzNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzbmRfY2FyZF90ICpjYXJkOwogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NvdW5kLmMgYi9zb3VuZC9jb3JlL3NvdW5kLmMKaW5kZXggMTEzOWRkOC4uNmU3Y2FkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc291bmQuYworKysgYi9zb3VuZC9jb3JlL3NvdW5kLmMKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjZGVmaW5lIFNORFJWX09TX01JTk9SUyAyNTYKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLWV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbmRfZ2VuZXJpY19kcml2ZXI7CiAjZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgYWxzYV9zb3VuZF9pbml0KHZvaWQpCkBAIC0zNTcsNyArMzU3LDcgQEAKIAl9CiAJc25kX2luZm9fbWlub3JfcmVnaXN0ZXIoKTsKICNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCi0JZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKICNlbmRpZgogCWZvciAoY29udHJvbG51bSA9IDA7IGNvbnRyb2xudW0gPCBjYXJkc19saW1pdDsgY29udHJvbG51bSsrKQogCQlkZXZmc19ta19jZGV2KE1LREVWKG1ham9yLCBjb250cm9sbnVtPDw1KSwgU19JRkNIUiB8IGRldmljZV9tb2RlLCAic25kL2NvbnRyb2xDJWQiLCBjb250cm9sbnVtKTsKQEAgLTM3NSw3ICszNzUsNyBAQAogCQlkZXZmc19yZW1vdmUoInNuZC9jb250cm9sQyVkIiwgY29udHJvbG51bSk7CiAKICNpZmRlZiBDT05GSUdfU05EX0dFTkVSSUNfRFJJVkVSCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CiAjZW5kaWYKIAlzbmRfaW5mb19taW5vcl91bnJlZ2lzdGVyKCk7CiAJc25kX2luZm9fZG9uZSgpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IGU3MmNjZDEuLjFmZGFlNjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hZDE4ODkuYworKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTEwNjcsNyArMTA2Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZDE4ODlfcGNpID0gewogCS5uYW1lID0gIkFEMTg4OSBBdWRpbyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2FkMTg4OV9pZHMsCiAJLnByb2JlID0gc25kX2FkMTg4OV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2FkMTg4OV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IDRlNzZjNGEuLmZlZmZiZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTI0MDMsNyArMjQwMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQUxJIDU0NTEiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hbGlfaWRzLAogCS5wcm9iZSA9IHNuZF9hbGlfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hbGlfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IDdjNjE1NjFmLi4xOTA0ZGY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWxzNDAwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKQEAgLTc2OCw3ICs3NjgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFMUzQwMDAiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hbHM0MDAwX2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9hbHM0MDAwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9hbHM0MDAwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwLmMgYi9zb3VuZC9wY2kvYXRpaXhwLmMKaW5kZXggZjVkYWQ5Mi4uOGJhZTEwZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cC5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHAuYwpAQCAtMTYzNSw3ICsxNjM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBVEkgSVhQIEFDOTcgY29udHJvbGxlciIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2F0aWl4cF9pZHMsCiAJLnByb2JlID0gc25kX2F0aWl4cF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F0aWl4cF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCmluZGV4IDBjZjIwMjAuLjMxNzRiNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKQEAgLTEzMDksNyArMTMwOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQVRJIElYUCBNQzk3IGNvbnRyb2xsZXIiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdGlpeHBfaWRzLAogCS5wcm9iZSA9IHNuZF9hdGlpeHBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hdGlpeHBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IDZhZjNiMTMuLmQ5NjU2MDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMzczLDcgKzM3Myw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSBDQVJEX05BTUVfU0hPUlQsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ZvcnRleF9pZHMsCiAJLnByb2JlID0gc25kX3ZvcnRleF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZvcnRleF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggZGE5OWIxYi4uYWI3MzdkNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xODM4LDcgKzE4MzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFaRjMzMjgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hemYzMzI4X2lkcywKIAkucHJvYmUgPSBzbmRfYXpmMzMyOF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F6ZjMzMjhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9idDg3eC5jIGIvc291bmQvcGNpL2J0ODd4LmMKaW5kZXggMDFkOThlZS4uOGZlY2EyMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2J0ODd4LmMKKysrIGIvc291bmQvcGNpL2J0ODd4LmMKQEAgLTg5NywxNCArODk3LDEzIEBACiAvKiBkZWZhdWx0IGVudHJpZXMgZm9yIGFsbCBCdDg3eCBjYXJkcyAtIGl0J3Mgbm90IGV4cG9ydGVkICovCiAvKiBkcml2ZXJfZGF0YSBpcyBzZXQgdG8gMCB0byBjYWxsIGRldGVjdGlvbiAqLwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9idDg3eF9kZWZhdWx0X2lkc1tdID0gewotCUJUX0RFVklDRSg4NzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAotCUJUX0RFVklDRSg4NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAorCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAorCUJUX0RFVklDRShQQ0lfREVWSUNFX0lEX0JST09LVFJFRV84NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDApLAogCXsgfQogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJCdDg3eCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2J0ODd4X2lkcywKIAkucHJvYmUgPSBzbmRfYnQ4N3hfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9idDg3eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IGVlNThkMTYuLjM4OWQ5NjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTE0OTksNyArMTQ5OSw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQ0EwMTA2IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY2EwMTA2X2lkcywKIAkucHJvYmUgPSBzbmRfY2EwMTA2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2EwMTA2X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggNTdlOGU0My4uZGI2MDUzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMzA1Myw3ICszMDUzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJDLU1lZGlhIFBDSSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2NtaXBjaV9pZHMsCiAJLnByb2JlID0gc25kX2NtaXBjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NtaXBjaV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IGFlYTJjNDcuLjAzNGZmMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTIxMDYsNyArMjEwNiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQ1M0MjgxIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY3M0MjgxX2lkcywKIAkucHJvYmUgPSBzbmRfY3M0MjgxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjgxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwppbmRleCAzMmI0Zjg0Li5iOWZmZjRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlNvdW5kIEZ1c2lvbiBDUzQ2eHgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jczQ2eHhfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2NzNDZ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfY3M0Nnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggZGQxZWE5ZC4uNzgyNzBmOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwpAQCAtMjIzLDcgKzIyMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRU1VMTBLMV9BdWRpZ3kiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lbXUxMGsxX2lkcywKIAkucHJvYmUgPSBzbmRfY2FyZF9lbXUxMGsxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9lbXUxMGsxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwppbmRleCBjYmI2ODk0Li43OTU1Nzc3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKQEAgLTE2MTMsNyArMTYxMyw2IEBACiAvLyBwY2lfZHJpdmVyIGRlZmluaXRpb24KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRU1VMTBLMVgiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lbXUxMGsxeF9pZHMsCiAJLnByb2JlID0gc25kX2VtdTEwazF4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZW11MTBrMXhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDkyZmY3YzUuLjJkYWE1NzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtMjM4Niw3ICsyMzg2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9IERSSVZFUl9OQU1FLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9hdWRpb3BjaV9pZHMsCiAJLnByb2JlID0gc25kX2F1ZGlvcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXVkaW9wY2lfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5MzguYyBiL3NvdW5kL3BjaS9lczE5MzguYwppbmRleCA3OGY5MGRlLi5jMTM0ZjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTM4LmMKKysrIGIvc291bmQvcGNpL2VzMTkzOC5jCkBAIC0xNzU4LDcgKzE3NTgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVTUyBFUzE5MzggKFNvbG8tMSkiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lczE5MzhfaWRzLAogCS5wcm9iZSA9IHNuZF9lczE5MzhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lczE5MzhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lczE5NjguYyBiL3NvdW5kL3BjaS9lczE5NjguYwppbmRleCBhYzgyOTRlLi41MDA3OWRjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZXMxOTY4LmMKKysrIGIvc291bmQvcGNpL2VzMTk2OC5jCkBAIC0yNzYxLDcgKzI3NjEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkVTMTk2OCAoRVNTIE1hZXN0cm8pIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZXMxOTY4X2lkcywKIAkucHJvYmUgPSBzbmRfZXMxOTY4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfZXMxOTY4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZm04MDEuYyBiL3NvdW5kL3BjaS9mbTgwMS5jCmluZGV4IDRjN2M4ZDIuLjRlMWQzNDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0xNDU5LDcgKzE0NTksNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkZNODAxIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfZm04MDFfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2ZtODAxX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9mbTgwMV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggOWQxNDEyYS4uZWQ1MjVjMCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0xNjE2LDcgKzE2MTYsNiBAQAogLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkhEQSBJbnRlbCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gYXp4X2lkcywKIAkucHJvYmUgPSBhenhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGF6eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCmluZGV4IDVhY2EzNzcuLmJkNzFiZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKQEAgLTI3MzUsNyArMjczNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSUNFMTcxMiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ljZTE3MTJfaWRzLAogCS5wcm9iZSA9IHNuZF9pY2UxNzEyX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaWNlMTcxMl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IDViNDI5M2YuLjBiNTM4OWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTIzMzIsNyArMjMzMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSUNFMTcyNCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3Z0MTcyNF9pZHMsCiAJLnByb2JlID0gc25kX3Z0MTcyNF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3Z0MTcyNF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCAwODAxMDgzLi5jZjc4MDFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMjg3Niw3ICsyODc2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJbnRlbCBJQ0giLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9pbnRlbDh4MF9pZHMsCiAJLnByb2JlID0gc25kX2ludGVsOHgwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCBhY2ZiMTk3Li5hNDIwOTE4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0xMzE3LDcgKzEzMTcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkludGVsIElDSCBNb2RlbSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ludGVsOHgwbV9pZHMsCiAJLnByb2JlID0gc25kX2ludGVsOHgwbV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2ludGVsOHgwbV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA1NTYxZmQ0Li5hMTEwZDY2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtMjUzNCw3ICsyNTM0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJrb3JnMTIxMiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2tvcmcxMjEyX2lkcywKIAkucHJvYmUgPSBzbmRfa29yZzEyMTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9rb3JnMTIxMl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA5OWViNzZjNS4uZWRlN2E3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI4NTgsNyArMjg1OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiTWFlc3RybzMiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9tM19pZHMsCiAJLnByb2JlID0gc25kX20zX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbTNfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IGMzNDFjOTkuLmIzMDkwYTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtMTQyMyw3ICsxNDIzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJEaWdpZ3JhbSBtaVhhcnQiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9taXhhcnRfaWRzLAogCS5wcm9iZSA9IHNuZF9taXhhcnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9taXhhcnRfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggZTdhYTE1MS4uMDg5ZDIzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTE2NzMsNyArMTY3Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiTmVvTWFnaWMgMjU2IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfbm0yNTZfaWRzLAogCS5wcm9iZSA9IHNuZF9ubTI1Nl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX25tMjU2X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lMzIuYyBiL3NvdW5kL3BjaS9ybWUzMi5jCmluZGV4IGU2NjI3YjAuLjc4M2RmNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWUzMi5jCisrKyBiL3NvdW5kL3BjaS9ybWUzMi5jCkBAIC0yMDEyLDcgKzIwMTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0JCSJSTUUgRGlnaTMyIiwKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPQlzbmRfcm1lMzJfaWRzLAogCS5wcm9iZSA9CXNuZF9ybWUzMl9wcm9iZSwKIAkucmVtb3ZlID0JX19kZXZleGl0X3Aoc25kX3JtZTMyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDBlZGRlYjEuLjZkNDIyZWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yNDEzLDcgKzI0MTMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlJNRSBEaWdpOTYiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ybWU5Nl9pZHMsCiAJLnByb2JlID0gc25kX3JtZTk2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfcm1lOTZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwppbmRleCA4NDUxNThiLi5kMTVmZmIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCkBAIC01MDYyLDcgKzUwNjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gICAgICJSTUUgSGFtbWVyZmFsbCBEU1AiLAotCS5vd25lciA9ICAgIFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9oZHNwX2lkcywKIAkucHJvYmUgPSAgICBzbmRfaGRzcF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2hkc3BfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDYwYTExNDEuLmExYWVmNmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtMzYzOSw3ICszNjM5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJSTUUgSGFtbWVyZmFsbCBEU1AgTUFESSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2hkc3BtX2lkcywKIAkucHJvYmUgPSBzbmRfaGRzcG1fcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9oZHNwbV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IDU5ZmNlZjkuLmY5ZDBjMTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTI2NTQsNyArMjY1NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUJICA9ICJSTUUgRGlnaTk2NTIgKEhhbW1lcmZhbGwpIiwKLQkub3duZXIJICA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ybWU5NjUyX2lkcywKIAkucHJvYmUJICA9IHNuZF9ybWU5NjUyX3Byb2JlLAogCS5yZW1vdmUJICA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5NjUyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCA5YTM1NDc0Li5lOTJlZjNhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTE1MDIsNyArMTUwMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUzMgU29uaWNWaWJlcyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3NvbmljX2lkcywKIAkucHJvYmUgPSBzbmRfc29uaWNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9zb25pY19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCmluZGV4IGE4Y2E4ZTEuLjk0MGQ1MzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKQEAgLTE3Nyw3ICsxNzcsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlRyaWRlbnQ0RFdhdmVBdWRpbyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3RyaWRlbnRfaWRzLAogCS5wcm9iZSA9IHNuZF90cmlkZW50X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdHJpZGVudF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHguYyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKaW5kZXggNTIzZWFjZS4uZmFkMmEyNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHguYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eC5jCkBAIC0yNDc4LDcgKzI0NzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlZJQSA4Mnh4IEF1ZGlvIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdmlhODJ4eF9pZHMsCiAJLnByb2JlID0gc25kX3ZpYTgyeHhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF92aWE4Mnh4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwppbmRleCAwMTFmMGZiLi5iODM2NjBiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKQEAgLTExOTgsNyArMTE5OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVklBIDgyeHggTW9kZW0iLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92aWE4Mnh4X21vZGVtX2lkcywKIAkucHJvYmUgPSBzbmRfdmlhODJ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZpYTgyeHhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggMmE3YWQ5ZC4uZGNhNmJkMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTI1Miw3ICsyNTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkRpZ2lncmFtIFZYMjIyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdngyMjJfaWRzLAogCS5wcm9iZSA9IHNuZF92eDIyMl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3Z4MjIyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwppbmRleCAxYmJiYTMyLi5kMDEzMjM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCisrKyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKQEAgLTM0NCw3ICszNDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIllhbWFoYSBEUy1YRyBQQ0kiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF95bWZwY2lfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX3ltZnBjaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2NhcmRfeW1mcGNpX3JlbW92ZSksCg==