From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v3 18/24] ACPI: Refactor acpi SRAT and SLIT table handling code Date: Tue, 18 Jul 2017 17:11:40 +0530 Message-ID: <1500378106-2620-19-git-send-email-vijay.kilari@gmail.com> References: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBTUkFU IGhhbmRsaW5nIGNvZGUgd2hpY2ggaXMgY29tbW9uIGFjcm9zcwphcmNoaXRlY3R1cmVzIGlzIG1v dmVkIHRvIG5ldyBmaWxlIHhlbi9kcml2ZXJzL2FjcGkvc3JhdC5jCmZyb20geGVuL2FyY2gveDg2 L3NyYXQuYyBmaWxlLiBOZXcgaGVhZGVyIGZpbGUgc3JhdC5oIGlzCmludHJvZHVjZWQuCgpPdGhl ciBtYWpvciBjaGFuZ2VzIGFyZToKLSBDb2Rpbmcgc3R5bGUgb2YgY29kZSBtb3ZlZCBpcyBjaGFu Z2VkLgotIE1vdmVkIHN0cnVjdCBweG0ybm9kZSBmcm9tIHNyYXQuYyB0byBzcmF0LmgKLSBEcm9w cGVkIHttZW1vcnkscHJvY2Vzc29yfV9ub2Rlc19wYXJzZWQgZnJvbSB4ODYvc3JhdC5jCi0gRHJv cHBlZCBzdGF0aWMgb24gbm9kZV90b19weG0oKSBhbmQgbW92ZWQgdG8gYmVnaW5uaW5nIG9mIHRo ZSBmaWxlLgotIE1hZGUgc29tZSBzdGF0aWMgZnVuY3Rpb25zIGFzIG5vbi1zdGF0aWMKLSBhY3Bp X25vZGVfZGlzdGFuY2UoKSBpcyBpbnRyb2R1Y2VkIGFuZCBjYWxsZWQgZnJvbSBfX25vZGVfZGlz dGFuY2UoKQotIFJlcGxhY2VkIGRpc3RhbmNlIGNvbnN0YW50cyB3aXRoIExPQ0FML1JFTU9URV9E SVNUQU5DRSBkZWZpbmVzCgpTaWduZWQtb2ZmLWJ5OiBWaWpheWEgS3VtYXIgSyA8VmlqYXlhLkt1 bWFyQGNhdml1bS5jb20+Ci0tLQp2MzogLSBNb3ZlZCBjb21tb24gZnVuY3Rpb24gZGVjbGFyYXRp b25zIGZyb20gYXNtLXg4Ni9zcmF0LmgKLS0tCiB4ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jICAg ICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICAgICAgICB8ICAg MiAtCiB4ZW4vYXJjaC94ODYvcGh5c2Rldi5jICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJj aC94ODYvc2V0dXAuYyAgICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvc21wYm9v dC5jICAgICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvc3JhdC5jICAgICAgICAgICAg ICAgICB8IDI0NiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3g4 Nl82NC9tbS5jICAgICAgICAgICAgfCAgIDEgKwogeGVuL2RyaXZlcnMvYWNwaS9NYWtlZmlsZSAg ICAgICAgICAgfCAgIDEgKwogeGVuL2RyaXZlcnMvYWNwaS9zcmF0LmMgICAgICAgICAgICAgfCAy OTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vZHJpdmVycy9wYXNz dGhyb3VnaC92dGQvaW9tbXUuYyB8ICAgMSArCiB4ZW4vaW5jbHVkZS9hY3BpL3NyYXQuaCAgICAg ICAgICAgICB8ICAyNCArKysKIHhlbi9pbmNsdWRlL2FzbS14ODYvbnVtYS5oICAgICAgICAgIHwg ICA1IC0KIDEyIGZpbGVzIGNoYW5nZWQsIDMzMSBpbnNlcnRpb25zKCspLCAyNTEgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2RvbTBfYnVpbGQuYyBiL3hlbi9hcmNoL3g4 Ni9kb20wX2J1aWxkLmMKaW5kZXggMGMxMjVlNi4uMDQxMjdlNyAxMDA2NDQKLS0tIGEveGVuL2Fy Y2gveDg2L2RvbTBfYnVpbGQuYworKysgYi94ZW4vYXJjaC94ODYvZG9tMF9idWlsZC5jCkBAIC0x MSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CiAjaW5jbHVkZSA8eGVuL3NjaGVk LWlmLmg+CiAjaW5jbHVkZSA8eGVuL3NvZnRpcnEuaD4KKyNpbmNsdWRlIDxhY3BpL3NyYXQuaD4K IAogI2luY2x1ZGUgPGFzbS9kb20wX2J1aWxkLmg+CiAjaW5jbHVkZSA8YXNtL2hwZXQuaD4KZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS5jIGIveGVuL2FyY2gveDg2L21tLmMKaW5kZXggMTlm NjcyZC4uNTQ5NzYyMSAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L21tLmMKKysrIGIveGVuL2Fy Y2gveDg2L21tLmMKQEAgLTEzNSw4ICsxMzUsNiBAQCBsMV9wZ2VudHJ5X3QgX19zZWN0aW9uKCIu YnNzLnBhZ2VfYWxpZ25lZCIpIF9fYWxpZ25lZChQQUdFX1NJWkUpCiAjZGVmaW5lIFBURV9VUERB VEVfV0lUSF9DTVBYQ0hHCiAjZW5kaWYKIAotcGFkZHJfdCBfX3JlYWRfbW9zdGx5IG1lbV9ob3Rw bHVnOwotCiAvKiBQcml2YXRlIGRvbWFpbiBzdHJ1Y3RzIGZvciBET01JRF9YRU4gYW5kIERPTUlE X0lPLiAqLwogc3RydWN0IGRvbWFpbiAqZG9tX3hlbiwgKmRvbV9pbywgKmRvbV9jb3c7CiAKZGlm ZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9waHlzZGV2LmMgYi94ZW4vYXJjaC94ODYvcGh5c2Rldi5j CmluZGV4IDBlYjQwOTcuLmE3M2E5NTQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9waHlzZGV2 LmMKKysrIGIveGVuL2FyY2gveDg2L3BoeXNkZXYuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRl IDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CiAjaW5jbHVkZSA8eGVuL2lvY2FwLmg+CiAjaW5jbHVkZSA8 eGVuL3NlcmlhbC5oPgorI2luY2x1ZGUgPGFjcGkvc3JhdC5oPgogI2luY2x1ZGUgPGFzbS9jdXJy ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vbXNpLmg+CmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc2V0dXAuYyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCmlu ZGV4IGRiNWRmNjkuLmI5NTdiOTYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCisr KyBiL3hlbi9hcmNoL3g4Ni9zZXR1cC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8eGVu L3RtZW1feGVuLmg+CiAjaW5jbHVkZSA8eGVuL3ZpcnR1YWxfcmVnaW9uLmg+CiAjaW5jbHVkZSA8 eGVuL3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8YWNwaS9zcmF0Lmg+CiAjaW5jbHVkZSA8cHVibGlj L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxjb21wYXQvcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxjb21w YXQveGVuLmg+CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc21wYm9vdC5jIGIveGVuL2FyY2gv eDg2L3NtcGJvb3QuYwppbmRleCAxNjhjOWQ0Li5mZjRjN2UxIDEwMDY0NAotLS0gYS94ZW4vYXJj aC94ODYvc21wYm9vdC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9zbXBib290LmMKQEAgLTMzLDYgKzMz LDcgQEAKICNpbmNsdWRlIDx4ZW4vc2VyaWFsLmg+CiAjaW5jbHVkZSA8eGVuL251bWEuaD4KICNp bmNsdWRlIDx4ZW4vY3B1Lmg+CisjaW5jbHVkZSA8YWNwaS9zcmF0Lmg+CiAjaW5jbHVkZSA8YXNt L2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxhc20v ZGVzYy5oPgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3NyYXQuYyBiL3hlbi9hcmNoL3g4Ni9z cmF0LmMKaW5kZXggYmUyNjM0YS4uZDVjYWNjZiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3Ny YXQuYworKysgYi94ZW4vYXJjaC94ODYvc3JhdC5jCkBAIC0xOCw5MiArMTgsMTAgQEAKICNpbmNs dWRlIDx4ZW4vYWNwaS5oPgogI2luY2x1ZGUgPHhlbi9udW1hLmg+CiAjaW5jbHVkZSA8eGVuL3Bm bi5oPgorI2luY2x1ZGUgPGFjcGkvc3JhdC5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CiAjaW5j bHVkZSA8YXNtL3BhZ2UuaD4KIAotc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKl9fcmVh ZF9tb3N0bHkgYWNwaV9zbGl0OwotCi1zdHJ1Y3QgcHhtMm5vZGUgewotCXVuc2lnbmVkIGludCBw eG07Ci0Jbm9kZWlkX3Qgbm9kZTsKLX07Ci1zdGF0aWMgc3RydWN0IHB4bTJub2RlIF9fcmVhZF9t b3N0bHkgcHhtMm5vZGVbTUFYX05VTU5PREVTXSA9Ci0JeyBbMCAuLi4gTUFYX05VTU5PREVTIC0g MV0gPSB7Lm5vZGUgPSBOVU1BX05PX05PREV9IH07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbm9k ZV90b19weG0obm9kZWlkX3Qgbik7Ci0KLXN0YXRpYyBfX2luaXRkYXRhIERFQ0xBUkVfQklUTUFQ KG1lbWJsa19ob3RwbHVnLCBOUl9OT0RFX01FTUJMS1MpOwotCi1zdGF0aWMgaW5saW5lIGJvb2wg bm9kZV9mb3VuZCh1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgcHhtKQotewotCXJldHVy biAoKHB4bTJub2RlW2lkeF0ucHhtID09IHB4bSkgJiYKLQkJKHB4bTJub2RlW2lkeF0ubm9kZSAh PSBOVU1BX05PX05PREUpKTsKLX0KLQotc3RhdGljIHZvaWQgcmVzZXRfcHhtMm5vZGUodm9pZCkK LXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4bTJu b2RlKTsgaSsrKQotCQlweG0ybm9kZVtpXS5ub2RlID0gTlVNQV9OT19OT0RFOwotfQotCi1ub2Rl aWRfdCBweG1fdG9fbm9kZSh1bnNpZ25lZCBpbnQgcHhtKQotewotCXVuc2lnbmVkIGludCBpOwot Ci0JaWYgKChweG0gPCBBUlJBWV9TSVpFKHB4bTJub2RlKSkgJiYgbm9kZV9mb3VuZChweG0sIHB4 bSkpCi0JCXJldHVybiBweG0ybm9kZVtweG1dLm5vZGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShweG0ybm9kZSk7IGkrKykKLQkJaWYgKG5vZGVfZm91bmQoaSwgcHhtKSkKLQkJCXJl dHVybiBweG0ybm9kZVtpXS5ub2RlOwotCi0JcmV0dXJuIE5VTUFfTk9fTk9ERTsKLX0KLQotbm9k ZWlkX3QgYWNwaV9zZXR1cF9ub2RlKHVuc2lnbmVkIGludCBweG0pCi17Ci0Jbm9kZWlkX3Qgbm9k ZTsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCXN0YXRpYyBib29sIHdhcm5lZDsKLQlzdGF0aWMgdW5z aWduZWQgaW50IG5vZGVzX2ZvdW5kOwotCi0JQlVJTERfQlVHX09OKE1BWF9OVU1OT0RFUyA+PSBO VU1BX05PX05PREUpOwotCi0JaWYgKHB4bSA8IEFSUkFZX1NJWkUocHhtMm5vZGUpKSB7Ci0JCWlm IChub2RlX2ZvdW5kKHB4bSwgcHhtKSkKLQkJCXJldHVybiBweG0ybm9kZVtweG1dLm5vZGU7Ci0K LQkJLyogVHJ5IHRvIG1haW50YWluIGluZGV4aW5nIG9mIHB4bTJub2RlIGJ5IHB4bSAqLwotCQlp ZiAocHhtMm5vZGVbcHhtXS5ub2RlID09IE5VTUFfTk9fTk9ERSkgewotCQkJaWR4ID0gcHhtOwot CQkJZ290byBmaW5pc2g7Ci0JCX0KLQl9Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJ WkUocHhtMm5vZGUpOyBpZHgrKykKLQkJaWYgKHB4bTJub2RlW2lkeF0ubm9kZSA9PSBOVU1BX05P X05PREUpCi0JCQlnb3RvIGZpbmlzaDsKLQotCWlmICghd2FybmVkKSB7Ci0JCXByaW50ayhLRVJO X1dBUk5JTkcgIlNSQVQ6IFRvbyBtYW55IHByb3hpbWl0eSBkb21haW5zICglI3gpXG4iLAotCQkg ICAgICAgcHhtKTsKLQkJd2FybmVkID0gdHJ1ZTsKLQl9Ci0KLQlyZXR1cm4gTlVNQV9OT19OT0RF OwotCi0gZmluaXNoOgotCW5vZGUgPSBub2Rlc19mb3VuZCsrOwotCWlmIChub2RlID49IE1BWF9O VU1OT0RFUykKLQkJcmV0dXJuIE5VTUFfTk9fTk9ERTsKLQlweG0ybm9kZVtpZHhdLnB4bSA9IHB4 bTsKLQlweG0ybm9kZVtpZHhdLm5vZGUgPSBub2RlOwotCi0JcmV0dXJuIG5vZGU7Ci19Ci0KIHZv aWQgX19pbml0IG51bWFfZmFpbGVkKHZvaWQpCiB7CiAJaW50IGk7CkBAIC0xMTUsNDggKzMzLDYg QEAgdm9pZCBfX2luaXQgbnVtYV9mYWlsZWQodm9pZCkKIAltZW1faG90cGx1ZyA9IDA7CiB9CiAK LS8qCi0gKiBBIGxvdCBvZiBCSU9TIGZpbGwgaW4gMTAgKD0gbm8gZGlzdGFuY2UpIGV2ZXJ5d2hl cmUuIFRoaXMgbWVzc2VzCi0gKiB1cCB0aGUgTlVNQSBoZXVyaXN0aWNzIHdoaWNoIHdhbnRzIHRo ZSBsb2NhbCBub2RlIHRvIGhhdmUgYSBzbWFsbGVyCi0gKiBkaXN0YW5jZSB0aGFuIHRoZSBvdGhl cnMuCi0gKiBEbyBzb21lIHF1aWNrIGNoZWNrcyBoZXJlIGFuZCBvbmx5IHVzZSB0aGUgU0xJVCBp ZiBpdCBwYXNzZXMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNsaXRfdmFsaWQoc3RydWN0IGFj cGlfdGFibGVfc2xpdCAqc2xpdCkKLXsKLQlpbnQgaSwgajsKLQlpbnQgZCA9IHNsaXQtPmxvY2Fs aXR5X2NvdW50OwotCWZvciAoaSA9IDA7IGkgPCBkOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8 IGQ7IGorKykgIHsKLQkJCXVpbnQ4X3QgdmFsID0gc2xpdC0+ZW50cnlbZCppICsgal07Ci0JCQlp ZiAoaSA9PSBqKSB7Ci0JCQkJaWYgKHZhbCAhPSAxMCkKLQkJCQkJcmV0dXJuIDA7Ci0JCQl9IGVs c2UgaWYgKHZhbCA8PSAxMCkKLQkJCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gMTsKLX0K LQotLyogQ2FsbGJhY2sgZm9yIFNMSVQgcGFyc2luZyAqLwotdm9pZCBfX2luaXQgYWNwaV9udW1h X3NsaXRfaW5pdChzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0KQotewotCXVuc2lnbmVkIGxv bmcgbWZuOwotCWlmICghc2xpdF92YWxpZChzbGl0KSkgewotCQlwcmludGsoS0VSTl9JTkZPICJB Q1BJOiBTTElUIHRhYmxlIGxvb2tzIGludmFsaWQuICIKLQkJICAgICAgICJOb3QgdXNlZC5cbiIp OwotCQlyZXR1cm47Ci0JfQotCW1mbiA9IGFsbG9jX2Jvb3RfcGFnZXMoUEZOX1VQKHNsaXQtPmhl YWRlci5sZW5ndGgpLCAxKTsKLQlpZiAoIW1mbikgewotCQlwcmludGsoS0VSTl9FUlIgIkFDUEk6 IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKLQkJICAgICAgICJzYXZpbmcgQUNQSSBT TElUIG51bWEgaW5mb3JtYXRpb24uXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlhY3BpX3NsaXQgPSBt Zm5fdG9fdmlydChtZm4pOwotCW1lbWNweShhY3BpX3NsaXQsIHNsaXQsIHNsaXQtPmhlYWRlci5s ZW5ndGgpOwotfQotCiAvKiBDYWxsYmFjayBmb3IgUHJveGltaXR5IERvbWFpbiAtPiB4MkFQSUMg bWFwcGluZyAqLwogdm9pZCBfX2luaXQKIGFjcGlfbnVtYV94MmFwaWNfYWZmaW5pdHlfaW5pdChj b25zdCBzdHJ1Y3QgYWNwaV9zcmF0X3gyYXBpY19jcHVfYWZmaW5pdHkgKnBhKQpAQCAtMjI0LDEw MCArMTAwLDYgQEAgYWNwaV9udW1hX3Byb2Nlc3Nvcl9hZmZpbml0eV9pbml0KGNvbnN0IHN0cnVj dCBhY3BpX3NyYXRfY3B1X2FmZmluaXR5ICpwYSkKIAkgICAgICAgcHhtLCBwYS0+YXBpY19pZCwg bm9kZSk7CiB9CiAKLS8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkgRG9t YWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwotdm9pZCBfX2luaXQKLWFjcGlfbnVtYV9t ZW1vcnlfYWZmaW5pdHlfaW5pdChjb25zdCBzdHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0eSAq bWEpCi17Ci0JcGFkZHJfdCBzdGFydCwgZW5kOwotCXVuc2lnbmVkIGludCBweG07Ci0Jbm9kZWlk X3Qgbm9kZTsKLQlpbnQgaTsKLQlzdHJ1Y3Qgbm9kZSAqbWVtYmxrOwotCi0JaWYgKHNyYXRfZGlz YWJsZWQoKSkKLQkJcmV0dXJuOwotCWlmIChtYS0+aGVhZGVyLmxlbmd0aCAhPSBzaXplb2Yoc3Ry dWN0IGFjcGlfc3JhdF9tZW1fYWZmaW5pdHkpKSB7Ci0JCW51bWFfZmFpbGVkKCk7Ci0JCXJldHVy bjsKLQl9Ci0JaWYgKCEobWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9FTkFCTEVEKSkKLQkJcmV0 dXJuOwotCi0JaWYgKGdldF9udW1fbm9kZV9tZW1ibGtzKCkgPj0gTlJfTk9ERV9NRU1CTEtTKQot CXsKLQkJZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAiVG9vIG1hbnkg bnVtYSBlbnRyeSwgdHJ5IGJpZ2dlciBOUl9OT0RFX01FTUJMS1MgXG4iKTsKLQkJbnVtYV9mYWls ZWQoKTsKLQkJcmV0dXJuOwotCX0KLQotCXN0YXJ0ID0gbWEtPmJhc2VfYWRkcmVzczsKLQllbmQg PSBzdGFydCArIG1hLT5sZW5ndGg7Ci0JcHhtID0gbWEtPnByb3hpbWl0eV9kb21haW47Ci0JaWYg KHNyYXRfcmV2IDwgMikKLQkJcHhtICY9IDB4ZmY7Ci0Jbm9kZSA9IGFjcGlfc2V0dXBfbm9kZShw eG0pOwotCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkgewotCQludW1hX2ZhaWxlZCgpOwotCQly ZXR1cm47Ci0JfQotCS8qIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMg ZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIqLwotCWkgPSBjb25mbGljdGluZ19tZW1ibGtzKHN0 YXJ0LCBlbmQpOwotCWlmIChpIDwgMCkKLQkJLyogZXZlcnl0aGluZyBmaW5lICovOwotCWVsc2Ug aWYgKGdldF9tZW1ibGtfbm9kZWlkKGkpID09IG5vZGUpIHsKLQkJYm9vbCBtaXNtYXRjaCA9ICEo bWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFKSAhPQotCQkgICAgICAgICAg ICAgICAgIXRlc3RfYml0KGksIG1lbWJsa19ob3RwbHVnKTsKLQotCQltZW1ibGsgPSBnZXRfbm9k ZV9tZW1ibGtfcmFuZ2UoaSk7Ci0KLQkJcHJpbnRrKCIlc1NSQVQ6IFBYTSAldSAoJSJQUkl4NjQi LSUiUFJJeDY0Iikgb3ZlcmxhcHMgd2l0aCBpdHNlbGYgKCUiUFJJeDY0Ii0lIlBSSXg2NCIpXG4i LAotCQkgICAgICAgbWlzbWF0Y2ggPyBLRVJOX0VSUiA6IEtFUk5fV0FSTklORywgcHhtLCBzdGFy dCwgZW5kLAotCQkgICAgICAgbWVtYmxrLT5zdGFydCwgbWVtYmxrLT5lbmQpOwotCQlpZiAobWlz bWF0Y2gpIHsKLQkJCW51bWFfZmFpbGVkKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2Ugewot CQltZW1ibGsgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoaSk7Ci0KLQkJcHJpbnRrKEtFUk5fRVJS Ci0JCSAgICAgICAiU1JBVDogUFhNICV1ICglIlBSSXg2NCItJSJQUkl4NjQiKSBvdmVybGFwcyB3 aXRoIFBYTSAldSAoJSJQUkl4NjQiLSUiUFJJeDY0IilcbiIsCi0JCSAgICAgICBweG0sIHN0YXJ0 LCBlbmQsIG5vZGVfdG9fcHhtKGdldF9tZW1ibGtfbm9kZWlkKGkpKSwKLQkJICAgICAgIG1lbWJs ay0+c3RhcnQsIG1lbWJsay0+ZW5kKTsKLQkJbnVtYV9mYWlsZWQoKTsKLQkJcmV0dXJuOwotCX0K LQlpZiAoIShtYS0+ZmxhZ3MgJiBBQ1BJX1NSQVRfTUVNX0hPVF9QTFVHR0FCTEUpKSB7Ci0JCXN0 cnVjdCBub2RlICpuZCA9IGdldF9udW1hX25vZGUobm9kZSk7Ci0KLQkJaWYgKCFub2RlX3Rlc3Rf YW5kX3NldChub2RlLCBtZW1vcnlfbm9kZXNfcGFyc2VkKSkgewotCQkJbmQtPnN0YXJ0ID0gc3Rh cnQ7Ci0JCQluZC0+ZW5kID0gZW5kOwotCQl9IGVsc2UgewotCQkJaWYgKHN0YXJ0IDwgbmQtPnN0 YXJ0KQotCQkJCW5kLT5zdGFydCA9IHN0YXJ0OwotCQkJaWYgKG5kLT5lbmQgPCBlbmQpCi0JCQkJ bmQtPmVuZCA9IGVuZDsKLQkJfQotCX0KLQlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBOb2RlICV1 IFBYTSAldSAlIlBSSXg2NCItJSJQUkl4NjQiJXNcbiIsCi0JICAgICAgIG5vZGUsIHB4bSwgc3Rh cnQsIGVuZCwKLQkgICAgICAgbWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxF ID8gIiAoaG90cGx1ZykiIDogIiIpOwotCi0JaWYgKG51bWFfYWRkX21lbWJsayhub2RlLCBzdGFy dCwgbWEtPmxlbmd0aCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBub2RlLWlkICV1IG91 dCBvZiByYW5nZVxuIiwgbm9kZSk7Ci0JCW51bWFfZmFpbGVkKCk7Ci0JCXJldHVybjsKLQl9Ci0K LQlpZiAobWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFKSB7Ci0JCV9fc2V0 X2JpdChnZXRfbnVtX25vZGVfbWVtYmxrcygpLCBtZW1ibGtfaG90cGx1Zyk7Ci0JCWlmIChlbmQg PiBtZW1faG90cGx1ZykKLQkJCW1lbV9ob3RwbHVnID0gZW5kOwotCX0KLX0KLQogLyogU2FuaXR5 IGNoZWNrIHRvIGNhdGNoIG1vcmUgYmFkIFNSQVRzICh0aGV5IGFyZSBhbWF6aW5nbHkgY29tbW9u KS4KICAgIE1ha2Ugc3VyZSB0aGUgUFhNcyBjb3ZlciBhbGwgbWVtb3J5LiAqLwogYm9vbCBfX2lu aXQgYXJjaF9zYW5pdGl6ZV9ub2Rlc19tZW1vcnkodm9pZCkKQEAgLTQxNywzMyArMTk5LDkgQEAg dm9pZCBfX2luaXQgc3JhdF9wYXJzZV9yZWdpb25zKHBhZGRyX3QgYWRkcikKIAlwZm5fcGR4X2hv bGVfc2V0dXAobWFzayA+PiBQQUdFX1NISUZUKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBu b2RlX3RvX3B4bShub2RlaWRfdCBuKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKChuIDwg QVJSQVlfU0laRShweG0ybm9kZSkpICYmIChweG0ybm9kZVtuXS5ub2RlID09IG4pKQotCQlyZXR1 cm4gcHhtMm5vZGVbbl0ucHhtOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4bTJub2Rl KTsgaSsrKQotCQlpZiAocHhtMm5vZGVbaV0ubm9kZSA9PSBuKQotCQkJcmV0dXJuIHB4bTJub2Rl W2ldLnB4bTsKLQlyZXR1cm4gMDsKLX0KLQogdWludDhfdCBfX25vZGVfZGlzdGFuY2Uobm9kZWlk X3QgYSwgbm9kZWlkX3QgYikKIHsKLQl1bnNpZ25lZCBpbnQgaW5kZXg7Ci0JdWludDhfdCBzbGl0 X3ZhbDsKLQotCWlmICghYWNwaV9zbGl0KQotCQlyZXR1cm4gYSA9PSBiID8gMTAgOiAyMDsKLQlp bmRleCA9IGFjcGlfc2xpdC0+bG9jYWxpdHlfY291bnQgKiBub2RlX3RvX3B4bShhKTsKLQlzbGl0 X3ZhbCA9IGFjcGlfc2xpdC0+ZW50cnlbaW5kZXggKyBub2RlX3RvX3B4bShiKV07Ci0KLQkvKiBB Q1BJIGRlZmluZXMgMHhmZiBhcyBhbiB1bnJlYWNoYWJsZSBub2RlIGFuZCAwLTkgYXJlIHVuZGVm aW5lZCAqLwotCWlmICgoc2xpdF92YWwgPT0gMHhmZikgfHwgKHNsaXRfdmFsIDw9IDkpKQotCQly ZXR1cm4gTlVNQV9OT19ESVNUQU5DRTsKLQllbHNlCi0JCXJldHVybiBzbGl0X3ZhbDsKKwlyZXR1 cm4gYWNwaV9ub2RlX2Rpc3RhbmNlKGEsIGIpOwogfQogCiBFWFBPUlRfU1lNQk9MKF9fbm9kZV9k aXN0YW5jZSk7CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYveDg2XzY0L21tLmMgYi94ZW4vYXJj aC94ODYveDg2XzY0L21tLmMKaW5kZXggYTRmZmExZi4uYjZlOGVhZiAxMDA2NDQKLS0tIGEveGVu L2FyY2gveDg2L3g4Nl82NC9tbS5jCisrKyBiL3hlbi9hcmNoL3g4Ni94ODZfNjQvbW0uYwpAQCAt MjcsNiArMjcsNyBAQCBhc20oIi5maWxlIFwiIiBfX0ZJTEVfXyAiXCIiKTsKICNpbmNsdWRlIDx4 ZW4vZ3Vlc3RfYWNjZXNzLmg+CiAjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUg PHhlbi9tZW1fYWNjZXNzLmg+CisjaW5jbHVkZSA8YWNwaS9zcmF0Lmg+CiAjaW5jbHVkZSA8YXNt L2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vYXNtX2RlZm5zLmg+CiAjaW5jbHVkZSA8YXNtL3Bh Z2UuaD4KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi94ZW4vZHJpdmVy cy9hY3BpL01ha2VmaWxlCmluZGV4IDQ0NGIxMWQuLjY5ZWRjMjYgMTAwNjQ0Ci0tLSBhL3hlbi9k cml2ZXJzL2FjcGkvTWFrZWZpbGUKKysrIGIveGVuL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAt NCw2ICs0LDcgQEAgc3ViZGlyLSQoQ09ORklHX1g4NikgKz0gYXBlaQogCiBvYmotYmluLXkgKz0g dGFibGVzLmluaXQubwogb2JqLSQoQ09ORklHX05VTUEpICs9IG51bWEubworb2JqLSQoQ09ORklH X05VTUEpICs9IHNyYXQubwogb2JqLXkgKz0gb3NsLm8KIG9iai0kKENPTkZJR19IQVNfQ1BVRlJF USkgKz0gcG1zdGF0Lm8KIApkaWZmIC0tZ2l0IGEveGVuL2RyaXZlcnMvYWNwaS9zcmF0LmMgYi94 ZW4vZHJpdmVycy9hY3BpL3NyYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xOWIxNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2RyaXZlcnMvYWNwaS9zcmF0LmMKQEAg LTAsMCArMSwyOTggQEAKKy8qCisgKiBBQ1BJIDMuMCBiYXNlZCBOVU1BIHNldHVwCisgKiBDb3B5 cmlnaHQgMjAwNCBBbmRpIEtsZWVuLCBTdVNFIExhYnMuCisgKgorICogUmVhZHMgdGhlIEFDUEkg U1JBVCB0YWJsZSB0byBmaWd1cmUgb3V0IHdoYXQgbWVtb3J5IGJlbG9uZ3MgdG8gd2hpY2ggQ1BV cy4KKyAqCisgKiBDYWxsZWQgZnJvbSBhY3BpX251bWFfaW5pdCB3aGlsZSByZWFkaW5nIHRoZSBT UkFUIGFuZCBTTElUIHRhYmxlcy4KKyAqIEFzc3VtZXMgYWxsIG1lbW9yeSByZWdpb25zIGJlbG9u Z2luZyB0byBhIHNpbmdsZSBwcm94aW1pdHkgZG9tYWluCisgKiBhcmUgaW4gb25lIGNodW5rLiBI b2xlcyBiZXR3ZWVuIHRoZW0gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbm9kZS4KKyAqCisgKiBB ZGFwdGVkIGZvciBYZW46IFJ5YW4gSGFycGVyIDxyeWFuaEB1cy5pYm0uY29tPgorICovCisKKyNp bmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2luY2x1ZGUgPHhlbi9p bnR0eXBlcy5oPgorI2luY2x1ZGUgPHhlbi9ub2RlbWFzay5oPgorI2luY2x1ZGUgPHhlbi9hY3Bp Lmg+CisjaW5jbHVkZSA8eGVuL251bWEuaD4KKyNpbmNsdWRlIDx4ZW4vcGZuLmg+CisjaW5jbHVk ZSA8YWNwaS9zcmF0Lmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vYWNw aS5oPgorCitwYWRkcl90IF9fcmVhZF9tb3N0bHkgbWVtX2hvdHBsdWc7CitzdGF0aWMgc3RydWN0 IGFjcGlfdGFibGVfc2xpdCAqX19yZWFkX21vc3RseSBhY3BpX3NsaXQ7CitzdGF0aWMgc3RydWN0 IHB4bTJub2RlIF9fcmVhZF9tb3N0bHkgcHhtMm5vZGVbTUFYX05VTU5PREVTXSA9CisgICAgeyBb MCAuLi4gTUFYX05VTU5PREVTIC0gMV0gPSB7Lm5vZGUgPSBOVU1BX05PX05PREV9IH07CisKK3N0 YXRpYyBfX2luaXRkYXRhIERFQ0xBUkVfQklUTUFQKG1lbWJsa19ob3RwbHVnLCBOUl9OT0RFX01F TUJMS1MpOworCitzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9mb3VuZCh1bnNpZ25lZCBpbnQgaWR4 LCB1bnNpZ25lZCBpbnQgcHhtKQoreworICAgIHJldHVybiAoKHB4bTJub2RlW2lkeF0ucHhtID09 IHB4bSkgJiYKKyAgICAgICAgICAgIChweG0ybm9kZVtpZHhdLm5vZGUgIT0gTlVNQV9OT19OT0RF KSk7Cit9CisKK3ZvaWQgcmVzZXRfcHhtMm5vZGUodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQg aTsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgQVJSQVlfU0laRShweG0ybm9kZSk7IGkrKyApCisg ICAgICAgIHB4bTJub2RlW2ldLm5vZGUgPSBOVU1BX05PX05PREU7Cit9CisKK3Vuc2lnbmVkIGlu dCBub2RlX3RvX3B4bShub2RlaWRfdCBuKQoreworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg aWYgKCAobiA8IEFSUkFZX1NJWkUocHhtMm5vZGUpKSAmJiAocHhtMm5vZGVbbl0ubm9kZSA9PSBu KSApCisgICAgICAgIHJldHVybiBweG0ybm9kZVtuXS5weG07CisKKyAgICBmb3IgKCBpID0gMDsg aSA8IEFSUkFZX1NJWkUocHhtMm5vZGUpOyBpKysgKQorICAgICAgICBpZiAoIHB4bTJub2RlW2ld Lm5vZGUgPT0gbiApCisgICAgICAgICAgICByZXR1cm4gcHhtMm5vZGVbaV0ucHhtOworCisgICAg cmV0dXJuIDA7Cit9CisKK25vZGVpZF90IHB4bV90b19ub2RlKHVuc2lnbmVkIGludCBweG0pCit7 CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIChweG0gPCBBUlJBWV9TSVpFKHB4bTJu b2RlKSkgJiYgbm9kZV9mb3VuZChweG0sIHB4bSkgKQorICAgICAgICByZXR1cm4gcHhtMm5vZGVb cHhtXS5ub2RlOworCisgICAgZm9yICggaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4bTJub2RlKTsg aSsrICkKKyAgICAgICAgaWYgKCBub2RlX2ZvdW5kKGksIHB4bSkgKQorICAgICAgICAgICAgcmV0 dXJuIHB4bTJub2RlW2ldLm5vZGU7CisKKyAgICByZXR1cm4gTlVNQV9OT19OT0RFOworfQorCitu b2RlaWRfdCBhY3BpX3NldHVwX25vZGUodW5zaWduZWQgaW50IHB4bSkKK3sKKyAgICBub2RlaWRf dCBub2RlOworICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgc3RhdGljIGJvb2wgd2FybmVkOwor ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbm9kZXNfZm91bmQ7CisKKyAgICBCVUlMRF9CVUdfT04o TUFYX05VTU5PREVTID49IE5VTUFfTk9fTk9ERSk7CisKKyAgICBpZiAoIHB4bSA8IEFSUkFZX1NJ WkUocHhtMm5vZGUpICkKKyAgICB7CisgICAgICAgIGlmICggbm9kZV9mb3VuZChweG0sIHB4bSkg KQorICAgICAgICAgICAgcmV0dXJuIHB4bTJub2RlW3B4bV0ubm9kZTsKKworICAgICAgICAvKiBU cnkgdG8gbWFpbnRhaW4gaW5kZXhpbmcgb2YgcHhtMm5vZGUgYnkgcHhtICovCisgICAgICAgIGlm ICggcHhtMm5vZGVbcHhtXS5ub2RlID09IE5VTUFfTk9fTk9ERSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIGlkeCA9IHB4bTsKKyAgICAgICAgICAgIGdvdG8gZmluaXNoOworICAgICAgICB9Cisg ICAgfQorCisgICAgZm9yICggaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShweG0ybm9kZSk7IGlk eCsrICkKKyAgICAgICAgaWYgKCBweG0ybm9kZVtpZHhdLm5vZGUgPT0gTlVNQV9OT19OT0RFICkK KyAgICAgICAgICAgIGdvdG8gZmluaXNoOworCisgICAgaWYgKCAhd2FybmVkICkKKyAgICB7Cisg ICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIlNSQVQ6IFRvbyBtYW55IHByb3hpbWl0eSBkb21h aW5zICglI3gpXG4iLCBweG0pOworICAgICAgICB3YXJuZWQgPSB0cnVlOworICAgIH0KKworICAg IHJldHVybiBOVU1BX05PX05PREU7CisKKyBmaW5pc2g6CisgICAgbm9kZSA9IG5vZGVzX2ZvdW5k Kys7CisgICAgaWYgKCBub2RlID49IE1BWF9OVU1OT0RFUyApCisgICAgICAgIHJldHVybiBOVU1B X05PX05PREU7CisgICAgcHhtMm5vZGVbaWR4XS5weG0gPSBweG07CisgICAgcHhtMm5vZGVbaWR4 XS5ub2RlID0gbm9kZTsKKworICAgIHJldHVybiBub2RlOworfQorCisvKgorICogQSBsb3Qgb2Yg QklPUyBmaWxsIGluIDEwICg9IG5vIGRpc3RhbmNlKSBldmVyeXdoZXJlLiBUaGlzIG1lc3Nlcwor ICogdXAgdGhlIE5VTUEgaGV1cmlzdGljcyB3aGljaCB3YW50cyB0aGUgbG9jYWwgbm9kZSB0byBo YXZlIGEgc21hbGxlcgorICogZGlzdGFuY2UgdGhhbiB0aGUgb3RoZXJzLgorICogRG8gc29tZSBx dWljayBjaGVja3MgaGVyZSBhbmQgb25seSB1c2UgdGhlIFNMSVQgaWYgaXQgcGFzc2VzLgorICov CitzdGF0aWMgaW50IF9faW5pdCBzbGl0X3ZhbGlkKHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKnNs aXQpCit7CisgICAgaW50IGksIGo7CisgICAgaW50IGQgPSBzbGl0LT5sb2NhbGl0eV9jb3VudDsK KworICAgIGZvciAoIGkgPSAwOyBpIDwgZDsgaSsrICkKKyAgICB7CisgICAgICAgIGZvciAoIGog PSAwOyBqIDwgZDsgaisrICkKKyAgICAgICAgeworICAgICAgICAgICAgdWludDhfdCB2YWwgPSBz bGl0LT5lbnRyeVtkKmkgKyBqXTsKKworICAgICAgICAgICAgaWYgKCBpID09IGogKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIGlmICggdmFsICE9IExPQ0FMX0RJU1RBTkNFICkKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCB2YWwg PD0gTE9DQUxfRElTVEFOQ0UgKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9 CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8qIENhbGxiYWNrIGZvciBTTElUIHBhcnNp bmcgKi8KK3ZvaWQgX19pbml0IGFjcGlfbnVtYV9zbGl0X2luaXQoc3RydWN0IGFjcGlfdGFibGVf c2xpdCAqc2xpdCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIG1mbjsKKworICAgIGlmICggIXNsaXRf dmFsaWQoc2xpdCkgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiQUNQSTogU0xJ VCB0YWJsZSBsb29rcyBpbnZhbGlkLiBOb3QgdXNlZC5cbiIpOworICAgICAgICByZXR1cm47Cisg ICAgfQorICAgIG1mbiA9IGFsbG9jX2Jvb3RfcGFnZXMoUEZOX1VQKHNsaXQtPmhlYWRlci5sZW5n dGgpLCAxKTsKKyAgICBpZiAoICFtZm4gKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fRVJS ICJBQ1BJOiBVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCisgICAgICAgICAgICAgICAi c2F2aW5nIEFDUEkgU0xJVCBudW1hIGluZm9ybWF0aW9uLlxuIik7CisgICAgICAgIHJldHVybjsK KyAgICB9CisgICAgYWNwaV9zbGl0ID0gbWZuX3RvX3ZpcnQobWZuKTsKKyAgICBtZW1jcHkoYWNw aV9zbGl0LCBzbGl0LCBzbGl0LT5oZWFkZXIubGVuZ3RoKTsKK30KKworLyogQ2FsbGJhY2sgZm9y IHBhcnNpbmcgb2YgdGhlIFByb3hpbWl0eSBEb21haW4gPC0+IE1lbW9yeSBBcmVhIG1hcHBpbmdz ICovCit2b2lkIF9faW5pdAorYWNwaV9udW1hX21lbW9yeV9hZmZpbml0eV9pbml0KGNvbnN0IHN0 cnVjdCBhY3BpX3NyYXRfbWVtX2FmZmluaXR5ICptYSkKK3sKKyAgICBwYWRkcl90IHN0YXJ0LCBl bmQ7CisgICAgdW5zaWduZWQgaW50IHB4bTsKKyAgICBub2RlaWRfdCBub2RlOworICAgIGludCBp OworICAgIHN0cnVjdCBub2RlICptZW1ibGs7CisKKyAgICBpZiAoIHNyYXRfZGlzYWJsZWQoKSAp CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIG1hLT5oZWFkZXIubGVuZ3RoICE9IHNpemVvZihz dHJ1Y3QgYWNwaV9zcmF0X21lbV9hZmZpbml0eSkgKQorICAgIHsKKyAgICAgICAgbnVtYV9mYWls ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoICEobWEtPmZsYWdzICYgQUNQ SV9TUkFUX01FTV9FTkFCTEVEKSApCisgICAgICAgIHJldHVybjsKKworICAgIGlmICggZ2V0X251 bV9ub2RlX21lbWJsa3MoKSA+PSBOUl9OT0RFX01FTUJMS1MgKQorICAgIHsKKyAgICAgICAgZHBy aW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAiVG9vIG1hbnkgbnVtYSBlbnRy eSwgdHJ5IGJpZ2dlciBOUl9OT0RFX01FTUJMS1MgXG4iKTsKKyAgICAgICAgbnVtYV9mYWlsZWQo KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHN0YXJ0ID0gbWEtPmJhc2VfYWRkcmVz czsKKyAgICBlbmQgPSBzdGFydCArIG1hLT5sZW5ndGg7CisgICAgcHhtID0gbWEtPnByb3hpbWl0 eV9kb21haW47CisgICAgaWYgKCBzcmF0X3JldiA8IDIgKQorICAgICAgICBweG0gJj0gMHhmZjsK KyAgICBub2RlID0gYWNwaV9zZXR1cF9ub2RlKHB4bSk7CisgICAgaWYgKCBub2RlID09IE5VTUFf Tk9fTk9ERSApCisgICAgeworICAgICAgICBudW1hX2ZhaWxlZCgpOworICAgICAgICByZXR1cm47 CisgICAgfQorICAgIC8qIEl0IGlzIGZpbmUgdG8gYWRkIHRoaXMgYXJlYSB0byB0aGUgbm9kZXMg ZGF0YSBpdCB3aWxsIGJlIHVzZWQgbGF0ZXIqLworICAgIGkgPSBjb25mbGljdGluZ19tZW1ibGtz KHN0YXJ0LCBlbmQpOworICAgIGlmICggaSA8IDAgKQorICAgICAgICAvKiBldmVyeXRoaW5nIGZp bmUgKi87CisgICAgZWxzZSBpZiAoIGdldF9tZW1ibGtfbm9kZWlkKGkpID09IG5vZGUgKQorICAg IHsKKyAgICAgICAgYm9vbCBtaXNtYXRjaCA9ICEobWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9I T1RfUExVR0dBQkxFKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgIXRlc3RfYml0KGksIG1l bWJsa19ob3RwbHVnKTsKKworICAgICAgICBtZW1ibGsgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2Uo aSk7CisKKyAgICAgICAgcHJpbnRrKCIlc1NSQVQ6IFBYTSAldSAoJSJQUkl4NjQiLSUiUFJJeDY0 Iikgb3ZlcmxhcHMgd2l0aCBpdHNlbGYgKCUiUFJJeDY0Ii0lIlBSSXg2NCIpXG4iLAorICAgICAg ICAgICAgICAgbWlzbWF0Y2ggPyBLRVJOX0VSUiA6IEtFUk5fV0FSTklORywgcHhtLCBzdGFydCwg ZW5kLAorICAgICAgICAgICAgICAgbWVtYmxrLT5zdGFydCwgbWVtYmxrLT5lbmQpOworICAgICAg ICBpZiAoIG1pc21hdGNoICkKKyAgICAgICAgeworICAgICAgICAgICAgbnVtYV9mYWlsZWQoKTsK KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgewor ICAgICAgICBtZW1ibGsgPSBnZXRfbm9kZV9tZW1ibGtfcmFuZ2UoaSk7CisKKyAgICAgICAgcHJp bnRrKEtFUk5fRVJSCisgICAgICAgICAgICAgICAiU1JBVDogUFhNICV1ICglIlBSSXg2NCItJSJQ Ukl4NjQiKSBvdmVybGFwcyB3aXRoIFBYTSAldSAoJSJQUkl4NjQiLSUiUFJJeDY0IilcbiIsCisg ICAgICAgICAgICAgICBweG0sIHN0YXJ0LCBlbmQsIG5vZGVfdG9fcHhtKGdldF9tZW1ibGtfbm9k ZWlkKGkpKSwKKyAgICAgICAgICAgICAgIG1lbWJsay0+c3RhcnQsIG1lbWJsay0+ZW5kKTsKKyAg ICAgICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoICEo bWEtPmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFKSApCisgICAgeworICAgICAg ICBzdHJ1Y3Qgbm9kZSAqbmQgPSBnZXRfbnVtYV9ub2RlKG5vZGUpOworCisgICAgICAgIGlmICgg IW5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG1lbW9yeV9ub2Rlc19wYXJzZWQpICkKKyAgICAgICAg eworICAgICAgICAgICAgbmQtPnN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICAgICBuZC0+ZW5kID0g ZW5kOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYg KCBzdGFydCA8IG5kLT5zdGFydCApCisgICAgICAgICAgICAgICAgbmQtPnN0YXJ0ID0gc3RhcnQ7 CisgICAgICAgICAgICBpZiAoIG5kLT5lbmQgPCBlbmQgKQorICAgICAgICAgICAgICAgIG5kLT5l bmQgPSBlbmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRrKEtFUk5fSU5GTyAiU1JBVDog Tm9kZSAldSBQWE0gJXUgJSJQUkl4NjQiLSUiUFJJeDY0IiVzXG4iLAorICAgICAgICAgICBub2Rl LCBweG0sIHN0YXJ0LCBlbmQsCisgICAgICAgICAgIG1hLT5mbGFncyAmIEFDUElfU1JBVF9NRU1f SE9UX1BMVUdHQUJMRSA/ICIgKGhvdHBsdWcpIiA6ICIiKTsKKworICAgIGlmICggbnVtYV9hZGRf bWVtYmxrKG5vZGUsIHN0YXJ0LCBtYS0+bGVuZ3RoKSApCisgICAgeworICAgICAgICBwcmludGso S0VSTl9FUlIgIlNSQVQ6IG5vZGUtaWQgJXUgb3V0IG9mIHJhbmdlXG4iLCBub2RlKTsKKyAgICAg ICAgbnVtYV9mYWlsZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICggbWEt PmZsYWdzICYgQUNQSV9TUkFUX01FTV9IT1RfUExVR0dBQkxFICkKKyAgICB7CisgICAgICAgIF9f c2V0X2JpdChnZXRfbnVtX25vZGVfbWVtYmxrcygpLCBtZW1ibGtfaG90cGx1Zyk7CisgICAgICAg IGlmICggZW5kID4gbWVtX2hvdHBsdWcgKQorICAgICAgICAgICAgbWVtX2hvdHBsdWcgPSBlbmQ7 CisgICAgfQorfQorCit1aW50OF90IGFjcGlfbm9kZV9kaXN0YW5jZShub2RlaWRfdCBhLCBub2Rl aWRfdCBiKQoreworICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICB1aW50OF90IHNsaXRfdmFs OworCisgICAgaWYgKCAhYWNwaV9zbGl0ICkKKyAgICAgICAgcmV0dXJuIGEgPT0gYiA/IExPQ0FM X0RJU1RBTkNFIDogUkVNT1RFX0RJU1RBTkNFOworICAgIGluZGV4ID0gYWNwaV9zbGl0LT5sb2Nh bGl0eV9jb3VudCAqIG5vZGVfdG9fcHhtKGEpOworICAgIHNsaXRfdmFsID0gYWNwaV9zbGl0LT5l bnRyeVtpbmRleCArIG5vZGVfdG9fcHhtKGIpXTsKKworICAgIC8qIEFDUEkgZGVmaW5lcyAweGZm IGFzIGFuIHVucmVhY2hhYmxlIG5vZGUgYW5kIDAtOSBhcmUgdW5kZWZpbmVkICovCisgICAgaWYg KCAoc2xpdF92YWwgPT0gMHhmZikgfHwgKHNsaXRfdmFsIDw9IDkpICkKKyAgICAgICAgcmV0dXJu IE5VTUFfTk9fRElTVEFOQ0U7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gc2xpdF92YWw7Cit9 CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6 ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisg KiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9kcml2ZXJzL3Bhc3N0aHJvdWdoL3Z0ZC9pb21t dS5jIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmMKaW5kZXggMTkzMjhmNi4u MjczMTdkZCAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmMK KysrIGIveGVuL2RyaXZlcnMvcGFzc3Rocm91Z2gvdnRkL2lvbW11LmMKQEAgLTMwLDYgKzMwLDcg QEAKICNpbmNsdWRlIDx4ZW4vcGNpLmg+CiAjaW5jbHVkZSA8eGVuL3BjaV9yZWdzLmg+CiAjaW5j bHVkZSA8eGVuL2tleWhhbmRsZXIuaD4KKyNpbmNsdWRlIDxhY3BpL3NyYXQuaD4KICNpbmNsdWRl IDxhc20vbXNpLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9odm0vdm14 L3ZteC5oPgpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYWNwaS9zcmF0LmggYi94ZW4vaW5jbHVk ZS9hY3BpL3NyYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTliODIy Ci0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUvYWNwaS9zcmF0LmgKQEAgLTAsMCArMSwy NCBAQAorI2lmbmRlZiBfX1hFTl9TUkFUX0hfXworI2RlZmluZSBfX1hFTl9TUkFUX0hfXworCitl eHRlcm4gaW50IHNyYXRfcmV2Oworc3RydWN0IHB4bTJub2RlIHsKKyAgICB1bnNpZ25lZCBpbnQg cHhtOworICAgIG5vZGVpZF90IG5vZGU7Cit9OworCitub2RlaWRfdCBweG1fdG9fbm9kZSh1bnNp Z25lZCBweG0pOworbm9kZWlkX3QgYWNwaV9zZXR1cF9ub2RlKHVuc2lnbmVkIHB4bSk7Cit1bnNp Z25lZCBpbnQgbm9kZV90b19weG0obm9kZWlkX3Qgbik7Cit1aW50OF90IGFjcGlfbm9kZV9kaXN0 YW5jZShub2RlaWRfdCBhLCBub2RlaWRfdCBiKTsKK3ZvaWQgcmVzZXRfcHhtMm5vZGUodm9pZCk7 CisjZW5kaWYgLyogX19YRU5fU1JBVF9IX18gKi8KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoK KyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9udW1hLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaAppbmRl eCBmYzQ3NDdmLi40ZDI2NmMyIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L251bWEu aAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaApAQCAtNSwxMyArNSw4IEBACiAKIHR5 cGVkZWYgdWludDhfdCBub2RlaWRfdDsKIAotZXh0ZXJuIGludCBzcmF0X3JldjsKLQotZXh0ZXJu IG5vZGVpZF90IHB4bV90b19ub2RlKHVuc2lnbmVkIGludCBweG0pOwotCiAjZGVmaW5lIFpPTkVf QUxJR04gKDFVTCA8PCAoTUFYX09SREVSK1BBR0VfU0hJRlQpKQogCi1leHRlcm4gbm9kZWlkX3Qg YWNwaV9zZXR1cF9ub2RlKHVuc2lnbmVkIGludCBweG0pOwogZXh0ZXJuIHZvaWQgc3JhdF9kZXRl Y3Rfbm9kZShpbnQgY3B1KTsKIAogZXh0ZXJuIG5vZGVpZF90IGFwaWNpZF90b19ub2RlW107Ci0t IAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Clhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9s aXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=