From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3F3BA6EBB5 for ; Fri, 9 Mar 2018 14:50:41 +0000 (UTC) From: Lionel Landwerlin Date: Fri, 9 Mar 2018 14:50:34 +0000 Message-Id: <20180309145034.25757-3-lionel.g.landwerlin@intel.com> In-Reply-To: <20180309145034.25757-1-lionel.g.landwerlin@intel.com> References: <20180309145034.25757-1-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v9 3/3] tests: add i915 query tests 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: djI6IENvbXBsZXRlIGludmFsaWQgY2FzZXMgKENocmlzKQogICAgU29tZSBzdHlsaW5nICh0b191 c2VyX3BvaW50ZXIsIGV0Yy4uLikgKENocmlzKQogICAgTmV3IGVycm9yIGNoZWNrLCB0aHJvdWdo IGl0ZW0ubGVuZ3RoIChDaHJpcykKCnYzOiBVcGRhdGUgZm9yIG5ldyB1QVBJIGl0ZXJhdGlvbiAo TGlvbmVsKQoKdjQ6IFJldHVybiBlcnJubyBmcm9tIGEgc2luZ2xlIHBvaW50IChDaHJpcykKICAg IFBvaXNpbmcgY2hlY2tzIChDaHJpcykKCnY1OiBBZGQgbW9yZSBkZWJ1ZyB0cmFjZXMgKExpb25l bCkKICAgIFVwZGF0ZSB1QVBJIChKb29uYXMvTGlvbmVsKQogICAgTWFrZSBzdXJlIEhhc3dlbGwg aXMgdGVzdGVkIChMaW9uZWwpCgp2Njogcy9xdWVyeV9pdGVtL3F1ZXJ5X2l0ZW1zLyAoVHZydGtv KQogICAgdGVzdCB0aGF0IGZsYWdzIGZpZWxkcyAhPSAwIGZhaWwgKFR2cnRrbykKICAgIFNwbGl0 IGtlcm5lbCB3cml0ZXMgY2hlY2tzIG91dCAoVHZydGtvKQogICAgVmVyaWZ5IHRoYXQgd2hlbiBh biBFVSBpcyBhdmFpbGFibGUsIHNvIGlzIHNsaWNlICYgc3Vic2xpY2UgaXQKICAgIGJlbG9uZ3Mg dG8gKHNhbWUgd2l0aCBzdWJzbGljZSkuIChUdnJ0a28pCiAgICBWZXJpZnkga2VybmVsIGVycm9y cyBvdXQgd2l0aCByZWFkIG9ubHkgbWVtb3J5IChUdnJ0a28pCgp2NzogQWRkIGEgc3BlY2lhbCBI YXN3ZWxsIHRlc3QgdG8gdmVyaWZ5IGNvcnJlY3QgdmFsdWVzIChUdnJ0a28pCiAgICBTaW1wbGlm eSBpZ3RfcmVxdWlyZSgpIGluIGZyb250IG9mIHRlc3RzIChUdnJ0a28pCgp2ODogUmV1c2UgdGhl IEdUIGZpZWxkIGZyb20gZGV2aWNlIGluZm8gdG8gdmVyaWZ5IHNsaWNlL3N1YnNsaWNlcwogICAg bnVtYmVycyBvbiB3aWRlciBudW1iZXIgb2YgcGxhdGZvcm1zIChMaW9uZWwpCgp2OTogRml4IGlu dmFsaWQgbnVtYmVyIG9mIHN1YnNsaWNlcyBvbiBHVDQgKExpb25lbCkKICAgIFVwZGF0ZSBjb21t ZW50cyBzdHlsZSAoVHZydGtvKQogICAgVGVzdCBpbnZhbGlkIHF1ZXJ5IHBvaW50ZXIgKFR2cnRr bykKICAgIENoZWNrIHRvcG9sb2d5IGl0ZW0gbWluaW11bSBsZW5ndGggKFR2cnRrbykKICAgIFRl c3QgaW52YWxpZCBpdGVtIGRhdGEgcG9pbnRlcnMgKFR2cnRrbykKClNpZ25lZC1vZmYtYnk6IExp b25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNvbT4KLS0tCiB0ZXN0 cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRlc3RzL2k5MTVfcXVlcnkuYyAgICAgfCA1MTQg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogdGVzdHMv bWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDUxNiBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNV9xdWVyeS5jCgpkaWZmIC0tZ2l0IGEv dGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKaW5kZXggNGE4 MWFjNGEuLjRlNmY1MzE5IDEwMDY0NAotLS0gYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBi L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTE2Nyw2ICsxNjcsNyBAQCBURVNUU19wcm9ncyA9 IFwKIAlnZW4zX3JlbmRlcl90aWxlZHhfYmxpdHMgXAogCWdlbjNfcmVuZGVyX3RpbGVkeV9ibGl0 cyBcCiAJZ3Z0X2Jhc2ljIFwKKwlpOTE1X3F1ZXJ5IFwKIAlrbXNfM2QgXAogCWttc19hZGRmYl9i YXNpYyBcCiAJa21zX2F0b21pYyBcCmRpZmYgLS1naXQgYS90ZXN0cy9pOTE1X3F1ZXJ5LmMgYi90 ZXN0cy9pOTE1X3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmJi MGYwNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaTkxNV9xdWVyeS5jCkBAIC0wLDAgKzEs NTE0IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUg ImlndC5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK0lHVF9URVNUX0RFU0NSSVBUSU9OKCJU ZXN0aW5nIHRoZSBpOTE1IHF1ZXJ5IHVBUEkuIik7CisKKy8qCisgKiBXZSBzaG91bGQgYXQgbGVh c3QgZ2V0IDMgYnl0ZXMgZm9yIGRhdGEgZm9yIGVhY2ggc2xpY2VzLCBzdWJzbGljZXMgJiBFVXMK KyAqIG1hc2tzLgorICovCisjZGVmaW5lIE1JTl9UT1BPTE9HWV9JVEVNX1NJWkUgKHNpemVvZihz dHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbykgKyAzKQorCitzdGF0aWMgaW50Citf X2k5MTVfcXVlcnkoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkgKnEpCit7CisJaWYgKGln dF9pb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfUVVFUlksIHEpKQorCQlyZXR1cm4gLWVycm5vOwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfX2k5MTVfcXVlcnlfaXRlbXMoaW50IGZkLCBz dHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSAqaXRlbXMsIHVpbnQzMl90IG5faXRlbXMpCit7CisJ c3RydWN0IGRybV9pOTE1X3F1ZXJ5IHEgPSB7CisJCS5udW1faXRlbXMgPSBuX2l0ZW1zLAorCQku aXRlbXNfcHRyID0gdG9fdXNlcl9wb2ludGVyKGl0ZW1zKSwKKwl9OworCXJldHVybiBfX2k5MTVf cXVlcnkoZmQsICZxKTsKK30KKworI2RlZmluZSBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVtcywg bl9pdGVtcykgZG8geyBcCisJCWlndF9hc3NlcnRfZXEoX19pOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBp dGVtcywgbl9pdGVtcyksIDApOyBcCisJCWVycm5vID0gMDsgXAorCX0gd2hpbGUgKDApCisjZGVm aW5lIGk5MTVfcXVlcnlfaXRlbXNfZXJyKGZkLCBpdGVtcywgbl9pdGVtcywgZXJyKSBkbyB7IFwK KwkJaWd0X2Fzc2VydF9lcShfX2k5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zLCBuX2l0ZW1zKSwg LWVycik7IFwKKwl9IHdoaWxlICgwKQorCitzdGF0aWMgYm9vbCBoYXNfcXVlcnlfc3VwcG9ydHMo aW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeSA9IHt9OworCisJcmV0dXJu IF9faTkxNV9xdWVyeShmZCwgJnF1ZXJ5KSA9PSAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3F1 ZXJ5X2dhcmJhZ2UoaW50IGZkKQoreworCXN0cnVjdCBkcm1faTkxNV9xdWVyeSBxdWVyeTsKKwlz dHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRlbSBpdGVtc1syXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVl cnlfaXRlbSAqaXRlbXNfcHRyOworCWludCBpLCBuX2l0ZW1zOworCisJLyogVmVyaWZ5IHRoYXQg aW52YWxpZCBxdWVyeSBwb2ludGVycyBhcmUgcmVqZWN0ZWQuICovCisJaWd0X2Fzc2VydF9lcShf X2k5MTVfcXVlcnkoZmQsIE5VTEwpLCAtRUZBVUxUKTsKKwlpZ3RfYXNzZXJ0X2VxKF9faTkxNV9x dWVyeShmZCwgKHZvaWQgKikgLTEpLCAtRUZBVUxUKTsKKworCS8qCisJICogUXVlcnkgZmxhZ3Mg ZmllbGQgaXMgY3VycmVudGx5IHZhbGlkIG9ubHkgaWYgZXF1YWxzIHRvIDAuIFRoaXMgbWlnaHQK KwkgKiBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwltZW1zZXQoJnF1ZXJ5LCAwLCBzaXpl b2YocXVlcnkpKTsKKwlxdWVyeS5mbGFncyA9IDQyOworCWlndF9hc3NlcnRfZXEoX19pOTE1X3F1 ZXJ5KGZkLCAmcXVlcnkpLCAtRUlOVkFMKTsKKworCS8qIFRlc3QgYSBjb3VwbGUgb2YgaW52YWxp ZCBwb2ludGVycy4gKi8KKwlpOTE1X3F1ZXJ5X2l0ZW1zX2VycihmZCwgKHZvaWQgKikgVUxPTkdf TUFYLCAxLCBFRkFVTFQpOworCWk5MTVfcXVlcnlfaXRlbXNfZXJyKGZkLCAodm9pZCAqKSAwLCAx LCBFRkFVTFQpOworCisJLyogVGVzdCB0aGUgaW52YWxpZCBxdWVyeSBpZCA9IDAuICovCisJbWVt c2V0KGl0ZW1zLCAwLCBzaXplb2YoaXRlbXMpKTsKKwlpOTE1X3F1ZXJ5X2l0ZW1zX2VycihmZCwg aXRlbXMsIDEsIEVJTlZBTCk7CisKKwkvKgorCSAqIFF1ZXJ5IGl0ZW0gZmxhZ3MgZmllbGQgaXMg Y3VycmVudGx5IHZhbGlkIG9ubHkgaWYgZXF1YWxzIHRvIDAuCisJICogU3ViamVjdCB0byBjaGFu Z2UgaW4gdGhlIGZ1dHVyZS4KKwkgKi8KKwltZW1zZXQoaXRlbXMsIDAsIHNpemVvZihpdGVtcykp OworCWl0ZW1zWzBdLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfVE9QT0xPR1lfSU5GTzsKKwlp dGVtc1swXS5mbGFncyA9IDQyOworCWk5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zLCAxKTsKKwlp Z3RfYXNzZXJ0X2VxKGl0ZW1zWzBdLmxlbmd0aCwgLUVJTlZBTCk7CisKKwkvKgorCSAqIFRlc3Qg YW4gaW52YWxpZCBxdWVyeSBpZCBpbiB0aGUgc2Vjb25kIGl0ZW0gYW5kIHZlcmlmeSB0aGF0IHRo ZSBmaXJzdAorCSAqIG9uZSBpcyBwcm9wZXJseSBwcm9jZXNzZWQuCisJICovCisJbWVtc2V0KGl0 ZW1zLCAwLCBzaXplb2YoaXRlbXMpKTsKKwlpdGVtc1swXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FV RVJZX1RPUE9MT0dZX0lORk87CisJaXRlbXNbMV0ucXVlcnlfaWQgPSBVTE9OR19NQVg7CisJaTkx NV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDIpOworCWlndF9hc3NlcnRfbHRlKE1JTl9UT1BPTE9H WV9JVEVNX1NJWkUsIGl0ZW1zWzBdLmxlbmd0aCk7CisJaWd0X2Fzc2VydF9lcShpdGVtc1sxXS5s ZW5ndGgsIC1FSU5WQUwpOworCisJLyoKKwkgKiBUZXN0IGEgaW52YWxpZCBxdWVyeSBpZCBpbiB0 aGUgZmlyc3QgaXRlbSBhbmQgdmVyaWZ5IHRoYXQgdGhlIHNlY29uZAorCSAqIG9uZSBpcyBwcm9w ZXJseSBwcm9jZXNzZWQgKHRoZSBkcml2ZXIgaXMgZXhwZWN0ZWQgdG8gZ28gdGhyb3VnaCB0aGVt CisJICogYWxsIGFuZCBwbGFjZSBlcnJvciBjb2RlcyBpbiB0aGUgZmFpbGVkIGl0ZW1zKS4KKwkg Ki8KKwltZW1zZXQoaXRlbXMsIDAsIHNpemVvZihpdGVtcykpOworCWl0ZW1zWzBdLnF1ZXJ5X2lk ID0gVUxPTkdfTUFYOworCWl0ZW1zWzFdLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfVE9QT0xP R1lfSU5GTzsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCBpdGVtcywgMik7CisJaWd0X2Fzc2VydF9l cShpdGVtc1swXS5sZW5ndGgsIC1FSU5WQUwpOworCWlndF9hc3NlcnRfbHRlKE1JTl9UT1BPTE9H WV9JVEVNX1NJWkUsIGl0ZW1zWzFdLmxlbmd0aCk7CisKKwkvKiBUZXN0IGEgY291cGxlIG9mIGlu dmFsaWQgZGF0YSBwb2ludGVyIGluIHF1ZXJ5IGl0ZW0uICovCisJbWVtc2V0KGl0ZW1zLCAwLCBz aXplb2YoaXRlbXMpKTsKKwlpdGVtc1swXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9M T0dZX0lORk87CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDEpOworCWlndF9hc3NlcnRf bHRlKE1JTl9UT1BPTE9HWV9JVEVNX1NJWkUsIGl0ZW1zWzBdLmxlbmd0aCk7CisKKwlpdGVtc1sw XS5kYXRhX3B0ciA9IDA7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDEpOworCWlndF9h c3NlcnRfZXEoaXRlbXNbMF0ubGVuZ3RoLCAtRUZBVUxUKTsKKworCWl0ZW1zWzBdLmRhdGFfcHRy ID0gVUxPTkdfTUFYOworCWk5MTVfcXVlcnlfaXRlbXMoZmQsIGl0ZW1zLCAxKTsKKwlpZ3RfYXNz ZXJ0X2VxKGl0ZW1zWzBdLmxlbmd0aCwgLUVGQVVMVCk7CisKKworCS8qIFRlc3QgYW4gaW52YWxp ZCBxdWVyeSBpdGVtIGxlbmd0aC4gKi8KKwltZW1zZXQoaXRlbXMsIDAsIHNpemVvZihpdGVtcykp OworCWl0ZW1zWzBdLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllfVE9QT0xPR1lfSU5GTzsKKwlp dGVtc1sxXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9MT0dZX0lORk87CisJaXRlbXNb MV0ubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvKSAt IDE7CisJaTkxNV9xdWVyeV9pdGVtcyhmZCwgaXRlbXMsIDIpOworCWlndF9hc3NlcnRfbHRlKE1J Tl9UT1BPTE9HWV9JVEVNX1NJWkUsIGl0ZW1zWzBdLmxlbmd0aCk7CisJaWd0X2Fzc2VydF9lcShp dGVtc1sxXS5sZW5ndGgsIC1FSU5WQUwpOworCisJLyoKKwkgKiBNYXAgbWVtb3J5IGZvciBhIHF1 ZXJ5IGl0ZW0gaW4gd2hpY2ggdGhlIGtlcm5lbCBpcyBnb2luZyB0byB3cml0ZSB0aGUKKwkgKiBs ZW5ndGggb2YgdGhlIGl0ZW0gaW4gdGhlIGZpcnN0IGlvY3RsKCkuIFRoZW4gdW5tYXAgdGhhdCBt ZW1vcnkgYW5kCisJICogdmVyaWZ5IHRoYXQgdGhlIGtlcm5lbCBjb3JyZWN0bHkgcmV0dXJucyBF RkFVTFQgYXMgbWVtb3J5IG9mIHRoZSBpdGVtCisJICogaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIG91 ciBhZGRyZXNzIHNwYWNlLgorCSAqLworCWl0ZW1zX3B0ciA9IG1tYXAoMCwgNDA5NiwgUFJPVF9X UklURSwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOworCWl0ZW1zX3B0clswXS5xdWVy eV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9MT0dZX0lORk87CisJaTkxNV9xdWVyeV9pdGVtcyhm ZCwgaXRlbXNfcHRyLCAxKTsKKwlpZ3RfYXNzZXJ0X2x0ZShNSU5fVE9QT0xPR1lfSVRFTV9TSVpF LCBpdGVtc19wdHJbMF0ubGVuZ3RoKTsKKwltdW5tYXAoaXRlbXNfcHRyLCA0MDk2KTsKKwlpOTE1 X3F1ZXJ5X2l0ZW1zX2VycihmZCwgaXRlbXNfcHRyLCAxLCBFRkFVTFQpOworCisJLyoKKwkgKiBN YXAgbWVtb3J5IGZvciBhIHF1ZXJ5IGl0ZW0sIHRoZW4gbWFrZSBpdCByZWFkIG9ubHkgYW5kIHZl cmlmeSB0aGF0CisJICogdGhlIGtlcm5lbCBlcnJvcnMgb3V0IHdpdGggRUZBVUxULgorCSAqLwor CWl0ZW1zX3B0ciA9IG1tYXAoMCwgNDA5NiwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUgfCBNQVBf QU5PTiwgLTEsIDApOworCWl0ZW1zX3B0clswXS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RP UE9MT0dZX0lORk87CisJaWd0X2Fzc2VydF9lcSgwLCBtcHJvdGVjdChpdGVtc19wdHIsIDQwOTYs IFBST1RfUkVBRCkpOworCWk5MTVfcXVlcnlfaXRlbXNfZXJyKGZkLCBpdGVtc19wdHIsIDEsIEVG QVVMVCk7CisJbXVubWFwKGl0ZW1zX3B0ciwgNDA5Nik7CisKKwkvKgorCSAqIEFsbG9jYXRlIDIg cGFnZXMsIHByZXBhcmUgdGhvc2UgMiBwYWdlcyB3aXRoIHZhbGlkIHF1ZXJ5IGl0ZW1zLCB0aGVu CisJICogc3dpdGNoIHRoZSBzZWNvbmQgcGFnZSB0byByZWFkIG9ubHkgYW5kIGV4cGVjdCBhbiBF RkFVTFQgZXJyb3IuCisJICovCisJaXRlbXNfcHRyID0gbW1hcCgwLCA4MTkyLCBQUk9UX1dSSVRF LCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisJbWVtc2V0KGl0ZW1zX3B0ciwgMCwg ODE5Mik7CisJbl9pdGVtcyA9IDgxOTIgLyBzaXplb2Yoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0 ZW0pOworCWZvciAoaSA9IDA7IGkgPCBuX2l0ZW1zOyBpKyspCisJCWl0ZW1zX3B0cltpXS5xdWVy eV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9MT0dZX0lORk87CisJbXByb3RlY3QoKCh1aW50OF90 ICopaXRlbXNfcHRyKSArIDQwOTYsIDQwOTYsIFBST1RfUkVBRCk7CisJaTkxNV9xdWVyeV9pdGVt c19lcnIoZmQsIGl0ZW1zX3B0ciwgbl9pdGVtcywgRUZBVUxUKTsKKwltdW5tYXAoaXRlbXNfcHRy LCA4MTkyKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIG1vcmUgb24gYm90aCBzaWRlcyBvZiB3aGVy ZSB0aGUga2VybmVsIGlzIGdvaW5nIHRvIHdyaXRlIGFuZCB2ZXJpZnkKKyAqIHRoYXQgaXQgd3Jp dGVzIG9ubHkgd2hlcmUgaXQncyBzdXBwb3NlZCB0by4KKyAqLworc3RhdGljIHZvaWQgdGVzdF9x dWVyeV90b3BvbG9neV9rZXJuZWxfd3JpdGVzKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf cXVlcnlfaXRlbSBpdGVtOworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvICp0 b3BvX2luZm87CisJdWludDhfdCAqX3RvcG9faW5mbzsKKwlpbnQgYiwgdG90YWxfc2l6ZTsKKwor CW1lbXNldCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5 MTVfUVVFUllfVE9QT0xPR1lfSU5GTzsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7 CisJaWd0X2Fzc2VydF9sdGUoTUlOX1RPUE9MT0dZX0lURU1fU0laRSwgaXRlbS5sZW5ndGgpOwor CisJdG90YWxfc2l6ZSA9IGl0ZW0ubGVuZ3RoICsgMiAqIHNpemVvZigqX3RvcG9faW5mbyk7CisJ X3RvcG9faW5mbyA9IG1hbGxvYyh0b3RhbF9zaXplKTsKKwltZW1zZXQoX3RvcG9faW5mbywgMHhm ZiwgdG90YWxfc2l6ZSk7CisJdG9wb19pbmZvID0gKHN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3Bv bG9neV9pbmZvICopIChfdG9wb19pbmZvICsgc2l6ZW9mKCpfdG9wb19pbmZvKSk7CisJbWVtc2V0 KHRvcG9faW5mbywgMCwgaXRlbS5sZW5ndGgpOworCisJaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJf cG9pbnRlcih0b3BvX2luZm8pOworCWk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKwor CWZvciAoYiA9IDA7IGIgPCBzaXplb2YoKl90b3BvX2luZm8pOyBiKyspIHsKKwkJaWd0X2Fzc2Vy dF9lcShfdG9wb19pbmZvW2JdLCAweGZmKTsKKwkJaWd0X2Fzc2VydF9lcShfdG9wb19pbmZvW3Np emVvZigqX3RvcG9faW5mbykgKyBpdGVtLmxlbmd0aCArIGJdLCAweGZmKTsKKwl9Cit9CisKK3N0 YXRpYyBib29sIHF1ZXJ5X3RvcG9sb2d5X3N1cHBvcnRlZChpbnQgZmQpCit7CisJc3RydWN0IGRy bV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsKKwkJLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllf VE9QT0xPR1lfSU5GTywKKwl9OworCisJcmV0dXJuIF9faTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0 ZW0sIDEpID09IDAgJiYgaXRlbS5sZW5ndGggPiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X3F1 ZXJ5X3RvcG9sb2d5X3Vuc3VwcG9ydGVkKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVl cnlfaXRlbSBpdGVtID0geworCQkucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9J TkZPLAorCX07CisKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJaWd0X2Fzc2Vy dF9lcShpdGVtLmxlbmd0aCwgLUVOT0RFVik7Cit9CisKKyNkZWZpbmUgRElWX1JPVU5EX1VQKHZh bCwgZGl2KSAoQUxJR04odmFsLCBkaXYpIC8gZGl2KQorCitzdGF0aWMgYm9vbAorc2xpY2VfYXZh aWxhYmxlKGNvbnN0IHN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvICp0b3BvX2lu Zm8sCisJCWludCBzKQoreworCXJldHVybiAodG9wb19pbmZvLT5kYXRhW3MgLyA4XSA+PiAocyAl IDgpKSAmIDE7Cit9CisKK3N0YXRpYyBib29sCitzdWJzbGljZV9hdmFpbGFibGUoY29uc3Qgc3Ry dWN0IGRybV9pOTE1X3F1ZXJ5X3RvcG9sb2d5X2luZm8gKnRvcG9faW5mbywKKwkJICAgaW50IHMs IGludCBzcykKK3sKKwlyZXR1cm4gKHRvcG9faW5mby0+ZGF0YVt0b3BvX2luZm8tPnN1YnNsaWNl X29mZnNldCArCisJCQkJcyAqIHRvcG9faW5mby0+c3Vic2xpY2Vfc3RyaWRlICsKKwkJCQlzcyAv IDhdID4+IChzcyAlIDgpKSAmIDE7Cit9CisKK3N0YXRpYyBib29sCitldV9hdmFpbGFibGUoY29u c3Qgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3RvcG9sb2d5X2luZm8gKnRvcG9faW5mbywKKwkgICAg IGludCBzLCBpbnQgc3MsIGludCBldSkKK3sKKwlyZXR1cm4gKHRvcG9faW5mby0+ZGF0YVt0b3Bv X2luZm8tPmV1X29mZnNldCArCisJCQkJKHMgKiB0b3BvX2luZm8tPm1heF9zdWJzbGljZXMgKyBz cykgKiB0b3BvX2luZm8tPmV1X3N0cmlkZSArCisJCQkJZXUgLyA4XSA+PiAoZXUgJSA4KSkgJiAx OworfQorCisvKgorICogVmVyaWZ5IHRoYXQgd2UgZ2V0IGNvaGVyZW50IHZhbHVlcyBiZXR3ZWVu IHRoZSBsZWdhY3kgZ2V0cGFyYW0gc2xpY2Uvc3Vic2xpY2UKKyAqIG1hc2tzIGFuZCB0aGUgbmV3 IHRvcG9sb2d5IHF1ZXJ5LgorICovCitzdGF0aWMgdm9pZAordGVzdF9xdWVyeV90b3BvbG9neV9j b2hlcmVudF9zbGljZV9tYXNrKGludCBmZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfaXRl bSBpdGVtOworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9pbmZvICp0b3BvX2luZm87 CisJZHJtX2k5MTVfZ2V0cGFyYW1fdCBncDsKKwlpbnQgc2xpY2VfbWFzaywgc3Vic2xpY2VfbWFz azsKKwlpbnQgcywgdG9wb2xvZ3lfc2xpY2VzLCB0b3BvbG9neV9zdWJzbGljZXNfc2xpY2UwOwor CWludDMyX3QgZmlyc3RfcXVlcnlfbGVuZ3RoOworCisJZ3AucGFyYW0gPSBJOTE1X1BBUkFNX1NM SUNFX01BU0s7CisJZ3AudmFsdWUgPSAmc2xpY2VfbWFzazsKKwlpZ3Rfc2tpcF9vbihpZ3RfaW9j dGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApICE9IDApOworCisJZ3AucGFyYW0g PSBJOTE1X1BBUkFNX1NVQlNMSUNFX01BU0s7CisJZ3AudmFsdWUgPSAmc3Vic2xpY2VfbWFzazsK KwlpZ3Rfc2tpcF9vbihpZ3RfaW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3Ap ICE9IDApOworCisJLyogU2xpY2VzICovCisJbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkp OworCWl0ZW0ucXVlcnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9JTkZPOworCWk5MTVf cXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKKwkvKiBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIGJ5 dGUgZm9yIGVhY2ggc2xpY2VzLCBzdWJzbGljZXMgJiBFVXMgbWFza3MuICovCisJaWd0X2Fzc2Vy dF9sdGUoTUlOX1RPUE9MT0dZX0lURU1fU0laRSwgaXRlbS5sZW5ndGgpOworCWZpcnN0X3F1ZXJ5 X2xlbmd0aCA9IGl0ZW0ubGVuZ3RoOworCisJdG9wb19pbmZvID0gY2FsbG9jKDEsIGl0ZW0ubGVu Z3RoKTsKKworCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIodG9wb19pbmZvKTsKKwlp OTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisJLyogV2Ugc2hvdWxkIGdldCB0aGUgc2Ft ZSBzaXplIG9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gd3JpdHRlbi4gKi8KKwlpZ3RfYXNzZXJ0X2Vx KGZpcnN0X3F1ZXJ5X2xlbmd0aCwgaXRlbS5sZW5ndGgpOworCS8qIFdlIGV4cGVjdCBhdCBsZWFz dCBvbmUgYnl0ZSBmb3IgZWFjaCBzbGljZXMsIHN1YnNsaWNlcyAmIEVVcyBtYXNrcy4gKi8KKwlp Z3RfYXNzZXJ0X2x0ZShNSU5fVE9QT0xPR1lfSVRFTV9TSVpFLCBpdGVtLmxlbmd0aCk7CisKKwl0 b3BvbG9neV9zbGljZXMgPSAwOworCWZvciAocyA9IDA7IHMgPCB0b3BvX2luZm8tPm1heF9zbGlj ZXM7IHMrKykgeworCQlpZiAoc2xpY2VfYXZhaWxhYmxlKHRvcG9faW5mbywgcykpCisJCQl0b3Bv bG9neV9zbGljZXMgfD0gMVVMIDw8IHM7CisJfQorCisJaWd0X2RlYnVnKCJzbGljZSBtYXNrIGdl dHBhcmFtPTB4JXggLyBxdWVyeT0weCV4XG4iLAorCQkgIHNsaWNlX21hc2ssIHRvcG9sb2d5X3Ns aWNlcyk7CisKKwkvKiBUaGVzZSAyIHNob3VsZCBhbHdheXMgbWF0Y2guICovCisJaWd0X2Fzc2Vy dF9lcShzbGljZV9tYXNrLCB0b3BvbG9neV9zbGljZXMpOworCisJdG9wb2xvZ3lfc3Vic2xpY2Vz X3NsaWNlMCA9IDA7CisJZm9yIChzID0gMDsgcyA8IHRvcG9faW5mby0+bWF4X3N1YnNsaWNlczsg cysrKSB7CisJCWlmIChzdWJzbGljZV9hdmFpbGFibGUodG9wb19pbmZvLCAwLCBzKSkKKwkJCXRv cG9sb2d5X3N1YnNsaWNlc19zbGljZTAgfD0gMVVMIDw8IHM7CisJfQorCisJaWd0X2RlYnVnKCJz dWJzbGljZSBtYXNrIGdldHBhcmFtPTB4JXggLyBxdWVyeT0weCV4XG4iLAorCQkgIHN1YnNsaWNl X21hc2ssIHRvcG9sb2d5X3N1YnNsaWNlc19zbGljZTApOworCisJLyoKKwkgKiBJOTE1X1BBUkFN X1NVQlNMSUNFX01BU0sgcmV0dXJucyB0aGUgdmFsdWUgZm9yIHNsaWNlMCwgd2Ugc2hvdWxkCisJ ICogbWF0Y2ggdGhlIHZhbHVlcyBmb3IgdGhlIGZpcnN0IHNsaWNlIG9mIHRoZSB0b3BvbG9neS4K KwkgKi8KKwlpZ3RfYXNzZXJ0X2VxKHN1YnNsaWNlX21hc2ssIHRvcG9sb2d5X3N1YnNsaWNlc19z bGljZTApOworCisJZnJlZSh0b3BvX2luZm8pOworfQorCisvKgorICogVmVyaWZ5IHRoYXQgd2Ug Z2V0IHNhbWUgdG90YWwgbnVtYmVyIG9mIEVVcyBmcm9tIGdldHBhcmFtIGFuZCB0b3BvbG9neSBx dWVyeS4KKyAqLworc3RhdGljIHZvaWQKK3Rlc3RfcXVlcnlfdG9wb2xvZ3lfbWF0Y2hlc19ldV90 b3RhbChpbnQgZmQpCit7CisJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb19pbmZvOworCWRybV9pOTE1X2dl dHBhcmFtX3QgZ3A7CisJaW50IG5fZXVzLCBuX2V1c190b3BvbG9neSwgczsKKworCWdwLnBhcmFt ID0gSTkxNV9QQVJBTV9FVV9UT1RBTDsKKwlncC52YWx1ZSA9ICZuX2V1czsKKwlkb19pb2N0bChm ZCwgRFJNX0lPQ1RMX0k5MTVfR0VUUEFSQU0sICZncCk7CisJaWd0X2RlYnVnKCJuX2V1cz0laVxu Iiwgbl9ldXMpOworCisJbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOworCWl0ZW0ucXVl cnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9UT1BPTE9HWV9JTkZPOworCWk5MTVfcXVlcnlfaXRlbXMo ZmQsICZpdGVtLCAxKTsKKworCXRvcG9faW5mbyA9IGNhbGxvYygxLCBpdGVtLmxlbmd0aCk7CisK KwlpdGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2ludGVyKHRvcG9faW5mbyk7CisJaTkxNV9xdWVy eV9pdGVtcyhmZCwgJml0ZW0sIDEpOworCisJaWd0X2RlYnVnKCJtYXhfc2xpY2VzPSVodSBtYXhf c3Vic2xpY2VzPSVodSBtYXhfZXVzX3Blcl9zdWJzbGljZT0laHVcbiIsCisJCSAgdG9wb19pbmZv LT5tYXhfc2xpY2VzLCB0b3BvX2luZm8tPm1heF9zdWJzbGljZXMsCisJCSAgdG9wb19pbmZvLT5t YXhfZXVzX3Blcl9zdWJzbGljZSk7CisJaWd0X2RlYnVnKCIgc3Vic2xpY2Vfb2Zmc2V0PSVodSBz dWJzbGljZV9zdHJpZGU9JWh1XG4iLAorCQkgIHRvcG9faW5mby0+c3Vic2xpY2Vfb2Zmc2V0LCB0 b3BvX2luZm8tPnN1YnNsaWNlX3N0cmlkZSk7CisJaWd0X2RlYnVnKCIgZXVfb2Zmc2V0PSVodSBl dV9zdHJpZGU9JWh1XG4iLAorCQkgIHRvcG9faW5mby0+ZXVfb2Zmc2V0LCB0b3BvX2luZm8tPmV1 X3N0cmlkZSk7CisKKwluX2V1c190b3BvbG9neSA9IDA7CisJZm9yIChzID0gMDsgcyA8IHRvcG9f aW5mby0+bWF4X3NsaWNlczsgcysrKSB7CisJCWludCBzczsKKworCQlpZ3RfZGVidWcoInNsaWNl JWk6XG4iLCBzKTsKKworCQlmb3IgKHNzID0gMDsgc3MgPCB0b3BvX2luZm8tPm1heF9zdWJzbGlj ZXM7IHNzKyspIHsKKwkJCWludCBldSwgbl9zdWJzbGljZV9ldXMgPSAwOworCisJCQlpZ3RfZGVi dWcoIlx0c3Vic2xpY2U6ICVpXG4iLCBzcyk7CisKKwkJCWlndF9kZWJ1ZygiXHRcdGV1X21hc2s6 IDBiIik7CisJCQlmb3IgKGV1ID0gMDsgZXUgPCB0b3BvX2luZm8tPm1heF9ldXNfcGVyX3N1YnNs aWNlOyBldSsrKSB7CisJCQkJdWludDhfdCB2YWwgPSBldV9hdmFpbGFibGUodG9wb19pbmZvLCBz LCBzcywKKwkJCQkJCQkgICB0b3BvX2luZm8tPm1heF9ldXNfcGVyX3N1YnNsaWNlIC0gMSAtIGV1 KTsKKwkJCQlpZ3RfZGVidWcoIiVoaGkiLCB2YWwpOworCQkJCW5fc3Vic2xpY2VfZXVzICs9IF9f YnVpbHRpbl9wb3Bjb3VudCh2YWwpOworCQkJCW5fZXVzX3RvcG9sb2d5ICs9IF9fYnVpbHRpbl9w b3Bjb3VudCh2YWwpOworCQkJfQorCisJCQlpZ3RfZGVidWcoIiAoJWkpXG4iLCBuX3N1YnNsaWNl X2V1cyk7CisKKwkJCS8qIFNhbml0eSBjaGVja3MuICovCisJCQlpZiAobl9zdWJzbGljZV9ldXMg PiAwKSB7CisJCQkJaWd0X2Fzc2VydChzbGljZV9hdmFpbGFibGUodG9wb19pbmZvLCBzKSk7CisJ CQkJaWd0X2Fzc2VydChzdWJzbGljZV9hdmFpbGFibGUodG9wb19pbmZvLCBzLCBzcykpOworCQkJ fQorCQkJaWYgKHN1YnNsaWNlX2F2YWlsYWJsZSh0b3BvX2luZm8sIHMsIHNzKSkgeworCQkJCWln dF9hc3NlcnQoc2xpY2VfYXZhaWxhYmxlKHRvcG9faW5mbywgcykpOworCQkJfQorCQl9CisJfQor CisJZnJlZSh0b3BvX2luZm8pOworCisJaWd0X2Fzc2VydChuX2V1c190b3BvbG9neSA9PSBuX2V1 cyk7Cit9CisKKy8qCisgKiBWZXJpZnkgc29tZSBudW1iZXJzIG9uIEdlbnMgdGhhdCB3ZSBrbm93 IGZvciBzdXJlIHRoZSBjaGFyYWN0ZXJpc3RpY3MgZnJvbQorICogdGhlIFBDSSBpZHMuCisgKi8K K3N0YXRpYyB2b2lkCit0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2tub3duX3BjaV9pZHMoaW50IGZkLCBp bnQgZGV2aWQpCit7CisJY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZvICpkZXZfaW5mbyA9 IGludGVsX2dldF9kZXZpY2VfaW5mbyhkZXZpZCk7CisJc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0 ZW0gaXRlbTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb19pbmZv OworCWludCBuX3NsaWNlcyA9IDAsIG5fc3Vic2xpY2VzID0gMDsKKwlpbnQgcywgc3M7CisKKwkv KiBUaGUgR1Qgc2l6ZSBvbiBzb21lIEJyb2Fkd2VsbCBza3VzIGlzIG5vdCBkZWZpbmVkLCBza2lw IHRob3NlLiAqLworCWlndF9za2lwX29uKGRldl9pbmZvLT5ndCA9PSAwKTsKKworCW1lbXNldCgm aXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKKwlpdGVtLnF1ZXJ5X2lkID0gRFJNX0k5MTVfUVVFUllf VE9QT0xPR1lfSU5GTzsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisKKwl0b3Bv X2luZm8gPSAoc3RydWN0IGRybV9pOTE1X3F1ZXJ5X3RvcG9sb2d5X2luZm8gKikgY2FsbG9jKDEs IGl0ZW0ubGVuZ3RoKTsKKworCWl0ZW0uZGF0YV9wdHIgPSB0b191c2VyX3BvaW50ZXIodG9wb19p bmZvKTsKKwlpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7CisKKwlmb3IgKHMgPSAwOyBz IDwgdG9wb19pbmZvLT5tYXhfc2xpY2VzOyBzKyspIHsKKwkJaWYgKHNsaWNlX2F2YWlsYWJsZSh0 b3BvX2luZm8sIHMpKQorCQkJbl9zbGljZXMrKzsKKworCQlmb3IgKHNzID0gMDsgc3MgPCB0b3Bv X2luZm8tPm1heF9zdWJzbGljZXM7IHNzKyspIHsKKwkJCWlmIChzdWJzbGljZV9hdmFpbGFibGUo dG9wb19pbmZvLCBzLCBzcykpCisJCQkJbl9zdWJzbGljZXMrKzsKKwkJfQorCX0KKworCWlndF9k ZWJ1ZygiUGxhdGZvcm09JXMgR1Q9JXUgc2xpY2VzPSV1IHN1YnNsaWNlcz0ldVxuIiwKKwkJICBk ZXZfaW5mby0+Y29kZW5hbWUsIGRldl9pbmZvLT5ndCwgbl9zbGljZXMsIG5fc3Vic2xpY2VzKTsK KworCXN3aXRjaCAoZGV2X2luZm8tPmd0KSB7CisJY2FzZSAxOgorCQlpZ3RfYXNzZXJ0X2VxKG5f c2xpY2VzLCAxKTsKKwkJaWd0X2Fzc2VydChuX3N1YnNsaWNlcyA9PSAyIHx8IG5fc3Vic2xpY2Vz ID09IDMpOworCQlicmVhazsKKwljYXNlIDI6CisJCWlndF9hc3NlcnRfZXEobl9zbGljZXMsIDEp OworCQlpZ3RfYXNzZXJ0X2VxKG5fc3Vic2xpY2VzLCAzKTsKKwkJYnJlYWs7CisJY2FzZSAzOgor CQlpZ3RfYXNzZXJ0X2VxKG5fc2xpY2VzLCAyKTsKKwkJaWd0X2Fzc2VydF9lcShuX3N1YnNsaWNl cywgMiAqIDMpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlndF9hc3NlcnRfZXEobl9zbGljZXMs IDMpOworCQlpZ3RfYXNzZXJ0X2VxKG5fc3Vic2xpY2VzLCAzICogMyk7CisJCWJyZWFrOworCWRl ZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0KKworCWZyZWUodG9wb19pbmZvKTsKK30K KworaWd0X21haW4KK3sKKwlpbnQgZmQgPSAtMTsKKwlpbnQgZGV2aWQ7CisKKwlpZ3RfZml4dHVy ZSB7CisJCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7CisJCWlndF9yZXF1aXJl KGhhc19xdWVyeV9zdXBwb3J0cyhmZCkpOworCQlkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQo ZmQpOworCX0KKworCWlndF9zdWJ0ZXN0KCJxdWVyeS1nYXJiYWdlIikKKwkJdGVzdF9xdWVyeV9n YXJiYWdlKGZkKTsKKworCWlndF9zdWJ0ZXN0KCJxdWVyeS10b3BvbG9neS1rZXJuZWwtd3JpdGVz IikgeworCQlpZ3RfcmVxdWlyZShxdWVyeV90b3BvbG9neV9zdXBwb3J0ZWQoZmQpKTsKKwkJdGVz dF9xdWVyeV90b3BvbG9neV9rZXJuZWxfd3JpdGVzKGZkKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgi cXVlcnktdG9wb2xvZ3ktdW5zdXBwb3J0ZWQiKSB7CisJCWlndF9yZXF1aXJlKCFxdWVyeV90b3Bv bG9neV9zdXBwb3J0ZWQoZmQpKTsKKwkJdGVzdF9xdWVyeV90b3BvbG9neV91bnN1cHBvcnRlZChm ZCk7CisJfQorCisJaWd0X3N1YnRlc3QoInF1ZXJ5LXRvcG9sb2d5LWNvaGVyZW50LXNsaWNlLW1h c2siKSB7CisJCWlndF9yZXF1aXJlKHF1ZXJ5X3RvcG9sb2d5X3N1cHBvcnRlZChmZCkpOworCQl0 ZXN0X3F1ZXJ5X3RvcG9sb2d5X2NvaGVyZW50X3NsaWNlX21hc2soZmQpOworCX0KKworCWlndF9z dWJ0ZXN0KCJxdWVyeS10b3BvbG9neS1tYXRjaGVzLWV1LXRvdGFsIikgeworCQlpZ3RfcmVxdWly ZShxdWVyeV90b3BvbG9neV9zdXBwb3J0ZWQoZmQpKTsKKwkJdGVzdF9xdWVyeV90b3BvbG9neV9t YXRjaGVzX2V1X3RvdGFsKGZkKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgicXVlcnktdG9wb2xvZ3kt a25vd24tcGNpLWlkcyIpIHsKKwkJaWd0X3JlcXVpcmUocXVlcnlfdG9wb2xvZ3lfc3VwcG9ydGVk KGZkKSk7CisJCWlndF9yZXF1aXJlKElTX0hBU1dFTEwoZGV2aWQpIHx8IElTX0JST0FEV0VMTChk ZXZpZCkgfHwKKwkJCSAgICBJU19TS1lMQUtFKGRldmlkKSB8fCBJU19LQUJZTEFLRShkZXZpZCkg fHwKKwkJCSAgICBJU19DT0ZGRUVMQUtFKGRldmlkKSk7CisJCXRlc3RfcXVlcnlfdG9wb2xvZ3lf a25vd25fcGNpX2lkcyhmZCwgZGV2aWQpOworCX0KKworCWlndF9maXh0dXJlIHsKKwkJY2xvc2Uo ZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24u YnVpbGQKaW5kZXggNmU3NzZiYjcuLjBhYzZjMDVmIDEwMDY0NAotLS0gYS90ZXN0cy9tZXNvbi5i dWlsZAorKysgYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTQ0LDYgKzE0NCw3IEBAIHRlc3RfcHJv Z3MgPSBbCiAJJ2dlbjNfcmVuZGVyX3RpbGVkeF9ibGl0cycsCiAJJ2dlbjNfcmVuZGVyX3RpbGVk eV9ibGl0cycsCiAJJ2d2dF9iYXNpYycsCisJJ2k5MTVfcXVlcnknLAogCSdrbXNfM2QnLAogCSdr bXNfYWRkZmJfYmFzaWMnLAogCSdrbXNfYXRvbWljJywKLS0gCjIuMTYuMgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QK aWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==