From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-eopbgr770040.outbound.protection.outlook.com [40.107.77.40]) by gabe.freedesktop.org (Postfix) with ESMTPS id 855266EB92 for ; Thu, 3 Jan 2019 19:32:35 +0000 (UTC) From: David Francis Date: Thu, 3 Jan 2019 14:32:28 -0500 Message-ID: <20190103193228.2180-1-David.Francis@amd.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2] 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 MHMgdG8gcnVuLgoKdjI6IG1ha2Ugc3VyZSB0aGF0IGRwbXMgaXMgY3ljbGVkIG9uIHRoZSBlRFAg ZGlzcGxheQoKU2lnbmVkLW9mZi1ieTogRGF2aWQgRnJhbmNpcyA8RGF2aWQuRnJhbmNpc0BhbWQu Y29tPgotLS0KIHRlc3RzL01ha2VmaWxlLnNvdXJjZXMgfCAgIDEgKwogdGVzdHMvYW1kZ3B1L2Ft ZF9hYm0uYyB8IDM2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCAzNjQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRl c3RzL2FtZGdwdS9hbWRfYWJtLmMKCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz IGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwppbmRleCA1NjIwYzFkNi4uM2Q1NjBiZWUgMTAwNjQ0 Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNl cwpAQCAtMTksNiArMTksNyBAQCBBTURHUFVfVEVTVFMgPSBcCiAJYW1kZ3B1L2FtZF9iYXNpYyBc CiAJYW1kZ3B1L2FtZF9jc19ub3AgXAogCWFtZGdwdS9hbWRfcHJpbWUgXAorCWFtZGdwdS9hbWRf YWJtIFwKIAkkKE5VTEwpCiAKIFRFU1RTX3Byb2dzID0gXApkaWZmIC0tZ2l0IGEvdGVzdHMvYW1k Z3B1L2FtZF9hYm0uYyBiL3Rlc3RzL2FtZGdwdS9hbWRfYWJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjM2M2IxZTkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYW1k Z3B1L2FtZF9hYm0uYwpAQCAtMCwwICsxLDM2MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE4IEFk dmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn cmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJp Y3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNl LCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAor ICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJz b25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl Y3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGlu CisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4K KyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U WSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVk ZSAiaWd0LmgiCisjaW5jbHVkZSAiZHJtdGVzdC5oIgorI2luY2x1ZGUgImlndF9rbXMuaCIKKyNp bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGJvb2wu aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5l IEJBQ0tMSUdIVF9QQVRIICIvc3lzL2NsYXNzL2JhY2tsaWdodC9hbWRncHVfYmwwIgorCitzdGF0 aWMgaW50IHJlYWRfY3VycmVudF9iYWNrbGlnaHRfcHdtKGludCBkZWJ1Z2ZzX2RpcikKK3sKKwlj aGFyIGJ1ZlsyMF07CisKKwlpZ3RfZGVidWdmc19zaW1wbGVfcmVhZChkZWJ1Z2ZzX2RpciwgImFt ZGdwdV9jdXJyZW50X2JhY2tsaWdodF9wd20iLAorCQkJIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJ cmV0dXJuIHN0cnRvbChidWYsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IHJlYWRfdGFyZ2V0 X2JhY2tsaWdodF9wd20oaW50IGRlYnVnZnNfZGlyKQoreworCWNoYXIgYnVmWzIwXTsKKworCWln dF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGRlYnVnZnNfZGlyLCAiYW1kZ3B1X3RhcmdldF9iYWNrbGln aHRfcHdtIiwKKwkJCSBidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiBzdHJ0b2woYnVmLCBO VUxMLCAwKTsKK30KKworc3RhdGljIGludCBiYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhpbnQg dmFsdWUpCit7CisJaW50IGZkOworCWNoYXIgZnVsbFtQQVRIX01BWF07CisJY2hhciBzcmNbNjRd OworCWludCBsZW47CisKKwlpZ3RfYXNzZXJ0KHNucHJpbnRmKGZ1bGwsIFBBVEhfTUFYLCAiJXMv JXMiLCBCQUNLTElHSFRfUEFUSCwgImJyaWdodG5lc3MiKSA8IFBBVEhfTUFYKTsKKwlmZCA9IG9w ZW4oZnVsbCwgT19XUk9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIC1lcnJubzsKKwor CWxlbiA9IHNucHJpbnRmKHNyYywgc2l6ZW9mKHNyYyksICIlaSIsIHZhbHVlKTsKKwlsZW4gPSB3 cml0ZShmZCwgc3JjLCBsZW4pOworCWNsb3NlKGZkKTsKKworCWlmIChsZW4gPCAwKQorCQlyZXR1 cm4gbGVuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hYm1fbGV2ZWwoaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGxldmVsKQoreworCWludCBpLCByZXQ7CisJaW50IG91 dHB1dF9pZDsKKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wczsKKwl1aW50MzJfdCBw cm9wX2lkOworCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wOworCXVpbnQzMl90IHR5cGUgPSBEUk1f TU9ERV9PQkpFQ1RfQ09OTkVDVE9SOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0 cHV0czsgaSsrKSB7CisJCW91dHB1dF9pZCA9IGRpc3BsYXktPm91dHB1dHNbaV0uaWQ7CisJCXBy b3BzID0gZHJtTW9kZU9iamVjdEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXRf aWQsIHR5cGUpOworCisJCWZvciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykg eworCQkJcHJvcF9pZCA9IHByb3BzLT5wcm9wc1tpXTsKKwkJCXByb3AgPSBkcm1Nb2RlR2V0UHJv cGVydHkoZGlzcGxheS0+ZHJtX2ZkLCBwcm9wX2lkKTsKKworCQkJaWd0X2Fzc2VydChwcm9wKTsK KworCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAiYWJtIGxldmVsIikgPT0gMCkgeworCQkJCXJl dCA9IGRybU1vZGVPYmplY3RTZXRQcm9wZXJ0eShkaXNwbGF5LT5kcm1fZmQsIG91dHB1dF9pZCwg dHlwZSwgcHJvcF9pZCwgbGV2ZWwpOworCisJCQkJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCQkJ fQorCisJCQlkcm1Nb2RlRnJlZVByb3BlcnR5KHByb3ApOworCQl9CisJfQorCit9CisKK3N0YXRp YyBpbnQgYmFja2xpZ2h0X3JlYWRfbWF4X2JyaWdodG5lc3MoaW50ICpyZXN1bHQpCit7CisJaW50 IGZkOworCWNoYXIgZnVsbFtQQVRIX01BWF07CisJY2hhciBkc3RbNjRdOworCWludCByLCBlOwor CisJaWd0X2Fzc2VydChzbnByaW50ZihmdWxsLCBQQVRIX01BWCwgIiVzLyVzIiwgQkFDS0xJR0hU X1BBVEgsICJtYXhfYnJpZ2h0bmVzcyIpIDwgUEFUSF9NQVgpOworCisJZmQgPSBvcGVuKGZ1bGws IE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAtZXJybm87CisKKwlyID0gcmVh ZChmZCwgZHN0LCBzaXplb2YoZHN0KSk7CisJZSA9IGVycm5vOworCWNsb3NlKGZkKTsKKworCWlm IChyIDwgMCkKKwkJcmV0dXJuIC1lOworCisJZXJybm8gPSAwOworCSpyZXN1bHQgPSBzdHJ0b2wo ZHN0LCBOVUxMLCAxMCk7CisJcmV0dXJuIGVycm5vOworfQorCitzdGF0aWMgdm9pZCBza2lwX2lm X2luY29tcGF0aWJsZShpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmc19kaXIpCit7 CisJaW50IHJldCwgaTsKKwljaGFyIGJ1ZlsyMF07CisJYm9vbCBhYm1fcHJvcF9leGlzdHM7CisJ aW50IG91dHB1dF9pZDsKKwlkcm1Nb2RlT2JqZWN0UHJvcGVydGllc1B0ciBwcm9wczsKKwl1aW50 MzJfdCB0eXBlID0gRFJNX01PREVfT0JKRUNUX0NPTk5FQ1RPUjsKKwl1aW50MzJfdCBwcm9wX2lk OworCWRybU1vZGVQcm9wZXJ0eVB0ciBwcm9wOworCisJcmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxl X3JlYWQoZGVidWdmc19kaXIsICJhbWRncHVfY3VycmVudF9iYWNrbGlnaHRfcHdtIiwKKwkJCSBi dWYsIHNpemVvZihidWYpKTsKKworCWlmIChyZXQgPCAwKQorCQlpZ3Rfc2tpcCgiTm8gY3VycmVu dCBiYWNrbGlnaHQgZGVidWdmcyBlbnRyeS5cbiIpOworCisJcmV0ID0gaWd0X2RlYnVnZnNfc2lt cGxlX3JlYWQoZGVidWdmc19kaXIsICJhbWRncHVfdGFyZ2V0X2JhY2tsaWdodF9wd20iLAorCQkJ IGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldCA8IDApCisJCWlndF9za2lwKCJObyB0YXJn ZXQgYmFja2xpZ2h0IGRlYnVnZnMgZW50cnkuXG4iKTsKKworCWFibV9wcm9wX2V4aXN0cyA9IGZh bHNlOworCisJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fb3V0cHV0czsgaSsrKSB7CisJCW91 dHB1dF9pZCA9IGRpc3BsYXktPm91dHB1dHNbaV0uaWQ7CisJCXByb3BzID0gZHJtTW9kZU9iamVj dEdldFByb3BlcnRpZXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXRfaWQsIHR5cGUpOworCisJCWZv ciAoaSA9IDA7IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgeworCQkJcHJvcF9pZCA9IHBy b3BzLT5wcm9wc1tpXTsKKwkJCXByb3AgPSBkcm1Nb2RlR2V0UHJvcGVydHkoZGlzcGxheS0+ZHJt X2ZkLCBwcm9wX2lkKTsKKworCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAiYWJtIGxldmVsIikg PT0gMCkKKwkJCQlhYm1fcHJvcF9leGlzdHMgPSB0cnVlOworCisJCQlkcm1Nb2RlRnJlZVByb3Bl cnR5KHByb3ApOworCQl9CisJfQorCisJaWYgKCFhYm1fcHJvcF9leGlzdHMpCisJCWlndF9za2lw KCJObyBhYm0gbGV2ZWwgcHJvcGVydHkgb24gYW55IGNvbm5lY3Rvci5cbiIpOworfQorCisKK3N0 YXRpYyB2b2lkIGJhY2tsaWdodF9kcG1zX2N5Y2xlKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlu dCBkZWJ1Z2ZzLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCkKK3sKKwlpbnQgcmV0OworCWludCBtYXhf YnJpZ2h0bmVzczsKKwlpbnQgcHdtXzEsIHB3bV8yOworCisJcmV0ID0gYmFja2xpZ2h0X3JlYWRf bWF4X2JyaWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 CisKKwlzZXRfYWJtX2xldmVsKGRpc3BsYXksIDApOworCWJhY2tsaWdodF93cml0ZV9icmlnaHRu ZXNzKG1heF9icmlnaHRuZXNzIC8gMik7CisJdXNsZWVwKDEwMDAwMCk7CisJcHdtXzEgPSByZWFk X3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCisJa21zdGVzdF9zZXRfY29ubmVjdG9y X2RwbXMoZGlzcGxheS0+ZHJtX2ZkLCBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3IsIERSTV9NT0RF X0RQTVNfT0ZGKTsKKwlrbXN0ZXN0X3NldF9jb25uZWN0b3JfZHBtcyhkaXNwbGF5LT5kcm1fZmQs IG91dHB1dC0+Y29uZmlnLmNvbm5lY3RvciwgRFJNX01PREVfRFBNU19PTik7CisJdXNsZWVwKDEw MDAwMCk7CisJcHdtXzIgPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCWln dF9hc3NlcnRfZXEocHdtXzEsIHB3bV8yKTsKK30KKworc3RhdGljIHZvaWQgYmFja2xpZ2h0X21v bm90b25pY19iYXNpYyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKK3sKKwlp bnQgcmV0OworCWludCBtYXhfYnJpZ2h0bmVzczsKKwlpbnQgcHJldl9wd20sIHB3bTsKKwlpbnQg YnJpZ2h0bmVzc19zdGVwOworCWludCBicmlnaHRuZXNzOworCisJcmV0ID0gYmFja2xpZ2h0X3Jl YWRfbWF4X2JyaWdodG5lc3MoJm1heF9icmlnaHRuZXNzKTsKKwlpZ3RfYXNzZXJ0X2VxKHJldCwg MCk7CisKKwlicmlnaHRuZXNzX3N0ZXAgPSBtYXhfYnJpZ2h0bmVzcyAvIDEwOworCisJc2V0X2Fi bV9sZXZlbChkaXNwbGF5LCAwKTsKKwliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhtYXhfYnJp Z2h0bmVzcyk7CisJdXNsZWVwKDEwMDAwMCk7CisJcHJldl9wd20gPSByZWFkX3RhcmdldF9iYWNr bGlnaHRfcHdtKGRlYnVnZnMpOworCWZvciAoYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzIC0g YnJpZ2h0bmVzc19zdGVwOworCSAgICAgYnJpZ2h0bmVzcyA+IDA7CisJICAgICBicmlnaHRuZXNz IC09IGJyaWdodG5lc3Nfc3RlcCkgeworCQliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhicmln aHRuZXNzKTsKKwkJdXNsZWVwKDEwMDAwMCk7CisJCXB3bSA9IHJlYWRfdGFyZ2V0X2JhY2tsaWdo dF9wd20oZGVidWdmcyk7CisJCWlndF9hc3NlcnQocHdtIDwgcHJldl9wd20pOworCQlwcmV2X3B3 bSA9IHB3bTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgYmFja2xpZ2h0X21vbm90b25pY19hYm0o aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRlYnVnZnMpCit7CisJaW50IHJldCwgaTsKKwlp bnQgbWF4X2JyaWdodG5lc3M7CisJaW50IHByZXZfcHdtLCBwd207CisJaW50IGJyaWdodG5lc3Nf c3RlcDsKKwlpbnQgYnJpZ2h0bmVzczsKKworCXJldCA9IGJhY2tsaWdodF9yZWFkX21heF9icmln aHRuZXNzKCZtYXhfYnJpZ2h0bmVzcyk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJYnJp Z2h0bmVzc19zdGVwID0gbWF4X2JyaWdodG5lc3MgLyAxMDsKKwlmb3IgKGkgPSAxOyBpIDwgNTsg aSsrKSB7CisJCXNldF9hYm1fbGV2ZWwoZGlzcGxheSwgaSk7CisJCWJhY2tsaWdodF93cml0ZV9i cmlnaHRuZXNzKG1heF9icmlnaHRuZXNzKTsKKwkJdXNsZWVwKDEwMDAwMCk7CisJCXByZXZfcHdt ID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKKwkJZm9yIChicmlnaHRuZXNz ID0gbWF4X2JyaWdodG5lc3MgLSBicmlnaHRuZXNzX3N0ZXA7CisJCSAgICAgYnJpZ2h0bmVzcyA+ IDA7CisJCSAgICAgYnJpZ2h0bmVzcyAtPSBicmlnaHRuZXNzX3N0ZXApIHsKKwkJCWJhY2tsaWdo dF93cml0ZV9icmlnaHRuZXNzKGJyaWdodG5lc3MpOworCQkJdXNsZWVwKDEwMDAwMCk7CisJCQlw d20gPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCQkJaWd0X2Fzc2VydChw d20gPCBwcmV2X3B3bSk7CisJCQlwcmV2X3B3bSA9IHB3bTsKKwkJfQorCX0KK30KKworc3RhdGlj IHZvaWQgYWJtX2VuYWJsZWQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRlYnVnZnMpCit7 CisJaW50IHJldCwgaTsKKwlpbnQgbWF4X2JyaWdodG5lc3M7CisJaW50IHB3bSwgcHJldl9wd20s IHB3bV93aXRob3V0X2FibTsKKworCXJldCA9IGJhY2tsaWdodF9yZWFkX21heF9icmlnaHRuZXNz KCZtYXhfYnJpZ2h0bmVzcyk7CisJaWd0X2Fzc2VydF9lcShyZXQsIDApOworCisJc2V0X2FibV9s ZXZlbChkaXNwbGF5LCAwKTsKKwliYWNrbGlnaHRfd3JpdGVfYnJpZ2h0bmVzcyhtYXhfYnJpZ2h0 bmVzcyk7CisJdXNsZWVwKDEwMDAwMCk7CisJcHJldl9wd20gPSByZWFkX3RhcmdldF9iYWNrbGln aHRfcHdtKGRlYnVnZnMpOworCXB3bV93aXRob3V0X2FibSA9IHByZXZfcHdtOworCisJZm9yIChp ID0gMTsgaSA8IDU7IGkrKykgeworCQlzZXRfYWJtX2xldmVsKGRpc3BsYXksIGkpOworCQl1c2xl ZXAoMTAwMDAwKTsKKwkJcHdtID0gcmVhZF90YXJnZXRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsK KwkJaWd0X2Fzc2VydChwd20gPD0gcHJldl9wd20pOworCQlpZ3RfYXNzZXJ0KHB3bSA8IHB3bV93 aXRob3V0X2FibSk7CisJCXByZXZfcHdtID0gcHdtOworCX0KKworfQorCitzdGF0aWMgdm9pZCBh Ym1fZ3JhZHVhbChpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZGVidWdmcykKK3sKKwlpbnQg cmV0LCBpOworCWludCBjb252ZXJnZW5jZV9kZWxheSA9IDE1OworCWludCBwcmV2X3B3bSwgcHdt LCBjdXJyOworCWludCBtYXhfYnJpZ2h0bmVzczsKKworCXJldCA9IGJhY2tsaWdodF9yZWFkX21h eF9icmlnaHRuZXNzKCZtYXhfYnJpZ2h0bmVzcyk7CisKKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7 CisKKwlzZXRfYWJtX2xldmVsKGRpc3BsYXksIDApOworCWJhY2tsaWdodF93cml0ZV9icmlnaHRu ZXNzKG1heF9icmlnaHRuZXNzKTsKKworCXNsZWVwKGNvbnZlcmdlbmNlX2RlbGF5KTsKKwlwcmV2 X3B3bSA9IHJlYWRfdGFyZ2V0X2JhY2tsaWdodF9wd20oZGVidWdmcyk7CisJY3VyciA9IHJlYWRf Y3VycmVudF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCisJaWd0X2Fzc2VydF9lcShwcmV2X3B3 bSwgY3Vycik7CisJc2V0X2FibV9sZXZlbChkaXNwbGF5LCA0KTsKKwlmb3IgKGkgPSAwOyBpIDwg MTA7IGkrKykgeworCQl1c2xlZXAoMTAwMDAwKTsKKwkJcHdtID0gcmVhZF9jdXJyZW50X2JhY2ts aWdodF9wd20oZGVidWdmcyk7CisJCWlndF9hc3NlcnQocHdtIDwgcHJldl9wd20pOworCQlwcmV2 X3B3bSA9IHB3bTsKKwl9CisKKwlzbGVlcChjb252ZXJnZW5jZV9kZWxheSAtIDEpOworCisJcHJl dl9wd20gPSByZWFkX3RhcmdldF9iYWNrbGlnaHRfcHdtKGRlYnVnZnMpOworCWN1cnIgPSByZWFk X2N1cnJlbnRfYmFja2xpZ2h0X3B3bShkZWJ1Z2ZzKTsKKworCWlndF9hc3NlcnRfZXEocHJldl9w d20sIGN1cnIpOworfQorCitpZ3RfbWFpbgoreworCWlndF9kaXNwbGF5X3QgZGlzcGxheTsKKwlp bnQgZGVidWdmczsKKwllbnVtIHBpcGUgcGlwZTsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwor CWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKKworCWlndF9maXh0dXJlIHsKKwkJZGlzcGxheS5k cm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTURHUFUpOworCisJCWlmIChk aXNwbGF5LmRybV9mZCA9PSAtMSkKKwkJCWlndF9za2lwKCJOb3QgYW4gYW1kZ3B1IGRyaXZlci5c biIpOworCisJCWRlYnVnZnMgPSBpZ3RfZGVidWdmc19kaXIoZGlzcGxheS5kcm1fZmQpOworCisJ CWttc3Rlc3Rfc2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfZGlzcGxheV9yZXF1aXJl KCZkaXNwbGF5LCBkaXNwbGF5LmRybV9mZCk7CisKKwkJc2tpcF9pZl9pbmNvbXBhdGlibGUoJmRp c3BsYXksIGRlYnVnZnMpOworCisJCWZvcl9lYWNoX3BpcGVfd2l0aF92YWxpZF9vdXRwdXQoJmRp c3BsYXksIHBpcGUsIG91dHB1dCkgeworCQkJaWYgKG91dHB1dC0+Y29uZmlnLmNvbm5lY3Rvci0+ Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX2VEUCkKKwkJCQlicmVhazsKKwkJ fQorCX0KKworCWlndF9zdWJ0ZXN0KCJkcG1zX2N5Y2xlIikKKwkJYmFja2xpZ2h0X2RwbXNfY3lj bGUoJmRpc3BsYXksIGRlYnVnZnMsIG91dHB1dCk7CisJaWd0X3N1YnRlc3QoImJhY2tsaWdodF9t b25vdG9uaWNfYmFzaWMiKQorCQliYWNrbGlnaHRfbW9ub3RvbmljX2Jhc2ljKCZkaXNwbGF5LCBk ZWJ1Z2ZzKTsKKwlpZ3Rfc3VidGVzdCgiYmFja2xpZ2h0X21vbm90b25pY19hYm0iKQorCQliYWNr bGlnaHRfbW9ub3RvbmljX2FibSgmZGlzcGxheSwgZGVidWdmcyk7CisJaWd0X3N1YnRlc3QoImFi bV9lbmFibGVkIikKKwkJYWJtX2VuYWJsZWQoJmRpc3BsYXksIGRlYnVnZnMpOworCWlndF9zdWJ0 ZXN0KCJhYm1fZ3JhZHVhbCIpCisJCWFibV9ncmFkdWFsKCZkaXNwbGF5LCBkZWJ1Z2ZzKTsKKwor CWlndF9maXh0dXJlIHsKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGlzcGxheSk7CisJfQorfQotLSAK Mi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK