From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7A2DA6E1F9 for ; Mon, 2 Dec 2019 14:06:28 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 2 Dec 2019 16:03:31 +0200 Message-Id: <20191202140331.1197-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v1] 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 List-ID: QXMgaW4gbW9kZXJuIHBsYXRmb3JtcyBtb3JlIERpc3BsYXkgYnVmZmVyCnNsaWNlcy9waXBlcyBh cmUgY29taW5nLCB3aGljaCBoYXZlIGRpZmZlcmVudApwaXBlIGFmZmluaXRpZXMgYW5kIG90aGVy IGNvbnN0cmFpbnRzLCBzbyBCU3BlYwpjb250YWlucyB0aGVpciBjb25uZWN0aW9uIGluIGZvcm0g b2YgYSBHcmFwaC4KClNvIHdlIGNhbiBnZW5lcmF0ZSBvcHRpbWFsIERCdWYgYXNzaWdubWVudCwK ZnJvbSB0aGUgZ3JhcGggd2hpY2ggd2UgaGF2ZSBpbiBCU3BlYywgdG8gYXZvaWQKbWFudWFsIGNh bGN1bGF0aW9ucyBwcm9uZSB0byBodW1hbiBlcnJvciBhbmQKY29weS1wYXN0aW5nLiBUaGUgZ2Vu ZXJhdGVkIHRhYmxlIGlzIGluIEMgZm9ybQphbmQgY2FuIGJlIHVzZWQgaW4gaTkxNSBkcml2ZXIg cmlnaHRhd2F5IGFuZCBhbHNvCmZvciB2ZXJpZmljYXRpb24uCgpTaWduZWQtb2ZmLWJ5OiBTdGFu aXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KQ2M6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdG9vbHMvaW50 ZWxfZGJ1Zl9tYXAuYyB8IDcyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAyIGZpbGVzIGNoYW5nZWQsIDcy OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW50ZWxfZGJ1Zl9tYXAu YwoKZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2RidWZfbWFwLmMgYi90b29scy9pbnRlbF9kYnVm X21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi45NmU1NmVlMQotLS0g L2Rldi9udWxsCisrKyBiL3Rvb2xzL2ludGVsX2RidWZfbWFwLmMKQEAgLTAsMCArMSw3MjcgQEAK Ky8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAg U3RhbmlzbGF2IExpc292c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5jb20+CisgKgor ICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJp Z3RfbGlzdC5oIgorCitlbnVtIE5vZGVUeXBlIHsKKwlEQlVGX1NMSUNFLAorCVBJUEUKK307CisK K2NvbnN0IGNoYXIgKm5vZGVfdHlwZV90b19zdHJbXSA9IHsgIkRCVUZfU0xJQ0UiLCAiUElQRSIg fTsKKworI2RlZmluZSBNQVhfQ09OTkVDVElPTlMgMTAKKyNkZWZpbmUgTUFYX05PREVTIDEwCisj ZGVmaW5lIE1BWF9FREdFUyAoTUFYX05PREVTICogMikKKworc3RydWN0IEdyYXBoRWRnZTsKKwor LyoKKyAqIEdyYXBoIG5vZGUsIHdoaWNoIGNhbiBiZSBEQnVmIG9yIFBpcGUKKyAqLworc3RydWN0 IEdyYXBoTm9kZSB7CisJaW50IGlkOworCWVudW0gTm9kZVR5cGUgdHlwZTsKKwl1bnNpZ25lZCBp bnQgdXNlX2NvdW50OworCWludCB2aXNpdGVkOworCXN0cnVjdCBHcmFwaEVkZ2UgKmNvbm5lY3Rp b25zW01BWF9DT05ORUNUSU9OU107CisJaW50IG51bV9jb25uZWN0aW9uczsKK307CisKK3N0YXRp YyBzdHJ1Y3QgR3JhcGhOb2RlICphbGxfbm9kZXNbTUFYX05PREVTXTsKK3N0YXRpYyBzdHJ1Y3Qg R3JhcGhFZGdlICphbGxfZWRnZXNbTUFYX0VER0VTXTsKK3N0YXRpYyBpbnQgbnVtX25vZGVzOwor c3RhdGljIGludCBudW1fZWRnZXM7CisKKy8qCisgKiBHcmFwaCBlZGdlLCB3aGljaCBjb25uZWN0 cyBHcmFwaCBub2RlcworICogYW5kIGhhcyBhIHdlaWdodCBwcm9wZXJ0eS4KKyAqLworc3RydWN0 IEdyYXBoRWRnZSB7CisJc3RydWN0IGlndF9saXN0IGVsZW07CisJdW5zaWduZWQgaW50IHdlaWdo dDsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpub2RlOworfTsKKworc3RydWN0IEdyYXBoTm9kZSAqY3Jl YXRlX2dyYXBoX25vZGUoZW51bSBOb2RlVHlwZSB0eXBlLCBpbnQgaWQpCit7CisJc3RydWN0IEdy YXBoTm9kZSAqbm9kZSA9IDA7CisKKwlpZiAobnVtX25vZGVzID49IE1BWF9OT0RFUykgeworCQlp Z3RfaW5mbygiVG9vIG11Y2ggbm9kZXMgJWQiLCBudW1fbm9kZXMpOworCQlyZXR1cm47CisJfQor CisJbm9kZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSkpOworCW5vZGUtPnR5cGUg PSB0eXBlOworCW5vZGUtPmlkID0gaWQ7CisJbm9kZS0+dXNlX2NvdW50ID0gMDsKKwlub2RlLT52 aXNpdGVkID0gMDsKKwltZW1zZXQobm9kZS0+Y29ubmVjdGlvbnMsIDAsCisJCQlNQVhfQ09OTkVD VElPTlMgKiBzaXplb2Yoc3RydWN0IEdyYXBoRWRnZSAqKSk7CisJbm9kZS0+bnVtX2Nvbm5lY3Rp b25zID0gMDsKKworCWFsbF9ub2Rlc1tudW1fbm9kZXNdID0gbm9kZTsKKwludW1fbm9kZXMrKzsK KworCXJldHVybiBub2RlOworfQorCitzdHJ1Y3QgR3JhcGhFZGdlICpjcmVhdGVfZ3JhcGhfZWRn ZShpbnQgd2VpZ2h0LCBzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQoreworCXN0cnVjdCBHcmFwaEVk Z2UgKmVkZ2UgPSAwOworCisJaWYgKG51bV9lZGdlcyA+PSBNQVhfRURHRVMpIHsKKwkJaWd0X2lu Zm8oIlRvbyBtdWNoIGVkZ2VzICVkIiwgbnVtX2VkZ2VzKTsKKwkJcmV0dXJuOworCX0KKworCWVk Z2UgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBHcmFwaEVkZ2UpKTsKKworCWVkZ2UtPmVsZW0ucHJl diA9ICZlZGdlLT5lbGVtOworCWVkZ2UtPmVsZW0ubmV4dCA9ICZlZGdlLT5lbGVtOworCWVkZ2Ut Pm5vZGUgPSBub2RlOworCWVkZ2UtPndlaWdodCA9IHdlaWdodDsKKworCWFsbF9lZGdlc1tudW1f ZWRnZXNdID0gZWRnZTsKKwludW1fZWRnZXMrKzsKKworCXJldHVybiBlZGdlOworfQorCit2b2lk IGNvbm5lY3Rfbm9kZXMoc3RydWN0IEdyYXBoTm9kZSAqbm9kZTEsIHN0cnVjdCBHcmFwaE5vZGUg Km5vZGUyLCBpbnQgd2VpZ2h0KQoreworCXN0cnVjdCBHcmFwaEVkZ2UgKmVkZ2UxOworCXN0cnVj dCBHcmFwaEVkZ2UgKmVkZ2UyOworCisJaWYgKG5vZGUxLT5udW1fY29ubmVjdGlvbnMgPj0gTUFY X0NPTk5FQ1RJT05TKSB7CisJCWlndF9pbmZvKCJOb2RlICVkIGhhcyB0b28gbXVjaCBjb25uZWN0 aW9uc1xuIiwgbm9kZTEtPmlkKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChub2RlMi0+bnVtX2Nv bm5lY3Rpb25zID49IE1BWF9DT05ORUNUSU9OUykgeworCQlpZ3RfaW5mbygiTm9kZSAlZCBoYXMg dG9vIG11Y2ggY29ubmVjdGlvbnNcbiIsIG5vZGUyLT5pZCk7CisJCXJldHVybjsKKwl9CisKKwll ZGdlMSA9IGNyZWF0ZV9ncmFwaF9lZGdlKHdlaWdodCwgbm9kZTEpOworCWVkZ2UyID0gY3JlYXRl X2dyYXBoX2VkZ2Uod2VpZ2h0LCBub2RlMik7CisKKwlub2RlMS0+Y29ubmVjdGlvbnNbbm9kZTEt Pm51bV9jb25uZWN0aW9uc10gPSBlZGdlMjsKKwlub2RlMS0+bnVtX2Nvbm5lY3Rpb25zKys7CisJ bm9kZTItPmNvbm5lY3Rpb25zW25vZGUyLT5udW1fY29ubmVjdGlvbnNdID0gZWRnZTE7CisJbm9k ZTItPm51bV9jb25uZWN0aW9ucysrOworfQorCit2b2lkIHJlc2V0X25vZGUoc3RydWN0IEdyYXBo Tm9kZSAqbm9kZSkKK3sKKwlub2RlLT51c2VfY291bnQgPSAwOworCW5vZGUtPnZpc2l0ZWQgPSAw OworCW1lbXNldChub2RlLT5jb25uZWN0aW9ucywgMCwKKwkJTUFYX0NPTk5FQ1RJT05TICogc2l6 ZW9mKHN0cnVjdCBHcmFwaEVkZ2UgKikpOworCW5vZGUtPm51bV9jb25uZWN0aW9ucyA9IDA7Cit9 CisKK3ZvaWQgZGVzdHJveV9ub2RlKHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUpCit7CisJZnJlZShu b2RlKTsKK30KKwordm9pZCBkZXN0cm95X2VkZ2Uoc3RydWN0IEdyYXBoTm9kZSAqZWRnZSkKK3sK KwlmcmVlKGVkZ2UpOworfQorCit2b2lkIGRlc3Ryb3lfYWxsX2VkZ2VzKHZvaWQpCit7CisJaW50 IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VkZ2VzOyBpKyspIHsKKwkJZGVzdHJveV9lZGdl KGFsbF9lZGdlc1tpXSk7CisJfQorCW51bV9lZGdlcyA9IDA7Cit9CisKK3ZvaWQgZGVzdHJveV9h bGxfbm9kZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbm9kZXM7 IGkrKykgeworCQlkZXN0cm95X25vZGUoYWxsX25vZGVzW2ldKTsKKwl9CisJbnVtX25vZGVzID0g MDsKK30KKwordm9pZCByZXNldF9hbGxfbm9kZXModm9pZCkKK3sKKwlpbnQgaTsKKworCWRlc3Ry b3lfYWxsX2VkZ2VzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX25vZGVzOyBpKyspIHsKKwkJ cmVzZXRfbm9kZShhbGxfbm9kZXNbaV0pOworCX0KK30KKworLyoKKyAqIFRyYXZlcnNlIGFuZCB0 cnkgdG8gcHJpbnQgZ3JhcGggaW4gYQorICogc29tZXdoYXQgZ3JhcGhpY2FsIGZvcm0uCisgKi8K K3ZvaWQgdHJhdmVyc2VfZ3JhcGgoc3RydWN0IEdyYXBoTm9kZSAqc3RhcnRfbm9kZSwKKwkJICAg IGludCBkZXB0aCkKK3sKKwlpbnQgaSwgc3BhY2U7CisKKwlpZiAoIWRlcHRoKQorCQlpZ3RfaW5m bygiR3JhcGg6IFxuIik7CisKKwlmb3IgKHNwYWNlID0gMDsgc3BhY2UgPCBkZXB0aCAqIDQ7IHNw YWNlKyspCisJCWlndF9pbmZvKCIgIik7CisKKwlzdGFydF9ub2RlLT52aXNpdGVkKys7CisJaWd0 X2luZm8oIlR5cGUgJXMgaWQgJWRcbiIsIG5vZGVfdHlwZV90b19zdHJbc3RhcnRfbm9kZS0+dHlw ZV0sCisJCSBzdGFydF9ub2RlLT5pZCk7CisJZm9yIChpID0gMDsgaSA8IHN0YXJ0X25vZGUtPm51 bV9jb25uZWN0aW9uczsgaSsrKSB7CisJCWlmICghc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV0t Pm5vZGUtPnZpc2l0ZWQpIHsKKwkJCWZvciAoc3BhY2UgPSAwOyBzcGFjZSA8IChkZXB0aCArIDEp ICogNDsgc3BhY2UrKykKKwkJCQlpZ3RfaW5mbygiICIpOworCQkJaWd0X2luZm8oIiglZCktPiBc biIsIHN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldLT53ZWlnaHQpOworCQkJdHJhdmVyc2VfZ3Jh cGgoc3RhcnRfbm9kZS0+Y29ubmVjdGlvbnNbaV0tPm5vZGUsIGRlcHRoKzIpOworCQkJc3RhcnRf bm9kZS0+Y29ubmVjdGlvbnNbaV0tPm5vZGUtPnZpc2l0ZWQtLTsKKwkJfQorCX0KK30KKworLyoK KyAqIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgc2VhcmNoZXMgZm9yIGEgZnJlZSBEQnVmIHNs aWNlCisgKiBmb3IgY29ycmVzcG9uZGVudCBwaXBlLCBiYXNlZCBvbiBkaWZmZXJlbnQgY29uc3Ry YWludHMsIGxpa2UKKyAqIHdlaWdodCwgdXNhZ2UgY291bnQuIFRoaXMgYWxnb3JpdGhtIGlzICJn cmVlZHkiIHdoaWNoIG1lYW5zCisgKiB0aGF0IGl0IGFjY291bnRzIGZvciBsb2NhbCBvcHRpbXVt IG9ubHksIHdoaWNoIG1lYW5zIHRoYXQKKyAqIHRvdGFsIGNvbXBhcmlzb24gaGFzIHRvIGJlIGRv bmUgaW4gdGhlIGVuZC4KKyAqLworc3RydWN0IEdyYXBoTm9kZSAqZmluZF9zbGljZV9mb3JfcGlw ZShzdHJ1Y3QgR3JhcGhOb2RlICpzdGFydF9ub2RlLAorCQkJCSAgICAgIGludCBhY2Nfd2VpZ2h0 LCBpbnQgbWF4X3VzZV9jb3VudCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgKnRvdGFsX3dlaWdo dCwKKwkJCQkgICAgICBpbnQgZGVwdGgsCisJCQkJICAgICAgaW50IHNraXApCit7CisJaW50IGk7 CisJaW50IGZvdW5kID0gMDsKKwl1bnNpZ25lZCBpbnQgbWluX3dlaWdodCA9IH4wLCBtaW5fdXNl X2NvdW50ID0gfjA7CisJaW50IGogPSAwOworCXN0cnVjdCBHcmFwaEVkZ2UgKm1pbl9lZGdlID0g MDsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpub2RlID0gTlVMTDsKKwlJR1RfTElTVChzbGljZV9saXN0 KTsKKworCXN0YXJ0X25vZGUtPnZpc2l0ZWQrKzsKKworCWZvciAoaSA9IDA7IGkgPCBzdGFydF9u b2RlLT5udW1fY29ubmVjdGlvbnM7IGkrKykgeworCQlzdHJ1Y3QgR3JhcGhFZGdlICpjdXJfZWRn ZSA9IHN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldOworCisJCS8qCisJCSAqIERCdWYgc2xpY2Vz IHRvIGJlIGFkZGVkIGZpcnN0CisJCSAqLworCQlpZiAoY3VyX2VkZ2UtPm5vZGUtPnR5cGUgPT0g REJVRl9TTElDRSkgeworCQkJaWYgKGN1cl9lZGdlLT5ub2RlLT51c2VfY291bnQgPCBtaW5fdXNl X2NvdW50KSB7CisJCQkJbWluX3VzZV9jb3VudCA9IGN1cl9lZGdlLT5ub2RlLT51c2VfY291bnQ7 CisJCQkJbWluX3dlaWdodCA9IGFjY193ZWlnaHQgKyBjdXJfZWRnZS0+d2VpZ2h0OworCQkJCW1p bl9lZGdlID0gY3VyX2VkZ2U7CisJCQkJaWd0X2xpc3RfYWRkKCZjdXJfZWRnZS0+ZWxlbSwgJnNs aWNlX2xpc3QpOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChjdXJfZWRnZS0+bm9kZS0+ dXNlX2NvdW50ID09CisJCQkJICAgbWluX2VkZ2UtPm5vZGUtPnVzZV9jb3VudCkgeworCQkJCWlm ICgoYWNjX3dlaWdodCArIGN1cl9lZGdlLT53ZWlnaHQpIDwgbWluX3dlaWdodCkgeworCQkJCQlt aW5fd2VpZ2h0ID0gYWNjX3dlaWdodCArIGN1cl9lZGdlLT53ZWlnaHQ7CisJCQkJCW1pbl9lZGdl ID0gY3VyX2VkZ2U7CisJCQkJCWlndF9saXN0X2FkZCgmY3VyX2VkZ2UtPmVsZW0sICZzbGljZV9s aXN0KTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCWlndF9saXN0X2FkZF90 YWlsKCZjdXJfZWRnZS0+ZWxlbSwgJnNsaWNlX2xpc3QpOworCX0KKworCWlmIChpZ3RfbGlzdF9l bXB0eSgmc2xpY2VfbGlzdCkpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkgKiBJdGVyYXRlIHRo cm91Z2ggbmVpZ2hib3VyaW5nIHNsaWNlcywgY2hlY2tpbmcKKwkgKiBpZiBpdCdzIHVzZSBjb3Vu dCBhbGxvd3MgdXNhZ2UgYW5kIHNraXAgaWYgbmVlZGVkLAorCSAqIHNraXBzIGFyZSBuZWVkZWQg d2hlbiB3ZSB1c2UgbXVsdGlwbGUgc2xpY2VzIGZvcgorCSAqIHNhbWUgcGlwZSB0byBwcmV2ZW50 IGFsZ29yaXRobSBmcm9tIHJldHVybmluZyB0aGUKKwkgKiBzYW1lIERCdWYuCisJICovCisJaWd0 X2xpc3RfZm9yX2VhY2gobWluX2VkZ2UsICZzbGljZV9saXN0LCBlbGVtKSB7CisJCWlmIChtaW5f ZWRnZS0+bm9kZS0+dHlwZSA9PSBEQlVGX1NMSUNFKSB7CisJCQlpZiAobWluX2VkZ2UtPm5vZGUt PnVzZV9jb3VudCA8IG1heF91c2VfY291bnQpIHsKKwkJCQlpZiAoIXNraXApIHsKKwkJCQkJbWlu X2VkZ2UtPm5vZGUtPnVzZV9jb3VudCsrOworCQkJCQkqdG90YWxfd2VpZ2h0ID0gYWNjX3dlaWdo dCArIG1pbl9lZGdlLT53ZWlnaHQ7CisJCQkJCWlmIChkZXB0aCA9PSAwKQorCQkJCQkJc3RhcnRf bm9kZS0+dmlzaXRlZCA9IDA7CisJCQkJCXJldHVybiBtaW5fZWRnZS0+bm9kZTsKKwkJCQl9CisJ CQl9CisJCQlpZiAoc2tpcCkKKwkJCQlza2lwLS07CisJCX0KKwl9CisKKwkvKgorCSAqIElmIGNv dWxkbid0IGZpbmQgc3VpdGFibGUgREJ1ZiBub2RlIGZyb20gb3VyCisJICogbmVpZ2hib3Vycywg aGF2ZSB0byBjb250aW51ZSBmdXJ0aGVyLCBjaGVja2luZworCSAqIHZpc2l0ZWQgZmxhZywgdG8g cHJldmVudCBsb29wcy4KKwkgKi8KKwlpZ3RfbGlzdF9mb3JfZWFjaChtaW5fZWRnZSwgJnNsaWNl X2xpc3QsIGVsZW0pIHsKKwkJaWYgKCFtaW5fZWRnZS0+bm9kZS0+dmlzaXRlZCkgeworCQkJbm9k ZSA9IGZpbmRfc2xpY2VfZm9yX3BpcGUobWluX2VkZ2UtPm5vZGUsCisJCQkJCQkgICBhY2Nfd2Vp Z2h0ICsgbWluX2VkZ2UtPndlaWdodCwKKwkJCQkJCSAgIG1heF91c2VfY291bnQsIHRvdGFsX3dl aWdodCwKKwkJCQkJCSAgIGRlcHRoICsgMSwgc2tpcCk7CisJCQltaW5fZWRnZS0+bm9kZS0+dmlz aXRlZC0tOworCQkJaWYgKG5vZGUpIHsKKwkJCQlpZiAoZGVwdGggPT0gMCkKKwkJCQkJc3RhcnRf bm9kZS0+dmlzaXRlZCA9IDA7CisJCQkJcmV0dXJuIG5vZGU7CisJCQl9CisJCX0KKwl9CisJaWYg KGRlcHRoID09IDApCisJCXN0YXJ0X25vZGUtPnZpc2l0ZWQgPSAwOworCXJldHVybiBOVUxMOwor fQorCitpbnQgaHdlaWdodDMyKGludCBtYXNrKQoreworCWludCBpOworCWludCBjb3VudCA9IDA7 CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJaWYgKCgxPDxpKSAmIG1hc2spCisJCQlj b3VudCArPSAxOworCXJldHVybiBjb3VudDsKK30KKworI2RlZmluZSBJOTE1X01BWF9QSVBFUyA0 CisjZGVmaW5lIEk5MTVfTUFYX1NMSUNFU19QRVJfUElQRSAyCisjZGVmaW5lIEk5MTVfTUFYX1NM SUNFUyAoSTkxNV9NQVhfUElQRVMgKiBJOTE1X01BWF9TTElDRVNfUEVSX1BJUEUpCisKK2NoYXIg KnBpcGVfbmFtZXNbXSA9IHsgIlBJUEVfQSIsICJQSVBFX0IiLCAiUElQRV9DIiwgIlBJUEVfRCIg fTsKKworY2hhciAqcGlwZV9iaXRfdG9fbmFtZShpbnQgYml0KQoreworCXJldHVybiBwaXBlX25h bWVzW2ZmcyhiaXQpIC0gMV07Cit9CisKK2ludCBmYWN0b3JpYWwoaW50IG4pCit7CisJaWYgKG4g PD0gMSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIG4gKiBmYWN0b3JpYWwobiAtIDEpOworfQorCit2 b2lkIGRvX3N3YXAodm9pZCAqKnBpcGVfbm9kZXMsIGludCBtLCBpbnQgbikKK3sKKwkqKCh1bnNp Z25lZCBsb25nICopcGlwZV9ub2RlcyArIG0pIF49ICooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25v ZGVzICsgbik7CisJKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBuKSBePSAqKCh1bnNp Z25lZCBsb25nICopcGlwZV9ub2RlcyArIG0pOworCSooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25v ZGVzICsgbSkgXj0gKigodW5zaWduZWQgbG9uZyAqKXBpcGVfbm9kZXMgKyBuKTsKK30KKwordm9p ZCBwcmludF9waXBlX25vZGVzKHN0cnVjdCBHcmFwaE5vZGUgKipwaXBlX25vZGVzKQoreworCWlu dCBpOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmICghcGlw ZV9ub2Rlc1tpXSkKKwkJCWlndF9pbmZvKCIobnVsbCkiKTsKKwkJZWxzZQorCQkJaWd0X2luZm8o IiVkIiwgcGlwZV9ub2Rlc1tpXS0+aWQpOworCQlpZiAoaSA8IChJOTE1X01BWF9QSVBFUyAtIDEp KQorCQkJaWd0X2luZm8oIiAsIik7CisJfQorCWlndF9pbmZvKCJcbiIpOworfQorCitzdHJ1Y3Qg UGlwZU5vZGVzQ29tYmluYXRpb24geworCXVuc2lnbmVkIGludCB0b3RhbF93ZWlnaHQ7CisJc3Ry dWN0IEdyYXBoTm9kZSAqcGlwZV9ub2Rlc1tJOTE1X01BWF9QSVBFU107CisJc3RydWN0IEdyYXBo Tm9kZSAqc2xpY2VzW0k5MTVfTUFYX1NMSUNFU107Cit9OworCitzdHJ1Y3QgSXRlcmF0ZUNvbnRl eHQgeworCXN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiBtaW5fY29tYjsKKwlpbnQgbWF4X3Vz ZV9jb3VudDsKKwlpbnQgbnVtX3BpcGVzOworCWludCBudW1fc2xpY2VzOworCWludCBzbGljZXNf cGVyX3BpcGU7CisJaW50IG1heF9jb21iaW5hdGlvbnM7Cit9OworCitzdHJ1Y3QgUGlwZURCdWYg eworCXN0cnVjdCBHcmFwaE5vZGUgKnBpcGU7CisJc3RydWN0IEdyYXBoTm9kZSAqZGJ1ZltJOTE1 X01BWF9TTElDRVNfUEVSX1BJUEVdOworfTsKKwordm9pZCBjb21wYXJlX3dlaWdodChzdHJ1Y3Qg SXRlcmF0ZUNvbnRleHQgKmN0eCwKKwkJICAgIHN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiAq Y29tYikKK3sKKwl1bnNpZ25lZCBpbnQgd2VpZ2h0OworCWludCBqID0gMDsKKwlpbnQgcGlwZSA9 IDA7CisJaW50IHNraXAgPSAwOworCWludCBzbGljZV9udW0gPSAwOworCisJY29tYi0+dG90YWxf d2VpZ2h0ID0gMDsKKworCS8qCisJICogR2V0IGEgZnJlZSBEQnVmIHNsaWNlIGZvciBlYWNoIHBp cGUsIHRoZW4KKwkgKiBjYWxjdWxhdGUgdG90YWwgd2VpZ2h0LCB3aGljaCB3aWxsIGJlCisJICog dGhlbiBjb21wYXJlZCB0byBtaW5pbWFsIHdlaWdodCB0byBmaW5kCisJICogY29tYmluYXRpb24g d2l0aCB0b3RhbCBtaW5pbWFsIHdlaWdodC4KKwkgKi8KKwl3aGlsZSAocGlwZSA8IEk5MTVfTUFY X1BJUEVTKSB7CisJCWlmIChjb21iLT5waXBlX25vZGVzW3BpcGVdKSB7CisJCQljb21iLT5zbGlj ZXNbal0gPQorCQkJICAgIGZpbmRfc2xpY2VfZm9yX3BpcGUoY29tYi0+cGlwZV9ub2Rlc1twaXBl XSwKKwkJCQkJCTAsIGN0eC0+bWF4X3VzZV9jb3VudCwKKwkJCQkJCSZ3ZWlnaHQsIDAsIHNraXAp OworCQkJaWYgKGNvbWItPnNsaWNlc1tqXSkgeworCQkJCWlmIChzbGljZV9udW0gPCBjdHgtPnNs aWNlc19wZXJfcGlwZSkKKwkJCQkJc2tpcCsrOworCQkJCWNvbWItPnRvdGFsX3dlaWdodCArPSB3 ZWlnaHQ7CisJCQl9IGVsc2UgeworCQkJCWlndF9pbmZvKCJDb3VsZCBub3QgZmluZCBzbGljZSBm b3IgcGlwZSAlZCFcbiIsCisJCQkJCSBjb21iLT5waXBlX25vZGVzW3BpcGVdLT5pZCk7CisJCQl9 CisJCQlzbGljZV9udW0rKzsKKworCQkJaWYgKHNsaWNlX251bSA+PSBjdHgtPnNsaWNlc19wZXJf cGlwZSkgeworCQkJCXNsaWNlX251bSA9IDA7CisJCQkJcGlwZSsrOworCQkJCXNraXAgPSAwOwor CQkJfQorCQkJaisrOworCQl9IGVsc2UgeworCQkJcGlwZSsrOworCQkJaiArPSBjdHgtPnNsaWNl c19wZXJfcGlwZTsKKwkJCXNraXAgPSAwOworCQl9CisJfQorCisJZm9yIChqID0gMDsgaiA8IEk5 MTVfTUFYX1NMSUNFUzsgaisrKSB7CisJCWlmIChjb21iLT5zbGljZXNbal0pCisJCQljb21iLT5z bGljZXNbal0tPnVzZV9jb3VudCA9IDA7CisJfQorCisJaWYgKGN0eC0+bWluX2NvbWIudG90YWxf d2VpZ2h0ID4gY29tYi0+dG90YWxfd2VpZ2h0KSB7CisJCW1lbWNweSgmY3R4LT5taW5fY29tYiwg Y29tYiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24pKTsKKwl9 Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBhbGwgcG9zc2libGUgY29tYmluYXRpb25zIGZvciBlbGVt ZW50cyBpbgorICogcGlwZSBhcnJheSh0b3RhbCBpcyBjYWxjdWxhdGVkIGFzIG4hKS4KKyAqLwor dm9pZCBpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoc3RydWN0IEl0ZXJhdGVDb250ZXh0ICpjdHgs CisJCQkgICAgICBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCSAgICAgIGludCBz dGFydCwgaW50IHN0ZXAsCisJCQkgICAgICB2b2lkICgqZnVuYykoc3RydWN0IEl0ZXJhdGVDb250 ZXh0ICpjdHgsCisJCQkJCXN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiAqY29tYikpCit7CisJ aW50IGksIGo7CisJc3RydWN0IEdyYXBoTm9kZSAqbm9kZXNbSTkxNV9NQVhfUElQRVNdOworCXN0 cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbiBjb21iOworCisJbWVtY3B5KGNvbWIucGlwZV9ub2Rl cywgcGlwZV9ub2RlcywKKwkgICAgICAgSTkxNV9NQVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdy YXBoTm9kZSAqKSk7CisJbWVtc2V0KGNvbWIuc2xpY2VzLCAwLAorCSAgICAgICBJOTE1X01BWF9T TElDRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisKKwlpZiAoZnVuYykKKwkJKCpm dW5jKShjdHgsICZjb21iKTsKKworCWlmICgoc3RlcCA9PSAwKSB8fCAoY3R4LT5udW1fcGlwZXMg PT0gMSkpCisJCXJldHVybjsKKworCWZvciAoaiA9IHN0ZXA7IGogPiAwOyBqLS0pIHsKKwkJZm9y IChpID0gc3RhcnQ7IGkgPCBJOTE1X01BWF9QSVBFUyAtIGo7IGkrKykgeworCQkJaWYgKCFwaXBl X25vZGVzW2ldIHx8ICFwaXBlX25vZGVzW2kgKyBqXSkKKwkJCQljb250aW51ZTsKKwkJCW1lbWNw eShub2RlcywgcGlwZV9ub2RlcywKKwkJCSAgICAgICBJOTE1X01BWF9QSVBFUyAqIHNpemVvZihz dHJ1Y3QgR3JhcGhOb2RlICopKTsKKwkJCWRvX3N3YXAobm9kZXMsIGksIGkgKyBqKTsKKwkJCWl0 ZXJhdGVfYWxsX2NvbWJpbmF0aW9ucyhjdHgsIG5vZGVzLCBpICsgMSwKKwkJCQkJCSBzdGVwIC0g MSwgZnVuYyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMg YW5kIHByaW50cyBvcHRpbWFsCisgKiB3ZWlnaHQtYmFzZWQgREJ1ZiBhc3NpZ25tZW50IGZvciBh Y3RpdmUgcGlwZXMuCisgKi8KK3ZvaWQgcHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpbnQgYWN0 aXZlX3BpcGVzLCBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCSAgICAgICBpbnQg bnVtX3NsaWNlcykKK3sKKwlpbnQgaSwgajsKKwlpbnQgbnVtX3BpcGVzID0gaHdlaWdodDMyKGFj dGl2ZV9waXBlcyk7CisJaW50IG1heF91c2VfY291bnQgPSBudW1fc2xpY2VzIDwgbnVtX3BpcGVz ID8gMiA6IDE7CisJaW50IHBpcGUgPSAwOworCWludCBtaW5fdG90YWxfd2VpZ2h0ID0gfjAsIHRv dGFsX3dlaWdodCA9IDAsIHdlaWdodDsKKwlpbnQgc2xpY2VzX3Blcl9waXBlID0gbWF4KG51bV9z bGljZXMgLyBudW1fcGlwZXMsIDEpOworCWludCBzbGljZV9udW0gPSAwOworCXN0cnVjdCBJdGVy YXRlQ29udGV4dCBjdHg7CisJc3RydWN0IFBpcGVEQnVmIHBpcGVfZGJ1ZltJOTE1X01BWF9QSVBF U107CisKKwltZW1jcHkoY3R4Lm1pbl9jb21iLnBpcGVfbm9kZXMsIHBpcGVfbm9kZXMsCisJICAg ICAgIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopICogSTkxNV9NQVhfUElQRVMpOworCW1lbXNl dChjdHgubWluX2NvbWIuc2xpY2VzLCAwLAorCSAgICAgICBJOTE1X01BWF9TTElDRVMgKiBzaXpl b2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisJY3R4Lm1pbl9jb21iLnRvdGFsX3dlaWdodCA9IH4w OworCWN0eC5tYXhfdXNlX2NvdW50ID0gbWF4X3VzZV9jb3VudDsKKwljdHgubnVtX3BpcGVzID0g bnVtX3BpcGVzOworCWN0eC5udW1fc2xpY2VzID0gbnVtX3NsaWNlczsKKwljdHguc2xpY2VzX3Bl cl9waXBlID0gc2xpY2VzX3Blcl9waXBlOworCWN0eC5tYXhfY29tYmluYXRpb25zID0gZmFjdG9y aWFsKG51bV9waXBlcyk7CisKKwlpdGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoJmN0eCwgcGlwZV9u b2RlcywKKwkJCQkgMCwgSTkxNV9NQVhfUElQRVMgLSAxLCBjb21wYXJlX3dlaWdodCk7CisKKwlp Z3RfaW5mbygiQ29tYmluYXRpb24gd2l0aCBsZWFzdCB3ZWlnaHQgJWQodG90YWwgY29tYmluYXRp b25zICVkKTpcbiIsCisJCSBjdHgubWluX2NvbWIudG90YWxfd2VpZ2h0LCBjdHgubWF4X2NvbWJp bmF0aW9ucyk7CisKKwltZW1zZXQocGlwZV9kYnVmLCAwLCBzaXplb2Yoc3RydWN0IFBpcGVEQnVm KSAqIEk5MTVfTUFYX1BJUEVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsg aSsrKSB7CisJCWlmIChjdHgubWluX2NvbWIucGlwZV9ub2Rlc1tpXSkgeworCQkJaW50IHBpcGVf aW5kZXggPSBjdHgubWluX2NvbWIucGlwZV9ub2Rlc1tpXS0+aWQ7CisKKwkJCXBpcGVfZGJ1Zltw aXBlX2luZGV4XS5waXBlID0gY3R4Lm1pbl9jb21iLnBpcGVfbm9kZXNbaV07CisJCQltZW1jcHko JnBpcGVfZGJ1ZltwaXBlX2luZGV4XS5kYnVmLAorCQkJICAgICAgICZjdHgubWluX2NvbWIuc2xp Y2VzW2kgKiBzbGljZXNfcGVyX3BpcGVdLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgR3JhcGhO b2RlICopICogc2xpY2VzX3Blcl9waXBlKTsKKwkJfQorCX0KKworCWlndF9pbmZvKCJ7ICIpOwor CXBpcGUgPSAwOworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7CisJCWlm IChwaXBlX2RidWZbaV0ucGlwZSkgeworCQkJaWd0X2luZm8oIkJJVCglcykiLCBwaXBlX25hbWVz W3BpcGVfZGJ1ZltpXS5waXBlLT5pZF0pOworCQkJaWYgKHBpcGUgPCAobnVtX3BpcGVzIC0gMSkp CisJCQkJaWd0X2luZm8oIiB8ICIpOworCQkJcGlwZSsrOworCQl9CisJfQorCWlndF9pbmZvKCIs IHsgIik7CisJZm9yIChwaXBlID0gMDsgcGlwZSA8IEk5MTVfTUFYX1BJUEVTOyBwaXBlKyspIHsK KwkJaWYgKHBpcGVfZGJ1ZltwaXBlXS5waXBlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2xpY2Vz X3Blcl9waXBlOyBpKyspIHsKKwkJCQlpbnQgc2xpY2VfaW5kZXhfY29udmVydGVkID0KKwkJCQkJ CXBpcGVfZGJ1ZltwaXBlXS5kYnVmW2ldLT5pZDsKKworCQkJCWlmIChpIDwgKHNsaWNlc19wZXJf cGlwZSAtIDEpKSB7CisJCQkJCWlndF9pbmZvKCJEQlVGX1MlZF9CSVQgfCAiLAorCQkJCQkJIHNs aWNlX2luZGV4X2NvbnZlcnRlZCArIDEpOworCQkJCX0gZWxzZSB7CisJCQkJCWlndF9pbmZvKCJE QlVGX1MlZF9CSVQiLAorCQkJCQkJIHNsaWNlX2luZGV4X2NvbnZlcnRlZCArIDEpOworCQkJCX0K KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlndF9pbmZvKCIwIik7CisJCX0KKwkJaWYgKHBpcGUgPCAo STkxNV9NQVhfUElQRVMgLSAxKSkKKwkJCWlndF9pbmZvKCIsICIpOworCQllbHNlCisJCQlicmVh azsKKwl9CisJaWd0X2luZm8oIiB9IH0sXG4iKTsKK30KKwordm9pZCBwcmludF90YWJsZShzdHJ1 Y3QgR3JhcGhOb2RlICoqcGlwZXMsIGludCBudW1fcGlwZXMsCisJCSBzdHJ1Y3QgR3JhcGhOb2Rl ICoqc2xpY2VzLCBpbnQgbnVtX3NsaWNlcykKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwlpbnQg bnVtX2NvbWJpbmF0aW9ucyA9IDEgPDwgbnVtX3BpcGVzOworCisJaWYgKG51bV9waXBlcyA+IEk5 MTVfTUFYX1BJUEVTKSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBwaXBlcyAlZFxuIiwgbnVtX3Bp cGVzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChudW1fc2xpY2VzID4gSTkxNV9NQVhfU0xJQ0VT KSB7CisJCWlndF9pbmZvKCJUb28gbWFueSBzbGljZXMgJWRcbiIsIG51bV9zbGljZXMpOworCQly ZXR1cm47CisJfQorCisJZm9yIChpID0gMTsgaSA8IG51bV9jb21iaW5hdGlvbnM7IGkrKykgewor CQlzdHJ1Y3QgR3JhcGhOb2RlICp0bXBbSTkxNV9NQVhfUElQRVNdOworCisJCW1lbWNweSh0bXAs IHBpcGVzLCBJOTE1X01BWF9QSVBFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopKTsKKwor CQlmb3IgKGogPSAwOyBqIDwgbnVtX3NsaWNlczsgaisrKSB7CisJCQlpZiAoc2xpY2VzW2pdKQor CQkJCXNsaWNlc1tqXS0+dXNlX2NvdW50ID0gMDsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBu dW1fcGlwZXM7IGorKykgeworCQkJaWYgKCEoaSAmICgxIDw8IGopKSkgeworCQkJCXRtcFtqXSA9 IDA7CisJCQl9CisJCX0KKworCQlwcmludF9kYnVmX21hc2tfZm9yX3BpcGVzKGksIHRtcCwgSTkx NV9NQVhfU0xJQ0VTX1BFUl9QSVBFKTsKKwl9Cit9CisKK2VudW0gb3B0IHsKKwlPUFRfVU5LTk9X TiA9ICc/JywKKwlPUFRfRU5EID0gLTEsCisJT1BUX0dFTiwKKwlPUFRfVVNBR0UsCit9OworCitz dGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICp0b29sbmFtZSkKK3sKKwlmcHJpbnRmKHN0ZGVy ciwgInVzYWdlOiAlcyIsIHRvb2xuYW1lKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiAtLWdlbj08R0VO PiIKKwkJIiBbLS1oZWxwXVxuIik7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKK3sKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBlc1tJOTE1X01BWF9QSVBFU107CisJc3RydWN0 IEdyYXBoTm9kZSAqc2xpY2VzW0k5MTVfTUFYX1NMSUNFU107CisJc3RydWN0IEdyYXBoTm9kZSAq cGlwZUEsICpwaXBlQiwgKnBpcGVDLCAqcGlwZUQ7CisJc3RydWN0IEdyYXBoTm9kZSAqc2xpY2Ux LCAqc2xpY2UyOworCWludCBpLCBqID0gMCwgZ2VuID0gMTIsIGluZGV4OworCWVudW0gb3B0IG9w dDsKKwljaGFyICplbmRwOworCWNvbnN0IGNoYXIgKnRvb2xuYW1lID0gYXJndlswXTsKKwlzdGF0 aWMgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisJCXsgImdlbiIsCXJlcXVpcmVkX2FyZ3Vt ZW50LAlOVUxMLAlPUFRfR0VOIH0sCisJCXsgImhlbHAiLAlub19hcmd1bWVudCwJCU5VTEwsCU9Q VF9VU0FHRSB9LAorCQl7IDAgfQorCX07CisKKwludW1fZWRnZXMgPSAwOworCW51bV9ub2RlcyA9 IDA7CisKKwlmb3IgKG9wdCA9IDA7IG9wdCAhPSBPUFRfRU5EOyApIHsKKwkJb3B0ID0gZ2V0b3B0 X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsICZpbmRleCk7CisKKwkJc3dpdGNoIChvcHQp IHsKKwkJY2FzZSBPUFRfR0VOOgorCQkJZ2VuID0gc3RydG91bChvcHRhcmcsICZlbmRwLCAwKTsK KwkJCWJyZWFrOworCQljYXNlIE9QVF9FTkQ6CisJCQlicmVhazsKKwkJY2FzZSBPUFRfVVNBR0U6 IC8qIGZhbGwtdGhyb3VnaCAqLworCQljYXNlIE9QVF9VTktOT1dOOgorCQkJdXNhZ2UodG9vbG5h bWUpOworCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJfQorCX0KKwlwaXBlQSA9IGNyZWF0ZV9n cmFwaF9ub2RlKFBJUEUsIDApOworCXBpcGVCID0gY3JlYXRlX2dyYXBoX25vZGUoUElQRSwgMSk7 CisJcGlwZUMgPSBjcmVhdGVfZ3JhcGhfbm9kZShQSVBFLCAyKTsKKwlwaXBlRCA9IGNyZWF0ZV9n cmFwaF9ub2RlKFBJUEUsIDMpOworCXNsaWNlMSA9IGNyZWF0ZV9ncmFwaF9ub2RlKERCVUZfU0xJ Q0UsIDApOworCXNsaWNlMiA9IGNyZWF0ZV9ncmFwaF9ub2RlKERCVUZfU0xJQ0UsIDEpOworCisJ bWVtc2V0KHBpcGVzLCAwLCBJOTE1X01BWF9QSVBFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2Rl ICopKTsKKwltZW1zZXQoc2xpY2VzLCAwLCBJOTE1X01BWF9TTElDRVMgKiBzaXplb2Yoc3RydWN0 IEdyYXBoTm9kZSAqKSk7CisKKwlpZiAoZ2VuID09IDExKSB7CisKKwkJLyoKKwkJICogUHJlcGFy ZSB0byBnZW5lcmF0ZSBhc3NpZ25tZW50cyBmb3IgSUNMLCB3aGljaAorCQkgKiBoYXMgMyBwaXBl cyBhbmQgMiBEQnVmIHNsaWNlcy4KKwkJICovCisJCXNsaWNlc1swXSA9IHNsaWNlMTsKKwkJc2xp Y2VzWzFdID0gc2xpY2UyOworCQlwaXBlc1swXSA9IHBpcGVBOworCQlwaXBlc1sxXSA9IHBpcGVC OworCQlwaXBlc1syXSA9IHBpcGVDOworCisJCS8qCisJCSAqIEJTcGVjIDEyNzE2LiBHZW5lcmF0 ZSBEQnVmIFNsaWNlcyB0YWJsZSBmb3IgSUNMLAorCQkgKiBHcmFwaChlYWNoIGVkZ2UgYXNzdW1l ZCB0byBoYXZlIHdlaWdodCAxKToKKwkJICogUGlwZUEgLSBEQlVGX1MxIC0gUGlwZUIgLSBQaXBl QyAtIERCVUZfUzIKKwkJICovCisJCWNvbm5lY3Rfbm9kZXMocGlwZUEsIHNsaWNlMSwgMSk7CisJ CWNvbm5lY3Rfbm9kZXMoc2xpY2UxLCBwaXBlQiwgMSk7CisJCWNvbm5lY3Rfbm9kZXMocGlwZUIs IHBpcGVDLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhwaXBlQywgc2xpY2UyLCAxKTsKKworCQl0cmF2 ZXJzZV9ncmFwaChwaXBlQSwgMCk7CisKKwkJcHJpbnRfdGFibGUocGlwZXMsIDMsIHNsaWNlcywg Mik7CisKKwl9IGVsc2UgaWYgKGdlbiA9PSAxMikgeworCisJCS8qCisJCSAqIFByZXBhcmUgdG8g Z2VuZXJhdGUgYXNzaWdubWVudHMgZm9yIFRHTCwgd2hpY2gKKwkJICogaGFzIDQgcGlwZXMgYW5k IDIgREJ1ZiBzbGljZXMuCisJCSAqLworCQlzbGljZXNbMF0gPSBzbGljZTE7CisJCXNsaWNlc1sx XSA9IHNsaWNlMjsKKwkJcGlwZXNbMF0gPSBwaXBlQTsKKwkJcGlwZXNbMV0gPSBwaXBlQjsKKwkJ cGlwZXNbMl0gPSBwaXBlQzsKKwkJcGlwZXNbM10gPSBwaXBlRDsKKworCQkvKgorCQkgKiBCU3Bl YyA0OTI1NS4gR2VuZXJhdGUgREJ1ZiBTbGljZXMgdGFibGUgZm9yIFRHTC4KKwkJICogR3JhcGgo ZWFjaCBlZGdlIGFzc3VtZWQgdG8gaGF2ZSB3ZWlnaHQgMSk6CisJCSAqIFBpcGVEIC0gREJVRl9T MiAtIFBpcGVDIC0gUGlwZUEgLSBEQlVGX1MxIC0gUGlwZUIKKwkJICovCisJCWNvbm5lY3Rfbm9k ZXMocGlwZUQsIHNsaWNlMiwgMSk7CisJCWNvbm5lY3Rfbm9kZXMoc2xpY2UyLCBwaXBlQywgMSk7 CisJCWNvbm5lY3Rfbm9kZXMocGlwZUMsIHBpcGVBLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhwaXBl QSwgc2xpY2UxLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhzbGljZTEsIHBpcGVCLCAxKTsKKworCQl0 cmF2ZXJzZV9ncmFwaChwaXBlQSwgMCk7CisKKwkJcHJpbnRfdGFibGUocGlwZXMsIDQsIHNsaWNl cywgMik7CisJfQorCisJcmVzZXRfYWxsX25vZGVzKCk7CisKKwkvKgorCSAqIEZ1cnRoZXIgcGxh dGZvcm1zIGNhbiBnZW5lcmF0ZSB0YWJsZSBzYW1lIHdheS4KKwkgKi8KKworCWRlc3Ryb3lfYWxs X25vZGVzKCk7CisKKwlyZXR1cm4gIDA7Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL21lc29uLmJ1 aWxkIGIvdG9vbHMvbWVzb24uYnVpbGQKaW5kZXggZWVjYjEyMmIuLjJiOGRmNGI0IDEwMDY0NAot LS0gYS90b29scy9tZXNvbi5idWlsZAorKysgYi90b29scy9tZXNvbi5idWlsZApAQCAtMzUsNiAr MzUsNyBAQCB0b29sc19wcm9ncyA9IFsKIAknaW50ZWxfd2F0ZXJtYXJrJywKIAknaW50ZWxfZ2Vt X2luZm8nLAogCSdpbnRlbF9ndnRnX3Rlc3QnLAorCSdpbnRlbF9kYnVmX21hcCcsCiAJJ2RwY2Rf cmVnJywKIF0KIHRvb2xfZGVwcyA9IGlndF9kZXBzCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0Cmln dC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==