From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id E85A66E961 for ; Mon, 17 Feb 2020 14:22:17 +0000 (UTC) From: Lionel Landwerlin Date: Mon, 17 Feb 2020 16:21:53 +0200 Message-Id: <20200217142155.501499-5-lionel.g.landwerlin@intel.com> In-Reply-To: <20200217142155.501499-1-lionel.g.landwerlin@intel.com> References: <20200217142155.501499-1-lionel.g.landwerlin@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 4/6] tools: add i915 perf recorder tool 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: U2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5AaW50 ZWwuY29tPgotLS0KIGxpYi9pOTE1LXBlcmYucGMuaW4gICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgIDEgKwogbGliL2k5MTUvcGVyZl9kYXRhLmggICAgICAgICAgICAgICAgICAgICAgICAg IHwgIDExOCArKwogbGliL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgMSArCiBsaWIvdGVzdHMvaTkxNV9wZXJmX2RhdGFfYWxpZ25tZW50LmMgICAgICAgICAg fCAgIDQwICsKIGxpYi90ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgIDEgKwogdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9jb250cm9sLmMgICAgICAgICAgIHwg IDEzMyArKysKIHRvb2xzL2k5MTUtcGVyZi9pOTE1X3BlcmZfcmVjb3JkZXIuYyAgICAgICAgICB8 IDEwNTIgKysrKysrKysrKysrKysrKysKIHRvb2xzL2k5MTUtcGVyZi9pOTE1X3BlcmZfcmVjb3Jk ZXJfY29tbWFuZHMuaCB8ICAgMzkgKwogdG9vbHMvaTkxNS1wZXJmL21lc29uLmJ1aWxkICAgICAg ICAgICAgICAgICAgIHwgICAxMSArCiA5IGZpbGVzIGNoYW5nZWQsIDEzOTYgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9pOTE1L3BlcmZfZGF0YS5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliL3Rlc3RzL2k5MTVfcGVyZl9kYXRhX2FsaWdubWVudC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9jb250cm9sLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy9pOTE1LXBlcmYvaTkxNV9wZXJmX3JlY29yZGVyLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCB0b29scy9pOTE1LXBlcmYvaTkxNV9wZXJmX3JlY29yZGVyX2NvbW1hbmRzLmgKCmRpZmYg LS1naXQgYS9saWIvaTkxNS1wZXJmLnBjLmluIGIvbGliL2k5MTUtcGVyZi5wYy5pbgppbmRleCBl NzJlZmRjMy4uOGNmYTNkYmUgMTAwNjQ0Ci0tLSBhL2xpYi9pOTE1LXBlcmYucGMuaW4KKysrIGIv bGliL2k5MTUtcGVyZi5wYy5pbgpAQCAtNiw1ICs2LDYgQEAgaW5jbHVkZWRpcj1AaW5jbHVkZWRp ckAKIE5hbWU6IGk5MTUtcGVyZgogRGVzY3JpcHRpb246IGk5MTUgcGVyZiBsaWJyYXJ5CiBWZXJz aW9uOiBAdmVyc2lvbkAKK1JlcXVpcmVzOiBsaWJkcm0KIExpYnM6IC1MJHtsaWJkaXJ9IC1saTkx NV9wZXJmCiBDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfS9pOTE1LXBlcmYKZGlmZiAtLWdpdCBhL2xp Yi9pOTE1L3BlcmZfZGF0YS5oIGIvbGliL2k5MTUvcGVyZl9kYXRhLmgKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAuLmZiMzU1NmY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2k5 MTUvcGVyZl9kYXRhLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw MTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVk LCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0 aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29m dHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5 LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig c2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8g dGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBh bGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFM TCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBQRVJGX0RBVEFf SAorI2RlZmluZSBQRVJGX0RBVEFfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg eworI2VuZGlmCisKKyNpbmNsdWRlIDxpOTE1X2RybS5oPgorCisvKiBUaGUgc3RydWN0dXJlcyBi ZWxvdyBhcmUgZW1iZWRkZWQgaW4gdGhlIGk5MTUtcGVyZiBzdHJlYW0gc28gYXMgdG8KKyAqIHBy b3ZpZGUgbWV0YWRhdGEuIFRoZSB0eXBlcyB1c2VkIGluIHRoZQorICogZHJtX2k5MTVfcGVyZl9y ZWNvcmRfaGVhZGVyLnR5cGUgYXJlIGRlZmluZWQgaW4KKyAqIGludGVsX3BlcmZfcmVjb3JkX3R5 cGUuCisgKi8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCitlbnVtIGludGVsX3BlcmZfcmVjb3Jk X3R5cGUgeworCS8qIFN0YXJ0IGF0IDY1NTM2LCB3aGljaCBpcyBwcmV0dHkgc2FmZSBzaW5jZSBh ZnRlciAzeWVhcnMgdGhlCisJICoga2VybmVsIGhhc24ndCBkZWZpbmVkIG1vcmUgdGhhbiAzIGVu dHJpZXMuCisJICovCisKKwlJTlRFTF9QRVJGX1JFQ09SRF9UWVBFX1ZFUlNJT04gPSAxIDw8IDE2 LAorCisJLyogaW50ZWxfcGVyZl9yZWNvcmRfZGV2aWNlX2luZm8gKi8KKwlJTlRFTF9QRVJGX1JF Q09SRF9UWVBFX0RFVklDRV9JTkZPLAorCisJLyogaW50ZWxfcGVyZl9yZWNvcmRfZGV2aWNlX3Rv cG9sb2d5ICovCisJSU5URUxfUEVSRl9SRUNPUkRfVFlQRV9ERVZJQ0VfVE9QT0xPR1ksCisKKwkv KiBpbnRlbF9wZXJmX3JlY29yZF90aW1lc3RhbXBfY29ycmVsYXRpb24gKi8KKwlJTlRFTF9QRVJG X1JFQ09SRF9UWVBFX1RJTUVTVEFNUF9DT1JSRUxBVElPTiwKK307CisKKy8qIFRoaXMgc3RydWN0 dXJlIGNhbm5vdCBldmVyIGNoYW5nZS4gKi8KK3N0cnVjdCBpbnRlbF9wZXJmX3JlY29yZF92ZXJz aW9uIHsKKwkvKiBWZXJzaW9uIG9mIHRoZSBpOTE1LXBlcmYgZmlsZSByZWNvcmRpbmcgZm9ybWF0 IChlZmZlY3RpdmVseQorCSAqIHZlcnNpb25pbmcgdGhpcyBmaWxlKS4KKwkgKi8KKwl1aW50MzJf dCB2ZXJzaW9uOworCisjZGVmaW5lIElOVEVMX1BFUkZfUkVDT1JEX1ZFUlNJT04gKDEpCisKKwl1 aW50MzJfdCBwYWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaW50ZWxf cGVyZl9yZWNvcmRfZGV2aWNlX2luZm8geworCS8qIEZyZXF1ZW5jeSBvZiB0aGUgdGltZXN0YW1w cyBpbiB0aGUgcmVjb3Jkcy4gKi8KKwl1aW50NjRfdCB0aW1lc3RhbXBfZnJlcXVlbmN5OworCisJ LyogUENJIElEICovCisJdWludDMyX3QgZGV2aWNlX2lkOworCisJLyogU3RlcHBpbmcgKi8KKwl1 aW50MzJfdCBkZXZpY2VfcmV2aXNpb247CisKKwkvKiBHVCBtaW4vbWF4IGZyZXF1ZW5jaWVzICov CisJdWludDMyX3QgZ3RfbWluX2ZyZXF1ZW5jeTsKKwl1aW50MzJfdCBndF9tYXhfZnJlcXVlbmN5 OworCisJLyogRW5naW5lICovCisJdWludDMyX3QgZW5naW5lX2NsYXNzOworCXVpbnQzMl90IGVu Z2luZV9pbnN0YW5jZTsKKworCS8qIGVudW0gZHJtX2k5MTVfb2FfZm9ybWF0ICovCisJdWludDMy X3Qgb2FfZm9ybWF0OworCisJLyogTWV0cmljIHNldCBuYW1lICovCisJY2hhciBtZXRyaWNfc2V0 X25hbWVbMjU2XTsKKworCS8qIENvbmZpZ3VyYXRpb24gaWRlbnRpZmllciAqLworCWNoYXIgbWV0 cmljX3NldF91dWlkWzQwXTsKKworCXVpbnQzMl90IHBhZDsKKyB9IF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOworCisvKiBUb3BvbG9neSBhcyByZXBvcnRlZCBieSBpOTE1ICh2YXJpYWJsZSBsZW5n dGgsIGFsaWduZWQgYnkgdGhlCisgKiByZWNvcmRlcikuICovCitzdHJ1Y3QgaW50ZWxfcGVyZl9y ZWNvcmRfZGV2aWNlX3RvcG9sb2d5IHsKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfdG9wb2xvZ3lf aW5mbyB0b3BvbG9neTsKK307CisKKy8qIFRpbWVzdGFtcCBjb3JyZWxhdGlvbiBiZXR3ZWVuIENQ VS9HUFUuICovCitzdHJ1Y3QgaW50ZWxfcGVyZl9yZWNvcmRfdGltZXN0YW1wX2NvcnJlbGF0aW9u IHsKKwkvKiBJbiBDTE9DS19NT05PVE9OSUMgKi8KKwl1aW50NjRfdCBjcHVfdGltZXN0YW1wOwor CisJLyogRW5naW5lIHRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGggdGhlIE9BIHVuaXQgKi8KKwl1 aW50NjRfdCBncHVfdGltZXN0YW1wOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2lm ZGVmIF9fY3BsdXNwbHVzCit9OworI2VuZGlmCisKKyNlbmRpZiAvKiBQRVJGX0RBVEFfSCAqLwpk aWZmIC0tZ2l0IGEvbGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkCmluZGV4IDRkZTFi MjExLi4xZmU2MjFlYyAxMDA2NDQKLS0tIGEvbGliL21lc29uLmJ1aWxkCisrKyBiL2xpYi9tZXNv bi5idWlsZApAQCAtMjE4LDYgKzIxOCw3IEBAIGluc3RhbGxfaGVhZGVycygKICAgJ2lndF9saXN0 LmgnLAogICAnaW50ZWxfY2hpcHNldC5oJywKICAgJ2k5MTUvcGVyZi5oJywKKyAgJ2k5MTUvcGVy Zl9kYXRhLmgnLAogICBzdWJkaXIgOiAnaTkxNS1wZXJmJwogKQogCmRpZmYgLS1naXQgYS9saWIv dGVzdHMvaTkxNV9wZXJmX2RhdGFfYWxpZ25tZW50LmMgYi9saWIvdGVzdHMvaTkxNV9wZXJmX2Rh dGFfYWxpZ25tZW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhjMTRl MGQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3Rlc3RzL2k5MTVfcGVyZl9kYXRhX2FsaWdubWVu dC5jCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAyMCBJbnRlbCBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq CisgKi8KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisKKyNpbmNsdWRlICJpZ3RfdGVzdHNfY29t bW9uLmgiCisKKyNpbmNsdWRlICJpOTE1L3BlcmZfZGF0YS5oIgorCisjZGVmaW5lIGlzX2FsaWdu ZWQocykgKChzaXplb2YocykgJSA4KSA9PSAwKQorCitpZ3RfbWFpbgoreworCWlndF9zdWJ0ZXN0 KCJhbGlnbm1lbnQiKSB7CisJCWludGVybmFsX2Fzc2VydChpc19hbGlnbmVkKHN0cnVjdCBpbnRl bF9wZXJmX3JlY29yZF92ZXJzaW9uKSk7CisJCWludGVybmFsX2Fzc2VydChpc19hbGlnbmVkKHN0 cnVjdCBpbnRlbF9wZXJmX3JlY29yZF9kZXZpY2VfaW5mbykpOworCQlpbnRlcm5hbF9hc3NlcnQo aXNfYWxpZ25lZChzdHJ1Y3QgaW50ZWxfcGVyZl9yZWNvcmRfdGltZXN0YW1wX2NvcnJlbGF0aW9u KSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL21lc29uLmJ1aWxkIGIvbGliL3Rlc3Rz L21lc29uLmJ1aWxkCmluZGV4IGU1MDY2NjY1Li42Y2Q4Y2IwZSAxMDA2NDQKLS0tIGEvbGliL3Rl c3RzL21lc29uLmJ1aWxkCisrKyBiL2xpYi90ZXN0cy9tZXNvbi5idWlsZApAQCAtMTYsNiArMTYs NyBAQCBsaWJfdGVzdHMgPSBbCiAJJ2lndF9zaW11bGF0aW9uJywKIAknaWd0X3N0YXRzJywKIAkn aWd0X3N1YnRlc3RfZ3JvdXAnLAorCSdpOTE1X3BlcmZfZGF0YV9hbGlnbm1lbnQnLAogXQogCiBs aWJfZmFpbF90ZXN0cyA9IFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2k5MTUtcGVyZi9pOTE1X3BlcmZf Y29udHJvbC5jIGIvdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9jb250cm9sLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE4ZDBkMzBmCi0tLSAvZGV2L251bGwKKysrIGIv dG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9jb250cm9sLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8q CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp Z2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxs IGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VN RU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8K KworI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxz dGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiaTkxNV9wZXJmX3JlY29yZGVyX2NvbW1hbmRzLmgi CisKK3N0YXRpYyB2b2lkCit1c2FnZShjb25zdCBjaGFyICpuYW1lKQoreworCWZwcmludGYoc3Rk b3V0LAorCQkiVXNhZ2U6ICVzIFtvcHRpb25zXVxuIgorCQkiXG4iCisJCSIgICAgIC0taGVscCwg ICAgICAgICAgICAgICAtaCAgICAgICAgIFByaW50IHRoaXMgc2NyZWVuXG4iCisJCSIgICAgIC0t Y29tbWFuZC1maWZvLCAgICAgICAtZiA8cGF0aD4gIFBhdGggdG8gYSBjb21tYW5kIGZpZm9cbiIK KwkJIiAgICAgLS1kdW1wLCAgICAgICAgICAgICAgIC1kIDxwYXRoPiAgV3JpdGUgYSBjb250ZW50 IG9mIGNpcmN1bGFyIGJ1ZmZlciB0byBwYXRoXG4iLAorCQluYW1lKTsKK30KKworaW50CittYWlu KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3Qgc3RydWN0IG9wdGlvbiBsb25nX29w dGlvbnNbXSA9IHsKKwkJeyJoZWxwIiwgICAgICAgICAgICAgICAgICAgICAgIG5vX2FyZ3VtZW50 LCAwLCAnaCd9LAorCQl7ImR1bXAiLCAgICAgICAgICAgICAgICAgcmVxdWlyZWRfYXJndW1lbnQs IDAsICdkJ30sCisJCXsiY29tbWFuZC1maWZvIiwgICAgICAgICByZXF1aXJlZF9hcmd1bWVudCwg MCwgJ2YnfSwKKwkJeyJxdWl0IiwgICAgICAgICAgICAgICAgICAgICAgIG5vX2FyZ3VtZW50LCAw LCAncSd9LAorCQl7MCwgMCwgMCwgMH0KKwl9OworCWNvbnN0IGNoYXIgKmNvbW1hbmRfZmlmbyA9 IEk5MTVfUEVSRl9SRUNPUkRfRklGT19QQVRILCAqZHVtcF9maWxlID0gTlVMTDsKKwlGSUxFICpj b21tYW5kX2ZpZm9fZmlsZTsKKwlpbnQgb3B0OworCWJvb2wgcXVpdCA9IGZhbHNlOworCisJd2hp bGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaGQ6ZjpxIiwgbG9uZ19vcHRpb25z LCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnaCc6CisJCQl1c2Fn ZShhcmd2WzBdKTsKKwkJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJCWNhc2UgJ2QnOgorCQkJZHVt cF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJY29tbWFuZF9maWZv ID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgJ3EnOgorCQkJcXVpdCA9IHRydWU7CisJCQli cmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCAiSW50ZXJuYWwgZXJyb3I6ICIK KwkJCQkidW5leHBlY3RlZCBnZXRvcHQgdmFsdWU6ICVkXG4iLCBvcHQpOworCQkJdXNhZ2UoYXJn dlswXSk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCisJaWYgKCFjb21tYW5k X2ZpZm8pCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwljb21tYW5kX2ZpZm9fZmlsZSA9IGZv cGVuKGNvbW1hbmRfZmlmbywgInIrIik7CisJaWYgKCFjb21tYW5kX2ZpZm9fZmlsZSkgeworCQlm cHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGNvbW1hbmQgZmlsZVxuIik7CisJCXJldHVy biBFWElUX0ZBSUxVUkU7CisJfQorCisJaWYgKGR1bXBfZmlsZSkgeworCQlpZiAoZHVtcF9maWxl WzBdID09ICcvJykgeworCQkJdWludDMyX3QgdG90YWxfbGVuID0KKwkJCQlzaXplb2Yoc3RydWN0 IHJlY29yZGVyX2NvbW1hbmRfYmFzZSkgKyBzdHJsZW4oZHVtcF9maWxlKSArIDE7CisJCQlzdHJ1 Y3QgeworCQkJCXN0cnVjdCByZWNvcmRlcl9jb21tYW5kX2Jhc2UgYmFzZTsKKwkJCQlzdHJ1Y3Qg cmVjb3JkZXJfY29tbWFuZF9kdW1wIGR1bXA7CisJCQl9ICpkYXRhID0gbWFsbG9jKHRvdGFsX2xl bik7CisKKwkJCWRhdGEtPmJhc2UuY29tbWFuZCA9IFJFQ09SREVSX0NPTU1BTkRfRFVNUDsKKwkJ CWRhdGEtPmJhc2Uuc2l6ZSA9IHRvdGFsX2xlbjsKKwkJCXNucHJpbnRmKChjaGFyICopIGRhdGEt PmR1bXAucGF0aCwgc3RybGVuKGR1bXBfZmlsZSkgKyAxLCAiJXMiLCBkdW1wX2ZpbGUpOworCisJ CQlmd3JpdGUoZGF0YSwgdG90YWxfbGVuLCAxLCBjb21tYW5kX2ZpZm9fZmlsZSk7CisJCX0gZWxz ZSB7CisJCQljaGFyICpjd2QgPSBnZXRfY3VycmVudF9kaXJfbmFtZSgpOworCQkJdWludDMyX3Qg cGF0aF9sZW4gPSBzdHJsZW4oY3dkKSArIDEgKyBzdHJsZW4oZHVtcF9maWxlKSArIDE7CisJCQl1 aW50MzJfdCB0b3RhbF9sZW4gPSBzaXplb2Yoc3RydWN0IHJlY29yZGVyX2NvbW1hbmRfYmFzZSkg KyBwYXRoX2xlbjsKKwkJCXN0cnVjdCB7CisJCQkJc3RydWN0IHJlY29yZGVyX2NvbW1hbmRfYmFz ZSBiYXNlOworCQkJCXN0cnVjdCByZWNvcmRlcl9jb21tYW5kX2R1bXAgZHVtcDsKKwkJCX0gKmRh dGEgPSBtYWxsb2ModG90YWxfbGVuKTsKKworCQkJZGF0YS0+YmFzZS5jb21tYW5kID0gUkVDT1JE RVJfQ09NTUFORF9EVU1QOworCQkJZGF0YS0+YmFzZS5zaXplID0gdG90YWxfbGVuOworCQkJc25w cmludGYoKGNoYXIgKikgZGF0YS0+ZHVtcC5wYXRoLCBwYXRoX2xlbiwgIiVzLyVzIiwgY3dkLCBk dW1wX2ZpbGUpOworCisJCQlmd3JpdGUoZGF0YSwgdG90YWxfbGVuLCAxLCBjb21tYW5kX2ZpZm9f ZmlsZSk7CisJCX0KKwl9CisKKwlpZiAocXVpdCkgeworCQlzdHJ1Y3QgcmVjb3JkZXJfY29tbWFu ZF9iYXNlIGJhc2UgPSB7CisJCQkuY29tbWFuZCA9IFJFQ09SREVSX0NPTU1BTkRfUVVJVCwKKwkJ CS5zaXplID0gc2l6ZW9mKGJhc2UpLAorCQl9OworCisJCWZ3cml0ZSgmYmFzZSwgc2l6ZW9mKGJh c2UpLCAxLCBjb21tYW5kX2ZpZm9fZmlsZSk7CisJfQorCisJZmNsb3NlKGNvbW1hbmRfZmlmb19m aWxlKTsKKworCXJldHVybiBFWElUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS90b29scy9pOTE1 LXBlcmYvaTkxNV9wZXJmX3JlY29yZGVyLmMgYi90b29scy9pOTE1LXBlcmYvaTkxNV9wZXJmX3Jl Y29yZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjc2MGNhYmYxCi0t LSAvZGV2L251bGwKKysrIGIvdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9yZWNvcmRlci5jCkBA IC0wLDAgKzEsMTA1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBJbnRlbCBDb3Jwb3Jh dGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdl LCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5k IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFs CisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhv dXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMg b2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh cmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVy bWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJ UyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNT IE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5U SUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9S UyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP UiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF CisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZGly ZW50Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg PGdldG9wdC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2lu Y2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpbnQu aD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0 cmluZy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cisj aW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor CisjaW5jbHVkZSA8aTkxNV9kcm0uaD4KKworI2luY2x1ZGUgImlndF9jb3JlLmgiCisjaW5jbHVk ZSAiaW50ZWxfY2hpcHNldC5oIgorI2luY2x1ZGUgImk5MTUvcGVyZi5oIgorI2luY2x1ZGUgImk5 MTUvcGVyZl9kYXRhLmgiCisKKyNpbmNsdWRlICJpOTE1X3BlcmZfcmVjb3JkZXJfY29tbWFuZHMu aCIKKworI2RlZmluZSBBTElHTih2LCBhKSAoKCh2KSArIChhKS0xKSAmIH4oKGEpLTEpKQorI2Rl ZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpL3NpemVvZigoYXJyKVswXSkpCisjZGVm aW5lIE1BWChhLGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE1JTihhLGIpICgo YSkgPCAoYikgPyAoYSkgOiAoYikpCisKK3N0cnVjdCBjaXJjdWxhcl9idWZmZXIgeworCWNoYXIg ICAqZGF0YTsKKwlzaXplX3QgIGFsbG9jYXRlZF9zaXplOworCXNpemVfdCAgc2l6ZTsKKwlzaXpl X3QgIGJlZ2lucG9zOworCXNpemVfdCAgZW5kcG9zOworfTsKKworc3RydWN0IGNodW5rIHsKKwlj aGFyICpkYXRhOworCXNpemVfdCBsZW47Cit9OworCitzdGF0aWMgc2l6ZV90CitjaXJjdWxhcl9h dmFpbGFibGVfc2l6ZShjb25zdCBzdHJ1Y3QgY2lyY3VsYXJfYnVmZmVyICpidWZmZXIpCit7CisJ YXNzZXJ0KGJ1ZmZlci0+c2l6ZSA8PSBidWZmZXItPmFsbG9jYXRlZF9zaXplKTsKKwlyZXR1cm4g YnVmZmVyLT5hbGxvY2F0ZWRfc2l6ZSAtIGJ1ZmZlci0+c2l6ZTsKK30KKworc3RhdGljIHZvaWQK K2dldF9jaHVua3Moc3RydWN0IGNodW5rICpjaHVua3MsIHN0cnVjdCBjaXJjdWxhcl9idWZmZXIg KmJ1ZmZlciwgYm9vbCB3cml0ZSwgc2l6ZV90IGxlbikKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gd3Jp dGUgPyBidWZmZXItPmVuZHBvcyA6IGJ1ZmZlci0+YmVnaW5wb3M7CisKKwlpZiAod3JpdGUpCisJ CWFzc2VydChjaXJjdWxhcl9hdmFpbGFibGVfc2l6ZShidWZmZXIpID49IGxlbik7CisJZWxzZQor CQlhc3NlcnQoYnVmZmVyLT5zaXplID49IGxlbik7CisKKwljaHVua3NbMF0uZGF0YSA9ICZidWZm ZXItPmRhdGFbb2Zmc2V0XTsKKworCWlmICgob2Zmc2V0ICsgbGVuKSA+IGJ1ZmZlci0+YWxsb2Nh dGVkX3NpemUpIHsKKwkJY2h1bmtzWzBdLmxlbiA9IGJ1ZmZlci0+YWxsb2NhdGVkX3NpemUgLSBv ZmZzZXQ7CisJCWNodW5rc1sxXS5kYXRhID0gYnVmZmVyLT5kYXRhOworCQljaHVua3NbMV0ubGVu ID0gbGVuIC0gKGJ1ZmZlci0+YWxsb2NhdGVkX3NpemUgLSBvZmZzZXQpOworCX0gZWxzZSB7CisJ CWNodW5rc1swXS5sZW4gPSBsZW47CisJCWNodW5rc1sxXS5kYXRhID0gTlVMTDsKKwkJY2h1bmtz WzFdLmxlbiA9IDA7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAorY2lyY3VsYXJfYnVmZmVyX3Jl YWQodm9pZCAqYywgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgY2lyY3VsYXJf YnVmZmVyICpidWZmZXIgPSBjOworCXN0cnVjdCBjaHVuayBjaHVua3NbMl07CisKKwlpZiAoYnVm ZmVyLT5zaXplIDwgc2l6ZSkKKwkJcmV0dXJuIC0xOworCisJZ2V0X2NodW5rcyhjaHVua3MsIGJ1 ZmZlciwgZmFsc2UsIHNpemUpOworCisJbWVtY3B5KGJ1ZiwgY2h1bmtzWzBdLmRhdGEsIGNodW5r c1swXS5sZW4pOworCW1lbWNweShidWYgKyBjaHVua3NbMF0ubGVuLCBjaHVua3NbMV0uZGF0YSwg Y2h1bmtzWzFdLmxlbik7CisJYnVmZmVyLT5iZWdpbnBvcyA9IChidWZmZXItPmJlZ2lucG9zICsg c2l6ZSkgJSBidWZmZXItPmFsbG9jYXRlZF9zaXplOworCWJ1ZmZlci0+c2l6ZSAtPSBzaXplOwor CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzaXplX3QKK3BlZWtfaXRlbV9zaXplKHN0cnVj dCBjaXJjdWxhcl9idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNv cmRfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgY2h1bmsgY2h1bmtzWzJdOworCisJaWYgKCFidWZm ZXItPnNpemUpCisJCXJldHVybiAwOworCisJYXNzZXJ0KGJ1ZmZlci0+c2l6ZSA+PSBzaXplb2Yo aGVhZGVyKSk7CisKKwlnZXRfY2h1bmtzKGNodW5rcywgYnVmZmVyLCBmYWxzZSwgc2l6ZW9mKGhl YWRlcikpOworCW1lbWNweSgmaGVhZGVyLCBjaHVua3NbMF0uZGF0YSwgY2h1bmtzWzBdLmxlbik7 CisJbWVtY3B5KChjaGFyICopICZoZWFkZXIgKyBjaHVua3NbMF0ubGVuLCBjaHVua3NbMV0uZGF0 YSwgY2h1bmtzWzFdLmxlbik7CisKKwlyZXR1cm4gaGVhZGVyLnNpemU7Cit9CisKK3N0YXRpYyB2 b2lkCitjaXJjdWxhcl9zaHJpbmsoc3RydWN0IGNpcmN1bGFyX2J1ZmZlciAqYnVmZmVyLCBzaXpl X3Qgc2l6ZSkKK3sKKwlzaXplX3Qgc2hyYW5rID0gMCwgaXRlbV9zaXplOworCisJYXNzZXJ0KHNp emUgPD0gYnVmZmVyLT5hbGxvY2F0ZWRfc2l6ZSk7CisKKwl3aGlsZSAoc2hyYW5rIDwgc2l6ZSAm JiBidWZmZXItPnNpemUgPiAoaXRlbV9zaXplID0gcGVla19pdGVtX3NpemUoYnVmZmVyKSkpIHsK KwkJYXNzZXJ0KGl0ZW1fc2l6ZSA+IDAgJiYgaXRlbV9zaXplIDw9IGJ1ZmZlci0+YWxsb2NhdGVk X3NpemUpOworCisJCWJ1ZmZlci0+YmVnaW5wb3MgPSAoYnVmZmVyLT5iZWdpbnBvcyArIGl0ZW1f c2l6ZSkgJSBidWZmZXItPmFsbG9jYXRlZF9zaXplOworCQlidWZmZXItPnNpemUgLT0gaXRlbV9z aXplOworCisJCXNocmFuayArPSBpdGVtX3NpemU7CisJfQorfQorCitzdGF0aWMgc3NpemVfdAor Y2lyY3VsYXJfYnVmZmVyX3dyaXRlKHZvaWQgKmMsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IF9z aXplKQoreworCXN0cnVjdCBjaXJjdWxhcl9idWZmZXIgKmJ1ZmZlciA9IGM7CisJc2l6ZV90IHNp emUgPSBfc2l6ZTsKKworCXdoaWxlIChzaXplKSB7CisJCXNpemVfdCBhdmFpbCA9IGNpcmN1bGFy X2F2YWlsYWJsZV9zaXplKGJ1ZmZlciksIGl0ZW1fc2l6ZTsKKwkJc3RydWN0IGNodW5rIGNodW5r c1syXTsKKworCQkvKiBNYWtlIHNwYWNlIGluIHRoZSBidWZmZXIgaWYgdGhlcmUgaXMgdG9vIG11 Y2ggZGF0YS4gKi8KKwkJaWYgKGF2YWlsIDwgc2l6ZSkKKwkJCWNpcmN1bGFyX3NocmluayhidWZm ZXIsIHNpemUgLSBhdmFpbCk7CisKKwkJaXRlbV9zaXplID0gTUlOKGNpcmN1bGFyX2F2YWlsYWJs ZV9zaXplKGJ1ZmZlciksIHNpemUpOworCisJCWdldF9jaHVua3MoY2h1bmtzLCBidWZmZXIsIHRy dWUsIGl0ZW1fc2l6ZSk7CisKKwkJbWVtY3B5KGNodW5rc1swXS5kYXRhLCBidWYsIGNodW5rc1sw XS5sZW4pOworCQltZW1jcHkoY2h1bmtzWzFdLmRhdGEsIGJ1ZiArIGNodW5rc1swXS5sZW4sIGNo dW5rc1sxXS5sZW4pOworCisJCWJ1ZiArPSBpdGVtX3NpemU7CisJCXNpemUgLT0gaXRlbV9zaXpl OworCisJCWJ1ZmZlci0+ZW5kcG9zID0gKGJ1ZmZlci0+ZW5kcG9zICsgaXRlbV9zaXplKSAlIGJ1 ZmZlci0+YWxsb2NhdGVkX3NpemU7CisJCWJ1ZmZlci0+c2l6ZSArPSBpdGVtX3NpemU7CisJfQor CisJcmV0dXJuIF9zaXplOworfQorCitzdGF0aWMgaW50CitjaXJjdWxhcl9idWZmZXJfc2Vlayh2 b2lkICpjLCBvZmY2NF90ICpvZmZzZXQsIGludCB3aGVuY2UpCit7CisJcmV0dXJuIC0xOworfQor CitzdGF0aWMgaW50CitjaXJjdWxhcl9idWZmZXJfY2xvc2Uodm9pZCAqYykKK3sKKwlyZXR1cm4g MDsKK30KKworY29va2llX2lvX2Z1bmN0aW9uc190IGNpcmN1bGFyX2J1ZmZlcl9mdW5jdGlvbnMg PSB7CisJLnJlYWQgID0gY2lyY3VsYXJfYnVmZmVyX3JlYWQsCisJLndyaXRlID0gY2lyY3VsYXJf YnVmZmVyX3dyaXRlLAorCS5zZWVrICA9IGNpcmN1bGFyX2J1ZmZlcl9zZWVrLAorCS5jbG9zZSA9 IGNpcmN1bGFyX2J1ZmZlcl9jbG9zZSwKK307CisKKworc3RhdGljIGJvb2wKK3JlYWRfZmlsZV91 aW50NjQoY29uc3QgY2hhciAqZmlsZSwgdWludDY0X3QgKnZhbHVlKQoreworCWNoYXIgYnVmWzMy XTsKKwlpbnQgZmQsIG47CisKKwlmZCA9IG9wZW4oZmlsZSwgMCk7CisJaWYgKGZkIDwgMCkKKwkJ cmV0dXJuIGZhbHNlOworCW4gPSByZWFkKGZkLCBidWYsIHNpemVvZiAoYnVmKSAtIDEpOworCWNs b3NlKGZkKTsKKwlpZiAobiA8IDApCisJCXJldHVybiBmYWxzZTsKKworCWJ1ZltuXSA9ICdcMCc7 CisJKnZhbHVlID0gc3RydG91bGwoYnVmLCAwLCAwKTsKKworCXJldHVybiB0cnVlOworfQorCitz dGF0aWMgdWludDMyX3QKK3JlYWRfZGV2aWNlX3BhcmFtKGNvbnN0IGNoYXIgKnN0ZW0sIGludCBp ZCwgY29uc3QgY2hhciAqcGFyYW0pCit7CisJY2hhciAqbmFtZTsKKwlpbnQgcmV0ID0gYXNwcmlu dGYoJm5hbWUsICIvc3lzL2NsYXNzL2RybS8lcyV1L2RldmljZS8lcyIsIHN0ZW0sIGlkLCBwYXJh bSk7CisJdWludDY0X3QgdmFsdWU7CisJYm9vbCBzdWNjZXNzOworCisJYXNzZXJ0KHJldCAhPSAt MSk7CisKKwlzdWNjZXNzID0gcmVhZF9maWxlX3VpbnQ2NChuYW1lLCAmdmFsdWUpOworCWZyZWUo bmFtZSk7CisKKwlyZXR1cm4gc3VjY2VzcyA/IHZhbHVlIDogMDsKK30KKworc3RhdGljIGludAor ZmluZF9pbnRlbF9yZW5kZXJfbm9kZSh2b2lkKQoreworCWZvciAoaW50IGkgPSAxMjg7IGkgPCAo MTI4ICsgMTYpOyBpKyspIHsKKwkJaWYgKHJlYWRfZGV2aWNlX3BhcmFtKCJyZW5kZXJEIiwgaSwg InZlbmRvciIpID09IDB4ODA4NikKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30K Kworc3RhdGljIGludAorb3Blbl9yZW5kZXJfbm9kZSh1aW50MzJfdCAqZGV2aWQpCit7CisJY2hh ciAqbmFtZTsKKwlpbnQgcmV0OworCWludCBmZDsKKworCWludCByZW5kZXIgPSBmaW5kX2ludGVs X3JlbmRlcl9ub2RlKCk7CisJaWYgKHJlbmRlciA8IDApCisJCXJldHVybiAtMTsKKworCXJldCA9 IGFzcHJpbnRmKCZuYW1lLCAiL2Rldi9kcmkvcmVuZGVyRCV1IiwgcmVuZGVyKTsKKwlhc3NlcnQo cmV0ICE9IC0xKTsKKworCSpkZXZpZCA9IHJlYWRfZGV2aWNlX3BhcmFtKCJyZW5kZXJEIiwgcmVu ZGVyLCAiZGV2aWNlIik7CisKKwlmZCA9IG9wZW4obmFtZSwgT19SRFdSKTsKKwlmcmVlKG5hbWUp OworCisJcmV0dXJuIGZkOworfQorCitzdGF0aWMgdWludDMyX3QKK29hX2V4cG9uZW50X2Zvcl9w ZXJpb2QodWludDY0X3QgZGV2aWNlX3RpbWVzdGFtcF9mcmVxdWVuY3ksIGRvdWJsZSBwZXJpb2Qp Cit7CisJdWludDY0X3QgcGVyaW9kX25zID0gMTAwMCAqIDEwMDAgKiAxMDAwICogcGVyaW9kOwor CXVpbnQ2NF90IGRldmljZV9wZXJpb2RzWzMyXTsKKworCWZvciAodWludDMyX3QgaSA9IDA7IGkg PCBBUlJBWV9TSVpFKGRldmljZV9wZXJpb2RzKTsgaSsrKQorCQlkZXZpY2VfcGVyaW9kc1tpXSA9 IDEwMDAwMDAwMDB1bGwgKiAoMXUgPDwgaSkgLyBkZXZpY2VfdGltZXN0YW1wX2ZyZXF1ZW5jeTsK KworCWZvciAodWludDMyX3QgaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGRldmljZV9wZXJpb2RzKTsg aSsrKSB7CisJCWlmIChwZXJpb2RfbnMgPj0gZGV2aWNlX3BlcmlvZHNbaSAtIDFdICYmCisJCSAg ICBwZXJpb2RfbnMgPCBkZXZpY2VfcGVyaW9kc1tpXSkgeworCQkJaWYgKChkZXZpY2VfcGVyaW9k c1tpXSAtIHBlcmlvZF9ucykgPgorCQkJICAgIChwZXJpb2RfbnMgLSBkZXZpY2VfcGVyaW9kc1tp IC0gMV0pKQorCQkJCXJldHVybiBpIC0gMTsKKwkJCXJldHVybiBpOworCQl9CisJfQorCisJcmV0 dXJuIC0xOworfQorCitzdGF0aWMgaW50CitwZXJmX2lvY3RsKGludCBmZCwgdW5zaWduZWQgbG9u ZyByZXF1ZXN0LCB2b2lkICphcmcpCit7CisJaW50IHJldDsKKworCWRvIHsKKwkJcmV0ID0gaW9j dGwoZmQsIHJlcXVlc3QsIGFyZyk7CisJfSB3aGlsZSAocmV0ID09IC0xICYmIChlcnJubyA9PSBF SU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1 aW50NjRfdAorZ2V0X2RldmljZV90aW1lc3RhbXBfZnJlcXVlbmN5KGNvbnN0IHN0cnVjdCBpbnRl bF9kZXZpY2VfaW5mbyAqZGV2aW5mbywgaW50IGRybV9mZCkKK3sKKwlkcm1faTkxNV9nZXRwYXJh bV90IGdwOworCWludCB0aW1lc3RhbXBfZnJlcXVlbmN5OworCisJZ3AucGFyYW0gPSBJOTE1X1BB UkFNX0NTX1RJTUVTVEFNUF9GUkVRVUVOQ1k7CisJZ3AudmFsdWUgPSAmdGltZXN0YW1wX2ZyZXF1 ZW5jeTsKKwlpZiAocGVyZl9pb2N0bChkcm1fZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAm Z3ApID09IDApCisJCXJldHVybiB0aW1lc3RhbXBfZnJlcXVlbmN5OworCisJaWYgKGRldmluZm8t PmdlbiA+IDkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcXVlcnkgdGltZXN0YW1w IGZyZXF1ZW5jeSBmcm9tIGk5MTUsIHBsZWFzZSB1cGRhdGUga2VybmVsLlxuIik7CisJCXJldHVy biAwOworCX0KKworCWZwcmludGYoc3RkZXJyLCAiV2FybmluZzogdW5hYmxlIHRvIHF1ZXJ5IHRp bWVzdGFtcCBmcmVxdWVuY3kgZnJvbSBpOTE1LCBndWVzc2luZyB2YWx1ZXMuLi5cbiIpOworCisJ aWYgKGRldmluZm8tPmdlbiA8PSA4KQorCQlyZXR1cm4gMTI1MDAwMDA7CisJaWYgKGRldmluZm8t PmlzX2Jyb3h0b24pCisJCXJldHVybiAxOTIwMDAwMDsKKwlyZXR1cm4gMTIwMDAwMDA7Cit9CisK K3N0cnVjdCByZWNvcmRpbmdfY29udGV4dCB7CisJaW50IGRybV9mZDsKKwlpbnQgcGVyZl9mZDsK KworCXVpbnQzMl90IGRldmlkOworCXVpbnQ2NF90IHRpbWVzdGFtcF9mcmVxdWVuY3k7CisKKwlj b25zdCBzdHJ1Y3QgaW50ZWxfZGV2aWNlX2luZm8gKmRldmluZm87CisKKwlzdHJ1Y3QgZHJtX2k5 MTVfcXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb2xvZ3k7CisJdWludDMyX3QgdG9wb2xvZ3lfc2l6 ZTsKKworCXN0cnVjdCBpbnRlbF9wZXJmICpwZXJmOworCXN0cnVjdCBpbnRlbF9wZXJmX21ldHJp Y19zZXQgKm1ldHJpY19zZXQ7CisKKwl1aW50MzJfdCBvYV9leHBvbmVudDsKKworCXN0cnVjdCBj aXJjdWxhcl9idWZmZXIgY2lyY3VsYXJfYnVmZmVyOworCUZJTEUgKm91dHB1dF9zdHJlYW07CisK Kwljb25zdCBjaGFyICpjb21tYW5kX2ZpZm87CisJaW50IGNvbW1hbmRfZmlmb19mZDsKK307CisK K3N0YXRpYyBpbnQKK3BlcmZfb3BlbihzdHJ1Y3QgcmVjb3JkaW5nX2NvbnRleHQgKmN0eCkKK3sK Kwl1aW50NjRfdCBwcm9wZXJ0aWVzW0RSTV9JOTE1X1BFUkZfUFJPUF9NQVggKiAyXTsKKwlzdHJ1 Y3QgZHJtX2k5MTVfcGVyZl9vcGVuX3BhcmFtIHBhcmFtOworCWludCBwID0gMCwgc3RyZWFtX2Zk OworCisJcHJvcGVydGllc1twKytdID0gRFJNX0k5MTVfUEVSRl9QUk9QX1NBTVBMRV9PQTsKKwlw cm9wZXJ0aWVzW3ArK10gPSB0cnVlOworCisJcHJvcGVydGllc1twKytdID0gRFJNX0k5MTVfUEVS Rl9QUk9QX09BX01FVFJJQ1NfU0VUOworCXByb3BlcnRpZXNbcCsrXSA9IGN0eC0+bWV0cmljX3Nl dC0+cGVyZl9vYV9tZXRyaWNzX3NldDsKKworCXByb3BlcnRpZXNbcCsrXSA9IERSTV9JOTE1X1BF UkZfUFJPUF9PQV9GT1JNQVQ7CisJcHJvcGVydGllc1twKytdID0gY3R4LT5tZXRyaWNfc2V0LT5w ZXJmX29hX2Zvcm1hdDsKKworCXByb3BlcnRpZXNbcCsrXSA9IERSTV9JOTE1X1BFUkZfUFJPUF9P QV9FWFBPTkVOVDsKKwlwcm9wZXJ0aWVzW3ArK10gPSBjdHgtPm9hX2V4cG9uZW50OworCisJbWVt c2V0KCZwYXJhbSwgMCwgc2l6ZW9mKHBhcmFtKSk7CisJcGFyYW0uZmxhZ3MgPSAwOworCXBhcmFt LmZsYWdzIHw9IEk5MTVfUEVSRl9GTEFHX0ZEX0NMT0VYRUMgfCBJOTE1X1BFUkZfRkxBR19GRF9O T05CTE9DSzsKKwlwYXJhbS5wcm9wZXJ0aWVzX3B0ciA9ICh1aW50cHRyX3QpcHJvcGVydGllczsK KwlwYXJhbS5udW1fcHJvcGVydGllcyA9IHAgLyAyOworCisJc3RyZWFtX2ZkID0gcGVyZl9pb2N0 bChjdHgtPmRybV9mZCwgRFJNX0lPQ1RMX0k5MTVfUEVSRl9PUEVOLCAmcGFyYW0pOworCXJldHVy biBzdHJlYW1fZmQ7Cit9CisKK3N0YXRpYyBib29sIHF1aXQgPSBmYWxzZTsKKworc3RhdGljIHZv aWQKK3NpZ2ludF9oYW5kbGVyKGludCB2YWwpCit7CisJcXVpdCA9IHRydWU7Cit9CisKK3N0YXRp YyBib29sCit3cml0ZV92ZXJzaW9uKEZJTEUgKm91dHB1dCwgc3RydWN0IHJlY29yZGluZ19jb250 ZXh0ICpjdHgpCit7CisJc3RydWN0IGludGVsX3BlcmZfcmVjb3JkX3ZlcnNpb24gdmVyc2lvbiA9 IHsKKwkJLnZlcnNpb24gPSBJTlRFTF9QRVJGX1JFQ09SRF9WRVJTSU9OLAorCX07CisJc3RydWN0 IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciBoZWFkZXIgPSB7CisJCS50eXBlID0gSU5URUxf UEVSRl9SRUNPUkRfVFlQRV9WRVJTSU9OLAorCQkuc2l6ZSA9IHNpemVvZihoZWFkZXIpICsgc2l6 ZW9mKHZlcnNpb24pLAorCX07CisKKwlpZiAoZndyaXRlKCZoZWFkZXIsIHNpemVvZihoZWFkZXIp LCAxLCBvdXRwdXQpICE9IDEpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChmd3JpdGUoJnZlcnNp b24sIHNpemVvZih2ZXJzaW9uKSwgMSwgb3V0cHV0KSAhPSAxKQorCQlyZXR1cm4gZmFsc2U7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3dyaXRlX2hlYWRlcihGSUxFICpvdXRw dXQsIHN0cnVjdCByZWNvcmRpbmdfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBpbnRlbF9wZXJm X3JlY29yZF9kZXZpY2VfaW5mbyBpbmZvID0geworCQkudGltZXN0YW1wX2ZyZXF1ZW5jeSA9IGN0 eC0+dGltZXN0YW1wX2ZyZXF1ZW5jeSwKKwkJLmRldmljZV9pZCA9IGN0eC0+cGVyZi0+ZGV2aW5m by5kZXZpZCwKKwkJLmRldmljZV9yZXZpc2lvbiA9IGN0eC0+cGVyZi0+ZGV2aW5mby5yZXZpc2lv biwKKwkJLmd0X21pbl9mcmVxdWVuY3kgPSBjdHgtPnBlcmYtPmRldmluZm8uZ3RfbWluX2ZyZXEs CisJCS5ndF9tYXhfZnJlcXVlbmN5ID0gY3R4LT5wZXJmLT5kZXZpbmZvLmd0X21heF9mcmVxLAor CQkub2FfZm9ybWF0ID0gY3R4LT5tZXRyaWNfc2V0LT5wZXJmX29hX2Zvcm1hdCwKKwkJLmVuZ2lu ZV9jbGFzcyA9IEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwKKwkJLmVuZ2luZV9pbnN0YW5jZSA9 IDAsCisJfTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyIGhlYWRlciA9IHsK KwkJLnR5cGUgPSBJTlRFTF9QRVJGX1JFQ09SRF9UWVBFX0RFVklDRV9JTkZPLAorCQkuc2l6ZSA9 IHNpemVvZihoZWFkZXIpICsgc2l6ZW9mKGluZm8pLAorCX07CisKKwlzbnByaW50ZihpbmZvLm1l dHJpY19zZXRfbmFtZSwgc2l6ZW9mKGluZm8ubWV0cmljX3NldF9uYW1lKSwKKwkJICIlcyIsIGN0 eC0+bWV0cmljX3NldC0+c3ltYm9sX25hbWUpOworCXNucHJpbnRmKGluZm8ubWV0cmljX3NldF91 dWlkLCBzaXplb2YoaW5mby5tZXRyaWNfc2V0X3V1aWQpLAorCQkgIiVzIiwgY3R4LT5tZXRyaWNf c2V0LT5od19jb25maWdfZ3VpZCk7CisKKwlpZiAoZndyaXRlKCZoZWFkZXIsIHNpemVvZihoZWFk ZXIpLCAxLCBvdXRwdXQpICE9IDEpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChmd3JpdGUoJmlu Zm8sIHNpemVvZihpbmZvKSwgMSwgb3V0cHV0KSAhPSAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwly ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBkcm1faTkxNV9xdWVyeV90b3BvbG9neV9p bmZvICoKK2dldF90b3BvbG9neShpbnQgZHJtX2ZkLCB1aW50MzJfdCAqdG9wb2xvZ3lfc2l6ZSkK K3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkgcXVlcnkgPSB7fTsKKwlzdHJ1Y3QgZHJtX2k5MTVf cXVlcnlfdG9wb2xvZ3lfaW5mbyAqdG9wb19pbmZvOworCXN0cnVjdCBkcm1faTkxNV9xdWVyeV9p dGVtIGl0ZW0gPSB7CisJCS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX1RPUE9MT0dZX0lORk8s CisJfTsKKwlpbnQgcmV0OworCisJcXVlcnkubnVtX2l0ZW1zID0gMTsKKwlxdWVyeS5pdGVtc19w dHIgPSAodWludHB0cl90KSAmaXRlbTsKKworCS8qIE1heWJlIG5vdCBiZSBhdmFpbGFibGUgb24g b2xkZXIga2VybmVscy4gKi8KKwlyZXQgPSBwZXJmX2lvY3RsKGRybV9mZCwgRFJNX0lPQ1RMX0k5 MTVfUVVFUlksICZxdWVyeSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiBOVUxMOworCisJYXNz ZXJ0KGl0ZW0ubGVuZ3RoID4gMCk7CisJKnRvcG9sb2d5X3NpemUgPSBpdGVtLmxlbmd0aDsKKwl0 b3BvX2luZm8gPSBtYWxsb2MoaXRlbS5sZW5ndGgpOworCWl0ZW0uZGF0YV9wdHIgPSAodWludHB0 cl90KSB0b3BvX2luZm87CisKKwlyZXQgPSBwZXJmX2lvY3RsKGRybV9mZCwgRFJNX0lPQ1RMX0k5 MTVfUVVFUlksICZxdWVyeSk7CisJYXNzZXJ0KHJldCA9PSAwKTsKKworCXJldHVybiB0b3BvX2lu Zm87Cit9CisKK3N0YXRpYyBib29sCit3cml0ZV90b3BvbG9neShGSUxFICpvdXRwdXQsIHN0cnVj dCByZWNvcmRpbmdfY29udGV4dCAqY3R4KQoreworCXN0cnVjdCBkcm1faTkxNV9wZXJmX3JlY29y ZF9oZWFkZXIgaGVhZGVyID0geworCQkudHlwZSA9IElOVEVMX1BFUkZfUkVDT1JEX1RZUEVfREVW SUNFX1RPUE9MT0dZLAorCX07CisJY2hhciBwYWRbOF0gPSB7IDAsIH07CisKKwloZWFkZXIuc2l6 ZSA9IHNpemVvZihoZWFkZXIpICsgY3R4LT50b3BvbG9neV9zaXplOworCWlmIChmd3JpdGUoJmhl YWRlciwgc2l6ZW9mKGhlYWRlciksIDEsIG91dHB1dCkgIT0gMSkKKwkJcmV0dXJuIGZhbHNlOwor CisJaWYgKGZ3cml0ZShjdHgtPnRvcG9sb2d5LCBjdHgtPnRvcG9sb2d5X3NpemUsIDEsIG91dHB1 dCkgIT0gMSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogQWxpZ24gdGhlIHNpemUgdG8gYWxpZ24g YWxsIG90aGVyIHBhY2tldHMgdG8gOCBieXRlcy4gKi8KKwlpZiAoY3R4LT50b3BvbG9neV9zaXpl ICUgOCkgeworCQlpZiAoZndyaXRlKHBhZCwgY3R4LT50b3BvbG9neV9zaXplICUgOCwgMSwgb3V0 cHV0KSAhPSAxKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitz dGF0aWMgYm9vbAord3JpdGVfaTkxNV9wZXJmX2RhdGEoRklMRSAqb3V0cHV0LCBpbnQgcGVyZl9m ZCkKK3sKKwlzc2l6ZV90IHJldDsKKwljaGFyIGRhdGFbNDA5Nl07CisKKwl3aGlsZSAoKHJldCA9 IHJlYWQocGVyZl9mZCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkgPiAwIHx8CisJICAgICAgIGVycm5v ID09IEVJTlRSKSB7CisJCWlmIChmd3JpdGUoZGF0YSwgcmV0LCAxLCBvdXRwdXQpICE9IDEpCisJ CQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB1aW50NjRf dCB0aW1lc3BlY19kaWZmKHN0cnVjdCB0aW1lc3BlYyAqYmVnaW4sCisJCQkgICAgICBzdHJ1Y3Qg dGltZXNwZWMgKmVuZCkKK3sKKwlyZXR1cm4gMTAwMDAwMDAwMHVsbCAqIChlbmQtPnR2X3NlYyAt IGJlZ2luLT50dl9zZWMpICsgZW5kLT50dl9uc2VjIC0gYmVnaW4tPnR2X25zZWM7Cit9CisKK3N0 YXRpYyBjbG9ja190IGNvcnJlbGF0aW9uX2Nsb2NrX2lkID0gQ0xPQ0tfTU9OT1RPTklDOworCitz dGF0aWMgYm9vbAorZ2V0X2NvcnJlbGF0aW9uX3RpbWVzdGFtcHMoc3RydWN0IGludGVsX3BlcmZf cmVjb3JkX3RpbWVzdGFtcF9jb3JyZWxhdGlvbiAqY29yciwgaW50IGRybV9mZCkKK3sKKwlzdHJ1 Y3QgZHJtX2k5MTVfcmVnX3JlYWQgcmVnX3JlYWQ7CisJc3RydWN0IHsKKwkJc3RydWN0IHRpbWVz cGVjIGNwdV90c19iZWdpbjsKKwkJc3RydWN0IHRpbWVzcGVjIGNwdV90c19lbmQ7CisJCXVpbnQ2 NF90IGdwdV90czsKKwl9IGF0dGVtcHRzWzNdOworCXVpbnQzMl90IGJlc3QgPSAwOworCisjZGVm aW5lIFJFTkRFUl9SSU5HX1RJTUVTVEFNUCAweDIzNTgKKworICAgICAgICByZWdfcmVhZC5vZmZz ZXQgPSBSRU5ERVJfUklOR19USU1FU1RBTVAgfCBJOTE1X1JFR19SRUFEXzhCX1dBOworCisJLyog R2F0aGVyIDMgY29ycmVsYXRpb25zLiAqLworCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBBUlJB WV9TSVpFKGF0dGVtcHRzKTsgaSsrKSB7CisJCWNsb2NrX2dldHRpbWUoY29ycmVsYXRpb25fY2xv Y2tfaWQsICZhdHRlbXB0c1tpXS5jcHVfdHNfYmVnaW4pOworCQlpZiAocGVyZl9pb2N0bChkcm1f ZmQsIERSTV9JT0NUTF9JOTE1X1JFR19SRUFELCAmcmVnX3JlYWQpIDwgMCkKKwkJCXJldHVybiBm YWxzZTsKKwkJY2xvY2tfZ2V0dGltZShjb3JyZWxhdGlvbl9jbG9ja19pZCwgJmF0dGVtcHRzW2ld LmNwdV90c19lbmQpOworCisJCWF0dGVtcHRzW2ldLmdwdV90cyA9IHJlZ19yZWFkLnZhbDsKKwl9 CisKKwkvKiBOb3cgc2VsZWN0IHRoZSBiZXN0LiAqLworCWZvciAodWludDMyX3QgaSA9IDE7IGkg PCBBUlJBWV9TSVpFKGF0dGVtcHRzKTsgaSsrKSB7CisJCWlmICh0aW1lc3BlY19kaWZmKCZhdHRl bXB0c1tpXS5jcHVfdHNfYmVnaW4sCisJCQkJICAmYXR0ZW1wdHNbaV0uY3B1X3RzX2VuZCkgPAor CQkgICAgdGltZXNwZWNfZGlmZigmYXR0ZW1wdHNbYmVzdF0uY3B1X3RzX2JlZ2luLAorCQkJCSAg JmF0dGVtcHRzW2Jlc3RdLmNwdV90c19lbmQpKQorCQkJYmVzdCA9IGk7CisJfQorCisJY29yci0+ Y3B1X3RpbWVzdGFtcCA9CisJCShhdHRlbXB0c1tiZXN0XS5jcHVfdHNfYmVnaW4udHZfc2VjICog MTAwMDAwMDAwMHVsbCArCisJCSBhdHRlbXB0c1tiZXN0XS5jcHVfdHNfYmVnaW4udHZfbnNlYykg KworCQl0aW1lc3BlY19kaWZmKCZhdHRlbXB0c1tiZXN0XS5jcHVfdHNfYmVnaW4sCisJCQkgICAg ICAmYXR0ZW1wdHNbYmVzdF0uY3B1X3RzX2VuZCkgLyAyOworCWNvcnItPmdwdV90aW1lc3RhbXAg PSBhdHRlbXB0c1tiZXN0XS5ncHVfdHM7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv b2wKK3dyaXRlX3NhdmVkX2NvcnJlbGF0aW9uX3RpbWVzdGFtcHMoRklMRSAqb3V0cHV0LAorCQkJ CSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9wZXJmX3JlY29yZF90aW1lc3RhbXBfY29ycmVsYXRpb24g KmNvcnIpCit7CisJc3RydWN0IGRybV9pOTE1X3BlcmZfcmVjb3JkX2hlYWRlciBoZWFkZXIgPSB7 CisJCS50eXBlID0gSU5URUxfUEVSRl9SRUNPUkRfVFlQRV9USU1FU1RBTVBfQ09SUkVMQVRJT04s CisJCS5zaXplID0gc2l6ZW9mKGhlYWRlcikgKyBzaXplb2YoKmNvcnIpLAorCX07CisKKwlpZiAo ZndyaXRlKCZoZWFkZXIsIHNpemVvZihoZWFkZXIpLCAxLCBvdXRwdXQpICE9IDEpCisJCXJldHVy biBmYWxzZTsKKworCWlmIChmd3JpdGUoY29yciwgc2l6ZW9mKCpjb3JyKSwgMSwgb3V0cHV0KSAh PSAxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wK K3dyaXRlX2NvcnJlbGF0aW9uX3RpbWVzdGFtcHMoRklMRSAqb3V0cHV0LCBpbnQgZHJtX2ZkKQor eworCXN0cnVjdCBpbnRlbF9wZXJmX3JlY29yZF90aW1lc3RhbXBfY29ycmVsYXRpb24gY29ycjsK KworCWlmICghZ2V0X2NvcnJlbGF0aW9uX3RpbWVzdGFtcHMoJmNvcnIsIGRybV9mZCkpCisJCXJl dHVybiBmYWxzZTsKKworCXJldHVybiB3cml0ZV9zYXZlZF9jb3JyZWxhdGlvbl90aW1lc3RhbXBz KG91dHB1dCwgJmNvcnIpOworfQorCitzdGF0aWMgdm9pZAorcmVhZF9jb21tYW5kX2ZpbGUoc3Ry dWN0IHJlY29yZGluZ19jb250ZXh0ICpjdHgpCit7CisJc3RydWN0IHJlY29yZGVyX2NvbW1hbmRf YmFzZSBoZWFkZXI7CisJc3NpemVfdCByZXQgPSByZWFkKGN0eC0+Y29tbWFuZF9maWZvX2ZkLCAm aGVhZGVyLCBzaXplb2YoaGVhZGVyKSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuOworCisJ c3dpdGNoIChoZWFkZXIuY29tbWFuZCkgeworCWNhc2UgUkVDT1JERVJfQ09NTUFORF9EVU1QOiB7 CisJCXVpbnQzMl90IGxlbiA9IGhlYWRlci5zaXplIC0gc2l6ZW9mKGhlYWRlciksIG9mZnNldCA9 IDA7CisJCXN0cnVjdCByZWNvcmRlcl9jb21tYW5kX2R1bXAgKmR1bXAgPSBtYWxsb2MobGVuKTsK KwkJRklMRSAqZmlsZTsKKworCQl3aGlsZSAob2Zmc2V0IDwgbGVuICYmCisJCSAgICAgICAoKHJl dCA9IHJlYWQoY3R4LT5jb21tYW5kX2ZpZm9fZmQsCisJCQkJICAgICh2b2lkICopIGR1bXAgKyBv ZmZzZXQsIGxlbiAtIG9mZnNldCkpID4gMAorCQkJfHwgZXJybm8gPT0gRUFHQUlOKSkgeworCQkJ aWYgKHJldCA+IDApCisJCQkJb2Zmc2V0ICs9IHJldDsKKwkJfQorCisJCWZwcmludGYoc3Rkb3V0 LCAiV3JpdGluZyBjaXJjdWxhciBidWZmZXIgdG8gJXNcbiIsIGR1bXAtPnBhdGgpOworCisJCWZp bGUgPSBmb3BlbigoY29uc3QgY2hhciAqKSBkdW1wLT5wYXRoLCAidysiKTsKKwkJaWYgKGZpbGUp IHsKKwkJCXN0cnVjdCBjaHVuayBjaHVua3NbMl07CisKKwkJCWZmbHVzaChjdHgtPm91dHB1dF9z dHJlYW0pOworCQkJZ2V0X2NodW5rcyhjaHVua3MsICZjdHgtPmNpcmN1bGFyX2J1ZmZlciwKKwkJ CQkgICBmYWxzZSwgY3R4LT5jaXJjdWxhcl9idWZmZXIuc2l6ZSk7CisKKwkJCWlmICghd3JpdGVf dmVyc2lvbihmaWxlLCBjdHgpIHx8CisJCQkgICAgIXdyaXRlX2hlYWRlcihmaWxlLCBjdHgpIHx8 CisJCQkgICAgIXdyaXRlX3RvcG9sb2d5KGZpbGUsIGN0eCkgfHwKKwkJCSAgICBmd3JpdGUoY2h1 bmtzWzBdLmRhdGEsIGNodW5rc1swXS5sZW4sIDEsIGZpbGUpICE9IDEgfHwKKwkJCSAgICAoY2h1 bmtzWzFdLmxlbiA+IDAgJiYKKwkJCSAgICAgZndyaXRlKGNodW5rc1sxXS5kYXRhLCBjaHVua3Nb MV0ubGVuLCAxLCBmaWxlKSAhPSAxKSB8fAorCQkJICAgICF3cml0ZV9jb3JyZWxhdGlvbl90aW1l c3RhbXBzKGZpbGUsIGN0eC0+ZHJtX2ZkKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxl IHRvIHdyaXRlIGNpcmN1bGFyIGJ1ZmZlciBkYXRhIGluIGZpbGUgJyVzJ1xuIiwKKwkJCQkJZHVt cC0+cGF0aCk7CisJCQl9CisJCQlmY2xvc2UoZmlsZSk7CisJCX0gZWxzZQorCQkJZnByaW50Zihz dGRlcnIsICJVbmFibGUgdG8gd3JpdGUgZHVtcCBmaWxlICclcydcbiIsIGR1bXAtPnBhdGgpOwor CisJCWZyZWUoZHVtcCk7CisJCWJyZWFrOworCX0KKwljYXNlIFJFQ09SREVSX0NPTU1BTkRfUVVJ VDoKKwkJcXVpdCA9IHRydWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoc3RkZXJy LCAiVW5rbm93biBjb21tYW5kIDB4JXhcbiIsIGhlYWRlci5jb21tYW5kKTsKKwkJYnJlYWs7CisJ fQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfbWV0cmljX3NldHMoY29uc3Qgc3RydWN0IGludGVs X3BlcmYgKnBlcmYpCit7CisJc3RydWN0IGludGVsX3BlcmZfbWV0cmljX3NldCAqbWV0cmljX3Nl dDsKKwl1aW50MzJfdCBsb25nZXN0X25hbWUgPSAwOworCisJaWd0X2xpc3RfZm9yX2VhY2hfZW50 cnkobWV0cmljX3NldCwgJnBlcmYtPm1ldHJpY19zZXRzLCBsaW5rKSB7CisJCWxvbmdlc3RfbmFt ZSA9IE1BWChsb25nZXN0X25hbWUsIHN0cmxlbihtZXRyaWNfc2V0LT5zeW1ib2xfbmFtZSkpOwor CX0KKworCWlndF9saXN0X2Zvcl9lYWNoX2VudHJ5KG1ldHJpY19zZXQsICZwZXJmLT5tZXRyaWNf c2V0cywgbGluaykgeworCQlmcHJpbnRmKHN0ZG91dCwgIiVzOiUqcyVzXG4iLAorCQkJbWV0cmlj X3NldC0+c3ltYm9sX25hbWUsCisJCQkoaW50KSAobG9uZ2VzdF9uYW1lIC0gc3RybGVuKG1ldHJp Y19zZXQtPnN5bWJvbF9uYW1lKSArIDEpLCAiICIsCisJCQltZXRyaWNfc2V0LT5uYW1lKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9tZXRyaWNfc2V0X2NvdW50ZXJzKGNvbnN0IHN0cnVj dCBpbnRlbF9wZXJmX21ldHJpY19zZXQgKm1ldHJpY19zZXQpCit7CisJdWludDMyX3QgbG9uZ2Vz dF9uYW1lID0gMDsKKworCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtZXRyaWNfc2V0LT5uX2Nv dW50ZXJzOyBpKyspIHsKKwkJbG9uZ2VzdF9uYW1lID0gTUFYKGxvbmdlc3RfbmFtZSwgc3RybGVu KG1ldHJpY19zZXQtPmNvdW50ZXJzW2ldLm5hbWUpKTsKKwl9CisKKwlmcHJpbnRmKHN0ZG91dCwg IiVzICglcyk6XG4iLCBtZXRyaWNfc2V0LT5zeW1ib2xfbmFtZSwgbWV0cmljX3NldC0+bmFtZSk7 CisJZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG1ldHJpY19zZXQtPm5fY291bnRlcnM7IGkrKykg eworCQlzdHJ1Y3QgaW50ZWxfcGVyZl9sb2dpY2FsX2NvdW50ZXIgKmNvdW50ZXIgPSAmbWV0cmlj X3NldC0+Y291bnRlcnNbaV07CisKKwkJZnByaW50ZihzdGRvdXQsICIgICVzOiUqcyVzXG4iLAor CQkJY291bnRlci0+bmFtZSwKKwkJCShpbnQpKGxvbmdlc3RfbmFtZSAtIHN0cmxlbihjb3VudGVy LT5uYW1lKSArIDEpLCAiICIsCisJCQljb3VudGVyLT5kZXNjKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkCitwcmludF9tZXRyaWNfc2V0c19jb3VudGVycyhzdHJ1Y3QgaW50ZWxfcGVyZiAqcGVyZikK K3sKKwlzdHJ1Y3QgaW50ZWxfcGVyZl9tZXRyaWNfc2V0ICptZXRyaWNfc2V0OworCisJaWd0X2xp c3RfZm9yX2VhY2hfZW50cnkobWV0cmljX3NldCwgJnBlcmYtPm1ldHJpY19zZXRzLCBsaW5rKQor CQlwcmludF9tZXRyaWNfc2V0X2NvdW50ZXJzKG1ldHJpY19zZXQpOworfQorCitzdGF0aWMgdm9p ZAordXNhZ2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlmcHJpbnRmKHN0ZG91dCwKKwkJIlVzYWdl OiAlcyBbb3B0aW9uc11cbiIKKwkJIlJlY29yZGluZyB0b29sIGZvciBpOTE1LXBlcmYuXG4iCisJ CSJcbiIKKwkJIiAgICAgLS1oZWxwLCAgICAgICAgICAgICAgIC1oICAgICAgICAgIFByaW50IHRo aXMgc2NyZWVuXG4iCisJCSIgICAgIC0tY29ycmVsYXRpb24tcGVyaW9kLCAtYyA8dmFsdWU+ICBU aW1lIHBlcmlvZCBvZiB0aW1lc3RhbXAgY29ycmVsYXRpb24gaW4gc2Vjb25kc1xuIgorCQkiICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgPSAxLjApXG4iCisJ CSIgICAgIC0tcGVyZi1wZXJpb2QsICAgICAgICAtcCA8dmFsdWU+ICBUaW1lIHBlcmlvZCBvZiBp OTE1LXBlcmYgcmVwb3J0cyBpbiBzZWNvbmRzXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZGVmYXVsdCA9IDAuMDAxKVxuIgorCQkiICAgICAtLW1ldHJpYywg ICAgICAgICAgICAgLW0gPHZhbHVlPiAgaTkxNSBtZXRyaWMgdG8gc2FtcGxlIHdpdGggKHVzZSB2 YWx1ZT1saXN0IHRvIGxpc3QgYWxsIG1ldHJpY3MpXG4iCisJCSIgICAgIC0tY291bnRlcnMsICAg ICAgICAgICAtQyAgICAgICAgICBMaXN0IGNvdW50ZXJzIGZvciBhIGdpdmVuIG1ldHJpYyBhbmQg ZXhpdFxuIgorCQkiICAgICAtLXNpemUsICAgICAgICAgICAgICAgLXMgPHZhbHVlPiAgU2l6ZSBv ZiBjaXJjdWxhciBidWZmZXIgdG8gdXNlIGluIGtpbG9ieXRlc1xuIgorCQkiICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgc3BlY2lmaWVkLCBhIG1heGltdW0gYW1vdW50 IG9mIDx2YWx1ZT4gZGF0YSB3aWxsXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBiZSByZWNvcmRlZC5cbiIKKwkJIiAgICAgLS1jb21tYW5kLWZpZm8sICAgICAg IC1mIDxwYXRoPiAgIFBhdGggdG8gYSBjb21tYW5kIGZpZm8sIGltcGxpZXMgY2lyY3VsYXIgYnVm ZmVyXG4iCisJCSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVG8gdXNl IHdpdGggaTkxNS1wZXJmLWNvbnRyb2wpXG4iCisJCSIgICAgIC0tb3V0cHV0LCAgICAgICAgICAg ICAtbyA8cGF0aD4gICBPdXRwdXQgZmlsZSAoZGVmYXVsdCA9IGk5MTVfcGVyZi5yZWNvcmQpXG4i CisJCSIgICAgIC0tY3B1LWNsb2NrLCAgICAgICAgICAtayA8cGF0aD4gICBDcHUgY2xvY2sgdG8g dXNlIGZvciBjb3JyZWxhdGlvbnNcbiIKKwkJIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZhbHVlczogYm9vdCwgbW9ubywgbW9ub19yYXcgKGRlZmF1bHQgPSBtb25vKVxu IiwKKwkJbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkCit0ZWFyZG93bl9yZWNvcmRpbmdfY29udGV4 dChzdHJ1Y3QgcmVjb3JkaW5nX2NvbnRleHQgKmN0eCkKK3sKKwlpZiAoY3R4LT50b3BvbG9neSkK KwkJZnJlZShjdHgtPnRvcG9sb2d5KTsKKworCWlmIChjdHgtPnBlcmYpCisJCWludGVsX3BlcmZf ZnJlZShjdHgtPnBlcmYpOworCisJaWYgKGN0eC0+Y29tbWFuZF9maWZvKQorCQl1bmxpbmsoY3R4 LT5jb21tYW5kX2ZpZm8pOworCWlmIChjdHgtPmNvbW1hbmRfZmlmb19mZCAhPSAtMSkKKwkJY2xv c2UoY3R4LT5jb21tYW5kX2ZpZm9fZmQpOworCisJaWYgKGN0eC0+b3V0cHV0X3N0cmVhbSkKKwkJ ZmNsb3NlKGN0eC0+b3V0cHV0X3N0cmVhbSk7CisKKwlmcmVlKGN0eC0+Y2lyY3VsYXJfYnVmZmVy LmRhdGEpOworCisJaWYgKGN0eC0+cGVyZl9mZCAhPSAtMSkKKwkJY2xvc2UoY3R4LT5wZXJmX2Zk KTsKKwlpZiAoY3R4LT5kcm1fZmQgIT0gLTEpCisJCWNsb3NlKGN0eC0+ZHJtX2ZkKTsKK30KKwor aW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3Qgc3RydWN0IG9wdGlv biBsb25nX29wdGlvbnNbXSA9IHsKKwkJeyJoZWxwIiwgICAgICAgICAgICAgICAgICAgICAgIG5v X2FyZ3VtZW50LCAwLCAnaCd9LAorCQl7ImNvcnJlbGF0aW9uLXBlcmlvZCIsICAgcmVxdWlyZWRf YXJndW1lbnQsIDAsICdjJ30sCisJCXsicGVyZi1wZXJpb2QiLCAgICAgICAgICByZXF1aXJlZF9h cmd1bWVudCwgMCwgJ3AnfSwKKwkJeyJtZXRyaWMiLCAgICAgICAgICAgICAgIHJlcXVpcmVkX2Fy Z3VtZW50LCAwLCAnbSd9LAorCQl7ImNvdW50ZXJzIiwgICAgICAgICAgICAgICAgICAgbm9fYXJn dW1lbnQsIDAsICdDJ30sCisJCXsib3V0cHV0IiwgICAgICAgICAgICAgICByZXF1aXJlZF9hcmd1 bWVudCwgMCwgJ28nfSwKKwkJeyJzaXplIiwgICAgICAgICAgICAgICAgIHJlcXVpcmVkX2FyZ3Vt ZW50LCAwLCAncyd9LAorCQl7ImNvbW1hbmQtZmlmbyIsICAgICAgICAgcmVxdWlyZWRfYXJndW1l bnQsIDAsICdmJ30sCisJCXsiY3B1LWNsb2NrIiwgICAgICAgICAgICByZXF1aXJlZF9hcmd1bWVu dCwgMCwgJ2snfSwKKwkJezAsIDAsIDAsIDB9CisJfTsKKwljb25zdCBzdHJ1Y3QgeworCQljbG9j a190IGlkOworCQljb25zdCBjaGFyICpuYW1lOworCX0gY2xvY2tfbmFtZXNbXSA9IHsKKwkJeyBD TE9DS19CT09UVElNRSwgICAgICAiYm9vdCIgfSwKKwkJeyBDTE9DS19NT05PVE9OSUMsICAgICAi bW9ubyIgfSwKKwkJeyBDTE9DS19NT05PVE9OSUNfUkFXLCAibW9ub19yYXciIH0sCisJfTsKKwlk b3VibGUgY29ycl9wZXJpb2QgPSAxLjAsIHBlcmZfcGVyaW9kID0gMC4wMDE7CisJY29uc3QgY2hh ciAqbWV0cmljX25hbWUgPSBOVUxMLCAqb3V0cHV0X2ZpbGUgPSAiaTkxNV9wZXJmLnJlY29yZCI7 CisJc3RydWN0IGludGVsX3BlcmZfbWV0cmljX3NldCAqbWV0cmljX3NldDsKKwlzdHJ1Y3QgaW50 ZWxfcGVyZl9yZWNvcmRfdGltZXN0YW1wX2NvcnJlbGF0aW9uIGluaXRpYWxfY29ycmVsYXRpb247 CisJc3RydWN0IHRpbWVzcGVjIG5vdzsKKwl1aW50NjRfdCBjb3JyX3BlcmlvZF9ucywgcG9sbF90 aW1lX25zOworCXVpbnQzMl90IGNpcmN1bGFyX3NpemUgPSAwOworCWludCBvcHQ7CisJYm9vbCBs aXN0X2NvdW50ZXJzID0gZmFsc2U7CisJRklMRSAqb3V0cHV0ID0gTlVMTDsKKwlzdHJ1Y3QgcmVj b3JkaW5nX2NvbnRleHQgY3R4ID0geworCQkuZHJtX2ZkID0gLTEsCisJCS5wZXJmX2ZkID0gLTEs CisKKwkJLmNvbW1hbmRfZmlmbyA9IEk5MTVfUEVSRl9SRUNPUkRfRklGT19QQVRILAorCQkuY29t bWFuZF9maWZvX2ZkID0gLTEsCisJfTsKKworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgImhjOnA6bTpDbzpzOmY6azoiLCBsb25nX29wdGlvbnMsIE5VTEwpKSAhPSAtMSkg eworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICdoJzoKKwkJCXVzYWdlKGFyZ3ZbMF0pOworCQkJ cmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwkJY2FzZSAnYyc6CisJCQljb3JyX3BlcmlvZCA9IGF0b2Yo b3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdwJzoKKwkJCXBlcmZfcGVyaW9kID0gYXRvZihv cHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ20nOgorCQkJbWV0cmljX25hbWUgPSBvcHRhcmc7 CisJCQlicmVhazsKKwkJY2FzZSAnQyc6CisJCQlsaXN0X2NvdW50ZXJzID0gdHJ1ZTsKKwkJCWJy ZWFrOworCQljYXNlICdvJzoKKwkJCW91dHB1dF9maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJ CWNhc2UgJ3MnOgorCQkJY2lyY3VsYXJfc2l6ZSA9IE1BWCg4LCBhdG9pKG9wdGFyZykpICogMTAy NDsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWN0eC5jb21tYW5kX2ZpZm8gPSBvcHRhcmc7 CisJCQljaXJjdWxhcl9zaXplID0gOCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2Ug J2snOiB7CisJCQlib29sIGZvdW5kID0gZmFsc2U7CisJCQlmb3IgKHVpbnQzMl90IGkgPSAwOyBp IDwgQVJSQVlfU0laRShjbG9ja19uYW1lcyk7IGkrKykgeworCQkJCWlmICghc3RyY21wKGNsb2Nr X25hbWVzW2ldLm5hbWUsIG9wdGFyZykpIHsKKwkJCQkJY29ycmVsYXRpb25fY2xvY2tfaWQgPSBj bG9ja19uYW1lc1tpXS5pZDsKKwkJCQkJZm91bmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9 CisJCQl9CisJCQlpZiAoIWZvdW5kKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIGNs b2NrIG5hbWUgJyVzJ1xuIiwgb3B0YXJnKTsKKwkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQkJ fQorCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCAiSW50ZXJu YWwgZXJyb3I6ICIKKwkJCQkidW5leHBlY3RlZCBnZXRvcHQgdmFsdWU6ICVkXG4iLCBvcHQpOwor CQkJdXNhZ2UoYXJndlswXSk7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCisJ Y3R4LmRybV9mZCA9IG9wZW5fcmVuZGVyX25vZGUoJmN0eC5kZXZpZCk7CisJaWYgKGN0eC5kcm1f ZmQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIG9wZW4gZGV2aWNlLlxuIik7 CisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJfQorCisJY3R4LmRldmluZm8gPSBpbnRlbF9nZXRf ZGV2aWNlX2luZm8oY3R4LmRldmlkKTsKKwlpZiAoIWN0eC5kZXZpbmZvKSB7CisJCWZwcmludGYo c3RkZXJyLCAiTm8gZGV2aWNlIGluZm8gZm91bmQuXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwor CWZwcmludGYoc3Rkb3V0LCAiRGV2aWNlIG5hbWU9JXMgZ2VuPSVpIGd0PSVpIGlkPTB4JXhcbiIs CisJCWN0eC5kZXZpbmZvLT5jb2RlbmFtZSwgY3R4LmRldmluZm8tPmdlbiwgY3R4LmRldmluZm8t Pmd0LCBjdHguZGV2aWQpOworCisJY3R4LnRvcG9sb2d5ID0gZ2V0X3RvcG9sb2d5KGN0eC5kcm1f ZmQsICZjdHgudG9wb2xvZ3lfc2l6ZSk7CisJaWYgKCFjdHgudG9wb2xvZ3kpIHsKKwkJZnByaW50 ZihzdGRlcnIsICJVbmFibGUgdG8gcmV0cmlldmUgR1BVIHRvcG9sb2d5IChyZXF1aXJlcyBrZXJu ZWwgNC4xNyspLlxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwljdHgucGVyZiA9IGludGVsX3Bl cmZfZm9yX2ZkKGN0eC5kcm1fZmQpOworCWlmICghY3R4LnBlcmYpIHsKKwkJZnByaW50ZihzdGRl cnIsICJObyBwZXJmIGRhdGEgZm91bmQuXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWludGVs X3BlcmZfbG9hZF9wZXJmX2NvbmZpZ3MoY3R4LnBlcmYsIGN0eC5kcm1fZmQpOworCisJaWYgKG1l dHJpY19uYW1lKSB7CisJCWlmICghc3RyY21wKG1ldHJpY19uYW1lLCAibGlzdCIpKSB7CisJCQlw cmludF9tZXRyaWNfc2V0cyhjdHgucGVyZik7CisJCQlyZXR1cm4gRVhJVF9TVUNDRVNTOworCQl9 CisKKwkJaWd0X2xpc3RfZm9yX2VhY2hfZW50cnkobWV0cmljX3NldCwgJmN0eC5wZXJmLT5tZXRy aWNfc2V0cywgbGluaykgeworCQkJaWYgKCFzdHJjYXNlY21wKG1ldHJpY19zZXQtPnN5bWJvbF9u YW1lLCBtZXRyaWNfbmFtZSkpIHsKKwkJCQljdHgubWV0cmljX3NldCA9IG1ldHJpY19zZXQ7CisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobGlzdF9jb3VudGVycykgeworCQlpZiAo IWN0eC5tZXRyaWNfc2V0KQorCQkJcHJpbnRfbWV0cmljX3NldHNfY291bnRlcnMoY3R4LnBlcmYp OworCQllbHNlCisJCQlwcmludF9tZXRyaWNfc2V0X2NvdW50ZXJzKGN0eC5tZXRyaWNfc2V0KTsK KwkJdGVhcmRvd25fcmVjb3JkaW5nX2NvbnRleHQoJmN0eCk7CisJCXJldHVybiBFWElUX1NVQ0NF U1M7CisJfQorCisJaWYgKCFjdHgubWV0cmljX3NldCkgeworCQlpZiAoIW1ldHJpY19uYW1lKQor CQkJZnByaW50ZihzdGRlcnIsICJObyBtZXRyaWMgc2V0IHNwZWNpZmllZC5cbiIpOworCQllbHNl CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gbWV0cmljIHNldCAnJXMnLlxuIiwgbWV0cmlj X25hbWUpOworCQlwcmludF9tZXRyaWNfc2V0cyhjdHgucGVyZik7CisJCWdvdG8gZmFpbDsKKwl9 CisKKwlpbnRlbF9wZXJmX2xvYWRfcGVyZl9jb25maWdzKGN0eC5wZXJmLCBjdHguZHJtX2ZkKTsK KworCWN0eC50aW1lc3RhbXBfZnJlcXVlbmN5ID0gZ2V0X2RldmljZV90aW1lc3RhbXBfZnJlcXVl bmN5KGN0eC5kZXZpbmZvLCBjdHguZHJtX2ZkKTsKKworCXNpZ25hbChTSUdJTlQsIHNpZ2ludF9o YW5kbGVyKTsKKworCWlmIChjdHguY29tbWFuZF9maWZvKSB7CisJCWlmIChta2ZpZm8oY3R4LmNv bW1hbmRfZmlmbywKKwkJCSAgIFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAg fCBTX0lST1RIIHwgU19JV09USCkgIT0gMCkgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUg dG8gY3JlYXRlIGNvbW1hbmQgZmlmbyAnJXMnOiAlc1xuIiwKKwkJCQljdHguY29tbWFuZF9maWZv LCBzdHJlcnJvcihlcnJubykpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJY3R4LmNvbW1hbmRf Zmlmb19mZCA9IG9wZW4oY3R4LmNvbW1hbmRfZmlmbywgT19SRFdSKTsKKwkJaWYgKGN0eC5jb21t YW5kX2ZpZm9fZmQgPCAwKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGNv bW1hbmQgZmlmbyAnJXMnOiAlc1xuIiwKKwkJCQljdHguY29tbWFuZF9maWZvLCBzdHJlcnJvcihl cnJubykpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJaWYgKGNpcmN1bGFyX3NpemUpIHsK KwkJY3R4LmNpcmN1bGFyX2J1ZmZlci5hbGxvY2F0ZWRfc2l6ZSA9IGNpcmN1bGFyX3NpemU7CisJ CWN0eC5jaXJjdWxhcl9idWZmZXIuZGF0YSA9IG1hbGxvYyhjaXJjdWxhcl9zaXplKTsKKwkJaWYg KCFjdHguY2lyY3VsYXJfYnVmZmVyLmRhdGEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxl IHRvIGFsbG9jYXRlIGNpcmN1bGFyIGJ1ZmZlclxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwor CQljdHgub3V0cHV0X3N0cmVhbSA9IGZvcGVuY29va2llKCZjdHguY2lyY3VsYXJfYnVmZmVyLCAi dysiLAorCQkJCQkJY2lyY3VsYXJfYnVmZmVyX2Z1bmN0aW9ucyk7CisJCWlmICghY3R4Lm91dHB1 dF9zdHJlYW0pIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGNyZWF0ZSBjaXJjdWxh ciBidWZmZXJcbiIpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJaWYgKCFnZXRfY29ycmVsYXRp b25fdGltZXN0YW1wcygmaW5pdGlhbF9jb3JyZWxhdGlvbiwgY3R4LmRybV9mZCkpIHsKKwkJCWZw cmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGNvcnJlbGF0aW9uIHRpbWVzdGFtcHNcbiIpOworCQkJ Z290byBmYWlsOworCQl9CisKKwkJd3JpdGVfY29ycmVsYXRpb25fdGltZXN0YW1wcyhjdHgub3V0 cHV0X3N0cmVhbSwgY3R4LmRybV9mZCk7CisJCWZwcmludGYoc3Rkb3V0LAorCQkJIlJlY29kaW5n IGluIGludGVybmFsIGNpcmN1bGFyIGJ1ZmZlci5cbiIKKwkJCSJVc2UgaTkxNS1wZXJmLWNvbnRy b2wgdG8gc25hcHNob3QgaW50byBmaWxlLlxuIik7CisJfSBlbHNlIHsKKwkJb3V0cHV0ID0gZm9w ZW4ob3V0cHV0X2ZpbGUsICJ3KyIpOworCQlpZiAoIW91dHB1dCkgeworCQkJZnByaW50ZihzdGRl cnIsICJVbmFibGUgdG8gb3BlbiBvdXRwdXQgZmlsZSAnJXMnXG4iLAorCQkJCW91dHB1dF9maWxl KTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWlmICghd3JpdGVfdmVyc2lvbihvdXRwdXQsICZj dHgpIHx8CisJCSAgICAhd3JpdGVfaGVhZGVyKG91dHB1dCwgJmN0eCkgfHwKKwkJICAgICF3cml0 ZV90b3BvbG9neShvdXRwdXQsICZjdHgpIHx8CisJCSAgICAhd3JpdGVfY29ycmVsYXRpb25fdGlt ZXN0YW1wcyhvdXRwdXQsIGN0eC5kcm1fZmQpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlVuYWJs ZSB0byB3cml0ZSBoZWFkZXIgaW4gZmlsZSAnJXMnXG4iLAorCQkJCW91dHB1dF9maWxlKTsKKwkJ CWdvdG8gZmFpbDsKKwkJfQorCisJCWN0eC5vdXRwdXRfc3RyZWFtID0gb3V0cHV0OworCQlmcHJp bnRmKHN0ZG91dCwgIldyaXRpbmcgcmVjb2RpbmcgdG8gJXNcbiIsIG91dHB1dF9maWxlKTsKKwl9 CisKKwlpZiAoY3R4Lm1ldHJpY19zZXQtPnBlcmZfb2FfbWV0cmljc19zZXQgPT0gMCkgeworCQlm cHJpbnRmKHN0ZGVyciwKKwkJCSJVbmFibGUgdG8gbG9hZCBwZXJmb3JtYW5jZSBjb25maWd1cmF0 aW9uLCBjb25zaWRlciBydW5uaW5nOlxuIgorCQkJIiAgIHN5c2N0bCBkZXYuaTkxNS5wZXJmX3N0 cmVhbV9wYXJhbm9pZD0wXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWN0eC5vYV9leHBvbmVu dCA9IG9hX2V4cG9uZW50X2Zvcl9wZXJpb2QoY3R4LnRpbWVzdGFtcF9mcmVxdWVuY3ksIHBlcmZf cGVyaW9kKTsKKwlmcHJpbnRmKHN0ZG91dCwgIk9wZW5pbmcgcGVyZiBzdHJlYW0gd2l0aCBtZXRy aWNfaWQ9JWx1IG9hX2V4cG9uZW50PSV1XG4iLAorCQljdHgubWV0cmljX3NldC0+cGVyZl9vYV9t ZXRyaWNzX3NldCwgY3R4Lm9hX2V4cG9uZW50KTsKKworCWN0eC5wZXJmX2ZkID0gcGVyZl9vcGVu KCZjdHgpOworCWlmIChjdHgucGVyZl9mZCA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJVbmFi bGUgdG8gb3BlbiBpOTE1IHBlcmYgc3RyZWFtOiAlc1xuIiwKKwkJCXN0cmVycm9yKGVycm5vKSk7 CisJCWdvdG8gZmFpbDsKKwl9CisKKwljb3JyX3BlcmlvZF9ucyA9IGNvcnJfcGVyaW9kICogMTAw MDAwMDAwMHVsOworCXBvbGxfdGltZV9ucyA9IGNvcnJfcGVyaW9kX25zOworCisJd2hpbGUgKCFx dWl0KSB7CisJCXN0cnVjdCBwb2xsZmQgcG9sbGZkWzJdID0geworCQkJeyAgICAgICAgIGN0eC5w ZXJmX2ZkLCBQT0xMSU4sIDAgfSwKKwkJCXsgY3R4LmNvbW1hbmRfZmlmb19mZCwgUE9MTElOLCAw IH0sCisJCX07CisJCXVpbnQ2NF90IGVsYXBzZWRfbnM7CisJCWludCByZXQ7CisKKwkJaWd0X2dl dHRpbWUoJm5vdyk7CisJCXJldCA9IHBvbGwocG9sbGZkLCBjdHguY29tbWFuZF9maWZvX2ZkICE9 IC0xID8gMiA6IDEsIHBvbGxfdGltZV9ucyAvIDEwMDAwMDApOworCQlpZiAocmV0IDwgMCAmJiBl cnJubyAhPSBFSU5UUikgeworCQkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcG9sbCBpOTE1 LXBlcmYgc3RyZWFtOiAlc1xuIiwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQkJYnJlYWs7CisJ CX0KKworCQlpZiAocmV0ID4gMCkgeworCQkJaWYgKHBvbGxmZFswXS5yZXZlbnRzICYgUE9MTElO KSB7CisJCQkJaWYgKCF3cml0ZV9pOTE1X3BlcmZfZGF0YShjdHgub3V0cHV0X3N0cmVhbSwgY3R4 LnBlcmZfZmQpKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIGk5MTUt cGVyZiBkYXRhOiAlc1xuIiwKKwkJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCX0KKworCQkJaWYgKHBvbGxmZFsxXS5yZXZlbnRzICYgUE9MTElOKSB7CisJCQkJ cmVhZF9jb21tYW5kX2ZpbGUoJmN0eCk7CisJCQl9CisJCX0KKworCQllbGFwc2VkX25zID0gaWd0 X25zZWNfZWxhcHNlZCgmbm93KTsKKwkJaWYgKGVsYXBzZWRfbnMgPiBwb2xsX3RpbWVfbnMpIHsK KwkJCXBvbGxfdGltZV9ucyA9IGNvcnJfcGVyaW9kX25zOworCQkJaWYgKCF3cml0ZV9jb3JyZWxh dGlvbl90aW1lc3RhbXBzKGN0eC5vdXRwdXRfc3RyZWFtLCBjdHguZHJtX2ZkKSkgeworCQkJCWZw cmludGYoc3RkZXJyLAorCQkJCQkiRmFpbGVkIHRvIHdyaXRlIGk5MTUgdGltZXN0YW1wIGNvcnJl bGF0aW9uIGRhdGE6ICVzXG4iLAorCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJCWJyZWFrOwor CQkJfQorCQl9IGVsc2UgeworCQkJcG9sbF90aW1lX25zIC09IGVsYXBzZWRfbnM7CisJCX0KKwl9 CisKKwlmcHJpbnRmKHN0ZG91dCwgIkV4aXRpbmcuLi5cbiIpOworCisJaWYgKCF3cml0ZV9jb3Jy ZWxhdGlvbl90aW1lc3RhbXBzKGN0eC5vdXRwdXRfc3RyZWFtLCBjdHguZHJtX2ZkKSkgeworCQlm cHJpbnRmKHN0ZGVyciwKKwkJCSJGYWlsZWQgdG8gd3JpdGUgZmluYWwgaTkxNSB0aW1lc3RhbXAg Y29ycmVsYXRpb24gZGF0YTogJXNcbiIsCisJCQlzdHJlcnJvcihlcnJubykpOworCX0KKworCXRl YXJkb3duX3JlY29yZGluZ19jb250ZXh0KCZjdHgpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsK KworIGZhaWw6CisJdGVhcmRvd25fcmVjb3JkaW5nX2NvbnRleHQoJmN0eCk7CisKKwlyZXR1cm4g RVhJVF9GQUlMVVJFOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9y ZWNvcmRlcl9jb21tYW5kcy5oIGIvdG9vbHMvaTkxNS1wZXJmL2k5MTVfcGVyZl9yZWNvcmRlcl9j b21tYW5kcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi40ODU1ZDgwZgot LS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2k5MTUtcGVyZi9pOTE1X3BlcmZfcmVjb3JkZXJfY29t bWFuZHMuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks IHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAq IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisg KiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2Rl ZmluZSBJOTE1X1BFUkZfUkVDT1JEX0ZJRk9fUEFUSCAiL3RtcC8uaTkxNS1wZXJmLXJlY29yZCIK KworZW51bSByZWNvcmRlcl9jb21tYW5kIHsKKwlSRUNPUkRFUl9DT01NQU5EX0RVTVAgPSAxLAor CVJFQ09SREVSX0NPTU1BTkRfUVVJVCwKK307CisKK3N0cnVjdCByZWNvcmRlcl9jb21tYW5kX2Jh c2UgeworCXVpbnQzMl90IGNvbW1hbmQ7CisJdWludDMyX3Qgc2l6ZTsKK307CisKK3N0cnVjdCBy ZWNvcmRlcl9jb21tYW5kX2R1bXAgeworCXVpbnQ4X3QgcGF0aFswXTsKK307CmRpZmYgLS1naXQg YS90b29scy9pOTE1LXBlcmYvbWVzb24uYnVpbGQgYi90b29scy9pOTE1LXBlcmYvbWVzb24uYnVp bGQKaW5kZXggMGViZGQxODUuLjk4ODRkZmQ5IDEwMDY0NAotLS0gYS90b29scy9pOTE1LXBlcmYv bWVzb24uYnVpbGQKKysrIGIvdG9vbHMvaTkxNS1wZXJmL21lc29uLmJ1aWxkCkBAIC0zLDMgKzMs MTQgQEAgZXhlY3V0YWJsZSgnaTkxNS1wZXJmLWNvbmZpZ3MnLAogICAgICAgICAgICBpbmNsdWRl X2RpcmVjdG9yaWVzOiBpbmMsCiAgICAgICAgICAgIGRlcGVuZGVuY2llczogW2xpYl9pZ3RfY2hp cHNldCwgbGliX2lndF9pOTE1X3BlcmZdLAogICAgICAgICAgICBpbnN0YWxsOiB0cnVlKQorCitl eGVjdXRhYmxlKCdpOTE1LXBlcmYtcmVjb3JkZXInLAorICAgICAgICAgICBbICdpOTE1X3BlcmZf cmVjb3JkZXIuYycgXSwKKyAgICAgICAgICAgaW5jbHVkZV9kaXJlY3RvcmllczogaW5jLAorICAg ICAgICAgICBkZXBlbmRlbmNpZXM6IFtsaWJfaWd0LCBsaWJfaWd0X2k5MTVfcGVyZl0sCisgICAg ICAgICAgIGluc3RhbGw6IHRydWUpCisKK2V4ZWN1dGFibGUoJ2k5MTUtcGVyZi1jb250cm9sJywK KyAgICAgICAgICAgWyAnaTkxNV9wZXJmX2NvbnRyb2wuYycgXSwKKyAgICAgICAgICAgaW5jbHVk ZV9kaXJlY3RvcmllczogaW5jLAorICAgICAgICAgICBpbnN0YWxsOiB0cnVlKQotLSAKMi4yNS4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK