From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhongze Liu Subject: [PATCH v4 4/7] libxl: support mapping static shared memory areas during domain creation Date: Wed, 31 Jan 2018 01:50:21 +0800 Message-ID: <20180130175024.26921-5-blackskygg@gmail.com> References: <20180130175024.26921-1-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180130175024.26921-1-blackskygg@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: Ian Jackson , Julien Grall , Stefano Stabellini , Wei Liu , Zhongze Liu List-Id: xen-devel@lists.xenproject.org QWRkIGxpYnhsX19zc2htX2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZyb20gb25lIERvbVUgdG8g YW5vdGhlciwgVGhlIG1hcHBpbmcKcHJvY2VzcyBpbnZvbHZlcyB0aGUgZm9sbHdpbmcgc3RlcHM6 CgogICogU2V0IGRlZmF1bHRzIGFuZCBjaGVjayBmb3IgZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0 YXRpY19zaG0gY29uZmlnczoKICAgIG92ZXJsYXBwaW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywg ZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAogICAgbm90IHBhZ2UgYWxpZ25lZCwgbm8gbWFzdGVy IGRvbWFpbiBldGMuCiAgKiBVc2UgeGNfZG9tYWluX2FkZF90b19waHlzbWFwX2JhdGNoIHRvIGRv IHRoZSBwYWdlIHNoYXJpbmcuCiAgKiBXaGVuIHNvbWUgb2YgdGhlIHBhZ2VzIGNhbid0IGJlIHN1 Y2Nlc3NmdWxseSBtYXBwZWQsIHJvbGwgYmFjayBhbnkKICAgIHN1Y2Nlc3NmdWxseSBtYXBwZWQg cGFnZXMgc28gdGhhdCB0aGUgc3lzdGVtIHN0YXlzIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KICAq IFdyaXRlIGluZm9tYXRpb24gYWJvdXQgc3RhdGljIHNoYXJlZCBtZW1vcnkgYXJlYXMgaW50byB0 aGUgYXBwcm9wcmlhdGUKICAgIHhlbnN0b3JlIHBhdGhzIGFuZCBzZXQgdGhlIHJlZmNvdW50IG9m IHRoZSBzaGFyZWQgcmVnaW9uIGFjY29yZGluZ2x5LgoKVGVtcG9yYXJpbHkgbWFyayB0aGlzIGFz IHVuc3VwcG9ydGVkIG9uIHg4NiBiZWNhdXNlIGNhbGxpbmcgcDJtX2FkZF9mb3JlaWduIG9uCnR3 byBkb21VJ3MgaXMgY3VycmVudGx5IG5vdCBhbGxvd2Qgb24geDg2IChzZWUgdGhlIGNvbW1lbnRz IGluCng4Ni9tbS9wMm0uYzpwMm1fYWRkX2ZvcmVpZ24gZm9yIG1vcmUgZGV0YWlscykuCgpUaGlz IGlzIGZvciB0aGUgcHJvcG9zYWwgIkFsbG93IHNldHRpbmcgdXAgc2hhcmVkIG1lbW9yeSBhcmVh cyBiZXR3ZWVuIFZNcwpmcm9tIHhsIGNvbmZpZyBmaWxlIiAoc2VlIFsxXSkuCgpbMV0gaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTctMDgvbXNnMDMyNDIu aHRtbAoKU2lnbmVkLW9mZi1ieTogWmhvbmd6ZSBMaXUgPGJsYWNrc2t5Z2dAZ21haWwuY29tPgoK Q2M6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmph Y2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3N0YWJlbGxpbmlA a2VybmVsLm9yZz4KQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+CkNjOiB4 ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwotLS0KICBWMzoKICAqIFVubWFwIHRoZSBzdWNjZXNzZnVs bHkgbWFwcGVkIHBhZ2VzIHdoZW5ldmVyIHJjICE9IDAuCgogIFY0OgogICogVXNlIFhFTk1BUFNQ QUNFX2dtZm5fc2hhcmUgaW5zdGVhZCBvZiAqX2dtZm5fZm9yZWlnbi4KLS0tCiB0b29scy9saWJ4 bC9NYWtlZmlsZSAgICAgICAgIHwgICAyICstCiB0b29scy9saWJ4bC9saWJ4bF9hcmNoLmggICAg IHwgICA2ICsKIHRvb2xzL2xpYnhsL2xpYnhsX2FybS5jICAgICAgfCAgMTUgKysKIHRvb2xzL2xp YnhsL2xpYnhsX2NyZWF0ZS5jICAgfCAgMjcgKysrCiB0b29scy9saWJ4bC9saWJ4bF9pbnRlcm5h bC5oIHwgIDE0ICsrCiB0b29scy9saWJ4bC9saWJ4bF9zc2htLmMgICAgIHwgMzk3ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRvb2xzL2xpYnhsL2xpYnhsX3g4 Ni5jICAgICAgfCAgMTkgKysrCiA3IGZpbGVzIGNoYW5nZWQsIDQ3OSBpbnNlcnRpb25zKCspLCAx IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvbGlieGwvbGlieGxfc3NobS5j CgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmls ZQppbmRleCA5MTdjZWIwZTcyLi5lMjgzNGQ4NGRjIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9N YWtlZmlsZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMTM5LDcgKzEzOSw3IEBAIExJ QlhMX09CSlMgPSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2RtLm8g bGlieGxfcGNpLm8gXAogCQkJbGlieGxfZG9tX3N1c3BlbmQubyBsaWJ4bF9kb21fc2F2ZS5vIGxp YnhsX3VzYi5vIFwKIAkJCWxpYnhsX3Z0cG0ubyBsaWJ4bF9uaWMubyBsaWJ4bF9kaXNrLm8gbGli eGxfY29uc29sZS5vIFwKIAkJCWxpYnhsX2NwdXBvb2wubyBsaWJ4bF9tZW0ubyBsaWJ4bF9zY2hl ZC5vIGxpYnhsX3RtZW0ubyBcCi0JCQlsaWJ4bF85cGZzLm8gbGlieGxfZG9tYWluLm8gbGlieGxf dmRpc3BsLm8gXAorCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5v IGxpYnhsX3NzaG0ubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAkKExJQlhMX09CSlMteSkK IExJQlhMX09CSlMgKz0gbGlieGxfZ2VuaWQubwogTElCWExfT0JKUyArPSBfbGlieGxfdHlwZXMu byBsaWJ4bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCmRpZmYgLS1naXQgYS90b29s cy9saWJ4bC9saWJ4bF9hcmNoLmggYi90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKaW5kZXggNzg0 ZWM3ZjYwOS4uMTE0MzNmZTQ2NiAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5o CisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaApAQCAtNzgsNiArNzgsMTIgQEAgaW50IGxp YnhsX19hcmNoX2V4dHJhX21lbW9yeShsaWJ4bF9fZ2MgKmdjLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqaW5mbywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgKm91dCk7CiAKK19oaWRkZW4KK2Jvb2wgbGli eGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5m byAqYl9pbmZvKTsKKworX2hpZGRlbgoraW50IGxpYnhsX19hcmNoX2RvbWFpbl9zc2htX2NhY2hl cG9saWN5X3NldGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAqc3NobSk7CisKICNpZiBkZWZpbmVk KF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCiAKICNkZWZpbmUgTEFQSUNfQkFTRV9B RERSRVNTICAweGZlZTAwMDAwCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9hcm0uYyBi L3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCmluZGV4IDNlNDY1NTQzMDEuLmUxNDg3OWVjMDggMTAw NjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhs X2FybS5jCkBAIC0xMTU0LDYgKzExNTQsMjEgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVp bGRfaW5mb19hY3BpX3NldGRlZmF1bHQoCiAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZi X2luZm8tPmFjcGksIGZhbHNlKTsKIH0KIAorYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9y dF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pCit7CisgICAgcmV0 dXJuIHRydWU7Cit9CisKK2ludCBsaWJ4bF9fYXJjaF9kb21haW5fc3NobV9jYWNoZXBvbGljeV9z ZXRkZWZhdWx0KGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaWYgKHNzaG0tPmNhY2hl X3BvbGljeSA9PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1VOS05PV04pCisgICAgICAgIHNzaG0t PmNhY2hlX3BvbGljeSA9IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfQVJNX05PUk1BTDsKKyAgICBp ZiAoc3NobS0+Y2FjaGVfcG9saWN5ID49IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1B TCkKKyAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8q CiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29scy9saWJ4 bC9saWJ4bF9jcmVhdGUuYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCmluZGV4IGM0OTgx MzUyNDYuLjk4YzE2ODY3YmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5j CisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2NyZWF0ZS5jCkBAIC01MzIsNiArNTMyLDE0IEBAIGlu dCBsaWJ4bF9fZG9tYWluX2J1aWxkKGxpYnhsX19nYyAqZ2MsCiAgICAgICAgIHJldCA9IEVSUk9S X0lOVkFMOwogICAgICAgICBnb3RvIG91dDsKICAgICB9CisKKyAgICAvKiB0aGUgcDJtIGhhcyBi ZWVuIHNldHVwLCB3ZSBjb3VsZCBtYXAgdGhlIHN0YXRpYyBzaGFyZWQgbWVtb3J5IG5vdy4gKi8K KyAgICByZXQgPSBsaWJ4bF9fc3NobV9hZGQoZ2MsIGRvbWlkLCBkX2NvbmZpZy0+c3NobXMsIGRf Y29uZmlnLT5udW1fc3NobXMpOworICAgIGlmIChyZXQgIT0gMCkgeworICAgICAgICBMT0coRVJS T1IsICJmYWlsZWQgdG8gbWFwIHN0YXRpYyBzaGFyZWQgbWVtb3J5Iik7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKwogICAgIHJldCA9IGxpYnhsX19idWlsZF9wb3N0KGdjLCBkb21pZCwgaW5m bywgc3RhdGUsIHZtZW50cywgbG9jYWxlbnRzKTsKIG91dDoKICAgICByZXR1cm4gcmV0OwpAQCAt OTU3LDYgKzk2NSwyNSBAQCBzdGF0aWMgdm9pZCBpbml0aWF0ZV9kb21haW5fY3JlYXRlKGxpYnhs X19lZ2MgKmVnYywKICAgICAgICAgZ290byBlcnJvcl9vdXQ7CiAgICAgfQogCisgICAgaWYgKGRf Y29uZmlnLT5udW1fc3NobXMgIT0gMCAmJgorICAgICAgICAhbGlieGxfX2FyY2hfZG9tYWluX3N1 cHBvcnRfc3NobSgmZF9jb25maWctPmJfaW5mbykpIHsKKyAgICAgICAgTE9HRChFUlJPUiwgZG9t aWQsICJzdGF0aWNfc2htIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBkb21haW4gdHlwZS4iKTsK KyAgICAgICAgcmV0ID0gRVJST1JfSU5WQUw7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAg IH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBkX2NvbmZpZy0+bnVtX3NzaG1zOyArK2kpIHsKKyAg ICAgICAgcmV0ID0gbGlieGxfX3NzaG1fc2V0ZGVmYXVsdChnYywgZG9taWQsICZkX2NvbmZpZy0+ c3NobXNbaV0pOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICBMT0dEKEVSUk9SLCBk b21pZCwgIlVuYWJsZSB0byBzZXQgZGVmYXVsdHMgZm9yIHN0YXRpYyBzaG0iKTsKKyAgICAgICAg ICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0ID0gbGlieGxf X3NzaG1fY2hlY2tfb3ZlcmxhcChnYywgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkX2NvbmZpZy0+c3NobXMsIGRfY29uZmlnLT5udW1fc3NobXMpOworICAgIGlm IChyZXQpIGdvdG8gZXJyb3Jfb3V0OworCiAgICAgcmV0ID0gbGlieGxfX2RvbWFpbl9tYWtlKGdj LCBkX2NvbmZpZywgJmRvbWlkLCAmc3RhdGUtPmNvbmZpZyk7CiAgICAgaWYgKHJldCkgewogICAg ICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImNhbm5vdCBtYWtlIGRvbWFpbjogJWQiLCByZXQpOwpk aWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaCBiL3Rvb2xzL2xpYnhsL2xp YnhsX2ludGVybmFsLmgKaW5kZXggNTA2Njg3ZmJlOS4uMmNmZTRjMDhhNyAxMDA2NDQKLS0tIGEv dG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4bC9saWJ4bF9pbnRl cm5hbC5oCkBAIC00NDE1LDYgKzQ0MTUsMjAgQEAgc3RhdGljIGlubGluZSBib29sIGxpYnhsX19z dHJpbmdfaXNfZGVmYXVsdChjaGFyICoqcykKIH0KICNlbmRpZgogCisvKgorICogU2V0IHVwIHN0 YXRpYyBzaGFyZWQgcmFtIHBhZ2VzIGZvciBIVk0gZG9tYWlucyB0byBjb21tdW5pY2F0ZQorICoK KyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBtZW1vcnkg bWFwIGlzIGNvbnN0cnVjdGVkCisgKiBhbmQgYmVmb3JlIGFueSBmdXJ0aGVyIG1lbW9yeSBhY2Nl c3MuCisgKi8KK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2ht ICpzc2htLCBpbnQgbGVuKTsKKworX2hpZGRlbiBpbnQgbGlieGxfX3NzaG1fY2hlY2tfb3Zlcmxh cChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMsIGludCBsZW4pOworX2hpZGRl biBpbnQgbGlieGxfX3NzaG1fc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21p ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAq c3NobSk7CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQg YS90b29scy9saWJ4bC9saWJ4bF9zc2htLmMgYi90b29scy9saWJ4bC9saWJ4bF9zc2htLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTYyZjQ2ZjI5OQotLS0gL2Rldi9u dWxsCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYwpAQCAtMCwwICsxLDM5NyBAQAorI2lu Y2x1ZGUgImxpYnhsX29zZGVwcy5oIgorI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisjaW5j bHVkZSAibGlieGxfYXJjaC5oIgorCisjZGVmaW5lIFNTSE1fUEFUSChpZCkgR0NTUFJJTlRGKCIv bGlieGwvc3RhdGljX3NobS8lcyIsIGlkKQorCisjZGVmaW5lIFNTSE1fRVJST1IoZG9taWQsIHNz aG1pZCwgZiwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTE9HRChF UlJPUiwgZG9taWQsICJzdGF0aWNfc2htIGlkID0gJXM6ICIgZiwgc3NobWlkLCAjI19fVkFfQVJH U19fKQorCisKKy8qIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbGlieGxfc3RhdGljX3NobSAqLwor aW50IGxpYnhsX19zc2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htKQorewor ICAgIGludCByYzsKKworICAgIGlmIChzc2htLT5yb2xlID09IExJQlhMX1NTSE1fUk9MRV9VTktO T1dOKQorICAgICAgICBzc2htLT5yb2xlID0gTElCWExfU1NITV9ST0xFX1NMQVZFOworICAgIGlm IChzc2htLT5wcm90ID09IExJQlhMX1NTSE1fUFJPVF9VTktOT1dOKQorICAgICAgICBzc2htLT5w cm90ID0gTElCWExfU1NITV9QUk9UX1JXOworCisgICAgLyogcm9sZS1zcGVjaWZpYyBjaGVja3Mg Ki8KKyAgICBpZiAoc3NobS0+cm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfU0xBVkUpIHsKKyAgICAg ICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pCisgICAgICAg ICAgICBzc2htLT5vZmZzZXQgPSAwOworICAgICAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ICE9 IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikgeworICAgICAgICAgICAgU1NITV9FUlJP Uihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAgICAgICAgICAgICAgICJjYWNoZV9wb2xpY3kg aXMgb25seSBhcHBsaWNhYmxlIHRvIG1hc3RlciBkb21haW5zIik7CisgICAgICAgICAgICByYyA9 IEVSUk9SX0lOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9IGVs c2UgeworICAgICAgICBpZiAoc3NobS0+b2Zmc2V0ICE9IExJQlhMX1NTSE1fUkFOR0VfVU5LTk9X TikgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAgICAg ICAgICAgICAgICAgICJvZmZzZXQgaXMgb25seSBhcHBsaWNhYmxlIHRvIHNsYXZlIGRvbWFpbnMi KTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsK KyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVw b2xpY3lfc2V0ZGVmYXVsdChzc2htKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBT U0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhY2hl IHBvbGljeSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKKyAgICAgICAgICAgIGdv dG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworb3V0OgorICAgIHJldHVy biByYzsKK30KKworLyogQ29tcGFyYXRvciBmb3Igc29ydGluZyBzc2htIHJhbmdlcyBieSBzc2ht LT5iZWdpbiAqLworc3RhdGljIGludCBzc2htX3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQoreworICAgIGxpYnhsX3N0YXRpY19zaG0gKmNvbnN0ICpzc2htYSA9IGEsICpj b25zdCAqc3NobWIgPSBiOworICAgIHJldHVybiAoKnNzaG1hKS0+YmVnaW4gPiAoKnNzaG1iKS0+ YmVnaW4gPyAxIDogLTE7Cit9CisKKy8qIGNoZWNrIGlmIHRoZSBzc2htIHNsYXZlIGNvbmZpZ3Mg aW4gQHNzaG0gb3ZlcmxhcCAqLworaW50IGxpYnhsX19zc2htX2NoZWNrX292ZXJsYXAobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobXMsIGludCBsZW4pCit7CisKKyAgICBjb25zdCBs aWJ4bF9zdGF0aWNfc2htICoqc2xhdmVfc3NobXMgPSBOVUxMOworICAgIGludCBudW1fc2xhdmVz OworICAgIGludCBpOworCisgICAgaWYgKCFsZW4pIHJldHVybiAwOworCisgICAgc2xhdmVfc3No bXMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBsZW4sIHNpemVvZihzbGF2ZV9zc2htc1swXSkpOworICAg IG51bV9zbGF2ZXMgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAg ICBpZiAoc3NobXNbaV0ucm9sZSA9PSBMSUJYTF9TU0hNX1JPTEVfU0xBVkUpCisgICAgICAgICAg ICBzbGF2ZV9zc2htc1tudW1fc2xhdmVzKytdID0gc3NobXMgKyBpOworICAgIH0KKyAgICBxc29y dChzbGF2ZV9zc2htcywgbnVtX3NsYXZlcywgc2l6ZW9mKHNsYXZlX3NzaG1zWzBdKSwgc3NobV9y YW5nZV9jbXApOworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV9zbGF2ZXMgLSAxOyArK2kpIHsK KyAgICAgICAgaWYgKHNsYXZlX3NzaG1zW2krMV0tPmJlZ2luIDwgc2xhdmVfc3NobXNbaV0tPmVu ZCkgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc2xhdmVfc3NobXNbaSsxXS0+aWQs ICJzbGF2ZSByYW5nZXMgb3ZlcmxhcC4iKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZB TDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiAgIGxpYnhsX19z c2htX2RvX21hcCAtLSBtYXAgcGFnZXMgaW50byBzbGF2ZSdzIHBoeXNtYXAKKyAqCisgKiAgIFRo aXMgZnVuY3Rpb25zIG1hcHMKKyAqICAgICBtYXN0ZXIgZ2ZuOiBbQG1zc2htLT5iZWdpbiArIEBz c2htLT5vZmZzZXQsIEBtc3NobS0+ZW5kICsgQHNzaG0tPm9mZnNldCkKKyAqICAgaW50bworICog ICAgIHNsYXZlIGdmbjogW0Bzc2htLT5iZWdpbiwgQHNzaG0tPmVuZCkKKyAqCisgKiAgIFRoZSBn Zm5zIG9mIHRoZSBwYWdlcyB0aGF0IGFyZSBzdWNjZXNzZnVsbHkgbWFwcGVkIHdpbGwgYmUgc3Rv cmVkCisgKiAgIGluIEBtYXBwZWQsIGFuZCB0aGUgbnVtYmVyIG9mIHRoZSBnZm5zIHdpbGwgYmUg c3RvcmVkIGluIEBubWFwcGVkLgorICoKKyAqICAgVGhlIGNhbGxlciBoYXZlIHRvIGd1YXJlbnRl ZSB0aGF0IHNzaG0tPmJlZ2luIDwgc3NobS0+ZW5kIGFuZCBhbGwgdGhlCisgKiAgIHZhbHVlcyBh cmUgcGFnZS1hbGlnbmVkLgorICovCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2RvX21hcChsaWJ4 bF9fZ2MgKmdjLCB1aW50MzJfdCBtaWQsIHVpbnQzMl90IHNpZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGxpYnhsX3N0YXRpY19zaG0gKm1z c2htLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICptYXBwZWQsIHVu c2lnbmVkIGludCAqbm1hcHBlZCkKK3sKKyAgICBpbnQgcmM7CisgICAgaW50IGk7CisgICAgdW5z aWduZWQgaW50IG51bV9tcGFnZXMsIG51bV9zcGFnZXMsIG51bV9zdWNjZXNzLCBvZmZzZXQ7Cisg ICAgaW50ICplcnJzOworICAgIHhlbl91bG9uZ190ICppZHhzOworICAgIHhlbl9wZm5fdCAqZ3Bm bnM7CisKKyAgICBudW1fbXBhZ2VzID0gKG1zc2htLT5lbmQgLSBtc3NobS0+YmVnaW4pID4+IFhD X1BBR0VfU0hJRlQ7CisgICAgbnVtX3NwYWdlcyA9IChzc2htLT5lbmQgLSBzc2htLT5iZWdpbikg Pj4gWENfUEFHRV9TSElGVDsKKyAgICBvZmZzZXQgPSBzc2htLT5vZmZzZXQgPj4gWENfUEFHRV9T SElGVDsKKworICAgIC8qIENoZWNrIHJhbmdlLiBUZXN0IG9mZnNldCA8IG1wYWdlcyBmaXJzdCB0 byBhdm9pZCBvdmVyZmxvdyAqLworICAgIGlmICgob2Zmc2V0ID49IG51bV9tcGFnZXMpIHx8IChu dW1fbXBhZ2VzIC0gb2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsKKyAgICAgICAgU1NITV9FUlJPUihz aWQsIHNzaG0tPmlkLCAiZXhjZWVkcyBtYXN0ZXIncyBhZGRyZXNzIHNwYWNlLiIpOworICAgICAg ICByYyA9IEVSUk9SX0lOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBm aWxsIG91dCB0aGUgcGZuJ3MgYW5kIGRvIHRoZSBtYXBwaW5nICovCisgICAgZXJycyA9IGxpYnhs X19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZihpbnQpKTsKKyAgICBpZHhzID0gbGlieGxf X2NhbGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91bG9uZ190KSk7CisgICAgZ3BmbnMg PSBsaWJ4bF9fY2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Bmbl90KSk7CisgICAg Zm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykgeworICAgICAgICBpZHhzW2ldID0gKG1z c2htLT5iZWdpbiA+PiBYQ19QQUdFX1NISUZUKSArIG9mZnNldCArIGk7CisgICAgICAgIGdwZm5z W2ldPSAoc3NobS0+YmVnaW4gPj4gWENfUEFHRV9TSElGVCkgKyBpOworICAgIH0KKyAgICByYyA9 IHhjX2RvbWFpbl9hZGRfdG9fcGh5c21hcF9iYXRjaChDVFgtPnhjaCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQsIG1pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBYRU5NQVBTUEFDRV9nbWZuX3NoYXJlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zcGFnZXMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWR4cywgZ3BmbnMsIGVycnMpOworCisgICAgbnVtX3N1 Y2Nlc3MgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fc3BhZ2VzOyBpKyspIHsKKyAgICAg ICAgaWYgKGVycnNbaV0pIHsKKyAgICAgICAgICAgIFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwK KyAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IG1hcCBhdCBhZGRyZXNzIDB4JSJQUkl4NjQi LiIsCisgICAgICAgICAgICAgICAgICAgICAgIGdwZm5zW2ldIDw8IFhDX1BBR0VfU0hJRlQpOwor ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgbWFwcGVkW251bV9zdWNjZXNzKytdID0gZ3BmbnNbaV07CisgICAgICAgIH0KKyAgICB9Cisg ICAgKm5tYXBwZWQgPSBudW1fc3VjY2VzczsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAg cmMgPSAwOworb3V0OgorICAgIHJldHVybiByYzsKK30KKworc3RhdGljIGludCBsaWJ4bF9fc3No bV9pbmNyZWYobGlieGxfX2djICpnYywgeHNfdHJhbnNhY3Rpb25fdCB4dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCkKK3sKKyAgICBpbnQgcmMs IGNvdW50OworICAgIGNvbnN0IGNoYXIgKmNvdW50X3BhdGgsICpjb3VudF9zdHJpbmc7CisKKyAg ICBjb3VudF9wYXRoID0gR0NTUFJJTlRGKCIlcy91c2VyY250Iiwgc3NobV9wYXRoKTsKKyAgICBy YyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCAmY291bnRfc3Ry aW5nKTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworICAgIGNvdW50ID0gYXRvaShjb3VudF9zdHJp bmcpOworCisgICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIsIGNvdW50KzEpOworICAg IHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBjb3VudF9wYXRoLCBjb3VudF9z dHJpbmcpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICByYyA9IDA7CitvdXQ6CisgICAg cmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGxpYnhsX19zc2htX2FkZF9zbGF2ZShsaWJ4bF9f Z2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnhsX3N0YXRpY19zaG0gKnNzaG0pCit7CisgICAgaW50IHJjLCBpOworICAgIGNvbnN0IGNo YXIgKnNzaG1fcGF0aCwgKnNsYXZlX3BhdGg7CisgICAgY29uc3QgY2hhciAqZG9tX3BhdGgsICpk b21fc3NobV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKKyAgICBjb25zdCBjaGFyICp4c192YWx1ZTsK KyAgICBjaGFyICplbnRzWzldOworICAgIGxpYnhsX3N0YXRpY19zaG0gbWFzdGVyX3NzaG07Cisg ICAgdWludDMyX3QgbWFzdGVyX2RvbWlkOworICAgIHhlbl9wZm5fdCAqbWFwcGVkOworICAgIHVu c2lnbmVkIGludCBubWFwcGVkID0gMDsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJUX05V TEw7CisgICAgYm9vbCBpc3JldHJ5OworCisgICAgc3NobV9wYXRoID0gU1NITV9QQVRIKHNzaG0t PmlkKTsKKyAgICBzbGF2ZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zbGF2ZXMvJSJQUkl1MzIsIHNz aG1fcGF0aCwgZG9taWQpOworICAgIGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdj LCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93 ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsKKyAgICBkb21fc3NobV9wYXRoID0gR0NTUFJJTlRG KCIlcy9zdGF0aWNfc2htLyVzIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKKyAgICBkb21fcm9sZV9w YXRoID0gR0NTUFJJTlRGKCIlcy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7CisKKyAgICAvKiBwcmVw YXJlIHRoZSBzbGF2ZSB4ZW5zdG9yZSBlbnRyaWVzICovCisgICAgZW50c1swXSA9ICJiZWdpbiI7 CisgICAgZW50c1sxXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVnaW4pOworICAg IGVudHNbMl0gPSAiZW5kIjsKKyAgICBlbnRzWzNdID0gR0NTUFJJTlRGKCIweCUiUFJJeDY0LCBz c2htLT5lbmQpOworICAgIGVudHNbNF0gPSAib2Zmc2V0IjsKKyAgICBlbnRzWzVdID0gR0NTUFJJ TlRGKCIweCUiUFJJeDY0LCBzc2htLT5vZmZzZXQpOworICAgIGVudHNbNl0gPSAicHJvdCI7Cisg ICAgZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhsX3NzaG1fcHJvdF90b19zdHJpbmco c3NobS0+cHJvdCkpOworICAgIGVudHNbOF0gPSBOVUxMOworCisgICAgbWFwcGVkID0gbGlieGxf X2NhbGxvYyhnYywgKHNzaG0tPmVuZCAtIHNzaG0tPmJlZ2luKSA+PiBYQ19QQUdFX1NISUZULAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHhlbl9wZm5fdCkpOworCisgICAgaXNy ZXRyeSA9IGZhbHNlOworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJh bnNhY3Rpb25fc3RhcnQoZ2MsICZ4dCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAg ICAgICAgaWYgKCFsaWJ4bF9feHNfcmVhZChnYywgeHQsIHNzaG1fcGF0aCkpIHsKKyAgICAgICAg ICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAibm8gbWFzdGVyIGZvdW5kLiIpOworICAg ICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAg IH0KKworICAgICAgICAvKiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWluIGF0IG1v c3Qgb25jZSAqLworICAgICAgICBpZiAobGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBkb21fc3NobV9w YXRoKSkgeworICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCisgICAgICAg ICAgICAgICAgICAgICAgICJkb21haW4gdHJpZWQgdG8gbWFwIHRoZSBzYW1lIElEIHR3aWNlLiIp OworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBsb29rIGF0IHRoZSBtYXN0ZXIgaW5mbyBhbmQgc2VlIGlm IHdlIGNvdWxkIGRvIHRoZSBtYXBwaW5nICovCisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRf Y2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQ UklOVEYoIiVzL3Byb3QiLCBzc2htX3BhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnhzX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAg bGlieGxfc3NobV9wcm90X2Zyb21fc3RyaW5nKHhzX3ZhbHVlLCAmbWFzdGVyX3NzaG0ucHJvdCk7 CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmVnaW4iLCBzc2htX3Bh dGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnhzX3ZhbHVlKTsKKyAg ICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgbWFzdGVyX3NzaG0uYmVnaW4gPSBzdHJ0 b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRf Y2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQ UklOVEYoIiVzL2VuZCIsIHNzaG1fcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworICAgICAgICBt YXN0ZXJfc3NobS5lbmQgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOworCisgICAgICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21hc3RlciIsIHNzaG1fcGF0aCksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICBtYXN0ZXJfZG9taWQgPSBzdHJ0b3VsbCh4c192YWx1ZSwg TlVMTCwgMTYpOworCisgICAgICAgIGlmIChzc2htLT5wcm90ID09IExJQlhMX1NTSE1fUFJPVF9V TktOT1dOKQorICAgICAgICAgICAgc3NobS0+cHJvdCA9IG1hc3Rlcl9zc2htLnByb3Q7CisKKyAg ICAgICAgLyogY2hlY2sgaWYgdGhlIHNsYXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9u ICovCisgICAgICAgIGlmIChtYXN0ZXJfc3NobS5wcm90IDwgc3NobS0+cHJvdCkgeworICAgICAg ICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcgdG9vIG11 Y2ggcGVybWlzc2lvbi4iKTsKKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAg ICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2Vk LCBkbyB0aGUgam9iICovCisgICAgICAgIGlmICghaXNyZXRyeSkgeworICAgICAgICAgICAgcmMg PSBsaWJ4bF9fc3NobV9kb19tYXAoZ2MsIG1hc3Rlcl9kb21pZCwgZG9taWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzc2htLCAmbWFzdGVyX3NzaG0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwZWQsICZubWFwcGVkKTsKKyAgICAgICAgICAg IGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiB3cml0ZSB0aGUgcmVz dWx0IHRvIHhlbnN0b3JlIGFuZCBjb21taXQgKi8KKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3Jp dGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJzbGF2ZSIpOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICByYyA9IGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBzbGF2 ZV9wYXRoLCBlbnRzKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKyAgICAgICAgcmMgPSBs aWJ4bF9fc3NobV9pbmNyZWYoZ2MsIHh0LCBzc2htX3BhdGgpOworICAgICAgICBpZiAocmMpIGdv dG8gb3V0OworCisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywg Jnh0KTsKKyAgICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8g b3V0OworICAgICAgICBpc3JldHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICByYyA9IDA7CitvdXQ6 CisgICAgaWYgKHJjKSB7CisgICAgICAgIC8qIHJvbGwgYmFjayBzdWNjZXNzZnVsbHkgbWFwcGVk IHBhZ2VzICovCisgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAiZmFpbGVkIHRv IG1hcCBzb21lIHBhZ2VzLCBjYW5jZWxsaW5nLiIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bm1hcHBlZDsgaSsrKSB7CisgICAgICAgICAgICB4Y19kb21haW5fcmVtb3ZlX2Zyb21fcGh5c21h cChDVFgtPnhjaCwgZG9taWQsIG1hcHBlZFtpXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBs aWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ4dCk7CisKKyAgICByZXR1cm4gcmM7Cit9 CisKK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fYWRkX21hc3RlcihsaWJ4bF9fZ2MgKmdjLCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0 aWNfc2htICpzc2htKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpzc2htX3BhdGgs ICpkb21fcGF0aCwgKmRvbV9yb2xlX3BhdGg7CisgICAgY2hhciAqZW50c1sxM107CisgICAgc3Ry dWN0IHhzX3Blcm1pc3Npb25zIG5vcGVybTsKKyAgICB4c190cmFuc2FjdGlvbl90IHh0ID0gWEJU X05VTEw7CisKKyAgICBzc2htX3BhdGggPSBTU0hNX1BBVEgoc3NobS0+aWQpOworICAgIGRvbV9w YXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7CisgICAgLyogdGhlIGRvbWFp biBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCisgICAgYXNzZXJ0KGRvbV9wYXRoKTsK KyAgICBkb21fcm9sZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNfc2htLyVzL3JvbGUiLCBk b21fcGF0aCwgc3NobS0+aWQpOworCisgICAgLyogcHJlcGFyZSB0aGUgeGVuc3RvcmUgZW50cmll cyAqLworICAgIGVudHNbMF0gPSAibWFzdGVyIjsKKyAgICBlbnRzWzFdID0gR0NTUFJJTlRGKCIl IlBSSXUzMiwgZG9taWQpOworICAgIGVudHNbMl0gPSAiYmVnaW4iOworICAgIGVudHNbM10gPSBH Q1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmJlZ2luKTsKKyAgICBlbnRzWzRdID0gImVuZCI7 CisgICAgZW50c1s1XSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+ZW5kKTsKKyAgICBl bnRzWzZdID0gInByb3QiOworICAgIGVudHNbN10gPSBsaWJ4bF9fc3RyZHVwKGdjLCBsaWJ4bF9z c2htX3Byb3RfdG9fc3RyaW5nKHNzaG0tPnByb3QpKTsKKyAgICBlbnRzWzhdID0gImNhY2hlX3Bv bGljeSI7CisgICAgZW50c1s5XSA9IGxpYnhsX19zdHJkdXAoZ2MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfc3NobV9jYWNoZXBvbGljeV90b19zdHJpbmcoc3NobS0+Y2FjaGVf cG9saWN5KSk7CisgICAgZW50c1sxMF0gPSAidXNlcmNudCI7CisgICAgZW50c1sxMV0gPSAiMSI7 CisgICAgZW50c1sxMl0gPSBOVUxMOworCisgICAgLyogY291bGQgb25seSBiZSBhY2Nlc3NlZCBi eSBEb20wICovCisgICAgbm9wZXJtLmlkID0gMDsKKyAgICBub3Blcm0ucGVybXMgPSBYU19QRVJN X05PTkU7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0 aW9uX3N0YXJ0KGdjLCAmeHQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAg IGlmICghbGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBzc2htX3BhdGgpKSB7CisgICAgICAgICAgICAv KiBldmVyeSBJRCBjYW4gYXBwZWFyIGluIGVhY2ggZG9tYWluIGF0IG1vc3Qgb25jZSAqLworICAg ICAgICAgICAgaWYgKGxpYnhsX194c19yZWFkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCkpIHsKKyAg ICAgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICJkb21haW4gdHJpZWQgdG8gbWFwIHRoZSBzYW1lIElEIHR3aWNlLiIpOwor ICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNr ZWQoZ2MsIHh0LCBkb21fcm9sZV9wYXRoLCAibWFzdGVyIik7CisgICAgICAgICAgICBpZiAocmMp IGdvdG8gb3V0OzsKKworICAgICAgICAgICAgbGlieGxfX3hzX21rbm9kKGdjLCB4dCwgc3NobV9w YXRoLCAmbm9wZXJtLCAxKTsKKyAgICAgICAgICAgIGxpYnhsX194c193cml0ZXYoZ2MsIHh0LCBz c2htX3BhdGgsIGVudHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU1NITV9FUlJP Uihkb21pZCwgc3NobS0+aWQsICJjYW4gb25seSBoYXZlIG9uZSBtYXN0ZXIuIik7CisgICAgICAg ICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQor CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnh0KTsKKyAg ICAgICAgaWYgKCFyYykgYnJlYWs7CisgICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0gMDsKK291dDoKKyAgICBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQo Z2MsICZ4dCk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfX3NzaG1fYWRkKGxpYnhs X19nYyAqZ2MsICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgbGlieGxfc3Rh dGljX3NobSAqc3NobXMsIGludCBsZW4pCit7CisgICAgaW50IHJjLCBpOworCisgICAgZm9yIChp ID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgIGlmIChzc2htc1tpXS5yb2xlID09IExJQlhM X1NTSE1fUk9MRV9TTEFWRSkgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc3NobV9hZGRfc2xh dmUoZ2MsIGRvbWlkLCBzc2htcytpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJj ID0gbGlieGxfX3NzaG1fYWRkX21hc3RlcihnYywgZG9taWQsIHNzaG1zK2kpOworICAgICAgICB9 CisgICAgICAgIGlmIChyYykgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K KworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0 OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvbGlieGxfeDg2LmMgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwppbmRleCA1 ZjkxZmU0ZjkyLi44ZWM1MDQ0ZWIyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF94ODYu YworKysgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwpAQCAtNTk2LDYgKzU5NiwyNSBAQCB2b2lk IGxpYnhsX19hcmNoX2RvbWFpbl9idWlsZF9pbmZvX2FjcGlfc2V0ZGVmYXVsdCgKICAgICBsaWJ4 bF9kZWZib29sX3NldGRlZmF1bHQoJmJfaW5mby0+YWNwaSwgdHJ1ZSk7CiB9CiAKK2Jvb2wgbGli eGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5m byAqYl9pbmZvKQoreworICAgIC8qIEZJWE1FOiBNYXJrIHRoaXMgYXMgdW5zdXBwb3J0ZWQgZm9y IGNhbGxpbmcgcDJtX2FkZF9mb3JlaWduIG9uIHR3bworICAgICAqIERvbVUncyBpcyBjdXJyZW50 bHkgbm90IGFsbG93ZCBvbiB4ODYsIHNlZSB0aGUgY29tbWVudHMgaW4KKyAgICAgKiB4ODYvbW0v cDJtLmM6IHAybV9hZGRfZm9yZWlnbi4KKyAgICAgKi8KKyAgICAgcmV0dXJuIGZhbHNlOworfQor CitpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChsaWJ4 bF9zdGF0aWNfc2htICpzc2htKQoreworICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgPT0gTElC WExfU1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQorICAgICAgICBzc2htLT5jYWNoZV9wb2xpY3kg PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUw7CisgICAgaWYgKHNzaG0tPmNhY2hl X3BvbGljeSA8IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2X05PUk1BTCkKKyAgICAgICAgcmV0 dXJuIEVSUk9SX0lOVkFMOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBMb2NhbCB2YXJp YWJsZXM6CiAgKiBtb2RlOiBDCi0tIAoyLjE2LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs