From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 35AB86E63C for ; Thu, 4 Oct 2018 18:19:33 +0000 (UTC) From: Tarun Vyas Date: Thu, 4 Oct 2018 11:16:18 -0700 Message-Id: <20181004181618.17822-1-tarun.vyas@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v5] tools: Add a simple tool to read/write/decode dpcd registers 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: dhinakaran.pandiyan@intel.com, rodrigo.vivi@intel.com List-ID: VGhpcyB0b29sIHNlcnZlcyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBjb25zdHJ1Y3RzIHByb3Zp ZGVkIGJ5IHRoZQpkcm1fZHBjZF9hdXhfZGV2IGtlcm5lbCBtb2R1bGUgYnkgd29ya2luZyBvbiB0 aGUgL2Rldi9kcm1fZHBfYXV4W25dCmRldmljZXMgY3JlYXRlZCBieSB0aGUga2VybmVsIG1vZHVs ZS4KSXQgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBkcGNkIHJlZ2lzdGVycyBvbiB0aGUg Y29ubmVjdGVkIGF1eApjaGFubmVscy4KSW4gdGhlIGZvbGxvdy11cCBwYXRjaCwgc3VwcG9ydCBm b3IgZGVjb2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKYWRkZWQgdG8gZmFjaWxhdGUgZGVi dWdnaW5nIHBhbmVsIHJlbGF0ZWQgaXNzdWVzLgoKdjI6IChGaXhlcyBieSBSb2RyaWdvIGJ1dCBu byBmdW5jdGlvbmFsIGNoYW5nZXMgeWV0KToKICAgIC0gSW5kZW50YXRpb25zLCBUeXBvLCBNaXNz ZWQgc3BhY2VzCiAgICAtIFJlbW92aW5nIG1lbnRpb25pbmcgdG8gZGVjb2RlIGFuZCBzcGVjIHRo YXQgaXMgbm90IGltcGxlbWVudGVkIHlldC4KICAgIC0gQWRkIE1ha2VmaWxlLnNvdXJjZXMgYmFj awogICAgLSBNaXNzZWQgcy9wcmludGYvaWd0X3dhcm4KCnYzOgogICAgLSBBZGRyZXMgREsncyBy ZXZpZXcgY29tbWVudHMgZnJvbSB2MiBhYm92ZS4KICAgIC0gU3F1YXNoIFJvZHJpZ28ncyBmaWxl IGhhbmRsaW5nIHVuaWZpY2F0aW9uIHBhdGNoLgogICAgLSBNYWtlIGNvdW50LCBvZmZzZXQgYW5k IGRldmljZSBpZCBvcHRpb25hbC4KCnY0OgogICAgLSBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5k IHJlZmFjdG9yaW5nLgoKU3VnZ2VzdGVkLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWth cmFuLnBhbmRpeWFuQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVGFydW4gVnlhcyA8dGFydW4u dnlhc0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZp QGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IERoaW5ha2FyYW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4u cGFuZGl5YW5AaW50ZWwuY29tPgotLS0KIHRvb2xzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwog dG9vbHMvZHBjZF9yZWcuYyAgICAgICB8IDI3NCArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiB0b29scy9tZXNvbi5idWlsZCAgICAgIHwgICAxICsKIDMg ZmlsZXMgY2hhbmdlZCwgMjc2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9kcGNkX3JlZy5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcyBiL3Rvb2xz L01ha2VmaWxlLnNvdXJjZXMKaW5kZXggYWJkMjNhMGYuLjUwNzA2ZjQxIDEwMDY0NAotLS0gYS90 b29scy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTcs NiArNyw3IEBAIG5vaW5zdF9QUk9HUkFNUyA9CQlcCiAKIHRvb2xzX3Byb2dfbGlzdHMgPQkJXAog CWlndF9zdGF0cwkJXAorCWRwY2RfcmVnCQlcCiAJaW50ZWxfYXVkaW9fZHVtcAlcCiAJaW50ZWxf cmVnCQlcCiAJaW50ZWxfYmFja2xpZ2h0CQlcCmRpZmYgLS1naXQgYS90b29scy9kcGNkX3JlZy5j IGIvdG9vbHMvZHBjZF9yZWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u MDJlNTEyMTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9kcGNkX3JlZy5jCkBAIC0wLDAgKzEs Mjc0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00s CisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogRFBDRCByZWdp c3RlciByZWFkL3dyaXRlIHRvb2wKKyAqIFRoaXMgdG9vbCB3cmFwcyBhcm91bmQgRFJNX0RQX0FV WF9ERVYgbW9kdWxlIHRvIHByb3ZpZGUgRFBDRCByZWdpc3RlciByZWFkCisgKiBhbmQgd3JpdGUs IHNvIENPTkZJR19EUk1fRFBfQVVYX0RFViBuZWVkcyB0byBiZSBzZXQuCisgKi8KKworI2luY2x1 ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGdldG9wdC5o PgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGxp bWl0cy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2RlZmluZSBNQVhfRFBfT0ZGU0VUCTB4 ZmZmZmYKKyNkZWZpbmUgRFJNX0FVWF9NSU5PUlMJMjU2CisKK2NvbnN0IGNoYXIgYXV4X2Rldltd ID0gIi9kZXYvZHJtX2RwX2F1eCI7CisKK3N0cnVjdCBkcGNkX2RhdGEgeworCWludCBkZXZpZDsK KwlpbnQgZmlsZV9vcDsKKwl1aW50MzJfdCBvZmZzZXQ7CisJZW51bSBjb21tYW5kIHsKKwkJSU5W QUxJRCA9IC0xLAorCQlSRUFEID0gMiwKKwkJV1JJVEUsCisJfSBjbWQ7CisJc2l6ZV90IGNvdW50 OworCXVpbnQ4X3QgdmFsOworfTsKKworc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2Uodm9pZCkKK3sK KwlwcmludGYoIlVzYWdlOiBkcGNkX3JlZyBbT1BUSU9OIC4uLl0gQ09NTUFORFxuXG4iKTsKKwlw cmludGYoIkNPTU1BTkQgaXMgb25lIG9mOlxuIik7CisJcHJpbnRmKCIgIHJlYWQ6CQlSZWFkIFtj b3VudF0gYnl0ZXMgZHBjZCByZWcgYXQgYW4gb2Zmc2V0XG4iKTsKKwlwcmludGYoIiAgd3JpdGU6 CVdyaXRlIGEgZHBjZCByZWcgYXQgYW4gb2Zmc2V0XG5cbiIpOworCXByaW50ZigiT3B0aW9ucyBm b3IgdGhlIGFib3ZlIENPTU1BTkRTIGFyZVxuIik7CisJcHJpbnRmKCIgLS1kZXZpY2U9REVWSUQJ CUF1eCBkZXZpY2UgaWQsIGFzIGxpc3RlZCBpbiAvZGV2L2RybV9kcF9hdXhfZGV2W25dLiIKKwkJ CQkJIkRlZmF1bHRzIHRvIDAuIFVwcGVyIGxpbWl0IC0gMjU2XG4iKTsKKwlwcmludGYoIiAtLW9m ZnNldD1SRUdfQUREUglEUENEIHJlZ2lzdGVyIG9mZnNldCBpbiBoZXguIERlZmF1bHRzIHRvIDB4 MCIKKwkJCQkJIlVwcGVyIGxpbWl0IC0gMHhmZmZmZlxuIik7CisJcHJpbnRmKCIgLS1jb3VudD1C WVRFUwkJRm9yIHJlYWRzLCBzcGVjaWZ5IG51bWJlciBvZiBieXRlcyB0byBiZSByZWFkIGZyb20i CisJCQkJCSIgdGhlIG9mZnNldC4gRGVmYXVsdHMgdG8gMVxuIik7CisJcHJpbnRmKCIgLS12YWx1 ZQkJRm9yIHdyaXRlcywgc3BlY2lmeSBhIGhleCB2YWx1ZSB0byBiZSB3cml0dGVuIgorCQkJCQki VXBwZXIgbGltaXQgLSAweGZmXG5cbiIpOworCisJcHJpbnRmKCIgLS1oZWxwOiBwcmludCB0aGUg dXNhZ2VcbiIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3RydG9sX2Vycl91dGlsKGNoYXIg KmVuZHB0ciwgbG9uZyAqdmFsKQoreworCWlmICgqZW5kcHRyICE9ICdcMCcgfHwgKnZhbCA8IDAg fHwgKCp2YWwgPT0gTE9OR19NQVggJiYgZXJybm8gPT0gRVJBTkdFKSkKKwkJcmV0dXJuIHRydWU7 CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2Vfb3B0cyhzdHJ1Y3QgZHBj ZF9kYXRhICpkcGNkLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IHJldCwgdmZsYWcg PSAwOworCWxvbmcgdGVtcDsKKwljaGFyICplbmRwdHI7CisKKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdv cHRzW10gPSB7CisJCXsgImNvdW50IiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCQknYycgfSwK KwkJeyAiZGV2aWNlIiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCQknZCcgfSwKKwkJeyAiaGVs cCIsCW5vX2FyZ3VtZW50LAkJTlVMTCwJCSdoJyB9LAorCQl7ICJvZmZzZXQiLAlyZXF1aXJlZF9h cmd1bWVudCwJTlVMTCwJCSdvJyB9LAorCQl7ICJ2YWx1ZSIsCXJlcXVpcmVkX2FyZ3VtZW50LAlO VUxMLAkJJ3YnIH0sCisJCXsgMCB9CisJfTsKKworCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmco YXJnYywgYXJndiwgIi06YzpkOmhvOnY6IiwgbG9uZ29wdHMsIE5VTEwpKSAhPSAtMSkgeworCQlz d2l0Y2ggKHJldCkgeworCQljYXNlICdjJzoKKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5k cHRyLCAxMCk7CisJCQlpZiAoc3RydG9sX2Vycl91dGlsKGVuZHB0ciwgJnRlbXApKSB7CisJCQkJ ZnByaW50ZihzdGRlcnIsICItLWNvdW50IGFyZ3VtZW50IGlzIGludmFsaWQvbmVnYXRpdmUvb3V0 LW9mLXJhbmdlXG4iKTsKKwkJCQlwcmludF91c2FnZSgpOworCQkJCXJldHVybiBFWElUX0ZBSUxV UkU7CisJCQl9CisJCQlkcGNkLT5jb3VudCA9IHRlbXA7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6 CisJCQl0ZW1wID0gc3RydG9sKG9wdGFyZywgJmVuZHB0ciwgMTApOworCQkJaWYgKHN0cnRvbF9l cnJfdXRpbChlbmRwdHIsICZ0ZW1wKSB8fCB0ZW1wID4gRFJNX0FVWF9NSU5PUlMpIHsKKwkJCQlm cHJpbnRmKHN0ZGVyciwgIi0tZGV2aWQgYXJndW1lbnQgaXMgaW52YWxpZC9uZWdhdGl2ZS9vdXQt b2YtcmFuZ2VcbiIpOworCQkJCXByaW50X3VzYWdlKCk7CisJCQkJcmV0dXJuIEVSQU5HRTsKKwkJ CX0KKwkJCWRwY2QtPmRldmlkID0gdGVtcDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCXBy aW50ZigiRFBDRCByZWdpc3RlciByZWFkIGFuZCB3cml0ZSB0b29sXG5cbiIpOworCQkJcHJpbnRm KCJUaGlzIHRvb2wgcmVxdWlyZXMgQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRFVlxuIgorCQkJCSJ0 byBiZSBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG5cbiIpOworCQkJcHJpbnRfdXNhZ2UoKTsK KwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJY2FzZSAnbyc6CisJCQl0ZW1wID0gc3RydG9sKG9w dGFyZywgJmVuZHB0ciwgMTYpOworCQkJaWYgKHN0cnRvbF9lcnJfdXRpbChlbmRwdHIsICZ0ZW1w KSB8fCB0ZW1wID4gTUFYX0RQX09GRlNFVCkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiLS1vZmZz ZXQgYXJndW1lbnQgaXMgaW52YWxpZC9uZWdhdGl2ZS9vdXQtb2YtcmFuZ2VcbiIpOworCQkJCXBy aW50X3VzYWdlKCk7CisJCQkJcmV0dXJuIEVSQU5HRTsKKwkJCX0KKwkJCWRwY2QtPm9mZnNldCA9 IHRlbXA7CisJCQlicmVhazsKKwkJY2FzZSAndic6CisJCQl2ZmxhZyA9ICd2JzsKKwkJCXRlbXAg PSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRyLCAxNik7CisJCQlpZiAoc3RydG9sX2Vycl91dGlsKGVu ZHB0ciwgJnRlbXApIHx8IHRlbXAgPiAweGZmKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICItLXZh bHVlIGFyZ3VtZW50IGlzIGludmFsaWQvbmVnYXRpdmUvb3V0LW9mLXJhbmdlXG4iKTsKKwkJCQlw cmludF91c2FnZSgpOworCQkJCXJldHVybiBFUkFOR0U7CisJCQl9CisJCQlkcGNkLT52YWwgPSB0 ZW1wOworCQkJYnJlYWs7CisJCS8qIENvbW1hbmQgcGFyc2luZyAqLworCQljYXNlIDE6CisJCQlp ZiAoc3RyY21wKG9wdGFyZywgInJlYWQiKSA9PSAwKSB7CisJCQkJdGVtcCA9IFJFQUQ7CisJCQl9 IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJ3cml0ZSIpID09IDApIHsKKwkJCQl0ZW1wID0gV1JJ VEU7CisJCQkJZHBjZC0+ZmlsZV9vcCA9IE9fV1JPTkxZOworCQkJfSBlbHNlIHsKKwkJCQlmcHJp bnRmKHN0ZGVyciwgIlVucmVjb2duaXplZCBjb21tYW5kXG4iKTsKKwkJCQlwcmludF91c2FnZSgp OworCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCQl9CisJCQlkcGNkLT5jbWQgPSB0ZW1wOwor CQkJYnJlYWs7CisJCWNhc2UgJzonOgorCQkJZnByaW50ZihzdGRlcnIsICJPcHRpb24gLSVjIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iLAorCQkJCSBvcHRvcHQpOworCQkJcHJpbnRfdXNhZ2UoKTsK KwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwg IkludmFsaWQgb3B0aW9uXG4iKTsKKwkJCXByaW50X3VzYWdlKCk7CisJCQlyZXR1cm4gRVhJVF9G QUlMVVJFOworCQl9CisJfQorCisJaWYgKChkcGNkLT5jb3VudCArIGRwY2QtPm9mZnNldCkgPiAo TUFYX0RQX09GRlNFVCArIDEpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIGJvdW5kcy4g Q291bnQgKyBPZmZzZXQgPD0gMHgxMDAwMDBcbiIpOworCQlyZXR1cm4gRVJBTkdFOworCX0KKwor CWlmICgoZHBjZC0+Y21kID09IFdSSVRFKSAmJiAodmZsYWcgIT0gJ3YnKSkgeworCQlmcHJpbnRm KHN0ZGVyciwgIldyaXRlIHZhbHVlIGlzIG1pc3NpbmdcbiIpOworCQlwcmludF91c2FnZSgpOwor CQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisK K3N0YXRpYyBpbnQgZHBjZF9yZWFkKGludCBmZCwgdWludDMyX3Qgb2Zmc2V0LCBzaXplX3QgY291 bnQpCit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJldCwgaTsKKwl1aW50OF90ICpidWYg PSBjYWxsb2MoY291bnQsIHNpemVvZih1aW50OF90KSk7CisKKwlpZiAoIWJ1ZikgeworCQlmcHJp bnRmKHN0ZGVyciwgIkNhbid0IGFsbG9jYXRlIHJlYWQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIEVO T01FTTsKKwl9CisKKwlwcmV0ID0gcHJlYWQoZmQsIGJ1ZiwgY291bnQsIG9mZnNldCk7CisJaWYg KHByZXQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgLSAlc1xuIiwg c3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0ID0gZXJybm87CisJCWdvdG8gb3V0OworCX0KKworCWlm IChwcmV0IDwgY291bnQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJSZWFkICV1IGJ5dGUocyksIGV4 cGVjdGVkICV6dSBieXRlcywgc3RhcnRpbmcgYXQgb2Zmc2V0ICV4XG5cbiIsIHByZXQsIGNvdW50 LCBvZmZzZXQpOworCQlyZXQgPSBFWElUX0ZBSUxVUkU7CisJfQorCisJcHJpbnRmKCIweCUwMng6 ICIsIG9mZnNldCk7CisJZm9yIChpID0gMDsgaSA8IHByZXQ7IGkrKykKKwkJcHJpbnRmKCIgJTAy eCIsICooYnVmICsgaSkpOworCXByaW50ZigiXG4iKTsKKworb3V0OgorCWZyZWUoYnVmKTsKKwly ZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRwY2Rfd3JpdGUoaW50IGZkLCB1aW50MzJfdCBv ZmZzZXQsIHVpbnQ4X3QgdmFsKQoreworCWludCByZXQgPSBFWElUX1NVQ0NFU1MsIHByZXQ7CisK KwlwcmV0ID0gcHdyaXRlKGZkLCAoY29uc3Qgdm9pZCAqKSZ2YWwsIHNpemVvZih1aW50OF90KSwg b2Zmc2V0KTsKKwlpZiAocHJldCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g d3JpdGUgLSAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0ID0gZXJybm87CisJfSBlbHNl IGlmIChwcmV0ID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJaZXJvIGJ5dGVzIHdlcmUgd3Jp dHRlblxuIik7CisJCXJldCA9IEVYSVRfRkFJTFVSRTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQor CitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJY2hhciBkZXZfbmFtZVsyMF07 CisJaW50IHJldCwgZmQ7CisKKwlzdHJ1Y3QgZHBjZF9kYXRhIGRwY2QgPSB7CisJCS5kZXZpZCA9 IDAsCisJCS5maWxlX29wID0gT19SRE9OTFksCisJCS5vZmZzZXQgPSAweDAsCisJCS5jbWQgPSBJ TlZBTElELAorCQkuY291bnQgPSAxLAorCX07CisKKwlpZigocmV0ID0gcGFyc2Vfb3B0cygmZHBj ZCwgYXJnYywgYXJndikpICE9IEVYSVRfU1VDQ0VTUykKKwkJcmV0dXJuIHJldDsKKworCXNucHJp bnRmKGRldl9uYW1lLCBzdHJsZW4oYXV4X2RldikgKyA0LCAiJXMlZCIsIGF1eF9kZXYsIGRwY2Qu ZGV2aWQpOworCisJZmQgPSBvcGVuKGRldl9uYW1lLCBkcGNkLmZpbGVfb3ApOworCWlmIChmZCA8 IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gb3BlbiAlcyBhdXggZGV2aWNlIC0g ZXJyb3I6ICVzXG4iLCBkZXZfbmFtZSwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiBl cnJubzsKKwl9CisKKwlzd2l0Y2ggKGRwY2QuY21kKSB7CisJY2FzZSBSRUFEOgorCQlyZXQgPSBk cGNkX3JlYWQoZmQsIGRwY2Qub2Zmc2V0LCBkcGNkLmNvdW50KTsKKwkJYnJlYWs7CisJY2FzZSBX UklURToKKwkJcmV0ID0gZHBjZF93cml0ZShmZCwgZHBjZC5vZmZzZXQsIGRwY2QudmFsKTsKKwkJ YnJlYWs7CisJZGVmYXVsdDoKKwkJZnByaW50ZihzdGRlcnIsICJQbGVhc2Ugc3BlY2lmeSBhIGNv bW1hbmQ6IHJlYWQvd3JpdGUuXG4iKTsKKwkJcHJpbnRfdXNhZ2UoKTsKKwkJcmV0ID0gRVhJVF9G QUlMVVJFOworCQlicmVhazsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gcmV0OworfQpk aWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAppbmRleCBl NDUxN2Q2Ni4uNzlmMzZhYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21lc29uLmJ1aWxkCisrKyBiL3Rv b2xzL21lc29uLmJ1aWxkCkBAIC0zNiw2ICszNiw3IEBAIHRvb2xzX3Byb2dzID0gWwogCSdpbnRl bF93YXRlcm1hcmsnLAogCSdpbnRlbF9nZW1faW5mbycsCiAJJ2ludGVsX2d2dGdfdGVzdCcsCisJ J2RwY2RfcmVnJywKIF0KIHRvb2xfZGVwcyA9IGlndF9kZXBzCiAKLS0gCjIuMTQuMQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5n IGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==