From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v4 02/24] x86: refactor psr: remove L3 CAT/CDP codes. Date: Wed, 14 Dec 2016 12:07:42 +0800 Message-ID: <1481688484-5093-3-git-send-email-yi.y.sun@linux.intel.com> References: <1481688484-5093-1-git-send-email-yi.y.sun@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH7RK-0004l8-KJ for xen-devel@lists.xenproject.org; Wed, 14 Dec 2016 11:09:38 +0000 In-Reply-To: <1481688484-5093-1-git-send-email-yi.y.sun@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, he.chen@linux.intel.com, ian.jackson@eu.citrix.com, Yi Sun , mengxu@cis.upenn.edu, jbeulich@suse.com, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org VGhlIGN1cnJlbnQgY2FjaGUgYWxsb2NhdGlvbiBjb2RlcyBpbiBwc3IuYyBkbyBub3QgY29uc2lk ZXIKZnV0dXJlIGZlYXR1cmVzIGFkZGl0aW9uIGFuZCBhcmUgbm90IGZyaWVuZGx5IHRvIGV4dGVu ZC4KClRvIG1ha2UgcHNyLmMgYmUgbW9yZSBmbGV4aWJsZSB0byBhZGQgbmV3IGZlYXR1cmVzIGFu ZCBmdWxmaWxsCnRoZSBwcm9ncmFtIHByaW5jaXBsZSwgb3BlbiBmb3IgZXh0ZW5zaW9uIGJ1dCBj bG9zZWQgZm9yCm1vZGlmaWNhdGlvbiwgd2UgaGF2ZSB0byByZWZhY3RvciB0aGUgcHNyLmM6CjEu IEFuYWx5emUgY2FjaGUgYWxsb2NhdGlvbiBmZWF0dXJlcyBhbmQgYWJzdHJhY3QgZ2VuZXJhbCBk YXRhCiAgIHN0cnVjdHVyZXMuCjIuIEFuYWx5emUgdGhlIGluaXQgYW5kIGFsbCBvdGhlciBmdW5j dGlvbnMgZmxvdywgYWJzdHJhY3QgYWxsCiAgIHN0ZXBzIHRoYXQgZGlmZmVyZW50IGZlYXR1cmVz IG1heSBoYXZlIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgIE1ha2UgdGhlc2Ugc3RlcHMg YmUgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZWdpc3RlciBmZWF0dXJlCiAgIHNwZWNpZmljIGZ1 Y3Rpb25zLiBUaGVuLCB0aGUgbWFpbiBwcm9jZXNzZXMgd2lsbCBub3QgYmUgY2hhbmdlZAogICB3 aGVuIGludHJvZHVjaW5nIGEgbmV3IGZlYXR1cmUuCgpCZWNhdXNlIHRoZSBxdWFudGl0eSBvZiBy ZWZhY3RvciBjb2RlcyBpcyBiaWcgYW5kIHRoZSBsb2dpY3MgYXJlCmNoYW5nZWQgYSBsb3QsIGl0 IHdpbGwgY2F1c2UgcmV2aWV3ZXJzIGNvbmZ1c2VkIGlmIGp1c3QgY2hhbmdlCm9sZCBjb2Rlcy4g UmV2aWV3ZXJzIGhhdmUgdG8gdW5kZXJzdGFuZCBib3RoIG9sZCBjb2RlcyBhbmQgbmV3CmltcGxl bWVudGF0aW9ucy4gQWZ0ZXIgcmV2aWV3IGl0ZXJhdGlvbnMgZnJvbSBWMSB0byBWMywgSmFuIGhh cwpwcm9wb3NlZCB0byByZW1vdmUgYWxsIG9sZCBjYWNoZSBhbGxvY2F0aW9uIGNvZGVzIGZpcnN0 bHksIHRoZW4KaW1wbGVtZW50IG5ldyBjb2RlcyBzdGVwIGJ5IHN0ZXAuIFRoaXMgd2lsbCBoZWxw IHRvIG1ha2UgY29kZXMKYmUgbW9yZSBlYXNpbHkgcmV2aWV3YWJsZS4KClRoZXJlIGlzIG5vIGNv bnN0cnVjdGlvbiB3aXRob3V0IGRlc3RydWN0aW9uLiBTbywgdGhpcyBwYXRjaApyZW1vdmVzIGFs bCBjdXJyZW50IEwzIENBVC9DRFAgY29kZXMgaW4gcHNyLmMuIFRoZSBmb2xsb3dpbmcKcGF0Y2hl cyB3aWxsIGludHJvZHVjZSB0aGUgbmV3IG1lY2hhbmlzbS4KClNpZ25lZC1vZmYtYnk6IFlpIFN1 biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wc3IuYyB8IDQ3 MCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwppbmRleCAwYjUw NzNjLi45NmE4NTg5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMKKysrIGIveGVuL2Fy Y2gveDg2L3Bzci5jCkBAIC0yMywyNCArMjMsNiBAQAogI2RlZmluZSBQU1JfQ0FUICAgICAgICAo MTw8MSkKICNkZWZpbmUgUFNSX0NEUCAgICAgICAgKDE8PDIpCiAKLXN0cnVjdCBwc3JfY2F0X2Ni bSB7Ci0gICAgdW5pb24gewotICAgICAgICB1aW50NjRfdCBjYm07Ci0gICAgICAgIHN0cnVjdCB7 Ci0gICAgICAgICAgICB1aW50NjRfdCBjb2RlOwotICAgICAgICAgICAgdWludDY0X3QgZGF0YTsK LSAgICAgICAgfTsKLSAgICB9OwotICAgIHVuc2lnbmVkIGludCByZWY7Ci19OwotCi1zdHJ1Y3Qg cHNyX2NhdF9zb2NrZXRfaW5mbyB7Ci0gICAgdW5zaWduZWQgaW50IGNibV9sZW47Ci0gICAgdW5z aWduZWQgaW50IGNvc19tYXg7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICpjb3NfdG9fY2JtOwot ICAgIHNwaW5sb2NrX3QgY2JtX2xvY2s7Ci19OwotCiBzdHJ1Y3QgcHNyX2Fzc29jIHsKICAgICB1 aW50NjRfdCB2YWw7CiAgICAgdWludDY0X3QgY29zX21hc2s7CkBAIC00OCwyNiArMzAsMTEgQEAg c3RydWN0IHBzcl9hc3NvYyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3JlYWRfbW9zdGx5IHBzcl9j bXQ7CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfZW5h YmxlOwotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpfX3JlYWRfbW9zdGx5IGNh dF9zb2NrZXRfaW5mbzsKLXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNkcF9z b2NrZXRfZW5hYmxlOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IG9wdF9wc3I7CiBzdGF0aWMgdW5z aWduZWQgaW50IF9faW5pdGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owotc3RhdGljIHVuc2lnbmVk IGludCBfX3JlYWRfbW9zdGx5IG9wdF9jb3NfbWF4ID0gMjU1Owogc3RhdGljIHVpbnQ2NF90IHJt aWRfbWFzazsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNyX2Fzc29jLCBwc3JfYXNz b2MpOwogCi1zdGF0aWMgc3RydWN0IHBzcl9jYXRfY2JtICp0ZW1wX2Nvc190b19jYm07Ci0KLXN0 YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQgaW50IHNvY2tldCkKLXsK LSAgICBpZiAoIGxpa2VseShzb2NrZXQgPCBucl9zb2NrZXRzKSApCi0gICAgICAgIHJldHVybiBj cHVtYXNrX2FueShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKTsKLQotICAgIHJldHVybiBucl9jcHVf aWRzOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jvb2woY2hhciAqcywgY2hh ciAqdmFsdWUsIGNoYXIgKmZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IG1hc2spCiB7CkBAIC0xMDcsOSArNzQsNiBAQCBzdGF0aWMgdm9pZCBf X2luaXQgcGFyc2VfcHNyX3BhcmFtKGNoYXIgKnMpCiAgICAgICAgIGlmICggdmFsX3N0ciAmJiAh c3RyY21wKHMsICJybWlkX21heCIpICkKICAgICAgICAgICAgIG9wdF9ybWlkX21heCA9IHNpbXBs ZV9zdHJ0b3VsKHZhbF9zdHIsIE5VTEwsIDApOwogCi0gICAgICAgIGlmICggdmFsX3N0ciAmJiAh c3RyY21wKHMsICJjb3NfbWF4IikgKQotICAgICAgICAgICAgb3B0X2Nvc19tYXggPSBzaW1wbGVf c3RydG91bCh2YWxfc3RyLCBOVUxMLCAwKTsKLQogICAgICAgICBzID0gc3MgKyAxOwogICAgIH0g d2hpbGUgKCBzcyApOwogfQpAQCAtMjEzLDE2ICsxNzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg cHNyX2Fzc29jX2luaXQodm9pZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRo aXNfY3B1KHBzcl9hc3NvYyk7CiAKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgewot ICAgICAgICB1bnNpZ25lZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29y X2lkKCkpOwotCi0gICAgICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJs ZSkgKQotICAgICAgICAgICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwgPDwgZ2V0X2NvdW50X29y ZGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRfc29ja2V0X2luZm9bc29ja2V0 XS5jb3NfbWF4KSkgLSAxKSA8PCAzMjsKLSAgICB9Ci0KLSAgICBpZiAoIHBzcl9jbXRfZW5hYmxl ZCgpIHx8IHBzcmEtPmNvc19tYXNrICkKKyAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpICkKICAg ICAgICAgcmRtc3JsKE1TUl9JQTMyX1BTUl9BU1NPQywgcHNyYS0+dmFsKTsKIH0KIApAQCAtMjMx LDEyICsxODYsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX3JtaWQodWludDY0X3Qg KnJlZywgdW5zaWduZWQgaW50IHJtaWQpCiAgICAgKnJlZyA9ICgqcmVnICYgfnJtaWRfbWFzaykg fCAocm1pZCAmIHJtaWRfbWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwc3JfYXNzb2Nf Y29zKHVpbnQ2NF90ICpyZWcsIHVuc2lnbmVkIGludCBjb3MsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjRfdCBjb3NfbWFzaykKLXsKLSAgICAqcmVnID0gKCpyZWcgJiB+ Y29zX21hc2spIHwgKCgodWludDY0X3QpY29zIDw8IDMyKSAmIGNvc19tYXNrKTsKLX0KLQogdm9p ZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgcHNy X2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3NvYyk7CkBAIC0yNDUsNDU5ICsxOTQsNTQg QEAgdm9pZCBwc3JfY3R4dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKICAgICBpZiAoIHBz cl9jbXRfZW5hYmxlZCgpICkKICAgICAgICAgcHNyX2Fzc29jX3JtaWQoJnJlZywgZC0+YXJjaC5w c3Jfcm1pZCk7CiAKLSAgICBpZiAoIHBzcmEtPmNvc19tYXNrICkKLSAgICAgICAgcHNyX2Fzc29j X2NvcygmcmVnLCBkLT5hcmNoLnBzcl9jb3NfaWRzID8KLSAgICAgICAgICAgICAgICAgICAgICBk LT5hcmNoLnBzcl9jb3NfaWRzW2NwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKV0gOgot ICAgICAgICAgICAgICAgICAgICAgIDAsIHBzcmEtPmNvc19tYXNrKTsKLQogICAgIGlmICggcmVn ICE9IHBzcmEtPnZhbCApCiAgICAgewogICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0FTU09D LCByZWcpOwogICAgICAgICBwc3JhLT52YWwgPSByZWc7CiAgICAgfQogfQotc3RhdGljIHN0cnVj dCBwc3JfY2F0X3NvY2tldF9pbmZvICpnZXRfY2F0X3NvY2tldF9pbmZvKHVuc2lnbmVkIGludCBz b2NrZXQpCi17Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIEVS Ul9QVFIoLUVOT0RFVik7Ci0KLSAgICBpZiAoIHNvY2tldCA+PSBucl9zb2NrZXRzICkKLSAgICAg ICAgcmV0dXJuIEVSUl9QVFIoLUVOT1RTT0NLKTsKLQotICAgIGlmICggIXRlc3RfYml0KHNvY2tl dCwgY2F0X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7 Ci0KLSAgICByZXR1cm4gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotfQotCi1zdGF0aWMgaW5s aW5lIGJvb2xfdCBjZHBfaXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgc29ja2V0KQotewotICAgIHJl dHVybiBjZHBfc29ja2V0X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5h YmxlKTsKLX0KIAogaW50IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQgaW50IHNvY2tldCwg dWludDMyX3QgKmNibV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY29z X21heCwgdWludDMyX3QgKmZsYWdzKQogewotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZv ICppbmZvID0gZ2V0X2NhdF9zb2NrZXRfaW5mbyhzb2NrZXQpOwotCi0gICAgaWYgKCBJU19FUlIo aW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAgICpjYm1fbGVuID0g aW5mby0+Y2JtX2xlbjsKLSAgICAqY29zX21heCA9IGluZm8tPmNvc19tYXg7Ci0KLSAgICAqZmxh Z3MgPSAwOwotICAgIGlmICggY2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCi0gICAgICAgICpmbGFn cyB8PSBYRU5fU1lTQ1RMX1BTUl9DQVRfTDNfQ0RQOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKIGlu dCBwc3JfZ2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAog ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpjYm0sIGVudW0gY2JtX3R5cGUgdHlwZSkKIHsK LSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2lu Zm8oc29ja2V0KTsKLSAgICBib29sX3QgY2RwX2VuYWJsZWQgPSBjZHBfaXNfZW5hYmxlZChzb2Nr ZXQpOwotCi0gICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihp bmZvKTsKLQotICAgIHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQ RV9MMzoKLSAgICAgICAgaWYgKCBjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICByZXR1cm4gLUVY REVWOwotICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRz W3NvY2tldF1dLmNibTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9M M19DT0RFOgotICAgICAgICBpZiAoICFjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICAqY2JtID0g aW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAg ICAgZWxzZQotICAgICAgICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3Jf Y29zX2lkc1tzb2NrZXRdXS5jb2RlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NC TV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGlmICggIWNkcF9lbmFibGVkICkKLSAgICAgICAgICAg ICpjYm0gPSBpbmZvLT5jb3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uY2Jt OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5h cmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmRhdGE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVm YXVsdDoKLSAgICAgICAgQVNTRVJUX1VOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xl biwgdWludDY0X3QgY2JtKQotewotICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0 OwotCi0gICAgLyogU2V0IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdlIG9mIFswLCBjYm1f bGVuKS4gKi8KLSAgICBpZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVuKSApCi0gICAgICAgIHJl dHVybiAwOwotCi0gICAgLyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KLSAg ICBpZiAoIGNibSA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmaXJzdF9iaXQgPSBm aW5kX2ZpcnN0X2JpdCgmY2JtLCBjYm1fbGVuKTsKLSAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96 ZXJvX2JpdCgmY2JtLCBjYm1fbGVuLCBmaXJzdF9iaXQpOwotCi0gICAgLyogU2V0IGJpdHMgc2hv dWxkIGJlIGNvbnRpZ3VvdXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKLSAg ICAgICAgIGZpbmRfbmV4dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19iaXQpIDwgY2JtX2xlbiAp Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBjb3NfY2Jt X2luZm8KLXsKLSAgICB1bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2xfdCBjZHA7Ci0gICAgdWlu dDY0X3QgY2JtX2NvZGU7Ci0gICAgdWludDY0X3QgY2JtX2RhdGE7Ci19OwotCi1zdGF0aWMgdm9p ZCBkb193cml0ZV9sM19jYm0odm9pZCAqZGF0YSkKLXsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZv ICppbmZvID0gZGF0YTsKLQotICAgIGlmICggaW5mby0+Y2RwICkKLSAgICB7Ci0gICAgICAgIHdy bXNybChNU1JfSUEzMl9QU1JfTDNfTUFTS19DT0RFKGluZm8tPmNvcyksIGluZm8tPmNibV9jb2Rl KTsKLSAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RBVEEoaW5mby0+Y29zKSwg aW5mby0+Y2JtX2RhdGEpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHdybXNybChNU1JfSUEz Ml9QU1JfTDNfTUFTSyhpbmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Ci19Ci0KLXN0YXRpYyBp bnQgd3JpdGVfbDNfY2JtKHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCi0g ICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBjYm1fY29kZSwgdWludDY0X3QgY2JtX2Rh dGEsIGJvb2xfdCBjZHApCi17Ci0gICAgc3RydWN0IGNvc19jYm1faW5mbyBpbmZvID0KLSAgICB7 Ci0gICAgICAgIC5jb3MgPSBjb3MsCi0gICAgICAgIC5jYm1fY29kZSA9IGNibV9jb2RlLAotICAg ICAgICAuY2JtX2RhdGEgPSBjYm1fZGF0YSwKLSAgICAgICAgLmNkcCA9IGNkcCwKLSAgICB9Owot Ci0gICAgaWYgKCBzb2NrZXQgPT0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkpICkK LSAgICAgICAgZG9fd3JpdGVfbDNfY2JtKCZpbmZvKTsKLSAgICBlbHNlCi0gICAgewotICAgICAg ICB1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X3NvY2tldF9jcHUoc29ja2V0KTsKLQotICAgICAgICBp ZiAoIGNwdSA+PSBucl9jcHVfaWRzICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PVFNPQ0s7Ci0g ICAgICAgIG9uX3NlbGVjdGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193cml0ZV9sM19jYm0s ICZpbmZvLCAxKTsKLSAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaW5k X2NvcyhzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcCwgdW5zaWduZWQgaW50IGNvc19tYXgsCi0gICAg ICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBjYm1fZGF0YSwgYm9v bF90IGNkcF9lbmFibGVkKQotewotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0KLSAgICBmb3IgKCBj b3MgPSAwOyBjb3MgPD0gY29zX21heDsgY29zKysgKQotICAgIHsKLSAgICAgICAgaWYgKCAobWFw W2Nvc10ucmVmIHx8IGNvcyA9PSAwKSAmJgotICAgICAgICAgICAgICgoIWNkcF9lbmFibGVkICYm IG1hcFtjb3NdLmNibSA9PSBjYm1fY29kZSkgfHwKLSAgICAgICAgICAgICAgKGNkcF9lbmFibGVk ICYmIG1hcFtjb3NdLmNvZGUgPT0gY2JtX2NvZGUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1hcFtjb3NdLmRhdGEgPT0gY2JtX2RhdGEpKSApCi0gICAgICAgICAgICByZXR1cm4g Y29zOwotICAgIH0KLQotICAgIHJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgaW50IHBpY2tf YXZhaWxfY29zKHN0cnVjdCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21heCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCi17Ci0gICAg dW5zaWduZWQgaW50IGNvczsKLQotICAgIC8qIElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25seSBi eSB0aGUgZG9tYWluLCB0aGVuIHVzZSBpdC4gKi8KLSAgICBpZiAoIG1hcFtvbGRfY29zXS5yZWYg PT0gMSAmJiBvbGRfY29zICE9IDAgKQotICAgICAgICByZXR1cm4gb2xkX2NvczsKLQotICAgIC8q IEZpbmQgYW4gdW51c2VkIG9uZSBvdGhlciB0aGFuIGNvczAuICovCi0gICAgZm9yICggY29zID0g MTsgY29zIDw9IGNvc19tYXg7IGNvcysrICkKLSAgICAgICAgaWYgKCBtYXBbY29zXS5yZWYgPT0g MCApCi0gICAgICAgICAgICByZXR1cm4gY29zOwotCi0gICAgcmV0dXJuIC1FTk9FTlQ7Ci19Ci0K IGludCBwc3Jfc2V0X2wzX2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0 LAogICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQog ewotICAgIHVuc2lnbmVkIGludCBvbGRfY29zLCBjb3NfbWF4OwotICAgIGludCBjb3MsIHJldDsK LSAgICB1aW50NjRfdCBjYm1fZGF0YSwgY2JtX2NvZGU7Ci0gICAgYm9vbF90IGNkcF9lbmFibGVk ID0gY2RwX2lzX2VuYWJsZWQoc29ja2V0KTsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcDsK LSAgICBzdHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2lu Zm8oc29ja2V0KTsKLQotICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAgICAgICAgcmV0dXJuIFBU Ul9FUlIoaW5mbyk7Ci0KLSAgICBpZiAoICFwc3JfY2hlY2tfY2JtKGluZm8tPmNibV9sZW4sIGNi bSkgKQotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgIGlmICggIWNkcF9lbmFibGVkICYm ICh0eXBlID09IFBTUl9DQk1fVFlQRV9MM19DT0RFIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGUgPT0gUFNSX0NCTV9UWVBFX0wzX0RBVEEpICkKLSAgICAgICAgcmV0dXJuIC1FTlhJ TzsKLQotICAgIGNvc19tYXggPSBpbmZvLT5jb3NfbWF4OwotICAgIG9sZF9jb3MgPSBkLT5hcmNo LnBzcl9jb3NfaWRzW3NvY2tldF07Ci0gICAgbWFwID0gaW5mby0+Y29zX3RvX2NibTsKLQotICAg IHN3aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAg ICAgY2JtX2NvZGUgPSBjYm07Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVh azsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAgIGNibV9jb2RlID0g Y2JtOwotICAgICAgICBjYm1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRhOwotICAgICAgICBicmVh azsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGNibV9jb2RlID0g bWFwW29sZF9jb3NdLmNvZGU7Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVh azsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwotICAgICAg ICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2soJmluZm8tPmNibV9sb2Nr KTsKLSAgICBjb3MgPSBmaW5kX2NvcyhtYXAsIGNvc19tYXgsIGNibV9jb2RlLCBjYm1fZGF0YSwg Y2RwX2VuYWJsZWQpOwotICAgIGlmICggY29zID49IDAgKQotICAgIHsKLSAgICAgICAgaWYgKCBj b3MgPT0gb2xkX2NvcyApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZv LT5jYm1fbG9jayk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAg ICBlbHNlCi0gICAgewotICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2NvcyhtYXAsIGNvc19tYXgs IG9sZF9jb3MpOwotICAgICAgICBpZiAoIGNvcyA8IDAgKQotICAgICAgICB7Ci0gICAgICAgICAg ICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIGNvczsK LSAgICAgICAgfQotCi0gICAgICAgIC8qIFdlIHRyeSB0byBhdm9pZCB3cml0aW5nIE1TUi4gKi8K LSAgICAgICAgaWYgKCAoY2RwX2VuYWJsZWQgJiYKLSAgICAgICAgICAgICAobWFwW2Nvc10uY29k ZSAhPSBjYm1fY29kZSB8fCBtYXBbY29zXS5kYXRhICE9IGNibV9kYXRhKSkgfHwKLSAgICAgICAg ICAgICAoIWNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNibSAhPSBjYm1fY29kZSkgKQotICAgICAg ICB7Ci0gICAgICAgICAgICByZXQgPSB3cml0ZV9sM19jYm0oc29ja2V0LCBjb3MsIGNibV9jb2Rl LCBjYm1fZGF0YSwgY2RwX2VuYWJsZWQpOwotICAgICAgICAgICAgaWYgKCByZXQgKQotICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1h cFtjb3NdLmNvZGUgPSBjYm1fY29kZTsKLSAgICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPSBjYm1f ZGF0YTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1hcFtjb3NdLnJlZisrOwotICAgIG1hcFtv bGRfY29zXS5yZWYtLTsKLSAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotCi0gICAg ZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRdID0gY29zOwotCiAgICAgcmV0dXJuIDA7CiB9CiAK LS8qIENhbGxlZCB3aXRoIGRvbWFpbiBsb2NrIGhlbGQsIG5vIGV4dHJhIGxvY2sgbmVlZGVkIGZv ciAncHNyX2Nvc19pZHMnICovCi1zdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFp biAqZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVuc2lnbmVkIGludCBjb3M7 Ci0gICAgc3RydWN0IHBzcl9jYXRfc29ja2V0X2luZm8gKmluZm87Ci0KLSAgICBpZiggIWQtPmFy Y2gucHNyX2Nvc19pZHMgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JfZWFjaF9zZXRfYml0 KHNvY2tldCwgY2F0X3NvY2tldF9lbmFibGUsIG5yX3NvY2tldHMpCi0gICAgewotICAgICAgICBp ZiAoIChjb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF0pID09IDAgKQotICAgICAgICAg ICAgY29udGludWU7Ci0KLSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsK LSAgICAgICAgc3Bpbl9sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgIGluZm8tPmNvc190 b19jYm1bY29zXS5yZWYtLTsKLSAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsK LSAgICB9Ci0KLSAgICB4ZnJlZShkLT5hcmNoLnBzcl9jb3NfaWRzKTsKLSAgICBkLT5hcmNoLnBz cl9jb3NfaWRzID0gTlVMTDsKLX0KLQogaW50IHBzcl9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWlu ICpkKQogewotICAgIGlmICggY2F0X3NvY2tldF9pbmZvICkKLSAgICB7Ci0gICAgICAgIGQtPmFy Y2gucHNyX2Nvc19pZHMgPSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGludCwgbnJfc29ja2V0cyk7 Ci0gICAgICAgIGlmICggIWQtPmFyY2gucHNyX2Nvc19pZHMgKQotICAgICAgICAgICAgcmV0dXJu IC1FTk9NRU07Ci0gICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgcHNyX2RvbWFpbl9m cmVlKHN0cnVjdCBkb21haW4gKmQpCiB7CiAgICAgcHNyX2ZyZWVfcm1pZChkKTsKLSAgICBwc3Jf ZnJlZV9jb3MoZCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2F0X2NwdV9wcmVwYXJlKHVuc2lnbmVkIGlu dCBjcHUpCi17Ci0gICAgaWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIDA7 Ci0KLSAgICBpZiAoIHRlbXBfY29zX3RvX2NibSA9PSBOVUxMICYmCi0gICAgICAgICAodGVtcF9j b3NfdG9fY2JtID0geHphbGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9jYm0sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY29zX21heCArIDFVTCkpID09IE5V TEwgKQotICAgICAgICByZXR1cm4gLUVOT01FTTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgdm9pZCBjYXRfY3B1X2luaXQodm9pZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYngs IGVjeCwgZWR4OwotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvOwotICAgIHVu c2lnbmVkIGludCBzb2NrZXQ7Ci0gICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3Jf aWQoKTsKLSAgICB1aW50NjRfdCB2YWw7Ci0gICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpj ID0gY3B1X2RhdGEgKyBjcHU7Ci0KLSAgICBpZiAoICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BR RSkgfHwgYy0+Y3B1aWRfbGV2ZWwgPCBQU1JfQ1BVSURfTEVWRUxfQ0FUICkKLSAgICAgICAgcmV0 dXJuOwotCi0gICAgc29ja2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwotICAgIGlmICggdGVzdF9i aXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBj cHVpZF9jb3VudChQU1JfQ1BVSURfTEVWRUxfQ0FULCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4 KTsKLSAgICBpZiAoIGVieCAmIFBTUl9SRVNPVVJDRV9UWVBFX0wzICkKLSAgICB7Ci0gICAgICAg IGNwdWlkX2NvdW50KFBTUl9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgsICZlYngsICZlY3gsICZl ZHgpOwotICAgICAgICBpbmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotICAgICAgICBp bmZvLT5jYm1fbGVuID0gKGVheCAmIDB4MWYpICsgMTsKLSAgICAgICAgaW5mby0+Y29zX21heCA9 IG1pbihvcHRfY29zX21heCwgZWR4ICYgMHhmZmZmKTsKLQotICAgICAgICBpbmZvLT5jb3NfdG9f Y2JtID0gdGVtcF9jb3NfdG9fY2JtOwotICAgICAgICB0ZW1wX2Nvc190b19jYm0gPSBOVUxMOwot ICAgICAgICAvKiBjb3M9MCBpcyByZXNlcnZlZCBhcyBkZWZhdWx0IGNibShhbGwgb25lcykuICov Ci0gICAgICAgIGluZm8tPmNvc190b19jYm1bMF0uY2JtID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xl bikgLSAxOwotCi0gICAgICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5jYm1fbG9jayk7Ci0KLSAg ICAgICAgc2V0X2JpdChzb2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBpZiAo IChlY3ggJiBQU1JfQ0FUX0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3BzciAmIFBTUl9DRFApICYm Ci0gICAgICAgICAgICAgY2RwX3NvY2tldF9lbmFibGUgJiYgIXRlc3RfYml0KHNvY2tldCwgY2Rw X3NvY2tldF9lbmFibGUpICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mby0+Y29zX3RvX2Ni bVswXS5jb2RlID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotICAgICAgICAgICAgaW5m by0+Y29zX3RvX2NibVswXS5kYXRhID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0g ICAgICAgICAgICAvKiBXZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1hc2swIGlzIGFsd2F5cyBh bGwgb25lcyBieSBkZWZhdWx0LiAqLwotICAgICAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9M M19NQVNLKDEpLCAoMXVsbCA8PCBpbmZvLT5jYm1fbGVuKSAtIDEpOwotCi0gICAgICAgICAgICBy ZG1zcmwoTVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCk7Ci0gICAgICAgICAgICB3cm1zcmwo TVNSX0lBMzJfUFNSX0wzX1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VOQUJM RV9CSVQpKTsKLQotICAgICAgICAgICAgLyogQ3V0IGhhbGYgb2YgY29zX21heCB3aGVuIENEUCBp cyBlbmFibGVkLiAqLwotICAgICAgICAgICAgaW5mby0+Y29zX21heCA+Pj0gMTsKLQotICAgICAg ICAgICAgc2V0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLSAgICAgICAgfQotICAg ICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZW5hYmxlZCBvbiBzb2NrZXQgJXUsIGNvc19t YXg6JXUsIGNibV9sZW46JXUsIENEUDolc1xuIiwKLSAgICAgICAgICAgICAgIHNvY2tldCwgaW5m by0+Y29zX21heCwgaW5mby0+Y2JtX2xlbiwKLSAgICAgICAgICAgICAgIGNkcF9pc19lbmFibGVk KHNvY2tldCkgPyAib24iIDogIm9mZiIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY2F0X2Nw dV9maW5pKHVuc2lnbmVkIGludCBjcHUpCi17Ci0gICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNw dV90b19zb2NrZXQoY3B1KTsKLQotICAgIGlmICggIXNvY2tldF9jcHVtYXNrW3NvY2tldF0gfHwg Y3B1bWFza19lbXB0eShzb2NrZXRfY3B1bWFza1tzb2NrZXRdKSApCi0gICAgewotICAgICAgICBz dHJ1Y3QgcHNyX2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tl dDsKLQotICAgICAgICBpZiAoIGluZm8tPmNvc190b19jYm0gKQotICAgICAgICB7Ci0gICAgICAg ICAgICB4ZnJlZShpbmZvLT5jb3NfdG9fY2JtKTsKLSAgICAgICAgICAgIGluZm8tPmNvc190b19j Ym0gPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBjZHBfaXNfZW5hYmxlZChzb2Nr ZXQpICkKLSAgICAgICAgICAgIGNsZWFyX2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsK LQotICAgICAgICBjbGVhcl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSk7Ci0gICAgfQot fQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHNyX2NhdF9mcmVlKHZvaWQpCi17Ci0gICAgeGZyZWUo Y2F0X3NvY2tldF9lbmFibGUpOwotICAgIGNhdF9zb2NrZXRfZW5hYmxlID0gTlVMTDsKLSAgICB4 ZnJlZShjYXRfc29ja2V0X2luZm8pOwotICAgIGNhdF9zb2NrZXRfaW5mbyA9IE5VTEw7Ci19Ci0K LXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3Bzcl9jYXQodm9pZCkKLXsKLSAgICBpZiAoIG9wdF9j b3NfbWF4IDwgMSApCi0gICAgewotICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZGlz YWJsZWQsIGNvc19tYXggaXMgdG9vIHNtYWxsXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K LQotICAgIGNhdF9zb2NrZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBC SVRTX1RPX0xPTkdTKG5yX3NvY2tldHMpKTsKLSAgICBjYXRfc29ja2V0X2luZm8gPSB4emFsbG9j X2FycmF5KHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvLCBucl9zb2NrZXRzKTsKLSAgICBjZHBf c29ja2V0X2VuYWJsZSA9IHh6YWxsb2NfYXJyYXkodW5zaWduZWQgbG9uZywgQklUU19UT19MT05H Uyhucl9zb2NrZXRzKSk7Ci0KLSAgICBpZiAoICFjYXRfc29ja2V0X2VuYWJsZSB8fCAhY2F0X3Nv Y2tldF9pbmZvICkKLSAgICAgICAgcHNyX2NhdF9mcmVlKCk7CiB9CiAKIHN0YXRpYyBpbnQgcHNy X2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgcmV0dXJuIGNhdF9jcHVfcHJl cGFyZShjcHUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQo dm9pZCkKIHsKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIGNhdF9jcHVfaW5p dCgpOwotCiAgICAgcHNyX2Fzc29jX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgcHNyX2NwdV9m aW5pKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQotICAg ICAgICBjYXRfY3B1X2ZpbmkoY3B1KTsKKyAgICByZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgY3B1 X2NhbGxiYWNrKApAQCAtNzM4LDE0ICsyODIsMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHNyX3By ZXNtcF9pbml0KHZvaWQpCiAgICAgaWYgKCAob3B0X3BzciAmIFBTUl9DTVQpICYmIG9wdF9ybWlk X21heCApCiAgICAgICAgIGluaXRfcHNyX2NtdChvcHRfcm1pZF9tYXgpOwogCi0gICAgaWYgKCBv cHRfcHNyICYgUFNSX0NBVCApCi0gICAgICAgIGluaXRfcHNyX2NhdCgpOwotCi0gICAgaWYgKCBw c3JfY3B1X3ByZXBhcmUoMCkgKQotICAgICAgICBwc3JfY2F0X2ZyZWUoKTsKKyAgICBwc3JfY3B1 X3ByZXBhcmUoMCk7CiAKICAgICBwc3JfY3B1X2luaXQoKTsKLSAgICBpZiAoIHBzcl9jbXRfZW5h YmxlZCgpIHx8IGNhdF9zb2NrZXRfaW5mbyApCisgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSAp CiAgICAgICAgIHJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CiAKICAgICByZXR1cm4g MDsKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw czovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==