From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id B1BF389780 for ; Mon, 30 Dec 2019 09:10:06 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 30 Dec 2019 11:07:34 +0200 Message-Id: <20191230090734.23996-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] tools: Add an intel_dbuf_map tool List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: martin.peres@intel.com, juha-pekka.heikkila@intel.com List-ID: QXMgaW4gbW9kZXJuIHBsYXRmb3JtcyBtb3JlIERpc3BsYXkgYnVmZmVyCnNsaWNlcy9waXBlcyBh cmUgY29taW5nLCB3aGljaCBoYXZlIGRpZmZlcmVudApwaXBlIGFmZmluaXRpZXMgYW5kIG90aGVy IGNvbnN0cmFpbnRzLCBzbyBCU3BlYwpjb250YWlucyB0aGVpciBjb25uZWN0aW9uIGluIGZvcm0g b2YgYSBHcmFwaC4KClNvIHdlIGNhbiBnZW5lcmF0ZSBvcHRpbWFsIERCdWYgYXNzaWdubWVudCwK ZnJvbSB0aGUgZ3JhcGggd2hpY2ggd2UgaGF2ZSBpbiBCU3BlYywgdG8gYXZvaWQKbWFudWFsIGNh bGN1bGF0aW9ucyBwcm9uZSB0byBodW1hbiBlcnJvciBhbmQKY29weS1wYXN0aW5nLiBUaGUgZ2Vu ZXJhdGVkIHRhYmxlIGlzIGluIEMgZm9ybQphbmQgY2FuIGJlIHVzZWQgaW4gaTkxNSBkcml2ZXIg cmlnaHRhd2F5IGFuZCBhbHNvCmZvciB2ZXJpZmljYXRpb24uCgp2MjogUmVtb3ZlZCB1bnVzZWQg aSwgaiwgbWFkZSBzb21lIGZ1bmN0aW9ucyBzdGF0aWMsCiAgICB0byBtYWtlIENJIGNoZWNrZXJz IGEgYml0IGhhcHBpZXIuIEFsc28gaGFkIHRvCiAgICBjaGFuZ2UgSUdUX0xJU1QgdG8gSUdUX0xJ U1RfSEVBRCBhbmQgb3RoZXIgc3R1ZmYsCiAgICBhcyBmdW5jdGlvbnMgc2VlbSB0byBiZSByZW5h bWVkIGluIGxhdGVzdCBtYXN0ZXIuCgp2MzogQWRkZWQgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAi LS1ncmFwaCIgYW5kCiAgICAic2xpY2VzX3Blcl9waXBlIiB3aGljaCBhbGxvdyB0byBkZWZpbmUg YW5kCiAgICBnZXQgREJ1ZiBhc3NpZ25tZW50IGZyb20gZ3JhcGggd2l0aG91dCByZWNvbXBpbGlu ZwogICAgdGhlIHRvb2wsIGJ1dCByaWdodCBhd2F5LgogICAgRXhhbXBsZSB1c2FnZToKICAgIGlu dGVsX2RidWZfbWFwIC0tZ3JhcGggUElQRV9BLURCVUZfUzEtREJVRl9TMi1QSVBFX0ItUElQRV9D IC0tc2xpY2VzX3Blcl9waXBlIDIKCiAgICBHZW5lcmF0ZXMgb3V0cHV0OgogICAgR3JhcGg6CiAg ICBUeXBlIFBJUEUgaWQgMAogICAgICAgICgxKS0+CiAgICAgICAgICAgICBUeXBlIERCVUZfU0xJ Q0UgaWQgMAogICAgICAgICAgICAgICAgKDEpLT4KICAgICAgICAgICAgICAgICAgICBUeXBlIERC VUZfU0xJQ0UgaWQgMQogICAgICAgICAgICAgICAgICAgICAgICAoMSktPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgVHlwZSBQSVBFIGlkIDEKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoMSktPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIFBJUEUg aWQgMgogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21iaW5hdGlv bnMgMSk6CiAgICB7IEJJVChQSVBFX0EpLCB7IERCVUZfUzFfQklUIHwgREJVRl9TMl9CSVQsIDAs IDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMyh0b3RhbCBjb21i aW5hdGlvbnMgMSk6CiAgICB7IEJJVChQSVBFX0IpLCB7IDAsIERCVUZfUzJfQklUIHwgREJVRl9T MV9CSVQsIDAsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgMih0b3Rh bCBjb21iaW5hdGlvbnMgMik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQiksIHsgREJV Rl9TMV9CSVQsIERCVUZfUzJfQklULCAwLCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdpdGggbGVh c3Qgd2VpZ2h0IDUodG90YWwgY29tYmluYXRpb25zIDEpOgogICAgeyBCSVQoUElQRV9DKSwgeyAw LCAwLCBEQlVGX1MyX0JJVCB8IERCVUZfUzFfQklULCAwIH0gfSwKICAgIENvbWJpbmF0aW9uIHdp dGggbGVhc3Qgd2VpZ2h0IDModG90YWwgY29tYmluYXRpb25zIDIpOgogICAgeyBCSVQoUElQRV9B KSB8IEJJVChQSVBFX0MpLCB7IERCVUZfUzFfQklULCAwLCBEQlVGX1MyX0JJVCwgMCB9IH0sCiAg ICBDb21iaW5hdGlvbiB3aXRoIGxlYXN0IHdlaWdodCA0KHRvdGFsIGNvbWJpbmF0aW9ucyAyKToK ICAgIHsgQklUKFBJUEVfQikgfCBCSVQoUElQRV9DKSwgeyAwLCBEQlVGX1MyX0JJVCwgREJVRl9T MV9CSVQsIDAgfSB9LAogICAgQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgNCh0b3RhbCBj b21iaW5hdGlvbnMgNik6CiAgICB7IEJJVChQSVBFX0EpIHwgQklUKFBJUEVfQikgfCBCSVQoUElQ RV9DKSwgeyBEQlVGX1MxX0JJVCwgREJVRl9TMl9CSVQsIERCVUZfUzJfQklULCAwIH0gfSwKCnY0 OiAtIE1pbm9yIHJlZmFjdG9yaW5nLCBzaW1wbGlmaWVkIGFsZ29yaXRobSwgcmVtb3ZlZCByZWR1 bmRhbnQgbGlzdAogICAgICB1c2FnZQogICAgLSBGaXhlZCB0aXRsZQogICAgLSBBZGRlZCBkZWJ1 ZyBvcHRpb24KICAgIC0gUmVtb3ZlZCB1bm5lZWRlZCBBUlJBWV9TSVpFIGRlZmluaXRpb24sIHdo aWNoIGFscmVhZHkgZXhpc3RzCiAgICAgIChKdWhhLVBla2thIEhlaWtraWzDpCkKCnY1OiAtIFN3 aXRjaGVkIHRvIG5hbWVkIHBpcGUgYXJyYXkgaW5pdGlhbGl6YXRpb24sIHRvIG1hdGNoIGN1cnJl bnQKICAgICAga2VybmVsIGNvZGUuCiAgICAtIE1pbm9yIGNvZGUgcmVmYWN0b3JpbmcuCgpTaWdu ZWQtb2ZmLWJ5OiBTdGFuaXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVs LmNvbT4KQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+ Ci0tLQogdG9vbHMvaW50ZWxfZGJ1Zl9tYXAuYyB8IDg4NCArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAyIGZp bGVzIGNoYW5nZWQsIDg4NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMv aW50ZWxfZGJ1Zl9tYXAuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2RidWZfbWFwLmMgYi90 b29scy9pbnRlbF9kYnVmX21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw Li5hYzQyZjYwOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2ludGVsX2RidWZfbWFwLmMKQEAg LTAsMCArMSw4ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlv bgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0 byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFz c29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVh bCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBp bmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICog U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g IElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9S IFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBB dXRob3JzOgorICogICAgU3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBp bnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJpZ3Qu aCIKKworZW51bSBOb2RlVHlwZSB7CisJREJVRl9TTElDRSwKKwlQSVBFCit9OworCitjb25zdCBj aGFyICpub2RlX3R5cGVfdG9fc3RyW10gPSB7ICJEQlVGX1NMSUNFIiwgIlBJUEUiIH07CisKKyNk ZWZpbmUgTUFYX0NPTk5FQ1RJT05TIDEwCisjZGVmaW5lIE1BWF9OT0RFUyAxMAorI2RlZmluZSBN QVhfRURHRVMgKE1BWF9OT0RFUyAqIDIpCisKK3N0cnVjdCBHcmFwaEVkZ2U7CisKKy8qCisgKiBH cmFwaCBub2RlLCB3aGljaCBjYW4gYmUgREJ1ZiBvciBQaXBlCisgKi8KK3N0cnVjdCBHcmFwaE5v ZGUgeworCWludCBpZDsKKwllbnVtIE5vZGVUeXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHVzZV9j b3VudDsKKwlpbnQgdmlzaXRlZDsKKwlzdHJ1Y3QgR3JhcGhFZGdlICpjb25uZWN0aW9uc1tNQVhf Q09OTkVDVElPTlNdOworCWludCBudW1fY29ubmVjdGlvbnM7Cit9OworCitzdGF0aWMgc3RydWN0 IEdyYXBoTm9kZSAqYWxsX25vZGVzW01BWF9OT0RFU107CitzdGF0aWMgc3RydWN0IEdyYXBoRWRn ZSAqYWxsX2VkZ2VzW01BWF9FREdFU107CitzdGF0aWMgaW50IG51bV9ub2RlczsKK3N0YXRpYyBp bnQgbnVtX2VkZ2VzOworCisvKgorICogR3JhcGggZWRnZSwgd2hpY2ggY29ubmVjdHMgR3JhcGgg bm9kZXMKKyAqIGFuZCBoYXMgYSB3ZWlnaHQgcHJvcGVydHkuCisgKi8KK3N0cnVjdCBHcmFwaEVk Z2UgeworCXVuc2lnbmVkIGludCB3ZWlnaHQ7CisJc3RydWN0IEdyYXBoTm9kZSAqbm9kZTsKK307 CisKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhOb2RlICpjcmVhdGVfZ3JhcGhfbm9kZShlbnVtIE5vZGVU eXBlIHR5cGUsIGludCBpZCkKK3sKKwlzdHJ1Y3QgR3JhcGhOb2RlICpub2RlID0gMDsKKworCWlm IChudW1fbm9kZXMgPj0gTUFYX05PREVTKSB7CisJCWlndF9pbmZvKCJUb28gbXVjaCBub2RlcyAl ZCIsIG51bV9ub2Rlcyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW5vZGUgPSBtYWxsb2Moc2l6 ZW9mKHN0cnVjdCBHcmFwaE5vZGUpKTsKKwlub2RlLT50eXBlID0gdHlwZTsKKwlub2RlLT5pZCA9 IGlkOworCW5vZGUtPnVzZV9jb3VudCA9IDA7CisJbm9kZS0+dmlzaXRlZCA9IDA7CisJbWVtc2V0 KG5vZGUtPmNvbm5lY3Rpb25zLCAwLAorCQkJTUFYX0NPTk5FQ1RJT05TICogc2l6ZW9mKHN0cnVj dCBHcmFwaEVkZ2UgKikpOworCW5vZGUtPm51bV9jb25uZWN0aW9ucyA9IDA7CisKKwlhbGxfbm9k ZXNbbnVtX25vZGVzXSA9IG5vZGU7CisJbnVtX25vZGVzKys7CisKKwlyZXR1cm4gbm9kZTsKK30K Kworc3RhdGljIHN0cnVjdCBHcmFwaEVkZ2UgKmNyZWF0ZV9ncmFwaF9lZGdlKGludCB3ZWlnaHQs IHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUpCit7CisJc3RydWN0IEdyYXBoRWRnZSAqZWRnZSA9IDA7 CisKKwlpZiAobnVtX2VkZ2VzID49IE1BWF9FREdFUykgeworCQlpZ3RfaW5mbygiVG9vIG11Y2gg ZWRnZXMgJWQiLCBudW1fZWRnZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllZGdlID0gbWFs bG9jKHNpemVvZihzdHJ1Y3QgR3JhcGhFZGdlKSk7CisKKwllZGdlLT5ub2RlID0gbm9kZTsKKwll ZGdlLT53ZWlnaHQgPSB3ZWlnaHQ7CisKKwlhbGxfZWRnZXNbbnVtX2VkZ2VzXSA9IGVkZ2U7CisJ bnVtX2VkZ2VzKys7CisKKwlyZXR1cm4gZWRnZTsKK30KKworc3RhdGljIHZvaWQgY29ubmVjdF9u b2RlcyhzdHJ1Y3QgR3JhcGhOb2RlICpub2RlMSwgc3RydWN0IEdyYXBoTm9kZSAqbm9kZTIsIGlu dCB3ZWlnaHQpCit7CisJc3RydWN0IEdyYXBoRWRnZSAqZWRnZTE7CisJc3RydWN0IEdyYXBoRWRn ZSAqZWRnZTI7CisKKwlpZiAobm9kZTEtPm51bV9jb25uZWN0aW9ucyA+PSBNQVhfQ09OTkVDVElP TlMpIHsKKwkJaWd0X2luZm8oIk5vZGUgJWQgaGFzIHRvbyBtdWNoIGNvbm5lY3Rpb25zXG4iLCBu b2RlMS0+aWQpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5vZGUyLT5udW1fY29ubmVjdGlvbnMg Pj0gTUFYX0NPTk5FQ1RJT05TKSB7CisJCWlndF9pbmZvKCJOb2RlICVkIGhhcyB0b28gbXVjaCBj b25uZWN0aW9uc1xuIiwgbm9kZTItPmlkKTsKKwkJcmV0dXJuOworCX0KKworCWVkZ2UxID0gY3Jl YXRlX2dyYXBoX2VkZ2Uod2VpZ2h0LCBub2RlMSk7CisJZWRnZTIgPSBjcmVhdGVfZ3JhcGhfZWRn ZSh3ZWlnaHQsIG5vZGUyKTsKKworCW5vZGUxLT5jb25uZWN0aW9uc1tub2RlMS0+bnVtX2Nvbm5l Y3Rpb25zXSA9IGVkZ2UyOworCW5vZGUxLT5udW1fY29ubmVjdGlvbnMrKzsKKwlub2RlMi0+Y29u bmVjdGlvbnNbbm9kZTItPm51bV9jb25uZWN0aW9uc10gPSBlZGdlMTsKKwlub2RlMi0+bnVtX2Nv bm5lY3Rpb25zKys7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X25vZGUoc3RydWN0IEdyYXBoTm9k ZSAqbm9kZSkKK3sKKwlub2RlLT51c2VfY291bnQgPSAwOworCW5vZGUtPnZpc2l0ZWQgPSAwOwor CW1lbXNldChub2RlLT5jb25uZWN0aW9ucywgMCwKKwkJTUFYX0NPTk5FQ1RJT05TICogc2l6ZW9m KHN0cnVjdCBHcmFwaEVkZ2UgKikpOworCW5vZGUtPm51bV9jb25uZWN0aW9ucyA9IDA7Cit9CisK K3N0YXRpYyB2b2lkIGRlc3Ryb3lfbm9kZShzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQoreworCWZy ZWUobm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZWRnZShzdHJ1Y3QgR3JhcGhFZGdl ICplZGdlKQoreworCWZyZWUoZWRnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX2Vk Z2VzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VkZ2VzOyBpKysp IHsKKwkJZGVzdHJveV9lZGdlKGFsbF9lZGdlc1tpXSk7CisJfQorCW51bV9lZGdlcyA9IDA7Cit9 CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX25vZGVzKHZvaWQpCit7CisJaW50IGk7CisKKwlm b3IgKGkgPSAwOyBpIDwgbnVtX25vZGVzOyBpKyspIHsKKwkJZGVzdHJveV9ub2RlKGFsbF9ub2Rl c1tpXSk7CisJfQorCW51bV9ub2RlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2FsbF9u b2Rlcyh2b2lkKQoreworCWludCBpOworCisJZGVzdHJveV9hbGxfZWRnZXMoKTsKKworCWZvciAo aSA9IDA7IGkgPCBudW1fbm9kZXM7IGkrKykgeworCQlyZXNldF9ub2RlKGFsbF9ub2Rlc1tpXSk7 CisJfQorfQorCisvKgorICogVHJhdmVyc2UgYW5kIHRyeSB0byBwcmludCBncmFwaCBpbiBhCisg KiBzb21ld2hhdCBncmFwaGljYWwgZm9ybS4KKyAqLworc3RhdGljIHZvaWQgdHJhdmVyc2VfZ3Jh cGgoc3RydWN0IEdyYXBoTm9kZSAqc3RhcnRfbm9kZSwKKwkJCSAgIGludCBkZXB0aCkKK3sKKwlp bnQgaSwgc3BhY2U7CisKKwlpZiAoIWRlcHRoKQorCQlpZ3RfaW5mbygiR3JhcGg6IFxuIik7CisK Kwlmb3IgKHNwYWNlID0gMDsgc3BhY2UgPCBkZXB0aCAqIDQ7IHNwYWNlKyspCisJCWlndF9pbmZv KCIgIik7CisKKwlzdGFydF9ub2RlLT52aXNpdGVkKys7CisJaWd0X2luZm8oIlR5cGUgJXMgaWQg JWRcbiIsIG5vZGVfdHlwZV90b19zdHJbc3RhcnRfbm9kZS0+dHlwZV0sCisJCSBzdGFydF9ub2Rl LT5pZCk7CisJZm9yIChpID0gMDsgaSA8IHN0YXJ0X25vZGUtPm51bV9jb25uZWN0aW9uczsgaSsr KSB7CisJCWlmICghc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV0tPm5vZGUtPnZpc2l0ZWQpIHsK KwkJCWZvciAoc3BhY2UgPSAwOyBzcGFjZSA8IChkZXB0aCArIDEpICogNDsgc3BhY2UrKykKKwkJ CQlpZ3RfaW5mbygiICIpOworCQkJaWd0X2luZm8oIiglZCktPiBcbiIsIHN0YXJ0X25vZGUtPmNv bm5lY3Rpb25zW2ldLT53ZWlnaHQpOworCQkJdHJhdmVyc2VfZ3JhcGgoc3RhcnRfbm9kZS0+Y29u bmVjdGlvbnNbaV0tPm5vZGUsIGRlcHRoKzIpOworCQkJc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNb aV0tPm5vZGUtPnZpc2l0ZWQtLTsKKwkJfQorCX0KK30KKworYm9vbCBkZWJ1ZyA9IGZhbHNlOwor CitzdGF0aWMgdm9pZCBwcmludF9ub2RlX2RlYnVnKHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUpCit7 CisJaWd0X2luZm8oIiVzIG5vZGUgJWQgdmlzaXRlZCAlZCB1c2UgY291bnQgJWRcbiIsCisJCSBu b2RlX3R5cGVfdG9fc3RyW25vZGUtPnR5cGVdLCBub2RlLT5pZCwKKwkJIG5vZGUtPnZpc2l0ZWQs CisJCSBub2RlLT51c2VfY291bnQpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiByZWN1cnNp dmVseSBzZWFyY2hlcyBmb3IgYSBmcmVlIERCdWYgc2xpY2UKKyAqIGZvciBjb3JyZXNwb25kZW50 IHBpcGUsIGJhc2VkIG9uIGRpZmZlcmVudCBjb25zdHJhaW50cywgbGlrZQorICogd2VpZ2h0LCB1 c2FnZSBjb3VudC4gVGhpcyBhbGdvcml0aG0gaXMgImdyZWVkeSIgd2hpY2ggbWVhbnMKKyAqIHRo YXQgaXQgYWNjb3VudHMgZm9yIGxvY2FsIG9wdGltdW0gb25seSwgd2hpY2ggbWVhbnMgdGhhdAor ICogdG90YWwgY29tcGFyaXNvbiBoYXMgdG8gYmUgZG9uZSBpbiB0aGUgZW5kLgorICogSW4gZ3Jh cGggdGhlb3J5IHRoaXMgaXMgY2FsbGVkIGJyZWFkdGgtZmlyc3Qgc2VhcmNoLgorICogQXMgdGhp cyBhbGdvcml0aG0gdHJpZXMgdG8gdXRpbGl6ZSBuZWFyZXN0IG5laWdoYm91cnMgZmlyc3QKKyAq IGl0IGFsbG93cyB0byBza2lwIG1hbnkgdW5yZXF1aXJlZCBwYXRoIGNhbGN1bGF0aW9ucyB3aGlj aAorICogd291bGQgYmUgbmVlZGVkIGlmIHdlIHJlYWxseSB3b3VsZCBidWlsZCBhIG1hdHJpeCBs aWtlOgorICogICBQaXBlIC0gREJVRgorICogICAgICAgICAwICAgIDEKKyAqICAgMCAgICAgMSAg ICAyCisgKgorICogICAxICAgICAyICAgIDEKKyAqIFRoZW4gd2Ugd291bGQgaGF2ZSB0byBnbyB0 aG91cmdoIGFsbCBOIERidWYgKiBOIFBpcGVzICogTiBQaXBlcyEKKyAqIHRvIGNoZWNrIGFsbCBw b3NzaWJsZSBwaXBlIGFjY29tb2RhdGlvbnMuCisgKiBGb3IgYWJvdmUgbWF0cml4IHRoZSBhbGdv cml0aG0gd291bGQgaW1tZWRpYXRlbHkgcmV0dXJuIHNsaWNlIDAKKyAqIGZvciBwaXBlIDAgYW5k IHNsaWNlIDEgZm9yIHBpcGUgMSBhcyBuZWFyZXN0IG5laWdoYm91cnMsIHNraXBwaW5nCisgKiB1 bm5lY2Nlc3NhcnkgcGF0aHMgZm9yIHBpcGUwIC0gc2xpY2UxLCBwaXBlMSAtIHNsaWNlMC4KKyAq IEFueXdheSBmb3IgbW9yZSBjb21wbGV4IGNhc2VzLCBsaWtlOgorICogIFBpcGUgLSBEQlVGCisg KiAgICAgICAgIDAgICAgMQorICogICAwICAgICAxICAgIDEKKyAqCisgKiAgIDEgICAgIDIgICAg MQorICogY2hlY2tpbmcgZm9yIGFsbCBwb3NzaWJsZSBhY2NvbW9kYXRpb25zIGlzIHN0aWxsIG5l ZWRlZC4gSG93ZXZlcgorICogbmVhcmVzdCAiZ3JlZWR5IiBhcHByb2FjaCBmaXJzdCBzdGlsbCBh bGxvd3MgdG8gZmlsdGVyIG91dCBzb21lIG9mCisgKiB0aGUgcmVkdW5kYW50IGNvbWJpbmF0aW9u cywgd2hpY2ggd291bGQgYmUgc2VlbiBpZiBmdWxsIG1hdHJpeCBpcyBidWlsdC4KKyAqIEluc3Rl YWQgd2Ugc2F2ZSB0aW1lIGJ5IGp1c3QgY2hvb3NpbmcgdGhlIG5lYXJlc3Qgb25lcyBmaXJzdCB3 aGljaAorICogYXJlIGV4cGVjdGVkIHRvIGhhdmUgbG93ZXIgY29zdChncmVlZHkgYXBwcm9hY2gp LCBob3dldmVyIHRoZW4KKyAqIHdlIHdpbGwgc3RpbGwgY2hlY2sgYWxsIHBvc3NpYmxlIGFjY29t b2RhdGlvbnMgYXMgd2Ugd291bGQgZG8gd2l0aAorICogZnVsbCBtYXRyaXggYXBwcm9hY2guCisg Ki8KK3N0YXRpYyBzdHJ1Y3QgR3JhcGhOb2RlICpmaW5kX3NsaWNlX2Zvcl9waXBlKHN0cnVjdCBH cmFwaE5vZGUgKnN0YXJ0X25vZGUsCisJCQkJCSAgICAgaW50IGFjY193ZWlnaHQsIGludCBtYXhf dXNlX2NvdW50LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCAqdG90YWxfd2VpZ2h0LAorCQkJCQkg ICAgIGludCBkZXB0aCwKKwkJCQkJICAgICBpbnQgKnNraXApCit7CisJaW50IGk7CisJc3RydWN0 IEdyYXBoTm9kZSAqbm9kZSA9IE5VTEw7CisKKwlpZiAoZGVidWcpIHsKKwkJaWd0X2luZm8oIkVu dGVyaW5nIG5vZGUocmVzdXJzaW9uIGRlcHRoICVkIHNraXBzICVkKTogXG4iLAorCQkJIGRlcHRo LCAqc2tpcCk7CisJCXByaW50X25vZGVfZGVidWcoc3RhcnRfbm9kZSk7CisJCWlndF9pbmZvKCJB Y2N1bXVsYXRlZCB3ZWlnaHQgJWQgbWF4IHVzZSBjb3VudCAlZFxuIiwKKwkJCSBhY2Nfd2VpZ2h0 LCBtYXhfdXNlX2NvdW50KTsKKwl9CisKKwlzdGFydF9ub2RlLT52aXNpdGVkKys7CisKKwkvKgor CSAqIEl0ZXJhdGUgdGhyb3VnaCBuZWlnaGJvdXJpbmcgc2xpY2VzKGdyYXBoIGJyZWFkdGgtZmly c3Qgc2VhcmNoKSwKKwkgKiBjaGVja2luZyBpZiBpdCdzIHVzZSBjb3VudCBhbGxvd3MgdXNhZ2Ug YW5kIHNraXAgaWYgbmVlZGVkLAorCSAqIHNraXBzIGFyZSBuZWVkZWQgd2hlbiB3ZSB1c2UgbXVs dGlwbGUgc2xpY2VzIGZvcgorCSAqIHNhbWUgcGlwZSB0byBwcmV2ZW50IGFsZ29yaXRobSBmcm9t IHJldHVybmluZyB0aGUKKwkgKiBzYW1lIERCdWYuCisJICovCisJZm9yIChpID0gMDsgaSA8IHN0 YXJ0X25vZGUtPm51bV9jb25uZWN0aW9uczsgaSsrKSB7CisJCXN0cnVjdCBHcmFwaEVkZ2UgKmN1 cl9lZGdlID0gc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV07CisKKwkJaWYgKGRlYnVnKSB7CisJ CQlpZ3RfaW5mbygiICAgIE5laWdoYm91ciBub2RlOiAiKTsKKwkJCXByaW50X25vZGVfZGVidWco Y3VyX2VkZ2UtPm5vZGUpOworCQl9CisKKwkJaWYgKGN1cl9lZGdlLT5ub2RlLT50eXBlICE9IERC VUZfU0xJQ0UpCisJCQljb250aW51ZTsKKworCQlpZiAoY3VyX2VkZ2UtPm5vZGUtPnVzZV9jb3Vu dCA8IG1heF91c2VfY291bnQpIHsKKwkJCWlmICghKCpza2lwKSkgeworCQkJCWN1cl9lZGdlLT5u b2RlLT51c2VfY291bnQrKzsKKwkJCQkqdG90YWxfd2VpZ2h0ID0gYWNjX3dlaWdodCArIGN1cl9l ZGdlLT53ZWlnaHQ7CisJCQkJbm9kZSA9IGN1cl9lZGdlLT5ub2RlOworCQkJCWdvdG8gb3V0Owor CQkJfQorCQl9CisKKwkJaWYgKCpza2lwKQorCQkJKCpza2lwKS0tOworCX0KKworCS8qCisJICog SWYgY291bGRuJ3QgZmluZCBzdWl0YWJsZSBEQnVmIG5vZGUgZnJvbSBvdXIKKwkgKiBuZWlnaGJv dXJzLCBoYXZlIHRvIGNvbnRpbnVlIGZ1cnRoZXIsIGNoZWNraW5nCisJICogdmlzaXRlZCBmbGFn LCB0byBwcmV2ZW50IGxvb3BzLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBzdGFydF9ub2RlLT5u dW1fY29ubmVjdGlvbnM7IGkrKykgeworCQlzdHJ1Y3QgR3JhcGhFZGdlICpjdXJfZWRnZSA9IHN0 YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldOworCisJCWlmIChjdXJfZWRnZS0+bm9kZS0+dmlzaXRl ZCkKKwkJCWNvbnRpbnVlOworCisJCW5vZGUgPSBmaW5kX3NsaWNlX2Zvcl9waXBlKGN1cl9lZGdl LT5ub2RlLAorCQkJCQkgICBhY2Nfd2VpZ2h0ICsgY3VyX2VkZ2UtPndlaWdodCwKKwkJCQkJICAg bWF4X3VzZV9jb3VudCwgdG90YWxfd2VpZ2h0LAorCQkJCQkgICBkZXB0aCArIDEsIHNraXApOwor CQljdXJfZWRnZS0+bm9kZS0+dmlzaXRlZC0tOworCQlpZiAobm9kZSkKKwkJCWdvdG8gb3V0Owor CX0KKworb3V0OgorCWlmIChkZWJ1ZykKKwkJaWd0X2luZm8oIkxlYXZpbmcgbm9kZSAlZFxuIiwg c3RhcnRfbm9kZS0+aWQpOworCisJLyogSWYgd2UgYXJlIGF0IHJlY3Vyc2lvbiBkZXB0aCAwIC0g cmVsZWFzZSB0aGUgcm9vdCBub2RlICovCisJaWYgKGRlcHRoID09IDApCisJCXN0YXJ0X25vZGUt PnZpc2l0ZWQgPSAwOworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBpbnQgaHdlaWdodDMy KGludCBtYXNrKQoreworCWludCBpOworCWludCBjb3VudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBp IDwgMzI7IGkrKykKKwkJaWYgKCgxPDxpKSAmIG1hc2spCisJCQljb3VudCArPSAxOworCXJldHVy biBjb3VudDsKK30KKworI2RlZmluZSBJOTE1X01BWF9QSVBFUyA0CisjZGVmaW5lIEk5MTVfTUFY X1NMSUNFU19QRVJfUElQRSA0CisjZGVmaW5lIEk5MTVfTUFYX1NMSUNFUyAoSTkxNV9NQVhfUElQ RVMgKiBJOTE1X01BWF9TTElDRVNfUEVSX1BJUEUpCisKK2NvbnN0IGNoYXIgKnBpcGVfbmFtZXNb XSA9IHsgIlBJUEVfQSIsICJQSVBFX0IiLCAiUElQRV9DIiwgIlBJUEVfRCIgfTsKK2NvbnN0IGNo YXIgKnNsaWNlX25hbWVzW10gPSB7ICJEQlVGX1MxIiwgIkRCVUZfUzIiLCAiREJVRl9TMyIsICJE QlVGX1M0IiB9OworCitzdGF0aWMgaW50IGZhY3RvcmlhbChpbnQgbikKK3sKKwlpZiAobiA8PSAx KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbiAqIGZhY3RvcmlhbChuIC0gMSk7Cit9CisKK3N0YXRp YyB2b2lkIGRvX3N3YXAoc3RydWN0IEdyYXBoTm9kZSAqKnBpcGVfbm9kZXMsIGludCBtLCBpbnQg bikKK3sKKwlzdHJ1Y3QgR3JhcGhOb2RlICpub2RlMSA9IHBpcGVfbm9kZXNbbV07CisJc3RydWN0 IEdyYXBoTm9kZSAqbm9kZTIgPSBwaXBlX25vZGVzW25dOworCXVuc2lnbmVkIGxvbmcgbm9kZV92 YWwxID0gKHVuc2lnbmVkIGxvbmcpIG5vZGUxOworCXVuc2lnbmVkIGxvbmcgbm9kZV92YWwyID0g KHVuc2lnbmVkIGxvbmcpIG5vZGUyOworCisJbm9kZV92YWwxIF49IG5vZGVfdmFsMjsKKwlub2Rl X3ZhbDIgXj0gbm9kZV92YWwxOworCW5vZGVfdmFsMSBePSBub2RlX3ZhbDI7CisKKwlub2RlMSA9 IChzdHJ1Y3QgR3JhcGhOb2RlICopbm9kZV92YWwxOworCW5vZGUyID0gKHN0cnVjdCBHcmFwaE5v ZGUgKilub2RlX3ZhbDI7Cit9CisKK3N0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiB7CisJdW5z aWduZWQgaW50IHRvdGFsX3dlaWdodDsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlX25vZGVzW0k5 MTVfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpzbGljZXNbSTkxNV9NQVhfU0xJQ0VT XTsKK307CisKK3N0cnVjdCBJdGVyYXRlQ29udGV4dCB7CisJc3RydWN0IFBpcGVOb2Rlc0NvbWJp bmF0aW9uIG1pbl9jb21iOworCWludCBtYXhfdXNlX2NvdW50OworCWludCBudW1fcGlwZXM7CisJ aW50IG51bV9zbGljZXM7CisJaW50IHNsaWNlc19wZXJfcGlwZTsKKwlpbnQgbWF4X2NvbWJpbmF0 aW9uczsKK307CisKK3N0cnVjdCBQaXBlREJ1ZiB7CisJc3RydWN0IEdyYXBoTm9kZSAqcGlwZTsK KwlzdHJ1Y3QgR3JhcGhOb2RlICpkYnVmW0k5MTVfTUFYX1NMSUNFU19QRVJfUElQRV07Cit9Owor CitzdGF0aWMgdm9pZCBwcmludF9waXBlX25vZGVzKHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlX25v ZGVzKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7 CisJCWlmICghcGlwZV9ub2Rlc1tpXSkKKwkJCWlndF9pbmZvKCIobnVsbCkiKTsKKwkJZWxzZQor CQkJaWd0X2luZm8oIiVkIiwgcGlwZV9ub2Rlc1tpXS0+aWQpOworCQlpZiAoIGkgPCAoSTkxNV9N QVhfUElQRVMgLSAxKSkKKwkJCWlndF9pbmZvKCIgLCIpOworCX0KKwlpZ3RfaW5mbygiXG4iKTsK K30KKworCitzdGF0aWMgdm9pZCBjb21wYXJlX3dlaWdodChzdHJ1Y3QgSXRlcmF0ZUNvbnRleHQg KmN0eCwKKwkJCSAgIHN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiAqY29tYikKK3sKKwl1bnNp Z25lZCBpbnQgd2VpZ2h0OworCWludCBqID0gMDsKKwlpbnQgcGlwZSA9IDA7CisJaW50IHNraXAg PSAwOworCWludCBzbGljZV9udW0gPSAwOworCisJY29tYi0+dG90YWxfd2VpZ2h0ID0gMDsKKwor CWlmIChkZWJ1ZykgeworCQlpZ3RfaW5mbygiQ29tYmluYXRpb246ICIpOworCQlwcmludF9waXBl X25vZGVzKGNvbWItPnBpcGVfbm9kZXMpOworCX0KKworCS8qCisJICogR2V0IGEgZnJlZSBEQnVm IHNsaWNlIGZvciBlYWNoIHBpcGUsIHRoZW4KKwkgKiBjYWxjdWxhdGUgdG90YWwgd2VpZ2h0LCB3 aGljaCB3aWxsIGJlCisJICogdGhlbiBjb21wYXJlZCB0byBtaW5pbWFsIHdlaWdodCB0byBmaW5k CisJICogY29tYmluYXRpb24gd2l0aCB0b3RhbCBtaW5pbWFsIHdlaWdodC4KKwkgKi8KKwl3aGls ZSAocGlwZSA8IEk5MTVfTUFYX1BJUEVTKSB7CisJCWlmIChjb21iLT5waXBlX25vZGVzW3BpcGVd KSB7CisJCQlzbGljZV9udW0gPSAwOworCQkJc2tpcCA9IDA7CisJCQl3aGlsZSAoc2xpY2VfbnVt IDwgY3R4LT5zbGljZXNfcGVyX3BpcGUpIHsKKwkJCQlza2lwID0gc2xpY2VfbnVtOworCQkJCWNv bWItPnNsaWNlc1tqXSA9CisJCQkJICAgIGZpbmRfc2xpY2VfZm9yX3BpcGUoY29tYi0+cGlwZV9u b2Rlc1twaXBlXSwKKwkJCQkJCTAsIGN0eC0+bWF4X3VzZV9jb3VudCwKKwkJCQkJCSZ3ZWlnaHQs IDAsICZza2lwKTsKKwkJCQlpZiAoIWNvbWItPnNsaWNlc1tqXSkKKwkJCQkJYnJlYWs7CisJCQkJ c2xpY2VfbnVtKys7CisJCQkJaisrOworCQkJCWNvbWItPnRvdGFsX3dlaWdodCArPSB3ZWlnaHQ7 CisJCQl9CisJCX0gZWxzZSB7CisJCQlqICs9IGN0eC0+c2xpY2VzX3Blcl9waXBlOworCQl9CisJ CXBpcGUrKzsKKwl9CisKKwlpZiAoZGVidWcpCisJCWlndF9pbmZvKCJUb3RhbCB3ZWlnaHQgJWRc biIsIGNvbWItPnRvdGFsX3dlaWdodCk7CisKKwlmb3IgKGogPSAwOyBqIDwgSTkxNV9NQVhfU0xJ Q0VTOyBqKyspIHsKKwkJaWYgKGNvbWItPnNsaWNlc1tqXSkKKwkJCWNvbWItPnNsaWNlc1tqXS0+ dXNlX2NvdW50ID0gMDsKKwl9CisKKwlpZiAoY3R4LT5taW5fY29tYi50b3RhbF93ZWlnaHQgPiBj b21iLT50b3RhbF93ZWlnaHQpIHsKKwkJbWVtY3B5KCZjdHgtPm1pbl9jb21iLCBjb21iLAorCQkg ICAgICAgc2l6ZW9mKHN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbikpOworCX0KK30KKworLyoK KyAqIEdlbmVyYXRlIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgZm9yIGVsZW1lbnRzIGluCisg KiBwaXBlIGFycmF5KHRvdGFsIGlzIGNhbGN1bGF0ZWQgYXMgbiEpLgorICovCitzdGF0aWMgdm9p ZCBpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoc3RydWN0IEl0ZXJhdGVDb250ZXh0ICpjdHgsCisJ CQkJICAgICBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCQkgICAgIGludCBzdGFy dCwgaW50IHN0ZXAsCisJCQkJICAgICB2b2lkICgqZnVuYykoc3RydWN0IEl0ZXJhdGVDb250ZXh0 ICpjdHgsCisJCQkJICAgICBzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24gKmNvbWIpKQorewor CWludCBpLCBqOworCXN0cnVjdCBHcmFwaE5vZGUgKm5vZGVzW0k5MTVfTUFYX1BJUEVTXTsKKwlz dHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24gY29tYjsKKworCW1lbWNweShjb21iLnBpcGVfbm9k ZXMsIHBpcGVfbm9kZXMsCisJICAgICAgIEk5MTVfTUFYX1BJUEVTICogc2l6ZW9mKHN0cnVjdCBH cmFwaE5vZGUgKikpOworCW1lbXNldChjb21iLnNsaWNlcywgMCwKKwkgICAgICAgSTkxNV9NQVhf U0xJQ0VTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCisJaWYgKGZ1bmMpCisJCSgq ZnVuYykoY3R4LCAmY29tYik7CisKKwlpZiAoKHN0ZXAgPT0gMCkgfHwgKGN0eC0+bnVtX3BpcGVz ID09IDEpKQorCQlyZXR1cm47CisKKwlmb3IgKGogPSBzdGVwOyBqID4gMDsgai0tKSB7CisJCWZv ciAoaSA9IHN0YXJ0OyBpIDwgSTkxNV9NQVhfUElQRVMgLSBqOyBpKyspIHsKKwkJCWlmICghcGlw ZV9ub2Rlc1tpXSB8fCAhcGlwZV9ub2Rlc1tpICsgal0pCisJCQkJY29udGludWU7CisJCQltZW1j cHkobm9kZXMsIHBpcGVfbm9kZXMsCisJCQkgICAgICAgSTkxNV9NQVhfUElQRVMgKiBzaXplb2Yo c3RydWN0IEdyYXBoTm9kZSAqKSk7CisJCQlkb19zd2FwKG5vZGVzLCBpLCBpICsgaik7CisJCQlp dGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoY3R4LCBub2RlcywgaSArIDEsCisJCQkJCQkgc3RlcCAt IDEsIGZ1bmMpOworCQl9CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVz IGFuZCBwcmludHMgb3B0aW1hbAorICogd2VpZ2h0LWJhc2VkIERCdWYgYXNzaWdubWVudCBmb3Ig YWN0aXZlIHBpcGVzLgorICovCitzdGF0aWMgaW50CitwcmludF9kYnVmX21hc2tfZm9yX3BpcGVz KGludCBhY3RpdmVfcGlwZXMsCisJCQkgIHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlX25vZGVzLAor CQkJICBpbnQgbnVtX3NsaWNlcykKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX3BpcGVzID0gaHdlaWdo dDMyKGFjdGl2ZV9waXBlcyksIHBpcGVzX2NvdW50OworCWludCBtYXhfdXNlX2NvdW50ID0gbnVt X3NsaWNlcyA8IG51bV9waXBlcyA/IDIgOiAxOworCWludCBwaXBlID0gMDsKKwlpbnQgc2xpY2Vz X3Blcl9waXBlID0gbWF4KG51bV9zbGljZXMgLyBudW1fcGlwZXMsIDEpOworCXN0cnVjdCBJdGVy YXRlQ29udGV4dCBjdHg7CisJc3RydWN0IFBpcGVEQnVmIHBpcGVfZGJ1ZltJOTE1X01BWF9QSVBF U107CisKKwltZW1jcHkoY3R4Lm1pbl9jb21iLnBpcGVfbm9kZXMsIHBpcGVfbm9kZXMsCisJICAg ICAgIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopICogSTkxNV9NQVhfUElQRVMpOworCW1lbXNl dChjdHgubWluX2NvbWIuc2xpY2VzLCAwLAorCSAgICAgICBJOTE1X01BWF9TTElDRVMgKiBzaXpl b2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisJY3R4Lm1pbl9jb21iLnRvdGFsX3dlaWdodCA9IH4w OworCWN0eC5tYXhfdXNlX2NvdW50ID0gbWF4X3VzZV9jb3VudDsKKwljdHgubnVtX3BpcGVzID0g bnVtX3BpcGVzOworCWN0eC5udW1fc2xpY2VzID0gbnVtX3NsaWNlczsKKwljdHguc2xpY2VzX3Bl cl9waXBlID0gc2xpY2VzX3Blcl9waXBlOworCWN0eC5tYXhfY29tYmluYXRpb25zID0gZmFjdG9y aWFsKG51bV9waXBlcyk7CisKKwlpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoJmN0eCwgcGlwZV9u b2RlcywKKwkJCQkgMCwgSTkxNV9NQVhfUElQRVMgLSAxLCBjb21wYXJlX3dlaWdodCk7CisKKwlp ZiAoZGVidWcpCisJCWlndF9pbmZvKCJDb21iaW5hdGlvbiB3aXRoIGxlYXN0IHdlaWdodCAlZCh0 b3RhbCBjb21iaW5hdGlvbnMgJWQpOlxuIiwKKwkJICAgICAgICAgY3R4Lm1pbl9jb21iLnRvdGFs X3dlaWdodCwgY3R4Lm1heF9jb21iaW5hdGlvbnMpOworCisJbWVtc2V0KHBpcGVfZGJ1ZiwgMCwg c2l6ZW9mKHN0cnVjdCBQaXBlREJ1ZikgKiBJOTE1X01BWF9QSVBFUyk7CisKKwlmb3IgKGkgPSAw OyBpIDwgSTkxNV9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoY3R4Lm1pbl9jb21iLnBpcGVfbm9k ZXNbaV0pIHsKKwkJCWludCBwaXBlX2luZGV4ID0gY3R4Lm1pbl9jb21iLnBpcGVfbm9kZXNbaV0t PmlkOworCisJCQlwaXBlX2RidWZbcGlwZV9pbmRleF0ucGlwZSA9IGN0eC5taW5fY29tYi5waXBl X25vZGVzW2ldOworCQkJbWVtY3B5KCZwaXBlX2RidWZbcGlwZV9pbmRleF0uZGJ1ZiwKKwkJCSAg ICAgICAmY3R4Lm1pbl9jb21iLnNsaWNlc1tpICogc2xpY2VzX3Blcl9waXBlXSwKKwkJCSAgICAg ICBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSAqIHNsaWNlc19wZXJfcGlwZSk7CisJCX0KKwl9 CisKKwlpZ3RfaW5mbygiXHRcdHtcbiIpOworCXBpcGUgPSAwOworCWlndF9pbmZvKCJcdFx0XHRc dC5hY3RpdmVfcGlwZXMgPSAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9NQVhfUElQRVM7IGkr KykgeworCQlpZiAocGlwZV9kYnVmW2ldLnBpcGUpIHsKKwkJCWlndF9pbmZvKCJCSVQoJXMpIiwg cGlwZV9uYW1lc1twaXBlX2RidWZbaV0ucGlwZS0+aWRdKTsKKwkJCWlmIChwaXBlIDwgKG51bV9w aXBlcyAtIDEpKQorCQkJCWlndF9pbmZvKCIgfCAiKTsKKwkJCXBpcGUrKzsKKwkJfQorCX0KKwlp Z3RfaW5mbygiLFxuXHRcdFx0XHR7XG4iKTsKKwludW1fcGlwZXMgPSAwOworCWZvciAocGlwZSA9 IDA7IHBpcGUgPCBJOTE1X01BWF9QSVBFUzsgcGlwZSsrKQorCQlpZiAocGlwZV9kYnVmW3BpcGVd LnBpcGUpCisJCQludW1fcGlwZXMrKzsKKworCXBpcGVzX2NvdW50ID0gMDsKKwlmb3IgKHBpcGUg PSAwOyBwaXBlIDwgSTkxNV9NQVhfUElQRVM7IHBpcGUrKykgeworCQlpZiAocGlwZV9kYnVmW3Bp cGVdLnBpcGUpIHsKKwkJCWlndF9pbmZvKCJcdFx0XHRcdFx0XHRbJXNdID0gIiwgcGlwZV9uYW1l c1twaXBlX2RidWZbcGlwZV0ucGlwZS0+aWRdKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzbGljZXNf cGVyX3BpcGU7IGkrKykgeworCQkJCWludCBzbGljZV9pbmRleF9jb252ZXJ0ZWQ7CisJCQkJc3Ry dWN0IEdyYXBoTm9kZSAqbmV4dF9zbGljZSA9CisJCQkJCQlwaXBlX2RidWZbcGlwZV0uZGJ1Zltp KzFdOworCQkJCWJvb2wgbm90X2xhc3QgPSBpIDwgKHNsaWNlc19wZXJfcGlwZSAtIDEpOworCisJ CQkJaWYgKCFwaXBlX2RidWZbcGlwZV0uZGJ1ZltpXSkKKwkJCQkJYnJlYWs7CisKKwkJCQlzbGlj ZV9pbmRleF9jb252ZXJ0ZWQgPQorCQkJCQlwaXBlX2RidWZbcGlwZV0uZGJ1ZltpXS0+aWQ7CisK KwkJCQlpZiAobm90X2xhc3QgJiYgbmV4dF9zbGljZSkgeworCQkJCQlpZ3RfaW5mbygiQklUKERC VUZfUyVkKSB8ICIsCisJCQkJCQkgc2xpY2VfaW5kZXhfY29udmVydGVkICsgMSk7CisJCQkJfSBl bHNlIHsKKwkJCQkJaWd0X2luZm8oIkJJVChEQlVGX1MlZCkiLAorCQkJCQkJIHNsaWNlX2luZGV4 X2NvbnZlcnRlZCArIDEpOworCQkJCX0KKwkJCQlwaXBlc19jb3VudCsrOworCQkJfQorCQkJaWYg KHBpcGVzX2NvdW50IDwgbnVtX3BpcGVzKSB7CisJCQkJCWlndF9pbmZvKCIsXG4iKTsKKwkJCX0K KwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZ3RfaW5mbygiXG5cdFx0XHRcdH1cblx0 XHR9LFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdGFibGUoc3Ry dWN0IEdyYXBoTm9kZSAqKnBpcGVzLCBpbnQgbnVtX3BpcGVzLAorCQkJc3RydWN0IEdyYXBoTm9k ZSAqKnNsaWNlcywgaW50IG51bV9zbGljZXMsCisJCQlpbnQgc2xpY2VzX3Blcl9waXBlKQorewor CXVuc2lnbmVkIGludCBpLCBqOworCWludCBudW1fY29tYmluYXRpb25zID0gMSA8PCBudW1fcGlw ZXM7CisKKwlpZiAobnVtX3BpcGVzID4gSTkxNV9NQVhfUElQRVMpIHsKKwkJaWd0X2luZm8oIlRv byBtYW55IHBpcGVzICVkXG4iLCBudW1fcGlwZXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKG51 bV9zbGljZXMgPiBJOTE1X01BWF9TTElDRVMpIHsKKwkJaWd0X2luZm8oIlRvbyBtYW55IHNsaWNl cyAlZFxuIiwgbnVtX3NsaWNlcyk7CisJCXJldHVybjsKKwl9CisKKwlpZ3RfaW5mbygiLyogQXV0 b2dlbmVyYXRlZCB3aXRoIGlndC90b29scy9pbnRlbF9kYnVmX21hcCB0b29sOiAqL1xuIik7CisJ aWd0X2luZm8oIntcbiIpOworCWZvciAoaSA9IDE7IGkgPCBudW1fY29tYmluYXRpb25zOyBpKysp IHsKKwkJc3RydWN0IEdyYXBoTm9kZSAqdG1wW0k5MTVfTUFYX1BJUEVTXTsKKworCQltZW1jcHko dG1wLCBwaXBlcywgSTkxNV9NQVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7 CisKKwkJZm9yIChqID0gMDsgaiA8IEk5MTVfTUFYX1NMSUNFUzsgaisrKSB7CisJCQlpZiAoc2xp Y2VzW2pdKQorCQkJCXNsaWNlc1tqXS0+dXNlX2NvdW50ID0gMDsKKwkJfQorCisJCWZvciAoaiA9 IDA7IGogPCBJOTE1X01BWF9QSVBFUzsgaisrKSB7CisJCQlpZiAoIShpICYgKDEgPDwgaikpKSB7 CisJCQkJdG1wW2pdID0gMDsKKwkJCX0KKwkJfQorCisJCWlmIChwcmludF9kYnVmX21hc2tfZm9y X3BpcGVzKGksIHRtcCwgbnVtX3NsaWNlcykpCisJCQlicmVhazsKKwl9CisJaWd0X2luZm8oIn07 XG4iKTsKK30KKworZW51bSBvcHQgeworCU9QVF9VTktOT1dOID0gJz8nLAorCU9QVF9FTkQgPSAt MSwKKwlPUFRfR0VOLAorCU9QVF9VU0FHRSwKKwlPUFRfR1JBUEgsCisJT1BUX0RFQlVHLAorCU9Q VF9TTElDRVNfUEVSX1BJUEUKK307CisKK3N0YXRpYyB2b2lkIHVzYWdlKGNvbnN0IGNoYXIgKnRv b2xuYW1lKQoreworCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIiwgdG9vbG5hbWUpOworCWZw cmludGYoc3RkZXJyLCAiIFstLWdlbj08R0VOPl0iCisJCQkiIFstLXNsaWNlc19wZXJfcGlwZT08 bnVtYmVyPl0iCisJCQkiIFstLWdyYXBoPVwiUElQRV9BLURCVUZfUzEtUElQRV9CLS4uLlwiXSIK KwkJCSIgWy0tZGVidWddIgorCQkJIiBbLS1oZWxwXVxuIik7Cit9CisKK3N0YXRpYyBpbnQgcGlw ZV9zdHJfdG9fbnVtKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHBpcGVfbmFtZXMpOyBpKyspIHsKKwkJaWYgKCFzdHJjbXAoc3RyLCBw aXBlX25hbWVzW2ldKSkgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQor CitzdGF0aWMgaW50IGRidWZfc3RyX3RvX251bShjb25zdCBjaGFyICpzdHIpCit7CisJaW50IGk7 CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzbGljZV9uYW1lcyk7IGkrKykgeworCQlp ZiAoIXN0cmNtcChzdHIsIHNsaWNlX25hbWVzW2ldKSkgeworCQkJcmV0dXJuIGk7CisJCX0KKwl9 CisJcmV0dXJuIC0xOworfQorCisjZGVmaW5lIE1BWF9HUkFQSF9TVFIgODAKKworc3RhdGljIHZv aWQgcGFyc2VfZ3JhcGhfc3RyKGNoYXIgKmdyYXBoX3N0ciwgc3RydWN0IEdyYXBoTm9kZSAqKnBp cGVzLAorCQkJICAgIHN0cnVjdCBHcmFwaE5vZGUgKipzbGljZXMsIGludCAqbnVtX3NsaWNlcywK KwkJCSAgICBpbnQgKm51bV9waXBlcykKK3sKKwljaGFyKiB0b2tlbiA9IHN0cnRvayhncmFwaF9z dHIsICItIik7CisJc3RydWN0IEdyYXBoTm9kZSAqY3VyX25vZGUgPSBOVUxMLCAqbGFzdF9ub2Rl ID0gTlVMTDsKKwlpbnQgbl9waXBlcyA9IDAsIG5fc2xpY2VzID0gMDsKKworCXdoaWxlICh0b2tl biAhPSBOVUxMKSB7CisJCWludCBpbmRleDsKKworCQlpbmRleCA9IHBpcGVfc3RyX3RvX251bSh0 b2tlbik7CisKKwkJbGFzdF9ub2RlID0gY3VyX25vZGU7CisJCWlmIChpbmRleCA+PSAwKSB7CisJ CQljdXJfbm9kZSA9IHBpcGVzW2luZGV4XTsKKwkJCW5fcGlwZXMrKzsKKwkJfSBlbHNlIHsKKwkJ CWluZGV4ID0gZGJ1Zl9zdHJfdG9fbnVtKHRva2VuKTsKKwkJCWlmIChpbmRleCA+PSAwKSB7CisJ CQkJY3VyX25vZGUgPSBzbGljZXNbaW5kZXhdOworCQkJCW5fc2xpY2VzKys7CisJCQl9CisJCX0K KwkJaWYgKGxhc3Rfbm9kZSAmJiBjdXJfbm9kZSkKKwkJCWNvbm5lY3Rfbm9kZXMobGFzdF9ub2Rl LCBjdXJfbm9kZSwgMSk7CisKKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIi0iKTsKKwl9CisJKm51 bV9zbGljZXMgPSBuX3NsaWNlczsKKwkqbnVtX3BpcGVzID0gbl9waXBlczsKK30KKworaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0cnVjdCBHcmFwaE5vZGUgKnBpcGVzW0k5 MTVfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpzbGljZXNbSTkxNV9NQVhfU0xJQ0VT XTsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlQSwgKnBpcGVCLCAqcGlwZUMsICpwaXBlRDsKKwlz dHJ1Y3QgR3JhcGhOb2RlICpzbGljZTEsICpzbGljZTIsICpzbGljZTMsICpzbGljZTQ7CisJaW50 IGdlbiA9IDEyLCBpbmRleDsKKwllbnVtIG9wdCBvcHQ7CisJY2hhciAqZW5kcDsKKwljaGFyIGdy YXBoX3N0cltNQVhfR1JBUEhfU1RSXTsKKwlpbnQgc2xpY2VzX3Blcl9waXBlID0gSTkxNV9NQVhf U0xJQ0VTX1BFUl9QSVBFOworCWNvbnN0IGNoYXIgKnRvb2xuYW1lID0gYXJndlswXTsKKwlzdGF0 aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgImdlbiIsCQlyZXF1aXJlZF9hcmd1 bWVudCwJTlVMTCwJT1BUX0dFTiB9LAorCQl7ICJncmFwaCIsCQlyZXF1aXJlZF9hcmd1bWVudCwJ TlVMTCwJT1BUX0dSQVBIIH0sCisJCXsgInNsaWNlc19wZXJfcGlwZSIsCXJlcXVpcmVkX2FyZ3Vt ZW50LAlOVUxMLAlPUFRfU0xJQ0VTX1BFUl9QSVBFIH0sCisJCXsgImhlbHAiLAkJbm9fYXJndW1l bnQsCQlOVUxMLAlPUFRfVVNBR0UgfSwKKwkJeyAiZGVidWciLAkJbm9fYXJndW1lbnQsCQlOVUxM LAlPUFRfREVCVUcgfSwKKwkJeyAwIH0KKwl9OworCisJbnVtX2VkZ2VzID0gMDsKKwludW1fbm9k ZXMgPSAwOworCisJZm9yIChvcHQgPSAwOyBvcHQgIT0gT1BUX0VORDsgKSB7CisJCW9wdCA9IGdl dG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25zLCAmaW5kZXgpOworCisJCXN3aXRjaCAo b3B0KSB7CisJCWNhc2UgT1BUX0dFTjoKKwkJCWdlbiA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcCwg MCk7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfU0xJQ0VTX1BFUl9QSVBFOgorCQkJc2xpY2VzX3Bl cl9waXBlID0gbWluKHN0cnRvdWwob3B0YXJnLCAmZW5kcCwgMCksCisJCQkJCSAgICAgIEk5MTVf TUFYX1NMSUNFU19QRVJfUElQRSk7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfREVCVUc6CisJCQlk ZWJ1ZyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBPUFRfR1JBUEg6CisJCQlzdHJuY3B5KGdy YXBoX3N0ciwgb3B0YXJnLCBNQVhfR1JBUEhfU1RSKTsKKwkJCWdyYXBoX3N0cltNQVhfR1JBUEhf U1RSIC0gMV0gPSAwOworCQkJZ2VuID0gMDsKKwkJY2FzZSBPUFRfRU5EOgorCQkJYnJlYWs7CisJ CWNhc2UgT1BUX1VTQUdFOiAvKiBmYWxsLXRocm91Z2ggKi8KKwkJY2FzZSBPUFRfVU5LTk9XTjoK KwkJCXVzYWdlKHRvb2xuYW1lKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwl9CisJ cGlwZUEgPSBjcmVhdGVfZ3JhcGhfbm9kZShQSVBFLCAwKTsKKwlwaXBlQiA9IGNyZWF0ZV9ncmFw aF9ub2RlKFBJUEUsIDEpOworCXBpcGVDID0gY3JlYXRlX2dyYXBoX25vZGUoUElQRSwgMik7CisJ cGlwZUQgPSBjcmVhdGVfZ3JhcGhfbm9kZShQSVBFLCAzKTsKKwlzbGljZTEgPSBjcmVhdGVfZ3Jh cGhfbm9kZShEQlVGX1NMSUNFLCAwKTsKKwlzbGljZTIgPSBjcmVhdGVfZ3JhcGhfbm9kZShEQlVG X1NMSUNFLCAxKTsKKwlzbGljZTMgPSBjcmVhdGVfZ3JhcGhfbm9kZShEQlVGX1NMSUNFLCAyKTsK KwlzbGljZTQgPSBjcmVhdGVfZ3JhcGhfbm9kZShEQlVGX1NMSUNFLCAzKTsKKworCW1lbXNldChw aXBlcywgMCwgSTkxNV9NQVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisJ bWVtc2V0KHNsaWNlcywgMCwgSTkxNV9NQVhfU0xJQ0VTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5v ZGUgKikpOworCisJaWYgKCFnZW4pIHsKKwkJaW50IG51bV9zbGljZXMgPSAwLCBudW1fcGlwZXMg PSAwOworCQkvKgorCQkgKiBQcmVwYXJlIHRvIGdlbmVyYXRlIGFzc2lnbm1lbnRzIGZvciBJQ0ws IHdoaWNoCisJCSAqIGhhcyAzIHBpcGVzIGFuZCAyIERCdWYgc2xpY2VzLgorCQkgKi8KKwkJc2xp Y2VzWzBdID0gc2xpY2UxOworCQlzbGljZXNbMV0gPSBzbGljZTI7CisJCXNsaWNlc1syXSA9IHNs aWNlMzsKKwkJc2xpY2VzWzNdID0gc2xpY2U0OworCQlwaXBlc1swXSA9IHBpcGVBOworCQlwaXBl c1sxXSA9IHBpcGVCOworCQlwaXBlc1syXSA9IHBpcGVDOworCQlwaXBlc1szXSA9IHBpcGVEOwor CisJCXBhcnNlX2dyYXBoX3N0cihncmFwaF9zdHIsIHBpcGVzLCBzbGljZXMsICZudW1fc2xpY2Vz LAorCQkJCSZudW1fcGlwZXMpOworCisJCXRyYXZlcnNlX2dyYXBoKHBpcGVzWzBdLCAwKTsKKwor CQlwcmludF90YWJsZShwaXBlcywgbnVtX3BpcGVzLCBzbGljZXMsIG51bV9zbGljZXMsIHNsaWNl c19wZXJfcGlwZSk7CisKKwl9IGVsc2UgaWYgKGdlbiA9PSAxMSkgeworCisJCS8qCisJCSAqIFBy ZXBhcmUgdG8gZ2VuZXJhdGUgYXNzaWdubWVudHMgZm9yIElDTCwgd2hpY2gKKwkJICogaGFzIDMg cGlwZXMgYW5kIDIgREJ1ZiBzbGljZXMuCisJCSAqLworCQlzbGljZXNbMF0gPSBzbGljZTE7CisJ CXNsaWNlc1sxXSA9IHNsaWNlMjsKKwkJcGlwZXNbMF0gPSBwaXBlQTsKKwkJcGlwZXNbMV0gPSBw aXBlQjsKKwkJcGlwZXNbMl0gPSBwaXBlQzsKKworCQkvKgorCQkgKiBCU3BlYyAxMjcxNi4gR2Vu ZXJhdGUgREJ1ZiBTbGljZXMgdGFibGUgZm9yIElDTCwKKwkJICogR3JhcGgoZWFjaCBlZGdlIGFz c3VtZWQgdG8gaGF2ZSB3ZWlnaHQgMSk6CisJCSAqIFBpcGVBIC0gREJVRl9TMSAtIFBpcGVCIC0g UGlwZUMgLSBEQlVGX1MyCisJCSAqLworCQljb25uZWN0X25vZGVzKHBpcGVBLCBzbGljZTEsIDEp OworCQljb25uZWN0X25vZGVzKHNsaWNlMSwgcGlwZUIsIDEpOworCQljb25uZWN0X25vZGVzKHBp cGVCLCBwaXBlQywgMSk7CisJCWNvbm5lY3Rfbm9kZXMocGlwZUMsIHNsaWNlMiwgMSk7CisKKwkJ dHJhdmVyc2VfZ3JhcGgocGlwZUEsIDApOworCisJCXByaW50X3RhYmxlKHBpcGVzLCAzLCBzbGlj ZXMsIDIsIDIpOworCisJfSBlbHNlIGlmIChnZW4gPT0gMTIpIHsKKworCQkvKgorCQkgKiBQcmVw YXJlIHRvIGdlbmVyYXRlIGFzc2lnbm1lbnRzIGZvciBUR0wsIHdoaWNoCisJCSAqIGhhcyA0IHBp cGVzIGFuZCAyIERCdWYgc2xpY2VzLgorCQkgKi8KKwkJc2xpY2VzWzBdID0gc2xpY2UxOworCQlz bGljZXNbMV0gPSBzbGljZTI7CisJCXBpcGVzWzBdID0gcGlwZUE7CisJCXBpcGVzWzFdID0gcGlw ZUI7CisJCXBpcGVzWzJdID0gcGlwZUM7CisJCXBpcGVzWzNdID0gcGlwZUQ7CisKKwkJLyoKKwkJ ICogQlNwZWMgNDkyNTUuIEdlbmVyYXRlIERCdWYgU2xpY2VzIHRhYmxlIGZvciBUR0wuCisJCSAq IEdyYXBoKGVhY2ggZWRnZSBhc3N1bWVkIHRvIGhhdmUgd2VpZ2h0IDEpOgorCQkgKiBQaXBlRCAt IERCVUZfUzIgLSBQaXBlQyAtIFBpcGVBIC0gREJVRl9TMSAtIFBpcGVCCisJCSAqLworCQljb25u ZWN0X25vZGVzKHBpcGVELCBzbGljZTIsIDEpOworCQljb25uZWN0X25vZGVzKHNsaWNlMiwgcGlw ZUMsIDEpOworCQljb25uZWN0X25vZGVzKHBpcGVDLCBwaXBlQSwgMSk7CisJCWNvbm5lY3Rfbm9k ZXMocGlwZUEsIHNsaWNlMSwgMSk7CisJCWNvbm5lY3Rfbm9kZXMoc2xpY2UxLCBwaXBlQiwgMSk7 CisKKwkJdHJhdmVyc2VfZ3JhcGgocGlwZUEsIDApOworCisJCXByaW50X3RhYmxlKHBpcGVzLCA0 LCBzbGljZXMsIDIsIDIpOworCX0KKworCXJlc2V0X2FsbF9ub2RlcygpOworCisJLyoKKwkgKiBG dXJ0aGVyIHBsYXRmb3JtcyBjYW4gZ2VuZXJhdGUgdGFibGUgc2FtZSB3YXkuCisJICovCisKKwlk ZXN0cm95X2FsbF9ub2RlcygpOworCisJcmV0dXJuICAwOworfQorCmRpZmYgLS1naXQgYS90b29s cy9tZXNvbi5idWlsZCBiL3Rvb2xzL21lc29uLmJ1aWxkCmluZGV4IGVlY2IxMjJiLi4yYjhkZjRi NCAxMDA2NDQKLS0tIGEvdG9vbHMvbWVzb24uYnVpbGQKKysrIGIvdG9vbHMvbWVzb24uYnVpbGQK QEAgLTM1LDYgKzM1LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCiAJJ2ludGVsX3dhdGVybWFyaycsCiAJ J2ludGVsX2dlbV9pbmZvJywKIAknaW50ZWxfZ3Z0Z190ZXN0JywKKwknaW50ZWxfZGJ1Zl9tYXAn LAogCSdkcGNkX3JlZycsCiBdCiB0b29sX2RlcHMgPSBpZ3RfZGVwcwotLSAKMi4yNC4xLjQ4NS5n YWQwNWEzZDhlNQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==