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+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDczMF9waW5zW10gPSB7CitNVVhfQ0ZHXzczMCgiRTJfNzMwX0tCUjAiLAkxMiwgICAyMSwgICAgMCwJICAwLCAgIDIwLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJKN183MzBfS0JSMSIsCTEyLCAgIDI1LCAgICAwLAkgIDAsICAgMjQsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkUxXzczMF9LQlIyIiwJMTIsICAgMjksICAgIDAsCSAgMCwgICAyOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRjNfNzMwX0tCUjMiLAkxMywgICAgMSwgICAgMCwJICAwLCAgIDAsICAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJEMl83MzBfS0JSNCIsCTEzLCAgICA1LCAgICAwLAkgIDAsICAgNCwgICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkMyXzczMF9LQkMwIiwJMTMsICAgIDksICAgIDAsCSAgMCwJOCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRDNfNzMwX0tCQzEiLAkxMywgICAxMywgICAgMCwJICAwLCAgIDEyLCAgIDEsCSAgTkEsCSAwLCAgMCkKK01VWF9DRkdfNzMwKCJFNF83MzBfS0JDMiIsCTEzLCAgIDE3LCAgICAwLAkgIDAsICAgMTYsICAgMSwJICBOQSwJIDAsICAwKQorTVVYX0NGR183MzAoIkY0XzczMF9LQkMzIiwJMTMsICAgMjEsICAgIDAsCSAgMCwgICAyMCwgICAxLAkgIE5BLAkgMCwgIDApCitNVVhfQ0ZHXzczMCgiRTNfNzMwX0tCQzQiLAkxMywgICAyNSwgICAgMCwJICAwLCAgIDI0LCAgIDEsCSAgTkEsCSAwLCAgMCkKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCitzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwMXh4eF9waW5zW10gPSB7CisvKgorICoJIGRlc2NyaXB0aW9uCQltdXggIG1vZGUgICBtdXgJIHB1bGwgcHVsbCAgcHVsbCAgcHVfcGQJIHB1ICBkYmcKKyAqCQkJCXJlZyAgb2Zmc2V0IG1vZGUgcmVnICBiaXQgICBlbmEJICByZWcKKyAqLworTVVYX0NGRygiVUFSVDFfVFgiLAkJIDksICAgMjEsICAgIDEsCSAgMiwgICAzLCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDFfUlRTIiwJCSA5LCAgIDEyLCAgICAxLAkgIDIsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogVUFSVDIgKENPTV9VQVJUX0dBVElORyksIGNvbmZsaWN0cyB3aXRoIFVTQjIgKi8KK01VWF9DRkcoIlVBUlQyX1RYIiwJCSBDLCAgIDI3LCAgICAxLAkgIDMsICAgMywgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX1JYIiwJCSBDLCAgIDE4LCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQyX0NUUyIsCQkgQywgICAyMSwgICAgMCwJICAzLCAgIDEsICAgMSwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUMl9SVFMiLAkJIEMsICAgMjQsICAgIDEsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBVQVJUMyAoR0lHQV9VQVJUX0dBVElORykgKi8KK01VWF9DRkcoIlVBUlQzX1RYIiwJCSA2LCAgICAwLCAgICAxLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX1JYIiwJCSA2LCAgICAzLCAgICAwLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0NUUyIsCQkgNSwgICAxMiwgICAgMiwJICAwLCAgMjQsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJVQVJUM19SVFMiLAkJIDUsICAgMTUsICAgIDIsCSAgMCwgIDI1LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiVUFSVDNfQ0xLUkVRIiwJCSA5LCAgIDI3LCAgICAwLAkgIDIsICAgNSwgICAwLAkgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlVBUlQzX0JDTEsiLAkJIEEsICAgIDAsICAgIDAsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorTVVYX0NGRygiWTE1XzE2MTBfVUFSVDNfUlRTIiwJIEEsICAgIDAsICAgIDEsCSAgMiwgICA2LCAgIDAsCSBOQSwJIDAsICAwKQorCisvKiBQV1QgJiBQV0wsIGNvbmZsaWN0cyB3aXRoIFVBUlQzICovCitNVVhfQ0ZHKCJQV1QiLAkJIAkgNiwgICAgMCwgICAgMiwJICAwLCAgMzAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJQV0wiLAkJIAkgNiwgICAgMywgICAgMSwJICAwLCAgMzEsICAgMSwJIE5BLAkgMCwgIDApCisKKy8qIFVTQiBpbnRlcm5hbCBtYXN0ZXIgZ2VuZXJpYyAqLworTVVYX0NGRygiUjE4X1VTQl9WQlVTIiwJCSA3LCAgICA5LCAgICAyLAkgIDEsICAxMSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlIxOF8xNTEwX1VTQl9HUElPMCIsCSA3LCAgICA5LCAgICAwLAkgIDEsICAxMSwgICAxLAkgTkEsCSAwLCAgMSkKKy8qIHdvcmtzIGFyb3VuZCBlcnJhdHVtOiAgVzRfVVNCX1BVRU4gYW5kIFc0X1VTQl9QVURJUyBhcmUgc3dpdGNoZWQhICovCitNVVhfQ0ZHKCJXNF9VU0JfUFVFTiIsCQkgRCwgICAgMywgICAgMywJICAzLCAgIDUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfQ0xLTyIsCQkgRCwgICAgMywgICAgMSwJICAzLCAgIDUsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNF9VU0JfSElHSFoiLAkJIEQsICAgIDMsICAgIDQsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzRfR1BJTzU4IiwJCSBELCAgICAzLCAgICA3LAkgIDMsICAgNSwgICAwLAkgIDMsCSAwLCAgMSkKKworLyogVVNCMSBtYXN0ZXIgKi8KK01VWF9DRkcoIlVTQjFfU1VTUCIsCQkgOCwgICAyNywgICAgMiwJICAxLCAgMjcsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1NFMCIsCQkgOSwgICAgMCwgICAgMiwJICAxLCAgMjgsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTNfMTYxMF9VU0IxX1NFMCIsCSA5LCAgICAwLCAgICA0LAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVFhFTiIsCQkgOSwgICAgMywgICAgMiwJICAxLCAgMjksICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1RYRCIsCQkgOSwgICAyNCwgICAgMSwJICAyLCAgIDQsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJVU0IxX1ZQIiwJCSBBLCAgICAzLCAgICAxLAkgIDIsICAgNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjFfVk0iLAkJIEEsICAgIDYsICAgIDEsCSAgMiwgICA4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9SQ1YiLAkJIEEsICAgIDksICAgIDEsCSAgMiwgICA5LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMV9TUEVFRCIsCQkgQSwgICAxMiwgICAgMiwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJSMTNfMTYxMF9VU0IxX1NQRUVEIiwJIEEsICAgMTIsICAgIDUsCSAgMiwgIDEwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjEzXzE3MTBfVVNCMV9TRU8iLAkgQSwgICAxMiwgICAgNSwgICAyLCAgMTAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBVU0IyIG1hc3RlciAqLworTVVYX0NGRygiVVNCMl9TVVNQIiwJCSBCLCAgICAzLCAgICAxLAkgIDIsICAxNywgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVlAiLAkJIEIsICAgIDYsICAgIDEsCSAgMiwgIDE4LCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEVOIiwJCSBCLCAgICA5LCAgICAxLAkgIDIsICAxOSwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIlVTQjJfVk0iLAkJIEMsICAgMTgsICAgIDEsCSAgMywgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9SQ1YiLAkJIEMsICAgMjEsICAgIDEsCSAgMywgICAxLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9TRTAiLAkJIEMsICAgMjQsICAgIDIsCSAgMywgICAyLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiVVNCMl9UWEQiLAkJIEMsICAgMjcsICAgIDIsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE1MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE1MTBfR1BJTzAiLAkgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiUjE5XzE1MTBfR1BJTzEiLAkgNywgICAgNiwgICAgMCwgICAxLCAgMTAsICAgMSwgICAgMCwgICAgIDAsICAxKQorTVVYX0NGRygiTTE0XzE1MTBfR1BJTzIiLAkgNywgICAgMywgICAgMCwgICAxLCAgIDksICAgMSwgICAgMCwgICAgIDAsICAxKQorCisvKiBPTUFQMTYxMCBHUElPICovCitNVVhfQ0ZHKCJQMThfMTYxMF9HUElPMyIsCSA3LCAgICAwLCAgICAwLCAgIDEsICAgOCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCitNVVhfQ0ZHKCJZMTVfMTYxMF9HUElPMTciLAkgQSwgICAgMCwgICAgNywgICAyLCAgIDYsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE3MTAgR1BJTyAqLworTVVYX0NGRygiUjE4XzE3MTBfR1BJTzAiLCAgICAgICAgNywgICAgOSwgICAgMCwgICAxLCAgMTEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVjJfMTcxMF9HUElPMTAiLCAgICAgICAgRiwgICAyNywgICAgMSwgICA0LCAgIDMsICAgMSwgICAgNCwgICAgIDEsICAxKQorTVVYX0NGRygiTjIxXzE3MTBfR1BJTzE0IiwgICAgICAgNiwgICAgOSwgICAgMCwgICAxLCAgIDEsICAgMSwgICAgMSwgICAgIDEsICAxKQorTVVYX0NGRygiVzE1XzE3MTBfR1BJTzQwIiwgICAgICAgOSwgICAyNywgICAgNywgICAyLCAgIDUsICAgMSwgICAgMiwgICAgIDEsICAxKQorCisvKiBNUFVJTyAqLworTVVYX0NGRygiTVBVSU8yIiwJCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk4xNV8xNjEwX01QVUlPMiIsCSA3LCAgIDE4LCAgICAwLAkgIDEsICAxNCwgICAxLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIk1QVUlPNCIsCQkgNywgICAxNSwgICAgMCwJICAxLCAgMTMsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNUFVJTzUiLAkJIDcsICAgMTIsICAgIDAsCSAgMSwgIDEyLCAgIDEsCSBOQSwJIDAsICAxKQorCitNVVhfQ0ZHKCJUMjBfMTYxMF9NUFVJTzUiLAkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzYiLAkxMCwgICAxNSwgICAgMiwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzciLAkgQSwgICAyNCwgICAgMiwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9NUFVJTzkiLAkxMCwgICAxNSwgICAgMSwJICAzLCAgIDgsICAgMCwJICAzLAkgMCwgIDEpCitNVVhfQ0ZHKCJWMTBfMTYxMF9NUFVJTzEwIiwJIEEsICAgMjQsICAgIDEsCSAgMiwgIDE0LCAgIDAsCSAgMiwJIDAsICAxKQorTVVYX0NGRygiVzEwXzE2MTBfTVBVSU8xMSIsCSBBLCAgIDE4LCAgICAyLAkgIDIsICAxMSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkUyMF8xNjEwX01QVUlPMTMiLAkgMywgICAyMSwgICAgMSwJICAwLCAgIDcsICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJVMjBfMTYxMF9NUFVJTzE0IiwJIDksICAgIDYsICAgIDYsCSAgMCwgIDMwLCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiRTE5XzE2MTBfTVBVSU8xNSIsCSAzLCAgIDE4LCAgICAxLAkgIDAsICAgNiwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogTUNCU1AyICovCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLUiIsCQkgQywgICAgNiwgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfQ0xLWCIsCQkgQywgICAgOSwgICAgMCwJICAyLCAgMjksICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJNQ0JTUDJfRFIiLAkJIEMsICAgIDAsICAgIDAsCSAgMiwgIDI2LCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0RYIiwJCSBDLCAgIDE1LCAgICAwLAkgIDIsICAzMSwgICAxLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1DQlNQMl9GU1IiLAkJIEMsICAgMTIsICAgIDAsCSAgMiwgIDMwLCAgIDEsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTUNCU1AyX0ZTWCIsCQkgQywgICAgMywgICAgMCwJICAyLCAgMjcsICAgMSwJIE5BLAkgMCwgIDEpCisKKy8qIE1DQlNQMyBOT1RFOiBNb2RlIG11c3QgMSBmb3IgY2xvY2sgKi8KK01VWF9DRkcoIk1DQlNQM19DTEtYIiwJCSA5LCAgICAzLCAgICAxLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKKworLyogTWlzYyBiYWxsb3V0cyAqLworTVVYX0NGRygiQkFMTE9VVF9WOF9BUk1JTzMiLAkgQiwgICAxOCwgICAgMCwJICAyLCAgMjUsICAgMSwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJOMjBfSERRIiwJICAgICAgIDYsICAgMTgsICAgIDEsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICA0LCAgMCkKKworLyogT01BUC0xNjEwIE1NQzIgKi8KK01VWF9DRkcoIlc4XzE2MTBfTU1DMl9EQVQwIiwJIEIsICAgMjEsICAgIDYsCSAgMiwgIDIzLCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjhfMTYxMF9NTUMyX0RBVDEiLAkgQiwgICAyNywgICAgNiwJICAyLCAgMjUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTVfMTYxMF9NTUMyX0RBVDIiLAkgOSwgICAxMiwgICAgNiwJICAyLCAgIDUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTBfMTYxMF9NTUMyX0RBVDMiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgMjIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJZMTBfMTYxMF9NTUMyX0NMSyIsCSBCLCAgICAzLCAgICA2LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk4XzE2MTBfTU1DMl9DTUQiLAkgQiwgICAyNCwgICAgNiwJICAyLCAgMjQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX01NQzJfQ01ERElSIiwJIEIsICAgMTIsICAgIDYsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjVfMTYxMF9NTUMyX0RBVERJUjAiLAkgQiwgICAxNSwgICAgNiwJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9NTUMyX0RBVERJUjEiLCA4LCAgIDE1LCAgICA2LAkgIDEsICAyMywgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlIxOF8xNjEwX01NQzJfQ0xLSU4iLAkgNywgICAgOSwgICAgNiwJICAxLCAgMTEsICAgMCwJICAxLAkxMSwgIDEpCisKKy8qIE9NQVAtMTYxMCBFeHRlcm5hbCBUcmFjZSBJbnRlcmZhY2UgKi8KK01VWF9DRkcoIk0xOV8xNjEwX0VUTV9QU1RBVDAiLAkgNSwgICAyNywgICAgMSwJICAwLCAgMjksICAgMCwJICAwLAkgMCwgIDEpCitNVVhfQ0ZHKCJMMTVfMTYxMF9FVE1fUFNUQVQxIiwJIDUsICAgMjQsICAgIDEsCSAgMCwgIDI4LCAgIDAsCSAgMCwJIDAsICAxKQorTVVYX0NGRygiTDE4XzE2MTBfRVRNX1BTVEFUMiIsCSA1LCAgIDIxLCAgICAxLAkgIDAsICAyNywgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkwxOV8xNjEwX0VUTV9EMCIsCSA1LCAgIDE4LCAgICAxLAkgIDAsICAyNiwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOV8xNjEwX0VUTV9ENiIsCSA1LCAgICAwLCAgICAxLAkgIDAsICAyMCwgICAwLAkgIDAsCSAwLCAgMSkKK01VWF9DRkcoIkoxOF8xNjEwX0VUTV9ENyIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAxOSwgICAwLAkgIDAsCSAwLCAgMSkKKworLyogT01BUDE2WFggR1BJTyAqLworTVVYX0NGRygiUDIwXzE2MTBfR1BJTzQiLAkgNiwgICAyNywgICAgMCwJICAxLCAgIDcsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJWOV8xNjEwX0dQSU83IiwJIEIsICAgMTIsICAgIDEsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVzhfMTYxMF9HUElPOSIsCSBCLCAgIDIxLCAgICAwLAkgIDIsICAyMywgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIk4yMF8xNjEwX0dQSU8xMSIsICAgICAgIDYsICAgMTgsICAgIDAsICAgMSwgICA0LCAgIDAsICAgIDEsICAgICAxLCAgMSkKK01VWF9DRkcoIk4xOV8xNjEwX0dQSU8xMyIsCSA2LCAgIDEyLCAgICAwLAkgIDEsICAgMiwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlAxMF8xNjEwX0dQSU8yMiIsCSBDLCAgICAwLCAgICA3LAkgIDIsICAyNiwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIlY1XzE2MTBfR1BJTzI0IiwJIEIsICAgMTUsICAgIDcsCSAgMiwgIDIxLCAgIDAsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiQUEyMF8xNjEwX0dQSU9fNDEiLAkgOSwgICAgOSwgICAgNywJICAxLCAgMzEsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTlfMTYxMF9HUElPNDgiLAkgOCwgICAxNSwgICAgNywgICAxLCAgMjMsICAgMSwgICAgMSwgICAgIDAsICAxKQorTVVYX0NGRygiTTdfMTYxMF9HUElPNjIiLAkxMCwgICAgMCwgICAgMCwgICA0LCAgMjQsICAgMCwgICAgNCwgICAgIDAsICAxKQorTVVYX0NGRygiVjE0XzE2WFhfR1BJTzM3IiwJIDksICAgMTgsICAgIDcsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAwKQorTVVYX0NGRygiUjlfMTZYWF9HUElPMTgiLAkgQywgICAxOCwgICAgNywgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAwKQorTVVYX0NGRygiTDE0XzE2WFhfR1BJTzQ5IiwJIDYsICAgIDMsICAgIDcsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMCkKKworLyogT01BUC0xNjEwIHVXaXJlICovCitNVVhfQ0ZHKCJWMTlfMTYxMF9VV0lSRV9TQ0xLIiwJIDgsICAgIDYsICAgIDAsCSAgMSwgIDIwLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVTE4XzE2MTBfVVdJUkVfU0RJIiwJIDgsICAgIDAsICAgIDAsCSAgMSwgIDE4LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiVzIxXzE2MTBfVVdJUkVfU0RPIiwJIDgsICAgIDMsICAgIDAsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE0XzE2MTBfVVdJUkVfQ1MwIiwJIDgsICAgIDksICAgIDEsCSAgMSwgIDIxLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQorCisvKiBPTUFQLTE2MTAgRmxhc2ggKi8KK01VWF9DRkcoIkwzXzE2MTBfRkxBU0hfQ1MyQl9PRSIsMTAsICAgIDYsICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiTThfMTYxMF9GTEFTSF9DUzJCX1dFIiwxMCwgICAgMywgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIEZpcnN0IE1NQyBpbnRlcmZhY2UsIHNhbWUgb24gMTUxMCwgMTYxMCBhbmQgMTcxMCAqLworTVVYX0NGRygiTU1DX0NNRCIsCQkgQSwgICAyNywgICAgMCwJICAyLCAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMSIsCQkgQSwgICAyNCwgICAgMCwJICAyLCAgMTQsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMiIsCQkgQSwgICAxOCwgICAgMCwJICAyLCAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfREFUMCIsCQkgQiwgICAgMCwgICAgMCwJICAyLCAgMTYsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJNTUNfQ0xLIiwJCSBBLCAgIDIxLCAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKK01VWF9DRkcoIk1NQ19EQVQzIiwJCTEwLCAgIDE1LCAgICAwLAkgIDMsICAgOCwgICAxLAkgIDMsCSAxLCAgMSkKK01VWF9DRkcoIk0xNV8xNzEwX01NQ19DTEtJIiwJIDYsICAgMjEsICAgIDIsICAgMCwgICAwLCAgIDAsICAgTkEsICAgICAwLCAgMSkKK01VWF9DRkcoIlAxOV8xNzEwX01NQ19DTURESVIiLAkgNiwgICAyNCwgICAgNiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorTVVYX0NGRygiUDIwXzE3MTBfTU1DX0RBVERJUjAiLAkgNiwgICAyNywgICAgNSwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQorCisvKiBPTUFQLTE2MTAgVVNCMCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiAqLworTVVYX0NGRygiVzlfVVNCMF9UWEVOIiwJCSBCLCAgIDksICAgICA1LAkgIDIsICAxOSwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIkFBOV9VU0IwX1ZQIiwJCSBCLCAgIDYsICAgICA1LAkgIDIsICAxOCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlk1X1VTQjBfUkNWIiwJCSBDLCAgMjEsICAgICA1LAkgIDMsICAgMSwgICAwLAkgIDEsCSAwLCAgMSkKK01VWF9DRkcoIlI5X1VTQjBfVk0iLAkJIEMsICAxOCwgICAgIDUsCSAgMywgICAwLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjZfVVNCMF9UWEQiLAkJIEMsICAyNywgICAgIDUsCSAgMywgICAzLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVzVfVVNCMF9TRTAiLAkJIEMsICAyNCwgICAgIDUsCSAgMywgICAyLCAgIDAsCSAgMywJIDAsICAxKQorTVVYX0NGRygiVjlfVVNCMF9TUEVFRCIsCSBCLCAgMTIsICAgICA1LAkgIDIsICAyMCwgICAwLAkgIDIsCSAwLCAgMSkKK01VWF9DRkcoIlkxMF9VU0IwX1NVU1AiLAkgQiwgICAzLCAgICAgNSwJICAyLCAgMTcsICAgMCwJICAyLAkgMCwgIDEpCisKKy8qIFVTQjIgaW50ZXJmYWNlICovCitNVVhfQ0ZHKCJXOV9VU0IyX1RYRU4iLAkJIEIsICAgOSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiQUE5X1VTQjJfVlAiLAkJIEIsICAgNiwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiWTVfVVNCMl9SQ1YiLAkJIEMsICAyMSwgICAgIDEsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQorTVVYX0NGRygiUjlfVVNCMl9WTSIsCQkgQywgIDE4LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJWNl9VU0IyX1RYRCIsCQkgQywgIDI3LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCitNVVhfQ0ZHKCJXNV9VU0IyX1NFMCIsCQkgQywgIDI0LCAgICAgMiwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCisKKy8qIDE2WFggVUFSVCAqLworTVVYX0NGRygiUjEzXzE2MTBfVUFSVDFfVFgiLAkgQSwgIDEyLCAgICAgNiwJICAyLCAgMTAsICAgMCwJICAyLAkxMCwgIDEpCitNVVhfQ0ZHKCJWMTRfMTZYWF9VQVJUMV9SWCIsCSA5LCAgMTgsICAgICAwLAkgIDIsICAgMiwgICAwLAkgIDIsCSAyLCAgMSkKK01VWF9DRkcoIlIxNF8xNjEwX1VBUlQxX0NUUyIsCSA5LCAgMTUsICAgICAwLAkgIDIsICAgMSwgICAwLAkgIDIsCSAxLCAgMSkKK01VWF9DRkcoIkFBMTVfMTYxMF9VQVJUMV9SVFMiLAkgOSwgIDEyLCAgICAgMSwJICAyLCAgIDAsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJSOV8xNlhYX1VBUlQyX1JYIiwJIEMsICAxOCwgICAgIDAsICAgMywgICAwLCAgIDAsICAgIDMsICAgICAwLCAgMSkKK01VWF9DRkcoIkwxNF8xNlhYX1VBUlQzX1JYIiwJIDYsICAgMywgICAgIDAsICAgMCwgIDMxLCAgIDAsICAgIDAsICAgIDMxLCAgMSkKKworLyogSTJDIGludGVyZmFjZSAqLworTVVYX0NGRygiSTJDX1NDTCIsCQkgNywgIDI0LCAgICAgMCwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDApCitNVVhfQ0ZHKCJJMkNfU0RBIiwJCSA3LCAgMjcsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKKworLyogS2V5cGFkICovCitNVVhfQ0ZHKCJGMThfMTYxMF9LQkMwIiwJIDMsICAxNSwgICAgIDAsCSAgMCwgICA1LCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiRDIwXzE2MTBfS0JDMSIsCSAzLCAgMTIsICAgICAwLAkgIDAsICAgNCwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkQxOV8xNjEwX0tCQzIiLAkgMywgICA5LCAgICAgMCwJICAwLCAgIDMsICAgMSwJICAwLAkgMCwgIDApCitNVVhfQ0ZHKCJFMThfMTYxMF9LQkMzIiwJIDMsICAgNiwgICAgIDAsCSAgMCwgICAyLCAgIDEsCSAgMCwJIDAsICAwKQorTVVYX0NGRygiQzIxXzE2MTBfS0JDNCIsCSAzLCAgIDMsICAgICAwLAkgIDAsICAgMSwgICAxLAkgIDAsCSAwLCAgMCkKK01VWF9DRkcoIkcxOF8xNjEwX0tCUjAiLAkgNCwgICAwLCAgICAgMCwJICAwLCAgIDEwLCAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJGMTlfMTYxMF9LQlIxIiwJIDMsICAgMjcsICAgIDAsCSAgMCwgICA5LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiSDE0XzE2MTBfS0JSMiIsCSAzLCAgIDI0LCAgICAwLAkgIDAsICAgOCwgICAxLAkgIDAsCSAxLCAgMCkKK01VWF9DRkcoIkUyMF8xNjEwX0tCUjMiLAkgMywgICAyMSwgICAgMCwJICAwLCAgIDcsICAgMSwJICAwLAkgMSwgIDApCitNVVhfQ0ZHKCJFMTlfMTYxMF9LQlI0IiwJIDMsICAgMTgsICAgIDAsCSAgMCwgICA2LCAgIDEsCSAgMCwJIDEsICAwKQorTVVYX0NGRygiTjE5XzE2MTBfS0JSNSIsCSA2LCAgMTIsICAgICAxLAkgIDEsICAgMiwgICAxLAkgIDEsCSAxLCAgMCkKKworLyogUG93ZXIgbWFuYWdlbWVudCAqLworTVVYX0NGRygiVDIwXzE2MTBfTE9XX1BXUiIsCSA3LCAgIDEyLCAgICAxLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQorCisvKiBNQ0xLIFNldHRpbmdzICovCitNVVhfQ0ZHKCJWNV8xNzEwX01DTEtfT04iLAkgQiwgICAxNSwgICAgMCwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlY1XzE3MTBfTUNMS19PRkYiLAkgQiwgICAxNSwgICAgNiwJICBOQSwgICAwLCAgIDAsICAgTkEsCSAwLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT04iLAkgQiwgICAxOCwgICAgMCwJICBOQSwgIDIyLCAgIDAsCSAgTkEsCSAxLCAgMCkKK01VWF9DRkcoIlIxMF8xNjEwX01DTEtfT0ZGIiwJIEIsICAgMTgsICAgIDYsCSAgMiwgICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKKworLyogQ29tcGFjdEZsYXNoIGNvbnRyb2xsZXIsIGNvbmZsaWN0cyB3aXRoIE1NQzEgKi8KK01VWF9DRkcoIlAxMV8xNjEwX0NGX0NEMiIsCSBBLCAgIDI3LCAgICAzLAkgIDIsICAgMTUsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJSMTFfMTYxMF9DRl9JT0lTMTYiLAkgQiwgICAgMCwgICAgMywJICAyLCAgIDE2LCAgIDEsCSAgMiwJIDEsICAxKQorTVVYX0NGRygiVjEwXzE2MTBfQ0ZfSVJFUSIsCSBBLCAgIDI0LCAgICAzLAkgIDIsICAgMTQsICAgMCwJICAyLAkgMCwgIDEpCitNVVhfQ0ZHKCJXMTBfMTYxMF9DRl9SRVNFVCIsCSBBLCAgIDE4LCAgICAzLAkgIDIsICAgMTIsICAgMSwJICAyLAkgMSwgIDEpCitNVVhfQ0ZHKCJXMTFfMTYxMF9DRl9DRDEiLAkxMCwgICAxNSwgICAgMywJICAzLCAgICA4LCAgIDEsCSAgMywJIDEsICAxKQorfTsKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTVYWCB8fCBDT05GSUdfQVJDSF9PTUFQMTZYWCAqLworCitpbnQgX19pbml0IG9tYXAxX211eF9pbml0KHZvaWQpCit7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNzMwCisJb21hcF9tdXhfcmVnaXN0ZXIob21hcDczMF9waW5zLCBBUlJBWV9TSVpFKG9tYXA3MzBfcGlucykpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQorCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXAxeHh4X3BpbnMsIEFSUkFZX1NJWkUob21hcDF4eHhfcGlucykpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwppbmRleCA0MGM0ZjdjLi42ODEwY2ZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKQEAgLTEwOSw5ICsxMDksMTAgQEAKICAqIEJ5IGRlZmF1bHQgVUFSVDIgZG9lcyBub3Qgd29yayBvbiBJbm5vdmF0b3ItMTUxMCBpZiB5b3UgaGF2ZQogICogVVNCIE9IQ0kgZW5hYmxlZC4gVG8gdXNlIFVBUlQyLCB5b3UgbXVzdCBkaXNhYmxlIFVTQjIgZmlyc3QuCiAgKi8KLXZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2luaXQoaW50IHBvcnRzW09NQVBfTUFYX05SX1BPUlRTXSkKK3ZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKKwljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqaW5mbzsKIAogCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLnJlZ3NoaWZ0ID0gMDsKQEAgLTEyNiwxMCArMTI3LDE0IEBACiAJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzJdLnVhcnRjbGsgPSBPTUFQMTUxMF9CQVNFX0JBVUQgKiAxNjsKIAl9CiAKKwlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwlpZiAoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKIAlmb3IgKGkgPSAwOyBpIDwgT01BUF9NQVhfTlJfUE9SVFM7IGkrKykgewogCQl1bnNpZ25lZCBjaGFyIHJlZzsKIAotCQlpZiAocG9ydHNbaV0gPT0gMCkgeworCQlpZiAoISgoMSA8PCBpKSAmIGluZm8tPmVuYWJsZWRfdWFydHMpKSB7CiAJCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVtpXS5tZW1iYXNlID0gTlVMTDsKIAkJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhW2ldLm1hcGJhc2UgPSAwOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IDE5MWE5YjEuLmNkYmY0ZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC0yMjYsOCArMjI2LDggQEAKIAogI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKLSNlcnJvciBPTUFQIDMyS0h6IHRpbWVyIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrIG9uIDE1MTAhCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKyNlcnJvciBPTUFQIDMyS0h6IHRpbWVyIGRvZXMgbm90IGN1cnJlbnRseSB3b3JrIG9uIDE1WFghCiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Nzg4ODA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCkBAIC0wLDAgKzEsMjIgQEAKK2NvbW1lbnQgIk9NQVAgQ29yZSBUeXBlIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgorCitjb25maWcgQVJDSF9PTUFQMjRYWAorCWJvb2wgIk9NQVAyNHh4IEJhc2VkIFN5c3RlbSIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKKworY29uZmlnIEFSQ0hfT01BUDI0MjAKKwlib29sICJPTUFQMjQyMCBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWAorCitjb21tZW50ICJPTUFQIEJvYXJkIFR5cGUiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCisKK2NvbmZpZyBNQUNIX09NQVBfR0VORVJJQworCWJvb2wgIkdlbmVyaWMgT01BUCBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIgJiYgQVJDSF9PTUFQMjRYWAorCitjb25maWcgTUFDSF9PTUFQX0g0CisJYm9vbCAiT01BUCAyNDIwIEg0IGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNFhYCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMDQxMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKKyMgQ29tbW9uIHN1cHBvcnQKK29iai15IDo9IGlycS5vIGlkLm8gaW8ubyBzcmFtLWZuLm8gY2xvY2subyBtdXgubyBkZXZpY2VzLm8gc2VyaWFsLm8KKworb2JqLSQoQ09ORklHX09NQVBfTVBVX1RJTUVSKQkJKz0gdGltZXItZ3AubworCisjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKK29iai0kKENPTkZJR19NQUNIX09NQVBfR0VORVJJQykJCSs9IGJvYXJkLWdlbmVyaWMubworb2JqLSQoQ09ORklHX01BQ0hfT01BUF9INCkJCSs9IGJvYXJkLWg0Lm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NWFmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACisgIHpyZWxhZGRyLXkJCTo9IDB4ODAwMDgwMDAKK3BhcmFtc19waHlzLXkJCTo9IDB4ODAwMDAxMDAKK2luaXRyZF9waHlzLXkJCTo9IDB4ODA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYwMmU3YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwL29tYXAxL2JvYXJkLWdlbmVyaWMuYworICoKKyAqIENvZGUgZm9yIGdlbmVyaWMgT01BUDIgYm9hcmQuIFNob3VsZCB3b3JrIG9uIG1hbnkgT01BUDIgc3lzdGVtcyB3aGVyZQorICogdGhlIGJvb3Rsb2FkZXIgcGFzc2VzIHRoZSBib2FyZC1zcGVjaWZpYyBkYXRhIHRvIHRoZSBrZXJuZWwuCisgKiBEbyBub3QgcHV0IGFueSBib2FyZCBzcGVjaWZpYyBjb2RlIHRvIHRoaXMgZmlsZTsgY3JlYXRlIGEgbmV3IG1hY2hpbmUKKyAqIHR5cGUgaWYgeW91IG5lZWQgY3VzdG9tIGxvdy1sZXZlbCBpbml0aWFsaXphdGlvbnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jb21tb24uaD4KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIGdlbmVyaWNfdWFydF9jb25maWcgX19pbml0ZGF0YSA9IHsKKwkuZW5hYmxlZF91YXJ0cyA9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25maWcgZ2VuZXJpY19tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm1tYyBbMF0gPSB7CisJCS5lbmFibGVkIAk9IDAsCisJCS53aXJlNAkJPSAwLAorCQkud3BfcGluCQk9IC0xLAorCQkucG93ZXJfcGluCT0gLTEsCisJCS5zd2l0Y2hfcGluCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGdlbmVyaWNfY29uZmlnW10gPSB7CisJeyBPTUFQX1RBR19VQVJULAkmZ2VuZXJpY191YXJ0X2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTU1DLAkJJmdlbmVyaWNfbW1jX2NvbmZpZyB9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0KHZvaWQpCit7CisJb21hcF9ib2FyZF9jb25maWcgPSBnZW5lcmljX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShnZW5lcmljX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfR0VORVJJQywgIkdlbmVyaWMgT01BUDI0eHgiKQorCS8qIE1haW50YWluZXI6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPiAqLworCS5waHlzX3JhbQk9IDB4ODAwMDAwMDAsCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwX2dlbmVyaWNfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfZ2VuZXJpY19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF9nZW5lcmljX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjU1NDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwL29tYXAyL2JvYXJkLWg0LmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKgorICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAvb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3VzYi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoNF9wYXJ0aXRpb25zW10gPSB7CisJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLworCXsKKwkgICAgICAubmFtZQkJPSAiYm9vdGxvYWRlciIsCisJICAgICAgLm9mZnNldAkJPSAwLAorCSAgICAgIC5zaXplCQk9IFNaXzEyOEssCisJICAgICAgLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIGJvb3Rsb2FkZXIgcGFyYW1zIGluIHRoZSBuZXh0IHNlY3RvciAqLworCXsKKwkgICAgICAubmFtZQkJPSAicGFyYW1zIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBTWl8xMjhLLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMCwKKwl9LAorCS8qIGtlcm5lbCAqLworCXsKKwkgICAgICAubmFtZQkJPSAia2VybmVsIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBTWl8yTSwKKwkgICAgICAubWFza19mbGFncwk9IDAKKwl9LAorCS8qIGZpbGUgc3lzdGVtICovCisJeworCSAgICAgIC5uYW1lCQk9ICJmaWxlc3lzdGVtIiwKKwkgICAgICAub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgICAgICAuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCSAgICAgIC5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoNF9mbGFzaF9kYXRhID0geworCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBoNF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDRfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGg0X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBINF9DUzBfQkFTRSwKKwkuZW5kCQk9IEg0X0NTMF9CQVNFICsgU1pfNjRNIC0gMSwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoNF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmg0X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmg0X2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoNF9zbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgID0gT01BUDI0WFhfRVRIUl9TVEFSVCwgICAgICAgICAgLyogUGh5c2ljYWwgKi8KKwkJLmVuZCAgICA9IE9NQVAyNFhYX0VUSFJfU1RBUlQgKyAweGYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IE9NQVBfR1BJT19JUlEoT01BUDI0WFhfRVRIUl9HUElPX0lSUSksCisJCS5lbmQgICAgPSBPTUFQX0dQSU9fSVJRKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X3NtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtYzkxeCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShoNF9zbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBoNF9zbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmg0X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoNF9zbWM5MXhfZGV2aWNlLAorCSZoNF9mbGFzaF9kZXZpY2UsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGg0X2luaXRfc21jOTF4KHZvaWQpCit7CisJLyogTWFrZSBzdXJlIENTMSB0aW1pbmdzIGFyZSBjb3JyZWN0ICovCisJR1BNQ19DT05GSUcxXzEgPSAweDAwMDExMjAwOworCUdQTUNfQ09ORklHMl8xID0gMHgwMDFmMWYwMTsKKwlHUE1DX0NPTkZJRzNfMSA9IDB4MDAwODA4MDM7CisJR1BNQ19DT05GSUc0XzEgPSAweDFjMDkxYzA5OworCUdQTUNfQ09ORklHNV8xID0gMHgwNDFmMWYxZjsKKwlHUE1DX0NPTkZJRzZfMSA9IDB4MDAwMDA0YzQ7CisJR1BNQ19DT05GSUc3XzEgPSAweDAwMDAwZjQwIHwgKDB4MDgwMDAwMDAgPj4gMjQpOworCXVkZWxheSgxMDApOworCisJb21hcF9jZmdfcmVnKE0xNV8yNFhYX0dQSU85Mik7CisJaWYgKG9tYXBfcmVxdWVzdF9ncGlvKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTF4IElSUVxuIiwKKwkJCU9NQVAyNFhYX0VUSFJfR1BJT19JUlEpOworCQlyZXR1cm47CisJfQorCW9tYXBfc2V0X2dwaW9fZGlyZWN0aW9uKE9NQVAyNFhYX0VUSFJfR1BJT19JUlEsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9oNF9pbml0X2lycSh2b2lkKQoreworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworCWg0X2luaXRfc21jOTF4KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBoNF91YXJ0X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5lbmFibGVkX3VhcnRzID0gKCgxIDw8IDApIHwgKDEgPDwgMSkgfCAoMSA8PCAyKSksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBoNF9tbWNfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLm1tYyBbMF0gPSB7CisJCS5lbmFibGVkCT0gMSwKKwkJLndpcmU0CQk9IDEsCisJCS53cF9waW4JCT0gLTEsCisJCS5wb3dlcl9waW4JPSAtMSwKKwkJLnN3aXRjaF9waW4JPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgaDRfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5wYW5lbF9uYW1lCT0gImg0IiwKKwkuY3RybF9uYW1lCT0gImludGVybmFsIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGg0X2NvbmZpZ1tdID0geworCXsgT01BUF9UQUdfVUFSVCwJJmg0X3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19NTUMsCQkmaDRfbW1jX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfTENELAkJJmg0X2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXQodm9pZCkKK3sKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgorCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgorCSAqIGlmIG5vdCBuZWVkZWQuCisJICovCisJcGxhdGZvcm1fYWRkX2RldmljZXMoaDRfZGV2aWNlcywgQVJSQVlfU0laRShoNF9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKKwlvbWFwX3NlcmlhbF9pbml0KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X21hcF9pbyh2b2lkKQoreworCW9tYXBfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfSDQsICJPTUFQMjQyMCBINCBib2FyZCIpCisJLyogTWFpbnRhaW5lcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+ICovCisJLnBoeXNfcmFtCT0gMHg4MDAwMDAwMCwKKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IG9tYXBfaDRfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfaDRfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG9tYXBfaDRfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODE4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTAsMCArMSwxMTI5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBDcmVhdGVkIGZvciBPTUFQMi4KKyAqCisgKiAgQ2xlYW5lZCB1cCBhbmQgbW9kaWZpZWQgdG8gdXNlIG9tYXAgc2hhcmVkIGNsb2NrIGZyYW1ld29yayBieQorICogIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgorICogIEJhc2VkIG9uIG9tYXAxIGNsb2NrLmMsIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KKyAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NyYW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCisvLyNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEJCQkvKiBFeHBlcmltZW50YWwgKi8KKworc3RhdGljIHN0cnVjdCBwcmNtX2NvbmZpZyAqY3Vycl9wcmNtX3NldDsKK3N0YXRpYyBzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgbWVtX3RpbWluZ3M7CitzdGF0aWMgdTMyIGN1cnJfcGVyZl9sZXZlbCA9IFBSQ01fRlVMTF9TUEVFRDsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPbWFwMiBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIFJlY2FsY3VsYXRlIFNZU1RfQ0xLICovCitzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCXUzMiBkaXYgPSBQUkNNX0NMS1NSQ19DVFJMOworCWRpdiAmPSAoMSA8PCA3KSB8ICgxIDw8IDYpOwkvKiBUZXN0IGlmIGV4dCBjbGsgZGl2aWRlZCBieSAxIG9yIDIgKi8KKwlkaXYgPj49IGNsay0+cmF0ZV9vZmZzZXQ7CisJY2xrLT5yYXRlID0gKGNsay0+cGFyZW50LT5yYXRlIC8gZGl2KTsKKwlwcm9wYWdhdGVfcmF0ZShjbGspOworfQorCitzdGF0aWMgdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqIHRjbGspCit7CisJaW50IGRwbGxfY2xrLCBkcGxsX211bHQsIGRwbGxfZGl2LCBhbXVsdDsKKworCWRwbGxfbXVsdCA9IChDTV9DTEtTRUwxX1BMTCA+PiAxMikgJiAweDAzZmY7CS8qIDEwIGJpdHMgKi8KKwlkcGxsX2RpdiA9IChDTV9DTEtTRUwxX1BMTCA+PiA4KSAmIDB4MGY7CS8qIDQgYml0cyAqLworCWRwbGxfY2xrID0gKHRjbGstPnBhcmVudC0+cmF0ZSAqIGRwbGxfbXVsdCkgLyAoZHBsbF9kaXYgKyAxKTsKKwlhbXVsdCA9IENNX0NMS1NFTDJfUExMICYgMHgzOworCWRwbGxfY2xrICo9IGFtdWx0OworCisJcmV0dXJuIGRwbGxfY2xrOworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlmb2xsb3dwYXJlbnRfcmVjYWxjKGNsayk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX3Byb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGspCit7CisJaWYgKCEoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpKQorCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKKworCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qIEVuYWJsZSBhbiBBUExMIGlmIG9mZiAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGN2YWwsIGk9MDsKKworCWlmIChjbGstPmVuYWJsZV9iaXQgPT0gMHhmZikJCQkvKiBQYXJlbnQgd2lsbCBkbyBpdCAqLworCQlyZXR1cm47CisKKwljdmFsID0gQ01fQ0xLRU5fUExMOworCisJaWYgKChjdmFsICYgKDB4MyA8PCBjbGstPmVuYWJsZV9iaXQpKSA9PSAoMHgzIDw8IGNsay0+ZW5hYmxlX2JpdCkpCisJCXJldHVybjsKKworCWN2YWwgJj0gfigweDMgPDwgY2xrLT5lbmFibGVfYml0KTsKKwljdmFsIHw9ICgweDMgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlDTV9DTEtFTl9QTEwgPSBjdmFsOworCisJaWYgKGNsayA9PSAmYXBsbDk2X2NrKQorCQljdmFsID0gKDEgPDwgOCk7CisJZWxzZSBpZiAoY2xrID09ICZhcGxsNTRfY2spCisJCWN2YWwgPSAoMSA8PCA2KTsKKworCXdoaWxlICghQ01fSURMRVNUX0NLR0VOICYgY3ZhbCkgewkJLyogV2FpdCBmb3IgbG9jayAqLworCQkrK2k7CisJCXVkZWxheSgxKTsKKwkJaWYgKGkgPT0gMTAwMDAwKQorCQkJYnJlYWs7CisJfQorfQorCisvKiBFbmFibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQKKyAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0aGlzIHRvIHVzZSBjbGstPmVuYWJsZSBsaWtlIG9uIG9tYXAxPworICovCitzdGF0aWMgaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqIGNsaykKK3sKKwl1MzIgcmVndmFsMzI7CisKKwlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCisJCSAgICAgICBjbGstPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMKSB7CisJCW9tYXAyX2Nsa19maXhlZF9lbmFibGUoY2xrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3AgQVBMTCAqLworc3RhdGljIHZvaWQgb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBjdmFsOworCisJaWYoY2xrLT5lbmFibGVfYml0ID09IDB4ZmYpCQkvKiBsZXQgcGFyZW50IG9mZiBkbyBpdCAqLworCQlyZXR1cm47CisKKwljdmFsID0gQ01fQ0xLRU5fUExMOworCWN2YWwgJj0gfigweDMgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlDTV9DTEtFTl9QTEwgPSBjdmFsOworfQorCisvKiBEaXNhYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50ICovCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZ3ZhbDMyOworCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAwKQorCQlyZXR1cm47CisKKwlpZiAoY2xrLT5lbmFibGVfcmVnID09ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMKSB7CisJCW9tYXAyX2Nsa19maXhlZF9kaXNhYmxlKGNsayk7CisJCXJldHVybjsKKwl9CisKKwlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CisJCWlmIChsaWtlbHkoKHUzMiljbGstPnBhcmVudCkpCisJCQlyZXQgPSBvbWFwMl9jbGtfdXNlKGNsay0+cGFyZW50KTsKKworCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7CisJCQljbGstPnVzZWNvdW50LS07CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGspOworCisJCWlmICh1bmxpa2VseShyZXQgIT0gMCkgJiYgY2xrLT5wYXJlbnQpIHsKKwkJCW9tYXAyX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJCQljbGstPnVzZWNvdW50LS07CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKKwkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKKwkJCW9tYXAyX2Nsa191bnVzZShjbGstPnBhcmVudCk7CisJfQorfQorCisvKgorICogVXNlcyB0aGUgY3VycmVudCBwcmNtIHNldCB0byB0ZWxsIGlmIGEgcmF0ZSBpcyB2YWxpZC4KKyAqIFlvdSBjYW4gZ28gc2xvd2VyLCBidXQgbm90IGZhc3RlciB3aXRoaW4gYSBnaXZlbiByYXRlIHNldC4KKyAqLworc3RhdGljIHUzMiBvbWFwMl9kcGxsX3JvdW5kX3JhdGUodW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3sKKwl1MzIgaGlnaCwgbG93OworCisJaWYgKChDTV9DTEtTRUwyX1BMTCAmIDB4MykgPT0gMSkgewkvKiBEUExMIGNsb2Nrb3V0ICovCisJCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkICogMjsKKwkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwl9IGVsc2UgewkJCQkvKiBEUExMIGNsb2Nrb3V0IHggMiAqLworCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAvIDI7CisJfQorCisjaWZkZWYgRE9XTl9WQVJJQUJMRV9EUExMCisJaWYgKHRhcmdldF9yYXRlID4gaGlnaCkKKwkJcmV0dXJuIGhpZ2g7CisJZWxzZQorCQlyZXR1cm4gdGFyZ2V0X3JhdGU7CisjZWxzZQorCWlmICh0YXJnZXRfcmF0ZSA+IGxvdykKKwkJcmV0dXJuIGhpZ2g7CisJZWxzZQorCQlyZXR1cm4gbG93OworI2VuZGlmCisKK30KKworLyoKKyAqIFVzZWQgZm9yIGNsb2NrcyB0aGF0IGFyZSBwYXJ0IG9mIENMS1NFTF94eXogZ292ZXJuZWQgY2xvY2tzLgorICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRvIHVzZSBjbGstPmVuYWJsZSgpIGZ1bmN0aW9ucyBsaWtlIG9uIG9tYXAxPworICovCitzdGF0aWMgdm9pZCBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCit7CisJdTMyIGZpeGVkID0gMCwgZGl2ID0gMDsKKworCWlmIChjbGsgPT0gJmRwbGxfY2spIHsKKwkJY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOworCQlmaXhlZCA9IDE7CisJCWRpdiA9IDA7CisJfQorCisJaWYgKGNsayA9PSAmaXZhMV9tcHVfaW50X2lmY2spIHsKKwkJZGl2ID0gMjsKKwkJZml4ZWQgPSAxOworCX0KKworCWlmICgoY2xrID09ICZkc3MxX2ZjaykgJiYgKChDTV9DTEtTRUwxX0NPUkUgJiAoMHgxZiA8PCA4KSkgPT0gMCkpIHsKKwkJY2xrLT5yYXRlID0gc3lzX2NrLnJhdGU7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIWZpeGVkKSB7CisJCWRpdiA9IG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihjbGspOworCQlpZiAoZGl2ID09IDApCisJCQlyZXR1cm47CisJfQorCisJaWYgKGRpdiAhPSAwKSB7CisJCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpKQorCQkJcmV0dXJuOworCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKKwl9CisKKwlpZiAodW5saWtlbHkoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7Cit9CisKKy8qCisgKiBGaW5kcyBiZXN0IGRpdmlkZXIgdmFsdWUgaW4gYW4gYXJyYXkgYmFzZWQgb24gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0CisgKiByYXRlcy4gVGhlIGRpdmlkZXIgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgd2l0aCBzbWFsbGVzdCBkaXZpZGVyIGZpcnN0LgorICovCitzdGF0aWMgaW5saW5lIHUzMiBvbWFwMl9kaXZpZGVyX2Zyb21fdGFibGUodTMyIHNpemUsIHUzMiAqZGl2X2FycmF5LAorCQkJCQkgICB1MzIgc3JjX3JhdGUsIHUzMiB0Z3RfcmF0ZSkKK3sKKwlpbnQgaSwgdGVzdF9yYXRlOworCisJaWYgKGRpdl9hcnJheSA9PSBOVUxMKQorCQlyZXR1cm4gfjE7CisKKwlmb3IgKGk9MDsgaSA8IHNpemU7IGkrKykgeworCQl0ZXN0X3JhdGUgPSBzcmNfcmF0ZSAvICpkaXZfYXJyYXk7CisJCWlmICh0ZXN0X3JhdGUgPD0gdGd0X3JhdGUpCisJCQlyZXR1cm4gKmRpdl9hcnJheTsKKwkJKytkaXZfYXJyYXk7CisJfQorCisJcmV0dXJuIH4wOwkvKiBObyBhY2NlcHRhYmxlIGRpdmlkZXIgKi8KK30KKworLyoKKyAqIEZpbmQgZGl2aXNvciBmb3IgdGhlIGdpdmVuIGNsb2NrIGFuZCB0YXJnZXQgcmF0ZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBjbG9ja3Mgd2hpY2ggYXJlIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULAorICogdGhleSBhcmUgb25seSBzZXR0YWJsZSBhcyBwYXJ0IG9mIHZpcnR1YWxfcHJjbSBzZXQuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqdGNsaywgdTMyIHRhcmdldF9yYXRlLAorCXUzMiAqbmV3X2RpdikKK3sKKwl1MzIgZ2Z4X2RpdltdID0gezIsIDMsIDR9OworCXUzMiBzeXNjbGtvdXRfZGl2W10gPSB7MSwgMiwgNCwgOCwgMTZ9OworCXUzMiBkc3MxX2RpdltdID0gezEsIDIsIDMsIDQsIDUsIDYsIDgsIDksIDEyLCAxNn07CisJdTMyIHZ5bG5xX2RpdltdID0gezEsIDIsIDMsIDQsIDYsIDgsIDksIDEyLCAxNiwgMTh9OworCXUzMiBiZXN0X2RpdiA9IH4wLCBhc2l6ZSA9IDA7CisJdTMyICpkaXZfYXJyYXkgPSBOVUxMOworCisJc3dpdGNoICh0Y2xrLT5mbGFncyAmIFNSQ19SQVRFX1NFTF9NQVNLKSB7CisJY2FzZSBDTV9HRlhfU0VMMToKKwkJYXNpemUgPSAzOworCQlkaXZfYXJyYXkgPSBnZnhfZGl2OworCQlicmVhazsKKwljYXNlIENNX1BMTF9TRUwxOgorCQlyZXR1cm4gb21hcDJfZHBsbF9yb3VuZF9yYXRlKHRhcmdldF9yYXRlKTsKKwljYXNlIENNX1NZU0NMS09VVF9TRUwxOgorCQlhc2l6ZSA9IDU7CisJCWRpdl9hcnJheSA9IHN5c2Nsa291dF9kaXY7CisJCWJyZWFrOworCWNhc2UgQ01fQ09SRV9TRUwxOgorCQlpZih0Y2xrID09ICZkc3MxX2Zjayl7CisJCQlpZih0Y2xrLT5wYXJlbnQgPT0gJmNvcmVfY2speworCQkJCWFzaXplID0gMTA7CisJCQkJZGl2X2FycmF5ID0gZHNzMV9kaXY7CisJCQl9IGVsc2UgeworCQkJCSpuZXdfZGl2ID0gMDsgLyogZml4ZWQgY2xrICovCisJCQkJcmV0dXJuKHRjbGstPnBhcmVudC0+cmF0ZSk7CisJCQl9CisJCX0gZWxzZSBpZigodGNsayA9PSAmdmx5bnFfZmNrKSAmJiBjcHVfaXNfb21hcDI0MjAoKSl7CisJCQlpZih0Y2xrLT5wYXJlbnQgPT0gJmNvcmVfY2speworCQkJCWFzaXplID0gMTA7CisJCQkJZGl2X2FycmF5ID0gdnlsbnFfZGl2OworCQkJfSBlbHNlIHsKKwkJCQkqbmV3X2RpdiA9IDA7IC8qIGZpeGVkIGNsayAqLworCQkJCXJldHVybih0Y2xrLT5wYXJlbnQtPnJhdGUpOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKworCWJlc3RfZGl2ID0gb21hcDJfZGl2aWRlcl9mcm9tX3RhYmxlKGFzaXplLCBkaXZfYXJyYXksCisJIHRjbGstPnBhcmVudC0+cmF0ZSwgdGFyZ2V0X3JhdGUpOworCWlmIChiZXN0X2RpdiA9PSB+MCl7CisJCSpuZXdfZGl2ID0gMTsKKwkJcmV0dXJuIGJlc3RfZGl2OyAvKiBzaWduYWwgZXJyb3IgKi8KKwl9CisKKwkqbmV3X2RpdiA9IGJlc3RfZGl2OworCXJldHVybiAodGNsay0+cGFyZW50LT5yYXRlIC8gYmVzdF9kaXYpOworfQorCisvKiBHaXZlbiBhIGNsb2NrIGFuZCBhIHJhdGUgYXBwbHkgYSBjbG9jayBzcGVjaWZpYyByb3VuZGluZyBmdW5jdGlvbiAqLworc3RhdGljIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIG5ld19kaXYgPSAwOworCWludCB2YWxpZF9yYXRlOworCisJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0ZJWEVEKQorCQlyZXR1cm4gY2xrLT5yYXRlOworCisJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7CisJCXZhbGlkX3JhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShjbGssIHJhdGUsICZuZXdfZGl2KTsKKwkJcmV0dXJuIHZhbGlkX3JhdGU7CisJfQorCisJaWYgKGNsay0+cm91bmRfcmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCisvKgorICogQ2hlY2sgdGhlIERMTCBsb2NrIHN0YXRlLCBhbmQgcmV0dXJuIHR1ZSBpZiBydW5uaW5nIGluIHVubG9jayBtb2RlLgorICogVGhpcyBpcyBuZWVkZWQgdG8gY29tcGVuc3RlIGZvciB0aGUgc2hpZnRlZCBETEwgdmFsdWUgaW4gdW5sb2NrIG1vZGUuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfZGxsX2ZvcmNlX25lZWRlZCh2b2lkKQoreworCXUzMiBkbGxfc3RhdGUgPSBTRFJDX0RMTEFfQ1RSTDsJCS8qIGRsbGEgYW5kIGRsbGIgYXJlIGEgc2V0ICovCisKKwlpZiAoKGRsbF9zdGF0ZSAmICgxIDw8IDIpKSA9PSAoMSA8PCAyKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKHUzMiBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZGxsX2NudDsKKwl1MzIgZmFzdF9kbGwgPSAwOworCisJbWVtX3RpbWluZ3MubV90eXBlID0gISgoU0RSQ19NUl8wICYgMHgzKSA9PSAweDEpOyAvKiBERFIgPSAxLCBTRFIgPSAwICovCisKKwkvKiAyNDIyIGVzMi4wNSBhbmQgYmV5b25kIGhhcyBhIHNpbmdsZSBTSVAgRERSIGluc3RlYWQgb2YgMiBsaWtlIG90aGVycy4KKwkgKiBJbiB0aGUgY2FzZSBvZiAyNDIyLCBpdHMgb2sgdG8gdXNlIENTMSBpbnN0ZWFkIG9mIENTMC4KKwkgKi8KKworI2lmIDAJLyogRklYTUU6IEVuYWJsZSBhZnRlciAyNHh4IGNwdSBkZXRlY3Rpb24gd29ya3MgKi8KKwljdHlwZSA9IGdldF9jcHVfdHlwZSgpOworCWlmIChjcHVfaXNfb21hcDI0MjIoKSkKKwkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDE7CisJZWxzZQorI2VuZGlmCisJCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAwOworCisJaWYgKG1lbV90aW1pbmdzLm1fdHlwZSAhPSBNX0REUikKKwkJcmV0dXJuOworCisJLyogV2l0aCBERFIgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGxvdyBmcmVxdWVuY3kgRExMIHZhbHVlICovCisJaWYgKCgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmICgxIDw8IDIpKSA9PSBNX0xPQ0tfQ1RSTCkpCisJCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9VTkxPQ0s7CisJZWxzZQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fTE9DSzsKKworCWlmIChtZW1fdGltaW5ncy5iYXNlX2NzID09IDApIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEFfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQV9TVEFUVVMgJiAweGZmMDA7CisJfSBlbHNlIHsKKwkJZmFzdF9kbGwgPSBTRFJDX0RMTEJfQ1RSTDsKKwkJZGxsX2NudCA9IFNEUkNfRExMQl9TVEFUVVMgJiAweGZmMDA7CisJfQorCWlmIChmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKSB7CisJCWZhc3RfZGxsICY9IH4weGZmMDA7CisJCWZhc3RfZGxsIHw9IGRsbF9jbnQ7CQkvKiBDdXJyZW50IGxvY2sgbW9kZSAqLworCX0KKwltZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsID0gZmFzdF9kbGw7CisKKwkvKiBObyBkaXNydXB0aW9ucywgRERSIHdpbGwgYmUgb2ZmbGluZSAmIEMtQUJJIG5vdCBmb2xsb3dlZCAqLworCW9tYXAyX3NyYW1fZGRyX2luaXQoJm1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCwKKwkJCSAgICBtZW1fdGltaW5ncy5iYXNlX2NzLAorCQkJICAgIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgJj0gMHhmZjAwOwkvKiBLZWVwIGxvY2sgdmFsdWUgKi8KKworCS8qIFR1cm4gc3RhdHVzIGludG8gdW5sb2NrIGN0cmwgKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9CisJCSgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmIDB4RikgfCAoMSA8PCAyKSk7CisKKwkvKiA5MCBkZWdyZWUgcGhhc2UgZm9yIGFueXRoaW5nIGJlbG93IDEzM01oeiAqLworCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0gKDEgPDwgMSk7Cit9CisKK3N0YXRpYyB1MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpCit7CisJdTMyIHByZXYgPSBjdXJyX3BlcmZfbGV2ZWwsIGZsYWdzOworCisJaWYgKChjdXJyX3BlcmZfbGV2ZWwgPT0gbGV2ZWwpICYmICFmb3JjZSkKKwkJcmV0dXJuIHByZXY7CisKKwlpZiAobGV2ZWwgPT0gUFJDTV9IQUxGX1NQRUVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJUFJDTV9WT0xUU0VUVVAgPSAweGZmZmY7CisJCW9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMoUFJDTV9IQUxGX1NQRUVELAorCQkJCQkgIG1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwsCisJCQkJCSAgbWVtX3RpbWluZ3MubV90eXBlKTsKKwkJY3Vycl9wZXJmX2xldmVsID0gUFJDTV9IQUxGX1NQRUVEOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorCWlmIChsZXZlbCA9PSBQUkNNX0ZVTExfU1BFRUQpIHsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlQUkNNX1ZPTFRTRVRVUCA9IDB4ZmZmZjsKKwkJb21hcDJfc3JhbV9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsCisJCQkJCSAgbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCwKKwkJCQkJICBtZW1fdGltaW5ncy5tX3R5cGUpOworCQljdXJyX3BlcmZfbGV2ZWwgPSBQUkNNX0ZVTExfU1BFRUQ7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gcHJldjsKK30KKworc3RhdGljIGludCBvbWFwMl9yZXByb2dyYW1fZHBsbChzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGZsYWdzLCBjdXJfcmF0ZSwgbG93LCBtdWx0LCBkaXYsIHZhbGlkX3JhdGUsIGRvbmVfcmF0ZTsKKwl1MzIgYnlwYXNzID0gMDsKKwlzdHJ1Y3QgcHJjbV9jb25maWcgdG1wc2V0OworCWludCByZXQgPSAtRUlOVkFMOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWN1cl9yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZSgmZHBsbF9jayk7CisJbXVsdCA9IENNX0NMS1NFTDJfUExMICYgMHgzOworCisJaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgeworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0hBTEZfU1BFRUQsIDEpOworCX0gZWxzZSBpZiAoKHJhdGUgPT0gKGN1cl9yYXRlICogMikpICYmIChtdWx0ID09IDEpKSB7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwgMSk7CisJfSBlbHNlIGlmIChyYXRlICE9IGN1cl9yYXRlKSB7CisJCXZhbGlkX3JhdGUgPSBvbWFwMl9kcGxsX3JvdW5kX3JhdGUocmF0ZSk7CisJCWlmICh2YWxpZF9yYXRlICE9IHJhdGUpCisJCQlnb3RvIGRwbGxfZXhpdDsKKworCQlpZiAoKENNX0NMS1NFTDJfUExMICYgMHgzKSA9PSAxKQorCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwkJZWxzZQorCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAvIDI7CisKKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsID0gQ01fQ0xLU0VMMV9QTEw7CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KDB4M0ZGRiA8PCA4KTsKKwkJZGl2ID0gKChjdXJyX3ByY21fc2V0LT54dGFsX3NwZWVkIC8gMTAwMDAwMCkgLSAxKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsID0gQ01fQ0xLU0VMMl9QTEw7CisJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCAmPSB+MHgzOworCQlpZiAocmF0ZSA+IGxvdykgeworCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IDB4MjsKKwkJCW11bHQgPSAoKHJhdGUgLyAyKSAvIDEwMDAwMDApOworCQkJZG9uZV9yYXRlID0gUFJDTV9GVUxMX1NQRUVEOworCQl9IGVsc2UgeworCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IDB4MTsKKwkJCW11bHQgPSAocmF0ZSAvIDEwMDAwMDApOworCQkJZG9uZV9yYXRlID0gUFJDTV9IQUxGX1NQRUVEOworCQl9CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAoKGRpdiA8PCA4KSB8IChtdWx0IDw8IDEyKSk7CisKKwkJLyogV29yc3QgY2FzZSAqLworCQl0bXBzZXQuYmFzZV9zZHJjX3JmciA9IFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTOworCisJCWlmIChyYXRlID09IGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQpCS8qIElmIGFza2luZyBmb3IgMS0xICovCisJCQlieXBhc3MgPSAxOworCisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwgMSk7IC8qIEZvciBpbml0X21lbSAqLworCisJCS8qIEZvcmNlIGRsbCBsb2NrIG1vZGUgKi8KKwkJb21hcDJfc2V0X3ByY20odG1wc2V0LmNtX2Nsa3NlbDFfcGxsLCB0bXBzZXQuYmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCS8qIEVycmF0YTogcmV0IGRsbCBlbnRyeSBzdGF0ZSAqLworCQlvbWFwMl9pbml0X21lbW9yeV9wYXJhbXMob21hcDJfZGxsX2ZvcmNlX25lZWRlZCgpKTsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoZG9uZV9yYXRlLCAwKTsKKwl9CisJb21hcDJfY2xrc2VsX3JlY2FsYygmZHBsbF9jayk7CisJcmV0ID0gMDsKKworZHBsbF9leGl0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4ocmV0KTsKK30KKworLyogSnVzdCByZXR1cm4gdGhlIE1QVSBzcGVlZCAqLworc3RhdGljIHZvaWQgb21hcDJfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQoreworCWNsay0+cmF0ZSA9IGN1cnJfcHJjbV9zZXQtPm1wdV9zcGVlZDsKK30KKworLyoKKyAqIExvb2sgZm9yIGEgcmF0ZSBlcXVhbCBvciBsZXNzIHRoYW4gdGhlIHRhcmdldCByYXRlIGdpdmVuIGEgY29uZmlndXJhdGlvbiBzZXQuCisgKgorICogV2hhdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpcyAid2hpY2giIGZpZWxkIHJlcHJlc2VudHMgdGhlIGtleSBmaWVsZC4KKyAqIFNvbWUgbWlnaHQgYXJndWUgTDMtRERSLCBvdGhlcnMgQVJNLCBvdGhlcnMgSVZBLiBUaGlzIGNvZGUgaXMgc2ltcGxlIGFuZAorICoganVzdCB1c2VzIHRoZSBBUk0gcmF0ZXMuCisgKi8KK3N0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXN0cnVjdCBwcmNtX2NvbmZpZyAqIHB0cjsKKwlsb25nIGhpZ2hlc3RfcmF0ZTsKKworCWlmIChjbGsgIT0gJnZpcnRfcHJjbV9zZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaGlnaGVzdF9yYXRlID0gLUVJTlZBTDsKKworCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5tcHVfc3BlZWQ7IHB0cisrKSB7CisJCWlmIChwdHItPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQloaWdoZXN0X3JhdGUgPSBwdHItPm1wdV9zcGVlZDsKKworCQkvKiBDYW4gY2hlY2sgb25seSBhZnRlciB4dGFsIGZyZXF1ZW5jeSBjaGVjayAqLworCQlpZiAocHRyLT5tcHVfc3BlZWQgPD0gcmF0ZSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaGlnaGVzdF9yYXRlOworfQorCisvKgorICogb21hcDJfY29udmVydF9maWVsZF90b19kaXYoKSAtIHR1cm4gZmllbGQgdmFsdWUgaW50byBpbnRlZ2VyIGRpdmlkZXIKKyAqLworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcih1MzIgZGl2X3NlbCwgdTMyIGZpZWxkX3ZhbCkKK3sKKwl1MzIgaTsKKwl1MzIgY2xrb3V0X2FycmF5W10gPSB7MSwgMiwgNCwgOCwgMTZ9OworCisJaWYgKChkaXZfc2VsICYgU1JDX1JBVEVfU0VMX01BU0spID09IENNX1NZU0NMS09VVF9TRUwxKSB7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCWlmIChmaWVsZF92YWwgPT0gaSkKKwkJCQlyZXR1cm4gY2xrb3V0X2FycmF5W2ldOworCQl9CisJCXJldHVybiB+MDsKKwl9IGVsc2UKKwkJcmV0dXJuIGZpZWxkX3ZhbDsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIENMS1NFTCBkaXZpZGVyIHJlZ2lzdGVyIHZhbHVlCisgKiBSRVZJU0lUOiBUaGlzIHNob3VsZCBiZSBjbGVhbmVkIHVwIHRvIHdvcmsgbmljZWx5IHdpdGggdm9pZCBfX2lvbWVtICoKKyAqLworc3RhdGljIHUzMiBvbWFwMl9nZXRfY2xrc2VsKHUzMiAqZGl2X3NlbCwgdTMyICpmaWVsZF9tYXNrLAorCQkJICAgIHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gfjA7CisJdTMyIHJlZ192YWwsIGRpdl9vZmY7CisJdTMyIGRpdl9hZGRyID0gMDsKKwl1MzIgbWFzayA9IH4wOworCisJZGl2X29mZiA9IGNsay0+cmF0ZV9vZmZzZXQ7CisKKwlzd2l0Y2ggKCgqZGl2X3NlbCAmIFNSQ19SQVRFX1NFTF9NQVNLKSkgeworCWNhc2UgQ01fTVBVX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX01QVTsKKwkJbWFzayA9IDB4MWY7CisJCWJyZWFrOworCWNhc2UgQ01fRFNQX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX0RTUDsKKwkJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCQlpZiAoKGRpdl9vZmYgPT0gMCkgfHwgKGRpdl9vZmYgPT0gOCkpCisJCQkJbWFzayA9IDB4MWY7CisJCQllbHNlIGlmIChkaXZfb2ZmID09IDUpCisJCQkJbWFzayA9IDB4MzsKKwkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDI0MzAoKSkgeworCQkJaWYgKGRpdl9vZmYgPT0gMCkKKwkJCQltYXNrID0gMHgxZjsKKwkJCWVsc2UgaWYgKGRpdl9vZmYgPT0gNSkKKwkJCQltYXNrID0gMHgzOworCQl9CisJCWJyZWFrOworCWNhc2UgQ01fR0ZYX1NFTDE6CisJCWRpdl9hZGRyID0gKHUzMikmQ01fQ0xLU0VMX0dGWDsKKwkJaWYgKGRpdl9vZmYgPT0gMCkKKwkJCW1hc2sgPSAweDc7CisJCWJyZWFrOworCWNhc2UgQ01fTU9ERU1fU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZDTV9DTEtTRUxfTURNOworCQlpZiAoZGl2X29mZiA9PSAwKQorCQkJbWFzayA9IDB4ZjsKKwkJYnJlYWs7CisJY2FzZSBDTV9TWVNDTEtPVVRfU0VMMToKKwkJZGl2X2FkZHIgPSAodTMyKSZQUkNNX0NMS09VVF9DVFJMOworCQlpZiAoKGRpdl9vZmYgPT0gMykgfHwgKGRpdl9vZmYgPSAxMSkpCisJCQltYXNrPSAweDM7CisJCWJyZWFrOworCWNhc2UgQ01fQ09SRV9TRUwxOgorCQlkaXZfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDFfQ09SRTsKKwkJc3dpdGNoIChkaXZfb2ZmKSB7CisJCWNhc2UgMDoJCQkJCS8qIGwzICovCisJCWNhc2UgODoJCQkJCS8qIGRzczEgKi8KKwkJY2FzZSAxNToJCQkJLyogdnlsbmMtMjQyMCAqLworCQljYXNlIDIwOgkJCQkvKiBzc2kgKi8KKwkJCW1hc2sgPSAweDFmOyBicmVhazsKKwkJY2FzZSA1OgkJCQkJLyogbDQgKi8KKwkJCW1hc2sgPSAweDM7IGJyZWFrOworCQljYXNlIDEzOgkJCQkvKiBkc3MyICovCisJCQltYXNrID0gMHgxOyBicmVhazsKKwkJY2FzZSAyNToJCQkJLyogdXNiICovCisJCQltYXNrID0gMHhmOyBicmVhazsKKwkJfQorCX0KKworCSpmaWVsZF9tYXNrID0gbWFzazsKKworCWlmICh1bmxpa2VseShtYXNrID09IH4wKSkKKwkJZGl2X2FkZHIgPSAwOworCisJKmRpdl9zZWwgPSBkaXZfYWRkcjsKKworCWlmICh1bmxpa2VseShkaXZfYWRkciA9PSAwKSkKKwkJcmV0dXJuIHJldDsKKworCS8qIElzb2xhdGUgZmllbGQgKi8KKwlyZWdfdmFsID0gX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKWRpdl9hZGRyKSAmIChtYXNrIDw8IGRpdl9vZmYpOworCisJLyogTm9ybWFsaXplIGJhY2sgdG8gZGl2aWRlciB2YWx1ZSAqLworCXJlZ192YWwgPj49IGRpdl9vZmY7CisKKwlyZXR1cm4gcmVnX3ZhbDsKK30KKworLyoKKyAqIFJldHVybiBkaXZpZGVyIHRvIGJlIGFwcGxpZWQgdG8gcGFyZW50IGNsb2NrLgorICogUmV0dXJuIDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyB1MzIgb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZGl2LCBkaXZfc2VsLCBkaXZfb2ZmLCBmaWVsZF9tYXNrLCBmaWVsZF92YWw7CisKKwkvKiBpc29sYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlkaXZfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisKKwlkaXZfb2ZmID0gY2xrLT5yYXRlX29mZnNldDsKKwlmaWVsZF92YWwgPSBvbWFwMl9nZXRfY2xrc2VsKCZkaXZfc2VsLCAmZmllbGRfbWFzaywgY2xrKTsKKwlpZiAoZGl2X3NlbCA9PSAwKQorCQlyZXR1cm4gcmV0OworCisJZGl2X3NlbCA9IChTUkNfUkFURV9TRUxfTUFTSyAmIGNsay0+ZmxhZ3MpOworCWRpdiA9IG9tYXAyX2Nsa3NlbF90b19kaXZpc29yKGRpdl9zZWwsIGZpZWxkX3ZhbCk7CisKKwlyZXR1cm4gZGl2OworfQorCisvKiBTZXQgdGhlIGNsb2NrIHJhdGUgZm9yIGEgY2xvY2sgc291cmNlICovCitzdGF0aWMgaW50IG9tYXAyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKKworeworCWludCByZXQgPSAtRUlOVkFMOworCXZvaWQgX19pb21lbSAqIHJlZzsKKwl1MzIgZGl2X3NlbCwgZGl2X29mZiwgZmllbGRfbWFzaywgZmllbGRfdmFsLCByZWdfdmFsLCB2YWxpZHJhdGU7CisJdTMyIG5ld19kaXYgPSAwOworCisJaWYgKCEoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSkgeworCQlpZiAoY2xrID09ICZkcGxsX2NrKQorCQkJcmV0dXJuIG9tYXAyX3JlcHJvZ3JhbV9kcGxsKGNsaywgcmF0ZSk7CisKKwkJLyogSXNvbGF0ZSBjb250cm9sIHJlZ2lzdGVyICovCisJCWRpdl9zZWwgPSAoU1JDX1JBVEVfU0VMX01BU0sgJiBjbGstPmZsYWdzKTsKKwkJZGl2X29mZiA9IGNsay0+c3JjX29mZnNldDsKKworCQl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShjbGssIHJhdGUsICZuZXdfZGl2KTsKKwkJaWYodmFsaWRyYXRlICE9IHJhdGUpCisJCQlyZXR1cm4ocmV0KTsKKworCQlmaWVsZF92YWwgPSBvbWFwMl9nZXRfY2xrc2VsKCZkaXZfc2VsLCAmZmllbGRfbWFzaywgY2xrKTsKKwkJaWYgKGRpdl9zZWwgPT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYoY2xrLT5mbGFncyAmIENNX1NZU0NMS09VVF9TRUwxKXsKKwkJCXN3aXRjaChuZXdfZGl2KXsKKwkJCWNhc2UgMTY6IGZpZWxkX3ZhbCA9IDQ7IGJyZWFrOworCQkJY2FzZSA4OiAgZmllbGRfdmFsID0gMzsgYnJlYWs7CisJCQljYXNlIDQ6ICBmaWVsZF92YWwgPSAyOyBicmVhazsKKwkJCWNhc2UgMjogIGZpZWxkX3ZhbCA9IDE7IGJyZWFrOworCQkJY2FzZSAxOiAgZmllbGRfdmFsID0gMDsgYnJlYWs7CisJCQl9CisJCX0KKwkJZWxzZQorCQkJZmllbGRfdmFsID0gbmV3X2RpdjsKKworCQlyZWcgPSAodm9pZCBfX2lvbWVtICopZGl2X3NlbDsKKworCQlyZWdfdmFsID0gX19yYXdfcmVhZGwocmVnKTsKKwkJcmVnX3ZhbCAmPSB+KGZpZWxkX21hc2sgPDwgZGl2X29mZik7CisJCXJlZ192YWwgfD0gKGZpZWxkX3ZhbCA8PCBkaXZfb2ZmKTsKKworCQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgcmVnKTsKKwkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBmaWVsZF92YWw7CisKKwkJaWYgKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkKKwkJCV9fcmF3X3dyaXRlbCgweDEsICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtDRkdfQ1RSTCk7CisJCXJldCA9IDA7CisJfSBlbHNlIGlmIChjbGstPnNldF9yYXRlICE9IDApCisJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKKworCWlmICh1bmxpa2VseShyZXQgPT0gMCAmJiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykpKQorCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCisJcmV0dXJuIHJldDsKK30KKworLyogQ29udmVydHMgZW5jb2RlZCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgaW50byBhIGZ1bGwgYWRkcmVzcyAqLworc3RhdGljIHUzMiBvbWFwMl9nZXRfc3JjX2ZpZWxkKHUzMiAqdHlwZV90b19hZGRyLCB1MzIgcmVnX29mZnNldCwKKwkJCSAgICAgICBzdHJ1Y3QgY2xrICpzcmNfY2xrLCB1MzIgKmZpZWxkX21hc2spCit7CisJdTMyIHZhbCA9IH4wLCBzcmNfcmVnX2FkZHIgPSAwLCBtYXNrID0gMDsKKworCS8qIEZpbmQgdGFyZ2V0IGNvbnRyb2wgcmVnaXN0ZXIuKi8KKwlzd2l0Y2ggKCgqdHlwZV90b19hZGRyICYgU1JDX1JBVEVfU0VMX01BU0spKSB7CisJY2FzZSBDTV9DT1JFX1NFTDE6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDFfQ09SRTsKKwkJaWYgKHJlZ19vZmZzZXQgPT0gMTMpIHsJCQkvKiBEU1MyX2ZjbGsgKi8KKwkJCW1hc2sgPSAweDE7CisJCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJCXZhbCA9IDA7CisJCQlpZiAoc3JjX2NsayA9PSAmZnVuY180OG1fY2spCisJCQkJdmFsID0gMTsKKwkJfSBlbHNlIGlmIChyZWdfb2Zmc2V0ID09IDgpIHsJCS8qIERTUzFfZmNsayAqLworCQkJbWFzayA9IDB4MWY7CisJCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJCXZhbCA9IDA7CisJCQllbHNlIGlmIChzcmNfY2xrID09ICZjb3JlX2NrKQkvKiBkaXZpZGVkIGNsb2NrICovCisJCQkJdmFsID0gMHgxMDsJCS8qIHJhdGUgbmVlZHMgZml4aW5nICovCisJCX0gZWxzZSBpZiAoKHJlZ19vZmZzZXQgPT0gMTUpICYmIGNwdV9pc19vbWFwMjQyMCgpKXsgLyp2bG55cSovCisJCQltYXNrID0gMHgxRjsKKwkJCWlmKHNyY19jbGsgPT0gJmZ1bmNfOTZtX2NrKQorCQkJCXZhbCA9IDA7CisJCQllbHNlIGlmIChzcmNfY2xrID09ICZjb3JlX2NrKQorCQkJCXZhbCA9IDB4MTA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDTV9DT1JFX1NFTDI6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDJfQ09SRTsKKwkJbWFzayA9IDB4MzsKKwkJaWYgKHNyY19jbGsgPT0gJmZ1bmNfMzJrX2NrKQorCQkJdmFsID0gMHgwOworCQlpZiAoc3JjX2NsayA9PSAmc3lzX2NrKQorCQkJdmFsID0gMHgxOworCQlpZiAoc3JjX2NsayA9PSAmYWx0X2NrKQorCQkJdmFsID0gMHgyOworCQlicmVhazsKKwljYXNlIENNX1dLVVBfU0VMMToKKwkJc3JjX3JlZ19hZGRyID0gKHUzMikmQ01fQ0xLU0VMMl9DT1JFOworCQltYXNrID0gMHgzOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCisJCQl2YWwgPSAweDA7CisJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCisJCQl2YWwgPSAweDE7CisJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCisJCQl2YWwgPSAweDI7CisJCWJyZWFrOworCWNhc2UgQ01fUExMX1NFTDE6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDFfUExMOworCQltYXNrID0gMHgxOworCQlpZiAocmVnX29mZnNldCA9PSAweDMpIHsKKwkJCWlmIChzcmNfY2xrID09ICZhcGxsOTZfY2spCisJCQkJdmFsID0gMDsKKwkJCWlmIChzcmNfY2xrID09ICZhbHRfY2spCisJCQkJdmFsID0gMTsKKwkJfQorCQllbHNlIGlmIChyZWdfb2Zmc2V0ID09IDB4NSkgeworCQkJaWYgKHNyY19jbGsgPT0gJmFwbGw1NF9jaykKKwkJCQl2YWwgPSAwOworCQkJaWYgKHNyY19jbGsgPT0gJmFsdF9jaykKKwkJCQl2YWwgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgQ01fUExMX1NFTDI6CisJCXNyY19yZWdfYWRkciA9ICh1MzIpJkNNX0NMS1NFTDJfUExMOworCQltYXNrID0gMHgzOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY18zMmtfY2spCisJCQl2YWwgPSAweDA7CisJCWlmIChzcmNfY2xrID09ICZkcGxsX2NrKQorCQkJdmFsID0gMHgyOworCQlicmVhazsKKwljYXNlIENNX1NZU0NMS09VVF9TRUwxOgorCQlzcmNfcmVnX2FkZHIgPSAodTMyKSZQUkNNX0NMS09VVF9DVFJMOworCQltYXNrID0gMHgzOworCQlpZiAoc3JjX2NsayA9PSAmZHBsbF9jaykKKwkJCXZhbCA9IDA7CisJCWlmIChzcmNfY2xrID09ICZzeXNfY2spCisJCQl2YWwgPSAxOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY181NG1fY2spCisJCQl2YWwgPSAyOworCQlpZiAoc3JjX2NsayA9PSAmZnVuY185Nm1fY2spCisJCQl2YWwgPSAzOworCQlicmVhazsKKwl9CisKKwlpZiAodmFsID09IH4wKQkJCS8qIENhdGNoIGVycm9ycyBpbiBvZmZzZXQgKi8KKwkJKnR5cGVfdG9fYWRkciA9IDA7CisJZWxzZQorCQkqdHlwZV90b19hZGRyID0gc3JjX3JlZ19hZGRyOworCSpmaWVsZF9tYXNrID0gbWFzazsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgb21hcDJfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KQoreworCXZvaWQgX19pb21lbSAqIHJlZzsKKwl1MzIgc3JjX3NlbCwgc3JjX29mZiwgZmllbGRfdmFsLCBmaWVsZF9tYXNrLCByZWdfdmFsLCByYXRlOworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNsay0+ZmxhZ3MgJiBTUkNfU0VMX01BU0spIHsJLyogT24tY2hpcCBTRUwgY29sbGVjdGlvbiAqLworCQlzcmNfc2VsID0gKFNSQ19SQVRFX1NFTF9NQVNLICYgY2xrLT5mbGFncyk7CisJCXNyY19vZmYgPSBjbGstPnNyY19vZmZzZXQ7CisKKwkJaWYgKHNyY19zZWwgPT0gMCkKKwkJCWdvdG8gc2V0X3BhcmVudF9lcnJvcjsKKworCQlmaWVsZF92YWwgPSBvbWFwMl9nZXRfc3JjX2ZpZWxkKCZzcmNfc2VsLCBzcmNfb2ZmLCBuZXdfcGFyZW50LAorCQkJCQkJJmZpZWxkX21hc2spOworCisJCXJlZyA9ICh2b2lkIF9faW9tZW0gKilzcmNfc2VsOworCisJCWlmIChjbGstPnVzZWNvdW50ID4gMCkKKwkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7CisKKwkJLyogU2V0IG5ldyBzb3VyY2UgdmFsdWUgKHByZXZpb3VzIGRpdmlkZXJzIGlmIGFueSBpbiBlZmZlY3QpICovCisJCXJlZ192YWwgPSBfX3Jhd19yZWFkbChyZWcpICYgfihmaWVsZF9tYXNrIDw8IHNyY19vZmYpOworCQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgc3JjX29mZik7CisJCV9fcmF3X3dyaXRlbChyZWdfdmFsLCByZWcpOworCisJCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFApCisJCQlfX3Jhd193cml0ZWwoMHgxLCAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLQ0ZHX0NUUkwpOworCisJCWlmIChjbGstPnVzZWNvdW50ID4gMCkKKwkJCW9tYXAyX2Nsa19lbmFibGUoY2xrKTsKKworCQljbGstPnBhcmVudCA9IG5ld19wYXJlbnQ7CisKKwkJLyogU1JDX1JBVEVfU0VMX01BU0sgY2xvY2tzIGZvbGxvdyB0aGVpciBwYXJlbnRzIHJhdGVzLiovCisJCWlmICgobmV3X3BhcmVudCA9PSAmY29yZV9jaykgJiYgKGNsayA9PSAmZHNzMV9mY2spKQorCQkJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZSAvIDB4MTA7CisJCWVsc2UKKwkJCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7CisKKwkJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQorCQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQljbGstPnBhcmVudCA9IG5ld19wYXJlbnQ7CisJCXJhdGUgPSBuZXdfcGFyZW50LT5yYXRlOworCQlvbWFwMl9jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwkJcmV0ID0gMDsKKwl9CisKKyBzZXRfcGFyZW50X2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKKy8qIFNldHMgYmFzaWMgY2xvY2tzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmF0ZSAqLworc3RhdGljIGludCBvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGZsYWdzLCBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwOworCXU4IGNwdV9tYXNrID0gMDsKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJdW5zaWduZWQgbG9uZyBmb3VuZF9zcGVlZCA9IDA7CisKKwlpZiAoY2xrICE9ICZ2aXJ0X3ByY21fc2V0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIEZJWE1FOiBDaGFuZ2UgY3B1X2lzX29tYXAyNDIwKCkgdG8gY3B1X2lzX29tYXAyNDJ4KCkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKQorCQljcHVfbWFzayA9IFJBVEVfSU5fMjQzWDsKKworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCisJCQljb250aW51ZTsKKworCQlpZiAocHJjbS0+bXB1X3NwZWVkIDw9IHJhdGUpIHsKKwkJCWZvdW5kX3NwZWVkID0gcHJjbS0+bXB1X3NwZWVkOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kX3NwZWVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBzZXQgTVBVIHJhdGUgdG8gJWx1TUh6XG4iLAorCSByYXRlIC8gMTAwMDAwMCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworCWN1cl9yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZSgmZHBsbF9jayk7CisKKwlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAvIDIpIHsKKwkJb21hcDJfcmVwcm9ncmFtX3NkcmMoUFJDTV9IQUxGX1NQRUVELCAxKTsKKwl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgKiAyKSB7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKFBSQ01fRlVMTF9TUEVFRCwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQorCQkJYnlwYXNzID0gMTsKKworCQlpZiAoKHByY20tPmNtX2Nsa3NlbDJfcGxsICYgMHgzKSA9PSAyKQorCQkJZG9uZV9yYXRlID0gUFJDTV9GVUxMX1NQRUVEOworCQllbHNlCisJCQlkb25lX3JhdGUgPSBQUkNNX0hBTEZfU1BFRUQ7CisKKwkJLyogTVBVIGRpdmlkZXIgKi8KKwkJQ01fQ0xLU0VMX01QVSA9IHByY20tPmNtX2Nsa3NlbF9tcHU7CisKKwkJLyogZHNwICsgaXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCQlDTV9DTEtTRUxfRFNQID0gcHJjbS0+Y21fY2xrc2VsX2RzcDsKKworCQlDTV9DTEtTRUxfR0ZYID0gcHJjbS0+Y21fY2xrc2VsX2dmeDsKKworCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KKwkJQ01fQ0xLU0VMMV9DT1JFID0gcHJjbS0+Y21fY2xrc2VsMV9jb3JlOworCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCQlDTV9DTEtTRUxfTURNID0gcHJjbS0+Y21fY2xrc2VsX21kbTsKKworCQkvKiB4MiB0byBlbnRlciBpbml0X21lbSAqLworCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhQUkNNX0ZVTExfU1BFRUQsIDEpOworCisJCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFfcGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAorCQkJICAgICAgIGJ5cGFzcyk7CisKKwkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7CisJCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKwlvbWFwMl9jbGtzZWxfcmVjYWxjKCZkcGxsX2NrKTsKKworCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9tYXAyIGNsb2NrIHJlc2V0IGFuZCBpbml0IGZ1bmN0aW9ucworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7CisJLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKKwkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCisJLmNsa191c2UJCT0gb21hcDJfY2xrX3VzZSwKKwkuY2xrX3VudXNlCQk9IG9tYXAyX2Nsa191bnVzZSwKKwkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCisJLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCisJLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dldF9jcnlzdGFsX3JhdGUoc3RydWN0IGNsayAqb3NjLCBzdHJ1Y3QgY2xrICpzeXMpCit7CisJdTMyIGRpdiwgYXBsbHMsIHNjbGsgPSAxMzAwMDAwMDsKKworCWFwbGxzID0gQ01fQ0xLU0VMMV9QTEw7CisJYXBsbHMgJj0gKCgxIDw8IDIzKSB8ICgxIDw8IDI0KSB8ICgxIDw8IDI1KSk7CisJYXBsbHMgPj49IDIzOwkJCS8qIElzb2xhdGUgZmllbGQsIDAsMiwzICovCisKKwlpZiAoYXBsbHMgPT0gMCkKKwkJc2NsayA9IDE5MjAwMDAwOworCWVsc2UgaWYgKGFwbGxzID09IDIpCisJCXNjbGsgPSAxMzAwMDAwMDsKKwllbHNlIGlmIChhcGxscyA9PSAzKQorCQlzY2xrID0gMTIwMDAwMDA7CisKKwlkaXYgPSBQUkNNX0NMS1NSQ19DVFJMOworCWRpdiAmPSAoKDEgPDwgNykgfCAoMSA8PCA2KSk7CisJZGl2ID4+PSBzeXMtPnJhdGVfb2Zmc2V0OworCisJb3NjLT5yYXRlID0gc2NsayAqIGRpdjsKKwlzeXMtPnJhdGUgPSBzY2xrOworfQorCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZGlzYWJsZV91bnVzZWRfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2s7CisJdTMyIHJlZ3ZhbDMyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaywgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAoY2stPnVzZWNvdW50ID4gMCB8fCAoY2stPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpIHx8CisJCQljay0+ZW5hYmxlX3JlZyA9PSAwKQorCQkJY29udGludWU7CisKKwkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjay0+ZW5hYmxlX3JlZyk7CisJCWlmICgocmVndmFsMzIgJiAoMSA8PCBjay0+ZW5hYmxlX2JpdCkpID09IDApCisJCQljb250aW51ZTsKKworCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIlxuIiwgY2stPm5hbWUpOworCQlvbWFwMl9jbGtfZGlzYWJsZShjayk7CisJfQorfQorbGF0ZV9pbml0Y2FsbChvbWFwMl9kaXNhYmxlX3VudXNlZF9jbG9ja3MpOworI2VuZGlmCisKKy8qCisgKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLgorICogV2UgY2Fubm90IGRvIHRoaXMgZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2Nsa19hcmNoX2luaXQodm9pZCkKK3sKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7CisKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3QgZmFzdCAqLworCXByb3BhZ2F0ZV9yYXRlKCZmdW5jXzMya19jayk7CQkvKiB1cGRhdGUgbWFpbiByb290IHNsb3cgKi8KKworCXByaW50ayhLRVJOX0lORk8gIlN3aXRjaGVkIHRvIG5ldyBjbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgorCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAorCSAgICAgICAoc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKHN5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICAoZHBsbF9jay5yYXRlIC8gMTAwMDAwMCksIChtcHVfY2sucmF0ZSAvIDEwMDAwMDApKSA7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwob21hcDJfY2xrX2FyY2hfaW5pdCk7CisKK2ludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJc3RydWN0IGNsayAqKiBjbGtwOworCXUzMiBjbGtyYXRlOworCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCW9tYXAyX2dldF9jcnlzdGFsX3JhdGUoJm9zY19jaywgJnN5c19jayk7CisKKwlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7CisJICAgICBjbGtwKyspIHsKKworCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBDTE9DS19JTl9PTUFQMjQyWCAmJiBjcHVfaXNfb21hcDI0MjAoKSkgeworCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0M1ggJiYgY3B1X2lzX29tYXAyNDMwKCkpIHsKKwkJCWNsa19yZWdpc3RlcigqY2xrcCk7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLworCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKCZkcGxsX2NrKTsKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA8PSBjbGtyYXRlKQorCQkJIGJyZWFrOworCX0KKwljdXJyX3ByY21fc2V0ID0gcHJjbTsKKworCXByb3BhZ2F0ZV9yYXRlKCZvc2NfY2spOwkJLyogdXBkYXRlIG1haW4gcm9vdCBmYXN0ICovCisJcHJvcGFnYXRlX3JhdGUoJmZ1bmNfMzJrX2NrKTsJCS8qIHVwZGF0ZSBtYWluIHJvb3Qgc2xvdyAqLworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkgICAgICAgKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa191c2UoJnN5bmNfMzJrX2ljayk7CisJY2xrX3VzZSgmb21hcGN0cmxfaWNrKTsKKwlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCWNsa191c2UoJnNkcmNfaWNrKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZWFiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKQEAgLTAsMCArMSwyMTAzIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDI0eHgvY2xvY2suaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgorICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBDcmVhdGVkIGZvciBPTUFQMi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCisgKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS19ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS19ICisKK3N0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHZvaWQgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgdm9pZCBvbWFwMl9wcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX21wdV9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitzdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyBvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgdm9pZCBvbWFwMl9jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcih1MzIgZGl2X3NlbCwgdTMyIGZpZWxkX3ZhbCk7CitzdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9nZXRfZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGspOworCisKKyNkZWZpbmUgUkFURV9JTl8yNDJYCSgxIDw8IDApCisjZGVmaW5lIFJBVEVfSU5fMjQzWAkoMSA8PCAxKQorCisvKiBNZW1vcnkgdGltaW5ncyAqLworI2RlZmluZSBNX0REUgkJMQorI2RlZmluZSBNX0xPQ0tfQ1RSTAkoMSA8PCAyKQorI2RlZmluZSBNX1VOTE9DSwkwCisjZGVmaW5lIE1fTE9DSwkJMQorCitzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgeworCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCisJdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLworCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCisJdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KKwl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KK307CisKKy8qIEtleSBkaXZpZGVycyB3aGljaCBtYWtlIHVwIGEgUFJDTSBzZXQuIFJhdGlvJ3MgZm9yIGEgUFJDTSBhcmUgbWFuZGF0ZWQuCisgKiB4dGFsX3NwZWVkLCBkcGxsX3NwZWVkLCBtcHVfc3BlZWQsIENNX0NMS1NFTF9NUFUsQ01fQ0xLU0VMX0RTUAorICogQ01fQ0xLU0VMX0dGWCwgQ01fQ0xLU0VMMV9DT1JFLCBDTV9DTEtTRUwxX1BMTCBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQorICovCitzdHJ1Y3QgcHJjbV9jb25maWcgeworCXVuc2lnbmVkIGxvbmcgeHRhbF9zcGVlZDsJLyogY3J5c3RhbCByYXRlICovCisJdW5zaWduZWQgbG9uZyBkcGxsX3NwZWVkOwkvKiBkcGxsOiBvdXQqeHRhbCpNLyhOLTEpdGFibGVfcmVjYWxjICovCisJdW5zaWduZWQgbG9uZyBtcHVfc3BlZWQ7CS8qIHNwZWVkIG9mIE1QVSAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX21wdTsJLyogbXB1IGRpdmlkZXIgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbF9kc3A7CS8qIGRzcCtpdmExIGRpdigyNDIwKSwgaXZhMi4xKDI0MzApICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWxfZ2Z4OwkvKiBnZnggZGl2aWRlcnMgKi8KKwl1bnNpZ25lZCBsb25nIGNtX2Nsa3NlbDFfY29yZTsJLyogbWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwxX3BsbDsJLyogbSxuICovCisJdW5zaWduZWQgbG9uZyBjbV9jbGtzZWwyX3BsbDsJLyogZHBsbHgxIG9yIHgyIG91dCAqLworCXVuc2lnbmVkIGxvbmcgY21fY2xrc2VsX21kbTsJLyogbW9kZW0gZGl2aWRlcnMgMjQzMCBvbmx5ICovCisJdW5zaWduZWQgbG9uZyBiYXNlX3NkcmNfcmZyOwkvKiBiYXNlIHJlZnJlc2ggdGltaW5nIGZvciBhIHNldCAqLworCXVuc2lnbmVkIGNoYXIgZmxhZ3M7Cit9OworCisvKiBNYXNrIGZvciBjbGtzZWwgd2hpY2ggc3VwcG9ydCBwYXJlbnQgc2V0dGlnbiBpbiBzZXRfcmF0ZSAqLworI2RlZmluZSBTUkNfU0VMX01BU0sgKENNX0NPUkVfU0VMMSB8IENNX0NPUkVfU0VMMiB8IENNX1dLVVBfU0VMMSB8IFwKKwkJCUNNX1BMTF9TRUwxIHwgQ01fUExMX1NFTDIgfCBDTV9TWVNDTEtPVVRfU0VMMSkKKworLyogTWFzayBmb3IgY2xrc2VsIHJlZ3Mgd2hpY2ggc3VwcG9ydCByYXRlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgU1JDX1JBVEVfU0VMX01BU0sgKENNX01QVV9TRUwxIHwgQ01fRFNQX1NFTDEgfCBDTV9HRlhfU0VMMSB8IFwKKwkJCUNNX01PREVNX1NFTDEgfCBDTV9DT1JFX1NFTDEgfCBDTV9DT1JFX1NFTDIgfCBcCisJCQlDTV9XS1VQX1NFTDEgfCBDTV9QTExfU0VMMSB8IENNX1BMTF9TRUwyIHwgXAorCQkJQ01fU1lTQ0xLT1VUX1NFTDEpCisKKy8qCisgKiBUaGUgT01BUDIgcHJvY2Vzc29yIGNhbiBiZSBydW4gYXQgc2V2ZXJhbCBkaXNjcmV0ZSAnUFJDTSBjb25maWd1cmF0aW9ucycuCisgKiBUaGVzZSBjb25maWd1cmF0aW9ucyBhcmUgY2hhcmFjdGVyaXplZCBieSB2b2x0YWdlIGFuZCBzcGVlZCBmb3IgY2xvY2tzLgorICogVGhlIGRldmljZSBpcyBvbmx5IHZhbGlkYXRlZCBmb3IgY2VydGFpbiBjb21iaW5hdGlvbnMuIE9uZSB3YXkgdG8gZXhwcmVzcworICogdGhlc2UgY29tYmluYXRpb25zIGlzIHZpYSB0aGUgJ3JhdGlvJ3MnIHdoaWNoIHRoZSBjbG9ja3Mgb3BlcmF0ZSB3aXRoCisgKiByZXNwZWN0IHRvIGVhY2ggb3RoZXIuIFRoZXNlIHJhdGlvIHNldHMgYXJlIGZvciBhIGdpdmVuIHZvbHRhZ2UvRFBMTAorICogc2V0dGluZy4gQWxsIGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBkZXNjcmliZWQgYnkgYSBEUExMIHNldHRpbmcgYW5kIGEgcmF0aW8KKyAqIFRoZXJlIGFyZSAzIHJhdGlvIHNldHMgZm9yIHRoZSAyNDMwIGFuZCBYIHJhdGlvIHNldHMgZm9yIDI0MjAuCisgKgorICogMjQzMCBkaWZmZXJzIGZyb20gMjQyMCBpbiB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHBoYXNlIHN5bmNocm9uaXplcnMgdXNlZC4KKyAqIFRoZXkgYm90aCBoYXZlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IGNsb2NrIGRvbWFpbiBzZXR1cC4gMjQyMChpdmExLGRzcCkgdnMKKyAqIDI0MzAgKGl2YTIuMSwgTk9kc3AsIG1kbSkKKyAqLworCisvKiBDb3JlIGZpZWxkcyBmb3IgY21fY2xrc2VsLCBub3QgcmF0aW8gZ292ZXJuZWQgKi8KKyNkZWZpbmUgUlhfQ0xLU0VMX0RTUzEJCQkoMHgxMCA8PCA4KQorI2RlZmluZSBSWF9DTEtTRUxfRFNTMgkJCSgweDAgPDwgMTMpCisjZGVmaW5lIFJYX0NMS1NFTF9TU0kJCQkoMHg1IDw8IDIwKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFZvbHRhZ2UvRFBMTCByYXRpb3MKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIDI0MzAgUmF0aW8ncywgMjQzMC1SYXRpbyBDb25maWcgMSAqLworI2RlZmluZSBSMV9DTEtTRUxfTDMJCQkoNCA8PCAwKQorI2RlZmluZSBSMV9DTEtTRUxfTDQJCQkoMiA8PCA1KQorI2RlZmluZSBSMV9DTEtTRUxfVVNCCQkJKDQgPDwgMjUpCisjZGVmaW5lIFIxX0NNX0NMS1NFTDFfQ09SRV9WQUwJCVIxX0NMS1NFTF9VU0IgfCBSWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWF9DTEtTRUxfRFNTMiB8IFJYX0NMS1NFTF9EU1MxIHwgXAorCQkJCQlSMV9DTEtTRUxfTDQgfCBSMV9DTEtTRUxfTDMKKyNkZWZpbmUgUjFfQ0xLU0VMX01QVQkJCSgyIDw8IDApCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9NUFVfVkFMCQlSMV9DTEtTRUxfTVBVCisjZGVmaW5lIFIxX0NMS1NFTF9EU1AJCQkoMiA8PCAwKQorI2RlZmluZSBSMV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQorI2RlZmluZSBSMV9DTV9DTEtTRUxfRFNQX1ZBTAkJUjFfQ0xLU0VMX0RTUCB8IFIxX0NMS1NFTF9EU1BfSUYKKyNkZWZpbmUgUjFfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCisjZGVmaW5lIFIxX0NNX0NMS1NFTF9HRlhfVkFMCQlSMV9DTEtTRUxfR0ZYCisjZGVmaW5lIFIxX0NMS1NFTF9NRE0JCQkoNCA8PCAwKQorI2RlZmluZSBSMV9DTV9DTEtTRUxfTURNX1ZBTAkJUjFfQ0xLU0VMX01ETQorCisvKiAyNDMwLVJhdGlvIENvbmZpZyAyICovCisjZGVmaW5lIFIyX0NMS1NFTF9MMwkJCSg2IDw8IDApCisjZGVmaW5lIFIyX0NMS1NFTF9MNAkJCSgyIDw8IDUpCisjZGVmaW5lIFIyX0NMS1NFTF9VU0IJCQkoMiA8PCAyNSkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUjJfQ0xLU0VMX1VTQiB8IFJYX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MyIHwgUlhfQ0xLU0VMX0RTUzEgfCBcCisJCQkJCVIyX0NMS1NFTF9MNCB8IFIyX0NMS1NFTF9MMworI2RlZmluZSBSMl9DTEtTRUxfTVBVCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX01QVV9WQUwJCVIyX0NMS1NFTF9NUFUKKyNkZWZpbmUgUjJfQ0xLU0VMX0RTUAkJCSgyIDw8IDApCisjZGVmaW5lIFIyX0NMS1NFTF9EU1BfSUYJCSgzIDw8IDUpCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9EU1BfVkFMCQlSMl9DTEtTRUxfRFNQIHwgUjJfQ0xLU0VMX0RTUF9JRgorI2RlZmluZSBSMl9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkKKyNkZWZpbmUgUjJfQ01fQ0xLU0VMX0dGWF9WQUwJCVIyX0NMS1NFTF9HRlgKKyNkZWZpbmUgUjJfQ0xLU0VMX01ETQkJCSg2IDw8IDApCisjZGVmaW5lIFIyX0NNX0NMS1NFTF9NRE1fVkFMCQlSMl9DTEtTRUxfTURNCisKKy8qIDI0MzAtUmF0aW8gQm9vdG0gKEJZUEFTUykgKi8KKyNkZWZpbmUgUkJfQ0xLU0VMX0wzCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKKyNkZWZpbmUgUkJfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQorI2RlZmluZSBSQl9DTV9DTEtTRUwxX0NPUkVfVkFMCQlSQl9DTEtTRUxfVVNCIHwgUlhfQ0xLU0VMX1NTSSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUkJfQ0xLU0VMX0w0IHwgUkJfQ0xLU0VMX0wzCisjZGVmaW5lIFJCX0NMS1NFTF9NUFUJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTV9DTEtTRUxfTVBVX1ZBTAkJUkJfQ0xLU0VMX01QVQorI2RlZmluZSBSQl9DTEtTRUxfRFNQCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ0xLU0VMX0RTUF9JRgkJKDEgPDwgNSkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX0RTUF9WQUwJCVJCX0NMS1NFTF9EU1AgfCBSQl9DTEtTRUxfRFNQX0lGCisjZGVmaW5lIFJCX0NMS1NFTF9HRlgJCQkoMSA8PCAwKQorI2RlZmluZSBSQl9DTV9DTEtTRUxfR0ZYX1ZBTAkJUkJfQ0xLU0VMX0dGWAorI2RlZmluZSBSQl9DTEtTRUxfTURNCQkJKDEgPDwgMCkKKyNkZWZpbmUgUkJfQ01fQ0xLU0VMX01ETV9WQUwJCVJCX0NMS1NFTF9NRE0KKworLyogMjQyMCBSYXRpbyBFcXVpdmFsZW50cyAqLworI2RlZmluZSBSWFhfQ0xLU0VMX1ZMWU5RCQkoMHgxMiA8PCAxNSkKKyNkZWZpbmUgUlhYX0NMS1NFTF9TU0kJCQkoMHg4IDw8IDIwKQorCisvKiAyNDIwLVBSQ00gSUlJIDUzMk1IeiBjb3JlICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0wzCQkJKDQgPDwgMCkJLyogMTMzTUh6ICovCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0w0CQkJKDIgPDwgNSkJLyogNjYuNU1IeiAqLworI2RlZmluZSBSSUlJX0NMS1NFTF9VU0IJCQkoNCA8PCAyNSkJLyogMzMuMjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMCVJJSUlfQ0xLU0VMX1VTQiB8IFJYWF9DTEtTRUxfU1NJIHwgXAorCQkJCQlSWFhfQ0xLU0VMX1ZMWU5RIHwgUlhfQ0xLU0VMX0RTUzIgfCBcCisJCQkJCVJYX0NMS1NFTF9EU1MxIHwgUklJSV9DTEtTRUxfTDQgfCBcCisJCQkJCVJJSUlfQ0xLU0VMX0wzCisjZGVmaW5lIFJJSUlfQ0xLU0VMX01QVQkJCSgyIDw8IDApCS8qIDI2Nk1IeiAqLworI2RlZmluZSBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlJX0NMS1NFTF9NUFUKKyNkZWZpbmUgUklJSV9DTEtTRUxfRFNQCQkJKDMgPDwgMCkJLyogYzV4IC0gMTc3LjNNSHogKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfRFNQX0lGCQkoMiA8PCA1KQkvKiBjNXggLSA4OC42N01IeiAqLworI2RlZmluZSBSSUlJX1NZTkNfRFNQCQkJKDEgPDwgNykJLyogRW5hYmxlIHN5bmMgKi8KKyNkZWZpbmUgUklJSV9DTEtTRUxfSVZBCQkJKDYgPDwgOCkJLyogaXZhMSAtIDg4LjY3TUh6ICovCisjZGVmaW5lIFJJSUlfU1lOQ19JVkEJCQkoMSA8PCAxMykJLyogRW5hYmxlIHN5bmMgKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUxfRFNQX1ZBTAkJUklJSV9TWU5DX0lWQSB8IFJJSUlfQ0xLU0VMX0lWQSB8IFwKKwkJCQkJUklJSV9TWU5DX0RTUCB8IFJJSUlfQ0xLU0VMX0RTUF9JRiB8IFwKKwkJCQkJUklJSV9DTEtTRUxfRFNQCisjZGVmaW5lIFJJSUlfQ0xLU0VMX0dGWAkJCSgyIDw8IDApCS8qIDY2LjVNSHogKi8KKyNkZWZpbmUgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUklJSV9DTEtTRUxfR0ZYCisKKy8qIDI0MjAtUFJDTSBJSSA2MDBNSHogY29yZSAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0wzCQkJKDYgPDwgMCkJLyogMTAwTUh6ICovCisjZGVmaW5lIFJJSV9DTEtTRUxfTDQJCQkoMiA8PCA1KQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ0xLU0VMX1VTQgkJCSgyIDw8IDI1KQkvKiA1ME1IeiAqLworI2RlZmluZSBSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAkJUklJX0NMS1NFTF9VU0IgfCBcCisJCQkJCVJYWF9DTEtTRUxfU1NJIHwgUlhYX0NMS1NFTF9WTFlOUSB8IFwKKwkJCQkJUlhfQ0xLU0VMX0RTUzIgfCBSWF9DTEtTRUxfRFNTMSB8IFwKKwkJCQkJUklJX0NMS1NFTF9MNCB8IFJJSV9DTEtTRUxfTDMKKyNkZWZpbmUgUklJX0NMS1NFTF9NUFUJCQkoMiA8PCAwKQkvKiAzMDBNSHogKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTF9NUFVfVkFMCQlSSUlfQ0xLU0VMX01QVQorI2RlZmluZSBSSUlfQ0xLU0VMX0RTUAkJCSgzIDw8IDApCS8qIGM1eCAtIDIwME1IeiAqLworI2RlZmluZSBSSUlfQ0xLU0VMX0RTUF9JRgkJKDIgPDwgNSkJLyogYzV4IC0gMTAwTUh6ICovCisjZGVmaW5lIFJJSV9TWU5DX0RTUAkJCSgwIDw8IDcpCS8qIEJ5cGFzcyBzeW5jICovCisjZGVmaW5lIFJJSV9DTEtTRUxfSVZBCQkJKDYgPDwgOCkJLyogaXZhMSAtIDIwME1IeiAqLworI2RlZmluZSBSSUlfU1lOQ19JVkEJCQkoMCA8PCAxMykJLyogQnlwYXNzIHN5bmMgKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTF9EU1BfVkFMCQlSSUlfU1lOQ19JVkEgfCBSSUlfQ0xLU0VMX0lWQSB8IFwKKwkJCQkJUklJX1NZTkNfRFNQIHwgUklJX0NMS1NFTF9EU1BfSUYgfCBcCisJCQkJCVJJSV9DTEtTRUxfRFNQCisjZGVmaW5lIFJJSV9DTEtTRUxfR0ZYCQkJKDIgPDwgMCkJLyogNTBNSHogKi8KKyNkZWZpbmUgUklJX0NNX0NMS1NFTF9HRlhfVkFMCQlSSUlfQ0xLU0VMX0dGWAorCisvKiAyNDIwLVBSQ00gVklJIChib290KSAqLworI2RlZmluZSBSVklJX0NMS1NFTF9MMwkJCSgxIDw8IDApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX0w0CQkJKDEgPDwgNSkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMQkJKDEgPDwgOCkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNTMgkJKDAgPDwgMTMpCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1ZMWU5RCQkoMSA8PCAxNSkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfU1NJCQkJKDEgPDwgMjApCisjZGVmaW5lIFJWSUlfQ0xLU0VMX1VTQgkJCSgxIDw8IDI1KQorCisjZGVmaW5lIFJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTAlSVklJX0NMS1NFTF9VU0IgfCBSVklJX0NMS1NFTF9TU0kgfCBcCisJCQkJCVJWSUlfQ0xLU0VMX1ZMWU5RIHwgUlZJSV9DTEtTRUxfRFNTMiB8IFwKKwkJCQkJUlZJSV9DTEtTRUxfRFNTMSB8IFJWSUlfQ0xLU0VMX0w0IHwgUlZJSV9DTEtTRUxfTDMKKworI2RlZmluZSBSVklJX0NMS1NFTF9NUFUJCQkoMSA8PCAwKSAvKiBhbGwgZGl2aWRlIGJ5IDEgKi8KKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfTVBVX1ZBTAkJUlZJSV9DTEtTRUxfTVBVCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNQCQkJKDEgPDwgMCkKKyNkZWZpbmUgUlZJSV9DTEtTRUxfRFNQX0lGCQkoMSA8PCA1KQorI2RlZmluZSBSVklJX1NZTkNfRFNQCQkJKDAgPDwgNykKKyNkZWZpbmUgUlZJSV9DTEtTRUxfSVZBCQkJKDEgPDwgOCkKKyNkZWZpbmUgUlZJSV9TWU5DX0lWQQkJCSgwIDw8IDEzKQorI2RlZmluZSBSVklJX0NNX0NMS1NFTF9EU1BfVkFMCQlSVklJX1NZTkNfSVZBIHwgUlZJSV9DTEtTRUxfSVZBIHwgUlZJSV9TWU5DX0RTUCB8IFwKKwkJCQkJUlZJSV9DTEtTRUxfRFNQX0lGIHwgUlZJSV9DTEtTRUxfRFNQCisKKyNkZWZpbmUgUlZJSV9DTEtTRUxfR0ZYCQkJKDEgPDwgMCkKKyNkZWZpbmUgUlZJSV9DTV9DTEtTRUxfR0ZYX1ZBTAkJUlZJSV9DTEtTRUxfR0ZYCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMjQzMCBUYXJnZXQgbW9kZXM6IEFsb25nIHdpdGggZWFjaCBjb25maWd1cmF0aW9uIHRoZSBDUFUgaGFzIHNldmVyYWwKKyAqIG1vZGVzIHdoaWNoIGdvZXMgYWxvbmcgd2l0aCB0aGVtLiBNb2RlcyBtYWlubHkgYXJlIHRoZSBhZGRpdGlvbiBvZgorICogZGVzY3JpYmUgRFBMTCBjb21iaW5hdGlvbnMgdG8gZ28gYWxvbmcgd2l0aCBhIHJhdGlvLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogSGFyZHdhcmUgZ292ZXJuZWQgKi8KKyNkZWZpbmUgTVhfNDhNX1NSQwkJCSgwIDw8IDMpCisjZGVmaW5lIE1YXzU0TV9TUkMJCQkoMCA8PCA1KQorI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTIJCSgzIDw8IDIzKQorI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTMJCSgyIDw8IDIzKQorI2RlZmluZSBNWF9BUExMU19DTElLSU5fMTlfMgkJKDAgPDwgMjMpCisKKy8qCisgKiAyNDMwIC0gc3RhbmRhbG9uZSwgMipyZWYqTS8obisxKSwgTS9OIGlzIGZvciBleGFjdG5lc3Mgbm90IHJlbG9jayBzcGVlZAorICogIzIJKHJhdGlvMSkgYmFzZXBvcnQtdGFyZ2V0CisgKiAjNWEJKHJhdGlvMSkgYmFzZXBvcnQtdGFyZ2V0LCB0YXJnZXQgRFBMTCA9IDI2NioyID0gNTMyTUh6CisgKi8KKyNkZWZpbmUgTTVBX0RQTExfTVVMVF8xMgkJKDEzMyA8PCAxMikKKyNkZWZpbmUgTTVBX0RQTExfRElWXzEyCQkJKDUgPDwgOCkKKyNkZWZpbmUgTTVBX0NNX0NMS1NFTDFfUExMXzEyX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTVBX0RQTExfRElWXzEyIHwgTTVBX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE01QV9EUExMX01VTFRfMTMJCSgyNjYgPDwgMTIpCisjZGVmaW5lIE01QV9EUExMX0RJVl8xMwkJCSgxMiA8PCA4KQorI2RlZmluZSBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUFfRFBMTF9ESVZfMTMgfCBNNUFfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKyNkZWZpbmUgTTVBX0RQTExfTVVMVF8xOQkJKDE4MCA8PCAxMikKKyNkZWZpbmUgTTVBX0RQTExfRElWXzE5CQkJKDEyIDw8IDgpCisjZGVmaW5lIE01QV9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01QV9EUExMX0RJVl8xOSB8IE01QV9EUExMX01VTFRfMTkgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCisvKiAjNWIJKHJhdGlvMSkgdGFyZ2V0IERQTEwgPSAyMDAqMiA9IDQwME1IeiAqLworI2RlZmluZSBNNUJfRFBMTF9NVUxUXzEyCQkoNTAgPDwgMTIpCisjZGVmaW5lIE01Ql9EUExMX0RJVl8xMgkJCSgyIDw8IDgpCisjZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01Ql9EUExMX0RJVl8xMiB8IE01Ql9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNNUJfRFBMTF9NVUxUXzEzCQkoMjAwIDw8IDEyKQorI2RlZmluZSBNNUJfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKworI2RlZmluZSBNNUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNNUJfRFBMTF9ESVZfMTMgfCBNNUJfRFBMTF9NVUxUXzEzIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTMKKyNkZWZpbmUgTTVCX0RQTExfTVVMVF8xOQkJKDEyNSA8PCAxMikKKyNkZWZpbmUgTTVCX0RQTExfRElWXzE5CQkJKDMxIDw8IDgpCisjZGVmaW5lIE01Ql9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU01Ql9EUExMX0RJVl8xOSB8IE01Ql9EUExMX01VTFRfMTkgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCisvKgorICogIzQJKHJhdGlvMikKKyAqICMzCShyYXRpbzIpIGJhc2Vwb3J0LXRhcmdldCwgdGFyZ2V0IERQTEwgPSAzMzAqMiA9IDY2ME1IegorICovCisjZGVmaW5lIE0zX0RQTExfTVVMVF8xMgkJCSg1NSA8PCAxMikKKyNkZWZpbmUgTTNfRFBMTF9ESVZfMTIJCQkoMSA8PCA4KQorI2RlZmluZSBNM19DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU0zX0RQTExfRElWXzEyIHwgTTNfRFBMTF9NVUxUXzEyIHwgXAorCQkJCQlNWF9BUExMU19DTElLSU5fMTIKKyNkZWZpbmUgTTNfRFBMTF9NVUxUXzEzCQkJKDMzMCA8PCAxMikKKyNkZWZpbmUgTTNfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTTNfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1YXzQ4TV9TUkMgfCBNWF81NE1fU1JDIHwgXAorCQkJCQlNM19EUExMX0RJVl8xMyB8IE0zX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisjZGVmaW5lIE0zX0RQTExfTVVMVF8xOQkJCSgyNzUgPDwgMTIpCisjZGVmaW5lIE0zX0RQTExfRElWXzE5CQkJKDE1IDw8IDgpCisjZGVmaW5lIE0zX0NNX0NMS1NFTDFfUExMXzE5X1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTTNfRFBMTF9ESVZfMTkgfCBNM19EUExMX01VTFRfMTkgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xOV8yCisvKiBib290IChib290KSAqLworI2RlZmluZSBNQl9EUExMX01VTFQJCQkoMSA8PCAxMikKKyNkZWZpbmUgTUJfRFBMTF9ESVYJCQkoMCA8PCA4KQorI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAorCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTIKKworI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAorCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTMKKworI2RlZmluZSBNQl9DTV9DTEtTRUwxX1BMTF8xOV9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBNQl9EUExMX0RJViB8XAorCQkJCQlNQl9EUExMX01VTFQgfCBNWF9BUExMU19DTElLSU5fMTkKKworLyoKKyAqIDI0MzAgLSBjaGFzc2lzIChzZWRuYSkKKyAqIDE2NSAocmF0aW8xKSBzYW1lIGFzIGFib3ZlICMyCisgKiAxNTAgKHJhdGlvMSkKKyAqIDEzMyAocmF0aW8yKSBzYW1lIGFzIGFib3ZlICM0CisgKiAxMTAgKHJhdGlvMikgc2FtZSBhcyBhYm92ZSAjMworICogMTA0IChyYXRpbzIpCisgKiBib290IChib290KQorICovCisKKy8qCisgKiAyNDIwIEVxdWl2YWxlbnQgLSBtb2RlIHJlZ2lzdGVycworICogUFJDTSBJSSAsIHRhcmdldCBEUExMID0gMiozMDBNSHogPSA2MDBNSHoKKyAqLworI2RlZmluZSBNSUlfRFBMTF9NVUxUXzEyCQkoNTAgPDwgMTIpCisjZGVmaW5lIE1JSV9EUExMX0RJVl8xMgkJCSgxIDw8IDgpCisjZGVmaW5lIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSV9EUExMX0RJVl8xMiB8IE1JSV9EUExMX01VTFRfMTIgfCBcCisJCQkJCU1YX0FQTExTX0NMSUtJTl8xMgorI2RlZmluZSBNSUlfRFBMTF9NVUxUXzEzCQkoMzAwIDw8IDEyKQorI2RlZmluZSBNSUlfRFBMTF9ESVZfMTMJCQkoMTIgPDwgOCkKKyNkZWZpbmUgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAlNWF80OE1fU1JDIHwgTVhfNTRNX1NSQyB8IFwKKwkJCQkJTUlJX0RQTExfRElWXzEzIHwgTUlJX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisKKy8qIFBSQ00gSUlJIHRhcmdldCBEUExMID0gMioyNjYgPSA1MzJNSHoqLworI2RlZmluZSBNSUlJX0RQTExfTVVMVF8xMgkJKDEzMyA8PCAxMikKKyNkZWZpbmUgTUlJSV9EUExMX0RJVl8xMgkJKDUgPDwgOCkKKyNkZWZpbmUgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSUlfRFBMTF9ESVZfMTIgfCBNSUlJX0RQTExfTVVMVF8xMiB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEyCisjZGVmaW5lIE1JSUlfRFBMTF9NVUxUXzEzCQkoMjY2IDw8IDEyKQorI2RlZmluZSBNSUlJX0RQTExfRElWXzEzCQkoMTIgPDwgOCkKKyNkZWZpbmUgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwJTVhfNDhNX1NSQyB8IE1YXzU0TV9TUkMgfCBcCisJCQkJCU1JSUlfRFBMTF9ESVZfMTMgfCBNSUlJX0RQTExfTVVMVF8xMyB8IFwKKwkJCQkJTVhfQVBMTFNfQ0xJS0lOXzEzCisKKy8qIFBSQ00gVklJIChib290IGJ5cGFzcykgKi8KKyNkZWZpbmUgTVZJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwJTUJfQ01fQ0xLU0VMMV9QTExfMTJfVkFMCisjZGVmaW5lIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMCU1CX0NNX0NMS1NFTDFfUExMXzEzX1ZBTAorCisvKiBIaWdoIGFuZCBsb3cgb3BlcmF0aW9uIHZhbHVlICovCisjZGVmaW5lIE1YX0NMS1NFTDJfUExMXzJ4X1ZBTAkJKDIgPDwgMCkKKyNkZWZpbmUgTVhfQ0xLU0VMMl9QTExfMXhfVkFMCQkoMSA8PCAwKQorCisvKgorICogVGhlc2UgcmVwcmVzZW50IG9wdGltYWwgdmFsdWVzIGZvciBjb21tb24gcGFydHMsIGl0IHdvbid0IHdvcmsgZm9yIGFsbC4KKyAqIEFzIGxvbmcgYXMgeW91IHNjYWxlIGRvd24sIG1vc3QgcGFyYW1ldGVycyBhcmUgc3RpbGwgd29yaywgdGhleSBqdXN0CisgKiBiZWNvbWUgc3ViLW9wdGltYWwuIFRoZSBSRlIgdmFsdWUgZ29lcyBpbiB0aGUgb3BwaXNpdGUgZGlyZWN0aW9uLiBJZiB5b3UKKyAqIGRvbid0IGFkanVzdCBpdCBkb3duIGFzIHlvdXIgY2xvY2sgcGVyaW9kIGluY3JlYXNlcyB0aGUgcmVmcmVzaCBpbnRlcnZhbAorICogd2lsbCBub3QgYmUgbWV0LiBTZXR0aW5nIGFsbCBwYXJhbWV0ZXJzIGZvciBjb21wbGV0ZSB3b3JzdCBjYXNlIG1heSB3b3JrLAorICogYnV0IG1heSBjdXQgbWVtb3J5IHBlcmZvcm1hbmNlIGJ5IDJ4LiBEdWUgdG8gZXJyYXRhIHRoZSBETExzIG5lZWQgdG8gYmUKKyAqIHVubG9ja2VkIGFuZCB0aGVpciB2YWx1ZSBuZWVkcyBydW4gdGltZSBjYWxpYnJhdGlvbi4JQSBkeW5hbWljIGNhbGwgaXMKKyAqIG5lZWQgZm9yIHRoYXQgYXMgbm8gc2luZ2xlIHJpZ2h0IHZhbHVlIGV4aXN0cyBhY29yc3MgcHJvZHVjdGlvbiBzYW1wbGVzLgorICoKKyAqIE9ubHkgdGhlIEZVTEwgc3BlZWQgdmFsdWVzIGFyZSBnaXZlbi4gQ3VycmVudCBjb2RlIGlzIHN1Y2ggdGhhdCByYXRlCisgKiBjaGFuZ2VzIG11c3QgYmUgbWFkZSBhdCBEUExMb3V0eDIuIFRoZSBhY3R1YWwgdmFsdWUgYWRqdXN0bWVudCBmb3IgbG93CisgKiBmcmVxdWVuY3kgb3BlcmF0aW9uIHdpbGwgYmUgaGFuZGxlZCBieSBvbWFwX3NldF9wZXJmb3JtYW5jZSgpCisgKgorICogQnkgaGF2aW5nIHRoZSBib290IGxvYWRlciBib290IHVwIGluIHRoZSBmYXN0ZXN0IEw0IHNwZWVkIGF2YWlsYWJsZSBsaWtlbHkKKyAqIHdpbGwgcmVzdWx0IGluIHNvbWV0aGluZyB3aGljaCB5b3UgY2FuIHN3aXRjaCBiZXR3ZWVuLgorICovCisjZGVmaW5lIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6CSgweDAwMDNkZTAwIHwgMSkKKyNkZWZpbmUgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHoJKDB4MDAwMmRhMDEgfCAxKQorI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMXzExME1IegkoMHgwMDAyZGEwMSB8IDEpIC8qIE5lZWQgdG8gY2FsYyAqLworI2RlZmluZSBWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUwkoMHgwMDAwNTAwMCB8IDEpIC8qIE5lZWQgdG8gY2FsYyAqLworCisvKiBNUFUgc3BlZWQgZGVmaW5lcyAqLworI2RlZmluZSBTMTJNCTEyMDAwMDAwCisjZGVmaW5lIFMxM00JMTMwMDAwMDAKKyNkZWZpbmUgUzE5TQkxOTIwMDAwMAorI2RlZmluZSBTMjZNCTI2MDAwMDAwCisjZGVmaW5lIFMxMDBNCTEwMDAwMDAwMAorI2RlZmluZSBTMTMzTQkxMzMwMDAwMDAKKyNkZWZpbmUgUzE1ME0JMTUwMDAwMDAwCisjZGVmaW5lIFMxNjVNCTE2NTAwMDAwMAorI2RlZmluZSBTMjAwTQkyMDAwMDAwMDAKKyNkZWZpbmUgUzI2Nk0JMjY2MDAwMDAwCisjZGVmaW5lIFMzMDBNCTMwMDAwMDAwMAorI2RlZmluZSBTMzMwTQkzMzAwMDAwMDAKKyNkZWZpbmUgUzQwME0JNDAwMDAwMDAwCisjZGVmaW5lIFM1MzJNCTUzMjAwMDAwMAorI2RlZmluZSBTNjAwTQk2MDAwMDAwMDAKKyNkZWZpbmUgUzY2ME0JNjYwMDAwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KKyAqIHh0YWxfc3BlZWQsIGRwbGxfc3BlZWQsIG1wdV9zcGVlZCwgQ01fQ0xLU0VMX01QVSwKKyAqIENNX0NMS1NFTF9EU1AsIENNX0NMS1NFTF9HRlgsIENNX0NMS1NFTDFfQ09SRSwgQ01fQ0xLU0VMMV9QTEwsCisgKiBDTV9DTEtTRUwyX1BMTCwgQ01fQ0xLU0VMX01ETQorICoKKyAqIEZpbGxpbmcgaW4gdGFibGUgYmFzZWQgb24gSDQgYm9hcmRzIGFuZCAyNDMwLVNEUHMgdmFyaWFudHMgYXZhaWxhYmxlLgorICogVGhlcmUgYXJlIHF1aXRlIGEgZmV3IG1vcmUgcmF0ZXMgY29tYmluYXRpb25zIHdoaWNoIGNvdWxkIGJlIGRlZmluZWQuCisgKgorICogV2hlbiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGRlZmllbmQgdGhlIHN0YXJ0IHVwIHdpbGwgdHJ5IGFuZCBjaG9vc2UgdGhlCisgKiBmYXN0ZXN0IG9uZS4gSWYgYSAnZmFzdCcgdmFsdWUgaXMgZGVmaW5lZCwgdGhlbiBhdXRvbWF0aWNhbGx5LCB0aGUgLzIKKyAqIG9uZSBzaG91bGQgYmUgaW5jbHVkZWQgYXMgaXQgY2FuIGJlIHVzZWQuCUdlbmVyYWxseSBoYXZpbmcgbW9yZSB0aGF0CisgKiBvbmUgZmFzdCBzZXQgZG9lcyBub3QgbWFrZSBzZW5zZSwgYXMgc3RhdGljIHRpbWluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkCisgKiB0byBjaGFuZ2UgdGhlIHNldC4JIFRoZSBleGNlcHRpb24gaXMgdGhlIGJ5cGFzcyBzZXR0aW5nIHdoaWNoIGlzCisgKiBhdmFpbGJsZSBmb3IgbG93IHBvd2VyIGJ5cGFzcy4KKyAqCisgKiBOb3RlOiBUaGlzIHRhYmxlIG5lZWRzIHRvIGJlIHNvcnRlZCwgZmFzdGVzdCB0byBzbG93ZXN0LgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBzdHJ1Y3QgcHJjbV9jb25maWcgcmF0ZV90YWJsZVtdID0geworCS8qIFBSQ00gSUkgLSBGQVNUICovCisJe1MxMk0sIFM2MDBNLCBTMzAwTSwgUklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzAwTUh6IEFSTSAqLworCQlSSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMDBNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzYwME0sIFMzMDBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAzMDBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCS8qIFBSQ00gSUlJIC0gRkFTVCAqLworCXtTMTJNLCBTNTMyTSwgUzI2Nk0sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAyNjZNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xMl9WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwl7UzEzTSwgUzUzMk0sIFMyNjZNLCBSSUlJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjY2TUh6IEFSTSAqLworCQlSSUlJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1JSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTMzTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSBJSSAtIFNMT1cgKi8KKwl7UzEyTSwgUzMwME0sIFMxNTBNLCBSSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxNTBNSHogQVJNICovCisJCVJJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEwME1IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTMzAwTSwgUzE1ME0sIFJJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE1ME1IeiBBUk0gKi8KKwkJUklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTSBJSUkgLSBTTE9XICovCisJe1MxMk0sIFMyNjZNLCBTMTMzTSwgUklJSV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzM01IeiBBUk0gKi8KKwkJUklJSV9DTV9DTEtTRUxfRFNQX1ZBTCwgUklJSV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUklJSV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNSUlJX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCAwLCBWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDJYfSwKKworCXtTMTNNLCBTMjY2TSwgUzEzM00sIFJJSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVJJSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJJSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJJSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUlJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNLVZJSSAoYm9vdC1ieXBhc3MpICovCisJe1MxMk0sIFMxMk0sIFMxMk0sIFJWSUlfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1IeiBBUk0qLworCQlSVklJX0NNX0NMS1NFTF9EU1BfVkFMLCBSVklJX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSVklJX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1WSUlfQ01fQ0xLU0VMMV9QTExfMTJfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIDAsIFYyNFhYX1NEUkNfUkZSX0NUUkxfQllQQVNTLAorCQlSQVRFX0lOXzI0Mlh9LAorCisJLyogUFJDTS1WSUkgKGJvb3QtYnlwYXNzKSAqLworCXtTMTNNLCBTMTNNLCBTMTNNLCBSVklJX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTNNSHogQVJNICovCisJCVJWSUlfQ01fQ0xLU0VMX0RTUF9WQUwsIFJWSUlfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJWSUlfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTVZJSV9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgMCwgVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQyWH0sCisKKwkvKiBQUkNNICMzIC0gcmF0aW8yIChFUzIpIC0gRkFTVCAqLworCXtTMTNNLCBTNjYwTSwgUzMzME0sIFIyX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMzMwTUh6IEFSTSAqLworCQlSMl9DTV9DTEtTRUxfRFNQX1ZBTCwgUjJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIyX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE0zX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSMl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMTBNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YSAtIHJhdGlvMSAtIEZBU1QgKi8KKwl7UzEzTSwgUzUzMk0sIFMyNjZNLCBSMV9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDI2Nk1IeiBBUk0gKi8KKwkJUjFfQ01fQ0xLU0VMX0RTUF9WQUwsIFIxX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMV9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNNUFfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFIxX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMXzEzM01IeiwKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00gIzViIC0gcmF0aW8xIC0gRkFTVCAqLworCXtTMTNNLCBTNDAwTSwgUzIwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMjAwTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzJ4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjMyAtIHJhdGlvMiAoRVMyKSAtIFNMT1cgKi8KKwl7UzEzTSwgUzMzME0sIFMxNjVNLCBSMl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDE2NU1IeiBBUk0gKi8KKwkJUjJfQ01fQ0xLU0VMX0RTUF9WQUwsIFIyX0NNX0NMS1NFTF9HRlhfVkFMLAorCQlSMl9DTV9DTEtTRUwxX0NPUkVfVkFMLCBNM19DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjJfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTEwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTSAjNWEgLSByYXRpbzEgLSBTTE9XICovCisJe1MxM00sIFMyNjZNLCBTMTMzTSwgUjFfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMzNNSHogQVJNICovCisJCVIxX0NNX0NMS1NFTF9EU1BfVkFMLCBSMV9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUjFfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTTVBX0NNX0NMS1NFTDFfUExMXzEzX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMXhfVkFMLCBSMV9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF8xMzNNSHosCisJCVJBVEVfSU5fMjQzWH0sCisKKwkvKiBQUkNNICM1YiAtIHJhdGlvMSAtIFNMT1cqLworCXtTMTNNLCBTMjAwTSwgUzEwME0sIFIxX0NNX0NMS1NFTF9NUFVfVkFMLAkJLyogMTAwTUh6IEFSTSAqLworCQlSMV9DTV9DTEtTRUxfRFNQX1ZBTCwgUjFfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVIxX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE01Ql9DTV9DTEtTRUwxX1BMTF8xM19WQUwsCisJCU1YX0NMS1NFTDJfUExMXzF4X1ZBTCwgUjFfQ01fQ0xLU0VMX01ETV9WQUwsCisJCVYyNFhYX1NEUkNfUkZSX0NUUkxfMTAwTUh6LAorCQlSQVRFX0lOXzI0M1h9LAorCisJLyogUFJDTS1ib290L2J5cGFzcyAqLworCXtTMTNNLCBTMTNNLCBTMTNNLCBSQl9DTV9DTEtTRUxfTVBVX1ZBTCwJCS8qIDEzTWh6ICovCisJCVJCX0NNX0NMS1NFTF9EU1BfVkFMLCBSQl9DTV9DTEtTRUxfR0ZYX1ZBTCwKKwkJUkJfQ01fQ0xLU0VMMV9DT1JFX1ZBTCwgTUJfQ01fQ0xLU0VMMV9QTExfMTNfVkFMLAorCQlNWF9DTEtTRUwyX1BMTF8yeF9WQUwsIFJCX0NNX0NMS1NFTF9NRE1fVkFMLAorCQlWMjRYWF9TRFJDX1JGUl9DVFJMX0JZUEFTUywKKwkJUkFURV9JTl8yNDNYfSwKKworCS8qIFBSQ00tYm9vdC9ieXBhc3MgKi8KKwl7UzEyTSwgUzEyTSwgUzEyTSwgUkJfQ01fQ0xLU0VMX01QVV9WQUwsCQkvKiAxMk1oeiAqLworCQlSQl9DTV9DTEtTRUxfRFNQX1ZBTCwgUkJfQ01fQ0xLU0VMX0dGWF9WQUwsCisJCVJCX0NNX0NMS1NFTDFfQ09SRV9WQUwsIE1CX0NNX0NMS1NFTDFfUExMXzEyX1ZBTCwKKwkJTVhfQ0xLU0VMMl9QTExfMnhfVkFMLCBSQl9DTV9DTEtTRUxfTURNX1ZBTCwKKwkJVjI0WFhfU0RSQ19SRlJfQ1RSTF9CWVBBU1MsCisJCVJBVEVfSU5fMjQzWH0sCisKKwl7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9LAorfTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAyNHh4IGNsb2NrIHRyZWUuCisgKgorICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuCUluIG1hbnkKKyAqCWNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4JVGhlIGdldC9zZXQgcGFyZW50IGNhbGxzIHdpbGwgYWxzbworICoJc3dpdGNoIHNvdXJjZXMuCisgKgorICoJTWFueSBzb21lIGNsb2NrcyBzYXkgYWx3YXlzX2VuYWJsZWQsIGJ1dCB0aGV5IGNhbiBiZSBhdXRvIGlkbGVkIGZvcgorICoJcG93ZXIgc2F2aW5ncy4gVGhleSB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUgdXBvbiBjbG9jayByZXF1ZXN0LgorICoKKyAqCVNldmVyYWwgc291cmNlcyBhcmUgZ2l2ZW4gaW5pdGlhbCByYXRlcyB3aGljaCBtYXkgYmUgd3JvbmcsIHRoaXMgd2lsbAorICoJYmUgZml4ZWQgdXAgaW4gdGhlIGluaXQgZnVuYy4KKyAqCisgKglUaGluZ3MgYXJlIGJyb2FkbHkgc2VwYXJhdGVkIGJlbG93IGJ5IGNsb2NrIGRvbWFpbnMuIEl0IGlzCisgKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpZmVyYWxzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG11bHRpcGxlIGNsb2NrCisgKglkb21haW5zLiBNYW55IGdldCB0aGVpciBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGRvbWFpbiwgYnV0IGdldAorICoJZnVuY3Rpb25hbCBjbG9ja3MgZnJvbSBmaXhlZCBzb3VyY2VzIG9yIG90aGVyIGNvcmUgZG9tYWluIGRlcml2ZWQKKyAqCWNsb2Nrcy4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIEJhc2UgZXh0ZXJuYWwgaW5wdXQgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzMya19jayA9IHsKKwkubmFtZQkJPSAiZnVuY18zMmtfY2siLAorCS5yYXRlCQk9IDMyMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQsCit9OworCisvKiBUeXBpY2FsIDEyLzEzTUh6IGluIHN0YW5kYWxvbmUgbW9kZSwgd2lsbCBiZSAyNk1oeiBpbiBjaGFzc2lzIG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG9zY19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgKjI2LCAzOC40KU1IeiAqLworCS5uYW1lCQk9ICJvc2NfY2siLAorCS5yYXRlCQk9IDI2MDAwMDAwLAkJLyogZml4ZWQgdXAgaW4gY2xvY2sgaW5pdCAqLworCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQUxXQVlTX0VOQUJMRUQgfCBSQVRFX1BST1BBR0FURVMsCit9OworCisvKiBXaXRoIG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLworCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLnJhdGUJCT0gMTMwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmF0ZV9vZmZzZXQJPSA2LCAvKiBzeXNjbGtkaXYgMSBvciAyLCBhbHJlYWR5IGhhbmRsZWQgb3Igbm8gYm9vdCAqLworCS5yZWNhbGMJCT0gJm9tYXAyX3N5c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWx0X2NrID0gewkJLyogVHlwaWNhbCA1NE0gb3IgNDhNLCBtYXkgbm90IGV4aXN0ICovCisJLm5hbWUJCT0gImFsdF9jayIsCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKKy8qCisgKiBBbmFsb2cgZG9tYWluIHJvb3Qgc291cmNlIGNsb2NrcworICovCisKKy8qIGRwbGxfY2ssIGlzIGJyb2tlbiBvdXQgaW4gdG8gc3BlY2lhbCBjYXNlcyB0aHJvdWdoIGNsa3NlbCAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jayA9IHsKKwkubmFtZQkJPSAiZHBsbF9jayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAkJLyogQ2FuIGJlIGZ1bmNfMzJrIGFsc28gKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9QUk9QQUdBVEVTIHwgUkFURV9DS0NUTCB8IENNX1BMTF9TRUwxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhcGxsOTZfY2sgPSB7CisJLm5hbWUJCT0gImFwbGw5Nl9jayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDk2MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8Q0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4MiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw1NF9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDU0X2NrIiwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4NiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKKy8qCisgKiBQUkNNIGRpZ2l0YWwgYmFzZSBzb3VyY2VzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCisJLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCisJLnJhdGUJCT0gNTQwMDAwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfRklYRUQgfCBDTV9QTExfU0VMMSB8IFJBVEVfUFJPUEFHQVRFUywKKwkuc3JjX29mZnNldAk9IDUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0NMS0VOX1BMTCwKKwkuZW5hYmxlX2JpdAk9IDB4ZmYsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0geworCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2xlZXBfY2sgPSB7CQkvKiBzeXNfY2xrIG9yIDMyayAqLworCS5uYW1lCQk9ICJzbGVlcF9jayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLnJhdGUJCT0gMzIwMDAsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLnJlY2FsYwkJPSAmb21hcDJfcHJvcGFnYXRlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHhmZiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNDhtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzQ4bV9jayIsCisJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAkgLyogOTZNIG9yIEFsdCAqLworCS5yYXRlCQk9IDQ4MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0ZJWEVEIHwgQ01fUExMX1NFTDEgfCBSQVRFX1BST1BBR0FURVMsCisJLnNyY19vZmZzZXQJPSAzLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9DTEtFTl9QTEwsCisJLmVuYWJsZV9iaXQJPSAweGZmLAorCS5yZWNhbGMJCT0gJm9tYXAyX3Byb3BhZ2F0ZV9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18xMm1fY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMTJtX2NrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkucmF0ZQkJPSAxMjAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fQ0xLRU5fUExMLAorCS5lbmFibGVfYml0CT0gMHhmZiwKK307CisKKy8qIFNlY3VyZSB0aW1lciwgb25seSBhdmFpbGFibGUgaW4gc2VjdXJlIG1vZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfb3NjX2NrID0geworCS5uYW1lCQk9ICJja193ZHQxX29zYyIsCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0ID0geworCS5uYW1lCQk9ICJzeXNfY2xrb3V0IiwKKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fU1lTQ0xLT1VUX1NFTDEgfCBSQVRFX0NLQ1RMLAorCS5zcmNfb2Zmc2V0CT0gMCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJhdGVfb2Zmc2V0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9TWVNDTEtPVVRfU0VMMSB8IFJBVEVfQ0tDVEwsCisJLnNyY19vZmZzZXQJPSA4LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZQUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gMTUsCisJLnJhdGVfb2Zmc2V0CT0gMTEsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBNUFUgY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKgkJTVBVX0ZDTEssIE1QVV9JQ0xLCisgKgkJSU5UX01fRkNMSywgSU5UX01fSV9DTEsKKyAqCisgKiAtIEluZGl2aWR1YWwgY2xvY2tzIGFyZSBoYXJkd2FyZSBtYW5hZ2VkLgorICogLSBCYXNlIGRpdmlkZXIgY29tZXMgZnJvbTogQ01fQ0xLU0VMX01QVQorICoKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLworCS5uYW1lCQk9ICJtcHVfY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMIHwKKwkJCQlBTFdBWVNfRU5BQkxFRCB8IENNX01QVV9TRUwxIHwgREVMQVlFRF9BUFAgfAorCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmF0ZV9vZmZzZXQJPSAwLAkvKiBiaXRzIDAtNCAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogRFNQICgyNDMwLUlWQTIuMSkgKDI0MjAtVU1BK0lWQTEpIGNsb2NrIGRvbWFpbgorICogQ2xvY2tzOgorICoJMjQzMDogSVZBMi4xX0ZDTEssIElWQTIuMV9JQ0xLCisgKgkyNDIwOiBVTUFfRkNMSywgVU1BX0lDTEssIElWQV9NUFUsIElWQV9DT1AKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ZjayA9IHsKKwkubmFtZQkJPSAiaXZhMl8xX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgUkFURV9QUk9QQUdBVEVTIHwKKwkJCQlDT05GSUdfUEFSVElDSVBBTlQsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTJfMV9pY2sgPSB7CisJLm5hbWUJCT0gIml2YTJfMV9pY2siLAorCS5wYXJlbnQJCT0gJml2YTJfMV9mY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgUkFURV9DS0NUTCB8IENNX0RTUF9TRUwxIHwKKwkJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkucmF0ZV9vZmZzZXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogV29uJ3QgYmUgdG9vIHNwZWNpZmljIGhlcmUuIFRoZSBjb3JlIGNsb2NrIGNvbWVzIGludG8gdGhpcyBibG9jaworICogaXQgaXMgZGl2aWRlZCB0aGVuIHRlZSdlZC4gT25lIGJyYW5jaCBnb2VzIGRpcmVjdGx5IHRvIHh5eiBlbmFibGUKKyAqIGNvbnRyb2xzLiBUaGUgb3RoZXIgYnJhbmNoIGdldHMgZnVydGhlciBkaXZpZGVkIGJ5IDIgdGhlbiBwb3NzaWJseQorICogcm91dGVkIGludG8gYSBzeW5jaHJvbml6ZXIgYW5kIG91dCBvZiBjbG9ja3MgYWJjLgorICovCitzdGF0aWMgc3RydWN0IGNsayBkc3BfZmNrID0geworCS5uYW1lCQk9ICJkc3BfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSB8CisJCQlERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkucmF0ZV9vZmZzZXQJPSAwLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKKwkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCisJLnBhcmVudAkJPSAmZHNwX2ZjaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBSQVRFX0NLQ1RMIHwgQ01fRFNQX1NFTDEgfAorCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5yYXRlX29mZnNldCA9IDUsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9EU1AsCisJLmVuYWJsZV9iaXQJPSAxLAkJLyogZm9yIGlwaSAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmExX2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfaWZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTV9EU1BfU0VMMSB8IFJBVEVfQ0tDVEwgfAorCQkJQ09ORklHX1BBUlRJQ0lQQU5UIHwgUkFURV9QUk9QQUdBVEVTIHwgREVMQVlFRF9BUFAsCisJLnJhdGVfb2Zmc2V0PSA4LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fRFNQLAorCS5lbmFibGVfYml0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0geworCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCisJLnBhcmVudAkJPSAmaXZhMV9pZmNrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfQ0tDVEwgfCBDTV9EU1BfU0VMMSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0RTUCwKKwkuZW5hYmxlX2JpdAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBMMyBjbG9jayBkb21haW4KKyAqIEwzIGNsb2NrcyBhcmUgdXNlZCBmb3IgYm90aCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWwgY2xvY2tzIHRvCisgKiBtdWx0aXBsZSBlbnRpdGllcy4gU29tZSBvZiB0aGVzZSBjbG9ja3MgYXJlIGNvbXBsZXRlbHkgbWFuYWdlZAorICogYnkgaGFyZHdhcmUsIGFuZCBzb21lIG90aGVycyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sLiBIYXJkd2FyZQorICogbWFuYWdlZCBvbmVzIGdlbmVyYWwgYXJlIGJhc2VkIG9uIGRpcmVjdGx5IENMS19SRVEgc2lnbmFscyBhbmQKKyAqIHZhcmlvdXMgYXV0byBpZGxlIHNldHRpbmdzLiBUaGUgZnVuY3Rpb25hbCBzcGVjIHNldHMgbWFueSBvZiB0aGVzZQorICogYXMgJ3RpZS1oaWdoJyBmb3IgdGhlaXIgZW5hYmxlcy4KKyAqCisgKiBJLUNMT0NLUzoKKyAqCUwzLUludGVyY29ubmVjdCwgU01TLCBHUE1DLCBTRFJDLCBPQ01fUkFNLCBPQ01fUk9NLCBTRE1BCisgKglDQU0sIEhTLVVTQi4KKyAqIEYtQ0xPQ0sKKyAqCVNTSS4KKyAqCisgKiBHUE1DIG1lbW9yaWVzIGFuZCBTRFJDIGhhdmUgdGltaW5nIGFuZCBjbG9jayBzZW5zaXRpdmUgcmVnaXN0ZXJzIHdoaWNoCisgKiBtYXkgdmVyeSB3ZWxsIG5lZWQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMuIEN1cnJlbnRseSBmb3IgbG93CisgKiBvcGVyYXRpbmcgcG9pbnRzLCB0aGVzZSBhcmUgdGFrZW4gY2FyZSBvZiBpbiBzbGVlcC5TLgorICovCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCisJLm5hbWUJCT0gImNvcmVfbDNfY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBBTFdBWVNfRU5BQkxFRCB8IENNX0NPUkVfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQgfAorCQkJCVJBVEVfUFJPUEFHQVRFUywKKwkucmF0ZV9vZmZzZXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCisJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCB8CisJCQkJQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yYXRlX29mZnNldCA9IDI1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKKyAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKKyAqIGRvbWFpbi4KKyAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfQ0xJSworICoKKyAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgorICovCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX3NzdF9mY2sgPSB7CisJLm5hbWUJCT0gInNzaV9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAkvKiBiaXQgMSAqLworCS5lbmFibGVfYml0CT0gMSwKKwkucmF0ZV9vZmZzZXQgPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIEdGWCBjbG9jayBkb21haW4KKyAqCUNsb2NrczoKKyAqIEdGWF9GQ0xLLCBHRlhfSUNMSworICogR0ZYX0NHMSgyZCksIEdGWF9DRzIoM2QpCisgKgorICogR0ZYX0ZDTEsgcnVucyBmcm9tIEwzLCBhbmQgaXMgZGl2aWRlZCBieSAoMSwyLDMsNCkKKyAqIFRoZSAyZCBhbmQgM2QgY2xvY2tzIHJ1biBhdCBhIGhhcmR3YXJlIGRldGVybWluZWQKKyAqIGRpdmlkZWQgdmFsdWUgb2YgZmNsay4KKyAqCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7CisJLm5hbWUJCT0gImdmeF8zZF9mY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9HRlhfU0VMMSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX0dGWCwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJhdGVfb2Zmc2V0PSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0geworCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlSQVRFX0NLQ1RMIHwgQ01fR0ZYX1NFTDEsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9HRlgsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yYXRlX29mZnNldD0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX0dGWCwJLyogYml0IDAgKi8KKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBNb2RlbSBjbG9jayBkb21haW4gKDI0MzApCisgKglDTE9DS1M6CisgKgkJTURNX09TQ19DTEsKKyAqCQlNRE1fSUNMSworICovCitzdGF0aWMgc3RydWN0IGNsayBtZG1faWNrID0gewkJLyogdXNlZCBib3RoIGFzIGEgaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibWRtX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMIHwgQ01fTU9ERU1fU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCisJLnJhdGVfb2Zmc2V0CT0gMCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX01ETSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9vc2NfY2sgPSB7CisJLm5hbWUJCT0gIm1kbV9vc2NfY2siLAorCS5yYXRlCQk9IDI2MDAwMDAwLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0ZJWEVELAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU5fTURNLAorCS5lbmFibGVfYml0CT0gMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIEw0IGNsb2NrIG1hbmFnZW1lbnQgZG9tYWluCisgKgorICogVGhpcyBkb21haW4gY29udGFpbnMgbG90cyBvZiBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGludGVyZmFjZSwgc29tZQorICogZnVuY3Rpb25hbCBjbG9ja3MuCUZpeGVkIEFQTEwgZnVuY3Rpb25hbCBzb3VyY2UgY2xvY2tzIGFyZSBtYW5hZ2VkIGluCisgKiB0aGlzIGRvbWFpbi4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBBTFdBWVNfRU5BQkxFRCB8IENNX0NPUkVfU0VMMSB8CisJCQkJREVMQVlFRF9BUFAgfCBSQVRFX1BST1BBR0FURVMsCisJLnJhdGVfb2Zmc2V0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKKwkubmFtZQkJPSAic3NpX2w0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfCBSQVRFX0NLQ1RMLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCS8qIGJpdCAxICovCisJLmVuYWJsZV9iaXQJPSAxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8IFJBVEVfQ0tDVEwsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBERUxBWUVEX0FQUCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmF0ZV9vZmZzZXQJPSA4LAorCS5zcmNfb2Zmc2V0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9mY2sgPSB7CQkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLworCS5uYW1lCQk9ICJkc3MyX2ZjayIsCisJLnBhcmVudAkJPSAmc3lzX2NrLAkJLyogZml4ZWQgYXQgc3lzX2NrIG9yIDQ4TUh6ICovCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVJBVEVfQ0tDVEwgfCBDTV9DT1JFX1NFTDEgfCBSQVRFX0ZJWEVELAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxLAorCS5zcmNfb2Zmc2V0CT0gMTMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLworCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KKwkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9wcm9wYWdhdGVfcmF0ZSwKK307CisKKy8qCisgKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgorICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKKyAqIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhbiBMNCBpbnRlcmZhY2UgcGFyZW50LCBhbmQgbWF5IGhhdmUgbXVsdGlwbGUKKyAqIGZ1bmN0aW9uYWwgY2xvY2sgcGFyZW50cy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCS8qIEJpdDQgKi8KKwkuZW5hYmxlX2JpdAk9IDAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0geworCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX1dLVVBfU0VMMSwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5zcmNfb2Zmc2V0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkvKiBiaXQ0ICovCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDQsCisJLnNyY19vZmZzZXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0M19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCS8qIEJpdDUgKi8KKwkuZW5hYmxlX2JpdAk9IDUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gNSwKKwkuc3JjX29mZnNldAk9IDQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfaWNrID0geworCS5uYW1lCQk9ICJncHQ0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJLyogQml0NiAqLworCS5lbmFibGVfYml0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA2LAorCS5zcmNfb2Zmc2V0CT0gNiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAkgLyogQml0NyAqLworCS5lbmFibGVfYml0CT0gNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA3LAorCS5zcmNfb2Zmc2V0CT0gOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDggKi8KKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5zcmNfb2Zmc2V0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfaWNrID0geworCS5uYW1lCQk9ICJncHQ3X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDkgKi8KKwkuZW5hYmxlX2JpdAk9IDksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0geworCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gOSwKKwkuc3JjX29mZnNldAk9IDEyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQxMCAqLworCS5lbmFibGVfYml0CT0gMTAsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0geworCS5uYW1lCQk9ICJncHQ4X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTAsCisJLnNyY19vZmZzZXQJPSAxNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCQlDTV9DT1JFX1NFTDIsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDExLAorCS5zcmNfb2Zmc2V0CT0gMTYsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8CisJCQkJCUNNX0NPUkVfU0VMMiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTIsCisJLnNyY19vZmZzZXQJPSAxOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0geworCS5uYW1lCQk9ICJncHQxMV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMywKKwkuc3JjX29mZnNldAk9IDIwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwJIC8qIGJpdDE0ICovCisJLmVuYWJsZV9iaXQJPSAxNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKKwkJCQkJQ01fQ09SRV9TRUwyLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNCwKKwkuc3JjX29mZnNldAk9IDIyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDE1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCSAvKiBiaXQxNiAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX2JpdAk9IDE1LAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfYml0CT0gMTYsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9iaXQJPSAxNiwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ljayA9IHsKKwkubmFtZQkJPSAibWNic3A0X2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA0LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A1X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA1LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkzX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIxLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfaWNrID0geworCS5uYW1lCQk9ICJncGlvc19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDIsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW9zX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3Bpb3NfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfZmNrID0geworCS5uYW1lCQk9ICJtcHVfd2R0X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0geworCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKKwkubmFtZQkJPSAid2R0MV9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU5fV0tVUCwKKwkuZW5hYmxlX2JpdAk9IDQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CitzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTl9XS1VQLAorCS5lbmFibGVfYml0CT0gNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGljcl9pY2sgPSB7CisJLm5hbWUJCT0gImljcl9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOX1dLVVAsCisJLmVuYWJsZV9iaXQJPSA2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0geworCS5uYW1lCQk9ICJjYW1faWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMzEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CisJLm5hbWUJCT0gImNhbV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzMSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKKwkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ljayA9IHsKKwkubmFtZQkJPSAid2R0NF9pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyOSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyOCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19mY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI3LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0geworCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0geworCS5uYW1lCQk9ICJtbWNfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDI2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7CisJLm5hbWUJCT0gImZhY19mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNSwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKKwkubmFtZQkJPSAiZWFjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZWFjX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyNCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKKwkubmFtZQkJPSAiaGRxX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIzLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0geworCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMjMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmMyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDIwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHMyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMV9DT1JFLAorCS5lbmFibGVfYml0CT0gMTksCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0geworCS5uYW1lCQk9ICJpMmMxX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0geworCS5uYW1lCQk9ICJpMmNoczFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE5LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2bHlucV9pY2sgPSB7CisJLm5hbWUJCT0gInZseW5xX2ljayIsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDMsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ZjayA9IHsKKwkubmFtZQkJPSAidmx5bnFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggIHwgUkFURV9DS0NUTCB8IENNX0NPUkVfU0VMMSB8IERFTEFZRURfQVBQLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4xX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAzLAorCS5zcmNfb2Zmc2V0CT0gMTUsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0geworCS5uYW1lCQk9ICJzZHJjX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4zX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0geworCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKKwkubmFtZQkJPSAic2hhX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU40X0NPUkUsCisJLmVuYWJsZV9iaXQJPSAyLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0geworCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VONF9DT1JFLAorCS5lbmFibGVfYml0CT0gMywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjRfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDQsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9mY2sgPSB7CisJLm5hbWUJCT0gInVzYl9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CisJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDcsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMV9mY2siLAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMyX2ljayIsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSA4LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDgsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDEwLAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9mY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxMCwKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ludGNfaWNrID0geworCS5uYW1lCQk9ICJtZG1faW50Y19pY2siLAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKKwkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fSUNMS0VOMl9DT1JFLAorCS5lbmFibGVfYml0CT0gMTEsCisJLnJlY2FsYwkJPSAmb21hcDJfZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIxX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNkYjFfZmNrIiwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCisJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKKwkuZW5hYmxlX2JpdAk9IDE2LAorCS5yZWNhbGMJCT0gJm9tYXAyX2ZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzZGIyX2ZjayIsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAorCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9GQ0xLRU4yX0NPUkUsCisJLmVuYWJsZV9iaXQJPSAxNywKKwkucmVjYWxjCQk9ICZvbWFwMl9mb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgorICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKKyAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KKyAqCisgKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAorICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAorICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycworICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAorICogdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAorICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKKwkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCisJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAorCQkJCVZJUlRVQUxfQ0xPQ0sgfCBBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQLAorCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLworCS5yZWNhbGMJCT0gJm9tYXAyX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCisJLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqb25jaGlwX2Nsa3NbXSA9IHsKKwkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KKwkmZnVuY18zMmtfY2ssCisJJm9zY19jaywKKwkmc3lzX2NrLAorCSZhbHRfY2ssCisJLyogaW50ZXJuYWwgYW5hbG9nIHNvdXJjZXMgKi8KKwkmZHBsbF9jaywKKwkmYXBsbDk2X2NrLAorCSZhcGxsNTRfY2ssCisJLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KKwkmZnVuY181NG1fY2ssCisJJmNvcmVfY2ssCisJJnNsZWVwX2NrLAorCSZmdW5jXzk2bV9jaywKKwkmZnVuY180OG1fY2ssCisJJmZ1bmNfMTJtX2NrLAorCSZ3ZHQxX29zY19jaywKKwkmc3lzX2Nsa291dCwKKwkmc3lzX2Nsa291dDIsCisJLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KKwkmbXB1X2NrLAorCS8qIGRzcCBkb21haW4gY2xvY2tzICovCisJJml2YTJfMV9mY2ssCQkvKiAyNDMwICovCisJJml2YTJfMV9pY2ssCisJJmRzcF9pY2ssCQkvKiAyNDIwICovCisJJmRzcF9mY2ssCisJJml2YTFfaWZjaywKKwkmaXZhMV9tcHVfaW50X2lmY2ssCisJLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KKwkmZ2Z4XzNkX2ZjaywKKwkmZ2Z4XzJkX2ZjaywKKwkmZ2Z4X2ljaywKKwkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCisJJm1kbV9pY2ssCisJJm1kbV9vc2NfY2ssCisJLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KKwkmZHNzX2ljaywKKwkmZHNzMV9mY2ssCisJJmRzczJfZmNrLAorCSZkc3NfNTRtX2ZjaywKKwkvKiBMMyBkb21haW4gY2xvY2tzICovCisJJmNvcmVfbDNfY2ssCisJJnNzaV9zc3Jfc3N0X2ZjaywKKwkmdXNiX2w0X2ljaywKKwkvKiBMNCBkb21haW4gY2xvY2tzICovCisJJmw0X2NrLAkJCS8qIHVzZWQgYXMgYm90aCBjb3JlX2w0IGFuZCB3dV9sNCAqLworCSZzc2lfbDRfaWNrLAorCS8qIHZpcnR1YWwgbWV0YS1ncm91cCBjbG9jayAqLworCSZ2aXJ0X3ByY21fc2V0LAorCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KKwkmZ3B0MV9pY2ssCisJJmdwdDFfZmNrLAorCSZncHQyX2ljaywKKwkmZ3B0Ml9mY2ssCisJJmdwdDNfaWNrLAorCSZncHQzX2ZjaywKKwkmZ3B0NF9pY2ssCisJJmdwdDRfZmNrLAorCSZncHQ1X2ljaywKKwkmZ3B0NV9mY2ssCisJJmdwdDZfaWNrLAorCSZncHQ2X2ZjaywKKwkmZ3B0N19pY2ssCisJJmdwdDdfZmNrLAorCSZncHQ4X2ljaywKKwkmZ3B0OF9mY2ssCisJJmdwdDlfaWNrLAorCSZncHQ5X2ZjaywKKwkmZ3B0MTBfaWNrLAorCSZncHQxMF9mY2ssCisJJmdwdDExX2ljaywKKwkmZ3B0MTFfZmNrLAorCSZncHQxMl9pY2ssCisJJmdwdDEyX2ZjaywKKwkmbWNic3AxX2ljaywKKwkmbWNic3AxX2ZjaywKKwkmbWNic3AyX2ljaywKKwkmbWNic3AyX2ZjaywKKwkmbWNic3AzX2ljaywKKwkmbWNic3AzX2ZjaywKKwkmbWNic3A0X2ljaywKKwkmbWNic3A0X2ZjaywKKwkmbWNic3A1X2ljaywKKwkmbWNic3A1X2ZjaywKKwkmbWNzcGkxX2ljaywKKwkmbWNzcGkxX2ZjaywKKwkmbWNzcGkyX2ljaywKKwkmbWNzcGkyX2ZjaywKKwkmbWNzcGkzX2ljaywKKwkmbWNzcGkzX2ZjaywKKwkmdWFydDFfaWNrLAorCSZ1YXJ0MV9mY2ssCisJJnVhcnQyX2ljaywKKwkmdWFydDJfZmNrLAorCSZ1YXJ0M19pY2ssCisJJnVhcnQzX2ZjaywKKwkmZ3Bpb3NfaWNrLAorCSZncGlvc19mY2ssCisJJm1wdV93ZHRfaWNrLAorCSZtcHVfd2R0X2ZjaywKKwkmc3luY18zMmtfaWNrLAorCSZ3ZHQxX2ljaywKKwkmb21hcGN0cmxfaWNrLAorCSZpY3JfaWNrLAorCSZjYW1fZmNrLAorCSZjYW1faWNrLAorCSZtYWlsYm94ZXNfaWNrLAorCSZ3ZHQ0X2ljaywKKwkmd2R0NF9mY2ssCisJJndkdDNfaWNrLAorCSZ3ZHQzX2ZjaywKKwkmbXNwcm9faWNrLAorCSZtc3Byb19mY2ssCisJJm1tY19pY2ssCisJJm1tY19mY2ssCisJJmZhY19pY2ssCisJJmZhY19mY2ssCisJJmVhY19pY2ssCisJJmVhY19mY2ssCisJJmhkcV9pY2ssCisJJmhkcV9mY2ssCisJJmkyYzFfaWNrLAorCSZpMmMxX2ZjaywKKwkmaTJjaHMxX2ZjaywKKwkmaTJjMl9pY2ssCisJJmkyYzJfZmNrLAorCSZpMmNoczJfZmNrLAorCSZ2bHlucV9pY2ssCisJJnZseW5xX2ZjaywKKwkmc2RyY19pY2ssCisJJmRlc19pY2ssCisJJnNoYV9pY2ssCisJJnJuZ19pY2ssCisJJmFlc19pY2ssCisJJnBrYV9pY2ssCisJJnVzYl9mY2ssCisJJnVzYmhzX2ljaywKKwkmbW1jaHMxX2ljaywKKwkmbW1jaHMxX2ZjaywKKwkmbW1jaHMyX2ljaywKKwkmbW1jaHMyX2ZjaywKKwkmZ3BpbzVfaWNrLAorCSZncGlvNV9mY2ssCisJJm1kbV9pbnRjX2ljaywKKwkmbW1jaHNkYjFfZmNrLAorCSZtbWNoc2RiMl9mY2ssCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4MWVkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworICoKKyAqIE9NQVAyIHBsYXRmb3JtIGRldmljZSBzZXR1cC9pbml0aWFsaXphdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCitleHRlcm4gdm9pZCBvbWFwX25vcF9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAJZGVmaW5lZChDT05GSUdfSTJDX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0kyQ19PTUFQX01PRFVMRSkKKworI2RlZmluZSBPTUFQMl9JMkNfQkFTRTIJCTB4NDgwNzIwMDAKKyNkZWZpbmUgT01BUDJfSTJDX0lOVDIJCTU3CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlczJbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMl9JMkNfQkFTRTIsCisJCS5lbmQJCT0gT01BUDJfSTJDX0JBU0UyICsgMHgzZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDJfSTJDX0lOVDIsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9pMmNfZGV2aWNlMiA9IHsKKyAgICAgICAgLm5hbWUgICAgICAgICAgID0gImkyY19vbWFwIiwKKyAgICAgICAgLmlkICAgICAgICAgICAgID0gMiwKKyAgICAgICAgLmRldiA9IHsKKyAgICAgICAgICAgICAgICAucmVsZWFzZSAgICAgICAgPSBvbWFwX25vcF9yZWxlYXNlLAorICAgICAgICB9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShpMmNfcmVzb3VyY2VzMiksCisJLnJlc291cmNlCT0gaTJjX3Jlc291cmNlczIsCit9OworCisvKiBTZWUgYWxzbyBhcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGZvciBmaXJzdCBJMkMgb24gMjR4eCAqLworc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKQoreworCS8qIFJFVklTSVQ6IFNlY29uZCBJMkMgbm90IGluIHVzZSBvbiBIND8gKi8KKwlpZiAobWFjaGluZV9pc19vbWFwX2g0KCkpCisJCXJldHVybjsKKworCW9tYXBfY2ZnX3JlZyhKMTVfMjRYWF9JMkMyX1NDTCk7CisJb21hcF9jZmdfcmVnKEgxOV8yNFhYX0kyQzJfU0RBKTsKKwkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvbWFwX2kyY19kZXZpY2UyKTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgb21hcF9pbml0X2kyYyh2b2lkKSB7fQorCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBfX2luaXQgb21hcDJfaW5pdF9kZXZpY2VzKHZvaWQpCit7CisJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCisJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KKwkgKi8KKwlvbWFwX2luaXRfaTJjKCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwob21hcDJfaW5pdF9kZXZpY2VzKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MTg3MzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKKyAqCisgKiBPTUFQMiBDUFUgaWRlbnRpZmljYXRpb24gY29kZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIE9NQVAyNFhYX1RBUF9CQVNFCWlvX3AydigweDQ4MDE0MDAwKQorCisjZGVmaW5lIE9NQVBfVEFQX0lEQ09ERQkJMHgwMjA0CisjZGVmaW5lIE9NQVBfVEFQX1BST0RfSUQJMHgwMjA4CisKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzAJMHgwMjE4CisjZGVmaW5lIE9NQVBfVEFQX0RJRV9JRF8xCTB4MDIxQworI2RlZmluZSBPTUFQX1RBUF9ESUVfSURfMgkweDAyMjAKKyNkZWZpbmUgT01BUF9UQVBfRElFX0lEXzMJMHgwMjI0CisKKy8qIHN5c3RlbV9yZXYgZmllbGRzIGZvciBPTUFQMiBwcm9jZXNzb3JzOgorICogICBDUFUgaWQgYml0cyAgICAgWzMxOjE2XSwKKyAqICAgQ1BVIGRldmljZSB0eXBlIFsxNToxMl0sICh1bnByZyxub3JtYWwsUE9QKQorICogICBDUFUgcmV2aXNpb24gICAgWzExOjA4XQorICogICBDUFUgY2xhc3MgYml0cyAgWzA3OjAwXQorICovCisKK3N0cnVjdCBvbWFwX2lkIHsKKwl1MTYJaGF3a2V5ZTsJLyogU2lsaWNvbiB0eXBlIChIYXdrZXllIGlkKSAqLworCXU4CWRldjsJCS8qIERldmljZSB0eXBlIGZyb20gcHJvZHVjdGlvbl9pZCByZWcgKi8KKwl1MzIJdHlwZTsJCS8qIGNvbWJpbmVkIHR5cGUgaWQgY29waWVkIHRvIHN5c3RlbV9yZXYgKi8KK307CisKKy8qIFJlZ2lzdGVyIHZhbHVlcyB0byBkZXRlY3QgdGhlIE9NQVAgdmVyc2lvbiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2lkIG9tYXBfaWRzW10gX19pbml0ZGF0YSA9IHsKKwl7IC5oYXdrZXllID0gMHhiNWQ5LCAuZGV2ID0gMHgwLCAudHlwZSA9IDB4MjQyMDAwMDAgfSwKKwl7IC5oYXdrZXllID0gMHhiNWQ5LCAuZGV2ID0gMHgxLCAudHlwZSA9IDB4MjQyMDEwMDAgfSwKKwl7IC5oYXdrZXllID0gMHhiNWQ5LCAuZGV2ID0gMHgyLCAudHlwZSA9IDB4MjQyMDIwMDAgfSwKKwl7IC5oYXdrZXllID0gMHhiNWQ5LCAuZGV2ID0gMHg0LCAudHlwZSA9IDB4MjQyMjAwMDAgfSwKKwl7IC5oYXdrZXllID0gMHhiNWQ5LCAuZGV2ID0gMHg4LCAudHlwZSA9IDB4MjQyMzAwMDAgfSwKKwl7IC5oYXdrZXllID0gMHhiNjhhLCAuZGV2ID0gMHgwLCAudHlwZSA9IDB4MjQzMDAwMDAgfSwKK307CisKK3N0YXRpYyB1MzIgX19pbml0IHJlYWRfdGFwX3JlZyhpbnQgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChPTUFQMjRYWF9UQVBfQkFTRSArIHJlZyk7Cit9CisKK3ZvaWQgX19pbml0IG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpCit7CisJaW50IGksIGo7CisJdTMyIGlkY29kZTsKKwl1MzIgcHJvZF9pZDsKKwl1MTYgaGF3a2V5ZTsKKwl1OCAgZGV2X3R5cGU7CisJdTggIHJldjsKKworCWlkY29kZSA9IHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9JRENPREUpOworCXByb2RfaWQgPSByZWFkX3RhcF9yZWcoT01BUF9UQVBfUFJPRF9JRCk7CisJaGF3a2V5ZSA9IChpZGNvZGUgPj4gMTIpICYgMHhmZmZmOworCXJldiA9IChpZGNvZGUgPj4gMjgpICYgMHgwZjsKKwlkZXZfdHlwZSA9IChwcm9kX2lkID4+IDE2KSAmIDB4MGY7CisKKyNpZmRlZiBERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9JRENPREUgMHglMDh4IFJFViAlaSBIQVdLRVlFIDB4JTA0eCBNQU5GICUwM3hcbiIsCisJCWlkY29kZSwgcmV2LCBoYXdrZXllLCAoaWRjb2RlID4+IDEpICYgMHg3ZmYpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9ESUVfSURfMDogMHglMDh4XG4iLAorCQlyZWFkX3RhcF9yZWcoT01BUF9UQVBfRElFX0lEXzApKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzE6IDB4JTA4eCBERVZfUkVWOiAlaVxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8xKSwKKwkgICAgICAgKHJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMSkgPj4gMjgpICYgMHhmKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT01BUF9UQVBfRElFX0lEXzI6IDB4JTA4eFxuIiwKKwkJcmVhZF90YXBfcmVnKE9NQVBfVEFQX0RJRV9JRF8yKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIk9NQVBfVEFQX0RJRV9JRF8zOiAweCUwOHhcbiIsCisJCXJlYWRfdGFwX3JlZyhPTUFQX1RBUF9ESUVfSURfMykpOworCXByaW50ayhLRVJOX0RFQlVHICJPTUFQX1RBUF9QUk9EX0lEXzA6IDB4JTA4eCBERVZfVFlQRTogJWlcbiIsCisJCXByb2RfaWQsIGRldl90eXBlKTsKKyNlbmRpZgorCisJLyogQ2hlY2sgaGF3a2V5ZSBpZHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvbWFwX2lkcyk7IGkrKykgeworCQlpZiAoaGF3a2V5ZSA9PSBvbWFwX2lkc1tpXS5oYXdrZXllKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gQVJSQVlfU0laRShvbWFwX2lkcykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIE9NQVAgQ1BVIGlkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaiA9IGk7IGogPCBBUlJBWV9TSVpFKG9tYXBfaWRzKTsgaisrKSB7CisJCWlmIChkZXZfdHlwZSA9PSBvbWFwX2lkc1tqXS5kZXYpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaiA9PSBBUlJBWV9TSVpFKG9tYXBfaWRzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVua25vd24gT01BUCBkZXZpY2UgdHlwZS4gIgorCQkJCSJIYW5kbGluZyBpdCBhcyBPTUFQJTA0eFxuIiwKKwkJCQlvbWFwX2lkc1tpXS50eXBlID4+IDE2KTsKKwkJaiA9IGk7CisJfQorCXN5c3RlbV9yZXYgPSBvbWFwX2lkc1tqXS50eXBlOworCisJc3lzdGVtX3JldiB8PSByZXYgPDwgODsKKworCS8qIEFkZCB0aGUgY3B1IGNsYXNzIGluZm8gKDI0eHgpICovCisJc3lzdGVtX3JldiB8PSAweDI0OworCisJcHJfaW5mbygiT01BUCUwNHgiLCBzeXN0ZW1fcmV2ID4+IDE2KTsKKwlpZiAoKHN5c3RlbV9yZXYgPj4gOCkgJiAweDBmKQorCQlwcmludGsoIiV4IiwgKHN5c3RlbV9yZXYgPj4gOCkgJiAweDBmKTsKKwlwcmludGsoIlxuIik7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWE2N2JmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKyAqCisgKiBPTUFQMiBJL08gbWFwcGluZyBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisKK2V4dGVybiB2b2lkIG9tYXBfc3JhbV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMl9jbGtfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOworCisvKgorICogVGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtYXkgcHJvdmlkZSB0aGUgZXh0cmEgbWFwcGluZyBiZXNpZGVzIHRoZQorICogZGVmYXVsdCBtYXBwaW5nIHByb3ZpZGVkIGhlcmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mgb21hcDJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9IEwzXzI0WFhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEwzXzI0WFhfUEhZUyksCisJCS5sZW5ndGgJCT0gTDNfMjRYWF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBMNF8yNFhYX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihMNF8yNFhYX1BIWVMpLAorCQkubGVuZ3RoCQk9IEw0XzI0WFhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfQorfTsKKwordm9pZCBfX2luaXQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KG9tYXAyX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDJfaW9fZGVzYykpOworCW9tYXAyX2NoZWNrX3JldmlzaW9uKCk7CisJb21hcF9zcmFtX2luaXQoKTsKKwlvbWFwMl9tdXhfaW5pdCgpOworCW9tYXAyX2Nsa19pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2JhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcC9vbWFwMi9pcnEuYworICoKKyAqIEludGVycnVwdCBoYW5kbGVyIGZvciBPTUFQMiBib2FyZHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIElOVENfUkVWSVNJT04JMHgwMDAwCisjZGVmaW5lIElOVENfU1lTQ09ORklHCTB4MDAxMAorI2RlZmluZSBJTlRDX1NZU1NUQVRVUwkweDAwMTQKKyNkZWZpbmUgSU5UQ19DT05UUk9MCTB4MDA0OAorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJMHgwMDg4CisjZGVmaW5lIElOVENfTUlSX1NFVDAJMHgwMDhjCisKKy8qCisgKiBPTUFQMiBoYXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IGludGVycnVwdCBjb250cm9sbGVycywgZWFjaCBpbnRlcnJ1cHQKKyAqIGNvbnRyb2xsZXIgaXMgaWRlbnRpZmllZCBhcyBpdHMgb3duICJiYW5rIi4gUmVnaXN0ZXIgZGVmaW5pdGlvbnMgYXJlCisgKiBmYWlybHkgY29uc2lzdGVudCBmb3IgZWFjaCBiYW5rLCBidXQgbm90IGFsbCByZWdpc3RlcnMgYXJlIGltcGxlbWVudGVkCisgKiBmb3IgZWFjaCBiYW5rLi4gd2hlbiBpbiBkb3VidCwgY29uc3VsdCB0aGUgVFJNLgorICovCitzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2JhbmsgeworCXVuc2lnbmVkIGxvbmcgYmFzZV9yZWc7CisJdW5zaWduZWQgaW50IG5yX2lycXM7Cit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDQpKSkgaXJxX2JhbmtzW10gPSB7CisJeworCQkvKiBNUFUgSU5UQyAqLworCQkuYmFzZV9yZWcJPSBPTUFQMjRYWF9JQ19CQVNFLAorCQkubnJfaXJxcwk9IDk2LAorCX0sIHsKKwkJLyogWFhYOiBEU1AgSU5UQyAqLworCisjaWYgMAorCS8qCisJICogQ29tbWVudGVkIG91dCBmb3Igbm93IHVudGlsIHdlIGZpeCB0aGUgSVZBIGNsb2NraW5nCisJICovCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKKwl9LCB7CisJCS8qIElWQSBJTlRDICgyNDIwIG9ubHkpICovCisJCS5iYXNlX3JlZwk9IE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UsCisJCS5ucl9pcnFzCT0gMTYsCS8qIEFjdHVhbGx5IDMyLCBidXQgb25seSAxNiBhcmUgdXNlZCAqLworI2VuZGlmCisjZW5kaWYKKwl9Cit9OworCisvKiBYWFg6IEZJUSBhbmQgYWRkaXRpb25hbCBJTlRDIHN1cHBvcnQgKG9ubHkgTVBVIGF0IHRoZSBtb21lbnQpICovCitzdGF0aWMgdm9pZCBvbWFwX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlvbWFwX3dyaXRlbCgweDEsIGlycV9iYW5rc1swXS5iYXNlX3JlZyArIElOVENfQ09OVFJPTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgb2Zmc2V0ID0gKGlycSA+PiA1KSA8PCA1OworCisJaWYgKGlycSA+PSA2NCkgeworCQlpcnEgJT0gNjQ7CisJfSBlbHNlIGlmIChpcnEgPj0gMzIpIHsKKwkJaXJxICU9IDMyOworCX0KKworCW9tYXBfd3JpdGVsKDEgPDwgaXJxLCBpcnFfYmFua3NbMF0uYmFzZV9yZWcgKyBJTlRDX01JUl9TRVQwICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgb21hcF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW50IG9mZnNldCA9IChpcnEgPj4gNSkgPDwgNTsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJaXJxICU9IDY0OworCX0gZWxzZSBpZiAoaXJxID49IDMyKSB7CisJCWlycSAlPSAzMjsKKwl9CisKKwlvbWFwX3dyaXRlbCgxIDw8IGlycSwgaXJxX2JhbmtzWzBdLmJhc2VfcmVnICsgSU5UQ19NSVJfQ0xFQVIwICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgb21hcF9tYXNrX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlvbWFwX21hc2tfaXJxKGlycSk7CisJb21hcF9hY2tfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBvbWFwX2lycV9jaGlwID0geworCS5hY2sJPSBvbWFwX21hc2tfYWNrX2lycSwKKwkubWFzawk9IG9tYXBfbWFza19pcnEsCisJLnVubWFzawk9IG9tYXBfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2lycV9iYW5rX2luaXRfb25lKHN0cnVjdCBvbWFwX2lycV9iYW5rICpiYW5rKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJdG1wID0gb21hcF9yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfUkVWSVNJT04pICYgMHhmZjsKKwlwcmludGsoS0VSTl9JTkZPICJJUlE6IEZvdW5kIGFuIElOVEMgYXQgMHglMDhseCAiCisJCQkgIihyZXZpc2lvbiAlbGQuJWxkKSB3aXRoICVkIGludGVycnVwdHNcbiIsCisJCQkgYmFuay0+YmFzZV9yZWcsIHRtcCA+PiA0LCB0bXAgJiAweGYsIGJhbmstPm5yX2lycXMpOworCisJdG1wID0gb21hcF9yZWFkbChiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKwl0bXAgfD0gMSA8PCAxOwkvKiBzb2Z0IHJlc2V0ICovCisJb21hcF93cml0ZWwodG1wLCBiYW5rLT5iYXNlX3JlZyArIElOVENfU1lTQ09ORklHKTsKKworCXdoaWxlICghKG9tYXBfcmVhZGwoYmFuay0+YmFzZV9yZWcgKyBJTlRDX1NZU1NUQVRVUykgJiAweDEpKQorCQkvKiBXYWl0IGZvciByZXNldCB0byBjb21wbGV0ZSAqLzsKK30KKwordm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbnJfaXJxcyA9IDA7CisJdW5zaWduZWQgaW50IG5yX2JhbmtzID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycV9iYW5rcyk7IGkrKykgeworCQlzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqYmFuayA9IGlycV9iYW5rcyArIGk7CisKKwkJLyogWFhYICovCisJCWlmICghYmFuay0+YmFzZV9yZWcpCisJCQljb250aW51ZTsKKworCQlvbWFwX2lycV9iYW5rX2luaXRfb25lKGJhbmspOworCisJCW5yX2lycXMgKz0gYmFuay0+bnJfaXJxczsKKwkJbnJfYmFua3MrKzsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJUb3RhbCBvZiAlbGQgaW50ZXJydXB0cyBvbiAlZCBhY3RpdmUgY29udHJvbGxlciVzXG4iLAorCSAgICAgICBucl9pcnFzLCBucl9iYW5rcywgbnJfYmFua3MgPiAxID8gInMiIDogIiIpOworCisJZm9yIChpID0gMDsgaSA8IG5yX2lycXM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm9tYXBfaXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDY1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisgKgorICogT01BUDEgcGluIG11bHRpcGxleGluZyBjb25maWd1cmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnkubGluZGdyZW5Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworI2lmZGVmIENPTkZJR19PTUFQX01VWAorCisvKiBOT1RFOiBTZWUgbXV4LmggZm9yIHRoZSBlbnVtZXJhdGlvbiAqLworCitzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwMjR4eF9waW5zW10gPSB7CisvKgorICoJZGVzY3JpcHRpb24JCQltdXgJbXV4CXB1bGwJcHVsbAlkZWJ1ZworICoJCQkJCW9mZnNldAltb2RlCWVuYQl0eXBlCisgKi8KKworLyogMjR4eCBJMkMgKi8KK01VWF9DRkdfMjRYWCgiTTE5XzI0WFhfSTJDMV9TQ0wiLAkweDExMSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiTDE1XzI0WFhfSTJDMV9TREEiLAkweDExMiwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSjE1XzI0WFhfSTJDMl9TQ0wiLAkweDExMywJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSDE5XzI0WFhfSTJDMl9TREEiLAkweDExNCwJMCwJMCwJMCwJMSkKKworLyogTWVuZWxhdXMgaW50ZXJydXB0ICovCitNVVhfQ0ZHXzI0WFgoIlcxOV8yNFhYX1NZU19OSVJRIiwJMHgxMmMsCTAsCTEsCTEsCTEpCisKKy8qIDI0eHggR1BJTyAqLworTVVYX0NGR18yNFhYKCJZMjBfMjRYWF9HUElPNjAiLAkJMHgxMmMsCTMsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIk0xNV8yNFhYX0dQSU85MiIsCQkweDEwYSwJMywJMCwJMCwJMSkKKworfTsKKworaW50IF9faW5pdCBvbWFwMl9tdXhfaW5pdCh2b2lkKQoreworCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXAyNHh4X3BpbnMsIEFSUkFZX1NJWkUob21hcDI0eHhfcGlucykpOworCXJldHVybiAwOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViODliOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5oCkBAIC0wLDAgKzEsNDE5IEBACisvKgorICogcHJjbS5oIC0gQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKworLyogU0VUX1BFUkZPUk1BTkNFX0xFVkVMIFBBUkFNRVRFUlMgKi8KKyNkZWZpbmUgUFJDTV9IQUxGX1NQRUVEIDEKKyNkZWZpbmUgUFJDTV9GVUxMX1NQRUVEIDIKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNkZWZpbmUgUFJDTV9SRUczMihvZmZzZXQpCV9fUkVHMzIoT01BUDI0WFhfUFJDTV9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUFJDTV9SRVZJU0lPTgkJUFJDTV9SRUczMigweDAwMCkKKyNkZWZpbmUgUFJDTV9TWVNDT05GSUcJCVBSQ01fUkVHMzIoMHgwMTApCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX01QVQlQUkNNX1JFRzMyKDB4MDE4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9NUFUJUFJDTV9SRUczMigweDAxQykKKyNkZWZpbmUgUFJDTV9WT0xUQ1RSTAkJUFJDTV9SRUczMigweDA1MCkKKyNkZWZpbmUgUFJDTV9WT0xUU1QJCVBSQ01fUkVHMzIoMHgwNTQpCisjZGVmaW5lIFBSQ01fQ0xLU1JDX0NUUkwJUFJDTV9SRUczMigweDA2MCkKKyNkZWZpbmUgUFJDTV9DTEtPVVRfQ1RSTAlQUkNNX1JFRzMyKDB4MDcwKQorI2RlZmluZSBQUkNNX0NMS0VNVUxfQ1RSTAlQUkNNX1JFRzMyKDB4MDc4KQorI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMCVBSQ01fUkVHMzIoMHgwODApCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX1NUQVRVUwlQUkNNX1JFRzMyKDB4MDg0KQorI2RlZmluZSBQUkNNX1ZPTFRTRVRVUAkJUFJDTV9SRUczMigweDA5MCkKKyNkZWZpbmUgUFJDTV9DTEtTU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTQpCisjZGVmaW5lIFBSQ01fUE9MQ1RSTAkJUFJDTV9SRUczMigweDA5OCkKKworLyogR0VORVJBTCBQVVJQT1NFICovCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEJUFJDTV9SRUczMigweDBCMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMglQUkNNX1JFRzMyKDB4MEI0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UzCVBSQ01fUkVHMzIoMHgwQjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTQJUFJDTV9SRUczMigweDBCQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNQlQUkNNX1JFRzMyKDB4MEMwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U2CVBSQ01fUkVHMzIoMHgwQzQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTcJUFJDTV9SRUczMigweDBDOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOAlQUkNNX1JFRzMyKDB4MENDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U5CVBSQ01fUkVHMzIoMHgwRDApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEwCVBSQ01fUkVHMzIoMHgwRDQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTExCVBSQ01fUkVHMzIoMHgwRDgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEyCVBSQ01fUkVHMzIoMHgwREMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEzCVBSQ01fUkVHMzIoMHgwRTApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE0CVBSQ01fUkVHMzIoMHgwRTQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE1CVBSQ01fUkVHMzIoMHgwRTgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE2CVBSQ01fUkVHMzIoMHgwRUMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE3CVBSQ01fUkVHMzIoMHgwRjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE4CVBSQ01fUkVHMzIoMHgwRjQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE5CVBSQ01fUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIwCVBSQ01fUkVHMzIoMHgwRkMpCisKKy8qIE1QVSAqLworI2RlZmluZSBDTV9DTEtTRUxfTVBVCQlQUkNNX1JFRzMyKDB4MTQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfTVBVCVBSQ01fUkVHMzIoMHgxNDgpCisjZGVmaW5lIFJNX1JTVFNUX01QVQkJUFJDTV9SRUczMigweDE1OCkKKyNkZWZpbmUgUE1fV0tERVBfTVBVCQlQUkNNX1JFRzMyKDB4MUM4KQorI2RlZmluZSBQTV9FVkdFTkNUUkxfTVBVCVBSQ01fUkVHMzIoMHgxRDQpCisjZGVmaW5lIFBNX0VWRUdFTk9OVElNX01QVQlQUkNNX1JFRzMyKDB4MUQ4KQorI2RlZmluZSBQTV9FVkVHRU5PRkZUSU1fTVBVCVBSQ01fUkVHMzIoMHgxREMpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01QVQkJUFJDTV9SRUczMigweDFFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01QVQkJUFJDTV9SRUczMigweDFFNCkKKworLyogQ09SRSAqLworI2RlZmluZSBDTV9GQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDApCisjZGVmaW5lIENNX0ZDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIwNCkKKyNkZWZpbmUgQ01fRkNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjA4KQorI2RlZmluZSBDTV9JQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTApCisjZGVmaW5lIENNX0lDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIxNCkKKyNkZWZpbmUgQ01fSUNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjE4KQorI2RlZmluZSBDTV9JQ0xLRU40X0NPUkUJCVBSQ01fUkVHMzIoMHgyMUMpCisjZGVmaW5lIENNX0lETEVTVDFfQ09SRQkJUFJDTV9SRUczMigweDIyMCkKKyNkZWZpbmUgQ01fSURMRVNUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjI0KQorI2RlZmluZSBDTV9JRExFU1QzX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjgpCisjZGVmaW5lIENNX0lETEVTVDRfQ09SRQkJUFJDTV9SRUczMigweDIyQykKKyNkZWZpbmUgQ01fQVVUT0lETEUxX0NPUkUJUFJDTV9SRUczMigweDIzMCkKKyNkZWZpbmUgQ01fQVVUT0lETEUyX0NPUkUJUFJDTV9SRUczMigweDIzNCkKKyNkZWZpbmUgQ01fQVVUT0lETEUzX0NPUkUJUFJDTV9SRUczMigweDIzOCkKKyNkZWZpbmUgQ01fQVVUT0lETEU0X0NPUkUJUFJDTV9SRUczMigweDIzQykKKyNkZWZpbmUgQ01fQ0xLU0VMMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjQwKQorI2RlZmluZSBDTV9DTEtTRUwyX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDQpCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyNDgpCisjZGVmaW5lIFBNX1dLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTApCisjZGVmaW5lIFBNX1dLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTQpCisjZGVmaW5lIFBNX1dLU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjApCisjZGVmaW5lIFBNX1dLU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjQpCisjZGVmaW5lIFBNX1dLREVQX0NPUkUJCVBSQ01fUkVHMzIoMHgyQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDJFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0NPUkUJCVBSQ01fUkVHMzIoMHgyRTQpCisKKy8qIEdGWCAqLworI2RlZmluZSBDTV9GQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzEwKQorI2RlZmluZSBDTV9JRExFU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzIwKQorI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQlQUkNNX1JFRzMyKDB4MzQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfR0ZYCVBSQ01fUkVHMzIoMHgzNDgpCisjZGVmaW5lIFJNX1JTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4MzUwKQorI2RlZmluZSBSTV9SU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzNTgpCisjZGVmaW5lIFBNX1dLREVQX0dGWAkJUFJDTV9SRUczMigweDNDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4M0UwKQorI2RlZmluZSBQTV9QV1NUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4M0U0KQorCisvKiBXQUtFLVVQICovCisjZGVmaW5lIENNX0ZDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDAwKQorI2RlZmluZSBDTV9JQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQxMCkKKyNkZWZpbmUgQ01fSURMRVNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0MjApCisjZGVmaW5lIENNX0FVVE9JRExFX1dLVVAJUFJDTV9SRUczMigweDQzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NDApCisjZGVmaW5lIFJNX1JTVENUUkxfV0tVUAkJUFJDTV9SRUczMigweDQ1MCkKKyNkZWZpbmUgUk1fUlNUVElNRV9XS1VQCQlQUkNNX1JFRzMyKDB4NDU0KQorI2RlZmluZSBSTV9SU1RTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDU4KQorI2RlZmluZSBQTV9XS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0QTApCisjZGVmaW5lIFBNX1dLU1RfV0tVUAkJUFJDTV9SRUczMigweDRCMCkKKworLyogQ0xPQ0tTICovCisjZGVmaW5lIENNX0NMS0VOX1BMTAkJUFJDTV9SRUczMigweDUwMCkKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOCQlQUkNNX1JFRzMyKDB4NTIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9QTEwJCVBSQ01fUkVHMzIoMHg1MzApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMCQlQUkNNX1JFRzMyKDB4NTQwKQorI2RlZmluZSBDTV9DTEtTRUwyX1BMTAkJUFJDTV9SRUczMigweDU0NCkKKworLyogRFNQICovCisjZGVmaW5lIENNX0ZDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MDApCisjZGVmaW5lIENNX0lDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MTApCisjZGVmaW5lIENNX0lETEVTVF9EU1AJCVBSQ01fUkVHMzIoMHg4MjApCisjZGVmaW5lIENNX0FVVE9JRExFX0RTUAkJUFJDTV9SRUczMigweDgzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0RTUAkJUFJDTV9SRUczMigweDg0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0RTUAlQUkNNX1JFRzMyKDB4ODQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDg1MCkKKyNkZWZpbmUgUk1fUlNUU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODU4KQorI2RlZmluZSBQTV9XS0VOX0RTUAkJUFJDTV9SRUczMigweDhBMCkKKyNkZWZpbmUgUE1fV0tERVBfRFNQCQlQUkNNX1JFRzMyKDB4OEM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4RTApCisjZGVmaW5lIFBNX1BXU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4RTQpCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0RTUAlQUkNNX1JFRzMyKDB4OEYwKQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9EU1AJUFJDTV9SRUczMigweDhGNCkKKworLyogSVZBICovCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0lWQQlQUkNNX1JFRzMyKDB4OEY4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9JVkEJUFJDTV9SRUczMigweDhGQykKKworLyogTW9kZW0gb24gMjQzMCAqLworI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQorI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9DTEtTRUxfTURNCQlQUkNNX1JFRzMyKDB4QzQwKQorCisvKiBGSVhNRTogTW92ZSB0byBoZWFkZXIgZm9yIDI0MzAgKi8KKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDUwMDAwKQorI2RlZmluZSBESVNQX1JFRzMyKG9mZnNldCkJX19SRUczMihESVNQX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUE1DX0JBU0UJCShPTUFQMjRYWF9HUE1DX0JBU0UpCisjZGVmaW5lIEdQTUNfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQTUNfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIEdQVDFfQkFTRQkJKE9NQVAyNFhYX0dQVDEpCisjZGVmaW5lIEdQVDFfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQVDFfQkFTRSArIChvZmZzZXQpKQorCisvKiBNaXNjIHN5c2NvbmZpZyAqLworI2RlZmluZSBESVNQQ19TWVNDT05GSUcJCURJU1BfUkVHMzIoMHg0MTApCisjZGVmaW5lIFNQSV9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDk4MDAwKQorI2RlZmluZSBNQ1NQSTFfU1lTQ09ORklHCV9fUkVHMzIoU1BJX0JBU0UgKyAweDEwKQorI2RlZmluZSBNQ1NQSTJfU1lTQ09ORklHCV9fUkVHMzIoU1BJX0JBU0UrMHgyMDAwICsgMHgxMCkKKworLy8jZGVmaW5lIERTUF9NTVVfU1lTQ09ORklHCTB4NUEwMDAwMTAKKyNkZWZpbmUgQ0FNRVJBX01NVV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHgyQzEwKQorLy8jZGVmaW5lIElWQV9NTVVfU1lTQ09ORklHCTB4NUQwMDAwMTAKKy8vI2RlZmluZSBEU1BfRE1BX1NZU0NPTkZJRwkweDAwRkNDMDJDCisjZGVmaW5lIENBTUVSQV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MjgyQykKKyNkZWZpbmUgU1lTVEVNX0RNQV9TWVNDT05GSUcJX19SRUczMihESVNQX0JBU0UrMHg2MDJDKQorI2RlZmluZSBHUE1DX1NZU0NPTkZJRwkJR1BNQ19SRUczMigweDAxMCkKKyNkZWZpbmUgTUFJTEJPWEVTX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5NDAxMCkKKyNkZWZpbmUgVUFSVDFfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QTA1NCkKKyNkZWZpbmUgVUFSVDJfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2QzA1NCkKKyNkZWZpbmUgVUFSVDNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg2RTA1NCkKKy8vI2RlZmluZSBJVkFfU1lTQ09ORklHCQkweDVDMDYwMDEwCisjZGVmaW5lIFNEUkNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDEwKQorI2RlZmluZSBTTVNfU1lTQ09ORklHCQlfX1JFRzMyKE9NQVAyNFhYX1NNU19CQVNFKzB4MTApCisjZGVmaW5lIFNTSV9TWVNDT05GSUcJCV9fUkVHMzIoRElTUF9CQVNFKzB4ODAxMCkKKy8vI2RlZmluZSBWTFlOUV9TWVNDT05GSUcJMHg2N0ZGRkUxMAorCisvKiBya3cgLSBnb29kIGNhbm5pZGF0ZXMgZm9yIFBNXyB0byBzdGFydCB3aGF0IG5tIHdhcyB0cnlpbmcgKi8KKyNkZWZpbmUgT01BUDI0WFhfR1BUMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHgyQTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3QTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3QzAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3RTAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUNwkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4MDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUOAkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4MjAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUOQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4NDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTAJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODYwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDExCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMgkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4QTAwMCkKKworI2RlZmluZSBHUFRJTUVSMV9TWVNDT05GSUcJR1BUMV9SRUczMigweDAxMCkKKyNkZWZpbmUgR1BUSU1FUjJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMiArIDB4MTApCisjZGVmaW5lIEdQVElNRVIzX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDMgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNF9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ0ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjVfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNSArIDB4MTApCisjZGVmaW5lIEdQVElNRVI2X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDYgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSN19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ3ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjhfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUOCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI5X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDkgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSMTBfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTAgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSMTFfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTEgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSMTJfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUMTIgKyAweDEwKQorCisjZGVmaW5lIEdQSU9YX0JBU0UoWCkJCShPTUFQMjRYWF9HUElPX0JBU0UrKDB4MjAwMCooKFgpLTEpKSkKKworI2RlZmluZSBHUElPMV9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMSkrMHgxMCkpCisjZGVmaW5lIEdQSU8yX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgyKSsweDEwKSkKKyNkZWZpbmUgR1BJTzNfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDMpKzB4MTApKQorI2RlZmluZSBHUElPNF9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoNCkrMHgxMCkpCisKKy8qIEdQIFRJTUVSIDEgKi8KKyNkZWZpbmUgR1BUSU1FUjFfVElTVEFUCQlHUFQxX1JFRzMyKDB4MDE0KQorI2RlZmluZSBHUFRJTUVSMV9USVNSCQlHUFQxX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUFRJTUVSMV9USUVSCQlHUFQxX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUFRJTUVSMV9UV0VSCQlHUFQxX1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0xSCQlHUFQxX1JFRzMyKDB4MDI0KQorI2RlZmluZSBHUFRJTUVSMV9UQ1JSCQlHUFQxX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUFRJTUVSMV9UTERSCQlHUFQxX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUFRJTUVSMV9UVEdSCQlHUFQxX1JFRzMyKDB4MDMwKQorI2RlZmluZSBHUFRJTUVSMV9UV1BTCQlHUFQxX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUFRJTUVSMV9UTUFSCQlHUFQxX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMQkJR1BUMV9SRUczMigweDAzQykKKyNkZWZpbmUgR1BUSU1FUjFfVFNJQ1IJCUdQVDFfUkVHMzIoMHgwNDApCisjZGVmaW5lIEdQVElNRVIxX1RDQVIyCQlHUFQxX1JFRzMyKDB4MDQ0KQorCisvKiBya3cgLS0gYmFzZSBmaXggdXAgcGxlYXNlLi4uICovCisjZGVmaW5lIEdQVElNRVIzX1RJU1IJCV9fUkVHMzIoT01BUDI0WFhfTDRfSU9fQkFTRSsweDc4MDE4KQorCisvKiBTRFJDICovCisjZGVmaW5lIFNEUkNfRExMQV9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2MCkKKyNkZWZpbmUgU0RSQ19ETExBX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2NCkKKyNkZWZpbmUgU0RSQ19ETExCX0NUUkwJCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDY4KQorI2RlZmluZSBTRFJDX0RMTEJfU1RBVFVTCV9fUkVHMzIoT01BUDI0WFhfU0RSQ19CQVNFKzB4MDZDKQorI2RlZmluZSBTRFJDX1BPV0VSCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA3MCkKKyNkZWZpbmUgU0RSQ19NUl8wCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA4NCkKKworLyogR1BJTyAxICovCisjZGVmaW5lIEdQSU8xX0JBU0UJCUdQSU9YX0JBU0UoMSkKKyNkZWZpbmUgR1BJTzFfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8xX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgR1BJTzFfSVJRRU5BQkxFMQlHUElPMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BJTzFfSVJRU1RBVFVTMQlHUElPMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BJTzFfSVJRRU5BQkxFMglHUElPMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BJTzFfSVJRU1RBVFVTMglHUElPMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BJTzFfV0FLRVVQRU5BQkxFCUdQSU8xX1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUElPMV9SSVNJTkdERVRFQ1QJR1BJTzFfUkVHMzIoMHgwNDgpCisjZGVmaW5lIEdQSU8xX0RBVEFJTgkJR1BJTzFfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQSU8xX09FCQlHUElPMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BJTzFfREFUQU9VVAkJR1BJTzFfUkVHMzIoMHgwM0MpCisKKy8qIEdQSU8yICovCisjZGVmaW5lIEdQSU8yX0JBU0UJCUdQSU9YX0JBU0UoMikKKyNkZWZpbmUgR1BJTzJfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU8yX0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgR1BJTzJfSVJRRU5BQkxFMQlHUElPMl9SRUczMigweDAxQykKKyNkZWZpbmUgR1BJTzJfSVJRU1RBVFVTMQlHUElPMl9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BJTzJfSVJRRU5BQkxFMglHUElPMl9SRUczMigweDAyQykKKyNkZWZpbmUgR1BJTzJfSVJRU1RBVFVTMglHUElPMl9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BJTzJfV0FLRVVQRU5BQkxFCUdQSU8yX1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUElPMl9SSVNJTkdERVRFQ1QJR1BJTzJfUkVHMzIoMHgwNDgpCisjZGVmaW5lIEdQSU8yX0RBVEFJTgkJR1BJTzJfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQSU8yX09FCQlHUElPMl9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BJTzJfREFUQU9VVAkJR1BJTzJfUkVHMzIoMHgwM0MpCisKKy8qIEdQSU8gMyAqLworI2RlZmluZSBHUElPM19CQVNFCQlHUElPWF9CQVNFKDMpCisjZGVmaW5lIEdQSU8zX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPM19CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8zX0lSUUVOQUJMRTEJR1BJTzNfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8zX0lSUVNUQVRVUzEJR1BJTzNfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8zX0lSUUVOQUJMRTIJR1BJTzNfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8zX0lSUVNUQVRVUzIJR1BJTzNfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8zX1dBS0VVUEVOQUJMRQlHUElPM19SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzNfUklTSU5HREVURUNUCUdQSU8zX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPM19GQUxMSU5HREVURUNUCUdQSU8zX1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPM19EQVRBSU4JCUdQSU8zX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPM19PRQkJR1BJTzNfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8zX0RBVEFPVVQJCUdQSU8zX1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPM19ERUJPVU5DRU5BQkxFCUdQSU8zX1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPM19ERUJPVU5DSU5HVElNRQlHUElPM19SRUczMigweDA1NCkKKworLyogR1BJTyA0ICovCisjZGVmaW5lIEdQSU80X0JBU0UJCUdQSU9YX0JBU0UoNCkKKyNkZWZpbmUgR1BJTzRfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKEdQSU80X0JBU0UgKyAob2Zmc2V0KSkKKyNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMQlHUElPNF9SRUczMigweDAxQykKKyNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMQlHUElPNF9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BJTzRfSVJRRU5BQkxFMglHUElPNF9SRUczMigweDAyQykKKyNkZWZpbmUgR1BJTzRfSVJRU1RBVFVTMglHUElPNF9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BJTzRfV0FLRVVQRU5BQkxFCUdQSU80X1JFRzMyKDB4MDIwKQorI2RlZmluZSBHUElPNF9SSVNJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNDgpCisjZGVmaW5lIEdQSU80X0ZBTExJTkdERVRFQ1QJR1BJTzRfUkVHMzIoMHgwNEMpCisjZGVmaW5lIEdQSU80X0RBVEFJTgkJR1BJTzRfUkVHMzIoMHgwMzgpCisjZGVmaW5lIEdQSU80X09FCQlHUElPNF9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BJTzRfREFUQU9VVAkJR1BJTzRfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQSU80X0RFQk9VTkNFTkFCTEUJR1BJTzRfUkVHMzIoMHgwNTApCisjZGVmaW5lIEdQSU80X0RFQk9VTkNJTkdUSU1FCUdQSU80X1JFRzMyKDB4MDU0KQorCisKKy8qIElPIENPTkZJRyAqLworI2RlZmluZSBDT05UUk9MX0JBU0UJCShPTUFQMjRYWF9DVFJMX0JBU0UpCisjZGVmaW5lIENPTlRST0xfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKENPTlRST0xfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TUEkxX05DUzIJQ09OVFJPTF9SRUczMigweDEwNCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX1NZU19YVEFMT1VUCUNPTlRST0xfUkVHMzIoMHgxMzQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9VQVJUMV9SWAlDT05UUk9MX1JFRzMyKDB4MEM4KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfTUNCU1AxX0RYCUNPTlRST0xfUkVHMzIoMHgxMEMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9HUE1DX05DUzQJQ09OVFJPTF9SRUczMigweDA5MCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19ENQkJQ09OVFJPTF9SRUczMigweDBCOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EOQkJQ09OVFJPTF9SRUczMigweDBCQykKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX0RTU19EMTMJCUNPTlRST0xfUkVHMzIoMHgwQzApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfVlNZTkMJQ09OVFJPTF9SRUczMigweDBDQykKKworLyogQ09OVFJPTCAqLworI2RlZmluZSBDT05UUk9MX0RFVkNPTkYJCUNPTlRST0xfUkVHMzIoMHgyNzQpCisKKy8qIElOVEVSUlVQVCBDT05UUk9MTEVSICovCisjZGVmaW5lIElOVENfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHhmZTAwMCkKKyNkZWZpbmUgSU5UQ19SRUczMihvZmZzZXQpCV9fUkVHMzIoSU5UQ19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgSU5UQzFfVV9CQVNFCQlJTlRDX1JFRzMyKDB4MDAwKQorI2RlZmluZSBJTlRDX01JUjAJCUlOVENfUkVHMzIoMHgwODQpCisjZGVmaW5lIElOVENfTUlSX1NFVDAJCUlOVENfUkVHMzIoMHgwOEMpCisjZGVmaW5lIElOVENfTUlSX0NMRUFSMAkJSU5UQ19SRUczMigweDA4OCkKKyNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIwCQlJTlRDX1JFRzMyKDB4MDk0KQorI2RlZmluZSBJTlRDX01JUjEJCUlOVENfUkVHMzIoMHgwQTQpCisjZGVmaW5lIElOVENfTUlSX1NFVDEJCUlOVENfUkVHMzIoMHgwQUMpCisjZGVmaW5lIElOVENfTUlSX0NMRUFSMQkJSU5UQ19SRUczMigweDBBOCkKKyNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIxCQlJTlRDX1JFRzMyKDB4MEI0KQorI2RlZmluZSBJTlRDX01JUjIJCUlOVENfUkVHMzIoMHgwQzQpCisjZGVmaW5lIElOVENfTUlSX1NFVDIJCUlOVENfUkVHMzIoMHgwQ0MpCisjZGVmaW5lIElOVENfTUlSX0NMRUFSMgkJSU5UQ19SRUczMigweDBDOCkKKyNkZWZpbmUgSU5UQ19JU1JfQ0xFQVIyCQlJTlRDX1JFRzMyKDB4MEQ0KQorI2RlZmluZSBJTlRDX1NJUl9JUlEJCUlOVENfUkVHMzIoMHgwNDApCisjZGVmaW5lIElOVENfQ09OVFJPTAkJSU5UQ19SRUczMigweDA0OCkKKyNkZWZpbmUgSU5UQ19JTFIxMQkJSU5UQ19SRUczMigweDEyQykKKyNkZWZpbmUgSU5UQ19JTFIzMgkJSU5UQ19SRUczMigweDE4MCkKKyNkZWZpbmUgSU5UQ19JTFIzNwkJSU5UQ19SRUczMigweDE5NCkKKyNkZWZpbmUgSU5UQ19TWVNDT05GSUcJCUlOVENfUkVHMzIoMHgwMTApCisKKy8qIFJBTSBGSVJFV0FMTCAqLworI2RlZmluZSBSQU1GV19CQVNFCQkoMHg2ODAwNTAwMCkKKyNkZWZpbmUgUkFNRldfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKFJBTUZXX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBSQU1GV19SRVFJTkZPUEVSTTAJUkFNRldfUkVHMzIoMHgwNDgpCisjZGVmaW5lIFJBTUZXX1JFQURQRVJNMAkJUkFNRldfUkVHMzIoMHgwNTApCisjZGVmaW5lIFJBTUZXX1dSSVRFUEVSTTAJUkFNRldfUkVHMzIoMHgwNTgpCisKKy8qIEdQTUMgQ1MxIEZQR0EgT04gVVNFUiBJTlRFUkZBQ0UgTU9EVUxFICovCisvLyNkZWZpbmUgREVCVUdfQk9BUkRfTEVEX1JFR0lTVEVSIDB4MDQwMDAwMTQKKworLyogR1BNQyBDUzAgKi8KKyNkZWZpbmUgR1BNQ19DT05GSUcxXzAJCUdQTUNfUkVHMzIoMHgwNjApCisjZGVmaW5lIEdQTUNfQ09ORklHMl8wCQlHUE1DX1JFRzMyKDB4MDY0KQorI2RlZmluZSBHUE1DX0NPTkZJRzNfMAkJR1BNQ19SRUczMigweDA2OCkKKyNkZWZpbmUgR1BNQ19DT05GSUc0XzAJCUdQTUNfUkVHMzIoMHgwNkMpCisjZGVmaW5lIEdQTUNfQ09ORklHNV8wCQlHUE1DX1JFRzMyKDB4MDcwKQorI2RlZmluZSBHUE1DX0NPTkZJRzZfMAkJR1BNQ19SRUczMigweDA3NCkKKyNkZWZpbmUgR1BNQ19DT05GSUc3XzAJCUdQTUNfUkVHMzIoMHgwNzgpCisKKy8qIERTUyAqLworI2RlZmluZSBEU1NfQ09OVFJPTAkJRElTUF9SRUczMigweDA0MCkKKyNkZWZpbmUgRElTUENfQ09OVFJPTAkJRElTUF9SRUczMigweDQ0MCkKKyNkZWZpbmUgRElTUENfU1lTU1RBVFVTCQlESVNQX1JFRzMyKDB4NDE0KQorI2RlZmluZSBESVNQQ19JUlFTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTgpCisjZGVmaW5lIERJU1BDX0lSUUVOQUJMRQkJRElTUF9SRUczMigweDQxQykKKyNkZWZpbmUgRElTUENfQ09ORklHCQlESVNQX1JFRzMyKDB4NDQ0KQorI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMAlESVNQX1JFRzMyKDB4NDRDKQorI2RlZmluZSBESVNQQ19ERUZBVUxUX0NPTE9SMQlESVNQX1JFRzMyKDB4NDUwKQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjAJRElTUF9SRUczMigweDQ1NCkKKyNkZWZpbmUgRElTUENfVFJBTlNfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTgpCisjZGVmaW5lIERJU1BDX0xJTkVfTlVNQkVSCURJU1BfUkVHMzIoMHg0NjApCisjZGVmaW5lIERJU1BDX1RJTUlOR19ICQlESVNQX1JFRzMyKDB4NDY0KQorI2RlZmluZSBESVNQQ19USU1JTkdfVgkJRElTUF9SRUczMigweDQ2OCkKKyNkZWZpbmUgRElTUENfUE9MX0ZSRVEJCURJU1BfUkVHMzIoMHg0NkMpCisjZGVmaW5lIERJU1BDX0RJVklTT1IJCURJU1BfUkVHMzIoMHg0NzApCisjZGVmaW5lIERJU1BDX1NJWkVfRElHCQlESVNQX1JFRzMyKDB4NDc4KQorI2RlZmluZSBESVNQQ19TSVpFX0xDRAkJRElTUF9SRUczMigweDQ3QykKKyNkZWZpbmUgRElTUENfR0ZYX0JBMAkJRElTUF9SRUczMigweDQ4MCkKKyNkZWZpbmUgRElTUENfR0ZYX0JBMQkJRElTUF9SRUczMigweDQ4NCkKKyNkZWZpbmUgRElTUENfR0ZYX1BPU0lUSU9OCURJU1BfUkVHMzIoMHg0ODgpCisjZGVmaW5lIERJU1BDX0dGWF9TSVpFCQlESVNQX1JFRzMyKDB4NDhDKQorI2RlZmluZSBESVNQQ19HRlhfQVRUUklCVVRFUwlESVNQX1JFRzMyKDB4NEEwKQorI2RlZmluZSBESVNQQ19HRlhfRklGT19USFJFU0hPTEQJRElTUF9SRUczMigweDRBNCkKKyNkZWZpbmUgRElTUENfR0ZYX1JPV19JTkMJRElTUF9SRUczMigweDRBQykKKyNkZWZpbmUgRElTUENfR0ZYX1BJWEVMX0lOQwlESVNQX1JFRzMyKDB4NEIwKQorI2RlZmluZSBESVNQQ19HRlhfV0lORE9XX1NLSVAJRElTUF9SRUczMigweDRCNCkKKyNkZWZpbmUgRElTUENfR0ZYX1RBQkxFX0JBCURJU1BfUkVHMzIoMHg0QjgpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUxCURJU1BfUkVHMzIoMHg1RDQpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUyCURJU1BfUkVHMzIoMHg1RDgpCisjZGVmaW5lIERJU1BDX0RBVEFfQ1lDTEUzCURJU1BfUkVHMzIoMHg1REMpCisKKy8qIFdha2UgdXAgZGVmaW5lIGZvciBib2FyZCAqLworI2RlZmluZSBHUElPOTcJCQkoMSA8PCAxKQorI2RlZmluZSBHUElPODgJCQkoMSA8PCAyNCkKKworI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KKworI2VuZGlmCisKKworCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkZjA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9tYXAvb21hcDIvc2VyaWFsLmMKKyAqCisgKiBPTUFQMiBzZXJpYWwgc3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogUGF1bCBNdW5kdCA8cGF1bC5tdW5kdEBub2tpYS5jb20+CisgKgorICogQmFzZWQgb2ZmIG9mIGFyY2gvYXJtL21hY2gtb21hcC9vbWFwMS9zZXJpYWwuYworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2xvY2suaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDFfaWNrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDFfZmNrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDJfaWNrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDJfZmNrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfaWNrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogdWFydDNfZmNrID0gTlVMTDsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UJPSAoY2hhciAqKUlPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSwKKwkJLm1hcGJhc2UJPSAodW5zaWduZWQgbG9uZylPTUFQX1VBUlQxX0JBU0UsCisJCS5pcnEJCT0gNzIsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLmlvdHlwZQkJPSBVUElPX01FTSwKKwkJLnJlZ3NoaWZ0CT0gMiwKKwkJLnVhcnRjbGsJPSBPTUFQMTZYWF9CQVNFX0JBVUQgKiAxNiwKKwl9LCB7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT19BRERSRVNTKE9NQVBfVUFSVDJfQkFTRSksCisJCS5tYXBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpT01BUF9VQVJUMl9CQVNFLAorCQkuaXJxCQk9IDczLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCisJfSwgeworCQkubWVtYmFzZQk9IChjaGFyICopSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpLAorCQkubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKU9NQVBfVUFSVDNfQkFTRSwKKwkJLmlycQkJPSA3NCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAyLAorCQkudWFydGNsawk9IE9NQVAxNlhYX0JBU0VfQkFVRCAqIDE2LAorCX0sIHsKKwkJLmZsYWdzCQk9IDAKKwl9Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzZXJpYWxfcmVhZF9yZWcoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICp1cCwKKwkJCQkJICAgaW50IG9mZnNldCkKK3sKKwlvZmZzZXQgPDw9IHVwLT5yZWdzaGlmdDsKKwlyZXR1cm4gKHVuc2lnbmVkIGludClfX3Jhd19yZWFkYih1cC0+bWVtYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXJpYWxfd3JpdGVfcmVnKHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCwgaW50IG9mZnNldCwKKwkJCQkgICAgaW50IHZhbHVlKQoreworCW9mZnNldCA8PD0gcC0+cmVnc2hpZnQ7CisJX19yYXdfd3JpdGViKHZhbHVlLCAodW5zaWduZWQgbG9uZykocC0+bWVtYmFzZSArIG9mZnNldCkpOworfQorCisvKgorICogSW50ZXJuYWwgVUFSVHMgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmb3IgdGhlIDgyNTAgYXV0b2NvbmZpZyB0byB3b3JrCisgKiBwcm9wZXJseS4gTm90ZSB0aGF0IHRoZSBUWCB3YXRlcm1hcmsgaW5pdGlhbGl6YXRpb24gbWF5IG5vdCBiZSBuZWVkZWQKKyAqIG9uY2UgdGhlIDgyNTAuYyB3YXRlcm1hcmsgaGFuZGxpbmcgY29kZSBpcyBtZXJnZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfcmVzZXQoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwKQoreworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX01EUjEsIDB4MDcpOworCXNlcmlhbF93cml0ZV9yZWcocCwgVUFSVF9PTUFQX1NDUiwgMHgwOCk7CisJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfTURSMSwgMHgwMCk7CisJc2VyaWFsX3dyaXRlX3JlZyhwLCBVQVJUX09NQVBfU1lTQywgMHgwMSk7Cit9CisKK3ZvaWQgX19pbml0IG9tYXBfc2VyaWFsX2luaXQoKQoreworCWludCBpOworCWNvbnN0IHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnICppbmZvOworCisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHNlcmlhbCBwb3J0cyBhcmUgbXV4ZWQgb24gYXQgdGhpcyBwb2ludC4KKwkgKiBZb3UgaGF2ZSB0byBtdXggdGhlbSBvZmYgaW4gZGV2aWNlIGRyaXZlcnMgbGF0ZXIgb24KKwkgKiBpZiBub3QgbmVlZGVkLgorCSAqLworCisJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19VQVJULAorCQkJICAgICAgIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9OUl9QT1JUUzsgaSsrKSB7CisJCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcCA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhICsgaTsKKworCQlpZiAoIShpbmZvLT5lbmFibGVkX3VhcnRzICYgKDEgPDwgaSkpKSB7CisJCQlwLT5tZW1iYXNlID0gMDsKKwkJCXAtPm1hcGJhc2UgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOgorCQkJdWFydDFfaWNrID0gY2xrX2dldChOVUxMLCAidWFydDFfaWNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQxX2ljaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQxX2lja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQxX2ljayk7CisJCQl9CisKKwkJCXVhcnQxX2ZjayA9IGNsa19nZXQoTlVMTCwgInVhcnQxX2ZjayIpOworCQkJaWYgKElTX0VSUih1YXJ0MV9mY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0MV9mY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0MV9mY2spOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXVhcnQyX2ljayA9IGNsa19nZXQoTlVMTCwgInVhcnQyX2ljayIpOworCQkJaWYgKElTX0VSUih1YXJ0Ml9pY2spKQorCQkJCXByaW50aygiQ291bGQgbm90IGdldCB1YXJ0Ml9pY2tcbiIpOworCQkJZWxzZSB7CisJCQkJY2xrX3VzZSh1YXJ0Ml9pY2spOworCQkJfQorCisJCQl1YXJ0Ml9mY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0Ml9mY2siKTsKKwkJCWlmIChJU19FUlIodWFydDJfZmNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDJfZmNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDJfZmNrKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl1YXJ0M19pY2sgPSBjbGtfZ2V0KE5VTEwsICJ1YXJ0M19pY2siKTsKKwkJCWlmIChJU19FUlIodWFydDNfaWNrKSkKKwkJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgdWFydDNfaWNrXG4iKTsKKwkJCWVsc2UgeworCQkJCWNsa191c2UodWFydDNfaWNrKTsKKwkJCX0KKworCQkJdWFydDNfZmNrID0gY2xrX2dldChOVUxMLCAidWFydDNfZmNrIik7CisJCQlpZiAoSVNfRVJSKHVhcnQzX2ZjaykpCisJCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IHVhcnQzX2Zja1xuIik7CisJCQllbHNlIHsKKwkJCQljbGtfdXNlKHVhcnQzX2Zjayk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCW9tYXBfc2VyaWFsX3Jlc2V0KHApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gMCwKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2VyaWFsX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOworfQorYXJjaF9pbml0Y2FsbChvbWFwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0tZm4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTg2OWUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtLWZuLlMKQEAgLTAsMCArMSwzMzMgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUworICoKKyAqIE9tYXAyIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDQKKyAqIFRleGFzIEluc3RydW1lbnRzLCA8d3d3LnRpLmNvbT4KKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgL1BVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3ByY20uaD4KKworI2RlZmluZSBUSU1FUl8zMktTWU5DVF9DUl9WCUlPX0FERFJFU1MoT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSArIDB4MDEwKQorCisjZGVmaW5lIENNX0NMS1NFTDJfUExMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDU0NCkKKyNkZWZpbmUgUFJDTV9WT0xUQ1RSTF9WCQlJT19BRERSRVNTKE9NQVAyNFhYX1BSQ01fQkFTRSArIDB4MDUwKQorI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDA4MCkKKyNkZWZpbmUgQ01fQ0xLRU5fUExMX1YJCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1MDApCisjZGVmaW5lIENNX0lETEVTVF9DS0dFTl9WCUlPX0FERFJFU1MoT01BUDI0WFhfUFJDTV9CQVNFICsgMHg1MjApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMX1YJSU9fQUREUkVTUyhPTUFQMjRYWF9QUkNNX0JBU0UgKyAweDU0MCkKKworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTF9WCUlPX0FERFJFU1MoT01BUDI0WFhfU0RSQ19CQVNFICsgMHgwNjApCisjZGVmaW5lIFNEUkNfUkZSX0NUUkxfVgkJSU9fQUREUkVTUyhPTUFQMjRYWF9TRFJDX0JBU0UgKyAweDBhNCkKKworCS50ZXh0CisKK0VOVFJZKHNyYW1fZGRyX2luaXQpCisJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCisKKwltb3YJcjEyLCByMgkJCUAgY2FwdHVyZSBDUzEgdnMgQ1MwCisJbW92CXI4LCByMwkJCUAgY2FwdHVyZSBmb3JjZSBwYXJhbWV0ZXIKKworCS8qIGZyZXF1ZW5jeSBzaGlmdCBkb3duICovCisJbGRyCXIyLCBjbV9jbGtzZWwyX3BsbAlAIGdldCBhZGRyZXNzIG9mIGRwbGxvdXQgcmVnCisJbW92CXIzLCAjMHgxCQlAIHZhbHVlIGZvciAxeCBvcGVyYXRpb24KKwlzdHIJcjMsIFtyMl0JCUAgZ28gdG8gTDEtZnJlcSBvcGVyYXRpb24KKworCS8qIHZvbHRhZ2Ugc2hpZnQgZG93biAqLworCW1vdiByOSwgIzB4MQkJCUAgc2V0IHVwIGZvciBMMSB2b2x0YWdlIGNhbGwKKwlibCB2b2x0YWdlX3NoaWZ0CQlAIGdvIGRyb3Agdm9sdGFnZQorCisJLyogZGxsIGxvY2sgbW9kZSAqLworCWxkcglyMTEsIHNkcmNfZGxsYV9jdHJsCUAgYWRkciBvZiBkbGxhIGN0cmwKKwlsZHIJcjEwLCBbcjExXQkJQCBnZXQgY3VycmVudCB2YWwKKwljbXAJcjEyLCAjMHgxCQlAIGNzMSBiYXNlICgyNDIyIGVzMi4wNS8xKQorCWFkZGVxCXIxMSwgcjExLCAjMHg4CQlAIGlmIGNzMSBiYXNlLCBtb3ZlIHRvIERMTEIKKwltdm4JcjksICMweDQJCUAgbWFzayB0byBnZXQgY2xlYXIgYml0MgorCWFuZAlyMTAsIHIxMCwgcjkJCUAgY2xlYXIgYml0MiBmb3IgbG9jayBtb2RlLgorCW9ycglyMTAsIHIxMCwgIzB4OAkJQCBtYWtlIHN1cmUgRExMIG9uIChlczIgYml0IHBvcykKKwlvcnIJcjEwLCByMTAsICMweDIJCUAgOTAgZGVncmVlIHBoYXNlIGZvciBhbGwgYmVsb3cgMTMzTWh6CisJc3RyCXIxMCwgW3IxMV0JCUAgY29tbWl0IHRvIERMTEFfQ1RSTAorCWJsCWlfZGxsX3dhaXQJCUAgd2FpdCBmb3IgZGxsIHRvIGxvY2sKKworCS8qIGdldCBkbGwgdmFsdWUgKi8KKwlhZGQJcjExLCByMTEsICMweDQJCUAgZ2V0IGFkZHIgb2Ygc3RhdHVzIHJlZworCWxkcglyMTAsIFtyMTFdCQlAIGdldCBsb2NrZWQgdmFsdWUKKworCS8qIHZvbHRhZ2Ugc2hpZnQgdXAgKi8KKwltb3YgcjksICMweDAJCQlAIHNoaWZ0IGJhY2sgdG8gTDAtdm9sdGFnZQorCWJsIHZvbHRhZ2Vfc2hpZnQJCUAgZ28gcmFpc2Ugdm9sdGFnZQorCisJLyogZnJlcXVlbmN5IHNoaWZ0IHVwICovCisJbW92CXIzLCAjMHgyCQlAIHZhbHVlIGZvciAyeCBvcGVyYXRpb24KKwlzdHIJcjMsIFtyMl0JCUAgZ28gdG8gTDAtZnJlcSBvcGVyYXRpb24KKworCS8qIHJlc2V0IGVudHJ5IG1vZGUgZm9yIGRsbGN0cmwgKi8KKwlzdWIJcjExLCByMTEsICMweDQJCUAgbW92ZSBmcm9tIHN0YXR1cyB0byBjdHJsCisJY21wCXIxMiwgIzB4MQkJQCBub3JtYWxpemUgaWYgY3MxIGJhc2VkCisJc3ViZXEJcjExLCByMTEsICMweDgJCUAgcG9zc2libHkgYmFjayB0byBETExBCisJY21wCXI4LCAjMHgxCQlAIGlmIGZvcmNlZCB1bmxvY2sgZXhpdAorCW9ycmVxCXIxLCByMSwgIzB4NAkJQCBtYWtlIHN1cmUgZXhpdCB3aXRoIHVubG9ja2VkIHZhbHVlCisJc3RyCXIxLCBbcjExXQkJQCByZXN0b3JlIERMTEFfQ1RSTCBoaWdoIHZhbHVlCisJYWRkCXIxMSwgcjExLCAjMHg4CQlAIG1vdmUgdG8gRExMQl9DVFJMIGFkZHIKKwlzdHIJcjEsIFtyMTFdCQlAIHNldCB2YWx1ZSBETExCX0NUUkwKKwlibAlpX2RsbF93YWl0CQlAIHdhaXQgZm9yIHBvc3NpYmxlIGxvY2sKKworCS8qIHNldCB1cCBmb3IgcmV0dXJuLCBERFIgc2hvdWxkIGJlIGdvb2QgKi8KKwlzdHIgcjEwLCBbcjBdCQkJQCB3cml0ZSBkbGxfc3RhdHVzIGFuZCByZXR1cm4gY291bnRlcgorCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCisJLyogZW5zdXJlIHRoZSBETEwgaGFzIHJlbG9ja2VkICovCitpX2RsbF93YWl0OgorCW1vdglyNCwgIzB4ODAwCQlAIGRlbGF5IERMTCByZWxvY2ssIG1pbiAweDQwMCBMMyBjbG9ja3MKK2lfZGxsX2RlbGF5OgorCXN1YnMJcjQsIHI0LCAjMHgxCisJYm5lCWlfZGxsX2RlbGF5CisJbW92CXBjLCBscgorCisJLyoKKwkgKiBzaGlmdCB1cCBvciBkb3duIHZvbHRhZ2UsIHVzZSBSOSBhcyBpbnB1dCB0byB0ZWxsIGxldmVsLgorCSAqIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdXNlIDMyayBzeW5jIGNvdW50ZXIsIDF0aWNrPTMxdVMuCisJICovCit2b2x0YWdlX3NoaWZ0OgorCWxkcglyNCwgcHJjbV92b2x0Y3RybAlAIGdldCBhZGRyIG9mIHZvbHQgY3RybC4KKwlsZHIJcjUsIFtyNF0JCUAgZ2V0IHZhbHVlLgorCWxkcglyNiwgcHJjbV9tYXNrX3ZhbAlAIGdldCB2YWx1ZSBvZiBtYXNrCisJYW5kCXI1LCByNSwgcjYJCUAgYXBwbHkgbWFzayB0byBjbGVhciBiaXRzCisJb3JyCXI1LCByNSwgcjkJCUAgYnVsbGQgdmFsdWUgZm9yIEwwL0wxLXZvbHQgb3BlcmF0aW9uLgorCXN0cglyNSwgW3I0XQkJQCBzZXQgdXAgZm9yIGNoYW5nZS4KKwltb3YJcjMsICMweDQwMDAJCUAgZ2V0IHZhbCBmb3IgZm9yY2UKKwlvcnIJcjUsIHI1LCByMwkJQCBidWlsZCB2YWx1ZSBmb3IgZm9yY2UKKwlzdHIJcjUsIFtyNF0JCUAgRm9yY2UgdHJhbnNpdGlvbiB0byBMMQorCisJbGRyCXIzLCB0aW1lcl8zMmtzeW5jdF9jcglAIGdldCBhZGRyIG9mIGNvdW50ZXIKKwlsZHIJcjUsIFtyM10JCUAgZ2V0IHZhbHVlCisJYWRkCXI1LCByNSwgIzB4MwkJQCBnaXZlIGl0IGF0IG1vc3QgOTN1Uwordm9sdF9kZWxheToKKwlsZHIJcjcsIFtyM10JCUAgZ2V0IHRpbWVyIHZhbHVlCisJY21wCXI1LCByNwkJCUAgdGltZSB1cD8KKwliaGkJdm9sdF9kZWxheQkJQCBub3QgeWV0LT5icmFuY2gKKwltb3YJcGMsIGxyCQkJQCBiYWNrIHRvIGNhbGxlci4KKworLyogcmVsYXRpdmUgbG9hZCBjb25zdGFudHMgKi8KK2NtX2Nsa3NlbDJfcGxsOgorCS53b3JkIENNX0NMS1NFTDJfUExMX1YKK3NkcmNfZGxsYV9jdHJsOgorCS53b3JkIFNEUkNfRExMQV9DVFJMX1YKK3ByY21fdm9sdGN0cmw6CisJLndvcmQgUFJDTV9WT0xUQ1RSTF9WCitwcmNtX21hc2tfdmFsOgorCS53b3JkIDB4RkZGRjNGRkMKK3RpbWVyXzMya3N5bmN0X2NyOgorCS53b3JkIFRJTUVSXzMyS1NZTkNUX0NSX1YKK0VOVFJZKHNyYW1fZGRyX2luaXRfc3opCisJLndvcmQJLiAtIHNyYW1fZGRyX2luaXQKKworLyoKKyAqIFJlcHJvZ3JhbXMgbWVtb3J5IHRpbWluZ3MuCisgKiByMCA9IFtQUkNNX0ZVTEwgfCBQUkNNX0hBTEZdIHIxID0gU0RSQ19ETExBX0NUUkwgdmFsdWUgcjIgPSBbRERSIHwgU0RSXQorICogUFJDTV9GVUxMID0gMiwgUFJDTV9IQUxGID0gMSwgRERSID0gMSwgU0RSID0gMAorICovCitFTlRSWShzcmFtX3JlcHJvZ3JhbV9zZHJjKQorCXN0bWZkCXNwISwge3IwIC0gcjEwLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCW1vdglyMywgIzB4MAkJQCBjbGVhciBmb3IgbXJjIGNhbGwKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAlAIG1lbW9yeSBiYXJyaWVyLCBmaW5pc2ggQVJNIFNEUi9ERFIKKwlub3AKKwlub3AKKwlsZHIJcjYsIGRkcl9zZHJjX3Jmcl9jdHJsCUAgZ2V0IGFkZHIgb2YgcmVmcmVzaCByZWcKKwlsZHIJcjUsIFtyNl0JCUAgZ2V0IHZhbHVlCisJbW92CXI1LCByNSwgbHNyICM4CQlAIGlzb2xhdGUgcmZyIGZpZWxkIGFuZCBkcm9wIGJ1cnN0CisKKwljbXAJcjAsICMweDEJCUAgZ29pbmcgdG8gaGFsZiBzcGVlZD8KKwltb3ZuZQlyOSwgIzB4MAkJQCBpZiB1cCBzZXQgZmxhZyB1cCBmb3IgcHJlIHVwLCBoaSB2b2x0CisKKwlibG5lCXZvbHRhZ2Vfc2hpZnRfYwkJQCBhZGp1c3Qgdm9sdGFnZQorCisJY21wCXIwLCAjMHgxCQlAIGdvaW5nIHRvIGhhbGYgc3BlZWQgKHBvc3QgYnJhbmNoIGxpbmspCisJbW92ZXEJcjUsIHI1LCBsc3IgIzEJCUAgZGl2aWRlIGJ5IDIgaWYgdG8gaGFsZgorCW1vdm5lCXI1LCByNSwgbHNsICMxCQlAIG11bHQgYnkgMiBpZiB0byBmdWxsCisJbW92CXI1LCByNSwgbHNsICM4CQlAIHB1dCByZnIgZmllbGQgYmFjayBpbnRvIHBsYWNlCisJYWRkCXI1LCByNSwgIzB4MQkJQCB0dXJuIG9uIGJ1cnN0IG9mIDEKKwlsZHIJcjQsIGRkcl9jbV9jbGtzZWwyX3BsbAlAIGdldCBhZGRyZXNzIG9mIG91dCByZWcKKwlsZHIJcjMsIFtyNF0JCUAgZ2V0IGN1cnIgdmFsdWUKKwlvcnIJcjMsIHIzLCAjMHgzCisJYmljCXIzLCByMywgIzB4MwkJQCBjbGVhciBsb3dlciBiaXRzCisJb3JyCXIzLCByMywgcjAJCUAgbmV3IHN0YXRlIHZhbHVlCisJc3RyCXIzLCBbcjRdCQlAIHNldCBuZXcgc3RhdGUgKHBsbC94LCB4PTEgb3IgMikKKwlub3AKKwlub3AKKworCW1vdmVxCXI5LCAjMHgxCQlAIGlmIHNwZWVkIGRvd24sIHBvc3QgZG93biwgZHJvcCB2b2x0CisJYmxlcQl2b2x0YWdlX3NoaWZ0X2MKKworCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCA0CUAgbWVtb3J5IGJhcnJpZXIKKwlzdHIJcjUsIFtyNl0JCUAgc2V0IG5ldyBSRlJfMSB2YWx1ZQorCWFkZAlyNiwgcjYsICMweDMwCQlAIGdldCBSRlJfMiBhZGRyCisJc3RyCXI1LCBbcjZdCQlAIHNldCBSRlJfMgorCW5vcAorCWNtcAlyMiwgIzB4MQkJQCAoU0RSIG9yIEREUikgZG8gd2UgbmVlZCB0byBhZGp1c3QgRExMCisJYm5lCWZyZXFfb3V0CQlAIGxlYXZlIGlmIFNEUiwgbm8gRExMIGZ1bmN0aW9uCisKKwkvKiBXaXRoIEREUiwgd2UgbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIERMTCBmb3IgdGhlIGZyZXF1ZW5jeSBjaGFuZ2UgKi8KKwlsZHIJcjIsIGRkcl9zZHJjX2RsbGFfY3RybAlAIGFkZHIgb2YgZGxsYSBjdHJsCisJc3RyCXIxLCBbcjJdCQlAIHdyaXRlIG91dCBuZXcgU0RSQ19ETExBX0NUUkwKKwlhZGQJcjIsIHIyLCAjMHg4CQlAIGFkZHIgdG8gU0RSQ19ETExCX0NUUkwKKwlzdHIJcjEsIFtyMl0JCUAgY29tbWl0IHRvIFNEUkNfRExMQl9DVFJMCisJbW92CXIxLCAjMHgyMDAwCQlAIHdhaXQgRExMIHJlbG9jaywgbWluIDB4NDAwIEwzIGNsb2NrcworZGxsX3dhaXQ6CisJc3VicwlyMSwgcjEsICMweDEKKwlibmUJZGxsX3dhaXQKK2ZyZXFfb3V0OgorCWxkbWZkCXNwISwge3IwIC0gcjEwLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCisgICAgLyoKKyAgICAgKiBzaGlmdCB1cCBvciBkb3duIHZvbHRhZ2UsIHVzZSBSOSBhcyBpbnB1dCB0byB0ZWxsIGxldmVsLgorICAgICAqCXdhaXQgZm9yIGl0IHRvIGZpbmlzaCwgdXNlIDMyayBzeW5jIGNvdW50ZXIsIDF0aWNrPTMxdVMuCisgICAgICovCit2b2x0YWdlX3NoaWZ0X2M6CisJbGRyCXIxMCwgZGRyX3ByY21fdm9sdGN0cmwJQCBnZXQgYWRkciBvZiB2b2x0IGN0cmwKKwlsZHIJcjgsIFtyMTBdCQlAIGdldCB2YWx1ZQorCWxkcglyNywgZGRyX3ByY21fbWFza192YWwJQCBnZXQgdmFsdWUgb2YgbWFzaworCWFuZAlyOCwgcjgsIHI3CQlAIGFwcGx5IG1hc2sgdG8gY2xlYXIgYml0cworCW9ycglyOCwgcjgsIHI5CQlAIGJ1bGxkIHZhbHVlIGZvciBMMC9MMS12b2x0IG9wZXJhdGlvbi4KKwlzdHIJcjgsIFtyMTBdCQlAIHNldCB1cCBmb3IgY2hhbmdlLgorCW1vdglyNywgIzB4NDAwMAkJQCBnZXQgdmFsIGZvciBmb3JjZQorCW9ycglyOCwgcjgsIHI3CQlAIGJ1aWxkIHZhbHVlIGZvciBmb3JjZQorCXN0cglyOCwgW3IxMF0JCUAgRm9yY2UgdHJhbnNpdGlvbiB0byBMMQorCisJbGRyCXIxMCwgZGRyX3RpbWVyXzMya3N5bmN0CUAgZ2V0IGFkZHIgb2YgY291bnRlcgorCWxkcglyOCwgW3IxMF0JCUAgZ2V0IHZhbHVlCisJYWRkCXI4LCByOCwgIzB4MgkJQCBnaXZlIGl0IGF0IG1vc3QgNjJ1UyAobWluIDMxKykKK3ZvbHRfZGVsYXlfYzoKKwlsZHIJcjcsIFtyMTBdCQlAIGdldCB0aW1lciB2YWx1ZQorCWNtcAlyOCwgcjcJCQlAIHRpbWUgdXA/CisJYmhpCXZvbHRfZGVsYXlfYwkJQCBub3QgeWV0LT5icmFuY2gKKwltb3YJcGMsIGxyCQkJQCBiYWNrIHRvIGNhbGxlcgorCitkZHJfY21fY2xrc2VsMl9wbGw6CisJLndvcmQgQ01fQ0xLU0VMMl9QTExfVgorZGRyX3NkcmNfZGxsYV9jdHJsOgorCS53b3JkIFNEUkNfRExMQV9DVFJMX1YKK2Rkcl9zZHJjX3Jmcl9jdHJsOgorCS53b3JkIFNEUkNfUkZSX0NUUkxfVgorZGRyX3ByY21fdm9sdGN0cmw6CisJLndvcmQgUFJDTV9WT0xUQ1RSTF9WCitkZHJfcHJjbV9tYXNrX3ZhbDoKKwkud29yZCAweEZGRkYzRkZDCitkZHJfdGltZXJfMzJrc3luY3Q6CisJLndvcmQgVElNRVJfMzJLU1lOQ1RfQ1JfVgorCitFTlRSWShzcmFtX3JlcHJvZ3JhbV9zZHJjX3N6KQorCS53b3JkCS4gLSBzcmFtX3JlcHJvZ3JhbV9zZHJjCisKKy8qCisgKiBTZXQgZGl2aWRlcnMgYW5kIHBsbC4gQWxzbyByZWNhbGN1bGF0ZSBETEwgdmFsdWUgZm9yIEREUiBhbmQgdW5sb2NrIG1vZGUuCisgKi8KK0VOVFJZKHNyYW1fc2V0X3ByY20pCisJc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCByZWdzIHRvIHN0YWNrCisJYWRyCXI0LCBwYmVnaW4JCUAgYWRkciBvZiBwcmVsb2FkIHN0YXJ0CisJYWRyCXI4LCBwZW5kCQlAIGFkZHIgb2YgcHJlbG9hZCBlbmQKKwltY3JyCXAxNSwgMSwgcjgsIHI0LCBjMTIJQCBwcmVsb2FkIGludG8gaWNhY2hlCitwYmVnaW46CisJLyogbW92ZSBpbnRvIGZhc3QgcmVsb2NrIGJ5cGFzcyAqLworCWxkcglyOCwgcGxsX2N0bAkJQCBnZXQgYWRkcgorCWxkcglyNSwgW3I4XQkJQCBnZXQgdmFsCisJbXZuCXI2LCAjMHgzCQlAIGNsZWFyIG1hc2sKKwlhbmQJcjUsIHI1LCByNgkJQCBjbGVhciBmaWVsZAorCW9ycglyNywgcjUsICMweDIJCUAgZmFzdCByZWxvY2sgdmFsCisJc3RyCXI3LCBbcjhdCQlAIGdvIHRvIGZhc3QgcmVsb2NrCisJbGRyCXI0LCBwbGxfc3RhdAkJQCBhZGRyIG9mIHN0YXQKK2Jsb2NrOgorCS8qIHdhaXQgZm9yIGJ5cGFzcyAqLworCWxkcglyOCwgW3I0XQkJQCBzdGF0IHZhbHVlCisJYW5kCXI4LCByOCwgIzB4MwkJQCBtYXNrIGZvciBzdGF0CisJY21wCXI4LCAjMHgxCQlAIHRoZXJlIHlldAorCWJuZQlibG9jawkJCUAgbG9vcCBpZiBub3QKKworCS8qIHNldCBuZXcgZHBsbCBkaXZpZGVycyBfYWZ0ZXJfIGluIGJ5cGFzcyAqLworCWxkcglyNCwgcGxsX2RpdgkJQCBnZXQgYWRkcgorCXN0cglyMCwgW3I0XQkJQCBzZXQgZHBsbCBjdHJsIHZhbAorCisJbGRyCXI0LCBzZXRfY29uZmlnCQlAIGdldCBhZGRyCisJbW92CXI4LCAjMQkJCUAgdmFsaWQgY2ZnIG1zaworCXN0cglyOCwgW3I0XQkJQCBtYWtlIGRpdmlkZXJzIHRha2UKKworCW1vdglyNCwgIzEwMAkJQCBkZWFkIHNwaW4gYSBiaXQKK3dhaXRfYV9iaXQ6CisJc3VicwlyNCwgcjQsICMxCQlAIGRlYyBsb29wCisJYm5lCXdhaXRfYV9iaXQJCUAgZGVsYXkgZG9uZT8KKworCS8qIGNoZWNrIGlmIHN0YXlpbmcgaW4gYnlwYXNzICovCisJY21wCXIyLCAjMHgxCQlAIHN0YXkgaW4gYnlwYXNzPworCWJlcQlwZW5kCQkJQCBqdW1wIG92ZXIgZHBsbCByZWxvY2sKKworCS8qIHJlbG9jayBEUExMIHdpdGggbmV3IHZhbHMgKi8KKwlsZHIJcjUsIHBsbF9zdGF0CQlAIGdldCBhZGRyCisJbGRyCXI0LCBwbGxfY3RsCQlAIGdldCBhZGRyCisJb3JyCXI4LCByNywgIzB4MwkJQCB2YWwgZm9yIGxvY2sgZHBsbAorCXN0cglyOCwgW3I0XQkJQCBzZXQgdmFsCisJbW92CXIwLCAjMTAwMAkJQCBkZWFkIHNwaW4gYSBiaXQKK3dhaXRfbW9yZToKKwlzdWJzCXIwLCByMCwgIzEJCUAgZGVjIGxvb3AKKwlibmUJd2FpdF9tb3JlCQlAIGRlbGF5IGRvbmU/Cit3YWl0X2xvY2s6CisJbGRyCXI4LCBbcjVdCQlAIGdldCBsb2NrIHZhbAorCWFuZAlyOCwgcjgsICMzCQlAIGlzb2xhdGUgZmllbGQKKwljbXAJcjgsICMyCQkJQCBsb2NrZWQ/CisJYm5lCXdhaXRfbG9jawkJQCB3YWl0IGlmIG5vdAorcGVuZDoKKwkvKiB1cGRhdGUgbWVtb3J5IHRpbWluZ3MgJiBicmllZmx5IGxvY2sgZGxsICovCisJbGRyCXI0LCBzZHJjX3JmcgkJQCBnZXQgYWRkcgorCXN0cglyMSwgW3I0XQkJQCB1cGRhdGUgcmVmcmVzaCB0aW1pbmcKKwlsZHIJcjExLCBkbGxhX2N0cmwJCUAgZ2V0IGFkZHIgb2YgRExMQSBjdHJsCisJbGRyCXIxMCwgW3IxMV0JCUAgZ2V0IGN1cnJlbnQgdmFsCisJbXZuCXI5LCAjMHg0CQlAIG1hc2sgdG8gZ2V0IGNsZWFyIGJpdDIKKwlhbmQJcjEwLCByMTAsIHI5CQlAIGNsZWFyIGJpdDIgZm9yIGxvY2sgbW9kZQorCW9ycglyMTAsIHIxMCwgIzB4OAkJQCBtYWtlIHN1cmUgRExMIG9uIChlczIgYml0IHBvcykKKwlzdHIJcjEwLCBbcjExXQkJQCBjb21taXQgdG8gRExMQV9DVFJMCisJYWRkCXIxMSwgcjExLCAjMHg4CQlAIG1vdmUgdG8gZGxsYgorCXN0cglyMTAsIFtyMTFdCQlAIGhpdCBETExCIGFsc28KKworCW1vdglyNCwgIzB4ODAwCQlAIHJlbG9jayB0aW1lIChtaW4gMHg0MDAgTDMgY2xvY2tzKQord2FpdF9kbGxfbG9jazoKKwlzdWJzCXI0LCByNCwgIzB4MQorCWJuZQl3YWl0X2RsbF9sb2NrCisJbm9wCisJbGRtZmQJc3AhLCB7cjAtcjEyLCBwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCitzZXRfY29uZmlnOgorCS53b3JkIFBSQ01fQ0xLQ0ZHX0NUUkxfVgorcGxsX2N0bDoKKwkud29yZCBDTV9DTEtFTl9QTExfVgorcGxsX3N0YXQ6CisJLndvcmQgQ01fSURMRVNUX0NLR0VOX1YKK3BsbF9kaXY6CisJLndvcmQgQ01fQ0xLU0VMMV9QTExfVgorc2RyY19yZnI6CisJLndvcmQgU0RSQ19SRlJfQ1RSTF9WCitkbGxhX2N0cmw6CisJLndvcmQgU0RSQ19ETExBX0NUUkxfVgorCitFTlRSWShzcmFtX3NldF9wcmNtX3N6KQorCS53b3JkCS4gLSBzcmFtX3NldF9wcmNtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVjMTE0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYworICoKKyAqIE9NQVAyIEdQIHRpbWVyIHN1cHBvcnQuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICogICAgICAgICBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICoKKyAqIFNvbWUgcGFydHMgYmFzZWQgb2ZmIG9mIFRJJ3MgMjR4eCBjb2RlOgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogUm91Z2hseSBtb2RlbGxlZCBhZnRlciB0aGUgT01BUDEgTVBVIHRpbWVyIGNvZGUuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgorCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSMV9CQVNFCTB4NDgwMjgwMDAKKyNkZWZpbmUgT01BUDJfR1BfVElNRVIyX0JBU0UJMHg0ODAyYTAwMAorI2RlZmluZSBPTUFQMl9HUF9USU1FUjNfQkFTRQkweDQ4MDc4MDAwCisjZGVmaW5lIE9NQVAyX0dQX1RJTUVSNF9CQVNFCTB4NDgwN2EwMDAKKworI2RlZmluZSBHUF9USU1FUl9USURSCQkweDAwCisjZGVmaW5lIEdQX1RJTUVSX1RJU1IJCTB4MTgKKyNkZWZpbmUgR1BfVElNRVJfVElFUgkJMHgxYworI2RlZmluZSBHUF9USU1FUl9UQ0xSCQkweDI0CisjZGVmaW5lIEdQX1RJTUVSX1RDUlIJCTB4MjgKKyNkZWZpbmUgR1BfVElNRVJfVExEUgkJMHgyYworI2RlZmluZSBHUF9USU1FUl9UU0lDUgkJMHg0MAorCisjZGVmaW5lIE9TX1RJTUVSX05SCQkxICAvKiBHUCB0aW1lciAyICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2Jhc2VbXSA9IHsKKwlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMV9CQVNFKSwKKwlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSMl9CQVNFKSwKKwlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSM19CQVNFKSwKKwlJT19BRERSRVNTKE9NQVAyX0dQX1RJTUVSNF9CQVNFKSwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHRpbWVyX3JlYWRfcmVnKGludCBuciwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwodGltZXJfYmFzZVtucl0gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJfd3JpdGVfcmVnKGludCBuciwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCB0aW1lcl9iYXNlW25yXSArIHJlZyk7Cit9CisKKy8qIE5vdGUgdGhhdCB3ZSBhbHdheXMgZW5hYmxlIHRoZSBjbG9jayBwcmVzY2FsZSBkaXZpZGVyIGJpdCAqLworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2dwX3RpbWVyX3N0YXJ0KGludCBuciwgdW5zaWduZWQgbG9uZyBsb2FkX3ZhbCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJdG1wID0gMHhmZmZmZmZmZiAtIGxvYWRfdmFsOworCisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9UTERSLCB0bXApOworCXRpbWVyX3dyaXRlX3JlZyhuciwgR1BfVElNRVJfVENSUiwgdG1wKTsKKwl0aW1lcl93cml0ZV9yZWcobnIsIEdQX1RJTUVSX1RJRVIsIDEgPDwgMSk7CisJdGltZXJfd3JpdGVfcmVnKG5yLCBHUF9USU1FUl9UQ0xSLCAoMSA8PCA1KSB8ICgxIDw8IDEpIHwgMSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9ncF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwl0aW1lcl93cml0ZV9yZWcoT1NfVElNRVJfTlIsIEdQX1RJTUVSX1RJU1IsIDEgPDwgMSk7CisJdGltZXJfdGljayhyZWdzKTsKKworCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyX2dwX3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiZ3AgdGltZXIiLAorCS5mbGFncwkJPSBTQV9JTlRFUlJVUFQsCisJLmhhbmRsZXIJPSBvbWFwMl9ncF90aW1lcl9pbnRlcnJ1cHQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfdGltZXJfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKiBzeXNfY2s7CisJdTMyIHRpY2tfcGVyaW9kID0gMTIwMDAwOworCXUzMiBsOworCisJLyogUmVzZXQgY2xvY2sgYW5kIHByZXNjYWxlIHZhbHVlICovCisJdGltZXJfd3JpdGVfcmVnKE9TX1RJTUVSX05SLCBHUF9USU1FUl9UQ0xSLCAwKTsKKworCXN5c19jayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCWlmIChJU19FUlIoc3lzX2NrKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IHN5c19ja1xuIik7CisJZWxzZSB7CisJCWNsa191c2Uoc3lzX2NrKTsKKwkJdGlja19wZXJpb2QgPSBjbGtfZ2V0X3JhdGUoc3lzX2NrKSAvIDEwMDsKKwkJY2xrX3B1dChzeXNfY2spOworCX0KKworCXRpY2tfcGVyaW9kIC89IDI7CS8qIE1pbmltdW0gcHJlc2NhbGUgZGl2aWRlciBpcyAyICovCisJdGlja19wZXJpb2QgLT0gMTsKKworCWwgPSB0aW1lcl9yZWFkX3JlZyhPU19USU1FUl9OUiwgR1BfVElNRVJfVElEUik7CisJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDIgR1AgdGltZXIgKEhXIHZlcnNpb24gJWQuJWQpXG4iLAorCSAgICAgICAobCA+PiA0KSAmIDB4MGYsIGwgJiAweDBmKTsKKworCXNldHVwX2lycSgzOCwgJm9tYXAyX2dwX3RpbWVyX2lycSk7CisKKwlvbWFwMl9ncF90aW1lcl9zdGFydChPU19USU1FUl9OUiwgdGlja19wZXJpb2QpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXIgPSB7CisJLmluaXQJPSBvbWFwMl9ncF90aW1lcl9pbml0LAorfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggYjM4MGE0My4uZTIwMWFhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC02MCw2ICs2MCw3IEBACiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3MDAgKENvcmdpKSBTdXBwb3J0IgogCWRlcGVuZHMgUFhBX1NIQVJQU0xfMjV4CiAJc2VsZWN0IFBYQV9TSEFSUF9DN3h4CisJc2VsZWN0IFBYQV9TU1AKIAogY29uZmlnIE1BQ0hfU0hFUEhFUkQKIAlib29sICJFbmFibGUgU2hhcnAgU0wtQzc1MCAoU2hlcGhlcmQpIFN1cHBvcnQiCkBAIC0xMDIsMTIgKzEwMywxOCBAQAogCiBjb25maWcgUFhBX1NIQVJQX0M3eHgKIAlib29sCisJc2VsZWN0IFBYQV9TU1AKIAloZWxwCiAJICBFbmFibGUgc3VwcG9ydCBmb3IgYWxsIFNoYXJwIEM3eHggbW9kZWxzCiAKIGNvbmZpZyBQWEFfU0hBUlBfQ3h4MDAKIAlib29sCisJc2VsZWN0IFBYQV9TU1AKIAloZWxwCiAJICBFbmFibGUgY29tbW9uIHN1cHBvcnQgZm9yIFNoYXJwIEN4eDAwIG1vZGVscwogCitjb25maWcgUFhBX1NTUAorCXRyaXN0YXRlCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBYQTJ4eCBTU1AgcG9ydHMKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDhiYzcyZDAuLmQyMTBiZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0xMSw4ICsxMSw4IEBACiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKSArPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX01BSU5TVE9ORSkgKz0gbWFpbnN0b25lLm8KIG9iai0kKENPTkZJR19BUkNIX1BYQV9JRFApICs9IGlkcC5vCi1vYmotJChDT05GSUdfUFhBX1NIQVJQX0M3eHgpCSs9IGNvcmdpLm8gY29yZ2lfc3NwLm8gY29yZ2lfbGNkLm8gc3NwLm8KLW9iai0kKENPTkZJR19QWEFfU0hBUlBfQ3h4MDApCSs9IHNwaXR6Lm8gY29yZ2lfc3NwLm8gY29yZ2lfbGNkLm8gc3NwLm8KK29iai0kKENPTkZJR19QWEFfU0hBUlBfQzd4eCkJKz0gY29yZ2kubyBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubworb2JqLSQoQ09ORklHX1BYQV9TSEFSUF9DeHgwMCkJKz0gc3BpdHoubyBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX01BQ0hfUE9PRExFKQkrPSBwb29kbGUubwogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkgICAgICAgICArPSB0b3NhLm8KIApAQCAtMjYsNiArMjYsNyBAQAogCiAjIE1pc2MgZmVhdHVyZXMKIG9iai0kKENPTkZJR19QTSkgKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfUFhBX1NTUCkgKz0gc3NwLm8KIAogaWZlcSAoJChDT05GSUdfUFhBMjd4KSx5KQogb2JqLSQoQ09ORklHX1BNKSArPSBzdGFuZGJ5Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKaW5kZXggNTkxZTVmMy4uYjM3MWQ3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCXNzcF9tYWNoaW5mbyA9IG1hY2hpbmZvOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgY29yZ2lfc3NwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0OwogCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlHUERSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgfD0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KTsgIC8qIG91dHB1dCAqLwogCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19hZHM3ODQ2KSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0Nik7ICAgLyogSGlnaCAtIERpc2FibGUgQURTNzg0NiovCiAKLQlyZXQgPSBzc3BfaW5pdCgmY29yZ2lfc3NwX2Rldixzc3BfbWFjaGluZm8tPnBvcnQpOworCXJldCA9IHNzcF9pbml0KCZjb3JnaV9zc3BfZGV2LCBzc3BfbWFjaGluZm8tPnBvcnQsIDApOwogCiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgU1NQIGhhbmRsZXIhXG4iKTsKQEAgLTIxNiwxMyArMjE2LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjb3JnaV9zc3BfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2lfc3NwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3NwX2V4aXQoJmNvcmdpX3NzcF9kZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpX3NzcF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjb3JnaV9zc3Bfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzc3BfZmx1c2goJmNvcmdpX3NzcF9kZXYpOwogCXNzcF9zYXZlX3N0YXRlKCZjb3JnaV9zc3BfZGV2LCZjb3JnaV9zc3Bfc3RhdGUpOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2lfc3NwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpX3NzcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pID0gR1BJT19iaXQoc3NwX21hY2hpbmZvLT5jc19sY2Rjb24pOyAgLyogSGlnaCAtIERpc2FibGUgTENEIENvbnRyb2wvVGltaW5nIEdlbiAqLwogCUdQU1Ioc3NwX21hY2hpbmZvLT5jc19tYXgxMTExKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbWF4MTExMSk7IC8qIEhpZ2ggLSBEaXNhYmxlIE1BWDExMTEqLwpAQCAtMjQxLDE4ICsyNDEsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGNvcmdpc3NwX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY29yZ2ktc3NwIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpc3NwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2lfc3NwX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2lfc3NwX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGNvcmdpX3NzcF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2lfc3NwX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2ktc3NwIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBjb3JnaV9zc3BfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmNvcmdpc3NwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2lzc3BfZHJpdmVyKTsKIH0KIAogYXJjaF9pbml0Y2FsbChjb3JnaV9zc3BfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmggYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsLmgKaW5kZXggMzk3N2E3Ny4uNDg3OWMwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2wuaApAQCAtMzIsMyArMzIsOTAgQEAKIHZvaWQgc3BpdHpfcHV0X2hzeW5jKHZvaWQpOwogdm9pZCBjb3JnaV93YWl0X2hzeW5jKHZvaWQpOwogdm9pZCBzcGl0el93YWl0X2hzeW5jKHZvaWQpOworCisvKgorICogU2hhcnBTTCBCYXR0ZXJ5L1BNIERyaXZlcgorICovCisKK3N0cnVjdCBzaGFycHNsX2NoYXJnZXJfbWFjaGluZm8geworCXZvaWQgKCppbml0KSh2b2lkKTsKKwlpbnQgZ3Bpb19hY2luOworCWludCBncGlvX2JhdGZ1bGw7CisJaW50IGdwaW9fYmF0bG9jazsKKwlpbnQgZ3Bpb19mYXRhbDsKKwlpbnQgKCpzdGF0dXNfYWNpbikodm9pZCk7CisJdm9pZCAoKmRpc2NoYXJnZSkoaW50KTsKKwl2b2lkICgqZGlzY2hhcmdlMSkoaW50KTsKKwl2b2lkICgqY2hhcmdlKShpbnQpOworCXZvaWQgKCpjaGFyZ2VsZWQpKGludCk7CisJdm9pZCAoKm1lYXN1cmVfdGVtcCkoaW50KTsKKwl2b2lkICgqcHJlc3VzcGVuZCkodm9pZCk7CisJdm9pZCAoKnBvc3RzdXNwZW5kKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqY2hhcmdlcl93YWtldXApKHZvaWQpOworCWludCAoKnNob3VsZF93YWtldXApKHVuc2lnbmVkIGludCByZXN1bWVfb25fYWxhcm0pOworCWludCBiYXRfbGV2ZWxzOworCXN0cnVjdCBiYXR0ZXJ5X3RocmVzaCAqYmF0X2xldmVsc19ub2FjOworCXN0cnVjdCBiYXR0ZXJ5X3RocmVzaCAqYmF0X2xldmVsc19hY2luOworCWludCBzdGF0dXNfaGlnaF9hY2luOworCWludCBzdGF0dXNfbG93X2FjaW47CisJaW50IHN0YXR1c19oaWdoX25vYWM7CisJaW50IHN0YXR1c19sb3dfbm9hYzsKK307CisKK3N0cnVjdCBiYXR0ZXJ5X3RocmVzaCB7CisJaW50IHZvbHRhZ2U7CisJaW50IHBlcmNlbnRhZ2U7Cit9OworCitzdHJ1Y3QgYmF0dGVyeV9zdGF0IHsKKwlpbnQgYWNfc3RhdHVzOyAgICAgICAgIC8qIEFQTSBBQyBQcmVzZW50L05vdCBQcmVzZW50ICovCisJaW50IG1haW5iYXRfc3RhdHVzOyAgICAvKiBBUE0gTWFpbiBCYXR0ZXJ5IFN0YXR1cyAqLworCWludCBtYWluYmF0X3BlcmNlbnQ7ICAgLyogTWFpbiBCYXR0ZXJ5IFBlcmNlbnRhZ2UgQ2hhcmdlICovCisJaW50IG1haW5iYXRfdm9sdGFnZTsgICAvKiBNYWluIEJhdHRlcnkgVm9sdGFnZSAqLworfTsKKworc3RydWN0IHNoYXJwc2xfcG1fc3RhdHVzIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHRpbWVyX2xpc3QgYWNfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgY2hyZ19mdWxsX3RpbWVyOworCisJaW50IGNoYXJnZV9tb2RlOworI2RlZmluZSBDSFJHX0VSUk9SICAgICgtMSkKKyNkZWZpbmUgQ0hSR19PRkYgICAgICAoMCkKKyNkZWZpbmUgQ0hSR19PTiAgICAgICAoMSkKKyNkZWZpbmUgQ0hSR19ET05FICAgICAoMikKKworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgU0hBUlBTTF9TVVNQRU5ERUQgICAgICAgKDEgPDwgMCkgIC8qIERldmljZSBpcyBTdXNwZW5kZWQgKi8KKyNkZWZpbmUgU0hBUlBTTF9BTEFSTV9BQ1RJVkUgICAgKDEgPDwgMSkgIC8qIEFsYXJtIGlzIGZvciBjaGFyZ2luZyBldmVudCAobm90IHVzZXIpICovCisjZGVmaW5lIFNIQVJQU0xfQkxfTElNSVQgICAgICAgICgxIDw8IDIpICAvKiBCYWNrbGlnaHQgSW50ZW5zaXR5IExpbWl0ZWQgKi8KKyNkZWZpbmUgU0hBUlBTTF9BUE1fUVVFVUVEICAgICAgKDEgPDwgMykgIC8qIEFQTSBFdmVudCBRdWV1ZWQgKi8KKyNkZWZpbmUgU0hBUlBTTF9ET19PRkZMSU5FX0NIUkcgKDEgPDwgNCkgIC8qIFRyaWdnZXIgdGhlIG9mZmxpbmUgY2hhcmdlciAqLworCisJaW50IGZ1bGxfY291bnQ7CisJdW5zaWduZWQgbG9uZyBjaGFyZ2Vfc3RhcnRfdGltZTsKKwlzdHJ1Y3Qgc2hhcnBzbF9jaGFyZ2VyX21hY2hpbmZvICptYWNoaW5mbzsKKwlzdHJ1Y3QgYmF0dGVyeV9zdGF0IGJhdHRzdGF0OworfTsKKworZXh0ZXJuIHN0cnVjdCBzaGFycHNsX3BtX3N0YXR1cyBzaGFycHNsX3BtOworZXh0ZXJuIHN0cnVjdCBiYXR0ZXJ5X3RocmVzaCBzcGl0el9iYXR0ZXJ5X2xldmVsc19hY2luW107CitleHRlcm4gc3RydWN0IGJhdHRlcnlfdGhyZXNoIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX25vYWNbXTsKKworI2RlZmluZSBSRUFEX0dQSU9fQklUKHgpICAgIChHUExSKHgpICYgR1BJT19iaXQoeCkpCisKKyNkZWZpbmUgU0hBUlBTTF9MRURfRVJST1IgIDIKKyNkZWZpbmUgU0hBUlBTTF9MRURfT04gICAgIDEKKyNkZWZpbmUgU0hBUlBTTF9MRURfT0ZGICAgIDAKKworI2RlZmluZSBDSEFSR0VfT04oKSAgICAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZSgxKQorI2RlZmluZSBDSEFSR0VfT0ZGKCkgICAgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZSgwKQorI2RlZmluZSBDSEFSR0VfTEVEX09OKCkgICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZWxlZChTSEFSUFNMX0xFRF9PTikKKyNkZWZpbmUgQ0hBUkdFX0xFRF9PRkYoKSAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VsZWQoU0hBUlBTTF9MRURfT0ZGKQorI2RlZmluZSBDSEFSR0VfTEVEX0VSUigpICAgIHNoYXJwc2xfcG0ubWFjaGluZm8tPmNoYXJnZWxlZChTSEFSUFNMX0xFRF9FUlJPUikKKyNkZWZpbmUgRElTQ0hBUkdFX09OKCkgICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UoMSkKKyNkZWZpbmUgRElTQ0hBUkdFX09GRigpICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5kaXNjaGFyZ2UoMCkKKyNkZWZpbmUgU1RBVFVTX0FDX0lOICAgICAgICBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfYWNpbigpCisjZGVmaW5lIFNUQVRVU19CQVRUX0xPQ0tFRCAgUkVBRF9HUElPX0JJVChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spCisjZGVmaW5lIFNUQVRVU19DSFJHX0ZVTEwgICAgUkVBRF9HUElPX0JJVChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGZ1bGwpCisjZGVmaW5lIFNUQVRVU19GQVRBTCAgICAgICAgUkVBRF9HUElPX0JJVChzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOWU4NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKQEAgLTAsMCArMSw5OTIgQEAKKy8qCisgKiBCYXR0ZXJ5IGFuZCBQb3dlciBNYW5hZ2VtZW50IGNvZGUgZm9yIHRoZSBTaGFycCBTTC1DN3h4IGFuZCBTTC1DeHgwMAorICogc2VyaWVzIG9mIFBEQXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBSaWNoYXJkIFB1cmRpZQorICoKKyAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBTaGFycCBmb3IgMi40IGtlcm5lbHMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zY29vcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcG0uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9zaGFycHNsLmg+CisjaW5jbHVkZSAic2hhcnBzbC5oIgorCisvKgorICogQ29uc3RhbnRzCisgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVElNRV9JTlRFUlZBTCAgICAgICAgKG1zZWNzX3RvX2ppZmZpZXMoMSo2MCoxMDAwKSkgIC8qIDEgbWluICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX0ZJTklTSF9USU1FICAgICAgICAgICAgIChtc2Vjc190b19qaWZmaWVzKDEwKjYwKjEwMDApKSAvKiAxMCBtaW4gKi8KKyNkZWZpbmUgU0hBUlBTTF9CQVRDSEtfVElNRSAgICAgICAgICAgICAgICAgICAgKG1zZWNzX3RvX2ppZmZpZXMoMTUqMTAwMCkpICAgIC8qIDE1IHNlYyAqLworI2RlZmluZSBTSEFSUFNMX0JBVENIS19USU1FX1NVU1BFTkQgICAgICAgICAgICAoNjAqMTApICAgICAgICAgICAgICAgICAgICAgICAgLyogMTAgbWluICovCisjZGVmaW5lIFNIQVJQU0xfV0FJVF9DT19USU1FICAgICAgICAgICAgICAgICAgIDE1ICAvKiAxNSBzZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9XQUlUX0RJU0NIQVJHRV9PTiAgICAgICAgICAgICAgMTAwIC8qIDEwMCBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVEVNUCAgIDEwICAvKiAxMCBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVk9MVCAgIDEwICAvKiAxMCBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfSktWQUQgIDEwICAvKiAxMCBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSAgICAgICAgICAgICAgIDE1ICAvKiAxNSBtc2VjICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX0NPX0NIRUNLX1RJTUUgICAgICAgICAgIDUgICAvKiA1IG1zZWMgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfUkVUUllfQ05UICAgICAgICAgICAgICAgMSAgIC8qIGVxdi4gMTAgbWluICovCisKKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVk9MVCAgICAgICAgIDB4OTkgIC8qIDIuOVYgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fVEVNUCAgICAgICAgIDB4ZTAgIC8qIDIuOVYgKi8KKyNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfT05fSktWQURfSElHSCAgIDB4OWIgIC8qIDZWICovCisjZGVmaW5lIFNIQVJQU0xfQ0hBUkdFX09OX0pLVkFEX0xPVyAgICAweDM0ICAvKiAyViAqLworI2RlZmluZSBTSEFSUFNMX0ZBVEFMX0FDSU5fVk9MVCAgICAgICAgMTgyICAgLyogMy40NVYgKi8KKyNkZWZpbmUgU0hBUlBTTF9GQVRBTF9OT0FDSU5fVk9MVCAgICAgIDE3MCAgIC8qIDMuNDBWICovCisKK3N0cnVjdCBiYXR0ZXJ5X3RocmVzaCBzcGl0el9iYXR0ZXJ5X2xldmVsc19hY2luW10gPSB7CisJeyAyMTMsIDEwMH0sCisJeyAyMTIsICA5OH0sCisJeyAyMTEsICA5NX0sCisJeyAyMTAsICA5M30sCisJeyAyMDksICA5MH0sCisJeyAyMDgsICA4OH0sCisJeyAyMDcsICA4NX0sCisJeyAyMDYsICA4M30sCisJeyAyMDUsICA4MH0sCisJeyAyMDQsICA3OH0sCisJeyAyMDMsICA3NX0sCisJeyAyMDIsICA3M30sCisJeyAyMDEsICA3MH0sCisJeyAyMDAsICA2OH0sCisJeyAxOTksICA2NX0sCisJeyAxOTgsICA2M30sCisJeyAxOTcsICA2MH0sCisJeyAxOTYsICA1OH0sCisJeyAxOTUsICA1NX0sCisJeyAxOTQsICA1M30sCisJeyAxOTMsICA1MH0sCisJeyAxOTIsICA0OH0sCisJeyAxOTIsICA0NX0sCisJeyAxOTEsICA0M30sCisJeyAxOTEsICA0MH0sCisJeyAxOTAsICAzOH0sCisJeyAxOTAsICAzNX0sCisJeyAxODksICAzM30sCisJeyAxODgsICAzMH0sCisJeyAxODcsICAyOH0sCisJeyAxODYsICAyNX0sCisJeyAxODUsICAyM30sCisJeyAxODQsICAyMH0sCisJeyAxODMsICAxOH0sCisJeyAxODIsICAxNX0sCisJeyAxODEsICAxM30sCisJeyAxODAsICAxMH0sCisJeyAxNzksICAgOH0sCisJeyAxNzgsICAgNX0sCisJeyAgIDAsICAgMH0sCit9OworCitzdHJ1Y3QgYmF0dGVyeV90aHJlc2ggIHNwaXR6X2JhdHRlcnlfbGV2ZWxzX25vYWNbXSA9IHsKKwl7IDIxMywgMTAwfSwKKwl7IDIxMiwgIDk4fSwKKwl7IDIxMSwgIDk1fSwKKwl7IDIxMCwgIDkzfSwKKwl7IDIwOSwgIDkwfSwKKwl7IDIwOCwgIDg4fSwKKwl7IDIwNywgIDg1fSwKKwl7IDIwNiwgIDgzfSwKKwl7IDIwNSwgIDgwfSwKKwl7IDIwNCwgIDc4fSwKKwl7IDIwMywgIDc1fSwKKwl7IDIwMiwgIDczfSwKKwl7IDIwMSwgIDcwfSwKKwl7IDIwMCwgIDY4fSwKKwl7IDE5OSwgIDY1fSwKKwl7IDE5OCwgIDYzfSwKKwl7IDE5NywgIDYwfSwKKwl7IDE5NiwgIDU4fSwKKwl7IDE5NSwgIDU1fSwKKwl7IDE5NCwgIDUzfSwKKwl7IDE5MywgIDUwfSwKKwl7IDE5MiwgIDQ4fSwKKwl7IDE5MSwgIDQ1fSwKKwl7IDE5MCwgIDQzfSwKKwl7IDE4OSwgIDQwfSwKKwl7IDE4OCwgIDM4fSwKKwl7IDE4NywgIDM1fSwKKwl7IDE4NiwgIDMzfSwKKwl7IDE4NSwgIDMwfSwKKwl7IDE4NCwgIDI4fSwKKwl7IDE4MywgIDI1fSwKKwl7IDE4MiwgIDIzfSwKKwl7IDE4MSwgIDIwfSwKKwl7IDE4MCwgIDE4fSwKKwl7IDE3OSwgIDE1fSwKKwl7IDE3OCwgIDEzfSwKKwl7IDE3NywgIDEwfSwKKwl7IDE3NiwgICA4fSwKKwl7IDE3NSwgICA1fSwKKwl7ICAgMCwgICAwfSwKK307CisKKy8qIE1BWDExMTEgQ29tbWFuZHMgKi8KKyNkZWZpbmUgTUFYQ1RSTF9QRDAgICAgICAxdSA8PCAwCisjZGVmaW5lIE1BWENUUkxfUEQxICAgICAgMXUgPDwgMQorI2RlZmluZSBNQVhDVFJMX1NHTCAgICAgIDF1IDw8IDIKKyNkZWZpbmUgTUFYQ1RSTF9VTkkgICAgICAxdSA8PCAzCisjZGVmaW5lIE1BWENUUkxfU0VMX1NIICAgNAorI2RlZmluZSBNQVhDVFJMX1NUUiAgICAgIDF1IDw8IDcKKworLyogTUFYMTExMSBDaGFubmVsIERlZmluaXRpb25zICovCisjZGVmaW5lIEJBVFRfQUQgICAgNHUKKyNkZWZpbmUgQkFUVF9USE0gICAydQorI2RlZmluZSBKS19WQUQgICAgIDZ1CisKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworc3RhdGljIGludCBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkodm9pZCk7CitzdGF0aWMgaW50IHNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KHZvaWQpOworc3RhdGljIGludCBzaGFycHNsX2NoZWNrX2JhdHRlcnkoaW50IG1vZGUpOworc3RhdGljIGludCBzaGFycHNsX2FjX2NoZWNrKHZvaWQpOworc3RhdGljIGludCBzaGFycHNsX2ZhdGFsX2NoZWNrKHZvaWQpOworc3RhdGljIGludCBzaGFycHNsX2F2ZXJhZ2VfdmFsdWUoaW50IGFkKTsKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYXZlcmFnZV9jbGVhcih2b2lkKTsKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX3RvZ2dsZSh2b2lkICpwcml2YXRlXyk7CitzdGF0aWMgdm9pZCBzaGFycHNsX2JhdHRlcnlfdGhyZWFkKHZvaWQgKnByaXZhdGVfKTsKKworCisvKgorICogVmFyaWFibGVzCisgKi8KK3N0cnVjdCBzaGFycHNsX3BtX3N0YXR1cyBzaGFycHNsX3BtOworREVDTEFSRV9XT1JLKHRvZ2dsZV9jaGFyZ2VyLCBzaGFycHNsX2NoYXJnZV90b2dnbGUsIE5VTEwpOworREVDTEFSRV9XT1JLKHNoYXJwc2xfYmF0LCBzaGFycHNsX2JhdHRlcnlfdGhyZWFkLCBOVUxMKTsKKworCitzdGF0aWMgaW50IGdldF9wZXJjZW50YWdlKGludCB2b2x0YWdlKQoreworCWludCBpID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVscyAtIDE7CisJc3RydWN0IGJhdHRlcnlfdGhyZXNoICp0aHJlc2g7CisKKwlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQl0aHJlc2g9c2hhcnBzbF9wbS5tYWNoaW5mby0+YmF0X2xldmVsc19hY2luOworCWVsc2UKKwkJdGhyZXNoPXNoYXJwc2xfcG0ubWFjaGluZm8tPmJhdF9sZXZlbHNfbm9hYzsKKworCXdoaWxlIChpID4gMCAmJiAodm9sdGFnZSA+IHRocmVzaFtpXS52b2x0YWdlKSkKKwkJaS0tOworCisJcmV0dXJuIHRocmVzaFtpXS5wZXJjZW50YWdlOworfQorCitzdGF0aWMgaW50IGdldF9hcG1fc3RhdHVzKGludCB2b2x0YWdlKQoreworCWludCBsb3dfdGhyZXNoLCBoaWdoX3RocmVzaDsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pIHsKKwkJaGlnaF90aHJlc2ggPSBzaGFycHNsX3BtLm1hY2hpbmZvLT5zdGF0dXNfaGlnaF9hY2luOworCQlsb3dfdGhyZXNoID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2xvd19hY2luOworCX0gZWxzZSB7CisJCWhpZ2hfdGhyZXNoID0gc2hhcnBzbF9wbS5tYWNoaW5mby0+c3RhdHVzX2hpZ2hfbm9hYzsKKwkJbG93X3RocmVzaCA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPnN0YXR1c19sb3dfbm9hYzsKKwl9CisKKwlpZiAodm9sdGFnZSA+PSBoaWdoX3RocmVzaCkKKwkJcmV0dXJuIEFQTV9CQVRURVJZX1NUQVRVU19ISUdIOworCWlmICh2b2x0YWdlID49IGxvd190aHJlc2gpCisJCXJldHVybiBBUE1fQkFUVEVSWV9TVEFUVVNfTE9XOworCXJldHVybiBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUw7Cit9CisKK3ZvaWQgc2hhcnBzbF9iYXR0ZXJ5X2tpY2sodm9pZCkKK3sKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNoYXJwc2xfYmF0LCBtc2Vjc190b19qaWZmaWVzKDEyNSkpOworfQorRVhQT1JUX1NZTUJPTChzaGFycHNsX2JhdHRlcnlfa2ljayk7CisKKworc3RhdGljIHZvaWQgc2hhcnBzbF9iYXR0ZXJ5X3RocmVhZCh2b2lkICpwcml2YXRlXykKK3sKKwlpbnQgdm9sdGFnZSwgcGVyY2VudCwgYXBtX3N0YXR1cywgaSA9IDA7CisKKwlpZiAoIXNoYXJwc2xfcG0ubWFjaGluZm8pCisJCXJldHVybjsKKworCXNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzID0gKCEoU1RBVFVTX0FDX0lOKSA/IEFQTV9BQ19PRkZMSU5FIDogQVBNX0FDX09OTElORSk7CisKKwkvKiBDb3JnaSBjYW5ub3QgY29uZmlybSB3aGVuIGJhdHRlcnkgZnVsbHkgY2hhcmdlZCBzbyBwZXJpb2RpY2FsbHkga2ljayEgKi8KKwlpZiAobWFjaGluZV9pc19jb3JnaSgpICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCQkmJiB0aW1lX2FmdGVyKGppZmZpZXMsIHNoYXJwc2xfcG0uY2hhcmdlX3N0YXJ0X3RpbWUgKyAgU0hBUlBTTF9DSEFSR0VfT05fVElNRV9JTlRFUlZBTCkpCisJCXNjaGVkdWxlX3dvcmsoJnRvZ2dsZV9jaGFyZ2VyKTsKKworCXdoaWxlKDEpIHsKKwkJdm9sdGFnZSA9IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSgpOworCQlpZiAodm9sdGFnZSA+IDApIGJyZWFrOworCQlpZiAoaSsrID4gNSkgeworCQkJdm9sdGFnZSA9IHNoYXJwc2xfcG0ubWFjaGluZm8tPmJhdF9sZXZlbHNfbm9hY1swXS52b2x0YWdlOworCQkJZGV2X3dhcm4oc2hhcnBzbF9wbS5kZXYsICJXYXJuaW5nOiBDYW5ub3QgcmVhZCBtYWluIGJhdHRlcnkhXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJdm9sdGFnZSA9IHNoYXJwc2xfYXZlcmFnZV92YWx1ZSh2b2x0YWdlKTsKKwlhcG1fc3RhdHVzID0gZ2V0X2FwbV9zdGF0dXModm9sdGFnZSk7CisJcGVyY2VudCA9IGdldF9wZXJjZW50YWdlKHZvbHRhZ2UpOworCisJLyogQXQgbG93IGJhdHRlcnkgdm9sdGFnZXMsIHRoZSB2b2x0YWdlIGhhcyBhIHRlbmRlbmN5IHRvIHN0YXJ0CisgICAgICAgICAgIGNyZWVwaW5nIGJhY2sgdXAgc28gd2UgdHJ5IHRvIGF2b2lkIHRoaXMgaGVyZSAqLworCWlmICgoc2hhcnBzbF9wbS5iYXR0c3RhdC5hY19zdGF0dXMgPT0gQVBNX0FDX09OTElORSkgfHwgKGFwbV9zdGF0dXMgPT0gQVBNX0JBVFRFUllfU1RBVFVTX0hJR0gpIHx8ICBwZXJjZW50IDw9IHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50KSB7CisJCXNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF92b2x0YWdlID0gdm9sdGFnZTsKKwkJc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9IGFwbV9zdGF0dXM7CisJCXNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50ID0gcGVyY2VudDsKKwl9CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQmF0dGVyeTogdm9sdGFnZTogJWQsIHN0YXR1czogJWQsIHBlcmNlbnRhZ2U6ICVkLCB0aW1lOiAlZFxuIiwgdm9sdGFnZSwKKwkJCXNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXMsIHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50LCBqaWZmaWVzKTsKKworCS8qIElmIGJhdHRlcnkgaXMgbG93LiBsaW1pdCBiYWNrbGlnaHQgaW50ZW5zaXR5IHRvIHNhdmUgcG93ZXIuICovCisJaWYgKChzaGFycHNsX3BtLmJhdHRzdGF0LmFjX3N0YXR1cyAhPSBBUE1fQUNfT05MSU5FKQorCQkJJiYgKChzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzID09IEFQTV9CQVRURVJZX1NUQVRVU19MT1cpIHx8CisJCQkoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUwpKSkgeworCQlpZiAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9CTF9MSU1JVCkpIHsKKwkJCWNvcmdpYmxfbGltaXRfaW50ZW5zaXR5KDEpOworCQkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0JMX0xJTUlUOworCQl9CisJfSBlbHNlIGlmIChzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9CTF9MSU1JVCkgeworCQljb3JnaWJsX2xpbWl0X2ludGVuc2l0eSgwKTsKKwkJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9CTF9MSU1JVDsKKwl9CisKKwkvKiBTdXNwZW5kIGlmIGNyaXRpY2FsIGJhdHRlcnkgbGV2ZWwgKi8KKwlpZiAoKHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzICE9IEFQTV9BQ19PTkxJTkUpCisJCQkmJiAoc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3N0YXR1cyA9PSBBUE1fQkFUVEVSWV9TVEFUVVNfQ1JJVElDQUwpCisJCQkmJiAhKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0FQTV9RVUVVRUQpKSB7CisJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9BUE1fUVVFVUVEOworCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiRmF0YWwgT2ZmXG4iKTsKKwkJYXBtX3F1ZXVlX2V2ZW50KEFQTV9DUklUSUNBTF9TVVNQRU5EKTsKKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNoYXJwc2xfYmF0LCBTSEFSUFNMX0JBVENIS19USU1FKTsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaGFyZ2Vfb24odm9pZCkKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVHVybmluZyBDaGFyZ2VyIE9uXG4iKTsKKworCXNoYXJwc2xfcG0uZnVsbF9jb3VudCA9IDA7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT047CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0b2dnbGVfY2hhcmdlciwgbXNlY3NfdG9famlmZmllcygyNTApKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnNoYXJwc2xfYmF0LCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX2NoYXJnZV9vZmYodm9pZCkKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVHVybmluZyBDaGFyZ2VyIE9mZlxuIik7CisKKwlDSEFSR0VfT0ZGKCk7CisJQ0hBUkdFX0xFRF9PRkYoKTsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PRkY7CisKKwlzY2hlZHVsZV93b3JrKCZzaGFycHNsX2JhdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX2Vycm9yKHZvaWQpCit7CisJQ0hBUkdFX0xFRF9FUlIoKTsKKwlDSEFSR0VfT0ZGKCk7CisJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfRVJST1I7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfY2hhcmdlX3RvZ2dsZSh2b2lkICpwcml2YXRlXykKK3sKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiVG9vZ2xpbmcgQ2hhcmdlciBhdCB0aW1lOiAlbHhcbiIsIGppZmZpZXMpOworCisJaWYgKFNUQVRVU19BQ19JTiA9PSAwKSB7CisJCXNoYXJwc2xfY2hhcmdlX29mZigpOworCQlyZXR1cm47CisJfSBlbHNlIGlmICgoc2hhcnBzbF9jaGVja19iYXR0ZXJ5KDEpIDwgMCkgfHwgKHNoYXJwc2xfYWNfY2hlY2soKSA8IDApKSB7CisJCXNoYXJwc2xfY2hhcmdlX2Vycm9yKCk7CisJCXJldHVybjsKKwl9CisKKwlDSEFSR0VfTEVEX09OKCk7CisJQ0hBUkdFX09GRigpOworCW1kZWxheShTSEFSUFNMX0NIQVJHRV9XQUlUX1RJTUUpOworCUNIQVJHRV9PTigpOworCisJc2hhcnBzbF9wbS5jaGFyZ2Vfc3RhcnRfdGltZSA9IGppZmZpZXM7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYWNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBhY2luID0gU1RBVFVTX0FDX0lOOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkFDIFN0YXR1czogJWRcbiIsYWNpbik7CisKKwlzaGFycHNsX2F2ZXJhZ2VfY2xlYXIoKTsKKwlpZiAoYWNpbiAmJiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSAhPSBDSFJHX09OKSkKKwkJc2hhcnBzbF9jaGFyZ2Vfb24oKTsKKwllbHNlIGlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pCisJCXNoYXJwc2xfY2hhcmdlX29mZigpOworCisJc2NoZWR1bGVfd29yaygmc2hhcnBzbF9iYXQpOworfQorCisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaGFycHNsX2FjX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpmcCkKK3sKKwkvKiBEZWxheSB0aGUgZXZlbnQgc2xpZ2h0bHkgdG8gZGVib3VuY2UgKi8KKwkvKiBNdXN0IGJlIGEgc21hbGxlciBkZWxheSB0aGFuIHRoZSBjaHJnX2Z1bGxfaXNyIGJlbG93ICovCisJbW9kX3RpbWVyKCZzaGFycHNsX3BtLmFjX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgc2hhcnBzbF9jaHJnX2Z1bGxfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbCBhdCB0aW1lOiAlbHhcbiIsIGppZmZpZXMpOworCisJc2hhcnBzbF9wbS5mdWxsX2NvdW50Kys7CisKKwlpZiAoU1RBVFVTX0FDX0lOID09IDApIHsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsOiBBQyByZW1vdmVkIC0gc3RvcCBjaGFyZ2luZyFcbiIpOworCQlpZiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKQorCQkJc2hhcnBzbF9jaGFyZ2Vfb2ZmKCk7CisJfSBlbHNlIGlmIChzaGFycHNsX3BtLmZ1bGxfY291bnQgPCAyKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJDaGFyZ2UgRnVsbDogQ291bnQgdG9vIGxvd1xuIik7CisJCXNjaGVkdWxlX3dvcmsoJnRvZ2dsZV9jaGFyZ2VyKTsKKwl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc2hhcnBzbF9wbS5jaGFyZ2Vfc3RhcnRfdGltZSArIFNIQVJQU0xfQ0hBUkdFX0ZJTklTSF9USU1FKSkgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIEZ1bGw6IEludGVycnVwdCBnZW5lcmF0ZWQgdG9vIHNsb3dseSAtIHJldHJ5LlxuIik7CisJCXNjaGVkdWxlX3dvcmsoJnRvZ2dsZV9jaGFyZ2VyKTsKKwl9IGVsc2UgeworCQlzaGFycHNsX2NoYXJnZV9vZmYoKTsKKwkJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfRE9ORTsKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkNoYXJnZSBGdWxsOiBDaGFyZ2luZyBGaW5pc2hlZFxuIik7CisJfQorfQorCisvKiBDaGFyZ2luZyBGaW5pc2hlZCBJbnRlcnJ1cHQgKE5vdCBwcmVzZW50IG9uIENvcmdpKSAqLworLyogQ2FuIHRyaWdnZXIgYXQgdGhlIHNhbWUgdGltZSBhcyBhbiBBQyBzdGF1cyBjaGFuZ2Ugc28KKyAgIGRlbGF5IHVudGlsIGFmdGVyIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWlmIChzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9TVVNQRU5ERUQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCS8qIGRlbGF5IHVudGlsIGFmdGVyIGFueSBhYyBpbnRlcnJ1cHQgKi8KKwltb2RfdGltZXIoJnNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoYXJwc2xfZmF0YWxfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKQoreworCWludCBpc19mYXRhbCA9IDA7CisKKwlpZiAoU1RBVFVTX0JBVFRfTE9DS0VEID09IDApIHsKKwkJZGV2X2VycihzaGFycHNsX3BtLmRldiwgIkJhdHRlcnkgbm93IFVubG9ja2VkISBTdXNwZW5kaW5nLlxuIik7CisJCWlzX2ZhdGFsID0gMTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCAmJiAoU1RBVFVTX0ZBVEFMID09IDApKSB7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJGYXRhbCBCYXR0IEVycm9yISBTdXNwZW5kaW5nLlxuIik7CisJCWlzX2ZhdGFsID0gMTsKKwl9CisKKwlpZiAoIShzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9BUE1fUVVFVUVEKSAmJiBpc19mYXRhbCkgeworCQlzaGFycHNsX3BtLmZsYWdzIHw9IFNIQVJQU0xfQVBNX1FVRVVFRDsKKwkJYXBtX3F1ZXVlX2V2ZW50KEFQTV9DUklUSUNBTF9TVVNQRU5EKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBNYWludGFpbiBhbiBhdmVyYWdlIG9mIHRoZSBsYXN0IDEwIHJlYWRpbmdzCisgKi8KKyNkZWZpbmUgU0hBUlBTTF9DTlZfVkFMVUVfTlVNICAgIDEwCitzdGF0aWMgaW50IHNoYXJwc2xfYWRfaW5kZXg7CisKK3N0YXRpYyB2b2lkIHNoYXJwc2xfYXZlcmFnZV9jbGVhcih2b2lkKQoreworCXNoYXJwc2xfYWRfaW5kZXggPSAwOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfYXZlcmFnZV92YWx1ZShpbnQgYWQpCit7CisJaW50IGksIGFkX3ZhbCA9IDA7CisJc3RhdGljIGludCBzaGFycHNsX2FkW1NIQVJQU0xfQ05WX1ZBTFVFX05VTSsxXTsKKworCWlmIChzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfc3RhdHVzICE9IEFQTV9CQVRURVJZX1NUQVRVU19ISUdIKSB7CisJCXNoYXJwc2xfYWRfaW5kZXggPSAwOworCQlyZXR1cm4gYWQ7CisJfQorCisJc2hhcnBzbF9hZFtzaGFycHNsX2FkX2luZGV4XSA9IGFkOworCXNoYXJwc2xfYWRfaW5kZXgrKzsKKwlpZiAoc2hhcnBzbF9hZF9pbmRleCA+PSBTSEFSUFNMX0NOVl9WQUxVRV9OVU0pIHsKKwkJZm9yIChpPTA7IGkgPCAoU0hBUlBTTF9DTlZfVkFMVUVfTlVNLTEpOyBpKyspCisJCQlzaGFycHNsX2FkW2ldID0gc2hhcnBzbF9hZFtpKzFdOworCQlzaGFycHNsX2FkX2luZGV4ID0gU0hBUlBTTF9DTlZfVkFMVUVfTlVNIC0gMTsKKwl9CisJZm9yIChpPTA7IGkgPCBzaGFycHNsX2FkX2luZGV4OyBpKyspCisJCWFkX3ZhbCArPSBzaGFycHNsX2FkW2ldOworCisJcmV0dXJuIChhZF92YWwgLyBzaGFycHNsX2FkX2luZGV4KTsKK30KKworCisvKgorICogUmVhZCBNQVgxMTExIEFEQworICovCitzdGF0aWMgaW50IHJlYWRfbWF4MTExMShpbnQgY2hhbm5lbCkKK3sKKwlyZXR1cm4gY29yZ2lfc3NwX21heDExMTFfZ2V0KChjaGFubmVsIDw8IE1BWENUUkxfU0VMX1NIKSB8IE1BWENUUkxfUEQwIHwgTUFYQ1RSTF9QRDEKKwkJCXwgTUFYQ1RSTF9TR0wgfCBNQVhDVFJMX1VOSSB8IE1BWENUUkxfU1RSKTsKK30KKworc3RhdGljIGludCBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkodm9pZCkKK3sKKwlyZXR1cm4gcmVhZF9tYXgxMTExKEJBVFRfQUQpOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9UZW1wKHZvaWQpCit7CisJaW50IHRlbXA7CisKKwlzaGFycHNsX3BtLm1hY2hpbmZvLT5tZWFzdXJlX3RlbXAoMSk7CisKKwltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9URU1QKTsKKwl0ZW1wID0gcmVhZF9tYXgxMTExKEJBVFRfVEhNKTsKKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPm1lYXN1cmVfdGVtcCgwKTsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcmVhZF9qa3ZhZCh2b2lkKQoreworCXJldHVybiByZWFkX21heDExMTEoSktfVkFEKTsKK30KKworLyoKKyAqIFRha2UgYW4gYXJyYXkgb2YgNSBpbnRlZ2VycywgcmVtb3ZlIHRoZSBtYXhpbXVtIGFuZCBtaW5pbXVtIHZhbHVlcworICogYW5kIHJldHVybiB0aGUgYXZlcmFnZS4KKyAqLworc3RhdGljIGludCBnZXRfc2VsZWN0X3ZhbChpbnQgKnZhbCkKK3sKKwlpbnQgaSwgaiwgaywgdGVtcCwgc3VtID0gMDsKKworCS8qIEZpbmQgTUFYIHZhbCAqLworCXRlbXAgPSB2YWxbMF07CisJaj0wOworCWZvciAoaT0xOyBpPDU7IGkrKykgeworCQlpZiAodGVtcCA8IHZhbFtpXSkgeworCQkJdGVtcCA9IHZhbFtpXTsKKwkJCWogPSBpOworCQl9CisJfQorCisJLyogRmluZCBNSU4gdmFsICovCisJdGVtcCA9IHZhbFs0XTsKKwlrPTQ7CisJZm9yIChpPTM7IGk+PTA7IGktLSkgeworCQlpZiAodGVtcCA+IHZhbFtpXSkgeworCQkJdGVtcCA9IHZhbFtpXTsKKwkJCWsgPSBpOworCQl9CisJfQorCisJZm9yIChpPTA7IGk8NTsgaSsrKQorCQlpZiAoaSAhPSBqICYmIGkgIT0gayApCisJCQlzdW0gKz0gdmFsW2ldOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkF2ZXJhZ2U6ICVkIGZyb20gdmFsdWVzOiAlZCwgJWQsICVkLCAlZCwgJWRcbiIsIHN1bS8zLCB2YWxbMF0sIHZhbFsxXSwgdmFsWzJdLCB2YWxbM10sIHZhbFs0XSk7CisKKwlyZXR1cm4gKHN1bS8zKTsKK30KKworLyogIG1vZGUgMCAtIENoZWNrIHRlbXBlcmF0dXJlIGFuZCB2b2x0YWdlCisgKiAgICAgICAxIC0gQ2hlY2sgdGVtcGVyYXR1cmUgb25seSAqLworc3RhdGljIGludCBzaGFycHNsX2NoZWNrX2JhdHRlcnkoaW50IG1vZGUpCit7CisJaW50IHZhbCwgaSwgYnVmZls1XTsKKworCS8qIENoZWNrIGJhdHRlcnkgdGVtcGVyYXR1cmUgKi8KKwlmb3IgKGk9MDsgaTw1OyBpKyspIHsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVEVNUCk7CisJCWJ1ZmZbaV0gPSBzaGFycHNsX3JlYWRfVGVtcCgpOworCX0KKworCXZhbCA9IGdldF9zZWxlY3RfdmFsKGJ1ZmYpOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlRlbXBlcmF0dXJlOiAlZFxuIiwgdmFsKTsKKwlpZiAodmFsID4gU0hBUlBTTF9DSEFSR0VfT05fVEVNUCkKKwkJcmV0dXJuIC0xOworCWlmIChtb2RlID09IDEpCisJCXJldHVybiAwOworCisJLyogZGlzYWJsZSBjaGFyZ2UsIGVuYWJsZSBkaXNjaGFyZ2UgKi8KKwlDSEFSR0VfT0ZGKCk7CisJRElTQ0hBUkdFX09OKCk7CisJbWRlbGF5KFNIQVJQU0xfV0FJVF9ESVNDSEFSR0VfT04pOworCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEpCisJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEoMSk7CisKKwkvKiBDaGVjayBiYXR0ZXJ5IHZvbHRhZ2UgKi8KKwlmb3IgKGk9MDsgaTw1OyBpKyspIHsKKwkJYnVmZltpXSA9IHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSgpOworCQltZGVsYXkoU0hBUlBTTF9DSEVDS19CQVRURVJZX1dBSVRfVElNRV9WT0xUKTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgwKTsKKworCURJU0NIQVJHRV9PRkYoKTsKKworCXZhbCA9IGdldF9zZWxlY3RfdmFsKGJ1ZmYpOworCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJCYXR0ZXJ5IFZvbHRhZ2U6ICVkXG4iLCB2YWwpOworCisJaWYgKHZhbCA8IFNIQVJQU0xfQ0hBUkdFX09OX1ZPTFQpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfYWNfY2hlY2sodm9pZCkKK3sKKwlpbnQgdGVtcCwgaSwgYnVmZls1XTsKKworCWZvciAoaT0wOyBpPDU7IGkrKykgeworCQlidWZmW2ldID0gc2hhcnBzbF9yZWFkX2prdmFkKCk7CisJCW1kZWxheShTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX0pLVkFEKTsKKwl9CisKKwl0ZW1wID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIkFDIFZvbHRhZ2U6ICVkXG4iLHRlbXApOworCisJaWYgKCh0ZW1wID4gU0hBUlBTTF9DSEFSR0VfT05fSktWQURfSElHSCkgfHwgKHRlbXAgPCBTSEFSUFNMX0NIQVJHRV9PTl9KS1ZBRF9MT1cpKSB7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJFcnJvcjogQUMgY2hlY2sgZmFpbGVkLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzaGFycHNsX3BtX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX1NVU1BFTkRFRDsKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJc2hhcnBzbF9wbS5mbGFncyB8PSBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRzsKKwllbHNlCisJCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfRE9fT0ZGTElORV9DSFJHOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBzbF9wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIENsZWFyIHRoZSByZXNldCBzb3VyY2UgaW5kaWNhdG9ycyBhcyB0aGV5IGJyZWFrIHRoZSBib290bG9hZGVyIHVwb24gcmVib290ICovCisJUkNTUiA9IDB4MGY7CisJc2hhcnBzbF9hdmVyYWdlX2NsZWFyKCk7CisJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9BUE1fUVVFVUVEOworCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfU1VTUEVOREVEOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvcmdpX2dvdG9fc2xlZXAodW5zaWduZWQgbG9uZyBhbGFybV90aW1lLCB1bnNpZ25lZCBpbnQgYWxhcm1fZW5hYmxlLCBzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlRpbWUgaXM6ICUwOHhcbiIsUkNOUik7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2UgQWN0aXZhdGUgPSAlZFxuIixzaGFycHNsX3BtLmZsYWdzICYgU0hBUlBTTF9ET19PRkZMSU5FX0NIUkcpOworCS8qIG5vdCBjaGFyZ2luZyBhbmQgQUMtSU4hICovCisKKwlpZiAoKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0RPX09GRkxJTkVfQ0hSRykgJiYgKFNUQVRVU19BQ19JTiAhPSAwKSkgeworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQWN0aXZhdGluZyBPZmZsaW5lIENoYXJnZXIuLi5cbiIpOworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PRkY7CisJCXNoYXJwc2xfcG0uZmxhZ3MgJj0gflNIQVJQU0xfRE9fT0ZGTElORV9DSFJHOworCQlzaGFycHNsX29mZl9jaGFyZ2VfYmF0dGVyeSgpOworCX0KKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPnByZXN1c3BlbmQoKTsKKworCVBFRFIgPSAweGZmZmZmZmZmOyAvKiBjbGVhciBpdCAqLworCisJc2hhcnBzbF9wbS5mbGFncyAmPSB+U0hBUlBTTF9BTEFSTV9BQ1RJVkU7CisJaWYgKChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pICYmICgoYWxhcm1fZW5hYmxlICYmICgoYWxhcm1fdGltZSAtIFJDTlIpID4gKFNIQVJQU0xfQkFUQ0hLX1RJTUVfU1VTUEVORCArIDMwKSkpIHx8ICFhbGFybV9lbmFibGUpKSB7CisJCVJUU1IgJj0gUlRTUl9BTEU7CisJCVJUQVIgPSBSQ05SICsgU0hBUlBTTF9CQVRDSEtfVElNRV9TVVNQRU5EOworCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdpbmcgYWxhcm0gYXQ6ICUwOHhcbiIsUlRBUik7CisJCXNoYXJwc2xfcG0uZmxhZ3MgfD0gU0hBUlBTTF9BTEFSTV9BQ1RJVkU7CisJfSBlbHNlIGlmIChhbGFybV9lbmFibGUpIHsKKwkJUlRTUiAmPSBSVFNSX0FMRTsKKwkJUlRBUiA9IGFsYXJtX3RpbWU7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJVc2VyIGFsYXJtIGF0OiAlMDh4XG4iLFJUQVIpOworCX0gZWxzZSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJObyBhbGFybXMgc2V0LlxuIik7CisJfQorCisJcHhhX3BtX2VudGVyKHN0YXRlKTsKKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPnBvc3RzdXNwZW5kKCk7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ29yZ2kgd29rZW4gdXAgZnJvbSBzdXNwZW5kOiAlMDh4XG4iLFBFRFIpOworfQorCitzdGF0aWMgaW50IGNvcmdpX2VudGVyX3N1c3BlbmQodW5zaWduZWQgbG9uZyBhbGFybV90aW1lLCB1bnNpZ25lZCBpbnQgYWxhcm1fZW5hYmxlLCBzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJaWYgKCFzaGFycHNsX3BtLm1hY2hpbmZvLT5zaG91bGRfd2FrZXVwKCEoc2hhcnBzbF9wbS5mbGFncyAmIFNIQVJQU0xfQUxBUk1fQUNUSVZFKSAmJiBhbGFybV9lbmFibGUpICkKKwl7CisJCWlmICghKHNoYXJwc2xfcG0uZmxhZ3MgJiBTSEFSUFNMX0FMQVJNX0FDVElWRSkpIHsKKwkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJObyB1c2VyIHRyaWdnZXJlZCB3YWtldXAgZXZlbnRzIGFuZCBub3QgY2hhcmdpbmcuIFN0cmFuZ2UuIFN1c3BlbmQuXG4iKTsKKwkJCWNvcmdpX2dvdG9fc2xlZXAoYWxhcm1fdGltZSwgYWxhcm1fZW5hYmxlLCBzdGF0ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZihzaGFycHNsX29mZl9jaGFyZ2VfYmF0dGVyeSgpKSB7CisJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdpbmcuIFN1c3BlbmQuLi5cbiIpOworCQkJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9lbmFibGUsIHN0YXRlKTsKKwkJCXJldHVybiAxOworCQl9CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJVc2VyIHRyaWdnZXJlZCB3YWtldXAgaW4gb2ZmbGluZSBjaGFyZ2VyLlxuIik7CisJfQorCisJaWYgKChTVEFUVVNfQkFUVF9MT0NLRUQgPT0gMCkgfHwgKHNoYXJwc2xfZmF0YWxfY2hlY2soKSA8IDApICkKKwl7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJGYXRhbCBjb25kaXRpb24uIFN1c3BlbmQuXG4iKTsKKwkJY29yZ2lfZ290b19zbGVlcChhbGFybV90aW1lLCBhbGFybV9lbmFibGUsIHN0YXRlKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29yZ2lfcHhhX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFsYXJtX3RpbWUgPSBSVEFSOworCXVuc2lnbmVkIGludCBhbGFybV9zdGF0dXMgPSAoKFJUU1IgJiBSVFNSX0FMRSkgIT0gMCk7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiU2hhcnBTTCBzdXNwZW5kaW5nIGZvciBmaXJzdCB0aW1lLlxuIik7CisKKwljb3JnaV9nb3RvX3NsZWVwKGFsYXJtX3RpbWUsIGFsYXJtX3N0YXR1cywgc3RhdGUpOworCisJd2hpbGUgKGNvcmdpX2VudGVyX3N1c3BlbmQoYWxhcm1fdGltZSxhbGFybV9zdGF0dXMsc3RhdGUpKQorCQl7fQorCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlNoYXJwU0wgcmVzdW1pbmcuLi5cbiIpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworCisvKgorICogQ2hlY2sgZm9yIGZhdGFsIGJhdHRlcnkgZXJyb3JzCisgKiBGYXRhbCByZXR1cm5zIC0xCisgKi8KK3N0YXRpYyBpbnQgc2hhcnBzbF9mYXRhbF9jaGVjayh2b2lkKQoreworCWludCBidWZmWzVdLCB0ZW1wLCBpLCBhY2luOworCisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgInNoYXJwc2xfZmF0YWxfY2hlY2sgZW50ZXJlZFxuIik7CisKKwkvKiBDaGVjayBBQy1BZGFwdGVyICovCisJYWNpbiA9IFNUQVRVU19BQ19JTjsKKworCWlmIChhY2luICYmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT04pKSB7CisJCUNIQVJHRV9PRkYoKTsKKwkJdWRlbGF5KDEwMCk7CisJCURJU0NIQVJHRV9PTigpOwkvKiBlbmFibGUgZGlzY2hhcmdlICovCisJCW1kZWxheShTSEFSUFNMX1dBSVRfRElTQ0hBUkdFX09OKTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSkKKwkJc2hhcnBzbF9wbS5tYWNoaW5mby0+ZGlzY2hhcmdlMSgxKTsKKworCS8qIENoZWNrIGJhdHRlcnkgOiBjaGVjayBpbnNlcnRpbmcgYmF0dGVyeSA/ICovCisJZm9yIChpPTA7IGk8NTsgaSsrKSB7CisJCWJ1ZmZbaV0gPSBzaGFycHNsX3JlYWRfTWFpbkJhdHRlcnkoKTsKKwkJbWRlbGF5KFNIQVJQU0xfQ0hFQ0tfQkFUVEVSWV9XQUlUX1RJTUVfVk9MVCk7CisJfQorCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEpCisJCXNoYXJwc2xfcG0ubWFjaGluZm8tPmRpc2NoYXJnZTEoMCk7CisKKwlpZiAoYWNpbiAmJiAoc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9PSBDSFJHX09OKSkgeworCQl1ZGVsYXkoMTAwKTsKKwkJQ0hBUkdFX09OKCk7CisJCURJU0NIQVJHRV9PRkYoKTsKKwl9CisKKwl0ZW1wID0gZ2V0X3NlbGVjdF92YWwoYnVmZik7CisJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgInNoYXJwc2xfZmF0YWxfY2hlY2s6IGFjaW46ICVkLCBkaXNjaGFyZ2Ugdm9sdGFnZTogJWQsIG5vIGRpc2NoYXJnZTogJWRcbiIsIGFjaW4sIHRlbXAsIHNoYXJwc2xfcmVhZF9NYWluQmF0dGVyeSgpKTsKKworCWlmICgoYWNpbiAmJiAodGVtcCA8IFNIQVJQU0xfRkFUQUxfQUNJTl9WT0xUKSkgfHwKKwkJCSghYWNpbiAmJiAodGVtcCA8IFNIQVJQU0xfRkFUQUxfTk9BQ0lOX1ZPTFQpKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfb2ZmX2NoYXJnZV9lcnJvcih2b2lkKQoreworCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IEVycm9yIG9jY3VyZWQuXG4iKTsKKwlDSEFSR0VfT0ZGKCk7CisJQ0hBUkdFX0xFRF9FUlIoKTsKKwlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19FUlJPUjsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENoYXJnaW5nIENvbnRyb2wgd2hpbGUgc3VzcGVuZGVkCisgKiBSZXR1cm4gMSAtIGdvIHN0cmFpZ2h0IHRvIHNsZWVwCisgKiBSZXR1cm4gMCAtIHNsZWVwIG9yIHdha2V1cCBkZXBlbmRpbmcgb24gb3RoZXIgZmFjdG9ycworICovCitzdGF0aWMgaW50IHNoYXJwc2xfb2ZmX2NoYXJnZV9iYXR0ZXJ5KHZvaWQpCit7CisJaW50IHRpbWU7CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiQ2hhcmdlIE1vZGU6ICVkXG4iLCBzaGFycHNsX3BtLmNoYXJnZV9tb2RlKTsKKworCWlmIChzaGFycHNsX3BtLmNoYXJnZV9tb2RlID09IENIUkdfT0ZGKSB7CisJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IFN0ZXAgMVxuIik7CisKKwkJLyogQUMgQ2hlY2sgKi8KKwkJaWYgKChzaGFycHNsX2FjX2NoZWNrKCkgPCAwKSB8fCAoc2hhcnBzbF9jaGVja19iYXR0ZXJ5KDEpIDwgMCkpCisJCQlyZXR1cm4gc2hhcnBzbF9vZmZfY2hhcmdlX2Vycm9yKCk7CisKKwkJLyogU3RhcnQgQ2hhcmdpbmcgKi8KKwkJQ0hBUkdFX0xFRF9PTigpOworCQlDSEFSR0VfT0ZGKCk7CisJCW1kZWxheShTSEFSUFNMX0NIQVJHRV9XQUlUX1RJTUUpOworCQlDSEFSR0VfT04oKTsKKworCQlzaGFycHNsX3BtLmNoYXJnZV9tb2RlID0gQ0hSR19PTjsKKwkJc2hhcnBzbF9wbS5mdWxsX2NvdW50ID0gMDsKKworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgIT0gQ0hSR19PTikgeworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc2hhcnBzbF9wbS5mdWxsX2NvdW50ID09IDApIHsKKwkJaW50IHRpbWU7CisKKwkJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIk9mZmxpbmUgQ2hhcmdlcjogU3RlcCAyXG4iKTsKKworCQlpZiAoc2hhcnBzbF9jaGVja19iYXR0ZXJ5KDApIDwgMCkKKwkJCXJldHVybiBzaGFycHNsX29mZl9jaGFyZ2VfZXJyb3IoKTsKKworCQlDSEFSR0VfT0ZGKCk7CisJCW1kZWxheShTSEFSUFNMX0NIQVJHRV9XQUlUX1RJTUUpOworCQlDSEFSR0VfT04oKTsKKwkJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfT047CisKKwkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX0NPX0NIRUNLX1RJTUUpOworCisJCXRpbWUgPSBSQ05SOworCQl3aGlsZSgxKSB7CisJCQkvKiBDaGVjayBpZiBhbnkgd2FrZXVwIGV2ZW50IGhhZCBvY2N1cmVkICovCisJCQlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Y2hhcmdlcl93YWtldXAoKSAhPSAwKQorCQkJCXJldHVybiAwOworCQkJLyogQ2hlY2sgZm9yIHRpbWVvdXQgKi8KKwkJCWlmICgoUkNOUiAtIHRpbWUpID4gU0hBUlBTTF9XQUlUX0NPX1RJTUUpCisJCQkJcmV0dXJuIDE7CisJCQlpZiAoU1RBVFVTX0NIUkdfRlVMTCkgeworCQkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IENoYXJnZSBmdWxsIG9jY3VyZWQuIFJldHJ5aW5nIHRvIGNoZWNrXG4iKTsKKwkgICAJCQlzaGFycHNsX3BtLmZ1bGxfY291bnQrKzsKKwkJCQlDSEFSR0VfT0ZGKCk7CisJCQkJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX1dBSVRfVElNRSk7CisJCQkJQ0hBUkdFX09OKCk7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwl9CisKKwlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBTdGVwIDNcbiIpOworCisJbWRlbGF5KFNIQVJQU0xfQ0hBUkdFX0NPX0NIRUNLX1RJTUUpOworCisJdGltZSA9IFJDTlI7CisJd2hpbGUoMSkgeworCQkvKiBDaGVjayBpZiBhbnkgd2FrZXVwIGV2ZW50IGhhZCBvY2N1cmVkICovCisJCWlmIChzaGFycHNsX3BtLm1hY2hpbmZvLT5jaGFyZ2VyX3dha2V1cCgpICE9IDApCisJCQlyZXR1cm4gMDsKKwkJLyogQ2hlY2sgZm9yIHRpbWVvdXQgKi8KKwkJaWYgKChSQ05SLXRpbWUpID4gU0hBUlBTTF9XQUlUX0NPX1RJTUUpIHsKKwkJCWlmIChzaGFycHNsX3BtLmZ1bGxfY291bnQgPiBTSEFSUFNMX0NIQVJHRV9SRVRSWV9DTlQpIHsKKwkJCQlkZXZfZGJnKHNoYXJwc2xfcG0uZGV2LCAiT2ZmbGluZSBDaGFyZ2VyOiBOb3QgY2hhcmdlZCBzdWZmaWNpZW50bHkuIFJldHJ5aW5nLlxuIik7CisJCQkJc2hhcnBzbF9wbS5mdWxsX2NvdW50ID0gMDsKKwkJCX0KKwkJCXNoYXJwc2xfcG0uZnVsbF9jb3VudCsrOworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKFNUQVRVU19DSFJHX0ZVTEwpIHsKKwkJCWRldl9kYmcoc2hhcnBzbF9wbS5kZXYsICJPZmZsaW5lIENoYXJnZXI6IENoYXJnaW5nIGNvbXBsZXRlLlxuIik7CisJCQlDSEFSR0VfTEVEX09GRigpOworCQkJQ0hBUkdFX09GRigpOworCQkJc2hhcnBzbF9wbS5jaGFyZ2VfbW9kZSA9IENIUkdfRE9ORTsKKwkJCXJldHVybiAxOworCQl9CisJfQorfQorCisKK3N0YXRpYyBzc2l6ZV90IGJhdHRlcnlfcGVyY2VudGFnZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIixzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfcGVyY2VudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJhdHRlcnlfdm9sdGFnZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIixzaGFycHNsX3BtLmJhdHRzdGF0Lm1haW5iYXRfdm9sdGFnZSk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihiYXR0ZXJ5X3BlcmNlbnRhZ2UsIDA0NDQsIGJhdHRlcnlfcGVyY2VudGFnZV9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihiYXR0ZXJ5X3ZvbHRhZ2UsIDA0NDQsIGJhdHRlcnlfdm9sdGFnZV9zaG93LCBOVUxMKTsKKworZXh0ZXJuIHZvaWQgKCphcG1fZ2V0X3Bvd2VyX3N0YXR1cykoc3RydWN0IGFwbV9wb3dlcl9pbmZvICopOworCitzdGF0aWMgdm9pZCBzaGFycHNsX2FwbV9nZXRfcG93ZXJfc3RhdHVzKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqaW5mbykKK3sKKwlpbmZvLT5hY19saW5lX3N0YXR1cyA9IHNoYXJwc2xfcG0uYmF0dHN0YXQuYWNfc3RhdHVzOworCisJaWYgKHNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPT0gQ0hSR19PTikKKwkJaW5mby0+YmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkc7CisJZWxzZQorCQlpbmZvLT5iYXR0ZXJ5X3N0YXR1cyA9IHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9zdGF0dXM7CisKKwlpbmZvLT5iYXR0ZXJ5X2ZsYWcgPSAoMSA8PCBpbmZvLT5iYXR0ZXJ5X3N0YXR1cyk7CisJaW5mby0+YmF0dGVyeV9saWZlID0gc2hhcnBzbF9wbS5iYXR0c3RhdC5tYWluYmF0X3BlcmNlbnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG1fb3BzIHNoYXJwc2xfcG1fb3BzID0geworCS5wbV9kaXNrX21vZGUJPSBQTV9ESVNLX0ZJUk1XQVJFLAorCS5wcmVwYXJlCT0gcHhhX3BtX3ByZXBhcmUsCisJLmVudGVyCQk9IGNvcmdpX3B4YV9wbV9lbnRlciwKKwkuZmluaXNoCQk9IHB4YV9wbV9maW5pc2gsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaGFycHNsX3BtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoIWRldi0+cGxhdGZvcm1fZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzaGFycHNsX3BtLmRldiA9IGRldjsKKwlzaGFycHNsX3BtLm1hY2hpbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXNoYXJwc2xfcG0uY2hhcmdlX21vZGUgPSBDSFJHX09GRjsKKwlzaGFycHNsX3BtLmZsYWdzID0gMDsKKworCXNoYXJwc2xfcG0ubWFjaGluZm8tPmluaXQoKTsKKworCWluaXRfdGltZXIoJnNoYXJwc2xfcG0uYWNfdGltZXIpOworCXNoYXJwc2xfcG0uYWNfdGltZXIuZnVuY3Rpb24gPSBzaGFycHNsX2FjX3RpbWVyOworCisJaW5pdF90aW1lcigmc2hhcnBzbF9wbS5jaHJnX2Z1bGxfdGltZXIpOworCXNoYXJwc2xfcG0uY2hyZ19mdWxsX3RpbWVyLmZ1bmN0aW9uID0gc2hhcnBzbF9jaHJnX2Z1bGxfdGltZXI7CisKKwlweGFfZ3Bpb19tb2RlKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbiB8IEdQSU9fSU4pOworCXB4YV9ncGlvX21vZGUoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsIHwgR1BJT19JTik7CisJcHhhX2dwaW9fbW9kZShzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2sgfCBHUElPX0lOKTsKKworCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycyAqLworCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pLCBzaGFycHNsX2FjX2lzciwgU0FfSU5URVJSVVBULCAiQUMgSW5wdXQgRGV0ZWN0Iiwgc2hhcnBzbF9hY19pc3IpKSB7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYWNpbikpOworCX0KKwllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pLElSUVRfQk9USEVER0UpOworCisJaWYgKHJlcXVlc3RfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jayksIHNoYXJwc2xfZmF0YWxfaXNyLCBTQV9JTlRFUlJVUFQsICJCYXR0ZXJ5IENvdmVyIiwgc2hhcnBzbF9mYXRhbF9pc3IpKSB7CisJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0bG9jaykpOworCX0KKwllbHNlIHNldF9pcnFfdHlwZShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2JhdGxvY2spLElSUVRfRkFMTElORyk7CisKKwlpZiAoc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCkgeworCQlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCksIHNoYXJwc2xfZmF0YWxfaXNyLCBTQV9JTlRFUlJVUFQsICJGYXRhbCBCYXR0ZXJ5Iiwgc2hhcnBzbF9mYXRhbF9pc3IpKSB7CisJCQlkZXZfZXJyKHNoYXJwc2xfcG0uZGV2LCAiQ291bGQgbm90IGdldCBpcnEgJWQuXG4iLCBJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2ZhdGFsKSk7CisJCX0KKwkJZWxzZSBzZXRfaXJxX3R5cGUoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19mYXRhbCksSVJRVF9GQUxMSU5HKTsKKwl9CisKKwlpZiAoIW1hY2hpbmVfaXNfY29yZ2koKSkKKwl7CisJCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyLiAqLworCQlpZiAocmVxdWVzdF9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSwgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyLCBTQV9JTlRFUlJVUFQsICJDTyIsIHNoYXJwc2xfY2hyZ19mdWxsX2lzcikpIHsKKwkJCWRldl9lcnIoc2hhcnBzbF9wbS5kZXYsICJDb3VsZCBub3QgZ2V0IGlycSAlZC5cbiIsIElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCkpOworCQl9CisJCWVsc2Ugc2V0X2lycV90eXBlKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fYmF0ZnVsbCksSVJRVF9SSVNJTkcpOworCX0KKworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3BlcmNlbnRhZ2UpOworCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOworCisJYXBtX2dldF9wb3dlcl9zdGF0dXMgPSBzaGFycHNsX2FwbV9nZXRfcG93ZXJfc3RhdHVzOworCisJcG1fc2V0X29wcygmc2hhcnBzbF9wbV9vcHMpOworCisJbW9kX3RpbWVyKCZzaGFycHNsX3BtLmFjX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYXJwc2xfcG1fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlwbV9zZXRfb3BzKE5VTEwpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2JhdHRlcnlfdm9sdGFnZSk7CisKKwlmcmVlX2lycShJUlFfR1BJTyhzaGFycHNsX3BtLm1hY2hpbmZvLT5ncGlvX2FjaW4pLCBzaGFycHNsX2FjX2lzcik7CisJZnJlZV9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRsb2NrKSwgc2hhcnBzbF9mYXRhbF9pc3IpOworCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpCisJCWZyZWVfaXJxKElSUV9HUElPKHNoYXJwc2xfcG0ubWFjaGluZm8tPmdwaW9fZmF0YWwpLCBzaGFycHNsX2ZhdGFsX2lzcik7CisKKwlpZiAoIW1hY2hpbmVfaXNfY29yZ2koKSkKKwkJZnJlZV9pcnEoSVJRX0dQSU8oc2hhcnBzbF9wbS5tYWNoaW5mby0+Z3Bpb19iYXRmdWxsKSwgc2hhcnBzbF9jaHJnX2Z1bGxfaXNyKTsKKworCWRlbF90aW1lcl9zeW5jKCZzaGFycHNsX3BtLmNocmdfZnVsbF90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnNoYXJwc2xfcG0uYWNfdGltZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzaGFycHNsX3BtX2RyaXZlciA9IHsKKwkubmFtZQkJPSAic2hhcnBzbC1wbSIsCisJLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCisJLnByb2JlCQk9IHNoYXJwc2xfcG1fcHJvYmUsCisJLnJlbW92ZQkJPSBzaGFycHNsX3BtX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHNoYXJwc2xfcG1fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNoYXJwc2xfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc2hhcnBzbF9wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2hhcnBzbF9wbV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBzaGFycHNsX3BtX2V4aXQodm9pZCkKK3sKKyAJZHJpdmVyX3VucmVnaXN0ZXIoJnNoYXJwc2xfcG1fZHJpdmVyKTsKK30KKworbGF0ZV9pbml0Y2FsbChzaGFycHNsX3BtX2luaXQpOworbW9kdWxlX2V4aXQoc2hhcnBzbF9wbV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKaW5kZXggNGQ4MjZjMC4uYTY4YjMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMKQEAgLTE5LDYgKzE5LDggQEAKICAqICAgMjJuZCBBdWcgMjAwMyBJbml0aWFsIHZlcnNpb24uCiAgKiAgIDIwdGggRGVjIDIwMDQgQWRkZWQgc3NwX2NvbmZpZyBmb3IgY2hhbmdpbmcgcG9ydCBjb25maWcgd2l0aG91dAogICogICAgICAgICAgICAgICAgIGNsb3NpbmcgdGhlIHBvcnQuCisgKiAgICA0dGggQXVnIDIwMDUgQWRkZWQgb3B0aW9uIHRvIGRpc2FibGUgaXJxIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGFuZAorICogICAgICAgICAgICAgICAgIGNsZWFuZWQgdXAgaXJxIGFuZCBjbG9jayBkZXRlY3Rpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzcsNiArMzksMjYgQEAKIAogI2RlZmluZSBQWEFfU1NQX1BPUlRTIAkzCiAKK3N0cnVjdCBzc3BfaW5mb18geworCWludCBpcnE7CisJdTMyIGNsb2NrOworfTsKKworLyoKKyAqIFNTUCBwb3J0IGNsb2NrIGFuZCBJUlEgc2V0dGluZ3MKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzc3BfaW5mb18gc3NwX2luZm9bUFhBX1NTUF9QT1JUU10gPSB7CisjaWYgZGVmaW5lZCAoQ09ORklHX1BYQTI3eCkKKwl7SVJRX1NTUCwJQ0tFTjIzX1NTUDF9LAorCXtJUlFfU1NQMiwJQ0tFTjNfU1NQMn0sCisJe0lSUV9TU1AzLAlDS0VONF9TU1AzfSwKKyNlbHNlCisJe0lSUV9TU1AsCUNLRU4zX1NTUH0sCisJe0lSUV9OU1NQLAlDS0VOOV9OU1NQfSwKKwl7SVJRX0FTU1AsCUNLRU4xMF9BU1NQfSwKKyNlbmRpZgorfTsKKwogc3RhdGljIERFQ0xBUkVfTVVURVgoc2VtKTsKIHN0YXRpYyBpbnQgdXNlX2NvdW50W1BYQV9TU1BfUE9SVFNdID0gezAsIDAsIDB9OwogCkBAIC0yMTAsOSArMjMyLDkgQEAKICAqICAgJS1FQlVTWQlpZiB0aGUgcmVzb3VyY2VzIGFyZSBhbHJlYWR5IGluIHVzZQogICogICAlMAkJb24gc3VjY2VzcwogICovCi1pbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQpCitpbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQsIHUzMiBpbml0X2ZsYWdzKQogewotCWludCByZXQsIGlycTsKKwlpbnQgcmV0OwogCiAJaWYgKHBvcnQgPiBQWEFfU1NQX1BPUlRTIHx8IHBvcnQgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMjksNjEgKzI1MSwyMCBAQAogCQl1cCgmc2VtKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0KLQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSAxOgotCQkJaXJxID0gSVJRX1NTUDsKLQkJCWJyZWFrOwotI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCi0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9TU1AyOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9TU1AzOwotCQkJYnJlYWs7Ci0jZWxzZQotCQljYXNlIDI6Ci0JCQlpcnEgPSBJUlFfTlNTUDsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpcnEgPSBJUlFfQVNTUDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlkZXYtPnBvcnQgPSBwb3J0OwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBzc3BfaW50ZXJydXB0LCAwLCAiU1NQIiwgZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9yZWdpb247CisJLyogZG8gd2UgbmVlZCB0byBnZXQgaXJxICovCisJaWYgKCEoaW5pdF9mbGFncyAmIFNTUF9OT19JUlEpKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKHNzcF9pbmZvW3BvcnQtMV0uaXJxLCBzc3BfaW50ZXJydXB0LAorCQkJCTAsICJTU1AiLCBkZXYpOworCSAgICAJaWYgKHJldCkKKwkJCWdvdG8gb3V0X3JlZ2lvbjsKKwkgICAgCWRldi0+aXJxID0gc3NwX2luZm9bcG9ydC0xXS5pcnE7CisJfSBlbHNlCisJCWRldi0+aXJxID0gMDsKIAogCS8qIHR1cm4gb24gU1NQIHBvcnQgY2xvY2sgKi8KLQlzd2l0Y2ggKGRldi0+cG9ydCkgewotI2lmIGRlZmluZWQgKENPTkZJR19QWEEyN3gpCi0JCWNhc2UgMToKLQkJCXB4YV9zZXRfY2tlbihDS0VOMjNfU1NQMSwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUDIsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXB4YV9zZXRfY2tlbihDS0VONF9TU1AzLCAxKTsKLQkJCWJyZWFrOwotI2Vsc2UKLQkJY2FzZSAxOgotCQkJcHhhX3NldF9ja2VuKENLRU4zX1NTUCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJcHhhX3NldF9ja2VuKENLRU45X05TU1AsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCXB4YV9zZXRfY2tlbihDS0VOMTBfQVNTUCwgMSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCX0KLQorCXB4YV9zZXRfY2tlbihzc3BfaW5mb1twb3J0LTFdLmNsb2NrLCAxKTsKIAl1cCgmc2VtKTsKIAlyZXR1cm4gMDsKIApAQCAtMzAxLDQ2ICsyODIsMTcgQEAKICAqLwogdm9pZCBzc3BfZXhpdChzdHJ1Y3Qgc3NwX2RldiAqZGV2KQogewotCWludCBpcnE7Ci0KIAlkb3duKCZzZW0pOwogCVNTQ1IwX1AoZGV2LT5wb3J0KSAmPSB+U1NDUjBfU1NFOwogCi0JLyogZmluZCBpcnEsIHNhdmUgcG93ZXIgYW5kIHR1cm4gb2ZmIFNTUCBwb3J0IGNsb2NrICovCi0Jc3dpdGNoIChkZXYtPnBvcnQpIHsKLSNpZiBkZWZpbmVkIChDT05GSUdfUFhBMjd4KQotCQljYXNlIDE6Ci0JCQlpcnEgPSBJUlFfU1NQOwotCQkJcHhhX3NldF9ja2VuKENLRU4yM19TU1AxLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpcnEgPSBJUlFfU1NQMjsKLQkJCXB4YV9zZXRfY2tlbihDS0VOM19TU1AyLCAwKTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlpcnEgPSBJUlFfU1NQMzsKLQkJCXB4YV9zZXRfY2tlbihDS0VONF9TU1AzLCAwKTsKLQkJCWJyZWFrOwotI2Vsc2UKLQkJY2FzZSAxOgotCQkJaXJxID0gSVJRX1NTUDsKLQkJCXB4YV9zZXRfY2tlbihDS0VOM19TU1AsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCWlycSA9IElSUV9OU1NQOwotCQkJcHhhX3NldF9ja2VuKENLRU45X05TU1AsIDApOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzoKLQkJCWlycSA9IElSUV9BU1NQOwotCQkJcHhhX3NldF9ja2VuKENLRU4xMF9BU1NQLCAwKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJTU1A6IHRyaWVkIHRvIGNsb3NlIGludmFsaWQgcG9ydFxuIik7Ci0JCQlyZXR1cm47CisgICAgCWlmIChkZXYtPnBvcnQgPiBQWEFfU1NQX1BPUlRTIHx8IGRldi0+cG9ydCA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNTUDogdHJpZWQgdG8gY2xvc2UgaW52YWxpZCBwb3J0XG4iKTsKKwkJcmV0dXJuOwogCX0KIAotCWZyZWVfaXJxKGlycSwgZGV2KTsKKwlweGFfc2V0X2NrZW4oc3NwX2luZm9bZGV2LT5wb3J0LTFdLmNsb2NrLCAwKTsKKwlpZiAoZGV2LT5pcnEpCisJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihfX1BSRUcoU1NDUjBfUChkZXYtPnBvcnQpKSwgMHgyYyk7CiAJdXNlX2NvdW50W2Rldi0+cG9ydCAtIDFdLS07CiAJdXAoJnNlbSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwppbmRleCA2OWYxOTcwLi45ZTAyYmMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCS5nZXRfbWN0cmwJPSBuZXBvbnNldF9nZXRfbWN0cmwsCiB9OwogCi1zdGF0aWMgaW50IG5lcG9uc2V0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNhMTEwMF9yZWdpc3Rlcl91YXJ0X2ZucygmbmVwb25zZXRfcG9ydF9mbnMpOwogCkBAIC0xNzgsMjcgKzE3OCwyNyBAQAogLyoKICAqIExETSBwb3dlciBtYW5hZ2VtZW50LgogICovCi1zdGF0aWMgaW50IG5lcG9uc2V0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG5lcG9uc2V0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJLyoKIAkgKiBTYXZlIHN0YXRlLgogCSAqLwotCWlmICghZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSkKLQkJZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOwotCWlmICghZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSkKKwlpZiAoIWRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlKQorCQlkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JKih1bnNpZ25lZCBpbnQgKilkZXYtPnBvd2VyLnNhdmVkX3N0YXRlID0gTkNSXzA7CisJKih1bnNpZ25lZCBpbnQgKilkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSA9IE5DUl8wOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbmVwb25zZXRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbmVwb25zZXRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlpZiAoZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSkgewotCQlOQ1JfMCA9ICoodW5zaWduZWQgaW50ICopZGV2LT5wb3dlci5zYXZlZF9zdGF0ZTsKLQkJa2ZyZWUoZGV2LT5wb3dlci5zYXZlZF9zdGF0ZSk7Ci0JCWRldi0+cG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOworCWlmIChkZXYtPmRldi5wb3dlci5zYXZlZF9zdGF0ZSkgeworCQlOQ1JfMCA9ICoodW5zaWduZWQgaW50ICopZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGU7CisJCWtmcmVlKGRldi0+ZGV2LnBvd2VyLnNhdmVkX3N0YXRlKTsKKwkJZGV2LT5kZXYucG93ZXIuc2F2ZWRfc3RhdGUgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjA5LDEyICsyMDksMTMgQEAKICNkZWZpbmUgbmVwb25zZXRfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG5lcG9uc2V0X2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIm5lcG9uc2V0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5lcG9uc2V0X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG5lcG9uc2V0X3Byb2JlLAogCS5zdXNwZW5kCT0gbmVwb25zZXRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG5lcG9uc2V0X3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibmVwb25zZXQiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG5lcG9uc2V0X3Jlc291cmNlc1tdID0gewpAQCAtMjkzLDcgKzI5NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5lcG9uc2V0X2luaXQodm9pZCkKIHsKLQlkcml2ZXJfcmVnaXN0ZXIoJm5lcG9uc2V0X2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbmVwb25zZXRfZGV2aWNlX2RyaXZlcik7CiAKIAkvKgogCSAqIFRoZSBOZXBvbnNldCBpcyBvbmx5IHByZXNlbnQgb24gdGhlIEFzc2FiZXQgbWFjaGluZSB0eXBlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggZTNjMTRkNi4uZTg0ZmRkZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC0xMDIsOCArMTAyLDggQEAKICMgQVJNOTI1VAogY29uZmlnIENQVV9BUk05MjVUCiAgCWJvb2wgIlN1cHBvcnQgQVJNOTI1VCBwcm9jZXNzb3IiIGlmIEFSQ0hfT01BUDEKLSAJZGVwZW5kcyBvbiBBUkNIX09NQVAxNTEwCi0gCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAxNTEwCisgCWRlcGVuZHMgb24gQVJDSF9PTUFQMTVYWAorIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMTVYWAogCXNlbGVjdCBDUFVfMzJ2NAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCkBAIC0yNDIsNyArMjQyLDcgQEAKICMgQVJNdjYKIGNvbmZpZyBDUFVfVjYKIAlib29sICJTdXBwb3J0IEFSTSBWNiBwcm9jZXNzb3IiCi0JZGVwZW5kcyBvbiBBUkNIX0lOVEVHUkFUT1IgfHwgTUFDSF9SRUFMVklFV19FQgorCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgQVJDSF9PTUFQMgogCXNlbGVjdCBDUFVfMzJ2NgogCXNlbGVjdCBDUFVfQUJSVF9FVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LW9tYXAvTWFrZWZpbGUKaW5kZXggN2UxNDRmOS4uOWNjZjE5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gY29tbW9uLm8gc3JhbS5vIHNyYW0tZm4ubyBjbG9jay5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCitvYmoteSA6PSBjb21tb24ubyBzcmFtLm8gc3JhbS1mbi5vIGNsb2NrLm8gZGV2aWNlcy5vIGRtYS5vIG11eC5vIGdwaW8ubyBtY2JzcC5vIHVzYi5vCiBvYmotbSA6PQogb2JqLW4gOj0KIG9iai0gIDo9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCmluZGV4IGEwMjBmZTEuLjdjZTM5YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCkBAIC0xLDE1ICsxLDIwIEBACiAvKgogICogIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNCBOb2tpYSBjb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUgTm9raWEgY29ycG9yYXRpb24KICAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgogICoKKyAqICBNb2RpZmllZCBmb3Igb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0xOCw1NjIgKzIzLDIwIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgInNyYW0uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgogCi1zdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitMSVNUX0hFQUQoY2xvY2tzKTsKIHN0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOwotc3RhdGljIERFRklORV9TUElOTE9DSyhjbG9ja2Z3X2xvY2spOwotc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqICBjbGspOwotLyogVUFSVCBjbG9jayBmdW5jdGlvbiAqLwotc3RhdGljIGludCBzZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci0vKiBFeHRlcm5hbCBjbG9jayAoTUNMSyAmIEJDTEspIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZXRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIGxvbmcgcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiAgY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHZvaWQgaW5pdF9leHRfY2xrKHN0cnVjdCBjbGsgKiAgY2xrKTsKLS8qIE1QVSB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBzZWxlY3RfdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKLXN0YXRpYyBsb25nIHJvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci12b2lkIGNsa19zZXRkcGxsKF9fdTE2LCBfX3UxNik7CitERUZJTkVfU1BJTkxPQ0soY2xvY2tmd19sb2NrKTsKIAotc3RhdGljIHN0cnVjdCBtcHVfcmF0ZSByYXRlX3RhYmxlW10gPSB7Ci0JLyogTVBVIE1IeiwgeHRhbCBNSHosIGRwbGwxIE1IeiwgQ0tDVEwsIERQTExfQ1RMCi0JICogYXJtZGl2LCBkc3BkaXYsIGRzcG1tdSwgdGNkaXYsIHBlcmRpdiwgbGNkZGl2Ci0JICovCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMjE2TUhaKQotCXsgMjE2MDAwMDAwLCAxMjAwMDAwMCwgMjE2MDAwMDAwLCAweDA1MGQsIDB4MjkxMCB9LCAvKiAxLzEvMi8yLzIvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTk1TUhaKQotCXsgMTk1MDAwMDAwLCAxMzAwMDAwMCwgMTk1MDAwMDAwLCAweDA1MGUsIDB4Mjc5MCB9LCAvKiAxLzEvMi8yLzQvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTkyTUhaKQotCXsgMTkyMDAwMDAwLCAxOTIwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjUxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwotCXsgMTkyMDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1MGYsIDB4MjgxMCB9LCAvKiAxLzEvMi8yLzgvOCAqLwotCXsgIDk2MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDA1NWYsIDB4MjgxMCB9LCAvKiAyLzIvMi8yLzgvOCAqLwotCXsgIDQ4MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBiYWYsIDB4MjgxMCB9LCAvKiA0LzgvNC80LzgvOCAqLwotCXsgIDI0MDAwMDAwLCAxMjAwMDAwMCwgMTkyMDAwMDAwLCAweDBmZmYsIDB4MjgxMCB9LCAvKiA4LzgvOC84LzgvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTgyTUhaKQotCXsgMTgyMDAwMDAwLCAxMzAwMDAwMCwgMTgyMDAwMDAwLCAweDA1MGUsIDB4MjcxMCB9LCAvKiAxLzEvMi8yLzQvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTY4TUhaKQotCXsgMTY4MDAwMDAwLCAxMjAwMDAwMCwgMTY4MDAwMDAwLCAweDAxMGYsIDB4MjcxMCB9LCAvKiAxLzEvMS8yLzgvOCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTUwTUhaKQotCXsgMTUwMDAwMDAwLCAxMjAwMDAwMCwgMTUwMDAwMDAwLCAweDAxMGEsIDB4MmNiMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fMTIwTUhaKQotCXsgMTIwMDAwMDAwLCAxMjAwMDAwMCwgMTIwMDAwMDAwLCAweDAxMGEsIDB4MjUxMCB9LCAvKiAxLzEvMS8yLzQvNCAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9BUk1fOTZNSFopCi0JeyAgOTYwMDAwMDAsIDEyMDAwMDAwLCAgOTYwMDAwMDAsIDB4MDAwNSwgMHgyNDEwIH0sIC8qIDEvMS8xLzEvMi8yICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0FSTV82ME1IWikKLQl7ICA2MDAwMDAwMCwgMTIwMDAwMDAsICA2MDAwMDAwMCwgMHgwMDA1LCAweDIyOTAgfSwgLyogMS8xLzEvMS8yLzIgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfQVJNXzMwTUhaKQotCXsgIDMwMDAwMDAwLCAxMjAwMDAwMCwgIDYwMDAwMDAwLCAweDA1NTUsIDB4MjI5MCB9LCAvKiAyLzIvMi8yLzIvMiAqLwotI2VuZGlmCi0JeyAwLCAwLCAwLCAwLCAwIH0sCi19Oworc3RhdGljIHN0cnVjdCBjbGtfZnVuY3Rpb25zICphcmNoX2Nsb2NrOwogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN0YW5kYXJkIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGFzbS9oYXJkd2FyZS9jbG9jay5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspOwotaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci12b2lkIF9fY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsayk7Ci1pbnQgX19jbGtfdXNlKHN0cnVjdCBjbGsgKmNsayk7Ci0KLQotc3RhdGljIHZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKLX0KLQotCi1zdGF0aWMgdm9pZCB3YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqICBjbGspCi17Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAxNDsKLX0KLQotc3RhdGljIHZvaWQgdWFydF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKLXsKLQl1bnNpZ25lZCBpbnQgdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCWlmICh2YWwgJiBjbGstPmVuYWJsZV9iaXQpCi0JCWNsay0+cmF0ZSA9IDQ4MDAwMDAwOwotCWVsc2UKLQkJY2xrLT5yYXRlID0gMTIwMDAwMDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNrX3JlZiA9IHsKLQkubmFtZQkJPSAiY2tfcmVmIiwKLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDEgPSB7Ci0JLm5hbWUJCT0gImNrX2RwbGwxIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNrX2RwbGwxb3V0ID0gewotCS5uYW1lCQk9ICJja19kcGxsMW91dCIsCi0JLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9DS09VVF9BUk0sCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9jayA9IHsKLQkubmFtZQkJPSAiYXJtX2NrIiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9BUk1ESVZfT0ZGU0VULAotCS5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybXBlcl9jayA9IHsKLQkubmFtZQkJPSAiYXJtcGVyX2NrIiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfQ0tDVEwsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7Ci0JLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0dQSU9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJteG9yX2NrID0gewotCS5uYW1lCQk9ICJhcm14b3JfY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcm10aW1fY2sgPSB7Ci0JLm5hbWUJCT0gImFybXRpbV9jayIsCi0JLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9USU1DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtd2R0X2NrID0gewotCS5uYW1lCQk9ICJhcm13ZHRfY2siLAotCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QyLAotCS5lbmFibGVfYml0CT0gRU5fV0RUQ0ssCi0JLnJlY2FsYwkJPSAmd2F0Y2hkb2dfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE2eHggPSB7Ci0JLm5hbWUJCT0gImFybWludGhfY2siLAotCS5wYXJlbnQJCT0gJmFybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS8qIE5vdGU6IE9uIDE2eHggdGhlIGZyZXF1ZW5jeSBjYW4gYmUgZGl2aWRlZCBieSAyIGJ5IHByb2dyYW1taW5nCi0JICogQVJNX0NLQ1RMOkFSTV9JTlRIQ0tfU0VMKDE0KSB0byAxCi0JICoKLQkgKiAxNTEwIHZlcnNpb24gaXMgaW4gVEMgY2xvY2tzLgotCSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2NrID0gewotCS5uYW1lCQk9ICJkc3BfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9DS0NUTCwKLQkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwbW11X2NrID0gewotCS5uYW1lCQk9ICJkc3BtbXVfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVELAotCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmY2tjdGxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNwcGVyX2NrID0gewotCS5uYW1lCQk9ICJkc3BwZXJfY2siLAotCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IERTUF9ET01BSU5fQ0xPQ0sgfCBWSVJUVUFMX0lPX0FERFJFU1MsCi0JLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAotCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkvLy5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHhvcl9jayA9IHsKLQkubmFtZQkJPSAiZHNweG9yX2NrIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBEU1BfRE9NQUlOX0NMT0NLIHwgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHRpbV9jayA9IHsKLQkubmFtZQkJPSAiZHNwdGltX2NrIiwKLQkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBEU1BfRE9NQUlOX0NMT0NLIHwgVklSVFVBTF9JT19BRERSRVNTLAotCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9EU1BUSU1DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGNfY2sgPSB7Ci0JLm5hbWUJCT0gInRjX2NrIiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfAotCQkJICBSQVRFX0NLQ1RMIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJhdGVfb2Zmc2V0CT0gQ0tDVExfVENESVZfT0ZGU0VULAotCS5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNTEwID0gewotCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS8qIE5vdGU6IE9uIDE1MTAgdGhlIGZyZXF1ZW5jeSBmb2xsb3dzIFRDX0NLCi0JICoKLQkgKiAxNnh4IHZlcnNpb24gaXMgaW4gTVBVIGNsb2Nrcy4KLQkgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRpcGJfY2sgPSB7Ci0JLm5hbWUJCT0gInRpYnBfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsM19vY3BpX2NrID0gewotCS5uYW1lCQk9ICJsM19vY3BpX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMywKLQkuZW5hYmxlX2JpdAk9IEVOX09DUElfQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRjMV9jayA9IHsKLQkubmFtZQkJPSAidGMxX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMywKLQkuZW5hYmxlX2JpdAk9IEVOX1RDMV9DSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NrID0gewotCS5uYW1lCQk9ICJ0YzJfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9IEFSTV9JRExFQ1QzLAotCS5lbmFibGVfYml0CT0gRU5fVEMyX0NLLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2sgPSB7Ci0JLm5hbWUJCT0gImRtYV9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZG1hX2xjZGZyZWVfY2sgPSB7Ci0JLm5hbWUJCT0gImRtYV9sY2RmcmVlX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXBpX2NrID0gewotCS5uYW1lCQk9ICJhcGlfY2siLAotCS5wYXJlbnQJCT0gJnRjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9BUElDSywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbGJfY2sgPSB7Ci0JLm5hbWUJCT0gImxiX2NrIiwKLQkucGFyZW50CQk9ICZ0Y19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAsCi0JLmVuYWJsZV9yZWcJPSBBUk1fSURMRUNUMiwKLQkuZW5hYmxlX2JpdAk9IEVOX0xCQ0ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJoZWExX2NrID0gewotCS5uYW1lCQk9ICJyaGVhMV9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0gewotCS5uYW1lCQk9ICJyaGVhMl9jayIsCi0JLnBhcmVudAkJPSAmdGNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGxjZF9jayA9IHsKLQkubmFtZQkJPSAibGNkX2NrIiwKLQkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lOX09NQVA3MzAgfAotCQkJICBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gQVJNX0lETEVDVDIsCi0JLmVuYWJsZV9iaXQJPSBFTl9MQ0RDSywKLQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9MQ0RESVZfT0ZGU0VULAotCS5yZWNhbGMJCT0gJmNrY3RsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxXzE1MTAgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyOSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZzZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJnVhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfMTZ4eCA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gMjksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9jayA9IHsKLQkubmFtZQkJPSAidWFydDJfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gMzAsCS8qIENob29zZXMgYmV0d2VlbiAxMk1IeiBhbmQgNDhNSHogKi8KLQkuc2V0X3JhdGUJPSAmc2V0X3VhcnRfcmF0ZSwKLQkucmVjYWxjCQk9ICZ1YXJ0X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzXzE1MTAgPSB7Ci0JLm5hbWUJCT0gInVhcnQzX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBFTkFCTEVfUkVHXzMyQklUIHwgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAzMSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwotCS5zZXRfcmF0ZQk9ICZzZXRfdWFydF9yYXRlLAotCS5yZWNhbGMJCT0gJnVhcnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTZ4eCA9IHsKLQkubmFtZQkJPSAidWFydDNfY2siLAotCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwotCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gMzEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrbyA9IHsJLyogNiBNSHogb3V0cHV0IG9uIFc0X1VTQl9DTEtPICovCi0JLm5hbWUJCT0gInVzYl9jbGtvIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA2MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBVTFBEX0NMT0NLX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBVU0JfTUNMS19FTl9CSVQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTUxMCA9IHsKLQkubmFtZQkJPSAidXNiX2hoY19jayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCi0JLnJhdGUJCT0gNDgwMDAwMDAsIC8qIEFjdHVhbGx5IDIgY2xvY2tzLCAxMk1IeiBhbmQgNDhNSHogKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9IE1PRF9DT05GX0NUUkxfMCwKLQkuZW5hYmxlX2JpdAk9IFVTQl9IT1NUX0hIQ19VSE9TVF9FTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9oaGNfY2sxNnh4ID0gewotCS5uYW1lCQk9ICJ1c2JfaGhjX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkvKiBPVEdfU1lTQ09OXzIuT1RHX1BBREVOID09IDAgKG5vdCAxNTEwLWNvbXBhdGlibGUpICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBPVEdfQkFTRSArIDB4MDggLyogT1RHX1NZU0NPTl8yICovLAotCS5lbmFibGVfYml0CT0gOCAvKiBVSE9TVF9FTiAqLywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9kY19jayA9IHsKLQkubmFtZQkJPSAidXNiX2RjX2NrIiwKLQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBSQVRFX0ZJWEVELAotCS5lbmFibGVfcmVnCT0gU09GVF9SRVFfUkVHLAotCS5lbmFibGVfYml0CT0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTUxMCA9IHsKLQkubmFtZQkJPSAibWNsayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKLQkubmFtZQkJPSAibWNsayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gQ09NX0NMS19ESVZfQ1RSTF9TRUwsCi0JLmVuYWJsZV9iaXQJPSBDT01fVUxQRF9QTExfQ0xLX1JFUSwKLQkuc2V0X3JhdGUJPSAmc2V0X2V4dF9jbGtfcmF0ZSwKLQkucm91bmRfcmF0ZQk9ICZyb3VuZF9leHRfY2xrX3JhdGUsCi0JLmluaXQJCT0gJmluaXRfZXh0X2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKLQkubmFtZQkJPSAiYmNsayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTZ4eCA9IHsKLQkubmFtZQkJPSAiYmNsayIsCi0JLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gU1dEX0NMS19ESVZfQ1RSTF9TRUwsCi0JLmVuYWJsZV9iaXQJPSBTV0RfVUxQRF9QTExfQ0xLX1JFUSwKLQkuc2V0X3JhdGUJPSAmc2V0X2V4dF9jbGtfcmF0ZSwKLQkucm91bmRfcmF0ZQk9ICZyb3VuZF9leHRfY2xrX3JhdGUsCi0JLmluaXQJCT0gJmluaXRfZXh0X2NsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzFfY2siLAotCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwotCS5wYXJlbnQJCT0gJmFybXBlcl9jaywKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gTU9EX0NPTkZfQ1RSTF8wLAotCS5lbmFibGVfYml0CT0gMjMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewotCS5uYW1lCQk9ICJtbWMyX2NrIiwKLQkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KLQkucGFyZW50CQk9ICZhcm1wZXJfY2ssCi0JLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSBNT0RfQ09ORl9DVFJMXzAsCi0JLmVuYWJsZV9iaXQJPSAyMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnR1YWxfY2tfbXB1ID0gewotCS5uYW1lCQk9ICJtcHUiLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgVklSVFVBTF9DTE9DSyB8IEFMV0FZU19FTkFCTEVELAotCS5wYXJlbnQJCT0gJmFybV9jaywgLyogSXMgc21hcnRlciBhbGlhcyBmb3IgKi8KLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5zZXRfcmF0ZQk9ICZzZWxlY3RfdGFibGVfcmF0ZSwKLQkucm91bmRfcmF0ZQk9ICZyb3VuZF90b190YWJsZV9yYXRlLAotfTsKLQotCi1zdGF0aWMgc3RydWN0IGNsayAqICBvbmNoaXBfY2xrc1tdID0gewotCS8qIG5vbi1VTFBEIGNsb2NrcyAqLwotCSZja19yZWYsCi0JJmNrX2RwbGwxLAotCS8qIENLX0dFTjEgY2xvY2tzICovCi0JJmNrX2RwbGwxb3V0LAotCSZhcm1fY2ssCi0JJmFybXBlcl9jaywKLQkmYXJtX2dwaW9fY2ssCi0JJmFybXhvcl9jaywKLQkmYXJtdGltX2NrLAotCSZhcm13ZHRfY2ssCi0JJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAotCS8qIENLX0dFTjIgY2xvY2tzICovCi0JJmRzcF9jaywKLQkmZHNwbW11X2NrLAotCSZkc3BwZXJfY2ssCi0JJmRzcHhvcl9jaywKLQkmZHNwdGltX2NrLAotCS8qIENLX0dFTjMgY2xvY2tzICovCi0JJnRjX2NrLAotCSZ0aXBiX2NrLAotCSZsM19vY3BpX2NrLAotCSZ0YzFfY2ssCi0JJnRjMl9jaywKLQkmZG1hX2NrLAotCSZkbWFfbGNkZnJlZV9jaywKLQkmYXBpX2NrLAotCSZsYl9jaywKLQkmcmhlYTFfY2ssCi0JJnJoZWEyX2NrLAotCSZsY2RfY2ssCi0JLyogVUxQRCBjbG9ja3MgKi8KLQkmdWFydDFfMTUxMCwKLQkmdWFydDFfMTZ4eCwKLQkmdWFydDJfY2ssCi0JJnVhcnQzXzE1MTAsCi0JJnVhcnQzXzE2eHgsCi0JJnVzYl9jbGtvLAotCSZ1c2JfaGhjX2NrMTUxMCwgJnVzYl9oaGNfY2sxNnh4LAotCSZ1c2JfZGNfY2ssCi0JJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCi0JJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCi0JJm1tYzFfY2ssCi0JJm1tYzJfY2ssCi0JLyogVmlydHVhbCBjbG9ja3MgKi8KLQkmdmlydHVhbF9ja19tcHUsCi19OwotCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCitzdHJ1Y3QgY2xrICogY2xrX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQogewogCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwogCkBAIC01OTAsNiArNTMsODkgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2dldCk7CiAKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChjbGstPmVuYWJsZSkKKwkJcmV0ID0gY2xrLT5lbmFibGUoY2xrKTsKKwllbHNlIGlmIChhcmNoX2Nsb2NrLT5jbGtfZW5hYmxlKQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZW5hYmxlKGNsayk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBlbmFibGUgY2xvY2sgJXNcbiIsIGNsay0+bmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5kaXNhYmxlKQorCQljbGstPmRpc2FibGUoY2xrKTsKKwllbHNlIGlmIChhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2Rpc2FibGUoY2xrKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGRpc2FibGUgY2xvY2sgJXNcbiIsIGNsay0+bmFtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19kaXNhYmxlKTsKKworaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa191c2UpCisJCXJldCA9IGFyY2hfY2xvY2stPmNsa191c2UoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191c2UpOworCit2b2lkIGNsa191bnVzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3VudXNlKQorCQlhcmNoX2Nsb2NrLT5jbGtfdW51c2UoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKKworaW50IGNsa19nZXRfdXNlY291bnQoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJcmV0ID0gY2xrLT51c2Vjb3VudDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfdXNlY291bnQpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJcmV0ID0gY2xrLT5yYXRlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKIAogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTU5OCw1MjYgKzE0NCwxMDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3B1dCk7CiAKLQotaW50IF9fY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX191MTYgcmVndmFsMTY7Ci0JX191MzIgcmVndmFsMzI7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKQotCQlyZXR1cm4gMDsKLQotCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCi0JCSAgICAgICBjbGstPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJX19jbGtfdXNlKCZhcGlfY2spOwotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKLQkJCXJlZ3ZhbDE2ID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2IHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlvbWFwX3dyaXRldyhyZWd2YWwxNiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfQotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykgewotCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIF9fY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9fdTE2IHJlZ3ZhbDE2OwotCV9fdTMyIHJlZ3ZhbDMyOwotCi0JaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSAwKQotCQlyZXR1cm47Ci0KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJX19jbGtfdXNlKCZhcGlfY2spOwotCX0KLQotCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZWwocmVndmFsMzIsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQl9Ci0KLQlpZiAoY2xrLT5mbGFncyAmIERTUF9ET01BSU5fQ0xPQ0spIHsKLQkJX19jbGtfdW51c2UoJmFwaV9jayk7Ci0JfQotfQotCi0KLXZvaWQgX19jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKLQkJX19jbGtfZGlzYWJsZShjbGspOwotCQlpZiAobGlrZWx5KGNsay0+cGFyZW50KSkKLQkJCV9fY2xrX3VudXNlKGNsay0+cGFyZW50KTsKLQl9Ci19Ci0KLQotaW50IF9fY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IHJldCA9IDA7Ci0JaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7Ci0JCWlmIChsaWtlbHkoY2xrLT5wYXJlbnQpKQotCQkJcmV0ID0gX19jbGtfdXNlKGNsay0+cGFyZW50KTsKLQotCQlpZiAodW5saWtlbHkocmV0ICE9IDApKSB7Ci0JCQljbGstPnVzZWNvdW50LS07Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gX19jbGtfZW5hYmxlKGNsayk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgewotCQkJX19jbGtfdW51c2UoY2xrLT5wYXJlbnQpOwotCQkJY2xrLT51c2Vjb3VudC0tOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotCi1pbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCXJldCA9IF9fY2xrX2VuYWJsZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOwotCi0KLXZvaWQgY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JX19jbGtfZGlzYWJsZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7Ci0KLQotaW50IGNsa191c2Uoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gX19jbGtfdXNlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3VzZSk7Ci0KLQotdm9pZCBjbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JX19jbGtfdW51c2UoY2xrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX3VudXNlKTsKLQotCi1pbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCi17Ci0gICAgICAgIHJldHVybiBjbGstPnVzZWNvdW50OwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3VzZWNvdW50KTsKLQotCi11bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+cmF0ZTsKLX0KLUVYUE9SVF9TWU1CT0woY2xrX2dldF9yYXRlKTsKLQotCi1zdGF0aWMgX191MTYgdmVyaWZ5X2NrY3RsX3ZhbHVlKF9fdTE2IG5ld3ZhbCkKLXsKLQkvKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgZm9sbG93aW5nIGxpbWl0YXRpb25zIHNldAotCSAqIGJ5IHRoZSBoYXJkd2FyZSAoYWxsIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlKToKLQkgKiBEU1BNTVVfQ0sgPT0gRFNQX0NLICBvciAgRFNQTU1VX0NLID09IERTUF9DSy8yCi0JICogQVJNX0NLID49IFRDX0NLCi0JICogRFNQX0NLID49IFRDX0NLCi0JICogRFNQTU1VX0NLID49IFRDX0NLCi0JICoKLQkgKiBJbiBhZGRpdGlvbiBmb2xsb3dpbmcgcnVsZXMgYXJlIGVuZm9yY2VkOgotCSAqIExDRF9DSyA8PSBUQ19DSwotCSAqIEFSTVBFUl9DSyA8PSBUQ19DSwotCSAqCi0JICogSG93ZXZlciwgbWF4aW11bSBmcmVxdWVuY2llcyBhcmUgbm90IGNoZWNrZWQgZm9yIQotCSAqLwotCV9fdTggcGVyX2V4cDsKLQlfX3U4IGxjZF9leHA7Ci0JX191OCBhcm1fZXhwOwotCV9fdTggZHNwX2V4cDsKLQlfX3U4IHRjX2V4cDsKLQlfX3U4IGRzcG1tdV9leHA7Ci0KLQlwZXJfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9QRVJESVZfT0ZGU0VUKSAmIDM7Ci0JbGNkX2V4cCA9IChuZXd2YWwgPj4gQ0tDVExfTENERElWX09GRlNFVCkgJiAzOwotCWFybV9leHAgPSAobmV3dmFsID4+IENLQ1RMX0FSTURJVl9PRkZTRVQpICYgMzsKLQlkc3BfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9EU1BESVZfT0ZGU0VUKSAmIDM7Ci0JdGNfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9UQ0RJVl9PRkZTRVQpICYgMzsKLQlkc3BtbXVfZXhwID0gKG5ld3ZhbCA+PiBDS0NUTF9EU1BNTVVESVZfT0ZGU0VUKSAmIDM7Ci0KLQlpZiAoZHNwbW11X2V4cCA8IGRzcF9leHApCi0JCWRzcG1tdV9leHAgPSBkc3BfZXhwOwotCWlmIChkc3BtbXVfZXhwID4gZHNwX2V4cCsxKQotCQlkc3BtbXVfZXhwID0gZHNwX2V4cCsxOwotCWlmICh0Y19leHAgPCBhcm1fZXhwKQotCQl0Y19leHAgPSBhcm1fZXhwOwotCWlmICh0Y19leHAgPCBkc3BtbXVfZXhwKQotCQl0Y19leHAgPSBkc3BtbXVfZXhwOwotCWlmICh0Y19leHAgPiBsY2RfZXhwKQotCQlsY2RfZXhwID0gdGNfZXhwOwotCWlmICh0Y19leHAgPiBwZXJfZXhwKQotCQlwZXJfZXhwID0gdGNfZXhwOwotCi0JbmV3dmFsICY9IDB4ZjAwMDsKLQluZXd2YWwgfD0gcGVyX2V4cCA8PCBDS0NUTF9QRVJESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSBsY2RfZXhwIDw8IENLQ1RMX0xDRERJVl9PRkZTRVQ7Ci0JbmV3dmFsIHw9IGFybV9leHAgPDwgQ0tDVExfQVJNRElWX09GRlNFVDsKLQluZXd2YWwgfD0gZHNwX2V4cCA8PCBDS0NUTF9EU1BESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSB0Y19leHAgPDwgQ0tDVExfVENESVZfT0ZGU0VUOwotCW5ld3ZhbCB8PSBkc3BtbXVfZXhwIDw8IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQ7Ci0KLQlyZXR1cm4gbmV3dmFsOwotfQotCi0KLXN0YXRpYyBpbnQgY2FsY19kc29yX2V4cChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQkvKiBOb3RlOiBJZiB0YXJnZXQgZnJlcXVlbmN5IGlzIHRvbyBsb3csIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gNCwKLQkgKiB3aGljaCBpcyBpbnZhbGlkIHZhbHVlLiBDYWxsZXIgbXVzdCBjaGVjayBmb3IgdGhpcyB2YWx1ZSBhbmQgYWN0Ci0JICogYWNjb3JkaW5nbHkuCi0JICoKLQkgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIGZvciBmb2xsb3dpbmcgbGltaXRhdGlvbnMgc2V0Ci0JICogYnkgdGhlIGhhcmR3YXJlIChhbGwgY29uZGl0aW9ucyBtdXN0IGJlIHRydWUpOgotCSAqIERTUE1NVV9DSyA9PSBEU1BfQ0sgIG9yICBEU1BNTVVfQ0sgPT0gRFNQX0NLLzIKLQkgKiBBUk1fQ0sgPj0gVENfQ0sKLQkgKiBEU1BfQ0sgPj0gVENfQ0sKLQkgKiBEU1BNTVVfQ0sgPj0gVENfQ0sKLQkgKi8KLQl1bnNpZ25lZCBsb25nIHJlYWxyYXRlOwotCXN0cnVjdCBjbGsgKiAgcGFyZW50OwotCXVuc2lnbmVkICBkc29yX2V4cDsKLQotCWlmICh1bmxpa2VseSghKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGFyZW50ID0gY2xrLT5wYXJlbnQ7Ci0JaWYgKHVubGlrZWx5KHBhcmVudCA9PSAwKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZWFscmF0ZSA9IHBhcmVudC0+cmF0ZTsKLQlmb3IgKGRzb3JfZXhwPTA7IGRzb3JfZXhwPDQ7IGRzb3JfZXhwKyspIHsKLQkJaWYgKHJlYWxyYXRlIDw9IHJhdGUpCi0JCQlicmVhazsKLQotCQlyZWFscmF0ZSAvPSAyOwotCX0KLQotCXJldHVybiBkc29yX2V4cDsKLX0KLQotCi1zdGF0aWMgdm9pZCBja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqICBjbGspCi17Ci0JaW50IGRzb3I7Ci0KLQkvKiBDYWxjdWxhdGUgZGl2aXNvciBlbmNvZGVkIGFzIDItYml0IGV4cG9uZW50ICovCi0JaWYgKGNsay0+ZmxhZ3MgJiBEU1BfRE9NQUlOX0NMT0NLKSB7Ci0JCS8qIFRoZSBjbG9jayBjb250cm9sIGJpdHMgYXJlIGluIERTUCBkb21haW4sCi0JCSAqIHNvIGFwaV9jayBpcyBuZWVkZWQgZm9yIGFjY2Vzcy4KLQkJICogTm90ZSB0aGF0IERTUF9DS0NUTCB2aXJ0IGFkZHIgPSBwaHlzIGFkZHIsIHNvCi0JCSAqIHdlIG11c3QgdXNlIF9fcmF3X3JlYWR3KCkgaW5zdGVhZCBvZiBvbWFwX3JlYWR3KCkuCi0JCSAqLwotCQlfX2Nsa191c2UoJmFwaV9jayk7Ci0JCWRzb3IgPSAxIDw8ICgzICYgKF9fcmF3X3JlYWR3KERTUF9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwotCQlfX2Nsa191bnVzZSgmYXBpX2NrKTsKLQl9IGVsc2UgewotCQlkc29yID0gMSA8PCAoMyAmIChvbWFwX3JlYWR3KEFSTV9DS0NUTCkgPj4gY2xrLT5yYXRlX29mZnNldCkpOwotCX0KLQlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcikpCi0JCXJldHVybjsgLyogTm8gY2hhbmdlLCBxdWljayBleGl0ICovCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOwotfQotCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9wdGlvbmFsIGNsb2NrIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGFzbS9oYXJkd2FyZS9jbG9jay5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWludCBkc29yX2V4cDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWxvbmcgcmV0ID0gMDsKIAotCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKLQkJcmV0dXJuIGNsay0+cmF0ZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19yb3VuZF9yYXRlKQorCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSB7Ci0JCWRzb3JfZXhwID0gY2FsY19kc29yX2V4cChjbGssIHJhdGUpOwotCQlpZiAoZHNvcl9leHAgPCAwKQotCQkJcmV0dXJuIGRzb3JfZXhwOwotCQlpZiAoZHNvcl9leHAgPiAzKQotCQkJZHNvcl9leHAgPSAzOwotCQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JfQotCi0JaWYoY2xrLT5yb3VuZF9yYXRlICE9IDApCi0JCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQotCXJldHVybiBjbGstPnJhdGU7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3JvdW5kX3JhdGUpOwogCi0KLXN0YXRpYyB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKiAgY2xrKQotewotCXN0cnVjdCBjbGsgKiogIGNsa3A7Ci0KLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKLQkJaWYgKGxpa2VseSgoKmNsa3ApLT5wYXJlbnQgIT0gY2xrKSkgY29udGludWU7Ci0JCWlmIChsaWtlbHkoKCpjbGtwKS0+cmVjYWxjKSkKLQkJCSgqY2xrcCktPnJlY2FsYygqY2xrcCk7Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgPD0gcmF0ZSBhbmQgc3dpdGNoIHRvIGl0ICovCi0Jc3RydWN0IG1wdV9yYXRlICogIHB0cjsKLQotCWlmIChjbGsgIT0gJnZpcnR1YWxfY2tfbXB1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5yYXRlOyBwdHIrKykgewotCQlpZiAocHRyLT54dGFsICE9IGNrX3JlZi5yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogRFBMTDEgY2Fubm90IGJlIHJlcHJvZ3JhbW1lZCB3aXRob3V0IHJpc2tpbmcgc3lzdGVtIGNyYXNoICovCi0JCWlmIChsaWtlbHkoY2tfZHBsbDEucmF0ZSE9MCkgJiYgcHRyLT5wbGxfcmF0ZSAhPSBja19kcGxsMS5yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KLQkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKCFwdHItPnJhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKLQkgKiBJbiBtb3N0IGNhc2VzIHdlIHNob3VsZCBub3QgbmVlZCB0byByZXByb2dyYW0gRFBMTC4KLQkgKiBSZXByb2dyYW1taW5nIHRoZSBEUExMIGlzIHRyaWNreSwgaXQgbXVzdCBiZSBkb25lIGZyb20gU1JBTS4KLQkgKi8KLQlvbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKHB0ci0+ZHBsbGN0bF92YWwsIHB0ci0+Y2tjdGxfdmFsKTsKLQotCWNrX2RwbGwxLnJhdGUgPSBwdHItPnBsbF9yYXRlOwotCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGxvbmcgcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogIGNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qIEZpbmQgdGhlIGhpZ2hlc3Qgc3VwcG9ydGVkIGZyZXF1ZW5jeSA8PSByYXRlICovCi0Jc3RydWN0IG1wdV9yYXRlICogIHB0cjsKLQlsb25nICBoaWdoZXN0X3JhdGU7Ci0KLQlpZiAoY2xrICE9ICZ2aXJ0dWFsX2NrX21wdSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOwotCi0JZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPnJhdGU7IHB0cisrKSB7Ci0JCWlmIChwdHItPnh0YWwgIT0gY2tfcmVmLnJhdGUpCi0JCQljb250aW51ZTsKLQotCQloaWdoZXN0X3JhdGUgPSBwdHItPnJhdGU7Ci0KLQkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KLQkJaWYgKHB0ci0+cmF0ZSA8PSByYXRlKQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKLX0KLQotCiBpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWludCAgcmV0ID0gLUVJTlZBTDsKLQlpbnQgIGRzb3JfZXhwOwotCV9fdTE2ICByZWd2YWw7Ci0JdW5zaWduZWQgbG9uZyAgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKIAotCWlmIChjbGstPmZsYWdzICYgUkFURV9DS0NUTCkgewotCQlkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKLQkJaWYgKGRzb3JfZXhwID4gMykKLQkJCWRzb3JfZXhwID0gLUVJTlZBTDsKLQkJaWYgKGRzb3JfZXhwIDwgMCkKLQkJCXJldHVybiBkc29yX2V4cDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JCXJlZ3ZhbCA9IG9tYXBfcmVhZHcoQVJNX0NLQ1RMKTsKLQkJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKLQkJcmVndmFsIHw9IGRzb3JfZXhwIDw8IGNsay0+cmF0ZV9vZmZzZXQ7Ci0JCXJlZ3ZhbCA9IHZlcmlmeV9ja2N0bF92YWx1ZShyZWd2YWwpOwotCQlvbWFwX3dyaXRldyhyZWd2YWwsIEFSTV9DS0NUTCk7Ci0JCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gMDsKLQl9IGVsc2UgaWYoY2xrLT5zZXRfcmF0ZSAhPSAwKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQl9Ci0KLQlpZiAodW5saWtlbHkocmV0ID09IDAgJiYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19zZXRfcmF0ZSkKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKGNsaywgcmF0ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOwogCi0KLXN0YXRpYyB1bnNpZ25lZCBjYWxjX2V4dF9kc29yKHVuc2lnbmVkIGxvbmcgcmF0ZSkKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKLQl1bnNpZ25lZCBkc29yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CiAKLQkvKiBNQ0xLIGFuZCBCQ0xLIGRpdmlzb3Igc2VsZWN0aW9uIGlzIG5vdCBsaW5lYXI6Ci0JICogZnJlcSA9IDk2TUh6IC8gZHNvcgotCSAqCi0JICogUkFUSU9fU0VMIHJhbmdlOiBkc29yIDwtPiBSQVRJT19TRUwKLQkgKiAwLi42OiAoUkFUSU9fU0VMKzIpIDwtPiAoZHNvci0yKQotCSAqIDYuLjQ4OiAgKDgrKFJBVElPX1NFTC02KSoyKSA8LT4gKChkc29yLTgpLzIrNikKLQkgKiBNaW5pbXVtIGRzb3IgaXMgMiBhbmQgbWF4aW11bSBpcyA5Ni4gT2RkIGRpdmlzb3JzIHN0YXJ0aW5nIGZyb20gOQotCSAqIGNhbiBub3QgYmUgdXNlZC4KLQkgKi8KLQlmb3IgKGRzb3IgPSAyOyBkc29yIDwgOTY7ICsrZHNvcikgewotCQlpZiAoKGRzb3IgJiAxKSAmJiBkc29yID4gOCkKLQkJICAJY29udGludWU7Ci0JCWlmIChyYXRlID49IDk2MDAwMDAwIC8gZHNvcikKLQkJCWJyZWFrOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9wYXJlbnQpCisJCXJldCA9ICBhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudChjbGssIHBhcmVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjbGsgKiByZXQgPSBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudCkKKwkJcmV0ID0gYXJjaF9jbG9jay0+Y2xrX2dldF9wYXJlbnQoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQIHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucyBzaGFyZWQgYmV0d2VlbiBvbWFwMSBhbmQgb21hcDIKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3Vuc2lnbmVkIGludCBfX2luaXRkYXRhIG1wdXJhdGU7CisKKy8qCisgKiBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgcmF0ZSBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIuCisgKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgd2l0aCBtcHVyYXRlPSBjbWRsaW5lIG9wdGlvbi4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9jbGtfc2V0dXAoY2hhciAqc3RyKQoreworCWdldF9vcHRpb24oJnN0ciwgJm1wdXJhdGUpOworCisJaWYgKCFtcHVyYXRlKQorCQlyZXR1cm4gMTsKKworCWlmIChtcHVyYXRlIDwgMTAwMCkKKwkJbXB1cmF0ZSAqPSAxMDAwMDAwOworCisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJtcHVyYXRlPSIsIG9tYXBfY2xrX3NldHVwKTsKKworLyogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYWx3YXlzIGhhdmUgc2FtZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrICovCit2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOworfQorCisvKiBQcm9wYWdhdGUgcmF0ZSB0byBjaGlsZHJlbiAqLwordm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICogdGNsaykKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChsaWtlbHkoY2xrcC0+cGFyZW50ICE9IHRjbGspKQorCQkJY29udGludWU7CisJCWlmIChsaWtlbHkoKHUzMiljbGtwLT5yZWNhbGMpKQorCQkJY2xrcC0+cmVjYWxjKGNsa3ApOwogCX0KLQlyZXR1cm4gZHNvcjsKIH0KIAotLyogT25seSBuZWVkZWQgb24gMTUxMCAqLwotc3RhdGljIGludCBzZXRfdWFydF9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsOwotCi0JdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCWlmIChyYXRlID09IDEyMDAwMDAwKQotCQl2YWwgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JZWxzZSBpZiAocmF0ZSA9PSA0ODAwMDAwMCkKLQkJdmFsIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlvbWFwX3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JY2xrLT5yYXRlID0gcmF0ZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBkc29yOwotCV9fdTE2IHJhdGlvX2JpdHM7Ci0KLQlkc29yID0gY2FsY19leHRfZHNvcihyYXRlKTsKLQljbGstPnJhdGUgPSA5NjAwMDAwMCAvIGRzb3I7Ci0JaWYgKGRzb3IgPiA4KQotCQlyYXRpb19iaXRzID0gKChkc29yIC0gOCkgLyAyICsgNikgPDwgMjsKLQllbHNlCi0JCXJhdGlvX2JpdHMgPSAoZHNvciAtIDIpIDw8IDI7Ci0KLQlyYXRpb19iaXRzIHw9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgbG9uZyByb3VuZF9leHRfY2xrX3JhdGUoc3RydWN0IGNsayAqICBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlyZXR1cm4gOTYwMDAwMDAgLyBjYWxjX2V4dF9kc29yKHJhdGUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGluaXRfZXh0X2NsayhzdHJ1Y3QgY2xrICogIGNsaykKLXsKLQl1bnNpZ25lZCBkc29yOwotCV9fdTE2IHJhdGlvX2JpdHM7Ci0KLQkvKiBEZXRlcm1pbmUgY3VycmVudCByYXRlIGFuZCBlbnN1cmUgY2xvY2sgaXMgYmFzZWQgb24gOTZNSHogQVBMTCAqLwotCXJhdGlvX2JpdHMgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKLQlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOwotCi0JcmF0aW9fYml0cyA9IChyYXRpb19iaXRzICYgMHhmYykgPj4gMjsKLQlpZiAocmF0aW9fYml0cyA+IDYpCi0JCWRzb3IgPSAocmF0aW9fYml0cyAtIDYpICogMiArIDg7Ci0JZWxzZQotCQlkc29yID0gcmF0aW9fYml0cyArIDI7Ci0KLQljbGstPiByYXRlID0gOTYwMDAwMDAgLyBkc29yOwotfQotCi0KIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogewogCWRvd24oJmNsb2Nrc19zZW0pOwpAQCAtMTEyNSw2ICsyNTQsNyBAQAogCWlmIChjbGstPmluaXQpCiAJCWNsay0+aW5pdChjbGspOwogCXVwKCZjbG9ja3Nfc2VtKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChjbGtfcmVnaXN0ZXIpOwpAQCAtMTEzNywyMDMgKzI2NywzOCBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CiAKLSNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKLS8qCi0gKiBSZXNldHMgc29tZSBjbG9ja3MgdGhhdCBtYXkgYmUgbGVmdCBvbiBmcm9tIGJvb3Rsb2FkZXIsCi0gKiBidXQgbGVhdmVzIHNlcmlhbCBjbG9ja3Mgb24uIFNlZSBhbHNvIG9tYXBfbGF0ZV9jbGtfcmVzZXQoKS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG9tYXBfZWFybHlfY2xrX3Jlc2V0KHZvaWQpCit2b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQogewotCS8vb21hcF93cml0ZWwoMHgzIDw8IDI5LCBNT0RfQ09ORl9DVFJMXzApOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJaWYgKGFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUpCisJCWFyY2hfY2xvY2stPmNsa19kZW55X2lkbGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIH0KLSNlbHNlCi0jZGVmaW5lIG9tYXBfZWFybHlfY2xrX3Jlc2V0KCkJe30KLSNlbmRpZgorRVhQT1JUX1NZTUJPTChjbGtfZGVueV9pZGxlKTsKIAotaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQordm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0Jc3RydWN0IGNsayAqKiAgY2xrcDsKLQljb25zdCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcgKmluZm87Ci0JaW50IGNyeXN0YWxfdHlwZSA9IDA7IC8qIERlZmF1bHQgMTIgTUh6ICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCW9tYXBfZWFybHlfY2xrX3Jlc2V0KCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOworCWlmIChhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZSkKKwkJYXJjaF9jbG9jay0+Y2xrX2FsbG93X2lkbGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2FsbG93X2lkbGUpOwogCi0JZm9yIChjbGtwID0gb25jaGlwX2Nsa3M7IGNsa3AgPCBvbmNoaXBfY2xrcytBUlJBWV9TSVpFKG9uY2hpcF9jbGtzKTsgY2xrcCsrKSB7Ci0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNTEwKSAmJiBjcHVfaXNfb21hcDE1MTAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0JCWlmICgoKCpjbGtwKS0+ZmxhZ3MgJkNMT0NLX0lOX09NQVAxNlhYKSAmJiBjcHVfaXNfb21hcDE2eHgoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDczMCkgJiYgY3B1X2lzX29tYXA3MzAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9CitpbnQgX19pbml0IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICogY3VzdG9tX2Nsb2NrcykKK3sKKwlpZiAoIWN1c3RvbV9jbG9ja3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBjdXN0b20gY2xvY2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWRcbiIpOworCQlCVUcoKTsKIAl9CiAKLQlpbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX0NMT0NLLCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcpOwotCWlmIChpbmZvICE9IE5VTEwpIHsKLQkJaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkKLQkJCWNyeXN0YWxfdHlwZSA9IGluZm8tPnN5c3RlbV9jbG9ja190eXBlOwotCX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKLQlja19yZWYucmF0ZSA9IDEzMDAwMDAwOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLQlpZiAoY3J5c3RhbF90eXBlID09IDIpCi0JCWNrX3JlZi5yYXRlID0gMTkyMDAwMDA7Ci0jZW5kaWYKLQotCXByaW50aygiQ2xvY2tzOiBBUk1fU1lTU1Q6IDB4JTA0eCBEUExMX0NUTDogMHglMDR4IEFSTV9DS0NUTDogMHglMDR4XG4iLAotCSAgICAgICBvbWFwX3JlYWR3KEFSTV9TWVNTVCksIG9tYXBfcmVhZHcoRFBMTF9DVEwpLAotCSAgICAgICBvbWFwX3JlYWR3KEFSTV9DS0NUTCkpOwotCi0JLyogV2Ugd2FudCB0byBiZSBpbiBzeW5jcm9ub3VzIHNjYWxhYmxlIG1vZGUgKi8KLQlvbWFwX3dyaXRldygweDEwMDAsIEFSTV9TWVNTVCk7Ci0KLSNpZmRlZiBDT05GSUdfT01BUF9DTE9DS1NfU0VUX0JZX0JPT1RMT0FERVIKLQkvKiBVc2UgdmFsdWVzIHNldCBieSBib290bG9hZGVyLiBEZXRlcm1pbmUgUExMIHJhdGUgYW5kIHJlY2FsY3VsYXRlCi0JICogZGVwZW5kZW50IGNsb2NrcyBhcyBpZiBrZXJuZWwgaGFkIGNoYW5nZWQgUExMIG9yIGRpdmlzb3JzLgotCSAqLwotCXsKLQkJdW5zaWduZWQgcGxsX2N0bF92YWwgPSBvbWFwX3JlYWR3KERQTExfQ1RMKTsKLQotCQlja19kcGxsMS5yYXRlID0gY2tfcmVmLnJhdGU7IC8qIEJhc2UgeHRhbCByYXRlICovCi0JCWlmIChwbGxfY3RsX3ZhbCAmIDB4MTApIHsKLQkJCS8qIFBMTCBlbmFibGVkLCBhcHBseSBtdWx0aXBsaWVyIGFuZCBkaXZpc29yICovCi0JCQlpZiAocGxsX2N0bF92YWwgJiAweGY4MCkKLQkJCQlja19kcGxsMS5yYXRlICo9IChwbGxfY3RsX3ZhbCAmIDB4ZjgwKSA+PiA3OwotCQkJY2tfZHBsbDEucmF0ZSAvPSAoKHBsbF9jdGxfdmFsICYgMHg2MCkgPj4gNSkgKyAxOwotCQl9IGVsc2UgewotCQkJLyogUExMIGRpc2FibGVkLCBhcHBseSBieXBhc3MgZGl2aXNvciAqLwotCQkJc3dpdGNoIChwbGxfY3RsX3ZhbCAmIDB4YykgewotCQkJY2FzZSAwOgotCQkJCWJyZWFrOwotCQkJY2FzZSAweDQ6Ci0JCQkJY2tfZHBsbDEucmF0ZSAvPSAyOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlja19kcGxsMS5yYXRlIC89IDQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKLSNlbHNlCi0JLyogRmluZCB0aGUgaGlnaGVzdCBzdXBwb3J0ZWQgZnJlcXVlbmN5IGFuZCBlbmFibGUgaXQgKi8KLQlpZiAoc2VsZWN0X3RhYmxlX3JhdGUoJnZpcnR1YWxfY2tfbXB1LCB+MCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTeXN0ZW0gZnJlcXVlbmNpZXMgbm90IHNldC4gQ2hlY2sgeW91ciBjb25maWcuXG4iKTsKLQkJLyogR3Vlc3Mgc2FuZSB2YWx1ZXMgKDYwTUh6KSAqLwotCQlvbWFwX3dyaXRldygweDIyOTAsIERQTExfQ1RMKTsKLQkJb21hcF93cml0ZXcoMHgxMDA1LCBBUk1fQ0tDVEwpOwotCQlja19kcGxsMS5yYXRlID0gNjAwMDAwMDA7Ci0JCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7Ci0JfQotI2VuZGlmCi0JLyogQ2FjaGUgcmF0ZXMgZm9yIGNsb2NrcyBjb25uZWN0ZWQgdG8gY2tfcmVmIChub3QgZHBsbDEpICovCi0JcHJvcGFnYXRlX3JhdGUoJmNrX3JlZik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoeHRhbC9EUExMMS9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLiUwMWxkLyVsZC4lMDFsZCBNSHpcbiIsCi0JICAgICAgIGNrX3JlZi5yYXRlIC8gMTAwMDAwMCwgKGNrX3JlZi5yYXRlIC8gMTAwMDAwKSAlIDEwLAotCSAgICAgICBja19kcGxsMS5yYXRlIC8gMTAwMDAwMCwgKGNrX2RwbGwxLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIGFybV9jay5yYXRlIC8gMTAwMDAwMCwgKGFybV9jay5yYXRlIC8gMTAwMDAwKSAlIDEwKTsKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEVSU0VVUzIKLQkvKiBTZWxlY3Qgc2xpY2VyIG91dHB1dCBhcyBPTUFQIGlucHV0IGNsb2NrICovCi0Jb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQNzMwX1BDQ19VUExEX0NUUkwpICYgfjB4MSwgT01BUDczMF9QQ0NfVVBMRF9DVFJMKTsKLSNlbmRpZgotCi0JLyogVHVybiBvZmYgRFNQIGFuZCBBUk1fVElNWE8uIE1ha2Ugc3VyZSBBUk1fSU5USENLIGlzIG5vdCBkaXZpZGVkICovCi0Jb21hcF93cml0ZXcob21hcF9yZWFkdyhBUk1fQ0tDVEwpICYgMHgwZmZmLCBBUk1fQ0tDVEwpOwotCi0JLyogUHV0IERTUC9NUFVJIGludG8gcmVzZXQgdW50aWwgbmVlZGVkICovCi0Jb21hcF93cml0ZXcoMCwgQVJNX1JTVENUMSk7Ci0Jb21hcF93cml0ZXcoMSwgQVJNX1JTVENUMik7Ci0Jb21hcF93cml0ZXcoMHg0MDAsIEFSTV9JRExFQ1QxKTsKLQotCS8qCi0JICogQWNjb3JkaW5nIHRvIE9NQVA1OTEwIEVycmF0dW0gU1lTX0RNQV8xLCBiaXQgRE1BQ0tfUkVRIChiaXQgOCkKLQkgKiBvZiB0aGUgQVJNX0lETEVDVDIgcmVnaXN0ZXIgbXVzdCBiZSBzZXQgdG8gemVyby4gVGhlIHBvd2VyLW9uCi0JICogZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIGJpdCBpcyBvbmUuCi0JICovCi0Jb21hcF93cml0ZXcoMHgwMDAwLCBBUk1fSURMRUNUMik7CS8qIFR1cm4gTENEIGNsb2NrIG9mZiBhbHNvICovCi0KLQkvKgotCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycwotCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5Ci0JICovCi0JY2xrX3VzZSgmYXJtcGVyX2NrKTsKLQljbGtfdXNlKCZhcm14b3JfY2spOwotCWNsa191c2UoJmFybXRpbV9jayk7Ci0KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCi0JCWNsa19lbmFibGUoJmFybV9ncGlvX2NrKTsKKwlhcmNoX2Nsb2NrID0gY3VzdG9tX2Nsb2NrczsKIAogCXJldHVybiAwOwogfQotCi0KLSNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKLQotc3RhdGljIGludCBfX2luaXQgb21hcF9sYXRlX2Nsa19yZXNldCh2b2lkKQotewotCS8qIFR1cm4gb2ZmIGFsbCB1bnVzZWQgY2xvY2tzICovCi0Jc3RydWN0IGNsayAqcDsKLQlfX3UzMiByZWd2YWwzMjsKLQotCS8qIFVTQl9SRVFfRU4gd2lsbCBiZSBkaXNhYmxlZCBsYXRlciBpZiBuZWNlc3NhcnkgKHVzYl9kY19jaykgKi8KLQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcoU09GVF9SRVFfUkVHKSAmICgxIDw8IDQpOwotCW9tYXBfd3JpdGV3KHJlZ3ZhbDMyLCBTT0ZUX1JFUV9SRUcpOwotCW9tYXBfd3JpdGV3KDAsIFNPRlRfUkVRX1JFRzIpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChwLT51c2Vjb3VudCA+IDAgfHwgKHAtPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpIHx8Ci0JCQlwLT5lbmFibGVfcmVnID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBBc3N1bWUgbm8gRFNQIGNsb2NrcyBoYXZlIGJlZW4gYWN0aXZhdGVkIGJ5IGJvb3Rsb2FkZXIgKi8KLQkJaWYgKHAtPmZsYWdzICYgRFNQX0RPTUFJTl9DTE9DSykKLQkJCWNvbnRpbnVlOwotCi0JCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLwotCQlpZiAocC0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChwLT5lbmFibGVfcmVnKTsKLQkJCWVsc2UKLQkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwocC0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhwLT5lbmFibGVfcmVnKTsKLQkJCWVsc2UKLQkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcocC0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQotCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgcC0+ZW5hYmxlX2JpdCkpID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQotCQkgKiBoYXMgYXNrZWQgZm9yIGl0cyBhY3RpdmF0aW9uLiAqLwotCQlpZiAocCA9PSAmdGMyX2NrICAgICAgICAgLy8gRklYOiBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEKLQkJICAgIHx8IHAgPT0gJmNrX2RwbGwxb3V0IC8vIEZJWDogU29TU0ksIFNTUgotCQkgICAgfHwgcCA9PSAmYXJtX2dwaW9fY2sgLy8gRklYOiBHUElPIGNvZGUgZm9yIDE1MTAKLQkJICAgICkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiRklYTUU6IENsb2NrIFwiJXNcIiBzZWVtcyB1bnVzZWRcbiIsCi0JCQkgICAgICAgcC0+bmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiLi4uICIsIHAtPm5hbWUpOwotCQlfX2Nsa19kaXNhYmxlKHApOwotCQlwcmludGsoIiBkb25lXG4iKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotbGF0ZV9pbml0Y2FsbChvbWFwX2xhdGVfY2xrX3Jlc2V0KTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODllMWU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIGNvcnBvcmF0aW9uCi0gKiAgV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KLSAqICBCYXNlZCBvbiBjbG9ja3MuaCBieSBUb255IExpbmRncmVuLCBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICi0jZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9DTE9DS19ICi0KLXN0cnVjdCBtb2R1bGU7Ci0KLXN0cnVjdCBjbGsgewotCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Ci0JY29uc3QgY2hhcgkJKm5hbWU7Ci0Jc3RydWN0IGNsawkJKnBhcmVudDsKLQl1bnNpZ25lZCBsb25nCQlyYXRlOwotCV9fczgJCQl1c2Vjb3VudDsKLQlfX3UxNgkJCWZsYWdzOwotCV9fdTMyCQkJZW5hYmxlX3JlZzsKLQlfX3U4CQkJZW5hYmxlX2JpdDsKLQlfX3U4CQkJcmF0ZV9vZmZzZXQ7Ci0Jdm9pZAkJCSgqcmVjYWxjKShzdHJ1Y3QgY2xrICopOwotCWludAkJCSgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7Ci0JbG9uZwkJCSgqcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKLQl2b2lkCQkJKCppbml0KShzdHJ1Y3QgY2xrICopOwotfTsKLQotCi1zdHJ1Y3QgbXB1X3JhdGUgewotCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0JdW5zaWduZWQgbG9uZwkJeHRhbDsKLQl1bnNpZ25lZCBsb25nCQlwbGxfcmF0ZTsKLQlfX3UxNgkJCWNrY3RsX3ZhbDsKLQlfX3UxNgkJCWRwbGxjdGxfdmFsOwotfTsKLQotCi0vKiBDbG9jayBmbGFncyAqLwotI2RlZmluZSBSQVRFX0NLQ1RMCQkxCi0jZGVmaW5lIFJBVEVfRklYRUQJCTIKLSNkZWZpbmUgUkFURV9QUk9QQUdBVEVTCQk0Ci0jZGVmaW5lIFZJUlRVQUxfQ0xPQ0sJCTgKLSNkZWZpbmUgQUxXQVlTX0VOQUJMRUQJCTE2Ci0jZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJMzIKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJNjQKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE1MTAJMTI4Ci0jZGVmaW5lIENMT0NLX0lOX09NQVA3MzAJMjU2Ci0jZGVmaW5lIERTUF9ET01BSU5fQ0xPQ0sJNTEyCi0jZGVmaW5lIFZJUlRVQUxfSU9fQUREUkVTUwkxMDI0Ci0KLS8qIEFSTV9DS0NUTCBiaXQgc2hpZnRzICovCi0jZGVmaW5lIENLQ1RMX1BFUkRJVl9PRkZTRVQJMAotI2RlZmluZSBDS0NUTF9MQ0RESVZfT0ZGU0VUCTIKLSNkZWZpbmUgQ0tDVExfQVJNRElWX09GRlNFVAk0Ci0jZGVmaW5lIENLQ1RMX0RTUERJVl9PRkZTRVQJNgotI2RlZmluZSBDS0NUTF9UQ0RJVl9PRkZTRVQJOAotI2RlZmluZSBDS0NUTF9EU1BNTVVESVZfT0ZGU0VUCTEwCi0vKiNkZWZpbmUgQVJNX1RJTVhPCQkxMiovCi0jZGVmaW5lIEVOX0RTUENLCQkxMwotLyojZGVmaW5lIEFSTV9JTlRIQ0tfU0VMCTE0Ki8gLyogRGl2aWRlLWJ5LTIgZm9yIG1wdSBpbnRoX2NrICovCi0vKiBEU1BfQ0tDVEwgYml0IHNoaWZ0cyAqLwotI2RlZmluZSBDS0NUTF9EU1BQRVJESVZfT0ZGU0VUCTAKLQotLyogQVJNX0lETEVDVDEgYml0IHNoaWZ0cyAqLwotLyojZGVmaW5lIElETFdEVF9BUk0JMCovCi0vKiNkZWZpbmUgSURMWE9SUF9BUk0JMSovCi0vKiNkZWZpbmUgSURMUEVSX0FSTQkyKi8KLS8qI2RlZmluZSBJRExMQ0RfQVJNCTMqLwotLyojZGVmaW5lIElETExCX0FSTQk0Ki8KLS8qI2RlZmluZSBJRExIU0FCX0FSTQk1Ki8KLS8qI2RlZmluZSBJRExJRl9BUk0JNiovCi0vKiNkZWZpbmUgSURMRFBMTF9BUk0JNyovCi0vKiNkZWZpbmUgSURMQVBJX0FSTQk4Ki8KLS8qI2RlZmluZSBJRExUSU1fQVJNCTkqLwotLyojZGVmaW5lIFNFVEFSTV9JRExFCTExKi8KLQotLyogQVJNX0lETEVDVDIgYml0IHNoaWZ0cyAqLwotI2RlZmluZSBFTl9XRFRDSwkwCi0jZGVmaW5lIEVOX1hPUlBDSwkxCi0jZGVmaW5lIEVOX1BFUkNLCTIKLSNkZWZpbmUgRU5fTENEQ0sJMwotI2RlZmluZSBFTl9MQkNLCQk0IC8qIE5vdCBvbiAxNjEwLzE3MTAgKi8KLS8qI2RlZmluZSBFTl9IU0FCQ0sJNSovCi0jZGVmaW5lIEVOX0FQSUNLCTYKLSNkZWZpbmUgRU5fVElNQ0sJNwotI2RlZmluZSBETUFDS19SRVEJOAotI2RlZmluZSBFTl9HUElPQ0sJOSAvKiBOb3Qgb24gMTYxMC8xNzEwICovCi0vKiNkZWZpbmUgRU5fTEJGUkVFQ0sJMTAqLwotI2RlZmluZSBFTl9DS09VVF9BUk0JMTEKLQotLyogQVJNX0lETEVDVDMgYml0IHNoaWZ0cyAqLwotI2RlZmluZSBFTl9PQ1BJX0NLCTAKLSNkZWZpbmUgRU5fVEMxX0NLCTIKLSNkZWZpbmUgRU5fVEMyX0NLCTQKLQotLyogRFNQX0lETEVDVDIgYml0IHNoaWZ0cyAoMCwxLDIgYXJlIHNhbWUgYXMgZm9yIEFSTV9JRExFQ1QyKSAqLwotI2RlZmluZSBFTl9EU1BUSU1DSwk1Ci0KLS8qIFZhcmlvdXMgcmVnaXN0ZXIgZGVmaW5lcyBmb3IgY2xvY2sgY29udHJvbHMgc2NhdHRlcmVkIGFyb3VuZCBPTUFQIGNoaXAgKi8KLSNkZWZpbmUgVVNCX01DTEtfRU5fQklUCQk0CS8qIEluIFVMUERfQ0xLQ19DVFJMICovCi0jZGVmaW5lIFVTQl9IT1NUX0hIQ19VSE9TVF9FTgk5CS8qIEluIE1PRF9DT05GX0NUUkxfMCAqLwotI2RlZmluZSBTV0RfVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIFNXRF9DTEtfRElWX0NUUkxfU0VMICovCi0jZGVmaW5lIENPTV9VTFBEX1BMTF9DTEtfUkVRCTEJLyogSW4gQ09NX0NMS19ESVZfQ1RSTF9TRUwgKi8KLSNkZWZpbmUgU1dEX0NMS19ESVZfQ1RSTF9TRUwJMHhmZmZlMDg3NAotI2RlZmluZSBDT01fQ0xLX0RJVl9DVFJMX1NFTAkweGZmZmUwODc4Ci0jZGVmaW5lIFNPRlRfUkVRX1JFRwkJMHhmZmZlMDgzNAotI2RlZmluZSBTT0ZUX1JFUV9SRUcyCQkweGZmZmUwODgwCi0KLWludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKLWludCBjbGtfaW5pdCh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggMDJiY2M2Yy4uY2NkYjQ1MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KICNpbmNsdWRlIDxhc20vYXJjaC9mcGdhLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CiAKICNkZWZpbmUgTk9fTEVOR1RIX0NIRUNLIDB4ZmZmZmZmZmYKIApAQCAtMTE3LDE5ICsxMTcsNDMgQEAKIAogc3RhdGljIGludCBfX2luaXQgb21hcF9hZGRfc2VyaWFsX2NvbnNvbGUodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgKmluZm87CisJY29uc3Qgc3RydWN0IG9tYXBfc2VyaWFsX2NvbnNvbGVfY29uZmlnICpjb25faW5mbzsKKwljb25zdCBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyAqdWFydF9pbmZvOworCXN0YXRpYyBjaGFyIHNwZWVkWzExXSwgKm9wdCA9IE5VTEw7CisJaW50IGxpbmUsIGksIHVhcnRfaWR4OwogCi0JaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19TRVJJQUxfQ09OU09MRSwKLQkJCSAgICAgICBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcpOwotCWlmIChpbmZvICE9IE5VTEwgJiYgaW5mby0+Y29uc29sZV91YXJ0KSB7Ci0JCXN0YXRpYyBjaGFyIHNwZWVkWzExXSwgKm9wdCA9IE5VTEw7CisJdWFydF9pbmZvID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VBUlQsIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnKTsKKwljb25faW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19TRVJJQUxfQ09OU09MRSwKKwkJCQkJc3RydWN0IG9tYXBfc2VyaWFsX2NvbnNvbGVfY29uZmlnKTsKKwlpZiAodWFydF9pbmZvID09IE5VTEwgfHwgY29uX2luZm8gPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKGluZm8tPmNvbnNvbGVfc3BlZWQpIHsKLQkJCXNucHJpbnRmKHNwZWVkLCBzaXplb2Yoc3BlZWQpLCAiJXUiLCBpbmZvLT5jb25zb2xlX3NwZWVkKTsKLQkJCW9wdCA9IHNwZWVkOwotCQl9Ci0JCXJldHVybiBhZGRfcHJlZmVycmVkX2NvbnNvbGUoInR0eVMiLCBpbmZvLT5jb25zb2xlX3VhcnQgLSAxLCBvcHQpOworCWlmIChjb25faW5mby0+Y29uc29sZV91YXJ0ID09IDApCisJCXJldHVybiAwOworCisJaWYgKGNvbl9pbmZvLT5jb25zb2xlX3NwZWVkKSB7CisJCXNucHJpbnRmKHNwZWVkLCBzaXplb2Yoc3BlZWQpLCAiJXUiLCBjb25faW5mby0+Y29uc29sZV9zcGVlZCk7CisJCW9wdCA9IHNwZWVkOwogCX0KLQlyZXR1cm4gMDsKKworCXVhcnRfaWR4ID0gY29uX2luZm8tPmNvbnNvbGVfdWFydCAtIDE7CisJaWYgKHVhcnRfaWR4ID49IE9NQVBfTUFYX05SX1BPUlRTKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvbnNvbGU6IGV4dGVybmFsIFVBUlQjJWQuICIKKwkJCSJOb3QgYWRkaW5nIGl0IGFzIGNvbnNvbGUgdGhpcyB0aW1lLlxuIiwKKwkJCXVhcnRfaWR4ICsgMSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoISh1YXJ0X2luZm8tPmVuYWJsZWRfdWFydHMgJiAoMSA8PCB1YXJ0X2lkeCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ29uc29sZTogU2VsZWN0ZWQgVUFSVCMlZCBpcyAiCisJCQkibm90IGVuYWJsZWQgZm9yIHRoaXMgcGxhdGZvcm1cbiIsCisJCQl1YXJ0X2lkeCArIDEpOworCQlyZXR1cm4gLTE7CisJfQorCWxpbmUgPSAwOworCWZvciAoaSA9IDA7IGkgPCB1YXJ0X2lkeDsgaSsrKSB7CisJCWlmICh1YXJ0X2luZm8tPmVuYWJsZWRfdWFydHMgJiAoMSA8PCBpKSkKKwkJCWxpbmUrKzsKKwl9CisJcmV0dXJuIGFkZF9wcmVmZXJyZWRfY29uc29sZSgidHR5UyIsIGxpbmUsIG9wdCk7CiB9CiBjb25zb2xlX2luaXRjYWxsKG9tYXBfYWRkX3NlcmlhbF9jb25zb2xlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2NlOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworICoKKyAqIENvbW1vbiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAvaW5pdGlhbGl6YXRpb24gZm9yIE9NQVAxIGFuZCBPTUFQMgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC90Yy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbXV4Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisKK3ZvaWQgb21hcF9ub3BfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisgICAgICAgIC8qIE5vdGhpbmcgKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIAlkZWZpbmVkKENPTkZJR19JMkNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX09NQVBfTU9EVUxFKQorCisjZGVmaW5lCU9NQVAxX0kyQ19CQVNFCQkweGZmZmIzODAwCisjZGVmaW5lIE9NQVAyX0kyQ19CQVNFMQkJMHg0ODA3MDAwMAorI2RlZmluZSBPTUFQX0kyQ19TSVpFCQkweDNmCisjZGVmaW5lIE9NQVAxX0kyQ19JTlQJCUlOVF9JMkMKKyNkZWZpbmUgT01BUDJfSTJDX0lOVDEJCTU2CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlczFbXSA9IHsKKwl7CisJCS5zdGFydAkJPSAwLAorCQkuZW5kCQk9IDAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworLyogRE1BIG5vdCB1c2VkOyB3b3JrcyBhcm91bmQgZXJyYXR1bSB3cml0aW5nIHRvIG5vbi1lbXB0eSBpMmMgZmlmbyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX2kyY19kZXZpY2UxID0geworICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaTJjX29tYXAiLAorICAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAorICAgICAgICAuZGV2ID0geworICAgICAgICAgICAgICAgIC5yZWxlYXNlICAgICAgICA9IG9tYXBfbm9wX3JlbGVhc2UsCisgICAgICAgIH0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMxKSwKKwkucmVzb3VyY2UJPSBpMmNfcmVzb3VyY2VzMSwKK307CisKKy8qIFNlZSBhbHNvIGFyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jIGZvciBzZWNvbmQgSTJDIG9uIDI0eHggKi8KK3N0YXRpYyB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkKK3sKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaTJjX3Jlc291cmNlczFbMF0uc3RhcnQgPSBPTUFQMl9JMkNfQkFTRTE7CisJCWkyY19yZXNvdXJjZXMxWzBdLmVuZCA9IE9NQVAyX0kyQ19CQVNFMSArIE9NQVBfSTJDX1NJWkU7CisJCWkyY19yZXNvdXJjZXMxWzFdLnN0YXJ0ID0gT01BUDJfSTJDX0lOVDE7CisJfSBlbHNlIHsKKwkJaTJjX3Jlc291cmNlczFbMF0uc3RhcnQgPSBPTUFQMV9JMkNfQkFTRTsKKwkJaTJjX3Jlc291cmNlczFbMF0uZW5kID0gT01BUDFfSTJDX0JBU0UgKyBPTUFQX0kyQ19TSVpFOworCQlpMmNfcmVzb3VyY2VzMVsxXS5zdGFydCA9IE9NQVAxX0kyQ19JTlQ7CisJfQorCisJLyogRklYTUUgZGVmaW5lIGFuZCB1c2UgYSBib290IHRhZywgaW4gY2FzZSBvZiBib2FyZHMgdGhhdAorCSAqIGVpdGhlciBkb24ndCB3aXJlIHVwIEkyQywgb3IgY2hpcHMgdGhhdCBtdXggaXQgZGlmZmVyZW50bHkuLi4KKwkgKiBpdCBjYW4gaW5jbHVkZSBjbG9ja2luZyBhbmQgYWRkcmVzcyBpbmZvLCBtYXliZSBtb3JlLgorCSAqLworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2NmZ19yZWcoTTE5XzI0WFhfSTJDMV9TQ0wpOworCQlvbWFwX2NmZ19yZWcoTDE1XzI0WFhfSTJDMV9TREEpOworCX0gZWxzZSB7CisJCW9tYXBfY2ZnX3JlZyhJMkNfU0NMKTsKKwkJb21hcF9jZmdfcmVnKEkyQ19TREEpOworCX0KKworCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfaTJjX2RldmljZTEpOworfQorCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9pMmModm9pZCkge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYJZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjZGVmaW5lCU9NQVBfTU1DMV9CQVNFCQkweDQ4MDljMDAwCisjZGVmaW5lIE9NQVBfTU1DMV9JTlQJCTgzCisjZWxzZQorI2RlZmluZQlPTUFQX01NQzFfQkFTRQkJMHhmZmZiNzgwMAorI2RlZmluZSBPTUFQX01NQzFfSU5UCQlJTlRfTU1DCisjZW5kaWYKKyNkZWZpbmUJT01BUF9NTUMyX0JBU0UJCTB4ZmZmYjdjMDAJLyogb21hcDE2eHggb25seSAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jMV9jb25mOworCitzdGF0aWMgdTY0IG1tYzFfZG1hbWFzayA9IDB4ZmZmZmZmZmY7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1jMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMV9CQVNFKSwKKwkJLmVuZAkJPSBJT19BRERSRVNTKE9NQVBfTU1DMV9CQVNFKSArIDB4N2YsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVBfTU1DMV9JTlQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbW1jX29tYXBfZGV2aWNlMSA9IHsKKwkubmFtZQkJPSAibW1jaS1vbWFwIiwKKwkuaWQJCT0gMSwKKwkuZGV2ID0geworCQkucmVsZWFzZQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJCS5kbWFfbWFzawk9ICZtbWMxX2RtYW1hc2ssCisJCS5wbGF0Zm9ybV9kYXRhCT0gJm1tYzFfY29uZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtbWMxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbW1jMV9yZXNvdXJjZXMsCit9OworCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE2WFgKKworc3RhdGljIHN0cnVjdCBvbWFwX21tY19jb25mIG1tYzJfY29uZjsKKworc3RhdGljIHU2NCBtbWMyX2RtYW1hc2sgPSAweGZmZmZmZmZmOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG1tYzJfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzJfQkFTRSksCisJCS5lbmQJCT0gSU9fQUREUkVTUyhPTUFQX01NQzJfQkFTRSkgKyAweDdmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfMTYxMF9NTUMyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1tY19vbWFwX2RldmljZTIgPSB7CisJLm5hbWUJCT0gIm1tY2ktb21hcCIsCisJLmlkCQk9IDIsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAorCQkuZG1hX21hc2sJPSAmbW1jMl9kbWFtYXNrLAorCQkucGxhdGZvcm1fZGF0YQk9ICZtbWMyX2NvbmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobW1jMl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG1tYzJfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9pbml0X21tYyh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBvbWFwX21tY19jb25maWcJKm1tY19jb25mOworCWNvbnN0IHN0cnVjdCBvbWFwX21tY19jb25mCSptbWM7CisKKwkvKiBOT1RFOiAgYXNzdW1lcyBNTUMgd2FzIG5ldmVyICh3cm9uZ2x5KSBlbmFibGVkICovCisJbW1jX2NvbmYgPSBvbWFwX2dldF9jb25maWcoT01BUF9UQUdfTU1DLCBzdHJ1Y3Qgb21hcF9tbWNfY29uZmlnKTsKKwlpZiAoIW1tY19jb25mKQorCQlyZXR1cm47CisKKwkvKiBibG9jayAxIGlzIGFsd2F5cyBhdmFpbGFibGUgYW5kIGhhcyBqdXN0IG9uZSBwaW5vdXQgb3B0aW9uICovCisJbW1jID0gJm1tY19jb25mLT5tbWNbMF07CisJaWYgKG1tYy0+ZW5hYmxlZCkgeworCQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKSB7CisJCQlvbWFwX2NmZ19yZWcoTU1DX0NNRCk7CisJCQlvbWFwX2NmZ19yZWcoTU1DX0NMSyk7CisJCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDApOworCQkJaWYgKGNwdV9pc19vbWFwMTcxMCgpKSB7CisJCQkJb21hcF9jZmdfcmVnKE0xNV8xNzEwX01NQ19DTEtJKTsKKwkJCQlvbWFwX2NmZ19yZWcoUDE5XzE3MTBfTU1DX0NNRERJUik7CisJCQkJb21hcF9jZmdfcmVnKFAyMF8xNzEwX01NQ19EQVRESVIwKTsKKwkJCX0KKwkJfQorCQlpZiAobW1jLT53aXJlNCkgeworCQkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMSk7CisJCQkJLyogTk9URTogIERBVDIgY2FuIGJlIG9uIFcxMCAoaGVyZSkgb3IgTTE1ICovCisJCQkJaWYgKCFtbWMtPm5vbXV4KQorCQkJCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDIpOworCQkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMyk7CisJCQl9CisJCX0KKwkJbW1jMV9jb25mID0gKm1tYzsKKwkJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbW1jX29tYXBfZGV2aWNlMSk7CisJfQorCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE2WFgKKwkvKiBibG9jayAyIGlzIG9uIG5ld2VyIGNoaXBzLCBhbmQgaGFzIG1hbnkgcGlub3V0IG9wdGlvbnMgKi8KKwltbWMgPSAmbW1jX2NvbmYtPm1tY1sxXTsKKwlpZiAobW1jLT5lbmFibGVkKSB7CisJCWlmICghbW1jLT5ub211eCkgeworCQkJb21hcF9jZmdfcmVnKFk4XzE2MTBfTU1DMl9DTUQpOworCQkJb21hcF9jZmdfcmVnKFkxMF8xNjEwX01NQzJfQ0xLKTsKKwkJCW9tYXBfY2ZnX3JlZyhSMThfMTYxMF9NTUMyX0NMS0lOKTsKKwkJCW9tYXBfY2ZnX3JlZyhXOF8xNjEwX01NQzJfREFUMCk7CisJCQlpZiAobW1jLT53aXJlNCkgeworCQkJCW9tYXBfY2ZnX3JlZyhWOF8xNjEwX01NQzJfREFUMSk7CisJCQkJb21hcF9jZmdfcmVnKFcxNV8xNjEwX01NQzJfREFUMik7CisJCQkJb21hcF9jZmdfcmVnKFIxMF8xNjEwX01NQzJfREFUMyk7CisJCQl9CisKKwkJCS8qIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRoZSBsZXZlbCBzaGlmdGVyICovCisJCQlvbWFwX2NmZ19yZWcoVjlfMTYxMF9NTUMyX0NNRERJUik7CisJCQlvbWFwX2NmZ19yZWcoVjVfMTYxMF9NTUMyX0RBVERJUjApOworCQkJb21hcF9jZmdfcmVnKFcxOV8xNjEwX01NQzJfREFURElSMSk7CisJCX0KKworCQkvKiBGZWVkYmFjayBjbG9jayBtdXN0IGJlIHNldCBvbiBPTUFQLTE3MTAgTU1DMiAqLworCQlpZiAoY3B1X2lzX29tYXAxNzEwKCkpCisJCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSkgfCAoMSA8PCAyNCksCisJCQkJICAgICBNT0RfQ09ORl9DVFJMXzEpOworCQltbWMyX2NvbmYgPSAqbW1jOworCQkodm9pZCkgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtbWNfb21hcF9kZXZpY2UyKTsKKwl9CisjZW5kaWYKKwlyZXR1cm47Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9tbWModm9pZCkge30KKyNlbmRpZgorCisjaWYJZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPRykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9XQVRDSERPR19NT0RVTEUpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2RlZmluZQlPTUFQX1dEVF9CQVNFCQkweDQ4MDIyMDAwCisjZWxzZQorI2RlZmluZQlPTUFQX1dEVF9CQVNFCQkweGZmZmViMDAwCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3ZHRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUF9XRFRfQkFTRSwKKwkJLmVuZAkJPSBPTUFQX1dEVF9CQVNFICsgMHg0ZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwX3dkdF9kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAib21hcF93ZHQiLAorCS5pZAkgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnJlbGVhc2UJPSBvbWFwX25vcF9yZWxlYXNlLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHdkdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHdkdF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgdm9pZCBvbWFwX2luaXRfd2R0KHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF93ZHRfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X3dkdCh2b2lkKSB7fQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZglkZWZpbmVkKENPTkZJR19PTUFQX1JORykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9STkdfTU9EVUxFKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHg0ODBBMDAwMAorI2Vsc2UKKyNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHhmZmZlNTAwMAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugcm5nX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE9NQVBfUk5HX0JBU0UsCisJCS5lbmQJCT0gT01BUF9STkdfQkFTRSArIDB4NGYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9ybmdfZGV2aWNlID0geworCS5uYW1lCSAgID0gIm9tYXBfcm5nIiwKKwkuaWQJICAgICA9IC0xLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCT0gb21hcF9ub3BfcmVsZWFzZSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShybmdfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBybmdfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X3JuZyh2b2lkKQoreworCSh2b2lkKSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfcm5nX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9ybmcodm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfRkJfT01BUF9NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIG9tYXBfZmJfY29uZjsKKworc3RhdGljIHU2NCBvbWFwX2ZiX2RtYV9tYXNrID0gfih1MzIpMDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9mYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBmYiIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5yZWxlYXNlCQk9IG9tYXBfbm9wX3JlbGVhc2UsCisJCS5kbWFfbWFzawkJPSAmb21hcF9mYl9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gfih1MzIpMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm9tYXBfZmJfY29uZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMCwKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfZmIodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnICpjb25mOworCisJY29uZiA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19MQ0QsIHN0cnVjdCBvbWFwX2xjZF9jb25maWcpOworCWlmIChjb25mICE9IE5VTEwpCisJCW9tYXBfZmJfY29uZiA9ICpjb25mOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9mYl9kZXZpY2UpOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X2ZiKHZvaWQpIHt9CisKKyNlbmRpZgorCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCBhZnRlciBib2FyZC1zcGVjaWZpYyBJTklUX01BQ0hJTkUsIGFuZCBpbml0aWFsaXplcyBtb3N0CisgKiBvbi1jaGlwIHBlcmlwaGVyYWxzIGFjY2Vzc2libGUgb24gdGhpcyBib2FyZCAoZXhjZXB0IGZvciBmZXcgbGlrZSBVU0IpOgorICoKKyAqICAoYSkgRG9lcyBhbnkgInN0YW5kYXJkIGNvbmZpZyIgcGluIG11eGluZyBuZWVkZWQuICBCb2FyZC1zcGVjaWZpYworICoJY29kZSB3aWxsIGhhdmUgbXV4ZWQgR1BJTyBwaW5zIGFuZCBkb25lICJub25zdGFuZGFyZCIgc2V0dXA7CisgKgl0aGF0IGNvZGUgY291bGQgbGl2ZSBpbiB0aGUgYm9vdCBsb2FkZXIuCisgKiAgKGIpIFBvcHVsYXRpbmcgYm9hcmQtc3BlY2lmaWMgcGxhdGZvcm1fZGF0YSB3aXRoIHRoZSBkYXRhIGRyaXZlcnMKKyAqCXJlbHkgb24gdG8gaGFuZGxlIHdpcmluZyB2YXJpYXRpb25zLgorICogIChjKSBDcmVhdGluZyBwbGF0Zm9ybSBkZXZpY2VzIGFzIG1lYW5pbmdmdWwgb24gdGhpcyBib2FyZCBhbmQKKyAqCXdpdGggdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbi4KKyAqCisgKiBDbGFpbWluZyBHUElPcywgYW5kIHNldHRpbmcgdGhlaXIgZGlyZWN0aW9uIGFuZCBpbml0aWFsIHZhbHVlcywgaXMgdGhlCisgKiByZXNwb25zaWJpbGl0eSBvZiB0aGUgZGV2aWNlIGRyaXZlcnMuICBTbyBpcyByZXNwb25kaW5nIHRvIHByb2JlKCkuCisgKgorICogQm9hcmQtc3BlY2lmaWMga25vd2xlZ2UgbGlrZSBjcmVhdGluZyBkZXZpY2VzIG9yIHBpbiBzZXR1cCBpcyB0byBiZQorICoga2VwdCBvdXQgb2YgZHJpdmVycyBhcyBtdWNoIGFzIHBvc3NpYmxlLiAgSW4gcGFydGljdWxhciwgcGluIHNldHVwCisgKiBtYXkgYmUgaGFuZGxlZCBieSB0aGUgYm9vdCBsb2FkZXIsIGFuZCBkcml2ZXJzIHNob3VsZCBleHBlY3QgaXQgd2lsbAorICogbm9ybWFsbHkgaGF2ZSBiZWVuIGRvbmUgYnkgdGhlIHRpbWUgdGhleSdyZSBwcm9iZWQuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9kZXZpY2VzKHZvaWQpCit7CisJLyogcGxlYXNlIGtlZXAgdGhlc2UgY2FsbHMsIGFuZCB0aGVpciBpbXBsZW1lbnRhdGlvbnMgYWJvdmUsCisJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KKwkgKi8KKwlvbWFwX2luaXRfZmIoKTsKKwlvbWFwX2luaXRfaTJjKCk7CisJb21hcF9pbml0X21tYygpOworCW9tYXBfaW5pdF93ZHQoKTsKKwlvbWFwX2luaXRfcm5nKCk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwob21hcF9pbml0X2RldmljZXMpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggZGE3YjY1MS4uZjVjYzIxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNiw2ICs2LDggQEAKICAqIERNQSBjaGFubmVsIGxpbmtpbmcgZm9yIDE2MTAgYnkgU2FtdWVsIE9ydGl6IDxzYW11ZWwub3J0aXpAbm9raWEuY29tPgogICogR3JhcGhpY3MgRE1BIGFuZCBMQ0QgRE1BIGdyYXBoaWNzIHRyYW5mb3JtYXRpb25zCiAgKiBieSBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+CisgKiBPTUFQMiBzdXBwb3J0IENvcHlyaWdodCAoQykgMjAwNC0yMDA1IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBNZXJnZWQgdG8gc3VwcG9ydCBib3RoIE9NQVAxIGFuZCBPTUFQMiBieSBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgogICogU29tZSBmdW5jdGlvbnMgYmFzZWQgb24gZWFybGllciBkbWEtb21hcC5jIENvcHlyaWdodCAoQykgMjAwMSBSaWRnZVJ1biwgSW5jLgogICoKICAqIFN1cHBvcnQgZnVuY3Rpb25zIGZvciB0aGUgT01BUCBpbnRlcm5hbCBETUEgY2hhbm5lbHMuCkBAIC0zMSw4ICszMywxNSBAQAogCiAjaW5jbHVkZSA8YXNtL2FyY2gvdGMuaD4KIAotI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCTB4MDEKKyNkZWZpbmUgREVCVUdfUFJJTlRTCisjdW5kZWYgREVCVUdfUFJJTlRTCisjaWZkZWYgREVCVUdfUFJJTlRTCisjZGVmaW5lIGRlYnVnX3ByaW50ayh4KSBwcmludGsgeAorI2Vsc2UKKyNkZWZpbmUJZGVidWdfcHJpbnRrKHgpCisjZW5kaWYKIAorI2RlZmluZSBPTUFQX0RNQV9BQ1RJVkUJCTB4MDEKICNkZWZpbmUgT01BUF9ETUFfQ0NSX0VOCQkoMSA8PCA3KQogCiAjZGVmaW5lIE9NQVBfRlVOQ19NVVhfQVJNX0JBU0UJKDB4ZmZmZTEwMDAgKyAweGVjKQpAQCAtNTUsNyArNjQsNyBAQAogc3RhdGljIHNwaW5sb2NrX3QgZG1hX2NoYW5fbG9jazsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kbWFfbGNoIGRtYV9jaGFuW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOwogCi1jb25zdCBzdGF0aWMgdTggZG1hX2lycVtPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UXSA9IHsKK2NvbnN0IHN0YXRpYyB1OCBvbWFwMV9kbWFfaXJxW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdID0gewogCUlOVF9ETUFfQ0gwXzYsIElOVF9ETUFfQ0gxXzcsIElOVF9ETUFfQ0gyXzgsIElOVF9ETUFfQ0gzLAogCUlOVF9ETUFfQ0g0LCBJTlRfRE1BX0NINSwgSU5UXzE2MTBfRE1BX0NINiwgSU5UXzE2MTBfRE1BX0NINywKIAlJTlRfMTYxMF9ETUFfQ0g4LCBJTlRfMTYxMF9ETUFfQ0g5LCBJTlRfMTYxMF9ETUFfQ0gxMCwKQEAgLTYzLDYgKzcyLDIwIEBACiAJSU5UXzE2MTBfRE1BX0NIMTQsIElOVF8xNjEwX0RNQV9DSDE1LCBJTlRfRE1BX0xDRAogfTsKIAorI2RlZmluZSBSRVZJU0lUXzI0WFgoKQkJcHJpbnRrKEtFUk5fRVJSICJGSVhNRTogbm8gJXMgb24gMjR4eFxuIiwgXAorCQkJCQkJX19GVU5DVElPTl9fKTsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisvKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLworaW50IG9tYXBfZG1hX2luXzE1MTBfbW9kZSh2b2lkKQoreworCXJldHVybiBlbmFibGVfMTUxMF9tb2RlOworfQorI2Vsc2UKKyNkZWZpbmUgb21hcF9kbWFfaW5fMTUxMF9tb2RlKCkJCTAKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDEKIHN0YXRpYyBpbmxpbmUgaW50IGdldF9nZG1hX2RldihpbnQgcmVxKQogewogCXUzMiByZWcgPSBPTUFQX0ZVTkNfTVVYX0FSTV9CQVNFICsgKChyZXEgLSAxKSAvIDUpICogNDsKQEAgLTgyLDYgKzEwNSw5IEBACiAJbCB8PSAoZGV2IC0gMSkgPDwgc2hpZnQ7CiAJb21hcF93cml0ZWwobCwgcmVnKTsKIH0KKyNlbHNlCisjZGVmaW5lIHNldF9nZG1hX2RldihyZXEsIGRldikJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKIAogc3RhdGljIHZvaWQgY2xlYXJfbGNoX3JlZ3MoaW50IGxjaCkKIHsKQEAgLTEyMSwzOCArMTQ3LDYyIEBACiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhpbnQgbGNoLCBpbnQgZGF0YV90eXBlLCBpbnQgZWxlbV9jb3VudCwKLQkJCQkgIGludCBmcmFtZV9jb3VudCwgaW50IHN5bmNfbW9kZSkKKwkJCQkgIGludCBmcmFtZV9jb3VudCwgaW50IHN5bmNfbW9kZSwKKwkJCQkgIGludCBkbWFfdHJpZ2dlciwgaW50IHNyY19vcl9kc3Rfc3luY2gpCiB7Ci0JdTE2IHc7CisJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSAmPSB+MHgwMzsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9IGRhdGFfdHlwZTsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTRFAobGNoKSk7Ci0JdyAmPSB+MHgwMzsKLQl3IHw9IGRhdGFfdHlwZTsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgJj0gfigxIDw8IDUpOworCQlpZiAoc3luY19tb2RlID09IE9NQVBfRE1BX1NZTkNfRlJBTUUpCisJCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgfD0gMSA8PCA1OwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ0NSKGxjaCkpOwotCXcgJj0gfigxIDw8IDUpOwotCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19GUkFNRSkKLQkJdyB8PSAxIDw8IDU7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOworCQlPTUFQMV9ETUFfQ0NSMl9SRUcobGNoKSAmPSB+KDEgPDwgMik7CisJCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19CTE9DSykKKwkJCU9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpIHw9IDEgPDwgMjsKKwl9CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IyKGxjaCkpOwotCXcgJj0gfigxIDw8IDIpOwotCWlmIChzeW5jX21vZGUgPT0gT01BUF9ETUFfU1lOQ19CTE9DSykKLQkJdyB8PSAxIDw8IDI7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSMihsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkgJiYgZG1hX3RyaWdnZXIpIHsKKwkJdTMyIHZhbCA9IE9NQVBfRE1BX0NDUl9SRUcobGNoKTsKIAotCW9tYXBfd3JpdGV3KGVsZW1fY291bnQsIE9NQVBfRE1BX0NFTihsY2gpKTsKLQlvbWFwX3dyaXRldyhmcmFtZV9jb3VudCwgT01BUF9ETUFfQ0ZOKGxjaCkpOworCQlpZiAoZG1hX3RyaWdnZXIgPiA2MykKKwkJCXZhbCB8PSAxIDw8IDIwOworCQlpZiAoZG1hX3RyaWdnZXIgPiAzMSkKKwkJCXZhbCB8PSAxIDw8IDE5OwogCisJCXZhbCB8PSAoZG1hX3RyaWdnZXIgJiAweDFmKTsKKworCQlpZiAoc3luY19tb2RlICYgT01BUF9ETUFfU1lOQ19GUkFNRSkKKwkJCXZhbCB8PSAxIDw8IDU7CisKKwkJaWYgKHN5bmNfbW9kZSAmIE9NQVBfRE1BX1NZTkNfQkxPQ0spCisJCQl2YWwgfD0gMSA8PCAxODsKKworCQlpZiAoc3JjX29yX2RzdF9zeW5jaCkKKwkJCXZhbCB8PSAxIDw8IDI0OwkJLyogc291cmNlIHN5bmNoICovCisJCWVsc2UKKwkJCXZhbCAmPSB+KDEgPDwgMjQpOwkvKiBkZXN0IHN5bmNoICovCisKKwkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpID0gdmFsOworCX0KKworCU9NQVBfRE1BX0NFTl9SRUcobGNoKSA9IGVsZW1fY291bnQ7CisJT01BUF9ETUFfQ0ZOX1JFRyhsY2gpID0gZnJhbWVfY291bnQ7CiB9CisKIHZvaWQgb21hcF9zZXRfZG1hX2NvbG9yX21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9jb2xvcl9tb2RlIG1vZGUsIHUzMiBjb2xvcikKIHsKIAl1MTYgdzsKIAogCUJVR19PTihvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSk7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IyKGxjaCkpICYgfjB4MDM7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCVJFVklTSVRfMjRYWCgpOworCQlyZXR1cm47CisJfQorCisJdyA9IE9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpICYgfjB4MDM7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBPTUFQX0RNQV9DT05TVEFOVF9GSUxMOgogCQl3IHw9IDB4MDE7CkBAIC0xNjUsNjMgKzIxNSw4NCBAQAogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IyKGxjaCkpOworCU9NQVAxX0RNQV9DQ1IyX1JFRyhsY2gpID0gdzsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0xDSF9DVFJMKGxjaCkpICYgfjB4MGY7CisJdyA9IE9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobGNoKSAmIH4weDBmOwogCS8qIERlZmF1bHQgaXMgY2hhbm5lbCB0eXBlIDJEICovCiAJaWYgKG1vZGUpIHsKLQkJb21hcF93cml0ZXcoKHUxNiljb2xvciwgT01BUF9ETUFfQ09MT1JfTChsY2gpKTsKLQkJb21hcF93cml0ZXcoKHUxNikoY29sb3IgPj4gMTYpLCBPTUFQX0RNQV9DT0xPUl9VKGxjaCkpOworCQlPTUFQMV9ETUFfQ09MT1JfTF9SRUcobGNoKSA9ICh1MTYpY29sb3I7CisJCU9NQVAxX0RNQV9DT0xPUl9VX1JFRyhsY2gpID0gKHUxNikoY29sb3IgPj4gMTYpOwogCQl3IHw9IDE7CQkvKiBDaGFubmVsIHR5cGUgRyAqLwogCX0KLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9MQ0hfQ1RSTChsY2gpKTsKKwlPTUFQMV9ETUFfTENIX0NUUkxfUkVHKGxjaCkgPSB3OwogfQogCi0KKy8qIE5vdGUgdGhhdCBzcmNfcG9ydCBpcyBvbmx5IGZvciBvbWFwMSAqLwogdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0KQorCQkJICAgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKKwkJCSAgICAgaW50IHNyY19laSwgaW50IHNyY19maSkKIHsKLQl1MTYgdzsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSAmPSB+KDB4MWYgPDwgMik7CisJCU9NQVBfRE1BX0NTRFBfUkVHKGxjaCkgfD0gc3JjX3BvcnQgPDwgMjsKKwl9CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpOwotCXcgJj0gfigweDFmIDw8IDIpOwotCXcgfD0gc3JjX3BvcnQgPDwgMjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DU0RQKGxjaCkpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSAmPSB+KDB4MDMgPDwgMTIpOworCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSBzcmNfYW1vZGUgPDwgMTI7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JdyAmPSB+KDB4MDMgPDwgMTIpOwotCXcgfD0gc3JjX2Ftb2RlIDw8IDEyOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJT01BUDFfRE1BX0NTU0FfVV9SRUcobGNoKSA9IHNyY19zdGFydCA+PiAxNjsKKwkJT01BUDFfRE1BX0NTU0FfTF9SRUcobGNoKSA9IHNyY19zdGFydDsKKwl9CiAKLQlvbWFwX3dyaXRldyhzcmNfc3RhcnQgPj4gMTYsIE9NQVBfRE1BX0NTU0FfVShsY2gpKTsKLQlvbWFwX3dyaXRldyhzcmNfc3RhcnQsIE9NQVBfRE1BX0NTU0FfTChsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCU9NQVAyX0RNQV9DU1NBX1JFRyhsY2gpID0gc3JjX3N0YXJ0OworCisJT01BUF9ETUFfQ1NFSV9SRUcobGNoKSA9IHNyY19laTsKKwlPTUFQX0RNQV9DU0ZJX1JFRyhsY2gpID0gc3JjX2ZpOworfQorCit2b2lkIG9tYXBfc2V0X2RtYV9wYXJhbXMoaW50IGxjaCwgc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zICogcGFyYW1zKQoreworCW9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMobGNoLCBwYXJhbXMtPmRhdGFfdHlwZSwKKwkJCQkgICAgIHBhcmFtcy0+ZWxlbV9jb3VudCwgcGFyYW1zLT5mcmFtZV9jb3VudCwKKwkJCQkgICAgIHBhcmFtcy0+c3luY19tb2RlLCBwYXJhbXMtPnRyaWdnZXIsCisJCQkJICAgICBwYXJhbXMtPnNyY19vcl9kc3Rfc3luY2gpOworCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKGxjaCwgcGFyYW1zLT5zcmNfcG9ydCwKKwkJCQlwYXJhbXMtPnNyY19hbW9kZSwgcGFyYW1zLT5zcmNfc3RhcnQsCisJCQkJcGFyYW1zLT5zcmNfZWksIHBhcmFtcy0+c3JjX2ZpKTsKKworCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhsY2gsIHBhcmFtcy0+ZHN0X3BvcnQsCisJCQkJIHBhcmFtcy0+ZHN0X2Ftb2RlLCBwYXJhbXMtPmRzdF9zdGFydCwKKwkJCQkgcGFyYW1zLT5kc3RfZWksIHBhcmFtcy0+ZHN0X2ZpKTsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfc3JjX2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCkKIHsKLQlvbWFwX3dyaXRldyhlaWR4LCBPTUFQX0RNQV9DU0VJKGxjaCkpOwotCW9tYXBfd3JpdGV3KGZpZHgsIE9NQVBfRE1BX0NTRkkobGNoKSk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCVJFVklTSVRfMjRYWCgpOworCQlyZXR1cm47CisJfQorCU9NQVBfRE1BX0NTRUlfUkVHKGxjaCkgPSBlaWR4OworCU9NQVBfRE1BX0NTRklfUkVHKGxjaCkgPSBmaWR4OwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpCiB7Ci0JdTE2IHc7Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigxIDw8IDYpOwotCXcgfD0gZW5hYmxlID8gKDEgPDwgNikgOiAwOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NTRFAobGNoKSk7CisJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSAmPSB+KDEgPDwgNik7CisJaWYgKGVuYWJsZSkKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSAoMSA8PCA2KTsKIH0KIAogdm9pZCBvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpCiB7Ci0JdTE2IHc7CisJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSAmPSB+KDB4MDMgPDwgNyk7CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigweDAzIDw8IDcpOwogCXN3aXRjaCAoYnVyc3RfbW9kZSkgewogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF9ESVM6CiAJCWJyZWFrOwogCWNhc2UgT01BUF9ETUFfREFUQV9CVVJTVF80OgotCQl3IHw9ICgweDAxIDw8IDcpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgweDAyIDw8IDcpOwogCQlicmVhazsKIAljYXNlIE9NQVBfRE1BX0RBVEFfQlVSU1RfODoKIAkJLyogbm90IHN1cHBvcnRlZCBieSBjdXJyZW50IGhhcmR3YXJlCkBAIC0yMzEsMTc1ICszMDIsODcgQEAKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAl9Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKIH0KIAorLyogTm90ZSB0aGF0IGRlc3RfcG9ydCBpcyBvbmx5IGZvciBPTUFQMSAqLwogdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaW50IGxjaCwgaW50IGRlc3RfcG9ydCwgaW50IGRlc3RfYW1vZGUsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQpCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQsCisJCQkgICAgICBpbnQgZHN0X2VpLCBpbnQgZHN0X2ZpKQogewotCXUxNiB3OworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgxZiA8PCA5KTsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSBkZXN0X3BvcnQgPDwgOTsKKwl9CiAKLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpOwotCXcgJj0gfigweDFmIDw8IDkpOwotCXcgfD0gZGVzdF9wb3J0IDw8IDk7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgJj0gfigweDAzIDw8IDE0KTsKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgfD0gZGVzdF9hbW9kZSA8PCAxNDsKIAotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3ICY9IH4oMHgwMyA8PCAxNCk7Ci0JdyB8PSBkZXN0X2Ftb2RlIDw8IDE0OwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NDUihsY2gpKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJT01BUDFfRE1BX0NEU0FfVV9SRUcobGNoKSA9IGRlc3Rfc3RhcnQgPj4gMTY7CisJCU9NQVAxX0RNQV9DRFNBX0xfUkVHKGxjaCkgPSBkZXN0X3N0YXJ0OworCX0KIAotCW9tYXBfd3JpdGV3KGRlc3Rfc3RhcnQgPj4gMTYsIE9NQVBfRE1BX0NEU0FfVShsY2gpKTsKLQlvbWFwX3dyaXRldyhkZXN0X3N0YXJ0LCBPTUFQX0RNQV9DRFNBX0wobGNoKSk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlPTUFQMl9ETUFfQ0RTQV9SRUcobGNoKSA9IGRlc3Rfc3RhcnQ7CisKKwlPTUFQX0RNQV9DREVJX1JFRyhsY2gpID0gZHN0X2VpOworCU9NQVBfRE1BX0NERklfUkVHKGxjaCkgPSBkc3RfZmk7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfaW5kZXgoaW50IGxjaCwgaW50IGVpZHgsIGludCBmaWR4KQogewotCW9tYXBfd3JpdGV3KGVpZHgsIE9NQVBfRE1BX0NERUkobGNoKSk7Ci0Jb21hcF93cml0ZXcoZmlkeCwgT01BUF9ETUFfQ0RGSShsY2gpKTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJUkVWSVNJVF8yNFhYKCk7CisJCXJldHVybjsKKwl9CisJT01BUF9ETUFfQ0RFSV9SRUcobGNoKSA9IGVpZHg7CisJT01BUF9ETUFfQ0RGSV9SRUcobGNoKSA9IGZpZHg7CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpCiB7Ci0JdTE2IHc7Ci0KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DU0RQKGxjaCkpICYgfigxIDw8IDEzKTsKLQl3IHw9IGVuYWJsZSA/ICgxIDw8IDEzKSA6IDA7Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKKwlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMSA8PCAxMyk7CisJaWYgKGVuYWJsZSkKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSAxIDw8IDEzOwogfQogCiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2J1cnN0X21vZGUoaW50IGxjaCwgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpCiB7Ci0JdTE2IHc7CisJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSAmPSB+KDB4MDMgPDwgMTQpOwogCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NEUChsY2gpKSAmIH4oMHgwMyA8PCAxNCk7CiAJc3dpdGNoIChidXJzdF9tb2RlKSB7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUzoKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzQ6Ci0JCXcgfD0gKDB4MDEgPDwgMTQpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgweDAyIDw8IDE0KTsKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RNQV9EQVRBX0JVUlNUXzg6Ci0JCXcgfD0gKDB4MDMgPDwgMTQpOworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpIHw9ICgweDAzIDw8IDE0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIERNQSBidXJzdCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJCXJldHVybjsKIAl9Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ1NEUChsY2gpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGluaXRfaW50cihpbnQgbGNoKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfZW5hYmxlX2NoYW5uZWxfaXJxKGludCBsY2gpCiB7Ci0JdTE2IHc7CisJdTMyIHN0YXR1czsKIAogCS8qIFJlYWQgQ1NSIHRvIG1ha2Ugc3VyZSBpdCdzIGNsZWFyZWQuICovCi0JdyA9IG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NSKGxjaCkpOworCXN0YXR1cyA9IE9NQVBfRE1BX0NTUl9SRUcobGNoKTsKKwogCS8qIEVuYWJsZSBzb21lIG5pY2UgaW50ZXJydXB0cy4gKi8KLQlvbWFwX3dyaXRldyhkbWFfY2hhbltsY2hdLmVuYWJsZWRfaXJxcywgT01BUF9ETUFfQ0lDUihsY2gpKTsKKwlPTUFQX0RNQV9DSUNSX1JFRyhsY2gpID0gZG1hX2NoYW5bbGNoXS5lbmFibGVkX2lycXM7CisKIAlkbWFfY2hhbltsY2hdLmZsYWdzIHw9IE9NQVBfRE1BX0FDVElWRTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9sbmsoaW50IGxjaCkKK3N0YXRpYyB2b2lkIG9tYXBfZGlzYWJsZV9jaGFubmVsX2lycShpbnQgbGNoKQogewotCXUxNiB3OwotCi0JLyogQ2xlYXIgdGhlIFNUT1BfTE5LIGJpdHMgKi8KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DTE5LX0NUUkwobGNoKSk7Ci0JdyAmPSB+KDEgPDwgMTQpOwotCW9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQotCS8qIEFuZCBzZXQgdGhlIEVOQUJMRV9MTksgYml0cyAqLwotCWlmIChkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKQotCQlvbWFwX3dyaXRldyhkbWFfY2hhbltsY2hdLm5leHRfbGNoIHwgKDEgPDwgMTUpLAotCQkJICAgIE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbG5rKGludCBsY2gpCi17Ci0JdTE2IHc7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQlvbWFwX3dyaXRldygwLCBPTUFQX0RNQV9DSUNSKGxjaCkpOwotCi0JLyogU2V0IHRoZSBTVE9QX0xOSyBiaXQgKi8KLQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DTE5LX0NUUkwobGNoKSk7Ci0JdyB8PSAoMSA8PCAxNCk7Ci0JdyA9IG9tYXBfd3JpdGV3KHcsIE9NQVBfRE1BX0NMTktfQ1RSTChsY2gpKTsKLQotCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKLX0KLQotdm9pZCBvbWFwX3N0YXJ0X2RtYShpbnQgbGNoKQotewotCXUxNiB3OwotCi0JaWYgKCFvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJiBkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKSB7Ci0JCWludCBuZXh0X2xjaCwgY3VyX2xjaDsKLQkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKLQotCQlkbWFfY2hhbl9saW5rX21hcFtsY2hdID0gMTsKLQkJLyogU2V0IHRoZSBsaW5rIHJlZ2lzdGVyIG9mIHRoZSBmaXJzdCBjaGFubmVsICovCi0JCWVuYWJsZV9sbmsobGNoKTsKLQotCQltZW1zZXQoZG1hX2NoYW5fbGlua19tYXAsIDAsIHNpemVvZihkbWFfY2hhbl9saW5rX21hcCkpOwotCQljdXJfbGNoID0gZG1hX2NoYW5bbGNoXS5uZXh0X2xjaDsKLQkJZG8gewotCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KLQkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKLQkJCQlicmVhazsKLQkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLwotCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOwotCi0JCQllbmFibGVfbG5rKGN1cl9sY2gpOwotCQkJaW5pdF9pbnRyKGN1cl9sY2gpOwotCi0JCQljdXJfbGNoID0gbmV4dF9sY2g7Ci0JCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKLQl9Ci0KLQlpbml0X2ludHIobGNoKTsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3IHw9IE9NQVBfRE1BX0NDUl9FTjsKLQlvbWFwX3dyaXRldyh3LCBPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JZG1hX2NoYW5bbGNoXS5mbGFncyB8PSBPTUFQX0RNQV9BQ1RJVkU7Ci19Ci0KLXZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKQotewotCXUxNiB3OwotCi0JaWYgKCFvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJiBkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKSB7Ci0JCWludCBuZXh0X2xjaCwgY3VyX2xjaCA9IGxjaDsKLQkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKLQotCQltZW1zZXQoZG1hX2NoYW5fbGlua19tYXAsIDAsIHNpemVvZihkbWFfY2hhbl9saW5rX21hcCkpOwotCQlkbyB7Ci0JCQkvKiBUaGUgbG9vcCBjYXNlOiB3ZSd2ZSBiZWVuIGhlcmUgYWxyZWFkeSAqLwotCQkJaWYgKGRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdKQotCQkJCWJyZWFrOwotCQkJLyogTWFyayB0aGUgY3VycmVudCBjaGFubmVsICovCi0JCQlkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSA9IDE7Ci0KLQkJCWRpc2FibGVfbG5rKGN1cl9sY2gpOwotCi0JCQluZXh0X2xjaCA9IGRtYV9jaGFuW2N1cl9sY2hdLm5leHRfbGNoOwotCQkJY3VyX2xjaCA9IG5leHRfbGNoOwotCQl9IHdoaWxlIChuZXh0X2xjaCAhPSAtMSk7Ci0KLQkJcmV0dXJuOwotCX0KLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9uIHRoZSBjaGFubmVsICovCi0Jb21hcF93cml0ZXcoMCwgT01BUF9ETUFfQ0lDUihsY2gpKTsKLQotCXcgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NDUihsY2gpKTsKLQl3ICY9IH5PTUFQX0RNQV9DQ1JfRU47Ci0Jb21hcF93cml0ZXcodywgT01BUF9ETUFfQ0NSKGxjaCkpOwotCWRtYV9jaGFuW2xjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCisJCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSAwOwogfQogCiB2b2lkIG9tYXBfZW5hYmxlX2RtYV9pcnEoaW50IGxjaCwgdTE2IGJpdHMpCkBAIC00MTIsNTUgKzM5NSw0NSBAQAogCWRtYV9jaGFuW2xjaF0uZW5hYmxlZF9pcnFzICY9IH5iaXRzOwogfQogCi1zdGF0aWMgaW50IGRtYV9oYW5kbGVfY2goaW50IGNoKQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9sbmsoaW50IGxjaCkKIHsKLQl1MTYgY3NyOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJT01BUF9ETUFfQ0xOS19DVFJMX1JFRyhsY2gpICY9IH4oMSA8PCAxNCk7CiAKLQlpZiAoZW5hYmxlXzE1MTBfbW9kZSAmJiBjaCA+PSA2KSB7Ci0JCWNzciA9IGRtYV9jaGFuW2NoXS5zYXZlZF9jc3I7Ci0JCWRtYV9jaGFuW2NoXS5zYXZlZF9jc3IgPSAwOwotCX0gZWxzZQotCQljc3IgPSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTUihjaCkpOwotCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoIDw9IDIgJiYgKGNzciA+PiA3KSAhPSAwKSB7Ci0JCWRtYV9jaGFuW2NoICsgNl0uc2F2ZWRfY3NyID0gY3NyID4+IDc7Ci0JCWNzciAmPSAweDdmOwotCX0KLQlpZiAoKGNzciAmIDB4M2YpID09IDApCi0JCXJldHVybiAwOwotCWlmICh1bmxpa2VseShkbWFfY2hhbltjaF0uZGV2X2lkID09IC0xKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBpbnRlcnJ1cHQgZnJvbSBETUEgY2hhbm5lbCAlZCAoQ1NSICUwNHgpXG4iLAotCQkgICAgICAgY2gsIGNzcik7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfVE9VVF9JUlEpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgdGltZW91dCB3aXRoIGRldmljZSAlZFxuIiwgZG1hX2NoYW5bY2hdLmRldl9pZCk7Ci0JaWYgKHVubGlrZWx5KGNzciAmIE9NQVBfRE1BX0RST1BfSVJRKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRE1BIHN5bmNocm9uaXphdGlvbiBldmVudCBkcm9wIG9jY3VycmVkIHdpdGggZGV2aWNlICVkXG4iLAotCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7Ci0JaWYgKGxpa2VseShjc3IgJiBPTUFQX0RNQV9CTE9DS19JUlEpKQotCQlkbWFfY2hhbltjaF0uZmxhZ3MgJj0gfk9NQVBfRE1BX0FDVElWRTsKLQlpZiAobGlrZWx5KGRtYV9jaGFuW2NoXS5jYWxsYmFjayAhPSBOVUxMKSkKLQkJZG1hX2NoYW5bY2hdLmNhbGxiYWNrKGNoLCBjc3IsIGRtYV9jaGFuW2NoXS5kYXRhKTsKLQlyZXR1cm4gMTsKKwkvKiBTZXQgdGhlIEVOQUJMRV9MTksgYml0cyAqLworCWlmIChkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKQorCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgPQorCQkJZG1hX2NoYW5bbGNoXS5uZXh0X2xjaCB8ICgxIDw8IDE1KTsKIH0KIAotc3RhdGljIGlycXJldHVybl90IGRtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbG5rKGludCBsY2gpCiB7Ci0JaW50IGNoID0gKChpbnQpIGRldl9pZCkgLSAxOwotCWludCBoYW5kbGVkID0gMDsKLQotCWZvciAoOzspIHsKLQkJaW50IGhhbmRsZWRfbm93ID0gMDsKLQotCQloYW5kbGVkX25vdyArPSBkbWFfaGFuZGxlX2NoKGNoKTsKLQkJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IpCi0JCQloYW5kbGVkX25vdyArPSBkbWFfaGFuZGxlX2NoKGNoICsgNik7Ci0JCWlmICghaGFuZGxlZF9ub3cpCi0JCQlicmVhazsKLQkJaGFuZGxlZCArPSBoYW5kbGVkX25vdzsKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisJCS8qIFNldCB0aGUgU1RPUF9MTksgYml0ICovCisJCU9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobGNoKSB8PSAxIDw8IDE0OwogCX0KIAotCXJldHVybiBoYW5kbGVkID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJb21hcF9kaXNhYmxlX2NoYW5uZWxfaXJxKGxjaCk7CisJCS8qIENsZWFyIHRoZSBFTkFCTEVfTE5LIGJpdCAqLworCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgJj0gfigxIDw8IDE1KTsKKwl9CisKKwlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9lbmFibGVfaXJxX2xjaChpbnQgbGNoKQoreworCXUzMiB2YWw7CisKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlyZXR1cm47CisKKwl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOworCXZhbCB8PSAxIDw8IGxjaDsKKwlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOwogfQogCiBpbnQgb21hcF9yZXF1ZXN0X2RtYShpbnQgZGV2X2lkLCBjb25zdCBjaGFyICpkZXZfbmFtZSwKQEAgLTQ4NSwxNCArNDU4LDIzIEBACiAJfQogCWNoYW4gPSBkbWFfY2hhbiArIGZyZWVfY2g7CiAJY2hhbi0+ZGV2X2lkID0gZGV2X2lkOwotCWNsZWFyX2xjaF9yZWdzKGZyZWVfY2gpOworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQljbGVhcl9sY2hfcmVncyhmcmVlX2NoKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcF9jbGVhcl9kbWEoZnJlZV9jaCk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7CiAKLQljaGFuLT5kZXZfaWQgPSBkZXZfaWQ7CiAJY2hhbi0+ZGV2X25hbWUgPSBkZXZfbmFtZTsKIAljaGFuLT5jYWxsYmFjayA9IGNhbGxiYWNrOwogCWNoYW4tPmRhdGEgPSBkYXRhOwotCWNoYW4tPmVuYWJsZWRfaXJxcyA9IE9NQVBfRE1BX1RPVVRfSVJRIHwgT01BUF9ETUFfRFJPUF9JUlEgfCBPTUFQX0RNQV9CTE9DS19JUlE7CisJY2hhbi0+ZW5hYmxlZF9pcnFzID0gT01BUF9ETUFfVE9VVF9JUlEgfCBPTUFQX0RNQV9EUk9QX0lSUSB8CisJCQkJT01BUF9ETUFfQkxPQ0tfSVJROworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQljaGFuLT5lbmFibGVkX2lycXMgfD0gT01BUDJfRE1BX1RSQU5TX0VSUl9JUlE7CiAKIAlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKIAkJLyogSWYgdGhlIHN5bmMgZGV2aWNlIGlzIHNldCwgY29uZmlndXJlIGl0IGR5bmFtaWNhbGx5LiAqLwpAQCAtNTAyLDM3ICs0ODQsMjQyIEBACiAJCX0KIAkJLyogRGlzYWJsZSB0aGUgMTUxMCBjb21wYXRpYmlsaXR5IG1vZGUgYW5kIHNldCB0aGUgc3luYyBkZXZpY2UKIAkJICogaWQuICovCi0JCW9tYXBfd3JpdGV3KGRldl9pZCB8ICgxIDw8IDEwKSwgT01BUF9ETUFfQ0NSKGZyZWVfY2gpKTsKLQl9IGVsc2UgewotCQlvbWFwX3dyaXRldyhkZXZfaWQsIE9NQVBfRE1BX0NDUihmcmVlX2NoKSk7CisJCU9NQVBfRE1BX0NDUl9SRUcoZnJlZV9jaCkgPSBkZXZfaWQgfCAoMSA8PCAxMCk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKSB7CisJCU9NQVBfRE1BX0NDUl9SRUcoZnJlZV9jaCkgPSBkZXZfaWQ7CiAJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXAyX2VuYWJsZV9pcnFfbGNoKGZyZWVfY2gpOworCisJCW9tYXBfZW5hYmxlX2NoYW5uZWxfaXJxKGZyZWVfY2gpOworCQkvKiBDbGVhciB0aGUgQ1NSIHJlZ2lzdGVyIGFuZCBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCisJCU9NQVBfRE1BX0NTUl9SRUcoZnJlZV9jaCkgPSAweDA7CisJCW9tYXBfd3JpdGVsKH4weDAsIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCX0KKwogCSpkbWFfY2hfb3V0ID0gZnJlZV9jaDsKIAogCXJldHVybiAwOwogfQogCi12b2lkIG9tYXBfZnJlZV9kbWEoaW50IGNoKQordm9pZCBvbWFwX2ZyZWVfZG1hKGludCBsY2gpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfY2hhbl9sb2NrLCBmbGFncyk7Ci0JaWYgKGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpIHsKLQkJcHJpbnRrKCJvbWFwX2RtYTogdHJ5aW5nIHRvIGZyZWUgbm9uYWxsb2NhdGVkIERNQSBjaGFubmVsICVkXG4iLCBjaCk7CisJaWYgKGRtYV9jaGFuW2xjaF0uZGV2X2lkID09IC0xKSB7CisJCXByaW50aygib21hcF9kbWE6IHRyeWluZyB0byBmcmVlIG5vbmFsbG9jYXRlZCBETUEgY2hhbm5lbCAlZFxuIiwKKwkJICAgICAgIGxjaCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KLQlkbWFfY2hhbltjaF0uZGV2X2lkID0gLTE7CisJZG1hX2NoYW5bbGNoXS5kZXZfaWQgPSAtMTsKKwlkbWFfY2hhbltsY2hdLm5leHRfbGNoID0gLTE7CisJZG1hX2NoYW5bbGNoXS5jYWxsYmFjayA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hX2NoYW5fbG9jaywgZmxhZ3MpOwogCi0JLyogRGlzYWJsZSBhbGwgRE1BIGludGVycnVwdHMgZm9yIHRoZSBjaGFubmVsLiAqLwotCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NJQ1IoY2gpKTsKLQkvKiBNYWtlIHN1cmUgdGhlIERNQSB0cmFuc2ZlciBpcyBzdG9wcGVkLiAqLwotCW9tYXBfd3JpdGV3KDAsIE9NQVBfRE1BX0NDUihjaCkpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCisJCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSAwOworCQkvKiBNYWtlIHN1cmUgdGhlIERNQSB0cmFuc2ZlciBpcyBzdG9wcGVkLiAqLworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgPSAwOworCX0KKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1MzIgdmFsOworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwkJdmFsID0gb21hcF9yZWFkbChPTUFQX0RNQTRfSVJRRU5BQkxFX0wwKTsKKwkJdmFsICY9IH4oMSA8PCBsY2gpOworCQlvbWFwX3dyaXRlbCh2YWwsIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDApOworCisJCS8qIENsZWFyIHRoZSBDU1IgcmVnaXN0ZXIgYW5kIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwkJT01BUF9ETUFfQ1NSX1JFRyhsY2gpID0gMHgwOworCisJCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisJCXZhbCB8PSAxIDw8IGxjaDsKKwkJb21hcF93cml0ZWwodmFsLCBPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKworCQkvKiBEaXNhYmxlIGFsbCBETUEgaW50ZXJydXB0cyBmb3IgdGhlIGNoYW5uZWwuICovCisJCU9NQVBfRE1BX0NJQ1JfUkVHKGxjaCkgPSAwOworCisJCS8qIE1ha2Ugc3VyZSB0aGUgRE1BIHRyYW5zZmVyIGlzIHN0b3BwZWQuICovCisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSA9IDA7CisJCW9tYXBfY2xlYXJfZG1hKGxjaCk7CisJfQogfQogCi1pbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpCisvKgorICogQ2xlYXJzIGFueSBETUEgc3RhdGUgc28gdGhlIERNQSBlbmdpbmUgaXMgcmVhZHkgdG8gcmVzdGFydCB3aXRoIG5ldyBidWZmZXJzCisgKiB0aHJvdWdoIG9tYXBfc3RhcnRfZG1hKCkuIEFueSBidWZmZXJzIGluIGZsaWdodCBhcmUgZGlzY2FyZGVkLgorICovCit2b2lkIG9tYXBfY2xlYXJfZG1hKGludCBsY2gpCiB7Ci0JcmV0dXJuIGVuYWJsZV8xNTEwX21vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlpbnQgc3RhdHVzOworCQlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgJj0gfk9NQVBfRE1BX0NDUl9FTjsKKworCQkvKiBDbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJc3RhdHVzID0gT01BUF9ETUFfQ1NSX1JFRyhsY2gpOworCX0KKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpbnQgaTsKKwkJdTMyIGxjaF9iYXNlID0gT01BUDI0WFhfRE1BX0JBU0UgKyBsY2ggKiAweDYwICsgMHg4MDsKKwkJZm9yIChpID0gMDsgaSA8IDB4NDQ7IGkgKz0gNCkKKwkJCW9tYXBfd3JpdGVsKDAsIGxjaF9iYXNlICsgaSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCit2b2lkIG9tYXBfc3RhcnRfZG1hKGludCBsY2gpCit7CisJaWYgKCFvbWFwX2RtYV9pbl8xNTEwX21vZGUoKSAmJiBkbWFfY2hhbltsY2hdLm5leHRfbGNoICE9IC0xKSB7CisJCWludCBuZXh0X2xjaCwgY3VyX2xjaDsKKwkJY2hhciBkbWFfY2hhbl9saW5rX21hcFtPTUFQX0xPR0lDQUxfRE1BX0NIX0NPVU5UXTsKKworCQlkbWFfY2hhbl9saW5rX21hcFtsY2hdID0gMTsKKwkJLyogU2V0IHRoZSBsaW5rIHJlZ2lzdGVyIG9mIHRoZSBmaXJzdCBjaGFubmVsICovCisJCWVuYWJsZV9sbmsobGNoKTsKKworCQltZW1zZXQoZG1hX2NoYW5fbGlua19tYXAsIDAsIHNpemVvZihkbWFfY2hhbl9saW5rX21hcCkpOworCQljdXJfbGNoID0gZG1hX2NoYW5bbGNoXS5uZXh0X2xjaDsKKwkJZG8geworCQkJbmV4dF9sY2ggPSBkbWFfY2hhbltjdXJfbGNoXS5uZXh0X2xjaDsKKworCQkJLyogVGhlIGxvb3AgY2FzZTogd2UndmUgYmVlbiBoZXJlIGFscmVhZHkgKi8KKwkJCWlmIChkbWFfY2hhbl9saW5rX21hcFtjdXJfbGNoXSkKKwkJCQlicmVhazsKKwkJCS8qIE1hcmsgdGhlIGN1cnJlbnQgY2hhbm5lbCAqLworCQkJZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0gPSAxOworCisJCQllbmFibGVfbG5rKGN1cl9sY2gpOworCQkJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEoY3VyX2xjaCk7CisKKwkJCWN1cl9sY2ggPSBuZXh0X2xjaDsKKwkJfSB3aGlsZSAobmV4dF9sY2ggIT0gLTEpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJLyogRXJyYXRhOiBOZWVkIHRvIHdyaXRlIGxjaCBldmVuIGlmIG5vdCB1c2luZyBjaGFpbmluZyAqLworCQlPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKGxjaCkgPSBsY2g7CisJfQorCisJb21hcF9lbmFibGVfY2hhbm5lbF9pcnEobGNoKTsKKworCS8qIEVycmF0YTogT24gRVMyLjAgQlVGRkVSSU5HIGRpc2FibGUgbXVzdCBiZSBzZXQuCisJICogVGhpcyB3aWxsIGFsd2F5cyBmYWlsIG9uIEVTMS4wICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSBPTUFQX0RNQV9DQ1JfRU47CisJfQorCisJT01BUF9ETUFfQ0NSX1JFRyhsY2gpIHw9IE9NQVBfRE1BX0NDUl9FTjsKKworCWRtYV9jaGFuW2xjaF0uZmxhZ3MgfD0gT01BUF9ETUFfQUNUSVZFOworfQorCit2b2lkIG9tYXBfc3RvcF9kbWEoaW50IGxjaCkKK3sKKwlpZiAoIW9tYXBfZG1hX2luXzE1MTBfbW9kZSgpICYmIGRtYV9jaGFuW2xjaF0ubmV4dF9sY2ggIT0gLTEpIHsKKwkJaW50IG5leHRfbGNoLCBjdXJfbGNoID0gbGNoOworCQljaGFyIGRtYV9jaGFuX2xpbmtfbWFwW09NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlRdOworCisJCW1lbXNldChkbWFfY2hhbl9saW5rX21hcCwgMCwgc2l6ZW9mKGRtYV9jaGFuX2xpbmtfbWFwKSk7CisJCWRvIHsKKwkJCS8qIFRoZSBsb29wIGNhc2U6IHdlJ3ZlIGJlZW4gaGVyZSBhbHJlYWR5ICovCisJCQlpZiAoZG1hX2NoYW5fbGlua19tYXBbY3VyX2xjaF0pCisJCQkJYnJlYWs7CisJCQkvKiBNYXJrIHRoZSBjdXJyZW50IGNoYW5uZWwgKi8KKwkJCWRtYV9jaGFuX2xpbmtfbWFwW2N1cl9sY2hdID0gMTsKKworCQkJZGlzYWJsZV9sbmsoY3VyX2xjaCk7CisKKwkJCW5leHRfbGNoID0gZG1hX2NoYW5bY3VyX2xjaF0ubmV4dF9sY2g7CisJCQljdXJfbGNoID0gbmV4dF9sY2g7CisJCX0gd2hpbGUgKG5leHRfbGNoICE9IC0xKTsKKworCQlyZXR1cm47CisJfQorCisJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBvbiB0aGUgY2hhbm5lbCAqLworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJT01BUF9ETUFfQ0lDUl9SRUcobGNoKSA9IDA7CisKKwlPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgJj0gfk9NQVBfRE1BX0NDUl9FTjsKKwlkbWFfY2hhbltsY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7Cit9CisKKy8qCisgKiBSZXR1cm5zIGN1cnJlbnQgcGh5c2ljYWwgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KKyAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCisgKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCisgKiBpcyBhIGNoYW5jZSBmb3IgQ1NTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZworICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KKyAqLworZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfc3JjX3BvcyhpbnQgbGNoKQoreworCWRtYV9hZGRyX3Qgb2Zmc2V0OworCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQorCQlvZmZzZXQgPSAoZG1hX2FkZHJfdCkgKE9NQVAxX0RNQV9DU1NBX0xfUkVHKGxjaCkgfAorCQkJCSAgICAgICAoT01BUDFfRE1BX0NTU0FfVV9SRUcobGNoKSA8PCAxNikpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlvZmZzZXQgPSBPTUFQX0RNQV9DU0FDX1JFRyhsY2gpOworCisJcmV0dXJuIG9mZnNldDsKK30KKworLyoKKyAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCisgKiBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgY2FsbGluZworICogdGhpcyBmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIGludGVycnVwdCB0bworICogcHJldmVudCByYWNlcyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gTm90ZSB0aGF0IGluIGNvbnRpbnVvdXMgbW9kZSB0aGVyZQorICogaXMgYSBjaGFuY2UgZm9yIENEU0FfTCByZWdpc3RlciBvdmVyZmxvdyBpbmJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKKyAqIGluIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCisgKi8KK2RtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCkKK3sKKwlkbWFfYWRkcl90IG9mZnNldDsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkKKwkJb2Zmc2V0ID0gKGRtYV9hZGRyX3QpIChPTUFQMV9ETUFfQ0RTQV9MX1JFRyhsY2gpIHwKKwkJCQkgICAgICAgKE9NQVAxX0RNQV9DRFNBX1VfUkVHKGxjaCkgPDwgMTYpKTsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJb2Zmc2V0ID0gT01BUDJfRE1BX0NEU0FfUkVHKGxjaCk7CisKKwlyZXR1cm4gb2Zmc2V0OworfQorCisvKgorICogUmV0dXJucyBjdXJyZW50IHNvdXJjZSB0cmFuc2ZlciBjb3VudGluZyBmb3IgdGhlIGdpdmVuIERNQSBjaGFubmVsLgorICogQ2FuIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgYSB0cmFuc2ZlciBpbnNpZGUgYSBibG9jay4KKyAqIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cy4KKyAqLworaW50IG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKGludCBsY2gpCit7CisJcmV0dXJuIChkbWFfYWRkcl90KSBPTUFQX0RNQV9DU0FDX1JFRyhsY2gpOworfQorCitpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKQoreworCWludCBsY2g7CisKKwkvKiBDaGVjayBpZiBMQ0QgRE1BIGlzIHJ1bm5pbmcgKi8KKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCWlmIChvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIE9NQVBfRE1BX0NDUl9FTikKKwkJCXJldHVybiAxOworCisJZm9yIChsY2ggPSAwOyBsY2ggPCBkbWFfY2hhbl9jb3VudDsgbGNoKyspCisJCWlmIChPTUFQX0RNQV9DQ1JfUkVHKGxjaCkgJiBPTUFQX0RNQV9DQ1JfRU4pCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOwogfQogCiAvKgpAQCAtNTUwLDcgKzczNyw4IEBACiAKIAlpZiAoKGRtYV9jaGFuW2xjaF9oZWFkXS5kZXZfaWQgPT0gLTEpIHx8CiAJICAgIChkbWFfY2hhbltsY2hfcXVldWVdLmRldl9pZCA9PSAtMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIGxpbmsgbm9uIHJlcXVlc3RlZCBjaGFubmVsc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IHRyeWluZyB0byBsaW5rICIKKwkJICAgICAgICJub24gcmVxdWVzdGVkIGNoYW5uZWxzXG4iKTsKIAkJZHVtcF9zdGFjaygpOwogCX0KIApAQCAtNTcwLDIwICs3NTgsMTQ5IEBACiAKIAlpZiAoZG1hX2NoYW5bbGNoX2hlYWRdLm5leHRfbGNoICE9IGxjaF9xdWV1ZSB8fAogCSAgICBkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIHVubGluayBub24gbGlua2VkIGNoYW5uZWxzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJvbWFwX2RtYTogdHJ5aW5nIHRvIHVubGluayAiCisJCSAgICAgICAibm9uIGxpbmtlZCBjaGFubmVsc1xuIik7CiAJCWR1bXBfc3RhY2soKTsKIAl9CiAKIAogCWlmICgoZG1hX2NoYW5bbGNoX2hlYWRdLmZsYWdzICYgT01BUF9ETUFfQUNUSVZFKSB8fAogCSAgICAoZG1hX2NoYW5bbGNoX2hlYWRdLmZsYWdzICYgT01BUF9ETUFfQUNUSVZFKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm9tYXBfZG1hOiBZb3UgbmVlZCB0byBzdG9wIHRoZSBETUEgY2hhbm5lbHMgYmVmb3JlIHVubGlua2luZ1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAib21hcF9kbWE6IFlvdSBuZWVkIHRvIHN0b3AgdGhlIERNQSBjaGFubmVscyAiCisJCSAgICAgICAiYmVmb3JlIHVubGlua2luZ1xuIik7CiAJCWR1bXBfc3RhY2soKTsKIAl9CiAKIAlkbWFfY2hhbltsY2hfaGVhZF0ubmV4dF9sY2ggPSAtMTsKIH0KIAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisKK3N0YXRpYyBpbnQgb21hcDFfZG1hX2hhbmRsZV9jaChpbnQgY2gpCit7CisJdTE2IGNzcjsKKworCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoID49IDYpIHsKKwkJY3NyID0gZG1hX2NoYW5bY2hdLnNhdmVkX2NzcjsKKwkJZG1hX2NoYW5bY2hdLnNhdmVkX2NzciA9IDA7CisJfSBlbHNlCisJCWNzciA9IE9NQVBfRE1BX0NTUl9SRUcoY2gpOworCWlmIChlbmFibGVfMTUxMF9tb2RlICYmIGNoIDw9IDIgJiYgKGNzciA+PiA3KSAhPSAwKSB7CisJCWRtYV9jaGFuW2NoICsgNl0uc2F2ZWRfY3NyID0gY3NyID4+IDc7CisJCWNzciAmPSAweDdmOworCX0KKwlpZiAoKGNzciAmIDB4M2YpID09IDApCisJCXJldHVybiAwOworCWlmICh1bmxpa2VseShkbWFfY2hhbltjaF0uZGV2X2lkID09IC0xKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJTcHVyaW91cyBpbnRlcnJ1cHQgZnJvbSBETUEgY2hhbm5lbCAiCisJCSAgICAgICAiJWQgKENTUiAlMDR4KVxuIiwgY2gsIGNzcik7CisJCXJldHVybiAwOworCX0KKwlpZiAodW5saWtlbHkoY3NyICYgT01BUF9ETUFfVE9VVF9JUlEpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJETUEgdGltZW91dCB3aXRoIGRldmljZSAlZFxuIiwKKwkJICAgICAgIGRtYV9jaGFuW2NoXS5kZXZfaWQpOworCWlmICh1bmxpa2VseShjc3IgJiBPTUFQX0RNQV9EUk9QX0lSUSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRNQSBzeW5jaHJvbml6YXRpb24gZXZlbnQgZHJvcCBvY2N1cnJlZCAiCisJCSAgICAgICAid2l0aCBkZXZpY2UgJWRcbiIsIGRtYV9jaGFuW2NoXS5kZXZfaWQpOworCWlmIChsaWtlbHkoY3NyICYgT01BUF9ETUFfQkxPQ0tfSVJRKSkKKwkJZG1hX2NoYW5bY2hdLmZsYWdzICY9IH5PTUFQX0RNQV9BQ1RJVkU7CisJaWYgKGxpa2VseShkbWFfY2hhbltjaF0uY2FsbGJhY2sgIT0gTlVMTCkpCisJCWRtYV9jaGFuW2NoXS5jYWxsYmFjayhjaCwgY3NyLCBkbWFfY2hhbltjaF0uZGF0YSk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMV9kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGNoID0gKChpbnQpIGRldl9pZCkgLSAxOworCWludCBoYW5kbGVkID0gMDsKKworCWZvciAoOzspIHsKKwkJaW50IGhhbmRsZWRfbm93ID0gMDsKKworCQloYW5kbGVkX25vdyArPSBvbWFwMV9kbWFfaGFuZGxlX2NoKGNoKTsKKwkJaWYgKGVuYWJsZV8xNTEwX21vZGUgJiYgZG1hX2NoYW5bY2ggKyA2XS5zYXZlZF9jc3IpCisJCQloYW5kbGVkX25vdyArPSBvbWFwMV9kbWFfaGFuZGxlX2NoKGNoICsgNik7CisJCWlmICghaGFuZGxlZF9ub3cpCisJCQlicmVhazsKKwkJaGFuZGxlZCArPSBoYW5kbGVkX25vdzsKKwl9CisKKwlyZXR1cm4gaGFuZGxlZCA/IElSUV9IQU5ETEVEIDogSVJRX05PTkU7Cit9CisKKyNlbHNlCisjZGVmaW5lIG9tYXAxX2RtYV9pcnFfaGFuZGxlcglOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisKK3N0YXRpYyBpbnQgb21hcDJfZG1hX2hhbmRsZV9jaChpbnQgY2gpCit7CisJdTMyIHN0YXR1cyA9IE9NQVBfRE1BX0NTUl9SRUcoY2gpOworCXUzMiB2YWw7CisKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGRtYV9jaGFuW2NoXS5kZXZfaWQgPT0gLTEpKQorCQlyZXR1cm4gMDsKKwkvKiBSRVZJU0lUOiBBY2NvcmRpbmcgdG8gMjR4eCBUUk0sIHRoZXJlJ3Mgbm8gVE9VVF9JRSAqLworCWlmICh1bmxpa2VseShzdGF0dXMgJiBPTUFQX0RNQV9UT1VUX0lSUSkpCisJCXByaW50ayhLRVJOX0lORk8gIkRNQSB0aW1lb3V0IHdpdGggZGV2aWNlICVkXG4iLAorCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVBfRE1BX0RST1BfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRNQSBzeW5jaHJvbml6YXRpb24gZXZlbnQgZHJvcCBvY2N1cnJlZCB3aXRoIGRldmljZSAiCisJCSAgICAgICAiJWRcbiIsIGRtYV9jaGFuW2NoXS5kZXZfaWQpOworCisJaWYgKHVubGlrZWx5KHN0YXR1cyAmIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHRyYW5zYWN0aW9uIGVycm9yIHdpdGggZGV2aWNlICVkXG4iLAorCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CisKKwlPTUFQX0RNQV9DU1JfUkVHKGNoKSA9IDB4MjA7CisKKwl2YWwgPSBvbWFwX3JlYWRsKE9NQVBfRE1BNF9JUlFTVEFUVVNfTDApOworCS8qIGNoIGluIHRoaXMgZnVuY3Rpb24gaXMgZnJvbSAwLTMxIHdoaWxlIGluIHJlZ2lzdGVyIGl0IGlzIDEtMzIgKi8KKwl2YWwgPSAxIDw8IChjaCk7CisJb21hcF93cml0ZWwodmFsLCBPTUFQX0RNQTRfSVJRU1RBVFVTX0wwKTsKKworCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQorCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIHN0YXR1cywgZG1hX2NoYW5bY2hdLmRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFNUQVRVUyByZWdpc3RlciBjb3VudCBpcyBmcm9tIDEtMzIgd2hpbGUgb3VyIGlzIDAtMzEgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdTMyIHZhbDsKKwlpbnQgaTsKKworCXZhbCA9IG9tYXBfcmVhZGwoT01BUF9ETUE0X0lSUVNUQVRVU19MMCk7CisKKwlmb3IgKGkgPSAxOyBpIDw9IE9NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7IGkrKykgeworCQlpbnQgYWN0aXZlID0gdmFsICYgKDEgPDwgKGkgLSAxKSk7CisJCWlmIChhY3RpdmUpCisJCQlvbWFwMl9kbWFfaGFuZGxlX2NoKGkgLSAxKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIG9tYXAyNHh4X2RtYV9pcnEgPSB7CisJLm5hbWUgPSAiRE1BIiwKKwkuaGFuZGxlciA9IG9tYXAyX2RtYV9pcnFfaGFuZGxlciwKKwkuZmxhZ3MgPSBTQV9JTlRFUlJVUFQKK307CisKKyNlbHNlCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBvbWFwMjR4eF9kbWFfaXJxOworI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBzdHJ1Y3QgbGNkX2RtYV9pbmZvIHsKIAlzcGlubG9ja190IGxvY2s7CkBAIC03OTUsNyArMTExMiw3IEBACiAJLyogQWx3YXlzIHNldCB0aGUgc291cmNlIHBvcnQgYXMgU0RSQU0gZm9yIG5vdyovCiAJdyAmPSB+KDB4MDMgPDwgNik7CiAJaWYgKGxjZF9kbWEuY2FsbGJhY2sgIT0gTlVMTCkKLQkJdyB8PSAxIDw8IDE7ICAgICAgICAgICAgLyogQmxvY2sgaW50ZXJydXB0IGVuYWJsZSAqLworCQl3IHw9IDEgPDwgMTsJCS8qIEJsb2NrIGludGVycnVwdCBlbmFibGUgKi8KIAllbHNlCiAJCXcgJj0gfigxIDw8IDEpOwogCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CkBAIC04MTQsNyArMTEzMSw4IEBACiAJb21hcF93cml0ZXcoZmksIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX0wpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbGNkX2RtYV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIGlycXJldHVybl90IGxjZF9kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1MTYgdzsKIApAQCAtODcwLDcgKzExODgsOCBAQAogCQlyZXR1cm47CiAJfQogCWlmICghZW5hYmxlXzE1MTBfbW9kZSkKLQkJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiB+MSwgT01BUDE2MTBfRE1BX0xDRF9DQ1IpOworCQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKSAmIH4xLAorCQkJICAgIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAlsY2RfZG1hLnJlc2VydmVkID0gMDsKIAlzcGluX3VubG9jaygmbGNkX2RtYS5sb2NrKTsKIH0KQEAgLTkzOSw5MyArMTI1OCwyNCBAQAogCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CiB9CiAKLS8qCi0gKiBDbGVhcnMgYW55IERNQSBzdGF0ZSBzbyB0aGUgRE1BIGVuZ2luZSBpcyByZWFkeSB0byByZXN0YXJ0IHdpdGggbmV3IGJ1ZmZlcnMKLSAqIHRocm91Z2ggb21hcF9zdGFydF9kbWEoKS4gQW55IGJ1ZmZlcnMgaW4gZmxpZ2h0IGFyZSBkaXNjYXJkZWQuCi0gKi8KLXZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBzdGF0dXM7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSkgJiB+T01BUF9ETUFfQ0NSX0VOLAotCQkgICAgT01BUF9ETUFfQ0NSKGxjaCkpOwotCXN0YXR1cyA9IE9NQVBfRE1BX0NTUihsY2gpOwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdHMgKi8KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGN1cnJlbnQgcGh5c2ljYWwgc291cmNlIGFkZHJlc3MgZm9yIHRoZSBnaXZlbiBETUEgY2hhbm5lbC4KLSAqIElmIHRoZSBjaGFubmVsIGlzIHJ1bm5pbmcgdGhlIGNhbGxlciBtdXN0IGRpc2FibGUgaW50ZXJydXB0cyBwcmlvciBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uIGFuZCBwcm9jZXNzIHRoZSByZXR1cm5lZCB2YWx1ZSBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0IHRvCi0gKiBwcmV2ZW50IHJhY2VzIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLiBOb3RlIHRoYXQgaW4gY29udGludW91cyBtb2RlIHRoZXJlCi0gKiBpcyBhIGNoYW5jZSBmb3IgQ1NTQV9MIHJlZ2lzdGVyIG92ZXJmbG93IGluYmV0d2VlbiB0aGUgdHdvIHJlYWRzIHJlc3VsdGluZwotICogaW4gaW5jb3JyZWN0IHJldHVybiB2YWx1ZS4KLSAqLwotZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfc3JjX3BvcyhpbnQgbGNoKQotewotCXJldHVybiAoZG1hX2FkZHJfdCkgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ1NTQV9MKGxjaCkpIHwKLQkob21hcF9yZWFkdyhPTUFQX0RNQV9DU1NBX1UobGNoKSkgPDwgMTYpKTsKLX0KLQotLyoKLSAqIFJldHVybnMgY3VycmVudCBwaHlzaWNhbCBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCi0gKiBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgY2FsbGluZwotICogdGhpcyBmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIGludGVycnVwdCB0bwotICogcHJldmVudCByYWNlcyB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gTm90ZSB0aGF0IGluIGNvbnRpbnVvdXMgbW9kZSB0aGVyZQotICogaXMgYSBjaGFuY2UgZm9yIENEU0FfTCByZWdpc3RlciBvdmVyZmxvdyBpbmJldHdlZW4gdGhlIHR3byByZWFkcyByZXN1bHRpbmcKLSAqIGluIGluY29ycmVjdCByZXR1cm4gdmFsdWUuCi0gKi8KLWRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCkKLXsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIChvbWFwX3JlYWR3KE9NQVBfRE1BX0NEU0FfTChsY2gpKSB8Ci0JKG9tYXBfcmVhZHcoT01BUF9ETUFfQ0RTQV9VKGxjaCkpIDw8IDE2KSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm5zIGN1cnJlbnQgc291cmNlIHRyYW5zZmVyIGNvdW50aW5nIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCi0gKiBDYW4gYmUgdXNlZCB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBhIHRyYW5zZmVyIGluc2lkZSBhICBibG9jay4KLSAqIEl0IG11c3QgYmUgY2FsbGVkIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cy4KLSAqLwotaW50IG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKGludCBsY2gpCi17Ci0JcmV0dXJuIChkbWFfYWRkcl90KSBvbWFwX3JlYWR3KE9NQVBfRE1BX0NTQUMobGNoKSk7Ci19Ci0KLWludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpCi17Ci0JaW50IGxjaDsKLQotCS8qIENoZWNrIGlmIExDRCBETUEgaXMgcnVubmluZyAqLwotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJaWYgKG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DQ1IpICYgT01BUF9ETUFfQ0NSX0VOKQotCQkJcmV0dXJuIDE7Ci0KLQlmb3IgKGxjaCA9IDA7IGxjaCA8IGRtYV9jaGFuX2NvdW50OyBsY2grKykgewotCQl1MTYgdzsKLQotCQl3ID0gb21hcF9yZWFkdyhPTUFQX0RNQV9DQ1IobGNoKSk7Ci0JCWlmICh3ICYgT01BUF9ETUFfQ0NSX0VOKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIGludCBfX2luaXQgb21hcF9pbml0X2RtYSh2b2lkKQogewogCWludCBjaCwgcjsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJETUEgc3VwcG9ydCBmb3IgT01BUDE1MTAgaW5pdGlhbGl6ZWRcbiIpOworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJETUEgc3VwcG9ydCBmb3IgT01BUDE1eHggaW5pdGlhbGl6ZWRcbiIpOwogCQlkbWFfY2hhbl9jb3VudCA9IDk7CiAJCWVuYWJsZV8xNTEwX21vZGUgPSAxOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2lzX29tYXA3MzAoKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSB2ZXJzaW9uICVkXG4iLAogCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9IV19JRCkpOwogCQlwcmludGsoS0VSTl9JTkZPICJETUEgY2FwYWJpbGl0aWVzOiAlMDh4OiUwOHg6JTA0eDolMDR4OiUwNHhcbiIsCi0JCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfVSkgPDwgMTYpIHwgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfTCksCi0JCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzFfVSkgPDwgMTYpIHwgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzFfTCksCisJCSAgICAgICAob21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzBfVSkgPDwgMTYpIHwKKwkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18wX0wpLAorCQkgICAgICAgKG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18xX1UpIDw8IDE2KSB8CisJCSAgICAgICBvbWFwX3JlYWR3KE9NQVBfRE1BX0NBUFNfMV9MKSwKIAkJICAgICAgIG9tYXBfcmVhZHcoT01BUF9ETUFfQ0FQU18yKSwgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzMpLAogCQkgICAgICAgb21hcF9yZWFkdyhPTUFQX0RNQV9DQVBTXzQpKTsKIAkJaWYgKCFlbmFibGVfMTUxMF9tb2RlKSB7CkBAIC0xMDM4LDYgKzEyODgsMTEgQEAKIAkJCWRtYV9jaGFuX2NvdW50ID0gMTY7CiAJCX0gZWxzZQogCQkJZG1hX2NoYW5fY291bnQgPSA5OworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJdTggcmV2aXNpb24gPSBvbWFwX3JlYWRiKE9NQVBfRE1BNF9SRVZJU0lPTik7CisJCXByaW50ayhLRVJOX0lORk8gIk9NQVAgRE1BIGhhcmR3YXJlIHJldmlzaW9uICVkLiVkXG4iLAorCQkgICAgICAgcmV2aXNpb24gPj4gNCwgcmV2aXNpb24gJiAweGYpOworCQlkbWFfY2hhbl9jb3VudCA9IE9NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlQ7CiAJfSBlbHNlIHsKIAkJZG1hX2NoYW5fY291bnQgPSAwOwogCQlyZXR1cm4gMDsKQEAgLTEwNDksNDEgKzEzMDQsNTYgQEAKIAltZW1zZXQoJmRtYV9jaGFuLCAwLCBzaXplb2YoZG1hX2NoYW4pKTsKIAogCWZvciAoY2ggPSAwOyBjaCA8IGRtYV9jaGFuX2NvdW50OyBjaCsrKSB7CisJCW9tYXBfY2xlYXJfZG1hKGNoKTsKIAkJZG1hX2NoYW5bY2hdLmRldl9pZCA9IC0xOwogCQlkbWFfY2hhbltjaF0ubmV4dF9sY2ggPSAtMTsKIAogCQlpZiAoY2ggPj0gNiAmJiBlbmFibGVfMTUxMF9tb2RlKQogCQkJY29udGludWU7CiAKLQkJLyogcmVxdWVzdF9pcnEoKSBkb2Vzbid0IGxpa2UgZGV2X2lkIChpZS4gY2gpIGJlaW5nIHplcm8sCi0JCSAqIHNvIHdlIGhhdmUgdG8ga2x1ZGdlIGFyb3VuZCB0aGlzLiAqLwotCQlyID0gcmVxdWVzdF9pcnEoZG1hX2lycVtjaF0sIGRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsCi0JCQkJKHZvaWQgKikgKGNoICsgMSkpOworCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJCS8qIHJlcXVlc3RfaXJxKCkgZG9lc24ndCBsaWtlIGRldl9pZCAoaWUuIGNoKSBiZWluZworCQkJICogemVybywgc28gd2UgaGF2ZSB0byBrbHVkZ2UgYXJvdW5kIHRoaXMuICovCisJCQlyID0gcmVxdWVzdF9pcnEob21hcDFfZG1hX2lycVtjaF0sCisJCQkJCW9tYXAxX2RtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsCisJCQkJCSh2b2lkICopIChjaCArIDEpKTsKKwkJCWlmIChyICE9IDApIHsKKwkJCQlpbnQgaTsKKworCQkJCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkICIKKwkJCQkgICAgICAgImZvciBETUEgKGVycm9yICVkKVxuIiwKKwkJCQkgICAgICAgb21hcDFfZG1hX2lycVtjaF0sIHIpOworCQkJCWZvciAoaSA9IDA7IGkgPCBjaDsgaSsrKQorCQkJCQlmcmVlX2lycShvbWFwMV9kbWFfaXJxW2ldLAorCQkJCQkJICh2b2lkICopIChpICsgMSkpOworCQkJCXJldHVybiByOworCQkJfQorCQl9CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQlzZXR1cF9pcnEoSU5UXzI0WFhfU0RNQV9JUlEwLCAmb21hcDI0eHhfZG1hX2lycSk7CisKKwkvKiBGSVhNRTogVXBkYXRlIExDRCBETUEgdG8gd29yayBvbiAyNHh4ICovCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCXIgPSByZXF1ZXN0X2lycShJTlRfRE1BX0xDRCwgbGNkX2RtYV9pcnFfaGFuZGxlciwgMCwKKwkJCQkiTENEIERNQSIsIE5VTEwpOwogCQlpZiAociAhPSAwKSB7CiAJCQlpbnQgaTsKIAotCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgJWQgZm9yIERNQSAoZXJyb3IgJWQpXG4iLAotCQkJICAgICAgIGRtYV9pcnFbY2hdLCByKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBjaDsgaSsrKQotCQkJCWZyZWVfaXJxKGRtYV9pcnFbaV0sICh2b2lkICopIChpICsgMSkpOworCQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgZm9yIExDRCBETUEgIgorCQkJICAgICAgICIoZXJyb3IgJWQpXG4iLCByKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBkbWFfY2hhbl9jb3VudDsgaSsrKQorCQkJCWZyZWVfaXJxKG9tYXAxX2RtYV9pcnFbaV0sICh2b2lkICopIChpICsgMSkpOwogCQkJcmV0dXJuIHI7CiAJCX0KIAl9Ci0JciA9IHJlcXVlc3RfaXJxKElOVF9ETUFfTENELCBsY2RfZG1hX2lycV9oYW5kbGVyLCAwLCAiTENEIERNQSIsIE5VTEwpOwotCWlmIChyICE9IDApIHsKLQkJaW50IGk7CiAKLQkJcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gcmVxdWVzdCBJUlEgZm9yIExDRCBETUEgKGVycm9yICVkKVxuIiwgcik7Ci0JCWZvciAoaSA9IDA7IGkgPCBkbWFfY2hhbl9jb3VudDsgaSsrKQotCQkJZnJlZV9pcnEoZG1hX2lycVtpXSwgKHZvaWQgKikgKGkgKyAxKSk7Ci0JCXJldHVybiByOwotCX0KIAlyZXR1cm4gMDsKIH0KIAogYXJjaF9pbml0Y2FsbChvbWFwX2luaXRfZG1hKTsKIAotCiBFWFBPUlRfU1lNQk9MKG9tYXBfZ2V0X2RtYV9zcmNfcG9zKTsKIEVYUE9SVF9TWU1CT0wob21hcF9nZXRfZG1hX2RzdF9wb3MpOwogRVhQT1JUX1NZTUJPTChvbWFwX2dldF9kbWFfc3JjX2FkZHJfY291bnRlcik7CkBAIC0xMTA5LDYgKzEzNzksOCBAQAogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfZGVzdF9kYXRhX3BhY2spOwogRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfZGVzdF9idXJzdF9tb2RlKTsKIAorRVhQT1JUX1NZTUJPTChvbWFwX3NldF9kbWFfcGFyYW1zKTsKKwogRVhQT1JUX1NZTUJPTChvbWFwX2RtYV9saW5rX2xjaCk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZG1hX3VubGlua19sY2gpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCA1NTA1OWEyLi43NmY3MjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogfTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzE1MTBbMl0gPSB7CiAJeyBPTUFQX01QVUlPX0JBU0UsICAgIElOVF9NUFVJTywgICAgICBJSF9NUFVJT19CQVNFLCBNRVRIT0RfTVBVSU8gfSwKIAl7IE9NQVAxNTEwX0dQSU9fQkFTRSwgSU5UX0dQSU9fQkFOSzEsIElIX0dQSU9fQkFTRSwgIE1FVEhPRF9HUElPXzE1MTAgfQpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGdwaW9fYmFuayAqZ2V0X2dwaW9fYmFuayhpbnQgZ3BpbykKIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCWlmIChPTUFQX0dQSU9fSVNfTVBVSU8oZ3BpbykpCiAJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJcmV0dXJuIC0xOwogCQlyZXR1cm4gMDsKIAl9Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJiBncGlvIDwgMTYpCiAJCXJldHVybiAwOwogI2VuZGlmCkBAIC02NTQsNyArNjU0LDcgQEAKIAkvKiBTZXQgdHJpZ2dlciB0byBub25lLiBZb3UgbmVlZCB0byBlbmFibGUgdGhlIHRyaWdnZXIgYWZ0ZXIgcmVxdWVzdF9pcnEgKi8KIAlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgSVJRVF9OT0VER0UpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewogCQl2b2lkIF9faW9tZW0gKnJlZzsKIApAQCAtNzM5LDcgKzczOSw3IEBACiAJYmFuayA9IChzdHJ1Y3QgZ3Bpb19iYW5rICopIGRlc2MtPmRhdGE7CiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfTVBVSU8pCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUF9NUFVJT19HUElPX0lOVDsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18xNTEwKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUzsKICNlbmRpZgpAQCAtNzc0LDcgKzc3NCw3IEBACiAJCQlkID0gaXJxX2Rlc2MgKyBncGlvX2lycTsKIAkJCWRlc2NfaGFuZGxlX2lycShncGlvX2lycSwgZCwgcmVncyk7CiAJCX0KLSAgICAgICAgfQorCX0KIH0KIAogc3RhdGljIHZvaWQgZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC04MzcsOCArODM3LDkgQEAKIAkudW5tYXNrID0gbXB1aW9fdW5tYXNrX2lycQogfTsKIAotc3RhdGljIGludCBpbml0aWFsaXplZCA9IDA7Ci1zdGF0aWMgc3RydWN0IGNsayAqIGdwaW9fY2sgPSBOVUxMOworc3RhdGljIGludCBpbml0aWFsaXplZDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19pY2s7CitzdGF0aWMgc3RydWN0IGNsayAqIGdwaW9fZmNrOwogCiBzdGF0aWMgaW50IF9faW5pdCBfb21hcF9ncGlvX2luaXQodm9pZCkKIHsKQEAgLTg0OCwxNCArODQ5LDI2IEBACiAJaW5pdGlhbGl6ZWQgPSAxOwogCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCWdwaW9fY2sgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZ3Bpb19jayIpOwotCQlpZiAoSVNfRVJSKGdwaW9fY2spKQorCQlncGlvX2ljayA9IGNsa19nZXQoTlVMTCwgImFybV9ncGlvX2NrIik7CisJCWlmIChJU19FUlIoZ3Bpb19pY2spKQogCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGFybV9ncGlvX2NrXG4iKTsKIAkJZWxzZQotCQkJY2xrX3VzZShncGlvX2NrKTsKKwkJCWNsa191c2UoZ3Bpb19pY2spOworCX0KKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJZ3Bpb19pY2sgPSBjbGtfZ2V0KE5VTEwsICJncGlvc19pY2siKTsKKwkJaWYgKElTX0VSUihncGlvX2ljaykpCisJCQlwcmludGsoIkNvdWxkIG5vdCBnZXQgZ3Bpb3NfaWNrXG4iKTsKKwkJZWxzZQorCQkJY2xrX3VzZShncGlvX2ljayk7CisJCWdwaW9fZmNrID0gY2xrX2dldChOVUxMLCAiZ3Bpb3NfZmNrIik7CisJCWlmIChJU19FUlIoZ3Bpb19pY2spKQorCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGdwaW9zX2Zja1xuIik7CisJCWVsc2UKKwkJCWNsa191c2UoZ3Bpb19mY2spOwogCX0KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUDE1MTAgR1BJTyBoYXJkd2FyZVxuIik7CiAJCWdwaW9fYmFua19jb3VudCA9IDI7CkBAIC05MDEsNyArOTE0LDcgQEAKIAkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfTVBVSU8pIHsKIAkJCW9tYXBfd3JpdGV3KDB4RkZGRiwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19HUElPX01BU0tJVCk7CiAJCX0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTUxMAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMTUxMCkgewogCQkJX19yYXdfd3JpdGV3KDB4ZmZmZiwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX01BU0spOwogCQkJX19yYXdfd3JpdGV3KDB4MDAwMCwgYmFuay0+YmFzZSArIE9NQVAxNTEwX0dQSU9fSU5UX1NUQVRVUyk7CkBAIC0xMDM4LDYgKzEwNTEsNyBAQAogCiAvKgogICogVGhpcyBtYXkgZ2V0IGNhbGxlZCBlYXJseSBmcm9tIGJvYXJkIHNwZWNpZmljIGluaXQKKyAqIGZvciBib2FyZHMgdGhhdCBoYXZlIGludGVycnVwdHMgcm91dGVkIHZpYSBGUEdBLgogICovCiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tY2JzcC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKaW5kZXggOWM5YjdkZi4uZWE5NDc1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMKQEAgLTQ5MSwxNyArNDkxLDIwIEBACiAJb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKIAkJCQkgICAgIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYsCiAJCQkJICAgICBsZW5ndGggPj4gMSwgMSwKLQkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCk7CisJCQkJICAgICBPTUFQX0RNQV9TWU5DX0VMRU1FTlQsCisJCQkJICAgICAwLCAwKTsKIAogCW9tYXBfc2V0X2RtYV9kZXN0X3BhcmFtcyhtY2JzcFtpZF0uZG1hX3R4X2xjaCwKIAkJCQkgT01BUF9ETUFfUE9SVF9USVBCLAogCQkJCSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCwKLQkJCQkgbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EWFIxKTsKKwkJCQkgbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EWFIxLAorCQkJCSAwLCAwKTsKIAogCW9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKG1jYnNwW2lkXS5kbWFfdHhfbGNoLAogCQkJCU9NQVBfRE1BX1BPUlRfRU1JRkYsCiAJCQkJT01BUF9ETUFfQU1PREVfUE9TVF9JTkMsCi0JCQkJYnVmZmVyKTsKKwkJCQlidWZmZXIsCisJCQkJMCwgMCk7CiAKIAlvbWFwX3N0YXJ0X2RtYShtY2JzcFtpZF0uZG1hX3R4X2xjaCk7CiAJd2FpdF9mb3JfY29tcGxldGlvbigmKG1jYnNwW2lkXS50eF9kbWFfY29tcGxldGlvbikpOwpAQCAtNTMxLDE3ICs1MzQsMjAgQEAKIAlvbWFwX3NldF9kbWFfdHJhbnNmZXJfcGFyYW1zKG1jYnNwW2lkXS5kbWFfcnhfbGNoLAogCQkJCSAgICAgT01BUF9ETUFfREFUQV9UWVBFX1MxNiwKIAkJCQkgICAgIGxlbmd0aCA+PiAxLCAxLAotCQkJCSAgICAgT01BUF9ETUFfU1lOQ19FTEVNRU5UKTsKKwkJCQkgICAgIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCwKKwkJCQkgICAgIDAsIDApOwogCiAJb21hcF9zZXRfZG1hX3NyY19wYXJhbXMobWNic3BbaWRdLmRtYV9yeF9sY2gsCiAJCQkJT01BUF9ETUFfUE9SVF9USVBCLAogCQkJCU9NQVBfRE1BX0FNT0RFX0NPTlNUQU5ULAotCQkJCW1jYnNwW2lkXS5pb19iYXNlICsgT01BUF9NQ0JTUF9SRUdfRFJSMSk7CisJCQkJbWNic3BbaWRdLmlvX2Jhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxLAorCQkJCTAsIDApOwogCiAJb21hcF9zZXRfZG1hX2Rlc3RfcGFyYW1zKG1jYnNwW2lkXS5kbWFfcnhfbGNoLAogCQkJCSBPTUFQX0RNQV9QT1JUX0VNSUZGLAogCQkJCSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQywKLQkJCQkgYnVmZmVyKTsKKwkJCQkgYnVmZmVyLAorCQkJCSAwLCAwKTsKIAogCW9tYXBfc3RhcnRfZG1hKG1jYnNwW2lkXS5kbWFfcnhfbGNoKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCYobWNic3BbaWRdLnJ4X2RtYV9jb21wbGV0aW9uKSk7CkBAIC02NDMsNyArNjQ5LDcgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcF9tY2JzcF9pbmZvIG1jYnNwXzE1MTBbXSA9IHsKIAlbMF0gPSB7IC52aXJ0X2Jhc2UgPSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSwKIAkJLmRtYV9yeF9zeW5jID0gT01BUF9ETUFfTUNCU1AxX1JYLApAQCAtNzEyLDcgKzcxOCw3IEBACiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF83MzApOwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJbWNic3BfaW5mbyA9IG1jYnNwXzE1MTA7CiAJCW1jYnNwX2NvdW50ID0gQVJSQVlfU0laRShtY2JzcF8xNTEwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tdXguYwppbmRleCA2NDQ4MjA0Li44YzFjMDE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbXV4LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL211eC5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIFV0aWxpdHkgdG8gc2V0IHRoZSBPbWFwIE1VWCBhbmQgUFVMTF9EV04gcmVnaXN0ZXJzIGZyb20gYSB0YWJsZSBpbiBtdXguaAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CiAgKgpAQCAtMjUsMzggKzI1LDc0IEBACiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi0jZGVmaW5lIF9fTVVYX0NfXwogI2luY2x1ZGUgPGFzbS9hcmNoL211eC5oPgogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiAKKyNkZWZpbmUgT01BUDI0WFhfTDRfQkFTRQkweDQ4MDAwMDAwCisjZGVmaW5lIE9NQVAyNFhYX1BVTExfRU5BCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1BVTExfVVAJKDEgPDwgNCkKKworc3RhdGljIHN0cnVjdCBwaW5fY29uZmlnICogcGluX3RhYmxlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGluX3RhYmxlX3N6OworCitleHRlcm4gc3RydWN0IHBpbl9jb25maWcgKiBvbWFwNzMwX3BpbnM7CitleHRlcm4gc3RydWN0IHBpbl9jb25maWcgKiBvbWFwMXh4eF9waW5zOworZXh0ZXJuIHN0cnVjdCBwaW5fY29uZmlnICogb21hcDI0eHhfcGluczsKKworaW50IF9faW5pdCBvbWFwX211eF9yZWdpc3RlcihzdHJ1Y3QgcGluX2NvbmZpZyAqIHBpbnMsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlwaW5fdGFibGUgPSBwaW5zOworCXBpbl90YWJsZV9zeiA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNldHMgdGhlIE9tYXAgTVVYIGFuZCBQVUxMX0RXTiByZWdpc3RlcnMgYmFzZWQgb24gdGhlIHRhYmxlCiAgKi8KLWludCBfX2luaXRfb3JfbW9kdWxlCi1vbWFwX2NmZ19yZWcoY29uc3QgcmVnX2NmZ190IHJlZ19jZmcpCitpbnQgX19pbml0X29yX21vZHVsZSBvbWFwX2NmZ19yZWcoY29uc3QgdW5zaWduZWQgbG9uZyBpbmRleCkKIHsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG11eF9zcGluX2xvY2spOwogCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlyZWdfY2ZnX3NldCAqY2ZnOworCXN0cnVjdCBwaW5fY29uZmlnICpjZmc7CiAJdW5zaWduZWQgaW50IHJlZ19vcmlnID0gMCwgcmVnID0gMCwgcHVfcGRfb3JpZyA9IDAsIHB1X3BkID0gMCwKIAkJcHVsbF9vcmlnID0gMCwgcHVsbCA9IDA7CiAJdW5zaWduZWQgaW50IG1hc2ssIHdhcm4gPSAwOwogCi0JaWYgKGNwdV9pc19vbWFwN3h4KCkpCi0JCXJldHVybiAwOworCWlmICghcGluX3RhYmxlKQorCQlCVUcoKTsKIAotCWlmIChyZWdfY2ZnID4gQVJSQVlfU0laRShyZWdfY2ZnX3RhYmxlKSkgewotCQlwcmludGsoS0VSTl9FUlIgIk1VWDogcmVnX2NmZyAlZFxuIiwgcmVnX2NmZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChpbmRleCA+PSBwaW5fdGFibGVfc3opIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIHBpbiBtdXggaW5kZXg6ICVsdSAoJWx1KVxuIiwKKwkJICAgICAgIGluZGV4LCBwaW5fdGFibGVfc3opOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWNmZyA9IChyZWdfY2ZnX3NldCAqKSZyZWdfY2ZnX3RhYmxlW3JlZ19jZmddOworCWNmZyA9IChzdHJ1Y3QgcGluX2NvbmZpZyAqKSZwaW5fdGFibGVbaW5kZXhdOworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQl1OCByZWcgPSAwOworCisJCXJlZyB8PSBjZmctPm1hc2sgJiAweDc7CisJCWlmIChjZmctPnB1bGxfdmFsKQorCQkJcmVnIHw9IE9NQVAyNFhYX1BVTExfRU5BOworCQlpZihjZmctPnB1X3BkX3ZhbCkKKwkJCXJlZyB8PSBPTUFQMjRYWF9QVUxMX1VQOworI2lmZGVmIENPTkZJR19PTUFQX01VWF9ERUJVRworCQlwcmludGsoIk11eGluZyAlcyAoMHglMDh4KTogMHglMDJ4IC0+IDB4JTAyeFxuIiwKKwkJICAgICAgIGNmZy0+bmFtZSwgT01BUDI0WFhfTDRfQkFTRSArIGNmZy0+bXV4X3JlZywKKwkJICAgICAgIG9tYXBfcmVhZGIoT01BUDI0WFhfTDRfQkFTRSArIGNmZy0+bXV4X3JlZyksIHJlZyk7CisjZW5kaWYKKwkJb21hcF93cml0ZWIocmVnLCBPTUFQMjRYWF9MNF9CQVNFICsgY2ZnLT5tdXhfcmVnKTsKKworCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBDaGVjayB0aGUgbXV4IHJlZ2lzdGVyIGluIHF1ZXN0aW9uICovCiAJaWYgKGNmZy0+bXV4X3JlZykgewpAQCAtMTU3LDcgKzE5Myw4IEBACiAJcmV0dXJuIDA7CiAjZW5kaWYKIH0KLQogRVhQT1JUX1NZTUJPTChvbWFwX2NmZ19yZWcpOwotCisjZWxzZQorI2RlZmluZSBvbWFwX211eF9pbml0KCkgZG8ge30gd2hpbGUoMCkKKyNkZWZpbmUgb21hcF9jZmdfcmVnKHgpCWRvIHt9IHdoaWxlKDApCiAjZW5kaWYJLyogQ09ORklHX09NQVBfTVVYICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9wbS5jCmluZGV4IGUxNWM2YzEuLjk2NmNjYTAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwpAQCAtNTQsMTEgKzU0LDEyIEBACiAjaW5jbHVkZSA8YXNtL2FyY2gvdHBzNjUwMTAuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9kc3BfY29tbW9uLmg+CiAKLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgInNyYW0uaCIKKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3NyYW0uaD4KIAogc3RhdGljIHVuc2lnbmVkIGludCBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV9TSVpFXTsKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCB1bHBkX3NsZWVwX3NhdmVbVUxQRF9TTEVFUF9TQVZFX1NJWkVdOworc3RhdGljIHVuc2lnbmVkIGludCBtcHVpNzMwX3NsZWVwX3NhdmVbTVBVSTczMF9TTEVFUF9TQVZFX1NJWkVdOwogc3RhdGljIHVuc2lnbmVkIGludCBtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfU0laRV07CiBzdGF0aWMgdW5zaWduZWQgaW50IG1wdWkxNjEwX3NsZWVwX3NhdmVbTVBVSTE2MTBfU0xFRVBfU0FWRV9TSVpFXTsKIApAQCAtMTIwLDggKzEyMSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCiB7Ci0JdTMyIGxldmVsMV93YWtlID0gT01BUF9JUlFfQklUKElOVF9JSDJfSVJRKTsKLQl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKSB8IE9NQVBfSVJRX0JJVChJTlRfS0VZQk9BUkQpOworCXUzMiBsZXZlbDFfd2FrZSA9IDA7CisJdTMyIGxldmVsMl93YWtlID0gT01BUF9JUlFfQklUKElOVF9VQVJUMik7CiAKIAkvKgogCSAqIFR1cm4gb2ZmIGFsbCBpbnRlcnJ1cHRzIGV4Y2VwdCBHUElPIGJhbmsgMSwgTDEtMm5kIGxldmVsIGNhc2NhZGUsCkBAIC0xMjksMTkgKzEzMCwyOSBAQAogCSAqIGRyaXZlcnMgbXVzdCBzdGlsbCBzZXBhcmF0ZWx5IGNhbGwgb21hcF9zZXRfZ3Bpb193YWtldXAoKSB0bwogCSAqIHdha2UgdXAgdG8gYSBHUElPIGludGVycnVwdC4KIAkgKi8KLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkgfHwgY3B1X2lzX29tYXAxNnh4KCkpCi0JCWxldmVsMV93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSk7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXA3MzAoKSkKLQkJbGV2ZWwxX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF83MzBfR1BJT19CQU5LMSk7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCWxldmVsMV93YWtlID0gT01BUF9JUlFfQklUKElOVF83MzBfR1BJT19CQU5LMSkgfAorCQkJT01BUF9JUlFfQklUKElOVF83MzBfSUgyX0lSUSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpCisJCWxldmVsMV93YWtlID0gT01BUF9JUlFfQklUKElOVF9HUElPX0JBTksxKSB8CisJCQlPTUFQX0lSUV9CSVQoSU5UXzE1MTBfSUgyX0lSUSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCWxldmVsMV93YWtlID0gT01BUF9JUlFfQklUKElOVF9HUElPX0JBTksxKSB8CisJCQlPTUFQX0lSUV9CSVQoSU5UXzE2MTBfSUgyX0lSUSk7CiAKIAlvbWFwX3dyaXRlbCh+bGV2ZWwxX3dha2UsIE9NQVBfSUgxX01JUik7CiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpCi0JCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgIE9NQVBfSUgyX01JUik7Ci0KLQkvKiBJTlRfMTYxMF9XQUtFX1VQX1JFUSBpcyBuZWVkZWQgZm9yIEdQSU8gd2FrZXVwLi4uICovCi0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKIAkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7CisJCW9tYXBfd3JpdGVsKH4oT01BUF9JUlFfQklUKElOVF83MzBfV0FLRV9VUF9SRVEpIHwgT01BUF9JUlFfQklUKElOVF83MzBfTVBVSU9fS0VZUEFEKSksIE9NQVBfSUgyXzFfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWxldmVsMl93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfS0VZQk9BUkQpOworCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsICBPTUFQX0lIMl9NSVIpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJbGV2ZWwyX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7CisJCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgT01BUF9JSDJfMF9NSVIpOworCisJCS8qIElOVF8xNjEwX1dBS0VfVVBfUkVRIGlzIG5lZWRlZCBmb3IgR1BJTyB3YWtldXAuLi4gKi8KIAkJb21hcF93cml0ZWwofk9NQVBfSVJRX0JJVChJTlRfMTYxMF9XQUtFX1VQX1JFUSksIE9NQVBfSUgyXzFfTUlSKTsKIAkJb21hcF93cml0ZWwofjB4MCwgT01BUF9JSDJfMl9NSVIpOwogCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8zX01JUik7CkBAIC0xODUsNyArMTk2LDE3IEBACiAgCSAqIFNhdmUgaW50ZXJydXB0LCBNUFVJLCBBUk0gYW5kIFVQTEQgY29udHJvbCByZWdpc3RlcnMuCiAJICovCiAKLQlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCQlNUFVJNzMwX1NBVkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTczMF9TQVZFKE9NQVBfSUgyXzBfTUlSKTsKKwkJTVBVSTczMF9TQVZFKE9NQVBfSUgyXzFfTUlSKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfQ1RSTCk7CisJCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CisJCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9BUElfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUk3MzBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOworCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlNUFVJMTUxMF9TQVZFKE9NQVBfSUgxX01JUik7CiAJCU1QVUkxNTEwX1NBVkUoT01BUF9JSDJfTUlSKTsKIAkJTVBVSTE1MTBfU0FWRShNUFVJX0NUUkwpOwpAQCAtMjgwLDcgKzMwMSwxMyBAQAogCVVMUERfUkVTVE9SRShVTFBEX0NMT0NLX0NUUkwpOwogCVVMUERfUkVTVE9SRShVTFBEX1NUQVRVU19SRVEpOwogCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwkJTVBVSTczMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7CisJCU1QVUk3MzBfUkVTVE9SRShFTUlGRl9TRFJBTV9DT05GSUcpOworCQlNUFVJNzMwX1JFU1RPUkUoT01BUF9JSDFfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzBfTUlSKTsKKwkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgyXzFfTUlSKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9DVFJMKTsKIAkJTVBVSTE1MTBfUkVTVE9SRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CiAJCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7CkBAIC0zNTUsNyArMzgyLDE0IEBACiAJVUxQRF9TQVZFKFVMUERfRFBMTF9DVFJMKTsKIAlVTFBEX1NBVkUoVUxQRF9QT1dFUl9DVFJMKTsKIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCU1QVUk3MzBfU0FWRShNUFVJX0NUUkwpOworCQlNUFVJNzMwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOworCQlNUFVJNzMwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKKwkJTVBVSTczMF9TQVZFKEVNSUZTX0NPTkZJRyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewogCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7CiAJCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfU1RBVFVTKTsKIAkJTVBVSTE1MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7CkBAIC00MDQsNyArNDM4LDIxIEBACiAJCSAgIFVMUERfU0hPVyhVTFBEX1NUQVRVU19SRVEpLAogCQkgICBVTFBEX1NIT1coVUxQRF9QT1dFUl9DVFJMKSk7CiAKLQkJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCisJCQkgICAiTVBVSTczMF9DVFJMX1JFRwkgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJNzMwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKKwkJCSAgICJNUFVJNzMwX0RTUF9CT09UX0NPTkZJR19SRUc6IDB4JS04eCBcbiIKKwkgIk1QVUk3MzBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgorCSAiTVBVSTczMF9TRFJBTV9DT05GSUdfUkVHOiAgICAweCUtOHggXG4iCisJICJNUFVJNzMwX0VNSUZTX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIsCisJIE1QVUk3MzBfU0hPVyhNUFVJX0NUUkwpLAorCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfU1RBVFVTKSwKKwkgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0JPT1RfQ09ORklHKSwKKwkgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAorCSBNUFVJNzMwX1NIT1coRU1JRkZfU0RSQU1fQ09ORklHKSwKKwkgTVBVSTczMF9TSE9XKEVNSUZTX0NPTkZJRykpOworCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CiAJCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCiAJCQkgICAiTVBVSTE1MTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHglLTh4IFxuIgogCQkJICAgIk1QVUkxNTEwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKQEAgLTU1Myw3ICs2MDEsMTIgQEAKIAkgKiBUaGVzZSByb3V0aW5lcyBuZWVkIHRvIGJlIGluIFNSQU0gYXMgdGhhdCdzIHRoZSBvbmx5CiAJICogbWVtb3J5IHRoZSBNUFUgY2FuIHNlZSB3aGVuIGl0IHdha2VzIHVwLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDczMCgpKSB7CisJCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZCwKKwkJCQkJCW9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmRfc3opOworCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXA3MzBfY3B1X3N1c3BlbmQsCisJIG9tYXA3MzBfY3B1X3N1c3BlbmRfc3opOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJb21hcF9zcmFtX2lkbGUgPSBvbWFwX3NyYW1fcHVzaChvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCwKIAkJCQkJCW9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKIAkJb21hcF9zcmFtX3N1c3BlbmQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMTUxMF9jcHVfc3VzcGVuZCwKQEAgLTU3Miw3ICs2MjUsMTEgQEAKIAogCXBtX2lkbGUgPSBvbWFwX3BtX2lkbGU7CiAKLQlzZXR1cF9pcnEoSU5UXzE2MTBfV0FLRV9VUF9SRVEsICZvbWFwX3dha2V1cF9pcnEpOworCWlmIChjcHVfaXNfb21hcDczMCgpKQorCQlzZXR1cF9pcnEoSU5UXzczMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7CisKICNpZiAwCiAJLyogLS0tIEJFR0lOIEJPQVJELURFUEVOREVOVCBDT0RFIC0tLSAqLwogCS8qIFNsZWVweCBtYXNrIGRpcmVjdGlvbiAqLwpAQCAtNTkxLDcgKzY0OCw5IEBACiAJb21hcF93cml0ZXcoVUxQRF9QT1dFUl9DVFJMX1JFR19WQUwsIFVMUERfUE9XRVJfQ1RSTCk7CiAKIAkvKiBDb25maWd1cmUgSURMRUNUMyAqLwotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJb21hcF93cml0ZWwoT01BUDczMF9JRExFQ1QzX1ZBTCwgT01BUDczMF9JRExFQ1QzKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkKIAkJb21hcF93cml0ZWwoT01BUDE2MTBfSURMRUNUM19WQUwsIE9NQVAxNjEwX0lETEVDVDMpOwogCiAJcG1fc2V0X29wcygmb21hcF9wbV9vcHMpOwpAQCAtNjAwLDggKzY1OSwxMCBAQAogCW9tYXBfcG1faW5pdF9wcm9jKCk7CiAjZW5kaWYKIAotCS8qIGNvbmZpZ3VyZSBMT1dfUFdSIHBpbiAqLwotCW9tYXBfY2ZnX3JlZyhUMjBfMTYxMF9MT1dfUFdSKTsKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKKwkJLyogY29uZmlndXJlIExPV19QV1IgcGluICovCisJCW9tYXBfY2ZnX3JlZyhUMjBfMTYxMF9MT1dfUFdSKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zbGVlcC5TIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKaW5kZXggOWY3NDU4My4uNGNkN2QyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3NsZWVwLlMKICAqCi0gKiBMb3ctbGV2ZWwgT01BUDE1MTAvMTYxMCBzbGVlcC93YWtlVXAgc3VwcG9ydAorICogTG93LWxldmVsIE9NQVA3MzAvMTUxMC8xNjEwIHNsZWVwL3dha2VVcCBzdXBwb3J0CiAgKgogICogSW5pdGlhbCBTQTExMTAgY29kZToKICAqIENvcHlyaWdodCAoYykgMjAwMSBDbGlmZiBCcmFrZSA8Y2JyYWtlQGFjY2VsZW50LmNvbT4KQEAgLTUyLDcgKzUyLDU3IEBACiAgKiAgICAgICBwcm9jZXNzb3Igc3BlY2lmaWMgZnVuY3Rpb25zIGhlcmUuCiAgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorRU5UUlkob21hcDczMF9pZGxlX2xvb3Bfc3VzcGVuZCkKKworCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKworCUAgbG9hZCBiYXNlIGFkZHJlc3Mgb2YgQVJNX0lETEVDVDEgYW5kIEFSTV9JRExFQ1QyCisJbW92CXI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4ZmYwMDAwMDAKKwlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDBmZjAwMDAKKwlvcnIJcjQsIHI0LCAjQ0xLR0VOX1JFR19BU01fQkFTRSAmIDB4MDAwMGZmMDAKKworCUAgdHVybiBvZmYgY2xvY2sgZG9tYWlucworCUAgZ2V0IEFSTV9JRExFQ1QyIGludG8gcjIKKwlsZHJoCXIyLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKwltb3YJcjUsICNPTUFQNzMwX0lETEVDVDJfU0xFRVBfVkFMICYgMHhmZgorCW9ycglyNSwgcjUsICNPTUFQNzMwX0lETEVDVDJfU0xFRVBfVkFMICYgMHhmZjAwCisJc3RyaAlyNSwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHJlcXVlc3QgQVJNIGlkbGUKKwlAIGdldCBBUk1fSURMRUNUMSBpbnRvIHIxCisJbGRyaAlyMSwgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisJb3JyCXIzLCByMSwgI09NQVA3MzBfSURMRV9MT09QX1JFUVVFU1QgJiAweGZmZmYKKwlzdHJoCXIzLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCW1vdglyNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmCisJb3JyCXI1LCByNSwgI0lETEVfV0FJVF9DWUNMRVMgJiAweGZmMDAKK2xfNzMwOglzdWJzCXI1LCByNSwgIzEKKwlibmUJbF83MzAKKy8qCisgKiBMZXQncyB3YWl0IGZvciB0aGUgbmV4dCBjbG9jayB0aWNrIHRvIHdha2UgdXMgdXAuCisgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNAkJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKy8qCisgKiBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCisgKgorICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCisgKiBzdGFjaywgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKyAqLworCisJQCByZXN0b3JlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMiBhbmQgcmV0dXJuCisJQCByMSBoYXMgQVJNX0lETEVDVDEgYW5kIHIyIHN0aWxsIGhhcyBBUk1fSURMRUNUMgorCXN0cmgJcjIsIFtyNCwgI0FSTV9JRExFQ1QyX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cmgJcjEsIFtyNCwgI0FSTV9JRExFQ1QxX0FTTV9PRkZTRVQgJiAweGZmXQorCisJbGRtZmQJc3AhLCB7cjAgLSByMTIsIHBjfQkJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCitFTlRSWShvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KQorCS53b3JkCS4gLSBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDczMCAqLworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIEVOVFJZKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kKQogCiAJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMTAwLDcgKzE1MCw3IEBACiAKIEVOVFJZKG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KQogCS53b3JkCS4gLSBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZAotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNTEwICovCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCiBFTlRSWShvbWFwMTYxMF9pZGxlX2xvb3Bfc3VzcGVuZCkKQEAgLTE2OSw3ICsyMTksODYgQEAKICAqCiAgKi8KIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQorRU5UUlkob21hcDczMF9jcHVfc3VzcGVuZCkKKworCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CisKKwlAIERyYWluIHdyaXRlIGNhY2hlCisJbW92CXI0LCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CisJbm9wCisKKwlAIGxvYWQgYmFzZSBhZGRyZXNzIG9mIFRyYWZmaWMgQ29udHJvbGxlcgorCW1vdglyNiwgI1RDTUlGX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNiwgcjYsICNUQ01JRl9BU01fQkFTRSAmIDB4MDBmZjAwMDAKKwlvcnIJcjYsIHI2LCAjVENNSUZfQVNNX0JBU0UgJiAweDAwMDBmZjAwCisKKwlAIHByZXBhcmUgdG8gcHV0IFNEUkFNIGludG8gc2VsZi1yZWZyZXNoIG1hbnVhbGx5CisJbGRyCXI3LCBbcjYsICNFTUlGRl9TRFJBTV9DT05GSUdfQVNNX09GRlNFVCAmIDB4ZmZdCisJb3JyCXI5LCByNywgI1NFTEZfUkVGUkVTSF9NT0RFICYgMHhmZjAwMDAwMAorCW9ycglyOSwgcjksICNTRUxGX1JFRlJFU0hfTU9ERSAmIDB4MDAwMDAwZmYKKwlzdHIJcjksIFtyNiwgI0VNSUZGX1NEUkFNX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgcHJlcGFyZSB0byBwdXQgRU1JRlMgdG8gU2xlZXAKKwlsZHIJcjgsIFtyNiwgI0VNSUZTX0NPTkZJR19BU01fT0ZGU0VUICYgMHhmZl0KKwlvcnIJcjksIHI4LCAjSURMRV9FTUlGU19SRVFVRVNUICYgMHhmZgorCXN0cglyOSwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCBsb2FkIGJhc2UgYWRkcmVzcyBvZiBBUk1fSURMRUNUMSBhbmQgQVJNX0lETEVDVDIKKwltb3YJcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHhmZjAwMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMGZmMDAwMAorCW9ycglyNCwgcjQsICNDTEtHRU5fUkVHX0FTTV9CQVNFICYgMHgwMDAwZmYwMAorCisJQCB0dXJuIG9mZiBjbG9jayBkb21haW5zCisJQCBkbyBub3QgZGlzYWJsZSBQRVJDSyAoMHgwNCkKKwltb3YJcjUsICNPTUFQNzMwX0lETEVDVDJfU0xFRVBfVkFMICYgMHhmZgorCW9ycglyNSwgcjUsICNPTUFQNzMwX0lETEVDVDJfU0xFRVBfVkFMICYgMHhmZjAwCisJc3RyaAlyNSwgW3I0LCAjQVJNX0lETEVDVDJfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIHJlcXVlc3QgQVJNIGlkbGUKKwltb3YJcjMsICNPTUFQNzMwX0lETEVDVDFfU0xFRVBfVkFMICYgMHhmZgorCW9ycglyMywgcjMsICNPTUFQNzMwX0lETEVDVDFfU0xFRVBfVkFMICYgMHhmZjAwCisJc3RyaAlyMywgW3I0LCAjQVJNX0lETEVDVDFfQVNNX09GRlNFVCAmIDB4ZmZdCisKKwlAIGRpc2FibGUgaW5zdHJ1Y3Rpb24gY2FjaGUKKwltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCisJYmljCXIyLCByOSwgIzB4MTAwMAorCW1jcglwMTUsIDAsIHIyLCBjMSwgYzAsIDAKKwlub3AKKworLyoKKyAqIExldCdzIHdhaXQgZm9yIHRoZSBuZXh0IHdha2UgdXAgZXZlbnQgdG8gd2FrZSB1cyB1cC4gcjAgY2FuJ3QgYmUKKyAqIHVzZWQgaGVyZSBiZWNhdXNlIHIwIGhvbGRzIEFSTV9JRExFQ1QxCisgKi8KKwltb3YJcjIsICMwCisJbWNyCXAxNSwgMCwgcjIsIGM3LCBjMCwgNAkJQCB3YWl0IGZvciBpbnRlcnJ1cHQKKy8qCisgKiBvbWFwNzMwX2NwdV9zdXNwZW5kKCkncyByZXN1bWUgcG9pbnQuCisgKgorICogSXQgd2lsbCBqdXN0IHN0YXJ0IGV4ZWN1dGluZyBoZXJlLCBzbyB3ZSdsbCByZXN0b3JlIHN0dWZmIGZyb20gdGhlCisgKiBzdGFjay4KKyAqLworCUAgcmUtZW5hYmxlIEljYWNoZQorCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAKKworCUAgcmVzZXQgdGhlIEFSTV9JRExFQ1QxIGFuZCBBUk1fSURMRUNUMi4KKwlzdHJoCXIxLCBbcjQsICNBUk1fSURMRUNUMl9BU01fT0ZGU0VUICYgMHhmZl0KKwlzdHJoCXIwLCBbcjQsICNBUk1fSURMRUNUMV9BU01fT0ZGU0VUICYgMHhmZl0KKworCUAgUmVzdG9yZSBFTUlGRiBjb250cm9scworCXN0cglyNywgW3I2LCAjRU1JRkZfU0RSQU1fQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCXN0cglyOCwgW3I2LCAjRU1JRlNfQ09ORklHX0FTTV9PRkZTRVQgJiAweGZmXQorCisJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkCXNwISwge3IwIC0gcjEyLCBwY30KKworRU5UUlkob21hcDczMF9jcHVfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gb21hcDczMF9jcHVfc3VzcGVuZAorI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVA3MzAgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBFTlRSWShvbWFwMTUxMF9jcHVfc3VzcGVuZCkKIAogCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKQEAgLTI0MSw3ICszNzAsNyBAQAogCiBFTlRSWShvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeikKIAkud29yZAkuIC0gb21hcDE1MTBfY3B1X3N1c3BlbmQKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogRU5UUlkob21hcDE2MTBfY3B1X3N1c3BlbmQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCA3YWQ2OWYxLi43OTJmNjYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTIwLDEwICsyMCwxMyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKLSNpbmNsdWRlICJzcmFtLmgiCisjaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgogCi0jZGVmaW5lIE9NQVAxX1NSQU1fQkFTRQkJMHhkMDAwMDAwMAotI2RlZmluZSBPTUFQMV9TUkFNX1NUQVJUCTB4MjAwMDAwMDAKKyNkZWZpbmUgT01BUDFfU1JBTV9QQQkJMHgyMDAwMDAwMAorI2RlZmluZSBPTUFQMV9TUkFNX1ZBCQkweGQwMDAwMDAwCisjZGVmaW5lIE9NQVAyX1NSQU1fUEEJCTB4NDAyMDAwMDAKKyNkZWZpbmUgT01BUDJfU1JBTV9WQQkJMHhkMDAwMDAwMAorCiAjZGVmaW5lIFNSQU1fQk9PVExPQURFUl9TWgkweDgwCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXBfc3JhbV9iYXNlOwpAQCAtMzEsMzcgKzM0LDQwIEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwX3NyYW1fY2VpbDsKIAogLyoKLSAqIFRoZSBhbW91bnQgb2YgU1JBTSBkZXBlbmRzIG9uIHRoZSBjb3JlIHR5cGU6Ci0gKiA3MzAgPSAyMDBLLCAxNTEwID0gNTEySywgNTkxMiA9IDI1NkssIDE2MTAgPSAxNkssIDE3MTAgPSAxNksKKyAqIFRoZSBhbW91bnQgb2YgU1JBTSBkZXBlbmRzIG9uIHRoZSBjb3JlIHR5cGUuCiAgKiBOb3RlIHRoYXQgd2UgY2Fubm90IHRyeSB0byB0ZXN0IGZvciBTUkFNIGhlcmUgYmVjYXVzZSB3cml0ZXMKICAqIHRvIHNlY3VyZSBTUkFNIHdpbGwgaGFuZyB0aGUgc3lzdGVtLiBBbHNvIHRoZSBTUkFNIGlzIG5vdAogICogeWV0IG1hcHBlZCBhdCB0aGlzIHBvaW50LgogICovCiB2b2lkIF9faW5pdCBvbWFwX2RldGVjdF9zcmFtKHZvaWQpCiB7Ci0Jb21hcF9zcmFtX2Jhc2UgPSBPTUFQMV9TUkFNX0JBU0U7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcF9zcmFtX2Jhc2UgPSBPTUFQMV9TUkFNX1ZBOworCWVsc2UKKwkJb21hcF9zcmFtX2Jhc2UgPSBPTUFQMl9TUkFNX1ZBOwogCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzMjAwMDsKLQllbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkKLQkJb21hcF9zcmFtX3NpemUgPSAweDgwMDAwOworCQlvbWFwX3NyYW1fc2l6ZSA9IDB4MzIwMDA7CS8qIDIwMEsgKi8KKwllbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJb21hcF9zcmFtX3NpemUgPSAweDMwMDAwOwkvKiAxOTJLICovCiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjEwKCkgfHwgY3B1X2lzX29tYXAxNjIxKCkgfHwgY3B1X2lzX29tYXAxNzEwKCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHg0MDAwOworCQlvbWFwX3NyYW1fc2l6ZSA9IDB4NDAwMDsJLyogMTZLICovCiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNjExKCkpCi0JCW9tYXBfc3JhbV9zaXplID0gMHgzZTgwMDsKKwkJb21hcF9zcmFtX3NpemUgPSAweDNlODAwOwkvKiAyNTBLICovCisJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCW9tYXBfc3JhbV9zaXplID0gMHhhMDAxNDsJLyogNjQwSyAqLwogCWVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBkZXRlY3QgU1JBTSBzaXplXG4iKTsKIAkJb21hcF9zcmFtX3NpemUgPSAweDQwMDA7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU1JBTSBzaXplOiAweCVseFxuIiwgb21hcF9zcmFtX3NpemUpOwogCW9tYXBfc3JhbV9jZWlsID0gb21hcF9zcmFtX2Jhc2UgKyBvbWFwX3NyYW1fc2l6ZTsKIH0KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwX3NyYW1faW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CiAJewkvKiAubGVuZ3RoIGdldHMgZmlsbGVkIGluIGF0IHJ1bnRpbWUgKi8KLQkJLnZpcnR1YWwJPSBPTUFQMV9TUkFNX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMV9TUkFNX1NUQVJUKSwKKwkJLnZpcnR1YWwJPSBPTUFQMV9TUkFNX1ZBLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDFfU1JBTV9QQSksCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0KIH07CkBAIC03NiwxMCArODIsMTkgQEAKIAlpZiAob21hcF9zcmFtX3NpemUgPT0gMCkKIAkJcmV0dXJuOwogCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW9tYXBfc3JhbV9pb19kZXNjWzBdLnZpcnR1YWwgPSBPTUFQMl9TUkFNX1ZBOworCQlvbWFwX3NyYW1faW9fZGVzY1swXS5wZm4gPSBfX3BoeXNfdG9fcGZuKE9NQVAyX1NSQU1fUEEpOworCX0KKwogCW9tYXBfc3JhbV9pb19kZXNjWzBdLmxlbmd0aCA9IChvbWFwX3NyYW1fc2l6ZSArIFBBR0VfU0laRS0xKS9QQUdFX1NJWkU7CiAJb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoICo9IFBBR0VfU0laRTsKIAlpb3RhYmxlX2luaXQob21hcF9zcmFtX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcF9zcmFtX2lvX2Rlc2MpKTsKIAorCXByaW50ayhLRVJOX0lORk8gIlNSQU06IE1hcHBlZCBwYSAweCUwOGx4IHRvIHZhIDB4JTA4bHggc2l6ZTogMHglbHhcbiIsCisJICAgICAgIG9tYXBfc3JhbV9pb19kZXNjWzBdLnBmbiwgb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCwKKwkgICAgICAgb21hcF9zcmFtX2lvX2Rlc2NbMF0ubGVuZ3RoKTsKKwogCS8qCiAJICogTG9va3MgbGlrZSB3ZSBuZWVkIHRvIHByZXNlcnZlIHNvbWUgYm9vdGxvYWRlciBjb2RlIGF0IHRoZQogCSAqIGJlZ2lubmluZyBvZiBTUkFNIGZvciBqdW1waW5nIHRvIGZsYXNoIGZvciByZWJvb3QgdG8gd29yay4uLgpAQCAtODgsMTYgKzEwMyw2IEBACiAJICAgICAgIG9tYXBfc3JhbV9zaXplIC0gU1JBTV9CT09UTE9BREVSX1NaKTsKIH0KIAotc3RhdGljIHZvaWQgKCpfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jaykodTMyIGRwbGxjdGwsIHUzMiBja2N0bCkgPSBOVUxMOwotCi12b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCkKLXsKLQlpZiAoX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sgPT0gTlVMTCkKLQkJcGFuaWMoIkNhbm5vdCB1c2UgU1JBTSIpOwotCi0JcmV0dXJuIF9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKGRwbGxjdGwsIGNrY3RsKTsKLX0KLQogdm9pZCAqIG9tYXBfc3JhbV9wdXNoKHZvaWQgKiBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCWlmIChzaXplID4gKG9tYXBfc3JhbV9jZWlsIC0gKG9tYXBfc3JhbV9iYXNlICsgU1JBTV9CT09UTE9BREVSX1NaKSkpIHsKQEAgLTExMSwxMCArMTE2LDk0IEBACiAJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7CiB9CiAKLXZvaWQgX19pbml0IG9tYXBfc3JhbV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBvbWFwX3NyYW1fZXJyb3Iodm9pZCkKK3sKKwlwYW5pYygiVW5pbml0aWFsaXplZCBTUkFNIGZ1bmN0aW9uXG4iKTsKK30KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisKK3N0YXRpYyB2b2lkICgqX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2spKHUzMiBkcGxsY3RsLCB1MzIgY2tjdGwpOworCit2b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCkKK3sKKwlpZiAoIV9vbWFwX3NyYW1fcmVwcm9ncmFtX2Nsb2NrKQorCQlvbWFwX3NyYW1fZXJyb3IoKTsKKworCXJldHVybiBfb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayhkcGxsY3RsLCBja2N0bCk7Cit9CisKK2ludCBfX2luaXQgb21hcDFfc3JhbV9pbml0KHZvaWQpCit7CisJX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sgPSBvbWFwX3NyYW1fcHVzaChzcmFtX3JlcHJvZ3JhbV9jbG9jaywKKwkJCQkJCSAgICBzcmFtX3JlcHJvZ3JhbV9jbG9ja19zeik7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgb21hcDFfc3JhbV9pbml0KCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisKK3N0YXRpYyB2b2lkICgqX29tYXAyX3NyYW1fZGRyX2luaXQpKHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkgICAgICB1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jayk7CisKK3ZvaWQgb21hcDJfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAorCQkgICB1MzIgYmFzZV9jcywgdTMyIGZvcmNlX3VubG9jaykKK3sKKwlpZiAoIV9vbWFwMl9zcmFtX2Rkcl9pbml0KQorCQlvbWFwX3NyYW1fZXJyb3IoKTsKKworCXJldHVybiBfb21hcDJfc3JhbV9kZHJfaW5pdChzbG93X2RsbF9jdHJsLCBmYXN0X2RsbF9jdHJsLAorCQkJCSAgICBiYXNlX2NzLCBmb3JjZV91bmxvY2spOworfQorCitzdGF0aWMgdm9pZCAoKl9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKSh1MzIgcGVyZl9sZXZlbCwgdTMyIGRsbF92YWwsCisJCQkJCSAgdTMyIG1lbV90eXBlKTsKKwordm9pZCBvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwgdTMyIG1lbV90eXBlKQoreworCWlmICghX29tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmMpCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKHBlcmZfbGV2ZWwsIGRsbF92YWwsIG1lbV90eXBlKTsKK30KKworc3RhdGljIHUzMiAoKl9vbWFwMl9zZXRfcHJjbSkodTMyIGRwbGxfY3RybF92YWwsIHUzMiBzZHJjX3Jmcl92YWwsIGludCBieXBhc3MpOworCit1MzIgb21hcDJfc2V0X3ByY20odTMyIGRwbGxfY3RybF92YWwsIHUzMiBzZHJjX3Jmcl92YWwsIGludCBieXBhc3MpCit7CisJaWYgKCFfb21hcDJfc2V0X3ByY20pCisJCW9tYXBfc3JhbV9lcnJvcigpOworCisJcmV0dXJuIF9vbWFwMl9zZXRfcHJjbShkcGxsX2N0cmxfdmFsLCBzZHJjX3Jmcl92YWwsIGJ5cGFzcyk7Cit9CisKK2ludCBfX2luaXQgb21hcDJfc3JhbV9pbml0KHZvaWQpCit7CisJX29tYXAyX3NyYW1fZGRyX2luaXQgPSBvbWFwX3NyYW1fcHVzaChzcmFtX2Rkcl9pbml0LCBzcmFtX2Rkcl9pbml0X3N6KTsKKworCV9vbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjID0gb21hcF9zcmFtX3B1c2goc3JhbV9yZXByb2dyYW1fc2RyYywKKwkJCQkJCSAgICBzcmFtX3JlcHJvZ3JhbV9zZHJjX3N6KTsKKwlfb21hcDJfc2V0X3ByY20gPSBvbWFwX3NyYW1fcHVzaChzcmFtX3NldF9wcmNtLCBzcmFtX3NldF9wcmNtX3N6KTsKKworCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgb21hcDJfc3JhbV9pbml0KCkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworaW50IF9faW5pdCBvbWFwX3NyYW1faW5pdCh2b2lkKQogewogCW9tYXBfZGV0ZWN0X3NyYW0oKTsKIAlvbWFwX21hcF9zcmFtKCk7Ci0JX29tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sgPSBvbWFwX3NyYW1fcHVzaChzcmFtX3JlcHJvZ3JhbV9jbG9jaywKLQkJCQkJCSAgICBzcmFtX3JlcHJvZ3JhbV9jbG9ja19zeik7CisKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMV9zcmFtX2luaXQoKTsKKwllbHNlCisJCW9tYXAyX3NyYW1faW5pdCgpOworCisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE5ODRlZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmgKLSAqCi0gKiBJbnRlcmZhY2UgZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAotI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICi0KLWV4dGVybiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKTsKLQotLyogRG8gbm90IHVzZSB0aGVzZSAqLwotZXh0ZXJuIHZvaWQgc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGNrY3RsLCB1MzIgZHBsbGN0bCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3JlcHJvZ3JhbV9jbG9ja19zejsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggMjA1ZTJkMC4uMDBhZmM3YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtOTEsNiArOTEsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQX09URykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKwogc3RhdGljIHUzMiBfX2luaXQgb21hcF91c2IwX2luaXQodW5zaWduZWQgbndpcmVzLCB1bnNpZ25lZCBpc19kZXZpY2UpCiB7CiAJdTMyCXN5c2NvbjEgPSAwOwpAQCAtMjcxLDYgKzI3Myw4IEBACiAJcmV0dXJuIHN5c2NvbjEgPDwgMjQ7CiB9CiAKKyNlbmRpZgorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAjaWYJZGVmaW5lZChDT05GSUdfVVNCX0dBREdFVF9PTUFQKSB8fCBcCkBAIC00OTQsNyArNDk4LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmZGVmCUNPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYJQ09ORklHX0FSQ0hfT01BUDE1WFgKIAogI2RlZmluZSBVTFBEX0RQTExfQ1RSTF9SRUcJX19SRUcxNihVTFBEX0RQTExfQ1RSTCkKICNkZWZpbmUgRFBMTF9JT0IJCSgxIDw8IDEzKQpAQCAtNTA3LDcgKzUxMSw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzE1MTBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnKQogewotCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IHZhbDsKIAogCW9tYXBfdXNiMF9pbml0KGNvbmZpZy0+cGluc1swXSwgaXNfdXNiMF9kZXZpY2UoY29uZmlnKSk7CkBAIC01MzksNiArNTQyLDggQEAKIAogI2lmZGVmCUNPTkZJR19VU0JfR0FER0VUX09NQVAKIAlpZiAoY29uZmlnLT5yZWdpc3Rlcl9kZXYpIHsKKwkJaW50IHN0YXR1czsKKwogCQl1ZGNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gY29uZmlnOwogCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnVkY19kZXZpY2UpOwogCQlpZiAoc3RhdHVzKQpAQCAtNTQ5LDYgKzU1NCw4IEBACiAKICNpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCiAJaWYgKGNvbmZpZy0+cmVnaXN0ZXJfaG9zdCkgeworCQlpbnQgc3RhdHVzOworCiAJCW9oY2lfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gY29uZmlnOwogCQlzdGF0dXMgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9oY2lfZGV2aWNlKTsKIAkJaWYgKHN0YXR1cykKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvZml4dXAuYyBiL2FyY2gvaTM4Ni9wY2kvZml4dXAuYwppbmRleCAzOTg0MjI2Li5lZWIxYjFmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL2ZpeHVwLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9maXh1cC5jCkBAIC00MzMsOSArNDMzLDggQEAKIAkJcmV0dXJuOyAvKiBvbmx5IGFwcGxpZXMgdG8gY2VydGFpbiBUb3NoaWJhcyAoc28gZmFyKSAqLwogCiAJLyogUmVzdG9yZSBjb25maWcgc3BhY2Ugb24gVG9zaGliYSBsYXB0b3BzICovCi0JbWRlbGF5KDEwKTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCB0b3NoaWJhX2xpbmVfc2l6ZSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0lOVEVSUlVQVF9MSU5FLCBkZXYtPmlycSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsICh1OCAqKSZkZXYtPmlycSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwKIAkJCSAgICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMSwKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCmluZGV4IGY3MmVhNmEuLmEzYWE0NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwpAQCAtOTg3LDcgKzk4Nyw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoKHJlcyA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCWlmICgocmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGFsb2NhdGUgcmVzb3VyY2UgZm9yIGlvbWVtXG4iKTsKIAkJCXJldHVybjsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwppbmRleCA5NjczNmExLi44MDFlZWFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCSgoc3RydWN0IGZucHRyICopa3JldHByb2JlX3RyYW1wb2xpbmUpLT5pcDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZrcmV0cHJvYmVfbG9jaywgZmxhZ3MpOwotICAgICAgICBoZWFkID0ga3JldHByb2JlX2luc3RfdGFibGVfaGVhZChjdXJyZW50KTsKKwloZWFkID0ga3JldHByb2JlX2luc3RfdGFibGVfaGVhZChjdXJyZW50KTsKIAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4KQEAgLTM2Myw5ICszNjMsOSBAQAogCSAqICAgICAgIGtyZXRwcm9iZV90cmFtcG9saW5lCiAJICovCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyaSwgbm9kZSwgdG1wLCBoZWFkLCBobGlzdCkgewotICAgICAgICAgICAgICAgIGlmIChyaS0+dGFzayAhPSBjdXJyZW50KQorCQlpZiAocmktPnRhc2sgIT0gY3VycmVudCkKIAkJCS8qIGFub3RoZXIgdGFzayBpcyBzaGFyaW5nIG91ciBoYXNoIGJ1Y2tldCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisJCQljb250aW51ZTsKIAogCQlpZiAocmktPnJwICYmIHJpLT5ycC0+aGFuZGxlcikKIAkJCXJpLT5ycC0+aGFuZGxlcihyaSwgcmVncyk7CkBAIC0zOTQsNyArMzk0LDcgQEAKIAkgKiBrcHJvYmVfaGFuZGxlcigpIHRoYXQgd2UgZG9uJ3Qgd2FudCB0aGUgcG9zdF9oYW5kbGVyCiAJICogdG8gcnVuIChhbmQgaGF2ZSByZS1lbmFibGVkIHByZWVtcHRpb24pCiAJICovCi0gICAgICAgIHJldHVybiAxOworCXJldHVybiAxOwogfQogCiAvKiBDYWxsZWQgd2l0aCBrcmV0cHJvYmVfbG9jayBoZWxkICovCkBAIC03MzksMTIgKzczOSwxNiBAQAogCiAJc3dpdGNoKHZhbCkgewogCWNhc2UgRElFX0JSRUFLOgotCQlpZiAocHJlX2twcm9iZXNfaGFuZGxlcihhcmdzKSkKLQkJCXJldCA9IE5PVElGWV9TVE9QOworCQkvKiBlcnIgaXMgYnJlYWsgbnVtYmVyIGZyb20gaWE2NF9iYWRfYnJlYWsoKSAqLworCQlpZiAoYXJncy0+ZXJyID09IDB4ODAyMDAgfHwgYXJncy0+ZXJyID09IDB4ODAzMDApCisJCQlpZiAocHJlX2twcm9iZXNfaGFuZGxlcihhcmdzKSkKKwkJCQlyZXQgPSBOT1RJRllfU1RPUDsKIAkJYnJlYWs7Ci0JY2FzZSBESUVfU1M6Ci0JCWlmIChwb3N0X2twcm9iZXNfaGFuZGxlcihhcmdzLT5yZWdzKSkKLQkJCXJldCA9IE5PVElGWV9TVE9QOworCWNhc2UgRElFX0ZBVUxUOgorCQkvKiBlcnIgaXMgdmVjdG9yIG51bWJlciBmcm9tIGlhNjRfZmF1bHQoKSAqLworCQlpZiAoYXJncy0+ZXJyID09IDM2KQorCQkJaWYgKHBvc3Rfa3Byb2Jlc19oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQkJCXJldCA9IE5PVElGWV9TVE9QOwogCQlicmVhazsKIAljYXNlIERJRV9QQUdFX0ZBVUxUOgogCQkvKiBrcHJvYmVfcnVubmluZygpIG5lZWRzIHNtcF9wcm9jZXNzb3JfaWQoKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggNTJjNDdkYS4uMzU1YWYxNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC01MSw2ICs1MSw5IEBACiAgKgogICogMjAwNS0wOC0xMiBLZWl0aCBPd2VucyA8a2Fvc0BzZ2kuY29tPgogICoJICAgICAgQ29udmVydCBNQ0EvSU5JVCBoYW5kbGVycyB0byB1c2UgcGVyIGV2ZW50IHN0YWNrcyBhbmQgU0FML09TIHN0YXRlLgorICoKKyAqIDIwMDUtMTAtMDcgS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4KKyAqCSAgICAgIEFkZCBub3RpZnlfZGllKCkgaG9va3MuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtNTgsNyArNjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CkBAIC02OSw2ICs3MSw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWVtaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CkBAIC0xMzIsNiArMTM1LDE0IEBACiAKIHN0YXRpYyBpbnQgbWNhX2luaXQ7CiAKKworc3RhdGljIHZvaWQgaW5saW5lCitpYTY0X21jYV9zcGluKGNvbnN0IGNoYXIgKmZ1bmMpCit7CisJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBzcGlubmluZyBoZXJlLCBub3QgcmV0dXJuaW5nIHRvIFNBTFxuIiwgZnVuYyk7CisJd2hpbGUgKDEpCisJCWNwdV9yZWxheCgpOworfQogLyoKICAqIElBNjRfTUNBIGxvZyBzdXBwb3J0CiAgKi8KQEAgLTUyNiwxMyArNTM3LDE2IEBACiAgKiAgT3V0cHV0cyA6ICAgTm9uZQogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QKLWlhNjRfbWNhX3JlbmRlel9pbnRfaGFuZGxlcihpbnQgcmVuZGV6X2lycSwgdm9pZCAqYXJnLCBzdHJ1Y3QgcHRfcmVncyAqcHRyZWdzKQoraWE2NF9tY2FfcmVuZGV6X2ludF9oYW5kbGVyKGludCByZW5kZXpfaXJxLCB2b2lkICphcmcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfRU5URVIsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAogCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX0RPTkU7CiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgU0FMIG1vbmFyY2ggdGhhdCB0aGUgc2xhdmUgaGFzCkBAIC01NDAsMTAgKzU1NCwxOCBAQAogCSAqLwogCWlhNjRfc2FsX21jX3JlbmRleigpOwogCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfUFJPQ0VTUywgIk1DQSIsIHJlZ3MsIDAsIDAsIDApCisJCQk9PSBOT1RJRllfU1RPUCkKKwkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOworCiAJLyogV2FpdCBmb3IgdGhlIG1vbmFyY2ggY3B1IHRvIGV4aXQuICovCiAJd2hpbGUgKG1vbmFyY2hfY3B1ICE9IC0xKQogCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGxlYXZlcyAqLwogCisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9SRU5EWlZPVVNfTEVBVkUsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwogCS8qIEVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC05MzMsNiArOTU1LDkgQEAKIAlvb3BzX2luX3Byb2dyZXNzID0gMTsJLyogRklYTUU6IG1ha2UgcHJpbnRrIE5NSS9NQ0EvSU5JVCBzYWZlICovCiAJcHJldmlvdXNfY3VycmVudCA9IGlhNjRfbWNhX21vZGlmeV9vcmlnaW5hbF9zdGFjayhyZWdzLCBzdywgc29zLCAiTUNBIik7CiAJbW9uYXJjaF9jcHUgPSBjcHU7CisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0VOVEVSLCAiTUNBIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAJaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1KTsKIAogCS8qIFdha2V1cCBhbGwgdGhlIHByb2Nlc3NvcnMgd2hpY2ggYXJlIHNwaW5uaW5nIGluIHRoZSByZW5kZXp2b3VzIGxvb3AuCkBAIC05NDIsNiArOTY3LDkgQEAKIAkgKiBzcGlubmluZyBpbiBTQUwgZG9lcyBub3Qgd29yay4KIAkgKi8KIAlpYTY0X21jYV93YWtldXBfYWxsKCk7CisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX1BST0NFU1MsICJNQ0EiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAogCS8qIEdldCB0aGUgTUNBIGVycm9yIHJlY29yZCBhbmQgbG9nIGl0ICovCiAJaWE2NF9tY2FfbG9nX3NhbF9lcnJvcl9yZWNvcmQoU0FMX0lORk9fVFlQRV9NQ0EpOwpAQCAtOTYwLDYgKzk4OCw5IEBACiAJCWlhNjRfc2FsX2NsZWFyX3N0YXRlX2luZm8oU0FMX0lORk9fVFlQRV9NQ0EpOwogCQlzb3MtPm9zX3N0YXR1cyA9IElBNjRfTUNBX0NPUlJFQ1RFRDsKIAl9CisJaWYgKG5vdGlmeV9kaWUoRElFX01DQV9NT05BUkNIX0xFQVZFLCAiTUNBIiwgcmVncywgMCwgMCwgcmVjb3ZlcikKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAlzZXRfY3Vycl90YXNrKGNwdSwgcHJldmlvdXNfY3VycmVudCk7CiAJbW9uYXJjaF9jcHUgPSAtMTsKQEAgLTExODgsNiArMTIxOSwzNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX0FDUEkgKi8KIAorc3RhdGljIGludAorZGVmYXVsdF9tb25hcmNoX2luaXRfcHJvY2VzcyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCWludCBjOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnQ7CisJaWYgKHZhbCAhPSBESUVfSU5JVF9NT05BUkNIX1BST0NFU1MpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKwlwcmludGsoS0VSTl9FUlIgIlByb2Nlc3NlcyBpbnRlcnJ1cHRlZCBieSBJTklUIC0iKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGMpIHsKKwkJc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICpzOworCQl0ID0gX192YShfX3Blcl9jcHVfbWNhW2NdICsgSUE2NF9NQ0FfQ1BVX0lOSVRfU1RBQ0tfT0ZGU0VUKTsKKwkJcyA9IChzdHJ1Y3QgaWE2NF9zYWxfb3Nfc3RhdGUgKikoKGNoYXIgKil0ICsgTUNBX1NPU19PRkZTRVQpOworCQlnID0gcy0+cHJldl90YXNrOworCQlpZiAoZykgeworCQkJaWYgKGctPnBpZCkKKwkJCQlwcmludGsoIiAlZCIsIGctPnBpZCk7CisJCQllbHNlCisJCQkJcHJpbnRrKCIgJWQgKGNwdSAlZCB0YXNrIDB4JXApIiwgZy0+cGlkLCB0YXNrX2NwdShnKSwgZyk7CisJCX0KKwl9CisJcHJpbnRrKCJcblxuIik7CisJaWYgKHJlYWRfdHJ5bG9jaygmdGFza2xpc3RfbG9jaykpIHsKKwkJZG9fZWFjaF90aHJlYWQgKGcsIHQpIHsKKwkJCXByaW50aygiXG5CYWNrdHJhY2Ugb2YgcGlkICVkICglcylcbiIsIHQtPnBpZCwgdC0+Y29tbSk7CisJCQlzaG93X3N0YWNrKHQsIE5VTEwpOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkIChnLCB0KTsKKwkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCX0KKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKIC8qCiAgKiBDIHBvcnRpb24gb2YgdGhlIE9TIElOSVQgaGFuZGxlcgogICoKQEAgLTEyMTIsOCArMTI3NCw3IEBACiAJc3RhdGljIGF0b21pY190IHNsYXZlczsKIAlzdGF0aWMgYXRvbWljX3QgbW9uYXJjaHM7CiAJdGFza190ICpwcmV2aW91c19jdXJyZW50OwotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCksIGM7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpnLCAqdDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwogCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsJLyogbWFrZSBzdXJlIHByaW50a3MgbWFrZSBpdCB0byBjb25zb2xlICovCkBAIC0xMjUzLDggKzEzMTQsMTcgQEAKIAkJaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fSU5JVDsKIAkJd2hpbGUgKG1vbmFyY2hfY3B1ID09IC0xKQogCQkgICAgICAgY3B1X3JlbGF4KCk7CS8qIHNwaW4gdW50aWwgbW9uYXJjaCBlbnRlcnMgKi8KKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfRU5URVIsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCQk9PSBOT1RJRllfU1RPUCkKKwkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKKwkJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJCT09IE5PVElGWV9TVE9QKQorCQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCQl3aGlsZSAobW9uYXJjaF9jcHUgIT0gLTEpCiAJCSAgICAgICBjcHVfcmVsYXgoKTsJLyogc3BpbiB1bnRpbCBtb25hcmNoIGxlYXZlcyAqLworCQlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9TTEFWRV9MRUFWRSwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJCT09IE5PVElGWV9TVE9QKQorCQkJaWE2NF9tY2Ffc3BpbihfX0ZVTkNUSU9OX18pOwogCQlwcmludGsoIlNsYXZlIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwogCQlzZXRfY3Vycl90YXNrKGNwdSwgcHJldmlvdXNfY3VycmVudCk7CiAJCWlhNjRfbWNfaW5mby5pbWlfcmVuZGV6X2NoZWNraW5bY3B1XSA9IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX05PVERPTkU7CkBAIC0xMjYzLDYgKzEzMzMsOSBAQAogCX0KIAogCW1vbmFyY2hfY3B1ID0gY3B1OworCWlmIChub3RpZnlfZGllKERJRV9JTklUX01PTkFSQ0hfRU5URVIsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGEgYml0LiAgT24gc29tZSBtYWNoaW5lcyAoZS5nLiwgSFAncyB6eDIwMDAgYW5kIHp4NjAwMCwgSU5JVCBjYW4gYmUKQEAgLTEyNzMsMjcgKzEzNDYsMTYgQEAKIAlwcmludGsoIkRlbGF5aW5nIGZvciA1IHNlY29uZHMuLi5cbiIpOwogCXVkZWxheSg1KjEwMDAwMDApOwogCWlhNjRfd2FpdF9mb3Jfc2xhdmVzKGNwdSk7Ci0JcHJpbnRrKEtFUk5fRVJSICJQcm9jZXNzZXMgaW50ZXJydXB0ZWQgYnkgSU5JVCAtIik7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjKSB7Ci0JCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqczsKLQkJdCA9IF9fdmEoX19wZXJfY3B1X21jYVtjXSArIElBNjRfTUNBX0NQVV9JTklUX1NUQUNLX09GRlNFVCk7Ci0JCXMgPSAoc3RydWN0IGlhNjRfc2FsX29zX3N0YXRlICopKChjaGFyICopdCArIE1DQV9TT1NfT0ZGU0VUKTsKLQkJZyA9IHMtPnByZXZfdGFzazsKLQkJaWYgKGcpIHsKLQkJCWlmIChnLT5waWQpCi0JCQkJcHJpbnRrKCIgJWQiLCBnLT5waWQpOwotCQkJZWxzZQotCQkJCXByaW50aygiICVkIChjcHUgJWQgdGFzayAweCVwKSIsIGctPnBpZCwgdGFza19jcHUoZyksIGcpOwotCQl9Ci0JfQotCXByaW50aygiXG5cbiIpOwotCWlmIChyZWFkX3RyeWxvY2soJnRhc2tsaXN0X2xvY2spKSB7Ci0JCWRvX2VhY2hfdGhyZWFkIChnLCB0KSB7Ci0JCQlwcmludGsoIlxuQmFja3RyYWNlIG9mIHBpZCAlZCAoJXMpXG4iLCB0LT5waWQsIHQtPmNvbW0pOwotCQkJc2hvd19zdGFjayh0LCBOVUxMKTsKLQkJfSB3aGlsZV9lYWNoX3RocmVhZCAoZywgdCk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQl9CisJLyogSWYgbm9ib2R5IGludGVyY2VwdHMgRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTIHRoZW4gd2UgZHJvcCB0aHJvdWdoCisJICogdG8gZGVmYXVsdF9tb25hcmNoX2luaXRfcHJvY2VzcygpIGFib3ZlIGFuZCBqdXN0IHByaW50IGFsbCB0aGUKKwkgKiB0YXNrcy4KKwkgKi8KKwlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX1BST0NFU1MsICJJTklUIiwgcmVncywgMCwgMCwgMCkKKwkJCT09IE5PVElGWV9TVE9QKQorCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7CisJaWYgKG5vdGlmeV9kaWUoRElFX0lOSVRfTU9OQVJDSF9MRUFWRSwgIklOSVQiLCByZWdzLCAwLCAwLCAwKQorCQkJPT0gTk9USUZZX1NUT1ApCisJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKIAlwcmludGsoIlxuSU5JVCBkdW1wIGNvbXBsZXRlLiAgTW9uYXJjaCBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKIAlhdG9taWNfZGVjKCZtb25hcmNocyk7CiAJc2V0X2N1cnJfdGFzayhjcHUsIHByZXZpb3VzX2N1cnJlbnQpOwpAQCAtMTQ2Miw2ICsxNTI0LDEwIEBACiAJczY0IHJjOwogCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgaXNydjsKIAl1NjQgdGltZW91dCA9IElBNjRfTUNBX1JFTkRFWl9USU1FT1VUOwkvKiBwbGF0Zm9ybSBzcGVjaWZpYyAqLworCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgZGVmYXVsdF9pbml0X21vbmFyY2hfbmIgPSB7CisJCS5ub3RpZmllcl9jYWxsID0gZGVmYXVsdF9tb25hcmNoX2luaXRfcHJvY2VzcywKKwkJLnByaW9yaXR5ID0gMC8qIHdlIG5lZWQgdG8gbm90aWZpZWQgbGFzdCAqLworCX07CiAKIAlJQTY0X01DQV9ERUJVRygiJXM6IGJlZ2luXG4iLCBfX0ZVTkNUSU9OX18pOwogCkBAIC0xNTU1LDYgKzE2MjEsMTAgQEAKIAkJICAgICAgICIoc3RhdHVzICVsZClcbiIsIHJjKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAocmVnaXN0ZXJfZGllX25vdGlmaWVyKCZkZWZhdWx0X2luaXRfbW9uYXJjaF9uYikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVmYXVsdCBtb25hcmNoIElOSVQgcHJvY2Vzc1xuIik7CisJCXJldHVybjsKKwl9CiAKIAlJQTY0X01DQV9ERUJVRygiJXM6IHJlZ2lzdGVyZWQgT1MgSU5JVCBoYW5kbGVyIHdpdGggU0FMXG4iLCBfX0ZVTkNUSU9OX18pOwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCmluZGV4IGViMzliYzkuLjM0OTJlMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCkBAIC01NDcsOSArNTQ3LDIwIEBACiAJCShwYWxfcHJvY2Vzc29yX3N0YXRlX2luZm9fdCopcGVpZHhfcHNwKHBlaWR4KTsKIAogCS8qCi0JICogV2UgY2Fubm90IHJlY292ZXIgZXJyb3JzIHdpdGggb3RoZXIgdGhhbiBidXNfY2hlY2suCisJICogUHJvY2Vzc29yIHJlY292ZXJ5IHN0YXR1cyBtdXN0IGtleSBvZmYgb2YgdGhlIFBBTCByZWNvdmVyeQorCSAqIHN0YXR1cyBpbiB0aGUgUHJvY2Vzc29yIFN0YXRlIFBhcmFtZXRlci4KIAkgKi8KLQlpZiAocHNwLT5jYyB8fCBwc3AtPnJjIHx8IHBzcC0+dWMpCisKKwkvKgorCSAqIFRoZSBtYWNoaW5lIGNoZWNrIGlzIGNvcnJlY3RlZC4KKwkgKi8KKwlpZiAocHNwLT5jbSA9PSAxKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogVGhlIGVycm9yIHdhcyBub3QgY29udGFpbmVkLiAgU29mdHdhcmUgbXVzdCBiZSByZXNldC4KKwkgKi8KKwlpZiAocHNwLT51cyB8fCBwc3AtPmNpID09IDApCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTU3MCw4ICs1ODEsNiBAQAogCQlyZXR1cm4gMDsKIAlpZiAocGJjaS0+ZWIgJiYgcGJjaS0+YnNpID4gMCkKIAkJcmV0dXJuIDA7Ci0JaWYgKHBzcC0+Y2kgPT0gMCkKLQkJcmV0dXJuIDA7CiAKIAkvKgogCSAqIFRoaXMgaXMgYSBsb2NhbCBNQ0EgYW5kIGVzdGltYXRlZCBhcyByZWNvdmVyYmxlIGV4dGVybmFsIGJ1cyBlcnJvci4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNjQwZDY5MC4uZTkyZWE2NCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQsNiArNCw5IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28KICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqIDA0LzExLzE3IEFzaG9rIFJhagk8YXNob2sucmFqQGludGVsLmNvbT4gQWRkZWQgQ1BVIEhvdHBsdWcgU3VwcG9ydAorICoKKyAqIDIwMDUtMTAtMDcgS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4KKyAqCSAgICAgIEFkZCBub3RpZnlfZGllKCkgaG9va3MuCiAgKi8KICNkZWZpbmUgX19LRVJORUxfU1lTQ0FMTFNfXwkvKiBzZWUgPGFzbS91bmlzdGQuaD4gKi8KICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KQEAgLTM0LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2lhMzIuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zYWwuaD4KQEAgLTgwOCwxMiArODEyLDE0IEBACiB2b2lkCiBtYWNoaW5lX3Jlc3RhcnQgKGNoYXIgKnJlc3RhcnRfY21kKQogeworCSh2b2lkKSBub3RpZnlfZGllKERJRV9NQUNISU5FX1JFU1RBUlQsIHJlc3RhcnRfY21kLCBOVUxMLCAwLCAwLCAwKTsKIAkoKmVmaS5yZXNldF9zeXN0ZW0pKEVGSV9SRVNFVF9XQVJNLCAwLCAwLCBOVUxMKTsKIH0KIAogdm9pZAogbWFjaGluZV9oYWx0ICh2b2lkKQogeworCSh2b2lkKSBub3RpZnlfZGllKERJRV9NQUNISU5FX0hBTFQsICIiLCBOVUxMLCAwLCAwLCAwKTsKIAljcHVfaGFsdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggM2FmNmRlMy4uNWFkZDBiYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtNDYxLDYgKzQ2MSw3IEBACiAjZW5kaWYKIAogCWNwdV9pbml0KCk7CS8qIGluaXRpYWxpemUgdGhlIGJvb3RzdHJhcCBDUFUgKi8KKwltbXVfY29udGV4dF9pbml0KCk7CS8qIGluaXRpYWxpemUgY29udGV4dF9pZCBiaXRtYXAgKi8KIAogI2lmZGVmIENPTkZJR19BQ1BJCiAJYWNwaV9ib290X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IDc3NGYzNGIuLjU4Y2UwN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMzg3LDE1ICszODcsMTQgQEAKIAkgICAgIHN0cnVjdCBzaWdzY3JhdGNoICpzY3IpCiB7CiAJZXh0ZXJuIGNoYXIgX19rZXJuZWxfc2lndHJhbXBbXTsKLQl1bnNpZ25lZCBsb25nIHRyYW1wX2FkZHIsIG5ld19yYnMgPSAwOworCXVuc2lnbmVkIGxvbmcgdHJhbXBfYWRkciwgbmV3X3JicyA9IDAsIG5ld19zcDsKIAlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZTsKIAlsb25nIGVycjsKIAotCWZyYW1lID0gKHZvaWQgX191c2VyICopIHNjci0+cHQucjEyOworCW5ld19zcCA9IHNjci0+cHQucjEyOwogCXRyYW1wX2FkZHIgPSAodW5zaWduZWQgbG9uZykgX19rZXJuZWxfc2lndHJhbXA7Ci0JaWYgKChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSAmJiBzYXNfc3NfZmxhZ3MoKHVuc2lnbmVkIGxvbmcpIGZyYW1lKSA9PSAwKSB7Ci0JCWZyYW1lID0gKHZvaWQgX191c2VyICopICgoY3VycmVudC0+c2FzX3NzX3NwICsgY3VycmVudC0+c2FzX3NzX3NpemUpCi0JCQkJCSAmIH4oU1RBQ0tfQUxJR04gLSAxKSk7CisJaWYgKChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTlNUQUNLKSAmJiBzYXNfc3NfZmxhZ3MobmV3X3NwKSA9PSAwKSB7CisJCW5ld19zcCA9IGN1cnJlbnQtPnNhc19zc19zcCArIGN1cnJlbnQtPnNhc19zc19zaXplOwogCQkvKgogCQkgKiBXZSBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcmVnaXN0ZXIgc3RhY2sgYmVpbmcgb24gdGhlIHNpZ25hbCBzdGFjawogCQkgKiBzZXBhcmF0ZWx5LCBiZWNhdXNlIGl0J3Mgc3dpdGNoZWQgc2VwYXJhdGVseSAobWVtb3J5IHN0YWNrIGlzIHN3aXRjaGVkCkBAIC00MDQsNyArNDAzLDcgQEAKIAkJaWYgKCFyYnNfb25fc2lnX3N0YWNrKHNjci0+cHQuYXJfYnNwc3RvcmUpKQogCQkJbmV3X3JicyA9IChjdXJyZW50LT5zYXNfc3Nfc3AgKyBzaXplb2YobG9uZykgLSAxKSAmIH4oc2l6ZW9mKGxvbmcpIC0gMSk7CiAJfQotCWZyYW1lID0gKHZvaWQgX191c2VyICopIGZyYW1lIC0gKChzaXplb2YoKmZyYW1lKSArIFNUQUNLX0FMSUdOIC0gMSkgJiB+KFNUQUNLX0FMSUdOIC0gMSkpOworCWZyYW1lID0gKHZvaWQgX191c2VyICopICgobmV3X3NwIC0gc2l6ZW9mKCpmcmFtZSkpICYgLVNUQUNLX0FMSUdOKTsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgZnJhbWUsIHNpemVvZigqZnJhbWUpKSkKIAkJcmV0dXJuIGZvcmNlX3NpZ3NlZ3ZfaW5mbyhzaWcsIGZyYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwppbmRleCBmOTcwMzU5Li5mYmE1ZmRkIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCkBAIC0zMCwxNyArMzAsMjAgQEAKIEVYUE9SVF9TWU1CT0woZnBzd2FfaW50ZXJmYWNlKTsKIAogc3RydWN0IG5vdGlmaWVyX2Jsb2NrICppYTY0ZGllX2NoYWluOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkaWVfbm90aWZpZXJfbG9jayk7CiAKLWludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK2ludAorcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCiB7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGllX25vdGlmaWVyX2xvY2ssIGZsYWdzKTsKLQllcnIgPSBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmaWE2NGRpZV9jaGFpbiwgbmIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpZV9ub3RpZmllcl9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmlhNjRkaWVfY2hhaW4sIG5iKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2RpZV9ub3RpZmllcik7CisKK2ludAordW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmaWE2NGRpZV9jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwogCiB2b2lkIF9faW5pdAogdHJhcF9pbml0ICh2b2lkKQpAQCAtMTA1LDYgKzEwOCw3IEBACiAJaWYgKCsrZGllLmxvY2tfb3duZXJfZGVwdGggPCAzKSB7CiAJCXByaW50aygiJXNbJWRdOiAlcyAlbGQgWyVkXVxuIiwKIAkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc3RyLCBlcnIsICsrZGllX2NvdW50ZXIpOworCQkodm9pZCkgbm90aWZ5X2RpZShESUVfT09QUywgKGNoYXIgKilzdHIsIHJlZ3MsIGVyciwgMjU1LCBTSUdTRUdWKTsKIAkJc2hvd19yZWdzKHJlZ3MpOwogICAJfSBlbHNlCiAJCXByaW50ayhLRVJOX0VSUiAiUmVjdXJzaXZlIGRpZSgpIGZhaWx1cmUsIG91dHB1dCBzdXBwcmVzc2VkXG4iKTsKQEAgLTE1NSw5ICsxNTksOCBAQAogCXN3aXRjaCAoYnJlYWtfbnVtKSB7CiAJICAgICAgY2FzZSAwOiAvKiB1bmtub3duIGVycm9yICh1c2VkIGJ5IEdDQyBmb3IgX19idWlsdGluX2Fib3J0KCkpICovCiAJCWlmIChub3RpZnlfZGllKERJRV9CUkVBSywgImJyZWFrIDAiLCByZWdzLCBicmVha19udW0sIFRSQVBfQlJLUFQsIFNJR1RSQVApCi0JCQkgICAgICAgCT09IE5PVElGWV9TVE9QKSB7CisJCQkgICAgICAgCT09IE5PVElGWV9TVE9QKQogCQkJcmV0dXJuOwotCQl9CiAJCWRpZV9pZl9rZXJuZWwoImJ1Z2NoZWNrISIsIHJlZ3MsIGJyZWFrX251bSk7CiAJCXNpZyA9IFNJR0lMTDsgY29kZSA9IElMTF9JTExPUEM7CiAJCWJyZWFrOwpAQCAtMjEwLDE1ICsyMTMsNiBAQAogCQlzaWcgPSBTSUdJTEw7IGNvZGUgPSBfX0lMTF9CTkRNT0Q7CiAJCWJyZWFrOwogCi0JICAgICAgY2FzZSAweDgwMjAwOgotCSAgICAgIGNhc2UgMHg4MDMwMDoKLQkJaWYgKG5vdGlmeV9kaWUoRElFX0JSRUFLLCAia3Byb2JlIiwgcmVncywgYnJlYWtfbnVtLCBUUkFQX0JSS1BULCBTSUdUUkFQKQotCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXNpZyA9IFNJR1RSQVA7IGNvZGUgPSBUUkFQX0JSS1BUOwotCQlicmVhazsKLQogCSAgICAgIGRlZmF1bHQ6CiAJCWlmIChicmVha19udW0gPCAweDQwMDAwIHx8IGJyZWFrX251bSA+IDB4MTAwMDAwKQogCQkJZGllX2lmX2tlcm5lbCgiQmFkIGJyZWFrIiwgcmVncywgYnJlYWtfbnVtKTsKQEAgLTIyNiw2ICsyMjAsOSBAQAogCQlpZiAoYnJlYWtfbnVtIDwgMHg4MDAwMCkgewogCQkJc2lnID0gU0lHSUxMOyBjb2RlID0gX19JTExfQlJFQUs7CiAJCX0gZWxzZSB7CisJCQlpZiAobm90aWZ5X2RpZShESUVfQlJFQUssICJiYWQgYnJlYWsiLCByZWdzLCBicmVha19udW0sIFRSQVBfQlJLUFQsIFNJR1RSQVApCisJCQkJCT09IE5PVElGWV9TVE9QKQorCQkJCXJldHVybjsKIAkJCXNpZyA9IFNJR1RSQVA7IGNvZGUgPSBUUkFQX0JSS1BUOwogCQl9CiAJfQpAQCAtNTc4LDEyICs1NzUsMTEgQEAKICNlbmRpZgogCQkJYnJlYWs7CiAJCSAgICAgIGNhc2UgMzU6IHNpZ2luZm8uc2lfY29kZSA9IFRSQVBfQlJBTkNIOyBpZmEgPSAwOyBicmVhazsKLQkJICAgICAgY2FzZSAzNjoKLQkJCSAgICAgIGlmIChub3RpZnlfZGllKERJRV9TUywgInNzIiwgJnJlZ3MsIHZlY3RvciwKLQkJCQkJICAgICB2ZWN0b3IsIFNJR1RSQVApID09IE5PVElGWV9TVE9QKQotCQkJCSAgICAgIHJldHVybjsKLQkJCSAgICAgIHNpZ2luZm8uc2lfY29kZSA9IFRSQVBfVFJBQ0U7IGlmYSA9IDA7IGJyZWFrOworCQkgICAgICBjYXNlIDM2OiBzaWdpbmZvLnNpX2NvZGUgPSBUUkFQX1RSQUNFOyBpZmEgPSAwOyBicmVhazsKIAkJfQorCQlpZiAobm90aWZ5X2RpZShESUVfRkFVTFQsICJpYTY0X2ZhdWx0IiwgJnJlZ3MsIHZlY3Rvciwgc2lnaW5mby5zaV9jb2RlLCBTSUdUUkFQKQorCQkJICAgICAgIAk9PSBOT1RJRllfU1RPUCkKKwkJCXJldHVybjsKIAkJc2lnaW5mby5zaV9zaWdubyA9IFNJR1RSQVA7CiAJCXNpZ2luZm8uc2lfZXJybm8gPSAwOwogCQlzaWdpbmZvLnNpX2FkZHIgID0gKHZvaWQgX191c2VyICopIGlmYTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwppbmRleCBhODhjZGI3Li4wZjc3NmIwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCkBAIC0zNTAsMTQgKzM1MCwxMiBAQAogICoJZm9yIGJlc3QuCiAgKiBAbmlkOiBub2RlIGlkCiAgKiBAcGVybm9kZXNpemU6IHNpemUgb2YgdGhpcyBub2RlJ3MgcGVybm9kZSBkYXRhCi0gKiBAYWxpZ246IGFsaWdubWVudCB0byB1c2UgZm9yIHRoaXMgbm9kZSdzIHBlcm5vZGUgZGF0YQogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgKm1lbW9yeV9sZXNzX25vZGVfYWxsb2MoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBwZXJub2Rlc2l6ZSwKLQl1bnNpZ25lZCBsb25nIGFsaWduKQorc3RhdGljIHZvaWQgX19pbml0ICptZW1vcnlfbGVzc19ub2RlX2FsbG9jKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGVybm9kZXNpemUpCiB7CiAJdm9pZCAqcHRyID0gTlVMTDsKIAl1OCBiZXN0ID0gMHhmZjsKLQlpbnQgYmVzdG5vZGUgPSAtMSwgbm9kZTsKKwlpbnQgYmVzdG5vZGUgPSAtMSwgbm9kZSwgYW55bm9kZSA9IDA7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7CiAJCWlmIChub2RlX2lzc2V0KG5vZGUsIG1lbW9yeV9sZXNzX21hc2spKQpAQCAtMzY2LDEzICszNjQsMTUgQEAKIAkJCWJlc3QgPSBub2RlX2Rpc3RhbmNlKG5pZCwgbm9kZSk7CiAJCQliZXN0bm9kZSA9IG5vZGU7CiAJCX0KKwkJYW55bm9kZSA9IG5vZGU7CiAJfQogCi0JcHRyID0gX19hbGxvY19ib290bWVtX25vZGUobWVtX2RhdGFbYmVzdG5vZGVdLnBnZGF0LAotCQlwZXJub2Rlc2l6ZSwgYWxpZ24sIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7CisJaWYgKGJlc3Rub2RlID09IC0xKQorCQliZXN0bm9kZSA9IGFueW5vZGU7CiAKLQlpZiAoIXB0cikKLQkJcGFuaWMoIk5PIG1lbW9yeSBmb3IgbWVtb3J5IGxlc3Mgbm9kZVxuIik7CisJcHRyID0gX19hbGxvY19ib290bWVtX25vZGUobWVtX2RhdGFbYmVzdG5vZGVdLnBnZGF0LCBwZXJub2Rlc2l6ZSwKKwkJUEVSQ1BVX1BBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKKwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTQxMyw4ICs0MTMsNyBAQAogCiAJZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1lbW9yeV9sZXNzX21hc2spIHsKIAkJcGVybm9kZXNpemUgPSBjb21wdXRlX3Blcm5vZGVzaXplKG5vZGUpOwotCQlwZXJub2RlID0gbWVtb3J5X2xlc3Nfbm9kZV9hbGxvYyhub2RlLCBwZXJub2Rlc2l6ZSwKLQkJCShub2RlKSA/IChub2RlICogUEVSQ1BVX1BBR0VfU0laRSkgOiAoMTAyNCoxMDI0KSk7CisJCXBlcm5vZGUgPSBtZW1vcnlfbGVzc19ub2RlX2FsbG9jKG5vZGUsIHBlcm5vZGVzaXplKTsKIAkJZmlsbF9wZXJub2RlKG5vZGUsIF9fcGEocGVybm9kZSksIHBlcm5vZGVzaXplKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS90bGIuYyBiL2FyY2gvaWE2NC9tbS90bGIuYwppbmRleCBjNzlhOWI5Li40MTEwNWQ0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vdGxiLmMKKysrIGIvYXJjaC9pYTY0L21tL3RsYi5jCkBAIC04LDYgKzgsOCBAQAogICoJCU1vZGlmaWVkIFJJRCBhbGxvY2F0aW9uIGZvciBTTVAKICAqICAgICAgICAgIEdvdXRoYW0gUmFvIDxnb3V0aGFtLnJhb0BpbnRlbC5jb20+CiAgKiAgICAgICAgICAgICAgSVBJIGJhc2VkIHB0YyBpbXBsZW1lbnRhdGlvbiBhbmQgQS1zdGVwIElQSSBpbXBsZW1lbnRhdGlvbi4KKyAqIFJvaGl0IFNldGggPHJvaGl0LnNldGhAaW50ZWwuY29tPgorICogS2VuIENoZW4gPGtlbm5ldGgudy5jaGVuQGludGVsLmNvbT4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTYsNzggKzE4LDc1IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KIAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BhbC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogc3RhdGljIHN0cnVjdCB7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwkvKiBtYXNrIG9mIHN1cHBvcnRlZCBwdXJnZSBwYWdlLXNpemVzICovCi0JdW5zaWduZWQgbG9uZyBtYXhfYml0czsJLyogbG9nMigpIG9mIGxhcmdlc3Qgc3VwcG9ydGVkIHB1cmdlIHBhZ2Utc2l6ZSAqLworCXVuc2lnbmVkIGxvbmcgbWF4X2JpdHM7CS8qIGxvZzIgb2YgbGFyZ2VzdCBzdXBwb3J0ZWQgcHVyZ2UgcGFnZS1zaXplICovCiB9IHB1cmdlOwogCiBzdHJ1Y3QgaWE2NF9jdHggaWE2NF9jdHggPSB7CiAJLmxvY2sgPQkJU1BJTl9MT0NLX1VOTE9DS0VELAogCS5uZXh0ID0JCTEsCi0JLmxpbWl0ID0JKDEgPDwgMTUpIC0gMSwJCS8qIHN0YXJ0IG91dCB3aXRoIHRoZSBzYWZlIChhcmNoaXRlY3RlZCkgbGltaXQgKi8KIAkubWF4X2N0eCA9CX4wVQogfTsKIAogREVGSU5FX1BFUl9DUFUodTgsIGlhNjRfbmVlZF90bGJfZmx1c2gpOwogCiAvKgorICogSW5pdGlhbGl6ZXMgdGhlIGlhNjRfY3R4LmJpdG1hcCBhcnJheSBiYXNlZCBvbiBtYXhfY3R4KzEuCisgKiBDYWxsZWQgYWZ0ZXIgY3B1X2luaXQoKSBoYXMgc2V0dXAgaWE2NF9jdHgubWF4X2N0eCBiYXNlZCBvbgorICogbWF4aW11bSBSSUQgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgYm9vdCBDUFUuCisgKi8KK3ZvaWQgX19pbml0CittbXVfY29udGV4dF9pbml0ICh2b2lkKQoreworCWlhNjRfY3R4LmJpdG1hcCA9IGFsbG9jX2Jvb3RtZW0oKGlhNjRfY3R4Lm1heF9jdHgrMSk+PjMpOworCWlhNjRfY3R4LmZsdXNobWFwID0gYWxsb2NfYm9vdG1lbSgoaWE2NF9jdHgubWF4X2N0eCsxKT4+Myk7Cit9CisKKy8qCiAgKiBBY3F1aXJlIHRoZSBpYTY0X2N0eC5sb2NrIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24hCiAgKi8KIHZvaWQKIHdyYXBfbW11X2NvbnRleHQgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXVuc2lnbmVkIGxvbmcgdHNrX2NvbnRleHQsIG1heF9jdHggPSBpYTY0X2N0eC5tYXhfY3R4OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCWludCBpOworCWludCBpLCBjcHU7CisJdW5zaWduZWQgbG9uZyBmbHVzaF9iaXQ7CiAKLQlpZiAoaWE2NF9jdHgubmV4dCA+IG1heF9jdHgpCi0JCWlhNjRfY3R4Lm5leHQgPSAzMDA7CS8qIHNraXAgZGFlbW9ucyAqLwotCWlhNjRfY3R4LmxpbWl0ID0gbWF4X2N0eCArIDE7CisJZm9yIChpPTA7IGkgPD0gaWE2NF9jdHgubWF4X2N0eCAvIEJJVFNfUEVSX0xPTkc7IGkrKykgeworCQlmbHVzaF9iaXQgPSB4Y2hnKCZpYTY0X2N0eC5mbHVzaG1hcFtpXSwgMCk7CisJCWlhNjRfY3R4LmJpdG1hcFtpXSBePSBmbHVzaF9iaXQ7CisJfQorIAorCS8qIHVzZSBvZmZzZXQgYXQgMzAwIHRvIHNraXAgZGFlbW9ucyAqLworCWlhNjRfY3R4Lm5leHQgPSBmaW5kX25leHRfemVyb19iaXQoaWE2NF9jdHguYml0bWFwLAorCQkJCWlhNjRfY3R4Lm1heF9jdHgsIDMwMCk7CisJaWE2NF9jdHgubGltaXQgPSBmaW5kX25leHRfYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQlpYTY0X2N0eC5tYXhfY3R4LCBpYTY0X2N0eC5uZXh0KTsKIAogCS8qCi0JICogU2NhbiBhbGwgdGhlIHRhc2sncyBtbS0+Y29udGV4dCBhbmQgc2V0IHByb3BlciBzYWZlIHJhbmdlCisJICogY2FuJ3QgY2FsbCBmbHVzaF90bGJfYWxsKCkgaGVyZSBiZWNhdXNlIG9mIHJhY2UgY29uZGl0aW9uCisJICogd2l0aCBPKDEpIHNjaGVkdWxlciBbRUZdCiAJICovCi0KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotICByZXBlYXQ6Ci0JZm9yX2VhY2hfcHJvY2Vzcyh0c2spIHsKLQkJaWYgKCF0c2stPm1tKQotCQkJY29udGludWU7Ci0JCXRza19jb250ZXh0ID0gdHNrLT5tbS0+Y29udGV4dDsKLQkJaWYgKHRza19jb250ZXh0ID09IGlhNjRfY3R4Lm5leHQpIHsKLQkJCWlmICgrK2lhNjRfY3R4Lm5leHQgPj0gaWE2NF9jdHgubGltaXQpIHsKLQkJCQkvKiBlbXB0eSByYW5nZTogcmVzZXQgdGhlIHJhbmdlIGxpbWl0IGFuZCBzdGFydCBvdmVyICovCi0JCQkJaWYgKGlhNjRfY3R4Lm5leHQgPiBtYXhfY3R4KQotCQkJCQlpYTY0X2N0eC5uZXh0ID0gMzAwOwotCQkJCWlhNjRfY3R4LmxpbWl0ID0gbWF4X2N0eCArIDE7Ci0JCQkJZ290byByZXBlYXQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKCh0c2tfY29udGV4dCA+IGlhNjRfY3R4Lm5leHQpICYmICh0c2tfY29udGV4dCA8IGlhNjRfY3R4LmxpbWl0KSkKLQkJCWlhNjRfY3R4LmxpbWl0ID0gdHNrX2NvbnRleHQ7Ci0JfQotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkvKiBjYW4ndCBjYWxsIGZsdXNoX3RsYl9hbGwoKSBoZXJlIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb24gd2l0aCBPKDEpIHNjaGVkdWxlciBbRUZdICovCi0JewotCQlpbnQgY3B1ID0gZ2V0X2NwdSgpOyAvKiBwcmV2ZW50IHByZWVtcHRpb24vbWlncmF0aW9uICovCi0JCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQkJaWYgKGkgIT0gY3B1KQotCQkJCXBlcl9jcHUoaWE2NF9uZWVkX3RsYl9mbHVzaCwgaSkgPSAxOwotCQl9Ci0JCXB1dF9jcHUoKTsKLQl9CisJY3B1ID0gZ2V0X2NwdSgpOyAvKiBwcmV2ZW50IHByZWVtcHRpb24vbWlncmF0aW9uICovCisJZm9yX2VhY2hfb25saW5lX2NwdShpKQorCQlpZiAoaSAhPSBjcHUpCisJCQlwZXJfY3B1KGlhNjRfbmVlZF90bGJfZmx1c2gsIGkpID0gMTsKKwlwdXRfY3B1KCk7CiAJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOwogfQogCiB2b2lkCi1pYTY0X2dsb2JhbF90bGJfcHVyZ2UgKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBuYml0cykKK2lhNjRfZ2xvYmFsX3RsYl9wdXJnZSAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBuYml0cykKIHsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHB0Y2dfbG9jayk7CiAKQEAgLTEzNSw3ICsxMzQsOCBAQAogfQogCiB2b2lkCi1mbHVzaF90bGJfcmFuZ2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK2ZsdXNoX3RsYl9yYW5nZSAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCSB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CiAJdW5zaWduZWQgbG9uZyBzaXplID0gZW5kIC0gc3RhcnQ7CkBAIC0xNDksNyArMTQ5LDggQEAKICNlbmRpZgogCiAJbmJpdHMgPSBpYTY0X2ZscyhzaXplICsgMHhmZmYpOwotCXdoaWxlICh1bmxpa2VseSAoKCgxVUwgPDwgbmJpdHMpICYgcHVyZ2UubWFzaykgPT0gMCkgJiYgKG5iaXRzIDwgcHVyZ2UubWF4X2JpdHMpKQorCXdoaWxlICh1bmxpa2VseSAoKCgxVUwgPDwgbmJpdHMpICYgcHVyZ2UubWFzaykgPT0gMCkgJiYKKwkJCShuYml0cyA8IHB1cmdlLm1heF9iaXRzKSkKIAkJKytuYml0czsKIAlpZiAobmJpdHMgPiBwdXJnZS5tYXhfYml0cykKIAkJbmJpdHMgPSBwdXJnZS5tYXhfYml0czsKQEAgLTE5MSw1ICsxOTIsNSBAQAogCWxvY2FsX2NwdV9kYXRhLT5wdGNlX3N0cmlkZVswXSA9IHB0Y2VfaW5mby5zdHJpZGVbMF07CiAJbG9jYWxfY3B1X2RhdGEtPnB0Y2Vfc3RyaWRlWzFdID0gcHRjZV9pbmZvLnN0cmlkZVsxXTsKIAotCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsJCS8qIG51a2UgbGVmdCBvdmVycyBmcm9tIGJvb3RzdHJhcHBpbmcuLi4gKi8KKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CS8qIG51a2UgbGVmdCBvdmVycyBmcm9tIGJvb3RzdHJhcHBpbmcuLi4gKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDAxN2NmYzMuLjIwZDc2ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtOTUsNyArOTUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9yYXdfb3BzIHBjaV9zYWxfb3BzID0gewotCS5yZWFkID0gCXBjaV9zYWxfcmVhZCwKKwkucmVhZCA9CQlwY2lfc2FsX3JlYWQsCiAJLndyaXRlID0JcGNpX3NhbF93cml0ZQogfTsKIApAQCAtMTM3LDM1ICsxMzcsOTggQEAKIAlyZXR1cm4gY29udHJvbGxlcjsKIH0KIAotc3RhdGljIHU2NCBfX2RldmluaXQKLWFkZF9pb19zcGFjZSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQorc3RydWN0IHBjaV9yb290X2luZm8geworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqY29udHJvbGxlcjsKKwljaGFyICpuYW1lOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludAorbmV3X3NwYWNlICh1NjQgcGh5c19iYXNlLCBpbnQgc3BhcnNlKQogewotCXU2NCBvZmZzZXQ7Ci0JaW50IHNwYXJzZSA9IDA7CisJdTY0IG1taW9fYmFzZTsKIAlpbnQgaTsKIAotCWlmIChhZGRyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCA9PSAwKQotCQlyZXR1cm4gSU9fU1BBQ0VfQkFTRSgwKTsJLyogcGFydCBvZiBsZWdhY3kgSU8gc3BhY2UgKi8KKwlpZiAocGh5c19iYXNlID09IDApCisJCXJldHVybiAwOwkvKiBsZWdhY3kgSS9PIHBvcnQgc3BhY2UgKi8KIAotCWlmIChhZGRyLT5hdHRyaWJ1dGUuaW8udHJhbnNsYXRpb25fYXR0cmlidXRlID09IEFDUElfU1BBUlNFX1RSQU5TTEFUSU9OKQotCQlzcGFyc2UgPSAxOwotCi0Jb2Zmc2V0ID0gKHU2NCkgaW9yZW1hcChhZGRyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCwgMCk7CisJbW1pb19iYXNlID0gKHU2NCkgaW9yZW1hcChwaHlzX2Jhc2UsIDApOwogCWZvciAoaSA9IDA7IGkgPCBudW1faW9fc3BhY2VzOyBpKyspCi0JCWlmIChpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPT0gb2Zmc2V0ICYmCisJCWlmIChpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPT0gbW1pb19iYXNlICYmCiAJCSAgICBpb19zcGFjZVtpXS5zcGFyc2UgPT0gc3BhcnNlKQotCQkJcmV0dXJuIElPX1NQQUNFX0JBU0UoaSk7CisJCQlyZXR1cm4gaTsKIAogCWlmIChudW1faW9fc3BhY2VzID09IE1BWF9JT19TUEFDRVMpIHsKLQkJcHJpbnRrKCJUb28gbWFueSBJTyBwb3J0IHNwYWNlc1xuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBUb28gbWFueSBJTyBwb3J0IHNwYWNlcyAiCisJCQkiKE1BWF9JT19TUEFDRVM9JWx1KVxuIiwgTUFYX0lPX1NQQUNFUyk7CiAJCXJldHVybiB+MDsKIAl9CiAKIAlpID0gbnVtX2lvX3NwYWNlcysrOwotCWlvX3NwYWNlW2ldLm1taW9fYmFzZSA9IG9mZnNldDsKKwlpb19zcGFjZVtpXS5tbWlvX2Jhc2UgPSBtbWlvX2Jhc2U7CiAJaW9fc3BhY2VbaV0uc3BhcnNlID0gc3BhcnNlOwogCi0JcmV0dXJuIElPX1NQQUNFX0JBU0UoaSk7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB1NjQgX19kZXZpbml0CithZGRfaW9fc3BhY2UgKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCBzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgKmFkZHIpCit7CisJc3RydWN0IHJlc291cmNlICpyZXNvdXJjZTsKKwljaGFyICpuYW1lOworCXU2NCBiYXNlLCBtaW4sIG1heCwgYmFzZV9wb3J0OworCXVuc2lnbmVkIGludCBzcGFyc2UgPSAwLCBzcGFjZV9uciwgbGVuOworCisJcmVzb3VyY2UgPSBremFsbG9jKHNpemVvZigqcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlc291cmNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBObyBtZW1vcnkgZm9yICVzIEkvTyBwb3J0IHNwYWNlXG4iLAorCQkJaW5mby0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWxlbiA9IHN0cmxlbihpbmZvLT5uYW1lKSArIDMyOworCW5hbWUgPSBremFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuYW1lKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBObyBtZW1vcnkgZm9yICVzIEkvTyBwb3J0IHNwYWNlIG5hbWVcbiIsCisJCQlpbmZvLT5uYW1lKTsKKwkJZ290byBmcmVlX3Jlc291cmNlOworCX0KKworCW1pbiA9IGFkZHItPm1pbl9hZGRyZXNzX3JhbmdlOworCW1heCA9IG1pbiArIGFkZHItPmFkZHJlc3NfbGVuZ3RoIC0gMTsKKwlpZiAoYWRkci0+YXR0cmlidXRlLmlvLnRyYW5zbGF0aW9uX2F0dHJpYnV0ZSA9PSBBQ1BJX1NQQVJTRV9UUkFOU0xBVElPTikKKwkJc3BhcnNlID0gMTsKKworCXNwYWNlX25yID0gbmV3X3NwYWNlKGFkZHItPmFkZHJlc3NfdHJhbnNsYXRpb25fb2Zmc2V0LCBzcGFyc2UpOworCWlmIChzcGFjZV9uciA9PSB+MCkKKwkJZ290byBmcmVlX25hbWU7CisKKwliYXNlID0gX19wYShpb19zcGFjZVtzcGFjZV9ucl0ubW1pb19iYXNlKTsKKwliYXNlX3BvcnQgPSBJT19TUEFDRV9CQVNFKHNwYWNlX25yKTsKKwlzbnByaW50ZihuYW1lLCBsZW4sICIlcyBJL08gUG9ydHMgJTA4bHgtJTA4bHgiLCBpbmZvLT5uYW1lLAorCQliYXNlX3BvcnQgKyBtaW4sIGJhc2VfcG9ydCArIG1heCk7CisKKwkvKgorCSAqIFRoZSBTRE0gZ3VhcmFudGVlcyB0aGUgbGVnYWN5IDAtNjRLIHNwYWNlIGlzIHNwYXJzZSwgYnV0IGlmIHRoZQorCSAqIG1hcHBpbmcgaXMgZG9uZSBieSB0aGUgcHJvY2Vzc29yIChub3QgdGhlIGJyaWRnZSksIEFDUEkgbWF5IG5vdAorCSAqIG1hcmsgaXQgYXMgc3BhcnNlLgorCSAqLworCWlmIChzcGFjZV9uciA9PSAwKQorCQlzcGFyc2UgPSAxOworCisJcmVzb3VyY2UtPm5hbWUgID0gbmFtZTsKKwlyZXNvdXJjZS0+ZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKKwlyZXNvdXJjZS0+c3RhcnQgPSBiYXNlICsgKHNwYXJzZSA/IElPX1NQQUNFX1NQQVJTRV9FTkNPRElORyhtaW4pIDogbWluKTsKKwlyZXNvdXJjZS0+ZW5kICAgPSBiYXNlICsgKHNwYXJzZSA/IElPX1NQQUNFX1NQQVJTRV9FTkNPRElORyhtYXgpIDogbWF4KTsKKwlpbnNlcnRfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXNvdXJjZSk7CisKKwlyZXR1cm4gYmFzZV9wb3J0OworCitmcmVlX25hbWU6CisJa2ZyZWUobmFtZSk7CitmcmVlX3Jlc291cmNlOgorCWtmcmVlKHJlc291cmNlKTsKK291dDoKKwlyZXR1cm4gfjA7CiB9CiAKIHN0YXRpYyBhY3BpX3N0YXR1cyBfX2RldmluaXQgcmVzb3VyY2VfdG9fd2luZG93KHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKQEAgLTIwNSwxMSArMjY4LDYgQEAKIAlyZXR1cm4gQUVfT0s7CiB9CiAKLXN0cnVjdCBwY2lfcm9vdF9pbmZvIHsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmNvbnRyb2xsZXI7Ci0JY2hhciAqbmFtZTsKLX07Ci0KIHN0YXRpYyBfX2RldmluaXQgYWNwaV9zdGF0dXMgYWRkX3dpbmRvdyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqcmVzLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvID0gZGF0YTsKQEAgLTIzMSw3ICsyODksNyBAQAogCX0gZWxzZSBpZiAoYWRkci5yZXNvdXJjZV90eXBlID09IEFDUElfSU9fUkFOR0UpIHsKIAkJZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwogCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKLQkJb2Zmc2V0ID0gYWRkX2lvX3NwYWNlKCZhZGRyKTsKKwkJb2Zmc2V0ID0gYWRkX2lvX3NwYWNlKGluZm8sICZhZGRyKTsKIAkJaWYgKG9mZnNldCA9PSB+MCkKIAkJCXJldHVybiBBRV9PSzsKIAl9IGVsc2UKQEAgLTI0MSw3ICsyOTksNyBAQAogCXdpbmRvdy0+cmVzb3VyY2UubmFtZSA9IGluZm8tPm5hbWU7CiAJd2luZG93LT5yZXNvdXJjZS5mbGFncyA9IGZsYWdzOwogCXdpbmRvdy0+cmVzb3VyY2Uuc3RhcnQgPSBhZGRyLm1pbl9hZGRyZXNzX3JhbmdlICsgb2Zmc2V0OwotCXdpbmRvdy0+cmVzb3VyY2UuZW5kID0gYWRkci5tYXhfYWRkcmVzc19yYW5nZSArIG9mZnNldDsKKwl3aW5kb3ctPnJlc291cmNlLmVuZCA9IHdpbmRvdy0+cmVzb3VyY2Uuc3RhcnQgKyBhZGRyLmFkZHJlc3NfbGVuZ3RoIC0gMTsKIAl3aW5kb3ctPnJlc291cmNlLmNoaWxkID0gTlVMTDsKIAl3aW5kb3ctPm9mZnNldCA9IG9mZnNldDsKIApAQCAtNzM5LDcgKzc5Nyw3IEBACiB7CiAJaW50IGNvdW50ID0gbnJfcmVsZWFzZWQ7CiAKLSAJY291bnQgKz0gKElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SIC0gbGFzdCk7CisJY291bnQgKz0gKElBNjRfTEFTVF9ERVZJQ0VfVkVDVE9SIC0gbGFzdCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL2lvX2luaXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCmluZGV4IGI0ZjUwNTMuLjA1ZTRlYTggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvaW9faW5pdC5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAkJcmV0dXJuOwkJLypidXMgIyBkb2VzIG5vdCBleGlzdCAqLwogCXByb21fYnVzc29mdF9wdHIgPSBfX3ZhKHByb21fYnVzc29mdF9wdHIpOwogCi0gCWNvbnRyb2xsZXIgPSBrY2FsbG9jKDEsc2l6ZW9mKHN0cnVjdCBwY2lfY29udHJvbGxlciksIEdGUF9LRVJORUwpOworIAljb250cm9sbGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9jb250cm9sbGVyKSwgR0ZQX0tFUk5FTCk7CiAJY29udHJvbGxlci0+c2VnbWVudCA9IHNlZ21lbnQ7CiAgCWlmICghY29udHJvbGxlcikKICAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaCBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjLmgKaW5kZXggZmJjZWRjNy4uNTQ4M2E5ZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGMuaAorKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwYy5oCkBAIC0xNjMsNyArMTYzLDcgQEAKIAl1OCB2ZXJzaW9uOwogCXU2NCBoZWFydGJlYXQ7CiAJdTY0IGhlYXJ0YmVhdGluZ190b19tYXNrOwotCXU2NCBrZGJfc3RhdHVzOwkJLyogMCA9IG1hY2hpbmUgcnVubmluZyAqLworCXU2NCBoZWFydGJlYXRfb2ZmbGluZTsJLyogaWYgMCwgaGVhcnRiZWF0IHNob3VsZCBiZSBjaGFuZ2luZyAqLwogCWludCBhY3RfbmFzaWQ7CiAJaW50IGFjdF9waHlzX2NwdWlkOwogCXU2NCB2YXJzX3BhcnRfcGE7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19tYWluLmMKaW5kZXggY2VjZTNjNy4uYjYxNzIzNiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9zbi9pbnRyLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX3NhbC5oPgorI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgInhwYy5oIgogCkBAIC0xODgsNiArMTg5LDExIEBACiAJLm5vdGlmaWVyX2NhbGwgPSB4cGNfc3lzdGVtX3JlYm9vdCwKIH07CiAKK3N0YXRpYyBpbnQgeHBjX3N5c3RlbV9kaWUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhwY19kaWVfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB4cGNfc3lzdGVtX2RpZSwKK307CisKIAogLyoKICAqIFRpbWVyIGZ1bmN0aW9uIHRvIGVuZm9yY2UgdGhlIHRpbWVsaW1pdCBvbiB0aGUgcGFydGl0aW9uIGRpc2VuZ2FnZSByZXF1ZXN0LgpAQCAtOTk3LDYgKzEwMDMsOSBAQAogCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgcmVib290X25vdGlmaWVyX2xpc3QgKi8KIAkodm9pZCkgdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnhwY19yZWJvb3Rfbm90aWZpZXIpOwogCisJLyogdGFrZSBvdXJzZWx2ZXMgb2ZmIG9mIHRoZSBkaWVfbm90aWZpZXIgbGlzdCAqLworCSh2b2lkKSB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmeHBjX2RpZV9ub3RpZmllcik7CisKIAkvKiBjbG9zZSBkb3duIHByb3RlY3Rpb25zIGZvciBJUEkgb3BlcmF0aW9ucyAqLwogCXhwY19yZXN0cmljdF9JUElfb3BzKCk7CiAKQEAgLTEwMTEsNiArMTAyMCw2MyBAQAogCiAKIC8qCisgKiBDYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIGFib3V0IHRvIGJlIGVpdGhlciByZXN0YXJ0ZWQgb3IgaGFsdGVkLgorICovCitzdGF0aWMgdm9pZAoreHBjX2RpZV9kaXNlbmdhZ2Uodm9pZCkKK3sKKwlzdHJ1Y3QgeHBjX3BhcnRpdGlvbiAqcGFydDsKKwlwYXJ0aWRfdCBwYXJ0aWQ7CisJdW5zaWduZWQgbG9uZyBlbmdhZ2VkOworCWxvbmcgdGltZSwgcHJpbnRfdGltZSwgZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dDsKKworCisJLyoga2VlcCB4cGNfaGJfY2hlY2tlciB0aHJlYWQgZnJvbSBkb2luZyBhbnl0aGluZyAoanVzdCBpbiBjYXNlKSAqLworCXhwY19leGl0aW5nID0gMTsKKworCXhwY192YXJzLT5oZWFydGJlYXRpbmdfdG9fbWFzayA9IDA7ICAvKiBpbmRpY2F0ZSB3ZSdyZSBkZWFjdGl2YXRlZCAqLworCisJZm9yIChwYXJ0aWQgPSAxOyBwYXJ0aWQgPCBYUF9NQVhfUEFSVElUSU9OUzsgcGFydGlkKyspIHsKKwkJcGFydCA9ICZ4cGNfcGFydGl0aW9uc1twYXJ0aWRdOworCisJCWlmICghWFBDX1NVUFBPUlRTX0RJU0VOR0FHRV9SRVFVRVNUKHBhcnQtPgorCQkJCQkJCXJlbW90ZV92YXJzX3ZlcnNpb24pKSB7CisKKwkJCS8qIGp1c3QgaW4gY2FzZSBpdCB3YXMgbGVmdCBzZXQgYnkgYW4gZWFybGllciBYUEMgKi8KKwkJCXhwY19jbGVhcl9wYXJ0aXRpb25fZW5nYWdlZCgxVUwgPDwgcGFydGlkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHhwY19wYXJ0aXRpb25fZW5nYWdlZCgxVUwgPDwgcGFydGlkKSB8fAorCQkJCQlwYXJ0LT5hY3Rfc3RhdGUgIT0gWFBDX1BfSU5BQ1RJVkUpIHsKKwkJCXhwY19yZXF1ZXN0X3BhcnRpdGlvbl9kaXNlbmdhZ2UocGFydCk7CisJCQl4cGNfbWFya19wYXJ0aXRpb25fZGlzZW5nYWdlZChwYXJ0KTsKKwkJCXhwY19JUElfc2VuZF9kaXNlbmdhZ2UocGFydCk7CisJCX0KKwl9CisKKwlwcmludF90aW1lID0gcnRjX3RpbWUoKTsKKwlkaXNlbmdhZ2VfcmVxdWVzdF90aW1lb3V0ID0gcHJpbnRfdGltZSArCisJCSh4cGNfZGlzZW5nYWdlX3JlcXVlc3RfdGltZWxpbWl0ICogc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kKTsKKworCS8qIHdhaXQgZm9yIGFsbCBvdGhlciBwYXJ0aXRpb25zIHRvIGRpc2VuZ2FnZSBmcm9tIHVzICovCisKKwl3aGlsZSAoKGVuZ2FnZWQgPSB4cGNfcGFydGl0aW9uX2VuZ2FnZWQoLTFVTCkpICYmCisJCQkodGltZSA9IHJ0Y190aW1lKCkpIDwgZGlzZW5nYWdlX3JlcXVlc3RfdGltZW91dCkgeworCisJCWlmICh0aW1lID49IHByaW50X3RpbWUpIHsKKwkJCWRldl9pbmZvKHhwY19wYXJ0LCAid2FpdGluZyBmb3IgcmVtb3RlIHBhcnRpdGlvbnMgdG8gIgorCQkJCSJkaXNlbmdhZ2UsIGVuZ2FnZWQ9MHglbHhcbiIsIGVuZ2FnZWQpOworCQkJcHJpbnRfdGltZSA9IHRpbWUgKyAoWFBDX0RJU0VOR0FHRV9QUklOVE1TR19JTlRFUlZBTCAqCisJCQkJCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQpOworCQl9CisJfQorCWRldl9pbmZvKHhwY19wYXJ0LCAiZmluaXNoZWQgd2FpdGluZyBmb3IgcmVtb3RlIHBhcnRpdGlvbnMgdG8gIgorCQkJCSJkaXNlbmdhZ2UsIGVuZ2FnZWQ9MHglbHhcbiIsIGVuZ2FnZWQpOworfQorCisKKy8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYmVpbmcgcmVib290ZWQuCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTEwMzgsNiArMTEwNCwzMyBAQAogfQogCiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYmVpbmcgcmVib290ZWQuCisgKi8KK3N0YXRpYyBpbnQKK3hwY19zeXN0ZW1fZGllKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnVudXNlZCkKK3sKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBESUVfTUFDSElORV9SRVNUQVJUOgorCWNhc2UgRElFX01BQ0hJTkVfSEFMVDoKKwkJeHBjX2RpZV9kaXNlbmdhZ2UoKTsKKwkJYnJlYWs7CisJY2FzZSBESUVfTUNBX01PTkFSQ0hfRU5URVI6CisJY2FzZSBESUVfSU5JVF9NT05BUkNIX0VOVEVSOgorCQl4cGNfdmFycy0+aGVhcnRiZWF0Kys7CisJCXhwY192YXJzLT5oZWFydGJlYXRfb2ZmbGluZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRElFX01DQV9NT05BUkNIX0xFQVZFOgorCWNhc2UgRElFX0lOSVRfTU9OQVJDSF9MRUFWRToKKwkJeHBjX3ZhcnMtPmhlYXJ0YmVhdCsrOworCQl4cGNfdmFycy0+aGVhcnRiZWF0X29mZmxpbmUgPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKwogaW50IF9faW5pdAogeHBjX2luaXQodm9pZCkKIHsKQEAgLTExNTQsNiArMTI0NywxMiBAQAogCQlkZXZfd2Fybih4cGNfcGFydCwgImNhbid0IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllclxuIik7CiAJfQogCisJLyogYWRkIG91cnNlbHZlcyB0byB0aGUgZGllX25vdGlmaWVyIGxpc3QgKGkuZS4sIGlhNjRkaWVfY2hhaW4pICovCisJcmV0ID0gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZ4cGNfZGllX25vdGlmaWVyKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X3dhcm4oeHBjX3BhcnQsICJjYW4ndCByZWdpc3RlciBkaWUgbm90aWZpZXJcbiIpOworCX0KKwogCiAJLyoKIAkgKiBTZXQgdGhlIGJlYXRpbmcgdG8gb3RoZXIgcGFydGl0aW9ucyBpbnRvIG1vdGlvbi4gIFRoaXMgaXMKQEAgLTExNzksNiArMTI3OCw5IEBACiAJCS8qIHRha2Ugb3Vyc2VsdmVzIG9mZiBvZiB0aGUgcmVib290X25vdGlmaWVyX2xpc3QgKi8KIAkJKHZvaWQpIHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ4cGNfcmVib290X25vdGlmaWVyKTsKIAorCQkvKiB0YWtlIG91cnNlbHZlcyBvZmYgb2YgdGhlIGRpZV9ub3RpZmllciBsaXN0ICovCisJCSh2b2lkKSB1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmeHBjX2RpZV9ub3RpZmllcik7CisKIAkJZGVsX3RpbWVyX3N5bmMoJnhwY19oYl90aW1lcik7CiAJCWZyZWVfaXJxKFNHSV9YUENfQUNUSVZBVEUsIE5VTEwpOwogCQl4cGNfcmVzdHJpY3RfSVBJX29wcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCA1ODFlMTEzLi5jZGQ2NDMxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtNDM2LDEzICs0MzYsMTMgQEAKIAkJfQogCiAJCWRldl9kYmcoeHBjX3BhcnQsICJwYXJ0aWQgPSAlZCwgaGVhcnRiZWF0ID0gJWxkLCBsYXN0X2hlYXJ0YmVhdCIKLQkJCSIgPSAlbGQsIGtkYl9zdGF0dXMgPSAlbGQsIEhCX21hc2sgPSAweCVseFxuIiwgcGFydGlkLAotCQkJcmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdCwgcGFydC0+bGFzdF9oZWFydGJlYXQsCi0JCQlyZW1vdGVfdmFycy0+a2RiX3N0YXR1cywKKwkJCSIgPSAlbGQsIGhlYXJ0YmVhdF9vZmZsaW5lID0gJWxkLCBIQl9tYXNrID0gMHglbHhcbiIsCisJCQlwYXJ0aWQsIHJlbW90ZV92YXJzLT5oZWFydGJlYXQsIHBhcnQtPmxhc3RfaGVhcnRiZWF0LAorCQkJcmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdF9vZmZsaW5lLAogCQkJcmVtb3RlX3ZhcnMtPmhlYXJ0YmVhdGluZ190b19tYXNrKTsKIAogCQlpZiAoKChyZW1vdGVfdmFycy0+aGVhcnRiZWF0ID09IHBhcnQtPmxhc3RfaGVhcnRiZWF0KSAmJgotCQkJKHJlbW90ZV92YXJzLT5rZGJfc3RhdHVzID09IDApKSB8fAorCQkJKHJlbW90ZV92YXJzLT5oZWFydGJlYXRfb2ZmbGluZSA9PSAwKSkgfHwKIAkJCSAgICAgIXhwY19oYl9hbGxvd2VkKHNuX3BhcnRpdGlvbl9pZCwgcmVtb3RlX3ZhcnMpKSB7CiAKIAkJCVhQQ19ERUFDVElWQVRFX1BBUlRJVElPTihwYXJ0LCB4cGNOb0hlYXJ0YmVhdCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggOWYwM2Q0ZS4uZGRhMTk2YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJaWYgKGkgPiBsYXN0KQogCQlyZXR1cm4gMDsKIAotCW1hcCA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aW9jZV9kbWFtYXApLCBHRlBfQVRPTUlDKTsKKwltYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGlvY2VfZG1hbWFwKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtYXApCiAJCXJldHVybiAwOwogCkBAIC01NTUsNyArNTU1LDcgQEAKIAlzdHJ1Y3QgdGlvY2UgKnRpb2NlX21tcjsKIAlzdHJ1Y3QgdGlvY2Vfa2VybmVsICp0aW9jZV9rZXJuOwogCi0JdGlvY2Vfa2VybiA9IGtjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aW9jZV9rZXJuZWwpLCBHRlBfS0VSTkVMKTsKKwl0aW9jZV9rZXJuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRpb2NlX2tlcm5lbCksIEdGUF9LRVJORUwpOwogCWlmICghdGlvY2Vfa2VybikgewogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC03MjcsNyArNzI3LDcgQEAKIAkgKiBBbGxvY2F0ZSBrZXJuZWwgYnVzIHNvZnQgYW5kIGNvcHkgZnJvbSBwcm9tLgogCSAqLwogCi0JdGlvY2VfY29tbW9uID0ga2NhbGxvYygxLCBzaXplb2Yoc3RydWN0IHRpb2NlX2NvbW1vbiksIEdGUF9LRVJORUwpOworCXRpb2NlX2NvbW1vbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW9jZV9jb21tb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRpb2NlX2NvbW1vbikKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMTQ5M2M3OC4uYzUyMzAyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTU4MSwxNyArNTgxLDEyIEBACiAgICAgICAgZGVmX2Jvb2wgeQogICAgICAgIGRlcGVuZHMgb24gUFBDNjQgJiYgIU5VTUEKIAotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwotCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gU01QICYmIFBQQ19QU0VSSUVTCiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIApAQCAtNTk5LDYgKzU5NCwxMCBAQAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAorY29uZmlnIEFSQ0hfTUVNT1JZX1BST0JFCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcKKwogIyBTb21lIE5VTUEgbm9kZXMgaGF2ZSBtZW1vcnkgcmFuZ2VzIHRoYXQgc3BhbgogIyBvdGhlciBub2Rlcy4gIEV2ZW4gdGhvdWdoIGEgcGZuIGlzIHZhbGlkIGFuZAogIyBiZXR3ZWVuIGEgbm9kZSdzIHN0YXJ0IGFuZCBlbmQgcGZucywgaXQgbWF5IG5vdApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYjNhZTI5OS4uOWE3NGI3YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBpZmVxICgkKENPTkZJR19QUEM2NCkseSkKIEVYVFJBX0NGTEFHUwkrPSAtbW5vLW1pbmltYWwtdG9jCitDRkxBR1NfaW9jdGwzMi5vICs9IC1JZnMvCiBlbmRpZgogaWZlcSAoJChDT05GSUdfUFBDMzIpLHkpCiBDRkxBR1NfcHJvbV9pbml0Lm8gICAgICArPSAtZlBJQwpAQCAtMTEsMTcgKzEyLDI5IEBACiBlbmRpZgogCiBvYmoteQkJCQk6PSBzZW1hcGhvcmUubyBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXAotCQkJCSAgIHNpZ25hbF8zMi5vIHBtYy5vCisJCQkJICAgaXJxLm8gc2lnbmFsXzMyLm8gcG1jLm8gdmRzby5vCitvYmoteQkJCQkrPSB2ZHNvMzIvCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBzZXR1cF82NC5vIGJpbmZtdF9lbGYzMi5vIHN5c19wcGMzMi5vIFwKLQkJCQkgICBzaWduYWxfNjQubyBwdHJhY2UzMi5vIHN5c3RibC5vCisJCQkJICAgc2lnbmFsXzY0Lm8gcHRyYWNlMzIubyBzeXN0YmwubyBcCisJCQkJICAgcGFjYS5vIGlvY3RsMzIubyBjcHVfc2V0dXBfcG93ZXI0Lm8gXAorCQkJCSAgIGZpcm13YXJlLm8gc3lzZnMubyB1ZGJnLm8KK29iai0kKENPTkZJR19QUEM2NCkJCSs9IHZkc282NC8KIG9iai0kKENPTkZJR19BTFRJVkVDKQkJKz0gdmVjZW11Lm8gdmVjdG9yLm8KIG9iai0kKENPTkZJR19QT1dFUjQpCQkrPSBpZGxlX3Bvd2VyNC5vCiBvYmotJChDT05GSUdfUFBDX09GKQkJKz0gb2ZfZGV2aWNlLm8KLW9iai0kKENPTkZJR19QUENfUlRBUykJCSs9IHJ0YXMubworcHJvY2ZzLSQoQ09ORklHX1BQQzY0KQkJOj0gcHJvY19wcGM2NC5vCitvYmotJChDT05GSUdfUFJPQ19GUykJCSs9ICQocHJvY2ZzLXkpCitydGFzcGNpLSQoQ09ORklHX1BQQzY0KQkJOj0gcnRhc19wY2kubworb2JqLSQoQ09ORklHX1BQQ19SVEFTKQkJKz0gcnRhcy5vICQocnRhc3BjaS15KQogb2JqLSQoQ09ORklHX1JUQVNfRkxBU0gpCSs9IHJ0YXNfZmxhc2gubwogb2JqLSQoQ09ORklHX1JUQVNfUFJPQykJCSs9IHJ0YXMtcHJvYy5vCitvYmotJChDT05GSUdfTFBBUkNGRykJCSs9IGxwYXJjZmcubwogb2JqLSQoQ09ORklHX0lCTVZJTykJCSs9IHZpby5vCiBvYmotJChDT05GSUdfR0VORVJJQ19UQlNZTkMpCSs9IHNtcC10YnN5bmMubworb2JqLSQoQ09ORklHX1BQQ19QU0VSSUVTKQkrPSB1ZGJnXzE2NTUwLm8KK29iai0kKENPTkZJR19QUENfTUFQTEUpCQkrPSB1ZGJnXzE2NTUwLm8KK3VkYmdzY2MtJChDT05GSUdfUFBDNjQpCQk6PSB1ZGJnX3NjYy5vCitvYmotJChDT05GSUdfUFBDX1BNQUMpCQkrPSAkKHVkYmdzY2MteSkKIAogaWZlcSAoJChDT05GSUdfUFBDX01FUkdFKSx5KQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggYjc1NzU3Mi4uNDU1MGViNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMzcsMTIgKzM3LDEyIEBACiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KKyNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KICNlbmRpZgogCkBAIC0xMDYsNyArMTA2LDYgQEAKIAlERUZJTkUoSUNBQ0hFTDFMSU5FU0laRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxPR0xJTkVTSVpFLCBvZmZzZXRvZihzdHJ1Y3QgcHBjNjRfY2FjaGVzLCBsb2dfaWxpbmVfc2l6ZSkpOwogCURFRklORShJQ0FDSEVMMUxJTkVTUEVSUEFHRSwgb2Zmc2V0b2Yoc3RydWN0IHBwYzY0X2NhY2hlcywgaWxpbmVzX3Blcl9wYWdlKSk7Ci0JREVGSU5FKFBMQVRGT1JNLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBwbGF0Zm9ybSkpOwogCURFRklORShQTEFURk9STV9MUEFSLCBQTEFURk9STV9MUEFSKTsKIAogCS8qIHBhY2EgKi8KQEAgLTI1MiwyNSArMjUxLDQyIEBACiAKIAlERUZJTkUoVEFTS19TSVpFLCBUQVNLX1NJWkUpOwogCURFRklORShOVU1fVVNFUl9TRUdNRU5UUywgVEFTS19TSVpFPj4yOCk7Ci0jZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KLQkvKiBzeXN0ZW1jZmcgb2Zmc2V0cyBmb3IgdXNlIGJ5IHZkc28gKi8KLQlERUZJTkUoQ0ZHX1RCX09SSUdfU1RBTVAsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHRiX29yaWdfc3RhbXApKTsKLQlERUZJTkUoQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHRiX3RpY2tzX3Blcl9zZWMpKTsKLQlERUZJTkUoQ0ZHX1RCX1RPX1hTLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl90b194cykpOwotCURFRklORShDRkdfU1RBTVBfWFNFQywgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgc3RhbXBfeHNlYykpOwotCURFRklORShDRkdfVEJfVVBEQVRFX0NPVU5ULCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0Yl91cGRhdGVfY291bnQpKTsKLQlERUZJTkUoQ0ZHX1RaX01JTlVURVdFU1QsIG9mZnNldG9mKHN0cnVjdCBzeXN0ZW1jZmcsIHR6X21pbnV0ZXN3ZXN0KSk7Ci0JREVGSU5FKENGR19UWl9EU1RUSU1FLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCB0el9kc3R0aW1lKSk7Ci0JREVGSU5FKENGR19TWVNDQUxMX01BUDMyLCBvZmZzZXRvZihzdHJ1Y3Qgc3lzdGVtY2ZnLCBzeXNjYWxsX21hcF8zMikpOwotCURFRklORShDRkdfU1lTQ0FMTF9NQVA2NCwgb2Zmc2V0b2Yoc3RydWN0IHN5c3RlbWNmZywgc3lzY2FsbF9tYXBfNjQpKTsKKyNlbmRpZiAvKiAhIENPTkZJR19QUEM2NCAqLwogCi0JLyogdGltZXZhbC90aW1lem9uZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCS8qIGRhdGFwYWdlIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCisJREVGSU5FKENGR19UQl9PUklHX1NUQU1QLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl9vcmlnX3N0YW1wKSk7CisJREVGSU5FKENGR19UQl9USUNLU19QRVJfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl90aWNrc19wZXJfc2VjKSk7CisJREVGSU5FKENGR19UQl9UT19YUywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdG9feHMpKTsKKwlERUZJTkUoQ0ZHX1NUQU1QX1hTRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN0YW1wX3hzZWMpKTsKKwlERUZJTkUoQ0ZHX1RCX1VQREFURV9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdXBkYXRlX2NvdW50KSk7CisJREVGSU5FKENGR19UWl9NSU5VVEVXRVNULCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9taW51dGVzd2VzdCkpOworCURFRklORShDRkdfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfZHN0dGltZSkpOworCURFRklORShDRkdfU1lTQ0FMTF9NQVAzMiwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3lzY2FsbF9tYXBfMzIpKTsKKwlERUZJTkUoV1RPTV9DTE9DS19TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfc2VjKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfTlNFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19uc2VjKSk7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJREVGSU5FKENGR19TWVNDQUxMX01BUDY0LCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCBzeXNjYWxsX21hcF82NCkpOwogCURFRklORShUVkFMNjRfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfc2VjKSk7CiAJREVGSU5FKFRWQUw2NF9UVl9VU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXZhbCwgdHZfdXNlYykpOwogCURFRklORShUVkFMMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3RpbWV2YWwsIHR2X3NlYykpOwogCURFRklORShUVkFMMzJfVFZfVVNFQywgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF90aW1ldmFsLCB0dl91c2VjKSk7CisJREVGSU5FKFRTUEMzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCBjb21wYXRfdGltZXNwZWMsIHR2X3NlYykpOworCURFRklORShUU1BDMzJfVFZfTlNFQywgb2Zmc2V0b2Yoc3RydWN0IGNvbXBhdF90aW1lc3BlYywgdHZfbnNlYykpOworI2Vsc2UKKwlERUZJTkUoVFZBTDMyX1RWX1NFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3NlYykpOworCURFRklORShUVkFMMzJfVFZfVVNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWV2YWwsIHR2X3VzZWMpKTsKKwlERUZJTkUoVFNQRUMzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1lc3BlYywgdHZfc2VjKSk7CisJREVGSU5FKFRTUEVDMzJfVFZfTlNFQywgb2Zmc2V0b2Yoc3RydWN0IHRpbWVzcGVjLCB0dl9uc2VjKSk7CisjZW5kaWYKKwkvKiB0aW1ldmFsL3RpbWV6b25lIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCiAJREVGSU5FKFRaT05FX1RaX01JTldFU1QsIG9mZnNldG9mKHN0cnVjdCB0aW1lem9uZSwgdHpfbWludXRlc3dlc3QpKTsKIAlERUZJTkUoVFpPTkVfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHRpbWV6b25lLCB0el9kc3R0aW1lKSk7Ci0jZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCisKKwkvKiBPdGhlciBiaXRzIHVzZWQgYnkgdGhlIHZkc28gKi8KKwlERUZJTkUoQ0xPQ0tfUkVBTFRJTUUsIENMT0NLX1JFQUxUSU1FKTsKKwlERUZJTkUoQ0xPQ0tfTU9OT1RPTklDLCBDTE9DS19NT05PVE9OSUMpOworCURFRklORShOU0VDX1BFUl9TRUMsIE5TRUNfUEVSX1NFQyk7CisJREVGSU5FKENMT0NLX1JFQUxUSU1FX1JFUywgVElDS19OU0VDKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvY3B1X3NldHVwX3Bvd2VyNC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwppbmRleCAxZmI2NzNjLi5jY2E5NDJmIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKQEAgLTExNCwxMSArMTE0LDExIEBACiAKIAkuZGF0YQogCS5iYWxpZ24JTDFfQ0FDSEVfQllURVMsMAotY3B1X3N0YXRlX3N0b3JhZ2U6CQorY3B1X3N0YXRlX3N0b3JhZ2U6CiAJLnNwYWNlCUNTX1NJWkUKIAkuYmFsaWduCUwxX0NBQ0hFX0JZVEVTLDAKIAkudGV4dAotCQorCiAvKiBDYWxsZWQgaW4gbm9ybWFsIGNvbnRleHQgdG8gYmFja3VwIENQVSAwIHN0YXRlLiBUaGlzCiAgKiBkb2VzIG5vdCBpbmNsdWRlIGNhY2hlIHNldHRpbmdzLiBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KICAqIGNhbGxlZCBmb3IgbWFjaGluZSBzbGVlcC4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIHRoZSBNTVUKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXN0ZAlyMyxDU19ISUQ0KHI1KQogCW1mc3ByCXIzLFNQUk5fSElENQogCXN0ZAlyMyxDU19ISUQ1KHI1KQotCQorCiAyOgogCW10Y3IJcjcKIAlibHIKQEAgLTIxMyw3ICsyMTMsNyBAQAogCW10c3ByCVNQUk5fSElEMSxyMwogCXN5bmMKIAlpc3luYwotCQorCiAJLyogUmVzdG9yZSBISUQ0ICovCiAJbGQJcjMsQ1NfSElENChyNSkKIAlzeW5jCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggY2M0ZTllYi4uMWQ4NWNlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtNTIsNiArNTIsOSBAQAogI2RlZmluZSBDT01NT05fVVNFUgkJKFBQQ19GRUFUVVJFXzMyIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSB8IFwKIAkJCQkgUFBDX0ZFQVRVUkVfSEFTX01NVSkKICNkZWZpbmUgQ09NTU9OX1VTRVJfUFBDNjQJKENPTU1PTl9VU0VSIHwgUFBDX0ZFQVRVUkVfNjQpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNAkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjQpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNQkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9QT1dFUjUpCisjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNV9QTFVTCShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BPV0VSNV9QTFVTKQogCiAKIC8qIFdlIG9ubHkgc2V0IHRoZSBzcGUgZmVhdHVyZXMgaWYgdGhlIGtlcm5lbCB3YXMgY29tcGlsZWQgd2l0aApAQCAtMTYwLDcgKzE2Myw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM1MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQgKGdwKSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUE9XRVI0LAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0LAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LApAQCAtMTc1LDcgKzE3OCw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDM4MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQT1dFUjQrIChncSkiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX1BPV0VSNCwKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKQEAgLTE5MCw3ICsxOTMsNyBAQAogCQkucHZyX3ZhbHVlCQk9IDB4MDAzOTAwMDAsCiAJCS5jcHVfbmFtZQkJPSAiUFBDOTcwIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0IHwKKwkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUE9XRVI0IHwKIAkJCVBQQ19GRUFUVVJFX0hBU19BTFRJVkVDX0NPTVAsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKQEAgLTIxMiw3ICsyMTUsNyBAQAogI2Vsc2UKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QUEM5NzAsCiAjZW5kaWYKLQkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjQgfAogCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LApAQCAtMjMwLDcgKzIzMyw3IEBACiAJCS5wdnJfdmFsdWUJCT0gMHgwMDQ0MDAwMCwKIAkJLmNwdV9uYW1lCQk9ICJQUEM5NzBNUCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfUFBDOTcwLAotCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QUEM2NCB8CisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BPV0VSNCB8CiAJCQlQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCkBAIC0yNDUsNyArMjQ4LDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwM2EwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3IpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMTI4LAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDYsCkBAIC0yNjAsNyArMjYzLDcgQEAKIAkJLnB2cl92YWx1ZQkJPSAweDAwM2IwMDAwLAogCQkuY3B1X25hbWUJCT0gIlBPV0VSNSAoZ3MpIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QT1dFUjUsCi0JCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX1BQQzY0LAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QT1dFUjVfUExVUywKIAkJLmljYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gNiwKQEAgLTI3Niw3ICsyNzksNyBAQAogCQkuY3B1X25hbWUJCT0gIkNlbGwgQnJvYWRiYW5kIEVuZ2luZSIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfQ0VMTCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVJfUFBDNjQgfAotCQkJUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCwKKwkJCVBQQ19GRUFUVVJFX0NFTEwgfCBQUENfRkVBVFVSRV9IQVNfQUxUSVZFQ19DT01QLAogCQkuaWNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfYmUsCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9maXJtd2FyZS5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2Zpcm13YXJlLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCBkODQzMmMwLi42NWVhZTc1IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiAgYXJjaC9wcGM2NC9rZXJuZWwvZmlybXdhcmUuYwotICoKICAqICBFeHRyYWN0ZWQgZnJvbSBjcHV0YWJsZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMSBCZW4uIEhlcnJlbnNjaG1pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCmluZGV4IDRkNjAwMWYuLmI3ODBiNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUwpAQCAtNDEsMjAgKzQxLDIwIEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAlMT0FEQkFTRShyMywgbGFzdF90YXNrX3VzZWRfbWF0aCkKIAl0b3JlYWwocjMpCi0JTERMCXI0LE9GRihsYXN0X3Rhc2tfdXNlZF9tYXRoKShyMykKLQlDTVBJCTAscjQsMAorCVBQQ19MTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCisJUFBDX0xDTVBJCTAscjQsMAogCWJlcQkxZgogCXRvcmVhbChyNCkKIAlhZGRpCXI0LHI0LFRIUkVBRAkJLyogd2FudCBsYXN0X3Rhc2tfdXNlZF9tYXRoLT50aHJlYWQgKi8KIAlTQVZFXzMyRlBSUygwLCByNCkKIAltZmZzCWZyMAogCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUihyNCkKLQlMREwJcjUsUFRfUkVHUyhyNCkKKwlQUENfTEwJcjUsUFRfUkVHUyhyNCkKIAl0b3JlYWwocjUpCi0JTERMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCisJUFBDX0xMCXI0LF9NU1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjUpCiAJbGkJcjEwLE1TUl9GUHxNU1JfRkUwfE1TUl9GRTEKIAlhbmRjCXI0LHI0LHIxMAkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCVNUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19TVEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIDE6CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCS8qIGVuYWJsZSB1c2Ugb2YgRlAgYWZ0ZXIgcmV0dXJuICovCkBAIC03Nyw3ICs3Nyw3IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAlzdWJpCXI0LHI1LFRIUkVBRAogCWZyb21yZWFsKHI0KQotCVNUTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCisJUFBDX1NUTAlyNCxPRkYobGFzdF90YXNrX3VzZWRfbWF0aCkocjMpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCS8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KIAkvKiB3ZSBoYXZlbid0IHVzZWQgY3RyIG9yIHhlciBvciBsciAqLwpAQCAtOTcsMjQgKzk3LDI0IEBACiAJTVRNU1JEKHI1KQkJCS8qIGVuYWJsZSB1c2Ugb2YgZnB1IG5vdyAqLwogCVNZTkNfNjAxCiAJaXN5bmMKLQlDTVBJCTAscjMsMAorCVBQQ19MQ01QSQkwLHIzLDAKIAliZXFsci0JCQkJLyogaWYgbm8gcHJldmlvdXMgb3duZXIsIGRvbmUgKi8KIAlhZGRpCXIzLHIzLFRIUkVBRAkgICAgICAgIC8qIHdhbnQgVEhSRUFEIG9mIHRhc2sgKi8KLQlMREwJcjUsUFRfUkVHUyhyMykKLQlDTVBJCTAscjUsMAorCVBQQ19MTAlyNSxQVF9SRUdTKHIzKQorCVBQQ19MQ01QSQkwLHI1LDAKIAlTQVZFXzMyRlBSUygwLCByMykKIAltZmZzCWZyMAogCXN0ZmQJZnIwLFRIUkVBRF9GUFNDUihyMykKIAliZXEJMWYKLQlMREwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKKwlQUENfTEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIAlsaQlyMyxNU1JfRlB8TVNSX0ZFMHxNU1JfRkUxCiAJYW5kYwlyNCxyNCxyMwkJLyogZGlzYWJsZSBGUCBmb3IgcHJldmlvdXMgdGFzayAqLwotCVNUTAlyNCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHI1KQorCVBQQ19TVEwJcjQsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyNSkKIDE6CiAjaWZuZGVmIENPTkZJR19TTVAKIAlsaQlyNSwwCiAJTE9BREJBU0UocjQsbGFzdF90YXNrX3VzZWRfbWF0aCkKLQlTVEwJcjUsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHI0KQorCVBQQ19TVEwJcjUsT0ZGKGxhc3RfdGFza191c2VkX21hdGgpKHI0KQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlibHIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBiMTAyZTNhLi5jY2RmOTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTEwMCw2ICsxMTAwLDcgQEAKIAltcglyMyxyMzEKIAltcglyNCxyMzAKIAlibAltYWNoaW5lX2luaXQKKwlibAlfX3NhdmVfY3B1X3NldHVwCiAJYmwJTU1VX2luaXQKIAogI2lmZGVmIENPTkZJR19BUFVTCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDE2YWI0MGQuLjhhOGJmNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3JlZy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KQEAgLTE2OTcsMjUgKzE2OTYsMTQgQEAKICAqICAgU1BSRzMgPSBwYWNhIHZpcnR1YWwgYWRkcmVzcwogICovCiBfR0xPQkFMKF9fc2Vjb25kYXJ5X3N0YXJ0KQorCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCisJSE1UX01FRElVTQogCi0JSE1UX01FRElVTQkJCS8qIFNldCB0aHJlYWQgcHJpb3JpdHkgdG8gTUVESVVNICovCi0KKwkvKiBMb2FkIFRPQyAqLwogCWxkCXIyLFBBQ0FUT0MocjEzKQotCWxpCXI2LDAKLQlzdGIJcjYsUEFDQVBST0NFTkFCTEVEKHIxMykKIAotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQkvKiBJbml0aWFsaXplIHRoZSBwYWdlIHRhYmxlIHBvaW50ZXIgcmVnaXN0ZXIuICovCi0JTE9BREFERFIocjYsX1NEUjEpCi0JbGQJcjYsMChyNikJCS8qIGdldCB0aGUgdmFsdWUgb2YgX1NEUjEJICovCi0JbXRzcHIJU1BSTl9TRFIxLHI2CQkJLyogc2V0IHRoZSBodGFiIGxvY2F0aW9uCSAqLwotI2VuZGlmCi0JLyogSW5pdGlhbGl6ZSB0aGUgZmlyc3Qgc2VnbWVudCB0YWJsZSAob3IgU0xCKSBlbnRyeQkJICovCi0JbGQJcjMsUEFDQVNUQUJWSVJUKHIxMykJLyogZ2V0IGFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLUJFR0lOX0ZUUl9TRUNUSU9OCi0JYmwJLnN0YWJfaW5pdGlhbGl6ZQotRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfU0xCKQotCWJsCS5zbGJfaW5pdGlhbGl6ZQorCS8qIERvIGVhcmx5IHNldHVwIGZvciB0aGF0IENQVSAoc3RhYiwgc2xiLCBoYXNoIHRhYmxlIHBvaW50ZXIpICovCisJYmwJLmVhcmx5X3NldHVwX3NlY29uZGFyeQogCiAJLyogSW5pdGlhbGl6ZSB0aGUga2VybmVsIHN0YWNrLiAgSnVzdCBhIHJlcGVhdCBmb3IgaVNlcmllcy4JICovCiAJTE9BREFERFIocjMsY3VycmVudF9zZXQpCkBAIC0xNzI0LDM3ICsxNzEyLDcgQEAKIAlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFLVNUQUNLX0ZSQU1FX09WRVJIRUFECiAJc3RkCXIxLFBBQ0FLU0FWRShyMTMpCiAKLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQkvKiBnZXQgcmFkZHIgb2Ygc2VnbWVudCB0YWJsZQkgKi8KLQlvcmkJcjQscjMsMQkJCS8qIHR1cm4gb24gdmFsaWQgYml0CQkgKi8KLQotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCWxpCXIwLC0xCQkJLyogaHlwZXJ2aXNvciBjYWxsICovCi0JbGkJcjMsMQotCXNsZGkJcjMscjMsNjMJCS8qIDB4ODAwMDAwMDAwMDAwMDAwMCAqLwotCW9yaQlyMyxyMyw0CQkJLyogMHg4MDAwMDAwMDAwMDAwMDA0ICovCi0Jc2MJCQkJLyogSHZDYWxsX3NldEFTUiAqLwotI2Vsc2UKLQkvKiBzZXQgdGhlIEFTUiAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZwkgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MJCSAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICAqLwotCWJlcQk5N2YKLQljbXB3aQlyMywweDM2CQkJLyogSVN0YXIgICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzQJCQkvKiBQdWxzYXIgKi8KLQlibmUJOThmCi05NzoJbGkJcjMsSF9TRVRfQVNSCQkvKiBoY2FsbCA9IEhfU0VUX0FTUiAqLwotCUhWU0MJCQkJLyogSW52b2tpbmcgaGNhbGwgKi8KLQliCTk5ZgotOTg6CQkJCQkvKiAhKHJwYSBoeXBlcnZpc29yKSB8fCAhKHN0YXIpICAqLwotCW10YXNyCXI0CQkJLyogc2V0IHRoZSBzdGFiIGxvY2F0aW9uCSAqLwotOTk6Ci0jZW5kaWYKKwkvKiBDbGVhciBiYWNrY2hhaW4gc28gd2UgZ2V0IG5pY2UgYmFja3RyYWNlcyAqLwogCWxpCXI3LDAKIAltdGxyCXI3CiAKQEAgLTE3NzcsNiArMTczNSw3IEBACiAJbGkJcjMsMAogCXN0ZAlyMywwKHIxKQkJLyogWmVybyB0aGUgc3RhY2sgZnJhbWUgcG9pbnRlcgkqLwogCWJsCS5zdGFydF9zZWNvbmRhcnkKKwliCS4KICNlbmRpZgogCiAvKgpAQCAtMTg5Niw0MCArMTg1NSw2IEBACiAJbXIJcjMscjMxCiAgCWJsCS5lYXJseV9zZXR1cAogCi0JLyogc2V0IHRoZSBBU1IgKi8KLQlsZAlyMyxQQUNBU1RBQlJFQUwocjEzKQotCW9yaQlyNCxyMywxCQkJLyogdHVybiBvbiB2YWxpZCBiaXQJCSAqLwotCWxkCXIzLHN5c3RlbWNmZ0Bnb3QocjIpCS8qIHIzID0gcHRyIHRvIHN5c3RlbWNmZyAqLwotCWxkCXIzLDAocjMpCi0JbHd6CXIzLFBMQVRGT1JNKHIzKQkJLyogcjMgPSBwbGF0Zm9ybSBmbGFncyAqLwotCWFuZGkuCXIzLHIzLFBMQVRGT1JNX0xQQVIJLyogVGVzdCBpZiBiaXQgMCBpcyBzZXQgKExQQVIgYml0KSAqLwotCWJlcQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzIDAgICovCi0JbWZzcHIJcjMsU1BSTl9QVlIKLQlzcndpCXIzLHIzLDE2Ci0JY21wd2kJcjMsMHgzNwkJCS8qIFNTdGFyICovCi0JYmVxCTk3ZgotCWNtcHdpCXIzLDB4MzYJCQkvKiBJU3RhciAgKi8KLQliZXEJOTdmCi0JY21wd2kJcjMsMHgzNAkJCS8qIFB1bHNhciAqLwotCWJuZQk5OGYKLTk3OglsaQlyMyxIX1NFVF9BU1IJCS8qIGhjYWxsID0gSF9TRVRfQVNSICovCi0JSFZTQwkJCQkvKiBJbnZva2luZyBoY2FsbCAqLwotCWIJOTlmCi05ODoJCQkJCS8qICEocnBhIGh5cGVydmlzb3IpIHx8ICEoc3RhcikgKi8KLQltdGFzcglyNAkJCS8qIHNldCB0aGUgc3RhYiBsb2NhdGlvbgkqLwotOTk6Ci0JLyogU2V0IFNEUjEgKGhhc2ggdGFibGUgcG9pbnRlcikgKi8KLQlsZAlyMyxzeXN0ZW1jZmdAZ290KHIyKQkvKiByMyA9IHB0ciB0byBzeXN0ZW1jZmcgKi8KLQlsZAlyMywwKHIzKQotCWx3eglyMyxQTEFURk9STShyMykJCS8qIHIzID0gcGxhdGZvcm0gZmxhZ3MgKi8KLQkvKiBUZXN0IGlmIGJpdCAwIGlzIHNldCAoTFBBUiBiaXQpICovCi0JYW5kaS4JcjMscjMsUExBVEZPUk1fTFBBUgotCWJuZQk5OGYJCQkvKiBicmFuY2ggaWYgcmVzdWx0IGlzICEwICAqLwotCUxPQURBRERSKHI2LF9TRFIxKQkJLyogT25seSBpZiBOT1QgTFBBUiAqLwotCWFkZAlyNixyNixyMjYKLQlsZAlyNiwwKHI2KQkJLyogZ2V0IHRoZSB2YWx1ZSBvZiBfU0RSMSAqLwotCW10c3ByCVNQUk5fU0RSMSxyNgkJCS8qIHNldCB0aGUgaHRhYiBsb2NhdGlvbiAgKi8KLTk4OiAKIAlMT0FEQUREUihyMywuc3RhcnRfaGVyZV9jb21tb24pCiAJU0VUX1JFR19UT19DT05TVChyNCwgTVNSX0tFUk5FTCkKIAltdHNwcglTUFJOX1NSUjAscjMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL2lvY3RsMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9jdGwzMi5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL2lvY3RsMzIuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9pb2N0bDMyLmMKaW5kZXggYmE0YTg5OS4uM2ZhNmE5MyAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaW9jdGwzMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW9jdGwzMi5jCkBAIC0xLDYgKzEsNiBAQAotLyogCisvKgogICogaW9jdGwzMi5jOiBDb252ZXJzaW9uIGJldHdlZW4gMzJiaXQgYW5kIDY0Yml0IG5hdGl2ZSBpb2N0bHMuCi0gKiAKKyAqCiAgKiBCYXNlZCBvbiBzcGFyYzY0IGlvY3RsMzIuYyBieToKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCAgSmFrdWIgSmVsaW5layAgKGpha3ViQHJlZGhhdC5jb20pCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKc2ltaWxhcml0eSBpbmRleCA3MCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvaXJxLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggODc0NzQ1OC4uNGI3OTQwNiAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNSwxMiArNSwxMiBAQAogICogICAgQ29weXJpZ2h0IChDKSAxOTkyIExpbnVzIFRvcnZhbGRzCiAgKiAgQWRhcHRlZCBmcm9tIGFyY2gvaTM4NiBieSBHYXJ5IFRob21hcwogICogICAgQ29weXJpZ2h0IChDKSAxOTk1LTE5OTYgR2FyeSBUaG9tYXMgKGdkdEBsaW51eHBwYy5vcmcpCi0gKiAgVXBkYXRlZCBhbmQgbW9kaWZpZWQgYnkgQ29ydCBEb3VnYW4gKGNvcnRAY3Mubm10LmVkdSkKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NiBDb3J0IERvdWdhbgorICogIFVwZGF0ZWQgYW5kIG1vZGlmaWVkIGJ5IENvcnQgRG91Z2FuIDxjb3J0QGZzbWxhYnMuY29tPgorICogICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDEgQ29ydCBEb3VnYW4KICAqICBBZGFwdGVkIGZvciBQb3dlciBNYWNpbnRvc2ggYnkgUGF1bCBNYWNrZXJyYXMKICAqICAgIENvcHlyaWdodCAoQykgMTk5NiBQYXVsIE1hY2tlcnJhcyAocGF1bHVzQGNzLmFudS5lZHUuYXUpCiAgKiAgQW1pZ2EvQVBVUyBjaGFuZ2VzIGJ5IEplc3BlciBTa292IChqc2tvdkBjeWdudXMuY28udWspLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgpAQCAtMjEsNiArMjEsMTQgQEAKICAqIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycwogICogc2hvdWxkbid0IHJlc3VsdCBpbiBhbnkgd2VpcmQgc3VycHJpc2VzLCBhbmQgaW5zdGFsbGluZyBuZXcgaGFuZGxlcnMKICAqIHNob3VsZCBiZSBlYXNpZXIuCisgKgorICogVGhlIE1QQzh4eCBoYXMgYW4gaW50ZXJydXB0IG1hc2sgaW4gdGhlIFNJVS4gIElmIGEgYml0IGlzIHNldCwgdGhlCisgKiBpbnRlcnJ1cHQgaXMgX2VuYWJsZWRfLiAgQXMgZXhwZWN0ZWQsIElSUTAgaXMgYml0IDAgaW4gdGhlIDMyLWJpdAorICogbWFzayByZWdpc3RlciAob2Ygd2hpY2ggb25seSAxNiBhcmUgZGVmaW5lZCksIGhlbmNlIHRoZSB3ZWlyZCBzaGlmdGluZworICogYW5kIGNvbXBsZW1lbnQgb2YgdGhlIGNhY2hlZF9pcnFfbWFzay4gIEkgd2FudCB0byBiZSBhYmxlIHRvIHN0dWZmCisgKiB0aGlzIHJpZ2h0IGludG8gdGhlIFNJVSBTTUFTSyByZWdpc3Rlci4KKyAqIE1hbnkgb2YgdGhlIHByZXAvY2hycCBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsIGNvbXBpbGVkIG9uIENPTkZJR184eHgKKyAqIHRvIHJlZHVjZSBjb2RlIHNwYWNlIGFuZCB1bmRlZmluZWQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KQEAgLTI5LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KQEAgLTQwLDkgKzQ5LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTIsMzUgKzY1LDU0IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KLQotI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiB2b2lkIGlTZXJpZXNfc21wX21lc3NhZ2VfcmVjdiggc3RydWN0IHB0X3JlZ3MgKiApOwogI2VuZGlmCiAKLWV4dGVybiBpcnFfZGVzY190IGlycV9kZXNjW05SX0lSUVNdOworc3RhdGljIGludCBwcGNfc3B1cmlvdXNfaW50ZXJydXB0czsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCitleHRlcm4gdm9pZCBpU2VyaWVzX3NtcF9tZXNzYWdlX3JlY3Yoc3RydWN0IHB0X3JlZ3MgKik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QUEMzMgorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQorCit1bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107CithdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CisKKyNpZmRlZiBDT05GSUdfVEFVX0lOVAorZXh0ZXJuIGludCB0YXVfaW5pdGlhbGl6ZWQ7CitleHRlcm4gaW50IHRhdV9pbnRlcnJ1cHRzKGludCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKK2V4dGVybiBhdG9taWNfdCBpcGlfcmVjdjsKK2V4dGVybiBhdG9taWNfdCBpcGlfc2VudDsKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworCisjaWZkZWYgQ09ORklHX1BQQzY0CiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIAogaW50IGRpc3RyaWJ1dGVfaXJxcyA9IDE7CiBpbnQgX19pcnFfb2Zmc2V0X3ZhbHVlOwotaW50IHBwY19zcHVyaW91c19pbnRlcnJ1cHRzOwogdTY0IHBwYzY0X2ludGVycnVwdF9jb250cm9sbGVyOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiBpbnQgc2hvd19pbnRlcnJ1cHRzKHN0cnVjdCBzZXFfZmlsZSAqcCwgdm9pZCAqdikKIHsKLQlpbnQgaSA9ICoobG9mZl90ICopIHYsIGo7Ci0Jc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKKwlpbnQgaSA9ICoobG9mZl90ICopdiwgajsKKwlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJaXJxX2Rlc2NfdCAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOwotCQlmb3IgKGo9MDsgajxOUl9DUFVTOyBqKyspIHsKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsaik7Ci0JCX0KKwkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIAl9CiAKQEAgLTkyLDI2ICsxMjQsNDEgQEAKIAkJCWdvdG8gc2tpcDsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKICNpZmRlZiBDT05GSUdfU01QCi0JCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspIHsKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwotCQl9CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOwogI2Vsc2UKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAJCWlmIChkZXNjLT5oYW5kbGVyKQotCQkJc2VxX3ByaW50ZihwLCAiICVzICIsIGRlc2MtPmhhbmRsZXItPnR5cGVuYW1lICk7CisJCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgZGVzYy0+aGFuZGxlci0+dHlwZW5hbWUpOwogCQllbHNlCi0JCQlzZXFfcHJpbnRmKHAsICIgIE5vbmUgICAgICAiKTsKKwkJCXNlcV9wdXRzKHAsICIgIE5vbmUgICAgICAiKTsKIAkJc2VxX3ByaW50ZihwLCAiJXMiLCAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSA/ICJMZXZlbCAiIDogIkVkZ2UgICIpOwotCQlzZXFfcHJpbnRmKHAsICIgICAgJXMiLGFjdGlvbi0+bmFtZSk7Ci0JCWZvciAoYWN0aW9uPWFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCisJCXNlcV9wcmludGYocCwgIiAgICAlcyIsIGFjdGlvbi0+bmFtZSk7CisJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKIAkJCXNlcV9wcmludGYocCwgIiwgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlzZXFfcHV0YyhwLCAnXG4nKTsKIHNraXA6CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykKKwl9IGVsc2UgaWYgKGkgPT0gTlJfSVJRUykgeworI2lmZGVmIENPTkZJR19QUEMzMgorI2lmZGVmIENPTkZJR19UQVVfSU5UCisJCWlmICh0YXVfaW5pdGlhbGl6ZWQpeworCQkJc2VxX3B1dHMocCwgIlRBVTogIik7CisJCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQorCQkJCWlmIChjcHVfb25saW5lKGopKQorCQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIHRhdV9pbnRlcnJ1cHRzKGopKTsKKwkJCXNlcV9wdXRzKHAsICIgIFBvd2VyUEMgICAgICAgICAgICAgVGhlcm1hbCBBc3Npc3QgKGNwdSB0ZW1wKVxuIik7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKKwkJLyogc2hvdWxkIHRoaXMgYmUgcGVyIHByb2Nlc3NvciBzZW5kL3JlY2VpdmU/ICovCisJCXNlcV9wcmludGYocCwgIklQSSAocmVjdi9zZW50KTogJTEwdS8ldVxuIiwKKwkJCQlhdG9taWNfcmVhZCgmaXBpX3JlY3YpLCBhdG9taWNfcmVhZCgmaXBpX3NlbnQpKTsKKyNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLwogCQlzZXFfcHJpbnRmKHAsICJCQUQ6ICUxMHVcbiIsIHBwY19zcHVyaW91c19pbnRlcnJ1cHRzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NCwxMjYgKzE5MSw2IEBACiB9CiAjZW5kaWYKIAotZXh0ZXJuIGludCBub2lycWRlYnVnOwotCi0vKgotICogRXZlbnR1YWxseSwgdGhpcyBzaG91bGQgdGFrZSBhbiBhcnJheSBvZiBpbnRlcnJ1cHRzIGFuZCBhbiBhcnJheSBzaXplCi0gKiBzbyBpdCBjYW4gZGlzcGF0Y2ggbXVsdGlwbGUgaW50ZXJydXB0cy4KLSAqLwotdm9pZCBwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpcnEpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpcnFfZGVzY190ICpkZXNjID0gZ2V0X2lycV9kZXNjKGlycSk7Ci0JaXJxcmV0dXJuX3QgYWN0aW9uX3JldDsKLSNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCi0Jc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOwotI2VuZGlmCi0KLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKLQotCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfUEVSX0NQVSkgewotCQkvKiBubyBsb2NraW5nIHJlcXVpcmVkIGZvciBDUFUtbG9jYWwgaW50ZXJydXB0czogKi8KLQkJYWNrX2lycShpcnEpOwotCQlhY3Rpb25fcmV0ID0gaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGRlc2MtPmFjdGlvbik7Ci0JCWRlc2MtPmhhbmRsZXItPmVuZChpcnEpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKLQlhY2tfaXJxKGlycSk7CQotCS8qCi0JICAgUkVQTEFZIGlzIHdoZW4gTGludXggcmVzZW5kcyBhbiBJUlEgdGhhdCB3YXMgZHJvcHBlZCBlYXJsaWVyCi0JICAgV0FJVElORyBpcyB1c2VkIGJ5IHByb2JlIHRvIG1hcmsgaXJxcyB0aGF0IGFyZSBiZWluZyB0ZXN0ZWQKLQkgICAqLwotCXN0YXR1cyA9IGRlc2MtPnN0YXR1cyAmIH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlzdGF0dXMgfD0gSVJRX1BFTkRJTkc7IC8qIHdlIF93YW50XyB0byBoYW5kbGUgaXQgKi8KLQotCS8qCi0JICogSWYgdGhlIElSUSBpcyBkaXNhYmxlZCBmb3Igd2hhdGV2ZXIgcmVhc29uLCB3ZSBjYW5ub3QKLQkgKiB1c2UgdGhlIGFjdGlvbiB3ZSBoYXZlLgotCSAqLwotCWFjdGlvbiA9IE5VTEw7Ci0JaWYgKGxpa2VseSghKHN0YXR1cyAmIChJUlFfRElTQUJMRUQgfCBJUlFfSU5QUk9HUkVTUykpKSkgewotCQlhY3Rpb24gPSBkZXNjLT5hY3Rpb247Ci0JCWlmICghYWN0aW9uIHx8ICFhY3Rpb24tPmhhbmRsZXIpIHsKLQkJCXBwY19zcHVyaW91c19pbnRlcnJ1cHRzKys7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVW5oYW5kbGVkIGludGVycnVwdCAleCwgZGlzYWJsZWRcbiIsIGlycSk7Ci0JCQkvKiBXZSBjYW4ndCBjYWxsIGRpc2FibGVfaXJxIGhlcmUsIGl0IHdvdWxkIGRlYWRsb2NrICovCi0JCQlpZiAoIWRlc2MtPmRlcHRoKQotCQkJCWRlc2MtPmRlcHRoID0gMTsKLQkJCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCQkvKiBUaGlzIGlzIG5vdCBhIHJlYWwgc3B1cnJpb3VzIGludGVycnVwdCwgd2UKLQkJCSAqIGhhdmUgdG8gZW9pIGl0LCBzbyB3ZSBqdW1wIHRvIG91dAotCQkJICovCi0JCQltYXNrX2lycShpcnEpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3RhdHVzICY9IH5JUlFfUEVORElORzsgLyogd2UgY29tbWl0IHRvIGhhbmRsaW5nICovCi0JCXN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsgLyogd2UgYXJlIGhhbmRsaW5nIGl0ICovCi0JfQotCWRlc2MtPnN0YXR1cyA9IHN0YXR1czsKLQotCS8qCi0JICogSWYgdGhlcmUgaXMgbm8gSVJRIGhhbmRsZXIgb3IgaXQgd2FzIGRpc2FibGVkLCBleGl0IGVhcmx5LgotCSAgIFNpbmNlIHdlIHNldCBQRU5ESU5HLCBpZiBhbm90aGVyIHByb2Nlc3NvciBpcyBoYW5kbGluZwotCSAgIGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoaXMgc2FtZSBpcnEsIHRoZSBvdGhlciBwcm9jZXNzb3IKLQkgICB3aWxsIHRha2UgY2FyZSBvZiBpdC4KLQkgKi8KLQlpZiAodW5saWtlbHkoIWFjdGlvbikpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBFZGdlIHRyaWdnZXJlZCBpbnRlcnJ1cHRzIG5lZWQgdG8gcmVtZW1iZXIKLQkgKiBwZW5kaW5nIGV2ZW50cy4KLQkgKiBUaGlzIGFwcGxpZXMgdG8gYW55IGh3IGludGVycnVwdHMgdGhhdCBhbGxvdyBhIHNlY29uZAotCSAqIGluc3RhbmNlIG9mIHRoZSBzYW1lIGlycSB0byBhcnJpdmUgd2hpbGUgd2UgYXJlIGluIGRvX0lSUQotCSAqIG9yIGluIHRoZSBoYW5kbGVyLiBCdXQgdGhlIGNvZGUgaGVyZSBvbmx5IGhhbmRsZXMgdGhlIF9zZWNvbmRfCi0JICogaW5zdGFuY2Ugb2YgdGhlIGlycSwgbm90IHRoZSB0aGlyZCBvciBmb3VydGguIFNvIGl0IGlzIG1vc3RseQotCSAqIHVzZWZ1bCBmb3IgaXJxIGhhcmR3YXJlIHRoYXQgZG9lcyBub3QgbWFzayBjbGVhbmx5IGluIGFuCi0JICogU01QIGVudmlyb25tZW50LgotCSAqLwotCWZvciAoOzspIHsKLQkJc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwotCi0jaWZkZWYgQ09ORklHX0lSUVNUQUNLUwotCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLwotCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKLQkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOwotCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKLQkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7Ci0JCQlpcnF0cC0+ZmxhZ3MgPSAwOwotCQkJYWN0aW9uX3JldCA9IGNhbGxfaGFuZGxlX0lSUV9ldmVudChpcnEsIHJlZ3MsIGFjdGlvbiwgaXJxdHApOwotCQkJaXJxdHAtPnRhc2sgPSBOVUxMOwotCQkJaWYgKGlycXRwLT5mbGFncykKLQkJCQlzZXRfYml0cyhpcnF0cC0+ZmxhZ3MsICZjdXJ0cC0+ZmxhZ3MpOwotCQl9IGVsc2UKLSNlbmRpZgotCQkJYWN0aW9uX3JldCA9IGhhbmRsZV9JUlFfZXZlbnQoaXJxLCByZWdzLCBhY3Rpb24pOwotCi0JCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7Ci0JCWlmICghbm9pcnFkZWJ1ZykKLQkJCW5vdGVfaW50ZXJydXB0KGlycSwgZGVzYywgYWN0aW9uX3JldCwgcmVncyk7Ci0JCWlmIChsaWtlbHkoIShkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpKQotCQkJYnJlYWs7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JfQotb3V0OgotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0lOUFJPR1JFU1M7Ci0JLyoKLQkgKiBUaGUgLT5lbmQoKSBoYW5kbGVyIGhhcyB0byBkZWFsIHdpdGggaW50ZXJydXB0cyB3aGljaCBnb3QKLQkgKiBkaXNhYmxlZCB3aGlsZSB0aGUgaGFuZGxlciB3YXMgcnVubmluZy4KLQkgKi8KLQlpZiAoZGVzYy0+aGFuZGxlcikgewotCQlpZiAoZGVzYy0+aGFuZGxlci0+ZW5kKQotCQkJZGVzYy0+aGFuZGxlci0+ZW5kKGlycSk7Ci0JCWVsc2UgaWYgKGRlc2MtPmhhbmRsZXItPmVuYWJsZSkKLQkJCWRlc2MtPmhhbmRsZXItPmVuYWJsZShpcnEpOwotCX0KLQlzcGluX3VubG9jaygmZGVzYy0+bG9jayk7Ci19Ci0KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKIHZvaWQgZG9fSVJRKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMzEwLDggKzIzNywxMSBAQAogdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGlycTsKKyNpZmRlZiBDT05GSUdfSVJRU1RBQ0tTCisJc3RydWN0IHRocmVhZF9pbmZvICpjdXJ0cCwgKmlycXRwOworI2VuZGlmCiAKLQlpcnFfZW50ZXIoKTsKKyAgICAgICAgaXJxX2VudGVyKCk7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVwogCS8qIERlYnVnZ2luZyBjaGVjayBmb3Igc3RhY2sgb3ZlcmZsb3c6IGlzIHRoZXJlIGxlc3MgdGhhbiAyS0IgZnJlZT8gKi8KQEAgLTMyOCwyMCArMjU4LDQ0IEBACiAJfQogI2VuZGlmCiAKKwkvKgorCSAqIEV2ZXJ5IHBsYXRmb3JtIGlzIHJlcXVpcmVkIHRvIGltcGxlbWVudCBwcGNfbWQuZ2V0X2lycS4KKwkgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHJldHVybiBhbiBpcnEgbnVtYmVyIG9yIC0xIHRvCisJICogaW5kaWNhdGUgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZy4KKwkgKiBUaGUgdmFsdWUgLTIgaXMgZm9yIGJ1Z2d5IGhhcmR3YXJlIGFuZCBtZWFucyB0aGF0IHRoaXMgSVJRCisJICogaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkLiAtLSBUb20KKwkgKi8KIAlpcnEgPSBwcGNfbWQuZ2V0X2lycShyZWdzKTsKIAotCWlmIChpcnEgPj0gMCkKLQkJcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHJlZ3MsIGlycSk7Ci0JZWxzZQotCQkvKiBUaGF0J3Mgbm90IFNNUCBzYWZlIC4uLiBidXQgd2hvIGNhcmVzID8gKi8KLQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKLQotCWlycV9leGl0KCk7CisJaWYgKGlycSA+PSAwKSB7CisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLworCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOworCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKKwkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CisJCQlpcnF0cC0+ZmxhZ3MgPSAwOworCQkJY2FsbF9fX2RvX0lSUShpcnEsIHJlZ3MsIGlycXRwKTsKKwkJCWlycXRwLT50YXNrID0gTlVMTDsKKwkJCWlmIChpcnF0cC0+ZmxhZ3MpCisJCQkJc2V0X2JpdHMoaXJxdHAtPmZsYWdzLCAmY3VydHAtPmZsYWdzKTsKKwkJfSBlbHNlCisjZW5kaWYKKwkJCV9fZG9fSVJRKGlycSwgcmVncyk7CisJfSBlbHNlCisjaWZkZWYgQ09ORklHX1BQQzMyCisJCWlmIChpcnEgIT0gLTIpCisjZW5kaWYKKwkJCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLworCQkJcHBjX3NwdXJpb3VzX2ludGVycnVwdHMrKzsKKyAgICAgICAgaXJxX2V4aXQoKTsKIH0KKwogI2VuZGlmCS8qIENPTkZJR19QUENfSVNFUklFUyAqLwogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQogeworI2lmZGVmIENPTkZJR19QUEM2NAogCXN0YXRpYyBpbnQgb25jZSA9IDA7CiAKIAlpZiAob25jZSkKQEAgLTM0OSwxMCArMzAzLDE0IEBACiAKIAlvbmNlKys7CiAKKyNlbmRpZgogCXBwY19tZC5pbml0X0lSUSgpOworI2lmZGVmIENPTkZJR19QUEM2NAogCWlycV9jdHhfaW5pdCgpOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKICNpZm5kZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAvKgogICogVmlydHVhbCBJUlEgbWFwcGluZyBjb2RlLCB1c2VkIG9uIHN5c3RlbXMgd2l0aCBYSUNTIGludGVycnVwdCBjb250cm9sbGVycy4KQEAgLTUxNywzICs0NzUsNCBAQAogfQogCiBfX3NldHVwKCJub2lycWRpc3RyaWIiLCBzZXR1cF9ub2lycWRpc3RyaWIpOworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvbHBhcmNmZy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvbHBhcmNmZy5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYwppbmRleCAzZTdiMmYyLi4xYjNiYThhIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9scGFyY2ZnLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9scGFyY2ZnLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+CiAKICNkZWZpbmUgTU9EVUxFX1ZFUlMgIjEuNiIKICNkZWZpbmUgTU9EVUxFX05BTUUgImxwYXJjZmciCkBAIC00Miw3ICs0Myw3IEBACiAvKiAjZGVmaW5lIExQQVJDRkdfREVCVUcgKi8KIAogLyogZmluZCBhIGJldHRlciBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbi4uLiAqLwotdm9pZCBsb2dfcGxwYXJfaGNhbGxfcmV0dXJuKHVuc2lnbmVkIGxvbmcgcmMsIGNoYXIgKnRhZykKK3N0YXRpYyB2b2lkIGxvZ19wbHBhcl9oY2FsbF9yZXR1cm4odW5zaWduZWQgbG9uZyByYywgY2hhciAqdGFnKQogewogCWlmIChyYyA9PSAwKQkJLyogc3VjY2VzcywgcmV0dXJuICovCiAJCXJldHVybjsKQEAgLTk2LDcgKzk3LDcgQEAKIAogI2RlZmluZSBscGFyY2ZnX3dyaXRlIE5VTEwKIAotLyogCisvKgogICogTWV0aG9kcyB1c2VkIHRvIGZldGNoIExQQVIgZGF0YSB3aGVuIHJ1bm5pbmcgb24gYW4gaVNlcmllcyBwbGF0Zm9ybS4KICAqLwogc3RhdGljIGludCBscGFyY2ZnX2RhdGEoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtMTY4LDcgKzE2OSw3IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKICNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVMKLS8qIAorLyoKICAqIE1ldGhvZHMgdXNlZCB0byBmZXRjaCBMUEFSIGRhdGEgd2hlbiBydW5uaW5nIG9uIGEgcFNlcmllcyBwbGF0Zm9ybS4KICAqLwogCkBAIC0xNzcsNyArMTc4LDcgQEAKICAqICBlbnRpdGxlZF9jYXBhY2l0eSx1bmFsbG9jYXRlZF9jYXBhY2l0eSwKICAqICBhZ2dyZWdhdGlvbiwgcmVzb3VyY2VfY2FwYWJpbGl0eSkuCiAgKgotICogIFI0ID0gRW50aXRsZWQgUHJvY2Vzc29yIENhcGFjaXR5IFBlcmNlbnRhZ2UuIAorICogIFI0ID0gRW50aXRsZWQgUHJvY2Vzc29yIENhcGFjaXR5IFBlcmNlbnRhZ2UuCiAgKiAgUjUgPSBVbmFsbG9jYXRlZCBQcm9jZXNzb3IgQ2FwYWNpdHkgUGVyY2VudGFnZS4KICAqICBSNiAoQUFCQkNDRERFRUZGR0dISCkuCiAgKiAgICAgIFhYWFggLSByZXNlcnZlZCAoMCkKQEAgLTE5MCw3ICsxOTEsNyBAQAogICogICAgICAgICAgWFggLSB2YXJpYWJsZSBwcm9jZXNzb3IgQ2FwYWNpdHkgV2VpZ2h0CiAgKiAgICAgICAgICAgIFhYIC0gVW5hbGxvY2F0ZWQgVmFyaWFibGUgUHJvY2Vzc29yIENhcGFjaXR5IFdlaWdodC4KICAqICAgICAgICAgICAgICBYWFhYIC0gQWN0aXZlIHByb2Nlc3NvcnMgaW4gUGh5c2ljYWwgUHJvY2Vzc29yIFBvb2wuCi0gKiAgICAgICAgICAgICAgICAgIFhYWFggIC0gUHJvY2Vzc29ycyBhY3RpdmUgb24gcGxhdGZvcm0uIAorICogICAgICAgICAgICAgICAgICBYWFhYICAtIFByb2Nlc3NvcnMgYWN0aXZlIG9uIHBsYXRmb3JtLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGhfZ2V0X3BwcCh1bnNpZ25lZCBsb25nICplbnRpdGxlZCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKnVuYWxsb2NhdGVkLApAQCAtMjEyLDExICsyMTMsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGR1bW15OwogCXJjID0gcGxwYXJfaGNhbGwoSF9QSUMsIDAsIDAsIDAsIDAsIHBvb2xfaWRsZV90aW1lLCBudW1fcHJvY3MsICZkdW1teSk7CiAKLQlsb2dfcGxwYXJfaGNhbGxfcmV0dXJuKHJjLCAiSF9QSUMiKTsKKwlpZiAocmMgIT0gSF9BdXRob3JpdHkpCisJCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX1BJQyIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcHVycih2b2lkKTsKLQogLyogVHJhY2sgc3VtIG9mIGFsbCBwdXJycyBhY3Jvc3MgYWxsIHByb2Nlc3NvcnMuIFRoaXMgaXMgdXNlZCB0byBmdXJ0aGVyICovCiAvKiBjYWxjdWxhdGUgdXNhZ2UgdmFsdWVzIGJ5IGRpZmZlcmVudCBhcHBsaWNhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICovCiAKQEAgLTI3Myw3ICsyNzMsNyBAQAogCQlpZiAoIXdvcmtidWZmZXIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXMgJXMga21hbGxvYyBmYWlsdXJlIGF0IGxpbmUgJWQgXG4iLAogCQkJICAgICAgIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKLQkJCWtmcmVlKGxvY2FsX2J1ZmZlcik7CQkJCisJCQlrZnJlZShsb2NhbF9idWZmZXIpOwogCQkJcmV0dXJuOwogCQl9CiAjaWZkZWYgTFBBUkNGR19ERUJVRwpAQCAtMzE4LDggKzMxOCw2IEBACiAJa2ZyZWUobG9jYWxfYnVmZmVyKTsKIH0KIAotc3RhdGljIGludCBscGFyY2ZnX2NvdW50X2FjdGl2ZV9wcm9jZXNzb3JzKHZvaWQpOwotCiAvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGluIHRoZSBzeXN0ZW0uCiAgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRocm91Z2ggdGhlIGRldmljZSB0cmVlIGFuZCBjb3VudHMKICAqIHRoZSB2aXJ0dWFsIHByb2Nlc3NvcnMsIHRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aHJlYWRzLgpAQCAtMzcxLDcgKzM2OSw3IEBACiAJbHJkcnAgPSAoaW50ICopZ2V0X3Byb3BlcnR5KHJ0YXNfbm9kZSwgImlibSxscmRyLWNhcGFjaXR5IiwgTlVMTCk7CiAKIAlpZiAobHJkcnAgPT0gTlVMTCkgewotCQlwYXJ0aXRpb25fcG90ZW50aWFsX3Byb2Nlc3NvcnMgPSBzeXN0ZW1jZmctPnByb2Nlc3NvckNvdW50OworCQlwYXJ0aXRpb25fcG90ZW50aWFsX3Byb2Nlc3NvcnMgPSB2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50OwogCX0gZWxzZSB7CiAJCXBhcnRpdGlvbl9wb3RlbnRpYWxfcHJvY2Vzc29ycyA9ICoobHJkcnAgKyA0KTsKIAl9CkBAIC01NDcsNyArNTQ1LDcgQEAKIAkJcmV0dmFsID0gLUVJTzsKIAl9CiAKLSAgICAgIG91dDoKK291dDoKIAlrZnJlZShrYnVmKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNTYwLDEwICs1NTgsMTAgQEAKIH0KIAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscGFyY2ZnX2ZvcHMgPSB7Ci0gICAgICAub3duZXIJPSBUSElTX01PRFVMRSwKLSAgICAgIC5yZWFkCT0gc2VxX3JlYWQsCi0gICAgICAub3Blbgk9IGxwYXJjZmdfb3BlbiwKLSAgICAgIC5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5vcGVuCQk9IGxwYXJjZmdfb3BlbiwKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogaW50IF9faW5pdCBscGFyY2ZnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY18zMi5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKaW5kZXggM2JlZGI1My4uZjZkODRhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzMyLlMKQEAgLTUxOSw3ICs1MTksNyBAQAogICoKICAqIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCiAgKi8KLV9HTE9CQUwoZmx1c2hfaWNhY2hlX3JhbmdlKQorX0dMT0JBTChfX2ZsdXNoX2ljYWNoZV9yYW5nZSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmxyCQkJCS8qIGZvciA2MDEsIGRvIG5vdGhpbmcgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NQTElUX0lEX0NBQ0hFKQpAQCAtNjA3LDI3ICs2MDcsNiBAQAogCXN5bmMJCQkJLyogd2FpdCBmb3IgZGNiaSdzIHRvIGdldCB0byByYW0gKi8KIAlibHIKIAotI2lmZGVmIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUKLS8qCi0gKiA0MHggY29yZXMgaGF2ZSA4SyBvciAxNksgZGNhY2hlIGFuZCAzMiBieXRlIGxpbmUgc2l6ZS4KLSAqIDQ0eCBoYXMgYSAzMksgZGNhY2hlIGFuZCAzMiBieXRlIGxpbmUgc2l6ZS4KLSAqIDh4eCBoYXMgMSwgMiwgNCwgOEsgdmFyaWFudHMuCi0gKiBGb3Igbm93LCBjb3ZlciB0aGUgd29yc3QgY2FzZSBvZiB0aGUgNDR4LgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBleHRlcm5hbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICovCi0jZGVmaW5lIENBQ0hFX05XQVlTCTY0Ci0jZGVmaW5lIENBQ0hFX05MSU5FUwkxNgotCi1fR0xPQkFMKGZsdXNoX2RjYWNoZV9hbGwpCi0JbGkJcjQsICgyICogQ0FDSEVfTldBWVMgKiBDQUNIRV9OTElORVMpCi0JbXRjdHIJcjQKLQlsaXMgICAgIHI1LCBLRVJORUxCQVNFQGgKLTE6CWx3eglyMywgMChyNSkJCS8qIExvYWQgb25lIHdvcmQgZnJvbSBldmVyeSBsaW5lICovCi0JYWRkaQlyNSwgcjUsIEwxX0NBQ0hFX0JZVEVTCi0JYmRueiAgICAxYgotCWJscgotI2VuZGlmIC8qIENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KLQogLyoKICAqIEZsdXNoIGEgcGFydGljdWxhciBwYWdlIGZyb20gdGhlIGRhdGEgY2FjaGUgdG8gUkFNLgogICogTm90ZTogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZG9lcyAqbm90KgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwppbmRleCBhZTE0MzNkLi5hZTQ4YTAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2NfNjQuUwpAQCAtODksMTIgKzg5LDEyIEBACiAJbXRscglyMAogCWJscgogCi1fR0xPQkFMKGNhbGxfaGFuZGxlX0lSUV9ldmVudCkKK19HTE9CQUwoY2FsbF9fX2RvX0lSUSkKIAltZmxyCXIwCiAJc3RkCXIwLDE2KHIxKQotCXN0ZHUJcjEsVEhSRUFEX1NJWkUtMTEyKHI2KQotCW1yCXIxLHI2Ci0JYmwJLmhhbmRsZV9JUlFfZXZlbnQKKwlzdGR1CXIxLFRIUkVBRF9TSVpFLTExMihyNSkKKwltcglyMSxyNQorCWJsCS5fX2RvX0lSUQogCWxkCXIxLDAocjEpCiAJbGQJcjAsMTYocjEpCiAJbXRscglyMApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcGFjYURhdGEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3BhY2FEYXRhLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IDMxMzNjNzIuLmE3YjY4ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3BhY2FEYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTE1LDI0ICsxNSwxNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9xdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAKLXN0YXRpYyB1bmlvbiB7Ci0Jc3RydWN0IHN5c3RlbWNmZwlkYXRhOwotCXU4CQkJcGFnZVtQQUdFX1NJWkVdOwotfSBzeXN0ZW1jZmdfc3RvcmUgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnBhZ2UuYWxpZ25lZCIpKSk7Ci1zdHJ1Y3Qgc3lzdGVtY2ZnICpzeXN0ZW1jZmcgPSAmc3lzdGVtY2ZnX3N0b3JlLmRhdGE7Ci1FWFBPUlRfU1lNQk9MKHN5c3RlbWNmZyk7Ci0KIAogLyogVGhpcyBzeW1ib2wgaXMgcHJvdmlkZWQgYnkgdGhlIGxpbmtlciAtIGxldCBpdCBmaWxsIGluIHRoZSBwYWNhCiAgKiBmaWVsZCBjb3JyZWN0bHkgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fdG9jX3N0YXJ0OwogCi0vKiBUaGUgUGFjYSBpcyBhbiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgcHJvY2Vzc29yLiAgRWFjaCBjb250YWlucyBhbiAKKy8qIFRoZSBQYWNhIGlzIGFuIGFycmF5IHdpdGggb25lIGVudHJ5IHBlciBwcm9jZXNzb3IuICBFYWNoIGNvbnRhaW5zIGFuCiAgKiBscHBhY2EsIHdoaWNoIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBzaGFyZWQgYmV0d2VlbiB0aGUKICAqIGh5cGVydmlzb3IgYW5kIExpbnV4LiAgRWFjaCBhbHNvIGNvbnRhaW5zIGFuIEl0THBSZWdTYXZlIGFyZWEgd2hpY2gKICAqIGlzIHVzZWQgYnkgdGhlIGh5cGVydmlzb3IgdG8gc2F2ZSByZWdpc3RlcnMuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwppbmRleCA0N2Q2ZjdlLi41ZGNmNGJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYnRleHQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAKICNpZmRlZiAgQ09ORklHXzh4eAogI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgpAQCAtNTYsNyArNTcsNiBAQAogZXh0ZXJuIHZvaWQgYWxpZ25tZW50X2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBwcm9ncmFtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzaW5nbGVfc3RlcF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIGludCBkb19zaWduYWwoc2lnc2V0X3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBleHRlcm4gaW50IHBtYWNfbmV3d29ybGQ7CiBleHRlcm4gaW50IHN5c19zaWdyZXR1cm4oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCkBAIC0xODgsOSArMTg4LDYgQEAKIEVYUE9SVF9TWU1CT0woY3VkYV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woY3VkYV9wb2xsKTsKICNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTVVMVElQTEFURk9STSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCi1FWFBPUlRfU1lNQk9MKF9tYWNoaW5lKTsKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QUENfUE1BQwogRVhQT1JUX1NZTUJPTChzeXNfY3RybGVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3BwYzY0LmMKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvcHJvY19wcGM2NC5jCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Byb2NfcHBjNjQuYwppbmRleCAyNGU5NTVlLi43YmE0MmE0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jX3BwYzY0LmMKQEAgLTEsMTggKzEsMTYgQEAKIC8qCi0gKiBhcmNoL3BwYzY0L2tlcm5lbC9wcm9jX3BwYzY0LmMKLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWlrZSBDb3JyaWdhbiAmIERhdmUgRW5nZWJyZXRzZW4gSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yNSw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgorI2luY2x1ZGUgPGFzbS92ZHNvX2RhdGFwYWdlLmg+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/IGxvb3AgKi8KKwlibmUtCTFiCisJeG9yCXIwLHI4LHI4CQkvKiBjcmVhdGUgZGVwZW5kZW5jeSAqLworCWFkZAlyOSxyOSxyMAorCisJLyogTG9hZCBvcmlnIHN0YW1wIChvZmZzZXQgdG8gVEIpICovCisJbHd6CXI1LENGR19UQl9PUklHX1NUQU1QKHI5KQorCWx3eglyNiwoQ0ZHX1RCX09SSUdfU1RBTVArNCkocjkpCisKKwkvKiBHZXQgYSBzdGFibGUgVEIgdmFsdWUgKi8KKzI6CW1mdGJ1CXIzCisJbWZ0YmwJcjQKKwltZnRidQlyMAorCWNtcGwJY3IwLHIzLHIwCisJYm5lLQkyYgorCisJLyogU3Vic3RyYWN0IHRiIG9yaWcgc3RhbXAuIElmIHRoZSBoaWdoIHBhcnQgaXMgbm9uLXplcm8sIHdlIGp1bXAgdG8KKwkgKiB0aGUgc2xvdyBwYXRoIHdoaWNoIGNhbGwgdGhlIHN5c2NhbGwuCisJICogSWYgaXQncyBvaywgdGhlbiB3ZSBoYXZlIG91ciAzMiBiaXRzIHRiX3RpY2tzIHZhbHVlIGluIHI3CisJICovCisJc3ViZmMJcjcscjYscjQKKwlzdWJmZS4JcjAscjUscjMKKwlibmUtCTNmCisKKwkvKiBMb2FkIHNjYWxlIGZhY3RvciAmIGRvIG11bHRpcGxpY2F0aW9uICovCisJbHd6CXI1LENGR19UQl9UT19YUyhyOSkJLyogbG9hZCB2YWx1ZXMgKi8KKwlsd3oJcjYsKENGR19UQl9UT19YUys0KShyOSkKKwltdWxod3UJcjQscjcscjUKKwltdWxod3UJcjYscjcscjYKKwltdWxsdwlyMCxyNyxyNQorCWFkZGMJcjYscjYscjAKKworCS8qIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgdGhlIHNjYWxlZCB4c2VjIHZhbHVlIGluIHI0ICsgWEVSOkNBCisJICogd2UgbG9hZCAmIGFkZCB0aGUgc3RhbXAgc2luY2UgZXBvY2gKKwkgKi8KKwlsd3oJcjUsQ0ZHX1NUQU1QX1hTRUMocjkpCisJbHd6CXI2LChDRkdfU1RBTVBfWFNFQys0KShyOSkKKwlhZGRlCXI0LHI0LHI2CisJYWRkemUJcjMscjUKKworCS8qIFdlIG5vdyBoYXZlIG91ciByZXN1bHQgaW4gcjMscjQuIFdlIGNyZWF0ZSBhIGZha2UgZGVwZW5kZW5jeQorCSAqIG9uIHRoYXQgcmVzdWx0IGFuZCByZS1jaGVjayB0aGUgY291bnRlcgorCSAqLworCW9yCXI2LHI0LHIzCisJeG9yCXIwLHI2LHI2CisJYWRkCXI5LHI5LHIwCisjaWZkZWYgQ09ORklHX1BQQzY0CisJbHd6CXIwLChDRkdfVEJfVVBEQVRFX0NPVU5UKzQpKHI5KQorI2Vsc2UKKwlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQpKHI5KQorI2VuZGlmCisgICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQkxYgorCisJLyogV2FybmluZyAhIFRoZSBjYWxsZXIgZXhwZWN0cyBDUjpFUSB0byBiZSBzZXQgdG8gaW5kaWNhdGUgYQorCSAqIHN1Y2Nlc3NmdWwgY2FsY3VsYXRpb24gKHNvIGl0IHdvbid0IGZhbGxiYWNrIHRvIHRoZSBzeXNjYWxsCisJICogbWV0aG9kKS4gV2UgaGF2ZSBvdmVycmlkZW4gdGhhdCBDUiBiaXQgaW4gdGhlIGNvdW50ZXIgY2hlY2ssCisJICogYnV0IGZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBfaXNfIENSOkVRIHNldCwgc28KKwkgKiB3ZSBjYW4gZXhpdCBzYWZlbHkgaGVyZS4gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGJlIGNhcmVmdWwKKwkgKiBvZiB0aGF0IHNpZGUgZWZmZWN0LgorCSAqLworMzoJYmxyCisgIC5jZmlfZW5kcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL25vdGUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL25vdGUuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvbm90ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3NpZ3RyYW1wLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9zaWd0cmFtcC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwppbmRleCA2Zjg3YTkxLi5mNGJhZDcyIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogewogICBWRFNPX1ZFUlNJT05fU1RSSU5HIHsKICAgICBnbG9iYWw6Ci0JX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCBpdCAqLworCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgKi8KIAlfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXA7CiAJX19rZXJuZWxfZ2V0dGltZW9mZGF5OworCV9fa2VybmVsX2Nsb2NrX2dldHRpbWU7CisJX19rZXJuZWxfY2xvY2tfZ2V0cmVzOworCV9fa2VybmVsX2dldF90YmZyZXE7CiAJX19rZXJuZWxfc3luY19kaWNhY2hlOwogCV9fa2VybmVsX3N5bmNfZGljYWNoZV9wNTsKIAlfX2tlcm5lbF9zaWd0cmFtcDMyOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCmluZGV4IDc2Y2EyOGUuLjU1NmYwY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi92ZHNvMzJfd3JhcHBlci5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMl93cmFwcGVyLlMKQEAgLTYsNyArNiw3IEBACiAJLmdsb2JsIHZkc28zMl9zdGFydCwgdmRzbzMyX2VuZAogCS5iYWxpZ24gUEFHRV9TSVpFCiB2ZHNvMzJfc3RhcnQ6Ci0JLmluY2JpbiAiYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL3Zkc28zMi5zbyIKKwkuaW5jYmluICJhcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIuc28iCiAJLmJhbGlnbiBQQUdFX1NJWkUKIHZkc28zMl9lbmQ6CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvY2FjaGVmbHVzaC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9jYWNoZWZsdXNoLlMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpzaW1pbGFyaXR5IGluZGV4IDgzJQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUwppbmRleCBlZDZlNTk5Li5lNjdlZGEwIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvZGF0YXBhZ2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9kYXRhcGFnZS5TCkBAIC02NiwzICs2NiwxOSBAQAogCWJscgogICAuY2ZpX2VuZHByb2MKIFZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldF9zeXNjYWxsX21hcCkKKworCisvKgorICogdm9pZCB1bnNpZ25lZCBsb25nICBfX2tlcm5lbF9nZXRfdGJmcmVxKHZvaWQpOworICoKKyAqIHJldHVybnMgdGhlIHRpbWViYXNlIGZyZXF1ZW5jeSBpbiBIWgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldF90YmZyZXEpCisgIC5jZmlfc3RhcnRwcm9jCisJbWZscglyMTIKKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKwlibAlWX0xPQ0FMX0ZVTkMoX19nZXRfZGF0YXBhZ2UpCisJbGQJcjMsQ0ZHX1RCX1RJQ0tTX1BFUl9TRUMocjMpCisJbXRscglyMTIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXRfdGJmcmVxKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzcxYzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW1lb2ZkYXkoKSBmb3IgNjQgYml0cyBwcm9jZXNzZXMgaW4gYQorICogcHBjNjQga2VybmVsIGZvciB1c2UgaW4gdGhlIHZEU08KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobXVpZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksCisgKiAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS92ZHNvLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisJLnRleHQKKy8qCisgKiBFeGFjdCBwcm90b3R5cGUgb2YgZ2V0dGltZW9mZGF5CisgKgorICogaW50IF9fa2VybmVsX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHN0cnVjdCB0aW1lem9uZSAqdHopOworICoKKyAqLworVl9GVU5DVElPTl9CRUdJTihfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCisgIC5jZmlfc3RhcnRwcm9jCisJbWZscglyMTIKKyAgLmNmaV9yZWdpc3RlciBscixyMTIKKworCW1yCXIxMSxyMwkJCS8qIHIxMSBob2xkcyB0diAqLworCW1yCXIxMCxyNAkJCS8qIHIxMCBob2xkcyB0eiAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJLyogZ2V0IGRhdGEgcGFnZSAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisJbGlzICAgICByNywxNQkJCS8qIHI3ID0gMTAwMDAwMCA9IFVTRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMTY5NjAKKwlybGRpY2wgIHI1LHI0LDQ0LDIwCQkvKiByNSA9IHNlYyA9IHhzZWMgLyBYU0VDX1BFUl9TRUMgKi8KKwlybGRpY3IgIHI2LHI1LDIwLDQzCQkvKiByNiA9IHNlYyAqIFhTRUNfUEVSX1NFQyAqLworCXN0ZAlyNSxUVkFMNjRfVFZfU0VDKHIxMSkJLyogc3RvcmUgc2VjIGluIHR2ICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiB1c2VjID0gKHhzZWMgKiBVU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjAscjAsNDQsMjAKKwljbXBsZGkJY3IwLHIxMCwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCisJc3RkCXIwLFRWQUw2NF9UVl9VU0VDKHIxMSkJLyogc3RvcmUgdXNlYyBpbiB0diAqLworCWJlcQkxZgorCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyMykvKiBmaWxsIHR6ICovCisJbHd6CXI1LENGR19UWl9EU1RUSU1FKHIzKQorCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMCkKKwlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTApCisxOgltdGxyCXIxMgorCWxpCXIzLDAJCQkvKiBhbHdheXMgc3VjY2VzcyAqLworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKKworCisvKgorICogRXhhY3QgcHJvdG90eXBlIG9mIGNsb2NrX2dldHRpbWUoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisgIC5jZmlfc3RhcnRwcm9jCisJLyogQ2hlY2sgZm9yIHN1cHBvcnRlZCBjbG9jayBJRHMgKi8KKwljbXB3aQljcjAscjMsQ0xPQ0tfUkVBTFRJTUUKKwljbXB3aQljcjEscjMsQ0xPQ0tfTU9OT1RPTklDCisJY3JvcgljcjAsY3IwLGNyMQorCWJuZQljcjAsOTlmCisKKwltZmxyCXIxMgkJCS8qIHIxMiBzYXZlcyBsciAqLworICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgorCW1yCXIxMCxyMwkJCS8qIHIxMCBzYXZlcyBpZCAqLworCW1yCXIxMSxyNAkJCS8qIHIxMSBzYXZlcyB0cCAqLworCWJsCVZfTE9DQUxfRlVOQyhfX2dldF9kYXRhcGFnZSkJLyogZ2V0IGRhdGEgcGFnZSAqLworCWJlcQljcjEsNTBmCQkJLyogaWYgbW9ub3RvbmljIC0+IGp1bXAgdGhlcmUgKi8KKworCS8qCisJICogQ0xPQ0tfUkVBTFRJTUUKKwkgKi8KKworCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkvKiBnZXQgeHNlYyBmcm9tIHRiICYga2VybmVsICovCisKKwlsaXMgICAgIHI3LDB4M2I5YQkJLyogcjcgPSAxMDAwMDAwMDAwID0gTlNFQ19QRVJfU0VDICovCisJb3JpICAgICByNyxyNywweGNhMDAKKwlybGRpY2wgIHI1LHI0LDQ0LDIwCQkvKiByNSA9IHNlYyA9IHhzZWMgLyBYU0VDX1BFUl9TRUMgKi8KKwlybGRpY3IgIHI2LHI1LDIwLDQzCQkvKiByNiA9IHNlYyAqIFhTRUNfUEVSX1NFQyAqLworCXN0ZAlyNSxUU1BDNjRfVFZfU0VDKHIxMSkJLyogc3RvcmUgc2VjIGluIHR2ICovCisJc3ViZglyMCxyNixyNAkJLyogcjAgPSB4c2VjID0gKHhzZWMgLSByNikgKi8KKwltdWxsZCAgIHIwLHIwLHI3CQkvKiBuc2VjID0gKHhzZWMgKiBOU0VDX1BFUl9TRUMpIC8KKwkJCQkJICogWFNFQ19QRVJfU0VDCisJCQkJCSAqLworCXJsZGljbCAgcjAscjAsNDQsMjAKKwlzdGQJcjAsVFNQQzY0X1RWX05TRUMocjExKQkvKiBzdG9yZSBuc2VjIGluIHRwICovCisKKwltdGxyCXIxMgorCWxpCXIzLDAKKwlibHIKKworCS8qCisJICogQ0xPQ0tfTU9OT1RPTklDCisJICovCisKKzUwOglibAlWX0xPQ0FMX0ZVTkMoX19kb19nZXRfeHNlYykJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLworCisJbGlzICAgICByNywweDNiOWEJCS8qIHI3ID0gMTAwMDAwMDAwMCA9IE5TRUNfUEVSX1NFQyAqLworCW9yaSAgICAgcjcscjcsMHhjYTAwCisJcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCisJcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KKwlzdWJmCXIwLHI2LHI0CQkvKiByMCA9IHhzZWMgPSAoeHNlYyAtIHI2KSAqLworCW11bGxkICAgcjAscjAscjcJCS8qIG5zZWMgPSAoeHNlYyAqIE5TRUNfUEVSX1NFQykgLworCQkJCQkgKiBYU0VDX1BFUl9TRUMKKwkJCQkJICovCisJcmxkaWNsICByNixyMCw0NCwyMAorCisJLyogbm93IHdlIG11c3QgZml4dXAgdXNpbmcgd2FsbCB0byBtb25vdG9uaWMuIFdlIG5lZWQgdG8gc25hcHNob3QKKwkgKiB0aGF0IHZhbHVlIGFuZCBkbyB0aGUgY291bnRlciB0cmljayBhZ2Fpbi4gRm9ydHVuYXRlbHksIHdlIHN0aWxsCisJICogaGF2ZSB0aGUgY291bnRlciB2YWx1ZSBpbiByOCB0aGF0IHdhcyByZXR1cm5lZCBieSBfX2RvX2dldF94c2VjLgorCSAqIEF0IHRoaXMgcG9pbnQsIHI1LHI2IGNvbnRhaW4gb3VyIHNlYy9uc2VjIHZhbHVlcy4KKwkgKiBjYW4gYmUgdXNlZAorCSAqLworCisJbHd6CXI0LFdUT01fQ0xPQ0tfU0VDKHI5KQorCWx3eglyNyxXVE9NX0NMT0NLX05TRUMocjkpCisKKwkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHI0LHI3LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKKwkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKKwkgKi8KKwlvcglyOSxyNCxyNworCXhvcglyMCxyOSxyOQorCWFkZAlyMyxyMyxyMAorCWxkCXIwLENGR19UQl9VUERBVEVfQ09VTlQocjMpCisgICAgICAgIGNtcGxkICAgY3IwLHIwLHI4CQkvKiBjaGVjayBpZiB1cGRhdGVkICovCisJYm5lLQk1MGIKKworCS8qIENhbGN1bGF0ZSBhbmQgc3RvcmUgcmVzdWx0LiBOb3RlIHRoYXQgdGhpcyBtaW1taWNzIHRoZSBDIGNvZGUsCisJICogd2hpY2ggbWF5IGNhdXNlIGZ1bm55IHJlc3VsdHMgaWYgbnNlYyBnb2VzIG5lZ2F0aXZlLi4uIGlzIHRoYXQKKwkgKiBwb3NzaWJsZSBhdCBhbGwgPworCSAqLworCWFkZAlyNCxyNCxyNQorCWFkZAlyNyxyNyxyNgorCWxpcwlyOSxOU0VDX1BFUl9TRUNAaAorCW9yaQlyOSxyOSxOU0VDX1BFUl9TRUNAbAorCWNtcGxpCWNyMCxyNyxyOQorCWJsdAkxZgorCXN1YmYJcjcscjkscjcKKwlhZGRpCXI0LHI0LDEKKzE6CXN0ZAlyNCxUU1BDNjRfVFZfU0VDKHIxMSkKKwlzdGQJcjcsVFNQQzY0X1RWX05TRUMocjExKQorCisJbXRscglyMTIKKwlsaQlyMywwCisJYmxyCisKKwkvKgorCSAqIHN5c2NhbGwgZmFsbGJhY2sKKwkgKi8KKzk4OgorCW10bHIJcjEyCisJbXIJcjMscjEwCisJbXIJcjQscjExCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHRpbWUKKwlzYworCWJscgorICAuY2ZpX2VuZHByb2MKK1ZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2Nsb2NrX2dldHRpbWUpCisKKworLyoKKyAqIEV4YWN0IHByb3RvdHlwZSBvZiBjbG9ja19nZXRyZXMoKQorICoKKyAqIGludCBfX2tlcm5lbF9jbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcyk7CisgKgorICovCitWX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2Nsb2NrX2dldHJlcykKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBDaGVjayBmb3Igc3VwcG9ydGVkIGNsb2NrIElEcyAqLworCWNtcHdpCWNyMCxyMyxDTE9DS19SRUFMVElNRQorCWNtcHdpCWNyMSxyMyxDTE9DS19NT05PVE9OSUMKKwljcm9yCWNyMCxjcjAsY3IxCisJYm5lCWNyMCw5OWYKKworCWxpCXIzLDAKKwljbXBsaQljcjAscjQsMAorCWJlcWxyCisJbGlzCXI1LENMT0NLX1JFQUxUSU1FX1JFU0BoCisJb3JpCXI1LHI1LENMT0NLX1JFQUxUSU1FX1JFU0BsCisJc3RkCXIzLFRTUEM2NF9UVl9TRUMocjQpCisJc3RkCXI1LFRTUEM2NF9UVl9OU0VDKHI0KQorCWJscgorCisJLyoKKwkgKiBzeXNjYWxsIGZhbGxiYWNrCisJICovCis5OToKKwlsaQlyMCxfX05SX2Nsb2NrX2dldHJlcworCXNjCisJYmxyCisgIC5jZmlfZW5kcHJvYworVl9GVU5DVElPTl9FTkQoX19rZXJuZWxfY2xvY2tfZ2V0cmVzKQorCisKKy8qCisgKiBUaGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbWVvZmRheSgpLCBpdCByZXR1cm5zIHRoZSB4c2VjCisgKiB2YWx1ZSBpbiByNCBhbmQgZXhwZWN0cyB0aGUgZGF0YXBhZ2UgcHRyIChub24gY2xvYmJlcmVkKQorICogaW4gcjMuIGNsb2JiZXJzIHIwLHI0LHI1LHI2LHI3LHI4CisgKiBXaGVuIHJldHVybmluZywgcjggY29udGFpbnMgdGhlIGNvdW50ZXIgdmFsdWUgdGhhdCBjYW4gYmUgcmV1c2VkCisgKi8KK1ZfRlVOQ1RJT05fQkVHSU4oX19kb19nZXRfeHNlYykKKyAgLmNmaV9zdGFydHByb2MKKwkvKiBjaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMgKi8KKzE6CWxkCXI4LENGR19UQl9VUERBVEVfQ09VTlQocjMpCisJYW5kaS4JcjAscjQsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLworCWJuZS0JMWIKKwl4b3IJcjAscjQscjQJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCisJYWRkCXIzLHIzLHIwCisKKwkvKiBHZXQgVEIgJiBvZmZzZXQgaXQgKi8KKwltZnRiCXI3CisJbGQJcjksQ0ZHX1RCX09SSUdfU1RBTVAocjMpCisJc3ViZglyNyxyOSxyNworCisJLyogU2NhbGUgcmVzdWx0ICovCisJbGQJcjUsQ0ZHX1RCX1RPX1hTKHIzKQorCW11bGhkdQlyNyxyNyxyNQorCisJLyogQWRkIHN0YW1wIHNpbmNlIGVwb2NoICovCisJbGQJcjYsQ0ZHX1NUQU1QX1hTRUMocjMpCisJYWRkCXI0LHI2LHI3CisKKwl4b3IJcjAscjQscjQKKwlhZGQJcjMscjMscjAKKwlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQorICAgICAgICBjbXBsZCAgIGNyMCxyMCxyOAkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLworCWJuZS0JMWIKKwlibHIKKyAgLmNmaV9lbmRwcm9jCitWX0ZVTkNUSU9OX0VORChfX2RvX2dldF94c2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L25vdGUuUwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L25vdGUuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvbm90ZS5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvc2lndHJhbXAuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3NpZ3RyYW1wLlMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC9zaWd0cmFtcC5TCmRpZmYgLS1naXQgYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwppbmRleCA5Y2IyODE4Li40YmRmMjI0IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpAQCAtMTAyLDkgKzEwMiwxMiBAQAogewogICBWRFNPX1ZFUlNJT05fU1RSSU5HIHsKICAgICBnbG9iYWw6Ci0JX19rZXJuZWxfZGF0YXBhZ2Vfb2Zmc2V0OyAvKiBIYXMgdG8gYmUgdGhlcmUgZm9yIHRoZSBrZXJuZWwgdG8gZmluZCBpdCAqLworCV9fa2VybmVsX2RhdGFwYWdlX29mZnNldDsgLyogSGFzIHRvIGJlIHRoZXJlIGZvciB0aGUga2VybmVsIHRvIGZpbmQgKi8KIAlfX2tlcm5lbF9nZXRfc3lzY2FsbF9tYXA7CiAgICAgCV9fa2VybmVsX2dldHRpbWVvZmRheTsKKwlfX2tlcm5lbF9jbG9ja19nZXR0aW1lOworCV9fa2VybmVsX2Nsb2NrX2dldHJlczsKKwlfX2tlcm5lbF9nZXRfdGJmcmVxOwogCV9fa2VybmVsX3N5bmNfZGljYWNoZTsKIAlfX2tlcm5lbF9zeW5jX2RpY2FjaGVfcDU7CiAJX19rZXJuZWxfc2lndHJhbXBfcnQ2NDsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjRfd3JhcHBlci5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUwppbmRleCA3NzFjMjc0Li4wNTI5Y2I5IDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvNjQvdmRzbzY0X3dyYXBwZXIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjRfd3JhcHBlci5TCkBAIC02LDcgKzYsNyBAQAogCS5nbG9ibCB2ZHNvNjRfc3RhcnQsIHZkc282NF9lbmQKIAkuYmFsaWduIFBBR0VfU0laRQogdmRzbzY0X3N0YXJ0OgotCS5pbmNiaW4gImFyY2gvcHBjNjQva2VybmVsL3Zkc282NC92ZHNvNjQuc28iCisJLmluY2JpbiAiYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0LnNvIgogCS5iYWxpZ24gUEFHRV9TSVpFCiB2ZHNvNjRfZW5kOgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jIGIvYXJjaC9wb3dlcnBjL2xpYi9iaXRvcHMuYwppbmRleCBiNjdjZTMwLi5mNjhhZDcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2JpdG9wcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvYml0b3BzLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAl0bXAgPSAqcDsKIAogZm91bmRfZmlyc3Q6Ci0JdG1wICY9ICh+MFVMID4+ICg2NCAtIHNpemUpKTsKKwl0bXAgJj0gKH4wVUwgPj4gKEJJVFNfUEVSX0xPTkcgLSBzaXplKSk7CiAJaWYgKHRtcCA9PSAwVUwpCQkvKiBBcmUgYW55IGJpdHMgc2V0PyAqLwogCQlyZXR1cm4gcmVzdWx0ICsgc2l6ZTsJLyogTm9wZS4gKi8KIGZvdW5kX21pZGRsZToKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDIyZTQ3NDguLjcwNmU4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtODQsMTAgKzg0LDExIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBkYXJ0X3RhYmxlYmFzZTsKICNlbmRpZiAvKiBDT05GSUdfVTNfREFSVCAqLwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfU0RSMTsKK3N0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXTsKKwogaHB0ZV90ICpodGFiX2FkZHJlc3M7CiB1bnNpZ25lZCBsb25nIGh0YWJfaGFzaF9tYXNrOwotdW5zaWduZWQgbG9uZyBfU0RSMTsKLXN0cnVjdCBtbXVfcHNpemVfZGVmIG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFX0NPVU5UXTsKIGludCBtbXVfbGluZWFyX3BzaXplID0gTU1VX1BBR0VfNEs7CiBpbnQgbW11X3ZpcnR1YWxfcHNpemUgPSBNTVVfUEFHRV80SzsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCkBAIC0xNjUsNyArMTY2LDcgQEAKIAkJICogbm9ybWFsIGluc2VydCBjYWxsYmFjayBoZXJlLgogCQkgKi8KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLQkJaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gPT0gUExBVEZPUk1fSVNFUklFU19MUEFSKQorCQlpZiAoX21hY2hpbmUgPT0gUExBVEZPUk1fSVNFUklFU19MUEFSKQogCQkJcmV0ID0gaVNlcmllc19ocHRlX2luc2VydChocHRlZywgdmEsCiAJCQkJCQkgIHZpcnRfdG9fYWJzKHBhZGRyKSwKIAkJCQkJCSAgdG1wX21vZGUsCkBAIC0xNzQsNyArMTc1LDcgQEAKIAkJZWxzZQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTCi0JCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwkJaWYgKF9tYWNoaW5lICYgUExBVEZPUk1fTFBBUikKIAkJCXJldCA9IHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydChocHRlZywgdmEsCiAJCQkJCQkgICAgICAgdmlydF90b19hYnMocGFkZHIpLAogCQkJCQkJICAgICAgIHRtcF9tb2RlLApAQCAtMjkzLDcgKzI5NCw3IEBACiAJICogTm90IGluIHRoZSBkZXZpY2UtdHJlZSwgbGV0J3MgZmFsbGJhY2sgb24ga25vd24gc2l6ZQogCSAqIGxpc3QgZm9yIDE2TSBjYXBhYmxlIEdQICYgR1IKIAkgKi8KLQlpZiAoKHN5c3RlbWNmZy0+cGxhdGZvcm0gIT0gUExBVEZPUk1fSVNFUklFU19MUEFSKSAmJgorCWlmICgoX21hY2hpbmUgIT0gUExBVEZPUk1fSVNFUklFU19MUEFSKSAmJgogCSAgICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl8xNk1fUEFHRSkpCiAJCW1lbWNweShtbXVfcHNpemVfZGVmcywgbW11X3BzaXplX2RlZmF1bHRzX2dwLAogCQkgICAgICAgc2l6ZW9mKG1tdV9wc2l6ZV9kZWZhdWx0c19ncCkpOwpAQCAtMzY0LDcgKzM2NSw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBodGFiX2dldF90YWJsZV9zaXplKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBybmRfbWVtX3NpemUsIHB0ZWdfY291bnQ7CisJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZSwgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50OwogCiAJLyogSWYgaGFzaCBzaXplIGlzbid0IGFscmVhZHkgcHJvdmlkZWQgYnkgdGhlIHBsYXRmb3JtLCB3ZSB0cnkgdG8KIAkgKiByZXRyZWl2ZSBpdCBmcm9tIHRoZSBkZXZpY2UtdHJlZS4gSWYgaXQncyBub3QgdGhlcmUgbmVpdGhlciwgd2UKQEAgLTM3Niw4ICszNzcsOSBAQAogCQlyZXR1cm4gMVVMIDw8IHBwYzY0X3BmdF9zaXplOwogCiAJLyogcm91bmQgbWVtX3NpemUgdXAgdG8gbmV4dCBwb3dlciBvZiAyICovCi0Jcm5kX21lbV9zaXplID0gMVVMIDw8IF9faWxvZzIoc3lzdGVtY2ZnLT5waHlzaWNhbE1lbW9yeVNpemUpOwotCWlmIChybmRfbWVtX3NpemUgPCBzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSkKKwltZW1fc2l6ZSA9IGxtYl9waHlzX21lbV9zaXplKCk7CisJcm5kX21lbV9zaXplID0gMVVMIDw8IF9faWxvZzIobWVtX3NpemUpOworCWlmIChybmRfbWVtX3NpemUgPCBtZW1fc2l6ZSkKIAkJcm5kX21lbV9zaXplIDw8PSAxOwogCiAJLyogIyBwYWdlcyAvIDIgKi8KQEAgLTM4Niw2ICszODgsMTUgQEAKIAlyZXR1cm4gcHRlZ19jb3VudCA8PCA3OwogfQogCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCit2b2lkIGNyZWF0ZV9zZWN0aW9uX21hcHBpbmcodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJCUJVR19PTihodGFiX2JvbHRfbWFwcGluZyhzdGFydCwgZW5kLCBzdGFydCwKKwkJCV9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9DT0hFUkVOVCB8IFBQX1JXWFgsCisJCQltbXVfbGluZWFyX3BzaXplKSk7Cit9CisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCisKIHZvaWQgX19pbml0IGh0YWJfaW5pdGlhbGl6ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFibGUsIGh0YWJfc2l6ZV9ieXRlczsKQEAgLTQxMCw3ICs0MjEsNyBAQAogCiAJaHRhYl9oYXNoX21hc2sgPSBwdGVnX2NvdW50IC0gMTsKIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikgeworCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKIAkJLyogVXNpbmcgYSBoeXBlcnZpc29yIHdoaWNoIG93bnMgdGhlIGh0YWIgKi8KIAkJaHRhYl9hZGRyZXNzID0gTlVMTDsKIAkJX1NEUjEgPSAwOyAKQEAgLTQzMSw2ICs0NDIsOSBAQAogCiAJCS8qIEluaXRpYWxpemUgdGhlIEhQVCB3aXRoIG5vIGVudHJpZXMgKi8KIAkJbWVtc2V0KCh2b2lkICopdGFibGUsIDAsIGh0YWJfc2l6ZV9ieXRlcyk7CisKKwkJLyogU2V0IFNEUjEgKi8KKwkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7CiAJfQogCiAJbW9kZV9ydyA9IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9DT0hFUkVOVCB8IFBQX1JXWFg7CkBAIC01MDAsNiArNTE0LDEyIEBACiAjdW5kZWYgS0IKICN1bmRlZiBNQgogCit2b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KHZvaWQpCit7CisJaWYgKCFwbGF0Zm9ybV9pc19scGFyKCkpCisJCW10c3ByKFNQUk5fU0RSMSwgX1NEUjEpOworfQorCiAvKgogICogQ2FsbGVkIGJ5IGFzbSBoYXNodGFibGUuUyBmb3IgZG9pbmcgbGF6eSBpY2FjaGUgZmx1c2gKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKaW5kZXggNDYxMmE3OS4uN2Q0YjhiNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCkBAIC04NCw5ICs4NCw2IEBACiAvKiBYWFggc2hvdWxkIGJlIGluIGN1cnJlbnQuaCAgLS0gcGF1bHVzICovCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50X3NldFtOUl9DUFVTXTsKIAotY2hhciAqa2xpbWl0ID0gX2VuZDsKLXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5X25vZGU7Ci0KIGV4dGVybiBpbnQgaW5pdF9ib290bWVtX2RvbmU7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfNjQuYwppbmRleCBjZTk3NGM4Li4xMTM0ZjcwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaW5pdF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9pbml0XzY0LmMKQEAgLTIwLDYgKzIwLDggQEAKICAqCiAgKi8KIAorI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNjQsNiArNjYsMTIgQEAKICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgPGFzbS9pbWFsbG9jLmg+CiAKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoZm10KQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikKKyNlbmRpZgorCiAjaWYgUEdUQUJMRV9SQU5HRSA+IFVTRVJfVlNJRF9SQU5HRQogI3dhcm5pbmcgTGltaXRlZCB1c2VyIFZTSUQgcmFuZ2UgbWVhbnMgcGFnZXRhYmxlIHNwYWNlIGlzIHdhc3RlZAogI2VuZGlmCkBAIC03Miw4ICs4MCw2IEBACiAjd2FybmluZyBUQVNLX1NJWkUgaXMgc21hbGxlciB0aGFuIGl0IG5lZWRzIHRvIGJlLgogI2VuZGlmCiAKLXVuc2lnbmVkIGxvbmcga2xpbWl0ID0gKHVuc2lnbmVkIGxvbmcpX2VuZDsKLQogLyogbWF4IGFtb3VudCBvZiBSQU0gdG8gdXNlICovCiB1bnNpZ25lZCBsb25nIF9fbWF4X21lbW9yeTsKIApAQCAtMTg4LDE0ICsxOTQsMTQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUENfNjRLX1BBR0VTCi1zdGF0aWMgY29uc3QgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKLQlQVEVfVEFCTEVfU0laRSwgUEdEX1RBQkxFX1NJWkUKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGd0YWJsZV9jYWNoZV9zaXplWzNdID0geworCVBURV9UQUJMRV9TSVpFLCBQTURfVEFCTEVfU0laRSwgUEdEX1RBQkxFX1NJWkUKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7Ci0JInB0ZV9wbWRfY2FjaGUiLCAicGdkX2NhY2hlIiwKKwkicHRlX3BtZF9jYWNoZSIsICJwbWRfY2FjaGUiLCAicGdkX2NhY2hlIiwKIH07CiAjZWxzZQotc3RhdGljIGNvbnN0IGludCBwZ3RhYmxlX2NhY2hlX3NpemVbMl0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBndGFibGVfY2FjaGVfc2l6ZVsyXSA9IHsKIAlQVEVfVEFCTEVfU0laRSwgUE1EX1RBQkxFX1NJWkUKIH07CiBzdGF0aWMgY29uc3QgY2hhciAqcGd0YWJsZV9jYWNoZV9uYW1lW0FSUkFZX1NJWkUocGd0YWJsZV9jYWNoZV9zaXplKV0gPSB7CkBAIC0yMTMsNiArMjE5LDggQEAKIAkJaW50IHNpemUgPSBwZ3RhYmxlX2NhY2hlX3NpemVbaV07CiAJCWNvbnN0IGNoYXIgKm5hbWUgPSBwZ3RhYmxlX2NhY2hlX25hbWVbaV07CiAKKwkJREJHKCJBbGxvY2F0aW5nIHBhZ2UgdGFibGUgY2FjaGUgJXMgKCMlZCkgIgorCQkgICAgImZvciBzaXplOiAlMDh4Li4uXG4iLCBuYW1lLCBpLCBzaXplKTsKIAkJcGd0YWJsZV9jYWNoZVtpXSA9IGttZW1fY2FjaGVfY3JlYXRlKG5hbWUsCiAJCQkJCQkgICAgIHNpemUsIHNpemUsCiAJCQkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTiB8CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbWVtLmMgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKaW5kZXggNmY1NWVmZC4uZTJjOTVmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL21lbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tZW0uYwpAQCAtNDYsOSArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL2xtYi5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgotI2lmZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgIm1tdV9kZWNsLmgiCiAKQEAgLTExMCw2ICsxMDgsNyBAQAogdm9pZCBvbmxpbmVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKKwlzZXRfcGFnZV9jb3VudChwYWdlLCAwKTsKIAlmcmVlX2NvbGRfcGFnZShwYWdlKTsKIAl0b3RhbHJhbV9wYWdlcysrOwogCW51bV9waHlzcGFnZXMrKzsKQEAgLTEyNyw2ICsxMjYsOSBAQAogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwogCisJc3RhcnQgKz0gS0VSTkVMQkFTRTsKKwljcmVhdGVfc2VjdGlvbl9tYXBwaW5nKHN0YXJ0LCBzdGFydCArIHNpemUpOworCiAJLyogdGhpcyBzaG91bGQgd29yayBmb3IgbW9zdCBub24taGlnaG1lbSBwbGF0Zm9ybXMgKi8KIAl6b25lID0gcGdkYXRhLT5ub2RlX3pvbmVzOwogCkBAIC0zOTMsMTAgKzM5NSw4IEBACiAKIAltZW1faW5pdF9kb25lID0gMTsKIAotI2lmZGVmIENPTkZJR19QUEM2NAogCS8qIEluaXRpYWxpemUgdGhlIHZEU08gKi8KIAl2ZHNvX2luaXQoKTsKLSNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggZGEwOWJhMC4uYmQyY2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNyw5ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGFzbS9zcGFyc2VtZW0uaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCkBAIC0yOCw0NSArMjcsMTEzIEBACiBzdGF0aWMgaW50IG51bWFfZGVidWc7CiAjZGVmaW5lIGRiZyhhcmdzLi4uKSBpZiAobnVtYV9kZWJ1ZykgeyBwcmludGsoS0VSTl9JTkZPIGFyZ3MpOyB9CiAKLSNpZmRlZiBERUJVR19OVU1BCi0jZGVmaW5lIEFSUkFZX0lOSVRJQUxJU0VSIC0xCi0jZWxzZQotI2RlZmluZSBBUlJBWV9JTklUSUFMSVNFUiAwCi0jZW5kaWYKLQotaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtOUl9DUFVTXSA9IHsgWyAwIC4uLiAoTlJfQ1BVUyAtIDEpXSA9Ci0JQVJSQVlfSU5JVElBTElTRVJ9OwotY2hhciAqbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlOworaW50IG51bWFfY3B1X2xvb2t1cF90YWJsZVtOUl9DUFVTXTsKIGNwdW1hc2tfdCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW01BWF9OVU1OT0RFU107Ci1pbnQgbnJfY3B1c19pbl9ub2RlW01BWF9OVU1OT0RFU10gPSB7IFswIC4uLiAoTUFYX05VTU5PREVTIC0xKV0gPSAwfTsKLQogc3RydWN0IHBnbGlzdF9kYXRhICpub2RlX2RhdGFbTUFYX05VTU5PREVTXTsKLWJvb3RtZW1fZGF0YV90IF9faW5pdGRhdGEgcGxhdF9ub2RlX2JkYXRhW01BWF9OVU1OT0RFU107CisKK0VYUE9SVF9TWU1CT0wobnVtYV9jcHVfbG9va3VwX3RhYmxlKTsKK0VYUE9SVF9TWU1CT0wobnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZSk7CitFWFBPUlRfU1lNQk9MKG5vZGVfZGF0YSk7CisKK3N0YXRpYyBib290bWVtX2RhdGFfdCBfX2luaXRkYXRhIHBsYXRfbm9kZV9iZGF0YVtNQVhfTlVNTk9ERVNdOwogc3RhdGljIGludCBtaW5fY29tbW9uX2RlcHRoOwogCiAvKgotICogV2UgbmVlZCBzb21ld2hlcmUgdG8gc3RvcmUgc3RhcnQvc3BhbiBmb3IgZWFjaCBub2RlIHVudGlsIHdlIGhhdmUKKyAqIFdlIG5lZWQgc29tZXdoZXJlIHRvIHN0b3JlIHN0YXJ0L2VuZC9ub2RlIGZvciBlYWNoIHJlZ2lvbiB1bnRpbCB3ZSBoYXZlCiAgKiBhbGxvY2F0ZWQgdGhlIHJlYWwgbm9kZV9kYXRhIHN0cnVjdHVyZXMuCiAgKi8KKyNkZWZpbmUgTUFYX1JFR0lPTlMJKE1BWF9MTUJfUkVHSU9OUyoyKQogc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nIG5vZGVfZW5kX3BmbjsKLQl1bnNpZ25lZCBsb25nIG5vZGVfcHJlc2VudF9wYWdlczsKLX0gaW5pdF9ub2RlX2RhdGFbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKwlpbnQgbmlkOworfSBpbml0X25vZGVfZGF0YVtNQVhfUkVHSU9OU10gX19pbml0ZGF0YTsKIAotRVhQT1JUX1NZTUJPTChub2RlX2RhdGEpOwotRVhQT1JUX1NZTUJPTChudW1hX2NwdV9sb29rdXBfdGFibGUpOwotRVhQT1JUX1NZTUJPTChudW1hX21lbW9yeV9sb29rdXBfdGFibGUpOwotRVhQT1JUX1NZTUJPTChudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlKTsKLUVYUE9SVF9TWU1CT0wobnJfY3B1c19pbl9ub2RlKTsKK2ludCBfX2luaXQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKKworCQlpZiAoKHN0YXJ0X3BmbiA8PSBwZm4pICYmIChwZm4gPCBlbmRfcGZuKSkKKwkJCXJldHVybiBpbml0X25vZGVfZGF0YVtpXS5uaWQ7CisJfQorCisJcmV0dXJuIC0xOworfQorCit2b2lkIF9faW5pdCBhZGRfcmVnaW9uKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWRiZygiYWRkX3JlZ2lvbiBuaWQgJWQgc3RhcnRfcGZuIDB4JWx4IHBhZ2VzIDB4JWx4XG4iLAorCQluaWQsIHN0YXJ0X3BmbiwgcGFnZXMpOworCisJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQorCQkJY29udGludWU7CisJCWlmIChpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuID09IHN0YXJ0X3BmbikgeworCQkJaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiArPSBwYWdlczsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID09IChzdGFydF9wZm4gKyBwYWdlcykpIHsKKwkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiAtPSBwYWdlczsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qCisJICogTGVhdmUgbGFzdCBlbnRyeSBOVUxMIHNvIHdlIGRvbnQgaXRlcmF0ZSBvZmYgdGhlIGVuZCAod2UgdXNlCisJICogZW50cnkuZW5kX3BmbiB0byB0ZXJtaW5hdGUgdGhlIHdhbGspLgorCSAqLworCWlmIChpID49IChNQVhfUkVHSU9OUyAtIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogdG9vIG1hbnkgbWVtb3J5IHJlZ2lvbnMgaW4gIgorCQkJCSJudW1hIGNvZGUsIHRydW5jYXRpbmdcbiIpOworCQlyZXR1cm47CisJfQorCisJaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID0gc3RhcnRfcGZuOworCWluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPSBzdGFydF9wZm4gKyBwYWdlczsKKwlpbml0X25vZGVfZGF0YVtpXS5uaWQgPSBuaWQ7Cit9CisKKy8qIFdlIGFzc3VtZSBpbml0X25vZGVfZGF0YSBoYXMgbm8gb3ZlcmxhcHBpbmcgcmVnaW9ucyAqLwordm9pZCBfX2luaXQgZ2V0X3JlZ2lvbih1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sCisJCSAgICAgICB1bnNpZ25lZCBsb25nICplbmRfcGZuLCB1bnNpZ25lZCBsb25nICpwYWdlc19wcmVzZW50KQoreworCXVuc2lnbmVkIGludCBpOworCisJKnN0YXJ0X3BmbiA9IC0xVUw7CisJKmVuZF9wZm4gPSAqcGFnZXNfcHJlc2VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCisJCQljb250aW51ZTsKKworCQkqcGFnZXNfcHJlc2VudCArPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuIC0KKwkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKKworCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIDwgKnN0YXJ0X3BmbikKKwkJCSpzdGFydF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47CisKKwkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPiAqZW5kX3BmbikKKwkJCSplbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKKwl9CisKKwkvKiBXZSBkaWRudCBmaW5kIGEgbWF0Y2hpbmcgcmVnaW9uLCByZXR1cm4gc3RhcnQvZW5kIGFzIDAgKi8KKwlpZiAoKnN0YXJ0X3BmbiA9PSAtMVVMKQorCQlzdGFydF9wZm4gPSAwOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2NwdV90b19ub2RlKGludCBjcHUsIGludCBub2RlKQogewogCW51bWFfY3B1X2xvb2t1cF90YWJsZVtjcHVdID0gbm9kZTsKLQlpZiAoIShjcHVfaXNzZXQoY3B1LCBudW1hX2NwdW1hc2tfbG9va3VwX3RhYmxlW25vZGVdKSkpIHsKKworCWlmICghKGNwdV9pc3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pKSkKIAkJY3B1X3NldChjcHUsIG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbbm9kZV0pOwotCQlucl9jcHVzX2luX25vZGVbbm9kZV0rKzsKLQl9CiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKQEAgLTc4LDcgKzE0NSw2IEBACiAKIAlpZiAoY3B1X2lzc2V0KGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSkpIHsKIAkJY3B1X2NsZWFyKGNwdSwgbnVtYV9jcHVtYXNrX2xvb2t1cF90YWJsZVtub2RlXSk7Ci0JCW5yX2NwdXNfaW5fbm9kZVtub2RlXS0tOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogY3B1ICVsdSBub3QgZm91bmQgaW4gbm9kZSAlZFxuIiwKIAkJICAgICAgIGNwdSwgbm9kZSk7CkBAIC04Niw3ICsxNTIsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogX19kZXZpbml0IGZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmZpbmRfY3B1X25vZGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgaHdfY3B1aWQgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSA9IE5VTEw7CkBAIC0yMTMsNyArMjc5LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlYWRfbl9jZWxscyhpbnQgbiwgdW5zaWduZWQgaW50ICoqYnVmKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHJlYWRfbl9jZWxscyhpbnQgbiwgdW5zaWduZWQgaW50ICoqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIApAQCAtMjk1LDcgKzM2MSw4IEBACiAgKiBvciB6ZXJvLiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgb2Ygc2l6ZSBpcyAwIHRoZSByZWdpb24gc2hvdWxkIGJlCiAgKiBkaXNjYXJkZWQgYXMgaXQgbGllcyB3aG9seSBhYm92ZSB0aGUgbWVtb3J5IGxpbWl0LgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgbnVtYV9lbmZvcmNlX21lbW9yeV9saW1pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewogCS8qCiAJICogV2UgdXNlIGxtYl9lbmRfb2ZfRFJBTSgpIGluIGhlcmUgaW5zdGVhZCBvZiBtZW1vcnlfbGltaXQgYmVjYXVzZQpAQCAtMzIwLDggKzM4Nyw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpjcHUgPSBOVUxMOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKIAlpbnQgYWRkcl9jZWxscywgc2l6ZV9jZWxsczsKLQlpbnQgbWF4X2RvbWFpbiA9IDA7Ci0JbG9uZyBlbnRyaWVzID0gbG1iX2VuZF9vZl9EUkFNKCkgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVDsKKwlpbnQgbWF4X2RvbWFpbjsKIAl1bnNpZ25lZCBsb25nIGk7CiAKIAlpZiAobnVtYV9lbmFibGVkID09IDApIHsKQEAgLTMyOSwxMyArMzk1LDYgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSA9Ci0JCShjaGFyICopYWJzX3RvX3ZpcnQobG1iX2FsbG9jKGVudHJpZXMgKiBzaXplb2YoY2hhciksIDEpKTsKLQltZW1zZXQobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlLCAwLCBlbnRyaWVzICogc2l6ZW9mKGNoYXIpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzIDsgaSsrKQotCQludW1hX21lbW9yeV9sb29rdXBfdGFibGVbaV0gPSBBUlJBWV9JTklUSUFMSVNFUjsKLQogCW1pbl9jb21tb25fZGVwdGggPSBmaW5kX21pbl9jb21tb25fZGVwdGgoKTsKIAogCWRiZygiTlVNQSBhc3NvY2lhdGl2aXR5IGRlcHRoIGZvciBDUFUvTWVtb3J5OiAlZFxuIiwgbWluX2NvbW1vbl9kZXB0aCk7CkBAIC0zODcsOSArNDQ2LDYgQEAKIAkJc3RhcnQgPSByZWFkX25fY2VsbHMoYWRkcl9jZWxscywgJm1lbWNlbGxfYnVmKTsKIAkJc2l6ZSA9IHJlYWRfbl9jZWxscyhzaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwogCi0JCXN0YXJ0ID0gX0FMSUdOX0RPV04oc3RhcnQsIE1FTU9SWV9JTkNSRU1FTlQpOwotCQlzaXplID0gX0FMSUdOX1VQKHNpemUsIE1FTU9SWV9JTkNSRU1FTlQpOwotCiAJCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihtZW1vcnkpOwogCiAJCWlmIChudW1hX2RvbWFpbiA+PSBNQVhfTlVNTk9ERVMpIHsKQEAgLTQwMyw0NCArNDU5LDE1IEBACiAJCWlmIChtYXhfZG9tYWluIDwgbnVtYV9kb21haW4pCiAJCQltYXhfZG9tYWluID0gbnVtYV9kb21haW47CiAKLQkJaWYgKCEgKHNpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KHN0YXJ0LCBzaXplKSkpIHsKKwkJaWYgKCEoc2l6ZSA9IG51bWFfZW5mb3JjZV9tZW1vcnlfbGltaXQoc3RhcnQsIHNpemUpKSkgewogCQkJaWYgKC0tcmFuZ2VzKQogCQkJCWdvdG8gbmV3X3JhbmdlOwogCQkJZWxzZQogCQkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogSW5pdGlhbGl6ZSBuZXcgbm9kZSBzdHJ1Y3QsIG9yIGFkZCB0byBhbiBleGlzdGluZyBvbmUuCi0JCSAqLwotCQlpZiAoaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbikgewotCQkJaWYgKChzdGFydCAvIFBBR0VfU0laRSkgPAotCQkJICAgIGluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbikKLQkJCQlpbml0X25vZGVfZGF0YVtudW1hX2RvbWFpbl0ubm9kZV9zdGFydF9wZm4gPQotCQkJCQlzdGFydCAvIFBBR0VfU0laRTsKLQkJCWlmICgoKHN0YXJ0IC8gUEFHRV9TSVpFKSArIChzaXplIC8gUEFHRV9TSVpFKSkgPgotCQkJICAgIGluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4pCi0JCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfZW5kX3BmbiA9Ci0JCQkJCShzdGFydCAvIFBBR0VfU0laRSkgKwotCQkJCQkoc2l6ZSAvIFBBR0VfU0laRSk7Ci0KLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3ByZXNlbnRfcGFnZXMgKz0KLQkJCQlzaXplIC8gUEFHRV9TSVpFOwotCQl9IGVsc2UgewotCQkJbm9kZV9zZXRfb25saW5lKG51bWFfZG9tYWluKTsKLQotCQkJaW5pdF9ub2RlX2RhdGFbbnVtYV9kb21haW5dLm5vZGVfc3RhcnRfcGZuID0KLQkJCQlzdGFydCAvIFBBR0VfU0laRTsKLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX2VuZF9wZm4gPQotCQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3N0YXJ0X3BmbiArCi0JCQkJc2l6ZSAvIFBBR0VfU0laRTsKLQkJCWluaXRfbm9kZV9kYXRhW251bWFfZG9tYWluXS5ub2RlX3ByZXNlbnRfcGFnZXMgPQotCQkJCXNpemUgLyBQQUdFX1NJWkU7Ci0JCX0KLQotCQlmb3IgKGkgPSBzdGFydCA7IGkgPCAoc3RhcnQrc2l6ZSk7IGkgKz0gTUVNT1JZX0lOQ1JFTUVOVCkKLQkJCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdID0KLQkJCQludW1hX2RvbWFpbjsKKwkJYWRkX3JlZ2lvbihudW1hX2RvbWFpbiwgc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCSAgIHNpemUgPj4gUEFHRV9TSElGVCk7CiAKIAkJaWYgKC0tcmFuZ2VzKQogCQkJZ290byBuZXdfcmFuZ2U7CkBAIC00NTYsMzIgKzQ4MywxNSBAQAogewogCXVuc2lnbmVkIGxvbmcgdG9wX29mX3JhbSA9IGxtYl9lbmRfb2ZfRFJBTSgpOwogCXVuc2lnbmVkIGxvbmcgdG90YWxfcmFtID0gbG1iX3BoeXNfbWVtX3NpemUoKTsKLQl1bnNpZ25lZCBsb25nIGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJUb3Agb2YgUkFNOiAweCVseCwgVG90YWwgUkFNOiAweCVseFxuIiwKIAkgICAgICAgdG9wX29mX3JhbSwgdG90YWxfcmFtKTsKIAlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgaG9sZSBzaXplOiAlbGRNQlxuIiwKIAkgICAgICAgKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IDIwKTsKIAotCWlmICghbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlKSB7Ci0JCWxvbmcgZW50cmllcyA9IHRvcF9vZl9yYW0gPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVDsKLQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlID0KLQkJCShjaGFyICopYWJzX3RvX3ZpcnQobG1iX2FsbG9jKGVudHJpZXMgKiBzaXplb2YoY2hhciksIDEpKTsKLQkJbWVtc2V0KG51bWFfbWVtb3J5X2xvb2t1cF90YWJsZSwgMCwgZW50cmllcyAqIHNpemVvZihjaGFyKSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzIDsgaSsrKQotCQkJbnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2ldID0gQVJSQVlfSU5JVElBTElTRVI7Ci0JfQotCiAJbWFwX2NwdV90b19ub2RlKGJvb3RfY3B1aWQsIDApOwotCisJYWRkX3JlZ2lvbigwLCAwLCBsbWJfZW5kX29mX0RSQU0oKSA+PiBQQUdFX1NISUZUKTsKIAlub2RlX3NldF9vbmxpbmUoMCk7Ci0KLQlpbml0X25vZGVfZGF0YVswXS5ub2RlX3N0YXJ0X3BmbiA9IDA7Ci0JaW5pdF9ub2RlX2RhdGFbMF0ubm9kZV9lbmRfcGZuID0gbG1iX2VuZF9vZl9EUkFNKCkgLyBQQUdFX1NJWkU7Ci0JaW5pdF9ub2RlX2RhdGFbMF0ubm9kZV9wcmVzZW50X3BhZ2VzID0gdG90YWxfcmFtIC8gUEFHRV9TSVpFOwotCi0JZm9yIChpID0gMCA7IGkgPCB0b3Bfb2ZfcmFtOyBpICs9IE1FTU9SWV9JTkNSRU1FTlQpCi0JCW51bWFfbWVtb3J5X2xvb2t1cF90YWJsZVtpID4+IE1FTU9SWV9JTkNSRU1FTlRfU0hJRlRdID0gMDsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGR1bXBfbnVtYV90b3BvbG9neSh2b2lkKQpAQCAtNDk5LDggKzUwOSw5IEBACiAKIAkJY291bnQgPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBsbWJfZW5kX29mX0RSQU0oKTsgaSArPSBNRU1PUllfSU5DUkVNRU5UKSB7Ci0JCQlpZiAobnVtYV9tZW1vcnlfbG9va3VwX3RhYmxlW2kgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF0gPT0gbm9kZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgbG1iX2VuZF9vZl9EUkFNKCk7CisJCSAgICAgaSArPSAoMSA8PCBTRUNUSU9OX1NJWkVfQklUUykpIHsKKwkJCWlmIChlYXJseV9wZm5fdG9fbmlkKGkgPj4gUEFHRV9TSElGVCkgPT0gbm9kZSkgewogCQkJCWlmIChjb3VudCA9PSAwKQogCQkJCQlwcmludGsoIiAweCVseCIsIGkpOwogCQkJCSsrY291bnQ7CkBAIC01MjUsMTAgKzUzNiwxMiBAQAogICoKICAqIFJldHVybnMgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FyZWZ1bF9hbGxvY2F0aW9uKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJdW5zaWduZWQgbG9uZyBhbGlnbiwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdm9pZCBfX2luaXQgKmNhcmVmdWxfYWxsb2NhdGlvbihpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHJldCA9IGxtYl9hbGxvY19iYXNlKHNpemUsIGFsaWduLCBlbmQpOworCWludCBuZXdfbmlkOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gbG1iX2FsbG9jX2Jhc2Uoc2l6ZSwgYWxpZ24sIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CiAKIAkvKiByZXRyeSBvdmVyIGFsbCBtZW1vcnkgKi8KIAlpZiAoIXJldCkKQEAgLTU0MiwyOCArNTU1LDI3IEBACiAJICogSWYgdGhlIG1lbW9yeSBjYW1lIGZyb20gYSBwcmV2aW91c2x5IGFsbG9jYXRlZCBub2RlLCB3ZSBtdXN0CiAJICogcmV0cnkgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCiAJICovCi0JaWYgKHBhX3RvX25pZChyZXQpIDwgbmlkKSB7Ci0JCW5pZCA9IHBhX3RvX25pZChyZXQpOwotCQlyZXQgPSAodW5zaWduZWQgbG9uZylfX2FsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwKKwluZXdfbmlkID0gZWFybHlfcGZuX3RvX25pZChyZXQgPj4gUEFHRV9TSElGVCk7CisJaWYgKG5ld19uaWQgPCBuaWQpIHsKKwkJcmV0ID0gKHVuc2lnbmVkIGxvbmcpX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5ld19uaWQpLAogCQkJCXNpemUsIGFsaWduLCAwKTsKIAogCQlpZiAoIXJldCkKIAkJCXBhbmljKCJudW1hLmM6IGNhbm5vdCBhbGxvY2F0ZSAlbHUgYnl0ZXMgb24gbm9kZSAlZCIsCi0JCQkgICAgICBzaXplLCBuaWQpOworCQkJICAgICAgc2l6ZSwgbmV3X25pZCk7CiAKLQkJcmV0ID0gdmlydF90b19hYnMocmV0KTsKKwkJcmV0ID0gX19wYShyZXQpOwogCiAJCWRiZygiYWxsb2NfYm9vdG1lbSAlbHggJWx4XG4iLCByZXQsIHNpemUpOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuICh2b2lkICopcmV0OwogfQogCiB2b2lkIF9faW5pdCBkb19pbml0X2Jvb3RtZW0odm9pZCkKIHsKIAlpbnQgbmlkOwotCWludCBhZGRyX2NlbGxzLCBzaXplX2NlbGxzOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKIAlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwYzY0X251bWFfbmIgPSB7CiAJCS5ub3RpZmllcl9jYWxsID0gY3B1X251bWFfY2FsbGJhY2ssCiAJCS5wcmlvcml0eSA9IDEgLyogTXVzdCBydW4gYmVmb3JlIHNjaGVkIGRvbWFpbnMgbm90aWZpZXIuICovCkBAIC01ODEsOTkgKzU5Myw2NiBAQAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcHBjNjRfbnVtYV9uYik7CiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJdW5zaWduZWQgbG9uZyBzdGFydF9wYWRkciwgZW5kX3BhZGRyOwotCQlpbnQgaTsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm4sIHBhZ2VzX3ByZXNlbnQ7CiAJCXVuc2lnbmVkIGxvbmcgYm9vdG1lbV9wYWRkcjsKIAkJdW5zaWduZWQgbG9uZyBib290bWFwX3BhZ2VzOwogCi0JCXN0YXJ0X3BhZGRyID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX3N0YXJ0X3BmbiAqIFBBR0VfU0laRTsKLQkJZW5kX3BhZGRyID0gaW5pdF9ub2RlX2RhdGFbbmlkXS5ub2RlX2VuZF9wZm4gKiBQQUdFX1NJWkU7CisJCWdldF9yZWdpb24obmlkLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJnBhZ2VzX3ByZXNlbnQpOwogCiAJCS8qIEFsbG9jYXRlIHRoZSBub2RlIHN0cnVjdHVyZSBub2RlIGxvY2FsIGlmIHBvc3NpYmxlICovCi0JCU5PREVfREFUQShuaWQpID0gKHN0cnVjdCBwZ2xpc3RfZGF0YSAqKWNhcmVmdWxfYWxsb2NhdGlvbihuaWQsCisJCU5PREVfREFUQShuaWQpID0gY2FyZWZ1bF9hbGxvY2F0aW9uKG5pZCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSksCi0JCQkJCVNNUF9DQUNIRV9CWVRFUywgZW5kX3BhZGRyKTsKLQkJTk9ERV9EQVRBKG5pZCkgPSBhYnNfdG9fdmlydChOT0RFX0RBVEEobmlkKSk7CisJCQkJCVNNUF9DQUNIRV9CWVRFUywgZW5kX3Bmbik7CisJCU5PREVfREFUQShuaWQpID0gX192YShOT0RFX0RBVEEobmlkKSk7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOwogCiAgIAkJZGJnKCJub2RlICVkXG4iLCBuaWQpOwogCQlkYmcoIk5PREVfREFUQSgpID0gJXBcbiIsIE5PREVfREFUQShuaWQpKTsKIAogCQlOT0RFX0RBVEEobmlkKS0+YmRhdGEgPSAmcGxhdF9ub2RlX2JkYXRhW25pZF07Ci0JCU5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbiA9Ci0JCQlpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfc3RhcnRfcGZuOwotCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID0KLQkJCWVuZF9wYWRkciAtIHN0YXJ0X3BhZGRyOworCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4gPSBzdGFydF9wZm47CisJCU5PREVfREFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwogCiAJCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID09IDApCiAgIAkJCWNvbnRpbnVlOwogCi0gIAkJZGJnKCJzdGFydF9wYWRkciA9ICVseFxuIiwgc3RhcnRfcGFkZHIpOwotICAJCWRiZygiZW5kX3BhZGRyID0gJWx4XG4iLCBlbmRfcGFkZHIpOworICAJCWRiZygic3RhcnRfcGFkZHIgPSAlbHhcbiIsIHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUKTsKKyAgCQlkYmcoImVuZF9wYWRkciA9ICVseFxuIiwgZW5kX3BmbiA8PCBQQUdFX1NISUZUKTsKIAotCQlib290bWFwX3BhZ2VzID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKChlbmRfcGFkZHIgLSBzdGFydF9wYWRkcikgPj4gUEFHRV9TSElGVCk7CisJCWJvb3RtYXBfcGFnZXMgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3BmbiAtIHN0YXJ0X3Bmbik7CisJCWJvb3RtZW1fcGFkZHIgPSAodW5zaWduZWQgbG9uZyljYXJlZnVsX2FsbG9jYXRpb24obmlkLAorCQkJCQlib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQsCisJCQkJCVBBR0VfU0laRSwgZW5kX3Bmbik7CisJCW1lbXNldChfX3ZhKGJvb3RtZW1fcGFkZHIpLCAwLCBib290bWFwX3BhZ2VzIDw8IFBBR0VfU0hJRlQpOwogCi0JCWJvb3RtZW1fcGFkZHIgPSBjYXJlZnVsX2FsbG9jYXRpb24obmlkLAotCQkJCWJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCwKLQkJCQlQQUdFX1NJWkUsIGVuZF9wYWRkcik7Ci0JCW1lbXNldChhYnNfdG9fdmlydChib290bWVtX3BhZGRyKSwgMCwKLQkJICAgICAgIGJvb3RtYXBfcGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJCWRiZygiYm9vdG1hcF9wYWRkciA9ICVseFxuIiwgYm9vdG1lbV9wYWRkcik7CiAKIAkJaW5pdF9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIGJvb3RtZW1fcGFkZHIgPj4gUEFHRV9TSElGVCwKLQkJCQkgIHN0YXJ0X3BhZGRyID4+IFBBR0VfU0hJRlQsCi0JCQkJICBlbmRfcGFkZHIgPj4gUEFHRV9TSElGVCk7CisJCQkJICBzdGFydF9wZm4sIGVuZF9wZm4pOwogCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gZG8gYW5vdGhlciBzY2FuIG9mIGFsbCBtZW1vcnkgc2VjdGlvbnMgdG8KLQkJICogYXNzb2NpYXRlIG1lbW9yeSB3aXRoIHRoZSBjb3JyZWN0IG5vZGUuCi0JCSAqLwotCQlhZGRyX2NlbGxzID0gZ2V0X21lbV9hZGRyX2NlbGxzKCk7Ci0JCXNpemVfY2VsbHMgPSBnZXRfbWVtX3NpemVfY2VsbHMoKTsKLQkJbWVtb3J5ID0gTlVMTDsKLQkJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewotCQkJdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQsIG1lbV9zaXplOwotCQkJaW50IG51bWFfZG9tYWluLCByYW5nZXM7Ci0JCQl1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOwotCQkJdW5zaWduZWQgaW50IGxlbjsKKwkJLyogQWRkIGZyZWUgcmVnaW9ucyBvbiB0aGlzIG5vZGUgKi8KKwkJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAKLQkJCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLCAmbGVuKTsKLQkJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCisJCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKIAkJCQljb250aW51ZTsKIAotCQkJcmFuZ2VzID0gbWVtb3J5LT5uX2FkZHJzOwkvKiByYW5nZXMgaW4gY2VsbCAqLwotbmV3X3JhbmdlOgotCQkJbWVtX3N0YXJ0ID0gcmVhZF9uX2NlbGxzKGFkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCQltZW1fc2l6ZSA9IHJlYWRfbl9jZWxscyhzaXplX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJaWYgKG51bWFfZW5hYmxlZCkgewotCQkJCW51bWFfZG9tYWluID0gb2Zfbm9kZV9udW1hX2RvbWFpbihtZW1vcnkpOwotCQkJCWlmIChudW1hX2RvbWFpbiAgPj0gTUFYX05VTU5PREVTKQotCQkJCQludW1hX2RvbWFpbiA9IDA7Ci0JCQl9IGVsc2UKLQkJCQludW1hX2RvbWFpbiA9ICAwOworCQkJc3RhcnQgPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKKwkJCWVuZCA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPDwgUEFHRV9TSElGVDsKIAotCQkJaWYgKG51bWFfZG9tYWluICE9IG5pZCkKLQkJCQljb250aW51ZTsKLQotCQkJbWVtX3NpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbV9zdGFydCwgbWVtX3NpemUpOwotICAJCQlpZiAobWVtX3NpemUpIHsKLSAgCQkJCWRiZygiZnJlZV9ib290bWVtICVseCAlbHhcbiIsIG1lbV9zdGFydCwgbWVtX3NpemUpOwotICAJCQkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQkJfQotCi0JCQlpZiAoLS1yYW5nZXMpCQkvKiBwcm9jZXNzIGFsbCByYW5nZXMgaW4gY2VsbCAqLwotCQkJCWdvdG8gbmV3X3JhbmdlOworCQkJZGJnKCJmcmVlX2Jvb3RtZW0gJWx4ICVseFxuIiwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKyAgCQkJZnJlZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5pZCksIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAJCX0KIAotCQkvKgotCQkgKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgb24gdGhpcyBub2RlCi0JCSAqLworCQkvKiBNYXJrIHJlc2VydmVkIHJlZ2lvbnMgb24gdGhpcyBub2RlICovCiAJCWZvciAoaSA9IDA7IGkgPCBsbWIucmVzZXJ2ZWQuY250OyBpKyspIHsKIAkJCXVuc2lnbmVkIGxvbmcgcGh5c2Jhc2UgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLmJhc2U7CiAJCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemU7CisJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BhZGRyID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCQl1bnNpZ25lZCBsb25nIGVuZF9wYWRkciA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKIAotCQkJaWYgKHBhX3RvX25pZChwaHlzYmFzZSkgIT0gbmlkICYmCi0JCQkgICAgcGFfdG9fbmlkKHBoeXNiYXNlK3NpemUtMSkgIT0gbmlkKQorCQkJaWYgKGVhcmx5X3Bmbl90b19uaWQocGh5c2Jhc2UgPj4gUEFHRV9TSElGVCkgIT0gbmlkICYmCisJCQkgICAgZWFybHlfcGZuX3RvX25pZCgocGh5c2Jhc2Urc2l6ZS0xKSA+PiBQQUdFX1NISUZUKSAhPSBuaWQpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChwaHlzYmFzZSA8IGVuZF9wYWRkciAmJgpAQCAtNjkzLDQ2ICs2NzIsMTkgQEAKIAkJCQkJCSAgICAgc2l6ZSk7CiAJCQl9CiAJCX0KLQkJLyoKLQkJICogVGhpcyBsb29wIG1heSBsb29rIGZhbWFsaWFyLCBidXQgd2UgaGF2ZSB0byBkbyBpdCBhZ2FpbgotCQkgKiBhZnRlciBtYXJraW5nIG91ciByZXNlcnZlZCBtZW1vcnkgdG8gbWFyayBtZW1vcnkgcHJlc2VudAotCQkgKiBmb3Igc3BhcnNlbWVtLgotCQkgKi8KLQkJYWRkcl9jZWxscyA9IGdldF9tZW1fYWRkcl9jZWxscygpOwotCQlzaXplX2NlbGxzID0gZ2V0X21lbV9zaXplX2NlbGxzKCk7Ci0JCW1lbW9yeSA9IE5VTEw7Ci0JCXdoaWxlICgobWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobWVtb3J5LCAibWVtb3J5IikpICE9IE5VTEwpIHsKLQkJCXVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0LCBtZW1fc2l6ZTsKLQkJCWludCBudW1hX2RvbWFpbiwgcmFuZ2VzOwotCQkJdW5zaWduZWQgaW50ICptZW1jZWxsX2J1ZjsKLQkJCXVuc2lnbmVkIGludCBsZW47CiAKLQkJCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLCAmbGVuKTsKLQkJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCisJCS8qIEFkZCByZWdpb25zIGludG8gc3BhcnNlbWVtICovCisJCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgeworCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOworCisJCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0ubmlkICE9IG5pZCkKIAkJCQljb250aW51ZTsKIAotCQkJcmFuZ2VzID0gbWVtb3J5LT5uX2FkZHJzOwkvKiByYW5nZXMgaW4gY2VsbCAqLwotbmV3X3JhbmdlMjoKLQkJCW1lbV9zdGFydCA9IHJlYWRfbl9jZWxscyhhZGRyX2NlbGxzLCAmbWVtY2VsbF9idWYpOwotCQkJbWVtX3NpemUgPSByZWFkX25fY2VsbHMoc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJCWlmIChudW1hX2VuYWJsZWQpIHsKLQkJCQludW1hX2RvbWFpbiA9IG9mX25vZGVfbnVtYV9kb21haW4obWVtb3J5KTsKLQkJCQlpZiAobnVtYV9kb21haW4gID49IE1BWF9OVU1OT0RFUykKLQkJCQkJbnVtYV9kb21haW4gPSAwOwotCQkJfSBlbHNlCi0JCQkJbnVtYV9kb21haW4gPSAgMDsKKwkJCXN0YXJ0ID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuOworCQkJZW5kID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKIAotCQkJaWYgKG51bWFfZG9tYWluICE9IG5pZCkKLQkJCQljb250aW51ZTsKLQotCQkJbWVtX3NpemUgPSBudW1hX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbV9zdGFydCwgbWVtX3NpemUpOwotCQkJbWVtb3J5X3ByZXNlbnQobnVtYV9kb21haW4sIG1lbV9zdGFydCA+PiBQQUdFX1NISUZULAotCQkJCSAgICAgICAobWVtX3N0YXJ0ICsgbWVtX3NpemUpID4+IFBBR0VfU0hJRlQpOwotCi0JCQlpZiAoLS1yYW5nZXMpCQkvKiBwcm9jZXNzIGFsbCByYW5nZXMgaW4gY2VsbCAqLwotCQkJCWdvdG8gbmV3X3JhbmdlMjsKKwkJCW1lbW9yeV9wcmVzZW50KG5pZCwgc3RhcnQsIGVuZCk7CiAJCX0KLQogCX0KIH0KIApAQCAtNzQ2LDIxICs2OTgsMTggQEAKIAltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwotCQl1bnNpZ25lZCBsb25nIGVuZF9wZm47CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBwYWdlc19wcmVzZW50OwogCi0JCXN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW25pZF0ubm9kZV9zdGFydF9wZm47Ci0JCWVuZF9wZm4gPSBpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfZW5kX3BmbjsKKwkJZ2V0X3JlZ2lvbihuaWQsICZzdGFydF9wZm4sICZlbmRfcGZuLCAmcGFnZXNfcHJlc2VudCk7CiAKIAkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gPSB6b25lc19zaXplW1pPTkVfRE1BXSAtCi0JCQlpbml0X25vZGVfZGF0YVtuaWRdLm5vZGVfcHJlc2VudF9wYWdlczsKKwkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gem9uZXNfc2l6ZVtaT05FX0RNQV0gLSBwYWdlc19wcmVzZW50OwogCiAJCWRiZygiZnJlZV9hcmVhX2luaXQgbm9kZSAlZCAlbHggJWx4IChob2xlOiAlbHgpXG4iLCBuaWQsCiAJCSAgICB6b25lc19zaXplW1pPTkVfRE1BXSwgc3RhcnRfcGZuLCB6aG9sZXNfc2l6ZVtaT05FX0RNQV0pOwogCi0JCWZyZWVfYXJlYV9pbml0X25vZGUobmlkLCBOT0RFX0RBVEEobmlkKSwgem9uZXNfc2l6ZSwKLQkJCQkJCQlzdGFydF9wZm4sIHpob2xlc19zaXplKTsKKwkJZnJlZV9hcmVhX2luaXRfbm9kZShuaWQsIE5PREVfREFUQShuaWQpLCB6b25lc19zaXplLCBzdGFydF9wZm4sCisJCQkJICAgIHpob2xlc19zaXplKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCmluZGV4IDkwMDg0MjQuLmM3ZjdiYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYwpAQCAtMTIyLDggKzEyMiwxMSBAQAogCQkgKgogCQkgKi8KIAkJaWYgKGh0YWJfYm9sdF9tYXBwaW5nKGVhLCBlYSArIFBBR0VfU0laRSwgcGEsIGZsYWdzLAotCQkJCSAgICAgIG1tdV92aXJ0dWFsX3BzaXplKSkKLQkJCXBhbmljKCJDYW4ndCBtYXAgYm9sdGVkIElPIG1hcHBpbmciKTsKKwkJCQkgICAgICBtbXVfdmlydHVhbF9wc2l6ZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGRvIGJvbHRlZCBtYXBwaW5nIElPICIKKwkJCSAgICAgICAibWVtb3J5IGF0ICUwMTZseCAhXG4iLCBwYSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMgYi9hcmNoL3Bvd2VycGMvbW0vc3RhYi5jCmluZGV4IGZhMzI1ZGIuLmNmYmI0ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zdGFiLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N0YWIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9sbWIuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KIAogc3RydWN0IHN0YWJfZW50cnkgewogCXVuc2lnbmVkIGxvbmcgZXNpZF9kYXRhOwpAQCAtMjU2LDcgKzI1Nyw3IEBACiAKIAkJcGFjYVtjcHVdLnN0YWJfYWRkciA9IG5ld3N0YWI7CiAJCXBhY2FbY3B1XS5zdGFiX3JlYWwgPSB2aXJ0X3RvX2FicyhuZXdzdGFiKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlNlZ21lbnQgdGFibGUgZm9yIENQVSAlZCBhdCAweCVseCAiCisJCXByaW50ayhLRVJOX0lORk8gIlNlZ21lbnQgdGFibGUgZm9yIENQVSAlZCBhdCAweCVseCAiCiAJCSAgICAgICAidmlydHVhbCwgMHglbHggYWJzb2x1dGVcbiIsCiAJCSAgICAgICBjcHUsIHBhY2FbY3B1XS5zdGFiX2FkZHIsIHBhY2FbY3B1XS5zdGFiX3JlYWwpOwogCX0KQEAgLTI3MCwxMCArMjcxLDI4IEBACiB2b2lkIHN0YWJfaW5pdGlhbGl6ZSh1bnNpZ25lZCBsb25nIHN0YWIpCiB7CiAJdW5zaWduZWQgbG9uZyB2c2lkID0gZ2V0X2tlcm5lbF92c2lkKEtFUk5FTEJBU0UpOworCXVuc2lnbmVkIGxvbmcgc3RhYnJlYWw7CiAKIAlhc20gdm9sYXRpbGUoImlzeW5jOyBzbGJpYTsgaXN5bmMiOjo6Im1lbW9yeSIpOwogCW1ha2Vfc3RlKHN0YWIsIEdFVF9FU0lEKEtFUk5FTEJBU0UpLCB2c2lkKTsKIAogCS8qIE9yZGVyIHVwZGF0ZSAqLwogCWFzbSB2b2xhdGlsZSgic3luYyI6OjoibWVtb3J5Iik7CisKKwkvKiBTZXQgQVNSICovCisJc3RhYnJlYWwgPSBnZXRfcGFjYSgpLT5zdGFiX3JlYWwgfCAweDF1bDsKKworI2lmZGVmIENPTkZJR19QUENfSVNFUklFUworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKSB7CisJCUh2Q2FsbDEoSHZDYWxsQmFzZVNldEFTUiwgc3RhYnJlYWwpOworCQlyZXR1cm47CisJfQorI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworI2lmZGVmIENPTkZJR19QUENfUFNFUklFUworCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpIHsKKwkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfU0VUX0FTUiwgc3RhYnJlYWwpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisJbXRzcHIoU1BSTl9BU1IsIHN0YWJyZWFsKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF9wb3dlcjQuYwppbmRleCBjNGVlNTQ3Li5hMzQwMWI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfcG93ZXI0LmMKKysrIGIvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsX3Bvd2VyNC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vb3Byb2ZpbGVfaW1wbC5oPgogI2luY2x1ZGUgPGFzbS9yZWcuaD4KQEAgLTIzMyw4ICsyMzIsNyBAQAogCW1tY3JhID0gbWZzcHIoU1BSTl9NTUNSQSk7CiAKIAkvKiBXZXJlIHdlIGluIHRoZSBoeXBlcnZpc29yPyAqLwotCWlmICgoc3lzdGVtY2ZnLT5wbGF0Zm9ybSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpICYmCi0JICAgIChtbWNyYSAmIE1NQ1JBX1NJSFYpKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkgJiYgKG1tY3JhICYgTU1DUkFfU0lIVikpCiAJCS8qIGZ1bmN0aW9uIGRlc2NyaXB0b3IgbWFkbmVzcyAqLwogCQlyZXR1cm4gKigodW5zaWduZWQgbG9uZyAqKWh5cGVydmlzb3JfYnVja2V0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCBlY2QzMmQ1Li40MDk5ZGRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtMzYxLDcgKzM2MSw5IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiT3BlblBJQyBhdCAlbHhcbiIsIG9wYWRkcik7CiAKIAlpcnFfY291bnQgPSBOUl9JUlFTIC0gTlVNX0lTQV9JTlRFUlJVUFRTIC0gNDsgLyogbGVhdmUgcm9vbSBmb3IgSVBJcyAqLwotCXByb21fZ2V0X2lycV9zZW5zZXMoaW5pdF9zZW5zZXMsIE5VTV84MjU5X0lOVEVSUlVQVFMsIE5SX0lSUVMgLSA0KTsKKwlwcm9tX2dldF9pcnFfc2Vuc2VzKGluaXRfc2Vuc2VzLCBOVU1fSVNBX0lOVEVSUlVQVFMsIE5SX0lSUVMgLSA0KTsKKwkvKiBpODI1OSBjYXNjYWRlIGlzIGFsd2F5cyBwb3NpdGl2ZSBsZXZlbCAqLworCWluaXRfc2Vuc2VzWzBdID0gSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFOwogCiAJaXJhbmdlcyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAiaW50ZXJydXB0LXJhbmdlcyIsICZsZW4pOwogCWlmIChpcmFuZ2VzID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKaW5kZXggYTA2NjAzZC4uMDEwOTBlOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwpAQCAtMTAzLDYgKzEwMyw5IEBACiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzUGFybSkKIHsKIAlpbnQgaXJxOworI2lmZGVmIENPTkZJR19JUlFTVEFDS1MKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKmN1cnRwLCAqaXJxdHA7CisjZW5kaWYKIAogCSsrUGNpX0ludGVycnVwdF9Db3VudDsKIApAQCAtMTEwLDcgKzExMywyMCBAQAogCWNhc2UgWG1QY2lMcEV2ZW50X1Nsb3RJbnRlcnJ1cHQ6CiAJCWlycSA9IGV2ZW50UGFybS0+aHZMcEV2ZW50LnhDb3JyZWxhdGlvblRva2VuOwogCQkvKiBEaXNwYXRjaCB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciB0aGlzIGlycSAqLwotCQlwcGNfaXJxX2Rpc3BhdGNoX2hhbmRsZXIocmVnc1Bhcm0sIGlycSk7CisjaWZkZWYgQ09ORklHX0lSUVNUQUNLUworCQkvKiBTd2l0Y2ggdG8gdGhlIGlycSBzdGFjayB0byBoYW5kbGUgdGhpcyAqLworCQljdXJ0cCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaXJxdHAgPSBoYXJkaXJxX2N0eFtzbXBfcHJvY2Vzc29yX2lkKCldOworCQlpZiAoY3VydHAgIT0gaXJxdHApIHsKKwkJCWlycXRwLT50YXNrID0gY3VydHAtPnRhc2s7CisJCQlpcnF0cC0+ZmxhZ3MgPSAwOworCQkJY2FsbF9fX2RvX0lSUShpcnEsIHJlZ3NQYXJtLCBpcnF0cCk7CisJCQlpcnF0cC0+dGFzayA9IE5VTEw7CisJCQlpZiAoaXJxdHAtPmZsYWdzKQorCQkJCXNldF9iaXRzKGlycXRwLT5mbGFncywgJmN1cnRwLT5mbGFncyk7CisJCX0gZWxzZQorI2VuZGlmCisJCQlfX2RvX0lSUShpcnEsIHJlZ3NQYXJtKTsKIAkJSHZDYWxsUGNpX2VvaShldmVudFBhcm0tPmV2ZW50RGF0YS5zbG90SW50ZXJydXB0LmJ1c051bWJlciwKIAkJCWV2ZW50UGFybS0+ZXZlbnREYXRhLnNsb3RJbnRlcnJ1cHQuc3ViQnVzTnVtYmVyLAogCQkJZXZlbnRQYXJtLT5ldmVudERhdGEuc2xvdEludGVycnVwdC5kZXZpY2VJZCk7CkBAIC0zMTAsMTAgKzMyNiw4IEBACiB9CiAKIC8qCi0gKiBOZWVkIHRvIGRlZmluZSB0aGlzIHNvIHBwY19pcnFfZGlzcGF0Y2hfaGFuZGxlciB3aWxsIE5PVCBjYWxsCi0gKiBlbmFibGVfSVJRIGF0IHRoZSBlbmQgb2YgaW50ZXJydXB0IGhhbmRsaW5nLiAgSG93ZXZlciwgdGhpcyBkb2VzCi0gKiBub3RoaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm90IGVub3VnaCBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBkbwotICogdGhlIEVPSSBIdkNhbGwuICBUaGlzIGlzIGRvbmUgYnkgWG1QY2lMcEV2ZW50LmMKKyAqIFRoaXMgZG9lcyBub3RoaW5nIGJlY2F1c2UgdGhlcmUgaXMgbm90IGVub3VnaCBpbmZvcm1hdGlvbgorICogcHJvdmlkZWQgdG8gZG8gdGhlIEVPSSBIdkNhbGwuICBUaGlzIGlzIGRvbmUgYnkgWG1QY2lMcEV2ZW50LmMKICAqLwogc3RhdGljIHZvaWQgaVNlcmllc19lbmRfSVJRKHVuc2lnbmVkIGludCBpcnEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21pc2MuUwppbmRleCAwOWYxNDUyLi5kZmU3YWExIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWlzYy5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9taXNjLlMKQEAgLTE1LDYgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogCiAJLnRleHQKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCA3ZjhmMGNkLi42YTI5ZjMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwpAQCAtMzksNyArMzksOCBAQAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgotCisjaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CkBAIC03MSw3ICs3Miw3IEBACiAjZW5kaWYKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwotc3RhdGljIHZvaWQgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpOworc3RhdGljIHVuc2lnbmVkIGxvbmcgYnVpbGRfaVNlcmllc19NZW1vcnlfTWFwKHZvaWQpOwogc3RhdGljIHZvaWQgaXNlcmllc19zaGFyZWRfaWRsZSh2b2lkKTsKIHN0YXRpYyB2b2lkIGlzZXJpZXNfZGVkaWNhdGVkX2lkbGUodm9pZCk7CiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtODQsNyArODUsNiBAQAogaW50IHBpcmFuaGFfc2ltdWxhdG9yOwogCiBleHRlcm4gaW50IHJkX3NpemU7CQkvKiBEZWZpbmVkIGluIGRyaXZlcnMvYmxvY2svcmQuYyAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcga2xpbWl0OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1iZWRkZWRfc3lzbWFwX3N0YXJ0OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1iZWRkZWRfc3lzbWFwX2VuZDsKIApAQCAtNDAzLDkgKzQwMywxMSBAQAogICogYSB0YWJsZSB1c2VkIHRvIHRyYW5zbGF0ZSBMaW51eCdzIHBoeXNpY2FsIGFkZHJlc3NlcyB0byB0aGVzZQogICogYWJzb2x1dGUgYWRkcmVzc2VzLiAgQWJzb2x1dGUgYWRkcmVzc2VzIGFyZSBuZWVkZWQgd2hlbgogICogY29tbXVuaWNhdGluZyB3aXRoIHRoZSBoeXBlcnZpc29yIChlLmcuIHRvIGJ1aWxkIEhQVCBlbnRyaWVzKQorICoKKyAqIFJldHVybnMgdGhlIHBoeXNpY2FsIG1lbW9yeSBzaXplCiAgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCh2b2lkKQogewogCXUzMiBsb2FkQXJlYUZpcnN0Q2h1bmssIGxvYWRBcmVhTGFzdENodW5rLCBsb2FkQXJlYVNpemU7CiAJdTMyIG5leHRQaHlzQ2h1bms7CkBAIC01MzgsNyArNTQwLDcgQEAKIAkgKiB3aGljaCBzaG91bGQgYmUgZXF1YWwgdG8KIAkgKiAgIG5leHRQaHlzQ2h1bmsKIAkgKi8KLQlzeXN0ZW1jZmctPnBoeXNpY2FsTWVtb3J5U2l6ZSA9IGNodW5rX3RvX2FkZHIobmV4dFBoeXNDaHVuayk7CisJcmV0dXJuIGNodW5rX3RvX2FkZHIobmV4dFBoeXNDaHVuayk7CiB9CiAKIC8qCkBAIC01NjQsOCArNTY2LDggQEAKIAlwcmludGsoIk1heCBwaHlzaWNhbCBwcm9jZXNzb3JzID0gJWRcbiIsCiAJCQlpdFZwZEFyZWFzLnhTbGljTWF4UGh5c2ljYWxQcm9jcyk7CiAKLQlzeXN0ZW1jZmctPnByb2Nlc3NvciA9IHhJb0hyaVByb2Nlc3NvclZwZFtwcm9jSXhdLnhQVlI7Ci0JcHJpbnRrKCJQcm9jZXNzb3IgdmVyc2lvbiA9ICV4XG4iLCBzeXN0ZW1jZmctPnByb2Nlc3Nvcik7CisJX3N5c3RlbWNmZy0+cHJvY2Vzc29yID0geElvSHJpUHJvY2Vzc29yVnBkW3Byb2NJeF0ueFBWUjsKKwlwcmludGsoIlByb2Nlc3NvciB2ZXJzaW9uID0gJXhcbiIsIF9zeXN0ZW1jZmctPnByb2Nlc3Nvcik7CiB9CiAKIHN0YXRpYyB2b2lkIGlTZXJpZXNfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTcwMiw3ICs3MDQsNiBAQAogCiBzdGF0aWMgdm9pZCBpc2VyaWVzX2RlZGljYXRlZF9pZGxlKHZvaWQpCiB7Ci0JbG9uZyBvbGR2YWw7CiAJc2V0X3RocmVhZF9mbGFnKFRJRl9QT0xMSU5HX05SRkxBRyk7CiAKIAl3aGlsZSAoMSkgewpAQCAtOTI5LDcgKzkzMCw3IEBACiAJZHRfZW5kX25vZGUoZHQpOwogfQogCi12b2lkIGJ1aWxkX2ZsYXRfZHQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQpCit2b2lkIGJ1aWxkX2ZsYXRfZHQoc3RydWN0IGlzZXJpZXNfZmxhdF9kdCAqZHQsIHVuc2lnbmVkIGxvbmcgcGh5c19tZW1fc2l6ZSkKIHsKIAl1NjQgdG1wWzJdOwogCkBAIC05NDUsNyArOTQ2LDcgQEAKIAlkdF9wcm9wX3N0cihkdCwgIm5hbWUiLCAibWVtb3J5Iik7CiAJZHRfcHJvcF9zdHIoZHQsICJkZXZpY2VfdHlwZSIsICJtZW1vcnkiKTsKIAl0bXBbMF0gPSAwOwotCXRtcFsxXSA9IHN5c3RlbWNmZy0+cGh5c2ljYWxNZW1vcnlTaXplOworCXRtcFsxXSA9IHBoeXNfbWVtX3NpemU7CiAJZHRfcHJvcF91NjRfbGlzdChkdCwgInJlZyIsIHRtcCwgMik7CiAJZHRfZW5kX25vZGUoZHQpOwogCkBAIC05NjUsMTMgKzk2NiwxNSBAQAogCiB2b2lkICogX19pbml0IGlTZXJpZXNfZWFybHlfc2V0dXAodm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIHBoeXNfbWVtX3NpemU7CisKIAlpU2VyaWVzX2ZpeHVwX2tsaW1pdCgpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSB0YWJsZSB3aGljaCB0cmFuc2xhdGUgTGludXggcGh5c2ljYWwgYWRkcmVzc2VzIHRvCiAJICogQVMvNDAwIGFic29sdXRlIGFkZHJlc3NlcwogCSAqLwotCWJ1aWxkX2lTZXJpZXNfTWVtb3J5X01hcCgpOworCXBoeXNfbWVtX3NpemUgPSBidWlsZF9pU2VyaWVzX01lbW9yeV9NYXAoKTsKIAogCWlTZXJpZXNfZ2V0X2NtZGxpbmUoKTsKIApAQCAtOTgxLDcgKzk4NCw3IEBACiAJLyogUGFyc2UgZWFybHkgcGFyYW1ldGVycywgaW4gcGFydGljdWxhciBtZW09eCAqLwogCXBhcnNlX2Vhcmx5X3BhcmFtKCk7CiAKLQlidWlsZF9mbGF0X2R0KCZpc2VyaWVzX2R0KTsKKwlidWlsZF9mbGF0X2R0KCZpc2VyaWVzX2R0LCBwaHlzX21lbV9zaXplKTsKIAogCXJldHVybiAodm9pZCAqKSBfX3BhKCZpc2VyaWVzX2R0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCmluZGV4IDM0MGMyMWMuLjg5NWFlYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwpAQCAtMzgwLDkgKzM4MCw2IEBACiAJZm9yX2VhY2hfcGNpX2RldihkZXYpCiAJCXBjaV9yZWFkX2lycV9saW5lKGRldik7CiAKLQkvKiBEbyB0aGUgbWFwcGluZyBvZiB0aGUgSU8gc3BhY2UgKi8KLQlwaGJzX3JlbWFwX2lvKCk7Ci0KIAlEQkcoIiA8LSBtYXBsZV9wY2liaW9zX2ZpeHVwXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKaW5kZXggOGY4MThkMC4uZGZkNDFiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCkBAIC05MTgsOSArOTE4LDYgQEAKIAkJCVBDSV9ETihucCktPmJ1c25vID0gMHhmMDsKIAl9CiAKLQkvKiBtYXAgaW4gUENJIEkvTyBzcGFjZSAqLwotCXBoYnNfcmVtYXBfaW8oKTsKLQogCS8qIHBtYWNfY2hlY2tfaHRfbGluaygpOyAqLwogCiAJLyogVGVsbCBwY2kuYyB0byBub3QgdXNlIHRoZSBjb21tb24gcmVzb3VyY2UgYWxsb2NhdGlvbiBtZWNoYW5pc20gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDgzYTQ5ZTguLjkwMDQwYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtNzQsNiArNzQsOSBAQAogI2RlZmluZSBHQVRXSUNLX0lSUV9QT09MX1NJWkUgICAgICAgIDEwCiBzdGF0aWMgc3RydWN0IGludGVycnVwdF9pbmZvIGdhdHdpY2tfaW50X3Bvb2xbR0FUV0lDS19JUlFfUE9PTF9TSVpFXTsKIAorI2RlZmluZSBOUl9NQVNLX1dPUkRTCSgoTlJfSVJRUyArIDMxKSAvIDMyKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKKwogLyoKICAqIE1hcmsgYW4gaXJxIGFzICJsb3N0Ii4gIFRoaXMgaXMgb25seSB1c2VkIG9uIHRoZSBwbWFjCiAgKiBzaW5jZSBpdCBjYW4gbG9zZSBpbnRlcnJ1cHRzIChzZWUgcG1hY19zZXRfaXJxX21hc2spLgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKaW5kZXggZTFmOTQ0My4uOTU3YjA5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCkBAIC0zMDUsOSArMzA1LDE5IEBACiAJcHN1cmdlX3N0YXJ0ID0gaW9yZW1hcChQU1VSR0VfU1RBUlQsIDQpOwogCXBzdXJnZV9wcmlfaW50ciA9IGlvcmVtYXAoUFNVUkdFX1BSSV9JTlRSLCA0KTsKIAotCS8qIHRoaXMgaXMgbm90IGFjdHVhbGx5IHN0cmljdGx5IG5lY2Vzc2FyeSAtLSBwYXVsdXMuICovCi0JZm9yIChpID0gMTsgaSA8IG5jcHVzOyArK2kpCi0JCXNtcF9od19pbmRleFtpXSA9IGk7CisJLyoKKwkgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIE9GIGRvZXNuJ3Qga25vdyBhYm91dCB0aGUKKwkgKiBzZWNvbmRhcnkgY3B1KHMpLCBhbmQgdGh1cyB0aGVyZSBhcmVuJ3Qgbm9kZXMgaW4gdGhlCisJICogZGV2aWNlIHRyZWUgZm9yIHRoZW0sIGFuZCBzbXBfc2V0dXBfY3B1X21hcHMgaGFzbid0CisJICogc2V0IHRoZWlyIGJpdHMgaW4gY3B1X3Bvc3NpYmxlX21hcCBhbmQgY3B1X3ByZXNlbnRfbWFwLgorCSAqLworCWlmIChuY3B1cyA+IE5SX0NQVVMpCisJCW5jcHVzID0gTlJfQ1BVUzsKKwlmb3IgKGkgPSAxOyBpIDwgbmNwdXMgOyArK2kpIHsKKwkJY3B1X3NldChpLCBjcHVfcHJlc2VudF9tYXApOworCQljcHVfc2V0KGksIGNwdV9wb3NzaWJsZV9tYXApOworCQlzZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGksIGkpOworCX0KIAogCWlmIChwcGNfbWQucHJvZ3Jlc3MpIHBwY19tZC5wcm9ncmVzcygic21wX3BzdXJnZV9wcm9iZSAtIGRvbmUiLCAweDM1Mik7CiAKQEAgLTM0OCw2ICszNTgsNyBAQAogCWludCB0OwogCiAJc2V0X2RlYyh0Yl90aWNrc19wZXJfamlmZnkpOworCS8qIFhYWCBmaXhtZSAqLwogCXNldF90YigwLCAwKTsKIAlsYXN0X2ppZmZ5X3N0YW1wKGNwdV9ucikgPSAwOwogCkBAIC0zNjMsOCArMzc0LDYgQEAKIAogCS8qIG5vdyBpbnRlcnJ1cHQgdGhlIHNlY29uZGFyeSwgc3RhcnRpbmcgYm90aCBUQnMgKi8KIAlwc3VyZ2Vfc2V0X2lwaSgxKTsKLQotCXNtcF90Yl9zeW5jaHJvbml6ZWQgPSAxOwogfQogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBwc3VyZ2VfaXJxYWN0aW9uID0gewpAQCAtNjI1LDkgKzYzNCw4IEBACiAJZm9yICh0ID0gMTAwMDAwOyB0ID4gMCAmJiBzZWNfdGJfcmVzZXQ7IC0tdCkKIAkJdWRlbGF5KDEwKTsKIAlpZiAoc2VjX3RiX3Jlc2V0KQorCQkvKiBYWFggQlVHX09OIGhlcmU/ICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRpbWVvdXQgd2FpdGluZyBzeW5jKDIpIG9uIHNlY29uZCBDUFVcbiIpOwotCWVsc2UKLQkJc21wX3RiX3N5bmNocm9uaXplZCA9IDE7CiAKIAkvKiBOb3csIHJlc3RhcnQgdGhlIHRpbWViYXNlIGJ5IGxlYXZpbmcgdGhlIEdQSU8gdG8gYW4gb3BlbiBjb2xsZWN0b3IgKi8KICAgICAgICAJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfV1JJVEVfR1BJTywgTlVMTCwgY29yZTk5X3RiX2dwaW8sIDApOwpAQCAtODEwLDE5ICs4MTgsOSBAQAogfQogCiAKLS8qIENvcmU5OSBNYWNzIChkdWFsIEc0cyBhbmQgRzVzKSAqLwotc3RydWN0IHNtcF9vcHNfdCBjb3JlOTlfc21wX29wcyA9IHsKLQkubWVzc2FnZV9wYXNzCT0gc21wX21waWNfbWVzc2FnZV9wYXNzLAotCS5wcm9iZQkJPSBzbXBfY29yZTk5X3Byb2JlLAotCS5raWNrX2NwdQk9IHNtcF9jb3JlOTlfa2lja19jcHUsCi0JLnNldHVwX2NwdQk9IHNtcF9jb3JlOTlfc2V0dXBfY3B1LAotCS5naXZlX3RpbWViYXNlCT0gc21wX2NvcmU5OV9naXZlX3RpbWViYXNlLAotCS50YWtlX3RpbWViYXNlCT0gc21wX2NvcmU5OV90YWtlX3RpbWViYXNlLAotfTsKLQogI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKIAotaW50IF9fY3B1X2Rpc2FibGUodm9pZCkKK2ludCBzbXBfY29yZTk5X2NwdV9kaXNhYmxlKHZvaWQpCiB7CiAJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgY3B1X29ubGluZV9tYXApOwogCkBAIC04NDYsNyArODQ0LDcgQEAKIAlsb3dfY3B1X2RpZSgpOwogfQogCi12b2lkIF9fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQordm9pZCBzbXBfY29yZTk5X2NwdV9kaWUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgdGltZW91dDsKIApAQCAtODU4LDggKzg1NiwyMSBAQAogCQl9CiAJCW1zbGVlcCgxKTsKIAl9Ci0JY3B1X2NhbGxpbl9tYXBbY3B1XSA9IDA7CiAJY3B1X2RlYWRbY3B1XSA9IDA7CiB9CiAKICNlbmRpZgorCisvKiBDb3JlOTkgTWFjcyAoZHVhbCBHNHMgYW5kIEc1cykgKi8KK3N0cnVjdCBzbXBfb3BzX3QgY29yZTk5X3NtcF9vcHMgPSB7CisJLm1lc3NhZ2VfcGFzcwk9IHNtcF9tcGljX21lc3NhZ2VfcGFzcywKKwkucHJvYmUJCT0gc21wX2NvcmU5OV9wcm9iZSwKKwkua2lja19jcHUJPSBzbXBfY29yZTk5X2tpY2tfY3B1LAorCS5zZXR1cF9jcHUJPSBzbXBfY29yZTk5X3NldHVwX2NwdSwKKwkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfZ2l2ZV90aW1lYmFzZSwKKwkudGFrZV90aW1lYmFzZQk9IHNtcF9jb3JlOTlfdGFrZV90aW1lYmFzZSwKKyNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCisJLmNwdV9kaXNhYmxlCT0gc21wX2NvcmU5OV9jcHVfZGlzYWJsZSwKKwkuY3B1X2RpZQk9IHNtcF9jb3JlOTlfY3B1X2RpZSwKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCBiOTkzOGZlLi5lN2NhNWIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0zLDMgKzMsNSBAQAogb2JqLSQoQ09ORklHX1NNUCkJKz0gc21wLm8KIG9iai0kKENPTkZJR19JQk1WSU8pCSs9IHZpby5vCiBvYmotJChDT05GSUdfWElDUykJKz0geGljcy5vCitvYmotJChDT05GSUdfU0NBTkxPRykJKz0gc2NhbmxvZy5vCitvYmotJChDT05GSUdfRUVIKSAgICArPSBlZWgubyBlZWhfZXZlbnQubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXJjaC9wcGM2NC9rZXJuZWwvZWVoLmMKcmVuYW1lIHRvIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYwppbmRleCAwMzVkMWIxLi43OWRlMjMxIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTEsMzkgKzEsMzcgQEAKIC8qCiAgKiBlZWguYwogICogQ29weXJpZ2h0IChDKSAyMDAxIERhdmUgRW5nZWJyZXRzZW4gJiBUb2RkIEluZ2xldHQgSUJNIENvcnBvcmF0aW9uCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9lZWguaD4KKyNpbmNsdWRlIDxhc20vZWVoX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vcnRhcy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KKyNpbmNsdWRlIDxhc20vcnRhcy5oPgogCiAjdW5kZWYgREVCVUcKIApAQCAtNDksOCArNDcsOCBAQAogICogIHdlcmUgImVtcHR5IjogYWxsIHJlYWRzIHJldHVybiAweGZmJ3MgYW5kIGFsbCB3cml0ZXMgYXJlIHNpbGVudGx5CiAgKiAgaWdub3JlZC4gIEVFSCBzbG90IGlzb2xhdGlvbiBldmVudHMgY2FuIGJlIHRyaWdnZXJlZCBieSBwYXJpdHkKICAqICBlcnJvcnMgb24gdGhlIGFkZHJlc3Mgb3IgZGF0YSBidXNzZXMgKGUuZy4gZHVyaW5nIHBvc3RlZCB3cml0ZXMpLAotICogIHdoaWNoIGluIHR1cm4gbWlnaHQgYmUgY2F1c2VkIGJ5IGR1c3QsIHZpYnJhdGlvbiwgaHVtaWRpdHksCi0gKiAgcmFkaW9hY3Rpdml0eSBvciBwbGFpbi1vbGQgZmFpbGVkIGhhcmR3YXJlLgorICogIHdoaWNoIGluIHR1cm4gbWlnaHQgYmUgY2F1c2VkIGJ5IGxvdyB2b2x0YWdlIG9uIHRoZSBidXMsIGR1c3QsCisgKiAgdmlicmF0aW9uLCBodW1pZGl0eSwgcmFkaW9hY3Rpdml0eSBvciBwbGFpbi1vbGQgZmFpbGVkIGhhcmR3YXJlLgogICoKICAqICBOb3RlLCBob3dldmVyLCB0aGF0IG9uZSBvZiB0aGUgbGVhZGluZyBjYXVzZXMgb2YgRUVIIHNsb3QKICAqICBmcmVlemUgZXZlbnRzIGFyZSBidWdneSBkZXZpY2UgZHJpdmVycywgYnVnZ3kgZGV2aWNlIG1pY3JvY29kZSwKQEAgLTcxLDI2ICs2OSwxNSBAQAogICogIGFuZCBzZW50IG91dCBmb3IgcHJvY2Vzc2luZy4KICAqLwogCi0vKiogQnVzIFVuaXQgSUQgbWFjcm9zOyBnZXQgbG93IGFuZCBoaSAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgQlVJRCAqLwotI2RlZmluZSBCVUlEX0hJKGJ1aWQpICgoYnVpZCkgPj4gMzIpCi0jZGVmaW5lIEJVSURfTE8oYnVpZCkgKChidWlkKSAmIDB4ZmZmZmZmZmYpCi0KLS8qIEVFSCBldmVudCB3b3JrcXVldWUgc2V0dXAuICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVlaF9ldmVudGxpc3RfbG9jayk7Ci1MSVNUX0hFQUQoZWVoX2V2ZW50bGlzdCk7Ci1zdGF0aWMgdm9pZCBlZWhfZXZlbnRfaGFuZGxlcih2b2lkICopOwotREVDTEFSRV9XT1JLKGVlaF9ldmVudF93cSwgZWVoX2V2ZW50X2hhbmRsZXIsIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICplZWhfbm90aWZpZXJfY2hhaW47Ci0KLS8qCi0gKiBJZiBhIGRldmljZSBkcml2ZXIga2VlcHMgcmVhZGluZyBhbiBNTUlPIHJlZ2lzdGVyIGluIGFuIGludGVycnVwdAorLyogSWYgYSBkZXZpY2UgZHJpdmVyIGtlZXBzIHJlYWRpbmcgYW4gTU1JTyByZWdpc3RlciBpbiBhbiBpbnRlcnJ1cHQKICAqIGhhbmRsZXIgYWZ0ZXIgYSBzbG90IGlzb2xhdGlvbiBldmVudCBoYXMgb2NjdXJyZWQsIHdlIGFzc3VtZSBpdAogICogaXMgYnJva2VuIGFuZCBwYW5pYy4gIFRoaXMgc2V0cyB0aGUgdGhyZXNob2xkIGZvciBob3cgbWFueSByZWFkCiAgKiBhdHRlbXB0cyB3ZSBhbGxvdyBiZWZvcmUgcGFuaWNraW5nLgogICovCi0jZGVmaW5lIEVFSF9NQVhfRkFJTFMJMTAwMAotc3RhdGljIGF0b21pY190IGVlaF9mYWlsX2NvdW50OworI2RlZmluZSBFRUhfTUFYX0ZBSUxTCTEwMDAwMAorCisvKiBNaXNjIGZvcndhcmQgZGVjbGFyYWlvbnMgKi8KK3N0YXRpYyB2b2lkIGVlaF9zYXZlX2JhcnMoc3RydWN0IHBjaV9kZXYgKiBwZGV2LCBzdHJ1Y3QgcGNpX2RuICpwZG4pOwogCiAvKiBSVEFTIHRva2VucyAqLwogc3RhdGljIGludCBpYm1fc2V0X2VlaF9vcHRpb247CkBAIC0xMDEsMTIgKzg4LDE5IEBACiAKIHN0YXRpYyBpbnQgZWVoX3N1YnN5c3RlbV9lbmFibGVkOwogCisvKiBMb2NrIHRvIGF2b2lkIHJhY2VzIGR1ZSB0byBtdWx0aXBsZSByZXBvcnRzIG9mIGFuIGVycm9yICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpcm1fZXJyb3JfbG9jayk7CisKIC8qIEJ1ZmZlciBmb3IgcmVwb3J0aW5nIHNsb3QtZXJyb3ItZGV0YWlsIHJ0YXMgY2FsbHMgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNsb3RfZXJyYnVmW1JUQVNfRVJST1JfTE9HX01BWF07CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNsb3RfZXJyYnVmX2xvY2spOwogc3RhdGljIGludCBlZWhfZXJyb3JfYnVmX3NpemU7CiAKIC8qIFN5c3RlbSBtb25pdG9yaW5nIHN0YXRpc3RpY3MgKi8KK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBub19kZXZpY2UpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIG5vX2RuKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBub19jZmdfYWRkcik7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaWdub3JlZF9jaGVjayk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgdG90YWxfbW1pb19mZnMpOwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGZhbHNlX3Bvc2l0aXZlcyk7CiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaWdub3JlZF9mYWlsdXJlcyk7CkBAIC0yMjQsOSArMjE4LDkgQEAKIAl3aGlsZSAoKnApIHsKIAkJcGFyZW50ID0gKnA7CiAJCXBpYXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBwY2lfaW9fYWRkcl9yYW5nZSwgcmJfbm9kZSk7Ci0JCWlmIChhbG8gPCBwaWFyLT5hZGRyX2xvKSB7CisJCWlmIChhaGkgPCBwaWFyLT5hZGRyX2xvKSB7CiAJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKLQkJfSBlbHNlIGlmIChhaGkgPiBwaWFyLT5hZGRyX2hpKSB7CisJCX0gZWxzZSBpZiAoYWxvID4gcGlhci0+YWRkcl9oaSkgewogCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0OwogCQl9IGVsc2UgewogCQkJaWYgKGRldiAhPSBwaWFyLT5wY2lkZXYgfHwKQEAgLTI0NSw2ICsyMzksMTEgQEAKIAlwaWFyLT5wY2lkZXYgPSBkZXY7CiAJcGlhci0+ZmxhZ3MgPSBmbGFnczsKIAorI2lmZGVmIERFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlBJQVI6IGluc2VydCByYW5nZT1bJWx4OiVseF0gZGV2PSVzXG4iLAorCSAgICAgICAgICAgICAgICAgIGFsbywgYWhpLCBwY2lfbmFtZSAoZGV2KSk7CisjZW5kaWYKKwogCXJiX2xpbmtfbm9kZSgmcGlhci0+cmJfbm9kZSwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJnBpYXItPnJiX25vZGUsICZwY2lfaW9fYWRkcl9jYWNoZV9yb290LnJiX3Jvb3QpOwogCkBAIC0yNjAsMTggKzI1OSwxNyBAQAogCiAJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAlpZiAoIWRuKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogbm8gcGNpIGRuIGZvdW5kIGZvciBkZXY9JXNcbiIsCi0JCQlwY2lfbmFtZShkZXYpKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBubyBwY2kgZG4gZm91bmQgZm9yIGRldj0lc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBTa2lwIGFueSBkZXZpY2VzIGZvciB3aGljaCBFRUggaXMgbm90IGVuYWJsZWQuICovCi0JcGRuID0gZG4tPmRhdGE7CisJcGRuID0gUENJX0ROKGRuKTsKIAlpZiAoIShwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSB8fAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgewogI2lmZGVmIERFQlVHCi0JCXByaW50ayhLRVJOX0lORk8gIlBDSTogc2tpcCBidWlsZGluZyBhZGRyZXNzIGNhY2hlIGZvcj0lc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKGRldikpOworCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IHNraXAgYnVpbGRpbmcgYWRkcmVzcyBjYWNoZSBmb3I9JXMgLSAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKGRldiksIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQpAQCAtMzA3LDcgKzMwNSw3IEBACiAgKiB3ZSBtYWludGFpbiBhIGNhY2hlIG9mIGRldmljZXMgdGhhdCBjYW4gYmUgcXVpY2tseSBzZWFyY2hlZC4KICAqIFRoaXMgcm91dGluZSBhZGRzIGEgZGV2aWNlIHRvIHRoYXQgY2FjaGUuCiAgKi8KLXZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcGNpX2FkZHJfY2FjaGVfaW5zZXJ0X2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTM1MCw3ICszNDgsNyBAQAogICogdGhlIHRyZWUgbXVsdGlwbGUgdGltZXMgKG9uY2UgcGVyIHJlc291cmNlKS4KICAqIEJ1dCBzbyB3aGF0OyBkZXZpY2UgcmVtb3ZhbCBkb2Vzbid0IG5lZWQgdG8gYmUgdGhhdCBmYXN0LgogICovCi12b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNzAsOCArMzY4LDEyIEBACiAgKi8KIHZvaWQgX19pbml0IHBjaV9hZGRyX2NhY2hlX2J1aWxkKHZvaWQpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAorCWlmICghZWVoX3N1YnN5c3RlbV9lbmFibGVkKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaW5pdCgmcGNpX2lvX2FkZHJfY2FjaGVfcm9vdC5waWFyX2xvY2spOwogCiAJd2hpbGUgKChkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBkZXYpKSAhPSBOVUxMKSB7CkBAIC0zODAsNiArMzgyLDEwIEBACiAJCQljb250aW51ZTsKIAkJfQogCQlwY2lfYWRkcl9jYWNoZV9pbnNlcnRfZGV2aWNlKGRldik7CisKKwkJLyogU2F2ZSB0aGUgQkFSJ3M7IGZpcm13YXJlIGRvZXNuJ3QgcmVzdG9yZSB0aGVzZSBhZnRlciBFRUggcmVzZXQgKi8KKwkJZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKKwkJZWVoX3NhdmVfYmFycyhkZXYsIFBDSV9ETihkbikpOwogCX0KIAogI2lmZGVmIERFQlVHCkBAIC0zOTEsMjIgKzM5NywyNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBBYm92ZSBsaWVzIHRoZSBQQ0kgQWRkcmVzcyBDYWNoZS4gQmVsb3cgbGllcyB0aGUgRUVIIGV2ZW50IGluZnJhc3RydWN0dXJlICovCiAKLS8qKgotICogZWVoX3JlZ2lzdGVyX25vdGlmaWVyIC0gUmVnaXN0ZXIgdG8gZmluZCBvdXQgYWJvdXQgRUVIIGV2ZW50cy4KLSAqIEBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCi0gKi8KLWludCBlZWhfcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3ZvaWQgZWVoX3Nsb3RfZXJyb3JfZGV0YWlsIChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzZXZlcml0eSkKIHsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmVlaF9ub3RpZmllcl9jaGFpbiwgbmIpOwotfQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJjOwogCi0vKioKLSAqIGVlaF91bnJlZ2lzdGVyX25vdGlmaWVyIC0gVW5yZWdpc3RlciB0byBhbiBFRUggZXZlbnQgbm90aWZpZXIuCi0gKiBAbmI6IG5vdGlmaWVyIGJsb2NrIHRvIGNhbGxiYWNrIG9uIGV2ZW50cwotICovCi1pbnQgZWVoX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmZWVoX25vdGlmaWVyX2NoYWluLCBuYik7CisJLyogTG9nIHRoZSBlcnJvciB3aXRoIHRoZSBydGFzIGxvZ2dlciAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7CisJbWVtc2V0KHNsb3RfZXJyYnVmLCAwLCBlZWhfZXJyb3JfYnVmX3NpemUpOworCisJcmMgPSBydGFzX2NhbGwoaWJtX3Nsb3RfZXJyb3JfZGV0YWlsLAorCSAgICAgICAgICAgICAgIDgsIDEsIE5VTEwsIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAorCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAorCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpLCBOVUxMLCAwLAorCSAgICAgICAgICAgICAgIHZpcnRfdG9fcGh5cyhzbG90X2VycmJ1ZiksCisJICAgICAgICAgICAgICAgZWVoX2Vycm9yX2J1Zl9zaXplLAorCSAgICAgICAgICAgICAgIHNldmVyaXR5KTsKKworCWlmIChyYyA9PSAwKQorCQlsb2dfZXJyb3Ioc2xvdF9lcnJidWYsIEVSUl9UWVBFX1JUQVNfTE9HLCAwKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtNDE0LDE2ICs0MjQsMTYgQEAKICAqIEBkbjogZGV2aWNlIG5vZGUgdG8gcmVhZAogICogQHJldHM6IGFycmF5IHRvIHJldHVybiByZXN1bHRzIGluCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9zbG90X3Jlc2V0X3N0YXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCByZXRzW10pCitzdGF0aWMgaW50IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCByZXRzW10pCiB7CiAJaW50IHRva2VuLCBvdXRwdXRzOwotCXN0cnVjdCBwY2lfZG4gKnBkbiA9IGRuLT5kYXRhOwogCiAJaWYgKGlibV9yZWFkX3Nsb3RfcmVzZXRfc3RhdGUyICE9IFJUQVNfVU5LTk9XTl9TRVJWSUNFKSB7CiAJCXRva2VuID0gaWJtX3JlYWRfc2xvdF9yZXNldF9zdGF0ZTI7CiAJCW91dHB1dHMgPSA0OwogCX0gZWxzZSB7CiAJCXRva2VuID0gaWJtX3JlYWRfc2xvdF9yZXNldF9zdGF0ZTsKKwkJcmV0c1syXSA9IDA7IC8qIGZha2UgUEUgVW5hdmFpbGFibGUgaW5mbyAqLwogCQlvdXRwdXRzID0gMzsKIAl9CiAKQEAgLTQzMiw3NSArNDQyLDggQEAKIH0KIAogLyoqCi0gKiBlZWhfcGFuaWMgLSBjYWxsIHBhbmljKCkgZm9yIGFuIGVlaCBldmVudCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkLgotICogVGhlIHBoaWxvc29waHkgb2YgdGhpcyByb3V0aW5lIGlzIHRoYXQgaXQgaXMgYmV0dGVyIHRvIHBhbmljIGFuZAotICogaGFsdCB0aGUgT1MgdGhhbiBpdCBpcyB0byByaXNrIHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBieQotICogb2JsaXZpb3VzIGRldmljZSBkcml2ZXJzIHRoYXQgZG9uJ3Qga25vdyBiZXR0ZXIuCi0gKgotICogQGRldiBwY2kgZGV2aWNlIHRoYXQgaGFkIGFuIGVlaCBldmVudAotICogQHJlc2V0X3N0YXRlIGN1cnJlbnQgcmVzZXQgc3RhdGUgb2YgdGhlIGRldmljZSBzbG90Ci0gKi8KLXN0YXRpYyB2b2lkIGVlaF9wYW5pYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzZXRfc3RhdGUpCi17Ci0JLyoKLQkgKiBYWFggV2Ugc2hvdWxkIGNyZWF0ZSBhIHNlcGFyYXRlIHN5c2N0bCBmb3IgdGhpcy4KLQkgKgotCSAqIFNpbmNlIHRoZSBwYW5pY19vbl9vb3BzIHN5c2N0bCBpcyB1c2VkIHRvIGhhbHQgdGhlIHN5c3RlbQotCSAqIGluIGxpZ2h0IG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLCB3ZSBjYW4gdXNlIGl0IGhlcmUuCi0JICovCi0JaWYgKHBhbmljX29uX29vcHMpCi0JCXBhbmljKCJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTolc1xuIiwgcmVzZXRfc3RhdGUsCi0JCSAgICAgIHBjaV9uYW1lKGRldikpOwotCWVsc2UgewotCQlfX2dldF9jcHVfdmFyKGlnbm9yZWRfZmFpbHVyZXMpKys7Ci0JCXByaW50ayhLRVJOX0lORk8gIkVFSDogSWdub3JlZCBNTUlPIGZhaWx1cmUgKCVkKSBvbiBkZXZpY2U6JXNcbiIsCi0JCSAgICAgICByZXNldF9zdGF0ZSwgcGNpX25hbWUoZGV2KSk7Ci0JfQotfQotCi0vKioKLSAqIGVlaF9ldmVudF9oYW5kbGVyIC0gZGlzcGF0Y2ggRUVIIGV2ZW50cy4gIFRoZSBkZXRlY3Rpb24gb2YgYSBmcm96ZW4KLSAqIHNsb3QgY2FuIG9jY3VyIGluc2lkZSBhbiBpbnRlcnJ1cHQsIHdoZXJlIGl0IGNhbiBiZSBoYXJkIHRvIGRvCi0gKiBhbnl0aGluZyBhYm91dCBpdC4gIFRoZSBnb2FsIG9mIHRoaXMgcm91dGluZSBpcyB0byBwdWxsIHRoZXNlCi0gKiBkZXRlY3Rpb24gZXZlbnRzIG91dCBvZiB0aGUgY29udGV4dCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZAotICogcmUtZGlzcGF0Y2ggdGhlbSBmb3IgcHJvY2Vzc2luZyBhdCBhIGxhdGVyIHRpbWUgaW4gYSBub3JtYWwgY29udGV4dC4KLSAqCi0gKiBAZHVtbXkgLSB1bnVzZWQKLSAqLwotc3RhdGljIHZvaWQgZWVoX2V2ZW50X2hhbmRsZXIodm9pZCAqZHVtbXkpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgZWVoX2V2ZW50CSpldmVudDsKLQotCXdoaWxlICgxKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKLQkJZXZlbnQgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJmVlaF9ldmVudGxpc3QpKSB7Ci0JCQlldmVudCA9IGxpc3RfZW50cnkoZWVoX2V2ZW50bGlzdC5uZXh0LCBzdHJ1Y3QgZWVoX2V2ZW50LCBsaXN0KTsKLQkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JCWlmIChldmVudCA9PSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBNTUlPIGZhaWx1cmUgKCVkKSwgbm90aWZpeWluZyBkZXZpY2UgIgotCQkgICAgICAgIiVzXG4iLCBldmVudC0+cmVzZXRfc3RhdGUsCi0JCSAgICAgICBwY2lfbmFtZShldmVudC0+ZGV2KSk7Ci0KLQkJYXRvbWljX3NldCgmZWVoX2ZhaWxfY291bnQsIDApOwotCQlub3RpZmllcl9jYWxsX2NoYWluICgmZWVoX25vdGlmaWVyX2NoYWluLAotCQkJCSAgICAgRUVIX05PVElGWV9GUkVFWkUsIGV2ZW50KTsKLQotCQlfX2dldF9jcHVfdmFyKHNsb3RfcmVzZXRzKSsrOwotCi0JCXBjaV9kZXZfcHV0KGV2ZW50LT5kZXYpOwotCQlrZnJlZShldmVudCk7Ci0JfQotfQotCi0vKioKICAqIGVlaF90b2tlbl90b19waHlzIC0gY29udmVydCBFRUggYWRkcmVzcyB0b2tlbiB0byBwaHlzIGFkZHJlc3MKLSAqIEB0b2tlbiBpL28gdG9rZW4sIHNob3VsZCBiZSBhZGRyZXNzIGluIHRoZSBmb3JtIDB4RS4uLi4KKyAqIEB0b2tlbiBpL28gdG9rZW4sIHNob3VsZCBiZSBhZGRyZXNzIGluIHRoZSBmb3JtIDB4QS4uLi4KICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGVlaF90b2tlbl90b19waHlzKHVuc2lnbmVkIGxvbmcgdG9rZW4pCiB7CkBAIC01MTUsNiArNDU4LDcwIEBACiAJcmV0dXJuIHBhIHwgKHRva2VuICYgKFBBR0VfU0laRS0xKSk7CiB9CiAKKy8qKiAKKyAqIFJldHVybiB0aGUgInBhcnRpdGlvbmFibGUgZW5kcG9pbnQiIChwZSkgdW5kZXIgd2hpY2ggdGhpcyBkZXZpY2UgbGllcworICovCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICogZmluZF9kZXZpY2VfcGUoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3sKKwl3aGlsZSAoKGRuLT5wYXJlbnQpICYmIFBDSV9ETihkbi0+cGFyZW50KSAmJgorCSAgICAgIChQQ0lfRE4oZG4tPnBhcmVudCktPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSkgeworCQlkbiA9IGRuLT5wYXJlbnQ7CisJfQorCXJldHVybiBkbjsKK30KKworLyoqIE1hcmsgYWxsIGRldmljZXMgdGhhdCBhcmUgcGVlcnMgb2YgdGhpcyBkZXZpY2UgYXMgZmFpbGVkLgorICogIE1hcmsgdGhlIGRldmljZSBkcml2ZXIgdG9vLCBzbyB0aGF0IGl0IGNhbiBzZWUgdGhlIGZhaWx1cmUKKyAqICBpbW1lZGlhdGVseTsgdGhpcyBpcyBjcml0aWNhbCwgc2luY2Ugc29tZSBkcml2ZXJzIHBvbGwKKyAqICBzdGF0dXMgcmVnaXN0ZXJzIGluIGludGVycnVwdHMgLi4uIElmIGEgZHJpdmVyIGlzIHBvbGxpbmcsCisgKiAgYW5kIHRoZSBzbG90IGlzIGZyb3plbiwgdGhlbiB0aGUgZHJpdmVyIGNhbiBkZWFkbG9jayBpbgorICogIGFuIGludGVycnVwdCBjb250ZXh0LCB3aGljaCBpcyBiYWQuCisgKi8KKworc3RhdGljIHZvaWQgX19lZWhfbWFya19zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKQoreworCXdoaWxlIChkbikgeworCQlpZiAoUENJX0ROKGRuKSkgeworCQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gbW9kZV9mbGFnOworCisJCQlpZiAoZG4tPmNoaWxkKQorCQkJCV9fZWVoX21hcmtfc2xvdCAoZG4tPmNoaWxkLCBtb2RlX2ZsYWcpOworCQl9CisJCWRuID0gZG4tPnNpYmxpbmc7CisJfQorfQorCit2b2lkIGVlaF9tYXJrX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOworCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IG1vZGVfZmxhZzsKKwlfX2VlaF9tYXJrX3Nsb3QgKGRuLT5jaGlsZCwgbW9kZV9mbGFnKTsKK30KKworc3RhdGljIHZvaWQgX19lZWhfY2xlYXJfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZykKK3sKKwl3aGlsZSAoZG4pIHsKKwkJaWYgKFBDSV9ETihkbikpIHsKKwkJCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5tb2RlX2ZsYWc7CisJCQlQQ0lfRE4oZG4pLT5lZWhfY2hlY2tfY291bnQgPSAwOworCQkJaWYgKGRuLT5jaGlsZCkKKwkJCQlfX2VlaF9jbGVhcl9zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7CisJCX0KKwkJZG4gPSBkbi0+c2libGluZzsKKwl9Cit9CisKK3ZvaWQgZWVoX2NsZWFyX3Nsb3QgKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGludCBtb2RlX2ZsYWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJZG4gPSBmaW5kX2RldmljZV9wZSAoZG4pOworCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5tb2RlX2ZsYWc7CisJUENJX0ROKGRuKS0+ZWVoX2NoZWNrX2NvdW50ID0gMDsKKwlfX2VlaF9jbGVhcl9zbG90IChkbi0+Y2hpbGQsIG1vZGVfZmxhZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7Cit9CisKIC8qKgogICogZWVoX2RuX2NoZWNrX2ZhaWx1cmUgLSBjaGVjayBpZiBhbGwgMSdzIGRhdGEgaXMgZHVlIHRvIEVFSCBzbG90IGZyZWV6ZQogICogQGRuIGRldmljZSBub2RlCkBAIC01MjYsNyArNTMzLDcgQEAKICAqIHdpbGwgcXVlcnkgZmlybXdhcmUgZm9yIHRoZSBFRUggc3RhdHVzLgogICoKICAqIFJldHVybnMgMCBpZiB0aGVyZSBoYXMgbm90IGJlZW4gYW4gRUVIIGVycm9yOyBvdGhlcndpc2UgcmV0dXJucwotICogYSBub24temVybyB2YWx1ZSBhbmQgcXVldWVzIHVwIGEgc29sdCBpc29sYXRpb24gZXZlbnQgbm90aWZpY2F0aW9uLgorICogYSBub24temVybyB2YWx1ZSBhbmQgcXVldWVzIHVwIGEgc2xvdCBpc29sYXRpb24gZXZlbnQgbm90aWZpY2F0aW9uLgogICoKICAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIHJvdXRpbmUgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQuCiAgKi8KQEAgLTUzNSw0MiArNTQyLDU5IEBACiAJaW50IHJldDsKIAlpbnQgcmV0c1szXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYywgcmVzZXRfc3RhdGU7Ci0Jc3RydWN0IGVlaF9ldmVudCAgKmV2ZW50OwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKKwlpbnQgcmMgPSAwOwogCiAJX19nZXRfY3B1X3Zhcih0b3RhbF9tbWlvX2ZmcykrKzsKIAogCWlmICghZWVoX3N1YnN5c3RlbV9lbmFibGVkKQogCQlyZXR1cm4gMDsKIAotCWlmICghZG4pCisJaWYgKCFkbikgeworCQlfX2dldF9jcHVfdmFyKG5vX2RuKSsrOwogCQlyZXR1cm4gMDsKLQlwZG4gPSBkbi0+ZGF0YTsKKwl9CisJcGRuID0gUENJX0ROKGRuKTsKIAogCS8qIEFjY2VzcyB0byBJTyBCQVJzIG1pZ2h0IGdldCB0aGlzIGZhciBhbmQgc3RpbGwgbm90IHdhbnQgY2hlY2tpbmcuICovCi0JaWYgKCFwZG4tPmVlaF9jYXBhYmxlIHx8ICEocGRuLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkgfHwKKwlpZiAoIShwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfU1VQUE9SVEVEKSB8fAogCSAgICBwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfTk9DSEVDSykgeworCQlfX2dldF9jcHVfdmFyKGlnbm9yZWRfY2hlY2spKys7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRrICgiRUVIOmlnbm9yZWQgY2hlY2sgKCV4KSBmb3IgJXMgJXNcbiIsIAorCQkgICAgICAgIHBkbi0+ZWVoX21vZGUsIHBjaV9uYW1lIChkZXYpLCBkbi0+ZnVsbF9uYW1lKTsKKyNlbmRpZgogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoIXBkbi0+ZWVoX2NvbmZpZ19hZGRyKSB7CisJCV9fZ2V0X2NwdV92YXIobm9fY2ZnX2FkZHIpKys7CiAJCXJldHVybiAwOwogCX0KIAotCS8qCi0JICogSWYgd2UgYWxyZWFkeSBoYXZlIGEgcGVuZGluZyBpc29sYXRpb24gZXZlbnQgZm9yIHRoaXMKLQkgKiBzbG90LCB3ZSBrbm93IGl0J3MgYmFkIGFscmVhZHksIHdlIGRvbid0IG5lZWQgdG8gY2hlY2suLi4KKwkvKiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwZW5kaW5nIGlzb2xhdGlvbiBldmVudCBmb3IgdGhpcworCSAqIHNsb3QsIHdlIGtub3cgaXQncyBiYWQgYWxyZWFkeSwgd2UgZG9uJ3QgbmVlZCB0byBjaGVjay4KKwkgKiBEbyB0aGlzIGNoZWNraW5nIHVuZGVyIGEgbG9jazsgYXMgbXVsdGlwbGUgUENJIGRldmljZXMKKwkgKiBpbiBvbmUgc2xvdCBtaWdodCByZXBvcnQgZXJyb3JzIHNpbXVsdGFuZW91c2x5LCBhbmQgd2UKKwkgKiBvbmx5IHdhbnQgb25lIGVycm9yIHJlY292ZXJ5IHJvdXRpbmUgcnVubmluZy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmMgPSAxOwogCWlmIChwZG4tPmVlaF9tb2RlICYgRUVIX01PREVfSVNPTEFURUQpIHsKLQkJYXRvbWljX2luYygmZWVoX2ZhaWxfY291bnQpOwotCQlpZiAoYXRvbWljX3JlYWQoJmVlaF9mYWlsX2NvdW50KSA+PSBFRUhfTUFYX0ZBSUxTKSB7CisJCXBkbi0+ZWVoX2NoZWNrX2NvdW50ICsrOworCQlpZiAocGRuLT5lZWhfY2hlY2tfY291bnQgPj0gRUVIX01BWF9GQUlMUykgeworCQkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBEZXZpY2UgZHJpdmVyIGlnbm9yZWQgJWQgYmFkIHJlYWRzLCBwYW5pY2luZ1xuIiwKKwkJCSAgICAgICAgcGRuLT5lZWhfY2hlY2tfY291bnQpOworCQkJZHVtcF9zdGFjaygpOworCQkJCiAJCQkvKiByZS1yZWFkIHRoZSBzbG90IHJlc2V0IHN0YXRlICovCi0JCQlpZiAocmVhZF9zbG90X3Jlc2V0X3N0YXRlKGRuLCByZXRzKSAhPSAwKQorCQkJaWYgKHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpICE9IDApCiAJCQkJcmV0c1swXSA9IC0xOwkvKiByZXNldCBzdGF0ZSB1bmtub3duICovCi0JCQllZWhfcGFuaWMoZGV2LCByZXRzWzBdKTsKKworCQkJLyogSWYgd2UgYXJlIGhlcmUsIHRoZW4gd2UgaGl0IGFuIGluZmluaXRlIGxvb3AuIFN0b3AuICovCisJCQlwYW5pYygiRUVIOiBNTUlPIGhhbHQgKCVkKSBvbiBkZXZpY2U6JXNcbiIsIHJldHNbMF0sIHBjaV9uYW1lKGRldikpOwogCQl9Ci0JCXJldHVybiAwOworCQlnb3RvIGRuX3VubG9jazsKIAl9CiAKIAkvKgpAQCAtNTgwLDY2ICs2MDQsNjkgQEAKIAkgKiBmdW5jdGlvbiB6ZXJvIG9mIGEgbXVsdGktZnVuY3Rpb24gZGV2aWNlLgogCSAqIEluIGFueSBjYXNlIHRoZXkgbXVzdCBzaGFyZSBhIGNvbW1vbiBQSEIuCiAJICovCi0JcmV0ID0gcmVhZF9zbG90X3Jlc2V0X3N0YXRlKGRuLCByZXRzKTsKLQlpZiAoIShyZXQgPT0gMCAmJiByZXRzWzFdID09IDEgJiYgKHJldHNbMF0gPT0gMiB8fCByZXRzWzBdID09IDQpKSkgeworCXJldCA9IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpOworCisJLyogSWYgdGhlIGNhbGwgdG8gZmlybXdhcmUgZmFpbGVkLCBwdW50ICovCisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogcmVhZF9zbG90X3Jlc2V0X3N0YXRlKCkgZmFpbGVkOyByYz0lZCBkbj0lc1xuIiwKKwkJICAgICAgIHJldCwgZG4tPmZ1bGxfbmFtZSk7CiAJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOwotCQlyZXR1cm4gMDsKKwkJcmMgPSAwOworCQlnb3RvIGRuX3VubG9jazsKIAl9CiAKLQkvKiBwcmV2ZW50IHJlcGVhdGVkIHJlcG9ydHMgb2YgdGhpcyBmYWlsdXJlICovCi0JcGRuLT5lZWhfbW9kZSB8PSBFRUhfTU9ERV9JU09MQVRFRDsKKwkvKiBJZiBFRUggaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSwgcHVudC4gKi8KKwlpZiAocmV0c1sxXSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVFSDogZXZlbnQgb24gdW5zdXBwb3J0ZWQgZGV2aWNlLCByYz0lZCBkbj0lc1xuIiwKKwkJICAgICAgIHJldCwgZG4tPmZ1bGxfbmFtZSk7CisJCV9fZ2V0X2NwdV92YXIoZmFsc2VfcG9zaXRpdmVzKSsrOworCQlyYyA9IDA7CisJCWdvdG8gZG5fdW5sb2NrOworCX0KIAotCXJlc2V0X3N0YXRlID0gcmV0c1swXTsKKwkvKiBJZiBub3QgdGhlIGtpbmQgb2YgZXJyb3Igd2Uga25vdyBhYm91dCwgcHVudC4gKi8KKwlpZiAocmV0c1swXSAhPSAyICYmIHJldHNbMF0gIT0gNCAmJiByZXRzWzBdICE9IDUpIHsKKwkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CisJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNsb3RfZXJyYnVmX2xvY2ssIGZsYWdzKTsKLQltZW1zZXQoc2xvdF9lcnJidWYsIDAsIGVlaF9lcnJvcl9idWZfc2l6ZSk7CisJLyogTm90ZSB0aGF0IGNvbmZpZy1pbyB0byBlbXB0eSBzbG90cyBtYXkgZmFpbDsKKwkgKiB3ZSByZWNvZ25pemUgZW1wdHkgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgY2hpbGRyZW4uICovCisJaWYgKChyZXRzWzBdID09IDUpICYmIChkbi0+Y2hpbGQgPT0gTlVMTCkpIHsKKwkJX19nZXRfY3B1X3ZhcihmYWxzZV9wb3NpdGl2ZXMpKys7CisJCXJjID0gMDsKKwkJZ290byBkbl91bmxvY2s7CisJfQogCi0JcmMgPSBydGFzX2NhbGwoaWJtX3Nsb3RfZXJyb3JfZGV0YWlsLAotCSAgICAgICAgICAgICAgIDgsIDEsIE5VTEwsIHBkbi0+ZWVoX2NvbmZpZ19hZGRyLAotCSAgICAgICAgICAgICAgIEJVSURfSEkocGRuLT5waGItPmJ1aWQpLAotCSAgICAgICAgICAgICAgIEJVSURfTE8ocGRuLT5waGItPmJ1aWQpLCBOVUxMLCAwLAotCSAgICAgICAgICAgICAgIHZpcnRfdG9fcGh5cyhzbG90X2VycmJ1ZiksCi0JICAgICAgICAgICAgICAgZWVoX2Vycm9yX2J1Zl9zaXplLAotCSAgICAgICAgICAgICAgIDEgLyogVGVtcG9yYXJ5IEVycm9yICovKTsKKwlfX2dldF9jcHVfdmFyKHNsb3RfcmVzZXRzKSsrOworIAorCS8qIEF2b2lkIHJlcGVhdGVkIHJlcG9ydHMgb2YgdGhpcyBmYWlsdXJlLCBpbmNsdWRpbmcgcHJvYmxlbXMKKwkgKiB3aXRoIG90aGVyIGZ1bmN0aW9ucyBvbiB0aGlzIGRldmljZSwgYW5kIGZ1bmN0aW9ucyB1bmRlcgorCSAqIGJyaWRnZXMuICovCisJZWVoX21hcmtfc2xvdCAoZG4sIEVFSF9NT0RFX0lTT0xBVEVEKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25maXJtX2Vycm9yX2xvY2ssIGZsYWdzKTsKIAotCWlmIChyYyA9PSAwKQotCQlsb2dfZXJyb3Ioc2xvdF9lcnJidWYsIEVSUl9UWVBFX1JUQVNfTE9HLCAwKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbG90X2VycmJ1Zl9sb2NrLCBmbGFncyk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJFRUg6IE1NSU8gZmFpbHVyZSAoJWQpIG9uIGRldmljZTogJXMgJXNcbiIsCi0JICAgICAgIHJldHNbMF0sIGRuLT5uYW1lLCBkbi0+ZnVsbF9uYW1lKTsKLQlldmVudCA9IGttYWxsb2Moc2l6ZW9mKCpldmVudCksIEdGUF9BVE9NSUMpOwotCWlmIChldmVudCA9PSBOVUxMKSB7Ci0JCWVlaF9wYW5pYyhkZXYsIHJlc2V0X3N0YXRlKTsKLQkJcmV0dXJuIDE7Ci0gCX0KLQotCWV2ZW50LT5kZXYgPSBkZXY7Ci0JZXZlbnQtPmRuID0gZG47Ci0JZXZlbnQtPnJlc2V0X3N0YXRlID0gcmVzZXRfc3RhdGU7Ci0KLQkvKiBXZSBtYXkgb3IgbWF5IG5vdCBiZSBjYWxsZWQgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGQoJmV2ZW50LT5saXN0LCAmZWVoX2V2ZW50bGlzdCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7Ci0KKwllZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChkbiwgZGV2LCByZXRzWzBdLCByZXRzWzJdKTsKKwkKIAkvKiBNb3N0IEVFSCBldmVudHMgYXJlIGR1ZSB0byBkZXZpY2UgZHJpdmVyIGJ1Z3MuICBIYXZpbmcKIAkgKiBhIHN0YWNrIHRyYWNlIHdpbGwgaGVscCB0aGUgZGV2aWNlLWRyaXZlciBhdXRob3JzIGZpZ3VyZQogCSAqIG91dCB3aGF0IGhhcHBlbmVkLiAgU28gcHJpbnQgdGhhdCBvdXQuICovCi0JZHVtcF9zdGFjaygpOwotCXNjaGVkdWxlX3dvcmsoJmVlaF9ldmVudF93cSk7CisJaWYgKHJldHNbMF0gIT0gNSkgZHVtcF9zdGFjaygpOworCXJldHVybiAxOwogCi0JcmV0dXJuIDA7Citkbl91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZmlybV9lcnJvcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOwogfQogCi1FWFBPUlRfU1lNQk9MKGVlaF9kbl9jaGVja19mYWlsdXJlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9kbl9jaGVja19mYWlsdXJlKTsKIAogLyoqCiAgKiBlZWhfY2hlY2tfZmFpbHVyZSAtIGNoZWNrIGlmIGFsbCAxJ3MgZGF0YSBpcyBkdWUgdG8gRUVIIHNsb3QgZnJlZXplCiAgKiBAdG9rZW4gaS9vIHRva2VuLCBzaG91bGQgYmUgYWRkcmVzcyBpbiB0aGUgZm9ybSAweEEuLi4uCiAgKiBAdmFsIHZhbHVlLCBzaG91bGQgYmUgYWxsIDEncyAoWFhYIHdoeSBkbyB3ZSBuZWVkIHRoaXMgYXJnPz8pCiAgKgotICogQ2hlY2sgZm9yIGFuIGVlaCBmYWlsdXJlIGF0IHRoZSBnaXZlbiB0b2tlbiBhZGRyZXNzLgogICogQ2hlY2sgZm9yIGFuIEVFSCBmYWlsdXJlIGF0IHRoZSBnaXZlbiB0b2tlbiBhZGRyZXNzLiAgQ2FsbCB0aGlzCiAgKiByb3V0aW5lIGlmIHRoZSByZXN1bHQgb2YgYSByZWFkIHdhcyBhbGwgMHhmZidzIGFuZCB5b3Ugd2FudCB0bwogICogZmluZCBvdXQgaWYgdGhpcyBpcyBkdWUgdG8gYW4gRUVIIHNsb3QgZnJlZXplIGV2ZW50LiAgVGhpcyByb3V0aW5lCkBAIC02NTYsOCArNjgzLDEwIEBACiAJLyogRmluZGluZyB0aGUgcGh5cyBhZGRyICsgcGNpIGRldmljZTsgdGhpcyBpcyBwcmV0dHkgcXVpY2suICovCiAJYWRkciA9IGVlaF90b2tlbl90b19waHlzKCh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIHRva2VuKTsKIAlkZXYgPSBwY2lfZ2V0X2RldmljZV9ieV9hZGRyKGFkZHIpOwotCWlmICghZGV2KQorCWlmICghZGV2KSB7CisJCV9fZ2V0X2NwdV92YXIobm9fZGV2aWNlKSsrOwogCQlyZXR1cm4gdmFsOworCX0KIAogCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAJZWVoX2RuX2NoZWNrX2ZhaWx1cmUgKGRuLCBkZXYpOwpAQCAtNjY4LDYgKzY5NywyMTcgQEAKIAogRVhQT1JUX1NZTUJPTChlZWhfY2hlY2tfZmFpbHVyZSk7CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBjb2RlIGJlbG93IGRlYWxzIHdpdGggZXJyb3IgcmVjb3ZlcnkgKi8KKworLyoqIFJldHVybiBuZWdhdGl2ZSB2YWx1ZSBpZiBhIHBlcm1hbmVudCBlcnJvciwgZWxzZSByZXR1cm4KKyAqIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IHVudGlsIHRoZSBQQ0kgc2xvdCBpcworICogcmVhZHkgdG8gYmUgdXNlZC4KKyAqLworc3RhdGljIGludAorZWVoX3Nsb3RfYXZhaWxhYmlsaXR5KHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgcmM7CisJaW50IHJldHNbM107CisKKwlyYyA9IHJlYWRfc2xvdF9yZXNldF9zdGF0ZShwZG4sIHJldHMpOworCisJaWYgKHJjKSByZXR1cm4gcmM7CisKKwlpZiAocmV0c1sxXSA9PSAwKSByZXR1cm4gLTE7ICAvKiBFRUggaXMgbm90IHN1cHBvcnRlZCAqLworCWlmIChyZXRzWzBdID09IDApICByZXR1cm4gMDsgIC8qIE9sbCBLb3JyZWN0ICovCisJaWYgKHJldHNbMF0gPT0gNSkgeworCQlpZiAocmV0c1syXSA9PSAwKSByZXR1cm4gLTE7IC8qIHBlcm1hbmVudGx5IHVuYXZhaWxhYmxlICovCisJCXJldHVybiByZXRzWzJdOyAvKiBudW1iZXIgb2YgbWlsbGlzZWNzIHRvIHdhaXQgKi8KKwl9CisJcmV0dXJuIC0xOworfQorCisvKiogcnRhc19wY2lfc2xvdF9yZXNldCByYWlzZXMvbG93ZXJzIHRoZSBwY2kgI1JTVCBsaW5lCisgKiAgc3RhdGU6IDEvMCB0byByYWlzZS9sb3dlciB0aGUgI1JTVAorICoKKyAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKKyAqIGFzc2VydHMgdGhlIFBDSSAjUlNUIGxpbmUgaWYgdGhlICdzdGF0ZScgYXJndW1lbnQgaXMgJzEnLAorICogYW5kIGRyb3BzIHRoZSAjUlNUIGxpbmUgaWYgJ3N0YXRlIGlzICcwJy4gIFRoaXMgcm91dGluZSBpcworICogc2FmZSB0byBjYWxsIGluIGFuIGludGVycnVwdCBjb250ZXh0LgorICoKKyAqLworCitzdGF0aWMgdm9pZAorcnRhc19wY2lfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RuICpwZG4sIGludCBzdGF0ZSkKK3sKKwlpbnQgcmM7CisKKwlCVUdfT04gKHBkbj09TlVMTCk7IAorCisJaWYgKCFwZG4tPnBoYikgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBpbiBzbG90IHJlc2V0LCBkZXZpY2Ugbm9kZSAlcyBoYXMgbm8gcGhiXG4iLAorCQkgICAgICAgIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXJjID0gcnRhc19jYWxsKGlibV9zZXRfc2xvdF9yZXNldCw0LDEsIE5VTEwsCisJICAgICAgICAgICAgICAgcGRuLT5lZWhfY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgc3RhdGUpOworCWlmIChyYykgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gcmVzZXQgdGhlIGZhaWxlZCBzbG90LCAoJWQpICNSU1Q9JWQgZG49JXNcbiIsIAorCQkgICAgICAgIHJjLCBzdGF0ZSwgcGRuLT5ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm47CisJfQorfQorCisvKiogcnRhc19zZXRfc2xvdF9yZXNldCAtLSBhc3NlcnQgdGhlIHBjaSAjUlNUIGxpbmUgZm9yIDEvNCBzZWNvbmQKKyAqICBkbiAtLSBkZXZpY2Ugbm9kZSB0byBiZSByZXNldC4KKyAqLworCit2b2lkCitydGFzX3NldF9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgaSwgcmM7CisKKwlydGFzX3BjaV9zbG90X3Jlc2V0IChwZG4sIDEpOworCisJLyogVGhlIFBDSSBidXMgcmVxdWlyZXMgdGhhdCB0aGUgcmVzZXQgYmUgaGVsZCBoaWdoIGZvciBhdCBsZWFzdAorCSAqIGEgMTAwIG1pbGxpc2Vjb25kcy4gV2Ugd2FpdCBhIGJpdCBsb25nZXIgJ2p1c3QgaW4gY2FzZScuICAqLworCisjZGVmaW5lIFBDSV9CVVNfUlNUX0hPTERfVElNRV9NU0VDIDI1MAorCW1zbGVlcCAoUENJX0JVU19SU1RfSE9MRF9USU1FX01TRUMpOworCQorCS8qIFdlIG1pZ2h0IGdldCBoaXQgd2l0aCBhbm90aGVyIEVFSCBmcmVlemUgYXMgc29vbiBhcyB0aGUgCisJICogcGNpIHNsb3QgcmVzZXQgbGluZSBpcyBkcm9wcGVkLiBNYWtlIHN1cmUgd2UgZG9uJ3QgbWlzcworCSAqIHRoZXNlLCBhbmQgY2xlYXIgdGhlIGZsYWcgbm93LiAqLworCWVlaF9jbGVhcl9zbG90IChwZG4tPm5vZGUsIEVFSF9NT0RFX0lTT0xBVEVEKTsKKworCXJ0YXNfcGNpX3Nsb3RfcmVzZXQgKHBkbiwgMCk7CisKKwkvKiBBZnRlciBhIFBDSSBzbG90IGhhcyBiZWVuIHJlc2V0LCB0aGUgUENJIEV4cHJlc3Mgc3BlYyByZXF1aXJlcworCSAqIGEgMS41IHNlY29uZCBpZGxlIHRpbWUgZm9yIHRoZSBidXMgdG8gc3RhYmlsaXplLCBiZWZvcmUgc3RhcnRpbmcKKwkgKiB1cCB0cmFmZmljLiAqLworI2RlZmluZSBQQ0lfQlVTX1NFVFRMRV9USU1FX01TRUMgMTgwMAorCW1zbGVlcCAoUENJX0JVU19TRVRUTEVfVElNRV9NU0VDKTsKKworCS8qIE5vdyBkb3VibGUgY2hlY2sgd2l0aCB0aGUgZmlybXdhcmUgdG8gbWFrZSBzdXJlIHRoZSBkZXZpY2UgaXMKKwkgKiByZWFkeSB0byBiZSB1c2VkOyBpZiBub3QsIHdhaXQgZm9yIHJlY292ZXJ5LiAqLworCWZvciAoaT0wOyBpPDEwOyBpKyspIHsKKwkJcmMgPSBlZWhfc2xvdF9hdmFpbGFiaWxpdHkgKHBkbik7CisJCWlmIChyYyA8PSAwKSBicmVhazsKKworCQltc2xlZXAgKHJjKzEwMCk7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiogU2F2ZSBhbmQgcmVzdG9yZSBvZiBQQ0kgQkFScworICoKKyAqIEFsdGhvdWdoIGZpcm13YXJlIHdpbGwgc2V0IHVwIEJBUnMgZHVyaW5nIGJvb3QsIGl0IGRvZXNuJ3QKKyAqIHNldCB1cCBkZXZpY2UgQkFSJ3MgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQsIGFsdGhvdWdoIGl0IHdpbGwsCisgKiBpZiByZXF1ZXN0ZWQsIHNldCB1cCBicmlkZ2UgY29uZmlndXJhdGlvbi4gVGh1cywgd2UgbmVlZCB0bworICogY29uZmlndXJlIHRoZSBQQ0kgZGV2aWNlcyBvdXJzZWx2ZXMuICAKKyAqLworCisvKioKKyAqIF9fcmVzdG9yZV9iYXJzIC0gUmVzdG9yZSB0aGUgQmFzZSBBZGRyZXNzIFJlZ2lzdGVycworICogTG9hZHMgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGJhc2UgYWRkcmVzcyByZWdpc3RlcnMsCisgKiB0aGUgZXhwYW5zaW9uIFJPTSBiYXNlIGFkZHJlc3MsIHRoZSBsYXRlbmN5IHRpbWVyLCBhbmQgZXRjLgorICogZnJvbSB0aGUgc2F2ZWQgdmFsdWVzIGluIHRoZSBkZXZpY2Ugbm9kZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fcmVzdG9yZV9iYXJzIChzdHJ1Y3QgcGNpX2RuICpwZG4pCit7CisJaW50IGk7CisKKwlpZiAoTlVMTD09cGRuLT5waGIpIHJldHVybjsKKwlmb3IgKGk9NDsgaTwxMDsgaSsrKSB7CisJCXJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgaSo0LCA0LCBwZG4tPmNvbmZpZ19zcGFjZVtpXSk7CisJfQorCisJLyogMTIgPT0gRXhwYW5zaW9uIFJPTSBBZGRyZXNzICovCisJcnRhc193cml0ZV9jb25maWcocGRuLCAxMio0LCA0LCBwZG4tPmNvbmZpZ19zcGFjZVsxMl0pOworCisjZGVmaW5lIEJZVEVfU1dBUChPRkYpICg4KigoT0ZGKS80KSszLShPRkYpKQorI2RlZmluZSBTQVZFRF9CWVRFKE9GRikgKCgodTggKikocGRuLT5jb25maWdfc3BhY2UpKVtCWVRFX1NXQVAoT0ZGKV0pCisKKwlydGFzX3dyaXRlX2NvbmZpZyAocGRuLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAxLAorCSAgICAgICAgICAgIFNBVkVEX0JZVEUoUENJX0NBQ0hFX0xJTkVfU0laRSkpOworCisJcnRhc193cml0ZV9jb25maWcgKHBkbiwgUENJX0xBVEVOQ1lfVElNRVIsIDEsCisJICAgICAgICAgICAgU0FWRURfQllURShQQ0lfTEFURU5DWV9USU1FUikpOworCisJLyogbWF4IGxhdGVuY3ksIG1pbiBncmFudCwgaW50ZXJydXB0IHBpbiBhbmQgbGluZSAqLworCXJ0YXNfd3JpdGVfY29uZmlnKHBkbiwgMTUqNCwgNCwgcGRuLT5jb25maWdfc3BhY2VbMTVdKTsKK30KKworLyoqCisgKiBlZWhfcmVzdG9yZV9iYXJzIC0gcmVzdG9yZSB0aGUgUENJIGNvbmZpZyBzcGFjZSBpbmZvCisgKgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIGEgcmVjdXJzaXZlIHdhbGsgdG8gdGhlIGNoaWxkcmVuCisgKiBvZiB0aGlzIGRldmljZSBhcyB3ZWxsLgorICovCit2b2lkIGVlaF9yZXN0b3JlX2JhcnMoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CisJaWYgKCFwZG4pIAorCQlyZXR1cm47CisJCisJaWYgKCEgcGRuLT5lZWhfaXNfYnJpZGdlKQorCQlfX3Jlc3RvcmVfYmFycyAocGRuKTsKKworCWRuID0gcGRuLT5ub2RlLT5jaGlsZDsKKwl3aGlsZSAoZG4pIHsKKwkJZWVoX3Jlc3RvcmVfYmFycyAoUENJX0ROKGRuKSk7CisJCWRuID0gZG4tPnNpYmxpbmc7CisJfQorfQorCisvKioKKyAqIGVlaF9zYXZlX2JhcnMgLSBzYXZlIGRldmljZSBiYXJzCisgKgorICogU2F2ZSB0aGUgdmFsdWVzIG9mIHRoZSBkZXZpY2UgYmFycy4gVW5saWtlIHRoZSByZXN0b3JlCisgKiByb3V0aW5lLCB0aGlzIHJvdXRpbmUgaXMgKm5vdCogcmVjdXJzaXZlLiBUaGlzIGlzIGJlY2F1c2UKKyAqIFBDSSBkZXZpY2VzIGFyZSBhZGRlZCBpbmRpdmlkdWFsbGx5OyBidXQsIGZvciB0aGUgcmVzdG9yZSwKKyAqIGFuIGVudGlyZSBzbG90IGlzIHJlc2V0IGF0IGEgdGltZS4KKyAqLworc3RhdGljIHZvaWQgZWVoX3NhdmVfYmFycyhzdHJ1Y3QgcGNpX2RldiAqIHBkZXYsIHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgaTsKKworCWlmICghcGRldiB8fCAhcGRuICkKKwkJcmV0dXJuOworCQorCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgaSAqIDQsICZwZG4tPmNvbmZpZ19zcGFjZVtpXSk7CisKKwlpZiAocGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJcGRuLT5lZWhfaXNfYnJpZGdlID0gMTsKK30KKwordm9pZAorcnRhc19jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfZG4gKnBkbikKK3sKKwlpbnQgdG9rZW4gPSBydGFzX3Rva2VuICgiaWJtLGNvbmZpZ3VyZS1icmlkZ2UiKTsKKwlpbnQgcmM7CisKKwlpZiAodG9rZW4gPT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXJldHVybjsKKwlyYyA9IHJ0YXNfY2FsbCh0b2tlbiwzLDEsIE5VTEwsCisJICAgICAgICAgICAgICAgcGRuLT5lZWhfY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCkpOworCWlmIChyYykgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gY29uZmlndXJlIGRldmljZSBicmlkZ2UgKCVkKSBmb3IgJXNcbiIsCisJCSAgICAgICAgcmMsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIFRoZSBjb2RlIGJlbG93IGRlYWxzIHdpdGggZW5hYmxpbmcgRUVIIGZvciBkZXZpY2VzIGR1cmluZyAgdGhlCisgKiBlYXJseSBib290IHNlcXVlbmNlLiAgRUVIIG11c3QgYmUgZW5hYmxlZCBiZWZvcmUgYW55IFBDSSBwcm9iaW5nCisgKiBjYW4gYmUgZG9uZS4KKyAqLworCisjZGVmaW5lIEVFSF9FTkFCTEUgMQorCiBzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIHsKIAl1bnNpZ25lZCBpbnQgYnVpZF9oaTsKIAl1bnNpZ25lZCBpbnQgYnVpZF9sbzsKQEAgLTY4NCw5ICs5MjQsMTEgQEAKIAl1MzIgKmRldmljZV9pZCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJkZXZpY2UtaWQiLCBOVUxMKTsKIAl1MzIgKnJlZ3M7CiAJaW50IGVuYWJsZTsKLQlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBkbi0+ZGF0YTsKKwlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOwogCiAJcGRuLT5lZWhfbW9kZSA9IDA7CisJcGRuLT5lZWhfY2hlY2tfY291bnQgPSAwOworCXBkbi0+ZWVoX2ZyZWV6ZV9jb3VudCA9IDA7CiAKIAlpZiAoc3RhdHVzICYmIHN0cmNtcChzdGF0dXMsICJvayIpICE9IDApCiAJCXJldHVybiBOVUxMOwkvKiBpZ25vcmUgZGV2aWNlcyB3aXRoIGJhZCBzdGF0dXMgKi8KQEAgLTcyMyw4ICs5NjUsOSBAQAogCQkvKiBGaXJzdCByZWdpc3RlciBlbnRyeSBpcyBhZGRyICgwMEJCU1MwMCkgICovCiAJCS8qIFRyeSB0byBlbmFibGUgZWVoICovCiAJCXJldCA9IHJ0YXNfY2FsbChpYm1fc2V0X2VlaF9vcHRpb24sIDQsIDEsIE5VTEwsCi0JCQkJcmVnc1swXSwgaW5mby0+YnVpZF9oaSwgaW5mby0+YnVpZF9sbywKLQkJCQlFRUhfRU5BQkxFKTsKKwkJICAgICAgICAgICAgICAgIHJlZ3NbMF0sIGluZm8tPmJ1aWRfaGksIGluZm8tPmJ1aWRfbG8sCisJCSAgICAgICAgICAgICAgICBFRUhfRU5BQkxFKTsKKwogCQlpZiAocmV0ID09IDApIHsKIAkJCWVlaF9zdWJzeXN0ZW1fZW5hYmxlZCA9IDE7CiAJCQlwZG4tPmVlaF9tb2RlIHw9IEVFSF9NT0RFX1NVUFBPUlRFRDsKQEAgLTczNiw3ICs5NzksNyBAQAogCiAJCQkvKiBUaGlzIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgRUVILCBidXQgaXQgbWF5IGhhdmUgYW4KIAkJCSAqIEVFSCBwYXJlbnQsIGluIHdoaWNoIGNhc2Ugd2UgbWFyayBpdCBhcyBzdXBwb3J0ZWQuICovCi0JCQlpZiAoZG4tPnBhcmVudCAmJiBkbi0+cGFyZW50LT5kYXRhCisJCQlpZiAoZG4tPnBhcmVudCAmJiBQQ0lfRE4oZG4tPnBhcmVudCkKIAkJCSAgICAmJiAoUENJX0ROKGRuLT5wYXJlbnQpLT5lZWhfbW9kZSAmIEVFSF9NT0RFX1NVUFBPUlRFRCkpIHsKIAkJCQkvKiBQYXJlbnQgc3VwcG9ydHMgRUVILiAqLwogCQkJCXBkbi0+ZWVoX21vZGUgfD0gRUVIX01PREVfU1VQUE9SVEVEOwpAQCAtNzQ5LDcgKzk5Miw3IEBACiAJCSAgICAgICBkbi0+ZnVsbF9uYW1lKTsKIAl9CiAKLQlyZXR1cm4gTlVMTDsgCisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC03NzAsNiArMTAxMyw5IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpwaGIsICpucDsKIAlzdHJ1Y3QgZWVoX2Vhcmx5X2VuYWJsZV9pbmZvIGluZm87CiAKKwlzcGluX2xvY2tfaW5pdCgmY29uZmlybV9lcnJvcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2xvdF9lcnJidWZfbG9jayk7CisKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvcnRhcyIpOwogCWlmIChucCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC03OTcsMTMgKzEwNDMsMTEgQEAKIAlmb3IgKHBoYiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwY2kiKTsgcGhiOwogCSAgICAgcGhiID0gb2ZfZmluZF9ub2RlX2J5X25hbWUocGhiLCAicGNpIikpIHsKIAkJdW5zaWduZWQgbG9uZyBidWlkOwotCQlzdHJ1Y3QgcGNpX2RuICpwY2k7CiAKIAkJYnVpZCA9IGdldF9waGJfYnVpZChwaGIpOwotCQlpZiAoYnVpZCA9PSAwIHx8IHBoYi0+ZGF0YSA9PSBOVUxMKQorCQlpZiAoYnVpZCA9PSAwIHx8IFBDSV9ETihwaGIpID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlwY2kgPSBwaGItPmRhdGE7CiAJCWluZm8uYnVpZF9sbyA9IEJVSURfTE8oYnVpZCk7CiAJCWluZm8uYnVpZF9oaSA9IEJVSURfSEkoYnVpZCk7CiAJCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBoYiwgZWFybHlfZW5hYmxlX2VlaCwgJmluZm8pOwpAQCAtODMyLDExICsxMDc2LDEzIEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGI7CiAJc3RydWN0IGVlaF9lYXJseV9lbmFibGVfaW5mbyBpbmZvOwogCi0JaWYgKCFkbiB8fCAhZG4tPmRhdGEpCisJaWYgKCFkbiB8fCAhUENJX0ROKGRuKSkKIAkJcmV0dXJuOwogCXBoYiA9IFBDSV9ETihkbiktPnBoYjsKIAlpZiAoTlVMTCA9PSBwaGIgfHwgMCA9PSBwaGItPmJ1aWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBFeHBlY3RlZCBidWlkIGJ1dCBmb3VuZCBub25lXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBFeHBlY3RlZCBidWlkIGJ1dCBmb3VuZCBub25lIGZvciAlc1xuIiwKKwkJICAgICAgIGRuLT5mdWxsX25hbWUpOworCQlkdW1wX3N0YWNrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTg0NCw3ICsxMDkwLDcgQEAKIAlpbmZvLmJ1aWRfbG8gPSBCVUlEX0xPKHBoYi0+YnVpZCk7CiAJZWFybHlfZW5hYmxlX2VlaChkbiwgJmluZm8pOwogfQotRVhQT1JUX1NZTUJPTChlZWhfYWRkX2RldmljZV9lYXJseSk7CitFWFBPUlRfU1lNQk9MX0dQTChlZWhfYWRkX2RldmljZV9lYXJseSk7CiAKIC8qKgogICogZWVoX2FkZF9kZXZpY2VfbGF0ZSAtIHBlcmZvcm0gRUVIIGluaXRpYWxpemF0aW9uIGZvciB0aGUgaW5kaWNhdGVkIHBjaSBkZXZpY2UKQEAgLTg1NSw2ICsxMTAxLDkgQEAKICAqLwogdm9pZCBlZWhfYWRkX2RldmljZV9sYXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKwlzdHJ1Y3QgcGNpX2RuICpwZG47CisKIAlpZiAoIWRldiB8fCAhZWVoX3N1YnN5c3RlbV9lbmFibGVkKQogCQlyZXR1cm47CiAKQEAgLTg2Miw5ICsxMTExLDE1IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIkVFSDogYWRkaW5nIGRldmljZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAjZW5kaWYKIAorCXBjaV9kZXZfZ2V0IChkZXYpOworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJcGRuID0gUENJX0ROKGRuKTsKKwlwZG4tPnBjaWRldiA9IGRldjsKKwogCXBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2UgKGRldik7CisJZWVoX3NhdmVfYmFycyhkZXYsIHBkbik7CiB9Ci1FWFBPUlRfU1lNQk9MKGVlaF9hZGRfZGV2aWNlX2xhdGUpOworRVhQT1JUX1NZTUJPTF9HUEwoZWVoX2FkZF9kZXZpY2VfbGF0ZSk7CiAKIC8qKgogICogZWVoX3JlbW92ZV9kZXZpY2UgLSB1bmRvIEVFSCBzZXR1cCBmb3IgdGhlIGluZGljYXRlZCBwY2kgZGV2aWNlCkBAIC04NzUsNiArMTEzMCw3IEBACiAgKi8KIHZvaWQgZWVoX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCWlmICghZGV2IHx8ICFlZWhfc3Vic3lzdGVtX2VuYWJsZWQpCiAJCXJldHVybjsKIApAQCAtODgzLDIwICsxMTM5LDI5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIkVFSDogcmVtb3ZlIGRldmljZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7CiAjZW5kaWYKIAlwY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKGRldik7CisKKwlkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCVBDSV9ETihkbiktPnBjaWRldiA9IE5VTEw7CisJcGNpX2Rldl9wdXQgKGRldik7CiB9Ci1FWFBPUlRfU1lNQk9MKGVlaF9yZW1vdmVfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVlaF9yZW1vdmVfZGV2aWNlKTsKIAogc3RhdGljIGludCBwcm9jX2VlaF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGxvbmcgZmZzID0gMCwgcG9zaXRpdmVzID0gMCwgZmFpbHVyZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmVzZXRzID0gMDsKKwl1bnNpZ25lZCBsb25nIG5vX2RldiA9IDAsIG5vX2RuID0gMCwgbm9fY2ZnID0gMCwgbm9fY2hlY2sgPSAwOwogCiAJZm9yX2VhY2hfY3B1KGNwdSkgewogCQlmZnMgKz0gcGVyX2NwdSh0b3RhbF9tbWlvX2ZmcywgY3B1KTsKIAkJcG9zaXRpdmVzICs9IHBlcl9jcHUoZmFsc2VfcG9zaXRpdmVzLCBjcHUpOwogCQlmYWlsdXJlcyArPSBwZXJfY3B1KGlnbm9yZWRfZmFpbHVyZXMsIGNwdSk7CiAJCXJlc2V0cyArPSBwZXJfY3B1KHNsb3RfcmVzZXRzLCBjcHUpOworCQlub19kZXYgKz0gcGVyX2NwdShub19kZXZpY2UsIGNwdSk7CisJCW5vX2RuICs9IHBlcl9jcHUobm9fZG4sIGNwdSk7CisJCW5vX2NmZyArPSBwZXJfY3B1KG5vX2NmZ19hZGRyLCBjcHUpOworCQlub19jaGVjayArPSBwZXJfY3B1KGlnbm9yZWRfY2hlY2ssIGNwdSk7CiAJfQogCiAJaWYgKDAgPT0gZWVoX3N1YnN5c3RlbV9lbmFibGVkKSB7CkBAIC05MDQsMTMgKzExNjksMTcgQEAKIAkJc2VxX3ByaW50ZihtLCAiZWVoX3RvdGFsX21taW9fZmZzPSVsZFxuIiwgZmZzKTsKIAl9IGVsc2UgewogCQlzZXFfcHJpbnRmKG0sICJFRUggU3Vic3lzdGVtIGlzIGVuYWJsZWRcbiIpOwotCQlzZXFfcHJpbnRmKG0sICJlZWhfdG90YWxfbW1pb19mZnM9JWxkXG4iCi0JCQkgICAiZWVoX2ZhbHNlX3Bvc2l0aXZlcz0lbGRcbiIKLQkJCSAgICJlZWhfaWdub3JlZF9mYWlsdXJlcz0lbGRcbiIKLQkJCSAgICJlZWhfc2xvdF9yZXNldHM9JWxkXG4iCi0JCQkJImVlaF9mYWlsX2NvdW50PSVkXG4iLAotCQkJICAgZmZzLCBwb3NpdGl2ZXMsIGZhaWx1cmVzLCByZXNldHMsCi0JCQkJZWVoX2ZhaWxfY291bnQuY291bnRlcik7CisJCXNlcV9wcmludGYobSwKKwkJCQkibm8gZGV2aWNlPSVsZFxuIgorCQkJCSJubyBkZXZpY2Ugbm9kZT0lbGRcbiIKKwkJCQkibm8gY29uZmlnIGFkZHJlc3M9JWxkXG4iCisJCQkJImNoZWNrIG5vdCB3YW50ZWQ9JWxkXG4iCisJCQkJImVlaF90b3RhbF9tbWlvX2Zmcz0lbGRcbiIKKwkJCQkiZWVoX2ZhbHNlX3Bvc2l0aXZlcz0lbGRcbiIKKwkJCQkiZWVoX2lnbm9yZWRfZmFpbHVyZXM9JWxkXG4iCisJCQkJImVlaF9zbG90X3Jlc2V0cz0lbGRcbiIsCisJCQkJbm9fZGV2LCBub19kbiwgbm9fY2ZnLCBub19jaGVjaywKKwkJCQlmZnMsIHBvc2l0aXZlcywgZmFpbHVyZXMsIHJlc2V0cyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05MzIsNyArMTIwMSw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9QU0VSSUVTKSB7CisJaWYgKHBsYXRmb3JtX2lzX3BzZXJpZXMoKSkgewogCQllID0gY3JlYXRlX3Byb2NfZW50cnkoInBwYzY0L2VlaCIsIDAsIE5VTEwpOwogCQlpZiAoZSkKIAkJCWUtPnByb2NfZm9wcyA9ICZwcm9jX2VlaF9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDk3MzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBlZWhfZXZlbnQuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW5hcyBWZXBzdGFzIDxsaW5hc0BsaW5hcy5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vZWVoX2V2ZW50Lmg+CisKKy8qKiBPdmVydmlldzoKKyAqICBFRUggZXJyb3Igc3RhdGVzIG1heSBiZSBkZXRlY3RlZCB3aXRoaW4gZXhjZXB0aW9uIGhhbmRsZXJzOworICogIGhvd2V2ZXIsIHRoZSByZWNvdmVyeSBwcm9jZXNzaW5nIG5lZWRzIHRvIG9jY3VyIGFzeW5jaHJvbm91c2x5CisgKiAgaW4gYSBub3JtYWwga2VybmVsIGNvbnRleHQgYW5kIG5vdCBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqICBUaGlzIHBhaXIgb2Ygcm91dGluZXMgY3JlYXRlcyBhbiBldmVudCBhbmQgcXVldWVzIGl0IG9udG8gYQorICogIHdvcmstcXVldWUsIHdoZXJlIGEgd29ya2VyIHRocmVhZCBjYW4gZHJpdmUgcmVjb3ZlcnkuCisgKi8KKworLyogRUVIIGV2ZW50IHdvcmtxdWV1ZSBzZXR1cC4gKi8KK3N0YXRpYyBzcGlubG9ja190IGVlaF9ldmVudGxpc3RfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKK0xJU1RfSEVBRChlZWhfZXZlbnRsaXN0KTsKK3N0YXRpYyB2b2lkIGVlaF90aHJlYWRfbGF1bmNoZXIodm9pZCAqKTsKK0RFQ0xBUkVfV09SSyhlZWhfZXZlbnRfd3EsIGVlaF90aHJlYWRfbGF1bmNoZXIsIE5VTEwpOworCisvKioKKyAqIGVlaF9wYW5pYyAtIGNhbGwgcGFuaWMoKSBmb3IgYW4gZWVoIGV2ZW50IHRoYXQgY2Fubm90IGJlIGhhbmRsZWQuCisgKiBUaGUgcGhpbG9zb3BoeSBvZiB0aGlzIHJvdXRpbmUgaXMgdGhhdCBpdCBpcyBiZXR0ZXIgdG8gcGFuaWMgYW5kCisgKiBoYWx0IHRoZSBPUyB0aGFuIGl0IGlzIHRvIHJpc2sgcG9zc2libGUgZGF0YSBjb3JydXB0aW9uIGJ5CisgKiBvYmxpdmlvdXMgZGV2aWNlIGRyaXZlcnMgdGhhdCBkb24ndCBrbm93IGJldHRlci4KKyAqCisgKiBAZGV2IHBjaSBkZXZpY2UgdGhhdCBoYWQgYW4gZWVoIGV2ZW50CisgKiBAcmVzZXRfc3RhdGUgY3VycmVudCByZXNldCBzdGF0ZSBvZiB0aGUgZGV2aWNlIHNsb3QKKyAqLworc3RhdGljIHZvaWQgZWVoX3BhbmljKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCByZXNldF9zdGF0ZSkKK3sKKwkvKgorCSAqIFNpbmNlIHRoZSBwYW5pY19vbl9vb3BzIHN5c2N0bCBpcyB1c2VkIHRvIGhhbHQgdGhlIHN5c3RlbQorCSAqIGluIGxpZ2h0IG9mIHBvdGVudGlhbCBjb3JydXB0aW9uLCB3ZSBjYW4gdXNlIGl0IGhlcmUuCisJICovCisJaWYgKHBhbmljX29uX29vcHMpIHsKKwkJcGFuaWMoIkVFSDogTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLCByZXNldF9zdGF0ZSwKKwkJICAgICAgcGNpX25hbWUoZGV2KSk7CisJfQorCWVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJFRUg6IElnbm9yZWQgTU1JTyBmYWlsdXJlICglZCkgb24gZGV2aWNlOiVzXG4iLAorCQkgICAgICAgcmVzZXRfc3RhdGUsIHBjaV9uYW1lKGRldikpOworCX0KK30KKworLyoqCisgKiBlZWhfZXZlbnRfaGFuZGxlciAtIGRpc3BhdGNoIEVFSCBldmVudHMuICBUaGUgZGV0ZWN0aW9uIG9mIGEgZnJvemVuCisgKiBzbG90IGNhbiBvY2N1ciBpbnNpZGUgYW4gaW50ZXJydXB0LCB3aGVyZSBpdCBjYW4gYmUgaGFyZCB0byBkbworICogYW55dGhpbmcgYWJvdXQgaXQuICBUaGUgZ29hbCBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gcHVsbCB0aGVzZQorICogZGV0ZWN0aW9uIGV2ZW50cyBvdXQgb2YgdGhlIGNvbnRleHQgb2YgdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQKKyAqIHJlLWRpc3BhdGNoIHRoZW0gZm9yIHByb2Nlc3NpbmcgYXQgYSBsYXRlciB0aW1lIGluIGEgbm9ybWFsIGNvbnRleHQuCisgKgorICogQGR1bW15IC0gdW51c2VkCisgKi8KK3N0YXRpYyBpbnQgZWVoX2V2ZW50X2hhbmRsZXIodm9pZCAqIGR1bW15KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVlaF9ldmVudAkqZXZlbnQ7CisKKwlkYWVtb25pemUgKCJlZWhkIik7CisKKwl3aGlsZSAoMSkgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlZWhfZXZlbnRsaXN0X2xvY2ssIGZsYWdzKTsKKwkJZXZlbnQgPSBOVUxMOworCQlpZiAoIWxpc3RfZW1wdHkoJmVlaF9ldmVudGxpc3QpKSB7CisJCQlldmVudCA9IGxpc3RfZW50cnkoZWVoX2V2ZW50bGlzdC5uZXh0LCBzdHJ1Y3QgZWVoX2V2ZW50LCBsaXN0KTsKKwkJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWVoX2V2ZW50bGlzdF9sb2NrLCBmbGFncyk7CisJCWlmIChldmVudCA9PSBOVUxMKQorCQkJYnJlYWs7CisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRUVIOiBEZXRlY3RlZCBQQ0kgYnVzIGVycm9yIG9uIGRldmljZSAlc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKKworCQllZWhfcGFuaWMgKGV2ZW50LT5kZXYsIGV2ZW50LT5zdGF0ZSk7CisKKwkJa2ZyZWUoZXZlbnQpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGVlaF90aHJlYWRfbGF1bmNoZXIKKyAqCisgKiBAZHVtbXkgLSB1bnVzZWQKKyAqLworc3RhdGljIHZvaWQgZWVoX3RocmVhZF9sYXVuY2hlcih2b2lkICpkdW1teSkKK3sKKwlpZiAoa2VybmVsX3RocmVhZChlZWhfZXZlbnRfaGFuZGxlciwgTlVMTCwgQ0xPTkVfS0VSTkVMKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHN0YXJ0IEVFSCBkYWVtb25cbiIpOworfQorCisvKioKKyAqIGVlaF9zZW5kX2ZhaWx1cmVfZXZlbnQgLSBnZW5lcmF0ZSBhIFBDSSBlcnJvciBldmVudAorICogQGRldiBwY2kgZGV2aWNlCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0OworICogdGhlIGFjdHVhbCBldmVudCB3aWxsIGJlIGRlbGl2ZXJlZCBpbiBhIG5vcm1hbCBjb250ZXh0CisgKiAoZnJvbSBhIHdvcmtxdWV1ZSkuCisgKi8KK2ludCBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lX3VuYXZhaWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZWVoX2V2ZW50ICpldmVudDsKKworCWV2ZW50ID0ga21hbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0FUT01JQyk7CisJaWYgKGV2ZW50ID09IE5VTEwpIHsKKwkJcHJpbnRrIChLRVJOX0VSUiAiRUVIOiBvdXQgb2YgbWVtb3J5LCBldmVudCBub3QgaGFuZGxlZFxuIik7CisJCXJldHVybiAxOworIAl9CisKKwlpZiAoZGV2KQorCQlwY2lfZGV2X2dldChkZXYpOworCisJZXZlbnQtPmRuID0gZG47CisJZXZlbnQtPmRldiA9IGRldjsKKwlldmVudC0+c3RhdGUgPSBzdGF0ZTsKKwlldmVudC0+dGltZV91bmF2YWlsID0gdGltZV91bmF2YWlsOworCisJLyogV2UgbWF5IG9yIG1heSBub3QgYmUgY2FsbGVkIGluIGFuIGludGVycnVwdCBjb250ZXh0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkKCZldmVudC0+bGlzdCwgJmVlaF9ldmVudGxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVlaF9ldmVudGxpc3RfbG9jaywgZmxhZ3MpOworCisJc2NoZWR1bGVfd29yaygmZWVoX2V2ZW50X3dxKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKiBFTkQgT0YgRklMRSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCmluZGV4IGZjYzUwYmYuLjk3YmE1MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vYWJzX2FkZHIuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW1jZmcuaD4KICNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vdGNlLmg+CiAjaW5jbHVkZSA8YXNtL3BwYy1wY2kuaD4KQEAgLTU4Miw3ICs1ODEsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKSB7CisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkgewogCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9NVUxUSVRDRSkpIHsKIAkJCXBwY19tZC50Y2VfYnVpbGQgPSB0Y2VfYnVpbGRtdWx0aV9wU2VyaWVzTFA7CiAJCQlwcGNfbWQudGNlX2ZyZWUJID0gdGNlX2ZyZWVtdWx0aV9wU2VyaWVzTFA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKaW5kZXggYzE5ODY1Ni4uOTk5YTk2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYwpAQCAtMTA3LDcgKzEwNyw2IEBACiAKIHZvaWQgX19pbml0IHBTZXJpZXNfZmluYWxfZml4dXAodm9pZCkKIHsKLQlwaGJzX3JlbWFwX2lvKCk7CiAJcFNlcmllc19yZXF1ZXN0X3JlZ2lvbnMoKTsKIAogCXBjaV9hZGRyX2NhY2hlX2J1aWxkKCk7CkBAIC0xMjMsNyArMTIyLDcgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpKQorCWlmICghcGxhdGZvcm1faXNfcHNlcmllcygpKQogCQlyZXR1cm47CiAKIAlwcmludGsoIlVzaW5nIElOVEMgZm9yIFc4MmMxMDUgSURFIGNvbnRyb2xsZXIuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggZDdkNDAwMy4uZDg4NjQxNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQwOCw3ICs0MDgsNyBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50OwogCi0JaWYgKCEoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpKQorCWlmICghcGxhdGZvcm1faXNfcHNlcmllcygpKQogCQlyZXR1cm4gMDsKIAogCWVudCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJwcGM2NC9vZmR0IiwgU19JV1VTUiwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCmluZGV4IGUyNmIwNDIuLmE2ZjYyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ydGFzZC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgogCiAjaWYgMAogI2RlZmluZSBERUJVRyhBLi4uKQlwcmludGsoS0VSTl9FUlIgQSkKQEAgLTQ4MiwxMCArNDgxLDEyIEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeTsKIAotCS8qIE5vIFJUQVMsIG9ubHkgd2FybiBpZiB3ZSBhcmUgb24gYSBwU2VyaWVzIGJveCAgKi8KKwlpZiAoIXBsYXRmb3JtX2lzX3BzZXJpZXMoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBObyBSVEFTICovCiAJaWYgKHJ0YXNfdG9rZW4oImV2ZW50LXNjYW4iKSA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkgewotCQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX1BTRVJJRVMpCi0JCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJydGFzZDogbm8gZXZlbnQtc2NhbiBvbiBzeXN0ZW1cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3NjYW5sb2cuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zY2FubG9nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvcHBjNjQva2VybmVsL3NjYW5sb2cuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NjYW5sb2cuYwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCBhMDkzYTBkLi4zMTk5MDgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCXBwY19tZC5pZGxlX2xvb3AgPSBkZWZhdWx0X2lkbGU7CiAJfQogCi0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCXBwY19tZC5lbmFibGVfcG1jcyA9IHBzZXJpZXNfbHBhcl9lbmFibGVfcG1jczsKIAllbHNlCiAJCXBwY19tZC5lbmFibGVfcG1jcyA9IHBvd2VyNF9lbmFibGVfcG1jczsKQEAgLTMwNiw5ICszMDYsNyBAQAogCX0KIAogCW9mX25vZGVfcHV0KGRuKTsKLSBub19ydGFzOgotCXByaW50ayhLRVJOX0lORk8gImZpcm13YXJlX2ZlYXR1cmVzID0gMHglbHhcbiIsIAotCSAgICAgICBwcGM2NF9maXJtd2FyZV9mZWF0dXJlcyk7Citub19ydGFzOgogCiAJREJHKCIgPC0gZndfZmVhdHVyZV9pbml0KClcbiIpOwogfQpAQCAtMzc4LDcgKzM3Niw3IEBACiAKIAlmd19mZWF0dXJlX2luaXQoKTsKIAkKLQlpZiAoc3lzdGVtY2ZnLT5wbGF0Zm9ybSAmIFBMQVRGT1JNX0xQQVIpCisJaWYgKHBsYXRmb3JtX2lzX2xwYXIoKSkKIAkJaHB0ZV9pbml0X2xwYXIoKTsKIAllbHNlIHsKIAkJaHB0ZV9pbml0X25hdGl2ZSgpOwpAQCAtMzg4LDcgKzM4Niw3IEBACiAKIAlnZW5lcmljX2ZpbmRfbGVnYWN5X3NlcmlhbF9wb3J0cygmcGh5c3BvcnQsICZkZWZhdWx0X3NwZWVkKTsKIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtICYgUExBVEZPUk1fTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlmaW5kX3VkYmdfdnRlcm0oKTsKIAllbHNlIGlmIChwaHlzcG9ydCkgewogCQkvKiBNYXAgdGhlIHVhcnQgZm9yIHVkYmcuICovCkBAIC01OTIsNyArNTkwLDcgQEAKIAogc3RhdGljIGludCBwU2VyaWVzX3BjaV9wcm9iZV9tb2RlKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7Ci0JaWYgKHN5c3RlbWNmZy0+cGxhdGZvcm0gJiBQTEFURk9STV9MUEFSKQorCWlmIChwbGF0Zm9ybV9pc19scGFyKCkpCiAJCXJldHVybiBQQ0lfUFJPQkVfREVWVFJFRTsKIAlyZXR1cm4gUENJX1BST0JFX05PUk1BTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYwppbmRleCA3YTI0M2U4Li41ODAwY2RlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vcFNlcmllc19yZWNvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAogI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKQEAgLTk2LDcgKzk3LDcgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJY3B1X2NsZWFyKGNwdSwgY3B1X29ubGluZV9tYXApOwotCXN5c3RlbWNmZy0+cHJvY2Vzc29yQ291bnQtLTsKKwl2ZHNvX2RhdGEtPnByb2Nlc3NvckNvdW50LS07CiAKIAkvKmZpeCBib290X2NwdWlkIGhlcmUqLwogCWlmIChjcHUgPT0gYm9vdF9jcHVpZCkKQEAgLTQ0MSw3ICs0NDIsNyBAQAogCXNtcF9vcHMtPmNwdV9kaWUgPSBwU2VyaWVzX2NwdV9kaWU7CiAKIAkvKiBQcm9jZXNzb3JzIGNhbiBiZSBhZGRlZC9yZW1vdmVkIG9ubHkgb24gTFBBUiAqLwotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQogCQlwU2VyaWVzX3JlY29uZmlnX25vdGlmaWVyX3JlZ2lzdGVyKCZwU2VyaWVzX3NtcF9uYik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggYzcyYzg2Zi4uNzJhYzE4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC01NDUsNyArNTQ1LDkgQEAKIAkJb2Zfbm9kZV9wdXQobnApOwogCX0KIAotCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVMpIHsKKwlpZiAocGxhdGZvcm1faXNfbHBhcigpKQorCQlvcHMgPSAmcFNlcmllc0xQX29wczsKKwllbHNlIHsKICNpZmRlZiBDT05GSUdfU01QCiAJCWZvcl9lYWNoX2NwdShpKSB7CiAJCQlpbnQgaGFyZF9pZDsKQEAgLTU2MSwxMiArNTYzLDExIEBACiAjZWxzZQogCQl4aWNzX3Blcl9jcHVbMF0gPSBpb3JlbWFwKGludHJfYmFzZSwgaW50cl9zaXplKTsKICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JfSBlbHNlIGlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgewotCQlvcHMgPSAmcFNlcmllc0xQX29wczsKIAl9CiAKIAl4aWNzXzgyNTlfcGljLmVuYWJsZSA9IGk4MjU5X3BpYy5lbmFibGU7CiAJeGljc184MjU5X3BpYy5kaXNhYmxlID0gaTgyNTlfcGljLmRpc2FibGU7CisJeGljc184MjU5X3BpYy5lbmQgPSBpODI1OV9waWMuZW5kOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKQogCQlnZXRfaXJxX2Rlc2MoaSktPmhhbmRsZXIgPSAmeGljc184MjU5X3BpYzsKIAlmb3IgKDsgaSA8IE5SX0lSUVM7ICsraSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdTNfaW9tbXUuYwppbmRleCA1NDNkNjU5Li5mMzJiYWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3UzX2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi91M19pb21tdS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlpb21tdV90YWJsZV91My5pdF9idXNubyA9IDA7CiAJaW9tbXVfdGFibGVfdTMuaXRfb2Zmc2V0ID0gMDsKIAkvKiBpdF9zaXplIGlzIGluIG51bWJlciBvZiBlbnRyaWVzICovCi0JaW9tbXVfdGFibGVfdTMuaXRfc2l6ZSA9IGRhcnRfdGFibGVzaXplIC8gc2l6ZW9mKHUzMik7CisJaW9tbXVfdGFibGVfdTMuaXRfc2l6ZSA9IChkYXJ0X3RhYmxlc2l6ZSAvIHNpemVvZih1MzIpKSA+PiBEQVJUX1BBR0VfRkFDVE9SOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgY29tbW9uIElPTU1VIGNvZGUgKi8KIAlpb21tdV90YWJsZV91My5pdF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpZGFydF92YmFzZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKaW5kZXggNzlhNzg0Zi4uYjIwMzEyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vTWFrZWZpbGUKQEAgLTgsNCArOCw0IEBACiBvYmotJChDT05GSUdfNnh4KQkrPSBzdGFydF8zMi5vCiBvYmotJChDT05GSUdfNHh4KQkrPSBzdGFydF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCSs9IHN0YXJ0XzY0Lm8KLW9iai15CQkJKz0geG1vbi5vIHBwYy1kaXMubyBwcGMtb3BjLm8gc3Vicl9wcmYubyBzZXRqbXAubworb2JqLXkJCQkrPSB4bW9uLm8gcHBjLWRpcy5vIHBwYy1vcGMubyBzZXRqbXAubyBub25zdGRpby5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5jIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc2NTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgorICoKKyAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKKworaW50IHhtb25fcHV0Y2hhcihpbnQgYykKK3sKKwljaGFyIGNoID0gYzsKKworCWlmIChjID09ICdcbicpCisJCXhtb25fcHV0Y2hhcignXHInKTsKKwlyZXR1cm4geG1vbl93cml0ZSgmY2gsIDEpID09IDE/IGM6IC0xOworfQorCitzdGF0aWMgY2hhciBsaW5lWzI1Nl07CitzdGF0aWMgY2hhciAqbGluZXB0cjsKK3N0YXRpYyBpbnQgbGluZWxlZnQ7CisKK2ludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlpbnQgYzsKKwl1bnNpZ25lZCBsb25nIHQwOworCisJLyogYXNzdW1lIDI1TUh6IGRlZmF1bHQgdGltZWJhc2UgaWYgdGJfdGlja3NfcGVyX3NlYyBub3Qgc2V0IHlldCAqLworCXRpbWVvdXQgKj0gdGJfdGlja3NfcGVyX3NlYz8gdGJfdGlja3NfcGVyX3NlYzogMjUwMDAwMDA7CisJdDAgPSBnZXRfdGJsKCk7CisJZG8geworCQlsaW5lcHRyID0gbGluZTsKKwkJZm9yICg7OykgeworCQkJYyA9IHhtb25fcmVhZF9wb2xsKCk7CisJCQlpZiAoYyA9PSAtMSkgeworCQkJCWlmIChnZXRfdGJsKCkgLSB0MCA+IHRpbWVvdXQpCisJCQkJCXJldHVybiAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGMgPT0gJ1xuJykKKwkJCQlicmVhazsKKwkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQorCQkJCSpsaW5lcHRyKysgPSBjOworCQl9CisJCSpsaW5lcHRyID0gMDsKKwl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKKwlyZXR1cm4gMTsKK30KKworaW50IHhtb25fZ2V0Y2hhcih2b2lkKQoreworCWludCBjOworCisJaWYgKGxpbmVsZWZ0ID09IDApIHsKKwkJbGluZXB0ciA9IGxpbmU7CisJCWZvciAoOzspIHsKKwkJCWMgPSB4bW9uX3JlYWRjaGFyKCk7CisJCQlpZiAoYyA9PSAtMSB8fCBjID09IDQpCisJCQkJYnJlYWs7CisJCQlpZiAoYyA9PSAnXHInIHx8IGMgPT0gJ1xuJykgeworCQkJCSpsaW5lcHRyKysgPSAnXG4nOworCQkJCXhtb25fcHV0Y2hhcignXG4nKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN3aXRjaCAoYykgeworCQkJY2FzZSAwMTc3OgorCQkJY2FzZSAnXGInOgorCQkJCWlmIChsaW5lcHRyID4gbGluZSkgeworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCXhtb25fcHV0Y2hhcignICcpOworCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7CisJCQkJCS0tbGluZXB0cjsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlICdVJyAmIDB4MUY6CisJCQkJd2hpbGUgKGxpbmVwdHIgPiBsaW5lKSB7CisJCQkJCXhtb25fcHV0Y2hhcignXGInKTsKKwkJCQkJeG1vbl9wdXRjaGFyKCcgJyk7CisJCQkJCXhtb25fcHV0Y2hhcignXGInKTsKKwkJCQkJLS1saW5lcHRyOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGxpbmVwdHIgPj0gJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCisJCQkJCXhtb25fcHV0Y2hhcignXGEnKTsKKwkJCQllbHNlIHsKKwkJCQkJeG1vbl9wdXRjaGFyKGMpOworCQkJCQkqbGluZXB0cisrID0gYzsKKwkJCQl9CisJCQl9CisJCX0KKwkJbGluZWxlZnQgPSBsaW5lcHRyIC0gbGluZTsKKwkJbGluZXB0ciA9IGxpbmU7CisJfQorCWlmIChsaW5lbGVmdCA9PSAwKQorCQlyZXR1cm4gLTE7CisJLS1saW5lbGVmdDsKKwlyZXR1cm4gKmxpbmVwdHIrKzsKK30KKworY2hhciAqeG1vbl9nZXRzKGNoYXIgKnN0ciwgaW50IG5iKQoreworCWNoYXIgKnA7CisJaW50IGM7CisKKwlmb3IgKHAgPSBzdHI7IHAgPCBzdHIgKyBuYiAtIDE7ICkgeworCQljID0geG1vbl9nZXRjaGFyKCk7CisJCWlmIChjID09IC0xKSB7CisJCQlpZiAocCA9PSBzdHIpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJfQorCQkqcCsrID0gYzsKKwkJaWYgKGMgPT0gJ1xuJykKKwkJCWJyZWFrOworCX0KKwkqcCA9IDA7CisJcmV0dXJuIHN0cjsKK30KKwordm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IG47CisJc3RhdGljIGNoYXIgeG1vbl9vdXRidWZbMTAyNF07CisKKwl2YV9zdGFydChhcmdzLCBmb3JtYXQpOworCW4gPSB2c25wcmludGYoeG1vbl9vdXRidWYsIHNpemVvZih4bW9uX291dGJ1ZiksIGZvcm1hdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCXhtb25fd3JpdGUoeG1vbl9vdXRidWYsIG4pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaCBiL2FyY2gvcG93ZXJwYy94bW9uL25vbnN0ZGlvLmgKaW5kZXggODQyMTFhMi4uNDdjZWJiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vbm9uc3RkaW8uaAorKysgYi9hcmNoL3Bvd2VycGMveG1vbi9ub25zdGRpby5oCkBAIC0xLDIyICsxLDE0IEBACi10eXBlZGVmIGludAlGSUxFOwotZXh0ZXJuIEZJTEUgKnhtb25fc3RkaW4sICp4bW9uX3N0ZG91dDsKICNkZWZpbmUgRU9GCSgtMSkKLSNkZWZpbmUgc3RkaW4JeG1vbl9zdGRpbgotI2RlZmluZSBzdGRvdXQJeG1vbl9zdGRvdXQKLSNkZWZpbmUgcHJpbnRmCXhtb25fcHJpbnRmCi0jZGVmaW5lIGZwcmludGYJeG1vbl9mcHJpbnRmCi0jZGVmaW5lIGZwdXRzCXhtb25fZnB1dHMKLSNkZWZpbmUgZmdldHMJeG1vbl9mZ2V0cwotI2RlZmluZSBwdXRjaGFyCXhtb25fcHV0Y2hhcgotI2RlZmluZSBnZXRjaGFyCXhtb25fZ2V0Y2hhcgotI2RlZmluZSBwdXRjCXhtb25fcHV0YwotI2RlZmluZSBnZXRjCXhtb25fZ2V0YwotI2RlZmluZSBmb3BlbihuLCBtKQlOVUxMCi0jZGVmaW5lIGZmbHVzaChmKQlkbyB7fSB3aGlsZSAoMCkKLSNkZWZpbmUgZmNsb3NlKGYpCWRvIHt9IHdoaWxlICgwKQotZXh0ZXJuIGNoYXIgKmZnZXRzKGNoYXIgKiwgaW50LCB2b2lkICopOwotZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl9mcHJpbnRmKHZvaWQgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIHZvaWQgeG1vbl9zcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCi0jZGVmaW5lIHBlcnJvcihzKQlwcmludGYoIiVzOiBubyBmaWxlcyFcbiIsIChzKSkKKyNkZWZpbmUgcHJpbnRmCXhtb25fcHJpbnRmCisjZGVmaW5lIHB1dGNoYXIJeG1vbl9wdXRjaGFyCisKK2V4dGVybiBpbnQgeG1vbl9wdXRjaGFyKGludCBjKTsKK2V4dGVybiBpbnQgeG1vbl9nZXRjaGFyKHZvaWQpOworZXh0ZXJuIGNoYXIgKnhtb25fZ2V0cyhjaGFyICosIGludCk7CitleHRlcm4gdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CitleHRlcm4gaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKK2V4dGVybiBpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYik7CitleHRlcm4gaW50IHhtb25fcmVhZGNoYXIodm9pZCk7CitleHRlcm4gaW50IHhtb25fcmVhZF9wb2xsKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc2V0am1wLlMgYi9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUwppbmRleCBmOGU0MGRmLi45NmE5MWYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUworKysgYi9hcmNoL3Bvd2VycGMveG1vbi9zZXRqbXAuUwpAQCAtMTQsNjEgKzE0LDYxIEBACiAKIF9HTE9CQUwoeG1vbl9zZXRqbXApCiAJbWZscglyMAotCVNUTAlyMCwwKHIzKQotCVNUTAlyMSxTWkwocjMpCi0JU1RMCXIyLDIqU1pMKHIzKQorCVBQQ19TVEwJcjAsMChyMykKKwlQUENfU1RMCXIxLFNaTChyMykKKwlQUENfU1RMCXIyLDIqU1pMKHIzKQogCW1mY3IJcjAKLQlTVEwJcjAsMypTWkwocjMpCi0JU1RMCXIxMyw0KlNaTChyMykKLQlTVEwJcjE0LDUqU1pMKHIzKQotCVNUTAlyMTUsNipTWkwocjMpCi0JU1RMCXIxNiw3KlNaTChyMykKLQlTVEwJcjE3LDgqU1pMKHIzKQotCVNUTAlyMTgsOSpTWkwocjMpCi0JU1RMCXIxOSwxMCpTWkwocjMpCi0JU1RMCXIyMCwxMSpTWkwocjMpCi0JU1RMCXIyMSwxMipTWkwocjMpCi0JU1RMCXIyMiwxMypTWkwocjMpCi0JU1RMCXIyMywxNCpTWkwocjMpCi0JU1RMCXIyNCwxNSpTWkwocjMpCi0JU1RMCXIyNSwxNipTWkwocjMpCi0JU1RMCXIyNiwxNypTWkwocjMpCi0JU1RMCXIyNywxOCpTWkwocjMpCi0JU1RMCXIyOCwxOSpTWkwocjMpCi0JU1RMCXIyOSwyMCpTWkwocjMpCi0JU1RMCXIzMCwyMSpTWkwocjMpCi0JU1RMCXIzMSwyMipTWkwocjMpCisJUFBDX1NUTAlyMCwzKlNaTChyMykKKwlQUENfU1RMCXIxMyw0KlNaTChyMykKKwlQUENfU1RMCXIxNCw1KlNaTChyMykKKwlQUENfU1RMCXIxNSw2KlNaTChyMykKKwlQUENfU1RMCXIxNiw3KlNaTChyMykKKwlQUENfU1RMCXIxNyw4KlNaTChyMykKKwlQUENfU1RMCXIxOCw5KlNaTChyMykKKwlQUENfU1RMCXIxOSwxMCpTWkwocjMpCisJUFBDX1NUTAlyMjAsMTEqU1pMKHIzKQorCVBQQ19TVEwJcjIxLDEyKlNaTChyMykKKwlQUENfU1RMCXIyMiwxMypTWkwocjMpCisJUFBDX1NUTAlyMjMsMTQqU1pMKHIzKQorCVBQQ19TVEwJcjI0LDE1KlNaTChyMykKKwlQUENfU1RMCXIyNSwxNipTWkwocjMpCisJUFBDX1NUTAlyMjYsMTcqU1pMKHIzKQorCVBQQ19TVEwJcjI3LDE4KlNaTChyMykKKwlQUENfU1RMCXIyOCwxOSpTWkwocjMpCisJUFBDX1NUTAlyMjksMjAqU1pMKHIzKQorCVBQQ19TVEwJcjMwLDIxKlNaTChyMykKKwlQUENfU1RMCXIzMSwyMipTWkwocjMpCiAJbGkJcjMsMAogCWJscgogCiBfR0xPQkFMKHhtb25fbG9uZ2ptcCkKLQlDTVBJCXI0LDAKKwlQUENfTENNUEkgcjQsMAogCWJuZQkxZgogCWxpCXI0LDEKLTE6CUxETAlyMTMsNCpTWkwocjMpCi0JTERMCXIxNCw1KlNaTChyMykKLQlMREwJcjE1LDYqU1pMKHIzKQotCUxETAlyMTYsNypTWkwocjMpCi0JTERMCXIxNyw4KlNaTChyMykKLQlMREwJcjE4LDkqU1pMKHIzKQotCUxETAlyMTksMTAqU1pMKHIzKQotCUxETAlyMjAsMTEqU1pMKHIzKQotCUxETAlyMjEsMTIqU1pMKHIzKQotCUxETAlyMjIsMTMqU1pMKHIzKQotCUxETAlyMjMsMTQqU1pMKHIzKQotCUxETAlyMjQsMTUqU1pMKHIzKQotCUxETAlyMjUsMTYqU1pMKHIzKQotCUxETAlyMjYsMTcqU1pMKHIzKQotCUxETAlyMjcsMTgqU1pMKHIzKQotCUxETAlyMjgsMTkqU1pMKHIzKQotCUxETAlyMjksMjAqU1pMKHIzKQotCUxETAlyMzAsMjEqU1pMKHIzKQotCUxETAlyMzEsMjIqU1pMKHIzKQotCUxETAlyMCwzKlNaTChyMykKKzE6CVBQQ19MTAlyMTMsNCpTWkwocjMpCisJUFBDX0xMCXIxNCw1KlNaTChyMykKKwlQUENfTEwJcjE1LDYqU1pMKHIzKQorCVBQQ19MTAlyMTYsNypTWkwocjMpCisJUFBDX0xMCXIxNyw4KlNaTChyMykKKwlQUENfTEwJcjE4LDkqU1pMKHIzKQorCVBQQ19MTAlyMTksMTAqU1pMKHIzKQorCVBQQ19MTAlyMjAsMTEqU1pMKHIzKQorCVBQQ19MTAlyMjEsMTIqU1pMKHIzKQorCVBQQ19MTAlyMjIsMTMqU1pMKHIzKQorCVBQQ19MTAlyMjMsMTQqU1pMKHIzKQorCVBQQ19MTAlyMjQsMTUqU1pMKHIzKQorCVBQQ19MTAlyMjUsMTYqU1pMKHIzKQorCVBQQ19MTAlyMjYsMTcqU1pMKHIzKQorCVBQQ19MTAlyMjcsMTgqU1pMKHIzKQorCVBQQ19MTAlyMjgsMTkqU1pMKHIzKQorCVBQQ19MTAlyMjksMjAqU1pMKHIzKQorCVBQQ19MTAlyMzAsMjEqU1pMKHIzKQorCVBQQ19MTAlyMzEsMjIqU1pMKHIzKQorCVBQQ19MTAlyMCwzKlNaTChyMykKIAltdGNyZgkweDM4LHIwCi0JTERMCXIwLDAocjMpCi0JTERMCXIxLFNaTChyMykKLQlMREwJcjIsMipTWkwocjMpCisJUFBDX0xMCXIwLDAocjMpCisJUFBDX0xMCXIxLFNaTChyMykKKwlQUENfTEwJcjIsMipTWkwocjMpCiAJbXRscglyMAogCW1yCXIzLHI0CiAJYmxyCkBAIC04NCw1MiArODQsNTIgQEAKICAqIGRpZmZlcmVudCBBQklzLCB0aG91Z2gpLgogICovCiBfR0xPQkFMKHhtb25fc2F2ZV9yZWdzKQotCVNUTAlyMCwwKlNaTChyMykKLQlTVEwJcjIsMipTWkwocjMpCi0JU1RMCXIzLDMqU1pMKHIzKQotCVNUTAlyNCw0KlNaTChyMykKLQlTVEwJcjUsNSpTWkwocjMpCi0JU1RMCXI2LDYqU1pMKHIzKQotCVNUTAlyNyw3KlNaTChyMykKLQlTVEwJcjgsOCpTWkwocjMpCi0JU1RMCXI5LDkqU1pMKHIzKQotCVNUTAlyMTAsMTAqU1pMKHIzKQotCVNUTAlyMTEsMTEqU1pMKHIzKQotCVNUTAlyMTIsMTIqU1pMKHIzKQotCVNUTAlyMTMsMTMqU1pMKHIzKQotCVNUTAlyMTQsMTQqU1pMKHIzKQotCVNUTAlyMTUsMTUqU1pMKHIzKQotCVNUTAlyMTYsMTYqU1pMKHIzKQotCVNUTAlyMTcsMTcqU1pMKHIzKQotCVNUTAlyMTgsMTgqU1pMKHIzKQotCVNUTAlyMTksMTkqU1pMKHIzKQotCVNUTAlyMjAsMjAqU1pMKHIzKQotCVNUTAlyMjEsMjEqU1pMKHIzKQotCVNUTAlyMjIsMjIqU1pMKHIzKQotCVNUTAlyMjMsMjMqU1pMKHIzKQotCVNUTAlyMjQsMjQqU1pMKHIzKQotCVNUTAlyMjUsMjUqU1pMKHIzKQotCVNUTAlyMjYsMjYqU1pMKHIzKQotCVNUTAlyMjcsMjcqU1pMKHIzKQotCVNUTAlyMjgsMjgqU1pMKHIzKQotCVNUTAlyMjksMjkqU1pMKHIzKQotCVNUTAlyMzAsMzAqU1pMKHIzKQotCVNUTAlyMzEsMzEqU1pMKHIzKQorCVBQQ19TVEwJcjAsMCpTWkwocjMpCisJUFBDX1NUTAlyMiwyKlNaTChyMykKKwlQUENfU1RMCXIzLDMqU1pMKHIzKQorCVBQQ19TVEwJcjQsNCpTWkwocjMpCisJUFBDX1NUTAlyNSw1KlNaTChyMykKKwlQUENfU1RMCXI2LDYqU1pMKHIzKQorCVBQQ19TVEwJcjcsNypTWkwocjMpCisJUFBDX1NUTAlyOCw4KlNaTChyMykKKwlQUENfU1RMCXI5LDkqU1pMKHIzKQorCVBQQ19TVEwJcjEwLDEwKlNaTChyMykKKwlQUENfU1RMCXIxMSwxMSpTWkwocjMpCisJUFBDX1NUTAlyMTIsMTIqU1pMKHIzKQorCVBQQ19TVEwJcjEzLDEzKlNaTChyMykKKwlQUENfU1RMCXIxNCwxNCpTWkwocjMpCisJUFBDX1NUTAlyMTUsMTUqU1pMKHIzKQorCVBQQ19TVEwJcjE2LDE2KlNaTChyMykKKwlQUENfU1RMCXIxNywxNypTWkwocjMpCisJUFBDX1NUTAlyMTgsMTgqU1pMKHIzKQorCVBQQ19TVEwJcjE5LDE5KlNaTChyMykKKwlQUENfU1RMCXIyMCwyMCpTWkwocjMpCisJUFBDX1NUTAlyMjEsMjEqU1pMKHIzKQorCVBQQ19TVEwJcjIyLDIyKlNaTChyMykKKwlQUENfU1RMCXIyMywyMypTWkwocjMpCisJUFBDX1NUTAlyMjQsMjQqU1pMKHIzKQorCVBQQ19TVEwJcjI1LDI1KlNaTChyMykKKwlQUENfU1RMCXIyNiwyNipTWkwocjMpCisJUFBDX1NUTAlyMjcsMjcqU1pMKHIzKQorCVBQQ19TVEwJcjI4LDI4KlNaTChyMykKKwlQUENfU1RMCXIyOSwyOSpTWkwocjMpCisJUFBDX1NUTAlyMzAsMzAqU1pMKHIzKQorCVBQQ19TVEwJcjMxLDMxKlNaTChyMykKIAkvKiBnbyB1cCBvbmUgc3RhY2sgZnJhbWUgZm9yIFNQICovCi0JTERMCXI0LDAocjEpCi0JU1RMCXI0LDEqU1pMKHIzKQorCVBQQ19MTAlyNCwwKHIxKQorCVBQQ19TVEwJcjQsMSpTWkwocjMpCiAJLyogZ2V0IGNhbGxlcidzIExSICovCi0JTERMCXIwLExSU0FWRShyNCkKLQlTVEwJcjAsX05JUC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKLQlTVEwJcjAsX0xJTkstU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX0xMCXIwLExSU0FWRShyNCkKKwlQUENfU1RMCXIwLF9OSVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfTElOSy1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZm1zcglyMAotCVNUTAlyMCxfTVNSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX01TUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZmN0cglyMAotCVNUTAlyMCxfQ1RSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX0NUUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZnhlcglyMAotCVNUTAlyMCxfWEVSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQorCVBQQ19TVEwJcjAsX1hFUi1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAltZmNyCXIwCi0JU1RMCXIwLF9DQ1ItU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfQ0NSLVNUQUNLX0ZSQU1FX09WRVJIRUFEKHIzKQogCWxpCXIwLDAKLQlTVEwJcjAsX1RSQVAtU1RBQ0tfRlJBTUVfT1ZFUkhFQUQocjMpCisJUFBDX1NUTAlyMCxfVFJBUC1TVEFDS19GUkFNRV9PVkVSSEVBRChyMykKIAlibHIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF8zMi5jCmluZGV4IDY5YjY1OGMuLmMyNDY0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfMzIuYwpAQCAtMTEsNyArMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2N1ZGEuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3htb24uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgpAQCAtMjIsMTAgKzIxLDExIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAogc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqc2NjYywgKnNjY2Q7CiB1bnNpZ25lZCBpbnQgVFhSRFksIFJYUkRZLCBETEFCOwotc3RhdGljIGludCB4bW9uX2V4cGVjdChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKIAogc3RhdGljIGludCB1c2Vfc2VyaWFsOwogc3RhdGljIGludCB1c2Vfc2NyZWVuOwpAQCAtMzMsMTYgKzMzLDYgQEAKIHN0YXRpYyBpbnQgeG1vbl91c2Vfc2NjYjsKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoYW5uZWxfbm9kZTsKIAotI2RlZmluZSBUQl9TUEVFRAkyNTAwMDAwMAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkdGIodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgcmV0OwotCi0JYXNtIHZvbGF0aWxlKCJtZnRiICUwIiA6ICI9ciIgKHJldCkgOik7Ci0JcmV0dXJuIHJldDsKLX0KLQogdm9pZCBidWZfYWNjZXNzKHZvaWQpCiB7CiAJaWYgKERMQUIpCkBAIC05MSwyMyArODEsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfQ0hSUCAqLwogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCi17Ci0JeG1vbihyZWdzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNycV9rZXlfb3Agc3lzcnFfeG1vbl9vcCA9Ci17Ci0JLmhhbmRsZXIgPQlzeXNycV9oYW5kbGVfeG1vbiwKLQkuaGVscF9tc2cgPQkiWG1vbiIsCi0JLmFjdGlvbl9tc2cgPQkiRW50ZXJpbmcgeG1vbiIsCi19OwotI2VuZGlmCi0KLXZvaWQKLXhtb25fbWFwX3NjYyh2b2lkKQordm9pZCB4bW9uX21hcF9zY2Modm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmJhc2U7CkBAIC0yMTcsOCArMTkxLDYgQEAKIAlSWFJEWSA9IDE7CiAJRExBQiA9IDB4ODA7CiAjZW5kaWYgLyogcGxhdGZvcm0gKi8KLQotCXJlZ2lzdGVyX3N5c3JxX2tleSgneCcsICZzeXNycV94bW9uX29wKTsKIH0KIAogc3RhdGljIGludCBzY2NfaW5pdGlhbGl6ZWQgPSAwOwpAQCAtMjM4LDggKzIxMCw3IEBACiAjZW5kaWYgLyogQ09ORklHX0FEQl9DVURBICovCiB9CiAKLWludAoteG1vbl93cml0ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fd3JpdGUodm9pZCAqcHRyLCBpbnQgbmIpCiB7CiAJY2hhciAqcCA9IHB0cjsKIAlpbnQgaSwgYywgY3Q7CkBAIC0zMTEsOCArMjgyLDcgQEAKIAkiXDAuXDAqXDArXDBcMFwwXDBcMC9cclwwLVwwIgkJCS8qIDB4NDAgLSAweDRmICovCiAJIlwwXDAwMDAxMjM0NTY3ODlcMFwwXDAiOwkJCS8qIDB4NTAgLSAweDVmICovCiAKLXN0YXRpYyBpbnQKLXhtb25fZ2V0X2FkYl9rZXkodm9pZCkKK3N0YXRpYyBpbnQgeG1vbl9nZXRfYWRiX2tleSh2b2lkKQogewogCWludCBrLCB0LCBvbjsKIApAQCAtMzUwLDMyICszMjAsMjEgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQk9PVFhfVEVYVCAqLwogCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLSAgICBjaGFyICpwID0gcHRyOwotICAgIGludCBpOwotCiAjaWZkZWYgQ09ORklHX0JPT1RYX1RFWFQKLSAgICBpZiAodXNlX3NjcmVlbikgewotCWZvciAoaSA9IDA7IGkgPCBuYjsgKytpKQotCSAgICAqcCsrID0geG1vbl9nZXRfYWRiX2tleSgpOwotCXJldHVybiBpOwotICAgIH0KKwlpZiAodXNlX3NjcmVlbikKKwkJcmV0dXJuIHhtb25fZ2V0X2FkYl9rZXkoKTsKICNlbmRpZgotICAgIGlmICghc2NjX2luaXRpYWxpemVkKQotCXhtb25faW5pdF9zY2MoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbmI7ICsraSkgeworCWlmICghc2NjX2luaXRpYWxpemVkKQorCQl4bW9uX2luaXRfc2NjKCk7CiAJd2hpbGUgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKQotCSAgICBkb19wb2xsX2FkYigpOworCQlkb19wb2xsX2FkYigpOwogCWJ1Zl9hY2Nlc3MoKTsKLQkqcCsrID0gKnNjY2Q7Ci0gICAgfQotICAgIHJldHVybiBpOworCXJldHVybiAqc2NjZDsKIH0KIAotaW50Ci14bW9uX3JlYWRfcG9sbCh2b2lkKQoraW50IHhtb25fcmVhZF9wb2xsKHZvaWQpCiB7CiAJaWYgKCgqc2NjYyAmIFJYUkRZKSA9PSAwKSB7CiAJCWRvX3BvbGxfYWRiKCk7CkBAIC0zOTUsOCArMzU0LDcgQEAKICAgICAzLCAgMHhjMSwJCS8qIHJ4IGVuYWJsZSwgOCBiaXRzICovCiB9OwogCi12b2lkCi14bW9uX2luaXRfc2NjKHZvaWQpCit2b2lkIHhtb25faW5pdF9zY2Modm9pZCkKIHsKIAlpZiAoIF9tYWNoaW5lID09IF9NQUNIX2NocnAgKQogCXsKQEAgLTQxMCw2ICszNjgsNyBAQAogCWVsc2UgaWYgKCBfbWFjaGluZSA9PSBfTUFDSF9QbWFjICkKIAl7CiAJCWludCBpLCB4OworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAkJaWYgKGNoYW5uZWxfbm9kZSAhPSAwKQogCQkJcG1hY19jYWxsX2ZlYXR1cmUoCkBAIC00MjQsOCArMzgzLDEyIEBACiAJCQkJUE1BQ19GVFJfTU9ERU1fRU5BQkxFLAogCQkJCWNoYW5uZWxfbm9kZSwgMCwgMSk7CiAJCQlwcmludGsoS0VSTl9JTkZPICJNb2RlbSBwb3dlcmVkIHVwIGJ5IGRlYnVnZ2VyICFcbiIpOwotCQkJdDAgPSByZWFkdGIoKTsKLQkJCXdoaWxlIChyZWFkdGIoKSAtIHQwIDwgMypUQl9TUEVFRCkKKwkJCXQwID0gZ2V0X3RibCgpOworCQkJdGltZW91dCA9IDMgKiB0Yl90aWNrc19wZXJfc2VjOworCQkJaWYgKHRpbWVvdXQgPT0gMCkKKwkJCQkvKiBhc3N1bWUgMjVNSHogaWYgdGJfdGlja3NfcGVyX3NlYyBub3Qgc2V0ICovCisJCQkJdGltZW91dCA9IDc1MDAwMDAwOworCQkJd2hpbGUgKGdldF90YmwoKSAtIHQwIDwgdGltZW91dCkKIAkJCQllaWVpbygpOwogCQl9CiAJCS8qIHVzZSB0aGUgQiBjaGFubmVsIGlmIHJlcXVlc3RlZCAqLwpAQCAtNDQ3LDE2NCArNDEwLDE5IEBACiAJc2NjX2luaXRpYWxpemVkID0gMTsKIAlpZiAodmlhX21vZGVtKSB7CiAJCWZvciAoOzspIHsKLQkJCXhtb25fd3JpdGUoTlVMTCwgIkFURTFWMVxyIiwgNyk7CisJCQl4bW9uX3dyaXRlKCJBVEUxVjFcciIsIDcpOwogCQkJaWYgKHhtb25fZXhwZWN0KCJPSyIsIDUpKSB7Ci0JCQkJeG1vbl93cml0ZShOVUxMLCAiQVRBXHIiLCA0KTsKKwkJCQl4bW9uX3dyaXRlKCJBVEFcciIsIDQpOwogCQkJCWlmICh4bW9uX2V4cGVjdCgiQ09OTkVDVCIsIDQwKSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQl4bW9uX3dyaXRlKE5VTEwsICIrKysiLCAzKTsKKwkJCXhtb25fd3JpdGUoIisrKyIsIDMpOwogCQkJeG1vbl9leHBlY3QoIk9LIiwgMyk7CiAJCX0KIAl9CiB9CiAKLXZvaWQgKnhtb25fc3RkaW47Ci12b2lkICp4bW9uX3N0ZG91dDsKLXZvaWQgKnhtb25fc3RkZXJyOwotCi1pbnQgeG1vbl9wdXRjKGludCBjLCB2b2lkICpmKQotewotICAgIGNoYXIgY2ggPSBjOwotCi0gICAgaWYgKGMgPT0gJ1xuJykKLQl4bW9uX3B1dGMoJ1xyJywgZik7Ci0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgJmNoLCAxKSA9PSAxPyBjOiAtMTsKLX0KLQotaW50IHhtb25fcHV0Y2hhcihpbnQgYykKLXsKLQlyZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50IHhtb25fZnB1dHMoY2hhciAqc3RyLCB2b2lkICpmKQotewotCWludCBuID0gc3RybGVuKHN0cik7Ci0KLQlyZXR1cm4geG1vbl93cml0ZShmLCBzdHIsIG4pID09IG4/IDA6IC0xOwotfQotCi1pbnQKLXhtb25fcmVhZGNoYXIodm9pZCkKLXsKLQljaGFyIGNoOwotCi0JZm9yICg7OykgewotCQlzd2l0Y2ggKHhtb25fcmVhZCh4bW9uX3N0ZGluLCAmY2gsIDEpKSB7Ci0JCWNhc2UgMToKLQkJCXJldHVybiBjaDsKLQkJY2FzZSAtMToKLQkJCXhtb25fcHJpbnRmKCJyZWFkKHN0ZGluKSByZXR1cm5lZCAtMVxyXG4iLCAwLCAwKTsKLQkJCXJldHVybiAtMTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGNoYXIgbGluZVsyNTZdOwotc3RhdGljIGNoYXIgKmxpbmVwdHI7Ci1zdGF0aWMgaW50IGxpbmVsZWZ0OwotCi1pbnQgeG1vbl9leHBlY3QoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKLXsKLQlpbnQgYzsKLQl1bnNpZ25lZCBpbnQgdDA7Ci0KLQl0aW1lb3V0ICo9IFRCX1NQRUVEOwotCXQwID0gcmVhZHRiKCk7Ci0JZG8gewotCQlsaW5lcHRyID0gbGluZTsKLQkJZm9yICg7OykgewotCQkJYyA9IHhtb25fcmVhZF9wb2xsKCk7Ci0JCQlpZiAoYyA9PSAtMSkgewotCQkJCWlmIChyZWFkdGIoKSAtIHQwID4gdGltZW91dCkKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoYyA9PSAnXG4nKQotCQkJCWJyZWFrOwotCQkJaWYgKGMgIT0gJ1xyJyAmJiBsaW5lcHRyIDwgJmxpbmVbc2l6ZW9mKGxpbmUpIC0gMV0pCi0JCQkJKmxpbmVwdHIrKyA9IGM7Ci0JCX0KLQkJKmxpbmVwdHIgPSAwOwotCX0gd2hpbGUgKHN0cnN0cihsaW5lLCBzdHIpID09IE5VTEwpOwotCXJldHVybiAxOwotfQotCi1pbnQKLXhtb25fZ2V0Y2hhcih2b2lkKQotewotICAgIGludCBjOwotCi0gICAgaWYgKGxpbmVsZWZ0ID09IDApIHsKLQlsaW5lcHRyID0gbGluZTsKLQlmb3IgKDs7KSB7Ci0JICAgIGMgPSB4bW9uX3JlYWRjaGFyKCk7Ci0JICAgIGlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJYnJlYWs7Ci0JICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCSpsaW5lcHRyKysgPSAnXG4nOwotCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoYykgewotCSAgICBjYXNlIDAxNzc6Ci0JICAgIGNhc2UgJ1xiJzoKLQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgY2FzZSAnVScgJiAweDFGOgotCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIHhtb25fcHV0Y2hhcignICcpOwotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgLS1saW5lcHRyOwotCQl9Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJICAgIHhtb25fcHV0Y2hhcignXGEnKTsKLQkJZWxzZSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoYyk7Ci0JCSAgICAqbGluZXB0cisrID0gYzsKLQkJfQotCSAgICB9Ci0JfQotCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JbGluZXB0ciA9IGxpbmU7Ci0gICAgfQotICAgIGlmIChsaW5lbGVmdCA9PSAwKQotCXJldHVybiAtMTsKLSAgICAtLWxpbmVsZWZ0OwotICAgIHJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgYzsKLQotICAgIGZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JYyA9IHhtb25fZ2V0Y2hhcigpOwotCWlmIChjID09IC0xKSB7Ci0JICAgIGlmIChwID09IHN0cikKLQkJcmV0dXJuIE5VTEw7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCsrID0gYzsKLQlpZiAoYyA9PSAnXG4nKQotCSAgICBicmVhazsKLSAgICB9Ci0gICAgKnAgPSAwOwotICAgIHJldHVybiBzdHI7Ci19Ci0KLXZvaWQKLXhtb25fZW50ZXIodm9pZCkKK3ZvaWQgeG1vbl9lbnRlcih2b2lkKQogewogI2lmZGVmIENPTkZJR19BREJfUE1VCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKQEAgLTYxMyw4ICs0MzEsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQKLXhtb25fbGVhdmUodm9pZCkKK3ZvaWQgeG1vbl9sZWF2ZSh2b2lkKQogewogI2lmZGVmIENPTkZJR19BREJfUE1VCiAJaWYgKF9tYWNoaW5lID09IF9NQUNIX1BtYWMpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMgYi9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF82NC5jCmluZGV4IGU1MGMxNTguLjcxMjU1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0XzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24vc3RhcnRfNjQuYwpAQCAtNiwxODIgKzYsMjkgQEAKICAqICAgICAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAgICAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWRiZy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlICJub25zdGRpby5oIgogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi0KLXN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV94bW9uKGludCBrZXksIHN0cnVjdCBwdF9yZWdzICpwdF9yZWdzLAotCQkJICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkgCit2b2lkIHhtb25fbWFwX3NjYyh2b2lkKQogewotCS8qIGVuc3VyZSB4bW9uIGlzIGVuYWJsZWQgKi8KLQl4bW9uX2luaXQoMSk7Ci0JZGVidWdnZXIocHRfcmVncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3htb25fb3AgPSAKLXsKLQkuaGFuZGxlciA9CXN5c3JxX2hhbmRsZV94bW9uLAotCS5oZWxwX21zZyA9CSJYbW9uIiwKLQkuYWN0aW9uX21zZyA9CSJFbnRlcmluZyB4bW9uIiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3htb25fc3lzcnEodm9pZCkKLXsKLQlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7Ci0JcmV0dXJuIDA7Ci19Ci1fX2luaXRjYWxsKHNldHVwX3htb25fc3lzcnEpOwotI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwotCi1pbnQKLXhtb25fd3JpdGUodm9pZCAqaGFuZGxlLCB2b2lkICpwdHIsIGludCBuYikKK2ludCB4bW9uX3dyaXRlKHZvaWQgKnB0ciwgaW50IG5iKQogewogCXJldHVybiB1ZGJnX3dyaXRlKHB0ciwgbmIpOwogfQogCi1pbnQKLXhtb25fcmVhZCh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQoraW50IHhtb25fcmVhZGNoYXIodm9pZCkKIHsKLQlyZXR1cm4gdWRiZ19yZWFkKHB0ciwgbmIpOworCWlmICh1ZGJnX2dldGMpCisJCXJldHVybiB1ZGJnX2dldGMoKTsKKwlyZXR1cm4gLTE7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCWlmICh1ZGJnX2dldGNfcG9sbCkKIAkJcmV0dXJuIHVkYmdfZ2V0Y19wb2xsKCk7CiAJcmV0dXJuIC0xOwogfQotIAotRklMRSAqeG1vbl9zdGRpbjsKLUZJTEUgKnhtb25fc3Rkb3V0OwotCi1pbnQKLXhtb25fcHV0YyhpbnQgYywgdm9pZCAqZikKLXsKLQljaGFyIGNoID0gYzsKLQotCWlmIChjID09ICdcbicpCi0JCXhtb25fcHV0YygnXHInLCBmKTsKLQlyZXR1cm4geG1vbl93cml0ZShmLCAmY2gsIDEpID09IDE/IGM6IC0xOwotfQotCi1pbnQKLXhtb25fcHV0Y2hhcihpbnQgYykKLXsKLQlyZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50Ci14bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLQlpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0JcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0JY2hhciBjaDsKLQotCWZvciAoOzspIHsKLQkJc3dpdGNoICh4bW9uX3JlYWQoeG1vbl9zdGRpbiwgJmNoLCAxKSkgewotCQljYXNlIDE6Ci0JCQlyZXR1cm4gY2g7Ci0JCWNhc2UgLTE6Ci0JCQl4bW9uX3ByaW50ZigicmVhZChzdGRpbikgcmV0dXJuZWQgLTFcclxuIiwgMCwgMCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBjaGFyIGxpbmVbMjU2XTsKLXN0YXRpYyBjaGFyICpsaW5lcHRyOwotc3RhdGljIGludCBsaW5lbGVmdDsKLQotaW50Ci14bW9uX2dldGNoYXIodm9pZCkKLXsKLQlpbnQgYzsKLQotCWlmIChsaW5lbGVmdCA9PSAwKSB7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCQlmb3IgKDs7KSB7Ci0JCQljID0geG1vbl9yZWFkY2hhcigpOwotCQkJaWYgKGMgPT0gLTEgfHwgYyA9PSA0KQotCQkJCWJyZWFrOwotCQkJaWYgKGMgPT0gJ1xyJyB8fCBjID09ICdcbicpIHsKLQkJCQkqbGluZXB0cisrID0gJ1xuJzsKLQkJCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGMpIHsKLQkJCWNhc2UgMDE3NzoKLQkJCWNhc2UgJ1xiJzoKLQkJCQlpZiAobGluZXB0ciA+IGxpbmUpIHsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQl4bW9uX3B1dGNoYXIoJyAnKTsKLQkJCQkJeG1vbl9wdXRjaGFyKCdcYicpOwotCQkJCQktLWxpbmVwdHI7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSAnVScgJiAweDFGOgotCQkJCXdoaWxlIChsaW5lcHRyID4gbGluZSkgewotCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCQkJCXhtb25fcHV0Y2hhcignICcpOwotCQkJCQl4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCQkJCS0tbGluZXB0cjsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWlmIChsaW5lcHRyID49ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCQl4bW9uX3B1dGNoYXIoJ1xhJyk7Ci0JCQkJZWxzZSB7Ci0JCQkJCXhtb25fcHV0Y2hhcihjKTsKLQkJCQkJKmxpbmVwdHIrKyA9IGM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JCWxpbmVwdHIgPSBsaW5lOwotCX0KLQlpZiAobGluZWxlZnQgPT0gMCkKLQkJcmV0dXJuIC0xOwotCS0tbGluZWxlZnQ7Ci0JcmV0dXJuICpsaW5lcHRyKys7Ci19Ci0KLWNoYXIgKgoteG1vbl9mZ2V0cyhjaGFyICpzdHIsIGludCBuYiwgdm9pZCAqZikKLXsKLQljaGFyICpwOwotCWludCBjOwotCi0JZm9yIChwID0gc3RyOyBwIDwgc3RyICsgbmIgLSAxOyApIHsKLQkJYyA9IHhtb25fZ2V0Y2hhcigpOwotCQlpZiAoYyA9PSAtMSkgewotCQkJaWYgKHAgPT0gc3RyKQotCQkJCXJldHVybiBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJKnArKyA9IGM7Ci0JCWlmIChjID09ICdcbicpCi0JCQlicmVhazsKLQl9Ci0JKnAgPSAwOwotCXJldHVybiBzdHI7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMveG1vbi9zdGFydF84eHguYyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCmluZGV4IGE0OGJkNTkuLjRjMTdiMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCisrKyBiL2FyY2gvcG93ZXJwYy94bW9uL3N0YXJ0Xzh4eC5jCkBAIC0xNSwyNzMgKzE1LDMwIEBACiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgogI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KICNpbmNsdWRlIDxhc20vY29tbXByb2MuaD4KKyNpbmNsdWRlICJub25zdGRpby5oIgogCi1leHRlcm4gdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CiBleHRlcm4gaW50IHhtb25fOHh4X3dyaXRlKGNoYXIgKnN0ciwgaW50IG5iKTsKIGV4dGVybiBpbnQgeG1vbl84eHhfcmVhZF9wb2xsKHZvaWQpOwogZXh0ZXJuIGludCB4bW9uXzh4eF9yZWFkX2NoYXIodm9pZCk7Ci12b2lkIHByb21fZHJhd2hleCh1aW50KTsKLXZvaWQgcHJvbV9kcmF3c3RyaW5nKGNvbnN0IGNoYXIgKnN0cik7CiAKLXN0YXRpYyBpbnQgdXNlX3NjcmVlbiA9IDE7IC8qIGRlZmF1bHQgKi8KLQotI2RlZmluZSBUQl9TUEVFRAkyNTAwMDAwMAotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCByZWFkdGIodm9pZCkKK3ZvaWQgeG1vbl9tYXBfc2NjKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHJldDsKLQotCWFzbSB2b2xhdGlsZSgibWZ0YiAlMCIgOiAiPXIiIChyZXQpIDopOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgYnVmX2FjY2Vzcyh2b2lkKQotewotfQotCi12b2lkCi14bW9uX21hcF9zY2Modm9pZCkKLXsKLQogCWNwbXAgPSAoY3BtOHh4X3QgKikmKCgoaW1tYXBfdCAqKUlNQVBfQUREUiktPmltX2NwbSk7Ci0JdXNlX3NjcmVlbiA9IDA7Ci0JCi0JcHJvbV9kcmF3c3RyaW5nKCJ4bW9uIHVzZXMgc2VyaWFsIHBvcnRcbiIpOwogfQogCi1zdGF0aWMgaW50IHNjY19pbml0aWFsaXplZCA9IDA7Ci0KIHZvaWQgeG1vbl9pbml0X3NjYyh2b2lkKTsKIAotaW50Ci14bW9uX3dyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl93cml0ZSh2b2lkICpwdHIsIGludCBuYikKIHsKLQljaGFyICpwID0gcHRyOwotCWludCBpLCBjLCBjdDsKLQotCWlmICghc2NjX2luaXRpYWxpemVkKQotCQl4bW9uX2luaXRfc2NjKCk7Ci0KIAlyZXR1cm4oeG1vbl84eHhfd3JpdGUocHRyLCBuYikpOwogfQogCi1pbnQgeG1vbl93YW50c19rZXk7Ci0KLWludAoteG1vbl9yZWFkKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpCitpbnQgeG1vbl9yZWFkY2hhcih2b2lkKQogewotCWNoYXIgKnAgPSBwdHI7Ci0JaW50IGk7Ci0KLQlpZiAoIXNjY19pbml0aWFsaXplZCkKLQkJeG1vbl9pbml0X3NjYygpOwotCi0JZm9yIChpID0gMDsgaSA8IG5iOyArK2kpIHsKLQkJKnArKyA9IHhtb25fOHh4X3JlYWRfY2hhcigpOwotCX0KLQlyZXR1cm4gaTsKKwlyZXR1cm4geG1vbl84eHhfcmVhZF9jaGFyKCk7CiB9CiAKLWludAoteG1vbl9yZWFkX3BvbGwodm9pZCkKK2ludCB4bW9uX3JlYWRfcG9sbCh2b2lkKQogewogCXJldHVybih4bW9uXzh4eF9yZWFkX3BvbGwoKSk7CiB9Ci0KLXZvaWQKLXhtb25faW5pdF9zY2MoKQotewotCXNjY19pbml0aWFsaXplZCA9IDE7Ci19Ci0KLSNpZiAwCi1leHRlcm4gaW50ICgqcHJvbV9lbnRyeSkodm9pZCAqKTsKLQotaW50Ci14bW9uX2V4aXQodm9pZCkKLXsKLSAgICBzdHJ1Y3QgcHJvbV9hcmdzIHsKLQljaGFyICpzZXJ2aWNlOwotICAgIH0gYXJnczsKLQotICAgIGZvciAoOzspIHsKLQlhcmdzLnNlcnZpY2UgPSAiZXhpdCI7Ci0JKCpwcm9tX2VudHJ5KSgmYXJncyk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQgKnhtb25fc3RkaW47Ci12b2lkICp4bW9uX3N0ZG91dDsKLXZvaWQgKnhtb25fc3RkZXJyOwotCi12b2lkCi14bW9uX2luaXQodm9pZCkKLXsKLX0KLQotaW50Ci14bW9uX3B1dGMoaW50IGMsIHZvaWQgKmYpCi17Ci0gICAgY2hhciBjaCA9IGM7Ci0KLSAgICBpZiAoYyA9PSAnXG4nKQotCXhtb25fcHV0YygnXHInLCBmKTsKLSAgICByZXR1cm4geG1vbl93cml0ZShmLCAmY2gsIDEpID09IDE/IGM6IC0xOwotfQotCi1pbnQKLXhtb25fcHV0Y2hhcihpbnQgYykKLXsKLSAgICByZXR1cm4geG1vbl9wdXRjKGMsIHhtb25fc3Rkb3V0KTsKLX0KLQotaW50Ci14bW9uX2ZwdXRzKGNoYXIgKnN0ciwgdm9pZCAqZikKLXsKLSAgICBpbnQgbiA9IHN0cmxlbihzdHIpOwotCi0gICAgcmV0dXJuIHhtb25fd3JpdGUoZiwgc3RyLCBuKSA9PSBuPyAwOiAtMTsKLX0KLQotaW50Ci14bW9uX3JlYWRjaGFyKHZvaWQpCi17Ci0gICAgY2hhciBjaDsKLQotICAgIGZvciAoOzspIHsKLQlzd2l0Y2ggKHhtb25fcmVhZCh4bW9uX3N0ZGluLCAmY2gsIDEpKSB7Ci0JY2FzZSAxOgotCSAgICByZXR1cm4gY2g7Ci0JY2FzZSAtMToKLQkgICAgeG1vbl9wcmludGYoInJlYWQoc3RkaW4pIHJldHVybmVkIC0xXHJcbiIsIDAsIDApOwotCSAgICByZXR1cm4gLTE7Ci0JfQotICAgIH0KLX0KLQotc3RhdGljIGNoYXIgbGluZVsyNTZdOwotc3RhdGljIGNoYXIgKmxpbmVwdHI7Ci1zdGF0aWMgaW50IGxpbmVsZWZ0OwotCi0jaWYgMAotaW50IHhtb25fZXhwZWN0KGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHRpbWVvdXQpCi17Ci0JaW50IGM7Ci0JdW5zaWduZWQgaW50IHQwOwotCi0JdGltZW91dCAqPSBUQl9TUEVFRDsKLQl0MCA9IHJlYWR0YigpOwotCWRvIHsKLQkJbGluZXB0ciA9IGxpbmU7Ci0JCWZvciAoOzspIHsKLQkJCWMgPSB4bW9uX3JlYWRfcG9sbCgpOwotCQkJaWYgKGMgPT0gLTEpIHsKLQkJCQlpZiAocmVhZHRiKCkgLSB0MCA+IHRpbWVvdXQpCi0JCQkJCXJldHVybiAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGMgPT0gJ1xuJykKLQkJCQlicmVhazsKLQkJCWlmIChjICE9ICdccicgJiYgbGluZXB0ciA8ICZsaW5lW3NpemVvZihsaW5lKSAtIDFdKQotCQkJCSpsaW5lcHRyKysgPSBjOwotCQl9Ci0JCSpsaW5lcHRyID0gMDsKLQl9IHdoaWxlIChzdHJzdHIobGluZSwgc3RyKSA9PSBOVUxMKTsKLQlyZXR1cm4gMTsKLX0KLSNlbmRpZgotCi1pbnQKLXhtb25fZ2V0Y2hhcih2b2lkKQotewotICAgIGludCBjOwotCi0gICAgaWYgKGxpbmVsZWZ0ID09IDApIHsKLQlsaW5lcHRyID0gbGluZTsKLQlmb3IgKDs7KSB7Ci0JICAgIGMgPSB4bW9uX3JlYWRjaGFyKCk7Ci0JICAgIGlmIChjID09IC0xIHx8IGMgPT0gNCkKLQkJYnJlYWs7Ci0JICAgIGlmIChjID09ICdccicgfHwgYyA9PSAnXG4nKSB7Ci0JCSpsaW5lcHRyKysgPSAnXG4nOwotCQl4bW9uX3B1dGNoYXIoJ1xuJyk7Ci0JCWJyZWFrOwotCSAgICB9Ci0JICAgIHN3aXRjaCAoYykgewotCSAgICBjYXNlIDAxNzc6Ci0JICAgIGNhc2UgJ1xiJzoKLQkJaWYgKGxpbmVwdHIgPiBsaW5lKSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJ1xiJyk7Ci0JCSAgICB4bW9uX3B1dGNoYXIoJyAnKTsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIC0tbGluZXB0cjsKLQkJfQotCQlicmVhazsKLQkgICAgY2FzZSAnVScgJiAweDFGOgotCQl3aGlsZSAobGluZXB0ciA+IGxpbmUpIHsKLQkJICAgIHhtb25fcHV0Y2hhcignXGInKTsKLQkJICAgIHhtb25fcHV0Y2hhcignICcpOwotCQkgICAgeG1vbl9wdXRjaGFyKCdcYicpOwotCQkgICAgLS1saW5lcHRyOwotCQl9Ci0JCWJyZWFrOwotCSAgICBkZWZhdWx0OgotCQlpZiAobGluZXB0ciA+PSAmbGluZVtzaXplb2YobGluZSkgLSAxXSkKLQkJICAgIHhtb25fcHV0Y2hhcignXGEnKTsKLQkJZWxzZSB7Ci0JCSAgICB4bW9uX3B1dGNoYXIoYyk7Ci0JCSAgICAqbGluZXB0cisrID0gYzsKLQkJfQotCSAgICB9Ci0JfQotCWxpbmVsZWZ0ID0gbGluZXB0ciAtIGxpbmU7Ci0JbGluZXB0ciA9IGxpbmU7Ci0gICAgfQotICAgIGlmIChsaW5lbGVmdCA9PSAwKQotCXJldHVybiAtMTsKLSAgICAtLWxpbmVsZWZ0OwotICAgIHJldHVybiAqbGluZXB0cisrOwotfQotCi1jaGFyICoKLXhtb25fZmdldHMoY2hhciAqc3RyLCBpbnQgbmIsIHZvaWQgKmYpCi17Ci0gICAgY2hhciAqcDsKLSAgICBpbnQgYzsKLQotICAgIGZvciAocCA9IHN0cjsgcCA8IHN0ciArIG5iIC0gMTsgKSB7Ci0JYyA9IHhtb25fZ2V0Y2hhcigpOwotCWlmIChjID09IC0xKSB7Ci0JICAgIGlmIChwID09IHN0cikKLQkJcmV0dXJuIDA7Ci0JICAgIGJyZWFrOwotCX0KLQkqcCsrID0gYzsKLQlpZiAoYyA9PSAnXG4nKQotCSAgICBicmVhazsKLSAgICB9Ci0gICAgKnAgPSAwOwotICAgIHJldHVybiBzdHI7Ci19Ci0KLXZvaWQKLXByb21fZHJhd2hleCh1aW50IHZhbCkKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMF07Ci0KLQlpbnQgaTsKLQlmb3IgKGkgPSA3OyAgaSA+PSAwOyAgaS0tKQotCXsKLQkJYnVmW2ldID0gIjAxMjM0NTY3ODlhYmNkZWYiW3ZhbCAmIDB4MGZdOwotCQl2YWwgPj49IDQ7Ci0JfQotCWJ1Zls4XSA9ICdcMCc7Ci0JeG1vbl9mcHV0cyhidWYsIHhtb25fc3Rkb3V0KTsKLX0KLQotdm9pZAotcHJvbV9kcmF3c3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKLXsKLQl4bW9uX2ZwdXRzKHN0ciwgeG1vbl9zdGRvdXQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24vc3Vicl9wcmYuYyBiL2FyY2gvcG93ZXJwYy94bW9uL3N1YnJfcHJmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ODczOGMuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL3htb24vc3Vicl9wcmYuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IENvcnQgRG91Z2FuIHRvIHJlcGxhY2UgdGhlIHZlcnNpb24gb3JpZ2luYWxseSB1c2VkCi0gKiBieSBQYXVsIE1hY2tlcnJhcywgd2hpY2ggY2FtZSBmcm9tIE5ldEJTRCBhbmQgdGh1cyBoYWQgY29weXJpZ2h0Ci0gKiBjb25mbGljdHMgd2l0aCBMaW51eC4KLSAqCi0gKiBUaGlzIGZpbGUgbWFrZXMgbGliZXJhbCB1c2Ugb2YgdGhlIHN0YW5kYXJkIGxpbnV4IHV0aWxpdHkKLSAqIHJvdXRpbmVzIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5LiAgV2UgYXNzdW1lIHdlIGNhbgotICogdHJ1c3Qgc29tZSBwYXJ0cyBvZiBMaW51eCBpbnNpZGUgdGhlIGRlYnVnZ2VyLgotICogICAtLSBDb3J0IChjb3J0QGNzLm5tdC5lZHUpCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IENvcnQgRG91Z2FuLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSAibm9uc3RkaW8uaCIKLQotZXh0ZXJuIGludCB4bW9uX3dyaXRlKHZvaWQgKiwgdm9pZCAqLCBpbnQpOwotCi12b2lkIHhtb25fdmZwcmludGYodm9pZCAqZiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQotewotCXN0YXRpYyBjaGFyIHhtb25fYnVmWzIwNDhdOwotCWludCBuOwotCi0JbiA9IHZzcHJpbnRmKHhtb25fYnVmLCBmbXQsIGFwKTsKLQl4bW9uX3dyaXRlKGYsIHhtb25fYnVmLCBuKTsKLX0KLQotdm9pZCB4bW9uX3ByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JeG1vbl92ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci1FWFBPUlRfU1lNQk9MKHhtb25fcHJpbnRmKTsKLQotdm9pZCB4bW9uX2ZwcmludGYodm9pZCAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXhtb25fdmZwcmludGYoZiwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCmluZGV4IDExMjRmMTEuLmVmNDM1NmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYworKysgYi9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogUm91dGluZXMgcHJvdmlkaW5nIGEgc2ltcGxlIG1vbml0b3IgZm9yIHVzZSBvbiB0aGUgUG93ZXJNYWMuCiAgKgotICogQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgorICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDUgUGF1bCBNYWNrZXJyYXMuCiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CkBAIC0xNDQsMTUgKzE0NSwxMCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKmdldHZlY25hbWUodW5zaWduZWQgbG9uZyB2ZWMpOwogCiBleHRlcm4gaW50IHByaW50X2luc25fcG93ZXJwYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBpbnQpOwotZXh0ZXJuIHZvaWQgcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWV4dGVybiB2b2lkIHhtb25fdmZwcmludGYodm9pZCAqZiwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKTsKLWV4dGVybiBpbnQgeG1vbl9wdXRjKGludCBjLCB2b2lkICpmKTsKLWV4dGVybiBpbnQgcHV0Y2hhcihpbnQgY2gpOwogCiBleHRlcm4gdm9pZCB4bW9uX2VudGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgeG1vbl9sZWF2ZSh2b2lkKTsKIAotZXh0ZXJuIGludCB4bW9uX3JlYWRfcG9sbCh2b2lkKTsKIGV4dGVybiBsb25nIHNldGptcChsb25nICopOwogZXh0ZXJuIHZvaWQgbG9uZ2ptcChsb25nICosIGxvbmcpOwogZXh0ZXJuIHZvaWQgeG1vbl9zYXZlX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CkBAIC03NDgsNyArNzQ0LDYgQEAKIAkJcHJpbnRmKCIleDoiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAkJcHJpbnRmKCJtb24+ICIpOwotCQlmZmx1c2goc3Rkb3V0KTsKIAkJZmx1c2hfaW5wdXQoKTsKIAkJdGVybWNoID0gMDsKIAkJY21kID0gc2tpcGJsKCk7CkBAIC0xNDcyLDE3ICsxNDY3LDIzIEBACiB7CiAJdW5zaWduZWQgaW50IGluc3Ryc1syXTsKIAl1bnNpZ25lZCBsb25nICgqY29kZSkodm9pZCk7Ci0JdW5zaWduZWQgbG9uZyBvcGRbM107CiAJdW5zaWduZWQgbG9uZyByZXQgPSAtMVVMOworI2lmZGVmIENPTkZJR19QUEM2NAorCXVuc2lnbmVkIGxvbmcgb3BkWzNdOwogCi0JaW5zdHJzWzBdID0gMHg3YzYwMDJhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKLQlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCW9wZFswXSA9ICh1bnNpZ25lZCBsb25nKWluc3RyczsKIAlvcGRbMV0gPSAwOwogCW9wZFsyXSA9IDA7CisJY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh2b2lkKSkgb3BkOworI2Vsc2UKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHZvaWQpKSBpbnN0cnM7CisjZW5kaWYKKworCS8qIG1mc3ByIHIzLG47IGJsciAqLworCWluc3Ryc1swXSA9IDB4N2M2MDAyYTYgKyAoKG4gJiAweDFGKSA8PCAxNikgKyAoKG4gJiAweDNlMCkgPDwgNik7CisJaW5zdHJzWzFdID0gMHg0ZTgwMDAyMDsKIAlzdG9yZV9pbnN0KGluc3Rycyk7CiAJc3RvcmVfaW5zdChpbnN0cnMrMSk7Ci0JY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh2b2lkKSkgb3BkOwogCiAJaWYgKHNldGptcChidXNfZXJyb3Jfam1wKSA9PSAwKSB7CiAJCWNhdGNoX21lbW9yeV9lcnJvcnMgPSAxOwpAQCAtMTUwNCwxNiArMTUwNSwyMSBAQAogewogCXVuc2lnbmVkIGludCBpbnN0cnNbMl07CiAJdW5zaWduZWQgbG9uZyAoKmNvZGUpKHVuc2lnbmVkIGxvbmcpOworI2lmZGVmIENPTkZJR19QUEM2NAogCXVuc2lnbmVkIGxvbmcgb3BkWzNdOwogCi0JaW5zdHJzWzBdID0gMHg3YzYwMDNhNiArICgobiAmIDB4MUYpIDw8IDE2KSArICgobiAmIDB4M2UwKSA8PCA2KTsKLQlpbnN0cnNbMV0gPSAweDRlODAwMDIwOwogCW9wZFswXSA9ICh1bnNpZ25lZCBsb25nKWluc3RyczsKIAlvcGRbMV0gPSAwOwogCW9wZFsyXSA9IDA7CisJY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh1bnNpZ25lZCBsb25nKSkgb3BkOworI2Vsc2UKKwljb2RlID0gKHVuc2lnbmVkIGxvbmcgKCopKHVuc2lnbmVkIGxvbmcpKSBpbnN0cnM7CisjZW5kaWYKKworCWluc3Ryc1swXSA9IDB4N2M2MDAzYTYgKyAoKG4gJiAweDFGKSA8PCAxNikgKyAoKG4gJiAweDNlMCkgPDwgNik7CisJaW5zdHJzWzFdID0gMHg0ZTgwMDAyMDsKIAlzdG9yZV9pbnN0KGluc3Rycyk7CiAJc3RvcmVfaW5zdChpbnN0cnMrMSk7Ci0JY29kZSA9ICh1bnNpZ25lZCBsb25nICgqKSh1bnNpZ25lZCBsb25nKSkgb3BkOwogCiAJaWYgKHNldGptcChidXNfZXJyb3Jfam1wKSA9PSAwKSB7CiAJCWNhdGNoX21lbW9yeV9lcnJvcnMgPSAxOwpAQCAtMTc5Nyw3ICsxODAzLDcgQEAKIAlmb3IoOzspewogCQlpZiAoIW1ub3JlYWQpCiAJCQluID0gbXJlYWQoYWRycywgdmFsLCBzaXplKTsKLQkJcHJpbnRmKCIlLjE2eCVjIiwgYWRycywgYnJldj8gJ3InOiAnICcpOworCQlwcmludGYoUkVHIiVjIiwgYWRycywgYnJldj8gJ3InOiAnICcpOwogCQlpZiAoIW1ub3JlYWQpIHsKIAkJCWlmIChicmV2KQogCQkJCWJ5dGVyZXYodmFsLCBzaXplKTsKQEAgLTE5NzYsMTcgKzE5ODIsMTggQEAKIAkJbnIgPSBtcmVhZChhZHJzLCB0ZW1wLCByKTsKIAkJYWRycyArPSBucjsKIAkJZm9yIChtID0gMDsgbSA8IHI7ICsrbSkgewotCQkgICAgICAgIGlmICgobSAmIDcpID09IDAgJiYgbSA+IDApCi0JCQkgICAgcHV0Y2hhcignICcpOworCQkgICAgICAgIGlmICgobSAmIChzaXplb2YobG9uZykgLSAxKSkgPT0gMCAmJiBtID4gMCkKKwkJCQlwdXRjaGFyKCcgJyk7CiAJCQlpZiAobSA8IG5yKQogCQkJCXByaW50ZigiJS4yeCIsIHRlbXBbbV0pOwogCQkJZWxzZQogCQkJCXByaW50ZigiJXMiLCBmYXVsdF9jaGFyc1tmYXVsdF90eXBlXSk7CiAJCX0KLQkJaWYgKG0gPD0gOCkKLQkJCXByaW50ZigiICIpOwotCQlmb3IgKDsgbSA8IDE2OyArK20pCisJCWZvciAoOyBtIDwgMTY7ICsrbSkgeworCQkgICAgICAgIGlmICgobSAmIChzaXplb2YobG9uZykgLSAxKSkgPT0gMCkKKwkJCQlwdXRjaGFyKCcgJyk7CiAJCQlwcmludGYoIiAgIik7CisJCX0KIAkJcHJpbnRmKCIgIHwiKTsKIAkJZm9yIChtID0gMDsgbSA8IHI7ICsrbSkgewogCQkJaWYgKG0gPCBucikgewpAQCAtMjE1MSw3ICsyMTU4LDYgQEAKIAkJb2sgPSBtcmVhZChhLCAmdiwgMSk7CiAJCWlmIChvayAmJiAhb29rKSB7CiAJCQlwcmludGYoIiUuOHggLi4gIiwgYSk7Ci0JCQlmZmx1c2goc3Rkb3V0KTsKIAkJfSBlbHNlIGlmICghb2sgJiYgb29rKQogCQkJcHJpbnRmKCIlLjh4XG4iLCBhIC0gbXNraXApOwogCQlvb2sgPSBvazsKQEAgLTIzNzIsNyArMjM3OCw3IEBACiBpbmNoYXIodm9pZCkKIHsKIAlpZiAobGluZXB0ciA9PSBOVUxMIHx8ICpsaW5lcHRyID09IDApIHsKLQkJaWYgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pID09IE5VTEwpIHsKKwkJaWYgKHhtb25fZ2V0cyhsaW5lLCBzaXplb2YobGluZSkpID09IE5VTEwpIHsKIAkJCWxpbmVwdHIgPSBOVUxMOwogCQkJcmV0dXJuIEVPRjsKIAkJfQpAQCAtMjUyNiw0ICsyNTMyLDI5IEBACiAJCV9fZGVidWdnZXJfZGFicl9tYXRjaCA9IE5VTEw7CiAJCV9fZGVidWdnZXJfZmF1bHRfaGFuZGxlciA9IE5VTEw7CiAJfQorCXhtb25fbWFwX3NjYygpOwogfQorCisjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCitzdGF0aWMgdm9pZCBzeXNycV9oYW5kbGVfeG1vbihpbnQga2V5LCBzdHJ1Y3QgcHRfcmVncyAqcHRfcmVncywKKwkJCSAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpIAoreworCS8qIGVuc3VyZSB4bW9uIGlzIGVuYWJsZWQgKi8KKwl4bW9uX2luaXQoMSk7CisJZGVidWdnZXIocHRfcmVncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX3htb25fb3AgPSAKK3sKKwkuaGFuZGxlciA9CXN5c3JxX2hhbmRsZV94bW9uLAorCS5oZWxwX21zZyA9CSJYbW9uIiwKKwkuYWN0aW9uX21zZyA9CSJFbnRlcmluZyB4bW9uIiwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX3htb25fc3lzcnEodm9pZCkKK3sKKwlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7CisJcmV0dXJuIDA7Cit9CitfX2luaXRjYWxsKHNldHVwX3htb25fc3lzcnEpOworI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL29mMTI3NS5oIGIvYXJjaC9wcGMvYm9vdC9pbmNsdWRlL29mMTI3NS5oCmluZGV4IDY5MTczZGYuLjRlZDg4YWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2Jvb3QvaW5jbHVkZS9vZjEyNzUuaAorKysgYi9hcmNoL3BwYy9ib290L2luY2x1ZGUvb2YxMjc1LmgKQEAgLTE5LDYgKzE5LDkgQEAKIAogLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCiAKK2ludAljYWxsX3Byb20oY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwgLi4uKTsKK2ludAljYWxsX3Byb21fcmV0KGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsCisJCSAgICAgIHVuc2lnbmVkIGludCAqcmV0cywgLi4uKTsKIHZvaWQgKgljbGFpbSh1bnNpZ25lZCBpbnQgdmlydCwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBhbGlnbik7CiBpbnQJbWFwKHVuc2lnbmVkIGludCBwaHlzLCB1bnNpZ25lZCBpbnQgdmlydCwgdW5zaWduZWQgaW50IHNpemUpOwogdm9pZAllbnRlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvTWFrZWZpbGUKaW5kZXggMDJlNmYyMy4uMGI5NzljMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvTWFrZWZpbGUKQEAgLTMsNCArMyw0IEBACiAjCiAKIGxpYi15IDo9IGNsYWltLm8gZW50ZXIubyBleGl0Lm8gZmluZGRldmljZS5vIGdldHByb3AubyBvZmluaXQubwlcCi0JIG9mc3RkaW8ubyByZWFkLm8gcmVsZWFzZS5vIHdyaXRlLm8gbWFwLm8KKwkgb2ZzdGRpby5vIHJlYWQubyByZWxlYXNlLm8gd3JpdGUubyBtYXAubyBjYWxsX3Byb20ubwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2FsbF9wcm9tLmMgYi9hcmNoL3BwYy9ib290L29mMTI3NS9jYWxsX3Byb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDc5YTNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2FsbF9wcm9tLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5Ni0yMDA1IFBhdWwgTWFja2VycmFzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgIm9mMTI3NS5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQgY2FsbF9wcm9tKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsIC4uLikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvbV9hcmdzIHsKKwkJY29uc3QgY2hhciAqc2VydmljZTsKKwkJaW50IG5hcmdzOworCQlpbnQgbnJldDsKKwkJdW5zaWduZWQgaW50IGFyZ3NbMTJdOworCX0gYXJnczsKKwl2YV9saXN0IGxpc3Q7CisKKwlhcmdzLnNlcnZpY2UgPSBzZXJ2aWNlOworCWFyZ3MubmFyZ3MgPSBuYXJnczsKKwlhcmdzLm5yZXQgPSBucmV0OworCisJdmFfc3RhcnQobGlzdCwgbnJldCk7CisJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCWFyZ3MuYXJnc1tpXSA9IHZhX2FyZyhsaXN0LCB1bnNpZ25lZCBpbnQpOworCXZhX2VuZChsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucmV0OyBpKyspCisJCWFyZ3MuYXJnc1tuYXJncytpXSA9IDA7CisKKwlpZiAob2ZfcHJvbV9lbnRyeSgmYXJncykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gKG5yZXQgPiAwKT8gYXJncy5hcmdzW25hcmdzXTogMDsKK30KKworaW50IGNhbGxfcHJvbV9yZXQoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKKwkJICB1bnNpZ25lZCBpbnQgKnJldHMsIC4uLikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvbV9hcmdzIHsKKwkJY29uc3QgY2hhciAqc2VydmljZTsKKwkJaW50IG5hcmdzOworCQlpbnQgbnJldDsKKwkJdW5zaWduZWQgaW50IGFyZ3NbMTJdOworCX0gYXJnczsKKwl2YV9saXN0IGxpc3Q7CisKKwlhcmdzLnNlcnZpY2UgPSBzZXJ2aWNlOworCWFyZ3MubmFyZ3MgPSBuYXJnczsKKwlhcmdzLm5yZXQgPSBucmV0OworCisJdmFfc3RhcnQobGlzdCwgcmV0cyk7CisJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCWFyZ3MuYXJnc1tpXSA9IHZhX2FyZyhsaXN0LCB1bnNpZ25lZCBpbnQpOworCXZhX2VuZChsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucmV0OyBpKyspCisJCWFyZ3MuYXJnc1tuYXJncytpXSA9IDA7CisKKwlpZiAob2ZfcHJvbV9lbnRyeSgmYXJncykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAocmV0cyAhPSAodm9pZCAqKSAwKQorCQlmb3IgKGkgPSAxOyBpIDwgbnJldDsgKytpKQorCQkJcmV0c1tpLTFdID0gYXJncy5hcmdzW25hcmdzK2ldOworCisJcmV0dXJuIChucmV0ID4gMCk/IGFyZ3MuYXJnc1tuYXJnc106IDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L29mMTI3NS9jbGFpbS5jIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvY2xhaW0uYwppbmRleCAxMzE2OWE1Li4xZWQzYWVlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29mMTI3NS9jbGFpbS5jCisrKyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2NsYWltLmMKQEAgLTksMjcgKzksODQgQEAKICAqLwogCiAjaW5jbHVkZSAib2YxMjc1LmgiCisjaW5jbHVkZSAibm9uc3RkaW8uaCIKIAotdm9pZCAqCi1jbGFpbSh1bnNpZ25lZCBpbnQgdmlydCwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBhbGlnbikKKy8qCisgKiBPbGRlciBPRidzIHJlcXVpcmUgdGhhdCB3aGVuIGNsYWltaW5nIGEgc3BlY2lmaWMgcmFuZ2Ugb2YgYWRkcmVzc2VzLAorICogd2UgY2xhaW0gdGhlIHBoeXNpY2FsIHNwYWNlIGluIHRoZSAvbWVtb3J5IG5vZGUgYW5kIHRoZSB2aXJ0dWFsCisgKiBzcGFjZSBpbiB0aGUgY2hvc2VuIG1tdSBub2RlLCBhbmQgdGhlbiBkbyBhIG1hcCBvcGVyYXRpb24gdG8KKyAqIG1hcCB2aXJ0dWFsIHRvIHBoeXNpY2FsLgorICovCitzdGF0aWMgaW50IG5lZWRfbWFwID0gLTE7CitzdGF0aWMgaWhhbmRsZSBjaG9zZW5fbW11Oworc3RhdGljIHBoYW5kbGUgbWVtb3J5OworCisvKiByZXR1cm5zIHRydWUgaWYgczIgaXMgYSBwcmVmaXggb2YgczEgKi8KK3N0YXRpYyBpbnQgc3RyaW5nX21hdGNoKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKIHsKLSAgICBzdHJ1Y3QgcHJvbV9hcmdzIHsKLQljaGFyICpzZXJ2aWNlOwotCWludCBuYXJnczsKLQlpbnQgbnJldDsKLQl1bnNpZ25lZCBpbnQgdmlydDsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQl1bnNpZ25lZCBpbnQgYWxpZ247Ci0Jdm9pZCAqcmV0OwotICAgIH0gYXJnczsKKwlmb3IgKDsgKnMyOyArK3MyKQorCQlpZiAoKnMxKysgIT0gKnMyKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CiAKLSAgICBhcmdzLnNlcnZpY2UgPSAiY2xhaW0iOwotICAgIGFyZ3MubmFyZ3MgPSAzOwotICAgIGFyZ3MubnJldCA9IDE7Ci0gICAgYXJncy52aXJ0ID0gdmlydDsKLSAgICBhcmdzLnNpemUgPSBzaXplOwotICAgIGFyZ3MuYWxpZ24gPSBhbGlnbjsKLSAgICBhcmdzLnJldCA9ICh2b2lkICopIDA7Ci0gICAgKCpvZl9wcm9tX2VudHJ5KSgmYXJncyk7Ci0gICAgcmV0dXJuIGFyZ3MucmV0Oworc3RhdGljIGludCBjaGVja19vZl92ZXJzaW9uKHZvaWQpCit7CisJcGhhbmRsZSBvcHJvbSwgY2hvc2VuOworCWNoYXIgdmVyc2lvbls2NF07CisKKwlvcHJvbSA9IGZpbmRkZXZpY2UoIi9vcGVucHJvbSIpOworCWlmIChvcHJvbSA9PSBPRl9JTlZBTElEX0hBTkRMRSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldHByb3Aob3Byb20sICJtb2RlbCIsIHZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSkgPD0gMCkKKwkJcmV0dXJuIDA7CisJdmVyc2lvbltzaXplb2YodmVyc2lvbiktMV0gPSAwOworCXByaW50ZigiT0YgdmVyc2lvbiA9ICclcydcbiIsIHZlcnNpb24pOworCWlmICghc3RyaW5nX21hdGNoKHZlcnNpb24sICJPcGVuIEZpcm13YXJlLCAxLiIpCisJICAgICYmICFzdHJpbmdfbWF0Y2godmVyc2lvbiwgIkZpcm1Xb3JrcywzLiIpKQorCQlyZXR1cm4gMDsKKwljaG9zZW4gPSBmaW5kZGV2aWNlKCIvY2hvc2VuIik7CisJaWYgKGNob3NlbiA9PSBPRl9JTlZBTElEX0hBTkRMRSkgeworCQljaG9zZW4gPSBmaW5kZGV2aWNlKCIvY2hvc2VuQDAiKTsKKwkJaWYgKGNob3NlbiA9PSBPRl9JTlZBTElEX0hBTkRMRSkgeworCQkJcHJpbnRmKCJubyBjaG9zZW5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKGdldHByb3AoY2hvc2VuLCAibW11IiwgJmNob3Nlbl9tbXUsIHNpemVvZihjaG9zZW5fbW11KSkgPD0gMCkgeworCQlwcmludGYoIm5vIG1tdVxuIik7CisJCXJldHVybiAwOworCX0KKwltZW1vcnkgPSAoaWhhbmRsZSkgY2FsbF9wcm9tKCJvcGVuIiwgMSwgMSwgIi9tZW1vcnkiKTsKKwlpZiAobWVtb3J5ID09IE9GX0lOVkFMSURfSEFORExFKSB7CisJCW1lbW9yeSA9IChpaGFuZGxlKSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCAiL21lbW9yeUAwIik7CisJCWlmIChtZW1vcnkgPT0gT0ZfSU5WQUxJRF9IQU5ETEUpIHsKKwkJCXByaW50Zigibm8gbWVtb3J5IG5vZGVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcHJpbnRmKCJvbGQgT0YgZGV0ZWN0ZWRcbiIpOworCXJldHVybiAxOworfQorCit2b2lkICpjbGFpbSh1bnNpZ25lZCBpbnQgdmlydCwgdW5zaWduZWQgaW50IHNpemUsIHVuc2lnbmVkIGludCBhbGlnbikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlpZiAobmVlZF9tYXAgPCAwKQorCQluZWVkX21hcCA9IGNoZWNrX29mX3ZlcnNpb24oKTsKKwlpZiAoYWxpZ24gfHwgIW5lZWRfbWFwKQorCQlyZXR1cm4gKHZvaWQgKikgY2FsbF9wcm9tKCJjbGFpbSIsIDMsIDEsIHZpcnQsIHNpemUsIGFsaWduKTsKKwkKKwlyZXQgPSBjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDUsIDIsICZyZXN1bHQsICJjbGFpbSIsIG1lbW9yeSwKKwkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7CisJaWYgKHJldCAhPSAwIHx8IHJlc3VsdCA9PSAtMSkKKwkJcmV0dXJuICh2b2lkICopIC0xOworCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwgImNsYWltIiwgY2hvc2VuX21tdSwKKwkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7CisJLyogMHgxMiA9PSBjb2hlcmVudCArIHJlYWQvd3JpdGUgKi8KKwlyZXQgPSBjYWxsX3Byb20oImNhbGwtbWV0aG9kIiwgNiwgMSwgIm1hcCIsIGNob3Nlbl9tbXUsCisJCQkweDEyLCBzaXplLCB2aXJ0LCB2aXJ0KTsKKwlyZXR1cm4gdmlydDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2ZpbmRkZXZpY2UuYyBiL2FyY2gvcHBjL2Jvb3Qvb2YxMjc1L2ZpbmRkZXZpY2UuYwppbmRleCAyYzBmN2NiLi4wZGNiMTIwIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29mMTI3NS9maW5kZGV2aWNlLmMKKysrIGIvYXJjaC9wcGMvYm9vdC9vZjEyNzUvZmluZGRldmljZS5jCkBAIC0xMCwyMiArMTAsNyBAQAogCiAjaW5jbHVkZSAib2YxMjc1LmgiCiAKLXBoYW5kbGUKLWZpbmRkZXZpY2UoY29uc3QgY2hhciAqbmFtZSkKK3BoYW5kbGUgZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKQogewotICAgIHN0cnVjdCBwcm9tX2FyZ3MgewotCWNoYXIgKnNlcnZpY2U7Ci0JaW50IG5hcmdzOwotCWludCBucmV0OwotCWNvbnN0IGNoYXIgKmRldnNwZWM7Ci0JcGhhbmRsZSBkZXZpY2U7Ci0gICAgfSBhcmdzOwotCi0gICAgYXJncy5zZXJ2aWNlID0gImZpbmRkZXZpY2UiOwotICAgIGFyZ3MubmFyZ3MgPSAxOwotICAgIGFyZ3MubnJldCA9IDE7Ci0gICAgYXJncy5kZXZzcGVjID0gbmFtZTsKLSAgICBhcmdzLmRldmljZSA9IE9GX0lOVkFMSURfSEFORExFOwotICAgICgqb2ZfcHJvbV9lbnRyeSkoJmFyZ3MpOwotICAgIHJldHVybiBhcmdzLmRldmljZTsKKwlyZXR1cm4gKHBoYW5kbGUpIGNhbGxfcHJvbSgiZmluZGRldmljZSIsIDEsIDEsIG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvYm9vdC9vcGVuZmlybXdhcmUvTWFrZWZpbGUgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQppbmRleCAwMzQxNTIzLi44M2E2NDMzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9ib290L29wZW5maXJtd2FyZS9NYWtlZmlsZQpAQCAtODAsOCArODAsNyBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rbm90ZSkKIAogCi0kKG9iaikvY29mZmNydDAubzogRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbCAtRFhDT0ZGCi0kKG9iaikvY3J0MC5vOiAgICAgRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAorJChvYmopL2NvZmZjcnQwLm86IEVYVFJBX0FGTEFHUyA6PSAtRFhDT0ZGCiB0YXJnZXRzICs9IGNvZmZjcnQwLm8gY3J0MC5vCiAkKG9iaikvY29mZmNydDAubyAkKG9iaikvY3J0MC5vOiAkKGNvbW1vbikvY3J0MC5TIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGFzX29fUykKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcHBjL2tlcm5lbC9NYWtlZmlsZQppbmRleCA3NmE1NWE0Li4xN2E0ZGE2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wcGMva2VybmVsL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw3IEBACiBleHRyYS0kKENPTkZJR19QT1dFUjQpCQkrPSBpZGxlX3Bvd2VyNC5vCiBleHRyYS15CQkJCSs9IHZtbGludXgubGRzCiAKLW9iai15CQkJCTo9IGVudHJ5Lm8gdHJhcHMubyBpcnEubyBpZGxlLm8gdGltZS5vIG1pc2MubyBcCitvYmoteQkJCQk6PSBlbnRyeS5vIHRyYXBzLm8gaWRsZS5vIHRpbWUubyBtaXNjLm8gXAogCQkJCQlwcm9jZXNzLm8gYWxpZ24ubyBcCiAJCQkJCXNldHVwLm8gXAogCQkJCQlwcGNfaHRhYi5vCkBAIC0zOCw4ICszOCw3IEBACiAjIFRoZXNlIGFyZSBoZXJlIHdoaWxlIHdlIGRvIHRoZSBhcmNoaXRlY3R1cmUgbWVyZ2UKIAogZWxzZQotb2JqLXkJCQkJOj0gaXJxLm8gaWRsZS5vIFwKLQkJCQkJYWxpZ24ubworb2JqLXkJCQkJOj0gaWRsZS5vIGFsaWduLm8KIG9iai0kKENPTkZJR182eHgpCQkrPSBsMmNyLm8gY3B1X3NldHVwXzZ4eC5vCiBvYmotJChDT05GSUdfU09GVFdBUkVfU1VTUEVORCkJKz0gc3dzdXNwLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggOTY4MjYxZC4uZmUwZTc2NyAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3Zkc29fZGF0YXBhZ2UuaD4KIAogI2RlZmluZSBERUZJTkUoc3ltLCB2YWwpIFwKIAlhc20gdm9sYXRpbGUoIlxuLT4iICNzeW0gIiAlMCAiICN2YWwgOiA6ICJpIiAodmFsKSkKQEAgLTE0Myw1ICsxNDQsMzIgQEAKIAogCURFRklORShUQVNLX1NJWkUsIFRBU0tfU0laRSk7CiAJREVGSU5FKE5VTV9VU0VSX1NFR01FTlRTLCBUQVNLX1NJWkU+PjI4KTsKKworCS8qIGRhdGFwYWdlIG9mZnNldHMgZm9yIHVzZSBieSB2ZHNvICovCisJREVGSU5FKENGR19UQl9PUklHX1NUQU1QLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl9vcmlnX3N0YW1wKSk7CisJREVGSU5FKENGR19UQl9USUNLU19QRVJfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0Yl90aWNrc19wZXJfc2VjKSk7CisJREVGSU5FKENGR19UQl9UT19YUywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdG9feHMpKTsKKwlERUZJTkUoQ0ZHX1NUQU1QX1hTRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHN0YW1wX3hzZWMpKTsKKwlERUZJTkUoQ0ZHX1RCX1VQREFURV9DT1VOVCwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdGJfdXBkYXRlX2NvdW50KSk7CisJREVGSU5FKENGR19UWl9NSU5VVEVXRVNULCBvZmZzZXRvZihzdHJ1Y3QgdmRzb19kYXRhLCB0el9taW51dGVzd2VzdCkpOworCURFRklORShDRkdfVFpfRFNUVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgdHpfZHN0dGltZSkpOworCURFRklORShDRkdfU1lTQ0FMTF9NQVAzMiwgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgc3lzY2FsbF9tYXBfMzIpKTsKKwlERUZJTkUoV1RPTV9DTE9DS19TRUMsIG9mZnNldG9mKHN0cnVjdCB2ZHNvX2RhdGEsIHd0b21fY2xvY2tfc2VjKSk7CisJREVGSU5FKFdUT01fQ0xPQ0tfTlNFQywgb2Zmc2V0b2Yoc3RydWN0IHZkc29fZGF0YSwgd3RvbV9jbG9ja19uc2VjKSk7CisJREVGSU5FKFRWQUwzMl9UVl9TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl9zZWMpKTsKKwlERUZJTkUoVFZBTDMyX1RWX1VTRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1ldmFsLCB0dl91c2VjKSk7CisJREVGSU5FKFRTUEVDMzJfVFZfU0VDLCBvZmZzZXRvZihzdHJ1Y3QgdGltZXNwZWMsIHR2X3NlYykpOworCURFRklORShUU1BFQzMyX1RWX05TRUMsIG9mZnNldG9mKHN0cnVjdCB0aW1lc3BlYywgdHZfbnNlYykpOworCisJLyogdGltZXZhbC90aW1lem9uZSBvZmZzZXRzIGZvciB1c2UgYnkgdmRzbyAqLworCURFRklORShUWk9ORV9UWl9NSU5XRVNULCBvZmZzZXRvZihzdHJ1Y3QgdGltZXpvbmUsIHR6X21pbnV0ZXN3ZXN0KSk7CisJREVGSU5FKFRaT05FX1RaX0RTVFRJTUUsIG9mZnNldG9mKHN0cnVjdCB0aW1lem9uZSwgdHpfZHN0dGltZSkpOworCisJLyogT3RoZXIgYml0cyB1c2VkIGJ5IHRoZSB2ZHNvICovCisJREVGSU5FKENMT0NLX1JFQUxUSU1FLCBDTE9DS19SRUFMVElNRSk7CisJREVGSU5FKENMT0NLX01PTk9UT05JQywgQ0xPQ0tfTU9OT1RPTklDKTsKKwlERUZJTkUoTlNFQ19QRVJfU0VDLCBOU0VDX1BFUl9TRUMpOworCURFRklORShDTE9DS19SRUFMVElNRV9SRVMsIFRJQ0tfTlNFQyk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmggYi9hcmNoL3BwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGFlYjM0OWIuLmYzZDI3NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9oZWFkX2Jvb2tlLmgKKysrIGIvYXJjaC9wcGMva2VybmVsL2hlYWRfYm9va2UuaApAQCAtMzU4LDYgKzM1OCw2IEBACiAJTk9STUFMX0VYQ0VQVElPTl9QUk9MT0c7CQkJCQkgICAgICBcCiAJYm5lCWxvYWRfdXBfZnB1OwkJLyogaWYgZnJvbSB1c2VyLCBqdXN0IGxvYWQgaXQgdXAgKi8gICBcCiAJYWRkaQlyMyxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRDsJCQkJICAgICAgXAotCUVYQ19YRkVSX0VFX0xJVEUoMHg4MDAsIEtlcm5lbEZQKQorCUVYQ19YRkVSX0VFX0xJVEUoMHg4MDAsIGtlcm5lbF9mcF91bmF2YWlsYWJsZV9leGNlcHRpb24pCiAKICNlbmRpZiAvKiBfX0hFQURfQk9PS0VfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BwYy9rZXJuZWwvaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYjJiOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9wcGMva2VybmVsL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9wcGMva2VybmVsL2lycS5jCi0gKgotICogIERlcml2ZWQgZnJvbSBhcmNoL2kzODYva2VybmVsL2lycS5jCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKLSAqICBBZGFwdGVkIGZyb20gYXJjaC9pMzg2IGJ5IEdhcnkgVGhvbWFzCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKLSAqICBVcGRhdGVkIGFuZCBtb2RpZmllZCBieSBDb3J0IERvdWdhbiA8Y29ydEBmc21sYWJzLmNvbT4KLSAqICAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxIENvcnQgRG91Z2FuCi0gKiAgQWRhcHRlZCBmb3IgUG93ZXIgTWFjaW50b3NoIGJ5IFBhdWwgTWFja2VycmFzCi0gKiAgICBDb3B5cmlnaHQgKEMpIDE5OTYgUGF1bCBNYWNrZXJyYXMgKHBhdWx1c0Bjcy5hbnUuZWR1LmF1KQotICogIEFtaWdhL0FQVVMgY2hhbmdlcyBieSBKZXNwZXIgU2tvdiAoanNrb3ZAY3lnbnVzLmNvLnVrKS4KLSAqCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvZGUgdXNlZCBieSB2YXJpb3VzIElSUSBoYW5kbGluZyByb3V0aW5lczoKLSAqIGFza2luZyBmb3IgZGlmZmVyZW50IElSUSdzIHNob3VsZCBiZSBkb25lIHRocm91Z2ggdGhlc2Ugcm91dGluZXMKLSAqIGluc3RlYWQgb2YganVzdCBncmFiYmluZyB0aGVtLiBUaHVzIHNldHVwcyB3aXRoIGRpZmZlcmVudCBJUlEgbnVtYmVycwotICogc2hvdWxkbid0IHJlc3VsdCBpbiBhbnkgd2VpcmQgc3VycHJpc2VzLCBhbmQgaW5zdGFsbGluZyBuZXcgaGFuZGxlcnMKLSAqIHNob3VsZCBiZSBlYXNpZXIuCi0gKgotICogVGhlIE1QQzh4eCBoYXMgYW4gaW50ZXJydXB0IG1hc2sgaW4gdGhlIFNJVS4gIElmIGEgYml0IGlzIHNldCwgdGhlCi0gKiBpbnRlcnJ1cHQgaXMgX2VuYWJsZWRfLiAgQXMgZXhwZWN0ZWQsIElSUTAgaXMgYml0IDAgaW4gdGhlIDMyLWJpdAotICogbWFzayByZWdpc3RlciAob2Ygd2hpY2ggb25seSAxNiBhcmUgZGVmaW5lZCksIGhlbmNlIHRoZSB3ZWlyZCBzaGlmdGluZwotICogYW5kIGNvbXBsZW1lbnQgb2YgdGhlIGNhY2hlZF9pcnFfbWFzay4gIEkgd2FudCB0byBiZSBhYmxlIHRvIHN0dWZmCi0gKiB0aGlzIHJpZ2h0IGludG8gdGhlIFNJVSBTTUFTSyByZWdpc3Rlci4KLSAqIE1hbnkgb2YgdGhlIHByZXAvY2hycCBmdW5jdGlvbnMgYXJlIGNvbmRpdGlvbmFsIGNvbXBpbGVkIG9uIENPTkZJR184eHgKLSAqIHRvIHJlZHVjZSBjb2RlIHNwYWNlIGFuZCB1bmRlZmluZWQgZnVuY3Rpb24gcmVmZXJlbmNlcy4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vY2FjaGUuaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLSNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgotCi0jZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCi0KLWV4dGVybiBhdG9taWNfdCBpcGlfcmVjdjsKLWV4dGVybiBhdG9taWNfdCBpcGlfc2VudDsKLQotI2RlZmluZSBNQVhDT1VOVCAxMDAwMDAwMAotCi1pbnQgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMgPSAwOwotc3RydWN0IGlycWFjdGlvbiAqcHBjX2lycV9hY3Rpb25bTlJfSVJRU107Ci11bnNpZ25lZCBsb25nIHBwY19jYWNoZWRfaXJxX21hc2tbTlJfTUFTS19XT1JEU107Ci11bnNpZ25lZCBsb25nIHBwY19sb3N0X2ludGVycnVwdHNbTlJfTUFTS19XT1JEU107Ci1hdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7Ci0KLSNpZmRlZiBDT05GSUdfVEFVX0lOVAotZXh0ZXJuIGludCB0YXVfaW5pdGlhbGl6ZWQ7Ci1leHRlcm4gaW50IHRhdV9pbnRlcnJ1cHRzKGludCk7Ci0jZW5kaWYKLQotaW50IHNob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCi17Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOwotCXN0cnVjdCBpcnFhY3Rpb24gKiBhY3Rpb247Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChpID09IDApIHsKLQkJc2VxX3B1dHMocCwgIiAgICAgICAgICAgIik7Ci0JCWZvciAoaj0wOyBqPE5SX0NQVVM7IGorKykKLQkJCWlmIChjcHVfb25saW5lKGopKQotCQkJCXNlcV9wcmludGYocCwgIkNQVSVkICAgICAgICIsIGopOwotCQlzZXFfcHV0YyhwLCAnXG4nKTsKLQl9Ci0KLQlpZiAoaSA8IE5SX0lSUVMpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9kZXNjW2ldLmxvY2ssIGZsYWdzKTsKLQkJYWN0aW9uID0gaXJxX2Rlc2NbaV0uYWN0aW9uOwotCQlpZiAoICFhY3Rpb24gfHwgIWFjdGlvbi0+aGFuZGxlciApCi0JCQlnb3RvIHNraXA7Ci0JCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlmb3IgKGogPSAwOyBqIDwgTlJfQ1BVUzsgaisrKQotCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLAotCQkJCQkgICBrc3RhdF9jcHUoaikuaXJxc1tpXSk7Ci0jZWxzZQotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQkJaWYgKGlycV9kZXNjW2ldLmhhbmRsZXIpCi0JCQlzZXFfcHJpbnRmKHAsICIgJXMgIiwgaXJxX2Rlc2NbaV0uaGFuZGxlci0+dHlwZW5hbWUpOwotCQllbHNlCi0JCQlzZXFfcHV0cyhwLCAiICBOb25lICAgICAgIik7Ci0JCXNlcV9wcmludGYocCwgIiVzIiwgKGlycV9kZXNjW2ldLnN0YXR1cyAmIElSUV9MRVZFTCkgPyAiTGV2ZWwgIiA6ICJFZGdlICAiKTsKLQkJc2VxX3ByaW50ZihwLCAiICAgICVzIiwgYWN0aW9uLT5uYW1lKTsKLQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQotCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7Ci0JCXNlcV9wdXRjKHAsICdcbicpOwotc2tpcDoKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2Rlc2NbaV0ubG9jaywgZmxhZ3MpOwotCX0gZWxzZSBpZiAoaSA9PSBOUl9JUlFTKSB7Ci0jaWZkZWYgQ09ORklHX1RBVV9JTlQKLQkJaWYgKHRhdV9pbml0aWFsaXplZCl7Ci0JCQlzZXFfcHV0cyhwLCAiVEFVOiAiKTsKLQkJCWZvciAoaiA9IDA7IGogPCBOUl9DUFVTOyBqKyspCi0JCQkJaWYgKGNwdV9vbmxpbmUoaikpCi0JCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgdGF1X2ludGVycnVwdHMoaikpOwotCQkJc2VxX3B1dHMocCwgIiAgUG93ZXJQQyAgICAgICAgICAgICBUaGVybWFsIEFzc2lzdCAoY3B1IHRlbXApXG4iKTsKLQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQotCQkvKiBzaG91bGQgdGhpcyBiZSBwZXIgcHJvY2Vzc29yIHNlbmQvcmVjZWl2ZT8gKi8KLQkJc2VxX3ByaW50ZihwLCAiSVBJIChyZWN2L3NlbnQpOiAlMTB1LyV1XG4iLAotCQkJCWF0b21pY19yZWFkKCZpcGlfcmVjdiksIGF0b21pY19yZWFkKCZpcGlfc2VudCkpOwotI2VuZGlmCi0JCXNlcV9wcmludGYocCwgIkJBRDogJTEwdVxuIiwgcHBjX3NwdXJpb3VzX2ludGVycnVwdHMpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkb19JUlEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW50IGlycSwgZmlyc3QgPSAxOwotICAgICAgICBpcnFfZW50ZXIoKTsKLQotCS8qCi0JICogRXZlcnkgcGxhdGZvcm0gaXMgcmVxdWlyZWQgdG8gaW1wbGVtZW50IHBwY19tZC5nZXRfaXJxLgotCSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlaXRoZXIgcmV0dXJuIGFuIGlycSBudW1iZXIgb3IgLTEgdG8KLQkgKiBpbmRpY2F0ZSB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nLiAgQnV0IHRoZSBmaXJzdCB0aW1lCi0JICogdGhyb3VnaCB0aGUgbG9vcCB0aGlzIG1lYW5zIHRoZXJlIHdhc24ndCBhbmQgSVJRIHBlbmRpbmcuCi0JICogVGhlIHZhbHVlIC0yIGlzIGZvciBidWdneSBoYXJkd2FyZSBhbmQgbWVhbnMgdGhhdCB0aGlzIElSUQotCSAqIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZC4gLS0gVG9tCi0JICovCi0Jd2hpbGUgKChpcnEgPSBwcGNfbWQuZ2V0X2lycShyZWdzKSkgPj0gMCkgewotCQlfX2RvX0lSUShpcnEsIHJlZ3MpOwotCQlmaXJzdCA9IDA7Ci0JfQotCWlmIChpcnEgIT0gLTIgJiYgZmlyc3QpCi0JCS8qIFRoYXQncyBub3QgU01QIHNhZmUgLi4uIGJ1dCB3aG8gY2FyZXMgPyAqLwotCQlwcGNfc3B1cmlvdXNfaW50ZXJydXB0cysrOwotICAgICAgICBpcnFfZXhpdCgpOwotfQotCi12b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQotewotCXBwY19tZC5pbml0X0lSUSgpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL21pc2MuUyBiL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKaW5kZXggYWU2YWYyOS4uNWU2MTEyNCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCkBAIC00OTcsOSArNDk3LDkgQEAKICAqIGFuZCBpbnZhbGlkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGNhY2hlIGJsb2Nrcy4KICAqIFRoaXMgaXMgYSBuby1vcCBvbiB0aGUgNjAxLgogICoKLSAqIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCisgKiBfX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCiAgKi8KLV9HTE9CQUwoZmx1c2hfaWNhY2hlX3JhbmdlKQorX0dMT0JBTChfX2ZsdXNoX2ljYWNoZV9yYW5nZSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmxyCQkJCS8qIGZvciA2MDEsIGRvIG5vdGhpbmcgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX1NQTElUX0lEX0NBQ0hFKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BjaS5jIGIvYXJjaC9wcGMva2VybmVsL3BjaS5jCmluZGV4IGU4ZjRlNTcuLjQ4ZWQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wY2kuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcGNpLmMKQEAgLTYyLDIwICs2Miw2IEBACiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKIHN0YXRpYyB2b2lkCi1maXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQotewotCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucwotCSAqIHRoZXkgZG9uJ3QgZ2V0IHRoZWlyIHJlc291cmNlcyByZW1hcHBlZC4gRml4IHRoYXQgaGVyZS4KLQkgKi8KLQotCWlmICgoZGV2LT5jbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQpKSB7Ci0JCXByaW50aygiTkNSIDUzYzgxMCByZXYgMSBkZXRlY3RlZCwgc2V0dGluZyBQQ0kgY2xhc3MuXG4iKTsKLQkJZGV2LT5jbGFzcyA9IFBDSV9DTEFTU19TVE9SQUdFX1NDU0k7Ci0JfQotfQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkNSLAlQQ0lfREVWSUNFX0lEX05DUl81M0M4MTAsCWZpeHVwX3JldjFfNTNjODEwKTsKLQotc3RhdGljIHZvaWQKIGZpeHVwX2Jyb2tlbl9wY25ldDMyKHN0cnVjdCBwY2lfZGV2KiBkZXYpCiB7CiAJaWYgKChkZXYtPmNsYXNzPj44ID09IFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jIGIvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGUwY2E2MWIuLjY2MDczZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vYnRleHQuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20veG1vbi5oPgorI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAogI2lmZGVmICBDT05GSUdfOHh4CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CkBAIC01Nyw3ICs1OCw2IEBACiBleHRlcm4gdm9pZCBhbGlnbm1lbnRfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHByb2dyYW1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIHNpbmdsZV9zdGVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGV4dGVybiBpbnQgcG1hY19uZXd3b3JsZDsKIGV4dGVybiBpbnQgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKQEAgLTc4LDcgKzc4LDYgQEAKIEVYUE9SVF9TWU1CT0woc2luZ2xlX3N0ZXBfZXhjZXB0aW9uKTsKIEVYUE9SVF9TWU1CT0woc3lzX3NpZ3JldHVybik7CiBFWFBPUlRfU1lNQk9MKHBwY19uX2xvc3RfaW50ZXJydXB0cyk7Ci1FWFBPUlRfU1lNQk9MKHBwY19sb3N0X2ludGVycnVwdHMpOwogCiBFWFBPUlRfU1lNQk9MKElTQV9ETUFfVEhSRVNIT0xEKTsKIEVYUE9SVF9TWU1CT0woRE1BX01PREVfUkVBRCk7CkBAIC0xNzYsNiArMTc1LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKICNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwogRVhQT1JUX1NZTUJPTChmbHVzaF9kY2FjaGVfYWxsKTsKICNlbmRpZgogCkBAIC0yMTcsOSArMjE3LDYgQEAKIEVYUE9SVF9TWU1CT0woY3VkYV9yZXF1ZXN0KTsKIEVYUE9SVF9TWU1CT0woY3VkYV9wb2xsKTsKICNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLSNpZmRlZiBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0KLUVYUE9SVF9TWU1CT0woX21hY2hpbmUpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiBFWFBPUlRfU1lNQk9MKHN5c19jdHJsZXIpOwogRVhQT1JUX1NZTUJPTChwbWFjX25ld3dvcmxkKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggNmJjYjg1ZC4uZGM1NWUxYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKQEAgLTc2LDYgKzc2LDcgQEAKIAogI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQogaW50IF9tYWNoaW5lID0gMDsKK0VYUE9SVF9TWU1CT0woX21hY2hpbmUpOwogCiBleHRlcm4gdm9pZCBwcmVwX2luaXQodW5zaWduZWQgbG9uZyByMywgdW5zaWduZWQgbG9uZyByNCwKIAkJdW5zaWduZWQgbG9uZyByNSwgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNyk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcG1hY19waWMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCmluZGV4IDlmMmQ5NWUuLjQ3NDJiZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wbWFjX3BpYy5jCkBAIC03NSw2ICs3NSw5IEBACiAjZGVmaW5lIEdBVFdJQ0tfSVJRX1BPT0xfU0laRSAgICAgICAgMTAKIHN0YXRpYyBzdHJ1Y3QgaW50ZXJydXB0X2luZm8gZ2F0d2lja19pbnRfcG9vbFtHQVRXSUNLX0lSUV9QT09MX1NJWkVdOwogCisjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNfbG9zdF9pbnRlcnJ1cHRzW05SX01BU0tfV09SRFNdOworCiAvKgogICogTWFyayBhbiBpcnEgYXMgImxvc3QiLiAgVGhpcyBpcyBvbmx5IHVzZWQgb24gdGhlIHBtYWMKICAqIHNpbmNlIGl0IGNhbiBsb3NlIGludGVycnVwdHMgKHNlZSBwbWFjX3NldF9pcnFfbWFzaykuCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL3ByZXBfc2V0dXAuYwppbmRleCAwNjdkN2Q1Li40NDE1NzQ4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHJlcF9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcmVwX3NldHVwLmMKQEAgLTYxLDYgKzYxLDE1IEBACiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNpbmNsdWRlIDxhc20vdG9kYy5oPgogCisvKiBwcmVwIHJlZ2lzdGVycyBmb3IgTDIgKi8KKyNkZWZpbmUgQ0FDSEVDUkJBICAgICAgIDB4ODAwMDA4MjMgICAgICAvKiBDYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgTDJDQUNIRV9NQVNLCTB4MDMJLyogTWFzayBmb3IgMiBMMiBDYWNoZSBiaXRzICovCisjZGVmaW5lIEwyQ0FDSEVfNTEyS0IJMHgwMAkvKiA1MTJLQiAqLworI2RlZmluZSBMMkNBQ0hFXzI1NktCCTB4MDEJLyogMjU2S0IgKi8KKyNkZWZpbmUgTDJDQUNIRV8xTUIJMHgwMgkvKiAxTUIgKi8KKyNkZWZpbmUgTDJDQUNIRV9OT05FCTB4MDMJLyogTk9ORSAqLworI2RlZmluZSBMMkNBQ0hFX1BBUklUWSAgMHgwOCAgICAvKiBNYXNrIGZvciBMMiBDYWNoZSBQYXJpdHkgUHJvdGVjdGVkIGJpdCAqLworCiBUT0RDX0FMTE9DKCk7CiAKIHVuc2lnbmVkIGNoYXIgdWNTeXN0ZW1UeXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2NwbTJfcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYwppbmRleCBjODY3YmU2Li4yOWQ5NWQ0IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvY3BtMl9waWMuYwpAQCAtMzcsNyArMzcsNyBAQAogc3RhdGljCXVfY2hhcglpcnFfdG9fc2l1Yml0W10gPSB7CiAJIDAsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsICA5LAogCSA4LCAgNywgIDYsICA1LCAgNCwgIDMsICAyLCAgMSwKLQkgMiwgIDEsIDE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsCisJIDIsICAxLCAgMCwgMTQsIDEzLCAxMiwgMTEsIDEwLAogCSA5LCAgOCwgIDcsICA2LCAgNSwgIDQsICAzLCAgMCwKIAkzMSwgMzAsIDI5LCAyOCwgMjcsIDI2LCAyNSwgMjQsCiAJMjMsIDIyLCAyMSwgMjAsIDE5LCAxOCwgMTcsIDE2LApkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9LY29uZmlnIGIvYXJjaC9wcGM2NC9LY29uZmlnCmluZGV4IDI5NTUyMzQuLjlkMTBjMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvS2NvbmZpZworKysgYi9hcmNoL3BwYzY0L0tjb25maWcKQEAgLTI3OSwxNyArMjc5LDEyIEBACiAgICAgICAgZGVmX2Jvb2wgeQogICAgICAgIGRlcGVuZHMgb24gIU5VTUEKIAotY29uZmlnIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIFNNUCAmJiBQUENfUFNFUklFUwotCi1jb25maWcgQVJDSF9ESVNDT05USUdNRU1fREVGQVVMVAotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfRElTQ09OVElHTUVNX0VOQUJMRQotCiBjb25maWcgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCisKK2NvbmZpZyBBUkNIX1NQQVJTRU1FTV9ERUZBVUxUCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gTlVNQQogCiBzb3VyY2UgIm1tL0tjb25maWciCiAKQEAgLTI5Nyw2ICsyOTIsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBBUkNIX01FTU9SWV9QUk9CRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHCisKICMgU29tZSBOVU1BIG5vZGVzIGhhdmUgbWVtb3J5IHJhbmdlcyB0aGF0IHNwYW4KICMgb3RoZXIgbm9kZXMuICBFdmVuIHRob3VnaCBhIHBmbiBpcyB2YWxpZCBhbmQKICMgYmV0d2VlbiBhIG5vZGUncyBzdGFydCBhbmQgZW5kIHBmbnMsIGl0IG1heSBub3QKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMgYi9hcmNoL3BwYzY0L2Jvb3QvYWRkUmFtRGlzay5jCmluZGV4IDdmMmMwOTQuLmMwMmE5OTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjNjQvYm9vdC9hZGRSYW1EaXNrLmMKKysrIGIvYXJjaC9wcGM2NC9ib290L2FkZFJhbURpc2suYwpAQCAtNSwxMSArNSw1OSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+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+cGxhdGZvcm0gPT0gUExBVEZPUk1fUE9XRVJNQUMpCisJaWYgKF9tYWNoaW5lID09IFBMQVRGT1JNX1BPV0VSTUFDKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Byb21faW5pdC5jIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggZTRjODgwZC4uNjM3NWY0MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTE5MzQsNyArMTkzNCw4IEBACiAJLyoKIAkgKiBPbiBwU2VyaWVzLCBpbmZvcm0gdGhlIGZpcm13YXJlIGFib3V0IG91ciBjYXBhYmlsaXRpZXMKIAkgKi8KLQlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pICYgUExBVEZPUk1fUFNFUklFUykKKwlpZiAoUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVMgfHwKKwkgICAgUkVMT0Mob2ZfcGxhdGZvcm0pID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikKIAkJcHJvbV9zZW5kX2NhcGFiaWxpdGllcygpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYyBiL2FyY2gvcHBjNjQva2VybmVsL3Zkc28uYwppbmRleCA0YWFjZjUyLi4xYmJhY2FjIDEwMDY0NAotLS0gYS9hcmNoL3BwYzY0L2tlcm5lbC92ZHNvLmMKKysrIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzby5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtY2ZnLmg+CiAjaW5jbHVkZSA8YXNtL3Zkc28uaD4KIAogI3VuZGVmIERFQlVHCkBAIC0xNzksNyArMTgwLDcgQEAKIAkgKiBMYXN0IHBhZ2UgaXMgc3lzdGVtY2ZnLgogCSAqLwogCWlmICgodm1hLT52bV9lbmQgLSBhZGRyZXNzKSA8PSBQQUdFX1NJWkUpCi0JCXBnID0gdmlydF90b19wYWdlKHN5c3RlbWNmZyk7CisJCXBnID0gdmlydF90b19wYWdlKF9zeXN0ZW1jZmcpOwogCWVsc2UKIAkJcGcgPSB2aXJ0X3RvX3BhZ2UodmJhc2UgKyBvZmZzZXQpOwogCkBAIC02MDQsNyArNjA1LDcgQEAKIAkJZ2V0X3BhZ2UocGcpOwogCX0KIAotCWdldF9wYWdlKHZpcnRfdG9fcGFnZShzeXN0ZW1jZmcpKTsKKwlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2UoX3N5c3RlbWNmZykpOwogfQogCiBpbnQgaW5fZ2F0ZV9hcmVhX25vX3Rhc2sodW5zaWduZWQgbG9uZyBhZGRyKQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzMyL2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjQzYzFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc28zMi9nZXR0aW1lb2ZkYXkuUworKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogVXNlcmxhbmQgaW1wbGVtZW50YXRpb24gb2YgZ2V0dGltZW9mZGF5KCkgZm9yIDMyIGJpdHMgcHJvY2Vzc2VzIGluIGEKLSAqIHBwYzY0IGtlcm5lbCBmb3IgdXNlIGluIHRoZSB2RFNPCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEJlbmphbWluIEhlcnJlbnNjaG11aWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpLCBJQk0gQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+Ci0jaW5jbHVkZSA8YXNtL3Zkc28uaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLQkudGV4dAotLyoKLSAqIEV4YWN0IHByb3RvdHlwZSBvZiBnZXR0aW1lb2ZkYXkKLSAqCi0gKiBpbnQgX19rZXJuZWxfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7Ci0gKgotICovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLSAgLmNmaV9zdGFydHByb2MKLQltZmxyCXIxMgotICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgotCi0JbXIJcjEwLHIzCQkJLyogcjEwIHNhdmVzIHR2ICovCi0JbXIJcjExLHI0CQkJLyogcjExIHNhdmVzIHR6ICovCi0JYmwJX19nZXRfZGF0YXBhZ2VAbG9jYWwJLyogZ2V0IGRhdGEgcGFnZSAqLwotCW1yCXI5LCByMwkJCS8qIGRhdGFwYWdlIHB0ciBpbiByOSAqLwotCWJsCV9fZG9fZ2V0X3hzZWNAbG9jYWwJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLwotCWJuZS0JMmYJCQkvKiBvdXQgb2YgbGluZSAtPiBkbyBzeXNjYWxsICovCi0KLQkvKiBzZWNvbmRzIGFyZSB4c2VjID4+IDIwICovCi0Jcmx3aW5tCXI1LHI0LDEyLDIwLDMxCi0Jcmx3aW1pCXI1LHIzLDEyLDAsMTkKLQlzdHcJcjUsVFZBTDMyX1RWX1NFQyhyMTApCi0KLQkvKiBnZXQgcmVtYWluaW5nIHhzZWMgYW5kIGNvbnZlcnQgdG8gdXNlYy4gd2Ugc2NhbGUKLQkgKiB1cCByZW1haW5pbmcgeHNlYyBieSAxMiBiaXRzIGFuZCBnZXQgdGhlIHRvcCAzMiBiaXRzCi0JICogb2YgdGhlIG11bHRpcGxpY2F0aW9uCi0JICovCi0Jcmx3aW5tCXI1LHI0LDEyLDAsMTkKLQlsaXMJcjYsMTAwMDAwMEBoCi0Jb3JpCXI2LHI2LDEwMDAwMDBAbAotCW11bGh3dQlyNSxyNSxyNgotCXN0dwlyNSxUVkFMMzJfVFZfVVNFQyhyMTApCi0KLQljbXBsaQljcjAscjExLDAJCS8qIGNoZWNrIGlmIHR6IGlzIE5VTEwgKi8KLQliZXEJMWYKLQlsd3oJcjQsQ0ZHX1RaX01JTlVURVdFU1QocjkpLyogZmlsbCB0eiAqLwotCWx3eglyNSxDRkdfVFpfRFNUVElNRShyOSkKLQlzdHcJcjQsVFpPTkVfVFpfTUlOV0VTVChyMTEpCi0Jc3R3CXI1LFRaT05FX1RaX0RTVFRJTUUocjExKQotCi0xOgltdGxyCXIxMgotCWxpCXIzLDAKLQlibHIKLQotMjoJbXIJcjMscjEwCi0JbXIJcjQscjExCi0JbGkJcjAsX19OUl9nZXR0aW1lb2ZkYXkKLQlzYwotCWIJMWIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2tlcm5lbF9nZXR0aW1lb2ZkYXkpCi0KLS8qCi0gKiBUaGlzIGlzIHRoZSBjb3JlIG9mIGdldHRpbWVvZmRheSgpLCBpdCByZXR1cm5zIHRoZSB4c2VjCi0gKiB2YWx1ZSBpbiByMyAmIHI0IGFuZCBleHBlY3RzIHRoZSBkYXRhcGFnZSBwdHIgKG5vbiBjbG9iYmVyZWQpCi0gKiBpbiByOS4gY2xvYmJlcnMgcjAscjQscjUscjYscjcscjgKLSovCi1fX2RvX2dldF94c2VjOgotICAuY2ZpX3N0YXJ0cHJvYwotCS8qIENoZWNrIGZvciB1cGRhdGUgY291bnQgJiBsb2FkIHZhbHVlcy4gV2UgdXNlIHRoZSBsb3cKLQkgKiBvcmRlciAzMiBiaXRzIG9mIHRoZSB1cGRhdGUgY291bnQKLQkgKi8KLTE6CWx3eglyOCwoQ0ZHX1RCX1VQREFURV9DT1VOVCs0KShyOSkKLQlhbmRpLglyMCxyOCwxCQkJLyogcGVuZGluZyB1cGRhdGUgPyBsb29wICovCi0JYm5lLQkxYgotCXhvcglyMCxyOCxyOAkJLyogY3JlYXRlIGRlcGVuZGVuY3kgKi8KLQlhZGQJcjkscjkscjAKLQotCS8qIExvYWQgb3JpZyBzdGFtcCAob2Zmc2V0IHRvIFRCKSAqLwotCWx3eglyNSxDRkdfVEJfT1JJR19TVEFNUChyOSkKLQlsd3oJcjYsKENGR19UQl9PUklHX1NUQU1QKzQpKHI5KQotCi0JLyogR2V0IGEgc3RhYmxlIFRCIHZhbHVlICovCi0yOgltZnRidQlyMwotCW1mdGJsCXI0Ci0JbWZ0YnUJcjAKLQljbXBsCWNyMCxyMyxyMAotCWJuZS0JMmIKLQotCS8qIFN1YnN0cmFjdCB0YiBvcmlnIHN0YW1wLiBJZiB0aGUgaGlnaCBwYXJ0IGlzIG5vbi16ZXJvLCB3ZSBqdW1wIHRvIHRoZQotCSAqIHNsb3cgcGF0aCB3aGljaCBjYWxsIHRoZSBzeXNjYWxsLiBJZiBpdCdzIG9rLCB0aGVuIHdlIGhhdmUgb3VyIDMyIGJpdHMKLQkgKiB0Yl90aWNrcyB2YWx1ZSBpbiByNwotCSAqLwotCXN1YmZjCXI3LHI2LHI0Ci0Jc3ViZmUuCXIwLHI1LHIzCi0JYm5lLQkzZgotCi0JLyogTG9hZCBzY2FsZSBmYWN0b3IgJiBkbyBtdWx0aXBsaWNhdGlvbiAqLwotCWx3eglyNSxDRkdfVEJfVE9fWFMocjkpCS8qIGxvYWQgdmFsdWVzICovCi0JbHd6CXI2LChDRkdfVEJfVE9fWFMrNCkocjkpCi0JbXVsaHd1CXI0LHI3LHI1Ci0JbXVsaHd1CXI2LHI3LHI2Ci0JbXVsbHcJcjAscjcscjUKLQlhZGRjCXI2LHI2LHIwCi0KLQkvKiBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHRoZSBzY2FsZWQgeHNlYyB2YWx1ZSBpbiByNCArIFhFUjpDQQotCSAqIHdlIGxvYWQgJiBhZGQgdGhlIHN0YW1wIHNpbmNlIGVwb2NoCi0JICovCi0JbHd6CXI1LENGR19TVEFNUF9YU0VDKHI5KQotCWx3eglyNiwoQ0ZHX1NUQU1QX1hTRUMrNCkocjkpCi0JYWRkZQlyNCxyNCxyNgotCWFkZHplCXIzLHI1Ci0KLQkvKiBXZSBub3cgaGF2ZSBvdXIgcmVzdWx0IGluIHIzLHI0LiBXZSBjcmVhdGUgYSBmYWtlIGRlcGVuZGVuY3kKLQkgKiBvbiB0aGF0IHJlc3VsdCBhbmQgcmUtY2hlY2sgdGhlIGNvdW50ZXIKLQkgKi8KLQl4b3IJcjAscjQscjQKLQlhZGQJcjkscjkscjAKLQlsd3oJcjAsKENGR19UQl9VUERBVEVfQ09VTlQrNCkocjkpCi0gICAgICAgIGNtcGwgICAgY3IwLHI4LHIwCQkvKiBjaGVjayBpZiB1cGRhdGVkICovCi0JYm5lLQkxYgotCi0JLyogV2FybmluZyAhIFRoZSBjYWxsZXIgZXhwZWN0cyBDUjpFUSB0byBiZSBzZXQgdG8gaW5kaWNhdGUgYQotCSAqIHN1Y2Nlc3NmdWwgY2FsY3VsYXRpb24gKHNvIGl0IHdvbid0IGZhbGxiYWNrIHRvIHRoZSBzeXNjYWxsCi0JICogbWV0aG9kKS4gV2UgaGF2ZSBvdmVycmlkZW4gdGhhdCBDUiBiaXQgaW4gdGhlIGNvdW50ZXIgY2hlY2ssCi0JICogYnV0IGZvcnR1bmF0ZWx5LCB0aGUgbG9vcCBleGl0IGNvbmRpdGlvbiBfaXNfIENSOkVRIHNldCwgc28KLQkgKiB3ZSBjYW4gZXhpdCBzYWZlbHkgaGVyZS4gSWYgeW91IGNoYW5nZSB0aGlzIGNvZGUsIGJlIGNhcmVmdWwKLQkgKiBvZiB0aGF0IHNpZGUgZWZmZWN0LgotCSAqLwotMzoJYmxyCi0gIC5jZmlfZW5kcHJvYwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TIGIvYXJjaC9wcGM2NC9rZXJuZWwvdmRzbzY0L2dldHRpbWVvZmRheS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmRmODAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvcHBjNjQva2VybmVsL3Zkc282NC9nZXR0aW1lb2ZkYXkuUworKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLS8qCi0gKiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBnZXR0aW1lb2ZkYXkoKSBmb3IgNjQgYml0cyBwcm9jZXNzZXMgaW4gYQotICogcHBjNjQga2VybmVsIGZvciB1c2UgaW4gdGhlIHZEU08KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQmVuamFtaW4gSGVycmVuc2NobXVpZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZyksCi0gKiAgICAgICAgICAgICAgICAgICAgSUJNIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgotI2luY2x1ZGUgPGFzbS92ZHNvLmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+Ci0KLQkudGV4dAotLyoKLSAqIEV4YWN0IHByb3RvdHlwZSBvZiBnZXR0aW1lb2ZkYXkKLSAqCi0gKiBpbnQgX19rZXJuZWxfZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eik7Ci0gKgotICovCi1WX0ZVTkNUSU9OX0JFR0lOKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLSAgLmNmaV9zdGFydHByb2MKLQltZmxyCXIxMgotICAuY2ZpX3JlZ2lzdGVyIGxyLHIxMgotCi0JbXIJcjExLHIzCQkJLyogcjExIGhvbGRzIHR2ICovCi0JbXIJcjEwLHI0CQkJLyogcjEwIGhvbGRzIHR6ICovCi0JYmwJVl9MT0NBTF9GVU5DKF9fZ2V0X2RhdGFwYWdlKQkJLyogZ2V0IGRhdGEgcGFnZSAqLwotCWJsCVZfTE9DQUxfRlVOQyhfX2RvX2dldF94c2VjKQkJLyogZ2V0IHhzZWMgZnJvbSB0YiAmIGtlcm5lbCAqLwotCWxpcyAgICAgcjcsMTUJCQkvKiByNyA9IDEwMDAwMDAgPSBVU0VDX1BFUl9TRUMgKi8KLQlvcmkgICAgIHI3LHI3LDE2OTYwCi0JcmxkaWNsICByNSxyNCw0NCwyMAkJLyogcjUgPSBzZWMgPSB4c2VjIC8gWFNFQ19QRVJfU0VDICovCi0JcmxkaWNyICByNixyNSwyMCw0MwkJLyogcjYgPSBzZWMgKiBYU0VDX1BFUl9TRUMgKi8KLQlzdGQJcjUsVFZBTDY0X1RWX1NFQyhyMTEpCS8qIHN0b3JlIHNlYyBpbiB0diAqLwotCXN1YmYJcjAscjYscjQJCS8qIHIwID0geHNlYyA9ICh4c2VjIC0gcjYpICovCi0JbXVsbGQgICByMCxyMCxyNwkJLyogdXNlYyA9ICh4c2VjICogVVNFQ19QRVJfU0VDKSAvIFhTRUNfUEVSX1NFQyAqLwotCXJsZGljbCAgcjAscjAsNDQsMjAKLQljbXBsZGkJY3IwLHIxMCwwCQkvKiBjaGVjayBpZiB0eiBpcyBOVUxMICovCi0Jc3RkCXIwLFRWQUw2NF9UVl9VU0VDKHIxMSkJLyogc3RvcmUgdXNlYyBpbiB0diAqLwotCWJlcQkxZgotCWx3eglyNCxDRkdfVFpfTUlOVVRFV0VTVChyMykvKiBmaWxsIHR6ICovCi0JbHd6CXI1LENGR19UWl9EU1RUSU1FKHIzKQotCXN0dwlyNCxUWk9ORV9UWl9NSU5XRVNUKHIxMCkKLQlzdHcJcjUsVFpPTkVfVFpfRFNUVElNRShyMTApCi0xOgltdGxyCXIxMgotCWxpCXIzLDAJCQkvKiBhbHdheXMgc3VjY2VzcyAqLwotCWJscgotICAuY2ZpX2VuZHByb2MKLVZfRlVOQ1RJT05fRU5EKF9fa2VybmVsX2dldHRpbWVvZmRheSkKLQotCi0vKgotICogVGhpcyBpcyB0aGUgY29yZSBvZiBnZXR0aW1lb2ZkYXkoKSwgaXQgcmV0dXJucyB0aGUgeHNlYwotICogdmFsdWUgaW4gcjQgYW5kIGV4cGVjdHMgdGhlIGRhdGFwYWdlIHB0ciAobm9uIGNsb2JiZXJlZCkKLSAqIGluIHIzLiBjbG9iYmVycyByMCxyNCxyNSxyNixyNyxyOAotKi8KLVZfRlVOQ1RJT05fQkVHSU4oX19kb19nZXRfeHNlYykKLSAgLmNmaV9zdGFydHByb2MKLQkvKiBjaGVjayBmb3IgdXBkYXRlIGNvdW50ICYgbG9hZCB2YWx1ZXMgKi8KLTE6CWxkCXI3LENGR19UQl9VUERBVEVfQ09VTlQocjMpCi0JYW5kaS4JcjAscjQsMQkJCS8qIHBlbmRpbmcgdXBkYXRlID8gbG9vcCAqLwotCWJuZS0JMWIKLQl4b3IJcjAscjQscjQJCS8qIGNyZWF0ZSBkZXBlbmRlbmN5ICovCi0JYWRkCXIzLHIzLHIwCi0KLQkvKiBHZXQgVEIgJiBvZmZzZXQgaXQgKi8KLQltZnRiCXI4Ci0JbGQJcjksQ0ZHX1RCX09SSUdfU1RBTVAocjMpCi0Jc3ViZglyOCxyOSxyOAotCi0JLyogU2NhbGUgcmVzdWx0ICovCi0JbGQJcjUsQ0ZHX1RCX1RPX1hTKHIzKQotCW11bGhkdQlyOCxyOCxyNQotCi0JLyogQWRkIHN0YW1wIHNpbmNlIGVwb2NoICovCi0JbGQJcjYsQ0ZHX1NUQU1QX1hTRUMocjMpCi0JYWRkCXI0LHI2LHI4Ci0KLQl4b3IJcjAscjQscjQKLQlhZGQJcjMscjMscjAKLQlsZAlyMCxDRkdfVEJfVVBEQVRFX0NPVU5UKHIzKQotICAgICAgICBjbXBsZCAgIGNyMCxyMCxyNwkJLyogY2hlY2sgaWYgdXBkYXRlZCAqLwotCWJuZS0JMWIKLQlibHIKLSAgLmNmaV9lbmRwcm9jCi1WX0ZVTkNUSU9OX0VORChfX2RvX2dldF94c2VjKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IGJmMTg0OWQuLjQ4MTgwNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3NldHVwLmMKQEAgLTU4Nyw2ICs1ODcsOCBAQAogdW5zaWduZWQgaW50IGRjYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogdW5zaWduZWQgaW50IGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogCitzdGF0aWMgaW50IG5jcHVzX3Byb2JlZDsKKwogc3RhdGljIGludCBzaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfX3VudXNlZCkKIHsKIAlzZXFfcHJpbnRmKG0sIApAQCAtNTk1LDggKzU5Nyw4IEBACiAJCSAgICJwcm9tbGliXHRcdDogVmVyc2lvbiAzIFJldmlzaW9uICVkXG4iCiAJCSAgICJwcm9tXHRcdDogJWQuJWQuJWRcbiIKIAkJICAgInR5cGVcdFx0OiBzdW40dVxuIgotCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVsZFxuIgotCQkgICAibmNwdXMgYWN0aXZlXHQ6ICVsZFxuIgorCQkgICAibmNwdXMgcHJvYmVkXHQ6ICVkXG4iCisJCSAgICJuY3B1cyBhY3RpdmVcdDogJWRcbiIKIAkJICAgIkQkIHBhcml0eSB0bDFcdDogJXVcbiIKIAkJICAgIkkkIHBhcml0eSB0bDFcdDogJXVcbiIKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjEwLDggKzYxMiw4IEBACiAJCSAgIHByb21fcHJldiA+PiAxNiwKIAkJICAgKHByb21fcHJldiA+PiA4KSAmIDB4ZmYsCiAJCSAgIHByb21fcHJldiAmIDB4ZmYsCi0JCSAgIChsb25nKW51bV9wb3NzaWJsZV9jcHVzKCksCi0JCSAgIChsb25nKW51bV9vbmxpbmVfY3B1cygpLAorCQkgICBuY3B1c19wcm9iZWQsCisJCSAgIG51bV9vbmxpbmVfY3B1cygpLAogCQkgICBkY2FjaGVfcGFyaXR5X3RsMV9vY2N1cnJlZCwKIAkJICAgaWNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNjc3LDYgKzY3OSwxNSBAQAogCWludCBpLCBlcnI7CiAKIAllcnIgPSAtRU5PTUVNOworCisJLyogQ291bnQgdGhlIG51bWJlciBvZiBwaHlzaWNhbGx5IHByZXNlbnQgcHJvY2Vzc29ycyBpbgorCSAqIHRoZSBtYWNoaW5lLCBldmVuIG9uIHVuaXByb2Nlc3Nvciwgc28gdGhhdCAvcHJvYy9jcHVpbmZvCisJICogb3V0cHV0IGlzIGNvbnNpc3RlbnQgd2l0aCAyLjQueAorCSAqLworCW5jcHVzX3Byb2JlZCA9IDA7CisJd2hpbGUgKCFjcHVfZmluZF9ieV9pbnN0YW5jZShuY3B1c19wcm9iZWQsIE5VTEwsIE5VTEwpKQorCQluY3B1c19wcm9iZWQrKzsKKwogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKIAkJaWYgKGNwdV9wb3NzaWJsZShpKSkgewogCQkJc3RydWN0IGNwdSAqcCA9IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zbXAuYwppbmRleCA3OTdhNjU0Li42ZWZjMDNkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc21wLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vc3RhcmZpcmUuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAKLWV4dGVybiBpbnQgbGludXhfbnVtX2NwdXM7CiBleHRlcm4gdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiAKIC8qIFBsZWFzZSBkb24ndCBtYWtlIHRoaXMgc3R1ZmYgaW5pdGRhdGEhISEgIC0tRGF2ZU0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKaW5kZXggNGNmMzFhMi4uODRjNzNhMyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMKQEAgLTI2OCw5ICsyNjgsMTAgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGV2aWNlc19sb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXMgPSBMSVNUX0hFQURfSU5JVChkZXZpY2VzKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVtbF9uZXRfZHJpdmVyID0gewotCS5uYW1lICA9IERSSVZFUl9OQU1FLAotCS5idXMgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVtbF9uZXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9IERSSVZFUl9OQU1FLAorCX0sCiB9Owogc3RhdGljIGludCBkcml2ZXJfcmVnaXN0ZXJlZDsKIApAQCAtMzE3LDcgKzMxOCw3IEBACiAKIAkvKiBzeXNmcyByZWdpc3RlciAqLwogCWlmICghZHJpdmVyX3JlZ2lzdGVyZWQpIHsKLQkJZHJpdmVyX3JlZ2lzdGVyKCZ1bWxfbmV0X2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdW1sX25ldF9kcml2ZXIpOwogCQlkcml2ZXJfcmVnaXN0ZXJlZCA9IDE7CiAJfQogCWRldmljZS0+cGRldi5pZCA9IG47CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IGIyYzg2MjUuLjkzODk4OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCkBAIC04MjMsOSArODIzLDEwIEBACiAKIF9faW5pdGNhbGwodWJkX21jX2luaXQpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWJkX2RyaXZlciA9IHsKLQkubmFtZSAgPSBEUklWRVJfTkFNRSwKLQkuYnVzICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1YmRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBpbnQgdWJkX2luaXQodm9pZCkKQEAgLTg1MCw3ICs4NTEsNyBAQAogCQlpZiAocmVnaXN0ZXJfYmxrZGV2KGZha2VfbWFqb3IsICJ1YmQiKSkKIAkJCXJldHVybiAtMTsKIAl9Ci0JZHJpdmVyX3JlZ2lzdGVyKCZ1YmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnViZF9kcml2ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfREVWOyBpKyspIAogCQl1YmRfYWRkKGkpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKaW5kZXggOTZiOWJiNC4uMGRjNTVjYyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYworKysgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCkBAIC02MTYsOSArNjE2LDEwIEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlzc19uZXRfZHJpdmVyID0gewotCS5uYW1lICA9IERSSVZFUl9OQU1FLAotCS5idXMgICA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzc19uZXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICA9IERSSVZFUl9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IGRyaXZlcl9yZWdpc3RlcmVkOwpAQCAtNjY5LDcgKzY3MCw3IEBACiAJLyogc3lzZnMgcmVnaXN0ZXIgKi8KIAogCWlmICghZHJpdmVyX3JlZ2lzdGVyZWQpIHsKLQkJZHJpdmVyX3JlZ2lzdGVyKCZpc3NfbmV0X2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNzX25ldF9kcml2ZXIpOwogCQlkcml2ZXJfcmVnaXN0ZXJlZCA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZ2x1ZS5jIGIvZHJpdmVycy9hY3BpL2dsdWUuYwppbmRleCAzOTM3YWRmLi5hYTk5MzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZ2x1ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9nbHVlLmMKQEAgLTIwMyw2ICsyMDMsNyBAQAogCWFjcGlfZ2V0X2RldmljZXMoUENJX1JPT1RfSElEX1NUUklORywgZmluZF9wY2lfcm9vdGJyaWRnZSwgJmZpbmQsIE5VTEwpOwogCXJldHVybiBmaW5kLmhhbmRsZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSk7CiAKIC8qIEdldCBkZXZpY2UncyBoYW5kbGVyIHBlciBpdHMgYWRkcmVzcyB1bmRlciBpdHMgcGFyZW50ICovCiBzdHJ1Y3QgYWNwaV9maW5kX2NoaWxkIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hvcml6b24uYyBiL2RyaXZlcnMvYXRtL2hvcml6b24uYwppbmRleCAwY2RlZDA0Li44MjFjODFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKKysrIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCkBAIC0xNTExLDggKzE1MTEsOCBAQAogICAgIC8vIGEuay5hLiBwcmVwYXJlIHRoZSBjaGFubmVsIGFuZCByZW1lbWJlciB0aGF0IHdlIGhhdmUgZG9uZSBzby4KICAgICAKICAgICB0eF9jaF9kZXNjICogdHhfZGVzYyA9ICZtZW1tYXAtPnR4X2Rlc2NzW3R4X2NoYW5uZWxdOwotICAgIHUxNiByZF9wdHI7Ci0gICAgdTE2IHdyX3B0cjsKKyAgICB1MzIgcmRfcHRyOworICAgIHUzMiB3cl9wdHI7CiAgICAgdTE2IGNoYW5uZWwgPSB2Y2MtPmNoYW5uZWw7CiAgICAgCiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggNmQ0NzM2ZS4uODgyN2RhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTIwLDYgKzIwLDggQEAKIAogI2luY2x1ZGUgImJhc2UuaCIKIAorI2RlZmluZSB0b19wbGF0Zm9ybV9kcml2ZXIoZHJ2KQkoY29udGFpbmVyX29mKChkcnYpLCBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyLCBkcml2ZXIpKQorCiBzdHJ1Y3QgZGV2aWNlIHBsYXRmb3JtX2J1cyA9IHsKIAkuYnVzX2lkCQk9ICJwbGF0Zm9ybSIsCiB9OwpAQCAtMzU0LDYgKzM1Niw3NyBAQAogCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CiB9CiAKK3N0YXRpYyBpbnQgcGxhdGZvcm1fZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJcmV0dXJuIGRydi0+cHJvYmUoZGV2KTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJcmV0dXJuIGRydi0+cmVtb3ZlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2Rydl9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpfZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihfZGV2LT5kcml2ZXIpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKKworCWRydi0+c2h1dGRvd24oZGV2KTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJcmV0dXJuIGRydi0+c3VzcGVuZChkZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwbGF0Zm9ybV9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKF9kZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOworCisJcmV0dXJuIGRydi0+cmVzdW1lKGRldik7Cit9CisKKy8qKgorICoJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyCisgKglAZHJ2OiBwbGF0Zm9ybSBkcml2ZXIgc3RydWN0dXJlCisgKi8KK2ludCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2KQoreworCWRydi0+ZHJpdmVyLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZTsKKwlpZiAoZHJ2LT5wcm9iZSkKKwkJZHJ2LT5kcml2ZXIucHJvYmUgPSBwbGF0Zm9ybV9kcnZfcHJvYmU7CisJaWYgKGRydi0+cmVtb3ZlKQorCQlkcnYtPmRyaXZlci5yZW1vdmUgPSBwbGF0Zm9ybV9kcnZfcmVtb3ZlOworCWlmIChkcnYtPnNodXRkb3duKQorCQlkcnYtPmRyaXZlci5zaHV0ZG93biA9IHBsYXRmb3JtX2Rydl9zaHV0ZG93bjsKKwlpZiAoZHJ2LT5zdXNwZW5kKQorCQlkcnYtPmRyaXZlci5zdXNwZW5kID0gcGxhdGZvcm1fZHJ2X3N1c3BlbmQ7CisJaWYgKGRydi0+cmVzdW1lKQorCQlkcnYtPmRyaXZlci5yZXN1bWUgPSBwbGF0Zm9ybV9kcnZfcmVzdW1lOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcik7CisKKy8qKgorICoJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIKKyAqCUBkcnY6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUKKyAqLwordm9pZCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYpCit7CisJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKTsKKwogCiAvKioKICAqCXBsYXRmb3JtX21hdGNoIC0gYmluZCBwbGF0Zm9ybSBkZXZpY2UgdG8gcGxhdGZvcm0gZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbGktYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwppbmRleCBiYTU0YjU4Li5iMDJmYzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FsaS1hZ3AuYwpAQCAtMzg5LDcgKzM4OSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2FsaV9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2FsaV9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1hbGkiLAogCS5pZF90YWJsZQk9IGFncF9hbGlfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfYWxpX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwppbmRleCA0MGZjZDg4Li4xZjc3NjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZC1rNy1hZ3AuYwpAQCAtNTE1LDcgKzUxNSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2FtZGs3X3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYW1kazdfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYW1kazciLAogCS5pZF90YWJsZQk9IGFncF9hbWRrN19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWRrN19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCmluZGV4IDhmNzQ4ZmQuLjc4Y2U5OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwpAQCAtNzAzLDcgKzcwMyw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2FtZDY0X3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfYW1kNjRfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYW1kNjQiLAogCS5pZF90YWJsZQk9IGFncF9hbWQ2NF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9hbWQ2NF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYXRpLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKaW5kZXggZmJkNDE1NS4uNTMzNzJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hdGktYWdwLmMKQEAgLTUyMSw3ICs1MjEsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGFncF9hdGlfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9hdGlfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtYXRpIiwKIAkuaWRfdGFibGUJPSBhZ3BfYXRpX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2F0aV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2VmZmljZW9uLWFncC5jCmluZGV4IGQ0MWUwYTYuLmU3YWVhNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvZWZmaWNlb24tYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9lZmZpY2Vvbi1hZ3AuYwpAQCAtNDI5LDcgKzQyOSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX2VmZmljZW9uX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfZWZmaWNlb25fcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtZWZmaWNlb24iLAogCS5pZF90YWJsZQk9IGFncF9lZmZpY2Vvbl9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9lZmZpY2Vvbl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYyBiL2RyaXZlcnMvY2hhci9hZ3AvaTQ2MC1hZ3AuYwppbmRleCAzNGE0NDQ2Li44ZWUxOWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2k0NjAtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pNDYwLWFncC5jCkBAIC02MjIsNyArNjIyLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfaW50ZWxfaTQ2MF9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX2ludGVsX2k0NjBfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtaW50ZWwtaTQ2MCIsCiAJLmlkX3RhYmxlCT0gYWdwX2ludGVsX2k0NjBfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfaW50ZWxfaTQ2MF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDAyNzE2MWEuLmU3YmVkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMTgyNyw3ICsxODI3LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZ3BfaW50ZWxfcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFncF9pbnRlbF9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1pbnRlbCIsCiAJLmlkX3RhYmxlCT0gYWdwX2ludGVsX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gYWdwX2ludGVsX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9udmlkaWEtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwppbmRleCAzYWVkMGM1Li44MGRhZmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL252aWRpYS1hZ3AuYwpAQCAtMzk4LDcgKzM5OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX252aWRpYV9wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX252aWRpYV9wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1udmlkaWEiLAogCS5pZF90YWJsZQk9IGFncF9udmlkaWFfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3BfbnZpZGlhX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zaXMtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYwppbmRleCBhNzAxMzYxLi5lYmMwNTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3Npcy1hZ3AuYwpAQCAtMzMyLDcgKzMzMiw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3Npc19wY2lfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYWdwX3Npc19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWdwZ2FydC1zaXMiLAogCS5pZF90YWJsZQk9IGFncF9zaXNfcGNpX3RhYmxlLAogCS5wcm9iZQkJPSBhZ3Bfc2lzX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9zd29ya3MtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwppbmRleCA1YTUzOTJkLi4zZjhmN2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL3N3b3Jrcy1hZ3AuYwpAQCAtNTQ1LDcgKzU0NSw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3NlcnZlcndvcmtzX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3Bfc2VydmVyd29ya3NfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtc2VydmVyd29ya3MiLAogCS5pZF90YWJsZQk9IGFncF9zZXJ2ZXJ3b3Jrc19wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF9zZXJ2ZXJ3b3Jrc19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCmluZGV4IDE4M2M1MGEuLmM4MjU1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC91bmlub3J0aC1hZ3AuYwpAQCAtNjU4LDcgKzY1OCw2IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYWdwX3VuaW5vcnRoX3BjaV90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfdW5pbm9ydGhfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFncGdhcnQtdW5pbm9ydGgiLAogCS5pZF90YWJsZQk9IGFncF91bmlub3J0aF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF91bmlub3J0aF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdmlhLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKaW5kZXggNWQ5YTEzNy4uYzg0N2RmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC92aWEtYWdwLmMKQEAgLTUxOCw3ICs1MTgsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhZ3BfdmlhX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJhZ3BnYXJ0LXZpYSIsCiAJLmlkX3RhYmxlCT0gYWdwX3ZpYV9wY2lfdGFibGUsCiAJLnByb2JlCQk9IGFncF92aWFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZXBjYS5jIGIvZHJpdmVycy9jaGFyL2VwY2EuYwppbmRleCBiN2EwZTRkLi40MDc3MDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZXBjYS5jCisrKyBiL2RyaXZlcnMvY2hhci9lcGNhLmMKQEAgLTMxMTMsNyArMzExMyw2IEBACiBpbnQgX19pbml0IGluaXRfUENJICh2b2lkKQogewkvKiBCZWdpbiBpbml0X1BDSSAqLwogCW1lbXNldCAoJmVwY2FfZHJpdmVyLCAwLCBzaXplb2YgKGVwY2FfZHJpdmVyKSk7Ci0JZXBjYV9kcml2ZXIub3duZXIgPSBUSElTX01PRFVMRTsKIAllcGNhX2RyaXZlci5uYW1lID0gImVwY2EiOwogCWVwY2FfZHJpdmVyLmlkX3RhYmxlID0gZXBjYV9wY2lfdGJsOwogCWVwY2FfZHJpdmVyLnByb2JlID0gZXBjYV9pbml0X29uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggYzFkMDZiYS4uZDE2YmQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTI2NDgsNyArMjY0OCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJaWYgKCFsaXN0X2VtcHR5KCZpbnRmLT53YWl0aW5nX21zZ3MpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgJmludGYtPndhaXRpbmdfbXNncyk7Ci0JCXNwaW5fdW5sb2NrKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPndhaXRpbmdfbXNnc19sb2NrLCBmbGFncyk7CiAJCWdvdG8gb3V0OwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jaywgZmxhZ3MpOwpAQCAtMjY1Nyw5ICsyNjU3LDkgQEAKIAlpZiAocnYgPiAwKSB7CiAJCS8qIENvdWxkIG5vdCBoYW5kbGUgdGhlIG1lc3NhZ2Ugbm93LCBqdXN0IGFkZCBpdCB0byBhCiAgICAgICAgICAgICAgICAgICAgbGlzdCB0byBoYW5kbGUgbGF0ZXIuICovCi0JCXNwaW5fbG9jaygmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmbXNnLT5saW5rLCAmaW50Zi0+d2FpdGluZ19tc2dzKTsKLQkJc3Bpbl91bmxvY2soJmludGYtPndhaXRpbmdfbXNnc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW50Zi0+d2FpdGluZ19tc2dzX2xvY2ssIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHJ2ID09IDApIHsKIAkJaXBtaV9mcmVlX3NtaV9tc2cobXNnKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCmluZGV4IGQ3MjRjMGQuLjNkZjdhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCkBAIC0zODIsNyArMzgyLDcgQEAKIAkucHJvYwkgICAgICAgID0gczNjMjQxMF9ydGNfcHJvYywKIH07CiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlbikKK3N0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX2VuYWJsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZW4pCiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIApAQCAtMzk5LDIxICszOTksMjEgQEAKIAkJLyogcmUtZW5hYmxlIHRoZSBkZXZpY2UsIGFuZCBjaGVjayBpdCBpcyBvayAqLwogCiAJCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fUlRDRU4pID09IDApewotCQkJZGV2X2luZm8oZGV2LCAicnRjIGRpc2FibGVkLCByZS1lbmFibGluZ1xuIik7CisJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicnRjIGRpc2FibGVkLCByZS1lbmFibGluZ1xuIik7CiAKIAkJCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKIAkJCXdyaXRlYih0bXAgfCBTM0MyNDEwX1JUQ0NPTl9SVENFTiAsIFMzQzI0MTBfUlRDQ09OKTsKIAkJfQogCiAJCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fQ05UU0VMKSl7Ci0JCQlkZXZfaW5mbyhkZXYsICJyZW1vdmluZyBTM0MyNDEwX1JUQ0NPTl9DTlRTRUxcbiIpOworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NOVFNFTFxuIik7CiAKIAkJCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKIAkJCXdyaXRlYih0bXAmIH5TM0MyNDEwX1JUQ0NPTl9DTlRTRUwgLCBTM0MyNDEwX1JUQ0NPTik7CiAJCX0KIAogCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NMS1JTVCkpewotCQkJZGV2X2luZm8oZGV2LCAicmVtb3ZpbmcgUzNDMjQxMF9SVENDT05fQ0xLUlNUXG4iKTsKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZW1vdmluZyBTM0MyNDEwX1JUQ0NPTl9DTEtSU1RcbiIpOwogCiAJCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7CiAJCQl3cml0ZWIodG1wICYgflMzQzI0MTBfUlRDQ09OX0NMS1JTVCwgUzNDMjQxMF9SVENDT04pOwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5yZWdpc3Rlcl9ydGMoJnMzYzI0MTBfcnRjb3BzKTsKIApAQCAtNDM4LDI1ICs0MzgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3J0Y19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXQ7CiAKLQlwcl9kZWJ1ZygiJXM6IHByb2JlPSVwLCBkZXZpY2U9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldiwgZGV2KTsKKwlwcl9kZWJ1ZygiJXM6IHByb2JlPSVwXG4iLCBfX0ZVTkNUSU9OX18sIHBkZXYpOwogCiAJLyogZmluZCB0aGUgSVJRcyAqLwogCiAJczNjMjQxMF9ydGNfdGlja25vID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKIAlpZiAoczNjMjQxMF9ydGNfdGlja25vIDw9IDApIHsKLQkJZGV2X2VycihkZXYsICJubyBpcnEgZm9yIHJ0YyB0aWNrXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCXMzYzI0MTBfcnRjX2FsYXJtbm8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChzM2MyNDEwX3J0Y19hbGFybW5vIDw9IDApIHsKLQkJZGV2X2VycihkZXYsICJubyBpcnEgZm9yIGFsYXJtXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBhbGFybVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtNDY3LDcgKzQ2Niw3IEBACiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtNDc1LDE0ICs0NzQsMTQgQEAKIAkJCQkgICAgIHBkZXYtPm5hbWUpOwogCiAJaWYgKHMzYzI0MTBfcnRjX21lbSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXRfZXJyOwogCX0KIAogCXMzYzI0MTBfcnRjX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmIChzM2MyNDEwX3J0Y19iYXNlID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgaW9yZW1hcCgpXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIGlvcmVtYXAoKVxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdF9lcnI7CiAJfQpAQCAtNDk0LDcgKzQ5Myw3IEBACiAKIAkvKiBjaGVjayB0byBzZWUgaWYgZXZlcnl0aGluZyBpcyBzZXR1cCBjb3JyZWN0bHkgKi8KIAotCXMzYzI0MTBfcnRjX2VuYWJsZShkZXYsIDEpOworCXMzYzI0MTBfcnRjX2VuYWJsZShwZGV2LCAxKTsKIAogIAlwcl9kZWJ1ZygiczNjMjQxMF9ydGM6IFJUQ0NPTj0lMDJ4XG4iLCByZWFkYihTM0MyNDEwX1JUQ0NPTikpOwogCkBAIC01MDYsNyArNTA1LDcgQEAKIAlyZXR1cm4gMDsKIAogIGV4aXRfZXJyOgotCWRldl9lcnIoZGV2LCAiZXJyb3IgJWQgZHVyaW5nIGluaXRpYWxpc2F0aW9uXG4iLCByZXQpOworCWRldl9lcnIoJnBkZXYtPmRldiwgImVycm9yICVkIGR1cmluZyBpbml0aWFsaXNhdGlvblxuIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01MTksNyArNTE4LDcgQEAKIAogc3RhdGljIGludCB0aWNudF9zYXZlOwogCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0MTBfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKQEAgLTUzNSwxOSArNTM0LDE5IEBACiAJczNjMjQxMF9ydGNfZ2V0dGltZSgmdG0pOwogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlzYXZlX3RpbWVfZGVsdGEoJnMzYzI0MTBfcnRjX2RlbHRhLCAmdGltZSk7Ci0JczNjMjQxMF9ydGNfZW5hYmxlKGRldiwgMCk7CisJczNjMjQxMF9ydGNfZW5hYmxlKHBkZXYsIDApOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9ydGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCXN0cnVjdCB0aW1lc3BlYyB0aW1lOwogCiAJdGltZS50dl9uc2VjID0gMDsKIAotCXMzYzI0MTBfcnRjX2VuYWJsZShkZXYsIDEpOworCXMzYzI0MTBfcnRjX2VuYWJsZShwZGV2LCAxKTsKIAlzM2MyNDEwX3J0Y19nZXR0aW1lKCZ0bSk7CiAJcnRjX3RtX3RvX3RpbWUoJnRtLCAmdGltZS50dl9zZWMpOwogCXJlc3RvcmVfdGltZV9kZWx0YSgmczNjMjQxMF9ydGNfZGVsdGEsICZ0aW1lKTsKQEAgLTU2MCwxNCArNTU5LDE1IEBACiAjZGVmaW5lIHMzYzI0MTBfcnRjX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX3J0Y2RydiA9IHsKLQkubmFtZQkJPSAiczNjMjQxMC1ydGMiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBfcnRjZHJ2ID0gewogCS5wcm9iZQkJPSBzM2MyNDEwX3J0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfcnRjX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHMzYzI0MTBfcnRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEwX3J0Y19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0MTAtcnRjIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgYmFubmVyW10gPSAiUzNDMjQxMCBSVEMsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIjsKQEAgLTU3NSwxMiArNTc1LDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX3J0Y19pbml0KHZvaWQpCiB7CiAJcHJpbnRrKGJhbm5lcik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfcnRjZHJ2KTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHMzYzI0MTBfcnRjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7CiB9CiAKIG1vZHVsZV9pbml0KHMzYzI0MTBfcnRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGQwNTA2N2QuLjUxYTA3MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTExNjgsNyArMTE2OCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IG9sZF9jYW1lcmFfcG93ZXI7CiAKLXN0YXRpYyBpbnQgc29ueXBpX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNvbnlwaV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCW9sZF9jYW1lcmFfcG93ZXIgPSBzb255cGlfZGV2aWNlLmNhbWVyYV9wb3dlcjsKIAlzb255cGlfZGlzYWJsZSgpOwpAQCAtMTE3NiwyNiArMTE3NiwyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNvbnlwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzb255cGlfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzb255cGlfZW5hYmxlKG9sZF9jYW1lcmFfcG93ZXIpOwogCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHNvbnlwaV9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzb255cGlfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNvbnlwaV9kaXNhYmxlKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzb255cGlfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzb255cGkiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29ueXBpX2RyaXZlciA9IHsKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHNvbnlwaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc29ueXBpX3Jlc3VtZSwKICNlbmRpZgogCS5zaHV0ZG93bgk9IHNvbnlwaV9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic29ueXBpIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgc29ueXBpX2NyZWF0ZV9pbnB1dF9kZXZpY2VzKHZvaWQpCkBAIC0xNDU1LDIwICsxNDU2LDIwIEBACiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKHNvbnlwaV9kbWlfdGFibGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb255cGlfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gc29ueXBpX3Byb2JlKCk7CiAJaWYgKHJldCkKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc29ueXBpX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc29ueXBpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNvbnlwaV9kcml2ZXIpOwogCXNvbnlwaV9yZW1vdmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCA1ZDFmZmEzLi44MmM2YWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtOTEyLDcgKzkxMiw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzeW5jbGlua19wY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic3luY2xpbmsiLAogCS5pZF90YWJsZQk9IHN5bmNsaW5rX3BjaV90YmwsCiAJLnByb2JlCQk9IHN5bmNsaW5rX2luaXRfb25lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggN2MwNjNjNS4uZWU1YTQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC01MDAsNyArNTAwLDYgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN5bmNsaW5rbXBfcGNpX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInN5bmNsaW5rbXAiLAogCS5pZF90YWJsZQk9IHN5bmNsaW5rbXBfcGNpX3RibCwKIAkucHJvYmUJCT0gc3luY2xpbmttcF9pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90YjAyMTkuYyBiL2RyaXZlcnMvY2hhci90YjAyMTkuYwppbmRleCAyNDM1NWIyLi5iM2Q0MTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdGIwMjE5LmMKKysrIGIvZHJpdmVycy9jaGFyL3RiMDIxOS5jCkBAIC0yODMsNyArMjgzLDcgQEAKIAl2cjQxeHhfc2V0X2lycV9sZXZlbChUQjAyMTlfUENJX1NMT1QzX1BJTiwgSVJRX0xFVkVMX0xPVyk7CiB9CiAKLXN0YXRpYyBpbnQgdGIwMjE5X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGIwMjE5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0zMTksNyArMzE5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0YjAyMTlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdGIwMjE5X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJX21hY2hpbmVfcmVzdGFydCA9IG9sZF9tYWNoaW5lX3Jlc3RhcnQ7CiAKQEAgLTMzMywxMSArMzMzLDEyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0YjAyMTlfcGxhdGZvcm1fZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdGIwMjE5X2RldmljZV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIlRCMDIxOSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0YjAyMTlfZGV2aWNlX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gdGIwMjE5X3Byb2JlLAogCS5yZW1vdmUJCT0gdGIwMjE5X3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiVEIwMjE5IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdGFuYmFjX3RiMDIxOV9pbml0KHZvaWQpCkBAIC0zNDgsNyArMzQ5LDcgQEAKIAlpZiAoSVNfRVJSKHRiMDIxOV9wbGF0Zm9ybV9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIApAQCAtMzU3LDcgKzM1OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB0YW5iYWNfdGIwMjE5X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGIwMjE5X2RldmljZV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0YjAyMTlfZGV2aWNlX2RyaXZlcik7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0YjAyMTlfcGxhdGZvcm1fZGV2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMgYi9kcml2ZXJzL2NoYXIvdnI0MXh4X2dpdS5jCmluZGV4IDk0NjQxMDguLjlhYzZkNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92cjQxeHhfZ2l1LmMKKysrIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9naXUuYwpAQCAtNjEzLDcgKzYxMyw3IEBACiAJLnJlbGVhc2UJPSBncGlvX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50IGdpdV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGdpdV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZSwgZmxhZ3MgPSAwOwogCXVuc2lnbmVkIGludCBucl9waW5zID0gMDsKQEAgLTY5Nyw3ICs2OTcsNyBAQAogCXJldHVybiBjYXNjYWRlX2lycShHSVVJTlRfSVJRLCBnaXVfZ2V0X2lycSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2l1X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGdpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWlvdW5tYXAoZ2l1X2Jhc2UpOwogCkBAIC03MTAsMTEgKzcxMCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2l1X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGdpdV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJHSVUiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZ2l1X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGdpdV9wcm9iZSwKIAkucmVtb3ZlCQk9IGdpdV9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIkdJVSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9naXVfaW5pdCh2b2lkKQpAQCAtNzI1LDcgKzcyNiw3IEBACiAJaWYgKElTX0VSUihnaXVfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTczNCw3ICs3MzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X2dpdV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmdpdV9kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2l1X2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2l1X3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jIGIvZHJpdmVycy9jaGFyL3ZyNDF4eF9ydGMuYwppbmRleCA1ZTMyOTJkLi40MzViMzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnI0MXh4X3J0Yy5jCisrKyBiL2RyaXZlcnMvY2hhci92cjQxeHhfcnRjLmMKQEAgLTU2MCwxMyArNTYwLDExIEBACiAJLmZvcHMJPSAmcnRjX2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IHJ0Y19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHJ0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdW5zaWduZWQgaW50IGlycTsKIAlpbnQgcmV0dmFsOwogCi0JcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTYzNSw3ICs2MzMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0Y19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC02NTUsMTEgKzY1MywxMiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcnRjX3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHJ0Y19kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9IHJ0Y19uYW1lLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHJ0Y19wcm9iZSwKIAkucmVtb3ZlCQk9IHJ0Y19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gcnRjX25hbWUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9ydGNfaW5pdCh2b2lkKQpAQCAtNjkxLDcgKzY5MCw3IEBACiAJaWYgKElTX0VSUihydGNfcGxhdGZvcm1fZGV2aWNlKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjX3BsYXRmb3JtX2RldmljZSk7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7CiAKQEAgLTcwMCw3ICs2OTksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgdnI0MXh4X3J0Y19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnJ0Y19kZXZpY2VfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnRjX2RldmljZV9kcml2ZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocnRjX3BsYXRmb3JtX2RldmljZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wY29yZV93ZHQuYwppbmRleCBkYTYzMWMxLi45ZGVmY2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogICovCiBzdGF0aWMgaW50IG1wY29yZV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKCZtcGNvcmVfd2R0X2Rldi0+ZGV2KTsKKwlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEobXBjb3JlX3dkdF9kZXYpOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJndkdC0+dGltZXJfYWxpdmUpKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMjkxLDkgKzI5MSw5IEBACiAgKglTeXN0ZW0gc2h1dGRvd24gaGFuZGxlci4gIFR1cm4gb2ZmIHRoZSB3YXRjaGRvZyBpZiB3ZSdyZQogICoJcmVzdGFydGluZyBvciBoYWx0aW5nIHRoZSBzeXN0ZW0uCiAgKi8KLXN0YXRpYyB2b2lkIG1wY29yZV93ZHRfc2h1dGRvd24oc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyB2b2lkIG1wY29yZV93ZHRfc2h1dGRvd24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9SRVNUQVJUIHx8IHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fSEFMVCkKIAkJbXBjb3JlX3dkdF9zdG9wKHdkdCk7CkBAIC0zMTcsOSArMzE3LDggQEAKIAkuZm9wcwkJPSAmbXBjb3JlX3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbXBjb3JlX3dkdF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgbXBjb3JlX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBtcGNvcmVfd2R0ICp3ZHQ7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKQEAgLTM2NCw3ICszNjMsNyBAQAogCX0KIAogCW1wY29yZV93ZHRfc3RvcCh3ZHQpOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIHdkdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoJmRldi0+ZGV2LCB3ZHQpOwogCW1wY29yZV93ZHRfZGV2ID0gZGV2OwogCiAJcmV0dXJuIDA7CkBAIC0zNzksMTEgKzM3OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1wY29yZV93ZHRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1wY29yZV93ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbXBjb3JlX3dkdCAqd2R0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1wY29yZV93ZHQgKndkdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJbWlzY19kZXJlZ2lzdGVyKCZtcGNvcmVfd2R0X21pc2NkZXYpOwogCkBAIC0zOTUsMTMgKzM5NCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbXBjb3JlX3dkdF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJtcGNvcmVfd2R0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1wY29yZV93ZHRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBtcGNvcmVfd2R0X3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobXBjb3JlX3dkdF9yZW1vdmUpLAogCS5zaHV0ZG93bgk9IG1wY29yZV93ZHRfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJtcGNvcmVfd2R0IiwKKwl9LAogfTsKIAogc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiTVBjb3JlIFdhdGNoZG9nIFRpbWVyOiAwLjEuIG1wY29yZV9ub2Jvb3Q9JWQgbXBjb3JlX21hcmdpbj0lZCBzZWMgKG5vd2F5b3V0PSAlZClcbiI7CkBAIC00MjAsMTIgKzQyMCwxMiBAQAogCiAJcHJpbnRrKGJhbm5lciwgbXBjb3JlX25vYm9vdCwgbXBjb3JlX21hcmdpbiwgbm93YXlvdXQpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmbXBjb3JlX3dkdF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1wY29yZV93ZHRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcGNvcmVfd2R0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wY29yZV93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobXBjb3JlX3dkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKaW5kZXggMTE5YjNjNS4uMDBkOWVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKQEAgLTE4MiwxMCArMTgyLDkgQEAKIAkuZm9wcyA9ICZtdjY0eDYwX3dkdF9mb3BzLAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgbXY2NHg2MF93ZHRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgbXY2NHg2MF93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG12NjR4NjBfd2R0X3BkYXRhICpwZGF0YSA9IHBkLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbXY2NHg2MF93ZHRfcGRhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgYnVzX2NsayA9IDEzMzsKIAogCW12NjR4NjBfd2R0X3RpbWVvdXQgPSAxMDsKQEAgLTIwMiw3ICsyMDEsNyBAQAogCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZtdjY0eDYwX3dkdF9taXNjZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgbXY2NHg2MF93ZHRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG12NjR4NjBfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9taXNjZGV2KTsKIApAQCAtMjEyLDEyICsyMTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12NjR4NjBfd2R0X2RyaXZlciA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9IE1WNjR4NjBfV0RUX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjR4NjBfd2R0X2RyaXZlciA9IHsKIAkucHJvYmUgPSBtdjY0eDYwX3dkdF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AobXY2NHg2MF93ZHRfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBNVjY0eDYwX1dEVF9OQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NHg2MF93ZHRfZGV2OwpAQCAtMjM1LDE0ICsyMzUsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NHg2MF93ZHRfZHJpdmVyKTsKICAgICAgIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXY2NHg2MF93ZHRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eDYwX3dkdF9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG12NjR4NjBfd2R0X2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggZDllZjU1Yi4uMjQ1MWVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTc1NSw3ICs3NTUsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaXBjd2RfcGNpX3RibCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2lwY3dkX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gV0FUQ0hET0dfTkFNRSwKIAkuaWRfdGFibGUJPSBwY2lwY3dkX3BjaV90YmwsCiAJLnByb2JlCQk9IHBjaXBjd2RfY2FyZF9pbml0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwppbmRleCA3NTFjYjc3Li5lYjY2N2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpAQCAtMzQ3LDE1ICszNDcsMTQgQEAKIH0KIC8qIGRldmljZSBpbnRlcmZhY2UgKi8KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgc3RhcnRlZCA9IDA7CiAJaW50IHJldDsKIAlpbnQgc2l6ZTsKIAotCURCRygiJXM6IHByb2JlPSVwLCBkZXZpY2U9JXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldiwgZGV2KTsKKwlEQkcoIiVzOiBwcm9iZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKIAogCS8qIGdldCB0aGUgbWVtb3J5IHJlZ2lvbiBmb3IgdGhlIHdhdGNoZG9nIHRpbWVyICovCiAKQEAgLTM4NiwxMyArMzg1LDEzIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJlcy0+c3RhcnQsIHMzYzI0MTB3ZHRfaXJxLCAwLCBwZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKHJlcy0+c3RhcnQsIHMzYzI0MTB3ZHRfaXJxLCAwLCBwZGV2LT5uYW1lLCBwZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhaWxlZCB0byBpbnN0YWxsIGlycSAoJWQpXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXdkdF9jbG9jayA9IGNsa19nZXQoZGV2LCAid2F0Y2hkb2ciKTsKKwl3ZHRfY2xvY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ3YXRjaGRvZyIpOwogCWlmICh3ZHRfY2xvY2sgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmFpbGVkIHRvIGZpbmQgd2F0Y2hkb2cgY2xvY2sgc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC00MzAsNyArNDI5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwd2R0X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpZiAod2R0X21lbSAhPSBOVUxMKSB7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CkBAIC00NTQsNyArNDUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgczNjMjQxMHdkdF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzM2MyNDEwd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzM2MyNDEwd2R0X3N0b3AoKTsJCiB9CkBAIC00NjQsNyArNDYzLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHd0Y29uX3NhdmU7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3dGRhdF9zYXZlOwogCi1zdGF0aWMgaW50IHMzYzI0MTB3ZHRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCS8qIFNhdmUgd2F0Y2hkb2cgc3RhdGUsIGFuZCB0dXJuIGl0IG9mZi4gKi8KIAl3dGNvbl9zYXZlID0gcmVhZGwod2R0X2Jhc2UgKyBTM0MyNDEwX1dUQ09OKTsKQEAgLTQ3Niw3ICs0NzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTB3ZHRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMHdkdF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCS8qIFJlc3RvcmUgd2F0Y2hkb2cgc3RhdGUuICovCiAKQEAgLTQ5NiwxNSArNDk1LDE2IEBACiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0MTB3ZHRfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQxMC13ZHQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMHdkdF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTB3ZHRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwd2R0X3JlbW92ZSwKIAkuc2h1dGRvd24JPSBzM2MyNDEwd2R0X3NodXRkb3duLAogCS5zdXNwZW5kCT0gczNjMjQxMHdkdF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMHdkdF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJzM2MyNDEwLXdkdCIsCisJfSwKIH07CiAKIApAQCAtNTEzLDEyICs1MTMsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKIHsKIAlwcmludGsoYmFubmVyKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMHdkdF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2F0Y2hkb2dfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwd2R0X2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTB3ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYwppbmRleCBkYzkzNzBmLi40YjMzMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0X3BjaS5jCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMKQEAgLTcxMSw3ICs3MTEsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB3ZHRwY2lfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAid2R0X3BjaSIsCiAJLmlkX3RhYmxlCT0gd2R0cGNpX3BjaV90YmwsCiAJLnByb2JlCQk9IHdkdHBjaV9pbml0X29uZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCAxZTVkZmM3Li5jODFiZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC02MCw5ICs2MCwxMSBAQAogCiAjZGVmaW5lIEhEQVBTX1BPTExfUEVSSU9ECShIWi8yMCkJLyogcG9sbCBmb3IgaW5wdXQgZXZlcnkgMS8yMHMgKi8KICNkZWZpbmUgSERBUFNfSU5QVVRfRlVaWgk0CS8qIGlucHV0IGV2ZW50IHRocmVzaG9sZCAqLworI2RlZmluZSBIREFQU19JTlBVVF9GTEFUCTQKIAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGhkYXBzX3RpbWVyOwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaGRhcHNfaWRldjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGRhcHNfaW52ZXJ0Owogc3RhdGljIHU4IGttX2FjdGl2aXR5Owogc3RhdGljIGludCByZXN0X3g7CkBAIC0yODQsNyArMjg2LDcgQEAKIAogLyogRGV2aWNlIG1vZGVsIHN0dWZmICovCiAKLXN0YXRpYyBpbnQgaGRhcHNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBoZGFwc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtMjk2LDI5ICsyOTgsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBoZGFwc19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBoZGFwc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBoZGFwc19kZXZpY2VfaW5pdCgpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaGRhcHNfZHJpdmVyID0gewotCS5uYW1lID0gImhkYXBzIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRhcHNfZHJpdmVyID0gewogCS5wcm9iZSA9IGhkYXBzX3Byb2JlLAotCS5yZXN1bWUgPSBoZGFwc19yZXN1bWUKLX07Ci0KLS8qIElucHV0IGNsYXNzIHN0dWZmICovCi0KLXN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2IGhkYXBzX2lkZXYgPSB7Ci0JLm5hbWUgPSAiaGRhcHMiLAotCS5ldmJpdCA9IHsgQklUKEVWX0FCUykgfSwKLQkuYWJzYml0ID0geyBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKSB9LAotCS5hYnNtaW4gID0geyBbQUJTX1hdID0gLTI1NiwgW0FCU19ZXSA9IC0yNTYgfSwKLQkuYWJzbWF4ICA9IHsgW0FCU19YXSA9IDI1NiwgW0FCU19ZXSA9IDI1NiB9LAotCS5hYnNmdXp6ID0geyBbQUJTX1hdID0gSERBUFNfSU5QVVRfRlVaWiwgW0FCU19ZXSA9IEhEQVBTX0lOUFVUX0ZVWlogfSwKLQkuYWJzZmxhdCA9IHsgW0FCU19YXSA9IEhEQVBTX0lOUFVUX0ZVWlosIFtBQlNfWV0gPSBIREFQU19JTlBVVF9GVVpaIH0sCisJLnJlc3VtZSA9IGhkYXBzX3Jlc3VtZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJoZGFwcyIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiAvKgpAQCAtMzQyLDkgKzMzMyw5IEBACiAJaWYgKF9faGRhcHNfcmVhZF9wYWlyKEhEQVBTX1BPUlRfWFBPUywgSERBUFNfUE9SVF9ZUE9TLCAmeCwgJnkpKQogCQlnb3RvIG91dDsKIAotCWlucHV0X3JlcG9ydF9hYnMoJmhkYXBzX2lkZXYsIEFCU19YLCB4IC0gcmVzdF94KTsKLQlpbnB1dF9yZXBvcnRfYWJzKCZoZGFwc19pZGV2LCBBQlNfWSwgeSAtIHJlc3RfeSk7Ci0JaW5wdXRfc3luYygmaGRhcHNfaWRldik7CisJaW5wdXRfcmVwb3J0X2FicyhoZGFwc19pZGV2LCBBQlNfWCwgeCAtIHJlc3RfeCk7CisJaW5wdXRfcmVwb3J0X2FicyhoZGFwc19pZGV2LCBBQlNfWSwgeSAtIHJlc3RfeSk7CisJaW5wdXRfc3luYyhoZGFwc19pZGV2KTsKIAogCW1vZF90aW1lcigmaGRhcHNfdGltZXIsIGppZmZpZXMgKyBIREFQU19QT0xMX1BFUklPRCk7CiAKQEAgLTU1MCw3ICs1NDEsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmhkYXBzX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3JlZ2lvbjsKIApAQCAtNTY0LDEyICs1NTUsMjUgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9kZXZpY2U7CiAKKwloZGFwc19pZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFoZGFwc19pZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2dyb3VwOworCX0KKwogCS8qIGluaXRpYWwgY2FsaWJyYXRlIGZvciB0aGUgaW5wdXQgZGV2aWNlICovCiAJaGRhcHNfY2FsaWJyYXRlKCk7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBpbnB1dCBjbGFzcyAqLwotCWhkYXBzX2lkZXYuZGV2ID0gJnBkZXYtPmRldjsKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoJmhkYXBzX2lkZXYpOworCWhkYXBzX2lkZXYtPm5hbWUgPSAiaGRhcHMiOworCWhkYXBzX2lkZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKKwloZGFwc19pZGV2LT5ldmJpdFswXSA9IEJJVChFVl9BQlMpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGhkYXBzX2lkZXYsIEFCU19YLAorCQkJLTI1NiwgMjU2LCBIREFQU19JTlBVVF9GVVpaLCBIREFQU19JTlBVVF9GTEFUKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhoZGFwc19pZGV2LCBBQlNfWCwKKwkJCS0yNTYsIDI1NiwgSERBUFNfSU5QVVRfRlVaWiwgSERBUFNfSU5QVVRfRkxBVCk7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaGRhcHNfaWRldik7CiAKIAkvKiBzdGFydCB1cCBvdXIgdGltZXIgZm9yIHRoZSBpbnB1dCBkZXZpY2UgKi8KIAlpbml0X3RpbWVyKCZoZGFwc190aW1lcik7CkBAIC01ODAsMTAgKzU4NCwxMiBAQAogCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOwogCXJldHVybiAwOwogCitvdXRfZ3JvdXA6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmhkYXBzX2F0dHJpYnV0ZV9ncm91cCk7CiBvdXRfZGV2aWNlOgogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogb3V0X2RyaXZlcjoKLQlkcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRhcHNfZHJpdmVyKTsKIG91dF9yZWdpb246CiAJcmVsZWFzZV9yZWdpb24oSERBUFNfTE9XX1BPUlQsIEhEQVBTX05SX1BPUlRTKTsKIG91dDoKQEAgLTU5NCwxMCArNjAwLDEwIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgaGRhcHNfZXhpdCh2b2lkKQogewogCWRlbF90aW1lcl9zeW5jKCZoZGFwc190aW1lcik7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJmhkYXBzX2lkZXYpOworCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGhkYXBzX2lkZXYpOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZoZGFwc19hdHRyaWJ1dGVfZ3JvdXApOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoZGFwc19kcml2ZXIpOwogCXJlbGVhc2VfcmVnaW9uKEhEQVBTX0xPV19QT1JULCBIREFQU19OUl9QT1JUUyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJoZGFwczogZHJpdmVyIHVubG9hZGVkLlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1MzUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCmluZGV4IGJhOTBmNTEuLjNlYjQ3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jCkBAIC01MTMsNyArNTEzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFsaTE1MzVfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWxpMTUzNV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gYWxpMTUzNV9pZHMsCiAJLnByb2JlCQk9IGFsaTE1MzVfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCmluZGV4IGYxYTYyZDguLmU2ZjYzMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCkBAIC00MDgsNyArNDA4LDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgYWxpMTU2M19pZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbGkxNTYzX3BjaV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogIAkubmFtZQkJPSAiYWxpMTU2M19zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gYWxpMTU2M19pZF90YWJsZSwKICAJLnByb2JlCQk9IGFsaTE1NjNfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCmluZGV4IDQwMGIwOGUuLjdhNWMwOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCkBAIC01MDQsNyArNTA0LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFsaTE1eDNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiYWxpMTV4M19zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gYWxpMTV4M19pZHMsCiAJLnByb2JlCQk9IGFsaTE1eDNfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCBkZTAzNWQxLi4xNzUwZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTQwMSw3ICs0MDEsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYW1kNzU2X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFtZDc1Nl9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gYW1kNzU2X2lkcywKIAkucHJvYmUJCT0gYW1kNzU2X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwppbmRleCBmM2I3OWE2Li5lNWVmNTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwpAQCAtMzg0LDcgKzM4NCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBhbWQ4MTExX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gImFtZDgxMTFfc21idXMyIiwKIAkuaWRfdGFibGUJPSBhbWQ4MTExX2lkcywKIAkucHJvYmUJCT0gYW1kODExMV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwppbmRleCAxYjUzNTRlLi5lMGNiM2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCkBAIC0xNTUsNyArMTU1LDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaHlkcmFfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiaHlkcmFfc21idXMiLAogCS5pZF90YWJsZQk9IGh5ZHJhX2lkcywKIAkucHJvYmUJCT0gaHlkcmFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDRmNjMxOTUuLmFjM2VhZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC01NjAsNyArNTYwLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGk4MDFfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiaTgwMV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gaTgwMV9pZHMsCiAJLnByb2JlCQk9IGk4MDFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCmluZGV4IDUyYmMzMDUuLjc0OGJlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCkBAIC0yMzMsNyArMjMzLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGk4MTBfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiaTgxMF9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gaTgxMF9pZHMsCiAJLnByb2JlCQk9IGk4MTBfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYwppbmRleCBjZmFlNGFkLi4xNDE0ODUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKQEAgLTQwNSwxMCArNDA1LDkgQEAKIH07CiAKIHN0YXRpYyBpbnQgCi1pb3AzeHhfaTJjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitpb3AzeHhfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnBhZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBpMmNfYWRhcHRlciAqcGFkYXB0ZXIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaTJjX2FsZ29faW9wM3h4X2RhdGEgKmFkYXB0ZXJfZGF0YSA9IAogCQkoc3RydWN0IGkyY19hbGdvX2lvcDN4eF9kYXRhICopcGFkYXB0ZXItPmFsZ29fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC00MjYsMTUgKzQyNSwxNCBAQAogCWtmcmVlKGFkYXB0ZXJfZGF0YSk7CiAJa2ZyZWUocGFkYXB0ZXIpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgCi1pb3AzeHhfaTJjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2lvcDN4eF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKm5ld19hZGFwdGVyOwpAQCAtNDk5LDcgKzQ5Nyw3IEBACiAJaW9wM3h4X2kyY19zZXRfc2xhdmVfYWRkcihhZGFwdGVyX2RhdGEpOwogCWlvcDN4eF9pMmNfZW5hYmxlKGFkYXB0ZXJfZGF0YSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbmV3X2FkYXB0ZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5ld19hZGFwdGVyKTsKIAluZXdfYWRhcHRlci0+YWxnb19kYXRhID0gYWRhcHRlcl9kYXRhOwogCiAJaTJjX2FkZF9hZGFwdGVyKG5ld19hZGFwdGVyKTsKQEAgLTUyMywyNCArNTIxLDI1IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlvcDN4eF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiSU9QM3h4LUkyQyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpb3AzeHhfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaW9wM3h4X2kyY19wcm9iZSwKLQkucmVtb3ZlCQk9IGlvcDN4eF9pMmNfcmVtb3ZlCisJLnJlbW92ZQkJPSBpb3AzeHhfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIklPUDN4eC1JMkMiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCAKIGkyY19pb3AzeHhfaW5pdCAodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpb3AzeHhfaTJjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW9wM3h4X2kyY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgCiBpMmNfaW9wM3h4X2V4aXQgKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlvcDN4eF9pMmNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW9wM3h4X2kyY19kcml2ZXIpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYwppbmRleCA2NDU1MmEzLi5jZWYwMjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDIwMDAuYwpAQCAtODYsMTIgKzg2LDExIEBACiAJc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIGFsZ29fZGF0YTsKIH07CiAKLXN0YXRpYyBpbnQgaXhwMjAwMF9pMmNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXhwMjAwMF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGl4cDIwMDBfaTJjX2RhdGEgKmRydl9kYXRhID0gZGV2X2dldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2KTsKKwlzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0X2Rldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBOVUxMKTsKIAogCWkyY19iaXRfZGVsX2J1cygmZHJ2X2RhdGEtPmFkYXB0ZXIpOwogCkBAIC0xMDAsMTAgKzk5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpeHAyMDAwX2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGl4cDIwMDBfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2KQogewogCWludCBlcnI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaXhwMjAwMF9pMmNfcGlucyAqZ3BpbyA9IHBsYXRfZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgaXhwMjAwMF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSAKIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGl4cDIwMDBfaTJjX2RhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTEzOSwyNyArMTM3LDI4IEBACiAJCXJldHVybiBlcnI7CiAJfSAKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGxhdF9kZXYtPmRldiwgZHJ2X2RhdGEpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBsYXRfZGV2LCBkcnZfZGF0YSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGl4cDIwMDBfaTJjX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIklYUDIwMDAtSTJDIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGl4cDIwMDBfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaXhwMjAwMF9pMmNfcHJvYmUsCiAJLnJlbW92ZQkJPSBpeHAyMDAwX2kyY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIklYUDIwMDAtSTJDIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGl4cDIwMDBfaTJjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHAyMDAwX2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpeHAyMDAwX2kyY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDIwMDBfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGl4cDIwMDBfaTJjX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKaW5kZXggY2M2NTJjMy4uYWEzNjg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCkBAIC04NywxMiArODcsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogfTsKIAotc3RhdGljIGludCBpeHA0eHhfaTJjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGl4cDR4eF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IGl4cDR4eF9pMmNfZGF0YSAqZHJ2X2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBsYXRfZGV2LT5kZXYpOworCXN0cnVjdCBpeHA0eHhfaTJjX2RhdGEgKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGxhdF9kZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwbGF0X2RldiwgTlVMTCk7CiAKIAlpMmNfYml0X2RlbF9idXMoJmRydl9kYXRhLT5hZGFwdGVyKTsKIApAQCAtMTAxLDEwICsxMDAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4cDR4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBpeHA0eHhfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRfZGV2KQogewogCWludCBlcnI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdF9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaXhwNHh4X2kyY19waW5zICpncGlvID0gcGxhdF9kZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBpeHA0eHhfaTJjX2RhdGEgKmRydl9kYXRhID0gCiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeHA0eHhfaTJjX2RhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTE0OCwyNyArMTQ2LDI4IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwbGF0X2Rldi0+ZGV2LCBkcnZfZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGxhdF9kZXYsIGRydl9kYXRhKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaXhwNHh4X2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJJWFA0WFgtSTJDIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGl4cDR4eF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBpeHA0eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gaXhwNHh4X2kyY19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIklYUDRYWC1JMkMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXhwNHh4X2kyY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaXhwNHh4X2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9pMmNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl4cDR4eF9pMmNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpeHA0eHhfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9pMmNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaXhwNHh4X2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCmluZGV4IDY1YjkzOWEuLjVjY2QzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwpAQCAtMjg4LDExICsyODgsMTAgQEAKIAkucmV0cmllcyA9IDEKIH07CiAKLXN0YXRpYyBpbnQgZnNsX2kyY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGZzbF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgbXBjX2kyYyAqaTJjOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZnNsX2kyY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCkBAIC0zMjMsNyArMzIyLDcgQEAKIAkJfQogCiAJbXBjX2kyY19zZXRjbG9jayhpMmMpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXZpY2UsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKIAogCWkyYy0+YWRhcCA9IG1wY19vcHM7CiAJaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hZGFwLCBpMmMpOwpAQCAtMzQ1LDEyICszNDQsMTIgQEAKIAlyZXR1cm4gcmVzdWx0OwogfTsKIAotc3RhdGljIGludCBmc2xfaTJjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGZzbF9pMmNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG1wY19pMmMgKmkyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCXN0cnVjdCBtcGNfaTJjICppMmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hZGFwKTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpMmMtPmlycSAhPSAwKQogCQlmcmVlX2lycShpMmMtPmlycSwgaTJjKTsKQEAgLTM2MSwyMiArMzYwLDIzIEBACiB9OwogCiAvKiBTdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGZzbF9pMmNfZHJpdmVyID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5uYW1lID0gImZzbC1pMmMiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmc2xfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUgPSBmc2xfaTJjX3Byb2JlLAogCS5yZW1vdmUgPSBmc2xfaTJjX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAiZnNsLWkyYyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGZzbF9pMmNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmZzbF9pMmNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZmc2xfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmc2xfaTJjX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZnNsX2kyY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmc2xfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGZzbF9pMmNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCmluZGV4IDZiNDgwMjcuLmFmZDc2MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXY2NHh4eC5jCkBAIC00OTIsMTEgKzQ5MiwxMCBAQAogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdAotbXY2NHh4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXY2NHh4eF9pMmNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGQpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG12NjR4eHhfaTJjX2RhdGEJCSpkcnZfZGF0YTsKLQlzdHJ1Y3QgbXY2NHh4eF9pMmNfcGRhdGEJKnBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YQkqcGRhdGEgPSBwZC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50CXJjOwogCiAJaWYgKChwZC0+aWQgIT0gMCkgfHwgIXBkYXRhKQpAQCAtNTI2LDcgKzUyNSw3IEBACiAJZHJ2X2RhdGEtPmFkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT047CiAJZHJ2X2RhdGEtPmFkYXB0ZXIudGltZW91dCA9IHBkYXRhLT50aW1lb3V0OwogCWRydl9kYXRhLT5hZGFwdGVyLnJldHJpZXMgPSBwZGF0YS0+cmV0cmllczsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBkcnZfZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGQsIGRydl9kYXRhKTsKIAlpMmNfc2V0X2FkYXBkYXRhKCZkcnZfZGF0YS0+YWRhcHRlciwgZHJ2X2RhdGEpOwogCiAJaWYgKHJlcXVlc3RfaXJxKGRydl9kYXRhLT5pcnEsIG12NjR4eHhfaTJjX2ludHIsIDAsCkBAIC01NTUsOSArNTU0LDkgQEAKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQKLW12NjR4eHhfaTJjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittdjY0eHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtdjY0eHh4X2kyY19kYXRhCQkqZHJ2X2RhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbXY2NHh4eF9pMmNfZGF0YQkJKmRydl9kYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQJcmM7CiAKIAlyYyA9IGkyY19kZWxfYWRhcHRlcigmZHJ2X2RhdGEtPmFkYXB0ZXIpOwpAQCAtNTY4LDI0ICs1NjcsMjUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0eHh4X2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjR4eHhfaTJjX2RyaXZlciA9IHsKIAkucHJvYmUJPSBtdjY0eHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCT0gbXY2NHh4eF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IE1WNjRYWFhfSTJDX0NUTFJfTkFNRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQKIG12NjR4eHhfaTJjX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZtdjY0eHh4X2kyY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm12NjR4eHhfaTJjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXY2NHh4eF9pMmNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eHh4X2kyY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtdjY0eHh4X2kyY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtdjY0eHh4X2kyY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKaW5kZXggZmQyNjAzNi4uNGQxOGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMKQEAgLTM0Nyw3ICszNDcsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmZvcmNlMl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJuRm9yY2UyX3NtYnVzIiwKIAkuaWRfdGFibGUJPSBuZm9yY2UyX2lkcywKIAkucHJvYmUJCT0gbmZvcmNlMl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA3ZDYzZWVjLi42OTJmNDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NjIsNyArNDYyLDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBpaXg0X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gInBpaXg0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBwaWl4NF9pZHMsCiAJLnByb2JlCQk9IHBpaXg0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKaW5kZXggNDJjYjFkOC4uOTQ3OTUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCkBAIC0zMDEsNyArMzAxLDYgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKHBjaSwgcHJvc2F2YWdlX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcHJvc2F2YWdlX2RyaXZlciA9IHsKLQkub3duZXIJCT0JVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0JInByb3NhdmFnZV9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0JcHJvc2F2YWdlX3BjaV90YmwsCiAJLnByb2JlCQk9CXByb3NhdmFnZV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDY3Y2NiZWEuLjcwZjdhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTM2LDEwICs5MzYsMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCBpMmNfcHhhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaTJjX3B4YV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHB4YV9pMmMgKmkyYyA9ICZpMmNfcHhhOwotCXN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTk2OCw3ICs5NjgsNyBAQAogCWkyY19weGFfcmVzZXQoaTJjKTsKIAogCWkyYy0+YWRhcC5hbGdvX2RhdGEgPSBpMmM7Ci0JaTJjLT5hZGFwLmRldi5wYXJlbnQgPSBkZXY7CisJaTJjLT5hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaTJjKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CiAKICNpZmRlZiBDT05GSUdfSTJDX1BYQV9TTEFWRQogCXByaW50ayhLRVJOX0lORk8gIkkyQzogJXM6IFBYQSBJMkMgYWRhcHRlciwgc2xhdmUgYWRkcmVzcyAlZFxuIiwKQEAgLTk5MywxMSArOTkzLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpMmNfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGkyY19weGFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhX2kyYyAqaTJjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YV9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWZyZWVfaXJxKElSUV9JMkMsIGkyYyk7CkBAIC0xMDA2LDIxICsxMDA2LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpMmNfcHhhX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaTJjX3B4YV9wcm9iZSwKIAkucmVtb3ZlCQk9IGkyY19weGFfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJweGEyeHgtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfcHhhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpMmNfcHhhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBpMmNfYWRhcF9weGFfZXhpdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTJjX3B4YV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpMmNfYWRhcF9weGFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCmluZGV4IDFiNTgyMjYuLjU4Y2ZkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtczNjMjQxMC5jCkBAIC03NjAsMjQgKzc2MCwyMyBAQAogICogY2FsbGVkIGJ5IHRoZSBidXMgZHJpdmVyIHdoZW4gYSBzdWl0YWJsZSBkZXZpY2UgaXMgZm91bmQKICovCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9pMmNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9ICZzM2MyNHh4X2kyYzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwogCiAJLyogZmluZCB0aGUgY2xvY2sgYW5kIGVuYWJsZSBpdCAqLwogCi0JaTJjLT5kZXYgPSBkZXY7Ci0JaTJjLT5jbGsgPSBjbGtfZ2V0KGRldiwgImkyYyIpOworCWkyYy0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpMmMtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImkyYyIpOwogCWlmIChJU19FUlIoaTJjLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCBjbG9ja1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBnZXQgY2xvY2tcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOworCWRldl9kYmcoJnBkZXYtPmRldiwgImNsb2NrIHNvdXJjZSAlcFxuIiwgaTJjLT5jbGspOwogCiAJY2xrX3VzZShpMmMtPmNsayk7CiAJY2xrX2VuYWJsZShpMmMtPmNsayk7CkBAIC03ODYsNyArNzg1LDcgQEAKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgSU8gcmVzb3VyY2VcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJTyByZXNvdXJjZVxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTc5NSw3ICs3OTQsNyBAQAogCQkJCQkgcGRldi0+bmFtZSk7CiAKIAlpZiAoaTJjLT5pb2FyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZXF1ZXN0IElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSU9cbiIpOwogCQlyZXQgPSAtRU5YSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTgwMywxNyArODAyLDE3IEBACiAJaTJjLT5yZWdzID0gaW9yZW1hcChyZXMtPnN0YXJ0LCAocmVzLT5lbmQtcmVzLT5zdGFydCkrMSk7CiAKIAlpZiAoaTJjLT5yZWdzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgbWFwIElPXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG1hcCBJT1xuIik7CiAJCXJldCA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X2RiZyhkZXYsICJyZWdpc3RlcnMgJXAgKCVwLCAlcClcbiIsIGkyYy0+cmVncywgaTJjLT5pb2FyZWEsIHJlcyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVnaXN0ZXJzICVwICglcCwgJXApXG4iLCBpMmMtPnJlZ3MsIGkyYy0+aW9hcmVhLCByZXMpOwogCiAJLyogc2V0dXAgaW5mbyBibG9jayBmb3IgdGhlIGkyYyBjb3JlICovCiAKIAlpMmMtPmFkYXAuYWxnb19kYXRhID0gaTJjOwotCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gZGV2OworCWkyYy0+YWRhcC5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAogCS8qIGluaXRpYWxpc2UgdGhlIGkyYyBjb250cm9sbGVyICovCiAKQEAgLTgyNyw3ICs4MjYsNyBAQAogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZmluZCBJUlFcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIG91dDsKIAl9CkBAIC04MzYsMjMgKzgzNSwyMyBAQAogCQkJICBwZGV2LT5uYW1lLCBpMmMpOwogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IGNsYWltIElSUVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpMmMtPmlycSA9IHJlczsKIAkJCi0JZGV2X2RiZyhkZXYsICJpcnEgcmVzb3VyY2UgJXAgKCVsZClcbiIsIHJlcywgcmVzLT5zdGFydCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaXJxIHJlc291cmNlICVwICglbGQpXG4iLCByZXMsIHJlcy0+c3RhcnQpOwogCiAJcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZpMmMtPmFkYXApOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBidXMgdG8gaTJjIGNvcmVcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGJ1cyB0byBpMmMgY29yZVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGkyYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaTJjKTsKIAotCWRldl9pbmZvKGRldiwgIiVzOiBTM0MgSTJDIGFkYXB0ZXJcbiIsIGkyYy0+YWRhcC5kZXYuYnVzX2lkKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6IFMzQyBJMkMgYWRhcHRlclxuIiwgaTJjLT5hZGFwLmRldi5idXNfaWQpOwogCiAgb3V0OgogCWlmIChyZXQgPCAwKQpAQCAtODY2LDIyICs4NjUsMjIgQEAKICAqIGNhbGxlZCB3aGVuIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIGJ1cwogKi8KIAotc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNHh4X2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzM2MyNHh4X2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJCiAJaWYgKGkyYyAhPSBOVUxMKSB7CiAJCXMzYzI0eHhfaTJjX2ZyZWUoaTJjKTsKLQkJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0eHhfaTJjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHMzYzI0eHhfaTJjICppMmMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaTJjICE9IE5VTEwpCiAJCXMzYzI0eHhfaTJjX2luaXQoaTJjKTsKQEAgLTg5NSwzMyArODk0LDM1IEBACiAKIC8qIGRldmljZSBkcml2ZXIgZm9yIHBsYXRmb3JtIGJ1cyBiaXRzICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5uYW1lCQk9ICJzM2MyNDEwLWkyYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0eHhfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9pMmNfcmVtb3ZlLAogCS5yZXN1bWUJCT0gczNjMjR4eF9pMmNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAiczNjMjQxMC1pMmMiLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubmFtZQkJPSAiczNjMjQ0MC1pMmMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQ0MF9pMmNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNHh4X2kyY19wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0eHhfaTJjX3JlbW92ZSwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaTJjX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0NDAtaTJjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2FkYXBfczNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX2kyY19kcml2ZXIpOworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9pMmNfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX2kyY19kcml2ZXIpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05MjksOCArOTMwLDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19hZGFwX3MzY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBfaTJjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfaTJjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGkyY19hZGFwX3MzY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKaW5kZXggYWViZTg3Yi4uMGM4NTE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zYXZhZ2U0LmMKQEAgLTE3OSw3ICsxNzksNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2F2YWdlNF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzYXZhZ2U0X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzYXZhZ2U0X2lkcywKIAkucHJvYmUJCT0gc2F2YWdlNF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNTU5NS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKaW5kZXggM2FkMjdjMy4uYjU3YWI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKQEAgLTM5OCw3ICszOTgsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2lzNTU5NV9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzaXM1NTk1X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzaXM1NTk1X2lkcywKIAkucHJvYmUJCT0gc2lzNTU5NV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCmluZGV4IDdmNDllNWYuLmFjYjc1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwpAQCAtNDk2LDcgKzQ5Niw2IEBACiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNpczYzMF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJzaXM2MzBfc21idXMiLAogCS5pZF90YWJsZQk9IHNpczYzMF9pZHMsCiAJLnByb2JlCQk9IHNpczYzMF9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDZhMTM0YzAuLjMwMjQ5MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMzI5LDcgKzMyOSw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzaXM5NnhfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAic2lzOTZ4X3NtYnVzIiwKIAkuaWRfdGFibGUJPSBzaXM5NnhfaWRzLAogCS5wcm9iZQkJPSBzaXM5NnhfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYwppbmRleCA1NDRhMzhlLi40ODRiYmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKQEAgLTE1OSw3ICsxNTksNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2dDU4NmJfZHJpdmVyID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAidnQ1ODZiX3NtYnVzIiwKIAkuaWRfdGFibGUJPSB2dDU4NmJfaWRzLAogCS5wcm9iZQkJPSB2dDU4NmJfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwppbmRleCBhMjIzN2Q0Li40N2U1MmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKQEAgLTQ0MCw3ICs0NDAsNiBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHZ0NTk2X2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2dDU5Nl9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ2dDU5Nl9zbWJ1cyIsCiAJLmlkX3RhYmxlCT0gdnQ1OTZfaWRzLAogCS5wcm9iZQkJPSB2dDU5Nl9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKaW5kZXggNjUwYzNlYi4uYjY3NTc3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKQEAgLTIyNSw3ICsyMjUsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdm9vZG9vM19kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJ2b29kb28zX3NtYnVzIiwKIAkuaWRfdGFibGUJPSB2b29kb28zX2lkcywKIAkucHJvYmUJCT0gdm9vZG9vM19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKaW5kZXggOWRiYjcyZi4uZDJhMTAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvaXNwMTMwMV9vbWFwLmMKQEAgLTg3MywyNiArODczLDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3RnX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3RnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAkvLyBzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpjb25maWcgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKLQlvdGdfZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJb3RnX2RldiA9IGRldjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvdGdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb3RnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJb3RnX2RldiA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBkZXZpY2VfZHJpdmVyIG9tYXBfb3RnX2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIm9tYXBfb3RnIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9vdGdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvdGdfcHJvYmUsCi0JLnJlbW92ZQkJPSBvdGdfcmVtb3ZlLAkKKwkucmVtb3ZlCQk9IG90Z19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvbWFwX290ZyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgb3RnX2JpbmQoc3RydWN0IGlzcDEzMDEgKmlzcCkKQEAgLTkwMiw3ICs5MDMsNyBAQAogCWlmIChvdGdfZGV2KQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3RhdHVzID0gZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOworCXN0YXR1cyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9vdGdfZHJpdmVyKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtOTEzLDcgKzkxNCw3IEBACiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAKIAlpZiAoc3RhdHVzIDwgMCkKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBfb3RnX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwX290Z19kcml2ZXIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggMThlZDc3Ni4uZDRmMjExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTc4Nyw4ICs3ODcsOSBAQAogc3RhdGljIExJU1RfSEVBRChpZGVfcGNpX2RyaXZlcnMpOwogCiAvKgotICoJaWRlX3JlZ2lzdGVyX3BjaV9kcml2ZXIJCS0JYXR0YWNoIElERSBkcml2ZXIKKyAqCV9faWRlX3JlZ2lzdGVyX3BjaV9kcml2ZXIJLQlhdHRhY2ggSURFIGRyaXZlcgogICoJQGRyaXZlcjogcGNpIGRyaXZlcgorICoJQG1vZHVsZTogb3duZXIgbW9kdWxlIG9mIHRoZSBkcml2ZXIKICAqCiAgKglSZWdpc3RlcnMgYSBkcml2ZXIgd2l0aCB0aGUgSURFIGxheWVyLiBUaGUgSURFIGxheWVyIGFycmFuZ2VzIHRoYXQKICAqCWJvb3QgdGltZSBzZXR1cCBpcyBkb25lIGluIHRoZSBleHBlY3RlZCBkZXZpY2Ugb3JkZXIgYW5kIHRoZW4gCkBAIC04MDEsMTUgKzgwMiwxNiBAQAogICoJUmV0dXJucyBhcmUgdGhlIHNhbWUgYXMgZm9yIHBjaV9yZWdpc3Rlcl9kcml2ZXIKICAqLwogCi1pbnQgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcikKK2ludCBfX2lkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSkKIHsKIAlpZighcHJlX2luaXQpCi0JCXJldHVybiBwY2lfbW9kdWxlX2luaXQoZHJpdmVyKTsKKwkJcmV0dXJuIF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihkcml2ZXIsIG1vZHVsZSk7CisJZHJpdmVyLT5kcml2ZXIub3duZXIgPSBtb2R1bGU7CiAJbGlzdF9hZGRfdGFpbCgmZHJpdmVyLT5ub2RlLCAmaWRlX3BjaV9kcml2ZXJzKTsKIAlyZXR1cm4gMDsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoX19pZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcik7CiAKIC8qKgogICoJaWRlX3VucmVnaXN0ZXJfcGNpX2RyaXZlcgktCXVucmVnaXN0ZXIgYW4gSURFIGRyaXZlcgpAQCAtODk3LDYgKzg5OSw2IEBACiAJewogCQlsaXN0X2RlbChsKTsKIAkJZCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHBjaV9kcml2ZXIsIG5vZGUpOwotCQlwY2lfcmVnaXN0ZXJfZHJpdmVyKGQpOworCQlfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZCwgZC0+ZHJpdmVyLm93bmVyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwppbmRleCBhZWQ1Y2EyLi41ZWE3NDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKICAqIFNPRlRXQVJFLgogICoKLSAqICRJZDogdXNlcl9tYWQuYyAyODE0IDIwMDUtMDctMDYgMTk6MTQ6MDlaIGhhbHIgJAorICogJElkOiB1c2VyX21hZC5jIDQwMTAgMjAwNS0xMS0wOSAyMzoxMTo1Nlogcm9sYW5kICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMTAsMTMgKzExMCwxMyBAQAogfTsKIAogc3RydWN0IGliX3VtYWRfZmlsZSB7Ci0Jc3RydWN0IGliX3VtYWRfcG9ydCAqcG9ydDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICByZWN2X2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgcG9ydF9saXN0OwotCXNwaW5sb2NrX3QgICAgICAgICAgIHJlY3ZfbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICByZWN2X3dhaXQ7Ci0Jc3RydWN0IGliX21hZF9hZ2VudCAqYWdlbnRbSUJfVU1BRF9NQVhfQUdFTlRTXTsKLQlzdHJ1Y3QgaWJfbXIgICAgICAgICptcltJQl9VTUFEX01BWF9BR0VOVFNdOworCXN0cnVjdCBpYl91bWFkX3BvcnQgICAgKnBvcnQ7CisJc3RydWN0IGxpc3RfaGVhZAlyZWN2X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlwb3J0X2xpc3Q7CisJc3BpbmxvY2tfdAkJcmVjdl9sb2NrOworCXdhaXRfcXVldWVfaGVhZF90CXJlY3Zfd2FpdDsKKwlzdHJ1Y3QgaWJfbWFkX2FnZW50ICAgICphZ2VudFtJQl9VTUFEX01BWF9BR0VOVFNdOworCWludAkJCWFnZW50c19kZWFkOwogfTsKIAogc3RydWN0IGliX3VtYWRfcGFja2V0IHsKQEAgLTE0NSw2ICsxNDUsMTIgQEAKIAlrZnJlZShkZXYpOwogfQogCisvKiBjYWxsZXIgbXVzdCBob2xkIHBvcnQtPm11dGV4IGF0IGxlYXN0IGZvciByZWFkaW5nICovCitzdGF0aWMgc3RydWN0IGliX21hZF9hZ2VudCAqX19nZXRfYWdlbnQoc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZSwgaW50IGlkKQoreworCXJldHVybiBmaWxlLT5hZ2VudHNfZGVhZCA/IE5VTEwgOiBmaWxlLT5hZ2VudFtpZF07Cit9CisKIHN0YXRpYyBpbnQgcXVldWVfcGFja2V0KHN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUsCiAJCQlzdHJ1Y3QgaWJfbWFkX2FnZW50ICphZ2VudCwKIAkJCXN0cnVjdCBpYl91bWFkX3BhY2tldCAqcGFja2V0KQpAQCAtMTUyLDEwICsxNTgsMTEgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWRvd25fcmVhZCgmZmlsZS0+cG9ydC0+bXV0ZXgpOworCiAJZm9yIChwYWNrZXQtPm1hZC5oZHIuaWQgPSAwOwogCSAgICAgcGFja2V0LT5tYWQuaGRyLmlkIDwgSUJfVU1BRF9NQVhfQUdFTlRTOwogCSAgICAgcGFja2V0LT5tYWQuaGRyLmlkKyspCi0JCWlmIChhZ2VudCA9PSBmaWxlLT5hZ2VudFtwYWNrZXQtPm1hZC5oZHIuaWRdKSB7CisJCWlmIChhZ2VudCA9PSBfX2dldF9hZ2VudChmaWxlLCBwYWNrZXQtPm1hZC5oZHIuaWQpKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZmaWxlLT5yZWN2X2xvY2spOwogCQkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmZmlsZS0+cmVjdl9saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2lycSgmZmlsZS0+cmVjdl9sb2NrKTsKQEAgLTMyNyw3ICszMzQsNyBAQAogCiAJZG93bl9yZWFkKCZmaWxlLT5wb3J0LT5tdXRleCk7CiAKLQlhZ2VudCA9IGZpbGUtPmFnZW50W3BhY2tldC0+bWFkLmhkci5pZF07CisJYWdlbnQgPSBfX2dldF9hZ2VudChmaWxlLCBwYWNrZXQtPm1hZC5oZHIuaWQpOwogCWlmICghYWdlbnQpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfdXA7CkBAIC00ODEsNyArNDg4LDcgQEAKIAl9CiAKIAlmb3IgKGFnZW50X2lkID0gMDsgYWdlbnRfaWQgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsrYWdlbnRfaWQpCi0JCWlmICghZmlsZS0+YWdlbnRbYWdlbnRfaWRdKQorCQlpZiAoIV9fZ2V0X2FnZW50KGZpbGUsIGFnZW50X2lkKSkKIAkJCWdvdG8gZm91bmQ7CiAKIAlyZXQgPSAtRU5PTUVNOwpAQCAtNTA1LDI5ICs1MTIsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZmlsZS0+YWdlbnRbYWdlbnRfaWRdID0gYWdlbnQ7Ci0KLQlmaWxlLT5tclthZ2VudF9pZF0gPSBpYl9nZXRfZG1hX21yKGFnZW50LT5xcC0+cGQsIElCX0FDQ0VTU19MT0NBTF9XUklURSk7Ci0JaWYgKElTX0VSUihmaWxlLT5tclthZ2VudF9pZF0pKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KLQogCWlmIChwdXRfdXNlcihhZ2VudF9pZCwKIAkJICAgICAodTMyIF9fdXNlciAqKSAoYXJnICsgb2Zmc2V0b2Yoc3RydWN0IGliX3VzZXJfbWFkX3JlZ19yZXEsIGlkKSkpKSB7CiAJCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX21yOworCQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChhZ2VudCk7CisJCWdvdG8gb3V0OwogCX0KIAorCWZpbGUtPmFnZW50W2FnZW50X2lkXSA9IGFnZW50OwogCXJldCA9IDA7Ci0JZ290byBvdXQ7Ci0KLWVycl9tcjoKLQlpYl9kZXJlZ19tcihmaWxlLT5tclthZ2VudF9pZF0pOwotCi1lcnI6Ci0JZmlsZS0+YWdlbnRbYWdlbnRfaWRdID0gTlVMTDsKLQlpYl91bnJlZ2lzdGVyX21hZF9hZ2VudChhZ2VudCk7CiAKIG91dDoKIAl1cF93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOwpAQCAtNTM2LDI3ICs1MjksMjkgQEAKIAogc3RhdGljIGludCBpYl91bWFkX3VucmVnX2FnZW50KHN0cnVjdCBpYl91bWFkX2ZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCBpYl9tYWRfYWdlbnQgKmFnZW50ID0gTlVMTDsKIAl1MzIgaWQ7CiAJaW50IHJldCA9IDA7CiAKKwlpZiAoZ2V0X3VzZXIoaWQsICh1MzIgX191c2VyICopIGFyZykpCisJCXJldHVybiAtRUZBVUxUOworCiAJZG93bl93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOwogCi0JaWYgKGdldF91c2VyKGlkLCAodTMyIF9fdXNlciAqKSBhcmcpKSB7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChpZCA8IDAgfHwgaWQgPj0gSUJfVU1BRF9NQVhfQUdFTlRTIHx8ICFmaWxlLT5hZ2VudFtpZF0pIHsKKwlpZiAoaWQgPCAwIHx8IGlkID49IElCX1VNQURfTUFYX0FHRU5UUyB8fCAhX19nZXRfYWdlbnQoZmlsZSwgaWQpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KIAotCWliX2RlcmVnX21yKGZpbGUtPm1yW2lkXSk7Ci0JaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZmlsZS0+YWdlbnRbaWRdKTsKKwlhZ2VudCA9IGZpbGUtPmFnZW50W2lkXTsKIAlmaWxlLT5hZ2VudFtpZF0gPSBOVUxMOwogCiBvdXQ6CiAJdXBfd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKKworCWlmIChhZ2VudCkKKwkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoYWdlbnQpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjIxLDIzICs2MTYsMjkgQEAKIAlzdHJ1Y3QgaWJfdW1hZF9maWxlICpmaWxlID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpYl91bWFkX2RldmljZSAqZGV2ID0gZmlsZS0+cG9ydC0+dW1hZF9kZXY7CiAJc3RydWN0IGliX3VtYWRfcGFja2V0ICpwYWNrZXQsICp0bXA7CisJaW50IGFscmVhZHlfZGVhZDsKIAlpbnQgaTsKIAogCWRvd25fd3JpdGUoJmZpbGUtPnBvcnQtPm11dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgSUJfVU1BRF9NQVhfQUdFTlRTOyArK2kpCi0JCWlmIChmaWxlLT5hZ2VudFtpXSkgewotCQkJaWJfZGVyZWdfbXIoZmlsZS0+bXJbaV0pOwotCQkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZmlsZS0+YWdlbnRbaV0pOwotCQl9CisKKwlhbHJlYWR5X2RlYWQgPSBmaWxlLT5hZ2VudHNfZGVhZDsKKwlmaWxlLT5hZ2VudHNfZGVhZCA9IDE7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFja2V0LCB0bXAsICZmaWxlLT5yZWN2X2xpc3QsIGxpc3QpCiAJCWtmcmVlKHBhY2tldCk7CiAKIAlsaXN0X2RlbCgmZmlsZS0+cG9ydF9saXN0KTsKLQl1cF93cml0ZSgmZmlsZS0+cG9ydC0+bXV0ZXgpOworCisJZG93bmdyYWRlX3dyaXRlKCZmaWxlLT5wb3J0LT5tdXRleCk7CisKKwlpZiAoIWFscmVhZHlfZGVhZCkKKwkJZm9yIChpID0gMDsgaSA8IElCX1VNQURfTUFYX0FHRU5UUzsgKytpKQorCQkJaWYgKGZpbGUtPmFnZW50W2ldKQorCQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2ldKTsKKworCXVwX3JlYWQoJmZpbGUtPnBvcnQtPm11dGV4KTsKIAogCWtmcmVlKGZpbGUpOwotCiAJa3JlZl9wdXQoJmRldi0+cmVmLCBpYl91bWFkX3JlbGVhc2VfZGV2KTsKIAogCXJldHVybiAwOwpAQCAtODAxLDcgKzgwMiw3IEBACiAJCWdvdG8gZXJyX2NsYXNzOwogCXBvcnQtPnNtX2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwb3J0LT5zbV9kZXYtPm9wcyAgID0gJnVtYWRfc21fZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5kZXYtPmtvYmosICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKKwlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5zbV9kZXYtPmtvYmosICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKIAlpZiAoY2Rldl9hZGQocG9ydC0+c21fZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCiAJCWdvdG8gZXJyX3NtX2NkZXY7CiAKQEAgLTg2MywxNCArODY0LDM2IEBACiAKIAlwb3J0LT5pYl9kZXYgPSBOVUxMOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShmaWxlLCAmcG9ydC0+ZmlsZV9saXN0LCBwb3J0X2xpc3QpCi0JCWZvciAoaWQgPSAwOyBpZCA8IElCX1VNQURfTUFYX0FHRU5UUzsgKytpZCkgewotCQkJaWYgKCFmaWxlLT5hZ2VudFtpZF0pCi0JCQkJY29udGludWU7Ci0JCQlpYl9kZXJlZ19tcihmaWxlLT5tcltpZF0pOwotCQkJaWJfdW5yZWdpc3Rlcl9tYWRfYWdlbnQoZmlsZS0+YWdlbnRbaWRdKTsKLQkJCWZpbGUtPmFnZW50W2lkXSA9IE5VTEw7Ci0JCX0KKwkvKgorCSAqIE5vdyBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIGZpbGVzIGF0dGFjaGVkIHRvIHRoaXMgcG9ydCBhbmQKKwkgKiB1bnJlZ2lzdGVyIGFsbCBvZiB0aGVpciBNQUQgYWdlbnRzLiAgV2UgbmVlZCB0byBob2xkCisJICogcG9ydC0+bXV0ZXggd2hpbGUgZG9pbmcgdGhpcyB0byBhdm9pZCByYWNpbmcgd2l0aAorCSAqIGliX3VtYWRfY2xvc2UoKSwgYnV0IHdlIGNhbid0IGhvbGQgdGhlIG11dGV4IGZvciB3cml0aW5nCisJICogd2hpbGUgY2FsbGluZyBpYl91bnJlZ2lzdGVyX21hZF9hZ2VudCgpLCBzaW5jZSB0aGF0IG1pZ2h0CisJICogZGVhZGxvY2sgYnkgY2FsbGluZyBiYWNrIGludG8gcXVldWVfcGFja2V0KCkuICBTbyB3ZQorCSAqIGRvd25ncmFkZSBvdXIgbG9jayB0byBhIHJlYWQgbG9jaywgYW5kIHRoZW4gZHJvcCBhbmQKKwkgKiByZWFjcXVpcmUgdGhlIHdyaXRlIGxvY2sgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4KKwkgKgorCSAqIFdlIGRvIGxpc3RfZGVsX2luaXQoKSBvbiB0aGUgZmlsZSdzIGxpc3RfaGVhZCBzbyB0aGF0IHRoZQorCSAqIGxpc3RfZGVsIGluIGliX3VtYWRfY2xvc2UoKSBpcyBzdGlsbCBPSywgZXZlbiBhZnRlciB0aGUKKwkgKiBmaWxlIGlzIHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnBvcnQtPmZpbGVfbGlzdCkpIHsKKwkJZmlsZSA9IGxpc3RfZW50cnkocG9ydC0+ZmlsZV9saXN0Lm5leHQsIHN0cnVjdCBpYl91bWFkX2ZpbGUsCisJCQkJICBwb3J0X2xpc3QpOworCisJCWZpbGUtPmFnZW50c19kZWFkID0gMTsKKwkJbGlzdF9kZWxfaW5pdCgmZmlsZS0+cG9ydF9saXN0KTsKKworCQlkb3duZ3JhZGVfd3JpdGUoJnBvcnQtPm11dGV4KTsKKworCQlmb3IgKGlkID0gMDsgaWQgPCBJQl9VTUFEX01BWF9BR0VOVFM7ICsraWQpCisJCQlpZiAoZmlsZS0+YWdlbnRbaWRdKQorCQkJCWliX3VucmVnaXN0ZXJfbWFkX2FnZW50KGZpbGUtPmFnZW50W2lkXSk7CisKKwkJdXBfcmVhZCgmcG9ydC0+bXV0ZXgpOworCQlkb3duX3dyaXRlKCZwb3J0LT5tdXRleCk7CisJfQogCiAJdXBfd3JpdGUoJnBvcnQtPm11dGV4KTsKIApAQCAtOTEzLDcgKzkzNiw3IEBACiAKIGVycjoKIAl3aGlsZSAoLS1pID49IHMpCi0JCWliX3VtYWRfa2lsbF9wb3J0KCZ1bWFkX2Rldi0+cG9ydFtpXSk7CisJCWliX3VtYWRfa2lsbF9wb3J0KCZ1bWFkX2Rldi0+cG9ydFtpIC0gc10pOwogCiAJa3JlZl9wdXQoJnVtYWRfZGV2LT5yZWYsIGliX3VtYWRfcmVsZWFzZV9kZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCmluZGV4IDYzYTc0MTUuLmVkNDVkYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCQlyZXNwLT53Y1tpXS5vcGNvZGUgCSAgID0gd2NbaV0ub3Bjb2RlOwogCQlyZXNwLT53Y1tpXS52ZW5kb3JfZXJyIAkgICA9IHdjW2ldLnZlbmRvcl9lcnI7CiAJCXJlc3AtPndjW2ldLmJ5dGVfbGVuIAkgICA9IHdjW2ldLmJ5dGVfbGVuOwotCQlyZXNwLT53Y1tpXS5pbW1fZGF0YSAJICAgPSB3Y1tpXS5pbW1fZGF0YTsKKwkJcmVzcC0+d2NbaV0uaW1tX2RhdGEgCSAgID0gKF9fdTMyIF9fZm9yY2UpIHdjW2ldLmltbV9kYXRhOwogCQlyZXNwLT53Y1tpXS5xcF9udW0gCSAgID0gd2NbaV0ucXBfbnVtOwogCQlyZXNwLT53Y1tpXS5zcmNfcXAgCSAgID0gd2NbaV0uc3JjX3FwOwogCQlyZXNwLT53Y1tpXS53Y19mbGFncyAJICAgPSB3Y1tpXS53Y19mbGFnczsKQEAgLTkwOCw3ICs5MDgsMTIgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXN0cm95OwogCi0JcmVzcC5xcF9oYW5kbGUgPSB1b2JqLT51b2JqZWN0LmlkOworCXJlc3AucXBfaGFuZGxlICAgICAgID0gdW9iai0+dW9iamVjdC5pZDsKKwlyZXNwLm1heF9yZWN2X3NnZSAgICA9IGF0dHIuY2FwLm1heF9yZWN2X3NnZTsKKwlyZXNwLm1heF9zZW5kX3NnZSAgICA9IGF0dHIuY2FwLm1heF9zZW5kX3NnZTsKKwlyZXNwLm1heF9yZWN2X3dyICAgICA9IGF0dHIuY2FwLm1heF9yZWN2X3dyOworCXJlc3AubWF4X3NlbmRfd3IgICAgID0gYXR0ci5jYXAubWF4X3NlbmRfd3I7CisJcmVzcC5tYXhfaW5saW5lX2RhdGEgPSBhdHRyLmNhcC5tYXhfaW5saW5lX2RhdGE7CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKQEAgLTExMzUsNyArMTE0MCw3IEBACiAJCW5leHQtPm51bV9zZ2UgICAgPSB1c2VyX3dyLT5udW1fc2dlOwogCQluZXh0LT5vcGNvZGUgICAgID0gdXNlcl93ci0+b3Bjb2RlOwogCQluZXh0LT5zZW5kX2ZsYWdzID0gdXNlcl93ci0+c2VuZF9mbGFnczsKLQkJbmV4dC0+aW1tX2RhdGEgICA9IHVzZXJfd3ItPmltbV9kYXRhOworCQluZXh0LT5pbW1fZGF0YSAgID0gKF9fYmUzMiBfX2ZvcmNlKSB1c2VyX3dyLT5pbW1fZGF0YTsKIAogCQlpZiAocXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VEKSB7CiAJCQluZXh0LT53ci51ZC5haCA9IGlkcl9maW5kKCZpYl91dmVyYnNfYWhfaWRyLApAQCAtMTcwMSw3ICsxNzA2LDYgQEAKIAl9CiAKIAlhdHRyLm1heF93ciAgICA9IGNtZC5tYXhfd3I7Ci0JYXR0ci5tYXhfc2dlICAgPSBjbWQubWF4X3NnZTsKIAlhdHRyLnNycV9saW1pdCA9IGNtZC5zcnFfbGltaXQ7CiAKIAlyZXQgPSBpYl9tb2RpZnlfc3JxKHNycSwgJmF0dHIsIGNtZC5hdHRyX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKaW5kZXggNDE4NmNjOC4uNGMxNWUxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCkBAIC0zMjUsMTYgKzMyNSw4IEBACiBpbnQgaWJfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqY3EsCiAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgY3FlKQogewotCWludCByZXQ7Ci0KLQlpZiAoIWNxLT5kZXZpY2UtPnJlc2l6ZV9jcSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlyZXQgPSBjcS0+ZGV2aWNlLT5yZXNpemVfY3EoY3EsICZjcWUpOwotCWlmICghcmV0KQotCQljcS0+Y3FlID0gY3FlOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY3EtPmRldmljZS0+cmVzaXplX2NxID8KKwkJY3EtPmRldmljZS0+cmVzaXplX2NxKGNxLCBjcWUpIDogLUVOT1NZUzsKIH0KIEVYUE9SVF9TWU1CT0woaWJfcmVzaXplX2NxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NhdGFzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYwppbmRleCAyNWViYWI2Li5jM2JlYzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYwpAQCAtOTcsNyArOTcsNyBAQAogCQl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2F0YXNfbG9jaywgZmxhZ3MpOwotCWlmIChkZXYtPmNhdGFzX2Vyci5zdG9wKQorCWlmICghZGV2LT5jYXRhc19lcnIuc3RvcCkKIAkJbW9kX3RpbWVyKCZkZXYtPmNhdGFzX2Vyci50aW1lciwKIAkJCSAgamlmZmllcyArIE1USENBX0NBVEFTX1BPTExfSU5URVJWQUwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGFzX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYwppbmRleCA0OWYyMTFkLi45ZWQzNDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCkBAIC0xMDYwLDYgKzEwNjAsOCBAQAogCQlkZXZfbGltLT5oY2EuYXJiZWwucmVzaXplX3NycSA9IGZpZWxkICYgMTsKIAkJTVRIQ0FfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fTUFYX1NHX1JRX09GRlNFVCk7CiAJCWRldl9saW0tPm1heF9zZyA9IG1pbl90KGludCwgZmllbGQsIGRldl9saW0tPm1heF9zZyk7CisJCU1USENBX0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fTUFYX0RFU0NfU1pfUlFfT0ZGU0VUKTsKKwkJZGV2X2xpbS0+bWF4X2Rlc2Nfc3ogPSBtaW5fdChpbnQsIHNpemUsIGRldl9saW0tPm1heF9kZXNjX3N6KTsKIAkJTVRIQ0FfR0VUKHNpemUsIG91dGJveCwgUVVFUllfREVWX0xJTV9NUFRfRU5UUllfU1pfT0ZGU0VUKTsKIAkJZGV2X2xpbS0+bXB0X2VudHJ5X3N6ID0gc2l6ZTsKIAkJTVRIQ0FfR0VUKGZpZWxkLCBvdXRib3gsIFFVRVJZX0RFVl9MSU1fUEJMX1NaX09GRlNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCmluZGV4IGY5OGUyMzUuLjRhOGFkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jcS5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIHsKIAlzdHJ1Y3QgbXRoY2FfY3EgKmNxOwogCXN0cnVjdCBtdGhjYV9jcWUgKmNxZTsKLQlpbnQgcHJvZF9pbmRleDsKKwl1MzIgcHJvZF9pbmRleDsKIAlpbnQgbmZyZWVkID0gMDsKIAogCXNwaW5fbG9ja19pcnEoJmRldi0+Y3FfdGFibGUubG9jayk7CkBAIC0yOTMsMTkgKzI5MywxNSBAQAogCSAqIE5vdyBzd2VlcCBiYWNrd2FyZHMgdGhyb3VnaCB0aGUgQ1EsIHJlbW92aW5nIENRIGVudHJpZXMKIAkgKiB0aGF0IG1hdGNoIG91ciBRUCBieSBjb3B5aW5nIG9sZGVyIGVudHJpZXMgb24gdG9wIG9mIHRoZW0uCiAJICovCi0Jd2hpbGUgKHByb2RfaW5kZXggPiBjcS0+Y29uc19pbmRleCkgewotCQljcWUgPSBnZXRfY3FlKGNxLCAocHJvZF9pbmRleCAtIDEpICYgY3EtPmliY3EuY3FlKTsKKwl3aGlsZSAoKGludCkgLS1wcm9kX2luZGV4IC0gKGludCkgY3EtPmNvbnNfaW5kZXggPj0gMCkgeworCQljcWUgPSBnZXRfY3FlKGNxLCBwcm9kX2luZGV4ICYgY3EtPmliY3EuY3FlKTsKIAkJaWYgKGNxZS0+bXlfcXBuID09IGNwdV90b19iZTMyKHFwbikpIHsKIAkJCWlmIChzcnEpCiAJCQkJbXRoY2FfZnJlZV9zcnFfd3FlKHNycSwgYmUzMl90b19jcHUoY3FlLT53cWUpKTsKIAkJCSsrbmZyZWVkOwotCQl9Ci0JCWVsc2UgaWYgKG5mcmVlZCkKLQkJCW1lbWNweShnZXRfY3FlKGNxLCAocHJvZF9pbmRleCAtIDEgKyBuZnJlZWQpICYKLQkJCQkgICAgICAgY3EtPmliY3EuY3FlKSwKLQkJCSAgICAgICBjcWUsCi0JCQkgICAgICAgTVRIQ0FfQ1FfRU5UUllfU0laRSk7Ci0JCS0tcHJvZF9pbmRleDsKKwkJfSBlbHNlIGlmIChuZnJlZWQpCisJCQltZW1jcHkoZ2V0X2NxZShjcSwgKHByb2RfaW5kZXggKyBuZnJlZWQpICYgY3EtPmliY3EuY3FlKSwKKwkJCSAgICAgICBjcWUsIE1USENBX0NRX0VOVFJZX1NJWkUpOwogCX0KIAogCWlmIChuZnJlZWQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaAppbmRleCBlN2U1ZDNiLi40OTdmZjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCkBAIC0xMzEsNiArMTMxLDcgQEAKIAlpbnQgICAgICBtYXhfc2c7CiAJaW50ICAgICAgbnVtX3FwczsKIAlpbnQgICAgICBtYXhfd3FlczsKKwlpbnQJIG1heF9kZXNjX3N6OwogCWludAkgbWF4X3FwX2luaXRfcmRtYTsKIAlpbnQgICAgICByZXNlcnZlZF9xcHM7CiAJaW50ICAgICAgbnVtX3NycXM7CkBAIC0xNTQsNiArMTU1LDcgQEAKIAlpbnQgICAgICByZXNlcnZlZF9tY2dzOwogCWludCAgICAgIG51bV9wZHM7CiAJaW50ICAgICAgcmVzZXJ2ZWRfcGRzOworCXUzMiAgICAgIHBhZ2Vfc2l6ZV9jYXA7CiAJdTMyICAgICAgZmxhZ3M7CiAJdTggICAgICAgcG9ydF93aWR0aF9jYXA7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKaW5kZXggNDVjNjMyOC4uNmY5NGIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCkBAIC0xNjgsNiArMTY4LDcgQEAKIAltZGV2LT5saW1pdHMubWF4X3NycV93cWVzICAgICAgID0gZGV2X2xpbS0+bWF4X3NycV9zejsKIAltZGV2LT5saW1pdHMucmVzZXJ2ZWRfc3JxcyAgICAgID0gZGV2X2xpbS0+cmVzZXJ2ZWRfc3JxczsKIAltZGV2LT5saW1pdHMucmVzZXJ2ZWRfZWVjcyAgICAgID0gZGV2X2xpbS0+cmVzZXJ2ZWRfZWVjczsKKwltZGV2LT5saW1pdHMubWF4X2Rlc2Nfc3ogICAgICAgID0gZGV2X2xpbS0+bWF4X2Rlc2Nfc3o7CiAJLyoKIAkgKiBTdWJ0cmFjdCAxIGZyb20gdGhlIGxpbWl0IGJlY2F1c2Ugd2UgbmVlZCB0byBhbGxvY2F0ZSBhCiAJICogc3BhcmUgQ1FFIHNvIHRoZSBIQ0EgSFcgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhbgpAQCAtMTgxLDYgKzE4Miw3IEBACiAJbWRldi0+bGltaXRzLnJlc2VydmVkX3VhcnMgICAgICA9IGRldl9saW0tPnJlc2VydmVkX3VhcnM7CiAJbWRldi0+bGltaXRzLnJlc2VydmVkX3BkcyAgICAgICA9IGRldl9saW0tPnJlc2VydmVkX3BkczsKIAltZGV2LT5saW1pdHMucG9ydF93aWR0aF9jYXAgICAgID0gZGV2X2xpbS0+bWF4X3BvcnRfd2lkdGg7CisJbWRldi0+bGltaXRzLnBhZ2Vfc2l6ZV9jYXAgICAgICA9IH4odTMyKSAoZGV2X2xpbS0+bWluX3BhZ2Vfc3ogLSAxKTsKIAltZGV2LT5saW1pdHMuZmxhZ3MgICAgICAgICAgICAgID0gZGV2X2xpbS0+ZmxhZ3M7CiAKIAkvKiBJQl9ERVZJQ0VfUkVTSVpFX01BWF9XUiBub3Qgc3VwcG9ydGVkIGJ5IGRyaXZlci4KQEAgLTExOTYsNyArMTE5OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBtdGhjYV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gRFJWX05BTUUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZQk9IG10aGNhX3BjaV90YWJsZSwKIAkucHJvYmUJCT0gbXRoY2FfaW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtdGhjYV9yZW1vdmVfb25lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCA2YjAxNjY2Li40Y2M3ZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtOTAsNiArOTAsNyBAQAogCW1lbWNweSgmcHJvcHMtPm5vZGVfZ3VpZCwgICAgICBvdXRfbWFkLT5kYXRhICsgMTIsIDgpOwogCiAJcHJvcHMtPm1heF9tcl9zaXplICAgICAgICAgPSB+MHVsbDsKKwlwcm9wcy0+cGFnZV9zaXplX2NhcCAgICAgICA9IG1kZXYtPmxpbWl0cy5wYWdlX3NpemVfY2FwOwogCXByb3BzLT5tYXhfcXAgICAgICAgICAgICAgID0gbWRldi0+bGltaXRzLm51bV9xcHMgLSBtZGV2LT5saW1pdHMucmVzZXJ2ZWRfcXBzOwogCXByb3BzLT5tYXhfcXBfd3IgICAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF93cWVzOwogCXByb3BzLT5tYXhfc2dlICAgICAgICAgICAgID0gbWRldi0+bGltaXRzLm1heF9zZzsKQEAgLTYxNSwxMSArNjE2LDExIEBACiAJCXJldHVybiBFUlJfUFRSKGVycik7CiAJfQogCi0JaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKIAlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciAgICAgPSBxcC0+c3EubWF4OwogCWluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyICAgICA9IHFwLT5ycS5tYXg7CiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICAgID0gcXAtPnNxLm1heF9nczsKIAlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2UgICAgPSBxcC0+cnEubWF4X2dzOworCWluaXRfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IHFwLT5tYXhfaW5saW5lX2RhdGE7CiAKIAlyZXR1cm4gJnFwLT5pYnFwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAppbmRleCBiY2Q0YjAxLi4xZTczOTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaApAQCAtMjUxLDYgKzI1MSw3IEBACiAJc3RydWN0IG10aGNhX3dxICAgICAgICBzcTsKIAllbnVtIGliX3NpZ190eXBlICAgICAgIHNxX3BvbGljeTsKIAlpbnQgICAgICAgICAgICAgICAgICAgIHNlbmRfd3FlX29mZnNldDsKKwlpbnQgICAgICAgICAgICAgICAgICAgIG1heF9pbmxpbmVfZGF0YTsKIAogCXU2NCAgICAgICAgICAgICAgICAgICAqd3JpZDsKIAl1bmlvbiBtdGhjYV9idWYJICAgICAgIHF1ZXVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYwppbmRleCA4ODUyZWE0Li43NjBjNDE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTg4NSw2ICs4ODUsNDggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBtdGhjYV9hZGp1c3RfcXBfY2FwcyhzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCisJCQkJIHN0cnVjdCBtdGhjYV9wZCAqcGQsCisJCQkJIHN0cnVjdCBtdGhjYV9xcCAqcXApCit7CisJaW50IG1heF9kYXRhX3NpemU7CisKKwkvKgorCSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBzaXplIG9mIFdRRSBzL2cgc2VnbWVudHMsIGV4Y2x1ZGluZworCSAqIHRoZSBuZXh0IHNlZ21lbnQgYW5kIG90aGVyIG5vbi1kYXRhIHNlZ21lbnRzLgorCSAqLworCW1heF9kYXRhX3NpemUgPSBtaW4oZGV2LT5saW1pdHMubWF4X2Rlc2Nfc3osIDEgPDwgcXAtPnNxLndxZV9zaGlmdCkgLQorCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyk7CisKKwlzd2l0Y2ggKHFwLT50cmFuc3BvcnQpIHsKKwljYXNlIE1MWDoKKwkJbWF4X2RhdGFfc2l6ZSAtPSAyICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOworCQlicmVhazsKKworCWNhc2UgVUQ6CisJCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCisJCQltYXhfZGF0YV9zaXplIC09IHNpemVvZiAoc3RydWN0IG10aGNhX2FyYmVsX3VkX3NlZyk7CisJCWVsc2UKKwkJCW1heF9kYXRhX3NpemUgLT0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfdGF2b3JfdWRfc2VnKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQltYXhfZGF0YV9zaXplIC09IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZyk7CisJCWJyZWFrOworCX0KKworCS8qIFdlIGRvbid0IHN1cHBvcnQgaW5saW5lIGRhdGEgZm9yIGtlcm5lbCBRUHMgKHlldCkuICovCisJaWYgKCFwZC0+aWJwZC51b2JqZWN0KQorCQlxcC0+bWF4X2lubGluZV9kYXRhID0gMDsKKyAgICAgICAgZWxzZQorCQlxcC0+bWF4X2lubGluZV9kYXRhID0gbWF4X2RhdGFfc2l6ZSAtIE1USENBX0lOTElORV9IRUFERVJfU0laRTsKKworCXFwLT5zcS5tYXhfZ3MgPSBtYXhfZGF0YV9zaXplIC8gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOworCXFwLT5ycS5tYXhfZ3MgPSAobWluKGRldi0+bGltaXRzLm1heF9kZXNjX3N6LCAxIDw8IHFwLT5ycS53cWVfc2hpZnQpIC0KKwkJCXNpemVvZiAoc3RydWN0IG10aGNhX25leHRfc2VnKSkgLworCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOworfQorCiAvKgogICogQWxsb2NhdGUgYW5kIHJlZ2lzdGVyIGJ1ZmZlciBmb3IgV1FFcy4gIHFwLT5ycS5tYXgsIHNxLm1heCwKICAqIHJxLm1heF9ncyBhbmQgc3EubWF4X2dzIG11c3QgYWxsIGJlIGFzc2lnbmVkLgpAQCAtOTAyLDI3ICs5NDQsNTMgQEAKIAlzaXplID0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpICsKIAkJcXAtPnJxLm1heF9ncyAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKIAorCWlmIChzaXplID4gZGV2LT5saW1pdHMubWF4X2Rlc2Nfc3opCisJCXJldHVybiAtRUlOVkFMOworCiAJZm9yIChxcC0+cnEud3FlX3NoaWZ0ID0gNjsgMSA8PCBxcC0+cnEud3FlX3NoaWZ0IDwgc2l6ZTsKIAkgICAgIHFwLT5ycS53cWVfc2hpZnQrKykKIAkJOyAvKiBub3RoaW5nICovCiAKLQlzaXplID0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfbmV4dF9zZWcpICsKLQkJcXAtPnNxLm1heF9ncyAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKKwlzaXplID0gcXAtPnNxLm1heF9ncyAqIHNpemVvZiAoc3RydWN0IG10aGNhX2RhdGFfc2VnKTsKIAlzd2l0Y2ggKHFwLT50cmFuc3BvcnQpIHsKIAljYXNlIE1MWDoKIAkJc2l6ZSArPSAyICogc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfZGF0YV9zZWcpOwogCQlicmVhazsKKwogCWNhc2UgVUQ6Ci0JCWlmIChtdGhjYV9pc19tZW1mcmVlKGRldikpCi0JCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2FyYmVsX3VkX3NlZyk7Ci0JCWVsc2UKLQkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfdGF2b3JfdWRfc2VnKTsKKwkJc2l6ZSArPSBtdGhjYV9pc19tZW1mcmVlKGRldikgPworCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXJiZWxfdWRfc2VnKSA6CisJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV90YXZvcl91ZF9zZWcpOwogCQlicmVhazsKKworCWNhc2UgVUM6CisJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKTsKKwkJYnJlYWs7CisKKwljYXNlIFJDOgorCQlzaXplICs9IHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZyk7CisJCS8qCisJCSAqIEFuIGF0b21pYyBvcCB3aWxsIHJlcXVpcmUgYW4gYXRvbWljIHNlZ21lbnQsIGEKKwkJICogcmVtb3RlIGFkZHJlc3Mgc2VnbWVudCBhbmQgb25lIHNjYXR0ZXIgZW50cnkuCisJCSAqLworCQlzaXplID0gbWF4X3QoaW50LCBzaXplLAorCQkJICAgICBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKSArCisJCQkgICAgIHNpemVvZiAoc3RydWN0IG10aGNhX3JhZGRyX3NlZykgKworCQkJICAgICBzaXplb2YgKHN0cnVjdCBtdGhjYV9kYXRhX3NlZykpOworCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCS8qIGJpbmQgc2VnIGlzIGFzIGJpZyBhcyBhdG9taWMgKyByYWRkciBzZWdzICovCi0JCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYmluZF9zZWcpOworCQlicmVhazsKIAl9CiAKKwkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgYSBiaW5kIHJlcXVlc3QgKi8KKwlzaXplID0gbWF4X3QoaW50LCBzaXplLCBzaXplb2YgKHN0cnVjdCBtdGhjYV9iaW5kX3NlZykpOworCisJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9uZXh0X3NlZyk7CisKKwlpZiAoc2l6ZSA+IGRldi0+bGltaXRzLm1heF9kZXNjX3N6KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWZvciAocXAtPnNxLndxZV9zaGlmdCA9IDY7IDEgPDwgcXAtPnNxLndxZV9zaGlmdCA8IHNpemU7CiAJICAgICBxcC0+c3Eud3FlX3NoaWZ0KyspCiAJCTsgLyogbm90aGluZyAqLwpAQCAtMTA2Niw2ICsxMTM0LDggQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwltdGhjYV9hZGp1c3RfcXBfY2FwcyhkZXYsIHBkLCBxcCk7CisKIAkvKgogCSAqIElmIHRoaXMgaXMgYSB1c2Vyc3BhY2UgUVAsIHdlJ3JlIGRvbmUgbm93LiAgVGhlIGRvb3JiZWxscwogCSAqIHdpbGwgYmUgYWxsb2NhdGVkIGFuZCBidWZmZXJzIHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW4KQEAgLTE0ODYsOCArMTU1Niw4IEBACiAJCQkJfQogCiAJCQkJd3FlICs9IHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpOwotCQkJCXNpemUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSAvIDE2ICsKLQkJCQkJc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZyk7CisJCQkJc2l6ZSArPSAoc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfcmFkZHJfc2VnKSArCisJCQkJCSBzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKSkgLyAxNjsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgpAQCAtMTYzNyw2ICsxNzA3LDcgQEAKIHsKIAlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CiAJc3RydWN0IG10aGNhX3FwICpxcCA9IHRvX21xcChpYnFwKTsKKwlfX2JlMzIgZG9vcmJlbGxbMl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIAlpbnQgbnJlcTsKQEAgLTE2NTQsNiArMTcyNSwyMiBAQAogCWluZCA9IHFwLT5ycS5uZXh0X2luZDsKIAogCWZvciAobnJlcSA9IDA7IHdyOyArK25yZXEsIHdyID0gd3ItPm5leHQpIHsKKwkJaWYgKHVubGlrZWx5KG5yZXEgPT0gTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIpKSB7CisJCQlucmVxID0gMDsKKworCQkJZG9vcmJlbGxbMF0gPSBjcHVfdG9fYmUzMigocXAtPnJxLm5leHRfaW5kIDw8IHFwLT5ycS53cWVfc2hpZnQpIHwgc2l6ZTApOworCQkJZG9vcmJlbGxbMV0gPSBjcHVfdG9fYmUzMihxcC0+cXBuIDw8IDgpOworCisJCQl3bWIoKTsKKworCQkJbXRoY2Ffd3JpdGU2NChkb29yYmVsbCwKKwkJCQkgICAgICBkZXYtPmthciArIE1USENBX1JFQ0VJVkVfRE9PUkJFTEwsCisJCQkJICAgICAgTVRIQ0FfR0VUX0RPT1JCRUxMX0xPQ0soJmRldi0+ZG9vcmJlbGxfbG9jaykpOworCisJCQlxcC0+cnEuaGVhZCArPSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQjsKKwkJCXNpemUwID0gMDsKKwkJfQorCiAJCWlmIChtdGhjYV93cV9vdmVyZmxvdygmcXAtPnJxLCBucmVxLCBxcC0+aWJxcC5yZWN2X2NxKSkgewogCQkJbXRoY2FfZXJyKGRldiwgIlJRICUwNnggZnVsbCAoJXUgaGVhZCwgJXUgdGFpbCwiCiAJCQkJCSIgJWQgbWF4LCAlZCBucmVxKVxuIiwgcXAtPnFwbiwKQEAgLTE3MTEsOCArMTc5OCw2IEBACiAKIG91dDoKIAlpZiAobGlrZWx5KG5yZXEpKSB7Ci0JCV9fYmUzMiBkb29yYmVsbFsyXTsKLQogCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKChxcC0+cnEubmV4dF9pbmQgPDwgcXAtPnJxLndxZV9zaGlmdCkgfCBzaXplMCk7CiAJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoKHFwLT5xcG4gPDwgOCkgfCBucmVxKTsKIApAQCAtMTgwNiw4ICsxODkxLDggQEAKIAkJCQl9CiAKIAkJCQl3cWUgKz0gc2l6ZW9mIChzdHJ1Y3QgbXRoY2FfYXRvbWljX3NlZyk7Ci0JCQkJc2l6ZSArPSBzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpIC8gMTYgKwotCQkJCQlzaXplb2YgKHN0cnVjdCBtdGhjYV9hdG9taWNfc2VnKTsKKwkJCQlzaXplICs9IChzaXplb2YgKHN0cnVjdCBtdGhjYV9yYWRkcl9zZWcpICsKKwkJCQkJIHNpemVvZiAoc3RydWN0IG10aGNhX2F0b21pY19zZWcpKSAvIDE2OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCAyNmQ1MTYxLi5mN2QyMzQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC00MTcsNiArNDE3LDcgQEAKIHsKIAlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYgPSB0b19tZGV2KGlic3JxLT5kZXZpY2UpOwogCXN0cnVjdCBtdGhjYV9zcnEgKnNycSA9IHRvX21zcnEoaWJzcnEpOworCV9fYmUzMiBkb29yYmVsbFsyXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAwOwogCWludCBmaXJzdF9pbmQ7CkBAIC00MzIsNiArNDMzLDI1IEBACiAJZmlyc3RfaW5kID0gc3JxLT5maXJzdF9mcmVlOwogCiAJZm9yIChucmVxID0gMDsgd3I7ICsrbnJlcSwgd3IgPSB3ci0+bmV4dCkgeworCQlpZiAodW5saWtlbHkobnJlcSA9PSBNVEhDQV9UQVZPUl9NQVhfV1FFU19QRVJfUkVDVl9EQikpIHsKKwkJCW5yZXEgPSAwOworCisJCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKGZpcnN0X2luZCA8PCBzcnEtPndxZV9zaGlmdCk7CisJCQlkb29yYmVsbFsxXSA9IGNwdV90b19iZTMyKHNycS0+c3JxbiA8PCA4KTsKKworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB0aGF0IGRlc2NyaXB0b3JzIGFyZSB3cml0dGVuCisJCQkgKiBiZWZvcmUgZG9vcmJlbGwgaXMgcnVuZy4KKwkJCSAqLworCQkJd21iKCk7CisKKwkJCW10aGNhX3dyaXRlNjQoZG9vcmJlbGwsCisJCQkJICAgICAgZGV2LT5rYXIgKyBNVEhDQV9SRUNFSVZFX0RPT1JCRUxMLAorCQkJCSAgICAgIE1USENBX0dFVF9ET09SQkVMTF9MT0NLKCZkZXYtPmRvb3JiZWxsX2xvY2spKTsKKworCQkJZmlyc3RfaW5kID0gc3JxLT5maXJzdF9mcmVlOworCQl9CisKIAkJaW5kID0gc3JxLT5maXJzdF9mcmVlOwogCiAJCWlmIChpbmQgPCAwKSB7CkBAIC00OTQsOCArNTE0LDYgQEAKIAl9CiAKIAlpZiAobGlrZWx5KG5yZXEpKSB7Ci0JCV9fYmUzMiBkb29yYmVsbFsyXTsKLQogCQlkb29yYmVsbFswXSA9IGNwdV90b19iZTMyKGZpcnN0X2luZCA8PCBzcnEtPndxZV9zaGlmdCk7CiAJCWRvb3JiZWxsWzFdID0gY3B1X3RvX2JlMzIoKHNycS0+c3JxbiA8PCA4KSB8IG5yZXEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffd3FlLmgKaW5kZXggMWY0YzBmZi4uNzNmMWMwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3dxZS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV93cWUuaApAQCAtNDksNyArNDksOCBAQAogfTsKIAogZW51bSB7Ci0JTVRIQ0FfSU5WQUxfTEtFWSA9IDB4MTAwCisJTVRIQ0FfSU5WQUxfTEtFWQkJCT0gMHgxMDAsCisJTVRIQ0FfVEFWT1JfTUFYX1dRRVNfUEVSX1JFQ1ZfREIJPSAyNTYKIH07CiAKIHN0cnVjdCBtdGhjYV9uZXh0X3NlZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggMDA5NWFjYy4uOTkyM2ExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtMTc5LDYgKzE3OSw3IEBACiAjaWZkZWYgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUcKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZzX2xpc3Q7CiAJc3RydWN0IGRlbnRyeSAqbWNnX2RlbnRyeTsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXRoX2RlbnRyeTsKICNlbmRpZgogfTsKIApAQCAtMjcwLDcgKzI3MSw2IEBACiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKmlwb2liX21jYXN0X2l0ZXJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgaXBvaWJfbWNhc3RfaXRlcl9mcmVlKHN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyKTsKIGludCBpcG9pYl9tY2FzdF9pdGVyX25leHQoc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIpOwogdm9pZCBpcG9pYl9tY2FzdF9pdGVyX3JlYWQoc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIsCiAJCQkJICB1bmlvbiBpYl9naWQgKmdpZCwKQEAgLTI3OCw2ICsyNzgsMTEgQEAKIAkJCQkgIHVuc2lnbmVkIGludCAqcXVldWVsZW4sCiAJCQkJICB1bnNpZ25lZCBpbnQgKmNvbXBsZXRlLAogCQkJCSAgdW5zaWduZWQgaW50ICpzZW5kX29ubHkpOworCitzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppcG9pYl9wYXRoX2l0ZXJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBpcG9pYl9wYXRoX2l0ZXJfbmV4dChzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyKTsKK3ZvaWQgaXBvaWJfcGF0aF9pdGVyX3JlYWQoc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciwKKwkJCSAgc3RydWN0IGlwb2liX3BhdGggKnBhdGgpOwogI2VuZGlmCiAKIGludCBpcG9pYl9tY2FzdF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1saWQsCkBAIC0yOTksMTMgKzMwNCwxMyBAQAogaW50IGlwb2liX3BrZXlfZGV2X2RlbGF5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwotaW50IGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgaXBvaWJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKTsKIHZvaWQgaXBvaWJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGlwb2liX2NyZWF0ZV9kZWJ1Z19maWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG9pYl9jcmVhdGVfZGVidWdfZmlsZXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsgfQogc3RhdGljIGlubGluZSBpbnQgaXBvaWJfcmVnaXN0ZXJfZGVidWdmcyh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaXBvaWJfdW5yZWdpc3Rlcl9kZWJ1Z2ZzKHZvaWQpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKaW5kZXggMzhiMTUwZi4uNjg1MjU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYwpAQCAtNDMsNiArNDMsMTggQEAKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmlwb2liX3Jvb3Q7CiAKK3N0YXRpYyB2b2lkIGZvcm1hdF9naWQodW5pb24gaWJfZ2lkICpnaWQsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgaSwgbjsKKworCWZvciAobiA9IDAsIGkgPSAwOyBpIDwgODsgKytpKSB7CisJCW4gKz0gc3ByaW50ZihidWYgKyBuLCAiJXgiLAorCQkJICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSBnaWQtPnJhdylbaV0pKTsKKwkJaWYgKGkgPCA3KQorCQkJYnVmW24rK10gPSAnOic7CisJfQorfQorCiBzdGF0aWMgdm9pZCAqaXBvaWJfbWNnX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyOwpAQCAtNTQsNyArNjYsNyBAQAogCiAJd2hpbGUgKG4tLSkgewogCQlpZiAoaXBvaWJfbWNhc3RfaXRlcl9uZXh0KGl0ZXIpKSB7Ci0JCQlpcG9pYl9tY2FzdF9pdGVyX2ZyZWUoaXRlcik7CisJCQlrZnJlZShpdGVyKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJfQpAQCAtNzAsNyArODIsNyBAQAogCSgqcG9zKSsrOwogCiAJaWYgKGlwb2liX21jYXN0X2l0ZXJfbmV4dChpdGVyKSkgewotCQlpcG9pYl9tY2FzdF9pdGVyX2ZyZWUoaXRlcik7CisJCWtmcmVlKGl0ZXIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTg3LDMyICs5OSwzMiBAQAogCXN0cnVjdCBpcG9pYl9tY2FzdF9pdGVyICppdGVyID0gaXRlcl9wdHI7CiAJY2hhciBnaWRfYnVmW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmIl07CiAJdW5pb24gaWJfZ2lkIG1naWQ7Ci0JaW50IGksIG47CiAJdW5zaWduZWQgbG9uZyBjcmVhdGVkOwogCXVuc2lnbmVkIGludCBxdWV1ZWxlbiwgY29tcGxldGUsIHNlbmRfb25seTsKIAotCWlmIChpdGVyKSB7Ci0JCWlwb2liX21jYXN0X2l0ZXJfcmVhZChpdGVyLCAmbWdpZCwgJmNyZWF0ZWQsICZxdWV1ZWxlbiwKLQkJCQkgICAgICAmY29tcGxldGUsICZzZW5kX29ubHkpOworCWlmICghaXRlcikKKwkJcmV0dXJuIDA7CiAKLQkJZm9yIChuID0gMCwgaSA9IDA7IGkgPCBzaXplb2YgbWdpZCAvIDI7ICsraSkgewotCQkJbiArPSBzcHJpbnRmKGdpZF9idWYgKyBuLCAiJXgiLAotCQkJCSAgICAgYmUxNl90b19jcHUoKChfX2JlMTYgKikgbWdpZC5yYXcpW2ldKSk7Ci0JCQlpZiAoaSA8IHNpemVvZiBtZ2lkIC8gMiAtIDEpCi0JCQkJZ2lkX2J1ZltuKytdID0gJzonOwotCQl9Ci0JfQorCWlwb2liX21jYXN0X2l0ZXJfcmVhZChpdGVyLCAmbWdpZCwgJmNyZWF0ZWQsICZxdWV1ZWxlbiwKKwkJCSAgICAgICZjb21wbGV0ZSwgJnNlbmRfb25seSk7CiAKLQlzZXFfcHJpbnRmKGZpbGUsICJHSUQ6ICUqcyIsIC0oMSArIChpbnQpIHNpemVvZiBnaWRfYnVmKSwgZ2lkX2J1Zik7CisJZm9ybWF0X2dpZCgmbWdpZCwgZ2lkX2J1Zik7CiAKIAlzZXFfcHJpbnRmKGZpbGUsCi0JCSAgICIgY3JlYXRlZDogJTEwbGQgcXVldWVsZW46ICU0ZCBjb21wbGV0ZTogJWQgc2VuZF9vbmx5OiAlZFxuIiwKLQkJICAgY3JlYXRlZCwgcXVldWVsZW4sIGNvbXBsZXRlLCBzZW5kX29ubHkpOworCQkgICAiR0lEOiAlc1xuIgorCQkgICAiICBjcmVhdGVkOiAlMTBsZFxuIgorCQkgICAiICBxdWV1ZWxlbjogJTlkXG4iCisJCSAgICIgIGNvbXBsZXRlOiAlOXNcbiIKKwkJICAgIiAgc2VuZF9vbmx5OiAlOHNcbiIKKwkJICAgIlxuIiwKKwkJICAgZ2lkX2J1ZiwgY3JlYXRlZCwgcXVldWVsZW4sCisJCSAgIGNvbXBsZXRlID8gInllcyIgOiAibm8iLAorCQkgICBzZW5kX29ubHkgPyAieWVzIiA6ICJubyIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXBvaWJfc2VxX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXBvaWJfbWNnX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gaXBvaWJfbWNnX3NlcV9zdGFydCwKIAkubmV4dCAgPSBpcG9pYl9tY2dfc2VxX25leHQsCiAJLnN0b3AgID0gaXBvaWJfbWNnX3NlcV9zdG9wLApAQCAtMTI0LDcgKzEzNiw3IEBACiAJc3RydWN0IHNlcV9maWxlICpzZXE7CiAJaW50IHJldDsKIAotCXJldCA9IHNlcV9vcGVuKGZpbGUsICZpcG9pYl9zZXFfb3BzKTsKKwlyZXQgPSBzZXFfb3BlbihmaWxlLCAmaXBvaWJfbWNnX3NlcV9vcHMpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTEzNCw3ICsxNDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG9pYl9mb3BzID0geworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBvaWJfbWNnX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IGlwb2liX21jZ19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCkBAIC0xNDIsMjUgKzE1NCwxMzggQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCiB9OwogCi1pbnQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkICppcG9pYl9wYXRoX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JY2hhciBuYW1lW0lGTkFNU0laICsgc2l6ZW9mICJfbWNnIl07CisJc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlcjsKKwlsb2ZmX3QgbiA9ICpwb3M7CiAKLQlzbnByaW50ZihuYW1lLCBzaXplb2YgbmFtZSwgIiVzX21jZyIsIGRldi0+bmFtZSk7CisJaXRlciA9IGlwb2liX3BhdGhfaXRlcl9pbml0KGZpbGUtPnByaXZhdGUpOworCWlmICghaXRlcikKKwkJcmV0dXJuIE5VTEw7CiAKLQlwcml2LT5tY2dfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCBTX0lGUkVHIHwgU19JUlVHTywKLQkJCQkJICAgICAgIGlwb2liX3Jvb3QsIGRldiwgJmlwb2liX2ZvcHMpOworCXdoaWxlIChuLS0pIHsKKwkJaWYgKGlwb2liX3BhdGhfaXRlcl9uZXh0KGl0ZXIpKSB7CisJCQlrZnJlZShpdGVyKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQogCi0JcmV0dXJuIHByaXYtPm1jZ19kZW50cnkgPyAwIDogLUVOT01FTTsKKwlyZXR1cm4gaXRlcjsKIH0KIAotdm9pZCBpcG9pYl9kZWxldGVfZGVidWdfZmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgKmlwb2liX3BhdGhfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyX3B0ciwKKwkJCQkgICBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyID0gaXRlcl9wdHI7CisKKwkoKnBvcykrKzsKKworCWlmIChpcG9pYl9wYXRoX2l0ZXJfbmV4dChpdGVyKSkgeworCQlrZnJlZShpdGVyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIGl0ZXI7Cit9CisKK3N0YXRpYyB2b2lkIGlwb2liX3BhdGhfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICppdGVyX3B0cikKK3sKKwkvKiBub3RoaW5nIGZvciBub3cgKi8KK30KKworc3RhdGljIGludCBpcG9pYl9wYXRoX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcl9wdHIpCit7CisJc3RydWN0IGlwb2liX3BhdGhfaXRlciAqaXRlciA9IGl0ZXJfcHRyOworCWNoYXIgZ2lkX2J1ZltzaXplb2YgImZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiJdOworCXN0cnVjdCBpcG9pYl9wYXRoIHBhdGg7CisJaW50IHJhdGU7CisKKwlpZiAoIWl0ZXIpCisJCXJldHVybiAwOworCisJaXBvaWJfcGF0aF9pdGVyX3JlYWQoaXRlciwgJnBhdGgpOworCisJZm9ybWF0X2dpZCgmcGF0aC5wYXRocmVjLmRnaWQsIGdpZF9idWYpOworCisJc2VxX3ByaW50ZihmaWxlLAorCQkgICAiR0lEOiAlc1xuIgorCQkgICAiICBjb21wbGV0ZTogJTZzXG4iLAorCQkgICBnaWRfYnVmLCBwYXRoLnBhdGhyZWMuZGxpZCA/ICJ5ZXMiIDogIm5vIik7CisKKwlpZiAocGF0aC5wYXRocmVjLmRsaWQpIHsKKwkJcmF0ZSA9IGliX3NhX3JhdGVfZW51bV90b19pbnQocGF0aC5wYXRocmVjLnJhdGUpICogMjU7CisKKwkJc2VxX3ByaW50ZihmaWxlLAorCQkJICAgIiAgRExJRDogICAgIDB4JTA0eFxuIgorCQkJICAgIiAgU0w6ICUxMmRcbiIKKwkJCSAgICIgIHJhdGU6ICUqZCVzIEdiL3NlY1xuIiwKKwkJCSAgIGJlMTZfdG9fY3B1KHBhdGgucGF0aHJlYy5kbGlkKSwKKwkJCSAgIHBhdGgucGF0aHJlYy5zbCwKKwkJCSAgIDEwIC0gKChyYXRlICUgMTApID8gMiA6IDApLAorCQkJICAgcmF0ZSAvIDEwLCByYXRlICUgMTAgPyAiLjUiIDogIiIpOworCX0KKworCXNlcV9wdXRjKGZpbGUsICdcbicpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXBvaWJfcGF0aF9zZXFfb3BzID0geworCS5zdGFydCA9IGlwb2liX3BhdGhfc2VxX3N0YXJ0LAorCS5uZXh0ICA9IGlwb2liX3BhdGhfc2VxX25leHQsCisJLnN0b3AgID0gaXBvaWJfcGF0aF9zZXFfc3RvcCwKKwkuc2hvdyAgPSBpcG9pYl9wYXRoX3NlcV9zaG93LAorfTsKKworc3RhdGljIGludCBpcG9pYl9wYXRoX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisJaW50IHJldDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZpcG9pYl9wYXRoX3NlcV9vcHMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc2VxLT5wcml2YXRlID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG9pYl9wYXRoX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IGlwb2liX3BhdGhfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UKK307CisKK3ZvaWQgaXBvaWJfY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljaGFyIG5hbWVbSUZOQU1TSVogKyBzaXplb2YgIl9wYXRoIl07CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YgbmFtZSwgIiVzX21jZyIsIGRldi0+bmFtZSk7CisJcHJpdi0+bWNnX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUobmFtZSwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJCSAgICAgICBpcG9pYl9yb290LCBkZXYsICZpcG9pYl9tY2dfZm9wcyk7CisJaWYgKCFwcml2LT5tY2dfZGVudHJ5KQorCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIG1jZyBkZWJ1ZyBmaWxlXG4iKTsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZiBuYW1lLCAiJXNfcGF0aCIsIGRldi0+bmFtZSk7CisJcHJpdi0+cGF0aF9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCQkJaXBvaWJfcm9vdCwgZGV2LCAmaXBvaWJfcGF0aF9mb3BzKTsKKwlpZiAoIXByaXYtPnBhdGhfZGVudHJ5KQorCQlpcG9pYl93YXJuKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHBhdGggZGVidWcgZmlsZVxuIik7Cit9CisKK3ZvaWQgaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChwcml2LT5tY2dfZGVudHJ5KQogCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5tY2dfZGVudHJ5KTsKKwlpZiAocHJpdi0+cGF0aF9kZW50cnkpCisJCWRlYnVnZnNfcmVtb3ZlKHByaXYtPnBhdGhfZGVudHJ5KTsKIH0KIAogaW50IGlwb2liX3JlZ2lzdGVyX2RlYnVnZnModm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKaW5kZXggY2UwMjk2Mi4uMmZhMzA3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMKQEAgLTU4LDYgKzU4LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2xldmVsLCAiRW5hYmxlIGRlYnVnIHRyYWNpbmcgaWYgPiAwIik7CiAjZW5kaWYKIAorc3RydWN0IGlwb2liX3BhdGhfaXRlciB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaXBvaWJfcGF0aCAgcGF0aDsKK307CisKIHN0YXRpYyBjb25zdCB1OCBpcHY0X2JjYXN0X2FkZHJbXSA9IHsKIAkweDAwLCAweGZmLCAweGZmLCAweGZmLAogCTB4ZmYsIDB4MTIsIDB4NDAsIDB4MWIsCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0yNTAsNiArMjU1LDY0IEBACiAJa2ZyZWUocGF0aCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRworCitzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppcG9pYl9wYXRoX2l0ZXJfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXI7CisKKwlpdGVyID0ga21hbGxvYyhzaXplb2YgKml0ZXIsIEdGUF9LRVJORUwpOworCWlmICghaXRlcikKKwkJcmV0dXJuIE5VTEw7CisKKwlpdGVyLT5kZXYgPSBkZXY7CisJbWVtc2V0KGl0ZXItPnBhdGgucGF0aHJlYy5kZ2lkLnJhdywgMCwgMTYpOworCisJaWYgKGlwb2liX3BhdGhfaXRlcl9uZXh0KGl0ZXIpKSB7CisJCWtmcmVlKGl0ZXIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gaXRlcjsKK30KKworaW50IGlwb2liX3BhdGhfaXRlcl9uZXh0KHN0cnVjdCBpcG9pYl9wYXRoX2l0ZXIgKml0ZXIpCit7CisJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoaXRlci0+ZGV2KTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbjsKKwlzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aDsKKwlpbnQgcmV0ID0gMTsKKworCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOworCisJbiA9IHJiX2ZpcnN0KCZwcml2LT5wYXRoX3RyZWUpOworCisJd2hpbGUgKG4pIHsKKwkJcGF0aCA9IHJiX2VudHJ5KG4sIHN0cnVjdCBpcG9pYl9wYXRoLCByYl9ub2RlKTsKKworCQlpZiAobWVtY21wKGl0ZXItPnBhdGgucGF0aHJlYy5kZ2lkLnJhdywgcGF0aC0+cGF0aHJlYy5kZ2lkLnJhdywKKwkJCSAgIHNpemVvZiAodW5pb24gaWJfZ2lkKSkgPCAwKSB7CisJCQlpdGVyLT5wYXRoID0gKnBhdGg7CisJCQlyZXQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQluID0gcmJfbmV4dChuKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBpcG9pYl9wYXRoX2l0ZXJfcmVhZChzdHJ1Y3QgaXBvaWJfcGF0aF9pdGVyICppdGVyLAorCQkJICBzdHJ1Y3QgaXBvaWJfcGF0aCAqcGF0aCkKK3sKKwkqcGF0aCA9IGl0ZXItPnBhdGg7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRyAqLworCiB2b2lkIGlwb2liX2ZsdXNoX3BhdGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTc2Myw3ICs4MjYsNyBAQAogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldiksICpjcHJpdiwgKnRjcHJpdjsKIAotCWlwb2liX2RlbGV0ZV9kZWJ1Z19maWxlKGRldik7CisJaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKGRldik7CiAKIAkvKiBEZWxldGUgYW55IGNoaWxkIGludGVyZmFjZXMgZmlyc3QgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3ByaXYsIHRjcHJpdiwgJnByaXYtPmNoaWxkX2ludGZzLCBsaXN0KSB7CkBAIC05NzIsOCArMTAzNSw3IEBACiAJCWdvdG8gcmVnaXN0ZXJfZmFpbGVkOwogCX0KIAotCWlmIChpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShwcml2LT5kZXYpKQotCQlnb3RvIGRlYnVnX2ZhaWxlZDsKKwlpcG9pYl9jcmVhdGVfZGVidWdfZmlsZXMocHJpdi0+ZGV2KTsKIAogCWlmIChpcG9pYl9hZGRfcGtleV9hdHRyKHByaXYtPmRldikpCiAJCWdvdG8gc3lzZnNfZmFpbGVkOwpAQCAtOTg3LDkgKzEwNDksNyBAQAogCXJldHVybiBwcml2LT5kZXY7CiAKIHN5c2ZzX2ZhaWxlZDoKLQlpcG9pYl9kZWxldGVfZGVidWdfZmlsZShwcml2LT5kZXYpOwotCi1kZWJ1Z19mYWlsZWQ6CisJaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+ZGV2KTsKIAogcmVnaXN0ZXJfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKaW5kZXggM2VjZjc4YS4uYzMzZWQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCkBAIC0xMjAsMTIgKzEyMCw4IEBACiAJaWYgKG1jYXN0LT5haCkKIAkJaXBvaWJfcHV0X2FoKG1jYXN0LT5haCk7CiAKLQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbWNhc3QtPnBrdF9xdWV1ZSkpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKTsKLQotCQlza2ItPmRldiA9IGRldjsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQl9CisJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJm1jYXN0LT5wa3RfcXVldWUpKQorCQlkZXZfa2ZyZWVfc2tiX2FueShza2JfZGVxdWV1ZSgmbWNhc3QtPnBrdF9xdWV1ZSkpOwogCiAJa2ZyZWUobWNhc3QpOwogfQpAQCAtMzE3LDEzICszMTMsOCBAQAogCQkJCQlJUE9JQl9HSURfQVJHKG1jYXN0LT5tY21lbWJlci5tZ2lkKSwgc3RhdHVzKTsKIAogCQkvKiBGbHVzaCBvdXQgYW55IHF1ZXVlZCBwYWNrZXRzICovCi0JCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZtY2FzdC0+cGt0X3F1ZXVlKSkgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKTsKLQotCQkJc2tiLT5kZXYgPSBkZXY7Ci0KLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCX0KKwkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJm1jYXN0LT5wa3RfcXVldWUpKQorCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiX2RlcXVldWUoJm1jYXN0LT5wa3RfcXVldWUpKTsKIAogCQkvKiBDbGVhciB0aGUgYnVzeSBmbGFnIHNvIHdlIHRyeSBhZ2FpbiAqLwogCQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKTsKQEAgLTkyOCwyMSArOTE5LDE2IEBACiAJCXJldHVybiBOVUxMOwogCiAJaXRlci0+ZGV2ID0gZGV2OwotCW1lbXNldChpdGVyLT5tZ2lkLnJhdywgMCwgc2l6ZW9mIGl0ZXItPm1naWQpOworCW1lbXNldChpdGVyLT5tZ2lkLnJhdywgMCwgMTYpOwogCiAJaWYgKGlwb2liX21jYXN0X2l0ZXJfbmV4dChpdGVyKSkgewotCQlpcG9pYl9tY2FzdF9pdGVyX2ZyZWUoaXRlcik7CisJCWtmcmVlKGl0ZXIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gaXRlcjsKIH0KIAotdm9pZCBpcG9pYl9tY2FzdF9pdGVyX2ZyZWUoc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIpCi17Ci0Ja2ZyZWUoaXRlcik7Ci19Ci0KIGludCBpcG9pYl9tY2FzdF9pdGVyX25leHQoc3RydWN0IGlwb2liX21jYXN0X2l0ZXIgKml0ZXIpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoaXRlci0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmxhbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92bGFuLmMKaW5kZXggMzMyZDczMC4uZDI4MGIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92bGFuLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92bGFuLmMKQEAgLTExMyw4ICsxMTMsNyBAQAogCiAJcHJpdi0+cGFyZW50ID0gcHByaXYtPmRldjsKIAotCWlmIChpcG9pYl9jcmVhdGVfZGVidWdfZmlsZShwcml2LT5kZXYpKQotCQlnb3RvIGRlYnVnX2ZhaWxlZDsKKwlpcG9pYl9jcmVhdGVfZGVidWdfZmlsZXMocHJpdi0+ZGV2KTsKIAogCWlmIChpcG9pYl9hZGRfcGtleV9hdHRyKHByaXYtPmRldikpCiAJCWdvdG8gc3lzZnNfZmFpbGVkOwpAQCAtMTMwLDkgKzEyOSw3IEBACiAJcmV0dXJuIDA7CiAKIHN5c2ZzX2ZhaWxlZDoKLQlpcG9pYl9kZWxldGVfZGVidWdfZmlsZShwcml2LT5kZXYpOwotCi1kZWJ1Z19mYWlsZWQ6CisJaXBvaWJfZGVsZXRlX2RlYnVnX2ZpbGVzKHByaXYtPmRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+ZGV2KTsKIAogcmVnaXN0ZXJfZmFpbGVkOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCmluZGV4IGQwMGQxNGIuLjY0NjcyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKQEAgLTI1OSwxNyArMjU5LDE3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgY29yZ2lrYmRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgY29yZ2lrYmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJY29yZ2lrYmQtPnN1c3BlbmRlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjb3JnaWtiZF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaWtiZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCS8qIFVwb24gcmVzdW1lLCBpZ25vcmUgdGhlIHN1c3BlbmQga2V5IGZvciBhIHNob3J0IHdoaWxlICovCiAJY29yZ2lrYmQtPnN1c3BlbmRfamlmZmllcz1qaWZmaWVzOwpAQCAtMjgyLDcgKzI4Miw3IEBACiAjZGVmaW5lIGNvcmdpa2JkX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpa2JkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGNvcmdpa2JkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGNvcmdpa2JkICpjb3JnaWtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgY29yZ2lrYmQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvcmdpa2JkKTsKIAogCWNvcmdpa2JkLT5pbnB1dCA9IGlucHV0X2RldjsKIAlzcGluX2xvY2tfaW5pdCgmY29yZ2lrYmQtPmxvY2spOwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKLQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gZGV2OworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmcGRldi0+ZGV2OwogCWlucHV0X2Rldi0+cHJpdmF0ZSA9IGNvcmdpa2JkOwogCiAJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfUFdSKSB8IEJJVChFVl9TVyk7CkBAIC0zNTYsMTAgKzM1NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpa2JkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGNvcmdpa2JkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBpOwotCXN0cnVjdCBjb3JnaWtiZCAqY29yZ2lrYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgY29yZ2lrYmQgKmNvcmdpa2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09SR0lfS0VZX1NFTlNFX05VTTsgaSsrKQogCQlmcmVlX2lycShDT1JHSV9JUlFfR1BJT19LRVlfU0VOU0UoaSksIGNvcmdpa2JkKTsKQEAgLTM3NCwyMyArMzc0LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBjb3JnaWtiZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWtleWJvYXJkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpa2JkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gY29yZ2lrYmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaWtiZF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBjb3JnaWtiZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gY29yZ2lrYmRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS1rZXlib2FyZCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvcmdpa2JkX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWtiZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNvcmdpa2JkX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb3JnaWtiZF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpa2JkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpa2JkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNvcmdpa2JkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDBmYTM4YTUuLjZhMTVmZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTMwOSwxMCArMzA5LDEwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc3BpdHprYmRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc3BpdHprYmRfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3BpdHprYmQtPnN1c3BlbmRlZCA9IDE7CiAKIAkvKiBTZXQgU3Ryb2JlIGxpbmVzIGFzIGlucHV0cyAtICpleGNlcHQqIHN0cm9iZSBsaW5lIDAgbGVhdmUgdGhpcwpAQCAtMzIzLDEwICszMjMsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzcGl0emtiZF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzcGl0emtiZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwotCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpdHprYmQgKnNwaXR6a2JkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBTUElUWl9LRVlfU1RST0JFX05VTTsgaSsrKQogCQlweGFfZ3Bpb19tb2RlKHNwaXR6X3N0cm9iZXNbaV0gfCBHUElPX09VVCB8IEdQSU9fREZMVF9ISUdIKTsKQEAgLTM0Miw3ICszNDIsNyBAQAogI2RlZmluZSBzcGl0emtiZF9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBzcGl0emtiZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBzcGl0emtiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgc3BpdHprYmQpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgc3BpdHprYmQpOwogCXN0cmNweShzcGl0emtiZC0+cGh5cywgInNwaXR6a2JkL2lucHV0MCIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNwaXR6a2JkLT5sb2NrKTsKQEAgLTM4MCw3ICszODAsNyBAQAogCWlucHV0X2Rldi0+cHJpdmF0ZSA9IHNwaXR6a2JkOwogCWlucHV0X2Rldi0+bmFtZSA9ICJTcGl0eiBLZXlib2FyZCI7CiAJaW5wdXRfZGV2LT5waHlzID0gc3BpdHprYmQtPnBoeXM7Ci0JaW5wdXRfZGV2LT5jZGV2LmRldiA9IGRldjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmRldi0+ZGV2OwogCiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CiAJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CkBAIC00MzcsMTAgKzQzNywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNwaXR6a2JkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNwaXR6a2JkX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IHNwaXR6a2JkICpzcGl0emtiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcGl0emtiZCAqc3BpdHprYmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IFNQSVRaX0tFWV9TRU5TRV9OVU07IGkrKykKIAkJZnJlZV9pcnEoSVJRX0dQSU8oc3BpdHpfc2Vuc2VzW2ldKSwgc3BpdHprYmQpOwpAQCAtNDYwLDIzICs0NjAsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNwaXR6a2JkX2RyaXZlciA9IHsKLQkubmFtZQkJPSAic3BpdHota2V5Ym9hcmQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3BpdHprYmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzcGl0emtiZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHNwaXR6a2JkX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNwaXR6a2JkX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzcGl0emtiZF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNwaXR6LWtleWJvYXJkIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgc3BpdHprYmRfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNwaXR6a2JkX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc3BpdHprYmRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNwaXR6a2JkX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc3BpdHprYmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3BpdHprYmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc3BpdHprYmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKaW5kZXggMDFlMTg2NC4uYWM4NmMxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwpAQCAtOTEyLDcgKzkxMiw3IEBACiAgKiBIZXJlIHdlIHRyeSB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBCSU9TIHNldHRpbmdzCiAgKi8KIAotc3RhdGljIGludCBpODA0Ml9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBpODA0Ml9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWRlbF90aW1lcl9zeW5jKCZpODA0Ml90aW1lcik7CiAJaTgwNDJfY29udHJvbGxlcl9yZXNldCgpOwpAQCAtOTI1LDcgKzkyNSw3IEBACiAgKiBIZXJlIHdlIHRyeSB0byByZXNldCBldmVyeXRoaW5nIGJhY2sgdG8gYSBzdGF0ZSBpbiB3aGljaCBzdXNwZW5kZWQKICAqLwogCi1zdGF0aWMgaW50IGk4MDQyX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGk4MDQyX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAKQEAgLTk2NCwxNyArOTY0LDE4IEBACiAgKiBiZWNhdXNlIG90aGVyd2lzZSBCSU9TZXMgd2lsbCBiZSBjb25mdXNlZC4KICAqLwogCi1zdGF0aWMgdm9pZCBpODA0Ml9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpODA0Ml9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaTgwNDJfY29udHJvbGxlcl9jbGVhbnVwKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpODA0Ml9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImk4MDQyIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGk4MDQyX2RyaXZlciA9IHsKIAkuc3VzcGVuZAk9IGk4MDQyX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpODA0Ml9yZXN1bWUsCiAJLnNodXRkb3duCT0gaTgwNDJfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImk4MDQyIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaTgwNDJfY3JlYXRlX2tiZF9wb3J0KHZvaWQpCkBAIC0xMDc4LDcgKzEwNzksNyBAQAogCQlnb3RvIGVycl9wbGF0Zm9ybV9leGl0OwogCX0KIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmk4MDQyX2RyaXZlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfY29udHJvbGxlcl9jbGVhbnVwOwogCkBAIC0xMTI2LDcgKzExMjcsNyBAQAogIGVycl91bnJlZ2lzdGVyX2RldmljZToKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihpODA0Ml9wbGF0Zm9ybV9kZXZpY2UpOwogIGVycl91bnJlZ2lzdGVyX2RyaXZlcjoKLQlkcml2ZXJfdW5yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKICBlcnJfY29udHJvbGxlcl9jbGVhbnVwOgogCWk4MDQyX2NvbnRyb2xsZXJfY2xlYW51cCgpOwogIGVycl9wbGF0Zm9ybV9leGl0OgpAQCAtMTE0OCw3ICsxMTQ5LDcgQEAKIAlkZWxfdGltZXJfc3luYygmaTgwNDJfdGltZXIpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoaTgwNDJfcGxhdGZvcm1fZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaTgwNDJfZHJpdmVyKTsKIAogCWk4MDQyX3BsYXRmb3JtX2V4aXQoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKaW5kZXggNTJjNDkyNS4uYTNiZDExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3JwY2tiZC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKICAqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHNlcmlvIHN0cnVjdHVyZSBmb3Igc3Vic2VxdWVudCByZWdpc3RyYXRpb24KICAqIHdpdGggc2VyaW8gY29yZS4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgcnBja2JkX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJwY2tiZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNlcmlvICpzZXJpbzsKIApAQCAtMTIwLDM3ICsxMjAsMzggQEAKIAlzZXJpby0+d3JpdGUJCT0gcnBja2JkX3dyaXRlOwogCXNlcmlvLT5vcGVuCQk9IHJwY2tiZF9vcGVuOwogCXNlcmlvLT5jbG9zZQkJPSBycGNrYmRfY2xvc2U7Ci0Jc2VyaW8tPmRldi5wYXJlbnQJPSBkZXY7CisJc2VyaW8tPmRldi5wYXJlbnQJPSAmZGV2LT5kZXY7CiAJc3RybGNweShzZXJpby0+bmFtZSwgIlJpc2NQQyBQUy8yIGtiZCBwb3J0Iiwgc2l6ZW9mKHNlcmlvLT5uYW1lKSk7CiAJc3RybGNweShzZXJpby0+cGh5cywgInJwY2tiZC9zZXJpbzAiLCBzaXplb2Yoc2VyaW8tPnBoeXMpKTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIHNlcmlvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNlcmlvKTsKIAlzZXJpb19yZWdpc3Rlcl9wb3J0KHNlcmlvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgcnBja2JkX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBycGNrYmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2VyaW8gKnNlcmlvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlcmlvICpzZXJpbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc2VyaW9fdW5yZWdpc3Rlcl9wb3J0KHNlcmlvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHJwY2tiZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImthcnQiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnBja2JkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcnBja2JkX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocnBja2JkX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImthcnQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBycGNrYmRfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnJwY2tiZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJwY2tiZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcnBja2JkX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcnBja2JkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJwY2tiZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChycGNrYmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKaW5kZXggMTVlODhlZS4uMTA0Mjk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwpAQCAtMjMxLDkgKzIzMSw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgY29yZ2l0c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjb3JnaXRzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGNvcmdpX3RzLT5wZW5kb3duKSB7CiAJCWRlbF90aW1lcl9zeW5jKCZjb3JnaV90cy0+dGltZXIpOwpAQCAtMjQ4LDkgKzI0OCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2l0c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaXRzX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJY29yZ2lfc3NwX2Fkczc4NDZfcHV0Z2V0KCg0dSA8PCBBRFNDVFJMX0FEUl9TSCkgfCBBRFNDVFJMX1NUUyk7CiAJLyogRW5hYmxlIEZhbGxpbmcgRWRnZSAqLwpAQCAtMjY0LDEwICsyNjQsOSBAQAogI2RlZmluZSBjb3JnaXRzX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpdHNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgY29yZ2l0c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JnaV90cyAqY29yZ2lfdHM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIApAQCAtMjc2LDkgKzI3NSw5IEBACiAJaWYgKCFjb3JnaV90cyB8fCAhaW5wdXRfZGV2KQogCQlnb3RvIGZhaWw7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBjb3JnaV90cyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZ2lfdHMpOwogCi0JY29yZ2lfdHMtPm1hY2hpbmZvID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWNvcmdpX3RzLT5tYWNoaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWNvcmdpX3RzLT5pcnFfZ3BpbyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAKIAlpZiAoY29yZ2lfdHMtPmlycV9ncGlvIDwgMCkgewpAQCAtMjk4LDcgKzI5Nyw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAyOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKLQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gZGV2OworCWlucHV0X2Rldi0+Y2Rldi5kZXYgPSAmcGRldi0+ZGV2OwogCWlucHV0X2Rldi0+cHJpdmF0ZSA9IGNvcmdpX3RzOwogCiAJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CkBAIC0zMzksOSArMzM4LDkgQEAKIAogfQogCi1zdGF0aWMgaW50IGNvcmdpdHNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2l0c19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY29yZ2lfdHMgKmNvcmdpX3RzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGNvcmdpX3RzICpjb3JnaV90cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJZnJlZV9pcnEoY29yZ2lfdHMtPmlycV9ncGlvLCBOVUxMKTsKIAlkZWxfdGltZXJfc3luYygmY29yZ2lfdHMtPnRpbWVyKTsKQEAgLTM1MSwyMyArMzUwLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBjb3JnaXRzX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY29yZ2ktdHMiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY29yZ2l0c19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGNvcmdpdHNfcHJvYmUsCiAJLnJlbW92ZQkJPSBjb3JnaXRzX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGNvcmdpdHNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGNvcmdpdHNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJjb3JnaS10cyIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNvcmdpdHNfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmNvcmdpdHNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb3JnaXRzX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmY29yZ2l0c19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaXRzX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNvcmdpdHNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMgYi9kcml2ZXJzL21mZC9tY3Atc2ExMXgwLmMKaW5kZXggN2RhYTBlZC4uMWVhYjdjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvbWNwLXNhMTF4MC5jCisrKyBiL2RyaXZlcnMvbWZkL21jcC1zYTExeDAuYwpAQCAtMTM4LDkgKzEzOCw4IEBACiAJLmRpc2FibGUJCT0gbWNwX3NhMTF4MF9kaXNhYmxlLAogfTsKIAotc3RhdGljIGludCBtY3Bfc2ExMXgwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgbWNwX3NhMTF4MF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbWNwX3BsYXRfZGF0YSAqZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBtY3AgKm1jcDsKIAlpbnQgcmV0OwpAQCAtMTY1LDcgKzE2NCw3IEBACiAJbWNwLT5kbWFfdGVsY29fcmQJPSBETUFfU2VyNE1DUDFSZDsKIAltY3AtPmRtYV90ZWxjb193cgk9IERNQV9TZXI0TUNQMVdyOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbWNwKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtY3ApOwogCiAJaWYgKG1hY2hpbmVfaXNfYXNzYWJldCgpKSB7CiAJCUFTU0FCRVRfQkNSX3NldChBU1NBQkVUX0JDUl9DT0RFQ19SU1QpOwpAQCAtMjAyLDI2ICsyMDEsMjYgQEAKIAogIHJlbGVhc2U6CiAJcmVsZWFzZV9tZW1fcmVnaW9uKDB4ODAwNjAwMDAsIDB4NjApOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAgb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbWNwX3NhMTF4MF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBtY3Bfc2ExMXgwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IG1jcCAqbWNwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1jcCAqbWNwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJbWNwX2hvc3RfdW5yZWdpc3RlcihtY3ApOwogCXJlbGVhc2VfbWVtX3JlZ2lvbigweDgwMDYwMDAwLCAweDYwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1jcF9zYTExeDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbWNwX3NhMTF4MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBtY3AgKm1jcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtY3AgKm1jcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlwcml2KG1jcCktPm1jY3IwID0gU2VyNE1DQ1IwOwogCXByaXYobWNwKS0+bWNjcjEgPSBTZXI0TUNDUjE7CkBAIC0yMzAsOSArMjI5LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtY3Bfc2ExMXgwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG1jcF9zYTExeDBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbWNwICptY3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbWNwICptY3AgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJU2VyNE1DQ1IxID0gcHJpdihtY3ApLT5tY2NyMTsKIAlTZXI0TUNDUjAgPSBwcml2KG1jcCktPm1jY3IwOwpAQCAtMjQzLDEzICsyNDIsMTQgQEAKIC8qCiAgKiBUaGUgZHJpdmVyIGZvciB0aGUgU0ExMXgwIE1DUCBwb3J0LgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWNwX3NhMTF4MF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC1tY3AiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWNwX3NhMTF4MF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG1jcF9zYTExeDBfcHJvYmUsCiAJLnJlbW92ZQkJPSBtY3Bfc2ExMXgwX3JlbW92ZSwKIAkuc3VzcGVuZAk9IG1jcF9zYTExeDBfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG1jcF9zYTExeDBfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzYTExeDAtbWNwIiwKKwl9LAogfTsKIAogLyoKQEAgLTI1NywxMiArMjU3LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG1jcF9zYTExeDBfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm1jcF9zYTExeDBfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtY3Bfc2ExMXgwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtY3Bfc2ExMXgwX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWNwX3NhMTF4MF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtY3Bfc2ExMXgwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG1jcF9zYTExeDBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jIGIvZHJpdmVycy9taXNjL2hkcHVmdHJzL2hkcHVfY3B1c3RhdGUuYwppbmRleCBiYzJiNzJiLi4xMWE4MDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9jcHVzdGF0ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X2NwdXN0YXRlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2RlZmluZSBTS1lfQ1BVU1RBVEVfVkVSU0lPTgkJIjEuMSIKIAotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpOwotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZGV2KTsKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0cnVjdCBjcHVzdGF0ZV90IGNwdXN0YXRlOwogCkBAIC0xNTgsMTEgKzE1OCwxMiBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBoZHB1X2NwdXN0YXRlX2RyaXZlciA9IHsKLQkubmFtZSA9IEhEUFVfQ1BVU1RBVEVfTkFNRSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRwdV9jcHVzdGF0ZV9kcml2ZXIgPSB7CiAJLnByb2JlID0gaGRwdV9jcHVzdGF0ZV9wcm9iZSwKIAkucmVtb3ZlID0gaGRwdV9jcHVzdGF0ZV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBIRFBVX0NQVVNUQVRFX05BTUUsCisJfSwKIH07CiAKIC8qCkBAIC0xODcsOSArMTg4LDggQEAKIAkmY3B1c3RhdGVfZm9wcwogfTsKIAotc3RhdGljIGludCBoZHB1X2NwdXN0YXRlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfY3B1c3RhdGVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19kZTsKIAlpbnQgcmV0OwpAQCAtMjE3LDcgKzIxNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgaGRwdV9jcHVzdGF0ZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAogCWNwdXN0YXRlLnNldF9hZGRyID0gTlVMTDsKQEAgLTIzMiwxMyArMjMyLDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBjcHVzdGF0ZV9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwotCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZoZHB1X2NwdXN0YXRlX2RyaXZlcik7CisJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcHVzdGF0ZV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmhkcHVfY3B1c3RhdGVfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGRwdV9jcHVzdGF0ZV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChjcHVzdGF0ZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMgYi9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCmluZGV4IDRiYjQ2MTcuLmVhOWQ1ZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaGRwdWZ0cnMvaGRwdV9uZXh1cy5jCisrKyBiL2RyaXZlcnMvbWlzYy9oZHB1ZnRycy9oZHB1X25leHVzLmMKQEAgLTIyLDE5ICsyMiwyMCBAQAogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLXN0YXRpYyBpbnQgaGRwdV9uZXh1c19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KTsKLXN0YXRpYyBpbnQgaGRwdV9uZXh1c19yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldik7CitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpoZHB1X3Nsb3RfaWQ7CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpoZHB1X2NoYXNzaXNfaWQ7CiBzdGF0aWMgaW50IHNsb3RfaWQgPSAtMTsKIHN0YXRpYyBpbnQgY2hhc3Npc19pZCA9IC0xOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgaGRwdV9uZXh1c19kcml2ZXIgPSB7Ci0JLm5hbWUgPSBIRFBVX05FWFVTX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhkcHVfbmV4dXNfZHJpdmVyID0gewogCS5wcm9iZSA9IGhkcHVfbmV4dXNfcHJvYmUsCiAJLnJlbW92ZSA9IGhkcHVfbmV4dXNfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gSERQVV9ORVhVU19OQU1FLAorCX0sCiB9OwogCiBpbnQgaGRwdV9zbG90X2lkX3JlYWQoY2hhciAqYnVmZmVyLCBjaGFyICoqYnVmZmVyX2xvY2F0aW9uLCBvZmZfdCBvZmZzZXQsCkBAIC01NSw5ICs1Niw4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWRcbiIsIGNoYXNzaXNfaWQpOwogfQogCi1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgaGRwdV9uZXh1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtODAsNyArODAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IGhkcHVfbmV4dXNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc2xvdF9pZCA9IC0xOwogCWNoYXNzaXNfaWQgPSAtMTsKQEAgLTk0LDEzICs5NCwxMyBAQAogc3RhdGljIGludCBfX2luaXQgbmV4dXNfaW5pdCh2b2lkKQogewogCWludCByYzsKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmaGRwdV9uZXh1c19kcml2ZXIpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZoZHB1X25leHVzX2RyaXZlcik7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmV4dXNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZoZHB1X25leHVzX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmhkcHVfbmV4dXNfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQobmV4dXNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL3B4YW1jaS5jCmluZGV4IGYzMWUyNDcuLmVlOGY4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3B4YW1jaS5jCisrKyBiL2RyaXZlcnMvbW1jL3B4YW1jaS5jCkBAIC00MjgsOSArNDI4LDggQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhbWNpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcHhhbWNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IE5VTEw7CiAJc3RydWN0IHJlc291cmNlICpyOwpAQCAtNDQ1LDcgKzQ0NCw3IEBACiAJaWYgKCFyKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBweGFtY2lfaG9zdCksIGRldik7CisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBweGFtY2lfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNDc0LDcgKzQ3Myw3IEBACiAJCQkgaG9zdC0+cGRhdGEtPm9jcl9tYXNrIDoKIAkJCSBNTUNfVkREXzMyXzMzfE1NQ19WRERfMzNfMzQ7CiAKLQlob3N0LT5zZ19jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBQQUdFX1NJWkUsICZob3N0LT5zZ19kbWEsIEdGUF9LRVJORUwpOworCWhvc3QtPnNnX2NwdSA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsICZob3N0LT5zZ19kbWEsIEdGUF9LRVJORUwpOwogCWlmICghaG9zdC0+c2dfY3B1KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtNTExLDEwICs1MTAsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1tYyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbW1jKTsKIAogCWlmIChob3N0LT5wZGF0YSAmJiBob3N0LT5wZGF0YS0+aW5pdCkKLQkJaG9zdC0+cGRhdGEtPmluaXQoZGV2LCBweGFtY2lfZGV0ZWN0X2lycSwgbW1jKTsKKwkJaG9zdC0+cGRhdGEtPmluaXQoJnBkZXYtPmRldiwgcHhhbWNpX2RldGVjdF9pcnEsIG1tYyk7CiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIApAQCAtNTI3LDcgKzUyNiw3IEBACiAJCWlmIChob3N0LT5iYXNlKQogCQkJaW91bm1hcChob3N0LT5iYXNlKTsKIAkJaWYgKGhvc3QtPnNnX2NwdSkKLQkJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgUEFHRV9TSVpFLCBob3N0LT5zZ19jcHUsIGhvc3QtPnNnX2RtYSk7CisJCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKIAl9CiAJaWYgKG1tYykKIAkJbW1jX2ZyZWVfaG9zdChtbWMpOwpAQCAtNTM1LDE3ICs1MzQsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGFtY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpZiAobW1jKSB7CiAJCXN0cnVjdCBweGFtY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAKIAkJaWYgKGhvc3QtPnBkYXRhICYmIGhvc3QtPnBkYXRhLT5leGl0KQotCQkJaG9zdC0+cGRhdGEtPmV4aXQoZGV2LCBtbWMpOworCQkJaG9zdC0+cGRhdGEtPmV4aXQoJnBkZXYtPmRldiwgbW1jKTsKIAogCQltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIApAQCAtNTYwLDcgKzU1OSw3IEBACiAJCWZyZWVfaXJxKGhvc3QtPmlycSwgaG9zdCk7CiAJCXB4YV9mcmVlX2RtYShob3N0LT5kbWEpOwogCQlpb3VubWFwKGhvc3QtPmJhc2UpOwotCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFBBR0VfU0laRSwgaG9zdC0+c2dfY3B1LCBob3N0LT5zZ19kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBQQUdFX1NJWkUsIGhvc3QtPnNnX2NwdSwgaG9zdC0+c2dfZG1hKTsKIAogCQlyZWxlYXNlX3Jlc291cmNlKGhvc3QtPnJlcyk7CiAKQEAgLTU3MCw5ICs1NjksOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YW1jaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGFtY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCkBAIC01ODEsOSArNTgwLDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YW1jaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGFtY2lfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChtbWMpCkBAIC01OTYsMjMgKzU5NSwyNCBAQAogI2RlZmluZSBweGFtY2lfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcHhhbWNpX2RyaXZlciA9IHsKLQkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB4YW1jaV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHB4YW1jaV9wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YW1jaV9yZW1vdmUsCiAJLnN1c3BlbmQJPSBweGFtY2lfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YW1jaV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJJVkVSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHB4YW1jaV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBweGFtY2lfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZweGFtY2lfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhbWNpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHB4YW1jaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3dic2QuYyBiL2RyaXZlcnMvbW1jL3dic2QuYwppbmRleCBlOTU0YjgzLi5jN2ViN2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy93YnNkLmMKKysrIGIvZHJpdmVycy9tbWMvd2JzZC5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAid2JzZC5oIgogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJ3YnNkIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS40IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS41IgogCiAjaWZkZWYgQ09ORklHX01NQ19ERUJVRwogI2RlZmluZSBEQkcoeC4uLikgXApAQCAtMTkzMiwxNCArMTkzMiwxNCBAQAogICogTm9uLVBuUAogICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdic2RfcHJvYmUoc3RydWN0IGRldmljZSogZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBkZXYpCiB7Ci0JcmV0dXJuIHdic2RfaW5pdChkZXYsIGlvLCBpcnEsIGRtYSwgMCk7CisJcmV0dXJuIHdic2RfaW5pdCgmZGV2LT5kZXYsIGlvLCBpcnEsIGRtYSwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHdic2RfcmVtb3ZlKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdic2RfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldikKIHsKLQl3YnNkX3NodXRkb3duKGRldiwgMCk7CisJd2JzZF9zaHV0ZG93bigmZGV2LT5kZXYsIDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTgzLDkgKzE5ODMsOSBAQAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgd2JzZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB3YnNkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG1tY19ob3N0ICptbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHdic2RfaG9zdCAqaG9zdDsKIAlpbnQgcmV0OwogCkBAIC0yMDA1LDkgKzIwMDUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdic2RfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgd2JzZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3YnNkX2hvc3QgKmhvc3Q7CiAKIAlpZiAoIW1tYykKQEAgLTIwMzgsMTQgKzIwMzgsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKndic2RfZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgd2JzZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gRFJJVkVSX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3YnNkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gd2JzZF9wcm9iZSwKLQkucmVtb3ZlCQk9IHdic2RfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aod2JzZF9yZW1vdmUpLAogCiAJLnN1c3BlbmQJPSB3YnNkX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB3YnNkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBEUklWRVJfTkFNRSwKKwl9LAogfTsKIAogI2lmZGVmIENPTkZJR19QTlAKQEAgLTIwNTQsNyArMjA1NSw3IEBACiAJLm5hbWUJCT0gRFJJVkVSX05BTUUsCiAJLmlkX3RhYmxlCT0gcG5wX2Rldl90YWJsZSwKIAkucHJvYmUJCT0gd2JzZF9wbnBfcHJvYmUsCi0JLnJlbW92ZQkJPSB3YnNkX3BucF9yZW1vdmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh3YnNkX3BucF9yZW1vdmUpLAogfTsKIAogI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KQEAgLTIwODUsNyArMjA4Niw3IEBACiAKIAlpZiAobm9wbnApCiAJewotCQlyZXN1bHQgPSBkcml2ZXJfcmVnaXN0ZXIoJndic2RfZHJpdmVyKTsKKwkJcmVzdWx0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3YnNkX2RyaXZlcik7CiAJCWlmIChyZXN1bHQgPCAwKQogCQkJcmV0dXJuIHJlc3VsdDsKIApAQCAtMjExMSw3ICsyMTEyLDcgQEAKIAl7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHdic2RfZGV2aWNlKTsKIAotCQlkcml2ZXJfdW5yZWdpc3Rlcigmd2JzZF9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd2JzZF9kcml2ZXIpOwogCX0KIAogCURCRygidW5sb2FkZWRcbiIpOwpAQCAtMjEyNyw2ICsyMTI4LDcgQEAKIG1vZHVsZV9wYXJhbShkbWEsIGludCwgMDQ0NCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBpZXJyZSBPc3NtYW4gPGRyemV1c0BkcnpldXMuY3g+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIldpbmJvbmQgVzgzTDUxeEQgU0QvTU1DIGNhcmQgaW50ZXJmYWNlIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Jhc3QtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCmluZGV4IGI3ODU4ZWIuLjUxZjk2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvYmFzdC1mbGFzaC5jCkBAIC02MywxMSArNjMsNiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCi1zdGF0aWMgc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqdG9fYmFzdF9pbmZvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKHN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKilkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgYmFzdF9mbGFzaF9zZXRydyhpbnQgdG8pCiB7CiAJdW5zaWduZWQgaW50IHZhbDsKQEAgLTg3LDExICs4MiwxMSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBiYXN0X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJhc3RfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGJhc3RfZmxhc2hfaW5mbyAqaW5mbyA9IHRvX2Jhc3RfaW5mbyhkZXYpOworCXN0cnVjdCBiYXN0X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMTYsOSArMTExLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiYXN0X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYmFzdF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgYmFzdF9mbGFzaF9pbmZvICppbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCBlcnIgPSAwOwpAQCAtMTMxLDEzICsxMjUsMTMgQEAKIAl9CiAKIAltZW16ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcmVzID0gcGRldi0+cmVzb3VyY2U7ICAvKiBhc3N1bWUgdGhhdCB0aGUgZmxhc2ggaGFzIG9uZSByZXNvdXJjZSAqLwogCiAJaW5mby0+bWFwLnBoeXMgPSByZXMtPnN0YXJ0OwogCWluZm8tPm1hcC5zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKLQlpbmZvLT5tYXAubmFtZSA9IGRldi0+YnVzX2lkOworCWluZm8tPm1hcC5uYW1lID0gcGRldi0+ZGV2LmJ1c19pZDsJCiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IDI7CiAKIAlpZiAoaW5mby0+bWFwLnNpemUgPiBBUkVBX01BWFNJWkUpCkBAIC0xOTksMjcgKzE5MywyOCBAQAogCS8qIGZhbGwgdGhyb3VnaCB0byBleGl0IGVycm9yICovCiAKICBleGl0X2Vycm9yOgotCWJhc3RfZmxhc2hfcmVtb3ZlKGRldik7CisJYmFzdF9mbGFzaF9yZW1vdmUocGRldik7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGJhc3RfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJiYXN0LW5vciIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmFzdF9mbGFzaF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGJhc3RfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSBiYXN0X2ZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYmFzdC1ub3IiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYmFzdF9mbGFzaF9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJCQVNUIE5PUi1GbGFzaCBEcml2ZXIsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYmFzdF9mbGFzaF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGJhc3RfZmxhc2hfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZiYXN0X2ZsYXNoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmJhc3RfZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoYmFzdF9mbGFzaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMKaW5kZXggZmU3MzhmZDguLmEzYmE1MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaW50ZWdyYXRvci1mbGFzaC5jCkBAIC02Nyw5ICs2Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCAiYWZzIiwgTlVMTCB9OwogCi1zdGF0aWMgaW50IGFybWZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGFybWZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CkBAIC0xMzgsNyArMTM3LDcgQEAKIAl9CiAKIAlpZiAoZXJyID09IDApCi0JCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJLyoKIAkgKiBJZiB3ZSBnb3QgYW4gZXJyb3IsIGZyZWUgYWxsIHJlc291cmNlcy4KQEAgLTE2MywxMiArMTYyLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBhcm1mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgYXJtZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7Ci0Jc3RydWN0IGFybWZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlzdHJ1Y3QgYXJtZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8pIHsKIAkJaWYgKGluZm8tPm10ZCkgewpAQCAtMTkwLDIxICsxODgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGFybWZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXJtZmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXJtZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBhcm1mbGFzaF9wcm9iZSwKIAkucmVtb3ZlCQk9IGFybWZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXJtZmxhc2giLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhcm1mbGFzaF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXJtZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhcm1mbGFzaF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXJtZmxhc2hfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZhcm1mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcm1mbGFzaF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhcm1mbGFzaF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXhwMjAwMC5jIGIvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMKaW5kZXggNjQxZWIyYi4uZmM3YTc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9peHAyMDAwLmMKQEAgLTExMSwxMyArMTExLDEyIEBACiB9CiAKIAotc3RhdGljIGludCBpeHAyMDAwX2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHAyMDAwX2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgaXhwMjAwMF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CisJc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCiAJaWYoIWluZm8pCiAJCXJldHVybiAwOwpAQCAtMTQzLDEwICsxNDIsOSBAQAogfQogCiAKLXN0YXRpYyBpbnQgaXhwMjAwMF9mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHAyMDAwX2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgaXhwMjAwMF9mbGFzaF9kYXRhICppeHBfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQ7CiAJc3RydWN0IGl4cDIwMDBfZmxhc2hfaW5mbyAqaW5mbzsKQEAgLTE3Nyw3ICsxNzUsNyBAQAogCX0KIAltZW16ZXJvKGluZm8sIHNpemVvZihzdHJ1Y3QgaXhwMjAwMF9mbGFzaF9pbmZvKSk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJLyoKIAkgKiBUZWxsIHRoZSBNVEQgbGF5ZXIgd2UncmUgbm90IDE6MSBtYXBwZWQgc28gdGhhdCBpdCBkb2VzCkBAIC0yNDgsMjUgKzI0NiwyNiBAQAogCXJldHVybiAwOwogCiBFcnJvcjoKLQlpeHAyMDAwX2ZsYXNoX3JlbW92ZShfZGV2KTsKKwlpeHAyMDAwX2ZsYXNoX3JlbW92ZShkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpeHAyMDAwX2ZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiSVhQMjAwMC1GbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpeHAyMDAwX2ZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gJml4cDIwMDBfZmxhc2hfcHJvYmUsCiAJLnJlbW92ZQkJPSAmaXhwMjAwMF9mbGFzaF9yZW1vdmUKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQMjAwMC1GbGFzaCIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGl4cDIwMDBfZmxhc2hfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJml4cDIwMDBfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpeHAyMDAwX2ZsYXNoX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpeHAyMDAwX2ZsYXNoX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaXhwMjAwMF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpeHAyMDAwX2ZsYXNoX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGl4cDIwMDBfZmxhc2hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwppbmRleCA1NmIzYTM1Li5hNTlmODAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKQEAgLTk5LDEzICs5OSwxMiBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvYmVzW10gPSB7ICJSZWRCb290IiwgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogCi1zdGF0aWMgaW50IGl4cDR4eF9mbGFzaF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgaXhwNHh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwlzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmKCFpbmZvKQogCQlyZXR1cm4gMDsKQEAgLTEzMCw5ICsxMjksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGl4cDR4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBpeHA0eHhfZmxhc2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGl4cDR4eF9mbGFzaF9pbmZvICppbmZvOwogCWludCBlcnIgPSAtMTsKQEAgLTE1Myw3ICsxNTEsNyBAQAogCX0KIAltZW16ZXJvKGluZm8sIHNpemVvZihzdHJ1Y3QgaXhwNHh4X2ZsYXNoX2luZm8pKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAkvKgogCSAqIFRlbGwgdGhlIE1URCBsYXllciB3ZSdyZSBub3QgMToxIG1hcHBlZCBzbyB0aGF0IGl0IGRvZXMKQEAgLTIxNCwyNSArMjEyLDI2IEBACiAJcmV0dXJuIDA7CiAKIEVycm9yOgotCWl4cDR4eF9mbGFzaF9yZW1vdmUoX2Rldik7CisJaXhwNHh4X2ZsYXNoX3JlbW92ZShkZXYpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpeHA0eHhfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJJWFA0WFgtRmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXhwNHh4X2ZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gaXhwNHh4X2ZsYXNoX3Byb2JlLAogCS5yZW1vdmUJCT0gaXhwNHh4X2ZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiSVhQNFhYLUZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaXhwNHh4X2ZsYXNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpeHA0eHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGl4cDR4eF9mbGFzaF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJml4cDR4eF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpeHA0eHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMgYi9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKaW5kZXggZmQzYjRhNS4uNDE4YWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwpAQCAtNzAsMTEgKzcwLDEwIEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwZmxhc2hfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgb21hcGZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm87Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gcGRldi0+cmVzb3VyY2U7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKQEAgLTExOSw3ICsxMTgsNyBAQAogI2VuZGlmCiAJCWFkZF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTMzLDEyICsxMzIsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwZmxhc2hfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG9tYXBmbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBvbWFwZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8pIHsKIAkJaWYgKGluZm8tPnBhcnRzKSB7CkBAIC0xNTUsMjEgKzE1MywyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb21hcGZsYXNoX2RyaXZlciA9IHsKLQkubmFtZQk9ICJvbWFwZmxhc2giLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwZmxhc2hfZHJpdmVyID0gewogCS5wcm9iZQk9IG9tYXBmbGFzaF9wcm9iZSwKIAkucmVtb3ZlCT0gX19kZXZleGl0X3Aob21hcGZsYXNoX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAib21hcGZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb21hcGZsYXNoX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvbWFwZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBmbGFzaF9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBmbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob21hcGZsYXNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCmluZGV4IGEwMmVlZDkuLjVkM2M3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKQEAgLTU2LDkgKzU2LDkgQEAKICAqIGRldmljZSBwcml2YXRlIGRhdGEgdG8gc3RydWN0IHBsYXRyYW1faW5mbyBjb252ZXJzaW9uCiAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwbGF0cmFtX2luZm8gKnRvX3BsYXRyYW1faW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbGF0cmFtX2luZm8gKnRvX3BsYXRyYW1faW5mbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIChzdHJ1Y3QgcGxhdHJhbV9pbmZvICopZGV2X2dldF9kcnZkYXRhKGRldik7CisJcmV0dXJuIChzdHJ1Y3QgcGxhdHJhbV9pbmZvICopcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIH0KIAogLyogcGxhdHJhbV9zZXRydwpAQCAtODMsMTMgKzgzLDEzIEBACiAgKiBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBkZXZpY2UgZnJvbSB0aGUgZHJpdmVyJ3MgY29udHJvbAogKi8KIAotc3RhdGljIGludCBwbGF0cmFtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHBsYXRyYW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRyYW1faW5mbyAqaW5mbyA9IHRvX3BsYXRyYW1faW5mbyhkZXYpOworCXN0cnVjdCBwbGF0cmFtX2luZm8gKmluZm8gPSB0b19wbGF0cmFtX2luZm8ocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWRldl9kYmcoZGV2LCAicmVtb3ZpbmcgZGV2aWNlXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZW1vdmluZyBkZXZpY2VcbiIpOwogCiAJaWYgKGluZm8gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMzAsNjEgKzEzMCw2MCBAQAogICogZHJpdmVyIGlzIGZvdW5kLgogKi8KIAotc3RhdGljIGludCBwbGF0cmFtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgcGxhdHJhbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHBsYXRkYXRhX210ZF9yYW0JKnBkYXRhOwogCXN0cnVjdCBwbGF0cmFtX2luZm8gKmluZm87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGVyciA9IDA7CiAKLQlkZXZfZGJnKGRldiwgInByb2JlIGVudGVyZWRcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInByb2JlIGVudGVyZWRcbiIpOwogCi0JaWYgKGRldi0+cGxhdGZvcm1fZGF0YSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CisJaWYgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBzdXBwbGllZFxuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKLQlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgIm5vIG1lbW9yeSBmb3IgZmxhc2ggaW5mb1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgZmxhc2ggaW5mb1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKLQlpbmZvLT5kZXYgPSBkZXY7CisJaW5mby0+ZGV2ID0gJnBkZXYtPmRldjsKIAlpbmZvLT5wZGF0YSA9IHBkYXRhOwogCiAJLyogZ2V0IHRoZSByZXNvdXJjZSBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nICovCiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGQsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIHNwZWNpZmllZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZSBzcGVjaWZpZWRcbiIpOwogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CiAKLQlkZXZfZGJnKGRldiwgImdvdCBwbGF0Zm9ybSByZXNvdXJjZSAlcCAoMHglbHgpXG4iLCByZXMsIHJlcy0+c3RhcnQpOworCWRldl9kYmcoJnBkZXYtPmRldiwgImdvdCBwbGF0Zm9ybSByZXNvdXJjZSAlcCAoMHglbHgpXG4iLCByZXMsIHJlcy0+c3RhcnQpOwogCiAJLyogc2V0dXAgbWFwIHBhcmFtZXRlcnMgKi8KIAogCWluZm8tPm1hcC5waHlzID0gcmVzLT5zdGFydDsKIAlpbmZvLT5tYXAuc2l6ZSA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMTsKLQlpbmZvLT5tYXAubmFtZSA9IHBkYXRhLT5tYXBuYW1lICE9IE5VTEwgPyBwZGF0YS0+bWFwbmFtZSA6IChjaGFyICopcGQtPm5hbWU7CisJaW5mby0+bWFwLm5hbWUgPSBwZGF0YS0+bWFwbmFtZSAhPSBOVUxMID8gcGRhdGEtPm1hcG5hbWUgOiAoY2hhciAqKXBkZXYtPm5hbWU7CiAJaW5mby0+bWFwLmJhbmt3aWR0aCA9IHBkYXRhLT5iYW5rd2lkdGg7CiAKIAkvKiByZWdpc3RlciBvdXIgdXNhZ2Ugb2YgdGhlIG1lbW9yeSBhcmVhICovCiAKLQlpbmZvLT5hcmVhID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIGluZm8tPm1hcC5zaXplLCBwZC0+bmFtZSk7CisJaW5mby0+YXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBpbmZvLT5tYXAuc2l6ZSwgcGRldi0+bmFtZSk7CiAJaWYgKGluZm8tPmFyZWEgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSByZWdpb25cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQpAQCAtMTkyLDIzICsxOTEsMjMgQEAKIAkvKiByZW1hcCB0aGUgbWVtb3J5IGFyZWEgKi8KIAogCWluZm8tPm1hcC52aXJ0ID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBpbmZvLT5tYXAuc2l6ZSk7Ci0JZGV2X2RiZyhkZXYsICJ2aXJ0ICVwLCAlbHUgYnl0ZXNcbiIsIGluZm8tPm1hcC52aXJ0LCBpbmZvLT5tYXAuc2l6ZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAidmlydCAlcCwgJWx1IGJ5dGVzXG4iLCBpbmZvLT5tYXAudmlydCwgaW5mby0+bWFwLnNpemUpOwogCiAJaWYgKGluZm8tPm1hcC52aXJ0ID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIHJlZ2lvblxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaW9uXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBleGl0X2ZyZWU7CiAJfQogCiAJc2ltcGxlX21hcF9pbml0KCZpbmZvLT5tYXApOwogCi0JZGV2X2RiZyhkZXYsICJpbml0aWFsaXNlZCBtYXAsIHByb2JpbmcgZm9yIG10ZFxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlhbGlzZWQgbWFwLCBwcm9iaW5nIGZvciBtdGRcbiIpOwogCiAJLyogcHJvYmUgZm9yIHRoZSByaWdodCBtdGQgbWFwIGRyaXZlciAqLwogCiAJaW5mby0+bXRkID0gZG9fbWFwX3Byb2JlKCJtYXBfcmFtIiAsICZpbmZvLT5tYXApOwogCWlmIChpbmZvLT5tdGQgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwcm9iZSBmb3IgbWFwX3JhbVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBwcm9iZSBmb3IgbWFwX3JhbVxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9mcmVlOwogCX0KQEAgLTIzNywyNyArMjM2LDI4IEBACiAjZW5kaWYgLyogQ09ORklHX01URF9QQVJUSVRJT05TICovCiAKIAlpZiAoYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKSkgewotCQlkZXZfZXJyKGRldiwgImFkZF9tdGRfZGV2aWNlKCkgZmFpbGVkXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWRkX210ZF9kZXZpY2UoKSBmYWlsZWRcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCX0KIAotCWRldl9pbmZvKGRldiwgInJlZ2lzdGVyZWQgbXRkIGRldmljZVxuIik7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlZ2lzdGVyZWQgbXRkIGRldmljZVxuIik7CiAJcmV0dXJuIGVycjsKIAogIGV4aXRfZnJlZToKLQlwbGF0cmFtX3JlbW92ZShkZXYpOworCXBsYXRyYW1fcmVtb3ZlKHBkZXYpOwogIGV4aXRfZXJyb3I6CiAJcmV0dXJuIGVycjsKIH0KIAogLyogZGV2aWNlIGRyaXZlciBpbmZvICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBwbGF0cmFtX2RyaXZlciA9IHsKLQkubmFtZQkJPSAibXRkLXJhbSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGxhdHJhbV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHBsYXRyYW1fcHJvYmUsCiAJLnJlbW92ZQkJPSBwbGF0cmFtX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXRkLXJhbSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCiAvKiBtb2R1bGUgaW5pdC9leGl0ICovCkBAIC0yNjUsMTIgKzI2NSwxMiBAQAogc3RhdGljIGludCBfX2luaXQgcGxhdHJhbV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKCJHZW5lcmljIHBsYXRmb3JtIFJBTSBNVEQsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmcGxhdHJhbV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRyYW1fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHBsYXRyYW1fZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZwbGF0cmFtX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBsYXRyYW1fZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocGxhdHJhbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCmluZGV4IDllOGJiMTcuLjVjZWZiMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYwpAQCAtMzU2LDkgKzM1Niw4IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCAiUmVkQm9vdCIsIE5VTEwgfTsKIAotc3RhdGljIGludCBfX2luaXQgc2ExMTAwX210ZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfbXRkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IE5VTEw7CkBAIC00MDIsMjggKzQwMSwyOCBAQAogCiAJaW5mby0+bnJfcGFydHMgPSBucl9wYXJ0czsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCWVyciA9IDA7CiAKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgc2ExMTAwX210ZF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgc2ExMTAwX210ZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhICpwbGF0ID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBsYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXNhMTEwMF9kZXN0cm95KGluZm8sIHBsYXQpOwogCiAJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc2ExMTAwX210ZF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMDBfbXRkX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHNhX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5mbykKQEAgLTQzMiwxNyArNDMxLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzYTExMDBfbXRkX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTEwMF9tdGRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAoaW5mbykKIAkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2ExMTAwX210ZF9zaHV0ZG93bihzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzYTExMDBfbXRkX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2FfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzYV9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlpZiAoaW5mbyAmJiBpbmZvLT5tdGQtPnN1c3BlbmQoaW5mby0+bXRkKSA9PSAwKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogfQpAQCAtNDUyLDI0ICs0NTEsMjUgQEAKICNkZWZpbmUgc2ExMTAwX210ZF9zaHV0ZG93biBOVUxMCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTEwMF9tdGRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJmbGFzaCIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExMDBfbXRkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc2ExMTAwX210ZF9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZXhpdF9wKHNhMTEwMF9tdGRfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IHNhMTEwMF9tdGRfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNhMTEwMF9tdGRfcmVzdW1lLAogCS5zaHV0ZG93bgk9IHNhMTEwMF9tdGRfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImZsYXNoIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMTAwX210ZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2ExMTAwX210ZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMF9tdGRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTEwMF9tdGRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExMDBfbXRkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMF9tdGRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoc2ExMTAwX210ZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKaW5kZXggOTdlOWI3OC4uZDIwOTIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMKQEAgLTEyNSwxNCArMTI1LDE0IEBACiAJcmV0dXJuIHMzYzI0MTBfbmFuZF9tdGRfdG9vdXJzKG10ZCktPmluZm87CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKnRvX25hbmRfaW5mbyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICp0b19uYW5kX2luZm8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXJldHVybiBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnRvX25hbmRfcGxhdChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqdG9fbmFuZF9wbGF0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXJldHVybiBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogfQogCiAvKiB0aW1pbmcgY2FsY3VsYXRpb25zICovCkBAIC0xNjUsOSArMTY1LDkgQEAKIC8qIGNvbnRyb2xsZXIgc2V0dXAgKi8KIAogc3RhdGljIGludCBzM2MyNDEwX25hbmRfaW5pdGh3KHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbywKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYpCisJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KGRldik7CisJc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChwZGV2KTsKIAl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoaW5mby0+Y2xrKTsKIAlpbnQgdGFjbHMsIHR3cnBoMCwgdHdycGgxOwogCXVuc2lnbmVkIGxvbmcgY2ZnOwpAQCAtNDMwLDExICs0MzAsMTEgQEAKIAogLyogZGV2aWNlIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSB0b19uYW5kX2luZm8oZGV2KTsKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSB0b19uYW5kX2luZm8ocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAwOwpAQCAtNTYyLDEwICs1NjIsOSBAQAogICogbmFuZCBsYXllciB0byBsb29rIGZvciBkZXZpY2VzCiAqLwogCi1zdGF0aWMgaW50IHMzYzI0eHhfbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpc19zM2MyNDQwKQorc3RhdGljIGludCBzM2MyNHh4X25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlzX3MzYzI0NDApCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgKnBsYXQgPSB0b19uYW5kX3BsYXQoZGV2KTsKKwlzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kICpwbGF0ID0gdG9fbmFuZF9wbGF0KHBkZXYpOwogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX210ZCAqbm10ZDsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqc2V0czsKQEAgLTU3NSwyNiArNTc0LDI2IEBACiAJaW50IG5yX3NldHM7CiAJaW50IHNldG5vOwogCi0JcHJfZGVidWcoInMzYzI0MTBfbmFuZF9wcm9iZSglcClcbiIsIGRldik7CisJcHJfZGVidWcoInMzYzI0MTBfbmFuZF9wcm9iZSglcClcbiIsIHBkZXYpOwogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8gPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgIm5vIG1lbW9yeSBmb3IgZmxhc2ggaW5mb1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgZmxhc2ggaW5mb1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CiAKIAltZW16ZXJvKGluZm8sIHNpemVvZigqaW5mbykpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJc3Bpbl9sb2NrX2luaXQoJmluZm8tPmNvbnRyb2xsZXIubG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y29udHJvbGxlci53cSk7CiAKIAkvKiBnZXQgdGhlIGNsb2NrIHNvdXJjZSBhbmQgZW5hYmxlIGl0ICovCiAKLQlpbmZvLT5jbGsgPSBjbGtfZ2V0KGRldiwgIm5hbmQiKTsKKwlpbmZvLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJuYW5kIik7CiAJaWYgKElTX0VSUihpbmZvLT5jbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9jayIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNsb2NrIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CkBAIC02MTEsMjcgKzYxMCwyNyBAQAogCWluZm8tPmFyZWEgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAoaW5mby0+YXJlYSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCWluZm8tPmRldmljZSAgICAgPSBkZXY7CisJaW5mby0+ZGV2aWNlICAgICA9ICZwZGV2LT5kZXY7CiAJaW5mby0+cGxhdGZvcm0gICA9IHBsYXQ7CiAJaW5mby0+cmVncyAgICAgICA9IGlvcmVtYXAocmVzLT5zdGFydCwgc2l6ZSk7CiAJaW5mby0+aXNfczNjMjQ0MCA9IGlzX3MzYzI0NDA7CiAKIAlpZiAoaW5mby0+cmVncyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlc2VydmUgcmVnaXN0ZXIgcmVnaW9uXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KIAotCWRldl9kYmcoZGV2LCAibWFwcGVkIHJlZ2lzdGVycyBhdCAlcFxuIiwgaW5mby0+cmVncyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAibWFwcGVkIHJlZ2lzdGVycyBhdCAlcFxuIiwgaW5mby0+cmVncyk7CiAKIAkvKiBpbml0aWFsaXNlIHRoZSBoYXJkd2FyZSAqLwogCi0JZXJyID0gczNjMjQxMF9uYW5kX2luaXRodyhpbmZvLCBkZXYpOworCWVyciA9IHMzYzI0MTBfbmFuZF9pbml0aHcoaW5mbywgcGRldik7CiAJaWYgKGVyciAhPSAwKQogCQlnb3RvIGV4aXRfZXJyb3I7CiAKQEAgLTY0NSw3ICs2NDQsNyBAQAogCXNpemUgPSBucl9zZXRzICogc2l6ZW9mKCppbmZvLT5tdGRzKTsKIAlpbmZvLT5tdGRzID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoaW5mby0+bXRkcyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG10ZCBzdG9yYWdlXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG10ZCBzdG9yYWdlXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBleGl0X2Vycm9yOwogCX0KQEAgLTY3Nyw3ICs2NzYsNyBAQAogCXJldHVybiAwOwogCiAgZXhpdF9lcnJvcjoKLQlzM2MyNDEwX25hbmRfcmVtb3ZlKGRldik7CisJczNjMjQxMF9uYW5kX3JlbW92ZShwZGV2KTsKIAogCWlmIChlcnIgPT0gMCkKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTY4Niw0NCArNjg1LDQ2IEBACiAKIC8qIGRyaXZlciBkZXZpY2UgcmVnaXN0cmF0aW9uICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gczNjMjR4eF9uYW5kX3Byb2JlKGRldiwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQ0MF9uYW5kX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQ0MF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gczNjMjR4eF9uYW5kX3Byb2JlKGRldiwgMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwX25hbmRfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLW5hbmQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBfbmFuZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0MTBfbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfbmFuZF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYzI0MTAtbmFuZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQ0MF9uYW5kX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiczNjMjQ0MC1uYW5kIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDQwX25hbmRfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzM2MyNDQwX25hbmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNDEwX25hbmRfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDQwLW5hbmQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9uYW5kX2luaXQodm9pZCkKIHsKIAlwcmludGsoIlMzQzI0WFggTkFORCBEcml2ZXIsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CiAKLQlkcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfbmFuZF9kcml2ZXIpOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBfbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9uYW5kX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9uYW5kX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzM2MyNDEwX25hbmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDQwX25hbmRfZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9uYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0NDBfbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX25hbmRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoczNjMjQxMF9uYW5kX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggNWM2OWQ1Ny4uZWJkNzMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC04MTIsNyArODEyLDcgQEAKIAl0cmlzdGF0ZSAiU01DIDkxQzl4LzkxQzF4eHggc3VwcG9ydCIKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgTUlJCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgKEFSTSB8fCBSRURXT09EXzUgfHwgUkVEV09PRF82IHx8IE0zMlIgfHwgU1VQRVJIKQorCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUICYmIChBUk0gfHwgUkVEV09PRF81IHx8IFJFRFdPT0RfNiB8fCBNMzJSIHx8IFNVUEVSSCB8fCBTT0NfQVUxWDAwKQogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFNNQydzIDkxeCBzZXJpZXMgb2YgRXRoZXJuZXQgY2hpcHNldHMsCiAJICBpbmNsdWRpbmcgdGhlIFNNQzkxQzk0IGFuZCB0aGUgU01DOTFDMTExLiBTYXkgWSBpZiB5b3Ugd2FudCBpdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDhmNDY0MjcuLjQ5ZmExZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTI3MDcsNyArMjcwNyw3IEBACiAKIAlpZiAoaiA9PSBlbnRyeV9jb3VudCkgewogCQlicC0+Zmxhc2hfaW5mbyA9IE5VTEw7Ci0JCXByaW50ayhLRVJOX0FMRVJUICJVbmtub3duIGZsYXNoL0VFUFJPTSB0eXBlLlxuIik7CisJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiVW5rbm93biBmbGFzaC9FRVBST00gdHlwZS5cbiIpOwogCQlyYyA9IC1FTk9ERVY7CiAJfQogCkBAIC0zOTAzLDYgKzM5MDMsOCBAQAogCiAJcGt0X3NpemUgPSAxNTE0OwogCXNrYiA9IGRldl9hbGxvY19za2IocGt0X3NpemUpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKIAlwYWNrZXQgPSBza2JfcHV0KHNrYiwgcGt0X3NpemUpOwogCW1lbWNweShwYWNrZXQsIGJwLT5tYWNfYWRkciwgNik7CiAJbWVtc2V0KHBhY2tldCArIDYsIDB4MCwgOCk7CkBAIC00Nzk4LDExICs0ODAwLDcgQEAKICAgCXN0cnVjdCBibngyICpicCA9IGRldi0+cHJpdjsKIAlpbnQgcmM7CiAKLQlpZiAoZWVwcm9tLT5vZmZzZXQgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pID4gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUpCi0JCWVlcHJvbS0+bGVuID0gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUgLSBlZXByb20tPm9mZnNldDsKKwkvKiBwYXJhbWV0ZXJzIGFscmVhZHkgdmFsaWRhdGVkIGluIGV0aHRvb2xfZ2V0X2VlcHJvbSAqLwogCiAJcmMgPSBibngyX252cmFtX3JlYWQoYnAsIGVlcHJvbS0+b2Zmc2V0LCBlZWJ1ZiwgZWVwcm9tLT5sZW4pOwogCkBAIC00ODE2LDExICs0ODE0LDcgQEAKICAgCXN0cnVjdCBibngyICpicCA9IGRldi0+cHJpdjsKIAlpbnQgcmM7CiAKLQlpZiAoZWVwcm9tLT5vZmZzZXQgPiBicC0+Zmxhc2hfaW5mby0+dG90YWxfc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9tLT5sZW4pID4gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUpCi0JCWVlcHJvbS0+bGVuID0gYnAtPmZsYXNoX2luZm8tPnRvdGFsX3NpemUgLSBlZXByb20tPm9mZnNldDsKKwkvKiBwYXJhbWV0ZXJzIGFscmVhZHkgdmFsaWRhdGVkIGluIGV0aHRvb2xfc2V0X2VlcHJvbSAqLwogCiAJcmMgPSBibngyX252cmFtX3dyaXRlKGJwLCBlZXByb20tPm9mZnNldCwgZWVidWYsIGVlcHJvbS0+bGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVwY2EuYyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKaW5kZXggMGQzM2E5My4uMDM4MDRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVwY2EuYworKysgYi9kcml2ZXJzL25ldC9kZXBjYS5jCkBAIC0zOTgsMTMgKzM5OCwxOSBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgaW50IGRlcGNhX2lzYV9wcm9iZSAoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgZGVwY2FfaXNhX3Byb2JlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZGVwY2FfaXNhX2RyaXZlciA9IHsKLQkubmFtZSAgID0gZGVwY2Ffc3RyaW5nLAotCS5idXMgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBkZXBjYV9pc2FfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIGRlcGNhX2RldmljZV9yZW1vdmUoJnBkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGRlcGNhX2lzYV9kcml2ZXIgPSB7CiAJLnByb2JlICA9IGRlcGNhX2lzYV9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AoZGVwY2FfZGV2aWNlX3JlbW92ZSksCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGRlcGNhX2lzYV9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lICAgPSBkZXBjYV9zdHJpbmcsCisJfSwKIH07CiAJCiAvKgpAQCAtMTUyNSw3ICsxNTMxLDcgQEAKIAlyZXR1cm4gYWRhcHRlcjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZGVwY2FfaXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9pc2FfcHJvYmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBkZXBjYV9wcml2YXRlICpscDsKQEAgLTE1MzMsNyArMTUzOSw3IEBACiAJZW51bSBkZXBjYV90eXBlIGFkYXB0ZXIgPSB1bmtub3duOwogCWludCBzdGF0dXMgPSAwOwogCi0JaW9hZGRyID0gKHVfbG9uZykgZGV2aWNlLT5wbGF0Zm9ybV9kYXRhOworCWlvYWRkciA9ICh1X2xvbmcpIGRldmljZS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoKHN0YXR1cyA9IGRlcGNhX2NvbW1vbl9pbml0IChpb2FkZHIsICZkZXYpKSkKIAkJZ290byBvdXQ7CkBAIC0xNTUzLDcgKzE1NTksNyBAQAogCWxwLT5hZGFwdGVyID0gYWRhcHRlcjsKIAlscC0+bWVtX3N0YXJ0ID0gbWVtX3N0YXJ0OwogCQotCWlmICgoc3RhdHVzID0gZGVwY2FfaHdfaW5pdChkZXYsIGRldmljZSkpKQorCWlmICgoc3RhdHVzID0gZGVwY2FfaHdfaW5pdChkZXYsICZkZXZpY2UtPmRldikpKQogCQlnb3RvIG91dF9mcmVlOwogCQogCXJldHVybiAwOwpAQCAtMjA4Miw3ICsyMDg4LDcgQEAKICNpZmRlZiBDT05GSUdfRUlTQQogICAgICAgICBlcnIgfD0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKCZkZXBjYV9laXNhX2RyaXZlcik7CiAjZW5kaWYKLQllcnIgfD0gZHJpdmVyX3JlZ2lzdGVyICgmZGVwY2FfaXNhX2RyaXZlcik7CisJZXJyIHw9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOwogCWRlcGNhX3BsYXRmb3JtX3Byb2JlICgpOwogCQogICAgICAgICByZXR1cm4gZXJyOwpAQCAtMjA5Nyw3ICsyMTAzLDcgQEAKICNpZmRlZiBDT05GSUdfRUlTQQogICAgICAgICBlaXNhX2RyaXZlcl91bnJlZ2lzdGVyICgmZGVwY2FfZWlzYV9kcml2ZXIpOwogI2VuZGlmCi0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkZXBjYV9pc2FfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOwogCiAJZm9yIChpID0gMDsgZGVwY2FfaW9fcG9ydHNbaV0uaW9iYXNlOyBpKyspIHsKIAkJaWYgKGRlcGNhX2lvX3BvcnRzW2ldLmRldmljZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBmOGM5YmNkLi4yNDk5NmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiB9IGJvYXJkX2luZm9fdDsKIAogLyogZnVuY3Rpb24gZGVjbGFyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGludCBkbTkwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgZG05MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50IGRtOTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBkbTkwMDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgZG05MDAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CkBAIC0zNzgsOSArMzc4LDggQEAKICAqIFNlYXJjaCBETTkwMDAgYm9hcmQsIGFsbG9jYXRlIHNwYWNlIGFuZCByZWdpc3RlciBpdAogICovCiBzdGF0aWMgaW50Ci1kbTkwMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorZG05MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBib2FyZF9pbmZvICpkYjsJLyogUG9pbnQgYSBib2FyZCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKQEAgLTM5OCw3ICszOTcsNyBAQAogCX0KIAogCVNFVF9NT0RVTEVfT1dORVIobmRldik7Ci0JU0VUX05FVERFVl9ERVYobmRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKIAogCVBSSU5USzIoImRtOTAwMF9wcm9iZSgpIik7CiAKQEAgLTU2OSw3ICs1NjgsNyBAQAogCQlwcmludGsoIiVzOiBJbnZhbGlkIGV0aGVybmV0IE1BQyBhZGRyZXNzLiAgUGxlYXNlICIKIAkJICAgICAgICJzZXQgdXNpbmcgaWZjb25maWdcbiIsIG5kZXYtPm5hbWUpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCiAJaWYgKHJldCA9PSAwKSB7CkBAIC0xMTQwLDkgKzExMzksOSBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitkbTkwMDBfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAobmRldikgewogCQlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewpAQCAtMTE1NCw5ICsxMTUzLDkgQEAKIH0KIAogc3RhdGljIGludAotZG05MDAwX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorZG05MDAwX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWJvYXJkX2luZm9fdCAqZGIgPSAoYm9hcmRfaW5mb190ICopIG5kZXYtPnByaXY7CiAKIAlpZiAobmRldikgewpAQCAtMTE3MiwxMiArMTE3MSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1kbTkwMDBfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitkbTkwMDBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWRtOTAwMF9yZWxlYXNlX2JvYXJkKHBkZXYsIChib2FyZF9pbmZvX3QgKikgbmRldi0+cHJpdik7CkBAIC0xMTg4LDEzICsxMTg2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkbTkwMDBfZHJpdmVyID0gewotCS5uYW1lICAgID0gImRtOTAwMCIsCi0JLmJ1cyAgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbTkwMDBfZHJpdmVyID0gewogCS5wcm9iZSAgID0gZG05MDAwX3Byb2JlLAogCS5yZW1vdmUgID0gZG05MDAwX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQgPSBkbTkwMDBfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZSAgPSBkbTkwMDBfZHJ2X3Jlc3VtZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJkbTkwMDAiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdApAQCAtMTIwMiwxMyArMTIwMSwxMyBAQAogewogCXByaW50ayhLRVJOX0lORk8gIiVzIEV0aGVybmV0IERyaXZlclxuIiwgQ0FSRE5BTUUpOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZG05MDAwX2RyaXZlcik7CS8qIHNlYXJjaCBib2FyZCBhbmQgcmVnaXN0ZXIgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsJLyogc2VhcmNoIGJvYXJkIGFuZCByZWdpc3RlciAqLwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQKIGRtOTAwMF9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmRtOTAwMF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZkbTkwMDBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZG05MDAwX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCAyMmFlYzZlLi41MjU2MjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtODAsNyArODAsNyBAQAogICoJCQkgICBpbnRvIG52X2Nsb3NlLCBvdGhlcndpc2UgcmVlbmFibGluZyBmb3Igd29sIGNhbgogICoJCQkgICBjYXVzZSBETUEgdG8ga2ZyZWUnZCBtZW1vcnkuCiAgKgkwLjMxOiAxNCBOb3YgMjAwNDogZXRodG9vbCBzdXBwb3J0IGZvciBnZXR0aW5nL3NldHRpbmcgbGluawotICoJICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllcy4KKyAqCQkJICAgY2FwYWJpbGl0aWVzLgogICoJMC4zMjogMTYgQXByIDIwMDU6IFJYX0VSUk9SNCBoYW5kbGluZyBhZGRlZC4KICAqCTAuMzM6IDE2IE1heSAyMDA1OiBTdXBwb3J0IGZvciBNQ1A1MSBhZGRlZC4KICAqCTAuMzQ6IDE4IEp1biAyMDA1OiBBZGQgREVWX05FRURfTElOS1RJTUVSIHRvIGFsbCBuRm9yY2Ugbmljcy4KQEAgLTg5LDE0ICs4OSwxNyBAQAogICoJMC4zNzogMTAgSnVsIDIwMDU6IEFkZGl0aW9uYWwgZXRodG9vbCBzdXBwb3J0LCBjbGVhbnVwIG9mIHBjaSBpZCBsaXN0CiAgKgkwLjM4OiAxNiBKdWwgMjAwNTogdHggaXJxIHJld3JpdGU6IFVzZSBnbG9iYWwgZmxhZ3MgaW5zdGVhZCBvZgogICoJCQkgICBwZXItcGFja2V0IGZsYWdzLgotICogICAgICAwLjM5OiAxOCBKdWwgMjAwNTogQWRkIDY0Yml0IGRlc2NyaXB0b3Igc3VwcG9ydC4KLSAqICAgICAgMC40MDogMTkgSnVsIDIwMDU6IEFkZCBzdXBwb3J0IGZvciBtYWMgYWRkcmVzcyBjaGFuZ2UuCi0gKiAgICAgIDAuNDE6IDMwIEp1bCAyMDA1OiBXcml0ZSBiYWNrIG9yaWdpbmFsIE1BQyBpbiBudl9jbG9zZSBpbnN0ZWFkCisgKgkwLjM5OiAxOCBKdWwgMjAwNTogQWRkIDY0Yml0IGRlc2NyaXB0b3Igc3VwcG9ydC4KKyAqCTAuNDA6IDE5IEp1bCAyMDA1OiBBZGQgc3VwcG9ydCBmb3IgbWFjIGFkZHJlc3MgY2hhbmdlLgorICoJMC40MTogMzAgSnVsIDIwMDU6IFdyaXRlIGJhY2sgb3JpZ2luYWwgTUFDIGluIG52X2Nsb3NlIGluc3RlYWQKICAqCQkJICAgb2YgbnZfcmVtb3ZlCi0gKiAgICAgIDAuNDI6IDA2IEF1ZyAyMDA1OiBGaXggbGFjayBvZiBsaW5rIHNwZWVkIGluaXRpYWxpemF0aW9uCisgKgkwLjQyOiAwNiBBdWcgMjAwNTogRml4IGxhY2sgb2YgbGluayBzcGVlZCBpbml0aWFsaXphdGlvbgogICoJCQkgICBpbiB0aGUgc2Vjb25kIChhbmQgbGF0ZXIpIG52X29wZW4gY2FsbAotICogICAgICAwLjQzOiAxMCBBdWcgMjAwNTogQWRkIHN1cHBvcnQgZm9yIHR4IGNoZWNrc3VtLgotICogICAgICAwLjQ0OiAyMCBBdWcgMjAwNTogQWRkIHN1cHBvcnQgZm9yIHNjYXR0ZXIgZ2F0aGVyIGFuZCBzZWdtZW50YXRpb24uCisgKgkwLjQzOiAxMCBBdWcgMjAwNTogQWRkIHN1cHBvcnQgZm9yIHR4IGNoZWNrc3VtLgorICoJMC40NDogMjAgQXVnIDIwMDU6IEFkZCBzdXBwb3J0IGZvciBzY2F0dGVyIGdhdGhlciBhbmQgc2VnbWVudGF0aW9uLgorICoJMC40NTogMTggU2VwIDIwMDU6IFJlbW92ZSBudl9zdG9wL3N0YXJ0X3J4IGZyb20gZXZlcnkgbGluayBjaGVjaworICoJMC40NjogMjAgT2N0IDIwMDU6IEFkZCBpcnEgb3B0aW1pemF0aW9uIG1vZGVzLgorICoJMC40NzogMjYgT2N0IDIwMDU6IEFkZCBwaHlhZGRyIDAgaW4gcGh5IHNjYW4uCiAgKgogICogS25vd24gYnVnczoKICAqIFdlIHN1c3BlY3QgdGhhdCBvbiBzb21lIGhhcmR3YXJlIG5vIFRYIGRvbmUgaW50ZXJydXB0cyBhcmUgZ2VuZXJhdGVkLgpAQCAtMTA4LDcgKzExMSw3IEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC40NCIKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjQ3IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2Myw3ICsxNjYsOCBAQAogI2RlZmluZSBOVlJFR19JUlFfTElOSwkJCTB4MDA0MAogI2RlZmluZSBOVlJFR19JUlFfVFhfRVJST1IJCTB4MDA4MAogI2RlZmluZSBOVlJFR19JUlFfVFgxCQkJMHgwMTAwCi0jZGVmaW5lIE5WUkVHX0lSUU1BU0tfV0FOVEVECQkweDAwZGYKKyNkZWZpbmUgTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUCTB4MDBkZgorI2RlZmluZSBOVlJFR19JUlFNQVNLX0NQVQkJMHgwMDQwCiAKICNkZWZpbmUgTlZSRUdfSVJRX1VOS05PV04JKH4oTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1RYX0VSUnwgXAogCQkJCQlOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RJTUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9UWF9FUlJPUnwgXApAQCAtMTc3LDcgKzE4MSw4IEBACiAgKiBOVlJFR19QT0xMX0RFRkFVTFQ9OTcgd291bGQgcmVzdWx0IGluIGFuIGludGVydmFsIGxlbmd0aCBvZiAxIG1zCiAgKi8KIAlOdlJlZ1BvbGxpbmdJbnRlcnZhbCA9IDB4MDBjLAotI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFQJOTcwCisjZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9USFJPVUdIUFVUCTk3MAorI2RlZmluZSBOVlJFR19QT0xMX0RFRkFVTFRfQ1BVCTEzCiAJTnZSZWdNaXNjMSA9IDB4MDgwLAogI2RlZmluZSBOVlJFR19NSVNDMV9IRAkJMHgwMgogI2RlZmluZSBOVlJFR19NSVNDMV9GT1JDRQkweDNiMGYzYwpAQCAtNTM4LDYgKzU0MywyNSBAQAogICovCiBzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDU7CiAKKy8qCisgKiBPcHRpbWl6YXRpb24gY2FuIGJlIGVpdGhlciB0aHJvdXB1dCBtb2RlIG9yIGNwdSBtb2RlCisgKiAKKyAqIFRocm91Z2hwdXQgTW9kZTogRXZlcnkgdHggYW5kIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4KKyAqIENQVSBNb2RlOiBJbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuCisgKi8KKyNkZWZpbmUgTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVCAwCisjZGVmaW5lIE5WX09QVElNSVpBVElPTl9NT0RFX0NQVSAgICAgICAgMQorc3RhdGljIGludCBvcHRpbWl6YXRpb25fbW9kZSA9IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQ7CisKKy8qCisgKiBQb2xsIGludGVydmFsIGZvciB0aW1lciBpcnEKKyAqCisgKiBUaGlzIGludGVydmFsIGRldGVybWluZXMgaG93IGZyZXF1ZW50IGFuIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuCisgKiBUaGUgaXMgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldCisgKiBNaW4gPSAwLCBhbmQgTWF4ID0gNjU1MzUKKyAqLworc3RhdGljIGludCBwb2xsX2ludGVydmFsID0gLTE7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGZlX3ByaXYgKmdldF9udnByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEzMjgsNjcgKzEzNTIsNzEgQEAKIAkJCWlmICghKEZsYWdzICYgTlZfUlhfREVTQ1JJUFRPUlZBTElEKSkKIAkJCQlnb3RvIG5leHRfcGt0OwogCi0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9NSVNTRURGUkFNRSkgewotCQkJCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiAoTlZfUlhfRVJST1IxfE5WX1JYX0VSUk9SMnxOVl9SWF9FUlJPUjMpKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWF9DUkNFUlIpIHsKLQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlhfT1ZFUkZMT1cpIHsKLQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SNCkgewotCQkJCWxlbiA9IG52X2dldGxlbihkZXYsIG5wLT5yeF9za2J1ZmZbaV0tPmRhdGEsIGxlbik7Ci0JCQkJaWYgKGxlbiA8IDApIHsKKwkJCWlmIChGbGFncyAmIE5WX1JYX0VSUk9SKSB7CisJCQkJaWYgKEZsYWdzICYgTlZfUlhfTUlTU0VERlJBTUUpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKIAkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCX0KLQkJCX0KLQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycy4gKi8KLQkJCWlmIChGbGFncyAmIE5WX1JYX0ZSQU1JTkdFUlIpIHsKLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7Ci0JCQkJCWxlbi0tOworCQkJCWlmIChGbGFncyAmIChOVl9SWF9FUlJPUjF8TlZfUlhfRVJST1IyfE5WX1JYX0VSUk9SMykpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9DUkNFUlIpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9PVkVSRkxPVykgeworCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUjQpIHsKKwkJCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKKwkJCQkJaWYgKGxlbiA8IDApIHsKKwkJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJCWdvdG8gbmV4dF9wa3Q7CisJCQkJCX0KKwkJCQl9CisJCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzLiAqLworCQkJCWlmIChGbGFncyAmIE5WX1JYX0ZSQU1JTkdFUlIpIHsKKwkJCQkJaWYgKEZsYWdzICYgTlZfUlhfU1VCU1RSQUNUMSkgeworCQkJCQkJbGVuLS07CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoIShGbGFncyAmIE5WX1JYMl9ERVNDUklQVE9SVkFMSUQpKQogCQkJCWdvdG8gbmV4dF9wa3Q7CiAKLQkJCWlmIChGbGFncyAmIChOVl9SWDJfRVJST1IxfE5WX1JYMl9FUlJPUjJ8TlZfUlgyX0VSUk9SMykpIHsKLQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJZ290byBuZXh0X3BrdDsKLQkJCX0KLQkJCWlmIChGbGFncyAmIE5WX1JYMl9DUkNFUlIpIHsKLQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwotCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlnb3RvIG5leHRfcGt0OwotCQkJfQotCQkJaWYgKEZsYWdzICYgTlZfUlgyX09WRVJGTE9XKSB7Ci0JCQkJbnAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCWdvdG8gbmV4dF9wa3Q7Ci0JCQl9Ci0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1I0KSB7Ci0JCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKLQkJCQlpZiAobGVuIDwgMCkgeworCQkJaWYgKEZsYWdzICYgTlZfUlgyX0VSUk9SKSB7CisJCQkJaWYgKEZsYWdzICYgKE5WX1JYMl9FUlJPUjF8TlZfUlgyX0VSUk9SMnxOVl9SWDJfRVJST1IzKSkgewogCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJfQotCQkJfQotCQkJLyogZnJhbWluZyBlcnJvcnMgYXJlIHNvZnQgZXJyb3JzICovCi0JCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRlJBTUlOR0VSUikgewotCQkJCWlmIChGbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7Ci0JCQkJCWxlbi0tOworCQkJCWlmIChGbGFncyAmIE5WX1JYMl9DUkNFUlIpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlnb3RvIG5leHRfcGt0OworCQkJCX0KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfT1ZFUkZMT1cpIHsKKwkJCQkJbnAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQl9CisJCQkJaWYgKEZsYWdzICYgTlZfUlgyX0VSUk9SNCkgeworCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOworCQkJCQlpZiAobGVuIDwgMCkgeworCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQkJZ290byBuZXh0X3BrdDsKKwkJCQkJfQorCQkJCX0KKwkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMgKi8KKwkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRlJBTUlOR0VSUikgeworCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfU1VCU1RSQUNUMSkgeworCQkJCQkJbGVuLS07CisJCQkJCX0KIAkJCQl9CiAJCQl9CiAJCQlGbGFncyAmPSBOVl9SWDJfQ0hFQ0tTVU1NQVNLOwpAQCAtMTYxMiw2ICsxNjQwLDE3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiB9CiAKKy8qKgorICogbnZfdXBkYXRlX2xpbmtzcGVlZDogU2V0dXAgdGhlIE1BQyBhY2NvcmRpbmcgdG8gdGhlIGxpbmsgcGFydG5lcgorICogQGRldjogTmV0d29yayBkZXZpY2UgdG8gYmUgY29uZmlndXJlZAorICoKKyAqIFRoZSBmdW5jdGlvbiBxdWVyaWVzIHRoZSBQSFkgYW5kIGNoZWNrcyBpZiB0aGVyZSBpcyBhIGxpbmsgcGFydG5lci4KKyAqIElmIHllcywgdGhlbiBpdCBzZXRzIHVwIHRoZSBNQUMgYWNjb3JkaW5nbHkuIE90aGVyd2lzZSwgdGhlIE1BQyBpcworICogc2V0IHRvIDEwIE1CaXQgSEQuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBpZiB0aGVyZSBpcyBubyBsaW5rIHBhcnRuZXIgYW5kIDEgaWYgdGhlcmUgaXMKKyAqIGEgZ29vZCBsaW5rIHBhcnRuZXIuCisgKi8KIHN0YXRpYyBpbnQgbnZfdXBkYXRlX2xpbmtzcGVlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNzUxLDEzICsxNzkwLDExIEBACiBzdGF0aWMgdm9pZCBudl9saW5rY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaWYgKG52X3VwZGF0ZV9saW5rc3BlZWQoZGV2KSkgewotCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7Ci0JCQludl9zdG9wX3J4KGRldik7Ci0JCX0gZWxzZSB7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cC5cbiIsIGRldi0+bmFtZSk7CisJCQludl9zdGFydF9yeChkZXYpOwogCQl9Ci0JCW52X3N0YXJ0X3J4KGRldik7CiAJfSBlbHNlIHsKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKQEAgLTE3OTksMjIgKzE4MzYsMTggQEAKIAkJaWYgKCEoZXZlbnRzICYgbnAtPmlycW1hc2spKQogCQkJYnJlYWs7CiAKLQkJaWYgKGV2ZW50cyAmIChOVlJFR19JUlFfVFgxfE5WUkVHX0lSUV9UWF9PS3xOVlJFR19JUlFfVFhfRVJST1J8TlZSRUdfSVJRX1RYX0VSUikpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCW52X3R4X2RvbmUoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJCisJCW52X3J4X3Byb2Nlc3MoZGV2KTsKKwkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfdHhfZG9uZShkZXYpOworCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKIAkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCX0KLQotCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGKSkgewotCQkJbnZfcnhfcHJvY2VzcyhkZXYpOwotCQkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKLQkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKLQkJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKLQkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQkJfQotCQl9Ci0KKwkJCiAJCWlmIChldmVudHMgJiBOVlJFR19JUlFfTElOSykgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQludl9saW5rX2lycShkZXYpOwpAQCAtMjIxNiw3ICsyMjQ5LDE0IEBACiAJd3JpdGVsKE5WUkVHX1JORFNFRURfRk9SQ0UgfCAoaSZOVlJFR19STkRTRUVEX01BU0spLCBiYXNlICsgTnZSZWdSYW5kb21TZWVkKTsKIAl3cml0ZWwoTlZSRUdfVU5LU0VUVVAxX1ZBTCwgYmFzZSArIE52UmVnVW5rbm93blNldHVwUmVnMSk7CiAJd3JpdGVsKE5WUkVHX1VOS1NFVFVQMl9WQUwsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzIpOwotCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFQsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJaWYgKHBvbGxfaW50ZXJ2YWwgPT0gLTEpIHsKKwkJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpCisJCQl3cml0ZWwoTlZSRUdfUE9MTF9ERUZBVUxUX1RIUk9VR0hQVVQsIGJhc2UgKyBOdlJlZ1BvbGxpbmdJbnRlcnZhbCk7CisJCWVsc2UKKwkJCXdyaXRlbChOVlJFR19QT0xMX0RFRkFVTFRfQ1BVLCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOworCX0KKwllbHNlCisJCXdyaXRlbChwb2xsX2ludGVydmFsICYgMHhGRkZGLCBiYXNlICsgTnZSZWdQb2xsaW5nSW50ZXJ2YWwpOwogCXdyaXRlbChOVlJFR19VTktTRVRVUDZfVkFMLCBiYXNlICsgTnZSZWdVbmtub3duU2V0dXBSZWc2KTsKIAl3cml0ZWwoKG5wLT5waHlhZGRyIDw8IE5WUkVHX0FEQVBUQ1RMX1BIWVNISUZUKXxOVlJFR19BREFQVENUTF9QSFlWQUxJRHxOVlJFR19BREFQVENUTF9SVU5OSU5HLAogCQkJYmFzZSArIE52UmVnQWRhcHRlckNvbnRyb2wpOwpAQCAtMjUwMSw3ICsyNTQxLDExIEBACiAJfSBlbHNlIHsKIAkJbnAtPnR4X2ZsYWdzID0gTlZfVFgyX1ZBTElEOwogCX0KLQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfV0FOVEVEOworCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUKQorCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwllbHNlCisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19DUFU7CisKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfVElNRVJJUlEpCiAJCW5wLT5pcnFtYXNrIHw9IE5WUkVHX0lSUV9USU1FUjsKIAlpZiAoaWQtPmRyaXZlcl9kYXRhICYgREVWX05FRURfTElOS1RJTUVSKSB7CkBAIC0yNTE0LDE2ICsyNTU4LDE3IEBACiAJfQogCiAJLyogZmluZCBhIHN1aXRhYmxlIHBoeSAqLwotCWZvciAoaSA9IDE7IGkgPCAzMjsgaSsrKSB7CisJZm9yIChpID0gMTsgaSA8PSAzMjsgaSsrKSB7CiAJCWludCBpZDEsIGlkMjsKKwkJaW50IHBoeWFkZHIgPSBpICYgMHgxRjsKIAogCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7Ci0JCWlkMSA9IG1paV9ydyhkZXYsIGksIE1JSV9QSFlTSUQxLCBNSUlfUkVBRCk7CisJCWlkMSA9IG1paV9ydyhkZXYsIHBoeWFkZHIsIE1JSV9QSFlTSUQxLCBNSUlfUkVBRCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOwogCQlpZiAoaWQxIDwgMCB8fCBpZDEgPT0gMHhmZmZmKQogCQkJY29udGludWU7CiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKLQkJaWQyID0gbWlpX3J3KGRldiwgaSwgTUlJX1BIWVNJRDIsIE1JSV9SRUFEKTsKKwkJaWQyID0gbWlpX3J3KGRldiwgcGh5YWRkciwgTUlJX1BIWVNJRDIsIE1JSV9SRUFEKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCWlmIChpZDIgPCAwIHx8IGlkMiA9PSAweGZmZmYpCiAJCQljb250aW51ZTsKQEAgLTI1MzEsMjMgKzI1NzYsMTkgQEAKIAkJaWQxID0gKGlkMSAmIFBIWUlEMV9PVUlfTUFTSykgPDwgUEhZSUQxX09VSV9TSEZUOwogCQlpZDIgPSAoaWQyICYgUEhZSUQyX09VSV9NQVNLKSA+PiBQSFlJRDJfT1VJX1NIRlQ7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9wZW46IEZvdW5kIFBIWSAlMDR4OiUwNHggYXQgYWRkcmVzcyAlZC5cbiIsCi0JCQkJcGNpX25hbWUocGNpX2RldiksIGlkMSwgaWQyLCBpKTsKLQkJbnAtPnBoeWFkZHIgPSBpOworCQkJcGNpX25hbWUocGNpX2RldiksIGlkMSwgaWQyLCBwaHlhZGRyKTsKKwkJbnAtPnBoeWFkZHIgPSBwaHlhZGRyOwogCQlucC0+cGh5X291aSA9IGlkMSB8IGlkMjsKIAkJYnJlYWs7CiAJfQotCWlmIChpID09IDMyKSB7Ci0JCS8qIFBIWSBpbiBpc29sYXRlIG1vZGU/IE5vIHBoeSBhdHRhY2hlZCBhbmQgdXNlciB3YW50cyB0bwotCQkgKiB0ZXN0IGxvb3BiYWNrPyBWZXJ5IG9kZCwgYnV0IGNhbiBiZSBjb3JyZWN0LgotCQkgKi8KKwlpZiAoaSA9PSAzMykgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogb3BlbjogQ291bGQgbm90IGZpbmQgYSB2YWxpZCBQSFkuXG4iLAotCQkJCXBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJICAgICAgIHBjaV9uYW1lKHBjaV9kZXYpKTsKKwkJZ290byBvdXRfZnJlZXJpbmc7CiAJfQotCi0JaWYgKGkgIT0gMzIpIHsKLQkJLyogcmVzZXQgaXQgKi8KLQkJcGh5X2luaXQoZGV2KTsKLQl9CisJCisJLyogcmVzZXQgaXQgKi8KKwlwaHlfaW5pdChkZXYpOwogCiAJLyogc2V0IGRlZmF1bHQgbGluayBzcGVlZCBzZXR0aW5ncyAqLwogCW5wLT5saW5rc3BlZWQgPSBOVlJFR19MSU5LU1BFRURfRk9SQ0V8TlZSRUdfTElOS1NQRUVEXzEwOwpAQCAtMjY4OSw2ICsyNzMwLDEwIEBACiAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywgImZvcmNlZGV0aCBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKK21vZHVsZV9wYXJhbShvcHRpbWl6YXRpb25fbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mob3B0aW1pemF0aW9uX21vZGUsICJJbiB0aHJvdWdocHV0IG1vZGUgKDApLCBldmVyeSB0eCAmIHJ4IHBhY2tldCB3aWxsIGdlbmVyYXRlIGFuIGludGVycnVwdC4gSW4gQ1BVIG1vZGUgKDEpLCBpbnRlcnJ1cHRzIGFyZSBjb250cm9sbGVkIGJ5IGEgdGltZXIuIik7Cittb2R1bGVfcGFyYW0ocG9sbF9pbnRlcnZhbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbF9pbnRlcnZhbCwgIkludGVydmFsIGRldGVybWluZXMgaG93IGZyZXF1ZW50IHRpbWVyIGludGVycnVwdCBpcyBnZW5lcmF0ZWQgYnkgWyh0aW1lX2luX21pY3JvX3NlY3MgKiAxMDApIC8gKDJeMTApXS4gTWluIGlzIDAgYW5kIE1heCBpcyA2NTUzNS4iKTsKIAogTU9EVUxFX0FVVEhPUigiTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmV2ZXJzZSBFbmdpbmVlcmVkIG5Gb3JjZSBldGhlcm5ldCBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IDkzNDJkNWIuLmY1ZDQ5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCmluZGV4IGE5NDBiOTYuLmU2N2IxZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCmluZGV4IDVlZjRlODQuLjJlOGY0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZlYy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLXNjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKaW5kZXggZDhjNmU5Yy4uYTM4OTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IDU0ZDI5NGEuLmUzYTMyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTEyNiw4ICsxMjYsOCBAQAogc3RhdGljIHZvaWQgYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpbml0X3JlZ2lzdGVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGdmYXJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKK3N0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiBzdGF0aWMgdm9pZCBmcmVlX3NrYl9yZXNvdXJjZXMoc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdik7CiBzdGF0aWMgdm9pZCBnZmFyX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X2hhc2hfZm9yX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmFkZHIpOwpAQCAtMTU2LDEyICsxNTYsMTEgQEAKIAogLyogU2V0IHVwIHRoZSBldGhlcm5ldCBkZXZpY2Ugc3RydWN0dXJlLCBwcml2YXRlIGRhdGEsCiAgKiBhbmQgYW55dGhpbmcgZWxzZSB3ZSBuZWVkIGJlZm9yZSB3ZSBzdGFydCAqLwotc3RhdGljIGludCBnZmFyX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZ2Zhcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXUzMiB0ZW1wdmFsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBOVUxMOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICplaW5mbzsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJaW50IGlkeDsKQEAgLTIwOCw3ICsyMDcsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJLyogU3RvcCB0aGUgRE1BIGVuZ2luZSBub3csIGluIGNhc2UgaXQgd2FzIHJ1bm5pbmcgYmVmb3JlICovCiAJLyogKFRoZSBmaXJtd2FyZSBjb3VsZCBoYXZlIHVzZWQgaXQsIGFuZCBsZWZ0IGl0IHJ1bm5pbmcpLiAqLwpAQCAtMjQ1LDcgKzI0NCw3IEBACiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgKHByaXYtPnJlZ3MpOwogCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwotCVNFVF9ORVRERVZfREVWKGRldiwgZGV2aWNlKTsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLwogCWRldi0+b3BlbiA9IGdmYXJfZW5ldF9vcGVuOwpAQCAtMzc3LDEyICszNzYsMTIgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGdmYXJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgZ2Zhcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAlpb3VubWFwKCh2b2lkICopIHByaXYtPnJlZ3MpOwogCWZyZWVfbmV0ZGV2KGRldik7CkBAIC0xODYxLDExICsxODYwLDEyIEBACiB9CiAKIC8qIFN0cnVjdHVyZSBmb3IgYSBkZXZpY2UgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2Zhcl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZnNsLWdpYW5mYXIiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZmFyX2RyaXZlciA9IHsKIAkucHJvYmUgPSBnZmFyX3Byb2JlLAogCS5yZW1vdmUgPSBnZmFyX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZSA9ICJmc2wtZ2lhbmZhciIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGdmYXJfaW5pdCh2b2lkKQpAQCAtMTg3NSw3ICsxODc1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gZHJpdmVyX3JlZ2lzdGVyKCZnZmFyX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZnZmFyX2RyaXZlcik7CiAKIAlpZiAoZXJyKQogCQlnZmFyX21kaW9fZXhpdCgpOwpAQCAtMTg4NSw3ICsxODg1LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGdmYXJfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZnZmFyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdmYXJfZHJpdmVyKTsKIAlnZmFyX21kaW9fZXhpdCgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwppbmRleCA3MjYzMzk1Li45NTQ0Mjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCWlmIChOVUxMID09IGRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQluZXdfYnVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1paV9idXMpLCBHRlBfS0VSTkVMKTsKKwluZXdfYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1paV9idXMpLCBHRlBfS0VSTkVMKTsKIAogCWlmIChOVUxMID09IG5ld19idXMpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCmluZGV4IDY2NmNmYmIuLjU5NThhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYworKysgYi9kcml2ZXJzL25ldC9ndDk2MTAwZXRoLmMKQEAgLTcyLDggKzcyLDYgQEAKIHN0YXRpYyB2b2lkIGR1bXBfcnhfZGVzYyhpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGkpOwogc3RhdGljIHZvaWQgZHVtcF9za2IoaW50IGRiZ19sdmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1zdGF0aWMgdm9pZCBkdW1wX2h3X2FkZHIoaW50IGRiZ19sdmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgY29uc3QgY2hhciogcGZ4LCB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cik7CiBzdGF0aWMgdm9pZCB1cGRhdGVfc3RhdHMoc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3ApOwogc3RhdGljIHZvaWQgYWJvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFib3J0X2JpdHMpOwogc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzM0LDEzICszMzIsMTMgQEAKIAogc3RhdGljIHZvaWQKIGR1bXBfaHdfYWRkcihpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgY2hhciogcGZ4LAotCSAgICAgdW5zaWduZWQgY2hhciogYWRkcl9zdHIpCisJICAgICBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cikKIHsKIAlpbnQgaTsKIAljaGFyIGJ1ZlsxMDBdLCBvY3RldFs1XTsKICAgICAKIAlpZiAoZGJnX2x2bCA8PSBHVDk2MTAwX0RFQlVHKSB7Ci0JCXN0cmNweShidWYsIHBmeCk7CisJCXNwcmludGYoYnVmLCBwZngsIGZ1bmMpOwogCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCQlzcHJpbnRmKG9jdGV0LCAiJTIuMnglcyIsCiAJCQkJYWRkcl9zdHJbaV0sIGk8NSA/ICI6IiA6ICJcbiIpOwpAQCAtNzA4LDcgKzcwNiw3IEBACiAKIAlpbmZvKCIlcyBmb3VuZCBhdCAweCV4LCBpcnEgJWRcbiIsCiAJICAgICBjaGlwX25hbWUoZ3AtPmNoaXBfcmV2KSwgZ3RpZi0+aW9iYXNlLCBndGlmLT5pcnEpOwotCWR1bXBfaHdfYWRkcigwLCBkZXYsICJIVyBBZGRyZXNzICIsIGRldi0+ZGV2X2FkZHIpOworCWR1bXBfaHdfYWRkcigwLCBkZXYsICIlczogSFcgQWRkcmVzcyAiLCBfX0ZVTkNUSU9OX18sIGRldi0+ZGV2X2FkZHIpOwogCWluZm8oIiVzIGNoaXAgcmV2aXNpb249JWRcbiIsIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBncC0+Y2hpcF9yZXYpOwogCWluZm8oIiVzIGV0aGVybmV0IHBvcnQgJWRcbiIsIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBncC0+cG9ydF9udW0pOwogCWluZm8oImV4dGVybmFsIFBIWSBJRDE9MHglMDR4LCBJRDI9MHglMDR4XG4iLCBwaHlfaWQxLCBwaHlfaWQyKTsKQEAgLTE0ODgsNyArMTQ4Niw3IEBACiAJCWd0OTYxMDBfYWRkX2hhc2hfZW50cnkoZGV2LCBkZXYtPmRldl9hZGRyKTsKIAogCQlmb3IgKG1jcHRyID0gZGV2LT5tY19saXN0OyBtY3B0cjsgbWNwdHIgPSBtY3B0ci0+bmV4dCkgewotCQkJZHVtcF9od19hZGRyKDIsIGRldiwgX19GVU5DVElPTl9fICI6IGFkZHI9IiwKKwkJCWR1bXBfaHdfYWRkcigyLCBkZXYsICIlczogYWRkcj0iLCBfX0ZVTkNUSU9OX18sCiAJCQkJICAgICBtY3B0ci0+ZG1pX2FkZHIpOwogCQkJZ3Q5NjEwMF9hZGRfaGFzaF9lbnRyeShkZXYsIG1jcHRyLT5kbWlfYWRkcik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCBiZTE5MWQ4Li5jZWI5OGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC01OCw3ICs1OCw3IEBACiAKICNpbmNsdWRlICJpYm12ZXRoLmgiCiAKLSNkZWZpbmUgREVCVUcgMQorI3VuZGVmIERFQlVHCiAKICNkZWZpbmUgaWJtdmV0aF9wcmludGsoZm10LCBhcmdzLi4uKSBcCiAgIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCwgX19GSUxFX18sICMjIGFyZ3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwppbmRleCA3NmUwYjlmLi42M2QzOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKQEAgLTI5MSw5ICsyOTEsOSBAQAogLyoKICAqIFN1c3BlbmQgdGhlIElyREEgaW50ZXJmYWNlLgogICovCi1zdGF0aWMgaW50IHNhMTEwMF9pcmRhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMDBfaXJkYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc2ExMTAwX2lyZGEgKnNpOwogCiAJaWYgKCFkZXYpCkBAIC0zMTYsOSArMzE2LDkgQEAKIC8qCiAgKiBSZXN1bWUgdGhlIElyREEgaW50ZXJmYWNlLgogICovCi1zdGF0aWMgaW50IHNhMTEwMF9pcmRhX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfaXJkYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc2ExMTAwX2lyZGEgKnNpOwogCiAJaWYgKCFkZXYpCkBAIC04ODYsOSArODg2LDggQEAKIAlyZXR1cm4gaW8tPmhlYWQgPyAwIDogLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBzYTExMDBfaXJkYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfaXJkYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2ExMTAwX2lyZGEgKnNpOwogCXVuc2lnbmVkIGludCBiYXVkcmF0ZV9tYXNrOwpAQCAtOTY3LDcgKzk2Niw3IEBACiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyID09IDApCi0JCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBkZXYpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJaWYgKGVycikgewogIGVycl9tZW1fNToKQEAgLTk4NSw5ICs5ODQsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX2lyZGFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9pcmRhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKGRldikgewogCQlzdHJ1Y3Qgc2ExMTAwX2lyZGEgKnNpID0gZGV2LT5wcml2OwpAQCAtMTAwNCwxMyArMTAwMywxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTAwaXJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtaXIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMTAwaXJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfaXJkYV9wcm9iZSwKIAkucmVtb3ZlCQk9IHNhMTEwMF9pcmRhX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNhMTEwMF9pcmRhX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzYTExMDBfaXJkYV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNhMTF4MC1pciIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMF9pcmRhX2luaXQodm9pZCkKQEAgLTEwMjMsMTIgKzEwMjMsMTIgQEAKIAlpZiAocG93ZXJfbGV2ZWwgPiAzKQogCQlwb3dlcl9sZXZlbCA9IDM7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBpcl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTEwMGlyX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExMDBfaXJkYV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMGlyX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTEwMGlyX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNhMTEwMF9pcmRhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwppbmRleCBhMWQyMDdmLi5lYzk0ZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYwpAQCAtMjE0LDE0ICsyMTQsMTUgQEAKIAogLyogUG93ZXIgTWFuYWdlbWVudCAqLwogCi1zdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKLXN0YXRpYyBpbnQgc21zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbXNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitzdGF0aWMgaW50IHNtc2NfaXJjY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNtc2NfaXJjY19kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gU01TQ19JUkNDMl9EUklWRVJfTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtc2NfaXJjY19kcml2ZXIgPSB7CiAJLnN1c3BlbmQJPSBzbXNjX2lyY2Nfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNtc2NfaXJjY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gU01TQ19JUkNDMl9EUklWRVJfTkFNRSwKKwl9LAogfTsKIAogLyogVHJhbnNjZWl2ZXJzIGZvciBTTVNDLWlyY2MgKi8KQEAgLTM0Niw3ICszNDcsNyBAQAogCiAJSVJEQV9ERUJVRygxLCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CiAJaWYgKHJldCkgewogCQlJUkRBX0VSUk9SKCIlcywgQ2FuJ3QgcmVnaXN0ZXIgZHJpdmVyIVxuIiwgZHJpdmVyX25hbWUpOwogCQlyZXR1cm4gcmV0OwpAQCAtMzc4LDcgKzM3OSw3IEBACiAJfQogCiAJaWYgKHJldCkKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkxLDcgKzQ5Miw3IEBACiAJCWVyciA9IFBUUl9FUlIoc2VsZi0+cGxkZXYpOwogCQlnb3RvIGVycl9vdXQ1OwogCX0KLQlkZXZfc2V0X2RydmRhdGEoJnNlbGYtPnBsZGV2LT5kZXYsIHNlbGYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHNlbGYtPnBsZGV2LCBzZWxmKTsKIAogCUlSREFfTUVTU0FHRSgiSXJEQTogUmVnaXN0ZXJlZCBkZXZpY2UgJXNcbiIsIGRldi0+bmFtZSk7CiAJZGV2X2NvdW50Kys7CkBAIC0xNjg1LDkgKzE2ODYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNtc2NfaXJjY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbXNjX2lyY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoIXNlbGYtPmlvLnN1c3BlbmRlZCkgewogCQlJUkRBX0RFQlVHKDEsICIlcywgU3VzcGVuZGluZ1xuIiwgZHJpdmVyX25hbWUpOwpAQCAtMTcwNiw5ICsxNzA3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbXNjX2lyY2NfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc21zY19pcmNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNtc2NfaXJjY19jYiAqc2VsZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzbXNjX2lyY2NfY2IgKnNlbGYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNlbGYtPmlvLnN1c3BlbmRlZCkgewogCQlJUkRBX0RFQlVHKDEsICIlcywgV2FraW5nIHVwXG4iLCBkcml2ZXJfbmFtZSk7CkBAIC0xNzg4LDcgKzE3ODksNyBAQAogCQkJc21zY19pcmNjX2Nsb3NlKGRldl9zZWxmW2ldKTsKIAl9CiAKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc21zY19pcmNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtc2NfaXJjY19kcml2ZXIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwppbmRleCAyZmIzMTAxLi5iMDM5YmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qYXp6c29uaWMuYworKysgYi9kcml2ZXJzL25ldC9qYXp6c29uaWMuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAgKiBQcm9iZSBmb3IgYSBTT05JQyBldGhlcm5ldCBjb250cm9sbGVyIG9uIGEgTWlwcyBKYXp6IGJvYXJkLgogICogQWN0dWFsbHkgcHJvYmluZyBpcyBzdXBlcmZsdW91cyBidXQgd2UncmUgcGFyYW5vaWQuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGphenpfc29uaWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgamF6el9zb25pY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNvbmljX2xvY2FsICpscDsKQEAgLTIxMiw4ICsyMTIsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlscC0+ZGV2aWNlID0gZGV2aWNlOwotCVNFVF9ORVRERVZfREVWKGRldiwgZGV2aWNlKTsKKwlscC0+ZGV2aWNlID0gJnBkZXYtPmRldjsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKIAluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwpAQCAtMjY0LDkgKzI2NCw5IEBACiAKICNpbmNsdWRlICJzb25pYy5jIgogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBqYXp6X3NvbmljX2RldmljZV9yZW1vdmUgKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGphenpfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2aWNlLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHNvbmljX2xvY2FsKiBscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKQEAgLTI3OCwxOCArMjc4LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBqYXp6X3NvbmljX2RyaXZlciA9IHsKLQkubmFtZQk9IGphenpfc29uaWNfc3RyaW5nLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBqYXp6X3NvbmljX2RyaXZlciA9IHsKIAkucHJvYmUJPSBqYXp6X3NvbmljX3Byb2JlLAogCS5yZW1vdmUJPSBfX2RldmV4aXRfcChqYXp6X3NvbmljX2RldmljZV9yZW1vdmUpLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gamF6el9zb25pY19zdHJpbmcsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGphenpfc29uaWNfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmphenpfc29uaWNfZHJpdmVyKSkpIHsKKwlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmamF6el9zb25pY19kcml2ZXIpKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0zMTMsNyArMzE0LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGphenpfc29uaWNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmamF6el9zb25pY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZqYXp6X3NvbmljX2RyaXZlcik7CiAKIAlpZiAoamF6el9zb25pY19kZXZpY2UpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoamF6el9zb25pY19kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggOWVmNDU5Mi4uMDJkNWM2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC01MjUsNyArNTI1LDcgQEAKIAlyZXR1cm4gbWFjc29uaWNfaW5pdChkZXYpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBtYWNfc29uaWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgbWFjX3NvbmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzb25pY19sb2NhbCAqbHA7CkBAIC01MzcsOCArNTM3LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlscCA9IG5ldGRldl9wcml2KGRldik7Ci0JbHAtPmRldmljZSA9IGRldmljZTsKLQlTRVRfTkVUREVWX0RFVihkZXYsIGRldmljZSk7CisJbHAtPmRldmljZSA9ICZkZXZpY2UtPmRldjsKKwlTRVRfTkVUREVWX0RFVihkZXYsICZkZXZpY2UtPmRldik7CiAgCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCS8qIFRoaXMgd2lsbCBjYXRjaCBmYXRhbCBzdHVmZiBsaWtlIC1FTk9NRU0gYXMgd2VsbCBhcyBzdWNjZXNzICovCkBAIC01NzksOSArNTc5LDkgQEAKIAogI2luY2x1ZGUgInNvbmljLmMiCiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1hY19zb25pY19kZXZpY2VfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYWNfc29uaWNfZGV2aWNlX3JlbW92ZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCXN0cnVjdCBzb25pY19sb2NhbCogbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYgKGRldik7CkBAIC01OTIsMTggKzU5MiwxOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgbWFjX3NvbmljX2RyaXZlciA9IHsKLQkubmFtZSAgID0gbWFjX3NvbmljX3N0cmluZywKLQkuYnVzICAgID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWFjX3NvbmljX2RyaXZlciA9IHsKIAkucHJvYmUgID0gbWFjX3NvbmljX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYWNfc29uaWNfZGV2aWNlX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSBtYWNfc29uaWNfc3RyaW5nLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtYWNfc29uaWNfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JaWYgKChlcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpKSkgeworCWlmICgoZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYWNfc29uaWNfZHJpdmVyKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJEcml2ZXIgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtNjI4LDcgKzYyOSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtYWNfc29uaWNfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWFjX3NvbmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1hY19zb25pY19kcml2ZXIpOwogCiAJaWYgKG1hY19zb25pY19kZXZpY2UpIHsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWFjX3NvbmljX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCA3MWYyYzY3Li4zY2I5YjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTEzODcsOSArMTM4Nyw4IEBACiAgKiBJbnB1dCA6CXN0cnVjdCBkZXZpY2UgKgogICogT3V0cHV0IDoJLUVOT01FTSBpZiBmYWlsZWQgLCAwIGlmIHN1Y2Nlc3MKICAqLwotc3RhdGljIGludCBtdjY0M3h4X2V0aF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZGV2KQorc3RhdGljIGludCBtdjY0M3h4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGRldik7CiAJc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKnBkOwogCWludCBwb3J0X251bSA9IHBkZXYtPmlkOwogCXN0cnVjdCBtdjY0M3h4X3ByaXZhdGUgKm1wOwpAQCAtMTQwMiw3ICsxNDAxLDcgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlkZXZfc2V0X2RydmRhdGEoZGRldiwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xNTQ2LDIxICsxNTQ1LDIwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlmcmVlX25ldGRldihkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcHJvYmUoc3RydWN0IGRldmljZSAqZGRldikKK3N0YXRpYyBpbnQgbXY2NDN4eF9ldGhfc2hhcmVkX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZGV2KTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCXByaW50ayhLRVJOX05PVElDRSAiTVYtNjQzeHggMTAvMTAwLzEwMDAgRXRoZXJuZXQgRHJpdmVyXG4iKTsKQEAgLTE1NzgsNyArMTU3Niw3IEBACiAKIH0KIAotc3RhdGljIGludCBtdjY0M3h4X2V0aF9zaGFyZWRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRkZXYpCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3NoYXJlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpb3VubWFwKG12NjQzeHhfZXRoX3NoYXJlZF9iYXNlKTsKIAltdjY0M3h4X2V0aF9zaGFyZWRfYmFzZSA9IE5VTEw7CkBAIC0xNTg2LDE4ICsxNTg0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0M3h4X2V0aF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBNVjY0M1hYX0VUSF9OQU1FLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdjY0M3h4X2V0aF9kcml2ZXIgPSB7CiAJLnByb2JlID0gbXY2NDN4eF9ldGhfcHJvYmUsCiAJLnJlbW92ZSA9IG12NjQzeHhfZXRoX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9IE1WNjQzWFhfRVRIX05BTUUsCisJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyID0gewotCS5uYW1lID0gTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIgPSB7CiAJLnByb2JlID0gbXY2NDN4eF9ldGhfc2hhcmVkX3Byb2JlLAogCS5yZW1vdmUgPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gTVY2NDNYWF9FVEhfU0hBUkVEX05BTUUsCisJfSwKIH07CiAKIC8qCkBAIC0xNjEzLDExICsxNjEzLDExIEBACiB7CiAJaW50IHJjOwogCi0JcmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKIAlpZiAoIXJjKSB7Ci0JCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOworCQlyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXY2NDN4eF9ldGhfZHJpdmVyKTsKIAkJaWYgKHJjKQotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12NjQzeHhfZXRoX3NoYXJlZF9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC0xNjMzLDggKzE2MzMsOCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXY2NDN4eF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9kcml2ZXIpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZtdjY0M3h4X2V0aF9zaGFyZWRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXY2NDN4eF9ldGhfc2hhcmVkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG12NjQzeHhfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2FhOTczMC5jIGIvZHJpdmVycy9uZXQvc2FhOTczMC5jCmluZGV4IDExMGU3NzcuLmIyYWNlZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NhYTk3MzAuYworKysgYi9kcml2ZXJzL25ldC9zYWE5NzMwLmMKQEAgLTEsOCArMSw4IEBACiAvKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDUgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgorICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCkBAIC0xNywxNSArMTcsMTMgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAogICogIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqCi0gKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAqCiAgKiBTQUE5NzMwIGV0aGVybmV0IGRyaXZlci4KICAqCiAgKiBDaGFuZ2VzOgotICogQW5nZWxvIERlbGwnQWVyYSA8YnVmZmVyQGFudGlmb3JrLm9yZz4gOiBDb252ZXJzaW9uIHRvIHRoZSBuZXcgUENJIEFQSSAocGNpX2RyaXZlcikuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb24gdG8gc3BpbmxvY2tzLgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBoYW5kbGluZyBmaXhlcy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogQW5nZWxvIERlbGwnQWVyYSA8YnVmZmVyQGFudGlmb3JrLm9yZz4gOglDb252ZXJzaW9uIHRvIHRoZSBuZXcgUENJIEFQSQorICoJCQkJCQkocGNpX2RyaXZlcikuCisgKgkJCQkJCUNvbnZlcnNpb24gdG8gc3BpbmxvY2tzLgorICoJCQkJCQlFcnJvciBoYW5kbGluZyBmaXhlcy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzYsOCArMzQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvcHJvbS5oPgogCiAjaW5jbHVkZSAic2FhOTczMC5oIgpAQCAtNTEsOCArNTIsOCBAQAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUgInNhYTk3MzAiCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzYWE5NzMwX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfUEhJTElQUywgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTkzNzAsCi0gICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCisJeyBQQ0lfVkVORE9SX0lEX1BISUxJUFMsIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE5NzMwLAorCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyAwLCB9CiB9OwogCkBAIC02MSw1MCArNjIsNDggQEAKIC8qIE5vbi16ZXJvIG9ubHkgaWYgdGhlIGN1cnJlbnQgY2FyZCBpcyBhIFBDSSB3aXRoIEJJT1Mtc2V0IElSUS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX2lycV9saW5lOwogCi0jZGVmaW5lIElOTChhKSAgICAgaW5sKCh1bnNpZ25lZCBsb25nKWEpCi0jZGVmaW5lIE9VVEwoeCxhKSAgb3V0bCh4LCh1bnNpZ25lZCBsb25nKWEpCi0KIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2VuYWJsZV9sYW5faW50KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkgfCBFVk1fTEFOX0lOVCwKKwlvdXRsKHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpOwotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkgfCBFVk1fTEFOX0lOVCwKKwlvdXRsKHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkgfCBFVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSk7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSB8IEVWTV9MQU5fSU5UIHwKKwlvdXRsKHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSkgfCBFVk1fTEFOX0lOVCB8CiAJICAgICBFVk1fTUFTVEVSX0VOLCAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpOwogfQorCiBzdGF0aWMgdm9pZCBldm1fc2FhOTczMF9kaXNhYmxlX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSAmIH5FVk1fTEFOX0lOVCwKKwlvdXRsKHJlYWRsKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSAmIH5FVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKTsKLQlPVVRMKElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpICYgfkVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSAmIH5FVk1fTEFOX0lOVCwKIAkgICAgICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0RW5hYmxlMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV2bV9zYWE5NzMwX2NsZWFyX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoRVZNX0xBTl9JTlQsICZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSk7CisJb3V0bChFVk1fTEFOX0lOVCwgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRTdGF0dXMxKTsKIH0KIAogc3RhdGljIHZvaWQgZXZtX3NhYTk3MzBfYmxvY2tfbGFuX2ludChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7Ci0JT1VUTChJTkwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpICYgfkVWTV9MQU5fSU5ULAogCSAgICAgJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpOwogfQogCiBzdGF0aWMgdm9pZCBldm1fc2FhOTczMF91bmJsb2NrX2xhbl9pbnQoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwKQogewotCU9VVEwoSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxKSB8IEVWTV9MQU5fSU5ULAorCW91dGwocmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRCbG9jazEpIHwgRVZNX0xBTl9JTlQsCiAJICAgICAmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNob3dfc2FhOTczMF9yZWdzKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX3VzZWRfXyBzaG93X3NhYTk3MzBfcmVncyhzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7CiAJaW50IGksIGo7Ci0JcHJpbnRrKCJUeG1CdWZmZXJBID0gJXhcbiIsIGxwLT5UeG1CdWZmZXJbMF1bMF0pOwotCXByaW50aygiVHhtQnVmZmVyQiA9ICV4XG4iLCBscC0+VHhtQnVmZmVyWzFdWzBdKTsKLQlwcmludGsoIlJjdkJ1ZmZlckEgPSAleFxuIiwgbHAtPlJjdkJ1ZmZlclswXVswXSk7Ci0JcHJpbnRrKCJSY3ZCdWZmZXJCID0gJXhcbiIsIGxwLT5SY3ZCdWZmZXJbMV1bMF0pOworCXByaW50aygiVHhtQnVmZmVyQSA9ICVwXG4iLCBscC0+VHhtQnVmZmVyWzBdWzBdKTsKKwlwcmludGsoIlR4bUJ1ZmZlckIgPSAlcFxuIiwgbHAtPlR4bUJ1ZmZlclsxXVswXSk7CisJcHJpbnRrKCJSY3ZCdWZmZXJBID0gJXBcbiIsIGxwLT5SY3ZCdWZmZXJbMF1bMF0pOworCXByaW50aygiUmN2QnVmZmVyQiA9ICVwXG4iLCBscC0+UmN2QnVmZmVyWzFdWzBdKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQlVGRkVSUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBMQU5fU0FBOTczMF9UWE1fUV9TSVpFOyBqKyspIHsKIAkJCXByaW50aygiVHhtQnVmZmVyWyVkXVslZF0gPSAleFxuIiwgaSwgaiwKQEAgLTEyMCwxMyArMTE5LDEzIEBACiAJCX0KIAl9CiAJcHJpbnRrKCJscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0QmxvY2sxID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkpOworCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEJsb2NrMSkpOwogCXByaW50aygibHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+ZXZtX3NhYTk3MzBfcmVncy0+SW50ZXJydXB0U3RhdHVzMSkpOworCSAgICAgICByZWFkbCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdFN0YXR1czEpKTsKIAlwcmludGsoImxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmV2bV9zYWE5NzMwX3JlZ3MtPkludGVycnVwdEVuYWJsZTEpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5ldm1fc2FhOTczMF9yZWdzLT5JbnRlcnJ1cHRFbmFibGUxKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSkpOwogCXByaW50aygibHAtPk5leHRUeG1CdWZmZXJJbmRleCA9ICV4XG4iLCBscC0+TmV4dFR4bUJ1ZmZlckluZGV4KTsKIAlwcmludGsoImxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAleFxuIiwgbHAtPk5leHRUeG1QYWNrZXRJbmRleCk7CiAJcHJpbnRrKCJscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4ID0gJXhcbiIsCkBAIC0xMzQsMjMgKzEzMywyMyBAQAogCXByaW50aygibHAtPlBlbmRpbmdUeG1QYWNrZXRJbmRleCA9ICV4XG4iLAogCSAgICAgICBscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4KTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1DdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhTdGF0dXMgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhTdGF0dXMpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeFN0YXR1cykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeFN0YXR1cyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeFN0YXR1cykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4U3RhdHVzKSk7CiAJZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0NBTV9EV09SRFM7IGkrKykgewotCQlPVVRMKGksICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQWRkcmVzcyk7CisJCW91dGwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKIAkJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRGF0YSA9ICV4XG4iLAotCQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRGF0YSkpOworCQkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKSk7CiAJfQogCXByaW50aygibHAtPnN0YXRzLnR4X3BhY2tldHMgPSAlbHhcbiIsIGxwLT5zdGF0cy50eF9wYWNrZXRzKTsKIAlwcmludGsoImxwLT5zdGF0cy50eF9lcnJvcnMgPSAlbHhcbiIsIGxwLT5zdGF0cy50eF9lcnJvcnMpOwpAQCAtMTc4LDE3ICsxNzcsMTcgQEAKIAkgICAgICAgbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMpOwogCiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdQQ0lNYXN0ZXJBZGRyID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnUENJTWFzdGVyQWRkcikpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnUENJTWFzdGVyQWRkcikpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhTdGF0ZU1hY2hpbmUgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeFN0YXRlTWFjaGluZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuVHhTdGF0ZU1hY2hpbmUpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4U3RhdGVNYWNoaW5lID0gJXhcbiIsCi0JICAgICAgIElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhTdGF0ZU1hY2hpbmUpKTsKKwkgICAgICAgcmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblJ4U3RhdGVNYWNoaW5lKSk7CiAJcHJpbnRrKCJscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeEZpZm9Qb2ludGVycyA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhblR4Rmlmb1BvaW50ZXJzKSk7CisJICAgICAgIHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5UeEZpZm9Qb2ludGVycykpOwogCXByaW50aygibHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhGaWZvUG9pbnRlcnMgPSAleFxuIiwKLQkgICAgICAgSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RGVidWdMYW5SeEZpZm9Qb2ludGVycykpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuUnhGaWZvUG9pbnRlcnMpKTsKIAlwcmludGsoImxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhbkN0bFN0YXRlTWFjaGluZSA9ICV4XG4iLAotCSAgICAgICBJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EZWJ1Z0xhbkN0bFN0YXRlTWFjaGluZSkpOworCSAgICAgICByZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRlYnVnTGFuQ3RsU3RhdGVNYWNoaW5lKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX2J1ZmZlcl9pbml0KHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKQEAgLTIxNCw5OCArMjEzLDEwOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBsYW5fc2FhOTczMF9hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKK3N0YXRpYyB2b2lkIGxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgIHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKIHsKLQl1bnNpZ25lZCBpbnQgbWVtX3NpemU7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBscC0+YnVmZmVyX3NpemUsIGxwLT5idWZmZXJfc3RhcnQsCisJCQkgICAgbHAtPmRtYV9hZGRyKTsKK30KKworc3RhdGljIGludCBsYW5fc2FhOTczMF9hbGxvY2F0ZV9idWZmZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCit7CiAJdm9pZCAqUGE7Ci0JdW5zaWduZWQgaW50IGksIGosIFJjdkJ1ZmZlclNpemUsIFR4bUJ1ZmZlclNpemU7Ci0JdW5zaWduZWQgaW50IGJ1ZmZlcl9zdGFydDsKLQotCS8qIAotCSAqIEFsbG9jYXRlIGFsbCBSWCBhbmQgVFggcGFja2V0cyBpbiBvbmUgY2h1bmsuIAotCSAqIFRoZSBSeCBhbmQgVHggcGFja2V0cyBtdXN0IGJlIFBBQ0tFVF9TSVpFIGFsaWduZWQuCi0JICovCi0JbWVtX3NpemUgPSAoKExBTl9TQUE5NzMwX1JDVl9RX1NJWkUgKyBMQU5fU0FBOTczMF9UWE1fUV9TSVpFKSAqCi0JCSAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAqIExBTl9TQUE5NzMwX0JVRkZFUlMpICsKLQkgICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkU7Ci0JYnVmZmVyX3N0YXJ0ID0KLQkgICAgKHVuc2lnbmVkIGludCkga21hbGxvYyhtZW1fc2l6ZSwgR0ZQX0RNQSB8IEdGUF9LRVJORUwpOwotCi0JaWYgKCFidWZmZXJfc3RhcnQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogCi0JICogU2V0IERNQSBidWZmZXIgdG8ga3NlZzEgKHVuY2FjaGVkKS4KLQkgKiBNYWtlIHN1cmUgdG8gZmx1c2ggYmVmb3JlIHVzaW5nIGl0IHVuY2FjaGVkLgotCSAqLwotCVBhID0gKHZvaWQgKikgS1NFRzFBRERSKChidWZmZXJfc3RhcnQgKyBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSkgJgotCQkJCX4oTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUgLSAxKSk7Ci0JZG1hX2NhY2hlX3diYWNrX2ludigodW5zaWduZWQgbG9uZykgUGEsIG1lbV9zaXplKTsKKwl1bnNpZ25lZCBpbnQgaSwgaiwgcnhvZmZzZXQsIHR4b2Zmc2V0OworCWludCByZXQ7CiAKIAkvKiBJbml0aWFsaXplIGJ1ZmZlciBzcGFjZSAqLwotCVJjdkJ1ZmZlclNpemUgPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKLQlUeG1CdWZmZXJTaXplID0gTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkU7CiAJbHAtPkRtYVJjdlBhY2tldHMgPSBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFOwogCWxwLT5EbWFUeG1QYWNrZXRzID0gTEFOX1NBQTk3MzBfVFhNX1FfU0laRTsKIAorCS8qIEluaXRpYWxpemUgUnggQnVmZmVyIEluZGV4ICovCisJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7CisJbHAtPk5leHRSY3ZCdWZmZXJJbmRleCA9IDA7CisKKwkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYWJsZSBwYWNrZXQgaW5kZXggKi8KKwlscC0+TmV4dFR4bVBhY2tldEluZGV4ID0gMDsKKwlscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gMDsKKwlscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gMDsKKwlscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4ID0gMDsKKworCS8qCisJICogQWxsb2NhdGUgYWxsIFJYIGFuZCBUWCBwYWNrZXRzIGluIG9uZSBjaHVuay4KKwkgKiBUaGUgUnggYW5kIFR4IHBhY2tldHMgbXVzdCBiZSBQQUNLRVRfU0laRSBhbGlnbmVkLgorCSAqLworCWxwLT5idWZmZXJfc2l6ZSA9ICgoTEFOX1NBQTk3MzBfUkNWX1FfU0laRSArIExBTl9TQUE5NzMwX1RYTV9RX1NJWkUpICoKKwkJCSAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfQlVGRkVSUykgKworCQkJICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKKwlscC0+YnVmZmVyX3N0YXJ0ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgbHAtPmJ1ZmZlcl9zaXplLAorCQkJCQkJJmxwLT5kbWFfYWRkcik7CisJaWYgKCFscC0+YnVmZmVyX3N0YXJ0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCVBhID0gKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZylscC0+YnVmZmVyX3N0YXJ0LAorCQkJICAgTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkUpOworCisJcnhvZmZzZXQgPSBQYSAtIGxwLT5idWZmZXJfc3RhcnQ7CisKIAkvKiBJbml0IFJYIGJ1ZmZlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTEFOX1NBQTk3MzBfQlVGRkVSUzsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCBMQU5fU0FBOTczMF9SQ1ZfUV9TSVpFOyBqKyspIHsKIAkJCSoodW5zaWduZWQgaW50ICopIFBhID0KIAkJCSAgICBjcHVfdG9fbGUzMihSWFNGX1JFQURZIDw8CiAJCQkJCVJYX1NUQVRfQ1RMX09XTkVSX1NIRik7Ci0JCQlscC0+UmN2QnVmZmVyW2ldW2pdID0gKHVuc2lnbmVkIGludCkgUGE7Ci0JCQlQYSArPSBSY3ZCdWZmZXJTaXplOworCQkJbHAtPlJjdkJ1ZmZlcltpXVtqXSA9IFBhOworCQkJUGEgKz0gTEFOX1NBQTk3MzBfUEFDS0VUX1NJWkU7CiAJCX0KIAl9CiAKKwl0eG9mZnNldCA9IFBhIC0gbHAtPmJ1ZmZlcl9zdGFydDsKKwogCS8qIEluaXQgVFggYnVmZmVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBMQU5fU0FBOTczMF9CVUZGRVJTOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IExBTl9TQUE5NzMwX1RYTV9RX1NJWkU7IGorKykgewogCQkJKih1bnNpZ25lZCBpbnQgKikgUGEgPQogCQkJICAgIGNwdV90b19sZTMyKFRYU0ZfRU1QVFkgPDwKIAkJCQkJVFhfU1RBVF9DVExfT1dORVJfU0hGKTsKLQkJCWxwLT5UeG1CdWZmZXJbaV1bal0gPSAodW5zaWduZWQgaW50KSBQYTsKLQkJCVBhICs9IFR4bUJ1ZmZlclNpemU7CisJCQlscC0+VHhtQnVmZmVyW2ldW2pdID0gUGE7CisJCQlQYSArPSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRTsKIAkJfQogCX0KIAotCS8qIAotCSAqIFNldCByeCBidWZmZXIgQSBhbmQgcnggYnVmZmVyIEIgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IHR3byBidWZmZXIgCisJLyoKKwkgKiBTZXQgcnggYnVmZmVyIEEgYW5kIHJ4IGJ1ZmZlciBCIHRvIHBvaW50IHRvIHRoZSBmaXJzdCB0d28gYnVmZmVyCiAJICogc3BhY2VzLgogCSAqLwotCU9VVEwoUEhZU0FERFIobHAtPlJjdkJ1ZmZlclswXVswXSksCisJb3V0bChscC0+ZG1hX2FkZHIgKyByeG9mZnNldCwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhCdWZmQSk7Ci0JT1VUTChQSFlTQUREUihscC0+UmN2QnVmZmVyWzFdWzBdKSwKKwlvdXRsKGxwLT5kbWFfYWRkciArIHJ4b2Zmc2V0ICsKKwkgICAgIExBTl9TQUE5NzMwX1BBQ0tFVF9TSVpFICogTEFOX1NBQTk3MzBfUkNWX1FfU0laRSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhCdWZmQik7CiAKLQkvKiBJbml0aWFsaXplIEJ1ZmZlciBJbmRleCAqLwotCWxwLT5OZXh0UmN2UGFja2V0SW5kZXggPSAwOwotCWxwLT5OZXh0UmN2VG9Vc2VJc0EgPSAxOwotCi0JLyogU2V0IGN1cnJlbnQgYnVmZmVyIGluZGV4ICYgbmV4dCBhdmFpbGJsZSBwYWNrZXQgaW5kZXggKi8KLQlscC0+TmV4dFR4bVBhY2tldEluZGV4ID0gMDsKLQlscC0+TmV4dFR4bUJ1ZmZlckluZGV4ID0gMDsKLQlscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4ID0gMDsKLQlscC0+UGVuZGluZ1R4bUJ1ZmZlckluZGV4ID0gMDsKLQotCS8qIAorCS8qCiAJICogU2V0IHR4bV9idWZfYSBhbmQgdHhtX2J1Zl9iIHRvIHBvaW50IHRvIHRoZSBmaXJzdCB0d28gYnVmZmVyCi0JICogc3BhY2UgCisJICogc3BhY2UKIAkgKi8KLQlPVVRMKFBIWVNBRERSKGxwLT5UeG1CdWZmZXJbMF1bMF0pLAorCW91dGwobHAtPmRtYV9hZGRyICsgdHhvZmZzZXQsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4QnVmZkEpOwotCU9VVEwoUEhZU0FERFIobHAtPlR4bUJ1ZmZlclsxXVswXSksCisJb3V0bChscC0+ZG1hX2FkZHIgKyB0eG9mZnNldCArCisJICAgICBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAqIExBTl9TQUE5NzMwX1RYTV9RX1NJWkUsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4QnVmZkIpOwogCiAJLyogU2V0IHBhY2tldCBudW1iZXIgKi8KLQlPVVRMKChscC0+RG1hUmN2UGFja2V0cyA8PCBQS19DT1VOVF9SWF9BX1NIRikgfAorCW91dGwoKGxwLT5EbWFSY3ZQYWNrZXRzIDw8IFBLX0NPVU5UX1JYX0FfU0hGKSB8CiAJICAgICAobHAtPkRtYVJjdlBhY2tldHMgPDwgUEtfQ09VTlRfUlhfQl9TSEYpIHwKIAkgICAgIChscC0+RG1hVHhtUGFja2V0cyA8PCBQS19DT1VOVF9UWF9BX1NIRikgfAogCSAgICAgKGxwLT5EbWFUeG1QYWNrZXRzIDw8IFBLX0NPVU5UX1RYX0JfU0hGKSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UGFja2V0Q291bnQpOwogCiAJcmV0dXJuIDA7CisKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2NhbV9sb2FkKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCkKQEAgLTMxNyw4ICszMjYsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IExBTl9TQUE5NzMwX0NBTV9EV09SRFM7IGkrKykgewogCQkvKiBGaXJzdCBzZXQgYWRkcmVzcyB0byB3aGVyZSBkYXRhIGlzIHdyaXR0ZW4gKi8KLQkJT1VUTChpLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUFkZHJlc3MpOwotCQlPVVRMKChOZXR3b3JrQWRkcmVzc1swXSA8PCAyNCkgfCAoTmV0d29ya0FkZHJlc3NbMV0gPDwgMTYpCisJCW91dGwoaSwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1BZGRyZXNzKTsKKwkJb3V0bCgoTmV0d29ya0FkZHJlc3NbMF0gPDwgMjQpIHwgKE5ldHdvcmtBZGRyZXNzWzFdIDw8IDE2KQogCQkgICAgIHwgKE5ldHdvcmtBZGRyZXNzWzJdIDw8IDgpIHwgTmV0d29ya0FkZHJlc3NbM10sCiAJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5DYW1EYXRhKTsKIAkJTmV0d29ya0FkZHJlc3MgKz0gNDsKQEAgLTMyOCw4ICszMzcsNyBAQAogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2NhbV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogQ29weSBNQUMtYWRkcmVzcyBpbnRvIGFsbCBlbnRyaWVzLiAqLwpAQCAtMzQ3LDcgKzM1NSw3IEBACiAKIAkvKiBDaGVjayBsaW5rIHN0YXR1cywgc3BpbiBoZXJlIHRpbGwgc3RhdGlvbiBpcyBub3QgYnVzeS4gKi8KIAlpID0gMDsKLQl3aGlsZSAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgeworCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmIE1EX0NBX0JVU1kpIHsKIAkJaSsrOwogCQlpZiAoaSA+IDEwMCkgewogCQkJcHJpbnRrKCJFcnJvcjogbGFuX3NhYTk3MzBfbWlpX2luaXQ6IHRpbWVvdXRcbiIpOwpAQCAtMzU3LDEyICszNjUsMTIgQEAKIAl9CiAKIAkvKiBOb3cgc2V0IHRoZSBjb250cm9sIGFuZCBhZGRyZXNzIHJlZ2lzdGVyLiAqLwotCU9VVEwoTURfQ0FfQlVTWSB8IFBIWV9TVEFUVVMgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGLAorCW91dGwoTURfQ0FfQlVTWSB8IFBIWV9TVEFUVVMgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCk7CiAKIAkvKiBjaGVjayBsaW5rIHN0YXR1cywgc3BpbiBoZXJlIHRpbGwgc3RhdGlvbiBpcyBub3QgYnVzeSAqLwogCWkgPSAwOwotCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCkgJiBNRF9DQV9CVVNZKSB7CisJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYgTURfQ0FfQlVTWSkgewogCQlpKys7CiAJCWlmIChpID4gMTAwKSB7CiAJCQlwcmludGsoIkVycm9yOiBsYW5fc2FhOTczMF9taWlfaW5pdDogdGltZW91dFxuIik7CkBAIC0zNzUsNyArMzgzLDcgQEAKIAltZGVsYXkoMSk7CiAKIAkvKiBDaGVjayB0aGUgbGluayBzdGF0dXMuICovCi0JaWYgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210RGF0YSkgJgorCWlmIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210RGF0YSkgJgogCSAgICBQSFlfU1RBVFVTX0xJTktfVVApIHsKIAkJLyogTGluayBpcyB1cC4gKi8KIAkJcmV0dXJuIDA7CkBAIC0zODMsMTQgKzM5MSwxNCBAQAogCQkvKiBMaW5rIGlzIGRvd24sIHJlc2V0IHRoZSBQSFkgZmlyc3QuICovCiAKIAkJLyogc2V0IFBIWSBhZGRyZXNzID0gJ0NPTlRST0wnICovCi0JCU9VVEwoUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8IE1EX0NBX1dSIHwgUEhZX0NPTlRST0wsCisJCW91dGwoUEhZX0FERFJFU1MgPDwgTURfQ0FfUEhZX1NIRiB8IE1EX0NBX1dSIHwgUEhZX0NPTlRST0wsCiAJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5TdGF0aW9uTWdtdEN0bCk7CiAKIAkJLyogV2FpdCBmb3IgMSBtcy4gKi8KIAkJbWRlbGF5KDEpOwogCiAJCS8qIHNldCAnQ09OVFJPTCcgPSBmb3JjZSByZXNldCBhbmQgcmVuZWdvdGlhdGUgKi8KLQkJT1VUTChQSFlfQ09OVFJPTF9SRVNFVCB8IFBIWV9DT05UUk9MX0FVVE9fTkVHIHwKKwkJb3V0bChQSFlfQ09OVFJPTF9SRVNFVCB8IFBIWV9DT05UUk9MX0FVVE9fTkVHIHwKIAkJICAgICBQSFlfQ09OVFJPTF9SRVNUQVJUX0FVVE9fTkVHLAogCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKTsKIApAQCAtMzk4LDEyICs0MDYsMTIgQEAKIAkJbWRlbGF5KDUwKTsKIAogCQkvKiBzZXQgJ0JVU1knIHRvIHN0YXJ0IG9wZXJhdGlvbiAqLwotCQlPVVRMKE1EX0NBX0JVU1kgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfAorCQlvdXRsKE1EX0NBX0JVU1kgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwgTURfQ0FfV1IgfAogCQkgICAgIFBIWV9DT05UUk9MLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCQkvKiBhd2FpdCBjb21wbGV0aW9uICovCiAJCWkgPSAwOwotCQl3aGlsZSAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKKwkJd2hpbGUgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKIAkJICAgICAgIE1EX0NBX0JVU1kpIHsKIAkJCWkrKzsKIAkJCWlmIChpID4gMTAwKSB7CkBAIC00MTksMTMgKzQyNywxMyBAQAogCiAJCWZvciAobCA9IDA7IGwgPCAyOyBsKyspIHsKIAkJCS8qIHNldCBQSFkgYWRkcmVzcyA9ICdTVEFUVVMnICovCi0JCQlPVVRMKE1EX0NBX0JVU1kgfCBQSFlfQUREUkVTUyA8PCBNRF9DQV9QSFlfU0hGIHwKKwkJCW91dGwoTURfQ0FfQlVTWSB8IFBIWV9BRERSRVNTIDw8IE1EX0NBX1BIWV9TSEYgfAogCQkJICAgICBQSFlfU1RBVFVTLAogCQkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKTsKIAogCQkJLyogYXdhaXQgY29tcGxldGlvbiAqLwogCQkJaSA9IDA7Ci0JCQl3aGlsZSAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXRDdGwpICYKKwkJCXdoaWxlIChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210Q3RsKSAmCiAJCQkgICAgICAgTURfQ0FfQlVTWSkgewogCQkJCWkrKzsKIAkJCQlpZiAoaSA+IDEwMCkgewpAQCAtNDQwLDcgKzQ0OCw3IEBACiAJCQltZGVsYXkoMzAwMCk7CiAKIAkJCS8qIGNoZWNrIHRoZSBsaW5rIHN0YXR1cyAqLwotCQkJaWYgKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlN0YXRpb25NZ210RGF0YSkgJgorCQkJaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+U3RhdGlvbk1nbXREYXRhKSAmCiAJCQkgICAgUEhZX1NUQVRVU19MSU5LX1VQKSB7CiAJCQkJLyogbGluayBpcyB1cCAqLwogCQkJCWJyZWFrOwpAQCAtNDU0LDcgKzQ2Miw3IEBACiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHApCiB7CiAJLyogSW5pdGlhbGl6ZSBETUEgY29udHJvbCByZWdpc3Rlci4gKi8KLQlPVVRMKChMQU5NQl9BTlkgPDwgRE1BX0NUTF9NQVhfWEZFUl9TSEYpIHwKKwlvdXRsKChMQU5NQl9BTlkgPDwgRE1BX0NUTF9NQVhfWEZFUl9TSEYpIHwKIAkgICAgIChMQU5FTkRfTElUVExFIDw8IERNQV9DVExfRU5ESUFOX1NIRikgfAogCSAgICAgKExBTl9TQUE5NzMwX1JDVl9RX0lOVF9USFJFU0hPTEQgPDwgRE1BX0NUTF9SWF9JTlRfQ09VTlRfU0hGKQogCSAgICAgfCBETUFfQ1RMX1JYX0lOVF9UT19FTiB8IERNQV9DVExfUlhfSU5UX0VOIHwKQEAgLTQ2MiwyNyArNDcwLDI3IEBACiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCk7CiAKIAkvKiBJbml0aWFsIE1BQyBjb250cm9sIHJlZ2lzdGVyLiAqLwotCU9VVEwoKE1BQ0NNX01JSSA8PCBNQUNfQ09OVFJPTF9DT05OX1NIRikgfCBNQUNfQ09OVFJPTF9GVUxMX0RVUCwKKwlvdXRsKChNQUNDTV9NSUkgPDwgTUFDX0NPTlRST0xfQ09OTl9TSEYpIHwgTUFDX0NPTlRST0xfRlVMTF9EVVAsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk1hY0N0bCk7CiAKIAkvKiBJbml0aWFsaXplIENBTSBjb250cm9sIHJlZ2lzdGVyLiAqLwotCU9VVEwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKKwlvdXRsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9CUk9BRF9BQ0MsCiAJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCk7CiAKLQkvKiAKKwkvKgogCSAqIEluaXRpYWxpemUgQ0FNIGVuYWJsZSByZWdpc3Rlciwgb25seSB0dXJuIG9uIGZpcnN0IGVudHJ5LCBzaG91bGQKLQkgKiBjb250YWluIG93biBhZGRyLiAKKwkgKiBjb250YWluIG93biBhZGRyLgogCSAqLwotCU9VVEwoMHgwMDAxLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUVuYWJsZSk7CisJb3V0bCgweDAwMDEsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtRW5hYmxlKTsKIAogCS8qIEluaXRpYWxpemUgVHggY29udHJvbCByZWdpc3RlciAqLwotCU9VVEwoVFhfQ1RMX0VOX0NPTVAsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpOworCW91dGwoVFhfQ1RMX0VOX0NPTVAsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpOwogCiAJLyogSW5pdGlhbGl6ZSBSY3YgY29udHJvbCByZWdpc3RlciAqLwotCU9VVEwoUlhfQ1RMX1NUUklQX0NSQywgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCk7CisJb3V0bChSWF9DVExfU1RSSVBfQ1JDLCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKTsKIAogCS8qIFJlc2V0IERNQSBlbmdpbmUgKi8KLQlPVVRMKERNQV9URVNUX1NXX1JFU0VULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVRlc3QpOworCW91dGwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5MiwyMSArNTAwLDIxIEBACiAJaW50IGk7CiAKIAkvKiBTdG9wIERNQSBmaXJzdCAqLwotCU9VVEwoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKSAmCisJb3V0bChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkxhbkRtYUN0bCkgJgogCSAgICAgfihETUFfQ1RMX0VOX1RYX0RNQSB8IERNQV9DVExfRU5fUlhfRE1BKSwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKIAogCS8qIFNldCB0aGUgU1cgUmVzZXQgYml0cyBpbiBETUEgYW5kIE1BQyBjb250cm9sIHJlZ2lzdGVycyAqLwotCU9VVEwoRE1BX1RFU1RfU1dfUkVTRVQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hVGVzdCk7Ci0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpIHwgTUFDX0NPTlRST0xfUkVTRVQsCisJb3V0bChETUFfVEVTVF9TV19SRVNFVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFUZXN0KTsKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+TWFjQ3RsKSB8IE1BQ19DT05UUk9MX1JFU0VULAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpOwogCi0JLyogCisJLyoKIAkgKiBXYWl0IGZvciBNQUMgcmVzZXQgdG8gaGF2ZSBmaW5pc2hlZC4gVGhlIHJlc2V0IGJpdCBpcyBhdXRvIGNsZWFyZWQKIAkgKiB3aGVuIHRoZSByZXNldCBpcyBkb25lLgogCSAqLwogCWkgPSAwOwotCXdoaWxlIChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpICYgTUFDX0NPTlRST0xfUkVTRVQpIHsKKwl3aGlsZSAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5NYWNDdGwpICYgTUFDX0NPTlRST0xfUkVTRVQpIHsKIAkJaSsrOwogCQlpZiAoaSA+IDEwMCkgewogCQkJcHJpbnRrCkBAIC01MjQsNyArNTMyLDcgQEAKIAkvKiBTdG9wIGxhbiBjb250cm9sbGVyLiAqLwogCWxhbl9zYWE5NzMwX3N0b3AobHApOwogCi0JT1VUTChMQU5fU0FBOTczMF9ERUZBVUxUX1RJTUVfT1VUX0NOVCwKKwlvdXRsKExBTl9TQUE5NzMwX0RFRkFVTFRfVElNRV9PVVRfQ05ULAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UaW1lb3V0KTsKIAogCXJldHVybiAwOwpAQCAtNTM2LDI4ICs1NDQsMjcgQEAKIAogCS8qIEluaXRpYWxpemUgUnggQnVmZmVyIEluZGV4ICovCiAJbHAtPk5leHRSY3ZQYWNrZXRJbmRleCA9IDA7Ci0JbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDE7CisJbHAtPk5leHRSY3ZCdWZmZXJJbmRleCA9IDA7CiAKLQkvKiBTZXQgY3VycmVudCBidWZmZXIgaW5kZXggJiBuZXh0IGF2YWlsYmxlIHBhY2tldCBpbmRleCAqLworCS8qIFNldCBjdXJyZW50IGJ1ZmZlciBpbmRleCAmIG5leHQgYXZhaWxhYmxlIHBhY2tldCBpbmRleCAqLwogCWxwLT5OZXh0VHhtUGFja2V0SW5kZXggPSAwOwogCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggPSAwOwogCWxwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXggPSAwOwogCWxwLT5QZW5kaW5nVHhtQnVmZmVySW5kZXggPSAwOwogCi0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpIHwgRE1BX0NUTF9FTl9UWF9ETUEgfAorCW91dGwocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5MYW5EbWFDdGwpIHwgRE1BX0NUTF9FTl9UWF9ETUEgfAogCSAgICAgRE1BX0NUTF9FTl9SWF9ETUEsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+TGFuRG1hQ3RsKTsKIAogCS8qIEZvciBUeCwgdHVybiBvbiBNQUMgdGhlbiBETUEgKi8KLQlPVVRMKElOTCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlR4Q3RsKSB8IFRYX0NUTF9UWF9FTiwKKwlvdXRsKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+VHhDdGwpIHwgVFhfQ1RMX1RYX0VOLAogCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5UeEN0bCk7CiAKIAkvKiBGb3IgUngsIHR1cm4gb24gRE1BIHRoZW4gTUFDICovCi0JT1VUTChJTkwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5SeEN0bCkgfCBSWF9DVExfUlhfRU4sCisJb3V0bChyZWFkbCgmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPlJ4Q3RsKSB8IFJYX0NUTF9SWF9FTiwKIAkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+UnhDdGwpOwogCi0JLyogU2V0IE9rMlVzZSB0byBsZXQgaGFyZHdhcmUgb3ducyB0aGUgYnVmZmVycyAqLwotCU9VVEwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiB8IE9LMlVTRV9UWF9BIHwgT0syVVNFX1RYX0IsCi0JICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CisJLyogU2V0IE9rMlVzZSB0byBsZXQgaGFyZHdhcmUgb3duIHRoZSBidWZmZXJzLgkqLworCW91dGwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzIsOCArNTc5LDcgQEAKIAogc3RhdGljIGludCBsYW5fc2FhOTczMF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgKnBQYWNrZXQ7CiAJdW5zaWduZWQgaW50IHR4X3N0YXR1czsKIApAQCAtNTgxLDEzICs1ODcsMTEgQEAKIAkJcHJpbnRrKCJsYW5fc2FhOTczMF90eCBpbnRlcnJ1cHRcbiIpOwogCiAJLyogQ2xlYXIgaW50ZXJydXB0LiAqLwotCU9VVEwoRE1BX1NUQVRVU19NQUNfVFhfSU5ULCAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkRtYVN0YXR1cyk7CisJb3V0bChETUFfU1RBVFVTX01BQ19UWF9JTlQsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKTsKIAogCXdoaWxlICgxKSB7Ci0JCXBQYWNrZXQgPQotCQkgICAgKHVuc2lnbmVkIGludCAqKSBscC0+VHhtQnVmZmVyW2xwLT4KLQkJCQkJCSAgIFBlbmRpbmdUeG1CdWZmZXJJbmRleF0KLQkJICAgIFtscC0+UGVuZGluZ1R4bVBhY2tldEluZGV4XTsKKwkJcFBhY2tldCA9IGxwLT5UeG1CdWZmZXJbbHAtPlBlbmRpbmdUeG1CdWZmZXJJbmRleF0KKwkJCQkgICAgICAgW2xwLT5QZW5kaW5nVHhtUGFja2V0SW5kZXhdOwogCiAJCS8qIEdldCBzdGF0dXMgb2YgZmlyc3QgcGFja2V0IHRyYW5zbWl0dGVkLiAqLwogCQl0eF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcFBhY2tldCk7CkBAIC02MDUsMjMgKzYwOSwyMiBAQAogCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19FWF9DT0xMIDw8IFRYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCWlmICh0eF9zdGF0dXMgJgotCQkJICAgIChUWF9TVEFUVVNfTEFURV9DT0xMIDw8Ci0JCQkgICAgIFRYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKSBscC0+c3RhdHMuCi0JICAgICB0eF93aW5kb3dfZXJyb3JzKys7CisJCQkgICAgKFRYX1NUQVRVU19MQVRFX0NPTEwgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCisJCQkJbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJCWlmICh0eF9zdGF0dXMgJgogCQkJICAgIChUWF9TVEFUVVNfTF9DQVJSIDw8IFRYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQotCQkJCSAgICBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWlmICh0eF9zdGF0dXMgJgogCQkJICAgIChUWF9TVEFUVVNfVU5ERVIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmCiAJCQkgICAgKFRYX1NUQVRVU19TUV9FUlIgPDwgVFhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCQkJbHAtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKIAogCQkJbHAtPnN0YXRzLmNvbGxpc2lvbnMgKz0KLQkJCSAgICB0eF9zdGF0dXMgJiBUWF9TVEFUVVNfVFhfQ09MTF9NU0s7CisJCQkJdHhfc3RhdHVzICYgVFhfU1RBVFVTX1RYX0NPTExfTVNLOwogCQl9CiAKIAkJLyogRnJlZSBidWZmZXIuICovCkBAIC02MzYsMjEgKzYzOSwxNSBAQAogCQl9CiAJfQogCi0JLyogTWFrZSBzdXJlIEEgYW5kIEIgYXJlIGF2YWlsYWJsZSB0byBoYXJkd2FyZS4gKi8KLQlPVVRMKE9LMlVTRV9UWF9BIHwgT0syVVNFX1RYX0IsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKLQotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKLQkJLyogVGhlIHR4IGJ1ZmZlciBpcyBubyBsb25nZXIgZnVsbC4gKi8KLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KKwkvKiBUaGUgdHggYnVmZmVyIGlzIG5vIGxvbmdlciBmdWxsLiAqLworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGxhbl9zYWE5NzMwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBsZW4gPSAwOwogCXN0cnVjdCBza19idWZmICpza2IgPSAwOwogCXVuc2lnbmVkIGludCByeF9zdGF0dXM7CkBAIC02NjMsMTYgKzY2MCwxMyBAQAogCQlwcmludGsoImxhbl9zYWE5NzMwX3J4IGludGVycnVwdFxuIik7CiAKIAkvKiBDbGVhciByZWNlaXZlIGludGVycnVwdHMuICovCi0JT1VUTChETUFfU1RBVFVTX01BQ19SWF9JTlQgfCBETUFfU1RBVFVTX1JYX0lOVCB8CisJb3V0bChETUFfU1RBVFVTX01BQ19SWF9JTlQgfCBETUFfU1RBVFVTX1JYX0lOVCB8CiAJICAgICBETUFfU1RBVFVTX1JYX1RPX0lOVCwgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpOwogCiAJLyogQWRkcmVzcyBuZXh0IHBhY2tldCAqLwotCWlmIChscC0+TmV4dFJjdlRvVXNlSXNBKQotCQlCdWZmZXJJbmRleCA9IDA7Ci0JZWxzZQotCQlCdWZmZXJJbmRleCA9IDE7CisJQnVmZmVySW5kZXggPSBscC0+TmV4dFJjdkJ1ZmZlckluZGV4OwogCVBhY2tldEluZGV4ID0gbHAtPk5leHRSY3ZQYWNrZXRJbmRleDsKLQlwUGFja2V0ID0gKHVuc2lnbmVkIGludCAqKSBscC0+UmN2QnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CisJcFBhY2tldCA9IGxwLT5SY3ZCdWZmZXJbQnVmZmVySW5kZXhdW1BhY2tldEluZGV4XTsKIAlyeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcFBhY2tldCk7CiAKIAkvKiBQcm9jZXNzIGVhY2ggcGFja2V0LiAqLwpAQCAtNzE1LDUxICs3MDksMzkgQEAKIAkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChyeF9zdGF0dXMgJgogCQkJICAgIChSWF9TVEFUVVNfQ1JDX0VSUiA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCi0JCQkgICAgKFJYX1NUQVRVU19BTElHTl9FUlIgPDwKLQkJCSAgICAgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpIGxwLT5zdGF0cy4KLQkgICAgIHJ4X2ZyYW1lX2Vycm9ycysrOworCQkJICAgIChSWF9TVEFUVVNfQUxJR05fRVJSIDw8IFJYX1NUQVRfQ1RMX1NUQVRVU19TSEYpKQorCQkJCWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCWlmIChyeF9zdGF0dXMgJgogCQkJICAgIChSWF9TVEFUVVNfT1ZFUkZMT1cgPDwgUlhfU1RBVF9DVExfU1RBVFVTX1NIRikpCi0JCQkJICAgIGxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJCWxwLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJaWYgKHJ4X3N0YXR1cyAmCiAJCQkgICAgKFJYX1NUQVRVU19MT05HX0VSUiA8PCBSWF9TVEFUX0NUTF9TVEFUVVNfU0hGKSkKLQkJCQkgICAgbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9CiAKIAkJLyogSW5kaWNhdGUgd2UgaGF2ZSBwcm9jZXNzZWQgdGhlIGJ1ZmZlci4gKi8KLQkJKnBQYWNrZXQgPQotCQkgICAgY3B1X3RvX2xlMzIoUlhTRl9SRUFEWSA8PCBSWF9TVEFUX0NUTF9PV05FUl9TSEYpOworCQkqcFBhY2tldCA9IGNwdV90b19sZTMyKFJYU0ZfUkVBRFkgPDwgUlhfU1RBVF9DVExfT1dORVJfU0hGKTsKKworCQkvKiBNYWtlIHN1cmUgQSBvciBCIGlzIGF2YWlsYWJsZSB0byBoYXJkd2FyZSBhcyBhcHByb3ByaWF0ZS4gKi8KKwkJb3V0bChCdWZmZXJJbmRleCA/IE9LMlVTRV9SWF9CIDogT0syVVNFX1JYX0EsCisJCSAgICAgJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5PazJVc2UpOwogCiAJCS8qIEdvIHRvIG5leHQgcGFja2V0IGluIHNlcXVlbmNlLiAqLwogCQlscC0+TmV4dFJjdlBhY2tldEluZGV4Kys7CiAJCWlmIChscC0+TmV4dFJjdlBhY2tldEluZGV4ID49IExBTl9TQUE5NzMwX1JDVl9RX1NJWkUpIHsKIAkJCWxwLT5OZXh0UmN2UGFja2V0SW5kZXggPSAwOwotCQkJaWYgKEJ1ZmZlckluZGV4KSB7Ci0JCQkJbHAtPk5leHRSY3ZUb1VzZUlzQSA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCWxwLT5OZXh0UmN2VG9Vc2VJc0EgPSAwOwotCQkJfQorCQkJbHAtPk5leHRSY3ZCdWZmZXJJbmRleCBePSAxOwogCQl9Ci0JCU9VVEwoT0syVVNFX1JYX0EgfCBPSzJVU0VfUlhfQiwKLQkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPk9rMlVzZSk7CiAKIAkJLyogQWRkcmVzcyBuZXh0IHBhY2tldCAqLwotCQlpZiAobHAtPk5leHRSY3ZUb1VzZUlzQSkKLQkJCUJ1ZmZlckluZGV4ID0gMDsKLQkJZWxzZQotCQkJQnVmZmVySW5kZXggPSAxOworCQlCdWZmZXJJbmRleCA9IGxwLT5OZXh0UmN2QnVmZmVySW5kZXg7CiAJCVBhY2tldEluZGV4ID0gbHAtPk5leHRSY3ZQYWNrZXRJbmRleDsKLQkJcFBhY2tldCA9Ci0JCSAgICAodW5zaWduZWQgaW50ICopIGxwLT4KLQkJICAgIFJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOworCQlwUGFja2V0ID0gbHAtPlJjdkJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwogCQlyeF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqcFBhY2tldCk7CiAJfQogCi0JLyogTWFrZSBzdXJlIEEgYW5kIEIgYXJlIGF2YWlsYWJsZSB0byBoYXJkd2FyZS4gKi8KLQlPVVRMKE9LMlVTRV9SWF9BIHwgT0syVVNFX1JYX0IsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKLQogCXJldHVybiAwOwogfQogCkBAIC03NjcsOCArNzQ5LDcgQEAKIAkJCQkgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDUpCiAJCXByaW50aygibGFuX3NhYTk3MzBfaW50ZXJydXB0XG4iKTsKQEAgLTc4MCwxMSArNzYxLDExIEBACiAJZXZtX3NhYTk3MzBfY2xlYXJfbGFuX2ludChscCk7CiAKIAkvKiBTZXJ2aWNlIHBlbmRpbmcgdHJhbnNtaXQgaW50ZXJydXB0cy4gKi8KLQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSAmIERNQV9TVEFUVVNfTUFDX1RYX0lOVCkKKwlpZiAocmVhZGwoJmxwLT5sYW5fc2FhOTczMF9yZWdzLT5EbWFTdGF0dXMpICYgRE1BX1NUQVRVU19NQUNfVFhfSU5UKQogCQlsYW5fc2FhOTczMF90eChkZXYpOwogCiAJLyogU2VydmljZSBwZW5kaW5nIHJlY2VpdmUgaW50ZXJydXB0cy4gKi8KLQlpZiAoSU5MKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSAmCisJaWYgKHJlYWRsKCZscC0+bGFuX3NhYTk3MzBfcmVncy0+RG1hU3RhdHVzKSAmCiAJICAgIChETUFfU1RBVFVTX01BQ19SWF9JTlQgfCBETUFfU1RBVFVTX1JYX0lOVCB8CiAJICAgICBETUFfU1RBVFVTX1JYX1RPX0lOVCkpIGxhbl9zYWE5NzMwX3J4KGRldik7CiAKQEAgLTc5NCwxNSArNzc1LDkgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfb3Blbl9mYWlsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KIHN0YXRpYyBpbnQgbGFuX3NhYTk3MzBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIEFzc29jaWF0ZSBJUlEgd2l0aCBsYW5fc2FhOTczMF9pbnRlcnJ1cHQgKi8KIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsICZsYW5fc2FhOTczMF9pbnRlcnJ1cHQsIDAsICJTQUE5NzMwIEV0aCIsCkBAIC04MzQsMTUgKzgwOSwxMyBAQAogCWludCBQYWNrZXRJbmRleDsKIAogCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygibGFuX3NhYTk3MzBfd3JpdGU6IHNrYj0lMDh4XG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGludCkgc2tiKTsKKwkJcHJpbnRrKCJsYW5fc2FhOTczMF93cml0ZTogc2tiPSVwXG4iLCBza2IpOwogCiAJQnVmZmVySW5kZXggPSBscC0+TmV4dFR4bUJ1ZmZlckluZGV4OwogCVBhY2tldEluZGV4ID0gbHAtPk5leHRUeG1QYWNrZXRJbmRleDsKIAotCXR4X3N0YXR1cyA9Ci0JICAgIGxlMzJfdG9fY3B1KCoodW5zaWduZWQgaW50ICopIGxwLT4KLQkJCVR4bUJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdKTsKKwl0eF9zdGF0dXMgPSBsZTMyX3RvX2NwdSgqKHVuc2lnbmVkIGludCAqKWxwLT5UeG1CdWZmZXJbQnVmZmVySW5kZXhdCisJCQkJCQkJICAgICAgW1BhY2tldEluZGV4XSk7CiAJaWYgKCh0eF9zdGF0dXMgJiBUWF9TVEFUX0NUTF9PV05FUl9NU0spICE9CiAJICAgIChUWFNGX0VNUFRZIDw8IFRYX1NUQVRfQ1RMX09XTkVSX1NIRikpIHsKIAkJaWYgKGxhbl9zYWE5NzMwX2RlYnVnID4gNCkKQEAgLTg1OCwyOSArODMxLDI5IEBACiAJCWxwLT5OZXh0VHhtQnVmZmVySW5kZXggXj0gMTsKIAl9CiAKLQlwYlBhY2tldERhdGEgPQotCSAgICAodW5zaWduZWQgY2hhciAqKSBscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF07CisJcGJQYWNrZXREYXRhID0gbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdOwogCXBiUGFja2V0RGF0YSArPSA0OwogCiAJLyogY29weSB0aGUgYml0cyAqLwogCW1lbWNweShwYlBhY2tldERhdGEsIHBiRGF0YSwgbGVuKTsKIAogCS8qIFNldCB0cmFuc21pdCBzdGF0dXMgZm9yIGhhcmR3YXJlICovCi0JKih1bnNpZ25lZCBpbnQgKikgbHAtPlR4bUJ1ZmZlcltCdWZmZXJJbmRleF1bUGFja2V0SW5kZXhdID0KLQkgICAgY3B1X3RvX2xlMzIoKFRYU0ZfUkVBRFkgPDwgVFhfU1RBVF9DVExfT1dORVJfU0hGKSB8Ci0JCQkoVFhfU1RBVF9DVExfSU5UX0FGVEVSX1RYIDw8IFRYX1NUQVRfQ1RMX0ZSQU1FX1NIRikKLQkJCXwgKGxlbiA8PCBUWF9TVEFUX0NUTF9MRU5HVEhfU0hGKSk7CisJKih1bnNpZ25lZCBpbnQgKilscC0+VHhtQnVmZmVyW0J1ZmZlckluZGV4XVtQYWNrZXRJbmRleF0gPQorCQljcHVfdG9fbGUzMigoVFhTRl9SRUFEWSA8PCBUWF9TVEFUX0NUTF9PV05FUl9TSEYpIHwKKwkJCSAgICAoVFhfU1RBVF9DVExfSU5UX0FGVEVSX1RYIDw8CisJCQkgICAgIFRYX1NUQVRfQ1RMX0ZSQU1FX1NIRikgfAorCQkJICAgIChsZW4gPDwgVFhfU1RBVF9DVExfTEVOR1RIX1NIRikpOwogCi0JLyogU2V0IGhhcmR3YXJlIHR4IGJ1ZmZlci4gKi8KLQlPVVRMKE9LMlVTRV9UWF9BIHwgT0syVVNFX1RYX0IsICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKKwkvKiBNYWtlIHN1cmUgQSBvciBCIGlzIGF2YWlsYWJsZSB0byBoYXJkd2FyZSBhcyBhcHByb3ByaWF0ZS4gKi8KKwlvdXRsKEJ1ZmZlckluZGV4ID8gT0syVVNFX1RYX0IgOiBPSzJVU0VfVFhfQSwKKwkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+T2syVXNlKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBsYW5fc2FhOTczMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0KLQkgICAgKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICopIGRldi0+cHJpdjsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogVHJhbnNtaXR0ZXIgdGltZW91dCwgc2VyaW91cyBwcm9ibGVtcyAqLwogCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTg4OSwyMCArODYyLDE5IEBACiAJbGFuX3NhYTk3MzBfcmVzdGFydChscCk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAogc3RhdGljIGludCBsYW5fc2FhOTczMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBza2JsZW47CiAJaW50IGxlbjsKIAogCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiU2VuZCBwYWNrZXQ6IHNrYj0lMDh4XG4iLCAodW5zaWduZWQgaW50KSBza2IpOworCQlwcmludGsoIlNlbmQgcGFja2V0OiBza2I9JXBcbiIsIHNrYik7CiAKIAlza2JsZW4gPSBza2ItPmxlbjsKIApAQCAtOTEyLDggKzg4NCw3IEBACiAKIAlpZiAobGFuX3NhYTk3MzBfd3JpdGUobHAsIHNrYiwgc2tibGVuKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwotCQlwcmludGsoIkVycm9yIHdoZW4gd3JpdGluZyBwYWNrZXQgdG8gY29udHJvbGxlcjogc2tiPSUwOHhcbiIsCi0JCSAgICAgKHVuc2lnbmVkIGludCkgc2tiKTsKKwkJcHJpbnRrKCJFcnJvciB3aGVuIHdyaXRpbmcgcGFja2V0IHRvIGNvbnRyb2xsZXI6IHNrYj0lcFxuIiwgc2tiKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtOTIyLDcgKzg5Myw3IEBACiAJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC05MzIsOCArOTAzLDcgQEAKIAogc3RhdGljIGludCBsYW5fc2FhOTczMF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDEpCiAJCXByaW50aygibGFuX3NhYTk3MzBfY2xvc2U6XG4iKTsKQEAgLTk1NSwzMyArOTI1LDMxIEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxhbl9zYWE5NzMwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZQogCQkJCQkJICAgICAgKmRldikKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPQotCSAgICAoc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKikgZGV2LT5wcml2OworCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlyZXR1cm4gJmxwLT5zdGF0czsKIH0KIAogc3RhdGljIHZvaWQgbGFuX3NhYTk3MzBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlICpscCA9Ci0JICAgIChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIFN0b3AgdGhlIGNvbnRyb2xsZXIgKi8KIAlsYW5fc2FhOTczMF9zdG9wKGxwKTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogYWNjZXB0IGFsbCBwYWNrZXRzICovCi0JCU9VVEwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX1NUQVRJT05fQUNDIHwKKwkJb3V0bChDQU1fQ09OVFJPTF9DT01QX0VOIHwgQ0FNX0NPTlRST0xfU1RBVElPTl9BQ0MgfAogCQkgICAgIENBTV9DT05UUk9MX0dST1VQX0FDQyB8IENBTV9DT05UUk9MX0JST0FEX0FDQywKIAkJICAgICAmbHAtPmxhbl9zYWE5NzMwX3JlZ3MtPkNhbUN0bCk7CiAJfSBlbHNlIHsKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJCS8qIGFjY2VwdCBhbGwgbXVsdGljYXN0IHBhY2tldHMgKi8KLQkJCU9VVEwoQ0FNX0NPTlRST0xfQ09NUF9FTiB8IENBTV9DT05UUk9MX0dST1VQX0FDQyB8CisJCQlvdXRsKENBTV9DT05UUk9MX0NPTVBfRU4gfCBDQU1fQ09OVFJPTF9HUk9VUF9BQ0MgfAogCQkJICAgICBDQU1fQ09OVFJPTF9CUk9BRF9BQ0MsCiAJCQkgICAgICZscC0+bGFuX3NhYTk3MzBfcmVncy0+Q2FtQ3RsKTsKIAkJfSBlbHNlIHsKLQkJCS8qIAorCQkJLyoKIAkJCSAqIFdpbGwgaGFuZGxlIHRoZSBtdWx0aWNhc3Qgc3R1ZmYgbGF0ZXIuIC1jYXJzdGVubAogCQkJICovCiAJCX0KQEAgLTk5Myw5MSArOTYxLDg2IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzYWE5NzMwX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0gICAgICAgIGlmIChkZXYpIHsKLSAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX25ldGRldihkZXYpOwotCQlrZnJlZShkZXYtPnByaXYpOwotICAgICAgICAgICAgICAgIGZyZWVfbmV0ZGV2KGRldik7Ci0gICAgICAgICAgICAgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLSAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0gICAgICAgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotICAgICAgICB9CisJaWYgKGRldikgeworCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCQlsYW5fc2FhOTczMF9mcmVlX2J1ZmZlcnMocGRldiwgbHApOworCQlpb3VubWFwKGxwLT5sYW5fc2FhOTczMF9yZWdzKTsKKwkJaW91bm1hcChscC0+ZXZtX3NhYTk3MzBfcmVncyk7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCX0KIH0KIAogCi1zdGF0aWMgaW50IGxhbl9zYWE5NzMwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwgaW50IGlycSkKK3N0YXRpYyBpbnQgbGFuX3NhYTk3MzBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwl1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IGlycSkKIHsKLQlzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqbHA7CisJc3RydWN0IGxhbl9zYWE5NzMwX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBjaGFyIGV0aGVybmV0X2FkZHJbNl07Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWRldi0+b3BlbiA9IGxhbl9zYWE5NzMwX29wZW5fZmFpbDsKKwlpZiAoZ2V0X2V0aGVybmV0X2FkZHIoZXRoZXJuZXRfYWRkcikpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCi0JaWYgKGdldF9ldGhlcm5ldF9hZGRyKGV0aGVybmV0X2FkZHIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQkKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgZXRoZXJuZXRfYWRkciwgNik7CiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7CiAJZGV2LT5pcnEgPSBpcnE7Ci0JCi0JLyogCi0JICogTWFrZSBjZXJ0YWluIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgY29udHJvbGxlciBhcmUgYWxpZ25lZCAKLQkgKiBhbmQgRE1BYmxlLiAKLQkgKi8KLQkvKgotCSAqICBYWFg6IHRoYXQgaXMgb2J2aW91c2x5IGJyb2tlbiAtIGtmcmVlKCkgd29uJ3QgYmUgaGFwcHkgd2l0aCB1cy4KLQkgKi8KLQlscCA9IChzdHJ1Y3QgbGFuX3NhYTk3MzBfcHJpdmF0ZSAqKSAoKCh1bnNpZ25lZCBsb25nKQotCQkJCQkgICAgICBrbWFsbG9jKHNpemVvZigqbHApICsgNywKLQkJCQkJCSAgICAgIEdGUF9ETUEgfCBHRlBfS0VSTkVMKQotCQkJCQkgICAgICArIDcpICYgfjcpOwogCi0JaWYgKCFscCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXYtPnByaXYgPSBscDsKLQltZW1zZXQobHAsIDAsIHNpemVvZigqbHApKTsKKwlscC0+cGNpX2RldiA9IHBkZXY7CiAKIAkvKiBTZXQgU0FBOTczMCBMQU4gYmFzZSBhZGRyZXNzLiAqLwotCWxwLT5sYW5fc2FhOTczMF9yZWdzID0gKHRfbGFuX3NhYTk3MzBfcmVnbWFwICopIChpb2FkZHIgKwotCQkJCQkJCSBTQUE5NzMwX0xBTl9SRUdTX0FERFIpOworCWxwLT5sYW5fc2FhOTczMF9yZWdzID0gaW9yZW1hcChpb2FkZHIgKyBTQUE5NzMwX0xBTl9SRUdTX0FERFIsCisJCQkJICAgICAgIFNBQTk3MzBfTEFOX1JFR1NfU0laRSk7CisJaWYgKCFscC0+bGFuX3NhYTk3MzBfcmVncykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBTZXQgU0FBOTczMCBFVk0gYmFzZSBhZGRyZXNzLiAqLwotCWxwLT5ldm1fc2FhOTczMF9yZWdzID0gKHRfZXZtX3NhYTk3MzBfcmVnbWFwICopIChpb2FkZHIgKwotCQkJCQkJCSBTQUE5NzMwX0VWTV9SRUdTX0FERFIpOworCWxwLT5ldm1fc2FhOTczMF9yZWdzID0gaW9yZW1hcChpb2FkZHIgKyBTQUE5NzMwX0VWTV9SRUdTX0FERFIsCisJCQkJICAgICAgIFNBQTk3MzBfRVZNX1JFR1NfU0laRSk7CisJaWYgKCFscC0+ZXZtX3NhYTk3MzBfcmVncykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9pb3VubWFwX2xhbjsKKwl9CiAKIAkvKiBBbGxvY2F0ZSBMQU4gUlgvVFggZnJhbWUgYnVmZmVyIHNwYWNlLiAqLwotCS8qIEZJWE1FOiBhIGxlYWsgKi8KLQlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2FsbG9jYXRlX2J1ZmZlcnMobHApKSkKLQkJZ290byBvdXQ7CisJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9hbGxvY2F0ZV9idWZmZXJzKHBkZXYsIGxwKSkpCisJCWdvdG8gb3V0X2lvdW5tYXA7CiAKIAkvKiBTdG9wIExBTiBjb250cm9sbGVyLiAqLwotCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfc3RvcChscCkpKSAKLQkJZ290byBvdXQ7Ci0JCisJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9zdG9wKGxwKSkpCisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCS8qIEluaXRpYWxpemUgQ0FNIHJlZ2lzdGVycy4gKi8KIAlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NhbV9pbml0KGRldikpKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfZnJlZV9jb25zaXN0ZW50OwogCiAJLyogSW5pdGlhbGl6ZSBNSUkgcmVnaXN0ZXJzLiAqLwogCWlmICgocmV0ID0gbGFuX3NhYTk3MzBfbWlpX2luaXQobHApKSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKIAogCS8qIEluaXRpYWxpemUgY29udHJvbCByZWdpc3RlcnMuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9jb250cm9sX2luaXQobHApKSkgCi0JCWdvdG8gb3V0OwotICAgICAgICAKKwlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2NvbnRyb2xfaW5pdChscCkpKQorCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisKIAkvKiBMb2FkIENBTSByZWdpc3RlcnMuICovCi0JaWYgKChyZXQgPSBsYW5fc2FhOTczMF9jYW1fbG9hZChscCkpKSAKLQkJZ290byBvdXQ7Ci0JCisJaWYgKChyZXQgPSBsYW5fc2FhOTczMF9jYW1fbG9hZChscCkpKQorCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisKIAkvKiBJbml0aWFsaXplIERNQSBjb250ZXh0IHJlZ2lzdGVycy4gKi8KIAlpZiAoKHJldCA9IGxhbl9zYWE5NzMwX2RtYV9pbml0KGxwKSkpCi0JCWdvdG8gb3V0OwotCQorCQlnb3RvIG91dF9mcmVlX2NvbnNpc3RlbnQ7CisKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwotCQkKKwogCWRldi0+b3BlbiA9IGxhbl9zYWE5NzMwX29wZW47CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYW5fc2FhOTczMF9zdGFydF94bWl0OwogCWRldi0+c3RvcCA9IGxhbl9zYWE5NzMwX2Nsb3NlOwpAQCAtMTA4Niw0NCArMTA0OSw0MyBAQAogCWRldi0+dHhfdGltZW91dCA9IGxhbl9zYWE5NzMwX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IChIWiA+PiAxKTsKIAlkZXYtPmRtYSA9IDA7Ci0JCi0JcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYgKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2ZyZWVfY29uc2lzdGVudDsKKwogCXJldHVybiAwOwogCi0gb3V0OgotCWtmcmVlKGRldi0+cHJpdik7CitvdXRfZnJlZV9jb25zaXN0ZW50OgorCWxhbl9zYWE5NzMwX2ZyZWVfYnVmZmVycyhwZGV2LCBscCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKGxwLT5ldm1fc2FhOTczMF9yZWdzKTsKK291dF9pb3VubWFwX2xhbjoKKwlpb3VubWFwKGxwLT5sYW5fc2FhOTczMF9yZWdzKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNhYTk3MzBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1bnNpZ25lZCBpbnQgcGNpX2lvYWRkcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHBjaV9pb2FkZHI7CiAJaW50IGVycjsKIAogCWlmIChsYW5fc2FhOTczMF9kZWJ1ZyA+IDEpCiAJCXByaW50aygic2FhOTczMC5jOiBQQ0kgYmlvcyBpcyBwcmVzZW50LCBjaGVja2luZyBmb3IgZGV2aWNlcy4uLlxuIik7CiAKLQllcnIgPSAtRU5PTUVNOwotCWRldiA9IGFsbG9jX2V0aGVyZGV2KDApOwotCWlmICghZGV2KQotCQlnb3RvIG91dDsKLQotCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLQogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotICAgICAgICBpZiAoZXJyKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nLlxuIik7Ci0gICAgICAgICAgICAgICAgZ290byBvdXQxOwotICAgICAgICB9CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nLlxuIik7Ci0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXRfZGlzYWJsZV9wZGV2OwogCX0KIAogCXBjaV9pcnFfbGluZSA9IHBkZXYtPmlycTsKQEAgLTExMzIsNDkgKzEwOTQsNTQgQEAKIAlwY2lfaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JcHJpbnRrKCJGb3VuZCBTQUE5NzMwIChQQ0kpIGF0ICUjeCwgaXJxICVkLlxuIiwKKwlwcmludGsoIkZvdW5kIFNBQTk3MzAgKFBDSSkgYXQgJWx4LCBpcnEgJWQuXG4iLAogCSAgICAgICBwY2lfaW9hZGRyLCBwY2lfaXJxX2xpbmUpOwogCi0JZXJyID0gbGFuX3NhYTk3MzBfaW5pdChkZXYsIHBjaV9pb2FkZHIsIHBjaV9pcnFfbGluZSk7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBsYW5fc2FhOTczMF9wcml2YXRlKSk7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKKworCWVyciA9IGxhbl9zYWE5NzMwX2luaXQoZGV2LCBwZGV2LCBwY2lfaW9hZGRyLCBwY2lfaXJxX2xpbmUpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKCJMYW4gaW5pdCBmYWlsZWQiKTsKLQkJZ290byBvdXQyOworCQlwcmludGsoIkxBTiBpbml0IGZhaWxlZCIpOworCQlnb3RvIG91dF9mcmVlX25ldGRldjsKIAl9CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCXJldHVybiAwOwotCQotb3V0MjoKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci1vdXQxOgorCitvdXRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYoZGV2KTsKK291dF9kaXNhYmxlX3BkZXY6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogb3V0OgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlyZXR1cm4gZXJyOwogfQogCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBzYWE5NzMwX2RyaXZlciA9IHsKLQkubmFtZSAgICAgICAgICAgPSBEUlZfTU9EVUxFX05BTUUsCi0JLmlkX3RhYmxlICAgICAgID0gc2FhOTczMF9wY2lfdGJsLAotCS5wcm9iZSAgICAgICAgICA9IHNhYTk3MzBfaW5pdF9vbmUsCi0JLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3Aoc2FhOTczMF9yZW1vdmVfb25lKSwKKwkubmFtZQkJPSBEUlZfTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlCT0gc2FhOTczMF9wY2lfdGJsLAorCS5wcm9iZQkJPSBzYWE5NzMwX2luaXRfb25lLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2FhOTczMF9yZW1vdmVfb25lKSwKIH07CiAKIAogc3RhdGljIGludCBfX2luaXQgc2FhOTczMF9pbml0KHZvaWQpCiB7Ci0gICAgICAgIHJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNhYTk3MzBfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZzYWE5NzMwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYWE5NzMwX2NsZWFudXAodm9pZCkKIHsKLSAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWE5NzMwX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZzYWE5NzMwX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNhYTk3MzBfaW5pdCk7CiBtb2R1bGVfZXhpdChzYWE5NzMwX2NsZWFudXApOwogCi0KLQorTU9EVUxFX0FVVEhPUigiUmFsZiBCYWVjaGxlIDxyYWxmQGxpbnV4LW1pcHMub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTk3MzAgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCmluZGV4IDc0ZDVmMWEuLmM5MWUyZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5jCkBAIC0yMTgzLDkgKzIxODMsOCBAQAogICoJMCAtLT4gdGhlcmUgaXMgYSBkZXZpY2UKICAqCWFueXRoaW5nIGVsc2UsIGVycm9yCiAgKi8KLXN0YXRpYyBpbnQgc21jX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNtY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJdW5zaWduZWQgaW50IF9faW9tZW0gKmFkZHI7CkBAIC0yMjEyLDcgKzIyMTEsNyBAQAogCQlnb3RvIG91dF9yZWxlYXNlX2lvOwogCX0KIAlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOwotCVNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7CisJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CiAKIAluZGV2LT5kbWEgPSAodW5zaWduZWQgY2hhciktMTsKIAluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtMjIzMyw3ICsyMjMyLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9hdHRyaWI7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmRldik7CiAJcmV0ID0gc21jX3Byb2JlKG5kZXYsIGFkZHIpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfaW91bm1hcDsKQEAgLTIyNDksNyArMjI0OCw3IEBACiAJcmV0dXJuIDA7CiAKICBvdXRfaW91bm1hcDoKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlpb3VubWFwKGFkZHIpOwogIG91dF9yZWxlYXNlX2F0dHJpYjoKIAlzbWNfcmVsZWFzZV9hdHRyaWIocGRldik7CkBAIC0yMjYzLDE0ICsyMjYyLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBzbWNfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNtY19kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KG5kZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIApAQCAtMjI5NSw5ICsyMjkzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbWNfZHJ2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNtY19kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChuZGV2KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CkBAIC0yMzA5LDE0ICsyMzA3LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc21jX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbWNfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKG5kZXYpIHsKIAkJc3RydWN0IHNtY19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQkJc21jX2VuYWJsZV9kZXZpY2UocGRldik7CisJCXNtY19lbmFibGVfZGV2aWNlKGRldik7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCQlzbWNfcmVzZXQobmRldik7CiAJCQlzbWNfZW5hYmxlKG5kZXYpOwpAQCAtMjMyOCwxMyArMjMyNSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc21jX2RyaXZlciA9IHsKLQkubmFtZQkJPSBDQVJETkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNtY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNtY19kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBzbWNfZHJ2X3JlbW92ZSwKIAkuc3VzcGVuZAk9IHNtY19kcnZfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNtY19kcnZfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IENBUkROQU1FLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbWNfaW5pdCh2b2lkKQpAQCAtMjM0OCwxMiArMjM0NiwxMiBAQAogI2VuZGlmCiAjZW5kaWYKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnNtY19kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNtY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc21jX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc21jX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtY19kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzbWNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IDgxN2YyMDAuLmExMGNkMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yODksNiArMjg5LDM4IEBACiAjZGVmaW5lIFJQQ19MU0FfREVGQVVMVAkJUlBDX0xFRF9UWF9SWAogI2RlZmluZSBSUENfTFNCX0RFRkFVTFQJCVJQQ19MRURfMTAwXzEwCiAKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTFYMDApCisKKyNpbmNsdWRlIDxhdTF4eHguaD4KKworLyogV2UgY2FuIG9ubHkgZG8gMTYtYml0IHJlYWRzIGFuZCB3cml0ZXMgaW4gdGhlIHN0YXRpYyBtZW1vcnkgc3BhY2UuICovCisjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMAorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVAkxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUCTAKKyNkZWZpbmUgU01DX0lPX1NISUZUCQkwCisjZGVmaW5lIFNNQ19OT1dBSVQJCTEKKworI2RlZmluZSBTTUNfaW53KGEsIHIpCQlhdV9yZWFkdygodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKKyNkZWZpbmUgU01DX2luc3coYSwgciwgcCwgbCkJXAorCWRvIHsJXAorCQl1bnNpZ25lZCBsb25nIF9hID0gKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSk7IFwKKwkJaW50IF9sID0gKGwpOyBcCisJCXUxNiAqX3AgPSAodTE2ICopKHApOyBcCisJCXdoaWxlIChfbC0tID4gMCkgXAorCQkJKl9wKysgPSBhdV9yZWFkdyhfYSk7IFwKKwl9IHdoaWxlKDApCisjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCWF1X3dyaXRldyh2LCAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKSkKKyNkZWZpbmUgU01DX291dHN3KGEsIHIsIHAsIGwpCVwKKwlkbyB7CVwKKwkJdW5zaWduZWQgbG9uZyBfYSA9ICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpOyBcCisJCWludCBfbCA9IChsKTsgXAorCQljb25zdCB1MTYgKl9wID0gKGNvbnN0IHUxNiAqKShwKTsgXAorCQl3aGlsZSAoX2wtLSA+IDApIFwKKwkJCWF1X3dyaXRldygqX3ArKyAsIF9hKTsgXAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBzZXRfaXJxX3R5cGUoaXJxLCB0eXBlKSBkbyB7fSB3aGlsZSAoMCkKKwogI2Vsc2UKIAogI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCBjNzk2ZjQxLi4wZDc2NWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC0yMjkwLDcgKzIyOTAsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3BpZGVyX25ldF9kcml2ZXIgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9IHNwaWRlcl9uZXRfZHJpdmVyX25hbWUsCiAJLmlkX3RhYmxlCT0gc3BpZGVyX25ldF9wY2lfdGJsLAogCS5wcm9iZQkJPSBzcGlkZXJfbmV0X3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKaW5kZXggZDA0YzkxOC4uNGY3NTY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCkBAIC0zNDQsOSArMzQ0LDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwcm90ZW9uX2RldltJU0FUUl9NQVhfQURBUFRFUlNdOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcHJvdGVvbl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInByb3Rlb24iLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHJvdGVvbl9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInByb3Rlb24iLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBwcm90ZW9uX2luaXQodm9pZCkKQEAgLTM1NSw3ICszNTYsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGksIG51bSA9IDAsIGVyciA9IDA7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0zNzIsNyArMzczLDcgQEAKIAkJZXJyID0gc2V0dXBfY2FyZChkZXYsICZwZGV2LT5kZXYpOwogCQlpZiAoIWVycikgewogCQkJcHJvdGVvbl9kZXZbaV0gPSBwZGV2OwotCQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRldik7CisJCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCQkJKytudW07CiAJCX0gZWxzZSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKQEAgLTM5OSwxNyArNDAwLDE3IEBACiAJCQogCQlpZiAoIXBkZXYpCiAJCQljb250aW51ZTsKLQkJZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCQlkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIFBST1RFT05fSU9fRVhURU5UKTsKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJCWZyZWVfZG1hKGRldi0+ZG1hKTsKIAkJdG1zZGV2X3Rlcm0oZGV2KTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJfQotCWRyaXZlcl91bnJlZ2lzdGVyKCZwcm90ZW9uX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnByb3Rlb25fZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocHJvdGVvbl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKaW5kZXggNzJjZjcwOC4uZDZiYTQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NraXNhLmMKQEAgLTM1NCw5ICszNTQsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNrX2lzYV9kZXZbSVNBVFJfTUFYX0FEQVBURVJTXTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNrX2lzYV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNraXNhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNrX2lzYV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNraXNhIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2tfaXNhX2luaXQodm9pZCkKQEAgLTM2NSw3ICszNjYsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGksIG51bSA9IDAsIGVyciA9IDA7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJnNrX2lzYV9kcml2ZXIpOworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtMzgyLDcgKzM4Myw3IEBACiAJCWVyciA9IHNldHVwX2NhcmQoZGV2LCAmcGRldi0+ZGV2KTsKIAkJaWYgKCFlcnIpIHsKIAkJCXNrX2lzYV9kZXZbaV0gPSBwZGV2OwotCQkJZGV2X3NldF9kcnZkYXRhKCZza19pc2FfZGV2W2ldLT5kZXYsIGRldik7CisJCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShza19pc2FfZGV2W2ldLCBkZXYpOwogCQkJKytudW07CiAJCX0gZWxzZSB7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKQEAgLTQwOSwxNyArNDEwLDE3IEBACiAKIAkJaWYgKCFwZGV2KQogCQkJY29udGludWU7Ci0JCWRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwkJZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBTS19JU0FfSU9fRVhURU5UKTsKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJCWZyZWVfZG1hKGRldi0+ZG1hKTsKIAkJdG1zZGV2X3Rlcm0oZGV2KTsKIAkJZnJlZV9uZXRkZXYoZGV2KTsKLQkJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJfQotCWRyaXZlcl91bnJlZ2lzdGVyKCZza19pc2FfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNrX2lzYV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IDcxODc5NTguLjAwZTU1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMzMwLDcgKzMzMCw3IEBACiAKIGNvbmZpZyBBVE1FTAogICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTB4IGNoaXBzZXQgIDgwMi4xMWIgc3VwcG9ydCIKLSAgICAgIGRlcGVuZHMgb24gTkVUX1JBRElPICYmIEVYUEVSSU1FTlRBTAorICAgICAgZGVwZW5kcyBvbiBORVRfUkFESU8KICAgICAgIHNlbGVjdCBGV19MT0FERVIKICAgICAgIHNlbGVjdCBDUkMzMgogICAgICAgIC0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IGEzZTIzNTIuLjVlNTNjNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgImF0bWVsLmgiCiAKICNkZWZpbmUgRFJJVkVSX01BSk9SIDAKLSNkZWZpbmUgRFJJVkVSX01JTk9SIDk2CisjZGVmaW5lIERSSVZFUl9NSU5PUiA5OAogCiBNT0RVTEVfQVVUSE9SKCJTaW1vbiBLZWxsZXkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgQXRtZWwgYXQ3NmM1MHggODAyLjExIHdpcmVsZXNzIGV0aGVybmV0IGNhcmRzLiIpOwpAQCAtMTUwNCw3ICsxNTA0LDcgQEAKICAgICAgICAgcmV0dXJuIGxlbjsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwgY29uc3QgQXRtZWxGV1R5cGUgZndfdHlwZSwgIAorc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCB1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IEF0bWVsRldUeXBlIGZ3X3R5cGUsICAKIAkJCQkgICAgc3RydWN0IGRldmljZSAqc3lzX2RldiwgaW50ICgqY2FyZF9wcmVzZW50KSh2b2lkICopLCB2b2lkICpjYXJkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xNjA1LDggKzE2MDUsOCBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKLQlpZiAocHJpdi0+YnVzX3R5cGUgPT0gQlVTX1RZUEVfUENJICYmCi0JICAgICFyZXF1ZXN0X3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDY0LCBkZXYtPm5hbWUgKSkgeworCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDMyLCAKKwkJCSAgICBwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0NBUkQgPyAgImF0bWVsX2NzIiA6ICJhdG1lbF9wY2kiKSkgewogCQlnb3RvIGVycl9vdXRfaXJxOwogCX0KIAkKQEAgLTE2MjIsMTUgKzE2MjIsMTYgQEAKIAkKIAljcmVhdGVfcHJvY19yZWFkX2VudHJ5ICgiZHJpdmVyL2F0bWVsIiwgMCwgTlVMTCwgYXRtZWxfcmVhZF9wcm9jLCBwcml2KTsJCiAJCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF0bWVsIGF0NzZjNTB4IHdpcmVsZXNzLiBWZXJzaW9uICVkLiVkIHNpbW9uQHRoZWtlbGxleXMub3JnLnVrXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIERSSVZFUl9NQUpPUiwgRFJJVkVSX01JTk9SKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogQXRtZWwgYXQ3NmM1MHguIFZlcnNpb24gJWQuJWQuIE1BQyAlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCBEUklWRVJfTUFKT1IsIERSSVZFUl9NSU5PUiwKKwkgICAgICAgZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKKwkgICAgICAgZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSApOwogCQogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlyZXR1cm4gZGV2OwogCQogIGVycl9vdXRfcmVzOgotCWlmIChwcml2LT5idXNfdHlwZSA9PSBCVVNfVFlQRV9QQ0kpCi0JICAgICAgICByZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDY0ICk7CisJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCAzMik7CiAgZXJyX291dF9pcnE6CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAgZXJyX291dF9mcmVlOgpAQCAtMTY0MCw3ICsxNjQxLDcgQEAKIAogRVhQT1JUX1NZTUJPTChpbml0X2F0bWVsX2NhcmQpOwogCi12b2lkIHN0b3BfYXRtZWxfY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZnJlZXJlcykKK3ZvaWQgc3RvcF9hdG1lbF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQkKQEAgLTE2NTQsMTAgKzE2NTUsNyBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvYXRtZWwiLCBOVUxMKTsKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKIAlrZnJlZShwcml2LT5maXJtd2FyZSk7Ci0JaWYgKGZyZWVyZXMpIHsKLQkJLyogUENNQ0lBIGZyZWVzIHRoaXMgc3R1ZmYsIHNvIG9ubHkgZm9yIFBDSSAqLwotCSAgICAgICAgcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIDY0KTsKLSAgICAgICAgfQorCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAzMik7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KIApAQCAtMTgxMCw5ICsxODA4LDkgQEAKIAl9CiAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKIAkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7Ci0JaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKyAgICAgICAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikgCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOwotCQorICAgICAgIAogCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKQEAgLTE4MjcsMTEgKzE4MjUsMTIgQEAKIAkKIAlpZiAoIXByaXYtPndlcF9pc19vbikKIAkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JZWxzZSBpZiAocHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCkKLQkJZHdycS0+ZmxhZ3MgPSBJV19FTkNPREVfUkVTVFJJQ1RFRDsKLQllbHNlCi0JCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX09QRU47Ci0JCQorCWVsc2UgeworCQlpZiAocHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCkKKwkJCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJCWVsc2UKKwkJCWR3cnEtPmZsYWdzID0gSVdfRU5DT0RFX09QRU47CisJfQogCQkvKiBXaGljaCBrZXkgZG8gd2Ugd2FudCA/IC0xIC0+IHR4IGluZGV4ICovCiAJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSA0KQogCQlpbmRleCA9IHByaXYtPmRlZmF1bHRfa2V5OwpAQCAtMjY0NSw4ICsyNjQ0LDggQEAKIAl9IAogfQogCi0gCi1zdGF0aWMgdm9pZCBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Qoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHU4ICpjaGFsbGVuZ2UsIGludCBjaGFsbGVuZ2VfbGVuKQorCitzdGF0aWMgdm9pZCBzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Qoc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYsIHUxNiBzeXN0ZW0sIHU4ICpjaGFsbGVuZ2UsIGludCBjaGFsbGVuZ2VfbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIGhlYWRlcjsKIAlzdHJ1Y3QgYXV0aF9ib2R5IGF1dGg7CkBAIC0yNjU4LDE0ICsyNjU3LDExIEBACiAJbWVtY3B5KGhlYWRlci5hZGRyMiwgcHJpdi0+ZGV2LT5kZXZfYWRkciwgNik7CiAJbWVtY3B5KGhlYWRlci5hZGRyMywgcHJpdi0+Q3VycmVudEJTU0lELCA2KTsKIAkKLQlpZiAocHJpdi0+d2VwX2lzX29uKSB7Ci0JCWF1dGguYWxnID0gY3B1X3RvX2xlMTYoQzgwMjExX01HTVRfQUFOX1NIQVJFREtFWSk7IAorCWlmIChwcml2LT53ZXBfaXNfb24gJiYgcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSAhPSAxKSAKIAkJLyogbm8gV0VQIGZvciBhdXRoZW50aWNhdGlvbiBmcmFtZXMgd2l0aCBUclNlcU5vIDEgKi8KLQkJaWYgKHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkKLQkJCWhlYWRlci5mcmFtZV9jdGwgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7Ci0JfSBlbHNlIHsKLQkJYXV0aC5hbGcgPSBjcHVfdG9fbGUxNihDODAyMTFfTUdNVF9BQU5fT1BFTlNZU1RFTSk7Ci0JfQorICAgICAgICAgICAgICAgIGhlYWRlci5mcmFtZV9jdGwgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CisJCisJYXV0aC5hbGcgPSBjcHVfdG9fbGUxNihzeXN0ZW0pOyAKIAogCWF1dGguc3RhdHVzID0gMDsKIAlhdXRoLnRyYW5zX3NlcSA9IGNwdV90b19sZTE2KHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0pOwpAQCAtMjgzNCw2ICsyODMwLDcgQEAKIAlzdHJ1Y3QgYXV0aF9ib2R5ICphdXRoID0gKHN0cnVjdCBhdXRoX2JvZHkgKilwcml2LT5yeF9idWY7CiAJdTE2IHN0YXR1cyA9IGxlMTZfdG9fY3B1KGF1dGgtPnN0YXR1cyk7CiAJdTE2IHRyYW5zX3NlcV9ubyA9IGxlMTZfdG9fY3B1KGF1dGgtPnRyYW5zX3NlcSk7CisJdTE2IHN5c3RlbSA9IGxlMTZfdG9fY3B1KGF1dGgtPmFsZyk7CiAJCiAJaWYgKHN0YXR1cyA9PSBDODAyMTFfTUdNVF9TQ19TdWNjZXNzICYmICFwcml2LT53ZXBfaXNfb24pIHsgCiAJCS8qIG5vIFdFUCAqLwpAQCAtMjg1NSw3ICsyODUyLDcgQEAKIAkJCQkKIAkJaWYgKHRyYW5zX3NlcV9ubyA9PSAweDAwMDIgJiYKIAkJICAgIGF1dGgtPmVsX2lkID09IEM4MDIxMV9NR01UX0VsZW1lbnRJRF9DaGFsbGVuZ2VUZXh0KSB7Ci0JCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgYXV0aC0+Y2hhbGxfdGV4dCwgYXV0aC0+Y2hhbGxfdGV4dF9sZW4pOworCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIHN5c3RlbSwgYXV0aC0+Y2hhbGxfdGV4dCwgYXV0aC0+Y2hhbGxfdGV4dF9sZW4pOwogCQkJcmV0dXJuOwogCQl9CiAJCQpAQCAtMjg3MiwxNCArMjg2OSwyMCBAQAogCQl9CiAJfQkJCQogCQotCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfQXV0aEFsZ05vdFN1cHBvcnRlZCAmJiBwcml2LT5jb25uZWN0X3RvX2FueV9CU1MpIHsKLQkJaW50IGJzc19pbmRleDsKLQkJCi0JCXByaXYtPkJTU2luZm9bKGludCkocHJpdi0+Y3VycmVudF9CU1MpXS5jaGFubmVsIHw9IDB4ODA7Ci0JCQotCQlpZiAoKGJzc19pbmRleCAgPSByZXRyaWV2ZV9ic3MocHJpdikpICE9IC0xKSB7Ci0JCQlhdG1lbF9qb2luX2Jzcyhwcml2LCBic3NfaW5kZXgpOwotCQkJcmV0dXJuOworCWlmIChzdGF0dXMgPT0gQzgwMjExX01HTVRfU0NfQXV0aEFsZ05vdFN1cHBvcnRlZCkgeworCQkvKiBEbyBvcGVuc3lzdGVtIGZpcnN0LCB0aGVuIHRyeSBzaGFyZWRrZXkgKi8KKwkJaWYgKHN5c3RlbSA9PSAgQzgwMjExX01HTVRfQUFOX09QRU5TWVNURU0pIHsKKwkJCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMTsKKwkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZLCBOVUxMLCAwKTsKKwkJfSBlbHNlIGlmIChwcml2LT5jb25uZWN0X3RvX2FueV9CU1MpIHsKKwkJCWludCBic3NfaW5kZXg7CisJCQkKKwkJCXByaXYtPkJTU2luZm9bKGludCkocHJpdi0+Y3VycmVudF9CU1MpXS5jaGFubmVsIHw9IDB4ODA7CisJCQkKKwkJCWlmICgoYnNzX2luZGV4ICA9IHJldHJpZXZlX2Jzcyhwcml2KSkgIT0gLTEpIHsKKwkJCQlhdG1lbF9qb2luX2Jzcyhwcml2LCBic3NfaW5kZXgpOworCQkJCXJldHVybjsKKwkJCX0KIAkJfQogCX0KIAkKQEAgLTMyMDUsNyArMzIwOCw3IEBACiAJCSAgcHJpdi0+QXV0aGVudGljYXRpb25SZXF1ZXN0UmV0cnlDbnQrKzsKIAkJICBwcml2LT5DdXJyZW50QXV0aGVudFRyYW5zYWN0aW9uU2VxTnVtID0gMHgwMDAxOwogCQkgIG1vZF90aW1lcigmcHJpdi0+bWFuYWdlbWVudF90aW1lciwgamlmZmllcyArIE1HTVRfSklGRklFUyk7Ci0JCSAgc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIE5VTEwsIDApOworCQkgIHNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBDODAyMTFfTUdNVF9BQU5fT1BFTlNZU1RFTSwgTlVMTCwgMCk7CiAJICB9CiAJICAKIAkgIGJyZWFrOwpAQCAtMzMxMiw3ICszMzE1LDcgQEAKIAkJCQkKIAkJCQltb2RfdGltZXIoJnByaXYtPm1hbmFnZW1lbnRfdGltZXIsIGppZmZpZXMgKyBNR01UX0pJRkZJRVMpOwogCQkJCXByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gPSAweDAwMDE7Ci0JCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIE5VTEwsIDApOworCQkJCXNlbmRfYXV0aGVudGljYXRpb25fcmVxdWVzdChwcml2LCBDODAyMTFfTUdNVF9BQU5fU0hBUkVES0VZLCBOVUxMLCAwKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQpAQCAtMzQ4MiwxMSArMzQ4NSw2IEBACiAJCQlwcmludGsoS0VSTl9BTEVSVCAiJXM6ICoqKiBJbnZhbGlkIE1BQyBhZGRyZXNzLiBVUEdSQURFIEZpcm13YXJlICoqKipcbiIsIGRldi0+bmFtZSk7CiAJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGVmYXVsdF9tYWMsIDYpOwogCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUMgYWRkcmVzcyAlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCSAgICAgICBkZXYtPmRldl9hZGRyWzNdLCBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdICk7Ci0JCQogCX0KIAkKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuaAppbmRleCA4MjUwMDBlLi5iOWIzZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmgKQEAgLTM1LDkgKzM1LDkgQEAKIAlBVE1FTF9GV19UWVBFXzUwNgogfSBBdG1lbEZXVHlwZTsKIAotc3RydWN0IG5ldF9kZXZpY2UgKmluaXRfYXRtZWxfY2FyZCh1bnNpZ25lZCBzaG9ydCwgaW50LCBjb25zdCBBdG1lbEZXVHlwZSwgc3RydWN0IGRldmljZSAqLCAKK3N0cnVjdCBuZXRfZGV2aWNlICppbml0X2F0bWVsX2NhcmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF0bWVsRldUeXBlLCBzdHJ1Y3QgZGV2aWNlICosIAogCQkJCSAgICBpbnQgKCpwcmVzZW50X2Z1bmMpKHZvaWQgKiksIHZvaWQgKiApOwotdm9pZCBzdG9wX2F0bWVsX2NhcmQoIHN0cnVjdCBuZXRfZGV2aWNlICosIGludCApOwordm9pZCBzdG9wX2F0bWVsX2NhcmQoIHN0cnVjdCBuZXRfZGV2aWNlICopOwogaW50IGF0bWVsX29wZW4oIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfY3MuYwppbmRleCAxYmQxMzE0Li4xN2QxZmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX2NzLmMKQEAgLTYzLDYgKzYzLDcgQEAKICAgIGJlIHByZXNlbnQgYnV0IGRpc2FibGVkIC0tIGJ1dCBpdCBjYW4gdGhlbiBiZSBlbmFibGVkIGZvciBzcGVjaWZpYwogICAgbW9kdWxlcyBhdCBsb2FkIHRpbWUgd2l0aCBhICdwY19kZWJ1Zz0jJyBvcHRpb24gdG8gaW5zbW9kLgogKi8KKwogI2lmZGVmIFBDTUNJQV9ERUJVRwogc3RhdGljIGludCBwY19kZWJ1ZyA9IFBDTUNJQV9ERUJVRzsKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKQEAgLTI4NSw0MSArMjg2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogbGlzdCBvZiBjYXJkcyB3ZSBrbm93IGFib3V0IGFuZCB0aGVpciBmaXJtd2FyZSByZXF1aXJlbWVudHMuCi0gICBHbyBlaXRoZXIgYnkgTWFuZmlkIG9yIHZlcnNpb24gc3RyaW5ncy4KLSAgIENhcmRzIG5vdCBpbiB0aGlzIGxpc3Qgd2lsbCBuZWVkIGEgZmlybXdhcmUgcGFyYW1ldGVyIHRvIHRoZSBtb2R1bGUKLSAgIGluIGFsbCBwcm9iYWJpbGl0eS4gTm90ZSB0aGF0IHRoZSBTTUMgMjYzMiBWMiBhbmQgVjMgaGF2ZSB0aGUgc2FtZQotICAgbWFuZmlkcywgc28gd2UgaWdub3JlIHRob3NlIGFuZCB1c2UgdGhlIHZlcnNpb24xIHN0cmluZ3MuICovCi0KLXN0YXRpYyBzdHJ1Y3QgeyAKLQlpbnQgbWFuZiwgY2FyZDsKLQljaGFyICp2ZXIxOwotCUF0bWVsRldUeXBlIGZpcm13YXJlOwotCWNoYXIgKm5hbWU7Ci19IGNhcmRfdGFibGVbXSA9IHsKLQl7IDAsIDAsICJXTEFOLzgwMi4xMWIgUEMgQ0FSRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIkFjdGlvbnRlYyA4MDJDQVQxIiB9LCAgCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDJBUiIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiTm9OYW1lLVJGTUQiIH0sIAotCXsgMCwgMCwgIkFUTUVML0FUNzZDNTAyQVJfRCIsIEFUTUVMX0ZXX1RZUEVfNTAyRCwgIk5vTmFtZS1yZXZEIiB9LCAKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwMkFSX0UiLCBBVE1FTF9GV19UWVBFXzUwMkUsICJOb05hbWUtcmV2RSIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNCIsIEFUTUVMX0ZXX1RZUEVfNTA0LCAiTm9OYW1lLTUwNCIgfSwKLQl7IDAsIDAsICJBVE1FTC9BVDc2QzUwNEEiLCBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwgIk5vTmFtZS01MDRhLTI5NTgiIH0sCi0JeyAwLCAwLCAiQVRNRUwvQVQ3NkM1MDRfUiIsIEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJOb05hbWUtNTA0LTI5NTgiIH0sCi0JeyBNQU5GSURfM0NPTSwgMHgwNjIwLCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiM2NvbSAzQ1JXRTYyMDkyQiIgfSwgCi0JeyBNQU5GSURfM0NPTSwgMHgwNjk2LCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiM2NvbSAzQ1JTSFBXMTk2IiB9LCAKLQl7IDAsIDAsICJTTUMvMjYzMlctVjIiLCBBVE1FTF9GV19UWVBFXzUwMiwgIlNNQyAyNjMyVy1WMiIgfSwKLQl7IDAsIDAsICJTTUMvMjYzMlciLCBBVE1FTF9GV19UWVBFXzUwMkQsICJTTUMgMjYzMlctVjMiIH0sCi0JeyAweGQ2MDEsIDB4MDAwNywgTlVMTCwgQVRNRUxfRldfVFlQRV81MDIsICJTaXRlY29tIFdMQU4tMDExIiB9LCAKLQl7IDB4MDFiZiwgMHgzMzAyLCBOVUxMLCBBVE1FTF9GV19UWVBFXzUwMkUsICJCZWxraW4gRjVENjAyMC1WMiIgfSwgCi0JeyAwLCAwLCAiQlQvVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgQVRNRUxfRldfVFlQRV81MDIsICJCVCBWb3lhZ2VyIDEwMjAiIH0sCi0JeyAwLCAwLCAiSUVFRSA4MDIuMTFiL1dpcmVsZXNzIExBTiBQQyBDYXJkIiwgQVRNRUxfRldfVFlQRV81MDIsICJTaWVtZW5zIEdpZ2FzZXQgUEMgQ2FyZCBJSSIgfSwKLQl7IDAsIDAsICJJRUVFIDgwMi4xMWIvV2lyZWxlc3MgTEFOIENhcmQgUyIsIEFUTUVMX0ZXX1RZUEVfNTA0XzI5NTgsICJTaWVtZW5zIEdpZ2FzZXQgUEMgQ2FyZCBJSSIgfSwKLQl7IDAsIDAsICJDTmV0L0NOV0xDIDExTWJwcyBXaXJlbGVzcyBQQyBDYXJkIFYtNSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkNOZXQgQ05XTEMtODExQVJMIiB9LAotCXsgMCwgMCwgIldpcmVsZXNzL1BDX0NBUkQiLCBBVE1FTF9GV19UWVBFXzUwMkQsICJQbGFuZXQgV0wtMzU1MiIgfSwKLQl7IDAsIDAsICJPRU0vMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIEFUTUVMX0ZXX1RZUEVfNTAyLCAiT0VNIDExTWJwcyBXTEFOIFBDTUNJQSBDYXJkIiB9LAotCXsgMCwgMCwgIjExV0FWRS8xMVdQNjExQUwtRSIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIjExV0FWRSBXYXZlQnVkZHkiIH0sCi0JeyAwLCAwLCAiTEcvTFcyMTAwTiIsIEFUTUVMX0ZXX1RZUEVfNTAyRSwgIkxHIExXMjEwME4gMTFNYnBzIFdMQU4gUENNQ0lBIENhcmQiIH0sCi19OwotCiBzdGF0aWMgdm9pZCBhdG1lbF9jb25maWcoZGV2X2xpbmtfdCAqbGluaykKIHsKIAljbGllbnRfaGFuZGxlX3QgaGFuZGxlOwpAQCAtMzI4LDEwICsyOTQsMTEgQEAKIAlsb2NhbF9pbmZvX3QgKmRldjsKIAlpbnQgbGFzdF9mbiwgbGFzdF9yZXQ7CiAJdV9jaGFyIGJ1Zls2NF07Ci0JaW50IGNhcmRfaW5kZXggPSAtMSwgZG9uZSA9IDA7Ci0JCisJc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgKmRpZDsKKwogCWhhbmRsZSA9IGxpbmstPmhhbmRsZTsKIAlkZXYgPSBsaW5rLT5wcml2OworCWRpZCA9IGhhbmRsZV90b19kZXYoaGFuZGxlKS5kcml2ZXJfZGF0YTsKIAogCURFQlVHKDAsICJhdG1lbF9jb25maWcoMHglcClcbiIsIGxpbmspOwogCQpAQCAtMzQwLDU5ICszMDcsNiBAQAogCXR1cGxlLlR1cGxlRGF0YU1heCA9IHNpemVvZihidWYpOwogCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKIAkKLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTUFORklEOwotCWlmIChwY21jaWFfZ2V0X2ZpcnN0X3R1cGxlKGhhbmRsZSwgJnR1cGxlKSA9PSAwKSB7Ci0JCWludCBpOwotCQljaXN0cGxfbWFuZmlkX3QgKm1hbmZpZDsKLQkJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQkJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKLQkJbWFuZmlkID0gJihwYXJzZS5tYW5maWQpOwotCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGNhcmRfdGFibGUpL3NpemVvZihjYXJkX3RhYmxlWzBdKTsgaSsrKSB7Ci0JCQlpZiAoIWNhcmRfdGFibGVbaV0udmVyMSAmJgotCQkJICAgIG1hbmZpZC0+bWFuZiA9PSBjYXJkX3RhYmxlW2ldLm1hbmYgJiYKLQkJCSAgICBtYW5maWQtPmNhcmQgPT0gY2FyZF90YWJsZVtpXS5jYXJkKSB7Ci0JCQkJY2FyZF9pbmRleCA9IGk7Ci0JCQkJZG9uZSA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQl0dXBsZS5EZXNpcmVkVHVwbGUgPSBDSVNUUExfVkVSU18xOwotCWlmICghZG9uZSAmJiAocGNtY2lhX2dldF9maXJzdF90dXBsZShoYW5kbGUsICZ0dXBsZSkgPT0gMCkpIHsKLQkJaW50IGksIGosIGs7Ci0JCWNpc3RwbF92ZXJzXzFfdCAqdmVyMTsKLQkJQ1NfQ0hFQ0soR2V0VHVwbGVEYXRhLCBwY21jaWFfZ2V0X3R1cGxlX2RhdGEoaGFuZGxlLCAmdHVwbGUpKTsKLQkJQ1NfQ0hFQ0soUGFyc2VUdXBsZSwgcGNtY2lhX3BhcnNlX3R1cGxlKGhhbmRsZSwgJnR1cGxlLCAmcGFyc2UpKTsKLQkJdmVyMSA9ICYocGFyc2UudmVyc2lvbl8xKTsKLQkJCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoY2FyZF90YWJsZSkvc2l6ZW9mKGNhcmRfdGFibGVbMF0pOyBpKyspIHsKLQkJCWZvciAoaiA9IDA7IGogPCB2ZXIxLT5uczsgaisrKSB7Ci0JCQkJY2hhciAqcCA9IGNhcmRfdGFibGVbaV0udmVyMTsKLQkJCQljaGFyICpxID0gJnZlcjEtPnN0clt2ZXIxLT5vZnNbal1dOwotCQkJCWlmICghcCkKLQkJCQkJZ290byBtaXNtYXRjaDsKLQkJCQlmb3IgKGsgPSAwOyBrIDwgajsgaysrKSB7Ci0JCQkJCXdoaWxlICgoKnAgIT0gJ1wwJykgJiYgKCpwICE9ICcvJykpIHArKzsKLQkJCQkJaWYgKCpwID09ICdcMCcpIHsKLQkJCQkJCWlmICgqcSAhPSAnXDAnKQotCQkJCQkJCWdvdG8gbWlzbWF0Y2g7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwKys7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJd2hpbGUoKCpxICE9ICdcMCcpICYmICgqcCAhPSAnXDAnKSAmJiAKLQkJCQkgICAgICAoKnAgIT0gJy8nKSAmJiAoKnAgPT0gKnEpKSBwKyssIHErKzsKLQkJCQlpZiAoKCgqcCAhPSAnXDAnKSAmJiAqcCAhPSAnLycpIHx8ICpxICE9ICdcMCcpCi0JCQkJCWdvdG8gbWlzbWF0Y2g7Ci0JCQl9Ci0JCQljYXJkX2luZGV4ID0gaTsKLQkJCWJyZWFrOwkvKiBkb25lICovCi0JCQkKLQkJbWlzbWF0Y2g6Ci0JCQlqID0gMDsgLyogZHVtbXkgc3RtdCB0byBzaHV0IHVwIGNvbXBpbGVyICovCi0JCX0KLQl9CQkKLQogCS8qCiAJICBUaGlzIHJlYWRzIHRoZSBjYXJkJ3MgQ09ORklHIHR1cGxlIHRvIGZpbmQgaXRzIGNvbmZpZ3VyYXRpb24KIAkgIHJlZ2lzdGVycy4KQEAgLTUwOSwxMiArNDIzLDEzIEBACiAJKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gCiAJCWluaXRfYXRtZWxfY2FyZChsaW5rLT5pcnEuQXNzaWduZWRJUlEsCiAJCQkJbGluay0+aW8uQmFzZVBvcnQxLAotCQkJCWNhcmRfaW5kZXggPT0gLTEgPyBBVE1FTF9GV19UWVBFX05PTkUgOiAgY2FyZF90YWJsZVtjYXJkX2luZGV4XS5maXJtd2FyZSwKKwkJCQlkaWQgPyBkaWQtPmRyaXZlcl9pbmZvIDogQVRNRUxfRldfVFlQRV9OT05FLAogCQkJCSZoYW5kbGVfdG9fZGV2KGhhbmRsZSksCiAJCQkJY2FyZF9wcmVzZW50LCAKIAkJCQlsaW5rKTsKIAlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgCi0JCWdvdG8gY3NfZmFpbGVkOworCQkJZ290byBjc19mYWlsZWQ7CisJCiAJCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCkBAIC01MjMsMjYgKzQzOCw3IEBACiAJc3RyY3B5KGRldi0+bm9kZS5kZXZfbmFtZSwgKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2LT5uYW1lICk7CiAJZGV2LT5ub2RlLm1ham9yID0gZGV2LT5ub2RlLm1pbm9yID0gMDsKIAlsaW5rLT5kZXYgPSAmZGV2LT5ub2RlOwotCQotCS8qIEZpbmFsbHksIHJlcG9ydCB3aGF0IHdlJ3ZlIGRvbmUgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMlc2luZGV4IDB4JTAyeDogVmNjICVkLiVkIiwKLQkgICAgICAgZGV2LT5ub2RlLmRldl9uYW1lLAotCSAgICAgICBjYXJkX2luZGV4ID09IC0xID8gIiIgOiAgY2FyZF90YWJsZVtjYXJkX2luZGV4XS5uYW1lLAotCSAgICAgICBjYXJkX2luZGV4ID09IC0xID8gIiIgOiAiICIsCi0JICAgICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXgsCi0JICAgICAgIGxpbmstPmNvbmYuVmNjLzEwLCBsaW5rLT5jb25mLlZjYyUxMCk7Ci0JaWYgKGxpbmstPmNvbmYuVnBwMSkKLQkJcHJpbnRrKCIsIFZwcCAlZC4lZCIsIGxpbmstPmNvbmYuVnBwMS8xMCwgbGluay0+Y29uZi5WcHAxJTEwKTsKLQlpZiAobGluay0+Y29uZi5BdHRyaWJ1dGVzICYgQ09ORl9FTkFCTEVfSVJRKQotCQlwcmludGsoIiwgaXJxICVkIiwgbGluay0+aXJxLkFzc2lnbmVkSVJRKTsKLQlpZiAobGluay0+aW8uTnVtUG9ydHMxKQotCQlwcmludGsoIiwgaW8gMHglMDR4LTB4JTA0eCIsIGxpbmstPmlvLkJhc2VQb3J0MSwKLQkJICAgICAgIGxpbmstPmlvLkJhc2VQb3J0MStsaW5rLT5pby5OdW1Qb3J0czEtMSk7Ci0JaWYgKGxpbmstPmlvLk51bVBvcnRzMikKLQkJcHJpbnRrKCIgJiAweCUwNHgtMHglMDR4IiwgbGluay0+aW8uQmFzZVBvcnQyLAotCQkgICAgICAgbGluay0+aW8uQmFzZVBvcnQyK2xpbmstPmlvLk51bVBvcnRzMi0xKTsKLQlwcmludGsoIlxuIik7Ci0JCisJCQkKIAlsaW5rLT5zdGF0ZSAmPSB+REVWX0NPTkZJR19QRU5ESU5HOwogCXJldHVybjsKIAkKQEAgLTU2OSw3ICs0NjUsNyBAQAogCWxpbmstPmRldiA9IE5VTEw7CiAJCiAJaWYgKGRldikgCi0JCXN0b3BfYXRtZWxfY2FyZChkZXYsIDApOworCQlzdG9wX2F0bWVsX2NhcmQoZGV2KTsKIAkoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgPSBOVUxMOyAKIAkKIAkvKiBEb24ndCBib3RoZXIgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZXNlIHN1Y2NlZWQgb3Igbm90ICovCkBAIC02MzcsMjUgKzUzMyw0NyBAQAogfSAvKiBhdG1lbF9ldmVudCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFdlIHVzZSB0aGUgZHJpdmVyX2luZm8gZmllbGQgdG8gc3RvcmUgdGhlIGNvcnJlY3QgZmlybXdhcmUgdHlwZSBmb3IgYSBjYXJkLiAqLworCisjZGVmaW5lIFBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEX0lORk8obWFuZiwgY2FyZCwgaW5mbykgeyBcCisJLm1hdGNoX2ZsYWdzID0gUENNQ0lBX0RFVl9JRF9NQVRDSF9NQU5GX0lEfCBcCisJCQlQQ01DSUFfREVWX0lEX01BVENIX0NBUkRfSUQsIFwKKwkubWFuZl9pZCA9IChtYW5mKSwgXAorCS5jYXJkX2lkID0gKGNhcmQpLCBcCisgICAgICAgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkoaW5mbyksIH0KKworI2RlZmluZSBQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKHYxLCB2MiwgdmgxLCB2aDIsIGluZm8pIHsgXAorCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDF8IFwKKwkJCVBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDIsIFwKKwkucHJvZF9pZCA9IHsgKHYxKSwgKHYyKSwgTlVMTCwgTlVMTCB9LCBcCisJLnByb2RfaWRfaGFzaCA9IHsgKHZoMSksICh2aDIpLCAwLCAwIH0sIFwKKyAgICAgICAgLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShpbmZvKSwgfQorCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kZXZpY2VfaWQgYXRtZWxfaWRzW10gPSB7Ci0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTAxLCAweDA2MjApLAotCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDEwMSwgMHgwNjk2KSwKLQlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYmYsIDB4MzMwMiksCi0JUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMDcpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIxMVdBVkUiLCAiMTFXUDYxMUFMLUUiLCAweDllYjJkYTFmLCAweGM5YTBkM2Y5KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVRNRUwiLCAiQVQ3NkM1MDJBUiIsIDB4YWJkYTQxNjQsIDB4NDFiMzdlMWYpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwNCIsIDB4YWJkYTQxNjQsIDB4NTA0MDY3MGEpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBVE1FTCIsICJBVDc2QzUwNEEiLCAweGFiZGE0MTY0LCAweGUxNWVkODdmKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQlQiLCAiVm95YWdlciAxMDIwIExhcHRvcCBBZGFwdGVyIiwgMHhhZTQ5Yjg2YSwgMHgxZTk1N2NkNSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNOZXQiLCAiQ05XTEMgMTFNYnBzIFdpcmVsZXNzIFBDIENhcmQgVi01IiwgMHhiYzQ3N2RkZSwgMHg1MDJmYWU2YiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklFRUUgODAyLjExYiIsICJXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4NWI4Nzg3MjQsIDB4MTIyZjFkZjYpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJPRU0iLCAiMTFNYnBzIFdpcmVsZXNzIExBTiBQQyBDYXJkIFYtMyIsIDB4ZmVhNTRjOTAsIDB4MWM1YjBmNjgpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTTUMiLCAiMjYzMlciLCAweGM0ZjhiMThiLCAweDMwZjM4Nzc0KSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiU01DIiwgIjI2MzJXLVYyIiwgMHhjNGY4YjE4YiwgMHgxNzJkMTM3NyksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIldpcmVsZXNzIiwgIlBDIiwgMHhhNDA3ZWNkZCwgMHg1NTZlNGQ3ZSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIldMQU4iLCAiODAyLjExYiBQQyBDQVJEIiwgMHg1NzVjNTE2YywgMHhiMWY2ZGJjNCksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxMDEsIDB4MDYyMCwgQVRNRUxfRldfVFlQRV81MDJfM0NPTSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxMDEsIDB4MDY5NiwgQVRNRUxfRldfVFlQRV81MDJfM0NPTSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfSU5GTygweDAxYmYsIDB4MzMwMiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9JTkZPKDB4ZDYwMSwgMHgwMDA3LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiMTFXQVZFIiwgIjExV1A2MTFBTC1FIiwgMHg5ZWIyZGExZiwgMHhjOWEwZDNmOSwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwMkFSIiwgMHhhYmRhNDE2NCwgMHg0MWIzN2UxZiwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkFUTUVMIiwgIkFUNzZDNTAyQVJfRCIsIDB4YWJkYTQxNjQsIDB4MzY3NWQ3MDQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDJBUl9FIiwgMHhhYmRhNDE2NCwgMHg0MTcyZTc5MiwgQVRNRUxfRldfVFlQRV81MDJFKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJBVE1FTCIsICJBVDc2QzUwNF9SIiwgMHhhYmRhNDE2NCwgMHg5MTdmM2Q3MiwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDQiLCAweGFiZGE0MTY0LCAweDUwNDA2NzBhLCBBVE1FTF9GV19UWVBFXzUwNCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiQVRNRUwiLCAiQVQ3NkM1MDRBIiwgMHhhYmRhNDE2NCwgMHhlMTVlZDg3ZiwgQVRNRUxfRldfVFlQRV81MDRBXzI5NTgpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkJUIiwgIlZveWFnZXIgMTAyMCBMYXB0b3AgQWRhcHRlciIsIDB4YWU0OWI4NmEsIDB4MWU5NTdjZDUsIEFUTUVMX0ZXX1RZUEVfNTAyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJDTmV0IiwgIkNOV0xDIDExTWJwcyBXaXJlbGVzcyBQQyBDYXJkIFYtNSIsIDB4YmM0NzdkZGUsIDB4NTAyZmFlNmIsIEFUTUVMX0ZXX1RZUEVfNTAyRSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiSUVFRSA4MDIuMTFiIiwgIldpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg1Yjg3ODcyNCwgMHgxMjJmMWRmNiwgQVRNRUxfRldfVFlQRV81MDIpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIklFRUUgODAyLjExYiIsICJXaXJlbGVzcyBMQU4gQ2FyZCBTIiwgMHg1Yjg3ODcyNCwgMHg1ZmJhNTMzYSwgQVRNRUxfRldfVFlQRV81MDRfMjk1OCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiT0VNIiwgIjExTWJwcyBXaXJlbGVzcyBMQU4gUEMgQ2FyZCBWLTMiLCAweGZlYTU0YzkwLCAweDFjNWIwZjY4LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiU01DIiwgIjI2MzJXIiwgMHhjNGY4YjE4YiwgMHgzMGYzODc3NCwgQVRNRUxfRldfVFlQRV81MDJEKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQxMl9JTkZPKCJTTUMiLCAiMjYzMlctVjIiLCAweGM0ZjhiMThiLCAweDE3MmQxMzc3LCBBVE1FTF9GV19UWVBFXzUwMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiV2lyZWxlc3MiLCAiUENfQ0FSRCIsIDB4YTQwN2VjZGQsIDB4MTE5ZjYzMTQsIEFUTUVMX0ZXX1RZUEVfNTAyRCksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTJfSU5GTygiV0xBTiIsICI4MDIuMTFiIFBDIENBUkQiLCAweDU3NWM1MTZjLCAweGIxZjZkYmM0LCBBVE1FTF9GV19UWVBFXzUwMkQpLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyX0lORk8oIkxHIiwgIkxXMjEwME4iLCAweGI0NzRkNDNhLCAweDZiMWZlYzk0LCBBVE1FTF9GV19UWVBFXzUwMkUpLAogCVBDTUNJQV9ERVZJQ0VfTlVMTAogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIGF0bWVsX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBhdG1lbF9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCmluZGV4IDJlYjAwYTkuLmE2MWIzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCkBAIC03Miw3ICs3Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBhdG1lbF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0b3BfYXRtZWxfY2FyZChwY2lfZ2V0X2RydmRhdGEocGRldiksIDEpOworCXN0b3BfYXRtZWxfY2FyZChwY2lfZ2V0X2RydmRhdGEocGRldikpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9pbml0X21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvYWNjZXNzLmMgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwppbmRleCAyYTQyYWRkLi5lYTE2ODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYworKysgYi9kcml2ZXJzL3BjaS9hY2Nlc3MuYwpAQCAtMiw2ICsyLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAorI2luY2x1ZGUgInBjaS5oIgorCiAvKgogICogVGhpcyBpbnRlcnJ1cHQtc2FmZSBzcGlubG9jayBwcm90ZWN0cyBhbGwgYWNjZXNzZXMgdG8gUENJCiAgKiBjb25maWd1cmF0aW9uIHNwYWNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggMDYxZWFkMi4uYzQyYjY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC0zMiw4ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4JCQogI2luY2x1ZGUgPGxpbnV4L3BjaWVwb3J0X2lmLmg+CiAjaW5jbHVkZSAicGNpX2hvdHBsdWcuaCIKIApAQCAtNDIsNiArNDAsNyBAQAogZXh0ZXJuIGludCBwY2llaHBfcG9sbF9tb2RlOwogZXh0ZXJuIGludCBwY2llaHBfcG9sbF90aW1lOwogZXh0ZXJuIGludCBwY2llaHBfZGVidWc7CitleHRlcm4gaW50IHBjaWVocF9mb3JjZTsKIAogLyojZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgZG8geyBpZiAocGNpZWhwX2RlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkqLwogI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKHBjaWVocF9kZWJ1ZykgcHJpbnRrKCIlczogIiBmb3JtYXQsIE1ZX05BTUUgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQpAQCAtNDksMzkgKzQ4LDIwIEBACiAjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZvcm1hdCwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0LCBNWV9OQU1FICwgIyMgYXJnKQogCi1zdHJ1Y3QgcGNpX2Z1bmMgewotCXN0cnVjdCBwY2lfZnVuYyAqbmV4dDsKLQl1OCBidXM7Ci0JdTggZGV2aWNlOwotCXU4IGZ1bmN0aW9uOwotCXU4IGlzX2FfYm9hcmQ7Ci0JdTE2IHN0YXR1czsKLQl1OCBjb25maWd1cmVkOwotCXU4IHN3aXRjaF9zYXZlOwotCXU4IHByZXNlbmNlX3NhdmU7Ci0JdTMyIGJhc2VfbGVuZ3RoWzB4MDZdOwotCXU4IGJhc2VfdHlwZVsweDA2XTsKLQl1MTYgcmVzZXJ2ZWQyOwotCXUzMiBjb25maWdfc3BhY2VbMHgyMF07Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19oZWFkOwotCXN0cnVjdCBwY2lfZGV2KiBwY2lfZGV2Oworc3RydWN0IGhvdHBsdWdfcGFyYW1zIHsKKwl1OCBjYWNoZV9saW5lX3NpemU7CisJdTggbGF0ZW5jeV90aW1lcjsKKwl1OCBlbmFibGVfc2VycjsKKwl1OCBlbmFibGVfcGVycjsKIH07CiAKIHN0cnVjdCBzbG90IHsKIAlzdHJ1Y3Qgc2xvdCAqbmV4dDsKIAl1OCBidXM7CiAJdTggZGV2aWNlOworCXUxNiBzdGF0dXM7CiAJdTMyIG51bWJlcjsKLQl1OCBpc19hX2JvYXJkOwotCXU4IGNvbmZpZ3VyZWQ7CiAJdTggc3RhdGU7Ci0JdTggc3dpdGNoX3NhdmU7Ci0JdTggcHJlc2VuY2Vfc2F2ZTsKLQl1MzIgY2FwYWJpbGl0aWVzOwotCXUxNiByZXNlcnZlZDI7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGFza19ldmVudDsKIAl1OCBocF9zbG90OwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwpAQCAtOTAsNDIgKzcwLDQ3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlzbG90X2xpc3Q7CiB9OwogCi1zdHJ1Y3QgcGNpX3Jlc291cmNlIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICogbmV4dDsKLQl1MzIgYmFzZTsKLQl1MzIgbGVuZ3RoOwotfTsKLQogc3RydWN0IGV2ZW50X2luZm8gewogCXUzMiBldmVudF90eXBlOwogCXU4IGhwX3Nsb3Q7CiB9OwogCit0eXBlZGVmIHU4KCpwaHBfaW50cl9jYWxsYmFja190KSAodTggaHBfc2xvdCwgdm9pZCAqaW5zdGFuY2VfaWQpOworCitzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyB7CisJc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBuZXh0OworCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJLyogc3BpbmxvY2sncyAqLworCXUzMiBzbG90X2RldmljZV9vZmZzZXQ7CisJdTMyIG51bV9zbG90czsKKyAgICAJc3RydWN0IHRpbWVyX2xpc3QJaW50X3BvbGxfdGltZXI7CQkvKiBBZGRlZCBmb3IgcG9sbCBldmVudCAqLworCXBocF9pbnRyX2NhbGxiYWNrX3QgCWF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7CisJcGhwX2ludHJfY2FsbGJhY2tfdCAJc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKKwlwaHBfaW50cl9jYWxsYmFja190IAlwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7CisJcGhwX2ludHJfY2FsbGJhY2tfdCAJcG93ZXJfZmF1bHRfY2FsbGJhY2s7CisJdm9pZCAJCQkqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7CisJc3RydWN0IGN0cmxfcmVnIAkqY3JlZzsJCQkJLyogUHRyIHRvIGNvbnRyb2xsZXIgcmVnaXN0ZXIgc3BhY2UgKi8KK307CisKKyNkZWZpbmUgTUFYX0VWRU5UUwkJMTAKIHN0cnVjdCBjb250cm9sbGVyIHsKIAlzdHJ1Y3QgY29udHJvbGxlciAqbmV4dDsKIAlzdHJ1Y3Qgc2VtYXBob3JlIGNyaXRfc2VjdDsJLyogY3JpdGljYWwgc2VjdGlvbiBzZW1hcGhvcmUgKi8KLQl2b2lkICpocGNfY3Rscl9oYW5kbGU7CQkvKiBIUEMgY29udHJvbGxlciBoYW5kbGUgKi8KKwlzdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyAqaHBjX2N0bHJfaGFuZGxlOyAvKiBIUEMgY29udHJvbGxlciBoYW5kbGUgKi8KIAlpbnQgbnVtX3Nsb3RzOwkJCS8qIE51bWJlciBvZiBzbG90cyBvbiBjdGxyICovCiAJaW50IHNsb3RfbnVtX2luYzsJCS8qIDEgb3IgLTEgKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX2hlYWQ7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CiAJc3RydWN0IHBjaV9idXMgKnBjaV9idXM7Ci0Jc3RydWN0IGV2ZW50X2luZm8gZXZlbnRfcXVldWVbMTBdOworCXN0cnVjdCBldmVudF9pbmZvIGV2ZW50X3F1ZXVlW01BWF9FVkVOVFNdOwogCXN0cnVjdCBzbG90ICpzbG90OwogCXN0cnVjdCBocGNfb3BzICpocGNfb3BzOwogCXdhaXRfcXVldWVfaGVhZF90IHF1ZXVlOwkvKiBzbGVlcCAmIHdha2UgcHJvY2VzcyAqLwogCXU4IG5leHRfZXZlbnQ7Ci0JdTggc2VnOwogCXU4IGJ1czsKIAl1OCBkZXZpY2U7CiAJdTggZnVuY3Rpb247Ci0JdTggcmV2OwogCXU4IHNsb3RfZGV2aWNlX29mZnNldDsKLQl1OCBhZGRfc3VwcG9ydDsKLQllbnVtIHBjaV9idXNfc3BlZWQgc3BlZWQ7CiAJdTMyIGZpcnN0X3Nsb3Q7CQkvKiBGaXJzdCBwaHlzaWNhbCBzbG90IG51bWJlciAqLyAgLyogUENJRSBvbmx5IGhhcyAxIHNsb3QgKi8KIAl1OCBzbG90X2J1czsJCS8qIEJ1cyB3aGVyZSB0aGUgc2xvdHMgaGFuZGxlZCBieSB0aGlzIGNvbnRyb2xsZXIgc2l0ICovCiAJdTggY3RybGNhcDsKQEAgLTEzMywyMCArMTE4LDYgQEAKIAl1OCBjYXBfYmFzZTsKIH07CiAKLXN0cnVjdCBpcnFfbWFwcGluZyB7Ci0JdTggYmFyYmVyX3BvbGU7Ci0JdTggdmFsaWRfSU5UOwotCXU4IGludGVycnVwdFs0XTsKLX07Ci0KLXN0cnVjdCByZXNvdXJjZV9saXN0cyB7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcF9tZW1faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICppb19oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmJ1c19oZWFkOwotCXN0cnVjdCBpcnFfbWFwcGluZyAqaXJxczsKLX07Ci0KICNkZWZpbmUgSU5UX0JVVFRPTl9JR05PUkUJCTAKICNkZWZpbmUgSU5UX1BSRVNFTkNFX09OCQkJMQogI2RlZmluZSBJTlRfUFJFU0VOQ0VfT0ZGCQkyCkBAIC0yMDAsMjEgKzE3MSwxNCBAQAogICogZXJyb3IgTWVzc2FnZXMKICAqLwogI2RlZmluZSBtc2dfaW5pdGlhbGl6YXRpb25fZXJyCSJJbml0aWFsaXphdGlvbiBmYWlsdXJlLCBlcnJvcj0lZFxuIgotI2RlZmluZSBtc2dfSFBDX3Jldl9lcnJvcgkiVW5zdXBwb3J0ZWQgcmV2aXNpb24gb2YgdGhlIFBDSSBob3QgcGx1ZyBjb250cm9sbGVyIGZvdW5kLlxuIgotI2RlZmluZSBtc2dfSFBDX25vbl9wY2llCSJUaGUgUENJIGhvdCBwbHVnIGNvbnRyb2xsZXIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci5cbiIKLSNkZWZpbmUgbXNnX0hQQ19ub3Rfc3VwcG9ydGVkCSJUaGlzIHN5c3RlbSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBwY2llcGhkIG1vZHVsZS4gVXBncmFkZSB0byBhIG5ld2VyIHZlcnNpb24gb2YgcGNpZWhwZFxuIgotI2RlZmluZSBtc2dfdW5hYmxlX3RvX3NhdmUJIlVuYWJsZSB0byBzdG9yZSBQQ0kgaG90IHBsdWcgYWRkIHJlc291cmNlIGluZm9ybWF0aW9uLiBUaGlzIHN5c3RlbSBtdXN0IGJlIHJlYm9vdGVkIGJlZm9yZSBhZGRpbmcgYW55IFBDSSBkZXZpY2VzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX29uCQkiUENJIHNsb3QgIyVkIC0gcG93ZXJpbmcgb24gZHVlIHRvIGJ1dHRvbiBwcmVzcy5cbiIKICNkZWZpbmUgbXNnX2J1dHRvbl9vZmYJCSJQQ0kgc2xvdCAjJWQgLSBwb3dlcmluZyBvZmYgZHVlIHRvIGJ1dHRvbiBwcmVzcy5cbiIKICNkZWZpbmUgbXNnX2J1dHRvbl9jYW5jZWwJIlBDSSBzbG90ICMlZCAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogI2RlZmluZSBtc2dfYnV0dG9uX2lnbm9yZQkiUENJIHNsb3QgIyVkIC0gYnV0dG9uIHByZXNzIGlnbm9yZWQuICAoYWN0aW9uIGluIHByb2dyZXNzLi4uKVxuIgogCiAvKiBjb250cm9sbGVyIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludAlwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKTsKIGV4dGVybiBpbnQJcGNpZWhwX2V2ZW50X3N0YXJ0X3RocmVhZAkodm9pZCk7CiBleHRlcm4gdm9pZAlwY2llaHBfZXZlbnRfc3RvcF90aHJlYWQJKHZvaWQpOwotZXh0ZXJuIHN0cnVjdCAJcGNpX2Z1bmMgKnBjaWVocF9zbG90X2NyZWF0ZQkodW5zaWduZWQgY2hhciBidXNudW1iZXIpOwotZXh0ZXJuIHN0cnVjdCAJcGNpX2Z1bmMgKnBjaWVocF9zbG90X2ZpbmQJKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldmljZSwgdW5zaWduZWQgY2hhciBpbmRleCk7CiBleHRlcm4gaW50CXBjaWVocF9lbmFibGVfc2xvdAkJKHN0cnVjdCBzbG90ICpzbG90KTsKIGV4dGVybiBpbnQJcGNpZWhwX2Rpc2FibGVfc2xvdAkJKHN0cnVjdCBzbG90ICpzbG90KTsKIApAQCAtMjI0LDI1ICsxODgsMTcgQEAKIGV4dGVybiB1OAlwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0CSh1OCBocF9zbG90LCB2b2lkICppbnN0X2lkKTsKIC8qIGV4dGVybiB2b2lkCWxvbmdfZGVsYXkgKGludCBkZWxheSk7ICovCiAKLS8qIHJlc291cmNlIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIGludAlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZQkoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpOwotCiAvKiBwY2kgZnVuY3Rpb25zICovCi1leHRlcm4gaW50CXBjaWVocF9zZXRfaXJxCQkJKHU4IGJ1c19udW0sIHU4IGRldl9udW0sIHU4IGludF9waW4sIHU4IGlycV9udW0pOwotLypleHRlcm4gaW50CXBjaWVocF9nZXRfYnVzX2RldgkJKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1OCAqYnVzX251bSwgdTggKmRldl9udW0sIHN0cnVjdCBzbG90ICpzbG90KTsqLwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV9jb25maWcJIAkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pOwotZXh0ZXJuIGludAlwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcwkoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIGludCBmbGFnKTsKLWV4dGVybiBpbnQJcGNpZWhwX3NhdmVfc2xvdF9jb25maWcJCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogbmV3X3Nsb3QpOwotZXh0ZXJuIHZvaWQJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzCShzdHJ1Y3QgcGNpX2Z1bmMgKiBmdW5jKTsKLWV4dGVybiBpbnQJcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMJKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqIHJlc291cmNlcyk7Ci1leHRlcm4gdm9pZAlwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0CShzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpOwotZXh0ZXJuIGludAlwY2llaHBfY29uZmlndXJlX2RldmljZQkJKHN0cnVjdCBjb250cm9sbGVyKiBjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMqIGZ1bmMpOwotZXh0ZXJuIGludAlwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlCShzdHJ1Y3QgcGNpX2Z1bmMqIGZ1bmMpOworZXh0ZXJuIGludAlwY2llaHBfY29uZmlndXJlX2RldmljZQkJKHN0cnVjdCBzbG90ICpwX3Nsb3QpOworZXh0ZXJuIGludAlwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlCShzdHJ1Y3Qgc2xvdCAqcF9zbG90KTsKK2V4dGVybiBpbnQJcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gdm9pZAlwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJICAgICAgIAlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCk7CisKIAogCiAvKiBHbG9iYWwgdmFyaWFibGVzICovCiBleHRlcm4gc3RydWN0IGNvbnRyb2xsZXIgKnBjaWVocF9jdHJsX2xpc3Q7Ci1leHRlcm4gc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9saXN0WzI1Nl07CiAKIC8qIElubGluZSBmdW5jdGlvbnMgKi8KIApAQCAtMjUyLDEyICsyMDgsOSBAQAogCiAJcF9zbG90ID0gY3RybC0+c2xvdDsKIAotCWRiZygicF9zbG90ID0gJXBcbiIsIHBfc2xvdCk7Ci0KIAl3aGlsZSAocF9zbG90ICYmIChwX3Nsb3QtPmRldmljZSAhPSBkZXZpY2UpKSB7CiAJCXRtcF9zbG90ID0gcF9zbG90OwogCQlwX3Nsb3QgPSBwX3Nsb3QtPm5leHQ7Ci0JCWRiZygiSW4gd2hpbGUgbG9vcCwgcF9zbG90ID0gJXBcbiIsIHBfc2xvdCk7CiAJfQogCWlmIChwX3Nsb3QgPT0gTlVMTCkgewogCQllcnIoIkVSUk9SOiBwY2llaHBfZmluZF9zbG90IGRldmljZT0weCV4XG4iLCBkZXZpY2UpOwpAQCAtMjczLDcgKzIyNiw2IEBACiAKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKIAotCWRiZygiJXMgOiBzdGFydFxuIiwgX19GVU5DVElPTl9fKTsKIAlhZGRfd2FpdF9xdWV1ZSgmY3RybC0+cXVldWUsICZ3YWl0KTsKIAlpZiAoIXBjaWVocF9wb2xsX21vZGUpCiAJCS8qIFNsZWVwIGZvciB1cCB0byAxIHNlY29uZCAqLwpAQCAtMjg1LDE5ICsyMzcsOSBAQAogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dmFsID0gIC1FSU5UUjsKIAotCWRiZygiJXMgOiBlbmRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogUHV0cyBub2RlIGJhY2sgaW4gdGhlIHJlc291cmNlIGxpc3QgcG9pbnRlZCB0byBieSBoZWFkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmV0dXJuX3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCBzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlKQotewotCWlmICghbm9kZSB8fCAhaGVhZCkKLQkJcmV0dXJuOwotCW5vZGUtPm5leHQgPSAqaGVhZDsKLQkqaGVhZCA9IG5vZGU7Ci19Ci0KICNkZWZpbmUgU0xPVF9OQU1FX1NJWkUgMTAKIAogc3RhdGljIGlubGluZSB2b2lkIG1ha2Vfc2xvdF9uYW1lKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLCBzdHJ1Y3Qgc2xvdCAqc2xvdCkKQEAgLTMxMSwxNCArMjUzLDcgQEAKIAlBQ1BJCiB9OwogCi10eXBlZGVmIHU4KCpwaHBfaW50cl9jYWxsYmFja190KSAodW5zaWduZWQgaW50IGNoYW5nZV9pZCwgdm9pZCAqaW5zdGFuY2VfaWQpOwotCi1pbnQgcGNpZV9pbml0KHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwKLQkJcGhwX2ludHJfY2FsbGJhY2tfdCBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrLAotCQlwaHBfaW50cl9jYWxsYmFja190IHN3aXRjaF9jaGFuZ2VfY2FsbGJhY2ssCi0JCXBocF9pbnRyX2NhbGxiYWNrX3QgcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrLAotCQlwaHBfaW50cl9jYWxsYmFja190IHBvd2VyX2ZhdWx0X2NhbGxiYWNrKTsKLQoraW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpOwogCiAvKiBUaGlzIGhhcyBubyBtZWFuaW5nIGZvciBQQ0kgRXhwcmVzcywgYXMgdGhlcmUgaXMgb25seSAxIHNsb3QgcGVyIHBvcnQgKi8KIGludCBwY2llX2dldF9jdGxyX3Nsb3RfY29uZmlnKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY29yZS5jCmluZGV4IGNhZmM3ZWEuLjhkZjcwNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jb3JlLmMKQEAgLTI3LDI3ICsyNywyMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSAicGNpZWhwLmgiCi0jaW5jbHVkZSAicGNpZWhwcm0uaCIKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyogR2xvYmFsIHZhcmlhYmxlcyAqLwogaW50IHBjaWVocF9kZWJ1ZzsKIGludCBwY2llaHBfcG9sbF9tb2RlOwogaW50IHBjaWVocF9wb2xsX3RpbWU7CitpbnQgcGNpZWhwX2ZvcmNlOwogc3RydWN0IGNvbnRyb2xsZXIgKnBjaWVocF9jdHJsX2xpc3Q7Ci1zdHJ1Y3QgcGNpX2Z1bmMgKnBjaWVocF9zbG90X2xpc3RbMjU2XTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SCSJEYW4gWmluayA8ZGFuLnppbmtAY29tcGFxLmNvbT4sIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+LCBEZWx5IFN5IDxkZWx5Lmwuc3lAaW50ZWwuY29tPiIKQEAgLTYwLDkgKzUzLDExIEBACiBtb2R1bGVfcGFyYW0ocGNpZWhwX2RlYnVnLCBib29sLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShwY2llaHBfcG9sbF9tb2RlLCBib29sLCAwNjQ0KTsKIG1vZHVsZV9wYXJhbShwY2llaHBfcG9sbF90aW1lLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHBjaWVocF9mb3JjZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9kZWJ1ZywgIkRlYnVnZ2luZyBtb2RlIGVuYWJsZWQgb3Igbm90Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9wb2xsX21vZGUsICJVc2luZyBwb2xsaW5nIG1lY2hhbmlzbSBmb3IgaG90LXBsdWcgZXZlbnRzIG9yIG5vdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwY2llaHBfcG9sbF90aW1lLCAiUG9sbGluZyBtZWNoYW5pc20gZnJlcXVlbmN5LCBpbiBzZWNvbmRzIik7CitNT0RVTEVfUEFSTV9ERVNDKHBjaWVocF9mb3JjZSwgIkZvcmNlIHBjaWVocCwgZXZlbiBpZiBfT1NDIGFuZCBPU0hQIGFyZSBtaXNzaW5nIik7CiAKICNkZWZpbmUgUENJRV9NT0RVTEVfTkFNRSAicGNpZWhwIgogCkBAIC0xMTQsOCArMTA5LDYgQEAKIAl1MzIgc2xvdF9udW1iZXI7CiAJaW50IHJlc3VsdCA9IC1FTk9NRU07CiAKLQlkYmcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7Ci0KIAludW1iZXJfb2Zfc2xvdHMgPSBjdHJsLT5udW1fc2xvdHM7CiAJc2xvdF9kZXZpY2UgPSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJc2xvdF9udW1iZXIgPSBjdHJsLT5maXJzdF9zbG90OwpAQCAtMzcwLDcgKzM2Myw2IEBACiAJdTggdmFsdWU7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJCi0JZGJnKCIlczogQ2FsbGVkIGJ5IGhwX2RydlxuIiwgX19GVU5DVElPTl9fKTsKIAljdHJsID0ga21hbGxvYyhzaXplb2YoKmN0cmwpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWN0cmwpIHsKIAkJZXJyKCIlcyA6IG91dCBvZiBtZW1vcnlcbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zNzgsMjIgKzM3MCwxNSBAQAogCX0KIAltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKHN0cnVjdCBjb250cm9sbGVyKSk7CiAKLQlkYmcoIiVzOiBEUlZfdGhyZWFkIHBpZCA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIGN1cnJlbnQtPnBpZCk7Ci0JCiAJcGRldiA9IGRldi0+cG9ydDsKKwljdHJsLT5wY2lfZGV2ID0gcGRldjsKIAotCXJjID0gcGNpZV9pbml0KGN0cmwsIGRldiwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfYXR0ZW50aW9uX2J1dHRvbiwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfc3dpdGNoX2NoYW5nZSwKLQkJKHBocF9pbnRyX2NhbGxiYWNrX3QpIHBjaWVocF9oYW5kbGVfcHJlc2VuY2VfY2hhbmdlLAotCQkocGhwX2ludHJfY2FsbGJhY2tfdCkgcGNpZWhwX2hhbmRsZV9wb3dlcl9mYXVsdCk7CisJcmMgPSBwY2llX2luaXQoY3RybCwgZGV2KTsKIAlpZiAocmMpIHsKIAkJZGJnKCIlczogY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsIFBDSUVfTU9EVUxFX05BTUUpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsOwogCX0KIAotCWN0cmwtPnBjaV9kZXYgPSBwZGV2OwotCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGN0cmwpOwogCiAJY3RybC0+cGNpX2J1cyA9IGttYWxsb2Moc2l6ZW9mKCpjdHJsLT5wY2lfYnVzKSwgR0ZQX0tFUk5FTCk7CkBAIC00MDIsNyArMzg3LDYgQEAKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfdW5tYXBfbW1pb19yZWdpb247CiAJfQotCWRiZygiJXM6IGN0cmwtPnBjaV9idXMgJXBcbiIsIF9fRlVOQ1RJT05fXywgY3RybC0+cGNpX2J1cyk7CiAJbWVtY3B5IChjdHJsLT5wY2lfYnVzLCBwZGV2LT5idXMsIHNpemVvZiAoKmN0cmwtPnBjaV9idXMpKTsKIAljdHJsLT5idXMgPSBwZGV2LT5idXMtPm51bWJlcjsgIC8qIGN0cmwgYnVzICovCiAJY3RybC0+c2xvdF9idXMgPSBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyOyAgLyogYnVzIGNvbnRyb2xsZWQgYnkgdGhpcyBIUEMgKi8KQEAgLTQyNCwyNSArNDA4LDYgQEAKIAlmaXJzdF9kZXZpY2VfbnVtID0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OwogCW51bV9jdGxyX3Nsb3RzID0gY3RybC0+bnVtX3Nsb3RzOyAKIAotCS8qIFN0b3JlIFBDSSBDb25maWcgU3BhY2UgZm9yIGFsbCBkZXZpY2VzIG9uIHRoaXMgYnVzICovCi0JZGJnKCIlczogQmVmb3JlIGNhbGxpbmcgcGNpZWhwX3NhdmVfY29uZmlnLCBjdHJsLT5idXMgJXgsY3RybC0+c2xvdF9idXMgJXhcbiIsIAotCQlfX0ZVTkNUSU9OX18sY3RybC0+YnVzLCBjdHJsLT5zbG90X2J1cyk7Ci0JcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgY3RybC0+c2xvdF9idXMsIG51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQlpZiAocmMpIHsKLQkJZXJyKCIlczogdW5hYmxlIHRvIHNhdmUgUENJIGNvbmZpZ3VyYXRpb24gZGF0YSwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX2J1czsKLQl9Ci0KLQkvKiBHZXQgSU8sIG1lbW9yeSwgYW5kIElSUSByZXNvdXJjZXMgZm9yIG5ldyBkZXZpY2VzICovCi0JcmMgPSBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoY3RybCk7Ci0JY3RybC0+YWRkX3N1cHBvcnQgPSAhcmM7Ci0JCi0JaWYgKHJjKSB7Ci0JCWRiZygicGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzID0gJSN4XG4iLCByYyk7Ci0JCWVycigidW5hYmxlIHRvIGxvY2F0ZSBQQ0kgY29uZmlndXJhdGlvbiByZXNvdXJjZXMgZm9yIGhvdCBwbHVnIGFkZC5cbiIpOwotCQlnb3RvIGVycl9vdXRfZnJlZV9jdHJsX2J1czsKLQl9Ci0KIAkvKiBTZXR1cCB0aGUgc2xvdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzICovCiAJcmMgPSBpbml0X3Nsb3RzKGN0cmwpOwogCWlmIChyYykgewpAQCAtNDUxLDcgKzQxNiw2IEBACiAJfQogCiAJdF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQlkYmcoIiVzOiB0X3Nsb3QgJXBcbiIsIF9fRlVOQ1RJT05fXywgdF9zbG90KTsKIAogCS8qCUZpbmlzaCBzZXR0aW5nIHVwIHRoZSBob3QgcGx1ZyBjdHJsIGRldmljZSAqLwogCWN0cmwtPm5leHRfZXZlbnQgPSAwOwpAQCAtNDY4LDcgKzQzMiw2IEBACiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKIAogCXRfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHRfc2xvdCwgJnZhbHVlKTsgLyogQ2hlY2sgaWYgc2xvdCBpcyBvY2N1cGllZCAqLwotCWRiZygiJXM6IGFkcGF0ZXIgdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdmFsdWUpOwogCQogCWlmICgoUE9XRVJfQ1RSTChjdHJsLT5jdHJsY2FwKSkgJiYgIXZhbHVlKSB7CiAJCXJjID0gdF9zbG90LT5ocGNfb3BzLT5wb3dlcl9vZmZfc2xvdCh0X3Nsb3QpOyAvKiBQb3dlciBvZmYgc2xvdCBpZiBub3Qgb2NjdXBpZWQqLwpAQCAtNTAxLDcgKzQ2NCw2IEBACiAKIHN0YXRpYyBpbnQgcGNpZV9zdGFydF90aHJlYWQodm9pZCkKIHsKLQlpbnQgbG9vcDsKIAlpbnQgcmV0dmFsID0gMDsKIAkKIAlkYmcoIkluaXRpYWxpemUgKyBTdGFydCB0aGUgbm90aWZpY2F0aW9uL3BvbGxpbmcgbWVjaGFuaXNtIFxuIik7CkBAIC01MTIsMzIgKzQ3NCwxMSBAQAogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWRiZygiSW5pdGlhbGl6ZSBzbG90IGxpc3RzXG4iKTsKLQkvKiBPbmUgc2xvdCBsaXN0IGZvciBlYWNoIGJ1cyBpbiB0aGUgc3lzdGVtICovCi0JZm9yIChsb29wID0gMDsgbG9vcCA8IDI1NjsgbG9vcCsrKSB7Ci0JCXBjaWVocF9zbG90X2xpc3RbbG9vcF0gPSBOVUxMOwotCX0KLQogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXQKLWZyZWVfcGNpZWhwX3JlcyhzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXMpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdHJlczsKLQotCXdoaWxlIChyZXMpIHsKLQkJdHJlcyA9IHJlczsKLQkJcmVzID0gcmVzLT5uZXh0OwotCQlrZnJlZSh0cmVzKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCB1bmxvYWRfcGNpZWhwZCh2b2lkKQogewotCXN0cnVjdCBwY2lfZnVuYyAqbmV4dDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKlRlbXBTbG90OwotCWludCBsb29wOwogCXN0cnVjdCBjb250cm9sbGVyICpjdHJsOwogCXN0cnVjdCBjb250cm9sbGVyICp0Y3RybDsKIApAQCAtNTQ2LDExICs0ODcsNiBAQAogCXdoaWxlIChjdHJsKSB7CiAJCWNsZWFudXBfc2xvdHMoY3RybCk7CiAKLQkJZnJlZV9wY2llaHBfcmVzKGN0cmwtPmlvX2hlYWQpOwotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+bWVtX2hlYWQpOwotCQlmcmVlX3BjaWVocF9yZXMoY3RybC0+cF9tZW1faGVhZCk7Ci0JCWZyZWVfcGNpZWhwX3JlcyhjdHJsLT5idXNfaGVhZCk7Ci0KIAkJa2ZyZWUgKGN0cmwtPnBjaV9idXMpOwogCiAJCWN0cmwtPmhwY19vcHMtPnJlbGVhc2VfY3RscihjdHJsKTsKQEAgLTU2MSwyMCArNDk3LDYgQEAKIAkJa2ZyZWUodGN0cmwpOwogCX0KIAotCWZvciAobG9vcCA9IDA7IGxvb3AgPCAyNTY7IGxvb3ArKykgewotCQluZXh0ID0gcGNpZWhwX3Nsb3RfbGlzdFtsb29wXTsKLQkJd2hpbGUgKG5leHQgIT0gTlVMTCkgewotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPmlvX2hlYWQpOwotCQkJZnJlZV9wY2llaHBfcmVzKG5leHQtPm1lbV9oZWFkKTsKLQkJCWZyZWVfcGNpZWhwX3JlcyhuZXh0LT5wX21lbV9oZWFkKTsKLQkJCWZyZWVfcGNpZWhwX3JlcyhuZXh0LT5idXNfaGVhZCk7Ci0KLQkJCVRlbXBTbG90ID0gbmV4dDsKLQkJCW5leHQgPSBuZXh0LT5uZXh0OwotCQkJa2ZyZWUoVGVtcFNsb3QpOwotCQl9Ci0JfQotCiAJLyogU3RvcCB0aGUgbm90aWZpY2F0aW9uIG1lY2hhbmlzbSAqLwogCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZCgpOwogCkBAIC02MzksMjEgKzU2MSwxNiBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZXJyb3JfaHBjX2luaXQ7CiAKLQlyZXR2YWwgPSBwY2llaHBybV9pbml0KFBDSSk7Ci0JaWYgKCFyZXR2YWwpIHsKLSAJCXJldHZhbCA9IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKCZocGRyaXZlcl9wb3J0ZHJ2KTsKLSAJCWRiZygicGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIgPSAlZFxuIiwgcmV0dmFsKTsKLSAgCQlpbmZvKERSSVZFUl9ERVNDICIgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iKTsKLSAJCWlmIChyZXR2YWwpCi0gCQkgICBkYmcoIiVzOiBGYWlsdXJlIHRvIHJlZ2lzdGVyIHNlcnZpY2VcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JfQorCXJldHZhbCA9IHBjaWVfcG9ydF9zZXJ2aWNlX3JlZ2lzdGVyKCZocGRyaXZlcl9wb3J0ZHJ2KTsKKyAJZGJnKCJwY2llX3BvcnRfc2VydmljZV9yZWdpc3RlciA9ICVkXG4iLCByZXR2YWwpOworICAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CisgCWlmIChyZXR2YWwpCisJCWRiZygiJXM6IEZhaWx1cmUgdG8gcmVnaXN0ZXIgc2VydmljZVxuIiwgX19GVU5DVElPTl9fKTsKIAogZXJyb3JfaHBjX2luaXQ6CiAJaWYgKHJldHZhbCkgewotCQlwY2llaHBybV9jbGVhbnVwKCk7CiAJCXBjaWVocF9ldmVudF9zdG9wX3RocmVhZCgpOwotCX0gZWxzZQotCQlwY2llaHBybV9wcmludF9waXJ0KCk7CisJfTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC02NjMsOSArNTgwLDYgQEAKIAlkYmcoInVubG9hZF9wY2llaHBkKClcbiIpOwogCXVubG9hZF9wY2llaHBkKCk7CiAKLQlwY2llaHBybV9jbGVhbnVwKCk7Ci0KLQlkYmcoInBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXJcbiIpOwogCXBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoJmhwZHJpdmVyX3BvcnRkcnYpOwogCiAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIiB1bmxvYWRlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKaW5kZXggODk4ZjZkYS4uNWU1ODJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYwpAQCAtMjcsMjUgKzI3LDE0IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCiAKLXN0YXRpYyB1MzIgY29uZmlndXJlX25ld19kZXZpY2Uoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OCBiZWhpbmRfYnJpZGdlLCBzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKnJlc291cmNlcywgdTggYnJpZGdlX2J1cywgdTggYnJpZGdlX2Rldik7Ci1zdGF0aWMgaW50IGNvbmZpZ3VyZV9uZXdfZnVuY3Rpb24oIHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICpyZXNvdXJjZXMsIHU4IGJyaWRnZV9idXMsIHU4IGJyaWRnZV9kZXYpOwogc3RhdGljIHZvaWQgaW50ZXJydXB0X2V2ZW50X2hhbmRsZXIoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogCiBzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBldmVudF9zZW1hcGhvcmU7CS8qIG11dGV4IGZvciBwcm9jZXNzIGxvb3AgKHVwIGlmIHNvbWV0aGluZyB0byBwcm9jZXNzKSAqLwpAQCAtNjAsMjIgKzQ5LDE4IEBACiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKIAl1OCByYyA9IDA7CiAJdTggZ2V0c3RhdHVzOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBBdHRlbnRpb24gQnV0dG9uIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgQXR0ZW50aW9uIGJ1dHRvbiBpbnRlcnJ1cHQgcmVjZWl2ZWQuXG4iKTsKIAkKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkIHdoYXQgdG8gZG8gKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwogCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCQotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CkBAIC0xMTcsMjQgKzEwMiwyMCBAQAogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJdTggcmMgPSAwOwogCXU4IGdldHN0YXR1czsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAJc3RydWN0IGV2ZW50X2luZm8gKnRhc2tJbmZvOwogCiAJLyogU3dpdGNoIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgU3dpdGNoIGludGVycnVwdCByZWNlaXZlZC5cbiIpOwogCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIChocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KSwgMCk7Ci0KIAkvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgd29ya2VyIHRocmVhZAogCSAqIHdoYXQgdG8gZG8KIAkgKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCiAJaWYgKGdldHN0YXR1cykgewpAQCAtMTQyLDE0ICsxMjMsMTIgQEAKIAkJICogU3dpdGNoIG9wZW5lZAogCQkgKi8KIAkJaW5mbygiTGF0Y2ggb3BlbiBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDA7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1NXSVRDSF9PUEVOOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqICBTd2l0Y2ggY2xvc2VkCiAJCSAqLwogCQlpbmZvKCJMYXRjaCBjbG9zZSBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9IDB4MTA7CiAJCXRhc2tJbmZvLT5ldmVudF90eXBlID0gSU5UX1NXSVRDSF9DTE9TRTsKIAl9CiAKQEAgLTE2MywyMCArMTQyLDE3IEBACiB7CiAJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSAoc3RydWN0IGNvbnRyb2xsZXIgKikgaW5zdF9pZDsKIAlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXU4IHJjID0gMDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CisJdTggcHJlc2VuY2Vfc2F2ZSwgcmMgPSAwOwogCXN0cnVjdCBldmVudF9pbmZvICp0YXNrSW5mbzsKIAogCS8qIFByZXNlbmNlIENoYW5nZSAqLwogCWRiZygicGNpZWhwOiAgUHJlc2VuY2UvTm90aWZ5IGlucHV0IGNoYW5nZS5cbiIpOwogCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoY3RybC0+c2xvdF9idXMsIChocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KSwgMCk7Ci0KIAkvKiBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgd29ya2VyIHRocmVhZAogCSAqIHdoYXQgdG8gZG8KIAkgKi8KIAl0YXNrSW5mbyA9ICYoY3RybC0+ZXZlbnRfcXVldWVbY3RybC0+bmV4dF9ldmVudF0pOwotCWN0cmwtPm5leHRfZXZlbnQgPSAoY3RybC0+bmV4dF9ldmVudCArIDEpICUgMTA7CisJY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSBNQVhfRVZFTlRTOwogCXRhc2tJbmZvLT5ocF9zbG90ID0gaHBfc2xvdDsKIAogCXJjKys7CkBAIC0xODUsOCArMTYxLDggQEAKIAkvKiBTd2l0Y2ggaXMgb3BlbiwgYXNzdW1lIGEgcHJlc2VuY2UgY2hhbmdlCiAJICogU2F2ZSB0aGUgcHJlc2VuY2Ugc3RhdGUKIAkgKi8KLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwotCWlmIChmdW5jLT5wcmVzZW5jZV9zYXZlKSB7CisJcF9zbG90LT5ocGNfb3BzLT5nZXRfYWRhcHRlcl9zdGF0dXMocF9zbG90LCAmcHJlc2VuY2Vfc2F2ZSk7CisJaWYgKHByZXNlbmNlX3NhdmUpIHsKIAkJLyoKIAkJICogQ2FyZCBQcmVzZW50CiAJCSAqLwpAQCAtMjExLDE5ICsxODcsMTYgQEAKIAlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IChzdHJ1Y3QgY29udHJvbGxlciAqKSBpbnN0X2lkOwogCXN0cnVjdCBzbG90ICpwX3Nsb3Q7CiAJdTggcmMgPSAwOwotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYzsKIAlzdHJ1Y3QgZXZlbnRfaW5mbyAqdGFza0luZm87CiAKIAkvKiBwb3dlciBmYXVsdCAqLwogCWRiZygicGNpZWhwOiAgUG93ZXIgZmF1bHQgaW50ZXJydXB0IHJlY2VpdmVkLlxuIik7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCS8qIHRoaXMgaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRlbGxzIHRoZSB3b3JrZXIgdGhyZWFkCiAJICogd2hhdCB0byBkbwogCSAqLwogCXRhc2tJbmZvID0gJihjdHJsLT5ldmVudF9xdWV1ZVtjdHJsLT5uZXh0X2V2ZW50XSk7Ci0JY3RybC0+bmV4dF9ldmVudCA9IChjdHJsLT5uZXh0X2V2ZW50ICsgMSkgJSAxMDsKKwljdHJsLT5uZXh0X2V2ZW50ID0gKGN0cmwtPm5leHRfZXZlbnQgKyAxKSAlIE1BWF9FVkVOVFM7CiAJdGFza0luZm8tPmhwX3Nsb3QgPSBocF9zbG90OwogCiAJcmMrKzsKQEAgLTIzNCw3ICsyMDcsNyBAQAogCQkgKiBwb3dlciBmYXVsdCBDbGVhcmVkCiAJCSAqLwogCQlpbmZvKCJQb3dlciBmYXVsdCBjbGVhcmVkIG9uIFNsb3QoJWQpXG4iLCBjdHJsLT5maXJzdF9zbG90ICsgaHBfc2xvdCk7Ci0JCWZ1bmMtPnN0YXR1cyA9IDB4MDA7CisJCXBfc2xvdC0+c3RhdHVzID0gMHgwMDsKIAkJdGFza0luZm8tPmV2ZW50X3R5cGUgPSBJTlRfUE9XRVJfRkFVTFRfQ0xFQVI7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTI0Myw3ICsyMTYsNyBAQAogCQlpbmZvKCJQb3dlciBmYXVsdCBvbiBTbG90KCVkKVxuIiwgY3RybC0+Zmlyc3Rfc2xvdCArIGhwX3Nsb3QpOwogCQl0YXNrSW5mby0+ZXZlbnRfdHlwZSA9IElOVF9QT1dFUl9GQVVMVDsKIAkJLyogc2V0IHBvd2VyIGZhdWx0IHN0YXR1cyBmb3IgdGhpcyBib2FyZCAqLwotCQlmdW5jLT5zdGF0dXMgPSAweEZGOworCQlwX3Nsb3QtPnN0YXR1cyA9IDB4RkY7CiAJCWluZm8oInBvd2VyIGZhdWx0IGJpdCAleCBzZXRcbiIsIGhwX3Nsb3QpOwogCX0KIAlpZiAocmMpCkBAIC0yNTIsODEwICsyMjUsNiBAQAogCXJldHVybiByYzsKIH0KIAotCi0vKioKLSAqIHNvcnRfYnlfc2l6ZTogc29ydCBub2RlcyBieSB0aGVpciBsZW5ndGgsIHNtYWxsZXN0IGZpcnN0LgotICoKLSAqIEBoZWFkOiBsaXN0IHRvIHNvcnQKLSAqLwotc3RhdGljIGludCBzb3J0X2J5X3NpemUoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqY3VycmVudF9yZXM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqbmV4dF9yZXM7Ci0JaW50IG91dF9vZl9vcmRlciA9IDE7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiAxOwotCi0JaWYgKCEoKCpoZWFkKS0+bmV4dCkpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKG91dF9vZl9vcmRlcikgewotCQlvdXRfb2Zfb3JkZXIgPSAwOwotCi0JCS8qIFNwZWNpYWwgY2FzZSBmb3Igc3dhcHBpbmcgbGlzdCBoZWFkICovCi0JCWlmICgoKCpoZWFkKS0+bmV4dCkgJiYKLQkJICAgICgoKmhlYWQpLT5sZW5ndGggPiAoKmhlYWQpLT5uZXh0LT5sZW5ndGgpKSB7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJCWN1cnJlbnRfcmVzID0gKmhlYWQ7Ci0JCQkqaGVhZCA9ICgqaGVhZCktPm5leHQ7Ci0JCQljdXJyZW50X3Jlcy0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gY3VycmVudF9yZXM7Ci0JCX0KLQotCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCi0JCXdoaWxlIChjdXJyZW50X3Jlcy0+bmV4dCAmJiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dCkgewotCQkJaWYgKGN1cnJlbnRfcmVzLT5uZXh0LT5sZW5ndGggPiBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dC0+bGVuZ3RoKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbmV4dF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IGN1cnJlbnRfcmVzLT5uZXh0LT5uZXh0OwotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJbmV4dF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJCQljdXJyZW50X3Jlcy0+bmV4dCA9IG5leHRfcmVzOwotCQkJfSBlbHNlCi0JCQkJY3VycmVudF9yZXMgPSBjdXJyZW50X3Jlcy0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHNvcnRfYnlfbWF4X3NpemUKLSAqCi0gKiBTb3J0cyBub2RlcyBvbiB0aGUgbGlzdCBieSB0aGVpciBsZW5ndGguCi0gKiBMYXJnZXN0IGZpcnN0LgotICoKLSAqLwotc3RhdGljIGludCBzb3J0X2J5X21heF9zaXplKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmN1cnJlbnRfcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5leHRfcmVzOwotCWludCBvdXRfb2Zfb3JkZXIgPSAxOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gMTsKLQotCWlmICghKCgqaGVhZCktPm5leHQpKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlIChvdXRfb2Zfb3JkZXIpIHsKLQkJb3V0X29mX29yZGVyID0gMDsKLQotCQkvKiBTcGVjaWFsIGNhc2UgZm9yIHN3YXBwaW5nIGxpc3QgaGVhZCAqLwotCQlpZiAoKCgqaGVhZCktPm5leHQpICYmCi0JCSAgICAoKCpoZWFkKS0+bGVuZ3RoIDwgKCpoZWFkKS0+bmV4dC0+bGVuZ3RoKSkgewotCQkJb3V0X29mX29yZGVyKys7Ci0JCQljdXJyZW50X3JlcyA9ICpoZWFkOwotCQkJKmhlYWQgPSAoKmhlYWQpLT5uZXh0OwotCQkJY3VycmVudF9yZXMtPm5leHQgPSAoKmhlYWQpLT5uZXh0OwotCQkJKCpoZWFkKS0+bmV4dCA9IGN1cnJlbnRfcmVzOwotCQl9Ci0KLQkJY3VycmVudF9yZXMgPSAqaGVhZDsKLQotCQl3aGlsZSAoY3VycmVudF9yZXMtPm5leHQgJiYgY3VycmVudF9yZXMtPm5leHQtPm5leHQpIHsKLQkJCWlmIChjdXJyZW50X3Jlcy0+bmV4dC0+bGVuZ3RoIDwgY3VycmVudF9yZXMtPm5leHQtPm5leHQtPmxlbmd0aCkgewotCQkJCW91dF9vZl9vcmRlcisrOwotCQkJCW5leHRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMtPm5leHQgPSBjdXJyZW50X3Jlcy0+bmV4dC0+bmV4dDsKLQkJCQljdXJyZW50X3JlcyA9IGN1cnJlbnRfcmVzLT5uZXh0OwotCQkJCW5leHRfcmVzLT5uZXh0ID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCQkJY3VycmVudF9yZXMtPm5leHQgPSBuZXh0X3JlczsKLQkJCX0gZWxzZQotCQkJCWN1cnJlbnRfcmVzID0gY3VycmVudF9yZXMtPm5leHQ7Ci0JCX0KLQl9ICAvKiBFbmQgb2Ygb3V0X29mX29yZGVyIGxvb3AgKi8KLQotCXJldHVybiAwOwotfQotCi0KLS8qKgotICogZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdDogcmV0dXJuIG9uZSB1bnVzZWQgcmVzb3VyY2Ugbm9kZQotICogQGhlYWQ6IGxpc3QgdG8gc2NhbgotICoKLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfcmVzb3VyY2UgKgotZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqaGVhZCwKLQkJCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqb3JpZ19oZWFkLCB1MzIgYWxpZ25tZW50KQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHJjOwotCXUzMiB0ZW1wX2R3b3JkOwotCWRiZygiZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdFxuIik7Ci0KLQlpZiAoISgqaGVhZCkgfHwgISgqb3JpZ19oZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyYyA9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKGhlYWQpOwotCi0JaWYgKHJjKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmICgoKmhlYWQpLT5iYXNlICE9ICgqb3JpZ19oZWFkKS0+YmFzZSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoKCpoZWFkKS0+bGVuZ3RoID09ICgqb3JpZ19oZWFkKS0+bGVuZ3RoKQotCQlyZXR1cm4gTlVMTDsKLQotCi0JLyogSWYgd2UgZ290IGhlcmUsIHRoZXJlIHRoZSBicmlkZ2UgcmVxdWlyZXMgc29tZSBvZiB0aGUgcmVzb3VyY2UsIGJ1dAotCSAqICB3ZSBtYXkgYmUgYWJsZSB0byBzcGxpdCBzb21lIG9mZiBvZiB0aGUgZnJvbnQKLQkgKi8JCi0Jbm9kZSA9ICpoZWFkOwotCi0JaWYgKG5vZGUtPmxlbmd0aCAmIChhbGlnbm1lbnQgLTEpKSB7Ci0JCS8qIHRoaXMgb25lIGlzbid0IGFuIGFsaWduZWQgbGVuZ3RoLCBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5Ci0JCSAqIGFuZCBzcGxpdCBpdCB1cC4KLQkJICovCi0JCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJcmV0dXJuIE5VTEw7Ci0KLQkJdGVtcF9kd29yZCA9IChub2RlLT5sZW5ndGggfCAoYWxpZ25tZW50LTEpKSArIDEgLSBhbGlnbm1lbnQ7Ci0KLQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2U7Ci0JCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQ7Ci0KLQkJbm9kZS0+bGVuZ3RoIC09IHRlbXBfZHdvcmQ7Ci0JCW5vZGUtPmJhc2UgKz0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkqaGVhZCA9IHNwbGl0X25vZGU7Ci0JCXNwbGl0X25vZGUtPm5leHQgPSBub2RlOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggPCBhbGlnbm1lbnQpCi0JCXJldHVybiBOVUxMOwotCi0JLyogTm93IHVubGluayBpdCAqLwotCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCSpoZWFkID0gbm9kZS0+bmV4dDsKLQl9IGVsc2UgewotCQlwcmV2bm9kZSA9ICpoZWFkOwotCQl3aGlsZSAocHJldm5vZGUtPm5leHQgIT0gbm9kZSkKLQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCX0KLQlub2RlLT5uZXh0ID0gTlVMTDsKLQotCXJldHVybiBub2RlOwotfQotCi0KLS8qKgotICogZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0OiByZXR1cm4gb25lIHVudXNlZCByZXNvdXJjZSBub2RlCi0gKiBAaGVhZDogbGlzdCB0byBzY2FuCi0gKgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqCi1kb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBhbGlnbm1lbnQpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcHJldm5vZGUgPSBOVUxMOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0JdTMyIHJjOwotCXUzMiB0ZW1wX2R3b3JkOwotCi0JaWYgKCEoKmhlYWQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJjID0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCk7Ci0KLQlpZiAocmMpCi0JCXJldHVybiBOVUxMOwotCi0Jbm9kZSA9ICpoZWFkOwotCi0Jd2hpbGUgKG5vZGUtPm5leHQpIHsKLQkJcHJldm5vZGUgPSBub2RlOwotCQlub2RlID0gbm9kZS0+bmV4dDsKLQkJa2ZyZWUocHJldm5vZGUpOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggPCBhbGlnbm1lbnQpIHsKLQkJa2ZyZWUobm9kZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmIChub2RlLT5iYXNlICYgKGFsaWdubWVudCAtIDEpKSB7Ci0JCS8qIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJdGVtcF9kd29yZCA9IChub2RlLT5iYXNlIHwgKGFsaWdubWVudC0xKSkgKyAxOwotCQlpZiAoKG5vZGUtPmxlbmd0aCAtICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSkpIDwgYWxpZ25tZW50KSB7Ci0JCQlrZnJlZShub2RlKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0KLQkJbm9kZS0+bGVuZ3RoIC09ICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSk7Ci0JCW5vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCX0KLQotCWlmIChub2RlLT5sZW5ndGggJiAoYWxpZ25tZW50IC0gMSkpIHsKLQkJLyogVGhlcmUncyBzdHVmZiBpbiB1c2UgYWZ0ZXIgdGhpcyBub2RlICovCi0JCWtmcmVlKG5vZGUpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogZ2V0X2lvX3Jlc291cmNlCi0gKgotICogdGhpcyBmdW5jdGlvbiBzb3J0cyB0aGUgcmVzb3VyY2UgbGlzdCBieSBzaXplIGFuZCB0aGVuCi0gKiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIG9mICJzaXplIiBsZW5ndGggdGhhdCBpcyBub3QgaW4gdGhlCi0gKiBJU0EgYWxpYXNpbmcgd2luZG93LiAgSWYgaXQgZmluZHMgYSBub2RlIGxhcmdlciB0aGFuICJzaXplIgotICogaXQgd2lsbCBzcGxpdCBpdCB1cC4KLSAqCi0gKiBzaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfaW9fcmVzb3VyY2Uoc3RydWN0IHBjaV9yZXNvdXJjZSAqKmhlYWQsIHUzMiBzaXplKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqc3BsaXRfbm9kZSA9IE5VTEw7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBzb3J0X2J5X3NpemUoaGVhZCkgKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAobm9kZSA9ICpoZWFkOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotCQlpZiAobm9kZS0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlLT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJLyogdGhpcyBvbmUgaXNuJ3QgYmFzZSBhbGlnbmVkIHByb3Blcmx5Ci0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJdGVtcF9kd29yZCA9IChub2RlLT5iYXNlIHwgKHNpemUtMSkpICsgMTsKLQotCQkJLyovIFNob3J0IGNpcmN1aXQgaWYgYWRqdXN0ZWQgc2l6ZSBpcyB0b28gc21hbGwgKi8KLQkJCWlmICgobm9kZS0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlKSkgPCBzaXplKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQlHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCXJldHVybiBOVUxMOwotCi0JCQlzcGxpdF9ub2RlLT5iYXNlID0gbm9kZS0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRlbXBfZHdvcmQgLSBub2RlLT5iYXNlOwotCQkJbm9kZS0+YmFzZSA9IHRlbXBfZHdvcmQ7Ci0JCQlub2RlLT5sZW5ndGggLT0gc3BsaXRfbm9kZS0+bGVuZ3RoOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gLyogRW5kIG9mIG5vbi1hbGlnbmVkIGJhc2UgKi8KLQotCQkvKiBEb24ndCBuZWVkIHRvIGNoZWNrIGlmIHRvbyBzbWFsbCBzaW5jZSB3ZSBhbHJlYWR5IGRpZCAqLwotCQlpZiAobm9kZS0+bGVuZ3RoID4gc2l6ZSkgewotCQkJLyogdGhpcyBvbmUgaXMgbG9uZ2VyIHRoYW4gd2UgbmVlZAotCQkJICAgc28gd2UnbGwgbWFrZSBhIG5ldyBlbnRyeSBhbmQgc3BsaXQgaXQgdXAgKi8KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBub2RlLT5iYXNlICsgc2l6ZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IG5vZGUtPmxlbmd0aCAtIHNpemU7Ci0JCQlub2RlLT5sZW5ndGggPSBzaXplOwotCi0JCQkvKiBQdXQgaXQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQkJbm9kZS0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0gIC8qIEVuZCBvZiB0b28gYmlnIG9uIHRvcCBlbmQgKi8KLQotCQkvKiBGb3IgSU8gbWFrZSBzdXJlIGl0J3Mgbm90IGluIHRoZSBJU0EgYWxpYXNpbmcgc3BhY2UgKi8KLQkJaWYgKG5vZGUtPmJhc2UgJiAweDMwMEwpCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiB3ZSBnb3QgaGVyZSwgdGhlbiBpdCBpcyB0aGUgcmlnaHQgc2l6ZSAKLQkJICAgTm93IHRha2UgaXQgb3V0IG9mIHRoZSBsaXN0ICovCi0JCWlmICgqaGVhZCA9PSBub2RlKSB7Ci0JCQkqaGVhZCA9IG5vZGUtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICpoZWFkOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IG5vZGUpCi0JCQkJcHJldm5vZGUgPSBwcmV2bm9kZS0+bmV4dDsKLQotCQkJcHJldm5vZGUtPm5leHQgPSBub2RlLT5uZXh0OwotCQl9Ci0JCW5vZGUtPm5leHQgPSBOVUxMOwotCQkvKiBTdG9wIGxvb3BpbmcgKi8KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KLQotLyoKLSAqIGdldF9tYXhfcmVzb3VyY2UKLSAqCi0gKiBHZXRzIHRoZSBsYXJnZXN0IG5vZGUgdGhhdCBpcyBhdCBsZWFzdCAic2l6ZSIgYmlnIGZyb20gdGhlCi0gKiBsaXN0IHBvaW50ZWQgdG8gYnkgaGVhZC4gIEl0IGFsaWducyB0aGUgbm9kZSBvbiB0b3AgYW5kIGJvdHRvbQotICogdG8gInNpemUiIGFsaWdubWVudCBiZWZvcmUgcmV0dXJuaW5nIGl0LgotICogSi5JLiBtb2RpZmllZCB0byBwdXQgbWF4IHNpemUgbGltaXRzIG9mOyA2NE0tPjMyTS0+MTZNLT44TS0+NE0tPjFNCi0gKiAgVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgYWxsb2NhdGluZyBlbnRpcmUgQUNQSSBfQ1JTIHJlcyB0byBvbmUgY2hpbGQgYnJpZGdlL3Nsb3QuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX3Jlc291cmNlICpnZXRfbWF4X3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptYXg7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGVtcDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpzcGxpdF9ub2RlOwotCXUzMiB0ZW1wX2R3b3JkOwotCXUzMiBtYXhfc2l6ZVtdID0geyAweDQwMDAwMDAsIDB4MjAwMDAwMCwgMHgxMDAwMDAwLCAweDA4MDAwMDAsIDB4MDQwMDAwMCwgMHgwMjAwMDAwLCAweDAxMDAwMDAsIDB4MDAgfTsKLQlpbnQgaTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAocGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHNvcnRfYnlfbWF4X3NpemUoaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChtYXggPSAqaGVhZDttYXg7IG1heCA9IG1heC0+bmV4dCkgewotCi0JCS8qIElmIG5vdCBiaWcgZW5vdWdoIHdlIGNvdWxkIHByb2JhYmx5IGp1c3QgYmFpbCwgCi0JCSAgIGluc3RlYWQgd2UnbGwgY29udGludWUgdG8gdGhlIG5leHQuICovCi0JCWlmIChtYXgtPmxlbmd0aCA8IHNpemUpCi0JCQljb250aW51ZTsKLQotCQlpZiAobWF4LT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJLyogdGhpcyBvbmUgaXNuJ3QgYmFzZSBhbGlnbmVkIHByb3Blcmx5Ci0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJdGVtcF9kd29yZCA9IChtYXgtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKiBTaG9ydCBjaXJjdWl0IGlmIGFkanVzdGVkIHNpemUgaXMgdG9vIHNtYWxsICovCi0JCQlpZiAoKG1heC0+bGVuZ3RoIC0gKHRlbXBfZHdvcmQgLSBtYXgtPmJhc2UpKSA8IHNpemUpCi0JCQkJY29udGludWU7Ci0KLQkJCXNwbGl0X25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCi0JCQlpZiAoIXNwbGl0X25vZGUpCi0JCQkJcmV0dXJuIE5VTEw7Ci0KLQkJCXNwbGl0X25vZGUtPmJhc2UgPSBtYXgtPmJhc2U7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSB0ZW1wX2R3b3JkIC0gbWF4LT5iYXNlOwotCQkJbWF4LT5iYXNlID0gdGVtcF9kd29yZDsKLQkJCW1heC0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IG5leHQgaW4gdGhlIGxpc3QgKi8KLQkJCXNwbGl0X25vZGUtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCQltYXgtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKChtYXgtPmJhc2UgKyBtYXgtPmxlbmd0aCkgJiAoc2l6ZSAtIDEpKSB7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBlbmQgYWxpZ25lZCBwcm9wZXJseSBhdCB0aGUgdG9wCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCXRlbXBfZHdvcmQgPSAoKG1heC0+YmFzZSArIG1heC0+bGVuZ3RoKSAmIH4oc2l6ZSAtIDEpKTsKLQkJCXNwbGl0X25vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbWF4LT5sZW5ndGggKyBtYXgtPmJhc2UKLQkJCQkJICAgICAtIHNwbGl0X25vZGUtPmJhc2U7Ci0JCQltYXgtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG1heC0+bmV4dDsKLQkJCW1heC0+bmV4dCA9IHNwbGl0X25vZGU7Ci0JCX0KLQotCQkvKiBNYWtlIHN1cmUgaXQgZGlkbid0IHNocmluayB0b28gbXVjaCB3aGVuIHdlIGFsaWduZWQgaXQgKi8KLQkJaWYgKG1heC0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWZvciAoIGkgPSAwOyBtYXhfc2l6ZVtpXSA+IHNpemU7IGkrKykgewotCQkJaWYgKG1heC0+bGVuZ3RoID4gbWF4X3NpemVbaV0pIHsKLQkJCQlzcGxpdF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCQkJaWYgKCFzcGxpdF9ub2RlKQotCQkJCQlicmVhazsJLyogcmV0dXJuIE5VTEw7ICovCi0JCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG1heC0+YmFzZSArIG1heF9zaXplW2ldOwotCQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IG1heC0+bGVuZ3RoIC0gbWF4X3NpemVbaV07Ci0JCQkJbWF4LT5sZW5ndGggPSBtYXhfc2l6ZVtpXTsKLQkJCQkvKiBQdXQgaXQgbmV4dCBpbiB0aGUgbGlzdCAqLwotCQkJCXNwbGl0X25vZGUtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCQkJbWF4LT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCS8qIE5vdyB0YWtlIGl0IG91dCBvZiB0aGUgbGlzdCAqLwotCQl0ZW1wID0gKHN0cnVjdCBwY2lfcmVzb3VyY2UqKSAqaGVhZDsKLQkJaWYgKHRlbXAgPT0gbWF4KSB7Ci0JCQkqaGVhZCA9IG1heC0+bmV4dDsKLQkJfSBlbHNlIHsKLQkJCXdoaWxlICh0ZW1wICYmIHRlbXAtPm5leHQgIT0gbWF4KSB7Ci0JCQkJdGVtcCA9IHRlbXAtPm5leHQ7Ci0JCQl9Ci0KLQkJCXRlbXAtPm5leHQgPSBtYXgtPm5leHQ7Ci0JCX0KLQotCQltYXgtPm5leHQgPSBOVUxMOwotCQlyZXR1cm4gbWF4OwotCX0KLQotCS8qIElmIHdlIGdldCBoZXJlLCB3ZSBjb3VsZG4ndCBmaW5kIG9uZSAqLwotCXJldHVybiBOVUxMOwotfQotCi0KLS8qCi0gKiBnZXRfcmVzb3VyY2UKLSAqCi0gKiB0aGlzIGZ1bmN0aW9uIHNvcnRzIHRoZSByZXNvdXJjZSBsaXN0IGJ5IHNpemUgYW5kIHRoZW4KLSAqIHJldHVybnMgdGhlIGZpcnN0IG5vZGUgb2YgInNpemUiIGxlbmd0aC4gIElmIGl0IGZpbmRzIGEgbm9kZQotICogbGFyZ2VyIHRoYW4gInNpemUiIGl0IHdpbGwgc3BsaXQgaXQgdXAuCi0gKgotICogc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotICovCi1zdGF0aWMgc3RydWN0IHBjaV9yZXNvdXJjZSAqZ2V0X3Jlc291cmNlKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkLCB1MzIgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwcmV2bm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdTMyIHRlbXBfZHdvcmQ7Ci0KLQlpZiAoISgqaGVhZCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShoZWFkKSApCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKCBzb3J0X2J5X3NpemUoaGVhZCkgKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAobm9kZSA9ICpoZWFkOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dCkgewotCQlkYmcoIiVzOiByZXFfc2l6ZSA9MHgleCBub2RlPSVwLCBiYXNlPTB4JXgsIGxlbmd0aD0weCV4XG4iLAotCQkgICAgX19GVU5DVElPTl9fLCBzaXplLCBub2RlLCBub2RlLT5iYXNlLCBub2RlLT5sZW5ndGgpOwotCQlpZiAobm9kZS0+bGVuZ3RoIDwgc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChub2RlLT5iYXNlICYgKHNpemUgLSAxKSkgewotCQkJZGJnKCIlczogbm90IGFsaWduZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkvKiB0aGlzIG9uZSBpc24ndCBiYXNlIGFsaWduZWQgcHJvcGVybHkKLQkJCSAgIHNvIHdlJ2xsIG1ha2UgYSBuZXcgZW50cnkgYW5kIHNwbGl0IGl0IHVwICovCi0JCQl0ZW1wX2R3b3JkID0gKG5vZGUtPmJhc2UgfCAoc2l6ZS0xKSkgKyAxOwotCi0JCQkvKiBTaG9ydCBjaXJjdWl0IGlmIGFkanVzdGVkIHNpemUgaXMgdG9vIHNtYWxsICovCi0JCQlpZiAoKG5vZGUtPmxlbmd0aCAtICh0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2U7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSB0ZW1wX2R3b3JkIC0gbm9kZS0+YmFzZTsKLQkJCW5vZGUtPmJhc2UgPSB0ZW1wX2R3b3JkOwotCQkJbm9kZS0+bGVuZ3RoIC09IHNwbGl0X25vZGUtPmxlbmd0aDsKLQotCQkJLyogUHV0IGl0IGluIHRoZSBsaXN0ICovCi0JCQlzcGxpdF9ub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJCW5vZGUtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9IC8qIEVuZCBvZiBub24tYWxpZ25lZCBiYXNlICovCi0KLQkJLyogRG9uJ3QgbmVlZCB0byBjaGVjayBpZiB0b28gc21hbGwgc2luY2Ugd2UgYWxyZWFkeSBkaWQgKi8KLQkJaWYgKG5vZGUtPmxlbmd0aCA+IHNpemUpIHsKLQkJCWRiZygiJXM6IHRvbyBiaWdcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkvKiB0aGlzIG9uZSBpcyBsb25nZXIgdGhhbiB3ZSBuZWVkCi0JCQkgICBzbyB3ZSdsbCBtYWtlIGEgbmV3IGVudHJ5IGFuZCBzcGxpdCBpdCB1cCAqLwotCQkJc3BsaXRfbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJR0ZQX0tFUk5FTCk7Ci0KLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gTlVMTDsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IG5vZGUtPmJhc2UgKyBzaXplOwotCQkJc3BsaXRfbm9kZS0+bGVuZ3RoID0gbm9kZS0+bGVuZ3RoIC0gc2l6ZTsKLQkJCW5vZGUtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCS8qIFB1dCBpdCBpbiB0aGUgbGlzdCAqLwotCQkJc3BsaXRfbm9kZS0+bmV4dCA9IG5vZGUtPm5leHQ7Ci0JCQlub2RlLT5uZXh0ID0gc3BsaXRfbm9kZTsKLQkJfSAgLyogRW5kIG9mIHRvbyBiaWcgb24gdG9wIGVuZCAqLwotCi0JCWRiZygiJXM6IGdvdCBvbmUhISFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCS8qIElmIHdlIGdvdCBoZXJlLCB0aGVuIGl0IGlzIHRoZSByaWdodCBzaXplCi0JCSAgIE5vdyB0YWtlIGl0IG91dCBvZiB0aGUgbGlzdCAqLwotCQlpZiAoKmhlYWQgPT0gbm9kZSkgewotCQkJKmhlYWQgPSBub2RlLT5uZXh0OwotCQl9IGVsc2UgewotCQkJcHJldm5vZGUgPSAqaGVhZDsKLQkJCXdoaWxlIChwcmV2bm9kZS0+bmV4dCAhPSBub2RlKQotCQkJCXByZXZub2RlID0gcHJldm5vZGUtPm5leHQ7Ci0KLQkJCXByZXZub2RlLT5uZXh0ID0gbm9kZS0+bmV4dDsKLQkJfQotCQlub2RlLT5uZXh0ID0gTlVMTDsKLQkJLyogU3RvcCBsb29waW5nICovCi0JCWJyZWFrOwotCX0KLQlyZXR1cm4gbm9kZTsKLX0KLQotCi0vKgotICogcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUKLSAqCi0gKiBTb3J0cyBhbGwgb2YgdGhlIG5vZGVzIGluIHRoZSBsaXN0IGluIGFzY2VuZGluZyBvcmRlciBieQotICogdGhlaXIgYmFzZSBhZGRyZXNzZXMuICBBbHNvIGRvZXMgZ2FyYmFnZSBjb2xsZWN0aW9uIGJ5Ci0gKiBjb21iaW5pbmcgYWRqYWNlbnQgbm9kZXMuCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKHN0cnVjdCBwY2lfcmVzb3VyY2UgKipoZWFkKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUxOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGUyOwotCWludCBvdXRfb2Zfb3JkZXIgPSAxOwotCi0JZGJnKCIlczogaGVhZCA9ICVwLCAqaGVhZCA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sIGhlYWQsICpoZWFkKTsKLQotCWlmICghKCpoZWFkKSkKLQkJcmV0dXJuIDE7Ci0KLQlkYmcoIipoZWFkLT5uZXh0ID0gJXBcbiIsKCpoZWFkKS0+bmV4dCk7Ci0KLQlpZiAoISgqaGVhZCktPm5leHQpCi0JCXJldHVybiAwOwkvKiBvbmx5IG9uZSBpdGVtIG9uIHRoZSBsaXN0LCBhbHJlYWR5IHNvcnRlZCEgKi8KLQotCWRiZygiKmhlYWQtPmJhc2UgPSAweCV4XG4iLCgqaGVhZCktPmJhc2UpOwotCWRiZygiKmhlYWQtPm5leHQtPmJhc2UgPSAweCV4XG4iLCgqaGVhZCktPm5leHQtPmJhc2UpOwotCXdoaWxlIChvdXRfb2Zfb3JkZXIpIHsKLQkJb3V0X29mX29yZGVyID0gMDsKLQotCQkvKiBTcGVjaWFsIGNhc2UgZm9yIHN3YXBwaW5nIGxpc3QgaGVhZCAqLwotCQlpZiAoKCgqaGVhZCktPm5leHQpICYmCi0JCSAgICAoKCpoZWFkKS0+YmFzZSA+ICgqaGVhZCktPm5leHQtPmJhc2UpKSB7Ci0JCQlub2RlMSA9ICpoZWFkOwotCQkJKCpoZWFkKSA9ICgqaGVhZCktPm5leHQ7Ci0JCQlub2RlMS0+bmV4dCA9ICgqaGVhZCktPm5leHQ7Ci0JCQkoKmhlYWQpLT5uZXh0ID0gbm9kZTE7Ci0JCQlvdXRfb2Zfb3JkZXIrKzsKLQkJfQotCi0JCW5vZGUxID0gKCpoZWFkKTsKLQotCQl3aGlsZSAobm9kZTEtPm5leHQgJiYgbm9kZTEtPm5leHQtPm5leHQpIHsKLQkJCWlmIChub2RlMS0+bmV4dC0+YmFzZSA+IG5vZGUxLT5uZXh0LT5uZXh0LT5iYXNlKSB7Ci0JCQkJb3V0X29mX29yZGVyKys7Ci0JCQkJbm9kZTIgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMS0+bmV4dCA9IG5vZGUxLT5uZXh0LT5uZXh0OwotCQkJCW5vZGUxID0gbm9kZTEtPm5leHQ7Ci0JCQkJbm9kZTItPm5leHQgPSBub2RlMS0+bmV4dDsKLQkJCQlub2RlMS0+bmV4dCA9IG5vZGUyOwotCQkJfSBlbHNlCi0JCQkJbm9kZTEgPSBub2RlMS0+bmV4dDsKLQkJfQotCX0gIC8qIEVuZCBvZiBvdXRfb2Zfb3JkZXIgbG9vcCAqLwotCi0Jbm9kZTEgPSAqaGVhZDsKLQotCXdoaWxlIChub2RlMSAmJiBub2RlMS0+bmV4dCkgewotCQlpZiAoKG5vZGUxLT5iYXNlICsgbm9kZTEtPmxlbmd0aCkgPT0gbm9kZTEtPm5leHQtPmJhc2UpIHsKLQkJCS8qIENvbWJpbmUgKi8KLQkJCWRiZygiOC4uXG4iKTsKLQkJCW5vZGUxLT5sZW5ndGggKz0gbm9kZTEtPm5leHQtPmxlbmd0aDsKLQkJCW5vZGUyID0gbm9kZTEtPm5leHQ7Ci0JCQlub2RlMS0+bmV4dCA9IG5vZGUxLT5uZXh0LT5uZXh0OwotCQkJa2ZyZWUobm9kZTIpOwotCQl9IGVsc2UKLQkJCW5vZGUxID0gbm9kZTEtPm5leHQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBwY2llaHBfc2xvdF9jcmVhdGUgLSBDcmVhdGVzIGEgbm9kZSBhbmQgYWRkcyBpdCB0byB0aGUgcHJvcGVyIGJ1cy4KLSAqIEBidXNudW1iZXIgLSBidXMgd2hlcmUgbmV3IG5vZGUgaXMgdG8gYmUgbG9jYXRlZAotICoKLSAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgbmV3IG5vZGUgb3IgTlVMTCBpZiB1bnN1Y2Nlc3NmdWwKLSAqLwotc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9jcmVhdGUodTggYnVzbnVtYmVyKQotewotCXN0cnVjdCBwY2lfZnVuYyAqbmV3X3Nsb3Q7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCWRiZygiJXM6IGJ1c251bWJlciAleFxuIiwgX19GVU5DVElPTl9fLCBidXNudW1iZXIpOwotCW5ld19zbG90ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkKLQkJcmV0dXJuIG5ld19zbG90OwotCi0JbWVtc2V0KG5ld19zbG90LCAwLCBzaXplb2Yoc3RydWN0IHBjaV9mdW5jKSk7Ci0KLQluZXdfc2xvdC0+bmV4dCA9IE5VTEw7Ci0JbmV3X3Nsb3QtPmNvbmZpZ3VyZWQgPSAxOwotCi0JaWYgKHBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXSA9PSBOVUxMKSB7Ci0JCXBjaWVocF9zbG90X2xpc3RbYnVzbnVtYmVyXSA9IG5ld19zbG90OwotCX0gZWxzZSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W2J1c251bWJlcl07Ci0JCXdoaWxlIChuZXh0LT5uZXh0ICE9IE5VTEwpCi0JCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJbmV4dC0+bmV4dCA9IG5ld19zbG90OwotCX0KLQlyZXR1cm4gbmV3X3Nsb3Q7Ci19Ci0KLQotLyoqCi0gKiBzbG90X3JlbW92ZSAtIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mIHNsb3RzLgotICogQG9sZF9zbG90OiBzbG90IHRvIHJlbW92ZQotICoKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAhMCBvdGhlcndpc2UuCi0gKi8KLXN0YXRpYyBpbnQgc2xvdF9yZW1vdmUoc3RydWN0IHBjaV9mdW5jICogb2xkX3Nsb3QpCi17Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCi0JaWYgKG9sZF9zbG90ID09IE5VTEwpCi0JCXJldHVybiAxOwotCi0JbmV4dCA9IHBjaWVocF9zbG90X2xpc3Rbb2xkX3Nsb3QtPmJ1c107Ci0KLQlpZiAobmV4dCA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCWlmIChuZXh0ID09IG9sZF9zbG90KSB7Ci0JCXBjaWVocF9zbG90X2xpc3Rbb2xkX3Nsb3QtPmJ1c10gPSBvbGRfc2xvdC0+bmV4dDsKLQkJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKG9sZF9zbG90KTsKLQkJa2ZyZWUob2xkX3Nsb3QpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl3aGlsZSAoKG5leHQtPm5leHQgIT0gb2xkX3Nsb3QpICYmIChuZXh0LT5uZXh0ICE9IE5VTEwpKSB7Ci0JCW5leHQgPSBuZXh0LT5uZXh0OwotCX0KLQotCWlmIChuZXh0LT5uZXh0ID09IG9sZF9zbG90KSB7Ci0JCW5leHQtPm5leHQgPSBvbGRfc2xvdC0+bmV4dDsKLQkJcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKG9sZF9zbG90KTsKLQkJa2ZyZWUob2xkX3Nsb3QpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDI7Ci19Ci0KLQotLyoqCi0gKiBicmlkZ2Vfc2xvdF9yZW1vdmUgLSBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBsaW5rZWQgbGlzdCBvZiBzbG90cy4KLSAqIEBicmlkZ2U6IGJyaWRnZSB0byByZW1vdmUKLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgITAgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50IGJyaWRnZV9zbG90X3JlbW92ZShzdHJ1Y3QgcGNpX2Z1bmMgKmJyaWRnZSkKLXsKLQl1OCBzdWJvcmRpbmF0ZUJ1cywgc2Vjb25kYXJ5QnVzOwotCXU4IHRlbXBCdXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXh0OwotCi0JaWYgKGJyaWRnZSA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCXNlY29uZGFyeUJ1cyA9IChicmlkZ2UtPmNvbmZpZ19zcGFjZVsweDA2XSA+PiA4KSAmIDB4RkY7Ci0Jc3Vib3JkaW5hdGVCdXMgPSAoYnJpZGdlLT5jb25maWdfc3BhY2VbMHgwNl0gPj4gMTYpICYgMHhGRjsKLQotCWZvciAodGVtcEJ1cyA9IHNlY29uZGFyeUJ1czsgdGVtcEJ1cyA8PSBzdWJvcmRpbmF0ZUJ1czsgdGVtcEJ1cysrKSB7Ci0JCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W3RlbXBCdXNdOwotCi0JCXdoaWxlICghc2xvdF9yZW1vdmUobmV4dCkpIHsKLQkJCW5leHQgPSBwY2llaHBfc2xvdF9saXN0W3RlbXBCdXNdOwotCQl9Ci0JfQotCi0JbmV4dCA9IHBjaWVocF9zbG90X2xpc3RbYnJpZGdlLT5idXNdOwotCi0JaWYgKG5leHQgPT0gTlVMTCkgewotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAobmV4dCA9PSBicmlkZ2UpIHsKLQkJcGNpZWhwX3Nsb3RfbGlzdFticmlkZ2UtPmJ1c10gPSBicmlkZ2UtPm5leHQ7Ci0JCWtmcmVlKGJyaWRnZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXdoaWxlICgobmV4dC0+bmV4dCAhPSBicmlkZ2UpICYmIChuZXh0LT5uZXh0ICE9IE5VTEwpKSB7Ci0JCW5leHQgPSBuZXh0LT5uZXh0OwotCX0KLQotCWlmIChuZXh0LT5uZXh0ID09IGJyaWRnZSkgewotCQluZXh0LT5uZXh0ID0gYnJpZGdlLT5uZXh0OwotCQlrZnJlZShicmlkZ2UpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJcmV0dXJuIDI7Ci19Ci0KLQotLyoqCi0gKiBwY2llaHBfc2xvdF9maW5kIC0gTG9va3MgZm9yIGEgbm9kZSBieSBidXMsIGFuZCBkZXZpY2UsIG11bHRpcGxlIGZ1bmN0aW9ucyBhY2Nlc3NlZAotICogQGJ1czogYnVzIHRvIGZpbmQKLSAqIEBkZXZpY2U6IGRldmljZSB0byBmaW5kCi0gKiBAaW5kZXg6IGlzIDAgZm9yIGZpcnN0IGZ1bmN0aW9uIGZvdW5kLCAxIGZvciB0aGUgc2Vjb25kLi4uCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIHRoZSBub2RlIGlmIHN1Y2Nlc3NmdWwsICVOVUxMIG90aGVyd2lzZS4KLSAqLwotc3RydWN0IHBjaV9mdW5jICpwY2llaHBfc2xvdF9maW5kKHU4IGJ1cywgdTggZGV2aWNlLCB1OCBpbmRleCkKLXsKLQlpbnQgZm91bmQgPSAtMTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfbGlzdFtidXNdOwotCWRiZygiJXM6IGJ1cyAleCBkZXZpY2UgJXggaW5kZXggJXhcbiIsCi0JCV9fRlVOQ1RJT05fXywgYnVzLCBkZXZpY2UsIGluZGV4KTsKLQlpZiAoZnVuYyAhPSBOVUxMKSB7Ci0JCWRiZygiJXM6IGZ1bmMtPiBidXMgJXggZGV2aWNlICV4IGZ1bmN0aW9uICV4IHBjaV9kZXYgJXBcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiwKLQkJCWZ1bmMtPnBjaV9kZXYpOwotCX0gZWxzZQotCQlkYmcoIiVzOiBmdW5jID09IE5VTExcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlpZiAoKGZ1bmMgPT0gTlVMTCkgfHwgKChmdW5jLT5kZXZpY2UgPT0gZGV2aWNlKSAmJiAoaW5kZXggPT0gMCkpKQotCQlyZXR1cm4gZnVuYzsKLQotCWlmIChmdW5jLT5kZXZpY2UgPT0gZGV2aWNlKQotCQlmb3VuZCsrOwotCi0Jd2hpbGUgKGZ1bmMtPm5leHQgIT0gTlVMTCkgewotCQlmdW5jID0gZnVuYy0+bmV4dDsKLQotCQlkYmcoIiVzOiBJbiB3aGlsZSBsb29wLCBmdW5jLT4gYnVzICV4IGRldmljZSAleCBmdW5jdGlvbiAleCBwY2lfZGV2ICVwXG4iLAotCQkJX19GVU5DVElPTl9fLCBmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24sCi0JCQlmdW5jLT5wY2lfZGV2KTsKLQkJaWYgKGZ1bmMtPmRldmljZSA9PSBkZXZpY2UpCi0JCQlmb3VuZCsrOwotCQlkYmcoIiVzOiB3aGlsZSBsb29wLCBmb3VuZCAlZCwgaW5kZXggJWRcbiIsIF9fRlVOQ1RJT05fXywKLQkJCWZvdW5kLCBpbmRleCk7Ci0KLQkJaWYgKChmb3VuZCA9PSBpbmRleCkgfHwgKGZ1bmMtPmZ1bmN0aW9uID09IGluZGV4KSkgewotCQkJZGJnKCIlczogRm91bmQgYnVzICV4IGRldiAleCBmdW5jICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQlyZXR1cm4gZnVuYzsKLQkJfQotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW50IGlzX2JyaWRnZShzdHJ1Y3QgcGNpX2Z1bmMgKiBmdW5jKQotewotCS8qIENoZWNrIHRoZSBoZWFkZXIgdHlwZSAqLwotCWlmICgoKGZ1bmMtPmNvbmZpZ19zcGFjZVsweDAzXSA+PiAxNikgJiAweEZGKSA9PSAweDAxKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0KIC8qIFRoZSBmb2xsb3dpbmcgcm91dGluZXMgY29uc3RpdHV0ZSB0aGUgYnVsayBvZiB0aGUgCiAgICBob3RwbHVnIGNvbnRyb2xsZXIgbG9naWMKICAqLwpAQCAtMTEwMCwyMCArMjY5LDE3IEBACiAgKiBDb25maWd1cmVzIGJvYXJkCiAgKgogICovCi1zdGF0aWMgdTMyIGJvYXJkX2FkZGVkKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICogY3RybCkKK3N0YXRpYyBpbnQgYm9hcmRfYWRkZWQoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKIAl1OCBocF9zbG90OwotCWludCBpbmRleDsKLQl1MzIgdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0JdTMyIHJjID0gMDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19mdW5jID0gTlVMTDsKLQlzdHJ1Y3Qgc2xvdCAqcF9zbG90OwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7CisJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IHBfc2xvdC0+Y3RybDsKIAotCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgZnVuYy0+ZGV2aWNlKTsKLQlocF9zbG90ID0gZnVuYy0+ZGV2aWNlIC0gY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0OworCWhwX3Nsb3QgPSBwX3Nsb3QtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKIAotCWRiZygiJXM6IGZ1bmMtPmRldmljZSwgc2xvdF9vZmZzZXQsIGhwX3Nsb3QgPSAlZCwgJWQgLCVkXG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPmRldmljZSwgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0LCBocF9zbG90KTsKKwlkYmcoIiVzOiBzbG90IGRldmljZSwgc2xvdCBvZmZzZXQsIGhwIHNsb3QgPSAlZCwgJWQgLCVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBwX3Nsb3QtPmRldmljZSwKKwkJCWN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCwgaHBfc2xvdCk7CiAKIAkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKQEAgLTExNDEsOSArMzA3LDcgQEAKIAl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAogCS8qIFdhaXQgZm9yIH4xIHNlY29uZCAqLwotCWRiZygiJXM6IGJlZm9yZSBsb25nX2RlbGF5XG4iLCBfX0ZVTkNUSU9OX18pOwogCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKLQlkYmcoIiVzOiBhZnRlcmxvbmdfZGVsYXlcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiAgQ2hlY2sgbGluayB0cmFpbmluZyBzdGF0dXMgKi8KIAlyYyA9IHBfc2xvdC0+aHBjX29wcy0+Y2hlY2tfbG5rX3N0YXR1cyhjdHJsKTsgIApAQCAtMTE1Myw5OCArMzE3LDQ3IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlkYmcoIiVzOiBmdW5jIHN0YXR1cyA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIGZ1bmMtPnN0YXR1cyk7CisJZGJnKCIlczogc2xvdCBzdGF0dXMgPSAleFxuIiwgX19GVU5DVElPTl9fLCBwX3Nsb3QtPnN0YXR1cyk7CiAKIAkvKiBDaGVjayBmb3IgYSBwb3dlciBmYXVsdCAqLwotCWlmIChmdW5jLT5zdGF0dXMgPT0gMHhGRikgeworCWlmIChwX3Nsb3QtPnN0YXR1cyA9PSAweEZGKSB7CiAJCS8qIHBvd2VyIGZhdWx0IG9jY3VycmVkLCBidXQgaXQgd2FzIGJlbmlnbiAqLwotCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJZGJnKCIlczogdGVtcCByZWdpc3RlciBzZXQgdG8gJXggYnkgcG93ZXIgZmF1bHRcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF9yZWdpc3Rlcik7CiAJCXJjID0gUE9XRVJfRkFJTFVSRTsKLQkJZnVuYy0+c3RhdHVzID0gMDsKLQl9IGVsc2UgewotCQkvKiBHZXQgdmVuZG9yL2RldmljZSBJRCB1MzIgKi8KLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIChjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pLCAKLQkJCVBDSV9WRU5ET1JfSUQsICZ0ZW1wX3JlZ2lzdGVyKTsKLQkJZGJnKCIlczogcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZCByZXR1cm5zICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJZGJnKCIlczogdGVtcF9yZWdpc3RlciBpcyAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKLQotCQlpZiAocmMgIT0gMCkgewotCQkJLyogU29tZXRoaW5nJ3Mgd3JvbmcgaGVyZSAqLwotCQkJdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0JCQlkYmcoIiVzOiB0ZW1wIHJlZ2lzdGVyIHNldCB0byAleCBieSBlcnJvclxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3JlZ2lzdGVyKTsKLQkJfQotCQkvKiBQcmVzZXQgcmV0dXJuIGNvZGUuICBJdCB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIgaWYgdGhpbmdzIGdvIG9rYXkuICovCi0JCXJjID0gTk9fQURBUFRFUl9QUkVTRU5UOworCQlwX3Nsb3QtPnN0YXR1cyA9IDA7CisJCWdvdG8gZXJyX2V4aXQ7CiAJfQogCi0JLyogQWxsIEYncyBpcyBhbiBlbXB0eSBzbG90IG9yIGFuIGludmFsaWQgYm9hcmQgKi8KLQlpZiAodGVtcF9yZWdpc3RlciAhPSAweEZGRkZGRkZGKSB7CSAgLyogQ2hlY2sgZm9yIGEgYm9hcmQgaW4gdGhlIHNsb3QgKi8KLQkJcmVzX2xpc3RzLmlvX2hlYWQgPSBjdHJsLT5pb19oZWFkOwotCQlyZXNfbGlzdHMubWVtX2hlYWQgPSBjdHJsLT5tZW1faGVhZDsKLQkJcmVzX2xpc3RzLnBfbWVtX2hlYWQgPSBjdHJsLT5wX21lbV9oZWFkOwotCQlyZXNfbGlzdHMuYnVzX2hlYWQgPSBjdHJsLT5idXNfaGVhZDsKLQkJcmVzX2xpc3RzLmlycXMgPSBOVUxMOworCXJjID0gcGNpZWhwX2NvbmZpZ3VyZV9kZXZpY2UocF9zbG90KTsKKwlpZiAocmMpIHsKKwkJZXJyKCJDYW5ub3QgYWRkIGRldmljZSAweCV4OiV4XG4iLCBwX3Nsb3QtPmJ1cywKKwkJCQlwX3Nsb3QtPmRldmljZSk7CisJCWdvdG8gZXJyX2V4aXQ7CisJfQogCi0JCXJjID0gY29uZmlndXJlX25ld19kZXZpY2UoY3RybCwgZnVuYywgMCwgJnJlc19saXN0cywgMCwgMCk7Ci0JCWRiZygiJXM6IGJhY2sgZnJvbSBjb25maWd1cmVfbmV3X2RldmljZVxuIiwgX19GVU5DVElPTl9fKTsKKwlwX3Nsb3QtPnN0YXR1cyA9IDA7CiAKLQkJY3RybC0+aW9faGVhZCA9IHJlc19saXN0cy5pb19oZWFkOwotCQljdHJsLT5tZW1faGVhZCA9IHJlc19saXN0cy5tZW1faGVhZDsKLQkJY3RybC0+cF9tZW1faGVhZCA9IHJlc19saXN0cy5wX21lbV9oZWFkOwotCQljdHJsLT5idXNfaGVhZCA9IHJlc19saXN0cy5idXNfaGVhZDsKKwkvKgorCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KKwkgKi8KKwlpZiAocGNpZV9tY2hfcXVpcmspCisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBjdHJsLT5wY2lfZGV2KTsKKwlpZiAoUFdSX0xFRChjdHJsLT5jdHJsY2FwKSkgeworCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCisgIAkJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKIAotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPm1lbV9oZWFkKSk7Ci0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+cF9tZW1faGVhZCkpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmlvX2hlYWQpKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5idXNfaGVhZCkpOwotCi0JCWlmIChyYykgewotCQkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQkJcGNpZWhwX3NhdmVfc2xvdF9jb25maWcoY3RybCwgZnVuYyk7Ci0KLQkJZnVuYy0+c3RhdHVzID0gMDsKLQkJZnVuYy0+c3dpdGNoX3NhdmUgPSAweDEwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMHgwMTsKLQotCQkvKiBuZXh0LCB3ZSB3aWxsIGluc3RhbnRpYXRlIHRoZSBsaW51eCBwY2lfZGV2IHN0cnVjdHVyZXMgCi0JCSAqICh3aXRoIGFwcHJvcHJpYXRlIGRyaXZlciBub3RpZmljYXRpb24sIGlmIGFscmVhZHkgcHJlc2VudCkgCi0JCSAqLwotCQlpbmRleCA9IDA7Ci0JCWRvIHsKLQkJCW5ld19mdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQkJCWlmIChuZXdfZnVuYyAmJiAhbmV3X2Z1bmMtPnBjaV9kZXYpIHsKLQkJCQlkYmcoIiVzOmNhbGwgcGNpX2hwX2NvbmZpZ3VyZV9kZXYsIGZ1bmMgJXhcbiIsIAotCQkJCQlfX0ZVTkNUSU9OX18sIGluZGV4KTsKLQkJCQlwY2llaHBfY29uZmlndXJlX2RldmljZShjdHJsLCBuZXdfZnVuYyk7Ci0JCQl9Ci0JCX0gd2hpbGUgKG5ld19mdW5jKTsKLQotIAkJLyogCi0gCQkgKiBTb21lIFBDSSBFeHByZXNzIHJvb3QgcG9ydHMgcmVxdWlyZSBmaXh1cCBhZnRlciBob3QtcGx1ZyBvcGVyYXRpb24uCi0gCQkgKi8KLSAJCWlmIChwY2llX21jaF9xdWlyaykKLSAJCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgY3RybC0+cGNpX2Rldik7Ci0gCi0gIAkJaWYgKFBXUl9MRUQoY3RybC0+Y3RybGNhcCkpIHsKLSAgCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwotICAJCQlkb3duKCZjdHJsLT5jcml0X3NlY3QpOwotICAgCi0gIAkJCXBfc2xvdC0+aHBjX29wcy0+Z3JlZW5fbGVkX29uKHBfc2xvdCk7CisgIAkJcF9zbG90LT5ocGNfb3BzLT5ncmVlbl9sZWRfb24ocF9zbG90KTsKICAgCi0gIAkJCS8qIFdhaXQgZm9yIHRoZSBjb21tYW5kIHRvIGNvbXBsZXRlICovCi0gIAkJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKKyAgCQkvKiBXYWl0IGZvciB0aGUgY29tbWFuZCB0byBjb21wbGV0ZSAqLworICAJCXdhaXRfZm9yX2N0cmxfaXJxIChjdHJsKTsKICAgCQotICAJCQkvKiBEb25lIHdpdGggZXhjbHVzaXZlIGhhcmR3YXJlIGFjY2VzcyAqLwotICAJCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKLSAgCQl9Ci0JfSBlbHNlIHsKLQkJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7Ci0JCXJldHVybiAtMTsKLQl9CisgIAkJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KKyAgCQl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKKyAgCX0KIAlyZXR1cm4gMDsKKworZXJyX2V4aXQ6CisJc2V0X3Nsb3Rfb2ZmKGN0cmwsIHBfc2xvdCk7CisJcmV0dXJuIC0xOwogfQogCiAKQEAgLTEyNTIsNTUgKzM2NSwyNSBAQAogICogcmVtb3ZlX2JvYXJkIC0gVHVybnMgb2ZmIHNsb3QgYW5kIExFRCdzCiAgKgogICovCi1zdGF0aWMgdTMyIHJlbW92ZV9ib2FyZChzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQorc3RhdGljIGludCByZW1vdmVfYm9hcmQoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKLQlpbnQgaW5kZXg7Ci0JdTggc2tpcCA9IDA7CiAJdTggZGV2aWNlOwogCXU4IGhwX3Nsb3Q7Ci0JdTMyIHJjOwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyByZXNfbGlzdHM7Ci0Jc3RydWN0IHBjaV9mdW5jICp0ZW1wX2Z1bmM7Ci0Jc3RydWN0IHNsb3QgKnBfc2xvdDsKKwlpbnQgcmM7CisJc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwgPSBwX3Nsb3QtPmN0cmw7CiAKLQlpZiAoZnVuYyA9PSBOVUxMKQorCWlmIChwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHBfc2xvdCkpCiAJCXJldHVybiAxOwogCi0JaWYgKHBjaWVocF91bmNvbmZpZ3VyZV9kZXZpY2UoZnVuYykpCi0JCXJldHVybiAxOworCWRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwogCi0JZGV2aWNlID0gZnVuYy0+ZGV2aWNlOwotCi0JaHBfc2xvdCA9IGZ1bmMtPmRldmljZSAtIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldDsKKwlocF9zbG90ID0gcF9zbG90LT5kZXZpY2UgLSBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQ7CiAJcF9zbG90ID0gcGNpZWhwX2ZpbmRfc2xvdChjdHJsLCBocF9zbG90ICsgY3RybC0+c2xvdF9kZXZpY2Vfb2Zmc2V0KTsKIAogCWRiZygiSW4gJXMsIGhwX3Nsb3QgPSAlZFxuIiwgX19GVU5DVElPTl9fLCBocF9zbG90KTsKIAotCWlmICgoY3RybC0+YWRkX3N1cHBvcnQpICYmCi0JCSEoZnVuYy0+YnVzX2hlYWQgfHwgZnVuYy0+bWVtX2hlYWQgfHwgZnVuYy0+cF9tZW1faGVhZCB8fCBmdW5jLT5pb19oZWFkKSkgewotCQkvKiBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzYXZlZCBhbnkgb2YgdGhlIGJvYXJkJ3MKLQkJICogcmVzb3VyY2VzIGFscmVhZHkuICBJZiBzbywgd2UnbGwgc2tpcCB0aGUgYXR0ZW1wdCB0bwotCQkgKiBkZXRlcm1pbmUgd2hhdCdzIGJlaW5nIHVzZWQuCi0JCSAqLwotCQlpbmRleCA9IDA7Ci0KLQkJdGVtcF9mdW5jID0gZnVuYzsKLQotCQl3aGlsZSAoKHRlbXBfZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQodGVtcF9mdW5jLT5idXMsIHRlbXBfZnVuYy0+ZGV2aWNlLCBpbmRleCsrKSkpIHsKLQkJCWlmICh0ZW1wX2Z1bmMtPmJ1c19oZWFkIHx8IHRlbXBfZnVuYy0+bWVtX2hlYWQKLQkJCSAgICB8fCB0ZW1wX2Z1bmMtPnBfbWVtX2hlYWQgfHwgdGVtcF9mdW5jLT5pb19oZWFkKSB7Ci0JCQkJc2tpcCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoIXNraXApCi0JCQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzKGN0cmwsIGZ1bmMsIERJU0FCTEVfQ0FSRCk7Ci0JfQogCS8qIENoYW5nZSBzdGF0dXMgdG8gc2h1dGRvd24gKi8KLQlpZiAoZnVuYy0+aXNfYV9ib2FyZCkKLQkJZnVuYy0+c3RhdHVzID0gMHgwMTsKLQlmdW5jLT5jb25maWd1cmVkID0gMDsKKwlwX3Nsb3QtPnN0YXR1cyA9IDB4MDE7CiAKIAkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCiAJZG93bigmY3RybC0+Y3JpdF9zZWN0KTsKQEAgLTEzMjgsNTYgKzQxMSw2IEBACiAJLyogRG9uZSB3aXRoIGV4Y2x1c2l2ZSBoYXJkd2FyZSBhY2Nlc3MgKi8KIAl1cCgmY3RybC0+Y3JpdF9zZWN0KTsKIAotCWlmIChjdHJsLT5hZGRfc3VwcG9ydCkgewotCQl3aGlsZSAoZnVuYykgewotCQkJcmVzX2xpc3RzLmlvX2hlYWQgPSBjdHJsLT5pb19oZWFkOwotCQkJcmVzX2xpc3RzLm1lbV9oZWFkID0gY3RybC0+bWVtX2hlYWQ7Ci0JCQlyZXNfbGlzdHMucF9tZW1faGVhZCA9IGN0cmwtPnBfbWVtX2hlYWQ7Ci0JCQlyZXNfbGlzdHMuYnVzX2hlYWQgPSBjdHJsLT5idXNfaGVhZDsKLQotCQkJZGJnKCJSZXR1cm5pbmcgcmVzb3VyY2VzIHRvIGN0bHIgbGlzdHMgZm9yIChCL0QvRikgPSAoJSN4LyUjeC8lI3gpXG4iLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCQlwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcyhmdW5jLCAmcmVzX2xpc3RzKTsKLQotCQkJY3RybC0+aW9faGVhZCA9IHJlc19saXN0cy5pb19oZWFkOwotCQkJY3RybC0+bWVtX2hlYWQgPSByZXNfbGlzdHMubWVtX2hlYWQ7Ci0JCQljdHJsLT5wX21lbV9oZWFkID0gcmVzX2xpc3RzLnBfbWVtX2hlYWQ7Ci0JCQljdHJsLT5idXNfaGVhZCA9IHJlc19saXN0cy5idXNfaGVhZDsKLQotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5tZW1faGVhZCkpOwotCQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihjdHJsLT5wX21lbV9oZWFkKSk7Ci0JCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKGN0cmwtPmlvX2hlYWQpKTsKLQkJCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYoY3RybC0+YnVzX2hlYWQpKTsKLQotCQkJaWYgKGlzX2JyaWRnZShmdW5jKSkgewotCQkJCWRiZygiUENJIEJyaWRnZSBIb3QtUmVtb3ZlIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIAotCQkJCQljdHJsLT5zZWcsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQkJYnJpZGdlX3Nsb3RfcmVtb3ZlKGZ1bmMpOwotCQkJfSBlbHNlIHsKLQkJCQlkYmcoIlBDSSBGdW5jdGlvbiBIb3QtUmVtb3ZlIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIAotCQkJCQljdHJsLT5zZWcsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JCQkJc2xvdF9yZW1vdmUoZnVuYyk7Ci0JCQl9Ci0KLQkJCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGN0cmwtPnNsb3RfYnVzLCBkZXZpY2UsIDApOwotCQl9Ci0KLQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUgd2l0aCBlbnRyeSBmb3IgZW1wdHkgc2xvdCAqLwotCQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGN0cmwtPnNsb3RfYnVzKTsKLQotCQlpZiAoZnVuYyA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCWZ1bmMtPmJ1cyA9IGN0cmwtPnNsb3RfYnVzOwotCQlmdW5jLT5kZXZpY2UgPSBkZXZpY2U7Ci0JCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQkJZnVuYy0+Y29uZmlndXJlZCA9IDA7Ci0JCWZ1bmMtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQkJZnVuYy0+aXNfYV9ib2FyZCA9IDA7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0MTEsMTMgKzQ0NCwxNSBAQAogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X3Bvd2VyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmIChnZXRzdGF0dXMpIHsKIAkJcF9zbG90LT5zdGF0ZSA9IFBPV0VST0ZGX1NUQVRFOwotCQlkYmcoIkluIHBvd2VyX2Rvd25fYm9hcmQsIGI6ZCgleDoleClcbiIsIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWRiZygiJXM6IGRpc2FibGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJcGNpZWhwX2Rpc2FibGVfc2xvdChwX3Nsb3QpOwogCQlwX3Nsb3QtPnN0YXRlID0gU1RBVElDX1NUQVRFOwogCX0gZWxzZSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9OX1NUQVRFOwotCQlkYmcoIkluIGFkZF9ib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogYWRkaW5nIGJ1czpkZXZpY2UoJXg6JXgpXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKIAogCQlpZiAocGNpZWhwX2VuYWJsZV9zbG90KHBfc2xvdCkgJiYgUFdSX0xFRChwX3Nsb3QtPmN0cmwtPmN0cmxjYXApKSB7CiAJCQkvKiBXYWl0IGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIGhhcmR3YXJlICovCkBAIC0xNDU5LDEzICs0OTQsMTUgQEAKIAlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwogCWlmICghZ2V0c3RhdHVzKSB7CiAJCXBfc2xvdC0+c3RhdGUgPSBQT1dFUk9GRl9TVEFURTsKLQkJZGJnKCJJbiByZW1vdmluZyBib2FyZCwgYjpkKCV4OiV4KVxuIiwgcF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlKTsKKwkJZGJnKCIlczogcmVtb3ZpbmcgYnVzOmRldmljZSgleDoleClcbiIsCisJCQkJX19GVU5DVElPTl9fLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOwogCiAJCXBjaWVocF9kaXNhYmxlX3Nsb3QocF9zbG90KTsKIAkJcF9zbG90LT5zdGF0ZSA9IFNUQVRJQ19TVEFURTsKIAl9IGVsc2UgewogCQlwX3Nsb3QtPnN0YXRlID0gUE9XRVJPTl9TVEFURTsKLQkJZGJnKCJJbiBhZGRfYm9hcmQsIGI6ZCgleDoleClcbiIsIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CisJCWRiZygiJXM6IGFkZGluZyBidXM6ZGV2aWNlKCV4OiV4KVxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSk7CiAKIAkJaWYgKHBjaWVocF9lbmFibGVfc2xvdChwX3Nsb3QpICYmIFBXUl9MRUQocF9zbG90LT5jdHJsLT5jdHJsY2FwKSkgewogCQkJLyogV2FpdCBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byBoYXJkd2FyZSAqLwpAQCAtMTUzMSw3ICs1NjgsNiBAQAogCQllcnIgKCJDYW4ndCBzdGFydCB1cCBvdXIgZXZlbnQgdGhyZWFkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlkYmcoIk91ciBldmVudCB0aHJlYWQgcGlkID0gJWRcbiIsIHBpZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MzksOSArNTc1LDcgQEAKIHZvaWQgcGNpZWhwX2V2ZW50X3N0b3BfdGhyZWFkKHZvaWQpCiB7CiAJZXZlbnRfZmluaXNoZWQgPSAxOwotCWRiZygiZXZlbnRfdGhyZWFkIGZpbmlzaCBjb21tYW5kIGdpdmVuXG4iKTsKIAl1cCgmZXZlbnRfc2VtYXBob3JlKTsKLQlkYmcoIndhaXQgZm9yIGV2ZW50X3RocmVhZCB0byBleGl0XG4iKTsKIAlkb3duKCZldmVudF9leGl0KTsKIH0KIApAQCAtMTU3Myw3ICs2MDcsNiBAQAogewogCWludCBsb29wID0gMDsKIAlpbnQgY2hhbmdlID0gMTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAJdTggaHBfc2xvdDsKIAl1OCBnZXRzdGF0dXM7CiAJc3RydWN0IHNsb3QgKnBfc2xvdDsKQEAgLTE1ODEsMTYgKzYxNCwxMiBAQAogCXdoaWxlIChjaGFuZ2UpIHsKIAkJY2hhbmdlID0gMDsKIAotCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgMTA7IGxvb3ArKykgeworCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgTUFYX0VWRU5UUzsgbG9vcCsrKSB7CiAJCQlpZiAoY3RybC0+ZXZlbnRfcXVldWVbbG9vcF0uZXZlbnRfdHlwZSAhPSAwKSB7CiAJCQkJaHBfc2xvdCA9IGN0cmwtPmV2ZW50X3F1ZXVlW2xvb3BdLmhwX3Nsb3Q7CiAKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChjdHJsLT5zbG90X2J1cywgKGhwX3Nsb3QgKyBjdHJsLT5zbG90X2RldmljZV9vZmZzZXQpLCAwKTsKLQogCQkJCXBfc2xvdCA9IHBjaWVocF9maW5kX3Nsb3QoY3RybCwgaHBfc2xvdCArIGN0cmwtPnNsb3RfZGV2aWNlX29mZnNldCk7CiAKLQkJCQlkYmcoImhwX3Nsb3QgJWQsIGZ1bmMgJXAsIHBfc2xvdCAlcFxuIiwgaHBfc2xvdCwgZnVuYywgcF9zbG90KTsKLQogCQkJCWlmIChjdHJsLT5ldmVudF9xdWV1ZVtsb29wXS5ldmVudF90eXBlID09IElOVF9CVVRUT05fQ0FOQ0VMKSB7CiAJCQkJCWRiZygiYnV0dG9uIGNhbmNlbFxuIik7CiAJCQkJCWRlbF90aW1lcigmcF9zbG90LT50YXNrX2V2ZW50KTsKQEAgLTE2ODIsNyArNzExLDYgQEAKIAkJCQkJCXBfc2xvdC0+dGFza19ldmVudC5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkgcHVzaGJ1dHRvbl9oZWxwZXJfdGhyZWFkOwogCQkJCQkJcF9zbG90LT50YXNrX2V2ZW50LmRhdGEgPSAodW5zaWduZWQgbG9uZykgcF9zbG90OwogCi0JCQkJCQlkYmcoImFkZF90aW1lciBwX3Nsb3QgPSAlcFxuIiwgKHZvaWQgKikgcF9zbG90KTsKIAkJCQkJCWFkZF90aW1lcigmcF9zbG90LT50YXNrX2V2ZW50KTsKIAkJCQkJfQogCQkJCX0KQEAgLTE3MzcsMTMgKzc2NSw2IEBACiB7CiAJdTggZ2V0c3RhdHVzID0gMDsKIAlpbnQgcmM7Ci0Jc3RydWN0IHBjaV9mdW5jICpmdW5jOwotCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCAwKTsKLQlpZiAoIWZ1bmMpIHsKLQkJZGJnKCIlczogRXJyb3IhIHNsb3QgTlVMTFxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIDE7Ci0JfQogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIChsYXRjaCBjbG9zZWQsIGNhcmQgcHJlc2VudCwgcG93ZXIgb2ZmKSAqLwogCWRvd24oJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKQEAgLTE3NzMsNDUgKzc5NCwxMSBAQAogCX0KIAl1cCgmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwogCi0Jc2xvdF9yZW1vdmUoZnVuYyk7Ci0KLQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKHBfc2xvdC0+YnVzKTsKLQlpZiAoZnVuYyA9PSBOVUxMKQotCQlyZXR1cm4gMTsKLQotCWZ1bmMtPmJ1cyA9IHBfc2xvdC0+YnVzOwotCWZ1bmMtPmRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwotCWZ1bmMtPmZ1bmN0aW9uID0gMDsKLQlmdW5jLT5jb25maWd1cmVkID0gMDsKLQlmdW5jLT5pc19hX2JvYXJkID0gMTsKLQotCS8qIFdlIGhhdmUgdG8gc2F2ZSB0aGUgcHJlc2VuY2UgaW5mbyBmb3IgdGhlc2Ugc2xvdHMgKi8KLQlwX3Nsb3QtPmhwY19vcHMtPmdldF9hZGFwdGVyX3N0YXR1cyhwX3Nsb3QsICYoZnVuYy0+cHJlc2VuY2Vfc2F2ZSkpOwogCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwotCWZ1bmMtPnN3aXRjaF9zYXZlID0gIWdldHN0YXR1cz8gMHgxMDowOwogCi0JcmMgPSBib2FyZF9hZGRlZChmdW5jLCBwX3Nsb3QtPmN0cmwpOworCXJjID0gYm9hcmRfYWRkZWQocF9zbG90KTsKIAlpZiAocmMpIHsKLQkJaWYgKGlzX2JyaWRnZShmdW5jKSkKLQkJCWJyaWRnZV9zbG90X3JlbW92ZShmdW5jKTsKLQkJZWxzZQotCQkJc2xvdF9yZW1vdmUoZnVuYyk7Ci0KLQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUgd2l0aCBlbnRyeSBmb3IgZW1wdHkgc2xvdCAqLwotCQlmdW5jID0gcGNpZWhwX3Nsb3RfY3JlYXRlKHBfc2xvdC0+YnVzKTsKLQkJaWYgKGZ1bmMgPT0gTlVMTCkKLQkJCXJldHVybiAxOwkvKiBPdXQgb2YgbWVtb3J5ICovCi0KLQkJZnVuYy0+YnVzID0gcF9zbG90LT5idXM7Ci0JCWZ1bmMtPmRldmljZSA9IHBfc2xvdC0+ZGV2aWNlOwotCQlmdW5jLT5mdW5jdGlvbiA9IDA7Ci0JCWZ1bmMtPmNvbmZpZ3VyZWQgPSAwOwotCQlmdW5jLT5pc19hX2JvYXJkID0gMTsKLQotCQkvKiBXZSBoYXZlIHRvIHNhdmUgdGhlIHByZXNlbmNlIGluZm8gZm9yIHRoZXNlIHNsb3RzICovCi0JCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2FkYXB0ZXJfc3RhdHVzKHBfc2xvdCwgJihmdW5jLT5wcmVzZW5jZV9zYXZlKSk7CiAJCXBfc2xvdC0+aHBjX29wcy0+Z2V0X2xhdGNoX3N0YXR1cyhwX3Nsb3QsICZnZXRzdGF0dXMpOwotCQlmdW5jLT5zd2l0Y2hfc2F2ZSA9ICFnZXRzdGF0dXM/IDB4MTA6MDsKIAl9CiAKIAlpZiAocF9zbG90KQpAQCAtMTgyMywxNCArODEwLDggQEAKIAogaW50IHBjaWVocF9kaXNhYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnBfc2xvdCkKIHsKLQl1OCBjbGFzc19jb2RlLCBoZWFkZXJfdHlwZSwgQkNSOwotCXU4IGluZGV4ID0gMDsKIAl1OCBnZXRzdGF0dXMgPSAwOwotCXUzMiByYyA9IDA7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfYnVzICpwY2lfYnVzID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmM7CiAKIAlpZiAoIXBfc2xvdC0+Y3RybCkKIAkJcmV0dXJuIDE7CkBAIC0xODY3LDgzOCArODQ4LDggQEAKIAogCXVwKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7CiAKLQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UsIGluZGV4KyspOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBubyB2aWRlbyBjb250cm9sbGVycyBoZXJlCi0JICogZm9yIGFsbCBmdW5jIG9mIHBfc2xvdAotCSAqLwotCXdoaWxlIChmdW5jICYmICFyYykgewotCQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCS8qIENoZWNrIHRoZSBDbGFzcyBDb2RlICovCi0JCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgMHgwQiwgJmNsYXNzX2NvZGUpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJaWYgKGNsYXNzX2NvZGUgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgewotCQkJLyogRGlzcGxheS9WaWRlbyBhZGFwdGVyIChub3Qgc3VwcG9ydGVkKSAqLwotCQkJcmMgPSBSRU1PVkVfTk9UX1NVUFBPUlRFRDsKLQkJfSBlbHNlIHsKLQkJCS8qIFNlZSBpZiBpdCdzIGEgYnJpZGdlICovCi0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9IRUFERVJfVFlQRSwgJmhlYWRlcl90eXBlKTsKLQkJCWlmIChyYykKLQkJCQlyZXR1cm4gcmM7Ci0KLQkJCS8qIElmIGl0J3MgYSBicmlkZ2UsIGNoZWNrIHRoZSBWR0EgRW5hYmxlIGJpdCAqLwotCQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJkJDUik7Ci0JCQkJaWYgKHJjKQotCQkJCQlyZXR1cm4gcmM7Ci0KLQkJCQkvKiBJZiB0aGUgVkdBIEVuYWJsZSBiaXQgaXMgc2V0LCByZW1vdmUgaXNuJ3Qgc3VwcG9ydGVkICovCi0JCQkJaWYgKEJDUiAmIFBDSV9CUklER0VfQ1RMX1ZHQSkgewotCQkJCQlyYyA9IFJFTU9WRV9OT1RfU1VQUE9SVEVEOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKHBfc2xvdC0+YnVzLCBwX3Nsb3QtPmRldmljZSwgaW5kZXgrKyk7Ci0JfQotCi0JZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQocF9zbG90LT5idXMsIHBfc2xvdC0+ZGV2aWNlLCAwKTsKLQlpZiAoKGZ1bmMgIT0gTlVMTCkgJiYgIXJjKSB7Ci0JCXJjID0gcmVtb3ZlX2JvYXJkKGZ1bmMsIHBfc2xvdC0+Y3RybCk7Ci0JfSBlbHNlIGlmICghcmMpCi0JCXJjID0gMTsKLQotCWlmIChwX3Nsb3QpCi0JCXVwZGF0ZV9zbG90X2luZm8ocF9zbG90KTsKLQotCXJldHVybiByYzsKKwlyZXQgPSByZW1vdmVfYm9hcmQocF9zbG90KTsKKwl1cGRhdGVfc2xvdF9pbmZvKHBfc2xvdCk7CisJcmV0dXJuIHJldDsKIH0KIAotCi0vKioKLSAqIGNvbmZpZ3VyZV9uZXdfZGV2aWNlIC0gQ29uZmlndXJlcyB0aGUgUENJIGhlYWRlciBpbmZvcm1hdGlvbiBvZiBvbmUgYm9hcmQuCi0gKgotICogQGN0cmw6IHBvaW50ZXIgdG8gY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBmdW5jOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHN0cnVjdHVyZQotICogQGJlaGluZF9icmlkZ2U6IDEgaWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCAwIGlmIG5vdAotICogQHJlc291cmNlczogcG9pbnRlciB0byBzZXQgb2YgcmVzb3VyY2UgbGlzdHMKLSAqCi0gKiBSZXR1cm5zIDAgaWYgc3VjY2VzcwotICoKLSAqLwotc3RhdGljIHUzMiBjb25maWd1cmVfbmV3X2RldmljZShzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMsCi0JdTggYmVoaW5kX2JyaWRnZSwgc3RydWN0IHJlc291cmNlX2xpc3RzICogcmVzb3VyY2VzLCB1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KQotewotCXU4IHRlbXBfYnl0ZSwgZnVuY3Rpb24sIG1heF9mdW5jdGlvbnMsIHN0b3BfaXQ7Ci0JaW50IHJjOwotCXUzMiBJRDsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90OwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlpbnQgaW5kZXg7Ci0KLQluZXdfc2xvdCA9IGZ1bmM7Ci0KLQlkYmcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQotCS8qIENoZWNrIGZvciBNdWx0aS1mdW5jdGlvbiBkZXZpY2UgKi8KLQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbiksIDB4MEUsICZ0ZW1wX2J5dGUpOwotCWlmIChyYykgewotCQlkYmcoIiVzOiByYyA9ICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCWlmICh0ZW1wX2J5dGUgJiAweDgwKQkvKiBNdWx0aS1mdW5jdGlvbiBkZXZpY2UgKi8KLQkJbWF4X2Z1bmN0aW9ucyA9IDg7Ci0JZWxzZQotCQltYXhfZnVuY3Rpb25zID0gMTsKLQotCWZ1bmN0aW9uID0gMDsKLQotCWRvIHsKLQkJcmMgPSBjb25maWd1cmVfbmV3X2Z1bmN0aW9uKGN0cmwsIG5ld19zbG90LCBiZWhpbmRfYnJpZGdlLAotCQkJCQlyZXNvdXJjZXMsIGJyaWRnZV9idXMsIGJyaWRnZV9kZXYpOwotCi0JCWlmIChyYykgewotCQkJZGJnKCJjb25maWd1cmVfbmV3X2Z1bmN0aW9uIGZhaWxlZDogJWRcbiIsIHJjKTsKLQkJCWluZGV4ID0gMDsKLQotCQkJd2hpbGUgKG5ld19zbG90KSB7Ci0JCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9maW5kKG5ld19zbG90LT5idXMsCi0JCQkJCQluZXdfc2xvdC0+ZGV2aWNlLCBpbmRleCsrKTsKLQotCQkJCWlmIChuZXdfc2xvdCkKLQkJCQkJcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMobmV3X3Nsb3QsCi0JCQkJCQlyZXNvdXJjZXMpOwotCQkJfQotCi0JCQlyZXR1cm4gcmM7Ci0JCX0KLQotCQlmdW5jdGlvbisrOwotCi0JCXN0b3BfaXQgPSAwOwotCi0JCS8qICBUaGUgZm9sbG93aW5nIGxvb3Agc2tpcHMgdG8gdGhlIG5leHQgcHJlc2VudCBmdW5jdGlvbgotCQkgKiAgYW5kIGNyZWF0ZXMgYSBib2FyZCBzdHJ1Y3R1cmUKLQkJICovCi0KLQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpICYmICghc3RvcF9pdCkpIHsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuY3Rpb24pLCAweDAwLCAmSUQpOwotCi0JCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgewkgIC8qIFRoZXJlJ3Mgbm90aGluZyB0aGVyZS4gKi8KLQkJCQlmdW5jdGlvbisrOwotCQkJfSBlbHNlIHsgIC8qIFRoZXJlJ3Mgc29tZXRoaW5nIHRoZXJlICovCi0JCQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUuICovCi0JCQkJbmV3X3Nsb3QgPSBwY2llaHBfc2xvdF9jcmVhdGUoZnVuYy0+YnVzKTsKLQotCQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKSB7Ci0JCQkJCS8qIE91dCBvZiBtZW1vcnkgKi8KLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCi0JCQkJbmV3X3Nsb3QtPmJ1cyA9IGZ1bmMtPmJ1czsKLQkJCQluZXdfc2xvdC0+ZGV2aWNlID0gZnVuYy0+ZGV2aWNlOwotCQkJCW5ld19zbG90LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwotCQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMTsKLQkJCQluZXdfc2xvdC0+c3RhdHVzID0gMDsKLQotCQkJCXN0b3BfaXQrKzsKLQkJCX0KLQkJfQotCi0JfSB3aGlsZSAoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKTsKLQlkYmcoInJldHVybmluZyBmcm9tICVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBDb25maWd1cmF0aW9uIGxvZ2ljIHRoYXQgaW52b2x2ZXMgdGhlIGhvdHBsdWcgZGF0YSBzdHJ1Y3R1cmVzIGFuZCAKLSAqIHRoZWlyIGJvb2trZWVwaW5nCi0gKi8KLQotLyoqCi0gKiBjb25maWd1cmVfYnJpZGdlOiBmaWxsIGJyaWRnZSdzIHJlZ2lzdGVycywgZWl0aGVyIGNvbmZpZ3VyZSBvciBkaXNhYmxlIGl0LgotICovCi1zdGF0aWMgaW50Ci1jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfYnVzICpwY2lfYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQlzdHJ1Y3QgcGNpX3Jlc291cmNlICptZW1fbm9kZSwKLQkJCXN0cnVjdCBwY2lfcmVzb3VyY2UgKipob2xkX21lbV9ub2RlLAotCQkJaW50IGJhc2VfYWRkciwgaW50IGxpbWl0X2FkZHIpCi17Ci0JdTE2IHRlbXBfd29yZDsKLQl1MzIgcmM7Ci0KLQlpZiAobWVtX25vZGUpIHsKLQkJbWVtY3B5KCpob2xkX21lbV9ub2RlLCBtZW1fbm9kZSwgc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQkJbWVtX25vZGUtPm5leHQgPSBOVUxMOwotCi0JCS8qIHNldCBNZW0gYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCVJFU19DSEVDSyhtZW1fbm9kZS0+YmFzZSwgMTYpOwotCQl0ZW1wX3dvcmQgPSAodTE2KShtZW1fbm9kZS0+YmFzZSA+PiAxNik7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgYmFzZV9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCVJFU19DSEVDSyhtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGggLSAxLCAxNik7Ci0JCXRlbXBfd29yZCA9ICh1MTYpKChtZW1fbm9kZS0+YmFzZSArIG1lbV9ub2RlLT5sZW5ndGggLSAxKSA+PiAxNik7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgbGltaXRfYWRkciwgdGVtcF93b3JkKTsKLQl9IGVsc2UgewotCQl0ZW1wX3dvcmQgPSAweEZGRkY7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgYmFzZV9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBsaW1pdF9hZGRyLCB0ZW1wX3dvcmQpOwotCi0JCWtmcmVlKCpob2xkX21lbV9ub2RlKTsKLQkJKmhvbGRfbWVtX25vZGUgPSBOVUxMOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbmZpZ3VyZV9uZXdfYnJpZGdlKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLAotCQlzdHJ1Y3QgcGNpX2J1cyAqcGNpX2J1cykKLXsKLQlpbnQgY2xvb3A7Ci0JdTggdGVtcF9ieXRlOwotCXU4IGRldmljZTsKLQl1MTYgdGVtcF93b3JkOwotCXUzMiByYzsKLQl1MzIgSUQ7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmhvbGRfcF9tZW1fbm9kZTsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpob2xkX0lPX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaG9sZF9idXNfbm9kZTsKLQlzdHJ1Y3QgaXJxX21hcHBpbmcgaXJxczsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKm5ld19zbG90OwotCXN0cnVjdCByZXNvdXJjZV9saXN0cyB0ZW1wX3Jlc291cmNlczsKLQotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JLyogc2V0IFByaW1hcnkgYnVzICovCi0JZGJnKCJzZXQgUHJpbWFyeSBidXMgPSAweCV4XG4iLCBmdW5jLT5idXMpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX1BSSU1BUllfQlVTLCBmdW5jLT5idXMpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JLyogZmluZCByYW5nZSBvZiBidXNzZXMgdG8gdXNlICovCi0JYnVzX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCZyZXNvdXJjZXMtPmJ1c19oZWFkLCAxTCk7Ci0KLQkvKiBJZiB3ZSBkb24ndCBoYXZlIGFueSBidXNzZXMgdG8gYWxsb2NhdGUsIHdlIGNhbid0IGNvbnRpbnVlICovCi0JaWYgKCFidXNfbm9kZSkgewotCQllcnIoIkdvdCBOTyBidXMgcmVzb3VyY2UgdG8gdXNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWRiZygiR290IHJhbmdlcyBvZiBidXNlcyB0byB1c2U6IGJhc2U6bGVuPTB4JXg6JXhcbiIsIGJ1c19ub2RlLT5iYXNlLCBidXNfbm9kZS0+bGVuZ3RoKTsKLQotCS8qIHNldCBTZWNvbmRhcnkgYnVzICovCi0JdGVtcF9ieXRlID0gKHU4KWJ1c19ub2RlLT5iYXNlOwotCWRiZygic2V0IFNlY29uZGFyeSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX1NFQ09OREFSWV9CVVMsIHRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBzZXQgc3Vib3JkaW5hdGUgYnVzICovCi0JdGVtcF9ieXRlID0gKHU4KShidXNfbm9kZS0+YmFzZSArIGJ1c19ub2RlLT5sZW5ndGggLSAxKTsKLQlkYmcoInNldCBzdWJvcmRpbmF0ZSBidXMgPSAweCV4XG4iLCB0ZW1wX2J5dGUpOwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9TVUJPUkRJTkFURV9CVVMsIHRlbXBfYnl0ZSk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQkvKiBTZXQgSFAgcGFyYW1ldGVycyAoQ2FjaGUgTGluZSBTaXplLCBMYXRlbmN5IFRpbWVyKSAqLwotCXJjID0gcGNpZWhwcm1fc2V0X2hwcChjdHJsLCBmdW5jLCBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCS8qIFNldHVwIHRoZSBJTywgbWVtb3J5LCBhbmQgcHJlZmV0Y2hhYmxlIHdpbmRvd3MgKi8KLQotCWlvX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5pb19oZWFkKSwgMHgxMDAwTCk7Ci0JaWYgKGlvX25vZGUpIHsKLQkJZGJnKCJpb19ub2RlKGJhc2UsIGxlbiwgbmV4dCkgKCV4LCAleCwgJXApXG4iLCBpb19ub2RlLT5iYXNlLAotCQkJCWlvX25vZGUtPmxlbmd0aCwgaW9fbm9kZS0+bmV4dCk7Ci0JfQotCi0JbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JaWYgKG1lbV9ub2RlKSB7Ci0JCWRiZygibWVtX25vZGUoYmFzZSwgbGVuLCBuZXh0KSAoJXgsICV4LCAlcClcbiIsIG1lbV9ub2RlLT5iYXNlLAotCQkJCW1lbV9ub2RlLT5sZW5ndGgsIG1lbV9ub2RlLT5uZXh0KTsKLQl9Ci0KLQlpZiAocmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQlwX21lbV9ub2RlID0gZ2V0X21heF9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JZWxzZSB7Ci0JCS8qCi0JCSAqIEluIHNvbWUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24sIE1FTSBhbmQgUE1FTSBhcmUgbm90Ci0JCSAqICBkaXN0aW5ndWlzaGVkLCBhbmQgaGVuY2UgQUNQSSBfQ1JTIGhhcyBvbmx5IE1FTSBlbnRyaWVzCi0JCSAqICBmb3IgYm90aCBNRU0gYW5kIFBNRU0uCi0JCSAqLwotCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCXBfbWVtX25vZGUgPSBnZXRfbWF4X3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0JfQotCWlmIChwX21lbV9ub2RlKSB7Ci0JCWRiZygicF9tZW1fbm9kZShiYXNlLCBsZW4sIG5leHQpICgleCwgJXgsICVwKVxuIiwgcF9tZW1fbm9kZS0+YmFzZSwKLQkJCQlwX21lbV9ub2RlLT5sZW5ndGgsIHBfbWVtX25vZGUtPm5leHQpOwotCX0KLQotCS8qIHNldCB1cCB0aGUgSVJRIGluZm8gKi8KLQlpZiAoIXJlc291cmNlcy0+aXJxcykgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbMF0gPSAwOwotCQlpcnFzLmludGVycnVwdFsxXSA9IDA7Ci0JCWlycXMuaW50ZXJydXB0WzJdID0gMDsKLQkJaXJxcy5pbnRlcnJ1cHRbM10gPSAwOwotCQlpcnFzLnZhbGlkX0lOVCA9IDA7Ci0JfSBlbHNlIHsKLQkJaXJxcy5iYXJiZXJfcG9sZSA9IHJlc291cmNlcy0+aXJxcy0+YmFyYmVyX3BvbGU7Ci0JCWlycXMuaW50ZXJydXB0WzBdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMF07Ci0JCWlycXMuaW50ZXJydXB0WzFdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMV07Ci0JCWlycXMuaW50ZXJydXB0WzJdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMl07Ci0JCWlycXMuaW50ZXJydXB0WzNdID0gcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbM107Ci0JCWlycXMudmFsaWRfSU5UID0gcmVzb3VyY2VzLT5pcnFzLT52YWxpZF9JTlQ7Ci0JfQotCi0JLyogc2V0IHVwIHJlc291cmNlIGxpc3RzIHRoYXQgYXJlIG5vdyBhbGlnbmVkIG9uIHRvcCBhbmQgYm90dG9tCi0JICogZm9yIGFueXRoaW5nIGJlaGluZCB0aGUgYnJpZGdlLgotCSAqLwotCXRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkID0gYnVzX25vZGU7Ci0JdGVtcF9yZXNvdXJjZXMuaW9faGVhZCA9IGlvX25vZGU7Ci0JdGVtcF9yZXNvdXJjZXMubWVtX2hlYWQgPSBtZW1fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQl0ZW1wX3Jlc291cmNlcy5pcnFzID0gJmlycXM7Ci0KLQkvKiBNYWtlIGNvcGllcyBvZiB0aGUgbm9kZXMgd2UgYXJlIGdvaW5nIHRvIHBhc3MgZG93biBzbyB0aGF0Ci0JICogaWYgdGhlcmUgaXMgYSBwcm9ibGVtLHdlIGNhbiBqdXN0IHVzZSB0aGVzZSB0byBmcmVlIHJlc291cmNlcwotCSAqLwotCWhvbGRfYnVzX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9JT19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCWhvbGRfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwgR0ZQX0tFUk5FTCk7Ci0JaG9sZF9wX21lbV9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFob2xkX2J1c19ub2RlIHx8ICFob2xkX0lPX25vZGUgfHwgIWhvbGRfbWVtX25vZGUgfHwgIWhvbGRfcF9tZW1fbm9kZSkgewotCQlrZnJlZShob2xkX2J1c19ub2RlKTsKLQkJa2ZyZWUoaG9sZF9JT19ub2RlKTsKLQkJa2ZyZWUoaG9sZF9tZW1fbm9kZSk7Ci0JCWtmcmVlKGhvbGRfcF9tZW1fbm9kZSk7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JbWVtY3B5KGhvbGRfYnVzX25vZGUsIGJ1c19ub2RlLCBzaXplb2Yoc3RydWN0IHBjaV9yZXNvdXJjZSkpOwotCi0JYnVzX25vZGUtPmJhc2UgKz0gMTsKLQlidXNfbm9kZS0+bGVuZ3RoIC09IDE7Ci0JYnVzX25vZGUtPm5leHQgPSBOVUxMOwotCi0JLyogSWYgd2UgaGF2ZSBJTyByZXNvdXJjZXMgY29weSB0aGVtIGFuZCBmaWxsIGluIHRoZSBicmlkZ2UncwotCSAqIElPIHJhbmdlIHJlZ2lzdGVycwotCSAqLwotCWlmIChpb19ub2RlKSB7Ci0JCW1lbWNweShob2xkX0lPX25vZGUsIGlvX25vZGUsIHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSk7Ci0JCWlvX25vZGUtPm5leHQgPSBOVUxMOwotCi0JCS8qIHNldCBJTyBiYXNlIGFuZCBMaW1pdCByZWdpc3RlcnMgKi8KLQkJUkVTX0NIRUNLKGlvX25vZGUtPmJhc2UsIDgpOwotCQl0ZW1wX2J5dGUgPSAodTgpKGlvX25vZGUtPmJhc2UgPj4gOCk7Ci0JCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCB0ZW1wX2J5dGUpOwotCi0JCVJFU19DSEVDSyhpb19ub2RlLT5iYXNlICsgaW9fbm9kZS0+bGVuZ3RoIC0gMSwgOCk7Ci0JCXRlbXBfYnl0ZSA9ICh1OCkoKGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGggLSAxKSA+PiA4KTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX0lPX0xJTUlULCB0ZW1wX2J5dGUpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGhvbGRfSU9fbm9kZSk7Ci0JCWhvbGRfSU9fbm9kZSA9IE5VTEw7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBtZW1vcnkgcmVzb3VyY2VzIGNvcHkgdGhlbSBhbmQgZmlsbCBpbiB0aGUgYnJpZGdlJ3MKLQkgKiBtZW1vcnkgcmFuZ2UgcmVnaXN0ZXJzLiAgT3RoZXJ3aXNlLCBmaWxsIGluIHRoZSByYW5nZQotCSAqIHJlZ2lzdGVycyB3aXRoIHZhbHVlcyB0aGF0IGRpc2FibGUgdGhlbS4KLQkgKi8KLQlyYyA9IGNvbmZpZ3VyZV9icmlkZ2UocGNpX2J1cywgZGV2Zm4sIG1lbV9ub2RlLCAmaG9sZF9tZW1fbm9kZSwKLQkJCQlQQ0lfTUVNT1JZX0JBU0UsIFBDSV9NRU1PUllfTElNSVQpOwotCi0JLyogSWYgd2UgaGF2ZSBwcmVmZXRjaGFibGUgbWVtb3J5IHJlc291cmNlcyBjb3B5IHRoZW0gYW5kIAotCSAqIGZpbGwgaW4gdGhlIGJyaWRnZSdzIG1lbW9yeSByYW5nZSByZWdpc3RlcnMuICBPdGhlcndpc2UsCi0JICogZmlsbCBpbiB0aGUgcmFuZ2UgcmVnaXN0ZXJzIHdpdGggdmFsdWVzIHRoYXQgZGlzYWJsZSB0aGVtLgotCSAqLwotCXJjID0gY29uZmlndXJlX2JyaWRnZShwY2lfYnVzLCBkZXZmbiwgcF9tZW1fbm9kZSwgJmhvbGRfcF9tZW1fbm9kZSwKLQkJCQlQQ0lfUFJFRl9NRU1PUllfQkFTRSwgUENJX1BSRUZfTUVNT1JZX0xJTUlUKTsKLQotCS8qIEFkanVzdCB0aGlzIHRvIGNvbXBlbnNhdGUgZm9yIGV4dHJhIGFkanVzdG1lbnQgaW4gZmlyc3QgbG9vcCAqLwotCWlycXMuYmFyYmVyX3BvbGUtLTsKLQotCXJjID0gMDsKLQotCS8qIEhlcmUgd2UgYWN0dWFsbHkgZmluZCB0aGUgZGV2aWNlcyBhbmQgY29uZmlndXJlIHRoZW0gKi8KLQlmb3IgKGRldmljZSA9IDA7IChkZXZpY2UgPD0gMHgxRikgJiYgIXJjOyBkZXZpY2UrKykgewotCQlpcnFzLmJhcmJlcl9wb2xlID0gKGlycXMuYmFyYmVyX3BvbGUgKyAxKSAmIDB4MDM7Ci0KLQkJSUQgPSAweEZGRkZGRkZGOwotCQlwY2lfYnVzLT5udW1iZXIgPSBob2xkX2J1c19ub2RlLT5iYXNlOwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkIChwY2lfYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCAwKSwgUENJX1ZFTkRPUl9JRCwgJklEKTsKLQkJcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCi0JCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBQcmVzZW50ICovCi0JCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZS4gKi8KLQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGhvbGRfYnVzX25vZGUtPmJhc2UpOwotCi0JCQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkgewotCQkJCS8qIE91dCBvZiBtZW1vcnkgKi8KLQkJCQlyYyA9IC1FTk9NRU07Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCW5ld19zbG90LT5idXMgPSBob2xkX2J1c19ub2RlLT5iYXNlOwotCQkJbmV3X3Nsb3QtPmRldmljZSA9IGRldmljZTsKLQkJCW5ld19zbG90LT5mdW5jdGlvbiA9IDA7Ci0JCQluZXdfc2xvdC0+aXNfYV9ib2FyZCA9IDE7Ci0JCQluZXdfc2xvdC0+c3RhdHVzID0gMDsKLQotCQkJcmMgPSBjb25maWd1cmVfbmV3X2RldmljZShjdHJsLCBuZXdfc2xvdCwgMSwKLQkJCQkJJnRlbXBfcmVzb3VyY2VzLCBmdW5jLT5idXMsCi0JCQkJCWZ1bmMtPmRldmljZSk7Ci0JCQlkYmcoImNvbmZpZ3VyZV9uZXdfZGV2aWNlIHJjPTB4JXhcbiIscmMpOwotCQl9CS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCX0JCS8qIEVuZCBvZiBGT1IgbG9vcCAqLwotCi0JaWYgKHJjKSB7Ci0JCXBjaWVocF9kZXN0cm95X3Jlc291cmNlX2xpc3QoJnRlbXBfcmVzb3VyY2VzKTsKLQotCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgaG9sZF9idXNfbm9kZSk7Ci0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGhvbGRfSU9fbm9kZSk7Ci0JCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBob2xkX21lbV9ub2RlKTsKLQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgaG9sZF9wX21lbV9ub2RlKTsKLQkJcmV0dXJuKHJjKTsKLQl9Ci0KLQkvKiBzYXZlIHRoZSBpbnRlcnJ1cHQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCWlmIChyZXNvdXJjZXMtPmlycXMpIHsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMF0gPSBpcnFzLmludGVycnVwdFswXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMV0gPSBpcnFzLmludGVycnVwdFsxXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbMl0gPSBpcnFzLmludGVycnVwdFsyXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT5pbnRlcnJ1cHRbM10gPSBpcnFzLmludGVycnVwdFszXTsKLQkJcmVzb3VyY2VzLT5pcnFzLT52YWxpZF9JTlQgPSBpcnFzLnZhbGlkX0lOVDsKLQl9IGVsc2UgaWYgKCFiZWhpbmRfYnJpZGdlKSB7Ci0JCS8qIFdlIG5lZWQgdG8gaG9vayB1cCB0aGUgaW50ZXJydXB0cyBoZXJlICovCi0JCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDQ7IGNsb29wKyspIHsKLQkJCWlmIChpcnFzLnZhbGlkX0lOVCAmICgweDAxIDw8IGNsb29wKSkgewotCQkJCXJjID0gcGNpZWhwX3NldF9pcnEoZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsCi0JCQkJCQkJMHgwQSArIGNsb29wLCBpcnFzLmludGVycnVwdFtjbG9vcF0pOwotCQkJCWlmIChyYykgewotCQkJCQlwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0ICgmdGVtcF9yZXNvdXJjZXMpOwotCQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSwgaG9sZF9idXNfbm9kZSk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGhvbGRfSU9fbm9kZSk7Ci0JCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCBob2xkX21lbV9ub2RlKTsKLQkJCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgaG9sZF9wX21lbV9ub2RlKTsKLQkJCQkJcmV0dXJuIHJjOwotCQkJCX0KLQkJCX0KLQkJfQkvKiBlbmQgb2YgZm9yIGxvb3AgKi8KLQl9Ci0KLQkvKiBSZXR1cm4gdW51c2VkIGJ1cyByZXNvdXJjZXMKLQkgKiBGaXJzdCB1c2UgdGhlIHRlbXBvcmFyeSBub2RlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9hcmQKLQkgKi8KLQlpZiAoaG9sZF9idXNfbm9kZSAmJiBidXNfbm9kZSAmJiB0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCkgewotCQlob2xkX2J1c19ub2RlLT5sZW5ndGggPSBidXNfbm9kZS0+YmFzZSAtIGhvbGRfYnVzX25vZGUtPmJhc2U7Ci0KLQkJaG9sZF9idXNfbm9kZS0+bmV4dCA9IGZ1bmMtPmJ1c19oZWFkOwotCQlmdW5jLT5idXNfaGVhZCA9IGhvbGRfYnVzX25vZGU7Ci0KLQkJdGVtcF9ieXRlID0gKHU4KSh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZC0+YmFzZSAtIDEpOwotCi0JCS8qIHNldCBzdWJvcmRpbmF0ZSBidXMgKi8KLQkJZGJnKCJyZS1zZXQgc3Vib3JkaW5hdGUgYnVzID0gMHgleFxuIiwgdGVtcF9ieXRlKTsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlIChwY2lfYnVzLCBkZXZmbiwgUENJX1NVQk9SRElOQVRFX0JVUywgdGVtcF9ieXRlKTsKLQotCQlpZiAodGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmxlbmd0aCA9PSAwKSB7Ci0JCQlrZnJlZSh0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCk7Ci0JCQl0ZW1wX3Jlc291cmNlcy5idXNfaGVhZCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQlkYmcoInJldHVybiBidXMgcmVzIG9mIGI6ZCgweCV4OiV4KSBiYXNlOmxlbigweCV4OiV4KVxuIiwKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgdGVtcF9yZXNvdXJjZXMuYnVzX2hlYWQtPmJhc2UsIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkLT5sZW5ndGgpOwotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5idXNfaGVhZCksIHRlbXBfcmVzb3VyY2VzLmJ1c19oZWFkKTsKLQkJfQotCX0KLQotCS8qIElmIHdlIGhhdmUgSU8gc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIGxlZnQsCi0JICogcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX0lPX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMuaW9faGVhZCkgewotCQlpb19ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLmlvX2hlYWQpLAotCQkJCQkJCSZob2xkX0lPX25vZGUsIDB4MTAwMCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKGlvX25vZGUpIHsKLQkJCWhvbGRfSU9fbm9kZS0+YmFzZSA9IGlvX25vZGUtPmJhc2UgKyBpb19ub2RlLT5sZW5ndGg7Ci0KLQkJCVJFU19DSEVDSyhob2xkX0lPX25vZGUtPmJhc2UsIDgpOwotCQkJdGVtcF9ieXRlID0gKHU4KSgoaG9sZF9JT19ub2RlLT5iYXNlKSA+PiA4KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCB0ZW1wX2J5dGUpOwotCi0JCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPmlvX2hlYWQpLCBpb19ub2RlKTsKLQkJfQotCi0JCWlvX25vZGUgPSBkb19icmlkZ2VfcmVzb3VyY2Vfc3BsaXQoJih0ZW1wX3Jlc291cmNlcy5pb19oZWFkKSwgMHgxMDAwKTsKLQotCQkvKiAgQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKGlvX25vZGUpIHsKLQkJCS8qIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZCAqLwotCQkJaG9sZF9JT19ub2RlLT5sZW5ndGggPSBpb19ub2RlLT5iYXNlIC0gaG9sZF9JT19ub2RlLT5iYXNlOwotCi0JCQkvKiBJZiB3ZSB1c2VkIGFueSwgYWRkIGl0IHRvIHRoZSBib2FyZCdzIGxpc3QgKi8KLQkJCWlmIChob2xkX0lPX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQotCQkJCVJFU19DSEVDSyhpb19ub2RlLT5iYXNlIC0gMSwgOCk7Ci0JCQkJdGVtcF9ieXRlID0gKHU4KSgoaW9fbm9kZS0+YmFzZSAtIDEpID4+IDgpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZSAocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgdGVtcF9ieXRlKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IElPICovCi0JCQkJdGVtcF9ieXRlID0gMHgwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgdGVtcF9ieXRlKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksIGlvX25vZGUpOwotCQkJCWtmcmVlKGhvbGRfSU9fbm9kZSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBpdCB1c2VkIG1vc3Qgb2YgdGhlIHJhbmdlICovCi0JCQlob2xkX0lPX25vZGUtPm5leHQgPSBmdW5jLT5pb19oZWFkOwotCQkJZnVuYy0+aW9faGVhZCA9IGhvbGRfSU9fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9JT19ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfSU9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCWZ1bmMtPmlvX2hlYWQgPSBob2xkX0lPX25vZGU7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIGxlZnQsCi0JICogcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX21lbV9ub2RlICYmIHRlbXBfcmVzb3VyY2VzLm1lbV9oZWFkKSB7Ci0JCW1lbV9ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLm1lbV9oZWFkKSwgJmhvbGRfbWVtX25vZGUsIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKG1lbV9ub2RlKSB7Ci0JCQlob2xkX21lbV9ub2RlLT5iYXNlID0gbWVtX25vZGUtPmJhc2UgKyBtZW1fbm9kZS0+bGVuZ3RoOwotCi0JCQlSRVNfQ0hFQ0soaG9sZF9tZW1fbm9kZS0+YmFzZSwgMTYpOwotCQkJdGVtcF93b3JkID0gKHUxNikoKGhvbGRfbWVtX25vZGUtPmJhc2UpID4+IDE2KTsKLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfQkFTRSwgdGVtcF93b3JkKTsKLQotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIG1lbV9ub2RlKTsKLQkJfQotCi0JCW1lbV9ub2RlID0gZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMubWVtX2hlYWQpLCAweDEwMDAwMEwpOwotCi0JCS8qIENoZWNrIGlmIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzb21ldGhpbmcgb2ZmICovCi0JCWlmIChtZW1fbm9kZSkgewotCQkJLyogRmlyc3QgdXNlIHRoZSB0ZW1wb3Jhcnkgbm9kZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGJvYXJkICovCi0JCQlob2xkX21lbV9ub2RlLT5sZW5ndGggPSBtZW1fbm9kZS0+YmFzZSAtIGhvbGRfbWVtX25vZGUtPmJhc2U7Ci0KLQkJCWlmIChob2xkX21lbV9ub2RlLT5sZW5ndGgpIHsKLQkJCQlob2xkX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+bWVtX2hlYWQ7Ci0JCQkJZnVuYy0+bWVtX2hlYWQgPSBob2xkX21lbV9ub2RlOwotCi0JCQkJLyogY29uZmlndXJlIGVuZCBhZGRyZXNzICovCi0JCQkJUkVTX0NIRUNLKG1lbV9ub2RlLT5iYXNlIC0gMSwgMTYpOwotCQkJCXRlbXBfd29yZCA9ICh1MTYpKChtZW1fbm9kZS0+YmFzZSAtIDEpID4+IDE2KTsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJLyogUmV0dXJuIHVudXNlZCByZXNvdXJjZXMgdG8gdGhlIHBvb2wgKi8KLQkJCQlyZXR1cm5fcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgbWVtX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IE1lbSAqLwotCQkJCXRlbXBfd29yZCA9IDB4MDAwMDsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5tZW1faGVhZCksIG1lbV9ub2RlKTsKLQkJCQlrZnJlZShob2xkX21lbV9ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgbW9zdCBvZiB0aGUgcmFuZ2UgKi8KLQkJCWhvbGRfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCWZ1bmMtPm1lbV9oZWFkID0gaG9sZF9tZW1fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9tZW1fbm9kZSkgewotCQkvKiBpdCB1c2VkIHRoZSB3aG9sZSByYW5nZSAqLwotCQlob2xkX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+bWVtX2hlYWQ7Ci0JCWZ1bmMtPm1lbV9oZWFkID0gaG9sZF9tZW1fbm9kZTsKLQl9Ci0KLQkvKiBJZiB3ZSBoYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGFuZCB0aGVyZSBpcyBzb21lIAotCSAqIGxlZnQgYXQgdGhlIGVuZCwgcmV0dXJuIHRoZSB1bnVzZWQgcG9ydGlvbgotCSAqLwotCWlmIChob2xkX3BfbWVtX25vZGUgJiYgdGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCkgewotCQlwX21lbV9ub2RlID0gZG9fcHJlX2JyaWRnZV9yZXNvdXJjZV9zcGxpdCgmKHRlbXBfcmVzb3VyY2VzLnBfbWVtX2hlYWQpLAotCQkJCQkJCQkmaG9sZF9wX21lbV9ub2RlLCAweDEwMDAwMEwpOwotCi0JCS8qIENoZWNrIGlmIHdlIHdlcmUgYWJsZSB0byBzcGxpdCBzb21ldGhpbmcgb2ZmICovCi0JCWlmIChwX21lbV9ub2RlKSB7Ci0JCQlob2xkX3BfbWVtX25vZGUtPmJhc2UgPSBwX21lbV9ub2RlLT5iYXNlICsgcF9tZW1fbm9kZS0+bGVuZ3RoOwotCi0JCQlSRVNfQ0hFQ0soaG9sZF9wX21lbV9ub2RlLT5iYXNlLCAxNik7Ci0JCQl0ZW1wX3dvcmQgPSAodTE2KSgoaG9sZF9wX21lbV9ub2RlLT5iYXNlKSA+PiAxNik7Ci0JCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQgKHBjaV9idXMsIGRldmZuLCBQQ0lfUFJFRl9NRU1PUllfQkFTRSwgdGVtcF93b3JkKTsKLQotCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCX0KLQotCQlwX21lbV9ub2RlID0gZG9fYnJpZGdlX3Jlc291cmNlX3NwbGl0KCYodGVtcF9yZXNvdXJjZXMucF9tZW1faGVhZCksIDB4MTAwMDAwTCk7Ci0KLQkJLyogQ2hlY2sgaWYgd2Ugd2VyZSBhYmxlIHRvIHNwbGl0IHNvbWV0aGluZyBvZmYgKi8KLQkJaWYgKHBfbWVtX25vZGUpIHsKLQkJCS8qIEZpcnN0IHVzZSB0aGUgdGVtcG9yYXJ5IG5vZGUgdG8gc3RvcmUgaW5mb3JtYXRpb24gZm9yIHRoZSBib2FyZCAqLwotCQkJaG9sZF9wX21lbV9ub2RlLT5sZW5ndGggPSBwX21lbV9ub2RlLT5iYXNlIC0gaG9sZF9wX21lbV9ub2RlLT5iYXNlOwotCi0JCQkvKiBJZiB3ZSB1c2VkIGFueSwgYWRkIGl0IHRvIHRoZSBib2FyZCdzIGxpc3QgKi8KLQkJCWlmIChob2xkX3BfbWVtX25vZGUtPmxlbmd0aCkgewotCQkJCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQotCQkJCVJFU19DSEVDSyhwX21lbV9ub2RlLT5iYXNlIC0gMSwgMTYpOwotCQkJCXRlbXBfd29yZCA9ICh1MTYpKChwX21lbV9ub2RlLT5iYXNlIC0gMSkgPj4gMTYpOwotCQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9MSU1JVCwgdGVtcF93b3JkKTsKLQotCQkJCXJldHVybl9yZXNvdXJjZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCksIHBfbWVtX25vZGUpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBpdCBkb2Vzbid0IG5lZWQgYW55IFBNZW0gKi8KLQkJCQl0ZW1wX3dvcmQgPSAweDAwMDA7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkIChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCB0ZW1wX3dvcmQpOwotCi0JCQkJcmV0dXJuX3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgcF9tZW1fbm9kZSk7Ci0JCQkJa2ZyZWUoaG9sZF9wX21lbV9ub2RlKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIGl0IHVzZWQgdGhlIG1vc3Qgb2YgdGhlIHJhbmdlICovCi0JCQlob2xkX3BfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJZnVuYy0+cF9tZW1faGVhZCA9IGhvbGRfcF9tZW1fbm9kZTsKLQkJfQotCX0gZWxzZSBpZiAoaG9sZF9wX21lbV9ub2RlKSB7Ci0JCS8qIGl0IHVzZWQgdGhlIHdob2xlIHJhbmdlICovCi0JCWhvbGRfcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCWZ1bmMtPnBfbWVtX2hlYWQgPSBob2xkX3BfbWVtX25vZGU7Ci0JfQotCi0JLyogV2Ugc2hvdWxkIGJlIGNvbmZpZ3VyaW5nIGFuIElSUSBhbmQgdGhlIGJyaWRnZSdzIGJhc2UgYWRkcmVzcwotCSAqIHJlZ2lzdGVycyBpZiBpdCBuZWVkcyB0aGVtLiAgQWx0aG91Z2ggd2UgaGF2ZSBuZXZlciBzZWVuIHN1Y2gKLQkgKiBhIGRldmljZQotCSAqLwotCi0JcGNpZWhwcm1fZW5hYmxlX2NhcmQoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX0JSSURHRSk7Ci0KLQlkYmcoIlBDSSBCcmlkZ2UgSG90LUFkZGVkIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIGN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBjb25maWd1cmVfbmV3X2Z1bmN0aW9uIC0gQ29uZmlndXJlcyB0aGUgUENJIGhlYWRlciBpbmZvcm1hdGlvbiBvZiBvbmUgZGV2aWNlCi0gKgotICogQGN0cmw6IHBvaW50ZXIgdG8gY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBmdW5jOiBwb2ludGVyIHRvIGZ1bmN0aW9uIHN0cnVjdHVyZQotICogQGJlaGluZF9icmlkZ2U6IDEgaWYgdGhpcyBpcyBhIHJlY3Vyc2l2ZSBjYWxsLCAwIGlmIG5vdAotICogQHJlc291cmNlczogcG9pbnRlciB0byBzZXQgb2YgcmVzb3VyY2UgbGlzdHMKLSAqCi0gKiBDYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgZm9yIGJyaWRnZWQgZGV2aWNlcy4KLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzCi0gKgotICovCi1zdGF0aWMgaW50Ci1jb25maWd1cmVfbmV3X2Z1bmN0aW9uKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JCXU4IGJlaGluZF9icmlkZ2UsIHN0cnVjdCByZXNvdXJjZV9saXN0cyAqcmVzb3VyY2VzLAotCQl1OCBicmlkZ2VfYnVzLCB1OCBicmlkZ2VfZGV2KQotewotCWludCBjbG9vcDsKLQl1OCB0ZW1wX2J5dGU7Ci0JdTggY2xhc3NfY29kZTsKLQl1MzIgcmM7Ci0JdTMyIHRlbXBfcmVnaXN0ZXI7Ci0JdTMyIGJhc2U7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX25vZGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCi0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2Rldi0+c3Vib3JkaW5hdGUsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JLyogQ2hlY2sgZm9yIEJyaWRnZSAqLwotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZ0ZW1wX2J5dGUpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCWRiZygiJXM6IGJ1cyAleCBkZXYgJXggZnVuYyAleCB0ZW1wX2J5dGUgPSAleFxuIiwgX19GVU5DVElPTl9fLAotCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24sIHRlbXBfYnl0ZSk7Ci0KLQlpZiAoKHRlbXBfYnl0ZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJcmMgPSBjb25maWd1cmVfbmV3X2JyaWRnZShjdHJsLCBmdW5jLCBiZWhpbmRfYnJpZGdlLCByZXNvdXJjZXMsCi0JCQkJCQlwY2lfYnVzKTsKLQotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JfSBlbHNlIGlmICgodGVtcF9ieXRlICYgMHg3RikgPT0gUENJX0hFQURFUl9UWVBFX05PUk1BTCkgewotCQkvKiBTdGFuZGFyZCBkZXZpY2UgKi8KLQkJdTY0CWJhc2U2NDsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIDB4MEIsICZjbGFzc19jb2RlKTsKLQotCQlpZiAoY2xhc3NfY29kZSA9PSBQQ0lfQkFTRV9DTEFTU19ESVNQTEFZKQotCQkJcmV0dXJuIERFVklDRV9UWVBFX05PVF9TVVBQT1JURUQ7Ci0KLQkJLyogRmlndXJlIG91dCBJTyBhbmQgbWVtb3J5IG5lZWRzICovCi0JCWZvciAoY2xvb3AgPSBQQ0lfQkFTRV9BRERSRVNTXzA7IGNsb29wIDw9IFBDSV9CQVNFX0FERFJFU1NfNTsgY2xvb3AgKz0gNCkgewotCQkJdGVtcF9yZWdpc3RlciA9IDB4RkZGRkZGRkY7Ci0KLQkJCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQgKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgdGVtcF9yZWdpc3Rlcik7Ci0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmdGVtcF9yZWdpc3Rlcik7Ci0JCQlkYmcoIkJhclsleF09MHgleCBvbiBidXM6ZGV2OmZ1bmMoMHgleDoleDoleClcbiIsIGNsb29wLCB0ZW1wX3JlZ2lzdGVyLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JCQlpZiAoIXRlbXBfcmVnaXN0ZXIpCi0JCQkJY29udGludWU7Ci0KLQkJCWJhc2U2NCA9IDBMOwotCQkJaWYgKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSB7Ci0JCQkJLyogTWFwIElPICovCi0KLQkJCQkvKiBzZXQgYmFzZSA9IGFtb3VudCBvZiBJTyBzcGFjZSAqLwotCQkJCWJhc2UgPSB0ZW1wX3JlZ2lzdGVyICYgMHhGRkZGRkZGQzsKLQkJCQliYXNlID0gfmJhc2UgKyAxOwotCi0JCQkJZGJnKCJORUVEIElPIGxlbmd0aCgweCV4KVxuIiwgYmFzZSk7Ci0JCQkJaW9fbm9kZSA9IGdldF9pb19yZXNvdXJjZSgmKHJlc291cmNlcy0+aW9faGVhZCksKHVsb25nKWJhc2UpOwotCi0JCQkJLyogYWxsb2NhdGUgdGhlIHJlc291cmNlIHRvIHRoZSBib2FyZCAqLwotCQkJCWlmIChpb19ub2RlKSB7Ci0JCQkJCWRiZygiR290IElPIGJhc2U9MHgleChsZW5ndGg9MHgleClcbiIsIGlvX25vZGUtPmJhc2UsIGlvX25vZGUtPmxlbmd0aCk7Ci0JCQkJCWJhc2UgPSAodTMyKWlvX25vZGUtPmJhc2U7Ci0JCQkJCWlvX25vZGUtPm5leHQgPSBmdW5jLT5pb19oZWFkOwotCQkJCQlmdW5jLT5pb19oZWFkID0gaW9fbm9kZTsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIoIkdvdCBOTyBJTyByZXNvdXJjZShsZW5ndGg9MHgleClcbiIsIGJhc2UpOwotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQl9Ci0JCQl9IGVsc2UgewkvKiBtYXAgTUVNICovCi0JCQkJaW50IHByZWZldGNoYWJsZSA9IDE7Ci0JCQkJc3RydWN0IHBjaV9yZXNvdXJjZSAqKnJlc19ub2RlID0gJmZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJY2hhciAqcmVzX3R5cGVfc3RyID0gIlBNRU0iOwotCQkJCXUzMgl0ZW1wX3JlZ2lzdGVyMjsKLQotCQkJCWlmICghKHRlbXBfcmVnaXN0ZXIgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSCkpIHsKLQkJCQkJcHJlZmV0Y2hhYmxlID0gMDsKLQkJCQkJcmVzX25vZGUgPSAmZnVuYy0+bWVtX2hlYWQ7Ci0JCQkJCXJlc190eXBlX3N0cisrOwotCQkJCX0KLQotCQkJCWJhc2UgPSB0ZW1wX3JlZ2lzdGVyICYgMHhGRkZGRkZGMDsKLQkJCQliYXNlID0gfmJhc2UgKyAxOwotCi0JCQkJc3dpdGNoICh0ZW1wX3JlZ2lzdGVyICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkJY2FzZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyOgotCQkJCQlkYmcoIk5FRUQgMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIHRlbXBfcmVnaXN0ZXIsIGJhc2UpOwotCi0JCQkJCWlmIChwcmVmZXRjaGFibGUgJiYgcmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQkJCQkJbWVtX25vZGU9Z2V0X3Jlc291cmNlKCYocmVzb3VyY2VzLT5wX21lbV9oZWFkKSwgKHVsb25nKWJhc2UpOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChwcmVmZXRjaGFibGUpCi0JCQkJCQkJZGJnKCJ1c2luZyBNRU0gZm9yIFBNRU1cbiIpOwotCQkJCQkJbWVtX25vZGUgPSBnZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSwgKHVsb25nKWJhc2UpOwotCQkJCQl9Ci0KLQkJCQkJLyogYWxsb2NhdGUgdGhlIHJlc291cmNlIHRvIHRoZSBib2FyZCAqLwotCQkJCQlpZiAobWVtX25vZGUpIHsKLQkJCQkJCWJhc2UgPSAodTMyKW1lbV9ub2RlLT5iYXNlOyAKLQkJCQkJCW1lbV9ub2RlLT5uZXh0ID0gKnJlc19ub2RlOwotCQkJCQkJKnJlc19ub2RlID0gbWVtX25vZGU7Ci0JCQkJCQlkYmcoIkdvdCAzMiAlcyBiYXNlPTB4JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIG1lbV9ub2RlLT5iYXNlLCAKLQkJCQkJCQltZW1fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWVycigiR290IE5PIDMyICVzIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgcmVzX3R5cGVfc3RyLCBiYXNlKTsKLQkJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCs0LCAmdGVtcF9yZWdpc3RlcjIpOwotCQkJCQlkYmcoIk5FRUQgNjQgJXMgYmFyPTB4JXg6JXgobGVuZ3RoPTB4JXgpXG4iLCByZXNfdHlwZV9zdHIsIHRlbXBfcmVnaXN0ZXIyLCAKLQkJCQkJCXRlbXBfcmVnaXN0ZXIsIGJhc2UpOwotCi0JCQkJCWlmIChwcmVmZXRjaGFibGUgJiYgcmVzb3VyY2VzLT5wX21lbV9oZWFkKQotCQkJCQkJbWVtX25vZGUgPSBnZXRfcmVzb3VyY2UoJihyZXNvdXJjZXMtPnBfbWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCWVsc2UgewotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkKLQkJCQkJCQlkYmcoInVzaW5nIE1FTSBmb3IgUE1FTVxuIik7Ci0JCQkJCQltZW1fbm9kZSA9IGdldF9yZXNvdXJjZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpLCAodWxvbmcpYmFzZSk7Ci0JCQkJCX0KLQotCQkJCQkvKiBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgdG8gdGhlIGJvYXJkICovCi0JCQkJCWlmIChtZW1fbm9kZSkgewotCQkJCQkJYmFzZTY0ID0gbWVtX25vZGUtPmJhc2U7IAotCQkJCQkJbWVtX25vZGUtPm5leHQgPSAqcmVzX25vZGU7Ci0JCQkJCQkqcmVzX25vZGUgPSBtZW1fbm9kZTsKLQkJCQkJCWRiZygiR290IDY0ICVzIGJhc2U9MHgleDoleChsZW5ndGg9JXgpXG4iLCByZXNfdHlwZV9zdHIsICh1MzIpKGJhc2U2NCA+PiAzMiksIAotCQkJCQkJCSh1MzIpYmFzZTY0LCBtZW1fbm9kZS0+bGVuZ3RoKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWVycigiR290IE5PIDY0ICVzIHJlc291cmNlKGxlbmd0aD0weCV4KVxuIiwgcmVzX3R5cGVfc3RyLCBiYXNlKTsKLQkJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWRiZygicmVzZXJ2ZWQgQkFSIHR5cGU9MHgleFxuIiwgdGVtcF9yZWdpc3Rlcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJfQotCi0JCQlpZiAoYmFzZTY0KSB7Ci0JCQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsICh1MzIpYmFzZTY0KTsKLQkJCQljbG9vcCArPSA0OwotCQkJCWJhc2U2NCA+Pj0gMzI7Ci0KLQkJCQlpZiAoYmFzZTY0KSB7Ci0JCQkJCWRiZygiJXM6IGhpZ2ggZHdvcmQgb2YgYmFzZTY0KDB4JXgpIHNldCB0byAwXG4iLCBfX0ZVTkNUSU9OX18sICh1MzIpYmFzZTY0KTsKLQkJCQkJYmFzZTY0ID0gMHgwTDsKLQkJCQl9Ci0KLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgKHUzMiliYXNlNjQpOwotCQkJfSBlbHNlIHsKLQkJCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgYmFzZSk7Ci0JCQl9Ci0JCX0JCS8qIEVuZCBvZiBiYXNlIHJlZ2lzdGVyIGxvb3AgKi8KLQotCQkvKiBkaXNhYmxlIFJPTSBiYXNlIEFkZHJlc3MgKi8KLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZCAocGNpX2J1cywgZGV2Zm4sIFBDSV9ST01fQUREUkVTUywgMHgwMCk7Ci0KLQkJLyogU2V0IEhQIHBhcmFtZXRlcnMgKENhY2hlIExpbmUgU2l6ZSwgTGF0ZW5jeSBUaW1lcikgKi8KLQkJcmMgPSBwY2llaHBybV9zZXRfaHBwKGN0cmwsIGZ1bmMsIFBDSV9IRUFERVJfVFlQRV9OT1JNQUwpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0KLQkJcGNpZWhwcm1fZW5hYmxlX2NhcmQoY3RybCwgZnVuYywgUENJX0hFQURFUl9UWVBFX05PUk1BTCk7Ci0KLQkJZGJnKCJQQ0kgZnVuY3Rpb24gSG90LUFkZGVkIHM6YjpkOmYoJTAyeDolMDJ4OiUwMng6JTAyeClcbiIsIGN0cmwtPnNlZywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIAotCQkJZnVuYy0+ZnVuY3Rpb24pOwotCX0gIC8qIEVuZCBvZiBOb3QtQS1CcmlkZ2UgZWxzZSAqLwotCWVsc2UgewotCQkvKiBJdCdzIHNvbWUgc3RyYW5nZSB0eXBlIG9mIFBDSSBhZGFwdGVyIChDYXJkYnVzPykgKi8KLQkJcmV0dXJuIERFVklDRV9UWVBFX05PVF9TVVBQT1JURUQ7Ci0JfQotCi0JZnVuYy0+Y29uZmlndXJlZCA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKaW5kZXggN2EwZTI3Zi4uNGEzY2VjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfaHBjLmMKQEAgLTI3LDE2ICsyNywxMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgogCkBAIC0yMTcsMjMgKzIxMSw2IEBACiAjZGVmaW5lIE1STF9TVEFURQkJMHgwMDIwCiAjZGVmaW5lIFBSU05fU1RBVEUJCTB4MDA0MAogCi1zdHJ1Y3QgcGhwX2N0bHJfc3RhdGVfcyB7Ci0Jc3RydWN0IHBocF9jdGxyX3N0YXRlX3MgKnBuZXh0OwotCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwotCXVuc2lnbmVkIGludCBpcnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsJCQkJLyogc3BpbmxvY2sncyAqLwotCXUzMiBzbG90X2RldmljZV9vZmZzZXQ7Ci0JdTMyIG51bV9zbG90czsKLSAgICAJc3RydWN0IHRpbWVyX2xpc3QJaW50X3BvbGxfdGltZXI7CQkvKiBBZGRlZCBmb3IgcG9sbCBldmVudCAqLwotCXBocF9pbnRyX2NhbGxiYWNrX3QgCWF0dGVudGlvbl9idXR0b25fY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfaW50cl9jYWxsYmFja190IAlwcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2s7Ci0JcGhwX2ludHJfY2FsbGJhY2tfdCAJcG93ZXJfZmF1bHRfY2FsbGJhY2s7Ci0Jdm9pZCAJCQkqY2FsbGJhY2tfaW5zdGFuY2VfaWQ7Ci0Jc3RydWN0IGN0cmxfcmVnIAkqY3JlZzsJCQkJLyogUHRyIHRvIGNvbnRyb2xsZXIgcmVnaXN0ZXIgc3BhY2UgKi8KLX07Ci0KLQogc3RhdGljIHNwaW5sb2NrX3QgaHBjX2V2ZW50X2xvY2s7CiAKIERFRklORV9EQkdfQlVGRkVSCQkvKiBEZWJ1ZyBzdHJpbmcgYnVmZmVyIGZvciBlbnRpcmUgSFBDIGRlZmluZWQgaGVyZSAqLwpAQCAtMjk3LDcgKzI3NCw2IEBACiAKIAlEQkdfRU5URVJfUk9VVElORSAKIAkKLQlkYmcoIiVzIDogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTMwOCw3ICsyODQsNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gcmV0dmFsOwogCQl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7CiAJCiAJaWYgKChzbG90X3N0YXR1cyAmIENNRF9DT01QTEVURUQpID09IENNRF9DT01QTEVURUQgKSB7IAogCQkvKiBBZnRlciAxIHNlYyBhbmQgQ01EX0NPTVBMRVRFRCBzdGlsbCBub3Qgc2V0LCBqdXN0IHByb2NlZWQgZm9yd2FyZCB0byBpc3N1ZSAKQEAgLTMxNiwxNCArMjkxLDExIEBACiAJCWRiZygiJXMgOiBDTURfQ09NUExFVEVEIG5vdCBjbGVhciBhZnRlciAxIHNlYy5cbiIsIF9fRlVOQ1RJT05fXyk7CiAJfQogCi0JZGJnKCIlczogQmVmb3JlIGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCk7CiAJcmV0dmFsID0gaHBfcmVnaXN0ZXJfd3JpdGVfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgY21kIHwgQ01EX0NNUExfSU5UUl9FTkFCTEUpOwogCWlmIChyZXR2YWwpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMICV4XG4iLCBfX0ZVTkNUSU9OX18sIGNtZCB8IENNRF9DTVBMX0lOVFJfRU5BQkxFKTsKLQlkYmcoIiVzIDogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKIAogCURCR19MRUFWRV9ST1VUSU5FIAogCXJldHVybiByZXR2YWw7CkBAIC01MDksNyArNDgxLDYgQEAKIAl1MTYgc2xvdF9zdGF0dXM7CiAJdTggcHdyX2ZhdWx0OwogCWludCByZXR2YWwgPSAwOwotCXU4IHN0YXR1czsKIAogCURCR19FTlRFUl9ST1VUSU5FIAogCkBAIC01MjEsMTUgKzQ5MiwxMyBAQAogCXJldHZhbCA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAKIAlpZiAocmV0dmFsKSB7Ci0JCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOworCQllcnIoIiVzIDogQ2Fubm90IGNoZWNrIGZvciBwb3dlciBmYXVsdFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAJcHdyX2ZhdWx0ID0gKHU4KSgoc2xvdF9zdGF0dXMgJiBQV1JfRkFVTFRfREVURUNURUQpID4+IDEpOwotCXN0YXR1cyA9IChwd3JfZmF1bHQgIT0gMSkgPyAxIDogMDsKIAkKIAlEQkdfTEVBVkVfUk9VVElORQotCS8qIE5vdGU6IExvZ2ljIDAgPT4gZmF1bHQgKi8KLQlyZXR1cm4gc3RhdHVzOworCXJldHVybiBwd3JfZmF1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgaHBjX3NldF9hdHRlbnRpb25fc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCB1OCB2YWx1ZSkKQEAgLTUzOSw3ICs1MDgsOCBAQAogCXUxNiBzbG90X2N0cmw7CiAJaW50IHJjID0gMDsKIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsKKwlEQkdfRU5URVJfUk9VVElORQorCiAJaWYgKCFwaHBfY3RscikgewogCQllcnIoIiVzOiBJbnZhbGlkIEhQQyBjb250cm9sbGVyIGhhbmRsZSFcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAtMTsKQEAgLTU1NSw3ICs1MjUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByYzsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAwIDoJLyogdHVybiBvZmYgKi8KQEAgLTU3Niw2ICs1NDUsNyBAQAogCXBjaWVfd3JpdGVfY21kKHNsb3QsIHNsb3RfY21kKTsKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksIHNsb3RfY21kKTsKIAkKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybiByYzsKIH0KIApAQCAtNTg3LDcgKzU1Nyw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOwogICAgICAgIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYwNCw3ICs1NzUsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0xFRF9DVFJMKSB8IDB4MDEwMDsKIAlpZiAoIXBjaWVocF9wb2xsX21vZGUpCiAJCXNsb3RfY21kID0gc2xvdF9jbWQgfCBIUF9JTlRSX0VOQUJMRTsgCkBAIC02MTIsNiArNTgyLDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC02MjIsNyArNTkzLDggQEAKIAl1MTYgc2xvdF9jdHJsOwogCWludCByYyA9IDA7CiAKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTYzOSw3ICs2MTEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMzAwOwogCkBAIC02NDgsNiArNjE5LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAJZGJnKCIlczogU0xPVF9DVFJMICV4IHdyaXRlIGNtZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoc2xvdC0+Y3RybC0+Y2FwX2Jhc2UpLCBzbG90X2NtZCk7CiAKKwlEQkdfTEVBVkVfUk9VVElORQogCXJldHVybjsKIH0KIApAQCAtNjU4LDcgKzYzMCw4IEBACiAJdTE2IHNsb3RfY3RybDsKIAlpbnQgcmMgPSAwOyAKIAkKLQlkYmcoIiVzOiBcbiIsIF9fRlVOQ1RJT05fXyk7CQorCURCR19FTlRFUl9ST1VUSU5FCisKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDsKQEAgLTY3NSw3ICs2NDgsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybjsKIAl9Ci0JZGJnKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgc2xvdF9jdHJsKTsKIAogCXNsb3RfY21kID0gKHNsb3RfY3RybCAmIH5QV1JfTEVEX0NUUkwpIHwgMHgwMjAwOwogCkBAIC02ODQsNiArNjU2LDcgQEAKIAlwY2llX3dyaXRlX2NtZChzbG90LCBzbG90X2NtZCk7CiAKIAlkYmcoIiVzOiBTTE9UX0NUUkwgJXggd3JpdGUgY21kICV4XG4iLF9fRlVOQ1RJT05fXywgU0xPVF9DVFJMKHNsb3QtPmN0cmwtPmNhcF9iYXNlKSwgc2xvdF9jbWQpOworCURCR19MRUFWRV9ST1VUSU5FCiAJcmV0dXJuOwogfQogCkBAIC03ODAsNyArNzUzLDYgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCURCR19FTlRFUl9ST1VUSU5FIAotCWRiZygiJXM6IFxuIiwgX19GVU5DVElPTl9fKTsJCiAKIAlpZiAoIXBocF9jdGxyKSB7CiAJCWVycigiJXM6IEludmFsaWQgSFBDIGNvbnRyb2xsZXIgaGFuZGxlIVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTc5OSw4ICs3NzEsNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiByZXR2YWw7CiAJfQotCWRiZygiJXM6IFNMT1RfQ1RSTCAleCwgdmFsdWUgcmVhZCAleG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT047CiAKQEAgLTgyOSw3ICs3OTksNiBAQAogCWludCByZXR2YWwgPSAwOwogCiAJREJHX0VOVEVSX1JPVVRJTkUgCi0JZGJnKCIlczogXG4iLCBfX0ZVTkNUSU9OX18pOwkKIAogCWlmICghcGhwX2N0bHIpIHsKIAkJZXJyKCIlczogSW52YWxpZCBIUEMgY29udHJvbGxlciBoYW5kbGUhXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtODQ4LDggKzgxNyw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9Ci0JZGJnKCIlczogU0xPVF9DVFJMICV4LCB2YWx1ZSByZWFkICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfQ1RSTChzbG90LT5jdHJsLT5jYXBfYmFzZSksCi0JCXNsb3RfY3RybCk7CiAKIAlzbG90X2NtZCA9IChzbG90X2N0cmwgJiB+UFdSX0NUUkwpIHwgUE9XRVJfT0ZGOwogCkBAIC05MjQsNyArODkxLDYgQEAKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQogCi0JCWRiZygiJXM6IFNldCBNYXNrIEhvdC1wbHVnIEludGVycnVwdCBFbmFibGVcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWRiZygiJXM6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOwogCQl0ZW1wX3dvcmQgPSAodGVtcF93b3JkICYgfkhQX0lOVFJfRU5BQkxFICYgfkNNRF9DTVBMX0lOVFJfRU5BQkxFKSB8IDB4MDA7CiAKQEAgLTkzMyw3ICs4OTksNiBAQAogCQkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCQogCQlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwaHBfY3Rsci0+cGNpX2RldiwgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCWlmIChyYykgewpAQCAtOTQ5LDE0ICs5MTQsMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIHdpdGggdmFsdWUgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAl9CiAJCiAJaWYgKGludHJfbG9jICYgQ01EX0NPTVBMRVRFRCkgewogCQkvKiAKIAkJICogQ29tbWFuZCBDb21wbGV0ZSBJbnRlcnJ1cHQgUGVuZGluZyAKIAkJICovCi0JCWRiZygiJXM6IEluIENvbW1hbmQgQ29tcGxldGUgSW50ZXJydXB0IFBlbmRpbmdcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY3RybC0+cXVldWUpOwogCX0KIApAQCAtOTg5LDcgKzk1Miw2IEBACiAJCX0KIAogCQlkYmcoIiVzOiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZVxuIiwgX19GVU5DVElPTl9fKTsKLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCB3aXRoIHZhbHVlICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJCXRlbXBfd29yZCA9ICh0ZW1wX3dvcmQgJiB+SFBfSU5UUl9FTkFCTEUpIHwgSFBfSU5UUl9FTkFCTEU7CiAKIAkJcmMgPSBocF9yZWdpc3Rlcl93cml0ZV93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwpAQCAtOTk3LDE0ICs5NTksMTIgQEAKIAkJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gSVJRX05PTkU7CiAJCX0KLQkJZGJnKCIlczogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCB0ZW1wX3dvcmQpOyAJCiAJCiAJCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAkJaWYgKHJjKSB7CiAJCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybiBJUlFfTk9ORTsKIAkJfQotCQlkYmcoIiVzOiBocF9yZWdpc3Rlcl9yZWFkX3dvcmQgU0xPVF9TVEFUVVMgd2l0aCB2YWx1ZSAleFxuIiwgX19GVU5DVElPTl9fLCBzbG90X3N0YXR1cyk7IAogCQkKIAkJLyogQ2xlYXIgY29tbWFuZCBjb21wbGV0ZSBpbnRlcnJ1cHQgY2F1c2VkIGJ5IHRoaXMgd3JpdGUgKi8KIAkJdGVtcF93b3JkID0gMHgxRjsKQEAgLTEyNDgsMTIgKzEyMDgsNyBAQAogCS5jaGVja19sbmtfc3RhdHVzCQk9IGhwY19jaGVja19sbmtfc3RhdHVzLAogfTsKIAotaW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsCi0Jc3RydWN0IHBjaWVfZGV2aWNlICpkZXYsCi0JcGhwX2ludHJfY2FsbGJhY2tfdCBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrLAotCXBocF9pbnRyX2NhbGxiYWNrX3Qgc3dpdGNoX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHByZXNlbmNlX2NoYW5nZV9jYWxsYmFjaywKLQlwaHBfaW50cl9jYWxsYmFja190IHBvd2VyX2ZhdWx0X2NhbGxiYWNrKQoraW50IHBjaWVfaW5pdChzdHJ1Y3QgY29udHJvbGxlciAqIGN0cmwsIHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBwaHBfY3Rscl9zdGF0ZV9zICpwaHBfY3RsciwgKnA7CiAJdm9pZCAqaW5zdGFuY2VfaWQgPSBjdHJsOwpAQCAtMTI4Miw4ICsxMjM3LDggQEAKIAlwZGV2ID0gZGV2LT5wb3J0OwogCXBocF9jdGxyLT5wY2lfZGV2ID0gcGRldjsJLyogc2F2ZSBwY2lfZGV2IGluIGNvbnRleHQgKi8KIAotCWRiZygiJXM6IHBkZXYtPnZlbmRvciAleCBwZGV2LT5kZXZpY2UgJXhcbiIsIF9fRlVOQ1RJT05fXywKLQkJcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOworCWRiZygiJXM6IGhvdHBsdWcgY29udHJvbGxlciB2ZW5kb3IgaWQgMHgleCBkZXZpY2UgaWQgMHgleFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UpOwogCiAJc2F2ZWRfY2FwX2Jhc2UgPSBwY2llX2NhcF9iYXNlOwogCkBAIC0xMzQwLDggKzEyOTUsNiBAQAogCQlmaXJzdCA9IDA7CiAJfQogCi0JZGJnKCJwZGV2ID0gJXA6IGI6ZDpmOmlycT0weCV4OiV4OiV4OiV4XG4iLCBwZGV2LCBwZGV2LT5idXMtPm51bWJlciwgCi0JCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CiAJZm9yICggcmMgPSAwOyByYyA8IERFVklDRV9DT1VOVF9SRVNPVVJDRTsgcmMrKykKIAkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmMpID4gMCkKIAkJCWRiZygicGNpIHJlc291cmNlWyVkXSBzdGFydD0weCVseChsZW49MHglbHgpXG4iLCByYywKQEAgLTEzNTksMTMgKzEzMTIsMTIgQEAKIAogCS8qIGZpbmQgdGhlIElSUSAqLwogCXBocF9jdGxyLT5pcnEgPSBkZXYtPmlycTsKLQlkYmcoIkhQQyBpbnRlcnJ1cHQgPSAlZFxuIiwgcGhwX2N0bHItPmlycSk7CiAKIAkvKiBTYXZlIGludGVycnVwdCBjYWxsYmFjayBpbmZvICovCi0JcGhwX2N0bHItPmF0dGVudGlvbl9idXR0b25fY2FsbGJhY2sgPSBhdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrOwotCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gc3dpdGNoX2NoYW5nZV9jYWxsYmFjazsKLQlwaHBfY3Rsci0+cHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrID0gcHJlc2VuY2VfY2hhbmdlX2NhbGxiYWNrOwotCXBocF9jdGxyLT5wb3dlcl9mYXVsdF9jYWxsYmFjayA9IHBvd2VyX2ZhdWx0X2NhbGxiYWNrOworCXBocF9jdGxyLT5hdHRlbnRpb25fYnV0dG9uX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9hdHRlbnRpb25fYnV0dG9uOworCXBocF9jdGxyLT5zd2l0Y2hfY2hhbmdlX2NhbGxiYWNrID0gcGNpZWhwX2hhbmRsZV9zd2l0Y2hfY2hhbmdlOworCXBocF9jdGxyLT5wcmVzZW5jZV9jaGFuZ2VfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3ByZXNlbmNlX2NoYW5nZTsKKwlwaHBfY3Rsci0+cG93ZXJfZmF1bHRfY2FsbGJhY2sgPSBwY2llaHBfaGFuZGxlX3Bvd2VyX2ZhdWx0OwogCXBocF9jdGxyLT5jYWxsYmFja19pbnN0YW5jZV9pZCA9IGluc3RhbmNlX2lkOwogCiAJLyogcmV0dXJuIFBDSSBDb250cm9sbGVyIEluZm8gKi8KQEAgLTEzODcsMTUgKzEzMzksMTIgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBNYXNrIEhQSUUgaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX0NUUkwgJXhcbiIsIF9fRlVOQ1RJT05fXywgdGVtcF93b3JkKTsKIAogCXJjID0gaHBfcmVnaXN0ZXJfcmVhZF93b3JkKHBocF9jdGxyLT5wY2lfZGV2LCBTTE9UX1NUQVRVUyhjdHJsLT5jYXBfYmFzZSksIHNsb3Rfc3RhdHVzKTsKIAlpZiAocmMpIHsKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3JlYWRfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBNYXNrIEhQSUUgU0xPVF9TVEFUVVMgb2Zmc2V0ICV4IHJlYWRzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKQotCQksIHNsb3Rfc3RhdHVzKTsKIAogCXRlbXBfd29yZCA9IDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0MDMsNyArMTM1Miw2IEBACiAJCWVycigiJXMgOiBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFNMT1RfU1RBVFVTIG9mZnNldCAleCB3cml0ZXMgc2xvdF9zdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCiAJaWYgKHBjaWVocF9wb2xsX21vZGUpICB7LyogSW5zdGFsbCBpbnRlcnJ1cHQgcG9sbGluZyBjb2RlICovCiAJCS8qIEluc3RhbGwgYW5kIHN0YXJ0IHRoZSBpbnRlcnJ1cHQgcG9sbGluZyB0aW1lciAqLwpAQCAtMTQxOSwxMyArMTM2NywxNCBAQAogCQl9CiAJfQogCisJZGJnKCJwY2llaHAgY3RybCBiOmQ6ZjppcnE9MHgleDoleDoleDoleFxuIiwgcGRldi0+YnVzLT5udW1iZXIsCisJCVBDSV9TTE9UKHBkZXYtPmRldmZuKSwgUENJX0ZVTkMocGRldi0+ZGV2Zm4pLCBkZXYtPmlycSk7CisKIAlyYyA9IGhwX3JlZ2lzdGVyX3JlYWRfd29yZChwZGV2LCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfQ1RSTCBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX0NUUkwgJXggdmFsdWUgcmVhZCAleFxuIiwgX19GVU5DVElPTl9fLCBTTE9UX0NUUkwoY3RybC0+Y2FwX2Jhc2UpLCB0ZW1wX3dvcmQpOwotCWRiZygiJXM6IHNsb3RfY2FwICV4XG4iLCBfX0ZVTkNUSU9OX18sIHNsb3RfY2FwKTsKIAogCWludHJfZW5hYmxlID0gaW50cl9lbmFibGUgfCBQUlNOX0RFVEVDVF9FTkFCTEU7CiAKQEAgLTE0NDUsNyArMTM5NCw2IEBACiAJfSBlbHNlIHsKIAkJdGVtcF93b3JkID0gKHRlbXBfd29yZCAmIH5IUF9JTlRSX0VOQUJMRSkgfCBIUF9JTlRSX0VOQUJMRTsKIAl9Ci0JZGJnKCIlczogdGVtcF93b3JkICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAKIAkvKiBVbm1hc2sgSG90LXBsdWcgSW50ZXJydXB0IEVuYWJsZSBmb3IgdGhlIGludGVycnVwdCBub3RpZmljYXRpb24gbWVjaGFuaXNtIGNhc2UgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGRldiwgU0xPVF9DVFJMKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NTMsMTQgKzE0MDEsMTEgQEAKIAkJZXJyKCIlcyA6IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQgU0xPVF9DVFJMIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXMgOiBVbm1hc2sgSFBJRSBocF9yZWdpc3Rlcl93cml0ZV93b3JkIFNMT1RfQ1RSTCB3aXRoICV4XG4iLCBfX0ZVTkNUSU9OX18sIHRlbXBfd29yZCk7CiAJcmMgPSBocF9yZWdpc3Rlcl9yZWFkX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgc2xvdF9zdGF0dXMpOwogCWlmIChyYykgewogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfcmVhZF93b3JkIFNMT1RfU1RBVFVTIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAkJZ290byBhYm9ydF9mcmVlX2N0bHI7CiAJfQotCWRiZygiJXM6IFVubWFzayBIUElFIFNMT1RfU1RBVFVTIG9mZnNldCAleCByZWFkcyBzbG90X3N0YXR1cyAleFxuIiwgX19GVU5DVElPTl9fLCAKLQkJU0xPVF9TVEFUVVMoY3RybC0+Y2FwX2Jhc2UpLCBzbG90X3N0YXR1cyk7CiAJCiAJdGVtcF93b3JkID0gIDB4MUY7IC8qIENsZWFyIGFsbCBldmVudHMgKi8KIAlyYyA9IGhwX3JlZ2lzdGVyX3dyaXRlX3dvcmQocGhwX2N0bHItPnBjaV9kZXYsIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKQEAgLTE0NjgsOCArMTQxMywxNiBAQAogCQllcnIoIiVzIDogaHBfcmVnaXN0ZXJfd3JpdGVfd29yZCBTTE9UX1NUQVRVUyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOwogCX0KLQlkYmcoIiVzOiBTTE9UX1NUQVRVUyBvZmZzZXQgJXggd3JpdGVzIHNsb3Rfc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIFNMT1RfU1RBVFVTKGN0cmwtPmNhcF9iYXNlKSwgdGVtcF93b3JkKTsKIAkKKwlpZiAocGNpZWhwX2ZvcmNlKSB7CisJCWRiZygiQnlwYXNzaW5nIEJJT1MgY2hlY2sgZm9yIHBjaWVocCB1c2Ugb24gJXNcbiIsCisJCQkJcGNpX25hbWUoY3RybC0+cGNpX2RldikpOworCX0gZWxzZSB7CisJCXJjID0gcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoY3RybC0+cGNpX2Rldik7CisJCWlmIChyYykKKwkJCWdvdG8gYWJvcnRfZnJlZV9jdGxyOworCX0KKwogCS8qICBBZGQgdGhpcyBIUEMgaW5zdGFuY2UgaW50byB0aGUgSFBDIGxpc3QgKi8KIAlzcGluX2xvY2soJmxpc3RfbG9jayk7CiAJaWYgKHBocF9jdGxyX2xpc3RfaGVhZCA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCmluZGV4IGZmMTdkOGUuLjY0NzY3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX3BjaS5jCkBAIC0yNyw4MDEgKzI3LDExMSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2lmbmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgIi4uLy4uLy4uL2FyY2gvaTM4Ni9wY2kvcGNpLmgiICAgIC8qIGhvcnJpYmxlIGhhY2sgc2hvd2luZyBob3cgcHJvY2Vzc29yIGRlcGVuZGFudCB3ZSBhcmUuLi4gKi8KLSNlbmRpZgogCiAKLWludCBwY2llaHBfY29uZmlndXJlX2RldmljZSAoc3RydWN0IGNvbnRyb2xsZXIqIGN0cmwsIHN0cnVjdCBwY2lfZnVuYyogZnVuYykgIAoraW50IHBjaWVocF9jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBzbG90ICpwX3Nsb3QpCiB7Ci0JdW5zaWduZWQgY2hhciBidXM7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCWludCBudW07CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50ID0gcF9zbG90LT5jdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZTsKKwlpbnQgbnVtLCBmbjsKIAotCWlmIChmdW5jLT5wY2lfZGV2ID09IE5VTEwpCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKKwlkZXYgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLCBQQ0lfREVWRk4ocF9zbG90LT5kZXZpY2UsIDApKTsKKwlpZiAoZGV2KSB7CisJCWVycigiRGV2aWNlICVzIGFscmVhZHkgZXhpc3RzIGF0ICV4OiV4LCBjYW5ub3QgaG90LWFkZFxuIiwKKwkJCQlwY2lfbmFtZShkZXYpLCBwX3Nsb3QtPmJ1cywgcF9zbG90LT5kZXZpY2UpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQkvKiBTdGlsbCBOVUxMID8gV2VsbCB0aGVuIHNjYW4gZm9yIGl0ICEgKi8KLQlpZiAoZnVuYy0+cGNpX2RldiA9PSBOVUxMKSB7Ci0JCWRiZygiJXM6IHBjaV9kZXYgc3RpbGwgbnVsbC4gZG8gcGNpX3NjYW5fc2xvdFxuIiwgX19GVU5DVElPTl9fKTsKKwludW0gPSBwY2lfc2Nhbl9zbG90KHBhcmVudCwgUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCAwKSk7CisJaWYgKG51bSA9PSAwKSB7CisJCWVycigiTm8gbmV3IGRldmljZSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAotCQludW0gPSBwY2lfc2Nhbl9zbG90KGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbikpOwotCi0JCWlmIChudW0pCi0JCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlKTsKLQkJCi0JCWZ1bmMtPnBjaV9kZXYgPSBwY2lfZmluZF9zbG90KGZ1bmMtPmJ1cywgUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pKTsKLQkJaWYgKGZ1bmMtPnBjaV9kZXYgPT0gTlVMTCkgewotCQkJZGJnKCJFUlJPUjogcGNpX2RldiBzdGlsbCBudWxsXG4iKTsKLQkJCXJldHVybiAwOworCWZvciAoZm4gPSAwOyBmbiA8IDg7IGZuKyspIHsKKwkJaWYgKCEoZGV2ID0gcGNpX2ZpbmRfc2xvdChwX3Nsb3QtPmJ1cywKKwkJCQkJUENJX0RFVkZOKHBfc2xvdC0+ZGV2aWNlLCBmbikpKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoKGRldi0+Y2xhc3MgPj4gMTYpID09IFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkpIHsKKwkJCWVycigiQ2Fubm90IGhvdC1hZGQgZGlzcGxheSBkZXZpY2UgJXNcbiIsCisJCQkJCXBjaV9uYW1lKGRldikpOworCQkJY29udGludWU7CiAJCX0KKwkJaWYgKChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHx8CisJCQkJKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CisJCQkvKiBGaW5kIGFuIHVudXNlZCBidXMgbnVtYmVyIGZvciB0aGUgbmV3IGJyaWRnZSAqLworCQkJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCQkJdW5zaWduZWQgY2hhciBidXNuciwgc3RhcnQgPSBwYXJlbnQtPnNlY29uZGFyeTsKKwkJCXVuc2lnbmVkIGNoYXIgZW5kID0gcGFyZW50LT5zdWJvcmRpbmF0ZTsKKwkJCWZvciAoYnVzbnIgPSBzdGFydDsgYnVzbnIgPD0gZW5kOyBidXNucisrKSB7CisJCQkJaWYgKCFwY2lfZmluZF9idXMocGNpX2RvbWFpbl9ucihwYXJlbnQpLAorCQkJCQkJCWJ1c25yKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYnVzbnIgPj0gZW5kKSB7CisJCQkJZXJyKCJObyBmcmVlIGJ1cyBmb3IgaG90LWFkZGVkIGJyaWRnZVxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJCQljaGlsZCA9IHBjaV9hZGRfbmV3X2J1cyhwYXJlbnQsIGRldiwgYnVzbnIpOworCQkJaWYgKCFjaGlsZCkgeworCQkJCWVycigiQ2Fubm90IGFkZCBuZXcgYnVzIGZvciAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKGRldikpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2hpbGQtPnN1Ym9yZGluYXRlID0gcGNpX2RvX3NjYW5fYnVzKGNoaWxkKTsKKwkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGNoaWxkKTsKKwkJfQorCQkvKiBUQkQ6IHByb2dyYW0gZmlybXdhcmUgcHJvdmlkZWQgX0hQUCB2YWx1ZXMgKi8KKwkJLyogcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoZGV2KTsgKi8KIAl9CiAKLQlpZiAoZnVuYy0+cGNpX2Rldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmdW5jLT5wY2lfZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJmJ1cyk7Ci0JCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKGZ1bmMtPnBjaV9kZXYtPmJ1cywgKGZ1bmMtPnBjaV9kZXYpLCBidXMpOwotCQlwY2lfZG9fc2Nhbl9idXMoY2hpbGQpOwotCi0JfQotCisJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCXJldHVybiAwOwogfQogCi0KLWludCBwY2llaHBfdW5jb25maWd1cmVfZGV2aWNlKHN0cnVjdCBwY2lfZnVuYyogZnVuYykgCitpbnQgcGNpZWhwX3VuY29uZmlndXJlX2RldmljZShzdHJ1Y3Qgc2xvdCAqcF9zbG90KQogewogCWludCByYyA9IDA7CiAJaW50IGo7Ci0Jc3RydWN0IHBjaV9idXMgKnBidXM7CisJdTggYmN0bCA9IDA7CiAKLQlkYmcoIiVzOiBidXMvZGV2L2Z1bmMgPSAleC8leC8leFxuIiwgX19GVU5DVElPTl9fLCBmdW5jLT5idXMsCi0JCQkJZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0JcGJ1cyA9IGZ1bmMtPnBjaV9kZXYtPmJ1czsKKwlkYmcoIiVzOiBidXMvZGV2ID0gJXgvJXhcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5idXMsCisJCQkJcF9zbG90LT5kZXZpY2UpOwogCiAJZm9yIChqPTA7IGo8OCA7IGorKykgewotCQlzdHJ1Y3QgcGNpX2RldiogdGVtcCA9IHBjaV9maW5kX3Nsb3QoZnVuYy0+YnVzLAotCQkJCShmdW5jLT5kZXZpY2UgPDwgMykgfCBqKTsKLQkJaWYgKHRlbXApIHsKLQkJCXBjaV9yZW1vdmVfYnVzX2RldmljZSh0ZW1wKTsKKwkJc3RydWN0IHBjaV9kZXYqIHRlbXAgPSBwY2lfZmluZF9zbG90KHBfc2xvdC0+YnVzLAorCQkJCShwX3Nsb3QtPmRldmljZSA8PCAzKSB8IGopOworCQlpZiAoIXRlbXApCisJCQljb250aW51ZTsKKwkJaWYgKCh0ZW1wLT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfRElTUExBWSkgeworCQkJZXJyKCJDYW5ub3QgcmVtb3ZlIGRpc3BsYXkgZGV2aWNlICVzXG4iLAorCQkJCQlwY2lfbmFtZSh0ZW1wKSk7CisJCQljb250aW51ZTsKIAkJfQorCQlpZiAodGVtcC0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUodGVtcCwgUENJX0JSSURHRV9DT05UUk9MLCAmYmN0bCk7CisJCQlpZiAoYmN0bCAmIFBDSV9CUklER0VfQ1RMX1ZHQSkgeworCQkJCWVycigiQ2Fubm90IHJlbW92ZSBkaXNwbGF5IGRldmljZSAlc1xuIiwKKwkJCQkJCXBjaV9uYW1lKHRlbXApKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlwY2lfcmVtb3ZlX2J1c19kZXZpY2UodGVtcCk7CiAJfQogCS8qIAogCSAqIFNvbWUgUENJIEV4cHJlc3Mgcm9vdCBwb3J0cyByZXF1aXJlIGZpeHVwIGFmdGVyIGhvdC1wbHVnIG9wZXJhdGlvbi4KIAkgKi8KIAlpZiAocGNpZV9tY2hfcXVpcmspIAotCQlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9maW5hbCwgcGJ1cy0+c2VsZik7CisJCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX2ZpbmFsLCBwX3Nsb3QtPmN0cmwtPnBjaV9kZXYpOwogCQogCXJldHVybiByYzsKIH0KIAotLyoKLSAqIHBjaWVocF9zZXRfaXJxCi0gKgotICogQGJ1c19udW06IGJ1cyBudW1iZXIgb2YgUENJIGRldmljZQotICogQGRldl9udW06IGRldmljZSBudW1iZXIgb2YgUENJIGRldmljZQotICogQHNsb3Q6IHBvaW50ZXIgdG8gdTggd2hlcmUgc2xvdCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZAotICovCi1pbnQgcGNpZWhwX3NldF9pcnEgKHU4IGJ1c19udW0sIHU4IGRldl9udW0sIHU4IGludF9waW4sIHU4IGlycV9udW0pCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzMyKSAmJiAhZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0JaW50IHJjOwotCXUxNiB0ZW1wX3dvcmQ7Ci0Jc3RydWN0IHBjaV9kZXYgZmFrZWRldjsKLQlzdHJ1Y3QgcGNpX2J1cyBmYWtlYnVzOwotCi0JZmFrZWRldi5kZXZmbiA9IGRldl9udW0gPDwgMzsKLQlmYWtlZGV2LmJ1cyA9ICZmYWtlYnVzOwotCWZha2VidXMubnVtYmVyID0gYnVzX251bTsKLQlkYmcoIiVzOiBkZXYgJWQsIGJ1cyAlZCwgcGluICVkLCBudW0gJWRcbiIsCi0JICAgIF9fRlVOQ1RJT05fXywgZGV2X251bSwgYnVzX251bSwgaW50X3BpbiwgaXJxX251bSk7Ci0JcmMgPSBwY2liaW9zX3NldF9pcnFfcm91dGluZygmZmFrZWRldiwgaW50X3BpbiAtIDB4MGEsIGlycV9udW0pOwotCWRiZygiJXM6IHJjICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJjKTsKLQlpZiAoIXJjKQotCQlyZXR1cm4gIXJjOwotCi0JLyogc2V0IHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKEVMQ1IpICovCi0JdGVtcF93b3JkID0gaW5iKDB4NGQwKTsKLQl0ZW1wX3dvcmQgfD0gaW5iKDB4NGQxKSA8PCA4OwotCi0JdGVtcF93b3JkIHw9IDB4MDEgPDwgaXJxX251bTsKLQotCS8qIFRoaXMgc2hvdWxkIG9ubHkgYmUgZm9yIHg4NiBhcyBpdCBzZXRzIHRoZSBFZGdlIExldmVsIENvbnRyb2wgUmVnaXN0ZXIgKi8KLQlvdXRiKCh1OCkgKHRlbXBfd29yZCAmIDB4RkYpLCAweDRkMCk7Ci0Jb3V0YigodTgpICgodGVtcF93b3JkICYgMHhGRjAwKSA+PiA4KSwgMHg0ZDEpOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIE1vcmUgUENJIGNvbmZpZ3VyYXRpb24gcm91dGluZXM7IHRoaXMgdGltZSBjZW50ZXJlZCBhcm91bmQgaG90cGx1ZyBjb250cm9sbGVyICovCi0KLQotLyoKLSAqIHBjaWVocF9zYXZlX2NvbmZpZwotICoKLSAqIFJlYWRzIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBzbG90cyBpbiBhIFBDSSBidXMgYW5kIHNhdmVzIGluZm8uCi0gKgotICogTm90ZTogIEZvciBub24taG90IHBsdWcgYnVzc2VzLCB0aGUgc2xvdCAjIHNhdmVkIGlzIHRoZSBkZXZpY2UgIwotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9jb25maWcoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIGludCBidXNudW1iZXIsIGludCBudW1fY3Rscl9zbG90cywgaW50IGZpcnN0X2RldmljZV9udW0pCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0Jc3RydWN0IHBjaV9mdW5jICpuZXdfc2xvdDsKLQlpbnQgc3ViX2J1czsKLQlpbnQgbWF4X2Z1bmN0aW9uczsKLQlpbnQgZnVuY3Rpb247Ci0JdTggRGV2RXJyb3I7Ci0JaW50IGRldmljZSA9IDA7Ci0JaW50IGNsb29wID0gMDsKLQlpbnQgc3RvcF9pdDsKLQlpbnQgaW5kZXg7Ci0JaW50IGlzX2hvdF9wbHVnID0gbnVtX2N0bHJfc2xvdHMgfHwgZmlyc3RfZGV2aWNlX251bTsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50IEZpcnN0U3VwcG9ydGVkLCBMYXN0U3VwcG9ydGVkOwotCi0JZGJnKCIlczogRW50ZXJcbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQotCWRiZygiJXM6IG51bV9jdGxyX3Nsb3RzID0gJWQsIGZpcnN0X2RldmljZV9udW0gPSAlZFxuIiwgX19GVU5DVElPTl9fLAotCQkJCW51bV9jdGxyX3Nsb3RzLCBmaXJzdF9kZXZpY2VfbnVtKTsKLQotCS8qICAgRGVjaWRlIHdoaWNoIHNsb3RzIGFyZSBzdXBwb3J0ZWQgKi8KLQlpZiAoaXNfaG90X3BsdWcpIHsKLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCQkgKiAgaXNfaG90X3BsdWcgaXMgdGhlIHNsb3QgbWFzawotCQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQlGaXJzdFN1cHBvcnRlZCA9IGZpcnN0X2RldmljZV9udW07Ci0JCUxhc3RTdXBwb3J0ZWQgPSBGaXJzdFN1cHBvcnRlZCArIG51bV9jdGxyX3Nsb3RzIC0gMTsKLQl9IGVsc2UgewotCQlGaXJzdFN1cHBvcnRlZCA9IDA7Ci0JCUxhc3RTdXBwb3J0ZWQgPSAweDFGOwotCX0KLQotCWRiZygiRmlyc3RTdXBwb3J0ZWQgPSAlZCwgTGFzdFN1cHBvcnRlZCA9ICVkXG4iLCBGaXJzdFN1cHBvcnRlZCwKLQkJCQkJTGFzdFN1cHBvcnRlZCk7Ci0KLQkvKiAgIFNhdmUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UgZm9yIGFsbCBkZXZpY2VzIGluIHN1cHBvcnRlZCBzbG90cyAqLwotCWRiZygiJXM6IHBjaV9idXMtPm51bWJlciA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIHBjaV9idXMtPm51bWJlcik7Ci0JcGNpX2J1cy0+bnVtYmVyID0gYnVzbnVtYmVyOwotCWRiZygiJXM6IGJ1cyA9ICV4LCBkZXYgPSAleFxuIiwgX19GVU5DVElPTl9fLCBidXNudW1iZXIsIGRldmljZSk7Ci0JZm9yIChkZXZpY2UgPSBGaXJzdFN1cHBvcnRlZDsgZGV2aWNlIDw9IExhc3RTdXBwb3J0ZWQ7IGRldmljZSsrKSB7Ci0JCUlEID0gMHhGRkZGRkZGRjsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQlQQ0lfVkVORE9SX0lELCAmSUQpOwotCi0JCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCQlkYmcoIiVzOiBJRCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sIElEKTsKLQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIFBDSV9ERVZGTihkZXZpY2UsIDApLAotCQkJCQkweDBCLCAmY2xhc3NfY29kZSk7Ci0JCQlpZiAocmMpCi0JCQkJcmV0dXJuIHJjOwotCi0JCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4oZGV2aWNlLCAwKSwKLQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQotCQkJLyogSWYgbXVsdGktZnVuY3Rpb24gZGV2aWNlLCBzZXQgbWF4X2Z1bmN0aW9ucyB0byA4ICovCi0JCQlpZiAoaGVhZGVyX3R5cGUgJiAweDgwKQotCQkJCW1heF9mdW5jdGlvbnMgPSA4OwotCQkJZWxzZQotCQkJCW1heF9mdW5jdGlvbnMgPSAxOwotCi0JCQlmdW5jdGlvbiA9IDA7Ci0KLQkJCWRvIHsKLQkJCQlEZXZFcnJvciA9IDA7Ci0JCQkJZGJnKCIlczogSW4gZG8gbG9vcFxuIiwgX19GVU5DVElPTl9fKTsKLQotCQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7ICAgLyogUC1QIEJyaWRnZSAqLwotCQkJCQkvKiBSZWN1cnNlIHRoZSBzdWJvcmRpbmF0ZSBidXMKLQkJCQkJICogZ2V0IHRoZSBzdWJvcmRpbmF0ZSBidXMgbnVtYmVyCi0JCQkJCSAqLwotCQkJCQlyYyA9IHBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLCAKLQkJCQkJCVBDSV9TRUNPTkRBUllfQlVTLCAmc2Vjb25kYXJ5X2J1cyk7Ci0JCQkJCWlmIChyYykgewotCQkJCQkJcmV0dXJuIHJjOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkJCS8qIFNhdmUgc2Vjb25kYXJ5IGJ1cyBjZmcgc3BjIHdpdGggdGhpcyByZWN1cnNpdmUgY2FsbC4gKi8KLQkJCQkJCXJjID0gcGNpZWhwX3NhdmVfY29uZmlnKGN0cmwsIHN1Yl9idXMsIDAsIDApOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWluZGV4ID0gMDsKLQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCi0JCQkJZGJnKCIlczogbmV3X3Nsb3QgPSAlcCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0KLQkJCQl3aGlsZSAobmV3X3Nsb3QgJiYgKG5ld19zbG90LT5mdW5jdGlvbiAhPSAodTgpIGZ1bmN0aW9uKSkgewotCQkJCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbnVtYmVyLCBkZXZpY2UsIGluZGV4KyspOwotCQkJCQlkYmcoIiVzOiB3aGlsZSBsb29wLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgaW5kZXgtMSk7Ci0JCQkJfQotCQkJCWlmICghbmV3X3Nsb3QpIHsKLQkJCQkJLyogU2V0dXAgc2xvdCBzdHJ1Y3R1cmUuICovCi0JCQkJCW5ld19zbG90ID0gcGNpZWhwX3Nsb3RfY3JlYXRlKGJ1c251bWJlcik7Ci0JCQkJCWRiZygiJXM6IGlmLCBuZXdfc2xvdCA9ICVwIGJ1cyAleCBkZXYgJXggZnVuICV4XG4iLAotCQkJCQlfX0ZVTkNUSU9OX18sIG5ld19zbG90LCBidXNudW1iZXIsIGRldmljZSwgZnVuY3Rpb24pOwotCi0JCQkJCWlmIChuZXdfc2xvdCA9PSBOVUxMKQotCQkJCQkJcmV0dXJuKDEpOwotCQkJCX0KLQotCQkJCW5ld19zbG90LT5idXMgPSAodTgpIGJ1c251bWJlcjsKLQkJCQluZXdfc2xvdC0+ZGV2aWNlID0gKHU4KSBkZXZpY2U7Ci0JCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gKHU4KSBmdW5jdGlvbjsKLQkJCQluZXdfc2xvdC0+aXNfYV9ib2FyZCA9IDE7Ci0JCQkJbmV3X3Nsb3QtPnN3aXRjaF9zYXZlID0gMHgxMDsKLQkJCQkvKiBJbiBjYXNlIG9mIHVuc3VwcG9ydGVkIGJvYXJkICovCi0JCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IERldkVycm9yOwotCQkJCW5ld19zbG90LT5wY2lfZGV2ID0gcGNpX2ZpbmRfc2xvdChuZXdfc2xvdC0+YnVzLAotCQkJCQkobmV3X3Nsb3QtPmRldmljZSA8PCAzKSB8IG5ld19zbG90LT5mdW5jdGlvbik7Ci0JCQkJZGJnKCJuZXdfc2xvdC0+cGNpX2RldiA9ICVwXG4iLCBuZXdfc2xvdC0+cGNpX2Rldik7Ci0KLQkJCQlmb3IgKGNsb29wID0gMDsgY2xvb3AgPCAweDIwOyBjbG9vcCsrKSB7Ci0JCQkJCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJY2xvb3AgPDwgMiwgCi0JCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQkJCS8qIGRiZygibmV3X3Nsb3QtPmNvbmZpZ19zcGFjZVsleF0gPSAleFxuIiwKLQkJCQkJCWNsb29wLCBuZXdfc2xvdC0+Y29uZmlnX3NwYWNlW2Nsb29wXSk7ICovCi0JCQkJCWlmIChyYykKLQkJCQkJCXJldHVybiByYzsKLQkJCQl9Ci0KLQkJCQlmdW5jdGlvbisrOwotCi0JCQkJc3RvcF9pdCA9IDA7Ci0KLQkJCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCQkgKiAgcmVhZGluZyBpbiBDbGFzcyBDb2RlIGFuZCBIZWFkZXIgdHlwZS4KLQkJCQkgKi8KLQotCQkJCXdoaWxlICgoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKSYmKCFzdG9wX2l0KSkgewotCQkJCQlkYmcoIiVzOiBJbiB3aGlsZSBsb29wIFxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCQkJUENJX0RFVkZOKGRldmljZSwgZnVuY3Rpb24pLAotCQkJCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQkJaWYgKElEID09IDB4RkZGRkZGRkYpIHsgIC8qIG5vdGhpbmcgdGhlcmUuICovCi0JCQkJCQlmdW5jdGlvbisrOwotCQkJCQkJZGJnKCJOb3RoaW5nIHRoZXJlXG4iKTsKLQkJCQkJfSBlbHNlIHsgIC8qIFNvbWV0aGluZyB0aGVyZSAqLwotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJMHgwQiwgJmNsYXNzX2NvZGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCQlQQ0lfREVWRk4oZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQkJUENJX0hFQURFUl9UWVBFLCAmaGVhZGVyX3R5cGUpOwotCQkJCQkJaWYgKHJjKQotCQkJCQkJCXJldHVybiByYzsKLQotCQkJCQkJZGJnKCJjbGFzc19jb2RlID0gJXgsIGhlYWRlcl90eXBlID0gJXhcbiIsIGNsYXNzX2NvZGUsIGhlYWRlcl90eXBlKTsKLQkJCQkJCXN0b3BfaXQrKzsKLQkJCQkJfQotCQkJCX0KLQotCQkJfSB3aGlsZSAoZnVuY3Rpb24gPCBtYXhfZnVuY3Rpb25zKTsKLQkJCS8qIEVuZCBvZiBJRiAoZGV2aWNlIGluIHNsb3Q/KSAqLwotCQl9IGVsc2UgaWYgKGlzX2hvdF9wbHVnKSB7Ci0JCQkvKiBTZXR1cCBzbG90IHN0cnVjdHVyZSB3aXRoIGVudHJ5IGZvciBlbXB0eSBzbG90ICovCi0JCQluZXdfc2xvdCA9IHBjaWVocF9zbG90X2NyZWF0ZShidXNudW1iZXIpOwotCi0JCQlpZiAobmV3X3Nsb3QgPT0gTlVMTCkgewotCQkJCXJldHVybigxKTsKLQkJCX0KLQkJCWRiZygibmV3X3Nsb3QgPSAlcCwgYnVzID0gJXgsIGRldiA9ICV4LCBmdW4gPSAleFxuIiwgbmV3X3Nsb3QsCi0JCQkJbmV3X3Nsb3QtPmJ1cywgbmV3X3Nsb3QtPmRldmljZSwgbmV3X3Nsb3QtPmZ1bmN0aW9uKTsKLQotCQkJbmV3X3Nsb3QtPmJ1cyA9ICh1OCkgYnVzbnVtYmVyOwotCQkJbmV3X3Nsb3QtPmRldmljZSA9ICh1OCkgZGV2aWNlOwotCQkJbmV3X3Nsb3QtPmZ1bmN0aW9uID0gMDsKLQkJCW5ld19zbG90LT5pc19hX2JvYXJkID0gMDsKLQkJCW5ld19zbG90LT5wcmVzZW5jZV9zYXZlID0gMDsKLQkJCW5ld19zbG90LT5zd2l0Y2hfc2F2ZSA9IDA7Ci0JCX0KLQl9IAkJCS8qIEVuZCBvZiBGT1IgbG9vcCAqLwotCi0JZGJnKCIlczogRXhpdFxuIiwgX19GVU5DVElPTl9fKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3Nsb3RfY29uZmlnCi0gKgotICogU2F2ZXMgY29uZmlndXJhdGlvbiBpbmZvIGZvciBhbGwgUENJIGRldmljZXMgaW4gYSBnaXZlbiBzbG90Ci0gKiBpbmNsdWRpbmcgc3Vib3JkaW5hdGUgYnVzc2VzLgotICoKLSAqIHJldHVybnMgMCBpZiBzdWNjZXNzCi0gKi8KLWludCBwY2llaHBfc2F2ZV9zbG90X2NvbmZpZyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwgc3RydWN0IHBjaV9mdW5jICogbmV3X3Nsb3QpCi17Ci0JaW50IHJjOwotCXU4IGNsYXNzX2NvZGU7Ci0JdTggaGVhZGVyX3R5cGU7Ci0JdTMyIElEOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JaW50IHN1Yl9idXM7Ci0JaW50IG1heF9mdW5jdGlvbnM7Ci0JaW50IGZ1bmN0aW9uOwotCWludCBjbG9vcCA9IDA7Ci0JaW50IHN0b3BfaXQ7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IG5ld19zbG90LT5idXM7Ci0KLQlJRCA9IDB4RkZGRkZGRkY7Ci0KLQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIFBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCAwKSwKLQkJCQkJUENJX1ZFTkRPUl9JRCwgJklEKTsKLQotCWlmIChJRCAhPSAweEZGRkZGRkZGKSB7CSAgLyogIGRldmljZSBpbiBzbG90ICovCi0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLCBQQ0lfREVWRk4obmV3X3Nsb3QtPmRldmljZSwgMCksCi0JCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIDApLAotCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKGhlYWRlcl90eXBlICYgMHg4MCkJLyogTXVsdGktZnVuY3Rpb24gZGV2aWNlICovCi0JCQltYXhfZnVuY3Rpb25zID0gODsKLQkJZWxzZQotCQkJbWF4X2Z1bmN0aW9ucyA9IDE7Ci0KLQkJZnVuY3Rpb24gPSAwOwotCi0JCWRvIHsKLQkJCWlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CSAgLyogUENJLVBDSSBCcmlkZ2UgKi8KLQkJCQkvKiAgUmVjdXJzZSB0aGUgc3Vib3JkaW5hdGUgYnVzICovCi0JCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQlQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCi0JCQkJc3ViX2J1cyA9IChpbnQpIHNlY29uZGFyeV9idXM7Ci0KLQkJCQkvKiBTYXZlIHRoZSBjb25maWcgaGVhZGVycyBmb3IgdGhlIHNlY29uZGFyeSBidXMuICovCi0JCQkJcmMgPSBwY2llaHBfc2F2ZV9jb25maWcoY3RybCwgc3ViX2J1cywgMCwgMCk7Ci0KLQkJCQlpZiAocmMpCi0JCQkJCXJldHVybiByYzsKLQotCQkJfQkvKiBFbmQgb2YgSUYgKi8KLQotCQkJbmV3X3Nsb3QtPnN0YXR1cyA9IDA7Ci0KLQkJCWZvciAoY2xvb3AgPSAwOyBjbG9vcCA8IDB4MjA7IGNsb29wKyspIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksIAotCQkJCQljbG9vcCA8PCAyLAotCQkJCQkodTMyICopICYobmV3X3Nsb3QtPmNvbmZpZ19zcGFjZSBbY2xvb3BdKSk7Ci0JCQl9Ci0KLQkJCWZ1bmN0aW9uKys7Ci0KLQkJCXN0b3BfaXQgPSAwOwotCi0JCQkvKiAgdGhpcyBsb29wIHNraXBzIHRvIHRoZSBuZXh0IHByZXNlbnQgZnVuY3Rpb24KLQkJCSAqICByZWFkaW5nIGluIHRoZSBDbGFzcyBDb2RlIGFuZCB0aGUgSGVhZGVyIHR5cGUuCi0JCQkgKi8KLQotCQkJd2hpbGUgKChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpICYmICghc3RvcF9pdCkpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsCi0JCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCVBDSV9WRU5ET1JfSUQsICZJRCk7Ci0KLQkJCQlpZiAoSUQgPT0gMHhGRkZGRkZGRikgewkgLyogbm90aGluZyB0aGVyZS4gKi8KLQkJCQkJZnVuY3Rpb24rKzsKLQkJCQl9IGVsc2UgeyAgLyogU29tZXRoaW5nIHRoZXJlICovCi0JCQkJCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShwY2lfYnVzLAotCQkJCQkJUENJX0RFVkZOKG5ld19zbG90LT5kZXZpY2UsIGZ1bmN0aW9uKSwKLQkJCQkJCTB4MEIsICZjbGFzc19jb2RlKTsKLQotCQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywKLQkJCQkJCVBDSV9ERVZGTihuZXdfc2xvdC0+ZGV2aWNlLCBmdW5jdGlvbiksCi0JCQkJCQlQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJCQkJc3RvcF9pdCsrOwotCQkJCX0KLQkJCX0KLQotCQl9IHdoaWxlIChmdW5jdGlvbiA8IG1heF9mdW5jdGlvbnMpOwotCX0JCQkvKiBFbmQgb2YgSUYgKGRldmljZSBpbiBzbG90PykgKi8KLQllbHNlIHsKLQkJcmV0dXJuIDI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzCi0gKgotICogU3RvcmVzIHVzZWQgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGV4aXN0aW5nIGJvYXJkcy4gIHRoaXMgaXMKLSAqIGZvciBib2FyZHMgdGhhdCB3ZXJlIGluIHRoZSBzeXN0ZW0gd2hlbiB0aGlzIGRyaXZlciB3YXMgbG9hZGVkLgotICogdGhpcyBmdW5jdGlvbiBpcyBmb3IgaG90IHBsdWcgQURECi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqIGlmIGRpc2FibGUgID09IDEoRElTQUJMRV9DQVJEKSwKLSAqICBpdCBsb29wcyBmb3IgYWxsIGZ1bmN0aW9ucyBvZiB0aGUgc2xvdCBhbmQgZGlzYWJsZXMgdGhlbS4KLSAqIGVsc2UsIGl0IGp1c3QgZ2V0IHJlc291cmNlcyBvZiB0aGUgZnVuY3Rpb24gYW5kIHJldHVybi4KLSAqLwotaW50IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCBzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIGludCBkaXNhYmxlKQotewotCXU4IGNsb29wOwotCXU4IGhlYWRlcl90eXBlOwotCXU4IHNlY29uZGFyeV9idXM7Ci0JdTggdGVtcF9ieXRlOwotCXUxNiBjb21tYW5kOwotCXUxNiBzYXZlX2NvbW1hbmQ7Ci0JdTE2IHdfYmFzZSwgd19sZW5ndGg7Ci0JdTMyIHRlbXBfcmVnaXN0ZXI7Ci0JdTMyIHNhdmVfYmFzZTsKLQl1MzIgYmFzZSwgbGVuZ3RoOwotCXU2NCBiYXNlNjQgPSAwOwotCWludCBpbmRleCA9IDA7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpwX21lbV9ub2RlID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICp0X21lbV9ub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKmlvX25vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqYnVzX25vZGU7Ci0Jc3RydWN0IHBjaV9idXMgbHBjaV9idXMsICpwY2lfYnVzOwotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCi0JaWYgKGRpc2FibGUpCi0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQotCXdoaWxlICgoZnVuYyAhPSBOVUxMKSAmJiBmdW5jLT5pc19hX2JvYXJkKSB7Ci0JCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQkJZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQkJLyogU2F2ZSB0aGUgY29tbWFuZCByZWdpc3RlciAqLwotCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmc2F2ZV9jb21tYW5kKTsKLQotCQlpZiAoZGlzYWJsZSkgewotCQkJLyogZGlzYWJsZSBjYXJkICovCi0JCQljb21tYW5kID0gMHgwMDsKLQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQkJfQotCi0JCS8qIENoZWNrIGZvciBCcmlkZ2UgKi8KLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfSEVBREVSX1RZUEUsICZoZWFkZXJfdHlwZSk7Ci0KLQkJaWYgKChoZWFkZXJfdHlwZSAmIDB4N0YpID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsgICAgIC8qIFBDSS1QQ0kgQnJpZGdlICovCi0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGJyaWRnZSBiOmQ9MHgleDoleCwgc2M9MHgleFxuIiwKLQkJCQkJZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIHNhdmVfY29tbWFuZCk7Ci0JCQlpZiAoZGlzYWJsZSkgewotCQkJCS8qIENsZWFyIEJyaWRnZSBDb250cm9sIFJlZ2lzdGVyICovCi0JCQkJY29tbWFuZCA9IDB4MDA7Ci0JCQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX0JSSURHRV9DT05UUk9MLCBjb21tYW5kKTsKLQkJCX0KLQotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDT05EQVJZX0JVUywgJnNlY29uZGFyeV9idXMpOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU1VCT1JESU5BVEVfQlVTLCAmdGVtcF9ieXRlKTsKLQotCQkJYnVzX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJaWYgKCFidXNfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJYnVzX25vZGUtPmJhc2UgPSAodWxvbmcpc2Vjb25kYXJ5X2J1czsKLQkJCWJ1c19ub2RlLT5sZW5ndGggPSAodWxvbmcpKHRlbXBfYnl0ZSAtIHNlY29uZGFyeV9idXMgKyAxKTsKLQotCQkJYnVzX25vZGUtPm5leHQgPSBmdW5jLT5idXNfaGVhZDsKLQkJCWZ1bmMtPmJ1c19oZWFkID0gYnVzX25vZGU7Ci0KLQkJCS8qIFNhdmUgSU8gYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19CQVNFLCAmdGVtcF9ieXRlKTsKLQkJCWJhc2UgPSB0ZW1wX2J5dGU7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9JT19MSU1JVCwgJnRlbXBfYnl0ZSk7Ci0JCQlsZW5ndGggPSB0ZW1wX2J5dGU7Ci0KLQkJCWlmICgoYmFzZSA8PSBsZW5ndGgpICYmICghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfSU8pKSkgewotCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJaW9fbm9kZS0+YmFzZSA9ICh1bG9uZykoYmFzZSAmIFBDSV9JT19SQU5HRV9NQVNLKSA8PCA4OwotCQkJCWlvX25vZGUtPmxlbmd0aCA9ICh1bG9uZykobGVuZ3RoIC0gYmFzZSArIDB4MTApIDw8IDg7Ci0KLQkJCQlpb19ub2RlLT5uZXh0ID0gZnVuYy0+aW9faGVhZDsKLQkJCQlmdW5jLT5pb19oZWFkID0gaW9fbm9kZTsKLQkJCX0KLQotCQkJLyogU2F2ZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfQkFTRSwgJndfYmFzZSk7Ci0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9NRU1PUllfTElNSVQsICZ3X2xlbmd0aCk7Ci0KLQkJCWlmICgod19iYXNlIDw9IHdfbGVuZ3RoKSAmJiAoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpKSB7Ci0JCQkJbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghbWVtX25vZGUpCi0JCQkJCXJldHVybiAtRU5PTUVNOwotCi0JCQkJbWVtX25vZGUtPmJhc2UgPSAodWxvbmcpd19iYXNlIDw8IDE2OwotCQkJCW1lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQltZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPm1lbV9oZWFkOwotCQkJCWZ1bmMtPm1lbV9oZWFkID0gbWVtX25vZGU7Ci0JCQl9Ci0JCQkvKiBTYXZlIHByZWZldGNoYWJsZSBtZW1vcnkgYmFzZSBhbmQgTGltaXQgcmVnaXN0ZXJzICovCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9QUkVGX01FTU9SWV9CQVNFLCAmd19iYXNlKTsKLQkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChwY2lfYnVzLCBkZXZmbiwgUENJX1BSRUZfTUVNT1JZX0xJTUlULCAmd19sZW5ndGgpOwotCi0JCQlpZiAoKHdfYmFzZSA8PSB3X2xlbmd0aCkgJiYgKCFkaXNhYmxlIHx8IChzYXZlX2NvbW1hbmQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpKSkgewotCQkJCXBfbWVtX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGNpX3Jlc291cmNlKSwKLQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCWlmICghcF9tZW1fbm9kZSkKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXdfYmFzZSA8PCAxNjsKLQkJCQlwX21lbV9ub2RlLT5sZW5ndGggPSAodWxvbmcpKHdfbGVuZ3RoIC0gd19iYXNlICsgMHgxMCkgPDwgMTY7Ci0KLQkJCQlwX21lbV9ub2RlLT5uZXh0ID0gZnVuYy0+cF9tZW1faGVhZDsKLQkJCQlmdW5jLT5wX21lbV9oZWFkID0gcF9tZW1fbm9kZTsKLQkJCX0KLQkJfSBlbHNlIGlmICgoaGVhZGVyX3R5cGUgJiAweDdGKSA9PSBQQ0lfSEVBREVSX1RZUEVfTk9STUFMKSB7Ci0JCQlkYmcoIlNhdmVfdXNlZF9yZXMgb2YgUENJIGFkYXB0ZXIgYjpkPTB4JXg6JXgsIHNjPTB4JXhcbiIsCi0JCQkJCWZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBzYXZlX2NvbW1hbmQpOwotCi0JCQkvKiBGaWd1cmUgb3V0IElPIGFuZCBtZW1vcnkgYmFzZSBsZW5ndGhzICovCi0JCQlmb3IgKGNsb29wID0gUENJX0JBU0VfQUREUkVTU18wOyBjbG9vcCA8PSBQQ0lfQkFTRV9BRERSRVNTXzU7IGNsb29wICs9IDQpIHsKLQkJCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgJnNhdmVfYmFzZSk7Ci0KLQkJCQl0ZW1wX3JlZ2lzdGVyID0gMHhGRkZGRkZGRjsKLQkJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfYnVzLCBkZXZmbiwgY2xvb3AsIHRlbXBfcmVnaXN0ZXIpOwotCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wLCAmdGVtcF9yZWdpc3Rlcik7Ci0KLQkJCQlpZiAoIWRpc2FibGUpCi0JCQkJCXBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHBjaV9idXMsIGRldmZuLCBjbG9vcCwgc2F2ZV9iYXNlKTsKLQotCQkJCWlmICghdGVtcF9yZWdpc3RlcikKLQkJCQkJY29udGludWU7Ci0KLQkJCQliYXNlID0gdGVtcF9yZWdpc3RlcjsKLQotCQkJCWlmICgoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pICYmCi0JCQkJCQkoIWRpc2FibGUgfHwgKHNhdmVfY29tbWFuZCAmIFBDSV9DT01NQU5EX0lPKSkpIHsKLQkJCQkJLyogSU8gYmFzZSAqLwotCQkJCQkvKiBzZXQgdGVtcF9yZWdpc3RlciA9IGFtb3VudCBvZiBJTyBzcGFjZSByZXF1ZXN0ZWQgKi8KLQkJCQkJYmFzZSA9IGJhc2UgJiAweEZGRkZGRkZDTDsKLQkJCQkJYmFzZSA9ICh+YmFzZSkgKyAxOwotCi0JCQkJCWlvX25vZGUgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IHBjaV9yZXNvdXJjZSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwotCQkJCQlpZiAoIWlvX25vZGUpCi0JCQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJCQlpb19ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQkJCQkJaW9fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCWRiZygic3VyIGFkYXB0ZXI6IElPIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCWlvX25vZGUtPmJhc2UsIGlvX25vZGUtPmxlbmd0aCk7Ci0KLQkJCQkJaW9fbm9kZS0+bmV4dCA9IGZ1bmMtPmlvX2hlYWQ7Ci0JCQkJCWZ1bmMtPmlvX2hlYWQgPSBpb19ub2RlOwotCQkJCX0gZWxzZSB7ICAvKiBtYXAgTWVtb3J5ICovCi0JCQkJCWludCBwcmVmZXRjaGFibGUgPSAxOwotCQkJCQkvKiBzdHJ1Y3QgcGNpX3Jlc291cmNlcyAqKnJlc19ub2RlOyAqLwotCQkJCQljaGFyICpyZXNfdHlwZV9zdHIgPSAiUE1FTSI7Ci0JCQkJCXUzMiB0ZW1wX3JlZ2lzdGVyMjsKLQotCQkJCQl0X21lbV9ub2RlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpLAotCQkJCQkJCQlHRlBfS0VSTkVMKTsKLQkJCQkJaWYgKCF0X21lbV9ub2RlKQotCQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJCQkJaWYgKCEoYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIKSAmJgotCQkJCQkJCSghZGlzYWJsZSB8fCAoc2F2ZV9jb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSkpIHsKLQkJCQkJCXByZWZldGNoYWJsZSA9IDA7Ci0JCQkJCQltZW1fbm9kZSA9IHRfbWVtX25vZGU7Ci0JCQkJCQlyZXNfdHlwZV9zdHIrKzsKLQkJCQkJfSBlbHNlCi0JCQkJCQlwX21lbV9ub2RlID0gdF9tZW1fbm9kZTsKLQotCQkJCQliYXNlID0gYmFzZSAmIDB4RkZGRkZGRjBMOwotCQkJCQliYXNlID0gKH5iYXNlKSArIDE7Ci0KLQkJCQkJc3dpdGNoICh0ZW1wX3JlZ2lzdGVyICYgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV9NQVNLKSB7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV8zMjoKLQkJCQkJCWlmIChwcmVmZXRjaGFibGUpIHsKLQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoID0gKHVsb25nKWJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogMzIgJXMgYmFyPTB4JXgobGVuZ3RoPTB4JXgpXG4iLAotCQkJCQkJCQlyZXNfdHlwZV9zdHIsIAotCQkJCQkJCQlwX21lbV9ub2RlLT5iYXNlLAotCQkJCQkJCQlwX21lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJcF9tZW1fbm9kZS0+bmV4dCA9IGZ1bmMtPnBfbWVtX2hlYWQ7Ci0JCQkJCQkJZnVuYy0+cF9tZW1faGVhZCA9IHBfbWVtX25vZGU7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCW1lbV9ub2RlLT5iYXNlID0gKHVsb25nKXNhdmVfYmFzZSAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9ICh1bG9uZyliYXNlOwotCQkJCQkJCWRiZygic3VyIGFkYXB0ZXI6IDMyICVzIGJhcj0weCV4KGxlbmd0aD0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgUENJX0JBU0VfQUREUkVTU19NRU1fVFlQRV82NDoKLQkJCQkJCXBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQocGNpX2J1cywgZGV2Zm4sIGNsb29wKzQsICZ0ZW1wX3JlZ2lzdGVyMik7Ci0JCQkJCQliYXNlNjQgPSB0ZW1wX3JlZ2lzdGVyMjsKLQkJCQkJCWJhc2U2NCA9IChiYXNlNjQgPDwgMzIpIHwgc2F2ZV9iYXNlOwotCi0JCQkJCQlpZiAodGVtcF9yZWdpc3RlcjIpIHsKLQkJCQkJCQlkYmcoInN1ciBhZGFwdGVyOiA2NCAlcyBoaWdoIGR3b3JkIG9mIGJhc2U2NCgweCV4OiV4KSBtYXNrZWQgdG8gMFxuIiwgCi0JCQkJCQkJCXJlc190eXBlX3N0ciwgdGVtcF9yZWdpc3RlcjIsICh1MzIpYmFzZTY0KTsKLQkJCQkJCQliYXNlNjQgJj0gMHgwMDAwMDAwMEZGRkZGRkZGTDsKLQkJCQkJCX0KLQotCQkJCQkJaWYgKHByZWZldGNoYWJsZSkgewotCQkJCQkJCXBfbWVtX25vZGUtPmJhc2UgPSBiYXNlNjQgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwotCQkJCQkJCXBfbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJcF9tZW1fbm9kZS0+YmFzZSwKLQkJCQkJCQkJcF9tZW1fbm9kZS0+bGVuZ3RoKTsKLQotCQkJCQkJCXBfbWVtX25vZGUtPm5leHQgPSBmdW5jLT5wX21lbV9oZWFkOwotCQkJCQkJCWZ1bmMtPnBfbWVtX2hlYWQgPSBwX21lbV9ub2RlOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQltZW1fbm9kZS0+YmFzZSA9IGJhc2U2NCAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0JCQkJCQkJbWVtX25vZGUtPmxlbmd0aCA9IGJhc2U7Ci0JCQkJCQkJZGJnKCJzdXIgYWRhcHRlcjogNjQgJXMgYmFzZT0weCV4KGxlbj0weCV4KVxuIiwKLQkJCQkJCQkJcmVzX3R5cGVfc3RyLCAKLQkJCQkJCQkJbWVtX25vZGUtPmJhc2UsCi0JCQkJCQkJCW1lbV9ub2RlLT5sZW5ndGgpOwotCi0JCQkJCQkJbWVtX25vZGUtPm5leHQgPSBmdW5jLT5tZW1faGVhZDsKLQkJCQkJCQlmdW5jLT5tZW1faGVhZCA9IG1lbV9ub2RlOwotCQkJCQkJfQotCQkJCQkJY2xvb3AgKz0gNDsKLQkJCQkJCWJyZWFrOwotCQkJCQlkZWZhdWx0OgotCQkJCQkJZGJnKCJhc3VyOiByZXNlcnZlZCBCQVIgdHlwZT0weCV4XG4iLAotCQkJCQkJCXRlbXBfcmVnaXN0ZXIpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9IAotCQkJfQkvKiBFbmQgb2YgYmFzZSByZWdpc3RlciBsb29wICovCi0JCX0gZWxzZSB7CS8qIFNvbWUgb3RoZXIgdW5rbm93biBoZWFkZXIgdHlwZSAqLwotCQkJZGJnKCJTYXZlX3VzZWRfcmVzIG9mIFBDSSB1bmtub3duIHR5cGUgYjpkPTB4JXg6JXguIHNraXAuXG4iLAotCQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSk7Ci0JCX0KLQotCQkvKiBmaW5kIHRoZSBuZXh0IGRldmljZSBpbiB0aGlzIHNsb3QgKi8KLQkJaWYgKCFkaXNhYmxlKQotCQkJYnJlYWs7Ci0JCWZ1bmMgPSBwY2llaHBfc2xvdF9maW5kKGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBpbmRleCsrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKioKLSAqIGtmcmVlX3Jlc291cmNlX2xpc3Q6IHJlbGVhc2UgbWVtb3J5IG9mIGFsbCBsaXN0IG1lbWJlcnMKLSAqIEByZXM6IHJlc291cmNlIGxpc3QgdG8gZnJlZQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJldHVybl9yZXNvdXJjZV9saXN0KHN0cnVjdCBwY2lfcmVzb3VyY2UgKipmdW5jLCBzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcmVzKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm5vZGU7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdF9ub2RlOwotCi0Jbm9kZSA9ICpmdW5jOwotCSpmdW5jID0gTlVMTDsKLQl3aGlsZSAobm9kZSkgewotCQl0X25vZGUgPSBub2RlLT5uZXh0OwotCQlyZXR1cm5fcmVzb3VyY2UocmVzLCBub2RlKTsKLQkJbm9kZSA9IHRfbm9kZTsKLQl9Ci19Ci0KLS8qCi0gKiBwY2llaHBfcmV0dXJuX2JvYXJkX3Jlc291cmNlcwotICoKLSAqIHRoaXMgcm91dGluZSByZXR1cm5zIGFsbCByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgYm9hcmQgdG8KLSAqIHRoZSBhdmFpbGFibGUgcG9vbC4KLSAqCi0gKiByZXR1cm5zIDAgaWYgc3VjY2VzcwotICovCi1pbnQgcGNpZWhwX3JldHVybl9ib2FyZF9yZXNvdXJjZXMoc3RydWN0IHBjaV9mdW5jICogZnVuYywKLQkJCQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0JaW50IHJjOwotCi0JZGJnKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQotCWlmICghZnVuYykKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm5fcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpLCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5tZW1faGVhZCksJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0JcmV0dXJuX3Jlc291cmNlX2xpc3QoJihmdW5jLT5wX21lbV9oZWFkKSwmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJldHVybl9yZXNvdXJjZV9saXN0KCYoZnVuYy0+YnVzX2hlYWQpLCYocmVzb3VyY2VzLT5idXNfaGVhZCkpOwotCi0JcmMgPSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+bWVtX2hlYWQpKTsKLQlyYyB8PSBwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCXJjIHw9IHBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCYocmVzb3VyY2VzLT5pb19oZWFkKSk7Ci0JcmMgfD0gcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICoga2ZyZWVfcmVzb3VyY2VfbGlzdDogcmVsZWFzZSBtZW1vcnkgb2YgYWxsIGxpc3QgbWVtYmVycwotICogQHJlczogcmVzb3VyY2UgbGlzdCB0byBmcmVlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAota2ZyZWVfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcGNpX3Jlc291cmNlICoqcikKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXMsICp0cmVzOwotCi0JcmVzID0gKnI7Ci0JKnIgPSBOVUxMOwotCi0Jd2hpbGUgKHJlcykgewotCQl0cmVzID0gcmVzOwotCQlyZXMgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHRyZXMpOwotCX0KLX0KLQotLyoqCi0gKiBwY2llaHBfZGVzdHJveV9yZXNvdXJjZV9saXN0OiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgcmVzb3VyY2VfbGlzdHMgKiByZXNvdXJjZXMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+aW9faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPm1lbV9oZWFkKSk7Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKHJlc291cmNlcy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihyZXNvdXJjZXMtPmJ1c19oZWFkKSk7Ci19Ci0KLS8qKgotICogcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzOiBwdXQgbm9kZSBiYWNrIGluIHRoZSByZXNvdXJjZSBsaXN0Ci0gKiBAcmVzb3VyY2VzOiBsaXN0IHRvIHB1dCBub2RlcyBiYWNrCi0gKi8KLXZvaWQgcGNpZWhwX2Rlc3Ryb3lfYm9hcmRfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZnVuYyAqIGZ1bmMpCi17Ci0Ja2ZyZWVfcmVzb3VyY2VfbGlzdCgmKGZ1bmMtPmlvX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+bWVtX2hlYWQpKTsKLQlrZnJlZV9yZXNvdXJjZV9saXN0KCYoZnVuYy0+cF9tZW1faGVhZCkpOwotCWtmcmVlX3Jlc291cmNlX2xpc3QoJihmdW5jLT5idXNfaGVhZCkpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWYyMGZiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm0uaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSA6IFBDSUVIUCBSZXNvdXJjZSBNYW5hZ2VyIGZvciBBQ1BJL25vbi1BQ1BJIHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMyBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAxIElCTSBDb3JwLgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIG9yCi0gKiBOT04gSU5GUklOR0VNRU5ULiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQotICogZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPiwgPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KLSAqCi0gKi8KLQotI2lmbmRlZiBfUENJRUhQUk1fSF8KLSNkZWZpbmUgX1BDSUVIUFJNX0hfCi0KLSNpZmRlZglDT05GSUdfSE9UUExVR19QQ0lfUENJRV9QSFBSTV9OT05BQ1BJCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgotI2VuZGlmCi0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdCk7Ci12b2lkIHBjaWVocHJtX2NsZWFudXAodm9pZCk7Ci1pbnQgcGNpZWhwcm1fcHJpbnRfcGlydCh2b2lkKTsKLWludCBwY2llaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwotaW50IHBjaWVocHJtX3NldF9ocHAoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLXZvaWQgcGNpZWhwcm1fZW5hYmxlX2NhcmQoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsIHN0cnVjdCBwY2lfZnVuYyAqZnVuYywgdTggY2FyZF90eXBlKTsKLQotI2lmZGVmCURFQlVHCi0jZGVmaW5lIFJFU19DSEVDSyh0aGlzLCBiaXRzKQlcCi0JeyBpZiAoKCh0aGlzKSAmIChiaXRzIC0gMSkpKSBcCi0JCXByaW50aygiJXM6JWQgRVJSOiBwb3RlbnRpYWwgcmVzIGxvc3MhXG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsgfQotI2Vsc2UKLSNkZWZpbmUgUkVTX0NIRUNLKHRoaXMsIGJpdHMpCi0jZW5kaWYKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9hY3BpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwppbmRleCAxNDA2ZGIzLi5hZTI0NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX2FjcGkuYwpAQCAtMjQsMTAwICsyNCwyMCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgotI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaWZkZWYJQ09ORklHX0lBNjQKLSNpbmNsdWRlIDxhc20vaW9zYXBpYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8YWNwaS9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0KLSNkZWZpbmUJUENJX01BWF9CVVMJCTB4MTAwCi0jZGVmaW5lCUFDUElfU1RBX0RFVklDRV9QUkVTRU5UCTB4MDEKIAogI2RlZmluZQlNRVRIT0RfTkFNRV9fU1VOCSJfU1VOIgogI2RlZmluZQlNRVRIT0RfTkFNRV9fSFBQCSJfSFBQIgogI2RlZmluZQlNRVRIT0RfTkFNRV9PU0hQCSJPU0hQIgogCi0vKiBTdGF0dXMgY29kZSBmb3IgcnVubmluZyBhY3BpIG1ldGhvZCB0byBnYWluIG5hdGl2ZSBjb250cm9sICovCi0jZGVmaW5lIE5DX05PVF9SVU4JMAotI2RlZmluZSBPU0NfTk9UX0VYSVNUCTEKLSNkZWZpbmUgT1NDX1JVTl9GQUlMRUQJMgotI2RlZmluZSBPU0hQX05PVF9FWElTVAkzCi0jZGVmaW5lIE9TSFBfUlVOX0ZBSUxFRAk0Ci0jZGVmaW5lIE5DX1JVTl9TVUNDRVNTCTUKLQotI2RlZmluZQlQSFBfUkVTX0JVUwkJMHhBMAotI2RlZmluZQlQSFBfUkVTX0lPCQkweEExCi0jZGVmaW5lCVBIUF9SRVNfTUVNCQkweEEyCi0jZGVmaW5lCVBIUF9SRVNfUE1FTQkJMHhBMwotCi0jZGVmaW5lCUJSSURHRV9UWVBFX1AyUAkJMHgwMAotI2RlZmluZQlCUklER0VfVFlQRV9IT1NUCTB4MDEKLQotLyogdGhpcyBzaG91bGQgZ28gdG8gZHJpdmVycy9hY3BpL2luY2x1ZGUvICovCi1zdHJ1Y3QgYWNwaV9faHBwIHsKLQl1OAljYWNoZV9saW5lX3NpemU7Ci0JdTgJbGF0ZW5jeV90aW1lcjsKLQl1OAllbmFibGVfc2VycjsKLQl1OAllbmFibGVfcGVycjsKLX07Ci0KLXN0cnVjdCBhY3BpX3BocF9zbG90IHsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqbmV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmJyaWRnZTsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50CXNlZzsKLQlpbnQJYnVzOwotCWludAlkZXY7Ci0JaW50CWZ1bjsKLQl1MzIJc3VuOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKm1lbV9oZWFkOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnBfbWVtX2hlYWQ7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqaW9faGVhZDsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpidXNfaGVhZDsKLQl2b2lkCSpzbG90X29wczsJLyogX1NUQSwgX0VKeCwgZXRjICovCi0Jc3RydWN0IHNsb3QgKnNsb3Q7Ci19OwkJLyogcGVyIGZ1bmMgKi8KLQotc3RydWN0IGFjcGlfYnJpZGdlIHsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhcmVudDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKm5leHQ7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjaGlsZDsKLQlhY3BpX2hhbmRsZQloYW5kbGU7Ci0JaW50IHNlZzsKLQlpbnQgcGJ1czsJCQkvKiBwZGV2LT5idXMtPm51bWJlcgkJKi8KLQlpbnQgcGRldmljZTsJCQkvKiBQQ0lfU0xPVChwZGV2LT5kZXZmbikJKi8KLQlpbnQgcGZ1bmN0aW9uOwkJCS8qIFBDSV9ERVZGTihwZGV2LT5kZXZmbikJKi8KLQlpbnQgYnVzOwkJCS8qIHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIJKi8KLQlzdHJ1Y3QgYWNwaV9faHBwCQkqX2hwcDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqc2xvdHM7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRtZW1faGVhZDsJLyogdG90YWwgZnJvbSBjcnMJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqdHBfbWVtX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKnRpb19oZWFkOwkvKiB0b3RhbCBmcm9tIGNycwkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSp0YnVzX2hlYWQ7CS8qIHRvdGFsIGZyb20gY3JzCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKm1lbV9oZWFkOwkvKiBhdmFpbGFibGUJKi8KLQlzdHJ1Y3QgcGNpX3Jlc291cmNlIAkqcF9tZW1faGVhZDsJLyogYXZhaWxhYmxlCSovCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAJKmlvX2hlYWQ7CS8qIGF2YWlsYWJsZQkqLwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgCSpidXNfaGVhZDsJLyogYXZhaWxhYmxlCSovCi0JaW50IHNjYW5uZWQ7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICphY3BpX2JyaWRnZXNfaGVhZDsKLQogc3RhdGljIHU4ICogYWNwaV9wYXRoX25hbWUoIGFjcGlfaGFuZGxlCWhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwpAQCAtMTMzLDg1ICs1Myw0MyBAQAogCQlyZXR1cm4gcGF0aF9uYW1lOwkKIH0KIAotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpOwotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYik7Ci1zdGF0aWMgaW50IG9zY19ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLXN0YXRpYyBpbnQgb3NocF9ydW5fc3RhdHVzID0gTkNfTk9UX1JVTjsKLQotc3RhdGljIGludCBhY3BpX2FkZF9zbG90X3RvX3BocF9zbG90cygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCWludAkJCWJ1c19udW0sCi0JYWNwaV9oYW5kbGUJCWhhbmRsZSwKLQl1MzIJCQlhZHIsCi0JdTMyCQkJc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHM7Ci0Jc3RhdGljIGxvbmcJc2FtZXN1biA9IC0xOwotCi0JYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9waHBfc2xvdCksIEdGUF9LRVJORUwpOwotCWlmICghYXBzKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciBhcHMgZmFpbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JbWVtc2V0KGFwcywgMCwgc2l6ZW9mKHN0cnVjdCBhY3BpX3BocF9zbG90KSk7Ci0KLQlhcHMtPmhhbmRsZSA9IGhhbmRsZTsKLQlhcHMtPmJ1cyA9IGJ1c19udW07Ci0JYXBzLT5kZXYgPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlhcHMtPmZ1biA9IGFkciAmIDB4ZmZmZjsKLQlhcHMtPnN1biA9IHN1bjsKLQotCWFwcy0+bmV4dCA9IGFiLT5zbG90czsJLyogY2xpbmcgdG8gdGhlIGJyaWRnZSAqLwotCWFwcy0+YnJpZGdlID0gYWI7Ci0JYWItPnNsb3RzID0gYXBzOwotCi0JYWItPnNjYW5uZWQgKz0gMTsKLQlpZiAoIWFiLT5faHBwKQotCQlhY3BpX2dldF9faHBwKGFiKTsKLQkKLQlpZiAob3NjX3J1bl9zdGF0dXMgPT0gT1NDX05PVF9FWElTVCkKLQkJb3NocF9ydW5fc3RhdHVzID0gYWNwaV9ydW5fb3NocChhYik7Ci0KLQlpZiAoc3VuICE9IHNhbWVzdW4pIHsKLQkJaW5mbygiYWNwaV9wY2llaHBybTogICBTbG90IHN1bigleCkgYXQgczpiOmQ6Zj0weCUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIAotCQkJYXBzLT5zdW4sIGFiLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCQlzYW1lc3VuID0gc3VuOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9nZXRfX2hwcCAoIHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfcnVuX2hwcChhY3BpX2hhbmRsZSBoYW5kbGUsIHN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCWFjcGlfc3RhdHVzCQlzdGF0dXM7CiAJdTgJCQludWlbNF07CiAJc3RydWN0IGFjcGlfYnVmZmVyCXJldF9idWYgPSB7IDAsIE5VTEx9OwogCXVuaW9uIGFjcGlfb2JqZWN0CSpleHRfb2JqLCAqcGFja2FnZTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKKwl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwogCWludAkJCWksIGxlbiA9IDA7CiAKIAkvKiBnZXQgX2hwcCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKIAlzd2l0Y2ggKHN0YXR1cykgewogCWNhc2UgQUVfQlVGRkVSX09WRVJGTE9XOgogCQlyZXRfYnVmLnBvaW50ZXIgPSBrbWFsbG9jIChyZXRfYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcmV0X2J1Zi5wb2ludGVyKSB7Ci0JCQllcnIgKCJhY3BpX3BjaWVocHJtOiVzIGFsbG9jIGZvciBfSFBQIGZhaWxcbiIsIHBhdGhfbmFtZSk7Ci0JCQlyZXR1cm47CisJCQllcnIgKCIlczolcyBhbGxvYyBmb3IgX0hQUCBmYWlsXG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlyZXR1cm4gQUVfTk9fTUVNT1JZOwogCQl9Ci0JCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX19IUFAsIE5VTEwsICZyZXRfYnVmKTsKKwkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCBNRVRIT0RfTkFNRV9fSFBQLAorCQkJCU5VTEwsICZyZXRfYnVmKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKQogCQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybjsKKwkJCWRiZygiJXM6JXMgX0hQUCBmYWlsPTB4JXhcbiIsIF9fRlVOQ1RJT05fXywKKwkJCQkJcGF0aF9uYW1lLCBzdGF0dXMpOworCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KIAogCWV4dF9vYmogPSAodW5pb24gYWNwaV9vYmplY3QgKikgcmV0X2J1Zi5wb2ludGVyOwogCWlmIChleHRfb2JqLT50eXBlICE9IEFDUElfVFlQRV9QQUNLQUdFKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgcGF0aF9uYW1lKTsKKwkJZXJyICgiJXM6JXMgX0hQUCBvYmogbm90IGEgcGFja2FnZVxuIiwgX19GVU5DVElPTl9fLAorCQkJCXBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IEFFX0VSUk9SOwogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKQEAgLTIyNCwxNTE0ICsxMDIsMTUzIEBACiAJCQludWlbaV0gPSAodTgpZXh0X29iai0+aW50ZWdlci52YWx1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfSFBQIG9iaiB0eXBlIGluY29ycmVjdFxuIiwgcGF0aF9uYW1lKTsKKwkJCWVyciAoIiVzOiVzIF9IUFAgb2JqIHR5cGUgaW5jb3JyZWN0XG4iLCBfX0ZVTkNUSU9OX18sCisJCQkJCXBhdGhfbmFtZSk7CisJCQlzdGF0dXMgPSBBRV9FUlJPUjsKIAkJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCQl9CiAJfQogCi0JYWItPl9ocHAgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhY3BpX19ocHApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiLT5faHBwKSB7Ci0JCWVyciAoImFjcGlfcGNpZWhwcm06JXMgYWxsb2MgZm9yIF9IUFAgZmFpbGVkXG4iLCBwYXRoX25hbWUpOwotCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKLQl9Ci0JbWVtc2V0KGFiLT5faHBwLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfX2hwcCkpOworCWhwcC0+Y2FjaGVfbGluZV9zaXplID0gbnVpWzBdOworCWhwcC0+bGF0ZW5jeV90aW1lciA9IG51aVsxXTsKKwlocHAtPmVuYWJsZV9zZXJyID0gbnVpWzJdOworCWhwcC0+ZW5hYmxlX3BlcnIgPSBudWlbM107CiAKLQlhYi0+X2hwcC0+Y2FjaGVfbGluZV9zaXplCT0gbnVpWzBdOwotCWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyCQk9IG51aVsxXTsKLQlhYi0+X2hwcC0+ZW5hYmxlX3NlcnIJCT0gbnVpWzJdOwotCWFiLT5faHBwLT5lbmFibGVfcGVycgkJPSBudWlbM107Ci0KLQlkYmcoIiAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCWRiZygiICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQlkYmcoIiAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7CisJZGJnKCIgIF9IUFA6IGNhY2hlX2xpbmVfc2l6ZT0weCV4XG4iLCBocHAtPmNhY2hlX2xpbmVfc2l6ZSk7CisJZGJnKCIgIF9IUFA6IGxhdGVuY3kgdGltZXIgID0weCV4XG4iLCBocHAtPmxhdGVuY3lfdGltZXIpOworCWRiZygiICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgaHBwLT5lbmFibGVfc2Vycik7CisJZGJnKCIgIF9IUFA6IGVuYWJsZSBQRVJSICAgID0weCV4XG4iLCBocHAtPmVuYWJsZV9wZXJyKTsKIAogZnJlZV9hbmRfcmV0dXJuOgogCWtmcmVlKHJldF9idWYucG9pbnRlcik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBhY3BpX3J1bl9vc2hwICggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3J1bl9vc2hwKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpOworCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7CiAKIAkvKiBydW4gT1NIUCAqLwotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGFiLT5oYW5kbGUsIE1FVEhPRF9OQU1FX09TSFAsIE5VTEwsIE5VTEwpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTUVUSE9EX05BTUVfT1NIUCwgTlVMTCwgTlVMTCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBPU0hQIGZhaWxzPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJb3NocF9ydW5fc3RhdHVzID0gKHN0YXR1cyA9PSBBRV9OT1RfRk9VTkQpID8gT1NIUF9OT1RfRVhJU1QgOiBPU0hQX1JVTl9GQUlMRUQ7CisJCWRiZygiJXM6JXMgT1NIUCBmYWlscz0weCV4XG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSwKKwkJCQlzdGF0dXMpOwogCX0gZWxzZSB7Ci0JCW9zaHBfcnVuX3N0YXR1cyA9IE5DX1JVTl9TVUNDRVNTOwotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgT1NIUCBwYXNzZXMgPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiVzIG9zaHBfcnVuX3N0YXR1cyA9MHgleFxuIiwgcGF0aF9uYW1lLCBvc2hwX3J1bl9zdGF0dXMpOworCQlkYmcoIiVzOiVzIE9TSFAgcGFzc2VzXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGhfbmFtZSk7CiAJfQotCXJldHVybiBvc2hwX3J1bl9zdGF0dXM7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2V2YWx1YXRlX2NycygKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSoqcmV0YnVmCi0JKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyCWNyc2J1ZjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JY3JzYnVmLmxlbmd0aCAgPSAwOwotCWNyc2J1Zi5wb2ludGVyID0gTlVMTDsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2N1cnJlbnRfcmVzb3VyY2VzIChoYW5kbGUsICZjcnNidWYpOwotCi0Jc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIEFFX0JVRkZFUl9PVkVSRkxPVzoKLQkJYnJlYWs7CQkvKiBmb3VuZCAqLwotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlkYmcoImFjcGlfcGNpZWhwcm06JXMgX0NSUyBub3QgZm91bmRcbiIsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JZGVmYXVsdDoKLQkJZXJyICgiYWNwaV9wY2llaHBybTolcyBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWNyc2J1Zi5wb2ludGVyID0ga21hbGxvYyAoY3JzYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcnNidWYucG9pbnRlcikgewotCQllcnIgKCJhY3BpX3BjaWVocHJtOiBhbGxvYyAlbGQgYnl0ZXMgZm9yICVzIF9DUlMgZmFpbFxuIiwgKHVsb25nKWNyc2J1Zi5sZW5ndGgsIHBhdGhfbmFtZSk7Ci0JCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV9nZXRfY3VycmVudF9yZXNvdXJjZXMgKGhhbmRsZSwgJmNyc2J1Zik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogJXMgX0NSUyBmYWlsPTB4JXguXG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCWtmcmVlKGNyc2J1Zi5wb2ludGVyKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQkqcmV0YnVmID0gY3JzYnVmLnBvaW50ZXI7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX3BjaV9yZXNvdXJjZSAoIHN0cnVjdCBwY2lfcmVzb3VyY2UJKmFwcmgpCitzdGF0aWMgaW50IGlzX3Jvb3RfYnJpZGdlKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXMsICpuZXh0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwlpbnQgaTsKIAotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSBuZXh0KSB7Ci0JCW5leHQgPSByZXMtPm5leHQ7Ci0JCWtmcmVlKHJlcyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwcmludF9wY2lfcmVzb3VyY2UgKCBzdHJ1Y3QgcGNpX3Jlc291cmNlCSphcHJoKQotewotCXN0cnVjdCBwY2lfcmVzb3VyY2UJKnJlczsKLQotCWZvciAocmVzID0gYXByaDsgcmVzOyByZXMgPSByZXMtPm5leHQpCi0JCWRiZygiICAgICAgICBiYXNlPSAweCV4IGxlbmd0aD0gMHgleFxuIiwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3Nsb3RfcmVzb3VyY2VzKCBzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzKQotewotCWlmIChhcHMtPmJ1c19oZWFkKSB7Ci0JCWRiZygiICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPmJ1c19oZWFkKTsKLQl9Ci0KLQlpZiAoYXBzLT5pb19oZWFkKSB7Ci0JCWRiZygiICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+aW9faGVhZCk7Ci0JfQotCi0JaWYgKGFwcy0+bWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCX0KLQotCWlmIChhcHMtPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCIgICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlpZiAoYWItPnRidXNfaGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBCVVMgUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRidXNfaGVhZCk7Ci0JfQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCIgICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JfQotCi0JaWYgKGFiLT50aW9faGVhZCkgewotCQlkYmcoIiAgICBUb3RhbCBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dGlvX2hlYWQpOwotCX0KLQlpZiAoYWItPmlvX2hlYWQpIHsKLQkJZGJnKCIgICAgSU8gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPmlvX2hlYWQpOwotCX0KLQotCWlmIChhYi0+dG1lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5tZW1faGVhZCkgewotCQlkYmcoIiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPm1lbV9oZWFkKTsKLQl9Ci0KLQlpZiAoYWItPnRwX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFRvdGFsIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnRwX21lbV9oZWFkKTsKLQl9Ci0JaWYgKGFiLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiICAgIFBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCX0KLQlpZiAoYWItPl9ocHApIHsKLQkJZGJnKCIgICAgX0hQUDogY2FjaGVfbGluZV9zaXplPTB4JXhcbiIsIGFiLT5faHBwLT5jYWNoZV9saW5lX3NpemUpOwotCQlkYmcoIiAgICBfSFBQOiBsYXRlbmN5IHRpbWVyICA9MHgleFxuIiwgYWItPl9ocHAtPmxhdGVuY3lfdGltZXIpOwotCQlkYmcoIiAgICBfSFBQOiBlbmFibGUgU0VSUiAgICA9MHgleFxuIiwgYWItPl9ocHAtPmVuYWJsZV9zZXJyKTsKLQkJZGJnKCIgICAgX0hQUDogZW5hYmxlIFBFUlIgICAgPTB4JXhcbiIsIGFiLT5faHBwLT5lbmFibGVfcGVycik7Ci0JfQotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCi0JZm9yIChyZXMgPSB0aGlzOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKGFwcmgsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWRkX3Jlc291cmNlKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXVsb25nIGJhc2UsCi0JdWxvbmcgc2l6ZSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9ICphcHJoOyByZXM7IHJlcyA9IHJlcy0+bmV4dCkgewotCQlpZiAoKHJlcy0+YmFzZSArIHJlcy0+bGVuZ3RoKSA9PSBiYXNlKSB7Ci0JCQlyZXMtPmxlbmd0aCArPSBzaXplOwotCQkJc2l6ZSA9IDBMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJlcy0+bmV4dCA9PSAqYXByaCkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChzaXplKSB7Ci0JCXJlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyZXMpIHsKLQkJCWVyciAoImFjcGlfcGNpZWhwcm06IGFsbG9jIGZvciByZXMgZmFpbFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQltZW1zZXQocmVzLCAwLCBzaXplb2YgKHN0cnVjdCBwY2lfcmVzb3VyY2UpKTsKLQotCQlyZXMtPmJhc2UgPSBiYXNlOwotCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0JCXJlcy0+bmV4dCA9ICphcHJoOwotCQkqYXByaCA9IHJlczsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwY2llaHBybV9hZGRfcmVzb3VyY2VzKAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKiphcHJoLAotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnRoaXMKLQkpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCWludAlyYyA9IDA7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlcyAmJiAhcmM7IHJlcyA9IHJlcy0+bmV4dCkKLQkJcmMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfaW8gKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbwkqZGF0YWlvOwotCWRhdGFpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbyAqKSBkYXRhOwotCi0JZGJnKCJJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgICVkIGJpdCBkZWNvZGVcbiIsIEFDUElfREVDT0RFXzE2ID09IGRhdGFpby0+aW9fZGVjb2RlID8gMTY6MTApOwotCWRiZygiICBSYW5nZSBtaW5pbXVtIGJhc2U6ICUwOFhcbiIsIGRhdGFpby0+bWluX2Jhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIG1heGltdW0gYmFzZTogJTA4WFxuIiwgZGF0YWlvLT5tYXhfYmFzZV9hZGRyZXNzKTsKLQlkYmcoIiAgQWxpZ25tZW50OiAlMDhYXG4iLCBkYXRhaW8tPmFsaWdubWVudCk7Ci0JZGJnKCIgIFJhbmdlIExlbmd0aDogJTA4WFxuIiwgZGF0YWlvLT5yYW5nZV9sZW5ndGgpOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX3BhcnNlX2ZpeGVkX2lvICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YQotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAgKmRhdGFmaW87Ci0JZGF0YWZpbyA9IChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9maXhlZF9pbyAqKSBkYXRhOwotCi0JZGJnKCJGaXhlZCBJbyBSZXNvdXJjZVxuIik7Ci0JZGJnKCIgIFJhbmdlIGJhc2UgYWRkcmVzczogJTA4WCIsIGRhdGFmaW8tPmJhc2VfYWRkcmVzcyk7Ci0JZGJnKCIgIFJhbmdlIGxlbmd0aDogJTA4WCIsIGRhdGFmaW8tPnJhbmdlX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFjcGlfcGFyc2VfYWRkcmVzczE2XzMyICgKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXVuaW9uIGFjcGlfcmVzb3VyY2VfZGF0YQkqZGF0YSwKLQlhY3BpX3Jlc291cmNlX3R5cGUJaWQKLQkpCi17Ci0JLyogCi0JICogYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgPT0gYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIKLQkgKiBhY3BpX3Jlc291cmNlX2FkZHJlc3MxNiAqZGF0YTE2ID0gKGFjcGlfcmVzb3VyY2VfYWRkcmVzczE2ICopIGRhdGE7Ci0JICovCi0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICpkYXRhMzIgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczMyICopIGRhdGE7Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsICoqdHByaDsKLQotCWlmIChpZCA9PSBBQ1BJX1JTVFlQRV9BRERSRVNTMTYpCi0JCWRiZygiYWNwaV9wY2llaHBybToxNi1CaXQgQWRkcmVzcyBTcGFjZSBSZXNvdXJjZVxuIik7Ci0JZWxzZQotCQlkYmcoImFjcGlfcGNpZWhwcm06MzItQml0IEFkZHJlc3MgU3BhY2UgUmVzb3VyY2VcbiIpOwotCi0Jc3dpdGNoIChkYXRhMzItPnJlc291cmNlX3R5cGUpIHsKLQljYXNlIEFDUElfTUVNT1JZX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IE1lbW9yeSBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPm1lbV9oZWFkOwotCQl0cHJoID0gJmFiLT50bWVtX2hlYWQ7Ci0KLQkJc3dpdGNoIChkYXRhMzItPmF0dHJpYnV0ZS5tZW1vcnkuY2FjaGVfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fQ0FDSEVBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBOb25jYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0NBQ0hBQkxFX01FTU9SWToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBDYWNoZWFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1dSSVRFX0NPTUJJTklOR19NRU1PUlk6Ci0JCQlkYmcoIiAgVHlwZSBTcGVjaWZpYzogV3JpdGUtY29tYmluaW5nIG1lbW9yeVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9QUkVGRVRDSEFCTEVfTUVNT1JZOgotCQkJYXByaCA9ICZhYi0+cF9tZW1faGVhZDsKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBQcmVmZXRjaGFibGUgbWVtb3J5XG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIGNhY2hlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRiZygiICBUeXBlIFNwZWNpZmljOiBSZWFkJXNcbiIsIEFDUElfUkVBRF9XUklURV9NRU1PUlkgPT0gZGF0YTMyLT5hdHRyaWJ1dGUubWVtb3J5LnJlYWRfd3JpdGVfYXR0cmlidXRlID8gIi9Xcml0ZSI6IiBPbmx5Iik7Ci0JCWJyZWFrOwotCi0JY2FzZSBBQ1BJX0lPX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEkvTyBSYW5nZVxuIik7Ci0JCWFwcmggPSAmYWItPmlvX2hlYWQ7Ci0JCXRwcmggPSAmYWItPnRpb19oZWFkOwotCi0JCXN3aXRjaCAoZGF0YTMyLT5hdHRyaWJ1dGUuaW8ucmFuZ2VfYXR0cmlidXRlKSB7Ci0JCWNhc2UgQUNQSV9OT05fSVNBX09OTFlfUkFOR0VTOgotCQkJZGJnKCIgIFR5cGUgU3BlY2lmaWM6IE5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0lTQV9PTkxZX1JBTkdFUzoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX0VOVElSRV9SQU5HRToKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJU0EgYW5kIG5vbi1JU0EgSW8gQWRkcmVzc2VzXG4iKTsKLQkJCWJyZWFrOyAKLQkJZGVmYXVsdDoKLQkJCWRiZygiICBUeXBlIFNwZWNpZmljOiBJbnZhbGlkIHJhbmdlIGF0dHJpYnV0ZVxuIik7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgQUNQSV9CVVNfTlVNQkVSX1JBTkdFOiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEJ1cyBOdW1iZXIgUmFuZ2UoZml4ZWQpXG4iKTsKLQkJLyogZml4dXAgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSByZXN0IG9mIHBocCBkcml2ZXIgKi8KLQkJZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSsrOwotCQlkYXRhMzItPmFkZHJlc3NfbGVuZ3RoLS07Ci0JCWFwcmggPSAmYWItPmJ1c19oZWFkOwotCQl0cHJoID0gJmFiLT50YnVzX2hlYWQ7Ci0JCWJyZWFrOyAKLQlkZWZhdWx0OiAKLQkJZGJnKCIgIFJlc291cmNlIFR5cGU6IEludmFsaWQgcmVzb3VyY2UgdHlwZS4gRXhpdGluZy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZGJnKCIgIFJlc291cmNlICVzXG4iLCBBQ1BJX0NPTlNVTUVSID09IGRhdGEzMi0+cHJvZHVjZXJfY29uc3VtZXIgPyAiQ29uc3VtZXIiOiJQcm9kdWNlciIpOwotCWRiZygiICAlcyBkZWNvZGVcbiIsIEFDUElfU1VCX0RFQ09ERSA9PSBkYXRhMzItPmRlY29kZSA/ICJTdWJ0cmFjdGl2ZSI6IlBvc2l0aXZlIik7Ci0JZGJnKCIgIE1pbiBhZGRyZXNzIGlzICVzIGZpeGVkXG4iLCBBQ1BJX0FERFJFU1NfRklYRUQgPT0gZGF0YTMyLT5taW5fYWRkcmVzc19maXhlZCA/ICIiOiJub3QiKTsKLQlkYmcoIiAgTWF4IGFkZHJlc3MgaXMgJXMgZml4ZWRcbiIsIEFDUElfQUREUkVTU19GSVhFRCA9PSBkYXRhMzItPm1heF9hZGRyZXNzX2ZpeGVkID8gIiI6Im5vdCIpOwotCWRiZygiICBHcmFudWxhcml0eTogJTA4WFxuIiwgZGF0YTMyLT5ncmFudWxhcml0eSk7Ci0JZGJnKCIgIEFkZHJlc3MgcmFuZ2UgbWluOiAlMDhYXG4iLCBkYXRhMzItPm1pbl9hZGRyZXNzX3JhbmdlKTsKLQlkYmcoIiAgQWRkcmVzcyByYW5nZSBtYXg6ICUwOFhcbiIsIGRhdGEzMi0+bWF4X2FkZHJlc3NfcmFuZ2UpOwotCWRiZygiICBBZGRyZXNzIHRyYW5zbGF0aW9uIG9mZnNldDogJTA4WFxuIiwgZGF0YTMyLT5hZGRyZXNzX3RyYW5zbGF0aW9uX29mZnNldCk7Ci0JZGJnKCIgIEFkZHJlc3MgTGVuZ3RoOiAlMDhYXG4iLCBkYXRhMzItPmFkZHJlc3NfbGVuZ3RoKTsKLQotCWlmICgweEZGICE9IGRhdGEzMi0+cmVzb3VyY2Vfc291cmNlLmluZGV4KSB7Ci0JCWRiZygiICBSZXNvdXJjZSBTb3VyY2UgSW5kZXg6ICVYXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5pbmRleCk7Ci0JCS8qIGRiZygiICBSZXNvdXJjZSBTb3VyY2U6ICVzXG4iLCBkYXRhMzItPnJlc291cmNlX3NvdXJjZS5zdHJpbmdfcHRyKTsgKi8KLQl9Ci0KLQlwY2llaHBybV9hZGRfcmVzb3VyY2UoYXByaCwgZGF0YTMyLT5taW5fYWRkcmVzc19yYW5nZSwgZGF0YTMyLT5hZGRyZXNzX2xlbmd0aCk7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX3BhcnNlX2NycygKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiLAotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpjcnNidWYKLQkpCi17Ci0JYWNwaV9zdGF0dXMJCXN0YXR1cyA9IEFFX09LOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlCSpyZXNvdXJjZSA9IGNyc2J1ZjsKLQl1OAkJCQljb3VudCA9IDA7Ci0JdTgJCQkJZG9uZSA9IDA7Ci0KLQl3aGlsZSAoIWRvbmUpIHsKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBQQ0kgYnVzIDB4JXggUmVzb3VyY2Ugc3RydWN0dXJlICV4LlxuIiwgYWItPmJ1cywgY291bnQrKyk7Ci0JCXN3aXRjaCAocmVzb3VyY2UtPmlkKSB7Ci0JCWNhc2UgQUNQSV9SU1RZUEVfSVJROgotCQkJZGJnKCJJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0RNQToKLQkJCWRiZygiRE1BIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9TVEFSVF9EUEY6Ci0JCQlkYmcoIlN0YXJ0IERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfRU5EX0RQRjoKLQkJCWRiZygiRW5kIERQRiAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfSU86Ci0JCQlhY3BpX3BhcnNlX2lvIChhYiwgJnJlc291cmNlLT5kYXRhKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9JTzoKLQkJCWFjcGlfcGFyc2VfZml4ZWRfaW8gKGFiLCAmcmVzb3VyY2UtPmRhdGEpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX1ZFTkRPUjoKLQkJCWRiZygiVmVuZG9yIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9FTkRfVEFHOgotCQkJZGJnKCJFbmRfdGFnIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWRvbmUgPSAxOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX01FTTI0OgotCQkJZGJnKCJNZW0yNCAtLS0tLS0tLSBSZXNvdXJjZVxuIik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfTUVNMzI6Ci0JCQlkYmcoIk1lbTMyIC0tLS0tLS0tIFJlc291cmNlXG4iKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9GSVhFRF9NRU0zMjoKLQkJCWRiZygiRml4ZWQgTWVtMzIgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0FERFJFU1MxNjoKLQkJCWFjcGlfcGFyc2VfYWRkcmVzczE2XzMyKGFiLCAmcmVzb3VyY2UtPmRhdGEsIEFDUElfUlNUWVBFX0FERFJFU1MxNik7Ci0JCQlicmVhazsgCi0JCWNhc2UgQUNQSV9SU1RZUEVfQUREUkVTUzMyOgotCQkJYWNwaV9wYXJzZV9hZGRyZXNzMTZfMzIoYWIsICZyZXNvdXJjZS0+ZGF0YSwgQUNQSV9SU1RZUEVfQUREUkVTUzMyKTsKLQkJCWJyZWFrOyAKLQkJY2FzZSBBQ1BJX1JTVFlQRV9BRERSRVNTNjQ6Ci0JCQlpbmZvKCJBZGRyZXNzNjQgLS0tLS0tLS0gUmVzb3VyY2UgdW5wYXJzZWRcbiIpOwotCQkJYnJlYWs7IAotCQljYXNlIEFDUElfUlNUWVBFX0VYVF9JUlE6Ci0JCQlkYmcoIkV4dCBJcnEgLS0tLS0tLS0gUmVzb3VyY2VcbiIpOwotCQkJYnJlYWs7IAotCQlkZWZhdWx0OgotCQkJZGJnKCJJbnZhbGlkIC0tLS0tLS0tIHJlc291cmNlIHR5cGUgMHgleFxuIiwgcmVzb3VyY2UtPmlkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcmVzb3VyY2UgPSAoc3RydWN0IGFjcGlfcmVzb3VyY2UgKikgKChjaGFyICopcmVzb3VyY2UgKyByZXNvdXJjZS0+bGVuZ3RoKTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9nZXRfY3JzKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2UJKmNyc2J1ZjsKLQotCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfY3JzKGFiLT5oYW5kbGUsICZjcnNidWYpOworCXN0YXR1cyA9IGFjcGlfZ2V0X29iamVjdF9pbmZvKGhhbmRsZSwgJmJ1ZmZlcik7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7Ci0JCXN0YXR1cyA9IGFjcGlfcGFyc2VfY3JzKGFiLCBjcnNidWYpOwotCQlrZnJlZShjcnNidWYpOwotCi0JCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPmlvX2hlYWQpOwotCQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZSgmYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRidXNfaGVhZCwgYWItPmJ1c19oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50aW9faGVhZCwgYWItPmlvX2hlYWQpOwotCQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQkJcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmFiLT50cF9tZW1faGVhZCwgYWItPnBfbWVtX2hlYWQpOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIGZpbmQgYWNwaV9icmlkZ2UgZG93bndvcmQgZnJvbSBhYi4gICovCi1zdGF0aWMgc3RydWN0IGFjcGlfYnJpZGdlICoKLWZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIsCi0JaW50IHNlZywKLQlpbnQgYnVzCQkvKiBwZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyICovCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiID0gTlVMTDsKLQotCWlmICghYWIpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKChhYi0+YnVzID09IGJ1cykgJiYgKGFiLT5zZWcgPT0gc2VnKSkKLQkJcmV0dXJuIGFiOwotCi0JaWYgKGFiLT5jaGlsZCkKLQkJbGFiID0gZmluZF9hY3BpX2JyaWRnZV9ieV9idXMoYWItPmNoaWxkLCBzZWcsIGJ1cyk7Ci0KLQlpZiAoIWxhYikKLQlpZiAoYWItPm5leHQpCi0JCWxhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFiLT5uZXh0LCBzZWcsIGJ1cyk7Ci0KLQlyZXR1cm4gbGFiOwotfQotCi0vKgotICogQnVpbGQgYSBkZXZpY2UgdHJlZSBvZiBBQ1BJIFBDSSBCcmlkZ2VzCi0gKi8KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2FjcGlfcmVnaXN0ZXJfYV9icmlkZ2UgKAotCXN0cnVjdCBhY3BpX2JyaWRnZQkqKmhlYWQsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCS8qIHBhcmVudCBicmlkZ2UgdG8gd2hpY2ggY2hpbGQgYnJpZGdlIGlzIGFkZGVkICovCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpjYWIJLyogY2hpbGQgYnJpZGdlIHRvIGFkZCAqLwotCSkKLXsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmxwYWI7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpsY2FiOwotCi0JbHBhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKCpoZWFkLCBwYWItPnNlZywgcGFiLT5idXMpOwotCWlmICghbHBhYikgewotCQlpZiAoIShwYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSkKLQkJCXdhcm4oIlBDSSBwYXJlbnQgYnJpZGdlIHM6YigleDoleCkgbm90IGluIGxpc3QuXG4iLCBwYWItPnNlZywgcGFiLT5idXMpOwotCQlwYWItPm5leHQgPSAqaGVhZDsKLQkJKmhlYWQgPSBwYWI7Ci0JCWxwYWIgPSBwYWI7Ci0JfQotCi0JaWYgKChjYWItPnR5cGUgJiBCUklER0VfVFlQRV9IT1NUKSAmJiAocGFiID09IGNhYikpCi0JCXJldHVybjsKLQotCWxjYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cygqaGVhZCwgY2FiLT5zZWcsIGNhYi0+YnVzKTsKLQlpZiAobGNhYikgewotCQlpZiAoKHBhYi0+YnVzICE9IGxjYWItPnBhcmVudC0+YnVzKSB8fCAobGNhYi0+YnVzICE9IGNhYi0+YnVzKSkKLQkJCWVycigiUENJIGNoaWxkIGJyaWRnZSBzOmIoJXg6JXgpIGluIGxpc3Qgd2l0aCBkaWZmIHBhcmVudC5cbiIsIGNhYi0+c2VnLCBjYWItPmJ1cyk7Ci0JCXJldHVybjsKLQl9IGVsc2UKLQkJbGNhYiA9IGNhYjsKLQotCWxjYWItPnBhcmVudCA9IGxwYWI7Ci0JbGNhYi0+bmV4dCA9IGxwYWItPmNoaWxkOwotCWxwYWItPmNoaWxkID0gbGNhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzX2NhbGxiYWNrKAotCWFjcGlfaGFuZGxlCQloYW5kbGUsCi0JdTMyCQkJTGV2ZWwsCi0Jdm9pZAkJCSpjb250ZXh0LAotCXZvaWQJCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJYnVzX251bTsKLQl1bG9uZwkJc2VnX251bTsKLQl1bG9uZwkJc3VuLCBhZHI7Ci0JdWxvbmcJCXBhZHIgPSAwOwotCWFjcGlfaGFuZGxlCQlwaGFuZGxlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiA9IChzdHJ1Y3QgYWNwaV9icmlkZ2UgKiljb250ZXh0OwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqbGFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBfU1VOICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NVTiwgTlVMTCwgJnN1bik7Ci0Jc3dpdGNoKHN0YXR1cykgewotCWNhc2UgQUVfTk9UX0ZPVU5EOgotCQlyZXR1cm4gQUVfT0s7Ci0JZGVmYXVsdDoKLQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX1NVTiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCWluZm8gPSBidWZmZXIucG9pbnRlcjsKKwkJaWYgKChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKSAmJgorCQkJIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5oYXJkd2FyZV9pZC52YWx1ZSkpIHsKKwkJCWFjcGlfb3NfZnJlZShidWZmZXIucG9pbnRlcik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAoaW5mby0+dmFsaWQgJiBBQ1BJX1ZBTElEX0NJRCkgeworCQkJZm9yIChpPTA7IGkgPCBpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmNvdW50OyBpKyspIHsKKwkJCQlpZiAoIXN0cmNtcChQQ0lfUk9PVF9ISURfU1RSSU5HLAorCQkJCQlpbmZvLT5jb21wYXRpYmlsaXR5X2lkLmlkW2ldLnZhbHVlKSkgeworCQkJCQlhY3BpX29zX2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCQkJCQlyZXR1cm4gMTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9Ci0KLQkvKiBnZXQgX0FEUi4gX0FEUiBtdXN0IGV4aXN0IGlmIF9TVU4gZXhpc3RzICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gc3RhdHVzOwotCX0KLQotCWRiZygiYWNwaV9wY2llaHBybTolcyBzdW49MHglMDh4IGFkcj0weCUwOHhcbiIsIHBhdGhfbmFtZSwgKHUzMilzdW4sICh1MzIpYWRyKTsKLQotCXN0YXR1cyA9IGFjcGlfZ2V0X3BhcmVudChoYW5kbGUsICZwaGFuZGxlKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJZXJyKCJhY3BpX3BjaWVocHJtOiVzIGdldF9wYXJlbnQgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIHN0YXR1cyk7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQlidXNfbnVtID0gcGFiLT5idXM7Ci0Jc2VnX251bSA9IHBhYi0+c2VnOwotCi0JaWYgKHBhYi0+YnVzID09IGJ1c19udW0pIHsKLQkJbGFiID0gcGFiOwotCX0gZWxzZSB7Ci0JCWRiZygiV0FSTjogcGFiIGlzIG5vdCBwYXJlbnRcbiIpOwotCQlsYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhwYWIsIHNlZ19udW0sIGJ1c19udW0pOwotCQlpZiAoIWxhYikgewotCQkJZGJnKCJhY3BpX3BjaWVocHJtOiBhbGxvYyBuZXcgUDJQIGJyaWRnZSgleCkgZm9yIHN1biglMDh4KVxuIiwgKHUzMilidXNfbnVtLCAodTMyKXN1bik7Ci0JCQlsYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWxhYikgewotCQkJCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQkJCXJldHVybiBBRV9OT19NRU1PUlk7Ci0JCQl9Ci0JCQltZW1zZXQobGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQkJCWxhYi0+aGFuZGxlID0gcGhhbmRsZTsKLQkJCWxhYi0+cGJ1cyA9IHBhYi0+YnVzOwotCQkJbGFiLT5wZGV2aWNlID0gKGludCkocGFkciA+PiAxNikgJiAweGZmZmY7Ci0JCQlsYWItPnBmdW5jdGlvbiA9IChpbnQpKHBhZHIgJiAweGZmZmYpOwotCQkJbGFiLT5idXMgPSAoaW50KWJ1c19udW07Ci0JCQlsYWItPnNjYW5uZWQgPSAwOwotCQkJbGFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JCQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgbGFiKTsKLQkJfSBlbHNlCi0JCQlkYmcoImFjcGlfcGNpZWhwcm06IGZvdW5kIFAyUCBicmlkZ2UoJXgpIGZvciBzdW4oJTA4eClcbiIsICh1MzIpYnVzX251bSwgKHUzMilzdW4pOwotCX0KLQotCWFjcGlfYWRkX3Nsb3RfdG9fcGhwX3Nsb3RzKGxhYiwgKGludClidXNfbnVtLCBoYW5kbGUsICh1MzIpYWRyLCAodTMyKXN1bik7Ci0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9idWlsZF9waHBfc2xvdHMoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQl1MzIJCQlkZXB0aAotCSkKLXsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7Ci0JdTgJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShhYi0+aGFuZGxlKTsKLQotCS8qIFdhbGsgZG93biB0aGlzIHBjaSBicmlkZ2UgdG8gZ2V0IF9TVU5zIGlmIGFueSBiZWhpbmQgUDJQICovCi0Jc3RhdHVzID0gYWNwaV93YWxrX25hbWVzcGFjZSAoIEFDUElfVFlQRV9ERVZJQ0UsCi0JCQkJYWItPmhhbmRsZSwKLQkJCQlkZXB0aCwKLQkJCQlwY2llaHBybV9hY3BpX2J1aWxkX3BocF9zbG90c19jYWxsYmFjaywKLQkJCQlhYiwKLQkJCQlOVUxMICk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWRiZygiYWNwaV9wY2llaHBybTolcyB3YWxrIGZvciBfU1VOIG9uIHBjaSBicmlkZ2Ugc2VnOmJ1cygleDoleCkgZmFpbD0weCV4XG4iLCBwYXRoX25hbWUsIGFiLT5zZWcsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYnVpbGRfYV9icmlkZ2UoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCXU4CQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSk7Ci0KLQlwY2llaHBybV9hY3BpX3JlZ2lzdGVyX2FfYnJpZGdlICgmYWNwaV9icmlkZ2VzX2hlYWQsIHBhYiwgYWIpOwotCi0Jc3dpdGNoIChhYi0+dHlwZSkgewotCWNhc2UgQlJJREdFX1RZUEVfSE9TVDoKLQkJZGJnKCJhY3BpX3BjaWVocHJtOiBSZWdpc3RlcmVkIFBDSSBIT1NUIEJyaWRnZSglMDJ4KSAgICBvbiBzOmI6ZDpmKCUwMng6JTAyeDolMDJ4OiUwMngpIFslc11cbiIsCi0JCQlhYi0+YnVzLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24sIHBhdGhfbmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1RZUEVfUDJQOgotCQlkYmcoImFjcGlfcGNpZWhwcm06IFJlZ2lzdGVyZWQgUENJICBQMlAgQnJpZGdlKCUwMngtJTAyeCkgb24gczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KSBbJXNdXG4iLAotCQkJYWItPnBidXMsIGFiLT5idXMsIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbiwgcGF0aF9uYW1lKTsKLQkJYnJlYWs7Ci0JfTsKLQotCS8qIGJ1aWxkIGFueSBpbW1lZGlhdGUgUEhQIHNsb3RzIHVuZGVyIHRoaXMgcGNpIGJyaWRnZSAqLwotCXBjaWVocHJtX2FjcGlfYnVpbGRfcGhwX3Nsb3RzKGFiLCAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX2JyaWRnZSAqIGFkZF9wMnBfYnJpZGdlKAotCWFjcGlfaGFuZGxlIGhhbmRsZSwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKnBhYiwJLyogcGFyZW50ICovCi0JdWxvbmcJYWRyCi0JKQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0Jc3RydWN0IHBjaV9kZXYJKnBkZXY7Ci0JdWxvbmcJCWRldm51bSwgZnVuY251bTsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlkZXZudW0gPSAoYWRyID4+IDE2KSAmIDB4ZmZmZjsKLQlmdW5jbnVtID0gYWRyICYgMHhmZmZmOwotCi0JcGRldiA9IHBjaV9maW5kX3Nsb3QocGFiLT5idXMsIFBDSV9ERVZGTihkZXZudW0sIGZ1bmNudW0pKTsKLQlpZiAoIXBkZXYgfHwgIXBkZXYtPnN1Ym9yZGluYXRlKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBpcyBub3QgYSBQMlAgQnJpZGdlXG4iLCBwYXRoX25hbWUpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2hhbmRsZSBjaGFuZGxlLCBoYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJihkZXYtPmRldikpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OworCXU4ICpwYXRoX25hbWU7CisJLyoKKwkgKiBQZXIgUENJIGZpcm13YXJlIHNwZWNpZmljYXRpb24sIHdlIHNob3VsZCBydW4gdGhlIEFDUEkgX09TQworCSAqIG1ldGhvZCB0byBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGJlZm9yZSB1c2luZyBpdC4KKwkgKiBJZiBhbiBfT1NDIGlzIG1pc3NpbmcsIHdlIGxvb2sgZm9yIGFuIE9TSFAgdG8gZG8gdGhlIHNhbWUgdGhpbmcuCisJICogVG8gaGFuZGxlIGRpZmZlcmVudCBCSU9TIGJlaGF2aW9yLCB3ZSBsb29rIGZvciBfT1NDIGFuZCBPU0hQCisJICogd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgaG90cGx1ZyBjb250cm9sbGVyIGFuZCBpdHMgcGFyZW50cywgdXB0bworCSAqIHRoZSBob3N0IGJyaWRnZSB1bmRlciB3aGljaCB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzLgorCSAqLworCXdoaWxlICghaGFuZGxlKSB7CisJCS8qCisJCSAqIFRoaXMgaG90cGx1ZyBjb250cm9sbGVyIHdhcyBub3QgbGlzdGVkIGluIHRoZSBBQ1BJIG5hbWUKKwkJICogc3BhY2UgYXQgYWxsLiBUcnkgdG8gZ2V0IGFjcGkgaGFuZGxlIG9mIHBhcmVudCBwY2kgYnVzLgorCQkgKi8KKwkJaWYgKCFwZGV2IHx8ICFwZGV2LT5idXMtPnBhcmVudCkKKwkJCWJyZWFrOworCQlkYmcoIkNvdWxkIG5vdCBmaW5kICVzIGluIGFjcGkgbmFtZXNwYWNlLCB0cnlpbmcgcGFyZW50XG4iLAorCQkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKCFwZGV2LT5idXMtPnBhcmVudC0+c2VsZikKKwkJCS8qIFBhcmVudCBtdXN0IGJlIGEgaG9zdCBicmlkZ2UgKi8KKwkJCWhhbmRsZSA9IGFjcGlfZ2V0X3BjaV9yb290YnJpZGdlX2hhbmRsZSgKKwkJCQkJcGNpX2RvbWFpbl9ucihwZGV2LT5idXMtPnBhcmVudCksCisJCQkJCXBkZXYtPmJ1cy0+cGFyZW50LT5udW1iZXIpOworCQllbHNlCisJCQloYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoCisJCQkJCSYocGRldi0+YnVzLT5wYXJlbnQtPnNlbGYtPmRldikpOworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogCi0JYWItPmhhbmRsZSA9IGhhbmRsZTsKLQlhYi0+c2VnID0gcGFiLT5zZWc7Ci0JYWItPnBidXMgPSBwYWItPmJ1czsJCS8qIG9yIHBkZXYtPmJ1cy0+bnVtYmVyICovCi0JYWItPnBkZXZpY2UgPSBkZXZudW07CQkvKiBvciBQQ0lfU0xPVChwZGV2LT5kZXZmbikgKi8KLQlhYi0+cGZ1bmN0aW9uID0gZnVuY251bTsJLyogb3IgUENJX0ZVTkMocGRldi0+ZGV2Zm4pICovCi0JYWItPmJ1cyA9IHBkZXYtPnN1Ym9yZGluYXRlLT5udW1iZXI7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfUDJQOwotCi0JZGJnKCJhY3BpX3BjaWVocHJtOiBQMlAoJXgtJXgpIG9uIHBjaT1iOmQ6ZigleDoleDoleCkgYWNwaT1iOmQ6ZigleDoleDoleCkgWyVzXVxuIiwKLQkJcGFiLT5idXMsIGFiLT5idXMsIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksIFBDSV9GVU5DKHBkZXYtPmRldmZuKSwKLQkJcGFiLT5idXMsICh1MzIpZGV2bnVtLCAodTMyKWZ1bmNudW0sIHBhdGhfbmFtZSk7Ci0KLQlidWlsZF9hX2JyaWRnZShwYWIsIGFiKTsKLQotCXJldHVybiBhYjsKLX0KLQotc3RhdGljIGFjcGlfc3RhdHVzIHNjYW5fcDJwX2JyaWRnZSgKLQlhY3BpX2hhbmRsZQkJaGFuZGxlLAotCXUzMgkJCUxldmVsLAotCXZvaWQJCQkqY29udGV4dCwKLQl2b2lkCQkJKipyZXR2YWwKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSpwYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopY29udGV4dDsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0JdWxvbmcJCQlhZHIgPSAwOwotCXU4CQkJKnBhdGhfbmFtZSA9IGFjcGlfcGF0aF9uYW1lKGhhbmRsZSk7Ci0JdWxvbmcJCQlkZXZudW0sIGZ1bmNudW07Ci0Jc3RydWN0IHBjaV9kZXYJCSpwZGV2OwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb24gKi8KLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCBNRVRIT0RfTkFNRV9fQURSLCBOVUxMLCAmYWRyKTsKLQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJaWYgKHN0YXR1cyAhPSBBRV9OT1RfRk9VTkQpCi0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgX0FEUiBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJcmV0dXJuIEFFX09LOwotCX0KLQotCWRldm51bSA9IChhZHIgPj4gMTYpICYgMHhmZmZmOwotCWZ1bmNudW0gPSBhZHIgJiAweGZmZmY7Ci0KLQlwZGV2ID0gcGNpX2ZpbmRfc2xvdChwYWItPmJ1cywgUENJX0RFVkZOKGRldm51bSwgZnVuY251bSkpOwotCWlmICghcGRldikKLQkJcmV0dXJuIEFFX09LOwotCWlmICghcGRldi0+c3Vib3JkaW5hdGUpCi0JCXJldHVybiBBRV9PSzsKLQotCWFiID0gYWRkX3AycF9icmlkZ2UoaGFuZGxlLCBwYWIsIGFkcik7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCSh1MzIpMSwKLQkJCQkJc2Nhbl9wMnBfYnJpZGdlLAotCQkJCQlhYiwKLQkJCQkJTlVMTCk7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQl9Ci0KLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWNwaV9icmlkZ2UgKiBhZGRfaG9zdF9icmlkZ2UoCi0JYWNwaV9oYW5kbGUgaGFuZGxlLAotCXVsb25nCXNlZ251bSwKLQl1bG9uZwlidXNudW0KLQkpCi17Ci0JdWxvbmcJCQlhZHIgPSAwOwotCWFjcGlfc3RhdHVzCQlzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQl1OAkJCSpwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOwotCi0JLyogZ2V0IGRldmljZSwgZnVuY3Rpb246IGhvc3QgYnIgYWRyIGlzIGFsd2F5cyAwMDAwIHRob3VnaC4gICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0FEUiwgTlVMTCwgJmFkcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBfQURSIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JZGJnKCJhY3BpX3BjaWVocHJtOiBST09UIFBDSSBzZWcoMHgleClidXMoMHgleClkZXYoMHgleClmdW5jKDB4JXgpIFslc11cbiIsICh1MzIpc2VnbnVtLCAKLQkJKHUzMilidXNudW0sICh1MzIpKGFkciA+PiAxNikgJiAweGZmZmYsICh1MzIpYWRyICYgMHhmZmZmLCBwYXRoX25hbWUpOwotCi0JYWIgPSAoc3RydWN0IGFjcGlfYnJpZGdlICopIGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgYWNwaV9icmlkZ2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFiKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTogYWxsb2MgZm9yIGFiIGZhaWxcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0JbWVtc2V0KGFiLCAwLCBzaXplb2Yoc3RydWN0IGFjcGlfYnJpZGdlKSk7Ci0KLQlhYi0+aGFuZGxlID0gaGFuZGxlOwotCWFiLT5zZWcgPSAoaW50KXNlZ251bTsKLQlhYi0+YnVzID0gYWItPnBidXMgPSAoaW50KWJ1c251bTsKLQlhYi0+cGRldmljZSA9IChpbnQpKGFkciA+PiAxNikgJiAweGZmZmY7Ci0JYWItPnBmdW5jdGlvbiA9IChpbnQpKGFkciAmIDB4ZmZmZik7Ci0JYWItPnNjYW5uZWQgPSAwOwotCWFiLT50eXBlID0gQlJJREdFX1RZUEVfSE9TVDsKLQotCS8qIGdldCByb290IHBjaSBicmlkZ2UncyBjdXJyZW50IHJlc291cmNlcyAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2NycyhhYik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQ1JTIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlrZnJlZShhYik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQgKE9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7IAotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoIiVzOiBzdGF0dXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKLQkJb3NjX3J1bl9zdGF0dXMgPSAoc3RhdHVzID09IEFFX05PVF9GT1VORCkgPyBPU0NfTk9UX0VYSVNUIDogT1NDX1JVTl9GQUlMRUQ7Ci0JfSBlbHNlIHsKLQkJb3NjX3J1bl9zdGF0dXMgPSBOQ19SVU5fU1VDQ0VTUzsKLQl9CQotCWRiZygiJXM6IG9zY19ydW5fc3RhdHVzICV4XG4iLCBfX0ZVTkNUSU9OX18sIG9zY19ydW5fc3RhdHVzKTsKLQkKLQlidWlsZF9hX2JyaWRnZShhYiwgYWIpOwotCi0JcmV0dXJuIGFiOwotfQotCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9zY2FuX2Zyb21fcm9vdF9wY2lfY2FsbGJhY2sgKAotCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCQlMZXZlbCwKLQl2b2lkCQkqY29udGV4dCwKLQl2b2lkCQkqKnJldHZhbAotCSkKLXsKLQl1bG9uZwkJc2VnbnVtID0gMDsKLQl1bG9uZwkJYnVzbnVtID0gMDsKLQlhY3BpX3N0YXR1cwkJc3RhdHVzOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0JdTgJCQkqcGF0aF9uYW1lID0gYWNwaV9wYXRoX25hbWUoaGFuZGxlKTsKLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX1NFRywgTlVMTCwgJnNlZ251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWlmIChzdGF0dXMgIT0gQUVfTk9UX0ZPVU5EKSB7Ci0JCQllcnIoImFjcGlfcGNpZWhwcm06JXMgZXZhbHVhdGUgX1NFRyBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7CisJd2hpbGUgKGhhbmRsZSkgeworCQlwYXRoX25hbWUgPSBhY3BpX3BhdGhfbmFtZShoYW5kbGUpOworCQlkYmcoIlRyeWluZyB0byBnZXQgaG90cGx1ZyBjb250cm9sIGZvciAlcyBcbiIsIHBhdGhfbmFtZSk7CisJCXN0YXR1cyA9IHBjaV9vc2NfY29udHJvbF9zZXQoaGFuZGxlLAorCQkJCU9TQ19QQ0lfRVhQUkVTU19OQVRJVkVfSFBfQ09OVFJPTCk7CisJCWlmIChzdGF0dXMgPT0gQUVfTk9UX0ZPVU5EKQorCQkJc3RhdHVzID0gYWNwaV9ydW5fb3NocChoYW5kbGUpOworCQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKKwkJCWRiZygiR2FpbmVkIGNvbnRyb2wgZm9yIGhvdHBsdWcgSFcgZm9yIHBjaSAlcyAoJXMpXG4iLAorCQkJCXBjaV9uYW1lKGRldiksIHBhdGhfbmFtZSk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlzZWdudW0gPSAwOwotCX0KLQotCS8qIGdldCBidXMgbnVtYmVyIG9mIHRoaXMgcGNpIHJvb3QgYnJpZGdlICovCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhhbmRsZSwgTUVUSE9EX05BTUVfX0JCTiwgTlVMTCwgJmJ1c251bSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCWVycigiYWNwaV9wY2llaHBybTolcyBldmFsdWF0ZSBfQkJOIGZhaWw9MHgleFxuIiwgcGF0aF9uYW1lLCBzdGF0dXMpOwotCQlyZXR1cm4gKHN0YXR1cyk7Ci0JfQotCi0JYWIgPSBhZGRfaG9zdF9icmlkZ2UoaGFuZGxlLCBzZWdudW0sIGJ1c251bSk7Ci0JaWYgKGFiKSB7Ci0JCXN0YXR1cyA9IGFjcGlfd2Fsa19uYW1lc3BhY2UgKCBBQ1BJX1RZUEVfREVWSUNFLAotCQkJCQloYW5kbGUsCi0JCQkJCTEsCi0JCQkJCXNjYW5fcDJwX2JyaWRnZSwKLQkJCQkJYWIsCi0JCQkJCU5VTEwpOworCQlpZiAoaXNfcm9vdF9icmlkZ2UoaGFuZGxlKSkKKwkJCWJyZWFrOworCQljaGFuZGxlID0gaGFuZGxlOworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoY2hhbmRsZSwgJmhhbmRsZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCWRiZygiYWNwaV9wY2llaHBybTolcyBmaW5kX3AycCBmYWlsPTB4JXhcbiIsIHBhdGhfbmFtZSwgc3RhdHVzKTsKKwkJCWJyZWFrOwogCX0KIAotCXJldHVybiBBRV9PSzsKKwllcnIoIkNhbm5vdCBnZXQgY29udHJvbCBvZiBob3RwbHVnIGhhcmR3YXJlIGZvciBwY2kgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcGNpZWhwcm1fYWNwaV9zY2FuX3BjaSAodm9pZCkKK3ZvaWQgcGNpZWhwX2dldF9ocF9wYXJhbXNfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQlzdHJ1Y3QgaG90cGx1Z19wYXJhbXMgKmhwcCkKIHsKLQlhY3BpX3N0YXR1cwlzdGF0dXM7CisJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfTk9UX0ZPVU5EOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2OwogCiAJLyoKLQkgKiBUQkQ6IHRyYXZlcnNlIExETSBkZXZpY2UgdHJlZSB3aXRoIHRoZSBoZWxwIG9mCi0JICogIHVuaWZpZWQgQUNQSSBhdWdtZW50ZWQgZm9yIHBocCBkZXZpY2UgcG9wdWxhdGlvbi4KKwkgKiBfSFBQIHNldHRpbmdzIGFwcGx5IHRvIGFsbCBjaGlsZCBidXNlcywgdW50aWwgYW5vdGhlciBfSFBQIGlzCisJICogZW5jb3VudGVyZWQuIElmIHdlIGRvbid0IGZpbmQgYW4gX0hQUCBmb3IgdGhlIGlucHV0IHBjaSBkZXYsCisJICogbG9vayBmb3IgaXQgaW4gdGhlIHBhcmVudCBkZXZpY2Ugc2NvcGUgc2luY2UgdGhhdCB3b3VsZCBhcHBseSB0bworCSAqIHRoaXMgcGNpIGRldi4gSWYgd2UgZG9uJ3QgZmluZCBhbnkgX0hQUCwgdXNlIGhhcmRjb2RlZCBkZWZhdWx0cwogCSAqLwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfc2Nhbl9mcm9tX3Jvb3RfcGNpX2NhbGxiYWNrLAotCQkJCU5VTEwsCi0JCQkJTlVMTCApOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQllcnIoImFjcGlfcGNpZWhwcm06Z2V0X2RldmljZSBQQ0kgUk9PVCBISUQgZmFpbD0weCV4XG4iLCBzdGF0dXMpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdGxyX3R5cGUpCi17Ci0JaW50CXJjOwotCi0JaWYgKGN0bHJfdHlwZSAhPSBQQ0kpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgPGVudGVyPlxuIik7Ci0JYWNwaV9icmlkZ2VzX2hlYWQgPSBOVUxMOwotCi0JLyogY29uc3RydWN0IFBDSSBidXM6ZGV2aWNlIHRyZWUgb2YgYWNwaV9oYW5kbGVzICovCi0JcmMgPSBwY2llaHBybV9hY3BpX3NjYW5fcGNpKCk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKG9zaHBfcnVuX3N0YXR1cyAhPSBOQ19SVU5fU1VDQ0VTUykgJiYgKG9zY19ydW5fc3RhdHVzICE9IE5DX1JVTl9TVUNDRVNTKSkgewotCQllcnIoIkZhaWxzIHRvIGdhaW4gY29udHJvbCBvZiBuYXRpdmUgaG90LXBsdWdcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JfQotCi0JZGJnKCJwY2llaHBybSBBQ1BJIGluaXQgJXNcbiIsIChyYyk/ImZhaWwiOiJzdWNjZXNzIik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2Ffc2xvdChzdHJ1Y3QgYWNwaV9waHBfc2xvdCAqYXBzKQotewotCWRiZygiICAgICAgICBmcmVlIGEgcGhwIGZ1bmMgb2Ygc2xvdCgweCUwMngpIG9uIFBDSSBiOmQ6Zj0weCUwMng6JTAyeDolMDJ4XG4iLCBhcHMtPnN1biwgYXBzLT5idXMsIGFwcy0+ZGV2LCBhcHMtPmZ1bik7Ci0KLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5pb19oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYXBzLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFwcy0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhcHMtPnBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYXBzKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9hX2JyaWRnZSggc3RydWN0IGFjcGlfYnJpZGdlCSphYikKLXsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzLCAqbmV4dDsKLQotCXN3aXRjaCAoYWItPnR5cGUpIHsKLQljYXNlIEJSSURHRV9UWVBFX0hPU1Q6Ci0JCWRiZygiRnJlZSBBQ1BJIFBDSSBIT1NUIEJyaWRnZSgleCkgWyVzXSBvbiBzOmI6ZDpmKCV4OiV4OiV4OiV4KVxuIiwKLQkJCWFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpLCBhYi0+c2VnLCBhYi0+cGJ1cywgYWItPnBkZXZpY2UsIGFiLT5wZnVuY3Rpb24pOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9UWVBFX1AyUDoKLQkJZGJnKCJGcmVlIEFDUEkgUENJIFAyUCBCcmlkZ2UoJXgtJXgpIFslc10gb24gczpiOmQ6ZigleDoleDoleDoleClcbiIsCi0JCQlhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSksIGFiLT5zZWcsIGFiLT5wYnVzLCBhYi0+cGRldmljZSwgYWItPnBmdW5jdGlvbik7Ci0JCWJyZWFrOwotCX07Ci0KLQkvKiBmcmVlIHNsb3RzIGZpcnN0ICovCi0JZm9yIChhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gbmV4dCkgewotCQluZXh0ID0gYXBzLT5uZXh0OwotCQlmcmVlX2Ffc2xvdChhcHMpOwotCX0KLQotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50aW9faGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT5idXNfaGVhZCk7Ci0JZnJlZV9wY2lfcmVzb3VyY2UgKGFiLT50YnVzX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+bWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dG1lbV9oZWFkKTsKLQlmcmVlX3BjaV9yZXNvdXJjZSAoYWItPnBfbWVtX2hlYWQpOwotCWZyZWVfcGNpX3Jlc291cmNlIChhYi0+dHBfbWVtX2hlYWQpOwotCi0Ja2ZyZWUoYWIpOwotfQotCi1zdGF0aWMgdm9pZCBwY2llaHBybV9mcmVlX2JyaWRnZXMgKCBzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiKQotewotCWlmICghYWIpCi0JCXJldHVybjsKLQotCWlmIChhYi0+Y2hpbGQpCi0JCXBjaWVocHJtX2ZyZWVfYnJpZGdlcyAoYWItPmNoaWxkKTsKLQotCWlmIChhYi0+bmV4dCkKLQkJcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhYi0+bmV4dCk7Ci0KLQlmcmVlX2FfYnJpZGdlKGFiKTsKLX0KLQotdm9pZCBwY2llaHBybV9jbGVhbnVwKHZvaWQpCi17Ci0JcGNpZWhwcm1fZnJlZV9icmlkZ2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X251bWJlcl9vZl9zbG90cyAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYiwKLQlpbnQJCQkJc2VsZm9ubHkKLQkpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJKmFwczsKLQlpbnQJcHJldl9zbG90ID0gLTE7Ci0JaW50CXNsb3RfbnVtID0gMDsKLQotCWZvciAoIGFwcyA9IGFiLT5zbG90czsgYXBzOyBhcHMgPSBhcHMtPm5leHQpCi0JCWlmIChhcHMtPmRldiAhPSBwcmV2X3Nsb3QpIHsKLQkJCXByZXZfc2xvdCA9IGFwcy0+ZGV2OwotCQkJc2xvdF9udW0rKzsKLQkJfQotCi0JaWYgKGFiLT5jaGlsZCkKLQkJc2xvdF9udW0gKz0gZ2V0X251bWJlcl9vZl9zbG90cyAoYWItPmNoaWxkLCAwKTsKLQotCWlmIChzZWxmb25seSkKLQkJcmV0dXJuIHNsb3RfbnVtOwotCi0JaWYgKGFiLT5uZXh0KQotCQlzbG90X251bSArPSBnZXRfbnVtYmVyX29mX3Nsb3RzIChhYi0+bmV4dCwgMCk7Ci0KLQlyZXR1cm4gc2xvdF9udW07Ci19Ci0KLXN0YXRpYyBpbnQgcHJpbnRfYWNwaV9yZXNvdXJjZXMgKHN0cnVjdCBhY3BpX2JyaWRnZQkqYWIpCi17Ci0Jc3RydWN0IGFjcGlfcGhwX3Nsb3QJCSphcHM7Ci0JaW50CWk7Ci0KLQlzd2l0Y2ggKGFiLT50eXBlKSB7Ci0JY2FzZSBCUklER0VfVFlQRV9IT1NUOgotCQlkYmcoIlBDSSBIT1NUIEJyaWRnZSAoJXgpIFslc11cbiIsIGFiLT5idXMsIGFjcGlfcGF0aF9uYW1lKGFiLT5oYW5kbGUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBCUklER0VfVFlQRV9QMlA6Ci0JCWRiZygiUENJIFAyUCBCcmlkZ2UgKCV4LSV4KSBbJXNdXG4iLCBhYi0+cGJ1cywgYWItPmJ1cywgYWNwaV9wYXRoX25hbWUoYWItPmhhbmRsZSkpOwotCQlicmVhazsKLQl9OwotCi0JcHJpbnRfcGNpX3Jlc291cmNlcyAoYWIpOwotCi0JZm9yICggaSA9IC0xLCBhcHMgPSBhYi0+c2xvdHM7IGFwczsgYXBzID0gYXBzLT5uZXh0KSB7Ci0JCWlmIChhcHMtPmRldiA9PSBpKQotCQkJY29udGludWU7Ci0JCWRiZygiICBTbG90IHN1bigleCkgczpiOmQ6ZiglMDJ4OiUwMng6JTAyeDolMDJ4KVxuIiwgYXBzLT5zdW4sIGFwcy0+c2VnLCBhcHMtPmJ1cywgYXBzLT5kZXYsIGFwcy0+ZnVuKTsKLQkJcHJpbnRfc2xvdF9yZXNvdXJjZXMoYXBzKTsKLQkJaSA9IGFwcy0+ZGV2OwotCX0KLQotCWlmIChhYi0+Y2hpbGQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhYi0+Y2hpbGQpOwotCi0JaWYgKGFiLT5uZXh0KQotCQlwcmludF9hY3BpX3Jlc291cmNlcyAoYWItPm5leHQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9wcmludF9waXJ0KHZvaWQpCi17Ci0JZGJnKCJQQ0lFSFBSTSBBQ1BJIFNsb3RzXG4iKTsKLQlpZiAoYWNwaV9icmlkZ2VzX2hlYWQpCi0JCXByaW50X2FjcGlfcmVzb3VyY2VzIChhY3BpX2JyaWRnZXNfaGVhZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBhY3BpX3BocF9zbG90ICogZ2V0X2FjcGlfc2xvdCAoCi0Jc3RydWN0IGFjcGlfYnJpZGdlICphYiwKLQl1MzIgc3VuCi0JKQotewotCXN0cnVjdCBhY3BpX3BocF9zbG90CSphcHMgPSBOVUxMOwotCi0JZm9yICggYXBzID0gYWItPnNsb3RzOyBhcHM7IGFwcyA9IGFwcy0+bmV4dCkKLQkJaWYgKGFwcy0+c3VuID09IHN1bikKLQkJCXJldHVybiBhcHM7Ci0KLQlpZiAoIWFwcyAmJiBhYi0+Y2hpbGQpIHsKLQkJYXBzID0gKHN0cnVjdCBhY3BpX3BocF9zbG90ICopZ2V0X2FjcGlfc2xvdCAoYWItPmNoaWxkLCBzdW4pOwotCQlpZiAoYXBzKQotCQkJcmV0dXJuIGFwczsKLQl9Ci0KLQlpZiAoIWFwcyAmJiBhYi0+bmV4dCkgewotCQlhcHMgPSAoc3RydWN0IGFjcGlfcGhwX3Nsb3QgKilnZXRfYWNwaV9zbG90IChhYi0+bmV4dCwgc3VuKTsKLQkJaWYgKGFwcykKLQkJCXJldHVybiBhcHM7Ci0JfQotCi0JcmV0dXJuIGFwczsKLQotfQotCi0jaWYgMAotdm9pZCAqIHBjaWVocHJtX2dldF9zbG90KHN0cnVjdCBzbG90ICpzbG90KQotewotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWIgPSBhY3BpX2JyaWRnZXNfaGVhZDsKLQlzdHJ1Y3QgYWNwaV9waHBfc2xvdAkqYXBzID0gZ2V0X2FjcGlfc2xvdCAoYWIsIHNsb3QtPm51bWJlcik7Ci0KLQlhcHMtPnNsb3QgPSBzbG90OwotCi0JZGJnKCJHb3QgYWNwaSBzbG90IHN1bigleCk6IHM6YjpkOmYoJXg6JXg6JXg6JXgpXG4iLCBhcHMtPnN1biwgYXBzLT5zZWcsIGFwcy0+YnVzLCBhcHMtPmRldiwgYXBzLT5mdW4pOwotCi0JcmV0dXJuICh2b2lkICopYXBzOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHBjaWVocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOworCXdoaWxlIChwZGV2ICYmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkpIHsKKwkJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCYocGRldi0+ZGV2KSk7CisJCWlmICghaGFuZGxlKQorCQkJYnJlYWs7CisJCXN0YXR1cyA9IGFjcGlfcnVuX2hwcChoYW5kbGUsIGhwcCk7CisJCWlmICghKHBkZXYtPmJ1cy0+cGFyZW50KSkKKwkJCWJyZWFrOworCQkvKiBDaGVjayBpZiBhIHBhcmVudCBvYmplY3Qgc3VwcG9ydHMgX0hQUCAqLworCQlwZGV2ID0gcGRldi0+YnVzLT5wYXJlbnQtPnNlbGY7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBwY2llaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcGNpZWhwcm1fZ2V0X3VzZWRfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JcmV0dXJuIHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCBmdW5jLCAhRElTQUJMRV9DQVJEKTsKLX0KLQotc3RhdGljIGludCBjb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jCi0JKQotewotCWludCByYzsKLQotCS8qIHNlZSBob3cgbXVjaCByZXNvdXJjZXMgdGhlIGZ1bmMgaGFzIHVzZWQuICovCi0JcmMgPSBwY2llaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMpOwotCi0JaWYgKCFyYykgewotCQkvKiBzdWJ0cmFjdCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhlIGZ1bmMgZnJvbSBjdHJsIHJlc291cmNlcyAqLwotCQlyYyAgPSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGZ1bmMtPmJ1c19oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGZ1bmMtPmlvX2hlYWQpOwotCQlyYyB8PSBwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+bWVtX2hlYWQsIGZ1bmMtPm1lbV9oZWFkKTsKLQkJcmMgfD0gcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGZ1bmMtPnBfbWVtX2hlYWQpOwotCQlpZiAocmMpCi0JCQl3YXJuKCJhQ0VGOiBjYW5ub3QgZGVsIHVzZWQgcmVzb3VyY2VzXG4iKTsKLQl9IGVsc2UKLQkJZXJyKCJhQ0VGOiBjYW5ub3QgZ2V0IHVzZWQgcmVzb3VyY2VzXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCQkJcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSwgUENJX0RFVkZOKGRldm4sIGZ1bm4pLCBQQ0lfVkVORE9SX0lELCAmdmlkKTsKLQotCQkJaWYgKHZpZCAhPSAweEZGRkZGRkZGKSB7Ci0JCQkJZGJnKCIlczogdmlkID0gJXhcbiIsIF9fRlVOQ1RJT05fXywgdmlkKTsKLQkJCQlmdW5jID0gcGNpZWhwX3Nsb3RfZmluZChidXNuLCBkZXZuLCBmdW5uKTsKLQkJCQlpZiAoIWZ1bmMpIHsKLQkJCQkJbWVtc2V0KCZuZXdfZnVuYywgMCwgc2l6ZW9mKHN0cnVjdCBwY2lfZnVuYykpOwotCQkJCQluZXdfZnVuYy5idXMgPSBidXNuOwotCQkJCQluZXdfZnVuYy5kZXZpY2UgPSBkZXZuOwotCQkJCQluZXdfZnVuYy5mdW5jdGlvbiA9IGZ1bm47Ci0JCQkJCW5ld19mdW5jLmlzX2FfYm9hcmQgPSAxOwotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgJm5ld19mdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcygmbmV3X2Z1bmMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbihjdHJsLCBmdW5jKTsKLQkJCQkJcGNpZWhwcm1fZHVtcF9mdW5jX3JlcyhmdW5jKTsKLQkJCQl9Ci0JCQkJZGJnKCJhQ0NGOmV4aXN0aW5nIFBDSSAweCV4IEZ1bmMgUmVzb3VyY2VEdW1wXG4iLCBjdHJsLT5idXMpOwotCQkJfQotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYmluZF9wY2lfcmVzb3VyY2VzKAotCXN0cnVjdCBjb250cm9sbGVyIAkqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiCi0JKQotewotCWludAkJc3RhdHVzID0gMDsKLQotCWlmIChhYi0+YnVzX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgQlVTIFJlc291cmNlcyBhZGQgb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlzdGF0dXMgPSBwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmY3RybC0+YnVzX2hlYWQsIGFiLT5idXNfaGVhZCk7Ci0JCWlmIChwY2llaHBybV9kZWxldGVfcmVzb3VyY2VzICgmYWItPmJ1c19oZWFkLCBjdHJsLT5idXNfaGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXhcbiIsIGFiLT5idXMpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQllcnIoImJhcHI6ICBCVVMgUmVzb3VyY2UgYWRkIG9uIFBDSSAweCV4OiBmYWlsPTB4JXhcbiIsIGFiLT5idXMsIHN0YXR1cyk7Ci0JCQlyZXR1cm4gc3RhdHVzOwotCQl9Ci0JfSBlbHNlCi0JCWluZm8oImJhcHI6ICBObyBCVVMgUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCWlmIChhYi0+aW9faGVhZCkgewotCQlkYmcoImJhcHI6ICBJTyBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPmlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+aW9faGVhZCwgY3RybC0+aW9faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBJTyBSZXNvdXJjZSBvbiBQQ0kgMHgleFxuIiwgYWItPmJ1cyk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWVycigiYmFwcjogIElPIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gIElPIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPm1lbV9oZWFkKSB7Ci0JCWRiZygiYmFwcjogIE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPm1lbV9oZWFkLCBhYi0+bWVtX2hlYWQpOwotCQlpZiAocGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlcyAoJmFiLT5tZW1faGVhZCwgY3RybC0+bWVtX2hlYWQpKQotCQkJd2FybigiYmFwcjogIGNhbm5vdCBzdWIgTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgTUVNIFJlc291cmNlIGFkZCBvbiBQQ0kgMHgleDogZmFpbD0weCV4XG4iLCBhYi0+YnVzLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCX0gZWxzZQotCQlpbmZvKCJiYXByOiAgTm8gTUVNIFJlc291cmNlIG9uIFBDSSAweCV4LlxuIiwgYWItPmJ1cyk7Ci0KLQlpZiAoYWItPnBfbWVtX2hlYWQpIHsKLQkJZGJnKCJiYXByOiAgUE1FTSBSZXNvdXJjZXMgYWRkIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJc3RhdHVzID0gcGNpZWhwcm1fYWRkX3Jlc291cmNlcyAoJmN0cmwtPnBfbWVtX2hlYWQsIGFiLT5wX21lbV9oZWFkKTsKLQkJaWYgKHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZhYi0+cF9tZW1faGVhZCwgY3RybC0+cF9tZW1faGVhZCkpCi0JCQl3YXJuKCJiYXByOiAgY2Fubm90IHN1YiBQTUVNIFJlc291cmNlIG9uIFBDSSAweCV4XG4iLCBhYi0+YnVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZXJyKCJiYXByOiAgUE1FTSBSZXNvdXJjZSBhZGQgb24gUENJIDB4JXg6IGZhaWw9MHgleFxuIiwgYWItPmJ1cywgc3RhdHVzKTsKLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KLQl9IGVsc2UKLQkJaW5mbygiYmFwcjogIE5vIFBNRU0gUmVzb3VyY2Ugb24gUENJIDB4JXguXG4iLCBhYi0+YnVzKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgbm9fcGNpX3Jlc291cmNlcyggc3RydWN0IGFjcGlfYnJpZGdlICphYikKLXsKLQlyZXR1cm4gIShhYi0+cF9tZW1faGVhZCB8fCBhYi0+bWVtX2hlYWQgfHwgYWItPmlvX2hlYWQgfHwgYWItPmJ1c19oZWFkKTsKLX0KLQotc3RhdGljIGludCBmaW5kX3BjaV9icmlkZ2VfcmVzb3VyY2VzICgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UgKmFiCi0JKQotewotCWludAlyYyA9IDA7Ci0Jc3RydWN0IHBjaV9mdW5jIGZ1bmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gYWItPnBidXM7Ci0JZnVuYy5kZXZpY2UgPSBhYi0+cGRldmljZTsKLQlmdW5jLmZ1bmN0aW9uID0gYWItPnBmdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHVzZWQgcmVzb3VyY2VzIGZvciB0aGlzIFBDSSBicmlkZ2UgKi8KLQlyYyA9IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIChjdHJsLCAmZnVuYywgIURJU0FCTEVfQ0FSRCk7Ci0KLQlhYi0+aW9faGVhZCA9IGZ1bmMuaW9faGVhZDsKLQlhYi0+bWVtX2hlYWQgPSBmdW5jLm1lbV9oZWFkOwotCWFiLT5wX21lbV9oZWFkID0gZnVuYy5wX21lbV9oZWFkOwotCWFiLT5idXNfaGVhZCA9IGZ1bmMuYnVzX2hlYWQ7Ci0JaWYgKGFiLT5idXNfaGVhZCkKLQkJcGNpZWhwcm1fZGVsZXRlX3Jlc291cmNlKCZhYi0+YnVzX2hlYWQsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDEpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBhY3BpX2JyaWRnZSAqYWIKLQkpCi17Ci0JaW50CXJjID0gMDsKLQotCWRiZygiZ3JmYjogIEdldCBSZXNvdXJjZXMgZm9yIFBDSSAweCV4IGZyb20gYWN0dWFsIFBDSSBicmlkZ2UgMHgleC5cbiIsIGN0cmwtPmJ1cywgYWItPmJ1cyk7Ci0KLQlyYyA9IGZpbmRfcGNpX2JyaWRnZV9yZXNvdXJjZXMgKGN0cmwsIGFiKTsKLQotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+YnVzX2hlYWQpOwotCXBjaWVocF9yZXNvdXJjZV9zb3J0X2FuZF9jb21iaW5lKCZhYi0+aW9faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5tZW1faGVhZCk7Ci0JcGNpZWhwX3Jlc291cmNlX3NvcnRfYW5kX2NvbWJpbmUoJmFiLT5wX21lbV9oZWFkKTsKLQotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGJ1c19oZWFkLCBhYi0+YnVzX2hlYWQpOwotCXBjaWVocHJtX2FkZF9yZXNvdXJjZXMgKCZhYi0+dGlvX2hlYWQsIGFiLT5pb19oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRtZW1faGVhZCwgYWItPm1lbV9oZWFkKTsKLQlwY2llaHBybV9hZGRfcmVzb3VyY2VzICgmYWItPnRwX21lbV9oZWFkLCBhYi0+cF9tZW1faGVhZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3BjaV9yZXNvdXJjZXMoCi0Jc3RydWN0IGNvbnRyb2xsZXIJKmN0cmwsCi0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYgotCSkKLXsKLQlpbnQJcmMgPSAwOwotCi0JaWYgKG5vX3BjaV9yZXNvdXJjZXMoYWIpKSB7Ci0JCWRiZygic3BicjpQQ0kgMHgleCBoYXMgbm8gcmVzb3VyY2VzLiBHZXQgcGFyZW50IHJlc291cmNlcy5cbiIsIGFiLT5idXMpOwotCQlyYyA9IGdldF9wY2lfcmVzb3VyY2VzX2Zyb21fYnJpZGdlKGN0cmwsIGFiKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBHZXQgcmVzb3VyY2VzIGZvciB0aGlzIGN0cmwuCi0gKiAgMS4gZ2V0IHRvdGFsIHJlc291cmNlcyBmcm9tIEFDUEkgX0NSUyBvciBicmlkZ2UgKHRoaXMgY3RybCkKLSAqICAyLiBmaW5kIHVzZWQgcmVzb3VyY2VzIG9mIGV4aXN0aW5nIGFkYXB0ZXJzCi0gKgkzLiBzdWJ0cmFjdCB1c2VkIHJlc291cmNlcyBmcm9tIHRvdGFsIHJlc291cmNlcwotICovCi1pbnQgcGNpZWhwcm1fZmluZF9hdmFpbGFibGVfcmVzb3VyY2VzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBhY3BpX2JyaWRnZQkqYWI7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCWlmICghYWIpIHsKLQkJZXJyKCJwZmFyOmNhbm5vdCBsb2NhdGUgYWNwaSBicmlkZ2Ugb2YgUENJIDB4JXguXG4iLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAobm9fcGNpX3Jlc291cmNlcyhhYikpIHsKLQkJcmMgPSBnZXRfcGNpX3Jlc291cmNlcyhjdHJsLCBhYik7Ci0JCWlmIChyYykgewotCQkJZXJyKCJwZmFyOmNhbm5vdCBnZXQgcGNpIHJlc291cmNlcyBvZiBQQ0kgMHgleC5cbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JcmMgPSBiaW5kX3BjaV9yZXNvdXJjZXMoY3RybCwgYWIpOwotCWRiZygicGZhcjpwcmUtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQliaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKGN0cmwpOwotCi0JZGJnKCJwZmFyOnBvc3QtQmluZCBQQ0kgMHgleCBDdHJsIFJlc291cmNlIER1bXBcbiIsIGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIpOwotCXBjaWVocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLWludCBwY2llaHBybV9zZXRfaHBwKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYywKLQl1OAljYXJkX3R5cGUKLQkpCi17Ci0Jc3RydWN0IGFjcGlfYnJpZGdlCSphYjsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JaW50CQkJCXJjID0gMDsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JdTgJCQkJY2xzPSAweDA4OwkvKiBkZWZhdWx0IGNhY2hlIGxpbmUgc2l6ZQkqLwotCXU4CQkJCWx0ID0gMHg0MDsJLyogZGVmYXVsdCBsYXRlbmN5IHRpbWVyCSovCi0JdTgJCQkJZXAgPSAwOwotCXU4CQkJCWVzID0gMDsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JYWIgPSBmaW5kX2FjcGlfYnJpZGdlX2J5X2J1cyhhY3BpX2JyaWRnZXNfaGVhZCwgY3RybC0+c2VnLCBjdHJsLT5idXMpOwotCi0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJbHQgID0gKHU4KWFiLT5faHBwLT5sYXRlbmN5X3RpbWVyOwotCQkJY2xzID0gKHU4KWFiLT5faHBwLT5jYWNoZV9saW5lX3NpemU7Ci0JCQllcCAgPSAodTgpYWItPl9ocHAtPmVuYWJsZV9wZXJyOwotCQkJZXMgID0gKHU4KWFiLT5faHBwLT5lbmFibGVfc2VycjsKLQkJfSBlbHNlCi0JCQlkYmcoIl9ocHA6IG5vIF9ocHAgZm9yIEIvRC9GPSUjeC8lI3gvJSN4LiB1c2UgZGVmYXVsdCB2YWx1ZVxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJfaHBwOiBubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC4gdXNlIGRlZmF1bHQgdmFsdWVcbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyB8PSBwY2lfYnVzX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9idXMsIGRldmZuLCBQQ0lfU0VDX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQl9Ci0KLQkvKiBzZXQgYmFzZSBMYXRlbmN5IFRpbWVyICovCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIGx0KTsKLQlkYmcoIiAgc2V0IGxhdGVuY3kgdGltZXIgID0weCUwMng6ICV4XG4iLCBsdCwgcmMpOwotCi0JcmMgfD0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY2xzKTsKLQlkYmcoIiAgc2V0IGNhY2hlX2xpbmVfc2l6ZT0weCUwMng6ICV4XG4iLCBjbHMsIHJjKTsKLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBjbWQsIGJjb21tYW5kLCBiY21kOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQlzdHJ1Y3QgYWNwaV9icmlkZ2UJKmFiOwotCXVuc2lnbmVkIGludCBkZXZmbjsKLQlpbnQgcmM7Ci0KLQltZW1jcHkoJmxwY2lfYnVzLCBjdHJsLT5wY2lfYnVzLCBzaXplb2YobHBjaV9idXMpKTsKLQlwY2lfYnVzID0gJmxwY2lfYnVzOwotCXBjaV9idXMtPm51bWJlciA9IGZ1bmMtPmJ1czsKLQlkZXZmbiA9IFBDSV9ERVZGTihmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQotCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgJmNtZCk7Ci0KLQlpZiAoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgJmJjbWQpOwotCX0KLQotCWNvbW1hbmQgID0gY21kIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURQotCQl8IFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZOwotCWJjb21tYW5kICA9IGJjbWQgfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQlhYiA9IGZpbmRfYWNwaV9icmlkZ2VfYnlfYnVzKGFjcGlfYnJpZGdlc19oZWFkLCBjdHJsLT5zZWcsIGN0cmwtPmJ1cyk7Ci0JaWYgKGFiKSB7Ci0JCWlmIChhYi0+X2hwcCkgewotCQkJaWYgKGFiLT5faHBwLT5lbmFibGVfcGVycikgewotCQkJCWNvbW1hbmQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1BBUklUWTsKLQkJCX0gZWxzZSB7Ci0JCQkJY29tbWFuZCAmPSB+UENJX0NPTU1BTkRfUEFSSVRZOwotCQkJCWJjb21tYW5kICY9IH5QQ0lfQlJJREdFX0NUTF9QQVJJVFk7Ci0JCQl9Ci0JCQlpZiAoYWItPl9ocHAtPmVuYWJsZV9zZXJyKSB7Ci0JCQkJY29tbWFuZCB8PSBQQ0lfQ09NTUFORF9TRVJSOwotCQkJCWJjb21tYW5kIHw9IFBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9IGVsc2UgewotCQkJCWNvbW1hbmQgJj0gflBDSV9DT01NQU5EX1NFUlI7Ci0JCQkJYmNvbW1hbmQgJj0gflBDSV9CUklER0VfQ1RMX1NFUlI7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJZGJnKCJubyBfaHBwIGZvciBCL0QvRiA9ICUjeC8lI3gvJSN4LlxuIiwgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9IGVsc2UKLQkJZGJnKCJubyBhY3BpIGJyaWRnZSBmb3IgQi9EL0YgPSAlI3gvJSN4LyUjeC5cbiIsIGZ1bmMtPmJ1cywgZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQlpZiAoY29tbWFuZCAhPSBjbWQpIHsKLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQ09NTUFORCwgY29tbWFuZCk7Ci0JfQotCWlmICgoY2FyZF90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpICYmIChiY29tbWFuZCAhPSBiY21kKSkgewotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9CUklER0VfQ09OVFJPTCwgYmNvbW1hbmQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwcm1fbm9uYWNwaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKaW5kZXggNzZjNzI3Yy4uMjkxODBkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmMKQEAgLTI3LDQ3OSArMjcsMjEgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpZmRlZiBDT05GSUdfSUE2NAotI2luY2x1ZGUgPGFzbS9pb3NhcGljLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgInBjaWVocHJtLmgiCi0jaW5jbHVkZSAicGNpZWhwcm1fbm9uYWNwaS5oIgogCi0KLXZvaWQgcGNpZWhwcm1fY2xlYW51cCh2b2lkKQordm9pZCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCXN0cnVjdCBob3RwbHVnX3BhcmFtcyAqaHBwKQogewogCXJldHVybjsKIH0KIAotaW50IHBjaWVocHJtX3ByaW50X3BpcnQodm9pZCkKK2ludCBwY2llaHBfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXJldHVybiAwOwogfQotCi1pbnQgcGNpZWhwcm1fZ2V0X3BoeXNpY2FsX3Nsb3RfbnVtYmVyKHN0cnVjdCBjb250cm9sbGVyICpjdHJsLCB1MzIgKnN1biwgdTggYnVzbnVtLCB1OCBkZXZudW0pCi17Ci0KLQkqc3VuID0gKHU4KSAoY3RybC0+Zmlyc3Rfc2xvdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgcHJpbnRfcGNpX3Jlc291cmNlICggc3RydWN0IHBjaV9yZXNvdXJjZQkqYXByaCkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlCSpyZXM7Ci0KLQlmb3IgKHJlcyA9IGFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlkYmcoIiAgICAgICAgYmFzZT0gMHgleCBsZW5ndGg9IDB4JXhcbiIsIHJlcy0+YmFzZSwgcmVzLT5sZW5ndGgpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBocHJtX2R1bXBfZnVuY19yZXMoIHN0cnVjdCBwY2lfZnVuYyAqZnVuKQotewotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYyA9IGZ1bjsKLQotCWlmIChmdW5jLT5idXNfaGVhZCkgewotCQlkYmcoIjogICAgQlVTIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmJ1c19oZWFkKTsKLQl9Ci0JaWYgKGZ1bmMtPmlvX2hlYWQpIHsKLQkJZGJnKCI6ICAgIElPIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPmlvX2hlYWQpOwotCX0KLQlpZiAoZnVuYy0+bWVtX2hlYWQpIHsKLQkJZGJnKCI6ICAgIE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChmdW5jLT5tZW1faGVhZCk7Ci0JfQotCWlmIChmdW5jLT5wX21lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBQTUVNIFJlc291cmNlczpcbiIpOwotCQlwcmludF9wY2lfcmVzb3VyY2UgKGZ1bmMtPnBfbWVtX2hlYWQpOwotCX0KLX0KLQotc3RhdGljIGludCBwaHBybV9nZXRfdXNlZF9yZXNvdXJjZXMgKAotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsLAotCXN0cnVjdCBwY2lfZnVuYyAqZnVuYwotCSkKLXsKLQlyZXR1cm4gcGNpZWhwX3NhdmVfdXNlZF9yZXNvdXJjZXMgKGN0cmwsIGZ1bmMsICFESVNBQkxFX0NBUkQpOwotfQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMoCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqKmFwcmgsCi0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqdGhpcwotCSkKLXsKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICpyZXM7Ci0KLQlmb3IgKHJlcyA9IHRoaXM7IHJlczsgcmVzID0gcmVzLT5uZXh0KQotCQlwaHBybV9kZWxldGVfcmVzb3VyY2UoYXByaCwgcmVzLT5iYXNlLCByZXMtPmxlbmd0aCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9leGlzdGluZ19mdW5jdGlvbigKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMKLQkpCi17Ci0JaW50IHJjOwotCi0JLyogc2VlIGhvdyBtdWNoIHJlc291cmNlcyB0aGUgZnVuYyBoYXMgdXNlZC4gKi8KLQlyYyA9IHBocHJtX2dldF91c2VkX3Jlc291cmNlcyAoY3RybCwgZnVuYyk7Ci0KLQlpZiAoIXJjKSB7Ci0JCS8qIHN1YnRyYWN0IHRoZSByZXNvdXJjZXMgdXNlZCBieSB0aGUgZnVuYyBmcm9tIGN0cmwgcmVzb3VyY2VzICovCi0JCXJjICA9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5idXNfaGVhZCwgZnVuYy0+YnVzX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+aW9faGVhZCwgZnVuYy0+aW9faGVhZCk7Ci0JCXJjIHw9IHBocHJtX2RlbGV0ZV9yZXNvdXJjZXMgKCZjdHJsLT5tZW1faGVhZCwgZnVuYy0+bWVtX2hlYWQpOwotCQlyYyB8PSBwaHBybV9kZWxldGVfcmVzb3VyY2VzICgmY3RybC0+cF9tZW1faGVhZCwgZnVuYy0+cF9tZW1faGVhZCk7Ci0JCWlmIChyYykKLQkJCXdhcm4oImFDRUY6IGNhbm5vdCBkZWwgdXNlZCByZXNvdXJjZXNcbiIpOwotCX0gZWxzZQotCQllcnIoImFDRUY6IGNhbm5vdCBnZXQgdXNlZCByZXNvdXJjZXNcbiIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHBjaWVocHJtX2RlbGV0ZV9yZXNvdXJjZSgKLQlzdHJ1Y3QgcGNpX3Jlc291cmNlICoqYXByaCwKLQl1bG9uZyBiYXNlLAotCXVsb25nIHNpemUpCi17Ci0Jc3RydWN0IHBjaV9yZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnByZXZub2RlOwotCXN0cnVjdCBwY2lfcmVzb3VyY2UgKnNwbGl0X25vZGU7Ci0JdWxvbmcgdGJhc2U7Ci0KLQlwY2llaHBfcmVzb3VyY2Vfc29ydF9hbmRfY29tYmluZShhcHJoKTsKLQotCWZvciAocmVzID0gKmFwcmg7IHJlczsgcmVzID0gcmVzLT5uZXh0KSB7Ci0JCWlmIChyZXMtPmJhc2UgPiBiYXNlKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChyZXMtPmJhc2UgKyByZXMtPmxlbmd0aCkgPCAoYmFzZSArIHNpemUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHJlcy0+YmFzZSA8IGJhc2UpIHsKLQkJCXRiYXNlID0gYmFzZTsKLQotCQkJaWYgKChyZXMtPmxlbmd0aCAtICh0YmFzZSAtIHJlcy0+YmFzZSkpIDwgc2l6ZSkKLQkJCQljb250aW51ZTsKLQotCQkJc3BsaXRfbm9kZSA9IChzdHJ1Y3QgcGNpX3Jlc291cmNlICopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZTsKLQkJCXNwbGl0X25vZGUtPmxlbmd0aCA9IHRiYXNlIC0gcmVzLT5iYXNlOwotCQkJcmVzLT5iYXNlID0gdGJhc2U7Ci0JCQlyZXMtPmxlbmd0aCAtPSBzcGxpdF9ub2RlLT5sZW5ndGg7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKHJlcy0+bGVuZ3RoID49IHNpemUpIHsKLQkJCXNwbGl0X25vZGUgPSAoc3RydWN0IHBjaV9yZXNvdXJjZSopIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghc3BsaXRfbm9kZSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJc3BsaXRfbm9kZS0+YmFzZSA9IHJlcy0+YmFzZSArIHNpemU7Ci0JCQlzcGxpdF9ub2RlLT5sZW5ndGggPSByZXMtPmxlbmd0aCAtIHNpemU7Ci0JCQlyZXMtPmxlbmd0aCA9IHNpemU7Ci0KLQkJCXNwbGl0X25vZGUtPm5leHQgPSByZXMtPm5leHQ7Ci0JCQlyZXMtPm5leHQgPSBzcGxpdF9ub2RlOwotCQl9Ci0KLQkJaWYgKCphcHJoID09IHJlcykgewotCQkJKmFwcmggPSByZXMtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQlwcmV2bm9kZSA9ICphcHJoOwotCQkJd2hpbGUgKHByZXZub2RlLT5uZXh0ICE9IHJlcykKLQkJCQlwcmV2bm9kZSA9IHByZXZub2RlLT5uZXh0OwotCi0JCQlwcmV2bm9kZS0+bmV4dCA9IHJlcy0+bmV4dDsKLQkJfQotCQlyZXMtPm5leHQgPSBOVUxMOwotCQlrZnJlZShyZXMpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBiaW5kX3BjaV9yZXNvdXJjZXNfdG9fc2xvdHMgKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsIG5ld19mdW5jOwotCWludCBidXNuID0gY3RybC0+c2xvdF9idXM7Ci0JaW50IGRldm4sIGZ1bm47Ci0JdTMyCXZpZDsKLQotCWZvciAoZGV2biA9IDA7IGRldm4gPCAzMjsgZGV2bisrKSB7Ci0JCWZvciAoZnVubiA9IDA7IGZ1bm4gPCA4OyBmdW5uKyspIHsKLQkJCS8qCi0JCQlpZiAoZGV2biA9PSBjdHJsLT5kZXZpY2UgJiYgZnVubiA9PSBjdHJsLT5mdW5jdGlvbikKLQkJCQljb250aW51ZTsKLQkJCSovCi0JCQkvKiBmaW5kIG91dCBpZiB0aGlzIGVudHJ5IGlzIGZvciBhbiBvY2N1cGllZCBzbG90ICovCi0JCQl2aWQgPSAweEZGRkZGRkZGOwotCi0JCQlwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGN0cmwtPnBjaV9kZXYtPnN1Ym9yZGluYXRlLCBQQ0lfREVWRk4oZGV2biwgZnVubiksIFBDSV9WRU5ET1JfSUQsICZ2aWQpOwotCi0JCQlpZiAodmlkICE9IDB4RkZGRkZGRkYpIHsKLQkJCQlkYmcoIiVzOiB2aWQgPSAleCBidXMgJXggZGV2ICV4IGZ1biAleFxuIiwgX19GVU5DVElPTl9fLAotCQkJCXZpZCwgYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZnVuYyA9IHBjaWVocF9zbG90X2ZpbmQoYnVzbiwgZGV2biwgZnVubik7Ci0JCQkJZGJnKCIlczogZnVuYyA9ICVwXG4iLCBfX0ZVTkNUSU9OX18sZnVuYyk7Ci0JCQkJaWYgKCFmdW5jKSB7Ci0JCQkJCW1lbXNldCgmbmV3X2Z1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQkJCQkJbmV3X2Z1bmMuYnVzID0gYnVzbjsKLQkJCQkJbmV3X2Z1bmMuZGV2aWNlID0gZGV2bjsKLQkJCQkJbmV3X2Z1bmMuZnVuY3Rpb24gPSBmdW5uOwotCQkJCQluZXdfZnVuYy5pc19hX2JvYXJkID0gMTsKLQkJCQkJY29uZmlndXJlX2V4aXN0aW5nX2Z1bmN0aW9uKGN0cmwsICZuZXdfZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoJm5ld19mdW5jKTsKLQkJCQl9IGVsc2UgewotCQkJCQljb25maWd1cmVfZXhpc3RpbmdfZnVuY3Rpb24oY3RybCwgZnVuYyk7Ci0JCQkJCXBocHJtX2R1bXBfZnVuY19yZXMoZnVuYyk7Ci0JCQkJfQotCQkJCWRiZygiYUNDRjpleGlzdGluZyBQQ0kgMHgleCBGdW5jIFJlc291cmNlRHVtcFxuIiwgY3RybC0+YnVzKTsKLQkJCX0KLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBwaHBybV9kdW1wX2N0cmxfcmVzKCBzdHJ1Y3QgY29udHJvbGxlciAqY3RscikKLXsKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGN0bHI7Ci0KLQlpZiAoY3RybC0+YnVzX2hlYWQpIHsKLQkJZGJnKCI6ICAgIEJVUyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5idXNfaGVhZCk7Ci0JfQotCWlmIChjdHJsLT5pb19oZWFkKSB7Ci0JCWRiZygiOiAgICBJTyBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5pb19oZWFkKTsKLQl9Ci0JaWYgKGN0cmwtPm1lbV9oZWFkKSB7Ci0JCWRiZygiOiAgICBNRU0gUmVzb3VyY2VzOlxuIik7Ci0JCXByaW50X3BjaV9yZXNvdXJjZSAoY3RybC0+bWVtX2hlYWQpOwotCX0KLQlpZiAoY3RybC0+cF9tZW1faGVhZCkgewotCQlkYmcoIjogICAgUE1FTSBSZXNvdXJjZXM6XG4iKTsKLQkJcHJpbnRfcGNpX3Jlc291cmNlIChjdHJsLT5wX21lbV9oZWFkKTsKLQl9Ci19Ci0KLS8qCi0gKiBwaHBybV9maW5kX2F2YWlsYWJsZV9yZXNvdXJjZXMKLSAqCi0gKiAgRmluZHMgYXZhaWxhYmxlIG1lbW9yeSwgSU8sIGFuZCBJUlEgcmVzb3VyY2VzIGZvciBwcm9ncmFtbWluZwotICogIGRldmljZXMgd2hpY2ggbWF5IGJlIGFkZGVkIHRvIHRoZSBzeXN0ZW0KLSAqICB0aGlzIGZ1bmN0aW9uIGlzIGZvciBob3QgcGx1ZyBBREQhCi0gKgotICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MKLSAqLwotaW50IHBjaWVocHJtX2ZpbmRfYXZhaWxhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKLXsKLQlzdHJ1Y3QgcGNpX2Z1bmMgZnVuYzsKLQl1MzIgcmM7Ci0KLQltZW1zZXQoJmZ1bmMsIDAsIHNpemVvZihzdHJ1Y3QgcGNpX2Z1bmMpKTsKLQotCWZ1bmMuYnVzID0gY3RybC0+YnVzOwotCWZ1bmMuZGV2aWNlID0gY3RybC0+ZGV2aWNlOwotCWZ1bmMuZnVuY3Rpb24gPSBjdHJsLT5mdW5jdGlvbjsKLQlmdW5jLmlzX2FfYm9hcmQgPSAxOwotCi0JLyogR2V0IHJlc291cmNlcyBmb3IgdGhpcyBQQ0kgYnJpZGdlICovCi0JcmMgPSBwY2llaHBfc2F2ZV91c2VkX3Jlc291cmNlcyAoY3RybCwgJmZ1bmMsICFESVNBQkxFX0NBUkQpOwotCWRiZygiJXM6IHBjaWVocF9zYXZlX3VzZWRfcmVzb3VyY2VzIHJjID0gJWRcbiIsIF9fRlVOQ1RJT05fXywgcmMpOwotCi0JaWYgKGZ1bmMubWVtX2hlYWQpCi0JCWZ1bmMubWVtX2hlYWQtPm5leHQgPSBjdHJsLT5tZW1faGVhZDsKLQljdHJsLT5tZW1faGVhZCA9IGZ1bmMubWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5wX21lbV9oZWFkKQotCQlmdW5jLnBfbWVtX2hlYWQtPm5leHQgPSBjdHJsLT5wX21lbV9oZWFkOwotCWN0cmwtPnBfbWVtX2hlYWQgPSBmdW5jLnBfbWVtX2hlYWQ7Ci0KLQlpZiAoZnVuYy5pb19oZWFkKQotCQlmdW5jLmlvX2hlYWQtPm5leHQgPSBjdHJsLT5pb19oZWFkOwotCWN0cmwtPmlvX2hlYWQgPSBmdW5jLmlvX2hlYWQ7Ci0KLQlpZihmdW5jLmJ1c19oZWFkKQotCQlmdW5jLmJ1c19oZWFkLT5uZXh0ID0gY3RybC0+YnVzX2hlYWQ7Ci0JY3RybC0+YnVzX2hlYWQgPSBmdW5jLmJ1c19oZWFkOwotCi0JaWYgKGN0cmwtPmJ1c19oZWFkKQotCQlwY2llaHBybV9kZWxldGVfcmVzb3VyY2UoJmN0cmwtPmJ1c19oZWFkLCBjdHJsLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZS0+bnVtYmVyLCAxKTsKLQkKLQlkYmcoIiVzOnByZS1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlkYmcoIiVzOiBiZWZvcmUgYmluZF9wY2lfcmVzb3VyY2VzX3RvIHNsb3RzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JYmluZF9wY2lfcmVzb3VyY2VzX3RvX3Nsb3RzIChjdHJsKTsKLQotCWRiZygiJXM6cG9zdC1CaW5kIFBDSSAweCV4IEN0cmwgUmVzb3VyY2UgRHVtcFxuIiwgX19GVU5DVElPTl9fLCBjdHJsLT5idXMpOwotCXBocHJtX2R1bXBfY3RybF9yZXMoY3RybCk7Ci0KLQlyZXR1cm4gKHJjKTsKLX0KLQotaW50IHBjaWVocHJtX3NldF9ocHAoCi0Jc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwsCi0Jc3RydWN0IHBjaV9mdW5jICpmdW5jLAotCXU4CWNhcmRfdHlwZSkKLXsKLQl1MzIgcmM7Ci0JdTggdGVtcF9ieXRlOwotCXN0cnVjdCBwY2lfYnVzIGxwY2lfYnVzLCAqcGNpX2J1czsKLQl1bnNpZ25lZCBpbnQJZGV2Zm47Ci0JbWVtY3B5KCZscGNpX2J1cywgY3RybC0+cGNpX2J1cywgc2l6ZW9mKGxwY2lfYnVzKSk7Ci0JcGNpX2J1cyA9ICZscGNpX2J1czsKLQlwY2lfYnVzLT5udW1iZXIgPSBmdW5jLT5idXM7Ci0JZGV2Zm4gPSBQQ0lfREVWRk4oZnVuYy0+ZGV2aWNlLCBmdW5jLT5mdW5jdGlvbik7Ci0KLQl0ZW1wX2J5dGUgPSAweDQwOwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBMVCAqLwotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCQkvKiBzZXQgc3Vib3JkaW5hdGUgTGF0ZW5jeSBUaW1lciAqLwotCQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX2J5dGUocGNpX2J1cywgZGV2Zm4sIFBDSV9TRUNfTEFURU5DWV9USU1FUiwgdGVtcF9ieXRlKTsKLQotCQlpZiAocmMpIHsKLQkJCWRiZygiJXM6IHNldCBzZWNvbmRhcnkgTFQgZXJyb3IuIGI6ZDpmKCUwMng6JTAyeDolMDJ4KVxuIiwgX19GVU5DVElPTl9fLCAKLQkJCQlmdW5jLT5idXMsIGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0JfQotCi0JLyogc2V0IGJhc2UgTGF0ZW5jeSBUaW1lciAqLwotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0xBVEVOQ1lfVElNRVIsIHRlbXBfYnl0ZSk7Ci0KLQlpZiAocmMpIHsKLQkJZGJnKCIlczogc2V0IExUIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIHNldCBDYWNoZSBMaW5lIHNpemUgKi8KLQl0ZW1wX2J5dGUgPSAweDA4OwkvKiBoYXJkIGNvZGVkIHZhbHVlIGZvciBDTFMgKi8KLQotCXJjID0gcGNpX2J1c193cml0ZV9jb25maWdfYnl0ZShwY2lfYnVzLCBkZXZmbiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgdGVtcF9ieXRlKTsKLQotCWlmIChyYykgewotCQlkYmcoIiVzOiBzZXQgQ0xTIGVycm9yLiBiOmQ6ZiglMDJ4OiUwMng6JTAyeClcbiIsIF9fRlVOQ1RJT05fXywgZnVuYy0+YnVzLCBmdW5jLT5kZXZpY2UsIGZ1bmMtPmZ1bmN0aW9uKTsKLQl9Ci0KLQkvKiBzZXQgZW5hYmxlX3BlcnIgKi8KLQkvKiBzZXQgZW5hYmxlX3NlcnIgKi8KLQotCXJldHVybiByYzsKLX0KLQotdm9pZCBwY2llaHBybV9lbmFibGVfY2FyZCgKLQlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCwKLQlzdHJ1Y3QgcGNpX2Z1bmMgKmZ1bmMsCi0JdTggY2FyZF90eXBlKQotewotCXUxNiBjb21tYW5kLCBiY29tbWFuZDsKLQlzdHJ1Y3QgcGNpX2J1cyBscGNpX2J1cywgKnBjaV9idXM7Ci0JdW5zaWduZWQgaW50IGRldmZuOwotCWludCByYzsKLQotCW1lbWNweSgmbHBjaV9idXMsIGN0cmwtPnBjaV9idXMsIHNpemVvZihscGNpX2J1cykpOwotCXBjaV9idXMgPSAmbHBjaV9idXM7Ci0JcGNpX2J1cy0+bnVtYmVyID0gZnVuYy0+YnVzOwotCWRldmZuID0gUENJX0RFVkZOKGZ1bmMtPmRldmljZSwgZnVuYy0+ZnVuY3Rpb24pOwotCi0JcmMgPSBwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7Ci0KLQljb21tYW5kIHw9IFBDSV9DT01NQU5EX1BBUklUWSB8IFBDSV9DT01NQU5EX1NFUlIKLQkJfCBQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9JTlZBTElEQVRFCi0JCXwgUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlk7Ci0KLQlyYyA9IHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQocGNpX2J1cywgZGV2Zm4sIFBDSV9DT01NQU5ELCBjb21tYW5kKTsKLQotCWlmIChjYXJkX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkgewotCi0JCXJjID0gcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsICZiY29tbWFuZCk7Ci0KLQkJYmNvbW1hbmQgfD0gUENJX0JSSURHRV9DVExfUEFSSVRZIHwgUENJX0JSSURHRV9DVExfU0VSUgotCQkJfCBQQ0lfQlJJREdFX0NUTF9OT19JU0E7Ci0KLQkJcmMgPSBwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKHBjaV9idXMsIGRldmZuLCBQQ0lfQlJJREdFX0NPTlRST0wsIGJjb21tYW5kKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbGVnYWN5X3BjaWVocHJtX2luaXRfcGNpKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwY2llaHBybV9pbml0KGVudW0gcGhwX2N0bHJfdHlwZSBjdHJsX3R5cGUpCi17Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAoY3RybF90eXBlKSB7Ci0JY2FzZSBQQ0k6Ci0JCXJldHZhbCA9IGxlZ2FjeV9wY2llaHBybV9pbml0X3BjaSgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR2YWwgPSAtRU5PREVWOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBybV9ub25hY3BpLmggYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjEwNjAzYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocHJtX25vbmFjcGkuaAorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBQQ0lFSFBSTSBOT05BQ1BJOiBQSFAgUmVzb3VyY2UgTWFuYWdlciBmb3IgTm9uLUFDUEkvTGVnYWN5IHBsYXRmb3JtCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk1LDIwMDEgQ29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMSBJQk0gQ29ycC4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAotICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvcgotICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKLSAqIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqCi0gKiBTZW5kIGZlZWRiYWNrIHRvIDxncmVnQGtyb2FoLmNvbT4sIDxrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20+Ci0gKgotICovCi0KLSNpZm5kZWYgX1BDSUVIUFJNX05PTkFDUElfSF8KLSNkZWZpbmUgX1BDSUVIUFJNX05PTkFDUElfSF8KLQotc3RydWN0IGlycV9pbmZvIHsKLQl1OCBidXMsIGRldmZuOwkJLyogYnVzLCBkZXZpY2UgYW5kIGZ1bmN0aW9uICovCi0Jc3RydWN0IHsKLQkJdTggbGluazsJLyogSVJRIGxpbmUgSUQsIGNoaXBzZXQgZGVwZW5kZW50LCAwPW5vdCByb3V0ZWQgKi8KLQkJdTE2IGJpdG1hcDsJLyogQXZhaWxhYmxlIElSUXMgKi8KLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpcnFbNF07Ci0JdTggc2xvdDsJCS8qIHNsb3QgbnVtYmVyLCAwPW9uYm9hcmQgKi8KLQl1OCByZnU7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGlycV9yb3V0aW5nX3RhYmxlIHsKLQl1MzIgc2lnbmF0dXJlOwkJLyogUElSUV9TSUdOQVRVUkUgc2hvdWxkIGJlIGhlcmUgKi8KLQl1MTYgdmVyc2lvbjsJCS8qIFBJUlFfVkVSU0lPTiAqLwotCXUxNiBzaXplOwkJCS8qIFRhYmxlIHNpemUgaW4gYnl0ZXMgKi8KLQl1OCBydHJfYnVzLCBydHJfZGV2Zm47CS8qIFdoZXJlIHRoZSBpbnRlcnJ1cHQgcm91dGVyIGxpZXMgKi8KLQl1MTYgZXhjbHVzaXZlX2lycXM7CS8qIElSUXMgZGV2b3RlZCBleGNsdXNpdmVseSB0byBQQ0kgdXNhZ2UgKi8KLQl1MTYgcnRyX3ZlbmRvciwgcnRyX2RldmljZTsJLyogVmVuZG9yIGFuZCBkZXZpY2UgSUQgb2YgaW50ZXJydXB0IHJvdXRlciAqLwotCXUzMiBtaW5pcG9ydF9kYXRhOwkvKiBDcmFwICovCi0JdTggcmZ1WzExXTsKLQl1OCBjaGVja3N1bTsJCS8qIE1vZHVsbyAyNTYgY2hlY2tzdW0gbXVzdCBnaXZlIHplcm8gKi8KLQlzdHJ1Y3QgaXJxX2luZm8gc2xvdHNbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2VuZGlmCQkJCS8qIF9QQ0lFSFBSTV9OT05BQ1BJX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYWRscGFyX2NvcmUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCmluZGV4IGZjYjY2YjkuLmNjMDM2MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhZGxwYXJfY29yZS5jCkBAIC0xMzQsNDMgKzEzNCw2IEBACiAJCXJwYWRscGFyX2NsYWltX29uZV9idXMoY2hpbGRfYnVzKTsKIH0KIAotc3RhdGljIGludCBwY2lfYWRkX3NlY29uZGFyeV9idXMoc3RydWN0IGRldmljZV9ub2RlICpkbiwKLQkJc3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXYpCi17Ci0Jc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOwotCXU4IHNlY19idXNubzsKLQotCS8qIEdldCBidXNubyBvZiBkb3duc3RyZWFtIGJ1cyAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGJyaWRnZV9kZXYsIFBDSV9TRUNPTkRBUllfQlVTLCAmc2VjX2J1c25vKTsKLQotCS8qIEFsbG9jYXRlIGFuZCBhZGQgdG8gY2hpbGRyZW4gb2YgYnJpZGdlX2Rldi0+YnVzICovCi0JY2hpbGQgPSBwY2lfYWRkX25ld19idXMoYnJpZGdlX2Rldi0+YnVzLCBicmlkZ2VfZGV2LCBzZWNfYnVzbm8pOwotCWlmICghY2hpbGQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFkZCBzZWNvbmRhcnkgYnVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlzcHJpbnRmKGNoaWxkLT5uYW1lLCAiUENJIEJ1cyAjJTAyeCIsIGNoaWxkLT5udW1iZXIpOwotCi0JLyogRml4dXAgc3Vib3JkaW5hdGUgYnJpZGdlIGJhc2VzIGFuZCByZXNvdXJjZXMgKi8KLQlwY2liaW9zX2ZpeHVwX2J1cyhjaGlsZCk7Ci0KLQkvKiBDbGFpbSBuZXcgYnVzIHJlc291cmNlcyAqLwotCXJwYWRscGFyX2NsYWltX29uZV9idXMoYnJpZGdlX2Rldi0+YnVzKTsKLQotCWlmIChob3NlLT5sYXN0X2J1c25vIDwgY2hpbGQtPm51bWJlcikKLQkJaG9zZS0+bGFzdF9idXNubyA9IGNoaWxkLT5udW1iZXI7Ci0KLQlwZG4tPmJ1c3N1Ym5vID0gY2hpbGQtPm51bWJlcjsKLQotCS8qIGlvcmVtYXAoKSBmb3IgY2hpbGQgYnVzLCB3aGljaCBtYXkgb3IgbWF5IG5vdCBzdWNjZWVkICovCi0JcmVtYXBfYnVzX3JhbmdlKGNoaWxkKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX2ZpbmRfbmV3X2RldihzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldl9kbikKIHsKQEAgLTE4OCwyOSArMTUxLDQxIEBACiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmRscGFyX3BjaV9hZGRfYnVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IHBjaV9kbiAqcGRuID0gZG4tPmRhdGE7Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGRuLT5waGI7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIgPSBwZG4tPnBoYjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCS8qIFNjYW4gcGhiIGJ1cyBmb3IgRUFEUyBkZXZpY2UsIGFkZGluZyBuZXcgb25lIHRvIGJ1cy0+ZGV2aWNlcyAqLwotCWlmICghcGNpX3NjYW5fc2luZ2xlX2RldmljZShob3NlLT5idXMsIHBkbi0+ZGV2Zm4pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIG5vIGRldmljZSBvbiBidXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKKwkvKiBBZGQgRUFEUyBkZXZpY2UgdG8gUEhCIGJ1cywgYWRkaW5nIG5ldyBlbnRyeSB0byBidXMtPmRldmljZXMgKi8KKwlkZXYgPSBvZl9jcmVhdGVfcGNpX2RldihkbiwgcGhiLT5idXMsIHBkbi0+ZGV2Zm4pOworCWlmICghZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGNpIGRldiBmb3IgJXNcbiIsCisJCQkJX19GVU5DVElPTl9fLCBkbi0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSB8fAorCSAgICBkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9DQVJEQlVTKQorCQlvZl9zY2FuX3BjaV9icmlkZ2UoZG4sIGRldik7CisKKwlycGFwaHBfaW5pdF9uZXdfZGV2cyhkZXYtPnN1Ym9yZGluYXRlKTsKKworCS8qIENsYWltIG5ldyBidXMgcmVzb3VyY2VzICovCisJcnBhZGxwYXJfY2xhaW1fb25lX2J1cyhkZXYtPmJ1cyk7CisKKwkvKiBpb3JlbWFwKCkgZm9yIGNoaWxkIGJ1cywgd2hpY2ggbWF5IG9yIG1heSBub3Qgc3VjY2VlZCAqLworCSh2b2lkKSByZW1hcF9idXNfcmFuZ2UoZGV2LT5idXMpOworCiAJLyogQWRkIG5ldyBkZXZpY2VzIHRvIGdsb2JhbCBsaXN0cy4gIFJlZ2lzdGVyIGluIHByb2MsIHN5c2ZzLiAqLwotCXBjaV9idXNfYWRkX2RldmljZXMoaG9zZS0+YnVzKTsKKwlwY2lfYnVzX2FkZF9kZXZpY2VzKHBoYi0+YnVzKTsKIAogCS8qIENvbmZpcm0gbmV3IGJyaWRnZSBkZXYgd2FzIGNyZWF0ZWQgKi8KLQlkZXYgPSBkbHBhcl9maW5kX25ld19kZXYoaG9zZS0+YnVzLCBkbik7CisJZGV2ID0gZGxwYXJfZmluZF9uZXdfZGV2KHBoYi0+YnVzLCBkbik7CiAJaWYgKGRldikgewogCQlpZiAoZGV2LT5oZHJfdHlwZSAhPSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIGhlYWRlciB0eXBlICVkXG4iLAogCQkJCV9fRlVOQ1RJT05fXywgZGV2LT5oZHJfdHlwZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCi0JCWlmIChwY2lfYWRkX3NlY29uZGFyeV9idXMoZG4sIGRldikpCi0JCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlyZXR1cm4gZGV2OwpAQCAtMjE5LDcgKzE5NCw2IEBACiBzdGF0aWMgaW50IGRscGFyX2FkZF9wY2lfc2xvdChjaGFyICpkcmNfbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpkbikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCWludCByYzsKIAogCWlmIChycGFwaHBfZmluZF9wY2lfYnVzKGRuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzIsMTUgKzIwNiw2IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChkbi0+Y2hpbGQpIHsKLQkJcmMgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKGRldi0+c3Vib3JkaW5hdGUpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZW5hYmxlIHNsb3QgJXNcbiIsCi0JCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQogCS8qIEFkZCBob3RwbHVnIHNsb3QgKi8KIAlpZiAocnBhcGhwX2FkZF9zbG90KGRuKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWRkIGhvdHBsdWcgc2xvdCAlc1xuIiwKQEAgLTMwNiw3ICsyNzEsNyBAQAogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwogCi0JaWYgKFBDSV9ETihkbiktPnBoYikgeworCWlmIChQQ0lfRE4oZG4pICYmIFBDSV9ETihkbiktPnBoYikgewogCQkvKiBQSEIgYWxyZWFkeSBleGlzdHMgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDM1LDYgKzQwMCw4IEBACiAJCQkJX19GVU5DVElPTl9fLCBkcmNfbmFtZSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCX0gZWxzZSB7CisJCXJwYXBocF91bmNvbmZpZ19wY2lfYWRhcHRlcihidXMpOwogCX0KIAogCWlmICh1bm1hcF9idXNfcmFuZ2UoYnVzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwLmgKaW5kZXggNzFlYTVmOS4uNTdlYTcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocC5oCkBAIC05Myw2ICs5Myw4IEBACiBleHRlcm4gaW50IHJwYXBocF9lbmFibGVfcGNpX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9wY2lfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50IHJwYXBocF9nZXRfcGNpX2FkYXB0ZXJfc3RhdHVzKHN0cnVjdCBzbG90ICpzbG90LCBpbnQgaXNfaW5pdCwgdTggKiB2YWx1ZSk7CitleHRlcm4gdm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKK2V4dGVybiB2b2lkIHJwYXBocF9lZWhfaW5pdF9ub2RlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKTsKIAogZXh0ZXJuIGludCBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIGludCBycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIoc3RydWN0IHBjaV9idXMgKmJ1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9wY2kuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCmluZGV4IGY3YzEyZDcuLmE3ODU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX3BjaS5jCkBAIC0xNTQsOCArMTU0LDcgQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHBjaV9idXNfYWRkX2RldmljZXMgKi8KLXN0YXRpYyB2b2lkIAotcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKK3ZvaWQgcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZml4X2J1cykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCkBAIC0xODQsNiArMTgzLDIwIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgeworCQllZWhfYWRkX2RldmljZV9sYXRlKGRldik7CisJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKKwkJCXN0cnVjdCBwY2lfYnVzICpzdWJidXMgPSBkZXYtPnN1Ym9yZGluYXRlOworCQkJaWYgKHN1YmJ1cykKKwkJCQlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlIChzdWJidXMpOworCQl9CisJfQorfQorCiBzdGF0aWMgaW50IHJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXU4IHNlY19idXNubzsKQEAgLTIxNyw2ICsyMzAsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBycGFwaHBfaW5pdF9uZXdfZGV2cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXJwYXBocF9maXh1cF9uZXdfcGNpX2RldmljZXMoYnVzLCAwKTsKKwlycGFwaHBfZWVoX2FkZF9idXNfZGV2aWNlKGJ1cyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfaW5pdF9uZXdfZGV2cyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIHJwYXBocF9wY2lfY29uZmlnX3Nsb3QoKSB3aWxsICBjb25maWd1cmUgYWxsIGRldmljZXMgdW5kZXIgdGhlCiAgZ2l2ZW4gc2xvdC0+ZG4gYW5kIHJldHVybiB0aGUgdGhlIGZpcnN0IHBjaV9kZXYuCkBAIC0yMzMsMzYgKzI1Myw1MSBAQAogCWlmICghZG4gfHwgIWRuLT5jaGlsZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlzbG90bm8gPSBQQ0lfU0xPVChQQ0lfRE4oZG4tPmNoaWxkKS0+ZGV2Zm4pOworCWlmIChzeXN0ZW1jZmctPnBsYXRmb3JtID09IFBMQVRGT1JNX1BTRVJJRVNfTFBBUikgeworCQlvZl9zY2FuX2J1cyhkbiwgYnVzKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCi0JLyogcGNpX3NjYW5fc2xvdCBzaG91bGQgZmluZCBhbGwgY2hpbGRyZW4gKi8KLQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOwotCWlmIChudW0pIHsKLQkJcnBhcGhwX2ZpeHVwX25ld19wY2lfZGV2aWNlcyhidXMsIDEpOworCQlycGFwaHBfaW5pdF9uZXdfZGV2cyhidXMpOwogCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7Ci0JfQotCWlmIChsaXN0X2VtcHR5KCZidXMtPmRldmljZXMpKSB7Ci0JCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKLQkJaWYgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0JSSURHRSkKLQkJCXJwYXBocF9wY2lfY29uZmlnX2JyaWRnZShkZXYpOworCQlkZXYgPSBsaXN0X2VudHJ5KCZidXMtPmRldmljZXMsIHN0cnVjdCBwY2lfZGV2LCBidXNfbGlzdCk7CisJfSBlbHNlIHsKKwkJc2xvdG5vID0gUENJX1NMT1QoUENJX0ROKGRuLT5jaGlsZCktPmRldmZuKTsKKworCQkvKiBwY2lfc2Nhbl9zbG90IHNob3VsZCBmaW5kIGFsbCBjaGlsZHJlbiAqLworCQludW0gPSBwY2lfc2Nhbl9zbG90KGJ1cywgUENJX0RFVkZOKHNsb3RubywgMCkpOworCQlpZiAobnVtKSB7CisJCQlycGFwaHBfZml4dXBfbmV3X3BjaV9kZXZpY2VzKGJ1cywgMSk7CisJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGJ1cyk7CisJCX0KKwkJaWYgKGxpc3RfZW1wdHkoJmJ1cy0+ZGV2aWNlcykpIHsKKwkJCWVycigiJXM6IE5vIG5ldyBkZXZpY2UgZm91bmRcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKKwkJCWlmIChkZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpCisJCQkJcnBhcGhwX3BjaV9jb25maWdfYnJpZGdlKGRldik7CisKKwkJCXJwYXBocF9lZWhfYWRkX2J1c19kZXZpY2UoYnVzKTsKKwkJfQogCX0KIAogCXJldHVybiBkZXY7CiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9lZWgoc3RydWN0IGRldmljZV9ub2RlICpkbikKK3ZvaWQgcnBhcGhwX2VlaF9pbml0X25vZGVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpzaWI7CiAKIAlmb3IgKHNpYiA9IGRuLT5jaGlsZDsgc2liOyBzaWIgPSBzaWItPnNpYmxpbmcpIAotCQllbmFibGVfZWVoKHNpYik7CisJCXJwYXBocF9lZWhfaW5pdF9ub2RlcyhzaWIpOwogCWVlaF9hZGRfZGV2aWNlX2Vhcmx5KGRuKTsKIAlyZXR1cm47CiAJCiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfZWVoX2luaXRfbm9kZXMpOwogCiBzdGF0aWMgdm9pZCBwcmludF9zbG90X3BjaV9mdW5jcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewpAQCAtMjg5LDcgKzMyNCw3IEBACiAJaWYgKCFkbikKIAkJZ290byBleGl0OwogCi0JZW5hYmxlX2VlaChkbik7CisJcnBhcGhwX2VlaF9pbml0X25vZGVzKGRuKTsKIAlkZXYgPSBycGFwaHBfcGNpX2NvbmZpZ19zbG90KGJ1cyk7CiAJaWYgKCFkZXYpIHsKIAkJZXJyKCIlczogY2FuJ3QgZmluZCBhbnkgZGV2aWNlcy5cbiIsIF9fRlVOQ1RJT05fXyk7CkBAIC0zMzEsNiArMzY2LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGFwaHBfdW5jb25maWdfcGNpX2FkYXB0ZXIpOwogCiBzdGF0aWMgaW50IHNldHVwX3BjaV9ob3RwbHVnX3Nsb3RfaW5mbyhzdHJ1Y3Qgc2xvdCAqc2xvdCkKIHsKQEAgLTQ0NCw4ICs0ODAsOCBAQAogCQlyZXR2YWwgPSBycGFwaHBfY29uZmlnX3BjaV9hZGFwdGVyKHNsb3QtPmJ1cyk7CiAJCWlmICghcmV0dmFsKSB7CiAJCQlzbG90LT5zdGF0ZSA9IENPTkZJR1VSRUQ7Ci0JCQlkYmcoIiVzOiBQQ0kgZGV2aWNlcyBpbiBzbG90WyVzXSBoYXMgYmVlbiBjb25maWd1cmVkXG4iLCAKLQkJCQlfX0ZVTkNUSU9OX18sIHNsb3QtPm5hbWUpOworCQkJaW5mbygiJXM6IGRldmljZXMgaW4gc2xvdFslc10gY29uZmlndXJlZFxuIiwKKwkJCQkJX19GVU5DVElPTl9fLCBzbG90LT5uYW1lKTsKIAkJfSBlbHNlIHsKIAkJCXNsb3QtPnN0YXRlID0gTk9UX0NPTkZJR1VSRUQ7CiAJCQlkYmcoIiVzOiBubyBwY2lfZGV2IHN0cnVjdCBmb3IgYWRhcHRlciBpbiBzbG90WyVzXVxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3BjaS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKaW5kZXggYjhlOTVhYy4uMzgwMDliYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfcGNpLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICJzaHBjaHAuaCIKIAotdm9pZCBwcm9ncmFtX2Z3X3Byb3ZpZGVkX3ZhbHVlcyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIHZvaWQgcHJvZ3JhbV9md19wcm92aWRlZF92YWx1ZXMoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MTYgcGNpX2NtZCwgcGNpX2JjdGw7CiAJc3RydWN0IHBjaV9kZXYgKmNkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9tc2kuYyBiL2RyaXZlcnMvcGNpL21zaS5jCmluZGV4IGEyMDMzNTUuLjIwMmI3NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL21zaS5jCisrKyBiL2RyaXZlcnMvcGNpL21zaS5jCkBAIC0yMyw2ICsyMyw4IEBACiAjaW5jbHVkZSAicGNpLmgiCiAjaW5jbHVkZSAibXNpLmgiCiAKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFUJCWZpcnN0X2NwdShjcHVfb25saW5lX21hcCkKKwogc3RhdGljIERFRklORV9TUElOTE9DSyhtc2lfbG9jayk7CiBzdGF0aWMgc3RydWN0IG1zaV9kZXNjKiBtc2lfZGVzY1tOUl9JUlFTXSA9IHsgWzAgLi4uIE5SX0lSUVMtMV0gPSBOVUxMIH07CiBzdGF0aWMga21lbV9jYWNoZV90KiBtc2lfY2FjaGVwOwpAQCAtOTIsNiArOTQsNyBAQAogCXN0cnVjdCBtc2lfZGVzYyAqZW50cnk7CiAJc3RydWN0IG1zZ19hZGRyZXNzIGFkZHJlc3M7CiAJdW5zaWduZWQgaW50IGlycSA9IHZlY3RvcjsKKwl1bnNpZ25lZCBpbnQgZGVzdF9jcHUgPSBmaXJzdF9jcHUoY3B1X21hc2spOwogCiAJZW50cnkgPSAoc3RydWN0IG1zaV9kZXNjICopbXNpX2Rlc2NbdmVjdG9yXTsKIAlpZiAoIWVudHJ5IHx8ICFlbnRyeS0+ZGV2KQpAQCAtMTA4LDkgKzExMSw5IEBACiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChlbnRyeS0+ZGV2LCBtc2lfbG93ZXJfYWRkcmVzc19yZWcocG9zKSwKIAkJCSZhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGVudHJ5LT5kZXYsIG1zaV9sb3dlcl9hZGRyZXNzX3JlZyhwb3MpLAogCQkJYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlKTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiAJCWFkZHJlc3MubG9fYWRkcmVzcy52YWx1ZSA9IHJlYWRsKGVudHJ5LT5tYXNrX2Jhc2UgKyBvZmZzZXQpOwogCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgJj0gTVNJX0FERFJFU1NfREVTVF9JRF9NQVNLOwotCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9tYXNrX3RvX2FwaWNpZChjcHVfbWFzaykgPDwKLQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKLQkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfbWFza190b19hcGljaWQoY3B1X21hc2spOworCQlhZGRyZXNzLmxvX2FkZHJlc3MudmFsdWUgfD0gKGNwdV9waHlzaWNhbF9pZChkZXN0X2NwdSkgPDwKKwkJCQkJCQkJCU1TSV9UQVJHRVRfQ1BVX1NISUZUKTsKKwkJZW50cnktPm1zaV9hdHRyaWIuY3VycmVudF9jcHUgPSBjcHVfcGh5c2ljYWxfaWQoZGVzdF9jcHUpOwogCQl3cml0ZWwoYWRkcmVzcy5sb19hZGRyZXNzLnZhbHVlLCBlbnRyeS0+bWFza19iYXNlICsgb2Zmc2V0KTsKIAkJc2V0X25hdGl2ZV9pcnFfaW5mbyhpcnEsIGNwdV9tYXNrKTsKIAkJYnJlYWs7CkBAIC0yNTksMTQgKzI2MiwxNSBAQAogc3RhdGljIHZvaWQgbXNpX2FkZHJlc3NfaW5pdChzdHJ1Y3QgbXNnX2FkZHJlc3MgKm1zaV9hZGRyZXNzKQogewogCXVuc2lnbmVkIGludAlkZXN0X2lkOworCXVuc2lnbmVkIGxvbmcJZGVzdF9waHlzX2lkID0gY3B1X3BoeXNpY2FsX2lkKE1TSV9UQVJHRVRfQ1BVKTsKIAogCW1lbXNldChtc2lfYWRkcmVzcywgMCwgc2l6ZW9mKHN0cnVjdCBtc2dfYWRkcmVzcykpOwogCW1zaV9hZGRyZXNzLT5oaV9hZGRyZXNzID0gKHUzMikwOwogCWRlc3RfaWQgPSAoTVNJX0FERFJFU1NfSEVBREVSIDw8IE1TSV9BRERSRVNTX0hFQURFUl9TSElGVCk7Ci0JbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5kZXN0X21vZGUgPSBNU0lfREVTVF9NT0RFOworCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnUuZGVzdF9tb2RlID0gTVNJX1BIWVNJQ0FMX01PREU7CiAJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudS5yZWRpcmVjdGlvbl9oaW50ID0gTVNJX1JFRElSRUNUSU9OX0hJTlRfTU9ERTsKIAltc2lfYWRkcmVzcy0+bG9fYWRkcmVzcy51LmRlc3RfaWQgPSBkZXN0X2lkOwotCW1zaV9hZGRyZXNzLT5sb19hZGRyZXNzLnZhbHVlIHw9IChNU0lfVEFSR0VUX0NQVSA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CisJbXNpX2FkZHJlc3MtPmxvX2FkZHJlc3MudmFsdWUgfD0gKGRlc3RfcGh5c19pZCA8PCBNU0lfVEFSR0VUX0NQVV9TSElGVCk7CiB9CiAKIHN0YXRpYyBpbnQgbXNpX2ZyZWVfdmVjdG9yKHN0cnVjdCBwY2lfZGV2KiBkZXYsIGludCB2ZWN0b3IsIGludCByZWFzc2lnbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCBlOWUzN2FiLi5hOWIwMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTkxLDkgKzkxLDcgQEAKIHN0YXRpYyBhY3BpX3N0YXR1cyAgCiBhY3BpX3J1bl9vc2MgKAogCWFjcGlfaGFuZGxlCWhhbmRsZSwKLQl1MzIJCWxldmVsLAotCXZvaWQJCSpjb250ZXh0LAotCXZvaWQJCSoqcmV0dmFsICkKKwl2b2lkCQkqY29udGV4dCkKIHsKIAlhY3BpX3N0YXR1cwkJc3RhdHVzOwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0CWlucHV0OwpAQCAtMTg0LDcgKzE4Miw3IEBACiAgKgogICogQXR0ZW1wdCB0byB0YWtlIGNvbnRyb2wgZnJvbSBGaXJtd2FyZSBvbiByZXF1ZXN0ZWQgY29udHJvbCBiaXRzLgogICoqLwotYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpCithY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQogewogCWFjcGlfc3RhdHVzCXN0YXR1czsKIAl1MzIJCWN0cmxzZXQ7CkBAIC0xOTgsMTAgKzE5Niw3IEBACiAJCXJldHVybiBBRV9TVVBQT1JUOwogCX0KIAljdHJsc2V0X2J1ZltPU0NfQ09OVFJPTF9UWVBFXSB8PSBjdHJsc2V0OwotCXN0YXR1cyA9IGFjcGlfZ2V0X2RldmljZXMgKCBQQ0lfUk9PVF9ISURfU1RSSU5HLAotCQkJCWFjcGlfcnVuX29zYywKLQkJCQljdHJsc2V0X2J1ZiwKLQkJCQlOVUxMICk7CisJc3RhdHVzID0gYWNwaV9ydW5fb3NjKGhhbmRsZSwgY3RybHNldF9idWYpOwogCWlmIChBQ1BJX0ZBSUxVUkUgKHN0YXR1cykpIHsKIAkJY3RybHNldF9idWZbT1NDX0NPTlRST0xfVFlQRV0gJj0gfmN0cmxzZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDk0ZTY4YzUuLmE5MDQ2ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqIEFkZHMgYSBuZXcgZHluYW1pYyBwY2kgZGV2aWNlIElEIHRvIHRoaXMgZHJpdmVyLAogICogYW5kIGNhdXNlcyB0aGUgZHJpdmVyIHRvIHByb2JlIGZvciBhbGwgZGV2aWNlcyBhZ2Fpbi4KICAqLwotc3RhdGljIGlubGluZSBzc2l6ZV90CitzdGF0aWMgc3NpemVfdAogc3RvcmVfbmV3X2lkKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwY2lfZHluaWQgKmR5bmlkOwpAQCAtMzY0LDE1ICszNjQsMTYgQEAKIH07CiAKIC8qKgotICogcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKKyAqIF9fcGNpX3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgbmV3IHBjaSBkcml2ZXIKICAqIEBkcnY6IHRoZSBkcml2ZXIgc3RydWN0dXJlIHRvIHJlZ2lzdGVyCisgKiBAb3duZXI6IG93bmVyIG1vZHVsZSBvZiBkcnYKICAqIAogICogQWRkcyB0aGUgZHJpdmVyIHN0cnVjdHVyZSB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGRyaXZlcnMuCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAKICAqIElmIG5vIGVycm9yIG9jY3VycmVkLCB0aGUgZHJpdmVyIHJlbWFpbnMgcmVnaXN0ZXJlZCBldmVuIGlmIAogICogbm8gZGV2aWNlIHdhcyBjbGFpbWVkIGR1cmluZyByZWdpc3RyYXRpb24uCiAgKi8KLWludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpCitpbnQgX19wY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWludCBlcnJvcjsKIApAQCAtMzg5LDcgKzM5MCw3IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IFBDSSBkcml2ZXIgJXMgaGFzIGEgc3RydWN0ICIKIAkJCSJkZXZpY2VfZHJpdmVyIHNodXRkb3duIG1ldGhvZCwgcGxlYXNlIHVwZGF0ZSFcbiIsCiAJCQlkcnYtPm5hbWUpOwotCWRydi0+ZHJpdmVyLm93bmVyID0gZHJ2LT5vd25lcjsKKwlkcnYtPmRyaXZlci5vd25lciA9IG93bmVyOwogCWRydi0+ZHJpdmVyLmtvYmoua3R5cGUgPSAmcGNpX2RyaXZlcl9rb2JqX3R5cGU7CiAKIAlzcGluX2xvY2tfaW5pdCgmZHJ2LT5keW5pZHMubG9jayk7CkBAIC01MjYsNyArNTI3LDcgQEAKIAogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfaWQpOwogRVhQT1JUX1NZTUJPTChwY2lfbWF0Y2hfZGV2aWNlKTsKLUVYUE9SVF9TWU1CT0wocGNpX3JlZ2lzdGVyX2RyaXZlcik7CitFWFBPUlRfU1lNQk9MKF9fcGNpX3JlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV91bnJlZ2lzdGVyX2RyaXZlcik7CiBFWFBPUlRfU1lNQk9MKHBjaV9kZXZfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wocGNpX2J1c190eXBlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpLmMKaW5kZXggZTc0ZDc1OC4uOGUyODdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTYzLDExICs2MywzOCBAQAogCXJldHVybiBtYXg7CiB9CiAKK3N0YXRpYyBpbnQgX19wY2lfZmluZF9uZXh0X2NhcChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIHU4IHBvcywgaW50IGNhcCkKK3sKKwl1OCBpZDsKKwlpbnQgdHRsID0gNDg7CisKKwl3aGlsZSAodHRsLS0pIHsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcywgJnBvcyk7CisJCWlmIChwb3MgPCAweDQwKQorCQkJYnJlYWs7CisJCXBvcyAmPSB+MzsKKwkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwKKwkJCQkJICZpZCk7CisJCWlmIChpZCA9PSAweGZmKQorCQkJYnJlYWs7CisJCWlmIChpZCA9PSBjYXApCisJCQlyZXR1cm4gcG9zOworCQlwb3MgKz0gUENJX0NBUF9MSVNUX05FWFQ7CisJfQorCXJldHVybiAwOworfQorCitpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCkKK3sKKwlyZXR1cm4gX19wY2lfZmluZF9uZXh0X2NhcChkZXYtPmJ1cywgZGV2LT5kZXZmbiwKKwkJCQkgICBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgY2FwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9maW5kX25leHRfY2FwYWJpbGl0eSk7CisKIHN0YXRpYyBpbnQgX19wY2lfYnVzX2ZpbmRfY2FwKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgdTggaGRyX3R5cGUsIGludCBjYXApCiB7CiAJdTE2IHN0YXR1czsKLQl1OCBwb3MsIGlkOwotCWludCB0dGwgPSA0ODsKKwl1OCBwb3M7CiAKIAlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgUENJX1NUQVRVUywgJnN0YXR1cyk7CiAJaWYgKCEoc3RhdHVzICYgUENJX1NUQVRVU19DQVBfTElTVCkpCkBAIC03NiwyNCArMTAzLDE1IEBACiAJc3dpdGNoIChoZHJfdHlwZSkgewogCWNhc2UgUENJX0hFQURFUl9UWVBFX05PUk1BTDoKIAljYXNlIFBDSV9IRUFERVJfVFlQRV9CUklER0U6Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBQQ0lfQ0FQQUJJTElUWV9MSVNULCAmcG9zKTsKKwkJcG9zID0gUENJX0NBUEFCSUxJVFlfTElTVDsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUzoKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIFBDSV9DQl9DQVBBQklMSVRZX0xJU1QsICZwb3MpOworCQlwb3MgPSBQQ0lfQ0JfQ0FQQUJJTElUWV9MSVNUOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gMDsKIAl9Ci0Jd2hpbGUgKHR0bC0tICYmIHBvcyA+PSAweDQwKSB7Ci0JCXBvcyAmPSB+MzsKLQkJcGNpX2J1c19yZWFkX2NvbmZpZ19ieXRlKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9DQVBfTElTVF9JRCwgJmlkKTsKLQkJaWYgKGlkID09IDB4ZmYpCi0JCQlicmVhazsKLQkJaWYgKGlkID09IGNhcCkKLQkJCXJldHVybiBwb3M7Ci0JCXBjaV9idXNfcmVhZF9jb25maWdfYnl0ZShidXMsIGRldmZuLCBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCwgJnBvcyk7Ci0JfQotCXJldHVybiAwOworCXJldHVybiBfX3BjaV9maW5kX25leHRfY2FwKGJ1cywgZGV2Zm4sIHBvcywgY2FwKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDU2MjdjZTEuLjNhNGY0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC00NjIsMTEgKzQ2MiwxMSBAQAogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCAweDcwLCAmaG0pOwogCWhtICY9IFBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSzsKLQlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzg2OCBIVy1tb24iKTsKKwlxdWlya19pb19yZWdpb24oZGV2LCBobSwgMTI4LCBQQ0lfQlJJREdFX1JFU09VUkNFUyArIDEsICJ2dDgyYzY4NiBIVy1tb24iKTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4OTAsICZzbWIpOwogCXNtYiAmPSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7Ci0JcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM4NjggU01CIik7CisJcXVpcmtfaW9fcmVnaW9uKGRldiwgc21iLCAxNiwgUENJX0JSSURHRV9SRVNPVVJDRVMgKyAyLCAidnQ4MmM2ODYgU01CIik7CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80LAlxdWlya192dDgyYzY4Nl9hY3BpICk7CiAKQEAgLTEyNDMsNiArMTI0MywyMSBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfQU5ZX0lELCBxdWlya19uZXRtb3MpOwogCisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBmaXh1cF9yZXYxXzUzYzgxMChzdHJ1Y3QgcGNpX2RldiogZGV2KQoreworCS8qIHJldiAxIG5jcjUzYzgxMCBjaGlwcyBkb24ndCBzZXQgdGhlIGNsYXNzIGF0IGFsbCB3aGljaCBtZWFucworCSAqIHRoZXkgZG9uJ3QgZ2V0IHRoZWlyIHJlc291cmNlcyByZW1hcHBlZC4gRml4IHRoYXQgaGVyZS4KKwkgKi8KKworCWlmIChkZXYtPmNsYXNzID09IFBDSV9DTEFTU19OT1RfREVGSU5FRCkgeworCQlwcmludGsoS0VSTl9JTkZPICJOQ1IgNTNjODEwIHJldiAxIGRldGVjdGVkLCBzZXR0aW5nIFBDSSBjbGFzcy5cbiIpOworCQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX1NUT1JBR0VfU0NTSTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCwgZml4dXBfcmV2MV81M2M4MTApOworCisKIHN0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwgc3RydWN0IHBjaV9maXh1cCAqZW5kKQogewogCXdoaWxlIChmIDwgZW5kKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnIGIvZHJpdmVycy9wY21jaWEvS2NvbmZpZwppbmRleCBjY2YyMDAzLi4zMDllYjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiBjb25maWcgUENNQ0lBX004WFgKICAgICAgICAgdHJpc3RhdGUgIk1QQzh4eCBQQ01DSUEgc3VwcG9ydCIKLSAgICAgICAgZGVwZW5kcyBvbiBQQ01DSUEgJiYgUFBDCisgICAgICAgIGRlcGVuZHMgb24gUENNQ0lBICYmIFBQQyAmJiA4eHggCiAgICAgICAgIHNlbGVjdCBQQ0NBUkRfTk9OU1RBVElDCiAgICAgICAgIGhlbHAKICAgICAgICAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFBvd2VyUEMgOHh4IHNlcmllcyBQQ01DSUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL01ha2VmaWxlIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKaW5kZXggZmUzNzU0MS4uYmNlY2Y1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY21jaWEvTWFrZWZpbGUKQEAgLTI1LDcgKzI1LDcgQEAKIG9iai0kKENPTkZJR19JODIzNjUpCQkJCSs9IGk4MjM2NS5vCiBvYmotJChDT05GSUdfSTgyMDkyKQkJCQkrPSBpODIwOTIubwogb2JqLSQoQ09ORklHX1RDSUMpCQkJCSs9IHRjaWMubwotb2JqLSQoQ09ORklHX1BDTUNJQV9NOFhYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IG04eHhfcGNtY2lhLm8KK29iai0kKENPTkZJR19QQ01DSUFfTThYWCkJCQkrPSBtOHh4X3BjbWNpYS5vCiBvYmotJChDT05GSUdfSEQ2NDQ2NV9QQ01DSUEpCQkJKz0gaGQ2NDQ2NV9zcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTEwMCkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTEwMF9jcy5vCiBvYmotJChDT05GSUdfUENNQ0lBX1NBMTExMSkJCQkrPSBzYTExeHhfY29yZS5vIHNhMTExMV9jcy5vCkBAIC00NywxMCArNDcsMTAgQEAKIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX1BCMTUwMCkJCQkrPSBhdTEwMDBfcGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTAwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KIGF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTEwMCkJCQkrPSBhdTEwMDBfZGIxeDAwLm8KLWF1MXgwMF9zcy0kKENPTkZJR19NSVBTX0RCMTIwMCkgICAgICAgICAgICAgICAgICs9IGF1MTAwMF9kYjF4MDAubworYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxMjAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTAwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwogYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfREIxNTUwKQkJCSs9IGF1MTAwMF9kYjF4MDAubwotYXUxeDAwX3NzLSQoQ09ORklHX01JUFNfWFhTMTUwMCkgICAgICAgICAgICAgICArPSBhdTEwMDBfeHhzMTUwMC5vCithdTF4MDBfc3MtJChDT05GSUdfTUlQU19YWFMxNTAwKQkJKz0gYXUxMDAwX3h4czE1MDAubwogCiBzYTExMTFfY3MteQkJCQkJKz0gc2ExMTExX2dlbmVyaWMubwogc2ExMTExX2NzLSQoQ09ORklHX0FTU0FCRVRfTkVQT05TRVQpCQkrPSBzYTExMDBfbmVwb25zZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2RiMXgwMC5jCmluZGV4IDI0Y2ZlZTEuLmFiYzEzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9kYjF4MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZGIxeDAwLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuaAppbmRleCBiMGU3OTA4Li5mMmM5NzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5oCisrKyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmgKQEAgLTIyLDYgKzIyLDggQEAKICNkZWZpbmUgX19BU01fQVUxMDAwX1BDTUNJQV9ICiAKIC8qIGluY2x1ZGUgdGhlIHdvcmxkICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKICNpbmNsdWRlIDxwY21jaWEvY3NfdHlwZXMuaD4KICNpbmNsdWRlIDxwY21jaWEvY3MuaD4KICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYyBiL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9wYjF4MDAuYwppbmRleCA4NmMwODA4Li5mZDU1MjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfcGIxeDAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3BiMXgwMC5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfeHhzMTUwMC5jCmluZGV4IDAxYTg5NWIuLjAxODc0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF94eHMxNTAwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX3h4czE1MDAuYwpAQCAtMjcsNyArMjcsNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDdjZTQ1NWQuLjRkZGQ3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMzY2LDYgKzEzNjYsNyBAQAogICAgIGlmIChzb2NrZXRzID09IDApIHsKIAlwcmludGsoIm5vdCBmb3VuZC5cbiIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZpODIzNjVfZGV2aWNlKTsKKwlyZWxlYXNlX3JlZ2lvbihpMzY1X2Jhc2UsIDIpOwogCWRyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIAlyZXR1cm4gLUVOT0RFVjsKICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jIGIvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYwppbmRleCBmOGJlZDg3Li42ZDlmNzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKQEAgLTM5LDcgKzM5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTAsNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgpAQCAtNTQ2LDI5ICs1NDYsMTEgQEAKIAlmcmVlX2lycShwY21jaWFfc2NobHZsLCBOVUxMKTsKIH0KIAotLyogY29waWVkIGZyb20gdGNpYy5jICovCi0KLXN0YXRpYyBpbnQgbTh4eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSwgdTMyIGxldmVsKQotewotICAgICAgICBpbnQgcmV0ID0gMDsKLSAgICAgICAgaWYgKGxldmVsID09IFNVU1BFTkRfU0FWRV9TVEFURSkKLSAgICAgICAgICAgICAgICByZXQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kKGRldiwgc3RhdGUpOwotICAgICAgICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG04eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKLXsKLSAgICAgICAgaW50IHJldCA9IDA7Ci0gICAgICAgIGlmIChsZXZlbCA9PSBSRVNVTUVfUkVTVE9SRV9TVEFURSkKLSAgICAgICAgICAgICAgICByZXQgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoZGV2KTsKLSAgICAgICAgcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG04eHhfZHJpdmVyID0gewogICAgICAgICAubmFtZSA9ICJtOHh4LXBjbWNpYSIsCiAgICAgICAgIC5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0gICAgICAgIC5zdXNwZW5kID0gbTh4eF9kcnZfc3VzcGVuZCwKLSAgICAgICAgLnJlc3VtZSA9IG04eHhfZHJ2X3Jlc3VtZSwKKyAgICAgICAgLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAorICAgICAgICAucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTh4eF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCAxYzhhZDJmLi5kYThjNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTgsNyArOCw3IEBACiAgKiAgICBBdXRob3Iocyk6IE9yaWdpbmFsIENvZGUgd3JpdHRlbiBieQogICoJCQkgIERKIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQogICoJCSBSZXdyaXR0ZW4gYnkKLSAqCQkJICBGcmFuayBQYXZsaWMgKHBhdmxpY0BkZS5pYm0uY29tKSBhbmQKKyAqCQkJICBGcmFuayBQYXZsaWMgKGZwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCiAgKgkJIAkgIE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqCiAgKiAgICAkUmV2aXNpb246IDEuOTkgJAkgJERhdGU6IDIwMDUvMDUvMTEgMDg6MTA6MTcgJApAQCAtMjM0Miw2ICsyMzQyLDYgQEAKIG1vZHVsZV9pbml0KGxjc19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChsY3NfY2xlYW51cF9tb2R1bGUpOwogCi1NT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPiIpOworTU9EVUxFX0FVVEhPUigiRnJhbmsgUGF2bGljIDxmcGF2bGljQGRlLmlibS5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKaW5kZXggMzhhMjQ0MS4uZDIzOGM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoLmgKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KQEAgLTI0LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInFldGhfbXBjLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0ggCQkiJFJldmlzaW9uOiAxLjE0MiAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfSCAJCSIkUmV2aXNpb246IDEuMTUyICQiCiAKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAjZGVmaW5lIFFFVEhfVkVSU0lPTl9JUFY2IAkiOklQdjYiCkBAIC03MTgsOCArNzE5LDYgQEAKIAlhdG9taWNfdCByZWZjbnQ7CiB9OwogCi0jZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhfRUNITyAgICAxCi0jZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITyAyCiAKIHN0cnVjdCBxZXRoX2NhcmRfYmxrdCB7CiAJaW50IHRpbWVfdG90YWw7CkBAIC03MjcsOCArNzI2LDEwIEBACiAJaW50IGludGVyX3BhY2tldF9qdW1ibzsKIH07CiAKLQotCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhfRUNITyAgICAweDAxCisjZGVmaW5lIFFFVEhfQlJPQURDQVNUX1dJVEhPVVRfRUNITyAweDAyCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUFECSAgICAweDAxCisjZGVmaW5lIFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEICAweDAyCiBzdHJ1Y3QgcWV0aF9jYXJkX2luZm8gewogCXVuc2lnbmVkIHNob3J0IHVuaXRfYWRkcjI7CiAJdW5zaWduZWQgc2hvcnQgY3VsYTsKQEAgLTczNiw3ICs3MzcsNyBAQAogCV9fdTE2IGZ1bmNfbGV2ZWw7CiAJY2hhciBtY2xfbGV2ZWxbUUVUSF9NQ0xfTEVOR1RIICsgMV07CiAJaW50IGd1ZXN0bGFuOwotCWludCBsYXllcjJfbWFjX3JlZ2lzdGVyZWQ7CisJaW50IG1hY19iaXRzOwogCWludCBwb3J0bmFtZV9yZXF1aXJlZDsKIAlpbnQgcG9ydG5vOwogCWNoYXIgcG9ydG5hbWVbOV07CkBAIC03NDksNiArNzUwLDcgQEAKIAlpbnQgdW5pcXVlX2lkOwogCXN0cnVjdCBxZXRoX2NhcmRfYmxrdCBibGt0OwogCV9fdTMyIGNzdW1fbWFzazsKKwllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgcHJvbWlzY19tb2RlOwogfTsKIAogc3RydWN0IHFldGhfY2FyZF9vcHRpb25zIHsKQEAgLTc3NSw2ICs3NzcsNyBAQAogZW51bSBxZXRoX3RocmVhZHMgewogCVFFVEhfU0VUX0lQX1RIUkVBRCAgPSAxLAogCVFFVEhfUkVDT1ZFUl9USFJFQUQgPSAyLAorCVFFVEhfU0VUX1BST01JU0NfTU9ERV9USFJFQUQgPSA0LAogfTsKIAogc3RydWN0IHFldGhfb3NuX2luZm8gewpAQCAtMTA3NCw2ICsxMDc3LDI2IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIGludAorcWV0aF9pc2RpZ2l0KGNoYXIgKiBidWYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFpc2RpZ2l0KCpidWYrKykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitxZXRoX2lzeGRpZ2l0KGNoYXIgKiBidWYpCit7CisJd2hpbGUgKCpidWYpIHsKKwkJaWYgKCFpc3hkaWdpdCgqYnVmKyspKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQKIHFldGhfaXBhZGRyNF90b19zdHJpbmcoY29uc3QgX191OCAqYWRkciwgY2hhciAqYnVmKQogewpAQCAtMTA5MCwxOCArMTExMywyNyBAQAogCWludCBpOwogCiAJc3RhcnQgPSBidWY7Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlpZiAoIShlbmQgPSBzdHJjaHIoc3RhcnQsICcuJykpKQorCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGkgPT0gMykgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LDB4YSk7CisJCQlpZiAoZW5kKQorCQkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQkJZWxzZQkJCisJCQkJbGVuID0gc3RybGVuKHN0YXJ0KTsKKwkJfQorCQllbHNlIHsKKwkJCWVuZCA9IHN0cmNocihzdGFydCwgJy4nKTsKKwkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQl9CisJCWlmICgobGVuIDw9IDApIHx8IChsZW4gPiAzKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlsZW4gPSBlbmQgLSBzdGFydDsKIAkJbWVtc2V0KGFidWYsIDAsIDQpOwogCQlzdHJuY3B5KGFidWYsIHN0YXJ0LCBsZW4pOworCQlpZiAoIXFldGhfaXNkaWdpdChhYnVmKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCQlhZGRyW2ldID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTApOwogCQlzdGFydCA9IGVuZCArIDE7CiAJfQotCW1lbXNldChhYnVmLCAwLCA0KTsKLQlzdHJjcHkoYWJ1Ziwgc3RhcnQpOwotCWFkZHJbM10gPSBzaW1wbGVfc3RydG91bChhYnVmLCAmdG1wLCAxMCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjgsMTggKzExNjAsMjcgQEAKIAogCXRtcF9hZGRyID0gKHUxNiAqKWFkZHI7CiAJc3RhcnQgPSBidWY7Ci0JZm9yIChpID0gMDsgaSA8IDc7IGkrKykgewotCQlpZiAoIShlbmQgPSBzdHJjaHIoc3RhcnQsICc6JykpKQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKGkgPT0gNykgeworCQkJZW5kID0gc3RyY2hyKHN0YXJ0LDB4YSk7CisJCQlpZiAoZW5kKQorCQkJCWxlbiA9IGVuZCAtIHN0YXJ0OworCQkJZWxzZQorCQkJCWxlbiA9IHN0cmxlbihzdGFydCk7CisJCX0KKwkJZWxzZSB7CisJCQllbmQgPSBzdHJjaHIoc3RhcnQsICc6Jyk7CisJCQlsZW4gPSBlbmQgLSBzdGFydDsKKwkJfQorCQlpZiAoKGxlbiA8PSAwKSB8fCAobGVuID4gNCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJbGVuID0gZW5kIC0gc3RhcnQ7CiAJCW1lbXNldChhYnVmLCAwLCA1KTsKIAkJc3RybmNweShhYnVmLCBzdGFydCwgbGVuKTsKKwkJaWYgKCFxZXRoX2lzeGRpZ2l0KGFidWYpKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXRtcF9hZGRyW2ldID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTYpOwogCQlzdGFydCA9IGVuZCArIDE7CiAJfQotCW1lbXNldChhYnVmLCAwLCA1KTsKLQlzdHJjcHkoYWJ1Ziwgc3RhcnQpOwotCXRtcF9hZGRyWzddID0gc2ltcGxlX3N0cnRvdWwoYWJ1ZiwgJnRtcCwgMTYpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwppbmRleCA2OTIwMDNjLi45OWNjZWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yMjQgJCkKKyAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgKCRSZXZpc2lvbjogMS4yNDIgJCkKICAqCiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICoKQEAgLTksMTAgKzksMTAgQEAKICAqICAgIEF1dGhvcihzKTogT3JpZ2luYWwgQ29kZSB3cml0dGVuIGJ5CiAgKgkJCSAgVXR6IEJhY2hlciAodXR6LmJhY2hlckBkZS5pYm0uY29tKQogICoJCSBSZXdyaXR0ZW4gYnkKLSAqCQkJICBGcmFuayBQYXZsaWMgKHBhdmxpY0BkZS5pYm0uY29tKSBhbmQKKyAqCQkJICBGcmFuayBQYXZsaWMgKGZwYXZsaWNAZGUuaWJtLmNvbSkgYW5kCiAgKgkJIAkgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KICAqCi0gKiAgICAkUmV2aXNpb246IDEuMjI0ICQJICREYXRlOiAyMDA1LzA1LzA0IDIwOjE5OjE4ICQKKyAqICAgICRSZXZpc2lvbjogMS4yNDIgJAkgJERhdGU6IDIwMDUvMDUvMDQgMjA6MTk6MTggJAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgInFldGhfZWRkcC5oIgogI2luY2x1ZGUgInFldGhfdHNvLmgiCiAKLSNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yMjQgJCIKKyNkZWZpbmUgVkVSU0lPTl9RRVRIX0MgIiRSZXZpc2lvbjogMS4yNDIgJCIKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gInFldGggUy8zOTAgT1NBLUV4cHJlc3MgZHJpdmVyIjsKIAogLyoqCkBAIC0xNjAsNiArMTYwLDkgQEAKIHFldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiBzdGF0aWMgdm9pZAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlKHN0cnVjdCBxZXRoX2NhcmQgKik7CisKK3N0YXRpYyB2b2lkCiBxZXRoX25vdGlmeV9wcm9jZXNzZXModm9pZCkKIHsKIAkvKm5vdGlmeSBhbGwgIHJlZ2lzdGVyZWQgcHJvY2Vzc2VzICovCkBAIC02MDIsMTEgKzYwNSwyMCBAQAogCWludCBmb3VuZCA9IDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkZHIsICZjYXJkLT5pcF9saXN0LCBlbnRyeSkgeworCQlpZiAoY2FyZC0+b3B0aW9ucy5sYXllcjIpIHsKKwkJCWlmICgoYWRkci0+dHlwZSA9PSB0b2RvLT50eXBlKSAmJgorCQkJICAgIChtZW1jbXAoJmFkZHItPm1hYywgJnRvZG8tPm1hYywgCisJCQkJICAgIE9TQV9BRERSX0xFTikgPT0gMCkpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCQljb250aW51ZTsKKwkJfSAKIAkJaWYgKChhZGRyLT5wcm90byAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAmJgogCQkgICAgKHRvZG8tPnByb3RvICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICYmCiAJCSAgICAoYWRkci0+dHlwZSAgICAgID09IHRvZG8tPnR5cGUpICAgICAgJiYKIAkJICAgIChhZGRyLT51LmE0LmFkZHIgPT0gdG9kby0+dS5hNC5hZGRyKSAmJgotCQkgICAgKGFkZHItPnUuYTQubWFzayA9PSB0b2RvLT51LmE0Lm1hc2spICAgKXsKKwkJICAgIChhZGRyLT51LmE0Lm1hc2sgPT0gdG9kby0+dS5hNC5tYXNrKSkgewogCQkJZm91bmQgPSAxOwogCQkJYnJlYWs7CiAJCX0KQEAgLTYxNSwxMiArNjI3LDEyIEBACiAJCSAgICAoYWRkci0+dHlwZSAgICAgICAgPT0gdG9kby0+dHlwZSkgICAgICAgICAmJgogCQkgICAgKGFkZHItPnUuYTYucGZ4bGVuID09IHRvZG8tPnUuYTYucGZ4bGVuKSAgJiYKIAkJICAgIChtZW1jbXAoJmFkZHItPnUuYTYuYWRkciwgJnRvZG8tPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpICAgICB7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQogCX0KLQlpZiAoZm91bmQpeworCWlmIChmb3VuZCkgewogCQlhZGRyLT51c2VycyArPSB0b2RvLT51c2VyczsKIAkJaWYgKGFkZHItPnVzZXJzIDw9IDApewogCQkJKl9fYWRkciA9IGFkZHI7CkBAIC02MzIsNyArNjQ0LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJfQotCWlmICh0b2RvLT51c2VycyA+IDApeworCWlmICh0b2RvLT51c2VycyA+IDApIHsKIAkJLyogZm9yIFZJUEEgYW5kIFJYSVAgbGltaXQgcmVmY291bnQgdG8gMSAqLwogCQlpZiAodG9kby0+dHlwZSAhPSBRRVRIX0lQX1RZUEVfTk9STUFMKQogCQkJdG9kby0+dXNlcnMgPSAxOwpAQCAtNjgyLDEyICs2OTQsMjIgQEAKIAkJaWYgKChhZGRyLT50eXBlID09IFFFVEhfSVBfVFlQRV9ERUxfQUxMX01DKSAmJgogCQkgICAgKHRtcC0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykpCiAJCQlyZXR1cm4gMDsKKwkJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CisJCQlpZiAoKHRtcC0+dHlwZQk9PSBhZGRyLT50eXBlKQkmJgorCQkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCisJCQkgICAgKG1lbWNtcCgmdG1wLT5tYWMsICZhZGRyLT5tYWMsIAorCQkJCSAgICBPU0FfQUREUl9MRU4pID09IDApKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0gCSAKIAkJaWYgKCh0bXAtPnByb3RvICAgICAgICA9PSBRRVRIX1BST1RfSVBWNCkgICAgICYmCiAJCSAgICAoYWRkci0+cHJvdG8gICAgICAgPT0gUUVUSF9QUk9UX0lQVjQpICAgICAmJgogCQkgICAgKHRtcC0+dHlwZSAgICAgICAgID09IGFkZHItPnR5cGUpICAgICAgICAgJiYKIAkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICYmCiAJCSAgICAodG1wLT51LmE0LmFkZHIgICAgPT0gYWRkci0+dS5hNC5hZGRyKSAgICAmJgotCQkgICAgKHRtcC0+dS5hNC5tYXNrICAgID09IGFkZHItPnUuYTQubWFzaykgICAgICApeworCQkgICAgKHRtcC0+dS5hNC5tYXNrICAgID09IGFkZHItPnUuYTQubWFzaykpIHsKIAkJCWZvdW5kID0gMTsKIAkJCWJyZWFrOwogCQl9CkBAIC02OTcsNyArNzE5LDcgQEAKIAkJICAgICh0bXAtPmlzX211bHRpY2FzdCA9PSBhZGRyLT5pc19tdWx0aWNhc3QpICAmJgogCQkgICAgKHRtcC0+dS5hNi5wZnhsZW4gID09IGFkZHItPnUuYTYucGZ4bGVuKSAgICYmCiAJCSAgICAobWVtY21wKCZ0bXAtPnUuYTYuYWRkciwgJmFkZHItPnUuYTYuYWRkciwKLQkJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkgICAgICAgICl7CisJCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CiAJCQlmb3VuZCA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtNzA3LDcgKzcyOSw3IEBACiAJCQl0bXAtPnVzZXJzICs9IGFkZHItPnVzZXJzOwogCQllbHNlCiAJCQl0bXAtPnVzZXJzICs9IGFkZD8gMTotMTsKLQkJaWYgKHRtcC0+dXNlcnMgPT0gMCl7CisJCWlmICh0bXAtPnVzZXJzID09IDApIHsKIAkJCWxpc3RfZGVsKCZ0bXAtPmVudHJ5KTsKIAkJCWtmcmVlKHRtcCk7CiAJCX0KQEAgLTczOCwxMiArNzYwLDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAwOwogCi0JUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJkZWxpcCIpOwotCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTQuYWRkciw0KTsKKwlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAiZGVsaXAiKTsKKworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+bWFjLCA2KTsKKwllbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKIAllbHNlIHsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTYuYWRkciw4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikrOCw4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCXJjID0gX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDApOwpAQCAtNzU3LDEyICs3ODIsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKLQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImFkZGlwIik7Ci0JaWYgKGFkZHItPnByb3RvID09IFFFVEhfUFJPVF9JUFY0KQotCQlRRVRIX0RCRl9IRVgodHJhY2UsNCwmYWRkci0+dS5hNC5hZGRyLDQpOworCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJhZGRpcCIpOworCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+bWFjLCA2KTsKKwllbHNlIGlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNCkKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNC5hZGRyLCA0KTsKIAllbHNlIHsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsJmFkZHItPnUuYTYuYWRkciw4KTsKLQkJUUVUSF9EQkZfSEVYKHRyYWNlLDQsKChjaGFyICopJmFkZHItPnUuYTYuYWRkcikrOCw4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAmYWRkci0+dS5hNi5hZGRyLCA4KTsKKwkJUUVUSF9EQkZfSEVYKHRyYWNlLCA0LCAoKGNoYXIgKikmYWRkci0+dS5hNi5hZGRyKSArIDgsIDgpOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCXJjID0gX19xZXRoX2luc2VydF9pcF90b2RvKGNhcmQsIGFkZHIsIDEpOwpAQCAtNzc1LDcgKzgwMiw3IEBACiB7CiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyLCAqdG1wOwogCWludCByYzsKLQorYWdhaW46CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkZHIsIHRtcCwgJmNhcmQtPmlwX2xpc3QsIGVudHJ5KSB7CiAJCWlmIChhZGRyLT5pc19tdWx0aWNhc3QpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlwX2xvY2ssICpmbGFncyk7CkBAIC03ODQsNiArODExLDcgQEAKIAkJCWlmICghcmMpIHsKIAkJCQlsaXN0X2RlbCgmYWRkci0+ZW50cnkpOwogCQkJCWtmcmVlKGFkZHIpOworCQkJCWdvdG8gYWdhaW47CiAJCQl9CiAJCX0KIAl9CkBAIC04NTEsNiArODc5LDcgQEAKIAogc3RhdGljIHZvaWQgcWV0aF9kZWxldGVfbWNfYWRkcmVzc2VzKHN0cnVjdCBxZXRoX2NhcmQgKik7CiBzdGF0aWMgdm9pZCBxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NChzdHJ1Y3QgcWV0aF9jYXJkICopOworc3RhdGljIHZvaWQgcWV0aF9sYXllcjJfYWRkX211bHRpY2FzdChzdHJ1Y3QgcWV0aF9jYXJkICopOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIHN0YXRpYyB2b2lkIHFldGhfYWRkX211bHRpY2FzdF9pcHY2KHN0cnVjdCBxZXRoX2NhcmQgKik7CiAjZW5kaWYKQEAgLTkzOSw2ICs5NjgsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIERyaXZlIHRoZSBTRVRfUFJPTUlTQ19NT0RFIHRocmVhZAorICovCitzdGF0aWMgaW50CitxZXRoX3NldF9wcm9taXNjX21vZGUodm9pZCAqcHRyKQoreworCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSAoc3RydWN0IHFldGhfY2FyZCAqKSBwdHI7CisKKwlkYWVtb25pemUoInFldGhfc2V0cHJtIik7CisJUUVUSF9EQkZfVEVYVCh0cmFjZSw0LCJzZXRwcm0xIik7CisJaWYgKCFxZXRoX2RvX3J1bl90aHJlYWQoY2FyZCwgUUVUSF9TRVRfUFJPTUlTQ19NT0RFX1RIUkVBRCkpCisJCXJldHVybiAwOworCVFFVEhfREJGX1RFWFQodHJhY2UsNCwic2V0cHJtMiIpOworCXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShjYXJkKTsKKwlxZXRoX2NsZWFyX3RocmVhZF9ydW5uaW5nX2JpdChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogcWV0aF9yZWNvdmVyKHZvaWQgKnB0cikKIHsKQEAgLTEwMDUsNiArMTA1Miw4IEBACiAKIAlpZiAocWV0aF9kb19zdGFydF90aHJlYWQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSkKIAkJa2VybmVsX3RocmVhZChxZXRoX3JlZ2lzdGVyX2lwX2FkZHJlc3NlcywgKHZvaWQgKiljYXJkLFNJR0NITEQpOworCWlmIChxZXRoX2RvX3N0YXJ0X3RocmVhZChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKSkKKwkJa2VybmVsX3RocmVhZChxZXRoX3NldF9wcm9taXNjX21vZGUsICh2b2lkICopY2FyZCwgU0lHQ0hMRCk7CiAJaWYgKHFldGhfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQpKQogCQlrZXJuZWxfdGhyZWFkKHFldGhfcmVjb3ZlciwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CiB9CkBAIC0zNzQ5LDcgKzM3OTgsNyBAQAogCiAJaWYgKCAoY2FyZC0+aW5mby50eXBlICE9IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKIAkgICAgIChjYXJkLT5vcHRpb25zLmxheWVyMikgJiYKLQkgICAgICghY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQpKSB7CisJICAgICAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKSkgewogCQlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIm5vbWFjYWRyIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQpAQCAtNDMxMSw2ICs0MzYwLDggQEAKIG91dDoKIAlpZiAoZmx1c2hfY291bnQpCiAJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwgc3RhcnRfaW5kZXgsIGZsdXNoX2NvdW50KTsKKwllbHNlIGlmICghYXRvbWljX3JlYWQoJnF1ZXVlLT5zZXRfcGNpX2ZsYWdzX2NvdW50KSkKKwkJYXRvbWljX3N3YXAoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9MT0NLRURfRkxVU0gpOwogCS8qCiAJICogcXVldWUtPnN0YXRlIHdpbGwgZ28gZnJvbSBMT0NLRUQgLT4gVU5MT0NLRUQgb3IgZnJvbQogCSAqIExPQ0tFRF9GTFVTSCAtPiBMT0NLRUQgaWYgb3V0cHV0X2hhbmRsZXIgd2FudGVkIHRvICdub3RpZnknIHVzCkBAIC00OTc1LDYgKzUwMjYsMTAgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nKTsKIAogc3RhdGljIGludAorcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSk7CitzdGF0aWMgaW50CiBxZXRoX3NlbmRfc2V0YXNzcGFybXMoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICosCiAJCSAgICAgIF9fdTE2LCBsb25nLAogCQkgICAgICBpbnQgKCpyZXBseV9jYikKQEAgLTUzMDEsOCArNTM1Niw3IEBACiAJc3RydWN0IHFldGhfaXBhZGRyICphZGRyOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNCwgImZydmFkZHI0Iik7Ci0JaWYgKCFjYXJkLT52bGFuZ3JwKQotCQlyZXR1cm47CisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3JjdShjYXJkLT52bGFuZ3JwLT52bGFuX2RldmljZXNbdmlkXSk7CiAJaWYgKCFpbl9kZXYpCkBAIC01MzMwLDggKzUzODQsNyBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqYWRkcjsKIAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDQsICJmcnZhZGRyNiIpOwotCWlmICghY2FyZC0+dmxhbmdycCkKLQkJcmV0dXJuOworCiAJaW42X2RldiA9IGluNl9kZXZfZ2V0KGNhcmQtPnZsYW5ncnAtPnZsYW5fZGV2aWNlc1t2aWRdKTsKIAlpZiAoIWluNl9kZXYpCiAJCXJldHVybjsKQEAgLTUzNTEsMTAgKzU0MDQsMzggQEAKIH0KIAogc3RhdGljIHZvaWQKK3FldGhfZnJlZV92bGFuX2FkZHJlc3NlcyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCB1bnNpZ25lZCBzaG9ydCB2aWQpCit7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8ICFjYXJkLT52bGFuZ3JwKQorCQlyZXR1cm47CisJcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzNChjYXJkLCB2aWQpOworCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczYoY2FyZCwgdmlkKTsKK30KKworc3RhdGljIGludAorcWV0aF9sYXllcjJfc2VuZF9zZXRkZWx2bGFuX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKyAgICAgICAgc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCisgICAgICAgIFFFVEhfREJGX1RFWFQodHJhY2UsIDIsICJMMnNkdmNiIik7CisgICAgICAgIGNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7CisgICAgICAgIGlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkgeworCQlQUklOVF9FUlIoIkVycm9yIGluIHByb2Nlc3NpbmcgVkxBTiAlaSBvbiAlczogMHgleC4gIgorCQkJICAiQ29udGludWluZ1xuIixjbWQtPmRhdGEuc2V0ZGVsdmxhbi52bGFuX2lkLCAKKwkJCSAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgIkwyVkwlNHgiLCBjbWQtPmhkci5jb21tYW5kKTsKKwkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOworCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgImVyciVkIiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOworCX0KKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3UxNiBpLAogCQkJICAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQpCiB7Ci0gCWludCByYzsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCkBAIC01MzYyLDE1ICs1NDQzLDggQEAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKICAgICAgICAgY21kLT5kYXRhLnNldGRlbHZsYW4udmxhbl9pZCA9IGk7Ci0KLQlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7Ci0gICAgICAgIGlmIChyYykgewotICAgICAgICAgICAgICAgIFBSSU5UX0VSUigiRXJyb3IgaW4gcHJvY2Vzc2luZyBWTEFOICVpIG9uICVzOiAweCV4LiAiCi0JCQkgICJDb250aW51aW5nXG4iLGksIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMlZMJTR4IiwgaXBhY21kKTsKLQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICJMMiVzIiwgQ0FSRF9CVVNfSUQoY2FyZCkpOwotCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMiwgImVyciVkIiwgcmMpOwotICAgICAgICB9CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgCisJCQkJIHFldGhfbGF5ZXIyX3NlbmRfc2V0ZGVsdmxhbl9jYiwgTlVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC01NDIwLDggKzU0OTQsNyBAQAogCXFldGhfZnJlZV92bGFuX3NrYnMoY2FyZCwgdmlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+dmxhbmxvY2ssIGZsYWdzKTsKIAkvKiB1bnJlZ2lzdGVyIElQIGFkZHJlc3NlcyBvZiB2bGFuIGRldmljZSAqLwotCXFldGhfZnJlZV92bGFuX2FkZHJlc3NlczQoY2FyZCwgdmlkKTsKLQlxZXRoX2ZyZWVfdmxhbl9hZGRyZXNzZXM2KGNhcmQsIHZpZCk7CisJcWV0aF9mcmVlX3ZsYW5fYWRkcmVzc2VzKGNhcmQsIHZpZCk7CiAJaWYgKGNhcmQtPnZsYW5ncnApCiAJCWNhcmQtPnZsYW5ncnAtPnZsYW5fZGV2aWNlc1t2aWRdID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT52bGFubG9jaywgZmxhZ3MpOwpAQCAtNTQzMCw2ICs1NTAzLDU5IEBACiAJcWV0aF9zZXRfbXVsdGljYXN0X2xpc3QoY2FyZC0+ZGV2KTsKIH0KICNlbmRpZgorLyoqCisgKiBFeGFtaW5lIGhhcmR3YXJlIHJlc3BvbnNlIHRvIFNFVF9QUk9NSVNDX01PREUKKyAqLworc3RhdGljIGludAorcWV0aF9zZXRhZHBfcHJvbWlzY19tb2RlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIAorCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOworCXN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcyAqc2V0cGFybXM7CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsInBybWFkcGNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOworCXNldHBhcm1zID0gJihjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zKTsKKwkKKyAgICAgICAgcWV0aF9kZWZhdWx0X3NldGFkYXB0ZXJwYXJtc19jYihjYXJkLCByZXBseSwgKHVuc2lnbmVkIGxvbmcpY21kKTsKKwlpZiAoY21kLT5oZHIucmV0dXJuX2NvZGUpIHsgCisJCVFFVEhfREJGX1RFWFRfKHRyYWNlLDQsInBybXJjJTIuMngiLGNtZC0+aGRyLnJldHVybl9jb2RlKTsJCisJCXNldHBhcm1zLT5kYXRhLm1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKKwl9CisJY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPSBzZXRwYXJtcy0+ZGF0YS5tb2RlOworCXJldHVybiAwOworfQorLyoKKyAqIFNldCBwcm9taXNjdW91cyBtb2RlIChvbiBvciBvZmYpIChTRVRfUFJPTUlTQ19NT0RFIGNvbW1hbmQpCisgKi8KK3N0YXRpYyB2b2lkCitxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwllbnVtIHFldGhfaXBhX3Byb21pc2NfbW9kZXMgbW9kZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+ZGV2OworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLCA0LCAic2V0cHJvbSIpOworCisJaWYgKCgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgorCSAgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT04pKSB8fAorCSAgICAoIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCisJICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PRkYpKSkKKwkJcmV0dXJuOworCW1vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQltb2RlID0gU0VUX1BST01JU0NfTU9ERV9PTjsKKwlRRVRIX0RCRl9URVhUXyh0cmFjZSwgNCwgIm1vZGU6JXgiLCBtb2RlKTsKKworCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSwKKwkJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGEgKyBJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEubW9kZSA9IG1vZGU7CisJcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2IsIE5VTEwpOworfQogCiAvKioKICAqIHNldCBtdWx0aWNhc3QgYWRkcmVzcyBvbiBjYXJkCkBAIC01NDQ0LDEyICs1NTcwLDIyIEBACiAJIAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywic2V0bXVsdGkiKTsKIAlxZXRoX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7CisJaWYgKGNhcmQtPm9wdGlvbnMubGF5ZXIyKSB7CisJCXFldGhfbGF5ZXIyX2FkZF9tdWx0aWNhc3QoY2FyZCk7CisJCWdvdG8gb3V0OworCX0KIAlxZXRoX2FkZF9tdWx0aWNhc3RfaXB2NChjYXJkKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJcWV0aF9hZGRfbXVsdGljYXN0X2lwdjYoY2FyZCk7CiAjZW5kaWYKK291dDoKICAJaWYgKHFldGhfc2V0X3RocmVhZF9zdGFydF9iaXQoY2FyZCwgUUVUSF9TRVRfSVBfVEhSRUFEKSA9PSAwKQogCQlzY2hlZHVsZV93b3JrKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIpOworCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCisJCXJldHVybjsKKwlpZiAocWV0aF9zZXRfdGhyZWFkX3N0YXJ0X2JpdChjYXJkLCBRRVRIX1NFVF9QUk9NSVNDX01PREVfVEhSRUFEKT09MCkKKwkJc2NoZWR1bGVfd29yaygmY2FyZC0+a2VybmVsX3RocmVhZF9zdGFydGVyKTsKKwogfQogCiBzdGF0aWMgaW50CkBAIC01NjU3LDYgKzU3OTMsMjQgQEAKIAlpbl9kZXZfcHV0KGluNF9kZXYpOwogfQogCitzdGF0aWMgdm9pZAorcWV0aF9sYXllcjJfYWRkX211bHRpY2FzdChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBxZXRoX2lwYWRkciAqaXBtOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG07CisKKwlRRVRIX0RCRl9URVhUKHRyYWNlLDQsIkwyYWRkbWMiKTsKKwlmb3IgKGRtID0gY2FyZC0+ZGV2LT5tY19saXN0OyBkbTsgZG0gPSBkbS0+bmV4dCkgeworCQlpcG0gPSBxZXRoX2dldF9hZGRyX2J1ZmZlcihRRVRIX1BST1RfSVBWNCk7CisJCWlmICghaXBtKQorCQkJY29udGludWU7CisJCW1lbWNweShpcG0tPm1hYyxkbS0+ZG1pX2FkZHIsTUFYX0FERFJfTEVOKTsKKwkJaXBtLT5pc19tdWx0aWNhc3QgPSAxOworCQlpZiAoIXFldGhfYWRkX2lwKGNhcmQsIGlwbSkpCisJCQlrZnJlZShpcG0pOworCX0KK30KKwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIHN0YXRpYyBpbmxpbmUgdm9pZAogcWV0aF9hZGRfbWM2KHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXYpCkBAIC01ODI1LDEwICs1OTc5LDEwIEBACiAJCVBSSU5UX1dBUk4oIkVycm9yIGluIHJlZ2lzdGVyaW5nIE1BQyBhZGRyZXNzIG9uICIgXAogCQkJICAgImRldmljZSAlczogeCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwKIAkJCSAgIGNtZC0+aGRyLnJldHVybl9jb2RlKTsKLQkJY2FyZC0+aW5mby5sYXllcjJfbWFjX3JlZ2lzdGVyZWQgPSAwOworCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAkJY21kLT5oZHIucmV0dXJuX2NvZGUgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWNhcmQtPmluZm8ubGF5ZXIyX21hY19yZWdpc3RlcmVkID0gMTsKKwkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKIAkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsCiAJCSAgICAgICBPU0FfQUREUl9MRU4pOwogCQlQUklOVF9JTkZPKCJNQUMgYWRkcmVzcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCAiCkBAIC01ODY2LDcgKzYwMjAsNyBAQAogCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IC1FSU87CiAJCXJldHVybiAwOwogCX0KLQljYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCA9IDA7CisJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU4NzQsNyArNjAyOCw3IEBACiBxZXRoX2xheWVyMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgIkwyRGVsbWFjIik7Ci0JaWYgKCFjYXJkLT5pbmZvLmxheWVyMl9tYWNfcmVnaXN0ZXJlZCkKKwlpZiAoIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gcWV0aF9sYXllcjJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX0RFTFZNQUMsCiAJCQkJCSAgcWV0aF9sYXllcjJfc2VuZF9kZWxtYWNfY2IpOwpAQCAtNTg5Niw3ICs2MDUwLDcgQEAKIAljYXJkID0gKHN0cnVjdCBxZXRoX2NhcmQgKikgZGV2LT5wcml2OwogCiAJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlQUklOVF9XQVJOKCJTZXR0aW5nIE1BQyBhZGRyZXNzIG9uICVzIGlzIG5vdCBzdXBwb3J0ZWQiCisJCVBSSU5UX1dBUk4oIlNldHRpbmcgTUFDIGFkZHJlc3Mgb24gJXMgaXMgbm90IHN1cHBvcnRlZCAiCiAJCQkgICAiaW4gTGF5ZXIgMyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMywgInNldG1jTFkzIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTY0NDEsNiArNjU5NSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKKworCiBzdGF0aWMgaW50CiBxZXRoX3F1ZXJ5X3NldGFkYXB0ZXJwYXJtc19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBzdHJ1Y3QgcWV0aF9yZXBseSAqcmVwbHksCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC02NDgxLDggKzY2MzcsMTMgQEAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLDQsImNoZ21hY2NiIik7CiAKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBkYXRhOwotCW1lbWNweShjYXJkLT5kZXYtPmRldl9hZGRyLAotCSAgICAgICAmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmFkZHIsT1NBX0FERFJfTEVOKTsKKwlpZiAoIWNhcmQtPm9wdGlvbnMubGF5ZXIyIHx8IGNhcmQtPmluZm8uZ3Vlc3RsYW4gfHwKKwkgICAgIShjYXJkLT5pbmZvLm1hY19iaXRzICYgUUVUSF9MQVlFUjJfTUFDX1JFQUQpKSB7CQorCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwKKwkJICAgICAgICZjbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEuY2hhbmdlX2FkZHIuYWRkciwKKwkJICAgICAgIE9TQV9BRERSX0xFTik7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgfD0gUUVUSF9MQVlFUjJfTUFDX1JFQUQ7CisJfQogCXFldGhfZGVmYXVsdF9zZXRhZGFwdGVycGFybXNfY2IoY2FyZCwgcmVwbHksICh1bnNpZ25lZCBsb25nKSBjbWQpOwogCXJldHVybiAwOwogfQpAQCAtNjYwMiw2ICs2NzYzLDEyIEBACiAgICAgICAgIFFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJkb0wyaW5pdCIpOwogICAgICAgICBRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgImRvTDIlcyIsIENBUkRfQlVTX0lEKGNhcmQpKTsKIAorCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX1dBUk4oImNvdWxkIG5vdCBxdWVyeSBhZGFwdGVyIHBhcmFtZXRlcnMgb24gZGV2aWNlICVzOiAiCisJCQkgICAieCV4XG4iLCBDQVJEX0JVU19JRChjYXJkKSwgcmMpOworCX0KKwogCXJjID0gcWV0aF9zZXRhZHBwYXJtc19jaGFuZ2VfbWFjYWRkcihjYXJkKTsKIAlpZiAocmMpIHsKIAkJUFJJTlRfV0FSTigiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKQEAgLTg1NDgsNyArODcxNSw3IEBACiBFWFBPUlRfU1lNQk9MKHFldGhfb3NuX2Fzc2lzdCk7CiBtb2R1bGVfaW5pdChxZXRoX2luaXQpOwogbW9kdWxlX2V4aXQocWV0aF9leGl0KTsKLU1PRFVMRV9BVVRIT1IoIkZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTGludXggb24gelNlcmllcyBPU0EgRXhwcmVzcyBhbmQgSGlwZXJTb2NrZXRzIHN1cHBvcnRcbiIgXAogCQkgICAgICAgICAgICAgICAgICAgICAgIkNvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5jCmluZGV4IDMwZTA1M2QuLmYwYTA4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmMKQEAgLTQsNyArNCw3IEBACiAgKiBMaW51eCBvbiB6U2VyaWVzIE9TQSBFeHByZXNzIGFuZCBIaXBlclNvY2tldHMgc3VwcG9ydAogICoKICAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCi0gKiBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiBBdXRob3Iocyk6IEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICogCSAgICAgIFRob21hcyBTcGF0emllciA8dHNwYXRAZGUuaWJtLmNvbT4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tcGMuaAppbmRleCA3ZWRjNWYxLi41ZjcxNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbXBjLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21wYy5oCkBAIC02LDcgKzYsNyBAQAogICogQ29weXJpZ2h0IDIwMDAsMjAwMyBJQk0gQ29ycG9yYXRpb24KICAqIEF1dGhvcihzKTogVXR6IEJhY2hlciA8dXR6LmJhY2hlckBkZS5pYm0uY29tPgogICogICAgICAgICAgICBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAgICAgICAgICAgIEZyYW5rIFBhdmxpYyA8cGF2bGljQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgIEZyYW5rIFBhdmxpYyA8ZnBhdmxpY0BkZS5pYm0uY29tPgogICoKICAqLwogI2lmbmRlZiBfX1FFVEhfTVBDX0hfXwpAQCAtMTQsNyArMTQsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3FldGguaD4KIAotI2RlZmluZSBWRVJTSU9OX1FFVEhfTVBDX0ggIiRSZXZpc2lvbjogMS40MyAkIgorI2RlZmluZSBWRVJTSU9OX1FFVEhfTVBDX0ggIiRSZXZpc2lvbjogMS40NCAkIgogCiBleHRlcm4gY29uc3QgY2hhciAqVkVSU0lPTl9RRVRIX01QQ19DOwogCkBAIC0yMTcsNyArMjE3LDcgQEAKIAlJUEFfU0VUQURQX1NFTkRfT1NBX01FU1NBR0UgCQk9IDB4MDEwMCwKIAlJUEFfU0VUQURQX1NFVF9TTk1QX0NPTlRST0wgCQk9IDB4MDIwMCwKIAlJUEFfU0VUQURQX1JFQURfU05NUF9QQVJNUyAJCT0gMHgwNDAwLAotCUlQQV9TRVRBRFBfV1JJVEVfU05NUF9QQVJNUyAJCT0gMHgwODAwLAorCUlQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERQkJPSAweDA4MDAsCiAJSVBBX1NFVEFEUF9RVUVSWV9DQVJEX0lORk8gCQk9IDB4MTAwMCwKIH07CiBlbnVtIHFldGhfaXBhX21hY19vcHMgewpAQCAtMjMyLDkgKzIzMiwxMiBAQAogCUNIQU5HRV9BRERSX0FERF9BRERSIAkJPSAxLAogCUNIQU5HRV9BRERSX0RFTF9BRERSIAkJPSAyLAogCUNIQU5HRV9BRERSX0ZMVVNIX0FERFJfVEFCTEUgCT0gNCwKLQotCiB9OworZW51bSBxZXRoX2lwYV9wcm9taXNjX21vZGVzIHsKKwlTRVRfUFJPTUlTQ19NT0RFX09GRgkJPSAwLAorCVNFVF9QUk9NSVNDX01PREVfT04JCT0gMSwKK307CisKIC8qIChTRVQpREVMSVAoTSkgSVBBIHN0dWZmICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRkZWxpcDQgewogCV9fdTggICBpcF9hZGRyWzRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCmluZGV4IGY5MWEwMmQuLmRkZDYwMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoKLSAqIGxpbnV4L2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyAoJFJldmlzaW9uOiAxLjU1ICQpCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvbmV0L3FldGhfc3lzLmMgKCRSZXZpc2lvbjogMS41OCAkKQogICoKICAqIExpbnV4IG9uIHpTZXJpZXMgT1NBIEV4cHJlc3MgYW5kIEhpcGVyU29ja2V0cyBzdXBwb3J0CiAgKiBUaGlzIGZpbGUgY29udGFpbnMgY29kZSByZWxhdGVkIHRvIHN5c2ZzLgpAQCAtOCw3ICs4LDcgQEAKICAqIENvcHlyaWdodCAyMDAwLDIwMDMgSUJNIENvcnBvcmF0aW9uCiAgKgogICogQXV0aG9yKHMpOiBUaG9tYXMgU3BhdHppZXIgPHRzcGF0QGRlLmlibS5jb20+Ci0gKiAJICAgICAgRnJhbmsgUGF2bGljIDxwYXZsaWNAZGUuaWJtLmNvbT4KKyAqIAkgICAgICBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAicWV0aF9tcGMuaCIKICNpbmNsdWRlICJxZXRoX2ZzLmgiCiAKLWNvbnN0IGNoYXIgKlZFUlNJT05fUUVUSF9TWVNfQyA9ICIkUmV2aXNpb246IDEuNTUgJCI7Citjb25zdCBjaGFyICpWRVJTSU9OX1FFVEhfU1lTX0MgPSAiJFJldmlzaW9uOiAxLjU4ICQiOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCXN0YXJ0ID0gYnVmOwogCS8qIGdldCBhZGRyZXNzIHN0cmluZyAqLwogCWVuZCA9IHN0cmNocihzdGFydCwgJy8nKTsKLQlpZiAoIWVuZCl7CisJaWYgKCFlbmQgfHwgKGVuZC1zdGFydCA+PSA0OSkpewogCQlQUklOVF9XQVJOKCJJbnZhbGlkIGZvcm1hdCBmb3IgaXBhdG9fYWRkeC9kZWx4LiAiCiAJCQkgICAiVXNlIDxpcCBhZGRyPi88bWFzayBiaXRzPlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCmluZGV4IGFkMzNlNmYuLmUyNDVhZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQgSUJNIENvcnBvcmF0aW9uCiAgKgotICogICAgQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPHBhdmxpY0BkZS5pYm0uY29tPgorICogICAgQXV0aG9yKHMpOiBGcmFuayBQYXZsaWMgPGZwYXZsaWNAZGUuaWJtLmNvbT4KICAqCiAgKiAgICAkUmV2aXNpb246IDEuNyAkCSAkRGF0ZTogMjAwNS8wNS8wNCAyMDoxOToxOCAkCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYyBiL2RyaXZlcnMvc2J1cy9jaGFyL2Rpc3BsYXk3c2VnLmMKaW5kZXggMmM4NmE0Yi4uYzNhNTFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvZGlzcGxheTdzZWcuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci9kaXNwbGF5N3NlZy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIHsKIAlfX3U4IHJlZ3MgPSByZWFkYihkN3NfcmVncyk7CiAJX191OCBpcmVnID0gMDsKLQlpbnQgZXJyb3IgPSAwCisJaW50IGVycm9yID0gMDsKIAogCWlmIChEN1NfTUlOT1IgIT0gaW1pbm9yKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCAxMGM0NzBlLi41N2VmN2FlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhjaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGNpLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWhjaV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWhjaV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF9haGNpIH0sIC8qIElDSDYgKi8KIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKaW5kZXggYTFiZDhkOS4uODU1NDI4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YV9waWl4LmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbl9tb2R1bGVfaW5pdCA9IDE7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaWl4X3BjaV90YmxbXSA9IHsKICNpZmRlZiBBVEFfRU5BQkxFX1BBVEEKIAl7IDB4ODA4NiwgMHg3MTExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBwaWl4NF9wYXRhIH0sCiAJeyAweDgwODYsIDB4MjRkYiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoNV9wYXRhIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IGE3NGI0MDcuLmU1MWQ5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC00NTYzLDYgKzQ1NjMsNyBAQAogCiAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7CiAJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBTQV9TSElSUTsKKwlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnRbMF0tPnByaXZhdGVfZGF0YTsKIAogCWlmIChwb3J0cyAmIEFUQV9QT1JUX1BSSU1BUlkpIHsKIAkJcHJvYmVfZW50LT5wb3J0W3BdLmNtZF9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwpAQCAtNDU5OSw2ICs0NjAwLDcgQEAKIAlwcm9iZV9lbnQtPmxlZ2FjeV9tb2RlID0gMTsKIAlwcm9iZV9lbnQtPm5fcG9ydHMgPSAxOwogCXByb2JlX2VudC0+aGFyZF9wb3J0X25vID0gcG9ydF9udW07CisJcHJvYmVfZW50LT5wcml2YXRlX2RhdGEgPSBwb3J0LT5wcml2YXRlX2RhdGE7CiAKIAlzd2l0Y2gocG9ydF9udW0pCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCBiYjMwZmNkLi43ZTM3ZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtMTEyOSw2ICsxMTI5LDggQEAKIAkJICogbGVuZ3RoIDAgbWVhbnMgdHJhbnNmZXIgMCBibG9jayBvZiBkYXRhLgogCQkgKiBIb3dldmVyLCBmb3IgQVRBIFIvVyBjb21tYW5kcywgc2VjdG9yIGNvdW50IDAgbWVhbnMKIAkJICogMjU2IG9yIDY1NTM2IHNlY3RvcnMsIG5vdCAwIHNlY3RvcnMgYXMgaW4gU0NTSS4KKwkJICoKKwkJICogV0FSTklORzogb25lIG9yIHR3byBvbGRlciBBVEEgZHJpdmVzIHRyZWF0IDAgYXMgMC4uLgogCQkgKi8KIAkJZ290byBub3RoaW5nX3RvX2RvOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGM5MDcyMzguLjA3NDk4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0xNzA0LDcgKzE3MDQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbHBmY19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gTFBGQ19EUklWRVJfTkFNRSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlCT0gbHBmY19pZF90YWJsZSwKIAkucHJvYmUJCT0gbHBmY19wY2lfcHJvYmVfb25lLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobHBmY19wY2lfcmVtb3ZlX29uZSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCmluZGV4IDc4YjRmZjEuLmY1NTdmMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9wZGNfYWRtYS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFkbWFfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhZG1hX2F0YV9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BEQywgMHgxODQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMTg0MV9pZHggfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKaW5kZXggOTNkNTUyMy4uMjU3YzEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCkBAIC0zNDksNyArMzQ5LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG12X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtdl9wY2lfdGJsW10gPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDUwNDApLCAwLCAwLCBjaGlwXzUwNHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg1MDQxKSwgMCwgMCwgY2hpcF81MDR4fSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NTA4MCksIDAsIDAsIGNoaXBfNTA4eH0sCkBAIC0zNTksNiArMzU5LDggQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NjA0MSksIDAsIDAsIGNoaXBfNjA0eH0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDYwODApLCAwLCAwLCBjaGlwXzYwOHh9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg2MDgxKSwgMCwgMCwgY2hpcF82MDh4fSwKKworCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQURBUFRFQzIsIDB4MDI0MSksIDAsIDAsIGNoaXBfNjA0eH0sCiAJe30JCQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX252LmMKaW5kZXggMzdhNGZhZS4uNDk1NDg5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfbnYuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9udi5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlDSzgwNAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG52X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBudl9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU0FUQSwKIAkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgTkZPUkNFMiB9LAogCXsgUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX1NBVEEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKaW5kZXggOWVkYzlkOS4uMjQyZDkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGNfYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzMzcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjAzN3ggfSwKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHgzNTcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3FzdG9yLmMKaW5kZXggZDI3NGFiMi4uYjJmNjMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9xc3Rvci5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFzX2F0YV9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcXNfYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUERDLCAweDIwNjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsCiAJICBib2FyZF8yMDY4X2lkeCB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCmluZGV4IGQwZTNjM2MuLjM2MDkxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbC5jCkBAIC04Nyw3ICs4Nyw3IEBACiBzdGF0aWMgdm9pZCBzaWxfcG9zdF9zZXRfbW9kZSAoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpbF9wY2lfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsX3BjaV90YmxbXSA9IHsKIAl7IDB4MTA5NSwgMHgzMTEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaWxfMzExMl9tMTV3IH0sCiAJeyAweDEwOTUsIDB4MDI0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lsXzMxMTJfbTE1dyB9LAogCXsgMHgxMDk1LCAweDM1MTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpbF8zMTEyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYwppbmRleCA0NjgyYTUwLi5kMzE5OGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogc3RhdGljIHZvaWQgc2lsMjRfaG9zdF9zdG9wKHN0cnVjdCBhdGFfaG9zdF9zZXQgKmhvc3Rfc2V0KTsKIHN0YXRpYyBpbnQgc2lsMjRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lsMjRfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNpbDI0X3BjaV90YmxbXSA9IHsKIAl7IDB4MTA5NSwgMHgzMTI0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBCSURfU0lMMzEyNCB9LAogCXsgMHgxMDk1LCAweDMxMzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIEJJRF9TSUwzMTMyIH0sCiAJeyAweDEwOTUsIDB4MzEzMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQklEX1NJTDMxMzEgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3Npcy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKaW5kZXggNDJkN2M0ZS4uMzJlMTI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc2lzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIHN0YXRpYyB1MzIgc2lzX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHNpc19zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXNfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9TSSwgMHgxODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHNpc18xODAgfSwKIAl7IFBDSV9WRU5ET1JfSURfU0ksIDB4MTgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBzaXNfMTgwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NJLCAweDE4MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgc2lzXzE4MCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwppbmRleCA5ODk1ZDFjLi41N2U1YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zdncuYwpAQCAtNDY2LDcgKzQ2Niw3IEBACiAgKiAweDI0YSBpcyBkZXZpY2UgSUQgZm9yIEJDTTU3ODUgKGFrYSBIVDEwMDApIEhUIHNvdXRoYnJpZGdlIGludGVncmF0ZWQgU0FUQQogICogY29udHJvbGxlcgogICogKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMl9zYXRhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBrMl9zYXRhX3BjaV90YmxbXSA9IHsKIAl7IDB4MTE2NiwgMHgwMjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0IH0sCiAJeyAweDExNjYsIDB4MDI0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgNCB9LAogCXsgMHgxMTY2LCAweDAyNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDggfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N4NC5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKaW5kZXggZDVhMzg3OC4uYjRiYmU0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3g0LmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjX3NhdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBkY19zYXRhX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg2NjIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjA2MjEgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3VsaS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKaW5kZXggY2YwYmFhYS4uYjI0MjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdWxpLmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyB1MzIgdWxpX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHVsaV9zY3Jfd3JpdGUgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiB2YWwpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdWxpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB1bGlfcGNpX3RibFtdID0gewogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4OSB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1Mjg3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4NyB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTCwgMHg1MjgxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB1bGlfNTI4MSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwppbmRleCBhYjE5ZDJiLi5jNzYyMTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92aWEuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHUzMiBzdmlhX3Njcl9yZWFkIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnKTsKIHN0YXRpYyB2b2lkIHN2aWFfc2NyX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0gewogCXsgMHgxMTA2LCAweDMxNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMCB9LAogCXsgMHgxMTA2LCAweDMyNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMSB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3ZzYy5jCmluZGV4IGNlOGEyZmQuLjc3YTZlNGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV92c2MuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAgKiAweDgwODYvMHgzMjAwIGlzIHRoZSBJbnRlbCAzMTI0NCwgd2hpY2ggaXMgc3VwcG9zZWQgdG8gYmUgaWRlbnRpY2FsCiAgKiBjb21wYXRpYmlsaXR5IGlzIHVudGVzdGVkIGFzIG9mIHlldAogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnNjX3NhdGFfcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZzY19zYXRhX3BjaV90YmxbXSA9IHsKIAl7IDB4MTcyNSwgMHg3MTc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAweDEwNjAwLCAweEZGRkZGRiwgMCB9LAogCXsgMHg4MDg2LCAweDMyMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDB4MTA2MDAsIDB4RkZGRkZGLCAwIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3NlcmlhbC84MjUwLmMKaW5kZXggOTg4MjA2MC4uMzc0Mjc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwpAQCAtMjM4MSw5ICsyMzgxLDkgQEAKICAqIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgemVybyBmbGFncyBlbnRyeSwgd2hpY2ggbWVhbnMgd2UgZXhwZWN0CiAgKiBhbGwgZW50cmllcyB0byBoYXZlIGF0IGxlYXN0IFVQRl9CT09UX0FVVE9DT05GIHNldC4KICAqLwotc3RhdGljIGludCBfX2RldmluaXQgc2VyaWFsODI1MF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzZXJpYWw4MjUwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgKnAgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CiAJaW50IHJldCwgaTsKIApAQCAtMjM5OSwxMiArMjM5OSwxMiBAQAogCQlwb3J0LmZsYWdzCT0gcC0+ZmxhZ3M7CiAJCXBvcnQubWFwYmFzZQk9IHAtPm1hcGJhc2U7CiAJCXBvcnQuaHViNgk9IHAtPmh1YjY7Ci0JCXBvcnQuZGV2CT0gZGV2OworCQlwb3J0LmRldgk9ICZkZXYtPmRldjsKIAkJaWYgKHNoYXJlX2lycXMpCiAJCQlwb3J0LmZsYWdzIHw9IFVQRl9TSEFSRV9JUlE7CiAJCXJldCA9IHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWdpc3RlciBwb3J0IGF0IGluZGV4ICVkICIKKwkJCWRldl9lcnIoJmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHBvcnQgYXQgaW5kZXggJWQgIgogCQkJCSIoSU8lbHggTUVNJWx4IElSUSVkKTogJWRcbiIsIGksCiAJCQkJcC0+aW9iYXNlLCBwLT5tYXBiYXNlLCBwLT5pcnEsIHJldCk7CiAJCX0KQEAgLTI0MTUsNTQgKzI0MTUsNTUgQEAKIC8qCiAgKiBSZW1vdmUgc2VyaWFsIHBvcnRzIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIHBsYXRmb3JtIGRldmljZS4KICAqLwotc3RhdGljIGludCBfX2RldmV4aXQgc2VyaWFsODI1MF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc2VyaWFsODI1MF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJc2VyaWFsODI1MF91bnJlZ2lzdGVyX3BvcnQoaSk7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbDgyNTBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc2VyaWFsODI1MF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9zdXNwZW5kX3BvcnQoJnNlcmlhbDgyNTBfcmVnLCAmdXAtPnBvcnQpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbDgyNTBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2VyaWFsODI1MF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFVBUlRfTlI7IGkrKykgewogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKLQkJaWYgKHVwLT5wb3J0LnR5cGUgIT0gUE9SVF9VTktOT1dOICYmIHVwLT5wb3J0LmRldiA9PSBkZXYpCisJCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiB1cC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQogCQkJdWFydF9yZXN1bWVfcG9ydCgmc2VyaWFsODI1MF9yZWcsICZ1cC0+cG9ydCk7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzZXJpYWw4MjUwX2lzYV9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNlcmlhbDgyNTAiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2VyaWFsODI1MF9pc2FfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzZXJpYWw4MjUwX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2VyaWFsODI1MF9yZW1vdmUpLAogCS5zdXNwZW5kCT0gc2VyaWFsODI1MF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2VyaWFsODI1MF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNlcmlhbDgyNTAiLAorCX0sCiB9OwogCiAvKgpAQCAtMjYwOCw3ICsyNjA5LDcgQEAKIAogCXNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydHMoJnNlcmlhbDgyNTBfcmVnLCAmc2VyaWFsODI1MF9pc2FfZGV2cy0+ZGV2KTsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2VyaWFsODI1MF9pc2FfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbDgyNTBfaXNhX2RyaXZlcik7CiAJaWYgKHJldCA9PSAwKQogCQlnb3RvIG91dDsKIApAQCAtMjYzMCw3ICsyNjMxLDcgQEAKIAkgKi8KIAlzZXJpYWw4MjUwX2lzYV9kZXZzID0gTlVMTDsKIAotCWRyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZXJpYWw4MjUwX2lzYV9kcml2ZXIpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGlzYV9kZXYpOwogCiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc2VyaWFsODI1MF9yZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW14LmMgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwppbmRleCA0YTU0ZmY1Li4zNTVjZDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9pbXguYwpAQCAtOTIxLDkgKzkyMSw5IEBACiAJLmNvbnMgICAgICAgICAgID0gSU1YX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLSAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfc3VzcGVuZF9wb3J0KCZpbXhfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtOTMxLDkgKzkzMSw5IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShfZGV2KTsKKyAgICAgICAgc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfcmVzdW1lX3BvcnQoJmlteF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC05NDEsMjEgKzk0MSwxOSBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfaW14X3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShfZGV2KTsKLQotCWlteF9wb3J0c1tkZXYtPmlkXS5wb3J0LmRldiA9IF9kZXY7CisJaW14X3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCXVhcnRfYWRkX29uZV9wb3J0KCZpbXhfcmVnLCAmaW14X3BvcnRzW2Rldi0+aWRdLnBvcnQpOwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmaW14X3BvcnRzW2Rldi0+aWRdKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZpbXhfcG9ydHNbZGV2LT5pZF0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNlcmlhbF9pbXhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW14X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBpbXhfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAoc3BvcnQpCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZpbXhfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtOTYzLDE0ICs5NjEsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNlcmlhbF9pbXhfZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgPSAiaW14LXVhcnQiLAotICAgICAgICAuYnVzICAgICAgICAgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZXJpYWxfaW14X2RyaXZlciA9IHsKICAgICAgICAgLnByb2JlICAgICAgICAgID0gc2VyaWFsX2lteF9wcm9iZSwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gc2VyaWFsX2lteF9yZW1vdmUsCiAKIAkuc3VzcGVuZAk9IHNlcmlhbF9pbXhfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNlcmlhbF9pbXhfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCSAgICAgICAgLm5hbWUJPSAiaW14LXVhcnQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpbXhfc2VyaWFsX2luaXQodm9pZCkKQEAgLTk4NSw3ICs5ODQsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9pbXhfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNlcmlhbF9pbXhfZHJpdmVyKTsKIAlpZiAocmV0ICE9IDApCiAJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmlteF9yZWcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCmluZGV4IDBkZDA4YTAuLjVkM2NiODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL21wYzUyeHhfdWFydC5jCkBAIC03MTcsMTAgKzcxNyw5IEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAogc3RhdGljIGludCBfX2RldmluaXQKLW1wYzUyeHhfdWFydF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcGM1Mnh4X3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZTsKIAogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBOVUxMOwogCWludCBpLCBpZHgsIHJldDsKQEAgLTc2MSwxNyArNzYwLDE3IEBACiAJLyogQWRkIHRoZSBwb3J0IHRvIHRoZSB1YXJ0IHN1Yi1zeXN0ZW0gKi8KIAlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CiAJaWYgKCFyZXQpCi0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkKilwb3J0KTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAodm9pZCopcG9ydCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50Ci1tcGM1Mnh4X3VhcnRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wYzUyeHhfdWFydF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wYzUyeHhfdWFydF9kcml2ZXIsIHBvcnQpOwpAQCAtNzgxLDkgKzc4MCw5IEBACiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQKLW1wYzUyeHhfdWFydF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorbXBjNTJ4eF91YXJ0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CkBAIC03OTIsOSArNzkxLDkgQEAKIH0KIAogc3RhdGljIGludAotbXBjNTJ4eF91YXJ0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcGM1Mnh4X3VhcnRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1YXJ0X3BvcnQgKikgZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZXN1bWVfcG9ydCgmbXBjNTJ4eF91YXJ0X2RyaXZlciwgcG9ydCk7CkBAIC04MDMsMTUgKzgwMiwxNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewotCS5uYW1lCQk9ICJtcGM1Mnh4LXBzYyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyID0gewogCS5wcm9iZQkJPSBtcGM1Mnh4X3VhcnRfcHJvYmUsCiAJLnJlbW92ZQkJPSBtcGM1Mnh4X3VhcnRfcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gbXBjNTJ4eF91YXJ0X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBtcGM1Mnh4X3VhcnRfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1wYzUyeHgtcHNjIiwKKwl9LAogfTsKIAogCkBAIC04MjgsNyArODI4LDcgQEAKIAogCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZtcGM1Mnh4X3VhcnRfZHJpdmVyKTsKIAlpZiAocmV0ID09IDApIHsKLQkJcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKIAkJaWYgKHJldCkKIAkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wYzUyeHhfdWFydF9kcml2ZXIpOwogCX0KQEAgLTgzOSw3ICs4MzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBtcGM1Mnh4X3VhcnRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcGM1Mnh4X3VhcnRfcGxhdGZvcm1fZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF91YXJ0X3BsYXRmb3JtX2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmbXBjNTJ4eF91YXJ0X2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCBiYTg4MzhiLi44ZjgzZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC0xNTUxLDE1ICsxNTUxLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2Nfc2hhcmVkX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX3NoYXJlZF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZCA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YQkqcGRhdGE7CiAJaW50CQkJCSByYyA9IC1FTk9ERVY7CiAKLQlpZiAocGQtPmlkID09IDApIHsKLQkJaWYgKCEocmMgPSBtcHNjX3NoYXJlZF9tYXBfcmVncyhwZCkpKSAgewotCQkJcGRhdGEgPSAoc3RydWN0IG1wc2Nfc2hhcmVkX3BkYXRhICopZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPmlkID09IDApIHsKKwkJaWYgKCEocmMgPSBtcHNjX3NoYXJlZF9tYXBfcmVncyhkZXYpKSkgIHsKKwkJCXBkYXRhID0gKHN0cnVjdCBtcHNjX3NoYXJlZF9wZGF0YSAqKWRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAkJCW1wc2Nfc2hhcmVkX3JlZ3MuTVBTQ19NUlJfbSA9IHBkYXRhLT5tcnJfdmFsOwogCQkJbXBzY19zaGFyZWRfcmVncy5NUFNDX1JDUlJfbT0gcGRhdGEtPnJjcnJfdmFsOwpAQCAtMTU3NywxMiArMTU3NiwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1tcHNjX3NoYXJlZF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK21wc2Nfc2hhcmVkX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50CXJjID0gLUVOT0RFVjsKIAotCWlmIChwZC0+aWQgPT0gMCkgeworCWlmIChkZXYtPmlkID09IDApIHsKIAkJbXBzY19zaGFyZWRfdW5tYXBfcmVncygpOwogCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfTVJSX20gPSAwOwogCQltcHNjX3NoYXJlZF9yZWdzLk1QU0NfUkNSUl9tID0gMDsKQEAgLTE1OTUsMTEgKzE1OTMsMTIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcHNjX3NoYXJlZF9kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNUFNDX1NIQVJFRF9OQU1FLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcHNjX3NoYXJlZF9kcml2ZXIgPSB7CiAJLnByb2JlCT0gbXBzY19zaGFyZWRfZHJ2X3Byb2JlLAogCS5yZW1vdmUJPSBtcHNjX3NoYXJlZF9kcnZfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gTVBTQ19TSEFSRURfTkFNRSwKKwl9LAogfTsKIAogLyoKQEAgLTE3MzIsMTkgKzE3MzEsMTggQEAKIH0KIAogc3RhdGljIGludAotbXBzY19kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorbXBzY19kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IG1wc2NfcG9ydF9pbmZvCSpwaTsKIAlpbnQJCQlyYyA9IC1FTk9ERVY7CiAKLQlwcl9kZWJ1ZygibXBzY19kcnZfcHJvYmU6IEFkZGluZyBNUFNDICVkXG4iLCBwZC0+aWQpOworCXByX2RlYnVnKCJtcHNjX2Rydl9wcm9iZTogQWRkaW5nIE1QU0MgJWRcbiIsIGRldi0+aWQpOwogCi0JaWYgKHBkLT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7Ci0JCXBpID0gJm1wc2NfcG9ydHNbcGQtPmlkXTsKKwlpZiAoZGV2LT5pZCA8IE1QU0NfTlVNX0NUTFJTKSB7CisJCXBpID0gJm1wc2NfcG9ydHNbZGV2LT5pZF07CiAKLQkJaWYgKCEocmMgPSBtcHNjX2Rydl9tYXBfcmVncyhwaSwgcGQpKSkgewotCQkJbXBzY19kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGksIHBkLCBwZC0+aWQpOworCQlpZiAoIShyYyA9IG1wc2NfZHJ2X21hcF9yZWdzKHBpLCBkZXYpKSkgeworCQkJbXBzY19kcnZfZ2V0X3BsYXRmb3JtX2RhdGEocGksIGRldiwgZGV2LT5pZCk7CiAKIAkJCWlmICghKHJjID0gbXBzY19tYWtlX3JlYWR5KHBpKSkpCiAJCQkJaWYgKCEocmMgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmbXBzY19yZWcsCkBAIC0xNzY0LDI3ICsxNzYyLDI2IEBACiB9CiAKIHN0YXRpYyBpbnQKLW1wc2NfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCittcHNjX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJcHJfZGVidWcoIm1wc2NfZHJ2X2V4aXQ6IFJlbW92aW5nIE1QU0MgJWRcbiIsIGRldi0+aWQpOwogCi0JcHJfZGVidWcoIm1wc2NfZHJ2X2V4aXQ6IFJlbW92aW5nIE1QU0MgJWRcbiIsIHBkLT5pZCk7Ci0KLQlpZiAocGQtPmlkIDwgTVBTQ19OVU1fQ1RMUlMpIHsKLQkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm1wc2NfcmVnLCAmbXBzY19wb3J0c1twZC0+aWRdLnBvcnQpOwotCQltcHNjX3JlbGVhc2VfcG9ydCgoc3RydWN0IHVhcnRfcG9ydCAqKSZtcHNjX3BvcnRzW3BkLT5pZF0ucG9ydCk7Ci0JCW1wc2NfZHJ2X3VubWFwX3JlZ3MoJm1wc2NfcG9ydHNbcGQtPmlkXSk7CisJaWYgKGRldi0+aWQgPCBNUFNDX05VTV9DVExSUykgeworCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmbXBzY19yZWcsICZtcHNjX3BvcnRzW2Rldi0+aWRdLnBvcnQpOworCQltcHNjX3JlbGVhc2VfcG9ydCgoc3RydWN0IHVhcnRfcG9ydCAqKSZtcHNjX3BvcnRzW2Rldi0+aWRdLnBvcnQpOworCQltcHNjX2Rydl91bm1hcF9yZWdzKCZtcHNjX3BvcnRzW2Rldi0+aWRdKTsKIAkJcmV0dXJuIDA7CiAJfQogCWVsc2UKIAkJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtcHNjX2RyaXZlciA9IHsKLQkubmFtZQk9IE1QU0NfQ1RMUl9OQU1FLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcHNjX2RyaXZlciA9IHsKIAkucHJvYmUJPSBtcHNjX2Rydl9wcm9iZSwKIAkucmVtb3ZlCT0gbXBzY19kcnZfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gTVBTQ19DVExSX05BTUUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0CkBAIC0xNzk4LDkgKzE3OTUsOSBAQAogCW1lbXNldCgmbXBzY19zaGFyZWRfcmVncywgMCwgc2l6ZW9mKG1wc2Nfc2hhcmVkX3JlZ3MpKTsKIAogCWlmICghKHJjID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJm1wc2NfcmVnKSkpIHsKLQkJaWYgKCEocmMgPSBkcml2ZXJfcmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcikpKSB7Ci0JCQlpZiAoKHJjID0gZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX2RyaXZlcikpKSB7Ci0JCQkJZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CisJCWlmICghKHJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpKSkgeworCQkJaWYgKChyYyA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXBzY19kcml2ZXIpKSkgeworCQkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX3NoYXJlZF9kcml2ZXIpOwogCQkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJm1wc2NfcmVnKTsKIAkJCX0KIAkJfQpAQCAtMTgxNSw4ICsxODEyLDggQEAKIHN0YXRpYyB2b2lkIF9fZXhpdAogbXBzY19kcnZfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZtcHNjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2Nfc2hhcmVkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1wc2NfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBzY19zaGFyZWRfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtcHNjX3JlZyk7CiAJbWVtc2V0KG1wc2NfcG9ydHMsIDAsIHNpemVvZihtcHNjX3BvcnRzKSk7CiAJbWVtc2V0KCZtcHNjX3NoYXJlZF9yZWdzLCAwLCBzaXplb2YobXBzY19zaGFyZWRfcmVncykpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcHhhLmMgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwppbmRleCAxNmIyZjk0Li5mZjVlNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9weGEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9weGEuYwpAQCAtODA1LDkgKzgwNSw5IEBACiAJLmNvbnMJCT0gUFhBX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNlcmlhbF9weGFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLSAgICAgICAgc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAgICAgICAgIGlmIChzcG9ydCkKICAgICAgICAgICAgICAgICB1YXJ0X3N1c3BlbmRfcG9ydCgmc2VyaWFsX3B4YV9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04MTUsOSArODE1LDkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2VyaWFsX3B4YV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3QgdWFydF9weGFfcG9ydCAqc3BvcnQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisgICAgICAgIHN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICAgICAgICAgaWYgKHNwb3J0KQogICAgICAgICAgICAgICAgIHVhcnRfcmVzdW1lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODI1LDIxICs4MjUsMTkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2VyaWFsX3B4YV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7Ci0KLQlzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gX2RldjsKKwlzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdLnBvcnQuZGV2ID0gJmRldi0+ZGV2OwogCXVhcnRfYWRkX29uZV9wb3J0KCZzZXJpYWxfcHhhX3JlZywgJnNlcmlhbF9weGFfcG9ydHNbZGV2LT5pZF0ucG9ydCk7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsICZzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZzZXJpYWxfcHhhX3BvcnRzW2Rldi0+aWRdKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZXJpYWxfcHhhX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzZXJpYWxfcHhhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVhcnRfcHhhX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCB1YXJ0X3B4YV9wb3J0ICpzcG9ydCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNlcmlhbF9weGFfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODQ3LDE0ICs4NDUsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNlcmlhbF9weGFfZHJpdmVyID0gewotICAgICAgICAubmFtZSAgICAgICAgICAgPSAicHhhMnh4LXVhcnQiLAotICAgICAgICAuYnVzICAgICAgICAgICAgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZXJpYWxfcHhhX2RyaXZlciA9IHsKICAgICAgICAgLnByb2JlICAgICAgICAgID0gc2VyaWFsX3B4YV9wcm9iZSwKICAgICAgICAgLnJlbW92ZSAgICAgICAgID0gc2VyaWFsX3B4YV9yZW1vdmUsCiAKIAkuc3VzcGVuZAk9IHNlcmlhbF9weGFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNlcmlhbF9weGFfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCSAgICAgICAgLm5hbWUJPSAicHhhMnh4LXVhcnQiLAorCX0sCiB9OwogCiBpbnQgX19pbml0IHNlcmlhbF9weGFfaW5pdCh2b2lkKQpAQCAtODY1LDcgKzg2NCw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzZXJpYWxfcHhhX2RyaXZlcik7CiAJaWYgKHJldCAhPSAwKQogCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzZXJpYWxfcHhhX3JlZyk7CiAKQEAgLTg3NCw3ICs4NzMsNyBAQAogCiB2b2lkIF9fZXhpdCBzZXJpYWxfcHhhX2V4aXQodm9pZCkKIHsKLSAgICAgICAgZHJpdmVyX3VucmVnaXN0ZXIoJnNlcmlhbF9weGFfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2VyaWFsX3B4YV9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNlcmlhbF9weGFfcmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDAzNjc5MjMuLjQ3NjgxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTEwOTIsMTQgKzEwOTIsMTMgQEAKIAogc3RhdGljIGludCBwcm9iZV9pbmRleCA9IDA7CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldiwKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgczNjMjR4eF91YXJ0X3BvcnQgKm91cnBvcnQ7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKF9kZXYpOwogCWludCByZXQ7CiAKLQlkYmcoInMzYzI0eHhfc2VyaWFsX3Byb2JlKCVwLCAlcCkgJWRcbiIsIF9kZXYsIGluZm8sIHByb2JlX2luZGV4KTsKKwlkYmcoInMzYzI0eHhfc2VyaWFsX3Byb2JlKCVwLCAlcCkgJWRcbiIsIGRldiwgaW5mbywgcHJvYmVfaW5kZXgpOwogCiAJb3VycG9ydCA9ICZzM2MyNHh4X3NlcmlhbF9wb3J0c1twcm9iZV9pbmRleF07CiAJcHJvYmVfaW5kZXgrKzsKQEAgLTExMTIsNyArMTExMSw3IEBACiAKIAlkYmcoIiVzOiBhZGRpbmcgcG9ydFxuIiwgX19GVU5DVElPTl9fKTsKIAl1YXJ0X2FkZF9vbmVfcG9ydCgmczNjMjR4eF91YXJ0X2RydiwgJm91cnBvcnQtPnBvcnQpOwotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmb3VycG9ydC0+cG9ydCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCAmb3VycG9ydC0+cG9ydCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEyMCw5ICsxMTE5LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KF9kZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KCZkZXYtPmRldik7CiAKIAlpZiAocG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnMzYzI0eHhfdWFydF9kcnYsIHBvcnQpOwpAQCAtMTEzNCw5ICsxMTMzLDkgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHMzYzI0eHhfZGV2X3RvX3BvcnQoZGV2KTsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydCgmZGV2LT5kZXYpOwogCiAJaWYgKHBvcnQpCiAJCXVhcnRfc3VzcGVuZF9wb3J0KCZzM2MyNHh4X3VhcnRfZHJ2LCBwb3J0KTsKQEAgLTExNDQsOSArMTE0Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gczNjMjR4eF9kZXZfdG9fcG9ydChkZXYpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSBzM2MyNHh4X2Rldl90b19wb3J0KCZkZXYtPmRldik7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpvdXJwb3J0ID0gdG9fb3VycG9ydChwb3J0KTsKIAogCWlmIChwb3J0KSB7CkBAIC0xMTY1LDExICsxMTY0LDExIEBACiAjZGVmaW5lIHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiwKIAkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKmluZm8pCiB7CiAJZGJnKCJzM2MyNHh4X3NlcmlhbF9pbml0KCVwLCVwKVxuIiwgZHJ2LCBpbmZvKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKGRydik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcihkcnYpOwogfQogCiAKQEAgLTEyMjgsMTkgKzEyMjcsMjAgQEAKIAkucmVzZXRfcG9ydAk9IHMzYzI0MDBfc2VyaWFsX3Jlc2V0cG9ydCwKIH07CiAKLXN0YXRpYyBpbnQgczNjMjQwMF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0MDBfdWFydF9pbmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQwMF9zZXJpYWxfZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDAwLXVhcnQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MDBfc2VyaWFsX2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQwMF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjR4eF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDAwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgczNjMjQwMF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0MDBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQwMF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQwMF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDAwX3VhcnRfaW5mX2F0ICZzM2MyNDAwX3VhcnRfaW5mCkBAIC0xMzMyLDE5ICsxMzMyLDIwIEBACiAKIC8qIGRldmljZSBtYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0MTBfdWFydF9pbmYpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczNjMjQxMF9zZXJpYWxfZHJ2ID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLXVhcnQiLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0MTBfc2VyaWFsX2RydiA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9zZXJpYWxfcHJvYmUsCiAJLnJlbW92ZQkJPSBzM2MyNHh4X3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzM2MyNHh4X3NlcmlhbF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjR4eF9zZXJpYWxfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzM2MyNDEwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGlubGluZSBpbnQgczNjMjQxMF9zZXJpYWxfaW5pdCh2b2lkKQpAQCAtMTM1NCw3ICsxMzU1LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0MTBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDEwX3VhcnRfaW5mX2F0ICZzM2MyNDEwX3VhcnRfaW5mCkBAIC0xNDkzLDIwICsxNDk0LDIxIEBACiAKIC8qIGRldmljZSBtYW5hZ2VtZW50ICovCiAKLXN0YXRpYyBpbnQgczNjMjQ0MF9zZXJpYWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDQwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJZGJnKCJzM2MyNDQwX3NlcmlhbF9wcm9iZTogZGV2PSVwXG4iLCBkZXYpOwogCXJldHVybiBzM2MyNHh4X3NlcmlhbF9wcm9iZShkZXYsICZzM2MyNDQwX3VhcnRfaW5mKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHMzYzI0NDBfc2VyaWFsX2RydiA9IHsKLQkubmFtZQkJPSAiczNjMjQ0MC11YXJ0IiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDQwX3NlcmlhbF9kcnYgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjR4eF9zZXJpYWxfcmVtb3ZlLAogCS5zdXNwZW5kCT0gczNjMjR4eF9zZXJpYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQ0MC11YXJ0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIApAQCAtMTUxNyw3ICsxNTE5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHMzYzI0NDBfc2VyaWFsX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9zZXJpYWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczNjMjQ0MF9zZXJpYWxfZHJ2KTsKIH0KIAogI2RlZmluZSBzM2MyNDQwX3VhcnRfaW5mX2F0ICZzM2MyNDQwX3VhcnRfaW5mCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCmluZGV4IGVkNjE4Y2MuLmZkOWRlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NhMTEwMC5jCkBAIC04MzQsOSArODM0LDkgQEAKIAkuY29ucwkJCT0gU0ExMTAwX0NPTlNPTEUsCiB9OwogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3N1c3BlbmRfcG9ydCgmc2ExMTAwX3JlZywgJnNwb3J0LT5wb3J0KTsKQEAgLTg0NCw5ICs4NDQsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IHNhMTEwMF9zZXJpYWxfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKHNwb3J0KQogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzYTExMDBfcmVnLCAmc3BvcnQtPnBvcnQpOwpAQCAtODU0LDkgKzg1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBzYTExMDBfc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoX2Rldik7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBkZXYtPnJlc291cmNlOwogCWludCBpOwogCkBAIC04NjksOSArODY4LDkgQEAKIAkJCWlmIChzYTExMDBfcG9ydHNbaV0ucG9ydC5tYXBiYXNlICE9IHJlcy0+c3RhcnQpCiAJCQkJY29udGludWU7CiAKLQkJCXNhMTEwMF9wb3J0c1tpXS5wb3J0LmRldiA9IF9kZXY7CisJCQlzYTExMDBfcG9ydHNbaV0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7CiAJCQl1YXJ0X2FkZF9vbmVfcG9ydCgmc2ExMTAwX3JlZywgJnNhMTEwMF9wb3J0c1tpXS5wb3J0KTsKLQkJCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCAmc2ExMTAwX3BvcnRzW2ldKTsKKwkJCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgJnNhMTEwMF9wb3J0c1tpXSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTg3OSwxMSArODc4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgc2ExMTAwX3NlcmlhbF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3Qgc2ExMTAwX3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBzYTExMDBfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWlmIChzcG9ydCkKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJnNhMTEwMF9yZWcsICZzcG9ydC0+cG9ydCk7CkBAIC04OTEsMTMgKzg5MCwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMXgwX3NlcmlhbF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInNhMTF4MC11YXJ0IiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9zZXJpYWxfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBfc2VyaWFsX3Byb2JlLAogCS5yZW1vdmUJCT0gc2ExMTAwX3NlcmlhbF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzYTExMDBfc2VyaWFsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzYTExMDBfc2VyaWFsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAic2ExMXgwLXVhcnQiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzYTExMDBfc2VyaWFsX2luaXQodm9pZCkKQEAgLTkxMCw3ICs5MTAsNyBAQAogCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnNhMTEwMF9yZWcpOwogCWlmIChyZXQgPT0gMCkgewotCQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CiAJCWlmIChyZXQpCiAJCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzYTExMDBfcmVnKTsKIAl9CkBAIC05MTksNyArOTE5LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHNhMTEwMF9zZXJpYWxfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfc2VyaWFsX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNhMTF4MF9zZXJpYWxfZHJpdmVyKTsKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZzYTExMDBfcmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jIGIvZHJpdmVycy9zZXJpYWwvdnI0MXh4X3NpdS5jCmluZGV4IDAxNjk2YjMuLjg2NWQ0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3ZyNDF4eF9zaXUuYworKysgYi9kcml2ZXJzL3NlcmlhbC92cjQxeHhfc2l1LmMKQEAgLTkyNCw3ICs5MjQsNyBAQAogCS5jb25zCQk9IFNFUklBTF9WUjQxWFhfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc2l1X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2l1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBudW0sIGksIHJldHZhbDsKQEAgLTk0MSw3ICs5NDEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewogCQlwb3J0ID0gJnNpdV91YXJ0X3BvcnRzW2ldOwogCQlwb3J0LT5vcHMgPSAmc2l1X3VhcnRfb3BzOwotCQlwb3J0LT5kZXYgPSBkZXY7CisJCXBvcnQtPmRldiA9ICZkZXYtPmRldjsKIAogCQlyZXR2YWwgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAkJaWYgKHJldHZhbCA8IDApIHsKQEAgLTk1OCwxNCArOTU4LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2l1X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNpdV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKLQkJaWYgKHBvcnQtPmRldiA9PSBkZXYpIHsKKwkJaWYgKHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpIHsKIAkJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCQkJcG9ydC0+ZGV2ID0gTlVMTDsKIAkJfQpAQCAtOTc2LDcgKzk3Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2l1X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNpdV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CiAJaW50IGk7CkBAIC05ODQsNyArOTg0LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKIAkJaWYgKChwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX1NJVSB8fAotCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09IGRldikKKwkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3N1c3BlbmRfcG9ydCgmc2l1X3VhcnRfZHJpdmVyLCBwb3J0KTsKIAogCX0KQEAgLTk5Miw3ICs5OTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNpdV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzaXVfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OwogCWludCBpOwpAQCAtMTAwMCw3ICsxMDAwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l1X3VhcnRfZHJpdmVyLm5yOyBpKyspIHsKIAkJcG9ydCA9ICZzaXVfdWFydF9wb3J0c1tpXTsKIAkJaWYgKChwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX1NJVSB8fAotCQkgICAgIHBvcnQtPnR5cGUgPT0gUE9SVF9WUjQxWFhfRFNJVSkgJiYgcG9ydC0+ZGV2ID09IGRldikKKwkJICAgICBwb3J0LT50eXBlID09IFBPUlRfVlI0MVhYX0RTSVUpICYmIHBvcnQtPmRldiA9PSAmZGV2LT5kZXYpCiAJCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzaXVfdWFydF9kcml2ZXIsIHBvcnQpOwogCX0KIApAQCAtMTAwOSwxMyArMTAwOSwxNCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2l1X3BsYXRmb3JtX2RldmljZTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNpdV9kZXZpY2VfZHJpdmVyID0gewotCS5uYW1lCQk9ICJTSVUiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2l1X2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNpdV9wcm9iZSwKIAkucmVtb3ZlCQk9IHNpdV9yZW1vdmUsCiAJLnN1c3BlbmQJPSBzaXVfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHNpdV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIlNJVSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZyNDF4eF9zaXVfaW5pdCh2b2lkKQpAQCAtMTAyNiw3ICsxMDI3LDcgQEAKIAlpZiAoSVNfRVJSKHNpdV9wbGF0Zm9ybV9kZXZpY2UpKQogCQlyZXR1cm4gUFRSX0VSUihzaXVfcGxhdGZvcm1fZGV2aWNlKTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2l1X2RldmljZV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzaXVfcGxhdGZvcm1fZGV2aWNlKTsKIApAQCAtMTAzNSw3ICsxMDM2LDcgQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IHZyNDF4eF9zaXVfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZzaXVfZGV2aWNlX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNpdV9kZXZpY2VfZHJpdmVyKTsKIAogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNpdV9wbGF0Zm9ybV9kZXZpY2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDkwNDUxOTAuLjFlNDA3NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTg5Niw3ICs4OTYsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkdW1teQkqZHVtID0gdGhlX2NvbnRyb2xsZXI7CiAJaW50CQlyYzsKQEAgLTkwOSw3ICs5MDksNyBAQAogCWR1bS0+Z2FkZ2V0LmlzX290ZyA9IChkdW1teV90b19oY2QoZHVtKS0+c2VsZi5vdGdfcG9ydCAhPSAwKTsKIAogCXN0cmNweSAoZHVtLT5nYWRnZXQuZGV2LmJ1c19pZCwgImdhZGdldCIpOwotCWR1bS0+Z2FkZ2V0LmRldi5wYXJlbnQgPSBkZXY7CisJZHVtLT5nYWRnZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAlkdW0tPmdhZGdldC5kZXYucmVsZWFzZSA9IGR1bW15X2dhZGdldF9yZWxlYXNlOwogCXJjID0gZGV2aWNlX3JlZ2lzdGVyICgmZHVtLT5nYWRnZXQuZGV2KTsKIAlpZiAocmMgPCAwKQpAQCAtOTE5LDI2ICs5MTksMjYgQEAKIAl1c2JfYnVzX2dldCAoJmR1bW15X3RvX2hjZCAoZHVtKS0+c2VsZik7CiAjZW5kaWYKIAotCWRldl9zZXRfZHJ2ZGF0YSAoZGV2LCBkdW0pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhIChkZXYsIGR1bSk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlICgmZHVtLT5nYWRnZXQuZGV2LCAmZGV2X2F0dHJfZnVuY3Rpb24pOwogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhIChkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhIChkZXYsIE5VTEwpOwogCWRldmljZV9yZW1vdmVfZmlsZSAoJmR1bS0+Z2FkZ2V0LmRldiwgJmRldl9hdHRyX2Z1bmN0aW9uKTsKIAlkZXZpY2VfdW5yZWdpc3RlciAoJmR1bS0+Z2FkZ2V0LmRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfdWRjX3N1c3BlbmQgKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkdW1teV91ZGNfc3VzcGVuZCAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGR1bW15CSpkdW0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZHVtbXkJKmR1bSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKwlkZXZfZGJnICgmZGV2LT5kZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAlzcGluX2xvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAlkdW0tPnVkY19zdXNwZW5kZWQgPSAxOwogCXNldF9saW5rX3N0YXRlIChkdW0pOwpAQCAtOTQ5LDI5ICs5NDksMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkdW1teV91ZGNfcmVzdW1lIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X3VkY19yZXN1bWUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZHVtbXkJKmR1bSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkdW1teQkqZHVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9kYmcgKGRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCXNwaW5fbG9ja19pcnEgKCZkdW0tPmxvY2spOwogCWR1bS0+dWRjX3N1c3BlbmRlZCA9IDA7CiAJc2V0X2xpbmtfc3RhdGUgKGR1bSk7CiAJc3Bpbl91bmxvY2tfaXJxICgmZHVtLT5sb2NrKTsKIAotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChkdW1teV90b19oY2QgKGR1bSkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZHVtbXlfdWRjX2RyaXZlciA9IHsKLQkubmFtZQkJPSAoY2hhciAqKSBnYWRnZXRfbmFtZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkdW1teV91ZGNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkdW1teV91ZGNfcHJvYmUsCiAJLnJlbW92ZQkJPSBkdW1teV91ZGNfcmVtb3ZlLAogCS5zdXNwZW5kCT0gZHVtbXlfdWRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBkdW1teV91ZGNfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9IChjaGFyICopIGdhZGdldF9uYW1lLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4OTgsMTQgKzE4OTksMTQgQEAKIAkuYnVzX3Jlc3VtZSA9CQlkdW1teV9idXNfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBkdW1teV9oY2RfcHJvYmUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3Byb2JlIChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJaW50CQkJcmV0dmFsOwogCiAJZGV2X2luZm8gKGRldiwgIiVzLCBkcml2ZXIgIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBkcml2ZXJfZGVzYyk7CiAKLQloY2QgPSB1c2JfY3JlYXRlX2hjZCAoJmR1bW15X2hjZCwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QgKCZkdW1teV9oY2QsICZkZXYtPmRldiwgZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdGhlX2NvbnRyb2xsZXIgPSBoY2RfdG9fZHVtbXkgKGhjZCk7CkBAIC0xOTE4LDQ4ICsxOTE5LDQ5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBkdW1teV9oY2RfcmVtb3ZlIChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGR1bW15X2hjZF9yZW1vdmUgKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAotCWhjZCA9IGRldl9nZXRfZHJ2ZGF0YSAoZGV2KTsKKwloY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSAoZGV2KTsKIAl1c2JfcmVtb3ZlX2hjZCAoaGNkKTsKIAl1c2JfcHV0X2hjZCAoaGNkKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHVtbXlfaGNkX3N1c3BlbmQgKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBkdW1teV9oY2Rfc3VzcGVuZCAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAKLQlkZXZfZGJnIChkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKLQloY2QgPSBkZXZfZ2V0X2RydmRhdGEgKGRldik7CisJZGV2X2RiZyAoJmRldi0+ZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEgKGRldik7CiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGR1bW15X2hjZF9yZXN1bWUgKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZHVtbXlfaGNkX3Jlc3VtZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCB1c2JfaGNkCQkqaGNkOwogCi0JZGV2X2RiZyAoZGV2LCAiJXNcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JaGNkID0gZGV2X2dldF9kcnZkYXRhIChkZXYpOworCWRldl9kYmcgKCZkZXYtPmRldiwgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCWhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhIChkZXYpOwogCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOwogCiAJdXNiX2hjZF9wb2xsX3JoX3N0YXR1cyAoaGNkKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGR1bW15X2hjZF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZHVtbXlfaGNkX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gZHVtbXlfaGNkX3Byb2JlLAogCS5yZW1vdmUJCT0gZHVtbXlfaGNkX3JlbW92ZSwKIAkuc3VzcGVuZAk9IGR1bW15X2hjZF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gZHVtbXlfaGNkX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAoY2hhciAqKSBkcml2ZXJfbmFtZSwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xOTk1LDExICsxOTk3LDExIEBACiAJaWYgKHVzYl9kaXNhYmxlZCAoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOworCXJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIGVycl9yZWdpc3Rlcl91ZGNfZHJpdmVyOwogCkBAIC0yMDE1LDkgKzIwMTcsOSBAQAogZXJyX3JlZ2lzdGVyX3VkYzoKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV9oY2RfcGRldik7CiBlcnJfcmVnaXN0ZXJfaGNkOgotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV91ZGNfZHJpdmVyKTsKIGVycl9yZWdpc3Rlcl91ZGNfZHJpdmVyOgotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogbW9kdWxlX2luaXQgKGluaXQpOwpAQCAtMjAyNiw3ICsyMDI4LDcgQEAKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlciAoJnRoZV91ZGNfcGRldik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIgKCZ0aGVfaGNkX3BkZXYpOwotCWRyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfdWRjX2RyaXZlcik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIgKCZkdW1teV9oY2RfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAoJmR1bW15X3VkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyICgmZHVtbXlfaGNkX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCAoY2xlYW51cCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDY1NDQ2OTcuLmIwZjNjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xOTcwLDcgKzE5NzAsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdva3VfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCiAJLnByb2JlID0JZ29rdV9wcm9iZSwKIAkucmVtb3ZlID0JZ29rdV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGg3YTQweF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCmluZGV4IGJjNjI2OWYuLmUwMmZlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jCkBAIC0yMDg1LDIxICsyMDg1LDIxIEBACiAvKgogICogCXByb2JlIC0gYmluZHMgdG8gdGhlIHBsYXRmb3JtIGRldmljZQogICovCi1zdGF0aWMgaW50IGxoN2E0MHhfdWRjX3Byb2JlKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgaW50IGxoN2E0MHhfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSAmbWVtb3J5OwogCWludCByZXR2YWw7CiAKLQlERUJVRygiJXM6ICVwXG4iLCBfX0ZVTkNUSU9OX18sIF9kZXYpOworCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5sb2NrKTsKLQlkZXYtPmRldiA9IF9kZXY7CisJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+Z2FkZ2V0LmRldik7Ci0JZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9IF9kZXY7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKIAl0aGVfY29udHJvbGxlciA9IGRldjsKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJdWRjX2Rpc2FibGUoZGV2KTsKIAl1ZGNfcmVpbml0KGRldik7CkBAIC0yMTE5LDExICsyMTE5LDExIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBsaDdhNDB4X3VkY19yZW1vdmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgbGg3YTQweF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGxoN2E0MHhfdWRjICpkZXYgPSBfZGV2LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgbGg3YTQweF91ZGMgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JREVCVUcoIiVzOiAlcFxuIiwgX19GVU5DVElPTl9fLCBkZXYpOworCURFQlVHKCIlczogJXBcbiIsIF9fRlVOQ1RJT05fXywgcGRldik7CiAKIAl1ZGNfZGlzYWJsZShkZXYpOwogCXJlbW92ZV9wcm9jX2ZpbGVzKCk7CkBAIC0yMTMxLDcgKzIxMzEsNyBAQAogCiAJZnJlZV9pcnEoSVJRX1VTQklOVFIsIGRldik7CiAKLQlkZXZfc2V0X2RydmRhdGEoX2RldiwgMCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgMCk7CiAKIAl0aGVfY29udHJvbGxlciA9IDA7CiAKQEAgLTIxNDAsMjYgKzIxNDAsMjcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVkY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAoY2hhciAqKWRyaXZlcl9uYW1lLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZGNfZHJpdmVyID0gewogCS5wcm9iZSA9IGxoN2E0MHhfdWRjX3Byb2JlLAogCS5yZW1vdmUgPSBsaDdhNDB4X3VkY19yZW1vdmUKIAkgICAgLyogRklYTUUgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0ICovCiAJICAgIC8qIC5zdXNwZW5kID0gLi4uIGRpc2FibGUgVURDICovCiAJICAgIC8qIC5yZXN1bWUgPSAuLi4gcmUtZW5hYmxlIFVEQyAqLworCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKilkcml2ZXJfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHVkY19pbml0KHZvaWQpCiB7CiAJREVCVUcoIiVzOiAlcyB2ZXJzaW9uICVzXG4iLCBfX0ZVTkNUSU9OX18sIGRyaXZlcl9uYW1lLCBEUklWRVJfVkVSU0lPTik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHVkY19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDBkYzZiYjAuLmMzMmUxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMjk0OCw3ICsyOTQ4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXQyMjgwX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKikgZHJpdmVyX25hbWUsCiAJLmlkX3RhYmxlID0JcGNpX2lkcywKLQkub3duZXIgPQlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CW5ldDIyODBfcHJvYmUsCiAJLnJlbW92ZSA9CW5ldDIyODBfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L29tYXBfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwppbmRleCAzODc2OTJhLi5hODk3MmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYwpAQCAtMjcwNywxOCArMjcwNywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX3VkY19wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX3VkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKm9kZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQJCQlzdGF0dXMgPSAtRU5PREVWOwogCWludAkJCWhtYzsKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCSp4Y2VpdiA9IE5VTEw7CiAJY29uc3QgY2hhcgkJKnR5cGUgPSBOVUxMOwotCXN0cnVjdCBvbWFwX3VzYl9jb25maWcJKmNvbmZpZyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgb21hcF91c2JfY29uZmlnCSpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCS8qIE5PVEU6ICAia25vd3MiIHRoZSBvcmRlciBvZiB0aGUgcmVzb3VyY2VzISAqLwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LCAKLQkJCW9kZXYtPnJlc291cmNlWzBdLmVuZCAtIG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSwKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwgCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCiAJCQlkcml2ZXJfbmFtZSkpIHsKIAkJREJHKCJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTI4MDMsNyArMjgwMiw3IEBACiAJSU5GTygiaG1jIG1vZGUgJWQsICVzIHRyYW5zY2VpdmVyXG4iLCBobWMsIHR5cGUpOwogCiAJLyogYSAiZ2FkZ2V0IiBhYnN0cmFjdHMvdmlydHVhbGl6ZXMgdGhlIGNvbnRyb2xsZXIgKi8KLQlzdGF0dXMgPSBvbWFwX3VkY19zZXR1cChvZGV2LCB4Y2Vpdik7CisJc3RhdHVzID0gb21hcF91ZGNfc2V0dXAocGRldiwgeGNlaXYpOwogCWlmIChzdGF0dXMpIHsKIAkJZ290byBjbGVhbnVwMDsKIAl9CkBAIC0yODIxLDI4ICsyODIwLDI4IEBACiAJCXVkYy0+Y2xyX2hhbHQgPSBVRENfUkVTRVRfRVA7CiAKIAkvKiBVU0IgZ2VuZXJhbCBwdXJwb3NlIElSUTogIGVwMCwgc3RhdGUgY2hhbmdlcywgZG1hLCBldGMgKi8KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgb21hcF91ZGNfaXJxLAorCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBvbWFwX3VkY19pcnEsCiAJCQlTQV9TQU1QTEVfUkFORE9NLCBkcml2ZXJfbmFtZSwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzFdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDE7CiAJfQogCiAJLyogVVNCICJub24taXNvIiBJUlEgKFBJTyBmb3IgYWxsIGJ1dCBlcDApICovCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCisJc3RhdHVzID0gcmVxdWVzdF9pcnEocGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIG9tYXBfdWRjX3Bpb19pcnEsCiAJCQlTQV9TQU1QTEVfUkFORE9NLCAib21hcF91ZGMgcGlvIiwgdWRjKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKIAkJRVJSKCAiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzJdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDI7CiAJfQogI2lmZGVmCVVTRV9JU08KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShvZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgb21hcF91ZGNfaXNvX2lycSwKKwlzdGF0dXMgPSByZXF1ZXN0X2lycShwZGV2LT5yZXNvdXJjZVszXS5zdGFydCwgb21hcF91ZGNfaXNvX2lycSwKIAkJCVNBX0lOVEVSUlVQVCwgIm9tYXBfdWRjIGlzbyIsIHVkYyk7CiAJaWYgKHN0YXR1cyAhPSAwKSB7CiAJCUVSUigiY2FuJ3QgZ2V0IGlycSAlbGQsIGVyciAlZFxuIiwKLQkJCW9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCBzdGF0dXMpOworCQkJcGRldi0+cmVzb3VyY2VbM10uc3RhcnQsIHN0YXR1cyk7CiAJCWdvdG8gY2xlYW51cDM7CiAJfQogI2VuZGlmCkBAIC0yODUzLDExICsyODUyLDExIEBACiAKICNpZmRlZglVU0VfSVNPCiBjbGVhbnVwMzoKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsyXS5zdGFydCwgdWRjKTsKICNlbmRpZgogCiBjbGVhbnVwMjoKLQlmcmVlX2lycShvZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKKwlmcmVlX2lycShwZGV2LT5yZXNvdXJjZVsxXS5zdGFydCwgdWRjKTsKIAogY2xlYW51cDE6CiAJa2ZyZWUgKHVkYyk7CkBAIC0yODY2LDE0ICsyODY1LDEzIEBACiBjbGVhbnVwMDoKIAlpZiAoeGNlaXYpCiAJCXB1dF9kZXZpY2UoeGNlaXYtPmRldik7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKG9kZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJb2Rldi0+cmVzb3VyY2VbMF0uZW5kIC0gb2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IG9tYXBfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBvbWFwX3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOwogCiAJaWYgKCF1ZGMpCkBAIC0yODkxLDEzICsyODg5LDEzIEBACiAJcmVtb3ZlX3Byb2NfZmlsZSgpOwogCiAjaWZkZWYJVVNFX0lTTwotCWZyZWVfaXJxKG9kZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOworCWZyZWVfaXJxKHBkZXYtPnJlc291cmNlWzNdLnN0YXJ0LCB1ZGMpOwogI2VuZGlmCi0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7Ci0JZnJlZV9pcnEob2Rldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMl0uc3RhcnQsIHVkYyk7CisJZnJlZV9pcnEocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsIHVkYyk7CiAKLQlyZWxlYXNlX21lbV9yZWdpb24ob2Rldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlvZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBvZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKKwkJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsgMSk7CiAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKQEAgLTI5MTUsNyArMjkxMyw3IEBACiAgKiBtYXkgaW52b2x2ZSB0YWxraW5nIHRvIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChlLmcuIGlzcDEzMDEpLgogICovCiAKLXN0YXRpYyBpbnQgb21hcF91ZGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCBvbWFwX3VkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJdTMyCWRldnN0YXQ7CiAKQEAgLTI5MzUsNyArMjkzMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb21hcF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlEQkcoInJlc3VtZSArIHdha2V1cC9TUlBcbiIpOwogCW9tYXBfcHVsbHVwKCZ1ZGMtPmdhZGdldCwgMSk7CkBAIC0yOTQ3LDE0ICsyOTQ1LDE1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1ZGNfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHVkY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfdWRjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF91ZGNfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IG9tYXBfdWRjX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvbWFwX3VkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9IChjaGFyICopIGRyaXZlcl9uYW1lLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB1ZGNfaW5pdCh2b2lkKQpAQCAtMjk2NSwxMyArMjk2NCwxMyBAQAogI2VuZGlmCiAJCSIlc1xuIiwgZHJpdmVyX2Rlc2MsCiAJCXVzZV9kbWEgPyAgIiAoZG1hKSIgOiAiIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdCh1ZGNfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1ZGNfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdWRjX2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdCh1ZGNfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCmluZGV4IDUxMGQyOGEuLmJiMDI4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYwpAQCAtMjQzMiw3ICsyNDMyLDcgQEAKIC8qCiAgKiAJcHJvYmUgLSBiaW5kcyB0byB0aGUgcGxhdGZvcm0gZGV2aWNlCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF91ZGNfcHJvYmUoc3RydWN0IGRldmljZSAqX2RldikKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF91ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gJm1lbW9yeTsKIAlpbnQgcmV0dmFsLCBvdXRfZG1hID0gMTsKQEAgLTI0OTUsMTkgKzI0OTUsMTkgQEAKICNlbmRpZgogCiAJLyogb3RoZXIgbm9uLXN0YXRpYyBwYXJ0cyBvZiBpbml0ICovCi0JZGV2LT5kZXYgPSBfZGV2OwotCWRldi0+bWFjaCA9IF9kZXYtPnBsYXRmb3JtX2RhdGE7CisJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCWRldi0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaW5pdF90aW1lcigmZGV2LT50aW1lcik7CiAJZGV2LT50aW1lci5mdW5jdGlvbiA9IHVkY193YXRjaGRvZzsKIAlkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+Z2FkZ2V0LmRldik7Ci0JZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9IF9kZXY7Ci0JZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gX2Rldi0+ZG1hX21hc2s7CisJZGV2LT5nYWRnZXQuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJZGV2LT5nYWRnZXQuZGV2LmRtYV9tYXNrID0gcGRldi0+ZGV2LmRtYV9tYXNrOwogCiAJdGhlX2NvbnRyb2xsZXIgPSBkZXY7Ci0JZGV2X3NldF9kcnZkYXRhKF9kZXYsIGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJdWRjX3JlaW5pdChkZXYpOwpAQCAtMjU1OSwxNCArMjU1OSwxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBweGEyeHhfdWRjX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKl9kZXYpCitzdGF0aWMgdm9pZCBweGEyeHhfdWRjX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKl9kZXYpCiB7CiAJcHVsbHVwX29mZigpOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfdWRjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X3VkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXN0cnVjdCBweGEyeHhfdWRjICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVkY19kaXNhYmxlKGRldik7CiAJcmVtb3ZlX3Byb2NfZmlsZXMoKTsKQEAgLTI1ODAsNyArMjU4MCw3IEBACiAJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0RJU0NfSVJRLCBkZXYpOwogCQlmcmVlX2lycShMVUJCT0NLX1VTQl9JUlEsIGRldik7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YShfZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjAxLDkgKzI2MDEsOSBAQAogICogVkJVUyBJUlFzIHNob3VsZCBwcm9iYWJseSBiZSBpZ25vcmVkIHNvIHRoYXQgdGhlIFBYQSBkZXZpY2UganVzdCBhY3RzCiAgKiAiZGVhZCIgdG8gVVNCIGhvc3RzIHVudGlsIHN5c3RlbSByZXN1bWUuCiAgKi8KLXN0YXRpYyBpbnQgcHhhMnh4X3VkY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfdWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfdWRjCSp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCF1ZGMtPm1hY2gtPnVkY19jb21tYW5kKQogCQlXQVJOKCJVU0IgaG9zdCB3b24ndCBkZXRlY3QgZGlzY29ubmVjdCFcbiIpOwpAQCAtMjYxMiw5ICsyNjEyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfdWRjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF91ZGNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X3VkYwkqdWRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF91ZGMJKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlwdWxsdXAodWRjLCAxKTsKIApAQCAtMjYyOCwyNyArMjYyOCwyOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LXVkYyIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWRjX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcHhhMnh4X3VkY19wcm9iZSwKIAkuc2h1dGRvd24JPSBweGEyeHhfdWRjX3NodXRkb3duLAogCS5yZW1vdmUJCT0gX19leGl0X3AocHhhMnh4X3VkY19yZW1vdmUpLAogCS5zdXNwZW5kCT0gcHhhMnh4X3VkY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X3VkY19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJweGEyeHgtdWRjIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdmVyc2lvbiAlc1xuIiwgZHJpdmVyX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHVkY19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1ZGNfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHVkY19leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCmluZGV4IDE0NTAwODguLmRmZDliZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKQEAgLTM4Myw3ICszODMsNiBAQAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVoY2lfcGNpX2RyaXZlciA9IHsKIAkubmFtZSA9CQkoY2hhciAqKSBoY2RfbmFtZSwKIAkuaWRfdGFibGUgPQlwY2lfaWRzLAotCS5vd25lciA9IAlUSElTX01PRFVMRSwKIAogCS5wcm9iZSA9CXVzYl9oY2RfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQl1c2JfaGNkX3BjaV9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKaW5kZXggZjljM2Y1Yi4uODJmNjQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwpAQCAtMTYzMywxNyArMTYzMywxNSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUgaXNwMTE2eF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXRfb3JfbW9kdWxlIGlzcDExNnhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCiAJaWYgKCFoY2QpCiAJCXJldHVybiAwOwogCWlzcDExNnggPSBoY2RfdG9faXNwMTE2eChoY2QpOwotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOwogCXJlbW92ZV9kZWJ1Z19maWxlKGlzcDExNngpOwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CiAKQEAgLTE2NjAsMTggKzE2NTgsMTYgQEAKIAogI2RlZmluZSByZXNvdXJjZV9sZW4ocikgKCgociktPmVuZCAtIChyKS0+c3RhcnQpICsgMSkKIAotc3RhdGljIGludCBfX2luaXQgaXNwMTE2eF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpc3AxMTZ4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgaXNwMTE2eCAqaXNwMTE2eDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqYWRkciwgKmRhdGE7CiAJdm9pZCBfX2lvbWVtICphZGRyX3JlZzsKIAl2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwogCWludCBpcnE7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKIAlpZiAocGRldi0+bnVtX3Jlc291cmNlcyA8IDMpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnIxOwpAQCAtMTY4NSw3ICsxNjgxLDcgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmIChkZXYtPmRtYV9tYXNrKSB7CisJaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewogCQlEQkcoIkRNQSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnIxOwpAQCAtMTcxMSw3ICsxNzA3LDcgQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBoY2QgKi8KLQloY2QgPSB1c2JfY3JlYXRlX2hjZCgmaXNwMTE2eF9oY19kcml2ZXIsIGRldiwgZGV2LT5idXNfaWQpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZpc3AxMTZ4X2hjX2RyaXZlciwgJnBkZXYtPmRldiwgcGRldi0+ZGV2LmJ1c19pZCk7CiAJaWYgKCFoY2QpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnI1OwpAQCAtMTcyMyw3ICsxNzE5LDcgQEAKIAlpc3AxMTZ4LT5hZGRyX3JlZyA9IGFkZHJfcmVnOwogCXNwaW5fbG9ja19pbml0KCZpc3AxMTZ4LT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaXNwMTE2eC0+YXN5bmMpOwotCWlzcDExNngtPmJvYXJkID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlzcDExNngtPmJvYXJkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAoIWlzcDExNngtPmJvYXJkKSB7CiAJCUVSUigiUGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgbm90IGluaXRpYWxpemVkXG4iKTsKQEAgLTE3NjQsMTMgKzE3NjAsMTMgQEAKIC8qCiAgIFN1c3BlbmQgb2YgcGxhdGZvcm0gZGV2aWNlCiAqLwotc3RhdGljIGludCBpc3AxMTZ4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlzcDExNnhfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAogCVZEQkcoIiVzOiBzdGF0ZSAleFxuIiwgX19mdW5jX18sIHN0YXRlKTsKIAotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IHN0YXRlOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3NzgsMTMgKzE3NzQsMTMgQEAKIC8qCiAgIFJlc3VtZSBwbGF0Zm9ybSBkZXZpY2UKICovCi1zdGF0aWMgaW50IGlzcDExNnhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaXNwMTE2eF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQgPSAwOwogCi0JVkRCRygiJXM6ICBzdGF0ZSAleFxuIiwgX19mdW5jX18sIGRldi0+cG93ZXIucG93ZXJfc3RhdGUpOworCVZEQkcoIiVzOiAgc3RhdGUgJXhcbiIsIF9fZnVuY19fLCBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSk7CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc5NiwxMyArMTc5MiwxNCBAQAogCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGlzcDExNnhfZHJpdmVyID0gewotCS5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXNwMTE2eF9kcml2ZXIgPSB7CiAJLnByb2JlID0gaXNwMTE2eF9wcm9iZSwKIAkucmVtb3ZlID0gaXNwMTE2eF9yZW1vdmUsCiAJLnN1c3BlbmQgPSBpc3AxMTZ4X3N1c3BlbmQsCiAJLnJlc3VtZSA9IGlzcDExNnhfcmVzdW1lLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKKwl9LAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xODEzLDE0ICsxODEwLDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJSU5GTygiZHJpdmVyICVzLCAlc1xuIiwgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpc3AxMTZ4X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpc3AxMTZ4X2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTE2eF9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDExNnhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaXNwMTE2eF9kcml2ZXIpOwogfQogCiBtb2R1bGVfZXhpdChpc3AxMTZ4X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCmluZGV4IGYwYzc4Y2YuLmQ5Y2YzYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKQEAgLTIyNSw5ICsyMjUsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlwcl9kZWJ1ZyAoIkluIG9oY2lfaGNkX2F1MXh4eF9kcnZfcHJvYmUiKTsKQEAgLTIzOSwzOSArMjM4LDM3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAl1c2JfaGNkX2F1MXh4eF9yZW1vdmUoaGNkLCBwZGV2KTsKIAlyZXR1cm4gMDsKIH0KIAkvKlRCRCovCi0vKnN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKKy8qc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXJldHVybiAwOwogfQogKi8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImF1MXh4eC1vaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9hdTF4eHhfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfc3VzcGVuZCwgKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3Jlc3VtZSwgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXUxeHh4LW9oY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfYXUxeHh4X2luaXQgKHZvaWQpCkBAIC0yODAsMTIgKzI3NywxMiBAQAogCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX2F1MXh4eF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9hdTF4eHhfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfYXUxeHh4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9hdTF4eHhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCAzMzZjNzY2Li4wODFlYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTIwNCw5ICsyMDQsOCBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldDsKIAogCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcHJvYmUiKTsKQEAgLTIxOCw0MCArMjE3LDM4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJdXNiX2hjZF9saDdhNDA0X3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCS8qVEJEKi8KLS8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKKy8qc3RhdGljIGludCBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCiAJcmV0dXJuIDA7CiB9CiAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImxoN2E0MDQtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibGg3YTQwNC1vaGNpIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX2xoN2E0MDRfaW5pdCAodm9pZCkKQEAgLTI2MCwxMiArMjU3LDEyIEBACiAJcHJfZGVidWcgKCJibG9jayBzaXplczogZWQgJWQgdGQgJWRcbiIsCiAJCXNpemVvZiAoc3RydWN0IGVkKSwgc2l6ZW9mIChzdHJ1Y3QgdGQpKTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9saDdhNDA0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9saDdhNDA0X2NsZWFudXAgKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX2xoN2E0MDRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCAob2hjaV9oY2RfbGg3YTQwNF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCmluZGV4IGU0NmNjNTQuLmM5ZTI5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwpAQCAtNDMzLDI0ICs0MzMsMjIgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9vbWFwX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLAotCQkJCXRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlyZXR1cm4gdXNiX2hjZF9vbWFwX3Byb2JlKCZvaGNpX29tYXBfaGNfZHJpdmVyLCBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAotCXVzYl9oY2Rfb21hcF9yZW1vdmUoaGNkLCBwZGV2KTsKKwl1c2JfaGNkX29tYXBfcmVtb3ZlKGhjZCwgZGV2KTsKIAlpZiAob2hjaS0+dHJhbnNjZWl2ZXIpIHsKIAkJKHZvaWQpIG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwgMCk7CiAJCXB1dF9kZXZpY2Uob2hjaS0+dHJhbnNjZWl2ZXItPmRldik7CiAJfQotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OSw5ICs0NTcsOSBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3N0YXRpYyBpbnQgb2hjaV9vbWFwX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKQEAgLTQ3Myw5ICs0NzEsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfb21hcF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX29tYXBfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kgPSBoY2RfdG9fb2hjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2kocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CiAKIAlpZiAodGltZV9iZWZvcmUoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCiAJCW1zbGVlcCg1KTsKQEAgLTQ5NCwxNiArNDkyLDE3IEBACiAvKgogICogRHJpdmVyIGRlZmluaXRpb24gdG8gcmVnaXN0ZXIgd2l0aCB0aGUgT01BUCBidXMKICAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG9oY2lfaGNkX29tYXBfZHJpdmVyID0gewotCS5uYW1lCQk9ICJvaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9vbWFwX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9vbWFwX2Rydl9yZW1vdmUsCiAjaWZkZWYJQ09ORklHX1BNCiAJLnN1c3BlbmQJPSBvaGNpX29tYXBfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9oY2lfb21hcF9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIm9oY2kiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvaGNpX2hjZF9vbWFwX2luaXQgKHZvaWQpCkBAIC01MTUsMTIgKzUxNCwxMiBAQAogCXByX2RlYnVnKCIlczogYmxvY2sgc2l6ZXM6IGVkICVaZCB0ZCAlWmRcbiIsIGhjZF9uYW1lLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2Rfb21hcF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2Rfb21hcF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9vbWFwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX29tYXBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX29tYXBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKaW5kZXggN2NlMWQ5ZS4uYTU5ZTUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYwpAQCAtMjE4LDcgKzIxOCw2IEBACiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgb2hjaV9wY2lfZHJpdmVyID0gewogCS5uYW1lID0JCShjaGFyICopIGhjZF9uYW1lLAogCS5pZF90YWJsZSA9CXBjaV9pZHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKaW5kZXggOTJjZjZmNC4uMTg3NTU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCkBAIC0xNzIsOSArMTcyLDggQEAKIAkuc3RhcnRfcG9ydF9yZXNldCA9CW9oY2lfc3RhcnRfcG9ydF9yZXNldCwKIH07CiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9wcGNfc29jX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgcmV0OwogCiAJaWYgKHVzYl9kaXNhYmxlZCgpKQpAQCAtMTg0LDI1ICsxODMsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAl1c2JfaGNkX3BwY19zb2NfcmVtb3ZlKGhjZCwgcGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9wcGNfc29jX2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHBjLXNvYy1vaGNpIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9wcGNfc29jX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZW1vdmUsCiAjaWZkZWYJQ09ORklHX1BNCiAJLyouc3VzcGVuZAk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3N1c3BlbmQsKi8KIAkvKi5yZXN1bWUJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9yZXN1bWUsKi8KICNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJwcGMtc29jLW9oY2kiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcHBjX3NvY19pbml0KHZvaWQpCkBAIC0yMTEsMTIgKzIxMCwxMiBAQAogCXByX2RlYnVnKCJibG9jayBzaXplczogZWQgJWQgdGQgJWRcbiIsIHNpemVvZihzdHJ1Y3QgZWQpLAogCQkJCQkJCXNpemVvZihzdHJ1Y3QgdGQpKTsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9oY2lfaGNkX3BwY19zb2NfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvaGNpX2hjZF9wcGNfc29jX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9wcGNfc29jX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KG9oY2lfaGNkX3BwY19zb2NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggNTllMjA1Ni4uOWQ2NWVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMjkwLDkgKzI5MCw4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldDsKIAogCXByX2RlYnVnICgiSW4gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSIpOwpAQCAtMzA0LDQxICszMDMsMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXVzYl9oY2RfcHhhMjd4X3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotLy8Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotLy8Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworLy8Jc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJcHJpbnRrKCIlczogbm90IGltcGxlbWVudGVkIHlldFxuIiwgX19GVU5DVElPTl9fKTsKIAogCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBvaGNpX2hjZF9weGEyN3hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJweGEyN3gtb2hjaSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9weGEyN3hfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBvaGNpX2hjZF9weGEyN3hfZHJ2X3N1c3BlbmQsIAotCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsIAorCS5yZXN1bWUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTI3eC1vaGNpIiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb2hjaV9oY2RfcHhhMjd4X2luaXQgKHZvaWQpCkBAIC0zNDcsMTIgKzM0NCwxMiBAQAogCXByX2RlYnVnICgiYmxvY2sgc2l6ZXM6IGVkICVkIHRkICVkXG4iLAogCQlzaXplb2YgKHN0cnVjdCBlZCksIHNpemVvZiAoc3RydWN0IHRkKSk7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9oY2lfaGNkX3B4YTI3eF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9weGEyN3hfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb2hjaV9oY2RfcHhhMjd4X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0IChvaGNpX2hjZF9weGEyN3hfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCBlZTFmYzYwLi4zNWNjOTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTQ1OSwzOSArNDU5LDM4IEBACiAKIC8qIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBvaGNpX2hjZF9zM2MyNDEwX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXJldHVybiB1c2JfaGNkX3MzYzI0MTBfcHJvYmUoJm9oY2lfczNjMjQxMF9oY19kcml2ZXIsIHBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJdXNiX2hjZF9zM2MyNDEwX3JlbW92ZShoY2QsIHBkZXYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInMzYzI0MTAtb2hjaSIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Jlc3VtZSwgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInMzYzI0MTAtb2hjaSIsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9oY2lfaGNkX3MzYzI0MTBfaW5pdCAodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb2hjaV9oY2RfczNjMjQxMF9jbGVhbnVwICh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZvaGNpX2hjZF9zM2MyNDEwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQgKG9oY2lfaGNkX3MzYzI0MTBfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCA1NjA3YzBhLi5hNzcyMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTE2MzEsMjQgKzE2MzEsMjEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBpbnQgX19kZXZleGl0Ci1zbDgxMWhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3NsODExaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbDgxMQkJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQogCXJlbW92ZV9kZWJ1Z19maWxlKHNsODExKTsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCiAJLyogc29tZSBwbGF0Zm9ybXMgbWF5IHVzZSBJT1JFU09VUkNFX0lPICovCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CiAJaWYgKHJlcykKIAkJaW91bm1hcChzbDgxMS0+ZGF0YV9yZWcpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKHJlcykKIAkJaW91bm1hcChzbDgxMS0+YWRkcl9yZWcpOwogCkBAIC0xNjU3LDExICsxNjU0LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0Ci1zbDgxMWhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc2w4MTFoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKIAlzdHJ1Y3Qgc2w4MTEJCSpzbDgxMTsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OwogCXN0cnVjdCByZXNvdXJjZQkJKmFkZHIsICpkYXRhOwogCWludAkJCWlycTsKIAl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsKQEAgLTE2NzQsMjQgKzE2NzAsMjMgQEAKIAkgKiBzcGVjaWZpYyBwbGF0Zm9ybV9kYXRhLiAgd2UgZG9uJ3QgcHJvYmUgZm9yIElSUXMsIGFuZCBkbyBvbmx5CiAJICogbWluaW1hbCBzYW5pdHkgY2hlY2tpbmcuCiAJICovCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0JaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAocGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgaXJxIDwgMCkKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKGRldiwgMCk7CisJaWYgKGRldi0+bnVtX3Jlc291cmNlcyA8IDMgfHwgaXJxIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiByZWZ1c2UgdG8gY29uZnVzZSB1c2Jjb3JlICovCi0JaWYgKGRldi0+ZG1hX21hc2spIHsKKwlpZiAoZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKCJubyB3ZSB3b24ndCBkbWFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiB0aGUgY2hpcCBtYXkgYmUgd2lyZWQgZm9yIGVpdGhlciBraW5kIG9mIGFkZHJlc3NpbmcgKi8KLQlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CiAJcmV0dmFsID0gLUVCVVNZOwogCWlmICghYWRkciB8fCAhZGF0YSkgewotCQlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCQlkYXRhID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDEpOworCQlhZGRyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJCWRhdGEgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX0lPLCAxKTsKIAkJaWYgKCFhZGRyIHx8ICFkYXRhKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCWlvYWRkciA9IDE7CkBAIC0xNzEzLDcgKzE3MDgsNyBAQAogCX0KIAogCS8qIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGhjZCAqLwotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZzbDgxMWhfaGNfZHJpdmVyLCBkZXYsIGRldi0+YnVzX2lkKTsKKwloY2QgPSB1c2JfY3JlYXRlX2hjZCgmc2w4MTFoX2hjX2RyaXZlciwgJmRldi0+ZGV2LCBkZXYtPmRldi5idXNfaWQpOwogCWlmICghaGNkKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyNTsKQEAgLTE3MjMsNyArMTcxOCw3IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmc2w4MTEtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZzbDgxMS0+YXN5bmMpOwotCXNsODExLT5ib2FyZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlzbDgxMS0+Ym9hcmQgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWluaXRfdGltZXIoJnNsODExLT50aW1lcik7CiAJc2w4MTEtPnRpbWVyLmZ1bmN0aW9uID0gc2w4MTFoX3RpbWVyOwogCXNsODExLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHNsODExOwpAQCAtMTc4NSw5ICsxNzgwLDkgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1zbDgxMWhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3NsODExaF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2w4MTEJKnNsODExID0gaGNkX3RvX3NsODExKGhjZCk7CiAJaW50CQlyZXR2YWwgPSAwOwogCkBAIC0xNzk2LDI3ICsxNzkxLDI3IEBACiAJZWxzZSBpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkKIAkJcG9ydF9wb3dlcihzbDgxMSwgMCk7CiAJaWYgKHJldHZhbCA9PSAwKQotCQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CisJCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludAotc2w4MTFoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzbDgxMWhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNsODExCSpzbDgxMSA9IGhjZF90b19zbDgxMShoY2QpOwogCiAJLyogd2l0aCBubyAiY2hlY2sgdG8gc2VlIGlmIFZCVVMgaXMgc3RpbGwgcG93ZXJlZCIgYm9hcmQgaG9vaywKIAkgKiBsZXQncyBhc3N1bWUgaXQnZCBvbmx5IGJlIHBvd2VyZWQgdG8gZW5hYmxlIHJlbW90ZSB3YWtldXAuCiAJICovCi0JaWYgKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORAorCWlmIChkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5ECiAJCQl8fCAhaGNkLT5jYW5fd2FrZXVwKSB7CiAJCXNsODExLT5wb3J0MSA9IDA7CiAJCXBvcnRfcG93ZXIoc2w4MTEsIDEpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJcmV0dXJuIHNsODExaF9idXNfcmVzdW1lKGhjZCk7CiB9CiAKQEAgLTE4MjksMTYgKzE4MjQsMTYgQEAKIAogCiAvKiB0aGlzIGRyaXZlciBpcyBleHBvcnRlZCBzbyBzbDgxMV9jcyBjYW4gZGVwZW5kIG9uIGl0ICovCi1zdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbDgxMWhfZHJpdmVyID0gewotCS5uYW1lID0JCShjaGFyICopIGhjZF9uYW1lLAotCS5idXMgPQkJJnBsYXRmb3JtX2J1c190eXBlLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAotCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNsODExaF9kcml2ZXIgPSB7CiAJLnByb2JlID0Jc2w4MTFoX3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcChzbDgxMWhfcmVtb3ZlKSwKIAogCS5zdXNwZW5kID0Jc2w4MTFoX3N1c3BlbmQsCiAJLnJlc3VtZSA9CXNsODExaF9yZXN1bWUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPQkoY2hhciAqKSBoY2RfbmFtZSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKIH07CiBFWFBPUlRfU1lNQk9MKHNsODExaF9kcml2ZXIpOwogCkBAIC0xODUwLDEyICsxODQ1LDEyIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJSU5GTygiZHJpdmVyICVzLCAlc1xuIiwgaGNkX25hbWUsIERSSVZFUl9WRVJTSU9OKTsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKIH0KIG1vZHVsZV9pbml0KHNsODExaF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHNsODExaF9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnNsODExaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzbDgxMWhfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KHNsODExaF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCAxNWUwYTUxLi5kMzNjZTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC04MzEsNyArODMxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB1aGNpX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJKGNoYXIgKiloY2RfbmFtZSwKIAkuaWRfdGFibGUgPQl1aGNpX3BjaV9pZHMsCi0JLm93bmVyID0JVEhJU19NT0RVTEUsCiAKIAkucHJvYmUgPQl1c2JfaGNkX3BjaV9wcm9iZSwKIAkucmVtb3ZlID0JdXNiX2hjZF9wY2lfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hY29ybmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwppbmRleCAxOTNiNDgyLi43NTBjZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYwpAQCAtMTI3OSw3ICsxMjc5LDcgQEAKIAlwcmludGsoImFjb3JuZmI6IGZyZWVkICVkSyBtZW1vcnlcbiIsIG1iX2ZyZWVkKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgYWNvcm5mYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhY29ybmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdV9pbnQgaF9zeW5jLCB2X3N5bmM7CkBAIC0xMjkyLDcgKzEyOTIsNyBAQAogCiAJYWNvcm5mYl9pbml0X2ZiaW5mbygpOwogCi0JY3VycmVudF9wYXIuZGV2ID0gZGV2OworCWN1cnJlbnRfcGFyLmRldiA9ICZkZXYtPmRldjsKIAogCWlmIChjdXJyZW50X3Bhci5tb250eXBlID09IC0xKQogCQljdXJyZW50X3Bhci5tb250eXBlID0gYWNvcm5mYl9kZXRlY3RfbW9uaXRvcnR5cGUoKTsKQEAgLTE0NTMsMTUgKzE0NTMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGFjb3JuZmJfZHJpdmVyID0gewotCS5uYW1lCT0gImFjb3JuZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhY29ybmZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBhY29ybmZiX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImFjb3JuZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhY29ybmZiX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhY29ybmZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYWNvcm5mYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhY29ybmZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hcmNmYi5jIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCmluZGV4IGExZmM4YmIuLjA4MGRiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKQEAgLTUxNCw5ICs1MTQsOCBAQAogCS5mYl9pb2N0bCAJPSBhcmNmYl9pb2N0bCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFyY2ZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IGFyY2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAlpbnQgdmlkZW9tZW1vcnlzaXplOwpAQCAtNTU5LDcgKzU1OCw3IEBACiAJcmV0dmFsID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZXJyMTsKLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCWlmIChpcnEpIHsKIAkJcGFyLT5pcnEgPSBpcnE7CiAJCWlmIChyZXF1ZXN0X2lycShwYXItPmlycSwgJmFyY2ZiX2ludGVycnVwdCwgU0FfU0hJUlEsCkBAIC02MDAsOSArNTk5LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGFyY2ZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGFyY2ZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mbykgewogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwpAQCAtNjEyLDExICs2MTEsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGFyY2ZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhcmNmYiIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFyY2ZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBhcmNmYl9wcm9iZSwKIAkucmVtb3ZlID0gYXJjZmJfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImFyY2ZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFyY2ZiX2RldmljZTsKQEAgLTYyOCw3ICs2MjgsNyBAQAogCWlmICghYXJjZmJfZW5hYmxlKQogCQlyZXR1cm4gLUVOWElPOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXJjZmJfZHJpdmVyKTsKIAlpZiAoIXJldCkgewogCQlhcmNmYl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImFyY2ZiIiwgMCk7CiAJCWlmIChhcmNmYl9kZXZpY2UpIHsKQEAgLTYzOCw3ICs2MzgsNyBAQAogCQl9CiAJCWlmIChyZXQpIHsKIAkJCXBsYXRmb3JtX2RldmljZV9wdXQoYXJjZmJfZGV2aWNlKTsKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmFyY2ZiX2RyaXZlcik7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTY0OCw3ICs2NDgsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGFyY2ZiX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhcmNmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhcmNmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfcGFyYW0obnVtX2NvbHMsIHVsb25nLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9jb3JnaV9ibC5jCmluZGV4IDQ4Njc0OTguLjZhMjE5YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2NvcmdpX2JsLmMKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvY29yZ2lfYmwuYwpAQCAtNDgsNiArNDgsMTIgQEAKIAljb3JnaWJsX21hY2hfc2V0X2ludGVuc2l0eShpbnRlbnNpdHkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxfbG9jaywgZmxhZ3MpOworCisgCWNvcmdpX2tpY2tfYmF0dCA9IHN5bWJvbF9nZXQoc2hhcnBzbF9iYXR0ZXJ5X2tpY2spOworIAlpZiAoY29yZ2lfa2lja19iYXR0KSB7CisgCQljb3JnaV9raWNrX2JhdHQoKTsKKyAJCXN5bWJvbF9wdXQoc2hhcnBzbF9iYXR0ZXJ5X2tpY2spOworIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGNvcmdpYmxfYmxhbmsoaW50IGJsYW5rKQpAQCAtNzMsMTMgKzc5LDEzIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgY29yZ2libF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjb3JnaWJsX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJY29yZ2libF9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNvcmdpYmxfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgY29yZ2libF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWNvcmdpYmxfYmxhbmsoRkJfQkxBTktfVU5CTEFOSyk7CiAJcmV0dXJuIDA7CkBAIC0xMzcsOSArMTQzLDkgQEAKIAogc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpjb3JnaV9iYWNrbGlnaHRfZGV2aWNlOwogCi1zdGF0aWMgaW50IF9faW5pdCBjb3JnaWJsX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGNvcmdpYmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgY29yZ2libF9tYWNoaW5mbyAqbWFjaGluZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGNvcmdpYmxfbWFjaGluZm8gKm1hY2hpbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAljb3JnaWJsX2RhdGEubWF4X2JyaWdodG5lc3MgPSBtYWNoaW5mby0+bWF4X2ludGVuc2l0eTsKIAljb3JnaWJsX21hY2hfc2V0X2ludGVuc2l0eSA9IG1hY2hpbmZvLT5zZXRfYmxfaW50ZW5zaXR5OwpAQCAtMTU2LDcgKzE2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY29yZ2libF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBjb3JnaWJsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGNvcmdpX2JhY2tsaWdodF9kZXZpY2UpOwogCkBAIC0xNjYsMjMgKzE3MiwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgY29yZ2libF9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImNvcmdpLWJsIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGNvcmdpYmxfZHJpdmVyID0gewogCS5wcm9iZQkJPSBjb3JnaWJsX3Byb2JlLAogCS5yZW1vdmUJCT0gY29yZ2libF9yZW1vdmUsCiAJLnN1c3BlbmQJPSBjb3JnaWJsX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBjb3JnaWJsX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiY29yZ2ktYmwiLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBjb3JnaWJsX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZjb3JnaWJsX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZ2libF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY29yZ2libF9leGl0KHZvaWQpCiB7Ci0gCWRyaXZlcl91bnJlZ2lzdGVyKCZjb3JnaWJsX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmNvcmdpYmxfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoY29yZ2libF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZG5mYi5jIGIvZHJpdmVycy92aWRlby9kbmZiLmMKaW5kZXggOTU3YTNhZC4uNWFiZDNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9kbmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9kbmZiLmMKQEAgLTIyNyw5ICsyMjcsOCBAQAogICogSW5pdGlhbGl6YXRpb24KICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBkbmZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGRuZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCBlcnIgPSAwOwogCkBAIC0yNTcsNyArMjU2LDcgQEAKIAkJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCS8qIG5vdyB3ZSBoYXZlIHJlZ2lzdGVyZWQgd2UgY2FuIHNhZmVseSBzZXR1cCB0aGUgaGFyZHdhcmUgKi8KIAlvdXRfOChBUF9DT05UUk9MXzNBLCBSRVNFVF9DUkVHKTsKQEAgLTI3MSwxMCArMjcwLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRuZmJfZHJpdmVyID0gewotCS5uYW1lCT0gImRuZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkbmZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBkbmZiX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImRuZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbmZiX2RldmljZSA9IHsKQEAgLTI4OCwxMiArMjg4LDEyIEBACiAJaWYgKGZiX2dldF9vcHRpb25zKCJkbmZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZkbmZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZkbmZiX2RyaXZlcik7CiAKIAlpZiAoIXJldCkgewogCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRuZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZkbmZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZG5mYl9kcml2ZXIpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCmluZGV4IDZhODFhMWQuLjNiMGU3MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKQEAgLTYwOSw5ICs2MDksOSBAQAogewogfQogCi1zdGF0aWMgaW50IGVwc29uMTM1NWZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IGVwc29uMTM1NWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVwc29uMTM1NV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAogCWJhY2tsaWdodF9lbmFibGUoMCk7CkBAIC02MzIsOSArNjMyLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBlcHNvbjEzNTVmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitpbnQgX19pbml0IGVwc29uMTM1NWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZXBzb24xMzU1X3BhciAqZGVmYXVsdF9wYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJdTggcmV2aXNpb247CkBAIC03MTMsNyArNzEyLDcgQEAKIAkvKgogCSAqIE91ciBkcml2ZXIgZGF0YS4KIAkgKi8KLQlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKIAkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKQEAgLTcyMSwxNSArNzIwLDE2IEBACiAJcmV0dXJuIDA7CiAKICAgICAgIGJhaWw6Ci0JZXBzb24xMzU1ZmJfcmVtb3ZlKGRldmljZSk7CisJZXBzb24xMzU1ZmJfcmVtb3ZlKGRldik7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZXBzb24xMzU1ZmJfZHJpdmVyID0gewotCS5uYW1lCT0gImVwc29uMTM1NWZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXBzb24xMzU1ZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IGVwc29uMTM1NWZiX3Byb2JlLAogCS5yZW1vdmUJPSBlcHNvbjEzNTVmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiZXBzb24xMzU1ZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlcHNvbjEzNTVmYl9kZXZpY2UgPSB7CkBAIC03NDcsMTEgKzc0NywxMSBAQAogCWlmIChmYl9nZXRfb3B0aW9ucygiZXBzb24xMzU1ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZXBzb24xMzU1ZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZlcHNvbjEzNTVmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC03NjIsNyArNzYyLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBlcHNvbjEzNTVmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RldmljZSk7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmVwc29uMTM1NWZiX2RyaXZlcik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwppbmRleCA5ZDVlNGYzLi5kNzQ0YzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9nYmVmYi5jCkBAIC0xMTA1LDEyICsxMTA1LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGdiZWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IGdiZWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBfZGV2KQogewogCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBnYmVmYl9wYXIgKnBhcjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb25zID0gTlVMTDsKICNlbmRpZgpAQCAtMTIwNCw4ICsxMjAzLDggQEAKIAkJZ290byBvdXRfZ2JlX3VubWFwOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YSgmcF9kZXYtPmRldiwgaW5mbyk7Ci0JZ2JlZmJfY3JlYXRlX3N5c2ZzKGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocF9kZXYsIGluZm8pOworCWdiZWZiX2NyZWF0ZV9zeXNmcygmcF9kZXYtPmRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyByZXYgJWQgQCAweCUwOHggdXNpbmcgJWRrQiBtZW1vcnlcbiIsCiAJICAgICAgIGluZm8tPm5vZGUsIGluZm8tPmZpeC5pZCwgZ2JlX3JldmlzaW9uLCAodW5zaWduZWQpIEdCRV9CQVNFLApAQCAtMTIzMSwxMCArMTIzMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBfX2RldmV4aXQgZ2JlZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UqIGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdiZWZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwX2RldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZwX2Rldi0+ZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBfZGV2KTsKIAogCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJZ2JlX3R1cm5fb2ZmKCk7CkBAIC0xMjUyLDE4ICsxMjUwLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBnYmVmYl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZ2JlZmIiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnYmVmYl9kcml2ZXIgPSB7CiAJLnByb2JlID0gZ2JlZmJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGdiZWZiX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAiZ2JlZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ2JlZmJfZGV2aWNlOwogCiBpbnQgX19pbml0IGdiZWZiX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CiAJaWYgKCFyZXQpIHsKIAkJZ2JlZmJfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJnYmVmYiIsIDApOwogCQlpZiAoZ2JlZmJfZGV2aWNlKSB7CkBAIC0xMjczLDcgKzEyNzIsNyBAQAogCQl9CiAJCWlmIChyZXQpIHsKIAkJCXBsYXRmb3JtX2RldmljZV9wdXQoZ2JlZmJfZGV2aWNlKTsKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZnYmVmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdiZWZiX2RyaXZlcik7CiAJCX0KIAl9CiAJcmV0dXJuIHJldDsKQEAgLTEyODIsNyArMTI4MSw3IEBACiB2b2lkIF9fZXhpdCBnYmVmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZ2JlZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZ2JlZmJfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoZ2JlZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2lteGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKaW5kZXggZTIwYjlmMy4uNTkyNGNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbXhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW14ZmIuYwpAQCAtNDIzLDE4ICs0MjMsMTggQEAKICAqIFBvd2VyIG1hbmFnZW1lbnQgaG9va3MuICBOb3RlIHRoYXQgd2Ugd29uJ3QgYmUgY2FsbGVkIGZyb20gSVJRIGNvbnRleHQsCiAgKiB1bmxpa2UgdGhlIGJsYW5rIGZ1bmN0aW9ucyBhYm92ZSwgc28gd2UgbWF5IHNsZWVwLgogICovCi1zdGF0aWMgaW50IGlteGZiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlteGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXByX2RlYnVnKCIlc1xuIixfX0ZVTkNUSU9OX18pOwogCiAJaW14ZmJfZGlzYWJsZV9jb250cm9sbGVyKGZiaSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW14ZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgaW14ZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJcHJfZGVidWcoIiVzXG4iLF9fRlVOQ1RJT05fXyk7CiAKIAlpbXhmYl9lbmFibGVfY29udHJvbGxlcihmYmkpOwpAQCAtNTM4LDkgKzUzOCw4IEBACiAJcmV0dXJuIGZiaS0+bWFwX2NwdSA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbXhmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpbXhmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBpbXhmYl9tYWNoX2luZm8gKmluZjsKQEAgLTU1MywyMSArNTUyLDIxIEBACiAJaWYoIXJlcykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5mID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYoIWluZikgewogCQlkZXZfZXJyKGRldiwiTm8gcGxhdGZvcm1fZGF0YSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbXhmYl9pbmZvKSwgZGV2KTsKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbXhmYl9pbmZvKSwgJnBkZXYtPmRldik7CiAJaWYoIWluZm8pCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZmJpID0gaW5mby0+cGFyOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CiAKLQlyZXQgPSBpbXhmYl9pbml0X2ZiaW5mbyhkZXYpOworCXJldCA9IGlteGZiX2luaXRfZmJpbmZvKCZwZGV2LT5kZXYpOwogCWlmKCByZXQgPCAwICkKIAkJZ290byBmYWlsZWRfaW5pdDsKIApAQCAtNjIxLDIyICs2MjAsMjEgQEAKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogZmFpbGVkX2NtYXA6CiAJaWYgKCFpbmYtPmZpeGVkX3NjcmVlbl9jcHUpCi0JCWRtYV9mcmVlX3dyaXRlY29tYmluZShkZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCisJCWRtYV9mcmVlX3dyaXRlY29tYmluZSgmcGRldi0+ZGV2LGZiaS0+bWFwX3NpemUsZmJpLT5tYXBfY3B1LAogCQkgICAgICAgICAgIGZiaS0+bWFwX2RtYSk7CiBmYWlsZWRfbWFwOgogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKIGZhaWxlZF9yZWdzOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOwogZmFpbGVkX2luaXQ6Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJZnJhbWVidWZmZXJfcmVsZWFzZShpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlteGZiX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGlteGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIApAQCAtNjUxLDM2ICs2NDksMzcgQEAKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgIGlteGZiX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKiBkZXYpCit2b2lkICBpbXhmYl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpbXhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CiAJaW14ZmJfZGlzYWJsZV9jb250cm9sbGVyKGZiaSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpbXhmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gImlteC1mYiIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhmYl9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGlteGZiX3Byb2JlLAogCS5zdXNwZW5kCT0gaW14ZmJfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGlteGZiX3Jlc3VtZSwKIAkucmVtb3ZlCQk9IGlteGZiX3JlbW92ZSwKIAkuc2h1dGRvd24JPSBpbXhmYl9zaHV0ZG93biwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiaW14LWZiIiwKKwl9LAogfTsKIAogaW50IF9faW5pdCBpbXhmYl9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmaW14ZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW14ZmJfY2xlYW51cCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXhmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChpbXhmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHhhZmIuYwppbmRleCBmMzA1YTViLi43YjRjZDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9weGFmYi5jCkBAIC05ODAsMTcgKzk4MCwxNyBAQAogICogUG93ZXIgbWFuYWdlbWVudCBob29rcy4gIE5vdGUgdGhhdCB3ZSB3b24ndCBiZSBjYWxsZWQgZnJvbSBJUlEgY29udGV4dCwKICAqIHVubGlrZSB0aGUgYmxhbmsgZnVuY3Rpb25zIGFib3ZlLCBzbyB3ZSBtYXkgc2xlZXAuCiAgKi8KLXN0YXRpYyBpbnQgcHhhZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgcHhhZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0RJU0FCTEVfUE0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YWZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YWZiX2luZm8gKmZiaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGFmYl9pbmZvICpmYmkgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc2V0X2N0cmxyX3N0YXRlKGZiaSwgQ19FTkFCTEVfUE0pOwogCXJldHVybiAwOwpAQCAtMTI2OCw3ICsxMjY4LDcgQEAKIH0KICNlbmRpZgogCi1pbnQgX19pbml0IHB4YWZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBfX2luaXQgcHhhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBweGFmYl9pbmZvICpmYmk7CiAJc3RydWN0IHB4YWZiX21hY2hfaW5mbyAqaW5mOwpAQCAtMTI3NiwxNCArMTI3NiwxNCBAQAogCiAJZGV2X2RiZyhkZXYsICJweGFmYl9wcm9iZVxuIik7CiAKLQlpbmYgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW5mID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlyZXQgPSAtRU5PTUVNOwogCWZiaSA9IE5VTEw7CiAJaWYgKCFpbmYpCiAJCWdvdG8gZmFpbGVkOwogCiAjaWZkZWYgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTCi0JcmV0ID0gcHhhZmJfcGFyc2Vfb3B0aW9ucyhkZXYsIGdfb3B0aW9ucyk7CisJcmV0ID0gcHhhZmJfcGFyc2Vfb3B0aW9ucygmZGV2LT5kZXYsIGdfb3B0aW9ucyk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbGVkOwogI2VuZGlmCkBAIC0xMjkzLDM2ICsxMjkzLDM2IEBACiAJICogYSB3YXJuaW5nIGlzIGdpdmVuLiAqLwogCiAgICAgICAgIGlmIChpbmYtPmxjY3IwICYgTENDUjBfSU5WQUxJRF9DT05GSUdfTUFTSykKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJtYWNoaW5lIExDQ1IwIHNldHRpbmcgY29udGFpbnMgaWxsZWdhbCBiaXRzOiAlMDh4XG4iLAorICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIm1hY2hpbmUgTENDUjAgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmYtPmxjY3IwICYgTENDUjBfSU5WQUxJRF9DT05GSUdfTUFTSyk7CiAgICAgICAgIGlmIChpbmYtPmxjY3IzICYgTENDUjNfSU5WQUxJRF9DT05GSUdfTUFTSykKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJtYWNoaW5lIExDQ1IzIHNldHRpbmcgY29udGFpbnMgaWxsZWdhbCBiaXRzOiAlMDh4XG4iLAorICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwgIm1hY2hpbmUgTENDUjMgc2V0dGluZyBjb250YWlucyBpbGxlZ2FsIGJpdHM6ICUwOHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmYtPmxjY3IzICYgTENDUjNfSU5WQUxJRF9DT05GSUdfTUFTSyk7CiAgICAgICAgIGlmIChpbmYtPmxjY3IwICYgTENDUjBfRFBEICYmCiAJICAgICgoaW5mLT5sY2NyMCAmIExDQ1IwX1BBUykgIT0gTENDUjBfUGFzIHx8CiAJICAgICAoaW5mLT5sY2NyMCAmIExDQ1IwX1NEUykgIT0gTENDUjBfU25nbCB8fAogCSAgICAgKGluZi0+bGNjcjAgJiBMQ0NSMF9DTVMpICE9IExDQ1IwX01vbm8pKQotICAgICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIkRvdWJsZSBQaXhlbCBEYXRhIChEUEQpIG1vZGUgaXMgb25seSB2YWxpZCBpbiBwYXNzaXZlIG1vbm8iCisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAiRG91YmxlIFBpeGVsIERhdGEgKERQRCkgbW9kZSBpcyBvbmx5IHZhbGlkIGluIHBhc3NpdmUgbW9ubyIKIAkJCSAiIHNpbmdsZSBwYW5lbCBtb2RlXG4iKTsKICAgICAgICAgaWYgKChpbmYtPmxjY3IwICYgTENDUjBfUEFTKSA9PSBMQ0NSMF9BY3QgJiYKIAkgICAgKGluZi0+bGNjcjAgJiBMQ0NSMF9TRFMpID09IExDQ1IwX0R1YWwpCi0gICAgICAgICAgICAgICAgZGV2X3dhcm4oZGV2LCAiRHVhbCBwYW5lbCBvbmx5IHZhbGlkIGluIHBhc3NpdmUgbW9kZVxuIik7CisgICAgICAgICAgICAgICAgZGV2X3dhcm4oJmRldi0+ZGV2LCAiRHVhbCBwYW5lbCBvbmx5IHZhbGlkIGluIHBhc3NpdmUgbW9kZVxuIik7CiAgICAgICAgIGlmICgoaW5mLT5sY2NyMCAmIExDQ1IwX1BBUykgPT0gTENDUjBfUGFzICYmCiAgICAgICAgICAgICAgKGluZi0+dXBwZXJfbWFyZ2luIHx8IGluZi0+bG93ZXJfbWFyZ2luKSkKLSAgICAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJVcHBlciBhbmQgbG93ZXIgbWFyZ2lucyBtdXN0IGJlIDAgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmZGV2LT5kZXYsICJVcHBlciBhbmQgbG93ZXIgbWFyZ2lucyBtdXN0IGJlIDAgaW4gcGFzc2l2ZSBtb2RlXG4iKTsKICNlbmRpZgogCi0JZGV2X2RiZyhkZXYsICJnb3QgYSAlZHglZHglZCBMQ0RcbiIsaW5mLT54cmVzLCBpbmYtPnlyZXMsIGluZi0+YnBwKTsKKwlkZXZfZGJnKCZkZXYtPmRldiwgImdvdCBhICVkeCVkeCVkIExDRFxuIixpbmYtPnhyZXMsIGluZi0+eXJlcywgaW5mLT5icHApOwogCWlmIChpbmYtPnhyZXMgPT0gMCB8fCBpbmYtPnlyZXMgPT0gMCB8fCBpbmYtPmJwcCA9PSAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiSW52YWxpZCByZXNvbHV0aW9uIG9yIGJpdCBkZXB0aFxuIik7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiSW52YWxpZCByZXNvbHV0aW9uIG9yIGJpdCBkZXB0aFxuIik7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAlweGFmYl9iYWNrbGlnaHRfcG93ZXIgPSBpbmYtPnB4YWZiX2JhY2tsaWdodF9wb3dlcjsKIAlweGFmYl9sY2RfcG93ZXIgPSBpbmYtPnB4YWZiX2xjZF9wb3dlcjsKLQlmYmkgPSBweGFmYl9pbml0X2ZiaW5mbyhkZXYpOworCWZiaSA9IHB4YWZiX2luaXRfZmJpbmZvKCZkZXYtPmRldik7CiAJaWYgKCFmYmkpIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlciBkZXZpY2VcbiIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIGZyYW1lYnVmZmVyIGRldmljZVxuIik7CiAJCXJldCA9IC1FTk9NRU07IC8vIG9ubHkgcmVhc29uIGZvciBweGFmYl9pbml0X2ZiaW5mbyB0byBmYWlsIGlzIGttYWxsb2MKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTMzMCwxNCArMTMzMCwxNCBAQAogCS8qIEluaXRpYWxpemUgdmlkZW8gbWVtb3J5ICovCiAJcmV0ID0gcHhhZmJfbWFwX3ZpZGVvX21lbW9yeShmYmkpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gUkFNOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgdmlkZW8gUkFNOiAlZFxuIiwgcmV0KTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCiAJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0xDRCwgcHhhZmJfaGFuZGxlX2lycSwgU0FfSU5URVJSVVBULCAiTENEIiwgZmJpKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gZmFpbGVkOwogCX0KQEAgLTEzNDksMTEgKzEzNDksMTEgQEAKIAlweGFmYl9jaGVja192YXIoJmZiaS0+ZmIudmFyLCAmZmJpLT5mYik7CiAJcHhhZmJfc2V0X3BhcigmZmJpLT5mYik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBmYmkpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgZmJpKTsKIAogCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmktPmZiKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlciBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlciBkZXZpY2U6ICVkXG4iLCByZXQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTEzNzYsMTkgKzEzNzYsMjAgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoZmJpKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcHhhZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJweGEyeHgtZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGFmYl9wcm9iZSwKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHB4YWZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGFmYl9yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHhhMnh4LWZiIiwKKwl9LAogfTsKIAogI2lmbmRlZiBNT0RVTEUKQEAgLTE0MTUsNyArMTQxNiw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCXB4YWZiX3NldHVwKG9wdGlvbik7CiAjZW5kaWYKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGFmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YWZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHB4YWZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9xNDBmYi5jIGIvZHJpdmVycy92aWRlby9xNDBmYi5jCmluZGV4IGJmYzQxZjIuLmZjOTFkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcTQwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMKQEAgLTg2LDkgKzg2LDggQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHE0MGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgX19pbml0IHE0MGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAogCWlmICghTUFDSF9JU19RNDApCkBAIC0xMjgsMTAgKzEyNywxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcTQwZmJfZHJpdmVyID0gewotCS5uYW1lCT0gInE0MGZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcTQwZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IHE0MGZiX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInE0MGZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcTQwZmJfZGV2aWNlID0gewpAQCAtMTQ1LDEyICsxNDUsMTIgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoInE0MGZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZxNDBmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcTQwZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcTQwZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZxNDBmYl9kcml2ZXIpOworCQkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnE0MGZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MxZDEzeHh4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCmluZGV4IDNlZGJkMTQuLmU1ZDBmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jCkBAIC01MDMsMTAgKzUwMyw5IEBACiAKIAogc3RhdGljIGludAotczFkMTN4eHhmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorczFkMTN4eHhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BhciAqcGFyID0gTlVMTDsKIAogCWlmIChpbmZvKSB7CkBAIC01MzQsOSArNTMzLDggQEAKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQKLXMxZDEzeHh4ZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorczFkMTN4eHhmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wYXIgKmRlZmF1bHRfcGFyOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BkYXRhICpwZGF0YSA9IE5VTEw7CkBAIC01NDgsOCArNTQ2LDggQEAKIAlwcmludGsoS0VSTl9JTkZPICJFcHNvbiBTMUQxM1hYWCBGQiBEcml2ZXJcbiIpOwogCiAJLyogZW5hYmxlIHBsYXRmb3JtLWRlcGVuZGVudCBoYXJkd2FyZSBnbHVlLCBpZiBhbnkgKi8KLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhKQotCQlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpCisJCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKIAlpZiAocGRhdGEgJiYgcGRhdGEtPnBsYXRmb3JtX2luaXRfdmlkZW8pCiAJCXBkYXRhLT5wbGF0Zm9ybV9pbml0X3ZpZGVvKCk7CkBAIC01NzIsMTQgKzU3MCwxNCBAQAogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCiAJCXBkZXYtPnJlc291cmNlWzBdLmVuZCAtIHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0ICsxLCAiczFkMTN4eHhmYiBtZW0iKSkgewotCQlkZXZfZGJnKGRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGJhaWw7CiAJfQogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMV0uc3RhcnQsCiAJCXBkZXYtPnJlc291cmNlWzFdLmVuZCAtIHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ICsxLCAiczFkMTN4eHhmYiByZWdzIikpIHsKLQkJZGV2X2RiZyhkZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byBiYWlsOwogCX0KQEAgLTY0MCw3ICs2MzgsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKIAkgICAgICAgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKQEAgLTY0OCwxNSArNjQ2LDE1IEBACiAJcmV0dXJuIDA7CiAKIGJhaWw6Ci0JczFkMTN4eHhmYl9yZW1vdmUoZGV2KTsKKwlzMWQxM3h4eGZiX3JlbW92ZShwZGV2KTsKIAlyZXR1cm4gcmV0OwogCiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgczFkMTN4eHhmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzMWQxM3h4eGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGFyICpzMWRmYiA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgczFkMTN4eHhmYl9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCkBAIC02NjQsOCArNjYyLDggQEAKIAlsY2RfZW5hYmxlKHMxZGZiLCAwKTsKIAljcnRfZW5hYmxlKHMxZGZiLCAwKTsKIAotCWlmIChkZXYtPnBsYXRmb3JtX2RhdGEpCi0JCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKQorCQlwZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKICNpZiAwCiAJaWYgKCFzMWRmYi0+ZGlzcF9zYXZlKQpAQCAtNzAxLDkgKzY5OSw5IEBACiAJCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMxZDEzeHh4ZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczFkMTN4eHhmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzMWQxM3h4eGZiX3BhciAqczFkZmIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IHMxZDEzeHh4ZmJfcGRhdGEgKnBkYXRhID0gTlVMTDsKIApAQCAtNzE0LDggKzcxMiw4IEBACiAJd2hpbGUgKChzMWQxM3h4eGZiX3JlYWRyZWcoczFkZmIsIFMxRFJFR19QU19TVEFUVVMpICYgMHgwMSkpCiAJCXVkZWxheSgxMCk7CiAKLQlpZiAoZGV2LT5wbGF0Zm9ybV9kYXRhKQotCQlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpZiAoZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwkJcGRhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJaWYgKHMxZGZiLT5yZWdzX3NhdmUpIHsKIAkJLyogd2lsbCB3cml0ZSBSTyByZWdzLCAqc2hvdWxkKiBnZXQgYXdheSB3aXRoIGl0IDopICovCkBAIC03NDEsMTUgKzczOSwxNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgczFkMTN4eHhmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gUzFEX0RFVklDRU5BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzMWQxM3h4eGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczFkMTN4eHhmYl9wcm9iZSwKIAkucmVtb3ZlCQk9IHMxZDEzeHh4ZmJfcmVtb3ZlLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gczFkMTN4eHhmYl9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczFkMTN4eHhmYl9yZXN1bWUKKwkucmVzdW1lCQk9IHMxZDEzeHh4ZmJfcmVzdW1lLAogI2VuZGlmCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gUzFEX0RFVklDRU5BTUUsCisJfSwKIH07CiAKIApAQCAtNzU5LDE0ICs3NTgsMTQgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoInMxZDEzeHh4ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzMWQxM3h4eGZiX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczFkMTN4eHhmYl9kcml2ZXIpOwogfQogCiAKIHN0YXRpYyB2b2lkIF9fZXhpdAogczFkMTN4eHhmYl9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnMxZDEzeHh4ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmczFkMTN4eHhmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChzMWQxM3h4eGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKaW5kZXggODU1YTY3Ny4uY2U2ZTc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCkBAIC02MzQsMTkgKzYzNCwxOCBAQAogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdPSJzM2MyNDEwZmIiOwogCi1pbnQgX19pbml0IHMzYzI0MTBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgX19pbml0IHMzYzI0MTBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzM2MyNDEwZmJfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjQxMGZiX2h3ICptcmVnczsKIAlpbnQgcmV0OwogCWludCBpcnE7CiAJaW50IGk7CiAKLQltYWNoX2luZm8gPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJbWFjaF9pbmZvID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKG1hY2hfaW5mbyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCJubyBwbGF0Zm9ybSBkYXRhIGZvciBsY2QsIGNhbm5vdCBhdHRhY2hcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsIm5vIHBsYXRmb3JtIGRhdGEgZm9yIGxjZCwgY2Fubm90IGF0dGFjaFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjU0LDExICs2NTMsMTEgQEAKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJubyBpcnEgZm9yIGRldmljZVxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3IgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNDEwZmJfaW5mbyksIGRldik7CisJZmJpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBzM2MyNDEwZmJfaW5mbyksICZwZGV2LT5kZXYpOwogCWlmICghZmJpbmZvKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTY2Niw3ICs2NjUsNyBAQAogCiAJaW5mbyA9IGZiaW5mby0+cGFyOwogCWluZm8tPmZiID0gZmJpbmZvOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGZiaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZmJpbmZvKTsKIAogCXMzYzI0MTBmYl9pbml0X3JlZ2lzdGVycyhpbmZvKTsKIApAQCAtNjc2LDcgKzY3NSw3IEBACiAKIAltZW1jcHkoJmluZm8tPnJlZ3MsICZtYWNoX2luZm8tPnJlZ3MsIHNpemVvZihpbmZvLT5yZWdzKSk7CiAKLQlpbmZvLT5tYWNoX2luZm8JCSAgICA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbmZvLT5tYWNoX2luZm8JCSAgICA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCiAJZmJpbmZvLT5maXgudHlwZQkgICAgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJZmJpbmZvLT5maXgudHlwZV9hdXgJICAgID0gMDsKQEAgLTczNSw3ICs3MzQsNyBAQAogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBzM2MyNDEwZmJfaXJxLCBTQV9JTlRFUlJVUFQsIHBkZXYtPm5hbWUsIGluZm8pOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgZ2V0IGlycSAlZCAtIGVyciAlZFxuIiwgaXJxLCByZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGlycSAlZCAtIGVyciAlZFxuIiwgaXJxLCByZXQpOwogCQlyZXQgPSAtRUJVU1k7CiAJCWdvdG8gcmVsZWFzZV9tZW07CiAJfQpAQCAtNzczLDcgKzc3Miw3IEBACiAJfQogCiAJLyogY3JlYXRlIGRldmljZSBmaWxlcyAqLwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZWJ1Zyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9kZWJ1Zyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlXG4iLAogCQlmYmluZm8tPm5vZGUsIGZiaW5mby0+Zml4LmlkKTsKQEAgLTgxNiwxMCArODE1LDkgQEAKIC8qCiAgKiAgQ2xlYW51cAogICovCi1zdGF0aWMgaW50IHMzYzI0MTBmYl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzM2MyNDEwZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZmJfaW5mbwkgICAqZmJpbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHMzYzI0MTBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CiAJaW50IGlycTsKIApAQCAtODQ3LDkgKzg0NSw5IEBACiAKIC8qIHN1c3BlbmQgYW5kIHJlc3VtZSBzdXBwb3J0IGZvciB0aGUgbGNkIGNvbnRyb2xsZXIgKi8KIAotc3RhdGljIGludCBzM2MyNDEwZmJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgczNjMjQxMGZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzM2MyNDEwZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOwogCiAJczNjMjQxMGZiX3N0b3BfbGNkKCk7CkBAIC04NjQsOSArODYyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDEwZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgczNjMjQxMGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzM2MyNDEwZmJfaW5mbyAqaW5mbyA9IGZiaW5mby0+cGFyOwogCiAJY2xrX2VuYWJsZShpbmZvLT5jbGspOwpAQCAtODgyLDI0ICs4ODAsMjUgQEAKICNkZWZpbmUgczNjMjQxMGZiX3Jlc3VtZSAgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzM2MyNDEwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzM2MyNDEwLWxjZCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQxMGZiX3Byb2JlLAorCS5yZW1vdmUJCT0gczNjMjQxMGZiX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHMzYzI0MTBmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gczNjMjQxMGZiX3Jlc3VtZSwKLQkucmVtb3ZlCQk9IHMzYzI0MTBmYl9yZW1vdmUKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiczNjMjQxMC1sY2QiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAogfTsKIAogaW50IF9fZGV2aW5pdCBzM2MyNDEwZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBmYl9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgczNjMjQxMGZiX2NsZWFudXAodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmczNjMjQxMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnMzYzI0MTBmYl9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwppbmRleCBhNTE4NDU3Li4yZWExMzU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCkBAIC0xMzA4LDE3ICsxMzA4LDE3IEBACiAgKiBQb3dlciBtYW5hZ2VtZW50IGhvb2tzLiAgTm90ZSB0aGF0IHdlIHdvbid0IGJlIGNhbGxlZCBmcm9tIElSUSBjb250ZXh0LAogICogdW5saWtlIHRoZSBibGFuayBmdW5jdGlvbnMgYWJvdmUsIHNvIHdlIG1heSBzbGVlcC4KICAqLwotc3RhdGljIGludCBzYTExMDBmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzYTExMDBmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBzYTExMDBmYl9pbmZvICpmYmkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNldF9jdHJscl9zdGF0ZShmYmksIENfRElTQUJMRV9QTSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ExMTAwZmJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgc2ExMTAwZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlzZXRfY3RybHJfc3RhdGUoZmJpLCBDX0VOQUJMRV9QTSk7CiAJcmV0dXJuIDA7CkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCXJldHVybiBmYmk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHNhMTEwMGZiX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHNhMTEwMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNhMTEwMGZiX2luZm8gKmZiaTsKIAlpbnQgcmV0OwpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbigweGIwMTAwMDAwLCAweDEwMDAwLCAiTENEIikpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlmYmkgPSBzYTExMDBmYl9pbml0X2ZiaW5mbyhkZXYpOworCWZiaSA9IHNhMTEwMGZiX2luaXRfZmJpbmZvKCZwZGV2LT5kZXYpOwogCXJldCA9IC1FTk9NRU07CiAJaWYgKCFmYmkpCiAJCWdvdG8gZmFpbGVkOwpAQCAtMTQ4OCw3ICsxNDg4LDcgQEAKIAkgKi8KIAlzYTExMDBmYl9jaGVja192YXIoJmZiaS0+ZmIudmFyLCAmZmJpLT5mYik7CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBmYmkpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaSk7CiAKIAlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmZmJpLT5mYik7CiAJaWYgKHJldCA8IDApCkBAIC0xNTA1LDE4ICsxNTA1LDE5IEBACiAJcmV0dXJuIDA7CiAKIGZhaWxlZDoKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShmYmkpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbigweGIwMTAwMDAwLCAweDEwMDAwKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgc2ExMTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJzYTExeDAtZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ExMTAwZmJfZHJpdmVyID0gewogCS5wcm9iZQkJPSBzYTExMDBmYl9wcm9iZSwKIAkuc3VzcGVuZAk9IHNhMTEwMGZiX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzYTExMDBmYl9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNhMTF4MC1mYiIsCisJfSwKIH07CiAKIGludCBfX2luaXQgc2ExMTAwZmJfaW5pdCh2b2lkKQpAQCAtMTUyNCw3ICsxNTI1LDcgQEAKIAlpZiAoZmJfZ2V0X29wdGlvbnMoInNhMTEwMGZiIiwgTlVMTCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3Rlcigmc2ExMTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzYTExMDBmYl9kcml2ZXIpOwogfQogCiBpbnQgX19pbml0IHNhMTEwMGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NnaXZ3ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCmluZGV4IDJlODc2OWQuLjcwNTQ2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jCkBAIC03NTAsOSArNzUwLDggQEAKIC8qCiAgKiAgSW5pdGlhbGlzYXRpb24KICAqLwotc3RhdGljIGludCBfX2luaXQgc2dpdndmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCBzZ2l2d2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3Qgc2dpdndfcGFyICpwYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJY2hhciAqbW9uaXRvcjsKQEAgLTgxMyw3ICs4MTIsNyBAQAogCQlnb3RvIGZhaWxfcmVnaXN0ZXJfZnJhbWVidWZmZXI7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKIAogCXByaW50ayhLRVJOX0lORk8gImZiJWQ6IFNHSSBEQkUgZnJhbWUgYnVmZmVyIGRldmljZSwgdXNpbmcgJWxkSyBvZiB2aWRlbyBtZW1vcnkgYXQgJSNseFxuIiwgICAgICAKIAkJaW5mby0+bm9kZSwgc2dpdndmYl9tZW1fc2l6ZSA+PiAxMCwgc2dpdndmYl9tZW1fcGh5cyk7CkBAIC04MzEsOSArODMwLDkgQEAKIAlyZXR1cm4gLUVOWElPOwogfQogCi1zdGF0aWMgaW50IHNnaXZ3ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgc2dpdndmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKGluZm8pIHsKIAkJc3RydWN0IHNnaXZ3X3BhciAqcGFyID0gaW5mby0+cGFyOwpAQCAtODQ3LDExICs4NDYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNnaXZ3ZmJfZHJpdmVyID0gewotCS5uYW1lCT0gInNnaXZ3ZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZ2l2d2ZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSBzZ2l2d2ZiX3Byb2JlLAogCS5yZW1vdmUJPSBzZ2l2d2ZiX3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJzZ2l2d2ZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNnaXZ3ZmJfZGV2aWNlOwpAQCAtODY3LDcgKzg2Nyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCXNnaXZ3ZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgotCXJldCA9IGRyaXZlcl9yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOwogCWlmICghcmV0KSB7CiAJCXNnaXZ3ZmJfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzZ2l2d2ZiIiwgMCk7CiAJCWlmIChzZ2l2d2ZiX2RldmljZSkgewpAQCAtODc1LDcgKzg3NSw3IEBACiAJCX0gZWxzZQogCQkJcmV0ID0gLUVOT01FTTsKIAkJaWYgKHJldCkgewotCQkJZHJpdmVyX3VucmVnaXN0ZXIoJnNnaXZ3ZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CiAJCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KHNnaXZ3ZmJfZGV2aWNlKTsKIAkJfQogCX0KQEAgLTg5MCw3ICs4OTAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNnaXZ3ZmJfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHNnaXZ3ZmJfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2dpdndmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzZ2l2d2ZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9leGl0KHNnaXZ3ZmJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jIGIvZHJpdmVycy92aWRlby92ZXNhZmIuYwppbmRleCBlMjVlYWUxLi4yYzNhYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKQEAgLTI0NSw5ICsyNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB2ZXNhZmJfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2luaXQgdmVzYWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKIAlpbnQgaSwgZXJyOwogCXVuc2lnbmVkIGludCBzaXplX3Ztb2RlOwpAQCAtNDgwLDEwICs0NzksMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdmVzYWZiX2RyaXZlciA9IHsKLQkubmFtZQk9ICJ2ZXNhZmIiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZXNhZmJfZHJpdmVyID0gewogCS5wcm9iZQk9IHZlc2FmYl9wcm9iZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJ2ZXNhZmIiLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2ZXNhZmJfZGV2aWNlID0gewpAQCAtNDk4LDEyICs0OTgsMTIgQEAKIAkvKiBpZ25vcmUgZXJyb3IgcmV0dXJuIG9mIGZiX2dldF9vcHRpb25zICovCiAJZmJfZ2V0X29wdGlvbnMoInZlc2FmYiIsICZvcHRpb24pOwogCXZlc2FmYl9zZXR1cChvcHRpb24pOwotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2ZXNhZmJfZHJpdmVyKTsKIAogCWlmICghcmV0KSB7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdmVzYWZiX2RldmljZSk7CiAJCWlmIChyZXQpCi0JCQlkcml2ZXJfdW5yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmVzYWZiX2RyaXZlcik7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jIGIvZHJpdmVycy92aWRlby92ZmIuYwppbmRleCA4Nzk0ZGM1Li5mZmExYWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmZiLmMKQEAgLTQwMyw5ICs0MDMsOCBAQAogCS8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCBnb2VzIHRvIHplcm8uCiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHZmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9faW5pdCB2ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwogCkBAIC00NDcsNyArNDQ2LDcgQEAKIAlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnIyOwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJmYiVkOiBWaXJ0dWFsIGZyYW1lIGJ1ZmZlciBkZXZpY2UsIHVzaW5nICVsZEsgb2YgdmlkZW8gbWVtb3J5XG4iLApAQCAtNDYyLDkgKzQ2MSw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCB2ZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdmZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mbykgewogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwpAQCAtNDc0LDExICs0NzMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHZmYl9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAidmZiIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmZiX2RyaXZlciA9IHsKIAkucHJvYmUJPSB2ZmJfcHJvYmUsCiAJLnJlbW92ZSA9IHZmYl9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidmZiIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmZiX2RldmljZSA9IHsKQEAgLTUwNCwxMiArNTA0LDEyIEBACiAJaWYgKCF2ZmJfZW5hYmxlKQogCQlyZXR1cm4gLUVOWElPOwogCi0JcmV0ID0gZHJpdmVyX3JlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZmYl9kcml2ZXIpOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2ZmJfZGV2aWNlKTsKIAkJaWYgKHJldCkKLQkJCWRyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwkJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUyMCw3ICs1MjAsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHZmYl9leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZmYl9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2ZmJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdmZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9leGl0KHZmYl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCmluZGV4IDQ4ZTcwZjEuLmRhYTQ2MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwpAQCAtNDM3LDkgKzQzNyw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHcxMDBmYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCB3MTAwZmJfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAlzdHJ1Y3QgdzEwMF90Z19pbmZvICp0ZyA9IHBhci0+bWFjaC0+dGc7CiAKQEAgLTQ1Miw5ICs0NTIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHcxMDBmYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCB3MTAwZmJfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAlzdHJ1Y3QgdzEwMF90Z19pbmZvICp0ZyA9IHBhci0+bWFjaC0+dGc7CiAKQEAgLTQ3MywxMyArNDczLDEyIEBACiAjZW5kaWYKIAogCi1pbnQgX19pbml0IHcxMDBmYl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgX19pbml0IHcxMDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCBlcnIgPSAtRUlPOwogCXN0cnVjdCB3MTAwZmJfbWFjaF9pbmZvICppbmY7CiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBOVUxMOwogCXN0cnVjdCB3MTAwZmJfcGFyICpwYXI7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAl1bnNpZ25lZCBpbnQgY2hpcF9pZDsKIApAQCAtNTIyLDkgKzUyMSw5IEBACiAJfQogCiAJcGFyID0gaW5mby0+cGFyOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwogCi0JaW5mID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWluZiA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXBhci0+Y2hpcF9pZCA9IGNoaXBfaWQ7CiAJcGFyLT5tYWNoID0gaW5mOwogCXBhci0+ZmFzdHBsbF9tb2RlID0gMDsKQEAgLTYwMCwxMCArNTk5LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9mbGlwKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOworCWRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZsaXApOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwgaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkKTsKIAlyZXR1cm4gMDsKQEAgLTYyMiwxNSArNjIxLDE1IEBACiB9CiAKIAotc3RhdGljIGludCB3MTAwZmJfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdzEwMGZiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgdzEwMGZiX3BhciAqcGFyPWluZm8tPnBhcjsKIAotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9mYXN0cGxsY2xrKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9yZWdfd3JpdGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9mbGlwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RwbGxjbGspOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3JlYWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfcmVnX3dyaXRlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2ZsaXApOwogCiAJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIApAQCAtMTQ0OCwyMyArMTQ0NywyNCBAQAogCXdyaXRlbCgweDAwMDAwMDAyLCByZW1hcHBlZF9yZWdzICsgbW1HRU5fSU5UX1NUQVRVUyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB3MTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJ3MTAwZmIiLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdzEwMGZiX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gdzEwMGZiX3Byb2JlLAogCS5yZW1vdmUJCT0gdzEwMGZiX3JlbW92ZSwKIAkuc3VzcGVuZAk9IHcxMDBmYl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdzEwMGZiX3Jlc3VtZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidzEwMGZiIiwKKwl9LAogfTsKIAogaW50IF9fZGV2aW5pdCB3MTAwZmJfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCB3MTAwZmJfY2xlYW51cCh2b2lkKQogewotIAlkcml2ZXJfdW5yZWdpc3RlcigmdzEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJncxMDBmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdCh3MTAwZmJfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA3ZDZhZTM2Li5kNTI1NWU2IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTE2MDEsOSArMTYwMSwxMCBAQAogCSAgUEMgb3BlcmF0aW5nIHN5c3RlbXMuICBUaGUgQ0lGUyBwcm90b2NvbCBpcyBmdWxseSBzdXBwb3J0ZWQgYnkgCiAJICBmaWxlIHNlcnZlcnMgc3VjaCBhcyBXaW5kb3dzIDIwMDAgKGluY2x1ZGluZyBXaW5kb3dzIDIwMDMsIE5UIDQgIAogCSAgYW5kIFdpbmRvd3MgWFApIGFzIHdlbGwgYnkgU2FtYmEgKHdoaWNoIHByb3ZpZGVzIGV4Y2VsbGVudCBDSUZTCi0JICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBDdXJyZW50bHkKLQkgIHlvdSBtdXN0IHVzZSB0aGUgc21iZnMgY2xpZW50IGZpbGVzeXN0ZW0gdG8gYWNjZXNzIG9sZGVyIFNNQiBzZXJ2ZXJzCi0JICBzdWNoIGFzIFdpbmRvd3MgOXggYW5kIE9TLzIuCisJICBzZXJ2ZXIgc3VwcG9ydCBmb3IgTGludXggYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMpLiBMaW1pdGVkCisJICBzdXBwb3J0IGZvciBXaW5kb3dzIE1FIGFuZCBzaW1pbGFyIHNlcnZlcnMgaXMgcHJvdmlkZWQgYXMgd2VsbC4gCisJICBZb3UgbXVzdCB1c2UgdGhlIHNtYmZzIGNsaWVudCBmaWxlc3lzdGVtIHRvIGFjY2VzcyBvbGRlciBTTUIgc2VydmVycworCSAgc3VjaCBhcyBPUy8yIGFuZCBET1MuCiAKIAkgIFRoZSBpbnRlbnQgb2YgdGhlIGNpZnMgbW9kdWxlIGlzIHRvIHByb3ZpZGUgYW4gYWR2YW5jZWQKIAkgIG5ldHdvcmsgZmlsZSBzeXN0ZW0gY2xpZW50IGZvciBtb3VudGluZyB0byBDSUZTIGNvbXBsaWFudCBzZXJ2ZXJzLCAKQEAgLTE2MTQsNyArMTYxNSw3IEBACiAJICBjaWZzIGlmIHJ1bm5pbmcgb25seSBhIChTYW1iYSkgc2VydmVyLiBJdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgYm90aAogCSAgc21iZnMgYW5kIGNpZnMgKGUuZy4gaWYgeW91IGFyZSB1c2luZyBDSUZTIGZvciBhY2Nlc3NpbmcgV2luZG93cyAyMDAzCiAJICBhbmQgU2FtYmEgMyBzZXJ2ZXJzLCBhbmQgc21iZnMgZm9yIGFjY2Vzc2luZyBvbGQgc2VydmVycykuIElmIHlvdSBuZWVkIAotCSAgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyAyMDAzIHNlcnZlcnMgZnJvbSB0aGlzIG1hY2hpbmUsIHNheSBZLgorCSAgdG8gbW91bnQgdG8gU2FtYmEgb3IgV2luZG93cyBmcm9tIHRoaXMgbWFjaGluZSwgc2F5IFkuCiAKIGNvbmZpZyBDSUZTX1NUQVRTCiAgICAgICAgIGJvb2wgIkNJRlMgc3RhdGlzdGljcyIKQEAgLTE2MjMsOCArMTYyNCwyMiBAQAogICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2Ugc3RhdGlzdGljcyBmb3IgZWFjaCBzZXJ2ZXIgc2hhcmUKIAkgIG1vdW50ZWQgYnkgdGhlIGNpZnMgY2xpZW50IHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL1N0YXRzCiAKK2NvbmZpZyBDSUZTX1NUQVRTMgorCWJvb2wgIkNJRlMgZXh0ZW5kZWQgc3RhdGlzdGljcyIKKwlkZXBlbmRzIG9uIENJRlNfU1RBVFMKKwloZWxwCisJICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGFsbG93IG1vcmUgZGV0YWlsZWQgc3RhdGlzdGljcyBvbiBTTUIKKwkgIHJlcXVlc3QgdGltaW5nIHRvIGJlIGRpc3BsYXllZCBpbiAvcHJvYy9mcy9jaWZzL0RlYnVnRGF0YSBhbmQgYWxzbworCSAgYWxsb3cgb3B0aW9uYWwgbG9nZ2luZyBvZiBzbG93IHJlc3BvbnNlcyB0byBkbWVzZyAoZGVwZW5kaW5nIG9uIHRoZQorCSAgdmFsdWUgb2YgL3Byb2MvZnMvY2lmcy9jaWZzRllJLCBzZWUgZnMvY2lmcy9SRUFETUUgZm9yIG1vcmUgZGV0YWlscykuCisJICBUaGVzZSBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgbWF5IGhhdmUgYSBtaW5vciBlZmZlY3Qgb24gcGVyZm9ybWFuY2UKKwkgIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCisKKwkgIFVubGVzcyB5b3UgYXJlIGEgZGV2ZWxvcGVyIG9yIGFyZSBkb2luZyBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuYWx5c2lzCisJICBvciB0dW5pbmcsIHNheSBOLgorCiBjb25maWcgQ0lGU19YQVRUUgotICAgICAgICBib29sICJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKEVYUEVSSU1FTlRBTCkiCisgICAgICAgIGJvb2wgIkNJRlMgZXh0ZW5kZWQgYXR0cmlidXRlcyIKICAgICAgICAgZGVwZW5kcyBvbiBDSUZTCiAgICAgICAgIGhlbHAKICAgICAgICAgICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKQEAgLTE2MzYsMTEgKzE2NTEsMTEgQEAKICAgICAgICAgICBwcmVmYWNlZCBieSB0aGUgdXNlciBuYW1lc3BhY2UgcHJlZml4LiBUaGUgc3lzdGVtIG5hbWVzcGFjZQogICAgICAgICAgICh1c2VkIGJ5IHNvbWUgZmlsZXN5c3RlbXMgdG8gc3RvcmUgQUNMcykgaXMgbm90IHN1cHBvcnRlZCBhdAogICAgICAgICAgIHRoaXMgdGltZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBDSUZTX1BPU0lYCi0gICAgICAgIGJvb2wgIkNJRlMgUE9TSVggRXh0ZW5zaW9ucyAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgYm9vbCAiQ0lGUyBQT1NJWCBFeHRlbnNpb25zIgogICAgICAgICBkZXBlbmRzIG9uIENJRlNfWEFUVFIKICAgICAgICAgaGVscAogICAgICAgICAgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgdGhlIGNpZnMgY2xpZW50IHRvIGF0dGVtcHQgdG8KQEAgLTE2NTMsMTAgKzE2NjgsMjggQEAKIAogY29uZmlnIENJRlNfRVhQRVJJTUVOVEFMCiAJICBib29sICJDSUZTIEV4cGVyaW1lbnRhbCBGZWF0dXJlcyAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGUworCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTAogCSAgaGVscAotCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMKLQkgICAgYXJlIGhpZ2hseSBleHBlcmltZW50YWwuICBJZiB1bnN1cmUsIHNheSBOLgorCSAgICBFbmFibGVzIGNpZnMgZmVhdHVyZXMgdW5kZXIgdGVzdGluZy4gVGhlc2UgZmVhdHVyZXMgYXJlCisJICAgIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGluY2x1ZGUgc3VwcG9ydCBmb3Igd3JpdGVwYWdlcworCSAgICAobXVsdGlwYWdlIHdyaXRlYmVoaW5kIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cykgYW5kIGRpcmVjdG9yeQorCSAgICBjaGFuZ2Ugbm90aWZpY2F0aW9uIGllIGZjbnRsKEZfRE5PVElGWSkgYXMgd2VsbCBhcyBzb21lIHNlY3VyaXR5CisJICAgIGltcHJvdmVtZW50cy4gIFNvbWUgYWxzbyBkZXBlbmQgb24gc2V0dGluZyBhdCBydW50aW1lIHRoZQorCSAgICBwc2V1ZG8tZmlsZSAvcHJvYy9mcy9jaWZzL0V4cGVyaW1lbnRhbCAod2hpY2ggaXMgZGlzYWJsZWQgYnkKKwkgICAgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRSBmb3IgbW9yZSBkZXRhaWxzLgorCisJICAgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBDSUZTX1VQQ0FMTAorCSAgYm9vbCAiQ0lGUyBLZXJiZXJvcy9TUE5FR08gYWR2YW5jZWQgc2Vzc2lvbiBzZXR1cCAoRVhQRVJJTUVOVEFMKSIKKwkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKKwkgIHNlbGVjdCBDT05ORUNUT1IKKwkgIGhlbHAKKwkgICAgRW5hYmxlcyBhbiB1cGNhbGwgbWVjaGFuaXNtIGZvciBDSUZTIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjb250YWN0CisJICAgIHVzZXJzcGFjZSBoZWxwZXIgdXRpbGl0aWVzIHRvIHByb3ZpZGUgU1BORUdPIHBhY2thZ2VkIEtlcmJlcm9zCisJICAgIHRpY2tldHMgd2hpY2ggYXJlIG5lZWRlZCB0byBtb3VudCB0byBjZXJ0YWluIHNlY3VyZSBzZXJ2ZXJzCisJICAgIChmb3Igd2hpY2ggbW9yZSBzZWN1cmUgS2VyYmVyb3MgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQpLiBJZgorCSAgICB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgTkNQX0ZTCiAJdHJpc3RhdGUgIk5DUCBmaWxlIHN5c3RlbSBzdXBwb3J0ICh0byBtb3VudCBOZXRXYXJlIHZvbHVtZXMpIgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9DSEFOR0VTIGIvZnMvY2lmcy9DSEFOR0VTCmluZGV4IDViYWIyNGYuLmVhYjM3NTAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvQ0hBTkdFUworKysgYi9mcy9jaWZzL0NIQU5HRVMKQEAgLTIsNyArMiw3IEBACiAtLS0tLS0tLS0tLS0KIERlZmVyIGNsb3NlIG9mIGEgZmlsZSBoYW5kbGUgc2xpZ2h0bHkgaWYgcGVuZGluZyB3cml0ZXMgZGVwZW5kIG9uIHRoYXQgZmlsZSBoYW5kbGUKICh0aGlzIHJlZHVjZXMgdGhlIEVCQURGIGJhZCBmaWxlIGhhbmRsZSBlcnJvcnMgdGhhdCBjYW4gYmUgbG9nZ2VkIHVuZGVyIGhlYXZ5Ci1zdHJlc3Mgb24gd3JpdGVzKS4KK3N0cmVzcyBvbiB3cml0ZXMpLiBNb2RpZnkgY2lmcyBLY29uZmlnIG9wdGlvbnMgdG8gZXhwb3NlIENPTkZJR19DSUZTX1NUQVRTMiAKIAogVmVyc2lvbiAxLjM4CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMgYi9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCmluZGV4IDk5YTA5NmQuLjRlMTIwNTMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKKysrIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwpAQCAtNzQsMTAgKzc0LDExIEBACiAJCQljRVJST1IoMSwKIAkJCSAgICAgICAoImNpZnNfc3RydG9VQ1M6IGNoYXIydW5pIHJldHVybmVkICVkIiwKIAkJCQljaGFybGVuKSk7Ci0JCQl0b1tpXSA9IGNwdV90b19sZTE2KDB4MDAzZik7CS8qIGEgcXVlc3Rpb24gbWFyayAqLworCQkJLyogQSBxdWVzdGlvbiBtYXJrICovCisJCQl0b1tpXSA9ICh3Y2hhcl90KWNwdV90b19sZTE2KDB4MDAzZik7CiAJCQljaGFybGVuID0gMTsKIAkJfSBlbHNlIAotCQkJdG9baV0gPSBjcHVfdG9fbGUxNih0b1tpXSk7CisJCQl0b1tpXSA9ICh3Y2hhcl90KWNwdV90b19sZTE2KHRvW2ldKTsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggODc3MDk1YS4uNjgyYjAyMyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC00MDUsNiArNDA1LDcgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogc3RhdGljIHZvaWQgY2lmc191bW91bnRfYmVnaW4oc3RydWN0IHN1cGVyX2Jsb2NrICogc2Jsb2NrKQogewogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CkBAIC00MjIsMTYgKzQyMywxOCBAQAogCQl0Y29uLT50aWRTdGF0dXMgPSBDaWZzRXhpdGluZzsKIAl1cCgmdGNvbi0+dGNvblNlbSk7CiAKKwkvKiBjYW5jZWxfYnJsX3JlcXVlc3RzKHRjb24pOyAqLworCS8qIGNhbmNlbF9ub3RpZnlfcmVxdWVzdHModGNvbik7ICovCiAJaWYodGNvbi0+c2VzICYmIHRjb24tPnNlcy0+c2VydmVyKQogCXsKLQkJY0VSUk9SKDEsKCJ3YWtlIHVwIHRhc2tzIG5vdyAtIHVtb3VudCBiZWdpbiBub3QgY29tcGxldGUiKSk7CisJCWNGWUkoMSwoIndha2UgdXAgdGFza3Mgbm93IC0gdW1vdW50IGJlZ2luIG5vdCBjb21wbGV0ZSIpKTsKIAkJd2FrZV91cF9hbGwoJnRjb24tPnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCX0KIC8qIEJCIEZJWE1FIC0gZmluaXNoIGFkZCBjaGVja3MgZm9yIHRpZFN0YXR1cyBCQiAqLwogCiAJcmV0dXJuOwogfQotCQorI2VuZGlmCQogCiBzdGF0aWMgaW50IGNpZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQogewpAQCAtNDUwLDcgKzQ1Myw5IEBACiAgICB1bmxlc3MgbGF0ZXIgd2UgYWRkIGxhenkgY2xvc2Ugb2YgaW5vZGVzIG9yIHVubGVzcyB0aGUga2VybmVsIGZvcmdldHMgdG8gY2FsbAogICAgdXMgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgcmVsZWFzZXMgKGNsb3NlcykgYXMgb3BlbnMgKi8KIAkuc2hvd19vcHRpb25zID0gY2lmc19zaG93X29wdGlvbnMsCi0vKgkudW1vdW50X2JlZ2luICAgPSBjaWZzX3Vtb3VudF9iZWdpbiwgKi8gLyogQkIgZmluaXNoIGluIHRoZSBmdXR1cmUgKi8KKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKwkudW1vdW50X2JlZ2luICAgPSBjaWZzX3Vtb3VudF9iZWdpbiwKKyNlbmRpZgogCS5yZW1vdW50X2ZzID0gY2lmc19yZW1vdW50LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggZDMwMTE0OS4uMWI3M2Y0ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC0yNDIsMTEgKzI0MiwxMSBAQAogCQkJY29uc3QgaW50IG5ldGZpZCwgY29uc3QgdW5zaWduZWQgaW50IGNvdW50LAogCQkJY29uc3QgX191NjQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgKm5ieXRlcywgCiAJCQlzdHJ1Y3Qga3ZlYyAqaW92LCBjb25zdCBpbnQgbnZlYywgY29uc3QgaW50IGxvbmdfb3ApOworI2VuZGlmIC8qIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCAqLwogZXh0ZXJuIGludCBDSUZTR2V0U3J2SW5vZGVOdW1iZXIoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIF9fdTY0ICogaW5vZGVfbnVtYmVyLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCAKIAkJCWludCByZW1hcF9zcGVjaWFsX2NoYXJzKTsKLSNlbmRpZiAvKiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIGV4dGVybiBpbnQgY2lmc19jb252ZXJ0VUNTcGF0aChjaGFyICp0YXJnZXQsIGNvbnN0IF9fbGUxNiAqc291cmNlLCBpbnQgbWF4bGVuLAogCQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqIGNvZGVwYWdlKTsKIGV4dGVybiBpbnQgY2lmc0NvbnZlcnRUb1VDUyhfX2xlMTYgKiB0YXJnZXQsIGNvbnN0IGNoYXIgKnNvdXJjZSwgaW50IG1heGxlbiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTMxMmJmYy4uYTUzYzU5NiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTI5NTksNyArMjk1OSw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiBpbnQKIENJRlNHZXRTcnZJbm9kZU51bWJlcihjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCkBAIC0zMDUzLDcgKzMwNTIsNiBAQAogCQlnb3RvIEdldElub2RlTnVtYmVyUmV0cnk7CiAJcmV0dXJuIHJjOwogfQotI2VuZGlmIC8qIENJRlNfRVhQRVJJTUVOVEFMICovCiAKIGludAogQ0lGU0dldERGU1JlZmVyKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jbl9jaWZzLmggYi9mcy9jaWZzL2NuX2NpZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU5Y2NhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvY2lmcy9jbl9jaWZzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqICAgZnMvY2lmcy9jbl9jaWZzLmgKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIKKyAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlCisgKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX0NOX0NJRlNfSAorI2RlZmluZSBfQ05fQ0lGU19ICisjaWZkZWYgQ09ORklHX0NJRlNfVVBDQUxMCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKworc3RydWN0IGNpZnNfdXBjYWxsIHsKKwljaGFyIHNpZ25hdHVyZVs0XTsgLyogQ0lGUyAqLworCWVudW0gY29tbWFuZCB7CisJCUNJRlNfR0VUX0lQID0gMHgwMDAwMDAwMSwgICAvKiBnZXQgaXAgYWRkcmVzcyBmb3IgaG9zdG5hbWUgKi8KKwkJQ0lGU19HRVRfU0VDQkxPQiA9IDB4MDAwMDAwMDIsIC8qIGdldCBTUE5FR08gd3JhcHBlZCBibG9iICovCisJfSBjb21tYW5kOworCS8qIHVuaW9uIGNpZnMgdXBjYWxsIGRhdGEgZm9sbG93cyAqLworfTsKKyNlbmRpZiAvKiBDSUZTX1VQQ0FMTCAqLworI2VuZGlmIC8qIF9DTl9DSUZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggNDUwYWI3NS4uMmNiNjIwNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJudGxtc3NwLmgiCiAjaW5jbHVkZSAibnRlcnIuaCIKICNpbmNsdWRlICJyZmMxMDAycGR1LmgiCisjaW5jbHVkZSAiY25fY2lmcy5oIgogCiAjZGVmaW5lIENJRlNfUE9SVCA0NDUKICNkZWZpbmUgUkZDMTAwMV9QT1JUIDEzOQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IDkxMmQ0MDEuLjkyM2QwNzEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTI4Myw3ICsyODMsNiBAQAogCQkJICAgdGhlcmUgV2luZG93cyBzZXJ2ZXIgb3IgbmV0d29yayBhcHBsaWFuY2VzIGZvciB3aGljaAogCQkJICAgSW5kZXhOdW1iZXIgZmllbGQgaXMgbm90IGd1YXJhbnRlZWQgdW5pcXVlPyAqLwogCi0jaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCQkKIAkJCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfU0VSVkVSX0lOVU0pewogCQkJCWludCByYzEgPSAwOwogCQkJCV9fdTY0IGlub2RlX251bTsKQEAgLTI5OSw3ICsyOTgsNiBAQAogCQkJCX0gZWxzZSAvKiBkbyB3ZSBuZWVkIGNhc3Qgb3IgaGFzaCB0byBpbm8/ICovCiAJCQkJCSgqcGlub2RlKS0+aV9pbm8gPSBpbm9kZV9udW07CiAJCQl9IC8qIGVsc2UgaW5vIGluY3JlbWVudGVkIHRvIHVuaXF1ZSBudW0gaW4gbmV3X2lub2RlKi8KLSNlbmRpZiAvKiBDSUZTX0VYUEVSSU1FTlRBTCAqLwogCQkJaW5zZXJ0X2lub2RlX2hhc2goKnBpbm9kZSk7CiAJCX0KIAkJaW5vZGUgPSAqcGlub2RlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAppbmRleCA1NWQ4NWVlLi5jZmI0MTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaGFyZHdhcmUuaApAQCAtNDQsNSArNDQsNiBAQAogI2luY2x1ZGUgIml4ZHA0MjUuaCIKICNpbmNsdWRlICJjb3lvdGUuaCIKICNpbmNsdWRlICJwcnBtYzExMDAuaCIKKyNpbmNsdWRlICJuc2x1Mi5oIgogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2lycXMuaAppbmRleCBjYTgwODI4Li4yY2Y0OTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pcnFzLmgKQEAgLTkzLDQgKzkzLDExIEBACiAjZGVmaW5lCUlSUV9DT1lPVEVfUENJX1NMT1QxCUlSUV9JWFA0WFhfR1BJTzExCiAjZGVmaW5lCUlSUV9DT1lPVEVfSURFCQlJUlFfSVhQNFhYX0dQSU81CiAKKy8qCisgKiBOU0xVMiBib2FyZCBJUlFzCisgKi8KKyNkZWZpbmUgICAgICAgIElSUV9OU0xVMl9QQ0lfSU5UQSAgICAgIElSUV9JWFA0WFhfR1BJTzExCisjZGVmaW5lICAgICAgICBJUlFfTlNMVTJfUENJX0lOVEIgICAgICBJUlFfSVhQNFhYX0dQSU8xMAorI2RlZmluZSAgICAgICAgSVJRX05TTFUyX1BDSV9JTlRDICAgICAgSVJRX0lYUDRYWF9HUElPOQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L25zbHUyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiMzQ3YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9uc2x1Mi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvbnNsdTIuaAorICoKKyAqIE5TTFUyIHBsYXRmb3JtIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQXV0aG9yOiBNYXJrIFJha2VzIDxtcmFrZXMgQVQgbWFjLmNvbT4KKyAqIE1haW50YWluZXJzOiBodHRwOi8vd3d3Lm5zbHUyLWxpbnV4Lm9yZworICoKKyAqIGJhc2VkIG9uIGl4ZHA0MjUuaDoKKyAqCUNvcHlyaWdodCAyMDA0IChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgdGhpcyBkaXJlY3RseSwgaW5zdGVhZCAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IgorI2VuZGlmCisKKyNkZWZpbmUgTlNMVTJfRkxBU0hfQkFTRQlJWFA0WFhfRVhQX0JVU19DUzBfQkFTRV9QSFlTCisjZGVmaW5lIE5TTFUyX0ZMQVNIX1NJWkUJSVhQNFhYX0VYUF9CVVNfQ1NYX1JFR0lPTl9TSVpFCisKKyNkZWZpbmUgTlNMVTJfU0RBX1BJTgkJNworI2RlZmluZSBOU0xVMl9TQ0xfUElOCQk2CisKKy8qCisgKiBOU0xVMiBQQ0kgSVJRcworICovCisjZGVmaW5lIE5TTFUyX1BDSV9NQVhfREVWCTMKKyNkZWZpbmUgTlNMVTJfUENJX0lSUV9MSU5FUwkzCisKKworLyogUENJIGNvbnRyb2xsZXIgR1BJTyB0byBJUlEgcGluIG1hcHBpbmdzICovCisjZGVmaW5lIE5TTFUyX1BDSV9JTlRBX1BJTgkxMQorI2RlZmluZSBOU0xVMl9QQ0lfSU5UQl9QSU4JMTAKKyNkZWZpbmUgTlNMVTJfUENJX0lOVENfUElOCTkKKyNkZWZpbmUgTlNMVTJfUENJX0lOVERfUElOCTgKKworCisvKiBOU0xVMiBUaW1lciAqLworI2RlZmluZSBOU0xVMl9GUkVRIDY2MDAwMDAwCisjZGVmaW5lIE5TTFUyX0NMT0NLX1RJQ0tfUkFURSAoKChOU0xVMl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBOU0xVMl9DTE9DS19USUNLU19QRVJfVVNFQyAoKE5TTFUyX0NMT0NLX1RJQ0tfUkFURSArIFVTRUNfUEVSX1NFQy8yKSAvIFVTRUNfUEVSX1NFQykKKworLyogR1BJTyAqLworCisjZGVmaW5lIE5TTFUyX0dQSU8wCQkwCisjZGVmaW5lIE5TTFUyX0dQSU8xCQkxCisjZGVmaW5lIE5TTFUyX0dQSU8yCQkyCisjZGVmaW5lIE5TTFUyX0dQSU8zCQkzCisjZGVmaW5lIE5TTFUyX0dQSU80CQk0CisjZGVmaW5lIE5TTFUyX0dQSU81CQk1CisjZGVmaW5lIE5TTFUyX0dQSU82CQk2CisjZGVmaW5lIE5TTFUyX0dQSU83CQk3CisjZGVmaW5lIE5TTFUyX0dQSU84CQk4CisjZGVmaW5lIE5TTFUyX0dQSU85CQk5CisjZGVmaW5lIE5TTFUyX0dQSU8xMAkJMTAKKyNkZWZpbmUgTlNMVTJfR1BJTzExCQkxMQorI2RlZmluZSBOU0xVMl9HUElPMTIJCTEyCisjZGVmaW5lIE5TTFUyX0dQSU8xMwkJMTMKKyNkZWZpbmUgTlNMVTJfR1BJTzE0CQkxNAorI2RlZmluZSBOU0xVMl9HUElPMTUJCTE1CisKKy8qIEJ1dHRvbnMgKi8KKworI2RlZmluZSBOU0xVMl9QQl9HUElPCQlOU0xVMl9HUElPNQorI2RlZmluZSBOU0xVMl9QT19HUElPCQlOU0xVMl9HUElPOAkvKiBwb3dlciBvZmYgKi8KKyNkZWZpbmUgTlNMVTJfUkJfR1BJTwkJTlNMVTJfR1BJTzEyCisKKyNkZWZpbmUgTlNMVTJfUEJfSVJRCQlJUlFfSVhQNFhYX0dQSU81CisjZGVmaW5lIE5TTFUyX1JCX0lSUQkJSVJRX0lYUDRYWF9HUElPMTIKKworI2RlZmluZSBOU0xVMl9QQl9CTQkJKDFMIDw8IE5TTFUyX1BCX0dQSU8pCisjZGVmaW5lIE5TTFUyX1BPX0JNCQkoMUwgPDwgTlNMVTJfUE9fR1BJTykKKyNkZWZpbmUgTlNMVTJfUkJfQk0JCSgxTCA8PCBOU0xVMl9SQl9HUElPKQorCisvKiBCdXp6ZXIgKi8KKworI2RlZmluZSBOU0xVMl9HUElPX0JVWloJCTQKKyNkZWZpbmUgTlNMVTJfQlpfQk0JCSgxTCA8PCBOU0xVMl9HUElPX0JVWlopCisvKiBMRURzICovCisKKyNkZWZpbmUgTlNMVTJfTEVEX1JFRAkJTlNMVTJfR1BJTzAKKyNkZWZpbmUgTlNMVTJfTEVEX0dSTgkJTlNMVTJfR1BJTzEKKworI2RlZmluZSBOU0xVMl9MRURfUkVEX0JNCSgxTCA8PCBOU0xVMl9MRURfUkVEKQorI2RlZmluZSBOU0xVMl9MRURfR1JOX0JNCSgxTCA8PCBOU0xVMl9MRURfR1JOKQorCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMQkJTlNMVTJfR1BJTzIKKyNkZWZpbmUgTlNMVTJfTEVEX0RJU0syCQlOU0xVMl9HUElPMworCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMV9CTQkoMUwgPDwgTlNMVTJfR1BJTzIpCisjZGVmaW5lIE5TTFUyX0xFRF9ESVNLMl9CTQkoMUwgPDwgTlNMVTJfR1BJTzMpCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1oNC5oCmluZGV4IGQ2NGVlOTIuLjMzZWEyOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaDQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWg0LmgKQEAgLTM0LDUgKzM0LDExIEBACiAjZGVmaW5lIE9NQVAyNFhYX0VUSFJfU1RBUlQgICAgICAgICAgICAgMHgwODAwMDMwMAogI2RlZmluZSBPTUFQMjRYWF9FVEhSX0dQSU9fSVJRCQk5MgogCisjZGVmaW5lIEg0X0NTMF9CQVNFCQkgICAgIDB4MDQwMDAwMDAKKworI2RlZmluZSBINF9DUzBfQkFTRQkJICAgICAweDA0MDAwMDAwCisKKyNkZWZpbmUgSDRfQ1MwX0JBU0UJCSAgICAgMHgwNDAwMDAwMAorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9INF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWlubm92YXRvci5oCmluZGV4IDc5NTc0ZTAuLmIzY2YzMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtaW5ub3ZhdG9yLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1pbm5vdmF0b3IuaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSU5OT1ZBVE9SX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9ICiAKLSNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTVYWCkKIAogI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQogI2RlZmluZSBPTUFQX1NEUkFNX0RFVklDRQkJCUQyNTZNXzFYMTZfNEIKQEAgLTQ0LDcgKzQ0LDcgQEAKIHVuc2lnbmVkIGNoYXIgZnBnYV9yZWFkKGludCByZWcpOwogI2VuZGlmCiAKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKICNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MGMyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgorICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CisgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfQ0xPQ0tfSAorCitzdHJ1Y3QgbW9kdWxlOworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWNvbnN0IGNoYXIJCSpuYW1lOworCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CisJdW5zaWduZWQgbG9uZwkJcmF0ZTsKKwlfX3UzMgkJCWZsYWdzOworCXZvaWQgX19pb21lbQkJKmVuYWJsZV9yZWc7CisJX191OAkJCWVuYWJsZV9iaXQ7CisJX191OAkJCXJhdGVfb2Zmc2V0OworCV9fdTgJCQlzcmNfb2Zmc2V0OworCV9fczgJCQl1c2Vjb3VudDsKKwl2b2lkCQkJKCpyZWNhbGMpKHN0cnVjdCBjbGsgKik7CisJaW50CQkJKCpzZXRfcmF0ZSkoc3RydWN0IGNsayAqLCB1bnNpZ25lZCBsb25nKTsKKwlsb25nCQkJKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOworCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7CisJaW50CQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKK307CisKK3N0cnVjdCBjbGtfZnVuY3Rpb25zIHsKKwlpbnQJCSgqY2xrX2VuYWJsZSkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19kaXNhYmxlKShzdHJ1Y3QgY2xrICpjbGspOworCWludAkJKCpjbGtfdXNlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX3VudXNlKShzdHJ1Y3QgY2xrICpjbGspOworCWxvbmcJCSgqY2xrX3JvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKKwlpbnQJCSgqY2xrX3NldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJaW50CQkoKmNsa19zZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7CisJc3RydWN0IGNsayAqCSgqY2xrX2dldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsayk7CisJdm9pZAkJKCpjbGtfYWxsb3dfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKKwl2b2lkCQkoKmNsa19kZW55X2lkbGUpKHN0cnVjdCBjbGsgKmNsayk7Cit9OworCitleHRlcm4gdW5zaWduZWQgaW50IG1wdXJhdGU7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjbG9ja3M7CitleHRlcm4gc3BpbmxvY2tfdCBjbG9ja2Z3X2xvY2s7CisKK2V4dGVybiBpbnQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKTsKK2V4dGVybiBpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdm9pZCBjbGtfdW5yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7CitleHRlcm4gdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOworCisvKiBDbG9jayBmbGFncyAqLworI2RlZmluZSBSQVRFX0NLQ1RMCQkoMSA8PCAwKQkvKiBNYWluIGZpeGVkIHJhdGlvIGNsb2NrcyAqLworI2RlZmluZSBSQVRFX0ZJWEVECQkoMSA8PCAxKQkvKiBGaXhlZCBjbG9jayByYXRlICovCisjZGVmaW5lIFJBVEVfUFJPUEFHQVRFUwkJKDEgPDwgMikJLyogUHJvZ3JhbSBjaGlsZHJlbiB0b28gKi8KKyNkZWZpbmUgVklSVFVBTF9DTE9DSwkJKDEgPDwgMykJLyogQ29tcG9zaXRlIGNsb2NrIGZyb20gdGFibGUgKi8KKyNkZWZpbmUgQUxXQVlTX0VOQUJMRUQJCSgxIDw8IDQpCS8qIENsb2NrIGNhbm5vdCBiZSBkaXNhYmxlZCAqLworI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCSgxIDw8IDUpCS8qIFVzZSAzMi1iaXQgYWNjZXNzICovCisjZGVmaW5lIFZJUlRVQUxfSU9fQUREUkVTUwkoMSA8PCA2KQkvKiBDbG9jayBpbiB2aXJ0dWFsIGFkZHJlc3MgKi8KKyNkZWZpbmUgQ0xPQ0tfSURMRV9DT05UUk9MCSgxIDw8IDcpCisjZGVmaW5lIENMT0NLX05PX0lETEVfUEFSRU5UCSgxIDw8IDgpCisjZGVmaW5lIERFTEFZRURfQVBQCQkoMSA8PCA5KQkvKiBEZWxheSBhcHBsaWNhdGlvbiBvZiBjbG9jayAqLworI2RlZmluZSBDT05GSUdfUEFSVElDSVBBTlQJKDEgPDwgMTApCS8qIEZ1bmRhbWVudGFsIGNsb2NrICovCisjZGVmaW5lIENNX01QVV9TRUwxCQkoMSA8PCAxMSkJLyogRG9tYWluIGRpdmlkZXIvc291cmNlICovCisjZGVmaW5lIENNX0RTUF9TRUwxCQkoMSA8PCAxMikKKyNkZWZpbmUgQ01fR0ZYX1NFTDEJCSgxIDw8IDEzKQorI2RlZmluZSBDTV9NT0RFTV9TRUwxCQkoMSA8PCAxNCkKKyNkZWZpbmUgQ01fQ09SRV9TRUwxCQkoMSA8PCAxNSkJLyogU2V0cyBkaXZpZGVyIGZvciBtYW55ICovCisjZGVmaW5lIENNX0NPUkVfU0VMMgkJKDEgPDwgMTYpCS8qIHNldHMgcGFyZW50IGZvciBHUFQgKi8KKyNkZWZpbmUgQ01fV0tVUF9TRUwxCQkoMSA8PCAxNykKKyNkZWZpbmUgQ01fUExMX1NFTDEJCSgxIDw8IDE4KQorI2RlZmluZSBDTV9QTExfU0VMMgkJKDEgPDwgMTkpCisjZGVmaW5lIENNX1NZU0NMS09VVF9TRUwxCSgxIDw8IDIwKQorI2RlZmluZSBDTE9DS19JTl9PTUFQNzMwCSgxIDw8IDIxKQorI2RlZmluZSBDTE9DS19JTl9PTUFQMTUxMAkoMSA8PCAyMikKKyNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE2WFgJKDEgPDwgMjMpCisjZGVmaW5lIENMT0NLX0lOX09NQVAyNDJYCSgxIDw8IDI0KQorI2RlZmluZSBDTE9DS19JTl9PTUFQMjQzWAkoMSA8PCAyNSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jb21tb24uaAppbmRleCAyYTY3NmI0Li4wOGQ1OGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY29tbW9uLmgKQEAgLTMxLDYgKzMxLDYgQEAKIAogZXh0ZXJuIHZvaWQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKLWV4dGVybiB2b2lkIG9tYXBfc2VyaWFsX2luaXQoaW50IHBvcnRzW10pOworZXh0ZXJuIHZvaWQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVJDSF9BUk1fTUFDSF9PTUFQX0NPTU1PTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jcHUuaAppbmRleCAxMTE5ZTJiLi5lYzdlYjY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY3B1LmgKQEAgLTI4LDEyICsyOCw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKIAotI2RlZmluZSBPTUFQX0RJRV9JRF8wCQkweGZmZmUxODAwCi0jZGVmaW5lIE9NQVBfRElFX0lEXzEJCTB4ZmZmZTE4MDQKLSNkZWZpbmUgT01BUF9QUk9EVUNUSU9OX0lEXzAJMHhmZmZlMjAwMAotI2RlZmluZSBPTUFQX1BST0RVQ1RJT05fSURfMQkweGZmZmUyMDA0Ci0jZGVmaW5lIE9NQVAzMl9JRF8wCQkweGZmZmVkNDAwCi0jZGVmaW5lIE9NQVAzMl9JRF8xCQkweGZmZmVkNDA0CisjZGVmaW5lIG9tYXAyX2NwdV9yZXYoKQkJKChzeXN0ZW1fcmV2ID4+IDgpICYgMHgwZikKIAogLyoKICAqIFRlc3QgaWYgbXVsdGljb3JlIE9NQVAgc3VwcG9ydCBpcyBuZWVkZWQKQEAgLTUwLDcgKzQ1LDcgQEAKICMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAogIyBlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1MTAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogIyBpZmRlZiBPTUFQX05BTUUKICMgIHVuZGVmICBNVUxUSV9PTUFQMQogIyAgZGVmaW5lIE1VTFRJX09NQVAxCkBAIC03OSw5ICs3NCwxMSBAQAogICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgaW50byBjcHUgY2xhc3Nlcy4KICAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgogICogY3B1X2lzX29tYXA3eHgoKToJVHJ1ZSBmb3IgT01BUDczMAotICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIE9NQVAxNTEwIGFuZCBPTUFQNTkxMAorICogY3B1X2lzX29tYXAxNXh4KCk6CVRydWUgZm9yIE9NQVAxNTEwLCBPTUFQNTkxMCBhbmQgT01BUDMxMAogICogY3B1X2lzX29tYXAxNnh4KCk6CVRydWUgZm9yIE9NQVAxNjEwLCBPTUFQNTkxMiBhbmQgT01BUDE3MTAKLSAqIGNwdV9pc19vbWFwMjR4eCgpOglUcnVlIGZvciBPTUFQMjQyMAorICogY3B1X2lzX29tYXAyNHh4KCk6CVRydWUgZm9yIE9NQVAyNDIwLCBPTUFQMjQyMiwgT01BUDI0MjMsIE9NQVAyNDMwCisgKiBjcHVfaXNfb21hcDI0MngoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMworICogY3B1X2lzX29tYXAyNDN4KCk6CVRydWUgZm9yIE9NQVAyNDMwCiAgKi8KICNkZWZpbmUgR0VUX09NQVBfQ0xBU1MJKHN5c3RlbV9yZXYgJiAweGZmKQogCkBAIC05MSwyMiArODgsMzUgQEAKIAlyZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7CVwKIH0KIAorI2RlZmluZSBHRVRfT01BUF9TVUJDTEFTUwkoKHN5c3RlbV9yZXYgPj4gMjApICYgMHgwZmZmKQorCisjZGVmaW5lIElTX09NQVBfU1VCQ0xBU1Moc3ViY2xhc3MsIGlkKQkJCVwKK3N0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyNzdWJjbGFzcyAodm9pZCkJCVwKK3sJCQkJCQkJXAorCXJldHVybiAoR0VUX09NQVBfU1VCQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsJXAorfQorCiBJU19PTUFQX0NMQVNTKDd4eCwgMHgwNykKIElTX09NQVBfQ0xBU1MoMTV4eCwgMHgxNSkKIElTX09NQVBfQ0xBU1MoMTZ4eCwgMHgxNikKIElTX09NQVBfQ0xBU1MoMjR4eCwgMHgyNCkKIAorSVNfT01BUF9TVUJDTEFTUygyNDJ4LCAweDI0MikKK0lTX09NQVBfU1VCQ0xBU1MoMjQzeCwgMHgyNDMpCisKICNkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2eHgoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDI0eHgoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MngoKQkJMAorI2RlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJMAogCiAjaWYgZGVmaW5lZChNVUxUSV9PTUFQMSkKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJaXNfb21hcDd4eCgpCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCWlzX29tYXAxNXh4KCkKICMgZW5kaWYKQEAgLTExOSw3ICsxMjksNyBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMTV4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMTV4eCgpCQkxCiAjIGVuZGlmCkBAIC0xMjksMTMgKzEzOSwxOCBAQAogIyBlbmRpZgogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjR4eAorIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyeAorIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQzeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpCQkxCisjICBkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkJCWlzX29tYXAyNDJ4KCkKKyMgIGRlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJaXNfb21hcDI0M3goKQogIyBlbmRpZgogI2VuZGlmCiAKIC8qCiAgKiBNYWNyb3MgdG8gZGV0ZWN0IGluZGl2aWR1YWwgY3B1IHR5cGVzLgogICogVGhlc2UgYXJlIG9ubHkgcmFyZWx5IG5lZWRlZC4KKyAqIGNwdV9pc19vbWFwMzMwKCk6CVRydWUgZm9yIE9NQVAzMzAKICAqIGNwdV9pc19vbWFwNzMwKCk6CVRydWUgZm9yIE9NQVA3MzAKICAqIGNwdV9pc19vbWFwMTUxMCgpOglUcnVlIGZvciBPTUFQMTUxMAogICogY3B1X2lzX29tYXAxNjEwKCk6CVRydWUgZm9yIE9NQVAxNjEwCkBAIC0xNDQsNiArMTU5LDkgQEAKICAqIGNwdV9pc19vbWFwMTYyMSgpOglUcnVlIGZvciBPTUFQMTYyMQogICogY3B1X2lzX29tYXAxNzEwKCk6CVRydWUgZm9yIE9NQVAxNzEwCiAgKiBjcHVfaXNfb21hcDI0MjAoKToJVHJ1ZSBmb3IgT01BUDI0MjAKKyAqIGNwdV9pc19vbWFwMjQyMigpOglUcnVlIGZvciBPTUFQMjQyMgorICogY3B1X2lzX29tYXAyNDIzKCk6CVRydWUgZm9yIE9NQVAyNDIzCisgKiBjcHVfaXNfb21hcDI0MzAoKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqLwogI2RlZmluZSBHRVRfT01BUF9UWVBFCSgoc3lzdGVtX3JldiA+PiAxNikgJiAweGZmZmYpCiAKQEAgLTE1Myw2ICsxNzEsNyBAQAogCXJldHVybiAoR0VUX09NQVBfVFlQRSA9PSAoaWQpKSA/IDEgOiAwOwkJXAogfQogCitJU19PTUFQX1RZUEUoMzEwLCAweDAzMTApCiBJU19PTUFQX1RZUEUoNzMwLCAweDA3MzApCiBJU19PTUFQX1RZUEUoMTUxMCwgMHgxNTEwKQogSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYxMCkKQEAgLTE2MSw3ICsxODAsMTEgQEAKIElTX09NQVBfVFlQRSgxNjIxLCAweDE2MjEpCiBJU19PTUFQX1RZUEUoMTcxMCwgMHgxNzEwKQogSVNfT01BUF9UWVBFKDI0MjAsIDB4MjQyMCkKK0lTX09NQVBfVFlQRSgyNDIyLCAweDI0MjIpCitJU19PTUFQX1RZUEUoMjQyMywgMHgyNDIzKQorSVNfT01BUF9UWVBFKDI0MzAsIDB4MjQzMCkKIAorI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAxNjEwKCkJCTAKQEAgLTE3MCwzMSArMTkzLDMzIEBACiAjZGVmaW5lIGNwdV9pc19vbWFwMTYyMSgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMygpCQkwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpCQkwCiAKICNpZiBkZWZpbmVkKE1VTFRJX09NQVAxKQogIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCiAjICB1bmRlZiAgY3B1X2lzX29tYXA3MzAKICMgIGRlZmluZSBjcHVfaXNfb21hcDczMCgpCQlpc19vbWFwNzMwKCkKICMgZW5kaWYKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKLSMgIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKLSMgIGRlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJaXNfb21hcDE1MTAoKQotIyBlbmRpZgogI2Vsc2UKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwNzMwCiAjICBkZWZpbmUgY3B1X2lzX29tYXA3MzAoKQkJMQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNTEwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMTUxMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpCQkxCi0jIGVuZGlmCiAjZW5kaWYKIAogLyoKICAqIFdoZXRoZXIgd2UgaGF2ZSBNVUxUSV9PTUFQMSBvciBub3QsIHdlIHN0aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2gKLSAqIGJldHdlZW4gMTYxMUIvNTkxMiBhbmQgMTcxMC4KKyAqIGJldHdlZW4gMzMwIHZzLiAxNTEwIGFuZCAxNjExQi81OTEyIHZzLiAxNzEwLgogICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwMzEwCisjIHVuZGVmICBjcHVfaXNfb21hcDE1MTAKKyMgZGVmaW5lIGNwdV9pc19vbWFwMzEwKCkJCWlzX29tYXAzMTAoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAxNTEwKCkJCWlzX29tYXAxNTEwKCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKICMgdW5kZWYgIGNwdV9pc19vbWFwMTYxMAogIyB1bmRlZiAgY3B1X2lzX29tYXAxNjExCkBAIC0yMDgsOSArMjMzLDIwIEBACiAjIGRlZmluZSBjcHVfaXNfb21hcDE3MTAoKQkJaXNfb21hcDE3MTAoKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDIwKQotIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQyMAotIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQyMCgpCQkxCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMAorIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIyCisjIHVuZGVmICBjcHVfaXNfb21hcDI0MjMKKyMgdW5kZWYgIGNwdV9pc19vbWFwMjQzMAorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkJCWlzX29tYXAyNDIwKCkKKyMgZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpCQlpc19vbWFwMjQyMigpCisjIGRlZmluZSBjcHVfaXNfb21hcDI0MjMoKQkJaXNfb21hcDI0MjMoKQorIyBkZWZpbmUgY3B1X2lzX29tYXAyNDMwKCkJCWlzX29tYXAyNDMwKCkKICNlbmRpZgogCisvKiBNYWNyb3MgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgT01BUDEgb3IgT01BUDIgKi8KKyNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkJKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgXAorCQkJCWNwdV9pc19vbWFwMTZ4eCgpKQorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDIoKQljcHVfaXNfb21hcDI0eHgoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCmluZGV4IDA0ZWJlZjUuLmNjYmNiNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaApAQCAtMjIsOSArMjIsMTA5IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCQkweGZmZmZmZmZmCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJCTAKKworLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMSAqLworI2RlZmluZSBPTUFQX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCisjZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCisjZGVmaW5lIE9NQVBfRE1BX0dTQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA0KQorI2RlZmluZSBPTUFQX0RNQV9HUlNUCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwOCkKKyNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ0KQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ2KQorI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQorI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRhKQorI2RlZmluZSBPTUFQX0RNQV9QQ0hEX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRjKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTApCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDUyKQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18yCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18zCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1OCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKKyNkZWZpbmUgT01BUF9ETUFfUENIMl9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ2MCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MCkKKyNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKKyNkZWZpbmUgT01BUF9ETUFfUENIRF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKKworLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQkFTRQkJKEw0XzI0WFhfQkFTRSArIDB4NTYwMDApCisjZGVmaW5lIE9NQVBfRE1BNF9SRVZJU0lPTgkJKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9ETUE0X0dDUl9SRUcJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MGMpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTApCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MWMpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjApCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjQpCisjZGVmaW5lIE9NQVBfRE1BNF9TWVNTVEFUVVMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjgpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzAJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjQpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzIJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NmMpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzMJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzApCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzQJCShPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzQpCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQogCiAjZGVmaW5lIE9NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlQJMTcKIAorLyogQ29tbW9uIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciBvbWFwMSAqLworI2RlZmluZSBPTUFQX0RNQV9DU0RQX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDApCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAyKQorI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDQpCisjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA2KQorI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTIpCisjZGVmaW5lIE9NQVBfRE1BX0NTRklfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQorI2RlZmluZSBPTUFQX0RNQV9DU0FDX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTgpCisjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxYSkKKyNkZWZpbmUgT01BUF9ETUFfQ0RFSV9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQorI2RlZmluZSBPTUFQX0RNQV9DREZJX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWUpCisjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjgpCisKKyNlbHNlCisKKyNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkzMgkvKiBSRVZJU0lUOiBJcyB0aGlzIDMyICsgMj8gKi8KKworLyogQ29tbW9uIGNoYW5uZWwgc3BlY2lmaWMgcmVnaXN0ZXJzIGZvciBvbWFwMiAqLworI2RlZmluZSBPTUFQX0RNQV9DQ1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCisjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg0KQorI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg4KQorI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OGMpCisjZGVmaW5lIE9NQVBfRE1BX0NTRFBfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTApCisjZGVmaW5lIE9NQVBfRE1BX0NFTl9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDk4KQorI2RlZmluZSBPTUFQX0RNQV9DU0VJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE0KQorI2RlZmluZSBPTUFQX0RNQV9DU0ZJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE4KQorI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGFjKQorI2RlZmluZSBPTUFQX0RNQV9DREZJX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGIwKQorI2RlZmluZSBPTUFQX0RNQV9DU0FDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI0KQorI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI4KQorCisjZW5kaWYKKworLyogQ2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgb25seSBvbiBvbWFwMSAqLworI2RlZmluZSBPTUFQMV9ETUFfQ1NTQV9MX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDgpCisjZGVmaW5lIE9NQVAxX0RNQV9DU1NBX1VfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYSkKKyNkZWZpbmUgT01BUDFfRE1BX0NEU0FfTF9SRUcobikJCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9VX1JFRyhuKQkJX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCisjZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKKyNkZWZpbmUgT01BUDFfRE1BX0NDUjJfUkVHKG4pCQlfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyNCkKKyNkZWZpbmUgT01BUDFfRE1BX0NPTE9SX1VfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIyKQorI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkxfUkVHKG4pCV9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQorCisvKiBDaGFubmVsIHNwZWNpZmljIHJlZ2lzdGVycyBvbmx5IG9uIG9tYXAyICovCisjZGVmaW5lIE9NQVAyX0RNQV9DU1NBX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDljKQorI2RlZmluZSBPTUFQMl9ETUFfQ0RTQV9SRUcobikJCV9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhMCkKKyNkZWZpbmUgT01BUDJfRE1BX0NDRU5fUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YmMpCisjZGVmaW5lIE9NQVAyX0RNQV9DQ0ZOX1JFRyhuKQkJX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQorI2RlZmluZSBPTUFQMl9ETUFfQ09MT1JfUkVHKG4pCQlfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YzQpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERNQSBjaGFubmVscyBmb3Igb21hcDEgKi8KICNkZWZpbmUgT01BUF9ETUFfTk9fREVWSUNFCQkwCiAjZGVmaW5lIE9NQVBfRE1BX01DU0kxX1RYCQkxCiAjZGVmaW5lIE9NQVBfRE1BX01DU0kxX1JYCQkyCkBAIC04NSwyOSArMTg1LDcyIEBACiAjZGVmaW5lIE9NQVBfRE1BX01NQzJfUlgJCTU1CiAjZGVmaW5lIE9NQVBfRE1BX0NSWVBUT19ERVNfT1VUCQk1NgogCisvKiBETUEgY2hhbm5lbHMgZm9yIDI0eHggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX05PX0RFVklDRQkJMAorI2RlZmluZSBPTUFQMjRYWF9ETUFfWFRJX0RNQQkJMQkvKiBTX0RNQV8wICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfTkRNQV9SRVEwCTIJLyogU19ETUFfMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX05ETUFfUkVRMQkzCS8qIFNfRE1BXzIgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0dQTUMJCTQJLyogU19ETUFfMyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfR0ZYCQk1CS8qIFNfRE1BXzQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0RTUwkJNgkvKiBTX0RNQV81ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9WTFlOUV9UWAkJNwkvKiBTX0RNQV82ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9DV1QJCTgJLyogU19ETUFfNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1RYCQk5CS8qIFNfRE1BXzggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19SWAkJMTAJLyogU19ETUFfOSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYCQkxMQkvKiBTX0RNQV8xMCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1JYCQkxMgkvKiBTX0RNQV8xMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU0hBMU1ENV9SWAkJMTMJLyogU19ETUFfMTIgKi8KIAotI2RlZmluZSBPTUFQX0RNQV9CQVNFCQkJKDB4ZmZmZWQ4MDApCi0jZGVmaW5lIE9NQVBfRE1BX0dDUgkJCShPTUFQX0RNQV9CQVNFICsgMHg0MDApCi0jZGVmaW5lIE9NQVBfRE1BX0dTQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA0KQotI2RlZmluZSBPTUFQX0RNQV9HUlNUCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwOCkKLSNkZWZpbmUgT01BUF9ETUFfSFdfSUQJCQkoT01BUF9ETUFfQkFTRSArIDB4NDQyKQotI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ0KQotI2RlZmluZSBPTUFQX0RNQV9QQ0gwX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ2KQotI2RlZmluZSBPTUFQX0RNQV9QQ0gxX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQotI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRhKQotI2RlZmluZSBPTUFQX0RNQV9QQ0hEX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRjKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTApCi0jZGVmaW5lIE9NQVBfRE1BX0NBUFNfMV9VCQkoT01BUF9ETUFfQkFTRSArIDB4NDUyKQotI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18yCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU18zCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1OCkKLSNkZWZpbmUgT01BUF9ETUFfQ0FQU180CQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKLSNkZWZpbmUgT01BUF9ETUFfUENIMl9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ2MCkKLSNkZWZpbmUgT01BUF9ETUFfUENIMF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MCkKLSNkZWZpbmUgT01BUF9ETUFfUENIMV9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKLSNkZWZpbmUgT01BUF9ETUFfUENIRF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19SRAkJMTcJLyogU19ETUFfMTYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19XUgkJMTgJLyogU19ETUFfMTcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9SRAkxOQkvKiBTX0RNQV8xOCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1dSCTIwCS8qIFNfRE1BXzE5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfUkQJMjEJLyogU19ETUFfMjAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9XUgkyMgkvKiBTX0RNQV8yMSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1JECTIzCS8qIFNfRE1BXzIyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfV1IJMjQJLyogU19ETUFfMjMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9SRAkyNQkvKiBTX0RNQV8yNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1dSCTI2CS8qIFNfRE1BXzI1ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1RYCQkyNwkvKiBTX0RNQV8yNiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9SWAkJMjgJLyogU19ETUFfMjcgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfVFgJCTI5CS8qIFNfRE1BXzI4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1JYCQkzMAkvKiBTX0RNQV8yOSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1RYCQkzMQkvKiBTRE1BXzMwICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlgJCTMyCS8qIFNETUFfMzEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9UWAkJMzMJLyogU0RNQV8zMiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYCQkzNAkvKiBTRE1BXzMzICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMAkJMzUJLyogU0RNQV8zNCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDAJCTM2CS8qIFNETUFfMzUgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgxCQkzNwkvKiBTRE1BXzM2ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMQkJMzgJLyogU0RNQV8zNyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDIJCTM5CS8qIFNETUFfMzggKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfUlgyCQk0MAkvKiBTRE1BXzM5ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMwkJNDEJLyogU0RNQV80MCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDMJCTQyCS8qIFNETUFfNDEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfVFgwCQk0MwkvKiBTRE1BXzQyICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1JYMAkJNDQJLyogU0RNQV80MyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDEJCTQ1CS8qIFNETUFfNDQgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgxCQk0NgkvKiBTRE1BXzQ1ICovCiAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1RYCQk0OQkvKiBTRE1BXzQ4ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9SWAkJNTAJLyogU0RNQV80OSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfVFgJCTUxCS8qIFNETUFfNTAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1JYCQk1MgkvKiBTRE1BXzUxICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19UWAkJNTMJLyogU0RNQV81MiAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDNfUlgJCTU0CS8qIFNETUFfNTMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMAk1NQkvKiBTRE1BXzU0ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDAJNTYJLyogU0RNQV81NSAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgxCTU3CS8qIFNETUFfNTYgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMQk1OAkvKiBTRE1BXzU3ICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDIJNTkJLyogU0RNQV81OCAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgyCTYwCS8qIFNETUFfNTkgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfVFgJCTYxCS8qIFNETUFfNjAgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfUlgJCTYyCS8qIFNETUFfNjEgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01TCQkJNjMJLyogU0RNQV82MiAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBIYXJkd2FyZSByZWdpc3RlcnMgZm9yIExDRCBETUEgKi8KICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZGIwMCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9DVFJMCQkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTAkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMikKQEAgLTExNiw3ICsyNTksNyBAQAogI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9VCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA4KQogCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWUzMDApCi0jZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ1NEUCAgICAgIAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMCkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DQ1IJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMyKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM0KQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM4KQpAQCAtMTM0LDM3ICsyNzcsMTggQEAKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9MQ0hfQ1RSTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlYSkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKIAotCi0vKiBFdmVyeSBMQ2ggaGFzIGl0cyBvd24gc2V0IG9mIHRoZSByZWdpc3RlcnMgYmVsb3cgKi8KLSNkZWZpbmUgT01BUF9ETUFfQ1NEUChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMCkKLSNkZWZpbmUgT01BUF9ETUFfQ0NSKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwMikKLSNkZWZpbmUgT01BUF9ETUFfQ0lDUihuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKLSNkZWZpbmUgT01BUF9ETUFfQ1NSKG4pCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNikKLSNkZWZpbmUgT01BUF9ETUFfQ1NTQV9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA4KQotI2RlZmluZSBPTUFQX0RNQV9DU1NBX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGEpCi0jZGVmaW5lIE9NQVBfRE1BX0NEU0FfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYykKLSNkZWZpbmUgT01BUF9ETUFfQ0RTQV9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBlKQotI2RlZmluZSBPTUFQX0RNQV9DRU4obikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEwKQotI2RlZmluZSBPTUFQX0RNQV9DRk4obikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEyKQotI2RlZmluZSBPTUFQX0RNQV9DU0ZJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE0KQotI2RlZmluZSBPTUFQX0RNQV9DU0VJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQotI2RlZmluZSBPTUFQX0RNQV9DU0FDKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE4KQotI2RlZmluZSBPTUFQX0RNQV9DREFDKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFhKQotI2RlZmluZSBPTUFQX0RNQV9DREVJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQotI2RlZmluZSBPTUFQX0RNQV9DREZJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFlKQotI2RlZmluZSBPTUFQX0RNQV9DT0xPUl9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIwKQotI2RlZmluZSBPTUFQX0RNQV9DT0xPUl9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIyKQotI2RlZmluZSBPTUFQX0RNQV9DQ1IyKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQotI2RlZmluZSBPTUFQX0RNQV9DTE5LX0NUUkwobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjgpCi0jZGVmaW5lIE9NQVBfRE1BX0xDSF9DVFJMKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQotCi0jZGVmaW5lIE9NQVBfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQX0RNQV9UT1VUX0lSUQkJKDEgPDwgMCkJLyogT25seSBvbiBvbWFwMSAqLwogI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKICNkZWZpbmUgT01BUF9ETUFfSEFMRl9JUlEJCSgxIDw8IDIpCiAjZGVmaW5lIE9NQVBfRE1BX0ZSQU1FX0lSUQkJKDEgPDwgMykKICNkZWZpbmUgT01BUF9ETUFfTEFTVF9JUlEJCSgxIDw8IDQpCiAjZGVmaW5lIE9NQVBfRE1BX0JMT0NLX0lSUQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUF9ETUFfU1lOQ19JUlEJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAxX0RNQV9TWU5DX0lSUQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDJfRE1BX1BLVF9JUlEJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMl9ETUFfU0VDVVJFX0VSUl9JUlEJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDJfRE1BX1NVUEVSVklTT1JfRVJSX0lSUQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDJfRE1BX01JU0FMSUdORURfRVJSX0lSUQkoMSA8PCAxMSkKIAogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzgJCTB4MDAKICNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1MxNgkJMHgwMQpAQCAtMTk0LDYgKzMxOCw3IEBACiAJT01BUF9MQ0RfRE1BX0IyX0JPVFRPTQogfTsKIAorLyogUkVWSVNJVDogQ2hlY2sgaWYgQlVSU1RfNCBpcyByZWFsbHkgMSAob3IgMikgKi8KIGVudW0gb21hcF9kbWFfYnVyc3RfbW9kZSB7CiAJT01BUF9ETUFfREFUQV9CVVJTVF9ESVMgPSAwLAogCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKQEAgLTIwNiw2ICszMzEsMzEgQEAKIAlPTUFQX0RNQV9UUkFOU1BBUkVOVF9DT1BZCiB9OwogCitzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgeworCWludCBkYXRhX3R5cGU7CQkvKiBkYXRhIHR5cGUgOCwxNiwzMiAqLworCWludCBlbGVtX2NvdW50OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgZnJhbWUgKi8KKwlpbnQgZnJhbWVfY291bnQ7CS8qIG51bWJlciBvZiBmcmFtZXMgaW4gYSBlbGVtZW50ICovCisKKwlpbnQgc3JjX3BvcnQ7CQkvKiBPbmx5IG9uIE9NQVAxIFJFVklTSVQ6IElzIHRoaXMgbmVlZGVkPyAqLworCWludCBzcmNfYW1vZGU7CQkvKiBjb25zdGFudCAsIHBvc3QgaW5jcmVtZW50LCBpbmRleGVkICwgZG91YmxlIGluZGV4ZWQgKi8KKwlpbnQgc3JjX3N0YXJ0OwkJLyogc291cmNlIGFkZHJlc3MgOiBwaHlzaWNhbCAqLworCWludCBzcmNfZWk7CQkvKiBzb3VyY2UgZWxlbWVudCBpbmRleCAqLworCWludCBzcmNfZmk7CQkvKiBzb3VyY2UgZnJhbWUgaW5kZXggKi8KKworCWludCBkc3RfcG9ydDsJCS8qIE9ubHkgb24gT01BUDEgUkVWSVNJVDogSXMgdGhpcyBuZWVkZWQ/ICovCisJaW50IGRzdF9hbW9kZTsJCS8qIGNvbnN0YW50ICwgcG9zdCBpbmNyZW1lbnQsIGluZGV4ZWQgLCBkb3VibGUgaW5kZXhlZCAqLworCWludCBkc3Rfc3RhcnQ7CQkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCisJaW50IGRzdF9laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCisJaW50IGRzdF9maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLworCisJaW50IHRyaWdnZXI7CQkvKiB0cmlnZ2VyIGF0dGFjaGVkIGlmIHRoZSBjaGFubmVsIGlzIHN5bmNocm9uaXplZCAqLworCWludCBzeW5jX21vZGU7CQkvKiBzeWNuIG9uIGVsZW1lbnQsIGZyYW1lICwgYmxvY2sgb3IgcGFja2V0ICovCisJaW50IHNyY19vcl9kc3Rfc3luY2g7CS8qIHNvdXJjZSBzeW5jaCgxKSBvciBkZXN0aW5hdGlvbiBzeW5jaCgwKSAqLworCisJaW50IGllOwkJCS8qIGludGVycnVwdCBlbmFibGVkICovCit9OworCisKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wcmlvcml0eShpbnQgZHN0X3BvcnQsIGludCBwcmlvcml0eSk7CiBleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9kbWEoaW50IGRldl9pZCwgY29uc3QgY2hhciAqZGV2X25hbWUsCiAJCQkgICAgdm9pZCAoKiBjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSksCkBAIC0yMTcsMjQgKzM2NywzMCBAQAogZXh0ZXJuIHZvaWQgb21hcF9zdG9wX2RtYShpbnQgbGNoKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW50IGxjaCwgaW50IGRhdGFfdHlwZSwKIAkJCQkJIGludCBlbGVtX2NvdW50LCBpbnQgZnJhbWVfY291bnQsCi0JCQkJCSBpbnQgc3luY19tb2RlKTsKKwkJCQkJIGludCBzeW5jX21vZGUsCisJCQkJCSBpbnQgZG1hX3RyaWdnZXIsIGludCBzcmNfb3JfZHN0X3N5bmNoKTsKIGV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLAogCQkJCSAgICB1MzIgY29sb3IpOwogCiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0KTsKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQsCisJCQkJICAgIGludCBzcmNfZWksIGludCBzcmNfZmkpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19kYXRhX3BhY2soaW50IGxjaCwgaW50IGVuYWJsZSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW50IGxjaCwKIAkJCQkJZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpOwogCiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaW50IGxjaCwgaW50IGRlc3RfcG9ydCwgaW50IGRlc3RfYW1vZGUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGRlc3Rfc3RhcnQpOworCQkJCSAgICAgdW5zaWduZWQgbG9uZyBkZXN0X3N0YXJ0LAorCQkJCSAgICAgaW50IGRzdF9laSwgaW50IGRzdF9maSk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9pbmRleChpbnQgbGNoLCBpbnQgZWlkeCwgaW50IGZpZHgpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOwogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLAogCQkJCQkgZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIGJ1cnN0X21vZGUpOwogCitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfcGFyYW1zKGludCBsY2gsCisJCQkJc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zICogcGFyYW1zKTsKKwogZXh0ZXJuIHZvaWQgb21hcF9kbWFfbGlua19sY2ggKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSk7CiBleHRlcm4gdm9pZCBvbWFwX2RtYV91bmxpbmtfbGNoIChpbnQgbGNoX2hlYWQsIGludCBsY2hfcXVldWUpOwogCkBAIC0yNDQsOSArNDAwLDYgQEAKIGV4dGVybiB2b2lkIG9tYXBfY2xlYXJfZG1hKGludCBsY2gpOwogZXh0ZXJuIGludCBvbWFwX2RtYV9ydW5uaW5nKHZvaWQpOwogCi0vKiBSZXR1cm5zIDEgaWYgdGhlIERNQSBtb2R1bGUgaXMgaW4gT01BUDE1MTAtY29tcGF0aWJsZSBtb2RlLCAwIG90aGVyd2lzZSAqLwotZXh0ZXJuIGludCBvbWFwX2RtYV9pbl8xNTEwX21vZGUodm9pZCk7Ci0KIC8qIExDRCBETUEgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IG9tYXBfcmVxdWVzdF9sY2RfZG1hKHZvaWQgKCogY2FsbGJhY2spKHUxNiBzdGF0dXMsIHZvaWQgKmRhdGEpLAogCQkJCXZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9lbnRyeS1tYWNyby5TCmluZGV4IDBkMjliOWMuLmY4ODE0YTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZW50cnktbWFjcm8uUworKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2VudHJ5LW1hY3JvLlMKQEAgLTEwLDYgKzEwLDIwIEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQogCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSAmJiBcCisJKGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpKQorI2Vycm9yICJGSVhNRTogT01BUDczMCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUtT01BUCIKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF83MzBfSUgyX0lSUQorI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKKyNkZWZpbmUgSU5UX0lIMl9JUlEJCUlOVF8xNTEwX0lIMl9JUlEKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisjZGVmaW5lIElOVF9JSDJfSVJRCQlJTlRfMTYxMF9JSDJfSVJRCisjZWxzZQorI3dhcm5pbmcgIklIMiBJUlEgZGVmYXVsdGVkIgorI2RlZmluZSBJTlRfSUgyX0lSUQkJSU5UXzE1MTBfSUgyX0lSUQorI2VuZGlmCisKICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2ZwZ2EuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCmluZGV4IDY3NjgwN2QuLjZhODgzZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZnBnYS5oCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9GUEdBX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogCi0jaWYgZGVmaW5lZChDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUikgJiYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX09NQVBfSU5OT1ZBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogZXh0ZXJuIHZvaWQgb21hcDE1MTBfZnBnYV9pbml0X2lycSh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIG9tYXAxNTEwX2ZwZ2FfaW5pdF9pcnEoKQkoMCkKQEAgLTc3LDYgKzc3LDggQEAKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUJMTEKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX01BU0sJKCgxIDw8IEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFKSAtIDEpCiAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9QMl9MRURfVElNRVIJCSgxIDw8IDApCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX0lETEUJCSgxIDw8IDEpCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3Bpby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKaW5kZXggNzRjYjJiOS4uMWIzODg1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncGlvLmgKQEAgLTY3LDcgKzY3LDcgQEAKIAogI2RlZmluZSBPTUFQX0dQSU9fSVJRKG5yKQkoT01BUF9HUElPX0lTX01QVUlPKG5yKSA/IFwKIAkJCQkgSUhfTVBVSU9fQkFTRSArICgobnIpICYgMHgwZikgOiBcCi0JCQkJIElIX0dQSU9fQkFTRSArICgobnIpICYgMHgzZikpCisJCQkJIElIX0dQSU9fQkFTRSArIChucikpCiAKIGV4dGVybiBpbnQgb21hcF9ncGlvX2luaXQodm9pZCk7CS8qIENhbGwgZnJvbSBib2FyZCBpbml0IG9ubHkgKi8KIGV4dGVybiBpbnQgb21hcF9yZXF1ZXN0X2dwaW8oaW50IGdwaW8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCmluZGV4IDYwMjAxZTEuLjU0MDZiODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKQEAgLTI2Nyw4ICsyNjcsNiBAQAogI2RlZmluZSBPTUFQX0xQRzJfTENSCQkJKE9NQVBfTFBHMl9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUF9MUEcyX1BNUgkJCShPTUFQX0xQRzJfQkFTRSArIDB4MDQpCiAKLSNpZm5kZWYgX19BU1NFTUJMRVJfXwotCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBQcm9jZXNzb3Igc3BlY2lmaWMgZGVmaW5lcwpAQCAtMjc3LDEzICsyNzUsMTEgQEAKIAogI2luY2x1ZGUgIm9tYXA3MzAuaCIKICNpbmNsdWRlICJvbWFwMTUxMC5oIgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKICNpbmNsdWRlICJvbWFwMjR4eC5oIgotI2VuZGlmCi0KICNpbmNsdWRlICJvbWFwMTZ4eC5oIgogCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKwogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQm9hcmQgc3BlY2lmaWMgZGVmaW5lcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pby5oCmluZGV4IDNkNWJjZDUuLmY1YmNjOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lvLmgKQEAgLTUyLDIzICs1MiwzMyBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKKyNkZWZpbmUgUENJT19CQVNFCTAKKwogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCisKICNkZWZpbmUgSU9fUEhZUwkJMHhGRkZCMDAwMAotI2RlZmluZSBJT19PRkZTRVQgICAgICAtMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLworI2RlZmluZSBJT19PRkZTRVQJMHgwMTAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhmZWZiMDAwMCAqLwogI2RlZmluZSBJT19TSVpFCQkweDQwMDAwCisjZGVmaW5lIElPX1ZJUlQJCShJT19QSFlTIC0gSU9fT0ZGU0VUKQorI2RlZmluZSBJT19BRERSRVNTKHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fcDJ2KHBhKQkoKHBhKSAtIElPX09GRlNFVCkKKyNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSArIElPX09GRlNFVCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKLSNkZWZpbmUgSU9fUEhZUwkJMHg0ODAwMDAwMAkvKiBMNCBwZXJpcGhlcmFsczsgb3RoZXIgc3R1ZmYgaGFzIHRvIGJlIG1hcHBlZCAqCi0JCQkJCSAqIG1hbnVhbGx5LiAqLwotI2RlZmluZSBJT19PRkZTRVQJMHg5MDAwMDAwMAkvKiBWaXJ0dWFsIElPID0gMHhkODAwMDAwMCAqLwotI2RlZmluZSBJT19TSVpFCQkweDA4MDAwMDAwCi0jZW5kaWYKIAotI2RlZmluZSBJT19WSVJUCQkoSU9fUEhZUyArIElPX09GRlNFVCkKLSNkZWZpbmUgSU9fQUREUkVTUyh4KQkoKHgpICsgSU9fT0ZGU0VUKQotI2RlZmluZSBQQ0lPX0JBU0UJMAotI2RlZmluZSBpb19wMnYoeCkJKCh4KSArIElPX09GRlNFVCkKLSNkZWZpbmUgaW9fdjJwKHgpCSgoeCkgLSBJT19PRkZTRVQpCisvKiBXZSBtYXAgYm90aCBMMyBhbmQgTDQgb24gT01BUDIgKi8KKyNkZWZpbmUgTDNfMjRYWF9QSFlTCUwzXzI0WFhfQkFTRQkvKiAweDY4MDAwMDAwICovCisjZGVmaW5lIEwzXzI0WFhfVklSVAkweGY4MDAwMDAwCisjZGVmaW5lIEwzXzI0WFhfU0laRQlTWl8xTQkJLyogNDRrQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisjZGVmaW5lIEw0XzI0WFhfUEhZUwlMNF8yNFhYX0JBU0UJLyogMHg0ODAwMDAwMCAqLworI2RlZmluZSBMNF8yNFhYX1ZJUlQJMHhkODAwMDAwMAorI2RlZmluZSBMNF8yNFhYX1NJWkUJU1pfMU0JCS8qIDFNQiBvZiAxMjhNQiB1c2VkLCB3YW50IDFNQiBzZWN0ICovCisjZGVmaW5lIElPX09GRlNFVAkweDkwMDAwMDAwCisjZGVmaW5lIElPX0FERFJFU1MocGEpCSgocGEpICsgSU9fT0ZGU0VUKQkvKiBXb3JrcyBmb3IgTDMgYW5kIEw0ICovCisjZGVmaW5lIGlvX3AydihwYSkJKChwYSkgKyBJT19PRkZTRVQpCS8qIFdvcmtzIGZvciBMMyBhbmQgTDQgKi8KKyNkZWZpbmUgaW9fdjJwKHZhKQkoKHZhKSAtIElPX09GRlNFVCkJLyogV29ya3MgZm9yIEwzIGFuZCBMNCAqLworCisjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKaW5kZXggNzRlMTA4Yy4uOTc3OTY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9pcnFzLmgKQEAgLTIyLDggKzIyLDggQEAKICAqCSBhcmUgZGlmZmVyZW50LgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTUxMF9JUlFTX0gKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKIAogLyoKICAqIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCkBAIC0zMSw3ICszMSw2IEBACiAgKiBOT1RFOiBTZWUgYWxzbyB0aGUgT01BUC0xNTEwIGFuZCAxNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGJlbG93CiAgKgogICovCi0jZGVmaW5lIElOVF9JSDJfSVJRCQkwCiAjZGVmaW5lIElOVF9DQU1FUkEJCTEKICNkZWZpbmUgSU5UX0ZJUQkJCTMKICNkZWZpbmUgSU5UX1JURFgJCTYKQEAgLTYwLDYgKzU5LDcgQEAKIC8qCiAgKiBPTUFQLTE1MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgZm9yIGludGVycnVwdCBoYW5kbGVyIDEKICAqLworI2RlZmluZSBJTlRfMTUxMF9JSDJfSVJRCTAKICNkZWZpbmUgSU5UXzE1MTBfUkVTMgkJMgogI2RlZmluZSBJTlRfMTUxMF9TUElfVFgJCTQKICNkZWZpbmUgSU5UXzE1MTBfU1BJX1JYCQk1CkBAIC03MSw2ICs3MSw3IEBACiAvKgogICogT01BUC0xNjEwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCiAgKi8KKyNkZWZpbmUgSU5UXzE2MTBfSUgyX0lSUQkwCiAjZGVmaW5lIElOVF8xNjEwX0lIMl9GSVEJMgogI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfVFgJNAogI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfUlgJNQpAQCAtMjMxLDYgKzIzMiwxMiBAQAogI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE1CSg2MiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX05BTkQJCSg2MyArIElIMl9CQVNFKQogCisjZGVmaW5lIElOVF8yNFhYX1NZU19OSVJRCTcKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEwCTEyCisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMQkxMworI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTIJMTQKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlEzCTE1CisjZGVmaW5lIElOVF8yNFhYX0RTU19JUlEJMjUKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMQkyOQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksyCTMwCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMJMzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbW9yeS5oCmluZGV4IGJmNTQ1YjYuLmRmNTBkZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW1vcnkuaApAQCAtNjEsNyArNjEsNyBAQAogICogTm90ZSB0aGF0IHRoZSBpc19sYnVzX2RldmljZSgpIHRlc3QgaXMgbm90IHZlcnkgZWZmaWNpZW50IG9uIDE1MTAKICAqIGJlY2F1c2Ugb2YgdGhlIHN0cm5jbXAoKS4KICAqLwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNTEwCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAogLyoKICAqIE9NQVAtMTUxMCBMb2NhbCBCdXMgYWRkcmVzcyBvZmZzZXQKQEAgLTg0LDcgKzg0LDcgQEAKIAkJCQkJdmlydF90b19sYnVzKGFkZHIpIDogXAogCQkJCQlfX3ZpcnRfdG9fYnVzKGFkZHIpO30pCiAKLSNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMTUxMCAqLworI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL21lbmVsYXVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiZThiOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbWVuZWxhdXMuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tZW5lbGF1cy5oCisgKgorICogRnVuY3Rpb25zIHRvIGFjY2VzcyBNZW5lbGF1cyBwb3dlciBtYW5hZ2VtZW50IGNoaXAKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVORUxBVVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTkVMQVVTX0gKKworZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX3JlZ2lzdGVyKHZvaWQgKCpjYWxsYmFjaykodTggY2FyZF9tYXNrKSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZGF0YSk7CitleHRlcm4gdm9pZCBtZW5lbGF1c19tbWNfcmVtb3ZlKHZvaWQpOworZXh0ZXJuIHZvaWQgbWVuZWxhdXNfbW1jX29wZW5kcmFpbihpbnQgZW5hYmxlKTsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpICYmIGRlZmluZWQoQ09ORklHX01FTkVMQVVTKQorI2RlZmluZSBvbWFwX2hhc19tZW5lbGF1cygpCTEKKyNlbHNlCisjZGVmaW5lIG9tYXBfaGFzX21lbmVsYXVzKCkJMAorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAppbmRleCAxYjFhZDQxLi4xMzQxNWE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKQEAgLTQsNyArNCw3IEBACiAgKiBUYWJsZSBvZiB0aGUgT21hcCByZWdpc3RlciBjb25maWd1cmF0aW9ucyBmb3IgdGhlIEZVTkNfTVVYIGFuZAogICogUFVMTF9EV04gY29tYmluYXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgVG9ueSBMaW5kZ3JlbiA8dG9ueS5saW5kZ3JlbkBub2tpYS5jb20+CiAgKgpAQCAtNTgsNiArNTgsMTYgQEAKIAkJCQkJLnB1X3BkX3JlZyA9IFBVX1BEX1NFTF8jI3JlZywgXAogCQkJCQkucHVfcGRfdmFsID0gc3RhdHVzLAogCisjZGVmaW5lIE1VWF9SRUdfNzMwKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiT01BUDczMF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfbmFtZSA9ICJPTUFQNzMwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbHNlCiAKICNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKQEAgLTcxLDYgKzgxLDE1IEBACiAjZGVmaW5lIFBVX1BEX1JFRyhyZWcsIHN0YXR1cykJCS5wdV9wZF9yZWcgPSBQVV9QRF9TRUxfIyNyZWcsIFwKIAkJCQkJLnB1X3BkX3ZhbCA9IHN0YXR1cywKIAorI2RlZmluZSBNVVhfUkVHXzczMChyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSBcCisJCQkJCS5tdXhfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR183MzAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfcmVnID0gT01BUDczMF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbmRpZiAvKiBDT05GSUdfT01BUF9NVVhfREVCVUcgKi8KIAogI2RlZmluZSBNVVhfQ0ZHKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLAlcCkBAIC04NCwxMyArMTAzLDQ0IEBACiAJUFVfUERfUkVHKHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzKQkJXAogfSwKIAorCisvKgorICogT01BUDczMCBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlnIGZvciB0aGUgcGluIG11eC4KKyAqIC0gY29uZmlnIHJlZ3MgYXJlIHRoZSBPTUFQNzMwX0lPX0NPTkZfeCByZWdzIChzZWUgb21hcDczMC5oKSByZWdzIGFuZAorICogICBub3QgdGhlIEZVTkNfTVVYX0NUUkxfeCByZWdzIGZyb20gaGFyZHdhcmUuaAorICogLSBmb3IgcHVsbC11cC9kb3duLCBvbmx5IGhhcyBvbmUgZW5hYmxlIGJpdCB3aGljaCBpcyBpcyBpbiB0aGUgc2FtZSByZWdpc3RlcgorICogICBhcyBtdXggY29uZmlnCisgKi8KKyNkZWZpbmUgTVVYX0NGR183MzAoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsCVwKKwkJICAgcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywJXAorCQkgICBwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKVwKK3sJCQkJCQkJXAorCS5uYW1lID0JIGRlc2MsCQkJCQlcCisJLmRlYnVnID0gZGVidWdfc3RhdHVzLAkJCQlcCisJTVVYX1JFR183MzAobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpCQlcCisJUFVMTF9SRUdfNzMwKG11eF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykJXAorCVBVX1BEX1JFRyhwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cykJCVwKK30sCisKKyNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAorCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCit7CQkJCQkJCQlcCisJLm5hbWUJCT0gZGVzYywJCQkJCVwKKwkuZGVidWcJCT0gZGJnLAkJCQkJXAorCS5tdXhfcmVnCT0gcmVnX29mZnNldCwJCQkJXAorCS5tYXNrCQk9IG1vZGUsCQkJCQlcCisJLnB1bGxfdmFsCT0gcHVsbF9lbiwJCQkJXAorCS5wdV9wZF92YWwJPSBwdWxsX21vZGUsCQkJCVwKK30sCisKKwogI2RlZmluZSBQVUxMX0RJU0FCTEVECTAKICNkZWZpbmUgUFVMTF9FTkFCTEVECTEKIAogI2RlZmluZSBQVUxMX0RPV04JMAogI2RlZmluZSBQVUxMX1VQCQkxCiAKLXR5cGVkZWYgc3RydWN0IHsKK3N0cnVjdCBwaW5fY29uZmlnIHsKIAljaGFyICpuYW1lOwogCXVuc2lnbmVkIGNoYXIgYnVzeTsKIAl1bnNpZ25lZCBjaGFyIGRlYnVnOwpAQCAtMTA4LDEzICsxNTgsMjMgQEAKIAljb25zdCBjaGFyICpwdV9wZF9uYW1lOwogCWNvbnN0IHVuc2lnbmVkIGludCBwdV9wZF9yZWc7CiAJY29uc3QgdW5zaWduZWQgY2hhciBwdV9wZF92YWw7Ci19IHJlZ19jZmdfc2V0OworfTsKIAotLyoKLSAqIExvb2t1cCB0YWJsZSBmb3IgRlVOQ19NVVggYW5kIFBVTExfRFdOIHJlZ2lzdGVyIGNvbWJpbmF0aW9ucyBmb3IgZWFjaAotICogZGV2aWNlLiBTZWUgYWxzbyByZWdfY2ZnX3RhYmxlIGJlbG93IGZvciB0aGUgcmVnaXN0ZXIgdmFsdWVzLgotICovCi10eXBlZGVmIGVudW0geworZW51bSBvbWFwNzMwX2luZGV4IHsKKwkvKiBPTUFQIDczMCBrZXlib2FyZCAqLworCUUyXzczMF9LQlIwLAorCUo3XzczMF9LQlIxLAorCUUxXzczMF9LQlIyLAorCUYzXzczMF9LQlIzLAorCUQyXzczMF9LQlI0LAorCUMyXzczMF9LQkMwLAorCUQzXzczMF9LQkMxLAorCUU0XzczMF9LQkMyLAorCUY0XzczMF9LQkMzLAorCUUzXzczMF9LQkM0LAorfTsKKworZW51bSBvbWFwMXh4eF9pbmRleCB7CiAJLyogVUFSVDEgKEJUX1VBUlRfR0FUSU5HKSovCiAJVUFSVDFfVFggPSAwLAogCVVBUlQxX1JUUywKQEAgLTMzMSwyNDUgKzM5MSwzNCBAQAogCVYxMF8xNjEwX0NGX0lSRVEsCiAJVzEwXzE2MTBfQ0ZfUkVTRVQsCiAJVzExXzE2MTBfQ0ZfQ0QxLAotfSByZWdfY2ZnX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVYX0NfXykgJiYgZGVmaW5lZChDT05GSUdfT01BUF9NVVgpCi0KLS8qCi0gKiBUYWJsZSBvZiB2YXJpb3VzIEZVTkNfTVVYIGFuZCBQVUxMX0RXTiBjb21iaW5hdGlvbnMgZm9yIGVhY2ggZGV2aWNlLgotICogU2VlIGFsc28gcmVnX2NmZ190IGFib3ZlIGZvciB0aGUgbG9va3VwIHRhYmxlLgotICovCi1zdGF0aWMgY29uc3QgcmVnX2NmZ19zZXQgX19pbml0ZGF0YV9vcl9tb2R1bGUKLXJlZ19jZmdfdGFibGVbXSA9IHsKLS8qCi0gKgkgZGVzY3JpcHRpb24JCW11eCAgbW9kZSAgIG11eAkgcHVsbCBwdWxsICBwdWxsICBwdV9wZAkgcHUgIGRiZwotICoJCQkJcmVnICBvZmZzZXQgbW9kZSByZWcgIGJpdCAgIGVuYQkgIHJlZwotICovCi1NVVhfQ0ZHKCJVQVJUMV9UWCIsCQkgOSwgICAyMSwgICAgMSwJICAyLCAgIDMsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUMV9SVFMiLAkJIDksICAgMTIsICAgIDEsCSAgMiwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBVQVJUMiAoQ09NX1VBUlRfR0FUSU5HKSwgY29uZmxpY3RzIHdpdGggVVNCMiAqLwotTVVYX0NGRygiVUFSVDJfVFgiLAkJIEMsICAgMjcsICAgIDEsCSAgMywgICAzLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfUlgiLAkJIEMsICAgMTgsICAgIDAsCSAgMywgICAxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDJfQ1RTIiwJCSBDLCAgIDIxLCAgICAwLAkgIDMsICAgMSwgICAxLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQyX1JUUyIsCQkgQywgICAyNCwgICAgMSwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFVBUlQzIChHSUdBX1VBUlRfR0FUSU5HKSAqLwotTVVYX0NGRygiVUFSVDNfVFgiLAkJIDYsICAgIDAsICAgIDEsCSAgMCwgIDMwLCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfUlgiLAkJIDYsICAgIDMsICAgIDAsCSAgMCwgIDMxLCAgIDEsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQ1RTIiwJCSA1LCAgIDEyLCAgICAyLAkgIDAsICAyNCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlVBUlQzX1JUUyIsCQkgNSwgICAxNSwgICAgMiwJICAwLCAgMjUsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJVQVJUM19DTEtSRVEiLAkJIDksICAgMjcsICAgIDAsCSAgMiwgICA1LCAgIDAsCSBOQSwJIDAsICAwKQotTVVYX0NGRygiVUFSVDNfQkNMSyIsCQkgQSwgICAgMCwgICAgMCwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi1NVVhfQ0ZHKCJZMTVfMTYxMF9VQVJUM19SVFMiLAkgQSwgICAgMCwgICAgMSwJICAyLCAgIDYsICAgMCwJIE5BLAkgMCwgIDApCi0KLS8qIFBXVCAmIFBXTCwgY29uZmxpY3RzIHdpdGggVUFSVDMgKi8KLU1VWF9DRkcoIlBXVCIsCQkgCSA2LCAgICAwLCAgICAyLAkgIDAsICAzMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIlBXTCIsCQkgCSA2LCAgICAzLCAgICAxLAkgIDAsICAzMSwgICAxLAkgTkEsCSAwLCAgMCkKLQotLyogVVNCIGludGVybmFsIG1hc3RlciBnZW5lcmljICovCi1NVVhfQ0ZHKCJSMThfVVNCX1ZCVVMiLAkJIDcsICAgIDksICAgIDIsCSAgMSwgIDExLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiUjE4XzE1MTBfVVNCX0dQSU8wIiwJIDcsICAgIDksICAgIDAsCSAgMSwgIDExLCAgIDEsCSBOQSwJIDAsICAxKQotLyogd29ya3MgYXJvdW5kIGVycmF0dW06ICBXNF9VU0JfUFVFTiBhbmQgVzRfVVNCX1BVRElTIGFyZSBzd2l0Y2hlZCEgKi8KLU1VWF9DRkcoIlc0X1VTQl9QVUVOIiwJCSBELCAgICAzLCAgICAzLAkgIDMsICAgNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9DTEtPIiwJCSBELCAgICAzLCAgICAxLAkgIDMsICAgNSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc0X1VTQl9ISUdIWiIsCQkgRCwgICAgMywgICAgNCwJICAzLCAgIDUsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNF9HUElPNTgiLAkJIEQsICAgIDMsICAgIDcsCSAgMywgICA1LCAgIDAsCSAgMywJIDAsICAxKQotCi0vKiBVU0IxIG1hc3RlciAqLwotTVVYX0NGRygiVVNCMV9TVVNQIiwJCSA4LCAgIDI3LCAgICAyLAkgIDEsICAyNywgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfU0UwIiwJCSA5LCAgICAwLCAgICAyLAkgIDEsICAyOCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlcxM18xNjEwX1VTQjFfU0UwIiwJIDksICAgIDAsICAgIDQsCSAgMSwgIDI4LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9UWEVOIiwJCSA5LCAgICAzLCAgICAyLAkgIDEsICAyOSwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVFhEIiwJCSA5LCAgIDI0LCAgICAxLAkgIDIsICAgNCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlVTQjFfVlAiLAkJIEEsICAgIDMsICAgIDEsCSAgMiwgICA3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMV9WTSIsCQkgQSwgICAgNiwgICAgMSwJICAyLCAgIDgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1JDViIsCQkgQSwgICAgOSwgICAgMSwJICAyLCAgIDksICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IxX1NQRUVEIiwJCSBBLCAgIDEyLCAgICAyLAkgIDIsICAxMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlIxM18xNjEwX1VTQjFfU1BFRUQiLAkgQSwgICAxMiwgICAgNSwJICAyLCAgMTAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSMTNfMTcxMF9VU0IxX1NFTyIsCSBBLCAgIDEyLCAgICA1LCAgIDIsICAxMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIFVTQjIgbWFzdGVyICovCi1NVVhfQ0ZHKCJVU0IyX1NVU1AiLAkJIEIsICAgIDMsICAgIDEsCSAgMiwgIDE3LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WUCIsCQkgQiwgICAgNiwgICAgMSwJICAyLCAgMTgsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRU4iLAkJIEIsICAgIDksICAgIDEsCSAgMiwgIDE5LCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiVVNCMl9WTSIsCQkgQywgICAxOCwgICAgMSwJICAzLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1JDViIsCQkgQywgICAyMSwgICAgMSwJICAzLCAgIDEsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1NFMCIsCQkgQywgICAyNCwgICAgMiwJICAzLCAgIDIsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJVU0IyX1RYRCIsCQkgQywgICAyNywgICAgMiwJICAzLCAgIDMsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTUxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTUxMF9HUElPMCIsCSA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJSMTlfMTUxMF9HUElPMSIsCSA3LCAgICA2LCAgICAwLCAgIDEsICAxMCwgICAxLCAgICAwLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNMTRfMTUxMF9HUElPMiIsCSA3LCAgICAzLCAgICAwLCAgIDEsICAgOSwgICAxLCAgICAwLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAxNjEwIEdQSU8gKi8KLU1VWF9DRkcoIlAxOF8xNjEwX0dQSU8zIiwJIDcsICAgIDAsICAgIDAsICAgMSwgICA4LCAgIDAsICAgTkEsICAgICAwLCAgMSkKLU1VWF9DRkcoIlkxNV8xNjEwX0dQSU8xNyIsCSBBLCAgICAwLCAgICA3LCAgIDIsICAgNiwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTcxMCBHUElPICovCi1NVVhfQ0ZHKCJSMThfMTcxMF9HUElPMCIsICAgICAgICA3LCAgICA5LCAgICAwLCAgIDEsICAxMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJWMl8xNzEwX0dQSU8xMCIsICAgICAgICBGLCAgIDI3LCAgICAxLCAgIDQsICAgMywgICAxLCAgICA0LCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJOMjFfMTcxMF9HUElPMTQiLCAgICAgICA2LCAgICA5LCAgICAwLCAgIDEsICAgMSwgICAxLCAgICAxLCAgICAgMSwgIDEpCi1NVVhfQ0ZHKCJXMTVfMTcxMF9HUElPNDAiLCAgICAgICA5LCAgIDI3LCAgICA3LCAgIDIsICAgNSwgICAxLCAgICAyLCAgICAgMSwgIDEpCi0KLS8qIE1QVUlPICovCi1NVVhfQ0ZHKCJNUFVJTzIiLAkJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTjE1XzE2MTBfTVBVSU8yIiwJIDcsICAgMTgsICAgIDAsCSAgMSwgIDE0LCAgIDEsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiTVBVSU80IiwJCSA3LCAgIDE1LCAgICAwLAkgIDEsICAxMywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1QVUlPNSIsCQkgNywgICAxMiwgICAgMCwJICAxLCAgMTIsICAgMSwJIE5BLAkgMCwgIDEpCi0KLU1VWF9DRkcoIlQyMF8xNjEwX01QVUlPNSIsCSA3LCAgIDEyLCAgICAwLAkgIDEsICAxMiwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPNiIsCTEwLCAgIDE1LCAgICAyLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPNyIsCSBBLCAgIDI0LCAgICAyLAkgIDIsICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX01QVUlPOSIsCTEwLCAgIDE1LCAgICAxLAkgIDMsICAgOCwgICAwLAkgIDMsCSAwLCAgMSkKLU1VWF9DRkcoIlYxMF8xNjEwX01QVUlPMTAiLAkgQSwgICAyNCwgICAgMSwJICAyLCAgMTQsICAgMCwJICAyLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXMTBfMTYxMF9NUFVJTzExIiwJIEEsICAgMTgsICAgIDIsCSAgMiwgIDExLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiRTIwXzE2MTBfTVBVSU8xMyIsCSAzLCAgIDIxLCAgICAxLAkgIDAsICAgNywgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIlUyMF8xNjEwX01QVUlPMTQiLAkgOSwgICAgNiwgICAgNiwJICAwLCAgMzAsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJFMTlfMTYxMF9NUFVJTzE1IiwJIDMsICAgMTgsICAgIDEsCSAgMCwgICA2LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBNQ0JTUDIgKi8KLU1VWF9DRkcoIk1DQlNQMl9DTEtSIiwJCSBDLCAgICA2LCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9DTEtYIiwJCSBDLCAgICA5LCAgICAwLAkgIDIsICAyOSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk1DQlNQMl9EUiIsCQkgQywgICAgMCwgICAgMCwJICAyLCAgMjYsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRFgiLAkJIEMsICAgMTUsICAgIDAsCSAgMiwgIDMxLCAgIDEsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTUNCU1AyX0ZTUiIsCQkgQywgICAxMiwgICAgMCwJICAyLCAgMzAsICAgMSwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNQ0JTUDJfRlNYIiwJCSBDLCAgICAzLCAgICAwLAkgIDIsICAyNywgICAxLAkgTkEsCSAwLCAgMSkKLQotLyogTUNCU1AzIE5PVEU6IE1vZGUgbXVzdCAxIGZvciBjbG9jayAqLwotTVVYX0NGRygiTUNCU1AzX0NMS1giLAkJIDksICAgIDMsICAgIDEsCSAgMSwgIDI5LCAgIDAsCSBOQSwJIDAsICAxKQotCi0vKiBNaXNjIGJhbGxvdXRzICovCi1NVVhfQ0ZHKCJCQUxMT1VUX1Y4X0FSTUlPMyIsCSBCLCAgIDE4LCAgICAwLAkgIDIsICAyNSwgICAxLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIk4yMF9IRFEiLAkgICAgICAgNiwgICAxOCwgICAgMSwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDQsICAwKQotCi0vKiBPTUFQLTE2MTAgTU1DMiAqLwotTVVYX0NGRygiVzhfMTYxMF9NTUMyX0RBVDAiLAkgQiwgICAyMSwgICAgNiwJICAyLCAgMjMsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWOF8xNjEwX01NQzJfREFUMSIsCSBCLCAgIDI3LCAgICA2LAkgIDIsICAyNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxNV8xNjEwX01NQzJfREFUMiIsCSA5LCAgIDEyLCAgICA2LAkgIDIsICAgNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMF8xNjEwX01NQzJfREFUMyIsCSBCLCAgIDE4LCAgICA2LAkgIDIsICAyMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlkxMF8xNjEwX01NQzJfQ0xLIiwJIEIsICAgIDMsICAgIDYsCSAgMiwgIDE3LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWThfMTYxMF9NTUMyX0NNRCIsCSBCLCAgIDI0LCAgICA2LAkgIDIsICAyNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfTU1DMl9DTURESVIiLAkgQiwgICAxMiwgICAgNiwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWNV8xNjEwX01NQzJfREFURElSMCIsCSBCLCAgIDE1LCAgICA2LAkgIDIsICAyMSwgICAwLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX01NQzJfREFURElSMSIsIDgsICAgMTUsICAgIDYsCSAgMSwgIDIzLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUjE4XzE2MTBfTU1DMl9DTEtJTiIsCSA3LCAgICA5LCAgICA2LAkgIDEsICAxMSwgICAwLAkgIDEsCTExLCAgMSkKLQotLyogT01BUC0xNjEwIEV4dGVybmFsIFRyYWNlIEludGVyZmFjZSAqLwotTVVYX0NGRygiTTE5XzE2MTBfRVRNX1BTVEFUMCIsCSA1LCAgIDI3LCAgICAxLAkgIDAsICAyOSwgICAwLAkgIDAsCSAwLCAgMSkKLU1VWF9DRkcoIkwxNV8xNjEwX0VUTV9QU1RBVDEiLAkgNSwgICAyNCwgICAgMSwJICAwLCAgMjgsICAgMCwJICAwLAkgMCwgIDEpCi1NVVhfQ0ZHKCJMMThfMTYxMF9FVE1fUFNUQVQyIiwJIDUsICAgMjEsICAgIDEsCSAgMCwgIDI3LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiTDE5XzE2MTBfRVRNX0QwIiwJIDUsICAgMTgsICAgIDEsCSAgMCwgIDI2LCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE5XzE2MTBfRVRNX0Q2IiwJIDUsICAgIDAsICAgIDEsCSAgMCwgIDIwLCAgIDAsCSAgMCwJIDAsICAxKQotTVVYX0NGRygiSjE4XzE2MTBfRVRNX0Q3IiwJIDUsICAgMjcsICAgIDEsCSAgMCwgIDE5LCAgIDAsCSAgMCwJIDAsICAxKQotCi0vKiBPTUFQMTZYWCBHUElPICovCi1NVVhfQ0ZHKCJQMjBfMTYxMF9HUElPNCIsCSA2LCAgIDI3LCAgICAwLAkgIDEsICAgNywgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlY5XzE2MTBfR1BJTzciLAkgQiwgICAxMiwgICAgMSwJICAyLCAgMjAsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXOF8xNjEwX0dQSU85IiwJIEIsICAgMjEsICAgIDAsCSAgMiwgIDIzLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiTjIwXzE2MTBfR1BJTzExIiwgICAgICAgNiwgICAxOCwgICAgMCwgICAxLCAgIDQsICAgMCwgICAgMSwgICAgIDEsICAxKQotTVVYX0NGRygiTjE5XzE2MTBfR1BJTzEzIiwJIDYsICAgMTIsICAgIDAsCSAgMSwgICAyLCAgIDAsCSAgMSwJIDEsICAxKQotTVVYX0NGRygiUDEwXzE2MTBfR1BJTzIyIiwJIEMsICAgIDAsICAgIDcsCSAgMiwgIDI2LCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiVjVfMTYxMF9HUElPMjQiLAkgQiwgICAxNSwgICAgNywJICAyLCAgMjEsICAgMCwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJBQTIwXzE2MTBfR1BJT180MSIsCSA5LCAgICA5LCAgICA3LAkgIDEsICAzMSwgICAwLAkgIDEsCSAxLCAgMSkKLU1VWF9DRkcoIlcxOV8xNjEwX0dQSU80OCIsCSA4LCAgIDE1LCAgICA3LCAgIDEsICAyMywgICAxLCAgICAxLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJNN18xNjEwX0dQSU82MiIsCTEwLCAgICAwLCAgICAwLCAgIDQsICAyNCwgICAwLCAgICA0LCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJWMTRfMTZYWF9HUElPMzciLAkgOSwgICAxOCwgICAgNywJICAyLCAgIDIsICAgMCwJICAyLAkgMiwgIDApCi1NVVhfQ0ZHKCJSOV8xNlhYX0dQSU8xOCIsCSBDLCAgIDE4LCAgICA3LCAgIDMsICAgMCwgICAwLCAgICAzLCAgICAgMCwgIDApCi1NVVhfQ0ZHKCJMMTRfMTZYWF9HUElPNDkiLAkgNiwgICAgMywgICAgNywgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAwKQotCi0vKiBPTUFQLTE2MTAgdVdpcmUgKi8KLU1VWF9DRkcoIlYxOV8xNjEwX1VXSVJFX1NDTEsiLAkgOCwgICAgNiwgICAgMCwJICAxLCAgMjAsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJVMThfMTYxMF9VV0lSRV9TREkiLAkgOCwgICAgMCwgICAgMCwJICAxLCAgMTgsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJXMjFfMTYxMF9VV0lSRV9TRE8iLAkgOCwgICAgMywgICAgMCwJICAxLCAgMTksICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTRfMTYxMF9VV0lSRV9DUzAiLAkgOCwgICAgOSwgICAgMSwJICAxLCAgMjEsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJQMTVfMTYxMF9VV0lSRV9DUzMiLAkgOCwgICAxMiwgICAgMSwJICAxLCAgMjIsICAgMCwJICAxLAkgMSwgIDEpCi1NVVhfQ0ZHKCJOMTVfMTYxMF9VV0lSRV9DUzEiLAkgNywgICAxOCwgICAgMiwJICAxLCAgMTQsICAgMCwJIE5BLAkgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBGbGFzaCAqLwotTVVYX0NGRygiTDNfMTYxMF9GTEFTSF9DUzJCX09FIiwxMCwgICAgNiwgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJNOF8xNjEwX0ZMQVNIX0NTMkJfV0UiLDEwLCAgICAzLCAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogRmlyc3QgTU1DIGludGVyZmFjZSwgc2FtZSBvbiAxNTEwLCAxNjEwIGFuZCAxNzEwICovCi1NVVhfQ0ZHKCJNTUNfQ01EIiwJCSBBLCAgIDI3LCAgICAwLAkgIDIsICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQxIiwJCSBBLCAgIDI0LCAgICAwLAkgIDIsICAxNCwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQyIiwJCSBBLCAgIDE4LCAgICAwLAkgIDIsICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19EQVQwIiwJCSBCLCAgICAwLCAgICAwLAkgIDIsICAxNiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIk1NQ19DTEsiLAkJIEEsICAgMjEsICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAxKQotTVVYX0NGRygiTU1DX0RBVDMiLAkJMTAsICAgMTUsICAgIDAsCSAgMywgICA4LCAgIDEsCSAgMywJIDEsICAxKQotTVVYX0NGRygiTTE1XzE3MTBfTU1DX0NMS0kiLAkgNiwgICAyMSwgICAgMiwgICAwLCAgIDAsICAgMCwgICBOQSwgICAgIDAsICAxKQotTVVYX0NGRygiUDE5XzE3MTBfTU1DX0NNRERJUiIsCSA2LCAgIDI0LCAgICA2LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi1NVVhfQ0ZHKCJQMjBfMTcxMF9NTUNfREFURElSMCIsCSA2LCAgIDI3LCAgICA1LCAgIDAsICAgMCwgICAwLCAgIE5BLCAgICAgMCwgIDEpCi0KLS8qIE9NQVAtMTYxMCBVU0IwIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uICovCi1NVVhfQ0ZHKCJXOV9VU0IwX1RYRU4iLAkJIEIsICAgOSwgICAgIDUsCSAgMiwgIDE5LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiQUE5X1VTQjBfVlAiLAkJIEIsICAgNiwgICAgIDUsCSAgMiwgIDE4LCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTVfVVNCMF9SQ1YiLAkJIEMsICAyMSwgICAgIDUsCSAgMywgICAxLCAgIDAsCSAgMSwJIDAsICAxKQotTVVYX0NGRygiUjlfVVNCMF9WTSIsCQkgQywgIDE4LCAgICAgNSwJICAzLCAgIDAsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWNl9VU0IwX1RYRCIsCQkgQywgIDI3LCAgICAgNSwJICAzLCAgIDMsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJXNV9VU0IwX1NFMCIsCQkgQywgIDI0LCAgICAgNSwJICAzLCAgIDIsICAgMCwJICAzLAkgMCwgIDEpCi1NVVhfQ0ZHKCJWOV9VU0IwX1NQRUVEIiwJIEIsICAxMiwgICAgIDUsCSAgMiwgIDIwLCAgIDAsCSAgMiwJIDAsICAxKQotTVVYX0NGRygiWTEwX1VTQjBfU1VTUCIsCSBCLCAgIDMsICAgICA1LAkgIDIsICAxNywgICAwLAkgIDIsCSAwLCAgMSkKLQotLyogVVNCMiBpbnRlcmZhY2UgKi8KLU1VWF9DRkcoIlc5X1VTQjJfVFhFTiIsCQkgQiwgICA5LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJBQTlfVVNCMl9WUCIsCQkgQiwgICA2LCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJZNV9VU0IyX1JDViIsCQkgQywgIDIxLCAgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCi1NVVhfQ0ZHKCJSOV9VU0IyX1ZNIiwJCSBDLCAgMTgsICAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlY2X1VTQjJfVFhEIiwJCSBDLCAgMjcsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLU1VWF9DRkcoIlc1X1VTQjJfU0UwIiwJCSBDLCAgMjQsICAgICAyLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKLQotLyogMTZYWCBVQVJUICovCi1NVVhfQ0ZHKCJSMTNfMTYxMF9VQVJUMV9UWCIsCSBBLCAgMTIsICAgICA2LAkgIDIsICAxMCwgICAwLAkgIDIsCTEwLCAgMSkKLU1VWF9DRkcoIlYxNF8xNlhYX1VBUlQxX1JYIiwJIDksICAxOCwgICAgIDAsCSAgMiwgICAyLCAgIDAsCSAgMiwJIDIsICAxKQotTVVYX0NGRygiUjE0XzE2MTBfVUFSVDFfQ1RTIiwJIDksICAxNSwgICAgIDAsCSAgMiwgICAxLCAgIDAsCSAgMiwJIDEsICAxKQotTVVYX0NGRygiQUExNV8xNjEwX1VBUlQxX1JUUyIsCSA5LCAgMTIsICAgICAxLAkgIDIsICAgMCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlI5XzE2WFhfVUFSVDJfUlgiLAkgQywgIDE4LCAgICAgMCwgICAzLCAgIDAsICAgMCwgICAgMywgICAgIDAsICAxKQotTVVYX0NGRygiTDE0XzE2WFhfVUFSVDNfUlgiLAkgNiwgICAzLCAgICAgMCwgICAwLCAgMzEsICAgMCwgICAgMCwgICAgMzEsICAxKQotCi0vKiBJMkMgaW50ZXJmYWNlICovCi1NVVhfQ0ZHKCJJMkNfU0NMIiwJCSA3LCAgMjQsICAgICAwLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMCkKLU1VWF9DRkcoIkkyQ19TREEiLAkJIDcsICAyNywgICAgIDAsCSBOQSwgICAwLCAgIDAsCSBOQSwJIDAsICAwKQotCi0vKiBLZXlwYWQgKi8KLU1VWF9DRkcoIkYxOF8xNjEwX0tCQzAiLAkgMywgIDE1LCAgICAgMCwJICAwLCAgIDUsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJEMjBfMTYxMF9LQkMxIiwJIDMsICAxMiwgICAgIDAsCSAgMCwgICA0LCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRDE5XzE2MTBfS0JDMiIsCSAzLCAgIDksICAgICAwLAkgIDAsICAgMywgICAxLAkgIDAsCSAwLCAgMCkKLU1VWF9DRkcoIkUxOF8xNjEwX0tCQzMiLAkgMywgICA2LCAgICAgMCwJICAwLCAgIDIsICAgMSwJICAwLAkgMCwgIDApCi1NVVhfQ0ZHKCJDMjFfMTYxMF9LQkM0IiwJIDMsICAgMywgICAgIDAsCSAgMCwgICAxLCAgIDEsCSAgMCwJIDAsICAwKQotTVVYX0NGRygiRzE4XzE2MTBfS0JSMCIsCSA0LCAgIDAsICAgICAwLAkgIDAsICAgMTAsICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkYxOV8xNjEwX0tCUjEiLAkgMywgICAyNywgICAgMCwJICAwLCAgIDksICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJIMTRfMTYxMF9LQlIyIiwJIDMsICAgMjQsICAgIDAsCSAgMCwgICA4LCAgIDEsCSAgMCwJIDEsICAwKQotTVVYX0NGRygiRTIwXzE2MTBfS0JSMyIsCSAzLCAgIDIxLCAgICAwLAkgIDAsICAgNywgICAxLAkgIDAsCSAxLCAgMCkKLU1VWF9DRkcoIkUxOV8xNjEwX0tCUjQiLAkgMywgICAxOCwgICAgMCwJICAwLCAgIDYsICAgMSwJICAwLAkgMSwgIDApCi1NVVhfQ0ZHKCJOMTlfMTYxMF9LQlI1IiwJIDYsICAxMiwgICAgIDEsCSAgMSwgICAyLCAgIDEsCSAgMSwJIDEsICAwKQotCi0vKiBQb3dlciBtYW5hZ2VtZW50ICovCi1NVVhfQ0ZHKCJUMjBfMTYxMF9MT1dfUFdSIiwJIDcsICAgMTIsICAgIDEsCSAgTkEsICAgMCwgICAwLCAgIE5BLAkgMCwgIDApCi0KLS8qIE1DTEsgU2V0dGluZ3MgKi8KLU1VWF9DRkcoIlY1XzE3MTBfTUNMS19PTiIsCSBCLCAgIDE1LCAgICAwLAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiVjVfMTcxMF9NQ0xLX09GRiIsCSBCLCAgIDE1LCAgICA2LAkgIE5BLCAgIDAsICAgMCwgICBOQSwJIDAsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PTiIsCSBCLCAgIDE4LCAgICAwLAkgIE5BLCAgMjIsICAgMCwJICBOQSwJIDEsICAwKQotTVVYX0NGRygiUjEwXzE2MTBfTUNMS19PRkYiLAkgQiwgICAxOCwgICAgNiwJICAyLCAgIDIyLCAgIDEsCSAgMiwJIDEsICAxKQotCi0vKiBDb21wYWN0Rmxhc2ggY29udHJvbGxlciwgY29uZmxpY3RzIHdpdGggTU1DMSAqLwotTVVYX0NGRygiUDExXzE2MTBfQ0ZfQ0QyIiwJIEEsICAgMjcsICAgIDMsCSAgMiwgICAxNSwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlIxMV8xNjEwX0NGX0lPSVMxNiIsCSBCLCAgICAwLCAgICAzLAkgIDIsICAgMTYsICAgMSwJICAyLAkgMSwgIDEpCi1NVVhfQ0ZHKCJWMTBfMTYxMF9DRl9JUkVRIiwJIEEsICAgMjQsICAgIDMsCSAgMiwgICAxNCwgICAwLAkgIDIsCSAwLCAgMSkKLU1VWF9DRkcoIlcxMF8xNjEwX0NGX1JFU0VUIiwJIEEsICAgMTgsICAgIDMsCSAgMiwgICAxMiwgICAxLAkgIDIsCSAxLCAgMSkKLU1VWF9DRkcoIlcxMV8xNjEwX0NGX0NEMSIsCTEwLCAgIDE1LCAgICAzLAkgIDMsICAgIDgsICAgMSwJICAzLAkgMSwgIDEpCiB9OwogCi0jZW5kaWYJLyogX19NVVhfQ19fICovCitlbnVtIG9tYXAyNHh4X2luZGV4IHsKKwkvKiAyNHh4IEkyQyAqLworCU0xOV8yNFhYX0kyQzFfU0NMLAorCUwxNV8yNFhYX0kyQzFfU0RBLAorCUoxNV8yNFhYX0kyQzJfU0NMLAorCUgxOV8yNFhYX0kyQzJfU0RBLAorCisJLyogMjR4eCBNZW5lbGF1cyBpbnRlcnJ1cHQgKi8KKwlXMTlfMjRYWF9TWVNfTklSUSwKKworCS8qIDI0eHggR1BJTyAqLworCVkyMF8yNFhYX0dQSU82MCwKKwlNMTVfMjRYWF9HUElPOTIsCit9OwogCiAjaWZkZWYJQ09ORklHX09NQVBfTVVYCiAvKiBzZXR1cCBwaW4gbXV4aW5nIGluIExpbnV4ICovCi1leHRlcm4gaW50IG9tYXBfY2ZnX3JlZyhyZWdfY2ZnX3QgcmVnX2NmZyk7CitleHRlcm4gaW50IG9tYXAxX211eF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMl9tdXhfaW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgb21hcF9tdXhfcmVnaXN0ZXIoc3RydWN0IHBpbl9jb25maWcgKiBwaW5zLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIGludCBvbWFwX2NmZ19yZWcodW5zaWduZWQgbG9uZyByZWdfY2ZnKTsKICNlbHNlCiAvKiBib290IGxvYWRlciBkb2VzIGl0IGFsbCAobm8gd2FybmluZ3MgZnJvbSBDT05GSUdfT01BUF9NVVhfV0FSTklOR1MpICovCi1zdGF0aWMgaW5saW5lIGludCBvbWFwX2NmZ19yZWcocmVnX2NmZ190IHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAxX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXAyX211eF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfY2ZnX3JlZyh1bnNpZ25lZCBsb25nIHJlZ19jZmcpIHsgcmV0dXJuIDA7IH0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDE1MTAuaAppbmRleCBmMDg2YTM5Li5jNTc1ZDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAxNTEwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMTUxMC5oCkBAIC0yNSw4ICsyNSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDE1MTBfSAotI2RlZmluZSBfX0FTTV9BUkNIX09NQVAxNTEwX0gKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDE1WFhfSAogCiAvKgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQsNSArNDQsNSBAQAogI2RlZmluZSBPTUFQMTUxMF9EU1BSRUdfU0laRQlTWl8xMjhLCiAjZGVmaW5lIE9NQVAxNTEwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCiAKLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQMTUxMF9IICovCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUDE1WFhfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXAyNHh4LmgKaW5kZXggYTkxMDU0Ni4uNmU1OTgwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwMjR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcDI0eHguaApAQCAtMSwxNSArMSwyNCBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyNFhYX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMjRYWF9ICiAKLSNkZWZpbmUgT01BUDI0WFhfTDRfSU9fQkFTRQkweDQ4MDAwMDAwCisvKgorICogUGxlYXNlIHBsYWNlIG9ubHkgYmFzZSBkZWZpbmVzIGhlcmUgYW5kIHB1dCB0aGUgcmVzdCBpbiBkZXZpY2UKKyAqIHNwZWNpZmljIGhlYWRlcnMuIE5vdGUgYWxzbyB0aGF0IHNvbWUgb2YgdGhlc2UgZGVmaW5lcyBhcmUgbmVlZGVkCisgKiBmb3Igb21hcDEgdG8gY29tcGlsZSB3aXRob3V0IGFkZGluZyBpZmRlZnMuCisgKi8KKworI2RlZmluZSBMNF8yNFhYX0JBU0UJCTB4NDgwMDAwMDAKKyNkZWZpbmUgTDNfMjRYWF9CQVNFCQkweDY4MDAwMDAwCiAKIC8qIGludGVycnVwdCBjb250cm9sbGVyICovCi0jZGVmaW5lIE9NQVAyNFhYX0lDX0JBU0UJKE9NQVAyNFhYX0w0X0lPX0JBU0UgKyAweGZlMDAwKQorI2RlZmluZSBPTUFQMjRYWF9JQ19CQVNFCShMNF8yNFhYX0JBU0UgKyAweGZlMDAwKQogI2RlZmluZSBWQV9JQ19CQVNFCQlJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCi0KICNkZWZpbmUgT01BUDI0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCi0KICNkZWZpbmUgSVJRX1NJUl9JUlEJCTB4MDA0MAogCisjZGVmaW5lIE9NQVAyNFhYXzMyS1NZTkNUX0JBU0UJKEw0XzI0WFhfQkFTRSArIDB4NDAwMCkKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9CQVNFCShMNF8yNFhYX0JBU0UgKyAweDgwMDApCisjZGVmaW5lIE9NQVAyNFhYX1NEUkNfQkFTRQkoTDNfMjRYWF9CQVNFICsgMHg5MDAwKQorCiAjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMjRYWF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvb21hcGZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiYTI2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL29tYXBmYi5oCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogRmlsZTogaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9vbWFwZmIuaAorICoKKyAqIEZyYW1lYnVmZmVyIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19PTUFQRkJfSAorI2RlZmluZSBfX09NQVBGQl9ICisKKy8qIElPQ1RMIGNvbW1hbmRzLiAqLworCisjZGVmaW5lIE9NQVBfSU9XKG51bSwgZHR5cGUpCV9JT1coJ08nLCBudW0sIGR0eXBlKQorI2RlZmluZSBPTUFQX0lPUihudW0sIGR0eXBlKQlfSU9SKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JT1dSKG51bSwgZHR5cGUpCV9JT1dSKCdPJywgbnVtLCBkdHlwZSkKKyNkZWZpbmUgT01BUF9JTyhudW0pCQlfSU8oJ08nLCBudW0pCisKKyNkZWZpbmUgT01BUEZCX01JUlJPUgkJT01BUF9JT1coMzEsIGludCkKKyNkZWZpbmUgT01BUEZCX1NZTkNfR0ZYCQlPTUFQX0lPKDM3KQorI2RlZmluZSBPTUFQRkJfVlNZTkMJCU9NQVBfSU8oMzgpCisjZGVmaW5lIE9NQVBGQl9TRVRfVVBEQVRFX01PREUJT01BUF9JT1coNDAsIGVudW0gb21hcGZiX3VwZGF0ZV9tb2RlKQorI2RlZmluZSBPTUFQRkJfR0VUX0NBUFMJCU9NQVBfSU9SKDQyLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBPTUFQRkJfR0VUX1VQREFURV9NT0RFCU9NQVBfSU9XKDQzLCBlbnVtIG9tYXBmYl91cGRhdGVfbW9kZSkKKyNkZWZpbmUgT01BUEZCX0xDRF9URVNUCQlPTUFQX0lPVyg0NSwgaW50KQorI2RlZmluZSBPTUFQRkJfQ1RSTF9URVNUCU9NQVBfSU9XKDQ2LCBpbnQpCisjZGVmaW5lIE9NQVBGQl9VUERBVEVfV0lORE9XCU9NQVBfSU9XKDQ3LCBzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cpCisjZGVmaW5lIE9NQVBGQl9TRVRVUF9QTEFORQlPTUFQX0lPVyg0OCwgc3RydWN0IG9tYXBmYl9zZXR1cF9wbGFuZSkKKyNkZWZpbmUgT01BUEZCX0VOQUJMRV9QTEFORQlPTUFQX0lPVyg0OSwgc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUpCisjZGVmaW5lIE9NQVBGQl9TRVRfQ09MT1JfS0VZCU9NQVBfSU9XKDUwLCBzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSkKKworI2RlZmluZSBPTUFQRkJfQ0FQU19HRU5FUklDX01BU0sJMHgwMDAwMGZmZgorI2RlZmluZSBPTUFQRkJfQ0FQU19MQ0RDX01BU0sJCTB4MDBmZmYwMDAKKyNkZWZpbmUgT01BUEZCX0NBUFNfUEFORUxfTUFTSwkJMHhmZjAwMDAwMAorCisjZGVmaW5lIE9NQVBGQl9DQVBTX01BTlVBTF9VUERBVEUJMHgwMDAwMTAwMAorI2RlZmluZSBPTUFQRkJfQ0FQU19TRVRfQkFDS0xJR0hUCTB4MDEwMDAwMDAKKworLyogVmFsdWVzIGZyb20gRFNQIG11c3QgbWFwIHRvIGxvd2VyIDE2LWJpdHMgKi8KKyNkZWZpbmUgT01BUEZCX0ZPUk1BVF9NQVNLICAgICAgICAgMHgwMGZmCisjZGVmaW5lIE9NQVBGQl9GT1JNQVRfRkxBR19ET1VCTEUgIDB4MDEwMAorCitlbnVtIG9tYXBmYl9jb2xvcl9mb3JtYXQgeworCU9NQVBGQl9DT0xPUl9SR0I1NjUgPSAwLAorCU9NQVBGQl9DT0xPUl9ZVVY0MjIsCisJT01BUEZCX0NPTE9SX1lVVjQyMCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF84QlBQLAorCU9NQVBGQl9DT0xPUl9DTFVUXzRCUFAsCisJT01BUEZCX0NPTE9SX0NMVVRfMkJQUCwKKwlPTUFQRkJfQ09MT1JfQ0xVVF8xQlBQLAorfTsKKworc3RydWN0IG9tYXBmYl91cGRhdGVfd2luZG93IHsKKwl1MzIgeCwgeTsKKwl1MzIgd2lkdGgsIGhlaWdodDsKKwl1MzIgZm9ybWF0OworfTsKKworZW51bSBvbWFwZmJfcGxhbmUgeworCU9NQVBGQl9QTEFORV9HRlggPSAwLAorCU9NQVBGQl9QTEFORV9WSUQxLAorCU9NQVBGQl9QTEFORV9WSUQyLAorfTsKKworZW51bSBvbWFwZmJfY2hhbm5lbF9vdXQgeworCU9NQVBGQl9DSEFOTkVMX09VVF9MQ0QgPSAwLAorCU9NQVBGQl9DSEFOTkVMX09VVF9ESUdJVCwKK307CisKK3N0cnVjdCBvbWFwZmJfc2V0dXBfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgY2hhbm5lbF9vdXQ7CisJdTMyIG9mZnNldDsKKwl1MzIgcG9zX3gsIHBvc195OworCXUzMiB3aWR0aCwgaGVpZ2h0OworCXUzMiBjb2xvcl9tb2RlOworfTsKKworc3RydWN0IG9tYXBmYl9lbmFibGVfcGxhbmUgeworCXU4ICBwbGFuZTsKKwl1OCAgZW5hYmxlOworfTsKKworZW51bSBvbWFwZmJfY29sb3Jfa2V5X3R5cGUgeworCU9NQVBGQl9DT0xPUl9LRVlfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9DT0xPUl9LRVlfR0ZYX0RTVCwKKwlPTUFQRkJfQ09MT1JfS0VZX1ZJRF9TUkMsCit9OworCitzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSB7CisJdTggIGNoYW5uZWxfb3V0OworCXUzMiBiYWNrZ3JvdW5kOworCXUzMiB0cmFuc19rZXk7CisJdTggIGtleV90eXBlOworfTsKKworZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgeworCU9NQVBGQl9VUERBVEVfRElTQUJMRUQgPSAwLAorCU9NQVBGQl9BVVRPX1VQREFURSwKKwlPTUFQRkJfTUFOVUFMX1VQREFURQorfTsKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfVlNZTkMgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfSFNZTkMgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE9NQVBfTENEQ19JTlZfUElYX0NMT0NLICAgICAgICAgMHgwMDA0CisjZGVmaW5lIE9NQVBfTENEQ19JTlZfT1VUUFVUX0VOICAgICAgICAgMHgwMDA4CisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX1JJU0lOR19FREdFICAgICAgMHgwMDEwCisjZGVmaW5lIE9NQVBfTENEQ19IU1ZTX09QUE9TSVRFICAgICAgICAgMHgwMDIwCisKKyNkZWZpbmUgT01BUF9MQ0RDX1NJR05BTF9NQVNLCQkweDAwM2YKKworI2RlZmluZSBPTUFQX0xDRENfUEFORUxfVEZUCQkweDAxMDAKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTEKKyNlbHNlCisjZGVmaW5lIE9NQVBGQl9QTEFORV9OVU0JCTMKKyNlbmRpZgorCitzdHJ1Y3Qgb21hcGZiX2RldmljZTsKKworc3RydWN0IGxjZF9wYW5lbCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCWNvbmZpZzsJCS8qIFRGVC9TVE4sIHNpZ25hbCBpbnZlcnNpb24gKi8KKwlpbnQJCWJwcDsJCS8qIFBpeGVsIGZvcm1hdCBpbiBmYiBtZW0gKi8KKwlpbnQJCWRhdGFfbGluZXM7CS8qIExpbmVzIG9uIExDRCBIVyBpbnRlcmZhY2UgKi8KKworCWludAkJeF9yZXMsIHlfcmVzOworCWludAkJcGl4ZWxfY2xvY2s7CS8qIEluIGtIeiAqLworCWludAkJaHN3OwkJLyogSG9yaXpvbnRhbCBzeW5jaHJvbml6YXRpb24KKwkJCQkJICAgcHVsc2Ugd2lkdGggKi8KKwlpbnQJCWhmcDsJCS8qIEhvcml6b250YWwgZnJvbnQgcG9yY2ggKi8KKwlpbnQJCWhicDsJCS8qIEhvcml6b250YWwgYmFjayBwb3JjaCAqLworCWludAkJdnN3OwkJLyogVmVydGljYWwgc3luY2hyb25pemF0aW9uCisJCQkJCSAgIHB1bHNlIHdpZHRoICovCisJaW50CQl2ZnA7CQkvKiBWZXJ0aWNhbCBmcm9udCBwb3JjaCAqLworCWludAkJdmJwOwkJLyogVmVydGljYWwgYmFjayBwb3JjaCAqLworCWludAkJYWNiOwkJLyogYWMtYmlhcyBwaW4gZnJlcXVlbmN5ICovCisJaW50CQlwY2Q7CQkvKiBwaXhlbCBjbG9jayBkaXZpZGVyLgorCQkJCQkgICBPYnNvbGV0ZSB1c2UgcGl4ZWxfY2xvY2sgaW5zdGVhZCAqLworCisJaW50CQkoKmluaXQpCQkoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2KTsKKwl2b2lkCQkoKmNsZWFudXApCSh2b2lkKTsKKwlpbnQJCSgqZW5hYmxlKQkodm9pZCk7CisJdm9pZAkJKCpkaXNhYmxlKQkodm9pZCk7CisJdW5zaWduZWQgbG9uZwkoKmdldF9jYXBzKQkodm9pZCk7CisJaW50CQkoKnNldF9ia2xpZ2h0X2xldmVsKSh1bnNpZ25lZCBpbnQgbGV2ZWwpOworCXVuc2lnbmVkIGludAkoKmdldF9ia2xpZ2h0X2xldmVsKSh2b2lkKTsKKwl1bnNpZ25lZCBpbnQJKCpnZXRfYmtsaWdodF9tYXgpICAodm9pZCk7CisJaW50CQkoKnJ1bl90ZXN0KQkoaW50IHRlc3RfbnVtKTsKK307CisKK3N0cnVjdCBvbWFwZmJfZGV2aWNlOworCitzdHJ1Y3QgZXh0aWZfdGltaW5ncyB7CisJaW50IGNzX29uX3RpbWU7CisJaW50IGNzX29mZl90aW1lOworCWludCB3ZV9vbl90aW1lOworCWludCB3ZV9vZmZfdGltZTsKKwlpbnQgcmVfb25fdGltZTsKKwlpbnQgcmVfb2ZmX3RpbWU7CisJaW50IHdlX2N5Y2xlX3RpbWU7CisJaW50IHJlX2N5Y2xlX3RpbWU7CisJaW50IGNzX3B1bHNlX3dpZHRoOworCWludCBhY2Nlc3NfdGltZTsKK307CisKK3N0cnVjdCBsY2RfY3RybF9leHRpZiB7CisJaW50ICAoKmluaXQpCQkodm9pZCk7CisJdm9pZCAoKmNsZWFudXApCQkodm9pZCk7CisJdm9pZCAoKnNldF90aW1pbmdzKQkoY29uc3Qgc3RydWN0IGV4dGlmX3RpbWluZ3MgKnRpbWluZ3MpOworCXZvaWQgKCp3cml0ZV9jb21tYW5kKQkodTMyIGNtZCk7CisJdTMyICAoKnJlYWRfZGF0YSkJKHZvaWQpOworCXZvaWQgKCp3cml0ZV9kYXRhKQkodTMyIGRhdGEpOworCXZvaWQgKCp0cmFuc2Zlcl9hcmVhKQkoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorCQkJCSB2b2lkIChjYWxsYmFjaykodm9pZCAqIGRhdGEpLCB2b2lkICpkYXRhKTsKK307CisKK3N0cnVjdCBsY2RfY3RybCB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl2b2lkCQkqZGF0YTsKKworCWludAkJKCppbml0KQkJICAoc3RydWN0IG9tYXBmYl9kZXZpY2UgKmZiZGV2LAorCQkJCQkgICBpbnQgZXh0X21vZGUsIGludCByZXFfdnJhbV9zaXplKTsKKwl2b2lkCQkoKmNsZWFudXApCSAgKHZvaWQpOworCXZvaWQJCSgqZ2V0X3ZyYW1fbGF5b3V0KSh1bnNpZ25lZCBsb25nICpzaXplLAorCQkJCQkgICB2b2lkICoqdmlydF9iYXNlLAorCQkJCQkgICBkbWFfYWRkcl90ICpwaHlzX2Jhc2UpOworCXVuc2lnbmVkIGxvbmcJKCpnZXRfY2FwcykJICAodm9pZCk7CisJaW50CQkoKnNldF91cGRhdGVfbW9kZSkoZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgbW9kZSk7CisJZW51bSBvbWFwZmJfdXBkYXRlX21vZGUgKCpnZXRfdXBkYXRlX21vZGUpKHZvaWQpOworCWludAkJKCpzZXR1cF9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgY2hhbm5lbF9vdXQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkgICBpbnQgc2NyZWVuX3dpZHRoLAorCQkJCQkgICBpbnQgcG9zX3gsIGludCBwb3NfeSwgaW50IHdpZHRoLAorCQkJCQkgICBpbnQgaGVpZ2h0LCBpbnQgY29sb3JfbW9kZSk7CisJaW50CQkoKmVuYWJsZV9wbGFuZSkJICAoaW50IHBsYW5lLCBpbnQgZW5hYmxlKTsKKwlpbnQJCSgqdXBkYXRlX3dpbmRvdykgIChzdHJ1Y3Qgb21hcGZiX3VwZGF0ZV93aW5kb3cgKndpbiwKKwkJCQkJICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLAorCQkJCQkgICB2b2lkICpjYWxsYmFja19kYXRhKTsKKwl2b2lkCQkoKnN5bmMpCQkgICh2b2lkKTsKKwl2b2lkCQkoKnN1c3BlbmQpCSAgKHZvaWQpOworCXZvaWQJCSgqcmVzdW1lKQkgICh2b2lkKTsKKwlpbnQJCSgqcnVuX3Rlc3QpCSAgKGludCB0ZXN0X251bSk7CisJaW50CQkoKnNldGNvbHJlZykJICAodV9pbnQgcmVnbm8sIHUxNiByZWQsIHUxNiBncmVlbiwKKwkJCQkJICAgdTE2IGJsdWUsIHUxNiB0cmFuc3AsCisJCQkJCSAgIGludCB1cGRhdGVfaHdfbWVtKTsKKwlpbnQJCSgqc2V0X2NvbG9yX2tleSkgIChzdHJ1Y3Qgb21hcGZiX2NvbG9yX2tleSAqY2spOworCit9OworCitlbnVtIG9tYXBmYl9zdGF0ZSB7CisJT01BUEZCX0RJU0FCTEVECT0gMCwKKwlPTUFQRkJfU1VTUEVOREVEPSA5OSwKKwlPTUFQRkJfQUNUSVZFCT0gMTAwCit9OworCitzdHJ1Y3Qgb21hcGZiX2RldmljZSB7CisJaW50CQkJc3RhdGU7CisJaW50ICAgICAgICAgICAgICAgICAgICAgZXh0X2xjZGM7ICAgICAgICAgICAgICAgLyogVXNpbmcgZXh0ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCXJxdWV1ZV9zZW1hOworCisJdm9pZAkJCSp2cmFtX3ZpcnRfYmFzZTsKKwlkbWFfYWRkcl90CQl2cmFtX3BoeXNfYmFzZTsKKwl1bnNpZ25lZCBsb25nCQl2cmFtX3NpemU7CisKKwlpbnQJCQljb2xvcl9tb2RlOworCWludAkJCXBhbGV0dGVfc2l6ZTsKKwlpbnQJCQltaXJyb3I7CisJdTMyCQkJcHNldWRvX3BhbGV0dGVbMTddOworCisJc3RydWN0IGxjZF9wYW5lbAkqcGFuZWw7CQkJLyogTENEIHBhbmVsICovCisJc3RydWN0IGxjZF9jdHJsICAgICAgICAgKmN0cmw7CQkJLyogTENEIGNvbnRyb2xsZXIgKi8KKwlzdHJ1Y3QgbGNkX2N0cmwJCSppbnRfY3RybDsJCS8qIGludGVybmFsIExDRCBjdHJsICovCisJc3RydWN0IGxjZF9jdHJsX2V4dGlmCSpleHRfaWY7CQkvKiBMQ0QgY3RybCBleHRlcm5hbAorCQkJCQkJCSAgIGludGVyZmFjZSAqLworCXN0cnVjdCBmYl9pbmZvCQkqZmJfaW5mbzsKKworCXN0cnVjdCBkZXZpY2UJCSpkZXY7Cit9OworCitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBoM19wYW5lbDsKK2V4dGVybiBzdHJ1Y3QgbGNkX3BhbmVsIGgyX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgcDJfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBvc2tfcGFuZWw7CitleHRlcm4gc3RydWN0IGxjZF9wYW5lbCBpbm5vdmF0b3IxNjEwX3BhbmVsOworZXh0ZXJuIHN0cnVjdCBsY2RfcGFuZWwgaW5ub3ZhdG9yMTUxMF9wYW5lbDsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCitleHRlcm4gc3RydWN0IGxjZF9jdHJsIG9tYXAxX2xjZF9jdHJsOworI2Vsc2UKK2V4dGVybiBzdHJ1Y3QgbGNkX2N0cmwgb21hcDJfZGlzcF9jdHJsOworI2VuZGlmCisKK2V4dGVybiB2b2lkIG9tYXBmYl93cml0ZV9maXJzdF9waXhlbChzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYsIHUxNiBwaXh2YWwpOworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX19PTUFQRkJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wbS5oCmluZGV4IGZiZDc0MmQuLjdjNzkwNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3BtLmgKQEAgLTk4LDcgKzk4LDE0IEBACiAjZGVmaW5lIE9NQVAxNjEwX0lETEVDVDMJCTB4ZmZmZWNlMjQKICNkZWZpbmUgT01BUDE2MTBfSURMRV9MT09QX1JFUVVFU1QJMHgwNDAwCiAKLSNpZiAgICAgIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1MTApICYmIFwKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QxX1NMRUVQX1ZBTAkweDE2YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QyX1NMRUVQX1ZBTAkweDA5YzcKKyNkZWZpbmUgT01BUDczMF9JRExFQ1QzX1ZBTAkJMHgzZgorI2RlZmluZSBPTUFQNzMwX0lETEVDVDMJCTB4ZmZmZWNlMjQKKyNkZWZpbmUgT01BUDczMF9JRExFX0xPT1BfUkVRVUVTVAkweDBDMDAKKworI2lmICAgICAhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpICYmIFwKIAkhZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgJiYgXAogCSFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQogI2Vycm9yICJQb3dlciBtYW5hZ2VtZW50IGZvciB0aGlzIHByb2Nlc3NvciBub3QgaW1wbGVtZW50ZWQgeWV0IgpAQCAtMTA3LDggKzExNCwxMCBAQAogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CitleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogCkBAIC0xMTgsNiArMTI3LDggQEAKICNkZWZpbmUgb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKHgpCXt9CiAjZW5kaWYJLyogQ09ORklHX09NQVBfU0VSSUFMX1dBS0UgKi8KIAorZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6OworZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kX3N6OwogZXh0ZXJuIHVuc2lnbmVkIGludCBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zejsKIGV4dGVybiB1bnNpZ25lZCBpbnQgb21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmRfc3o7CiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAxNjEwX2NwdV9zdXNwZW5kX3N6OwpAQCAtMTMxLDYgKzE0MiwxMCBAQAogI2RlZmluZSBVTFBEX1JFU1RPUkUoeCkgb21hcF93cml0ZXcoKHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XSksICh4KSkKICNkZWZpbmUgVUxQRF9TSE9XKHgpIHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfIyN4XQogCisjZGVmaW5lIE1QVUk3MzBfU0FWRSh4KSBtcHVpNzMwX3NsZWVwX3NhdmVbTVBVSTczMF9TTEVFUF9TQVZFXyMjeF0gPSBvbWFwX3JlYWRsKHgpCisjZGVmaW5lIE1QVUk3MzBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdKSwgKHgpKQorI2RlZmluZSBNUFVJNzMwX1NIT1coeCkgbXB1aTczMF9zbGVlcF9zYXZlW01QVUk3MzBfU0xFRVBfU0FWRV8jI3hdCisKICNkZWZpbmUgTVBVSTE1MTBfU0FWRSh4KSBtcHVpMTUxMF9zbGVlcF9zYXZlW01QVUkxNTEwX1NMRUVQX1NBVkVfIyN4XSA9IG9tYXBfcmVhZGwoeCkKICNkZWZpbmUgTVBVSTE1MTBfUkVTVE9SRSh4KSBvbWFwX3dyaXRlbCgobXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0pLCAoeCkpCiAjZGVmaW5lIE1QVUkxNTEwX1NIT1coeCkgbXB1aTE1MTBfc2xlZXBfc2F2ZVtNUFVJMTUxMF9TTEVFUF9TQVZFXyMjeF0KQEAgLTE4OCwxMyArMjAzLDM0IEBACiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9FTUlGU19DT05GSUcsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCiAJTVBVSTE1MTBfU0xFRVBfU0FWRV9PTUFQX0lIMl9NSVIsCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTUxMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKQogCU1QVUkxNTEwX1NMRUVQX1NBVkVfU0laRQogI2Vsc2UKIAlNUFVJMTUxMF9TTEVFUF9TQVZFX1NJWkUgPSAwCiAjZW5kaWYKIH07CiAKK2VudW0gbXB1aTczMF9zYXZlX3N0YXRlIHsKKwlNUFVJNzMwX1NMRUVQX1NBVkVfU1RBUlQgPSAwLAorCS8qCisJICogTVBVSSByZWdpc3RlcnMgMzIgYml0cworCSAqLworCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0NUUkwsCisJTVBVSTczMF9TTEVFUF9TQVZFX01QVUlfRFNQX0JPT1RfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9BUElfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9NUFVJX0RTUF9TVEFUVVMsCisJTVBVSTczMF9TTEVFUF9TQVZFX0VNSUZGX1NEUkFNX0NPTkZJRywKKwlNUFVJNzMwX1NMRUVQX1NBVkVfRU1JRlNfQ09ORklHLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMV9NSVIsCisJTVBVSTczMF9TTEVFUF9TQVZFX09NQVBfSUgyXzBfTUlSLAorCU1QVUk3MzBfU0xFRVBfU0FWRV9PTUFQX0lIMl8xX01JUiwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUKKyNlbHNlCisJTVBVSTczMF9TTEVFUF9TQVZFX1NJWkUgPSAwCisjZW5kaWYKK307CisKIGVudW0gbXB1aTE2MTBfc2F2ZV9zdGF0ZSB7CiAJTVBVSTE2MTBfU0xFRVBfU0FWRV9TVEFSVCA9IDAsCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9wcmNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I0OGE1YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvcHJjbS5oCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogcHJjbS5oIC0gQWNjZXNzIGRlZmluYXRpb25zIGZvciB1c2UgaW4gT01BUDI0WFggY2xvY2sgYW5kIHBvd2VyIG1hbmFnZW1lbnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0RQTV9QUkNNX0gKKworLyogU0VUX1BFUkZPUk1BTkNFX0xFVkVMIFBBUkFNRVRFUlMgKi8KKyNkZWZpbmUgUFJDTV9IQUxGX1NQRUVEIDEKKyNkZWZpbmUgUFJDTV9GVUxMX1NQRUVEIDIKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNkZWZpbmUgUFJDTV9SRUczMihvZmZzZXQpCV9fUkVHMzIoT01BUDI0WFhfUFJDTV9CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUFJDTV9SRVZJU0lPTgkJUFJDTV9SRUczMigweDAwMCkKKyNkZWZpbmUgUFJDTV9TWVNDT05GSUcJCVBSQ01fUkVHMzIoMHgwMTApCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX01QVQlQUkNNX1JFRzMyKDB4MDE4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9NUFUJUFJDTV9SRUczMigweDAxQykKKyNkZWZpbmUgUFJDTV9WT0xUQ1RSTAkJUFJDTV9SRUczMigweDA1MCkKKyNkZWZpbmUgUFJDTV9WT0xUU1QJCVBSQ01fUkVHMzIoMHgwNTQpCisjZGVmaW5lIFBSQ01fQ0xLU1JDX0NUUkwJUFJDTV9SRUczMigweDA2MCkKKyNkZWZpbmUgUFJDTV9DTEtPVVRfQ1RSTAlQUkNNX1JFRzMyKDB4MDcwKQorI2RlZmluZSBQUkNNX0NMS0VNVUxfQ1RSTAlQUkNNX1JFRzMyKDB4MDc4KQorI2RlZmluZSBQUkNNX0NMS0NGR19DVFJMCVBSQ01fUkVHMzIoMHgwODApCisjZGVmaW5lIFBSQ01fQ0xLQ0ZHX1NUQVRVUwlQUkNNX1JFRzMyKDB4MDg0KQorI2RlZmluZSBQUkNNX1ZPTFRTRVRVUAkJUFJDTV9SRUczMigweDA5MCkKKyNkZWZpbmUgUFJDTV9DTEtTU0VUVVAJCVBSQ01fUkVHMzIoMHgwOTQpCisjZGVmaW5lIFBSQ01fUE9MQ1RSTAkJUFJDTV9SRUczMigweDA5OCkKKworLyogR0VORVJBTCBQVVJQT1NFICovCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEJUFJDTV9SRUczMigweDBCMCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFMglQUkNNX1JFRzMyKDB4MEI0KQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0UzCVBSQ01fUkVHMzIoMHgwQjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTQJUFJDTV9SRUczMigweDBCQykKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFNQlQUkNNX1JFRzMyKDB4MEMwKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U2CVBSQ01fUkVHMzIoMHgwQzQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTcJUFJDTV9SRUczMigweDBDOCkKKyNkZWZpbmUgR0VORVJBTF9QVVJQT1NFOAlQUkNNX1JFRzMyKDB4MENDKQorI2RlZmluZSBHRU5FUkFMX1BVUlBPU0U5CVBSQ01fUkVHMzIoMHgwRDApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEwCVBSQ01fUkVHMzIoMHgwRDQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTExCVBSQ01fUkVHMzIoMHgwRDgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEyCVBSQ01fUkVHMzIoMHgwREMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTEzCVBSQ01fUkVHMzIoMHgwRTApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE0CVBSQ01fUkVHMzIoMHgwRTQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE1CVBSQ01fUkVHMzIoMHgwRTgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE2CVBSQ01fUkVHMzIoMHgwRUMpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE3CVBSQ01fUkVHMzIoMHgwRjApCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE4CVBSQ01fUkVHMzIoMHgwRjQpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTE5CVBSQ01fUkVHMzIoMHgwRjgpCisjZGVmaW5lIEdFTkVSQUxfUFVSUE9TRTIwCVBSQ01fUkVHMzIoMHgwRkMpCisKKy8qIE1QVSAqLworI2RlZmluZSBDTV9DTEtTRUxfTVBVCQlQUkNNX1JFRzMyKDB4MTQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfTVBVCVBSQ01fUkVHMzIoMHgxNDgpCisjZGVmaW5lIFJNX1JTVFNUX01QVQkJUFJDTV9SRUczMigweDE1OCkKKyNkZWZpbmUgUE1fV0tERVBfTVBVCQlQUkNNX1JFRzMyKDB4MUM4KQorI2RlZmluZSBQTV9FVkdFTkNUUkxfTVBVCVBSQ01fUkVHMzIoMHgxRDQpCisjZGVmaW5lIFBNX0VWRUdFTk9OVElNX01QVQlQUkNNX1JFRzMyKDB4MUQ4KQorI2RlZmluZSBQTV9FVkVHRU5PRkZUSU1fTVBVCVBSQ01fUkVHMzIoMHgxREMpCisjZGVmaW5lIFBNX1BXU1RDVFJMX01QVQkJUFJDTV9SRUczMigweDFFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX01QVQkJUFJDTV9SRUczMigweDFFNCkKKworLyogQ09SRSAqLworI2RlZmluZSBDTV9GQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMDApCisjZGVmaW5lIENNX0ZDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIwNCkKKyNkZWZpbmUgQ01fRkNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjA4KQorI2RlZmluZSBDTV9JQ0xLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyMTApCisjZGVmaW5lIENNX0lDTEtFTjJfQ09SRQkJUFJDTV9SRUczMigweDIxNCkKKyNkZWZpbmUgQ01fSUNMS0VOM19DT1JFCQlQUkNNX1JFRzMyKDB4MjE4KQorI2RlZmluZSBDTV9JQ0xLRU40X0NPUkUJCVBSQ01fUkVHMzIoMHgyMUMpCisjZGVmaW5lIENNX0lETEVTVDFfQ09SRQkJUFJDTV9SRUczMigweDIyMCkKKyNkZWZpbmUgQ01fSURMRVNUMl9DT1JFCQlQUkNNX1JFRzMyKDB4MjI0KQorI2RlZmluZSBDTV9JRExFU1QzX0NPUkUJCVBSQ01fUkVHMzIoMHgyMjgpCisjZGVmaW5lIENNX0lETEVTVDRfQ09SRQkJUFJDTV9SRUczMigweDIyQykKKyNkZWZpbmUgQ01fQVVUT0lETEUxX0NPUkUJUFJDTV9SRUczMigweDIzMCkKKyNkZWZpbmUgQ01fQVVUT0lETEUyX0NPUkUJUFJDTV9SRUczMigweDIzNCkKKyNkZWZpbmUgQ01fQVVUT0lETEUzX0NPUkUJUFJDTV9SRUczMigweDIzOCkKKyNkZWZpbmUgQ01fQVVUT0lETEU0X0NPUkUJUFJDTV9SRUczMigweDIzQykKKyNkZWZpbmUgQ01fQ0xLU0VMMV9DT1JFCQlQUkNNX1JFRzMyKDB4MjQwKQorI2RlZmluZSBDTV9DTEtTRUwyX0NPUkUJCVBSQ01fUkVHMzIoMHgyNDQpCisjZGVmaW5lIENNX0NMS1NUQ1RSTF9DT1JFCVBSQ01fUkVHMzIoMHgyNDgpCisjZGVmaW5lIFBNX1dLRU4xX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTApCisjZGVmaW5lIFBNX1dLRU4yX0NPUkUJCVBSQ01fUkVHMzIoMHgyQTQpCisjZGVmaW5lIFBNX1dLU1QxX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjApCisjZGVmaW5lIFBNX1dLU1QyX0NPUkUJCVBSQ01fUkVHMzIoMHgyQjQpCisjZGVmaW5lIFBNX1dLREVQX0NPUkUJCVBSQ01fUkVHMzIoMHgyQzgpCisjZGVmaW5lIFBNX1BXU1RDVFJMX0NPUkUJUFJDTV9SRUczMigweDJFMCkKKyNkZWZpbmUgUE1fUFdTVFNUX0NPUkUJCVBSQ01fUkVHMzIoMHgyRTQpCisKKy8qIEdGWCAqLworI2RlZmluZSBDTV9GQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fR0ZYCQlQUkNNX1JFRzMyKDB4MzEwKQorI2RlZmluZSBDTV9JRExFU1RfR0ZYCQlQUkNNX1JFRzMyKDB4MzIwKQorI2RlZmluZSBDTV9DTEtTRUxfR0ZYCQlQUkNNX1JFRzMyKDB4MzQwKQorI2RlZmluZSBDTV9DTEtTVENUUkxfR0ZYCVBSQ01fUkVHMzIoMHgzNDgpCisjZGVmaW5lIFJNX1JTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4MzUwKQorI2RlZmluZSBSTV9SU1RTVF9HRlgJCVBSQ01fUkVHMzIoMHgzNTgpCisjZGVmaW5lIFBNX1dLREVQX0dGWAkJUFJDTV9SRUczMigweDNDOCkKKyNkZWZpbmUgUE1fUFdTVENUUkxfR0ZYCQlQUkNNX1JFRzMyKDB4M0UwKQorI2RlZmluZSBQTV9QV1NUU1RfR0ZYCQlQUkNNX1JFRzMyKDB4M0U0KQorCisvKiBXQUtFLVVQICovCisjZGVmaW5lIENNX0ZDTEtFTl9XS1VQCQlQUkNNX1JFRzMyKDB4NDAwKQorI2RlZmluZSBDTV9JQ0xLRU5fV0tVUAkJUFJDTV9SRUczMigweDQxMCkKKyNkZWZpbmUgQ01fSURMRVNUX1dLVVAJCVBSQ01fUkVHMzIoMHg0MjApCisjZGVmaW5lIENNX0FVVE9JRExFX1dLVVAJUFJDTV9SRUczMigweDQzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX1dLVVAJCVBSQ01fUkVHMzIoMHg0NDApCisjZGVmaW5lIFJNX1JTVENUUkxfV0tVUAkJUFJDTV9SRUczMigweDQ1MCkKKyNkZWZpbmUgUk1fUlNUVElNRV9XS1VQCQlQUkNNX1JFRzMyKDB4NDU0KQorI2RlZmluZSBSTV9SU1RTVF9XS1VQCQlQUkNNX1JFRzMyKDB4NDU4KQorI2RlZmluZSBQTV9XS0VOX1dLVVAJCVBSQ01fUkVHMzIoMHg0QTApCisjZGVmaW5lIFBNX1dLU1RfV0tVUAkJUFJDTV9SRUczMigweDRCMCkKKworLyogQ0xPQ0tTICovCisjZGVmaW5lIENNX0NMS0VOX1BMTAkJUFJDTV9SRUczMigweDUwMCkKKyNkZWZpbmUgQ01fSURMRVNUX0NLR0VOCQlQUkNNX1JFRzMyKDB4NTIwKQorI2RlZmluZSBDTV9BVVRPSURMRV9QTEwJCVBSQ01fUkVHMzIoMHg1MzApCisjZGVmaW5lIENNX0NMS1NFTDFfUExMCQlQUkNNX1JFRzMyKDB4NTQwKQorI2RlZmluZSBDTV9DTEtTRUwyX1BMTAkJUFJDTV9SRUczMigweDU0NCkKKworLyogRFNQICovCisjZGVmaW5lIENNX0ZDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MDApCisjZGVmaW5lIENNX0lDTEtFTl9EU1AJCVBSQ01fUkVHMzIoMHg4MTApCisjZGVmaW5lIENNX0lETEVTVF9EU1AJCVBSQ01fUkVHMzIoMHg4MjApCisjZGVmaW5lIENNX0FVVE9JRExFX0RTUAkJUFJDTV9SRUczMigweDgzMCkKKyNkZWZpbmUgQ01fQ0xLU0VMX0RTUAkJUFJDTV9SRUczMigweDg0MCkKKyNkZWZpbmUgQ01fQ0xLU1RDVFJMX0RTUAlQUkNNX1JFRzMyKDB4ODQ4KQorI2RlZmluZSBSTV9SU1RDVFJMX0RTUAkJUFJDTV9SRUczMigweDg1MCkKKyNkZWZpbmUgUk1fUlNUU1RfRFNQCQlQUkNNX1JFRzMyKDB4ODU4KQorI2RlZmluZSBQTV9XS0VOX0RTUAkJUFJDTV9SRUczMigweDhBMCkKKyNkZWZpbmUgUE1fV0tERVBfRFNQCQlQUkNNX1JFRzMyKDB4OEM4KQorI2RlZmluZSBQTV9QV1NUQ1RSTF9EU1AJCVBSQ01fUkVHMzIoMHg4RTApCisjZGVmaW5lIFBNX1BXU1RTVF9EU1AJCVBSQ01fUkVHMzIoMHg4RTQpCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0RTUAlQUkNNX1JFRzMyKDB4OEYwKQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9EU1AJUFJDTV9SRUczMigweDhGNCkKKworLyogSVZBICovCisjZGVmaW5lIFBSQ01fSVJRU1RBVFVTX0lWQQlQUkNNX1JFRzMyKDB4OEY4KQorI2RlZmluZSBQUkNNX0lSUUVOQUJMRV9JVkEJUFJDTV9SRUczMigweDhGQykKKworLyogTW9kZW0gb24gMjQzMCAqLworI2RlZmluZSBDTV9GQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzAwKQorI2RlZmluZSBDTV9JQ0xLRU5fTURNCQlQUkNNX1JFRzMyKDB4QzEwKQorI2RlZmluZSBDTV9JRExFU1RfTURNCQlQUkNNX1JFRzMyKDB4QzIwKQorI2RlZmluZSBDTV9DTEtTRUxfTURNCQlQUkNNX1JFRzMyKDB4QzQwKQorCisvKiBGSVhNRTogTW92ZSB0byBoZWFkZXIgZm9yIDI0MzAgKi8KKyNkZWZpbmUgRElTUF9CQVNFCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDUwMDAwKQorI2RlZmluZSBESVNQX1JFRzMyKG9mZnNldCkJX19SRUczMihESVNQX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBPTUFQMjRYWF9HUE1DX0JBU0UJKEwzXzI0WFhfQkFTRSArIDB4YTAwMCkKKyNkZWZpbmUgR1BNQ19CQVNFCQkoT01BUDI0WFhfR1BNQ19CQVNFKQorI2RlZmluZSBHUE1DX1JFRzMyKG9mZnNldCkJX19SRUczMihHUE1DX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBHUFQxX0JBU0UJCShPTUFQMjRYWF9HUFQxKQorI2RlZmluZSBHUFQxX1JFRzMyKG9mZnNldCkJX19SRUczMihHUFQxX0JBU0UgKyAob2Zmc2V0KSkKKworLyogTWlzYyBzeXNjb25maWcgKi8KKyNkZWZpbmUgRElTUENfU1lTQ09ORklHCQlESVNQX1JFRzMyKDB4NDEwKQorI2RlZmluZSBTUElfQkFTRQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg5ODAwMCkKKyNkZWZpbmUgTUNTUEkxX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTUNTUEkyX1NZU0NPTkZJRwlfX1JFRzMyKFNQSV9CQVNFKzB4MjAwMCArIDB4MTApCisKKy8vI2RlZmluZSBEU1BfTU1VX1NZU0NPTkZJRwkweDVBMDAwMDEwCisjZGVmaW5lIENBTUVSQV9NTVVfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4MkMxMCkKKy8vI2RlZmluZSBJVkFfTU1VX1NZU0NPTkZJRwkweDVEMDAwMDEwCisvLyNkZWZpbmUgRFNQX0RNQV9TWVNDT05GSUcJMHgwMEZDQzAyQworI2RlZmluZSBDQU1FUkFfRE1BX1NZU0NPTkZJRwlfX1JFRzMyKERJU1BfQkFTRSsweDI4MkMpCisjZGVmaW5lIFNZU1RFTV9ETUFfU1lTQ09ORklHCV9fUkVHMzIoRElTUF9CQVNFKzB4NjAyQykKKyNkZWZpbmUgR1BNQ19TWVNDT05GSUcJCUdQTUNfUkVHMzIoMHgwMTApCisjZGVmaW5lIE1BSUxCT1hFU19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4OTQwMTApCisjZGVmaW5lIFVBUlQxX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkEwNTQpCisjZGVmaW5lIFVBUlQyX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkMwNTQpCisjZGVmaW5lIFVBUlQzX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9MNF9JT19CQVNFKzB4NkUwNTQpCisvLyNkZWZpbmUgSVZBX1NZU0NPTkZJRwkJMHg1QzA2MDAxMAorI2RlZmluZSBTRFJDX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgxMCkKKyNkZWZpbmUgU01TX1NZU0NPTkZJRwkJX19SRUczMihPTUFQMjRYWF9TTVNfQkFTRSsweDEwKQorI2RlZmluZSBTU0lfU1lTQ09ORklHCQlfX1JFRzMyKERJU1BfQkFTRSsweDgwMTApCisvLyNkZWZpbmUgVkxZTlFfU1lTQ09ORklHCTB4NjdGRkZFMTAKKworLyogcmt3IC0gZ29vZCBjYW5uaWRhdGVzIGZvciBQTV8gdG8gc3RhcnQgd2hhdCBubSB3YXMgdHJ5aW5nICovCisjZGVmaW5lIE9NQVAyNFhYX0dQVDIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4MkEwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDMJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4NzgwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDQJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0EwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDUJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0MwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDYJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4N0UwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDcJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODAwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDgJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODIwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDkJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ODQwMDApCisjZGVmaW5lIE9NQVAyNFhYX0dQVDEwCQkoT01BUDI0WFhfTDRfSU9fQkFTRSsweDg2MDAwKQorI2RlZmluZSBPTUFQMjRYWF9HUFQxMQkJKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg4ODAwMCkKKyNkZWZpbmUgT01BUDI0WFhfR1BUMTIJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4OEEwMDApCisKKyNkZWZpbmUgR1BUSU1FUjFfU1lTQ09ORklHCUdQVDFfUkVHMzIoMHgwMTApCisjZGVmaW5lIEdQVElNRVIyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDIgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSM19TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQzICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjRfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNCArIDB4MTApCisjZGVmaW5lIEdQVElNRVI1X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDUgKyAweDEwKQorI2RlZmluZSBHUFRJTUVSNl9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ2ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjdfU1lTQ09ORklHCV9fUkVHMzIoT01BUDI0WFhfR1BUNyArIDB4MTApCisjZGVmaW5lIEdQVElNRVI4X1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDggKyAweDEwKQorI2RlZmluZSBHUFRJTUVSOV9TWVNDT05GSUcJX19SRUczMihPTUFQMjRYWF9HUFQ5ICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEwX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEwICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjExX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDExICsgMHgxMCkKKyNkZWZpbmUgR1BUSU1FUjEyX1NZU0NPTkZJRwlfX1JFRzMyKE9NQVAyNFhYX0dQVDEyICsgMHgxMCkKKworI2RlZmluZSBHUElPWF9CQVNFKFgpCQkoT01BUDI0WFhfR1BJT19CQVNFKygweDIwMDAqKChYKS0xKSkpCisKKyNkZWZpbmUgR1BJTzFfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDEpKzB4MTApKQorI2RlZmluZSBHUElPMl9TWVNDT05GSUcJCV9fUkVHMzIoKEdQSU9YX0JBU0UoMikrMHgxMCkpCisjZGVmaW5lIEdQSU8zX1NZU0NPTkZJRwkJX19SRUczMigoR1BJT1hfQkFTRSgzKSsweDEwKSkKKyNkZWZpbmUgR1BJTzRfU1lTQ09ORklHCQlfX1JFRzMyKChHUElPWF9CQVNFKDQpKzB4MTApKQorCisvKiBHUCBUSU1FUiAxICovCisjZGVmaW5lIEdQVElNRVIxX1RJU1RBVAkJR1BUMV9SRUczMigweDAxNCkKKyNkZWZpbmUgR1BUSU1FUjFfVElTUgkJR1BUMV9SRUczMigweDAxOCkKKyNkZWZpbmUgR1BUSU1FUjFfVElFUgkJR1BUMV9SRUczMigweDAxQykKKyNkZWZpbmUgR1BUSU1FUjFfVFdFUgkJR1BUMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BUSU1FUjFfVENMUgkJR1BUMV9SRUczMigweDAyNCkKKyNkZWZpbmUgR1BUSU1FUjFfVENSUgkJR1BUMV9SRUczMigweDAyOCkKKyNkZWZpbmUgR1BUSU1FUjFfVExEUgkJR1BUMV9SRUczMigweDAyQykKKyNkZWZpbmUgR1BUSU1FUjFfVFRHUgkJR1BUMV9SRUczMigweDAzMCkKKyNkZWZpbmUgR1BUSU1FUjFfVFdQUwkJR1BUMV9SRUczMigweDAzNCkKKyNkZWZpbmUgR1BUSU1FUjFfVE1BUgkJR1BUMV9SRUczMigweDAzOCkKKyNkZWZpbmUgR1BUSU1FUjFfVENBUjEJCUdQVDFfUkVHMzIoMHgwM0MpCisjZGVmaW5lIEdQVElNRVIxX1RTSUNSCQlHUFQxX1JFRzMyKDB4MDQwKQorI2RlZmluZSBHUFRJTUVSMV9UQ0FSMgkJR1BUMV9SRUczMigweDA0NCkKKworLyogcmt3IC0tIGJhc2UgZml4IHVwIHBsZWFzZS4uLiAqLworI2RlZmluZSBHUFRJTUVSM19USVNSCQlfX1JFRzMyKE9NQVAyNFhYX0w0X0lPX0JBU0UrMHg3ODAxOCkKKworLyogU0RSQyAqLworI2RlZmluZSBTRFJDX0RMTEFfQ1RSTAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjApCisjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVMJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNjQpCisjZGVmaW5lIFNEUkNfRExMQl9DVFJMCQlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2OCkKKyNkZWZpbmUgU0RSQ19ETExCX1NUQVRVUwlfX1JFRzMyKE9NQVAyNFhYX1NEUkNfQkFTRSsweDA2QykKKyNkZWZpbmUgU0RSQ19QT1dFUgkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwNzApCisjZGVmaW5lIFNEUkNfTVJfMAkJX19SRUczMihPTUFQMjRYWF9TRFJDX0JBU0UrMHgwODQpCisKKy8qIEdQSU8gMSAqLworI2RlZmluZSBHUElPMV9CQVNFCQlHUElPWF9CQVNFKDEpCisjZGVmaW5lIEdQSU8xX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMV9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTEJR1BJTzFfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzEJR1BJTzFfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8xX0lSUUVOQUJMRTIJR1BJTzFfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8xX0lSUVNUQVRVUzIJR1BJTzFfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8xX1dBS0VVUEVOQUJMRQlHUElPMV9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzFfUklTSU5HREVURUNUCUdQSU8xX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMV9EQVRBSU4JCUdQSU8xX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMV9PRQkJR1BJTzFfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8xX0RBVEFPVVQJCUdQSU8xX1JFRzMyKDB4MDNDKQorCisvKiBHUElPMiAqLworI2RlZmluZSBHUElPMl9CQVNFCQlHUElPWF9CQVNFKDIpCisjZGVmaW5lIEdQSU8yX1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPMl9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTEJR1BJTzJfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzEJR1BJTzJfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU8yX0lSUUVOQUJMRTIJR1BJTzJfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU8yX0lSUVNUQVRVUzIJR1BJTzJfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU8yX1dBS0VVUEVOQUJMRQlHUElPMl9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzJfUklTSU5HREVURUNUCUdQSU8yX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPMl9EQVRBSU4JCUdQSU8yX1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPMl9PRQkJR1BJTzJfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU8yX0RBVEFPVVQJCUdQSU8yX1JFRzMyKDB4MDNDKQorCisvKiBHUElPIDMgKi8KKyNkZWZpbmUgR1BJTzNfQkFTRQkJR1BJT1hfQkFTRSgzKQorI2RlZmluZSBHUElPM19SRUczMihvZmZzZXQpCV9fUkVHMzIoR1BJTzNfQkFTRSArIChvZmZzZXQpKQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUxCUdQSU8zX1JFRzMyKDB4MDFDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMxCUdQSU8zX1JFRzMyKDB4MDE4KQorI2RlZmluZSBHUElPM19JUlFFTkFCTEUyCUdQSU8zX1JFRzMyKDB4MDJDKQorI2RlZmluZSBHUElPM19JUlFTVEFUVVMyCUdQSU8zX1JFRzMyKDB4MDI4KQorI2RlZmluZSBHUElPM19XQUtFVVBFTkFCTEUJR1BJTzNfUkVHMzIoMHgwMjApCisjZGVmaW5lIEdQSU8zX1JJU0lOR0RFVEVDVAlHUElPM19SRUczMigweDA0OCkKKyNkZWZpbmUgR1BJTzNfRkFMTElOR0RFVEVDVAlHUElPM19SRUczMigweDA0QykKKyNkZWZpbmUgR1BJTzNfREFUQUlOCQlHUElPM19SRUczMigweDAzOCkKKyNkZWZpbmUgR1BJTzNfT0UJCUdQSU8zX1JFRzMyKDB4MDM0KQorI2RlZmluZSBHUElPM19EQVRBT1VUCQlHUElPM19SRUczMigweDAzQykKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0VOQUJMRQlHUElPM19SRUczMigweDA1MCkKKyNkZWZpbmUgR1BJTzNfREVCT1VOQ0lOR1RJTUUJR1BJTzNfUkVHMzIoMHgwNTQpCisKKy8qIEdQSU8gNCAqLworI2RlZmluZSBHUElPNF9CQVNFCQlHUElPWF9CQVNFKDQpCisjZGVmaW5lIEdQSU80X1JFRzMyKG9mZnNldCkJX19SRUczMihHUElPNF9CQVNFICsgKG9mZnNldCkpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTEJR1BJTzRfUkVHMzIoMHgwMUMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzEJR1BJTzRfUkVHMzIoMHgwMTgpCisjZGVmaW5lIEdQSU80X0lSUUVOQUJMRTIJR1BJTzRfUkVHMzIoMHgwMkMpCisjZGVmaW5lIEdQSU80X0lSUVNUQVRVUzIJR1BJTzRfUkVHMzIoMHgwMjgpCisjZGVmaW5lIEdQSU80X1dBS0VVUEVOQUJMRQlHUElPNF9SRUczMigweDAyMCkKKyNkZWZpbmUgR1BJTzRfUklTSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDQ4KQorI2RlZmluZSBHUElPNF9GQUxMSU5HREVURUNUCUdQSU80X1JFRzMyKDB4MDRDKQorI2RlZmluZSBHUElPNF9EQVRBSU4JCUdQSU80X1JFRzMyKDB4MDM4KQorI2RlZmluZSBHUElPNF9PRQkJR1BJTzRfUkVHMzIoMHgwMzQpCisjZGVmaW5lIEdQSU80X0RBVEFPVVQJCUdQSU80X1JFRzMyKDB4MDNDKQorI2RlZmluZSBHUElPNF9ERUJPVU5DRU5BQkxFCUdQSU80X1JFRzMyKDB4MDUwKQorI2RlZmluZSBHUElPNF9ERUJPVU5DSU5HVElNRQlHUElPNF9SRUczMigweDA1NCkKKworCisvKiBJTyBDT05GSUcgKi8KKyNkZWZpbmUgQ09OVFJPTF9CQVNFCQkoT01BUDI0WFhfQ1RSTF9CQVNFKQorI2RlZmluZSBDT05UUk9MX1JFRzMyKG9mZnNldCkJX19SRUczMihDT05UUk9MX0JBU0UgKyAob2Zmc2V0KSkKKworI2RlZmluZSBDT05UUk9MX1BBRENPTkZfU1BJMV9OQ1MyCUNPTlRST0xfUkVHMzIoMHgxMDQpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9TWVNfWFRBTE9VVAlDT05UUk9MX1JFRzMyKDB4MTM0KQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfVUFSVDFfUlgJQ09OVFJPTF9SRUczMigweDBDOCkKKyNkZWZpbmUgQ09OVFJPTF9QQURDT05GX01DQlNQMV9EWAlDT05UUk9MX1JFRzMyKDB4MTBDKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfR1BNQ19OQ1M0CUNPTlRST0xfUkVHMzIoMHgwOTApCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDUJCUNPTlRST0xfUkVHMzIoMHgwQjgpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDkJCUNPTlRST0xfUkVHMzIoMHgwQkMpCisjZGVmaW5lIENPTlRST0xfUEFEQ09ORl9EU1NfRDEzCQlDT05UUk9MX1JFRzMyKDB4MEMwKQorI2RlZmluZSBDT05UUk9MX1BBRENPTkZfRFNTX1ZTWU5DCUNPTlRST0xfUkVHMzIoMHgwQ0MpCisKKy8qIENPTlRST0wgKi8KKyNkZWZpbmUgQ09OVFJPTF9ERVZDT05GCQlDT05UUk9MX1JFRzMyKDB4Mjc0KQorCisvKiBJTlRFUlJVUFQgQ09OVFJPTExFUiAqLworI2RlZmluZSBJTlRDX0JBU0UJCShPTUFQMjRYWF9MNF9JT19CQVNFKzB4ZmUwMDApCisjZGVmaW5lIElOVENfUkVHMzIob2Zmc2V0KQlfX1JFRzMyKElOVENfQkFTRSArIChvZmZzZXQpKQorCisjZGVmaW5lIElOVEMxX1VfQkFTRQkJSU5UQ19SRUczMigweDAwMCkKKyNkZWZpbmUgSU5UQ19NSVIwCQlJTlRDX1JFRzMyKDB4MDg0KQorI2RlZmluZSBJTlRDX01JUl9TRVQwCQlJTlRDX1JFRzMyKDB4MDhDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjAJCUlOVENfUkVHMzIoMHgwODgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMAkJSU5UQ19SRUczMigweDA5NCkKKyNkZWZpbmUgSU5UQ19NSVIxCQlJTlRDX1JFRzMyKDB4MEE0KQorI2RlZmluZSBJTlRDX01JUl9TRVQxCQlJTlRDX1JFRzMyKDB4MEFDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjEJCUlOVENfUkVHMzIoMHgwQTgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMQkJSU5UQ19SRUczMigweDBCNCkKKyNkZWZpbmUgSU5UQ19NSVIyCQlJTlRDX1JFRzMyKDB4MEM0KQorI2RlZmluZSBJTlRDX01JUl9TRVQyCQlJTlRDX1JFRzMyKDB4MENDKQorI2RlZmluZSBJTlRDX01JUl9DTEVBUjIJCUlOVENfUkVHMzIoMHgwQzgpCisjZGVmaW5lIElOVENfSVNSX0NMRUFSMgkJSU5UQ19SRUczMigweDBENCkKKyNkZWZpbmUgSU5UQ19TSVJfSVJRCQlJTlRDX1JFRzMyKDB4MDQwKQorI2RlZmluZSBJTlRDX0NPTlRST0wJCUlOVENfUkVHMzIoMHgwNDgpCisjZGVmaW5lIElOVENfSUxSMTEJCUlOVENfUkVHMzIoMHgxMkMpCisjZGVmaW5lIElOVENfSUxSMzIJCUlOVENfUkVHMzIoMHgxODApCisjZGVmaW5lIElOVENfSUxSMzcJCUlOVENfUkVHMzIoMHgxOTQpCisjZGVmaW5lIElOVENfU1lTQ09ORklHCQlJTlRDX1JFRzMyKDB4MDEwKQorCisvKiBSQU0gRklSRVdBTEwgKi8KKyNkZWZpbmUgUkFNRldfQkFTRQkJKDB4NjgwMDUwMDApCisjZGVmaW5lIFJBTUZXX1JFRzMyKG9mZnNldCkJX19SRUczMihSQU1GV19CQVNFICsgKG9mZnNldCkpCisKKyNkZWZpbmUgUkFNRldfUkVRSU5GT1BFUk0wCVJBTUZXX1JFRzMyKDB4MDQ4KQorI2RlZmluZSBSQU1GV19SRUFEUEVSTTAJCVJBTUZXX1JFRzMyKDB4MDUwKQorI2RlZmluZSBSQU1GV19XUklURVBFUk0wCVJBTUZXX1JFRzMyKDB4MDU4KQorCisvKiBHUE1DIENTMSBGUEdBIE9OIFVTRVIgSU5URVJGQUNFIE1PRFVMRSAqLworLy8jZGVmaW5lIERFQlVHX0JPQVJEX0xFRF9SRUdJU1RFUiAweDA0MDAwMDE0CisKKy8qIEdQTUMgQ1MwICovCisjZGVmaW5lIEdQTUNfQ09ORklHMV8wCQlHUE1DX1JFRzMyKDB4MDYwKQorI2RlZmluZSBHUE1DX0NPTkZJRzJfMAkJR1BNQ19SRUczMigweDA2NCkKKyNkZWZpbmUgR1BNQ19DT05GSUczXzAJCUdQTUNfUkVHMzIoMHgwNjgpCisjZGVmaW5lIEdQTUNfQ09ORklHNF8wCQlHUE1DX1JFRzMyKDB4MDZDKQorI2RlZmluZSBHUE1DX0NPTkZJRzVfMAkJR1BNQ19SRUczMigweDA3MCkKKyNkZWZpbmUgR1BNQ19DT05GSUc2XzAJCUdQTUNfUkVHMzIoMHgwNzQpCisjZGVmaW5lIEdQTUNfQ09ORklHN18wCQlHUE1DX1JFRzMyKDB4MDc4KQorCisvKiBHUE1DIENTMSAqLworI2RlZmluZSBHUE1DX0NPTkZJRzFfMQkJR1BNQ19SRUczMigweDA5MCkKKyNkZWZpbmUgR1BNQ19DT05GSUcyXzEJCUdQTUNfUkVHMzIoMHgwOTQpCisjZGVmaW5lIEdQTUNfQ09ORklHM18xCQlHUE1DX1JFRzMyKDB4MDk4KQorI2RlZmluZSBHUE1DX0NPTkZJRzRfMQkJR1BNQ19SRUczMigweDA5QykKKyNkZWZpbmUgR1BNQ19DT05GSUc1XzEJCUdQTUNfUkVHMzIoMHgwYTApCisjZGVmaW5lIEdQTUNfQ09ORklHNl8xCQlHUE1DX1JFRzMyKDB4MGE0KQorI2RlZmluZSBHUE1DX0NPTkZJRzdfMQkJR1BNQ19SRUczMigweDBhOCkKKworLyogRFNTICovCisjZGVmaW5lIERTU19DT05UUk9MCQlESVNQX1JFRzMyKDB4MDQwKQorI2RlZmluZSBESVNQQ19DT05UUk9MCQlESVNQX1JFRzMyKDB4NDQwKQorI2RlZmluZSBESVNQQ19TWVNTVEFUVVMJCURJU1BfUkVHMzIoMHg0MTQpCisjZGVmaW5lIERJU1BDX0lSUVNUQVRVUwkJRElTUF9SRUczMigweDQxOCkKKyNkZWZpbmUgRElTUENfSVJRRU5BQkxFCQlESVNQX1JFRzMyKDB4NDFDKQorI2RlZmluZSBESVNQQ19DT05GSUcJCURJU1BfUkVHMzIoMHg0NDQpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IwCURJU1BfUkVHMzIoMHg0NEMpCisjZGVmaW5lIERJU1BDX0RFRkFVTFRfQ09MT1IxCURJU1BfUkVHMzIoMHg0NTApCisjZGVmaW5lIERJU1BDX1RSQU5TX0NPTE9SMAlESVNQX1JFRzMyKDB4NDU0KQorI2RlZmluZSBESVNQQ19UUkFOU19DT0xPUjEJRElTUF9SRUczMigweDQ1OCkKKyNkZWZpbmUgRElTUENfTElORV9OVU1CRVIJRElTUF9SRUczMigweDQ2MCkKKyNkZWZpbmUgRElTUENfVElNSU5HX0gJCURJU1BfUkVHMzIoMHg0NjQpCisjZGVmaW5lIERJU1BDX1RJTUlOR19WCQlESVNQX1JFRzMyKDB4NDY4KQorI2RlZmluZSBESVNQQ19QT0xfRlJFUQkJRElTUF9SRUczMigweDQ2QykKKyNkZWZpbmUgRElTUENfRElWSVNPUgkJRElTUF9SRUczMigweDQ3MCkKKyNkZWZpbmUgRElTUENfU0laRV9ESUcJCURJU1BfUkVHMzIoMHg0NzgpCisjZGVmaW5lIERJU1BDX1NJWkVfTENECQlESVNQX1JFRzMyKDB4NDdDKQorI2RlZmluZSBESVNQQ19HRlhfQkEwCQlESVNQX1JFRzMyKDB4NDgwKQorI2RlZmluZSBESVNQQ19HRlhfQkExCQlESVNQX1JFRzMyKDB4NDg0KQorI2RlZmluZSBESVNQQ19HRlhfUE9TSVRJT04JRElTUF9SRUczMigweDQ4OCkKKyNkZWZpbmUgRElTUENfR0ZYX1NJWkUJCURJU1BfUkVHMzIoMHg0OEMpCisjZGVmaW5lIERJU1BDX0dGWF9BVFRSSUJVVEVTCURJU1BfUkVHMzIoMHg0QTApCisjZGVmaW5lIERJU1BDX0dGWF9GSUZPX1RIUkVTSE9MRAlESVNQX1JFRzMyKDB4NEE0KQorI2RlZmluZSBESVNQQ19HRlhfUk9XX0lOQwlESVNQX1JFRzMyKDB4NEFDKQorI2RlZmluZSBESVNQQ19HRlhfUElYRUxfSU5DCURJU1BfUkVHMzIoMHg0QjApCisjZGVmaW5lIERJU1BDX0dGWF9XSU5ET1dfU0tJUAlESVNQX1JFRzMyKDB4NEI0KQorI2RlZmluZSBESVNQQ19HRlhfVEFCTEVfQkEJRElTUF9SRUczMigweDRCOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTEJRElTUF9SRUczMigweDVENCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTIJRElTUF9SRUczMigweDVEOCkKKyNkZWZpbmUgRElTUENfREFUQV9DWUNMRTMJRElTUF9SRUczMigweDVEQykKKworLyogV2FrZSB1cCBkZWZpbmUgZm9yIGJvYXJkICovCisjZGVmaW5lIEdQSU85NwkJCSgxIDw8IDEpCisjZGVmaW5lIEdQSU84OAkJCSgxIDw8IDI0KQorCisjZW5kaWYgLyogX19BU1NFTUJMRVJfXyAqLworCisjZW5kaWYKKworCisKKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MmNjYmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3NyYW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zcmFtLmgKKyAqCisgKiBJbnRlcmZhY2UgZm9yIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgcnVuIGluIGludGVybmFsIFNSQU0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9PTUFQX1NSQU1fSAorI2RlZmluZSBfX0FSQ0hfQVJNX09NQVBfU1JBTV9ICisKK2V4dGVybiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJuIHZvaWQgb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgZHBsbGN0bCwgdTMyIGNrY3RsKTsKKworZXh0ZXJuIHZvaWQgb21hcDJfc3JhbV9kZHJfaW5pdCh1MzIgKnNsb3dfZGxsX2N0cmwsIHUzMiBmYXN0X2RsbF9jdHJsLAorCQkJCXUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB2b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAorCQkJCSAgICAgIHUzMiBtZW1fdHlwZSk7CitleHRlcm4gdTMyIG9tYXAyX3NldF9wcmNtKHUzMiBkcGxsX2N0cmxfdmFsLCB1MzIgc2RyY19yZnJfdmFsLCBpbnQgYnlwYXNzKTsKKworCisvKiBEbyBub3QgdXNlIHRoZXNlICovCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9jbG9jayh1MzIgY2tjdGwsIHUzMiBkcGxsY3RsKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX2Nsb2NrX3N6OworCitleHRlcm4gdm9pZCBzcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCisJCQkgIHUzMiBiYXNlX2NzLCB1MzIgZm9yY2VfdW5sb2NrKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fZGRyX2luaXRfc3o7CisKK2V4dGVybiB1MzIgc3JhbV9zZXRfcHJjbSh1MzIgZHBsbF9jdHJsX3ZhbCwgdTMyIHNkcmNfcmZyX3ZhbCwgaW50IGJ5cGFzcyk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzcmFtX3NldF9wcmNtX3N6OworCitleHRlcm4gdm9pZCBzcmFtX3JlcHJvZ3JhbV9zZHJjKHUzMiBwZXJmX2xldmVsLCB1MzIgZGxsX3ZhbCwgdTMyIG1lbV90eXBlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNyYW1fcmVwcm9ncmFtX3NkcmNfc3o7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggZmYzN2JjMi4uYjQzY2RkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC02LDE4ICs2LDIxIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wcmNtLmg+CisKKyNpZm5kZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCisjZGVmaW5lIHZvaWNlYmx1ZV9yZXNldCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAxX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIAkvKgogCSAqIFdvcmthcm91bmQgZm9yIDU5MTIvMTYxMWIgYnVnIG1lbnRpb25lZCBpbiBzcHJ6MjA5ZC5wZGYgcC4gMjgKIAkgKiAiR2xvYmFsIFNvZnR3YXJlIFJlc2V0IEFmZmVjdHMgVHJhZmZpYyBDb250cm9sbGVyIEZyZXF1ZW5jeSIuCkBAIC0yNywxMyArMzAsMzEgQEAKIAkJCQkgRFBMTF9DVEwpOwogCQlvbWFwX3dyaXRldygweDgsIEFSTV9SU1RDVDEpOwogCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19NQUNIX1ZPSUNFQkxVRQorCiAJaWYgKG1hY2hpbmVfaXNfdm9pY2VibHVlKCkpCiAJCXZvaWNlYmx1ZV9yZXNldCgpOwogCWVsc2UKLSNlbmRpZgogCQlvbWFwX3dyaXRldygxLCBBUk1fUlNUQ1QxKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2FyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCXUzMiByYXRlOworCXN0cnVjdCBjbGsgKnZjbGssICpzY2xrOworCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKKwljbGtfc2V0X3JhdGUodmNsaywgcmF0ZSk7CS8qIGdvIHRvIGJ5cGFzcyBmb3IgT01BUCBsaW1pdGF0aW9uICovCisJUk1fUlNUQ1RSTF9XS1VQIHw9IDI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUpOworCWVsc2UKKwkJb21hcDJfYXJjaF9yZXNldChtb2RlKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3RpbWV4LmgKaW5kZXggYjYxZGRiNC4uMjFmMmUzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdGltZXguaApAQCAtMjgsNiArMjgsMTQgQEAKICNpZiAhZGVmaW5lZChfX0FTTV9BUkNIX09NQVBfVElNRVhfSCkKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKIAorLyoKKyAqIE9NQVAgMzJLSHogdGltZXIgdXBkYXRlcyB0aW1lIG9uZSBqaWZmaWUgYXQgYSB0aW1lIGZyb20gYSBzZWNvbmRhcnkgdGltZXIsCisgKiBhbmQgdGhhdCdzIHdoeSB0aGUgQ0xPQ0tfVElDS19SQVRFIGlzIG5vdCAzMjc2OC4KKyAqLworI2lmZGVmIENPTkZJR19PTUFQXzMyS19USU1FUgorI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShDT05GSUdfT01BUF8zMktfVElNRVJfSFopCisjZWxzZQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCShIWiAqIDEwMDAwMFVMKQorI2VuZGlmCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAppbmRleCAzNTQ1Yzg2Li5jNzE4MjY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3VuY29tcHJlc3MuaApAQCAtMzYsMTAgKzM2LDE0IEBACiAJdm9sYXRpbGUgdTggKiB1YXJ0ID0gMDsKIAlpbnQgc2hpZnQgPSAyOwogCisjaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUKKwlyZXR1cm47CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAKICNpZmRlZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUM19CQVNFKTsKLSNlbGlmCUNPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyCisjZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyKQogCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUMl9CQVNFKTsKICNlbHNlCiAJdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQxX0JBU0UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zaGFycHNsLmgKaW5kZXggMzExZjJiYi4uMGI0MzQ5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NoYXJwc2wuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc2hhcnBzbC5oCkBAIC0yMSwxMiArMjEsMTggQEAKIAl2b2lkICgqd2FpdF9oc3luYykodm9pZCk7CiB9OwogCisKIC8qCiAgKiBTaGFycFNMIEJhY2tsaWdodAogICovCi0KIHN0cnVjdCBjb3JnaWJsX21hY2hpbmZvIHsKIAlpbnQgbWF4X2ludGVuc2l0eTsKIAl2b2lkICgqc2V0X2JsX2ludGVuc2l0eSkoaW50IGludGVuc2l0eSk7CiB9OworZXh0ZXJuIHZvaWQgY29yZ2libF9saW1pdF9pbnRlbnNpdHkoaW50IGxpbWl0KTsKIAorCisvKgorICogU2hhcnBTTCBCYXR0ZXJ5L1BNIERyaXZlcgorICovCitleHRlcm4gdm9pZCBzaGFycHNsX2JhdHRlcnlfa2ljayh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaAppbmRleCA2ZWM2N2IwLi45NDk4NzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCkBAIC0xOCw2ICsxOCwxMSBAQAogI2lmbmRlZiBTU1BfSAogI2RlZmluZSBTU1BfSAogCisvKgorICogU1NQIGluaXRpYWxpc2F0aW9uIGZsYWdzCisgKi8KKyNkZWZpbmUgU1NQX05PX0lSUQkweDEJCS8qIGRvbid0IHJlZ2lzdGVyIGFuIGlycSBoYW5kbGVyIGluIFNTUCBkcml2ZXIgKi8KKwogc3RydWN0IHNzcF9zdGF0ZSB7CiAJdTMyCWNyMDsKIAl1MzIgY3IxOwpAQCAtMzEsNiArMzYsNyBAQAogCXUzMiBmbGFnczsKIAl1MzIgcHNwX2ZsYWdzOwogCXUzMiBzcGVlZDsKKwlpbnQgaXJxOwogfTsKIAogaW50IHNzcF93cml0ZV93b3JkKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBkYXRhKTsKQEAgLTQwLDcgKzQ2LDcgQEAKIHZvaWQgc3NwX2Rpc2FibGUoc3RydWN0IHNzcF9kZXYgKmRldik7CiB2b2lkIHNzcF9zYXZlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7CiB2b2lkIHNzcF9yZXN0b3JlX3N0YXRlKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHN0cnVjdCBzc3Bfc3RhdGUgKnNzcCk7Ci1pbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQpOworaW50IHNzcF9pbml0KHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBwb3J0LCB1MzIgaW5pdF9mbGFncyk7CiBpbnQgc3NwX2NvbmZpZyhzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgbW9kZSwgdTMyIGZsYWdzLCB1MzIgcHNwX2ZsYWdzLCB1MzIgc3BlZWQpOwogdm9pZCBzc3BfZXhpdChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tc2kuaCBiL2luY2x1ZGUvYXNtLWkzODYvbXNpLmgKaW5kZXggYjg1MzkzMC4uZjA0MWQ0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tc2kuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21zaS5oCkBAIC0xMCwxMyArMTAsNiBAQAogI2luY2x1ZGUgPG1hY2hfYXBpYy5oPgogCiAjZGVmaW5lIExBU1RfREVWSUNFX1ZFQ1RPUgkJMjMyCi0jZGVmaW5lIE1TSV9ERVNUX01PREUJCQlNU0lfTE9HSUNBTF9NT0RFCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCQkxMgotCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkJbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCkKLSNlbHNlCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCWNwdV90b19sb2dpY2FsX2FwaWNpZChmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApKQotI2VuZGlmCisjZGVmaW5lIE1TSV9UQVJHRVRfQ1BVX1NISUZUCTEyCiAKICNlbmRpZiAvKiBBU01fTVNJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCmluZGV4IDEzMjUwMTkuLjYxZDNhYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaApAQCAtNDUsNiArNDUsOCBAQAogI2RlZmluZSBNQVhfQVBJQ0lEIDI1NgogZXh0ZXJuIHU4IHg4Nl9jcHVfdG9fYXBpY2lkW107CiAKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJeDg2X2NwdV90b19hcGljaWRbY3B1XQorCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBleHRlcm4gdm9pZCBjcHVfZXhpdF9jbGVhcih2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV91bmluaXQodm9pZCk7CkBAIC05Miw2ICs5NCwxMCBAQAogZXh0ZXJuIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KIAorI2Vsc2UgLyogQ09ORklHX1NNUCAqLworCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKKwogI2RlZmluZSBOT19QUk9DX0lECQkweEZGCQkvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLWlhNjQva2RlYnVnLmgKaW5kZXggNGQzNzZlMS4uOGIwMWEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9rZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2tkZWJ1Zy5oCkBAIC0yMiw2ICsyMiw5IEBACiAgKiAyMDA1LUFwciAgICAgUnVzdHkgTHluY2ggPHJ1c3R5Lmx5bmNoQGludGVsLmNvbT4gYW5kIEFuaWwgUyBLZXNoYXZhbXVydGh5CiAgKiAgICAgICAgICAgICAgPGFuaWwucy5rZXNoYXZhbXVydGh5QGludGVsLmNvbT4gYWRvcHRlZCBmcm9tCiAgKiAgICAgICAgICAgICAgaW5jbHVkZS9hc20teDg2XzY0L2tkZWJ1Zy5oCisgKgorICogMjAwNS1PY3QJS2VpdGggT3dlbnMgPGthb3NAc2dpLmNvbT4uICBFeHBhbmQgbm90aWZ5X2RpZSB0byBjb3ZlciBtb3JlCisgKgkJZXZlbnRzLgogICovCiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIApAQCAtMzUsMTMgKzM4LDM2IEBACiAJaW50IHNpZ25yOwogfTsKIAotaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICopOwogZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayAqaWE2NGRpZV9jaGFpbjsKIAogZW51bSBkaWVfdmFsIHsKIAlESUVfQlJFQUsgPSAxLAotCURJRV9TUywKKwlESUVfRkFVTFQsCisJRElFX09PUFMsCiAJRElFX1BBR0VfRkFVTFQsCisJRElFX01BQ0hJTkVfSEFMVCwKKwlESUVfTUFDSElORV9SRVNUQVJULAorCURJRV9NQ0FfTU9OQVJDSF9FTlRFUiwKKwlESUVfTUNBX01PTkFSQ0hfUFJPQ0VTUywKKwlESUVfTUNBX01PTkFSQ0hfTEVBVkUsCisJRElFX01DQV9TTEFWRV9FTlRFUiwKKwlESUVfTUNBX1NMQVZFX1BST0NFU1MsCisJRElFX01DQV9TTEFWRV9MRUFWRSwKKwlESUVfTUNBX1JFTkRaVk9VU19FTlRFUiwKKwlESUVfTUNBX1JFTkRaVk9VU19QUk9DRVNTLAorCURJRV9NQ0FfUkVORFpWT1VTX0xFQVZFLAorCURJRV9JTklUX01PTkFSQ0hfRU5URVIsCisJRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTLAorCURJRV9JTklUX01PTkFSQ0hfTEVBVkUsCisJRElFX0lOSVRfU0xBVkVfRU5URVIsCisJRElFX0lOSVRfU0xBVkVfUFJPQ0VTUywKKwlESUVfSU5JVF9TTEFWRV9MRUFWRSwKKwlESUVfS0RFQlVHX0VOVEVSLAorCURJRV9LREVCVUdfTEVBVkUsCisJRElFX0tEVU1QX0VOVEVSLAorCURJRV9LRFVNUF9MRUFWRSwKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY2hhciAqc3RyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW11X2NvbnRleHQuaAppbmRleCA4ZDZlNzJmLi5iNWM2NTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tbXVfY29udGV4dC5oCkBAIC03LDEyICs3LDEzIEBACiAgKi8KIAogLyoKLSAqIFJvdXRpbmVzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiB0YXNrIGNvbnRleHQgbnVtYmVycy4gIFRhc2sgY29udGV4dCBudW1iZXJzIGFyZQotICogdXNlZCB0byByZWR1Y2Ugb3IgZWxpbWluYXRlIHRoZSBuZWVkIHRvIHBlcmZvcm0gVExCIGZsdXNoZXMgZHVlIHRvIGNvbnRleHQgc3dpdGNoZXMuCi0gKiBDb250ZXh0IG51bWJlcnMgYXJlIGltcGxlbWVudGVkIHVzaW5nIGlhLTY0IHJlZ2lvbiBpZHMuICBTaW5jZSB0aGUgSUEtNjQgVExCIGRvZXMgbm90Ci0gKiBjb25zaWRlciB0aGUgcmVnaW9uIG51bWJlciB3aGVuIHBlcmZvcm1pbmcgYSBUTEIgbG9va3VwLCB3ZSBuZWVkIHRvIGFzc2lnbiBhIHVuaXF1ZQotICogcmVnaW9uIGlkIHRvIGVhY2ggcmVnaW9uIGluIGEgcHJvY2Vzcy4gIFdlIHVzZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdGhyZWUgYml0cyBpbiBhCi0gKiByZWdpb24gaWQgZm9yIHRoaXMgcHVycG9zZS4KKyAqIFJvdXRpbmVzIHRvIG1hbmFnZSB0aGUgYWxsb2NhdGlvbiBvZiB0YXNrIGNvbnRleHQgbnVtYmVycy4gIFRhc2sgY29udGV4dAorICogbnVtYmVycyBhcmUgdXNlZCB0byByZWR1Y2Ugb3IgZWxpbWluYXRlIHRoZSBuZWVkIHRvIHBlcmZvcm0gVExCIGZsdXNoZXMKKyAqIGR1ZSB0byBjb250ZXh0IHN3aXRjaGVzLiAgQ29udGV4dCBudW1iZXJzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBpYS02NAorICogcmVnaW9uIGlkcy4gIFNpbmNlIHRoZSBJQS02NCBUTEIgZG9lcyBub3QgY29uc2lkZXIgdGhlIHJlZ2lvbiBudW1iZXIgd2hlbgorICogcGVyZm9ybWluZyBhIFRMQiBsb29rdXAsIHdlIG5lZWQgdG8gYXNzaWduIGEgdW5pcXVlIHJlZ2lvbiBpZCB0byBlYWNoCisgKiByZWdpb24gaW4gYSBwcm9jZXNzLiAgV2UgdXNlIHRoZSBsZWFzdCBzaWduaWZpY2FudCB0aHJlZSBiaXRzIGluIGFyZWdpb24KKyAqIGlkIGZvciB0aGlzIHB1cnBvc2UuCiAgKi8KIAogI2RlZmluZSBJQTY0X1JFR0lPTl9JRF9LRVJORUwJMCAvKiB0aGUga2VybmVsJ3MgcmVnaW9uIGlkICh0bGIuYyBkZXBlbmRzIG9uIHRoaXMgYmVpbmcgMCkgKi8KQEAgLTMyLDEzICszMywxNyBAQAogc3RydWN0IGlhNjRfY3R4IHsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW50IG5leHQ7CS8qIG5leHQgY29udGV4dCBudW1iZXIgdG8gdXNlICovCi0JdW5zaWduZWQgaW50IGxpbWl0OwkvKiBuZXh0ID49IGxpbWl0ID0+IG11c3QgY2FsbCB3cmFwX21tdV9jb250ZXh0KCkgKi8KLQl1bnNpZ25lZCBpbnQgbWF4X2N0eDsJLyogbWF4LiBjb250ZXh0IHZhbHVlIHN1cHBvcnRlZCBieSBhbGwgQ1BVcyAqLworCXVuc2lnbmVkIGludCBsaW1pdDsgICAgIC8qIGF2YWlsYWJsZSBmcmVlIHJhbmdlICovCisJdW5zaWduZWQgaW50IG1heF9jdHg7ICAgLyogbWF4LiBjb250ZXh0IHZhbHVlIHN1cHBvcnRlZCBieSBhbGwgQ1BVcyAqLworCQkJCS8qIGNhbGwgd3JhcF9tbXVfY29udGV4dCB3aGVuIG5leHQgPj0gbWF4ICovCisJdW5zaWduZWQgbG9uZyAqYml0bWFwOyAgLyogYml0bWFwIHNpemUgaXMgbWF4X2N0eCsxICovCisJdW5zaWduZWQgbG9uZyAqZmx1c2htYXA7LyogcGVuZGluZyByaWQgdG8gYmUgZmx1c2hlZCAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBpYTY0X2N0eCBpYTY0X2N0eDsKIERFQ0xBUkVfUEVSX0NQVSh1OCwgaWE2NF9uZWVkX3RsYl9mbHVzaCk7CiAKK2V4dGVybiB2b2lkIG1tdV9jb250ZXh0X2luaXQgKHZvaWQpOwogZXh0ZXJuIHZvaWQgd3JhcF9tbXVfY29udGV4dCAoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTQ3LDEwICs1MiwxMCBAQAogfQogCiAvKgotICogV2hlbiB0aGUgY29udGV4dCBjb3VudGVyIHdyYXBzIGFyb3VuZCBhbGwgVExCcyBuZWVkIHRvIGJlIGZsdXNoZWQgYmVjYXVzZSBhbiBvbGQKLSAqIGNvbnRleHQgbnVtYmVyIG1pZ2h0IGhhdmUgYmVlbiByZXVzZWQuIFRoaXMgaXMgc2lnbmFsbGVkIGJ5IHRoZSBpYTY0X25lZWRfdGxiX2ZsdXNoCi0gKiBwZXItQ1BVIHZhcmlhYmxlLCB3aGljaCBpcyBjaGVja2VkIGluIHRoZSByb3V0aW5lIGJlbG93LiBDYWxsZWQgYnkgYWN0aXZhdGVfbW0oKS4KLSAqIDxlZm9jaHRAZXNzLm5lYy5kZT4KKyAqIFdoZW4gdGhlIGNvbnRleHQgY291bnRlciB3cmFwcyBhcm91bmQgYWxsIFRMQnMgbmVlZCB0byBiZSBmbHVzaGVkIGJlY2F1c2UKKyAqIGFuIG9sZCBjb250ZXh0IG51bWJlciBtaWdodCBoYXZlIGJlZW4gcmV1c2VkLiBUaGlzIGlzIHNpZ25hbGxlZCBieSB0aGUKKyAqIGlhNjRfbmVlZF90bGJfZmx1c2ggcGVyLUNQVSB2YXJpYWJsZSwgd2hpY2ggaXMgY2hlY2tlZCBpbiB0aGUgcm91dGluZQorICogYmVsb3cuIENhbGxlZCBieSBhY3RpdmF0ZV9tbSgpLiA8ZWZvY2h0QGVzcy5uZWMuZGU+CiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogZGVsYXllZF90bGJfZmx1c2ggKHZvaWQpCkBAIC02MCwxMSArNjUsOSBAQAogCiAJaWYgKHVubGlrZWx5KF9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSkpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKLQkJewotCQkJaWYgKF9faWE2NF9wZXJfY3B1X3ZhcihpYTY0X25lZWRfdGxiX2ZsdXNoKSkgewotCQkJCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLQkJCQlfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkgPSAwOwotCQkJfQorCQlpZiAoX19pYTY0X3Blcl9jcHVfdmFyKGlhNjRfbmVlZF90bGJfZmx1c2gpKSB7CisJCQlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CisJCQlfX2lhNjRfcGVyX2NwdV92YXIoaWE2NF9uZWVkX3RsYl9mbHVzaCkgPSAwOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKIAl9CkBAIC03NiwyMCArNzksMjcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW52X21tX2NvbnRleHRfdCBjb250ZXh0ID0gbW0tPmNvbnRleHQ7CiAKLQlpZiAodW5saWtlbHkoIWNvbnRleHQpKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpYTY0X2N0eC5sb2NrLCBmbGFncyk7Ci0JCXsKLQkJCS8qIHJlLWNoZWNrLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIGxvY2s6ICovCi0JCQljb250ZXh0ID0gbW0tPmNvbnRleHQ7Ci0JCQlpZiAoY29udGV4dCA9PSAwKSB7Ci0JCQkJY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOwotCQkJCWlmIChpYTY0X2N0eC5uZXh0ID49IGlhNjRfY3R4LmxpbWl0KQotCQkJCQl3cmFwX21tdV9jb250ZXh0KG1tKTsKLQkJCQltbS0+Y29udGV4dCA9IGNvbnRleHQgPSBpYTY0X2N0eC5uZXh0Kys7Ci0JCQl9CisJaWYgKGxpa2VseShjb250ZXh0KSkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOworCS8qIHJlLWNoZWNrLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIGxvY2s6ICovCisJY29udGV4dCA9IG1tLT5jb250ZXh0OworCWlmIChjb250ZXh0ID09IDApIHsKKwkJY3B1c19jbGVhcihtbS0+Y3B1X3ZtX21hc2spOworCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5saW1pdCkgeworCQkJaWE2NF9jdHgubmV4dCA9IGZpbmRfbmV4dF96ZXJvX2JpdChpYTY0X2N0eC5iaXRtYXAsCisJCQkJCWlhNjRfY3R4Lm1heF9jdHgsIGlhNjRfY3R4Lm5leHQpOworCQkJaWE2NF9jdHgubGltaXQgPSBmaW5kX25leHRfYml0KGlhNjRfY3R4LmJpdG1hcCwKKwkJCQkJaWE2NF9jdHgubWF4X2N0eCwgaWE2NF9jdHgubmV4dCk7CisJCQlpZiAoaWE2NF9jdHgubmV4dCA+PSBpYTY0X2N0eC5tYXhfY3R4KQorCQkJCXdyYXBfbW11X2NvbnRleHQobW0pOwogCQl9Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlhNjRfY3R4LmxvY2ssIGZsYWdzKTsKKwkJbW0tPmNvbnRleHQgPSBjb250ZXh0ID0gaWE2NF9jdHgubmV4dCsrOworCQlfX3NldF9iaXQoY29udGV4dCwgaWE2NF9jdHguYml0bWFwKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWE2NF9jdHgubG9jaywgZmxhZ3MpOworb3V0OgogCS8qCiAJICogRW5zdXJlIHdlJ3JlIG5vdCBzdGFydGluZyB0byB1c2UgImNvbnRleHQiIGJlZm9yZSBhbnkgb2xkCiAJICogdXNlcyBvZiBpdCBhcmUgZ29uZSBmcm9tIG91ciBUTEIuCkBAIC0xMDAsOCArMTEwLDggQEAKIH0KIAogLyoKLSAqIEluaXRpYWxpemUgY29udGV4dCBudW1iZXIgdG8gc29tZSBzYW5lIHZhbHVlLiAgTU0gaXMgZ3VhcmFudGVlZCB0byBiZSBhIGJyYW5kLW5ldwotICogYWRkcmVzcy1zcGFjZSwgc28gbm8gVExCIGZsdXNoaW5nIGlzIG5lZWRlZCwgZXZlci4KKyAqIEluaXRpYWxpemUgY29udGV4dCBudW1iZXIgdG8gc29tZSBzYW5lIHZhbHVlLiAgTU0gaXMgZ3VhcmFudGVlZCB0byBiZSBhCisgKiBicmFuZC1uZXcgYWRkcmVzcy1zcGFjZSwgc28gbm8gVExCIGZsdXNoaW5nIGlzIG5lZWRlZCwgZXZlci4KICAqLwogc3RhdGljIGlubGluZSBpbnQKIGluaXRfbmV3X2NvbnRleHQgKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCkBAIC0xNjIsNyArMTcyLDEwIEBACiAJCWlmICghY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW0tPmNwdV92bV9tYXNrKSkKIAkJCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbS0+Y3B1X3ZtX21hc2spOwogCQlyZWxvYWRfY29udGV4dChjb250ZXh0KTsKLQkJLyogaW4gdGhlIHVubGlrZWx5IGV2ZW50IG9mIGEgVExCLWZsdXNoIGJ5IGFub3RoZXIgdGhyZWFkLCByZWRvIHRoZSBsb2FkOiAqLworCQkvKgorCQkgKiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgb2YgYSBUTEItZmx1c2ggYnkgYW5vdGhlciB0aHJlYWQsCisJCSAqIHJlZG8gdGhlIGxvYWQuCisJCSAqLwogCX0gd2hpbGUgKHVubGlrZWx5KGNvbnRleHQgIT0gbW0tPmNvbnRleHQpKTsKIH0KIApAQCAtMTc1LDggKzE4OCw4IEBACiBhY3RpdmF0ZV9tbSAoc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCkKIHsKIAkvKgotCSAqIFdlIG1heSBnZXQgaW50ZXJydXB0cyBoZXJlLCBidXQgdGhhdCdzIE9LIGJlY2F1c2UgaW50ZXJydXB0IGhhbmRsZXJzIGNhbm5vdAotCSAqIHRvdWNoIHVzZXItc3BhY2UuCisJICogV2UgbWF5IGdldCBpbnRlcnJ1cHRzIGhlcmUsIGJ1dCB0aGF0J3MgT0sgYmVjYXVzZSBpbnRlcnJ1cHQKKwkgKiBoYW5kbGVycyBjYW5ub3QgdG91Y2ggdXNlci1zcGFjZS4KIAkgKi8KIAlpYTY0X3NldF9rcihJQTY0X0tSX1BUX0JBU0UsIF9fcGEobmV4dC0+cGdkKSk7CiAJYWN0aXZhdGVfY29udGV4dChuZXh0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmggYi9pbmNsdWRlL2FzbS1pYTY0L21zaS5oCmluZGV4IDYwZjIxMzcuLjk3ODkwZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbXNpLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tc2kuaApAQCAtMTIsOSArMTIsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIHNldF9pbnRyX2dhdGUgKGludCBuciwgdm9pZCAqZnVuYykge30KICNkZWZpbmUgSU9fQVBJQ19WRUNUT1IoaXJxKQkoaXJxKQogI2RlZmluZSBhY2tfQVBJQ19pcnEJCWlhNjRfZW9pCi0jZGVmaW5lIGNwdV9tYXNrX3RvX2FwaWNpZChtYXNrKSBjcHVfcGh5c2ljYWxfaWQoZmlyc3RfY3B1KG1hc2spKQotI2RlZmluZSBNU0lfREVTVF9NT0RFCQlNU0lfUEhZU0lDQUxfTU9ERQotI2RlZmluZSBNU0lfVEFSR0VUX0NQVQkoKGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19DUl9MSUQpID4+IDE2KSAmIDB4ZmZmZikKICNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJNAogCiAjZW5kaWYgLyogQVNNX01TSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKaW5kZXggYjY1YzYyNy4uYTM1YjMyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaApAQCAtNTEsNiArNTEsNyBAQAogCWlmICghbW0pCiAJCXJldHVybjsKIAorCXNldF9iaXQobW0tPmNvbnRleHQsIGlhNjRfY3R4LmZsdXNobWFwKTsKIAltbS0+Y29udGV4dCA9IDA7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm1tLT5tbV91c2VycykgPT0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvYWJzX2FkZHIuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCmluZGV4IGRjM2ZjM2YuLjE4NDE1MTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2Fic19hZGRyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfQUJTX0FERFJfSAotI2RlZmluZSBfQUJTX0FERFJfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKQEAgLTcwLDQgKzcwLDQgQEAKICNkZWZpbmUgaXNlcmllc19odl9hZGRyKHZpcnRhZGRyKQlcCiAJKDB4ODAwMDAwMDAwMDAwMDAwMCB8IHZpcnRfdG9fYWJzKHZpcnRhZGRyKSkKIAotI2VuZGlmIC8qIF9BQlNfQUREUl9IICovCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FCU19BRERSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hc20tY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIxMzNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXNtLWNvbXBhdC5oCkBAIC0wLDAgKzEsNTUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0FTTV9DT01QQVRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmZGVmIF9fQVNTRU1CTFlfXworIyAgZGVmaW5lIHN0cmluZ2lmeV9pbl9jKC4uLikJX19WQV9BUkdTX18KKyMgIGRlZmluZSBBU01fQ09OU1QoeCkJCXgKKyNlbHNlCisvKiBUaGlzIHZlcnNpb24gb2Ygc3RyaW5naWZ5IHdpbGwgZGVhbCB3aXRoIGNvbW1hcy4uLiAqLworIyAgZGVmaW5lIF9fc3RyaW5naWZ5X2luX2MoLi4uKQkjX19WQV9BUkdTX18KKyMgIGRlZmluZSBzdHJpbmdpZnlfaW5fYyguLi4pCV9fc3RyaW5naWZ5X2luX2MoX19WQV9BUkdTX18pICIgIgorIyAgZGVmaW5lIF9fQVNNX0NPTlNUKHgpCXgjI1VMCisjICBkZWZpbmUgQVNNX0NPTlNUKHgpCQlfX0FTTV9DT05TVCh4KQorI2VuZGlmCisKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisKKy8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLworI2RlZmluZSBQUENfTEwJCXN0cmluZ2lmeV9pbl9jKGxkKQorI2RlZmluZSBQUENfU1RMCQlzdHJpbmdpZnlfaW5fYyhzdGQpCisjZGVmaW5lIFBQQ19MQ01QSQlzdHJpbmdpZnlfaW5fYyhjbXBkaSkKKyNkZWZpbmUgUFBDX0xPTkcJc3RyaW5naWZ5X2luX2MoLmxsb25nKQorI2RlZmluZSBQUENfVExORUkJc3RyaW5naWZ5X2luX2ModGRuZWkpCisjZGVmaW5lIFBQQ19MTEFSWAlzdHJpbmdpZnlfaW5fYyhsZGFyeCkKKyNkZWZpbmUgUFBDX1NUTENYCXN0cmluZ2lmeV9pbl9jKHN0ZGN4LikKKyNkZWZpbmUgUFBDX0NOVExaTAlzdHJpbmdpZnlfaW5fYyhjbnRsemQpCisKKyNlbHNlIC8qIDMyLWJpdCAqLworCisvKiBvcGVyYXRpb25zIGZvciBsb25ncyBhbmQgcG9pbnRlcnMgKi8KKyNkZWZpbmUgUFBDX0xMCQlzdHJpbmdpZnlfaW5fYyhsd3opCisjZGVmaW5lIFBQQ19TVEwJCXN0cmluZ2lmeV9pbl9jKHN0dykKKyNkZWZpbmUgUFBDX0xDTVBJCXN0cmluZ2lmeV9pbl9jKGNtcHdpKQorI2RlZmluZSBQUENfTE9ORwlzdHJpbmdpZnlfaW5fYygubG9uZykKKyNkZWZpbmUgUFBDX1RMTkVJCXN0cmluZ2lmeV9pbl9jKHR3bmVpKQorI2RlZmluZSBQUENfTExBUlgJc3RyaW5naWZ5X2luX2MobHdhcngpCisjZGVmaW5lIFBQQ19TVExDWAlzdHJpbmdpZnlfaW5fYyhzdHdjeC4pCisjZGVmaW5lIFBQQ19DTlRMWkwJc3RyaW5naWZ5X2luX2MoY250bHp3KQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKKy8qIEVycmF0dW0gIzc3IG9uIHRoZSA0MDUgbWVhbnMgd2UgbmVlZCBhIHN5bmMgb3IgZGNidCBiZWZvcmUgZXZlcnkKKyAqIHN0d2N4LiAgVGhlIG9sZCBBVE9NSUNfU1lOQ19GSVggY292ZXJlZCBzb21lIGJ1dCBub3QgYWxsIG9mIHRoaXMuCisgKi8KKyNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQlzdHJpbmdpZnlfaW5fYyhkY2J0CXJhLCByYjspCisjZGVmaW5lCVBQQzQwNV9FUlI3N19TWU5DCXN0cmluZ2lmeV9pbl9jKHN5bmM7KQorI2Vsc2UKKyNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQorI2RlZmluZSBQUEM0MDVfRVJSNzdfU1lOQworI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQVNNX0NPTVBBVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hdG9taWMuaAppbmRleCBlZDRiMzQ1Li45YzBiMzcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXRvbWljLmgKQEAgLTksMjEgKzksMTMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc3luY2guaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgogCiAjZGVmaW5lIEFUT01JQ19JTklUKGkpCQl7IChpKSB9CiAKICNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCiAjZGVmaW5lIGF0b21pY19zZXQodixpKQkJKCgodiktPmNvdW50ZXIpID0gKGkpKQogCi0vKiBFcnJhdHVtICM3NyBvbiB0aGUgNDA1IG1lYW5zIHdlIG5lZWQgYSBzeW5jIG9yIGRjYnQgYmVmb3JlIGV2ZXJ5IHN0d2N4LgotICogVGhlIG9sZCBBVE9NSUNfU1lOQ19GSVggY292ZXJlZCBzb21lIGJ1dCBub3QgYWxsIG9mIHRoaXMuCi0gKi8KLSNpZmRlZiBDT05GSUdfSUJNNDA1X0VSUjc3Ci0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikJImRjYnQgIiAjcmEgIiwiICNyYiAiOyIKLSNlbHNlCi0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKLSNlbmRpZgotCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pY19hZGQoaW50IGEsIGF0b21pY190ICp2KQogewogCWludCB0OwpAQCAtMjA1LDUgKzE5NywxODMgQEAKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpICAgICBzbXBfbWIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSAgICAgIHNtcF9tYigpCiAKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgbG9uZyBjb3VudGVyOyB9IGF0b21pYzY0X3Q7CisKKyNkZWZpbmUgQVRPTUlDNjRfSU5JVChpKQl7IChpKSB9CisKKyNkZWZpbmUgYXRvbWljNjRfcmVhZCh2KQkoKHYpLT5jb3VudGVyKQorI2RlZmluZSBhdG9taWM2NF9zZXQodixpKQkoKCh2KS0+Y291bnRlcikgPSAoaSkpCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfYWRkKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyIxOglsZGFyeAklMCwwLCUzCQkjIGF0b21pYzY0X2FkZFxuXAorCWFkZAklMCwlMiwlMFxuXAorCXN0ZGN4LgklMCwwLCUzIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKGEpLCAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfYWRkX3JldHVybihsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9hZGRfcmV0dXJuXG5cCisJYWRkCSUwLCUxLCUwXG5cCisJc3RkY3guCSUwLDAsJTIgXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCisjZGVmaW5lIGF0b21pYzY0X2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljNjRfYWRkX3JldHVybigoYSksICh2KSkgPCAwKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X3N1Yihsb25nIGEsIGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMwkJIyBhdG9taWM2NF9zdWJcblwKKwlzdWJmCSUwLCUyLCUwXG5cCisJc3RkY3guCSUwLDAsJTMgXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoYSksICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9zdWJfcmV0dXJuKGxvbmcgYSwgYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUyCQkjIGF0b21pYzY0X3N1Yl9yZXR1cm5cblwKKwlzdWJmCSUwLCUxLCUwXG5cCisJc3RkY3guCSUwLDAsJTIgXG5cCisJYm5lLQkxYiIKKwlJU1lOQ19PTl9TTVAKKwk6ICI9JnIiICh0KQorCTogInIiIChhKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJjYyIsICJtZW1vcnkiKTsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGF0b21pYzY0X2luYyhhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkYXJ4CSUwLDAsJTIJCSMgYXRvbWljNjRfaW5jXG5cCisJYWRkaWMJJTAsJTAsMVxuXAorCXN0ZGN4LgklMCwwLCUyIFxuXAorCWJuZS0JMWIiCisJOiAiPSZyIiAodCksICI9bSIgKHYtPmNvdW50ZXIpCisJOiAiciIgKCZ2LT5jb3VudGVyKSwgIm0iICh2LT5jb3VudGVyKQorCTogImNjIik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgYXRvbWljNjRfaW5jX3JldHVybihhdG9taWM2NF90ICp2KQoreworCWxvbmcgdDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCUVJRUlPX09OX1NNUAorIjE6CWxkYXJ4CSUwLDAsJTEJCSMgYXRvbWljNjRfaW5jX3JldHVyblxuXAorCWFkZGljCSUwLCUwLDFcblwKKwlzdGRjeC4JJTAsMCwlMSBcblwKKwlibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKy8qCisgKiBhdG9taWM2NF9pbmNfYW5kX3Rlc3QgLSBpbmNyZW1lbnQgYW5kIHRlc3QKKyAqIEB2OiBwb2ludGVyIG9mIHR5cGUgYXRvbWljNjRfdAorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyBAdiBieSAxCisgKiBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSByZXN1bHQgaXMgemVybywgb3IgZmFsc2UgZm9yIGFsbAorICogb3RoZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgYXRvbWljNjRfaW5jX2FuZF90ZXN0KHYpIChhdG9taWM2NF9pbmNfcmV0dXJuKHYpID09IDApCisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljNjRfZGVjKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToJbGRhcngJJTAsMCwlMgkJIyBhdG9taWM2NF9kZWNcblwKKwlhZGRpYwklMCwlMCwtMVxuXAorCXN0ZGN4LgklMCwwLCUyXG5cCisJYm5lLQkxYiIKKwk6ICI9JnIiICh0KSwgIj1tIiAodi0+Y291bnRlcikKKwk6ICJyIiAoJnYtPmNvdW50ZXIpLCAibSIgKHYtPmNvdW50ZXIpCisJOiAiY2MiKTsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9kZWNfcmV0dXJuKGF0b21pYzY0X3QgKnYpCit7CisJbG9uZyB0OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJRUlFSU9fT05fU01QCisiMToJbGRhcngJJTAsMCwlMQkJIyBhdG9taWM2NF9kZWNfcmV0dXJuXG5cCisJYWRkaWMJJTAsJTAsLTFcblwKKwlzdGRjeC4JJTAsMCwlMVxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJOiAiPSZyIiAodCkKKwk6ICJyIiAoJnYtPmNvdW50ZXIpCisJOiAiY2MiLCAibWVtb3J5Iik7CisKKwlyZXR1cm4gdDsKK30KKworI2RlZmluZSBhdG9taWM2NF9zdWJfYW5kX3Rlc3QoYSwgdikJKGF0b21pYzY0X3N1Yl9yZXR1cm4oKGEpLCAodikpID09IDApCisjZGVmaW5lIGF0b21pYzY0X2RlY19hbmRfdGVzdCh2KQkoYXRvbWljNjRfZGVjX3JldHVybigodikpID09IDApCisKKy8qCisgKiBBdG9taWNhbGx5IHRlc3QgKnYgYW5kIGRlY3JlbWVudCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMC4KKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBvbGQgdmFsdWUgb2YgKnYgbWludXMgMS4KKyAqLworc3RhdGljIF9faW5saW5lX18gbG9uZyBhdG9taWM2NF9kZWNfaWZfcG9zaXRpdmUoYXRvbWljNjRfdCAqdikKK3sKKwlsb25nIHQ7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlFSUVJT19PTl9TTVAKKyIxOglsZGFyeAklMCwwLCUxCQkjIGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZVxuXAorCWFkZGljLgklMCwlMCwtMVxuXAorCWJsdC0JMmZcblwKKwlzdGRjeC4JJTAsMCwlMVxuXAorCWJuZS0JMWIiCisJSVNZTkNfT05fU01QCisJIlxuXAorMjoiCTogIj0mciIgKHQpCisJOiAiciIgKCZ2LT5jb3VudGVyKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIHQ7Cit9CisKKyNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0FUT01JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYXV4dmVjLmgKaW5kZXggNzlkOGM0Ny4uMTlhMDk5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9hdXh2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2F1eHZlYy5oCkBAIC0xNCw4ICsxNCw2IEBACiAvKiBUaGUgdkRTTyBsb2NhdGlvbi4gV2UgaGF2ZSB0byB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgeDg2IGZvciBnbGliYydzCiAgKiBzYWtlIDotKQogICovCi0jaWZkZWYgX19wb3dlcnBjNjRfXwogI2RlZmluZSBBVF9TWVNJTkZPX0VIRFIJCTMzCi0jZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaAppbmRleCBkYzI1YzUzLi41NzI3MjI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CiAKIC8qCkBAIC01MiwxNiArNTMsNiBAQAogI2RlZmluZSBCSVRPUF9XT1JEKG5yKQkJKChucikgLyBCSVRTX1BFUl9MT05HKQogI2RlZmluZSBCSVRPUF9MRV9TV0laWkxFCSgoQklUU19QRVJfTE9ORy0xKSAmIH4weDcpCiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgTEFSWEwJCSJsZGFyeCIKLSNkZWZpbmUgU1RDWEwJCSJzdGRjeC4iCi0jZGVmaW5lIENOVExaTAkJImNudGx6ZCIKLSNlbHNlCi0jZGVmaW5lIExBUlhMCQkibHdhcngiCi0jZGVmaW5lIFNUQ1hMCQkic3R3Y3guIgotI2RlZmluZSBDTlRMWkwJCSJjbnRsenciCi0jZW5kaWYKLQogc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIG9sZDsKQEAgLTY5LDEwICs2MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCi0iMToiCUxBUlhMICIJJTAsMCwlMwkjIHNldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCSMgc2V0X2JpdFxuIgogCSJvcgklMCwlMCwlMlxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTAsMCwlM1xuIgorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgogCSJibmUtCTFiIgogCTogIj0mciIob2xkKSwgIj1tIigqcCkKIAk6ICJyIihtYXNrKSwgInIiKHApLCAibSIoKnApCkBAIC04NiwxMCArNzcsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMJIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNsZWFyX2JpdFxuIgogCSJhbmRjCSUwLCUwLCUyXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIihvbGQpLCAiPW0iKCpwKQogCTogInIiKG1hc2spLCAiciIocCksICJtIigqcCkKQEAgLTEwMywxMCArOTQsMTAgQEAKIAl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAotIjE6IglMQVJYTCAiCSUwLDAsJTMJIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNoYW5nZV9iaXRcbiIKIAkieG9yCSUwLCUwLCUyXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMCwwLCUzXG4iCisJUFBDX1NUTENYICIlMCwwLCUzXG4iCiAJImJuZS0JMWIiCiAJOiAiPSZyIihvbGQpLCAiPW0iKCpwKQogCTogInIiKG1hc2spLCAiciIocCksICJtIigqcCkKQEAgLTEyMiwxMCArMTEzLDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX3NldF9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCQkjIHRlc3RfYW5kX3NldF9iaXRcbiIKIAkib3IJJTEsJTAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMSwwLCUzIFxuIgorCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKIAkiYm5lLQkxYiIKIAlJU1lOQ19PTl9TTVAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKQEAgLTE0NCwxMCArMTM1LDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX2NsZWFyX2JpdFxuIgorIjE6IglQUENfTExBUlggIiUwLDAsJTMJCSMgdGVzdF9hbmRfY2xlYXJfYml0XG4iCiAJImFuZGMJJTEsJTAsJTIgXG4iCiAJUFBDNDA1X0VSUjc3KDAsJTMpCi0JU1RDWEwgIgklMSwwLCUzIFxuIgorCVBQQ19TVExDWCAiJTEsMCwlMyBcbiIKIAkiYm5lLQkxYiIKIAlJU1lOQ19PTl9TTVAKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodCkKQEAgLTE2NiwxMCArMTU3LDEwIEBACiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAlFSUVJT19PTl9TTVAKLSIxOiIJTEFSWEwgIgklMCwwLCUzCQkjIHRlc3RfYW5kX2NoYW5nZV9iaXRcbiIKKyIxOiIJUFBDX0xMQVJYICIlMCwwLCUzCQkjIHRlc3RfYW5kX2NoYW5nZV9iaXRcbiIKIAkieG9yCSUxLCUwLCUyIFxuIgogCVBQQzQwNV9FUlI3NygwLCUzKQotCVNUQ1hMICIJJTEsMCwlMyBcbiIKKwlQUENfU1RMQ1ggIiUxLDAsJTMgXG4iCiAJImJuZS0JMWIiCiAJSVNZTkNfT05fU01QCiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHQpCkBAIC0xODQsOSArMTc1LDkgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBvbGQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSIxOiIJTEFSWEwgIgklMCwwLCUzICAgICAgICAgIyBzZXRfYml0XG4iCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMyAgICAgICAgICMgc2V0X2JpdHNcbiIKIAkib3IJJTAsJTAsJTJcbiIKLQlTVENYTCAiCSUwLDAsJTNcbiIKKwlQUENfU1RMQ1ggIiUwLDAsJTNcbiIKIAkiYm5lLQkxYiIKIAk6ICI9JnIiIChvbGQpLCAiPW0iICgqYWRkcikKIAk6ICJyIiAobWFzayksICJyIiAoYWRkciksICJtIiAoKmFkZHIpCkBAIC0yNjgsNyArMjU5LDcgQEAKIHsKIAlpbnQgbHo7CiAKLQlhc20gKENOVExaTCAiICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoeCkpOworCWFzbSAoUFBDX0NOVExaTCAiJTAsJTEiIDogIj1yIiAobHopIDogInIiICh4KSk7CiAJcmV0dXJuIEJJVFNfUEVSX0xPTkcgLSAxIC0gbHo7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCmluZGV4IGQ2MjVlZTUuLmIwMDFlY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0JVR19ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19CVUdfSAogCisjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIC8qCiAgKiBEZWZpbmUgYW4gaWxsZWdhbCBpbnN0ciB0byB0cmFwIG9uIHRoZSBidWcuCiAgKiBXZSBkb24ndCB1c2UgMCBiZWNhdXNlIHRoYXQgbWFya3MgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uCkBAIC0xMSwxNCArMTIsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2RlZmluZSBCVUdfVEFCTEVfRU5UUlkJCSIubGxvbmciCi0jZGVmaW5lIEJVR19UUkFQX09QCQkidGRuZWkiCi0jZWxzZSAKLSNkZWZpbmUgQlVHX1RBQkxFX0VOVFJZCQkiLmxvbmciCi0jZGVmaW5lIEJVR19UUkFQX09QCQkidHduZWkiCi0jZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwotCiBzdHJ1Y3QgYnVnX2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nCWJ1Z19hZGRyOwogCWxvbmcJCWxpbmU7CkBAIC00MCwxNiArMzMsMTYgQEAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQkgXAogCQkiMToJdHdpIDMxLDAsMFxuIgkJCQkJIFwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJCSBcCi0JCSJcdCJCVUdfVEFCTEVfRU5UUlkiCTFiLCUwLCUxLCUyXG4iCQkJIFwKKwkJIlx0IlBQQ19MT05HIgkxYiwlMCwlMSwlMlxuIgkJCSBcCiAJCSIucHJldmlvdXMiCQkJCQkJIFwKIAkJOiA6ICJpIiAoX19MSU5FX18pLCAiaSIgKF9fRklMRV9fKSwgImkiIChfX0ZVTkNUSU9OX18pKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBCVUdfT04oeCkgZG8gewkJCQkJCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkJIjE6CSJCVUdfVFJBUF9PUCIJJTAsMFxuIgkJCVwKKwkJIjE6CSJQUENfVExORUkiCSUwLDBcbiIJCQlcCiAJCSIuc2VjdGlvbiBfX2J1Z190YWJsZSxcImFcIlxuIgkJCVwKLQkJIlx0IkJVR19UQUJMRV9FTlRSWSIJMWIsJTEsJTIsJTNcbiIJCVwKKwkJIlx0IlBQQ19MT05HIgkxYiwlMSwlMiwlM1xuIgkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6IDogInIiICgobG9uZykoeCkpLCAiaSIgKF9fTElORV9fKSwJCVwKIAkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCkBAIC01Nyw5ICs1MCw5IEBACiAKICNkZWZpbmUgV0FSTl9PTih4KSBkbyB7CQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCQkiMToJIkJVR19UUkFQX09QIgklMCwwXG4iCQkJXAorCQkiMToJIlBQQ19UTE5FSSIJJTAsMFxuIgkJCVwKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiXHQiQlVHX1RBQkxFX0VOVFJZIgkxYiwlMSwlMiwlM1xuIgkJXAorCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogOiAiciIgKChsb25nKSh4KSksCQkJCVwKIAkJICAgICJpIiAoX19MSU5FX18gKyBCVUdfV0FSTklOR19UUkFQKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmNlNTAyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NBQ0hFX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0NBQ0hFX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLworI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQorI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJNAorI2RlZmluZSBNQVhfQ09QWV9QUkVGRVRDSAkxCisjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMzMikKKyNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQJCTUKKyNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAorI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCQk3CisjZW5kaWYKKworI2RlZmluZQlMMV9DQUNIRV9CWVRFUwkJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNkZWZpbmUJU01QX0NBQ0hFX0JZVEVTCQlMMV9DQUNIRV9CWVRFUworI2RlZmluZSBMMV9DQUNIRV9TSElGVF9NQVgJNyAvKiBsYXJnZXN0IEwxIHdoaWNoIHRoaXMgYXJjaCBzdXBwb3J0cyAqLworCisjaWYgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCitzdHJ1Y3QgcHBjNjRfY2FjaGVzIHsKKwl1MzIJZHNpemU7CQkJLyogTDEgZC1jYWNoZSBzaXplICovCisJdTMyCWRsaW5lX3NpemU7CQkvKiBMMSBkLWNhY2hlIGxpbmUgc2l6ZQkqLworCXUzMglsb2dfZGxpbmVfc2l6ZTsKKwl1MzIJZGxpbmVzX3Blcl9wYWdlOworCXUzMglpc2l6ZTsJCQkvKiBMMSBpLWNhY2hlIHNpemUgKi8KKwl1MzIJaWxpbmVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgbGluZSBzaXplCSovCisJdTMyCWxvZ19pbGluZV9zaXplOworCXUzMglpbGluZXNfcGVyX3BhZ2U7Cit9OworCitleHRlcm4gc3RydWN0IHBwYzY0X2NhY2hlcyBwcGM2NF9jYWNoZXM7CisjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAmJiAhIF9fQVNTRU1CTFlfXyAqLworCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DQUNIRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGVmbHVzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzQwYzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlZmx1c2guaApAQCAtMCwwICsxLDY4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NBQ0hFRkxVU0hfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ0FDSEVGTFVTSF9ICisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorCisvKgorICogTm8gY2FjaGUgZmx1c2hpbmcgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzIG1hcHBpbmdzIGFyZSBjaGFuZ2VkLAorICogYmVjYXVzZSB0aGUgY2FjaGVzIG9uIFBvd2VyUENzIGFyZSBwaHlzaWNhbGx5IGFkZHJlc3NlZC4KKyAqLworI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSwgcGFnZSkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKworZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIF9fZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCit7CisJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpKQorCQlfX2ZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgc3RvcCk7Cit9CisKK2V4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJCSAgICBpbnQgbGVuKTsKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZSh2b2lkICpwYWdlX3ZhKTsKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmICFkZWZpbmVkKENPTkZJR19CT09LRSkKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZV9waHlzKHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIpOworI2VuZGlmIC8qIENPTkZJR19QUEMzMiAmJiAhQ09ORklHX0JPT0tFICovCisKK2V4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2lmZGVmIENPTkZJR19QUEMzMgorZXh0ZXJuIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CitleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2RjYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7CitleHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGh5c19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOworI2VuZGlmCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCWRvIHsgXAorCQltZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKKwkJZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAorCW1lbWNweShkc3QsIHNyYywgbGVuKQorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jb21wYXQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY29tcGF0LmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvY29tcGF0LmgKaW5kZXggNmVjNjJjZC4uNGRiNDM2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jb21wYXQuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX0FTTV9QUEM2NF9DT01QQVRfSAotI2RlZmluZSBfQVNNX1BQQzY0X0NPTVBBVF9ICisjaWZuZGVmIF9BU01fUE9XRVJQQ19DT01QQVRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ09NUEFUX0gKIC8qCiAgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29tcGF0aWJpbGl0eSB0eXBlcwogICovCkBAIC00OSw3ICs0OSw3IEBACiAJY29tcGF0X2Rldl90CXN0X2RldjsKIAljb21wYXRfaW5vX3QJc3RfaW5vOwogCWNvbXBhdF9tb2RlX3QJc3RfbW9kZTsKLQljb21wYXRfbmxpbmtfdAlzdF9ubGluazsJCisJY29tcGF0X25saW5rX3QJc3Rfbmxpbms7CiAJX19jb21wYXRfdWlkMzJfdAlzdF91aWQ7CiAJX19jb21wYXRfZ2lkMzJfdAlzdF9naWQ7CiAJY29tcGF0X2Rldl90CXN0X3JkZXY7CkBAIC0yMDIsNCArMjAyLDQgQEAKIAljb21wYXRfdWxvbmdfdCBfX3VudXNlZDY7CiB9OwogCi0jZW5kaWYgLyogX0FTTV9QUEM2NF9DT01QQVRfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCmluZGV4IDc5YTA1NTYuLjA0ZTI3MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKQEAgLTIsNyArMiw3IEBACiAjZGVmaW5lIF9fQVNNX1BPV0VSUENfQ1BVVEFCTEVfSAogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfMzIJCQkweDgwMDAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFXzY0CQkJMHg0MDAwMDAwMApAQCAtMTYsNiArMTYsMTAgQEAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfSEFTX0VGUF9TSU5HTEUJMHgwMDQwMDAwMAogI2RlZmluZSBQUENfRkVBVFVSRV9IQVNfRUZQX0RPVUJMRQkweDAwMjAwMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX05PX1RCCQkweDAwMTAwMDAwCisjZGVmaW5lIFBQQ19GRUFUVVJFX1BPV0VSNAkJMHgwMDA4MDAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9QT1dFUjUJCTB4MDAwNDAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfUE9XRVI1X1BMVVMJCTB4MDAwMjAwMDAKKyNkZWZpbmUgUFBDX0ZFQVRVUkVfQ0VMTAkJMHgwMDAxMDAwMAogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jdXJyZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJjZDRhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3VycmVudC5oCkBAIC0wLDAgKzEsMjcgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0NVUlJFTlRfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfQ1VSUkVOVF9ICisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKworI2lmZGVmIF9fcG93ZXJwYzY0X18KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgorCisjZGVmaW5lIGN1cnJlbnQJCShnZXRfcGFjYSgpLT5fX2N1cnJlbnQpCisKKyNlbHNlCisKKy8qCisgKiBXZSBrZWVwIGBjdXJyZW50JyBpbiByMiBmb3Igc3BlZWQuCisgKi8KK3JlZ2lzdGVyIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudCBhc20gKCJyMiIpOworCisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DVVJSRU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoX2V2ZW50LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaF9ldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNjhhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaF9ldmVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKgllZWhfZXZlbnQuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBMaW5hcyBWZXBzdGFzIDxsaW5hc0BsaW5hcy5vcmc+CisgKi8KKworI2lmbmRlZiBBU01fUFBDNjRfRUVIX0VWRU5UX0gKKyNkZWZpbmUgQVNNX1BQQzY0X0VFSF9FVkVOVF9ICisKKy8qKiBFRUggZXZlbnQgLS0gc3RydWN0dXJlIGhvbGRpbmcgcGNpIGNvbnRyb2xsZXIgZGF0YSB0aGF0IGRlc2NyaWJlcworICogIGEgY2hhbmdlIGluIHRoZSBpc29sYXRpb24gc3RhdHVzIG9mIGEgUENJIHNsb3QuICBBIHBvaW50ZXIKKyAqICB0byB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgYXMgdGhlIGRhdGEgcG9pbnRlciBpbiBhIG5vdGlmeSBjYWxsYmFjay4KKyAqLworc3RydWN0IGVlaF9ldmVudCB7CisJc3RydWN0IGxpc3RfaGVhZCAgICAgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgCSpkbjsgICAvKiBzdHJ1Y3QgZGV2aWNlIG5vZGUgKi8KKwlzdHJ1Y3QgcGNpX2RldiAgICAgICAqZGV2OyAgLyogYWZmZWN0ZWQgZGV2aWNlICovCisJaW50ICAgICAgICAgICAgICAgICAgc3RhdGU7CisJaW50IHRpbWVfdW5hdmFpbDsgICAgLyogbWlsbGlzZWNvbmRzIHVudGlsIGRldmljZSBtaWdodCBiZSBhdmFpbGFibGUgKi8KK307CisKKy8qKgorICogZWVoX3NlbmRfZmFpbHVyZV9ldmVudCAtIGdlbmVyYXRlIGEgUENJIGVycm9yIGV2ZW50CisgKiBAZGV2IHBjaSBkZXZpY2UKKyAqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIGEgUENJIGVycm9yIGV2ZW50IHdoaWNoIHdpbGwgYmUgZGVsaXZlcmVkCisgKiB0byBhbGwgbGlzdGVuZXJzIG9uIHRoZSBwZWhfbm90aWZpZXJfY2hhaW4uCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBjb250ZXh0OworICogdGhlIGFjdHVhbCBldmVudCB3aWxsIGJlIGRlbGl2ZXJlZCBpbiBhIG5vcm1hbCBjb250ZXh0CisgKiAoZnJvbSBhIHdvcmtxdWV1ZSkuCisgKi8KK2ludCBlZWhfc2VuZF9mYWlsdXJlX2V2ZW50IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc2V0X3N0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aW1lX3VuYXZhaWwpOworCisjZW5kaWYgLyogQVNNX1BQQzY0X0VFSF9FVkVOVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAppbmRleCBmZWFjMzQ1Li4zZGNkNjVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKQEAgLTI2OSwxNCArMjY5LDEyIEBACiBleHRlcm4gaW50IGljYWNoZV9ic2l6ZTsKIGV4dGVybiBpbnQgdWNhY2hlX2JzaXplOwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXworLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCisjZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMKIHN0cnVjdCBsaW51eF9iaW5wcm07Ci0jZGVmaW5lIEFSQ0hfSEFTX1NFVFVQX0FERElUSU9OQUxfUEFHRVMJLyogdkRTTyBoYXMgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzICovCi1leHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLCBpbnQgZXhlY3V0YWJsZV9zdGFjayk7CitleHRlcm4gaW50IGFyY2hfc2V0dXBfYWRkaXRpb25hbF9wYWdlcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLAorCQkJCSAgICAgICBpbnQgZXhlY3V0YWJsZV9zdGFjayk7CiAjZGVmaW5lIFZEU09fQVVYX0VOVChhLGIpIE5FV19BVVhfRU5UKGEsYik7Ci0jZWxzZQotI2RlZmluZSBWRFNPX0FVWF9FTlQoYSxiKQotI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogLyoKICAqIFRoZSByZXF1aXJlbWVudHMgaGVyZSBhcmU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zpcm13YXJlLmgKaW5kZXggODA2YzE0Mi4uMTJmYWJiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9maXJtd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmlybXdhcmUuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBGV19GRUFUVVJFX0lTRVJJRVMJKDFVTDw8MjEpCiAKIGVudW0geworI2lmZGVmIENPTkZJR19QUEM2NAogCUZXX0ZFQVRVUkVfUFNFUklFU19QT1NTSUJMRSA9IEZXX0ZFQVRVUkVfUEZUIHwgRldfRkVBVFVSRV9UQ0UgfAogCQlGV19GRUFUVVJFX1NQUkcwIHwgRldfRkVBVFVSRV9EQUJSIHwgRldfRkVBVFVSRV9DT1BZIHwKIAkJRldfRkVBVFVSRV9BU1IgfCBGV19GRUFUVVJFX0RFQlVHIHwgRldfRkVBVFVSRV9URVJNIHwKQEAgLTcwLDYgKzcxLDExIEBACiAJCUZXX0ZFQVRVUkVfSVNFUklFU19BTFdBWVMgJgogI2VuZGlmCiAJCUZXX0ZFQVRVUkVfUE9TU0lCTEUsCisKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCUZXX0ZFQVRVUkVfUE9TU0lCTEUgPSAwLAorCUZXX0ZFQVRVUkVfQUxXQVlTID0gMCwKKyNlbmRpZgogfTsKIAogLyogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IGZpcm13YXJlIGZlYXR1cmVzIHdoaWNoIGFyZSBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaAppbmRleCAzN2M5NGU1Li5mMDMxOWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oCkBAIC03LDEzICs3LDE0IEBACiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL3N5bmNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKICNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAogICBfX2FzbV9fIF9fdm9sYXRpbGUgKCBcCiAJU1lOQ19PTl9TTVAgXAogIjE6CWx3YXJ4CSUwLDAsJTJcbiIgXAogCWluc24gXAorCVBQQzQwNV9FUlI3NygwLCAlMikgXAogIjI6CXN0d2N4LgklMSwwLCUyXG4iIFwKIAkiYm5lLQkxYlxuIiBcCiAJImxpCSUxLDBcbiIgXApAQCAtMjMsNyArMjQsNyBAQAogCSIucHJldmlvdXNcbiIgXAogCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iIFwKIAkiLmFsaWduIDNcbiIgXAotCURBVEFMICIgMWIsNGIsMmIsNGJcbiIgXAorCVBQQ19MT05HICIxYiw0YiwyYiw0YlxuIiBcCiAJIi5wcmV2aW91cyIgXAogCTogIj0mciIgKG9sZHZhbCksICI9JnIiIChyZXQpIFwKIAk6ICJiIiAodWFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMSIgKG9wYXJnKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9odmNhbGwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKaW5kZXggYWI3YzNjZi4uZDM2ZGE2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvaHZjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaApAQCAtMSw1ICsxLDUgQEAKLSNpZm5kZWYgX1BQQzY0X0hWQ0FMTF9ICi0jZGVmaW5lIF9QUEM2NF9IVkNBTExfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfSFZDQUxMX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX0hWQ0FMTF9ICiAKICNkZWZpbmUgSFZTQwkJCS5sb25nIDB4NDQwMDAwMjIKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKi8KIGxvbmcgcGxwYXJfaGNhbGxfbm9yZXRzKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCAuLi4pOwogCi0vKiAKKy8qCiAgKiBTcGVjaWFsIGhjYWxsIGludGVyZmFjZSBmb3IgaWJtdmV0aCBzdXBwb3J0LgogICogVGFrZXMgOCBpbnB1dCBwYXJtcy4gUmV0dXJucyBhIHJjIGFuZCBzdG9yZXMgdGhlCiAgKiBSNCByZXR1cm4gdmFsdWUgaW4gKm91dDEuCkBAIC0xNTMsMTEgKzE1MywxMSBAQAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc3LAogCQkJICAgdW5zaWduZWQgbG9uZyBhcmc4LAogCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MSk7Ci0gCisKIC8qIHBscGFyX2hjYWxsXzRvdXQoKQogICoKLSAqIHNhbWUgYXMgcGxwYXJfaGNhbGwgZXhjZXB0IHdpdGggNCBvdXRwdXQgYXJndW1lbnRzLiAgCi0gKiAKKyAqIHNhbWUgYXMgcGxwYXJfaGNhbGwgZXhjZXB0IHdpdGggNCBvdXRwdXQgYXJndW1lbnRzLgorICoKICAqLwogbG9uZyBwbHBhcl9oY2FsbF80b3V0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzEsCkBAIC0xNzAsNCArMTcwLDQgQEAKIAkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0NCk7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBfUFBDNjRfSFZDQUxMX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSFZDQUxMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCmluZGV4IGMzN2IzMWIuLjI2Yjg5ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogZXh0ZXJuIHZvaWQgdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwotZXh0ZXJuIHZvaWQgcHBjX2lycV9kaXNwYXRjaF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgaXJxKTsKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAppbmRleCBiMzkzNWVhLi44ZWI3ZTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKQEAgLTM4OSw2ICszODksNyBAQAogI2RlZmluZQlTSVVfSU5UX1RJTUVSNAkJKCh1aW50KTB4MGYgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9UTUNOVAkJKCh1aW50KTB4MTAgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9QSVQJCSgodWludCkweDExICsgQ1BNX0lSUV9PRkZTRVQpCisjZGVmaW5lCVNJVV9JTlRfUENJCQkoKHVpbnQpMHgxMiArIENQTV9JUlFfT0ZGU0VUKQogI2RlZmluZQlTSVVfSU5UX0lSUTEJCSgodWludCkweDEzICsgQ1BNX0lSUV9PRkZTRVQpCiAjZGVmaW5lCVNJVV9JTlRfSVJRMgkJKCh1aW50KTB4MTQgKyBDUE1fSVJRX09GRlNFVCkKICNkZWZpbmUJU0lVX0lOVF9JUlEzCQkoKHVpbnQpMHgxNSArIENQTV9JUlFfT0ZGU0VUKQpAQCAtNDI5LDcgKzQzMCw2IEBACiAjZGVmaW5lIE5SX01BU0tfV09SRFMJKChOUl9JUlFTICsgMzEpIC8gMzIpCiAvKiBwZWRhbnRpYzogdGhlc2UgYXJlIGxvbmcgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIHdpdGggc2V0X2JpdCAtLVJSICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcGNfY2FjaGVkX2lycV9tYXNrW05SX01BU0tfV09SRFNdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHBjX2xvc3RfaW50ZXJydXB0c1tOUl9NQVNLX1dPUkRTXTsKIGV4dGVybiBhdG9taWNfdCBwcGNfbl9sb3N0X2ludGVycnVwdHM7CiAKICNkZWZpbmUgdmlydF9pcnFfY3JlYXRlX21hcHBpbmcoeCkJKHgpCkBAIC00ODgsOCArNDg4LDggQEAKIAogZXh0ZXJuIHZvaWQgaXJxX2N0eF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2FsbF9kb19zb2Z0aXJxKHN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOwotZXh0ZXJuIGludCBjYWxsX2hhbmRsZV9JUlFfZXZlbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0JCQlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb24sIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHApOworZXh0ZXJuIGludCBjYWxsX19fZG9fSVJRKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwKTsKIAogI2RlZmluZSBfX0FSQ0hfSEFTX0RPX1NPRlRJUlEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbHBwYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCmluZGV4IDllMmE2YzAuLmMxYmVkYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2xwcGFjYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbHBwYWNhLmgKQEAgLTE2LDggKzE2LDggQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwotI2lmbmRlZiBfQVNNX0xQUEFDQV9ICi0jZGVmaW5lIF9BU01fTFBQQUNBX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX0xQUEFDQV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19MUFBBQ0FfSAogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLwpAQCAtMjgsOCArMjgsNyBAQAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLXN0cnVjdCBscHBhY2EKLXsKK3N0cnVjdCBscHBhY2EgewogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQ0FDSEVfTElORV8xIDB4MDAwMCAtIDB4MDA3RiBDb250YWlucyByZWFkLW9ubHkgZGF0YQogLy8gTk9URTogVGhlIHhEeW5YeXogZmllbGRzIGFyZSBmaWVsZHMgdGhhdCB3aWxsIGJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYnkKQEAgLTEyOSw0ICsxMjgsNCBAQAogCXU4CXBtY19zYXZlX2FyZWFbMjU2XTsJLy8gUE1DIGludGVycnVwdCBBcmVhICAgICAgICAgICB4MDAteEZGCiB9OwogCi0jZW5kaWYgLyogX0FTTV9MUFBBQ0FfSCAqLworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19MUFBBQ0FfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvcGFjYS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCBiY2NhY2Q2Li45MmM3NjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9wYWNhLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKQEAgLTEsMTEgKzEsOCBAQAotI2lmbmRlZiBfUFBDNjRfUEFDQV9ICi0jZGVmaW5lIF9QUEM2NF9QQUNBX0gKLQogLyoKLSAqIGluY2x1ZGUvYXNtLXBwYzY0L3BhY2EuaAorICogaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmgKICAqCi0gKiBUaGlzIGNvbnRyb2wgYmxvY2sgZGVmaW5lcyB0aGUgUEFDQSB3aGljaCBkZWZpbmVzIHRoZSBwcm9jZXNzb3IgCi0gKiBzcGVjaWZpYyBkYXRhIGZvciBlYWNoIGxvZ2ljYWwgcHJvY2Vzc29yIG9uIHRoZSBzeXN0ZW0uICAKKyAqIFRoaXMgY29udHJvbCBibG9jayBkZWZpbmVzIHRoZSBQQUNBIHdoaWNoIGRlZmluZXMgdGhlIHByb2Nlc3NvcgorICogc3BlY2lmaWMgZGF0YSBmb3IgZWFjaCBsb2dpY2FsIHByb2Nlc3NvciBvbiB0aGUgc3lzdGVtLgogICogVGhlcmUgYXJlIHNvbWUgcG9pbnRlcnMgZGVmaW5lZCB0aGF0IGFyZSB1dGlsaXplZCBieSBQTElDLgogICoKICAqIEMgMjAwMSBQUEMgNjQgVGVhbSwgSUJNIENvcnAKQEAgLTE0LDcgKzExLDkgQEAKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8gICAgCisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BBQ0FfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUEFDQV9ICiAKICNpbmNsdWRlCTxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlCTxhc20vdHlwZXMuaD4KQEAgLTExOCw0ICsxMTcsNCBAQAogCiBleHRlcm4gc3RydWN0IHBhY2Ffc3RydWN0IHBhY2FbXTsKIAotI2VuZGlmIC8qIF9QUEM2NF9QQUNBX0ggKi8KKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEFDQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwYy1wY2kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCmluZGV4IDEzYWFjZmYuLjk4OTZmYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oCkBAIC0yNiw2ICsyNiwxMCBAQAogCiBleHRlcm4gc3RydWN0IHBjaV9kZXYgKnBwYzY0X2lzYWJyaWRnZV9kZXY7CS8qIG1heSBiZSBOVUxMIGlmIG5vIElTQSBidXMgKi8KIAorLyoqIEJ1cyBVbml0IElEIG1hY3JvczsgZ2V0IGxvdyBhbmQgaGkgMzItYml0cyBvZiB0aGUgNjQtYml0IEJVSUQgKi8KKyNkZWZpbmUgQlVJRF9ISShidWlkKSAoKGJ1aWQpID4+IDMyKQorI2RlZmluZSBCVUlEX0xPKGJ1aWQpICgoYnVpZCkgJiAweGZmZmZmZmZmKQorCiAvKiBQQ0kgZGV2aWNlX25vZGUgb3BlcmF0aW9ucyAqLwogc3RydWN0IGRldmljZV9ub2RlOwogdHlwZWRlZiB2b2lkICooKnRyYXZlcnNlX2Z1bmMpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWUsIHZvaWQgKmRhdGEpOwpAQCAtMzYsMTAgKzQwLDYgQEAKIHZvaWQgcGNpX2RldnNfcGhiX2luaXRfZHluYW1pYyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYik7CiB2b2lkIF9fZGV2aW5pdCBzY2FuX3BoYihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UpOwogCi0vKiBQQ0kgYWRkcmVzcyBjYWNoZSBtYW5hZ2VtZW50IHJvdXRpbmVzICovCi12b2lkIHBjaV9hZGRyX2NhY2hlX2luc2VydF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7Ci12b2lkIHBjaV9hZGRyX2NhY2hlX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7Ci0KIC8qIEZyb20gcnRhc19wY2kuaCAqLwogdm9pZCBpbml0X3BjaV9jb25maWdfdG9rZW5zICh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgZ2V0X3BoYl9idWlkIChzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CkBAIC01Miw0ICs1Miw0OCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2Fzc2lnbl9hbGxfYnVzZXM7CiBleHRlcm4gaW50IHBjaV9yZWFkX2lycV9saW5lKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KTsKIAorLyogLS0tLSBFRUggaW50ZXJuYWwtdXNlLW9ubHkgcmVsYXRlZCByb3V0aW5lcyAtLS0tICovCisjaWZkZWYgQ09ORklHX0VFSAorLyoqCisgKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIHVuZnJlZXplIGEgZnJvemVuIHNsb3QKKyAqCisgKiBDbGVhciB0aGUgRUVILWZyb3plbiBjb25kaXRpb24gb24gYSBzbG90LiAgVGhpcyByb3V0aW5lCisgKiBkb2VzIHRoaXMgYnkgYXNzZXJ0aW5nIHRoZSBQQ0kgI1JTVCBsaW5lIGZvciAxLzh0aCBvZgorICogYSBzZWNvbmQ7IHRoaXMgcm91dGluZSB3aWxsIHNsZWVwIHdoaWxlIHRoZSBhZGFwdGVyIGlzCisgKiBiZWluZyByZXNldC4KKyAqLwordm9pZCBydGFzX3NldF9zbG90X3Jlc2V0IChzdHJ1Y3QgcGNpX2RuICopOworCisvKiogCisgKiBlZWhfcmVzdG9yZV9iYXJzIC0gUmVzdG9yZSBkZXZpY2UgY29uZmlndXJhdGlvbiBpbmZvLgorICoKKyAqIEEgcmVzZXQgb2YgYSBQQ0kgZGV2aWNlIHdpbGwgY2xlYXIgb3V0IGl0cyBjb25maWcgc3BhY2UuCisgKiBUaGlzIHJvdXRpbmVzIHdpbGwgcmVzdG9yZSB0aGUgY29uZmlnIHNwYWNlIGZvciB0aGlzCisgKiBkZXZpY2UsIGFuZCBpcyBjaGlsZHJlbiwgdG8gdmFsdWVzIHByZXZpb3VzbHkgb2J0YWluZWQKKyAqIGZyb20gdGhlIGZpcm13YXJlLgorICovCit2b2lkIGVlaF9yZXN0b3JlX2JhcnMoc3RydWN0IHBjaV9kbiAqKTsKKworLyoqCisgKiBydGFzX2NvbmZpZ3VyZV9icmlkZ2UgLS0gZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gb2YgcGNpIGJyaWRnZQorICoKKyAqIEFzayB0aGUgZmlybXdhcmUgdG8gY29uZmlndXJlIGFsbCBQQ0kgYnJpZGdlcyBkZXZpY2VzCisgKiBsb2NhdGVkIGJlaGluZCB0aGUgaW5kaWNhdGVkIG5vZGUuIFJlcXVpcmVkIGFmdGVyIGEKKyAqIHBjaSBkZXZpY2UgcmVzZXQuIERvZXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgaGluZyBhcworICogZWVoX3Jlc3RvcmVfYmFycywgYnV0IGZvciBicmRnZXMsIGFuZCBsZXRzIGZpcm13YXJlIAorICogZG8gdGhlIHdvcmsuCisgKi8KK3ZvaWQgcnRhc19jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBwY2lfZG4gKik7CisKK2ludCBydGFzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RuICosIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOworCisvKioKKyAqIG1hcmsgYW5kIGNsZWFyIHNsb3RzOiBmaW5kICJwYXJ0aXRpb24gZW5kcG9pbnQiIFBFIGFuZCBzZXQgb3IgCisgKiBjbGVhciB0aGUgZmxhZ3MgZm9yIGVhY2ggc3Vibm9kZSBvZiB0aGUgUEUuCisgKi8KK3ZvaWQgZWVoX21hcmtfc2xvdCAoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50IG1vZGVfZmxhZyk7Cit2b2lkIGVlaF9jbGVhcl9zbG90IChzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBpbnQgbW9kZV9mbGFnKTsKKworI2VuZGlmCisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFBDX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCmluZGV4IGM1MzRjYTQuLmMyN2JhYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjX2FzbS5oCkBAIC02LDggKzYsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKLSNpZmRlZiBfX0FTU0VNQkxZX18KKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZXJyb3IgX19GSUxFX18gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhc3NlbWJsZXIgZmlsZXMKKyNlbHNlCisKKyNkZWZpbmUgU1pMCQkJKEJJVFNfUEVSX0xPTkcvOCkKIAogLyoKICAqIE1hY3JvcyBmb3Igc3RvcmluZyByZWdpc3RlcnMgaW50byBhbmQgbG9hZGluZyByZWdpc3RlcnMgZnJvbQpAQCAtMTg0LDEyICsxODksNiBAQAogCW9yaXMgICAgcmVnLHJlZywobGFiZWwpQGg7ICAgICAgICAgICAgICAgICAgICAgIFwKIAlvcmkgICAgIHJlZyxyZWcsKGxhYmVsKUBsOwogCi0vKiBvcGVyYXRpb25zIGZvciBsb25ncyBhbmQgcG9pbnRlcnMgKi8KLSNkZWZpbmUgTERMCWxkCi0jZGVmaW5lIFNUTAlzdGQKLSNkZWZpbmUgQ01QSQljbXBkaQotI2RlZmluZSBTWkwJOAotCiAvKiBvZmZzZXRzIGZvciBzdGFjayBmcmFtZSBsYXlvdXQgKi8KICNkZWZpbmUgTFJTQVZFCTE2CiAKQEAgLTIwMywxMiArMjAyLDYgQEAKIAogI2RlZmluZSBPRkYobmFtZSkJbmFtZUBsCiAKLS8qIG9wZXJhdGlvbnMgZm9yIGxvbmdzIGFuZCBwb2ludGVycyAqLwotI2RlZmluZSBMREwJbHd6Ci0jZGVmaW5lIFNUTAlzdHcKLSNkZWZpbmUgQ01QSQljbXB3aQotI2RlZmluZSBTWkwJNAotCiAvKiBvZmZzZXRzIGZvciBzdGFjayBmcmFtZSBsYXlvdXQgKi8KICNkZWZpbmUgTFJTQVZFCTQKIApAQCAtMjY2LDE1ICsyNTksNiBAQAogI2VuZGlmCiAKIAotI2lmZGVmIENPTkZJR19JQk00MDVfRVJSNzcKLSNkZWZpbmUgUFBDNDA1X0VSUjc3KHJhLHJiKQlkY2J0CXJhLCByYjsKLSNkZWZpbmUJUFBDNDA1X0VSUjc3X1NZTkMJc3luYzsKLSNlbHNlCi0jZGVmaW5lIFBQQzQwNV9FUlI3NyhyYSxyYikKLSNkZWZpbmUgUFBDNDA1X0VSUjc3X1NZTkMKLSNlbmRpZgotCi0KICNpZmRlZiBDT05GSUdfSUJNNDQwRVBfRVJSNDIKICNkZWZpbmUgUFBDNDQwRVBfRVJSNDIgaXN5bmMKICNlbHNlCkBAIC01MDIsMTcgKzQ4Niw2IEBACiAjZGVmaW5lIE5fU0xJTkUJNjgKICNkZWZpbmUgTl9TTwkxMDAKIAotI2RlZmluZSBBU01fQ09OU1QoeCkgeAotI2Vsc2UKLSAgI2RlZmluZSBfX0FTTV9DT05TVCh4KSB4IyNVTAotICAjZGVmaW5lIEFTTV9DT05TVCh4KSBfX0FTTV9DT05TVCh4KQotCi0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jZGVmaW5lIERBVEFMCSIubGxvbmciCi0jZWxzZQotI2RlZmluZSBEQVRBTAkiLmxvbmciCi0jZW5kaWYKLQogI2VuZGlmIC8qICBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QUENfQVNNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCmluZGV4IDFkYzRiZjcuLmQxMjM4MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaApAQCAtMTcsNjUgKzE3LDcxIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWNmZy5oPgotI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFBDMzIKLS8qIDMyLWJpdCBwbGF0Zm9ybSB0eXBlcyAqLwotLyogV2Ugb25seSBuZWVkIHRvIGRlZmluZSBhIG5ldyBfTUFDSF94eHggZm9yIG1hY2hpbmVzIHdoaWNoIGFyZSBwYXJ0IG9mCi0gKiBhIGNvbmZpZ3VyYXRpb24gd2hpY2ggc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSB0eXBlIG9mIGRpZmZlcmVudCBtYWNoaW5lLgotICogVGhpcyBpcyBjdXJyZW50bHkgbGltaXRlZCB0byBDT05GSUdfUFBDX01VTFRJUExBVEZPUk0gYW5kIENIUlAvUFJlUC9QTWFjLgotICogLS0gVG9tCisvKiBXZSBkbyBfbm90XyB3YW50IHRvIGRlZmluZSBuZXcgbWFjaGluZSB0eXBlcyBhdCBhbGwsIHRob3NlIG11c3QgZGllCisgKiBpbiBmYXZvciBvZiB1c2luZyB0aGUgZGV2aWNlLXRyZWUKKyAqIC0tIEJlbkguCiAgKi8KLSNkZWZpbmUgX01BQ0hfcHJlcAkweDAwMDAwMDAxCi0jZGVmaW5lIF9NQUNIX1BtYWMJMHgwMDAwMDAwMgkvKiBwbWFjIG9yIHBtYWMgY2xvbmUgKG5vbi1jaHJwKSAqLwotI2RlZmluZSBfTUFDSF9jaHJwCTB4MDAwMDAwMDQJLyogY2hycCBtYWNoaW5lICovCiAKLS8qIHNlZSByZXNpZHVhbC5oIGZvciB0aGVzZSAqLworLyogUGxhdGZvcm1zIGNvZGVzICh0byBiZSBvYnNvbGV0ZWQpICovCisjZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVMJMHgwMTAwCisjZGVmaW5lIFBMQVRGT1JNX1BTRVJJRVNfTFBBUgkweDAxMDEKKyNkZWZpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSCTB4MDIwMQorI2RlZmluZSBQTEFURk9STV9MUEFSCQkweDAwMDEKKyNkZWZpbmUgUExBVEZPUk1fUE9XRVJNQUMJMHgwNDAwCisjZGVmaW5lIFBMQVRGT1JNX01BUExFCQkweDA1MDAKKyNkZWZpbmUgUExBVEZPUk1fUFJFUAkJMHgwNjAwCisjZGVmaW5lIFBMQVRGT1JNX0NIUlAJCTB4MDcwMAorI2RlZmluZSBQTEFURk9STV9DRUxMCQkweDEwMDAKKworLyogQ29tcGF0IHBsYXRmb3JtIGNvZGVzIGZvciAzMiBiaXRzICovCisjZGVmaW5lIF9NQUNIX3ByZXAJUExBVEZPUk1fUFJFUAorI2RlZmluZSBfTUFDSF9QbWFjCVBMQVRGT1JNX1BPV0VSTUFDCisjZGVmaW5lIF9NQUNIX2NocnAJUExBVEZPUk1fQ0hSUAorCisvKiBQUkVQIHN1Yi1wbGF0Zm9ybSB0eXBlcyBzZWUgcmVzaWR1YWwuaCBmb3IgdGhlc2UgKi8KICNkZWZpbmUgX1BSRVBfTW90b3JvbGEJMHgwMQkvKiBtb3Rvcm9sYSBwcmVwICovCiAjZGVmaW5lIF9QUkVQX0Zpcm0JMHgwMgkvKiBmaXJtd29ya3MgcHJlcCAqLwogI2RlZmluZSBfUFJFUF9JQk0JMHgwMAkvKiBpYm0gcHJlcCAqLwogI2RlZmluZSBfUFJFUF9CdWxsCTB4MDMJLyogYnVsbCBwcmVwICovCiAKLS8qIHRoZXNlIGFyZSBhcmJpdHJhcnkgKi8KKy8qIENIUlAgc3ViLXBsYXRmb3JtIHR5cGVzLiBUaGVzZSBhcmUgYXJiaXRyYXJ5ICovCiAjZGVmaW5lIF9DSFJQX01vdG9yb2xhCTB4MDQJLyogbW90b3JvbGEgY2hycCwgdGhlIGNvYnJhICovCiAjZGVmaW5lIF9DSFJQX0lCTQkweDA1CS8qIElCTSBjaHJwLCB0aGUgbG9uZ3RyYWlsIGFuZCBsb25ndHJhaWwgMiAqLwogI2RlZmluZSBfQ0hSUF9QZWdhc29zCTB4MDYJLyogR2VuZXNpL2JwbGFuJ3MgUGVnYXNvcyBhbmQgUGVnYXNvczIgKi8KIAotI2lmZGVmIENPTkZJR19QUENfTVVMVElQTEFURk9STQorI2RlZmluZSBwbGF0Zm9ybV9pc19wc2VyaWVzKCkJKF9tYWNoaW5lID09IFBMQVRGT1JNX1BTRVJJRVMgfHwgXAorCQkJCSBfbWFjaGluZSA9PSBQTEFURk9STV9QU0VSSUVTX0xQQVIpCisjZGVmaW5lIHBsYXRmb3JtX2lzX2xwYXIoKQkoISEoX21hY2hpbmUgJiBQTEFURk9STV9MUEFSKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQogZXh0ZXJuIGludCBfbWFjaGluZTsKIAorI2lmZGVmIENPTkZJR19QUEMzMgorCiAvKiB3aGF0IGtpbmQgb2YgcHJlcCB3b3Jrc3RhdGlvbiB3ZSBhcmUgKi8KIGV4dGVybiBpbnQgX3ByZXBfdHlwZTsKIGV4dGVybiBpbnQgX2NocnBfdHlwZTsKIAogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgYm9hcmQgdHlwZSBmcm9tIGEgZ2l2ZW4gUFJlUCBib2FyZAotICogdmVuZG9yLiBCb2FyZCByZXZpc2lvbiBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlLgorICogdmVuZG9yLiBCb2FyZCByZXZpc2lvbiBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlLiBUaGlzIHdpbGwgYmUgbW92ZWQKKyAqIGVsc2V3aGVyZSBzb29uCiAgKi8KIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjU3lzdGVtVHlwZTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIHVjQm9hcmRSZXY7CiBleHRlcm4gdW5zaWduZWQgY2hhciB1Y0JvYXJkUmV2TWFqLCB1Y0JvYXJkUmV2TWluOworCisjZW5kaWYgLyogQ09ORklHX1BQQzMyICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19JU0VSSUVTKQorLyoKKyAqIGlTZXJpZXMgaXMgc29vbiB0byBiZWNvbWUgTVVMVElQTEFURk9STSBob3BlZnVsbHkgLi4uCisgKi8KKyNkZWZpbmUgX21hY2hpbmUgUExBVEZPUk1fSVNFUklFU19MUEFSCiAjZWxzZQogI2RlZmluZSBfbWFjaGluZSAwCiAjZW5kaWYgLyogQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNICovCi0jZW5kaWYgLyogQ09ORklHX1BQQzMyICovCi0KLSNpZmRlZiBDT05GSUdfUFBDNjQKLS8qIFBsYXRmb3JtcyBzdXBwb3J0ZWQgYnkgUFBDNjQgKi8KLSNkZWZpbmUgUExBVEZPUk1fUFNFUklFUyAgICAgIDB4MDEwMAotI2RlZmluZSBQTEFURk9STV9QU0VSSUVTX0xQQVIgMHgwMTAxCi0jZGVmaW5lIFBMQVRGT1JNX0lTRVJJRVNfTFBBUiAweDAyMDEKLSNkZWZpbmUgUExBVEZPUk1fTFBBUiAgICAgICAgIDB4MDAwMQotI2RlZmluZSBQTEFURk9STV9QT1dFUk1BQyAgICAgMHgwNDAwCi0jZGVmaW5lIFBMQVRGT1JNX01BUExFICAgICAgICAweDA1MDAKLSNkZWZpbmUgUExBVEZPUk1fQ0VMTCAgICAgICAgIDB4MTAwMAotCi0vKiBDb21wYXRpYmlsaXR5IHdpdGggZHJpdmVycyBjb21pbmcgZnJvbSBQUEMzMiB3b3JsZCAqLwotI2RlZmluZSBfbWFjaGluZQkoc3lzdGVtY2ZnLT5wbGF0Zm9ybSkKLSNkZWZpbmUgX01BQ0hfUG1hYwlQTEFURk9STV9QT1dFUk1BQwotI2VuZGlmCiAKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CkBAIC0xNzEsOCArMTc3LDggQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAl1bnNpZ25lZCBsb25nCXN0YXJ0X3RiOwkvKiBTdGFydCBwdXJyIHdoZW4gcHJvYyBzd2l0Y2hlZCBpbiAqLwogCXVuc2lnbmVkIGxvbmcJYWNjdW1fdGI7CS8qIFRvdGFsIGFjY3VtaWxhdGVkIHB1cnIgZm9yIHByb2Nlc3MgKi8KLQl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsJLyogYmFzZSBvZiB0aGUgdkRTTyBsaWJyYXJ5ICovCiAjZW5kaWYKKwl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsJLyogYmFzZSBvZiB0aGUgdkRTTyBsaWJyYXJ5ICovCiAJdW5zaWduZWQgbG9uZwlkYWJyOwkJLyogRGF0YSBhZGRyZXNzIGJyZWFrcG9pbnQgcmVnaXN0ZXIgKi8KICNpZmRlZiBDT05GSUdfQUxUSVZFQwogCS8qIENvbXBsZXRlIEFsdGlWZWMgcmVnaXN0ZXIgc2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaAppbmRleCA0ODljZjRjLi5lYjM5MmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKQEAgLTE2LDcgKzE2LDExIEBACiAvKiBQaWNrdXAgQm9vayBFIHNwZWNpZmljIHJlZ2lzdGVycy4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19CT09LRSkgfHwgZGVmaW5lZChDT05GSUdfNDB4KQogI2luY2x1ZGUgPGFzbS9yZWdfYm9va2UuaD4KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19CT09LRSB8fCBDT05GSUdfNDB4ICovCisKKyNpZmRlZiBDT05GSUdfOHh4CisjaW5jbHVkZSA8YXNtL3JlZ184eHguaD4KKyNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKICNkZWZpbmUgTVNSX1NGX0xHCTYzICAgICAgICAgICAgICAvKiBFbmFibGUgNjQgYml0IG1vZGUgKi8KICNkZWZpbmUgTVNSX0lTRl9MRwk2MSAgICAgICAgICAgICAgLyogSW50ZXJydXB0IDY0YiBtb2RlIHZhbGlkIG9uIDYzMCAqLwpAQCAtMzU5LDYgKzM2Myw3IEBACiAjZGVmaW5lIFNQUk5fUlBBCTB4M0Q2CS8qIFJlcXVpcmVkIFBoeXNpY2FsIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TREEJMHgzQkYJLyogU2FtcGxlZCBEYXRhIEFkZHJlc3MgUmVnaXN0ZXIgKi8KICNkZWZpbmUgU1BSTl9TRFIxCTB4MDE5CS8qIE1NVSBIYXNoIEJhc2UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU1BSTl9BU1IJMHgxMTggICAvKiBBZGRyZXNzIFNwYWNlIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fU0lBCTB4M0JCCS8qIFNhbXBsZWQgSW5zdHJ1Y3Rpb24gQWRkcmVzcyBSZWdpc3RlciAqLwogI2RlZmluZSBTUFJOX1NQUkcwCTB4MTEwCS8qIFNwZWNpYWwgUHVycG9zZSBSZWdpc3RlciBHZW5lcmFsIDAgKi8KICNkZWZpbmUgU1BSTl9TUFJHMQkweDExMQkvKiBTcGVjaWFsIFB1cnBvc2UgUmVnaXN0ZXIgR2VuZXJhbCAxICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZ184eHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnXzh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZWEzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZ184eHguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29udGFpbnMgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgY29tbW9uIHRvIFBvd2VyUEMgOHh4IENQVXMuICBOb3RpY2UKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfUkVHXzh4eF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19SRUdfOHh4X0gKKworLyogQ2FjaGUgY29udHJvbCBvbiB0aGUgTVBDOHh4IGlzIHByb3ZpZGVkIHRocm91Z2ggc29tZSBhZGRpdGlvbmFsCisgKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFNQUk5fSUNfQ1NUCTU2MAkvKiBJbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sL3N0YXR1cyAqLworI2RlZmluZSBTUFJOX0lDX0FEUgk1NjEJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KKyNkZWZpbmUgU1BSTl9JQ19EQVQJNTYyCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIFNQUk5fRENfQ1NUCTU2OAkvKiBEYXRhIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCisjZGVmaW5lIFNQUk5fRENfQURSCTU2OQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLworI2RlZmluZSBTUFJOX0RDX0RBVAk1NzAJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KKworLyogQ29tbWFuZHMuICBPbmx5IHRoZSBmaXJzdCBmZXcgYXJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCisqLworI2RlZmluZQlJRENfRU5BQkxFCTB4MDIwMDAwMDAJLyogQ2FjaGUgZW5hYmxlICovCisjZGVmaW5lIElEQ19ESVNBQkxFCTB4MDQwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZSAqLworI2RlZmluZSBJRENfTERMQ0sJMHgwNjAwMDAwMAkvKiBMb2FkIGFuZCBsb2NrICovCisjZGVmaW5lIElEQ19VTkxJTkUJMHgwODAwMDAwMAkvKiBVbmxvY2sgbGluZSAqLworI2RlZmluZSBJRENfVU5BTEwJMHgwYTAwMDAwMAkvKiBVbmxvY2sgYWxsICovCisjZGVmaW5lIElEQ19JTlZBTEwJMHgwYzAwMDAwMAkvKiBJbnZhbGlkYXRlIGFsbCAqLworCisjZGVmaW5lIERDX0ZMSU5FCTB4MGUwMDAwMDAJLyogRmx1c2ggZGF0YSBjYWNoZSBsaW5lICovCisjZGVmaW5lIERDX1NGV1QJCTB4MDEwMDAwMDAJLyogU2V0IGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLworI2RlZmluZSBEQ19DRldUCQkweDAzMDAwMDAwCS8qIENsZWFyIGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLworI2RlZmluZSBEQ19TTEVTCQkweDA1MDAwMDAwCS8qIFNldCBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLworI2RlZmluZSBEQ19DTEVTCQkweDA3MDAwMDAwCS8qIENsZWFyIGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCisKKy8qIFN0YXR1cy4KKyovCisjZGVmaW5lIElEQ19FTkFCTEVECTB4ODAwMDAwMDAJLyogQ2FjaGUgaXMgZW5hYmxlZCAqLworI2RlZmluZSBJRENfQ0VSUjEJMHgwMDIwMDAwMAkvKiBDYWNoZSBlcnJvciAxICovCisjZGVmaW5lIElEQ19DRVJSMgkweDAwMTAwMDAwCS8qIENhY2hlIGVycm9yIDIgKi8KKyNkZWZpbmUgSURDX0NFUlIzCTB4MDAwODAwMDAJLyogQ2FjaGUgZXJyb3IgMyAqLworCisjZGVmaW5lIERDX0RGV1QJCTB4NDAwMDAwMDAJLyogRGF0YSBjYWNoZSBpcyBmb3JjZWQgd3JpdGUgdGhyb3VnaCAqLworI2RlZmluZSBEQ19MRVMJCTB4MjAwMDAwMDAJLyogQ2FjaGVzIGFyZSBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19SRUdfOHh4X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc2lnbmFsLmgKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjL3NpZ25hbC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oCmluZGV4IGNhZjZlZGUuLjY5NGM4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NpZ25hbC5oCkBAIC0xLDE4ICsxLDExIEBACi0jaWZuZGVmIF9BU01QUENfU0lHTkFMX0gKLSNkZWZpbmUgX0FTTVBQQ19TSUdOQUxfSAorI2lmbmRlZiBfQVNNX1BPV0VSUENfU0lHTkFMX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1NJR05BTF9ICiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KLS8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCi1zdHJ1Y3Qgc2lnaW5mbzsKLQotLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKLSAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwkzMgorI2RlZmluZSBfTlNJR19CUFcJQklUU19QRVJfTE9ORwogI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCkBAIC03NywxOSArNzAsMTkgQEAKICAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKICAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KICAqLwotI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgotI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKLSNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCi0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAotI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKLSNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKyNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDFVCisjZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyVQorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDRVCisjZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMFUKKyNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwVQorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDBVCisjZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwVQogCiAjZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0jZGVmaW5lIFNBX0lOVEVSUlVQVAkweDIwMDAwMDAwIC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KKyNkZWZpbmUgU0FfSU5URVJSVVBUCTB4MjAwMDAwMDB1IC8qIGR1bW15IC0tIGlnbm9yZWQgKi8KIAotI2RlZmluZSBTQV9SRVNUT1JFUgkweDA0MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDBVCiAKIC8qCiAgKiBzaWdhbHRzdGFjayBjb250cm9scwpAQCAtMTI3LDEwICsxMjAsMTMgQEAKIH0gc3RhY2tfdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgorc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKICNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAorI2lmbmRlZiBfX3Bvd2VycGM2NF9fCiAvKgogICogVGhlc2UgYXJlIHBhcmFtZXRlcnMgdG8gZGJnX3NpZ3JldHVybiBzeXNjYWxsLiAgVGhleSBlbmFibGUgb3IKICAqIGRpc2FibGUgY2VydGFpbiBkZWJ1Z2dpbmcgdGhpbmdzIHRoYXQgY2FuIGJlIGRvbmUgZnJvbSBzaWduYWwKQEAgLTE0OSw1ICsxNDUsNiBAQAogCiAvKiBFbmFibGUgb3IgZGlzYWJsZSBicmFuY2ggdHJhY2luZy4gIFRoZSB2YWx1ZSBzZXRzIHRoZSBzdGF0ZS4gKi8KICNkZWZpbmUgU0lHX0RCR19CUkFOQ0hfVFJBQ0lORwkJMgorI2VuZGlmIC8qICEgX19wb3dlcnBjNjRfXyAqLwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwYXJzZW1lbS5oCmluZGV4IDFjOTVhYjkuLmJhMWIzNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BhcnNlbWVtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGFyc2VtZW0uaApAQCAtOCw4ICs4LDEyIEBACiAgKiBNQVhfUEhZU01FTV9CSVRTCQkyXk46IGhvdyBtdWNoIG1lbW9yeSB3ZSBjYW4gaGF2ZSBpbiB0aGF0IHNwYWNlCiAgKi8KICNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMgICAgICAgMjQKLSNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgMzgKLSNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgMzYKKyNkZWZpbmUgTUFYX1BIWVNBRERSX0JJVFMgICAgICAgNDQKKyNkZWZpbmUgTUFYX1BIWVNNRU1fQklUUyAgICAgICAgNDQKKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworZXh0ZXJuIHZvaWQgY3JlYXRlX3NlY3Rpb25fbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CisjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKICNlbmRpZiAvKiBDT05GSUdfU1BBUlNFTUVNICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCmluZGV4IDM1MzZhNWMuLjUzNDFiNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaApAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLSNpbmNsdWRlIDxhc20vcHBjX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyoKQEAgLTE4MCw2ICsxNzksNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBydGFzX2RhdGE7CiBleHRlcm4gaW50IG1lbV9pbml0X2RvbmU7CS8qIHNldCBvbiBib290IG9uY2Uga21hbGxvYyBjYW4gYmUgY2FsbGVkICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1vcnlfbGltaXQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBrbGltaXQ7CiAKIGV4dGVybiBpbnQgcG93ZXJzYXZlX25hcDsJLyogc2V0IGlmIG5hcCBtb2RlIGNhbiBiZSB1c2VkIGluIGlkbGUgbG9vcCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC90Y2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmgKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvdGNlLmgKcmVuYW1lIHRvIGluY2x1ZGUvYXNtLXBvd2VycGMvdGNlLmgKaW5kZXggZDQwYjZiNC4uZDA5OWQ1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvdGNlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90Y2UuaApAQCAtMTgsOCArMTgsOCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2lmbmRlZiBfQVNNX1RDRV9ICi0jZGVmaW5lIF9BU01fVENFX0gKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1RDRV9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19UQ0VfSAogCiAvKgogICogVGNlcyBjb21lIGluIHR3byBmb3JtYXRzLCBvbmUgZm9yIHRoZSB2aXJ0dWFsIGJ1cyBhbmQgYSBkaWZmZXJlbnQKQEAgLTYxLDQgKzYxLDQgQEAKIH07CiAKIAotI2VuZGlmCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1RDRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKaW5kZXggMjUxMmUzODM2Li4wMTVkMjg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC05LDE1ICs5LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X3RvX25vZGUoaW50IGNwdSkKIHsKLQlpbnQgbm9kZTsKLQotCW5vZGUgPSBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKLQotI2lmZGVmIERFQlVHX05VTUEKLQlCVUdfT04obm9kZSA9PSAtMSk7Ci0jZW5kaWYKLQotCXJldHVybiBub2RlOworCXJldHVybiBudW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XTsKIH0KIAogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKQkobm9kZSkKQEAgLTM3LDggKzI5LDYgQEAKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUobm9kZSkgICAgKC0xKQogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpCShjcHVfb25saW5lX21hcCkKIAotI2RlZmluZSBucl9jcHVzX25vZGUobm9kZSkJKG5yX2NwdXNfaW5fbm9kZVtub2RlXSkKLQogLyogc2NoZWRfZG9tYWlucyBTRF9OT0RFX0lOSVQgZm9yIFBQQzY0IG1hY2hpbmVzICovCiAjZGVmaW5lIFNEX05PREVfSU5JVCAoc3RydWN0IHNjaGVkX2RvbWFpbikgewkJXAogCS5zcGFuCQkJPSBDUFVfTUFTS19OT05FLAlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCmluZGV4IDMzYWY3MzAuLjM4NzJlOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWFjY2Vzcy5oCkBAIC0xMjAsMTQgKzEyMCw2IEBACiAKIGV4dGVybiBsb25nIF9fcHV0X3VzZXJfYmFkKHZvaWQpOwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwotI2RlZmluZSBfX0VYX1RBQkxFX0FMSUdOCSIzIgotI2RlZmluZSBfX0VYX1RBQkxFX1RZUEUJCSJsbG9uZyIKLSNlbHNlCi0jZGVmaW5lIF9fRVhfVEFCTEVfQUxJR04JIjIiCi0jZGVmaW5lIF9fRVhfVEFCTEVfVFlQRQkJImxvbmciCi0jZW5kaWYKLQogLyoKICAqIFdlIGRvbid0IHRlbGwgZ2NjIHRoYXQgd2UgYXJlIGFjY2Vzc2luZyBtZW1vcnksIGJ1dCB0aGlzIGlzIE9LCiAgKiBiZWNhdXNlIHdlIGRvIG5vdCB3cml0ZSB0byBhbnkgbWVtb3J5IGdjYyBrbm93cyBhYm91dCwgc28gdGhlcmUKQEAgLTE0MiwxMSArMTM0LDEyIEBACiAJCSIJYiAyYlxuIgkJCQkJXAogCQkiLnByZXZpb3VzXG4iCQkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAotCQkiCS5hbGlnbiAiIF9fRVhfVEFCTEVfQUxJR04gIlxuIgkJXAotCQkiCS4iX19FWF9UQUJMRV9UWVBFIiAxYiwzYlxuIgkJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAogCQk6ICI9ciIgKGVycikJCQkJCVwKLQkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogInIiICh4KSwgImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLFwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKIAogI2lmZGVmIF9fcG93ZXJwYzY0X18KICNkZWZpbmUgX19wdXRfdXNlcl9hc20yKHgsIHB0ciwgcmV0dmFsKQkJCQlcCkBAIC0xNjIsMTIgKzE1NSwxMyBAQAogCQkiCWIgM2JcbiIJCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQkJXAogCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKLQkJIgkuYWxpZ24gIiBfX0VYX1RBQkxFX0FMSUdOICJcbiIJCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIgkJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDJiLDRiXG4iCQlcCisJCSIJLmJhbGlnbiAlNVxuIgkJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCQlcCisJCQlQUENfTE9ORyAiMmIsNGJcbiIJCQlcCiAJCSIucHJldmlvdXMiCQkJCQlcCiAJCTogIj1yIiAoZXJyKQkJCQkJXAotCQk6ICJyIiAoeCksICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiciIgKHgpLCAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksXAorCQkgICJpIihzaXplb2YodW5zaWduZWQgbG9uZykpKQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAogI2RlZmluZSBfX3B1dF91c2VyX3NpemUoeCwgcHRyLCBzaXplLCByZXR2YWwpCQkJXApAQCAtMjEzLDExICsyMDcsMTIgQEAKIAkJIgliIDJiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICJfX0VYX1RBQkxFX0FMSUdOICJcbiIJXAotCQkiCS4iIF9fRVhfVEFCTEVfVFlQRSAiIDFiLDNiXG4iCVwKKwkJIgkuYmFsaWduICU1XG4iCQkJXAorCQkJUFBDX0xPTkcgIjFiLDNiXG4iCQlcCiAJCSIucHJldmlvdXMiCQkJCVwKIAkJOiAiPXIiIChlcnIpLCAiPXIiICh4KQkJCVwKLQkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVycikpCisJCTogImIiIChhZGRyKSwgImkiICgtRUZBVUxUKSwgIjAiIChlcnIpLAlcCisJCSAgImkiKHNpemVvZih1bnNpZ25lZCBsb25nKSkpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtMih4LCBhZGRyLCBlcnIpCQkJXApAQCAtMjM1LDEyICsyMzAsMTMgQEAKIAkJIgliIDNiXG4iCQkJCVwKIAkJIi5wcmV2aW91c1xuIgkJCQlcCiAJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQlcCi0JCSIJLmFsaWduICIgX19FWF9UQUJMRV9BTElHTiAiXG4iCVwKLQkJIgkuIiBfX0VYX1RBQkxFX1RZUEUgIiAxYiw0YlxuIglcCi0JCSIJLiIgX19FWF9UQUJMRV9UWVBFICIgMmIsNGJcbiIJXAorCQkiCS5iYWxpZ24gJTVcbiIJCQlcCisJCQlQUENfTE9ORyAiMWIsNGJcbiIJCVwKKwkJCVBQQ19MT05HICIyYiw0YlxuIgkJXAogCQkiLnByZXZpb3VzIgkJCQlcCiAJCTogIj1yIiAoZXJyKSwgIj0mciIgKHgpCQkJXAotCQk6ICJiIiAoYWRkciksICJpIiAoLUVGQVVMVCksICIwIiAoZXJyKSkKKwkJOiAiYiIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpLCAiMCIgKGVyciksCVwKKwkJICAiaSIoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNkZWZpbmUgX19nZXRfdXNlcl9zaXplKHgsIHB0ciwgc2l6ZSwgcmV0dmFsKQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXBwYzY0L3VkYmcuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tcG93ZXJwYy91ZGJnLmgKaW5kZXggZTNiOTI3OS4uYTM4MzM4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvdWRiZy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdWRiZy5oCkBAIC0xLDkgKzEsMyBAQAotI2lmbmRlZiBfX1VEQkdfSERSCi0jZGVmaW5lIF9fVURCR19IRFIKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCiAvKgogICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycAogICoKQEAgLTEzLDYgKzcsMTIgQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2lmbmRlZiBfQVNNX1BPV0VSUENfVURCR19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19VREJHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykodW5zaWduZWQgY2hhciBjKTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CkBAIC0yOCw0ICsyOCw0IEBACiAKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIGV4dGVybiB2b2lkIHVkYmdfaW5pdF9zY2Moc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfVURCR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC92ZHNvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tcHBjNjQvdmRzby5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc28uaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zkc29fZGF0YXBhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzMyM2I1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92ZHNvX2RhdGFwYWdlLmgKQEAgLTAsMCArMSwxMDggQEAKKyNpZm5kZWYgX1ZEU09fREFUQVBBR0VfSAorI2RlZmluZSBfVkRTT19EQVRBUEFHRV9ICisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGV0ZXIgQmVyZ25lciA8YmVyZ25lckB2bmV0LmlibS5jb20+LCBJQk0KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW5qYW1pbiBIZXJyZW5zY2htaWR5IDxiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+LAorICogCQkgICAgICBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyoKKyAqIE5vdGUgYWJvdXQgdGhpcyBzdHJ1Y3R1cmU6CisgKgorICogVGhpcyBzdHJ1Y3R1cmUgd2FzIGhpc3RvcmljYWxseSBjYWxsZWQgc3lzdGVtY2ZnIGFuZCBleHBvc2VkIHRvCisgKiB1c2VybGFuZCB2aWEgL3Byb2MvcHBjNjQvc3lzdGVtY2ZnLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGJlY2FtZSBhbgorICogQUJJIGlzc3VlIGFzIHNvbWUgcHJvcHJpZXRhcnkgc29mdHdhcmUgc3RhcnRlZCByZWx5aW5nIG9uIGJlaW5nIGFibGUKKyAqIHRvIG1tYXAoKSBpdCwgdGh1cyB3ZSBoYXZlIHRvIGtlZXAgdGhlIGJhc2UgbGF5b3V0IGF0IGxlYXN0IGZvciBhCisgKiBmZXcga2VybmVsIHZlcnNpb25zLgorICoKKyAqIEhvd2V2ZXIsIHNpbmNlIHBwYzMyIGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBiYWNrd2FyZCBoYW5kaWNhcCwKKyAqIGEgc2ltcGxlciB2ZXJzaW9uIG9mIHRoZSBkYXRhIHN0cnVjdHVyZSBpcyB1c2VkIHRoZXJlIHdpdGggb25seSB0aGUKKyAqIGZpZWxkcyBhY3R1YWxseSB1c2VkIGJ5IHRoZSB2RFNPLgorICoKKyAqLworCisvKgorICogSWYgdGhlIG1ham9yIHZlcnNpb24gY2hhbmdlcyB3ZSBhcmUgaW5jb21wYXRpYmxlLgorICogTWlub3IgdmVyc2lvbiBjaGFuZ2VzIGFyZSBhIGhpbnQuCisgKi8KKyNkZWZpbmUgU1lTVEVNQ0ZHX01BSk9SIDEKKyNkZWZpbmUgU1lTVEVNQ0ZHX01JTk9SIDEKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgorCisjZGVmaW5lIFNZU0NBTExfTUFQX1NJWkUgICAgICAoKF9fTlJfc3lzY2FsbHMgKyAzMSkgLyAzMikKKworLyoKKyAqIFNvIGhlcmUgaXMgdGhlIHBwYzY0IGJhY2t3YXJkIGNvbXBhdGlibGUgdmVyc2lvbgorICovCisKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworc3RydWN0IHZkc29fZGF0YSB7CisJX191OCAgZXllX2NhdGNoZXJbMTZdOwkJLyogRXllY2F0Y2hlcjogU1lTVEVNQ0ZHOlBQQzY0CTB4MDAgKi8KKwlzdHJ1Y3QgewkJCS8qIFN5c3RlbWNmZyB2ZXJzaW9uIG51bWJlcnMJICAgICAqLworCQlfX3UzMiBtYWpvcjsJCS8qIE1ham9yIG51bWJlcgkJCTB4MTAgKi8KKwkJX191MzIgbWlub3I7CQkvKiBNaW5vciBudW1iZXIJCQkweDE0ICovCisJfSB2ZXJzaW9uOworCisJX191MzIgcGxhdGZvcm07CQkJLyogUGxhdGZvcm0gZmxhZ3MJCTB4MTggKi8KKwlfX3UzMiBwcm9jZXNzb3I7CQkvKiBQcm9jZXNzb3IgdHlwZQkJMHgxQyAqLworCV9fdTY0IHByb2Nlc3NvckNvdW50OwkJLyogIyBvZiBwaHlzaWNhbCBwcm9jZXNzb3JzCTB4MjAgKi8KKwlfX3U2NCBwaHlzaWNhbE1lbW9yeVNpemU7CS8qIFNpemUgb2YgcmVhbCBtZW1vcnkoQikJMHgyOCAqLworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191NjQgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX191MzIgZGNhY2hlX3NpemU7CQkvKiBMMSBkLWNhY2hlIHNpemUJCTB4NjAgKi8KKwlfX3UzMiBkY2FjaGVfbGluZV9zaXplOwkJLyogTDEgZC1jYWNoZSBsaW5lIHNpemUJCTB4NjQgKi8KKwlfX3UzMiBpY2FjaGVfc2l6ZTsJCS8qIEwxIGktY2FjaGUgc2l6ZQkJMHg2OCAqLworCV9fdTMyIGljYWNoZV9saW5lX3NpemU7CQkvKiBMMSBpLWNhY2hlIGxpbmUgc2l6ZQkJMHg2QyAqLworCisJLyogdGhvc2UgYWRkaXRpb25hbCBvbmVzIGRvbid0IGhhdmUgdG8gYmUgbG9jYXRlZCBhbnl3aGVyZQorCSAqIHNwZWNpYWwgYXMgdGhleSB3ZXJlIG5vdCBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBzeXN0ZW1jZmcKKwkgKi8KKwlfX3M2NCB3dG9tX2Nsb2NrX3NlYzsJCQkvKiBXYWxsIHRvIG1vbm90b25pYyBjbG9jayAqLworCV9fczMyIHd0b21fY2xvY2tfbnNlYzsKKyAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIHN5c2NhbGxzICAqLworICAgCV9fdTMyIHN5c2NhbGxfbWFwXzMyW1NZU0NBTExfTUFQX1NJWkVdOyAvKiBtYXAgb2Ygc3lzY2FsbHMgKi8KK307CisKKyNlbHNlIC8qIENPTkZJR19QUEM2NCAqLworCisvKgorICogQW5kIGhlcmUgaXMgdGhlIHNpbXBsZXIgMzIgYml0cyB2ZXJzaW9uCisgKi8KK3N0cnVjdCB2ZHNvX2RhdGEgeworCV9fdTY0IHRiX29yaWdfc3RhbXA7CQkvKiBUaW1lYmFzZSBhdCBib290CQkweDMwICovCisJX191NjQgdGJfdGlja3NfcGVyX3NlYzsJCS8qIFRpbWViYXNlIHRpY3MgLyBzZWMJCTB4MzggKi8KKwlfX3U2NCB0Yl90b194czsJCQkvKiBJbnZlcnNlIG9mIFRCIHRvIDJeMjAJMHg0MCAqLworCV9fdTY0IHN0YW1wX3hzZWM7CQkvKgkJCQkweDQ4ICovCisJX191MzIgdGJfdXBkYXRlX2NvdW50OwkJLyogVGltZWJhc2UgYXRvbWljaXR5IGN0cgkweDUwICovCisJX191MzIgdHpfbWludXRlc3dlc3Q7CQkvKiBNaW51dGVzIHdlc3Qgb2YgR3JlZW53aWNoCTB4NTggKi8KKwlfX3UzMiB0el9kc3R0aW1lOwkJLyogVHlwZSBvZiBkc3QgY29ycmVjdGlvbgkweDVDICovCisJX19zMzIgd3RvbV9jbG9ja19zZWM7CQkJLyogV2FsbCB0byBtb25vdG9uaWMgY2xvY2sgKi8KKwlfX3MzMiB3dG9tX2Nsb2NrX25zZWM7CisgICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBzeXNjYWxscyAqLworfTsKKworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworCisjaWZkZWYgX19LRVJORUxfXworZXh0ZXJuIHN0cnVjdCB2ZHNvX2RhdGEgKnZkc29fZGF0YTsKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfU1lTVEVNQ0ZHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMveG1vbi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKaW5kZXggYWNlMjA3Mi4uNDNmNzEyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy94bW9uLmgKQEAgLTcsNyArNyw2IEBACiBleHRlcm4gaW50IHhtb24oc3RydWN0IHB0X3JlZ3MgKmV4Y3ApOwogZXh0ZXJuIHZvaWQgeG1vbl9wcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pOwogZXh0ZXJuIHZvaWQgeG1vbl9pbml0KGludCk7Ci1leHRlcm4gdm9pZCB4bW9uX21hcF9zY2Modm9pZCk7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTE1N2QwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy9jYWNoZS5oCi0gKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWZuZGVmIF9fQVJDSF9QUENfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfUFBDX0NBQ0hFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCi0vKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwotI2lmIGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNDAzR0NYKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk0Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzY0QlJJREdFKQotI2RlZmluZSBMMV9DQUNIRV9TSElGVAk3Ci0jZGVmaW5lIE1BWF9DT1BZX1BSRUZFVENICTEKLSNlbHNlCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTUKLSNkZWZpbmUgTUFYX0NPUFlfUFJFRkVUQ0gJNAotI2VuZGlmCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNkZWZpbmUJU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCi0KLSNkZWZpbmUJTDFfQ0FDSEVfQUxJR04oeCkgICAgICAgKCgoeCkrKEwxX0NBQ0hFX0JZVEVTLTEpKSZ+KEwxX0NBQ0hFX0JZVEVTLTEpKQotI2RlZmluZQlMMV9DQUNIRV9QQUdFUwkJOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgY2xlYW5fZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzdG9wKTsKLWV4dGVybiB2b2lkIGludmFsaWRhdGVfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfYWxsKHZvaWQpOwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0vKiBwcmVwIHJlZ2lzdGVycyBmb3IgTDIgKi8KLSNkZWZpbmUgQ0FDSEVDUkJBICAgICAgIDB4ODAwMDA4MjMgICAgICAvKiBDYWNoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgTDJDQUNIRV9NQVNLCTB4MDMJLyogTWFzayBmb3IgMiBMMiBDYWNoZSBiaXRzICovCi0jZGVmaW5lIEwyQ0FDSEVfNTEyS0IJMHgwMAkvKiA1MTJLQiAqLwotI2RlZmluZSBMMkNBQ0hFXzI1NktCCTB4MDEJLyogMjU2S0IgKi8KLSNkZWZpbmUgTDJDQUNIRV8xTUIJMHgwMgkvKiAxTUIgKi8KLSNkZWZpbmUgTDJDQUNIRV9OT05FCTB4MDMJLyogTk9ORSAqLwotI2RlZmluZSBMMkNBQ0hFX1BBUklUWSAgMHgwOCAgICAvKiBNYXNrIGZvciBMMiBDYWNoZSBQYXJpdHkgUHJvdGVjdGVkIGJpdCAqLwotCi0jaWZkZWYgQ09ORklHXzh4eAotLyogQ2FjaGUgY29udHJvbCBvbiB0aGUgTVBDOHh4IGlzIHByb3ZpZGVkIHRocm91Z2ggc29tZSBhZGRpdGlvbmFsCi0gKiBzcGVjaWFsIHB1cnBvc2UgcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIFNQUk5fSUNfQ1NUCTU2MAkvKiBJbnN0cnVjdGlvbiBjYWNoZSBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBTUFJOX0lDX0FEUgk1NjEJLyogQWRkcmVzcyBuZWVkZWQgZm9yIHNvbWUgY29tbWFuZHMgKi8KLSNkZWZpbmUgU1BSTl9JQ19EQVQJNTYyCS8qIFJlYWQtb25seSBkYXRhIHJlZ2lzdGVyICovCi0jZGVmaW5lIFNQUk5fRENfQ1NUCTU2OAkvKiBEYXRhIGNhY2hlIGNvbnRyb2wvc3RhdHVzICovCi0jZGVmaW5lIFNQUk5fRENfQURSCTU2OQkvKiBBZGRyZXNzIG5lZWRlZCBmb3Igc29tZSBjb21tYW5kcyAqLwotI2RlZmluZSBTUFJOX0RDX0RBVAk1NzAJLyogUmVhZC1vbmx5IGRhdGEgcmVnaXN0ZXIgKi8KLQotLyogQ29tbWFuZHMuICBPbmx5IHRoZSBmaXJzdCBmZXcgYXJlIGF2YWlsYWJsZSB0byB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUuCi0qLwotI2RlZmluZQlJRENfRU5BQkxFCTB4MDIwMDAwMDAJLyogQ2FjaGUgZW5hYmxlICovCi0jZGVmaW5lIElEQ19ESVNBQkxFCTB4MDQwMDAwMDAJLyogQ2FjaGUgZGlzYWJsZSAqLwotI2RlZmluZSBJRENfTERMQ0sJMHgwNjAwMDAwMAkvKiBMb2FkIGFuZCBsb2NrICovCi0jZGVmaW5lIElEQ19VTkxJTkUJMHgwODAwMDAwMAkvKiBVbmxvY2sgbGluZSAqLwotI2RlZmluZSBJRENfVU5BTEwJMHgwYTAwMDAwMAkvKiBVbmxvY2sgYWxsICovCi0jZGVmaW5lIElEQ19JTlZBTEwJMHgwYzAwMDAwMAkvKiBJbnZhbGlkYXRlIGFsbCAqLwotCi0jZGVmaW5lIERDX0ZMSU5FCTB4MGUwMDAwMDAJLyogRmx1c2ggZGF0YSBjYWNoZSBsaW5lICovCi0jZGVmaW5lIERDX1NGV1QJCTB4MDEwMDAwMDAJLyogU2V0IGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19DRldUCQkweDAzMDAwMDAwCS8qIENsZWFyIGZvcmNlZCB3cml0ZXRocm91Z2ggbW9kZSAqLwotI2RlZmluZSBEQ19TTEVTCQkweDA1MDAwMDAwCS8qIFNldCBsaXR0bGUgZW5kaWFuIHN3YXAgbW9kZSAqLwotI2RlZmluZSBEQ19DTEVTCQkweDA3MDAwMDAwCS8qIENsZWFyIGxpdHRsZSBlbmRpYW4gc3dhcCBtb2RlICovCi0KLS8qIFN0YXR1cy4KLSovCi0jZGVmaW5lIElEQ19FTkFCTEVECTB4ODAwMDAwMDAJLyogQ2FjaGUgaXMgZW5hYmxlZCAqLwotI2RlZmluZSBJRENfQ0VSUjEJMHgwMDIwMDAwMAkvKiBDYWNoZSBlcnJvciAxICovCi0jZGVmaW5lIElEQ19DRVJSMgkweDAwMTAwMDAwCS8qIENhY2hlIGVycm9yIDIgKi8KLSNkZWZpbmUgSURDX0NFUlIzCTB4MDAwODAwMDAJLyogQ2FjaGUgZXJyb3IgMyAqLwotCi0jZGVmaW5lIERDX0RGV1QJCTB4NDAwMDAwMDAJLyogRGF0YSBjYWNoZSBpcyBmb3JjZWQgd3JpdGUgdGhyb3VnaCAqLwotI2RlZmluZSBEQ19MRVMJCTB4MjAwMDAwMDAJLyogQ2FjaGVzIGFyZSBsaXR0bGUgZW5kaWFuIG1vZGUgKi8KLSNlbmRpZiAvKiBDT05GSUdfOHh4ICovCi0KLSNlbmRpZgotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1wcGMvY2FjaGVmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTI0M2VmLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jYWNoZWZsdXNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tcHBjL2NhY2hlZmx1c2guaAotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZkZWYgX19LRVJORUxfXwotI2lmbmRlZiBfUFBDX0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfUFBDX0NBQ0hFRkxVU0hfSAotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotLyoKLSAqIE5vIGNhY2hlIGZsdXNoaW5nIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzcyBtYXBwaW5ncyBhcmUKLSAqIGNoYW5nZWQsIGJlY2F1c2UgdGhlIGNhY2hlcyBvbiBQb3dlclBDcyBhcmUgcGh5c2ljYWxseQotICogYWRkcmVzc2VkLiAgLS0gcGF1bHVzCi0gKiBBbHNvLCB3aGVuIFNNUCB3ZSB1c2UgdGhlIGNvaGVyZW5jeSAoTSkgYml0IG9mIHRoZQotICogQkFUcyBhbmQgUFRFcy4gIC0tIENvcnQKLSAqLwotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBhLCBiKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBwLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLQotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOwotCi0jZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pIFwKLWRvIHsgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyBcCi0gICAgIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSwgcGFnZSwgdmFkZHIsIGxlbik7IFwKLX0gd2hpbGUgKDApCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGUodm9pZCAqcGFnZV92YSk7Ci1leHRlcm4gdm9pZCBfX2ZsdXNoX2RjYWNoZV9pY2FjaGVfcGh5cyh1bnNpZ25lZCBsb25nIHBoeXNhZGRyKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9pY2FjaGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0jZW5kaWYgLyogX1BQQ19DQUNIRUZMVVNIX0ggKi8KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oIGIvaW5jbHVkZS9hc20tcHBjL2N1cnJlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0MTUwMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvY3VycmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2lmZGVmIF9fS0VSTkVMX18KLSNpZm5kZWYgX1BQQ19DVVJSRU5UX0gKLSNkZWZpbmUgX1BQQ19DVVJSRU5UX0gKLQotLyoKLSAqIFdlIGtlZXAgYGN1cnJlbnQnIGluIHIyIGZvciBzcGVlZC4KLSAqLwotcmVnaXN0ZXIgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyZW50IGFzbSAoInIyIik7Ci0KLSNlbmRpZiAvKiAhKF9QUENfQ1VSUkVOVF9IKSAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCmluZGV4IGZjNDRmN2MuLjUzOGUwYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaApAQCAtMSw5ICsxLDEyIEBACiAjaWZuZGVmIF9QUENfUEFHRV9ICiAjZGVmaW5lIF9QUENfUEFHRV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgorCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCi0jZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZGVmaW5lIFBBR0VfU0laRQkoQVNNX0NPTlNUKDEpIDw8IFBBR0VfU0hJRlQpCiAKIC8qCiAgKiBTdWJ0bGU6IHRoaXMgaXMgYW4gaW50IChub3QgYW4gdW5zaWduZWQgbG9uZykgYW5kIHNvIGl0CkBAIC0xNjksNSArMTcyLDggQEAKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAogCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQogCisvKiBXZSBkbyBkZWZpbmUgQVRfU1lTSU5GT19FSERSIGJ1dCBkb24ndCB1c2UgdGhlIGdhdGUgbWVjYW5pc20gKi8KKyNkZWZpbmUgX19IQVZFX0FSQ0hfR0FURV9BUkVBCQkxCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX1BQQ19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jYWNoZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjE0MGE3Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotI2lmbmRlZiBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAotI2RlZmluZSBfX0FSQ0hfUFBDNjRfQ0FDSEVfSAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLS8qIGJ5dGVzIHBlciBMMSBjYWNoZSBsaW5lICovCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUCTcKLSNkZWZpbmUgTDFfQ0FDSEVfQllURVMJKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCi0KLSNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCi0jZGVmaW5lIEwxX0NBQ0hFX1NISUZUX01BWCA3CS8qIGxhcmdlc3QgTDEgd2hpY2ggdGhpcyBhcmNoIHN1cHBvcnRzICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLXN0cnVjdCBwcGM2NF9jYWNoZXMgewotCXUzMglkc2l6ZTsJCQkvKiBMMSBkLWNhY2hlIHNpemUgKi8KLQl1MzIJZGxpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCSovCi0JdTMyCWxvZ19kbGluZV9zaXplOwotCXUzMglkbGluZXNfcGVyX3BhZ2U7Ci0JdTMyCWlzaXplOwkJCS8qIEwxIGktY2FjaGUgc2l6ZSAqLwotCXUzMglpbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJKi8KLQl1MzIJbG9nX2lsaW5lX3NpemU7Ci0JdTMyCWlsaW5lc19wZXJfcGFnZTsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgcHBjNjRfY2FjaGVzIHBwYzY0X2NhY2hlczsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tcHBjNjQvY2FjaGVmbHVzaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmJjMDhiLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2NhY2hlZmx1c2guaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgX1BQQzY0X0NBQ0hFRkxVU0hfSAotI2RlZmluZSBfUFBDNjRfQ0FDSEVGTFVTSF9ICi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgotCi0vKgotICogTm8gY2FjaGUgZmx1c2hpbmcgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzIG1hcHBpbmdzIGFyZQotICogY2hhbmdlZCwgYmVjYXVzZSB0aGUgY2FjaGVzIG9uIFBvd2VyUENzIGFyZSBwaHlzaWNhbGx5Ci0gKiBhZGRyZXNzZWQuCi0gKi8KLSNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX21tKG1tKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2bWFkZHIsIHBmbikJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0KLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQotCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICBpbnQgbGVuKTsKLQotZXh0ZXJuIHZvaWQgZmx1c2hfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9kY2FjaGVfcGh5c19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApOwotZXh0ZXJuIHZvaWQgZmx1c2hfaW52YWxfZGNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCk7Ci0KLSNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotZG8geyBtZW1jcHkoZHN0LCBzcmMsIGxlbik7IFwKLSAgICAgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLCBwYWdlLCB2YWRkciwgbGVuKTsgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0KLWV4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2ljYWNoZSh2b2lkICpwYWdlX3ZhKTsKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCi17Ci0JaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9DT0hFUkVOVF9JQ0FDSEUpKQotCQlfX2ZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgc3RvcCk7Ci19Ci0KLSNlbmRpZiAvKiBfUFBDNjRfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmggYi9pbmNsdWRlL2FzbS1wcGM2NC9jdXJyZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZGRjNjAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvY3VycmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI2lmbmRlZiBfUFBDNjRfQ1VSUkVOVF9ICi0jZGVmaW5lIF9QUEM2NF9DVVJSRU5UX0gKLQotI2luY2x1ZGUgPGFzbS9wYWNhLmg+Ci0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCi0gKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLSNkZWZpbmUgZ2V0X2N1cnJlbnQoKSAgIChnZXRfcGFjYSgpLT5fX2N1cnJlbnQpCi0jZGVmaW5lIGN1cnJlbnQgICAgICAgICBnZXRfY3VycmVudCgpCi0KLSNlbmRpZiAvKiAhKF9QUEM2NF9DVVJSRU5UX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9lZWguaCBiL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCmluZGV4IDQwYzhlYjUuLjg5ZjI2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L2VlaC5oCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogZWVoLmgKICAqIENvcHlyaWdodCAoQykgMjAwMSAgRGF2ZSBFbmdlYnJldHNlbiAmIFRvZGQgSW5nbGV0dCBJQk0gQ29ycG9yYXRpb24uCiAgKgpAQCAtNiwxMiArNiwxMiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqIAorICoKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCkBAIC0yNyw4ICsyNyw2IEBACiAKIHN0cnVjdCBwY2lfZGV2Owogc3RydWN0IGRldmljZV9ub2RlOwotc3RydWN0IGRldmljZV9ub2RlOwotc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwogCiAjaWZkZWYgQ09ORklHX0VFSAogCkBAIC0zNyw2ICszNSwxMCBAQAogI2RlZmluZSBFRUhfTU9ERV9OT0NIRUNLCSgxPDwxKQogI2RlZmluZSBFRUhfTU9ERV9JU09MQVRFRAkoMTw8MikKIAorLyogTWF4IG51bWJlciBvZiBFRUggZnJlZXplcyBhbGxvd2VkIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgZGV2aWNlCisgKiB0byBiZSBwZXJtYW5lbnRseSBkaXNhYmxlZC4gKi8KKyNkZWZpbmUgRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMgNQorCiB2b2lkIF9faW5pdCBlZWhfaW5pdCh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgZWVoX2NoZWNrX2ZhaWx1cmUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbiwKIAkJCQl1bnNpZ25lZCBsb25nIHZhbCk7CkBAIC01OSwzNiArNjEsMTQgQEAKICAqIGVlaF9yZW1vdmVfZGV2aWNlIC0gdW5kbyBFRUggc2V0dXAgZm9yIHRoZSBpbmRpY2F0ZWQgcGNpIGRldmljZQogICogQGRldjogcGNpIGRldmljZSB0byBiZSByZW1vdmVkCiAgKgotICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSB3aGVuIGEgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSBhIHJ1bm5pbmcKLSAqIHN5c3RlbSAoZS5nLiBieSBob3RwbHVnIG9yIGRscGFyKS4KKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZCBmcm9tCisgKiBhIHJ1bm5pbmcgc3lzdGVtIChlLmcuIGJ5IGhvdHBsdWcgb3IgZGxwYXIpLiAgSXQgdW5yZWdpc3RlcnMKKyAqIHRoZSBQQ0kgZGV2aWNlIGZyb20gdGhlIEVFSCBzdWJzeXN0ZW0uICBJL08gZXJyb3JzIGFmZmVjdGluZworICogdGhpcyBkZXZpY2Ugd2lsbCBubyBsb25nZXIgYmUgZGV0ZWN0ZWQgYWZ0ZXIgdGhpcyBjYWxsOyB0aHVzLAorICogaS9vIGVycm9ycyBhZmZlY3RpbmcgdGhpcyBzbG90IG1heSBsZWF2ZSB0aGlzIGRldmljZSB1bnVzYWJsZS4KICAqLwogdm9pZCBlZWhfcmVtb3ZlX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqKTsKIAotI2RlZmluZSBFRUhfRElTQUJMRQkJMAotI2RlZmluZSBFRUhfRU5BQkxFCQkxCi0jZGVmaW5lIEVFSF9SRUxFQVNFX0xPQURTVE9SRQkyCi0jZGVmaW5lIEVFSF9SRUxFQVNFX0RNQQkJMwotCi0vKioKLSAqIE5vdGlmaWVyIGV2ZW50IGZsYWdzLgotICovCi0jZGVmaW5lIEVFSF9OT1RJRllfRlJFRVpFICAxCi0KLS8qKiBFRUggZXZlbnQgLS0gc3RydWN0dXJlIGhvbGRpbmcgcGNpIHNsb3QgZGF0YSB0aGF0IGRlc2NyaWJlcwotICogIGEgY2hhbmdlIGluIHRoZSBpc29sYXRpb24gc3RhdHVzIG9mIGEgUENJIHNsb3QuICBBIHBvaW50ZXIKLSAqICB0byB0aGlzIHN0cnVjdCBpcyBwYXNzZWQgYXMgdGhlIGRhdGEgcG9pbnRlciBpbiBhIG5vdGlmeSBjYWxsYmFjay4KLSAqLwotc3RydWN0IGVlaF9ldmVudCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgICAgbGlzdDsKLQlzdHJ1Y3QgcGNpX2RldiAgICAgICAqZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAgICpkbjsKLQlpbnQgICAgICAgICAgICAgICAgICByZXNldF9zdGF0ZTsKLX07Ci0KLS8qKiBSZWdpc3RlciB0byBmaW5kIG91dCBhYm91dCBFRUggZXZlbnRzLiAqLwotaW50IGVlaF9yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLWludCBlZWhfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKLQogLyoqCiAgKiBFRUhfUE9TU0lCTEVfRVJST1IoKSAtLSB0ZXN0IGZvciBwb3NzaWJsZSBNTUlPIGZhaWx1cmUuCiAgKgpAQCAtMTI5LDcgKzEwOSw3IEBACiAjZGVmaW5lIEVFSF9JT19FUlJPUl9WQUxVRShzaXplKSAoLTFVTCkKICNlbmRpZiAvKiBDT05GSUdfRUVIICovCiAKLS8qIAorLyoKICAqIE1NSU8gcmVhZC93cml0ZSBvcGVyYXRpb25zIHdpdGggRUVIIHN1cHBvcnQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdTggZWVoX3JlYWRiKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYzY0L21tdS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKaW5kZXggNGMxOGE1Yy4uMWE3ZTBhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjNjQvbW11LmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgX1BQQzY0X01NVV9IXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKQEAgLTIyNCw5ICsyMjQsMTIgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBwc3RhcnQsIHVuc2lnbmVkIGxvbmcgbW9kZSwKIAkJCSAgICAgaW50IHBzaXplKTsKIAorZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOworZXh0ZXJuIHZvaWQgbW1faW5pdF9wcGM2NCh2b2lkKTsKIAogZXh0ZXJuIGxvbmcgcFNlcmllc19scGFyX2hwdGVfaW5zZXJ0KHVuc2lnbmVkIGxvbmcgaHB0ZV9ncm91cCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGxvbmcgcHJwbiwKQEAgLTI0NSw2ICsyNDgsNyBAQAogCiBleHRlcm4gdm9pZCBzdGFic19hbGxvYyh2b2lkKTsKIGV4dGVybiB2b2lkIHNsYl9pbml0aWFsaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgc3RhYl9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgc3RhYik7CiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvbW16b25lLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaAppbmRleCA4MGE3MDhlLi41NDk1OGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9tbXpvbmUuaApAQCAtOCwxNSArOCwxNCBAQAogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgogCi0vKiBnZW5lcmljIG5vbi1saW5lYXIgbWVtb3J5IHN1cHBvcnQ6CisvKgorICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgogICoKICAqIDEpIHdlIHdpbGwgbm90IHNwbGl0IG1lbW9yeSBpbnRvIG1vcmUgY2h1bmtzIHRoYW4gd2lsbCBmaXQgaW50byB0aGUKICAqICAgIGZsYWdzIGZpZWxkIG9mIHRoZSBzdHJ1Y3QgcGFnZQogICovCiAKLQogI2lmZGVmIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTCiAKIGV4dGVybiBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfZGF0YVtdOwpAQCAtMzAsMzYgKzI5LDExIEBACiAgKi8KIAogZXh0ZXJuIGludCBudW1hX2NwdV9sb29rdXBfdGFibGVbXTsKLWV4dGVybiBjaGFyICpudW1hX21lbW9yeV9sb29rdXBfdGFibGU7CiBleHRlcm4gY3B1bWFza190IG51bWFfY3B1bWFza19sb29rdXBfdGFibGVbXTsKLWV4dGVybiBpbnQgbnJfY3B1c19pbl9ub2RlW107Ci0KLS8qIDE2TUIgcmVnaW9ucyAqLwotI2RlZmluZSBNRU1PUllfSU5DUkVNRU5UX1NISUZUIDI0Ci0jZGVmaW5lIE1FTU9SWV9JTkNSRU1FTlQgKDFVTCA8PCBNRU1PUllfSU5DUkVNRU5UX1NISUZUKQotCi0vKiBOVU1BIGRlYnVnZ2luZywgd2lsbCBub3Qgd29yayBvbiBhIERMUEFSIG1hY2hpbmUgKi8KLSN1bmRlZiBERUJVR19OVU1BCi0KLXN0YXRpYyBpbmxpbmUgaW50IHBhX3RvX25pZCh1bnNpZ25lZCBsb25nIHBhKQotewotCWludCBuaWQ7Ci0KLQluaWQgPSBudW1hX21lbW9yeV9sb29rdXBfdGFibGVbcGEgPj4gTUVNT1JZX0lOQ1JFTUVOVF9TSElGVF07Ci0KLSNpZmRlZiBERUJVR19OVU1BCi0JLyogdGhlIHBoeXNpY2FsIGFkZHJlc3MgcGFzc2VkIGluIGlzIG5vdCBpbiB0aGUgbWFwIGZvciB0aGUgc3lzdGVtICovCi0JaWYgKG5pZCA9PSAtMSkgewotCQlwcmludGsoImJhZCBhZGRyZXNzOiAlbHhcbiIsIHBhKTsKLQkJQlVHKCk7Ci0JfQorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X3BmbjsKICNlbmRpZgogCi0JcmV0dXJuIG5pZDsKLX0KLQotI2RlZmluZSBub2RlX2xvY2FsbnIocGZuLCBuaWQpCSgocGZuKSAtIE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbikKLQogLyoKICAqIEZvbGxvd2luZyBhcmUgbWFjcm9zIHRoYXQgZWFjaCBudW1hIGltcGxtZW50YXRpb24gbXVzdCBkZWZpbmUuCiAgKi8KQEAgLTY3LDM5ICs0MSwxMCBAQAogI2RlZmluZSBub2RlX3N0YXJ0X3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4pCiAjZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpCShOT0RFX0RBVEEobmlkKS0+bm9kZV9lbmRfcGZuKQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCi0vKgotICogR2l2ZW4gYSBrZXJuZWwgYWRkcmVzcywgZmluZCB0aGUgaG9tZSBub2RlIG9mIHRoZSB1bmRlcmx5aW5nIG1lbW9yeS4KLSAqLwotI2RlZmluZSBrdmFkZHJfdG9fbmlkKGthZGRyKQlwYV90b19uaWQoX19wYShrYWRkcikpCi0KLSNkZWZpbmUgcGZuX3RvX25pZChwZm4pCQlwYV90b19uaWQoKHVuc2lnbmVkIGxvbmcpKHBmbikgPDwgUEFHRV9TSElGVCkKLQotLyogV3JpdHRlbiB0aGlzIHdheSB0byBhdm9pZCBldmFsdWF0aW5nIGFyZ3VtZW50cyB0d2ljZSAqLwotI2RlZmluZSBkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKSBcCi0oeyBcCi0JdW5zaWduZWQgbG9uZyBfX3RtcCA9IHBmbjsgXAotCShOT0RFX0RBVEEocGZuX3RvX25pZChfX3RtcCkpLT5ub2RlX21lbV9tYXAgKyBcCi0JIG5vZGVfbG9jYWxucihfX3RtcCwgcGZuX3RvX25pZChfX3RtcCkpKTsgXAotfSkKLQotI2RlZmluZSBkaXNjb250aWdtZW1fcGFnZV90b19wZm4ocCkgXAotKHsgXAotCXN0cnVjdCBwYWdlICpfX3RtcCA9IHA7IFwKLQkoKChfX3RtcCkgLSBwYWdlX3pvbmUoX190bXApLT56b25lX21lbV9tYXApICsgXAotCSBwYWdlX3pvbmUoX190bXApLT56b25lX3N0YXJ0X3Bmbik7IFwKLX0pCi0KLS8qIFhYWCBmaXggZm9yIGRpc2NvbnRpZ3VvdXMgcGh5c2ljYWwgbWVtb3J5ICovCi0jZGVmaW5lIGRpc2NvbnRpZ21lbV9wZm5fdmFsaWQocGZuKQkJKChwZm4pIDwgbnVtX3BoeXNwYWdlcykKLQotI2VuZGlmIC8qIENPTkZJR19ESVNDT05USUdNRU0gKi8KLQogI2VuZGlmIC8qIENPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKLSNkZWZpbmUgZWFybHlfcGZuX3RvX25pZChwZm4pICBwYV90b19uaWQoKCh1bnNpZ25lZCBsb25nKXBmbikgPDwgUEFHRV9TSElGVCkKK2V4dGVybiBpbnQgX19pbml0IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pOwogI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX01NWk9ORV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcGFnZS5oCmluZGV4IDgyY2UxODcuLjNlZmMzMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wYWdlLmgKQEAgLTExLDcgKzExLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+Ci0jaW5jbHVkZSA8YXNtL3BwY19hc20uaD4gLyogZm9yIEFTTV9DT05TVCAqLworI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKIC8qCiAgKiBXZSBzdXBwb3J0IGVpdGhlciA0ayBvciA2NGsgc29mdHdhcmUgcGFnZSBzaXplLiBXaGVuIHVzaW5nIDY0ayBwYWdlcwpAQCAtMjc5LDExICsyNzksNiBAQAogCiAjZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KSArIEtFUk5FTEJBU0UpKQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQlkaXNjb250aWdtZW1fcGFnZV90b19wZm4ocGFnZSkKLSNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQlkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJZGlzY29udGlnbWVtX3Bmbl92YWxpZChwZm4pCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogI2RlZmluZSBwZm5fdG9fcGFnZShwZm4pCShtZW1fbWFwICsgKHBmbikpCiAjZGVmaW5lIHBhZ2VfdG9fcGZuKHBhZ2UpCSgodW5zaWduZWQgbG9uZykoKHBhZ2UpIC0gbWVtX21hcCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wY2ktYnJpZGdlLmgKaW5kZXggNjBjZjhjOC4uZWZiZGFlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGNpLWJyaWRnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BjaS1icmlkZ2UuaApAQCAtNjMsNyArNjMsNiBAQAogCWludAlkZXZmbjsJCQkvKiBmb3IgcGNpIGRldmljZXMgKi8KIAlpbnQJZWVoX21vZGU7CQkvKiBTZWUgZWVoLmggZm9yIHBvc3NpYmxlIEVFSF9NT0RFcyAqLwogCWludAllZWhfY29uZmlnX2FkZHI7Ci0JaW50CWVlaF9jYXBhYmxlOwkJLyogZnJvbSBmaXJtd2FyZSAqLwogCWludCAJZWVoX2NoZWNrX2NvdW50OwkvKiAjIHRpbWVzIGRyaXZlciBpZ25vcmVkIGVycm9yICovCiAJaW50IAllZWhfZnJlZXplX2NvdW50OwkvKiAjIHRpbWVzIHRoaXMgZGV2aWNlIGZyb3plIHVwLiAqLwogCWludAllZWhfaXNfYnJpZGdlOwkJLyogZGV2aWNlIGlzIHBjaS10by1wY2kgYnJpZGdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1wcGM2NC9wZ2FsbG9jLmgKaW5kZXggOThkYTBlNC4uZGNmMzYyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3BnYWxsb2MuaApAQCAtMTAsOCArMTAsOCBAQAogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKICNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCi0jZGVmaW5lIFBNRF9DQUNIRV9OVU0JMAotI2RlZmluZSBQR0RfQ0FDSEVfTlVNCTEKKyNkZWZpbmUgUE1EX0NBQ0hFX05VTQkxCisjZGVmaW5lIFBHRF9DQUNIRV9OVU0JMgogI2Vsc2UKICNkZWZpbmUgUFRFX0NBQ0hFX05VTQkwCiAjZGVmaW5lIFBNRF9DQUNIRV9OVU0JMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oIGIvaW5jbHVkZS9hc20tcHBjNjQvcHJvbS5oCmluZGV4IDc2YmIwMjYuLmRkZmUxODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3Byb20uaAorKysgYi9pbmNsdWRlL2FzbS1wcGM2NC9wcm9tLmgKQEAgLTIwNCw2ICsyMDQsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvbV9pbml0KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCiAJdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBmaW5pc2hfZGV2aWNlX3RyZWUodm9pZCk7CitleHRlcm4gdm9pZCB1bmZsYXR0ZW5fZGV2aWNlX3RyZWUodm9pZCk7CitleHRlcm4gdm9pZCBlYXJseV9pbml0X2RldnRyZWUodm9pZCAqKTsKIGV4dGVybiBpbnQgZGV2aWNlX2lzX2NvbXBhdGlibGUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IG1hY2hpbmVfaXNfY29tcGF0aWJsZShjb25zdCBjaGFyICpjb21wYXQpOwogZXh0ZXJuIHVuc2lnbmVkIGNoYXIgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3NpZ25hbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzJkZjdkZC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1wcGM2NC9zaWduYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi0jaWZuZGVmIF9BU01QUEM2NF9TSUdOQUxfSAotI2RlZmluZSBfQVNNUFBDNjRfU0lHTkFMX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgotCi0vKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLwotc3RydWN0IHNpZ2luZm87Ci0KLSNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwk2NAotI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Ci19IHNpZ3NldF90OwotCi0jZGVmaW5lIFNJR0hVUAkJIDEKLSNkZWZpbmUgU0lHSU5UCQkgMgotI2RlZmluZSBTSUdRVUlUCQkgMwotI2RlZmluZSBTSUdJTEwJCSA0Ci0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLSNkZWZpbmUgU0lHQlVTCQkgNwotI2RlZmluZSBTSUdGUEUJCSA4Ci0jZGVmaW5lIFNJR0tJTEwJCSA5Ci0jZGVmaW5lIFNJR1VTUjEJCTEwCi0jZGVmaW5lIFNJR1NFR1YJCTExCi0jZGVmaW5lIFNJR1VTUjIJCTEyCi0jZGVmaW5lIFNJR1BJUEUJCTEzCi0jZGVmaW5lIFNJR0FMUk0JCTE0Ci0jZGVmaW5lIFNJR1RFUk0JCTE1Ci0jZGVmaW5lIFNJR1NUS0ZMVAkxNgotI2RlZmluZSBTSUdDSExECQkxNwotI2RlZmluZSBTSUdDT05UCQkxOAotI2RlZmluZSBTSUdTVE9QCQkxOQotI2RlZmluZSBTSUdUU1RQCQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdVUkcJCTIzCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdJTwkJMjkKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KLS8qCi0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0qLwotI2RlZmluZSBTSUdQV1IJCTMwCi0jZGVmaW5lIFNJR1NZUwkJMzEKLSNkZWZpbmUJU0lHVU5VU0VECTMxCi0KLS8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCi0jZGVmaW5lIFNJR1JUTUlOCTMyCi0jZGVmaW5lIFNJR1JUTUFYCV9OU0lHCi0KLS8qCi0gKiBTQV9GTEFHUyB2YWx1ZXM6Ci0gKgotICogU0FfT05TVEFDSyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCwgYnV0IHdpbGwgYWxsb3cgc2lnYWx0c3RhY2soMikuCi0gKiBTQV9JTlRFUlJVUFQgaXMgYSBuby1vcCwgYnV0IGxlZnQgZHVlIHRvIGhpc3RvcmljYWwgcmVhc29ucy4gVXNlIHRoZQotICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KLSAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLSAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgotICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCi0gKgotICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQotICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgotICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxdQotI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMnUKLSNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0dQotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDB1Ci0jZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMHUKLSNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwdQotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMHUKLQotI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgotI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAotI2RlZmluZSBTQV9JTlRFUlJVUFQJMHgyMDAwMDAwMHUgLyogZHVtbXkgLS0gaWdub3JlZCAqLwotCi0jZGVmaW5lIFNBX1JFU1RPUkVSCTB4MDQwMDAwMDB1Ci0KLS8qIAotICogc2lnYWx0c3RhY2sgY29udHJvbHMKLSAqLwotI2RlZmluZSBTU19PTlNUQUNLCTEKLSNkZWZpbmUgU1NfRElTQUJMRQkyCi0KLSNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAotI2RlZmluZSBTSUdTVEtTWgk4MTkyCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQotc3RydWN0IG9sZF9zaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0Jb2xkX3NpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLX07Ci0KLXN0cnVjdCBzaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLQlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi1zdHJ1Y3Qga19zaWdhY3Rpb24gewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Ci0Jdm9pZCBfX3VzZXIgKnNzX3NwOwotCWludCBzc19mbGFnczsKLQlzaXplX3Qgc3Nfc2l6ZTsKLX0gc3RhY2tfdDsKLQotc3RydWN0IHB0X3JlZ3M7Ci1zdHJ1Y3QgdGltZXNwZWM7Ci1leHRlcm4gaW50IGRvX3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1leHRlcm4gaW50IGRvX3NpZ25hbDMyKHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLSNkZWZpbmUgcHRyYWNlX3NpZ25hbF9kZWxpdmVyKHJlZ3MsIGNvb2tpZSkgZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogX0FTTVBQQzY0X1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCmluZGV4IDBjZGQ2NmMuLmJmOWE2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbS5oCkBAIC0xNDksNiArMTQ5LDggQEAKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBfc3dpdGNoKHN0cnVjdCB0aHJlYWRfc3RydWN0ICpwcmV2LAogCQkJCSAgICBzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqbmV4dCk7CiAKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtsaW1pdDsKKwogZXh0ZXJuIGludCBwb3dlcnNhdmVfbmFwOwkvKiBzZXQgaWYgbmFwIG1vZGUgY2FuIGJlIHVzZWQgaW4gaWRsZSBsb29wICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGM2NC9zeXN0ZW1jZmcuaCBiL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbWNmZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yjg2YjUzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBwYzY0L3N5c3RlbWNmZy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotI2lmbmRlZiBfU1lTVEVNQ0ZHX0gKLSNkZWZpbmUgX1NZU1RFTUNGR19ICi0KLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIEJlcmduZXIgPGJlcmduZXJAdm5ldC5pYm0uY29tPiwgSUJNCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0vKiBDaGFuZ2UgQWN0aXZpdHk6Ci0gKiAyMDAyLzA5LzMwIDogYmVyZ25lciAgOiBDcmVhdGVkCi0gKiBFbmQgQ2hhbmdlIEFjdGl2aXR5IAotICovCi0KLS8qCi0gKiBJZiB0aGUgbWFqb3IgdmVyc2lvbiBjaGFuZ2VzIHdlIGFyZSBpbmNvbXBhdGlibGUuCi0gKiBNaW5vciB2ZXJzaW9uIGNoYW5nZXMgYXJlIGEgaGludC4KLSAqLwotI2RlZmluZSBTWVNURU1DRkdfTUFKT1IgMQotI2RlZmluZSBTWVNURU1DRkdfTUlOT1IgMQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Ci0KLSNkZWZpbmUgU1lTQ0FMTF9NQVBfU0laRSAgICAgICgoX19OUl9zeXNjYWxscyArIDMxKSAvIDMyKQotCi1zdHJ1Y3Qgc3lzdGVtY2ZnIHsKLQlfX3U4ICBleWVfY2F0Y2hlclsxNl07CQkvKiBFeWVjYXRjaGVyOiBTWVNURU1DRkc6UFBDNjQJMHgwMCAqLwotCXN0cnVjdCB7CQkJLyogU3lzdGVtY2ZnIHZlcnNpb24gbnVtYmVycwkgICAgICovCi0JCV9fdTMyIG1ham9yOwkJLyogTWFqb3IgbnVtYmVyCQkJMHgxMCAqLwotCQlfX3UzMiBtaW5vcjsJCS8qIE1pbm9yIG51bWJlcgkJCTB4MTQgKi8KLQl9IHZlcnNpb247Ci0KLQlfX3UzMiBwbGF0Zm9ybTsJCQkvKiBQbGF0Zm9ybSBmbGFncwkJMHgxOCAqLwotCV9fdTMyIHByb2Nlc3NvcjsJCS8qIFByb2Nlc3NvciB0eXBlCQkweDFDICovCi0JX191NjQgcHJvY2Vzc29yQ291bnQ7CQkvKiAjIG9mIHBoeXNpY2FsIHByb2Nlc3NvcnMJMHgyMCAqLwotCV9fdTY0IHBoeXNpY2FsTWVtb3J5U2l6ZTsJLyogU2l6ZSBvZiByZWFsIG1lbW9yeShCKQkweDI4ICovCi0JX191NjQgdGJfb3JpZ19zdGFtcDsJCS8qIFRpbWViYXNlIGF0IGJvb3QJCTB4MzAgKi8KLQlfX3U2NCB0Yl90aWNrc19wZXJfc2VjOwkJLyogVGltZWJhc2UgdGljcyAvIHNlYwkJMHgzOCAqLwotCV9fdTY0IHRiX3RvX3hzOwkJCS8qIEludmVyc2Ugb2YgVEIgdG8gMl4yMAkweDQwICovCi0JX191NjQgc3RhbXBfeHNlYzsJCS8qCQkJCTB4NDggKi8KLQlfX3U2NCB0Yl91cGRhdGVfY291bnQ7CQkvKiBUaW1lYmFzZSBhdG9taWNpdHkgY3RyCTB4NTAgKi8KLQlfX3UzMiB0el9taW51dGVzd2VzdDsJCS8qIE1pbnV0ZXMgd2VzdCBvZiBHcmVlbndpY2gJMHg1OCAqLwotCV9fdTMyIHR6X2RzdHRpbWU7CQkvKiBUeXBlIG9mIGRzdCBjb3JyZWN0aW9uCTB4NUMgKi8KLQkvKiBuZXh0IGZvdXIgYXJlIG5vIGxvbmdlciB1c2VkIGV4Y2VwdCB0byBiZSBleHBvcnRlZCB0byAvcHJvYyAqLwotCV9fdTMyIGRjYWNoZV9zaXplOwkJLyogTDEgZC1jYWNoZSBzaXplCQkweDYwICovCi0JX191MzIgZGNhY2hlX2xpbmVfc2l6ZTsJCS8qIEwxIGQtY2FjaGUgbGluZSBzaXplCQkweDY0ICovCi0JX191MzIgaWNhY2hlX3NpemU7CQkvKiBMMSBpLWNhY2hlIHNpemUJCTB4NjggKi8KLQlfX3UzMiBpY2FjaGVfbGluZV9zaXplOwkJLyogTDEgaS1jYWNoZSBsaW5lIHNpemUJCTB4NkMgKi8KLSAgIAlfX3UzMiBzeXNjYWxsX21hcF82NFtTWVNDQUxMX01BUF9TSVpFXTsgLyogbWFwIG9mIGF2YWlsYWJsZSBzeXNjYWxscyAweDcwICovCi0gICAJX191MzIgc3lzY2FsbF9tYXBfMzJbU1lTQ0FMTF9NQVBfU0laRV07IC8qIG1hcCBvZiBhdmFpbGFibGUgc3lzY2FsbHMgKi8KLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi1leHRlcm4gc3RydWN0IHN5c3RlbWNmZyAqc3lzdGVtY2ZnOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9TWVNURU1DRkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21zaS5oCmluZGV4IDg1YzQyN2UuLjM1NmUwZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tc2kuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXNpLmgKQEAgLTExLDggKzExLDYgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNkZWZpbmUgTEFTVF9ERVZJQ0VfVkVDVE9SCQkyMzIKLSNkZWZpbmUgTVNJX0RFU1RfTU9ERQkJCU1TSV9MT0dJQ0FMX01PREUKLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTEyCi0jZGVmaW5lIE1TSV9UQVJHRVRfQ1BVCQkJbG9naWNhbF9zbXBfcHJvY2Vzc29yX2lkKCkKKyNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJMTIKIAogI2VuZGlmIC8qIEFTTV9NU0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCmluZGV4IGM1N2NlNDAuLmI5ZmIyMTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKQEAgLTEzNSw1ICsxMzUsMTEgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1NNUAorI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQkJeDg2X2NwdV90b19hcGljaWRbY3B1XQorI2Vsc2UKKyNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCWJvb3RfY3B1X2lkCisjZW5kaWYKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IGM1NzY5YzYuLmFkMWEyMmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMzIsNiArMzIsOCBAQAogICovCiAjZGVmaW5lIENOX0lEWF9QUk9DCQkJMHgxCiAjZGVmaW5lIENOX1ZBTF9QUk9DCQkJMHgxCisjZGVmaW5lIENOX0lEWF9DSUZTCQkJMHgyCisjZGVmaW5lIENOX1ZBTF9DSUZTICAgICAgICAgICAgICAgICAgICAgMHgxCiAKICNkZWZpbmUgQ05fTkVUTElOS19VU0VSUwkJMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCA3N2FlNTVkLi5hYzhiMjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTEzMjksNyArMTMyOSw4IEBACiBleHRlcm4gaW50IGlkZXByb2JlX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkIGlkZV9zY2FuX3BjaWJ1cyhpbnQgc2Nhbl9kaXJlY3Rpb24pIF9faW5pdDsKLWV4dGVybiBpbnQgaWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlcik7CitleHRlcm4gaW50IF9faWRlX3BjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworI2RlZmluZSBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcihkKSBfX2lkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKGQsIFRISVNfTU9EVUxFKQogZXh0ZXJuIHZvaWQgaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKTsKIHZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqLCBpbnQsIGF0YV9pbmRleF90ICopOwogZXh0ZXJuIHZvaWQgaWRlX3NldHVwX3BjaV9ub2lzZSAoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKmQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIGIvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCmluZGV4IGQyMWMzMDUuLmZlMjZkNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKQEAgLTIxLDYgKzIxLDggQEAKICNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKICNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQogICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCkBAIC0xMDAsNyArMTAyLDcgQEAKIHN0cnVjdCBldGhoZHIgewogCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KIAl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KLQl1bnNpZ25lZCBzaG9ydAloX3Byb3RvOwkJLyogcGFja2V0IHR5cGUgSUQgZmllbGQJKi8KKwlfX2JlMTYJCWhfcHJvdG87CQkvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZAkqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGU4YzkzYjEuLmFkNTk5NjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTQwNCw2ICs0MDUsNyBAQAogCXVuc2lnbmVkIGxvbmcJCW13ZG1hX21hc2s7CiAJdW5zaWduZWQgbG9uZwkJdWRtYV9tYXNrOwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zICpwb3J0X29wczsKKwl2b2lkIAkJCSpwcml2YXRlX2RhdGE7CiB9OwogCiBzdHJ1Y3QgYXRhX3RpbWluZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBjNmVmY2U0Li45MzZmOGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTkyNyw2ICs5MjcsMTMgQEAKIGV4dGVybiBpbnQJCXdlaWdodF9wOwogZXh0ZXJuIGludAkJbmV0ZGV2X3NldF9tYXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcik7CiBleHRlcm4gaW50IHNrYl9jaGVja3N1bV9oZWxwKHN0cnVjdCBza19idWZmICpza2IsIGludCBpbndhcmQpOworI2lmZGVmIENPTkZJR19CVUcKK2V4dGVybiB2b2lkIG5ldGRldl9yeF9jc3VtX2ZhdWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZXRkZXZfcnhfY3N1bV9mYXVsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworfQorI2VuZGlmCiAvKiByeCBza2IgdGltZXN0YW1wcyAqLwogZXh0ZXJuIHZvaWQJCW5ldF9lbmFibGVfdGltZXN0YW1wKHZvaWQpOwogZXh0ZXJuIHZvaWQJCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaCBiL2luY2x1ZGUvbGludXgvcGNpLWFjcGkuaAppbmRleCA4NTcxMjZhLi40ODc3ZTM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYWNwaS5oCkBAIC00NywxNCArNDcsMTUgQEAKIAkJCQlPU0NfUENJX0VYUFJFU1NfQ0FQX1NUUlVDVFVSRV9DT05UUk9MKQogCiAjaWZkZWYgQ09ORklHX0FDUEkKLWV4dGVybiBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KHUzMiBmbGFncyk7CitleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldChhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBmbGFncyk7CiBleHRlcm4gYWNwaV9zdGF0dXMgcGNpX29zY19zdXBwb3J0X3NldCh1MzIgZmxhZ3MpOwogI2Vsc2UKICNpZiAhZGVmaW5lZChhY3BpX3N0YXR1cykKIHR5cGVkZWYgdTMyIAkJYWNwaV9zdGF0dXM7CiAjZGVmaW5lIEFFX0VSUk9SICAgICAgCShhY3BpX3N0YXR1cykgKDB4MDAwMSkKICNlbmRpZiAgICAKLXN0YXRpYyBpbmxpbmUgYWNwaV9zdGF0dXMgcGNpX29zY19jb250cm9sX3NldCh1MzIgZmxhZ3MpIHtyZXR1cm4gQUVfRVJST1I7fQorc3RhdGljIGlubGluZSBhY3BpX3N0YXR1cyBwY2lfb3NjX2NvbnRyb2xfc2V0KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGZsYWdzKQore3JldHVybiBBRV9FUlJPUjt9CiBzdGF0aWMgaW5saW5lIGFjcGlfc3RhdHVzIHBjaV9vc2Nfc3VwcG9ydF9zZXQodTMyIGZsYWdzKSB7cmV0dXJuIEFFX0VSUk9SO30gCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggMzU5NmFjOS4uZGU2OTBjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yMzYsNyArMjM2LDYgQEAKIHN0cnVjdCBwY2lfZHJpdmVyIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJY2hhciAqbmFtZTsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWRfdGFibGU7CS8qIG11c3QgYmUgbm9uLU5VTEwgZm9yIHByb2JlIHRvIGJlIGNhbGxlZCAqLwogCWludCAgKCpwcm9iZSkgIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwkvKiBOZXcgZGV2aWNlIGluc2VydGVkICovCiAJdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwkvKiBEZXZpY2UgcmVtb3ZlZCAoTlVMTCBpZiBub3QgYSBob3QtcGx1ZyBjYXBhYmxlIGRyaXZlcikgKi8KQEAgLTMzOCw2ICszMzcsNyBAQAogc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2RldmljZV9yZXZlcnNlICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CiBzdHJ1Y3QgcGNpX2RldiAqcGNpX2ZpbmRfc2xvdCAodW5zaWduZWQgaW50IGJ1cywgdW5zaWduZWQgaW50IGRldmZuKTsKIGludCBwY2lfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKK2ludCBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHBvcywgaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogc3RydWN0IHBjaV9idXMgKiBwY2lfZmluZF9uZXh0X2J1cyhjb25zdCBzdHJ1Y3QgcGNpX2J1cyAqZnJvbSk7CiAKQEAgLTQzMiw4ICs0MzIsMTMgQEAKIAkJCSAgIHZvaWQgKmFsaWduZl9kYXRhKTsKIHZvaWQgcGNpX2VuYWJsZV9icmlkZ2VzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCi0vKiBOZXctc3R5bGUgcHJvYmluZyBzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyAqLwotaW50IHBjaV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7CisvKiBQcm9wZXIgcHJvYmluZyBzdXBwb3J0aW5nIGhvdC1wbHVnZ2FibGUgZGV2aWNlcyAqLworaW50IF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqLCBzdHJ1Y3QgbW9kdWxlICopOworc3RhdGljIGlubGluZSBpbnQgcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyKQoreworCXJldHVybiBfX3BjaV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBUSElTX01PRFVMRSk7Cit9CisKIHZvaWQgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICopOwogdm9pZCBwY2lfcmVtb3ZlX2JlaGluZF9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKik7CiBzdHJ1Y3QgcGNpX2RyaXZlciAqcGNpX2Rldl9kcml2ZXIoY29uc3Qgc3RydWN0IHBjaV9kZXYgKik7CkBAIC01NDcsOSArNTUyLDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykgeyByZXR1cm4gLUVJTzsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSkgeyByZXR1cm4gLUVCVVNZO30KK3N0YXRpYyBpbmxpbmUgaW50IF9fcGNpX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgbW9kdWxlICpvd25lcikgeyByZXR1cm4gMDt9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBwY2lfZHJpdmVyICpkcnYpIHsgcmV0dXJuIDA7fQogc3RhdGljIGlubGluZSB2b2lkIHBjaV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgcGNpX2RyaXZlciAqZHJ2KSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9maW5kX2NhcGFiaWxpdHkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApIHtyZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3N0LCBpbnQgY2FwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwY2lfZmluZF9leHRfY2FwYWJpbGl0eSAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGNhcCkge3JldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIE5VTEw7IH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggMWExNjViNy4uMTdlMzM2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC00Myw0ICs0MywxOSBAQAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfYWRkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fZGV2aWNlX3B1dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAorc3RydWN0IHBsYXRmb3JtX2RyaXZlciB7CisJaW50ICgqcHJvYmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKwlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKK307CisKK2V4dGVybiBpbnQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICopOworCisjZGVmaW5lIHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpCWRldl9nZXRfZHJ2ZGF0YSgmKF9kZXYpLT5kZXYpCisjZGVmaW5lIHBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsZGF0YSkJZGV2X3NldF9kcnZkYXRhKCYoX2RldiktPmRldiwgKGRhdGEpKQorCiAjZW5kaWYgLyogX1BMQVRGT1JNX0RFVklDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggODMwMTAyMy4uMGE4ZWE4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0xMjM2LDggKzEyMzYsNyBAQAogZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20sCiAJCQkJCSAgICAgICBpbnQgb2Zmc2V0LCBzdHJ1Y3QgaW92ZWMgKnRvLAogCQkJCQkgICAgICAgaW50IHNpemUpOwotZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoY29uc3QKLQkJCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorZXh0ZXJuIGludAkgICAgICAgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCQlpbnQgaGxlbiwKIAkJCQkJCQlzdHJ1Y3QgaW92ZWMgKmlvdik7CiBleHRlcm4gdm9pZAkgICAgICAgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTEzMDUsNiArMTMwNCwzMCBAQAogCiBleHRlcm4gdm9pZCBfX25ldF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKy8qKgorICoJc2tiX2NoZWNrc3VtX2NvbXBsZXRlIC0gQ2FsY3VsYXRlIGNoZWNrc3VtIG9mIGFuIGVudGlyZSBwYWNrZXQKKyAqCUBza2I6IHBhY2tldCB0byBwcm9jZXNzCisgKgorICoJVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBjaGVja3N1bSBvdmVyIHRoZSBlbnRpcmUgcGFja2V0IHBsdXMKKyAqCXRoZSB2YWx1ZSBvZiBza2ItPmNzdW0uICBUaGUgbGF0dGVyIGNhbiBiZSB1c2VkIHRvIHN1cHBseSB0aGUKKyAqCWNoZWNrc3VtIG9mIGEgcHNldWRvIGhlYWRlciBhcyB1c2VkIGJ5IFRDUC9VRFAuICBJdCByZXR1cm5zIHRoZQorICoJY2hlY2tzdW0uCisgKgorICoJRm9yIHByb3RvY29scyB0aGF0IGNvbnRhaW4gY29tcGxldGUgY2hlY2tzdW1zIHN1Y2ggYXMgSUNNUC9UQ1AvVURQLAorICoJdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB2ZXJpZnkgdGhhdCBjaGVja3N1bSBvbiByZWNlaXZlZAorICoJcGFja2V0cy4gIEluIHRoYXQgY2FzZSB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB6ZXJvIGlmIHRoZQorICoJY2hlY2tzdW0gaXMgY29ycmVjdC4gIEluIHBhcnRpY3VsYXIsIHRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gemVybworICoJaWYgc2tiLT5pcF9zdW1tZWQgaXMgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlCisgKgloYXJkd2FyZSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGNoZWNrc3VtLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgJiYKKwkJX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKK30KKwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfcHV0KHN0cnVjdCBuZl9jb25udHJhY2sgKm5mY3QpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCAyMmNmNWUxLi5hYjI3OTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTM5MCw2ICszOTAsNyBAQAogCU5FVF9UQ1BfQklDX0JFVEE9MTA4LAogCU5FVF9JUFY0X0lDTVBfRVJST1JTX1VTRV9JTkJPVU5EX0lGQUREUj0xMDksCiAJTkVUX1RDUF9DT05HX0NPTlRST0w9MTEwLAorCU5FVF9UQ1BfQUJDPTExMSwKIH07CiAKIGVudW0gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggYWM0Y2E0NC4uMGUxZGE2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0zMDcsNiArMzA3LDIxIEBACiAJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIGR1cGxpY2F0ZV9zYWNrWzFdOyAvKiBELVNBQ0sgYmxvY2sgKi8KIAlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgc2VsZWN0aXZlX2Fja3NbNF07IC8qIFRoZSBTQUNLUyB0aGVtc2VsdmVzKi8KIAorCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayByZWN2X3NhY2tfY2FjaGVbNF07CisKKwkvKiBmcm9tIFNUQ1AsIHJldHJhbnMgcXVldWUgaGludGluZyAqLworCXN0cnVjdCBza19idWZmKiBsb3N0X3NrYl9oaW50OworCisJc3RydWN0IHNrX2J1ZmYgKnNjb3JlYm9hcmRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJldHJhbnNtaXRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKmZvcndhcmRfc2tiX2hpbnQ7CisJc3RydWN0IHNrX2J1ZmYgKmZhc3RwYXRoX3NrYl9oaW50OworCisJaW50ICAgICBmYXN0cGF0aF9jbnRfaGludDsKKwlpbnQgICAgIGxvc3RfY250X2hpbnQ7CisJaW50ICAgICByZXRyYW5zbWl0X2NudF9oaW50OworCWludCAgICAgZm9yd2FyZF9jbnRfaGludDsKKwogCV9fdTE2CWFkdm1zczsJCS8qIEFkdmVydGlzZWQgTVNTCQkJKi8KIAlfX3UxNglwcmlvcl9zc3RocmVzaDsgLyogc3N0aHJlc2ggc2F2ZWQgYXQgcmVjb3Zlcnkgc3RhcnQJKi8KIAlfX3UzMglsb3N0X291dDsJLyogTG9zdCBwYWNrZXRzCQkJKi8KQEAgLTMyNiw2ICszNDEsNyBAQAogCV9fdTMyCXNuZF91cDsJCS8qIFVyZ2VudCBwb2ludGVyCQkqLwogCiAJX191MzIJdG90YWxfcmV0cmFuczsJLyogVG90YWwgcmV0cmFuc21pdHMgZm9yIGVudGlyZSBjb25uZWN0aW9uICovCisJX191MzIJYnl0ZXNfYWNrZWQ7CS8qIEFwcHJvcHJpYXRlIEJ5dGUgQ291bnRpbmcgLSBSRkMzNDY1ICovCiAKIAl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV90aW1lOwkgIC8qIHRpbWUgYmVmb3JlIGtlZXAgYWxpdmUgdGFrZXMgcGxhY2UgKi8KIAl1bnNpZ25lZCBpbnQJCWtlZXBhbGl2ZV9pbnR2bDsgIC8qIHRpbWUgaW50ZXJ2YWwgYmV0d2VlbiBrZWVwIGFsaXZlIHByb2JlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGZmMTNjNGMuLjk4MmI0ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTEyNDcsNiArMTI0NywxMiBAQAogCQkgICAgIChza2IgIT0gKHN0cnVjdCBza19idWZmICopJihzayktPnNrX3dyaXRlX3F1ZXVlKTsJXAogCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKIAorLypmcm9tIFNUQ1AgZm9yIGZhc3QgU0FDSyBQcm9jZXNzKi8KKyNkZWZpbmUgc2tfc3RyZWFtX2Zvcl9yZXRyYW5zX3F1ZXVlX2Zyb20oc2tiLCBzaykJCQlcCisJCWZvciAoOyAoc2tiICE9IChzayktPnNrX3NlbmRfaGVhZCkgJiYgICAgICAgICAgICAgICAgICAgXAorCQkgICAgIChza2IgIT0gKHN0cnVjdCBza19idWZmICopJihzayktPnNrX3dyaXRlX3F1ZXVlKTsJXAorCQkgICAgIHNrYiA9IHNrYi0+bmV4dCkKKwogLyoKICAqCURlZmF1bHQgd3JpdGUgcG9saWN5IGFzIHNob3duIHRvIHVzZXIgc3BhY2UgdmlhIHBvbGwvc2VsZWN0L1NJR0lPCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggYzI0MzM5Yy4uMGY5ODQ4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KQEAgLTg4LDEwICs4OSwxMCBAQAogCQkJCSAqLwogCiAjZGVmaW5lIFRDUF9TWU5fUkVUUklFUwkgNQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYWN0aXZlIG9wZW5pbmcgYQotCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbnVtdW0JKi8KKwkJCQkgKiBjb25uZWN0aW9uOiB+MTgwc2VjIGlzIFJGQyBtaW5pbXVtCSovCiAKICNkZWZpbmUgVENQX1NZTkFDS19SRVRSSUVTIDUJLyogbnVtYmVyIG9mIHRpbWVzIHRvIHJldHJ5IHBhc3NpdmUgb3BlbmluZyBhCi0JCQkJICogY29ubmVjdGlvbjogfjE4MHNlYyBpcyBSRkMgbWludW11bQkqLworCQkJCSAqIGNvbm5lY3Rpb246IH4xODBzZWMgaXMgUkZDIG1pbmltdW0JKi8KIAogCiAjZGVmaW5lIFRDUF9PUlBIQU5fUkVUUklFUyA3CS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBvbiBhbiBvcnBoYW5lZApAQCAtMTc5LDcgKzE4MCw3IEBACiAvKiBGbGFncyBpbiB0cC0+bm9uYWdsZSAqLwogI2RlZmluZSBUQ1BfTkFHTEVfT0ZGCQkxCS8qIE5hZ2xlJ3MgYWxnbyBpcyBkaXNhYmxlZCAqLwogI2RlZmluZSBUQ1BfTkFHTEVfQ09SSwkJMgkvKiBTb2NrZXQgaXMgY29ya2VkCSAgICAqLwotI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRlbiBmb3IgYWxyZWFkeSBxdWV1ZWQgZGF0YSAqLworI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRkZW4gZm9yIGFscmVhZHkgcXVldWVkIGRhdGEgKi8KIAogZXh0ZXJuIHN0cnVjdCBpbmV0X3RpbWV3YWl0X2RlYXRoX3JvdyB0Y3BfZGVhdGhfcm93OwogCkBAIC0yMTcsNiArMjE4LDcgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9tb2RlcmF0ZV9yY3ZidWY7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yOworZXh0ZXJuIGludCBzeXNjdGxfdGNwX2FiYzsKIAogZXh0ZXJuIGF0b21pY190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOwogZXh0ZXJuIGF0b21pY190IHRjcF9zb2NrZXRzX2FsbG9jYXRlZDsKQEAgLTU1MCwxMyArNTUyLDEzIEBACiAKIC8qIFRDUCB0aW1lc3RhbXBzIGFyZSBvbmx5IDMyLWJpdHMsIHRoaXMgY2F1c2VzIGEgc2xpZ2h0CiAgKiBjb21wbGljYXRpb24gb24gNjQtYml0IHN5c3RlbXMgc2luY2Ugd2Ugc3RvcmUgYSBzbmFwc2hvdAotICogb2YgamlmZmllcyBpbiB0aGUgYnVmZmVyIGNvbnRyb2wgYmxvY2tzIGJlbG93LiAgV2UgZGVjaWRlbHkKKyAqIG9mIGppZmZpZXMgaW4gdGhlIGJ1ZmZlciBjb250cm9sIGJsb2NrcyBiZWxvdy4gIFdlIGRlY2lkZWRseQogICogb25seSB1c2Ugb2YgdGhlIGxvdyAzMi1iaXRzIG9mIGppZmZpZXMgYW5kIGhpZGUgdGhlIHVnbHkKICAqIGNhc3RzIHdpdGggdGhlIGZvbGxvd2luZyBtYWNyby4KICAqLwogI2RlZmluZSB0Y3BfdGltZV9zdGFtcAkJKChfX3UzMikoamlmZmllcykpCiAKLS8qIFRoaXMgaXMgd2hhdCB0aGUgc2VuZCBwYWNrZXQgcXVldWVpbmcgZW5naW5lIHVzZXMgdG8gcGFzcworLyogVGhpcyBpcyB3aGF0IHRoZSBzZW5kIHBhY2tldCBxdWV1aW5nIGVuZ2luZSB1c2VzIHRvIHBhc3MKICAqIFRDUCBwZXItcGFja2V0IGNvbnRyb2wgaW5mb3JtYXRpb24gdG8gdGhlIHRyYW5zbWlzc2lvbgogICogY29kZS4gIFdlIGFsc28gc3RvcmUgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVycyBpbgogICogaGVyZSB0b28uICBUaGlzIGlzIDM2IGJ5dGVzIG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLApAQCAtNTk2LDcgKzU5OCw3IEBACiAjZGVmaW5lIFRDUENCX0VWRVJfUkVUUkFOUwkweDgwCS8qIEV2ZXIgcmV0cmFuc21pdHRlZCBmcmFtZQkqLwogI2RlZmluZSBUQ1BDQl9SRVRSQU5TCQkoVENQQ0JfU0FDS0VEX1JFVFJBTlN8VENQQ0JfRVZFUl9SRVRSQU5TKQogCi0jZGVmaW5lIFRDUENCX1VSRwkJMHgyMAkvKiBVcmdlbnQgcG9pbnRlciBhZHZlbmNlZCBoZXJlCSovCisjZGVmaW5lIFRDUENCX1VSRwkJMHgyMAkvKiBVcmdlbnQgcG9pbnRlciBhZHZhbmNlZCBoZXJlCSovCiAKICNkZWZpbmUgVENQQ0JfQVRfVEFJTAkJKFRDUENCX1VSRykKIApAQCAtNzY0LDYgKzc2NiwzMyBAQAogCQkJICAgICh0cC0+c25kX2N3bmQgPj4gMikpKTsKIH0KIAorLyoKKyAqIExpbmVhciBpbmNyZWFzZSBkdXJpbmcgc2xvdyBzdGFydAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCkKK3sKKwlpZiAoc3lzY3RsX3RjcF9hYmMpIHsKKwkJLyogUkZDMzQ2NTogU2xvdyBTdGFydAorCQkgKiBUQ1Agc2VuZGVyIFNIT1VMRCBpbmNyZWFzZSBjd25kIGJ5IHRoZSBudW1iZXIgb2YKKwkJICogcHJldmlvdXNseSB1bmFja25vd2xlZGdlZCBieXRlcyBBQ0tlZCBieSBlYWNoIGluY29taW5nCisJCSAqIGFja25vd2xlZGdtZW50LCBwcm92aWRlZCB0aGUgaW5jcmVhc2UgaXMgbm90IG1vcmUgdGhhbiBMCisJCSAqLworCQlpZiAodHAtPmJ5dGVzX2Fja2VkIDwgdHAtPm1zc19jYWNoZSkKKwkJCXJldHVybjsKKworCQkvKiBXZSBNQVkgaW5jcmVhc2UgYnkgMiBpZiBkaXNjb3ZlcmVkIGRlbGF5ZWQgYWNrICovCisJCWlmIChzeXNjdGxfdGNwX2FiYyA+IDEgJiYgdHAtPmJ5dGVzX2Fja2VkID4gMip0cC0+bXNzX2NhY2hlKSB7CisJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQkJCXRwLT5zbmRfY3duZCsrOworCQl9CisJfQorCXRwLT5ieXRlc19hY2tlZCA9IDA7CisKKwlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorCQl0cC0+c25kX2N3bmQrKzsKK30KKworCiBzdGF0aWMgaW5saW5lIHZvaWQgdGNwX3N5bmNfbGVmdF9vdXQoc3RydWN0IHRjcF9zb2NrICp0cCkKIHsKIAlpZiAodHAtPnJ4X29wdC5zYWNrX29rICYmCkBAIC03OTMsNiArODIyLDcgQEAKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAogCXRwLT5wcmlvcl9zc3RocmVzaCA9IDA7CisJdHAtPmJ5dGVzX2Fja2VkID0gMDsKIAlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2NhX3N0YXRlIDwgVENQX0NBX0NXUikgewogCQlfX3RjcF9lbnRlcl9jd3Ioc2spOwogCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfQ1dSKTsKQEAgLTgwOSw2ICs4MzksMjcgQEAKIAlyZXR1cm4gMzsKIH0KIAorLyogUkZDMjg2MSBDaGVjayB3aGV0aGVyIHdlIGFyZSBsaW1pdGVkIGJ5IGFwcGxpY2F0aW9uIG9yIGNvbmdlc3Rpb24gd2luZG93CisgKiBUaGlzIGlzIHRoZSBpbnZlcnNlIG9mIGN3bmQgY2hlY2sgaW4gdGNwX3Rzb19zaG91bGRfZGVmZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgdGNwX2lzX2N3bmRfbGltaXRlZChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHUzMiBpbl9mbGlnaHQpCit7CisJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIGxlZnQ7CisKKwlpZiAoaW5fZmxpZ2h0ID49IHRwLT5zbmRfY3duZCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIShzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfVFNPKSkKKwkJcmV0dXJuIDA7CisKKwlsZWZ0ID0gdHAtPnNuZF9jd25kIC0gaW5fZmxpZ2h0OworCWlmIChzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvcikKKwkJcmV0dXJuIGxlZnQgKiBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvciA8IHRwLT5zbmRfY3duZDsKKwllbHNlCisJCXJldHVybiBsZWZ0IDw9IHRjcF9tYXhfYnVyc3QodHApOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRjcF9taW5zaGFsbF91cGRhdGUoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IG1zcywgCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC04NTIsNyArOTAzLDcgQEAKIAogc3RhdGljIF9faW5saW5lX18gaW50IF9fdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuICh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCXJldHVybiBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNwX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMTU2LDYgKzEyMDcsMTUgQEAKIAlUQ1BfQUREX1NUQVRTX1VTRVIoVENQX01JQl9NQVhDT05OLCAtMSk7CiB9CiAKKy8qZnJvbSBTVENQICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYWxsX3JldHJhbnNfaGludHMoc3RydWN0IHRjcF9zb2NrICp0cCl7CisJdHAtPmxvc3Rfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5zY29yZWJvYXJkX3NrYl9oaW50ID0gTlVMTDsKKwl0cC0+cmV0cmFuc21pdF9za2JfaGludCA9IE5VTEw7CisJdHAtPmZvcndhcmRfc2tiX2hpbnQgPSBOVUxMOworCXRwLT5mYXN0cGF0aF9za2JfaGludCA9IE5VTEw7Cit9CisKIC8qIC9wcm9jICovCiBlbnVtIHRjcF9zZXFfc3RhdGVzIHsKIAlUQ1BfU0VRX1NUQVRFX0xJU1RFTklORywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCmluZGV4IDA3MmYzYTIuLjVmZjE0OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaApAQCAtNDMsNyArNDMsNyBAQAogICogSW5jcmVtZW50IHRoaXMgdmFsdWUgaWYgYW55IGNoYW5nZXMgdGhhdCBicmVhayB1c2Vyc3BhY2UgQUJJCiAgKiBjb21wYXRpYmlsaXR5IGFyZSBtYWRlLgogICovCi0jZGVmaW5lIElCX1VTRVJfVkVSQlNfQUJJX1ZFUlNJT04JMworI2RlZmluZSBJQl9VU0VSX1ZFUkJTX0FCSV9WRVJTSU9OCTQKIAogZW51bSB7CiAJSUJfVVNFUl9WRVJCU19DTURfR0VUX0NPTlRFWFQsCkBAIC0zMzMsNiArMzMzLDExIEBACiBzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9xcF9yZXNwIHsKIAlfX3UzMiBxcF9oYW5kbGU7CiAJX191MzIgcXBuOworCV9fdTMyIG1heF9zZW5kX3dyOworCV9fdTMyIG1heF9yZWN2X3dyOworCV9fdTMyIG1heF9zZW5kX3NnZTsKKwlfX3UzMiBtYXhfcmVjdl9zZ2U7CisJX191MzIgbWF4X2lubGluZV9kYXRhOwogfTsKIAogLyoKQEAgLTU1Miw5ICs1NTcsNyBAQAogCV9fdTMyIHNycV9oYW5kbGU7CiAJX191MzIgYXR0cl9tYXNrOwogCV9fdTMyIG1heF93cjsKLQlfX3UzMiBtYXhfc2dlOwogCV9fdTMyIHNycV9saW1pdDsKLQlfX3UzMiByZXNlcnZlZDsKIAlfX3U2NCBkcml2ZXJfZGF0YVswXTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggZjcyZDQ2ZC4uYTdmNGMzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTg4MSw3ICs4ODEsNyBAQAogCQkJCQkJc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAogCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXN0cm95X2NxKShzdHJ1Y3QgaWJfY3EgKmNxKTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnJlc2l6ZV9jcSkoc3RydWN0IGliX2NxICpjcSwgaW50ICpjcWUpOworCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcmVzaXplX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgY3FlKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnBvbGxfY3EpKHN0cnVjdCBpYl9jcSAqY3EsIGludCBudW1fZW50cmllcywKIAkJCQkJICAgICAgc3RydWN0IGliX3djICp3Yyk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpwZWVrX2NxKShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgd2NfY250KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zaWduYWwuYyBiL2tlcm5lbC9zaWduYWwuYwppbmRleCAxYmYzYzM5Li44MDc4OWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCiAJcHNpZyA9IHRzay0+cGFyZW50LT5zaWdoYW5kOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwc2lnLT5zaWdsb2NrLCBmbGFncyk7Ci0JaWYgKHNpZyA9PSBTSUdDSExEICYmCisJaWYgKCF0c2stPnB0cmFjZSAmJiBzaWcgPT0gU0lHQ0hMRCAmJgogCSAgICAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOIHx8CiAJICAgICAocHNpZy0+YWN0aW9uW1NJR0NITEQtMV0uc2Euc2FfZmxhZ3MgJiBTQV9OT0NMRFdBSVQpKSkgewogCQkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IGM0M2IzZTIuLmJjZTkzM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYworKysgYi9rZXJuZWwvc3lzLmMKQEAgLTE0OTcsNiArMTQ5Nyw4IEBACiAKIERFQ0xBUkVfUldTRU0odXRzX3NlbSk7CiAKK0VYUE9SVF9TWU1CT0wodXRzX3NlbSk7CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqIG5hbWUpCiB7CiAJaW50IGVycm5vID0gMDsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCBmZjgxYjVjLi45ODcyMjViIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xMzMwLDcgKzEzMzAsNyBAQAogCQl9IGVsc2UKIAkJCXByaW50aygiXG4iKTsKIAotCQlmb3JfZWFjaF9jcHUoY3B1KSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwYWdlc2V0OwogCiAJCQlwYWdlc2V0ID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IGQyMTk0MzUuLjFiY2ZlZjUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtMzUwLDYgKzM1MCwyMCBAQAogCXJldHVybiAtRUZBVUxUOwogfQogCit1bnNpZ25lZCBpbnQgX19za2JfY2hlY2tzdW1fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bnNpZ25lZCBpbnQgc3VtOworCisJc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCWlmIChsaWtlbHkoIXN1bSkpIHsKKwkJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJCW5ldGRldl9yeF9jc3VtX2ZhdWx0KHNrYi0+ZGV2KTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9CisJcmV0dXJuIHN1bTsKK30KK0VYUE9SVF9TWU1CT0woX19za2JfY2hlY2tzdW1fY29tcGxldGUpOworCiAvKioKICAqCXNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjIC0gQ29weSBhbmQgY2hlY2t1bSBza2IgdG8gdXNlciBpb3ZlYy4KICAqCUBza2I6IHNrYnVmZgpAQCAtMzYzLDcgKzM3Nyw3IEBACiAgKgkJIC1FRkFVTFQgLSBmYXVsdCBkdXJpbmcgY29weS4gQmV3YXJlLCBpbiB0aGlzIGNhc2UgaW92ZWMKICAqCQkJICAgY2FuIGJlIG1vZGlmaWVkIQogICovCi1pbnQgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW1faW92ZWMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgaW50IGhsZW4sIHN0cnVjdCBpb3ZlYyAqaW92KQogewogCXVuc2lnbmVkIGludCBjc3VtOwpAQCAtMzc2LDggKzM5MCw3IEBACiAJCWlvdisrOwogCiAJaWYgKGlvdi0+aW92X2xlbiA8IGNodW5rKSB7Ci0JCWlmICgodW5zaWduZWQgc2hvcnQpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIGNodW5rICsgaGxlbiwKLQkJCQkJCQkgICBza2ItPmNzdW0pKSkKKwkJaWYgKF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpCiAJCQlnb3RvIGNzdW1fZXJyb3I7CiAJCWlmIChza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIGhsZW4sIGlvdiwgY2h1bmspKQogCQkJZ290byBmYXVsdDsKQEAgLTM4OCw2ICs0MDEsOCBAQAogCQkJZ290byBmYXVsdDsKIAkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoY3N1bSkpCiAJCQlnb3RvIGNzdW1fZXJyb3I7CisJCWlmICh1bmxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykpCisJCQluZXRkZXZfcnhfY3N1bV9mYXVsdChza2ItPmRldik7CiAJCWlvdi0+aW92X2xlbiAtPSBjaHVuazsKIAkJaW92LT5pb3ZfYmFzZSArPSBjaHVuazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDhkMTU0MTUuLjBiNDhlMjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0xMTA4LDYgKzExMDgsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBUYWtlIGFjdGlvbiB3aGVuIGhhcmR3YXJlIHJlY2VwdGlvbiBjaGVja3N1bSBlcnJvcnMgYXJlIGRldGVjdGVkLiAqLworI2lmZGVmIENPTkZJR19CVUcKK3ZvaWQgbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGh3IGNzdW0gZmFpbHVyZS5cbiIsIGRldi0+bmFtZSk7CisJCWR1bXBfc3RhY2soKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9yeF9jc3VtX2ZhdWx0KTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIC8qIEFjdHVhbGx5LCB3ZSBzaG91bGQgZWxpbWluYXRlIHRoaXMgY2hlY2sgYXMgc29vbiBhcyB3ZSBrbm93LCB0aGF0OgogICogMS4gSU9NTVUgaXMgcHJlc2VudCBhbmQgYWxsb3dzIHRvIG1hcCBhbGwgdGhlIG1lbW9yeS4KZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCA4MDJmZTExLi40OTQyNGE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC0xMDEsMTYgKzEwMSwyMCBAQAogc3RhdGljIGludCBjaGVja3N1bV91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgsCiAJCQkgICAgIHVuc2lnbmVkIHNob3J0IHVsZW4sIHUzMiBzYWRkciwgdTMyIGRhZGRyKQogewotCWlmICh1aC0+Y2hlY2sgPT0gMCkKKwl1bnNpZ25lZCBpbnQgcHN1bTsKKworCWlmICh1aC0+Y2hlY2sgPT0gMCB8fCBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpCi0JCXJldHVybiBjc3VtX3RjcHVkcF9tYWdpYygKLQkJCXNhZGRyLCBkYWRkciwgdWxlbiwgSVBQUk9UT19VRFAsIHNrYi0+Y3N1bSk7CisJcHN1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKIAotCXNrYi0+Y3N1bSA9IGNzdW1fdGNwdWRwX25vZm9sZChzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcgJiYKKwkgICAgISh1MTYpY3N1bV9mb2xkKGNzdW1fYWRkKHBzdW0sIHNrYi0+Y3N1bSkpKQorCQlyZXR1cm4gMDsKIAotCXJldHVybiBjc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpOworCXNrYi0+Y3N1bSA9IHBzdW07CisKKwlyZXR1cm4gX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKIH0KIAogLyoKQEAgLTQ4OSw3ICs0OTMsNyBAQAogCiAJaWYgKHVsZW4gIT0gbGVuKQogCQlnb3RvIG91dDsKLQlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpIDwgMCkKKwlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKIAlpZiAobnAtPmxvY2FsX2lwICYmIG5wLT5sb2NhbF9pcCAhPSBudG9obChpcGgtPmRhZGRyKSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCAzZjI1Y2FkLi5mODllNTVmIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTE2NjQsMTcgKzE2NjQsMTUgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKHNrLT5za19zaHV0ZG93biAmIFJDVl9TSFVURE9XTikgeworCQlydiA9IDA7CisJCWdvdG8gb3V0OworCX0KKwogCXJ2ID0gZG5fY2hlY2tfc3RhdGUoc2ssIE5VTEwsIDAsICZ0aW1lbywgZmxhZ3MpOwogCWlmIChydikKIAkJZ290byBvdXQ7CiAKLQlpZiAoc2stPnNrX3NodXRkb3duICYgUkNWX1NIVVRET1dOKSB7Ci0JCWlmICghKGZsYWdzICYgTVNHX05PU0lHTkFMKSkKLQkJCXNlbmRfc2lnKFNJR1BJUEUsIGN1cnJlbnQsIDApOwotCQlydiA9IC1FUElQRTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKGZsYWdzICYgfihNU0dfUEVFS3xNU0dfT09CfE1TR19XQUlUQUxMfE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUwpKSB7CiAJCXJ2ID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwpAQCAtMTkyOCw2ICsxOTI2LDggQEAKIAogCWlmIChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSB7CiAJCWVyciA9IC1FUElQRTsKKwkJaWYgKCEoZmxhZ3MgJiBNU0dfTk9TSUdOQUwpKQorCQkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCAxNzVlMDkzLi5lM2VjZWVjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC05MzQsMTEgKzkzNCwxMSBAQAogCWNhc2UgQ0hFQ0tTVU1fSFc6CiAJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkKIAkJCWJyZWFrOwotCQlMSU1JVF9ORVRERUJVRyhLRVJOX0RFQlVHICJpY21wIHY0IGh3IGNzdW0gZmFpbHVyZVxuIik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQ0hFQ0tTVU1fTk9ORToKLQkJaWYgKCh1MTYpY3N1bV9mb2xkKHNrYl9jaGVja3N1bShza2IsIDAsIHNrYi0+bGVuLCAwKSkpCisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQkJZ290byBlcnJvcjsKLQlkZWZhdWx0OjsKIAl9CiAKIAlpZiAoIXBza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IGM2MjQ3ZmMuLmMwNDYwN2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTg3MiwxMSArODcyLDE4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpIHx8IAotCSAgICAodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBsZW4sIDApKSkgewotCQlpbl9kZXZfcHV0KGluX2Rldik7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gMDsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlnbXBoZHIpKSkKKwkJZ290byBkcm9wOworCisJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCWNhc2UgQ0hFQ0tTVU1fSFc6CisJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQorCQkJZ290byBkcm9wOwogCX0KIAogCWloID0gc2tiLT5oLmlnbXBoOwpAQCAtOTA2LDYgKzkxMyw4IEBACiAJZGVmYXVsdDoKIAkJTkVUREVCVUcoS0VSTl9ERUJVRyAiTmV3IElHTVAgdHlwZT0lZCwgd2h5IHdlIGRvIG5vdCBrbm93IGFib3V0IGl0P1xuIiwgaWgtPnR5cGUpOwogCX0KKworZHJvcDoKIAlpbl9kZXZfcHV0KGluX2Rldik7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IDg5NmNlM2YuLjRlOWM3NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC01NzcsMTUgKzU3NywxNiBAQAogCQkJZ290byBkcm9wX25vbG9jazsKIAogCQlpZiAoZmxhZ3MmR1JFX0NTVU0pIHsKLQkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9IVykgeworCQkJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgeworCQkJY2FzZSBDSEVDS1NVTV9IVzoKIAkJCQljc3VtID0gKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKTsKLQkJCQlpZiAoY3N1bSkKLQkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQkJfQotCQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKLQkJCQlza2ItPmNzdW0gPSBza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCk7CisJCQkJaWYgKCFjc3VtKQorCQkJCQlicmVhazsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJCWNhc2UgQ0hFQ0tTVU1fTk9ORToKKwkJCQlza2ItPmNzdW0gPSAwOworCQkJCWNzdW0gPSBfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpOwogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7Ci0JCQkJY3N1bSA9ICh1MTYpY3N1bV9mb2xkKHNrYi0+Y3N1bSk7CiAJCQl9CiAJCQlvZmZzZXQgKz0gNDsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA1MTk4ZjNhLi5lNGQ2YjI2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CkBAIC0yMzAsMTkgKzIzMSwxNSBAQAogCWNhc2UgQ0hFQ0tTVU1fSFc6CiAJCWlmICghKHUxNiljc3VtX2ZvbGQoc2tiLT5jc3VtKSkgCiAJCQlicmVhazsKLQkJaWYgKExPR19JTlZBTElEKElQUFJPVE9fSUNNUCkpCi0JCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKLQkJCQkgICAgICAiaXBfY3RfaWNtcDogYmFkIEhXIElDTVAgY2hlY2tzdW0gIik7Ci0JCXJldHVybiAtTkZfQUNDRVBUOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENIRUNLU1VNX05PTkU6Ci0JCWlmICgodTE2KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgMCkpKSB7CisJCXNrYi0+Y3N1bSA9IDA7CisJCWlmIChfX3NrYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKSB7CiAJCQlpZiAoTE9HX0lOVkFMSUQoSVBQUk9UT19JQ01QKSkKIAkJCQluZl9sb2dfcGFja2V0KFBGX0lORVQsIDAsIHNrYiwgTlVMTCwgTlVMTCwgTlVMTCwKIAkJCQkJICAgICAgImlwX2N0X2ljbXA6IGJhZCBJQ01QIGNoZWNrc3VtICIpOwogCQkJcmV0dXJuIC1ORl9BQ0NFUFQ7CiAJCX0KLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CiAKIGNoZWNrc3VtX3NraXBwZWQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IDY1MjY4NTYuLjAxNDQ0YTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC02NDUsNiArNjQ1LDE0IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY190Y3BfY29uZ2VzdGlvbl9jb250cm9sLAogCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3RjcF9jb25nZXN0aW9uX2NvbnRyb2wsCiAJfSwKKwl7CisJCS5jdGxfbmFtZQk9IE5FVF9UQ1BfQUJDLAorCQkucHJvY25hbWUJPSAidGNwX2FiYyIsCisJCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2FiYywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCiAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzJiN2MyMi4uOWFjN2E0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTE2NDAsNyArMTY0MCw3IEBACiAJfSBlbHNlIGlmICh0Y3BfbmVlZF9yZXNldChvbGRfc3RhdGUpIHx8CiAJCSAgICh0cC0+c25kX254dCAhPSB0cC0+d3JpdGVfc2VxICYmCiAJCSAgICAoMSA8PCBvbGRfc3RhdGUpICYgKFRDUEZfQ0xPU0lORyB8IFRDUEZfTEFTVF9BQ0spKSkgewotCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jZSBvZiBMaW51eCB3cnQuIFJGQworCQkvKiBUaGUgbGFzdCBjaGVjayBhZGp1c3RzIGZvciBkaXNjcmVwYW5jeSBvZiBMaW51eCB3cnQuIFJGQwogCQkgKiBzdGF0ZXMKIAkJICovCiAJCXRjcF9zZW5kX2FjdGl2ZV9yZXNldChzaywgZ2ZwX2FueSgpKTsKQEAgLTE2NjksNiArMTY2OSw3IEBACiAJdHAtPnBhY2tldHNfb3V0ID0gMDsKIAl0cC0+c25kX3NzdGhyZXNoID0gMHg3ZmZmZmZmZjsKIAl0cC0+c25kX2N3bmRfY250ID0gMDsKKwl0cC0+Ynl0ZXNfYWNrZWQgPSAwOwogCXRjcF9zZXRfY2Ffc3RhdGUoc2ssIFRDUF9DQV9PcGVuKTsKIAl0Y3BfY2xlYXJfcmV0cmFucyh0cCk7CiAJaW5ldF9jc2tfZGVsYWNrX2luaXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2JpYy5jIGIvbmV0L2lwdjQvdGNwX2JpYy5jCmluZGV4IGFlMzVlMDYuLjFkMGNkODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9iaWMuYworKysgYi9uZXQvaXB2NC90Y3BfYmljLmMKQEAgLTIxNywxNyArMjE3LDE1IEBACiAKIAliaWN0Y3BfbG93X3V0aWxpemF0aW9uKHNrLCBkYXRhX2Fja2VkKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLQlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKLQkJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKwlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKwllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKIAotICAgICAgICAgICAgICAgIC8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCisJCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCiAJCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCBiYmYyZDY2Li5jN2NjNjJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTE4NiwyNCArMTg2LDMyIEBACiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0gICAgICAgIGlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgewotICAgICAgICAgICAgICAgIC8qIEluICJzYWZlIiBhcmVhLCBpbmNyZWFzZS4gKi8KLQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCXRwLT5zbmRfY3duZCsrOwotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KLQkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IDEgLyB0cC0+c25kX2N3bmQKLQkJICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKLQl9CisJLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLworICAgICAgICBpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpCisJCXRjcF9zbG93X3N0YXJ0KHRwKTsKKworIAkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LiAqLworCWVsc2UgaWYgKHN5c2N0bF90Y3BfYWJjKSB7CisgCQkvKiBSRkMzNDY1OiBBcHBwcmlhdGUgQnl0ZSBDb3VudAorIAkJICogaW5jcmVhc2Ugb25jZSBmb3IgZWFjaCBmdWxsIGN3bmQgYWNrZWQKKyAJCSAqLworIAkJaWYgKHRwLT5ieXRlc19hY2tlZCA+PSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZSkgeworIAkJCXRwLT5ieXRlc19hY2tlZCAtPSB0cC0+c25kX2N3bmQqdHAtPm1zc19jYWNoZTsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCX0KKyAJfSBlbHNlIHsKKyAJCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCisgCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB0cC0+c25kX2N3bmQpIHsKKyAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQorIAkJCQl0cC0+c25kX2N3bmQrKzsKKyAJCQl0cC0+c25kX2N3bmRfY250ID0gMDsKKyAJCX0gZWxzZQorIAkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKyAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYyBiL25ldC9pcHY0L3RjcF9oaWdoc3BlZWQuYwppbmRleCA2YWNjMDRiLi44MmIzYzE4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaGlnaHNwZWVkLmMKKysrIGIvbmV0L2lwdjQvdGNwX2hpZ2hzcGVlZC5jCkBAIC0xMTEsMTggKzExMSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBoc3RjcF9jb25nX2F2b2lkKHN0cnVjdCBzb2NrICpzaywgdTMyIGFkaywgdTMyIHJ0dCwKLQkJCSAgICAgdTMyIGluX2ZsaWdodCwgaW50IGdvb2QpCisJCQkgICAgIHUzMiBpbl9mbGlnaHQsIHUzMiBwa3RzX2Fja2VkKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBoc3RjcCAqY2EgPSBpbmV0X2Nza19jYShzayk7CiAKLQlpZiAoaW5fZmxpZ2h0IDwgdHAtPnNuZF9jd25kKQorCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkKIAkJcmV0dXJuOwogCi0JaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQl9IGVsc2UgeworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkKKwkJdGNwX3Nsb3dfc3RhcnQodHApOworCWVsc2UgewogCQkvKiBVcGRhdGUgQUlNRCBwYXJhbWV0ZXJzICovCiAJCWlmICh0cC0+c25kX2N3bmQgPiBoc3RjcF9haW1kX3ZhbHNbY2EtPmFpXS5jd25kKSB7CiAJCQl3aGlsZSAodHAtPnNuZF9jd25kID4gaHN0Y3BfYWltZF92YWxzW2NhLT5haV0uY3duZCAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2h0Y3AuYyBiL25ldC9pcHY0L3RjcF9odGNwLmMKaW5kZXggZTQ3YjM3OS4uMzI4NGNmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2h0Y3AuYworKysgYi9uZXQvaXB2NC90Y3BfaHRjcC5jCkBAIC0yMDcsMTQgKzIwNywxMyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBodGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAotCWlmIChpbl9mbGlnaHQgPCB0cC0+c25kX2N3bmQpCisJaWYgKCF0Y3BfaXNfY3duZF9saW1pdGVkKHNrLCBpbl9mbGlnaHQpKQogCQlyZXR1cm47CiAKLSAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKSB7Ci0gICAgICAgICAgICAgICAgLyogSW4gInNhZmUiIGFyZWEsIGluY3JlYXNlLiAqLwotCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJdHAtPnNuZF9jd25kKys7Ci0JfSBlbHNlIHsKKyAgICAgICAgaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQorCQl0Y3Bfc2xvd19zdGFydCh0cCk7CisJZWxzZSB7CisKIAkJbWVhc3VyZV9ydHQoc2spOwogCiAJCS8qIGtlZXAgdHJhY2sgb2YgbnVtYmVyIG9mIHJvdW5kLXRyaXAgdGltZXMgc2luY2UgbGFzdCBiYWNrb2ZmIGV2ZW50ICovCkBAIC0yMjQsNyArMjIzLDcgQEAKIAkJCWh0Y3BfYWxwaGFfdXBkYXRlKGNhKTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KKwkJLyogSW4gZGFuZ2Vyb3VzIGFyZWEsIGluY3JlYXNlIHNsb3dseS4KIAkJICogSW4gdGhlb3J5IHRoaXMgaXMgdHAtPnNuZF9jd25kICs9IGFscGhhIC8gdHAtPnNuZF9jd25kCiAJCSAqLwogCQlpZiAoKHRwLT5zbmRfY3duZF9jbnQrKyAqIGNhLT5hbHBoYSk+PjcgPj0gdHAtPnNuZF9jd25kKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHlibGEuYyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCmluZGV4IDc3YWRkNjMuLjQwZGJiMzggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9oeWJsYS5jCisrKyBiL25ldC9pcHY0L3RjcF9oeWJsYS5jCkBAIC0xMDAsMTIgKzEwMCwxMiBAQAogCQljYS0+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+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJfQotCX0KKwogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkKIAkJc2tiLT5jc3VtID0gfmNzdW1faXB2Nl9tYWdpYyhzYWRkciwgZGFkZHIsIHVsZW4sIElQUFJPVE9fVURQLCAwKTsKIApAQCAtNTIxLDggKzUxNSw3IEBACiAJCWlmICgheGZybTZfcG9saWN5X2NoZWNrKE5VTEwsIFhGUk1fUE9MSUNZX0lOLCBza2IpKQogCQkJZ290byBkaXNjYXJkOwogCi0JCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSAmJgotCQkgICAgKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChza2JfY2hlY2tzdW0oc2tiLCAwLCBza2ItPmxlbiwgc2tiLT5jc3VtKSkpCisJCWlmIChza2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAkJVURQNl9JTkNfU1RBVFNfQkgoVURQX01JQl9OT1BPUlRTKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL3RyYW5zcG9ydC5jIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCmluZGV4IDEyMmMwODYuLmRiZTYxMDUgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy90cmFuc3BvcnQuYworKysgYi9uZXQvcnhycGMvdHJhbnNwb3J0LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKQEAgLTQ3NSwxNSArNDc2LDExIEBACiAKIAkJLyogd2UnbGwgcHJvYmFibHkgbmVlZCB0byBjaGVja3N1bSBpdCAoZGlkbid0IGNhbGwKIAkJICogc29ja19yZWN2bXNnKSAqLwotCQlpZiAocGt0LT5pcF9zdW1tZWQgIT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKLQkJCWlmICgodW5zaWduZWQgc2hvcnQpCi0JCQkgICAgY3N1bV9mb2xkKHNrYl9jaGVja3N1bShwa3QsIDAsIHBrdC0+bGVuLAotCQkJCQkJICAgcGt0LT5jc3VtKSkpIHsKLQkJCQlrZnJlZV9za2IocGt0KTsKLQkJCQlyeHJwY19rcnhpb2RfcXVldWVfdHJhbnNwb3J0KHRyYW5zKTsKLQkJCQlfbGVhdmUoIiBDU1VNIGZhaWxlZCIpOwotCQkJCXJldHVybjsKLQkJCX0KKwkJaWYgKHNrYl9jaGVja3N1bV9jb21wbGV0ZShwa3QpKSB7CisJCQlrZnJlZV9za2IocGt0KTsKKwkJCXJ4cnBjX2tyeGlvZF9xdWV1ZV90cmFuc3BvcnQodHJhbnMpOworCQkJX2xlYXZlKCIgQ1NVTSBmYWlsZWQiKTsKKwkJCXJldHVybjsKIAkJfQogCiAJCWFkZHIgPSBwa3QtPm5oLmlwaC0+c2FkZHI7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NvY2tsaWIuYyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCmluZGV4IDhmOTdlOTAuLmViMzMwZDQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc29ja2xpYi5jCisrKyBiL25ldC9zdW5ycGMvc29ja2xpYi5jCkBAIC02LDYgKzYsOSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2IE9sYWYgS2lyY2ggPG9raXJAbW9uYWQuc3diLmRlPgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3VkcC5oPgpAQCAtMTY1LDYgKzE2OCw4IEBACiAJCXJldHVybiAtMTsKIAlpZiAoKHVuc2lnbmVkIHNob3J0KWNzdW1fZm9sZChkZXNjLmNzdW0pKQogCQlyZXR1cm4gLTE7CisJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkKKwkJbmV0ZGV2X3J4X2NzdW1fZmF1bHQoc2tiLT5kZXYpOwogCXJldHVybiAwOwogbm9fY2hlY2tzdW06CiAJaWYgKHhkcl9wYXJ0aWFsX2NvcHlfZnJvbV9za2IoeGRyLCAwLCAmZGVzYywgc2tiX3JlYWRfYml0cykgPCAwKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwppbmRleCBmMTZlN2NkLi5lNTBlN2NmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y3NvY2suYworKysgYi9uZXQvc3VucnBjL3N2Y3NvY2suYwpAQCAtNjIzLDEyICs2MjMsOSBAQAogCQkvKiB3ZSBjYW4gdXNlIGl0IGluLXBsYWNlICovCiAJCXJxc3RwLT5ycV9hcmcuaGVhZFswXS5pb3ZfYmFzZSA9IHNrYi0+ZGF0YSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKIAkJcnFzdHAtPnJxX2FyZy5oZWFkWzBdLmlvdl9sZW4gPSBsZW47Ci0JCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewotCQkJaWYgKCh1bnNpZ25lZCBzaG9ydCljc3VtX2ZvbGQoc2tiX2NoZWNrc3VtKHNrYiwgMCwgc2tiLT5sZW4sIHNrYi0+Y3N1bSkpKSB7Ci0JCQkJc2tiX2ZyZWVfZGF0YWdyYW0oc3Zzay0+c2tfc2ssIHNrYik7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYikpIHsKKwkJCXNrYl9mcmVlX2RhdGFncmFtKHN2c2stPnNrX3NrLCBza2IpOworCQkJcmV0dXJuIDA7CiAJCX0KIAkJcnFzdHAtPnJxX3NrYnVmZiA9IHNrYjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IGQxZjlkYTQuLmM5NmM4YTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0yNzUsOSArMjc1LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKl9kZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhMnh4X2FjOTdfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzbmRfY2FyZF90ICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKF9kZXYpOworCXNuZF9jYXJkX3QgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGNhcmQpCkBAIC0yODYsOSArMjg2LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHB4YTJ4eF9hYzk3X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpfZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXNuZF9jYXJkX3QgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoX2Rldik7CisJc25kX2NhcmRfdCAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2FyZCkKQEAgLTMwMiw3ICszMDIsNyBAQAogI2RlZmluZSBweGEyeHhfYWM5N19yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc25kX2NhcmRfdCAqY2FyZDsKIAlhYzk3X2J1c190ICphYzk3X2J1czsKQEAgLTMxNSw4ICszMTUsOCBAQAogCWlmICghY2FyZCkKIAkJZ290byBlcnI7CiAKLQljYXJkLT5kZXYgPSBkZXY7Ci0Jc3RybmNweShjYXJkLT5kcml2ZXIsIGRldi0+ZHJpdmVyLT5uYW1lLCBzaXplb2YoY2FyZC0+ZHJpdmVyKSk7CisJY2FyZC0+ZGV2ID0gJmRldi0+ZGV2OworCXN0cm5jcHkoY2FyZC0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZihjYXJkLT5kcml2ZXIpKTsKIAogCXJldCA9IHB4YTJ4eF9wY21fbmV3KGNhcmQsICZweGEyeHhfYWM5N19wY21fY2xpZW50LCAmcHhhMnh4X2FjOTdfcGNtKTsKIAlpZiAocmV0KQpAQCAtMzQ3LDEzICszNDcsMTMgQEAKIAlzbnByaW50ZihjYXJkLT5zaG9ydG5hbWUsIHNpemVvZihjYXJkLT5zaG9ydG5hbWUpLAogCQkgIiVzIiwgc25kX2FjOTdfZ2V0X3Nob3J0X25hbWUocHhhMnh4X2FjOTdfYWM5NykpOwogCXNucHJpbnRmKGNhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpLAotCQkgIiVzICglcykiLCBkZXYtPmRyaXZlci0+bmFtZSwgY2FyZC0+bWl4ZXJuYW1lKTsKKwkJICIlcyAoJXMpIiwgZGV2LT5kZXYuZHJpdmVyLT5uYW1lLCBjYXJkLT5taXhlcm5hbWUpOwogCiAJc25kX2NhcmRfc2V0X3BtX2NhbGxiYWNrKGNhcmQsIHB4YTJ4eF9hYzk3X2RvX3N1c3BlbmQsCiAJCQkJIHB4YTJ4eF9hYzk3X2RvX3Jlc3VtZSwgTlVMTCk7CiAJcmV0ID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKHJldCA9PSAwKSB7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTM2OCwxMyArMzY4LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBweGEyeHhfYWM5N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXNuZF9jYXJkX3QgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzbmRfY2FyZF90ICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChjYXJkKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCQlHQ1IgfD0gR0NSX0FDTElOS19PRkY7CiAJCWZyZWVfaXJxKElSUV9BQzk3LCBOVUxMKTsKIAkJcHhhX3NldF9ja2VuKENLRU4yX0FDOTcsIDApOwpAQCAtMzgzLDIzICszODMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHB4YTJ4eF9hYzk3X2RyaXZlciA9IHsKLQkubmFtZQkJPSAicHhhMnh4LWFjOTciLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0gewogCS5wcm9iZQkJPSBweGEyeHhfYWM5N19wcm9iZSwKIAkucmVtb3ZlCQk9IHB4YTJ4eF9hYzk3X3JlbW92ZSwKIAkuc3VzcGVuZAk9IHB4YTJ4eF9hYzk3X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGEyeHhfYWM5N19yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInB4YTJ4eC1hYzk3IiwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2FjOTdfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHB4YTJ4eF9hYzk3X2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcHhhMnh4X2FjOTdfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQocHhhMnh4X2FjOTdfaW5pdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2luaXQuYyBiL3NvdW5kL2NvcmUvaW5pdC5jCmluZGV4IGQ5ZWUyN2EuLjMzODEzZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaW5pdC5jCisrKyBiL3NvdW5kL2NvcmUvaW5pdC5jCkBAIC02NzQsMjMgKzY3NCwyNCBAQAogCXNuZF9jYXJkX3QgKmNhcmQ7CiB9OwogCi0jZGVmaW5lIGdldF9zbmRfZ2VuZXJpY19jYXJkKGRldikJY29udGFpbmVyX29mKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLCBzdHJ1Y3Qgc25kX2dlbmVyaWNfZGV2aWNlLCBwZGV2KS0+Y2FyZAorI2RlZmluZSBnZXRfc25kX2dlbmVyaWNfY2FyZChkZXYpCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzbmRfZ2VuZXJpY19kZXZpY2UsIHBkZXYpLT5jYXJkCiAKICNkZWZpbmUgU05EX0dFTkVSSUNfTkFNRQkic25kX2dlbmVyaWMiCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1zdGF0aWMgaW50IHNuZF9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworc3RhdGljIGludCBzbmRfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAjZW5kaWYKIAogLyogaW5pdGlhbGl6ZWQgaW4gc291bmQuYyAqLwotc3RydWN0IGRldmljZV9kcml2ZXIgc25kX2dlbmVyaWNfZHJpdmVyID0gewotCS5uYW1lCQk9IFNORF9HRU5FUklDX05BTUUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlciA9IHsKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHNuZF9nZW5lcmljX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzbmRfZ2VuZXJpY19yZXN1bWUsCiAjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBTTkRfR0VORVJJQ19OQU1FLAorCX0sCiB9OwogCiB2b2lkIHNuZF9nZW5lcmljX2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTgyMSw3ICs4MjIsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgogLyogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzIGZvciBzbmRfZ2VuZXJpYyBwbGF0Zm9ybSBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgc25kX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzbmRfY2FyZF90ICpjYXJkOwogCkBAIC04MzQsNyArODM1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBzbmRfZ2VuZXJpY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXNuZF9jYXJkX3QgKmNhcmQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCAxMTM5ZGQ4Li42ZTdjYWQxZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zb3VuZC5jCisrKyBiL3NvdW5kL2NvcmUvc291bmQuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2ZnNfZnNfa2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgU05EUlZfT1NfTUlOT1JTIDI1NgogCkBAIC0zMjksNyArMzI5LDcgQEAKICAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9HRU5FUklDX0RSSVZFUgotZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9nZW5lcmljX2RyaXZlcjsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBhbHNhX3NvdW5kX2luaXQodm9pZCkKQEAgLTM1Nyw3ICszNTcsNyBAQAogCX0KIAlzbmRfaW5mb19taW5vcl9yZWdpc3RlcigpOwogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLQlkcml2ZXJfcmVnaXN0ZXIoJnNuZF9nZW5lcmljX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbmRfZ2VuZXJpY19kcml2ZXIpOwogI2VuZGlmCiAJZm9yIChjb250cm9sbnVtID0gMDsgY29udHJvbG51bSA8IGNhcmRzX2xpbWl0OyBjb250cm9sbnVtKyspCiAJCWRldmZzX21rX2NkZXYoTUtERVYobWFqb3IsIGNvbnRyb2xudW08PDUpLCBTX0lGQ0hSIHwgZGV2aWNlX21vZGUsICJzbmQvY29udHJvbEMlZCIsIGNvbnRyb2xudW0pOwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCWRldmZzX3JlbW92ZSgic25kL2NvbnRyb2xDJWQiLCBjb250cm9sbnVtKTsKIAogI2lmZGVmIENPTkZJR19TTkRfR0VORVJJQ19EUklWRVIKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX2dlbmVyaWNfZHJpdmVyKTsKICNlbmRpZgogCXNuZF9pbmZvX21pbm9yX3VucmVnaXN0ZXIoKTsKIAlzbmRfaW5mb19kb25lKCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWQxODg5LmMgYi9zb3VuZC9wY2kvYWQxODg5LmMKaW5kZXggZTcyY2NkMS4uMWZkYWU2NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FkMTg4OS5jCisrKyBiL3NvdW5kL3BjaS9hZDE4ODkuYwpAQCAtMTA2Nyw3ICsxMDY3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGFkMTg4OV9wY2kgPSB7CiAJLm5hbWUgPSAiQUQxODg5IEF1ZGlvIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYWQxODg5X2lkcywKIAkucHJvYmUgPSBzbmRfYWQxODg5X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYWQxODg5X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggNGU3NmM0YS4uZmVmZmJlNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtMjQwMyw3ICsyNDAzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBTEkgNTQ1MSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2FsaV9pZHMsCiAJLnByb2JlID0gc25kX2FsaV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2FsaV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczQwMDAuYyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKaW5kZXggN2M2MTU2MWYuLjE5MDRkZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtNzY4LDcgKzc2OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQUxTNDAwMCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2FsczQwMDBfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2FsczQwMDBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2FsczQwMDBfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCBmNWRhZDkyLi44YmFlMTBkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xNjM1LDcgKzE2MzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkFUSSBJWFAgQUM5NyBjb250cm9sbGVyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYXRpaXhwX2lkcywKIAkucHJvYmUgPSBzbmRfYXRpaXhwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXRpaXhwX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMgYi9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKaW5kZXggMGNmMjAyMC4uMzE3NGI2NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCisrKyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwpAQCAtMTMwOSw3ICsxMzA5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJBVEkgSVhQIE1DOTcgY29udHJvbGxlciIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2F0aWl4cF9pZHMsCiAJLnByb2JlID0gc25kX2F0aWl4cF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2F0aWl4cF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKaW5kZXggNmFmM2IxMy4uZDk2NTYwOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCkBAIC0zNzMsNyArMzczLDYgQEAKIC8vIHBjaV9kcml2ZXIgZGVmaW5pdGlvbgogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9IENBUkRfTkFNRV9TSE9SVCwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdm9ydGV4X2lkcywKIAkucHJvYmUgPSBzbmRfdm9ydGV4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdm9ydGV4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXp0MzMyOC5jIGIvc291bmQvcGNpL2F6dDMzMjguYwppbmRleCBkYTk5YjFiLi5hYjczN2Q2IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTE4MzgsNyArMTgzOCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiQVpGMzMyOCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2F6ZjMzMjhfaWRzLAogCS5wcm9iZSA9IHNuZF9hemYzMzI4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfYXpmMzMyOF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCAwMWQ5OGVlLi44ZmVjYTIyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtODk3LDE0ICs4OTcsMTMgQEAKIC8qIGRlZmF1bHQgZW50cmllcyBmb3IgYWxsIEJ0ODd4IGNhcmRzIC0gaXQncyBub3QgZXhwb3J0ZWQgKi8KIC8qIGRyaXZlcl9kYXRhIGlzIHNldCB0byAwIHRvIGNhbGwgZGV0ZWN0aW9uICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2J0ODd4X2RlZmF1bHRfaWRzW10gPSB7Ci0JQlRfREVWSUNFKDg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCi0JQlRfREVWSUNFKDg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCisJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCisJQlRfREVWSUNFKFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCksCiAJeyB9CiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkJ0ODd4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfYnQ4N3hfaWRzLAogCS5wcm9iZSA9IHNuZF9idDg3eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2J0ODd4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKaW5kZXggZWU1OGQxNi4uMzg5ZDk2NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYwpAQCAtMTQ5OSw3ICsxNDk5LDYgQEAKIC8vIHBjaV9kcml2ZXIgZGVmaW5pdGlvbgogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJDQTAxMDYiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jYTAxMDZfaWRzLAogCS5wcm9iZSA9IHNuZF9jYTAxMDZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYTAxMDZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCA1N2U4ZTQzLi5kYjYwNTM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC0zMDUzLDcgKzMwNTMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkMtTWVkaWEgUENJIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfY21pcGNpX2lkcywKIAkucHJvYmUgPSBzbmRfY21pcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY21pcGNpX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0MjgxLmMgYi9zb3VuZC9wY2kvY3M0MjgxLmMKaW5kZXggYWVhMmM0Ny4uMDM0ZmYzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDI4MS5jCisrKyBiL3NvdW5kL3BjaS9jczQyODEuYwpAQCAtMjEwNiw3ICsyMTA2LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJDUzQyODEiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9jczQyODFfaWRzLAogCS5wcm9iZSA9IHNuZF9jczQyODFfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyODFfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IDMyYjRmODQuLmI5ZmZmNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtMTYzLDcgKzE2Myw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiU291bmQgRnVzaW9uIENTNDZ4eCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2NzNDZ4eF9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfY3M0Nnh4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF9jczQ2eHhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwppbmRleCBkZDFlYTlkLi43ODI3MGY4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCkBAIC0yMjMsNyArMjIzLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJFTVUxMEsxX0F1ZGlneSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2VtdTEwazFfaWRzLAogCS5wcm9iZSA9IHNuZF9jYXJkX2VtdTEwazFfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2VtdTEwazFfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IGNiYjY4OTQuLjc5NTU3NzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtMTYxMyw3ICsxNjEzLDYgQEAKIC8vIHBjaV9kcml2ZXIgZGVmaW5pdGlvbgogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJFTVUxMEsxWCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2VtdTEwazF4X2lkcywKIAkucHJvYmUgPSBzbmRfZW11MTBrMXhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lbXUxMGsxeF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VuczEzNzAuYyBiL3NvdW5kL3BjaS9lbnMxMzcwLmMKaW5kZXggOTJmZjdjNS4uMmRhYTU3NSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VuczEzNzAuYworKysgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCkBAIC0yMzg2LDcgKzIzODYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gRFJJVkVSX05BTUUsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2F1ZGlvcGNpX2lkcywKIAkucHJvYmUgPSBzbmRfYXVkaW9wY2lfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9hdWRpb3BjaV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IDc4ZjkwZGUuLmMxMzRmNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTE3NTgsNyArMTc1OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRVNTIEVTMTkzOCAoU29sby0xKSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2VzMTkzOF9pZHMsCiAJLnByb2JlID0gc25kX2VzMTkzOF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2VzMTkzOF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IGFjODI5NGUuLjUwMDc5ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTI3NjEsNyArMjc2MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRVMxOTY4IChFU1MgTWFlc3RybykiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9lczE5NjhfaWRzLAogCS5wcm9iZSA9IHNuZF9lczE5NjhfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9lczE5NjhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggNGM3YzhkMi4uNGUxZDM0MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ZtODAxLmMKKysrIGIvc291bmQvcGNpL2ZtODAxLmMKQEAgLTE0NTksNyArMTQ1OSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRk04MDEiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9mbTgwMV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfZm04MDFfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jYXJkX2ZtODAxX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCA5ZDE0MTJhLi5lZDUyNWMwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTE2MTYsNyArMTYxNiw2IEBACiAvKiBwY2lfZHJpdmVyIGRlZmluaXRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSERBIEludGVsIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBhenhfaWRzLAogCS5wcm9iZSA9IGF6eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AoYXp4X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKaW5kZXggNWFjYTM3Ny4uYmQ3MWJmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwpAQCAtMjczNSw3ICsyNzM1LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJQ0UxNzEyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaWNlMTcxMl9pZHMsCiAJLnByb2JlID0gc25kX2ljZTE3MTJfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9pY2UxNzEyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKaW5kZXggNWI0MjkzZi4uMGI1Mzg5ZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYwpAQCAtMjMzMiw3ICsyMzMyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJJQ0UxNzI0IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdnQxNzI0X2lkcywKIAkucHJvYmUgPSBzbmRfdnQxNzI0X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdnQxNzI0X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaW50ZWw4eDAuYyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCmluZGV4IDA4MDEwODMuLmNmNzgwMWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MC5jCisrKyBiL3NvdW5kL3BjaS9pbnRlbDh4MC5jCkBAIC0yODc2LDcgKzI4NzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkludGVsIElDSCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2ludGVsOHgwX2lkcywKIAkucHJvYmUgPSBzbmRfaW50ZWw4eDBfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9pbnRlbDh4MF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwbS5jIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCmluZGV4IGFjZmIxOTcuLmE0MjA5MTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKQEAgLTEzMTcsNyArMTMxNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiSW50ZWwgSUNIIE1vZGVtIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaW50ZWw4eDBtX2lkcywKIAkucHJvYmUgPSBzbmRfaW50ZWw4eDBtX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaW50ZWw4eDBtX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDU1NjFmZDQuLmExMTBkNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNTM0LDcgKzI1MzQsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gImtvcmcxMjEyIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfa29yZzEyMTJfaWRzLAogCS5wcm9iZSA9IHNuZF9rb3JnMTIxMl9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2tvcmcxMjEyX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWFlc3RybzMuYyBiL3NvdW5kL3BjaS9tYWVzdHJvMy5jCmluZGV4IDk5ZWI3NmM1Li5lZGU3YTc1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMjg1OCw3ICsyODU4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJNYWVzdHJvMyIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX20zX2lkcywKIAkucHJvYmUgPSBzbmRfbTNfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9tM19yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKaW5kZXggYzM0MWM5OS4uYjMwOTBhMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnQuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCkBAIC0xNDIzLDcgKzE0MjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIkRpZ2lncmFtIG1pWGFydCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX21peGFydF9pZHMsCiAJLnByb2JlID0gc25kX21peGFydF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21peGFydF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwppbmRleCBlN2FhMTUxLi4wODlkMjNiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYworKysgYi9zb3VuZC9wY2kvbm0yNTYvbm0yNTYuYwpAQCAtMTY3Myw3ICsxNjczLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJOZW9NYWdpYyAyNTYiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF9ubTI1Nl9pZHMsCiAJLnByb2JlID0gc25kX25tMjU2X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbm0yNTZfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggZTY2MjdiMC4uNzgzZGY3NiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTIwMTIsNyArMjAxMiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPQkJIlJNRSBEaWdpMzIiLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9CXNuZF9ybWUzMl9pZHMsCiAJLnByb2JlID0Jc25kX3JtZTMyX3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcChzbmRfcm1lMzJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5Ni5jIGIvc291bmQvcGNpL3JtZTk2LmMKaW5kZXggMGVkZGViMS4uNmQ0MjJlZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2LmMKKysrIGIvc291bmQvcGNpL3JtZTk2LmMKQEAgLTI0MTMsNyArMjQxMyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiUk1FIERpZ2k5NiIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3JtZTk2X2lkcywKIAkucHJvYmUgPSBzbmRfcm1lOTZfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9ybWU5Nl9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCmluZGV4IDg0NTE1OGIuLmQxNWZmYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKQEAgLTUwNjIsNyArNTA2Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAgICAgIlJNRSBIYW1tZXJmYWxsIERTUCIsCi0JLm93bmVyID0gICAgVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX2hkc3BfaWRzLAogCS5wcm9iZSA9ICAgIHNuZF9oZHNwX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfaGRzcF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKaW5kZXggNjBhMTE0MS4uYTFhZWY2ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCkBAIC0zNjM5LDcgKzM2MzksNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewogCS5uYW1lID0gIlJNRSBIYW1tZXJmYWxsIERTUCBNQURJIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfaGRzcG1faWRzLAogCS5wcm9iZSA9IHNuZF9oZHNwbV9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX2hkc3BtX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKaW5kZXggNTlmY2VmOS4uZjlkMGMxMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYwpAQCAtMjY1NCw3ICsyNjU0LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZQkgID0gIlJNRSBEaWdpOTY1MiAoSGFtbWVyZmFsbCkiLAotCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3JtZTk2NTJfaWRzLAogCS5wcm9iZQkgID0gc25kX3JtZTk2NTJfcHJvYmUsCiAJLnJlbW92ZQkgID0gX19kZXZleGl0X3Aoc25kX3JtZTk2NTJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMgYi9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCmluZGV4IDlhMzU0NzQuLmU5MmVmM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKKysrIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwpAQCAtMTUwMiw3ICsxNTAyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJTMyBTb25pY1ZpYmVzIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfc29uaWNfaWRzLAogCS5wcm9iZSA9IHNuZF9zb25pY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3NvbmljX3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKaW5kZXggYThjYThlMS4uOTQwZDUzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVHJpZGVudDREV2F2ZUF1ZGlvIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaWRfdGFibGUgPSBzbmRfdHJpZGVudF9pZHMsCiAJLnByb2JlID0gc25kX3RyaWRlbnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF90cmlkZW50X3JlbW92ZSksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCA1MjNlYWNlLi5mYWQyYTI0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTI0NzgsNyArMjQ3OCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiVklBIDgyeHggQXVkaW8iLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92aWE4Mnh4X2lkcywKIAkucHJvYmUgPSBzbmRfdmlhODJ4eF9wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX3ZpYTgyeHhfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCmluZGV4IDAxMWYwZmIuLmI4MzY2MGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKKysrIGIvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYwpAQCAtMTE5OCw3ICsxMTk4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKIAkubmFtZSA9ICJWSUEgODJ4eCBNb2RlbSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ZpYTgyeHhfbW9kZW1faWRzLAogCS5wcm9iZSA9IHNuZF92aWE4Mnh4X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdmlhODJ4eF9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwppbmRleCAyYTdhZDlkLi5kY2E2YmQyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdngyMjIvdngyMjIuYworKysgYi9zb3VuZC9wY2kvdngyMjIvdngyMjIuYwpAQCAtMjUyLDcgKzI1Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiRGlnaWdyYW0gVlgyMjIiLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5pZF90YWJsZSA9IHNuZF92eDIyMl9pZHMsCiAJLnByb2JlID0gc25kX3Z4MjIyX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfdngyMjJfcmVtb3ZlKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCmluZGV4IDFiYmJhMzIuLmQwMTMyMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKKysrIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYwpAQCAtMzQ0LDcgKzM0NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CiAJLm5hbWUgPSAiWWFtYWhhIERTLVhHIFBDSSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmlkX3RhYmxlID0gc25kX3ltZnBjaV9pZHMsCiAJLnByb2JlID0gc25kX2NhcmRfeW1mcGNpX3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY2FyZF95bWZwY2lfcmVtb3ZlKSwK