From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH i-g-t 5/7] tests/perf_pmu: Tests for i915 PMU API Date: Mon, 25 Sep 2017 16:15:00 +0100 Message-ID: <20170925151502.7285-6-tvrtko.ursulin@linux.intel.com> References: <20170925151502.7285-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 065926E35B for ; Mon, 25 Sep 2017 15:15:15 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id b9so36063wra.0 for ; Mon, 25 Sep 2017 08:15:14 -0700 (PDT) In-Reply-To: <20170925151502.7285-1-tvrtko.ursulin@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkEgYnVuY2gg b2YgdGVzdHMgZm9yIHRoZSBuZXcgaTkxNSBQTVUgZmVhdHVyZS4KClBhcnRzIG9mIHRoZSBjb2Rl IHdlcmUgaW5pdGlhbHkgc2tldGNoZWQgYnkgRG1pdHJ5IFJvZ296aGtpbi4KCnYyOiAoTW9zdCBz dWdnZXN0aW9ucyBieSBDaHJpcyBXaWxzb24pCiAqIEFkZCBuZXcgY2xhc3MvaW5zdGFuY2UgYmFz ZWQgZW5naW5lIGxpc3QuCiAqIEFkZCBnZW1faGFzX2VuZ2luZS9nZW1fcmVxdWlyZV9lbmdpbmUg dG8gd29yayB3aXRoIGNsYXNzL2luc3RhbmNlLgogKiBVc2UgdGhlIGFib3ZlIHR3byB0aHJvdWdo b3V0IHRoZSB0ZXN0LgogKiBTaG9ydGVuIHRlc3RzIHRvIDEwMG1zIGJ1c3kgYmF0Y2hlcywgc2Vl bXMgZW5vdWdoLgogKiBBZGQgcXVldWVkIGNvdW50ZXIgc2FuaXR5IGNoZWNrcy4KICogVXNlIGln dF9uc2VjX2VsYXBzZWQuCiAqIFNraXAgb24gcGVyZiAtRU5PREVWIGluIHNvbWUgdGVzdHMgaW5z dGVhZCBvZiBlbWJlZGRpbmcga25vd2xlZGdlIGxvY2FsbHkuCiAqIEZpeCBtdWx0aSBvcmRlcmlu ZyBmb3IgYnVzeSBhY2NvdW50aW5nLgogKiBVc2UgbmV3IGd1cmFudGVlZF91c2xlZXAgd2hlbiBz bGVlcCB0aW1lIGlzIGFzc2VydGVkIG9uLgogKiBDaGVjayBmb3Igbm8gcXVldWVkIHdoZW4gaWRs ZS9idXN5LgogKiBBZGQgcXVldWVkIGNvdW50ZXIgaW5pdCB0ZXN0LgogKiBBZGQgcXVldWVkIHRl c3RzLgogKiBDb25zb2xpZGF0ZSBhbmQgaW5jcmVhc2UgbXVsdGlwbGUgYnVzeSBlbmdpbmVzIHRl c3RzIHRvIG1vc3QtYnVzeSBhbmQKICAgYWxsLWJ1c3kgdGVzdHMuCiAqIEd1YXJhbnR0ZSBpbnRl cnJ1cHRzIGJ5IHVzaW5nIGZlbmNlcy4KICogVGVzdCBSQzYgdmlhIGZvcmNld2FrZS4KCnYzOgog KiBUd2VhayBhc3NlcnQgaW4gaW50ZXJydXB0cyBzdWJ0ZXN0LgogKiBTcHJpbmtsZSBvZiBjb21t ZW50cy4KICogRml4IG11bHRpLWNsaWVudCB0ZXN0IHdoaWNoIGdvdCBicm9rZW4gaW4gdjIuCgpT aWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpD YzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CkNjOiBEbWl0cnkgUm9n b3poa2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPgotLS0KIGxpYi9pZ3RfZ3QuYyAg ICAgICAgICAgfCAgNTAgKysrCiBsaWIvaWd0X2d0LmggICAgICAgICAgIHwgIDM4ICsrKwogbGli L2lndF9wZXJmLmggICAgICAgICB8ICAgOSArLQogdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAg MSArCiB0ZXN0cy9wZXJmX3BtdS5jICAgICAgIHwgODY5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgOTU5IGluc2VydGlv bnMoKyksIDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvcGVyZl9wbXUu YwoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZ3QuYyBiL2xpYi9pZ3RfZ3QuYwppbmRleCBiM2YzYjM4 MDllZWUuLjRjNzU4MTFmYjFiMyAxMDA2NDQKLS0tIGEvbGliL2lndF9ndC5jCisrKyBiL2xpYi9p Z3RfZ3QuYwpAQCAtNTY4LDMgKzU2OCw1MyBAQCBib29sIGdlbV9jYW5fc3RvcmVfZHdvcmQoaW50 IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lKQogCiAJcmV0dXJuIHRydWU7CiB9CisKK2NvbnN0IHN0 cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiBpbnRlbF9leGVjdXRpb25fZW5naW5lczJbXSA9 IHsKKwl7ICJyY3MwIiwgSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwIH0sCisJeyAiYmNzMCIs IEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDAgfSwKKwl7ICJ2Y3MwIiwgSTkxNV9FTkdJTkVfQ0xB U1NfVklERU8sIDAgfSwKKwl7ICJ2Y3MxIiwgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEgfSwK Kwl7ICJ2ZWNzMCIsIEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDAgfSwKK307CisK K3Vuc2lnbmVkIGludAorZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGludCBnZW1fZmQs CisJCQkgICAgICAgZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIGNsYXNzLAorCQkJICAg ICAgIHVuc2lnbmVkIGludCBpbnN0YW5jZSkKK3sKKwlpZiAoY2xhc3MgIT0gSTkxNV9FTkdJTkVf Q0xBU1NfVklERU8pCisJCWlndF9hc3NlcnQoaW5zdGFuY2UgPT0gMCk7CisJZWxzZQorCQlpZ3Rf YXNzZXJ0KGluc3RhbmNlID49IDAgJiYgaW5zdGFuY2UgPD0gMSk7CisKKwlzd2l0Y2ggKGNsYXNz KSB7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVI6CisJCXJldHVybiBJOTE1X0VYRUNf UkVOREVSOworCWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWToKKwkJcmV0dXJuIEk5MTVfRVhF Q19CTFQ7CisJY2FzZSBJOTE1X0VOR0lORV9DTEFTU19WSURFTzoKKwkJaWYgKGluc3RhbmNlID09 IDApIHsKKwkJCWlmIChnZW1faGFzX2JzZDIoZ2VtX2ZkKSkKKwkJCQlyZXR1cm4gSTkxNV9FWEVD X0JTRCB8IEk5MTVfRVhFQ19CU0RfUklORzE7CisJCQllbHNlCisJCQkJcmV0dXJuIEk5MTVfRVhF Q19CU0Q7CisKKwkJfSBlbHNlIHsKKwkJCXJldHVybiBJOTE1X0VYRUNfQlNEIHwgSTkxNV9FWEVD X0JTRF9SSU5HMjsKKwkJfQorCWNhc2UgSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRToK KwkJcmV0dXJuIEk5MTVfRVhFQ19WRUJPWDsKKwljYXNlIEk5MTVfRU5HSU5FX0NMQVNTX09USEVS OgorCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoMCk7CisJfTsKK30KKworYm9vbCBnZW1faGFzX2Vu Z2luZShpbnQgZ2VtX2ZkLAorCQkgICAgZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIGNs YXNzLAorCQkgICAgdW5zaWduZWQgaW50IGluc3RhbmNlKQoreworCXJldHVybiBnZW1faGFzX3Jp bmcoZ2VtX2ZkLAorCQkJICAgIGdlbV9jbGFzc19pbnN0YW5jZV90b19lYl9mbGFncyhnZW1fZmQs IGNsYXNzLAorCQkJCQkJCSAgIGluc3RhbmNlKSk7Cit9CmRpZmYgLS1naXQgYS9saWIvaWd0X2d0 LmggYi9saWIvaWd0X2d0LmgKaW5kZXggMjU3OWNiZDM3YmU3Li5mYjY3YWUxYTdkMWYgMTAwNjQ0 Ci0tLSBhL2xpYi9pZ3RfZ3QuaAorKysgYi9saWIvaWd0X2d0LmgKQEAgLTI1LDYgKzI1LDcgQEAK ICNkZWZpbmUgSUdUX0dUX0gKIAogI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCisjaW5jbHVkZSAi aWd0X2NvcmUuaCIKIAogdm9pZCBpZ3RfcmVxdWlyZV9oYW5nX3JpbmcoaW50IGZkLCBpbnQgcmlu Zyk7CiAKQEAgLTgwLDQgKzgxLDQxIEBAIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZSB7CiAKIGJvb2wgZ2VtX2Nhbl9zdG9yZV9kd29yZChpbnQgZmQsIHVuc2lnbmVk IGludCBlbmdpbmUpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBjbGFzczsKKwlpbnQgaW5zdGFuY2U7Cit9 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzMltdOworCisjZGVmaW5lIGZvcl9lYWNoX2VuZ2luZV9j bGFzc19pbnN0YW5jZShmZF9fLCBlX18pIFwKKwlmb3IgKChlX18pID0gaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXMyO1wKKwkgICAgIChlX18pLT5uYW1lOyBcCisJICAgICAoZV9fKSsrKQorCitlbnVt IGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgeworCUk5MTVfRU5HSU5FX0NMQVNTX09USEVSID0g MCwKKwlJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIgPSAxLAorCUk5MTVfRU5HSU5FX0NMQVNTX0NP UFkgPSAyLAorCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPID0gMywKKwlJOTE1X0VOR0lORV9DTEFT U19WSURFT19FTkhBTkNFID0gNCwKKwlJOTE1X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFCSSAq LworfTsKKwordW5zaWduZWQgaW50CitnZW1fY2xhc3NfaW5zdGFuY2VfdG9fZWJfZmxhZ3MoaW50 IGdlbV9mZCwKKwkJCSAgICAgICBlbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3MgY2xhc3Ms CisJCQkgICAgICAgdW5zaWduZWQgaW50IGluc3RhbmNlKTsKKworYm9vbCBnZW1faGFzX2VuZ2lu ZShpbnQgZ2VtX2ZkLAorCQkgICAgZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIGNsYXNz LAorCQkgICAgdW5zaWduZWQgaW50IGluc3RhbmNlKTsKKworc3RhdGljIGlubGluZQordm9pZCBn ZW1fcmVxdWlyZV9lbmdpbmUoaW50IGdlbV9mZCwKKwkJCWVudW0gZHJtX2k5MTVfZ2VtX2VuZ2lu ZV9jbGFzcyBjbGFzcywKKwkJCXVuc2lnbmVkIGludCBpbnN0YW5jZSkKK3sKKwlpZ3RfcmVxdWly ZShnZW1faGFzX2VuZ2luZShnZW1fZmQsIGNsYXNzLCBpbnN0YW5jZSkpOworfQorCiAjZW5kaWYg LyogSUdUX0dUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcGVyZi5oIGIvbGliL2lndF9wZXJm LmgKaW5kZXggZTI5MjE2ZjA1MDBhLi5kNjRlMGJkN2EwNmEgMTAwNjQ0Ci0tLSBhL2xpYi9pZ3Rf cGVyZi5oCisrKyBiL2xpYi9pZ3RfcGVyZi5oCkBAIC0yOSwxNCArMjksNyBAQAogCiAjaW5jbHVk ZSA8bGludXgvcGVyZl9ldmVudC5oPgogCi1lbnVtIGRybV9pOTE1X2dlbV9lbmdpbmVfY2xhc3Mg ewotCUk5MTVfRU5HSU5FX0NMQVNTX09USEVSID0gMCwKLQlJOTE1X0VOR0lORV9DTEFTU19SRU5E RVIgPSAxLAotCUk5MTVfRU5HSU5FX0NMQVNTX0NPUFkgPSAyLAotCUk5MTVfRU5HSU5FX0NMQVNT X1ZJREVPID0gMywKLQlJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFID0gNCwKLQlJOTE1 X0VOR0lORV9DTEFTU19NQVggLyogbm9uLUFCSSAqLwotfTsKKyNpbmNsdWRlICJpZ3RfZ3QuaCIK IAogZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7CiAJSTkxNV9TQU1QTEVfUVVFVUVE ID0gMCwKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9NYWtlZmls ZS5zb3VyY2VzCmluZGV4IDBhZGMyOGEwMTRkMi4uN2QxZmRmMTY4OTJkIDEwMDY0NAotLS0gYS90 ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCisrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKQEAgLTIx Nyw2ICsyMTcsNyBAQCBURVNUU19wcm9ncyA9IFwKIAlrbXNfdmJsYW5rIFwKIAltZXRhX3Rlc3Qg XAogCXBlcmYgXAorCXBlcmZfcG11IFwKIAlwbV9iYWNrbGlnaHQgXAogCXBtX2xwc3AgXAogCXBt X3JjNl9yZXNpZGVuY3kgXApkaWZmIC0tZ2l0IGEvdGVzdHMvcGVyZl9wbXUuYyBiL3Rlc3RzL3Bl cmZfcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43OWI0NDQ5 NzcxMjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wZXJmX3BtdS5jCkBAIC0wLDAgKzEsODY5 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTcgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRl IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5o PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRl IDxzeXMvdGltZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxkaXJlbnQu aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorCisjaW5jbHVkZSAiaWd0 LmgiCisjaW5jbHVkZSAiaWd0X2NvcmUuaCIKKyNpbmNsdWRlICJpZ3RfcGVyZi5oIgorCitJR1Rf VEVTVF9ERVNDUklQVElPTigiVGVzdCB0aGUgaTkxNSBwbXUgcGVyZiBpbnRlcmZhY2UiKTsKKwor Y29uc3QgZG91YmxlIHRvbGVyYW5jZSA9IDAuMDJmOworY29uc3QgdW5zaWduZWQgbG9uZyBiYXRj aF9kdXJhdGlvbl9ucyA9IDEwMCAqIDEwMDAgKiAxMDAwOworCitzdGF0aWMgaW50IG9wZW5fcG11 KHVpbnQ2NF90IGNvbmZpZykKK3sKKwlpbnQgZmQ7CisKKwlmZCA9IHBlcmZfaTkxNV9vcGVuKGNv bmZpZyk7CisJaWd0X3JlcXVpcmUoZmQgPj0gMCB8fCAoZmQgPCAwICYmIGVycm5vICE9IEVOT0RF VikpOworCWlndF9hc3NlcnQoZmQgPj0gMCk7CisKKwlyZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBp bnQgb3Blbl9ncm91cCh1aW50NjRfdCBjb25maWcsIGludCBncm91cCkKK3sKKwlpbnQgZmQ7CisK KwlmZCA9IHBlcmZfaTkxNV9vcGVuX2dyb3VwKGNvbmZpZywgZ3JvdXApOworCWlndF9yZXF1aXJl KGZkID49IDAgfHwgKGZkIDwgMCAmJiBlcnJubyAhPSBFTk9ERVYpKTsKKwlpZ3RfYXNzZXJ0KGZk ID49IDApOworCisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgdm9pZAoraW5pdChpbnQgZ2VtX2Zk LCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVpbnQ4X3Qgc2FtcGxl KQoreworCWludCBmZDsKKworCWZkID0gb3Blbl9wbXUoX19JOTE1X1BNVV9FTkdJTkUoZS0+Y2xh c3MsIGUtPmluc3RhbmNlLCBzYW1wbGUpKTsKKworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHVp bnQ2NF90IHBtdV9yZWFkX3NpbmdsZShpbnQgZmQpCit7CisJdWludDY0X3QgZGF0YVsyXTsKKwlz c2l6ZV90IGxlbjsKKworCWxlbiA9IHJlYWQoZmQsIGRhdGEsIHNpemVvZihkYXRhKSk7CisJaWd0 X2Fzc2VydF9lcShsZW4sIHNpemVvZihkYXRhKSk7CisKKwlyZXR1cm4gZGF0YVswXTsKK30KKwor c3RhdGljIHZvaWQgcG11X3JlYWRfbXVsdGkoaW50IGZkLCB1bnNpZ25lZCBpbnQgbnVtLCB1aW50 NjRfdCAqdmFsKQoreworCXVpbnQ2NF90IGJ1ZlsyICsgbnVtXTsKKwl1bnNpZ25lZCBpbnQgaTsK Kwlzc2l6ZV90IGxlbjsKKworCWxlbiA9IHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWln dF9hc3NlcnRfZXEobGVuLCBzaXplb2YoYnVmKSk7CisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsr KQorCQl2YWxbaV0gPSBidWZbMiArIGldOworfQorCisjZGVmaW5lIGFzc2VydF93aXRoaW5fZXBz aWxvbih4LCByZWYsIHRvbGVyYW5jZSkgXAorCWlndF9hc3NlcnRfZigoZG91YmxlKSh4KSA8PSAo MS4wICsgdG9sZXJhbmNlKSAqIChkb3VibGUpcmVmICYmIFwKKwkJICAgICAoZG91YmxlKSh4KSA+ PSAoMS4wIC0gdG9sZXJhbmNlKSAqIChkb3VibGUpcmVmLCBcCisJCSAgICAgIiclcycgIT0gJyVz JyAoJWYgbm90IHdpdGhpbiAlZiUlIHRvbGVyYW5jZSBvZiAlZilcbiIsXAorCQkgICAgICN4LCAj cmVmLCAoZG91YmxlKXgsIHRvbGVyYW5jZSAqIDEwMC4wLCAoZG91YmxlKXJlZikKKworLyoKKyAq IEhlbHBlciBmb3IgY2FzZXMgd2hlcmUgd2UgYXNzZXJ0IG9uIHRpbWUgc3BlbnQgc2xlZXBpbmcg KGRpcmVjdGx5IG9yCisgKiBpbmRpcmVjdGx5KSwgc28gbWFrZSBpdCBtb3JlIHJvYnVzdCBieSBl bnN1cmluZyB0aGUgc3lzdGVtIHNsZWVwIHRpbWUKKyAqIGlzIHdpdGhpbiB0ZXN0IHRvbGVyYW5j ZSB0byBzdGFydCB3aXRoLgorICovCitzdGF0aWMgdm9pZCBndWFyYW50ZWVkX3VzbGVlcCh1bnNp Z25lZCBpbnQgdXNlYykKK3sKKwl1aW50NjRfdCBzbGVwdCA9IDAsIHRvX3NsZWVwID0gdXNlYzsK KworCXdoaWxlICh1c2VjID4gMCkgeworCQlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQgPSB7IH07CisJ CXVpbnQ2NF90IHRoaXNfc2xlZXA7CisKKwkJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCQl1 c2xlZXAodXNlYyk7CisJCXRoaXNfc2xlZXAgPSBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCkgLyAx MDAwOworCQlzbGVwdCArPSB0aGlzX3NsZWVwOworCQlpZiAodGhpc19zbGVlcCA+IHVzZWMpCisJ CQlicmVhazsKKwkJdXNlYyAtPSB0aGlzX3NsZWVwOworCX0KKworCWFzc2VydF93aXRoaW5fZXBz aWxvbihzbGVwdCwgdG9fc2xlZXAsIHRvbGVyYW5jZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBp bnQgZTJyaW5nKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5l MiAqZSkKK3sKKwlyZXR1cm4gZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGdlbV9mZCwg ZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKK30KKworc3RhdGljIHZvaWQKK3NpbmdsZShpbnQgZ2Vt X2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsIHVpbnQ4X3Qgc2Ft cGxlLAorICAgICAgIGJvb2wgYnVzeSkKK3sKKwlkb3VibGUgcmVmID0gYnVzeSAmJiBzYW1wbGUg PT0gSTkxNV9TQU1QTEVfQlVTWSA/CisJCSAgICAgYmF0Y2hfZHVyYXRpb25fbnMgOiAwLjBmOwor CWlndF9zcGluX3QgKnNwaW47CisJdWludDY0X3QgdmFsOworCWludCBmZDsKKworCWZkID0gb3Bl bl9wbXUoX19JOTE1X1BNVV9FTkdJTkUoZS0+Y2xhc3MsIGUtPmluc3RhbmNlLCBzYW1wbGUpKTsK KworCWlmIChidXN5KSB7CisJCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBl MnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4s IGJhdGNoX2R1cmF0aW9uX25zKTsKKwl9IGVsc2UgeworCQlndWFyYW50ZWVkX3VzbGVlcChiYXRj aF9kdXJhdGlvbl9ucyAvIDEwMDApOworCX0KKworCWlmIChidXN5KQorCQlnZW1fc3luYyhnZW1f ZmQsIHNwaW4tPmhhbmRsZSk7CisKKwl2YWwgPSBwbXVfcmVhZF9zaW5nbGUoZmQpOworCisJYXNz ZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbCwgcmVmLCB0b2xlcmFuY2UpOworCisJaWYgKGJ1c3kpCisJ CWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKKwljbG9zZShmZCk7Cit9CisKK3N0 YXRpYyB2b2lkCitxdWV1ZWQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICplKQoreworCWlndF9zcGluX3QgKnNwaW5bMl07CisJdWludDY0X3QgdmFsOwor CWludCBmZDsKKworCWZkID0gb3Blbl9wbXUoSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChlLT5jbGFz cywgZS0+aW5zdGFuY2UpKTsKKworCS8qCisJICogRmlyc3Qgc3BpbiBiYXRjaCB3aWxsIGJlIGlt bWVkaWF0ZWx5IGV4ZWN1dGluZy4KKwkgKi8KKwlzcGluWzBdID0gaWd0X3NwaW5fYmF0Y2hfbmV3 KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOworCWlndF9zcGluX2JhdGNoX3NldF90 aW1lb3V0KHNwaW5bMF0sIGJhdGNoX2R1cmF0aW9uX25zKTsKKworCS8qCisJICogU2Vjb25kIHNw aW4gYmF0Y2ggd2lsbCBzaXQgaW4gdGhlIGV4ZWN1dGlvbiBxdWV1ZSBiZWhpbmQgdGhlCisJICog Zmlyc3Qgb25lIHNvIG11c3QgY2F1c2UgdGhlIFBNVSB0byBjb3JyZWN0bHkgcmVwb3J0IHRoZSBx dWV1ZWQKKwkgKiBjb3VudGVyLgorCSAqLworCXNwaW5bMV0gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXco Z2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSwgMCk7CisJaWd0X3NwaW5fYmF0Y2hfc2V0X3Rp bWVvdXQoc3BpblsxXSwgYmF0Y2hfZHVyYXRpb25fbnMpOworCisJZ2VtX3N5bmMoZ2VtX2ZkLCBz cGluWzBdLT5oYW5kbGUpOworCisJdmFsID0gcG11X3JlYWRfc2luZ2xlKGZkKTsKKwlhc3NlcnRf d2l0aGluX2Vwc2lsb24odmFsLCBiYXRjaF9kdXJhdGlvbl9ucywgdG9sZXJhbmNlKTsKKworCWdl bV9zeW5jKGdlbV9mZCwgc3BpblsxXS0+aGFuZGxlKTsKKworCWlndF9zcGluX2JhdGNoX2ZyZWUo Z2VtX2ZkLCBzcGluWzBdKTsKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3BpblsxXSk7 CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZAorYnVzeV9jaGVja19hbGwoaW50IGdlbV9m ZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCSAgICAgICBjb25z dCB1bnNpZ25lZCBpbnQgbnVtX2VuZ2luZXMpCit7CisJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplXzsKKwl1aW50NjRfdCB2YWxbbnVtX2VuZ2luZXNdOworCWludCBmZFtu dW1fZW5naW5lc107CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1bnNpZ25lZCBpbnQgYnVzeV9pZHgs IGk7CisKKwlpID0gMDsKKwlmZFswXSA9IC0xOworCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0 YW5jZShmZCwgZV8pIHsKKwkJaWYgKCFnZW1faGFzX2VuZ2luZShnZW1fZmQsIGVfLT5jbGFzcywg ZV8tPmluc3RhbmNlKSkKKwkJCWNvbnRpbnVlOworCQllbHNlIGlmIChlID09IGVfKQorCQkJYnVz eV9pZHggPSBpOworCisJCWZkW2krK10gPSBvcGVuX2dyb3VwKEk5MTVfUE1VX0VOR0lORV9CVVNZ KGVfLT5jbGFzcywKKwkJCQkJCQkgIGVfLT5pbnN0YW5jZSksCisJCQkJICAgICBmZFswXSk7CisJ fQorCisJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQs IGUpLCAwKTsKKwlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChzcGluLCBiYXRjaF9kdXJhdGlv bl9ucyk7CisKKwlnZW1fc3luYyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7CisKKwlwbXVfcmVhZF9t dWx0aShmZFswXSwgbnVtX2VuZ2luZXMsIHZhbCk7CisKKwlhc3NlcnRfd2l0aGluX2Vwc2lsb24o dmFsW2J1c3lfaWR4XSwgYmF0Y2hfZHVyYXRpb25fbnMsIHRvbGVyYW5jZSk7CisJZm9yIChpID0g MDsgaSA8IG51bV9lbmdpbmVzOyBpKyspIHsKKwkJaWYgKGkgPT0gYnVzeV9pZHgpCisJCQljb250 aW51ZTsKKwkJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKHZhbFtpXSwgMC4wZiwgdG9sZXJhbmNlKTsK Kwl9CisKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3Bpbik7CisJY2xvc2UoZmRbMF0p OworfQorCitzdGF0aWMgdm9pZAorbW9zdF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCisJCSAgICBjb25zdCB1bnNpZ25l ZCBpbnQgbnVtX2VuZ2luZXMpCit7CisJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplXzsKKwl1aW50NjRfdCB2YWxbbnVtX2VuZ2luZXNdOworCWludCBmZFtudW1fZW5naW5l c107CisJaWd0X3NwaW5fdCAqc3BpbltudW1fZW5naW5lc107CisJdW5zaWduZWQgaW50IGlkbGVf aWR4LCBpOworCisJZ2VtX3JlcXVpcmVfZW5naW5lKGdlbV9mZCwgZS0+Y2xhc3MsIGUtPmluc3Rh bmNlKTsKKworCWkgPSAwOworCWZkWzBdID0gLTE7CisJZm9yX2VhY2hfZW5naW5lX2NsYXNzX2lu c3RhbmNlKGZkLCBlXykgeworCQlpZiAoIWdlbV9oYXNfZW5naW5lKGdlbV9mZCwgZV8tPmNsYXNz LCBlXy0+aW5zdGFuY2UpKQorCQkJY29udGludWU7CisKKwkJZmRbaV0gPSBvcGVuX2dyb3VwKEk5 MTVfUE1VX0VOR0lORV9CVVNZKGVfLT5jbGFzcywKKwkJCQkJCQllXy0+aW5zdGFuY2UpLAorCQkJ CSAgIGZkWzBdKTsKKworCQlpZiAoZSA9PSBlXykgeworCQkJaWRsZV9pZHggPSBpOworCQl9IGVs c2UgeworCQkJc3BpbltpXSA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsCisJCQkJCQkg ICAgIGUycmluZyhnZW1fZmQsIGVfKSwgMCk7CisJCQlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91 dChzcGluW2ldLCBiYXRjaF9kdXJhdGlvbl9ucyk7CisJCX0KKworCQlpKys7CisJfQorCisJZm9y IChpID0gMDsgaSA8IG51bV9lbmdpbmVzOyBpKyspIHsKKwkJaWYgKGkgIT0gaWRsZV9pZHgpCisJ CQlnZW1fc3luYyhnZW1fZmQsIHNwaW5baV0tPmhhbmRsZSk7CisJfQorCisJcG11X3JlYWRfbXVs dGkoZmRbMF0sIG51bV9lbmdpbmVzLCB2YWwpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbmdp bmVzOyBpKyspIHsKKwkJaWYgKGkgPT0gaWRsZV9pZHgpCisJCQlhc3NlcnRfd2l0aGluX2Vwc2ls b24odmFsW2ldLCAwLjBmLCB0b2xlcmFuY2UpOworCQllbHNlCisJCQlhc3NlcnRfd2l0aGluX2Vw c2lsb24odmFsW2ldLCBiYXRjaF9kdXJhdGlvbl9ucywKKwkJCQkJICAgICAgdG9sZXJhbmNlKTsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VuZ2luZXM7IGkrKykgeworCQlpZiAoaSAhPSBp ZGxlX2lkeCkKKwkJCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluW2ldKTsKKwl9CisJ Y2xvc2UoZmRbMF0pOworfQorCitzdGF0aWMgdm9pZAorYWxsX2J1c3lfY2hlY2tfYWxsKGludCBn ZW1fZmQsIGNvbnN0IHVuc2lnbmVkIGludCBudW1fZW5naW5lcykKK3sKKwljb25zdCBzdHJ1Y3Qg aW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7CisJdWludDY0X3QgdmFsW251bV9lbmdpbmVzXTsK KwlpbnQgZmRbbnVtX2VuZ2luZXNdOworCWlndF9zcGluX3QgKnNwaW5bbnVtX2VuZ2luZXNdOwor CXVuc2lnbmVkIGludCBpOworCisJaSA9IDA7CisJZmRbMF0gPSAtMTsKKwlmb3JfZWFjaF9lbmdp bmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUpIHsKKwkJaWYgKCFnZW1faGFzX2VuZ2luZShnZW1fZmQs IGUtPmNsYXNzLCBlLT5pbnN0YW5jZSkpCisJCQljb250aW51ZTsKKworCQlmZFtpXSA9IG9wZW5f Z3JvdXAoSTkxNV9QTVVfRU5HSU5FX0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKSwKKwkJCQkg ICBmZFswXSk7CisKKwkJc3BpbltpXSA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUy cmluZyhnZW1fZmQsIGUpLCAwKTsKKwkJaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoc3Bpbltp XSwgYmF0Y2hfZHVyYXRpb25fbnMpOworCisJCWkrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg bnVtX2VuZ2luZXM7IGkrKykKKwkJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluW2ldLT5oYW5kbGUpOwor CisJcG11X3JlYWRfbXVsdGkoZmRbMF0sIG51bV9lbmdpbmVzLCB2YWwpOworCisJZm9yIChpID0g MDsgaSA8IG51bV9lbmdpbmVzOyBpKyspCisJCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbaV0s IGJhdGNoX2R1cmF0aW9uX25zLCB0b2xlcmFuY2UpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9l bmdpbmVzOyBpKyspCisJCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBzcGluW2ldKTsKKwlj bG9zZShmZFswXSk7Cit9CisKK3N0YXRpYyB2b2lkCitub19zZW1hKGludCBnZW1fZmQsIGNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwgYm9vbCBidXN5KQoreworCWlndF9z cGluX3QgKnNwaW47CisJdWludDY0X3QgdmFsWzJdOworCWludCBmZDsKKworCWZkID0gb3Blbl9n cm91cChJOTE1X1BNVV9FTkdJTkVfU0VNQShlLT5jbGFzcywgZS0+aW5zdGFuY2UpLCAtMSk7CisJ b3Blbl9ncm91cChJOTE1X1BNVV9FTkdJTkVfV0FJVChlLT5jbGFzcywgZS0+aW5zdGFuY2UpLCBm ZCk7CisKKwlpZiAoYnVzeSkgeworCQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwg MCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOworCQlpZ3Rfc3Bpbl9iYXRjaF9zZXRfdGltZW91dChz cGluLCBiYXRjaF9kdXJhdGlvbl9ucyk7CisJfSBlbHNlIHsKKwkJdXNsZWVwKGJhdGNoX2R1cmF0 aW9uX25zIC8gMTAwMCk7CisJfQorCisJcG11X3JlYWRfbXVsdGkoZmQsIDIsIHZhbCk7CisKKwlh c3NlcnRfd2l0aGluX2Vwc2lsb24odmFsWzBdLCAwLjBmLCB0b2xlcmFuY2UpOworCWFzc2VydF93 aXRoaW5fZXBzaWxvbih2YWxbMV0sIDAuMGYsIHRvbGVyYW5jZSk7CisKKwlpZiAoYnVzeSkKKwkJ aWd0X3NwaW5fYmF0Y2hfZnJlZShnZW1fZmQsIHNwaW4pOworCWNsb3NlKGZkKTsKK30KKworc3Rh dGljIHZvaWQKK211bHRpX2NsaWVudChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhl Y3V0aW9uX2VuZ2luZTIgKmUpCit7CisJdWludDY0X3QgY29uZmlnID0gSTkxNV9QTVVfRU5HSU5F X0JVU1koZS0+Y2xhc3MsIGUtPmluc3RhbmNlKTsKKwlpZ3Rfc3Bpbl90ICpzcGluOworCXVpbnQ2 NF90IHZhbFsyXTsKKwlpbnQgZmRbMl07CisKKwlmZFswXSA9IG9wZW5fcG11KGNvbmZpZyk7CisK KwlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSks IDApOworCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25z KTsKKworCWd1YXJhbnRlZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMzAwMCk7CisKKwkv KgorCSAqIFNlY29uZCBQTVUgY2xpZW50IHdoaWNoIGlzIGluaXRpYWxpemVkIGFmdGVyIHRoZSBm aXJzdCBvbmUsCisJICogYW5kIGV4aXN0cyBiZWZvcmUgaXQsIHNob3VsZCBub3QgYWZmZWN0IGFj Y291bnRpbmcgYXMgcmVwb3J0ZWQKKwkgKiBpbiB0aGUgZmlyc3QgY2xpZW50LgorCSAqLworCWZk WzFdID0gb3Blbl9wbXUoY29uZmlnKTsKKwlndWFyYW50ZWVkX3VzbGVlcChiYXRjaF9kdXJhdGlv bl9ucyAvIDMwMDApOworCXZhbFsxXSA9IHBtdV9yZWFkX3NpbmdsZShmZFsxXSk7CisJY2xvc2Uo ZmRbMV0pOworCisJZ2VtX3N5bmMoZ2VtX2ZkLCBzcGluLT5oYW5kbGUpOworCisJdmFsWzBdID0g cG11X3JlYWRfc2luZ2xlKGZkWzBdKTsKKworCWFzc2VydF93aXRoaW5fZXBzaWxvbih2YWxbMF0s IGJhdGNoX2R1cmF0aW9uX25zLCB0b2xlcmFuY2UpOworCWFzc2VydF93aXRoaW5fZXBzaWxvbih2 YWxbMV0sIGJhdGNoX2R1cmF0aW9uX25zIC8gMywgdG9sZXJhbmNlKTsKKworCWlndF9zcGluX2Jh dGNoX2ZyZWUoZ2VtX2ZkLCBzcGluKTsKKwljbG9zZShmZFswXSk7Cit9CisKKy8qKgorICogVGVz dHMgdGhhdCBpOTE1IFBNVSBjb3JlY3RseSBlcnJvcnMgb3V0IGluIGludmFsaWQgaW5pdGlhbGl6 YXRpb24uCisgKiBpOTE1IFBNVSBpcyB1bmNvcmUgUE1VLCB0aHVzOgorICogIC0gc2FtcGxpbmcg cGVyaW9kIGlzIG5vdCBzdXBwb3J0ZWQKKyAqICAtIHBpZCA+IDAgaXMgbm90IHN1cHBvcnRlZCBz aW5jZSB3ZSBjYW4ndCBjb3VudCBwZXItcHJvY2VzcyAod2UgY291bnQKKyAqICAgIHBlciB3aG9s ZSBzeXN0ZW0pCisgKiAgLSBjcHUgIT0gMCBpcyBub3Qgc3VwcG9ydGVkIHNpbmNlIGk5MTUgUE1V IGV4cG9zZXMgY3B1bWFzayBmb3IgQ1BVMAorICovCitzdGF0aWMgdm9pZCBpbnZhbGlkX2luaXQo dm9pZCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJaW50IHBpZCwgY3B1Owor CisjZGVmaW5lIEFUVFJfSU5JVCgpIFwKK2RvIHsgXAorCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9m IChhdHRyKSk7IFwKKwlhdHRyLmNvbmZpZyA9IEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5H SU5FX0NMQVNTX1JFTkRFUiwgMCk7IFwKKwlhdHRyLnR5cGUgPSBpOTE1X3R5cGVfaWQoKTsgXAor CWlndF9hc3NlcnQoYXR0ci50eXBlICE9IDApOyBcCit9IHdoaWxlKDApCisKKwlBVFRSX0lOSVQo KTsKKwlhdHRyLnNhbXBsZV9wZXJpb2QgPSAxMDA7CisJcGlkID0gLTE7CisJY3B1ID0gMDsKKwlp Z3RfYXNzZXJ0X2VxKHBlcmZfZXZlbnRfb3BlbigmYXR0ciwgcGlkLCBjcHUsIC0xLCAwKSwgLTEp OworCWlndF9hc3NlcnRfZXEoZXJybm8sIEVJTlZBTCk7CisKKwlBVFRSX0lOSVQoKTsKKwlwaWQg PSAwOworCWNwdSA9IDA7CisJaWd0X2Fzc2VydF9lcShwZXJmX2V2ZW50X29wZW4oJmF0dHIsIHBp ZCwgY3B1LCAtMSwgMCksIC0xKTsKKwlpZ3RfYXNzZXJ0X2VxKGVycm5vLCBFSU5WQUwpOworCisJ QVRUUl9JTklUKCk7CisJcGlkID0gLTE7CisJY3B1ID0gMTsKKwlpZ3RfYXNzZXJ0X2VxKHBlcmZf ZXZlbnRfb3BlbigmYXR0ciwgcGlkLCBjcHUsIC0xLCAwKSwgLTEpOworCWlndF9hc3NlcnRfZXEo ZXJybm8sIEVOT0RFVik7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb3RoZXIodW5zaWduZWQgaW50 IGksIGJvb2wgdmFsaWQpCit7CisJaW50IGZkOworCisJZmQgPSBwZXJmX2k5MTVfb3BlbihfX0k5 MTVfUE1VX09USEVSKGkpKTsKKwlpZ3RfcmVxdWlyZSghKGZkIDwgMCAmJiBlcnJubyA9PSBFTk9E RVYpKTsKKwlpZiAodmFsaWQpIHsKKwkJaWd0X2Fzc2VydChmZCA+PSAwKTsKKwl9IGVsc2Ugewor CQlpZ3RfYXNzZXJ0KGZkIDwgMCk7CisJCXJldHVybjsKKwl9CisKKwljbG9zZShmZCk7Cit9CisK K3N0YXRpYyB2b2lkIHJlYWRfb3RoZXIodW5zaWduZWQgaW50IGksIGJvb2wgdmFsaWQpCit7CisJ aW50IGZkOworCisJZmQgPSBwZXJmX2k5MTVfb3BlbihfX0k5MTVfUE1VX09USEVSKGkpKTsKKwlp Z3RfcmVxdWlyZSghKGZkIDwgMCAmJiBlcnJubyA9PSBFTk9ERVYpKTsKKwlpZiAodmFsaWQpIHsK KwkJaWd0X2Fzc2VydChmZCA+PSAwKTsKKwl9IGVsc2UgeworCQlpZ3RfYXNzZXJ0KGZkIDwgMCk7 CisJCXJldHVybjsKKwl9CisKKwkodm9pZClwbXVfcmVhZF9zaW5nbGUoZmQpOworCisJY2xvc2Uo ZmQpOworfQorCitzdGF0aWMgYm9vbCBjcHUwX2hvdHBsdWdfc3VwcG9ydCh2b2lkKQoreworCWlu dCBmZCA9IG9wZW4oIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvb25saW5lIiwgT19XUk9O TFkpOworCisJY2xvc2UoZmQpOworCisJcmV0dXJuIGZkID4gMDsKK30KKworc3RhdGljIHZvaWQg Y3B1X2hvdHBsdWcoaW50IGdlbV9mZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgc3RhcnQgPSB7IH07 CisJaWd0X3NwaW5fdCAqc3BpbjsKKwl1aW50NjRfdCB2YWwsIHJlZjsKKwlpbnQgZmQ7CisKKwlp Z3RfcmVxdWlyZShjcHUwX2hvdHBsdWdfc3VwcG9ydCgpKTsKKworCXNwaW4gPSBpZ3Rfc3Bpbl9i YXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1X0VYRUNfUkVOREVSLCAwKTsKKwlmZCA9IHBlcmZfaTkx NV9vcGVuKEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkp OworCWlndF9hc3NlcnQoZmQgPj0gMCk7CisKKwlpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7CisK KwkvKgorCSAqIFRvZ2dsZSBvbmxpbmUgc3RhdHVzIG9mIGFsbCB0aGUgQ1BVcyBpbiBhIGNoaWxk IHByb2Nlc3MgYW5kIGVuc3VyZQorCSAqIHRoaXMgaGFzIG5vdCBhZmZlY3RlZCBidXN5bmVzcyBz dGF0cyBpbiB0aGUgcGFyZW50LgorCSAqLworCWlndF9mb3JrKGNoaWxkLCAxKSB7CisJCWludCBj cHUgPSAwOworCisJCWZvciAoOzspIHsKKwkJCWNoYXIgbmFtZVsxMjhdOworCQkJaW50IGNwdWZk OworCisJCQlzcHJpbnRmKG5hbWUsICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUlZC9vbmxp bmUiLAorCQkJCWNwdSk7CisJCQljcHVmZCA9IG9wZW4obmFtZSwgT19XUk9OTFkpOworCQkJaWYg KGNwdWZkID09IC0xKSB7CisJCQkJaWd0X2Fzc2VydChjcHUgPiAwKTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJCWlndF9hc3NlcnRfZXEod3JpdGUoY3B1ZmQsICIwIiwgMiksIDIpOworCisJCQl1c2xl ZXAoMTAwMCAqIDEwMDApOworCisJCQlpZ3RfYXNzZXJ0X2VxKHdyaXRlKGNwdWZkLCAiMSIsIDIp LCAyKTsKKworCQkJY2xvc2UoY3B1ZmQpOworCQkJY3B1Kys7CisJCX0KKwl9CisKKwlpZ3Rfd2Fp dGNoaWxkcmVuKCk7CisKKwlpZ3Rfc3Bpbl9iYXRjaF9lbmQoc3Bpbik7CisJZ2VtX3N5bmMoZ2Vt X2ZkLCBzcGluLT5oYW5kbGUpOworCisJcmVmID0gaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOwor CXZhbCA9IHBtdV9yZWFkX3NpbmdsZShmZCk7CisKKwlhc3NlcnRfd2l0aGluX2Vwc2lsb24odmFs LCByZWYsIHRvbGVyYW5jZSk7CisKKwlpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGdlbV9mZCwgc3Bpbik7 CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgaW50IGNoYWluX25vcChpbnQgZ2VtX2ZkLCBpbnQg aW5fZmVuY2UsIGJvb2wgc3luYykKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiBvYmogPSB7fTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0KKwkJeyAu YnVmZmVyX2NvdW50ID0gMSwgLmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdCkmb2JqfTsKKwljb25z dCB1aW50MzJfdCBiYmUgPSAweGEgPDwgMjM7CisKKwlvYmouaGFuZGxlID0gZ2VtX2NyZWF0ZShn ZW1fZmQsIHNpemVvZihiYmUpKTsKKwlnZW1fd3JpdGUoZ2VtX2ZkLCBvYmouaGFuZGxlLCAwLCAm YmJlLCBzaXplb2YoYmJlKSk7CisKKwllYi5mbGFncyA9IEk5MTVfRVhFQ19SRU5ERVIgfCBJOTE1 X0VYRUNfRkVOQ0VfT1VUOworCisJaWYgKGluX2ZlbmNlID49IDApIHsKKwkJZWIuZmxhZ3MgfD0g STkxNV9FWEVDX0ZFTkNFX0lOOworCQllYi5yc3ZkMiA9IGluX2ZlbmNlOworCX0KKworCWdlbV9l eGVjYnVmX3dyKGdlbV9mZCwgJmViKTsKKworCWlmIChzeW5jKQorCQlnZW1fc3luYyhnZW1fZmQs IG9iai5oYW5kbGUpOworCisJZ2VtX2Nsb3NlKGdlbV9mZCwgb2JqLmhhbmRsZSk7CisJaWYgKGlu X2ZlbmNlID49IDApCisJCWNsb3NlKGluX2ZlbmNlKTsKKworCXJldHVybiBlYi5yc3ZkMiA+PiAz MjsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfaW50ZXJydXB0cyhpbnQgZ2VtX2ZkKQoreworCXVp bnQ2NF90IGlkbGUsIGJ1c3ksIHByZXY7CisJaW50IGZkLCBmZW5jZSA9IC0xOworCWNvbnN0IHVu c2lnbmVkIGludCBjb3VudCA9IDEwMDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlmZCA9IG9wZW5f cG11KEk5MTVfUE1VX0lOVEVSUlVQVFMpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsK KworCS8qIFdhaXQgZm9yIGlkbGUgc3RhdGUuICovCisJcHJldiA9IHBtdV9yZWFkX3NpbmdsZShm ZCk7CisJaWRsZSA9IHByZXYgKyAxOworCXdoaWxlIChpZGxlICE9IHByZXYpIHsKKwkJdXNsZWVw KGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7CisJCXByZXYgPSBpZGxlOworCQlpZGxlID0gcG11 X3JlYWRfc2luZ2xlKGZkKTsKKwl9CisKKwlpZ3RfYXNzZXJ0X2VxKGlkbGUgLSBwcmV2LCAwKTsK KworCS8qIFNlbmQgc29tZSBuby1vcCBiYXRjaGVzIHdpdGggY2hhaW5lZCBmZW5jZXMgdG8gZW5z dXJlIGludGVycnVwdHMuICovCisJZm9yIChpID0gMTsgaSA8PSBjb3VudDsgaSsrKQorCQlmZW5j ZSA9IGNoYWluX25vcChnZW1fZmQsIGZlbmNlLCBpIDwgY291bnQgPyBmYWxzZSA6IHRydWUpOwor CWNsb3NlKGZlbmNlKTsKKworCS8qIENoZWNrIGF0IGxlYXN0IGFzIG1hbnkgaW50ZXJydXB0cyBo YXMgYmVlbiBnZW5lcmF0ZWQuICovCisJYnVzeSA9IHBtdV9yZWFkX3NpbmdsZShmZCk7CisJaWd0 X2Fzc2VydChidXN5ID4gY291bnQgLyAyMCk7CisKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2 b2lkCit0ZXN0X2ZyZXF1ZW5jeShpbnQgZ2VtX2ZkKQoreworCWlndF9zcGluX3QgKnNwaW47CisJ dWludDY0X3QgaWRsZVsyXSwgYnVzeVsyXTsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW5fZ3JvdXAo STkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSwgLTEpOworCW9wZW5fZ3JvdXAoSTkxNV9QTVVf QUNUVUFMX0ZSRVFVRU5DWSwgZmQpOworCisJZ2VtX3F1aWVzY2VudF9ncHUoZ2VtX2ZkKTsKKwl1 c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKKworCXBtdV9yZWFkX211bHRpKGZkLCAy LCBpZGxlKTsKKworCS8qCisJICogUHV0IHNvbWUgbG9hZCBvbiB0aGUgcmVuZGVyIGVuZ2luZSBh bmQgY2hlY2sgdGhhdCB0aGUgcmVxdWVuc3QKKwkgKiBhbmQgYWN0dWFsIGZyZXF1ZW5jaWVzIGhh dmUgZ29uZSB1cC4KKwkgKgorCSAqIEZJWE1FIFRoaXMgbWlnaHQgbm90IGJlIGd1YXJhbnRlZWQg dG8gd29yayBvbiBhbGwgcGxhdGZvcm1zLgorCSAqIEhvdyB0byBkZXRlY3QgdGhvc2U/CisJICov CisJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIEk5MTVfRVhFQ19SRU5ERVIs IDApOworCWlndF9zcGluX2JhdGNoX3NldF90aW1lb3V0KHNwaW4sIGJhdGNoX2R1cmF0aW9uX25z KTsKKwlnZW1fc3luYyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7CisKKwlwbXVfcmVhZF9tdWx0aShm ZCwgMiwgYnVzeSk7CisKKwlpZ3RfYXNzZXJ0KGJ1c3lbMF0gPiBpZGxlWzBdKTsKKwlpZ3RfYXNz ZXJ0KGJ1c3lbMV0gPiBpZGxlWzFdKTsKKworCWlndF9zcGluX2JhdGNoX2ZyZWUoZ2VtX2ZkLCBz cGluKTsKKwljbG9zZShmZCk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZXN0X3JjNihpbnQgZ2VtX2Zk KQoreworCWludDY0X3QgZHVyYXRpb25fbnMgPSAyICogMTAwMCAqIDEwMDAgKiAxMDAwOworCXVp bnQ2NF90IGlkbGUsIGJ1c3ksIHByZXY7CisJaW50IGZkLCBmdzsKKworCWZkID0gb3Blbl9wbXUo STkxNV9QTVVfUkM2X1JFU0lERU5DWSk7CisKKwlnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwor CisJLyogR28gaWRsZSBhbmQgY2hlY2sgZnVsbCBSQzYuICovCisJcHJldiA9IHBtdV9yZWFkX3Np bmdsZShmZCk7CisJZ3VhcmFudGVlZF91c2xlZXAoZHVyYXRpb25fbnMgLyAxMDAwKTsKKwlpZGxl ID0gcG11X3JlYWRfc2luZ2xlKGZkKTsKKworCWFzc2VydF93aXRoaW5fZXBzaWxvbihpZGxlIC0g cHJldiwgZHVyYXRpb25fbnMsIHRvbGVyYW5jZSk7CisKKwkvKiBXYWtlIHVwIGRldmljZSBhbmQg Y2hlY2sgbm8gUkM2LiAqLworCWZ3ID0gaWd0X29wZW5fZm9yY2V3YWtlX2hhbmRsZShnZW1fZmQp OworCWlndF9hc3NlcnQoZncgPj0gMCk7CisKKwlwcmV2ID0gcG11X3JlYWRfc2luZ2xlKGZkKTsK KwlndWFyYW50ZWVkX3VzbGVlcChkdXJhdGlvbl9ucyAvIDEwMDApOworCWJ1c3kgPSBwbXVfcmVh ZF9zaW5nbGUoZmQpOworCisJYXNzZXJ0X3dpdGhpbl9lcHNpbG9uKGJ1c3kgLSBwcmV2LCAwLjAs IHRvbGVyYW5jZSk7CisKKwljbG9zZShmdyk7CisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9p ZAordGVzdF9yYzZwKGludCBnZW1fZmQpCit7CisJaW50NjRfdCBkdXJhdGlvbl9ucyA9IDIgKiAx MDAwICogMTAwMCAqIDEwMDA7CisJdW5zaWduZWQgaW50IG51bV9wbXUgPSAxOworCXVpbnQ2NF90 IGlkbGVbM10sIGJ1c3lbM10sIHByZXZbM107CisJdW5zaWduZWQgaW50IGk7CisJaW50IGZkLCBy ZXQsIGZ3OworCisJZmQgPSBvcGVuX2dyb3VwKEk5MTVfUE1VX1JDNl9SRVNJREVOQ1ksIC0xKTsK KwlyZXQgPSBwZXJmX2k5MTVfb3Blbl9ncm91cChJOTE1X1BNVV9SQzZwX1JFU0lERU5DWSwgZmQp OworCWlmIChyZXQgPiAwKSB7CisJCW51bV9wbXUrKzsKKwkJcmV0ID0gcGVyZl9pOTE1X29wZW5f Z3JvdXAoSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZLCBmZCk7CisJCWlmIChyZXQgPiAwKQorCQkJ bnVtX3BtdSsrOworCX0KKworCWlndF9yZXF1aXJlKG51bV9wbXUgPT0gMyk7CisKKwlnZW1fcXVp ZXNjZW50X2dwdShnZW1fZmQpOworCisJLyogR28gaWRsZSBhbmQgY2hlY2sgZnVsbCBSQzYuICov CisJcG11X3JlYWRfbXVsdGkoZmQsIG51bV9wbXUsIHByZXYpOworCWd1YXJhbnRlZWRfdXNsZWVw KGR1cmF0aW9uX25zIC8gMTAwMCk7CisJcG11X3JlYWRfbXVsdGkoZmQsIG51bV9wbXUsIGlkbGUp OworCisJZm9yIChpID0gMDsgaSA8IG51bV9wbXU7IGkrKykKKwkJYXNzZXJ0X3dpdGhpbl9lcHNp bG9uKGlkbGVbaV0gLSBwcmV2W2ldLCBkdXJhdGlvbl9ucywKKwkJCQkgICAgICB0b2xlcmFuY2Up OworCisJLyogV2FrZSB1cCBkZXZpY2UgYW5kIGNoZWNrIG5vIFJDNi4gKi8KKwlmdyA9IGlndF9v cGVuX2ZvcmNld2FrZV9oYW5kbGUoZ2VtX2ZkKTsKKwlpZ3RfYXNzZXJ0KGZ3ID49IDApOworCisJ cG11X3JlYWRfbXVsdGkoZmQsIG51bV9wbXUsIHByZXYpOworCWd1YXJhbnRlZWRfdXNsZWVwKGR1 cmF0aW9uX25zIC8gMTAwMCk7CisJcG11X3JlYWRfbXVsdGkoZmQsIG51bV9wbXUsIGJ1c3kpOwor CisJZm9yIChpID0gMDsgaSA8IG51bV9wbXU7IGkrKykKKwkJYXNzZXJ0X3dpdGhpbl9lcHNpbG9u KGJ1c3lbaV0gLSBwcmV2W2ldLCAwLjAsIHRvbGVyYW5jZSk7CisKKwljbG9zZShmdyk7CisJY2xv c2UoZmQpOworfQorCitpZ3RfbWFpbgoreworCWNvbnN0IHVuc2lnbmVkIGludCBudW1fb3RoZXJf bWV0cmljcyA9CisJCQkJSTkxNV9QTVVfTEFTVCAtIF9fSTkxNV9QTVVfT1RIRVIoMCkgKyAxOwor CXVuc2lnbmVkIGludCBudW1fZW5naW5lcyA9IDA7CisJaW50IGZkID0gLTE7CisJY29uc3Qgc3Ry dWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOworCXVuc2lnbmVkIGludCBpOworCisJaWd0 X2ZpeHR1cmUgeworCQlmZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsK KworCQlpZ3RfcmVxdWlyZV9nZW0oZmQpOworCQlpZ3RfcmVxdWlyZShpOTE1X3R5cGVfaWQoKSA+ IDApOworCisJCWZvcl9lYWNoX2VuZ2luZV9jbGFzc19pbnN0YW5jZShmZCwgZSkgeworCQkJaWYg KGdlbV9oYXNfZW5naW5lKGZkLCBlLT5jbGFzcywgZS0+aW5zdGFuY2UpKQorCQkJCW51bV9lbmdp bmVzKys7CisJCX0KKwl9CisKKwkvKioKKwkgKiBUZXN0IGludmFsaWQgYWNjZXNzIHZpYSBwZXJm IEFQSSBpcyByZWplY3RlZC4KKwkgKi8KKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC1pbml0IikKKwkJ aW52YWxpZF9pbml0KCk7CisKKwlmb3JfZWFjaF9lbmdpbmVfY2xhc3NfaW5zdGFuY2UoZmQsIGUp IHsKKwkJLyoqCisJCSAqIFRlc3QgdGhhdCBhIHNpbmdsZSBlbmdpbmUgbWV0cmljIGNhbiBiZSBp bml0aWFsaXplZC4KKwkJICovCisJCWlndF9zdWJ0ZXN0X2YoImluaXQtcXVldWVkLSVzIiwgZS0+ bmFtZSkKKwkJCWluaXQoZmQsIGUsIEk5MTVfU0FNUExFX1FVRVVFRCk7CisKKwkJaWd0X3N1YnRl c3RfZigiaW5pdC1idXN5LSVzIiwgZS0+bmFtZSkKKwkJCWluaXQoZmQsIGUsIEk5MTVfU0FNUExF X0JVU1kpOworCisJCWlndF9zdWJ0ZXN0X2YoImluaXQtd2FpdC0lcyIsIGUtPm5hbWUpCisJCQlp bml0KGZkLCBlLCBJOTE1X1NBTVBMRV9XQUlUKTsKKworCQlpZ3Rfc3VidGVzdF9mKCJpbml0LXNl bWEtJXMiLCBlLT5uYW1lKQorCQkJaW5pdChmZCwgZSwgSTkxNV9TQU1QTEVfU0VNQSk7CisKKwkJ LyoqCisJCSAqIFRlc3QgdGhhdCBxdWV1ZWQgbWV0cmljIHdvcmtzLgorCQkgKi8KKwkJaWd0X3N1 YnRlc3RfZigicXVldWVkLSVzIiwgZS0+bmFtZSkKKwkJCXF1ZXVlZChmZCwgZSk7CisKKwkJLyoq CisJCSAqIFRlc3QgdGhhdCBlbmdpbmVzIHNob3cgbm90aGluZyBxdWV1ZWQgd2hlbiBpZGxlIG9y IGJ1c3kuCisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJpZGxlLW5vLXF1ZXVlZC0lcyIsIGUtPm5h bWUpCisJCQlzaW5nbGUoZmQsIGUsIEk5MTVfU0FNUExFX1FVRVVFRCwgZmFsc2UpOworCisJCWln dF9zdWJ0ZXN0X2YoImJ1c3ktbm8tcXVldWVkLSVzIiwgZS0+bmFtZSkKKwkJCXNpbmdsZShmZCwg ZSwgSTkxNV9TQU1QTEVfUVVFVUVELCB0cnVlKTsKKworCQkvKioKKwkJICogVGVzdCB0aGF0IGVu Z2luZXMgc2hvdyBubyBsb2FkIHdoZW4gaWRsZS4KKwkJICovCisJCWlndF9zdWJ0ZXN0X2YoImlk bGUtJXMiLCBlLT5uYW1lKQorCQkJc2luZ2xlKGZkLCBlLCBJOTE1X1NBTVBMRV9CVVNZLCBmYWxz ZSk7CisKKwkJLyoqCisJCSAqIFRlc3QgdGhhdCBhIHNpbmdsZSBlbmdpbmUgcmVwb3J0cyBsb2Fk IGNvcnJlY3RseS4KKwkJICovCisJCWlndF9zdWJ0ZXN0X2YoImJ1c3ktJXMiLCBlLT5uYW1lKQor CQkJc2luZ2xlKGZkLCBlLCBJOTE1X1NBTVBMRV9CVVNZLCB0cnVlKTsKKworCQkvKioKKwkJICog VGVzdCB0aGF0IHdoZW4gb25lIGVuZ2luZSBpcyBsb2FkZWQgb3RoZXIgcmVwb3J0IG5vIGxvYWQu CisJCSAqLworCQlpZ3Rfc3VidGVzdF9mKCJidXN5LWNoZWNrLWFsbC0lcyIsIGUtPm5hbWUpCisJ CQlidXN5X2NoZWNrX2FsbChmZCwgZSwgbnVtX2VuZ2luZXMpOworCisJCS8qKgorCQkgKiBUZXN0 IHRoYXQgd2hlbiBhbGwgZXhjZXB0IG9uZSBlbmdpbmUgYXJlIGxvYWRlZCBhbGwgbG9hZHMKKwkJ ICogYXJlIGNvcnJlY3RseSByZXBvcnRlZC4KKwkJICovCisJCWlndF9zdWJ0ZXN0X2YoIm1vc3Qt YnVzeS1jaGVjay1hbGwtJXMiLCBlLT5uYW1lKQorCQkJbW9zdF9idXN5X2NoZWNrX2FsbChmZCwg ZSwgbnVtX2VuZ2luZXMpOworCisJCS8qKgorCQkgKiBUZXN0IHRoYXQgc2VtcGhvcmUgY291bnRl cnMgcmVwb3J0IG5vIGFjdGl2aXR5IG9uIGlkbGUKKwkJICogb3IgYnVzeSBlbmdpbmVzLgorCQkg Ki8KKwkJaWd0X3N1YnRlc3RfZigiaWRsZS1uby1zZW1hcGhvcmVzLSVzIiwgZS0+bmFtZSkKKwkJ CW5vX3NlbWEoZmQsIGUsIGZhbHNlKTsKKworCQlpZ3Rfc3VidGVzdF9mKCJidXN5LW5vLXNlbWFw aG9yZXMtJXMiLCBlLT5uYW1lKQorCQkJbm9fc2VtYShmZCwgZSwgdHJ1ZSk7CisKKwkJLyoqCisJ CSAqIENoZWNrIHRoYXQgdHdvIHBlcmYgY2xpZW50cyBkbyBub3QgaW5mbHVlbmNlIGVhY2ggb3Ro ZXJzCisJCSAqIG9ic2VydmF0aW9ucy4KKwkJICovCisJCWlndF9zdWJ0ZXN0X2YoIm11bHRpLWNs aWVudC0lcyIsIGUtPm5hbWUpCisJCQltdWx0aV9jbGllbnQoZmQsIGUpOworCX0KKworCS8qKgor CSAqIFRlc3QgdGhhdCB3aGVuIGFsbCBlbmdpbmVzIGFyZSBsb2FkZWQgYWxsIGxvYWRzIGFyZQor CSAqIGNvcnJlY3RseSByZXBvcnRlZC4KKwkgKi8KKwlpZ3Rfc3VidGVzdCgiYWxsLWJ1c3ktY2hl Y2stYWxsIikKKwkJYWxsX2J1c3lfY2hlY2tfYWxsKGZkLCBudW1fZW5naW5lcyk7CisKKwkvKioK KwkgKiBUZXN0IHRoYXQgbm9uLWVuZ2luZSBjb3VudGVycyBjYW4gYmUgaW5pdGlhbGl6ZWQgYW5k IHJlYWQuIEFwYXJ0CisJICogZnJvbSB0aGUgaW52YWxpZCBtZXRyaWMgd2hpY2ggc2hvdWxkIGZh aWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bV9vdGhlcl9tZXRyaWNzICsgMTsgaSsrKSB7 CisJCWlndF9zdWJ0ZXN0X2YoIm90aGVyLWluaXQtJXUiLCBpKQorCQkJaW5pdF9vdGhlcihpLCBp IDwgbnVtX290aGVyX21ldHJpY3MpOworCisJCWlndF9zdWJ0ZXN0X2YoIm90aGVyLXJlYWQtJXUi LCBpKQorCQkJcmVhZF9vdGhlcihpLCBpIDwgbnVtX290aGVyX21ldHJpY3MpOworCX0KKworCS8q KgorCSAqIFRlc3QgY291bnRlcnMgYXJlIG5vdCBhZmZlY3RlZCBieSBDUFUgb2ZmbGluZS9vbmxp bmUgZXZlbnRzLgorCSAqLworCWlndF9zdWJ0ZXN0KCJjcHUtaG90cGx1ZyIpCisJCWNwdV9ob3Rw bHVnKGZkKTsKKworCS8qKgorCSAqIFRlc3QgR1BVIGZyZXF1ZW5jeS4KKwkgKi8KKwlpZ3Rfc3Vi dGVzdCgiZnJlcXVlbmN5IikKKwkJdGVzdF9mcmVxdWVuY3koZmQpOworCisJLyoqCisJICogVGVz dCBpbnRlcnJ1cHQgY291bnQgcmVwb3J0aW5nLgorCSAqLworCWlndF9zdWJ0ZXN0KCJpbnRlcnJ1 cHRzIikKKwkJdGVzdF9pbnRlcnJ1cHRzKGZkKTsKKworCS8qKgorCSAqIFRlc3QgUkM2IHJlc2lk ZW5jeSByZXBvcnRpbmcuCisJICovCisJaWd0X3N1YnRlc3QoInJjNiIpCisJCXRlc3RfcmM2KGZk KTsKKworCS8qKgorCSAqIFRlc3QgUkM2cCByZXNpZGVuY3kgcmVwb3J0aW5nLgorCSAqLworCWln dF9zdWJ0ZXN0KCJyYzZwIikKKwkJdGVzdF9yYzZwKGZkKTsKK30KLS0gCjIuOS41CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK