ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbS5oCmluZGV4IDM1YzRkZWYuLjY1M2E3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc20uaApAQCAtMzQsMTYgKzM0LDMxIEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAKIC8qIERyaXZlciBpZGVudGlmaWNhdGlvbiAqLwogI2RlZmluZSBEUklWRVJfTkFNRQkiaWJtYXNtIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAgIjAuNCIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJNYXggQXNib2NrIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAgIjEuMCIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgICJNYXggQXNib2NrIDxtYXNib2NrQHVzLmlibS5jb20+LCBWZXJub24gTWF1ZXJ5IDx2ZXJudXhAdXMuaWJtLmNvbT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICAgICAiSUJNIEFTTSBTZXJ2aWNlIFByb2Nlc3NvciBEcml2ZXIiCiAKICNkZWZpbmUgZXJyKG1zZykgcHJpbnRrKEtFUk5fRVJSICIlczogIiBtc2cgIlxuIiwgRFJJVkVSX05BTUUpCiAjZGVmaW5lIGluZm8obXNnKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBtc2cgIlxuIiwgRFJJVkVSX05BTUUpCiAKK2V4dGVybiBpbnQgaWJtYXNtX2RlYnVnOworI2RlZmluZSBkYmcoU1RSLCBBUkdTLi4uKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoaWJtYXNtX2RlYnVnKQkJCQlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBTVFIgLCAjI0FSR1MpOwlcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBjaGFyICpnZXRfdGltZXN0YW1wKGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJZG9fZ2V0dGltZW9mZGF5KCZub3cpOworCXNwcmludGYoYnVmLCAiJWx1LiVsdSIsIG5vdy50dl9zZWMsIG5vdy50dl91c2VjKTsKKwlyZXR1cm4gYnVmOworfQogCiAjZGVmaW5lIElCTUFTTV9DTURfUEVORElORwkwCQogI2RlZmluZSBJQk1BU01fQ01EX0NPTVBMRVRFCTEJCkBAIC0xMjEsNDEgKzEzNiwxMSBAQAogCXVuc2lnbmVkIGludAkJc3RvcHBlZDsKIH07CiAKLQotLyogcmVtb3RlIGNvbnNvbGUgZXZlbnRzICovCi1zdHJ1Y3QgbW91c2VfZXZlbnQgewotCWxvbmcJCXg7Ci0JbG9uZwkJeTsKLQl1bnNpZ25lZCBjaGFyCWJ1dHRvbnM7Ci0JdW5zaWduZWQgY2hhcgl0cmFuc2l0aW9uczsKK3N0cnVjdCBpYm1hc21fcmVtb3RlIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2IGtleWJkX2RldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2IG1vdXNlX2RldjsKIH07CiAKLXN0cnVjdCBrZXlib2FyZF9ldmVudCB7Ci0JdW5zaWduZWQgbG9uZwlrZXlfY29kZTsKLQl1bnNpZ25lZCBjaGFyCWtleV9kb3duOwotfTsKLQotc3RydWN0IHJlbW90ZV9ldmVudCB7Ci0JdW5zaWduZWQgbG9uZwl0eXBlOwotCXVuaW9uIHsKLQkJc3RydWN0IG1vdXNlX2V2ZW50CW1vdXNlOwotCQlzdHJ1Y3Qga2V5Ym9hcmRfZXZlbnQJa2V5Ym9hcmQ7Ci0JfSBkYXRhOwotfTsKLQotI2RlZmluZSBEUklWRVJfUkVNT1RFX1FVRVVFX1NJWkUgMjQwCi0KLXN0cnVjdCByZW1vdGVfcXVldWUgewotCXN0cnVjdCByZW1vdGVfZXZlbnQJKnN0YXJ0OwotCXN0cnVjdCByZW1vdGVfZXZlbnQJKmVuZDsKLQlzdHJ1Y3QgcmVtb3RlX2V2ZW50CSpyZWFkZXI7Ci0Jc3RydWN0IHJlbW90ZV9ldmVudAkqd3JpdGVyOwotCXVuc2lnbmVkIGludAkJc2l6ZTsKLQlpbnQJCQlvcGVuOwotCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7Ci19OwotCi0KIHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciB7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXNwaW5sb2NrX3QJCWxvY2s7CkBAIC0xNjgsNyArMTUzLDcgQEAKIAljaGFyCQkJZGlybmFtZVtJQk1BU01fTkFNRV9TSVpFXTsKIAljaGFyCQkJZGV2bmFtZVtJQk1BU01fTkFNRV9TSVpFXTsKIAl1bnNpZ25lZCBpbnQJCW51bWJlcjsKLQlzdHJ1Y3QgcmVtb3RlX3F1ZXVlCXJlbW90ZV9xdWV1ZTsKKwlzdHJ1Y3QgaWJtYXNtX3JlbW90ZQkqcmVtb3RlOwogCWludAkJCXNlcmlhbF9saW5lOwogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiB9OwpAQCAtMjEwLDExICsxOTUsOSBAQAogZXh0ZXJuIGlycXJldHVybl90IGlibWFzbV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICogZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIC8qIHJlbW90ZSBjb25zb2xlICovCi1leHRlcm4gdm9pZCBpYm1hc21faGFuZGxlX21vdXNlX2ludGVycnVwdChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKTsKLWV4dGVybiBpbnQgaWJtYXNtX2luaXRfcmVtb3RlX3F1ZXVlKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwotZXh0ZXJuIHZvaWQgaWJtYXNtX2ZyZWVfcmVtb3RlX3F1ZXVlKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwotZXh0ZXJuIHZvaWQgaWJtYXNtX2FkdmFuY2VfcmVhZGVyKHN0cnVjdCByZW1vdGVfcXVldWUgKnEsIHVuc2lnbmVkIGludCBuKTsKLWV4dGVybiBzaXplX3QgaWJtYXNtX2V2ZW50c19hdmFpbGFibGUoc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSk7CitleHRlcm4gdm9pZCBpYm1hc21faGFuZGxlX21vdXNlX2ludGVycnVwdChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gaW50IGlibWFzbV9pbml0X3JlbW90ZV9pbnB1dF9kZXYoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCk7CitleHRlcm4gdm9pZCBpYm1hc21fZnJlZV9yZW1vdGVfaW5wdXRfZGV2KHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3ApOwogCiAvKiBmaWxlIHN5c3RlbSAqLwogZXh0ZXJuIGludCBpYm1hc21mc19yZWdpc3Rlcih2b2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYwppbmRleCBjODdlZjdkLi5jYTgzOTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCkBAIC0zNyw5ICszNyw3IEBACiAgKiAgICB8ICAgfC0tIGV2ZW50CiAgKiAgICB8ICAgfC0tIHJldmVyc2VfaGVhcnRiZWF0CiAgKiAgICB8ICAgYC0tIHJlbW90ZV92aWRlbwotICogICAgfCAgICAgICB8LS0gY29ubmVjdGVkCiAgKiAgICB8ICAgICAgIHwtLSBkZXB0aAotICogICAgfCAgICAgICB8LS0gZXZlbnRzCiAgKiAgICB8ICAgICAgIHwtLSBoZWlnaHQKICAqICAgIHwgICAgICAgYC0tIHdpZHRoCiAgKiAgICAuCkBAIC01MCw5ICs0OCw3IEBACiAgKiAgICAgICAgfC0tIGV2ZW50CiAgKiAgICAgICAgfC0tIHJldmVyc2VfaGVhcnRiZWF0CiAgKiAgICAgICAgYC0tIHJlbW90ZV92aWRlbwotICogICAgICAgICAgICB8LS0gY29ubmVjdGVkCiAgKiAgICAgICAgICAgIHwtLSBkZXB0aAotICogICAgICAgICAgICB8LS0gZXZlbnRzCiAgKiAgICAgICAgICAgIHwtLSBoZWlnaHQKICAqICAgICAgICAgICAgYC0tIHdpZHRoCiAgKgpAQCAtNzUsMTQgKzcxLDYgQEAKICAqIHJlbW90ZV92aWRlby93aWR0aDogY29udHJvbCByZW1vdGUgZGlzcGxheSBzZXR0aW5ncwogICogCXdyaXRlOiBzZXQgdmFsdWUKICAqIAlyZWFkOiByZWFkIHZhbHVlCi0gKgotICogcmVtb3RlX3ZpZGVvL2Nvbm5lY3RlZAotICogCXJlYWQ6IHJldHVybiAiMSIgaWYgd2ViIGJyb3dzZXIgVk5DIGphdmEgYXBwbGV0IGlzIGNvbm5lY3RlZCwgCi0gKiAJCSIwIiBvdGhlcndpc2UKLSAqCi0gKiByZW1vdGVfdmlkZW8vZXZlbnRzCi0gKiAJcmVhZDogc2xlZXAgdW50aWwgYSByZW1vdGUgbW91c2Ugb3Iga2V5Ym9hcmQgZXZlbnQgb2NjdXJzLCB0aGVuIHJldHVybgotICogCQl0aGVuIGV2ZW50LgogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtNTkzLDc1ICs1ODEsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGludCByZW1vdGVfZXZlbnRfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3A7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxOwotCQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT51LmdlbmVyaWNfaXA7Ci0Jc3AgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcSA9ICZzcC0+cmVtb3RlX3F1ZXVlOwotCi0JLyogYWxsb3cgb25seSBvbmUgZXZlbnQgcmVhZGVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHEtPm9wZW4pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcS0+b3BlbiA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3AtPmxvY2ssIGZsYWdzKTsKLQotCWVuYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZW1vdGVfZXZlbnRfZmlsZV9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnNwLT5yZW1vdGVfcXVldWUud2FpdCk7Ci0Jc3AtPnJlbW90ZV9xdWV1ZS5vcGVuID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCByZW1vdGVfZXZlbnRfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQotewotCXN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqc3AgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSA9ICZzcC0+cmVtb3RlX3F1ZXVlOwotCXNpemVfdCBkYXRhX3NpemU7Ci0Jc3RydWN0IHJlbW90ZV9ldmVudCAqcmVhZGVyID0gcS0+cmVhZGVyOwotCXNpemVfdCBudW1fZXZlbnRzOwotCi0JaWYgKCpvZmZzZXQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IDEwMjQpCi0JCXJldHVybiAwOwotCWlmICgqb2Zmc2V0ICE9IDApCi0JCXJldHVybiAwOwotCi0JaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShxLT53YWl0LCBxLT5yZWFkZXIgIT0gcS0+d3JpdGVyKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCS8qIG9ubHkgZ2V0IG11bHRpcGxlcyBvZiBzdHJ1Y3QgcmVtb3RlX2V2ZW50ICovCi0JbnVtX2V2ZW50cyA9IG1pbigoY291bnQvc2l6ZW9mKHN0cnVjdCByZW1vdGVfZXZlbnQpKSwgaWJtYXNtX2V2ZW50c19hdmFpbGFibGUocSkpOwotCWlmICghbnVtX2V2ZW50cykKLQkJcmV0dXJuIDA7Ci0KLQlkYXRhX3NpemUgPSBudW1fZXZlbnRzICogc2l6ZW9mKHN0cnVjdCByZW1vdGVfZXZlbnQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHJlYWRlciwgZGF0YV9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpYm1hc21fYWR2YW5jZV9yZWFkZXIocSwgbnVtX2V2ZW50cyk7Ci0KLQlyZXR1cm4gZGF0YV9zaXplOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbW1hbmRfZm9wcyA9IHsKIAkub3BlbiA9CQljb21tYW5kX2ZpbGVfb3BlbiwKIAkucmVsZWFzZSA9CWNvbW1hbmRfZmlsZV9jbG9zZSwKQEAgLTY5MCwxMiArNjA5LDYgQEAKIAkud3JpdGUgPQlyZW1vdGVfc2V0dGluZ3NfZmlsZV93cml0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlbW90ZV9ldmVudF9mb3BzID0gewotCS5vcGVuID0JCXJlbW90ZV9ldmVudF9maWxlX29wZW4sCi0JLnJlbGVhc2UgPQlyZW1vdGVfZXZlbnRfZmlsZV9jbG9zZSwKLQkucmVhZCA9CQlyZW1vdGVfZXZlbnRfZmlsZV9yZWFkLAotfTsKLQogCiBzdGF0aWMgdm9pZCBpYm1hc21mc19jcmVhdGVfZmlsZXMgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBkZW50cnkgKnJvb3QpCiB7CkBAIC03MjEsNyArNjM0LDUgQEAKIAkJaWJtYXNtZnNfY3JlYXRlX2ZpbGUoc2IsIHJlbW90ZV9kaXIsICJ3aWR0aCIsICZyZW1vdGVfc2V0dGluZ3NfZm9wcywgKHZvaWQgKilkaXNwbGF5X3dpZHRoKHNwKSwgU19JUlVTUnxTX0lXVVNSKTsKIAkJaWJtYXNtZnNfY3JlYXRlX2ZpbGUoc2IsIHJlbW90ZV9kaXIsICJoZWlnaHQiLCAmcmVtb3RlX3NldHRpbmdzX2ZvcHMsICh2b2lkICopZGlzcGxheV9oZWlnaHQoc3ApLCBTX0lSVVNSfFNfSVdVU1IpOwogCQlpYm1hc21mc19jcmVhdGVfZmlsZShzYiwgcmVtb3RlX2RpciwgImRlcHRoIiwgJnJlbW90ZV9zZXR0aW5nc19mb3BzLCAodm9pZCAqKWRpc3BsYXlfZGVwdGgoc3ApLCBTX0lSVVNSfFNfSVdVU1IpOwotCQlpYm1hc21mc19jcmVhdGVfZmlsZShzYiwgcmVtb3RlX2RpciwgImNvbm5lY3RlZCIsICZyZW1vdGVfc2V0dGluZ3NfZm9wcywgKHZvaWQgKil2bmNfc3RhdHVzKHNwKSwgU19JUlVTUik7Ci0JCWlibWFzbWZzX2NyZWF0ZV9maWxlKHNiLCByZW1vdGVfZGlyLCAiZXZlbnRzIiwgJnJlbW90ZV9ldmVudF9mb3BzLCAodm9pZCAqKXNwLCBTX0lSVVNSKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL2xvd2xldmVsLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2xvd2xldmVsLmMKaW5kZXggNTE1NmRlMi4uNDc5NDlhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9sb3dsZXZlbC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vbG93bGV2ZWwuYwpAQCAtNDYsOCArNDYsOCBAQAogCiAJbWVzc2FnZSA9IGdldF9pMm9fbWVzc2FnZShzcC0+YmFzZV9hZGRyZXNzLCBtZmEpOwogCi0JbWVtY3B5KCZtZXNzYWdlLT5oZWFkZXIsICZoZWFkZXIsIHNpemVvZihzdHJ1Y3QgaTJvX2hlYWRlcikpOwotCW1lbWNweSgmbWVzc2FnZS0+ZGF0YSwgY29tbWFuZC0+YnVmZmVyLCBjb21tYW5kX3NpemUpOworCW1lbWNweV90b2lvKCZtZXNzYWdlLT5oZWFkZXIsICZoZWFkZXIsIHNpemVvZihzdHJ1Y3QgaTJvX2hlYWRlcikpOworCW1lbWNweV90b2lvKCZtZXNzYWdlLT5kYXRhLCBjb21tYW5kLT5idWZmZXIsIGNvbW1hbmRfc2l6ZSk7CiAKIAlzZXRfbWZhX2luYm91bmQoc3AtPmJhc2VfYWRkcmVzcywgbWZhKTsKIApAQCAtNTksMjMgKzU5LDI3IEBACiAJdTMyCW1mYTsKIAlzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwID0gKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqKWRldl9pZDsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcmVzcyA9IHNwLT5iYXNlX2FkZHJlc3M7CisJY2hhciB0c2J1ZlszMl07CiAKIAlpZiAoIXNwX2ludGVycnVwdF9wZW5kaW5nKGJhc2VfYWRkcmVzcykpCiAJCXJldHVybiBJUlFfTk9ORTsKIAorCWRiZygicmVzcG9uZCB0byBpbnRlcnJ1cHQgYXQgJXNcbiIsIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwogCWlmIChtb3VzZV9pbnRlcnJ1cHRfcGVuZGluZyhzcCkpIHsKLQkJaWJtYXNtX2hhbmRsZV9tb3VzZV9pbnRlcnJ1cHQoc3ApOwotCQltZmEgPSBnZXRfbWZhX291dGJvdW5kKGJhc2VfYWRkcmVzcyk7CisJCWlibWFzbV9oYW5kbGVfbW91c2VfaW50ZXJydXB0KHNwLCByZWdzKTsKIAkJY2xlYXJfbW91c2VfaW50ZXJydXB0KHNwKTsKLQkJc2V0X21mYV9vdXRib3VuZChiYXNlX2FkZHJlc3MsIG1mYSk7Ci0JCXJldHVybiBJUlFfSEFORExFRDsKIAl9CiAKIAltZmEgPSBnZXRfbWZhX291dGJvdW5kKGJhc2VfYWRkcmVzcyk7CiAJaWYgKHZhbGlkX21mYShtZmEpKSB7CiAJCXN0cnVjdCBpMm9fbWVzc2FnZSAqbXNnID0gZ2V0X2kyb19tZXNzYWdlKGJhc2VfYWRkcmVzcywgbWZhKTsKIAkJaWJtYXNtX3JlY2VpdmVfbWVzc2FnZShzcCwgJm1zZy0+ZGF0YSwgaW5jb21pbmdfZGF0YV9zaXplKG1zZykpOwotCX0KKwl9IGVsc2UKKwkJZGJnKCJkaWRuJ3QgZ2V0IGEgdmFsaWQgTUZBXG4iKTsKKwogCXNldF9tZmFfb3V0Ym91bmQoYmFzZV9hZGRyZXNzLCBtZmEpOworCWRiZygiZmluaXNoZWQgaW50ZXJydXB0IGF0ICAgJXNcbiIsIGdldF90aW1lc3RhbXAodHNidWYpKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMgYi9kcml2ZXJzL21pc2MvaWJtYXNtL21vZHVsZS5jCmluZGV4IDc3NzQzMmEuLjFmZGYwM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vbW9kdWxlLmMKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9tb2R1bGUuYwpAQCAtNTYsMTcgKzU2LDI2IEBACiAjaW5jbHVkZSAibG93bGV2ZWwuaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKIAoraW50IGlibWFzbV9kZWJ1ZyA9IDA7Cittb2R1bGVfcGFyYW0oaWJtYXNtX2RlYnVnLCBpbnQgLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGlibWFzbV9kZWJ1ZywgIiBTZXQgZGVidWcgbW9kZSBvbiBvciBvZmYiKTsKKwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpYm1hc21faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgZXJyLCByZXN1bHQgPSAtRU5PTUVNOworCWludCByZXN1bHQ7CiAJc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcDsKIAotCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlIGF0ICVzXG4iLAotCQkJRFJJVkVSX05BTUUsIHBjaV9uYW1lKHBkZXYpKTsKLQkJcmV0dXJuIGVycjsKKwlpZiAoKHJlc3VsdCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzdWx0OwogCX0KKwlpZiAoKHJlc3VsdCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgUENJIHJlc291cmNlc1xuIik7CisJCWdvdG8gZXJyb3JfcmVzb3VyY2VzOworCX0KKwkvKiB2bmMgY2xpZW50IHdvbid0IHdvcmsgd2l0aG91dCBidXMtbWFzdGVyaW5nICovCisJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKIAlzcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciksIEdGUF9LRVJORUwpOwogCWlmIChzcCA9PSBOVUxMKSB7CkBAIC03Niw2ICs4NSw5IEBACiAJfQogCW1lbXNldChzcCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvcikpOwogCisJc3AtPmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJSU5JVF9MSVNUX0hFQUQoJnNwLT5jb21tYW5kX3F1ZXVlKTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCAodm9pZCAqKXNwKTsKIAlzcC0+ZGV2ID0gJnBkZXYtPmRldjsKIAlzcC0+bnVtYmVyID0gcGRldi0+YnVzLT5udW1iZXI7CkBAIC0xMDEsMTUgKzExMyw2IEBACiAJCWdvdG8gZXJyb3JfaW9yZW1hcDsKIAl9CiAKLQlyZXN1bHQgPSBpYm1hc21faW5pdF9yZW1vdGVfcXVldWUoc3ApOwotCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycihzcC0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgcmVtb3RlIHF1ZXVlXG4iKTsKLQkJZ290byBlcnJvcl9yZW1vdGVfcXVldWU7Ci0JfQotCi0Jc3Bpbl9sb2NrX2luaXQoJnNwLT5sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmc3AtPmNvbW1hbmRfcXVldWUpOwotCiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEoc3AtPmlycSwgaWJtYXNtX2ludGVycnVwdF9oYW5kbGVyLCBTQV9TSElSUSwgc3AtPmRldm5hbWUsICh2b2lkKilzcCk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKHNwLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwpAQCAtMTE3LDcgKzEyMCwxMiBAQAogCX0KIAogCWVuYWJsZV9zcF9pbnRlcnJ1cHRzKHNwLT5iYXNlX2FkZHJlc3MpOwotCWRpc2FibGVfbW91c2VfaW50ZXJydXB0cyhzcCk7CisKKwlyZXN1bHQgPSBpYm1hc21faW5pdF9yZW1vdGVfaW5wdXRfZGV2KHNwKTsKKwlpZiAocmVzdWx0KSB7CisJCWRldl9lcnIoc3AtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHJlbW90ZSBxdWV1ZVxuIik7CisJCWdvdG8gZXJyb3Jfc2VuZF9tZXNzYWdlOworCX0KIAogCXJlc3VsdCA9IGlibWFzbV9zZW5kX2RyaXZlcl92cGQoc3ApOwogCWlmIChyZXN1bHQpIHsKQEAgLTEzMywzMCArMTQxLDI1IEBACiAKIAlpYm1hc21fcmVnaXN0ZXJfdWFydChzcCk7CiAKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJXQVJOSU5HOiBUaGlzIHNvZnR3YXJlIG1heSBub3QgYmUgc3VwcG9ydGVkIG9yIGZ1bmN0aW9uXG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJjb3JyZWN0bHkgb24geW91ciBJQk0gc2VydmVyLiBQbGVhc2UgY29uc3VsdCB0aGUgSUJNXG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJTZXJ2ZXJQcm92ZW4gd2Vic2l0ZVxuIik7Ci0JZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LCAiaHR0cDovL3d3dy5wYy5pYm0uY29tL3d3L2VzZXJ2ZXIveHNlcmllcy9zZXJ2ZXJwcm92ZW5cbiIpOwotCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgImZvciBpbmZvcm1hdGlvbiBvbiB0aGUgc3BlY2lmaWMgZHJpdmVyIGxldmVsIGFuZCBzdXBwb3J0XG4iKTsKLQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJzdGF0ZW1lbnQgZm9yIHlvdXIgSUJNIHNlcnZlci5cbiIpOwotCiAJcmV0dXJuIDA7CiAKIGVycm9yX3NlbmRfbWVzc2FnZToKIAlkaXNhYmxlX3NwX2ludGVycnVwdHMoc3AtPmJhc2VfYWRkcmVzcyk7CisJaWJtYXNtX2ZyZWVfcmVtb3RlX2lucHV0X2RldihzcCk7CiAJZnJlZV9pcnEoc3AtPmlycSwgKHZvaWQgKilzcCk7CiBlcnJvcl9yZXF1ZXN0X2lycToKLQlpYm1hc21fZnJlZV9yZW1vdGVfcXVldWUoc3ApOwotZXJyb3JfcmVtb3RlX3F1ZXVlOgogCWlvdW5tYXAoc3AtPmJhc2VfYWRkcmVzcyk7CiBlcnJvcl9pb3JlbWFwOgogCWlibWFzbV9oZWFydGJlYXRfZXhpdChzcCk7CiBlcnJvcl9oZWFydGJlYXQ6CiAJaWJtYXNtX2V2ZW50X2J1ZmZlcl9leGl0KHNwKTsKIGVycm9yX2V2ZW50YnVmZmVyOgorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShzcCk7CiBlcnJvcl9rbWFsbG9jOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKyAgICAgICAgcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycm9yX3Jlc291cmNlczoKKyAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2NSwxNiArMTY4LDI0IEBACiB7CiAJc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCA9IChzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKKwlkYmcoIlVucmVnaXN0ZXJpbmcgVUFSVFxuIik7CiAJaWJtYXNtX3VucmVnaXN0ZXJfdWFydChzcCk7Ci0JaWJtYXNtX3NlbmRfb3Nfc3RhdGUoc3AsIFNZU1RFTV9TVEFURV9PU19ET1dOKTsKLQlkaXNhYmxlX3NwX2ludGVycnVwdHMoc3AtPmJhc2VfYWRkcmVzcyk7Ci0JZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQlmcmVlX2lycShzcC0+aXJxLCAodm9pZCAqKXNwKTsKKwlkYmcoIlNlbmRpbmcgT1MgZG93biBtZXNzYWdlXG4iKTsKKwlpZiAoaWJtYXNtX3NlbmRfb3Nfc3RhdGUoc3AsIFNZU1RFTV9TVEFURV9PU19ET1dOKSkKKwkJZXJyKCJmYWlsZWQgdG8gZ2V0IHJlcHNvbnNlIHRvICdTZW5kIE9TIFN0YXRlJyBjb21tYW5kXG4iKTsKKwlkYmcoIkRpc2FibGluZyBoZWFydGJlYXRzXG4iKTsKIAlpYm1hc21faGVhcnRiZWF0X2V4aXQoc3ApOwotCWlibWFzbV9mcmVlX3JlbW90ZV9xdWV1ZShzcCk7CisJZGJnKCJEaXNhYmxpbmcgaW50ZXJydXB0c1xuIik7CisJZGlzYWJsZV9zcF9pbnRlcnJ1cHRzKHNwLT5iYXNlX2FkZHJlc3MpOworCWRiZygiRnJlZWluZyBTUCBpcnFcbiIpOworCWZyZWVfaXJxKHNwLT5pcnEsICh2b2lkICopc3ApOworCWRiZygiQ2xlYW5pbmcgdXBcbiIpOworCWlibWFzbV9mcmVlX3JlbW90ZV9pbnB1dF9kZXYoc3ApOwogCWlvdW5tYXAoc3AtPmJhc2VfYWRkcmVzcyk7CiAJaWJtYXNtX2V2ZW50X2J1ZmZlcl9leGl0KHNwKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoc3ApOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5jIGIvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuYwppbmRleCA1MjBjM2YxLi5kM2M0OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmMKQEAgLTEsNCArMSwzIEBACi0KIC8qCiAgKiBJQk0gQVNNIFNlcnZpY2UgUHJvY2Vzc29yIERldmljZSBEcml2ZXIKICAqCkBAIC0xOCwxMjAgKzE3LDE3OCBAQAogICoKICAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDA0CiAgKgotICogQXV0aG9yOiBNYXggQXNi9mNrIDxhbWF4QHVzLmlibS5jb20+IAorICogQXV0aG9yczogTWF4IEFzYvZjayA8YW1heEB1cy5pYm0uY29tPgorICogICAgICAgICAgVmVybm9uIE1hdWVyeSA8dmVybnV4QHVzLmlibS5jb20+CiAgKgogICovCiAKIC8qIFJlbW90ZSBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnQgaGFuZGxpbmcgZnVuY3Rpb25zICovCiAKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlICJpYm1hc20uaCIKICNpbmNsdWRlICJyZW1vdGUuaCIKIAotaW50IGlibWFzbV9pbml0X3JlbW90ZV9xdWV1ZShzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKQorc3RhdGljIGludCB4bWF4ID0gMTYwMDsKK3N0YXRpYyBpbnQgeW1heCA9IDEyMDA7CisKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IHhsYXRlX2hpZ2hbWExBVEVfU0laRV0gPSB7CisJW0tFWV9TWU1fRU5URVIgJiAweGZmXSA9IEtFWV9FTlRFUiwKKwlbS0VZX1NZTV9LUFNMQVNIICYgMHhmZl0gPSBLRVlfS1BTTEFTSCwKKwlbS0VZX1NZTV9LUFNUQVIgJiAweGZmXSA9IEtFWV9LUEFTVEVSSVNLLAorCVtLRVlfU1lNX0tQTUlOVVMgJiAweGZmXSA9IEtFWV9LUE1JTlVTLAorCVtLRVlfU1lNX0tQRE9UICYgMHhmZl0gPSBLRVlfS1BET1QsCisJW0tFWV9TWU1fS1BQTFVTICYgMHhmZl0gPSBLRVlfS1BQTFVTLAorCVtLRVlfU1lNX0tQMCAmIDB4ZmZdID0gS0VZX0tQMCwKKwlbS0VZX1NZTV9LUDEgJiAweGZmXSA9IEtFWV9LUDEsCisJW0tFWV9TWU1fS1AyICYgMHhmZl0gPSBLRVlfS1AyLCBbS0VZX1NZTV9LUERPV04gJiAweGZmXSA9IEtFWV9LUDIsCisJW0tFWV9TWU1fS1AzICYgMHhmZl0gPSBLRVlfS1AzLAorCVtLRVlfU1lNX0tQNCAmIDB4ZmZdID0gS0VZX0tQNCwgW0tFWV9TWU1fS1BMRUZUICYgMHhmZl0gPSBLRVlfS1A0LAorCVtLRVlfU1lNX0tQNSAmIDB4ZmZdID0gS0VZX0tQNSwKKwlbS0VZX1NZTV9LUDYgJiAweGZmXSA9IEtFWV9LUDYsIFtLRVlfU1lNX0tQUklHSFQgJiAweGZmXSA9IEtFWV9LUDYsCisJW0tFWV9TWU1fS1A3ICYgMHhmZl0gPSBLRVlfS1A3LAorCVtLRVlfU1lNX0tQOCAmIDB4ZmZdID0gS0VZX0tQOCwgW0tFWV9TWU1fS1BVUCAmIDB4ZmZdID0gS0VZX0tQOCwKKwlbS0VZX1NZTV9LUDkgJiAweGZmXSA9IEtFWV9LUDksCisJW0tFWV9TWU1fQktfU1BDICYgMHhmZl0gPSBLRVlfQkFDS1NQQUNFLAorCVtLRVlfU1lNX1RBQiAmIDB4ZmZdID0gS0VZX1RBQiwKKwlbS0VZX1NZTV9DVFJMICYgMHhmZl0gPSBLRVlfTEVGVENUUkwsCisJW0tFWV9TWU1fQUxUICYgMHhmZl0gPSBLRVlfTEVGVEFMVCwKKwlbS0VZX1NZTV9JTlNFUlQgJiAweGZmXSA9IEtFWV9JTlNFUlQsCisJW0tFWV9TWU1fREVMRVRFICYgMHhmZl0gPSBLRVlfREVMRVRFLAorCVtLRVlfU1lNX1NISUZUICYgMHhmZl0gPSBLRVlfTEVGVFNISUZULAorCVtLRVlfU1lNX1VBUlJPVyAmIDB4ZmZdID0gS0VZX1VQLAorCVtLRVlfU1lNX0RBUlJPVyAmIDB4ZmZdID0gS0VZX0RPV04sCisJW0tFWV9TWU1fTEFSUk9XICYgMHhmZl0gPSBLRVlfTEVGVCwKKwlbS0VZX1NZTV9SQVJST1cgJiAweGZmXSA9IEtFWV9SSUdIVCwKKwlbS0VZX1NZTV9FU0NBUEUgJiAweGZmXSA9IEtFWV9FU0MsCisgICAgICAgIFtLRVlfU1lNX1BBR0VVUCAmIDB4ZmZdID0gS0VZX1BBR0VVUCwKKyAgICAgICAgW0tFWV9TWU1fUEFHRURPV04gJiAweGZmXSA9IEtFWV9QQUdFRE9XTiwKKyAgICAgICAgW0tFWV9TWU1fSE9NRSAmIDB4ZmZdID0gS0VZX0hPTUUsCisgICAgICAgIFtLRVlfU1lNX0VORCAmIDB4ZmZdID0gS0VZX0VORCwKKwlbS0VZX1NZTV9GMSAmIDB4ZmZdID0gS0VZX0YxLAorCVtLRVlfU1lNX0YyICYgMHhmZl0gPSBLRVlfRjIsCisJW0tFWV9TWU1fRjMgJiAweGZmXSA9IEtFWV9GMywKKwlbS0VZX1NZTV9GNCAmIDB4ZmZdID0gS0VZX0Y0LAorCVtLRVlfU1lNX0Y1ICYgMHhmZl0gPSBLRVlfRjUsCisJW0tFWV9TWU1fRjYgJiAweGZmXSA9IEtFWV9GNiwKKwlbS0VZX1NZTV9GNyAmIDB4ZmZdID0gS0VZX0Y3LAorCVtLRVlfU1lNX0Y4ICYgMHhmZl0gPSBLRVlfRjgsCisJW0tFWV9TWU1fRjkgJiAweGZmXSA9IEtFWV9GOSwKKwlbS0VZX1NZTV9GMTAgJiAweGZmXSA9IEtFWV9GMTAsCisJW0tFWV9TWU1fRjExICYgMHhmZl0gPSBLRVlfRjExLAorCVtLRVlfU1lNX0YxMiAmIDB4ZmZdID0gS0VZX0YxMiwKKwlbS0VZX1NZTV9DQVBfTE9DSyAmIDB4ZmZdID0gS0VZX0NBUFNMT0NLLAorCVtLRVlfU1lNX05VTV9MT0NLICYgMHhmZl0gPSBLRVlfTlVNTE9DSywKKwlbS0VZX1NZTV9TQ1JfTE9DSyAmIDB4ZmZdID0gS0VZX1NDUk9MTExPQ0ssCit9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IHhsYXRlW1hMQVRFX1NJWkVdID0geworCVtOT19LRVlDT0RFXSA9IEtFWV9SRVNFUlZFRCwKKwlbS0VZX1NZTV9TUEFDRV0gPSBLRVlfU1BBQ0UsCisJW0tFWV9TWU1fVElMREVdID0gS0VZX0dSQVZFLCAgICAgICAgW0tFWV9TWU1fQktUSUNdID0gS0VZX0dSQVZFLAorCVtLRVlfU1lNX09ORV0gPSBLRVlfMSwgICAgICAgICAgICAgIFtLRVlfU1lNX0JBTkddID0gS0VZXzEsCisJW0tFWV9TWU1fVFdPXSA9IEtFWV8yLCAgICAgICAgICAgICAgW0tFWV9TWU1fQVRdID0gS0VZXzIsCisJW0tFWV9TWU1fVEhSRUVdID0gS0VZXzMsICAgICAgICAgICAgW0tFWV9TWU1fUE9VTkRdID0gS0VZXzMsCisJW0tFWV9TWU1fRk9VUl0gPSBLRVlfNCwgICAgICAgICAgICAgW0tFWV9TWU1fRE9MTEFSXSA9IEtFWV80LAorCVtLRVlfU1lNX0ZJVkVdID0gS0VZXzUsICAgICAgICAgICAgIFtLRVlfU1lNX1BFUkNFTlRdID0gS0VZXzUsCisJW0tFWV9TWU1fU0lYXSA9IEtFWV82LCAgICAgICAgICAgICAgW0tFWV9TWU1fQ0FSQVRdID0gS0VZXzYsCisJW0tFWV9TWU1fU0VWRU5dID0gS0VZXzcsICAgICAgICAgICAgW0tFWV9TWU1fQU1QRVJdID0gS0VZXzcsCisJW0tFWV9TWU1fRUlHSFRdID0gS0VZXzgsICAgICAgICAgICAgW0tFWV9TWU1fU1RBUl0gPSBLRVlfOCwKKwlbS0VZX1NZTV9OSU5FXSA9IEtFWV85LCAgICAgICAgICAgICBbS0VZX1NZTV9MUEFSRU5dID0gS0VZXzksCisJW0tFWV9TWU1fWkVST10gPSBLRVlfMCwgICAgICAgICAgICAgW0tFWV9TWU1fUlBBUkVOXSA9IEtFWV8wLAorCVtLRVlfU1lNX01JTlVTXSA9IEtFWV9NSU5VUywgICAgICAgIFtLRVlfU1lNX1VTQ09SRV0gPSBLRVlfTUlOVVMsCisJW0tFWV9TWU1fRVFVQUxdID0gS0VZX0VRVUFMLCAgICAgICAgW0tFWV9TWU1fUExVU10gPSBLRVlfRVFVQUwsCisJW0tFWV9TWU1fTEJSS1RdID0gS0VZX0xFRlRCUkFDRSwgICAgW0tFWV9TWU1fTENVUkxZXSA9IEtFWV9MRUZUQlJBQ0UsCisJW0tFWV9TWU1fUkJSS1RdID0gS0VZX1JJR0hUQlJBQ0UsICAgW0tFWV9TWU1fUkNVUkxZXSA9IEtFWV9SSUdIVEJSQUNFLAorCVtLRVlfU1lNX1NMQVNIXSA9IEtFWV9CQUNLU0xBU0gsICAgIFtLRVlfU1lNX1BJUEVdID0gS0VZX0JBQ0tTTEFTSCwKKwlbS0VZX1NZTV9USUNdID0gS0VZX0FQT1NUUk9QSEUsICAgICBbS0VZX1NZTV9RVU9URV0gPSBLRVlfQVBPU1RST1BIRSwKKwlbS0VZX1NZTV9TRU1JQ10gPSBLRVlfU0VNSUNPTE9OLCAgICBbS0VZX1NZTV9DT0xPTl0gPSBLRVlfU0VNSUNPTE9OLAorCVtLRVlfU1lNX0NPTU1BXSA9IEtFWV9DT01NQSwgICAgICAgIFtLRVlfU1lNX0xUXSA9IEtFWV9DT01NQSwKKwlbS0VZX1NZTV9QRVJJT0RdID0gS0VZX0RPVCwgICAgICAgICBbS0VZX1NZTV9HVF0gPSBLRVlfRE9ULAorCVtLRVlfU1lNX0JTTEFTSF0gPSBLRVlfU0xBU0gsICAgICAgIFtLRVlfU1lNX1FNQVJLXSA9IEtFWV9TTEFTSCwKKwlbS0VZX1NZTV9BXSA9IEtFWV9BLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9hXSA9IEtFWV9BLAorCVtLRVlfU1lNX0JdID0gS0VZX0IsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2JdID0gS0VZX0IsCisJW0tFWV9TWU1fQ10gPSBLRVlfQywgICAgICAgICAgICAgICAgW0tFWV9TWU1fY10gPSBLRVlfQywKKwlbS0VZX1NZTV9EXSA9IEtFWV9ELCAgICAgICAgICAgICAgICBbS0VZX1NZTV9kXSA9IEtFWV9ELAorCVtLRVlfU1lNX0VdID0gS0VZX0UsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2VdID0gS0VZX0UsCisJW0tFWV9TWU1fRl0gPSBLRVlfRiwgICAgICAgICAgICAgICAgW0tFWV9TWU1fZl0gPSBLRVlfRiwKKwlbS0VZX1NZTV9HXSA9IEtFWV9HLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9nXSA9IEtFWV9HLAorCVtLRVlfU1lNX0hdID0gS0VZX0gsICAgICAgICAgICAgICAgIFtLRVlfU1lNX2hdID0gS0VZX0gsCisJW0tFWV9TWU1fSV0gPSBLRVlfSSwgICAgICAgICAgICAgICAgW0tFWV9TWU1faV0gPSBLRVlfSSwKKwlbS0VZX1NZTV9KXSA9IEtFWV9KLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9qXSA9IEtFWV9KLAorCVtLRVlfU1lNX0tdID0gS0VZX0ssICAgICAgICAgICAgICAgIFtLRVlfU1lNX2tdID0gS0VZX0ssCisJW0tFWV9TWU1fTF0gPSBLRVlfTCwgICAgICAgICAgICAgICAgW0tFWV9TWU1fbF0gPSBLRVlfTCwKKwlbS0VZX1NZTV9NXSA9IEtFWV9NLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9tXSA9IEtFWV9NLAorCVtLRVlfU1lNX05dID0gS0VZX04sICAgICAgICAgICAgICAgIFtLRVlfU1lNX25dID0gS0VZX04sCisJW0tFWV9TWU1fT10gPSBLRVlfTywgICAgICAgICAgICAgICAgW0tFWV9TWU1fb10gPSBLRVlfTywKKwlbS0VZX1NZTV9QXSA9IEtFWV9QLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9wXSA9IEtFWV9QLAorCVtLRVlfU1lNX1FdID0gS0VZX1EsICAgICAgICAgICAgICAgIFtLRVlfU1lNX3FdID0gS0VZX1EsCisJW0tFWV9TWU1fUl0gPSBLRVlfUiwgICAgICAgICAgICAgICAgW0tFWV9TWU1fcl0gPSBLRVlfUiwKKwlbS0VZX1NZTV9TXSA9IEtFWV9TLCAgICAgICAgICAgICAgICBbS0VZX1NZTV9zXSA9IEtFWV9TLAorCVtLRVlfU1lNX1RdID0gS0VZX1QsICAgICAgICAgICAgICAgIFtLRVlfU1lNX3RdID0gS0VZX1QsCisJW0tFWV9TWU1fVV0gPSBLRVlfVSwgICAgICAgICAgICAgICAgW0tFWV9TWU1fdV0gPSBLRVlfVSwKKwlbS0VZX1NZTV9WXSA9IEtFWV9WLCAgICAgICAgICAgICAgICBbS0VZX1NZTV92XSA9IEtFWV9WLAorCVtLRVlfU1lNX1ddID0gS0VZX1csICAgICAgICAgICAgICAgIFtLRVlfU1lNX3ddID0gS0VZX1csCisJW0tFWV9TWU1fWF0gPSBLRVlfWCwgICAgICAgICAgICAgICAgW0tFWV9TWU1feF0gPSBLRVlfWCwKKwlbS0VZX1NZTV9ZXSA9IEtFWV9ZLCAgICAgICAgICAgICAgICBbS0VZX1NZTV95XSA9IEtFWV9ZLAorCVtLRVlfU1lNX1pdID0gS0VZX1osICAgICAgICAgICAgICAgIFtLRVlfU1lNX3pdID0gS0VZX1osCit9OworCitzdGF0aWMgY2hhciByZW1vdGVfbW91c2VfbmFtZVtdID0gImlibWFzbSBSU0EgSSByZW1vdGUgbW91c2UiOworc3RhdGljIGNoYXIgcmVtb3RlX2tleWJkX25hbWVbXSA9ICJpYm1hc20gUlNBIEkgcmVtb3RlIGtleWJvYXJkIjsKKworc3RhdGljIHZvaWQgcHJpbnRfaW5wdXQoc3RydWN0IHJlbW90ZV9pbnB1dCAqaW5wdXQpCiB7Ci0Jc3RydWN0IHJlbW90ZV9xdWV1ZSAqcSA9ICZzcC0+cmVtb3RlX3F1ZXVlOwotCi0JZGlzYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKLQotCXEtPm9wZW4gPSAwOwotCXEtPnNpemUgPSAwOwotCi0JcS0+c3RhcnQgPSBrbWFsbG9jKERSSVZFUl9SRU1PVEVfUVVFVUVfU0laRSAqIHNpemVvZihzdHJ1Y3QgcmVtb3RlX2V2ZW50KSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIGlmIChxLT5zdGFydCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0JcS0+ZW5kID0gcS0+c3RhcnQgKyBEUklWRVJfUkVNT1RFX1FVRVVFX1NJWkU7Ci0JcS0+cmVhZGVyID0gcS0+c3RhcnQ7Ci0JcS0+d3JpdGVyID0gcS0+c3RhcnQ7Ci0JcS0+c2l6ZSA9IERSSVZFUl9SRU1PVEVfUVVFVUVfU0laRTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZxLT53YWl0KTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGlibWFzbV9mcmVlX3JlbW90ZV9xdWV1ZShzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKQotewotCWtmcmVlKHNwLT5yZW1vdGVfcXVldWUuc3RhcnQpOwotfQotCi12b2lkIGlibWFzbV9hZHZhbmNlX3JlYWRlcihzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgbikKLXsKLQlxLT5yZWFkZXIgKz0gbjsKLQlpZiAocS0+cmVhZGVyID49IHEtPmVuZCkKLQkJcS0+cmVhZGVyIC09IHEtPnNpemU7Ci19Ci0KLXNpemVfdCBpYm1hc21fZXZlbnRzX2F2YWlsYWJsZShzdHJ1Y3QgcmVtb3RlX3F1ZXVlICpxKQotewotCXNzaXplX3QgZGlmZiA9IHEtPndyaXRlciAtIHEtPnJlYWRlcjsKLSAKLQlyZXR1cm4gKGRpZmYgPj0gMCkgPyBkaWZmIDogcS0+ZW5kIC0gcS0+cmVhZGVyOwkKLX0KLQkKLQotc3RhdGljIGludCBzcGFjZV9mcmVlKHN0cnVjdCByZW1vdGVfcXVldWUgKnEpCi17Ci0JaWYgKHEtPnJlYWRlciA9PSBxLT53cml0ZXIpCi0JCXJldHVybiBxLT5zaXplIC0gMTsKLQotCXJldHVybiAoIChxLT5yZWFkZXIgKyBxLT5zaXplIC0gcS0+d3JpdGVyKSAlIHEtPnNpemUgKSAtIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9tb3VzZV9ldmVudChzdHJ1Y3QgcmVtb3RlX2lucHV0ICppbnB1dCwgc3RydWN0IG1vdXNlX2V2ZW50ICptb3VzZSkKLXsKLQlzdGF0aWMgY2hhciBsYXN0X2J1dHRvbnMgPSAwOwotCi0JbW91c2UtPnggPSBpbnB1dC0+ZGF0YS5tb3VzZS54OwotCW1vdXNlLT55ID0gaW5wdXQtPmRhdGEubW91c2UueTsKLQotCWlmIChpbnB1dC0+bW91c2VfYnV0dG9ucyA9PSBSRU1PVEVfTU9VU0VfRE9VQkxFX0NMSUNLKSB7Ci0JCW1vdXNlLT5idXR0b25zID0gUkVNT1RFX01PVVNFX0RPVUJMRV9DTElDSzsKLQkJbGFzdF9idXR0b25zID0gMDsKLQkJcmV0dXJuOworCWlmIChpbnB1dC0+dHlwZSA9PSBJTlBVVF9UWVBFX01PVVNFKSB7CisJCXVuc2lnbmVkIGNoYXIgYnV0dG9ucyA9IGlucHV0LT5tb3VzZV9idXR0b25zOworCQlkYmcoInJlbW90ZSBtb3VzZSBtb3ZlbWVudDogKHgseSk9KCVkLCVkKSVzJXMlcyVzXG4iLAorCQkJaW5wdXQtPmRhdGEubW91c2UueCwgaW5wdXQtPmRhdGEubW91c2UueSwKKwkJCShidXR0b25zKT8iIC0tIGJ1dHRvbnM6IjoiIiwKKwkJCShidXR0b25zICYgUkVNT1RFX0JVVFRPTl9MRUZUKT8ibGVmdCAiOiIiLAorCQkJKGJ1dHRvbnMgJiBSRU1PVEVfQlVUVE9OX01JRERMRSk/Im1pZGRsZSAiOiIiLAorCQkJKGJ1dHRvbnMgJiBSRU1PVEVfQlVUVE9OX1JJR0hUKT8icmlnaHQiOiIiCisJCSAgICAgICk7CisJfSBlbHNlIHsKKwkJZGJnKCJyZW1vdGUga2V5cHJlc3MgKGNvZGUsIGZsYWcsIGRvd24pOiIKKwkJCSAgICIlZCAoMHgleCkgWzB4JXhdIFsweCV4XVxuIiwKKwkJCQlpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfY29kZSwKKwkJCQlpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfY29kZSwKKwkJCQlpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfZmxhZywKKwkJCQlpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfZG93bgorCQkgICAgICApOwogCX0KLQltb3VzZS0+dHJhbnNpdGlvbnMgPSBsYXN0X2J1dHRvbnMgXiBpbnB1dC0+bW91c2VfYnV0dG9uczsKLQltb3VzZS0+YnV0dG9ucyA9IGlucHV0LT5tb3VzZV9idXR0b25zOwotCi0JbGFzdF9idXR0b25zID0gaW5wdXQtPm1vdXNlX2J1dHRvbnM7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9rZXlib2FyZF9ldmVudChzdHJ1Y3QgcmVtb3RlX2lucHV0ICppbnB1dCwgc3RydWN0IGtleWJvYXJkX2V2ZW50ICprZXlib2FyZCkKK3N0YXRpYyB2b2lkIHNlbmRfbW91c2VfZXZlbnQoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKKwkJc3RydWN0IHJlbW90ZV9pbnB1dCAqaW5wdXQpCiB7Ci0Ja2V5Ym9hcmQtPmtleV9jb2RlID0gaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2NvZGU7Ci0Ja2V5Ym9hcmQtPmtleV9kb3duID0gaW5wdXQtPmRhdGEua2V5Ym9hcmQua2V5X2Rvd247CisJdW5zaWduZWQgY2hhciBidXR0b25zID0gaW5wdXQtPm1vdXNlX2J1dHRvbnM7CisKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBpbnB1dC0+ZGF0YS5tb3VzZS54KTsKKwlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGlucHV0LT5kYXRhLm1vdXNlLnkpOworCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgYnV0dG9ucyAmIFJFTU9URV9CVVRUT05fTEVGVCk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGJ1dHRvbnMgJiBSRU1PVEVfQlVUVE9OX01JRERMRSk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgYnV0dG9ucyAmIFJFTU9URV9CVVRUT05fUklHSFQpOworCWlucHV0X3N5bmMoZGV2KTsKIH0KIAotc3RhdGljIGludCBhZGRfdG9fZHJpdmVyX3F1ZXVlKHN0cnVjdCByZW1vdGVfcXVldWUgKnEsIHN0cnVjdCByZW1vdGVfaW5wdXQgKmlucHV0KQorc3RhdGljIHZvaWQgc2VuZF9rZXlib2FyZF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQlzdHJ1Y3QgcmVtb3RlX2lucHV0ICppbnB1dCkKIHsKLQlzdHJ1Y3QgcmVtb3RlX2V2ZW50ICpldmVudCA9IHEtPndyaXRlcjsKKwl1bnNpZ25lZCBpbnQga2V5OworCXVuc2lnbmVkIHNob3J0IGNvZGUgPSBpbnB1dC0+ZGF0YS5rZXlib2FyZC5rZXlfY29kZTsKIAotCWlmIChzcGFjZV9mcmVlKHEpIDwgMSkgewotCQlyZXR1cm4gMTsKLQl9Ci0KLQlzd2l0Y2goaW5wdXQtPnR5cGUpIHsKLQljYXNlIChJTlBVVF9UWVBFX01PVVNFKToKLQkJZXZlbnQtPnR5cGUgPSBJTlBVVF9UWVBFX01PVVNFOwotCQlzZXRfbW91c2VfZXZlbnQoaW5wdXQsICZldmVudC0+ZGF0YS5tb3VzZSk7Ci0JCWJyZWFrOwotCWNhc2UgKElOUFVUX1RZUEVfS0VZQk9BUkQpOgotCQlldmVudC0+dHlwZSA9IElOUFVUX1RZUEVfS0VZQk9BUkQ7Ci0JCXNldF9rZXlib2FyZF9ldmVudChpbnB1dCwgJmV2ZW50LT5kYXRhLmtleWJvYXJkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCWV2ZW50LT50eXBlID0gaW5wdXQtPnR5cGU7Ci0KLQlxLT53cml0ZXIrKzsKLQlpZiAocS0+d3JpdGVyID09IHEtPmVuZCkKLQkJcS0+d3JpdGVyID0gcS0+c3RhcnQ7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoY29kZSAmIDB4ZmYwMCkKKwkJa2V5ID0geGxhdGVfaGlnaFtjb2RlICYgMHhmZl07CisJZWxzZQorCQlrZXkgPSB4bGF0ZVtjb2RlXTsKKwlpbnB1dF9yZWdzKGRldiwgcmVncyk7CisJaW5wdXRfcmVwb3J0X2tleShkZXYsIGtleSwgKGlucHV0LT5kYXRhLmtleWJvYXJkLmtleV9kb3duKSA/IDEgOiAwKTsKKwlpbnB1dF9zeW5jKGRldik7CiB9Ci0JCiAKLXZvaWQgaWJtYXNtX2hhbmRsZV9tb3VzZV9pbnRlcnJ1cHQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCkKK3ZvaWQgaWJtYXNtX2hhbmRsZV9tb3VzZV9pbnRlcnJ1cHQoc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcCwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyByZWFkZXI7CiAJdW5zaWduZWQgbG9uZyB3cml0ZXI7CkBAIC0xNDEsMTIgKzE5OCw3NSBAQAogCXdyaXRlciA9IGdldF9xdWV1ZV93cml0ZXIoc3ApOwogCiAJd2hpbGUgKHJlYWRlciAhPSB3cml0ZXIpIHsKLQkJbWVtY3B5KCZpbnB1dCwgKHZvaWQgKilnZXRfcXVldWVfZW50cnkoc3AsIHJlYWRlciksIHNpemVvZihzdHJ1Y3QgcmVtb3RlX2lucHV0KSk7CisJCW1lbWNweV9mcm9taW8oJmlucHV0LCBnZXRfcXVldWVfZW50cnkoc3AsIHJlYWRlciksCisJCQkJc2l6ZW9mKHN0cnVjdCByZW1vdGVfaW5wdXQpKTsKIAotCQlpZiAoYWRkX3RvX2RyaXZlcl9xdWV1ZSgmc3AtPnJlbW90ZV9xdWV1ZSwgJmlucHV0KSkKKwkJcHJpbnRfaW5wdXQoJmlucHV0KTsKKwkJaWYgKGlucHV0LnR5cGUgPT0gSU5QVVRfVFlQRV9NT1VTRSkgeworCQkJc2VuZF9tb3VzZV9ldmVudCgmc3AtPnJlbW90ZS0+bW91c2VfZGV2LCByZWdzLCAmaW5wdXQpOworCQl9IGVsc2UgaWYgKGlucHV0LnR5cGUgPT0gSU5QVVRfVFlQRV9LRVlCT0FSRCkgeworCQkJc2VuZF9rZXlib2FyZF9ldmVudCgmc3AtPnJlbW90ZS0+a2V5YmRfZGV2LCByZWdzLCAmaW5wdXQpOworCQl9IGVsc2UKIAkJCWJyZWFrOwogCiAJCXJlYWRlciA9IGFkdmFuY2VfcXVldWVfcmVhZGVyKHNwLCByZWFkZXIpOworCQl3cml0ZXIgPSBnZXRfcXVldWVfd3JpdGVyKHNwKTsKIAl9Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcC0+cmVtb3RlX3F1ZXVlLndhaXQpOwogfQorCitpbnQgaWJtYXNtX2luaXRfcmVtb3RlX2lucHV0X2RldihzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKQoreworCS8qIHNldCB1cCB0aGUgbW91c2UgaW5wdXQgZGV2aWNlICovCisJc3RydWN0IGlibWFzbV9yZW1vdGUgKnJlbW90ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoc3AtPmRldik7CisJaW50IGk7CisKKwlzcC0+cmVtb3RlID0gcmVtb3RlID0ga21hbGxvYyhzaXplb2YoKnJlbW90ZSksIEdGUF9LRVJORUwpOworCWlmICghcmVtb3RlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChyZW1vdGUsIDAsIHNpemVvZigqcmVtb3RlKSk7CisKKwlyZW1vdGUtPm1vdXNlX2Rldi5wcml2YXRlID0gcmVtb3RlOworCWluaXRfaW5wdXRfZGV2KCZyZW1vdGUtPm1vdXNlX2Rldik7CisJcmVtb3RlLT5tb3VzZV9kZXYuaWQudmVuZG9yID0gcGRldi0+dmVuZG9yOworCXJlbW90ZS0+bW91c2VfZGV2LmlkLnByb2R1Y3QgPSBwZGV2LT5kZXZpY2U7CisJcmVtb3RlLT5tb3VzZV9kZXYuZXZiaXRbMF0gID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlyZW1vdGUtPm1vdXNlX2Rldi5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTEVGVCkgfAorCQlCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKwlzZXRfYml0KEJUTl9UT1VDSCwgcmVtb3RlLT5tb3VzZV9kZXYua2V5Yml0KTsKKwlyZW1vdGUtPm1vdXNlX2Rldi5uYW1lID0gcmVtb3RlX21vdXNlX25hbWU7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoJnJlbW90ZS0+bW91c2VfZGV2LCBBQlNfWCwgMCwgeG1heCwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoJnJlbW90ZS0+bW91c2VfZGV2LCBBQlNfWSwgMCwgeW1heCwgMCwgMCk7CisKKwlyZW1vdGUtPmtleWJkX2Rldi5wcml2YXRlID0gcmVtb3RlOworCWluaXRfaW5wdXRfZGV2KCZyZW1vdGUtPmtleWJkX2Rldik7CisJcmVtb3RlLT5rZXliZF9kZXYuaWQudmVuZG9yID0gcGRldi0+dmVuZG9yOworCXJlbW90ZS0+a2V5YmRfZGV2LmlkLnByb2R1Y3QgPSBwZGV2LT5kZXZpY2U7CisJcmVtb3RlLT5rZXliZF9kZXYuZXZiaXRbMF0gID0gQklUKEVWX0tFWSk7CisJcmVtb3RlLT5rZXliZF9kZXYubmFtZSA9IHJlbW90ZV9rZXliZF9uYW1lOworCisJZm9yIChpPTA7IGk8WExBVEVfU0laRTsgaSsrKSB7CisJCWlmICh4bGF0ZV9oaWdoW2ldKQorCQkJc2V0X2JpdCh4bGF0ZV9oaWdoW2ldLCByZW1vdGUtPmtleWJkX2Rldi5rZXliaXQpOworCQlpZiAoeGxhdGVbaV0pCisJCQlzZXRfYml0KHhsYXRlW2ldLCByZW1vdGUtPmtleWJkX2Rldi5rZXliaXQpOworCX0KKworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmcmVtb3RlLT5tb3VzZV9kZXYpOworCWlucHV0X3JlZ2lzdGVyX2RldmljZSgmcmVtb3RlLT5rZXliZF9kZXYpOworCWVuYWJsZV9tb3VzZV9pbnRlcnJ1cHRzKHNwKTsKKworCXByaW50ayhLRVJOX0lORk8gImlibWFzbSByZW1vdGUgcmVzcG9uZGluZyB0byBldmVudHMgb24gUlNBIGNhcmQgJWRcbiIsIHNwLT5udW1iZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaWJtYXNtX2ZyZWVfcmVtb3RlX2lucHV0X2RldihzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwKQoreworCWRpc2FibGVfbW91c2VfaW50ZXJydXB0cyhzcCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJnNwLT5yZW1vdGUtPmtleWJkX2Rldik7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoJnNwLT5yZW1vdGUtPm1vdXNlX2Rldik7CisJa2ZyZWUoc3AtPnJlbW90ZSk7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmggYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5oCmluZGV4IGE4ZWIxOWYuLmI3MDc2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmgKKysrIGIvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuaApAQCAtNTEsMTEgKzUxLDEzIEBACiAKIAogLyogbW91c2UgYnV0dG9uIHN0YXRlcyByZWNlaXZlZCBmcm9tIFNQICovCi0jZGVmaW5lIFJFTU9URV9NT1VTRV9ET1VCTEVfQ0xJQ0sJMHhGMAotI2RlZmluZSBSRU1PVEVfTU9VU0VfQlVUVE9OX0xFRlQJMHgwMQotI2RlZmluZSBSRU1PVEVfTU9VU0VfQlVUVE9OX01JRERMRQkweDAyCi0jZGVmaW5lIFJFTU9URV9NT1VTRV9CVVRUT05fUklHSFQJMHgwNAorI2RlZmluZSBSRU1PVEVfRE9VQkxFX0NMSUNLCTB4RjAKKyNkZWZpbmUgUkVNT1RFX0JVVFRPTl9MRUZUCTB4MDEKKyNkZWZpbmUgUkVNT1RFX0JVVFRPTl9NSURETEUJMHgwMgorI2RlZmluZSBSRU1PVEVfQlVUVE9OX1JJR0hUCTB4MDQKIAorLyogc2l6ZSBvZiBrZXlzeW0va2V5Y29kZSB0cmFuc2xhdGlvbiBtYXRyaWNpZXMgKi8KKyNkZWZpbmUgWExBVEVfU0laRSAyNTYKIAogc3RydWN0IG1vdXNlX2lucHV0IHsKIAl1bnNpZ25lZCBzaG9ydAl5OwpAQCAtODMsMTEgKzg1LDEzIEBACiAJdW5zaWduZWQgY2hhcglwYWQzOwogfTsKIAotI2RlZmluZSBtb3VzZV9hZGRyKHNwKSAJCXNwLT5iYXNlX2FkZHJlc3MgKyBDT05ET1JfTU9VU0VfREFUQQotI2RlZmluZSBkaXNwbGF5X3dpZHRoKHNwKQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1gKLSNkZWZpbmUgZGlzcGxheV9oZWlnaHQoc3ApCW1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX0lOUFVUX0RJU1BMQVlfUkVTWQotI2RlZmluZSBkaXNwbGF5X2RlcHRoKHNwKQltb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX0JJVFMKLSNkZWZpbmUgdm5jX3N0YXR1cyhzcCkJCW1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX09VVFBVVF9WTkNfU1RBVFVTCisjZGVmaW5lIG1vdXNlX2FkZHIoc3ApIAkJKHNwLT5iYXNlX2FkZHJlc3MgKyBDT05ET1JfTU9VU0VfREFUQSkKKyNkZWZpbmUgZGlzcGxheV93aWR0aChzcCkJKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX0lOUFVUX0RJU1BMQVlfUkVTWCkKKyNkZWZpbmUgZGlzcGxheV9oZWlnaHQoc3ApCShtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX1JFU1kpCisjZGVmaW5lIGRpc3BsYXlfZGVwdGgoc3ApCShtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9JTlBVVF9ESVNQTEFZX0JJVFMpCisjZGVmaW5lIGRlc2t0b3BfaW5mbyhzcCkJKG1vdXNlX2FkZHIoc3ApICsgQ09ORE9SX0lOUFVUX0RFU0tUT1BfSU5GTykKKyNkZWZpbmUgdm5jX3N0YXR1cyhzcCkJCShtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9PVVRQVVRfVk5DX1NUQVRVUykKKyNkZWZpbmUgaXNyX2NvbnRyb2woc3ApCQkobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfSVNSX0NPTlRST0wpCiAKICNkZWZpbmUgbW91c2VfaW50ZXJydXB0X3BlbmRpbmcoc3ApIAlyZWFkbChtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9NT1VTRV9JU1JfU1RBVFVTKQogI2RlZmluZSBjbGVhcl9tb3VzZV9pbnRlcnJ1cHQoc3ApCXdyaXRlbCgwLCBtb3VzZV9hZGRyKHNwKSArIENPTkRPUl9NT1VTRV9JU1JfU1RBVFVTKQpAQCAtMTAxLDEwICsxMDUsMTAgQEAKICNkZWZpbmUgZ2V0X3F1ZXVlX3JlYWRlcihzcCkJcmVhZGwobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfUV9SRUFERVIpCiAjZGVmaW5lIHNldF9xdWV1ZV9yZWFkZXIoc3AsIHJlYWRlcikJd3JpdGVsKHJlYWRlciwgbW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfUV9SRUFERVIpCiAKLSNkZWZpbmUgcXVldWVfYmVnaW4JbW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfUV9CRUdJTgorI2RlZmluZSBxdWV1ZV9iZWdpbgkobW91c2VfYWRkcihzcCkgKyBDT05ET1JfTU9VU0VfUV9CRUdJTikKIAogI2RlZmluZSBnZXRfcXVldWVfZW50cnkoc3AsIHJlYWRfaW5kZXgpIFwKLQlxdWV1ZV9iZWdpbiArIHJlYWRfaW5kZXggKiBzaXplb2Yoc3RydWN0IHJlbW90ZV9pbnB1dCkKKwkoKHZvaWQqKShxdWV1ZV9iZWdpbiArIHJlYWRfaW5kZXggKiBzaXplb2Yoc3RydWN0IHJlbW90ZV9pbnB1dCkpKQogCiBzdGF0aWMgaW5saW5lIGludCBhZHZhbmNlX3F1ZXVlX3JlYWRlcihzdHJ1Y3Qgc2VydmljZV9wcm9jZXNzb3IgKnNwLCB1bnNpZ25lZCBsb25nIHJlYWRlcikKIHsKQEAgLTExNiw0ICsxMjAsMTUxIEBACiAJcmV0dXJuIHJlYWRlcjsKIH0KIAorI2RlZmluZSBOT19LRVlDT0RFIDAKKyNkZWZpbmUgS0VZX1NZTV9CS19TUEMgICAweEZGMDgKKyNkZWZpbmUgS0VZX1NZTV9UQUIgICAgICAweEZGMDkKKyNkZWZpbmUgS0VZX1NZTV9FTlRFUiAgICAweEZGMEQKKyNkZWZpbmUgS0VZX1NZTV9TQ1JfTE9DSyAweEZGMTQKKyNkZWZpbmUgS0VZX1NZTV9FU0NBUEUgICAweEZGMUIKKyNkZWZpbmUgS0VZX1NZTV9IT01FICAgICAweEZGNTAKKyNkZWZpbmUgS0VZX1NZTV9MQVJST1cgICAweEZGNTEKKyNkZWZpbmUgS0VZX1NZTV9VQVJST1cgICAweEZGNTIKKyNkZWZpbmUgS0VZX1NZTV9SQVJST1cgICAweEZGNTMKKyNkZWZpbmUgS0VZX1NZTV9EQVJST1cgICAweEZGNTQKKyNkZWZpbmUgS0VZX1NZTV9QQUdFVVAgICAweEZGNTUKKyNkZWZpbmUgS0VZX1NZTV9QQUdFRE9XTiAweEZGNTYKKyNkZWZpbmUgS0VZX1NZTV9FTkQgICAgICAweEZGNTcKKyNkZWZpbmUgS0VZX1NZTV9JTlNFUlQgICAweEZGNjMKKyNkZWZpbmUgS0VZX1NZTV9OVU1fTE9DSyAweEZGN0YKKyNkZWZpbmUgS0VZX1NZTV9LUFNUQVIgICAweEZGQUEKKyNkZWZpbmUgS0VZX1NZTV9LUFBMVVMgICAweEZGQUIKKyNkZWZpbmUgS0VZX1NZTV9LUE1JTlVTICAweEZGQUQKKyNkZWZpbmUgS0VZX1NZTV9LUERPVCAgICAweEZGQUUKKyNkZWZpbmUgS0VZX1NZTV9LUFNMQVNIICAweEZGQUYKKyNkZWZpbmUgS0VZX1NZTV9LUFJJR0hUICAweEZGOTYKKyNkZWZpbmUgS0VZX1NZTV9LUFVQICAgICAweEZGOTcKKyNkZWZpbmUgS0VZX1NZTV9LUExFRlQgICAweEZGOTgKKyNkZWZpbmUgS0VZX1NZTV9LUERPV04gICAweEZGOTkKKyNkZWZpbmUgS0VZX1NZTV9LUDAgICAgICAweEZGQjAKKyNkZWZpbmUgS0VZX1NZTV9LUDEgICAgICAweEZGQjEKKyNkZWZpbmUgS0VZX1NZTV9LUDIgICAgICAweEZGQjIKKyNkZWZpbmUgS0VZX1NZTV9LUDMgICAgICAweEZGQjMKKyNkZWZpbmUgS0VZX1NZTV9LUDQgICAgICAweEZGQjQKKyNkZWZpbmUgS0VZX1NZTV9LUDUgICAgICAweEZGQjUKKyNkZWZpbmUgS0VZX1NZTV9LUDYgICAgICAweEZGQjYKKyNkZWZpbmUgS0VZX1NZTV9LUDcgICAgICAweEZGQjcKKyNkZWZpbmUgS0VZX1NZTV9LUDggICAgICAweEZGQjgKKyNkZWZpbmUgS0VZX1NZTV9LUDkgICAgICAweEZGQjkKKyNkZWZpbmUgS0VZX1NZTV9GMSAgICAgICAweEZGQkUgICAgICAvLyAxQiA1QiA1QiA0MQorI2RlZmluZSBLRVlfU1lNX0YyICAgICAgIDB4RkZCRiAgICAgIC8vIDFCIDVCIDVCIDQyCisjZGVmaW5lIEtFWV9TWU1fRjMgICAgICAgMHhGRkMwICAgICAgLy8gMUIgNUIgNUIgNDMKKyNkZWZpbmUgS0VZX1NZTV9GNCAgICAgICAweEZGQzEgICAgICAvLyAxQiA1QiA1QiA0NAorI2RlZmluZSBLRVlfU1lNX0Y1ICAgICAgIDB4RkZDMiAgICAgIC8vIDFCIDVCIDVCIDQ1CisjZGVmaW5lIEtFWV9TWU1fRjYgICAgICAgMHhGRkMzICAgICAgLy8gMUIgNUIgMzEgMzcgN0UKKyNkZWZpbmUgS0VZX1NZTV9GNyAgICAgICAweEZGQzQgICAgICAvLyAxQiA1QiAzMSAzOCA3RQorI2RlZmluZSBLRVlfU1lNX0Y4ICAgICAgIDB4RkZDNSAgICAgIC8vIDFCIDVCIDMxIDM5IDdFCisjZGVmaW5lIEtFWV9TWU1fRjkgICAgICAgMHhGRkM2ICAgICAgLy8gMUIgNUIgMzIgMzAgN0UKKyNkZWZpbmUgS0VZX1NZTV9GMTAgICAgICAweEZGQzcgICAgICAvLyAxQiA1QiAzMiAzMSA3RQorI2RlZmluZSBLRVlfU1lNX0YxMSAgICAgIDB4RkZDOCAgICAgIC8vIDFCIDVCIDMyIDMzIDdFCisjZGVmaW5lIEtFWV9TWU1fRjEyICAgICAgMHhGRkM5ICAgICAgLy8gMUIgNUIgMzIgMzQgN0UKKyNkZWZpbmUgS0VZX1NZTV9TSElGVCAgICAweEZGRTEKKyNkZWZpbmUgS0VZX1NZTV9DVFJMICAgICAweEZGRTMKKyNkZWZpbmUgS0VZX1NZTV9BTFQgICAgICAweEZGRTkKKyNkZWZpbmUgS0VZX1NZTV9DQVBfTE9DSyAweEZGRTUKKyNkZWZpbmUgS0VZX1NZTV9ERUxFVEUgICAweEZGRkYKKyNkZWZpbmUgS0VZX1NZTV9USUxERSAgICAweDYwCisjZGVmaW5lIEtFWV9TWU1fQktUSUMgICAgMHg3RQorI2RlZmluZSBLRVlfU1lNX09ORSAgICAgIDB4MzEKKyNkZWZpbmUgS0VZX1NZTV9CQU5HICAgICAweDIxCisjZGVmaW5lIEtFWV9TWU1fVFdPICAgICAgMHgzMgorI2RlZmluZSBLRVlfU1lNX0FUICAgICAgIDB4NDAKKyNkZWZpbmUgS0VZX1NZTV9USFJFRSAgICAweDMzCisjZGVmaW5lIEtFWV9TWU1fUE9VTkQgICAgMHgyMworI2RlZmluZSBLRVlfU1lNX0ZPVVIgICAgIDB4MzQKKyNkZWZpbmUgS0VZX1NZTV9ET0xMQVIgICAweDI0CisjZGVmaW5lIEtFWV9TWU1fRklWRSAgICAgMHgzNQorI2RlZmluZSBLRVlfU1lNX1BFUkNFTlQgIDB4MjUKKyNkZWZpbmUgS0VZX1NZTV9TSVggICAgICAweDM2CisjZGVmaW5lIEtFWV9TWU1fQ0FSQVQgICAgMHg1RQorI2RlZmluZSBLRVlfU1lNX1NFVkVOICAgIDB4MzcKKyNkZWZpbmUgS0VZX1NZTV9BTVBFUiAgICAweDI2CisjZGVmaW5lIEtFWV9TWU1fRUlHSFQgICAgMHgzOAorI2RlZmluZSBLRVlfU1lNX1NUQVIgICAgIDB4MkEKKyNkZWZpbmUgS0VZX1NZTV9OSU5FICAgICAweDM5CisjZGVmaW5lIEtFWV9TWU1fTFBBUkVOICAgMHgyOAorI2RlZmluZSBLRVlfU1lNX1pFUk8gICAgIDB4MzAKKyNkZWZpbmUgS0VZX1NZTV9SUEFSRU4gICAweDI5CisjZGVmaW5lIEtFWV9TWU1fTUlOVVMgICAgMHgyRAorI2RlZmluZSBLRVlfU1lNX1VTQ09SRSAgIDB4NUYKKyNkZWZpbmUgS0VZX1NZTV9FUVVBTCAgICAweDJCCisjZGVmaW5lIEtFWV9TWU1fUExVUyAgICAgMHgzRAorI2RlZmluZSBLRVlfU1lNX0xCUktUICAgIDB4NUIKKyNkZWZpbmUgS0VZX1NZTV9MQ1VSTFkgICAweDdCCisjZGVmaW5lIEtFWV9TWU1fUkJSS1QgICAgMHg1RAorI2RlZmluZSBLRVlfU1lNX1JDVVJMWSAgIDB4N0QKKyNkZWZpbmUgS0VZX1NZTV9TTEFTSCAgICAweDVDCisjZGVmaW5lIEtFWV9TWU1fUElQRSAgICAgMHg3QworI2RlZmluZSBLRVlfU1lNX1RJQyAgICAgIDB4MjcKKyNkZWZpbmUgS0VZX1NZTV9RVU9URSAgICAweDIyCisjZGVmaW5lIEtFWV9TWU1fU0VNSUMgICAgMHgzQgorI2RlZmluZSBLRVlfU1lNX0NPTE9OICAgIDB4M0EKKyNkZWZpbmUgS0VZX1NZTV9DT01NQSAgICAweDJDCisjZGVmaW5lIEtFWV9TWU1fTFQgICAgICAgMHgzQworI2RlZmluZSBLRVlfU1lNX1BFUklPRCAgIDB4MkUKKyNkZWZpbmUgS0VZX1NZTV9HVCAgICAgICAweDNFCisjZGVmaW5lIEtFWV9TWU1fQlNMQVNIICAgMHgyRgorI2RlZmluZSBLRVlfU1lNX1FNQVJLICAgIDB4M0YKKyNkZWZpbmUgS0VZX1NZTV9BICAgICAgICAweDQxCisjZGVmaW5lIEtFWV9TWU1fQiAgICAgICAgMHg0MgorI2RlZmluZSBLRVlfU1lNX0MgICAgICAgIDB4NDMKKyNkZWZpbmUgS0VZX1NZTV9EICAgICAgICAweDQ0CisjZGVmaW5lIEtFWV9TWU1fRSAgICAgICAgMHg0NQorI2RlZmluZSBLRVlfU1lNX0YgICAgICAgIDB4NDYKKyNkZWZpbmUgS0VZX1NZTV9HICAgICAgICAweDQ3CisjZGVmaW5lIEtFWV9TWU1fSCAgICAgICAgMHg0OAorI2RlZmluZSBLRVlfU1lNX0kgICAgICAgIDB4NDkKKyNkZWZpbmUgS0VZX1NZTV9KICAgICAgICAweDRBCisjZGVmaW5lIEtFWV9TWU1fSyAgICAgICAgMHg0QgorI2RlZmluZSBLRVlfU1lNX0wgICAgICAgIDB4NEMKKyNkZWZpbmUgS0VZX1NZTV9NICAgICAgICAweDRECisjZGVmaW5lIEtFWV9TWU1fTiAgICAgICAgMHg0RQorI2RlZmluZSBLRVlfU1lNX08gICAgICAgIDB4NEYKKyNkZWZpbmUgS0VZX1NZTV9QICAgICAgICAweDUwCisjZGVmaW5lIEtFWV9TWU1fUSAgICAgICAgMHg1MQorI2RlZmluZSBLRVlfU1lNX1IgICAgICAgIDB4NTIKKyNkZWZpbmUgS0VZX1NZTV9TICAgICAgICAweDUzCisjZGVmaW5lIEtFWV9TWU1fVCAgICAgICAgMHg1NAorI2RlZmluZSBLRVlfU1lNX1UgICAgICAgIDB4NTUKKyNkZWZpbmUgS0VZX1NZTV9WICAgICAgICAweDU2CisjZGVmaW5lIEtFWV9TWU1fVyAgICAgICAgMHg1NworI2RlZmluZSBLRVlfU1lNX1ggICAgICAgIDB4NTgKKyNkZWZpbmUgS0VZX1NZTV9ZICAgICAgICAweDU5CisjZGVmaW5lIEtFWV9TWU1fWiAgICAgICAgMHg1QQorI2RlZmluZSBLRVlfU1lNX2EgICAgICAgIDB4NjEKKyNkZWZpbmUgS0VZX1NZTV9iICAgICAgICAweDYyCisjZGVmaW5lIEtFWV9TWU1fYyAgICAgICAgMHg2MworI2RlZmluZSBLRVlfU1lNX2QgICAgICAgIDB4NjQKKyNkZWZpbmUgS0VZX1NZTV9lICAgICAgICAweDY1CisjZGVmaW5lIEtFWV9TWU1fZiAgICAgICAgMHg2NgorI2RlZmluZSBLRVlfU1lNX2cgICAgICAgIDB4NjcKKyNkZWZpbmUgS0VZX1NZTV9oICAgICAgICAweDY4CisjZGVmaW5lIEtFWV9TWU1faSAgICAgICAgMHg2OQorI2RlZmluZSBLRVlfU1lNX2ogICAgICAgIDB4NkEKKyNkZWZpbmUgS0VZX1NZTV9rICAgICAgICAweDZCCisjZGVmaW5lIEtFWV9TWU1fbCAgICAgICAgMHg2QworI2RlZmluZSBLRVlfU1lNX20gICAgICAgIDB4NkQKKyNkZWZpbmUgS0VZX1NZTV9uICAgICAgICAweDZFCisjZGVmaW5lIEtFWV9TWU1fbyAgICAgICAgMHg2RgorI2RlZmluZSBLRVlfU1lNX3AgICAgICAgIDB4NzAKKyNkZWZpbmUgS0VZX1NZTV9xICAgICAgICAweDcxCisjZGVmaW5lIEtFWV9TWU1fciAgICAgICAgMHg3MgorI2RlZmluZSBLRVlfU1lNX3MgICAgICAgIDB4NzMKKyNkZWZpbmUgS0VZX1NZTV90ICAgICAgICAweDc0CisjZGVmaW5lIEtFWV9TWU1fdSAgICAgICAgMHg3NQorI2RlZmluZSBLRVlfU1lNX3YgICAgICAgIDB4NzYKKyNkZWZpbmUgS0VZX1NZTV93ICAgICAgICAweDc3CisjZGVmaW5lIEtFWV9TWU1feCAgICAgICAgMHg3OAorI2RlZmluZSBLRVlfU1lNX3kgICAgICAgIDB4NzkKKyNkZWZpbmUgS0VZX1NZTV96ICAgICAgICAweDdBCisjZGVmaW5lIEtFWV9TWU1fU1BBQ0UgICAgMHgyMAogI2VuZGlmIC8qIF9JQk1BU01fUkVNT1RFX0hfICovCg==