From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id B8D8B6E28A for ; Mon, 2 Dec 2019 17:32:41 +0000 (UTC) From: Stanislav Lisovskiy Date: Mon, 2 Dec 2019 19:29:44 +0200 Message-Id: <20191202172944.8433-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2] 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 cmlnaHRhd2F5IGFuZCBhbHNvCmZvciB2ZXJpZmljYXRpb24uCgp2MjogUmVtb3ZlZCB1bnVzZWQg aSwgaiwgbWFkZSBzb21lIGZ1bmN0aW9ucyBzdGF0aWMsCiAgICB0byBtYWtlIENJIGNoZWNrZXJz IGEgYml0IGhhcHBpZXIuIEFsc28gaGFkIHRvCiAgICBjaGFuZ2UgSUdUX0xJU1QgdG8gSUdUX0xJ U1RfSEVBRCBhbmQgb3RoZXIgc3R1ZmYsCiAgICBhcyBmdW5jdGlvbnMgc2VlbSB0byBiZSByZW5h bWVkIGluIGxhdGVzdCBtYXN0ZXIuCgpTaWduZWQtb2ZmLWJ5OiBTdGFuaXNsYXYgTGlzb3Zza2l5 IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNvbT4KQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogdG9vbHMvaW50ZWxfZGJ1Zl9tYXAuYyB8 IDcwNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdG9vbHMvbWVz b24uYnVpbGQgICAgICB8ICAgMSArCiAyIGZpbGVzIGNoYW5nZWQsIDcwNyBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvaW50ZWxfZGJ1Zl9tYXAuYwoKZGlmZiAtLWdpdCBh L3Rvb2xzL2ludGVsX2RidWZfbWFwLmMgYi90b29scy9pbnRlbF9kYnVmX21hcC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kMzRjYTc4YQotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL2ludGVsX2RidWZfbWFwLmMKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiBDb3B5cmln aHQgwqkgMjAxOSBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5 IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBj b3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAo dGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0 cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1 c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2Us CisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBl cnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi amVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4 dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJF IElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJF U1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdT IElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOgorICogICAgU3RhbmlzbGF2IExpc292 c2tpeSA8c3RhbmlzbGF2Lmxpc292c2tpeUBpbnRlbC5jb20+CisgKgorICovCisKKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3RfbGlzdC5oIgorCitl bnVtIE5vZGVUeXBlIHsKKwlEQlVGX1NMSUNFLAorCVBJUEUKK307CisKK2NvbnN0IGNoYXIgKm5v ZGVfdHlwZV90b19zdHJbXSA9IHsgIkRCVUZfU0xJQ0UiLCAiUElQRSIgfTsKKworI2RlZmluZSBN QVhfQ09OTkVDVElPTlMgMTAKKyNkZWZpbmUgTUFYX05PREVTIDEwCisjZGVmaW5lIE1BWF9FREdF UyAoTUFYX05PREVTICogMikKKworc3RydWN0IEdyYXBoRWRnZTsKKworLyoKKyAqIEdyYXBoIG5v ZGUsIHdoaWNoIGNhbiBiZSBEQnVmIG9yIFBpcGUKKyAqLworc3RydWN0IEdyYXBoTm9kZSB7CisJ aW50IGlkOworCWVudW0gTm9kZVR5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgdXNlX2NvdW50Owor CWludCB2aXNpdGVkOworCXN0cnVjdCBHcmFwaEVkZ2UgKmNvbm5lY3Rpb25zW01BWF9DT05ORUNU SU9OU107CisJaW50IG51bV9jb25uZWN0aW9uczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhO b2RlICphbGxfbm9kZXNbTUFYX05PREVTXTsKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhFZGdlICphbGxf ZWRnZXNbTUFYX0VER0VTXTsKK3N0YXRpYyBpbnQgbnVtX25vZGVzOworc3RhdGljIGludCBudW1f ZWRnZXM7CisKKy8qCisgKiBHcmFwaCBlZGdlLCB3aGljaCBjb25uZWN0cyBHcmFwaCBub2Rlcwor ICogYW5kIGhhcyBhIHdlaWdodCBwcm9wZXJ0eS4KKyAqLworc3RydWN0IEdyYXBoRWRnZSB7CisJ c3RydWN0IGlndF9saXN0X2hlYWQgZWxlbTsKKwl1bnNpZ25lZCBpbnQgd2VpZ2h0OworCXN0cnVj dCBHcmFwaE5vZGUgKm5vZGU7Cit9OworCitzdGF0aWMgc3RydWN0IEdyYXBoTm9kZSAqY3JlYXRl X2dyYXBoX25vZGUoZW51bSBOb2RlVHlwZSB0eXBlLCBpbnQgaWQpCit7CisJc3RydWN0IEdyYXBo Tm9kZSAqbm9kZSA9IDA7CisKKwlpZiAobnVtX25vZGVzID49IE1BWF9OT0RFUykgeworCQlpZ3Rf aW5mbygiVG9vIG11Y2ggbm9kZXMgJWQiLCBudW1fbm9kZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlub2RlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlKSk7CisJbm9kZS0+dHlw ZSA9IHR5cGU7CisJbm9kZS0+aWQgPSBpZDsKKwlub2RlLT51c2VfY291bnQgPSAwOworCW5vZGUt PnZpc2l0ZWQgPSAwOworCW1lbXNldChub2RlLT5jb25uZWN0aW9ucywgMCwKKwkJCU1BWF9DT05O RUNUSU9OUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhFZGdlICopKTsKKwlub2RlLT5udW1fY29ubmVj dGlvbnMgPSAwOworCisJYWxsX25vZGVzW251bV9ub2Rlc10gPSBub2RlOworCW51bV9ub2Rlcysr OworCisJcmV0dXJuIG5vZGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgR3JhcGhFZGdlICpjcmVhdGVf Z3JhcGhfZWRnZShpbnQgd2VpZ2h0LCBzdHJ1Y3QgR3JhcGhOb2RlICpub2RlKQoreworCXN0cnVj dCBHcmFwaEVkZ2UgKmVkZ2UgPSAwOworCisJaWYgKG51bV9lZGdlcyA+PSBNQVhfRURHRVMpIHsK KwkJaWd0X2luZm8oIlRvbyBtdWNoIGVkZ2VzICVkIiwgbnVtX2VkZ2VzKTsKKwkJcmV0dXJuIE5V TEw7CisJfQorCisJZWRnZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IEdyYXBoRWRnZSkpOworCisJ ZWRnZS0+ZWxlbS5wcmV2ID0gJmVkZ2UtPmVsZW07CisJZWRnZS0+ZWxlbS5uZXh0ID0gJmVkZ2Ut PmVsZW07CisJZWRnZS0+bm9kZSA9IG5vZGU7CisJZWRnZS0+d2VpZ2h0ID0gd2VpZ2h0OworCisJ YWxsX2VkZ2VzW251bV9lZGdlc10gPSBlZGdlOworCW51bV9lZGdlcysrOworCisJcmV0dXJuIGVk Z2U7Cit9CisKK3N0YXRpYyB2b2lkIGNvbm5lY3Rfbm9kZXMoc3RydWN0IEdyYXBoTm9kZSAqbm9k ZTEsIHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUyLCBpbnQgd2VpZ2h0KQoreworCXN0cnVjdCBHcmFw aEVkZ2UgKmVkZ2UxOworCXN0cnVjdCBHcmFwaEVkZ2UgKmVkZ2UyOworCisJaWYgKG5vZGUxLT5u dW1fY29ubmVjdGlvbnMgPj0gTUFYX0NPTk5FQ1RJT05TKSB7CisJCWlndF9pbmZvKCJOb2RlICVk IGhhcyB0b28gbXVjaCBjb25uZWN0aW9uc1xuIiwgbm9kZTEtPmlkKTsKKwkJcmV0dXJuOworCX0K KworCWlmIChub2RlMi0+bnVtX2Nvbm5lY3Rpb25zID49IE1BWF9DT05ORUNUSU9OUykgeworCQlp Z3RfaW5mbygiTm9kZSAlZCBoYXMgdG9vIG11Y2ggY29ubmVjdGlvbnNcbiIsIG5vZGUyLT5pZCk7 CisJCXJldHVybjsKKwl9CisKKwllZGdlMSA9IGNyZWF0ZV9ncmFwaF9lZGdlKHdlaWdodCwgbm9k ZTEpOworCWVkZ2UyID0gY3JlYXRlX2dyYXBoX2VkZ2Uod2VpZ2h0LCBub2RlMik7CisKKwlub2Rl MS0+Y29ubmVjdGlvbnNbbm9kZTEtPm51bV9jb25uZWN0aW9uc10gPSBlZGdlMjsKKwlub2RlMS0+ bnVtX2Nvbm5lY3Rpb25zKys7CisJbm9kZTItPmNvbm5lY3Rpb25zW25vZGUyLT5udW1fY29ubmVj dGlvbnNdID0gZWRnZTE7CisJbm9kZTItPm51bV9jb25uZWN0aW9ucysrOworfQorCitzdGF0aWMg dm9pZCByZXNldF9ub2RlKHN0cnVjdCBHcmFwaE5vZGUgKm5vZGUpCit7CisJbm9kZS0+dXNlX2Nv dW50ID0gMDsKKwlub2RlLT52aXNpdGVkID0gMDsKKwltZW1zZXQobm9kZS0+Y29ubmVjdGlvbnMs IDAsCisJCU1BWF9DT05ORUNUSU9OUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhFZGdlICopKTsKKwlu b2RlLT5udW1fY29ubmVjdGlvbnMgPSAwOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X25vZGUo c3RydWN0IEdyYXBoTm9kZSAqbm9kZSkKK3sKKwlmcmVlKG5vZGUpOworfQorCitzdGF0aWMgdm9p ZCBkZXN0cm95X2VkZ2Uoc3RydWN0IEdyYXBoRWRnZSAqZWRnZSkKK3sKKwlmcmVlKGVkZ2UpOwor fQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2FsbF9lZGdlcyh2b2lkKQoreworCWludCBpOworCisJ Zm9yIChpID0gMDsgaSA8IG51bV9lZGdlczsgaSsrKSB7CisJCWRlc3Ryb3lfZWRnZShhbGxfZWRn ZXNbaV0pOworCX0KKwludW1fZWRnZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2Fs bF9ub2Rlcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9ub2Rlczsg aSsrKSB7CisJCWRlc3Ryb3lfbm9kZShhbGxfbm9kZXNbaV0pOworCX0KKwludW1fbm9kZXMgPSAw OworfQorCitzdGF0aWMgdm9pZCByZXNldF9hbGxfbm9kZXModm9pZCkKK3sKKwlpbnQgaTsKKwor CWRlc3Ryb3lfYWxsX2VkZ2VzKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX25vZGVzOyBpKysp IHsKKwkJcmVzZXRfbm9kZShhbGxfbm9kZXNbaV0pOworCX0KK30KKworLyoKKyAqIFRyYXZlcnNl IGFuZCB0cnkgdG8gcHJpbnQgZ3JhcGggaW4gYQorICogc29tZXdoYXQgZ3JhcGhpY2FsIGZvcm0u CisgKi8KK3N0YXRpYyB2b2lkIHRyYXZlcnNlX2dyYXBoKHN0cnVjdCBHcmFwaE5vZGUgKnN0YXJ0 X25vZGUsCisJCQkgICBpbnQgZGVwdGgpCit7CisJaW50IGksIHNwYWNlOworCisJaWYgKCFkZXB0 aCkKKwkJaWd0X2luZm8oIkdyYXBoOiBcbiIpOworCisJZm9yIChzcGFjZSA9IDA7IHNwYWNlIDwg ZGVwdGggKiA0OyBzcGFjZSsrKQorCQlpZ3RfaW5mbygiICIpOworCisJc3RhcnRfbm9kZS0+dmlz aXRlZCsrOworCWlndF9pbmZvKCJUeXBlICVzIGlkICVkXG4iLCBub2RlX3R5cGVfdG9fc3RyW3N0 YXJ0X25vZGUtPnR5cGVdLAorCQkgc3RhcnRfbm9kZS0+aWQpOworCWZvciAoaSA9IDA7IGkgPCBz dGFydF9ub2RlLT5udW1fY29ubmVjdGlvbnM7IGkrKykgeworCQlpZiAoIXN0YXJ0X25vZGUtPmNv bm5lY3Rpb25zW2ldLT5ub2RlLT52aXNpdGVkKSB7CisJCQlmb3IgKHNwYWNlID0gMDsgc3BhY2Ug PCAoZGVwdGggKyAxKSAqIDQ7IHNwYWNlKyspCisJCQkJaWd0X2luZm8oIiAiKTsKKwkJCWlndF9p bmZvKCIoJWQpLT4gXG4iLCBzdGFydF9ub2RlLT5jb25uZWN0aW9uc1tpXS0+d2VpZ2h0KTsKKwkJ CXRyYXZlcnNlX2dyYXBoKHN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldLT5ub2RlLCBkZXB0aCsy KTsKKwkJCXN0YXJ0X25vZGUtPmNvbm5lY3Rpb25zW2ldLT5ub2RlLT52aXNpdGVkLS07CisJCX0K Kwl9Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHNlYXJjaGVzIGZvciBh IGZyZWUgREJ1ZiBzbGljZQorICogZm9yIGNvcnJlc3BvbmRlbnQgcGlwZSwgYmFzZWQgb24gZGlm ZmVyZW50IGNvbnN0cmFpbnRzLCBsaWtlCisgKiB3ZWlnaHQsIHVzYWdlIGNvdW50LiBUaGlzIGFs Z29yaXRobSBpcyAiZ3JlZWR5IiB3aGljaCBtZWFucworICogdGhhdCBpdCBhY2NvdW50cyBmb3Ig bG9jYWwgb3B0aW11bSBvbmx5LCB3aGljaCBtZWFucyB0aGF0CisgKiB0b3RhbCBjb21wYXJpc29u IGhhcyB0byBiZSBkb25lIGluIHRoZSBlbmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgR3JhcGhOb2Rl ICpmaW5kX3NsaWNlX2Zvcl9waXBlKHN0cnVjdCBHcmFwaE5vZGUgKnN0YXJ0X25vZGUsCisJCQkJ CSAgICAgaW50IGFjY193ZWlnaHQsIGludCBtYXhfdXNlX2NvdW50LAorCQkJCQkgICAgIHVuc2ln bmVkIGludCAqdG90YWxfd2VpZ2h0LAorCQkJCQkgICAgIGludCBkZXB0aCwKKwkJCQkJICAgICBp bnQgc2tpcCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbWluX3dlaWdodCA9IH4wLCBtaW5f dXNlX2NvdW50ID0gfjA7CisJc3RydWN0IEdyYXBoRWRnZSAqbWluX2VkZ2UgPSAwOworCXN0cnVj dCBHcmFwaE5vZGUgKm5vZGUgPSBOVUxMOworCUlHVF9MSVNUX0hFQUQoc2xpY2VfbGlzdCk7CisK KwlzdGFydF9ub2RlLT52aXNpdGVkKys7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhcnRfbm9kZS0+ bnVtX2Nvbm5lY3Rpb25zOyBpKyspIHsKKwkJc3RydWN0IEdyYXBoRWRnZSAqY3VyX2VkZ2UgPSBz dGFydF9ub2RlLT5jb25uZWN0aW9uc1tpXTsKKworCQkvKgorCQkgKiBEQnVmIHNsaWNlcyB0byBi ZSBhZGRlZCBmaXJzdAorCQkgKi8KKwkJaWYgKGN1cl9lZGdlLT5ub2RlLT50eXBlID09IERCVUZf U0xJQ0UpIHsKKwkJCWlmIChjdXJfZWRnZS0+bm9kZS0+dXNlX2NvdW50IDwgbWluX3VzZV9jb3Vu dCkgeworCQkJCW1pbl91c2VfY291bnQgPSBjdXJfZWRnZS0+bm9kZS0+dXNlX2NvdW50OworCQkJ CW1pbl93ZWlnaHQgPSBhY2Nfd2VpZ2h0ICsgY3VyX2VkZ2UtPndlaWdodDsKKwkJCQltaW5fZWRn ZSA9IGN1cl9lZGdlOworCQkJCWlndF9saXN0X2FkZCgmY3VyX2VkZ2UtPmVsZW0sICZzbGljZV9s aXN0KTsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoY3VyX2VkZ2UtPm5vZGUtPnVzZV9j b3VudCA9PQorCQkJCSAgIG1pbl9lZGdlLT5ub2RlLT51c2VfY291bnQpIHsKKwkJCQlpZiAoKGFj Y193ZWlnaHQgKyBjdXJfZWRnZS0+d2VpZ2h0KSA8IG1pbl93ZWlnaHQpIHsKKwkJCQkJbWluX3dl aWdodCA9IGFjY193ZWlnaHQgKyBjdXJfZWRnZS0+d2VpZ2h0OworCQkJCQltaW5fZWRnZSA9IGN1 cl9lZGdlOworCQkJCQlpZ3RfbGlzdF9hZGQoJmN1cl9lZGdlLT5lbGVtLCAmc2xpY2VfbGlzdCk7 CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZ3RfbGlzdF9hZGRfdGFpbCgm Y3VyX2VkZ2UtPmVsZW0sICZzbGljZV9saXN0KTsKKwl9CisKKwlpZiAoaWd0X2xpc3RfZW1wdHko JnNsaWNlX2xpc3QpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogSXRlcmF0ZSB0aHJvdWdo IG5laWdoYm91cmluZyBzbGljZXMsIGNoZWNraW5nCisJICogaWYgaXQncyB1c2UgY291bnQgYWxs b3dzIHVzYWdlIGFuZCBza2lwIGlmIG5lZWRlZCwKKwkgKiBza2lwcyBhcmUgbmVlZGVkIHdoZW4g d2UgdXNlIG11bHRpcGxlIHNsaWNlcyBmb3IKKwkgKiBzYW1lIHBpcGUgdG8gcHJldmVudCBhbGdv cml0aG0gZnJvbSByZXR1cm5pbmcgdGhlCisJICogc2FtZSBEQnVmLgorCSAqLworCWlndF9saXN0 X2Zvcl9lYWNoX2VudHJ5KG1pbl9lZGdlLCAmc2xpY2VfbGlzdCwgZWxlbSkgeworCQlpZiAobWlu X2VkZ2UtPm5vZGUtPnR5cGUgPT0gREJVRl9TTElDRSkgeworCQkJaWYgKG1pbl9lZGdlLT5ub2Rl LT51c2VfY291bnQgPCBtYXhfdXNlX2NvdW50KSB7CisJCQkJaWYgKCFza2lwKSB7CisJCQkJCW1p bl9lZGdlLT5ub2RlLT51c2VfY291bnQrKzsKKwkJCQkJKnRvdGFsX3dlaWdodCA9IGFjY193ZWln aHQgKyBtaW5fZWRnZS0+d2VpZ2h0OworCQkJCQlpZiAoZGVwdGggPT0gMCkKKwkJCQkJCXN0YXJ0 X25vZGUtPnZpc2l0ZWQgPSAwOworCQkJCQlyZXR1cm4gbWluX2VkZ2UtPm5vZGU7CisJCQkJfQor CQkJfQorCQkJaWYgKHNraXApCisJCQkJc2tpcC0tOworCQl9CisJfQorCisJLyoKKwkgKiBJZiBj b3VsZG4ndCBmaW5kIHN1aXRhYmxlIERCdWYgbm9kZSBmcm9tIG91cgorCSAqIG5laWdoYm91cnMs IGhhdmUgdG8gY29udGludWUgZnVydGhlciwgY2hlY2tpbmcKKwkgKiB2aXNpdGVkIGZsYWcsIHRv IHByZXZlbnQgbG9vcHMuCisJICovCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkobWluX2VkZ2Us ICZzbGljZV9saXN0LCBlbGVtKSB7CisJCWlmICghbWluX2VkZ2UtPm5vZGUtPnZpc2l0ZWQpIHsK KwkJCW5vZGUgPSBmaW5kX3NsaWNlX2Zvcl9waXBlKG1pbl9lZGdlLT5ub2RlLAorCQkJCQkJICAg YWNjX3dlaWdodCArIG1pbl9lZGdlLT53ZWlnaHQsCisJCQkJCQkgICBtYXhfdXNlX2NvdW50LCB0 b3RhbF93ZWlnaHQsCisJCQkJCQkgICBkZXB0aCArIDEsIHNraXApOworCQkJbWluX2VkZ2UtPm5v ZGUtPnZpc2l0ZWQtLTsKKwkJCWlmIChub2RlKSB7CisJCQkJaWYgKGRlcHRoID09IDApCisJCQkJ CXN0YXJ0X25vZGUtPnZpc2l0ZWQgPSAwOworCQkJCXJldHVybiBub2RlOworCQkJfQorCQl9CisJ fQorCWlmIChkZXB0aCA9PSAwKQorCQlzdGFydF9ub2RlLT52aXNpdGVkID0gMDsKKwlyZXR1cm4g TlVMTDsKK30KKworc3RhdGljIGludCBod2VpZ2h0MzIoaW50IG1hc2spCit7CisJaW50IGk7CisJ aW50IGNvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQlpZiAoKDE8PGkp ICYgbWFzaykKKwkJCWNvdW50ICs9IDE7CisJcmV0dXJuIGNvdW50OworfQorCisjZGVmaW5lIEk5 MTVfTUFYX1BJUEVTIDQKKyNkZWZpbmUgSTkxNV9NQVhfU0xJQ0VTX1BFUl9QSVBFIDIKKyNkZWZp bmUgSTkxNV9NQVhfU0xJQ0VTIChJOTE1X01BWF9QSVBFUyAqIEk5MTVfTUFYX1NMSUNFU19QRVJf UElQRSkKKworY29uc3QgY2hhciAqcGlwZV9uYW1lc1tdID0geyAiUElQRV9BIiwgIlBJUEVfQiIs ICJQSVBFX0MiLCAiUElQRV9EIiB9OworCitzdGF0aWMgaW50IGZhY3RvcmlhbChpbnQgbikKK3sK KwlpZiAobiA8PSAxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gbiAqIGZhY3RvcmlhbChuIC0gMSk7 Cit9CisKK3N0YXRpYyB2b2lkIGRvX3N3YXAoc3RydWN0IEdyYXBoTm9kZSAqKnBpcGVfbm9kZXMs IGludCBtLCBpbnQgbikKK3sKKwkqKCh1bnNpZ25lZCBsb25nICopcGlwZV9ub2RlcyArIG0pIF49 ICooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25vZGVzICsgbik7CisJKigodW5zaWduZWQgbG9uZyAq KXBpcGVfbm9kZXMgKyBuKSBePSAqKCh1bnNpZ25lZCBsb25nICopcGlwZV9ub2RlcyArIG0pOwor CSooKHVuc2lnbmVkIGxvbmcgKilwaXBlX25vZGVzICsgbSkgXj0gKigodW5zaWduZWQgbG9uZyAq KXBpcGVfbm9kZXMgKyBuKTsKK30KKworc3RydWN0IFBpcGVOb2Rlc0NvbWJpbmF0aW9uIHsKKwl1 bnNpZ25lZCBpbnQgdG90YWxfd2VpZ2h0OworCXN0cnVjdCBHcmFwaE5vZGUgKnBpcGVfbm9kZXNb STkxNV9NQVhfUElQRVNdOworCXN0cnVjdCBHcmFwaE5vZGUgKnNsaWNlc1tJOTE1X01BWF9TTElD RVNdOworfTsKKworc3RydWN0IEl0ZXJhdGVDb250ZXh0IHsKKwlzdHJ1Y3QgUGlwZU5vZGVzQ29t YmluYXRpb24gbWluX2NvbWI7CisJaW50IG1heF91c2VfY291bnQ7CisJaW50IG51bV9waXBlczsK KwlpbnQgbnVtX3NsaWNlczsKKwlpbnQgc2xpY2VzX3Blcl9waXBlOworCWludCBtYXhfY29tYmlu YXRpb25zOworfTsKKworc3RydWN0IFBpcGVEQnVmIHsKKwlzdHJ1Y3QgR3JhcGhOb2RlICpwaXBl OworCXN0cnVjdCBHcmFwaE5vZGUgKmRidWZbSTkxNV9NQVhfU0xJQ0VTX1BFUl9QSVBFXTsKK307 CisKK3N0YXRpYyB2b2lkIGNvbXBhcmVfd2VpZ2h0KHN0cnVjdCBJdGVyYXRlQ29udGV4dCAqY3R4 LAorCQkJICAgc3RydWN0IFBpcGVOb2Rlc0NvbWJpbmF0aW9uICpjb21iKQoreworCXVuc2lnbmVk IGludCB3ZWlnaHQ7CisJaW50IGogPSAwOworCWludCBwaXBlID0gMDsKKwlpbnQgc2tpcCA9IDA7 CisJaW50IHNsaWNlX251bSA9IDA7CisKKwljb21iLT50b3RhbF93ZWlnaHQgPSAwOworCisJLyoK KwkgKiBHZXQgYSBmcmVlIERCdWYgc2xpY2UgZm9yIGVhY2ggcGlwZSwgdGhlbgorCSAqIGNhbGN1 bGF0ZSB0b3RhbCB3ZWlnaHQsIHdoaWNoIHdpbGwgYmUKKwkgKiB0aGVuIGNvbXBhcmVkIHRvIG1p bmltYWwgd2VpZ2h0IHRvIGZpbmQKKwkgKiBjb21iaW5hdGlvbiB3aXRoIHRvdGFsIG1pbmltYWwg d2VpZ2h0LgorCSAqLworCXdoaWxlIChwaXBlIDwgSTkxNV9NQVhfUElQRVMpIHsKKwkJaWYgKGNv bWItPnBpcGVfbm9kZXNbcGlwZV0pIHsKKwkJCWNvbWItPnNsaWNlc1tqXSA9CisJCQkgICAgZmlu ZF9zbGljZV9mb3JfcGlwZShjb21iLT5waXBlX25vZGVzW3BpcGVdLAorCQkJCQkJMCwgY3R4LT5t YXhfdXNlX2NvdW50LAorCQkJCQkJJndlaWdodCwgMCwgc2tpcCk7CisJCQlpZiAoY29tYi0+c2xp Y2VzW2pdKSB7CisJCQkJaWYgKHNsaWNlX251bSA8IGN0eC0+c2xpY2VzX3Blcl9waXBlKQorCQkJ CQlza2lwKys7CisJCQkJY29tYi0+dG90YWxfd2VpZ2h0ICs9IHdlaWdodDsKKwkJCX0gZWxzZSB7 CisJCQkJaWd0X2luZm8oIkNvdWxkIG5vdCBmaW5kIHNsaWNlIGZvciBwaXBlICVkIVxuIiwKKwkJ CQkJIGNvbWItPnBpcGVfbm9kZXNbcGlwZV0tPmlkKTsKKwkJCX0KKwkJCXNsaWNlX251bSsrOwor CisJCQlpZiAoc2xpY2VfbnVtID49IGN0eC0+c2xpY2VzX3Blcl9waXBlKSB7CisJCQkJc2xpY2Vf bnVtID0gMDsKKwkJCQlwaXBlKys7CisJCQkJc2tpcCA9IDA7CisJCQl9CisJCQlqKys7CisJCX0g ZWxzZSB7CisJCQlwaXBlKys7CisJCQlqICs9IGN0eC0+c2xpY2VzX3Blcl9waXBlOworCQkJc2tp cCA9IDA7CisJCX0KKwl9CisKKwlmb3IgKGogPSAwOyBqIDwgSTkxNV9NQVhfU0xJQ0VTOyBqKysp IHsKKwkJaWYgKGNvbWItPnNsaWNlc1tqXSkKKwkJCWNvbWItPnNsaWNlc1tqXS0+dXNlX2NvdW50 ID0gMDsKKwl9CisKKwlpZiAoY3R4LT5taW5fY29tYi50b3RhbF93ZWlnaHQgPiBjb21iLT50b3Rh bF93ZWlnaHQpIHsKKwkJbWVtY3B5KCZjdHgtPm1pbl9jb21iLCBjb21iLAorCQkgICAgICAgc2l6 ZW9mKHN0cnVjdCBQaXBlTm9kZXNDb21iaW5hdGlvbikpOworCX0KK30KKworLyoKKyAqIEdlbmVy YXRlIGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgZm9yIGVsZW1lbnRzIGluCisgKiBwaXBlIGFy cmF5KHRvdGFsIGlzIGNhbGN1bGF0ZWQgYXMgbiEpLgorICovCitzdGF0aWMgdm9pZCBpdGVyYXRl X2FsbF9jb21iaW5hdGlvbnMoc3RydWN0IEl0ZXJhdGVDb250ZXh0ICpjdHgsCisJCQkJICAgICBz dHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCQkgICAgIGludCBzdGFydCwgaW50IHN0 ZXAsCisJCQkJICAgICB2b2lkICgqZnVuYykoc3RydWN0IEl0ZXJhdGVDb250ZXh0ICpjdHgsCisJ CQkJICAgICBzdHJ1Y3QgUGlwZU5vZGVzQ29tYmluYXRpb24gKmNvbWIpKQoreworCWludCBpLCBq OworCXN0cnVjdCBHcmFwaE5vZGUgKm5vZGVzW0k5MTVfTUFYX1BJUEVTXTsKKwlzdHJ1Y3QgUGlw ZU5vZGVzQ29tYmluYXRpb24gY29tYjsKKworCW1lbWNweShjb21iLnBpcGVfbm9kZXMsIHBpcGVf bm9kZXMsCisJICAgICAgIEk5MTVfTUFYX1BJUEVTICogc2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUg KikpOworCW1lbXNldChjb21iLnNsaWNlcywgMCwKKwkgICAgICAgSTkxNV9NQVhfU0xJQ0VTICog c2l6ZW9mKHN0cnVjdCBHcmFwaE5vZGUgKikpOworCisJaWYgKGZ1bmMpCisJCSgqZnVuYykoY3R4 LCAmY29tYik7CisKKwlpZiAoKHN0ZXAgPT0gMCkgfHwgKGN0eC0+bnVtX3BpcGVzID09IDEpKQor CQlyZXR1cm47CisKKwlmb3IgKGogPSBzdGVwOyBqID4gMDsgai0tKSB7CisJCWZvciAoaSA9IHN0 YXJ0OyBpIDwgSTkxNV9NQVhfUElQRVMgLSBqOyBpKyspIHsKKwkJCWlmICghcGlwZV9ub2Rlc1tp XSB8fCAhcGlwZV9ub2Rlc1tpICsgal0pCisJCQkJY29udGludWU7CisJCQltZW1jcHkobm9kZXMs IHBpcGVfbm9kZXMsCisJCQkgICAgICAgSTkxNV9NQVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdy YXBoTm9kZSAqKSk7CisJCQlkb19zd2FwKG5vZGVzLCBpLCBpICsgaik7CisJCQlpdGVyYXRlX2Fs bF9jb21iaW5hdGlvbnMoY3R4LCBub2RlcywgaSArIDEsCisJCQkJCQkgc3RlcCAtIDEsIGZ1bmMp OworCQl9CisJfQorfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGFuZCBwcmlu dHMgb3B0aW1hbAorICogd2VpZ2h0LWJhc2VkIERCdWYgYXNzaWdubWVudCBmb3IgYWN0aXZlIHBp cGVzLgorICovCitzdGF0aWMgdm9pZAorcHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpbnQgYWN0 aXZlX3BpcGVzLAorCQkJICBzdHJ1Y3QgR3JhcGhOb2RlICoqcGlwZV9ub2RlcywKKwkJCSAgaW50 IG51bV9zbGljZXMpCit7CisJaW50IGk7CisJaW50IG51bV9waXBlcyA9IGh3ZWlnaHQzMihhY3Rp dmVfcGlwZXMpOworCWludCBtYXhfdXNlX2NvdW50ID0gbnVtX3NsaWNlcyA8IG51bV9waXBlcyA/ IDIgOiAxOworCWludCBwaXBlID0gMDsKKwlpbnQgc2xpY2VzX3Blcl9waXBlID0gbWF4KG51bV9z bGljZXMgLyBudW1fcGlwZXMsIDEpOworCXN0cnVjdCBJdGVyYXRlQ29udGV4dCBjdHg7CisJc3Ry dWN0IFBpcGVEQnVmIHBpcGVfZGJ1ZltJOTE1X01BWF9QSVBFU107CisKKwltZW1jcHkoY3R4Lm1p bl9jb21iLnBpcGVfbm9kZXMsIHBpcGVfbm9kZXMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgR3Jh cGhOb2RlICopICogSTkxNV9NQVhfUElQRVMpOworCW1lbXNldChjdHgubWluX2NvbWIuc2xpY2Vz LCAwLAorCSAgICAgICBJOTE1X01BWF9TTElDRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAq KSk7CisJY3R4Lm1pbl9jb21iLnRvdGFsX3dlaWdodCA9IH4wOworCWN0eC5tYXhfdXNlX2NvdW50 ID0gbWF4X3VzZV9jb3VudDsKKwljdHgubnVtX3BpcGVzID0gbnVtX3BpcGVzOworCWN0eC5udW1f c2xpY2VzID0gbnVtX3NsaWNlczsKKwljdHguc2xpY2VzX3Blcl9waXBlID0gc2xpY2VzX3Blcl9w aXBlOworCWN0eC5tYXhfY29tYmluYXRpb25zID0gZmFjdG9yaWFsKG51bV9waXBlcyk7CisKKwlp dGVyYXRlX2FsbF9jb21iaW5hdGlvbnMoJmN0eCwgcGlwZV9ub2RlcywKKwkJCQkgMCwgSTkxNV9N QVhfUElQRVMgLSAxLCBjb21wYXJlX3dlaWdodCk7CisKKwlpZ3RfaW5mbygiQ29tYmluYXRpb24g d2l0aCBsZWFzdCB3ZWlnaHQgJWQodG90YWwgY29tYmluYXRpb25zICVkKTpcbiIsCisJCSBjdHgu bWluX2NvbWIudG90YWxfd2VpZ2h0LCBjdHgubWF4X2NvbWJpbmF0aW9ucyk7CisKKwltZW1zZXQo cGlwZV9kYnVmLCAwLCBzaXplb2Yoc3RydWN0IFBpcGVEQnVmKSAqIEk5MTVfTUFYX1BJUEVTKTsK KworCWZvciAoaSA9IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmIChjdHgubWlu X2NvbWIucGlwZV9ub2Rlc1tpXSkgeworCQkJaW50IHBpcGVfaW5kZXggPSBjdHgubWluX2NvbWIu cGlwZV9ub2Rlc1tpXS0+aWQ7CisKKwkJCXBpcGVfZGJ1ZltwaXBlX2luZGV4XS5waXBlID0gY3R4 Lm1pbl9jb21iLnBpcGVfbm9kZXNbaV07CisJCQltZW1jcHkoJnBpcGVfZGJ1ZltwaXBlX2luZGV4 XS5kYnVmLAorCQkJICAgICAgICZjdHgubWluX2NvbWIuc2xpY2VzW2kgKiBzbGljZXNfcGVyX3Bp cGVdLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopICogc2xpY2VzX3Blcl9w aXBlKTsKKwkJfQorCX0KKworCWlndF9pbmZvKCJ7ICIpOworCXBpcGUgPSAwOworCWZvciAoaSA9 IDA7IGkgPCBJOTE1X01BWF9QSVBFUzsgaSsrKSB7CisJCWlmIChwaXBlX2RidWZbaV0ucGlwZSkg eworCQkJaWd0X2luZm8oIkJJVCglcykiLCBwaXBlX25hbWVzW3BpcGVfZGJ1ZltpXS5waXBlLT5p ZF0pOworCQkJaWYgKHBpcGUgPCAobnVtX3BpcGVzIC0gMSkpCisJCQkJaWd0X2luZm8oIiB8ICIp OworCQkJcGlwZSsrOworCQl9CisJfQorCWlndF9pbmZvKCIsIHsgIik7CisJZm9yIChwaXBlID0g MDsgcGlwZSA8IEk5MTVfTUFYX1BJUEVTOyBwaXBlKyspIHsKKwkJaWYgKHBpcGVfZGJ1ZltwaXBl XS5waXBlKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2xpY2VzX3Blcl9waXBlOyBpKyspIHsKKwkJ CQlpbnQgc2xpY2VfaW5kZXhfY29udmVydGVkID0KKwkJCQkJCXBpcGVfZGJ1ZltwaXBlXS5kYnVm W2ldLT5pZDsKKworCQkJCWlmIChpIDwgKHNsaWNlc19wZXJfcGlwZSAtIDEpKSB7CisJCQkJCWln dF9pbmZvKCJEQlVGX1MlZF9CSVQgfCAiLAorCQkJCQkJIHNsaWNlX2luZGV4X2NvbnZlcnRlZCAr IDEpOworCQkJCX0gZWxzZSB7CisJCQkJCWlndF9pbmZvKCJEQlVGX1MlZF9CSVQiLAorCQkJCQkJ IHNsaWNlX2luZGV4X2NvbnZlcnRlZCArIDEpOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJ CWlndF9pbmZvKCIwIik7CisJCX0KKwkJaWYgKHBpcGUgPCAoSTkxNV9NQVhfUElQRVMgLSAxKSkK KwkJCWlndF9pbmZvKCIsICIpOworCQllbHNlCisJCQlicmVhazsKKwl9CisJaWd0X2luZm8oIiB9 IH0sXG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdGFibGUoc3RydWN0IEdyYXBoTm9kZSAq KnBpcGVzLCBpbnQgbnVtX3BpcGVzLAorCQkJc3RydWN0IEdyYXBoTm9kZSAqKnNsaWNlcywgaW50 IG51bV9zbGljZXMpCit7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IG51bV9jb21iaW5hdGlv bnMgPSAxIDw8IG51bV9waXBlczsKKworCWlmIChudW1fcGlwZXMgPiBJOTE1X01BWF9QSVBFUykg eworCQlpZ3RfaW5mbygiVG9vIG1hbnkgcGlwZXMgJWRcbiIsIG51bV9waXBlcyk7CisJCXJldHVy bjsKKwl9CisKKwlpZiAobnVtX3NsaWNlcyA+IEk5MTVfTUFYX1NMSUNFUykgeworCQlpZ3RfaW5m bygiVG9vIG1hbnkgc2xpY2VzICVkXG4iLCBudW1fc2xpY2VzKTsKKwkJcmV0dXJuOworCX0KKwor CWZvciAoaSA9IDE7IGkgPCBudW1fY29tYmluYXRpb25zOyBpKyspIHsKKwkJc3RydWN0IEdyYXBo Tm9kZSAqdG1wW0k5MTVfTUFYX1BJUEVTXTsKKworCQltZW1jcHkodG1wLCBwaXBlcywgSTkxNV9N QVhfUElQRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisKKwkJZm9yIChqID0gMDsg aiA8IG51bV9zbGljZXM7IGorKykgeworCQkJaWYgKHNsaWNlc1tqXSkKKwkJCQlzbGljZXNbal0t PnVzZV9jb3VudCA9IDA7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BpcGVzOyBqKysp IHsKKwkJCWlmICghKGkgJiAoMSA8PCBqKSkpIHsKKwkJCQl0bXBbal0gPSAwOworCQkJfQorCQl9 CisKKwkJcHJpbnRfZGJ1Zl9tYXNrX2Zvcl9waXBlcyhpLCB0bXAsIEk5MTVfTUFYX1NMSUNFU19Q RVJfUElQRSk7CisJfQorfQorCitlbnVtIG9wdCB7CisJT1BUX1VOS05PV04gPSAnPycsCisJT1BU X0VORCA9IC0xLAorCU9QVF9HRU4sCisJT1BUX1VTQUdFLAorfTsKKworc3RhdGljIHZvaWQgdXNh Z2UoY29uc3QgY2hhciAqdG9vbG5hbWUpCit7CisJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogJXMi LCB0b29sbmFtZSk7CisJZnByaW50ZihzdGRlcnIsICIgLS1nZW49PEdFTj4iCisJCSIgWy0taGVs cF1cbiIpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJc3RydWN0 IEdyYXBoTm9kZSAqcGlwZXNbSTkxNV9NQVhfUElQRVNdOworCXN0cnVjdCBHcmFwaE5vZGUgKnNs aWNlc1tJOTE1X01BWF9TTElDRVNdOworCXN0cnVjdCBHcmFwaE5vZGUgKnBpcGVBLCAqcGlwZUIs ICpwaXBlQywgKnBpcGVEOworCXN0cnVjdCBHcmFwaE5vZGUgKnNsaWNlMSwgKnNsaWNlMjsKKwlp bnQgZ2VuID0gMTIsIGluZGV4OworCWVudW0gb3B0IG9wdDsKKwljaGFyICplbmRwOworCWNvbnN0 IGNoYXIgKnRvb2xuYW1lID0gYXJndlswXTsKKwlzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRpb25z W10gPSB7CisJCXsgImdlbiIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAlPUFRfR0VOIH0sCisJ CXsgImhlbHAiLAlub19hcmd1bWVudCwJCU5VTEwsCU9QVF9VU0FHRSB9LAorCQl7IDAgfQorCX07 CisKKwludW1fZWRnZXMgPSAwOworCW51bV9ub2RlcyA9IDA7CisKKwlmb3IgKG9wdCA9IDA7IG9w dCAhPSBPUFRfRU5EOyApIHsKKwkJb3B0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIG9w dGlvbnMsICZpbmRleCk7CisKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSBPUFRfR0VOOgorCQkJ Z2VuID0gc3RydG91bChvcHRhcmcsICZlbmRwLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIE9QVF9F TkQ6CisJCQlicmVhazsKKwkJY2FzZSBPUFRfVVNBR0U6IC8qIGZhbGwtdGhyb3VnaCAqLworCQlj YXNlIE9QVF9VTktOT1dOOgorCQkJdXNhZ2UodG9vbG5hbWUpOworCQkJcmV0dXJuIEVYSVRfRkFJ TFVSRTsKKwkJfQorCX0KKwlwaXBlQSA9IGNyZWF0ZV9ncmFwaF9ub2RlKFBJUEUsIDApOworCXBp cGVCID0gY3JlYXRlX2dyYXBoX25vZGUoUElQRSwgMSk7CisJcGlwZUMgPSBjcmVhdGVfZ3JhcGhf bm9kZShQSVBFLCAyKTsKKwlwaXBlRCA9IGNyZWF0ZV9ncmFwaF9ub2RlKFBJUEUsIDMpOworCXNs aWNlMSA9IGNyZWF0ZV9ncmFwaF9ub2RlKERCVUZfU0xJQ0UsIDApOworCXNsaWNlMiA9IGNyZWF0 ZV9ncmFwaF9ub2RlKERCVUZfU0xJQ0UsIDEpOworCisJbWVtc2V0KHBpcGVzLCAwLCBJOTE1X01B WF9QSVBFUyAqIHNpemVvZihzdHJ1Y3QgR3JhcGhOb2RlICopKTsKKwltZW1zZXQoc2xpY2VzLCAw LCBJOTE1X01BWF9TTElDRVMgKiBzaXplb2Yoc3RydWN0IEdyYXBoTm9kZSAqKSk7CisKKwlpZiAo Z2VuID09IDExKSB7CisKKwkJLyoKKwkJICogUHJlcGFyZSB0byBnZW5lcmF0ZSBhc3NpZ25tZW50 cyBmb3IgSUNMLCB3aGljaAorCQkgKiBoYXMgMyBwaXBlcyBhbmQgMiBEQnVmIHNsaWNlcy4KKwkJ ICovCisJCXNsaWNlc1swXSA9IHNsaWNlMTsKKwkJc2xpY2VzWzFdID0gc2xpY2UyOworCQlwaXBl c1swXSA9IHBpcGVBOworCQlwaXBlc1sxXSA9IHBpcGVCOworCQlwaXBlc1syXSA9IHBpcGVDOwor CisJCS8qCisJCSAqIEJTcGVjIDEyNzE2LiBHZW5lcmF0ZSBEQnVmIFNsaWNlcyB0YWJsZSBmb3Ig SUNMLAorCQkgKiBHcmFwaChlYWNoIGVkZ2UgYXNzdW1lZCB0byBoYXZlIHdlaWdodCAxKToKKwkJ ICogUGlwZUEgLSBEQlVGX1MxIC0gUGlwZUIgLSBQaXBlQyAtIERCVUZfUzIKKwkJICovCisJCWNv bm5lY3Rfbm9kZXMocGlwZUEsIHNsaWNlMSwgMSk7CisJCWNvbm5lY3Rfbm9kZXMoc2xpY2UxLCBw aXBlQiwgMSk7CisJCWNvbm5lY3Rfbm9kZXMocGlwZUIsIHBpcGVDLCAxKTsKKwkJY29ubmVjdF9u b2RlcyhwaXBlQywgc2xpY2UyLCAxKTsKKworCQl0cmF2ZXJzZV9ncmFwaChwaXBlQSwgMCk7CisK KwkJcHJpbnRfdGFibGUocGlwZXMsIDMsIHNsaWNlcywgMik7CisKKwl9IGVsc2UgaWYgKGdlbiA9 PSAxMikgeworCisJCS8qCisJCSAqIFByZXBhcmUgdG8gZ2VuZXJhdGUgYXNzaWdubWVudHMgZm9y IFRHTCwgd2hpY2gKKwkJICogaGFzIDQgcGlwZXMgYW5kIDIgREJ1ZiBzbGljZXMuCisJCSAqLwor CQlzbGljZXNbMF0gPSBzbGljZTE7CisJCXNsaWNlc1sxXSA9IHNsaWNlMjsKKwkJcGlwZXNbMF0g PSBwaXBlQTsKKwkJcGlwZXNbMV0gPSBwaXBlQjsKKwkJcGlwZXNbMl0gPSBwaXBlQzsKKwkJcGlw ZXNbM10gPSBwaXBlRDsKKworCQkvKgorCQkgKiBCU3BlYyA0OTI1NS4gR2VuZXJhdGUgREJ1ZiBT bGljZXMgdGFibGUgZm9yIFRHTC4KKwkJICogR3JhcGgoZWFjaCBlZGdlIGFzc3VtZWQgdG8gaGF2 ZSB3ZWlnaHQgMSk6CisJCSAqIFBpcGVEIC0gREJVRl9TMiAtIFBpcGVDIC0gUGlwZUEgLSBEQlVG X1MxIC0gUGlwZUIKKwkJICovCisJCWNvbm5lY3Rfbm9kZXMocGlwZUQsIHNsaWNlMiwgMSk7CisJ CWNvbm5lY3Rfbm9kZXMoc2xpY2UyLCBwaXBlQywgMSk7CisJCWNvbm5lY3Rfbm9kZXMocGlwZUMs IHBpcGVBLCAxKTsKKwkJY29ubmVjdF9ub2RlcyhwaXBlQSwgc2xpY2UxLCAxKTsKKwkJY29ubmVj dF9ub2RlcyhzbGljZTEsIHBpcGVCLCAxKTsKKworCQl0cmF2ZXJzZV9ncmFwaChwaXBlQSwgMCk7 CisKKwkJcHJpbnRfdGFibGUocGlwZXMsIDQsIHNsaWNlcywgMik7CisJfQorCisJcmVzZXRfYWxs X25vZGVzKCk7CisKKwkvKgorCSAqIEZ1cnRoZXIgcGxhdGZvcm1zIGNhbiBnZW5lcmF0ZSB0YWJs ZSBzYW1lIHdheS4KKwkgKi8KKworCWRlc3Ryb3lfYWxsX25vZGVzKCk7CisKKwlyZXR1cm4gIDA7 Cit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL21lc29uLmJ1aWxkIGIvdG9vbHMvbWVzb24uYnVpbGQK aW5kZXggZWVjYjEyMmIuLjJiOGRmNGI0IDEwMDY0NAotLS0gYS90b29scy9tZXNvbi5idWlsZAor KysgYi90b29scy9tZXNvbi5idWlsZApAQCAtMzUsNiArMzUsNyBAQCB0b29sc19wcm9ncyA9IFsK IAknaW50ZWxfd2F0ZXJtYXJrJywKIAknaW50ZWxfZ2VtX2luZm8nLAogCSdpbnRlbF9ndnRnX3Rl c3QnLAorCSdpbnRlbF9kYnVmX21hcCcsCiAJJ2RwY2RfcmVnJywKIF0KIHRvb2xfZGVwcyA9IGln dF9kZXBzCi0tIAoyLjE3LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRl dg==