From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: [PATCH v5 02/24] x86: refactor psr: remove L3 CAT/CDP codes. Date: Wed, 18 Jan 2017 10:02:25 +0800 Message-ID: <1484704967-5609-3-git-send-email-yi.y.sun@linux.intel.com> References: <1484704967-5609-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cTfbY-0005UV-55 for xen-devel@lists.xenproject.org; Wed, 18 Jan 2017 02:04:04 +0000 In-Reply-To: <1484704967-5609-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, konrad.wilk@oracle.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 biA8eWkueS5zdW5AbGludXguaW50ZWwuY29tPgpBY2tlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgotLS0KIHhlbi9hcmNoL3g4Ni9wc3IuYyB8IDQ3MCArLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDUgaW5zZXJ0aW9ucygrKSwgNDY1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNo L3g4Ni9wc3IuYyBiL3hlbi9hcmNoL3g4Ni9wc3IuYwppbmRleCAwYjUwNzNjLi45NmE4NTg5IDEw MDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHNyLmMKKysrIGIveGVuL2FyY2gveDg2L3Bzci5jCkBA IC0yMywyNCArMjMsNiBAQAogI2RlZmluZSBQU1JfQ0FUICAgICAgICAoMTw8MSkKICNkZWZpbmUg UFNSX0NEUCAgICAgICAgKDE8PDIpCiAKLXN0cnVjdCBwc3JfY2F0X2NibSB7Ci0gICAgdW5pb24g ewotICAgICAgICB1aW50NjRfdCBjYm07Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1 aW50NjRfdCBjb2RlOwotICAgICAgICAgICAgdWludDY0X3QgZGF0YTsKLSAgICAgICAgfTsKLSAg ICB9OwotICAgIHVuc2lnbmVkIGludCByZWY7Ci19OwotCi1zdHJ1Y3QgcHNyX2NhdF9zb2NrZXRf aW5mbyB7Ci0gICAgdW5zaWduZWQgaW50IGNibV9sZW47Ci0gICAgdW5zaWduZWQgaW50IGNvc19t YXg7Ci0gICAgc3RydWN0IHBzcl9jYXRfY2JtICpjb3NfdG9fY2JtOwotICAgIHNwaW5sb2NrX3Qg Y2JtX2xvY2s7Ci19OwotCiBzdHJ1Y3QgcHNyX2Fzc29jIHsKICAgICB1aW50NjRfdCB2YWw7CiAg ICAgdWludDY0X3QgY29zX21hc2s7CkBAIC00OCwyNiArMzAsMTEgQEAgc3RydWN0IHBzcl9hc3Nv YyB7CiAKIHN0cnVjdCBwc3JfY210ICpfX3JlYWRfbW9zdGx5IHBzcl9jbXQ7CiAKLXN0YXRpYyB1 bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfZW5hYmxlOwotc3RhdGljIHN0 cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICpfX3JlYWRfbW9zdGx5IGNhdF9zb2NrZXRfaW5mbzsK LXN0YXRpYyB1bnNpZ25lZCBsb25nICpfX3JlYWRfbW9zdGx5IGNkcF9zb2NrZXRfZW5hYmxlOwot CiBzdGF0aWMgdW5zaWduZWQgaW50IG9wdF9wc3I7CiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5p dGRhdGEgb3B0X3JtaWRfbWF4ID0gMjU1Owotc3RhdGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9z dGx5IG9wdF9jb3NfbWF4ID0gMjU1Owogc3RhdGljIHVpbnQ2NF90IHJtaWRfbWFzazsKIHN0YXRp YyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcHNyX2Fzc29jLCBwc3JfYXNzb2MpOwogCi1zdGF0aWMg c3RydWN0IHBzcl9jYXRfY2JtICp0ZW1wX2Nvc190b19jYm07Ci0KLXN0YXRpYyB1bnNpZ25lZCBp bnQgZ2V0X3NvY2tldF9jcHUodW5zaWduZWQgaW50IHNvY2tldCkKLXsKLSAgICBpZiAoIGxpa2Vs eShzb2NrZXQgPCBucl9zb2NrZXRzKSApCi0gICAgICAgIHJldHVybiBjcHVtYXNrX2FueShzb2Nr ZXRfY3B1bWFza1tzb2NrZXRdKTsKLQotICAgIHJldHVybiBucl9jcHVfaWRzOwotfQotCiBzdGF0 aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNyX2Jvb2woY2hhciAqcywgY2hhciAqdmFsdWUsIGNoYXIg KmZlYXR1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IG1hc2spCiB7CkBAIC0xMDcsOSArNzQsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcGFyc2VfcHNy X3BhcmFtKGNoYXIgKnMpCiAgICAgICAgIGlmICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJybWlk X21heCIpICkKICAgICAgICAgICAgIG9wdF9ybWlkX21heCA9IHNpbXBsZV9zdHJ0b3VsKHZhbF9z dHIsIE5VTEwsIDApOwogCi0gICAgICAgIGlmICggdmFsX3N0ciAmJiAhc3RyY21wKHMsICJjb3Nf bWF4IikgKQotICAgICAgICAgICAgb3B0X2Nvc19tYXggPSBzaW1wbGVfc3RydG91bCh2YWxfc3Ry LCBOVUxMLCAwKTsKLQogICAgICAgICBzID0gc3MgKyAxOwogICAgIH0gd2hpbGUgKCBzcyApOwog fQpAQCAtMjEzLDE2ICsxNzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX2luaXQo dm9pZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0gJnRoaXNfY3B1KHBzcl9hc3Nv Yyk7CiAKLSAgICBpZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgewotICAgICAgICB1bnNpZ25l ZCBpbnQgc29ja2V0ID0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0gICAg ICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSkgKQotICAgICAgICAg ICAgcHNyYS0+Y29zX21hc2sgPSAoKDF1bGwgPDwgZ2V0X2NvdW50X29yZGVyKAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXRfc29ja2V0X2luZm9bc29ja2V0XS5jb3NfbWF4KSkgLSAx KSA8PCAzMjsKLSAgICB9Ci0KLSAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IHBzcmEtPmNv c19tYXNrICkKKyAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpICkKICAgICAgICAgcmRtc3JsKE1T Ul9JQTMyX1BTUl9BU1NPQywgcHNyYS0+dmFsKTsKIH0KIApAQCAtMjMxLDEyICsxODYsNiBAQCBz dGF0aWMgaW5saW5lIHZvaWQgcHNyX2Fzc29jX3JtaWQodWludDY0X3QgKnJlZywgdW5zaWduZWQg aW50IHJtaWQpCiAgICAgKnJlZyA9ICgqcmVnICYgfnJtaWRfbWFzaykgfCAocm1pZCAmIHJtaWRf bWFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwc3JfYXNzb2NfY29zKHVpbnQ2NF90ICpy ZWcsIHVuc2lnbmVkIGludCBjb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50NjRfdCBjb3NfbWFzaykKLXsKLSAgICAqcmVnID0gKCpyZWcgJiB+Y29zX21hc2spIHwgKCgo dWludDY0X3QpY29zIDw8IDMyKSAmIGNvc19tYXNrKTsKLX0KLQogdm9pZCBwc3JfY3R4dF9zd2l0 Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgcHNyX2Fzc29jICpwc3JhID0g JnRoaXNfY3B1KHBzcl9hc3NvYyk7CkBAIC0yNDUsNDU5ICsxOTQsNTQgQEAgdm9pZCBwc3JfY3R4 dF9zd2l0Y2hfdG8oc3RydWN0IGRvbWFpbiAqZCkKICAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgp ICkKICAgICAgICAgcHNyX2Fzc29jX3JtaWQoJnJlZywgZC0+YXJjaC5wc3Jfcm1pZCk7CiAKLSAg ICBpZiAoIHBzcmEtPmNvc19tYXNrICkKLSAgICAgICAgcHNyX2Fzc29jX2NvcygmcmVnLCBkLT5h cmNoLnBzcl9jb3NfaWRzID8KLSAgICAgICAgICAgICAgICAgICAgICBkLT5hcmNoLnBzcl9jb3Nf aWRzW2NwdV90b19zb2NrZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKV0gOgotICAgICAgICAgICAgICAg ICAgICAgIDAsIHBzcmEtPmNvc19tYXNrKTsKLQogICAgIGlmICggcmVnICE9IHBzcmEtPnZhbCAp CiAgICAgewogICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0FTU09DLCByZWcpOwogICAgICAg ICBwc3JhLT52YWwgPSByZWc7CiAgICAgfQogfQotc3RhdGljIHN0cnVjdCBwc3JfY2F0X3NvY2tl dF9pbmZvICpnZXRfY2F0X3NvY2tldF9pbmZvKHVuc2lnbmVkIGludCBzb2NrZXQpCi17Ci0gICAg aWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7 Ci0KLSAgICBpZiAoIHNvY2tldCA+PSBucl9zb2NrZXRzICkKLSAgICAgICAgcmV0dXJuIEVSUl9Q VFIoLUVOT1RTT0NLKTsKLQotICAgIGlmICggIXRlc3RfYml0KHNvY2tldCwgY2F0X3NvY2tldF9l bmFibGUpICkKLSAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Ci0KLSAgICByZXR1cm4g Y2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2xfdCBjZHBf aXNfZW5hYmxlZCh1bnNpZ25lZCBpbnQgc29ja2V0KQotewotICAgIHJldHVybiBjZHBfc29ja2V0 X2VuYWJsZSAmJiB0ZXN0X2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLX0KIAogaW50 IHBzcl9nZXRfY2F0X2wzX2luZm8odW5zaWduZWQgaW50IHNvY2tldCwgdWludDMyX3QgKmNibV9s ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqY29zX21heCwgdWludDMyX3Qg KmZsYWdzKQogewotICAgIHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvID0gZ2V0X2Nh dF9zb2NrZXRfaW5mbyhzb2NrZXQpOwotCi0gICAgaWYgKCBJU19FUlIoaW5mbykgKQotICAgICAg ICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAgICpjYm1fbGVuID0gaW5mby0+Y2JtX2xlbjsK LSAgICAqY29zX21heCA9IGluZm8tPmNvc19tYXg7Ci0KLSAgICAqZmxhZ3MgPSAwOwotICAgIGlm ICggY2RwX2lzX2VuYWJsZWQoc29ja2V0KSApCi0gICAgICAgICpmbGFncyB8PSBYRU5fU1lTQ1RM X1BTUl9DQVRfTDNfQ0RQOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBwc3JfZ2V0X2wzX2Ni bShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAogICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90ICpjYm0sIGVudW0gY2JtX3R5cGUgdHlwZSkKIHsKLSAgICBzdHJ1Y3QgcHNy X2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsKLSAg ICBib29sX3QgY2RwX2VuYWJsZWQgPSBjZHBfaXNfZW5hYmxlZChzb2NrZXQpOwotCi0gICAgaWYg KCBJU19FUlIoaW5mbykgKQotICAgICAgICByZXR1cm4gUFRSX0VSUihpbmZvKTsKLQotICAgIHN3 aXRjaCAoIHR5cGUgKQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAgICAg aWYgKCBjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICByZXR1cm4gLUVYREVWOwotICAgICAgICAq Y2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsK LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MM19DT0RFOgotICAgICAg ICBpZiAoICFjZHBfZW5hYmxlZCApCi0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2Ni bVtkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF1dLmNibTsKLSAgICAgICAgZWxzZQotICAgICAg ICAgICAgKmNibSA9IGluZm8tPmNvc190b19jYm1bZC0+YXJjaC5wc3JfY29zX2lkc1tzb2NrZXRd XS5jb2RlOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUFNSX0NCTV9UWVBFX0wzX0RBVEE6 Ci0gICAgICAgIGlmICggIWNkcF9lbmFibGVkICkKLSAgICAgICAgICAgICpjYm0gPSBpbmZvLT5j b3NfdG9fY2JtW2QtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XV0uY2JtOwotICAgICAgICBlbHNl Ci0gICAgICAgICAgICAqY2JtID0gaW5mby0+Y29zX3RvX2NibVtkLT5hcmNoLnBzcl9jb3NfaWRz W3NvY2tldF1dLmRhdGE7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg QVNTRVJUX1VOUkVBQ0hBQkxFKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBib29sX3QgcHNyX2NoZWNrX2NibSh1bnNpZ25lZCBpbnQgY2JtX2xlbiwgdWludDY0X3QgY2Jt KQotewotICAgIHVuc2lnbmVkIGludCBmaXJzdF9iaXQsIHplcm9fYml0OwotCi0gICAgLyogU2V0 IGJpdHMgc2hvdWxkIG9ubHkgaW4gdGhlIHJhbmdlIG9mIFswLCBjYm1fbGVuKS4gKi8KLSAgICBp ZiAoIGNibSAmICh+MHVsbCA8PCBjYm1fbGVuKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg LyogQXQgbGVhc3Qgb25lIGJpdCBuZWVkIHRvIGJlIHNldC4gKi8KLSAgICBpZiAoIGNibSA9PSAw ICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmaXJzdF9iaXQgPSBmaW5kX2ZpcnN0X2JpdCgm Y2JtLCBjYm1fbGVuKTsKLSAgICB6ZXJvX2JpdCA9IGZpbmRfbmV4dF96ZXJvX2JpdCgmY2JtLCBj Ym1fbGVuLCBmaXJzdF9iaXQpOwotCi0gICAgLyogU2V0IGJpdHMgc2hvdWxkIGJlIGNvbnRpZ3Vv dXMuICovCi0gICAgaWYgKCB6ZXJvX2JpdCA8IGNibV9sZW4gJiYKLSAgICAgICAgIGZpbmRfbmV4 dF9iaXQoJmNibSwgY2JtX2xlbiwgemVyb19iaXQpIDwgY2JtX2xlbiApCi0gICAgICAgIHJldHVy biAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0cnVjdCBjb3NfY2JtX2luZm8KLXsKLSAgICB1 bnNpZ25lZCBpbnQgY29zOwotICAgIGJvb2xfdCBjZHA7Ci0gICAgdWludDY0X3QgY2JtX2NvZGU7 Ci0gICAgdWludDY0X3QgY2JtX2RhdGE7Ci19OwotCi1zdGF0aWMgdm9pZCBkb193cml0ZV9sM19j Ym0odm9pZCAqZGF0YSkKLXsKLSAgICBzdHJ1Y3QgY29zX2NibV9pbmZvICppbmZvID0gZGF0YTsK LQotICAgIGlmICggaW5mby0+Y2RwICkKLSAgICB7Ci0gICAgICAgIHdybXNybChNU1JfSUEzMl9Q U1JfTDNfTUFTS19DT0RFKGluZm8tPmNvcyksIGluZm8tPmNibV9jb2RlKTsKLSAgICAgICAgd3Jt c3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLX0RBVEEoaW5mby0+Y29zKSwgaW5mby0+Y2JtX2RhdGEp OwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHdybXNybChNU1JfSUEzMl9QU1JfTDNfTUFTSyhp bmZvLT5jb3MpLCBpbmZvLT5jYm1fY29kZSk7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVfbDNfY2Jt KHVuc2lnbmVkIGludCBzb2NrZXQsIHVuc2lnbmVkIGludCBjb3MsCi0gICAgICAgICAgICAgICAg ICAgICAgICB1aW50NjRfdCBjYm1fY29kZSwgdWludDY0X3QgY2JtX2RhdGEsIGJvb2xfdCBjZHAp Ci17Ci0gICAgc3RydWN0IGNvc19jYm1faW5mbyBpbmZvID0KLSAgICB7Ci0gICAgICAgIC5jb3Mg PSBjb3MsCi0gICAgICAgIC5jYm1fY29kZSA9IGNibV9jb2RlLAotICAgICAgICAuY2JtX2RhdGEg PSBjYm1fZGF0YSwKLSAgICAgICAgLmNkcCA9IGNkcCwKLSAgICB9OwotCi0gICAgaWYgKCBzb2Nr ZXQgPT0gY3B1X3RvX3NvY2tldChzbXBfcHJvY2Vzc29yX2lkKCkpICkKLSAgICAgICAgZG9fd3Jp dGVfbDNfY2JtKCZpbmZvKTsKLSAgICBlbHNlCi0gICAgewotICAgICAgICB1bnNpZ25lZCBpbnQg Y3B1ID0gZ2V0X3NvY2tldF9jcHUoc29ja2V0KTsKLQotICAgICAgICBpZiAoIGNwdSA+PSBucl9j cHVfaWRzICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PVFNPQ0s7Ci0gICAgICAgIG9uX3NlbGVj dGVkX2NwdXMoY3B1bWFza19vZihjcHUpLCBkb193cml0ZV9sM19jYm0sICZpbmZvLCAxKTsKLSAg ICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaW5kX2NvcyhzdHJ1Y3QgcHNy X2NhdF9jYm0gKm1hcCwgdW5zaWduZWQgaW50IGNvc19tYXgsCi0gICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IGNibV9jb2RlLCB1aW50NjRfdCBjYm1fZGF0YSwgYm9vbF90IGNkcF9lbmFibGVk KQotewotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0KLSAgICBmb3IgKCBjb3MgPSAwOyBjb3MgPD0g Y29zX21heDsgY29zKysgKQotICAgIHsKLSAgICAgICAgaWYgKCAobWFwW2Nvc10ucmVmIHx8IGNv cyA9PSAwKSAmJgotICAgICAgICAgICAgICgoIWNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNibSA9 PSBjYm1fY29kZSkgfHwKLSAgICAgICAgICAgICAgKGNkcF9lbmFibGVkICYmIG1hcFtjb3NdLmNv ZGUgPT0gY2JtX2NvZGUgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtjb3Nd LmRhdGEgPT0gY2JtX2RhdGEpKSApCi0gICAgICAgICAgICByZXR1cm4gY29zOwotICAgIH0KLQot ICAgIHJldHVybiAtRU5PRU5UOwotfQotCi1zdGF0aWMgaW50IHBpY2tfYXZhaWxfY29zKHN0cnVj dCBwc3JfY2F0X2NibSAqbWFwLCB1bnNpZ25lZCBpbnQgY29zX21heCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IG9sZF9jb3MpCi17Ci0gICAgdW5zaWduZWQgaW50IGNv czsKLQotICAgIC8qIElmIG9sZCBjb3MgaXMgcmVmZXJyZWQgb25seSBieSB0aGUgZG9tYWluLCB0 aGVuIHVzZSBpdC4gKi8KLSAgICBpZiAoIG1hcFtvbGRfY29zXS5yZWYgPT0gMSAmJiBvbGRfY29z ICE9IDAgKQotICAgICAgICByZXR1cm4gb2xkX2NvczsKLQotICAgIC8qIEZpbmQgYW4gdW51c2Vk IG9uZSBvdGhlciB0aGFuIGNvczAuICovCi0gICAgZm9yICggY29zID0gMTsgY29zIDw9IGNvc19t YXg7IGNvcysrICkKLSAgICAgICAgaWYgKCBtYXBbY29zXS5yZWYgPT0gMCApCi0gICAgICAgICAg ICByZXR1cm4gY29zOwotCi0gICAgcmV0dXJuIC1FTk9FTlQ7Ci19Ci0KIGludCBwc3Jfc2V0X2wz X2NibShzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgc29ja2V0LAogICAgICAgICAgICAg ICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQogewotICAgIHVuc2lnbmVk IGludCBvbGRfY29zLCBjb3NfbWF4OwotICAgIGludCBjb3MsIHJldDsKLSAgICB1aW50NjRfdCBj Ym1fZGF0YSwgY2JtX2NvZGU7Ci0gICAgYm9vbF90IGNkcF9lbmFibGVkID0gY2RwX2lzX2VuYWJs ZWQoc29ja2V0KTsKLSAgICBzdHJ1Y3QgcHNyX2NhdF9jYm0gKm1hcDsKLSAgICBzdHJ1Y3QgcHNy X2NhdF9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9jYXRfc29ja2V0X2luZm8oc29ja2V0KTsKLQot ICAgIGlmICggSVNfRVJSKGluZm8pICkKLSAgICAgICAgcmV0dXJuIFBUUl9FUlIoaW5mbyk7Ci0K LSAgICBpZiAoICFwc3JfY2hlY2tfY2JtKGluZm8tPmNibV9sZW4sIGNibSkgKQotICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKLQotICAgIGlmICggIWNkcF9lbmFibGVkICYmICh0eXBlID09IFBTUl9D Qk1fVFlQRV9MM19DT0RFIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPT0gUFNS X0NCTV9UWVBFX0wzX0RBVEEpICkKLSAgICAgICAgcmV0dXJuIC1FTlhJTzsKLQotICAgIGNvc19t YXggPSBpbmZvLT5jb3NfbWF4OwotICAgIG9sZF9jb3MgPSBkLT5hcmNoLnBzcl9jb3NfaWRzW3Nv Y2tldF07Ci0gICAgbWFwID0gaW5mby0+Y29zX3RvX2NibTsKLQotICAgIHN3aXRjaCAoIHR5cGUg KQotICAgIHsKLSAgICBjYXNlIFBTUl9DQk1fVFlQRV9MMzoKLSAgICAgICAgY2JtX2NvZGUgPSBj Ym07Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug UFNSX0NCTV9UWVBFX0wzX0NPREU6Ci0gICAgICAgIGNibV9jb2RlID0gY2JtOwotICAgICAgICBj Ym1fZGF0YSA9IG1hcFtvbGRfY29zXS5kYXRhOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug UFNSX0NCTV9UWVBFX0wzX0RBVEE6Ci0gICAgICAgIGNibV9jb2RlID0gbWFwW29sZF9jb3NdLmNv ZGU7Ci0gICAgICAgIGNibV9kYXRhID0gY2JtOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1 bHQ6Ci0gICAgICAgIEFTU0VSVF9VTlJFQUNIQUJMRSgpOwotICAgICAgICByZXR1cm4gLUVJTlZB TDsKLSAgICB9Ci0KLSAgICBzcGluX2xvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICBjb3MgPSBm aW5kX2NvcyhtYXAsIGNvc19tYXgsIGNibV9jb2RlLCBjYm1fZGF0YSwgY2RwX2VuYWJsZWQpOwot ICAgIGlmICggY29zID49IDAgKQotICAgIHsKLSAgICAgICAgaWYgKCBjb3MgPT0gb2xkX2NvcyAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0g ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewot ICAgICAgICBjb3MgPSBwaWNrX2F2YWlsX2NvcyhtYXAsIGNvc19tYXgsIG9sZF9jb3MpOwotICAg ICAgICBpZiAoIGNvcyA8IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzcGluX3VubG9jaygm aW5mby0+Y2JtX2xvY2spOwotICAgICAgICAgICAgcmV0dXJuIGNvczsKLSAgICAgICAgfQotCi0g ICAgICAgIC8qIFdlIHRyeSB0byBhdm9pZCB3cml0aW5nIE1TUi4gKi8KLSAgICAgICAgaWYgKCAo Y2RwX2VuYWJsZWQgJiYKLSAgICAgICAgICAgICAobWFwW2Nvc10uY29kZSAhPSBjYm1fY29kZSB8 fCBtYXBbY29zXS5kYXRhICE9IGNibV9kYXRhKSkgfHwKLSAgICAgICAgICAgICAoIWNkcF9lbmFi bGVkICYmIG1hcFtjb3NdLmNibSAhPSBjYm1fY29kZSkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICByZXQgPSB3cml0ZV9sM19jYm0oc29ja2V0LCBjb3MsIGNibV9jb2RlLCBjYm1fZGF0YSwgY2Rw X2VuYWJsZWQpOwotICAgICAgICAgICAgaWYgKCByZXQgKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIHNwaW5fdW5sb2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgICAgICAgICAg cmV0dXJuIHJldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hcFtjb3NdLmNvZGUgPSBj Ym1fY29kZTsKLSAgICAgICAgICAgIG1hcFtjb3NdLmRhdGEgPSBjYm1fZGF0YTsKLSAgICAgICAg fQotICAgIH0KLQotICAgIG1hcFtjb3NdLnJlZisrOwotICAgIG1hcFtvbGRfY29zXS5yZWYtLTsK LSAgICBzcGluX3VubG9jaygmaW5mby0+Y2JtX2xvY2spOwotCi0gICAgZC0+YXJjaC5wc3JfY29z X2lkc1tzb2NrZXRdID0gY29zOwotCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCB3aXRo IGRvbWFpbiBsb2NrIGhlbGQsIG5vIGV4dHJhIGxvY2sgbmVlZGVkIGZvciAncHNyX2Nvc19pZHMn ICovCi1zdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFpbiAqZCkKLXsKLSAgICB1 bnNpZ25lZCBpbnQgc29ja2V0OwotICAgIHVuc2lnbmVkIGludCBjb3M7Ci0gICAgc3RydWN0IHBz cl9jYXRfc29ja2V0X2luZm8gKmluZm87Ci0KLSAgICBpZiggIWQtPmFyY2gucHNyX2Nvc19pZHMg KQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3JfZWFjaF9zZXRfYml0KHNvY2tldCwgY2F0X3Nv Y2tldF9lbmFibGUsIG5yX3NvY2tldHMpCi0gICAgewotICAgICAgICBpZiAoIChjb3MgPSBkLT5h cmNoLnBzcl9jb3NfaWRzW3NvY2tldF0pID09IDAgKQotICAgICAgICAgICAgY29udGludWU7Ci0K LSAgICAgICAgaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLSAgICAgICAgc3Bpbl9s b2NrKCZpbmZvLT5jYm1fbG9jayk7Ci0gICAgICAgIGluZm8tPmNvc190b19jYm1bY29zXS5yZWYt LTsKLSAgICAgICAgc3Bpbl91bmxvY2soJmluZm8tPmNibV9sb2NrKTsKLSAgICB9Ci0KLSAgICB4 ZnJlZShkLT5hcmNoLnBzcl9jb3NfaWRzKTsKLSAgICBkLT5hcmNoLnBzcl9jb3NfaWRzID0gTlVM TDsKLX0KLQogaW50IHBzcl9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQogewotICAgIGlm ICggY2F0X3NvY2tldF9pbmZvICkKLSAgICB7Ci0gICAgICAgIGQtPmFyY2gucHNyX2Nvc19pZHMg PSB4emFsbG9jX2FycmF5KHVuc2lnbmVkIGludCwgbnJfc29ja2V0cyk7Ci0gICAgICAgIGlmICgg IWQtPmFyY2gucHNyX2Nvc19pZHMgKQotICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAg fQotCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgcHNyX2RvbWFpbl9mcmVlKHN0cnVjdCBkb21h aW4gKmQpCiB7CiAgICAgcHNyX2ZyZWVfcm1pZChkKTsKLSAgICBwc3JfZnJlZV9jb3MoZCk7Ci19 Ci0KLXN0YXRpYyBpbnQgY2F0X2NwdV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpCi17Ci0gICAg aWYgKCAhY2F0X3NvY2tldF9pbmZvICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIHRl bXBfY29zX3RvX2NibSA9PSBOVUxMICYmCi0gICAgICAgICAodGVtcF9jb3NfdG9fY2JtID0geHph bGxvY19hcnJheShzdHJ1Y3QgcHNyX2NhdF9jYm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvcHRfY29zX21heCArIDFVTCkpID09IE5VTEwgKQotICAgICAgICBy ZXR1cm4gLUVOT01FTTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjYXRfY3B1 X2luaXQodm9pZCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwotICAg IHN0cnVjdCBwc3JfY2F0X3NvY2tldF9pbmZvICppbmZvOwotICAgIHVuc2lnbmVkIGludCBzb2Nr ZXQ7Ci0gICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLSAgICB1aW50 NjRfdCB2YWw7Ci0gICAgY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBj cHU7Ci0KLSAgICBpZiAoICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BRRSkgfHwgYy0+Y3B1aWRf bGV2ZWwgPCBQU1JfQ1BVSURfTEVWRUxfQ0FUICkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc29j a2V0ID0gY3B1X3RvX3NvY2tldChjcHUpOwotICAgIGlmICggdGVzdF9iaXQoc29ja2V0LCBjYXRf c29ja2V0X2VuYWJsZSkgKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjcHVpZF9jb3VudChQU1Jf Q1BVSURfTEVWRUxfQ0FULCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLSAgICBpZiAoIGVi eCAmIFBTUl9SRVNPVVJDRV9UWVBFX0wzICkKLSAgICB7Ci0gICAgICAgIGNwdWlkX2NvdW50KFBT Ul9DUFVJRF9MRVZFTF9DQVQsIDEsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotICAgICAgICBp bmZvID0gY2F0X3NvY2tldF9pbmZvICsgc29ja2V0OwotICAgICAgICBpbmZvLT5jYm1fbGVuID0g KGVheCAmIDB4MWYpICsgMTsKLSAgICAgICAgaW5mby0+Y29zX21heCA9IG1pbihvcHRfY29zX21h eCwgZWR4ICYgMHhmZmZmKTsKLQotICAgICAgICBpbmZvLT5jb3NfdG9fY2JtID0gdGVtcF9jb3Nf dG9fY2JtOwotICAgICAgICB0ZW1wX2Nvc190b19jYm0gPSBOVUxMOwotICAgICAgICAvKiBjb3M9 MCBpcyByZXNlcnZlZCBhcyBkZWZhdWx0IGNibShhbGwgb25lcykuICovCi0gICAgICAgIGluZm8t PmNvc190b19jYm1bMF0uY2JtID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0gICAg ICAgIHNwaW5fbG9ja19pbml0KCZpbmZvLT5jYm1fbG9jayk7Ci0KLSAgICAgICAgc2V0X2JpdChz b2NrZXQsIGNhdF9zb2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBpZiAoIChlY3ggJiBQU1JfQ0FU X0NEUF9DQVBBQklMSVRZKSAmJiAob3B0X3BzciAmIFBTUl9DRFApICYmCi0gICAgICAgICAgICAg Y2RwX3NvY2tldF9lbmFibGUgJiYgIXRlc3RfYml0KHNvY2tldCwgY2RwX3NvY2tldF9lbmFibGUp ICkKLSAgICAgICAgewotICAgICAgICAgICAgaW5mby0+Y29zX3RvX2NibVswXS5jb2RlID0gKDF1 bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotICAgICAgICAgICAgaW5mby0+Y29zX3RvX2NibVsw XS5kYXRhID0gKDF1bGwgPDwgaW5mby0+Y2JtX2xlbikgLSAxOwotCi0gICAgICAgICAgICAvKiBX ZSBvbmx5IHdyaXRlIG1hc2sxIHNpbmNlIG1hc2swIGlzIGFsd2F5cyBhbGwgb25lcyBieSBkZWZh dWx0LiAqLwotICAgICAgICAgICAgd3Jtc3JsKE1TUl9JQTMyX1BTUl9MM19NQVNLKDEpLCAoMXVs bCA8PCBpbmZvLT5jYm1fbGVuKSAtIDEpOwotCi0gICAgICAgICAgICByZG1zcmwoTVNSX0lBMzJf UFNSX0wzX1FPU19DRkcsIHZhbCk7Ci0gICAgICAgICAgICB3cm1zcmwoTVNSX0lBMzJfUFNSX0wz X1FPU19DRkcsIHZhbCB8ICgxIDw8IFBTUl9MM19RT1NfQ0RQX0VOQUJMRV9CSVQpKTsKLQotICAg ICAgICAgICAgLyogQ3V0IGhhbGYgb2YgY29zX21heCB3aGVuIENEUCBpcyBlbmFibGVkLiAqLwot ICAgICAgICAgICAgaW5mby0+Y29zX21heCA+Pj0gMTsKLQotICAgICAgICAgICAgc2V0X2JpdChz b2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLSAgICAgICAgfQotICAgICAgICBwcmludGsoWEVO TE9HX0lORk8gIkNBVDogZW5hYmxlZCBvbiBzb2NrZXQgJXUsIGNvc19tYXg6JXUsIGNibV9sZW46 JXUsIENEUDolc1xuIiwKLSAgICAgICAgICAgICAgIHNvY2tldCwgaW5mby0+Y29zX21heCwgaW5m by0+Y2JtX2xlbiwKLSAgICAgICAgICAgICAgIGNkcF9pc19lbmFibGVkKHNvY2tldCkgPyAib24i IDogIm9mZiIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgY2F0X2NwdV9maW5pKHVuc2lnbmVk IGludCBjcHUpCi17Ci0gICAgdW5zaWduZWQgaW50IHNvY2tldCA9IGNwdV90b19zb2NrZXQoY3B1 KTsKLQotICAgIGlmICggIXNvY2tldF9jcHVtYXNrW3NvY2tldF0gfHwgY3B1bWFza19lbXB0eShz b2NrZXRfY3B1bWFza1tzb2NrZXRdKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcHNyX2NhdF9z b2NrZXRfaW5mbyAqaW5mbyA9IGNhdF9zb2NrZXRfaW5mbyArIHNvY2tldDsKLQotICAgICAgICBp ZiAoIGluZm8tPmNvc190b19jYm0gKQotICAgICAgICB7Ci0gICAgICAgICAgICB4ZnJlZShpbmZv LT5jb3NfdG9fY2JtKTsKLSAgICAgICAgICAgIGluZm8tPmNvc190b19jYm0gPSBOVUxMOwotICAg ICAgICB9Ci0KLSAgICAgICAgaWYgKCBjZHBfaXNfZW5hYmxlZChzb2NrZXQpICkKLSAgICAgICAg ICAgIGNsZWFyX2JpdChzb2NrZXQsIGNkcF9zb2NrZXRfZW5hYmxlKTsKLQotICAgICAgICBjbGVh cl9iaXQoc29ja2V0LCBjYXRfc29ja2V0X2VuYWJsZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p ZCBfX2luaXQgcHNyX2NhdF9mcmVlKHZvaWQpCi17Ci0gICAgeGZyZWUoY2F0X3NvY2tldF9lbmFi bGUpOwotICAgIGNhdF9zb2NrZXRfZW5hYmxlID0gTlVMTDsKLSAgICB4ZnJlZShjYXRfc29ja2V0 X2luZm8pOwotICAgIGNhdF9zb2NrZXRfaW5mbyA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9f aW5pdCBpbml0X3Bzcl9jYXQodm9pZCkKLXsKLSAgICBpZiAoIG9wdF9jb3NfbWF4IDwgMSApCi0g ICAgewotICAgICAgICBwcmludGsoWEVOTE9HX0lORk8gIkNBVDogZGlzYWJsZWQsIGNvc19tYXgg aXMgdG9vIHNtYWxsXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNhdF9zb2Nr ZXRfZW5hYmxlID0geHphbGxvY19hcnJheSh1bnNpZ25lZCBsb25nLCBCSVRTX1RPX0xPTkdTKG5y X3NvY2tldHMpKTsKLSAgICBjYXRfc29ja2V0X2luZm8gPSB4emFsbG9jX2FycmF5KHN0cnVjdCBw c3JfY2F0X3NvY2tldF9pbmZvLCBucl9zb2NrZXRzKTsKLSAgICBjZHBfc29ja2V0X2VuYWJsZSA9 IHh6YWxsb2NfYXJyYXkodW5zaWduZWQgbG9uZywgQklUU19UT19MT05HUyhucl9zb2NrZXRzKSk7 Ci0KLSAgICBpZiAoICFjYXRfc29ja2V0X2VuYWJsZSB8fCAhY2F0X3NvY2tldF9pbmZvICkKLSAg ICAgICAgcHNyX2NhdF9mcmVlKCk7CiB9CiAKIHN0YXRpYyBpbnQgcHNyX2NwdV9wcmVwYXJlKHVu c2lnbmVkIGludCBjcHUpCiB7Ci0gICAgcmV0dXJuIGNhdF9jcHVfcHJlcGFyZShjcHUpOworICAg IHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwc3JfY3B1X2luaXQodm9pZCkKIHsKLSAgICBp ZiAoIGNhdF9zb2NrZXRfaW5mbyApCi0gICAgICAgIGNhdF9jcHVfaW5pdCgpOwotCiAgICAgcHNy X2Fzc29jX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgcHNyX2NwdV9maW5pKHVuc2lnbmVkIGlu dCBjcHUpCiB7Ci0gICAgaWYgKCBjYXRfc29ja2V0X2luZm8gKQotICAgICAgICBjYXRfY3B1X2Zp bmkoY3B1KTsKKyAgICByZXR1cm47CiB9CiAKIHN0YXRpYyBpbnQgY3B1X2NhbGxiYWNrKApAQCAt NzM4LDE0ICsyODIsMTAgQEAgc3RhdGljIGludCBfX2luaXQgcHNyX3ByZXNtcF9pbml0KHZvaWQp CiAgICAgaWYgKCAob3B0X3BzciAmIFBTUl9DTVQpICYmIG9wdF9ybWlkX21heCApCiAgICAgICAg IGluaXRfcHNyX2NtdChvcHRfcm1pZF9tYXgpOwogCi0gICAgaWYgKCBvcHRfcHNyICYgUFNSX0NB VCApCi0gICAgICAgIGluaXRfcHNyX2NhdCgpOwotCi0gICAgaWYgKCBwc3JfY3B1X3ByZXBhcmUo MCkgKQotICAgICAgICBwc3JfY2F0X2ZyZWUoKTsKKyAgICBwc3JfY3B1X3ByZXBhcmUoMCk7CiAK ICAgICBwc3JfY3B1X2luaXQoKTsKLSAgICBpZiAoIHBzcl9jbXRfZW5hYmxlZCgpIHx8IGNhdF9z b2NrZXRfaW5mbyApCisgICAgaWYgKCBwc3JfY210X2VuYWJsZWQoKSApCiAgICAgICAgIHJlZ2lz dGVyX2NwdV9ub3RpZmllcigmY3B1X25mYik7CiAKICAgICByZXR1cm4gMDsKLS0gCjEuOS4xCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==