From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhongze Liu Subject: [PATCH v2 5/6] libxl: support mapping static shared memory areas during domain creation Date: Sun, 27 Aug 2017 16:36:14 +0800 Message-ID: <20170827083615.15712-6-blackskygg@gmail.com> References: <20170827083615.15712-1-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170827083615.15712-1-blackskygg@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: Stefano Stabellini , Wei Liu , Zhongze Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX19zc2htX2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZyb20gb25lIERvbVUgdG8g YW5vdGhlciwgVGhlIG1hcHBpbmcKcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbHdpbmcgc3RlcHM6 CgogICogU2V0IGRlZmF1bHRzIGFuZCBjaGVjayBmb3IgZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0 YXRpY19zaG0gY29uZmlnczoKICAgIG92ZXJsYXBwaW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywg ZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAogICAgbm8gbWFzdGVyIGRvbWFpbiBldGMuCiAgKiBX cml0ZSBpbmZvbWF0aW9uIG9mIHN0YXRpYyBzaGFyZWQgbWVtb3J5IGFyZWFzIGludG8gdGhlIGFw cHJvcHJpYXRlCiAgICB4ZW5zdG9yZSBwYXRocy4KICAqIFVzZSB4Y19kb21haW5fYWRkX3RvX3Bo eXNtYXBfYmF0Y2ggdG8gZG8gdGhlIHBhZ2Ugc2hhcmluZy4KICAqIFNldCB0aGUgcmVmY291bnQg b2YgdGhlIHNoYXJlZCByZWdpb24gYWNjb3JkaW5nbHkKClRlbXBvcmFyaWx5IG1hcmsgdGhpcyBh cyB1bnN1cHBvcnRlZCBvbiB4ODYgYmVjYXVzZSBjYWxsaW5nIHAybV9hZGRfZm9yZWdpbiBvbgp0 d28gZG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9uIHg4NiAoc2VlIHRoZSBjb21tZW50 cyBpbgp4ODYvbW0vcDJtLmM6cDJtX2FkZF9mb3JlZ2luIGZvciBtb3JlIGRldGFpbHMpLgoKVGhp cyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJl YXMgYmV0d2VlbiBWTXMKZnJvbSB4bCBjb25maWcgZmlsZSIgKHNlZSBbMV0pLgoKWzFdIGh0dHBz Oi8vbGlzdHMueGVuLm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDE3LTA4L21zZzAzMjQy Lmh0bWwKClNpZ25lZC1vZmYtYnk6IFpob25nemUgTGl1IDxibGFja3NreWdnQGdtYWlsLmNvbT4K CkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogR2Vvcmdl IER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29tPgpDYzogSWFuIEphY2tzb24gPGlh bi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5j b20+CkNjOiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+CkNj OiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+CkNjOiBUaW0gRGVl Z2FuIDx0aW1AeGVuLm9yZz4KQ2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkNjOiBK dWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgpDYzogeGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKLS0tCnYyOgogICogY29kaW5nIHN0eWxlIGNvcnJlY3Rpb25zCiAgKiByZXBsYWNlIGxp YnhsX194c19nZXRfc3NobXBhdGgoKSB3aXRoIGEgbWFjcm8KICAqIHVzZSB0aGUgcHJlZGVmaW5l ZCBYQ19QQUdFX1NJWkUgaW5zdGVhZCBvZiBoYXJkY29kaW5nIDEyCiAgKiBhdm9pZCBjYWxsaW5n IHhjX2RvbWFpbl9hZGRfdG9fcGh5c21hcCBtYW55IHRpbWUgZHVyaW5nIHhzIHJldHJ5CiAgKiB1 bm1hcHBpbmcgbWFwcGVkIHBhZ2VzIG9uIHBhcnRpYWwgZmFpbHVyZQogICogcmVmY291bnRpbmcg dGhlIG5vZGUKLS0tCiB0b29scy9saWJ4bC9NYWtlZmlsZSAgICAgICAgIHwgICAyICstCiB0b29s cy9saWJ4bC9saWJ4bF9hcmNoLmggICAgIHwgICA2ICsKIHRvb2xzL2xpYnhsL2xpYnhsX2FybS5j ICAgICAgfCAgMTUgKysKIHRvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jICAgfCAgMjcgKysrKwog dG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCB8ICAxMyArKwogdG9vbHMvbGlieGwvbGlieGxf c3NobS5jICAgICB8IDM3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB0b29scy9saWJ4bC9saWJ4bF94ODYuYyAgICAgIHwgIDE4ICsrKwogNyBmaWxlcyBjaGFu Z2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL01ha2Vm aWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKaW5kZXggM2I2M2ZiMmNhZC4uZmQ2MjRiMjhmMyAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKKysrIGIvdG9vbHMvbGlieGwvTWFrZWZp bGUKQEAgLTEzOCw3ICsxMzgsNyBAQCBMSUJYTF9PQkpTID0gZmxleGFycmF5Lm8gbGlieGwubyBs aWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3BjaS5vIFwKIAkJCWxpYnhsX2RvbV9zdXNw ZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF91c2IubyBcCiAJCQlsaWJ4bF92dHBtLm8gbGli eGxfbmljLm8gbGlieGxfZGlzay5vIGxpYnhsX2NvbnNvbGUubyBcCiAJCQlsaWJ4bF9jcHVwb29s Lm8gbGlieGxfbWVtLm8gbGlieGxfc2NoZWQubyBsaWJ4bF90bWVtLm8gXAotCQkJbGlieGxfOXBm cy5vIGxpYnhsX2RvbWFpbi5vIFwKKwkJCWxpYnhsXzlwZnMubyBsaWJ4bF9kb21haW4ubyBsaWJ4 bF9zc2htLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgJChMSUJYTF9PQkpTLXkpCiBMSUJY TF9PQkpTICs9IGxpYnhsX2dlbmlkLm8KIExJQlhMX09CSlMgKz0gX2xpYnhsX3R5cGVzLm8gbGli eGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwubwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfYXJjaC5oIGIvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCmluZGV4IDVlMWZjNjA2 MGUuLjFkNjgxZDg4NjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAorKysg Yi90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKQEAgLTcxLDYgKzcxLDEyIEBAIGludCBsaWJ4bF9f YXJjaF9leHRyYV9tZW1vcnkobGlieGxfX2djICpnYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmluZm8sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQ2NF90ICpvdXQpOwogCitfaGlkZGVuCitib29sIGxpYnhsX19h cmNoX2RvbWFpbl9zdXBwb3J0X3NzaG0oY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJf aW5mbyk7CisKK19oaWRkZW4KK2ludCBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGlj eV9zZXRkZWZhdWx0KGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pOworCiAjaWYgZGVmaW5lZChfX2kz ODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogCiAjZGVmaW5lIExBUElDX0JBU0VfQUREUkVT UyAgMHhmZWUwMDAwMApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfYXJtLmMgYi90b29s cy9saWJ4bC9saWJ4bF9hcm0uYwppbmRleCBkODQyZDg4OGViLi4wOTc1MTA5YzBjIDEwMDY0NAot LS0gYS90b29scy9saWJ4bC9saWJ4bF9hcm0uYworKysgYi90b29scy9saWJ4bC9saWJ4bF9hcm0u YwpAQCAtMTA2NSw2ICsxMDY1LDIxIEBAIHZvaWQgbGlieGxfX2FyY2hfZG9tYWluX2J1aWxkX2lu Zm9fYWNwaV9zZXRkZWZhdWx0KAogICAgIGxpYnhsX2RlZmJvb2xfc2V0ZGVmYXVsdCgmYl9pbmZv LT5hY3BpLCBmYWxzZSk7CiB9CiAKK2Jvb2wgbGlieGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3No bShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvKQoreworICAgIHJldHVybiB0 cnVlOworfQorCitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVm YXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGlmIChzc2htLT5jYWNoZV9wb2xp Y3kgPT0gTElCWExfU1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQorICAgICAgICBzc2htLT5jYWNo ZV9wb2xpY3kgPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX0FSTV9OT1JNQUw7CisgICAgaWYgKHNz aG0tPmNhY2hlX3BvbGljeSA+PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUwpCisg ICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKworICAgIHJldHVybiAwOworfQorCiAvKgogICog TG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGli eGxfY3JlYXRlLmMgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwppbmRleCAxMTU4MzAzZTFh Li5mMDE5M2M4NGJhIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYworKysg Yi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwpAQCAtNTAxLDYgKzUwMSwxNCBAQCBpbnQgbGli eGxfX2RvbWFpbl9idWlsZChsaWJ4bF9fZ2MgKmdjLAogICAgICAgICByZXQgPSBFUlJPUl9JTlZB TDsKICAgICAgICAgZ290byBvdXQ7CiAgICAgfQorCisgICAgLyogdGhlIHAybSBoYXMgYmVlbiBz ZXR1cCwgd2UgY291bGQgbWFwIHRoZSBzdGF0aWMgc2hhcmVkIG1lbW9yeSBub3cuICovCisgICAg cmV0ID0gbGlieGxfX3NzaG1fYWRkKGdjLCBkb21pZCwgZF9jb25maWctPnNzaG1zLCBkX2NvbmZp Zy0+bnVtX3NzaG1zKTsKKyAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgTE9HKEVSUk9SLCAi ZmFpbGVkIHRvIG1hcCBzdGF0aWMgc2hhcmVkIG1lbW9yeSIpOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKICAgICByZXQgPSBsaWJ4bF9fYnVpbGRfcG9zdChnYywgZG9taWQsIGluZm8sIHN0 YXRlLCB2bWVudHMsIGxvY2FsZW50cyk7CiBvdXQ6CiAgICAgcmV0dXJuIHJldDsKQEAgLTkxOCw2 ICs5MjYsMjUgQEAgc3RhdGljIHZvaWQgaW5pdGlhdGVfZG9tYWluX2NyZWF0ZShsaWJ4bF9fZWdj ICplZ2MsCiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OwogICAgIH0KIAorICAgIGlmIChkX2NvbmZp Zy0+bnVtX3NzaG1zICE9IDAgJiYKKyAgICAgICAgIWxpYnhsX19hcmNoX2RvbWFpbl9zdXBwb3J0 X3NzaG0oJmRfY29uZmlnLT5iX2luZm8pKSB7CisgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAi c3RhdGljX3NobSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZG9tYWluIHR5cGUuIik7CisgICAg ICAgIHJldCA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisK KyAgICBmb3IgKGkgPSAwOyBpIDwgZF9jb25maWctPm51bV9zc2htczsgKytpKSB7CisgICAgICAg IHJldCA9IGxpYnhsX19zc2htX3NldGRlZmF1bHQoZ2MsIGRvbWlkLCAmZF9jb25maWctPnNzaG1z W2ldKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQs ICJVbmFibGUgdG8gc2V0IGRlZmF1bHRzIGZvciBzdGF0aWMgc3NobSIpOworICAgICAgICAgICAg Z290byBlcnJvcl9vdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSBsaWJ4bF9fc3No bV9jaGVja19vdmVybGFwKGdjLCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRfY29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7CisgICAgaWYgKHJl dCkgZ290byBlcnJvcl9vdXQ7CisKICAgICByZXQgPSBsaWJ4bF9fZG9tYWluX21ha2UoZ2MsIGRf Y29uZmlnLCAmZG9taWQsICZzdGF0ZS0+Y29uZmlnKTsKICAgICBpZiAocmV0KSB7CiAgICAgICAg IExPR0QoRVJST1IsIGRvbWlkLCAiY2Fubm90IG1ha2UgZG9tYWluOiAlZCIsIHJldCk7CmRpZmYg LS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwvbGlieGxf aW50ZXJuYWwuaAppbmRleCA3MjQ3NTA5NjdjLi43YWIyZDQwYzQ5IDEwMDY0NAotLS0gYS90b29s cy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFs LmgKQEAgLTQzNTIsNiArNDM1MiwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbGlieGxfX2FjcGlf ZGVmYm9vbF92YWwoY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbwogfQogI2Vu ZGlmCiAKKy8qCisgKiBTZXQgdXAgc3RhdGljIHNoYXJlZCByYW0gcGFnZXMgZm9yIEhWTSBkb21h aW5zIHRvIGNvbW11bmljYXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBj YWxsZWQgYWZ0ZXIgdGhlIG1lbW9yeSBtYXAgaXMgY29uc3RydWN0ZWQKKyAqIGFuZCBiZWZvcmUg YW55IGZ1cnRoZXIgbWVtb3J5IGFjY2Vzcy4gKi8KK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2Fk ZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htLCBpbnQgbGVuKTsKKworX2hpZGRlbiBpbnQgbGli eGxfX3NzaG1fY2hlY2tfb3ZlcmxhcChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3No bXMsIGludCBsZW4pOworX2hpZGRlbiBpbnQgbGlieGxfX3NzaG1fc2V0ZGVmYXVsdChsaWJ4bF9f Z2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfc3RhdGljX3NobSAqc3NobSk7CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAg KiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9zc2htLmMgYi90b29scy9s aWJ4bC9saWJ4bF9zc2htLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u YTQwOTFhMzA1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYwpA QCAtMCwwICsxLDM3NSBAQAorI2luY2x1ZGUgImxpYnhsX29zZGVwcy5oIgorI2luY2x1ZGUgImxp YnhsX2ludGVybmFsLmgiCisjaW5jbHVkZSAibGlieGxfYXJjaC5oIgorCisjZGVmaW5lIFNTSE1f UEFUSChpZCkgR0NTUFJJTlRGKCIvbG9jYWwvc3RhdGljX3NobS8lcyIsIGlkKQorCisjZGVmaW5l IFNTSE1fRVJST1IoZG9taWQsIHNzaG1pZCwgZiwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgTE9HRChFUlJPUiwgZG9taWQsICJzdGF0aWNfc2htIGlkID0gJXM6ICIg Ziwgc3NobWlkLCAjI19fVkFfQVJHU19fKQorCisKKy8qIFNldCBkZWZhdWx0IHZhbHVlcyBmb3Ig bGlieGxfc3RhdGljX3NobSAqLworaW50IGxpYnhsX19zc2htX3NldGRlZmF1bHQobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9z dGF0aWNfc2htICpzc2htKQoreworICAgIGludCByYzsKKworICAgIGlmIChzc2htLT5yb2xlID09 IExJQlhMX1NTSE1fUk9MRV9VTktOT1dOKQorICAgICAgICBzc2htLT5yb2xlID0gTElCWExfU1NI TV9ST0xFX1NMQVZFOworICAgIGlmIChzc2htLT5wcm90ID09IExJQlhMX1NTSE1fUFJPVF9VTktO T1dOKQorICAgICAgICBzc2htLT5wcm90ID0gTElCWExfU1NITV9QUk9UX1JXOworCisgICAgLyog cm9sZS1zcGVjaWZpYyBjaGVja3MgKi8KKyAgICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hN X1JPTEVfU0xBVkUpIHsKKyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JB TkdFX1VOS05PV04pCisgICAgICAgICAgICBzc2htLT5vZmZzZXQgPSAwOworICAgICAgICBpZiAo c3NobS0+Y2FjaGVfcG9saWN5ICE9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikgewor ICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAg ICAgICAgICJjYWNoZV9wb2xpY3kgaXMgb25seSBhcHBsaWNhYmxlIHRvIG1hc3RlciBkb21haW5z Iik7CisgICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3NobS0+b2Zmc2V0ICE9IExJ QlhMX1NTSE1fUkFOR0VfVU5LTk9XTikgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwg c3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgaXMgb25seSBhcHBsaWNh YmxlIHRvIHNsYXZlIGRvbWFpbnMiKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cisg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2Fy Y2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChzc2htKTsKKyAgICAgICAgaWYg KHJjKSB7CisgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgImNhY2hlIHBvbGljeSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZv cm0iKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMg PSAwOworb3V0OgorICAgIHJldHVybiByYzsKK30KKworLyogQ29tcGFyZSBmdW5jdGlvbiBmb3Ig c29ydGluZyBzc2htIHJhbmdlcyBieSBzc2htLT5iZWdpbiAqLworc3RhdGljIGludCBzc2htX3Jh bmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgIGxpYnhsX3N0YXRp Y19zaG0gKmNvbnN0ICpzc2htYSA9IGEsICpjb25zdCAqc3NobWIgPSBiOworICAgIHJldHVybiAo KnNzaG1hKS0+YmVnaW4gPiAoKnNzaG1iKS0+YmVnaW4gPyAxIDogLTE7Cit9CisKKy8qIGNoZWNr IGlmIHRoZSBzc2htIHNsYXZlIGNvbmZpZ3MgaW4gQHNzaG0gb3ZlcmxhcCAqLworaW50IGxpYnhs X19zc2htX2NoZWNrX292ZXJsYXAobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMs IGludCBsZW4pCit7CisKKyAgICBjb25zdCBsaWJ4bF9zdGF0aWNfc2htICoqc2xhdmVfc3NobXMg PSBOVUxMOworICAgIGludCBudW1fc2xhdmVzOworICAgIGludCBpOworCisgICAgaWYgKCFsZW4p IHJldHVybiAwOworCisgICAgc2xhdmVfc3NobXMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBsZW4sIHNp emVvZihzbGF2ZV9zc2htc1swXSkpOworICAgIG51bV9zbGF2ZXMgPSAwOworICAgIGZvciAoaSA9 IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICBpZiAoc3NobXNbaV0ucm9sZSA9PSBMSUJYTF9T U0hNX1JPTEVfU0xBVkUpCisgICAgICAgICAgICBzbGF2ZV9zc2htc1tudW1fc2xhdmVzKytdID0g c3NobXMgKyBpOworICAgIH0KKyAgICBxc29ydChzbGF2ZV9zc2htcywgbnVtX3NsYXZlcywgc2l6 ZW9mKHNsYXZlX3NzaG1zWzBdKSwgc3NobV9yYW5nZV9jbXApOworCisgICAgZm9yIChpID0gMDsg aSA8IG51bV9zbGF2ZXMgLSAxOyArK2kpIHsKKyAgICAgICAgaWYgKHNsYXZlX3NzaG1zW2krMV0t PmJlZ2luIDwgc2xhdmVfc3NobXNbaV0tPmVuZCkgeworICAgICAgICAgICAgU1NITV9FUlJPUihk b21pZCwgc2xhdmVfc3NobXNbaSsxXS0+aWQsICJzbGF2ZSByYW5nZXMgb3ZlcmxhcC4iKTsKKyAg ICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl dHVybiAwOworfQorCisvKiBUaGUgY2FsbGVyIGhhdmUgdG8gZ3VhcmVudGVlIHRoYXQgc3NobS0+ YmVnaW4gPCBzc2htLT5lbmQgKi8KK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fZG9fbWFwKGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IG1pZCwgdWludDMyX3Qgc2lkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQ2NF90IG1iZWdpbiwgdWludDY0X3QgbWVuZCkKK3sKKyAgICBpbnQgcmM7 CisgICAgaW50IGk7CisgICAgdW5zaWduZWQgaW50IG51bV9tcGFnZXMsIG51bV9zcGFnZXMsIG9m ZnNldDsKKyAgICBpbnQgKmVycnM7CisgICAgeGVuX3Vsb25nX3QgKmlkeHM7CisgICAgeGVuX3Bm bl90ICpncGZuczsKKworICAgIG51bV9tcGFnZXMgPSAobWVuZCAtIG1iZWdpbikgPj4gWENfUEFH RV9TSElGVDsKKyAgICBudW1fc3BhZ2VzID0gKHNzaG0tPmVuZCAtIHNzaG0tPmJlZ2luKSA+PiBY Q19QQUdFX1NISUZUOworICAgIG9mZnNldCA9IHNzaG0tPm9mZnNldCA+PiBYQ19QQUdFX1NISUZU OworCisgICAgLyogQ2hlY2sgcmFuZ2UuIFRlc3Qgb2Zmc2V0IDwgbXBhZ2VzIGZpcnN0IHRvIGF2 b2lkIG92ZXJmbG93ICovCisgICAgaWYgKChvZmZzZXQgPj0gbnVtX21wYWdlcykgfHwgKG51bV9t cGFnZXMgLSBvZmZzZXQgPCBudW1fc3BhZ2VzKSkgeworICAgICAgICBTU0hNX0VSUk9SKHNpZCwg c3NobS0+aWQsICJleGNlZWRzIG1hc3RlcidzIGFkZHJlc3Mgc3BhY2UuIik7CisgICAgICAgIHJj ID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIGZpbGwg b3V0IHRoZSBwZm4ncyBhbmQgZG8gdGhlIG1hcHBpbmcgKi8KKyAgICBlcnJzID0gbGlieGxfX2Nh bGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKGludCkpOworICAgIGlkeHMgPSBsaWJ4bF9fY2Fs bG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Vsb25nX3QpKTsKKyAgICBncGZucyA9IGxp YnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZih4ZW5fcGZuX3QpKTsKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX3NwYWdlczsgaSsrKSB7CisgICAgICAgIGlkeHNbaV0gPSAobWJlZ2lu ID4+IFhDX1BBR0VfU0hJRlQpICsgb2Zmc2V0ICsgaTsKKyAgICAgICAgZ3BmbnNbaV09IChzc2ht LT5iZWdpbiA+PiBYQ19QQUdFX1NISUZUKSArIGk7CisgICAgfQorICAgIHJjID0geGNfZG9tYWlu X2FkZF90b19waHlzbWFwX2JhdGNoKENUWC0+eGNoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpZCwgbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFhFTk1BUFNQQUNFX2dtZm5fZm9yZWlnbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBudW1fc3BhZ2VzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlkeHMsIGdwZm5zLCBlcnJzKTsKKworICAgIGZvciAoaSA9IDA7IGkg PCBudW1fc3BhZ2VzOyBpKyspIHsKKyAgICAgICAgaWYgKGVycnNbaV0pIHsKKyAgICAgICAgICAg IFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhbid0 IG1hcCBhdCBhZGRyZXNzIDB4JSJQUkl4NjQiLiIsCisgICAgICAgICAgICAgICAgICAgICAgIGdw Zm5zW2ldIDw8IFhDX1BBR0VfU0hJRlQpOworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwor ICAgICAgICB9CisgICAgfQorICAgIGlmIChyYykgeworICAgICAgICAvKiByb2xlIGJhY2sgc3Vj Y2Vzc2Z1bGx5IG1hcHBlZCBwYWdlcyAqLworICAgICAgICBTU0hNX0VSUk9SKHNpZCwgc3NobS0+ aWQsICJlcnJvcnMgb2NjdXJyZWQsIGNhbmNlbGluZyBvcGVyYXRpb24uIik7CisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fc3BhZ2VzOyBpKyspIHsKKyAgICAgICAgICAgIGlmICh4Y19kb21h aW5fcmVtb3ZlX2Zyb21fcGh5c21hcChDVFgtPnhjaCwgc2lkLCBncGZuc1tpXSkpIHsKKyAgICAg ICAgICAgICAgICBTU0hNX0VSUk9SKHNpZCwgc3NobS0+aWQsICJjYW4ndCB1bm1hcCBwYWdlIGF0 IDB4JSJQUkl4NjQiLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncGZuc1tpXSA8PCBY Q19QQUdFX1NISUZUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3RvIG91 dDsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0 aWMgaW50IGxpYnhsX19zc2htX2luY3JlZihsaWJ4bF9fZ2MgKmdjLCB4c190cmFuc2FjdGlvbl90 IHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3NobV9wYXRo KQoreworICAgIGludCByYywgY291bnQ7CisgICAgY29uc3QgY2hhciAqY291bnRfcGF0aCwgKmNv dW50X3N0cmluZzsKKworICAgIGNvdW50X3BhdGggPSBHQ1NQUklOVEYoIiVzL3VzZXJzIiwgc3No bV9wYXRoKTsKKyAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9w YXRoLCAmY291bnRfc3RyaW5nKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIGNvdW50ID0g YXRvaShjb3VudF9zdHJpbmcpOworCisgICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIs IGNvdW50KzEpOworICAgIHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3Vu dF9wYXRoLCBjb3VudF9zdHJpbmcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9 IDA7CitvdXQ6CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2Fk ZF9zbGF2ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjOwor ICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCwgKnNsYXZlX3BhdGgsICpkb21fcGF0aCwgKmRvbV9z c2htX3BhdGgsICpkb21fcm9sZV9wYXRoOworICAgIGNoYXIgKmVudHNbOV07CisgICAgY29uc3Qg Y2hhciAqeHNfdmFsdWU7CisgICAgbGlieGxfc3RhdGljX3NobSBtYXN0ZXJfc3NobTsKKyAgICB1 aW50MzJfdCBtYXN0ZXJfZG9taWQ7CisgICAgeHNfdHJhbnNhY3Rpb25fdCB4dCA9IFhCVF9OVUxM OworICAgIGJvb2wgaXNyZXRyeTsKKworICAgIHNzaG1fcGF0aCA9IFNTSE1fUEFUSChzc2htLT5p ZCk7CisgICAgc2xhdmVfcGF0aCA9IEdDU1BSSU5URigiJXMvc2xhdmVzLyUiUFJJdTMyLCBzc2ht X3BhdGgsIGRvbWlkKTsKKyAgICBkb21fcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOworICAgIC8qIHRoZSBkb21haW4gc2hvdWxkIGJlIGluIHhlbnN0b3JlIGJ5IG5vdyAq LworICAgIGFzc2VydChkb21fcGF0aCk7CisgICAgZG9tX3NzaG1fcGF0aCA9IEdDU1BSSU5URigi JXMvc3RhdGljX3NobS8lcyIsIGRvbV9wYXRoLCBzc2htLT5pZCk7CisgICAgZG9tX3JvbGVfcGF0 aCA9IEdDU1BSSU5URigiJXMvcm9sZSIsIGRvbV9zc2htX3BhdGgpOworCisgICAgLyogcHJlcGFy ZSB0aGUgc2xhdmUgeGVuc3RvcmUgZW50cmllcyAqLworICAgIGVudHNbMF0gPSAiYmVnaW4iOwor ICAgIGVudHNbMV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBl bnRzWzJdID0gImVuZCI7CisgICAgZW50c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3No bS0+ZW5kKTsKKyAgICBlbnRzWzRdID0gIm9mZnNldCI7CisgICAgZW50c1s1XSA9IEdDU1BSSU5U RigiMHglIlBSSXg2NCwgc3NobS0+b2Zmc2V0KTsKKyAgICBlbnRzWzZdID0gInByb3QiOworICAg IGVudHNbN10gPSBsaWJ4bF9fc3RyZHVwKGdjLCBsaWJ4bF9zc2htX3Byb3RfdG9fc3RyaW5nKHNz aG0tPnByb3QpKTsKKyAgICBlbnRzWzhdID0gTlVMTDsKKworICAgIGlzcmV0cnkgPSBmYWxzZTsK KyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0 KGdjLCAmeHQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmICghbGli eGxfX3hzX3JlYWQoZ2MsIHh0LCBzc2htX3BhdGgpKSB7CisgICAgICAgICAgICBTU0hNX0VSUk9S KGRvbWlkLCBzc2htLT5pZCwgIm5vIG1hc3RlciBmb3VuZC4iKTsKKyAgICAgICAgICAgIHJjID0g RVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAg LyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8KKyAg ICAgICAgaWYgKGxpYnhsX194c19yZWFkKGdjLCB4dCwgZG9tX3NzaG1fcGF0aCkpIHsKKyAgICAg ICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAorICAgICAgICAgICAgICAgICAgICAg ICAiZG9tYWluIHRyaWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKKyAgICAgICAgICAg IHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAg ICAgICAgLyogbG9vayBhdCB0aGUgbWFzdGVyIGluZm8gYW5kIHNlZSBpZiB3ZSBjb3VsZCBkbyB0 aGUgbWFwcGluZyAqLworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wcm90 Iiwgc3NobV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192 YWx1ZSk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIGxpYnhsX3NzaG1fcHJv dF9mcm9tX3N0cmluZyh4c192YWx1ZSwgJm1hc3Rlcl9zc2htLnByb3QpOworCisgICAgICAgIHJj ID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL2JlZ2luIiwgc3NobV9wYXRoKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7CisgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgICAgIG1hc3Rlcl9zc2htLmJlZ2luID0gc3RydG91bGwoeHNfdmFsdWUs IE5VTEwsIDE2KTsKKworICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9lbmQi LCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3Zh bHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgbWFzdGVyX3NzaG0uZW5k ID0gc3RydG91bGwoeHNfdmFsdWUsIE5VTEwsIDE2KTsKKworICAgICAgICByYyA9IGxpYnhsX194 c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NTUFJJTlRGKCIlcy9tYXN0ZXIiLCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnhzX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsK KyAgICAgICAgbWFzdGVyX2RvbWlkID0gc3RydG91bGwoeHNfdmFsdWUsIE5VTEwsIDE2KTsKKwor ICAgICAgICBpZiAoc3NobS0+cHJvdCA9PSBMSUJYTF9TU0hNX1BST1RfVU5LTk9XTikgeworICAg ICAgICAgICAgc3NobS0+cHJvdCA9IG1hc3Rlcl9zc2htLnByb3Q7CisgICAgICAgIH0KKyAgICAg ICAgLyogY2hlY2sgaWYgdGhlIHNsYXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9uICov CisgICAgICAgIGlmIChtYXN0ZXJfc3NobS5wcm90IDwgc3NobS0+cHJvdCkgeworICAgICAgICAg ICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcgdG9vIG11Y2gg cGVybWlzc2lvbi4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2VkLCBk byB0aGUgam9iICovCisgICAgICAgIGlmICghaXNyZXRyeSkgeworICAgICAgICAgICAgcmMgPSBs aWJ4bF9fc3NobV9kb19tYXAoZ2MsIG1hc3Rlcl9kb21pZCwgZG9taWQsIHNzaG0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXJfc3NobS5iZWdpbiwgbWFzdGVyX3Nz aG0uZW5kKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAg ICAgICAvKiB3cml0ZSB0aGUgcmVzdWx0IHRvIHhlbnN0b3JlIGFuZCBjb21taXQgKi8KKyAgICAg ICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJz bGF2ZSIpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICByYyA9IGxpYnhsX194 c193cml0ZXYoZ2MsIHh0LCBzbGF2ZV9wYXRoLCBlbnRzKTsKKyAgICAgICAgaWYgKHJjKSBnb3Rv IG91dDsKKyAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0LCBzc2htX3BhdGgp OworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3Ry YW5zYWN0aW9uX2NvbW1pdChnYywgJnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAg ICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAgICAgICBpc3JldHJ5ID0gdHJ1ZTsKKyAgICB9 CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdj LCAmeHQpOworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fc3NobV9hZGRf bWFzdGVyKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjOwor ICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCwgKmRvbV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAg ICBjaGFyICplbnRzWzEzXTsKKyAgICBzdHJ1Y3QgeHNfcGVybWlzc2lvbnMgbm9wZXJtOworICAg IHhzX3RyYW5zYWN0aW9uX3QgeHQgPSBYQlRfTlVMTDsKKworICAgIHNzaG1fcGF0aCA9IFNTSE1f UEFUSChzc2htLT5pZCk7CisgICAgZG9tX3BhdGggPSBsaWJ4bF9feHNfZ2V0X2RvbXBhdGgoZ2Ms IGRvbWlkKTsKKyAgICAvKiB0aGUgZG9tYWluIHNob3VsZCBiZSBpbiB4ZW5zdG9yZSBieSBub3cg Ki8KKyAgICBhc3NlcnQoZG9tX3BhdGgpOworICAgIGRvbV9yb2xlX3BhdGggPSBHQ1NQUklOVEYo IiVzL3N0YXRpY19zaG0vJXMvcm9sZSIsIGRvbV9wYXRoLCBzc2htLT5pZCk7CisKKyAgICAvKiBw cmVwYXJlIHRoZSB4ZW5zdG9yZSBlbnRyaWVzICovCisgICAgZW50c1swXSA9ICJtYXN0ZXIiOwor ICAgIGVudHNbMV0gPSBHQ1NQUklOVEYoIiUiUFJJdTMyLCBkb21pZCk7CisgICAgZW50c1syXSA9 ICJiZWdpbiI7CisgICAgZW50c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVn aW4pOworICAgIGVudHNbNF0gPSAiZW5kIjsKKyAgICBlbnRzWzVdID0gR0NTUFJJTlRGKCIweCUi UFJJeDY0LCBzc2htLT5lbmQpOworICAgIGVudHNbNl0gPSAicHJvdCI7CisgICAgZW50c1s3XSA9 IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhsX3NzaG1fcHJvdF90b19zdHJpbmcoc3NobS0+cHJvdCkp OworICAgIGVudHNbOF0gPSAiY2FjaGVfcG9saWN5IjsKKyAgICBlbnRzWzldID0gbGlieGxfX3N0 cmR1cChnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zc2htX2NhY2hlcG9s aWN5X3RvX3N0cmluZyhzc2htLT5jYWNoZV9wb2xpY3kpKTsKKyAgICBlbnRzWzEwXSA9ICJ1c2Vy cyI7CisgICAgZW50c1sxMV0gPSAiMSI7CisgICAgZW50c1sxMl0gPSBOVUxMOworCisgICAgLyog Y291bGQgb25seSBiZSBhY2Nlc3NlZCBieSBEb20wICovCisgICAgbm9wZXJtLmlkID0gMDsKKyAg ICBub3Blcm0ucGVybXMgPSBYU19QRVJNX05PTkU7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAg IHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX3N0YXJ0KGdjLCAmeHQpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmICghbGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBzc2ht X3BhdGgpKSB7CisgICAgICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9t YWluIGF0IG1vc3Qgb25jZSAqLworICAgICAgICAgICAgaWYgKGxpYnhsX194c19yZWFkKGdjLCB4 dCwgZG9tX3JvbGVfcGF0aCkpIHsKKyAgICAgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBz c2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb21haW4gdHJpZWQgdG8gbWFw IHRoZSBzYW1lIElEIHR3aWNlLiIpOworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsK KyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJj ID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBkb21fcm9sZV9wYXRoLCAibWFzdGVy Iik7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0OzsKKworICAgICAgICAgICAgbGlieGxf X3hzX21rbm9kKGdjLCB4dCwgc3NobV9wYXRoLCAmbm9wZXJtLCAxKTsKKyAgICAgICAgICAgIGxp YnhsX194c193cml0ZXYoZ2MsIHh0LCBzc2htX3BhdGgsIGVudHMpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJjYW4gb25seSBoYXZl IG9uZSBtYXN0ZXIuIik7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0 aW9uX2NvbW1pdChnYywgJnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlm IChyYyA8IDApIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ4dCk7CisgICAgcmV0dXJuIHJjOworfQorCitp bnQgbGlieGxfX3NzaG1fYWRkKGxpYnhsX19nYyAqZ2MsICB1aW50MzJfdCBkb21pZCwKKyAgICAg ICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMsIGludCBsZW4pCit7CisgICAg aW50IHJjLCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlm IChzc2htc1tpXS5yb2xlID09IExJQlhMX1NTSE1fUk9MRV9TTEFWRSkgeworICAgICAgICAgICAg cmMgPSBsaWJ4bF9fc3NobV9hZGRfc2xhdmUoZ2MsIGRvbWlkLCBzc2htcytpKTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NzaG1fYWRkX21hc3RlcihnYywgZG9t aWQsIHNzaG1zK2kpOworICAgICAgICB9CisgICAgICAgIGlmIChyYykgIHJldHVybiByYzsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1v ZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgYi90b29scy9s aWJ4bC9saWJ4bF94ODYuYwppbmRleCA0NTVmNmYwYmVkLi5iZDc5MmI2ZGE5IDEwMDY0NAotLS0g YS90b29scy9saWJ4bC9saWJ4bF94ODYuYworKysgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwpA QCAtNTg3LDYgKzU4NywyNCBAQCB2b2lkIGxpYnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX2Fj cGlfc2V0ZGVmYXVsdCgKICAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJmJfaW5mby0+YWNw aSwgdHJ1ZSk7CiB9CiAKK2Jvb2wgbGlieGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3NobShjb25z dCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvKQoreworICAgIC8qIEZJWE1FOiBNYXJr IHRoaXMgYXMgdW5zdXBwb3J0ZWQgZm9yIGNhbGxpbmcgcDJtX2FkZF9mb3JlaWduIG9uIHR3bwor ICAgICAqIERvbVUncyBpcyBjdXJyZW50bHkgbm90IGFsbG93ZCBvbiB4ODYsIHNlZSB0aGUgY29t bWVudHMgaW4KKyAgICAgKiB4ODYvbW0vcDJtLmM6IHAybV9hZGRfZm9yZWlnbiAqLworICAgICBy ZXR1cm4gZmFsc2U7Cit9CisKK2ludCBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGlj eV9zZXRkZWZhdWx0KGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaWYgKHNzaG0tPmNh Y2hlX3BvbGljeSA9PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1VOS05PV04pCisgICAgICAgIHNz aG0tPmNhY2hlX3BvbGljeSA9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTDsKKyAg ICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5IDwgTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9S TUFMKQorICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7CisKKyAgICByZXR1cm4gMDsKK30KKwog LyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKLS0gCjIuMTQuMAoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5n IGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1k ZXZlbAo=