From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM04-BN3-obe.outbound.protection.outlook.com (mail-bn3nam04on0613.outbound.protection.outlook.com [IPv6:2a01:111:f400:fe4e::613]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0139C6E373 for ; Wed, 28 Nov 2018 20:51:18 +0000 (UTC) From: David Francis Date: Wed, 28 Nov 2018 15:51:07 -0500 Message-ID: <20181128205107.16315-1-David.Francis@amd.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tests/amdgpu: Add test for Adaptive Backlight Management 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: QWRhcHRpdmUgQmFja2xpZ2h0IE1hbmFnZW1lbnQgKEFCTSkgaXMgYSBwb3dlci1zYXZpbmcKZmVh dHVyZSBvbiBBTUQgQVNJQ3MgdGhhdCByZWR1Y2VzIGJhY2tsaWdodCB3aGlsZSBpbmNyZWFzaW5n CnBpeGVsIGNvbnRyYXN0IGFuZCBsdW1pbmFuY2UuICBUaGlzIHRlc3QgY29uZmlybXMgdGhhdApB Qk0gaXMgcHJlc2VudCBhbmQgZW5hYmxlZCwgYW5kIHRoYXQgYmFja2xpZ2h0IHBlcmZvcm1hbmNl CmlzIHNhbmUuICBJdCB1c2VzIEFNRC1zcGVjaWZpYyBkZWJ1Z2ZzIGVudHJpZXMgdG8KcmVhZCB0 aGUgYmFja2xpZ2h0IFBXTSB2YWx1ZXMuCgpJdCBoYXMgNSBzdWJ0ZXN0czoKCmRwbXNfY3ljbGUK U2V0cyBicmlnaHRuZXNzIHRvIGhhbGYsIHRoZW4gY29uZmlybXMgdGhhdCB2YWx1ZSBpcyByZXN0 b3JlZAphZnRlciBkcG1zIG9mZiBhbmQgdGhlbiBvbi4KCmJhY2tsaWdodF9tb25vdG9uaWNfYmFz aWMKU2V0cyBicmlnaHRuZXNzIHRvIHRlbiBkaWZmZXJlbnQgdmFsdWVzLCBjb25maXJtaW5nIHRo YXQKaGlnaGVyIGJyaWdodG5lc3MgdmFsdWVzIGFyZSBicmlnaHRlci4KCmJhY2tsaWdodF9tb25v dG9uaWNfYWJtClNhbWUgYXMgYmFja2xpZ2h0X21vbm90b25pY19iYXNpYywgYnV0IHdpdGggYWJt IGVuYWJsZWQuCgphYm1fZW5hYmxlZApTZXRzIGFibSB0byBpdHMgZm91ciBpbnRlbnNpdHkgbGV2 ZWxzLCBjb25maXJtaW5nIHRoYXQKYWJtIHJlZHVjZXMgdGhlIGJhY2tsaWdodCwgYW5kIHRoZSBy ZWR1Y3Rpb24gaXMgZ3JlYXRlcgpmb3IgaGlnaGVyIGFibSBsZXZlbC4KCmFibV9ncmFkdWFsClNl dHMgYWJtIHRvIG9mZiBhbmQgdGhlbiBtYXhpbXVtIGludGVuc2l0eSwgY29uZmlybWluZwp0aGF0 IGJyaWdodG5lc3MgZGVjcmVhc2VzIGNvbnRpbnVhbGx5IG92ZXIgdGhlIGZpcnN0CnNlY29uZCBh bmQgZXZlbnR1YWxseSByZWFjaGVzIHRoZSB0YXJnZXQgdmFsdWUuClRoaXMgdGVzdCB0YWtlcyAz MHMgdG8gcnVuLgoKU2lnbmVkLW9mZi1ieTogRGF2aWQgRnJhbmNpcyA8RGF2aWQuRnJhbmNpc0Bh bWQuY29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMvYW1kZ3B1 L2FtZF9hYm0uYyB8IDM2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMiBmaWxlcyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRlc3RzL2FtZGdwdS9hbWRfYWJtLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3Vy Y2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA1NjIwYzFkNi4uM2Q1NjBiZWUgMTAw NjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwpAQCAtMTksNiArMTksNyBAQCBBTURHUFVfVEVTVFMgPSBcCiAJYW1kZ3B1L2FtZF9iYXNp YyBcCiAJYW1kZ3B1L2FtZF9jc19ub3AgXAogCWFtZGdwdS9hbWRfcHJpbWUgXAorCWFtZGdwdS9h bWRfYWJtIFwKIAkkKE5VTEwpCiAKIFRFU1RTX3Byb2dzID0gXApkaWZmIC0tZ2l0IGEvdGVzdHMv YW1kZ3B1L2FtZF9hYm0uYyBiL3Rlc3RzL2FtZGdwdS9hbWRfYWJtLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAuLjkwYTZmOTllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMv YW1kZ3B1L2FtZF9hYm0uYwpAQCAtMCwwICsxLDM2MSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4 IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVk IGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2Fy ZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklT SU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5j bHVkZSAiaWd0LmgiCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlndF9rbXMuaCIK KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGJv b2wuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVm aW5lIEJBQ0tMSUdIVF9QQVRIICIvc3lzL2NsYXNzL2JhY2tsaWdodC9hbWRncHVfYmwwIgorCitz dGF0aWMgaW50IHJlYWRfY3VycmVudF9iYWNrbGlnaHRfcHdtKGludCBkZWJ1Z2ZzX2RpcikKK3sK KwljaGFyIGJ1ZlsyMF07CisKKwlpZ3RfZGVidWdmc19zaW1wbGVfcmVhZChkZWJ1Z2ZzX2Rpciwg ImFtZGdwdV9jdXJyZW50X2JhY2tsaWdodF9wd20iLAorCQkJIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwor CisJcmV0dXJuIHN0cnRvbChidWYsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IHJlYWRfdGFy Z2V0X2JhY2tsaWdodF9wd20oaW50IGRlYnVnZnNfZGlyKQoreworCWNoYXIgYnVmWzIwXTsKKwor CWlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGRlYnVnZnNfZGlyLCAiYW1kZ3B1X3RhcmdldF9iYWNr bGlnaHRfcHdtIiwKKwkJCSBidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiBzdHJ0b2woYnVm LCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludCBiYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhp bnQgdmFsdWUpCit7CisJaW50IGZkOworCWNoYXIgZnVsbFtQQVRIX01BWF07CisJY2hhciBzcmNb NjRdOworCWludCBsZW47CisKKwlpZ3RfYXNzZXJ0KHNucHJpbnRmKGZ1bGwsIFBBVEhfTUFYLCAi JXMvJXMiLCBCQUNLTElHSFRfUEFUSCwgImJyaWdodG5lc3MiKSA8IFBBVEhfTUFYKTsKKwlmZCA9 IG9wZW4oZnVsbCwgT19XUk9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC1lcnJubzsK KworCWxlbiA9IHNucHJpbnRmKHNyYywgc2l6ZW9mKHNyYyksICIlaSIsIHZhbHVlKTsKKwlsZW4g PSB3cml0ZShmZCwgc3JjLCBsZW4pOworCWNsb3NlKGZkKTsKKworCWlmIChsZW4gPCAwKQorCQly ZXR1cm4gbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hYm1fbGV2ZWwo aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGxldmVsKQoreworCWludCBpLCByZXQ7CisJaW50 IG91dHB1dF9pZDsKKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wczsKKwl1aW50MzJf dCBwcm9wX2lkOworCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wOworCXVpbnQzMl90IHR5cGUgPSBE Uk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5f b3V0cHV0czsgaSsrKSB7CisJCW91dHB1dF9pZCA9IGRpc3BsYXktPm91dHB1dHNbaV0uaWQ7CisJ CXByb3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRw dXRfaWQsIHR5cGUpOworCisJCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkr KykgeworCQkJcHJvcF9pZCA9IHByb3BzLT5wcm9wc1tpXTsKKwkJCXByb3AgPSBkcm1Nb2RlR2V0 UHJvcGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBwcm9wX2lkKTsKKworCQkJaWd0X2Fzc2VydChwcm9w KTsKKworCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAiYWJtIGxldmVsIikgPT0gMCkgeworCQkJ CXJldCA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dF9p ZCwgdHlwZSwgcHJvcF9pZCwgbGV2ZWwpOworCisJCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwor CQkJfQorCisJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOworCQl9CisJfQorCit9CisKK3N0 YXRpYyBpbnQgYmFja2xpZ2h0X3JlYWRfbWF4X2JyaWdodG5lc3MoaW50ICpyZXN1bHQpCit7CisJ aW50IGZkOworCWNoYXIgZnVsbFtQQVRIX01BWF07CisJY2hhciBkc3RbNjRdOworCWludCByLCBl OworCisJaWd0X2Fzc2VydChzbnByaW50ZihmdWxsLCBQQVRIX01BWCwgIiVzLyVzIiwgQkFDS0xJ R0hUX1BBVEgsICJtYXhfYnJpZ2h0bmVzcyIpIDwgUEFUSF9NQVgpOworCisJZmQgPSBvcGVuKGZ1 bGwsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtZXJybm87CisKKwlyID0g cmVhZChmZCwgZHN0LCBzaXplb2YoZHN0KSk7CisJZSA9IGVycm5vOworCWNsb3NlKGZkKTsKKwor CWlmIChyIDwgMCkKKwkJcmV0dXJuIC1lOworCisJZXJybm8gPSAwOworCSpyZXN1bHQgPSBzdHJ0 b2woZHN0LCBOVUxMLCAxMCk7CisJcmV0dXJuIGVycm5vOworfQorCitzdGF0aWMgdm9pZCBza2lw X2lmX2luY29tcGF0aWJsZShpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmc19kaXIp Cit7CisJaW50IHJldCwgaTsKKwljaGFyIGJ1ZlsyMF07CisJYm9vbCBhYm1fcHJvcF9leGlzdHM7 CisJaW50IG91dHB1dF9pZDsKKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wczsKKwl1 aW50MzJfdCB0eXBlID0gRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjsKKwl1aW50MzJfdCBwcm9w X2lkOworCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wOworCisJcmV0ID0gaWd0X2RlYnVnZnNfc2lt cGxlX3JlYWQoZGVidWdmc19kaXIsICJhbWRncHVfY3VycmVudF9iYWNrbGlnaHRfcHdtIiwKKwkJ CSBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChyZXQgPCAwKQorCQlpZ3Rfc2tpcCgiTm8gY3Vy cmVudCBiYWNrbGlnaHQgZGVidWdmcyBlbnRyeS5cbiIpOworCisJcmV0ID0gaWd0X2RlYnVnZnNf c2ltcGxlX3JlYWQoZGVidWdmc19kaXIsICJhbWRncHVfdGFyZ2V0X2JhY2tsaWdodF9wd20iLAor CQkJIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldCA8IDApCisJCWlndF9za2lwKCJObyB0 YXJnZXQgYmFja2xpZ2h0IGRlYnVnZnMgZW50cnkuXG4iKTsKKworCWFibV9wcm9wX2V4aXN0cyA9 IGZhbHNlOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0czsgaSsrKSB7CisJ CW91dHB1dF9pZCA9IGRpc3BsYXktPm91dHB1dHNbaV0uaWQ7CisJCXByb3BzID0gZHJtTW9kZU9i amVjdEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXRfaWQsIHR5cGUpOworCisJ CWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgeworCQkJcHJvcF9pZCA9 IHByb3BzLT5wcm9wc1tpXTsKKwkJCXByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZGlzcGxheS0+ ZHJtX2ZkLCBwcm9wX2lkKTsKKworCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAiYWJtIGxldmVs IikgPT0gMCkKKwkJCQlhYm1fcHJvcF9leGlzdHMgPSB0cnVlOworCisJCQlkcm1Nb2RlRnJlZVBy b3BlcnR5KHByb3ApOworCQl9CisJfQorCisJaWYgKCFhYm1fcHJvcF9leGlzdHMpCisJCWlndF9z a2lwKCJObyBhYm0gbGV2ZWwgcHJvcGVydHkgb24gYW55IGNvbm5lY3Rvci5cbiIpOworfQorCisK K3N0YXRpYyB2b2lkIGJhY2tsaWdodF9kcG1zX2N5Y2xlKGlndF9kaXNwbGF5X3QgKmRpc3BsYXks IGludCBkZWJ1Z2ZzLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlpbnQgcmV0OworCWludCBt YXhfYnJpZ2h0bmVzczsKKwlpbnQgcHdtXzEsIHB3bV8yOworCisJcmV0ID0gYmFja2xpZ2h0X3Jl YWRfbWF4X2JyaWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7CisKKwlzZXRfYWJtX2xldmVsKGRpc3BsYXksIDApOworCWJhY2tsaWdodF93cml0ZV9icmln aHRuZXNzKG1heF9icmlnaHRuZXNzIC8gMik7CisJdXNsZWVwKDEwMDAwMCk7CisJcHdtXzEgPSBy ZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCisJa21zdGVzdF9zZXRfY29ubmVj dG9yX2RwbXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3IsIERSTV9N T0RFX0RQTVNfT0ZGKTsKKwlrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhkaXNwbGF5LT5kcm1f ZmQsIG91dHB1dC0+Y29uZmlnLmNvbm5lY3RvciwgRFJNX01PREVfRFBNU19PTik7CisJdXNsZWVw KDEwMDAwMCk7CisJcHdtXzIgPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOwor CWlndF9hc3NlcnRfZXEocHdtXzEsIHB3bV8yKTsKK30KKworc3RhdGljIHZvaWQgYmFja2xpZ2h0 X21vbm90b25pY19iYXNpYyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKK3sK KwlpbnQgcmV0OworCWludCBtYXhfYnJpZ2h0bmVzczsKKwlpbnQgcHJldl9wd20sIHB3bTsKKwlp bnQgYnJpZ2h0bmVzc19zdGVwOworCWludCBicmlnaHRuZXNzOworCisJcmV0ID0gYmFja2xpZ2h0 X3JlYWRfbWF4X2JyaWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisKKwlicmlnaHRuZXNzX3N0ZXAgPSBtYXhfYnJpZ2h0bmVzcyAvIDEwOworCisJc2V0 X2FibV9sZXZlbChkaXNwbGF5LCAwKTsKKwliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhtYXhf YnJpZ2h0bmVzcyk7CisJdXNsZWVwKDEwMDAwMCk7CisJcHJldl9wd20gPSByZWFkX3RhcmdldF9i YWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCWZvciAoYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNz IC0gYnJpZ2h0bmVzc19zdGVwOworCSAgICAgYnJpZ2h0bmVzcyA+IDA7CisJICAgICBicmlnaHRu ZXNzIC09IGJyaWdodG5lc3Nfc3RlcCkgeworCQliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhi cmlnaHRuZXNzKTsKKwkJdXNsZWVwKDEwMDAwMCk7CisJCXB3bSA9IHJlYWRfdGFyZ2V0X2JhY2ts aWdodF9wd20oZGVidWdmcyk7CisJCWlndF9hc3NlcnQocHdtIDwgcHJldl9wd20pOworCQlwcmV2 X3B3bSA9IHB3bTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYmFja2xpZ2h0X21vbm90b25pY19h Ym0oaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRlYnVnZnMpCit7CisJaW50IHJldCwgaTsK KwlpbnQgbWF4X2JyaWdodG5lc3M7CisJaW50IHByZXZfcHdtLCBwd207CisJaW50IGJyaWdodG5l c3Nfc3RlcDsKKwlpbnQgYnJpZ2h0bmVzczsKKworCXJldCA9IGJhY2tsaWdodF9yZWFkX21heF9i cmlnaHRuZXNzKCZtYXhfYnJpZ2h0bmVzcyk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJ YnJpZ2h0bmVzc19zdGVwID0gbWF4X2JyaWdodG5lc3MgLyAxMDsKKwlmb3IgKGkgPSAxOyBpIDwg NTsgaSsrKSB7CisJCXNldF9hYm1fbGV2ZWwoZGlzcGxheSwgaSk7CisJCWJhY2tsaWdodF93cml0 ZV9icmlnaHRuZXNzKG1heF9icmlnaHRuZXNzKTsKKwkJdXNsZWVwKDEwMDAwMCk7CisJCXByZXZf cHdtID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKKwkJZm9yIChicmlnaHRu ZXNzID0gbWF4X2JyaWdodG5lc3MgLSBicmlnaHRuZXNzX3N0ZXA7CisJCSAgICAgYnJpZ2h0bmVz cyA+IDA7CisJCSAgICAgYnJpZ2h0bmVzcyAtPSBicmlnaHRuZXNzX3N0ZXApIHsKKwkJCWJhY2ts aWdodF93cml0ZV9icmlnaHRuZXNzKGJyaWdodG5lc3MpOworCQkJdXNsZWVwKDEwMDAwMCk7CisJ CQlwd20gPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCQkJaWd0X2Fzc2Vy dChwd20gPCBwcmV2X3B3bSk7CisJCQlwcmV2X3B3bSA9IHB3bTsKKwkJfQorCX0KK30KKworc3Rh dGljIHZvaWQgYWJtX2VuYWJsZWQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRlYnVnZnMp Cit7CisJaW50IHJldCwgaTsKKwlpbnQgbWF4X2JyaWdodG5lc3M7CisJaW50IHB3bSwgcHJldl9w d20sIHB3bV93aXRob3V0X2FibTsKKworCXJldCA9IGJhY2tsaWdodF9yZWFkX21heF9icmlnaHRu ZXNzKCZtYXhfYnJpZ2h0bmVzcyk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJc2V0X2Fi bV9sZXZlbChkaXNwbGF5LCAwKTsKKwliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhtYXhfYnJp Z2h0bmVzcyk7CisJdXNsZWVwKDEwMDAwMCk7CisJcHJldl9wd20gPSByZWFkX3RhcmdldF9iYWNr bGlnaHRfcHdtKGRlYnVnZnMpOworCXB3bV93aXRob3V0X2FibSA9IHByZXZfcHdtOworCisJZm9y IChpID0gMTsgaSA8IDU7IGkrKykgeworCQlzZXRfYWJtX2xldmVsKGRpc3BsYXksIGkpOworCQl1 c2xlZXAoMTAwMDAwKTsKKwkJcHdtID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2Zz KTsKKwkJaWd0X2Fzc2VydChwd20gPD0gcHJldl9wd20pOworCQlpZ3RfYXNzZXJ0KHB3bSA8IHB3 bV93aXRob3V0X2FibSk7CisJCXByZXZfcHdtID0gcHdtOworCX0KKworfQorCitzdGF0aWMgdm9p ZCBhYm1fZ3JhZHVhbChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKK3sKKwlp bnQgcmV0LCBpOworCWludCBjb252ZXJnZW5jZV9kZWxheSA9IDE1OworCWludCBwcmV2X3B3bSwg cHdtLCBjdXJyOworCWludCBtYXhfYnJpZ2h0bmVzczsKKworCXJldCA9IGJhY2tsaWdodF9yZWFk X21heF9icmlnaHRuZXNzKCZtYXhfYnJpZ2h0bmVzcyk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7CisKKwlzZXRfYWJtX2xldmVsKGRpc3BsYXksIDApOworCWJhY2tsaWdodF93cml0ZV9icmln aHRuZXNzKG1heF9icmlnaHRuZXNzKTsKKworCXNsZWVwKGNvbnZlcmdlbmNlX2RlbGF5KTsKKwlw cmV2X3B3bSA9IHJlYWRfdGFyZ2V0X2JhY2tsaWdodF9wd20oZGVidWdmcyk7CisJY3VyciA9IHJl YWRfY3VycmVudF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCisJaWd0X2Fzc2VydF9lcShwcmV2 X3B3bSwgY3Vycik7CisJc2V0X2FibV9sZXZlbChkaXNwbGF5LCA0KTsKKwlmb3IgKGkgPSAwOyBp IDwgMTA7IGkrKykgeworCQl1c2xlZXAoMTAwMDAwKTsKKwkJcHdtID0gcmVhZF9jdXJyZW50X2Jh Y2tsaWdodF9wd20oZGVidWdmcyk7CisJCWlndF9hc3NlcnQocHdtIDwgcHJldl9wd20pOworCQlw cmV2X3B3bSA9IHB3bTsKKwl9CisKKwlzbGVlcChjb252ZXJnZW5jZV9kZWxheSAtIDEpOworCisJ cHJldl9wd20gPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCWN1cnIgPSBy ZWFkX2N1cnJlbnRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKKworCWlndF9hc3NlcnRfZXEocHJl dl9wd20sIGN1cnIpOworfQorCitpZ3RfbWFpbgoreworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsK KwlpbnQgZGVidWdmczsKKwllbnVtIHBpcGUgcGlwZTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsK KworCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGlzcGxh eS5kcm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTURHUFUpOworCisJCWlm IChkaXNwbGF5LmRybV9mZCA9PSAtMSkKKwkJCWlndF9za2lwKCJOb3QgYW4gYW1kZ3B1IGRyaXZl ci5cbiIpOworCisJCWRlYnVnZnMgPSBpZ3RfZGVidWdmc19kaXIoZGlzcGxheS5kcm1fZmQpOwor CisJCWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfZGlzcGxheV9yZXF1 aXJlKCZkaXNwbGF5LCBkaXNwbGF5LmRybV9mZCk7CisKKwkJc2tpcF9pZl9pbmNvbXBhdGlibGUo JmRpc3BsYXksIGRlYnVnZnMpOworCisJCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQo JmRpc3BsYXksIHBpcGUsIG91dHB1dCkKKwkJCWJyZWFrOworCX0KKworCWlndF9zdWJ0ZXN0KCJk cG1zX2N5Y2xlIikKKwkJYmFja2xpZ2h0X2RwbXNfY3ljbGUoJmRpc3BsYXksIGRlYnVnZnMsIG91 dHB1dCk7CisJaWd0X3N1YnRlc3QoImJhY2tsaWdodF9tb25vdG9uaWNfYmFzaWMiKQorCQliYWNr bGlnaHRfbW9ub3RvbmljX2Jhc2ljKCZkaXNwbGF5LCBkZWJ1Z2ZzKTsKKwlpZ3Rfc3VidGVzdCgi YmFja2xpZ2h0X21vbm90b25pY19hYm0iKQorCQliYWNrbGlnaHRfbW9ub3RvbmljX2FibSgmZGlz cGxheSwgZGVidWdmcyk7CisJaWd0X3N1YnRlc3QoImFibV9lbmFibGVkIikKKwkJYWJtX2VuYWJs ZWQoJmRpc3BsYXksIGRlYnVnZnMpOworCWlndF9zdWJ0ZXN0KCJhYm1fZ3JhZHVhbCIpCisJCWFi bV9ncmFkdWFsKCZkaXNwbGF5LCBkZWJ1Z2ZzKTsKKworCWlndF9maXh0dXJlIHsKKwkJaWd0X2Rp c3BsYXlfZmluaSgmZGlzcGxheSk7CisJfQorfQotLSAKMi4xNy4xCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3Qt ZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK